From 306b5784f4fbde56ca4a41a533c79cfdfe862f33 Mon Sep 17 00:00:00 2001 From: Walid Chtioui Date: Tue, 5 May 2026 17:01:07 +0200 Subject: [PATCH 01/81] Add initial BC1 decoder Signed-off-by: Walid Chtioui --- external/bc7enc_rdo/CMakeLists.txt | 108 + external/bc7enc_rdo/LICENSE | 68 + external/bc7enc_rdo/README.md | 165 + external/bc7enc_rdo/bc7decomp.cpp | 679 +++ external/bc7enc_rdo/bc7decomp.h | 179 + external/bc7enc_rdo/bc7decomp_ref.cpp | 431 ++ external/bc7enc_rdo/bc7e.ispc | 4952 +++++++++++++++++ external/bc7enc_rdo/bc7enc.cpp | 2580 +++++++++ external/bc7enc_rdo/bc7enc.h | 123 + external/bc7enc_rdo/build_msvc.bat | 1 + external/bc7enc_rdo/dds_defs.h | 286 + external/bc7enc_rdo/ert.cpp | 704 +++ external/bc7enc_rdo/ert.h | 81 + external/bc7enc_rdo/lodepng.cpp | 6235 ++++++++++++++++++++++ external/bc7enc_rdo/lodepng.h | 1761 ++++++ external/bc7enc_rdo/miniz.h | 2541 +++++++++ external/bc7enc_rdo/rdo_bc_encoder.cpp | 1270 +++++ external/bc7enc_rdo/rdo_bc_encoder.h | 250 + external/bc7enc_rdo/rgbcx.cpp | 3083 +++++++++++ external/bc7enc_rdo/rgbcx.h | 473 ++ external/bc7enc_rdo/rgbcx_table4.h | 969 ++++ external/bc7enc_rdo/rgbcx_table4_small.h | 969 ++++ external/bc7enc_rdo/test.cpp | 872 +++ external/bc7enc_rdo/utils.cpp | 901 ++++ external/bc7enc_rdo/utils.h | 2617 +++++++++ lib/CMakeLists.txt | 11 + lib/include/ktx.h | 3 + lib/src/bcn_codec.cpp | 689 +++ tests/resources/ktx2/color_grid_bc1.ktx2 | 3 + tests/texturetests/texturetests.cc | 89 + 30 files changed, 33093 insertions(+) create mode 100644 external/bc7enc_rdo/CMakeLists.txt create mode 100644 external/bc7enc_rdo/LICENSE create mode 100644 external/bc7enc_rdo/README.md create mode 100644 external/bc7enc_rdo/bc7decomp.cpp create mode 100644 external/bc7enc_rdo/bc7decomp.h create mode 100644 external/bc7enc_rdo/bc7decomp_ref.cpp create mode 100644 external/bc7enc_rdo/bc7e.ispc create mode 100644 external/bc7enc_rdo/bc7enc.cpp create mode 100644 external/bc7enc_rdo/bc7enc.h create mode 100644 external/bc7enc_rdo/build_msvc.bat create mode 100644 external/bc7enc_rdo/dds_defs.h create mode 100644 external/bc7enc_rdo/ert.cpp create mode 100644 external/bc7enc_rdo/ert.h create mode 100644 external/bc7enc_rdo/lodepng.cpp create mode 100644 external/bc7enc_rdo/lodepng.h create mode 100644 external/bc7enc_rdo/miniz.h create mode 100644 external/bc7enc_rdo/rdo_bc_encoder.cpp create mode 100644 external/bc7enc_rdo/rdo_bc_encoder.h create mode 100644 external/bc7enc_rdo/rgbcx.cpp create mode 100644 external/bc7enc_rdo/rgbcx.h create mode 100644 external/bc7enc_rdo/rgbcx_table4.h create mode 100644 external/bc7enc_rdo/rgbcx_table4_small.h create mode 100644 external/bc7enc_rdo/test.cpp create mode 100644 external/bc7enc_rdo/utils.cpp create mode 100644 external/bc7enc_rdo/utils.h create mode 100644 lib/src/bcn_codec.cpp create mode 100644 tests/resources/ktx2/color_grid_bc1.ktx2 diff --git a/external/bc7enc_rdo/CMakeLists.txt b/external/bc7enc_rdo/CMakeLists.txt new file mode 100644 index 0000000000..1ec2e73721 --- /dev/null +++ b/external/bc7enc_rdo/CMakeLists.txt @@ -0,0 +1,108 @@ +project(bc7enc) + +cmake_minimum_required(VERSION 2.8) +option(BUILD_X64 "build 64-bit" TRUE) +option(SUPPORT_BC7E "support BC7E (requires ispc)" FALSE) + +message("Initial BUILD_X64=${BUILD_X64}") +message("Initial CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}") +message("Initial SUPPORT_BC7E=${SUPPORT_BC7E}") + +if( NOT CMAKE_BUILD_TYPE ) + set( CMAKE_BUILD_TYPE Release ) +endif( NOT CMAKE_BUILD_TYPE ) + +message( ${PROJECT_NAME} " build type: " ${CMAKE_BUILD_TYPE} ) + +if (BUILD_X64) + message("Building 64-bit") +else() + message("Building 32-bit") +endif(BUILD_X64) + +if (NOT MSVC) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -fopenmp") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -fopenmp") + + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fopenmp") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fopenmp") +else() + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /openmp /W4") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /openmp /W4") + + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /openmp /W4") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /openmp /W4") +endif() + +if (SUPPORT_BC7E) + if (NOT MSVC) + add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/bc7e.o ${CMAKE_SOURCE_DIR}/bc7e_avx.o ${CMAKE_SOURCE_DIR}/bc7e_sse2.o ${CMAKE_SOURCE_DIR}/bc7e_sse4.o ${CMAKE_SOURCE_DIR}/bc7e_avx2.o + COMMAND ispc -g -O2 ${CMAKE_SOURCE_DIR}/bc7e.ispc -o ${CMAKE_SOURCE_DIR}/bc7e.o -h ${CMAKE_SOURCE_DIR}/bc7e_ispc.h --target=sse2,sse4,avx,avx2 --opt=fast-math --opt=disable-assertions + DEPENDS bc7e.ispc) + else() + add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/bc7e.obj ${CMAKE_SOURCE_DIR}/bc7e_avx.obj ${CMAKE_SOURCE_DIR}/bc7e_sse2.obj ${CMAKE_SOURCE_DIR}/bc7e_sse4.obj ${CMAKE_SOURCE_DIR}/bc7e_avx2.obj + COMMAND ispc -g -O2 ${CMAKE_SOURCE_DIR}/bc7e.ispc -o ${CMAKE_SOURCE_DIR}/bc7e.obj -h ${CMAKE_SOURCE_DIR}/bc7e_ispc.h --target=sse2,sse4,avx,avx2 --opt=fast-math --opt=disable-assertions + DEPENDS bc7e.ispc) + endif() +endif() + +# -fno-strict-aliasing shouldn't be necessary, it's here because that is what MSVC uses by default and that's what I've tested with the most. +if (NOT MSVC) + set(GCC_COMPILE_FLAGS "-fno-strict-aliasing -Wall -Wextra") + if (NOT BUILD_X64) + set(GCC_COMPILE_FLAGS "${GCC_COMPILE_FLAGS} -m32") + endif() +endif() + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COMPILE_FLAGS}") +set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${GCC_COMPILE_FLAGS}") +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${GCC_COMPILE_FLAGS} -D_DEBUG") + +if (SUPPORT_BC7E) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COMPILE_FLAGS} -DSUPPORT_BC7E=1") +else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COMPILE_FLAGS}") +endif() + +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${GCC_COMPILE_FLAGS}") +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${GCC_COMPILE_FLAGS} -D_DEBUG") + +set (BC7ENC_SRC_LIST ${COMMON_SRC_LIST} + bc7enc.cpp + bc7enc.h + bc7decomp.cpp + bc7decomp_ref.cpp + bc7decomp.h + lodepng.cpp + lodepng.h + test.cpp + rgbcx.cpp + rgbcx.h + rgbcx_table4.h + rgbcx_table4_small.h + utils.cpp + utils.h + miniz.h + dds_defs.h + ert.cpp + ert.h + rdo_bc_encoder.cpp + rdo_bc_encoder.h + bc7e.ispc + ) + +if (NOT SUPPORT_BC7E) + add_executable(bc7enc ${BC7ENC_SRC_LIST}) +else() + if (NOT MSVC) + add_executable(bc7enc ${BC7ENC_SRC_LIST} ${CMAKE_SOURCE_DIR}/bc7e.o ${CMAKE_SOURCE_DIR}/bc7e_avx.o ${CMAKE_SOURCE_DIR}/bc7e_avx2.o ${CMAKE_SOURCE_DIR}/bc7e_sse2.o ${CMAKE_SOURCE_DIR}/bc7e_sse4.o) + else() + add_executable(bc7enc ${BC7ENC_SRC_LIST} ${CMAKE_SOURCE_DIR}/bc7e.obj ${CMAKE_SOURCE_DIR}/bc7e_avx.obj ${CMAKE_SOURCE_DIR}/bc7e_avx2.obj ${CMAKE_SOURCE_DIR}/bc7e_sse2.obj ${CMAKE_SOURCE_DIR}/bc7e_sse4.obj) + endif() +endif() + +if (NOT MSVC) + target_link_libraries(bc7enc m) +endif() + + diff --git a/external/bc7enc_rdo/LICENSE b/external/bc7enc_rdo/LICENSE new file mode 100644 index 0000000000..b3b1f69bfe --- /dev/null +++ b/external/bc7enc_rdo/LICENSE @@ -0,0 +1,68 @@ +If you use this software in a product, attribution / credits is requested but not required. + +bc7e.ispc uses the Apache 2.0 license and is Copyright (C) 2018-2021 Binomial LLC. +LodePNG is Copyright (c) 2005-2016 Lode Vandevenne. See LodePNG.cpp for its license. + +All other source code files in this repo are available under 2 licenses -- choose whichever you prefer. + +ALTERNATIVE A - MIT License +Copyright(c) 2020-2021 Richard Geldreich, Jr. +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. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain(www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non - commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain.We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors.We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +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 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. + +------------------------------------------------------------------------------ + +LodePNG version 20161127 + +Copyright (c) 2005-2016 Lode Vandevenne + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + diff --git a/external/bc7enc_rdo/README.md b/external/bc7enc_rdo/README.md new file mode 100644 index 0000000000..0697fe78e8 --- /dev/null +++ b/external/bc7enc_rdo/README.md @@ -0,0 +1,165 @@ +bc7enc - Fast BC1-7 GPU texture encoders with Rate Distortion Optimization (RDO) + +*Note: An even faster alternative to bc7e.ispc is now available - see [bc7f](https://richg42.blogspot.com/2026/01/bc7f-new-real-time-analytical-bc7.html) (or [here](https://github.com/BinomialLLC/basis_universal/wiki/Transcoder-Internals-Analytical-Real-Time-Encoders)). We've integrated bc7f into this repo for testing, and when we get the time we'll release the integration here.* + +This repo contains fast texture encoders for BC1-7. All formats support a simple post-processing transform on the encoded texture data designed to trade off quality for smaller compressed file sizes using LZ compression. Significant (10-50%) size reductions are possible. The BC7 encoder also supports a "reduced entropy" mode using the -e option which causes the output to be biased/weighted in various ways which minimally impact quality, which results in 5-10% smaller file sizes with no slowdowns in encoding time. + +Currently, the entropy reduction transform is tuned for Deflate, LZHAM, or LZMA. The method used to control the rate-distortion tradeoff is the classic Lagrangian multiplier RDO method, modified to favor MSE on very smooth blocks. Rate is approximated using a fixed Deflate model. The post-processing transform applied to the encoded texture data tries to introduce the longest match it can into every encoded output block. It also tries to continue matches between blocks and (specifically for codecs like LZHAM/LZMA/Zstd) it tries to utilize REP0 (repeat) matches. + +You can see examples of the RDO BC7 encoder's current output [here](https://richg42.blogspot.com/2021/02/more-rdo-bc7-encoding.html). Some examples on how to use the command line tool are on my blog, [here](https://richg42.blogspot.com/2021/02/how-to-use-bc7encrdo.html). + +This repo contains both [bc7e.ispc](https://github.com/BinomialLLC/bc7e) and its distantly related but weaker 4 mode only non-ispc variant, bc7enc.cpp. By default, if you set SUPPORT_BC7E=TRUE when running cmake, you get bc7e.ispc, otherwise you get bc7enc.cpp. (The -C option forces bc7enc.cpp.) bc7e supports all BC7 modes and features, but doesn't yet support reduced entropy BC7 encoding. bc7enc.cpp supports optional reduced entropy encoding (using -e with the command line tool). RDO BC7 is supported when using either encoder, however. + +The next major focus will be improving the default smooth block handling and improving rate distorton performance. + +This repo was originally derived from [bc7enc](https://github.com/richgel999/bc7enc) and [bc7e](https://github.com/BinomialLLC/bc7e). Note this repo contains the latest version of bc7e.ispc, which has a determinism bug fix. + +**Note: If you use this software in a product, attribution / credits is requested but not required. Thanks!** + +### Compiling + +This build has been tested with MSVC 2019 x64 and clang 6.0.0 under Ubuntu v18.04. + +To compile with bc7e.ispc (on Linux this requires [Intel's ISPC compiler](https://ispc.github.io/downloads.html) to be in your path - recommended): + +``` +cmake -D SUPPORT_BC7E=TRUE . +make +``` + +To compile without BC7E: + +``` +cmake . +make +``` + +Note the MSVC and Linux builds enable OpenMP for faster compression. + +### Examples + +The [.DDS](https://docs.microsoft.com/en-us/windows/win32/direct3ddds/dx-graphics-dds-pguide) output files can be loaded/viewed using tools like [AMD Compressonator](https://gpuopen.com/compressonator/). + +To encode to non-RDO BC7 using BC7E, highest quality, linear RGB(A) metrics: + +``` +./bc7enc blah.png +``` + +To encode to non-RDO BC7 using BC7E, highest quality, using perceptual (scaled YCbCr) colorspace error metrics: + +``` +./bc7enc blah.png -s +``` + +To encode to RDO BC7 using BC7E, highest quality, lambda=.5, linear metrics (perceptual colorspace metrics are always automatically disabled when -z is specified), with a balance of encoding performance vs. RDO efficiency: + +``` +./bc7enc blah.png -z.5 +``` + +To encode to RDO BC7 using BC7E, lower baseline quality (-u4) for faster encoding, lambda=.5, and with faster encoding (only inject one match vs two, with a tiny RDO lookback window size of 16 bytes): + +``` +./bc7enc blah.png -u4 -z.5 -ze -zc16 +``` + +To encode to non-RDO BC7 using entropy reduced or quantized/weighted BC7 (no slowdown vs. non-RDO bc7enc.cpp for BC7, slightly reduced quality, but 5-10% better LZ compression, only uses 2 or 4 BC7 modes): + +``` +./bc7enc blah.png -C -e +``` + +To encode to RDO BC7 using the entropy reduction transform combined with reduced entropy BC7 encoding, with a slightly larger window size than the default which is 128 bytes: + +``` +./bc7enc -zc256 blah.png -C -e -z1.0 +``` + +Same as before, but higher compression (allow 2 matches per block instead of 1): + +``` +./bc7enc -zc256 blah.png -C -e -z1.0 -zn +``` + +Same, except disable ultra-smooth block handling: + +``` +./bc7enc -zc256 blah.png -C -e -z1.0 -zu +``` + +To encode to RDO BC7 using the entropy reduction transform at lower quality, combined with reduced entropy BC7 encoding, with a slightly larger window size than the default which is 128 bytes: + +``` +./bc7enc -zc256 blah.png -C -e -z2.0 +``` + +To encode to RDO BC7 using the entropy reduction transform at higher effectivenes using a larger window size, without using reduced entropy BC7 encoding: + +``` +./bc7enc -zc1024 blah.png -z1.0 +``` + +To encode to RDO BC7 using the entropy reduction transform at higher effectivenes using a larger window size, with a manually specified max smooth block max error scale: + +``` +./bc7enc -zc1024 blah.png -z2.0 -zb30.0 +``` + +To encode to RDO BC7 using the entropy reduction transform at higher effectivenes using a larger window size, using only mode 6 (more block artifacts, but better rate-distortion performance as measured by PSNR): + +``` +./bc7enc -zc1024 blah.png -6 -z1.0 -e +``` + +To encode to BC1: +``` +./bc7enc -1 blah.png +``` + +To encode to BC1 with Rate Distortion Optimization (RDO) at lambda=1.0: +``` +./bc7enc -1 -z1.0 blah.png +``` + +The -z option controls lambda, or the rate vs. distortion tradeoff. 0 = maximum quality, higher values=lower bitrates but lower quality. Try values [.25-8]. + +To encode to BC1 with RDO, with RDO debug output, to monitor the percentage of blocks impacted: +``` +./bc7enc -1 -z1.0 -zd blah.png +``` + +To encode to BC1 with RDO with a higher then default smooth block scale factor: +``` +./bc7enc -1 -z1.0 -zb40.0 blah.png +``` + +Use -zb1.0 to disable smooth block error scaling completely, which increases RDO performance but can result in noticeable artifacts on smooth/flat blocks at higher lambdas. + +Use -zc# to control the RDO window size in bytes. Good values to try are 16-8192. +Use -zt to disable RDO multithreading. + +To encode to BC1 with RDO at the highest achievable quality/effectiveness (this is extremely slow): + +``` +./bc7enc -1 -z1.0 -zc32768 blah.png +``` + +This sets the window size to 32KB (the highest setting that makes sense for Deflate). Window sizes of 2KB (the default) to 8KB are way faster and in practice are almost as effective. The maximum window size setting supported by the command line tool is 64KB, but this would be very slow. + +For even higher quality per bit (this is incredibly slow): +``` +./bc7enc -1 -z1.0 -zc32768 -zm blah.png +``` + +### Dependencies +There are no 3rd party code or library dependencies. utils.cpp/.h is only needed by the example command line tool. It uses C++11. The individual .cpp files are designed to be easily dropped into other codebases. + +For RDO post-processing of any block-based format: ert.cpp/.h. You provide this function an array of encoded blocks, an array of source/original 32bpp blocks, some parameters, and a pointer to a block decoder function for your format as a callback. It must return false if the passed in block data is invalid. (Make sure you *really* validate the block's data, because the ERT post-processor will inevitably call your callback with invalid blocks.) This transform works on most other texture formats, such as ETC1/2, EAC, and ASTC. The ERT works on block sizes ranging from 1x1 to 12x12. This file has no other dependencies apart from utils.cpp/h. + +For BC1-5 encoding/decoding: rgbcx.cpp/.h + +For BC7 encoding: bc7enc.cpp/.h + +For BC7 decoding: bc7decomp.cpp/.h + diff --git a/external/bc7enc_rdo/bc7decomp.cpp b/external/bc7enc_rdo/bc7decomp.cpp new file mode 100644 index 0000000000..cf1574af68 --- /dev/null +++ b/external/bc7enc_rdo/bc7decomp.cpp @@ -0,0 +1,679 @@ +// File: bc7decomp.c - Richard Geldreich, Jr. 3/31/2020 - MIT license or public domain (see end of file) +#include "bc7decomp.h" +#include + +#if (defined(_M_AMD64) || defined(_M_X64) || defined(__SSE2__)) +# define BC7DECOMP_USE_SSE2 +#endif + +#ifdef BC7DECOMP_USE_SSE2 +#include +#include +#endif + +namespace bc7decomp +{ + +#ifdef BC7DECOMP_USE_SSE2 + const __m128i g_bc7_weights4_sse2[8] = + { + _mm_set_epi16(4, 4, 4, 4, 0, 0, 0, 0), + _mm_set_epi16(13, 13, 13, 13, 9, 9, 9, 9), + _mm_set_epi16(21, 21, 21, 21, 17, 17, 17, 17), + _mm_set_epi16(30, 30, 30, 30, 26, 26, 26, 26), + _mm_set_epi16(38, 38, 38, 38, 34, 34, 34, 34), + _mm_set_epi16(47, 47, 47, 47, 43, 43, 43, 43), + _mm_set_epi16(55, 55, 55, 55, 51, 51, 51, 51), + _mm_set_epi16(64, 64, 64, 64, 60, 60, 60, 60), + }; +#endif + +const uint32_t g_bc7_weights2[4] = { 0, 21, 43, 64 }; +const uint32_t g_bc7_weights3[8] = { 0, 9, 18, 27, 37, 46, 55, 64 }; +const uint32_t g_bc7_weights4[16] = { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }; + +const uint8_t g_bc7_partition2[64 * 16] = +{ + 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1, 0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1, 0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1, 0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1, 0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1, 0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1, 0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, + 0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1, 0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0, 0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0, 0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0, 0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1, + 0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0, 0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0, 0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0, 0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0, 0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0, 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0, 0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0, 0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0, + 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1, 0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0, 0,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0, 0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0, 0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0, 0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1, 0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1, + 0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0, 0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0, 0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0, 0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0, 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0, 0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1, 0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1, 0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0, + 0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0, 0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0, 0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0, 0,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1, 0,1,1,0,0,0,1,1,1,0,0,1,1,1,0,0, 0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0, + 0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,1, 0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1, 0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1, 0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1, 0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1, 0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0, 0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0, 0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1 +}; + +const uint8_t g_bc7_partition3[64 * 16] = +{ + 0,0,1,1,0,0,1,1,0,2,2,1,2,2,2,2, 0,0,0,1,0,0,1,1,2,2,1,1,2,2,2,1, 0,0,0,0,2,0,0,1,2,2,1,1,2,2,1,1, 0,2,2,2,0,0,2,2,0,0,1,1,0,1,1,1, 0,0,0,0,0,0,0,0,1,1,2,2,1,1,2,2, 0,0,1,1,0,0,1,1,0,0,2,2,0,0,2,2, 0,0,2,2,0,0,2,2,1,1,1,1,1,1,1,1, 0,0,1,1,0,0,1,1,2,2,1,1,2,2,1,1, + 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2, 0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2, 0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2, 0,0,1,2,0,0,1,2,0,0,1,2,0,0,1,2, 0,1,1,2,0,1,1,2,0,1,1,2,0,1,1,2, 0,1,2,2,0,1,2,2,0,1,2,2,0,1,2,2, 0,0,1,1,0,1,1,2,1,1,2,2,1,2,2,2, 0,0,1,1,2,0,0,1,2,2,0,0,2,2,2,0, + 0,0,0,1,0,0,1,1,0,1,1,2,1,1,2,2, 0,1,1,1,0,0,1,1,2,0,0,1,2,2,0,0, 0,0,0,0,1,1,2,2,1,1,2,2,1,1,2,2, 0,0,2,2,0,0,2,2,0,0,2,2,1,1,1,1, 0,1,1,1,0,1,1,1,0,2,2,2,0,2,2,2, 0,0,0,1,0,0,0,1,2,2,2,1,2,2,2,1, 0,0,0,0,0,0,1,1,0,1,2,2,0,1,2,2, 0,0,0,0,1,1,0,0,2,2,1,0,2,2,1,0, + 0,1,2,2,0,1,2,2,0,0,1,1,0,0,0,0, 0,0,1,2,0,0,1,2,1,1,2,2,2,2,2,2, 0,1,1,0,1,2,2,1,1,2,2,1,0,1,1,0, 0,0,0,0,0,1,1,0,1,2,2,1,1,2,2,1, 0,0,2,2,1,1,0,2,1,1,0,2,0,0,2,2, 0,1,1,0,0,1,1,0,2,0,0,2,2,2,2,2, 0,0,1,1,0,1,2,2,0,1,2,2,0,0,1,1, 0,0,0,0,2,0,0,0,2,2,1,1,2,2,2,1, + 0,0,0,0,0,0,0,2,1,1,2,2,1,2,2,2, 0,2,2,2,0,0,2,2,0,0,1,2,0,0,1,1, 0,0,1,1,0,0,1,2,0,0,2,2,0,2,2,2, 0,1,2,0,0,1,2,0,0,1,2,0,0,1,2,0, 0,0,0,0,1,1,1,1,2,2,2,2,0,0,0,0, 0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0, 0,1,2,0,2,0,1,2,1,2,0,1,0,1,2,0, 0,0,1,1,2,2,0,0,1,1,2,2,0,0,1,1, + 0,0,1,1,1,1,2,2,2,2,0,0,0,0,1,1, 0,1,0,1,0,1,0,1,2,2,2,2,2,2,2,2, 0,0,0,0,0,0,0,0,2,1,2,1,2,1,2,1, 0,0,2,2,1,1,2,2,0,0,2,2,1,1,2,2, 0,0,2,2,0,0,1,1,0,0,2,2,0,0,1,1, 0,2,2,0,1,2,2,1,0,2,2,0,1,2,2,1, 0,1,0,1,2,2,2,2,2,2,2,2,0,1,0,1, 0,0,0,0,2,1,2,1,2,1,2,1,2,1,2,1, + 0,1,0,1,0,1,0,1,0,1,0,1,2,2,2,2, 0,2,2,2,0,1,1,1,0,2,2,2,0,1,1,1, 0,0,0,2,1,1,1,2,0,0,0,2,1,1,1,2, 0,0,0,0,2,1,1,2,2,1,1,2,2,1,1,2, 0,2,2,2,0,1,1,1,0,1,1,1,0,2,2,2, 0,0,0,2,1,1,1,2,1,1,1,2,0,0,0,2, 0,1,1,0,0,1,1,0,0,1,1,0,2,2,2,2, 0,0,0,0,0,0,0,0,2,1,1,2,2,1,1,2, + 0,1,1,0,0,1,1,0,2,2,2,2,2,2,2,2, 0,0,2,2,0,0,1,1,0,0,1,1,0,0,2,2, 0,0,2,2,1,1,2,2,1,1,2,2,0,0,2,2, 0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,2, 0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,1, 0,2,2,2,1,2,2,2,0,2,2,2,1,2,2,2, 0,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2, 0,1,1,1,2,0,1,1,2,2,0,1,2,2,2,0, +}; + +const uint8_t g_bc7_table_anchor_index_second_subset[64] = { 15,15,15,15,15,15,15,15, 15,15,15,15,15,15,15,15, 15, 2, 8, 2, 2, 8, 8,15, 2, 8, 2, 2, 8, 8, 2, 2, 15,15, 6, 8, 2, 8,15,15, 2, 8, 2, 2, 2,15,15, 6, 6, 2, 6, 8,15,15, 2, 2, 15,15,15,15,15, 2, 2,15 }; + +const uint8_t g_bc7_table_anchor_index_third_subset_1[64] = +{ + 3, 3,15,15, 8, 3,15,15, 8, 8, 6, 6, 6, 5, 3, 3, 3, 3, 8,15, 3, 3, 6,10, 5, 8, 8, 6, 8, 5,15,15, 8,15, 3, 5, 6,10, 8,15, 15, 3,15, 5,15,15,15,15, 3,15, 5, 5, 5, 8, 5,10, 5,10, 8,13,15,12, 3, 3 +}; + +const uint8_t g_bc7_table_anchor_index_third_subset_2[64] = +{ + 15, 8, 8, 3,15,15, 3, 8, 15,15,15,15,15,15,15, 8, 15, 8,15, 3,15, 8,15, 8, 3,15, 6,10,15,15,10, 8, 15, 3,15,10,10, 8, 9,10, 6,15, 8,15, 3, 6, 6, 8, 15, 3,15,15,15,15,15,15, 15,15,15,15, 3,15,15, 8 +}; + +const uint8_t g_bc7_first_byte_to_mode[256] = +{ + 8, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, +}; + +inline void insert_weight_zero(uint64_t& index_bits, uint32_t bits_per_index, uint32_t offset) +{ + uint64_t LOW_BIT_MASK = (static_cast(1) << ((bits_per_index * (offset + 1)) - 1)) - 1; + uint64_t HIGH_BIT_MASK = ~LOW_BIT_MASK; + + index_bits = ((index_bits & HIGH_BIT_MASK) << 1) | (index_bits & LOW_BIT_MASK); +} + +// BC7 mode 0-7 decompression. +// Instead of one monster routine to unpack all the BC7 modes, we're lumping the 3 subset, 2 subset, 1 subset, and dual plane modes together into simple shared routines. + +static inline uint32_t bc7_dequant(uint32_t val, uint32_t pbit, uint32_t val_bits) { assert(val < (1U << val_bits)); assert(pbit < 2); assert(val_bits >= 4 && val_bits <= 8); const uint32_t total_bits = val_bits + 1; val = (val << 1) | pbit; val <<= (8 - total_bits); val |= (val >> total_bits); assert(val <= 255); return val; } +static inline uint32_t bc7_dequant(uint32_t val, uint32_t val_bits) { assert(val < (1U << val_bits)); assert(val_bits >= 4 && val_bits <= 8); val <<= (8 - val_bits); val |= (val >> val_bits); assert(val <= 255); return val; } + +static inline uint32_t bc7_interp2(uint32_t l, uint32_t h, uint32_t w) { assert(w < 4); return (l * (64 - g_bc7_weights2[w]) + h * g_bc7_weights2[w] + 32) >> 6; } +static inline uint32_t bc7_interp3(uint32_t l, uint32_t h, uint32_t w) { assert(w < 8); return (l * (64 - g_bc7_weights3[w]) + h * g_bc7_weights3[w] + 32) >> 6; } +static inline uint32_t bc7_interp4(uint32_t l, uint32_t h, uint32_t w) { assert(w < 16); return (l * (64 - g_bc7_weights4[w]) + h * g_bc7_weights4[w] + 32) >> 6; } +static inline uint32_t bc7_interp(uint32_t l, uint32_t h, uint32_t w, uint32_t bits) +{ + assert(l <= 255 && h <= 255); + switch (bits) + { + case 2: return bc7_interp2(l, h, w); + case 3: return bc7_interp3(l, h, w); + case 4: return bc7_interp4(l, h, w); + default: + break; + } + return 0; +} + + +#ifdef BC7DECOMP_USE_SSE2 +static inline __m128i bc7_interp_sse2(__m128i l, __m128i h, __m128i w, __m128i iw) +{ + return _mm_srli_epi16(_mm_add_epi16(_mm_add_epi16(_mm_mullo_epi16(l, iw), _mm_mullo_epi16(h, w)), _mm_set1_epi16(32)), 6); +} + +static inline void bc7_interp2_sse2(const color_rgba* endpoint_pair, color_rgba* out_colors) +{ + __m128i endpoints = _mm_loadu_si64(endpoint_pair); + __m128i endpoints_16 = _mm_unpacklo_epi8(endpoints, _mm_setzero_si128()); + + __m128i endpoints_16_swapped = _mm_shuffle_epi32(endpoints_16, _MM_SHUFFLE(1, 0, 3, 2)); + + // Interpolated colors will be color 1 and 2 + __m128i interpolated_colors = bc7_interp_sse2(endpoints_16, endpoints_16_swapped, _mm_set1_epi16(21), _mm_set1_epi16(43)); + + // all_colors will be 1, 2, 0, 3 + __m128i all_colors = _mm_packus_epi16(interpolated_colors, endpoints_16); + + all_colors = _mm_shuffle_epi32(all_colors, _MM_SHUFFLE(3, 1, 0, 2)); + + _mm_storeu_si128(reinterpret_cast<__m128i*>(out_colors), all_colors); +} + +static inline void bc7_interp3_sse2(const color_rgba* endpoint_pair, color_rgba* out_colors) +{ + __m128i endpoints = _mm_loadu_si64(endpoint_pair); + __m128i endpoints_16bit = _mm_unpacklo_epi8(endpoints, _mm_setzero_si128()); + __m128i endpoints_16bit_swapped = _mm_shuffle_epi32(endpoints_16bit, _MM_SHUFFLE(1, 0, 3, 2)); + + __m128i interpolated_16 = bc7_interp_sse2(endpoints_16bit, endpoints_16bit_swapped, _mm_set1_epi16(9), _mm_set1_epi16(55)); + __m128i interpolated_23 = bc7_interp_sse2(endpoints_16bit, endpoints_16bit_swapped, _mm_set_epi16(37, 37, 37, 37, 18, 18, 18, 18), _mm_set_epi16(27, 27, 27, 27, 46, 46, 46, 46)); + __m128i interpolated_45 = bc7_interp_sse2(endpoints_16bit, endpoints_16bit_swapped, _mm_set_epi16(18, 18, 18, 18, 37, 37, 37, 37), _mm_set_epi16(46, 46, 46, 46, 27, 27, 27, 27)); + + __m128i interpolated_01 = _mm_unpacklo_epi64(endpoints_16bit, interpolated_16); + __m128i interpolated_67 = _mm_unpackhi_epi64(interpolated_16, endpoints_16bit); + + __m128i all_colors_0 = _mm_packus_epi16(interpolated_01, interpolated_23); + __m128i all_colors_1 = _mm_packus_epi16(interpolated_45, interpolated_67); + + _mm_storeu_si128(reinterpret_cast<__m128i*>(out_colors), all_colors_0); + _mm_storeu_si128(reinterpret_cast<__m128i*>(out_colors + 4), all_colors_1); +} +#endif + +bool unpack_bc7_mode0_2(uint32_t mode, const uint64_t* data_chunks, color_rgba* pPixels) +{ + //const uint32_t SUBSETS = 3; + const uint32_t ENDPOINTS = 6; + const uint32_t COMPS = 3; + const uint32_t WEIGHT_BITS = (mode == 0) ? 3 : 2; + const uint32_t WEIGHT_MASK = (1 << WEIGHT_BITS) - 1; + const uint32_t ENDPOINT_BITS = (mode == 0) ? 4 : 5; + const uint32_t ENDPOINT_MASK = (1 << ENDPOINT_BITS) - 1; + const uint32_t PBITS = (mode == 0) ? 6 : 0; + const uint32_t WEIGHT_VALS = 1 << WEIGHT_BITS; + const uint32_t PART_BITS = (mode == 0) ? 4 : 6; + const uint32_t PART_MASK = (1 << PART_BITS) - 1; + + const uint64_t low_chunk = data_chunks[0]; + const uint64_t high_chunk = data_chunks[1]; + + const uint32_t part = (low_chunk >> (mode + 1)) & PART_MASK; + + uint64_t channel_read_chunks[3] = { 0, 0, 0 }; + + if (mode == 0) + { + channel_read_chunks[0] = low_chunk >> 5; + channel_read_chunks[1] = low_chunk >> 29; + channel_read_chunks[2] = ((low_chunk >> 53) | (high_chunk << 11)); + } + else + { + channel_read_chunks[0] = low_chunk >> 9; + channel_read_chunks[1] = ((low_chunk >> 39) | (high_chunk << 25)); + channel_read_chunks[2] = high_chunk >> 5; + } + + color_rgba endpoints[ENDPOINTS]; + for (uint32_t c = 0; c < COMPS; c++) + { + uint64_t channel_read_chunk = channel_read_chunks[c]; + for (uint32_t e = 0; e < ENDPOINTS; e++) + { + endpoints[e][c] = static_cast(channel_read_chunk & ENDPOINT_MASK); + channel_read_chunk >>= ENDPOINT_BITS; + } + } + + uint32_t pbits[6]; + if (mode == 0) + { + uint8_t p_bits_chunk = static_cast((high_chunk >> 13) & 0xff); + + for (uint32_t p = 0; p < PBITS; p++) + pbits[p] = (p_bits_chunk >> p) & 1; + } + + uint64_t weights_read_chunk = high_chunk >> (67 - 16 * WEIGHT_BITS); + insert_weight_zero(weights_read_chunk, WEIGHT_BITS, 0); + insert_weight_zero(weights_read_chunk, WEIGHT_BITS, std::min(g_bc7_table_anchor_index_third_subset_1[part], g_bc7_table_anchor_index_third_subset_2[part])); + insert_weight_zero(weights_read_chunk, WEIGHT_BITS, std::max(g_bc7_table_anchor_index_third_subset_1[part], g_bc7_table_anchor_index_third_subset_2[part])); + + uint32_t weights[16]; + for (uint32_t i = 0; i < 16; i++) + { + weights[i] = static_cast(weights_read_chunk & WEIGHT_MASK); + weights_read_chunk >>= WEIGHT_BITS; + } + + for (uint32_t e = 0; e < ENDPOINTS; e++) + for (uint32_t c = 0; c < 4; c++) + endpoints[e][c] = static_cast((c == 3) ? 255 : (PBITS ? bc7_dequant(endpoints[e][c], pbits[e], ENDPOINT_BITS) : bc7_dequant(endpoints[e][c], ENDPOINT_BITS))); + + color_rgba block_colors[3][8]; + +#ifdef BC7DECOMP_USE_SSE2 + for (uint32_t s = 0; s < 3; s++) + { + if (WEIGHT_BITS == 2) + bc7_interp2_sse2(endpoints + s * 2, block_colors[s]); + else + bc7_interp3_sse2(endpoints + s * 2, block_colors[s]); + } +#else + for (uint32_t s = 0; s < 3; s++) + for (uint32_t i = 0; i < WEIGHT_VALS; i++) + { + for (uint32_t c = 0; c < 3; c++) + block_colors[s][i][c] = static_cast(bc7_interp(endpoints[s * 2 + 0][c], endpoints[s * 2 + 1][c], i, WEIGHT_BITS)); + block_colors[s][i][3] = 255; + } +#endif + + for (uint32_t i = 0; i < 16; i++) + pPixels[i] = block_colors[g_bc7_partition3[part * 16 + i]][weights[i]]; + + return true; +} + +bool unpack_bc7_mode1_3_7(uint32_t mode, const uint64_t* data_chunks, color_rgba* pPixels) +{ + //const uint32_t SUBSETS = 2; + const uint32_t ENDPOINTS = 4; + const uint32_t COMPS = (mode == 7) ? 4 : 3; + const uint32_t WEIGHT_BITS = (mode == 1) ? 3 : 2; + const uint32_t WEIGHT_MASK = (1 << WEIGHT_BITS) - 1; + const uint32_t ENDPOINT_BITS = (mode == 7) ? 5 : ((mode == 1) ? 6 : 7); + const uint32_t ENDPOINT_MASK = (1 << ENDPOINT_BITS) - 1; + const uint32_t PBITS = (mode == 1) ? 2 : 4; + const uint32_t SHARED_PBITS = (mode == 1) ? true : false; + const uint32_t WEIGHT_VALS = 1 << WEIGHT_BITS; + + const uint64_t low_chunk = data_chunks[0]; + const uint64_t high_chunk = data_chunks[1]; + + const uint32_t part = ((low_chunk >> (mode + 1)) & 0x3f); + + color_rgba endpoints[ENDPOINTS]; + + uint64_t channel_read_chunks[4] = { 0, 0, 0, 0 }; + uint64_t p_read_chunk = 0; + channel_read_chunks[0] = (low_chunk >> (mode + 7)); + uint64_t weight_read_chunk; + + switch (mode) + { + case 1: + channel_read_chunks[1] = (low_chunk >> 32); + channel_read_chunks[2] = ((low_chunk >> 56) | (high_chunk << 8)); + p_read_chunk = high_chunk >> 16; + weight_read_chunk = high_chunk >> 18; + break; + case 3: + channel_read_chunks[1] = ((low_chunk >> 38) | (high_chunk << 26)); + channel_read_chunks[2] = high_chunk >> 2; + p_read_chunk = high_chunk >> 30; + weight_read_chunk = high_chunk >> 34; + break; + case 7: + channel_read_chunks[1] = low_chunk >> 34; + channel_read_chunks[2] = ((low_chunk >> 54) | (high_chunk << 10)); + channel_read_chunks[3] = high_chunk >> 10; + p_read_chunk = (high_chunk >> 30); + weight_read_chunk = (high_chunk >> 34); + break; + default: + return false; + }; + + for (uint32_t c = 0; c < COMPS; c++) + { + uint64_t channel_read_chunk = channel_read_chunks[c]; + for (uint32_t e = 0; e < ENDPOINTS; e++) + { + endpoints[e][c] = static_cast(channel_read_chunk & ENDPOINT_MASK); + channel_read_chunk >>= ENDPOINT_BITS; + } + } + + uint32_t pbits[4]; + for (uint32_t p = 0; p < PBITS; p++) + pbits[p] = (p_read_chunk >> p) & 1; + + insert_weight_zero(weight_read_chunk, WEIGHT_BITS, 0); + insert_weight_zero(weight_read_chunk, WEIGHT_BITS, g_bc7_table_anchor_index_second_subset[part]); + + uint32_t weights[16]; + for (uint32_t i = 0; i < 16; i++) + { + weights[i] = static_cast(weight_read_chunk & WEIGHT_MASK); + weight_read_chunk >>= WEIGHT_BITS; + } + + for (uint32_t e = 0; e < ENDPOINTS; e++) + for (uint32_t c = 0; c < 4; c++) + endpoints[e][c] = static_cast((mode != 7U && c == 3U) ? 255 : bc7_dequant(endpoints[e][c], pbits[SHARED_PBITS ? (e >> 1) : e], ENDPOINT_BITS)); + + color_rgba block_colors[2][8]; +#ifdef BC7DECOMP_USE_SSE2 + for (uint32_t s = 0; s < 2; s++) + { + if (WEIGHT_BITS == 2) + bc7_interp2_sse2(endpoints + s * 2, block_colors[s]); + else + bc7_interp3_sse2(endpoints + s * 2, block_colors[s]); + } +#else + for (uint32_t s = 0; s < 2; s++) + for (uint32_t i = 0; i < WEIGHT_VALS; i++) + { + for (uint32_t c = 0; c < COMPS; c++) + block_colors[s][i][c] = static_cast(bc7_interp(endpoints[s * 2 + 0][c], endpoints[s * 2 + 1][c], i, WEIGHT_BITS)); + block_colors[s][i][3] = (COMPS == 3) ? 255 : block_colors[s][i][3]; + } +#endif + + for (uint32_t i = 0; i < 16; i++) + pPixels[i] = block_colors[g_bc7_partition2[part * 16 + i]][weights[i]]; + + return true; +} + +bool unpack_bc7_mode4_5(uint32_t mode, const uint64_t* data_chunks, color_rgba* pPixels) +{ + const uint32_t ENDPOINTS = 2; + //const uint32_t COMPS = 4; + const uint32_t WEIGHT_BITS = 2; + const uint32_t WEIGHT_MASK = (1 << WEIGHT_BITS) - 1; + const uint32_t A_WEIGHT_BITS = (mode == 4) ? 3 : 2; + const uint32_t A_WEIGHT_MASK = (1 << A_WEIGHT_BITS) - 1; + const uint32_t ENDPOINT_BITS = (mode == 4) ? 5 : 7; + const uint32_t ENDPOINT_MASK = (1 << ENDPOINT_BITS) - 1; + const uint32_t A_ENDPOINT_BITS = (mode == 4) ? 6 : 8; + const uint32_t A_ENDPOINT_MASK = (1 << A_ENDPOINT_BITS) - 1; + //const uint32_t WEIGHT_VALS = 1 << WEIGHT_BITS; + //const uint32_t A_WEIGHT_VALS = 1 << A_WEIGHT_BITS; + + const uint64_t low_chunk = data_chunks[0]; + const uint64_t high_chunk = data_chunks[1]; + + const uint32_t comp_rot = (low_chunk >> (mode + 1)) & 0x3; + const uint32_t index_mode = (mode == 4) ? static_cast((low_chunk >> 7) & 1) : 0; + + uint64_t color_read_bits = low_chunk >> 8; + + color_rgba endpoints[ENDPOINTS]; + for (uint32_t c = 0; c < 3; c++) + { + for (uint32_t e = 0; e < ENDPOINTS; e++) + { + endpoints[e][c] = static_cast(color_read_bits & ENDPOINT_MASK); + color_read_bits >>= ENDPOINT_BITS; + } + } + + endpoints[0][3] = static_cast(color_read_bits & ENDPOINT_MASK); + + uint64_t rgb_weights_chunk; + uint64_t a_weights_chunk; + if (mode == 4) + { + endpoints[0][3] = static_cast(color_read_bits & A_ENDPOINT_MASK); + endpoints[1][3] = static_cast((color_read_bits >> A_ENDPOINT_BITS) & A_ENDPOINT_MASK); + rgb_weights_chunk = ((low_chunk >> 50) | (high_chunk << 14)); + a_weights_chunk = high_chunk >> 17; + } + else if (mode == 5) + { + endpoints[0][3] = static_cast(color_read_bits & A_ENDPOINT_MASK); + endpoints[1][3] = static_cast(((low_chunk >> 58) | (high_chunk << 6)) & A_ENDPOINT_MASK); + rgb_weights_chunk = high_chunk >> 2; + a_weights_chunk = high_chunk >> 33; + } + else + return false; + + insert_weight_zero(rgb_weights_chunk, WEIGHT_BITS, 0); + insert_weight_zero(a_weights_chunk, A_WEIGHT_BITS, 0); + + const uint32_t weight_bits[2] = { index_mode ? A_WEIGHT_BITS : WEIGHT_BITS, index_mode ? WEIGHT_BITS : A_WEIGHT_BITS }; + const uint32_t weight_mask[2] = { index_mode ? A_WEIGHT_MASK : WEIGHT_MASK, index_mode ? WEIGHT_MASK : A_WEIGHT_MASK }; + + uint32_t weights[16], a_weights[16]; + + if (index_mode) + std::swap(rgb_weights_chunk, a_weights_chunk); + + for (uint32_t i = 0; i < 16; i++) + { + weights[i] = (rgb_weights_chunk & weight_mask[0]); + rgb_weights_chunk >>= weight_bits[0]; + } + + for (uint32_t i = 0; i < 16; i++) + { + a_weights[i] = (a_weights_chunk & weight_mask[1]); + a_weights_chunk >>= weight_bits[1]; + } + + for (uint32_t e = 0; e < ENDPOINTS; e++) + for (uint32_t c = 0; c < 4; c++) + endpoints[e][c] = static_cast(bc7_dequant(endpoints[e][c], (c == 3) ? A_ENDPOINT_BITS : ENDPOINT_BITS)); + + color_rgba block_colors[8]; +#ifdef BC7DECOMP_USE_SSE2 + if (weight_bits[0] == 3) + bc7_interp3_sse2(endpoints, block_colors); + else + bc7_interp2_sse2(endpoints, block_colors); +#else + for (uint32_t i = 0; i < (1U << weight_bits[0]); i++) + for (uint32_t c = 0; c < 3; c++) + block_colors[i][c] = static_cast(bc7_interp(endpoints[0][c], endpoints[1][c], i, weight_bits[0])); +#endif + + for (uint32_t i = 0; i < (1U << weight_bits[1]); i++) + block_colors[i][3] = static_cast(bc7_interp(endpoints[0][3], endpoints[1][3], i, weight_bits[1])); + + for (uint32_t i = 0; i < 16; i++) + { + pPixels[i] = block_colors[weights[i]]; + pPixels[i].a = block_colors[a_weights[i]].a; + if (comp_rot >= 1) + std::swap(pPixels[i].a, pPixels[i].m_comps[comp_rot - 1]); + } + + return true; +} + +struct bc7_mode_6 +{ + struct + { + uint64_t m_mode : 7; + uint64_t m_r0 : 7; + uint64_t m_r1 : 7; + uint64_t m_g0 : 7; + uint64_t m_g1 : 7; + uint64_t m_b0 : 7; + uint64_t m_b1 : 7; + uint64_t m_a0 : 7; + uint64_t m_a1 : 7; + uint64_t m_p0 : 1; + } m_lo; + + union + { + struct + { + uint64_t m_p1 : 1; + uint64_t m_s00 : 3; + uint64_t m_s10 : 4; + uint64_t m_s20 : 4; + uint64_t m_s30 : 4; + + uint64_t m_s01 : 4; + uint64_t m_s11 : 4; + uint64_t m_s21 : 4; + uint64_t m_s31 : 4; + + uint64_t m_s02 : 4; + uint64_t m_s12 : 4; + uint64_t m_s22 : 4; + uint64_t m_s32 : 4; + + uint64_t m_s03 : 4; + uint64_t m_s13 : 4; + uint64_t m_s23 : 4; + uint64_t m_s33 : 4; + + } m_hi; + + uint64_t m_hi_bits; + }; +}; + +bool unpack_bc7_mode6(const void *pBlock_bits, color_rgba *pPixels) +{ + static_assert(sizeof(bc7_mode_6) == 16, "sizeof(bc7_mode_6) == 16"); + + const bc7_mode_6 &block = *static_cast(pBlock_bits); + + if (block.m_lo.m_mode != (1 << 6)) + return false; + + const uint32_t r0 = static_cast((block.m_lo.m_r0 << 1) | block.m_lo.m_p0); + const uint32_t g0 = static_cast((block.m_lo.m_g0 << 1) | block.m_lo.m_p0); + const uint32_t b0 = static_cast((block.m_lo.m_b0 << 1) | block.m_lo.m_p0); + const uint32_t a0 = static_cast((block.m_lo.m_a0 << 1) | block.m_lo.m_p0); + const uint32_t r1 = static_cast((block.m_lo.m_r1 << 1) | block.m_hi.m_p1); + const uint32_t g1 = static_cast((block.m_lo.m_g1 << 1) | block.m_hi.m_p1); + const uint32_t b1 = static_cast((block.m_lo.m_b1 << 1) | block.m_hi.m_p1); + const uint32_t a1 = static_cast((block.m_lo.m_a1 << 1) | block.m_hi.m_p1); + + color_rgba vals[16]; +#ifdef BC7DECOMP_USE_SSE2 + __m128i vep0 = _mm_set_epi16((short)a0, (short)b0, (short)g0, (short)r0, (short)a0, (short)b0, (short)g0, (short)r0); + __m128i vep1 = _mm_set_epi16((short)a1, (short)b1, (short)g1, (short)r1, (short)a1, (short)b1, (short)g1, (short)r1); + + for (uint32_t i = 0; i < 16; i += 4) + { + const __m128i w0 = g_bc7_weights4_sse2[i / 4 * 2 + 0]; + const __m128i w1 = g_bc7_weights4_sse2[i / 4 * 2 + 1]; + + const __m128i iw0 = _mm_sub_epi16(_mm_set1_epi16(64), w0); + const __m128i iw1 = _mm_sub_epi16(_mm_set1_epi16(64), w1); + + __m128i first_half = _mm_srli_epi16(_mm_add_epi16(_mm_add_epi16(_mm_mullo_epi16(vep0, iw0), _mm_mullo_epi16(vep1, w0)), _mm_set1_epi16(32)), 6); + __m128i second_half = _mm_srli_epi16(_mm_add_epi16(_mm_add_epi16(_mm_mullo_epi16(vep0, iw1), _mm_mullo_epi16(vep1, w1)), _mm_set1_epi16(32)), 6); + __m128i combined = _mm_packus_epi16(first_half, second_half); + + _mm_storeu_si128(reinterpret_cast<__m128i*>(vals + i), combined); + } +#else + for (uint32_t i = 0; i < 16; i++) + { + const uint32_t w = g_bc7_weights4[i]; + const uint32_t iw = 64 - w; + vals[i].set_noclamp_rgba( + (r0 * iw + r1 * w + 32) >> 6, + (g0 * iw + g1 * w + 32) >> 6, + (b0 * iw + b1 * w + 32) >> 6, + (a0 * iw + a1 * w + 32) >> 6); + } +#endif + + pPixels[0] = vals[block.m_hi.m_s00]; + pPixels[1] = vals[block.m_hi.m_s10]; + pPixels[2] = vals[block.m_hi.m_s20]; + pPixels[3] = vals[block.m_hi.m_s30]; + + pPixels[4] = vals[block.m_hi.m_s01]; + pPixels[5] = vals[block.m_hi.m_s11]; + pPixels[6] = vals[block.m_hi.m_s21]; + pPixels[7] = vals[block.m_hi.m_s31]; + + pPixels[8] = vals[block.m_hi.m_s02]; + pPixels[9] = vals[block.m_hi.m_s12]; + pPixels[10] = vals[block.m_hi.m_s22]; + pPixels[11] = vals[block.m_hi.m_s32]; + + pPixels[12] = vals[block.m_hi.m_s03]; + pPixels[13] = vals[block.m_hi.m_s13]; + pPixels[14] = vals[block.m_hi.m_s23]; + pPixels[15] = vals[block.m_hi.m_s33]; + + return true; +} + +bool unpack_bc7(const void *pBlock, color_rgba *pPixels) +{ + const uint8_t *block_bytes = static_cast(pBlock); + uint8_t mode = g_bc7_first_byte_to_mode[block_bytes[0]]; + + uint64_t data_chunks[2]; + + uint64_t endian_check = 1; + if (*reinterpret_cast(&endian_check) == 1) + memcpy(data_chunks, pBlock, 16); + else + { + data_chunks[0] = data_chunks[1] = 0; + for (int chunk_index = 0; chunk_index < 2; chunk_index++) + { + for (int byte_index = 0; byte_index < 8; byte_index++) + data_chunks[chunk_index] |= static_cast(block_bytes[chunk_index * 8 + byte_index]) << (byte_index * 8); + } + } + + switch (mode) + { + case 0: + case 2: + return unpack_bc7_mode0_2(mode, data_chunks, pPixels); + case 1: + case 3: + case 7: + return unpack_bc7_mode1_3_7(mode, data_chunks, pPixels); + case 4: + case 5: + return unpack_bc7_mode4_5(mode, data_chunks, pPixels); + case 6: + return unpack_bc7_mode6(data_chunks, pPixels); + default: + memset(pPixels, 0, sizeof(color_rgba) * 16); + break; + } + + return false; +} + +} // namespace bc7decomp + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright(c) 2020 Richard Geldreich, Jr. +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. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain(www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non - commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain.We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors.We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +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 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. +------------------------------------------------------------------------------ +*/ + diff --git a/external/bc7enc_rdo/bc7decomp.h b/external/bc7enc_rdo/bc7decomp.h new file mode 100644 index 0000000000..0a6a1d19d3 --- /dev/null +++ b/external/bc7enc_rdo/bc7decomp.h @@ -0,0 +1,179 @@ +#pragma once + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4201) // nonstandard extension used: nameless struct/union +#endif + +#include +#include +#include +#include +#include + +namespace bc7decomp +{ + +enum eNoClamp { cNoClamp }; + +template inline S clamp(S value, S low, S high) { return (value < low) ? low : ((value > high) ? high : value); } + +class color_rgba +{ +public: + union + { + uint8_t m_comps[4]; + + struct + { + uint8_t r; + uint8_t g; + uint8_t b; + uint8_t a; + }; + }; + + inline color_rgba() + { + static_assert(sizeof(*this) == 4, "sizeof(*this) != 4"); + } + + inline color_rgba(int y) + { + set(y); + } + + inline color_rgba(int y, int na) + { + set(y, na); + } + + inline color_rgba(int sr, int sg, int sb, int sa) + { + set(sr, sg, sb, sa); + } + + inline color_rgba(eNoClamp, int sr, int sg, int sb, int sa) + { + set_noclamp_rgba((uint8_t)sr, (uint8_t)sg, (uint8_t)sb, (uint8_t)sa); + } + + inline color_rgba& set_noclamp_y(int y) + { + m_comps[0] = (uint8_t)y; + m_comps[1] = (uint8_t)y; + m_comps[2] = (uint8_t)y; + m_comps[3] = (uint8_t)255; + return *this; + } + + inline color_rgba &set_noclamp_rgba(int sr, int sg, int sb, int sa) + { + m_comps[0] = (uint8_t)sr; + m_comps[1] = (uint8_t)sg; + m_comps[2] = (uint8_t)sb; + m_comps[3] = (uint8_t)sa; + return *this; + } + + inline color_rgba &set(int y) + { + m_comps[0] = static_cast(clamp(y, 0, 255)); + m_comps[1] = m_comps[0]; + m_comps[2] = m_comps[0]; + m_comps[3] = 255; + return *this; + } + + inline color_rgba &set(int y, int na) + { + m_comps[0] = static_cast(clamp(y, 0, 255)); + m_comps[1] = m_comps[0]; + m_comps[2] = m_comps[0]; + m_comps[3] = static_cast(clamp(na, 0, 255)); + return *this; + } + + inline color_rgba &set(int sr, int sg, int sb, int sa) + { + m_comps[0] = static_cast(clamp(sr, 0, 255)); + m_comps[1] = static_cast(clamp(sg, 0, 255)); + m_comps[2] = static_cast(clamp(sb, 0, 255)); + m_comps[3] = static_cast(clamp(sa, 0, 255)); + return *this; + } + + inline color_rgba &set_rgb(int sr, int sg, int sb) + { + m_comps[0] = static_cast(clamp(sr, 0, 255)); + m_comps[1] = static_cast(clamp(sg, 0, 255)); + m_comps[2] = static_cast(clamp(sb, 0, 255)); + return *this; + } + + inline color_rgba &set_rgb(const color_rgba &other) + { + r = other.r; + g = other.g; + b = other.b; + return *this; + } + + inline const uint8_t &operator[] (uint32_t index) const { assert(index < 4); return m_comps[index]; } + inline uint8_t &operator[] (uint32_t index) { assert(index < 4); return m_comps[index]; } + + inline void clear() + { + m_comps[0] = 0; + m_comps[1] = 0; + m_comps[2] = 0; + m_comps[3] = 0; + } + + inline bool operator== (const color_rgba &rhs) const + { + if (m_comps[0] != rhs.m_comps[0]) return false; + if (m_comps[1] != rhs.m_comps[1]) return false; + if (m_comps[2] != rhs.m_comps[2]) return false; + if (m_comps[3] != rhs.m_comps[3]) return false; + return true; + } + + inline bool operator!= (const color_rgba &rhs) const + { + return !(*this == rhs); + } + + inline bool operator<(const color_rgba &rhs) const + { + for (int i = 0; i < 4; i++) + { + if (m_comps[i] < rhs.m_comps[i]) + return true; + else if (m_comps[i] != rhs.m_comps[i]) + return false; + } + return false; + } + + inline int get_601_luma() const { return (19595U * m_comps[0] + 38470U * m_comps[1] + 7471U * m_comps[2] + 32768U) >> 16U; } + inline int get_709_luma() const { return (13938U * m_comps[0] + 46869U * m_comps[1] + 4729U * m_comps[2] + 32768U) >> 16U; } + inline int get_luma(bool luma_601) const { return luma_601 ? get_601_luma() : get_709_luma(); } + + static color_rgba comp_min(const color_rgba& a, const color_rgba& b) { return color_rgba(std::min(a[0], b[0]), std::min(a[1], b[1]), std::min(a[2], b[2]), std::min(a[3], b[3])); } + static color_rgba comp_max(const color_rgba& a, const color_rgba& b) { return color_rgba(std::max(a[0], b[0]), std::max(a[1], b[1]), std::max(a[2], b[2]), std::max(a[3], b[3])); } +}; + +bool unpack_bc7(const void *pBlock, color_rgba *pPixels); + +} // namespace bc7decomp + +namespace bc7decomp_ref +{ + bool unpack_bc7(const void* pBlock, bc7decomp::color_rgba* pPixels); +} // namespace bc7decomp_ref + +#ifdef _MSC_VER +#pragma warning(pop) +#endif \ No newline at end of file diff --git a/external/bc7enc_rdo/bc7decomp_ref.cpp b/external/bc7enc_rdo/bc7decomp_ref.cpp new file mode 100644 index 0000000000..8a69e94740 --- /dev/null +++ b/external/bc7enc_rdo/bc7decomp_ref.cpp @@ -0,0 +1,431 @@ +// File: bc7decomp.c - Richard Geldreich, Jr. 3/31/2020 - MIT license or public domain (see end of file) +#include "bc7decomp.h" + +using namespace bc7decomp; + +namespace bc7decomp_ref +{ + +const uint32_t g_bc7_weights2[4] = { 0, 21, 43, 64 }; +const uint32_t g_bc7_weights3[8] = { 0, 9, 18, 27, 37, 46, 55, 64 }; +const uint32_t g_bc7_weights4[16] = { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }; + +const uint8_t g_bc7_partition2[64 * 16] = +{ + 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1, 0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1, 0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1, 0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1, 0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1, 0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1, 0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, + 0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1, 0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0, 0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0, 0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0, 0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1, + 0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0, 0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0, 0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0, 0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0, 0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0, 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0, 0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0, 0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0, + 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1, 0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0, 0,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0, 0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0, 0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0, 0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1, 0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1, + 0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0, 0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0, 0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0, 0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0, 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0, 0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1, 0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1, 0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0, + 0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0, 0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0, 0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0, 0,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1, 0,1,1,0,0,0,1,1,1,0,0,1,1,1,0,0, 0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0, + 0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,1, 0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1, 0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1, 0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1, 0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1, 0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0, 0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0, 0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1 +}; + +const uint8_t g_bc7_partition3[64 * 16] = +{ + 0,0,1,1,0,0,1,1,0,2,2,1,2,2,2,2, 0,0,0,1,0,0,1,1,2,2,1,1,2,2,2,1, 0,0,0,0,2,0,0,1,2,2,1,1,2,2,1,1, 0,2,2,2,0,0,2,2,0,0,1,1,0,1,1,1, 0,0,0,0,0,0,0,0,1,1,2,2,1,1,2,2, 0,0,1,1,0,0,1,1,0,0,2,2,0,0,2,2, 0,0,2,2,0,0,2,2,1,1,1,1,1,1,1,1, 0,0,1,1,0,0,1,1,2,2,1,1,2,2,1,1, + 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2, 0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2, 0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2, 0,0,1,2,0,0,1,2,0,0,1,2,0,0,1,2, 0,1,1,2,0,1,1,2,0,1,1,2,0,1,1,2, 0,1,2,2,0,1,2,2,0,1,2,2,0,1,2,2, 0,0,1,1,0,1,1,2,1,1,2,2,1,2,2,2, 0,0,1,1,2,0,0,1,2,2,0,0,2,2,2,0, + 0,0,0,1,0,0,1,1,0,1,1,2,1,1,2,2, 0,1,1,1,0,0,1,1,2,0,0,1,2,2,0,0, 0,0,0,0,1,1,2,2,1,1,2,2,1,1,2,2, 0,0,2,2,0,0,2,2,0,0,2,2,1,1,1,1, 0,1,1,1,0,1,1,1,0,2,2,2,0,2,2,2, 0,0,0,1,0,0,0,1,2,2,2,1,2,2,2,1, 0,0,0,0,0,0,1,1,0,1,2,2,0,1,2,2, 0,0,0,0,1,1,0,0,2,2,1,0,2,2,1,0, + 0,1,2,2,0,1,2,2,0,0,1,1,0,0,0,0, 0,0,1,2,0,0,1,2,1,1,2,2,2,2,2,2, 0,1,1,0,1,2,2,1,1,2,2,1,0,1,1,0, 0,0,0,0,0,1,1,0,1,2,2,1,1,2,2,1, 0,0,2,2,1,1,0,2,1,1,0,2,0,0,2,2, 0,1,1,0,0,1,1,0,2,0,0,2,2,2,2,2, 0,0,1,1,0,1,2,2,0,1,2,2,0,0,1,1, 0,0,0,0,2,0,0,0,2,2,1,1,2,2,2,1, + 0,0,0,0,0,0,0,2,1,1,2,2,1,2,2,2, 0,2,2,2,0,0,2,2,0,0,1,2,0,0,1,1, 0,0,1,1,0,0,1,2,0,0,2,2,0,2,2,2, 0,1,2,0,0,1,2,0,0,1,2,0,0,1,2,0, 0,0,0,0,1,1,1,1,2,2,2,2,0,0,0,0, 0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0, 0,1,2,0,2,0,1,2,1,2,0,1,0,1,2,0, 0,0,1,1,2,2,0,0,1,1,2,2,0,0,1,1, + 0,0,1,1,1,1,2,2,2,2,0,0,0,0,1,1, 0,1,0,1,0,1,0,1,2,2,2,2,2,2,2,2, 0,0,0,0,0,0,0,0,2,1,2,1,2,1,2,1, 0,0,2,2,1,1,2,2,0,0,2,2,1,1,2,2, 0,0,2,2,0,0,1,1,0,0,2,2,0,0,1,1, 0,2,2,0,1,2,2,1,0,2,2,0,1,2,2,1, 0,1,0,1,2,2,2,2,2,2,2,2,0,1,0,1, 0,0,0,0,2,1,2,1,2,1,2,1,2,1,2,1, + 0,1,0,1,0,1,0,1,0,1,0,1,2,2,2,2, 0,2,2,2,0,1,1,1,0,2,2,2,0,1,1,1, 0,0,0,2,1,1,1,2,0,0,0,2,1,1,1,2, 0,0,0,0,2,1,1,2,2,1,1,2,2,1,1,2, 0,2,2,2,0,1,1,1,0,1,1,1,0,2,2,2, 0,0,0,2,1,1,1,2,1,1,1,2,0,0,0,2, 0,1,1,0,0,1,1,0,0,1,1,0,2,2,2,2, 0,0,0,0,0,0,0,0,2,1,1,2,2,1,1,2, + 0,1,1,0,0,1,1,0,2,2,2,2,2,2,2,2, 0,0,2,2,0,0,1,1,0,0,1,1,0,0,2,2, 0,0,2,2,1,1,2,2,1,1,2,2,0,0,2,2, 0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,2, 0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,1, 0,2,2,2,1,2,2,2,0,2,2,2,1,2,2,2, 0,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2, 0,1,1,1,2,0,1,1,2,2,0,1,2,2,2,0, +}; + +const uint8_t g_bc7_table_anchor_index_second_subset[64] = { 15,15,15,15,15,15,15,15, 15,15,15,15,15,15,15,15, 15, 2, 8, 2, 2, 8, 8,15, 2, 8, 2, 2, 8, 8, 2, 2, 15,15, 6, 8, 2, 8,15,15, 2, 8, 2, 2, 2,15,15, 6, 6, 2, 6, 8,15,15, 2, 2, 15,15,15,15,15, 2, 2,15 }; + +const uint8_t g_bc7_table_anchor_index_third_subset_1[64] = +{ + 3, 3,15,15, 8, 3,15,15, 8, 8, 6, 6, 6, 5, 3, 3, 3, 3, 8,15, 3, 3, 6,10, 5, 8, 8, 6, 8, 5,15,15, 8,15, 3, 5, 6,10, 8,15, 15, 3,15, 5,15,15,15,15, 3,15, 5, 5, 5, 8, 5,10, 5,10, 8,13,15,12, 3, 3 +}; + +const uint8_t g_bc7_table_anchor_index_third_subset_2[64] = +{ + 15, 8, 8, 3,15,15, 3, 8, 15,15,15,15,15,15,15, 8, 15, 8,15, 3,15, 8,15, 8, 3,15, 6,10,15,15,10, 8, 15, 3,15,10,10, 8, 9,10, 6,15, 8,15, 3, 6, 6, 8, 15, 3,15,15,15,15,15,15, 15,15,15,15, 3,15,15, 8 +}; + +inline uint32_t read_bits32(const uint8_t* pBuf, uint32_t& bit_offset, uint32_t codesize) +{ + assert(codesize <= 32); + uint32_t bits = 0; + uint32_t total_bits = 0; + + while (total_bits < codesize) + { + uint32_t byte_bit_offset = bit_offset & 7; + uint32_t bits_to_read = std::min(codesize - total_bits, 8 - byte_bit_offset); + + uint32_t byte_bits = pBuf[bit_offset >> 3] >> byte_bit_offset; + byte_bits &= ((1 << bits_to_read) - 1); + + bits |= (byte_bits << total_bits); + + total_bits += bits_to_read; + bit_offset += bits_to_read; + } + + return bits; +} + +// BC7 mode 0-7 decompression. +// Instead of one monster routine to unpack all the BC7 modes, we're lumping the 3 subset, 2 subset, 1 subset, and dual plane modes together into simple shared routines. + +static inline uint32_t bc7_dequant(uint32_t val, uint32_t pbit, uint32_t val_bits) { assert(val < (1U << val_bits)); assert(pbit < 2); assert(val_bits >= 4 && val_bits <= 8); const uint32_t total_bits = val_bits + 1; val = (val << 1) | pbit; val <<= (8 - total_bits); val |= (val >> total_bits); assert(val <= 255); return val; } +static inline uint32_t bc7_dequant(uint32_t val, uint32_t val_bits) { assert(val < (1U << val_bits)); assert(val_bits >= 4 && val_bits <= 8); val <<= (8 - val_bits); val |= (val >> val_bits); assert(val <= 255); return val; } + +static inline uint32_t bc7_interp2(uint32_t l, uint32_t h, uint32_t w) { assert(w < 4); return (l * (64 - g_bc7_weights2[w]) + h * g_bc7_weights2[w] + 32) >> 6; } +static inline uint32_t bc7_interp3(uint32_t l, uint32_t h, uint32_t w) { assert(w < 8); return (l * (64 - g_bc7_weights3[w]) + h * g_bc7_weights3[w] + 32) >> 6; } +static inline uint32_t bc7_interp4(uint32_t l, uint32_t h, uint32_t w) { assert(w < 16); return (l * (64 - g_bc7_weights4[w]) + h * g_bc7_weights4[w] + 32) >> 6; } +static inline uint32_t bc7_interp(uint32_t l, uint32_t h, uint32_t w, uint32_t bits) +{ + assert(l <= 255 && h <= 255); + switch (bits) + { + case 2: return bc7_interp2(l, h, w); + case 3: return bc7_interp3(l, h, w); + case 4: return bc7_interp4(l, h, w); + default: + break; + } + return 0; +} + +bool unpack_bc7_mode0_2(uint32_t mode, const void* pBlock_bits, color_rgba* pPixels) +{ + //const uint32_t SUBSETS = 3; + const uint32_t ENDPOINTS = 6; + const uint32_t COMPS = 3; + const uint32_t WEIGHT_BITS = (mode == 0) ? 3 : 2; + const uint32_t ENDPOINT_BITS = (mode == 0) ? 4 : 5; + const uint32_t PBITS = (mode == 0) ? 6 : 0; + const uint32_t WEIGHT_VALS = 1 << WEIGHT_BITS; + + uint32_t bit_offset = 0; + const uint8_t* pBuf = static_cast(pBlock_bits); + + if (read_bits32(pBuf, bit_offset, mode + 1) != (1U << mode)) return false; + + const uint32_t part = read_bits32(pBuf, bit_offset, (mode == 0) ? 4 : 6); + + color_rgba endpoints[ENDPOINTS]; + for (uint32_t c = 0; c < COMPS; c++) + for (uint32_t e = 0; e < ENDPOINTS; e++) + endpoints[e][c] = (uint8_t)read_bits32(pBuf, bit_offset, ENDPOINT_BITS); + + uint32_t pbits[6]; + for (uint32_t p = 0; p < PBITS; p++) + pbits[p] = read_bits32(pBuf, bit_offset, 1); + + uint32_t weights[16]; + for (uint32_t i = 0; i < 16; i++) + weights[i] = read_bits32(pBuf, bit_offset, ((!i) || (i == g_bc7_table_anchor_index_third_subset_1[part]) || (i == g_bc7_table_anchor_index_third_subset_2[part])) ? (WEIGHT_BITS - 1) : WEIGHT_BITS); + + assert(bit_offset == 128); + + for (uint32_t e = 0; e < ENDPOINTS; e++) + for (uint32_t c = 0; c < 4; c++) + endpoints[e][c] = (uint8_t)((c == 3) ? 255 : (PBITS ? bc7_dequant(endpoints[e][c], pbits[e], ENDPOINT_BITS) : bc7_dequant(endpoints[e][c], ENDPOINT_BITS))); + + color_rgba block_colors[3][8]; + for (uint32_t s = 0; s < 3; s++) + for (uint32_t i = 0; i < WEIGHT_VALS; i++) + { + for (uint32_t c = 0; c < 3; c++) + block_colors[s][i][c] = (uint8_t)bc7_interp(endpoints[s * 2 + 0][c], endpoints[s * 2 + 1][c], i, WEIGHT_BITS); + block_colors[s][i][3] = 255; + } + + for (uint32_t i = 0; i < 16; i++) + pPixels[i] = block_colors[g_bc7_partition3[part * 16 + i]][weights[i]]; + + return true; +} + +bool unpack_bc7_mode1_3_7(uint32_t mode, const void* pBlock_bits, color_rgba* pPixels) +{ + //const uint32_t SUBSETS = 2; + const uint32_t ENDPOINTS = 4; + const uint32_t COMPS = (mode == 7) ? 4 : 3; + const uint32_t WEIGHT_BITS = (mode == 1) ? 3 : 2; + const uint32_t ENDPOINT_BITS = (mode == 7) ? 5 : ((mode == 1) ? 6 : 7); + const uint32_t PBITS = (mode == 1) ? 2 : 4; + const uint32_t SHARED_PBITS = (mode == 1) ? true : false; + const uint32_t WEIGHT_VALS = 1 << WEIGHT_BITS; + + uint32_t bit_offset = 0; + const uint8_t* pBuf = static_cast(pBlock_bits); + + if (read_bits32(pBuf, bit_offset, mode + 1) != (1U << mode)) return false; + + const uint32_t part = read_bits32(pBuf, bit_offset, 6); + + color_rgba endpoints[ENDPOINTS]; + for (uint32_t c = 0; c < COMPS; c++) + for (uint32_t e = 0; e < ENDPOINTS; e++) + endpoints[e][c] = (uint8_t)read_bits32(pBuf, bit_offset, ENDPOINT_BITS); + + uint32_t pbits[4]; + for (uint32_t p = 0; p < PBITS; p++) + pbits[p] = read_bits32(pBuf, bit_offset, 1); + + uint32_t weights[16]; + for (uint32_t i = 0; i < 16; i++) + weights[i] = read_bits32(pBuf, bit_offset, ((!i) || (i == g_bc7_table_anchor_index_second_subset[part])) ? (WEIGHT_BITS - 1) : WEIGHT_BITS); + + assert(bit_offset == 128); + + for (uint32_t e = 0; e < ENDPOINTS; e++) + for (uint32_t c = 0; c < 4; c++) + endpoints[e][c] = (uint8_t)((c == ((mode == 7U) ? 4U : 3U)) ? 255 : bc7_dequant(endpoints[e][c], pbits[SHARED_PBITS ? (e >> 1) : e], ENDPOINT_BITS)); + + color_rgba block_colors[2][8]; + for (uint32_t s = 0; s < 2; s++) + for (uint32_t i = 0; i < WEIGHT_VALS; i++) + { + for (uint32_t c = 0; c < COMPS; c++) + block_colors[s][i][c] = (uint8_t)bc7_interp(endpoints[s * 2 + 0][c], endpoints[s * 2 + 1][c], i, WEIGHT_BITS); + block_colors[s][i][3] = (COMPS == 3) ? 255 : block_colors[s][i][3]; + } + + for (uint32_t i = 0; i < 16; i++) + pPixels[i] = block_colors[g_bc7_partition2[part * 16 + i]][weights[i]]; + + return true; +} + +bool unpack_bc7_mode4_5(uint32_t mode, const void* pBlock_bits, color_rgba* pPixels) +{ + const uint32_t ENDPOINTS = 2; + const uint32_t COMPS = 4; + const uint32_t WEIGHT_BITS = 2; + const uint32_t A_WEIGHT_BITS = (mode == 4) ? 3 : 2; + const uint32_t ENDPOINT_BITS = (mode == 4) ? 5 : 7; + const uint32_t A_ENDPOINT_BITS = (mode == 4) ? 6 : 8; + //const uint32_t WEIGHT_VALS = 1 << WEIGHT_BITS; + //const uint32_t A_WEIGHT_VALS = 1 << A_WEIGHT_BITS; + + uint32_t bit_offset = 0; + const uint8_t* pBuf = static_cast(pBlock_bits); + + if (read_bits32(pBuf, bit_offset, mode + 1) != (1U << mode)) return false; + + const uint32_t comp_rot = read_bits32(pBuf, bit_offset, 2); + const uint32_t index_mode = (mode == 4) ? read_bits32(pBuf, bit_offset, 1) : 0; + + color_rgba endpoints[ENDPOINTS]; + for (uint32_t c = 0; c < COMPS; c++) + for (uint32_t e = 0; e < ENDPOINTS; e++) + endpoints[e][c] = (uint8_t)read_bits32(pBuf, bit_offset, (c == 3) ? A_ENDPOINT_BITS : ENDPOINT_BITS); + + const uint32_t weight_bits[2] = { index_mode ? A_WEIGHT_BITS : WEIGHT_BITS, index_mode ? WEIGHT_BITS : A_WEIGHT_BITS }; + + uint32_t weights[16], a_weights[16]; + + for (uint32_t i = 0; i < 16; i++) + (index_mode ? a_weights : weights)[i] = read_bits32(pBuf, bit_offset, weight_bits[index_mode] - ((!i) ? 1 : 0)); + + for (uint32_t i = 0; i < 16; i++) + (index_mode ? weights : a_weights)[i] = read_bits32(pBuf, bit_offset, weight_bits[1 - index_mode] - ((!i) ? 1 : 0)); + + assert(bit_offset == 128); + + for (uint32_t e = 0; e < ENDPOINTS; e++) + for (uint32_t c = 0; c < 4; c++) + endpoints[e][c] = (uint8_t)bc7_dequant(endpoints[e][c], (c == 3) ? A_ENDPOINT_BITS : ENDPOINT_BITS); + + color_rgba block_colors[8]; + for (uint32_t i = 0; i < (1U << weight_bits[0]); i++) + for (uint32_t c = 0; c < 3; c++) + block_colors[i][c] = (uint8_t)bc7_interp(endpoints[0][c], endpoints[1][c], i, weight_bits[0]); + + for (uint32_t i = 0; i < (1U << weight_bits[1]); i++) + block_colors[i][3] = (uint8_t)bc7_interp(endpoints[0][3], endpoints[1][3], i, weight_bits[1]); + + for (uint32_t i = 0; i < 16; i++) + { + pPixels[i] = block_colors[weights[i]]; + pPixels[i].a = block_colors[a_weights[i]].a; + if (comp_rot >= 1) + std::swap(pPixels[i].a, pPixels[i].m_comps[comp_rot - 1]); + } + + return true; +} + +struct bc7_mode_6 +{ + struct + { + uint64_t m_mode : 7; + uint64_t m_r0 : 7; + uint64_t m_r1 : 7; + uint64_t m_g0 : 7; + uint64_t m_g1 : 7; + uint64_t m_b0 : 7; + uint64_t m_b1 : 7; + uint64_t m_a0 : 7; + uint64_t m_a1 : 7; + uint64_t m_p0 : 1; + } m_lo; + + union + { + struct + { + uint64_t m_p1 : 1; + uint64_t m_s00 : 3; + uint64_t m_s10 : 4; + uint64_t m_s20 : 4; + uint64_t m_s30 : 4; + + uint64_t m_s01 : 4; + uint64_t m_s11 : 4; + uint64_t m_s21 : 4; + uint64_t m_s31 : 4; + + uint64_t m_s02 : 4; + uint64_t m_s12 : 4; + uint64_t m_s22 : 4; + uint64_t m_s32 : 4; + + uint64_t m_s03 : 4; + uint64_t m_s13 : 4; + uint64_t m_s23 : 4; + uint64_t m_s33 : 4; + + } m_hi; + + uint64_t m_hi_bits; + }; +}; + +bool unpack_bc7_mode6(const void *pBlock_bits, color_rgba *pPixels) +{ + static_assert(sizeof(bc7_mode_6) == 16, "sizeof(bc7_mode_6) == 16"); + + const bc7_mode_6 &block = *static_cast(pBlock_bits); + + if (block.m_lo.m_mode != (1 << 6)) + return false; + + const uint32_t r0 = (uint32_t)((block.m_lo.m_r0 << 1) | block.m_lo.m_p0); + const uint32_t g0 = (uint32_t)((block.m_lo.m_g0 << 1) | block.m_lo.m_p0); + const uint32_t b0 = (uint32_t)((block.m_lo.m_b0 << 1) | block.m_lo.m_p0); + const uint32_t a0 = (uint32_t)((block.m_lo.m_a0 << 1) | block.m_lo.m_p0); + const uint32_t r1 = (uint32_t)((block.m_lo.m_r1 << 1) | block.m_hi.m_p1); + const uint32_t g1 = (uint32_t)((block.m_lo.m_g1 << 1) | block.m_hi.m_p1); + const uint32_t b1 = (uint32_t)((block.m_lo.m_b1 << 1) | block.m_hi.m_p1); + const uint32_t a1 = (uint32_t)((block.m_lo.m_a1 << 1) | block.m_hi.m_p1); + + color_rgba vals[16]; + for (uint32_t i = 0; i < 16; i++) + { + const uint32_t w = g_bc7_weights4[i]; + const uint32_t iw = 64 - w; + vals[i].set_noclamp_rgba( + (r0 * iw + r1 * w + 32) >> 6, + (g0 * iw + g1 * w + 32) >> 6, + (b0 * iw + b1 * w + 32) >> 6, + (a0 * iw + a1 * w + 32) >> 6); + } + + pPixels[0] = vals[block.m_hi.m_s00]; + pPixels[1] = vals[block.m_hi.m_s10]; + pPixels[2] = vals[block.m_hi.m_s20]; + pPixels[3] = vals[block.m_hi.m_s30]; + + pPixels[4] = vals[block.m_hi.m_s01]; + pPixels[5] = vals[block.m_hi.m_s11]; + pPixels[6] = vals[block.m_hi.m_s21]; + pPixels[7] = vals[block.m_hi.m_s31]; + + pPixels[8] = vals[block.m_hi.m_s02]; + pPixels[9] = vals[block.m_hi.m_s12]; + pPixels[10] = vals[block.m_hi.m_s22]; + pPixels[11] = vals[block.m_hi.m_s32]; + + pPixels[12] = vals[block.m_hi.m_s03]; + pPixels[13] = vals[block.m_hi.m_s13]; + pPixels[14] = vals[block.m_hi.m_s23]; + pPixels[15] = vals[block.m_hi.m_s33]; + + return true; +} + +bool unpack_bc7(const void *pBlock, bc7decomp::color_rgba *pPixels) +{ + const uint32_t first_byte = static_cast(pBlock)[0]; + + for (uint32_t mode = 0; mode <= 7; mode++) + { + if (first_byte & (1U << mode)) + { + switch (mode) + { + case 0: + case 2: + return unpack_bc7_mode0_2(mode, pBlock, pPixels); + case 1: + case 3: + case 7: + return unpack_bc7_mode1_3_7(mode, pBlock, pPixels); + case 4: + case 5: + return unpack_bc7_mode4_5(mode, pBlock, pPixels); + case 6: + return unpack_bc7_mode6(pBlock, pPixels); + default: + break; + } + } + } + + return false; +} + +} // namespace bc7decomp_ref + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright(c) 2020 Richard Geldreich, Jr. +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. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain(www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non - commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain.We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors.We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +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 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. +------------------------------------------------------------------------------ +*/ + diff --git a/external/bc7enc_rdo/bc7e.ispc b/external/bc7enc_rdo/bc7e.ispc new file mode 100644 index 0000000000..ea39fce74f --- /dev/null +++ b/external/bc7enc_rdo/bc7e.ispc @@ -0,0 +1,4952 @@ +// bc7e.ispc - Fast high quality SIMD BC7 encoder +// Copyright (C) 2018-2020 Binomial LLC, All rights reserved. Apache 2.0 license - see LICENSE. +// Typically compiled as: ispc -g -O2 "%(Filename).ispc" -o "$(TargetDir)%(Filename).obj" -h "$(ProjectDir)%(Filename)_ispc.h" --target=sse2,sse4,avx,avx2 --opt=fast-math --opt=disable-assertions +// --opt=fast-math is optional (doesn't make much if any measurable difference). +// Thanks to ArasP for the determinism fix. + +#define BC7E_NON_DETERMINISTIC (0) +#define BC7E_2SUBSET_CHECKERBOARD_PARTITION_INDEX (34) +#define BC7E_BLOCK_SIZE (16) +#define BC7E_MAX_PARTITIONS0 (16) +#define BC7E_MAX_PARTITIONS1 (64) +#define BC7E_MAX_PARTITIONS2 (64) +#define BC7E_MAX_PARTITIONS3 (64) +#define BC7E_MAX_PARTITIONS7 (64) +#define BC7E_MAX_UBER_LEVEL (4) + +typedef unsigned int8 uint8_t; +typedef unsigned int64 uint16_t; +typedef unsigned int32 uint32_t; +typedef unsigned int64 uint64_t; +typedef int8 int8_t; +typedef int int32_t; +typedef int64 int64_t; + +#ifndef UINT16_MAX +#define UINT16_MAX (0xFFFF) +#endif + +#ifndef UINT_MAX +#define UINT_MAX (0xFFFFFFFFU) +#endif + +#ifndef UINT64_MAX +#define UINT64_MAX (0xFFFFFFFFFFFFFFFFULL) +#endif + +#ifndef INT64_MAX +#define INT64_MAX (0x7FFFFFFFFFFFFFFFULL) +#endif + +struct bc7e_compress_block_params +{ + uint32_t m_max_partitions_mode[8]; + + uint32_t m_weights[4]; + + uint32_t m_uber_level; + uint32_t m_refinement_passes; + + uint32_t m_mode4_rotation_mask; + uint32_t m_mode4_index_mask; + uint32_t m_mode5_rotation_mask; + uint32_t m_uber1_mask; + + bool m_perceptual; + bool m_pbit_search; + bool m_mode6_only; + bool m_unused0; + + struct + { + uint32_t m_max_mode13_partitions_to_try; + uint32_t m_max_mode0_partitions_to_try; + uint32_t m_max_mode2_partitions_to_try; + bool m_use_mode[7]; + bool m_unused1; + } m_opaque_settings; + + struct + { + uint32_t m_max_mode7_partitions_to_try; + uint32_t m_mode67_error_weight_mul[4]; + + bool m_use_mode4; + bool m_use_mode5; + bool m_use_mode6; + bool m_use_mode7; + + bool m_use_mode4_rotation; + bool m_use_mode5_rotation; + bool m_unused2; + bool m_unused3; + } m_alpha_settings; + +}; + +static inline uniform int32_t clampi(uniform int32_t value, uniform int32_t low, uniform int32_t high) { return clamp(value, low, high); } +static inline uniform uint32_t clampu(uniform uint32_t value, uniform uint32_t low, uniform uint32_t high) { return clamp(value, low, high); } +static inline uniform float clampf(uniform float value, uniform float low, uniform float high) { return clamp(value, low, high); } + +static inline int32_t clampi(int32_t value, int32_t low, int32_t high) { return clamp(value, low, high); } +static inline uint32_t clampu(uint32_t value, uint32_t low, uint32_t high) { return clamp(value, low, high); } +static inline float clampf(float value, float low, float high) { return clamp(value, low, high); } + +static inline uniform float saturate(uniform float value) { return clampf(value, 0, 1.0f); } +static inline uniform float saturate255(uniform float value) { return clampf(value, 0, 255.0f); } + +static inline float saturate(float value) { return clampf(value, 0, 1.0f); } +static inline float saturate255(float value) { return clampf(value, 0, 255.0f); } + +static inline uniform uint8_t minimumub(uniform uint8_t a, uniform uint8_t b) { return min(a, b); } +static inline uniform int32_t minimumi(uniform int32_t a, uniform int32_t b) { return min(a, b); } +static inline uniform uint32_t minimumu(uniform uint32_t a, uniform uint32_t b) { return min(a, b); } +static inline uniform uint64_t minimumu64(uniform uint64_t a, uniform uint64_t b) { return min(a, b); } +static inline uniform float minimumf(uniform float a, uniform float b) { return min(a, b); } + +static inline uniform uint8_t maximumub(uniform uint8_t a, uniform uint8_t b) { return max(a, b); } +static inline uniform int32_t maximumi(uniform int32_t a, uniform int32_t b) { return max(a, b); } +static inline uniform uint32_t maximumu(uniform uint32_t a, uniform uint32_t b) { return max(a, b); } +static inline uniform float maximumf(uniform float a, uniform float b) { return max(a, b); } + +static inline uint8_t minimumub(uint8_t a, uint8_t b) { return min(a, b); } +static inline int32_t minimumi(int32_t a, int32_t b) { return min(a, b); } +static inline uint32_t minimumu(uint32_t a, uint32_t b) { return min(a, b); } +static inline uint64_t minimumu64(uint64_t a, uint64_t b) { return min(a, b); } +static inline float minimumf(float a, float b) { return min(a, b); } + +static inline uint8_t maximumub(uint8_t a, uint8_t b) { return max(a, b); } +static inline int32_t maximumi(int32_t a, int32_t b) { return max(a, b); } +static inline uint32_t maximumu(uint32_t a, uint32_t b) { return max(a, b); } +static inline float maximumf(float a, float b) { return max(a, b); } + +static inline uniform int32_t iabs32(uniform int32_t v) { uniform uint32_t msk = v >> 31; return (v ^ msk) - msk; } +static inline int32_t iabs32(int32_t v) { uint32_t msk = v >> 31; return (v ^ msk) - msk; } + +static inline void swapub(uniform uint8_t * uniform a, uniform uint8_t * uniform b) { uniform uint8_t t = *a; *a = *b; *b = t; } +static inline void swapu(uniform uint32_t * uniform a, uniform uint32_t * uniform b) { uniform uint32_t t = *a; *a = *b; *b = t; } +static inline void swapi(uniform int32_t * uniform a, uniform int32_t * uniform b) { uniform int32_t t = *a; *a = *b; *b = t; } +static inline void swapf(uniform float * uniform a, uniform float * uniform b) { uniform float t = *a; *a = *b; *b = t; } + +static inline void swapub(varying uint8_t *uniform a, varying uint8_t *uniform b) { uint8_t t = *a; *a = *b; *b = t; } +static inline void swapi(varying int32_t *uniform a, varying int32_t *uniform b) { int32_t t = *a; *a = *b; *b = t; } +static inline void swapu(varying uint32_t *uniform a, varying uint32_t *uniform b) { uint32_t t = *a; *a = *b; *b = t; } +static inline void swapf(varying float *uniform a, varying float *uniform b) { float t = *a; *a = *b; *b = t; } + +static inline float square(float s) { return s * s; } +static inline int square(int s) { return s * s; } + +struct color_quad_u8 +{ + uint8_t m_c[4]; +}; + +struct color_quad_i +{ + int32_t m_c[4]; +}; + +struct color_quad_f +{ + float m_c[4]; +}; + +static inline color_quad_i component_min_rgb(const varying color_quad_i * uniform pA, const varying color_quad_i * uniform pB) +{ + color_quad_i res; + res.m_c[0] = minimumi(pA->m_c[0], pB->m_c[0]); + res.m_c[1] = minimumi(pA->m_c[1], pB->m_c[1]); + res.m_c[2] = minimumi(pA->m_c[2], pB->m_c[2]); + res.m_c[3] = 255; + return res; +} + +static inline color_quad_i component_max_rgb(const varying color_quad_i * uniform pA, const varying color_quad_i * uniform pB) +{ + color_quad_i res; + res.m_c[0] = maximumi(pA->m_c[0], pB->m_c[0]); + res.m_c[1] = maximumi(pA->m_c[1], pB->m_c[1]); + res.m_c[2] = maximumi(pA->m_c[2], pB->m_c[2]); + res.m_c[3] = 255; + return res; +} + +static inline varying color_quad_i *color_quad_i_set_clamped(varying color_quad_i * uniform pRes, varying int32_t r, varying int32_t g, varying int32_t b, varying int32_t a) +{ + pRes->m_c[0] = clampi(r, 0, 255); + pRes->m_c[1] = clampi(g, 0, 255); + pRes->m_c[2] = clampi(b, 0, 255); + pRes->m_c[3] = clampi(a, 0, 255); + return pRes; +} + +static inline varying color_quad_i *color_quad_i_set(varying color_quad_i * uniform pRes, varying int32_t r, varying int32_t g, varying int32_t b, varying int32_t a) +{ + pRes->m_c[0] = r; + pRes->m_c[1] = g; + pRes->m_c[2] = b; + pRes->m_c[3] = a; + return pRes; +} + +static inline varying color_quad_i *color_quad_i_set(varying color_quad_i * uniform pRes, uniform int32_t r, uniform int32_t g, uniform int32_t b, uniform int32_t a) +{ + pRes->m_c[0] = r; + pRes->m_c[1] = g; + pRes->m_c[2] = b; + pRes->m_c[3] = a; + return pRes; +} + +static inline bool color_quad_i_equals(const varying color_quad_i * uniform pLHS, const varying color_quad_i * uniform pRHS) +{ + return (pLHS->m_c[0] == pRHS->m_c[0]) && (pLHS->m_c[1] == pRHS->m_c[1]) && (pLHS->m_c[2] == pRHS->m_c[2]) && (pLHS->m_c[3] == pRHS->m_c[3]); +} + +static inline bool color_quad_i_notequals(const varying color_quad_i * uniform pLHS, const varying color_quad_i * uniform pRHS) +{ + return !color_quad_i_equals(pLHS, pRHS); +} + +struct vec4F +{ + float m_c[4]; +}; + +static inline varying vec4F * uniform vec4F_set_scalar(varying vec4F * uniform pV, float x) +{ + pV->m_c[0] = x; + pV->m_c[1] = x; + pV->m_c[2] = x; + pV->m_c[3] = x; + return pV; +} + +static inline varying vec4F * uniform vec4F_set(varying vec4F * uniform pV, float x, float y, float z, float w) +{ + pV->m_c[0] = x; + pV->m_c[1] = y; + pV->m_c[2] = z; + pV->m_c[3] = w; + return pV; +} + +static inline varying vec4F * uniform vec4F_saturate_in_place(varying vec4F * uniform pV) +{ + pV->m_c[0] = saturate(pV->m_c[0]); + pV->m_c[1] = saturate(pV->m_c[1]); + pV->m_c[2] = saturate(pV->m_c[2]); + pV->m_c[3] = saturate(pV->m_c[3]); + return pV; +} + +static inline vec4F vec4F_saturate(const varying vec4F * uniform pV) +{ + vec4F res; + res.m_c[0] = saturate(pV->m_c[0]); + res.m_c[1] = saturate(pV->m_c[1]); + res.m_c[2] = saturate(pV->m_c[2]); + res.m_c[3] = saturate(pV->m_c[3]); + return res; +} + +static inline vec4F vec4F_from_color(const varying color_quad_i * uniform pC) +{ + vec4F res; + vec4F_set(&res, pC->m_c[0], pC->m_c[1], pC->m_c[2], pC->m_c[3]); + return res; +} + +static inline vec4F vec4F_add(const varying vec4F * uniform pLHS, const varying vec4F * uniform pRHS) +{ + vec4F res; + vec4F_set(&res, pLHS->m_c[0] + pRHS->m_c[0], pLHS->m_c[1] + pRHS->m_c[1], pLHS->m_c[2] + pRHS->m_c[2], pLHS->m_c[3] + pRHS->m_c[3]); + return res; +} + +static inline vec4F vec4F_sub(const varying vec4F * uniform pLHS, const varying vec4F *uniform pRHS) +{ + vec4F res; + vec4F_set(&res, pLHS->m_c[0] - pRHS->m_c[0], pLHS->m_c[1] - pRHS->m_c[1], pLHS->m_c[2] - pRHS->m_c[2], pLHS->m_c[3] - pRHS->m_c[3]); + return res; +} + +static inline float vec4F_dot(const varying vec4F * uniform pLHS, const varying vec4F * uniform pRHS) +{ + return pLHS->m_c[0] * pRHS->m_c[0] + pLHS->m_c[1] * pRHS->m_c[1] + pLHS->m_c[2] * pRHS->m_c[2] + pLHS->m_c[3] * pRHS->m_c[3]; +} + +static inline vec4F vec4F_mul(const varying vec4F * uniform pLHS, float s) +{ + vec4F res; + vec4F_set(&res, pLHS->m_c[0] * s, pLHS->m_c[1] * s, pLHS->m_c[2] * s, pLHS->m_c[3] * s); + return res; +} + +static inline varying vec4F *vec4F_normalize_in_place(varying vec4F * uniform pV) +{ + float s = pV->m_c[0] * pV->m_c[0] + pV->m_c[1] * pV->m_c[1] + pV->m_c[2] * pV->m_c[2] + pV->m_c[3] * pV->m_c[3]; + + if (s != 0.0f) + { + s = 1.0f / sqrt(s); + + pV->m_c[0] *= s; + pV->m_c[1] *= s; + pV->m_c[2] *= s; + pV->m_c[3] *= s; + } + + return pV; +} + +static const uniform uint32_t g_bc7_weights2[4] = { 0, 21, 43, 64 }; +static const uniform uint32_t g_bc7_weights3[8] = { 0, 9, 18, 27, 37, 46, 55, 64 }; +static const uniform uint32_t g_bc7_weights4[16] = { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }; + +// Precomputed weight constants used during least fit determination. For each entry in g_bc7_weights[]: w * w, (1.0f - w) * w, (1.0f - w) * (1.0f - w), w +static const uniform float g_bc7_weights2x[4 * 4] = { 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.107666f, 0.220459f, 0.451416f, 0.328125f, 0.451416f, 0.220459f, 0.107666f, 0.671875f, 1.000000f, 0.000000f, 0.000000f, 1.000000f }; +static const uniform float g_bc7_weights3x[8 * 4] = { 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.019775f, 0.120850f, 0.738525f, 0.140625f, 0.079102f, 0.202148f, 0.516602f, 0.281250f, 0.177979f, 0.243896f, 0.334229f, 0.421875f, 0.334229f, 0.243896f, 0.177979f, 0.578125f, 0.516602f, 0.202148f, + 0.079102f, 0.718750f, 0.738525f, 0.120850f, 0.019775f, 0.859375f, 1.000000f, 0.000000f, 0.000000f, 1.000000f }; +static const uniform float g_bc7_weights4x[16 * 4] = { 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.003906f, 0.058594f, 0.878906f, 0.062500f, 0.019775f, 0.120850f, 0.738525f, 0.140625f, 0.041260f, 0.161865f, 0.635010f, 0.203125f, 0.070557f, 0.195068f, 0.539307f, 0.265625f, 0.107666f, 0.220459f, + 0.451416f, 0.328125f, 0.165039f, 0.241211f, 0.352539f, 0.406250f, 0.219727f, 0.249023f, 0.282227f, 0.468750f, 0.282227f, 0.249023f, 0.219727f, 0.531250f, 0.352539f, 0.241211f, 0.165039f, 0.593750f, 0.451416f, 0.220459f, 0.107666f, 0.671875f, 0.539307f, 0.195068f, 0.070557f, 0.734375f, + 0.635010f, 0.161865f, 0.041260f, 0.796875f, 0.738525f, 0.120850f, 0.019775f, 0.859375f, 0.878906f, 0.058594f, 0.003906f, 0.937500f, 1.000000f, 0.000000f, 0.000000f, 1.000000f }; + +static const uniform int g_bc7_partition1[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; + +static const uniform int g_bc7_partition2[64 * 16] = +{ + 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1, 0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1, 0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1, 0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1, 0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1, 0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1, 0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, + 0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1, 0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0, 0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0, 0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0, 0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1, + 0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0, 0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0, 0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0, 0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0, 0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0, 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0, 0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0, 0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0, + 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1, 0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0, 0,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0, 0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0, 0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0, 0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1, 0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1, + 0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0, 0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0, 0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0, 0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0, 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0, 0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1, 0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1, 0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0, + 0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0, 0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0, 0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0, 0,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1, 0,1,1,0,0,0,1,1,1,0,0,1,1,1,0,0, 0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0, + 0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,1, 0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1, 0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1, 0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1, 0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1, 0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0, 0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0, 0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1 +}; + +static const uniform int g_bc7_table_anchor_index_second_subset[64] = +{ + 15,15,15,15,15,15,15,15, 15,15,15,15,15,15,15,15, 15, 2, 8, 2, 2, 8, 8,15, 2, 8, 2, 2, 8, 8, 2, 2, 15,15, 6, 8, 2, 8,15,15, 2, 8, 2, 2, 2,15,15, 6, 6, 2, 6, 8,15,15, 2, 2, 15,15,15,15,15, 2, 2,15 +}; + +static const uniform int g_bc7_partition3[64 * 16] = +{ + 0,0,1,1,0,0,1,1,0,2,2,1,2,2,2,2, 0,0,0,1,0,0,1,1,2,2,1,1,2,2,2,1, 0,0,0,0,2,0,0,1,2,2,1,1,2,2,1,1, 0,2,2,2,0,0,2,2,0,0,1,1,0,1,1,1, 0,0,0,0,0,0,0,0,1,1,2,2,1,1,2,2, 0,0,1,1,0,0,1,1,0,0,2,2,0,0,2,2, 0,0,2,2,0,0,2,2,1,1,1,1,1,1,1,1, 0,0,1,1,0,0,1,1,2,2,1,1,2,2,1,1, + 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2, 0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2, 0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2, 0,0,1,2,0,0,1,2,0,0,1,2,0,0,1,2, 0,1,1,2,0,1,1,2,0,1,1,2,0,1,1,2, 0,1,2,2,0,1,2,2,0,1,2,2,0,1,2,2, 0,0,1,1,0,1,1,2,1,1,2,2,1,2,2,2, 0,0,1,1,2,0,0,1,2,2,0,0,2,2,2,0, + 0,0,0,1,0,0,1,1,0,1,1,2,1,1,2,2, 0,1,1,1,0,0,1,1,2,0,0,1,2,2,0,0, 0,0,0,0,1,1,2,2,1,1,2,2,1,1,2,2, 0,0,2,2,0,0,2,2,0,0,2,2,1,1,1,1, 0,1,1,1,0,1,1,1,0,2,2,2,0,2,2,2, 0,0,0,1,0,0,0,1,2,2,2,1,2,2,2,1, 0,0,0,0,0,0,1,1,0,1,2,2,0,1,2,2, 0,0,0,0,1,1,0,0,2,2,1,0,2,2,1,0, + 0,1,2,2,0,1,2,2,0,0,1,1,0,0,0,0, 0,0,1,2,0,0,1,2,1,1,2,2,2,2,2,2, 0,1,1,0,1,2,2,1,1,2,2,1,0,1,1,0, 0,0,0,0,0,1,1,0,1,2,2,1,1,2,2,1, 0,0,2,2,1,1,0,2,1,1,0,2,0,0,2,2, 0,1,1,0,0,1,1,0,2,0,0,2,2,2,2,2, 0,0,1,1,0,1,2,2,0,1,2,2,0,0,1,1, 0,0,0,0,2,0,0,0,2,2,1,1,2,2,2,1, + 0,0,0,0,0,0,0,2,1,1,2,2,1,2,2,2, 0,2,2,2,0,0,2,2,0,0,1,2,0,0,1,1, 0,0,1,1,0,0,1,2,0,0,2,2,0,2,2,2, 0,1,2,0,0,1,2,0,0,1,2,0,0,1,2,0, 0,0,0,0,1,1,1,1,2,2,2,2,0,0,0,0, 0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0, 0,1,2,0,2,0,1,2,1,2,0,1,0,1,2,0, 0,0,1,1,2,2,0,0,1,1,2,2,0,0,1,1, + 0,0,1,1,1,1,2,2,2,2,0,0,0,0,1,1, 0,1,0,1,0,1,0,1,2,2,2,2,2,2,2,2, 0,0,0,0,0,0,0,0,2,1,2,1,2,1,2,1, 0,0,2,2,1,1,2,2,0,0,2,2,1,1,2,2, 0,0,2,2,0,0,1,1,0,0,2,2,0,0,1,1, 0,2,2,0,1,2,2,1,0,2,2,0,1,2,2,1, 0,1,0,1,2,2,2,2,2,2,2,2,0,1,0,1, 0,0,0,0,2,1,2,1,2,1,2,1,2,1,2,1, + 0,1,0,1,0,1,0,1,0,1,0,1,2,2,2,2, 0,2,2,2,0,1,1,1,0,2,2,2,0,1,1,1, 0,0,0,2,1,1,1,2,0,0,0,2,1,1,1,2, 0,0,0,0,2,1,1,2,2,1,1,2,2,1,1,2, 0,2,2,2,0,1,1,1,0,1,1,1,0,2,2,2, 0,0,0,2,1,1,1,2,1,1,1,2,0,0,0,2, 0,1,1,0,0,1,1,0,0,1,1,0,2,2,2,2, 0,0,0,0,0,0,0,0,2,1,1,2,2,1,1,2, + 0,1,1,0,0,1,1,0,2,2,2,2,2,2,2,2, 0,0,2,2,0,0,1,1,0,0,1,1,0,0,2,2, 0,0,2,2,1,1,2,2,1,1,2,2,0,0,2,2, 0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,2, 0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,1, 0,2,2,2,1,2,2,2,0,2,2,2,1,2,2,2, 0,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2, 0,1,1,1,2,0,1,1,2,2,0,1,2,2,2,0, +}; + +static const uniform int g_bc7_table_anchor_index_third_subset_1[64] = +{ + 3, 3,15,15, 8, 3,15,15, 8, 8, 6, 6, 6, 5, 3, 3, 3, 3, 8,15, 3, 3, 6,10, 5, 8, 8, 6, 8, 5,15,15, 8,15, 3, 5, 6,10, 8,15, 15, 3,15, 5,15,15,15,15, 3,15, 5, 5, 5, 8, 5,10, 5,10, 8,13,15,12, 3, 3 +}; + +static const uniform int g_bc7_table_anchor_index_third_subset_2[64] = +{ + 15, 8, 8, 3,15,15, 3, 8, 15,15,15,15,15,15,15, 8, 15, 8,15, 3,15, 8,15, 8, 3,15, 6,10,15,15,10, 8, 15, 3,15,10,10, 8, 9,10, 6,15, 8,15, 3, 6, 6, 8, 15, 3,15,15,15,15,15,15, 15,15,15,15, 3,15,15, 8 +}; + +static const uniform int g_bc7_num_subsets[8] = { 3, 2, 3, 2, 1, 1, 1, 2 }; +static const uniform int g_bc7_partition_bits[8] = { 4, 6, 6, 6, 0, 0, 0, 6 }; +static const uniform int g_bc7_rotation_bits[8] = { 0, 0, 0, 0, 2, 2, 0, 0 }; +static const uniform int g_bc7_color_index_bitcount[8] = { 3, 3, 2, 2, 2, 2, 4, 2 }; +static int uniform get_bc7_color_index_size(uniform int mode, uniform int index_selection_bit) { return g_bc7_color_index_bitcount[mode] + index_selection_bit; } +#pragma ignore warning(perf) +static int varying get_bc7_color_index_size(varying int mode, varying int index_selection_bit) { return g_bc7_color_index_bitcount[mode] + index_selection_bit; } +static uniform int g_bc7_alpha_index_bitcount[8] = { 0, 0, 0, 0, 3, 2, 4, 2 }; +static uniform int get_bc7_alpha_index_size(uniform int mode, uniform int index_selection_bit) { return g_bc7_alpha_index_bitcount[mode] - index_selection_bit; } +#pragma ignore warning(perf) +static varying int get_bc7_alpha_index_size(varying int mode, varying int index_selection_bit) { return g_bc7_alpha_index_bitcount[mode] - index_selection_bit; } +static const uniform int g_bc7_mode_has_p_bits[8] = { 1, 1, 0, 1, 0, 0, 1, 1 }; +static const uniform int g_bc7_mode_has_shared_p_bits[8] = { 0, 1, 0, 0, 0, 0, 0, 0 }; +static const uniform int g_bc7_color_precision_table[8] = { 4, 6, 5, 7, 5, 7, 7, 5 }; +static const uniform int g_bc7_color_precision_plus_pbit_table[8] = { 5, 7, 5, 8, 5, 7, 8, 6 }; +static const uniform int g_bc7_alpha_precision_table[8] = { 0, 0, 0, 0, 6, 8, 7, 5 }; +static const uniform int g_bc7_alpha_precision_plus_pbit_table[8] = { 0, 0, 0, 0, 6, 8, 8, 6 }; +static uniform bool get_bc7_mode_has_seperate_alpha_selectors(uniform int mode) { return (mode == 4) || (mode == 5); } +static varying bool get_bc7_mode_has_seperate_alpha_selectors(varying int mode) { return (mode == 4) || (mode == 5); } + +struct endpoint_err +{ + uint16_t m_error; + uint8_t m_lo; + uint8_t m_hi; +}; + +static uniform endpoint_err g_bc7_mode_1_optimal_endpoints[256][2]; // [c][pbit] +const uniform uint32_t BC7E_MODE_1_OPTIMAL_INDEX = 2; + +static uniform endpoint_err g_bc7_mode_7_optimal_endpoints[256][2][2]; // [c][pbit][hp][lp] +const uniform uint32_t BC7E_MODE_7_OPTIMAL_INDEX = 1; + +static uniform endpoint_err g_bc7_mode_6_optimal_endpoints[256][2][2]; // [c][hp][lp] +const uniform uint32_t BC7E_MODE_6_OPTIMAL_INDEX = 5; + +static uniform uint32_t g_bc7_mode_4_optimal_endpoints3[256]; // [c] +static uniform uint32_t g_bc7_mode_4_optimal_endpoints2[256]; // [c] +const uniform uint32_t BC7E_MODE_4_OPTIMAL_INDEX3 = 2; +const uniform uint32_t BC7E_MODE_4_OPTIMAL_INDEX2 = 1; + +static uniform uint32_t g_bc7_mode_5_optimal_endpoints[256]; // [c] +const uniform uint32_t BC7E_MODE_5_OPTIMAL_INDEX = 1; + +static uniform endpoint_err g_bc7_mode_0_optimal_endpoints[256][2][2]; // [c][hp][lp] +const uniform uint32_t BC7E_MODE_0_OPTIMAL_INDEX = 2; + +static uniform bool g_codec_initialized; + +export void bc7e_compress_block_init() +{ + if (g_codec_initialized) + return; + + // Mode 0: 444.1 + for (uniform int c = 0; c < 256; c++) + { + for (uniform uint32_t hp = 0; hp < 2; hp++) + { + for (uniform uint32_t lp = 0; lp < 2; lp++) + { + uniform endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + + for (uniform uint32_t l = 0; l < 16; l++) + { + uniform uint32_t low = ((l << 1) | lp) << 3; + low |= (low >> 5); + + for (uniform uint32_t h = 0; h < 16; h++) + { + uniform uint32_t high = ((h << 1) | hp) << 3; + high |= (high >> 5); + + const uniform int k = (low * (64 - g_bc7_weights3[BC7E_MODE_0_OPTIMAL_INDEX]) + high * g_bc7_weights3[BC7E_MODE_0_OPTIMAL_INDEX] + 32) >> 6; + + const uniform int err = (k - c) * (k - c); + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_bc7_mode_0_optimal_endpoints[c][hp][lp] = best; + } // lp + } // hp + } // c + + // Mode 1: 666.1 + for (uniform int c = 0; c < 256; c++) + { + for (uniform uint32_t lp = 0; lp < 2; lp++) + { + uniform endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + + for (uniform uint32_t l = 0; l < 64; l++) + { + uniform uint32_t low = ((l << 1) | lp) << 1; + low |= (low >> 7); + + for (uniform uint32_t h = 0; h < 64; h++) + { + uniform uint32_t high = ((h << 1) | lp) << 1; + high |= (high >> 7); + + const uniform int k = (low * (64 - g_bc7_weights3[BC7E_MODE_1_OPTIMAL_INDEX]) + high * g_bc7_weights3[BC7E_MODE_1_OPTIMAL_INDEX] + 32) >> 6; + + const uniform int err = (k - c) * (k - c); + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_bc7_mode_1_optimal_endpoints[c][lp] = best; + } // lp + } // c + + // Mode 6: 777.1 4-bit indices + for (uniform int c = 0; c < 256; c++) + { + for (uniform uint32_t hp = 0; hp < 2; hp++) + { + for (uniform uint32_t lp = 0; lp < 2; lp++) + { + uniform endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + + for (uniform uint32_t l = 0; l < 128; l++) + { + uniform uint32_t low = (l << 1) | lp; + + for (uniform uint32_t h = 0; h < 128; h++) + { + uniform uint32_t high = (h << 1) | hp; + + const uniform int k = (low * (64 - g_bc7_weights4[BC7E_MODE_6_OPTIMAL_INDEX]) + high * g_bc7_weights4[BC7E_MODE_6_OPTIMAL_INDEX] + 32) >> 6; + + const uniform int err = (k - c) * (k - c); + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_bc7_mode_6_optimal_endpoints[c][hp][lp] = best; + } // lp + } // hp + } // c + + // Mode 5: 777 2-bit indices + for (uniform int c = 0; c < 256; c++) + { + uniform endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + best.m_lo = 0; + best.m_hi = 0; + + for (uniform uint32_t l = 0; l < 128; l++) + { + uniform uint32_t low = l << 1; + low |= (low >> 7); + + for (uniform uint32_t h = 0; h < 128; h++) + { + uniform uint32_t high = h << 1; + high |= (high >> 7); + + const uniform int k = (low * (64 - g_bc7_weights2[BC7E_MODE_5_OPTIMAL_INDEX]) + high * g_bc7_weights2[BC7E_MODE_5_OPTIMAL_INDEX] + 32) >> 6; + + const uniform int err = (k - c) * (k - c); + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_bc7_mode_5_optimal_endpoints[c] = (uint32_t)best.m_lo | (((uint32_t)best.m_hi) << 8); + + } // c + + + //Mode 4: 555 3-bit indices + for (uniform int c = 0; c < 256; c++) + { + uniform endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + best.m_lo = 0; + best.m_hi = 0; + + for (uniform uint32_t l = 0; l < 32; l++) + { + uniform uint32_t low = l << 3; + low |= (low >> 5); + + for (uniform uint32_t h = 0; h < 32; h++) + { + uniform uint32_t high = h << 3; + high |= (high >> 5); + + const uniform int k = (low * (64 - g_bc7_weights3[BC7E_MODE_4_OPTIMAL_INDEX3]) + high * g_bc7_weights3[BC7E_MODE_4_OPTIMAL_INDEX3] + 32) >> 6; + + const uniform int err = (k - c) * (k - c); + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_bc7_mode_4_optimal_endpoints3[c] = (uint32_t)best.m_lo | (((uint32_t)best.m_hi) << 8); + + } // c + + // Mode 4: 555 2-bit indices + for (uniform int c = 0; c < 256; c++) + { + uniform endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + best.m_lo = 0; + best.m_hi = 0; + + for (uniform uint32_t l = 0; l < 32; l++) + { + uniform uint32_t low = l << 3; + low |= (low >> 5); + + for (uniform uint32_t h = 0; h < 32; h++) + { + uniform uint32_t high = h << 3; + high |= (high >> 5); + + const uniform int k = (low * (64 - g_bc7_weights2[BC7E_MODE_4_OPTIMAL_INDEX2]) + high * g_bc7_weights2[BC7E_MODE_4_OPTIMAL_INDEX2] + 32) >> 6; + + const uniform int err = (k - c) * (k - c); + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_bc7_mode_4_optimal_endpoints2[c] = (uint32_t)best.m_lo | (((uint32_t)best.m_hi) << 8); + + } // c + + // Mode 7: 555.1 2-bit indices + for (uniform int c = 0; c < 256; c++) + { + uniform endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + best.m_lo = 0; + best.m_hi = 0; + + for (uniform uint32_t hp = 0; hp < 2; hp++) + { + for (uniform uint32_t lp = 0; lp < 2; lp++) + { + for (uniform uint32_t l = 0; l < 32; l++) + { + uniform uint32_t low = ((l << 1) | lp) << 2; + low |= (low >> 6); + + for (uniform uint32_t h = 0; h < 32; h++) + { + uniform uint32_t high = ((h << 1) | hp) << 2; + high |= (high >> 6); + + const uniform int k = (low * (64 - g_bc7_weights2[BC7E_MODE_7_OPTIMAL_INDEX]) + high * g_bc7_weights2[BC7E_MODE_7_OPTIMAL_INDEX] + 32) >> 6; + + const uniform int err = (k - c) * (k - c); + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_bc7_mode_7_optimal_endpoints[c][hp][lp] = best; + + } // hp + + } // lp + + } // c + + g_codec_initialized = true; +} + +static void compute_least_squares_endpoints_rgba(uint32_t N, const varying int *uniform pSelectors, const uniform vec4F *uniform pSelector_weights, varying vec4F *uniform pXl, varying vec4F *uniform pXh, const varying color_quad_i * uniform pColors) +{ + // Least squares using normal equations: http://www.cs.cornell.edu/~bindel/class/cs3220-s12/notes/lec10.pdf + // I did this in matrix form first, expanded out all the ops, then optimized it a bit. + float z00 = 0.0f, z01 = 0.0f, z10 = 0.0f, z11 = 0.0f; + float q00_r = 0.0f, q10_r = 0.0f, t_r = 0.0f; + float q00_g = 0.0f, q10_g = 0.0f, t_g = 0.0f; + float q00_b = 0.0f, q10_b = 0.0f, t_b = 0.0f; + float q00_a = 0.0f, q10_a = 0.0f, t_a = 0.0f; + for (uniform uint32_t i = 0; i < N; i++) + { + const uint32_t sel = pSelectors[i]; + +#pragma ignore warning(perf) + z00 += pSelector_weights[sel].m_c[0]; +#pragma ignore warning(perf) + z10 += pSelector_weights[sel].m_c[1]; +#pragma ignore warning(perf) + z11 += pSelector_weights[sel].m_c[2]; + +#pragma ignore warning(perf) + float w = pSelector_weights[sel].m_c[3]; + + q00_r += w * (int)pColors[i].m_c[0]; t_r += (int)pColors[i].m_c[0]; + q00_g += w * (int)pColors[i].m_c[1]; t_g += (int)pColors[i].m_c[1]; + q00_b += w * (int)pColors[i].m_c[2]; t_b += (int)pColors[i].m_c[2]; + q00_a += w * (int)pColors[i].m_c[3]; t_a += (int)pColors[i].m_c[3]; + } + + q10_r = t_r - q00_r; + q10_g = t_g - q00_g; + q10_b = t_b - q00_b; + q10_a = t_a - q00_a; + + z01 = z10; + + float det = z00 * z11 - z01 * z10; + if (det != 0.0f) + det = 1.0f / det; + + float iz00, iz01, iz10, iz11; + iz00 = z11 * det; + iz01 = -z01 * det; + iz10 = -z10 * det; + iz11 = z00 * det; + + pXl->m_c[0] = (float)(iz00 * q00_r + iz01 * q10_r); pXh->m_c[0] = (float)(iz10 * q00_r + iz11 * q10_r); + pXl->m_c[1] = (float)(iz00 * q00_g + iz01 * q10_g); pXh->m_c[1] = (float)(iz10 * q00_g + iz11 * q10_g); + pXl->m_c[2] = (float)(iz00 * q00_b + iz01 * q10_b); pXh->m_c[2] = (float)(iz10 * q00_b + iz11 * q10_b); + pXl->m_c[3] = (float)(iz00 * q00_a + iz01 * q10_a); pXh->m_c[3] = (float)(iz10 * q00_a + iz11 * q10_a); +} + +static void compute_least_squares_endpoints_rgb(uint32_t N, const varying int *uniform pSelectors, const uniform vec4F *uniform pSelector_weights, varying vec4F *uniform pXl, varying vec4F *uniform pXh, const varying color_quad_i *uniform pColors) +{ + // Least squares using normal equations: http://www.cs.cornell.edu/~bindel/class/cs3220-s12/notes/lec10.pdf + // I did this in matrix form first, expanded out all the ops, then optimized it a bit. + float z00 = 0.0f, z01 = 0.0f, z10 = 0.0f, z11 = 0.0f; + float q00_r = 0.0f, q10_r = 0.0f, t_r = 0.0f; + float q00_g = 0.0f, q10_g = 0.0f, t_g = 0.0f; + float q00_b = 0.0f, q10_b = 0.0f, t_b = 0.0f; + for (uniform uint32_t i = 0; i < N; i++) + { + const uint32_t sel = pSelectors[i]; + +#pragma ignore warning(perf) + z00 += pSelector_weights[sel].m_c[0]; +#pragma ignore warning(perf) + z10 += pSelector_weights[sel].m_c[1]; +#pragma ignore warning(perf) + z11 += pSelector_weights[sel].m_c[2]; +#pragma ignore warning(perf) + float w = pSelector_weights[sel].m_c[3]; + + q00_r += w * (int)pColors[i].m_c[0]; t_r += (int)pColors[i].m_c[0]; + q00_g += w * (int)pColors[i].m_c[1]; t_g += (int)pColors[i].m_c[1]; + q00_b += w * (int)pColors[i].m_c[2]; t_b += (int)pColors[i].m_c[2]; + } + + q10_r = t_r - q00_r; + q10_g = t_g - q00_g; + q10_b = t_b - q00_b; + + z01 = z10; + + float det = z00 * z11 - z01 * z10; + if (det != 0.0f) + det = 1.0f / det; + + float iz00, iz01, iz10, iz11; + iz00 = z11 * det; + iz01 = -z01 * det; + iz10 = -z10 * det; + iz11 = z00 * det; + + pXl->m_c[0] = (float)(iz00 * q00_r + iz01 * q10_r); pXh->m_c[0] = (float)(iz10 * q00_r + iz11 * q10_r); + pXl->m_c[1] = (float)(iz00 * q00_g + iz01 * q10_g); pXh->m_c[1] = (float)(iz10 * q00_g + iz11 * q10_g); + pXl->m_c[2] = (float)(iz00 * q00_b + iz01 * q10_b); pXh->m_c[2] = (float)(iz10 * q00_b + iz11 * q10_b); +} + +static void compute_least_squares_endpoints_a(uint32_t N, const varying int *uniform pSelectors, const vec4F *uniform pSelector_weights, varying float *uniform pXl, varying float *uniform pXh, const varying color_quad_i *uniform pColors) +{ + // Least squares using normal equations: http://www.cs.cornell.edu/~bindel/class/cs3220-s12/notes/lec10.pdf + // I did this in matrix form first, expanded out all the ops, then optimized it a bit. + float z00 = 0.0f, z01 = 0.0f, z10 = 0.0f, z11 = 0.0f; + float q00_a = 0.0f, q10_a = 0.0f, t_a = 0.0f; + for (uniform uint32_t i = 0; i < N; i++) + { + const uint32_t sel = pSelectors[i]; + +#pragma ignore warning(perf) + z00 += pSelector_weights[sel].m_c[0]; +#pragma ignore warning(perf) + z10 += pSelector_weights[sel].m_c[1]; +#pragma ignore warning(perf) + z11 += pSelector_weights[sel].m_c[2]; +#pragma ignore warning(perf) + float w = pSelector_weights[sel].m_c[3]; + + q00_a += w * (int)pColors[i].m_c[3]; t_a += (int)pColors[i].m_c[3]; + } + + q10_a = t_a - q00_a; + + z01 = z10; + + float det = z00 * z11 - z01 * z10; + if (det != 0.0f) + det = 1.0f / det; + + float iz00, iz01, iz10, iz11; + iz00 = z11 * det; + iz01 = -z01 * det; + iz10 = -z10 * det; + iz11 = z00 * det; + + *pXl = (float)(iz00 * q00_a + iz01 * q10_a); *pXh = (float)(iz10 * q00_a + iz11 * q10_a); +} + +struct color_cell_compressor_params +{ + uniform uint32_t m_num_selector_weights; + const uint32_t *uniform m_pSelector_weights; + const vec4F *uniform m_pSelector_weightsx; + uniform uint32_t m_comp_bits; + uniform uint32_t m_weights[4]; + uniform bool m_has_alpha; + uniform bool m_has_pbits; + uniform bool m_endpoints_share_pbit; + uniform bool m_perceptual; +}; + +static inline void color_cell_compressor_params_clear(uniform color_cell_compressor_params *uniform p) +{ + p->m_num_selector_weights = 0; + p->m_pSelector_weights = NULL; + p->m_pSelector_weightsx = NULL; + p->m_comp_bits = 0; + p->m_perceptual = false; + p->m_weights[0] = 1; + p->m_weights[1] = 1; + p->m_weights[2] = 1; + p->m_weights[3] = 1; + p->m_has_alpha = false; + p->m_has_pbits = false; + p->m_endpoints_share_pbit = false; +} + +struct color_cell_compressor_results +{ + uint64_t m_best_overall_err; + color_quad_i m_low_endpoint; + color_quad_i m_high_endpoint; + uint32_t m_pbits[2]; + varying int *uniform m_pSelectors; + varying int *uniform m_pSelectors_temp; +}; + +static inline color_quad_i scale_color(const varying color_quad_i *uniform pC, const uniform color_cell_compressor_params *uniform pParams) +{ + color_quad_i results; + + const uint32_t n = pParams->m_comp_bits + (pParams->m_has_pbits ? 1 : 0); + assert((n >= 4) && (n <= 8)); + + for (uniform uint32_t i = 0; i < 4; i++) + { + uint32_t v = pC->m_c[i] << (8 - n); +#pragma ignore warning(perf) + v |= (v >> n); + assert(v <= 255); + results.m_c[i] = v; + } + + return results; +} + +static const float pr_weight = (.5f / (1.0f - .2126f)) * (.5f / (1.0f - .2126f)); +static const float pb_weight = (.5f / (1.0f - .0722f)) * (.5f / (1.0f - .0722f)); + +static inline uint64_t compute_color_distance_rgb(const varying color_quad_i * uniform pE1, const varying color_quad_i *uniform pE2, uniform bool perceptual, const uint32_t uniform weights[4]) +{ + if (perceptual) + { + const float l1 = pE1->m_c[0] * .2126f + pE1->m_c[1] * .7152f + pE1->m_c[2] * .0722f; + const float cr1 = pE1->m_c[0] - l1; + const float cb1 = pE1->m_c[2] - l1; + + const float l2 = pE2->m_c[0] * .2126f + pE2->m_c[1] * .7152f + pE2->m_c[2] * .0722f; + const float cr2 = pE2->m_c[0] - l2; + const float cb2 = pE2->m_c[2] - l2; + + float dl = l1 - l2; + float dcr = cr1 - cr2; + float dcb = cb1 - cb2; + + return (int64_t)(weights[0] * (dl * dl) + weights[1] * pr_weight * (dcr * dcr) + weights[2] * pb_weight * (dcb * dcb)); + } + else + { + float dr = (float)pE1->m_c[0] - (float)pE2->m_c[0]; + float dg = (float)pE1->m_c[1] - (float)pE2->m_c[1]; + float db = (float)pE1->m_c[2] - (float)pE2->m_c[2]; + + return (int64_t)(weights[0] * dr * dr + weights[1] * dg * dg + weights[2] * db * db); + } +} + +static inline uint64_t compute_color_distance_rgba(const varying color_quad_i *uniform pE1, const varying color_quad_i *uniform pE2, uniform bool perceptual, const uint32_t uniform weights[4]) +{ + float da = (float)pE1->m_c[3] - (float)pE2->m_c[3]; + float a_err = weights[3] * (da * da); + + if (perceptual) + { + const float l1 = pE1->m_c[0] * .2126f + pE1->m_c[1] * .7152f + pE1->m_c[2] * .0722f; + const float cr1 = pE1->m_c[0] - l1; + const float cb1 = pE1->m_c[2] - l1; + + const float l2 = pE2->m_c[0] * .2126f + pE2->m_c[1] * .7152f + pE2->m_c[2] * .0722f; + const float cr2 = pE2->m_c[0] - l2; + const float cb2 = pE2->m_c[2] - l2; + + float dl = l1 - l2; + float dcr = cr1 - cr2; + float dcb = cb1 - cb2; + + return (int64_t)(weights[0] * (dl * dl) + weights[1] * pr_weight * (dcr * dcr) + weights[2] * pb_weight * (dcb * dcb) + a_err); + } + else + { + float dr = (float)pE1->m_c[0] - (float)pE2->m_c[0]; + float dg = (float)pE1->m_c[1] - (float)pE2->m_c[1]; + float db = (float)pE1->m_c[2] - (float)pE2->m_c[2]; + + return (int64_t)(weights[0] * dr * dr + weights[1] * dg * dg + weights[2] * db * db + a_err); + } +} + +static uint64_t pack_mode1_to_one_color(const uniform color_cell_compressor_params *uniform pParams, varying color_cell_compressor_results *uniform pResults, uint32_t r, uint32_t g, uint32_t b, + varying int *uniform pSelectors, uint32_t num_pixels, const varying color_quad_i *uniform pPixels) +{ + uint32_t best_err = UINT_MAX; + uint32_t best_p = 0; + + for (uniform uint32_t p = 0; p < 2; p++) + { +#pragma ignore warning(perf) + uint32_t err = g_bc7_mode_1_optimal_endpoints[r][p].m_error + g_bc7_mode_1_optimal_endpoints[g][p].m_error + g_bc7_mode_1_optimal_endpoints[b][p].m_error; + if (err < best_err) + { + best_err = err; + best_p = p; + } + } + + const endpoint_err *pEr = &g_bc7_mode_1_optimal_endpoints[r][best_p]; + const endpoint_err *pEg = &g_bc7_mode_1_optimal_endpoints[g][best_p]; + const endpoint_err *pEb = &g_bc7_mode_1_optimal_endpoints[b][best_p]; + +#pragma ignore warning(perf) + color_quad_i_set(&pResults->m_low_endpoint, pEr->m_lo, pEg->m_lo, pEb->m_lo, 0); +#pragma ignore warning(perf) + color_quad_i_set(&pResults->m_high_endpoint, pEr->m_hi, pEg->m_hi, pEb->m_hi, 0); + pResults->m_pbits[0] = best_p; + pResults->m_pbits[1] = 0; + + for (uniform uint32_t i = 0; i < num_pixels; i++) + pSelectors[i] = BC7E_MODE_1_OPTIMAL_INDEX; + + color_quad_i p; + + for (uniform uint32_t i = 0; i < 3; i++) + { + uint32_t low = ((pResults->m_low_endpoint.m_c[i] << 1) | pResults->m_pbits[0]) << 1; + low |= (low >> 7); + + uint32_t high = ((pResults->m_high_endpoint.m_c[i] << 1) | pResults->m_pbits[0]) << 1; + high |= (high >> 7); + + p.m_c[i] = (low * (64 - g_bc7_weights3[BC7E_MODE_1_OPTIMAL_INDEX]) + high * g_bc7_weights3[BC7E_MODE_1_OPTIMAL_INDEX] + 32) >> 6; + } + + p.m_c[3] = 255; + + uint64_t total_err = 0; + for (uniform uint32_t i = 0; i < num_pixels; i++) + total_err += compute_color_distance_rgb(&p, &pPixels[i], pParams->m_perceptual, pParams->m_weights); + + pResults->m_best_overall_err = total_err; + + return total_err; +} + +static uint64_t pack_mode24_to_one_color(const uniform color_cell_compressor_params *uniform pParams, varying color_cell_compressor_results *uniform pResults, uint32_t r, uint32_t g, uint32_t b, + varying int *uniform pSelectors, uint32_t num_pixels, const varying color_quad_i *uniform pPixels) +{ + uint32_t er, eg, eb; + + if (pParams->m_num_selector_weights == 8) + { + er = g_bc7_mode_4_optimal_endpoints3[r]; + eg = g_bc7_mode_4_optimal_endpoints3[g]; + eb = g_bc7_mode_4_optimal_endpoints3[b]; + } + else + { + er = g_bc7_mode_4_optimal_endpoints2[r]; + eg = g_bc7_mode_4_optimal_endpoints2[g]; + eb = g_bc7_mode_4_optimal_endpoints2[b]; + } + + color_quad_i_set(&pResults->m_low_endpoint, er & 0xFF, eg & 0xFF, eb & 0xFF, 0); + color_quad_i_set(&pResults->m_high_endpoint, er >> 8, eg >> 8, eb >> 8, 0); + + for (uniform uint32_t i = 0; i < num_pixels; i++) + pSelectors[i] = (pParams->m_num_selector_weights == 8) ? BC7E_MODE_4_OPTIMAL_INDEX3 : BC7E_MODE_4_OPTIMAL_INDEX2; + + color_quad_i p; + + for (uniform uint32_t i = 0; i < 3; i++) + { + uint32_t low = pResults->m_low_endpoint.m_c[i] << 3; + low |= (low >> 5); + + uint32_t high = pResults->m_high_endpoint.m_c[i] << 3; + high |= (high >> 5); + + if (pParams->m_num_selector_weights == 8) + p.m_c[i] = (low * (64 - g_bc7_weights3[BC7E_MODE_4_OPTIMAL_INDEX3]) + high * g_bc7_weights3[BC7E_MODE_4_OPTIMAL_INDEX3] + 32) >> 6; + else + p.m_c[i] = (low * (64 - g_bc7_weights2[BC7E_MODE_4_OPTIMAL_INDEX2]) + high * g_bc7_weights2[BC7E_MODE_4_OPTIMAL_INDEX2] + 32) >> 6; + } + + p.m_c[3] = 255; + + uint64_t total_err = 0; + for (uniform uint32_t i = 0; i < num_pixels; i++) + total_err += compute_color_distance_rgb(&p, &pPixels[i], pParams->m_perceptual, pParams->m_weights); + + pResults->m_best_overall_err = total_err; + + return total_err; +} + +static uint64_t pack_mode0_to_one_color(const uniform color_cell_compressor_params *uniform pParams, varying color_cell_compressor_results *uniform pResults, uint32_t r, uint32_t g, uint32_t b, + varying int *uniform pSelectors, uint32_t num_pixels, const varying color_quad_i *uniform pPixels) +{ + uint32_t best_err = UINT_MAX; + uint32_t best_p = 0; + + for (uniform uint32_t p = 0; p < 4; p++) + { +#pragma ignore warning(perf) + uint32_t err = g_bc7_mode_0_optimal_endpoints[r][p >> 1][p & 1].m_error + g_bc7_mode_0_optimal_endpoints[g][p >> 1][p & 1].m_error + g_bc7_mode_0_optimal_endpoints[b][p >> 1][p & 1].m_error; + if (err < best_err) + { + best_err = err; + best_p = p; + } + } + + const endpoint_err *pEr = &g_bc7_mode_0_optimal_endpoints[r][best_p >> 1][best_p & 1]; + const endpoint_err *pEg = &g_bc7_mode_0_optimal_endpoints[g][best_p >> 1][best_p & 1]; + const endpoint_err *pEb = &g_bc7_mode_0_optimal_endpoints[b][best_p >> 1][best_p & 1]; + +#pragma ignore warning(perf) + color_quad_i_set(&pResults->m_low_endpoint, pEr->m_lo, pEg->m_lo, pEb->m_lo, 0); + +#pragma ignore warning(perf) + color_quad_i_set(&pResults->m_high_endpoint, pEr->m_hi, pEg->m_hi, pEb->m_hi, 0); + + pResults->m_pbits[0] = best_p & 1; + pResults->m_pbits[1] = best_p >> 1; + + for (uniform uint32_t i = 0; i < num_pixels; i++) + pSelectors[i] = BC7E_MODE_0_OPTIMAL_INDEX; + + color_quad_i p; + + for (uniform uint32_t i = 0; i < 3; i++) + { + uint32_t low = ((pResults->m_low_endpoint.m_c[i] << 1) | pResults->m_pbits[0]) << 3; + low |= (low >> 5); + + uint32_t high = ((pResults->m_high_endpoint.m_c[i] << 1) | pResults->m_pbits[1]) << 3; + high |= (high >> 5); + + p.m_c[i] = (low * (64 - g_bc7_weights3[BC7E_MODE_0_OPTIMAL_INDEX]) + high * g_bc7_weights3[BC7E_MODE_0_OPTIMAL_INDEX] + 32) >> 6; + } + + p.m_c[3] = 255; + + uint64_t total_err = 0; + for (uniform uint32_t i = 0; i < num_pixels; i++) + total_err += compute_color_distance_rgb(&p, &pPixels[i], pParams->m_perceptual, pParams->m_weights); + + pResults->m_best_overall_err = total_err; + + return total_err; +} + +static uint64_t pack_mode6_to_one_color(const uniform color_cell_compressor_params *uniform pParams, varying color_cell_compressor_results *uniform pResults, uint32_t r, uint32_t g, uint32_t b, uint32_t a, + varying int *uniform pSelectors, uint32_t num_pixels, const varying color_quad_i *uniform pPixels) +{ + uint32_t best_err = UINT_MAX; + uint32_t best_p = 0; + + for (uniform uint32_t p = 0; p < 4; p++) + { + uniform uint32_t hi_p = p >> 1; + uniform uint32_t lo_p = p & 1; +#pragma ignore warning(perf) + uint32_t err = g_bc7_mode_6_optimal_endpoints[r][hi_p][lo_p].m_error + g_bc7_mode_6_optimal_endpoints[g][hi_p][lo_p].m_error + g_bc7_mode_6_optimal_endpoints[b][hi_p][lo_p].m_error + g_bc7_mode_6_optimal_endpoints[a][hi_p][lo_p].m_error; + if (err < best_err) + { + best_err = err; + best_p = p; + } + } + + uint32_t best_hi_p = best_p >> 1; + uint32_t best_lo_p = best_p & 1; + + const endpoint_err *pEr = &g_bc7_mode_6_optimal_endpoints[r][best_hi_p][best_lo_p]; + const endpoint_err *pEg = &g_bc7_mode_6_optimal_endpoints[g][best_hi_p][best_lo_p]; + const endpoint_err *pEb = &g_bc7_mode_6_optimal_endpoints[b][best_hi_p][best_lo_p]; + const endpoint_err *pEa = &g_bc7_mode_6_optimal_endpoints[a][best_hi_p][best_lo_p]; + +#pragma ignore warning(perf) + color_quad_i_set(&pResults->m_low_endpoint, pEr->m_lo, pEg->m_lo, pEb->m_lo, pEa->m_lo); + +#pragma ignore warning(perf) + color_quad_i_set(&pResults->m_high_endpoint, pEr->m_hi, pEg->m_hi, pEb->m_hi, pEa->m_hi); + + pResults->m_pbits[0] = best_lo_p; + pResults->m_pbits[1] = best_hi_p; + + for (uniform uint32_t i = 0; i < num_pixels; i++) + pSelectors[i] = BC7E_MODE_6_OPTIMAL_INDEX; + + color_quad_i p; + + for (uniform uint32_t i = 0; i < 4; i++) + { + uint32_t low = (pResults->m_low_endpoint.m_c[i] << 1) | pResults->m_pbits[0]; + uint32_t high = (pResults->m_high_endpoint.m_c[i] << 1) | pResults->m_pbits[1]; + + p.m_c[i] = (low * (64 - g_bc7_weights4[BC7E_MODE_6_OPTIMAL_INDEX]) + high * g_bc7_weights4[BC7E_MODE_6_OPTIMAL_INDEX] + 32) >> 6; + } + + uint64_t total_err = 0; + for (uniform uint32_t i = 0; i < num_pixels; i++) + total_err += compute_color_distance_rgba(&p, &pPixels[i], pParams->m_perceptual, pParams->m_weights); + + pResults->m_best_overall_err = total_err; + + return total_err; +} + +static uint64_t pack_mode7_to_one_color(const uniform color_cell_compressor_params *uniform pParams, varying color_cell_compressor_results *uniform pResults, uint32_t r, uint32_t g, uint32_t b, uint32_t a, + varying int *uniform pSelectors, uint32_t num_pixels, const varying color_quad_i *uniform pPixels) +{ + uint32_t best_err = UINT_MAX; + uint32_t best_p = 0; + + for (uniform uint32_t p = 0; p < 4; p++) + { + uniform uint32_t hi_p = p >> 1; + uniform uint32_t lo_p = p & 1; +#pragma ignore warning(perf) + uint32_t err = g_bc7_mode_7_optimal_endpoints[r][hi_p][lo_p].m_error + g_bc7_mode_7_optimal_endpoints[g][hi_p][lo_p].m_error + g_bc7_mode_7_optimal_endpoints[b][hi_p][lo_p].m_error + g_bc7_mode_7_optimal_endpoints[a][hi_p][lo_p].m_error; + if (err < best_err) + { + best_err = err; + best_p = p; + } + } + + uint32_t best_hi_p = best_p >> 1; + uint32_t best_lo_p = best_p & 1; + + const endpoint_err *pEr = &g_bc7_mode_7_optimal_endpoints[r][best_hi_p][best_lo_p]; + const endpoint_err *pEg = &g_bc7_mode_7_optimal_endpoints[g][best_hi_p][best_lo_p]; + const endpoint_err *pEb = &g_bc7_mode_7_optimal_endpoints[b][best_hi_p][best_lo_p]; + const endpoint_err *pEa = &g_bc7_mode_7_optimal_endpoints[a][best_hi_p][best_lo_p]; + +#pragma ignore warning(perf) + color_quad_i_set(&pResults->m_low_endpoint, pEr->m_lo, pEg->m_lo, pEb->m_lo, pEa->m_lo); + +#pragma ignore warning(perf) + color_quad_i_set(&pResults->m_high_endpoint, pEr->m_hi, pEg->m_hi, pEb->m_hi, pEa->m_hi); + + pResults->m_pbits[0] = best_lo_p; + pResults->m_pbits[1] = best_hi_p; + + for (uniform uint32_t i = 0; i < num_pixels; i++) + pSelectors[i] = BC7E_MODE_7_OPTIMAL_INDEX; + + color_quad_i p; + + for (uniform uint32_t i = 0; i < 4; i++) + { + uint32_t low = (pResults->m_low_endpoint.m_c[i] << 1) | pResults->m_pbits[0]; + uint32_t high = (pResults->m_high_endpoint.m_c[i] << 1) | pResults->m_pbits[1]; + + p.m_c[i] = (low * (64 - g_bc7_weights2[BC7E_MODE_7_OPTIMAL_INDEX]) + high * g_bc7_weights2[BC7E_MODE_7_OPTIMAL_INDEX] + 32) >> 6; + } + + uint64_t total_err = 0; + for (uniform uint32_t i = 0; i < num_pixels; i++) + total_err += compute_color_distance_rgba(&p, &pPixels[i], pParams->m_perceptual, pParams->m_weights); + + pResults->m_best_overall_err = total_err; + + return total_err; +} + +static uint64_t evaluate_solution(const varying color_quad_i *uniform pLow, const varying color_quad_i *uniform pHigh, const varying uint32_t *uniform pbits, + const uniform color_cell_compressor_params *uniform pParams, varying color_cell_compressor_results *uniform pResults, uint32_t num_pixels, const varying color_quad_i *uniform pPixels) +{ + color_quad_i quantMinColor = *pLow; + color_quad_i quantMaxColor = *pHigh; + + if (pParams->m_has_pbits) + { + uint32_t minPBit, maxPBit; + + if (pParams->m_endpoints_share_pbit) + maxPBit = minPBit = pbits[0]; + else + { + minPBit = pbits[0]; + maxPBit = pbits[1]; + } + + quantMinColor.m_c[0] = (pLow->m_c[0] << 1) | minPBit; + quantMinColor.m_c[1] = (pLow->m_c[1] << 1) | minPBit; + quantMinColor.m_c[2] = (pLow->m_c[2] << 1) | minPBit; + quantMinColor.m_c[3] = (pLow->m_c[3] << 1) | minPBit; + + quantMaxColor.m_c[0] = (pHigh->m_c[0] << 1) | maxPBit; + quantMaxColor.m_c[1] = (pHigh->m_c[1] << 1) | maxPBit; + quantMaxColor.m_c[2] = (pHigh->m_c[2] << 1) | maxPBit; + quantMaxColor.m_c[3] = (pHigh->m_c[3] << 1) | maxPBit; + } + + color_quad_i actualMinColor = scale_color(&quantMinColor, pParams); + color_quad_i actualMaxColor = scale_color(&quantMaxColor, pParams); + + const uniform uint32_t N = pParams->m_num_selector_weights; + const uniform uint32_t nc = pParams->m_has_alpha ? 4 : 3; + + float total_errf = 0; + + float wr = pParams->m_weights[0]; + float wg = pParams->m_weights[1]; + float wb = pParams->m_weights[2]; + float wa = pParams->m_weights[3]; + + color_quad_f weightedColors[16]; + weightedColors[0].m_c[0] = actualMinColor.m_c[0]; + weightedColors[0].m_c[1] = actualMinColor.m_c[1]; + weightedColors[0].m_c[2] = actualMinColor.m_c[2]; + weightedColors[0].m_c[3] = actualMinColor.m_c[3]; + + weightedColors[N - 1].m_c[0] = actualMaxColor.m_c[0]; + weightedColors[N - 1].m_c[1] = actualMaxColor.m_c[1]; + weightedColors[N - 1].m_c[2] = actualMaxColor.m_c[2]; + weightedColors[N - 1].m_c[3] = actualMaxColor.m_c[3]; + + for (uniform uint32_t i = 1; i < (N - 1); i++) + for (uniform uint32_t j = 0; j < nc; j++) + weightedColors[i].m_c[j] = floor((weightedColors[0].m_c[j] * (64.0f - pParams->m_pSelector_weights[i]) + weightedColors[N - 1].m_c[j] * pParams->m_pSelector_weights[i] + 32) * (1.0f / 64.0f)); + + if (!pParams->m_perceptual) + { + if (!pParams->m_has_alpha) + { + if (N == 16) + { + float lr = actualMinColor.m_c[0]; + float lg = actualMinColor.m_c[1]; + float lb = actualMinColor.m_c[2]; + + float dr = actualMaxColor.m_c[0] - lr; + float dg = actualMaxColor.m_c[1] - lg; + float db = actualMaxColor.m_c[2] - lb; + + const float f = N / (dr * dr + dg * dg + db * db); + + lr *= -dr; + lg *= -dg; + lb *= -db; + + cfor (uniform uint32_t i = 0; i < num_pixels; i++) + { + const varying color_quad_i *uniform pC = &pPixels[i]; + float r = pC->m_c[0]; + float g = pC->m_c[1]; + float b = pC->m_c[2]; + + float best_sel = floor(((r * dr + lr) + (g * dg + lg) + (b * db + lb)) * f + .5f); + best_sel = clamp(best_sel, (float)1, (float)(N - 1)); + + float best_sel0 = best_sel - 1; + +#pragma ignore warning(perf) + float dr0 = weightedColors[(int)best_sel0].m_c[0] - r; + +#pragma ignore warning(perf) + float dg0 = weightedColors[(int)best_sel0].m_c[1] - g; + +#pragma ignore warning(perf) + float db0 = weightedColors[(int)best_sel0].m_c[2] - b; + + float err0 = wr * dr0 * dr0 + wg * dg0 * dg0 + wb * db0 * db0; + +#pragma ignore warning(perf) + float dr1 = weightedColors[(int)best_sel].m_c[0] - r; + +#pragma ignore warning(perf) + float dg1 = weightedColors[(int)best_sel].m_c[1] - g; + +#pragma ignore warning(perf) + float db1 = weightedColors[(int)best_sel].m_c[2] - b; + + float err1 = wr * dr1 * dr1 + wg * dg1 * dg1 + wb * db1 * db1; + + float min_err = min(err0, err1); + total_errf += min_err; + pResults->m_pSelectors_temp[i] = (int)select(min_err == err0, best_sel0, best_sel); + } + } + else if (N == 8) + { + cfor (uniform uint32_t i = 0; i < num_pixels; i++) + { + float pr = (float)pPixels[i].m_c[0]; + float pg = (float)pPixels[i].m_c[1]; + float pb = (float)pPixels[i].m_c[2]; + + float best_err; + int best_sel; + + { + float dr0 = weightedColors[0].m_c[0] - pr; + float dg0 = weightedColors[0].m_c[1] - pg; + float db0 = weightedColors[0].m_c[2] - pb; + float err0 = wr * dr0 * dr0 + wg * dg0 * dg0 + wb * db0 * db0; + + float dr1 = weightedColors[1].m_c[0] - pr; + float dg1 = weightedColors[1].m_c[1] - pg; + float db1 = weightedColors[1].m_c[2] - pb; + float err1 = wr * dr1 * dr1 + wg * dg1 * dg1 + wb * db1 * db1; + + float dr2 = weightedColors[2].m_c[0] - pr; + float dg2 = weightedColors[2].m_c[1] - pg; + float db2 = weightedColors[2].m_c[2] - pb; + float err2 = wr * dr2 * dr2 + wg * dg2 * dg2 + wb * db2 * db2; + + float dr3 = weightedColors[3].m_c[0] - pr; + float dg3 = weightedColors[3].m_c[1] - pg; + float db3 = weightedColors[3].m_c[2] - pb; + float err3 = wr * dr3 * dr3 + wg * dg3 * dg3 + wb * db3 * db3; + + best_err = min(min(min(err0, err1), err2), err3); + + best_sel = select(best_err == err1, 1, 0); + best_sel = select(best_err == err2, 2, best_sel); + best_sel = select(best_err == err3, 3, best_sel); + } + + { + float dr0 = weightedColors[4].m_c[0] - pr; + float dg0 = weightedColors[4].m_c[1] - pg; + float db0 = weightedColors[4].m_c[2] - pb; + float err0 = wr * dr0 * dr0 + wg * dg0 * dg0 + wb * db0 * db0; + + float dr1 = weightedColors[5].m_c[0] - pr; + float dg1 = weightedColors[5].m_c[1] - pg; + float db1 = weightedColors[5].m_c[2] - pb; + float err1 = wr * dr1 * dr1 + wg * dg1 * dg1 + wb * db1 * db1; + + float dr2 = weightedColors[6].m_c[0] - pr; + float dg2 = weightedColors[6].m_c[1] - pg; + float db2 = weightedColors[6].m_c[2] - pb; + float err2 = wr * dr2 * dr2 + wg * dg2 * dg2 + wb * db2 * db2; + + float dr3 = weightedColors[7].m_c[0] - pr; + float dg3 = weightedColors[7].m_c[1] - pg; + float db3 = weightedColors[7].m_c[2] - pb; + float err3 = wr * dr3 * dr3 + wg * dg3 * dg3 + wb * db3 * db3; + + best_err = min(best_err, min(min(min(err0, err1), err2), err3)); + + best_sel = select(best_err == err0, 4, best_sel); + best_sel = select(best_err == err1, 5, best_sel); + best_sel = select(best_err == err2, 6, best_sel); + best_sel = select(best_err == err3, 7, best_sel); + } + + total_errf += best_err; + + pResults->m_pSelectors_temp[i] = best_sel; + } + } + else // if (N == 4) + { + cfor (uniform uint32_t i = 0; i < num_pixels; i++) + { + float pr = (float)pPixels[i].m_c[0]; + float pg = (float)pPixels[i].m_c[1]; + float pb = (float)pPixels[i].m_c[2]; + + float dr0 = weightedColors[0].m_c[0] - pr; + float dg0 = weightedColors[0].m_c[1] - pg; + float db0 = weightedColors[0].m_c[2] - pb; + float err0 = wr * dr0 * dr0 + wg * dg0 * dg0 + wb * db0 * db0; + + float dr1 = weightedColors[1].m_c[0] - pr; + float dg1 = weightedColors[1].m_c[1] - pg; + float db1 = weightedColors[1].m_c[2] - pb; + float err1 = wr * dr1 * dr1 + wg * dg1 * dg1 + wb * db1 * db1; + + float dr2 = weightedColors[2].m_c[0] - pr; + float dg2 = weightedColors[2].m_c[1] - pg; + float db2 = weightedColors[2].m_c[2] - pb; + float err2 = wr * dr2 * dr2 + wg * dg2 * dg2 + wb * db2 * db2; + + float dr3 = weightedColors[3].m_c[0] - pr; + float dg3 = weightedColors[3].m_c[1] - pg; + float db3 = weightedColors[3].m_c[2] - pb; + float err3 = wr * dr3 * dr3 + wg * dg3 * dg3 + wb * db3 * db3; + + float best_err = min(min(min(err0, err1), err2), err3); + + int best_sel = select(best_err == err1, 1, 0); + best_sel = select(best_err == err2, 2, best_sel); + best_sel = select(best_err == err3, 3, best_sel); + + total_errf += best_err; + + pResults->m_pSelectors_temp[i] = best_sel; + } + } + } + else + { + // alpha + if (N == 16) + { + float lr = actualMinColor.m_c[0]; + float lg = actualMinColor.m_c[1]; + float lb = actualMinColor.m_c[2]; + float la = actualMinColor.m_c[3]; + + float dr = actualMaxColor.m_c[0] - lr; + float dg = actualMaxColor.m_c[1] - lg; + float db = actualMaxColor.m_c[2] - lb; + float da = actualMaxColor.m_c[3] - la; + + const float f = N / (dr * dr + dg * dg + db * db + da * da); + + lr *= -dr; + lg *= -dg; + lb *= -db; + la *= -da; + + cfor (uniform uint32_t i = 0; i < num_pixels; i++) + { + const varying color_quad_i *uniform pC = &pPixels[i]; + float r = pC->m_c[0]; + float g = pC->m_c[1]; + float b = pC->m_c[2]; + float a = pC->m_c[3]; + + float best_sel = floor(((r * dr + lr) + (g * dg + lg) + (b * db + lb) + (a * da + la)) * f + .5f); + best_sel = clamp(best_sel, (float)1, (float)(N - 1)); + + float best_sel0 = best_sel - 1; + +#pragma ignore warning(perf) + float dr0 = weightedColors[(int)best_sel0].m_c[0] - r; +#pragma ignore warning(perf) + float dg0 = weightedColors[(int)best_sel0].m_c[1] - g; +#pragma ignore warning(perf) + float db0 = weightedColors[(int)best_sel0].m_c[2] - b; +#pragma ignore warning(perf) + float da0 = weightedColors[(int)best_sel0].m_c[3] - a; + float err0 = (wr * dr0 * dr0) + (wg * dg0 * dg0) + (wb * db0 * db0) + (wa * da0 * da0); + +#pragma ignore warning(perf) + float dr1 = weightedColors[(int)best_sel].m_c[0] - r; +#pragma ignore warning(perf) + float dg1 = weightedColors[(int)best_sel].m_c[1] - g; +#pragma ignore warning(perf) + float db1 = weightedColors[(int)best_sel].m_c[2] - b; +#pragma ignore warning(perf) + float da1 = weightedColors[(int)best_sel].m_c[3] - a; + + float err1 = (wr * dr1 * dr1) + (wg * dg1 * dg1) + (wb * db1 * db1) + (wa * da1 * da1); + + float min_err = min(err0, err1); + total_errf += min_err; + pResults->m_pSelectors_temp[i] = (int)select(min_err == err0, best_sel0, best_sel); + } + } + else if (N == 8) + { + cfor (uniform uint32_t i = 0; i < num_pixels; i++) + { + float pr = (float)pPixels[i].m_c[0]; + float pg = (float)pPixels[i].m_c[1]; + float pb = (float)pPixels[i].m_c[2]; + float pa = (float)pPixels[i].m_c[3]; + + float best_err; + int best_sel; + + { + float dr0 = weightedColors[0].m_c[0] - pr; + float dg0 = weightedColors[0].m_c[1] - pg; + float db0 = weightedColors[0].m_c[2] - pb; + float da0 = weightedColors[0].m_c[3] - pa; + float err0 = wr * dr0 * dr0 + wg * dg0 * dg0 + wb * db0 * db0 + wa * da0 * da0; + + float dr1 = weightedColors[1].m_c[0] - pr; + float dg1 = weightedColors[1].m_c[1] - pg; + float db1 = weightedColors[1].m_c[2] - pb; + float da1 = weightedColors[1].m_c[3] - pa; + float err1 = wr * dr1 * dr1 + wg * dg1 * dg1 + wb * db1 * db1 + wa * da1 * da1; + + float dr2 = weightedColors[2].m_c[0] - pr; + float dg2 = weightedColors[2].m_c[1] - pg; + float db2 = weightedColors[2].m_c[2] - pb; + float da2 = weightedColors[2].m_c[3] - pa; + float err2 = wr * dr2 * dr2 + wg * dg2 * dg2 + wb * db2 * db2 + wa * da2 * da2; + + float dr3 = weightedColors[3].m_c[0] - pr; + float dg3 = weightedColors[3].m_c[1] - pg; + float db3 = weightedColors[3].m_c[2] - pb; + float da3 = weightedColors[3].m_c[3] - pa; + float err3 = wr * dr3 * dr3 + wg * dg3 * dg3 + wb * db3 * db3 + wa * da3 * da3; + + best_err = min(min(min(err0, err1), err2), err3); + + best_sel = select(best_err == err1, 1, 0); + best_sel = select(best_err == err2, 2, best_sel); + best_sel = select(best_err == err3, 3, best_sel); + } + + { + float dr0 = weightedColors[4].m_c[0] - pr; + float dg0 = weightedColors[4].m_c[1] - pg; + float db0 = weightedColors[4].m_c[2] - pb; + float da0 = weightedColors[4].m_c[3] - pa; + float err0 = wr * dr0 * dr0 + wg * dg0 * dg0 + wb * db0 * db0 + wa * da0 * da0; + + float dr1 = weightedColors[5].m_c[0] - pr; + float dg1 = weightedColors[5].m_c[1] - pg; + float db1 = weightedColors[5].m_c[2] - pb; + float da1 = weightedColors[5].m_c[3] - pa; + float err1 = wr * dr1 * dr1 + wg * dg1 * dg1 + wb * db1 * db1 + wa * da1 * da1; + + float dr2 = weightedColors[6].m_c[0] - pr; + float dg2 = weightedColors[6].m_c[1] - pg; + float db2 = weightedColors[6].m_c[2] - pb; + float da2 = weightedColors[6].m_c[3] - pa; + float err2 = wr * dr2 * dr2 + wg * dg2 * dg2 + wb * db2 * db2 + wa * da2 * da2; + + float dr3 = weightedColors[7].m_c[0] - pr; + float dg3 = weightedColors[7].m_c[1] - pg; + float db3 = weightedColors[7].m_c[2] - pb; + float da3 = weightedColors[7].m_c[3] - pa; + float err3 = wr * dr3 * dr3 + wg * dg3 * dg3 + wb * db3 * db3 + wa * da3 * da3; + + best_err = min(best_err, min(min(min(err0, err1), err2), err3)); + + best_sel = select(best_err == err0, 4, best_sel); + best_sel = select(best_err == err1, 5, best_sel); + best_sel = select(best_err == err2, 6, best_sel); + best_sel = select(best_err == err3, 7, best_sel); + } + + total_errf += best_err; + + pResults->m_pSelectors_temp[i] = best_sel; + } + } + else // if (N == 4) + { + cfor (uniform uint32_t i = 0; i < num_pixels; i++) + { + float pr = (float)pPixels[i].m_c[0]; + float pg = (float)pPixels[i].m_c[1]; + float pb = (float)pPixels[i].m_c[2]; + float pa = (float)pPixels[i].m_c[3]; + + float dr0 = weightedColors[0].m_c[0] - pr; + float dg0 = weightedColors[0].m_c[1] - pg; + float db0 = weightedColors[0].m_c[2] - pb; + float da0 = weightedColors[0].m_c[3] - pa; + float err0 = wr * dr0 * dr0 + wg * dg0 * dg0 + wb * db0 * db0 + wa * da0 * da0; + + float dr1 = weightedColors[1].m_c[0] - pr; + float dg1 = weightedColors[1].m_c[1] - pg; + float db1 = weightedColors[1].m_c[2] - pb; + float da1 = weightedColors[1].m_c[3] - pa; + float err1 = wr * dr1 * dr1 + wg * dg1 * dg1 + wb * db1 * db1 + wa * da1 * da1; + + float dr2 = weightedColors[2].m_c[0] - pr; + float dg2 = weightedColors[2].m_c[1] - pg; + float db2 = weightedColors[2].m_c[2] - pb; + float da2 = weightedColors[2].m_c[3] - pa; + float err2 = wr * dr2 * dr2 + wg * dg2 * dg2 + wb * db2 * db2 + wa * da2 * da2; + + float dr3 = weightedColors[3].m_c[0] - pr; + float dg3 = weightedColors[3].m_c[1] - pg; + float db3 = weightedColors[3].m_c[2] - pb; + float da3 = weightedColors[3].m_c[3] - pa; + float err3 = wr * dr3 * dr3 + wg * dg3 * dg3 + wb * db3 * db3 + wa * da3 * da3; + + float best_err = min(min(min(err0, err1), err2), err3); + + int best_sel = select(best_err == err1, 1, 0); + best_sel = select(best_err == err2, 2, best_sel); + best_sel = select(best_err == err3, 3, best_sel); + + total_errf += best_err; + + pResults->m_pSelectors_temp[i] = best_sel; + } + } + } + } + else + { + wg *= pr_weight; + wb *= pb_weight; + + float weightedColorsY[16], weightedColorsCr[16], weightedColorsCb[16]; + + for (uniform uint32_t i = 0; i < N; i++) + { + float r = weightedColors[i].m_c[0]; + float g = weightedColors[i].m_c[1]; + float b = weightedColors[i].m_c[2]; + + float y = r * .2126f + g * .7152f + b * .0722f; + + weightedColorsY[i] = y; + weightedColorsCr[i] = r - y; + weightedColorsCb[i] = b - y; + } + + if (pParams->m_has_alpha) + { + for (uniform uint32_t i = 0; i < num_pixels; i++) + { + float r = pPixels[i].m_c[0]; + float g = pPixels[i].m_c[1]; + float b = pPixels[i].m_c[2]; + float a = pPixels[i].m_c[3]; + + float y = r * .2126f + g * .7152f + b * .0722f; + float cr = r - y; + float cb = b - y; + + float best_err = 1e+10f; + int32_t best_sel; + + for (uniform uint32_t j = 0; j < N; j++) + { + float dl = y - weightedColorsY[j]; + float dcr = cr - weightedColorsCr[j]; + float dcb = cb - weightedColorsCb[j]; + float da = a - weightedColors[j].m_c[3]; + + float err = (wr * dl * dl) + (wg * dcr * dcr) + (wb * dcb * dcb) + (wa * da * da); + if (err < best_err) + { + best_err = err; + best_sel = j; + } + } + + total_errf += best_err; + + pResults->m_pSelectors_temp[i] = best_sel; + } + } + else + { + for (uniform uint32_t i = 0; i < num_pixels; i++) + { + float r = pPixels[i].m_c[0]; + float g = pPixels[i].m_c[1]; + float b = pPixels[i].m_c[2]; + + float y = r * .2126f + g * .7152f + b * .0722f; + float cr = r - y; + float cb = b - y; + + float best_err = 1e+10f; + int32_t best_sel; + + for (uniform uint32_t j = 0; j < N; j++) + { + float dl = y - weightedColorsY[j]; + float dcr = cr - weightedColorsCr[j]; + float dcb = cb - weightedColorsCb[j]; + + float err = (wr * dl * dl) + (wg * dcr * dcr) + (wb * dcb * dcb); + if (err < best_err) + { + best_err = err; + best_sel = j; + } + } + + total_errf += best_err; + + pResults->m_pSelectors_temp[i] = best_sel; + } + } + } + + uint64_t total_err = (int64)total_errf; + + if (total_err < pResults->m_best_overall_err) + { + pResults->m_best_overall_err = total_err; + + pResults->m_low_endpoint = *pLow; + pResults->m_high_endpoint = *pHigh; + + pResults->m_pbits[0] = pbits[0]; + pResults->m_pbits[1] = pbits[1]; + + for (uniform uint32_t i = 0; i < num_pixels; i++) + pResults->m_pSelectors[i] = pResults->m_pSelectors_temp[i]; + } + + return total_err; +} + +static void fixDegenerateEndpoints(uniform uint32_t mode, varying color_quad_i *uniform pTrialMinColor, varying color_quad_i *uniform pTrialMaxColor, const varying vec4F *uniform pXl, const varying vec4F *uniform pXh, uniform uint32_t iscale) +{ + if ((mode == 1) || (mode == 4)) // also mode 2 + { + // fix degenerate case where the input collapses to a single colorspace voxel, and we loose all freedom (test with grayscale ramps) + for (uniform uint32_t i = 0; i < 3; i++) + { + if (pTrialMinColor->m_c[i] == pTrialMaxColor->m_c[i]) + { + if (abs(pXl->m_c[i] - pXh->m_c[i]) > 0.0f) + { + if (pTrialMinColor->m_c[i] > (iscale >> 1)) + { + if (pTrialMinColor->m_c[i] > 0) + pTrialMinColor->m_c[i]--; + else + if (pTrialMaxColor->m_c[i] < iscale) + pTrialMaxColor->m_c[i]++; + } + else + { + if (pTrialMaxColor->m_c[i] < iscale) + pTrialMaxColor->m_c[i]++; + else if (pTrialMinColor->m_c[i] > 0) + pTrialMinColor->m_c[i]--; + } + + if (mode == 4) + { + if (pTrialMinColor->m_c[i] > (iscale >> 1)) + { + if (pTrialMaxColor->m_c[i] < iscale) + pTrialMaxColor->m_c[i]++; + else if (pTrialMinColor->m_c[i] > 0) + pTrialMinColor->m_c[i]--; + } + else + { + if (pTrialMinColor->m_c[i] > 0) + pTrialMinColor->m_c[i]--; + else if (pTrialMaxColor->m_c[i] < iscale) + pTrialMaxColor->m_c[i]++; + } + } + } + } + } + } +} + +static uint64_t find_optimal_solution(uniform uint32_t mode, varying vec4F *uniform pXl, varying vec4F *uniform pXh, const uniform color_cell_compressor_params *uniform pParams, varying color_cell_compressor_results *uniform pResults, + uniform bool pbit_search, uint32_t num_pixels, const varying color_quad_i *uniform pPixels) +{ + vec4F xl = *pXl; + vec4F xh = *pXh; + + vec4F_saturate_in_place(&xl); + vec4F_saturate_in_place(&xh); + + if (pParams->m_has_pbits) + { + if (pbit_search) + { + // compensated rounding+pbit search + const uniform int iscalep = (1 << (pParams->m_comp_bits + 1)) - 1; + const uniform float scalep = (float)iscalep; + + const uniform int32_t totalComps = pParams->m_has_alpha ? 4 : 3; + + if (!pParams->m_endpoints_share_pbit) + { + color_quad_i lo[2], hi[2]; + + for (uniform int p = 0; p < 2; p++) + { + color_quad_i xMinColor, xMaxColor; + + // Notes: The pbit controls which quantization intervals are selected. + // total_levels=2^(comp_bits+1), where comp_bits=4 for mode 0, etc. + // pbit 0: v=(b*2)/(total_levels-1), pbit 1: v=(b*2+1)/(total_levels-1) where b is the component bin from [0,total_levels/2-1] and v is the [0,1] component value + // rearranging you get for pbit 0: b=floor(v*(total_levels-1)/2+.5) + // rearranging you get for pbit 1: b=floor((v*(total_levels-1)-1)/2+.5) + for (uniform uint32_t c = 0; c < 4; c++) + { + xMinColor.m_c[c] = (int)((xl.m_c[c] * scalep - p) / 2.0f + .5f) * 2 + p; + xMinColor.m_c[c] = clamp(xMinColor.m_c[c], p, iscalep - 1 + p); + + xMaxColor.m_c[c] = (int)((xh.m_c[c] * scalep - p) / 2.0f + .5f) * 2 + p; + xMaxColor.m_c[c] = clamp(xMaxColor.m_c[c], p, iscalep - 1 + p); + } + + lo[p] = xMinColor; + hi[p] = xMaxColor; + + for (uniform int c = 0; c < 4; c++) + { + lo[p].m_c[c] >>= 1; + hi[p].m_c[c] >>= 1; + } + } + + fixDegenerateEndpoints(mode, &lo[0], &hi[0], &xl, &xh, iscalep >> 1); + fixDegenerateEndpoints(mode, &lo[1], &hi[1], &xl, &xh, iscalep >> 1); + + uint32_t pbits[2]; + + pbits[0] = 0; pbits[1] = 0; + evaluate_solution(&lo[0], &hi[0], pbits, pParams, pResults, num_pixels, pPixels); + + pbits[0] = 0; pbits[1] = 1; + evaluate_solution(&lo[0], &hi[1], pbits, pParams, pResults, num_pixels, pPixels); + + pbits[0] = 1; pbits[1] = 0; + evaluate_solution(&lo[1], &hi[0], pbits, pParams, pResults, num_pixels, pPixels); + + pbits[0] = 1; pbits[1] = 1; + evaluate_solution(&lo[1], &hi[1], pbits, pParams, pResults, num_pixels, pPixels); + } + else + { + // Endpoints share pbits + color_quad_i lo[2], hi[2]; + + for (uniform int p = 0; p < 2; p++) + { + color_quad_i xMinColor, xMaxColor; + + for (uniform uint32_t c = 0; c < 4; c++) + { + xMinColor.m_c[c] = (int)((xl.m_c[c] * scalep - p) / 2.0f + .5f) * 2 + p; + xMinColor.m_c[c] = clamp(xMinColor.m_c[c], p, iscalep - 1 + p); + + xMaxColor.m_c[c] = (int)((xh.m_c[c] * scalep - p) / 2.0f + .5f) * 2 + p; + xMaxColor.m_c[c] = clamp(xMaxColor.m_c[c], p, iscalep - 1 + p); + } + + lo[p] = xMinColor; + hi[p] = xMaxColor; + + for (uniform int c = 0; c < 4; c++) + { + lo[p].m_c[c] >>= 1; + hi[p].m_c[c] >>= 1; + } + } + + fixDegenerateEndpoints(mode, &lo[0], &hi[0], &xl, &xh, iscalep >> 1); + fixDegenerateEndpoints(mode, &lo[1], &hi[1], &xl, &xh, iscalep >> 1); + + uint32_t pbits[2]; + + pbits[0] = 0; pbits[1] = 0; + evaluate_solution(&lo[0], &hi[0], pbits, pParams, pResults, num_pixels, pPixels); + + pbits[0] = 1; pbits[1] = 1; + evaluate_solution(&lo[1], &hi[1], pbits, pParams, pResults, num_pixels, pPixels); + } + } + else + { + // compensated rounding + const uniform int iscalep = (1 << (pParams->m_comp_bits + 1)) - 1; + const uniform float scalep = (float)iscalep; + + const uniform int32_t totalComps = pParams->m_has_alpha ? 4 : 3; + + uint32_t best_pbits[2]; + color_quad_i bestMinColor, bestMaxColor; + + if (!pParams->m_endpoints_share_pbit) + { + float best_err0 = 1e+9; + float best_err1 = 1e+9; + + for (uniform int p = 0; p < 2; p++) + { + color_quad_i xMinColor, xMaxColor; + + // Notes: The pbit controls which quantization intervals are selected. + // total_levels=2^(comp_bits+1), where comp_bits=4 for mode 0, etc. + // pbit 0: v=(b*2)/(total_levels-1), pbit 1: v=(b*2+1)/(total_levels-1) where b is the component bin from [0,total_levels/2-1] and v is the [0,1] component value + // rearranging you get for pbit 0: b=floor(v*(total_levels-1)/2+.5) + // rearranging you get for pbit 1: b=floor((v*(total_levels-1)-1)/2+.5) + for (uniform uint32_t c = 0; c < 4; c++) + { + xMinColor.m_c[c] = (int)((xl.m_c[c] * scalep - p) / 2.0f + .5f) * 2 + p; + xMinColor.m_c[c] = clamp(xMinColor.m_c[c], p, iscalep - 1 + p); + + xMaxColor.m_c[c] = (int)((xh.m_c[c] * scalep - p) / 2.0f + .5f) * 2 + p; + xMaxColor.m_c[c] = clamp(xMaxColor.m_c[c], p, iscalep - 1 + p); + } + + color_quad_i scaledLow = scale_color(&xMinColor, pParams); + color_quad_i scaledHigh = scale_color(&xMaxColor, pParams); + + float err0 = 0; + float err1 = 0; + for (uniform int i = 0; i < totalComps; i++) + { + err0 += square(scaledLow.m_c[i] - xl.m_c[i]*255.0f); + err1 += square(scaledHigh.m_c[i] - xh.m_c[i]*255.0f); + } + + if (err0 < best_err0) + { + best_err0 = err0; + best_pbits[0] = p; + + bestMinColor.m_c[0] = xMinColor.m_c[0] >> 1; + bestMinColor.m_c[1] = xMinColor.m_c[1] >> 1; + bestMinColor.m_c[2] = xMinColor.m_c[2] >> 1; + bestMinColor.m_c[3] = xMinColor.m_c[3] >> 1; + } + + if (err1 < best_err1) + { + best_err1 = err1; + best_pbits[1] = p; + + bestMaxColor.m_c[0] = xMaxColor.m_c[0] >> 1; + bestMaxColor.m_c[1] = xMaxColor.m_c[1] >> 1; + bestMaxColor.m_c[2] = xMaxColor.m_c[2] >> 1; + bestMaxColor.m_c[3] = xMaxColor.m_c[3] >> 1; + } + } + } + else + { + // Endpoints share pbits + float best_err = 1e+9; + + for (uniform int p = 0; p < 2; p++) + { + color_quad_i xMinColor, xMaxColor; + + for (uniform uint32_t c = 0; c < 4; c++) + { + xMinColor.m_c[c] = (int)((xl.m_c[c] * scalep - p) / 2.0f + .5f) * 2 + p; + xMinColor.m_c[c] = clamp(xMinColor.m_c[c], p, iscalep - 1 + p); + + xMaxColor.m_c[c] = (int)((xh.m_c[c] * scalep - p) / 2.0f + .5f) * 2 + p; + xMaxColor.m_c[c] = clamp(xMaxColor.m_c[c], p, iscalep - 1 + p); + } + + color_quad_i scaledLow = scale_color(&xMinColor, pParams); + color_quad_i scaledHigh = scale_color(&xMaxColor, pParams); + + float err = 0; + for (uniform int i = 0; i < totalComps; i++) + err += square((scaledLow.m_c[i]/255.0f) - xl.m_c[i]) + square((scaledHigh.m_c[i]/255.0f) - xh.m_c[i]); + + if (err < best_err) + { + best_err = err; + best_pbits[0] = p; + best_pbits[1] = p; + + bestMinColor.m_c[0] = xMinColor.m_c[0] >> 1; + bestMinColor.m_c[1] = xMinColor.m_c[1] >> 1; + bestMinColor.m_c[2] = xMinColor.m_c[2] >> 1; + bestMinColor.m_c[3] = xMinColor.m_c[3] >> 1; + + bestMaxColor.m_c[0] = xMaxColor.m_c[0] >> 1; + bestMaxColor.m_c[1] = xMaxColor.m_c[1] >> 1; + bestMaxColor.m_c[2] = xMaxColor.m_c[2] >> 1; + bestMaxColor.m_c[3] = xMaxColor.m_c[3] >> 1; + } + } + } + + fixDegenerateEndpoints(mode, &bestMinColor, &bestMaxColor, &xl, &xh, iscalep >> 1); + + if ((pResults->m_best_overall_err == UINT64_MAX) || color_quad_i_notequals(&bestMinColor, &pResults->m_low_endpoint) || color_quad_i_notequals(&bestMaxColor, &pResults->m_high_endpoint) || (best_pbits[0] != pResults->m_pbits[0]) || (best_pbits[1] != pResults->m_pbits[1])) + { + evaluate_solution(&bestMinColor, &bestMaxColor, best_pbits, pParams, pResults, num_pixels, pPixels); + } + } + } + else + { + const uniform int iscale = (1 << pParams->m_comp_bits) - 1; + const uniform float scale = (float)iscale; + + color_quad_i trialMinColor, trialMaxColor; + color_quad_i_set_clamped(&trialMinColor, (int)(xl.m_c[0] * scale + .5f), (int)(xl.m_c[1] * scale + .5f), (int)(xl.m_c[2] * scale + .5f), (int)(xl.m_c[3] * scale + .5f)); + color_quad_i_set_clamped(&trialMaxColor, (int)(xh.m_c[0] * scale + .5f), (int)(xh.m_c[1] * scale + .5f), (int)(xh.m_c[2] * scale + .5f), (int)(xh.m_c[3] * scale + .5f)); + + fixDegenerateEndpoints(mode, &trialMinColor, &trialMaxColor, &xl, &xh, iscale); + + if ((pResults->m_best_overall_err == UINT64_MAX) || color_quad_i_notequals(&trialMinColor, &pResults->m_low_endpoint) || color_quad_i_notequals(&trialMaxColor, &pResults->m_high_endpoint)) + { + uint32_t pbits[2]; + pbits[0] = 0; + pbits[1] = 0; + + evaluate_solution(&trialMinColor, &trialMaxColor, pbits, pParams, pResults, num_pixels, pPixels); + } + } + + return pResults->m_best_overall_err; +} + +// Note: In mode 6, m_has_alpha will only be true for transparent blocks. +static uint64_t color_cell_compression(uniform uint32_t mode, const uniform color_cell_compressor_params *uniform pParams, varying color_cell_compressor_results *uniform pResults, + const uniform bc7e_compress_block_params *uniform pComp_params, uint32_t num_pixels, const varying color_quad_i *uniform pPixels, uniform bool refinement) +{ + pResults->m_best_overall_err = UINT64_MAX; + + if ((mode != 6) && (mode != 7)) + { + assert(!pParams->m_has_alpha); + } + + if ((mode <= 2) || (mode == 4) || (mode >= 6)) + { + const uint32_t cr = pPixels[0].m_c[0]; + const uint32_t cg = pPixels[0].m_c[1]; + const uint32_t cb = pPixels[0].m_c[2]; + const uint32_t ca = pPixels[0].m_c[3]; + + bool allSame = true; + for (uniform uint32_t i = 1; i < num_pixels; i++) + { + if ((cr != pPixels[i].m_c[0]) || (cg != pPixels[i].m_c[1]) || (cb != pPixels[i].m_c[2]) || (ca != pPixels[i].m_c[3])) + { + allSame = false; + break; + } + } + + cif (allSame) + { + if (mode == 0) + return pack_mode0_to_one_color(pParams, pResults, cr, cg, cb, pResults->m_pSelectors, num_pixels, pPixels); + if (mode == 1) + return pack_mode1_to_one_color(pParams, pResults, cr, cg, cb, pResults->m_pSelectors, num_pixels, pPixels); + else if (mode == 6) + return pack_mode6_to_one_color(pParams, pResults, cr, cg, cb, ca, pResults->m_pSelectors, num_pixels, pPixels); + else if (mode == 7) + return pack_mode7_to_one_color(pParams, pResults, cr, cg, cb, ca, pResults->m_pSelectors, num_pixels, pPixels); + else + return pack_mode24_to_one_color(pParams, pResults, cr, cg, cb, pResults->m_pSelectors, num_pixels, pPixels); + } + } + + vec4F meanColor, axis; + vec4F_set_scalar(&meanColor, 0.0f); + + for (uniform uint32_t i = 0; i < num_pixels; i++) + { + vec4F color = vec4F_from_color(&pPixels[i]); + meanColor = vec4F_add(&meanColor, &color); + } + + vec4F meanColorScaled = vec4F_mul(&meanColor, 1.0f / (float)((int)num_pixels)); + + meanColor = vec4F_mul(&meanColor, 1.0f / (float)((int)num_pixels * 255.0f)); + vec4F_saturate_in_place(&meanColor); + + if (pParams->m_has_alpha) + { + vec4F v; + vec4F_set_scalar(&v, 0.0f); + cfor (uniform uint32_t i = 0; i < num_pixels; i++) + { + vec4F color = vec4F_from_color(&pPixels[i]); + color = vec4F_sub(&color, &meanColorScaled); + + vec4F a = vec4F_mul(&color, color.m_c[0]); + vec4F b = vec4F_mul(&color, color.m_c[1]); + vec4F c = vec4F_mul(&color, color.m_c[2]); + vec4F d = vec4F_mul(&color, color.m_c[3]); + + vec4F n = i ? v : color; + vec4F_normalize_in_place(&n); + + v.m_c[0] += vec4F_dot(&a, &n); + v.m_c[1] += vec4F_dot(&b, &n); + v.m_c[2] += vec4F_dot(&c, &n); + v.m_c[3] += vec4F_dot(&d, &n); + } + axis = v; + vec4F_normalize_in_place(&axis); + } + else + { + float cov[6]; + cov[0] = 0; cov[1] = 0; cov[2] = 0; + cov[3] = 0; cov[4] = 0; cov[5] = 0; + + cfor (uniform uint32_t i = 0; i < num_pixels; i++) + { + const varying color_quad_i *varying pV = &pPixels[i]; + + float r = pV->m_c[0] - meanColorScaled.m_c[0]; + float g = pV->m_c[1] - meanColorScaled.m_c[1]; + float b = pV->m_c[2] - meanColorScaled.m_c[2]; + + cov[0] += r*r; + cov[1] += r*g; + cov[2] += r*b; + cov[3] += g*g; + cov[4] += g*b; + cov[5] += b*b; + } + + float vfr, vfg, vfb; + //vfr = hi[0] - lo[0]; + //vfg = hi[1] - lo[1]; + //vfb = hi[2] - lo[2]; + // This is more stable. + vfr = .9f; + vfg = 1.0f; + vfb = .7f; + + for (uniform uint32_t iter = 0; iter < 3; iter++) + { + float r = vfr*cov[0] + vfg*cov[1] + vfb*cov[2]; + float g = vfr*cov[1] + vfg*cov[3] + vfb*cov[4]; + float b = vfr*cov[2] + vfg*cov[4] + vfb*cov[5]; + + float m = maximumf(maximumf(abs(r), abs(g)), abs(b)); + if (m > 1e-10f) + { + m = 1.0f / m; + r *= m; + g *= m; + b *= m; + } + + //float delta = square(vfr - r) + square(vfg - g) + square(vfb - b); + + vfr = r; + vfg = g; + vfb = b; + + //if ((iter > 1) && (delta < 1e-8f)) + // break; + } + + float len = vfr*vfr + vfg*vfg + vfb*vfb; + + if (len < 1e-10f) + vec4F_set_scalar(&axis, 0.0f); + else + { + len = 1.0f / sqrt(len); + vfr *= len; + vfg *= len; + vfb *= len; + vec4F_set(&axis, vfr, vfg, vfb, 0); + } + } + + cif (vec4F_dot(&axis, &axis) < .5f) + { + if (pParams->m_perceptual) + vec4F_set(&axis, .213f, .715f, .072f, pParams->m_has_alpha ? .715f : 0); + else + vec4F_set(&axis, 1.0f, 1.0f, 1.0f, pParams->m_has_alpha ? 1.0f : 0); + vec4F_normalize_in_place(&axis); + } + + float l = 1e+9f, h = -1e+9f; + + cfor (uniform uint32_t i = 0; i < num_pixels; i++) + { + vec4F color = vec4F_from_color(&pPixels[i]); + + vec4F q = vec4F_sub(&color, &meanColorScaled); + float d = vec4F_dot(&q, &axis); + + l = minimumf(l, d); + h = maximumf(h, d); + } + + l *= (1.0f / 255.0f); + h *= (1.0f / 255.0f); + + vec4F b0 = vec4F_mul(&axis, l); + vec4F b1 = vec4F_mul(&axis, h); + vec4F c0 = vec4F_add(&meanColor, &b0); + vec4F c1 = vec4F_add(&meanColor, &b1); + vec4F minColor = vec4F_saturate(&c0); + vec4F maxColor = vec4F_saturate(&c1); + + vec4F whiteVec; + vec4F_set_scalar(&whiteVec, 1.0f); + if (vec4F_dot(&minColor, &whiteVec) > vec4F_dot(&maxColor, &whiteVec)) + { + vec4F temp = minColor; + minColor = maxColor; + maxColor = temp; + } + + if (!find_optimal_solution(mode, &minColor, &maxColor, pParams, pResults, pComp_params->m_pbit_search, num_pixels, pPixels)) + return 0; + + if (!refinement) + return pResults->m_best_overall_err; + + for (uniform uint32_t i = 0; i < pComp_params->m_refinement_passes; i++) + { + vec4F xl, xh; + vec4F_set_scalar(&xl, 0.0f); + vec4F_set_scalar(&xh, 0.0f); + if (pParams->m_has_alpha) + compute_least_squares_endpoints_rgba(num_pixels, pResults->m_pSelectors, pParams->m_pSelector_weightsx, &xl, &xh, pPixels); + else + { + compute_least_squares_endpoints_rgb(num_pixels, pResults->m_pSelectors, pParams->m_pSelector_weightsx, &xl, &xh, pPixels); + + xl.m_c[3] = 255.0f; + xh.m_c[3] = 255.0f; + } + + xl = vec4F_mul(&xl, (1.0f / 255.0f)); + xh = vec4F_mul(&xh, (1.0f / 255.0f)); + + if (!find_optimal_solution(mode, &xl, &xh, pParams, pResults, pComp_params->m_pbit_search, num_pixels, pPixels)) + return 0; + } + + if (pComp_params->m_uber_level > 0) + { + int selectors_temp[16], selectors_temp1[16]; + for (uniform uint32_t i = 0; i < num_pixels; i++) + selectors_temp[i] = pResults->m_pSelectors[i]; + + const uniform int max_selector = pParams->m_num_selector_weights - 1; + + uint32_t min_sel = 16; + uint32_t max_sel = 0; + for (uniform uint32_t i = 0; i < num_pixels; i++) + { + uint32_t sel = selectors_temp[i]; + min_sel = minimumu(min_sel, sel); + max_sel = maximumu(max_sel, sel); + } + + vec4F xl, xh; + vec4F_set_scalar(&xl, 0.0f); + vec4F_set_scalar(&xh, 0.0f); + + if (pComp_params->m_uber1_mask & 1) + { + for (uniform uint32_t i = 0; i < num_pixels; i++) + { + uint32_t sel = selectors_temp[i]; + if ((sel == min_sel) && (sel < (pParams->m_num_selector_weights - 1))) + sel++; + selectors_temp1[i] = sel; + } + + if (pParams->m_has_alpha) + compute_least_squares_endpoints_rgba(num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pPixels); + else + { + compute_least_squares_endpoints_rgb(num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pPixels); + xl.m_c[3] = 255.0f; + xh.m_c[3] = 255.0f; + } + + xl = vec4F_mul(&xl, (1.0f / 255.0f)); + xh = vec4F_mul(&xh, (1.0f / 255.0f)); + + if (!find_optimal_solution(mode, &xl, &xh, pParams, pResults, pComp_params->m_pbit_search, num_pixels, pPixels)) + return 0; + } + + if (pComp_params->m_uber1_mask & 2) + { + for (uniform uint32_t i = 0; i < num_pixels; i++) + { + uint32_t sel = selectors_temp[i]; + if ((sel == max_sel) && (sel > 0)) + sel--; + selectors_temp1[i] = sel; + } + + if (pParams->m_has_alpha) + compute_least_squares_endpoints_rgba(num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pPixels); + else + { + compute_least_squares_endpoints_rgb(num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pPixels); + xl.m_c[3] = 255.0f; + xh.m_c[3] = 255.0f; + } + + xl = vec4F_mul(&xl, (1.0f / 255.0f)); + xh = vec4F_mul(&xh, (1.0f / 255.0f)); + + if (!find_optimal_solution(mode, &xl, &xh, pParams, pResults, pComp_params->m_pbit_search, num_pixels, pPixels)) + return 0; + } + + if (pComp_params->m_uber1_mask & 4) + { + for (uniform uint32_t i = 0; i < num_pixels; i++) + { + uint32_t sel = selectors_temp[i]; + if ((sel == min_sel) && (sel < (pParams->m_num_selector_weights - 1))) + sel++; + else if ((sel == max_sel) && (sel > 0)) + sel--; + selectors_temp1[i] = sel; + } + + if (pParams->m_has_alpha) + compute_least_squares_endpoints_rgba(num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pPixels); + else + { + compute_least_squares_endpoints_rgb(num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pPixels); + xl.m_c[3] = 255.0f; + xh.m_c[3] = 255.0f; + } + + xl = vec4F_mul(&xl, (1.0f / 255.0f)); + xh = vec4F_mul(&xh, (1.0f / 255.0f)); + + if (!find_optimal_solution(mode, &xl, &xh, pParams, pResults, pComp_params->m_pbit_search, num_pixels, pPixels)) + return 0; + } + + const uint32_t uber_err_thresh = (num_pixels * 56) >> 4; + if ((pComp_params->m_uber_level >= 2) && (pResults->m_best_overall_err > uber_err_thresh)) + { + const uniform int Q = (pComp_params->m_uber_level >= 4) ? (pComp_params->m_uber_level - 2) : 1; + for (uniform int ly = -Q; ly <= 1; ly++) + { + for (uniform int hy = max_selector - 1; hy <= (max_selector + Q); hy++) + { + if ((ly == 0) && (hy == max_selector)) + continue; + + for (uniform uint32_t i = 0; i < num_pixels; i++) + selectors_temp1[i] = (int)clampf(floor((float)max_selector * ((float)(int)selectors_temp[i] - (float)ly) / ((float)hy - (float)ly) + .5f), 0, (float)max_selector); + + vec4F_set_scalar(&xl, 0.0f); + vec4F_set_scalar(&xh, 0.0f); + if (pParams->m_has_alpha) + compute_least_squares_endpoints_rgba(num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pPixels); + else + { + compute_least_squares_endpoints_rgb(num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pPixels); + xl.m_c[3] = 255.0f; + xh.m_c[3] = 255.0f; + } + + xl = vec4F_mul(&xl, (1.0f / 255.0f)); + xh = vec4F_mul(&xh, (1.0f / 255.0f)); + + if (!find_optimal_solution(mode, &xl, &xh, pParams, pResults, pComp_params->m_pbit_search && (pComp_params->m_uber_level >= 2), num_pixels, pPixels)) + return 0; + } + } + } + } + + if ((mode <= 2) || (mode == 4) || (mode >= 6)) + { + color_cell_compressor_results avg_results; + + avg_results.m_best_overall_err = pResults->m_best_overall_err; + avg_results.m_pSelectors = pResults->m_pSelectors; + avg_results.m_pSelectors_temp = pResults->m_pSelectors_temp; + + const uint32_t r = (int)(.5f + meanColor.m_c[0] * 255.0f); + const uint32_t g = (int)(.5f + meanColor.m_c[1] * 255.0f); + const uint32_t b = (int)(.5f + meanColor.m_c[2] * 255.0f); + const uint32_t a = (int)(.5f + meanColor.m_c[3] * 255.0f); + + uint64_t avg_err; + if (mode == 0) + avg_err = pack_mode0_to_one_color(pParams, &avg_results, r, g, b, pResults->m_pSelectors_temp, num_pixels, pPixels); + else if (mode == 1) + avg_err = pack_mode1_to_one_color(pParams, &avg_results, r, g, b, pResults->m_pSelectors_temp, num_pixels, pPixels); + else if (mode == 6) + avg_err = pack_mode6_to_one_color(pParams, &avg_results, r, g, b, a, pResults->m_pSelectors_temp, num_pixels, pPixels); + else if (mode == 7) + avg_err = pack_mode7_to_one_color(pParams, &avg_results, r, g, b, a, pResults->m_pSelectors_temp, num_pixels, pPixels); + else + avg_err = pack_mode24_to_one_color(pParams, &avg_results, r, g, b, pResults->m_pSelectors_temp, num_pixels, pPixels); + + if (avg_err < pResults->m_best_overall_err) + { + pResults->m_best_overall_err = avg_err; + pResults->m_low_endpoint = avg_results.m_low_endpoint; + pResults->m_high_endpoint = avg_results.m_high_endpoint; + pResults->m_pbits[0] = avg_results.m_pbits[0]; + pResults->m_pbits[1] = avg_results.m_pbits[1]; + + for (uniform uint32_t i = 0; i < num_pixels; i++) + pResults->m_pSelectors[i] = pResults->m_pSelectors_temp[i]; + } + } + + return pResults->m_best_overall_err; +} + +static uint64_t color_cell_compression_est(uniform uint32_t mode, const uniform color_cell_compressor_params *uniform pParams, uint64_t best_err_so_far, uniform uint32_t num_pixels, const varying color_quad_i *uniform pPixels) +{ + assert((pParams->m_num_selector_weights == 4) || (pParams->m_num_selector_weights == 8)); + + float lr = 255, lg = 255, lb = 255; + float hr = 0, hg = 0, hb = 0; + for (uniform uint32_t i = 0; i < num_pixels; i++) + { + const varying color_quad_i *uniform pC = &pPixels[i]; + + float r = pC->m_c[0]; + float g = pC->m_c[1]; + float b = pC->m_c[2]; + + lr = min(lr, r); + lg = min(lg, g); + lb = min(lb, b); + + hr = max(hr, r); + hg = max(hg, g); + hb = max(hb, b); + } + + const uniform uint32_t N = 1 << g_bc7_color_index_bitcount[mode]; + + uint64_t total_err = 0; + + float sr = lr; + float sg = lg; + float sb = lb; + + float dir = hr - lr; + float dig = hg - lg; + float dib = hb - lb; + + float far = dir; + float fag = dig; + float fab = dib; + + float low = far * sr + fag * sg + fab * sb; + float high = far * hr + fag * hg + fab * hb; + + float scale = ((float)N - 1) / (float)(high - low); + float inv_n = 1.0f / ((float)N - 1); + + float total_errf = 0; + + // We don't handle perceptual very well here, but the difference is very slight (<.05 dB avg Luma PSNR across a large corpus) and the perf lost was high (2x slower). + if ((pParams->m_weights[0] != 1) || (pParams->m_weights[1] != 1) || (pParams->m_weights[2] != 1)) + { + float wr = pParams->m_weights[0]; + float wg = pParams->m_weights[1]; + float wb = pParams->m_weights[2]; + + for (uniform uint32_t i = 0; i < num_pixels; i++) + { + const varying color_quad_i *uniform pC = &pPixels[i]; + + float d = far * (float)pC->m_c[0] + fag * (float)pC->m_c[1] + fab * (float)pC->m_c[2]; + + float s = clamp(floor((d - low) * scale + .5f) * inv_n, 0.0f, 1.0f); + + float itr = sr + dir * s; + float itg = sg + dig * s; + float itb = sb + dib * s; + + float dr = itr - (float)pC->m_c[0]; + float dg = itg - (float)pC->m_c[1]; + float db = itb - (float)pC->m_c[2]; + + total_errf += wr * dr * dr + wg * dg * dg + wb * db * db; + } + } + else + { + for (uniform uint32_t i = 0; i < num_pixels; i++) + { + const varying color_quad_i *uniform pC = &pPixels[i]; + + float d = far * (float)pC->m_c[0] + fag * (float)pC->m_c[1] + fab * (float)pC->m_c[2]; + + float s = clamp(floor((d - low) * scale + .5f) * inv_n, 0.0f, 1.0f); + + float itr = sr + dir * s; + float itg = sg + dig * s; + float itb = sb + dib * s; + + float dr = itr - (float)pC->m_c[0]; + float dg = itg - (float)pC->m_c[1]; + float db = itb - (float)pC->m_c[2]; + + total_errf += dr * dr + dg * dg + db * db; + } + } + + total_err = (int64_t)total_errf; + + return total_err; +} + +static uint64_t color_cell_compression_est_mode7(uniform uint32_t mode, const uniform color_cell_compressor_params *uniform pParams, uint64_t best_err_so_far, uniform uint32_t num_pixels, const varying color_quad_i *uniform pPixels) +{ + assert((mode == 7) && (pParams->m_num_selector_weights == 4)); + + float lr = 255, lg = 255, lb = 255, la = 255; + float hr = 0, hg = 0, hb = 0, ha = 0; + for (uniform uint32_t i = 0; i < num_pixels; i++) + { + const varying color_quad_i *uniform pC = &pPixels[i]; + + float r = pC->m_c[0]; + float g = pC->m_c[1]; + float b = pC->m_c[2]; + float a = pC->m_c[3]; + + lr = min(lr, r); + lg = min(lg, g); + lb = min(lb, b); + la = min(la, a); + + hr = max(hr, r); + hg = max(hg, g); + hb = max(hb, b); + ha = max(ha, a); + } + + const uniform uint32_t N = 4; + + uint64_t total_err = 0; + + float sr = lr; + float sg = lg; + float sb = lb; + float sa = la; + + float dir = hr - lr; + float dig = hg - lg; + float dib = hb - lb; + float dia = ha - la; + + float far = dir; + float fag = dig; + float fab = dib; + float faa = dia; + + float low = far * sr + fag * sg + fab * sb + faa * sa; + float high = far * hr + fag * hg + fab * hb + faa * ha; + + float scale = ((float)N - 1) / (float)(high - low); + float inv_n = 1.0f / ((float)N - 1); + + float total_errf = 0; + + // We don't handle perceptual very well here, but the difference is very slight (<.05 dB avg Luma PSNR across a large corpus) and the perf lost was high (2x slower). + if ( (!pParams->m_perceptual) && ((pParams->m_weights[0] != 1) || (pParams->m_weights[1] != 1) || (pParams->m_weights[2] != 1) || (pParams->m_weights[3] != 1)) ) + { + float wr = pParams->m_weights[0]; + float wg = pParams->m_weights[1]; + float wb = pParams->m_weights[2]; + float wa = pParams->m_weights[3]; + + for (uniform uint32_t i = 0; i < num_pixels; i++) + { + const varying color_quad_i *uniform pC = &pPixels[i]; + + float d = far * (float)pC->m_c[0] + fag * (float)pC->m_c[1] + fab * (float)pC->m_c[2] + faa * (float)pC->m_c[3]; + + float s = clamp(floor((d - low) * scale + .5f) * inv_n, 0.0f, 1.0f); + + float itr = sr + dir * s; + float itg = sg + dig * s; + float itb = sb + dib * s; + float ita = sa + dia * s; + + float dr = itr - (float)pC->m_c[0]; + float dg = itg - (float)pC->m_c[1]; + float db = itb - (float)pC->m_c[2]; + float da = ita - (float)pC->m_c[3]; + + total_errf += wr * dr * dr + wg * dg * dg + wb * db * db + wa * da * da; + } + } + else + { + for (uniform uint32_t i = 0; i < num_pixels; i++) + { + const varying color_quad_i *uniform pC = &pPixels[i]; + + float d = far * (float)pC->m_c[0] + fag * (float)pC->m_c[1] + fab * (float)pC->m_c[2] + faa * (float)pC->m_c[3]; + + float s = clamp(floor((d - low) * scale + .5f) * inv_n, 0.0f, 1.0f); + + float itr = sr + dir * s; + float itg = sg + dig * s; + float itb = sb + dib * s; + float ita = sa + dia * s; + + float dr = itr - (float)pC->m_c[0]; + float dg = itg - (float)pC->m_c[1]; + float db = itb - (float)pC->m_c[2]; + float da = ita - (float)pC->m_c[3]; + + total_errf += dr * dr + dg * dg + db * db + da * da; + } + } + + total_err = (int64_t)total_errf; + + return total_err; +} + +static uint32_t estimate_partition(uniform uint32_t mode, const varying color_quad_i *uniform pPixels, const uniform bc7e_compress_block_params *uniform pComp_params) +{ + const uniform uint32_t total_subsets = g_bc7_num_subsets[mode]; + uniform uint32_t total_partitions = minimumu(pComp_params->m_max_partitions_mode[mode], 1U << g_bc7_partition_bits[mode]); + + if (total_partitions <= 1) + return 0; + + uint64_t best_err = UINT64_MAX; + uint32_t best_partition = 0; + + uniform color_cell_compressor_params params; + color_cell_compressor_params_clear(¶ms); + + params.m_pSelector_weights = (g_bc7_color_index_bitcount[mode] == 2) ? g_bc7_weights2 : g_bc7_weights3; + params.m_num_selector_weights = 1 << g_bc7_color_index_bitcount[mode]; + + memcpy(params.m_weights, pComp_params->m_weights, sizeof(params.m_weights)); + + if (mode >= 6) + { + params.m_weights[0] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[0]; + params.m_weights[1] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[1]; + params.m_weights[2] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[2]; + params.m_weights[3] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[3]; + } + + params.m_perceptual = pComp_params->m_perceptual; + + for (uniform uint32_t partition = 0; partition < total_partitions; partition++) + { + const int *uniform pPartition = (total_subsets == 3) ? &g_bc7_partition3[partition * 16] : &g_bc7_partition2[partition * 16]; + + varying color_quad_i subset_colors[3][16]; + uniform uint32_t subset_total_colors[3]; + subset_total_colors[0] = 0; + subset_total_colors[1] = 0; + subset_total_colors[2] = 0; + + for (uniform uint32_t index = 0; index < 16; index++) + { + const uniform uint32_t p = pPartition[index]; + + subset_colors[p][subset_total_colors[p]] = pPixels[index]; + subset_total_colors[p]++; + } + + uint64_t total_subset_err = 0; + + for (uniform uint32_t subset = 0; subset < total_subsets; subset++) + { + uint64_t err; + if (mode == 7) + err = color_cell_compression_est_mode7(mode, ¶ms, best_err, subset_total_colors[subset], &subset_colors[subset][0]); + else + err = color_cell_compression_est(mode, ¶ms, best_err, subset_total_colors[subset], &subset_colors[subset][0]); + + total_subset_err += err; + + } // subset + + if (total_subset_err < best_err) + { + best_err = total_subset_err; + best_partition = partition; + if (!best_err) + break; + } + + if (total_subsets == 2) + { + if ((partition == BC7E_2SUBSET_CHECKERBOARD_PARTITION_INDEX) && (best_partition != BC7E_2SUBSET_CHECKERBOARD_PARTITION_INDEX)) + break; + } + + } // partition + + return best_partition; +} + +struct solution +{ + uint32_t m_index; + uint64_t m_err; +}; + +static uniform uint32_t estimate_partition_list(uniform uint32_t mode, const varying color_quad_i *uniform pPixels, const uniform bc7e_compress_block_params *uniform pComp_params, + varying solution *uniform pSolutions, uniform int32_t max_solutions) +{ + const uniform int32_t orig_max_solutions = max_solutions; + + const uniform uint32_t total_subsets = g_bc7_num_subsets[mode]; + uniform uint32_t total_partitions = minimumu(pComp_params->m_max_partitions_mode[mode], 1U << g_bc7_partition_bits[mode]); + + if (total_partitions <= 1) + { + pSolutions[0].m_index = 0; + pSolutions[0].m_err = 0; + return 1; + } + else if (max_solutions >= total_partitions) + { + for (uniform int i = 0; i < total_partitions; i++) + { + pSolutions[i].m_index = i; + pSolutions[i].m_err = i; + } + return total_partitions; + } + + const uniform int32_t HIGH_FREQUENCY_SORTED_PARTITION_THRESHOLD = 4; + if (total_subsets == 2) + { + if (max_solutions < HIGH_FREQUENCY_SORTED_PARTITION_THRESHOLD) + max_solutions = HIGH_FREQUENCY_SORTED_PARTITION_THRESHOLD; + } + + uniform color_cell_compressor_params params; + color_cell_compressor_params_clear(¶ms); + + params.m_pSelector_weights = (g_bc7_color_index_bitcount[mode] == 2) ? g_bc7_weights2 : g_bc7_weights3; + params.m_num_selector_weights = 1 << g_bc7_color_index_bitcount[mode]; + + memcpy(params.m_weights, pComp_params->m_weights, sizeof(params.m_weights)); + + if (mode >= 6) + { + params.m_weights[0] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[0]; + params.m_weights[1] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[1]; + params.m_weights[2] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[2]; + params.m_weights[3] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[3]; + } + + params.m_perceptual = pComp_params->m_perceptual; + + uniform int32_t num_solutions = 0; + + for (uniform uint32_t partition = 0; partition < total_partitions; partition++) + { + const int *uniform pPartition = (total_subsets == 3) ? &g_bc7_partition3[partition * 16] : &g_bc7_partition2[partition * 16]; + + varying color_quad_i subset_colors[3][16]; + uniform uint32_t subset_total_colors[3]; + subset_total_colors[0] = 0; + subset_total_colors[1] = 0; + subset_total_colors[2] = 0; + + for (uniform uint32_t index = 0; index < 16; index++) + { + const uniform uint32_t p = pPartition[index]; + + subset_colors[p][subset_total_colors[p]] = pPixels[index]; + subset_total_colors[p]++; + } + + uint64_t total_subset_err = 0; + + for (uniform uint32_t subset = 0; subset < total_subsets; subset++) + { + uint64_t err; + if (mode == 7) + err = color_cell_compression_est_mode7(mode, ¶ms, UINT64_MAX, subset_total_colors[subset], &subset_colors[subset][0]); + else + err = color_cell_compression_est(mode, ¶ms, UINT64_MAX, subset_total_colors[subset], &subset_colors[subset][0]); + + total_subset_err += err; + + } // subset + + int32_t i; + for (i = 0; i < num_solutions; i++) + { +#pragma ignore warning(perf) + if (total_subset_err < pSolutions[i].m_err) + break; + } + + if (i < num_solutions) + { + int32_t solutions_to_move = (max_solutions - 1) - i; + int32_t num_elements_at_i = num_solutions - i; + if (solutions_to_move > num_elements_at_i) + solutions_to_move = num_elements_at_i; + + assert(((i + 1) + solutions_to_move) <= max_solutions); + assert((i + solutions_to_move) <= num_solutions); + + for (int32_t j = solutions_to_move - 1; j >= 0; --j) + { +#pragma ignore warning(perf) + pSolutions[i + j + 1] = pSolutions[i + j]; + } + } + + if (num_solutions < max_solutions) + num_solutions++; + + if (i < num_solutions) + { +#pragma ignore warning(perf) + pSolutions[i].m_err = total_subset_err; + +#pragma ignore warning(perf) + pSolutions[i].m_index = partition; + } + +#if BC7E_NON_DETERMINISTIC + if ((total_subsets == 2) && (partition == BC7E_2SUBSET_CHECKERBOARD_PARTITION_INDEX)) + { + if (all(i >= HIGH_FREQUENCY_SORTED_PARTITION_THRESHOLD)) + break; + } +#endif + + } // partition + +#if 0 + for (uniform int i = 0; i < num_solutions; i++) + { + assert(pSolutions[i].m_index < total_partitions); + } + + for (uniform int i = 0; i < (num_solutions - 1); i++) + { + assert(pSolutions[i].m_err <= pSolutions[i + 1].m_err); + } +#endif + + return min(num_solutions, orig_max_solutions); +} + +static inline void set_block_bits(uint8_t *pBytes, uint32_t val, uint32_t num_bits, varying uint32_t *uniform pCur_ofs) +{ + assert(num_bits < 32); + uint32_t limit = 1U << num_bits; + assert(val < limit); + + while (num_bits) + { + const uint32_t n = minimumu(8 - (*pCur_ofs & 7), num_bits); + +#pragma ignore warning(perf) + pBytes[*pCur_ofs >> 3] |= (uint8_t)(val << (*pCur_ofs & 7)); + + val >>= n; + num_bits -= n; + *pCur_ofs += n; + } + + assert(*pCur_ofs <= 128); +} + +struct bc7_optimization_results +{ + uint32_t m_mode; + uint32_t m_partition; + int m_selectors[16]; + int m_alpha_selectors[16]; + color_quad_i m_low[3]; + color_quad_i m_high[3]; + uint32_t m_pbits[3][2]; + uint32_t m_rotation; + uint32_t m_index_selector; +}; + +static void encode_bc7_block(void *pBlock, const varying bc7_optimization_results *uniform pResults) +{ + const uint32_t best_mode = pResults->m_mode; + +#pragma ignore warning(perf) + const uint32_t total_subsets = g_bc7_num_subsets[best_mode]; + +#pragma ignore warning(perf) + const uint32_t total_partitions = 1 << g_bc7_partition_bits[best_mode]; + + const int *pPartition; + if (total_subsets == 1) + pPartition = &g_bc7_partition1[0]; + else if (total_subsets == 2) + pPartition = &g_bc7_partition2[pResults->m_partition * 16]; + else + pPartition = &g_bc7_partition3[pResults->m_partition * 16]; + + int color_selectors[16]; + for (uniform int i = 0; i < 16; i++) + color_selectors[i] = pResults->m_selectors[i]; + + int alpha_selectors[16]; + for (uniform int i = 0; i < 16; i++) + alpha_selectors[i] = pResults->m_alpha_selectors[i]; + + color_quad_i low[3], high[3]; + low[0] = pResults->m_low[0]; + low[1] = pResults->m_low[1]; + low[2] = pResults->m_low[2]; + + high[0] = pResults->m_high[0]; + high[1] = pResults->m_high[1]; + high[2] = pResults->m_high[2]; + + uint32_t pbits[3][2]; + for (uniform int i = 0; i < 3; i++) + { + pbits[i][0] = pResults->m_pbits[i][0]; + pbits[i][1] = pResults->m_pbits[i][1]; + } + + int anchor[3]; + anchor[0] = -1; + anchor[1] = -1; + anchor[2] = -1; + + for (uniform uint32_t k = 0; k < total_subsets; k++) + { + uint32_t anchor_index = 0; + if (k) + { + if ((total_subsets == 3) && (k == 1)) + { +#pragma ignore warning(perf) + anchor_index = g_bc7_table_anchor_index_third_subset_1[pResults->m_partition]; + } + else if ((total_subsets == 3) && (k == 2)) + { +#pragma ignore warning(perf) + anchor_index = g_bc7_table_anchor_index_third_subset_2[pResults->m_partition]; + } + else + { +#pragma ignore warning(perf) + anchor_index = g_bc7_table_anchor_index_second_subset[pResults->m_partition]; + } + } + + anchor[k] = anchor_index; + + const uint32_t color_index_bits = get_bc7_color_index_size(best_mode, pResults->m_index_selector); + const uint32_t num_color_indices = 1 << color_index_bits; + +#pragma ignore warning(perf) + if (color_selectors[anchor_index] & (num_color_indices >> 1)) + { + for (uniform uint32_t i = 0; i < 16; i++) + { +#pragma ignore warning(perf) + if (pPartition[i] == k) + color_selectors[i] = (num_color_indices - 1) - color_selectors[i]; + } + + if (get_bc7_mode_has_seperate_alpha_selectors(best_mode)) + { + for (uniform uint32_t q = 0; q < 3; q++) + { + int t = low[k].m_c[q]; + low[k].m_c[q] = high[k].m_c[q]; + high[k].m_c[q] = t; + } + } + else + { + color_quad_i tmp = low[k]; + low[k] = high[k]; + high[k] = tmp; + } + +#pragma ignore warning(perf) + if (!g_bc7_mode_has_shared_p_bits[best_mode]) + { + uint32_t t = pbits[k][0]; + pbits[k][0] = pbits[k][1]; + pbits[k][1] = t; + } + } + + if (get_bc7_mode_has_seperate_alpha_selectors(best_mode)) + { + const uint32_t alpha_index_bits = get_bc7_alpha_index_size(best_mode, pResults->m_index_selector); + const uint32_t num_alpha_indices = 1 << alpha_index_bits; + +#pragma ignore warning(perf) + if (alpha_selectors[anchor_index] & (num_alpha_indices >> 1)) + { + for (uniform uint32_t i = 0; i < 16; i++) + { +#pragma ignore warning(perf) + if (pPartition[i] == k) + alpha_selectors[i] = (num_alpha_indices - 1) - alpha_selectors[i]; + } + + int t = low[k].m_c[3]; + low[k].m_c[3] = high[k].m_c[3]; + high[k].m_c[3] = t; + } + } + } + + uint8_t *pBlock_bytes = (uint8_t *)(pBlock); + memset(pBlock_bytes, 0, BC7E_BLOCK_SIZE); + + uint32_t cur_bit_ofs = 0; + + set_block_bits(pBlock_bytes, 1 << best_mode, best_mode + 1, &cur_bit_ofs); + + if ((best_mode == 4) || (best_mode == 5)) + set_block_bits(pBlock_bytes, pResults->m_rotation, 2, &cur_bit_ofs); + + if (best_mode == 4) + set_block_bits(pBlock_bytes, pResults->m_index_selector, 1, &cur_bit_ofs); + + if (total_partitions > 1) + set_block_bits(pBlock_bytes, pResults->m_partition, (total_partitions == 64) ? 6 : 4, &cur_bit_ofs); + + const uint32_t total_comps = (best_mode >= 4) ? 4 : 3; + for (uniform uint32_t comp = 0; comp < total_comps; comp++) + { + for (uniform uint32_t subset = 0; subset < total_subsets; subset++) + { + set_block_bits(pBlock_bytes, low[subset].m_c[comp], (comp == 3) ? g_bc7_alpha_precision_table[best_mode] : g_bc7_color_precision_table[best_mode], &cur_bit_ofs); + set_block_bits(pBlock_bytes, high[subset].m_c[comp], (comp == 3) ? g_bc7_alpha_precision_table[best_mode] : g_bc7_color_precision_table[best_mode], &cur_bit_ofs); + } + } + +#pragma ignore warning(perf) + if (g_bc7_mode_has_p_bits[best_mode]) + { + for (uniform uint32_t subset = 0; subset < total_subsets; subset++) + { + set_block_bits(pBlock_bytes, pbits[subset][0], 1, &cur_bit_ofs); +#pragma ignore warning(perf) + if (!g_bc7_mode_has_shared_p_bits[best_mode]) + set_block_bits(pBlock_bytes, pbits[subset][1], 1, &cur_bit_ofs); + } + } + + for (uniform uint32_t y = 0; y < 4; y++) + { + for (uniform uint32_t x = 0; x < 4; x++) + { + uniform int idx = x + y * 4; + + uint32_t n = pResults->m_index_selector ? get_bc7_alpha_index_size(best_mode, pResults->m_index_selector) : get_bc7_color_index_size(best_mode, pResults->m_index_selector); + + if ((idx == anchor[0]) || (idx == anchor[1]) || (idx == anchor[2])) + n--; + + set_block_bits(pBlock_bytes, pResults->m_index_selector ? alpha_selectors[idx] : color_selectors[idx], n, &cur_bit_ofs); + } + } + + if (get_bc7_mode_has_seperate_alpha_selectors(best_mode)) + { + for (uniform uint32_t y = 0; y < 4; y++) + { + for (uniform uint32_t x = 0; x < 4; x++) + { + int idx = x + y * 4; + + uint32_t n = pResults->m_index_selector ? get_bc7_color_index_size(best_mode, pResults->m_index_selector) : get_bc7_alpha_index_size(best_mode, pResults->m_index_selector); + + if ((idx == anchor[0]) || (idx == anchor[1]) || (idx == anchor[2])) + n--; + + set_block_bits(pBlock_bytes, pResults->m_index_selector ? color_selectors[idx] : alpha_selectors[idx], n, &cur_bit_ofs); + } + } + } + + assert(cur_bit_ofs == 128); +} + +static inline void encode_bc7_block_mode6(void *pBlock, varying bc7_optimization_results *uniform pResults) +{ + color_quad_i low, high; + uint32_t pbits[2]; + + uint32_t invert_selectors = 0; + if (pResults->m_selectors[0] & 8) + { + invert_selectors = 15; + + low = pResults->m_high[0]; + high = pResults->m_low[0]; + + pbits[0] = pResults->m_pbits[0][1]; + pbits[1] = pResults->m_pbits[0][0]; + } + else + { + low = pResults->m_low[0]; + high = pResults->m_high[0]; + + pbits[0] = pResults->m_pbits[0][0]; + pbits[1] = pResults->m_pbits[0][1]; + } + + uint64_t l = 0, h = 0; + + l = 1 << 6; + + l |= (low.m_c[0] << 7); + l |= (high.m_c[0] << 14); + + l |= (low.m_c[1] << 21); + l |= ((uint64_t)high.m_c[1] << 28); + + l |= ((uint64_t)low.m_c[2] << 35); + l |= ((uint64_t)high.m_c[2] << 42); + + l |= ((uint64_t)low.m_c[3] << 49); + l |= ((uint64_t)high.m_c[3] << 56); + + l |= ((uint64_t)pbits[0] << 63); + + h = pbits[1]; + + h |= ((invert_selectors ^ pResults->m_selectors[0]) << 1); + + // TODO: Just invert all these bits in one single operation, not as individual + h |= ((invert_selectors ^ pResults->m_selectors[1]) << 4); + h |= ((invert_selectors ^ pResults->m_selectors[2]) << 8); + h |= ((invert_selectors ^ pResults->m_selectors[3]) << 12); + h |= ((invert_selectors ^ pResults->m_selectors[4]) << 16); + + h |= ((invert_selectors ^ pResults->m_selectors[5]) << 20); + h |= ((invert_selectors ^ pResults->m_selectors[6]) << 24); + h |= ((invert_selectors ^ pResults->m_selectors[7]) << 28); + h |= ((uint64_t)(invert_selectors ^ pResults->m_selectors[8]) << 32); + + h |= ((uint64_t)(invert_selectors ^ pResults->m_selectors[9]) << 36); + h |= ((uint64_t)(invert_selectors ^ pResults->m_selectors[10]) << 40); + h |= ((uint64_t)(invert_selectors ^ pResults->m_selectors[11]) << 44); + h |= ((uint64_t)(invert_selectors ^ pResults->m_selectors[12]) << 48); + + h |= ((uint64_t)(invert_selectors ^ pResults->m_selectors[13]) << 52); + h |= ((uint64_t)(invert_selectors ^ pResults->m_selectors[14]) << 56); + h |= ((uint64_t)(invert_selectors ^ pResults->m_selectors[15]) << 60); + +#pragma ignore warning(perf) + ((uint64_t *)(pBlock))[0] = l; + +#pragma ignore warning(perf) + ((uint64_t *)(pBlock))[1] = h; +} + +static void handle_alpha_block_mode4(const varying color_quad_i *uniform pPixels, const uniform bc7e_compress_block_params *uniform pComp_params, uniform color_cell_compressor_params *uniform pParams, uint32_t lo_a, uint32_t hi_a, + varying bc7_optimization_results *uniform pOpt_results4, varying uint64_t *uniform pMode4_err) +{ + pParams->m_has_alpha = false; + pParams->m_comp_bits = 5; + pParams->m_has_pbits = false; + pParams->m_endpoints_share_pbit = false; + pParams->m_perceptual = pComp_params->m_perceptual; + + for (uniform uint32_t index_selector = 0; index_selector < 2; index_selector++) + { + if ((pComp_params->m_mode4_index_mask & (1 << index_selector)) == 0) + continue; + + if (index_selector) + { + pParams->m_pSelector_weights = g_bc7_weights3; + pParams->m_pSelector_weightsx = (const vec4F * uniform)&g_bc7_weights3x[0]; + pParams->m_num_selector_weights = 8; + } + else + { + pParams->m_pSelector_weights = g_bc7_weights2; + pParams->m_pSelector_weightsx = (const vec4F * uniform)&g_bc7_weights2x[0]; + pParams->m_num_selector_weights = 4; + } + + color_cell_compressor_results results; + + int selectors[16]; + results.m_pSelectors = selectors; + + int selectors_temp[16]; + results.m_pSelectors_temp = selectors_temp; + + uint64_t trial_err = color_cell_compression(4, pParams, &results, pComp_params, 16, pPixels, true); + assert(trial_err == results.m_best_overall_err); + + uint32_t la = minimumi((lo_a + 2) >> 2, 63); + uint32_t ha = minimumi((hi_a + 2) >> 2, 63); + + if (la == ha) + { + if (lo_a != hi_a) + { + if (ha != 63) + ha++; + else if (la != 0) + la--; + } + } + + uint64_t best_alpha_err = UINT64_MAX; + uint32_t best_la = 0, best_ha = 0; + int best_alpha_selectors[16]; + + for (uniform int32_t pass = 0; pass < 2; pass++) + { + int32_t vals[8]; + + if (index_selector == 0) + { + vals[0] = (la << 2) | (la >> 4); + vals[7] = (ha << 2) | (ha >> 4); + + for (uniform uint32_t i = 1; i < 7; i++) + vals[i] = (vals[0] * (64 - g_bc7_weights3[i]) + vals[7] * g_bc7_weights3[i] + 32) >> 6; + } + else + { + vals[0] = (la << 2) | (la >> 4); + vals[3] = (ha << 2) | (ha >> 4); + + const uniform int32_t w_s1 = 21, w_s2 = 43; + vals[1] = (vals[0] * (64 - w_s1) + vals[3] * w_s1 + 32) >> 6; + vals[2] = (vals[0] * (64 - w_s2) + vals[3] * w_s2 + 32) >> 6; + } + + uint64_t trial_alpha_err = 0; + + int trial_alpha_selectors[16]; + for (uniform uint32_t i = 0; i < 16; i++) + { + const int32_t a = pPixels[i].m_c[3]; + + int s = 0; + int32_t be = iabs32(a - vals[0]); + + int e = iabs32(a - vals[1]); if (e < be) { be = e; s = 1; } + e = iabs32(a - vals[2]); if (e < be) { be = e; s = 2; } + e = iabs32(a - vals[3]); if (e < be) { be = e; s = 3; } + + if (index_selector == 0) + { + e = iabs32(a - vals[4]); if (e < be) { be = e; s = 4; } + e = iabs32(a - vals[5]); if (e < be) { be = e; s = 5; } + e = iabs32(a - vals[6]); if (e < be) { be = e; s = 6; } + e = iabs32(a - vals[7]); if (e < be) { be = e; s = 7; } + } + + trial_alpha_err += (be * be) * pParams->m_weights[3]; + + trial_alpha_selectors[i] = s; + } + + if (trial_alpha_err < best_alpha_err) + { + best_alpha_err = trial_alpha_err; + best_la = la; + best_ha = ha; + for (uniform uint32_t i = 0; i < 16; i++) + best_alpha_selectors[i] = trial_alpha_selectors[i]; + } + + if (pass == 0) + { + float xl, xh; + compute_least_squares_endpoints_a(16, trial_alpha_selectors, index_selector ? (const vec4F * uniform)&g_bc7_weights2x[0] : (const vec4F * uniform)&g_bc7_weights3x[0], &xl, &xh, pPixels); + if (xl > xh) + swapf(&xl, &xh); + la = clampi((int)floor(xl * (63.0f / 255.0f) + .5f), 0, 63); + ha = clampi((int)floor(xh * (63.0f / 255.0f) + .5f), 0, 63); + } + + } // pass + + if (pComp_params->m_uber_level > 0) + { + const uniform int D = min((int)pComp_params->m_uber_level, 3); + for (uniform int ld = -D; ld <= D; ld++) + { + for (uniform int hd = -D; hd <= D; hd++) + { + la = clamp((int)best_la + ld, 0, 63); + ha = clamp((int)best_ha + hd, 0, 63); + + int32_t vals[8]; + + if (index_selector == 0) + { + vals[0] = (la << 2) | (la >> 4); + vals[7] = (ha << 2) | (ha >> 4); + + for (uniform uint32_t i = 1; i < 7; i++) + vals[i] = (vals[0] * (64 - g_bc7_weights3[i]) + vals[7] * g_bc7_weights3[i] + 32) >> 6; + } + else + { + vals[0] = (la << 2) | (la >> 4); + vals[3] = (ha << 2) | (ha >> 4); + + const uniform int32_t w_s1 = 21, w_s2 = 43; + vals[1] = (vals[0] * (64 - w_s1) + vals[3] * w_s1 + 32) >> 6; + vals[2] = (vals[0] * (64 - w_s2) + vals[3] * w_s2 + 32) >> 6; + } + + uint64_t trial_alpha_err = 0; + + int trial_alpha_selectors[16]; + for (uniform uint32_t i = 0; i < 16; i++) + { + const int32_t a = pPixels[i].m_c[3]; + + int s = 0; + int32_t be = iabs32(a - vals[0]); + + int e = iabs32(a - vals[1]); if (e < be) { be = e; s = 1; } + e = iabs32(a - vals[2]); if (e < be) { be = e; s = 2; } + e = iabs32(a - vals[3]); if (e < be) { be = e; s = 3; } + + if (index_selector == 0) + { + e = iabs32(a - vals[4]); if (e < be) { be = e; s = 4; } + e = iabs32(a - vals[5]); if (e < be) { be = e; s = 5; } + e = iabs32(a - vals[6]); if (e < be) { be = e; s = 6; } + e = iabs32(a - vals[7]); if (e < be) { be = e; s = 7; } + } + + trial_alpha_err += (be * be) * pParams->m_weights[3]; + + trial_alpha_selectors[i] = s; + } + + if (trial_alpha_err < best_alpha_err) + { + best_alpha_err = trial_alpha_err; + best_la = la; + best_ha = ha; + for (uniform uint32_t i = 0; i < 16; i++) + best_alpha_selectors[i] = trial_alpha_selectors[i]; + } + + } // hd + + } // ld + } + + trial_err += best_alpha_err; + + if (trial_err < *pMode4_err) + { + *pMode4_err = trial_err; + + pOpt_results4->m_mode = 4; + pOpt_results4->m_index_selector = index_selector; + pOpt_results4->m_rotation = 0; + pOpt_results4->m_partition = 0; + + pOpt_results4->m_low[0] = results.m_low_endpoint; + pOpt_results4->m_high[0] = results.m_high_endpoint; + pOpt_results4->m_low[0].m_c[3] = best_la; + pOpt_results4->m_high[0].m_c[3] = best_ha; + + for (uniform uint32_t i = 0; i < 16; i++) + pOpt_results4->m_selectors[i] = selectors[i]; + + for (uniform uint32_t i = 0; i < 16; i++) + pOpt_results4->m_alpha_selectors[i] = best_alpha_selectors[i]; + } + + } // index_selector +} + +static void handle_alpha_block_mode5(const varying color_quad_i *uniform pPixels, const uniform bc7e_compress_block_params *uniform pComp_params, uniform color_cell_compressor_params *uniform pParams, uint32_t lo_a, uint32_t hi_a, + varying bc7_optimization_results *uniform pOpt_results5, varying uint64_t *uniform pMode5_err) +{ + pParams->m_pSelector_weights = g_bc7_weights2; + pParams->m_pSelector_weightsx = (const vec4F * uniform)&g_bc7_weights2x[0]; + pParams->m_num_selector_weights = 4; + + pParams->m_comp_bits = 7; + pParams->m_has_alpha = false; + pParams->m_has_pbits = false; + pParams->m_endpoints_share_pbit = false; + + pParams->m_perceptual = pComp_params->m_perceptual; + + color_cell_compressor_results results5; + results5.m_pSelectors = pOpt_results5->m_selectors; + + int selectors_temp[16]; + results5.m_pSelectors_temp = selectors_temp; + + *pMode5_err = color_cell_compression(5, pParams, &results5, pComp_params, 16, pPixels, true); + assert(*pMode5_err == results5.m_best_overall_err); + + pOpt_results5->m_low[0] = results5.m_low_endpoint; + pOpt_results5->m_high[0] = results5.m_high_endpoint; + + cif (lo_a == hi_a) + { + pOpt_results5->m_low[0].m_c[3] = lo_a; + pOpt_results5->m_high[0].m_c[3] = hi_a; + for (uniform uint32_t i = 0; i < 16; i++) + pOpt_results5->m_alpha_selectors[i] = 0; + } + else + { + uint64_t mode5_alpha_err = UINT64_MAX; + + for (uniform uint32_t pass = 0; pass < 2; pass++) + { + int32_t vals[4]; + vals[0] = lo_a; + vals[3] = hi_a; + + const uniform int32_t w_s1 = 21, w_s2 = 43; + vals[1] = (vals[0] * (64 - w_s1) + vals[3] * w_s1 + 32) >> 6; + vals[2] = (vals[0] * (64 - w_s2) + vals[3] * w_s2 + 32) >> 6; + + int trial_alpha_selectors[16]; + + uint64_t trial_alpha_err = 0; + for (uniform uint32_t i = 0; i < 16; i++) + { + const int32_t a = pPixels[i].m_c[3]; + + int s = 0; + int32_t be = iabs32(a - vals[0]); + int e = iabs32(a - vals[1]); if (e < be) { be = e; s = 1; } + e = iabs32(a - vals[2]); if (e < be) { be = e; s = 2; } + e = iabs32(a - vals[3]); if (e < be) { be = e; s = 3; } + + trial_alpha_selectors[i] = s; + + trial_alpha_err += (be * be) * pParams->m_weights[3]; + } + + if (trial_alpha_err < mode5_alpha_err) + { + mode5_alpha_err = trial_alpha_err; + pOpt_results5->m_low[0].m_c[3] = lo_a; + pOpt_results5->m_high[0].m_c[3] = hi_a; + for (uniform uint32_t i = 0; i < 16; i++) + pOpt_results5->m_alpha_selectors[i] = trial_alpha_selectors[i]; + } + + if (!pass) + { + float xl, xh; + compute_least_squares_endpoints_a(16, trial_alpha_selectors, (const vec4F * uniform)&g_bc7_weights2x[0], &xl, &xh, pPixels); + + uint32_t new_lo_a = clampi((int)floor(xl + .5f), 0, 255); + uint32_t new_hi_a = clampi((int)floor(xh + .5f), 0, 255); + if (new_lo_a > new_hi_a) + swapu(&new_lo_a, &new_hi_a); + + if ((new_lo_a == lo_a) && (new_hi_a == hi_a)) + break; + + lo_a = new_lo_a; + hi_a = new_hi_a; + } + } + + if (pComp_params->m_uber_level > 0) + { + const uniform int D = min((int)pComp_params->m_uber_level, 3); + for (uniform int ld = -D; ld <= D; ld++) + { + for (uniform int hd = -D; hd <= D; hd++) + { + lo_a = clamp((int)pOpt_results5->m_low[0].m_c[3] + ld, 0, 255); + hi_a = clamp((int)pOpt_results5->m_high[0].m_c[3] + hd, 0, 255); + + int32_t vals[4]; + vals[0] = lo_a; + vals[3] = hi_a; + + const uniform int32_t w_s1 = 21, w_s2 = 43; + vals[1] = (vals[0] * (64 - w_s1) + vals[3] * w_s1 + 32) >> 6; + vals[2] = (vals[0] * (64 - w_s2) + vals[3] * w_s2 + 32) >> 6; + + int trial_alpha_selectors[16]; + + uint64_t trial_alpha_err = 0; + for (uniform uint32_t i = 0; i < 16; i++) + { + const int32_t a = pPixels[i].m_c[3]; + + int s = 0; + int32_t be = iabs32(a - vals[0]); + int e = iabs32(a - vals[1]); if (e < be) { be = e; s = 1; } + e = iabs32(a - vals[2]); if (e < be) { be = e; s = 2; } + e = iabs32(a - vals[3]); if (e < be) { be = e; s = 3; } + + trial_alpha_selectors[i] = s; + + trial_alpha_err += (be * be) * pParams->m_weights[3]; + } + + if (trial_alpha_err < mode5_alpha_err) + { + mode5_alpha_err = trial_alpha_err; + pOpt_results5->m_low[0].m_c[3] = lo_a; + pOpt_results5->m_high[0].m_c[3] = hi_a; + for (uniform uint32_t i = 0; i < 16; i++) + pOpt_results5->m_alpha_selectors[i] = trial_alpha_selectors[i]; + } + + } // hd + + } // ld + } + + *pMode5_err += mode5_alpha_err; + } + + pOpt_results5->m_mode = 5; + pOpt_results5->m_index_selector = 0; + pOpt_results5->m_rotation = 0; + pOpt_results5->m_partition = 0; +} + +static void handle_alpha_block(void *varying pBlock, const varying color_quad_i *uniform pPixels, const uniform bc7e_compress_block_params *uniform pComp_params, uniform color_cell_compressor_params *uniform pParams, uint32_t lo_a, uint32_t hi_a) +{ + pParams->m_perceptual = pComp_params->m_perceptual; + + bc7_optimization_results opt_results; + + uint64_t best_err = UINT64_MAX; + + // Mode 4 + if (pComp_params->m_alpha_settings.m_use_mode4) + { + uniform color_cell_compressor_params params4 = *pParams; + + const uniform int num_rotations = (pComp_params->m_perceptual || (!pComp_params->m_alpha_settings.m_use_mode4_rotation)) ? 1 : 4; + for (uniform uint32_t rotation = 0; rotation < num_rotations; rotation++) + { + if ((pComp_params->m_mode4_rotation_mask & (1 << rotation)) == 0) + continue; + + memcpy(params4.m_weights, pParams->m_weights, sizeof(params4.m_weights)); + if (rotation) + swapu(¶ms4.m_weights[rotation - 1], ¶ms4.m_weights[3]); + + color_quad_i rot_pixels[16]; + const varying color_quad_i *uniform pTrial_pixels = pPixels; + uint32_t trial_lo_a = lo_a, trial_hi_a = hi_a; + if (rotation) + { + trial_lo_a = 255; + trial_hi_a = 0; + + for (uniform uint32_t i = 0; i < 16; i++) + { + color_quad_i c = pPixels[i]; + swapi(&c.m_c[3], &c.m_c[rotation - 1]); + rot_pixels[i] = c; + + trial_lo_a = minimumu(trial_lo_a, c.m_c[3]); + trial_hi_a = maximumu(trial_hi_a, c.m_c[3]); + } + + pTrial_pixels = rot_pixels; + } + + bc7_optimization_results trial_opt_results4; + + uint64_t trial_mode4_err = best_err; + + handle_alpha_block_mode4(pTrial_pixels, pComp_params, ¶ms4, trial_lo_a, trial_hi_a, &trial_opt_results4, &trial_mode4_err); + + if (trial_mode4_err < best_err) + { + best_err = trial_mode4_err; + + opt_results.m_mode = 4; + opt_results.m_index_selector = trial_opt_results4.m_index_selector; + opt_results.m_rotation = rotation; + opt_results.m_partition = 0; + + opt_results.m_low[0] = trial_opt_results4.m_low[0]; + opt_results.m_high[0] = trial_opt_results4.m_high[0]; + + for (uniform uint32_t i = 0; i < 16; i++) + opt_results.m_selectors[i] = trial_opt_results4.m_selectors[i]; + + for (uniform uint32_t i = 0; i < 16; i++) + opt_results.m_alpha_selectors[i] = trial_opt_results4.m_alpha_selectors[i]; + } + } // rotation + } + + // Mode 6 + if (pComp_params->m_alpha_settings.m_use_mode6) + { + uniform color_cell_compressor_params params6 = *pParams; + + params6.m_weights[0] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[0]; + params6.m_weights[1] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[1]; + params6.m_weights[2] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[2]; + params6.m_weights[3] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[3]; + + color_cell_compressor_results results6; + + params6.m_pSelector_weights = g_bc7_weights4; + params6.m_pSelector_weightsx = (const vec4F *)&g_bc7_weights4x[0]; + params6.m_num_selector_weights = 16; + + params6.m_comp_bits = 7; + params6.m_has_pbits = true; + params6.m_endpoints_share_pbit = false; + params6.m_has_alpha = true; + + int selectors[16]; + results6.m_pSelectors = selectors; + + int selectors_temp[16]; + results6.m_pSelectors_temp = selectors_temp; + + uint64_t mode6_err = color_cell_compression(6, ¶ms6, &results6, pComp_params, 16, pPixels, true); + assert(mode6_err == results6.m_best_overall_err); + + if (mode6_err < best_err) + { + best_err = mode6_err; + + opt_results.m_mode = 6; + opt_results.m_index_selector = 0; + opt_results.m_rotation = 0; + opt_results.m_partition = 0; + + opt_results.m_low[0] = results6.m_low_endpoint; + opt_results.m_high[0] = results6.m_high_endpoint; + + opt_results.m_pbits[0][0] = results6.m_pbits[0]; + opt_results.m_pbits[0][1] = results6.m_pbits[1]; + + for (uniform int i = 0; i < 16; i++) + opt_results.m_selectors[i] = selectors[i]; + } + } + + // Mode 5 + if (pComp_params->m_alpha_settings.m_use_mode5) + { + uniform color_cell_compressor_params params5 = *pParams; + + const uniform int num_rotations = (pComp_params->m_perceptual || (!pComp_params->m_alpha_settings.m_use_mode5_rotation)) ? 1 : 4; + for (uniform uint32_t rotation = 0; rotation < num_rotations; rotation++) + { + if ((pComp_params->m_mode5_rotation_mask & (1 << rotation)) == 0) + continue; + + memcpy(params5.m_weights, pParams->m_weights, sizeof(params5.m_weights)); + if (rotation) + swapu(¶ms5.m_weights[rotation - 1], ¶ms5.m_weights[3]); + + color_quad_i rot_pixels[16]; + const varying color_quad_i *uniform pTrial_pixels = pPixels; + uint32_t trial_lo_a = lo_a, trial_hi_a = hi_a; + if (rotation) + { + trial_lo_a = 255; + trial_hi_a = 0; + + for (uniform uint32_t i = 0; i < 16; i++) + { + color_quad_i c = pPixels[i]; + swapi(&c.m_c[3], &c.m_c[rotation - 1]); + rot_pixels[i] = c; + + trial_lo_a = minimumu(trial_lo_a, c.m_c[3]); + trial_hi_a = maximumu(trial_hi_a, c.m_c[3]); + } + + pTrial_pixels = rot_pixels; + } + + bc7_optimization_results trial_opt_results5; + + uint64_t trial_mode5_err = 0; + + handle_alpha_block_mode5(pTrial_pixels, pComp_params, ¶ms5, trial_lo_a, trial_hi_a, &trial_opt_results5, &trial_mode5_err); + + if (trial_mode5_err < best_err) + { + best_err = trial_mode5_err; + + opt_results = trial_opt_results5; + opt_results.m_rotation = rotation; + } + } // rotation + } + + // Mode 7 + if (pComp_params->m_alpha_settings.m_use_mode7) + { + solution solutions[BC7E_MAX_PARTITIONS7]; + uniform uint32_t num_solutions = estimate_partition_list(7, pPixels, pComp_params, solutions, pComp_params->m_alpha_settings.m_max_mode7_partitions_to_try); + + uniform color_cell_compressor_params params7 = *pParams; + + params7.m_weights[0] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[0]; + params7.m_weights[1] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[1]; + params7.m_weights[2] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[2]; + params7.m_weights[3] *= pComp_params->m_alpha_settings.m_mode67_error_weight_mul[3]; + + params7.m_pSelector_weights = g_bc7_weights2; + params7.m_pSelector_weightsx = (const vec4F *)&g_bc7_weights2x[0]; + params7.m_num_selector_weights = 4; + + params7.m_comp_bits = 5; + params7.m_has_pbits = true; + params7.m_endpoints_share_pbit = false; + + params7.m_has_alpha = true; + + int selectors_temp[16]; + + const uniform bool disable_faster_part_selection = false; + + for (uniform uint32_t solution_index = 0; solution_index < num_solutions; solution_index++) + { + const uint32_t trial_partition = solutions[solution_index].m_index; + assert(trial_partition < 64); + + const int *pPartition = &g_bc7_partition2[trial_partition * 16]; + + color_quad_i subset_colors[2][16]; + + uint32_t subset_total_colors7[2]; + subset_total_colors7[0] = 0; + subset_total_colors7[1] = 0; + + int subset_pixel_index7[2][16]; + int subset_selectors7[2][16]; + color_cell_compressor_results subset_results7[2]; + + for (uniform uint32_t idx = 0; idx < 16; idx++) + { +#pragma ignore warning(perf) + const uint32_t p = pPartition[idx]; + assert(p < 2); + +#pragma ignore warning(perf) + subset_colors[p][subset_total_colors7[p]] = pPixels[idx]; +#pragma ignore warning(perf) + subset_pixel_index7[p][subset_total_colors7[p]] = idx; +#pragma ignore warning(perf) + subset_total_colors7[p]++; + } + + uint64_t trial_err = 0; + for (uniform uint32_t subset = 0; subset < 2; subset++) + { + varying color_cell_compressor_results *uniform pResults = &subset_results7[subset]; + + pResults->m_pSelectors = &subset_selectors7[subset][0]; + pResults->m_pSelectors_temp = selectors_temp; + + uint64_t err = color_cell_compression(7, ¶ms7, pResults, pComp_params, subset_total_colors7[subset], &subset_colors[subset][0], (num_solutions <= 2) || disable_faster_part_selection); + assert(err == pResults->m_best_overall_err); + + trial_err += err; + if (trial_err > best_err) + break; + } // subset + + if (trial_err < best_err) + { + best_err = trial_err; + + opt_results.m_mode = 7; + opt_results.m_index_selector = 0; + opt_results.m_rotation = 0; + opt_results.m_partition = trial_partition; + + for (uniform uint32_t subset = 0; subset < 2; subset++) + { + for (uniform uint32_t i = 0; i < subset_total_colors7[subset]; i++) + { + const uint32_t pixel_index = subset_pixel_index7[subset][i]; + +#pragma ignore warning(perf) + opt_results.m_selectors[pixel_index] = subset_selectors7[subset][i]; + } + + opt_results.m_low[subset] = subset_results7[subset].m_low_endpoint; + opt_results.m_high[subset] = subset_results7[subset].m_high_endpoint; + + opt_results.m_pbits[subset][0] = subset_results7[subset].m_pbits[0]; + opt_results.m_pbits[subset][1] = subset_results7[subset].m_pbits[1]; + } + } + + } // solution_index + + if ((num_solutions > 2) && (opt_results.m_mode == 7) && (!disable_faster_part_selection)) + { + const uint32_t trial_partition = opt_results.m_partition; + assert(trial_partition < 64); + + const int *pPartition = &g_bc7_partition2[trial_partition * 16]; + + color_quad_i subset_colors[2][16]; + + uint32_t subset_total_colors7[2]; + subset_total_colors7[0] = 0; + subset_total_colors7[1] = 0; + + int subset_pixel_index7[2][16]; + int subset_selectors7[2][16]; + color_cell_compressor_results subset_results7[2]; + + for (uniform uint32_t idx = 0; idx < 16; idx++) + { +#pragma ignore warning(perf) + const uint32_t p = pPartition[idx]; + assert(p < 2); + +#pragma ignore warning(perf) + subset_colors[p][subset_total_colors7[p]] = pPixels[idx]; +#pragma ignore warning(perf) + subset_pixel_index7[p][subset_total_colors7[p]] = idx; +#pragma ignore warning(perf) + subset_total_colors7[p]++; + } + + uint64_t trial_err = 0; + for (uniform uint32_t subset = 0; subset < 2; subset++) + { + varying color_cell_compressor_results *uniform pResults = &subset_results7[subset]; + + pResults->m_pSelectors = &subset_selectors7[subset][0]; + pResults->m_pSelectors_temp = selectors_temp; + + uint64_t err = color_cell_compression(7, ¶ms7, pResults, pComp_params, subset_total_colors7[subset], &subset_colors[subset][0], true); + assert(err == pResults->m_best_overall_err); + + trial_err += err; + if (trial_err > best_err) + break; + } // subset + + if (trial_err < best_err) + { + best_err = trial_err; + + for (uniform uint32_t subset = 0; subset < 2; subset++) + { + for (uniform uint32_t i = 0; i < subset_total_colors7[subset]; i++) + { + const uint32_t pixel_index = subset_pixel_index7[subset][i]; + +#pragma ignore warning(perf) + opt_results.m_selectors[pixel_index] = subset_selectors7[subset][i]; + } + + opt_results.m_low[subset] = subset_results7[subset].m_low_endpoint; + opt_results.m_high[subset] = subset_results7[subset].m_high_endpoint; + + opt_results.m_pbits[subset][0] = subset_results7[subset].m_pbits[0]; + opt_results.m_pbits[subset][1] = subset_results7[subset].m_pbits[1]; + } + } + } + } + + encode_bc7_block(pBlock, &opt_results); +} + +static void handle_opaque_block(void *varying pBlock, const varying color_quad_i *uniform pPixels, const uniform bc7e_compress_block_params *uniform pComp_params, uniform color_cell_compressor_params *uniform pParams) +{ + int selectors_temp[16]; + + bc7_optimization_results opt_results; + + uint64_t best_err = UINT64_MAX; + + // Mode 6 + if (pComp_params->m_opaque_settings.m_use_mode[6]) + { + pParams->m_pSelector_weights = g_bc7_weights4; + pParams->m_pSelector_weightsx = (const vec4F * uniform)&g_bc7_weights4x[0]; + pParams->m_num_selector_weights = 16; + + pParams->m_comp_bits = 7; + pParams->m_has_pbits = true; + pParams->m_endpoints_share_pbit = false; + + pParams->m_perceptual = pComp_params->m_perceptual; + + color_cell_compressor_results results6; + results6.m_pSelectors = opt_results.m_selectors; + results6.m_pSelectors_temp = selectors_temp; + + best_err = color_cell_compression(6, pParams, &results6, pComp_params, 16, pPixels, true); + + opt_results.m_mode = 6; + opt_results.m_index_selector = 0; + opt_results.m_rotation = 0; + opt_results.m_partition = 0; + + opt_results.m_low[0] = results6.m_low_endpoint; + opt_results.m_high[0] = results6.m_high_endpoint; + + opt_results.m_pbits[0][0] = results6.m_pbits[0]; + opt_results.m_pbits[0][1] = results6.m_pbits[1]; + } + + solution solutions2[BC7E_MAX_PARTITIONS3]; + uniform uint32_t num_solutions2 = 0; + if (pComp_params->m_opaque_settings.m_use_mode[1] || pComp_params->m_opaque_settings.m_use_mode[3]) + { + if (pComp_params->m_opaque_settings.m_max_mode13_partitions_to_try == 1) + { + solutions2[0].m_index = estimate_partition(1, pPixels, pComp_params); + num_solutions2 = 1; + } + else + { + num_solutions2 = estimate_partition_list(1, pPixels, pComp_params, solutions2, pComp_params->m_opaque_settings.m_max_mode13_partitions_to_try); + } + } + + const uniform bool disable_faster_part_selection = false; + + // Mode 1 + if (pComp_params->m_opaque_settings.m_use_mode[1]) + { + pParams->m_pSelector_weights = g_bc7_weights3; + pParams->m_pSelector_weightsx = (const vec4F *)&g_bc7_weights3x[0]; + pParams->m_num_selector_weights = 8; + + pParams->m_comp_bits = 6; + pParams->m_has_pbits = true; + pParams->m_endpoints_share_pbit = true; + + pParams->m_perceptual = pComp_params->m_perceptual; + + for (uniform uint32_t solution_index = 0; solution_index < num_solutions2; solution_index++) + { + const uint32_t trial_partition = solutions2[solution_index].m_index; + assert(trial_partition < 64); + + const int *pPartition = &g_bc7_partition2[trial_partition * 16]; + + color_quad_i subset_colors[2][16]; + + uint32_t subset_total_colors1[2]; + subset_total_colors1[0] = 0; + subset_total_colors1[1] = 0; + + int subset_pixel_index1[2][16]; + int subset_selectors1[2][16]; + color_cell_compressor_results subset_results1[2]; + + for (uniform uint32_t idx = 0; idx < 16; idx++) + { +#pragma ignore warning(perf) + const uint32_t p = pPartition[idx]; + assert(p < 2); + +#pragma ignore warning(perf) + subset_colors[p][subset_total_colors1[p]] = pPixels[idx]; +#pragma ignore warning(perf) + subset_pixel_index1[p][subset_total_colors1[p]] = idx; +#pragma ignore warning(perf) + subset_total_colors1[p]++; + } + + uint64_t trial_err = 0; + for (uniform uint32_t subset = 0; subset < 2; subset++) + { + varying color_cell_compressor_results *uniform pResults = &subset_results1[subset]; + + pResults->m_pSelectors = &subset_selectors1[subset][0]; + pResults->m_pSelectors_temp = selectors_temp; + + uint64_t err = color_cell_compression(1, pParams, pResults, pComp_params, subset_total_colors1[subset], &subset_colors[subset][0], (num_solutions2 <= 2) || disable_faster_part_selection); + assert(err == pResults->m_best_overall_err); + + trial_err += err; + if (trial_err > best_err) + break; + + } // subset + + if (trial_err < best_err) + { + best_err = trial_err; + + opt_results.m_mode = 1; + opt_results.m_index_selector = 0; + opt_results.m_rotation = 0; + opt_results.m_partition = trial_partition; + + for (uniform uint32_t subset = 0; subset < 2; subset++) + { + for (uniform uint32_t i = 0; i < subset_total_colors1[subset]; i++) + { + const uint32_t pixel_index = subset_pixel_index1[subset][i]; + +#pragma ignore warning(perf) + opt_results.m_selectors[pixel_index] = subset_selectors1[subset][i]; + } + + opt_results.m_low[subset] = subset_results1[subset].m_low_endpoint; + opt_results.m_high[subset] = subset_results1[subset].m_high_endpoint; + + opt_results.m_pbits[subset][0] = subset_results1[subset].m_pbits[0]; + } + } + } + + if ((num_solutions2 > 2) && (opt_results.m_mode == 1) && (!disable_faster_part_selection)) + { + const uint32_t trial_partition = opt_results.m_partition; + assert(trial_partition < 64); + + const int *pPartition = &g_bc7_partition2[trial_partition * 16]; + + color_quad_i subset_colors[2][16]; + + uint32_t subset_total_colors1[2]; + subset_total_colors1[0] = 0; + subset_total_colors1[1] = 0; + + int subset_pixel_index1[2][16]; + int subset_selectors1[2][16]; + color_cell_compressor_results subset_results1[2]; + + for (uniform uint32_t idx = 0; idx < 16; idx++) + { +#pragma ignore warning(perf) + const uint32_t p = pPartition[idx]; + assert(p < 2); + +#pragma ignore warning(perf) + subset_colors[p][subset_total_colors1[p]] = pPixels[idx]; +#pragma ignore warning(perf) + subset_pixel_index1[p][subset_total_colors1[p]] = idx; +#pragma ignore warning(perf) + subset_total_colors1[p]++; + } + + uint64_t trial_err = 0; + for (uniform uint32_t subset = 0; subset < 2; subset++) + { + varying color_cell_compressor_results *uniform pResults = &subset_results1[subset]; + + pResults->m_pSelectors = &subset_selectors1[subset][0]; + pResults->m_pSelectors_temp = selectors_temp; + + uint64_t err = color_cell_compression(1, pParams, pResults, pComp_params, subset_total_colors1[subset], &subset_colors[subset][0], true); + assert(err == pResults->m_best_overall_err); + + trial_err += err; + if (trial_err > best_err) + break; + + } // subset + + if (trial_err < best_err) + { + best_err = trial_err; + + for (uniform uint32_t subset = 0; subset < 2; subset++) + { + for (uniform uint32_t i = 0; i < subset_total_colors1[subset]; i++) + { + const uint32_t pixel_index = subset_pixel_index1[subset][i]; +#pragma ignore warning(perf) + opt_results.m_selectors[pixel_index] = subset_selectors1[subset][i]; + } + + opt_results.m_low[subset] = subset_results1[subset].m_low_endpoint; + opt_results.m_high[subset] = subset_results1[subset].m_high_endpoint; + + opt_results.m_pbits[subset][0] = subset_results1[subset].m_pbits[0]; + } + } + } + } + + // Mode 0 + if (pComp_params->m_opaque_settings.m_use_mode[0]) + { + solution solutions3[BC7E_MAX_PARTITIONS0]; + uniform uint32_t num_solutions3 = 0; + if (pComp_params->m_opaque_settings.m_max_mode0_partitions_to_try == 1) + { + solutions3[0].m_index = estimate_partition(0, pPixels, pComp_params); + num_solutions3 = 1; + } + else + { + num_solutions3 = estimate_partition_list(0, pPixels, pComp_params, solutions3, pComp_params->m_opaque_settings.m_max_mode0_partitions_to_try); + } + + pParams->m_pSelector_weights = g_bc7_weights3; + pParams->m_pSelector_weightsx = (const vec4F *)&g_bc7_weights3x[0]; + pParams->m_num_selector_weights = 8; + + pParams->m_comp_bits = 4; + pParams->m_has_pbits = true; + pParams->m_endpoints_share_pbit = false; + + pParams->m_perceptual = pComp_params->m_perceptual; + + for (uniform uint32_t solution_index = 0; solution_index < num_solutions3; solution_index++) + { + const uint32_t best_partition0 = solutions3[solution_index].m_index; + + const int *pPartition = &g_bc7_partition3[best_partition0 * 16]; + + color_quad_i subset_colors[3][16]; + + uint32_t subset_total_colors0[3]; + subset_total_colors0[0] = 0; + subset_total_colors0[1] = 0; + subset_total_colors0[2] = 0; + + int subset_pixel_index0[3][16]; + + for (uniform uint32_t idx = 0; idx < 16; idx++) + { +#pragma ignore warning(perf) + const uint32_t p = pPartition[idx]; + +#pragma ignore warning(perf) + subset_colors[p][subset_total_colors0[p]] = pPixels[idx]; +#pragma ignore warning(perf) + subset_pixel_index0[p][subset_total_colors0[p]] = idx; +#pragma ignore warning(perf) + subset_total_colors0[p]++; + } + + color_cell_compressor_results subset_results0[3]; + int subset_selectors0[3][16]; + + uint64_t mode0_err = 0; + for (uniform uint32_t subset = 0; subset < 3; subset++) + { + varying color_cell_compressor_results *uniform pResults = &subset_results0[subset]; + + pResults->m_pSelectors = &subset_selectors0[subset][0]; + pResults->m_pSelectors_temp = selectors_temp; + + uint64_t err = color_cell_compression(0, pParams, pResults, pComp_params, subset_total_colors0[subset], &subset_colors[subset][0], true); + assert(err == pResults->m_best_overall_err); + + mode0_err += err; + if (mode0_err > best_err) + break; + } // subset + + if (mode0_err < best_err) + { + best_err = mode0_err; + + opt_results.m_mode = 0; + opt_results.m_index_selector = 0; + opt_results.m_rotation = 0; + opt_results.m_partition = best_partition0; + + for (uniform uint32_t subset = 0; subset < 3; subset++) + { + for (uniform uint32_t i = 0; i < subset_total_colors0[subset]; i++) + { + const uint32_t pixel_index = subset_pixel_index0[subset][i]; + +#pragma ignore warning(perf) + opt_results.m_selectors[pixel_index] = subset_selectors0[subset][i]; + } + + opt_results.m_low[subset] = subset_results0[subset].m_low_endpoint; + opt_results.m_high[subset] = subset_results0[subset].m_high_endpoint; + + opt_results.m_pbits[subset][0] = subset_results0[subset].m_pbits[0]; + opt_results.m_pbits[subset][1] = subset_results0[subset].m_pbits[1]; + } + } + } + } + + // Mode 3 + if (pComp_params->m_opaque_settings.m_use_mode[3]) + { + pParams->m_pSelector_weights = g_bc7_weights2; + pParams->m_pSelector_weightsx = (const vec4F *)&g_bc7_weights2x[0]; + pParams->m_num_selector_weights = 4; + + pParams->m_comp_bits = 7; + pParams->m_has_pbits = true; + pParams->m_endpoints_share_pbit = false; + + pParams->m_perceptual = pComp_params->m_perceptual; + + for (uniform uint32_t solution_index = 0; solution_index < num_solutions2; solution_index++) + { + const uint32_t trial_partition = solutions2[solution_index].m_index; + assert(trial_partition < 64); + + const int *pPartition = &g_bc7_partition2[trial_partition * 16]; + + color_quad_i subset_colors[2][16]; + + uint32_t subset_total_colors3[2]; + subset_total_colors3[0] = 0; + subset_total_colors3[1] = 0; + + int subset_pixel_index3[2][16]; + int subset_selectors3[2][16]; + color_cell_compressor_results subset_results3[2]; + + for (uniform uint32_t idx = 0; idx < 16; idx++) + { +#pragma ignore warning(perf) + const uint32_t p = pPartition[idx]; + assert(p < 2); + +#pragma ignore warning(perf) + subset_colors[p][subset_total_colors3[p]] = pPixels[idx]; + +#pragma ignore warning(perf) + subset_pixel_index3[p][subset_total_colors3[p]] = idx; + +#pragma ignore warning(perf) + subset_total_colors3[p]++; + } + + uint64_t trial_err = 0; + for (uniform uint32_t subset = 0; subset < 2; subset++) + { + varying color_cell_compressor_results *uniform pResults = &subset_results3[subset]; + + pResults->m_pSelectors = &subset_selectors3[subset][0]; + pResults->m_pSelectors_temp = selectors_temp; + + uint64_t err = color_cell_compression(3, pParams, pResults, pComp_params, subset_total_colors3[subset], &subset_colors[subset][0], (num_solutions2 <= 2) || disable_faster_part_selection); + assert(err == pResults->m_best_overall_err); + + trial_err += err; + if (trial_err > best_err) + break; + } // subset + + if (trial_err < best_err) + { + best_err = trial_err; + + opt_results.m_mode = 3; + opt_results.m_index_selector = 0; + opt_results.m_rotation = 0; + opt_results.m_partition = trial_partition; + + for (uniform uint32_t subset = 0; subset < 2; subset++) + { + for (uniform uint32_t i = 0; i < subset_total_colors3[subset]; i++) + { + const uint32_t pixel_index = subset_pixel_index3[subset][i]; + +#pragma ignore warning(perf) + opt_results.m_selectors[pixel_index] = subset_selectors3[subset][i]; + } + + opt_results.m_low[subset] = subset_results3[subset].m_low_endpoint; + opt_results.m_high[subset] = subset_results3[subset].m_high_endpoint; + + opt_results.m_pbits[subset][0] = subset_results3[subset].m_pbits[0]; + opt_results.m_pbits[subset][1] = subset_results3[subset].m_pbits[1]; + } + } + + } // solution_index + + if ((num_solutions2 > 2) && (opt_results.m_mode == 3) && (!disable_faster_part_selection)) + { + const uint32_t trial_partition = opt_results.m_partition; + assert(trial_partition < 64); + + const int *pPartition = &g_bc7_partition2[trial_partition * 16]; + + color_quad_i subset_colors[2][16]; + + uint32_t subset_total_colors3[2]; + subset_total_colors3[0] = 0; + subset_total_colors3[1] = 0; + + int subset_pixel_index3[2][16]; + int subset_selectors3[2][16]; + color_cell_compressor_results subset_results3[2]; + + for (uniform uint32_t idx = 0; idx < 16; idx++) + { +#pragma ignore warning(perf) + const uint32_t p = pPartition[idx]; + assert(p < 2); + +#pragma ignore warning(perf) + subset_colors[p][subset_total_colors3[p]] = pPixels[idx]; + +#pragma ignore warning(perf) + subset_pixel_index3[p][subset_total_colors3[p]] = idx; + +#pragma ignore warning(perf) + subset_total_colors3[p]++; + } + + uint64_t trial_err = 0; + for (uniform uint32_t subset = 0; subset < 2; subset++) + { + varying color_cell_compressor_results *uniform pResults = &subset_results3[subset]; + + pResults->m_pSelectors = &subset_selectors3[subset][0]; + pResults->m_pSelectors_temp = selectors_temp; + + uint64_t err = color_cell_compression(3, pParams, pResults, pComp_params, subset_total_colors3[subset], &subset_colors[subset][0], true); + assert(err == pResults->m_best_overall_err); + + trial_err += err; + if (trial_err > best_err) + break; + } // subset + + if (trial_err < best_err) + { + best_err = trial_err; + + for (uniform uint32_t subset = 0; subset < 2; subset++) + { + for (uniform uint32_t i = 0; i < subset_total_colors3[subset]; i++) + { + const uint32_t pixel_index = subset_pixel_index3[subset][i]; + +#pragma ignore warning(perf) + opt_results.m_selectors[pixel_index] = subset_selectors3[subset][i]; + } + + opt_results.m_low[subset] = subset_results3[subset].m_low_endpoint; + opt_results.m_high[subset] = subset_results3[subset].m_high_endpoint; + + opt_results.m_pbits[subset][0] = subset_results3[subset].m_pbits[0]; + opt_results.m_pbits[subset][1] = subset_results3[subset].m_pbits[1]; + } + } + } + } + + // Mode 5 + if ((!pComp_params->m_perceptual) && (pComp_params->m_opaque_settings.m_use_mode[5])) + { + uniform color_cell_compressor_params params5 = *pParams; + + for (uniform uint32_t rotation = 0; rotation < 4; rotation++) + { + if ((pComp_params->m_mode5_rotation_mask & (1 << rotation)) == 0) + continue; + + memcpy(params5.m_weights, pParams->m_weights, sizeof(params5.m_weights)); + if (rotation) + swapu(¶ms5.m_weights[rotation - 1], ¶ms5.m_weights[3]); + + color_quad_i rot_pixels[16]; + const varying color_quad_i *uniform pTrial_pixels = pPixels; + uint32_t trial_lo_a = 255, trial_hi_a = 255; + if (rotation) + { + trial_lo_a = 255; + trial_hi_a = 0; + + for (uniform uint32_t i = 0; i < 16; i++) + { + color_quad_i c = pPixels[i]; + swapi(&c.m_c[3], &c.m_c[rotation - 1]); + rot_pixels[i] = c; + + trial_lo_a = minimumu(trial_lo_a, c.m_c[3]); + trial_hi_a = maximumu(trial_hi_a, c.m_c[3]); + } + + pTrial_pixels = rot_pixels; + } + + bc7_optimization_results trial_opt_results5; + + uint64_t trial_mode5_err = 0; + + handle_alpha_block_mode5(pTrial_pixels, pComp_params, ¶ms5, trial_lo_a, trial_hi_a, &trial_opt_results5, &trial_mode5_err); + + if (trial_mode5_err < best_err) + { + best_err = trial_mode5_err; + + opt_results = trial_opt_results5; + opt_results.m_rotation = rotation; + } + } // rotation + } + + // Mode 2 + if (pComp_params->m_opaque_settings.m_use_mode[2]) + { + solution solutions3[BC7E_MAX_PARTITIONS2]; + uniform uint32_t num_solutions3 = 0; + if (pComp_params->m_opaque_settings.m_max_mode2_partitions_to_try == 1) + { + solutions3[0].m_index = estimate_partition(2, pPixels, pComp_params); + num_solutions3 = 1; + } + else + { + num_solutions3 = estimate_partition_list(2, pPixels, pComp_params, solutions3, pComp_params->m_opaque_settings.m_max_mode2_partitions_to_try); + } + + pParams->m_pSelector_weights = g_bc7_weights2; + pParams->m_pSelector_weightsx = (const vec4F *)&g_bc7_weights2x[0]; + pParams->m_num_selector_weights = 4; + + pParams->m_comp_bits = 5; + pParams->m_has_pbits = false; + pParams->m_endpoints_share_pbit = false; + + pParams->m_perceptual = pComp_params->m_perceptual; + + for (uniform uint32_t solution_index = 0; solution_index < num_solutions3; solution_index++) + { + const int32_t best_partition2 = solutions3[solution_index].m_index; + + uint32_t subset_total_colors2[3]; + subset_total_colors2[0] = 0; + subset_total_colors2[1] = 0; + subset_total_colors2[2] = 0; + + int subset_pixel_index2[3][16]; + + const int *pPartition = &g_bc7_partition3[best_partition2 * 16]; + + color_quad_i subset_colors[3][16]; + + for (uniform uint32_t idx = 0; idx < 16; idx++) + { +#pragma ignore warning(perf) + const uint32_t p = pPartition[idx]; + +#pragma ignore warning(perf) + subset_colors[p][subset_total_colors2[p]] = pPixels[idx]; + +#pragma ignore warning(perf) + subset_pixel_index2[p][subset_total_colors2[p]] = idx; + +#pragma ignore warning(perf) + subset_total_colors2[p]++; + } + + int subset_selectors2[3][16]; + color_cell_compressor_results subset_results2[3]; + + uint64_t mode2_err = 0; + for (uniform uint32_t subset = 0; subset < 3; subset++) + { + varying color_cell_compressor_results *uniform pResults = &subset_results2[subset]; + + pResults->m_pSelectors = &subset_selectors2[subset][0]; + pResults->m_pSelectors_temp = selectors_temp; + + uint64_t err = color_cell_compression(2, pParams, pResults, pComp_params, subset_total_colors2[subset], &subset_colors[subset][0], true); + assert(err == pResults->m_best_overall_err); + + mode2_err += err; + if (mode2_err > best_err) + break; + } // subset + + if (mode2_err < best_err) + { + best_err = mode2_err; + + opt_results.m_mode = 2; + opt_results.m_index_selector = 0; + opt_results.m_rotation = 0; + opt_results.m_partition = best_partition2; + + for (uniform uint32_t subset = 0; subset < 3; subset++) + { + for (uniform uint32_t i = 0; i < subset_total_colors2[subset]; i++) + { + const uint32_t pixel_index = subset_pixel_index2[subset][i]; + +#pragma ignore warning(perf) + opt_results.m_selectors[pixel_index] = subset_selectors2[subset][i]; + } + + opt_results.m_low[subset] = subset_results2[subset].m_low_endpoint; + opt_results.m_high[subset] = subset_results2[subset].m_high_endpoint; + } + } + } + } + + // Mode 4 + if ((!pComp_params->m_perceptual) && (pComp_params->m_opaque_settings.m_use_mode[4])) + { + uniform color_cell_compressor_params params4 = *pParams; + + for (uniform uint32_t rotation = 0; rotation < 4; rotation++) + { + if ((pComp_params->m_mode4_rotation_mask & (1 << rotation)) == 0) + continue; + + memcpy(params4.m_weights, pParams->m_weights, sizeof(params4.m_weights)); + if (rotation) + swapu(¶ms4.m_weights[rotation - 1], ¶ms4.m_weights[3]); + + color_quad_i rot_pixels[16]; + const varying color_quad_i *uniform pTrial_pixels = pPixels; + uint32_t trial_lo_a = 255, trial_hi_a = 255; + if (rotation) + { + trial_lo_a = 255; + trial_hi_a = 0; + + for (uniform uint32_t i = 0; i < 16; i++) + { + color_quad_i c = pPixels[i]; + swapi(&c.m_c[3], &c.m_c[rotation - 1]); + rot_pixels[i] = c; + + trial_lo_a = minimumu(trial_lo_a, c.m_c[3]); + trial_hi_a = maximumu(trial_hi_a, c.m_c[3]); + } + + pTrial_pixels = rot_pixels; + } + + bc7_optimization_results trial_opt_results4; + + uint64_t trial_mode4_err = best_err; + + handle_alpha_block_mode4(pTrial_pixels, pComp_params, ¶ms4, trial_lo_a, trial_hi_a, &trial_opt_results4, &trial_mode4_err); + + if (trial_mode4_err < best_err) + { + best_err = trial_mode4_err; + + opt_results.m_mode = 4; + opt_results.m_index_selector = trial_opt_results4.m_index_selector; + opt_results.m_rotation = rotation; + opt_results.m_partition = 0; + + opt_results.m_low[0] = trial_opt_results4.m_low[0]; + opt_results.m_high[0] = trial_opt_results4.m_high[0]; + + for (uniform uint32_t i = 0; i < 16; i++) + opt_results.m_selectors[i] = trial_opt_results4.m_selectors[i]; + + for (uniform uint32_t i = 0; i < 16; i++) + opt_results.m_alpha_selectors[i] = trial_opt_results4.m_alpha_selectors[i]; + } + } // rotation + } + + encode_bc7_block(pBlock, &opt_results); +} + +// all solid color blocks can be 100% perfectly encoded with just mode 5 +static void handle_block_solid(void *varying pBlock, uint32_t cr, uint32_t cg, uint32_t cb, uint32_t ca) +{ + #pragma ignore warning(perf) + uint32_t er = g_bc7_mode_5_optimal_endpoints[cr]; + #pragma ignore warning(perf) + uint32_t eg = g_bc7_mode_5_optimal_endpoints[cg]; + #pragma ignore warning(perf) + uint32_t eb = g_bc7_mode_5_optimal_endpoints[cb]; + color_quad_i lp, hp; + color_quad_i_set(&lp, er & 0xFF, eg & 0xFF, eb & 0xFF, ca); + color_quad_i_set(&hp, er >> 8, eg >> 8, eb >> 8, ca); + + bc7_optimization_results opt; + opt.m_mode = 5; + opt.m_low[0] = lp; + opt.m_high[0] = hp; + opt.m_pbits[0][0] = 0; + opt.m_pbits[0][1] = 0; + opt.m_index_selector = 0; + opt.m_rotation = 0; + opt.m_partition = 0; + for (uniform int i = 0; i < 16; ++i) + opt.m_selectors[i] = BC7E_MODE_5_OPTIMAL_INDEX; + for (uniform int i = 0; i < 16; ++i) + opt.m_alpha_selectors[i] = 0; + encode_bc7_block(pBlock, &opt); +} + +static void handle_opaque_block_mode6(void *varying pBlock, const varying color_quad_i *uniform pPixels, const uniform bc7e_compress_block_params *uniform pComp_params, uniform color_cell_compressor_params *uniform pParams) +{ + int selectors_temp[16]; + + bc7_optimization_results opt_results; + + uint64_t best_err = UINT64_MAX; + + // Mode 6 + pParams->m_pSelector_weights = g_bc7_weights4; + pParams->m_pSelector_weightsx = (const vec4F * uniform)&g_bc7_weights4x[0]; + pParams->m_num_selector_weights = 16; + + pParams->m_comp_bits = 7; + pParams->m_has_pbits = true; + pParams->m_endpoints_share_pbit = false; + + pParams->m_perceptual = pComp_params->m_perceptual; + + color_cell_compressor_results results6; + results6.m_pSelectors = opt_results.m_selectors; + results6.m_pSelectors_temp = selectors_temp; + + best_err = color_cell_compression(6, pParams, &results6, pComp_params, 16, pPixels, true); + + opt_results.m_mode = 6; + opt_results.m_index_selector = 0; + opt_results.m_rotation = 0; + opt_results.m_partition = 0; + + opt_results.m_low[0] = results6.m_low_endpoint; + opt_results.m_high[0] = results6.m_high_endpoint; + + opt_results.m_pbits[0][0] = results6.m_pbits[0]; + opt_results.m_pbits[0][1] = results6.m_pbits[1]; + + encode_bc7_block_mode6(pBlock, &opt_results); +} + +export void bc7e_compress_blocks(uniform uint32_t num_blocks, uniform uint64_t * uniform pBlocks, const uniform uint32_t * uniform pPixelsRGBA, const uniform bc7e_compress_block_params * uniform pComp_params) +{ + if (!g_codec_initialized) + { + // Caller has forgotten to initialize the codec, or another thread is still working on that. We can't continue. + // What do we do here? + assert(0); + + memset(pBlocks, 0, num_blocks * 16); + return; + } + + uniform color_cell_compressor_params params; + color_cell_compressor_params_clear(¶ms); + + memcpy(params.m_weights, pComp_params->m_weights, sizeof(params.m_weights)); + + assert(pComp_params->m_mode4_rotation_mask != 0); + assert(pComp_params->m_mode4_index_mask != 0); + assert(pComp_params->m_mode5_rotation_mask != 0); + assert(pComp_params->m_uber1_mask != 0); + + foreach (block_index = 0 ... num_blocks) + { + const uniform color_quad_u8 *varying pSrcPixels = &((const uniform color_quad_u8 *)(pPixelsRGBA))[block_index * 16]; + + varying color_quad_i temp_pixels[16]; + + int lo_r = 255, hi_r = 0; + int lo_g = 255, hi_g = 0; + int lo_b = 255, hi_b = 0; + float lo_a = 255, hi_a = 0; + + for (uniform uint32_t i = 0; i < 16; i++) + { +#pragma ignore warning(perf) + color_quad_u8 c = pSrcPixels[i]; + + int r = c.m_c[0]; + int g = c.m_c[1]; + int b = c.m_c[2]; + int a = c.m_c[3]; + + temp_pixels[i].m_c[0] = r; + temp_pixels[i].m_c[1] = g; + temp_pixels[i].m_c[2] = b; + temp_pixels[i].m_c[3] = a; + + lo_r = min(lo_r, r); hi_r = max(hi_r, r); + lo_g = min(lo_g, g); hi_g = max(hi_g, g); + lo_b = min(lo_b, b); hi_b = max(hi_b, b); + + float fa = a; + + lo_a = min(lo_a, fa); + hi_a = max(hi_a, fa); + } + + bool all_same = lo_r==hi_r && lo_g==hi_g && lo_b==hi_b && lo_a==hi_a; + + uniform uint64_t *varying pBlock = &pBlocks[block_index * 2]; + + cif (all_same) + handle_block_solid(pBlock, lo_r, lo_g, lo_b, lo_a); + else + { + const bool has_alpha = (lo_a < 255); + // TODO: alpha block mode 6 only + cif (has_alpha) + handle_alpha_block(pBlock, temp_pixels, pComp_params, ¶ms, (int)lo_a, (int)hi_a); + else + { + if (pComp_params->m_mode6_only) + handle_opaque_block_mode6(pBlock, temp_pixels, pComp_params, ¶ms); + else + handle_opaque_block(pBlock, temp_pixels, pComp_params, ¶ms); + } + } + } +} + +export void bc7e_compress_block_params_init(bc7e_compress_block_params * uniform p, uniform bool perceptual) +{ + p->m_max_partitions_mode[0] = BC7E_MAX_PARTITIONS0; + p->m_max_partitions_mode[1] = BC7E_MAX_PARTITIONS1; + p->m_max_partitions_mode[2] = BC7E_MAX_PARTITIONS2; + p->m_max_partitions_mode[3] = BC7E_MAX_PARTITIONS3; + p->m_max_partitions_mode[4] = 0; + p->m_max_partitions_mode[5] = 0; + p->m_max_partitions_mode[6] = 0; + p->m_max_partitions_mode[7] = BC7E_MAX_PARTITIONS7; + + p->m_perceptual = perceptual; + if (perceptual) + { + p->m_weights[0] = 128; + p->m_weights[1] = 64; + p->m_weights[2] = 16; + p->m_weights[3] = 256; + } + else + { + p->m_weights[0] = 1; + p->m_weights[1] = 1; + p->m_weights[2] = 1; + p->m_weights[3] = 1; + } + + p->m_pbit_search = false; + p->m_mode6_only = false; + p->m_refinement_passes = 1; + p->m_mode4_rotation_mask = 0xF; + p->m_mode4_index_mask = 3; + p->m_mode5_rotation_mask = 0xF; + p->m_uber1_mask = 7; + for (uniform uint32_t i = 0; i < 7; i++) + p->m_opaque_settings.m_use_mode[i] = true; + p->m_opaque_settings.m_max_mode13_partitions_to_try = 1; + p->m_opaque_settings.m_max_mode0_partitions_to_try = 1; + p->m_opaque_settings.m_max_mode2_partitions_to_try = 1; + p->m_alpha_settings.m_use_mode4 = true; + p->m_alpha_settings.m_use_mode5 = true; + p->m_alpha_settings.m_use_mode6 = true; + p->m_alpha_settings.m_use_mode7 = true; + p->m_alpha_settings.m_use_mode4_rotation = true; + p->m_alpha_settings.m_use_mode5_rotation = true; + p->m_alpha_settings.m_max_mode7_partitions_to_try = 1; + p->m_alpha_settings.m_mode67_error_weight_mul[0] = 1; + p->m_alpha_settings.m_mode67_error_weight_mul[1] = 1; + p->m_alpha_settings.m_mode67_error_weight_mul[2] = 1; + p->m_alpha_settings.m_mode67_error_weight_mul[3] = 1; + p->m_uber_level = 0; +} + +export void bc7e_compress_block_params_init_slowest(bc7e_compress_block_params * uniform p, uniform bool perceptual) +{ + bc7e_compress_block_params_init(p, perceptual); + + p->m_opaque_settings.m_max_mode13_partitions_to_try = 4; + p->m_opaque_settings.m_max_mode0_partitions_to_try = 4; + p->m_opaque_settings.m_max_mode2_partitions_to_try = 4; + p->m_alpha_settings.m_max_mode7_partitions_to_try = 4; + + p->m_pbit_search = true; + p->m_uber_level = 4; +} + +export void bc7e_compress_block_params_init_veryslow(bc7e_compress_block_params * uniform p, uniform bool perceptual) +{ + bc7e_compress_block_params_init(p, perceptual); + + p->m_opaque_settings.m_max_mode13_partitions_to_try = 2; + p->m_opaque_settings.m_max_mode0_partitions_to_try = 2; + p->m_opaque_settings.m_max_mode2_partitions_to_try = 2; + p->m_alpha_settings.m_max_mode7_partitions_to_try = 2; + + p->m_pbit_search = true; + p->m_uber_level = 2; +} + +export void bc7e_compress_block_params_init_slow(bc7e_compress_block_params * uniform p, uniform bool perceptual) +{ + bc7e_compress_block_params_init(p, perceptual); + + p->m_alpha_settings.m_max_mode7_partitions_to_try = 2; + + p->m_pbit_search = true; + p->m_uber_level = 0; +} + +export void bc7e_compress_block_params_init_basic(bc7e_compress_block_params * uniform p, uniform bool perceptual) +{ + bc7e_compress_block_params_init(p, perceptual); + + if (perceptual) + { + p->m_opaque_settings.m_use_mode[0] = false; + p->m_opaque_settings.m_use_mode[2] = false; + p->m_opaque_settings.m_use_mode[3] = false; + p->m_opaque_settings.m_use_mode[4] = false; + p->m_opaque_settings.m_use_mode[5] = false; + + p->m_pbit_search = false; + p->m_uber_level = 1; + } + else + { + p->m_max_partitions_mode[1] = 32; + p->m_max_partitions_mode[2] = 32; + p->m_max_partitions_mode[3] = 32; + p->m_max_partitions_mode[7] = 32; + + p->m_opaque_settings.m_use_mode[2] = false; + + p->m_pbit_search = false; + p->m_uber_level = 1; + } +} + +export void bc7e_compress_block_params_init_fast(bc7e_compress_block_params * uniform p, uniform bool perceptual) +{ + bc7e_compress_block_params_init(p, perceptual); + + if (perceptual) + { + p->m_opaque_settings.m_use_mode[0] = false; + p->m_opaque_settings.m_use_mode[2] = false; + p->m_opaque_settings.m_use_mode[3] = false; + p->m_opaque_settings.m_use_mode[4] = false; + p->m_opaque_settings.m_use_mode[5] = false; + + p->m_alpha_settings.m_use_mode5 = false; + + p->m_opaque_settings.m_max_mode13_partitions_to_try = 1; + + p->m_pbit_search = false; + p->m_uber_level = 0; + } + else + { + p->m_opaque_settings.m_use_mode[0] = false; + p->m_opaque_settings.m_use_mode[2] = false; + p->m_opaque_settings.m_use_mode[4] = false; + p->m_opaque_settings.m_use_mode[5] = false; + + p->m_alpha_settings.m_use_mode5 = false; + + p->m_opaque_settings.m_max_mode13_partitions_to_try = 2; + + p->m_pbit_search = false; + p->m_uber_level = 0; + } +} + +export void bc7e_compress_block_params_init_veryfast(bc7e_compress_block_params * uniform p, uniform bool perceptual) +{ + bc7e_compress_block_params_init(p, perceptual); + + if (perceptual) + { + p->m_opaque_settings.m_use_mode[0] = false; + p->m_opaque_settings.m_use_mode[2] = false; + p->m_opaque_settings.m_use_mode[3] = false; + p->m_opaque_settings.m_use_mode[4] = false; + p->m_opaque_settings.m_use_mode[5] = false; + + p->m_alpha_settings.m_use_mode5 = false; + + p->m_pbit_search = false; + p->m_uber_level = 0; + } + else + { + p->m_opaque_settings.m_use_mode[2] = false; + p->m_opaque_settings.m_use_mode[4] = false; + p->m_opaque_settings.m_use_mode[5] = false; + + p->m_alpha_settings.m_use_mode5 = false; + + p->m_pbit_search = false; + p->m_uber_level = 0; + } +} + +export void bc7e_compress_block_params_init_ultrafast(bc7e_compress_block_params * uniform p, uniform bool perceptual) +{ + bc7e_compress_block_params_init(p, perceptual); + + p->m_mode6_only = true; + + p->m_alpha_settings.m_use_mode4 = true; + p->m_alpha_settings.m_use_mode5 = true; + p->m_alpha_settings.m_use_mode7 = false; + + p->m_mode4_rotation_mask = 1+4; + p->m_mode4_index_mask = 3; + p->m_mode5_rotation_mask = 1; + + p->m_pbit_search = false; + p->m_uber_level = 0; +} diff --git a/external/bc7enc_rdo/bc7enc.cpp b/external/bc7enc_rdo/bc7enc.cpp new file mode 100644 index 0000000000..2ff358a457 --- /dev/null +++ b/external/bc7enc_rdo/bc7enc.cpp @@ -0,0 +1,2580 @@ +// File: bc7enc.c - Richard Geldreich, Jr. 3/31/2020 - MIT license or public domain (see end of file) +// Currently supports modes 1, 6 for RGB blocks, and modes 5, 6, 7 for RGBA blocks. +#include "bc7enc.h" +#include +#include +#include +#include +#include + +// Helpers +static inline int32_t clampi(int32_t value, int32_t low, int32_t high) { if (value < low) value = low; else if (value > high) value = high; return value; } +static inline float clampf(float value, float low, float high) { if (value < low) value = low; else if (value > high) value = high; return value; } +static inline float saturate(float value) { return clampf(value, 0, 1.0f); } +static inline uint8_t minimumub(uint8_t a, uint8_t b) { return (a < b) ? a : b; } +static inline int32_t minimumi(int32_t a, int32_t b) { return (a < b) ? a : b; } +static inline uint32_t minimumu(uint32_t a, uint32_t b) { return (a < b) ? a : b; } +static inline float minimumf(float a, float b) { return (a < b) ? a : b; } +static inline uint8_t maximumub(uint8_t a, uint8_t b) { return (a > b) ? a : b; } +static inline uint32_t maximumu(uint32_t a, uint32_t b) { return (a > b) ? a : b; } +static inline int32_t maximumi(int32_t a, int32_t b) { return (a > b) ? a : b; } +static inline float maximumf(float a, float b) { return (a > b) ? a : b; } +static inline int squarei(int i) { return i * i; } +static inline float squaref(float i) { return i * i; } +template inline T0 lerp(T0 a, T0 b, T1 c) { return a + (b - a) * c; } + +static inline int32_t iabs32(int32_t v) { uint32_t msk = v >> 31; return (v ^ msk) - msk; } +static inline void swapub(uint8_t* a, uint8_t* b) { uint8_t t = *a; *a = *b; *b = t; } +static inline void swapu(uint32_t* a, uint32_t* b) { uint32_t t = *a; *a = *b; *b = t; } +static inline void swapf(float* a, float* b) { float t = *a; *a = *b; *b = t; } + +struct vec4F { float m_c[4]; }; + +static inline color_rgba *color_quad_u8_set_clamped(color_rgba *pRes, int32_t r, int32_t g, int32_t b, int32_t a) { pRes->m_c[0] = (uint8_t)clampi(r, 0, 255); pRes->m_c[1] = (uint8_t)clampi(g, 0, 255); pRes->m_c[2] = (uint8_t)clampi(b, 0, 255); pRes->m_c[3] = (uint8_t)clampi(a, 0, 255); return pRes; } +static inline color_rgba *color_quad_u8_set(color_rgba *pRes, int32_t r, int32_t g, int32_t b, int32_t a) { assert((uint32_t)(r | g | b | a) <= 255); pRes->m_c[0] = (uint8_t)r; pRes->m_c[1] = (uint8_t)g; pRes->m_c[2] = (uint8_t)b; pRes->m_c[3] = (uint8_t)a; return pRes; } +static inline bool color_quad_u8_notequals(const color_rgba *pLHS, const color_rgba *pRHS) { return (pLHS->m_c[0] != pRHS->m_c[0]) || (pLHS->m_c[1] != pRHS->m_c[1]) || (pLHS->m_c[2] != pRHS->m_c[2]) || (pLHS->m_c[3] != pRHS->m_c[3]); } +static inline vec4F *vec4F_set_scalar(vec4F *pV, float x) { pV->m_c[0] = x; pV->m_c[1] = x; pV->m_c[2] = x; pV->m_c[3] = x; return pV; } +static inline vec4F *vec4F_set(vec4F *pV, float x, float y, float z, float w) { pV->m_c[0] = x; pV->m_c[1] = y; pV->m_c[2] = z; pV->m_c[3] = w; return pV; } +static inline vec4F *vec4F_saturate_in_place(vec4F *pV) { pV->m_c[0] = saturate(pV->m_c[0]); pV->m_c[1] = saturate(pV->m_c[1]); pV->m_c[2] = saturate(pV->m_c[2]); pV->m_c[3] = saturate(pV->m_c[3]); return pV; } +static inline vec4F vec4F_saturate(const vec4F *pV) { vec4F res; res.m_c[0] = saturate(pV->m_c[0]); res.m_c[1] = saturate(pV->m_c[1]); res.m_c[2] = saturate(pV->m_c[2]); res.m_c[3] = saturate(pV->m_c[3]); return res; } +static inline vec4F vec4F_from_color(const color_rgba *pC) { vec4F res; vec4F_set(&res, pC->m_c[0], pC->m_c[1], pC->m_c[2], pC->m_c[3]); return res; } +static inline vec4F vec4F_add(const vec4F *pLHS, const vec4F *pRHS) { vec4F res; vec4F_set(&res, pLHS->m_c[0] + pRHS->m_c[0], pLHS->m_c[1] + pRHS->m_c[1], pLHS->m_c[2] + pRHS->m_c[2], pLHS->m_c[3] + pRHS->m_c[3]); return res; } +static inline vec4F vec4F_sub(const vec4F *pLHS, const vec4F *pRHS) { vec4F res; vec4F_set(&res, pLHS->m_c[0] - pRHS->m_c[0], pLHS->m_c[1] - pRHS->m_c[1], pLHS->m_c[2] - pRHS->m_c[2], pLHS->m_c[3] - pRHS->m_c[3]); return res; } +static inline float vec4F_dot(const vec4F *pLHS, const vec4F *pRHS) { return pLHS->m_c[0] * pRHS->m_c[0] + pLHS->m_c[1] * pRHS->m_c[1] + pLHS->m_c[2] * pRHS->m_c[2] + pLHS->m_c[3] * pRHS->m_c[3]; } +static inline vec4F vec4F_mul(const vec4F *pLHS, float s) { vec4F res; vec4F_set(&res, pLHS->m_c[0] * s, pLHS->m_c[1] * s, pLHS->m_c[2] * s, pLHS->m_c[3] * s); return res; } +static inline vec4F *vec4F_normalize_in_place(vec4F *pV) { float s = pV->m_c[0] * pV->m_c[0] + pV->m_c[1] * pV->m_c[1] + pV->m_c[2] * pV->m_c[2] + pV->m_c[3] * pV->m_c[3]; if (s != 0.0f) { s = 1.0f / sqrtf(s); pV->m_c[0] *= s; pV->m_c[1] *= s; pV->m_c[2] *= s; pV->m_c[3] *= s; } return pV; } + +// Various BC7 tables +static const uint32_t g_bc7_weights2[4] = { 0, 21, 43, 64 }; +static const uint32_t g_bc7_weights3[8] = { 0, 9, 18, 27, 37, 46, 55, 64 }; +static const uint32_t g_bc7_weights4[16] = { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }; +// Precomputed weight constants used during least fit determination. For each entry in g_bc7_weights[]: w * w, (1.0f - w) * w, (1.0f - w) * (1.0f - w), w +static const float g_bc7_weights2x[4 * 4] = { 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.107666f, 0.220459f, 0.451416f, 0.328125f, 0.451416f, 0.220459f, 0.107666f, 0.671875f, 1.000000f, 0.000000f, 0.000000f, 1.000000f }; +static const float g_bc7_weights3x[8 * 4] = { 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.019775f, 0.120850f, 0.738525f, 0.140625f, 0.079102f, 0.202148f, 0.516602f, 0.281250f, 0.177979f, 0.243896f, 0.334229f, 0.421875f, 0.334229f, 0.243896f, 0.177979f, 0.578125f, 0.516602f, 0.202148f, + 0.079102f, 0.718750f, 0.738525f, 0.120850f, 0.019775f, 0.859375f, 1.000000f, 0.000000f, 0.000000f, 1.000000f }; +static const float g_bc7_weights4x[16 * 4] = { 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.003906f, 0.058594f, 0.878906f, 0.062500f, 0.019775f, 0.120850f, 0.738525f, 0.140625f, 0.041260f, 0.161865f, 0.635010f, 0.203125f, 0.070557f, 0.195068f, 0.539307f, 0.265625f, 0.107666f, 0.220459f, + 0.451416f, 0.328125f, 0.165039f, 0.241211f, 0.352539f, 0.406250f, 0.219727f, 0.249023f, 0.282227f, 0.468750f, 0.282227f, 0.249023f, 0.219727f, 0.531250f, 0.352539f, 0.241211f, 0.165039f, 0.593750f, 0.451416f, 0.220459f, 0.107666f, 0.671875f, 0.539307f, 0.195068f, 0.070557f, 0.734375f, + 0.635010f, 0.161865f, 0.041260f, 0.796875f, 0.738525f, 0.120850f, 0.019775f, 0.859375f, 0.878906f, 0.058594f, 0.003906f, 0.937500f, 1.000000f, 0.000000f, 0.000000f, 1.000000f }; + +static const uint8_t g_bc7_partition1[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; +static const uint8_t g_bc7_partition2[64 * 16] = +{ + 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1, 0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1, 0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1, 0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1, 0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1, 0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1, 0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, + 0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1, 0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0, 0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0, 0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0, 0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1, + 0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0, 0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0, 0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0, 0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0, 0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0, 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0, 0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0, 0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0, + 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1, 0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0, 0,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0, 0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0, 0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0, 0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1, 0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1, + 0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0, 0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0, 0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0, 0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0, 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0, 0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1, 0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1, 0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0, + 0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0, 0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0, 0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0, 0,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1, 0,1,1,0,0,0,1,1,1,0,0,1,1,1,0,0, 0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0, + 0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,1, 0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1, 0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1, 0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1, 0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1, 0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0, 0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0, 0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1 +}; + +static const uint8_t g_bc7_partition3[64 * 16] = +{ + 0,0,1,1,0,0,1,1,0,2,2,1,2,2,2,2, 0,0,0,1,0,0,1,1,2,2,1,1,2,2,2,1, 0,0,0,0,2,0,0,1,2,2,1,1,2,2,1,1, 0,2,2,2,0,0,2,2,0,0,1,1,0,1,1,1, 0,0,0,0,0,0,0,0,1,1,2,2,1,1,2,2, 0,0,1,1,0,0,1,1,0,0,2,2,0,0,2,2, 0,0,2,2,0,0,2,2,1,1,1,1,1,1,1,1, 0,0,1,1,0,0,1,1,2,2,1,1,2,2,1,1, + 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2, 0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2, 0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2, 0,0,1,2,0,0,1,2,0,0,1,2,0,0,1,2, 0,1,1,2,0,1,1,2,0,1,1,2,0,1,1,2, 0,1,2,2,0,1,2,2,0,1,2,2,0,1,2,2, 0,0,1,1,0,1,1,2,1,1,2,2,1,2,2,2, 0,0,1,1,2,0,0,1,2,2,0,0,2,2,2,0, + 0,0,0,1,0,0,1,1,0,1,1,2,1,1,2,2, 0,1,1,1,0,0,1,1,2,0,0,1,2,2,0,0, 0,0,0,0,1,1,2,2,1,1,2,2,1,1,2,2, 0,0,2,2,0,0,2,2,0,0,2,2,1,1,1,1, 0,1,1,1,0,1,1,1,0,2,2,2,0,2,2,2, 0,0,0,1,0,0,0,1,2,2,2,1,2,2,2,1, 0,0,0,0,0,0,1,1,0,1,2,2,0,1,2,2, 0,0,0,0,1,1,0,0,2,2,1,0,2,2,1,0, + 0,1,2,2,0,1,2,2,0,0,1,1,0,0,0,0, 0,0,1,2,0,0,1,2,1,1,2,2,2,2,2,2, 0,1,1,0,1,2,2,1,1,2,2,1,0,1,1,0, 0,0,0,0,0,1,1,0,1,2,2,1,1,2,2,1, 0,0,2,2,1,1,0,2,1,1,0,2,0,0,2,2, 0,1,1,0,0,1,1,0,2,0,0,2,2,2,2,2, 0,0,1,1,0,1,2,2,0,1,2,2,0,0,1,1, 0,0,0,0,2,0,0,0,2,2,1,1,2,2,2,1, + 0,0,0,0,0,0,0,2,1,1,2,2,1,2,2,2, 0,2,2,2,0,0,2,2,0,0,1,2,0,0,1,1, 0,0,1,1,0,0,1,2,0,0,2,2,0,2,2,2, 0,1,2,0,0,1,2,0,0,1,2,0,0,1,2,0, 0,0,0,0,1,1,1,1,2,2,2,2,0,0,0,0, 0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0, 0,1,2,0,2,0,1,2,1,2,0,1,0,1,2,0, 0,0,1,1,2,2,0,0,1,1,2,2,0,0,1,1, + 0,0,1,1,1,1,2,2,2,2,0,0,0,0,1,1, 0,1,0,1,0,1,0,1,2,2,2,2,2,2,2,2, 0,0,0,0,0,0,0,0,2,1,2,1,2,1,2,1, 0,0,2,2,1,1,2,2,0,0,2,2,1,1,2,2, 0,0,2,2,0,0,1,1,0,0,2,2,0,0,1,1, 0,2,2,0,1,2,2,1,0,2,2,0,1,2,2,1, 0,1,0,1,2,2,2,2,2,2,2,2,0,1,0,1, 0,0,0,0,2,1,2,1,2,1,2,1,2,1,2,1, + 0,1,0,1,0,1,0,1,0,1,0,1,2,2,2,2, 0,2,2,2,0,1,1,1,0,2,2,2,0,1,1,1, 0,0,0,2,1,1,1,2,0,0,0,2,1,1,1,2, 0,0,0,0,2,1,1,2,2,1,1,2,2,1,1,2, 0,2,2,2,0,1,1,1,0,1,1,1,0,2,2,2, 0,0,0,2,1,1,1,2,1,1,1,2,0,0,0,2, 0,1,1,0,0,1,1,0,0,1,1,0,2,2,2,2, 0,0,0,0,0,0,0,0,2,1,1,2,2,1,1,2, + 0,1,1,0,0,1,1,0,2,2,2,2,2,2,2,2, 0,0,2,2,0,0,1,1,0,0,1,1,0,0,2,2, 0,0,2,2,1,1,2,2,1,1,2,2,0,0,2,2, 0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,2, 0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,1, 0,2,2,2,1,2,2,2,0,2,2,2,1,2,2,2, 0,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2, 0,1,1,1,2,0,1,1,2,2,0,1,2,2,2,0, +}; + +static const uint8_t g_bc7_table_anchor_index_third_subset_1[64] = +{ + 3, 3,15,15, 8, 3,15,15, 8, 8, 6, 6, 6, 5, 3, 3, 3, 3, 8,15, 3, 3, 6,10, 5, 8, 8, 6, 8, 5,15,15, 8,15, 3, 5, 6,10, 8,15, 15, 3,15, 5,15,15,15,15, 3,15, 5, 5, 5, 8, 5,10, 5,10, 8,13,15,12, 3, 3 +}; + +static const uint8_t g_bc7_table_anchor_index_third_subset_2[64] = +{ + 15, 8, 8, 3,15,15, 3, 8, 15,15,15,15,15,15,15, 8, 15, 8,15, 3,15, 8,15, 8, 3,15, 6,10,15,15,10, 8, 15, 3,15,10,10, 8, 9,10, 6,15, 8,15, 3, 6, 6, 8, 15, 3,15,15,15,15,15,15, 15,15,15,15, 3,15,15, 8 +}; + +static const uint8_t g_bc7_table_anchor_index_second_subset[64] = { 15,15,15,15,15,15,15,15, 15,15,15,15,15,15,15,15, 15, 2, 8, 2, 2, 8, 8,15, 2, 8, 2, 2, 8, 8, 2, 2, 15,15, 6, 8, 2, 8,15,15, 2, 8, 2, 2, 2,15,15, 6, 6, 2, 6, 8,15,15, 2, 2, 15,15,15,15,15, 2, 2,15 }; +static const uint8_t g_bc7_num_subsets[8] = { 3, 2, 3, 2, 1, 1, 1, 2 }; +static const uint8_t g_bc7_partition_bits[8] = { 4, 6, 6, 6, 0, 0, 0, 6 }; +static const uint8_t g_bc7_color_index_bitcount[8] = { 3, 3, 2, 2, 2, 2, 4, 2 }; +static int get_bc7_color_index_size(int mode, int index_selection_bit) { return g_bc7_color_index_bitcount[mode] + index_selection_bit; } +static uint8_t g_bc7_alpha_index_bitcount[8] = { 0, 0, 0, 0, 3, 2, 4, 2 }; +static int get_bc7_alpha_index_size(int mode, int index_selection_bit) { return g_bc7_alpha_index_bitcount[mode] - index_selection_bit; } +static const uint8_t g_bc7_mode_has_p_bits[8] = { 1, 1, 0, 1, 0, 0, 1, 1 }; +static const uint8_t g_bc7_mode_has_shared_p_bits[8] = { 0, 1, 0, 0, 0, 0, 0, 0 }; +static const uint8_t g_bc7_color_precision_table[8] = { 4, 6, 5, 7, 5, 7, 7, 5 }; +static const int8_t g_bc7_alpha_precision_table[8] = { 0, 0, 0, 0, 6, 8, 7, 5 }; +static bool get_bc7_mode_has_seperate_alpha_selectors(int mode) { return (mode == 4) || (mode == 5); } + +typedef struct { uint16_t m_error; uint8_t m_lo; uint8_t m_hi; } endpoint_err; + +static endpoint_err g_bc7_mode_1_optimal_endpoints[256][2]; // [c][pbit] +static const uint32_t BC7ENC_MODE_1_OPTIMAL_INDEX = 2; + +static endpoint_err g_bc7_mode_7_optimal_endpoints[256][2][2]; // [c][pbit][hp][lp] +const uint32_t BC7E_MODE_7_OPTIMAL_INDEX = 1; + +static float g_mode1_rgba_midpoints[64][2]; +static float g_mode5_rgba_midpoints[128]; +static float g_mode7_rgba_midpoints[32][2]; + +static uint8_t g_mode6_reduced_quant[2048][2]; + +static bool g_initialized; + +// Initialize the lookup table used for optimal single color compression in mode 1/7. Must be called before encoding. +void bc7enc_compress_block_init() +{ + if (g_initialized) + return; + + // Mode 7 endpoint midpoints + for (uint32_t p = 0; p < 2; p++) + { + for (uint32_t i = 0; i < 32; i++) + { + uint32_t vl = ((i << 1) | p) << 2; + vl |= (vl >> 6); + float lo = vl / 255.0f; + + uint32_t vh = ((minimumi(31, (i + 1)) << 1) | p) << 2; + vh |= (vh >> 6); + float hi = vh / 255.0f; + + //g_mode7_quant_values[i][p] = lo; + if (i == 31) + g_mode7_rgba_midpoints[i][p] = 1.0f; + else + g_mode7_rgba_midpoints[i][p] = (lo + hi) / 2.0f; + } + } + + // Mode 1 endpoint midpoints + for (uint32_t p = 0; p < 2; p++) + { + for (uint32_t i = 0; i < 64; i++) + { + uint32_t vl = ((i << 1) | p) << 1; + vl |= (vl >> 7); + float lo = vl / 255.0f; + + uint32_t vh = ((minimumi(63, (i + 1)) << 1) | p) << 1; + vh |= (vh >> 7); + float hi = vh / 255.0f; + + //g_mode1_quant_values[i][p] = lo; + if (i == 63) + g_mode1_rgba_midpoints[i][p] = 1.0f; + else + g_mode1_rgba_midpoints[i][p] = (lo + hi) / 2.0f; + } + } + + // Mode 5 endpoint midpoints + for (uint32_t i = 0; i < 128; i++) + { + uint32_t vl = (i << 1); + vl |= (vl >> 7); + float lo = vl / 255.0f; + + uint32_t vh = minimumi(127, i + 1) << 1; + vh |= (vh >> 7); + float hi = vh / 255.0f; + + if (i == 127) + g_mode5_rgba_midpoints[i] = 1.0f; + else + g_mode5_rgba_midpoints[i] = (lo + hi) / 2.0f; + } + + for (uint32_t p = 0; p < 2; p++) + { + for (uint32_t i = 0; i < 2048; i++) + { + float f = i / 2047.0f; + + float best_err = 1e+9f; + int best_index = 0; + for (int j = 0; j < 64; j++) + { + int ik = (j * 127 + 31) / 63; + float k = ((ik << 1) + p) / 255.0f; + + float e = fabsf(k - f); + if (e < best_err) + { + best_err = e; + best_index = ik; + } + } + + g_mode6_reduced_quant[i][p] = (uint8_t)best_index; + } + } // p + + // Mode 1 + for (int c = 0; c < 256; c++) + { + for (uint32_t lp = 0; lp < 2; lp++) + { + endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + for (uint32_t l = 0; l < 64; l++) + { + uint32_t low = ((l << 1) | lp) << 1; + low |= (low >> 7); + for (uint32_t h = 0; h < 64; h++) + { + uint32_t high = ((h << 1) | lp) << 1; + high |= (high >> 7); + const int k = (low * (64 - g_bc7_weights3[BC7ENC_MODE_1_OPTIMAL_INDEX]) + high * g_bc7_weights3[BC7ENC_MODE_1_OPTIMAL_INDEX] + 32) >> 6; + const int err = (k - c) * (k - c); + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + g_bc7_mode_1_optimal_endpoints[c][lp] = best; + } // lp + } // c + + // Mode 7: 555.1 2-bit indices + for (int c = 0; c < 256; c++) + { + for (uint32_t hp = 0; hp < 2; hp++) + { + for (uint32_t lp = 0; lp < 2; lp++) + { + endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + best.m_lo = 0; + best.m_hi = 0; + + for (uint32_t l = 0; l < 32; l++) + { + uint32_t low = ((l << 1) | lp) << 2; + low |= (low >> 6); + + for (uint32_t h = 0; h < 32; h++) + { + uint32_t high = ((h << 1) | hp) << 2; + high |= (high >> 6); + + const int k = (low * (64 - g_bc7_weights2[BC7E_MODE_7_OPTIMAL_INDEX]) + high * g_bc7_weights2[BC7E_MODE_7_OPTIMAL_INDEX] + 32) >> 6; + + const int err = (k - c) * (k - c); + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_bc7_mode_7_optimal_endpoints[c][hp][lp] = best; + + } // hp + + } // lp + + } // c + + g_initialized = true; +} + +static void compute_least_squares_endpoints_rgba(uint32_t N, const uint8_t *pSelectors, const vec4F *pSelector_weights, vec4F *pXl, vec4F *pXh, const color_rgba *pColors) +{ + // Least squares using normal equations: http://www.cs.cornell.edu/~bindel/class/cs3220-s12/notes/lec10.pdf + // I did this in matrix form first, expanded out all the ops, then optimized it a bit. + float z00 = 0.0f, z01 = 0.0f, z10 = 0.0f, z11 = 0.0f; + float q00_r = 0.0f, q10_r = 0.0f, t_r = 0.0f; + float q00_g = 0.0f, q10_g = 0.0f, t_g = 0.0f; + float q00_b = 0.0f, q10_b = 0.0f, t_b = 0.0f; + float q00_a = 0.0f, q10_a = 0.0f, t_a = 0.0f; + for (uint32_t i = 0; i < N; i++) + { + const uint32_t sel = pSelectors[i]; + z00 += pSelector_weights[sel].m_c[0]; + z10 += pSelector_weights[sel].m_c[1]; + z11 += pSelector_weights[sel].m_c[2]; + float w = pSelector_weights[sel].m_c[3]; + q00_r += w * pColors[i].m_c[0]; t_r += pColors[i].m_c[0]; + q00_g += w * pColors[i].m_c[1]; t_g += pColors[i].m_c[1]; + q00_b += w * pColors[i].m_c[2]; t_b += pColors[i].m_c[2]; + q00_a += w * pColors[i].m_c[3]; t_a += pColors[i].m_c[3]; + } + + q10_r = t_r - q00_r; + q10_g = t_g - q00_g; + q10_b = t_b - q00_b; + q10_a = t_a - q00_a; + + z01 = z10; + + float det = z00 * z11 - z01 * z10; + if (det != 0.0f) + det = 1.0f / det; + + float iz00, iz01, iz10, iz11; + iz00 = z11 * det; + iz01 = -z01 * det; + iz10 = -z10 * det; + iz11 = z00 * det; + + pXl->m_c[0] = (float)(iz00 * q00_r + iz01 * q10_r); pXh->m_c[0] = (float)(iz10 * q00_r + iz11 * q10_r); + pXl->m_c[1] = (float)(iz00 * q00_g + iz01 * q10_g); pXh->m_c[1] = (float)(iz10 * q00_g + iz11 * q10_g); + pXl->m_c[2] = (float)(iz00 * q00_b + iz01 * q10_b); pXh->m_c[2] = (float)(iz10 * q00_b + iz11 * q10_b); + pXl->m_c[3] = (float)(iz00 * q00_a + iz01 * q10_a); pXh->m_c[3] = (float)(iz10 * q00_a + iz11 * q10_a); + + for (uint32_t c = 0; c < 4; c++) + { + if ((pXl->m_c[c] < 0.0f) || (pXh->m_c[c] > 255.0f)) + { + uint32_t lo_v = UINT32_MAX, hi_v = 0; + for (uint32_t i = 0; i < N; i++) + { + lo_v = minimumu(lo_v, pColors[i].m_c[c]); + hi_v = maximumu(hi_v, pColors[i].m_c[c]); + } + + if (lo_v == hi_v) + { + pXl->m_c[c] = (float)lo_v; + pXh->m_c[c] = (float)hi_v; + } + } + } +} + +static void compute_least_squares_endpoints_rgb(uint32_t N, const uint8_t *pSelectors, const vec4F *pSelector_weights, vec4F *pXl, vec4F *pXh, const color_rgba*pColors) +{ + float z00 = 0.0f, z01 = 0.0f, z10 = 0.0f, z11 = 0.0f; + float q00_r = 0.0f, q10_r = 0.0f, t_r = 0.0f; + float q00_g = 0.0f, q10_g = 0.0f, t_g = 0.0f; + float q00_b = 0.0f, q10_b = 0.0f, t_b = 0.0f; + for (uint32_t i = 0; i < N; i++) + { + const uint32_t sel = pSelectors[i]; + z00 += pSelector_weights[sel].m_c[0]; + z10 += pSelector_weights[sel].m_c[1]; + z11 += pSelector_weights[sel].m_c[2]; + float w = pSelector_weights[sel].m_c[3]; + q00_r += w * pColors[i].m_c[0]; t_r += pColors[i].m_c[0]; + q00_g += w * pColors[i].m_c[1]; t_g += pColors[i].m_c[1]; + q00_b += w * pColors[i].m_c[2]; t_b += pColors[i].m_c[2]; + } + + q10_r = t_r - q00_r; + q10_g = t_g - q00_g; + q10_b = t_b - q00_b; + + z01 = z10; + + float det = z00 * z11 - z01 * z10; + if (det != 0.0f) + det = 1.0f / det; + + float iz00, iz01, iz10, iz11; + iz00 = z11 * det; + iz01 = -z01 * det; + iz10 = -z10 * det; + iz11 = z00 * det; + + pXl->m_c[0] = (float)(iz00 * q00_r + iz01 * q10_r); pXh->m_c[0] = (float)(iz10 * q00_r + iz11 * q10_r); + pXl->m_c[1] = (float)(iz00 * q00_g + iz01 * q10_g); pXh->m_c[1] = (float)(iz10 * q00_g + iz11 * q10_g); + pXl->m_c[2] = (float)(iz00 * q00_b + iz01 * q10_b); pXh->m_c[2] = (float)(iz10 * q00_b + iz11 * q10_b); + pXl->m_c[3] = 255.0f; pXh->m_c[3] = 255.0f; + + for (uint32_t c = 0; c < 3; c++) + { + if ((pXl->m_c[c] < 0.0f) || (pXh->m_c[c] > 255.0f)) + { + uint32_t lo_v = UINT32_MAX, hi_v = 0; + for (uint32_t i = 0; i < N; i++) + { + lo_v = minimumu(lo_v, pColors[i].m_c[c]); + hi_v = maximumu(hi_v, pColors[i].m_c[c]); + } + + if (lo_v == hi_v) + { + pXl->m_c[c] = (float)lo_v; + pXh->m_c[c] = (float)hi_v; + } + } + } +} + +static void compute_least_squares_endpoints_a(uint32_t N, const uint8_t* pSelectors, const vec4F* pSelector_weights, float* pXl, float* pXh, const color_rgba *pColors) +{ + // Least squares using normal equations: http://www.cs.cornell.edu/~bindel/class/cs3220-s12/notes/lec10.pdf + // I did this in matrix form first, expanded out all the ops, then optimized it a bit. + float z00 = 0.0f, z01 = 0.0f, z10 = 0.0f, z11 = 0.0f; + float q00_a = 0.0f, q10_a = 0.0f, t_a = 0.0f; + for (uint32_t i = 0; i < N; i++) + { + const uint32_t sel = pSelectors[i]; + + z00 += pSelector_weights[sel].m_c[0]; + z10 += pSelector_weights[sel].m_c[1]; + z11 += pSelector_weights[sel].m_c[2]; + + float w = pSelector_weights[sel].m_c[3]; + + q00_a += w * pColors[i].m_c[3]; t_a += pColors[i].m_c[3]; + } + + q10_a = t_a - q00_a; + + z01 = z10; + + float det = z00 * z11 - z01 * z10; + if (det != 0.0f) + det = 1.0f / det; + + float iz00, iz01, iz10, iz11; + iz00 = z11 * det; + iz01 = -z01 * det; + iz10 = -z10 * det; + iz11 = z00 * det; + + *pXl = (float)(iz00 * q00_a + iz01 * q10_a); *pXh = (float)(iz10 * q00_a + iz11 * q10_a); + + if ((*pXl < 0.0f) || (*pXh > 255.0f)) + { + uint32_t lo_v = UINT32_MAX, hi_v = 0; + for (uint32_t i = 0; i < N; i++) + { + lo_v = minimumu(lo_v, pColors[i].m_c[3]); + hi_v = maximumu(hi_v, pColors[i].m_c[3]); + } + + if (lo_v == hi_v) + { + *pXl = (float)lo_v; + *pXh = (float)hi_v; + } + } +} + +struct color_cell_compressor_params +{ + uint32_t m_num_pixels; + const color_rgba *m_pPixels; + uint32_t m_num_selector_weights; + const uint32_t *m_pSelector_weights; + const vec4F *m_pSelector_weightsx; + uint32_t m_comp_bits; + uint32_t m_weights[4]; + bool m_has_alpha; + bool m_has_pbits; + bool m_endpoints_share_pbit; + bool m_perceptual; +}; + +struct color_cell_compressor_results +{ + uint64_t m_best_overall_err; + color_rgba m_low_endpoint; + color_rgba m_high_endpoint; + uint32_t m_pbits[2]; + uint8_t *m_pSelectors; + uint8_t *m_pSelectors_temp; +}; + +static inline color_rgba scale_color(const color_rgba *pC, const color_cell_compressor_params *pParams) +{ + color_rgba results; + + const uint32_t n = pParams->m_comp_bits + (pParams->m_has_pbits ? 1 : 0); + assert((n >= 4) && (n <= 8)); + + for (uint32_t i = 0; i < 4; i++) + { + uint32_t v = pC->m_c[i] << (8 - n); + v |= (v >> n); + assert(v <= 255); + results.m_c[i] = (uint8_t)(v); + } + + return results; +} + +static inline uint64_t compute_color_distance_rgb(const color_rgba *pE1, const color_rgba *pE2, bool perceptual, const uint32_t weights[4]) +{ + int dr, dg, db; + + if (perceptual) + { + const int l1 = pE1->m_c[0] * 109 + pE1->m_c[1] * 366 + pE1->m_c[2] * 37; + const int cr1 = ((int)pE1->m_c[0] << 9) - l1; + const int cb1 = ((int)pE1->m_c[2] << 9) - l1; + const int l2 = pE2->m_c[0] * 109 + pE2->m_c[1] * 366 + pE2->m_c[2] * 37; + const int cr2 = ((int)pE2->m_c[0] << 9) - l2; + const int cb2 = ((int)pE2->m_c[2] << 9) - l2; + dr = (l1 - l2) >> 8; + dg = (cr1 - cr2) >> 8; + db = (cb1 - cb2) >> 8; + } + else + { + dr = (int)pE1->m_c[0] - (int)pE2->m_c[0]; + dg = (int)pE1->m_c[1] - (int)pE2->m_c[1]; + db = (int)pE1->m_c[2] - (int)pE2->m_c[2]; + } + + return weights[0] * (uint32_t)(dr * dr) + weights[1] * (uint32_t)(dg * dg) + weights[2] * (uint32_t)(db * db); +} + +static inline uint64_t compute_color_distance_rgba(const color_rgba *pE1, const color_rgba *pE2, bool perceptual, const uint32_t weights[4]) +{ + int da = (int)pE1->m_c[3] - (int)pE2->m_c[3]; + return compute_color_distance_rgb(pE1, pE2, perceptual, weights) + (weights[3] * (uint32_t)(da * da)); +} + +static uint64_t pack_mode1_to_one_color(const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults, uint32_t r, uint32_t g, uint32_t b, uint8_t *pSelectors) +{ + uint32_t best_err = UINT_MAX; + uint32_t best_p = 0; + + for (uint32_t p = 0; p < 2; p++) + { + uint32_t err = g_bc7_mode_1_optimal_endpoints[r][p].m_error + g_bc7_mode_1_optimal_endpoints[g][p].m_error + g_bc7_mode_1_optimal_endpoints[b][p].m_error; + if (err < best_err) + { + best_err = err; + best_p = p; + if (!best_err) + break; + } + } + + const endpoint_err *pEr = &g_bc7_mode_1_optimal_endpoints[r][best_p]; + const endpoint_err *pEg = &g_bc7_mode_1_optimal_endpoints[g][best_p]; + const endpoint_err *pEb = &g_bc7_mode_1_optimal_endpoints[b][best_p]; + + color_quad_u8_set(&pResults->m_low_endpoint, pEr->m_lo, pEg->m_lo, pEb->m_lo, 0); + color_quad_u8_set(&pResults->m_high_endpoint, pEr->m_hi, pEg->m_hi, pEb->m_hi, 0); + pResults->m_pbits[0] = best_p; + pResults->m_pbits[1] = 0; + + memset(pSelectors, BC7ENC_MODE_1_OPTIMAL_INDEX, pParams->m_num_pixels); + + color_rgba p; + for (uint32_t i = 0; i < 3; i++) + { + uint32_t low = ((pResults->m_low_endpoint.m_c[i] << 1) | pResults->m_pbits[0]) << 1; + low |= (low >> 7); + + uint32_t high = ((pResults->m_high_endpoint.m_c[i] << 1) | pResults->m_pbits[0]) << 1; + high |= (high >> 7); + + p.m_c[i] = (uint8_t)((low * (64 - g_bc7_weights3[BC7ENC_MODE_1_OPTIMAL_INDEX]) + high * g_bc7_weights3[BC7ENC_MODE_1_OPTIMAL_INDEX] + 32) >> 6); + } + p.m_c[3] = 255; + + uint64_t total_err = 0; + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + total_err += compute_color_distance_rgb(&p, &pParams->m_pPixels[i], pParams->m_perceptual, pParams->m_weights); + + pResults->m_best_overall_err = total_err; + + return total_err; +} + +static uint64_t pack_mode7_to_one_color(const color_cell_compressor_params* pParams, color_cell_compressor_results* pResults, uint32_t r, uint32_t g, uint32_t b, uint32_t a, + uint8_t* pSelectors, uint32_t num_pixels, const color_rgba *pPixels) +{ + uint32_t best_err = UINT_MAX; + uint32_t best_p = 0; + + for (uint32_t p = 0; p < 4; p++) + { + uint32_t hi_p = p >> 1; + uint32_t lo_p = p & 1; + uint32_t err = g_bc7_mode_7_optimal_endpoints[r][hi_p][lo_p].m_error + g_bc7_mode_7_optimal_endpoints[g][hi_p][lo_p].m_error + g_bc7_mode_7_optimal_endpoints[b][hi_p][lo_p].m_error + g_bc7_mode_7_optimal_endpoints[a][hi_p][lo_p].m_error; + if (err < best_err) + { + best_err = err; + best_p = p; + if (!best_err) + break; + } + } + + uint32_t best_hi_p = best_p >> 1; + uint32_t best_lo_p = best_p & 1; + + const endpoint_err* pEr = &g_bc7_mode_7_optimal_endpoints[r][best_hi_p][best_lo_p]; + const endpoint_err* pEg = &g_bc7_mode_7_optimal_endpoints[g][best_hi_p][best_lo_p]; + const endpoint_err* pEb = &g_bc7_mode_7_optimal_endpoints[b][best_hi_p][best_lo_p]; + const endpoint_err* pEa = &g_bc7_mode_7_optimal_endpoints[a][best_hi_p][best_lo_p]; + + color_quad_u8_set(&pResults->m_low_endpoint, pEr->m_lo, pEg->m_lo, pEb->m_lo, pEa->m_lo); + color_quad_u8_set(&pResults->m_high_endpoint, pEr->m_hi, pEg->m_hi, pEb->m_hi, pEa->m_hi); + pResults->m_pbits[0] = best_lo_p; + pResults->m_pbits[1] = best_hi_p; + + for (uint32_t i = 0; i < num_pixels; i++) + pSelectors[i] = (uint8_t)BC7E_MODE_7_OPTIMAL_INDEX; + + color_rgba p; + + for (uint32_t i = 0; i < 4; i++) + { + uint32_t low = (pResults->m_low_endpoint.m_c[i] << 1) | pResults->m_pbits[0]; + uint32_t high = (pResults->m_high_endpoint.m_c[i] << 1) | pResults->m_pbits[1]; + + low = (low << 2) | (low >> 6); + high = (high << 2) | (high >> 6); + + p.m_c[i] = (uint8_t)((low * (64 - g_bc7_weights2[BC7E_MODE_7_OPTIMAL_INDEX]) + high * g_bc7_weights2[BC7E_MODE_7_OPTIMAL_INDEX] + 32) >> 6); + } + + uint64_t total_err = 0; + for (uint32_t i = 0; i < num_pixels; i++) + total_err += compute_color_distance_rgba(&p, &pPixels[i], pParams->m_perceptual, pParams->m_weights); + + pResults->m_best_overall_err = total_err; + + return total_err; +} + +static uint64_t evaluate_solution(const color_rgba *pLow, const color_rgba *pHigh, const uint32_t pbits[2], const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults, + const bc7enc_compress_block_params* pComp_params) +{ + color_rgba quantMinColor = *pLow; + color_rgba quantMaxColor = *pHigh; + + if (pParams->m_has_pbits) + { + uint32_t minPBit, maxPBit; + + if (pParams->m_endpoints_share_pbit) + maxPBit = minPBit = pbits[0]; + else + { + minPBit = pbits[0]; + maxPBit = pbits[1]; + } + + quantMinColor.m_c[0] = (uint8_t)((pLow->m_c[0] << 1) | minPBit); + quantMinColor.m_c[1] = (uint8_t)((pLow->m_c[1] << 1) | minPBit); + quantMinColor.m_c[2] = (uint8_t)((pLow->m_c[2] << 1) | minPBit); + quantMinColor.m_c[3] = (uint8_t)((pLow->m_c[3] << 1) | minPBit); + + quantMaxColor.m_c[0] = (uint8_t)((pHigh->m_c[0] << 1) | maxPBit); + quantMaxColor.m_c[1] = (uint8_t)((pHigh->m_c[1] << 1) | maxPBit); + quantMaxColor.m_c[2] = (uint8_t)((pHigh->m_c[2] << 1) | maxPBit); + quantMaxColor.m_c[3] = (uint8_t)((pHigh->m_c[3] << 1) | maxPBit); + } + + color_rgba actualMinColor = scale_color(&quantMinColor, pParams); + color_rgba actualMaxColor = scale_color(&quantMaxColor, pParams); + + const uint32_t N = pParams->m_num_selector_weights; + + color_rgba weightedColors[16]; + weightedColors[0] = actualMinColor; + weightedColors[N - 1] = actualMaxColor; + + const uint32_t nc = pParams->m_has_alpha ? 4 : 3; + for (uint32_t i = 1; i < (N - 1); i++) + for (uint32_t j = 0; j < nc; j++) + weightedColors[i].m_c[j] = (uint8_t)((actualMinColor.m_c[j] * (64 - pParams->m_pSelector_weights[i]) + actualMaxColor.m_c[j] * pParams->m_pSelector_weights[i] + 32) >> 6); + + const int lr = actualMinColor.m_c[0]; + const int lg = actualMinColor.m_c[1]; + const int lb = actualMinColor.m_c[2]; + const int dr = actualMaxColor.m_c[0] - lr; + const int dg = actualMaxColor.m_c[1] - lg; + const int db = actualMaxColor.m_c[2] - lb; + + uint64_t total_err = 0; + + if (pComp_params->m_force_selectors) + { + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + const uint32_t best_sel = pComp_params->m_selectors[i]; + + uint64_t best_err; + if (pParams->m_has_alpha) + best_err = compute_color_distance_rgba(&weightedColors[best_sel], &pParams->m_pPixels[i], pParams->m_perceptual, pParams->m_weights); + else + best_err = compute_color_distance_rgb(&weightedColors[best_sel], &pParams->m_pPixels[i], pParams->m_perceptual, pParams->m_weights); + + total_err += best_err; + + pResults->m_pSelectors_temp[i] = (uint8_t)best_sel; + } + } + else if (!pParams->m_perceptual) + { + if (pParams->m_has_alpha) + { + const int la = actualMinColor.m_c[3]; + const int da = actualMaxColor.m_c[3] - la; + + const float f = N / (float)(squarei(dr) + squarei(dg) + squarei(db) + squarei(da) + .00000125f); + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + const color_rgba *pC = &pParams->m_pPixels[i]; + int r = pC->m_c[0]; + int g = pC->m_c[1]; + int b = pC->m_c[2]; + int a = pC->m_c[3]; + + int best_sel = (int)((float)((r - lr) * dr + (g - lg) * dg + (b - lb) * db + (a - la) * da) * f + .5f); + best_sel = clampi(best_sel, 1, N - 1); + + uint64_t err0 = compute_color_distance_rgba(&weightedColors[best_sel - 1], pC, false, pParams->m_weights); + uint64_t err1 = compute_color_distance_rgba(&weightedColors[best_sel], pC, false, pParams->m_weights); + + if (err1 > err0) + { + err1 = err0; + --best_sel; + } + total_err += err1; + + pResults->m_pSelectors_temp[i] = (uint8_t)best_sel; + } + } + else + { + const float f = N / (float)(squarei(dr) + squarei(dg) + squarei(db) + .00000125f); + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + const color_rgba *pC = &pParams->m_pPixels[i]; + int r = pC->m_c[0]; + int g = pC->m_c[1]; + int b = pC->m_c[2]; + + int sel = (int)((float)((r - lr) * dr + (g - lg) * dg + (b - lb) * db) * f + .5f); + sel = clampi(sel, 1, N - 1); + + uint64_t err0 = compute_color_distance_rgb(&weightedColors[sel - 1], pC, false, pParams->m_weights); + uint64_t err1 = compute_color_distance_rgb(&weightedColors[sel], pC, false, pParams->m_weights); + + int best_sel = sel; + uint64_t best_err = err1; + if (err0 < best_err) + { + best_err = err0; + best_sel = sel - 1; + } + + total_err += best_err; + + pResults->m_pSelectors_temp[i] = (uint8_t)best_sel; + } + } + } + else + { + // TODO: This could be improved. + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + uint64_t best_err = UINT64_MAX; + uint32_t best_sel = 0; + + if (pParams->m_has_alpha) + { + for (uint32_t j = 0; j < N; j++) + { + uint64_t err = compute_color_distance_rgba(&weightedColors[j], &pParams->m_pPixels[i], true, pParams->m_weights); + if (err < best_err) + { + best_err = err; + best_sel = j; + } + } + } + else + { + for (uint32_t j = 0; j < N; j++) + { + uint64_t err = compute_color_distance_rgb(&weightedColors[j], &pParams->m_pPixels[i], true, pParams->m_weights); + if (err < best_err) + { + best_err = err; + best_sel = j; + } + } + } + + total_err += best_err; + + pResults->m_pSelectors_temp[i] = (uint8_t)best_sel; + } + } + + if (total_err < pResults->m_best_overall_err) + { + pResults->m_best_overall_err = total_err; + + pResults->m_low_endpoint = *pLow; + pResults->m_high_endpoint = *pHigh; + + pResults->m_pbits[0] = pbits[0]; + pResults->m_pbits[1] = pbits[1]; + + memcpy(pResults->m_pSelectors, pResults->m_pSelectors_temp, sizeof(pResults->m_pSelectors[0]) * pParams->m_num_pixels); + } + + return total_err; +} + +static void fixDegenerateEndpoints(uint32_t mode, color_rgba *pTrialMinColor, color_rgba *pTrialMaxColor, const vec4F *pXl, const vec4F *pXh, uint32_t iscale, + const bc7enc_compress_block_params* pComp_params) +{ + //if ((mode == 1) || (mode == 7)) + //if (mode == 1) + if ( (mode == 1) || ((mode == 6) && (pComp_params->m_quant_mode6_endpoints)) ) + { + // fix degenerate case where the input collapses to a single colorspace voxel, and we loose all freedom (test with grayscale ramps) + for (uint32_t i = 0; i < 3; i++) + { + if (pTrialMinColor->m_c[i] == pTrialMaxColor->m_c[i]) + { + if (fabs(pXl->m_c[i] - pXh->m_c[i]) > 0.0f) + { + if (pTrialMinColor->m_c[i] > (iscale >> 1)) + { + if (pTrialMinColor->m_c[i] > 0) + pTrialMinColor->m_c[i]--; + else + if (pTrialMaxColor->m_c[i] < iscale) + pTrialMaxColor->m_c[i]++; + } + else + { + if (pTrialMaxColor->m_c[i] < iscale) + pTrialMaxColor->m_c[i]++; + else if (pTrialMinColor->m_c[i] > 0) + pTrialMinColor->m_c[i]--; + } + } + } + } + } +} + +static uint64_t find_optimal_solution(uint32_t mode, vec4F xl, vec4F xh, const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults, + const bc7enc_compress_block_params* pComp_params) +{ + vec4F_saturate_in_place(&xl); vec4F_saturate_in_place(&xh); + + if (pParams->m_has_pbits) + { + const int iscalep = (1 << (pParams->m_comp_bits + 1)) - 1; + const float scalep = (float)iscalep; + + const int32_t totalComps = pParams->m_has_alpha ? 4 : 3; + + uint32_t best_pbits[2]; + color_rgba bestMinColor, bestMaxColor; + + if (!pParams->m_endpoints_share_pbit) + { + if ((pParams->m_comp_bits == 7) && (pComp_params->m_quant_mode6_endpoints)) + { + best_pbits[0] = 0; + bestMinColor.m_c[0] = g_mode6_reduced_quant[(int)((xl.m_c[0] * 2047.0f) + .5f)][0]; + bestMinColor.m_c[1] = g_mode6_reduced_quant[(int)((xl.m_c[1] * 2047.0f) + .5f)][0]; + bestMinColor.m_c[2] = g_mode6_reduced_quant[(int)((xl.m_c[2] * 2047.0f) + .5f)][0]; + bestMinColor.m_c[3] = g_mode6_reduced_quant[(int)((xl.m_c[3] * 2047.0f) + .5f)][0]; + + best_pbits[1] = 1; + bestMaxColor.m_c[0] = g_mode6_reduced_quant[(int)((xh.m_c[0] * 2047.0f) + .5f)][1]; + bestMaxColor.m_c[1] = g_mode6_reduced_quant[(int)((xh.m_c[1] * 2047.0f) + .5f)][1]; + bestMaxColor.m_c[2] = g_mode6_reduced_quant[(int)((xh.m_c[2] * 2047.0f) + .5f)][1]; + bestMaxColor.m_c[3] = g_mode6_reduced_quant[(int)((xh.m_c[3] * 2047.0f) + .5f)][1]; + } + else + { + float best_err0 = 1e+9; + float best_err1 = 1e+9; + + for (int p = 0; p < 2; p++) + { + color_rgba xMinColor, xMaxColor; + + // Notes: The pbit controls which quantization intervals are selected. + // total_levels=2^(comp_bits+1), where comp_bits=4 for mode 0, etc. + // pbit 0: v=(b*2)/(total_levels-1), pbit 1: v=(b*2+1)/(total_levels-1) where b is the component bin from [0,total_levels/2-1] and v is the [0,1] component value + // rearranging you get for pbit 0: b=floor(v*(total_levels-1)/2+.5) + // rearranging you get for pbit 1: b=floor((v*(total_levels-1)-1)/2+.5) + if (pParams->m_comp_bits == 5) + { + for (uint32_t c = 0; c < 4; c++) + { + int vl = (int)(xl.m_c[c] * 31.0f); + vl += (xl.m_c[c] > g_mode7_rgba_midpoints[vl][p]); + xMinColor.m_c[c] = (uint8_t)clampi(vl * 2 + p, p, 63 - 1 + p); + + int vh = (int)(xh.m_c[c] * 31.0f); + vh += (xh.m_c[c] > g_mode7_rgba_midpoints[vh][p]); + xMaxColor.m_c[c] = (uint8_t)clampi(vh * 2 + p, p, 63 - 1 + p); + } + } + else + { + for (uint32_t c = 0; c < 4; c++) + { + xMinColor.m_c[c] = (uint8_t)(clampi(((int)((xl.m_c[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); + xMaxColor.m_c[c] = (uint8_t)(clampi(((int)((xh.m_c[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); + } + } + + color_rgba scaledLow = scale_color(&xMinColor, pParams); + color_rgba scaledHigh = scale_color(&xMaxColor, pParams); + + float err0 = 0, err1 = 0; + for (int i = 0; i < totalComps; i++) + { + err0 += squaref(scaledLow.m_c[i] - xl.m_c[i] * 255.0f); + err1 += squaref(scaledHigh.m_c[i] - xh.m_c[i] * 255.0f); + } + + if (p == 1) + { + err0 *= pComp_params->m_pbit1_weight; + err1 *= pComp_params->m_pbit1_weight; + } + + if (err0 < best_err0) + { + best_err0 = err0; + best_pbits[0] = p; + + bestMinColor.m_c[0] = xMinColor.m_c[0] >> 1; + bestMinColor.m_c[1] = xMinColor.m_c[1] >> 1; + bestMinColor.m_c[2] = xMinColor.m_c[2] >> 1; + bestMinColor.m_c[3] = xMinColor.m_c[3] >> 1; + } + + if (err1 < best_err1) + { + best_err1 = err1; + best_pbits[1] = p; + + bestMaxColor.m_c[0] = xMaxColor.m_c[0] >> 1; + bestMaxColor.m_c[1] = xMaxColor.m_c[1] >> 1; + bestMaxColor.m_c[2] = xMaxColor.m_c[2] >> 1; + bestMaxColor.m_c[3] = xMaxColor.m_c[3] >> 1; + } + } + } + } + else + { + if ((mode == 1) && (pComp_params->m_bias_mode1_pbits)) + { + float x = 0.0f; + for (uint32_t c = 0; c < 3; c++) + x = std::max(std::max(x, xl.m_c[c]), xh.m_c[c]); + + int p = 0; + if (x > (253.0f / 255.0f)) + p = 1; + + color_rgba xMinColor, xMaxColor; + for (uint32_t c = 0; c < 4; c++) + { + int vl = (int)(xl.m_c[c] * 63.0f); + vl += (xl.m_c[c] > g_mode1_rgba_midpoints[vl][p]); + xMinColor.m_c[c] = (uint8_t)clampi(vl * 2 + p, p, 127 - 1 + p); + + int vh = (int)(xh.m_c[c] * 63.0f); + vh += (xh.m_c[c] > g_mode1_rgba_midpoints[vh][p]); + xMaxColor.m_c[c] = (uint8_t)clampi(vh * 2 + p, p, 127 - 1 + p); + } + + best_pbits[0] = p; + best_pbits[1] = p; + for (uint32_t j = 0; j < 4; j++) + { + bestMinColor.m_c[j] = xMinColor.m_c[j] >> 1; + bestMaxColor.m_c[j] = xMaxColor.m_c[j] >> 1; + } + } + else + { + // Endpoints share pbits + float best_err = 1e+9; + + for (int p = 0; p < 2; p++) + { + color_rgba xMinColor, xMaxColor; + if (pParams->m_comp_bits == 6) + { + for (uint32_t c = 0; c < 4; c++) + { + int vl = (int)(xl.m_c[c] * 63.0f); + vl += (xl.m_c[c] > g_mode1_rgba_midpoints[vl][p]); + xMinColor.m_c[c] = (uint8_t)clampi(vl * 2 + p, p, 127 - 1 + p); + + int vh = (int)(xh.m_c[c] * 63.0f); + vh += (xh.m_c[c] > g_mode1_rgba_midpoints[vh][p]); + xMaxColor.m_c[c] = (uint8_t)clampi(vh * 2 + p, p, 127 - 1 + p); + } + } + else + { + for (uint32_t c = 0; c < 4; c++) + { + xMinColor.m_c[c] = (uint8_t)(clampi(((int)((xl.m_c[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); + xMaxColor.m_c[c] = (uint8_t)(clampi(((int)((xh.m_c[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); + } + } + + color_rgba scaledLow = scale_color(&xMinColor, pParams); + color_rgba scaledHigh = scale_color(&xMaxColor, pParams); + + float err = 0; + for (int i = 0; i < totalComps; i++) + err += squaref((scaledLow.m_c[i] / 255.0f) - xl.m_c[i]) + squaref((scaledHigh.m_c[i] / 255.0f) - xh.m_c[i]); + + if (p == 1) + err *= pComp_params->m_pbit1_weight; + + if (err < best_err) + { + best_err = err; + best_pbits[0] = p; + best_pbits[1] = p; + for (uint32_t j = 0; j < 4; j++) + { + bestMinColor.m_c[j] = xMinColor.m_c[j] >> 1; + bestMaxColor.m_c[j] = xMaxColor.m_c[j] >> 1; + } + } + } + } + } + + fixDegenerateEndpoints(mode, &bestMinColor, &bestMaxColor, &xl, &xh, iscalep >> 1, pComp_params); + + if ((pResults->m_best_overall_err == UINT64_MAX) || color_quad_u8_notequals(&bestMinColor, &pResults->m_low_endpoint) || color_quad_u8_notequals(&bestMaxColor, &pResults->m_high_endpoint) || (best_pbits[0] != pResults->m_pbits[0]) || (best_pbits[1] != pResults->m_pbits[1])) + evaluate_solution(&bestMinColor, &bestMaxColor, best_pbits, pParams, pResults, pComp_params); + } + else + { + const int iscale = (1 << pParams->m_comp_bits) - 1; + const float scale = (float)iscale; + + color_rgba trialMinColor, trialMaxColor; + if (pParams->m_comp_bits == 7) + { + for (uint32_t c = 0; c < 4; c++) + { + int vl = (int)(xl.m_c[c] * 127.0f); + vl += (xl.m_c[c] > g_mode5_rgba_midpoints[vl]); + trialMinColor.m_c[c] = (uint8_t)clampi(vl, 0, 127); + + int vh = (int)(xh.m_c[c] * 127.0f); + vh += (xh.m_c[c] > g_mode5_rgba_midpoints[vh]); + trialMaxColor.m_c[c] = (uint8_t)clampi(vh, 0, 127); + } + } + else + { + color_quad_u8_set_clamped(&trialMinColor, (int)(xl.m_c[0] * scale + .5f), (int)(xl.m_c[1] * scale + .5f), (int)(xl.m_c[2] * scale + .5f), (int)(xl.m_c[3] * scale + .5f)); + color_quad_u8_set_clamped(&trialMaxColor, (int)(xh.m_c[0] * scale + .5f), (int)(xh.m_c[1] * scale + .5f), (int)(xh.m_c[2] * scale + .5f), (int)(xh.m_c[3] * scale + .5f)); + } + + fixDegenerateEndpoints(mode, &trialMinColor, &trialMaxColor, &xl, &xh, iscale, pComp_params); + + if ((pResults->m_best_overall_err == UINT64_MAX) || color_quad_u8_notequals(&trialMinColor, &pResults->m_low_endpoint) || color_quad_u8_notequals(&trialMaxColor, &pResults->m_high_endpoint)) + evaluate_solution(&trialMinColor, &trialMaxColor, pResults->m_pbits, pParams, pResults, pComp_params); + } + + return pResults->m_best_overall_err; +} + +static uint64_t color_cell_compression(uint32_t mode, const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults, const bc7enc_compress_block_params *pComp_params) +{ + assert((mode == 6) || (mode == 7) || (!pParams->m_has_alpha)); + + pResults->m_best_overall_err = UINT64_MAX; + + // If the partition's colors are all the same in mode 1, then just pack them as a single color. + if (mode == 1) + { + const uint32_t cr = pParams->m_pPixels[0].m_c[0], cg = pParams->m_pPixels[0].m_c[1], cb = pParams->m_pPixels[0].m_c[2]; + + bool allSame = true; + for (uint32_t i = 1; i < pParams->m_num_pixels; i++) + { + if ((cr != pParams->m_pPixels[i].m_c[0]) || (cg != pParams->m_pPixels[i].m_c[1]) || (cb != pParams->m_pPixels[i].m_c[2])) + { + allSame = false; + break; + } + } + + if (allSame) + return pack_mode1_to_one_color(pParams, pResults, cr, cg, cb, pResults->m_pSelectors); + } + else if (mode == 7) + { + const uint32_t cr = pParams->m_pPixels[0].m_c[0], cg = pParams->m_pPixels[0].m_c[1], cb = pParams->m_pPixels[0].m_c[2], ca = pParams->m_pPixels[0].m_c[3]; + + bool allSame = true; + for (uint32_t i = 1; i < pParams->m_num_pixels; i++) + { + if ((cr != pParams->m_pPixels[i].m_c[0]) || (cg != pParams->m_pPixels[i].m_c[1]) || (cb != pParams->m_pPixels[i].m_c[2]) || (ca != pParams->m_pPixels[i].m_c[3])) + { + allSame = false; + break; + } + } + + if (allSame) + return pack_mode7_to_one_color(pParams, pResults, cr, cg, cb, ca, pResults->m_pSelectors, pParams->m_num_pixels, pParams->m_pPixels); + } + + // Compute partition's mean color and principle axis. + vec4F meanColor, axis; + vec4F_set_scalar(&meanColor, 0.0f); + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + vec4F color = vec4F_from_color(&pParams->m_pPixels[i]); + meanColor = vec4F_add(&meanColor, &color); + } + + vec4F meanColorScaled = vec4F_mul(&meanColor, 1.0f / (float)(pParams->m_num_pixels)); + + meanColor = vec4F_mul(&meanColor, 1.0f / (float)(pParams->m_num_pixels * 255.0f)); + vec4F_saturate_in_place(&meanColor); + + if (pParams->m_has_alpha) + { + // Use incremental PCA for RGBA PCA, because it's simple. + vec4F_set_scalar(&axis, 0.0f); + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + vec4F color = vec4F_from_color(&pParams->m_pPixels[i]); + color = vec4F_sub(&color, &meanColorScaled); + vec4F a = vec4F_mul(&color, color.m_c[0]); + vec4F b = vec4F_mul(&color, color.m_c[1]); + vec4F c = vec4F_mul(&color, color.m_c[2]); + vec4F d = vec4F_mul(&color, color.m_c[3]); + vec4F n = i ? axis : color; + vec4F_normalize_in_place(&n); + axis.m_c[0] += vec4F_dot(&a, &n); + axis.m_c[1] += vec4F_dot(&b, &n); + axis.m_c[2] += vec4F_dot(&c, &n); + axis.m_c[3] += vec4F_dot(&d, &n); + } + vec4F_normalize_in_place(&axis); + } + else + { + // Use covar technique for RGB PCA, because it doesn't require per-pixel normalization. + float cov[6] = { 0, 0, 0, 0, 0, 0 }; + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + const color_rgba *pV = &pParams->m_pPixels[i]; + float r = pV->m_c[0] - meanColorScaled.m_c[0]; + float g = pV->m_c[1] - meanColorScaled.m_c[1]; + float b = pV->m_c[2] - meanColorScaled.m_c[2]; + cov[0] += r*r; cov[1] += r*g; cov[2] += r*b; cov[3] += g*g; cov[4] += g*b; cov[5] += b*b; + } + + float vfr = .9f, vfg = 1.0f, vfb = .7f; + for (uint32_t iter = 0; iter < 3; iter++) + { + float r = vfr*cov[0] + vfg*cov[1] + vfb*cov[2]; + float g = vfr*cov[1] + vfg*cov[3] + vfb*cov[4]; + float b = vfr*cov[2] + vfg*cov[4] + vfb*cov[5]; + + float m = maximumf(maximumf(fabsf(r), fabsf(g)), fabsf(b)); + if (m > 1e-10f) + { + m = 1.0f / m; + r *= m; g *= m; b *= m; + } + + vfr = r; vfg = g; vfb = b; + } + + float len = vfr*vfr + vfg*vfg + vfb*vfb; + if (len < 1e-10f) + vec4F_set_scalar(&axis, 0.0f); + else + { + len = 1.0f / sqrtf(len); + vfr *= len; vfg *= len; vfb *= len; + vec4F_set(&axis, vfr, vfg, vfb, 0); + } + } + + // TODO: Try picking the 2 colors with the largest projection onto the axis, instead of computing new colors along the axis. + + if (vec4F_dot(&axis, &axis) < .5f) + { + if (pParams->m_perceptual) + vec4F_set(&axis, .213f, .715f, .072f, pParams->m_has_alpha ? .715f : 0); + else + vec4F_set(&axis, 1.0f, 1.0f, 1.0f, pParams->m_has_alpha ? 1.0f : 0); + vec4F_normalize_in_place(&axis); + } + + float l = 1e+9f, h = -1e+9f; + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + vec4F color = vec4F_from_color(&pParams->m_pPixels[i]); + + vec4F q = vec4F_sub(&color, &meanColorScaled); + float d = vec4F_dot(&q, &axis); + + l = minimumf(l, d); + h = maximumf(h, d); + } + + l *= (1.0f / 255.0f); + h *= (1.0f / 255.0f); + + vec4F b0 = vec4F_mul(&axis, l); + vec4F b1 = vec4F_mul(&axis, h); + vec4F c0 = vec4F_add(&meanColor, &b0); + vec4F c1 = vec4F_add(&meanColor, &b1); + vec4F minColor = vec4F_saturate(&c0); + vec4F maxColor = vec4F_saturate(&c1); + + vec4F whiteVec; + vec4F_set_scalar(&whiteVec, 1.0f); + + if (vec4F_dot(&minColor, &whiteVec) > vec4F_dot(&maxColor, &whiteVec)) + { +#if 0 + // Don't compile correctly with VC 2019 in release. + vec4F temp = minColor; + minColor = maxColor; + maxColor = temp; +#else + float a = minColor.m_c[0], b = minColor.m_c[1], c = minColor.m_c[2], d = minColor.m_c[3]; + minColor.m_c[0] = maxColor.m_c[0]; + minColor.m_c[1] = maxColor.m_c[1]; + minColor.m_c[2] = maxColor.m_c[2]; + minColor.m_c[3] = maxColor.m_c[3]; + maxColor.m_c[0] = a; + maxColor.m_c[1] = b; + maxColor.m_c[2] = c; + maxColor.m_c[3] = d; +#endif + } + + // First find a solution using the block's PCA. + if (!find_optimal_solution(mode, minColor, maxColor, pParams, pResults, pComp_params)) + return 0; + + if (pComp_params->m_try_least_squares) + { + // Now try to refine the solution using least squares by computing the optimal endpoints from the current selectors. + vec4F xl, xh; + vec4F_set_scalar(&xl, 0.0f); + vec4F_set_scalar(&xh, 0.0f); + if (pParams->m_has_alpha) + compute_least_squares_endpoints_rgba(pParams->m_num_pixels, pResults->m_pSelectors, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + else + compute_least_squares_endpoints_rgb(pParams->m_num_pixels, pResults->m_pSelectors, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + + xl = vec4F_mul(&xl, (1.0f / 255.0f)); + xh = vec4F_mul(&xh, (1.0f / 255.0f)); + + if (!find_optimal_solution(mode, xl, xh, pParams, pResults, pComp_params)) + return 0; + } + + if (pComp_params->m_uber_level > 0) + { + // In uber level 1, try varying the selectors a little, somewhat like cluster fit would. First try incrementing the minimum selectors, + // then try decrementing the selectrors, then try both. + uint8_t selectors_temp[16], selectors_temp1[16]; + memcpy(selectors_temp, pResults->m_pSelectors, pParams->m_num_pixels); + + const int max_selector = pParams->m_num_selector_weights - 1; + + uint32_t min_sel = 16; + uint32_t max_sel = 0; + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + uint32_t sel = selectors_temp[i]; + min_sel = minimumu(min_sel, sel); + max_sel = maximumu(max_sel, sel); + } + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + uint32_t sel = selectors_temp[i]; + if ((sel == min_sel) && (sel < (pParams->m_num_selector_weights - 1))) + sel++; + selectors_temp1[i] = (uint8_t)sel; + } + + vec4F xl, xh; + vec4F_set_scalar(&xl, 0.0f); + vec4F_set_scalar(&xh, 0.0f); + if (pParams->m_has_alpha) + compute_least_squares_endpoints_rgba(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + else + compute_least_squares_endpoints_rgb(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + + xl = vec4F_mul(&xl, (1.0f / 255.0f)); + xh = vec4F_mul(&xh, (1.0f / 255.0f)); + + if (!find_optimal_solution(mode, xl, xh, pParams, pResults, pComp_params)) + return 0; + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + uint32_t sel = selectors_temp[i]; + if ((sel == max_sel) && (sel > 0)) + sel--; + selectors_temp1[i] = (uint8_t)sel; + } + + if (pParams->m_has_alpha) + compute_least_squares_endpoints_rgba(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + else + compute_least_squares_endpoints_rgb(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + + xl = vec4F_mul(&xl, (1.0f / 255.0f)); + xh = vec4F_mul(&xh, (1.0f / 255.0f)); + + if (!find_optimal_solution(mode, xl, xh, pParams, pResults, pComp_params)) + return 0; + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + uint32_t sel = selectors_temp[i]; + if ((sel == min_sel) && (sel < (pParams->m_num_selector_weights - 1))) + sel++; + else if ((sel == max_sel) && (sel > 0)) + sel--; + selectors_temp1[i] = (uint8_t)sel; + } + + if (pParams->m_has_alpha) + compute_least_squares_endpoints_rgba(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + else + compute_least_squares_endpoints_rgb(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + + xl = vec4F_mul(&xl, (1.0f / 255.0f)); + xh = vec4F_mul(&xh, (1.0f / 255.0f)); + + if (!find_optimal_solution(mode, xl, xh, pParams, pResults, pComp_params)) + return 0; + + // In uber levels 2+, try taking more advantage of endpoint extrapolation by scaling the selectors in one direction or another. + const uint32_t uber_err_thresh = (pParams->m_num_pixels * 56) >> 4; + if ((pComp_params->m_uber_level >= 2) && (pResults->m_best_overall_err > uber_err_thresh)) + { + const int Q = (pComp_params->m_uber_level >= 4) ? (pComp_params->m_uber_level - 2) : 1; + for (int ly = -Q; ly <= 1; ly++) + { + for (int hy = max_selector - 1; hy <= (max_selector + Q); hy++) + { + if ((ly == 0) && (hy == max_selector)) + continue; + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + selectors_temp1[i] = (uint8_t)clampf(floorf((float)max_selector * ((float)selectors_temp[i] - (float)ly) / ((float)hy - (float)ly) + .5f), 0, (float)max_selector); + + //vec4F xl, xh; + vec4F_set_scalar(&xl, 0.0f); + vec4F_set_scalar(&xh, 0.0f); + if (pParams->m_has_alpha) + compute_least_squares_endpoints_rgba(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + else + compute_least_squares_endpoints_rgb(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + + xl = vec4F_mul(&xl, (1.0f / 255.0f)); + xh = vec4F_mul(&xh, (1.0f / 255.0f)); + + if (!find_optimal_solution(mode, xl, xh, pParams, pResults, pComp_params)) + return 0; + } + } + } + } + + if (mode == 1) + { + // Try encoding the partition as a single color by using the optimal singe colors tables to encode the block to its mean. + color_cell_compressor_results avg_results = *pResults; + const uint32_t r = (int)(.5f + meanColor.m_c[0] * 255.0f), g = (int)(.5f + meanColor.m_c[1] * 255.0f), b = (int)(.5f + meanColor.m_c[2] * 255.0f); + uint64_t avg_err = pack_mode1_to_one_color(pParams, &avg_results, r, g, b, pResults->m_pSelectors_temp); + if (avg_err < pResults->m_best_overall_err) + { + *pResults = avg_results; + memcpy(pResults->m_pSelectors, pResults->m_pSelectors_temp, sizeof(pResults->m_pSelectors[0]) * pParams->m_num_pixels); + pResults->m_best_overall_err = avg_err; + } + } + else if (mode == 7) + { + // Try encoding the partition as a single color by using the optimal singe colors tables to encode the block to its mean. + color_cell_compressor_results avg_results = *pResults; + const uint32_t r = (int)(.5f + meanColor.m_c[0] * 255.0f), g = (int)(.5f + meanColor.m_c[1] * 255.0f), b = (int)(.5f + meanColor.m_c[2] * 255.0f), a = (int)(.5f + meanColor.m_c[3] * 255.0f); + uint64_t avg_err = pack_mode7_to_one_color(pParams, &avg_results, r, g, b, a, pResults->m_pSelectors_temp, pParams->m_num_pixels, pParams->m_pPixels); + if (avg_err < pResults->m_best_overall_err) + { + *pResults = avg_results; + memcpy(pResults->m_pSelectors, pResults->m_pSelectors_temp, sizeof(pResults->m_pSelectors[0]) * pParams->m_num_pixels); + pResults->m_best_overall_err = avg_err; + } + } + + return pResults->m_best_overall_err; +} + +static uint64_t color_cell_compression_est_mode1(uint32_t num_pixels, const color_rgba *pPixels, bool perceptual, uint32_t pweights[4], uint64_t best_err_so_far) +{ + // Find RGB bounds as an approximation of the block's principle axis + uint32_t lr = 255, lg = 255, lb = 255; + uint32_t hr = 0, hg = 0, hb = 0; + for (uint32_t i = 0; i < num_pixels; i++) + { + const color_rgba *pC = &pPixels[i]; + if (pC->m_c[0] < lr) lr = pC->m_c[0]; + if (pC->m_c[1] < lg) lg = pC->m_c[1]; + if (pC->m_c[2] < lb) lb = pC->m_c[2]; + if (pC->m_c[0] > hr) hr = pC->m_c[0]; + if (pC->m_c[1] > hg) hg = pC->m_c[1]; + if (pC->m_c[2] > hb) hb = pC->m_c[2]; + } + + color_rgba lowColor; color_quad_u8_set(&lowColor, lr, lg, lb, 0); + color_rgba highColor; color_quad_u8_set(&highColor, hr, hg, hb, 0); + + // Place endpoints at bbox diagonals and compute interpolated colors + const uint32_t N = 8; + color_rgba weightedColors[8]; + + weightedColors[0] = lowColor; + weightedColors[N - 1] = highColor; + for (uint32_t i = 1; i < (N - 1); i++) + { + weightedColors[i].m_c[0] = (uint8_t)((lowColor.m_c[0] * (64 - g_bc7_weights3[i]) + highColor.m_c[0] * g_bc7_weights3[i] + 32) >> 6); + weightedColors[i].m_c[1] = (uint8_t)((lowColor.m_c[1] * (64 - g_bc7_weights3[i]) + highColor.m_c[1] * g_bc7_weights3[i] + 32) >> 6); + weightedColors[i].m_c[2] = (uint8_t)((lowColor.m_c[2] * (64 - g_bc7_weights3[i]) + highColor.m_c[2] * g_bc7_weights3[i] + 32) >> 6); + } + + // Compute dots and thresholds + const int ar = highColor.m_c[0] - lowColor.m_c[0]; + const int ag = highColor.m_c[1] - lowColor.m_c[1]; + const int ab = highColor.m_c[2] - lowColor.m_c[2]; + + int dots[8]; + for (uint32_t i = 0; i < N; i++) + dots[i] = weightedColors[i].m_c[0] * ar + weightedColors[i].m_c[1] * ag + weightedColors[i].m_c[2] * ab; + + int thresh[8 - 1]; + for (uint32_t i = 0; i < (N - 1); i++) + thresh[i] = (dots[i] + dots[i + 1] + 1) >> 1; + + uint64_t total_err = 0; + if (perceptual) + { + // Transform block's interpolated colors to YCbCr + int l1[8], cr1[8], cb1[8]; + for (int j = 0; j < 8; j++) + { + const color_rgba *pE1 = &weightedColors[j]; + l1[j] = pE1->m_c[0] * 109 + pE1->m_c[1] * 366 + pE1->m_c[2] * 37; + cr1[j] = ((int)pE1->m_c[0] << 9) - l1[j]; + cb1[j] = ((int)pE1->m_c[2] << 9) - l1[j]; + } + + for (uint32_t i = 0; i < num_pixels; i++) + { + const color_rgba *pC = &pPixels[i]; + + int d = ar * pC->m_c[0] + ag * pC->m_c[1] + ab * pC->m_c[2]; + + // Find approximate selector + uint32_t s = 0; + if (d >= thresh[6]) + s = 7; + else if (d >= thresh[5]) + s = 6; + else if (d >= thresh[4]) + s = 5; + else if (d >= thresh[3]) + s = 4; + else if (d >= thresh[2]) + s = 3; + else if (d >= thresh[1]) + s = 2; + else if (d >= thresh[0]) + s = 1; + + // Compute error + const int l2 = pC->m_c[0] * 109 + pC->m_c[1] * 366 + pC->m_c[2] * 37; + const int cr2 = ((int)pC->m_c[0] << 9) - l2; + const int cb2 = ((int)pC->m_c[2] << 9) - l2; + + const int dl = (l1[s] - l2) >> 8; + const int dcr = (cr1[s] - cr2) >> 8; + const int dcb = (cb1[s] - cb2) >> 8; + + int ie = (pweights[0] * dl * dl) + (pweights[1] * dcr * dcr) + (pweights[2] * dcb * dcb); + + total_err += ie; + if (total_err > best_err_so_far) + break; + } + } + else + { + for (uint32_t i = 0; i < num_pixels; i++) + { + const color_rgba *pC = &pPixels[i]; + + int d = ar * pC->m_c[0] + ag * pC->m_c[1] + ab * pC->m_c[2]; + + // Find approximate selector + uint32_t s = 0; + if (d >= thresh[6]) + s = 7; + else if (d >= thresh[5]) + s = 6; + else if (d >= thresh[4]) + s = 5; + else if (d >= thresh[3]) + s = 4; + else if (d >= thresh[2]) + s = 3; + else if (d >= thresh[1]) + s = 2; + else if (d >= thresh[0]) + s = 1; + + // Compute error + const color_rgba *pE1 = &weightedColors[s]; + + int dr = (int)pE1->m_c[0] - (int)pC->m_c[0]; + int dg = (int)pE1->m_c[1] - (int)pC->m_c[1]; + int db = (int)pE1->m_c[2] - (int)pC->m_c[2]; + + total_err += pweights[0] * (dr * dr) + pweights[1] * (dg * dg) + pweights[2] * (db * db); + if (total_err > best_err_so_far) + break; + } + } + + return total_err; +} + +static uint64_t color_cell_compression_est_mode7(uint32_t num_pixels, const color_rgba * pPixels, bool perceptual, uint32_t pweights[4], uint64_t best_err_so_far) +{ + // Find RGB bounds as an approximation of the block's principle axis + uint32_t lr = 255, lg = 255, lb = 255, la = 255; + uint32_t hr = 0, hg = 0, hb = 0, ha = 0; + for (uint32_t i = 0; i < num_pixels; i++) + { + const color_rgba* pC = &pPixels[i]; + if (pC->m_c[0] < lr) lr = pC->m_c[0]; + if (pC->m_c[1] < lg) lg = pC->m_c[1]; + if (pC->m_c[2] < lb) lb = pC->m_c[2]; + if (pC->m_c[3] < la) la = pC->m_c[3]; + + if (pC->m_c[0] > hr) hr = pC->m_c[0]; + if (pC->m_c[1] > hg) hg = pC->m_c[1]; + if (pC->m_c[2] > hb) hb = pC->m_c[2]; + if (pC->m_c[3] > ha) ha = pC->m_c[3]; + } + + color_rgba lowColor; color_quad_u8_set(&lowColor, lr, lg, lb, la); + color_rgba highColor; color_quad_u8_set(&highColor, hr, hg, hb, ha); + + // Place endpoints at bbox diagonals and compute interpolated colors + const uint32_t N = 4; + color_rgba weightedColors[4]; + + weightedColors[0] = lowColor; + weightedColors[N - 1] = highColor; + for (uint32_t i = 1; i < (N - 1); i++) + { + weightedColors[i].m_c[0] = (uint8_t)((lowColor.m_c[0] * (64 - g_bc7_weights2[i]) + highColor.m_c[0] * g_bc7_weights2[i] + 32) >> 6); + weightedColors[i].m_c[1] = (uint8_t)((lowColor.m_c[1] * (64 - g_bc7_weights2[i]) + highColor.m_c[1] * g_bc7_weights2[i] + 32) >> 6); + weightedColors[i].m_c[2] = (uint8_t)((lowColor.m_c[2] * (64 - g_bc7_weights2[i]) + highColor.m_c[2] * g_bc7_weights2[i] + 32) >> 6); + weightedColors[i].m_c[3] = (uint8_t)((lowColor.m_c[3] * (64 - g_bc7_weights2[i]) + highColor.m_c[3] * g_bc7_weights2[i] + 32) >> 6); + } + + // Compute dots and thresholds + const int ar = highColor.m_c[0] - lowColor.m_c[0]; + const int ag = highColor.m_c[1] - lowColor.m_c[1]; + const int ab = highColor.m_c[2] - lowColor.m_c[2]; + const int aa = highColor.m_c[3] - lowColor.m_c[3]; + + int dots[4]; + for (uint32_t i = 0; i < N; i++) + dots[i] = weightedColors[i].m_c[0] * ar + weightedColors[i].m_c[1] * ag + weightedColors[i].m_c[2] * ab + weightedColors[i].m_c[3] * aa; + + int thresh[4 - 1]; + for (uint32_t i = 0; i < (N - 1); i++) + thresh[i] = (dots[i] + dots[i + 1] + 1) >> 1; + + uint64_t total_err = 0; + if (perceptual) + { + // Transform block's interpolated colors to YCbCr + int l1[4], cr1[4], cb1[4]; + for (int j = 0; j < 4; j++) + { + const color_rgba* pE1 = &weightedColors[j]; + l1[j] = pE1->m_c[0] * 109 + pE1->m_c[1] * 366 + pE1->m_c[2] * 37; + cr1[j] = ((int)pE1->m_c[0] << 9) - l1[j]; + cb1[j] = ((int)pE1->m_c[2] << 9) - l1[j]; + } + + for (uint32_t i = 0; i < num_pixels; i++) + { + const color_rgba* pC = &pPixels[i]; + + int d = ar * pC->m_c[0] + ag * pC->m_c[1] + ab * pC->m_c[2] + aa * pC->m_c[3]; + + // Find approximate selector + uint32_t s = 0; + if (d >= thresh[2]) + s = 3; + else if (d >= thresh[1]) + s = 2; + else if (d >= thresh[0]) + s = 1; + + // Compute error + const int l2 = pC->m_c[0] * 109 + pC->m_c[1] * 366 + pC->m_c[2] * 37; + const int cr2 = ((int)pC->m_c[0] << 9) - l2; + const int cb2 = ((int)pC->m_c[2] << 9) - l2; + + const int dl = (l1[s] - l2) >> 8; + const int dcr = (cr1[s] - cr2) >> 8; + const int dcb = (cb1[s] - cb2) >> 8; + + const int dca = (int)pC->m_c[3] - (int)weightedColors[s].m_c[3]; + + int ie = (pweights[0] * dl * dl) + (pweights[1] * dcr * dcr) + (pweights[2] * dcb * dcb) + (pweights[3] * dca * dca); + + total_err += ie; + if (total_err > best_err_so_far) + break; + } + } + else + { + for (uint32_t i = 0; i < num_pixels; i++) + { + const color_rgba* pC = &pPixels[i]; + + int d = ar * pC->m_c[0] + ag * pC->m_c[1] + ab * pC->m_c[2] + aa * pC->m_c[3]; + + // Find approximate selector + uint32_t s = 0; + if (d >= thresh[2]) + s = 3; + else if (d >= thresh[1]) + s = 2; + else if (d >= thresh[0]) + s = 1; + + // Compute error + const color_rgba* pE1 = &weightedColors[s]; + + int dr = (int)pE1->m_c[0] - (int)pC->m_c[0]; + int dg = (int)pE1->m_c[1] - (int)pC->m_c[1]; + int db = (int)pE1->m_c[2] - (int)pC->m_c[2]; + int da = (int)pE1->m_c[3] - (int)pC->m_c[3]; + + total_err += pweights[0] * (dr * dr) + pweights[1] * (dg * dg) + pweights[2] * (db * db) + pweights[3] * (da * da); + if (total_err > best_err_so_far) + break; + } + } + + return total_err; +} + +// This table contains bitmasks indicating which "key" partitions must be best ranked before this partition is worth evaluating. +// We first rank the best/most used 14 partitions (sorted by usefulness), record the best one found as the key partition, then use +// that to control the other partitions to evaluate. The quality loss is ~.08 dB RGB PSNR, the perf gain is up to ~11% (at uber level 0). +static const uint32_t g_partition_predictors[35] = +{ + UINT32_MAX, + UINT32_MAX, + UINT32_MAX, + UINT32_MAX, + UINT32_MAX, + (1 << 1) | (1 << 2) | (1 << 8), + (1 << 1) | (1 << 3) | (1 << 7), + UINT32_MAX, + UINT32_MAX, + (1 << 2) | (1 << 8) | (1 << 16), + (1 << 7) | (1 << 3) | (1 << 15), + UINT32_MAX, + (1 << 8) | (1 << 14) | (1 << 16), + (1 << 7) | (1 << 14) | (1 << 15), + UINT32_MAX, + UINT32_MAX, + UINT32_MAX, + UINT32_MAX, + (1 << 14) | (1 << 15), + (1 << 16) | (1 << 22) | (1 << 14), + (1 << 17) | (1 << 24) | (1 << 14), + (1 << 2) | (1 << 14) | (1 << 15) | (1 << 1), + UINT32_MAX, + (1 << 1) | (1 << 3) | (1 << 14) | (1 << 16) | (1 << 22), + UINT32_MAX, + (1 << 1) | (1 << 2) | (1 << 15) | (1 << 17) | (1 << 24), + (1 << 1) | (1 << 3) | (1 << 22), + UINT32_MAX, + UINT32_MAX, + UINT32_MAX, + (1 << 14) | (1 << 15) | (1 << 16) | (1 << 17), + UINT32_MAX, + UINT32_MAX, + (1 << 1) | (1 << 2) | (1 << 3) | (1 << 27) | (1 << 4) | (1 << 24), + (1 << 14) | (1 << 15) | (1 << 16) | (1 << 11) | (1 << 17) | (1 << 27) +}; + +// Estimate the partition used by modes 1/7. This scans through each partition and computes an approximate error for each. +static uint32_t estimate_partition(const color_rgba *pPixels, const bc7enc_compress_block_params *pComp_params, uint32_t pweights[4], uint32_t mode) +{ + const uint32_t total_partitions = minimumu(pComp_params->m_max_partitions, BC7ENC_MAX_PARTITIONS); + if (total_partitions <= 1) + return 0; + + uint64_t best_err = UINT64_MAX; + uint32_t best_partition = 0; + + // Partition order sorted by usage frequency across a large test corpus. Pattern 34 (checkerboard) must appear in slot 34. + // Using a sorted order allows the user to decrease the # of partitions to scan with minimal loss in quality. + static const uint8_t s_sorted_partition_order[64] = + { + 1 - 1, 14 - 1, 2 - 1, 3 - 1, 16 - 1, 15 - 1, 11 - 1, 17 - 1, + 4 - 1, 24 - 1, 27 - 1, 7 - 1, 8 - 1, 22 - 1, 20 - 1, 30 - 1, + 9 - 1, 5 - 1, 10 - 1, 21 - 1, 6 - 1, 32 - 1, 23 - 1, 18 - 1, + 19 - 1, 12 - 1, 13 - 1, 31 - 1, 25 - 1, 26 - 1, 29 - 1, 28 - 1, + 33 - 1, 34 - 1, 35 - 1, 46 - 1, 47 - 1, 52 - 1, 50 - 1, 51 - 1, + 49 - 1, 39 - 1, 40 - 1, 38 - 1, 54 - 1, 53 - 1, 55 - 1, 37 - 1, + 58 - 1, 59 - 1, 56 - 1, 42 - 1, 41 - 1, 43 - 1, 44 - 1, 60 - 1, + 45 - 1, 57 - 1, 48 - 1, 36 - 1, 61 - 1, 64 - 1, 63 - 1, 62 - 1 + }; + + assert(s_sorted_partition_order[34] == 34); + + int best_key_partition = 0; + + for (uint32_t partition_iter = 0; (partition_iter < total_partitions) && (best_err > 0); partition_iter++) + { + const uint32_t partition = s_sorted_partition_order[partition_iter]; + + // Check to see if we should bother evaluating this partition at all, depending on the best partition found from the first 14. + if (pComp_params->m_mode17_partition_estimation_filterbank) + { + if ((partition_iter >= 14) && (partition_iter <= 34)) + { + const uint32_t best_key_partition_bitmask = 1 << (best_key_partition + 1); + if ((g_partition_predictors[partition] & best_key_partition_bitmask) == 0) + { + if (partition_iter == 34) + break; + + continue; + } + } + } + + const uint8_t *pPartition = &g_bc7_partition2[partition * 16]; + + color_rgba subset_colors[2][16]; + uint32_t subset_total_colors[2] = { 0, 0 }; + for (uint32_t index = 0; index < 16; index++) + subset_colors[pPartition[index]][subset_total_colors[pPartition[index]]++] = pPixels[index]; + + uint64_t total_subset_err = 0; + for (uint32_t subset = 0; (subset < 2) && (total_subset_err < best_err); subset++) + { + if (mode == 7) + total_subset_err += color_cell_compression_est_mode7(subset_total_colors[subset], &subset_colors[subset][0], pComp_params->m_perceptual, pweights, best_err); + else + total_subset_err += color_cell_compression_est_mode1(subset_total_colors[subset], &subset_colors[subset][0], pComp_params->m_perceptual, pweights, best_err); + } + + if (partition < 16) + { + total_subset_err = (uint64_t)((double)total_subset_err * pComp_params->m_low_frequency_partition_weight + .5f); + } + + if (total_subset_err < best_err) + { + best_err = total_subset_err; + best_partition = partition; + } + + // If the checkerboard pattern doesn't get the highest ranking vs. the previous (lower frequency) patterns, then just stop now because statistically the subsequent patterns won't do well either. + if ((partition == 34) && (best_partition != 34)) + break; + + if (partition_iter == 13) + best_key_partition = best_partition; + + } // partition + + return best_partition; +} + +static void set_block_bits(uint8_t *pBytes, uint32_t val, uint32_t num_bits, uint32_t *pCur_ofs) +{ + assert((num_bits <= 32) && (val < (1ULL << num_bits))); + while (num_bits) + { + const uint32_t n = minimumu(8 - (*pCur_ofs & 7), num_bits); + pBytes[*pCur_ofs >> 3] |= (uint8_t)(val << (*pCur_ofs & 7)); + val >>= n; + num_bits -= n; + *pCur_ofs += n; + } + assert(*pCur_ofs <= 128); +} + +struct bc7_optimization_results +{ + uint32_t m_mode; + uint32_t m_partition; + uint8_t m_selectors[16]; + uint8_t m_alpha_selectors[16]; + color_rgba m_low[3]; + color_rgba m_high[3]; + uint32_t m_pbits[3][2]; + uint32_t m_rotation; + uint32_t m_index_selector; +}; + +void encode_bc7_block(void* pBlock, const bc7_optimization_results* pResults) +{ + assert(pResults->m_index_selector <= 1); + assert(pResults->m_rotation <= 3); + + const uint32_t best_mode = pResults->m_mode; + + const uint32_t total_subsets = g_bc7_num_subsets[best_mode]; + const uint32_t total_partitions = 1 << g_bc7_partition_bits[best_mode]; + //const uint32_t num_rotations = 1 << g_bc7_rotation_bits[best_mode]; + //const uint32_t num_index_selectors = (best_mode == 4) ? 2 : 1; + + const uint8_t* pPartition; + if (total_subsets == 1) + pPartition = &g_bc7_partition1[0]; + else if (total_subsets == 2) + pPartition = &g_bc7_partition2[pResults->m_partition * 16]; + else + pPartition = &g_bc7_partition3[pResults->m_partition * 16]; + + uint8_t color_selectors[16]; + memcpy(color_selectors, pResults->m_selectors, 16); + + uint8_t alpha_selectors[16]; + memcpy(alpha_selectors, pResults->m_alpha_selectors, 16); + + color_rgba low[3], high[3]; + memcpy(low, pResults->m_low, sizeof(low)); + memcpy(high, pResults->m_high, sizeof(high)); + + uint32_t pbits[3][2]; + memcpy(pbits, pResults->m_pbits, sizeof(pbits)); + + int anchor[3] = { -1, -1, -1 }; + + for (uint32_t k = 0; k < total_subsets; k++) + { + uint32_t anchor_index = 0; + if (k) + { + if ((total_subsets == 3) && (k == 1)) + anchor_index = g_bc7_table_anchor_index_third_subset_1[pResults->m_partition]; + else if ((total_subsets == 3) && (k == 2)) + anchor_index = g_bc7_table_anchor_index_third_subset_2[pResults->m_partition]; + else + anchor_index = g_bc7_table_anchor_index_second_subset[pResults->m_partition]; + } + + anchor[k] = anchor_index; + + const uint32_t color_index_bits = get_bc7_color_index_size(best_mode, pResults->m_index_selector); + const uint32_t num_color_indices = 1 << color_index_bits; + + if (color_selectors[anchor_index] & (num_color_indices >> 1)) + { + for (uint32_t i = 0; i < 16; i++) + if (pPartition[i] == k) + color_selectors[i] = (uint8_t)((num_color_indices - 1) - color_selectors[i]); + + if (get_bc7_mode_has_seperate_alpha_selectors(best_mode)) + { + for (uint32_t q = 0; q < 3; q++) + { + uint8_t t = low[k].m_c[q]; + low[k].m_c[q] = high[k].m_c[q]; + high[k].m_c[q] = t; + } + } + else + { + color_rgba tmp = low[k]; + low[k] = high[k]; + high[k] = tmp; + } + + if (!g_bc7_mode_has_shared_p_bits[best_mode]) + { + uint32_t t = pbits[k][0]; + pbits[k][0] = pbits[k][1]; + pbits[k][1] = t; + } + } + + if (get_bc7_mode_has_seperate_alpha_selectors(best_mode)) + { + const uint32_t alpha_index_bits = get_bc7_alpha_index_size(best_mode, pResults->m_index_selector); + const uint32_t num_alpha_indices = 1 << alpha_index_bits; + + if (alpha_selectors[anchor_index] & (num_alpha_indices >> 1)) + { + for (uint32_t i = 0; i < 16; i++) + if (pPartition[i] == k) + alpha_selectors[i] = (uint8_t)((num_alpha_indices - 1) - alpha_selectors[i]); + + uint8_t t = low[k].m_c[3]; + low[k].m_c[3] = high[k].m_c[3]; + high[k].m_c[3] = t; + } + } + } + + uint8_t* pBlock_bytes = (uint8_t*)(pBlock); + memset(pBlock_bytes, 0, BC7ENC_BLOCK_SIZE); + + uint32_t cur_bit_ofs = 0; + set_block_bits(pBlock_bytes, 1 << best_mode, best_mode + 1, &cur_bit_ofs); + + if ((best_mode == 4) || (best_mode == 5)) + set_block_bits(pBlock_bytes, pResults->m_rotation, 2, &cur_bit_ofs); + + if (best_mode == 4) + set_block_bits(pBlock_bytes, pResults->m_index_selector, 1, &cur_bit_ofs); + + if (total_partitions > 1) + set_block_bits(pBlock_bytes, pResults->m_partition, (total_partitions == 64) ? 6 : 4, &cur_bit_ofs); + + const uint32_t total_comps = (best_mode >= 4) ? 4 : 3; + for (uint32_t comp = 0; comp < total_comps; comp++) + { + for (uint32_t subset = 0; subset < total_subsets; subset++) + { + set_block_bits(pBlock_bytes, low[subset].m_c[comp], (comp == 3) ? g_bc7_alpha_precision_table[best_mode] : g_bc7_color_precision_table[best_mode], &cur_bit_ofs); + set_block_bits(pBlock_bytes, high[subset].m_c[comp], (comp == 3) ? g_bc7_alpha_precision_table[best_mode] : g_bc7_color_precision_table[best_mode], &cur_bit_ofs); + } + } + + if (g_bc7_mode_has_p_bits[best_mode]) + { + for (uint32_t subset = 0; subset < total_subsets; subset++) + { + set_block_bits(pBlock_bytes, pbits[subset][0], 1, &cur_bit_ofs); + if (!g_bc7_mode_has_shared_p_bits[best_mode]) + set_block_bits(pBlock_bytes, pbits[subset][1], 1, &cur_bit_ofs); + } + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + int idx = x + y * 4; + + uint32_t n = pResults->m_index_selector ? get_bc7_alpha_index_size(best_mode, pResults->m_index_selector) : get_bc7_color_index_size(best_mode, pResults->m_index_selector); + + if ((idx == anchor[0]) || (idx == anchor[1]) || (idx == anchor[2])) + n--; + + set_block_bits(pBlock_bytes, pResults->m_index_selector ? alpha_selectors[idx] : color_selectors[idx], n, &cur_bit_ofs); + } + } + + if (get_bc7_mode_has_seperate_alpha_selectors(best_mode)) + { + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + int idx = x + y * 4; + + uint32_t n = pResults->m_index_selector ? get_bc7_color_index_size(best_mode, pResults->m_index_selector) : get_bc7_alpha_index_size(best_mode, pResults->m_index_selector); + + if ((idx == anchor[0]) || (idx == anchor[1]) || (idx == anchor[2])) + n--; + + set_block_bits(pBlock_bytes, pResults->m_index_selector ? color_selectors[idx] : alpha_selectors[idx], n, &cur_bit_ofs); + } + } + } + + assert(cur_bit_ofs == 128); +} + +static void handle_alpha_block_mode5(const color_rgba* pPixels, const bc7enc_compress_block_params* pComp_params, color_cell_compressor_params* pParams, uint32_t lo_a, uint32_t hi_a, bc7_optimization_results* pOpt_results5, uint64_t* pMode5_err, uint64_t* pMode5_alpha_err) +{ + pParams->m_pSelector_weights = g_bc7_weights2; + pParams->m_pSelector_weightsx = (const vec4F*)g_bc7_weights2x; + pParams->m_num_selector_weights = 4; + + pParams->m_comp_bits = 7; + pParams->m_has_pbits = false; + pParams->m_endpoints_share_pbit = false; + pParams->m_has_alpha = false; + + pParams->m_perceptual = pComp_params->m_perceptual; + + pParams->m_num_pixels = 16; + pParams->m_pPixels = pPixels; + + color_cell_compressor_results results5; + results5.m_pSelectors = pOpt_results5->m_selectors; + + uint8_t selectors_temp[16]; + results5.m_pSelectors_temp = selectors_temp; + + *pMode5_err = color_cell_compression(5, pParams, &results5, pComp_params); + assert(*pMode5_err == results5.m_best_overall_err); + + pOpt_results5->m_low[0] = results5.m_low_endpoint; + pOpt_results5->m_high[0] = results5.m_high_endpoint; + + if (lo_a == hi_a) + { + *pMode5_alpha_err = 0; + pOpt_results5->m_low[0].m_c[3] = (uint8_t)lo_a; + pOpt_results5->m_high[0].m_c[3] = (uint8_t)hi_a; + memset(pOpt_results5->m_alpha_selectors, 0, sizeof(pOpt_results5->m_alpha_selectors)); + } + else + { + *pMode5_alpha_err = UINT64_MAX; + + const uint32_t total_passes = (pComp_params->m_uber_level >= 1) ? 3 : 2; + for (uint32_t pass = 0; pass < total_passes; pass++) + { + int32_t vals[4]; + vals[0] = lo_a; + vals[3] = hi_a; + + const int32_t w_s1 = 21, w_s2 = 43; + vals[1] = (vals[0] * (64 - w_s1) + vals[3] * w_s1 + 32) >> 6; + vals[2] = (vals[0] * (64 - w_s2) + vals[3] * w_s2 + 32) >> 6; + + uint8_t trial_alpha_selectors[16]; + + uint64_t trial_alpha_err = 0; + for (uint32_t i = 0; i < 16; i++) + { + const int32_t a = pParams->m_pPixels[i].m_c[3]; + + int s = 0; + int32_t be = iabs32(a - vals[0]); + int e = iabs32(a - vals[1]); if (e < be) { be = e; s = 1; } + e = iabs32(a - vals[2]); if (e < be) { be = e; s = 2; } + e = iabs32(a - vals[3]); if (e < be) { be = e; s = 3; } + + trial_alpha_selectors[i] = (uint8_t)s; + + uint32_t a_err = (uint32_t)(be * be) * pParams->m_weights[3]; + + trial_alpha_err += a_err; + } + + if (trial_alpha_err < *pMode5_alpha_err) + { + *pMode5_alpha_err = trial_alpha_err; + pOpt_results5->m_low[0].m_c[3] = (uint8_t)lo_a; + pOpt_results5->m_high[0].m_c[3] = (uint8_t)hi_a; + memcpy(pOpt_results5->m_alpha_selectors, trial_alpha_selectors, sizeof(pOpt_results5->m_alpha_selectors)); + } + + if (pass != (total_passes - 1U)) + { + float xl, xh; + compute_least_squares_endpoints_a(16, trial_alpha_selectors, (const vec4F*)g_bc7_weights2x, &xl, &xh, pParams->m_pPixels); + + uint32_t new_lo_a = clampi((int)floor(xl + .5f), 0, 255); + uint32_t new_hi_a = clampi((int)floor(xh + .5f), 0, 255); + if (new_lo_a > new_hi_a) + swapu(&new_lo_a, &new_hi_a); + + if ((new_lo_a == lo_a) && (new_hi_a == hi_a)) + break; + + lo_a = new_lo_a; + hi_a = new_hi_a; + } + } + + *pMode5_err += *pMode5_alpha_err; + } +} + +static void handle_alpha_block(void *pBlock, const color_rgba *pPixels, const bc7enc_compress_block_params *pComp_params, color_cell_compressor_params *pParams) +{ + assert((pComp_params->m_mode_mask & (1 << 6)) || (pComp_params->m_mode_mask & (1 << 5)) || (pComp_params->m_mode_mask & (1 << 7))); + + pParams->m_pSelector_weights = g_bc7_weights4; + pParams->m_pSelector_weightsx = (const vec4F *)g_bc7_weights4x; + pParams->m_num_selector_weights = 16; + pParams->m_comp_bits = 7; + pParams->m_has_pbits = true; + pParams->m_endpoints_share_pbit = false; + pParams->m_has_alpha = true; + pParams->m_perceptual = pComp_params->m_perceptual; + pParams->m_num_pixels = 16; + pParams->m_pPixels = pPixels; + + bc7_optimization_results opt_results6, opt_results5, opt_results7; + color_cell_compressor_results results6; + memset(&results6, 0, sizeof(results6)); + + uint64_t best_err = UINT64_MAX; + uint32_t best_mode = 0; + uint8_t selectors_temp[16]; + + if (pComp_params->m_mode_mask & (1 << 6)) + { + results6.m_pSelectors = opt_results6.m_selectors; + results6.m_pSelectors_temp = selectors_temp; + + best_err = (uint64_t)(color_cell_compression(6, pParams, &results6, pComp_params) * pComp_params->m_mode6_error_weight + .5f); + best_mode = 6; + } + + if ((best_err > 0) && (pComp_params->m_mode_mask & (1 << 5))) + { + uint32_t lo_a = 255, hi_a = 0; + for (uint32_t i = 0; i < 16; i++) + { + uint32_t a = pPixels[i].m_c[3]; + lo_a = minimumu(lo_a, a); + hi_a = maximumu(hi_a, a); + } + + uint64_t mode5_err, mode5_alpha_err; + handle_alpha_block_mode5(pPixels, pComp_params, pParams, lo_a, hi_a, &opt_results5, &mode5_err, &mode5_alpha_err); + + mode5_err = (uint64_t)(mode5_err * pComp_params->m_mode5_error_weight + .5f); + + if (mode5_err < best_err) + { + best_err = mode5_err; + best_mode = 5; + } + } + + if ((best_err > 0) && (pComp_params->m_mode_mask & (1 << 7))) + { + const uint32_t trial_partition = estimate_partition(pPixels, pComp_params, pParams->m_weights, 7); + + pParams->m_pSelector_weights = g_bc7_weights2; + pParams->m_pSelector_weightsx = (const vec4F*)g_bc7_weights2x; + pParams->m_num_selector_weights = 4; + pParams->m_comp_bits = 5; + pParams->m_has_pbits = true; + pParams->m_endpoints_share_pbit = false; + pParams->m_has_alpha = true; + + const uint8_t* pPartition = &g_bc7_partition2[trial_partition * 16]; + + color_rgba subset_colors[2][16]; + + uint32_t subset_total_colors7[2] = { 0, 0 }; + + uint8_t subset_pixel_index7[2][16]; + uint8_t subset_selectors7[2][16]; + color_cell_compressor_results subset_results7[2]; + + for (uint32_t idx = 0; idx < 16; idx++) + { + const uint32_t p = pPartition[idx]; + subset_colors[p][subset_total_colors7[p]] = pPixels[idx]; + subset_pixel_index7[p][subset_total_colors7[p]] = (uint8_t)idx; + subset_total_colors7[p]++; + } + + uint64_t trial_err = 0; + for (uint32_t subset = 0; subset < 2; subset++) + { + pParams->m_num_pixels = subset_total_colors7[subset]; + pParams->m_pPixels = &subset_colors[subset][0]; + + color_cell_compressor_results* pResults = &subset_results7[subset]; + pResults->m_pSelectors = &subset_selectors7[subset][0]; + pResults->m_pSelectors_temp = selectors_temp; + uint64_t err = color_cell_compression(7, pParams, pResults, pComp_params); + trial_err += err; + if ((uint64_t)(trial_err * pComp_params->m_mode7_error_weight + .5f) > best_err) + break; + + } // subset + + const uint64_t mode7_trial_err = (uint64_t)(trial_err * pComp_params->m_mode7_error_weight + .5f); + + if (mode7_trial_err < best_err) + { + best_err = mode7_trial_err; + best_mode = 7; + opt_results7.m_mode = 7; + opt_results7.m_partition = trial_partition; + opt_results7.m_index_selector = 0; + opt_results7.m_rotation = 0; + for (uint32_t subset = 0; subset < 2; subset++) + { + for (uint32_t i = 0; i < subset_total_colors7[subset]; i++) + opt_results7.m_selectors[subset_pixel_index7[subset][i]] = subset_selectors7[subset][i]; + opt_results7.m_low[subset] = subset_results7[subset].m_low_endpoint; + opt_results7.m_high[subset] = subset_results7[subset].m_high_endpoint; + opt_results7.m_pbits[subset][0] = subset_results7[subset].m_pbits[0]; + opt_results7.m_pbits[subset][1] = subset_results7[subset].m_pbits[1]; + } + } + } + + if (best_mode == 7) + { + encode_bc7_block(pBlock, &opt_results7); + } + else if (best_mode == 5) + { + opt_results5.m_mode = 5; + opt_results5.m_partition = 0; + opt_results5.m_rotation = 0; + opt_results5.m_index_selector = 0; + + encode_bc7_block(pBlock, &opt_results5); + } + else if (best_mode == 6) + { + opt_results6.m_mode = 6; + opt_results6.m_partition = 0; + opt_results6.m_low[0] = results6.m_low_endpoint; + opt_results6.m_high[0] = results6.m_high_endpoint; + opt_results6.m_pbits[0][0] = results6.m_pbits[0]; + opt_results6.m_pbits[0][1] = results6.m_pbits[1]; + opt_results6.m_rotation = 0; + opt_results6.m_index_selector = 0; + + encode_bc7_block(pBlock, &opt_results6); + } + else + { + assert(0); + } +} + +static void handle_opaque_block(void *pBlock, const color_rgba *pPixels, const bc7enc_compress_block_params *pComp_params, color_cell_compressor_params *pParams) +{ + assert((pComp_params->m_mode_mask & (1 << 6)) || (pComp_params->m_mode_mask & (1 << 1))); + + uint8_t selectors_temp[16]; + + bc7_optimization_results opt_results; + + uint64_t best_err = UINT64_MAX; + + pParams->m_perceptual = pComp_params->m_perceptual; + pParams->m_num_pixels = 16; + pParams->m_pPixels = pPixels; + pParams->m_has_alpha = false; + + opt_results.m_partition = 0; + opt_results.m_index_selector = 0; + opt_results.m_rotation = 0; + + // Mode 6 + if (pComp_params->m_mode_mask & (1 << 6)) + { + pParams->m_pSelector_weights = g_bc7_weights4; + pParams->m_pSelector_weightsx = (const vec4F*)g_bc7_weights4x; + pParams->m_num_selector_weights = 16; + pParams->m_comp_bits = 7; + pParams->m_has_pbits = true; + pParams->m_endpoints_share_pbit = false; + + color_cell_compressor_results results6; + results6.m_pSelectors = opt_results.m_selectors; + results6.m_pSelectors_temp = selectors_temp; + + best_err = (uint64_t)(color_cell_compression(6, pParams, &results6, pComp_params) * pComp_params->m_mode6_error_weight + .5f); + + opt_results.m_mode = 6; + opt_results.m_low[0] = results6.m_low_endpoint; + opt_results.m_high[0] = results6.m_high_endpoint; + opt_results.m_pbits[0][0] = results6.m_pbits[0]; + opt_results.m_pbits[0][1] = results6.m_pbits[1]; + } + + // Mode 1 + if ((best_err > 0) && (pComp_params->m_max_partitions > 0) && (pComp_params->m_mode_mask & (1 << 1))) + { + const uint32_t trial_partition = estimate_partition(pPixels, pComp_params, pParams->m_weights, 1); + + pParams->m_pSelector_weights = g_bc7_weights3; + pParams->m_pSelector_weightsx = (const vec4F *)g_bc7_weights3x; + pParams->m_num_selector_weights = 8; + pParams->m_comp_bits = 6; + pParams->m_has_pbits = true; + pParams->m_endpoints_share_pbit = true; + + const uint8_t *pPartition = &g_bc7_partition2[trial_partition * 16]; + + color_rgba subset_colors[2][16]; + + uint32_t subset_total_colors1[2] = { 0, 0 }; + + uint8_t subset_pixel_index1[2][16]; + uint8_t subset_selectors1[2][16]; + color_cell_compressor_results subset_results1[2]; + + for (uint32_t idx = 0; idx < 16; idx++) + { + const uint32_t p = pPartition[idx]; + subset_colors[p][subset_total_colors1[p]] = pPixels[idx]; + subset_pixel_index1[p][subset_total_colors1[p]] = (uint8_t)idx; + subset_total_colors1[p]++; + } + + uint64_t trial_err = 0; + for (uint32_t subset = 0; subset < 2; subset++) + { + pParams->m_num_pixels = subset_total_colors1[subset]; + pParams->m_pPixels = &subset_colors[subset][0]; + + color_cell_compressor_results *pResults = &subset_results1[subset]; + pResults->m_pSelectors = &subset_selectors1[subset][0]; + pResults->m_pSelectors_temp = selectors_temp; + uint64_t err = color_cell_compression(1, pParams, pResults, pComp_params); + + trial_err += err; + if ((uint64_t)(trial_err * pComp_params->m_mode1_error_weight + .5f) > best_err) + break; + + } // subset + + const uint64_t mode1_trial_err = (uint64_t)(trial_err * pComp_params->m_mode1_error_weight + .5f); + if (mode1_trial_err < best_err) + { + best_err = mode1_trial_err; + opt_results.m_mode = 1; + opt_results.m_partition = trial_partition; + for (uint32_t subset = 0; subset < 2; subset++) + { + for (uint32_t i = 0; i < subset_total_colors1[subset]; i++) + opt_results.m_selectors[subset_pixel_index1[subset][i]] = subset_selectors1[subset][i]; + opt_results.m_low[subset] = subset_results1[subset].m_low_endpoint; + opt_results.m_high[subset] = subset_results1[subset].m_high_endpoint; + opt_results.m_pbits[subset][0] = subset_results1[subset].m_pbits[0]; + } + } + } + + encode_bc7_block(pBlock, &opt_results); +} + +bool bc7enc_compress_block(void *pBlock, const void *pPixelsRGBA, const bc7enc_compress_block_params *pComp_params) +{ + assert(g_bc7_mode_1_optimal_endpoints[255][0].m_hi != 0); + + const color_rgba *pPixels = (const color_rgba *)(pPixelsRGBA); + + color_cell_compressor_params params; + if (pComp_params->m_perceptual) + { + // https://en.wikipedia.org/wiki/YCbCr#ITU-R_BT.709_conversion + const float pr_weight = (.5f / (1.0f - .2126f)) * (.5f / (1.0f - .2126f)); + const float pb_weight = (.5f / (1.0f - .0722f)) * (.5f / (1.0f - .0722f)); + params.m_weights[0] = (int)(pComp_params->m_weights[0] * 4.0f); + params.m_weights[1] = (int)(pComp_params->m_weights[1] * 4.0f * pr_weight); + params.m_weights[2] = (int)(pComp_params->m_weights[2] * 4.0f * pb_weight); + params.m_weights[3] = pComp_params->m_weights[3] * 4; + } + else + memcpy(params.m_weights, pComp_params->m_weights, sizeof(params.m_weights)); + + if (pComp_params->m_force_alpha) + { + handle_alpha_block(pBlock, pPixels, pComp_params, ¶ms); + return true; + } + + for (uint32_t i = 0; i < 16; i++) + { + if (pPixels[i].m_c[3] < 255) + { + handle_alpha_block(pBlock, pPixels, pComp_params, ¶ms); + return true; + } + } + handle_opaque_block(pBlock, pPixels, pComp_params, ¶ms); + return false; +} + +static const uint8_t g_tdefl_small_dist_extra[512] = +{ + 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7 +}; + +static const uint8_t g_tdefl_large_dist_extra[128] = +{ + 0, 0, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13 +}; + +static inline uint32_t compute_match_cost_estimate(uint32_t dist, uint32_t match_len_in_bytes) +{ + assert(match_len_in_bytes <= 258); + + uint32_t len_cost = 6; + if (match_len_in_bytes >= 12) + len_cost = 9; + else if (match_len_in_bytes >= 8) + len_cost = 8; + else if (match_len_in_bytes >= 6) + len_cost = 7; + + uint32_t dist_cost = 5; + if (dist < 512) + dist_cost += g_tdefl_small_dist_extra[dist & 511]; + else + { + dist_cost += g_tdefl_large_dist_extra[std::min(dist, 32767) >> 8]; + while (dist >= 32768) + { + dist_cost++; + dist >>= 1; + } + } + return len_cost + dist_cost; +} + +class tracked_stat +{ +public: + tracked_stat() { clear(); } + + void clear() { m_num = 0; m_total = 0; m_total2 = 0; } + + void update(uint32_t val) { m_num++; m_total += val; m_total2 += val * val; } + + tracked_stat& operator += (uint32_t val) { update(val); return *this; } + + uint32_t get_number_of_values() { return m_num; } + uint64_t get_total() const { return m_total; } + uint64_t get_total2() const { return m_total2; } + + float get_average() const { return m_num ? (float)m_total / m_num : 0.0f; }; + float get_std_dev() const { return m_num ? sqrtf((float)(m_num * m_total2 - m_total * m_total)) / m_num : 0.0f; } + float get_variance() const { float s = get_std_dev(); return s * s; } + +private: + uint32_t m_num; + uint64_t m_total; + uint64_t m_total2; +}; + +static inline float compute_block_max_std_dev(const color_rgba* pPixels) +{ + tracked_stat r_stats, g_stats, b_stats, a_stats; + + for (uint32_t i = 0; i < 16; i++) + { + r_stats.update(pPixels[i].m_c[0]); + g_stats.update(pPixels[i].m_c[1]); + b_stats.update(pPixels[i].m_c[2]); + a_stats.update(pPixels[i].m_c[3]); + } + + return std::max(std::max(std::max(r_stats.get_std_dev(), g_stats.get_std_dev()), b_stats.get_std_dev()), a_stats.get_std_dev()); +} + +struct bc7_block +{ + uint8_t m_bytes[16]; + + uint32_t get_mode() const + { + uint32_t bc7_mode = 0; + while (((m_bytes[0] & (1 << bc7_mode)) == 0) && (bc7_mode < 8)) + bc7_mode++; + return bc7_mode; + } +}; + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +If you use this software in a product, attribution / credits is requested but not required. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright(c) 2020-2021 Richard Geldreich, Jr. +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. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain(www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non - commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain.We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors.We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +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 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. +------------------------------------------------------------------------------ +*/ diff --git a/external/bc7enc_rdo/bc7enc.h b/external/bc7enc_rdo/bc7enc.h new file mode 100644 index 0000000000..8794c15d5c --- /dev/null +++ b/external/bc7enc_rdo/bc7enc.h @@ -0,0 +1,123 @@ +// File: bc7enc.h - Richard Geldreich, Jr. - MIT license or public domain (see end of bc7enc.c) +// If you use this software in a product, attribution / credits is requested but not required. +#include +#include +#include +#include + +#define BC7ENC_BLOCK_SIZE (16) +#define BC7ENC_MAX_PARTITIONS (64) +#define BC7ENC_MAX_UBER_LEVEL (4) + +struct color_rgba { uint8_t m_c[4]; }; + +struct bc7enc_compress_block_params +{ + uint32_t m_mode_mask; + + // m_max_partitions may range from 0 (disables mode 1) to BC7ENC_MAX_PARTITIONS. The higher this value, the slower the compressor, but the higher the quality. + uint32_t m_max_partitions; + + // Relative RGBA or YCbCrA weights. + uint32_t m_weights[4]; + + // m_uber_level may range from 0 to BC7ENC_MAX_UBER_LEVEL. The higher this value, the slower the compressor, but the higher the quality. + uint32_t m_uber_level; + + // If m_perceptual is true, colorspace error is computed in YCbCr space, otherwise RGB. + bool m_perceptual; + + // Set m_try_least_squares to false for slightly faster/lower quality compression. + bool m_try_least_squares; + + // When m_mode17_partition_estimation_filterbank, the mode1 partition estimator skips lesser used partition patterns unless they are strongly predicted to be potentially useful. + // There's a slight loss in quality with this enabled (around .08 dB RGB PSNR or .05 dB Y PSNR), but up to a 11% gain in speed depending on the other settings. + bool m_mode17_partition_estimation_filterbank; + + bool m_force_alpha; + + bool m_force_selectors; + uint8_t m_selectors[16]; + + bool m_quant_mode6_endpoints; + bool m_bias_mode1_pbits; + + float m_pbit1_weight; + + float m_mode1_error_weight; + float m_mode5_error_weight; + float m_mode6_error_weight; + float m_mode7_error_weight; + + float m_low_frequency_partition_weight; + + void clear() + { + memset(this, 0, sizeof(*this)); + } + + void print() + { + printf("Mode mask: 0x%X\n", m_mode_mask); + printf("Max partitions: %u\n", m_max_partitions); + printf("Weights: %u %u %u %u\n", m_weights[0], m_weights[1], m_weights[2], m_weights[3]); + printf("Uber level: %u\n", m_uber_level); + printf("Perceptual: %u\n", m_perceptual); + printf("Try least squares: %u\n", m_try_least_squares); + printf("Mode 1/7 partition estimation filterbank: %u\n", m_mode17_partition_estimation_filterbank); + printf("Force alpha: %u\n", m_force_alpha); + printf("Quant mode 6 endpoints: %u\n", m_quant_mode6_endpoints); + printf("Bias mode 1 p-bits: %u\n", m_bias_mode1_pbits); + printf("p-bit 1 weight: %f\n", m_pbit1_weight); + printf("Mode error weights: %f %f %f %f\n", m_mode1_error_weight, m_mode5_error_weight, m_mode6_error_weight, m_mode7_error_weight); + printf("Low frequency partition weight: %f\n", m_low_frequency_partition_weight); + } +}; + +inline void bc7enc_compress_block_params_init_linear_weights(bc7enc_compress_block_params *p) +{ + p->m_perceptual = false; + p->m_weights[0] = 1; + p->m_weights[1] = 1; + p->m_weights[2] = 1; + p->m_weights[3] = 1; +} + +inline void bc7enc_compress_block_params_init_perceptual_weights(bc7enc_compress_block_params *p) +{ + p->m_perceptual = true; + p->m_weights[0] = 128; + p->m_weights[1] = 64; + p->m_weights[2] = 16; + p->m_weights[3] = 32; +} + +inline void bc7enc_compress_block_params_init(bc7enc_compress_block_params *p) +{ + p->m_mode_mask = UINT32_MAX; + p->m_max_partitions = BC7ENC_MAX_PARTITIONS; + p->m_try_least_squares = true; + p->m_mode17_partition_estimation_filterbank = true; + p->m_uber_level = 0; + p->m_force_selectors = false; + p->m_force_alpha = false; + p->m_quant_mode6_endpoints = false; + p->m_bias_mode1_pbits = false; + p->m_pbit1_weight = 1.0f; + p->m_mode1_error_weight = 1.0f; + p->m_mode5_error_weight = 1.0f; + p->m_mode6_error_weight = 1.0f; + p->m_mode7_error_weight = 1.0f; + p->m_low_frequency_partition_weight = 1.0f; + bc7enc_compress_block_params_init_perceptual_weights(p); +} + +// bc7enc_compress_block_init() MUST be called before calling bc7enc_compress_block() (or you'll get artifacts). +void bc7enc_compress_block_init(); + +// Packs a single block of 16x16 RGBA pixels (R first in memory) to 128-bit BC7 block pBlock, using either mode 1 and/or 6. +// Alpha blocks will always use mode 6, and by default opaque blocks will use either modes 1 or 6. +// Returns true if the block had any pixels with alpha < 255, otherwise it return false. (This is not an error code - a block is always encoded.) +bool bc7enc_compress_block(void *pBlock, const void *pPixelsRGBA, const bc7enc_compress_block_params *pComp_params); + + diff --git a/external/bc7enc_rdo/build_msvc.bat b/external/bc7enc_rdo/build_msvc.bat new file mode 100644 index 0000000000..1a77d87102 --- /dev/null +++ b/external/bc7enc_rdo/build_msvc.bat @@ -0,0 +1 @@ +cmake -D SUPPORT_BC7E=TRUE . diff --git a/external/bc7enc_rdo/dds_defs.h b/external/bc7enc_rdo/dds_defs.h new file mode 100644 index 0000000000..034cccfacc --- /dev/null +++ b/external/bc7enc_rdo/dds_defs.h @@ -0,0 +1,286 @@ +// File: dds_defs.h +// DX9/10 .DDS file header definitions. +#pragma once + +#define PIXEL_FMT_FOURCC(a, b, c, d) ((a) | ((b) << 8U) | ((c) << 16U) | ((d) << 24U)) + +enum pixel_format +{ + PIXEL_FMT_INVALID = 0, + + PIXEL_FMT_DXT1 = PIXEL_FMT_FOURCC('D', 'X', 'T', '1'), + PIXEL_FMT_DXT2 = PIXEL_FMT_FOURCC('D', 'X', 'T', '2'), + PIXEL_FMT_DXT3 = PIXEL_FMT_FOURCC('D', 'X', 'T', '3'), + PIXEL_FMT_DXT4 = PIXEL_FMT_FOURCC('D', 'X', 'T', '4'), + PIXEL_FMT_DXT5 = PIXEL_FMT_FOURCC('D', 'X', 'T', '5'), + PIXEL_FMT_3DC = PIXEL_FMT_FOURCC('A', 'T', 'I', '2'), // DXN_YX + PIXEL_FMT_DXN = PIXEL_FMT_FOURCC('A', '2', 'X', 'Y'), // DXN_XY + PIXEL_FMT_DXT5A = PIXEL_FMT_FOURCC('A', 'T', 'I', '1'), // ATI1N, http://developer.amd.com/media/gpu_assets/Radeon_X1x00_Programming_Guide.pdf + + // Non-standard formats (some of these are supported by ATI's Compressonator) + PIXEL_FMT_DXT5_CCxY = PIXEL_FMT_FOURCC('C', 'C', 'x', 'Y'), + PIXEL_FMT_DXT5_xGxR = PIXEL_FMT_FOURCC('x', 'G', 'x', 'R'), + PIXEL_FMT_DXT5_xGBR = PIXEL_FMT_FOURCC('x', 'G', 'B', 'R'), + PIXEL_FMT_DXT5_AGBR = PIXEL_FMT_FOURCC('A', 'G', 'B', 'R'), + + PIXEL_FMT_DXT1A = PIXEL_FMT_FOURCC('D', 'X', '1', 'A'), + PIXEL_FMT_ETC1 = PIXEL_FMT_FOURCC('E', 'T', 'C', '1'), + + PIXEL_FMT_R8G8B8 = PIXEL_FMT_FOURCC('R', 'G', 'B', 'x'), + PIXEL_FMT_L8 = PIXEL_FMT_FOURCC('L', 'x', 'x', 'x'), + PIXEL_FMT_A8 = PIXEL_FMT_FOURCC('x', 'x', 'x', 'A'), + PIXEL_FMT_A8L8 = PIXEL_FMT_FOURCC('L', 'x', 'x', 'A'), + PIXEL_FMT_A8R8G8B8 = PIXEL_FMT_FOURCC('R', 'G', 'B', 'A') +}; + +const uint32_t cDDSMaxImageDimensions = 8192U; + +// Total size of header is sizeof(uint32)+cDDSSizeofDDSurfaceDesc2; +const uint32_t cDDSSizeofDDSurfaceDesc2 = 124; + +// "DDS " +const uint32_t cDDSFileSignature = 0x20534444; + +struct DDCOLORKEY +{ + uint32_t dwUnused0; + uint32_t dwUnused1; +}; + +struct DDPIXELFORMAT +{ + uint32_t dwSize; + uint32_t dwFlags; + uint32_t dwFourCC; + uint32_t dwRGBBitCount; // ATI compressonator will place a FOURCC code here for swizzled/cooked DXTn formats + uint32_t dwRBitMask; + uint32_t dwGBitMask; + uint32_t dwBBitMask; + uint32_t dwRGBAlphaBitMask; +}; + +struct DDSCAPS2 +{ + uint32_t dwCaps; + uint32_t dwCaps2; + uint32_t dwCaps3; + uint32_t dwCaps4; +}; + +struct DDSURFACEDESC2 +{ + uint32_t dwSize; + uint32_t dwFlags; + uint32_t dwHeight; + uint32_t dwWidth; + union + { + int32_t lPitch; + uint32_t dwLinearSize; + }; + uint32_t dwBackBufferCount; + uint32_t dwMipMapCount; + uint32_t dwAlphaBitDepth; + uint32_t dwUnused0; + uint32_t lpSurface; + DDCOLORKEY unused0; + DDCOLORKEY unused1; + DDCOLORKEY unused2; + DDCOLORKEY unused3; + DDPIXELFORMAT ddpfPixelFormat; + DDSCAPS2 ddsCaps; + uint32_t dwUnused1; +}; + +const uint32_t DDSD_CAPS = 0x00000001; +const uint32_t DDSD_HEIGHT = 0x00000002; +const uint32_t DDSD_WIDTH = 0x00000004; +const uint32_t DDSD_PITCH = 0x00000008; + +const uint32_t DDSD_BACKBUFFERCOUNT = 0x00000020; +const uint32_t DDSD_ZBUFFERBITDEPTH = 0x00000040; +const uint32_t DDSD_ALPHABITDEPTH = 0x00000080; + +const uint32_t DDSD_LPSURFACE = 0x00000800; + +const uint32_t DDSD_PIXELFORMAT = 0x00001000; +const uint32_t DDSD_CKDESTOVERLAY = 0x00002000; +const uint32_t DDSD_CKDESTBLT = 0x00004000; +const uint32_t DDSD_CKSRCOVERLAY = 0x00008000; + +const uint32_t DDSD_CKSRCBLT = 0x00010000; +const uint32_t DDSD_MIPMAPCOUNT = 0x00020000; +const uint32_t DDSD_REFRESHRATE = 0x00040000; +const uint32_t DDSD_LINEARSIZE = 0x00080000; + +const uint32_t DDSD_TEXTURESTAGE = 0x00100000; +const uint32_t DDSD_FVF = 0x00200000; +const uint32_t DDSD_SRCVBHANDLE = 0x00400000; +const uint32_t DDSD_DEPTH = 0x00800000; + +const uint32_t DDSD_ALL = 0x00fff9ee; + +const uint32_t DDPF_ALPHAPIXELS = 0x00000001; +const uint32_t DDPF_ALPHA = 0x00000002; +const uint32_t DDPF_FOURCC = 0x00000004; +const uint32_t DDPF_PALETTEINDEXED8 = 0x00000020; +const uint32_t DDPF_RGB = 0x00000040; +const uint32_t DDPF_LUMINANCE = 0x00020000; + +const uint32_t DDSCAPS_COMPLEX = 0x00000008; +const uint32_t DDSCAPS_TEXTURE = 0x00001000; +const uint32_t DDSCAPS_MIPMAP = 0x00400000; + +const uint32_t DDSCAPS2_CUBEMAP = 0x00000200; +const uint32_t DDSCAPS2_CUBEMAP_POSITIVEX = 0x00000400; +const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEX = 0x00000800; + +const uint32_t DDSCAPS2_CUBEMAP_POSITIVEY = 0x00001000; +const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEY = 0x00002000; +const uint32_t DDSCAPS2_CUBEMAP_POSITIVEZ = 0x00004000; +const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x00008000; + +const uint32_t DDSCAPS2_VOLUME = 0x00200000; + +typedef enum DXGI_FORMAT +{ + DXGI_FORMAT_UNKNOWN = 0, + DXGI_FORMAT_R32G32B32A32_TYPELESS = 1, + DXGI_FORMAT_R32G32B32A32_FLOAT = 2, + DXGI_FORMAT_R32G32B32A32_UINT = 3, + DXGI_FORMAT_R32G32B32A32_SINT = 4, + DXGI_FORMAT_R32G32B32_TYPELESS = 5, + DXGI_FORMAT_R32G32B32_FLOAT = 6, + DXGI_FORMAT_R32G32B32_UINT = 7, + DXGI_FORMAT_R32G32B32_SINT = 8, + DXGI_FORMAT_R16G16B16A16_TYPELESS = 9, + DXGI_FORMAT_R16G16B16A16_FLOAT = 10, + DXGI_FORMAT_R16G16B16A16_UNORM = 11, + DXGI_FORMAT_R16G16B16A16_UINT = 12, + DXGI_FORMAT_R16G16B16A16_SNORM = 13, + DXGI_FORMAT_R16G16B16A16_SINT = 14, + DXGI_FORMAT_R32G32_TYPELESS = 15, + DXGI_FORMAT_R32G32_FLOAT = 16, + DXGI_FORMAT_R32G32_UINT = 17, + DXGI_FORMAT_R32G32_SINT = 18, + DXGI_FORMAT_R32G8X24_TYPELESS = 19, + DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 20, + DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS = 21, + DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22, + DXGI_FORMAT_R10G10B10A2_TYPELESS = 23, + DXGI_FORMAT_R10G10B10A2_UNORM = 24, + DXGI_FORMAT_R10G10B10A2_UINT = 25, + DXGI_FORMAT_R11G11B10_FLOAT = 26, + DXGI_FORMAT_R8G8B8A8_TYPELESS = 27, + DXGI_FORMAT_R8G8B8A8_UNORM = 28, + DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29, + DXGI_FORMAT_R8G8B8A8_UINT = 30, + DXGI_FORMAT_R8G8B8A8_SNORM = 31, + DXGI_FORMAT_R8G8B8A8_SINT = 32, + DXGI_FORMAT_R16G16_TYPELESS = 33, + DXGI_FORMAT_R16G16_FLOAT = 34, + DXGI_FORMAT_R16G16_UNORM = 35, + DXGI_FORMAT_R16G16_UINT = 36, + DXGI_FORMAT_R16G16_SNORM = 37, + DXGI_FORMAT_R16G16_SINT = 38, + DXGI_FORMAT_R32_TYPELESS = 39, + DXGI_FORMAT_D32_FLOAT = 40, + DXGI_FORMAT_R32_FLOAT = 41, + DXGI_FORMAT_R32_UINT = 42, + DXGI_FORMAT_R32_SINT = 43, + DXGI_FORMAT_R24G8_TYPELESS = 44, + DXGI_FORMAT_D24_UNORM_S8_UINT = 45, + DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 46, + DXGI_FORMAT_X24_TYPELESS_G8_UINT = 47, + DXGI_FORMAT_R8G8_TYPELESS = 48, + DXGI_FORMAT_R8G8_UNORM = 49, + DXGI_FORMAT_R8G8_UINT = 50, + DXGI_FORMAT_R8G8_SNORM = 51, + DXGI_FORMAT_R8G8_SINT = 52, + DXGI_FORMAT_R16_TYPELESS = 53, + DXGI_FORMAT_R16_FLOAT = 54, + DXGI_FORMAT_D16_UNORM = 55, + DXGI_FORMAT_R16_UNORM = 56, + DXGI_FORMAT_R16_UINT = 57, + DXGI_FORMAT_R16_SNORM = 58, + DXGI_FORMAT_R16_SINT = 59, + DXGI_FORMAT_R8_TYPELESS = 60, + DXGI_FORMAT_R8_UNORM = 61, + DXGI_FORMAT_R8_UINT = 62, + DXGI_FORMAT_R8_SNORM = 63, + DXGI_FORMAT_R8_SINT = 64, + DXGI_FORMAT_A8_UNORM = 65, + DXGI_FORMAT_R1_UNORM = 66, + DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67, + DXGI_FORMAT_R8G8_B8G8_UNORM = 68, + DXGI_FORMAT_G8R8_G8B8_UNORM = 69, + DXGI_FORMAT_BC1_TYPELESS = 70, + DXGI_FORMAT_BC1_UNORM = 71, + DXGI_FORMAT_BC1_UNORM_SRGB = 72, + DXGI_FORMAT_BC2_TYPELESS = 73, + DXGI_FORMAT_BC2_UNORM = 74, + DXGI_FORMAT_BC2_UNORM_SRGB = 75, + DXGI_FORMAT_BC3_TYPELESS = 76, + DXGI_FORMAT_BC3_UNORM = 77, + DXGI_FORMAT_BC3_UNORM_SRGB = 78, + DXGI_FORMAT_BC4_TYPELESS = 79, + DXGI_FORMAT_BC4_UNORM = 80, + DXGI_FORMAT_BC4_SNORM = 81, + DXGI_FORMAT_BC5_TYPELESS = 82, + DXGI_FORMAT_BC5_UNORM = 83, + DXGI_FORMAT_BC5_SNORM = 84, + DXGI_FORMAT_B5G6R5_UNORM = 85, + DXGI_FORMAT_B5G5R5A1_UNORM = 86, + DXGI_FORMAT_B8G8R8A8_UNORM = 87, + DXGI_FORMAT_B8G8R8X8_UNORM = 88, + DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89, + DXGI_FORMAT_B8G8R8A8_TYPELESS = 90, + DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91, + DXGI_FORMAT_B8G8R8X8_TYPELESS = 92, + DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93, + DXGI_FORMAT_BC6H_TYPELESS = 94, + DXGI_FORMAT_BC6H_UF16 = 95, + DXGI_FORMAT_BC6H_SF16 = 96, + DXGI_FORMAT_BC7_TYPELESS = 97, + DXGI_FORMAT_BC7_UNORM = 98, + DXGI_FORMAT_BC7_UNORM_SRGB = 99, + DXGI_FORMAT_AYUV = 100, + DXGI_FORMAT_Y410 = 101, + DXGI_FORMAT_Y416 = 102, + DXGI_FORMAT_NV12 = 103, + DXGI_FORMAT_P010 = 104, + DXGI_FORMAT_P016 = 105, + DXGI_FORMAT_420_OPAQUE = 106, + DXGI_FORMAT_YUY2 = 107, + DXGI_FORMAT_Y210 = 108, + DXGI_FORMAT_Y216 = 109, + DXGI_FORMAT_NV11 = 110, + DXGI_FORMAT_AI44 = 111, + DXGI_FORMAT_IA44 = 112, + DXGI_FORMAT_P8 = 113, + DXGI_FORMAT_A8P8 = 114, + DXGI_FORMAT_B4G4R4A4_UNORM = 115, + DXGI_FORMAT_P208 = 130, + DXGI_FORMAT_V208 = 131, + DXGI_FORMAT_V408 = 132, + DXGI_FORMAT_FORCE_UINT = 0xffffffff +} DXGI_FORMAT; + +enum D3D10_RESOURCE_DIMENSION +{ + D3D10_RESOURCE_DIMENSION_UNKNOWN = 0, + D3D10_RESOURCE_DIMENSION_BUFFER = 1, + D3D10_RESOURCE_DIMENSION_TEXTURE1D = 2, + D3D10_RESOURCE_DIMENSION_TEXTURE2D = 3, + D3D10_RESOURCE_DIMENSION_TEXTURE3D = 4 +}; + +struct DDS_HEADER_DXT10 +{ + DXGI_FORMAT dxgiFormat; + D3D10_RESOURCE_DIMENSION resourceDimension; + uint32_t miscFlag; + uint32_t arraySize; + uint32_t miscFlags2; +}; + diff --git a/external/bc7enc_rdo/ert.cpp b/external/bc7enc_rdo/ert.cpp new file mode 100644 index 0000000000..4a37f953d1 --- /dev/null +++ b/external/bc7enc_rdo/ert.cpp @@ -0,0 +1,704 @@ +#include "ert.h" +#include +#include +#include +#include "utils.h" + +#define ERT_FAVOR_CONT_AND_REP0_MATCHES (1) +#define ERT_FAVOR_REP0_MATCHES (0) + +namespace ert +{ + const uint32_t MAX_BLOCK_PIXELS = 12 * 12; + const uint32_t MAX_BLOCK_SIZE_IN_BYTES = 256; + const uint32_t MIN_MATCH_LEN = 3; + const float LITERAL_BITS = 13.0f; + const float MATCH_CONTINUE_BITS = 1.0f; + const float MATCH_REP0_BITS = 4.0f; + + static inline float clampf(float value, float low, float high) { if (value < low) value = low; else if (value > high) value = high; return value; } + template inline F lerp(F a, F b, F s) { return a + (b - a) * s; } + + static const uint8_t g_tdefl_small_dist_extra[512] = + { + 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7 + }; + + static const uint8_t g_tdefl_large_dist_extra[128] = + { + 0, 0, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13 + }; + + static inline uint32_t compute_match_cost_estimate(uint32_t dist, uint32_t match_len_in_bytes) + { + assert(match_len_in_bytes <= 258); + + uint32_t len_cost = 6; + if (match_len_in_bytes >= 12) + len_cost = 9; + else if (match_len_in_bytes >= 8) + len_cost = 8; + else if (match_len_in_bytes >= 6) + len_cost = 7; + + uint32_t dist_cost = 5; + if (dist < 512) + dist_cost += g_tdefl_small_dist_extra[dist & 511]; + else + { + dist_cost += g_tdefl_large_dist_extra[std::min(dist, 32767) >> 8]; + while (dist >= 32768) + { + dist_cost++; + dist >>= 1; + } + } + return len_cost + dist_cost; + } + + class tracked_stat + { + public: + tracked_stat() { clear(); } + + void clear() { m_num = 0; m_total = 0; m_total2 = 0; } + + void update(uint32_t val) { m_num++; m_total += val; m_total2 += val * val; } + + tracked_stat& operator += (uint32_t val) { update(val); return *this; } + + uint32_t get_number_of_values() { return m_num; } + uint64_t get_total() const { return m_total; } + uint64_t get_total2() const { return m_total2; } + + float get_average() const { return m_num ? (float)m_total / m_num : 0.0f; }; + float get_std_dev() const { return m_num ? sqrtf((float)(m_num * m_total2 - m_total * m_total)) / m_num : 0.0f; } + float get_variance() const { float s = get_std_dev(); return s * s; } + + private: + uint32_t m_num; + uint64_t m_total; + uint64_t m_total2; + }; + + static inline float compute_block_max_std_dev(const color_rgba* pPixels, uint32_t block_width, uint32_t block_height, uint32_t num_comps) + { + tracked_stat comp_stats[4]; + + for (uint32_t y = 0; y < block_height; y++) + { + for (uint32_t x = 0; x < block_width; x++) + { + const color_rgba* pPixel = pPixels + x + y * block_width; + + for (uint32_t c = 0; c < num_comps; c++) + comp_stats[c].update(pPixel->m_c[c]); + } + } + + float max_std_dev = 0.0f; + for (uint32_t i = 0; i < num_comps; i++) + max_std_dev = std::max(max_std_dev, comp_stats[i].get_std_dev()); + return max_std_dev; + } + + static inline float compute_block_mse(const color_rgba* pPixelsA, const color_rgba* pPixelsB, uint32_t block_width, uint32_t block_height, uint32_t total_block_pixels, uint32_t num_comps, const uint32_t weights[4], float one_over_total_color_weight) + { + uint64_t total_err = 0; + + if ((block_width == 4) && (block_height == 4) && (num_comps == 4)) + { + if ((weights[0] == 1) && (weights[1] == 1) && (weights[2] == 1) && (weights[3] == 1)) + { + for (uint32_t i = 0; i < 16; i++) + { + const color_rgba* pA = pPixelsA + i; + const color_rgba* pB = pPixelsB + i; + + const int dr = pA->m_c[0] - pB->m_c[0]; + const int dg = pA->m_c[1] - pB->m_c[1]; + const int db = pA->m_c[2] - pB->m_c[2]; + const int da = pA->m_c[3] - pB->m_c[3]; + + total_err += dr * dr + dg * dg + db * db + da * da; + } + } + else + { + for (uint32_t i = 0; i < 16; i++) + { + const color_rgba* pA = pPixelsA + i; + const color_rgba* pB = pPixelsB + i; + + const int dr = pA->m_c[0] - pB->m_c[0]; + const int dg = pA->m_c[1] - pB->m_c[1]; + const int db = pA->m_c[2] - pB->m_c[2]; + const int da = pA->m_c[3] - pB->m_c[3]; + + total_err += weights[0] * dr * dr + weights[1] * dg * dg + weights[2] * db * db + weights[3] * da * da; + } + } + } + else if ((block_width == 4) && (block_height == 4) && (num_comps == 3)) + { + for (uint32_t y = 0; y < 4; y++) + { + const uint32_t y_ofs = y * 4; + for (uint32_t x = 0; x < 4; x++) + { + const color_rgba* pA = pPixelsA + x + y_ofs; + const color_rgba* pB = pPixelsB + x + y_ofs; + + const int dr = pA->m_c[0] - pB->m_c[0]; + const int dg = pA->m_c[1] - pB->m_c[1]; + const int db = pA->m_c[2] - pB->m_c[2]; + + total_err += weights[0] * dr * dr + weights[1] * dg * dg + weights[2] * db * db; + } + } + } + else if ((block_width == 4) && (block_height == 4) && (num_comps == 2)) + { + for (uint32_t y = 0; y < 4; y++) + { + const uint32_t y_ofs = y * 4; + for (uint32_t x = 0; x < 4; x++) + { + const color_rgba* pA = pPixelsA + x + y_ofs; + const color_rgba* pB = pPixelsB + x + y_ofs; + + const int dr = pA->m_c[0] - pB->m_c[0]; + const int dg = pA->m_c[1] - pB->m_c[1]; + + total_err += weights[0] * dr * dr + weights[1] * dg * dg; + } + } + } + else if ((block_width == 4) && (block_height == 4) && (num_comps == 1)) + { + for (uint32_t y = 0; y < 4; y++) + { + const uint32_t y_ofs = y * 4; + for (uint32_t x = 0; x < 4; x++) + { + const color_rgba* pA = pPixelsA + x + y_ofs; + const color_rgba* pB = pPixelsB + x + y_ofs; + + const int dr = pA->m_c[0] - pB->m_c[0]; + + total_err += weights[0] * dr * dr; + } + } + } + else + { + for (uint32_t y = 0; y < block_height; y++) + { + const uint32_t y_ofs = y * block_width; + for (uint32_t x = 0; x < block_width; x++) + { + const color_rgba* pA = pPixelsA + x + y_ofs; + const color_rgba* pB = pPixelsB + x + y_ofs; + + for (uint32_t c = 0; c < num_comps; c++) + { + const int d = pA->m_c[c] - pB->m_c[c]; + total_err += weights[c] * d * d; + } + } + } + } + + return total_err * (one_over_total_color_weight / total_block_pixels); + } + + uint32_t hash_hsieh(const uint8_t* pBuf, size_t len, uint32_t salt) + { + if (!pBuf || !len) + return 0; + + uint32_t h = static_cast(len + (salt << 16)); + + const uint32_t bytes_left = len & 3; + len >>= 2; + + while (len--) + { + const uint16_t* pWords = reinterpret_cast(pBuf); + + h += pWords[0]; + + const uint32_t t = (pWords[1] << 11) ^ h; + h = (h << 16) ^ t; + + pBuf += sizeof(uint32_t); + + h += h >> 11; + } + + switch (bytes_left) + { + case 1: + h += *reinterpret_cast(pBuf); + h ^= h << 10; + h += h >> 1; + break; + case 2: + h += *reinterpret_cast(pBuf); + h ^= h << 11; + h += h >> 17; + break; + case 3: + h += *reinterpret_cast(pBuf); + h ^= h << 16; + h ^= (static_cast(pBuf[sizeof(uint16_t)])) << 18; + h += h >> 11; + break; + default: + break; + } + + h ^= h << 3; + h += h >> 5; + h ^= h << 4; + h += h >> 17; + h ^= h << 25; + h += h >> 6; + + return h; + } + + // BC7 entropy reduction transform with Deflate/LZMA/LZHAM optimizations + bool reduce_entropy(void* pBlocks, uint32_t num_blocks, + uint32_t total_block_stride_in_bytes, uint32_t block_size_to_optimize_in_bytes, uint32_t block_width, uint32_t block_height, uint32_t num_comps, + const color_rgba* pBlock_pixels, const reduce_entropy_params& params, uint32_t& total_modified, + pUnpack_block_func pUnpack_block_func, void* pUnpack_block_func_user_data, + std::vector* pBlock_mse_scales) + { + assert(total_block_stride_in_bytes && block_size_to_optimize_in_bytes); + assert(total_block_stride_in_bytes >= block_size_to_optimize_in_bytes); + + assert(num_comps >= 1 && num_comps <= 4); + for (uint32_t i = num_comps; i < 4; i++) + { + assert(!params.m_color_weights[i]); + if (params.m_color_weights[i]) + return false; + } + + const uint32_t total_color_weight = params.m_color_weights[0] + params.m_color_weights[1] + params.m_color_weights[2] + params.m_color_weights[3]; + assert(total_color_weight); + const float one_over_total_color_weight = 1.0f / total_color_weight; + + assert((block_size_to_optimize_in_bytes >= MIN_MATCH_LEN) && (block_size_to_optimize_in_bytes <= MAX_BLOCK_SIZE_IN_BYTES)); + if ((block_size_to_optimize_in_bytes < MIN_MATCH_LEN) || (block_size_to_optimize_in_bytes > MAX_BLOCK_SIZE_IN_BYTES)) + return false; + + uint8_t* pBlock_bytes = (uint8_t*)pBlocks; + + const uint32_t total_block_pixels = block_width * block_height; + if (total_block_pixels > MAX_BLOCK_PIXELS) + return false; + + const int total_blocks_to_check = std::max(1U, params.m_lookback_window_size / total_block_stride_in_bytes); + + std::vector len_hist(MAX_BLOCK_SIZE_IN_BYTES + 1); + std::vector second_len_hist(MAX_BLOCK_SIZE_IN_BYTES + 1); + uint32_t total_second_matches = 0; + + int prev_match_window_ofs_to_favor_cont = -1, prev_match_dist_to_favor = -1; + + uint32_t total_smooth_blocks = 0; + + const uint32_t HASH_SIZE = 8192; + uint32_t hash[HASH_SIZE]; + + for (uint32_t block_index = 0; block_index < num_blocks; block_index++) + { + if ((block_index & 0xFF) == 0) + memset(hash, 0, sizeof(hash)); + + uint8_t* pOrig_block = &pBlock_bytes[block_index * total_block_stride_in_bytes]; + const color_rgba* pPixels = &pBlock_pixels[block_index * total_block_pixels]; + + color_rgba decoded_block[MAX_BLOCK_PIXELS]; + if (!(*pUnpack_block_func)(pOrig_block, decoded_block, block_index, pUnpack_block_func_user_data)) + return false; + + float cur_mse = compute_block_mse(pPixels, decoded_block, block_width, block_height, total_block_pixels, num_comps, params.m_color_weights, one_over_total_color_weight); + + if ((params.m_skip_zero_mse_blocks) && (cur_mse == 0.0f)) + continue; + + const float max_std_dev = compute_block_max_std_dev(pPixels, block_width, block_height, num_comps); + + float yl = clampf(max_std_dev / params.m_max_smooth_block_std_dev, 0.0f, 1.0f); + yl = yl * yl; + float smooth_block_mse_scale = lerp(params.m_smooth_block_max_mse_scale, 1.0f, yl); + + if (pBlock_mse_scales) + { + if ((*pBlock_mse_scales)[block_index] > 0.0f) + { + smooth_block_mse_scale = (*pBlock_mse_scales)[block_index]; + } + } + + if (smooth_block_mse_scale > 1.0f) + total_smooth_blocks++; + + float cur_bits = (LITERAL_BITS * block_size_to_optimize_in_bytes); + float cur_t = cur_mse * smooth_block_mse_scale + cur_bits * params.m_lambda; + + int first_block_to_check = std::max(0, block_index - total_blocks_to_check); + int last_block_to_check = block_index - 1; + + uint8_t best_block[MAX_BLOCK_SIZE_IN_BYTES]; + memcpy(best_block, pOrig_block, block_size_to_optimize_in_bytes); + + float best_t = cur_t; + uint32_t best_match_len = 0, best_match_src_window_ofs = 0, best_match_dst_window_ofs = 0, best_match_src_block_ofs = 0, best_match_dst_block_ofs = 0; + float best_match_bits = 0; + + // Don't let thresh_ms_err be 0 to let zero error blocks have slightly increased distortion + const float thresh_ms_err = params.m_max_allowed_rms_increase_ratio * params.m_max_allowed_rms_increase_ratio * std::max(cur_mse, 1.0f); + + for (int prev_block_index = last_block_to_check; prev_block_index >= first_block_to_check; --prev_block_index) + { + const uint8_t* pPrev_blk = &pBlock_bytes[prev_block_index * total_block_stride_in_bytes]; + + for (uint32_t len = block_size_to_optimize_in_bytes; len >= MIN_MATCH_LEN; len--) + { + if (params.m_allow_relative_movement) + { + for (uint32_t src_ofs = 0; src_ofs <= (block_size_to_optimize_in_bytes - len); src_ofs++) + { + assert(len + src_ofs <= block_size_to_optimize_in_bytes); + + const uint32_t src_match_window_ofs = prev_block_index * total_block_stride_in_bytes + src_ofs; + + for (uint32_t dst_ofs = 0; dst_ofs <= (block_size_to_optimize_in_bytes - len); dst_ofs++) + { + assert(len + dst_ofs <= block_size_to_optimize_in_bytes); + + const uint32_t dst_match_window_ofs = block_index * total_block_stride_in_bytes + dst_ofs; + + const uint32_t match_dist = dst_match_window_ofs - src_match_window_ofs; + + float trial_match_bits, trial_total_bits; + + uint32_t hs = hash_hsieh(pPrev_blk + src_ofs, len, dst_ofs); + +#if ERT_FAVOR_CONT_AND_REP0_MATCHES + // Continue a previous match (which would cross block boundaries) + if (((int)src_match_window_ofs == prev_match_window_ofs_to_favor_cont) && (dst_ofs == 0)) + { + trial_match_bits = MATCH_CONTINUE_BITS; + trial_total_bits = (block_size_to_optimize_in_bytes - len) * LITERAL_BITS + MATCH_CONTINUE_BITS; + } + // Exploit REP0 matches + else if ((prev_match_dist_to_favor != -1) && (src_match_window_ofs == (dst_match_window_ofs - prev_match_dist_to_favor))) + { + trial_match_bits = MATCH_REP0_BITS; + trial_total_bits = (block_size_to_optimize_in_bytes - len) * LITERAL_BITS + MATCH_REP0_BITS; + } + else + { + trial_match_bits = (float)compute_match_cost_estimate(match_dist, len); + trial_total_bits = (block_size_to_optimize_in_bytes - len) * LITERAL_BITS + trial_match_bits; + + uint32_t hash_check = hash[hs & (HASH_SIZE - 1)]; + if ((hash_check & 0xFF) == (block_index & 0xFF)) + { + if ((hash_check >> 8) == (hs >> 8)) + continue; + } + } +#else + uint32_t hash_check = hash[hs & (HASH_SIZE - 1)]; + if ((hash_check & 0xFF) == (block_index & 0xFF)) + { + if ((hash_check >> 8) == (hs >> 8)) + continue; + } +#endif + + hash[hs & (HASH_SIZE - 1)] = (hs & 0xFFFFFF00) | (block_index & 0xFF); + + const float trial_total_bits_times_lambda = trial_total_bits * params.m_lambda; + + uint8_t trial_block[MAX_BLOCK_SIZE_IN_BYTES]; + memcpy(trial_block, pOrig_block, block_size_to_optimize_in_bytes); + memcpy(trial_block + dst_ofs, pPrev_blk + src_ofs, len); + + color_rgba decoded_trial_block[MAX_BLOCK_PIXELS]; + if (!(*pUnpack_block_func)(trial_block, decoded_trial_block, block_index, pUnpack_block_func_user_data)) + continue; + + float trial_mse = compute_block_mse(pPixels, decoded_trial_block, block_width, block_height, total_block_pixels, num_comps, params.m_color_weights, one_over_total_color_weight); + + if (trial_mse < thresh_ms_err) + { + float t = trial_mse * smooth_block_mse_scale + trial_total_bits_times_lambda; + + if (t < best_t) + { + best_t = t; + memcpy(best_block, trial_block, block_size_to_optimize_in_bytes); + best_match_len = len; + best_match_src_window_ofs = src_match_window_ofs; + best_match_dst_window_ofs = dst_match_window_ofs; + best_match_src_block_ofs = src_ofs; + best_match_dst_block_ofs = dst_ofs; + best_match_bits = trial_match_bits; + } + } + + } // dst_ofs + } // src_ofs + } + else + { + const uint32_t match_dist = (block_index - prev_block_index) * total_block_stride_in_bytes; + + // Assume the block has 1 match and block_size_to_optimize_in_bytes-match_len literals. + const float trial_match_bits = (float)compute_match_cost_estimate(match_dist, len); + const float trial_total_bits = (block_size_to_optimize_in_bytes - len) * LITERAL_BITS + trial_match_bits; + const float trial_total_bits_times_lambda = trial_total_bits * params.m_lambda; + + for (uint32_t ofs = 0; ofs <= (block_size_to_optimize_in_bytes - len); ofs++) + { + assert(len + ofs <= block_size_to_optimize_in_bytes); + + const uint32_t dst_match_window_ofs = block_index * total_block_stride_in_bytes + ofs; + const uint32_t src_match_window_ofs = prev_block_index * total_block_stride_in_bytes + ofs; + + float trial_match_bits_to_use = trial_match_bits; + float trial_total_bits_times_lambda_to_use = trial_total_bits_times_lambda; + + uint32_t hs = hash_hsieh(pPrev_blk + ofs, len, ofs); + +#if ERT_FAVOR_CONT_AND_REP0_MATCHES + // Continue a previous match (which would cross block boundaries) + if (((int)src_match_window_ofs == prev_match_window_ofs_to_favor_cont) && (ofs == 0)) + { + float continue_match_trial_bits = (block_size_to_optimize_in_bytes - len) * LITERAL_BITS + MATCH_CONTINUE_BITS; + trial_match_bits_to_use = MATCH_CONTINUE_BITS; + trial_total_bits_times_lambda_to_use = continue_match_trial_bits * params.m_lambda; + } + // Exploit REP0 matches + else if ((prev_match_dist_to_favor != -1) && (src_match_window_ofs == (dst_match_window_ofs - prev_match_dist_to_favor))) + { + float continue_match_trial_bits = (block_size_to_optimize_in_bytes - len) * LITERAL_BITS + MATCH_REP0_BITS; + trial_match_bits_to_use = MATCH_REP0_BITS; + trial_total_bits_times_lambda_to_use = continue_match_trial_bits * params.m_lambda; + } + else + { + uint32_t hash_check = hash[hs & (HASH_SIZE - 1)]; + if ((hash_check & 0xFF) == (block_index & 0xFF)) + { + if ((hash_check >> 8) == (hs >> 8)) + continue; + } + } +#else + uint32_t hash_check = hash[hs & (HASH_SIZE - 1)]; + if ((hash_check & 0xFF) == (block_index & 0xFF)) + { + if ((hash_check >> 8) == (hs >> 8)) + continue; + } +#endif + + hash[hs & (HASH_SIZE - 1)] = (hs & 0xFFFFFF00) | (block_index & 0xFF); + + uint8_t trial_block[MAX_BLOCK_SIZE_IN_BYTES]; + memcpy(trial_block, pOrig_block, block_size_to_optimize_in_bytes); + memcpy(trial_block + ofs, pPrev_blk + ofs, len); + + color_rgba decoded_trial_block[MAX_BLOCK_PIXELS]; + if (!(*pUnpack_block_func)(trial_block, decoded_trial_block, block_index, pUnpack_block_func_user_data)) + continue; + + float trial_mse = compute_block_mse(pPixels, decoded_trial_block, block_width, block_height, total_block_pixels, num_comps, params.m_color_weights, one_over_total_color_weight); + + if (trial_mse < thresh_ms_err) + { + float t = trial_mse * smooth_block_mse_scale + trial_total_bits_times_lambda_to_use; + + if (t < best_t) + { + best_t = t; + memcpy(best_block, trial_block, block_size_to_optimize_in_bytes); + best_match_len = len; + best_match_src_window_ofs = src_match_window_ofs; + best_match_dst_window_ofs = dst_match_window_ofs; + best_match_src_block_ofs = ofs; + best_match_dst_block_ofs = ofs; + best_match_bits = trial_match_bits_to_use; + } + } + } // ofs + } + + } // len + + } // prev_block_index + + if (best_t < cur_t) + { + uint32_t best_second_match_len = 0, best_second_match_src_window_ofs = 0, best_second_match_dst_window_ofs = 0, best_second_match_src_block_ofs = 0, best_second_match_dst_block_ofs = 0; + + // Try injecting a second match, being sure it does't overlap with the first. + if ((params.m_try_two_matches) && (best_match_len <= (block_size_to_optimize_in_bytes - 3))) + { + uint8_t matched_flags[MAX_BLOCK_SIZE_IN_BYTES]; + memset(matched_flags, 0, sizeof(matched_flags)); + memset(matched_flags + best_match_dst_block_ofs, 1, best_match_len); + + uint8_t orig_best_block[MAX_BLOCK_SIZE_IN_BYTES]; + memcpy(orig_best_block, best_block, block_size_to_optimize_in_bytes); + + for (int prev_block_index = last_block_to_check; prev_block_index >= first_block_to_check; --prev_block_index) + { + const uint8_t* pPrev_blk = &pBlock_bytes[prev_block_index * total_block_stride_in_bytes]; + + const uint32_t match_dist = (block_index - prev_block_index) * total_block_stride_in_bytes; + + for (uint32_t len = 3; len <= (block_size_to_optimize_in_bytes - best_match_len); len++) + { + const float trial_total_bits = (block_size_to_optimize_in_bytes - len - best_match_len) * LITERAL_BITS + compute_match_cost_estimate(match_dist, len) + best_match_bits; + + const float trial_total_bits_times_lambda = trial_total_bits * params.m_lambda; + + for (uint32_t ofs = 0; ofs <= (block_size_to_optimize_in_bytes - len); ofs++) + { + int i; + for (i = 0; i < (int)len; i++) + if (matched_flags[ofs + i]) + break; + if (i != (int)len) + continue; + + assert(len + ofs <= block_size_to_optimize_in_bytes); + + const uint32_t dst_match_window_ofs = block_index * total_block_stride_in_bytes + ofs; + const uint32_t src_match_window_ofs = prev_block_index * total_block_stride_in_bytes + ofs; + + uint8_t trial_block[MAX_BLOCK_SIZE_IN_BYTES]; + memcpy(trial_block, orig_best_block, block_size_to_optimize_in_bytes); + memcpy(trial_block + ofs, pPrev_blk + ofs, len); + + color_rgba decoded_trial_block[MAX_BLOCK_PIXELS]; + if (!(*pUnpack_block_func)(trial_block, decoded_trial_block, block_index, pUnpack_block_func_user_data)) + continue; + + float trial_mse = compute_block_mse(pPixels, decoded_trial_block, block_width, block_height, total_block_pixels, num_comps, params.m_color_weights, one_over_total_color_weight); + + if (trial_mse < thresh_ms_err) + { + float t = trial_mse * smooth_block_mse_scale + trial_total_bits_times_lambda; + + if (t < best_t) + { + best_t = t; + memcpy(best_block, trial_block, block_size_to_optimize_in_bytes); + best_second_match_len = len; + best_second_match_src_window_ofs = src_match_window_ofs; + best_second_match_dst_window_ofs = dst_match_window_ofs; + best_second_match_src_block_ofs = ofs; + best_second_match_dst_block_ofs = ofs; + } + } + } + } + } + } + + memcpy(pOrig_block, best_block, block_size_to_optimize_in_bytes); + total_modified++; + + if ((best_second_match_len == 0) || (best_match_dst_window_ofs > best_second_match_dst_window_ofs)) + { + int best_match_dist = best_match_dst_window_ofs - best_match_src_window_ofs; + assert(best_match_dist >= 1); + (void)best_match_dist; + + if (block_size_to_optimize_in_bytes == total_block_stride_in_bytes) + { + // If the match goes all the way to the end of a block, we can try to continue it on the next encoded block. + if ((best_match_dst_block_ofs + best_match_len) == total_block_stride_in_bytes) + prev_match_window_ofs_to_favor_cont = best_match_src_window_ofs + best_match_len; + else + prev_match_window_ofs_to_favor_cont = -1; + } + +#if ERT_FAVOR_REP0_MATCHES + // Compute the window offset where a cheaper REP0 match would be available + prev_match_dist_to_favor = best_match_dist; +#endif + } + else + { + int best_match_dist = best_second_match_dst_window_ofs - best_second_match_src_window_ofs; + assert(best_match_dist >= 1); + (void)best_match_dist; + + if (block_size_to_optimize_in_bytes == total_block_stride_in_bytes) + { + // If the match goes all the way to the end of a block, we can try to continue it on the next encoded block. + if ((best_second_match_dst_block_ofs + best_second_match_len) == total_block_stride_in_bytes) + prev_match_window_ofs_to_favor_cont = best_second_match_src_window_ofs + best_second_match_len; + else + prev_match_window_ofs_to_favor_cont = -1; + } + +#if ERT_FAVOR_REP0_MATCHES + // Compute the window offset where a cheaper REP0 match would be available + prev_match_dist_to_favor = best_match_dist; +#endif + } + + len_hist[best_match_len]++; + + if (best_second_match_len) + { + second_len_hist[best_second_match_len]++; + total_second_matches++; + } + } + else + { + prev_match_window_ofs_to_favor_cont = -1; + } + + } // block_index + + if (params.m_debug_output) + { + printf("Total smooth blocks: %3.2f%%\n", total_smooth_blocks * 100.0f / num_blocks); + + printf("Match length histogram:\n"); + for (uint32_t i = MIN_MATCH_LEN; i <= block_size_to_optimize_in_bytes; i++) + printf("%u%c", len_hist[i], (i < block_size_to_optimize_in_bytes) ? ',' : '\n'); + + printf("Total second matches: %u %3.2f%%\n", total_second_matches, total_second_matches * 100.0f / num_blocks); + printf("Secod match length histogram:\n"); + for (uint32_t i = MIN_MATCH_LEN; i <= block_size_to_optimize_in_bytes; i++) + printf("%u%c", second_len_hist[i], (i < block_size_to_optimize_in_bytes) ? ',' : '\n'); + } + + return true; + } + +} // namespace ert \ No newline at end of file diff --git a/external/bc7enc_rdo/ert.h b/external/bc7enc_rdo/ert.h new file mode 100644 index 0000000000..d387f52778 --- /dev/null +++ b/external/bc7enc_rdo/ert.h @@ -0,0 +1,81 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace ert +{ + struct color_rgba { uint8_t m_c[4]; }; + + struct reduce_entropy_params + { + // m_lambda: The post-processor tries to reduce distortion*smooth_block_scale + rate*lambda (rate is approximate LZ bits and distortion is scaled MS error multiplied against the smooth block MSE weighting factor). + // Larger values push the postprocessor towards optimizing more for lower rate, and smaller values more for distortion. 0=minimal distortion. + float m_lambda; + + // m_lookback_window_size: The number of bytes the encoder can look back from each block to find matches. The larger this value, the slower the encoder but the higher the quality per LZ compressed bit. + uint32_t m_lookback_window_size; + + // m_max_allowed_rms_increase_ratio: How much the RMS error of a block is allowed to increase before a trial is rejected. 1.0=no increase allowed, 1.05=5% increase allowed, etc. + float m_max_allowed_rms_increase_ratio; + + float m_max_smooth_block_std_dev; + float m_smooth_block_max_mse_scale; + + uint32_t m_color_weights[4]; + + bool m_try_two_matches; + bool m_allow_relative_movement; + bool m_skip_zero_mse_blocks; + bool m_debug_output; + + reduce_entropy_params() { clear(); } + + void clear() + { + m_lookback_window_size = 256; + m_lambda = 1.0f; + m_max_allowed_rms_increase_ratio = 10.0f; + m_max_smooth_block_std_dev = 18.0f; + m_smooth_block_max_mse_scale = 10.0f; + m_color_weights[0] = 1; + m_color_weights[1] = 1; + m_color_weights[2] = 1; + m_color_weights[3] = 1; + m_try_two_matches = false; + m_allow_relative_movement = false; + m_skip_zero_mse_blocks = false; + m_debug_output = false; + } + + void print() + { + printf("lambda: %f\n", m_lambda); + printf("Lookback window size: %u\n", m_lookback_window_size); + printf("Max allowed RMS increase ratio: %f\n", m_max_allowed_rms_increase_ratio); + printf("Max smooth block std dev: %f\n", m_max_smooth_block_std_dev); + printf("Smooth block max MSE scale: %f\n", m_smooth_block_max_mse_scale); + printf("Color weights: %u %u %u %u\n", m_color_weights[0], m_color_weights[1], m_color_weights[2], m_color_weights[3]); + printf("Try two matches: %u\n", m_try_two_matches); + printf("Allow relative movement: %u\n", m_allow_relative_movement); + printf("Skip zero MSE blocks: %u\n", m_skip_zero_mse_blocks); + } + }; + + typedef bool (*pUnpack_block_func)(const void* pBlock, color_rgba* pPixels, uint32_t block_index, void* pUser_data); + + // BC7 entropy reduction transform with Deflate/LZMA/LZHAM optimizations + bool reduce_entropy(void* pBlocks, uint32_t num_blocks, + uint32_t total_block_stride_in_bytes, uint32_t block_size_to_optimize_in_bytes, uint32_t block_width, uint32_t block_height, uint32_t num_comps, + const color_rgba* pBlock_pixels, const reduce_entropy_params& params, uint32_t& total_modified, + pUnpack_block_func pUnpack_block_func, void* pUnpack_block_func_user_data, + std::vector* pBlock_mse_scales = nullptr); + +} // namespace ert diff --git a/external/bc7enc_rdo/lodepng.cpp b/external/bc7enc_rdo/lodepng.cpp new file mode 100644 index 0000000000..bfb9ab3ead --- /dev/null +++ b/external/bc7enc_rdo/lodepng.cpp @@ -0,0 +1,6235 @@ +/* +LodePNG version 20161127 + +Copyright (c) 2005-2016 Lode Vandevenne + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +/* +The manual and changelog are in the header file "lodepng.h" +Rename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for C. +*/ + +#include "lodepng.h" + +#include +#include +#include + +#if defined(_MSC_VER) && (_MSC_VER >= 1310) /*Visual Studio: A few warning types are not desired here.*/ +#pragma warning( disable : 4244 ) /*implicit conversions: not warned by gcc -Wall -Wextra and requires too much casts*/ +#pragma warning( disable : 4996 ) /*VS does not like fopen, but fopen_s is not standard C so unusable here*/ +#endif /*_MSC_VER */ + +const char* LODEPNG_VERSION_STRING = "20161127"; + +/* +This source file is built up in the following large parts. The code sections +with the "LODEPNG_COMPILE_" #defines divide this up further in an intermixed way. +-Tools for C and common code for PNG and Zlib +-C Code for Zlib (huffman, deflate, ...) +-C Code for PNG (file format chunks, adam7, PNG filters, color conversions, ...) +-The C++ wrapper around all of the above +*/ + +/*The malloc, realloc and free functions defined here with "lodepng_" in front +of the name, so that you can easily change them to others related to your +platform if needed. Everything else in the code calls these. Pass +-DLODEPNG_NO_COMPILE_ALLOCATORS to the compiler, or comment out +#define LODEPNG_COMPILE_ALLOCATORS in the header, to disable the ones here and +define them in your own project's source files without needing to change +lodepng source code. Don't forget to remove "static" if you copypaste them +from here.*/ + +// rg: Disabling auto conversion to palettized +#define LODEPNG_DEFAULT_AUTO_CONVERT (0) + +#ifdef LODEPNG_COMPILE_ALLOCATORS +static void* lodepng_malloc(size_t size) +{ + return malloc(size); +} + +static void* lodepng_realloc(void* ptr, size_t new_size) +{ + return realloc(ptr, new_size); +} + +static void lodepng_free(void* ptr) +{ + free(ptr); +} +#else /*LODEPNG_COMPILE_ALLOCATORS*/ +void* lodepng_malloc(size_t size); +void* lodepng_realloc(void* ptr, size_t new_size); +void lodepng_free(void* ptr); +#endif /*LODEPNG_COMPILE_ALLOCATORS*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // Tools for C, and common code for PNG and Zlib. // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/* +Often in case of an error a value is assigned to a variable and then it breaks +out of a loop (to go to the cleanup phase of a function). This macro does that. +It makes the error handling code shorter and more readable. + +Example: if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83); +*/ +#define CERROR_BREAK(errorvar, code)\ +{\ + errorvar = code;\ + break;\ +} + +/*version of CERROR_BREAK that assumes the common case where the error variable is named "error"*/ +#define ERROR_BREAK(code) CERROR_BREAK(error, code) + +/*Set error var to the error code, and return it.*/ +#define CERROR_RETURN_ERROR(errorvar, code)\ +{\ + errorvar = code;\ + return code;\ +} + +/*Try the code, if it returns error, also return the error.*/ +#define CERROR_TRY_RETURN(call)\ +{\ + unsigned error = call;\ + if(error) return error;\ +} + +/*Set error var to the error code, and return from the void function.*/ +#define CERROR_RETURN(errorvar, code)\ +{\ + errorvar = code;\ + return;\ +} + +/* +About uivector, ucvector and string: +-All of them wrap dynamic arrays or text strings in a similar way. +-LodePNG was originally written in C++. The vectors replace the std::vectors that were used in the C++ version. +-The string tools are made to avoid problems with compilers that declare things like strncat as deprecated. +-They're not used in the interface, only internally in this file as static functions. +-As with many other structs in this file, the init and cleanup functions serve as ctor and dtor. +*/ + +#ifdef LODEPNG_COMPILE_ZLIB +/*dynamic vector of unsigned ints*/ +typedef struct uivector +{ + unsigned* data; + size_t size; /*size in number of unsigned longs*/ + size_t allocsize; /*allocated size in bytes*/ +} uivector; + +static void uivector_cleanup(void* p) +{ + ((uivector*)p)->size = ((uivector*)p)->allocsize = 0; + lodepng_free(((uivector*)p)->data); + ((uivector*)p)->data = NULL; +} + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned uivector_reserve(uivector* p, size_t allocsize) +{ + if (allocsize > p->allocsize) + { + size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2); + void* data = lodepng_realloc(p->data, newsize); + if (data) + { + p->allocsize = newsize; + p->data = (unsigned*)data; + } + else return 0; /*error: not enough memory*/ + } + return 1; +} + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned uivector_resize(uivector* p, size_t size) +{ + if (!uivector_reserve(p, size * sizeof(unsigned))) return 0; + p->size = size; + return 1; /*success*/ +} + +/*resize and give all new elements the value*/ +static unsigned uivector_resizev(uivector* p, size_t size, unsigned value) +{ + size_t oldsize = p->size, i; + if (!uivector_resize(p, size)) return 0; + for (i = oldsize; i < size; ++i) p->data[i] = value; + return 1; +} + +static void uivector_init(uivector* p) +{ + p->data = NULL; + p->size = p->allocsize = 0; +} + +#ifdef LODEPNG_COMPILE_ENCODER +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned uivector_push_back(uivector* p, unsigned c) +{ + if (!uivector_resize(p, p->size + 1)) return 0; + p->data[p->size - 1] = c; + return 1; +} +#endif /*LODEPNG_COMPILE_ENCODER*/ +#endif /*LODEPNG_COMPILE_ZLIB*/ + +/* /////////////////////////////////////////////////////////////////////////// */ + +/*dynamic vector of unsigned chars*/ +typedef struct ucvector +{ + unsigned char* data; + size_t size; /*used size*/ + size_t allocsize; /*allocated size*/ +} ucvector; + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned ucvector_reserve(ucvector* p, size_t allocsize) +{ + if (allocsize > p->allocsize) + { + size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2); + void* data = lodepng_realloc(p->data, newsize); + if (data) + { + p->allocsize = newsize; + p->data = (unsigned char*)data; + } + else return 0; /*error: not enough memory*/ + } + return 1; +} + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned ucvector_resize(ucvector* p, size_t size) +{ + if (!ucvector_reserve(p, size * sizeof(unsigned char))) return 0; + p->size = size; + return 1; /*success*/ +} + +#ifdef LODEPNG_COMPILE_PNG + +static void ucvector_cleanup(void* p) +{ + ((ucvector*)p)->size = ((ucvector*)p)->allocsize = 0; + lodepng_free(((ucvector*)p)->data); + ((ucvector*)p)->data = NULL; +} + +static void ucvector_init(ucvector* p) +{ + p->data = NULL; + p->size = p->allocsize = 0; +} +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ZLIB +/*you can both convert from vector to buffer&size and vica versa. If you use +init_buffer to take over a buffer and size, it is not needed to use cleanup*/ +static void ucvector_init_buffer(ucvector* p, unsigned char* buffer, size_t size) +{ + p->data = buffer; + p->allocsize = p->size = size; +} +#endif /*LODEPNG_COMPILE_ZLIB*/ + +#if (defined(LODEPNG_COMPILE_PNG) && defined(LODEPNG_COMPILE_ANCILLARY_CHUNKS)) || defined(LODEPNG_COMPILE_ENCODER) +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned ucvector_push_back(ucvector* p, unsigned char c) +{ + if (!ucvector_resize(p, p->size + 1)) return 0; + p->data[p->size - 1] = c; + return 1; +} +#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/ + + +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_PNG +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned string_resize(char** out, size_t size) +{ + char* data = (char*)lodepng_realloc(*out, size + 1); + if (data) + { + data[size] = 0; /*null termination char*/ + *out = data; + } + return data != 0; +} + +/*init a {char*, size_t} pair for use as string*/ +static void string_init(char** out) +{ + *out = NULL; + string_resize(out, 0); +} + +/*free the above pair again*/ +static void string_cleanup(char** out) +{ + lodepng_free(*out); + *out = NULL; +} + +static void string_set(char** out, const char* in) +{ + size_t insize = strlen(in), i; + if (string_resize(out, insize)) + { + for (i = 0; i != insize; ++i) + { + (*out)[i] = in[i]; + } + } +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +/* ////////////////////////////////////////////////////////////////////////// */ + +unsigned lodepng_read32bitInt(const unsigned char* buffer) +{ + return (unsigned)((buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]); +} + +#if defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER) +/*buffer must have at least 4 allocated bytes available*/ +static void lodepng_set32bitInt(unsigned char* buffer, unsigned value) +{ + buffer[0] = (unsigned char)((value >> 24) & 0xff); + buffer[1] = (unsigned char)((value >> 16) & 0xff); + buffer[2] = (unsigned char)((value >> 8) & 0xff); + buffer[3] = (unsigned char)((value) & 0xff); +} +#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/ + +#ifdef LODEPNG_COMPILE_ENCODER +static void lodepng_add32bitInt(ucvector* buffer, unsigned value) +{ + ucvector_resize(buffer, buffer->size + 4); /*todo: give error if resize failed*/ + lodepng_set32bitInt(&buffer->data[buffer->size - 4], value); +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / File IO / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_DISK + +/* returns negative value on error. This should be pure C compatible, so no fstat. */ +static long lodepng_filesize(const char* filename) +{ + FILE* file; + long size; + file = fopen(filename, "rb"); + if (!file) return -1; + + if (fseek(file, 0, SEEK_END) != 0) + { + fclose(file); + return -1; + } + + size = ftell(file); + /* It may give LONG_MAX as directory size, this is invalid for us. */ + if (size == LONG_MAX) size = -1; + + fclose(file); + return size; +} + +/* load file into buffer that already has the correct allocated size. Returns error code.*/ +static unsigned lodepng_buffer_file(unsigned char* out, size_t size, const char* filename) +{ + FILE* file; + size_t readsize; + file = fopen(filename, "rb"); + if (!file) return 78; + + readsize = fread(out, 1, size, file); + fclose(file); + + if (readsize != size) return 78; + return 0; +} + +unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename) +{ + long size = lodepng_filesize(filename); + if (size < 0) return 78; + *outsize = (size_t)size; + + *out = (unsigned char*)lodepng_malloc((size_t)size); + if (!(*out) && size > 0) return 83; /*the above malloc failed*/ + + return lodepng_buffer_file(*out, (size_t)size, filename); +} + +/*write given buffer to the file, overwriting the file, it doesn't append to it.*/ +unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename) +{ + FILE* file; + file = fopen(filename, "wb"); + if (!file) return 79; + fwrite((char*)buffer, 1, buffersize, file); + fclose(file); + return 0; +} + +#endif /*LODEPNG_COMPILE_DISK*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // End of common code and tools. Begin of Zlib related code. // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_ENCODER +/*TODO: this ignores potential out of memory errors*/ +#define addBitToStream(/*size_t**/ bitpointer, /*ucvector**/ bitstream, /*unsigned char*/ bit)\ +{\ + /*add a new byte at the end*/\ + if(((*bitpointer) & 7) == 0) ucvector_push_back(bitstream, (unsigned char)0);\ + /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/\ + (bitstream->data[bitstream->size - 1]) |= (bit << ((*bitpointer) & 0x7));\ + ++(*bitpointer);\ +} + +static void addBitsToStream(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) +{ + size_t i; + for (i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> i) & 1)); +} + +static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) +{ + size_t i; + for (i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> (nbits - 1 - i)) & 1)); +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_DECODER + +#define READBIT(bitpointer, bitstream) ((bitstream[bitpointer >> 3] >> (bitpointer & 0x7)) & (unsigned char)1) + +static unsigned char readBitFromStream(size_t* bitpointer, const unsigned char* bitstream) +{ + unsigned char result = (unsigned char)(READBIT(*bitpointer, bitstream)); + ++(*bitpointer); + return result; +} + +static unsigned readBitsFromStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) +{ + unsigned result = 0, i; + for (i = 0; i != nbits; ++i) + { + result += ((unsigned)READBIT(*bitpointer, bitstream)) << i; + ++(*bitpointer); + } + return result; +} +#endif /*LODEPNG_COMPILE_DECODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Deflate - Huffman / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#define FIRST_LENGTH_CODE_INDEX 257 +#define LAST_LENGTH_CODE_INDEX 285 +/*256 literals, the end code, some length codes, and 2 unused codes*/ +#define NUM_DEFLATE_CODE_SYMBOLS 288 +/*the distance codes have their own symbols, 30 used, 2 unused*/ +#define NUM_DISTANCE_SYMBOLS 32 +/*the code length codes. 0-15: code lengths, 16: copy previous 3-6 times, 17: 3-10 zeros, 18: 11-138 zeros*/ +#define NUM_CODE_LENGTH_CODES 19 + +/*the base lengths represented by codes 257-285*/ +static const unsigned LENGTHBASE[29] += { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, + 67, 83, 99, 115, 131, 163, 195, 227, 258 }; + +/*the extra bits used by codes 257-285 (added to base length)*/ +static const unsigned LENGTHEXTRA[29] += { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 4, 5, 5, 5, 5, 0 }; + +/*the base backwards distances (the bits of distance codes appear after length codes and use their own huffman tree)*/ +static const unsigned DISTANCEBASE[30] += { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, + 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 }; + +/*the extra bits of backwards distances (added to base)*/ +static const unsigned DISTANCEEXTRA[30] += { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, + 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }; + +/*the order in which "code length alphabet code lengths" are stored, out of this +the huffman tree of the dynamic huffman tree lengths is generated*/ +static const unsigned CLCL_ORDER[NUM_CODE_LENGTH_CODES] += { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; + +/* ////////////////////////////////////////////////////////////////////////// */ + +/* +Huffman tree struct, containing multiple representations of the tree +*/ +typedef struct HuffmanTree +{ + unsigned* tree2d; + unsigned* tree1d; + unsigned* lengths; /*the lengths of the codes of the 1d-tree*/ + unsigned maxbitlen; /*maximum number of bits a single code can get*/ + unsigned numcodes; /*number of symbols in the alphabet = number of codes*/ +} HuffmanTree; + +/*function used for debug purposes to draw the tree in ascii art with C++*/ +/* +static void HuffmanTree_draw(HuffmanTree* tree) +{ + std::cout << "tree. length: " << tree->numcodes << " maxbitlen: " << tree->maxbitlen << std::endl; + for(size_t i = 0; i != tree->tree1d.size; ++i) + { + if(tree->lengths.data[i]) + std::cout << i << " " << tree->tree1d.data[i] << " " << tree->lengths.data[i] << std::endl; + } + std::cout << std::endl; +}*/ + +static void HuffmanTree_init(HuffmanTree* tree) +{ + tree->tree2d = 0; + tree->tree1d = 0; + tree->lengths = 0; +} + +static void HuffmanTree_cleanup(HuffmanTree* tree) +{ + lodepng_free(tree->tree2d); + lodepng_free(tree->tree1d); + lodepng_free(tree->lengths); +} + +/*the tree representation used by the decoder. return value is error*/ +static unsigned HuffmanTree_make2DTree(HuffmanTree* tree) +{ + unsigned nodefilled = 0; /*up to which node it is filled*/ + unsigned treepos = 0; /*position in the tree (1 of the numcodes columns)*/ + unsigned n, i; + + tree->tree2d = (unsigned*)lodepng_malloc(tree->numcodes * 2 * sizeof(unsigned)); + if (!tree->tree2d) return 83; /*alloc fail*/ + + /* + convert tree1d[] to tree2d[][]. In the 2D array, a value of 32767 means + uninited, a value >= numcodes is an address to another bit, a value < numcodes + is a code. The 2 rows are the 2 possible bit values (0 or 1), there are as + many columns as codes - 1. + A good huffman tree has N * 2 - 1 nodes, of which N - 1 are internal nodes. + Here, the internal nodes are stored (what their 0 and 1 option point to). + There is only memory for such good tree currently, if there are more nodes + (due to too long length codes), error 55 will happen + */ + for (n = 0; n < tree->numcodes * 2; ++n) + { + tree->tree2d[n] = 32767; /*32767 here means the tree2d isn't filled there yet*/ + } + + for (n = 0; n < tree->numcodes; ++n) /*the codes*/ + { + for (i = 0; i != tree->lengths[n]; ++i) /*the bits for this code*/ + { + unsigned char bit = (unsigned char)((tree->tree1d[n] >> (tree->lengths[n] - i - 1)) & 1); + /*oversubscribed, see comment in lodepng_error_text*/ + if (treepos > 2147483647 || treepos + 2 > tree->numcodes) return 55; + if (tree->tree2d[2 * treepos + bit] == 32767) /*not yet filled in*/ + { + if (i + 1 == tree->lengths[n]) /*last bit*/ + { + tree->tree2d[2 * treepos + bit] = n; /*put the current code in it*/ + treepos = 0; + } + else + { + /*put address of the next step in here, first that address has to be found of course + (it's just nodefilled + 1)...*/ + ++nodefilled; + /*addresses encoded with numcodes added to it*/ + tree->tree2d[2 * treepos + bit] = nodefilled + tree->numcodes; + treepos = nodefilled; + } + } + else treepos = tree->tree2d[2 * treepos + bit] - tree->numcodes; + } + } + + for (n = 0; n < tree->numcodes * 2; ++n) + { + if (tree->tree2d[n] == 32767) tree->tree2d[n] = 0; /*remove possible remaining 32767's*/ + } + + return 0; +} + +/* +Second step for the ...makeFromLengths and ...makeFromFrequencies functions. +numcodes, lengths and maxbitlen must already be filled in correctly. return +value is error. +*/ +static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree) +{ + uivector blcount; + uivector nextcode; + unsigned error = 0; + unsigned bits, n; + + uivector_init(&blcount); + uivector_init(&nextcode); + + tree->tree1d = (unsigned*)lodepng_malloc(tree->numcodes * sizeof(unsigned)); + if (!tree->tree1d) error = 83; /*alloc fail*/ + + if (!uivector_resizev(&blcount, tree->maxbitlen + 1, 0) + || !uivector_resizev(&nextcode, tree->maxbitlen + 1, 0)) + error = 83; /*alloc fail*/ + + if (!error) + { + /*step 1: count number of instances of each code length*/ + for (bits = 0; bits != tree->numcodes; ++bits) ++blcount.data[tree->lengths[bits]]; + /*step 2: generate the nextcode values*/ + for (bits = 1; bits <= tree->maxbitlen; ++bits) + { + nextcode.data[bits] = (nextcode.data[bits - 1] + blcount.data[bits - 1]) << 1; + } + /*step 3: generate all the codes*/ + for (n = 0; n != tree->numcodes; ++n) + { + if (tree->lengths[n] != 0) tree->tree1d[n] = nextcode.data[tree->lengths[n]]++; + } + } + + uivector_cleanup(&blcount); + uivector_cleanup(&nextcode); + + if (!error) return HuffmanTree_make2DTree(tree); + else return error; +} + +/* +given the code lengths (as stored in the PNG file), generate the tree as defined +by Deflate. maxbitlen is the maximum bits that a code in the tree can have. +return value is error. +*/ +static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const unsigned* bitlen, + size_t numcodes, unsigned maxbitlen) +{ + unsigned i; + tree->lengths = (unsigned*)lodepng_malloc(numcodes * sizeof(unsigned)); + if (!tree->lengths) return 83; /*alloc fail*/ + for (i = 0; i != numcodes; ++i) tree->lengths[i] = bitlen[i]; + tree->numcodes = (unsigned)numcodes; /*number of symbols*/ + tree->maxbitlen = maxbitlen; + return HuffmanTree_makeFromLengths2(tree); +} + +#ifdef LODEPNG_COMPILE_ENCODER + +/*BPM: Boundary Package Merge, see "A Fast and Space-Economical Algorithm for Length-Limited Coding", +Jyrki Katajainen, Alistair Moffat, Andrew Turpin, 1995.*/ + +/*chain node for boundary package merge*/ +typedef struct BPMNode +{ + int weight; /*the sum of all weights in this chain*/ + unsigned index; /*index of this leaf node (called "count" in the paper)*/ + struct BPMNode* tail; /*the next nodes in this chain (null if last)*/ + int in_use; +} BPMNode; + +/*lists of chains*/ +typedef struct BPMLists +{ + /*memory pool*/ + unsigned memsize; + BPMNode* memory; + unsigned numfree; + unsigned nextfree; + BPMNode** freelist; + /*two heads of lookahead chains per list*/ + unsigned listsize; + BPMNode** chains0; + BPMNode** chains1; +} BPMLists; + +/*creates a new chain node with the given parameters, from the memory in the lists */ +static BPMNode* bpmnode_create(BPMLists* lists, int weight, unsigned index, BPMNode* tail) +{ + unsigned i; + BPMNode* result; + + /*memory full, so garbage collect*/ + if (lists->nextfree >= lists->numfree) + { + /*mark only those that are in use*/ + for (i = 0; i != lists->memsize; ++i) lists->memory[i].in_use = 0; + for (i = 0; i != lists->listsize; ++i) + { + BPMNode* node; + for (node = lists->chains0[i]; node != 0; node = node->tail) node->in_use = 1; + for (node = lists->chains1[i]; node != 0; node = node->tail) node->in_use = 1; + } + /*collect those that are free*/ + lists->numfree = 0; + for (i = 0; i != lists->memsize; ++i) + { + if (!lists->memory[i].in_use) lists->freelist[lists->numfree++] = &lists->memory[i]; + } + lists->nextfree = 0; + } + + result = lists->freelist[lists->nextfree++]; + result->weight = weight; + result->index = index; + result->tail = tail; + return result; +} + +/*sort the leaves with stable mergesort*/ +static void bpmnode_sort(BPMNode* leaves, size_t num) +{ + BPMNode* mem = (BPMNode*)lodepng_malloc(sizeof(*leaves) * num); + size_t width, counter = 0; + for (width = 1; width < num; width *= 2) + { + BPMNode* a = (counter & 1) ? mem : leaves; + BPMNode* b = (counter & 1) ? leaves : mem; + size_t p; + for (p = 0; p < num; p += 2 * width) + { + size_t q = (p + width > num) ? num : (p + width); + size_t r = (p + 2 * width > num) ? num : (p + 2 * width); + size_t i = p, j = q, k; + for (k = p; k < r; k++) + { + if (i < q && (j >= r || a[i].weight <= a[j].weight)) b[k] = a[i++]; + else b[k] = a[j++]; + } + } + counter++; + } + if (counter & 1) memcpy(leaves, mem, sizeof(*leaves) * num); + lodepng_free(mem); +} + +/*Boundary Package Merge step, numpresent is the amount of leaves, and c is the current chain.*/ +static void boundaryPM(BPMLists* lists, BPMNode* leaves, size_t numpresent, int c, int num) +{ + unsigned lastindex = lists->chains1[c]->index; + + if (c == 0) + { + if (lastindex >= numpresent) return; + lists->chains0[c] = lists->chains1[c]; + lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, 0); + } + else + { + /*sum of the weights of the head nodes of the previous lookahead chains.*/ + int sum = lists->chains0[c - 1]->weight + lists->chains1[c - 1]->weight; + lists->chains0[c] = lists->chains1[c]; + if (lastindex < numpresent && sum > leaves[lastindex].weight) + { + lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, lists->chains1[c]->tail); + return; + } + lists->chains1[c] = bpmnode_create(lists, sum, lastindex, lists->chains1[c - 1]); + /*in the end we are only interested in the chain of the last list, so no + need to recurse if we're at the last one (this gives measurable speedup)*/ + if (num + 1 < (int)(2 * numpresent - 2)) + { + boundaryPM(lists, leaves, numpresent, c - 1, num); + boundaryPM(lists, leaves, numpresent, c - 1, num); + } + } +} + +unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies, + size_t numcodes, unsigned maxbitlen) +{ + unsigned error = 0; + unsigned i; + size_t numpresent = 0; /*number of symbols with non-zero frequency*/ + BPMNode* leaves; /*the symbols, only those with > 0 frequency*/ + + if (numcodes == 0) return 80; /*error: a tree of 0 symbols is not supposed to be made*/ + if ((1ull << maxbitlen) < numcodes) return 80; /*error: represent all symbols*/ + + leaves = (BPMNode*)lodepng_malloc(numcodes * sizeof(*leaves)); + if (!leaves) return 83; /*alloc fail*/ + + for (i = 0; i != numcodes; ++i) + { + if (frequencies[i] > 0) + { + leaves[numpresent].weight = (int)frequencies[i]; + leaves[numpresent].index = i; + ++numpresent; + } + } + + for (i = 0; i != numcodes; ++i) lengths[i] = 0; + + /*ensure at least two present symbols. There should be at least one symbol + according to RFC 1951 section 3.2.7. Some decoders incorrectly require two. To + make these work as well ensure there are at least two symbols. The + Package-Merge code below also doesn't work correctly if there's only one + symbol, it'd give it the theoritical 0 bits but in practice zlib wants 1 bit*/ + if (numpresent == 0) + { + lengths[0] = lengths[1] = 1; /*note that for RFC 1951 section 3.2.7, only lengths[0] = 1 is needed*/ + } + else if (numpresent == 1) + { + lengths[leaves[0].index] = 1; + lengths[leaves[0].index == 0 ? 1 : 0] = 1; + } + else + { + BPMLists lists; + BPMNode* node; + + bpmnode_sort(leaves, numpresent); + + lists.listsize = maxbitlen; + lists.memsize = 2 * maxbitlen * (maxbitlen + 1); + lists.nextfree = 0; + lists.numfree = lists.memsize; + lists.memory = (BPMNode*)lodepng_malloc(lists.memsize * sizeof(*lists.memory)); + lists.freelist = (BPMNode**)lodepng_malloc(lists.memsize * sizeof(BPMNode*)); + lists.chains0 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*)); + lists.chains1 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*)); + if (!lists.memory || !lists.freelist || !lists.chains0 || !lists.chains1) error = 83; /*alloc fail*/ + + if (!error) + { + for (i = 0; i != lists.memsize; ++i) lists.freelist[i] = &lists.memory[i]; + + bpmnode_create(&lists, leaves[0].weight, 1, 0); + bpmnode_create(&lists, leaves[1].weight, 2, 0); + + for (i = 0; i != lists.listsize; ++i) + { + lists.chains0[i] = &lists.memory[0]; + lists.chains1[i] = &lists.memory[1]; + } + + /*each boundaryPM call adds one chain to the last list, and we need 2 * numpresent - 2 chains.*/ + for (i = 2; i != 2 * numpresent - 2; ++i) boundaryPM(&lists, leaves, numpresent, (int)maxbitlen - 1, (int)i); + + for (node = lists.chains1[maxbitlen - 1]; node; node = node->tail) + { + for (i = 0; i != node->index; ++i) ++lengths[leaves[i].index]; + } + } + + lodepng_free(lists.memory); + lodepng_free(lists.freelist); + lodepng_free(lists.chains0); + lodepng_free(lists.chains1); + } + + lodepng_free(leaves); + return error; +} + +/*Create the Huffman tree given the symbol frequencies*/ +static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies, + size_t mincodes, size_t numcodes, unsigned maxbitlen) +{ + unsigned error = 0; + while (!frequencies[numcodes - 1] && numcodes > mincodes) --numcodes; /*trim zeroes*/ + tree->maxbitlen = maxbitlen; + tree->numcodes = (unsigned)numcodes; /*number of symbols*/ + tree->lengths = (unsigned*)lodepng_realloc(tree->lengths, numcodes * sizeof(unsigned)); + if (!tree->lengths) return 83; /*alloc fail*/ + /*initialize all lengths to 0*/ + memset(tree->lengths, 0, numcodes * sizeof(unsigned)); + + error = lodepng_huffman_code_lengths(tree->lengths, frequencies, numcodes, maxbitlen); + if (!error) error = HuffmanTree_makeFromLengths2(tree); + return error; +} + +static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned index) +{ + return tree->tree1d[index]; +} + +static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned index) +{ + return tree->lengths[index]; +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/*get the literal and length code tree of a deflated block with fixed tree, as per the deflate specification*/ +static unsigned generateFixedLitLenTree(HuffmanTree* tree) +{ + unsigned i, error = 0; + unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned)); + if (!bitlen) return 83; /*alloc fail*/ + + /*288 possible codes: 0-255=literals, 256=endcode, 257-285=lengthcodes, 286-287=unused*/ + for (i = 0; i <= 143; ++i) bitlen[i] = 8; + for (i = 144; i <= 255; ++i) bitlen[i] = 9; + for (i = 256; i <= 279; ++i) bitlen[i] = 7; + for (i = 280; i <= 287; ++i) bitlen[i] = 8; + + error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DEFLATE_CODE_SYMBOLS, 15); + + lodepng_free(bitlen); + return error; +} + +/*get the distance code tree of a deflated block with fixed tree, as specified in the deflate specification*/ +static unsigned generateFixedDistanceTree(HuffmanTree* tree) +{ + unsigned i, error = 0; + unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned)); + if (!bitlen) return 83; /*alloc fail*/ + + /*there are 32 distance codes, but 30-31 are unused*/ + for (i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen[i] = 5; + error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DISTANCE_SYMBOLS, 15); + + lodepng_free(bitlen); + return error; +} + +#ifdef LODEPNG_COMPILE_DECODER + +/* +returns the code, or (unsigned)(-1) if error happened +inbitlength is the length of the complete buffer, in bits (so its byte length times 8) +*/ +static unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp, + const HuffmanTree* codetree, size_t inbitlength) +{ + unsigned treepos = 0, ct; + for (;;) + { + if (*bp >= inbitlength) return (unsigned)(-1); /*error: end of input memory reached without endcode*/ + /* + decode the symbol from the tree. The "readBitFromStream" code is inlined in + the expression below because this is the biggest bottleneck while decoding + */ + ct = codetree->tree2d[(treepos << 1) + READBIT(*bp, in)]; + ++(*bp); + if (ct < codetree->numcodes) return ct; /*the symbol is decoded, return it*/ + else treepos = ct - codetree->numcodes; /*symbol not yet decoded, instead move tree position*/ + + if (treepos >= codetree->numcodes) return (unsigned)(-1); /*error: it appeared outside the codetree*/ + } +} +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_DECODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Inflator (Decompressor) / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*get the tree of a deflated block with fixed tree, as specified in the deflate specification*/ +static void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d) +{ + /*TODO: check for out of memory errors*/ + generateFixedLitLenTree(tree_ll); + generateFixedDistanceTree(tree_d); +} + +/*get the tree of a deflated block with dynamic tree, the tree itself is also Huffman compressed with a known tree*/ +static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree* tree_d, + const unsigned char* in, size_t* bp, size_t inlength) +{ + /*make sure that length values that aren't filled in will be 0, or a wrong tree will be generated*/ + unsigned error = 0; + unsigned n, HLIT, HDIST, HCLEN, i; + size_t inbitlength = inlength * 8; + + /*see comments in deflateDynamic for explanation of the context and these variables, it is analogous*/ + unsigned* bitlen_ll = 0; /*lit,len code lengths*/ + unsigned* bitlen_d = 0; /*dist code lengths*/ + /*code length code lengths ("clcl"), the bit lengths of the huffman tree used to compress bitlen_ll and bitlen_d*/ + unsigned* bitlen_cl = 0; + HuffmanTree tree_cl; /*the code tree for code length codes (the huffman tree for compressed huffman trees)*/ + + if ((*bp) + 14 > (inlength << 3)) return 49; /*error: the bit pointer is or will go past the memory*/ + + /*number of literal/length codes + 257. Unlike the spec, the value 257 is added to it here already*/ + HLIT = readBitsFromStream(bp, in, 5) + 257; + /*number of distance codes. Unlike the spec, the value 1 is added to it here already*/ + HDIST = readBitsFromStream(bp, in, 5) + 1; + /*number of code length codes. Unlike the spec, the value 4 is added to it here already*/ + HCLEN = readBitsFromStream(bp, in, 4) + 4; + + if ((*bp) + HCLEN * 3 > (inlength << 3)) return 50; /*error: the bit pointer is or will go past the memory*/ + + HuffmanTree_init(&tree_cl); + + while (!error) + { + /*read the code length codes out of 3 * (amount of code length codes) bits*/ + + bitlen_cl = (unsigned*)lodepng_malloc(NUM_CODE_LENGTH_CODES * sizeof(unsigned)); + if (!bitlen_cl) ERROR_BREAK(83 /*alloc fail*/); + + for (i = 0; i != NUM_CODE_LENGTH_CODES; ++i) + { + if (i < HCLEN) bitlen_cl[CLCL_ORDER[i]] = readBitsFromStream(bp, in, 3); + else bitlen_cl[CLCL_ORDER[i]] = 0; /*if not, it must stay 0*/ + } + + error = HuffmanTree_makeFromLengths(&tree_cl, bitlen_cl, NUM_CODE_LENGTH_CODES, 7); + if (error) break; + + /*now we can use this tree to read the lengths for the tree that this function will return*/ + bitlen_ll = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned)); + bitlen_d = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned)); + if (!bitlen_ll || !bitlen_d) ERROR_BREAK(83 /*alloc fail*/); + for (i = 0; i != NUM_DEFLATE_CODE_SYMBOLS; ++i) bitlen_ll[i] = 0; + for (i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen_d[i] = 0; + + /*i is the current symbol we're reading in the part that contains the code lengths of lit/len and dist codes*/ + i = 0; + while (i < HLIT + HDIST) + { + unsigned code = huffmanDecodeSymbol(in, bp, &tree_cl, inbitlength); + if (code <= 15) /*a length code*/ + { + if (i < HLIT) bitlen_ll[i] = code; + else bitlen_d[i - HLIT] = code; + ++i; + } + else if (code == 16) /*repeat previous*/ + { + unsigned replength = 3; /*read in the 2 bits that indicate repeat length (3-6)*/ + unsigned value; /*set value to the previous code*/ + + if (i == 0) ERROR_BREAK(54); /*can't repeat previous if i is 0*/ + + if ((*bp + 2) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ + replength += readBitsFromStream(bp, in, 2); + + if (i < HLIT + 1) value = bitlen_ll[i - 1]; + else value = bitlen_d[i - HLIT - 1]; + /*repeat this value in the next lengths*/ + for (n = 0; n < replength; ++n) + { + if (i >= HLIT + HDIST) ERROR_BREAK(13); /*error: i is larger than the amount of codes*/ + if (i < HLIT) bitlen_ll[i] = value; + else bitlen_d[i - HLIT] = value; + ++i; + } + } + else if (code == 17) /*repeat "0" 3-10 times*/ + { + unsigned replength = 3; /*read in the bits that indicate repeat length*/ + if ((*bp + 3) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ + replength += readBitsFromStream(bp, in, 3); + + /*repeat this value in the next lengths*/ + for (n = 0; n < replength; ++n) + { + if (i >= HLIT + HDIST) ERROR_BREAK(14); /*error: i is larger than the amount of codes*/ + + if (i < HLIT) bitlen_ll[i] = 0; + else bitlen_d[i - HLIT] = 0; + ++i; + } + } + else if (code == 18) /*repeat "0" 11-138 times*/ + { + unsigned replength = 11; /*read in the bits that indicate repeat length*/ + if ((*bp + 7) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ + replength += readBitsFromStream(bp, in, 7); + + /*repeat this value in the next lengths*/ + for (n = 0; n < replength; ++n) + { + if (i >= HLIT + HDIST) ERROR_BREAK(15); /*error: i is larger than the amount of codes*/ + + if (i < HLIT) bitlen_ll[i] = 0; + else bitlen_d[i - HLIT] = 0; + ++i; + } + } + else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ + { + if (code == (unsigned)(-1)) + { + /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol + (10=no endcode, 11=wrong jump outside of tree)*/ + error = (*bp) > inbitlength ? 10 : 11; + } + else error = 16; /*unexisting code, this can never happen*/ + break; + } + } + if (error) break; + + if (bitlen_ll[256] == 0) ERROR_BREAK(64); /*the length of the end code 256 must be larger than 0*/ + + /*now we've finally got HLIT and HDIST, so generate the code trees, and the function is done*/ + error = HuffmanTree_makeFromLengths(tree_ll, bitlen_ll, NUM_DEFLATE_CODE_SYMBOLS, 15); + if (error) break; + error = HuffmanTree_makeFromLengths(tree_d, bitlen_d, NUM_DISTANCE_SYMBOLS, 15); + + break; /*end of error-while*/ + } + + lodepng_free(bitlen_cl); + lodepng_free(bitlen_ll); + lodepng_free(bitlen_d); + HuffmanTree_cleanup(&tree_cl); + + return error; +} + +/*inflate a block with dynamic of fixed Huffman tree*/ +static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in, size_t* bp, + size_t* pos, size_t inlength, unsigned btype) +{ + unsigned error = 0; + HuffmanTree tree_ll; /*the huffman tree for literal and length codes*/ + HuffmanTree tree_d; /*the huffman tree for distance codes*/ + size_t inbitlength = inlength * 8; + + HuffmanTree_init(&tree_ll); + HuffmanTree_init(&tree_d); + + if (btype == 1) getTreeInflateFixed(&tree_ll, &tree_d); + else if (btype == 2) error = getTreeInflateDynamic(&tree_ll, &tree_d, in, bp, inlength); + + while (!error) /*decode all symbols until end reached, breaks at end code*/ + { + /*code_ll is literal, length or end code*/ + unsigned code_ll = huffmanDecodeSymbol(in, bp, &tree_ll, inbitlength); + if (code_ll <= 255) /*literal symbol*/ + { + /*ucvector_push_back would do the same, but for some reason the two lines below run 10% faster*/ + if (!ucvector_resize(out, (*pos) + 1)) ERROR_BREAK(83 /*alloc fail*/); + out->data[*pos] = (unsigned char)code_ll; + ++(*pos); + } + else if (code_ll >= FIRST_LENGTH_CODE_INDEX && code_ll <= LAST_LENGTH_CODE_INDEX) /*length code*/ + { + unsigned code_d, distance; + unsigned numextrabits_l, numextrabits_d; /*extra bits for length and distance*/ + size_t start, forward, backward, length; + + /*part 1: get length base*/ + length = LENGTHBASE[code_ll - FIRST_LENGTH_CODE_INDEX]; + + /*part 2: get extra bits and add the value of that to length*/ + numextrabits_l = LENGTHEXTRA[code_ll - FIRST_LENGTH_CODE_INDEX]; + if ((*bp + numextrabits_l) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/ + length += readBitsFromStream(bp, in, numextrabits_l); + + /*part 3: get distance code*/ + code_d = huffmanDecodeSymbol(in, bp, &tree_d, inbitlength); + if (code_d > 29) + { + if (code_ll == (unsigned)(-1)) /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ + { + /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol + (10=no endcode, 11=wrong jump outside of tree)*/ + error = (*bp) > inlength * 8 ? 10 : 11; + } + else error = 18; /*error: invalid distance code (30-31 are never used)*/ + break; + } + distance = DISTANCEBASE[code_d]; + + /*part 4: get extra bits from distance*/ + numextrabits_d = DISTANCEEXTRA[code_d]; + if ((*bp + numextrabits_d) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/ + distance += readBitsFromStream(bp, in, numextrabits_d); + + /*part 5: fill in all the out[n] values based on the length and dist*/ + start = (*pos); + if (distance > start) ERROR_BREAK(52); /*too long backward distance*/ + backward = start - distance; + + if (!ucvector_resize(out, (*pos) + length)) ERROR_BREAK(83 /*alloc fail*/); + if (distance < length) { + for (forward = 0; forward < length; ++forward) + { + out->data[(*pos)++] = out->data[backward++]; + } + } + else { + memcpy(out->data + *pos, out->data + backward, length); + *pos += length; + } + } + else if (code_ll == 256) + { + break; /*end code, break the loop*/ + } + else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ + { + /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol + (10=no endcode, 11=wrong jump outside of tree)*/ + error = ((*bp) > inlength * 8) ? 10 : 11; + break; + } + } + + HuffmanTree_cleanup(&tree_ll); + HuffmanTree_cleanup(&tree_d); + + return error; +} + +static unsigned inflateNoCompression(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength) +{ + size_t p; + unsigned LEN, NLEN, n, error = 0; + + /*go to first boundary of byte*/ + while (((*bp) & 0x7) != 0) ++(*bp); + p = (*bp) / 8; /*byte position*/ + + /*read LEN (2 bytes) and NLEN (2 bytes)*/ + if (p + 4 >= inlength) return 52; /*error, bit pointer will jump past memory*/ + LEN = in[p] + 256u * in[p + 1]; p += 2; + NLEN = in[p] + 256u * in[p + 1]; p += 2; + + /*check if 16-bit NLEN is really the one's complement of LEN*/ + if (LEN + NLEN != 65535) return 21; /*error: NLEN is not one's complement of LEN*/ + + if (!ucvector_resize(out, (*pos) + LEN)) return 83; /*alloc fail*/ + + /*read the literal data: LEN bytes are now stored in the out buffer*/ + if (p + LEN > inlength) return 23; /*error: reading outside of in buffer*/ + for (n = 0; n < LEN; ++n) out->data[(*pos)++] = in[p++]; + + (*bp) = p * 8; + + return error; +} + +static unsigned lodepng_inflatev(ucvector* out, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) +{ + /*bit pointer in the "in" data, current byte is bp >> 3, current bit is bp & 0x7 (from lsb to msb of the byte)*/ + size_t bp = 0; + unsigned BFINAL = 0; + size_t pos = 0; /*byte position in the out buffer*/ + unsigned error = 0; + + (void)settings; + + while (!BFINAL) + { + unsigned BTYPE; + if (bp + 2 >= insize * 8) return 52; /*error, bit pointer will jump past memory*/ + BFINAL = readBitFromStream(&bp, in); + BTYPE = 1u * readBitFromStream(&bp, in); + BTYPE += 2u * readBitFromStream(&bp, in); + + if (BTYPE == 3) return 20; /*error: invalid BTYPE*/ + else if (BTYPE == 0) error = inflateNoCompression(out, in, &bp, &pos, insize); /*no compression*/ + else error = inflateHuffmanBlock(out, in, &bp, &pos, insize, BTYPE); /*compression, BTYPE 01 or 10*/ + + if (error) return error; + } + + return error; +} + +unsigned lodepng_inflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) +{ + unsigned error; + ucvector v; + ucvector_init_buffer(&v, *out, *outsize); + error = lodepng_inflatev(&v, in, insize, settings); + *out = v.data; + *outsize = v.size; + return error; +} + +static unsigned inflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) +{ + if (settings->custom_inflate) + { + return settings->custom_inflate(out, outsize, in, insize, settings); + } + else + { + return lodepng_inflate(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Deflator (Compressor) / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +static const size_t MAX_SUPPORTED_DEFLATE_LENGTH = 258; + +/*bitlen is the size in bits of the code*/ +static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned code, unsigned bitlen) +{ + addBitsToStreamReversed(bp, compressed, code, bitlen); +} + +/*search the index in the array, that has the largest value smaller than or equal to the given value, +given array must be sorted (if no value is smaller, it returns the size of the given array)*/ +static size_t searchCodeIndex(const unsigned* array, size_t array_size, size_t value) +{ + /*binary search (only small gain over linear). TODO: use CPU log2 instruction for getting symbols instead*/ + size_t left = 1; + size_t right = array_size - 1; + + while (left <= right) { + size_t mid = (left + right) >> 1; + if (array[mid] >= value) right = mid - 1; + else left = mid + 1; + } + if (left >= array_size || array[left] > value) left--; + return left; +} + +static void addLengthDistance(uivector* values, size_t length, size_t distance) +{ + /*values in encoded vector are those used by deflate: + 0-255: literal bytes + 256: end + 257-285: length/distance pair (length code, followed by extra length bits, distance code, extra distance bits) + 286-287: invalid*/ + + unsigned length_code = (unsigned)searchCodeIndex(LENGTHBASE, 29, length); + unsigned extra_length = (unsigned)(length - LENGTHBASE[length_code]); + unsigned dist_code = (unsigned)searchCodeIndex(DISTANCEBASE, 30, distance); + unsigned extra_distance = (unsigned)(distance - DISTANCEBASE[dist_code]); + + uivector_push_back(values, length_code + FIRST_LENGTH_CODE_INDEX); + uivector_push_back(values, extra_length); + uivector_push_back(values, dist_code); + uivector_push_back(values, extra_distance); +} + +/*3 bytes of data get encoded into two bytes. The hash cannot use more than 3 +bytes as input because 3 is the minimum match length for deflate*/ +static const unsigned HASH_NUM_VALUES = 65536; +static const unsigned HASH_BIT_MASK = 65535; /*HASH_NUM_VALUES - 1, but C90 does not like that as initializer*/ + +typedef struct Hash +{ + int* head; /*hash value to head circular pos - can be outdated if went around window*/ + /*circular pos to prev circular pos*/ + unsigned short* chain; + int* val; /*circular pos to hash value*/ + + /*TODO: do this not only for zeros but for any repeated byte. However for PNG + it's always going to be the zeros that dominate, so not important for PNG*/ + int* headz; /*similar to head, but for chainz*/ + unsigned short* chainz; /*those with same amount of zeros*/ + unsigned short* zeros; /*length of zeros streak, used as a second hash chain*/ +} Hash; + +static unsigned hash_init(Hash* hash, unsigned windowsize) +{ + unsigned i; + hash->head = (int*)lodepng_malloc(sizeof(int) * HASH_NUM_VALUES); + hash->val = (int*)lodepng_malloc(sizeof(int) * windowsize); + hash->chain = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); + + hash->zeros = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); + hash->headz = (int*)lodepng_malloc(sizeof(int) * (MAX_SUPPORTED_DEFLATE_LENGTH + 1)); + hash->chainz = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); + + if (!hash->head || !hash->chain || !hash->val || !hash->headz || !hash->chainz || !hash->zeros) + { + return 83; /*alloc fail*/ + } + + /*initialize hash table*/ + for (i = 0; i != HASH_NUM_VALUES; ++i) hash->head[i] = -1; + for (i = 0; i != windowsize; ++i) hash->val[i] = -1; + for (i = 0; i != windowsize; ++i) hash->chain[i] = i; /*same value as index indicates uninitialized*/ + + for (i = 0; i <= MAX_SUPPORTED_DEFLATE_LENGTH; ++i) hash->headz[i] = -1; + for (i = 0; i != windowsize; ++i) hash->chainz[i] = i; /*same value as index indicates uninitialized*/ + + return 0; +} + +static void hash_cleanup(Hash* hash) +{ + lodepng_free(hash->head); + lodepng_free(hash->val); + lodepng_free(hash->chain); + + lodepng_free(hash->zeros); + lodepng_free(hash->headz); + lodepng_free(hash->chainz); +} + + + +static unsigned getHash(const unsigned char* data, size_t size, size_t pos) +{ + unsigned result = 0; + if (pos + 2 < size) + { + /*A simple shift and xor hash is used. Since the data of PNGs is dominated + by zeroes due to the filters, a better hash does not have a significant + effect on speed in traversing the chain, and causes more time spend on + calculating the hash.*/ + result ^= (unsigned)(data[pos + 0] << 0u); + result ^= (unsigned)(data[pos + 1] << 4u); + result ^= (unsigned)(data[pos + 2] << 8u); + } + else { + size_t amount, i; + if (pos >= size) return 0; + amount = size - pos; + for (i = 0; i != amount; ++i) result ^= (unsigned)(data[pos + i] << (i * 8u)); + } + return result & HASH_BIT_MASK; +} + +static unsigned countZeros(const unsigned char* data, size_t size, size_t pos) +{ + const unsigned char* start = data + pos; + const unsigned char* end = start + MAX_SUPPORTED_DEFLATE_LENGTH; + if (end > data + size) end = data + size; + data = start; + while (data != end && *data == 0) ++data; + /*subtracting two addresses returned as 32-bit number (max value is MAX_SUPPORTED_DEFLATE_LENGTH)*/ + return (unsigned)(data - start); +} + +/*wpos = pos & (windowsize - 1)*/ +static void updateHashChain(Hash* hash, size_t wpos, unsigned hashval, unsigned short numzeros) +{ + hash->val[wpos] = (int)hashval; + if (hash->head[hashval] != -1) hash->chain[wpos] = hash->head[hashval]; + hash->head[hashval] = (int)wpos; + + hash->zeros[wpos] = numzeros; + if (hash->headz[numzeros] != -1) hash->chainz[wpos] = hash->headz[numzeros]; + hash->headz[numzeros] = (int)wpos; +} + +/* +LZ77-encode the data. Return value is error code. The input are raw bytes, the output +is in the form of unsigned integers with codes representing for example literal bytes, or +length/distance pairs. +It uses a hash table technique to let it encode faster. When doing LZ77 encoding, a +sliding window (of windowsize) is used, and all past bytes in that window can be used as +the "dictionary". A brute force search through all possible distances would be slow, and +this hash technique is one out of several ways to speed this up. +*/ +static unsigned encodeLZ77(uivector* out, Hash* hash, + const unsigned char* in, size_t inpos, size_t insize, unsigned windowsize, + unsigned minmatch, unsigned nicematch, unsigned lazymatching) +{ + size_t pos; + unsigned i, error = 0; + /*for large window lengths, assume the user wants no compression loss. Otherwise, max hash chain length speedup.*/ + unsigned maxchainlength = windowsize >= 8192 ? windowsize : windowsize / 8; + unsigned maxlazymatch = windowsize >= 8192 ? MAX_SUPPORTED_DEFLATE_LENGTH : 64; + + unsigned usezeros = 1; /*not sure if setting it to false for windowsize < 8192 is better or worse*/ + unsigned numzeros = 0; + + unsigned offset; /*the offset represents the distance in LZ77 terminology*/ + unsigned length; + unsigned lazy = 0; + unsigned lazylength = 0, lazyoffset = 0; + unsigned hashval; + unsigned current_offset, current_length; + unsigned prev_offset; + const unsigned char *lastptr, *foreptr, *backptr; + unsigned hashpos; + + if (windowsize == 0 || windowsize > 32768) return 60; /*error: windowsize smaller/larger than allowed*/ + if ((windowsize & (windowsize - 1)) != 0) return 90; /*error: must be power of two*/ + + if (nicematch > MAX_SUPPORTED_DEFLATE_LENGTH) nicematch = MAX_SUPPORTED_DEFLATE_LENGTH; + + for (pos = inpos; pos < insize; ++pos) + { + size_t wpos = pos & (windowsize - 1); /*position for in 'circular' hash buffers*/ + unsigned chainlength = 0; + + hashval = getHash(in, insize, pos); + + if (usezeros && hashval == 0) + { + if (numzeros == 0) numzeros = countZeros(in, insize, pos); + else if (pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros; + } + else + { + numzeros = 0; + } + + updateHashChain(hash, wpos, hashval, numzeros); + + /*the length and offset found for the current position*/ + length = 0; + offset = 0; + + hashpos = hash->chain[wpos]; + + lastptr = &in[insize < pos + MAX_SUPPORTED_DEFLATE_LENGTH ? insize : pos + MAX_SUPPORTED_DEFLATE_LENGTH]; + + /*search for the longest string*/ + prev_offset = 0; + for (;;) + { + if (chainlength++ >= maxchainlength) break; + current_offset = (unsigned int)(hashpos <= wpos ? wpos - hashpos : wpos - hashpos + windowsize); + + if (current_offset < prev_offset) break; /*stop when went completely around the circular buffer*/ + prev_offset = current_offset; + if (current_offset > 0) + { + /*test the next characters*/ + foreptr = &in[pos]; + backptr = &in[pos - current_offset]; + + /*common case in PNGs is lots of zeros. Quickly skip over them as a speedup*/ + if (numzeros >= 3) + { + unsigned skip = hash->zeros[hashpos]; + if (skip > numzeros) skip = numzeros; + backptr += skip; + foreptr += skip; + } + + while (foreptr != lastptr && *backptr == *foreptr) /*maximum supported length by deflate is max length*/ + { + ++backptr; + ++foreptr; + } + current_length = (unsigned)(foreptr - &in[pos]); + + if (current_length > length) + { + length = current_length; /*the longest length*/ + offset = current_offset; /*the offset that is related to this longest length*/ + /*jump out once a length of max length is found (speed gain). This also jumps + out if length is MAX_SUPPORTED_DEFLATE_LENGTH*/ + if (current_length >= nicematch) break; + } + } + + if (hashpos == hash->chain[hashpos]) break; + + if (numzeros >= 3 && length > numzeros) + { + hashpos = hash->chainz[hashpos]; + if (hash->zeros[hashpos] != numzeros) break; + } + else + { + hashpos = hash->chain[hashpos]; + /*outdated hash value, happens if particular value was not encountered in whole last window*/ + if (hash->val[hashpos] != (int)hashval) break; + } + } + + if (lazymatching) + { + if (!lazy && length >= 3 && length <= maxlazymatch && length < MAX_SUPPORTED_DEFLATE_LENGTH) + { + lazy = 1; + lazylength = length; + lazyoffset = offset; + continue; /*try the next byte*/ + } + if (lazy) + { + lazy = 0; + if (pos == 0) ERROR_BREAK(81); + if (length > lazylength + 1) + { + /*push the previous character as literal*/ + if (!uivector_push_back(out, in[pos - 1])) ERROR_BREAK(83 /*alloc fail*/); + } + else + { + length = lazylength; + offset = lazyoffset; + hash->head[hashval] = -1; /*the same hashchain update will be done, this ensures no wrong alteration*/ + hash->headz[numzeros] = -1; /*idem*/ + --pos; + } + } + } + if (length >= 3 && offset > windowsize) ERROR_BREAK(86 /*too big (or overflown negative) offset*/); + + /*encode it as length/distance pair or literal value*/ + if (length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/ + { + if (!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/); + } + else if (length < minmatch || (length == 3 && offset > 4096)) + { + /*compensate for the fact that longer offsets have more extra bits, a + length of only 3 may be not worth it then*/ + if (!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/); + } + else + { + addLengthDistance(out, length, offset); + for (i = 1; i < length; ++i) + { + ++pos; + wpos = pos & (windowsize - 1); + hashval = getHash(in, insize, pos); + if (usezeros && hashval == 0) + { + if (numzeros == 0) numzeros = countZeros(in, insize, pos); + else if (pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros; + } + else + { + numzeros = 0; + } + updateHashChain(hash, wpos, hashval, numzeros); + } + } + } /*end of the loop through each character of input*/ + + return error; +} + +/* /////////////////////////////////////////////////////////////////////////// */ + +static unsigned deflateNoCompression(ucvector* out, const unsigned char* data, size_t datasize) +{ + /*non compressed deflate block data: 1 bit BFINAL,2 bits BTYPE,(5 bits): it jumps to start of next byte, + 2 bytes LEN, 2 bytes NLEN, LEN bytes literal DATA*/ + + size_t i, j, numdeflateblocks = (datasize + 65534) / 65535; + unsigned datapos = 0; + for (i = 0; i != numdeflateblocks; ++i) + { + unsigned BFINAL, BTYPE, LEN, NLEN; + unsigned char firstbyte; + + BFINAL = (i == numdeflateblocks - 1); + BTYPE = 0; + + firstbyte = (unsigned char)(BFINAL + ((BTYPE & 1) << 1) + ((BTYPE & 2) << 1)); + ucvector_push_back(out, firstbyte); + + LEN = 65535; + if (datasize - datapos < 65535) LEN = (unsigned)datasize - datapos; + NLEN = 65535 - LEN; + + ucvector_push_back(out, (unsigned char)(LEN & 255)); + ucvector_push_back(out, (unsigned char)(LEN >> 8)); + ucvector_push_back(out, (unsigned char)(NLEN & 255)); + ucvector_push_back(out, (unsigned char)(NLEN >> 8)); + + /*Decompressed data*/ + for (j = 0; j < 65535 && datapos < datasize; ++j) + { + ucvector_push_back(out, data[datapos++]); + } + } + + return 0; +} + +/* +write the lz77-encoded data, which has lit, len and dist codes, to compressed stream using huffman trees. +tree_ll: the tree for lit and len codes. +tree_d: the tree for distance codes. +*/ +static void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz77_encoded, + const HuffmanTree* tree_ll, const HuffmanTree* tree_d) +{ + size_t i = 0; + for (i = 0; i != lz77_encoded->size; ++i) + { + unsigned val = lz77_encoded->data[i]; + addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_ll, val), HuffmanTree_getLength(tree_ll, val)); + if (val > 256) /*for a length code, 3 more things have to be added*/ + { + unsigned length_index = val - FIRST_LENGTH_CODE_INDEX; + unsigned n_length_extra_bits = LENGTHEXTRA[length_index]; + unsigned length_extra_bits = lz77_encoded->data[++i]; + + unsigned distance_code = lz77_encoded->data[++i]; + + unsigned distance_index = distance_code; + unsigned n_distance_extra_bits = DISTANCEEXTRA[distance_index]; + unsigned distance_extra_bits = lz77_encoded->data[++i]; + + addBitsToStream(bp, out, length_extra_bits, n_length_extra_bits); + addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_d, distance_code), + HuffmanTree_getLength(tree_d, distance_code)); + addBitsToStream(bp, out, distance_extra_bits, n_distance_extra_bits); + } + } +} + +/*Deflate for a block of type "dynamic", that is, with freely, optimally, created huffman trees*/ +static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash, + const unsigned char* data, size_t datapos, size_t dataend, + const LodePNGCompressSettings* settings, unsigned final) +{ + unsigned error = 0; + + /* + A block is compressed as follows: The PNG data is lz77 encoded, resulting in + literal bytes and length/distance pairs. This is then huffman compressed with + two huffman trees. One huffman tree is used for the lit and len values ("ll"), + another huffman tree is used for the dist values ("d"). These two trees are + stored using their code lengths, and to compress even more these code lengths + are also run-length encoded and huffman compressed. This gives a huffman tree + of code lengths "cl". The code lenghts used to describe this third tree are + the code length code lengths ("clcl"). + */ + + /*The lz77 encoded data, represented with integers since there will also be length and distance codes in it*/ + uivector lz77_encoded; + HuffmanTree tree_ll; /*tree for lit,len values*/ + HuffmanTree tree_d; /*tree for distance codes*/ + HuffmanTree tree_cl; /*tree for encoding the code lengths representing tree_ll and tree_d*/ + uivector frequencies_ll; /*frequency of lit,len codes*/ + uivector frequencies_d; /*frequency of dist codes*/ + uivector frequencies_cl; /*frequency of code length codes*/ + uivector bitlen_lld; /*lit,len,dist code lenghts (int bits), literally (without repeat codes).*/ + uivector bitlen_lld_e; /*bitlen_lld encoded with repeat codes (this is a rudemtary run length compression)*/ + /*bitlen_cl is the code length code lengths ("clcl"). The bit lengths of codes to represent tree_cl + (these are written as is in the file, it would be crazy to compress these using yet another huffman + tree that needs to be represented by yet another set of code lengths)*/ + uivector bitlen_cl; + size_t datasize = dataend - datapos; + + /* + Due to the huffman compression of huffman tree representations ("two levels"), there are some anologies: + bitlen_lld is to tree_cl what data is to tree_ll and tree_d. + bitlen_lld_e is to bitlen_lld what lz77_encoded is to data. + bitlen_cl is to bitlen_lld_e what bitlen_lld is to lz77_encoded. + */ + + unsigned BFINAL = final; + size_t numcodes_ll, numcodes_d, i; + unsigned HLIT, HDIST, HCLEN; + + uivector_init(&lz77_encoded); + HuffmanTree_init(&tree_ll); + HuffmanTree_init(&tree_d); + HuffmanTree_init(&tree_cl); + uivector_init(&frequencies_ll); + uivector_init(&frequencies_d); + uivector_init(&frequencies_cl); + uivector_init(&bitlen_lld); + uivector_init(&bitlen_lld_e); + uivector_init(&bitlen_cl); + + /*This while loop never loops due to a break at the end, it is here to + allow breaking out of it to the cleanup phase on error conditions.*/ + while (!error) + { + if (settings->use_lz77) + { + error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, + settings->minmatch, settings->nicematch, settings->lazymatching); + if (error) break; + } + else + { + if (!uivector_resize(&lz77_encoded, datasize)) ERROR_BREAK(83 /*alloc fail*/); + for (i = datapos; i < dataend; ++i) lz77_encoded.data[i - datapos] = data[i]; /*no LZ77, but still will be Huffman compressed*/ + } + + if (!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83 /*alloc fail*/); + if (!uivector_resizev(&frequencies_d, 30, 0)) ERROR_BREAK(83 /*alloc fail*/); + + /*Count the frequencies of lit, len and dist codes*/ + for (i = 0; i != lz77_encoded.size; ++i) + { + unsigned symbol = lz77_encoded.data[i]; + ++frequencies_ll.data[symbol]; + if (symbol > 256) + { + unsigned dist = lz77_encoded.data[i + 2]; + ++frequencies_d.data[dist]; + i += 3; + } + } + frequencies_ll.data[256] = 1; /*there will be exactly 1 end code, at the end of the block*/ + + /*Make both huffman trees, one for the lit and len codes, one for the dist codes*/ + error = HuffmanTree_makeFromFrequencies(&tree_ll, frequencies_ll.data, 257, frequencies_ll.size, 15); + if (error) break; + /*2, not 1, is chosen for mincodes: some buggy PNG decoders require at least 2 symbols in the dist tree*/ + error = HuffmanTree_makeFromFrequencies(&tree_d, frequencies_d.data, 2, frequencies_d.size, 15); + if (error) break; + + numcodes_ll = tree_ll.numcodes; if (numcodes_ll > 286) numcodes_ll = 286; + numcodes_d = tree_d.numcodes; if (numcodes_d > 30) numcodes_d = 30; + /*store the code lengths of both generated trees in bitlen_lld*/ + for (i = 0; i != numcodes_ll; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_ll, (unsigned)i)); + for (i = 0; i != numcodes_d; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_d, (unsigned)i)); + + /*run-length compress bitlen_ldd into bitlen_lld_e by using repeat codes 16 (copy length 3-6 times), + 17 (3-10 zeroes), 18 (11-138 zeroes)*/ + for (i = 0; i != (unsigned)bitlen_lld.size; ++i) + { + unsigned j = 0; /*amount of repititions*/ + while (i + j + 1 < (unsigned)bitlen_lld.size && bitlen_lld.data[i + j + 1] == bitlen_lld.data[i]) ++j; + + if (bitlen_lld.data[i] == 0 && j >= 2) /*repeat code for zeroes*/ + { + ++j; /*include the first zero*/ + if (j <= 10) /*repeat code 17 supports max 10 zeroes*/ + { + uivector_push_back(&bitlen_lld_e, 17); + uivector_push_back(&bitlen_lld_e, j - 3); + } + else /*repeat code 18 supports max 138 zeroes*/ + { + if (j > 138) j = 138; + uivector_push_back(&bitlen_lld_e, 18); + uivector_push_back(&bitlen_lld_e, j - 11); + } + i += (j - 1); + } + else if (j >= 3) /*repeat code for value other than zero*/ + { + size_t k; + unsigned num = j / 6, rest = j % 6; + uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]); + for (k = 0; k < num; ++k) + { + uivector_push_back(&bitlen_lld_e, 16); + uivector_push_back(&bitlen_lld_e, 6 - 3); + } + if (rest >= 3) + { + uivector_push_back(&bitlen_lld_e, 16); + uivector_push_back(&bitlen_lld_e, rest - 3); + } + else j -= rest; + i += j; + } + else /*too short to benefit from repeat code*/ + { + uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]); + } + } + + /*generate tree_cl, the huffmantree of huffmantrees*/ + + if (!uivector_resizev(&frequencies_cl, NUM_CODE_LENGTH_CODES, 0)) ERROR_BREAK(83 /*alloc fail*/); + for (i = 0; i != bitlen_lld_e.size; ++i) + { + ++frequencies_cl.data[bitlen_lld_e.data[i]]; + /*after a repeat code come the bits that specify the number of repetitions, + those don't need to be in the frequencies_cl calculation*/ + if (bitlen_lld_e.data[i] >= 16) ++i; + } + + error = HuffmanTree_makeFromFrequencies(&tree_cl, frequencies_cl.data, + frequencies_cl.size, frequencies_cl.size, 7); + if (error) break; + + if (!uivector_resize(&bitlen_cl, tree_cl.numcodes)) ERROR_BREAK(83 /*alloc fail*/); + for (i = 0; i != tree_cl.numcodes; ++i) + { + /*lenghts of code length tree is in the order as specified by deflate*/ + bitlen_cl.data[i] = HuffmanTree_getLength(&tree_cl, CLCL_ORDER[i]); + } + while (bitlen_cl.data[bitlen_cl.size - 1] == 0 && bitlen_cl.size > 4) + { + /*remove zeros at the end, but minimum size must be 4*/ + if (!uivector_resize(&bitlen_cl, bitlen_cl.size - 1)) ERROR_BREAK(83 /*alloc fail*/); + } + if (error) break; + + /* + Write everything into the output + + After the BFINAL and BTYPE, the dynamic block consists out of the following: + - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN + - (HCLEN+4)*3 bits code lengths of code length alphabet + - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length + alphabet, + possible repetition codes 16, 17, 18) + - HDIST + 1 code lengths of distance alphabet (encoded using the code length + alphabet, + possible repetition codes 16, 17, 18) + - compressed data + - 256 (end code) + */ + + /*Write block type*/ + addBitToStream(bp, out, BFINAL); + addBitToStream(bp, out, 0); /*first bit of BTYPE "dynamic"*/ + addBitToStream(bp, out, 1); /*second bit of BTYPE "dynamic"*/ + + /*write the HLIT, HDIST and HCLEN values*/ + HLIT = (unsigned)(numcodes_ll - 257); + HDIST = (unsigned)(numcodes_d - 1); + HCLEN = (unsigned)bitlen_cl.size - 4; + /*trim zeroes for HCLEN. HLIT and HDIST were already trimmed at tree creation*/ + while (!bitlen_cl.data[HCLEN + 4 - 1] && HCLEN > 0) --HCLEN; + addBitsToStream(bp, out, HLIT, 5); + addBitsToStream(bp, out, HDIST, 5); + addBitsToStream(bp, out, HCLEN, 4); + + /*write the code lenghts of the code length alphabet*/ + for (i = 0; i != HCLEN + 4; ++i) addBitsToStream(bp, out, bitlen_cl.data[i], 3); + + /*write the lenghts of the lit/len AND the dist alphabet*/ + for (i = 0; i != bitlen_lld_e.size; ++i) + { + addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_cl, bitlen_lld_e.data[i]), + HuffmanTree_getLength(&tree_cl, bitlen_lld_e.data[i])); + /*extra bits of repeat codes*/ + if (bitlen_lld_e.data[i] == 16) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 2); + else if (bitlen_lld_e.data[i] == 17) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 3); + else if (bitlen_lld_e.data[i] == 18) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 7); + } + + /*write the compressed data symbols*/ + writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d); + /*error: the length of the end code 256 must be larger than 0*/ + if (HuffmanTree_getLength(&tree_ll, 256) == 0) ERROR_BREAK(64); + + /*write the end code*/ + addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); + + break; /*end of error-while*/ + } + + /*cleanup*/ + uivector_cleanup(&lz77_encoded); + HuffmanTree_cleanup(&tree_ll); + HuffmanTree_cleanup(&tree_d); + HuffmanTree_cleanup(&tree_cl); + uivector_cleanup(&frequencies_ll); + uivector_cleanup(&frequencies_d); + uivector_cleanup(&frequencies_cl); + uivector_cleanup(&bitlen_lld_e); + uivector_cleanup(&bitlen_lld); + uivector_cleanup(&bitlen_cl); + + return error; +} + +static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash, + const unsigned char* data, + size_t datapos, size_t dataend, + const LodePNGCompressSettings* settings, unsigned final) +{ + HuffmanTree tree_ll; /*tree for literal values and length codes*/ + HuffmanTree tree_d; /*tree for distance codes*/ + + unsigned BFINAL = final; + unsigned error = 0; + size_t i; + + HuffmanTree_init(&tree_ll); + HuffmanTree_init(&tree_d); + + generateFixedLitLenTree(&tree_ll); + generateFixedDistanceTree(&tree_d); + + addBitToStream(bp, out, BFINAL); + addBitToStream(bp, out, 1); /*first bit of BTYPE*/ + addBitToStream(bp, out, 0); /*second bit of BTYPE*/ + + if (settings->use_lz77) /*LZ77 encoded*/ + { + uivector lz77_encoded; + uivector_init(&lz77_encoded); + error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, + settings->minmatch, settings->nicematch, settings->lazymatching); + if (!error) writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d); + uivector_cleanup(&lz77_encoded); + } + else /*no LZ77, but still will be Huffman compressed*/ + { + for (i = datapos; i < dataend; ++i) + { + addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, data[i]), HuffmanTree_getLength(&tree_ll, data[i])); + } + } + /*add END code*/ + if (!error) addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); + + /*cleanup*/ + HuffmanTree_cleanup(&tree_ll); + HuffmanTree_cleanup(&tree_d); + + return error; +} + +static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings) +{ + unsigned error = 0; + size_t i, blocksize, numdeflateblocks; + size_t bp = 0; /*the bit pointer*/ + Hash hash; + + if (settings->btype > 2) return 61; + else if (settings->btype == 0) return deflateNoCompression(out, in, insize); + else if (settings->btype == 1) blocksize = insize; + else /*if(settings->btype == 2)*/ + { + /*on PNGs, deflate blocks of 65-262k seem to give most dense encoding*/ + blocksize = insize / 8 + 8; + if (blocksize < 65536) blocksize = 65536; + if (blocksize > 262144) blocksize = 262144; + } + + numdeflateblocks = (insize + blocksize - 1) / blocksize; + if (numdeflateblocks == 0) numdeflateblocks = 1; + + error = hash_init(&hash, settings->windowsize); + if (error) return error; + + for (i = 0; i != numdeflateblocks && !error; ++i) + { + unsigned final = (i == numdeflateblocks - 1); + size_t start = i * blocksize; + size_t end = start + blocksize; + if (end > insize) end = insize; + + if (settings->btype == 1) error = deflateFixed(out, &bp, &hash, in, start, end, settings, final); + else if (settings->btype == 2) error = deflateDynamic(out, &bp, &hash, in, start, end, settings, final); + } + + hash_cleanup(&hash); + + return error; +} + +unsigned lodepng_deflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings) +{ + unsigned error; + ucvector v; + ucvector_init_buffer(&v, *out, *outsize); + error = lodepng_deflatev(&v, in, insize, settings); + *out = v.data; + *outsize = v.size; + return error; +} + +static unsigned deflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings) +{ + if (settings->custom_deflate) + { + return settings->custom_deflate(out, outsize, in, insize, settings); + } + else + { + return lodepng_deflate(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Adler32 */ +/* ////////////////////////////////////////////////////////////////////////// */ + +static unsigned update_adler32(unsigned adler, const unsigned char* data, unsigned len) +{ + unsigned s1 = adler & 0xffff; + unsigned s2 = (adler >> 16) & 0xffff; + + while (len > 0) + { + /*at least 5550 sums can be done before the sums overflow, saving a lot of module divisions*/ + unsigned amount = len > 5550 ? 5550 : len; + len -= amount; + while (amount > 0) + { + s1 += (*data++); + s2 += s1; + --amount; + } + s1 %= 65521; + s2 %= 65521; + } + + return (s2 << 16) | s1; +} + +/*Return the adler32 of the bytes data[0..len-1]*/ +static unsigned adler32(const unsigned char* data, unsigned len) +{ + return update_adler32(1L, data, len); +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Zlib / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_DECODER + +unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGDecompressSettings* settings) +{ + unsigned error = 0; + unsigned CM, CINFO, FDICT; + + if (insize < 2) return 53; /*error, size of zlib data too small*/ + /*read information from zlib header*/ + if ((in[0] * 256 + in[1]) % 31 != 0) + { + /*error: 256 * in[0] + in[1] must be a multiple of 31, the FCHECK value is supposed to be made that way*/ + return 24; + } + + CM = in[0] & 15; + CINFO = (in[0] >> 4) & 15; + /*FCHECK = in[1] & 31;*/ /*FCHECK is already tested above*/ + FDICT = (in[1] >> 5) & 1; + /*FLEVEL = (in[1] >> 6) & 3;*/ /*FLEVEL is not used here*/ + + if (CM != 8 || CINFO > 7) + { + /*error: only compression method 8: inflate with sliding window of 32k is supported by the PNG spec*/ + return 25; + } + if (FDICT != 0) + { + /*error: the specification of PNG says about the zlib stream: + "The additional flags shall not specify a preset dictionary."*/ + return 26; + } + + error = inflate(out, outsize, in + 2, insize - 2, settings); + if (error) return error; + + if (!settings->ignore_adler32) + { + unsigned ADLER32 = lodepng_read32bitInt(&in[insize - 4]); + unsigned checksum = adler32(*out, (unsigned)(*outsize)); + if (checksum != ADLER32) return 58; /*error, adler checksum not correct, data must be corrupted*/ + } + + return 0; /*no error*/ +} + +static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGDecompressSettings* settings) +{ + if (settings->custom_zlib) + { + return settings->custom_zlib(out, outsize, in, insize, settings); + } + else + { + return lodepng_zlib_decompress(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER + +unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGCompressSettings* settings) +{ + /*initially, *out must be NULL and outsize 0, if you just give some random *out + that's pointing to a non allocated buffer, this'll crash*/ + ucvector outv; + size_t i; + unsigned error; + unsigned char* deflatedata = 0; + size_t deflatesize = 0; + + /*zlib data: 1 byte CMF (CM+CINFO), 1 byte FLG, deflate data, 4 byte ADLER32 checksum of the Decompressed data*/ + unsigned CMF = 120; /*0b01111000: CM 8, CINFO 7. With CINFO 7, any window size up to 32768 can be used.*/ + unsigned FLEVEL = 0; + unsigned FDICT = 0; + unsigned CMFFLG = 256 * CMF + FDICT * 32 + FLEVEL * 64; + unsigned FCHECK = 31 - CMFFLG % 31; + CMFFLG += FCHECK; + + /*ucvector-controlled version of the output buffer, for dynamic array*/ + ucvector_init_buffer(&outv, *out, *outsize); + + ucvector_push_back(&outv, (unsigned char)(CMFFLG >> 8)); + ucvector_push_back(&outv, (unsigned char)(CMFFLG & 255)); + + error = deflate(&deflatedata, &deflatesize, in, insize, settings); + + if (!error) + { + unsigned ADLER32 = adler32(in, (unsigned)insize); + for (i = 0; i != deflatesize; ++i) ucvector_push_back(&outv, deflatedata[i]); + lodepng_free(deflatedata); + lodepng_add32bitInt(&outv, ADLER32); + } + + *out = outv.data; + *outsize = outv.size; + + return error; +} + +/* compress using the default or custom zlib function */ +static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGCompressSettings* settings) +{ + if (settings->custom_zlib) + { + return settings->custom_zlib(out, outsize, in, insize, settings); + } + else + { + return lodepng_zlib_compress(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#else /*no LODEPNG_COMPILE_ZLIB*/ + +#ifdef LODEPNG_COMPILE_DECODER +static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGDecompressSettings* settings) +{ + if (!settings->custom_zlib) return 87; /*no custom zlib function provided */ + return settings->custom_zlib(out, outsize, in, insize, settings); +} +#endif /*LODEPNG_COMPILE_DECODER*/ +#ifdef LODEPNG_COMPILE_ENCODER +static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGCompressSettings* settings) +{ + if (!settings->custom_zlib) return 87; /*no custom zlib function provided */ + return settings->custom_zlib(out, outsize, in, insize, settings); +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#endif /*LODEPNG_COMPILE_ZLIB*/ + +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_ENCODER + +/*this is a good tradeoff between speed and compression ratio*/ +#define DEFAULT_WINDOWSIZE 2048 + +void lodepng_compress_settings_init(LodePNGCompressSettings* settings) +{ + /*compress with dynamic huffman tree (not in the mathematical sense, just not the predefined one)*/ + settings->btype = 2; + settings->use_lz77 = 1; + settings->windowsize = DEFAULT_WINDOWSIZE; + settings->minmatch = 3; + settings->nicematch = 128; + settings->lazymatching = 1; + + settings->custom_zlib = 0; + settings->custom_deflate = 0; + settings->custom_context = 0; +} + +const LodePNGCompressSettings lodepng_default_compress_settings = { 2, 1, DEFAULT_WINDOWSIZE, 3, 128, 1, 0, 0, 0 }; + + +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_DECODER + +void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings) +{ + settings->ignore_adler32 = 0; + + settings->custom_zlib = 0; + settings->custom_inflate = 0; + settings->custom_context = 0; +} + +const LodePNGDecompressSettings lodepng_default_decompress_settings = { 0, 0, 0, 0 }; + +#endif /*LODEPNG_COMPILE_DECODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // End of Zlib related code. Begin of PNG related code. // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_PNG + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / CRC32 / */ +/* ////////////////////////////////////////////////////////////////////////// */ + + +#ifndef LODEPNG_NO_COMPILE_CRC +/* CRC polynomial: 0xedb88320 */ +static unsigned lodepng_crc32_table[256] = { + 0u, 1996959894u, 3993919788u, 2567524794u, 124634137u, 1886057615u, 3915621685u, 2657392035u, + 249268274u, 2044508324u, 3772115230u, 2547177864u, 162941995u, 2125561021u, 3887607047u, 2428444049u, + 498536548u, 1789927666u, 4089016648u, 2227061214u, 450548861u, 1843258603u, 4107580753u, 2211677639u, + 325883990u, 1684777152u, 4251122042u, 2321926636u, 335633487u, 1661365465u, 4195302755u, 2366115317u, + 997073096u, 1281953886u, 3579855332u, 2724688242u, 1006888145u, 1258607687u, 3524101629u, 2768942443u, + 901097722u, 1119000684u, 3686517206u, 2898065728u, 853044451u, 1172266101u, 3705015759u, 2882616665u, + 651767980u, 1373503546u, 3369554304u, 3218104598u, 565507253u, 1454621731u, 3485111705u, 3099436303u, + 671266974u, 1594198024u, 3322730930u, 2970347812u, 795835527u, 1483230225u, 3244367275u, 3060149565u, + 1994146192u, 31158534u, 2563907772u, 4023717930u, 1907459465u, 112637215u, 2680153253u, 3904427059u, + 2013776290u, 251722036u, 2517215374u, 3775830040u, 2137656763u, 141376813u, 2439277719u, 3865271297u, + 1802195444u, 476864866u, 2238001368u, 4066508878u, 1812370925u, 453092731u, 2181625025u, 4111451223u, + 1706088902u, 314042704u, 2344532202u, 4240017532u, 1658658271u, 366619977u, 2362670323u, 4224994405u, + 1303535960u, 984961486u, 2747007092u, 3569037538u, 1256170817u, 1037604311u, 2765210733u, 3554079995u, + 1131014506u, 879679996u, 2909243462u, 3663771856u, 1141124467u, 855842277u, 2852801631u, 3708648649u, + 1342533948u, 654459306u, 3188396048u, 3373015174u, 1466479909u, 544179635u, 3110523913u, 3462522015u, + 1591671054u, 702138776u, 2966460450u, 3352799412u, 1504918807u, 783551873u, 3082640443u, 3233442989u, + 3988292384u, 2596254646u, 62317068u, 1957810842u, 3939845945u, 2647816111u, 81470997u, 1943803523u, + 3814918930u, 2489596804u, 225274430u, 2053790376u, 3826175755u, 2466906013u, 167816743u, 2097651377u, + 4027552580u, 2265490386u, 503444072u, 1762050814u, 4150417245u, 2154129355u, 426522225u, 1852507879u, + 4275313526u, 2312317920u, 282753626u, 1742555852u, 4189708143u, 2394877945u, 397917763u, 1622183637u, + 3604390888u, 2714866558u, 953729732u, 1340076626u, 3518719985u, 2797360999u, 1068828381u, 1219638859u, + 3624741850u, 2936675148u, 906185462u, 1090812512u, 3747672003u, 2825379669u, 829329135u, 1181335161u, + 3412177804u, 3160834842u, 628085408u, 1382605366u, 3423369109u, 3138078467u, 570562233u, 1426400815u, + 3317316542u, 2998733608u, 733239954u, 1555261956u, 3268935591u, 3050360625u, 752459403u, 1541320221u, + 2607071920u, 3965973030u, 1969922972u, 40735498u, 2617837225u, 3943577151u, 1913087877u, 83908371u, + 2512341634u, 3803740692u, 2075208622u, 213261112u, 2463272603u, 3855990285u, 2094854071u, 198958881u, + 2262029012u, 4057260610u, 1759359992u, 534414190u, 2176718541u, 4139329115u, 1873836001u, 414664567u, + 2282248934u, 4279200368u, 1711684554u, 285281116u, 2405801727u, 4167216745u, 1634467795u, 376229701u, + 2685067896u, 3608007406u, 1308918612u, 956543938u, 2808555105u, 3495958263u, 1231636301u, 1047427035u, + 2932959818u, 3654703836u, 1088359270u, 936918000u, 2847714899u, 3736837829u, 1202900863u, 817233897u, + 3183342108u, 3401237130u, 1404277552u, 615818150u, 3134207493u, 3453421203u, 1423857449u, 601450431u, + 3009837614u, 3294710456u, 1567103746u, 711928724u, 3020668471u, 3272380065u, 1510334235u, 755167117u +}; + +/*Return the CRC of the bytes buf[0..len-1].*/ +unsigned lodepng_crc32(const unsigned char* data, size_t length) +{ + unsigned r = 0xffffffffu; + size_t i; + for (i = 0; i < length; ++i) + { + r = lodepng_crc32_table[(r ^ data[i]) & 0xff] ^ (r >> 8); + } + return r ^ 0xffffffffu; +} +#else /* !LODEPNG_NO_COMPILE_CRC */ +unsigned lodepng_crc32(const unsigned char* data, size_t length); +#endif /* !LODEPNG_NO_COMPILE_CRC */ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Reading and writing single bits and bytes from/to stream for LodePNG / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +static unsigned char readBitFromReversedStream(size_t* bitpointer, const unsigned char* bitstream) +{ + unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> (7 - ((*bitpointer) & 0x7))) & 1); + ++(*bitpointer); + return result; +} + +static unsigned readBitsFromReversedStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) +{ + unsigned result = 0; + size_t i; + for (i = 0; i < nbits; ++i) + { + result <<= 1; + result |= (unsigned)readBitFromReversedStream(bitpointer, bitstream); + } + return result; +} + +#ifdef LODEPNG_COMPILE_DECODER +static void setBitOfReversedStream0(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) +{ + /*the current bit in bitstream must be 0 for this to work*/ + if (bit) + { + /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/ + bitstream[(*bitpointer) >> 3] |= (bit << (7 - ((*bitpointer) & 0x7))); + } + ++(*bitpointer); +} +#endif /*LODEPNG_COMPILE_DECODER*/ + +static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) +{ + /*the current bit in bitstream may be 0 or 1 for this to work*/ + if (bit == 0) bitstream[(*bitpointer) >> 3] &= (unsigned char)(~(1 << (7 - ((*bitpointer) & 0x7)))); + else bitstream[(*bitpointer) >> 3] |= (1 << (7 - ((*bitpointer) & 0x7))); + ++(*bitpointer); +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / PNG chunks / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +unsigned lodepng_chunk_length(const unsigned char* chunk) +{ + return lodepng_read32bitInt(&chunk[0]); +} + +void lodepng_chunk_type(char type[5], const unsigned char* chunk) +{ + unsigned i; + for (i = 0; i != 4; ++i) type[i] = (char)chunk[4 + i]; + type[4] = 0; /*null termination char*/ +} + +unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type) +{ + if (strlen(type) != 4) return 0; + return (chunk[4] == type[0] && chunk[5] == type[1] && chunk[6] == type[2] && chunk[7] == type[3]); +} + +unsigned char lodepng_chunk_ancillary(const unsigned char* chunk) +{ + return((chunk[4] & 32) != 0); +} + +unsigned char lodepng_chunk_private(const unsigned char* chunk) +{ + return((chunk[6] & 32) != 0); +} + +unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk) +{ + return((chunk[7] & 32) != 0); +} + +unsigned char* lodepng_chunk_data(unsigned char* chunk) +{ + return &chunk[8]; +} + +const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk) +{ + return &chunk[8]; +} + +unsigned lodepng_chunk_check_crc(const unsigned char* chunk) +{ + unsigned length = lodepng_chunk_length(chunk); + unsigned CRC = lodepng_read32bitInt(&chunk[length + 8]); + /*the CRC is taken of the data and the 4 chunk type letters, not the length*/ + unsigned checksum = lodepng_crc32(&chunk[4], length + 4); + if (CRC != checksum) return 1; + else return 0; +} + +void lodepng_chunk_generate_crc(unsigned char* chunk) +{ + unsigned length = lodepng_chunk_length(chunk); + unsigned CRC = lodepng_crc32(&chunk[4], length + 4); + lodepng_set32bitInt(chunk + 8 + length, CRC); +} + +unsigned char* lodepng_chunk_next(unsigned char* chunk) +{ + unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; + return &chunk[total_chunk_length]; +} + +const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk) +{ + unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; + return &chunk[total_chunk_length]; +} + +unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk) +{ + unsigned i; + unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; + unsigned char *chunk_start, *new_buffer; + size_t new_length = (*outlength) + total_chunk_length; + if (new_length < total_chunk_length || new_length < (*outlength)) return 77; /*integer overflow happened*/ + + new_buffer = (unsigned char*)lodepng_realloc(*out, new_length); + if (!new_buffer) return 83; /*alloc fail*/ + (*out) = new_buffer; + (*outlength) = new_length; + chunk_start = &(*out)[new_length - total_chunk_length]; + + for (i = 0; i != total_chunk_length; ++i) chunk_start[i] = chunk[i]; + + return 0; +} + +unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, + const char* type, const unsigned char* data) +{ + unsigned i; + unsigned char *chunk, *new_buffer; + size_t new_length = (*outlength) + length + 12; + if (new_length < length + 12 || new_length < (*outlength)) return 77; /*integer overflow happened*/ + new_buffer = (unsigned char*)lodepng_realloc(*out, new_length); + if (!new_buffer) return 83; /*alloc fail*/ + (*out) = new_buffer; + (*outlength) = new_length; + chunk = &(*out)[(*outlength) - length - 12]; + + /*1: length*/ + lodepng_set32bitInt(chunk, (unsigned)length); + + /*2: chunk name (4 letters)*/ + chunk[4] = (unsigned char)type[0]; + chunk[5] = (unsigned char)type[1]; + chunk[6] = (unsigned char)type[2]; + chunk[7] = (unsigned char)type[3]; + + /*3: the data*/ + for (i = 0; i != length; ++i) chunk[8 + i] = data[i]; + + /*4: CRC (of the chunkname characters and the data)*/ + lodepng_chunk_generate_crc(chunk); + + return 0; +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Color types and such / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*return type is a LodePNG error code*/ +static unsigned checkColorValidity(LodePNGColorType colortype, unsigned bd) /*bd = bitdepth*/ +{ + switch (colortype) + { + case 0: if (!(bd == 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) return 37; break; /*grey*/ + case 2: if (!(bd == 8 || bd == 16)) return 37; break; /*RGB*/ + case 3: if (!(bd == 1 || bd == 2 || bd == 4 || bd == 8)) return 37; break; /*palette*/ + case 4: if (!(bd == 8 || bd == 16)) return 37; break; /*grey + alpha*/ + case 6: if (!(bd == 8 || bd == 16)) return 37; break; /*RGBA*/ + default: return 31; + } + return 0; /*allowed color type / bits combination*/ +} + +static unsigned getNumColorChannels(LodePNGColorType colortype) +{ + switch (colortype) + { + case 0: return 1; /*grey*/ + case 2: return 3; /*RGB*/ + case 3: return 1; /*palette*/ + case 4: return 2; /*grey + alpha*/ + case 6: return 4; /*RGBA*/ + } + return 0; /*unexisting color type*/ +} + +static unsigned lodepng_get_bpp_lct(LodePNGColorType colortype, unsigned bitdepth) +{ + /*bits per pixel is amount of channels * bits per channel*/ + return getNumColorChannels(colortype) * bitdepth; +} + +/* ////////////////////////////////////////////////////////////////////////// */ + +void lodepng_color_mode_init(LodePNGColorMode* info) +{ + info->key_defined = 0; + info->key_r = info->key_g = info->key_b = 0; + info->colortype = LCT_RGBA; + info->bitdepth = 8; + info->palette = 0; + info->palettesize = 0; +} + +void lodepng_color_mode_cleanup(LodePNGColorMode* info) +{ + lodepng_palette_clear(info); +} + +unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source) +{ + size_t i; + lodepng_color_mode_cleanup(dest); + *dest = *source; + if (source->palette) + { + dest->palette = (unsigned char*)lodepng_malloc(1024); + if (!dest->palette && source->palettesize) return 83; /*alloc fail*/ + for (i = 0; i != source->palettesize * 4; ++i) dest->palette[i] = source->palette[i]; + } + return 0; +} + +static int lodepng_color_mode_equal(const LodePNGColorMode* a, const LodePNGColorMode* b) +{ + size_t i; + if (a->colortype != b->colortype) return 0; + if (a->bitdepth != b->bitdepth) return 0; + if (a->key_defined != b->key_defined) return 0; + if (a->key_defined) + { + if (a->key_r != b->key_r) return 0; + if (a->key_g != b->key_g) return 0; + if (a->key_b != b->key_b) return 0; + } + /*if one of the palette sizes is 0, then we consider it to be the same as the + other: it means that e.g. the palette was not given by the user and should be + considered the same as the palette inside the PNG.*/ + if (1/*a->palettesize != 0 && b->palettesize != 0*/) { + if (a->palettesize != b->palettesize) return 0; + for (i = 0; i != a->palettesize * 4; ++i) + { + if (a->palette[i] != b->palette[i]) return 0; + } + } + return 1; +} + +void lodepng_palette_clear(LodePNGColorMode* info) +{ + if (info->palette) lodepng_free(info->palette); + info->palette = 0; + info->palettesize = 0; +} + +unsigned lodepng_palette_add(LodePNGColorMode* info, + unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + unsigned char* data; + /*the same resize technique as C++ std::vectors is used, and here it's made so that for a palette with + the max of 256 colors, it'll have the exact alloc size*/ + if (!info->palette) /*allocate palette if empty*/ + { + /*room for 256 colors with 4 bytes each*/ + data = (unsigned char*)lodepng_realloc(info->palette, 1024); + if (!data) return 83; /*alloc fail*/ + else info->palette = data; + } + info->palette[4 * info->palettesize + 0] = r; + info->palette[4 * info->palettesize + 1] = g; + info->palette[4 * info->palettesize + 2] = b; + info->palette[4 * info->palettesize + 3] = a; + ++info->palettesize; + return 0; +} + +unsigned lodepng_get_bpp(const LodePNGColorMode* info) +{ + /*calculate bits per pixel out of colortype and bitdepth*/ + return lodepng_get_bpp_lct(info->colortype, info->bitdepth); +} + +unsigned lodepng_get_channels(const LodePNGColorMode* info) +{ + return getNumColorChannels(info->colortype); +} + +unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info) +{ + return info->colortype == LCT_GREY || info->colortype == LCT_GREY_ALPHA; +} + +unsigned lodepng_is_alpha_type(const LodePNGColorMode* info) +{ + return (info->colortype & 4) != 0; /*4 or 6*/ +} + +unsigned lodepng_is_palette_type(const LodePNGColorMode* info) +{ + return info->colortype == LCT_PALETTE; +} + +unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info) +{ + size_t i; + for (i = 0; i != info->palettesize; ++i) + { + if (info->palette[i * 4 + 3] < 255) return 1; + } + return 0; +} + +unsigned lodepng_can_have_alpha(const LodePNGColorMode* info) +{ + return info->key_defined + || lodepng_is_alpha_type(info) + || lodepng_has_palette_alpha(info); +} + +size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color) +{ + /*will not overflow for any color type if roughly w * h < 268435455*/ + size_t bpp = lodepng_get_bpp(color); + size_t n = w * h; + return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8; +} + +size_t lodepng_get_raw_size_lct(unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) +{ + /*will not overflow for any color type if roughly w * h < 268435455*/ + size_t bpp = lodepng_get_bpp_lct(colortype, bitdepth); + size_t n = w * h; + return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8; +} + + +#ifdef LODEPNG_COMPILE_PNG +#ifdef LODEPNG_COMPILE_DECODER +/*in an idat chunk, each scanline is a multiple of 8 bits, unlike the lodepng output buffer*/ +static size_t lodepng_get_raw_size_idat(unsigned w, unsigned h, const LodePNGColorMode* color) +{ + /*will not overflow for any color type if roughly w * h < 268435455*/ + size_t bpp = lodepng_get_bpp(color); + size_t line = ((w / 8) * bpp) + ((w & 7) * bpp + 7) / 8; + return h * line; +} +#endif /*LODEPNG_COMPILE_DECODER*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + +static void LodePNGUnknownChunks_init(LodePNGInfo* info) +{ + unsigned i; + for (i = 0; i != 3; ++i) info->unknown_chunks_data[i] = 0; + for (i = 0; i != 3; ++i) info->unknown_chunks_size[i] = 0; +} + +static void LodePNGUnknownChunks_cleanup(LodePNGInfo* info) +{ + unsigned i; + for (i = 0; i != 3; ++i) lodepng_free(info->unknown_chunks_data[i]); +} + +static unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest, const LodePNGInfo* src) +{ + unsigned i; + + LodePNGUnknownChunks_cleanup(dest); + + for (i = 0; i != 3; ++i) + { + size_t j; + dest->unknown_chunks_size[i] = src->unknown_chunks_size[i]; + dest->unknown_chunks_data[i] = (unsigned char*)lodepng_malloc(src->unknown_chunks_size[i]); + if (!dest->unknown_chunks_data[i] && dest->unknown_chunks_size[i]) return 83; /*alloc fail*/ + for (j = 0; j < src->unknown_chunks_size[i]; ++j) + { + dest->unknown_chunks_data[i][j] = src->unknown_chunks_data[i][j]; + } + } + + return 0; +} + +/******************************************************************************/ + +static void LodePNGText_init(LodePNGInfo* info) +{ + info->text_num = 0; + info->text_keys = NULL; + info->text_strings = NULL; +} + +static void LodePNGText_cleanup(LodePNGInfo* info) +{ + size_t i; + for (i = 0; i != info->text_num; ++i) + { + string_cleanup(&info->text_keys[i]); + string_cleanup(&info->text_strings[i]); + } + lodepng_free(info->text_keys); + lodepng_free(info->text_strings); +} + +static unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* source) +{ + size_t i = 0; + dest->text_keys = 0; + dest->text_strings = 0; + dest->text_num = 0; + for (i = 0; i != source->text_num; ++i) + { + CERROR_TRY_RETURN(lodepng_add_text(dest, source->text_keys[i], source->text_strings[i])); + } + return 0; +} + +void lodepng_clear_text(LodePNGInfo* info) +{ + LodePNGText_cleanup(info); +} + +unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str) +{ + char** new_keys = (char**)(lodepng_realloc(info->text_keys, sizeof(char*) * (info->text_num + 1))); + char** new_strings = (char**)(lodepng_realloc(info->text_strings, sizeof(char*) * (info->text_num + 1))); + if (!new_keys || !new_strings) + { + lodepng_free(new_keys); + lodepng_free(new_strings); + return 83; /*alloc fail*/ + } + + ++info->text_num; + info->text_keys = new_keys; + info->text_strings = new_strings; + + string_init(&info->text_keys[info->text_num - 1]); + string_set(&info->text_keys[info->text_num - 1], key); + + string_init(&info->text_strings[info->text_num - 1]); + string_set(&info->text_strings[info->text_num - 1], str); + + return 0; +} + +/******************************************************************************/ + +static void LodePNGIText_init(LodePNGInfo* info) +{ + info->itext_num = 0; + info->itext_keys = NULL; + info->itext_langtags = NULL; + info->itext_transkeys = NULL; + info->itext_strings = NULL; +} + +static void LodePNGIText_cleanup(LodePNGInfo* info) +{ + size_t i; + for (i = 0; i != info->itext_num; ++i) + { + string_cleanup(&info->itext_keys[i]); + string_cleanup(&info->itext_langtags[i]); + string_cleanup(&info->itext_transkeys[i]); + string_cleanup(&info->itext_strings[i]); + } + lodepng_free(info->itext_keys); + lodepng_free(info->itext_langtags); + lodepng_free(info->itext_transkeys); + lodepng_free(info->itext_strings); +} + +static unsigned LodePNGIText_copy(LodePNGInfo* dest, const LodePNGInfo* source) +{ + size_t i = 0; + dest->itext_keys = 0; + dest->itext_langtags = 0; + dest->itext_transkeys = 0; + dest->itext_strings = 0; + dest->itext_num = 0; + for (i = 0; i != source->itext_num; ++i) + { + CERROR_TRY_RETURN(lodepng_add_itext(dest, source->itext_keys[i], source->itext_langtags[i], + source->itext_transkeys[i], source->itext_strings[i])); + } + return 0; +} + +void lodepng_clear_itext(LodePNGInfo* info) +{ + LodePNGIText_cleanup(info); +} + +unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag, + const char* transkey, const char* str) +{ + char** new_keys = (char**)(lodepng_realloc(info->itext_keys, sizeof(char*) * (info->itext_num + 1))); + char** new_langtags = (char**)(lodepng_realloc(info->itext_langtags, sizeof(char*) * (info->itext_num + 1))); + char** new_transkeys = (char**)(lodepng_realloc(info->itext_transkeys, sizeof(char*) * (info->itext_num + 1))); + char** new_strings = (char**)(lodepng_realloc(info->itext_strings, sizeof(char*) * (info->itext_num + 1))); + if (!new_keys || !new_langtags || !new_transkeys || !new_strings) + { + lodepng_free(new_keys); + lodepng_free(new_langtags); + lodepng_free(new_transkeys); + lodepng_free(new_strings); + return 83; /*alloc fail*/ + } + + ++info->itext_num; + info->itext_keys = new_keys; + info->itext_langtags = new_langtags; + info->itext_transkeys = new_transkeys; + info->itext_strings = new_strings; + + string_init(&info->itext_keys[info->itext_num - 1]); + string_set(&info->itext_keys[info->itext_num - 1], key); + + string_init(&info->itext_langtags[info->itext_num - 1]); + string_set(&info->itext_langtags[info->itext_num - 1], langtag); + + string_init(&info->itext_transkeys[info->itext_num - 1]); + string_set(&info->itext_transkeys[info->itext_num - 1], transkey); + + string_init(&info->itext_strings[info->itext_num - 1]); + string_set(&info->itext_strings[info->itext_num - 1], str); + + return 0; +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +void lodepng_info_init(LodePNGInfo* info) +{ + lodepng_color_mode_init(&info->color); + info->interlace_method = 0; + info->compression_method = 0; + info->filter_method = 0; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + info->background_defined = 0; + info->background_r = info->background_g = info->background_b = 0; + + LodePNGText_init(info); + LodePNGIText_init(info); + + info->time_defined = 0; + info->phys_defined = 0; + + LodePNGUnknownChunks_init(info); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} + +void lodepng_info_cleanup(LodePNGInfo* info) +{ + lodepng_color_mode_cleanup(&info->color); +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + LodePNGText_cleanup(info); + LodePNGIText_cleanup(info); + + LodePNGUnknownChunks_cleanup(info); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} + +unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source) +{ + lodepng_info_cleanup(dest); + *dest = *source; + lodepng_color_mode_init(&dest->color); + CERROR_TRY_RETURN(lodepng_color_mode_copy(&dest->color, &source->color)); + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + CERROR_TRY_RETURN(LodePNGText_copy(dest, source)); + CERROR_TRY_RETURN(LodePNGIText_copy(dest, source)); + + LodePNGUnknownChunks_init(dest); + CERROR_TRY_RETURN(LodePNGUnknownChunks_copy(dest, source)); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + return 0; +} + +void lodepng_info_swap(LodePNGInfo* a, LodePNGInfo* b) +{ + LodePNGInfo temp = *a; + *a = *b; + *b = temp; +} + +/* ////////////////////////////////////////////////////////////////////////// */ + +/*index: bitgroup index, bits: bitgroup size(1, 2 or 4), in: bitgroup value, out: octet array to add bits to*/ +static void addColorBits(unsigned char* out, size_t index, unsigned bits, unsigned in) +{ + unsigned m = bits == 1 ? 7 : bits == 2 ? 3 : 1; /*8 / bits - 1*/ + /*p = the partial index in the byte, e.g. with 4 palettebits it is 0 for first half or 1 for second half*/ + unsigned p = index & m; + in &= (1u << bits) - 1u; /*filter out any other bits of the input value*/ + in = in << (bits * (m - p)); + if (p == 0) out[index * bits / 8] = in; + else out[index * bits / 8] |= in; +} + +typedef struct ColorTree ColorTree; + +/* +One node of a color tree +This is the data structure used to count the number of unique colors and to get a palette +index for a color. It's like an octree, but because the alpha channel is used too, each +node has 16 instead of 8 children. +*/ +struct ColorTree +{ + ColorTree* children[16]; /*up to 16 pointers to ColorTree of next level*/ + int index; /*the payload. Only has a meaningful value if this is in the last level*/ +}; + +static void color_tree_init(ColorTree* tree) +{ + int i; + for (i = 0; i != 16; ++i) tree->children[i] = 0; + tree->index = -1; +} + +static void color_tree_cleanup(ColorTree* tree) +{ + int i; + for (i = 0; i != 16; ++i) + { + if (tree->children[i]) + { + color_tree_cleanup(tree->children[i]); + lodepng_free(tree->children[i]); + } + } +} + +/*returns -1 if color not present, its index otherwise*/ +static int color_tree_get(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + int bit = 0; + for (bit = 0; bit < 8; ++bit) + { + int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1); + if (!tree->children[i]) return -1; + else tree = tree->children[i]; + } + return tree ? tree->index : -1; +} + +#ifdef LODEPNG_COMPILE_ENCODER +static int color_tree_has(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + return color_tree_get(tree, r, g, b, a) >= 0; +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/*color is not allowed to already exist. +Index should be >= 0 (it's signed to be compatible with using -1 for "doesn't exist")*/ +static void color_tree_add(ColorTree* tree, + unsigned char r, unsigned char g, unsigned char b, unsigned char a, unsigned index) +{ + int bit; + for (bit = 0; bit < 8; ++bit) + { + int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1); + if (!tree->children[i]) + { + tree->children[i] = (ColorTree*)lodepng_malloc(sizeof(ColorTree)); + color_tree_init(tree->children[i]); + } + tree = tree->children[i]; + } + tree->index = (int)index; +} + +/*put a pixel, given its RGBA color, into image of any color type*/ +static unsigned rgba8ToPixel(unsigned char* out, size_t i, + const LodePNGColorMode* mode, ColorTree* tree /*for palette*/, + unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + if (mode->colortype == LCT_GREY) + { + unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/; + if (mode->bitdepth == 8) out[i] = grey; + else if (mode->bitdepth == 16) out[i * 2 + 0] = out[i * 2 + 1] = grey; + else + { + /*take the most significant bits of grey*/ + grey = (grey >> (8 - mode->bitdepth)) & ((1 << mode->bitdepth) - 1); + addColorBits(out, i, mode->bitdepth, grey); + } + } + else if (mode->colortype == LCT_RGB) + { + if (mode->bitdepth == 8) + { + out[i * 3 + 0] = r; + out[i * 3 + 1] = g; + out[i * 3 + 2] = b; + } + else + { + out[i * 6 + 0] = out[i * 6 + 1] = r; + out[i * 6 + 2] = out[i * 6 + 3] = g; + out[i * 6 + 4] = out[i * 6 + 5] = b; + } + } + else if (mode->colortype == LCT_PALETTE) + { + int index = color_tree_get(tree, r, g, b, a); + if (index < 0) return 82; /*color not in palette*/ + if (mode->bitdepth == 8) out[i] = index; + else addColorBits(out, i, mode->bitdepth, (unsigned)index); + } + else if (mode->colortype == LCT_GREY_ALPHA) + { + unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/; + if (mode->bitdepth == 8) + { + out[i * 2 + 0] = grey; + out[i * 2 + 1] = a; + } + else if (mode->bitdepth == 16) + { + out[i * 4 + 0] = out[i * 4 + 1] = grey; + out[i * 4 + 2] = out[i * 4 + 3] = a; + } + } + else if (mode->colortype == LCT_RGBA) + { + if (mode->bitdepth == 8) + { + out[i * 4 + 0] = r; + out[i * 4 + 1] = g; + out[i * 4 + 2] = b; + out[i * 4 + 3] = a; + } + else + { + out[i * 8 + 0] = out[i * 8 + 1] = r; + out[i * 8 + 2] = out[i * 8 + 3] = g; + out[i * 8 + 4] = out[i * 8 + 5] = b; + out[i * 8 + 6] = out[i * 8 + 7] = a; + } + } + + return 0; /*no error*/ +} + +/*put a pixel, given its RGBA16 color, into image of any color 16-bitdepth type*/ +static void rgba16ToPixel(unsigned char* out, size_t i, + const LodePNGColorMode* mode, + unsigned short r, unsigned short g, unsigned short b, unsigned short a) +{ + if (mode->colortype == LCT_GREY) + { + unsigned short grey = r; /*((unsigned)r + g + b) / 3*/; + out[i * 2 + 0] = (grey >> 8) & 255; + out[i * 2 + 1] = grey & 255; + } + else if (mode->colortype == LCT_RGB) + { + out[i * 6 + 0] = (r >> 8) & 255; + out[i * 6 + 1] = r & 255; + out[i * 6 + 2] = (g >> 8) & 255; + out[i * 6 + 3] = g & 255; + out[i * 6 + 4] = (b >> 8) & 255; + out[i * 6 + 5] = b & 255; + } + else if (mode->colortype == LCT_GREY_ALPHA) + { + unsigned short grey = r; /*((unsigned)r + g + b) / 3*/; + out[i * 4 + 0] = (grey >> 8) & 255; + out[i * 4 + 1] = grey & 255; + out[i * 4 + 2] = (a >> 8) & 255; + out[i * 4 + 3] = a & 255; + } + else if (mode->colortype == LCT_RGBA) + { + out[i * 8 + 0] = (r >> 8) & 255; + out[i * 8 + 1] = r & 255; + out[i * 8 + 2] = (g >> 8) & 255; + out[i * 8 + 3] = g & 255; + out[i * 8 + 4] = (b >> 8) & 255; + out[i * 8 + 5] = b & 255; + out[i * 8 + 6] = (a >> 8) & 255; + out[i * 8 + 7] = a & 255; + } +} + +/*Get RGBA8 color of pixel with index i (y * width + x) from the raw image with given color type.*/ +static void getPixelColorRGBA8(unsigned char* r, unsigned char* g, + unsigned char* b, unsigned char* a, + const unsigned char* in, size_t i, + const LodePNGColorMode* mode) +{ + if (mode->colortype == LCT_GREY) + { + if (mode->bitdepth == 8) + { + *r = *g = *b = in[i]; + if (mode->key_defined && *r == mode->key_r) *a = 0; + else *a = 255; + } + else if (mode->bitdepth == 16) + { + *r = *g = *b = in[i * 2 + 0]; + if (mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0; + else *a = 255; + } + else + { + unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/ + size_t j = i * mode->bitdepth; + unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth); + *r = *g = *b = (value * 255) / highest; + if (mode->key_defined && value == mode->key_r) *a = 0; + else *a = 255; + } + } + else if (mode->colortype == LCT_RGB) + { + if (mode->bitdepth == 8) + { + *r = in[i * 3 + 0]; *g = in[i * 3 + 1]; *b = in[i * 3 + 2]; + if (mode->key_defined && *r == mode->key_r && *g == mode->key_g && *b == mode->key_b) *a = 0; + else *a = 255; + } + else + { + *r = in[i * 6 + 0]; + *g = in[i * 6 + 2]; + *b = in[i * 6 + 4]; + if (mode->key_defined && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r + && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g + && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0; + else *a = 255; + } + } + else if (mode->colortype == LCT_PALETTE) + { + unsigned index; + if (mode->bitdepth == 8) index = in[i]; + else + { + size_t j = i * mode->bitdepth; + index = readBitsFromReversedStream(&j, in, mode->bitdepth); + } + + if (index >= mode->palettesize) + { + /*This is an error according to the PNG spec, but common PNG decoders make it black instead. + Done here too, slightly faster due to no error handling needed.*/ + *r = *g = *b = 0; + *a = 255; + } + else + { + *r = mode->palette[index * 4 + 0]; + *g = mode->palette[index * 4 + 1]; + *b = mode->palette[index * 4 + 2]; + *a = mode->palette[index * 4 + 3]; + } + } + else if (mode->colortype == LCT_GREY_ALPHA) + { + if (mode->bitdepth == 8) + { + *r = *g = *b = in[i * 2 + 0]; + *a = in[i * 2 + 1]; + } + else + { + *r = *g = *b = in[i * 4 + 0]; + *a = in[i * 4 + 2]; + } + } + else if (mode->colortype == LCT_RGBA) + { + if (mode->bitdepth == 8) + { + *r = in[i * 4 + 0]; + *g = in[i * 4 + 1]; + *b = in[i * 4 + 2]; + *a = in[i * 4 + 3]; + } + else + { + *r = in[i * 8 + 0]; + *g = in[i * 8 + 2]; + *b = in[i * 8 + 4]; + *a = in[i * 8 + 6]; + } + } +} + +/*Similar to getPixelColorRGBA8, but with all the for loops inside of the color +mode test cases, optimized to convert the colors much faster, when converting +to RGBA or RGB with 8 bit per cannel. buffer must be RGBA or RGB output with +enough memory, if has_alpha is true the output is RGBA. mode has the color mode +of the input buffer.*/ +static void getPixelColorsRGBA8(unsigned char* buffer, size_t numpixels, + unsigned has_alpha, const unsigned char* in, + const LodePNGColorMode* mode) +{ + unsigned num_channels = has_alpha ? 4 : 3; + size_t i; + if (mode->colortype == LCT_GREY) + { + if (mode->bitdepth == 8) + { + for (i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i]; + if (has_alpha) buffer[3] = mode->key_defined && in[i] == mode->key_r ? 0 : 255; + } + } + else if (mode->bitdepth == 16) + { + for (i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i * 2]; + if (has_alpha) buffer[3] = mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r ? 0 : 255; + } + } + else + { + unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/ + size_t j = 0; + for (i = 0; i != numpixels; ++i, buffer += num_channels) + { + unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth); + buffer[0] = buffer[1] = buffer[2] = (value * 255) / highest; + if (has_alpha) buffer[3] = mode->key_defined && value == mode->key_r ? 0 : 255; + } + } + } + else if (mode->colortype == LCT_RGB) + { + if (mode->bitdepth == 8) + { + for (i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = in[i * 3 + 0]; + buffer[1] = in[i * 3 + 1]; + buffer[2] = in[i * 3 + 2]; + if (has_alpha) buffer[3] = mode->key_defined && buffer[0] == mode->key_r + && buffer[1] == mode->key_g && buffer[2] == mode->key_b ? 0 : 255; + } + } + else + { + for (i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = in[i * 6 + 0]; + buffer[1] = in[i * 6 + 2]; + buffer[2] = in[i * 6 + 4]; + if (has_alpha) buffer[3] = mode->key_defined + && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r + && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g + && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b ? 0 : 255; + } + } + } + else if (mode->colortype == LCT_PALETTE) + { + unsigned index; + size_t j = 0; + for (i = 0; i != numpixels; ++i, buffer += num_channels) + { + if (mode->bitdepth == 8) index = in[i]; + else index = readBitsFromReversedStream(&j, in, mode->bitdepth); + + if (index >= mode->palettesize) + { + /*This is an error according to the PNG spec, but most PNG decoders make it black instead. + Done here too, slightly faster due to no error handling needed.*/ + buffer[0] = buffer[1] = buffer[2] = 0; + if (has_alpha) buffer[3] = 255; + } + else + { + buffer[0] = mode->palette[index * 4 + 0]; + buffer[1] = mode->palette[index * 4 + 1]; + buffer[2] = mode->palette[index * 4 + 2]; + if (has_alpha) buffer[3] = mode->palette[index * 4 + 3]; + } + } + } + else if (mode->colortype == LCT_GREY_ALPHA) + { + if (mode->bitdepth == 8) + { + for (i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i * 2 + 0]; + if (has_alpha) buffer[3] = in[i * 2 + 1]; + } + } + else + { + for (i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i * 4 + 0]; + if (has_alpha) buffer[3] = in[i * 4 + 2]; + } + } + } + else if (mode->colortype == LCT_RGBA) + { + if (mode->bitdepth == 8) + { + for (i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = in[i * 4 + 0]; + buffer[1] = in[i * 4 + 1]; + buffer[2] = in[i * 4 + 2]; + if (has_alpha) buffer[3] = in[i * 4 + 3]; + } + } + else + { + for (i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = in[i * 8 + 0]; + buffer[1] = in[i * 8 + 2]; + buffer[2] = in[i * 8 + 4]; + if (has_alpha) buffer[3] = in[i * 8 + 6]; + } + } + } +} + +/*Get RGBA16 color of pixel with index i (y * width + x) from the raw image with +given color type, but the given color type must be 16-bit itself.*/ +static void getPixelColorRGBA16(unsigned short* r, unsigned short* g, unsigned short* b, unsigned short* a, + const unsigned char* in, size_t i, const LodePNGColorMode* mode) +{ + if (mode->colortype == LCT_GREY) + { + *r = *g = *b = 256 * in[i * 2 + 0] + in[i * 2 + 1]; + if (mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0; + else *a = 65535; + } + else if (mode->colortype == LCT_RGB) + { + *r = 256u * in[i * 6 + 0] + in[i * 6 + 1]; + *g = 256u * in[i * 6 + 2] + in[i * 6 + 3]; + *b = 256u * in[i * 6 + 4] + in[i * 6 + 5]; + if (mode->key_defined + && 256u * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r + && 256u * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g + && 256u * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0; + else *a = 65535; + } + else if (mode->colortype == LCT_GREY_ALPHA) + { + *r = *g = *b = 256u * in[i * 4 + 0] + in[i * 4 + 1]; + *a = 256u * in[i * 4 + 2] + in[i * 4 + 3]; + } + else if (mode->colortype == LCT_RGBA) + { + *r = 256u * in[i * 8 + 0] + in[i * 8 + 1]; + *g = 256u * in[i * 8 + 2] + in[i * 8 + 3]; + *b = 256u * in[i * 8 + 4] + in[i * 8 + 5]; + *a = 256u * in[i * 8 + 6] + in[i * 8 + 7]; + } +} + +unsigned lodepng_convert(unsigned char* out, const unsigned char* in, + const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in, + unsigned w, unsigned h) +{ + size_t i; + ColorTree tree; + size_t numpixels = w * h; + + if (lodepng_color_mode_equal(mode_out, mode_in)) + { + size_t numbytes = lodepng_get_raw_size(w, h, mode_in); + for (i = 0; i != numbytes; ++i) out[i] = in[i]; + return 0; + } + + if (mode_out->colortype == LCT_PALETTE) + { + size_t palettesize = mode_out->palettesize; + const unsigned char* palette = mode_out->palette; + size_t palsize = (size_t)(1ull << mode_out->bitdepth); + /*if the user specified output palette but did not give the values, assume + they want the values of the input color type (assuming that one is palette). + Note that we never create a new palette ourselves.*/ + if (palettesize == 0) + { + palettesize = mode_in->palettesize; + palette = mode_in->palette; + } + if (palettesize < palsize) palsize = palettesize; + color_tree_init(&tree); + for (i = 0; i != palsize; ++i) + { + const unsigned char* p = &palette[i * 4]; + color_tree_add(&tree, p[0], p[1], p[2], p[3], (unsigned int)i); + } + } + + if (mode_in->bitdepth == 16 && mode_out->bitdepth == 16) + { + for (i = 0; i != numpixels; ++i) + { + unsigned short r = 0, g = 0, b = 0, a = 0; + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in); + rgba16ToPixel(out, i, mode_out, r, g, b, a); + } + } + else if (mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGBA) + { + getPixelColorsRGBA8(out, numpixels, 1, in, mode_in); + } + else if (mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGB) + { + getPixelColorsRGBA8(out, numpixels, 0, in, mode_in); + } + else + { + unsigned char r = 0, g = 0, b = 0, a = 0; + for (i = 0; i != numpixels; ++i) + { + getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in); + CERROR_TRY_RETURN(rgba8ToPixel(out, i, mode_out, &tree, r, g, b, a)); + } + } + + if (mode_out->colortype == LCT_PALETTE) + { + color_tree_cleanup(&tree); + } + + return 0; /*no error*/ +} + +#ifdef LODEPNG_COMPILE_ENCODER + +void lodepng_color_profile_init(LodePNGColorProfile* profile) +{ + profile->colored = 0; + profile->key = 0; + profile->key_r = profile->key_g = profile->key_b = 0; + profile->alpha = 0; + profile->numcolors = 0; + profile->bits = 1; +} + +/*function used for debug purposes with C++*/ +/*void printColorProfile(LodePNGColorProfile* p) +{ + std::cout << "colored: " << (int)p->colored << ", "; + std::cout << "key: " << (int)p->key << ", "; + std::cout << "key_r: " << (int)p->key_r << ", "; + std::cout << "key_g: " << (int)p->key_g << ", "; + std::cout << "key_b: " << (int)p->key_b << ", "; + std::cout << "alpha: " << (int)p->alpha << ", "; + std::cout << "numcolors: " << (int)p->numcolors << ", "; + std::cout << "bits: " << (int)p->bits << std::endl; +}*/ + +/*Returns how many bits needed to represent given value (max 8 bit)*/ +static unsigned getValueRequiredBits(unsigned char value) +{ + if (value == 0 || value == 255) return 1; + /*The scaling of 2-bit and 4-bit values uses multiples of 85 and 17*/ + if (value % 17 == 0) return value % 85 == 0 ? 2 : 4; + return 8; +} + +/*profile must already have been inited with mode. +It's ok to set some parameters of profile to done already.*/ +unsigned lodepng_get_color_profile(LodePNGColorProfile* profile, + const unsigned char* in, unsigned w, unsigned h, + const LodePNGColorMode* mode) +{ + unsigned error = 0; + size_t i; + ColorTree tree; + size_t numpixels = w * h; + + unsigned colored_done = lodepng_is_greyscale_type(mode) ? 1 : 0; + unsigned alpha_done = lodepng_can_have_alpha(mode) ? 0 : 1; + unsigned numcolors_done = 0; + unsigned bpp = lodepng_get_bpp(mode); + unsigned bits_done = bpp == 1 ? 1 : 0; + unsigned maxnumcolors = 257; + unsigned sixteen = 0; + if (bpp <= 8) maxnumcolors = bpp == 1 ? 2 : (bpp == 2 ? 4 : (bpp == 4 ? 16 : 256)); + + color_tree_init(&tree); + + /*Check if the 16-bit input is truly 16-bit*/ + if (mode->bitdepth == 16) + { + unsigned short r, g, b, a; + for (i = 0; i != numpixels; ++i) + { + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); + if ((r & 255) != ((r >> 8) & 255) || (g & 255) != ((g >> 8) & 255) || + (b & 255) != ((b >> 8) & 255) || (a & 255) != ((a >> 8) & 255)) /*first and second byte differ*/ + { + sixteen = 1; + break; + } + } + } + + if (sixteen) + { + unsigned short r = 0, g = 0, b = 0, a = 0; + profile->bits = 16; + bits_done = numcolors_done = 1; /*counting colors no longer useful, palette doesn't support 16-bit*/ + + for (i = 0; i != numpixels; ++i) + { + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); + + if (!colored_done && (r != g || r != b)) + { + profile->colored = 1; + colored_done = 1; + } + + if (!alpha_done) + { + unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b); + if (a != 65535 && (a != 0 || (profile->key && !matchkey))) + { + profile->alpha = 1; + profile->key = 0; + alpha_done = 1; + } + else if (a == 0 && !profile->alpha && !profile->key) + { + profile->key = 1; + profile->key_r = r; + profile->key_g = g; + profile->key_b = b; + } + else if (a == 65535 && profile->key && matchkey) + { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + profile->alpha = 1; + profile->key = 0; + alpha_done = 1; + } + } + if (alpha_done && numcolors_done && colored_done && bits_done) break; + } + + if (profile->key && !profile->alpha) + { + for (i = 0; i != numpixels; ++i) + { + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); + if (a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b) + { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + profile->alpha = 1; + profile->key = 0; + alpha_done = 1; + } + } + } + } + else /* < 16-bit */ + { + unsigned char r = 0, g = 0, b = 0, a = 0; + for (i = 0; i != numpixels; ++i) + { + getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode); + + if (!bits_done && profile->bits < 8) + { + /*only r is checked, < 8 bits is only relevant for greyscale*/ + unsigned bits = getValueRequiredBits(r); + if (bits > profile->bits) profile->bits = bits; + } + bits_done = (profile->bits >= bpp); + + if (!colored_done && (r != g || r != b)) + { + profile->colored = 1; + colored_done = 1; + if (profile->bits < 8) profile->bits = 8; /*PNG has no colored modes with less than 8-bit per channel*/ + } + + if (!alpha_done) + { + unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b); + if (a != 255 && (a != 0 || (profile->key && !matchkey))) + { + profile->alpha = 1; + profile->key = 0; + alpha_done = 1; + if (profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } + else if (a == 0 && !profile->alpha && !profile->key) + { + profile->key = 1; + profile->key_r = r; + profile->key_g = g; + profile->key_b = b; + } + else if (a == 255 && profile->key && matchkey) + { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + profile->alpha = 1; + profile->key = 0; + alpha_done = 1; + if (profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } + } + + if (!numcolors_done) + { + if (!color_tree_has(&tree, r, g, b, a)) + { + color_tree_add(&tree, r, g, b, a, profile->numcolors); + if (profile->numcolors < 256) + { + unsigned char* p = profile->palette; + unsigned n = profile->numcolors; + p[n * 4 + 0] = r; + p[n * 4 + 1] = g; + p[n * 4 + 2] = b; + p[n * 4 + 3] = a; + } + ++profile->numcolors; + numcolors_done = profile->numcolors >= maxnumcolors; + } + } + + if (alpha_done && numcolors_done && colored_done && bits_done) break; + } + + if (profile->key && !profile->alpha) + { + for (i = 0; i != numpixels; ++i) + { + getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode); + if (a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b) + { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + profile->alpha = 1; + profile->key = 0; + alpha_done = 1; + if (profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } + } + } + + /*make the profile's key always 16-bit for consistency - repeat each byte twice*/ + profile->key_r += (profile->key_r << 8); + profile->key_g += (profile->key_g << 8); + profile->key_b += (profile->key_b << 8); + } + + color_tree_cleanup(&tree); + return error; +} + +/*Automatically chooses color type that gives smallest amount of bits in the +output image, e.g. grey if there are only greyscale pixels, palette if there +are less than 256 colors, ... +Updates values of mode with a potentially smaller color model. mode_out should +contain the user chosen color model, but will be overwritten with the new chosen one.*/ +unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out, + const unsigned char* image, unsigned w, unsigned h, + const LodePNGColorMode* mode_in) +{ + LodePNGColorProfile prof; + unsigned error = 0; + unsigned i, n, palettebits, palette_ok; + + lodepng_color_profile_init(&prof); + error = lodepng_get_color_profile(&prof, image, w, h, mode_in); + if (error) return error; + mode_out->key_defined = 0; + + if (prof.key && w * h <= 16) + { + prof.alpha = 1; /*too few pixels to justify tRNS chunk overhead*/ + prof.key = 0; + if (prof.bits < 8) prof.bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } + n = prof.numcolors; + palettebits = n <= 2 ? 1 : (n <= 4 ? 2 : (n <= 16 ? 4 : 8)); + palette_ok = n <= 256 && prof.bits <= 8; + if (w * h < n * 2) palette_ok = 0; /*don't add palette overhead if image has only a few pixels*/ + if (!prof.colored && prof.bits <= palettebits) palette_ok = 0; /*grey is less overhead*/ + + if (palette_ok) + { + unsigned char* p = prof.palette; + lodepng_palette_clear(mode_out); /*remove potential earlier palette*/ + for (i = 0; i != prof.numcolors; ++i) + { + error = lodepng_palette_add(mode_out, p[i * 4 + 0], p[i * 4 + 1], p[i * 4 + 2], p[i * 4 + 3]); + if (error) break; + } + + mode_out->colortype = LCT_PALETTE; + mode_out->bitdepth = palettebits; + + if (mode_in->colortype == LCT_PALETTE && mode_in->palettesize >= mode_out->palettesize + && mode_in->bitdepth == mode_out->bitdepth) + { + /*If input should have same palette colors, keep original to preserve its order and prevent conversion*/ + lodepng_color_mode_cleanup(mode_out); + lodepng_color_mode_copy(mode_out, mode_in); + } + } + else /*8-bit or 16-bit per channel*/ + { + mode_out->bitdepth = prof.bits; + mode_out->colortype = prof.alpha ? (prof.colored ? LCT_RGBA : LCT_GREY_ALPHA) + : (prof.colored ? LCT_RGB : LCT_GREY); + + if (prof.key) + { + unsigned mask = (1u << mode_out->bitdepth) - 1u; /*profile always uses 16-bit, mask converts it*/ + mode_out->key_r = prof.key_r & mask; + mode_out->key_g = prof.key_g & mask; + mode_out->key_b = prof.key_b & mask; + mode_out->key_defined = 1; + } + } + + return error; +} + +#endif /* #ifdef LODEPNG_COMPILE_ENCODER */ + +/* +Paeth predicter, used by PNG filter type 4 +The parameters are of type short, but should come from unsigned chars, the shorts +are only needed to make the paeth calculation correct. +*/ +static unsigned char paethPredictor(short a, short b, short c) +{ + short pa = abs(b - c); + short pb = abs(a - c); + short pc = abs(a + b - c - c); + + if (pc < pa && pc < pb) return (unsigned char)c; + else if (pb < pa) return (unsigned char)b; + else return (unsigned char)a; +} + +/*shared values used by multiple Adam7 related functions*/ + +static const unsigned ADAM7_IX[7] = { 0, 4, 0, 2, 0, 1, 0 }; /*x start values*/ +static const unsigned ADAM7_IY[7] = { 0, 0, 4, 0, 2, 0, 1 }; /*y start values*/ +static const unsigned ADAM7_DX[7] = { 8, 8, 4, 4, 2, 2, 1 }; /*x delta values*/ +static const unsigned ADAM7_DY[7] = { 8, 8, 8, 4, 4, 2, 2 }; /*y delta values*/ + +/* +Outputs various dimensions and positions in the image related to the Adam7 reduced images. +passw: output containing the width of the 7 passes +passh: output containing the height of the 7 passes +filter_passstart: output containing the index of the start and end of each + reduced image with filter bytes +padded_passstart output containing the index of the start and end of each + reduced image when without filter bytes but with padded scanlines +passstart: output containing the index of the start and end of each reduced + image without padding between scanlines, but still padding between the images +w, h: width and height of non-interlaced image +bpp: bits per pixel +"padded" is only relevant if bpp is less than 8 and a scanline or image does not + end at a full byte +*/ +static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8], + size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp) +{ + /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/ + unsigned i; + + /*calculate width and height in pixels of each pass*/ + for (i = 0; i != 7; ++i) + { + passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i]; + passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i]; + if (passw[i] == 0) passh[i] = 0; + if (passh[i] == 0) passw[i] = 0; + } + + filter_passstart[0] = padded_passstart[0] = passstart[0] = 0; + for (i = 0; i != 7; ++i) + { + /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/ + filter_passstart[i + 1] = filter_passstart[i] + + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0); + /*bits padded if needed to fill full byte at end of each scanline*/ + padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8); + /*only padded at end of reduced image*/ + passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8; + } +} + +#ifdef LODEPNG_COMPILE_DECODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / PNG Decoder / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*read the information from the header and store it in the LodePNGInfo. return value is error*/ +unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state, + const unsigned char* in, size_t insize) +{ + LodePNGInfo* info = &state->info_png; + if (insize == 0 || in == 0) + { + CERROR_RETURN_ERROR(state->error, 48); /*error: the given data is empty*/ + } + if (insize < 33) + { + CERROR_RETURN_ERROR(state->error, 27); /*error: the data length is smaller than the length of a PNG header*/ + } + + /*when decoding a new PNG image, make sure all parameters created after previous decoding are reset*/ + lodepng_info_cleanup(info); + lodepng_info_init(info); + + if (in[0] != 137 || in[1] != 80 || in[2] != 78 || in[3] != 71 + || in[4] != 13 || in[5] != 10 || in[6] != 26 || in[7] != 10) + { + CERROR_RETURN_ERROR(state->error, 28); /*error: the first 8 bytes are not the correct PNG signature*/ + } + if (lodepng_chunk_length(in + 8) != 13) + { + CERROR_RETURN_ERROR(state->error, 94); /*error: header size must be 13 bytes*/ + } + if (!lodepng_chunk_type_equals(in + 8, "IHDR")) + { + CERROR_RETURN_ERROR(state->error, 29); /*error: it doesn't start with a IHDR chunk!*/ + } + + /*read the values given in the header*/ + *w = lodepng_read32bitInt(&in[16]); + *h = lodepng_read32bitInt(&in[20]); + info->color.bitdepth = in[24]; + info->color.colortype = (LodePNGColorType)in[25]; + info->compression_method = in[26]; + info->filter_method = in[27]; + info->interlace_method = in[28]; + + if (*w == 0 || *h == 0) + { + CERROR_RETURN_ERROR(state->error, 93); + } + + if (!state->decoder.ignore_crc) + { + unsigned CRC = lodepng_read32bitInt(&in[29]); + unsigned checksum = lodepng_crc32(&in[12], 17); + if (CRC != checksum) + { + CERROR_RETURN_ERROR(state->error, 57); /*invalid CRC*/ + } + } + + /*error: only compression method 0 is allowed in the specification*/ + if (info->compression_method != 0) CERROR_RETURN_ERROR(state->error, 32); + /*error: only filter method 0 is allowed in the specification*/ + if (info->filter_method != 0) CERROR_RETURN_ERROR(state->error, 33); + /*error: only interlace methods 0 and 1 exist in the specification*/ + if (info->interlace_method > 1) CERROR_RETURN_ERROR(state->error, 34); + + state->error = checkColorValidity(info->color.colortype, info->color.bitdepth); + return state->error; +} + +static unsigned unfilterScanline(unsigned char* recon, const unsigned char* scanline, const unsigned char* precon, + size_t bytewidth, unsigned char filterType, size_t length) +{ + /* + For PNG filter method 0 + unfilter a PNG image scanline by scanline. when the pixels are smaller than 1 byte, + the filter works byte per byte (bytewidth = 1) + precon is the previous unfiltered scanline, recon the result, scanline the current one + the incoming scanlines do NOT include the filtertype byte, that one is given in the parameter filterType instead + recon and scanline MAY be the same memory address! precon must be disjoint. + */ + + size_t i; + switch (filterType) + { + case 0: + for (i = 0; i != length; ++i) recon[i] = scanline[i]; + break; + case 1: + for (i = 0; i != bytewidth; ++i) recon[i] = scanline[i]; + for (i = bytewidth; i < length; ++i) recon[i] = scanline[i] + recon[i - bytewidth]; + break; + case 2: + if (precon) + { + for (i = 0; i != length; ++i) recon[i] = scanline[i] + precon[i]; + } + else + { + for (i = 0; i != length; ++i) recon[i] = scanline[i]; + } + break; + case 3: + if (precon) + { + for (i = 0; i != bytewidth; ++i) recon[i] = scanline[i] + (precon[i] >> 1); + for (i = bytewidth; i < length; ++i) recon[i] = scanline[i] + ((recon[i - bytewidth] + precon[i]) >> 1); + } + else + { + for (i = 0; i != bytewidth; ++i) recon[i] = scanline[i]; + for (i = bytewidth; i < length; ++i) recon[i] = scanline[i] + (recon[i - bytewidth] >> 1); + } + break; + case 4: + if (precon) + { + for (i = 0; i != bytewidth; ++i) + { + recon[i] = (scanline[i] + precon[i]); /*paethPredictor(0, precon[i], 0) is always precon[i]*/ + } + for (i = bytewidth; i < length; ++i) + { + recon[i] = (scanline[i] + paethPredictor(recon[i - bytewidth], precon[i], precon[i - bytewidth])); + } + } + else + { + for (i = 0; i != bytewidth; ++i) + { + recon[i] = scanline[i]; + } + for (i = bytewidth; i < length; ++i) + { + /*paethPredictor(recon[i - bytewidth], 0, 0) is always recon[i - bytewidth]*/ + recon[i] = (scanline[i] + recon[i - bytewidth]); + } + } + break; + default: return 36; /*error: unexisting filter type given*/ + } + return 0; +} + +static unsigned unfilter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) +{ + /* + For PNG filter method 0 + this function unfilters a single image (e.g. without interlacing this is called once, with Adam7 seven times) + out must have enough bytes allocated already, in must have the scanlines + 1 filtertype byte per scanline + w and h are image dimensions or dimensions of reduced image, bpp is bits per pixel + in and out are allowed to be the same memory address (but aren't the same size since in has the extra filter bytes) + */ + + unsigned y; + unsigned char* prevline = 0; + + /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ + size_t bytewidth = (bpp + 7) / 8; + size_t linebytes = (w * bpp + 7) / 8; + + for (y = 0; y < h; ++y) + { + size_t outindex = linebytes * y; + size_t inindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ + unsigned char filterType = in[inindex]; + + CERROR_TRY_RETURN(unfilterScanline(&out[outindex], &in[inindex + 1], prevline, bytewidth, filterType, linebytes)); + + prevline = &out[outindex]; + } + + return 0; +} + +/* +in: Adam7 interlaced image, with no padding bits between scanlines, but between + reduced images so that each reduced image starts at a byte. +out: the same pixels, but re-ordered so that they're now a non-interlaced image with size w*h +bpp: bits per pixel +out has the following size in bits: w * h * bpp. +in is possibly bigger due to padding bits between reduced images. +out must be big enough AND must be 0 everywhere if bpp < 8 in the current implementation +(because that's likely a little bit faster) +NOTE: comments about padding bits are only relevant if bpp < 8 +*/ +static void Adam7_deinterlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) +{ + unsigned passw[7], passh[7]; + size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned i; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + if (bpp >= 8) + { + for (i = 0; i != 7; ++i) + { + unsigned x, y, b; + size_t bytewidth = bpp / 8; + for (y = 0; y < passh[i]; ++y) + for (x = 0; x < passw[i]; ++x) + { + size_t pixelinstart = passstart[i] + (y * passw[i] + x) * bytewidth; + size_t pixeloutstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth; + for (b = 0; b < bytewidth; ++b) + { + out[pixeloutstart + b] = in[pixelinstart + b]; + } + } + } + } + else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ + { + for (i = 0; i != 7; ++i) + { + unsigned x, y, b; + unsigned ilinebits = bpp * passw[i]; + unsigned olinebits = bpp * w; + size_t obp, ibp; /*bit pointers (for out and in buffer)*/ + for (y = 0; y < passh[i]; ++y) + for (x = 0; x < passw[i]; ++x) + { + ibp = (8 * passstart[i]) + (y * ilinebits + x * bpp); + obp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp; + for (b = 0; b < bpp; ++b) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + /*note that this function assumes the out buffer is completely 0, use setBitOfReversedStream otherwise*/ + setBitOfReversedStream0(&obp, out, bit); + } + } + } + } +} + +static void removePaddingBits(unsigned char* out, const unsigned char* in, + size_t olinebits, size_t ilinebits, unsigned h) +{ + /* + After filtering there are still padding bits if scanlines have non multiple of 8 bit amounts. They need + to be removed (except at last scanline of (Adam7-reduced) image) before working with pure image buffers + for the Adam7 code, the color convert code and the output to the user. + in and out are allowed to be the same buffer, in may also be higher but still overlapping; in must + have >= ilinebits*h bits, out must have >= olinebits*h bits, olinebits must be <= ilinebits + also used to move bits after earlier such operations happened, e.g. in a sequence of reduced images from Adam7 + only useful if (ilinebits - olinebits) is a value in the range 1..7 + */ + unsigned y; + size_t diff = ilinebits - olinebits; + size_t ibp = 0, obp = 0; /*input and output bit pointers*/ + for (y = 0; y < h; ++y) + { + size_t x; + for (x = 0; x < olinebits; ++x) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + ibp += diff; + } +} + +/*out must be buffer big enough to contain full image, and in must contain the full decompressed data from +the IDAT chunks (with filter index bytes and possible padding bits) +return value is error*/ +static unsigned postProcessScanlines(unsigned char* out, unsigned char* in, + unsigned w, unsigned h, const LodePNGInfo* info_png) +{ + /* + This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype. + Steps: + *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8) + *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace + NOTE: the in buffer will be overwritten with intermediate data! + */ + unsigned bpp = lodepng_get_bpp(&info_png->color); + if (bpp == 0) return 31; /*error: invalid colortype*/ + + if (info_png->interlace_method == 0) + { + if (bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) + { + CERROR_TRY_RETURN(unfilter(in, in, w, h, bpp)); + removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h); + } + /*we can immediately filter into the out buffer, no other steps needed*/ + else CERROR_TRY_RETURN(unfilter(out, in, w, h, bpp)); + } + else /*interlace_method is 1 (Adam7)*/ + { + unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned i; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + for (i = 0; i != 7; ++i) + { + CERROR_TRY_RETURN(unfilter(&in[padded_passstart[i]], &in[filter_passstart[i]], passw[i], passh[i], bpp)); + /*TODO: possible efficiency improvement: if in this reduced image the bits fit nicely in 1 scanline, + move bytes instead of bits or move not at all*/ + if (bpp < 8) + { + /*remove padding bits in scanlines; after this there still may be padding + bits between the different reduced images: each reduced image still starts nicely at a byte*/ + removePaddingBits(&in[passstart[i]], &in[padded_passstart[i]], passw[i] * bpp, + ((passw[i] * bpp + 7) / 8) * 8, passh[i]); + } + } + + Adam7_deinterlace(out, in, w, h, bpp); + } + + return 0; +} + +static unsigned readChunk_PLTE(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) +{ + unsigned pos = 0, i; + if (color->palette) lodepng_free(color->palette); + color->palettesize = chunkLength / 3; + color->palette = (unsigned char*)lodepng_malloc(4 * color->palettesize); + if (!color->palette && color->palettesize) + { + color->palettesize = 0; + return 83; /*alloc fail*/ + } + if (color->palettesize > 256) return 38; /*error: palette too big*/ + + for (i = 0; i != color->palettesize; ++i) + { + color->palette[4 * i + 0] = data[pos++]; /*R*/ + color->palette[4 * i + 1] = data[pos++]; /*G*/ + color->palette[4 * i + 2] = data[pos++]; /*B*/ + color->palette[4 * i + 3] = 255; /*alpha*/ + } + + return 0; /* OK */ +} + +static unsigned readChunk_tRNS(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) +{ + unsigned i; + if (color->colortype == LCT_PALETTE) + { + /*error: more alpha values given than there are palette entries*/ + if (chunkLength > color->palettesize) return 38; + + for (i = 0; i != chunkLength; ++i) color->palette[4 * i + 3] = data[i]; + } + else if (color->colortype == LCT_GREY) + { + /*error: this chunk must be 2 bytes for greyscale image*/ + if (chunkLength != 2) return 30; + + color->key_defined = 1; + color->key_r = color->key_g = color->key_b = 256u * data[0] + data[1]; + } + else if (color->colortype == LCT_RGB) + { + /*error: this chunk must be 6 bytes for RGB image*/ + if (chunkLength != 6) return 41; + + color->key_defined = 1; + color->key_r = 256u * data[0] + data[1]; + color->key_g = 256u * data[2] + data[3]; + color->key_b = 256u * data[4] + data[5]; + } + else return 42; /*error: tRNS chunk not allowed for other color models*/ + + return 0; /* OK */ +} + + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +/*background color chunk (bKGD)*/ +static unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) +{ + if (info->color.colortype == LCT_PALETTE) + { + /*error: this chunk must be 1 byte for indexed color image*/ + if (chunkLength != 1) return 43; + + info->background_defined = 1; + info->background_r = info->background_g = info->background_b = data[0]; + } + else if (info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) + { + /*error: this chunk must be 2 bytes for greyscale image*/ + if (chunkLength != 2) return 44; + + info->background_defined = 1; + info->background_r = info->background_g = info->background_b = 256u * data[0] + data[1]; + } + else if (info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) + { + /*error: this chunk must be 6 bytes for greyscale image*/ + if (chunkLength != 6) return 45; + + info->background_defined = 1; + info->background_r = 256u * data[0] + data[1]; + info->background_g = 256u * data[2] + data[3]; + info->background_b = 256u * data[4] + data[5]; + } + + return 0; /* OK */ +} + +/*text chunk (tEXt)*/ +static unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) +{ + unsigned error = 0; + char *key = 0, *str = 0; + unsigned i; + + while (!error) /*not really a while loop, only used to break on error*/ + { + unsigned length, string2_begin; + + length = 0; + while (length < chunkLength && data[length] != 0) ++length; + /*even though it's not allowed by the standard, no error is thrown if + there's no null termination char, if the text is empty*/ + if (length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ + + key = (char*)lodepng_malloc(length + 1); + if (!key) CERROR_BREAK(error, 83); /*alloc fail*/ + + key[length] = 0; + for (i = 0; i != length; ++i) key[i] = (char)data[i]; + + string2_begin = length + 1; /*skip keyword null terminator*/ + + length = (unsigned int)(chunkLength < string2_begin ? 0 : chunkLength - string2_begin); + str = (char*)lodepng_malloc(length + 1); + if (!str) CERROR_BREAK(error, 83); /*alloc fail*/ + + str[length] = 0; + for (i = 0; i != length; ++i) str[i] = (char)data[string2_begin + i]; + + error = lodepng_add_text(info, key, str); + + break; + } + + lodepng_free(key); + lodepng_free(str); + + return error; +} + +/*compressed text chunk (zTXt)*/ +static unsigned readChunk_zTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings, + const unsigned char* data, size_t chunkLength) +{ + unsigned error = 0; + unsigned i; + + unsigned length, string2_begin; + char *key = 0; + ucvector decoded; + + ucvector_init(&decoded); + + while (!error) /*not really a while loop, only used to break on error*/ + { + for (length = 0; length < chunkLength && data[length] != 0; ++length); + if (length + 2 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/ + if (length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ + + key = (char*)lodepng_malloc(length + 1); + if (!key) CERROR_BREAK(error, 83); /*alloc fail*/ + + key[length] = 0; + for (i = 0; i != length; ++i) key[i] = (char)data[i]; + + if (data[length + 1] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/ + + string2_begin = length + 2; + if (string2_begin > chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/ + + length = (unsigned int)(chunkLength - string2_begin); + /*will fail if zlib error, e.g. if length is too small*/ + error = zlib_decompress(&decoded.data, &decoded.size, + (unsigned char*)(&data[string2_begin]), + length, zlibsettings); + if (error) break; + ucvector_push_back(&decoded, 0); + + error = lodepng_add_text(info, key, (char*)decoded.data); + + break; + } + + lodepng_free(key); + ucvector_cleanup(&decoded); + + return error; +} + +/*international text chunk (iTXt)*/ +static unsigned readChunk_iTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings, + const unsigned char* data, size_t chunkLength) +{ + unsigned error = 0; + unsigned i; + + unsigned length, begin, compressed; + char *key = 0, *langtag = 0, *transkey = 0; + ucvector decoded; + ucvector_init(&decoded); + + while (!error) /*not really a while loop, only used to break on error*/ + { + /*Quick check if the chunk length isn't too small. Even without check + it'd still fail with other error checks below if it's too short. This just gives a different error code.*/ + if (chunkLength < 5) CERROR_BREAK(error, 30); /*iTXt chunk too short*/ + + /*read the key*/ + for (length = 0; length < chunkLength && data[length] != 0; ++length); + if (length + 3 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination char, corrupt?*/ + if (length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ + + key = (char*)lodepng_malloc(length + 1); + if (!key) CERROR_BREAK(error, 83); /*alloc fail*/ + + key[length] = 0; + for (i = 0; i != length; ++i) key[i] = (char)data[i]; + + /*read the compression method*/ + compressed = data[length + 1]; + if (data[length + 2] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/ + + /*even though it's not allowed by the standard, no error is thrown if + there's no null termination char, if the text is empty for the next 3 texts*/ + + /*read the langtag*/ + begin = length + 3; + length = 0; + for (i = begin; i < chunkLength && data[i] != 0; ++i) ++length; + + langtag = (char*)lodepng_malloc(length + 1); + if (!langtag) CERROR_BREAK(error, 83); /*alloc fail*/ + + langtag[length] = 0; + for (i = 0; i != length; ++i) langtag[i] = (char)data[begin + i]; + + /*read the transkey*/ + begin += length + 1; + length = 0; + for (i = begin; i < chunkLength && data[i] != 0; ++i) ++length; + + transkey = (char*)lodepng_malloc(length + 1); + if (!transkey) CERROR_BREAK(error, 83); /*alloc fail*/ + + transkey[length] = 0; + for (i = 0; i != length; ++i) transkey[i] = (char)data[begin + i]; + + /*read the actual text*/ + begin += length + 1; + + length = (unsigned int)(chunkLength < begin ? 0 : chunkLength - begin); + + if (compressed) + { + /*will fail if zlib error, e.g. if length is too small*/ + error = zlib_decompress(&decoded.data, &decoded.size, + (unsigned char*)(&data[begin]), + length, zlibsettings); + if (error) break; + if (decoded.allocsize < decoded.size) decoded.allocsize = decoded.size; + ucvector_push_back(&decoded, 0); + } + else + { + if (!ucvector_resize(&decoded, length + 1)) CERROR_BREAK(error, 83 /*alloc fail*/); + + decoded.data[length] = 0; + for (i = 0; i != length; ++i) decoded.data[i] = data[begin + i]; + } + + error = lodepng_add_itext(info, key, langtag, transkey, (char*)decoded.data); + + break; + } + + lodepng_free(key); + lodepng_free(langtag); + lodepng_free(transkey); + ucvector_cleanup(&decoded); + + return error; +} + +static unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) +{ + if (chunkLength != 7) return 73; /*invalid tIME chunk size*/ + + info->time_defined = 1; + info->time.year = 256u * data[0] + data[1]; + info->time.month = data[2]; + info->time.day = data[3]; + info->time.hour = data[4]; + info->time.minute = data[5]; + info->time.second = data[6]; + + return 0; /* OK */ +} + +static unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) +{ + if (chunkLength != 9) return 74; /*invalid pHYs chunk size*/ + + info->phys_defined = 1; + info->phys_x = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3]; + info->phys_y = 16777216u * data[4] + 65536u * data[5] + 256u * data[6] + data[7]; + info->phys_unit = data[8]; + + return 0; /* OK */ +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +/*read a PNG, the result will be in the same color type as the PNG (hence "generic")*/ +static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize) +{ + unsigned char IEND = 0; + const unsigned char* chunk; + size_t i; + ucvector idat; /*the data from idat chunks*/ + ucvector scanlines; + size_t predict; + size_t numpixels; + size_t outsize = 0; + + /*for unknown chunk order*/ + unsigned unknown = 0; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + unsigned critical_pos = 1; /*1 = after IHDR, 2 = after PLTE, 3 = after IDAT*/ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + + /*provide some proper output values if error will happen*/ + *out = 0; + + state->error = lodepng_inspect(w, h, state, in, insize); /*reads header and resets other parameters in state->info_png*/ + if (state->error) return; + + numpixels = *w * *h; + + /*multiplication overflow*/ + if (*h != 0 && numpixels / *h != *w) CERROR_RETURN(state->error, 92); + /*multiplication overflow possible further below. Allows up to 2^31-1 pixel + bytes with 16-bit RGBA, the rest is room for filter bytes.*/ + if (numpixels > 268435455) CERROR_RETURN(state->error, 92); + + ucvector_init(&idat); + chunk = &in[33]; /*first byte of the first chunk after the header*/ + + /*loop through the chunks, ignoring unknown chunks and stopping at IEND chunk. + IDAT data is put at the start of the in buffer*/ + while (!IEND && !state->error) + { + unsigned chunkLength; + const unsigned char* data; /*the data in the chunk*/ + + /*error: size of the in buffer too small to contain next chunk*/ + if ((size_t)((chunk - in) + 12) > insize || chunk < in) CERROR_BREAK(state->error, 30); + + /*length of the data of the chunk, excluding the length bytes, chunk type and CRC bytes*/ + chunkLength = lodepng_chunk_length(chunk); + /*error: chunk length larger than the max PNG chunk size*/ + if (chunkLength > 2147483647) CERROR_BREAK(state->error, 63); + + if ((size_t)((chunk - in) + chunkLength + 12) > insize || (chunk + chunkLength + 12) < in) + { + CERROR_BREAK(state->error, 64); /*error: size of the in buffer too small to contain next chunk*/ + } + + data = lodepng_chunk_data_const(chunk); + + /*IDAT chunk, containing compressed image data*/ + if (lodepng_chunk_type_equals(chunk, "IDAT")) + { + size_t oldsize = idat.size; + if (!ucvector_resize(&idat, oldsize + chunkLength)) CERROR_BREAK(state->error, 83 /*alloc fail*/); + for (i = 0; i != chunkLength; ++i) idat.data[oldsize + i] = data[i]; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + critical_pos = 3; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } + /*IEND chunk*/ + else if (lodepng_chunk_type_equals(chunk, "IEND")) + { + IEND = 1; + } + /*palette chunk (PLTE)*/ + else if (lodepng_chunk_type_equals(chunk, "PLTE")) + { + state->error = readChunk_PLTE(&state->info_png.color, data, chunkLength); + if (state->error) break; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + critical_pos = 2; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } + /*palette transparency chunk (tRNS)*/ + else if (lodepng_chunk_type_equals(chunk, "tRNS")) + { + state->error = readChunk_tRNS(&state->info_png.color, data, chunkLength); + if (state->error) break; + } +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*background color chunk (bKGD)*/ + else if (lodepng_chunk_type_equals(chunk, "bKGD")) + { + state->error = readChunk_bKGD(&state->info_png, data, chunkLength); + if (state->error) break; + } + /*text chunk (tEXt)*/ + else if (lodepng_chunk_type_equals(chunk, "tEXt")) + { + if (state->decoder.read_text_chunks) + { + state->error = readChunk_tEXt(&state->info_png, data, chunkLength); + if (state->error) break; + } + } + /*compressed text chunk (zTXt)*/ + else if (lodepng_chunk_type_equals(chunk, "zTXt")) + { + if (state->decoder.read_text_chunks) + { + state->error = readChunk_zTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength); + if (state->error) break; + } + } + /*international text chunk (iTXt)*/ + else if (lodepng_chunk_type_equals(chunk, "iTXt")) + { + if (state->decoder.read_text_chunks) + { + state->error = readChunk_iTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength); + if (state->error) break; + } + } + else if (lodepng_chunk_type_equals(chunk, "tIME")) + { + state->error = readChunk_tIME(&state->info_png, data, chunkLength); + if (state->error) break; + } + else if (lodepng_chunk_type_equals(chunk, "pHYs")) + { + state->error = readChunk_pHYs(&state->info_png, data, chunkLength); + if (state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + else /*it's not an implemented chunk type, so ignore it: skip over the data*/ + { + /*error: unknown critical chunk (5th bit of first byte of chunk type is 0)*/ + if (!lodepng_chunk_ancillary(chunk)) CERROR_BREAK(state->error, 69); + + unknown = 1; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + if (state->decoder.remember_unknown_chunks) + { + state->error = lodepng_chunk_append(&state->info_png.unknown_chunks_data[critical_pos - 1], + &state->info_png.unknown_chunks_size[critical_pos - 1], chunk); + if (state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } + + if (!state->decoder.ignore_crc && !unknown) /*check CRC if wanted, only on known chunk types*/ + { + if (lodepng_chunk_check_crc(chunk)) CERROR_BREAK(state->error, 57); /*invalid CRC*/ + } + + if (!IEND) chunk = lodepng_chunk_next_const(chunk); + } + + ucvector_init(&scanlines); + /*predict output size, to allocate exact size for output buffer to avoid more dynamic allocation. + If the decompressed size does not match the prediction, the image must be corrupt.*/ + if (state->info_png.interlace_method == 0) + { + /*The extra *h is added because this are the filter bytes every scanline starts with*/ + predict = lodepng_get_raw_size_idat(*w, *h, &state->info_png.color) + *h; + } + else + { + /*Adam-7 interlaced: predicted size is the sum of the 7 sub-images sizes*/ + const LodePNGColorMode* color = &state->info_png.color; + predict = 0; + predict += lodepng_get_raw_size_idat((*w + 7) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3); + if (*w > 4) predict += lodepng_get_raw_size_idat((*w + 3) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3); + predict += lodepng_get_raw_size_idat((*w + 3) >> 2, (*h + 3) >> 3, color) + ((*h + 3) >> 3); + if (*w > 2) predict += lodepng_get_raw_size_idat((*w + 1) >> 2, (*h + 3) >> 2, color) + ((*h + 3) >> 2); + predict += lodepng_get_raw_size_idat((*w + 1) >> 1, (*h + 1) >> 2, color) + ((*h + 1) >> 2); + if (*w > 1) predict += lodepng_get_raw_size_idat((*w + 0) >> 1, (*h + 1) >> 1, color) + ((*h + 1) >> 1); + predict += lodepng_get_raw_size_idat((*w + 0), (*h + 0) >> 1, color) + ((*h + 0) >> 1); + } + if (!state->error && !ucvector_reserve(&scanlines, predict)) state->error = 83; /*alloc fail*/ + if (!state->error) + { + state->error = zlib_decompress(&scanlines.data, &scanlines.size, idat.data, + idat.size, &state->decoder.zlibsettings); + if (!state->error && scanlines.size != predict) state->error = 91; /*decompressed size doesn't match prediction*/ + } + ucvector_cleanup(&idat); + + if (!state->error) + { + outsize = lodepng_get_raw_size(*w, *h, &state->info_png.color); + *out = (unsigned char*)lodepng_malloc(outsize); + if (!*out) state->error = 83; /*alloc fail*/ + } + if (!state->error) + { + for (i = 0; i < outsize; i++) (*out)[i] = 0; + state->error = postProcessScanlines(*out, scanlines.data, *w, *h, &state->info_png); + } + ucvector_cleanup(&scanlines); +} + +unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize) +{ + *out = 0; + decodeGeneric(out, w, h, state, in, insize); + if (state->error) return state->error; + if (!state->decoder.color_convert || lodepng_color_mode_equal(&state->info_raw, &state->info_png.color)) + { + /*same color type, no copying or converting of data needed*/ + /*store the info_png color settings on the info_raw so that the info_raw still reflects what colortype + the raw image has to the end user*/ + if (!state->decoder.color_convert) + { + state->error = lodepng_color_mode_copy(&state->info_raw, &state->info_png.color); + if (state->error) return state->error; + } + } + else + { + /*color conversion needed; sort of copy of the data*/ + unsigned char* data = *out; + size_t outsize; + + /*TODO: check if this works according to the statement in the documentation: "The converter can convert + from greyscale input color type, to 8-bit greyscale or greyscale with alpha"*/ + if (!(state->info_raw.colortype == LCT_RGB || state->info_raw.colortype == LCT_RGBA) + && !(state->info_raw.bitdepth == 8)) + { + return 56; /*unsupported color mode conversion*/ + } + + outsize = lodepng_get_raw_size(*w, *h, &state->info_raw); + *out = (unsigned char*)lodepng_malloc(outsize); + if (!(*out)) + { + state->error = 83; /*alloc fail*/ + } + else state->error = lodepng_convert(*out, data, &state->info_raw, + &state->info_png.color, *w, *h); + lodepng_free(data); + } + return state->error; +} + +unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, + size_t insize, LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned error; + LodePNGState state; + lodepng_state_init(&state); + state.info_raw.colortype = colortype; + state.info_raw.bitdepth = bitdepth; + error = lodepng_decode(out, w, h, &state, in, insize); + lodepng_state_cleanup(&state); + return error; +} + +unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) +{ + return lodepng_decode_memory(out, w, h, in, insize, LCT_RGBA, 8); +} + +unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) +{ + return lodepng_decode_memory(out, w, h, in, insize, LCT_RGB, 8); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename, + LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned char* buffer = 0; + size_t buffersize; + unsigned error; + error = lodepng_load_file(&buffer, &buffersize, filename); + if (!error) error = lodepng_decode_memory(out, w, h, buffer, buffersize, colortype, bitdepth); + lodepng_free(buffer); + return error; +} + +unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) +{ + return lodepng_decode_file(out, w, h, filename, LCT_RGBA, 8); +} + +unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) +{ + return lodepng_decode_file(out, w, h, filename, LCT_RGB, 8); +} +#endif /*LODEPNG_COMPILE_DISK*/ + +void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings) +{ + settings->color_convert = 1; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + settings->read_text_chunks = 1; + settings->remember_unknown_chunks = 0; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + settings->ignore_crc = 0; + lodepng_decompress_settings_init(&settings->zlibsettings); +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) + +void lodepng_state_init(LodePNGState* state) +{ +#ifdef LODEPNG_COMPILE_DECODER + lodepng_decoder_settings_init(&state->decoder); +#endif /*LODEPNG_COMPILE_DECODER*/ +#ifdef LODEPNG_COMPILE_ENCODER + lodepng_encoder_settings_init(&state->encoder); +#endif /*LODEPNG_COMPILE_ENCODER*/ + lodepng_color_mode_init(&state->info_raw); + lodepng_info_init(&state->info_png); + state->error = 1; +} + +void lodepng_state_cleanup(LodePNGState* state) +{ + lodepng_color_mode_cleanup(&state->info_raw); + lodepng_info_cleanup(&state->info_png); +} + +void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source) +{ + lodepng_state_cleanup(dest); + *dest = *source; + lodepng_color_mode_init(&dest->info_raw); + lodepng_info_init(&dest->info_png); + dest->error = lodepng_color_mode_copy(&dest->info_raw, &source->info_raw); if (dest->error) return; + dest->error = lodepng_info_copy(&dest->info_png, &source->info_png); if (dest->error) return; +} + +#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */ + +#ifdef LODEPNG_COMPILE_ENCODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / PNG Encoder / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*chunkName must be string of 4 characters*/ +static unsigned addChunk(ucvector* out, const char* chunkName, const unsigned char* data, size_t length) +{ + CERROR_TRY_RETURN(lodepng_chunk_create(&out->data, &out->size, (unsigned)length, chunkName, data)); + out->allocsize = out->size; /*fix the allocsize again*/ + return 0; +} + +static void writeSignature(ucvector* out) +{ + /*8 bytes PNG signature, aka the magic bytes*/ + ucvector_push_back(out, 137); + ucvector_push_back(out, 80); + ucvector_push_back(out, 78); + ucvector_push_back(out, 71); + ucvector_push_back(out, 13); + ucvector_push_back(out, 10); + ucvector_push_back(out, 26); + ucvector_push_back(out, 10); +} + +static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth, unsigned interlace_method) +{ + unsigned error = 0; + ucvector header; + ucvector_init(&header); + + lodepng_add32bitInt(&header, w); /*width*/ + lodepng_add32bitInt(&header, h); /*height*/ + ucvector_push_back(&header, (unsigned char)bitdepth); /*bit depth*/ + ucvector_push_back(&header, (unsigned char)colortype); /*color type*/ + ucvector_push_back(&header, 0); /*compression method*/ + ucvector_push_back(&header, 0); /*filter method*/ + ucvector_push_back(&header, interlace_method); /*interlace method*/ + + error = addChunk(out, "IHDR", header.data, header.size); + ucvector_cleanup(&header); + + return error; +} + +static unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* info) +{ + unsigned error = 0; + size_t i; + ucvector PLTE; + ucvector_init(&PLTE); + for (i = 0; i != info->palettesize * 4; ++i) + { + /*add all channels except alpha channel*/ + if (i % 4 != 3) ucvector_push_back(&PLTE, info->palette[i]); + } + error = addChunk(out, "PLTE", PLTE.data, PLTE.size); + ucvector_cleanup(&PLTE); + + return error; +} + +static unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* info) +{ + unsigned error = 0; + size_t i; + ucvector tRNS; + ucvector_init(&tRNS); + if (info->colortype == LCT_PALETTE) + { + size_t amount = info->palettesize; + /*the tail of palette values that all have 255 as alpha, does not have to be encoded*/ + for (i = info->palettesize; i != 0; --i) + { + if (info->palette[4 * (i - 1) + 3] == 255) --amount; + else break; + } + /*add only alpha channel*/ + for (i = 0; i != amount; ++i) ucvector_push_back(&tRNS, info->palette[4 * i + 3]); + } + else if (info->colortype == LCT_GREY) + { + if (info->key_defined) + { + ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255)); + } + } + else if (info->colortype == LCT_RGB) + { + if (info->key_defined) + { + ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_g >> 8)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_g & 255)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_b >> 8)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_b & 255)); + } + } + + error = addChunk(out, "tRNS", tRNS.data, tRNS.size); + ucvector_cleanup(&tRNS); + + return error; +} + +static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, size_t datasize, + LodePNGCompressSettings* zlibsettings) +{ + ucvector zlibdata; + unsigned error = 0; + + /*compress with the Zlib compressor*/ + ucvector_init(&zlibdata); + error = zlib_compress(&zlibdata.data, &zlibdata.size, data, datasize, zlibsettings); + if (!error) error = addChunk(out, "IDAT", zlibdata.data, zlibdata.size); + ucvector_cleanup(&zlibdata); + + return error; +} + +static unsigned addChunk_IEND(ucvector* out) +{ + unsigned error = 0; + error = addChunk(out, "IEND", 0, 0); + return error; +} + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + +static unsigned addChunk_tEXt(ucvector* out, const char* keyword, const char* textstring) +{ + unsigned error = 0; + size_t i; + ucvector text; + ucvector_init(&text); + for (i = 0; keyword[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)keyword[i]); + if (i < 1 || i > 79) return 89; /*error: invalid keyword size*/ + ucvector_push_back(&text, 0); /*0 termination char*/ + for (i = 0; textstring[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)textstring[i]); + error = addChunk(out, "tEXt", text.data, text.size); + ucvector_cleanup(&text); + + return error; +} + +static unsigned addChunk_zTXt(ucvector* out, const char* keyword, const char* textstring, + LodePNGCompressSettings* zlibsettings) +{ + unsigned error = 0; + ucvector data, compressed; + size_t i, textsize = strlen(textstring); + + ucvector_init(&data); + ucvector_init(&compressed); + for (i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]); + if (i < 1 || i > 79) return 89; /*error: invalid keyword size*/ + ucvector_push_back(&data, 0); /*0 termination char*/ + ucvector_push_back(&data, 0); /*compression method: 0*/ + + error = zlib_compress(&compressed.data, &compressed.size, + (unsigned char*)textstring, textsize, zlibsettings); + if (!error) + { + for (i = 0; i != compressed.size; ++i) ucvector_push_back(&data, compressed.data[i]); + error = addChunk(out, "zTXt", data.data, data.size); + } + + ucvector_cleanup(&compressed); + ucvector_cleanup(&data); + return error; +} + +static unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const char* keyword, const char* langtag, + const char* transkey, const char* textstring, LodePNGCompressSettings* zlibsettings) +{ + unsigned error = 0; + ucvector data; + size_t i, textsize = strlen(textstring); + + ucvector_init(&data); + + for (i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]); + if (i < 1 || i > 79) return 89; /*error: invalid keyword size*/ + ucvector_push_back(&data, 0); /*null termination char*/ + ucvector_push_back(&data, compressed ? 1 : 0); /*compression flag*/ + ucvector_push_back(&data, 0); /*compression method*/ + for (i = 0; langtag[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)langtag[i]); + ucvector_push_back(&data, 0); /*null termination char*/ + for (i = 0; transkey[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)transkey[i]); + ucvector_push_back(&data, 0); /*null termination char*/ + + if (compressed) + { + ucvector compressed_data; + ucvector_init(&compressed_data); + error = zlib_compress(&compressed_data.data, &compressed_data.size, + (unsigned char*)textstring, textsize, zlibsettings); + if (!error) + { + for (i = 0; i != compressed_data.size; ++i) ucvector_push_back(&data, compressed_data.data[i]); + } + ucvector_cleanup(&compressed_data); + } + else /*not compressed*/ + { + for (i = 0; textstring[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)textstring[i]); + } + + if (!error) error = addChunk(out, "iTXt", data.data, data.size); + ucvector_cleanup(&data); + return error; +} + +static unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info) +{ + unsigned error = 0; + ucvector bKGD; + ucvector_init(&bKGD); + if (info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) + { + ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); + } + else if (info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) + { + ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_g >> 8)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_g & 255)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_b >> 8)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_b & 255)); + } + else if (info->color.colortype == LCT_PALETTE) + { + ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); /*palette index*/ + } + + error = addChunk(out, "bKGD", bKGD.data, bKGD.size); + ucvector_cleanup(&bKGD); + + return error; +} + +static unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time) +{ + unsigned error = 0; + unsigned char* data = (unsigned char*)lodepng_malloc(7); + if (!data) return 83; /*alloc fail*/ + data[0] = (unsigned char)(time->year >> 8); + data[1] = (unsigned char)(time->year & 255); + data[2] = (unsigned char)time->month; + data[3] = (unsigned char)time->day; + data[4] = (unsigned char)time->hour; + data[5] = (unsigned char)time->minute; + data[6] = (unsigned char)time->second; + error = addChunk(out, "tIME", data, 7); + lodepng_free(data); + return error; +} + +static unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info) +{ + unsigned error = 0; + ucvector data; + ucvector_init(&data); + + lodepng_add32bitInt(&data, info->phys_x); + lodepng_add32bitInt(&data, info->phys_y); + ucvector_push_back(&data, info->phys_unit); + + error = addChunk(out, "pHYs", data.data, data.size); + ucvector_cleanup(&data); + + return error; +} + +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +static void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline, + size_t length, size_t bytewidth, unsigned char filterType) +{ + size_t i; + switch (filterType) + { + case 0: /*None*/ + for (i = 0; i != length; ++i) out[i] = scanline[i]; + break; + case 1: /*Sub*/ + for (i = 0; i != bytewidth; ++i) out[i] = scanline[i]; + for (i = bytewidth; i < length; ++i) out[i] = scanline[i] - scanline[i - bytewidth]; + break; + case 2: /*Up*/ + if (prevline) + { + for (i = 0; i != length; ++i) out[i] = scanline[i] - prevline[i]; + } + else + { + for (i = 0; i != length; ++i) out[i] = scanline[i]; + } + break; + case 3: /*Average*/ + if (prevline) + { + for (i = 0; i != bytewidth; ++i) out[i] = scanline[i] - (prevline[i] >> 1); + for (i = bytewidth; i < length; ++i) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) >> 1); + } + else + { + for (i = 0; i != bytewidth; ++i) out[i] = scanline[i]; + for (i = bytewidth; i < length; ++i) out[i] = scanline[i] - (scanline[i - bytewidth] >> 1); + } + break; + case 4: /*Paeth*/ + if (prevline) + { + /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/ + for (i = 0; i != bytewidth; ++i) out[i] = (scanline[i] - prevline[i]); + for (i = bytewidth; i < length; ++i) + { + out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth])); + } + } + else + { + for (i = 0; i != bytewidth; ++i) out[i] = scanline[i]; + /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/ + for (i = bytewidth; i < length; ++i) out[i] = (scanline[i] - scanline[i - bytewidth]); + } + break; + default: return; /*unexisting filter type given*/ + } +} + +/* log2 approximation. A slight bit faster than std::log. */ +static float flog2(float f) +{ + float result = 0; + while (f > 32) { result += 4; f /= 16; } + while (f > 2) { ++result; f /= 2; } + return result + 1.442695f * (f * f * f / 3 - 3 * f * f / 2 + 3 * f - 1.83333f); +} + +static unsigned filter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, + const LodePNGColorMode* info, const LodePNGEncoderSettings* settings) +{ + /* + For PNG filter method 0 + out must be a buffer with as size: h + (w * h * bpp + 7) / 8, because there are + the scanlines with 1 extra byte per scanline + */ + + unsigned bpp = lodepng_get_bpp(info); + /*the width of a scanline in bytes, not including the filter type*/ + size_t linebytes = (w * bpp + 7) / 8; + /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ + size_t bytewidth = (bpp + 7) / 8; + const unsigned char* prevline = 0; + unsigned x, y; + unsigned error = 0; + LodePNGFilterStrategy strategy = settings->filter_strategy; + + /* + There is a heuristic called the minimum sum of absolute differences heuristic, suggested by the PNG standard: + * If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e. + use fixed filtering, with the filter None). + * (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is + not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply + all five filters and select the filter that produces the smallest sum of absolute values per row. + This heuristic is used if filter strategy is LFS_MINSUM and filter_palette_zero is true. + + If filter_palette_zero is true and filter_strategy is not LFS_MINSUM, the above heuristic is followed, + but for "the other case", whatever strategy filter_strategy is set to instead of the minimum sum + heuristic is used. + */ + if (settings->filter_palette_zero && + (info->colortype == LCT_PALETTE || info->bitdepth < 8)) strategy = LFS_ZERO; + + if (bpp == 0) return 31; /*error: invalid color type*/ + + if (strategy == LFS_ZERO) + { + for (y = 0; y != h; ++y) + { + size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ + size_t inindex = linebytes * y; + out[outindex] = 0; /*filter type byte*/ + filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, 0); + prevline = &in[inindex]; + } + } + else if (strategy == LFS_MINSUM) + { + /*adaptive filtering*/ + size_t sum[5]; + unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ + size_t smallest = 0; + unsigned char type, bestType = 0; + + for (type = 0; type != 5; ++type) + { + attempt[type] = (unsigned char*)lodepng_malloc(linebytes); + if (!attempt[type]) return 83; /*alloc fail*/ + } + + if (!error) + { + for (y = 0; y != h; ++y) + { + /*try the 5 filter types*/ + for (type = 0; type != 5; ++type) + { + filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); + + /*calculate the sum of the result*/ + sum[type] = 0; + if (type == 0) + { + for (x = 0; x != linebytes; ++x) sum[type] += (unsigned char)(attempt[type][x]); + } + else + { + for (x = 0; x != linebytes; ++x) + { + /*For differences, each byte should be treated as signed, values above 127 are negative + (converted to signed char). Filtertype 0 isn't a difference though, so use unsigned there. + This means filtertype 0 is almost never chosen, but that is justified.*/ + unsigned char s = attempt[type][x]; + sum[type] += s < 128 ? s : (255U - s); + } + } + + /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/ + if (type == 0 || sum[type] < smallest) + { + bestType = type; + smallest = sum[type]; + } + } + + prevline = &in[y * linebytes]; + + /*now fill the out values*/ + out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ + for (x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; + } + } + + for (type = 0; type != 5; ++type) lodepng_free(attempt[type]); + } + else if (strategy == LFS_ENTROPY) + { + float sum[5]; + unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ + float smallest = 0; + unsigned type, bestType = 0; + unsigned count[256]; + + for (type = 0; type != 5; ++type) + { + attempt[type] = (unsigned char*)lodepng_malloc(linebytes); + if (!attempt[type]) return 83; /*alloc fail*/ + } + + for (y = 0; y != h; ++y) + { + /*try the 5 filter types*/ + for (type = 0; type != 5; ++type) + { + filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); + for (x = 0; x != 256; ++x) count[x] = 0; + for (x = 0; x != linebytes; ++x) ++count[attempt[type][x]]; + ++count[type]; /*the filter type itself is part of the scanline*/ + sum[type] = 0; + for (x = 0; x != 256; ++x) + { + float p = count[x] / (float)(linebytes + 1); + sum[type] += count[x] == 0 ? 0 : flog2(1 / p) * p; + } + /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/ + if (type == 0 || sum[type] < smallest) + { + bestType = type; + smallest = sum[type]; + } + } + + prevline = &in[y * linebytes]; + + /*now fill the out values*/ + out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ + for (x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; + } + + for (type = 0; type != 5; ++type) lodepng_free(attempt[type]); + } + else if (strategy == LFS_PREDEFINED) + { + for (y = 0; y != h; ++y) + { + size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ + size_t inindex = linebytes * y; + unsigned char type = settings->predefined_filters[y]; + out[outindex] = type; /*filter type byte*/ + filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, type); + prevline = &in[inindex]; + } + } + else if (strategy == LFS_BRUTE_FORCE) + { + /*brute force filter chooser. + deflate the scanline after every filter attempt to see which one deflates best. + This is very slow and gives only slightly smaller, sometimes even larger, result*/ + size_t size[5]; + unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ + size_t smallest = 0; + unsigned type = 0, bestType = 0; + unsigned char* dummy; + LodePNGCompressSettings zlibsettings = settings->zlibsettings; + /*use fixed tree on the attempts so that the tree is not adapted to the filtertype on purpose, + to simulate the true case where the tree is the same for the whole image. Sometimes it gives + better result with dynamic tree anyway. Using the fixed tree sometimes gives worse, but in rare + cases better compression. It does make this a bit less slow, so it's worth doing this.*/ + zlibsettings.btype = 1; + /*a custom encoder likely doesn't read the btype setting and is optimized for complete PNG + images only, so disable it*/ + zlibsettings.custom_zlib = 0; + zlibsettings.custom_deflate = 0; + for (type = 0; type != 5; ++type) + { + attempt[type] = (unsigned char*)lodepng_malloc(linebytes); + if (!attempt[type]) return 83; /*alloc fail*/ + } + for (y = 0; y != h; ++y) /*try the 5 filter types*/ + { + for (type = 0; type != 5; ++type) + { + unsigned testsize = (unsigned)linebytes; + /*if(testsize > 8) testsize /= 8;*/ /*it already works good enough by testing a part of the row*/ + + filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); + size[type] = 0; + dummy = 0; + zlib_compress(&dummy, &size[type], attempt[type], testsize, &zlibsettings); + lodepng_free(dummy); + /*check if this is smallest size (or if type == 0 it's the first case so always store the values)*/ + if (type == 0 || size[type] < smallest) + { + bestType = type; + smallest = size[type]; + } + } + prevline = &in[y * linebytes]; + out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ + for (x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; + } + for (type = 0; type != 5; ++type) lodepng_free(attempt[type]); + } + else return 88; /* unknown filter strategy */ + + return error; +} + +static void addPaddingBits(unsigned char* out, const unsigned char* in, + size_t olinebits, size_t ilinebits, unsigned h) +{ + /*The opposite of the removePaddingBits function + olinebits must be >= ilinebits*/ + unsigned y; + size_t diff = olinebits - ilinebits; + size_t obp = 0, ibp = 0; /*bit pointers*/ + for (y = 0; y != h; ++y) + { + size_t x; + for (x = 0; x < ilinebits; ++x) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + /*obp += diff; --> no, fill in some value in the padding bits too, to avoid + "Use of uninitialised value of size ###" warning from valgrind*/ + for (x = 0; x != diff; ++x) setBitOfReversedStream(&obp, out, 0); + } +} + +/* +in: non-interlaced image with size w*h +out: the same pixels, but re-ordered according to PNG's Adam7 interlacing, with + no padding bits between scanlines, but between reduced images so that each + reduced image starts at a byte. +bpp: bits per pixel +there are no padding bits, not between scanlines, not between reduced images +in has the following size in bits: w * h * bpp. +out is possibly bigger due to padding bits between reduced images +NOTE: comments about padding bits are only relevant if bpp < 8 +*/ +static void Adam7_interlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) +{ + unsigned passw[7], passh[7]; + size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned i; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + if (bpp >= 8) + { + for (i = 0; i != 7; ++i) + { + unsigned x, y, b; + size_t bytewidth = bpp / 8; + for (y = 0; y < passh[i]; ++y) + for (x = 0; x < passw[i]; ++x) + { + size_t pixelinstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth; + size_t pixeloutstart = passstart[i] + (y * passw[i] + x) * bytewidth; + for (b = 0; b < bytewidth; ++b) + { + out[pixeloutstart + b] = in[pixelinstart + b]; + } + } + } + } + else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ + { + for (i = 0; i != 7; ++i) + { + unsigned x, y, b; + unsigned ilinebits = bpp * passw[i]; + unsigned olinebits = bpp * w; + size_t obp, ibp; /*bit pointers (for out and in buffer)*/ + for (y = 0; y < passh[i]; ++y) + for (x = 0; x < passw[i]; ++x) + { + ibp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp; + obp = (8 * passstart[i]) + (y * ilinebits + x * bpp); + for (b = 0; b < bpp; ++b) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + } + } + } +} + +/*out must be buffer big enough to contain uncompressed IDAT chunk data, and in must contain the full image. +return value is error**/ +static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const unsigned char* in, + unsigned w, unsigned h, + const LodePNGInfo* info_png, const LodePNGEncoderSettings* settings) +{ + /* + This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps: + *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter + *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter + */ + unsigned bpp = lodepng_get_bpp(&info_png->color); + unsigned error = 0; + + if (info_png->interlace_method == 0) + { + *outsize = h + (h * ((w * bpp + 7) / 8)); /*image size plus an extra byte per scanline + possible padding bits*/ + *out = (unsigned char*)lodepng_malloc(*outsize); + if (!(*out) && (*outsize)) error = 83; /*alloc fail*/ + + if (!error) + { + /*non multiple of 8 bits per scanline, padding bits needed per scanline*/ + if (bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) + { + unsigned char* padded = (unsigned char*)lodepng_malloc(h * ((w * bpp + 7) / 8)); + if (!padded) error = 83; /*alloc fail*/ + if (!error) + { + addPaddingBits(padded, in, ((w * bpp + 7) / 8) * 8, w * bpp, h); + error = filter(*out, padded, w, h, &info_png->color, settings); + } + lodepng_free(padded); + } + else + { + /*we can immediately filter into the out buffer, no other steps needed*/ + error = filter(*out, in, w, h, &info_png->color, settings); + } + } + } + else /*interlace_method is 1 (Adam7)*/ + { + unsigned passw[7], passh[7]; + size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned char* adam7; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + *outsize = filter_passstart[7]; /*image size plus an extra byte per scanline + possible padding bits*/ + *out = (unsigned char*)lodepng_malloc(*outsize); + if (!(*out)) error = 83; /*alloc fail*/ + + adam7 = (unsigned char*)lodepng_malloc(passstart[7]); + if (!adam7 && passstart[7]) error = 83; /*alloc fail*/ + + if (!error) + { + unsigned i; + + Adam7_interlace(adam7, in, w, h, bpp); + for (i = 0; i != 7; ++i) + { + if (bpp < 8) + { + unsigned char* padded = (unsigned char*)lodepng_malloc(padded_passstart[i + 1] - padded_passstart[i]); + if (!padded) ERROR_BREAK(83); /*alloc fail*/ + addPaddingBits(padded, &adam7[passstart[i]], + ((passw[i] * bpp + 7) / 8) * 8, passw[i] * bpp, passh[i]); + error = filter(&(*out)[filter_passstart[i]], padded, + passw[i], passh[i], &info_png->color, settings); + lodepng_free(padded); + } + else + { + error = filter(&(*out)[filter_passstart[i]], &adam7[padded_passstart[i]], + passw[i], passh[i], &info_png->color, settings); + } + + if (error) break; + } + } + + lodepng_free(adam7); + } + + return error; +} + +/* +palette must have 4 * palettesize bytes allocated, and given in format RGBARGBARGBARGBA... +returns 0 if the palette is opaque, +returns 1 if the palette has a single color with alpha 0 ==> color key +returns 2 if the palette is semi-translucent. +*/ +static unsigned getPaletteTranslucency(const unsigned char* palette, size_t palettesize) +{ + size_t i; + unsigned key = 0; + unsigned r = 0, g = 0, b = 0; /*the value of the color with alpha 0, so long as color keying is possible*/ + for (i = 0; i != palettesize; ++i) + { + if (!key && palette[4 * i + 3] == 0) + { + r = palette[4 * i + 0]; g = palette[4 * i + 1]; b = palette[4 * i + 2]; + key = 1; + i = (size_t)(-1); /*restart from beginning, to detect earlier opaque colors with key's value*/ + } + else if (palette[4 * i + 3] != 255) return 2; + /*when key, no opaque RGB may have key's RGB*/ + else if (key && r == palette[i * 4 + 0] && g == palette[i * 4 + 1] && b == palette[i * 4 + 2]) return 2; + } + return key; +} + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +static unsigned addUnknownChunks(ucvector* out, unsigned char* data, size_t datasize) +{ + unsigned char* inchunk = data; + while ((size_t)(inchunk - data) < datasize) + { + CERROR_TRY_RETURN(lodepng_chunk_append(&out->data, &out->size, inchunk)); + out->allocsize = out->size; /*fix the allocsize again*/ + inchunk = lodepng_chunk_next(inchunk); + } + return 0; +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +unsigned lodepng_encode(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h, + LodePNGState* state) +{ + LodePNGInfo info; + ucvector outv; + unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/ + size_t datasize = 0; + + /*provide some proper output values if error will happen*/ + *out = 0; + *outsize = 0; + state->error = 0; + + lodepng_info_init(&info); + lodepng_info_copy(&info, &state->info_png); + + if ((info.color.colortype == LCT_PALETTE || state->encoder.force_palette) + && (info.color.palettesize == 0 || info.color.palettesize > 256)) + { + state->error = 68; /*invalid palette size, it is only allowed to be 1-256*/ + return state->error; + } + + if (state->encoder.auto_convert) + { + state->error = lodepng_auto_choose_color(&info.color, image, w, h, &state->info_raw); + } + if (state->error) return state->error; + + if (state->encoder.zlibsettings.btype > 2) + { + CERROR_RETURN_ERROR(state->error, 61); /*error: unexisting btype*/ + } + if (state->info_png.interlace_method > 1) + { + CERROR_RETURN_ERROR(state->error, 71); /*error: unexisting interlace mode*/ + } + + state->error = checkColorValidity(info.color.colortype, info.color.bitdepth); + if (state->error) return state->error; /*error: unexisting color type given*/ + state->error = checkColorValidity(state->info_raw.colortype, state->info_raw.bitdepth); + if (state->error) return state->error; /*error: unexisting color type given*/ + + if (!lodepng_color_mode_equal(&state->info_raw, &info.color)) + { + unsigned char* converted; + size_t size = (w * h * (size_t)lodepng_get_bpp(&info.color) + 7) / 8; + + converted = (unsigned char*)lodepng_malloc(size); + if (!converted && size) state->error = 83; /*alloc fail*/ + if (!state->error) + { + state->error = lodepng_convert(converted, image, &info.color, &state->info_raw, w, h); + } + if (!state->error) preProcessScanlines(&data, &datasize, converted, w, h, &info, &state->encoder); + lodepng_free(converted); + } + else preProcessScanlines(&data, &datasize, image, w, h, &info, &state->encoder); + + ucvector_init(&outv); + while (!state->error) /*while only executed once, to break on error*/ + { +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + size_t i; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + /*write signature and chunks*/ + writeSignature(&outv); + /*IHDR*/ + addChunk_IHDR(&outv, w, h, info.color.colortype, info.color.bitdepth, info.interlace_method); +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*unknown chunks between IHDR and PLTE*/ + if (info.unknown_chunks_data[0]) + { + state->error = addUnknownChunks(&outv, info.unknown_chunks_data[0], info.unknown_chunks_size[0]); + if (state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + /*PLTE*/ + if (info.color.colortype == LCT_PALETTE) + { + addChunk_PLTE(&outv, &info.color); + } + if (state->encoder.force_palette && (info.color.colortype == LCT_RGB || info.color.colortype == LCT_RGBA)) + { + addChunk_PLTE(&outv, &info.color); + } + /*tRNS*/ + if (info.color.colortype == LCT_PALETTE && getPaletteTranslucency(info.color.palette, info.color.palettesize) != 0) + { + addChunk_tRNS(&outv, &info.color); + } + if ((info.color.colortype == LCT_GREY || info.color.colortype == LCT_RGB) && info.color.key_defined) + { + addChunk_tRNS(&outv, &info.color); + } +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*bKGD (must come between PLTE and the IDAt chunks*/ + if (info.background_defined) addChunk_bKGD(&outv, &info); + /*pHYs (must come before the IDAT chunks)*/ + if (info.phys_defined) addChunk_pHYs(&outv, &info); + + /*unknown chunks between PLTE and IDAT*/ + if (info.unknown_chunks_data[1]) + { + state->error = addUnknownChunks(&outv, info.unknown_chunks_data[1], info.unknown_chunks_size[1]); + if (state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + /*IDAT (multiple IDAT chunks must be consecutive)*/ + state->error = addChunk_IDAT(&outv, data, datasize, &state->encoder.zlibsettings); + if (state->error) break; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*tIME*/ + if (info.time_defined) addChunk_tIME(&outv, &info.time); + /*tEXt and/or zTXt*/ + for (i = 0; i != info.text_num; ++i) + { + if (strlen(info.text_keys[i]) > 79) + { + state->error = 66; /*text chunk too large*/ + break; + } + if (strlen(info.text_keys[i]) < 1) + { + state->error = 67; /*text chunk too small*/ + break; + } + if (state->encoder.text_compression) + { + addChunk_zTXt(&outv, info.text_keys[i], info.text_strings[i], &state->encoder.zlibsettings); + } + else + { + addChunk_tEXt(&outv, info.text_keys[i], info.text_strings[i]); + } + } + /*LodePNG version id in text chunk*/ + if (state->encoder.add_id) + { + unsigned alread_added_id_text = 0; + for (i = 0; i != info.text_num; ++i) + { + if (!strcmp(info.text_keys[i], "LodePNG")) + { + alread_added_id_text = 1; + break; + } + } + if (alread_added_id_text == 0) + { + addChunk_tEXt(&outv, "LodePNG", LODEPNG_VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/ + } + } + /*iTXt*/ + for (i = 0; i != info.itext_num; ++i) + { + if (strlen(info.itext_keys[i]) > 79) + { + state->error = 66; /*text chunk too large*/ + break; + } + if (strlen(info.itext_keys[i]) < 1) + { + state->error = 67; /*text chunk too small*/ + break; + } + addChunk_iTXt(&outv, state->encoder.text_compression, + info.itext_keys[i], info.itext_langtags[i], info.itext_transkeys[i], info.itext_strings[i], + &state->encoder.zlibsettings); + } + + /*unknown chunks between IDAT and IEND*/ + if (info.unknown_chunks_data[2]) + { + state->error = addUnknownChunks(&outv, info.unknown_chunks_data[2], info.unknown_chunks_size[2]); + if (state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + addChunk_IEND(&outv); + + break; /*this isn't really a while loop; no error happened so break out now!*/ + } + + lodepng_info_cleanup(&info); + lodepng_free(data); + /*instead of cleaning the vector up, give it to the output*/ + *out = outv.data; + *outsize = outv.size; + + return state->error; +} + +unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, const unsigned char* image, + unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned error; + LodePNGState state; + lodepng_state_init(&state); + state.info_raw.colortype = colortype; + state.info_raw.bitdepth = bitdepth; + state.info_png.color.colortype = colortype; + state.info_png.color.bitdepth = bitdepth; + lodepng_encode(out, outsize, image, w, h, &state); + error = state.error; + lodepng_state_cleanup(&state); + return error; +} + +unsigned lodepng_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGBA, 8); +} + +unsigned lodepng_encode24(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGB, 8); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned lodepng_encode_file(const char* filename, const unsigned char* image, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned char* buffer; + size_t buffersize; + unsigned error = lodepng_encode_memory(&buffer, &buffersize, image, w, h, colortype, bitdepth); + if (!error) error = lodepng_save_file(buffer, buffersize, filename); + lodepng_free(buffer); + return error; +} + +unsigned lodepng_encode32_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_file(filename, image, w, h, LCT_RGBA, 8); +} + +unsigned lodepng_encode24_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_file(filename, image, w, h, LCT_RGB, 8); +} +#endif /*LODEPNG_COMPILE_DISK*/ + +void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings) +{ + lodepng_compress_settings_init(&settings->zlibsettings); + settings->filter_palette_zero = 1; + settings->filter_strategy = LFS_MINSUM; + settings->auto_convert = LODEPNG_DEFAULT_AUTO_CONVERT; + settings->force_palette = 0; + settings->predefined_filters = 0; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + settings->add_id = 0; + settings->text_compression = 1; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} + +#endif /*LODEPNG_COMPILE_ENCODER*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ERROR_TEXT +/* +This returns the description of a numerical error code in English. This is also +the documentation of all the error codes. +*/ +const char* lodepng_error_text(unsigned code) +{ + switch (code) + { + case 0: return "no error, everything went ok"; + case 1: return "nothing done yet"; /*the Encoder/Decoder has done nothing yet, error checking makes no sense yet*/ + case 10: return "end of input memory reached without huffman end code"; /*while huffman decoding*/ + case 11: return "error in code tree made it jump outside of huffman tree"; /*while huffman decoding*/ + case 13: return "problem while processing dynamic deflate block"; + case 14: return "problem while processing dynamic deflate block"; + case 15: return "problem while processing dynamic deflate block"; + case 16: return "unexisting code while processing dynamic deflate block"; + case 17: return "end of out buffer memory reached while inflating"; + case 18: return "invalid distance code while inflating"; + case 19: return "end of out buffer memory reached while inflating"; + case 20: return "invalid deflate block BTYPE encountered while decoding"; + case 21: return "NLEN is not ones complement of LEN in a deflate block"; + /*end of out buffer memory reached while inflating: + This can happen if the inflated deflate data is longer than the amount of bytes required to fill up + all the pixels of the image, given the color depth and image dimensions. Something that doesn't + happen in a normal, well encoded, PNG image.*/ + case 22: return "end of out buffer memory reached while inflating"; + case 23: return "end of in buffer memory reached while inflating"; + case 24: return "invalid FCHECK in zlib header"; + case 25: return "invalid compression method in zlib header"; + case 26: return "FDICT encountered in zlib header while it's not used for PNG"; + case 27: return "PNG file is smaller than a PNG header"; + /*Checks the magic file header, the first 8 bytes of the PNG file*/ + case 28: return "incorrect PNG signature, it's no PNG or corrupted"; + case 29: return "first chunk is not the header chunk"; + case 30: return "chunk length too large, chunk broken off at end of file"; + case 31: return "illegal PNG color type or bpp"; + case 32: return "illegal PNG compression method"; + case 33: return "illegal PNG filter method"; + case 34: return "illegal PNG interlace method"; + case 35: return "chunk length of a chunk is too large or the chunk too small"; + case 36: return "illegal PNG filter type encountered"; + case 37: return "illegal bit depth for this color type given"; + case 38: return "the palette is too big"; /*more than 256 colors*/ + case 39: return "more palette alpha values given in tRNS chunk than there are colors in the palette"; + case 40: return "tRNS chunk has wrong size for greyscale image"; + case 41: return "tRNS chunk has wrong size for RGB image"; + case 42: return "tRNS chunk appeared while it was not allowed for this color type"; + case 43: return "bKGD chunk has wrong size for palette image"; + case 44: return "bKGD chunk has wrong size for greyscale image"; + case 45: return "bKGD chunk has wrong size for RGB image"; + case 48: return "empty input buffer given to decoder. Maybe caused by non-existing file?"; + case 49: return "jumped past memory while generating dynamic huffman tree"; + case 50: return "jumped past memory while generating dynamic huffman tree"; + case 51: return "jumped past memory while inflating huffman block"; + case 52: return "jumped past memory while inflating"; + case 53: return "size of zlib data too small"; + case 54: return "repeat symbol in tree while there was no value symbol yet"; + /*jumped past tree while generating huffman tree, this could be when the + tree will have more leaves than symbols after generating it out of the + given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib.*/ + case 55: return "jumped past tree while generating huffman tree"; + case 56: return "given output image colortype or bitdepth not supported for color conversion"; + case 57: return "invalid CRC encountered (checking CRC can be disabled)"; + case 58: return "invalid ADLER32 encountered (checking ADLER32 can be disabled)"; + case 59: return "requested color conversion not supported"; + case 60: return "invalid window size given in the settings of the encoder (must be 0-32768)"; + case 61: return "invalid BTYPE given in the settings of the encoder (only 0, 1 and 2 are allowed)"; + /*LodePNG leaves the choice of RGB to greyscale conversion formula to the user.*/ + case 62: return "conversion from color to greyscale not supported"; + case 63: return "length of a chunk too long, max allowed for PNG is 2147483647 bytes per chunk"; /*(2^31-1)*/ + /*this would result in the inability of a deflated block to ever contain an end code. It must be at least 1.*/ + case 64: return "the length of the END symbol 256 in the Huffman tree is 0"; + case 66: return "the length of a text chunk keyword given to the encoder is longer than the maximum of 79 bytes"; + case 67: return "the length of a text chunk keyword given to the encoder is smaller than the minimum of 1 byte"; + case 68: return "tried to encode a PLTE chunk with a palette that has less than 1 or more than 256 colors"; + case 69: return "unknown chunk type with 'critical' flag encountered by the decoder"; + case 71: return "unexisting interlace mode given to encoder (must be 0 or 1)"; + case 72: return "while decoding, unexisting compression method encountering in zTXt or iTXt chunk (it must be 0)"; + case 73: return "invalid tIME chunk size"; + case 74: return "invalid pHYs chunk size"; + /*length could be wrong, or data chopped off*/ + case 75: return "no null termination char found while decoding text chunk"; + case 76: return "iTXt chunk too short to contain required bytes"; + case 77: return "integer overflow in buffer size"; + case 78: return "failed to open file for reading"; /*file doesn't exist or couldn't be opened for reading*/ + case 79: return "failed to open file for writing"; + case 80: return "tried creating a tree of 0 symbols"; + case 81: return "lazy matching at pos 0 is impossible"; + case 82: return "color conversion to palette requested while a color isn't in palette"; + case 83: return "memory allocation failed"; + case 84: return "given image too small to contain all pixels to be encoded"; + case 86: return "impossible offset in lz77 encoding (internal bug)"; + case 87: return "must provide custom zlib function pointer if LODEPNG_COMPILE_ZLIB is not defined"; + case 88: return "invalid filter strategy given for LodePNGEncoderSettings.filter_strategy"; + case 89: return "text chunk keyword too short or long: must have size 1-79"; + /*the windowsize in the LodePNGCompressSettings. Requiring POT(==> & instead of %) makes encoding 12% faster.*/ + case 90: return "windowsize must be a power of two"; + case 91: return "invalid decompressed idat size"; + case 92: return "too many pixels, not supported"; + case 93: return "zero width or height is invalid"; + case 94: return "header chunk must have a size of 13 bytes"; + } + return "unknown error code"; +} +#endif /*LODEPNG_COMPILE_ERROR_TEXT*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // C++ Wrapper // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_CPP +namespace lodepng +{ + +#ifdef LODEPNG_COMPILE_DISK + unsigned load_file(std::vector& buffer, const std::string& filename) + { + long size = lodepng_filesize(filename.c_str()); + if (size < 0) return 78; + buffer.resize((size_t)size); + return size == 0 ? 0 : lodepng_buffer_file(&buffer[0], (size_t)size, filename.c_str()); + } + + /*write given buffer to the file, overwriting the file, it doesn't append to it.*/ + unsigned save_file(const std::vector& buffer, const std::string& filename) + { + return lodepng_save_file(buffer.empty() ? 0 : &buffer[0], buffer.size(), filename.c_str()); + } +#endif /* LODEPNG_COMPILE_DISK */ + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_DECODER + unsigned decompress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGDecompressSettings& settings) + { + unsigned char* buffer = 0; + size_t buffersize = 0; + unsigned error = zlib_decompress(&buffer, &buffersize, in, insize, &settings); + if (buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; + } + + unsigned decompress(std::vector& out, const std::vector& in, + const LodePNGDecompressSettings& settings) + { + return decompress(out, in.empty() ? 0 : &in[0], in.size(), settings); + } +#endif /* LODEPNG_COMPILE_DECODER */ + +#ifdef LODEPNG_COMPILE_ENCODER + unsigned compress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGCompressSettings& settings) + { + unsigned char* buffer = 0; + size_t buffersize = 0; + unsigned error = zlib_compress(&buffer, &buffersize, in, insize, &settings); + if (buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; + } + + unsigned compress(std::vector& out, const std::vector& in, + const LodePNGCompressSettings& settings) + { + return compress(out, in.empty() ? 0 : &in[0], in.size(), settings); + } +#endif /* LODEPNG_COMPILE_ENCODER */ +#endif /* LODEPNG_COMPILE_ZLIB */ + + +#ifdef LODEPNG_COMPILE_PNG + + State::State() + { + lodepng_state_init(this); + } + + State::State(const State& other) + { + lodepng_state_init(this); + lodepng_state_copy(this, &other); + } + + State::~State() + { + lodepng_state_cleanup(this); + } + + State& State::operator=(const State& other) + { + lodepng_state_copy(this, &other); + return *this; + } + +#ifdef LODEPNG_COMPILE_DECODER + + unsigned decode(std::vector& out, unsigned& w, unsigned& h, const unsigned char* in, + size_t insize, LodePNGColorType colortype, unsigned bitdepth) + { + unsigned char* buffer; + unsigned error = lodepng_decode_memory(&buffer, &w, &h, in, insize, colortype, bitdepth); + if (buffer && !error) + { + State state; + state.info_raw.colortype = colortype; + state.info_raw.bitdepth = bitdepth; + size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw); + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; + } + + unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const std::vector& in, LodePNGColorType colortype, unsigned bitdepth) + { + return decode(out, w, h, in.empty() ? 0 : &in[0], (unsigned)in.size(), colortype, bitdepth); + } + + unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const unsigned char* in, size_t insize) + { + unsigned char* buffer = NULL; + unsigned error = lodepng_decode(&buffer, &w, &h, &state, in, insize); + if (buffer && !error) + { + size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw); + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + } + lodepng_free(buffer); + return error; + } + + unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const std::vector& in) + { + return decode(out, w, h, state, in.empty() ? 0 : &in[0], in.size()); + } + +#ifdef LODEPNG_COMPILE_DISK + unsigned decode(std::vector& out, unsigned& w, unsigned& h, const std::string& filename, + LodePNGColorType colortype, unsigned bitdepth) + { + std::vector buffer; + unsigned error = load_file(buffer, filename); + if (error) return error; + return decode(out, w, h, buffer, colortype, bitdepth); + } +#endif /* LODEPNG_COMPILE_DECODER */ +#endif /* LODEPNG_COMPILE_DISK */ + +#ifdef LODEPNG_COMPILE_ENCODER + unsigned encode(std::vector& out, const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) + { + unsigned char* buffer; + size_t buffersize; + unsigned error = lodepng_encode_memory(&buffer, &buffersize, in, w, h, colortype, bitdepth); + if (buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; + } + + unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) + { + if (lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84; + return encode(out, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth); + } + + unsigned encode(std::vector& out, + const unsigned char* in, unsigned w, unsigned h, + State& state) + { + unsigned char* buffer; + size_t buffersize; + unsigned error = lodepng_encode(&buffer, &buffersize, in, w, h, &state); + if (buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; + } + + unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + State& state) + { + if (lodepng_get_raw_size(w, h, &state.info_raw) > in.size()) return 84; + return encode(out, in.empty() ? 0 : &in[0], w, h, state); + } + +#ifdef LODEPNG_COMPILE_DISK + unsigned encode(const std::string& filename, + const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) + { + std::vector buffer; + unsigned error = encode(buffer, in, w, h, colortype, bitdepth); + if (!error) error = save_file(buffer, filename); + return error; + } + + unsigned encode(const std::string& filename, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) + { + if (lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84; + return encode(filename, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth); + } +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_ENCODER */ +#endif /* LODEPNG_COMPILE_PNG */ +} /* namespace lodepng */ +#endif /*LODEPNG_COMPILE_CPP*/ diff --git a/external/bc7enc_rdo/lodepng.h b/external/bc7enc_rdo/lodepng.h new file mode 100644 index 0000000000..df0f1e78c2 --- /dev/null +++ b/external/bc7enc_rdo/lodepng.h @@ -0,0 +1,1761 @@ +/* +LodePNG version 20161127 + +Copyright (c) 2005-2016 Lode Vandevenne + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#ifndef LODEPNG_H +#define LODEPNG_H + +#include /*for size_t*/ + +extern const char* LODEPNG_VERSION_STRING; + +/* +The following #defines are used to create code sections. They can be disabled +to disable code sections, which can give faster compile time and smaller binary. +The "NO_COMPILE" defines are designed to be used to pass as defines to the +compiler command to disable them without modifying this header, e.g. +-DLODEPNG_NO_COMPILE_ZLIB for gcc. +In addition to those below, you can also define LODEPNG_NO_COMPILE_CRC to +allow implementing a custom lodepng_crc32. +*/ +/*deflate & zlib. If disabled, you must specify alternative zlib functions in +the custom_zlib field of the compress and decompress settings*/ +#ifndef LODEPNG_NO_COMPILE_ZLIB +#define LODEPNG_COMPILE_ZLIB +#endif +/*png encoder and png decoder*/ +#ifndef LODEPNG_NO_COMPILE_PNG +#define LODEPNG_COMPILE_PNG +#endif +/*deflate&zlib decoder and png decoder*/ +#ifndef LODEPNG_NO_COMPILE_DECODER +#define LODEPNG_COMPILE_DECODER +#endif +/*deflate&zlib encoder and png encoder*/ +#ifndef LODEPNG_NO_COMPILE_ENCODER +#define LODEPNG_COMPILE_ENCODER +#endif +/*the optional built in harddisk file loading and saving functions*/ +#ifndef LODEPNG_NO_COMPILE_DISK +#define LODEPNG_COMPILE_DISK +#endif +/*support for chunks other than IHDR, IDAT, PLTE, tRNS, IEND: ancillary and unknown chunks*/ +#ifndef LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS +#define LODEPNG_COMPILE_ANCILLARY_CHUNKS +#endif +/*ability to convert error numerical codes to English text string*/ +#ifndef LODEPNG_NO_COMPILE_ERROR_TEXT +#define LODEPNG_COMPILE_ERROR_TEXT +#endif +/*Compile the default allocators (C's free, malloc and realloc). If you disable this, +you can define the functions lodepng_free, lodepng_malloc and lodepng_realloc in your +source files with custom allocators.*/ +#ifndef LODEPNG_NO_COMPILE_ALLOCATORS +#define LODEPNG_COMPILE_ALLOCATORS +#endif +/*compile the C++ version (you can disable the C++ wrapper here even when compiling for C++)*/ +#ifdef __cplusplus +#ifndef LODEPNG_NO_COMPILE_CPP +#define LODEPNG_COMPILE_CPP +#endif +#endif + +#ifdef LODEPNG_COMPILE_CPP +#include +#include +#endif /*LODEPNG_COMPILE_CPP*/ + +#ifdef LODEPNG_COMPILE_PNG +/*The PNG color types (also used for raw).*/ +typedef enum LodePNGColorType +{ + LCT_GREY = 0, /*greyscale: 1,2,4,8,16 bit*/ + LCT_RGB = 2, /*RGB: 8,16 bit*/ + LCT_PALETTE = 3, /*palette: 1,2,4,8 bit*/ + LCT_GREY_ALPHA = 4, /*greyscale with alpha: 8,16 bit*/ + LCT_RGBA = 6 /*RGB with alpha: 8,16 bit*/ +} LodePNGColorType; + +#ifdef LODEPNG_COMPILE_DECODER +/* +Converts PNG data in memory to raw pixel data. +out: Output parameter. Pointer to buffer that will contain the raw pixel data. + After decoding, its size is w * h * (bytes per pixel) bytes larger than + initially. Bytes per pixel depends on colortype and bitdepth. + Must be freed after usage with free(*out). + Note: for 16-bit per channel colors, uses big endian format like PNG does. +w: Output parameter. Pointer to width of pixel data. +h: Output parameter. Pointer to height of pixel data. +in: Memory buffer with the PNG file. +insize: size of the in buffer. +colortype: the desired color type for the raw output image. See explanation on PNG color types. +bitdepth: the desired bit depth for the raw output image. See explanation on PNG color types. +Return value: LodePNG error code (0 means no error). +*/ +unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, + const unsigned char* in, size_t insize, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_decode_memory, but always decodes to 32-bit RGBA raw image*/ +unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, + const unsigned char* in, size_t insize); + +/*Same as lodepng_decode_memory, but always decodes to 24-bit RGB raw image*/ +unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, + const unsigned char* in, size_t insize); + +#ifdef LODEPNG_COMPILE_DISK +/* +Load PNG from disk, from file with given name. +Same as the other decode functions, but instead takes a filename as input. +*/ +unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, + const char* filename, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_decode_file, but always decodes to 32-bit RGBA raw image.*/ +unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, + const char* filename); + +/*Same as lodepng_decode_file, but always decodes to 24-bit RGB raw image.*/ +unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, + const char* filename); +#endif /*LODEPNG_COMPILE_DISK*/ +#endif /*LODEPNG_COMPILE_DECODER*/ + + +#ifdef LODEPNG_COMPILE_ENCODER +/* +Converts raw pixel data into a PNG image in memory. The colortype and bitdepth + of the output PNG image cannot be chosen, they are automatically determined + by the colortype, bitdepth and content of the input pixel data. + Note: for 16-bit per channel colors, needs big endian format like PNG does. +out: Output parameter. Pointer to buffer that will contain the PNG image data. + Must be freed after usage with free(*out). +outsize: Output parameter. Pointer to the size in bytes of the out buffer. +image: The raw pixel data to encode. The size of this buffer should be + w * h * (bytes per pixel), bytes per pixel depends on colortype and bitdepth. +w: width of the raw pixel data in pixels. +h: height of the raw pixel data in pixels. +colortype: the color type of the raw input image. See explanation on PNG color types. +bitdepth: the bit depth of the raw input image. See explanation on PNG color types. +Return value: LodePNG error code (0 means no error). +*/ +unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_encode_memory, but always encodes from 32-bit RGBA raw image.*/ +unsigned lodepng_encode32(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h); + +/*Same as lodepng_encode_memory, but always encodes from 24-bit RGB raw image.*/ +unsigned lodepng_encode24(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h); + +#ifdef LODEPNG_COMPILE_DISK +/* +Converts raw pixel data into a PNG file on disk. +Same as the other encode functions, but instead takes a filename as output. +NOTE: This overwrites existing files without warning! +*/ +unsigned lodepng_encode_file(const char* filename, + const unsigned char* image, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_encode_file, but always encodes from 32-bit RGBA raw image.*/ +unsigned lodepng_encode32_file(const char* filename, + const unsigned char* image, unsigned w, unsigned h); + +/*Same as lodepng_encode_file, but always encodes from 24-bit RGB raw image.*/ +unsigned lodepng_encode24_file(const char* filename, + const unsigned char* image, unsigned w, unsigned h); +#endif /*LODEPNG_COMPILE_DISK*/ +#endif /*LODEPNG_COMPILE_ENCODER*/ + + +#ifdef LODEPNG_COMPILE_CPP +namespace lodepng +{ +#ifdef LODEPNG_COMPILE_DECODER + /*Same as lodepng_decode_memory, but decodes to an std::vector. The colortype + is the format to output the pixels to. Default is RGBA 8-bit per channel.*/ + unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const unsigned char* in, size_t insize, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); + unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const std::vector& in, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#ifdef LODEPNG_COMPILE_DISK + /* + Converts PNG file from disk to raw pixel data in memory. + Same as the other decode functions, but instead takes a filename as input. + */ + unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const std::string& filename, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_DECODER */ + +#ifdef LODEPNG_COMPILE_ENCODER + /*Same as lodepng_encode_memory, but encodes to an std::vector. colortype + is that of the raw input data. The output PNG color type will be auto chosen.*/ + unsigned encode(std::vector& out, + const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); + unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#ifdef LODEPNG_COMPILE_DISK + /* + Converts 32-bit RGBA raw pixel data into a PNG file on disk. + Same as the other encode functions, but instead takes a filename as output. + NOTE: This overwrites existing files without warning! + */ + unsigned encode(const std::string& filename, + const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); + unsigned encode(const std::string& filename, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_ENCODER */ +} /* namespace lodepng */ +#endif /*LODEPNG_COMPILE_CPP*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ERROR_TEXT +/*Returns an English description of the numerical error code.*/ +const char* lodepng_error_text(unsigned code); +#endif /*LODEPNG_COMPILE_ERROR_TEXT*/ + +#ifdef LODEPNG_COMPILE_DECODER +/*Settings for zlib decompression*/ +typedef struct LodePNGDecompressSettings LodePNGDecompressSettings; +struct LodePNGDecompressSettings +{ + unsigned ignore_adler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/ + + /*use custom zlib decoder instead of built in one (default: null)*/ + unsigned(*custom_zlib)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGDecompressSettings*); + /*use custom deflate decoder instead of built in one (default: null) + if custom_zlib is used, custom_deflate is ignored since only the built in + zlib function will call custom_deflate*/ + unsigned(*custom_inflate)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGDecompressSettings*); + + const void* custom_context; /*optional custom settings for custom functions*/ +}; + +extern const LodePNGDecompressSettings lodepng_default_decompress_settings; +void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/* +Settings for zlib compression. Tweaking these settings tweaks the balance +between speed and compression ratio. +*/ +typedef struct LodePNGCompressSettings LodePNGCompressSettings; +struct LodePNGCompressSettings /*deflate = compress*/ +{ + /*LZ77 related settings*/ + unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/ + unsigned use_lz77; /*whether or not to use LZ77. Should be 1 for proper compression.*/ + unsigned windowsize; /*must be a power of two <= 32768. higher compresses more but is slower. Default value: 2048.*/ + unsigned minmatch; /*mininum lz77 length. 3 is normally best, 6 can be better for some PNGs. Default: 0*/ + unsigned nicematch; /*stop searching if >= this length found. Set to 258 for best compression. Default: 128*/ + unsigned lazymatching; /*use lazy matching: better compression but a bit slower. Default: true*/ + + /*use custom zlib encoder instead of built in one (default: null)*/ + unsigned(*custom_zlib)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGCompressSettings*); + /*use custom deflate encoder instead of built in one (default: null) + if custom_zlib is used, custom_deflate is ignored since only the built in + zlib function will call custom_deflate*/ + unsigned(*custom_deflate)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGCompressSettings*); + + const void* custom_context; /*optional custom settings for custom functions*/ +}; + +extern const LodePNGCompressSettings lodepng_default_compress_settings; +void lodepng_compress_settings_init(LodePNGCompressSettings* settings); +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_PNG +/* +Color mode of an image. Contains all information required to decode the pixel +bits to RGBA colors. This information is the same as used in the PNG file +format, and is used both for PNG and raw image data in LodePNG. +*/ +typedef struct LodePNGColorMode +{ + /*header (IHDR)*/ + LodePNGColorType colortype; /*color type, see PNG standard or documentation further in this header file*/ + unsigned bitdepth; /*bits per sample, see PNG standard or documentation further in this header file*/ + + /* + palette (PLTE and tRNS) + + Dynamically allocated with the colors of the palette, including alpha. + When encoding a PNG, to store your colors in the palette of the LodePNGColorMode, first use + lodepng_palette_clear, then for each color use lodepng_palette_add. + If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette. + + When decoding, by default you can ignore this palette, since LodePNG already + fills the palette colors in the pixels of the raw RGBA output. + + The palette is only supported for color type 3. + */ + unsigned char* palette; /*palette in RGBARGBA... order. When allocated, must be either 0, or have size 1024*/ + size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/ + + /* + transparent color key (tRNS) + + This color uses the same bit depth as the bitdepth value in this struct, which can be 1-bit to 16-bit. + For greyscale PNGs, r, g and b will all 3 be set to the same. + + When decoding, by default you can ignore this information, since LodePNG sets + pixels with this key to transparent already in the raw RGBA output. + + The color key is only supported for color types 0 and 2. + */ + unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/ + unsigned key_r; /*red/greyscale component of color key*/ + unsigned key_g; /*green component of color key*/ + unsigned key_b; /*blue component of color key*/ +} LodePNGColorMode; + +/*init, cleanup and copy functions to use with this struct*/ +void lodepng_color_mode_init(LodePNGColorMode* info); +void lodepng_color_mode_cleanup(LodePNGColorMode* info); +/*return value is error code (0 means no error)*/ +unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source); + +void lodepng_palette_clear(LodePNGColorMode* info); +/*add 1 color to the palette*/ +unsigned lodepng_palette_add(LodePNGColorMode* info, + unsigned char r, unsigned char g, unsigned char b, unsigned char a); + +/*get the total amount of bits per pixel, based on colortype and bitdepth in the struct*/ +unsigned lodepng_get_bpp(const LodePNGColorMode* info); +/*get the amount of color channels used, based on colortype in the struct. +If a palette is used, it counts as 1 channel.*/ +unsigned lodepng_get_channels(const LodePNGColorMode* info); +/*is it a greyscale type? (only colortype 0 or 4)*/ +unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info); +/*has it got an alpha channel? (only colortype 2 or 6)*/ +unsigned lodepng_is_alpha_type(const LodePNGColorMode* info); +/*has it got a palette? (only colortype 3)*/ +unsigned lodepng_is_palette_type(const LodePNGColorMode* info); +/*only returns true if there is a palette and there is a value in the palette with alpha < 255. +Loops through the palette to check this.*/ +unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info); +/* +Check if the given color info indicates the possibility of having non-opaque pixels in the PNG image. +Returns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels). +Returns false if the image can only have opaque pixels. +In detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values, +or if "key_defined" is true. +*/ +unsigned lodepng_can_have_alpha(const LodePNGColorMode* info); +/*Returns the byte size of a raw image buffer with given width, height and color mode*/ +size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color); + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +/*The information of a Time chunk in PNG.*/ +typedef struct LodePNGTime +{ + unsigned year; /*2 bytes used (0-65535)*/ + unsigned month; /*1-12*/ + unsigned day; /*1-31*/ + unsigned hour; /*0-23*/ + unsigned minute; /*0-59*/ + unsigned second; /*0-60 (to allow for leap seconds)*/ +} LodePNGTime; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +/*Information about the PNG image, except pixels, width and height.*/ +typedef struct LodePNGInfo +{ + /*header (IHDR), palette (PLTE) and transparency (tRNS) chunks*/ + unsigned compression_method;/*compression method of the original file. Always 0.*/ + unsigned filter_method; /*filter method of the original file*/ + unsigned interlace_method; /*interlace method of the original file*/ + LodePNGColorMode color; /*color type and bits, palette and transparency of the PNG file*/ + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /* + suggested background color chunk (bKGD) + This color uses the same color mode as the PNG (except alpha channel), which can be 1-bit to 16-bit. + + For greyscale PNGs, r, g and b will all 3 be set to the same. When encoding + the encoder writes the red one. For palette PNGs: When decoding, the RGB value + will be stored, not a palette index. But when encoding, specify the index of + the palette in background_r, the other two are then ignored. + + The decoder does not use this background color to edit the color of pixels. + */ + unsigned background_defined; /*is a suggested background color given?*/ + unsigned background_r; /*red component of suggested background color*/ + unsigned background_g; /*green component of suggested background color*/ + unsigned background_b; /*blue component of suggested background color*/ + + /* + non-international text chunks (tEXt and zTXt) + + The char** arrays each contain num strings. The actual messages are in + text_strings, while text_keys are keywords that give a short description what + the actual text represents, e.g. Title, Author, Description, or anything else. + + A keyword is minimum 1 character and maximum 79 characters long. It's + discouraged to use a single line length longer than 79 characters for texts. + + Don't allocate these text buffers yourself. Use the init/cleanup functions + correctly and use lodepng_add_text and lodepng_clear_text. + */ + size_t text_num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/ + char** text_keys; /*the keyword of a text chunk (e.g. "Comment")*/ + char** text_strings; /*the actual text*/ + + /* + international text chunks (iTXt) + Similar to the non-international text chunks, but with additional strings + "langtags" and "transkeys". + */ + size_t itext_num; /*the amount of international texts in this PNG*/ + char** itext_keys; /*the English keyword of the text chunk (e.g. "Comment")*/ + char** itext_langtags; /*language tag for this text's language, ISO/IEC 646 string, e.g. ISO 639 language tag*/ + char** itext_transkeys; /*keyword translated to the international language - UTF-8 string*/ + char** itext_strings; /*the actual international text - UTF-8 string*/ + + /*time chunk (tIME)*/ + unsigned time_defined; /*set to 1 to make the encoder generate a tIME chunk*/ + LodePNGTime time; + + /*phys chunk (pHYs)*/ + unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/ + unsigned phys_x; /*pixels per unit in x direction*/ + unsigned phys_y; /*pixels per unit in y direction*/ + unsigned phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/ + + /* + unknown chunks + There are 3 buffers, one for each position in the PNG where unknown chunks can appear + each buffer contains all unknown chunks for that position consecutively + The 3 buffers are the unknown chunks between certain critical chunks: + 0: IHDR-PLTE, 1: PLTE-IDAT, 2: IDAT-IEND + Do not allocate or traverse this data yourself. Use the chunk traversing functions declared + later, such as lodepng_chunk_next and lodepng_chunk_append, to read/write this struct. + */ + unsigned char* unknown_chunks_data[3]; + size_t unknown_chunks_size[3]; /*size in bytes of the unknown chunks, given for protection*/ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} LodePNGInfo; + +/*init, cleanup and copy functions to use with this struct*/ +void lodepng_info_init(LodePNGInfo* info); +void lodepng_info_cleanup(LodePNGInfo* info); +/*return value is error code (0 means no error)*/ +unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source); + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +void lodepng_clear_text(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/ +unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str); /*push back both texts at once*/ + +void lodepng_clear_itext(LodePNGInfo* info); /*use this to clear the itexts again after you filled them in*/ +unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag, + const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +/* +Converts raw buffer from one color type to another color type, based on +LodePNGColorMode structs to describe the input and output color type. +See the reference manual at the end of this header file to see which color conversions are supported. +return value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported) +The out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel +of the output color type (lodepng_get_bpp). +For < 8 bpp images, there should not be padding bits at the end of scanlines. +For 16-bit per channel colors, uses big endian format like PNG does. +Return value is LodePNG error code +*/ +unsigned lodepng_convert(unsigned char* out, const unsigned char* in, + const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in, + unsigned w, unsigned h); + +#ifdef LODEPNG_COMPILE_DECODER +/* +Settings for the decoder. This contains settings for the PNG and the Zlib +decoder, but not the Info settings from the Info structs. +*/ +typedef struct LodePNGDecoderSettings +{ + LodePNGDecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/ + + unsigned ignore_crc; /*ignore CRC checksums*/ + + unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/ + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + unsigned read_text_chunks; /*if false but remember_unknown_chunks is true, they're stored in the unknown chunks*/ + /*store all bytes from unknown chunks in the LodePNGInfo (off by default, useful for a png editor)*/ + unsigned remember_unknown_chunks; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} LodePNGDecoderSettings; + +void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/*automatically use color type with less bits per pixel if losslessly possible. Default: AUTO*/ +typedef enum LodePNGFilterStrategy +{ + /*every filter at zero*/ + LFS_ZERO, + /*Use filter that gives minimum sum, as described in the official PNG filter heuristic.*/ + LFS_MINSUM, + /*Use the filter type that gives smallest Shannon entropy for this scanline. Depending + on the image, this is better or worse than minsum.*/ + LFS_ENTROPY, + /* + Brute-force-search PNG filters by compressing each filter for each scanline. + Experimental, very slow, and only rarely gives better compression than MINSUM. + */ + LFS_BRUTE_FORCE, + /*use predefined_filters buffer: you specify the filter type for each scanline*/ + LFS_PREDEFINED +} LodePNGFilterStrategy; + +/*Gives characteristics about the colors of the image, which helps decide which color model to use for encoding. +Used internally by default if "auto_convert" is enabled. Public because it's useful for custom algorithms.*/ +typedef struct LodePNGColorProfile +{ + unsigned colored; /*not greyscale*/ + unsigned key; /*image is not opaque and color key is possible instead of full alpha*/ + unsigned short key_r; /*key values, always as 16-bit, in 8-bit case the byte is duplicated, e.g. 65535 means 255*/ + unsigned short key_g; + unsigned short key_b; + unsigned alpha; /*image is not opaque and alpha channel or alpha palette required*/ + unsigned numcolors; /*amount of colors, up to 257. Not valid if bits == 16.*/ + unsigned char palette[1024]; /*Remembers up to the first 256 RGBA colors, in no particular order*/ + unsigned bits; /*bits per channel (not for palette). 1,2 or 4 for greyscale only. 16 if 16-bit per channel required.*/ +} LodePNGColorProfile; + +void lodepng_color_profile_init(LodePNGColorProfile* profile); + +/*Get a LodePNGColorProfile of the image.*/ +unsigned lodepng_get_color_profile(LodePNGColorProfile* profile, + const unsigned char* image, unsigned w, unsigned h, + const LodePNGColorMode* mode_in); +/*The function LodePNG uses internally to decide the PNG color with auto_convert. +Chooses an optimal color model, e.g. grey if only grey pixels, palette if < 256 colors, ...*/ +unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out, + const unsigned char* image, unsigned w, unsigned h, + const LodePNGColorMode* mode_in); + +/*Settings for the encoder.*/ +typedef struct LodePNGEncoderSettings +{ + LodePNGCompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/ + + unsigned auto_convert; /*automatically choose output PNG color type. Default: true*/ + + /*If true, follows the official PNG heuristic: if the PNG uses a palette or lower than + 8 bit depth, set all filters to zero. Otherwise use the filter_strategy. Note that to + completely follow the official PNG heuristic, filter_palette_zero must be true and + filter_strategy must be LFS_MINSUM*/ + unsigned filter_palette_zero; + /*Which filter strategy to use when not using zeroes due to filter_palette_zero. + Set filter_palette_zero to 0 to ensure always using your chosen strategy. Default: LFS_MINSUM*/ + LodePNGFilterStrategy filter_strategy; + /*used if filter_strategy is LFS_PREDEFINED. In that case, this must point to a buffer with + the same length as the amount of scanlines in the image, and each value must <= 5. You + have to cleanup this buffer, LodePNG will never free it. Don't forget that filter_palette_zero + must be set to 0 to ensure this is also used on palette or low bitdepth images.*/ + const unsigned char* predefined_filters; + + /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette). + If colortype is 3, PLTE is _always_ created.*/ + unsigned force_palette; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*add LodePNG identifier and version as a text chunk, for debugging*/ + unsigned add_id; + /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/ + unsigned text_compression; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} LodePNGEncoderSettings; + +void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings); +#endif /*LODEPNG_COMPILE_ENCODER*/ + + +#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) +/*The settings, state and information for extended encoding and decoding.*/ +typedef struct LodePNGState +{ +#ifdef LODEPNG_COMPILE_DECODER + LodePNGDecoderSettings decoder; /*the decoding settings*/ +#endif /*LODEPNG_COMPILE_DECODER*/ +#ifdef LODEPNG_COMPILE_ENCODER + LodePNGEncoderSettings encoder; /*the encoding settings*/ +#endif /*LODEPNG_COMPILE_ENCODER*/ + LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/ + LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/ + unsigned error; +#ifdef LODEPNG_COMPILE_CPP + /* For the lodepng::State subclass. */ + virtual ~LodePNGState() {} +#endif +} LodePNGState; + +/*init, cleanup and copy functions to use with this struct*/ +void lodepng_state_init(LodePNGState* state); +void lodepng_state_cleanup(LodePNGState* state); +void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source); +#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */ + +#ifdef LODEPNG_COMPILE_DECODER +/* +Same as lodepng_decode_memory, but uses a LodePNGState to allow custom settings and +getting much more information about the PNG image and color mode. +*/ +unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize); + +/* +Read the PNG header, but not the actual data. This returns only the information +that is in the header chunk of the PNG, such as width, height and color type. The +information is placed in the info_png field of the LodePNGState. +*/ +unsigned lodepng_inspect(unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize); +#endif /*LODEPNG_COMPILE_DECODER*/ + + +#ifdef LODEPNG_COMPILE_ENCODER +/*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/ +unsigned lodepng_encode(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h, + LodePNGState* state); +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/* +The lodepng_chunk functions are normally not needed, except to traverse the +unknown chunks stored in the LodePNGInfo struct, or add new ones to it. +It also allows traversing the chunks of an encoded PNG file yourself. + +PNG standard chunk naming conventions: +First byte: uppercase = critical, lowercase = ancillary +Second byte: uppercase = public, lowercase = private +Third byte: must be uppercase +Fourth byte: uppercase = unsafe to copy, lowercase = safe to copy +*/ + +/* +Gets the length of the data of the chunk. Total chunk length has 12 bytes more. +There must be at least 4 bytes to read from. If the result value is too large, +it may be corrupt data. +*/ +unsigned lodepng_chunk_length(const unsigned char* chunk); + +/*puts the 4-byte type in null terminated string*/ +void lodepng_chunk_type(char type[5], const unsigned char* chunk); + +/*check if the type is the given type*/ +unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type); + +/*0: it's one of the critical chunk types, 1: it's an ancillary chunk (see PNG standard)*/ +unsigned char lodepng_chunk_ancillary(const unsigned char* chunk); + +/*0: public, 1: private (see PNG standard)*/ +unsigned char lodepng_chunk_private(const unsigned char* chunk); + +/*0: the chunk is unsafe to copy, 1: the chunk is safe to copy (see PNG standard)*/ +unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk); + +/*get pointer to the data of the chunk, where the input points to the header of the chunk*/ +unsigned char* lodepng_chunk_data(unsigned char* chunk); +const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk); + +/*returns 0 if the crc is correct, 1 if it's incorrect (0 for OK as usual!)*/ +unsigned lodepng_chunk_check_crc(const unsigned char* chunk); + +/*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/ +void lodepng_chunk_generate_crc(unsigned char* chunk); + +/*iterate to next chunks. don't use on IEND chunk, as there is no next chunk then*/ +unsigned char* lodepng_chunk_next(unsigned char* chunk); +const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk); + +/* +Appends chunk to the data in out. The given chunk should already have its chunk header. +The out variable and outlength are updated to reflect the new reallocated buffer. +Returns error code (0 if it went ok) +*/ +unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk); + +/* +Appends new chunk to out. The chunk to append is given by giving its length, type +and data separately. The type is a 4-letter string. +The out variable and outlength are updated to reflect the new reallocated buffer. +Returne error code (0 if it went ok) +*/ +unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, + const char* type, const unsigned char* data); + + +/*Calculate CRC32 of buffer*/ +unsigned lodepng_crc32(const unsigned char* buf, size_t len); +#endif /*LODEPNG_COMPILE_PNG*/ + + +#ifdef LODEPNG_COMPILE_ZLIB +/* +This zlib part can be used independently to zlib compress and decompress a +buffer. It cannot be used to create gzip files however, and it only supports the +part of zlib that is required for PNG, it does not support dictionaries. +*/ + +#ifdef LODEPNG_COMPILE_DECODER +/*Inflate a buffer. Inflate is the decompression step of deflate. Out buffer must be freed after use.*/ +unsigned lodepng_inflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings); + +/* +Decompresses Zlib data. Reallocates the out buffer and appends the data. The +data must be according to the zlib specification. +Either, *out must be NULL and *outsize must be 0, or, *out must be a valid +buffer and *outsize its size in bytes. out must be freed by user after usage. +*/ +unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/* +Compresses data with Zlib. Reallocates the out buffer and appends the data. +Zlib adds a small header and trailer around the deflate data. +The data is output in the format of the zlib specification. +Either, *out must be NULL and *outsize must be 0, or, *out must be a valid +buffer and *outsize its size in bytes. out must be freed by user after usage. +*/ +unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings); + +/* +Find length-limited Huffman code for given frequencies. This function is in the +public interface only for tests, it's used internally by lodepng_deflate. +*/ +unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies, + size_t numcodes, unsigned maxbitlen); + +/*Compress a buffer with deflate. See RFC 1951. Out buffer must be freed after use.*/ +unsigned lodepng_deflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings); + +#endif /*LODEPNG_COMPILE_ENCODER*/ +#endif /*LODEPNG_COMPILE_ZLIB*/ + +#ifdef LODEPNG_COMPILE_DISK +/* +Load a file from disk into buffer. The function allocates the out buffer, and +after usage you should free it. +out: output parameter, contains pointer to loaded buffer. +outsize: output parameter, size of the allocated out buffer +filename: the path to the file to load +return value: error code (0 means ok) +*/ +unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename); + +/* +Save a file from buffer to disk. Warning, if it exists, this function overwrites +the file without warning! +buffer: the buffer to write +buffersize: size of the buffer to write +filename: the path to the file to save to +return value: error code (0 means ok) +*/ +unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename); +#endif /*LODEPNG_COMPILE_DISK*/ + +#ifdef LODEPNG_COMPILE_CPP +/* The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. */ +namespace lodepng +{ +#ifdef LODEPNG_COMPILE_PNG + class State : public LodePNGState + { + public: + State(); + State(const State& other); + virtual ~State(); + State& operator=(const State& other); + }; + +#ifdef LODEPNG_COMPILE_DECODER + /* Same as other lodepng::decode, but using a State for more settings and information. */ + unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const unsigned char* in, size_t insize); + unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const std::vector& in); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER + /* Same as other lodepng::encode, but using a State for more settings and information. */ + unsigned encode(std::vector& out, + const unsigned char* in, unsigned w, unsigned h, + State& state); + unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + State& state); +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_DISK + /* + Load a file from disk into an std::vector. + return value: error code (0 means ok) + */ + unsigned load_file(std::vector& buffer, const std::string& filename); + + /* + Save the binary data in an std::vector to a file on disk. The file is overwritten + without warning. + */ + unsigned save_file(const std::vector& buffer, const std::string& filename); +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_PNG */ + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_DECODER + /* Zlib-decompress an unsigned char buffer */ + unsigned decompress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings); + + /* Zlib-decompress an std::vector */ + unsigned decompress(std::vector& out, const std::vector& in, + const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings); +#endif /* LODEPNG_COMPILE_DECODER */ + +#ifdef LODEPNG_COMPILE_ENCODER + /* Zlib-compress an unsigned char buffer */ + unsigned compress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGCompressSettings& settings = lodepng_default_compress_settings); + + /* Zlib-compress an std::vector */ + unsigned compress(std::vector& out, const std::vector& in, + const LodePNGCompressSettings& settings = lodepng_default_compress_settings); +#endif /* LODEPNG_COMPILE_ENCODER */ +#endif /* LODEPNG_COMPILE_ZLIB */ +} /* namespace lodepng */ +#endif /*LODEPNG_COMPILE_CPP*/ + +/* +TODO: +[.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often +[.] check compatibility with various compilers - done but needs to be redone for every newer version +[X] converting color to 16-bit per channel types +[ ] read all public PNG chunk types (but never let the color profile and gamma ones touch RGB values) +[ ] make sure encoder generates no chunks with size > (2^31)-1 +[ ] partial decoding (stream processing) +[X] let the "isFullyOpaque" function check color keys and transparent palettes too +[X] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl" +[ ] don't stop decoding on errors like 69, 57, 58 (make warnings) +[ ] make warnings like: oob palette, checksum fail, data after iend, wrong/unknown crit chunk, no null terminator in text, ... +[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes +[ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ... +[ ] allow user to give data (void*) to custom allocator +*/ + +#endif /*LODEPNG_H inclusion guard*/ + +/* +LodePNG Documentation +--------------------- + +0. table of contents +-------------------- + + 1. about + 1.1. supported features + 1.2. features not supported + 2. C and C++ version + 3. security + 4. decoding + 5. encoding + 6. color conversions + 6.1. PNG color types + 6.2. color conversions + 6.3. padding bits + 6.4. A note about 16-bits per channel and endianness + 7. error values + 8. chunks and PNG editing + 9. compiler support + 10. examples + 10.1. decoder C++ example + 10.2. decoder C example + 11. state settings reference + 12. changes + 13. contact information + + +1. about +-------- + +PNG is a file format to store raster images losslessly with good compression, +supporting different color types and alpha channel. + +LodePNG is a PNG codec according to the Portable Network Graphics (PNG) +Specification (Second Edition) - W3C Recommendation 10 November 2003. + +The specifications used are: + +*) Portable Network Graphics (PNG) Specification (Second Edition): + http://www.w3.org/TR/2003/REC-PNG-20031110 +*) RFC 1950 ZLIB Compressed Data Format version 3.3: + http://www.gzip.org/zlib/rfc-zlib.html +*) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3: + http://www.gzip.org/zlib/rfc-deflate.html + +The most recent version of LodePNG can currently be found at +http://lodev.org/lodepng/ + +LodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds +extra functionality. + +LodePNG exists out of two files: +-lodepng.h: the header file for both C and C++ +-lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage + +If you want to start using LodePNG right away without reading this doc, get the +examples from the LodePNG website to see how to use it in code, or check the +smaller examples in chapter 13 here. + +LodePNG is simple but only supports the basic requirements. To achieve +simplicity, the following design choices were made: There are no dependencies +on any external library. There are functions to decode and encode a PNG with +a single function call, and extended versions of these functions taking a +LodePNGState struct allowing to specify or get more information. By default +the colors of the raw image are always RGB or RGBA, no matter what color type +the PNG file uses. To read and write files, there are simple functions to +convert the files to/from buffers in memory. + +This all makes LodePNG suitable for loading textures in games, demos and small +programs, ... It's less suitable for full fledged image editors, loading PNGs +over network (it requires all the image data to be available before decoding can +begin), life-critical systems, ... + +1.1. supported features +----------------------- + +The following features are supported by the decoder: + +*) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image, + or the same color type as the PNG +*) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image +*) Adam7 interlace and deinterlace for any color type +*) loading the image from harddisk or decoding it from a buffer from other sources than harddisk +*) support for alpha channels, including RGBA color model, translucent palettes and color keying +*) zlib decompression (inflate) +*) zlib compression (deflate) +*) CRC32 and ADLER32 checksums +*) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks. +*) the following chunks are supported (generated/interpreted) by both encoder and decoder: + IHDR: header information + PLTE: color palette + IDAT: pixel data + IEND: the final chunk + tRNS: transparency for palettized images + tEXt: textual information + zTXt: compressed textual information + iTXt: international textual information + bKGD: suggested background color + pHYs: physical dimensions + tIME: modification time + +1.2. features not supported +--------------------------- + +The following features are _not_ supported: + +*) some features needed to make a conformant PNG-Editor might be still missing. +*) partial loading/stream processing. All data must be available and is processed in one call. +*) The following public chunks are not supported but treated as unknown chunks by LodePNG + cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT + Some of these are not supported on purpose: LodePNG wants to provide the RGB values + stored in the pixels, not values modified by system dependent gamma or color models. + + +2. C and C++ version +-------------------- + +The C version uses buffers allocated with alloc that you need to free() +yourself. You need to use init and cleanup functions for each struct whenever +using a struct from the C version to avoid exploits and memory leaks. + +The C++ version has extra functions with std::vectors in the interface and the +lodepng::State class which is a LodePNGState with constructor and destructor. + +These files work without modification for both C and C++ compilers because all +the additional C++ code is in "#ifdef __cplusplus" blocks that make C-compilers +ignore it, and the C code is made to compile both with strict ISO C90 and C++. + +To use the C++ version, you need to rename the source file to lodepng.cpp +(instead of lodepng.c), and compile it with a C++ compiler. + +To use the C version, you need to rename the source file to lodepng.c (instead +of lodepng.cpp), and compile it with a C compiler. + + +3. Security +----------- + +Even if carefully designed, it's always possible that LodePNG contains possible +exploits. If you discover one, please let me know, and it will be fixed. + +When using LodePNG, care has to be taken with the C version of LodePNG, as well +as the C-style structs when working with C++. The following conventions are used +for all C-style structs: + +-if a struct has a corresponding init function, always call the init function when making a new one +-if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks +-if a struct has a corresponding copy function, use the copy function instead of "=". + The destination must also be inited already. + + +4. Decoding +----------- + +Decoding converts a PNG compressed image to a raw pixel buffer. + +Most documentation on using the decoder is at its declarations in the header +above. For C, simple decoding can be done with functions such as +lodepng_decode32, and more advanced decoding can be done with the struct +LodePNGState and lodepng_decode. For C++, all decoding can be done with the +various lodepng::decode functions, and lodepng::State can be used for advanced +features. + +When using the LodePNGState, it uses the following fields for decoding: +*) LodePNGInfo info_png: it stores extra information about the PNG (the input) in here +*) LodePNGColorMode info_raw: here you can say what color mode of the raw image (the output) you want to get +*) LodePNGDecoderSettings decoder: you can specify a few extra settings for the decoder to use + +LodePNGInfo info_png +-------------------- + +After decoding, this contains extra information of the PNG image, except the actual +pixels, width and height because these are already gotten directly from the decoder +functions. + +It contains for example the original color type of the PNG image, text comments, +suggested background color, etc... More details about the LodePNGInfo struct are +at its declaration documentation. + +LodePNGColorMode info_raw +------------------------- + +When decoding, here you can specify which color type you want +the resulting raw image to be. If this is different from the colortype of the +PNG, then the decoder will automatically convert the result. This conversion +always works, except if you want it to convert a color PNG to greyscale or to +a palette with missing colors. + +By default, 32-bit color is used for the result. + +LodePNGDecoderSettings decoder +------------------------------ + +The settings can be used to ignore the errors created by invalid CRC and Adler32 +chunks, and to disable the decoding of tEXt chunks. + +There's also a setting color_convert, true by default. If false, no conversion +is done, the resulting data will be as it was in the PNG (after decompression) +and you'll have to puzzle the colors of the pixels together yourself using the +color type information in the LodePNGInfo. + + +5. Encoding +----------- + +Encoding converts a raw pixel buffer to a PNG compressed image. + +Most documentation on using the encoder is at its declarations in the header +above. For C, simple encoding can be done with functions such as +lodepng_encode32, and more advanced decoding can be done with the struct +LodePNGState and lodepng_encode. For C++, all encoding can be done with the +various lodepng::encode functions, and lodepng::State can be used for advanced +features. + +Like the decoder, the encoder can also give errors. However it gives less errors +since the encoder input is trusted, the decoder input (a PNG image that could +be forged by anyone) is not trusted. + +When using the LodePNGState, it uses the following fields for encoding: +*) LodePNGInfo info_png: here you specify how you want the PNG (the output) to be. +*) LodePNGColorMode info_raw: here you say what color type of the raw image (the input) has +*) LodePNGEncoderSettings encoder: you can specify a few settings for the encoder to use + +LodePNGInfo info_png +-------------------- + +When encoding, you use this the opposite way as when decoding: for encoding, +you fill in the values you want the PNG to have before encoding. By default it's +not needed to specify a color type for the PNG since it's automatically chosen, +but it's possible to choose it yourself given the right settings. + +The encoder will not always exactly match the LodePNGInfo struct you give, +it tries as close as possible. Some things are ignored by the encoder. The +encoder uses, for example, the following settings from it when applicable: +colortype and bitdepth, text chunks, time chunk, the color key, the palette, the +background color, the interlace method, unknown chunks, ... + +When encoding to a PNG with colortype 3, the encoder will generate a PLTE chunk. +If the palette contains any colors for which the alpha channel is not 255 (so +there are translucent colors in the palette), it'll add a tRNS chunk. + +LodePNGColorMode info_raw +------------------------- + +You specify the color type of the raw image that you give to the input here, +including a possible transparent color key and palette you happen to be using in +your raw image data. + +By default, 32-bit color is assumed, meaning your input has to be in RGBA +format with 4 bytes (unsigned chars) per pixel. + +LodePNGEncoderSettings encoder +------------------------------ + +The following settings are supported (some are in sub-structs): +*) auto_convert: when this option is enabled, the encoder will +automatically choose the smallest possible color mode (including color key) that +can encode the colors of all pixels without information loss. +*) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree, + 2 = dynamic huffman tree (best compression). Should be 2 for proper + compression. +*) use_lz77: whether or not to use LZ77 for compressed block types. Should be + true for proper compression. +*) windowsize: the window size used by the LZ77 encoder (1 - 32768). Has value + 2048 by default, but can be set to 32768 for better, but slow, compression. +*) force_palette: if colortype is 2 or 6, you can make the encoder write a PLTE + chunk if force_palette is true. This can used as suggested palette to convert + to by viewers that don't support more than 256 colors (if those still exist) +*) add_id: add text chunk "Encoder: LodePNG " to the image. +*) text_compression: default 1. If 1, it'll store texts as zTXt instead of tEXt chunks. + zTXt chunks use zlib compression on the text. This gives a smaller result on + large texts but a larger result on small texts (such as a single program name). + It's all tEXt or all zTXt though, there's no separate setting per text yet. + + +6. color conversions +-------------------- + +An important thing to note about LodePNG, is that the color type of the PNG, and +the color type of the raw image, are completely independent. By default, when +you decode a PNG, you get the result as a raw image in the color type you want, +no matter whether the PNG was encoded with a palette, greyscale or RGBA color. +And if you encode an image, by default LodePNG will automatically choose the PNG +color type that gives good compression based on the values of colors and amount +of colors in the image. It can be configured to let you control it instead as +well, though. + +To be able to do this, LodePNG does conversions from one color mode to another. +It can convert from almost any color type to any other color type, except the +following conversions: RGB to greyscale is not supported, and converting to a +palette when the palette doesn't have a required color is not supported. This is +not supported on purpose: this is information loss which requires a color +reduction algorithm that is beyong the scope of a PNG encoder (yes, RGB to grey +is easy, but there are multiple ways if you want to give some channels more +weight). + +By default, when decoding, you get the raw image in 32-bit RGBA or 24-bit RGB +color, no matter what color type the PNG has. And by default when encoding, +LodePNG automatically picks the best color model for the output PNG, and expects +the input image to be 32-bit RGBA or 24-bit RGB. So, unless you want to control +the color format of the images yourself, you can skip this chapter. + +6.1. PNG color types +-------------------- + +A PNG image can have many color types, ranging from 1-bit color to 64-bit color, +as well as palettized color modes. After the zlib decompression and unfiltering +in the PNG image is done, the raw pixel data will have that color type and thus +a certain amount of bits per pixel. If you want the output raw image after +decoding to have another color type, a conversion is done by LodePNG. + +The PNG specification gives the following color types: + +0: greyscale, bit depths 1, 2, 4, 8, 16 +2: RGB, bit depths 8 and 16 +3: palette, bit depths 1, 2, 4 and 8 +4: greyscale with alpha, bit depths 8 and 16 +6: RGBA, bit depths 8 and 16 + +Bit depth is the amount of bits per pixel per color channel. So the total amount +of bits per pixel is: amount of channels * bitdepth. + +6.2. color conversions +---------------------- + +As explained in the sections about the encoder and decoder, you can specify +color types and bit depths in info_png and info_raw to change the default +behaviour. + +If, when decoding, you want the raw image to be something else than the default, +you need to set the color type and bit depth you want in the LodePNGColorMode, +or the parameters colortype and bitdepth of the simple decoding function. + +If, when encoding, you use another color type than the default in the raw input +image, you need to specify its color type and bit depth in the LodePNGColorMode +of the raw image, or use the parameters colortype and bitdepth of the simple +encoding function. + +If, when encoding, you don't want LodePNG to choose the output PNG color type +but control it yourself, you need to set auto_convert in the encoder settings +to false, and specify the color type you want in the LodePNGInfo of the +encoder (including palette: it can generate a palette if auto_convert is true, +otherwise not). + +If the input and output color type differ (whether user chosen or auto chosen), +LodePNG will do a color conversion, which follows the rules below, and may +sometimes result in an error. + +To avoid some confusion: +-the decoder converts from PNG to raw image +-the encoder converts from raw image to PNG +-the colortype and bitdepth in LodePNGColorMode info_raw, are those of the raw image +-the colortype and bitdepth in the color field of LodePNGInfo info_png, are those of the PNG +-when encoding, the color type in LodePNGInfo is ignored if auto_convert + is enabled, it is automatically generated instead +-when decoding, the color type in LodePNGInfo is set by the decoder to that of the original + PNG image, but it can be ignored since the raw image has the color type you requested instead +-if the color type of the LodePNGColorMode and PNG image aren't the same, a conversion + between the color types is done if the color types are supported. If it is not + supported, an error is returned. If the types are the same, no conversion is done. +-even though some conversions aren't supported, LodePNG supports loading PNGs from any + colortype and saving PNGs to any colortype, sometimes it just requires preparing + the raw image correctly before encoding. +-both encoder and decoder use the same color converter. + +Non supported color conversions: +-color to greyscale: no error is thrown, but the result will look ugly because +only the red channel is taken +-anything to palette when that palette does not have that color in it: in this +case an error is thrown + +Supported color conversions: +-anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA +-any grey or grey+alpha, to grey or grey+alpha +-anything to a palette, as long as the palette has the requested colors in it +-removing alpha channel +-higher to smaller bitdepth, and vice versa + +If you want no color conversion to be done (e.g. for speed or control): +-In the encoder, you can make it save a PNG with any color type by giving the +raw color mode and LodePNGInfo the same color mode, and setting auto_convert to +false. +-In the decoder, you can make it store the pixel data in the same color type +as the PNG has, by setting the color_convert setting to false. Settings in +info_raw are then ignored. + +The function lodepng_convert does the color conversion. It is available in the +interface but normally isn't needed since the encoder and decoder already call +it. + +6.3. padding bits +----------------- + +In the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines +have a bit amount that isn't a multiple of 8, then padding bits are used so that each +scanline starts at a fresh byte. But that is NOT true for the LodePNG raw input and output. +The raw input image you give to the encoder, and the raw output image you get from the decoder +will NOT have these padding bits, e.g. in the case of a 1-bit image with a width +of 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte, +not the first bit of a new byte. + +6.4. A note about 16-bits per channel and endianness +---------------------------------------------------- + +LodePNG uses unsigned char arrays for 16-bit per channel colors too, just like +for any other color format. The 16-bit values are stored in big endian (most +significant byte first) in these arrays. This is the opposite order of the +little endian used by x86 CPU's. + +LodePNG always uses big endian because the PNG file format does so internally. +Conversions to other formats than PNG uses internally are not supported by +LodePNG on purpose, there are myriads of formats, including endianness of 16-bit +colors, the order in which you store R, G, B and A, and so on. Supporting and +converting to/from all that is outside the scope of LodePNG. + +This may mean that, depending on your use case, you may want to convert the big +endian output of LodePNG to little endian with a for loop. This is certainly not +always needed, many applications and libraries support big endian 16-bit colors +anyway, but it means you cannot simply cast the unsigned char* buffer to an +unsigned short* buffer on x86 CPUs. + + +7. error values +--------------- + +All functions in LodePNG that return an error code, return 0 if everything went +OK, or a non-zero code if there was an error. + +The meaning of the LodePNG error values can be retrieved with the function +lodepng_error_text: given the numerical error code, it returns a description +of the error in English as a string. + +Check the implementation of lodepng_error_text to see the meaning of each code. + + +8. chunks and PNG editing +------------------------- + +If you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG +editor that should follow the rules about handling of unknown chunks, or if your +program is able to read other types of chunks than the ones handled by LodePNG, +then that's possible with the chunk functions of LodePNG. + +A PNG chunk has the following layout: + +4 bytes length +4 bytes type name +length bytes data +4 bytes CRC + +8.1. iterating through chunks +----------------------------- + +If you have a buffer containing the PNG image data, then the first chunk (the +IHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the +signature of the PNG and are not part of a chunk. But if you start at byte 8 +then you have a chunk, and can check the following things of it. + +NOTE: none of these functions check for memory buffer boundaries. To avoid +exploits, always make sure the buffer contains all the data of the chunks. +When using lodepng_chunk_next, make sure the returned value is within the +allocated memory. + +unsigned lodepng_chunk_length(const unsigned char* chunk): + +Get the length of the chunk's data. The total chunk length is this length + 12. + +void lodepng_chunk_type(char type[5], const unsigned char* chunk): +unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type): + +Get the type of the chunk or compare if it's a certain type + +unsigned char lodepng_chunk_critical(const unsigned char* chunk): +unsigned char lodepng_chunk_private(const unsigned char* chunk): +unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk): + +Check if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are). +Check if the chunk is private (public chunks are part of the standard, private ones not). +Check if the chunk is safe to copy. If it's not, then, when modifying data in a critical +chunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your +program doesn't handle that type of unknown chunk. + +unsigned char* lodepng_chunk_data(unsigned char* chunk): +const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk): + +Get a pointer to the start of the data of the chunk. + +unsigned lodepng_chunk_check_crc(const unsigned char* chunk): +void lodepng_chunk_generate_crc(unsigned char* chunk): + +Check if the crc is correct or generate a correct one. + +unsigned char* lodepng_chunk_next(unsigned char* chunk): +const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk): + +Iterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these +functions do no boundary checking of the allocated data whatsoever, so make sure there is enough +data available in the buffer to be able to go to the next chunk. + +unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk): +unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, + const char* type, const unsigned char* data): + +These functions are used to create new chunks that are appended to the data in *out that has +length *outlength. The append function appends an existing chunk to the new data. The create +function creates a new chunk with the given parameters and appends it. Type is the 4-letter +name of the chunk. + +8.2. chunks in info_png +----------------------- + +The LodePNGInfo struct contains fields with the unknown chunk in it. It has 3 +buffers (each with size) to contain 3 types of unknown chunks: +the ones that come before the PLTE chunk, the ones that come between the PLTE +and the IDAT chunks, and the ones that come after the IDAT chunks. +It's necessary to make the distionction between these 3 cases because the PNG +standard forces to keep the ordering of unknown chunks compared to the critical +chunks, but does not force any other ordering rules. + +info_png.unknown_chunks_data[0] is the chunks before PLTE +info_png.unknown_chunks_data[1] is the chunks after PLTE, before IDAT +info_png.unknown_chunks_data[2] is the chunks after IDAT + +The chunks in these 3 buffers can be iterated through and read by using the same +way described in the previous subchapter. + +When using the decoder to decode a PNG, you can make it store all unknown chunks +if you set the option settings.remember_unknown_chunks to 1. By default, this +option is off (0). + +The encoder will always encode unknown chunks that are stored in the info_png. +If you need it to add a particular chunk that isn't known by LodePNG, you can +use lodepng_chunk_append or lodepng_chunk_create to the chunk data in +info_png.unknown_chunks_data[x]. + +Chunks that are known by LodePNG should not be added in that way. E.g. to make +LodePNG add a bKGD chunk, set background_defined to true and add the correct +parameters there instead. + + +9. compiler support +------------------- + +No libraries other than the current standard C library are needed to compile +LodePNG. For the C++ version, only the standard C++ library is needed on top. +Add the files lodepng.c(pp) and lodepng.h to your project, include +lodepng.h where needed, and your program can read/write PNG files. + +It is compatible with C90 and up, and C++03 and up. + +If performance is important, use optimization when compiling! For both the +encoder and decoder, this makes a large difference. + +Make sure that LodePNG is compiled with the same compiler of the same version +and with the same settings as the rest of the program, or the interfaces with +std::vectors and std::strings in C++ can be incompatible. + +CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets. + +*) gcc and g++ + +LodePNG is developed in gcc so this compiler is natively supported. It gives no +warnings with compiler options "-Wall -Wextra -pedantic -ansi", with gcc and g++ +version 4.7.1 on Linux, 32-bit and 64-bit. + +*) Clang + +Fully supported and warning-free. + +*) Mingw + +The Mingw compiler (a port of gcc for Windows) should be fully supported by +LodePNG. + +*) Visual Studio and Visual C++ Express Edition + +LodePNG should be warning-free with warning level W4. Two warnings were disabled +with pragmas though: warning 4244 about implicit conversions, and warning 4996 +where it wants to use a non-standard function fopen_s instead of the standard C +fopen. + +Visual Studio may want "stdafx.h" files to be included in each source file and +give an error "unexpected end of file while looking for precompiled header". +This is not standard C++ and will not be added to the stock LodePNG. You can +disable it for lodepng.cpp only by right clicking it, Properties, C/C++, +Precompiled Headers, and set it to Not Using Precompiled Headers there. + +NOTE: Modern versions of VS should be fully supported, but old versions, e.g. +VS6, are not guaranteed to work. + +*) Compilers on Macintosh + +LodePNG has been reported to work both with gcc and LLVM for Macintosh, both for +C and C++. + +*) Other Compilers + +If you encounter problems on any compilers, feel free to let me know and I may +try to fix it if the compiler is modern and standards complient. + + +10. examples +------------ + +This decoder example shows the most basic usage of LodePNG. More complex +examples can be found on the LodePNG website. + +10.1. decoder C++ example +------------------------- + +#include "lodepng.h" +#include + +int main(int argc, char *argv[]) +{ + const char* filename = argc > 1 ? argv[1] : "test.png"; + + //load and decode + std::vector image; + unsigned width, height; + unsigned error = lodepng::decode(image, width, height, filename); + + //if there's an error, display it + if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl; + + //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ... +} + +10.2. decoder C example +----------------------- + +#include "lodepng.h" + +int main(int argc, char *argv[]) +{ + unsigned error; + unsigned char* image; + size_t width, height; + const char* filename = argc > 1 ? argv[1] : "test.png"; + + error = lodepng_decode32_file(&image, &width, &height, filename); + + if(error) printf("decoder error %u: %s\n", error, lodepng_error_text(error)); + + / * use image here * / + + free(image); + return 0; +} + +11. state settings reference +---------------------------- + +A quick reference of some settings to set on the LodePNGState + +For decoding: + +state.decoder.zlibsettings.ignore_adler32: ignore ADLER32 checksums +state.decoder.zlibsettings.custom_...: use custom inflate function +state.decoder.ignore_crc: ignore CRC checksums +state.decoder.color_convert: convert internal PNG color to chosen one +state.decoder.read_text_chunks: whether to read in text metadata chunks +state.decoder.remember_unknown_chunks: whether to read in unknown chunks +state.info_raw.colortype: desired color type for decoded image +state.info_raw.bitdepth: desired bit depth for decoded image +state.info_raw....: more color settings, see struct LodePNGColorMode +state.info_png....: no settings for decoder but ouput, see struct LodePNGInfo + +For encoding: + +state.encoder.zlibsettings.btype: disable compression by setting it to 0 +state.encoder.zlibsettings.use_lz77: use LZ77 in compression +state.encoder.zlibsettings.windowsize: tweak LZ77 windowsize +state.encoder.zlibsettings.minmatch: tweak min LZ77 length to match +state.encoder.zlibsettings.nicematch: tweak LZ77 match where to stop searching +state.encoder.zlibsettings.lazymatching: try one more LZ77 matching +state.encoder.zlibsettings.custom_...: use custom deflate function +state.encoder.auto_convert: choose optimal PNG color type, if 0 uses info_png +state.encoder.filter_palette_zero: PNG filter strategy for palette +state.encoder.filter_strategy: PNG filter strategy to encode with +state.encoder.force_palette: add palette even if not encoding to one +state.encoder.add_id: add LodePNG identifier and version as a text chunk +state.encoder.text_compression: use compressed text chunks for metadata +state.info_raw.colortype: color type of raw input image you provide +state.info_raw.bitdepth: bit depth of raw input image you provide +state.info_raw: more color settings, see struct LodePNGColorMode +state.info_png.color.colortype: desired color type if auto_convert is false +state.info_png.color.bitdepth: desired bit depth if auto_convert is false +state.info_png.color....: more color settings, see struct LodePNGColorMode +state.info_png....: more PNG related settings, see struct LodePNGInfo + + +12. changes +----------- + +The version number of LodePNG is the date of the change given in the format +yyyymmdd. + +Some changes aren't backwards compatible. Those are indicated with a (!) +symbol. + +*) 27 nov 2016: grey+alpha auto color model detection bugfix +*) 18 apr 2016: Changed qsort to custom stable sort (for platforms w/o qsort). +*) 09 apr 2016: Fixed colorkey usage detection, and better file loading (within + the limits of pure C90). +*) 08 dec 2015: Made load_file function return error if file can't be opened. +*) 24 okt 2015: Bugfix with decoding to palette output. +*) 18 apr 2015: Boundary PM instead of just package-merge for faster encoding. +*) 23 aug 2014: Reduced needless memory usage of decoder. +*) 28 jun 2014: Removed fix_png setting, always support palette OOB for + simplicity. Made ColorProfile public. +*) 09 jun 2014: Faster encoder by fixing hash bug and more zeros optimization. +*) 22 dec 2013: Power of two windowsize required for optimization. +*) 15 apr 2013: Fixed bug with LAC_ALPHA and color key. +*) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png). +*) 11 mar 2013 (!): Bugfix with custom free. Changed from "my" to "lodepng_" + prefix for the custom allocators and made it possible with a new #define to + use custom ones in your project without needing to change lodepng's code. +*) 28 jan 2013: Bugfix with color key. +*) 27 okt 2012: Tweaks in text chunk keyword length error handling. +*) 8 okt 2012 (!): Added new filter strategy (entropy) and new auto color mode. + (no palette). Better deflate tree encoding. New compression tweak settings. + Faster color conversions while decoding. Some internal cleanups. +*) 23 sep 2012: Reduced warnings in Visual Studio a little bit. +*) 1 sep 2012 (!): Removed #define's for giving custom (de)compression functions + and made it work with function pointers instead. +*) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc + and free functions and toggle #defines from compiler flags. Small fixes. +*) 6 may 2012 (!): Made plugging in custom zlib/deflate functions more flexible. +*) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed + redundant C++ codec classes. Reduced amount of structs. Everything changed, + but it is cleaner now imho and functionality remains the same. Also fixed + several bugs and shrunk the implementation code. Made new samples. +*) 6 nov 2011 (!): By default, the encoder now automatically chooses the best + PNG color model and bit depth, based on the amount and type of colors of the + raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color. +*) 9 okt 2011: simpler hash chain implementation for the encoder. +*) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching. +*) 23 aug 2011: tweaked the zlib compression parameters after benchmarking. + A bug with the PNG filtertype heuristic was fixed, so that it chooses much + better ones (it's quite significant). A setting to do an experimental, slow, + brute force search for PNG filter types is added. +*) 17 aug 2011 (!): changed some C zlib related function names. +*) 16 aug 2011: made the code less wide (max 120 characters per line). +*) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors. +*) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled. +*) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman + to optimize long sequences of zeros. +*) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and + LodePNG_InfoColor_canHaveAlpha functions for convenience. +*) 7 nov 2010: added LodePNG_error_text function to get error code description. +*) 30 okt 2010: made decoding slightly faster +*) 26 okt 2010: (!) changed some C function and struct names (more consistent). + Reorganized the documentation and the declaration order in the header. +*) 08 aug 2010: only changed some comments and external samples. +*) 05 jul 2010: fixed bug thanks to warnings in the new gcc version. +*) 14 mar 2010: fixed bug where too much memory was allocated for char buffers. +*) 02 sep 2008: fixed bug where it could create empty tree that linux apps could + read by ignoring the problem but windows apps couldn't. +*) 06 jun 2008: added more error checks for out of memory cases. +*) 26 apr 2008: added a few more checks here and there to ensure more safety. +*) 06 mar 2008: crash with encoding of strings fixed +*) 02 feb 2008: support for international text chunks added (iTXt) +*) 23 jan 2008: small cleanups, and #defines to divide code in sections +*) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor. +*) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder. +*) 17 jan 2008: ability to encode and decode compressed zTXt chunks added + Also various fixes, such as in the deflate and the padding bits code. +*) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved + filtering code of encoder. +*) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A + C++ wrapper around this provides an interface almost identical to before. + Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code + are together in these files but it works both for C and C++ compilers. +*) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks +*) 30 aug 2007: bug fixed which makes this Borland C++ compatible +*) 09 aug 2007: some VS2005 warnings removed again +*) 21 jul 2007: deflate code placed in new namespace separate from zlib code +*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images +*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing + invalid std::vector element [0] fixed, and level 3 and 4 warnings removed +*) 02 jun 2007: made the encoder add a tag with version by default +*) 27 may 2007: zlib and png code separated (but still in the same file), + simple encoder/decoder functions added for more simple usage cases +*) 19 may 2007: minor fixes, some code cleaning, new error added (error 69), + moved some examples from here to lodepng_examples.cpp +*) 12 may 2007: palette decoding bug fixed +*) 24 apr 2007: changed the license from BSD to the zlib license +*) 11 mar 2007: very simple addition: ability to encode bKGD chunks. +*) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding + palettized PNG images. Plus little interface change with palette and texts. +*) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes. + Fixed a bug where the end code of a block had length 0 in the Huffman tree. +*) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented + and supported by the encoder, resulting in smaller PNGs at the output. +*) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone. +*) 24 jan 2007: gave encoder an error interface. Added color conversion from any + greyscale type to 8-bit greyscale with or without alpha. +*) 21 jan 2007: (!) Totally changed the interface. It allows more color types + to convert to and is more uniform. See the manual for how it works now. +*) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days: + encode/decode custom tEXt chunks, separate classes for zlib & deflate, and + at last made the decoder give errors for incorrect Adler32 or Crc. +*) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel. +*) 29 dec 2006: Added support for encoding images without alpha channel, and + cleaned out code as well as making certain parts faster. +*) 28 dec 2006: Added "Settings" to the encoder. +*) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now. + Removed some code duplication in the decoder. Fixed little bug in an example. +*) 09 dec 2006: (!) Placed output parameters of public functions as first parameter. + Fixed a bug of the decoder with 16-bit per color. +*) 15 okt 2006: Changed documentation structure +*) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the + given image buffer, however for now it's not compressed. +*) 08 sep 2006: (!) Changed to interface with a Decoder class +*) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different + way. Renamed decodePNG to decodePNGGeneric. +*) 29 jul 2006: (!) Changed the interface: image info is now returned as a + struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy. +*) 28 jul 2006: Cleaned the code and added new error checks. + Corrected terminology "deflate" into "inflate". +*) 23 jun 2006: Added SDL example in the documentation in the header, this + example allows easy debugging by displaying the PNG and its transparency. +*) 22 jun 2006: (!) Changed way to obtain error value. Added + loadFile function for convenience. Made decodePNG32 faster. +*) 21 jun 2006: (!) Changed type of info vector to unsigned. + Changed position of palette in info vector. Fixed an important bug that + happened on PNGs with an uncompressed block. +*) 16 jun 2006: Internally changed unsigned into unsigned where + needed, and performed some optimizations. +*) 07 jun 2006: (!) Renamed functions to decodePNG and placed them + in LodePNG namespace. Changed the order of the parameters. Rewrote the + documentation in the header. Renamed files to lodepng.cpp and lodepng.h +*) 22 apr 2006: Optimized and improved some code +*) 07 sep 2005: (!) Changed to std::vector interface +*) 12 aug 2005: Initial release (C++, decoder only) + + +13. contact information +----------------------- + +Feel free to contact me with suggestions, problems, comments, ... concerning +LodePNG. If you encounter a PNG image that doesn't work properly with this +decoder, feel free to send it and I'll use it to find and fix the problem. + +My email address is (puzzle the account and domain together with an @ symbol): +Domain: gmail dot com. +Account: lode dot vandevenne. + + +Copyright (c) 2005-2016 Lode Vandevenne +*/ diff --git a/external/bc7enc_rdo/miniz.h b/external/bc7enc_rdo/miniz.h new file mode 100644 index 0000000000..9ea03b857d --- /dev/null +++ b/external/bc7enc_rdo/miniz.h @@ -0,0 +1,2541 @@ +/* miniz.c v1.15 - deflate/inflate, zlib-subset, ZIP reading/writing/appending, PNG writing + Implements RFC 1950: http://www.ietf.org/rfc/rfc1950.txt and RFC 1951: http://www.ietf.org/rfc/rfc1951.txt + + Forked from the public domain/unlicense version at: https://code.google.com/archive/p/miniz/ + + Copyright (C) 2019-2021 Binomial LLC. All Rights Reserved. + + 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. +*/ + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4505) //warning C4505: 'def_realloc_func': unreferenced local function has been removed +#endif + +#ifndef MINIZ_HEADER_INCLUDED +#define MINIZ_HEADER_INCLUDED + +#include + +// Defines to completely disable specific portions of miniz.c: +// If all macros here are defined the only functionality remaining will be CRC-32, adler-32, tinfl, and tdefl. + +// Define MINIZ_NO_STDIO to disable all usage and any functions which rely on stdio for file I/O. +//#define MINIZ_NO_STDIO + +// If MINIZ_NO_TIME is specified then the ZIP archive functions will not be able to get the current time, or +// get/set file times, and the C run-time funcs that get/set times won't be called. +// The current downside is the times written to your archives will be from 1979. +//#define MINIZ_NO_TIME + +// Define MINIZ_NO_ARCHIVE_APIS to disable all ZIP archive API's. +//#define MINIZ_NO_ARCHIVE_APIS + +// Define MINIZ_NO_ARCHIVE_APIS to disable all writing related ZIP archive API's. +//#define MINIZ_NO_ARCHIVE_WRITING_APIS + +// Define MINIZ_NO_ZLIB_APIS to remove all ZLIB-style compression/decompression API's. +//#define MINIZ_NO_ZLIB_APIS + +// Define MINIZ_NO_ZLIB_COMPATIBLE_NAME to disable zlib names, to prevent conflicts against stock zlib. +//#define MINIZ_NO_ZLIB_COMPATIBLE_NAMES + +// Define MINIZ_NO_MALLOC to disable all calls to malloc, free, and realloc. +// Note if MINIZ_NO_MALLOC is defined then the user must always provide custom user alloc/free/realloc +// callbacks to the zlib and archive API's, and a few stand-alone helper API's which don't provide custom user +// functions (such as tdefl_compress_mem_to_heap() and tinfl_decompress_mem_to_heap()) won't work. +//#define MINIZ_NO_MALLOC + +#if defined(__TINYC__) && (defined(__linux) || defined(__linux__)) + // TODO: Work around "error: include file 'sys\utime.h' when compiling with tcc on Linux + #define MINIZ_NO_TIME +#endif + +#if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_ARCHIVE_APIS) + #include +#endif + +#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || defined(__i386) || defined(__i486__) || defined(__i486) || defined(i386) || defined(__ia64__) || defined(__x86_64__) +// MINIZ_X86_OR_X64_CPU is only used to help set the below macros. +#define MINIZ_X86_OR_X64_CPU 1 +#endif + +#if (__BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__) || MINIZ_X86_OR_X64_CPU +// Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian. +#define MINIZ_LITTLE_ENDIAN 1 +#endif + +#if MINIZ_X86_OR_X64_CPU +// Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient integer loads and stores from unaligned addresses. +#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 +#endif + +#if defined(_M_X64) || defined(_WIN64) || defined(__MINGW64__) || defined(_LP64) || defined(__LP64__) || defined(__ia64__) || defined(__x86_64__) +// Set MINIZ_HAS_64BIT_REGISTERS to 1 if operations on 64-bit integers are reasonably fast (and don't involve compiler generated calls to helper functions). +#define MINIZ_HAS_64BIT_REGISTERS 1 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +// ------------------- zlib-style API Definitions. + +// For more compatibility with zlib, miniz.c uses unsigned long for some parameters/struct members. Beware: mz_ulong can be either 32 or 64-bits! +typedef unsigned long mz_ulong; + +// mz_free() internally uses the MZ_FREE() macro (which by default calls free() unless you've modified the MZ_MALLOC macro) to release a block allocated from the heap. +void mz_free(void *p); + +#define MZ_ADLER32_INIT (1) +// mz_adler32() returns the initial adler-32 value to use when called with ptr==NULL. +mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len); + +#define MZ_CRC32_INIT (0) +// mz_crc32() returns the initial CRC-32 value to use when called with ptr==NULL. +mz_ulong mz_crc32(mz_ulong crc, const unsigned char *ptr, size_t buf_len); + +// Compression strategies. +enum { MZ_DEFAULT_STRATEGY = 0, MZ_FILTERED = 1, MZ_HUFFMAN_ONLY = 2, MZ_RLE = 3, MZ_FIXED = 4 }; + +// Method +#define MZ_DEFLATED 8 + +#ifndef MINIZ_NO_ZLIB_APIS + +// Heap allocation callbacks. +// Note that mz_alloc_func parameter types purpsosely differ from zlib's: items/size is size_t, not unsigned long. +typedef void *(*mz_alloc_func)(void *opaque, size_t items, size_t size); +typedef void (*mz_free_func)(void *opaque, void *address); +typedef void *(*mz_realloc_func)(void *opaque, void *address, size_t items, size_t size); + +#define MZ_VERSION "9.1.15" +#define MZ_VERNUM 0x91F0 +#define MZ_VER_MAJOR 9 +#define MZ_VER_MINOR 1 +#define MZ_VER_REVISION 15 +#define MZ_VER_SUBREVISION 0 + +// Flush values. For typical usage you only need MZ_NO_FLUSH and MZ_FINISH. The other values are for advanced use (refer to the zlib docs). +enum { MZ_NO_FLUSH = 0, MZ_PARTIAL_FLUSH = 1, MZ_SYNC_FLUSH = 2, MZ_FULL_FLUSH = 3, MZ_FINISH = 4, MZ_BLOCK = 5 }; + +// Return status codes. MZ_PARAM_ERROR is non-standard. +enum { MZ_OK = 0, MZ_STREAM_END = 1, MZ_NEED_DICT = 2, MZ_ERRNO = -1, MZ_STREAM_ERROR = -2, MZ_DATA_ERROR = -3, MZ_MEM_ERROR = -4, MZ_BUF_ERROR = -5, MZ_VERSION_ERROR = -6, MZ_PARAM_ERROR = -10000 }; + +// Compression levels: 0-9 are the standard zlib-style levels, 10 is best possible compression (not zlib compatible, and may be very slow), MZ_DEFAULT_COMPRESSION=MZ_DEFAULT_LEVEL. +enum { MZ_NO_COMPRESSION = 0, MZ_BEST_SPEED = 1, MZ_BEST_COMPRESSION = 9, MZ_UBER_COMPRESSION = 10, MZ_DEFAULT_LEVEL = 6, MZ_DEFAULT_COMPRESSION = -1 }; + +// Window bits +#define MZ_DEFAULT_WINDOW_BITS 15 + +struct mz_internal_state; + +// Compression/decompression stream struct. +typedef struct mz_stream_s +{ + const unsigned char *next_in; // pointer to next byte to read + unsigned int avail_in; // number of bytes available at next_in + mz_ulong total_in; // total number of bytes consumed so far + + unsigned char *next_out; // pointer to next byte to write + unsigned int avail_out; // number of bytes that can be written to next_out + mz_ulong total_out; // total number of bytes produced so far + + char *msg; // error msg (unused) + struct mz_internal_state *state; // internal state, allocated by zalloc/zfree + + mz_alloc_func zalloc; // optional heap allocation function (defaults to malloc) + mz_free_func zfree; // optional heap free function (defaults to free) + void *opaque; // heap alloc function user pointer + + int data_type; // data_type (unused) + mz_ulong adler; // adler32 of the source or uncompressed data + mz_ulong reserved; // not used +} mz_stream; + +typedef mz_stream *mz_streamp; + +// Returns the version string of miniz.c. +const char *mz_version(void); + +// mz_deflateInit() initializes a compressor with default options: +// Parameters: +// pStream must point to an initialized mz_stream struct. +// level must be between [MZ_NO_COMPRESSION, MZ_BEST_COMPRESSION]. +// level 1 enables a specially optimized compression function that's been optimized purely for performance, not ratio. +// (This special func. is currently only enabled when MINIZ_USE_UNALIGNED_LOADS_AND_STORES and MINIZ_LITTLE_ENDIAN are defined.) +// Return values: +// MZ_OK on success. +// MZ_STREAM_ERROR if the stream is bogus. +// MZ_PARAM_ERROR if the input parameters are bogus. +// MZ_MEM_ERROR on out of memory. +int mz_deflateInit(mz_streamp pStream, int level); + +// mz_deflateInit2() is like mz_deflate(), except with more control: +// Additional parameters: +// method must be MZ_DEFLATED +// window_bits must be MZ_DEFAULT_WINDOW_BITS (to wrap the deflate stream with zlib header/adler-32 footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate/no header or footer) +// mem_level must be between [1, 9] (it's checked but ignored by miniz.c) +int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy); + +// Quickly resets a compressor without having to reallocate anything. Same as calling mz_deflateEnd() followed by mz_deflateInit()/mz_deflateInit2(). +int mz_deflateReset(mz_streamp pStream); + +// mz_deflate() compresses the input to output, consuming as much of the input and producing as much output as possible. +// Parameters: +// pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. +// flush may be MZ_NO_FLUSH, MZ_PARTIAL_FLUSH/MZ_SYNC_FLUSH, MZ_FULL_FLUSH, or MZ_FINISH. +// Return values: +// MZ_OK on success (when flushing, or if more input is needed but not available, and/or there's more output to be written but the output buffer is full). +// MZ_STREAM_END if all input has been consumed and all output bytes have been written. Don't call mz_deflate() on the stream anymore. +// MZ_STREAM_ERROR if the stream is bogus. +// MZ_PARAM_ERROR if one of the parameters is invalid. +// MZ_BUF_ERROR if no forward progress is possible because the input and/or output buffers are empty. (Fill up the input buffer or free up some output space and try again.) +int mz_deflate(mz_streamp pStream, int flush); + +// mz_deflateEnd() deinitializes a compressor: +// Return values: +// MZ_OK on success. +// MZ_STREAM_ERROR if the stream is bogus. +int mz_deflateEnd(mz_streamp pStream); + +// mz_deflateBound() returns a (very) conservative upper bound on the amount of data that could be generated by deflate(), assuming flush is set to only MZ_NO_FLUSH or MZ_FINISH. +mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len); + +// Single-call compression functions mz_compress() and mz_compress2(): +// Returns MZ_OK on success, or one of the error codes from mz_deflate() on failure. +int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); +int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level); + +// mz_compressBound() returns a (very) conservative upper bound on the amount of data that could be generated by calling mz_compress(). +mz_ulong mz_compressBound(mz_ulong source_len); + +// Initializes a decompressor. +int mz_inflateInit(mz_streamp pStream); + +// mz_inflateInit2() is like mz_inflateInit() with an additional option that controls the window size and whether or not the stream has been wrapped with a zlib header/footer: +// window_bits must be MZ_DEFAULT_WINDOW_BITS (to parse zlib header/footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate). +int mz_inflateInit2(mz_streamp pStream, int window_bits); + +// Decompresses the input stream to the output, consuming only as much of the input as needed, and writing as much to the output as possible. +// Parameters: +// pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. +// flush may be MZ_NO_FLUSH, MZ_SYNC_FLUSH, or MZ_FINISH. +// On the first call, if flush is MZ_FINISH it's assumed the input and output buffers are both sized large enough to decompress the entire stream in a single call (this is slightly faster). +// MZ_FINISH implies that there are no more source bytes available beside what's already in the input buffer, and that the output buffer is large enough to hold the rest of the decompressed data. +// Return values: +// MZ_OK on success. Either more input is needed but not available, and/or there's more output to be written but the output buffer is full. +// MZ_STREAM_END if all needed input has been consumed and all output bytes have been written. For zlib streams, the adler-32 of the decompressed data has also been verified. +// MZ_STREAM_ERROR if the stream is bogus. +// MZ_DATA_ERROR if the deflate stream is invalid. +// MZ_PARAM_ERROR if one of the parameters is invalid. +// MZ_BUF_ERROR if no forward progress is possible because the input buffer is empty but the inflater needs more input to continue, or if the output buffer is not large enough. Call mz_inflate() again +// with more input data, or with more room in the output buffer (except when using single call decompression, described above). +int mz_inflate(mz_streamp pStream, int flush); + +// Deinitializes a decompressor. +int mz_inflateEnd(mz_streamp pStream); + +// Single-call decompression. +// Returns MZ_OK on success, or one of the error codes from mz_inflate() on failure. +int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); + +// Returns a string description of the specified error code, or NULL if the error code is invalid. +const char *mz_error(int err); + +// Redefine zlib-compatible names to miniz equivalents, so miniz.c can be used as a drop-in replacement for the subset of zlib that miniz.c supports. +// Define MINIZ_NO_ZLIB_COMPATIBLE_NAMES to disable zlib-compatibility if you use zlib in the same project. +#ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES + typedef unsigned char Byte; + typedef unsigned int uInt; + typedef mz_ulong uLong; + typedef Byte Bytef; + typedef uInt uIntf; + typedef char charf; + typedef int intf; + typedef void *voidpf; + typedef uLong uLongf; + typedef void *voidp; + typedef void *const voidpc; + #define Z_NULL 0 + #define Z_NO_FLUSH MZ_NO_FLUSH + #define Z_PARTIAL_FLUSH MZ_PARTIAL_FLUSH + #define Z_SYNC_FLUSH MZ_SYNC_FLUSH + #define Z_FULL_FLUSH MZ_FULL_FLUSH + #define Z_FINISH MZ_FINISH + #define Z_BLOCK MZ_BLOCK + #define Z_OK MZ_OK + #define Z_STREAM_END MZ_STREAM_END + #define Z_NEED_DICT MZ_NEED_DICT + #define Z_ERRNO MZ_ERRNO + #define Z_STREAM_ERROR MZ_STREAM_ERROR + #define Z_DATA_ERROR MZ_DATA_ERROR + #define Z_MEM_ERROR MZ_MEM_ERROR + #define Z_BUF_ERROR MZ_BUF_ERROR + #define Z_VERSION_ERROR MZ_VERSION_ERROR + #define Z_PARAM_ERROR MZ_PARAM_ERROR + #define Z_NO_COMPRESSION MZ_NO_COMPRESSION + #define Z_BEST_SPEED MZ_BEST_SPEED + #define Z_BEST_COMPRESSION MZ_BEST_COMPRESSION + #define Z_DEFAULT_COMPRESSION MZ_DEFAULT_COMPRESSION + #define Z_DEFAULT_STRATEGY MZ_DEFAULT_STRATEGY + #define Z_FILTERED MZ_FILTERED + #define Z_HUFFMAN_ONLY MZ_HUFFMAN_ONLY + #define Z_RLE MZ_RLE + #define Z_FIXED MZ_FIXED + #define Z_DEFLATED MZ_DEFLATED + #define Z_DEFAULT_WINDOW_BITS MZ_DEFAULT_WINDOW_BITS + #define alloc_func mz_alloc_func + #define free_func mz_free_func + #define internal_state mz_internal_state + #define z_stream mz_stream + #define deflateInit mz_deflateInit + #define deflateInit2 mz_deflateInit2 + #define deflateReset mz_deflateReset + #define deflate mz_deflate + #define deflateEnd mz_deflateEnd + #define deflateBound mz_deflateBound + #define compress mz_compress + #define compress2 mz_compress2 + #define compressBound mz_compressBound + #define inflateInit mz_inflateInit + #define inflateInit2 mz_inflateInit2 + #define inflate mz_inflate + #define inflateEnd mz_inflateEnd + #define uncompress mz_uncompress + #define crc32 mz_crc32 + #define adler32 mz_adler32 + #define MAX_WBITS 15 + #define MAX_MEM_LEVEL 9 + #define zError mz_error + #define ZLIB_VERSION MZ_VERSION + #define ZLIB_VERNUM MZ_VERNUM + #define ZLIB_VER_MAJOR MZ_VER_MAJOR + #define ZLIB_VER_MINOR MZ_VER_MINOR + #define ZLIB_VER_REVISION MZ_VER_REVISION + #define ZLIB_VER_SUBREVISION MZ_VER_SUBREVISION + #define zlibVersion mz_version + #define zlib_version mz_version() +#endif // #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES + +#endif // MINIZ_NO_ZLIB_APIS + +// ------------------- Types and macros + +typedef unsigned char mz_uint8; +typedef signed short mz_int16; +typedef unsigned short mz_uint16; +typedef unsigned int mz_uint32; +typedef unsigned int mz_uint; +typedef long long mz_int64; +typedef unsigned long long mz_uint64; +typedef int mz_bool; + +#define MZ_FALSE (0) +#define MZ_TRUE (1) + +// An attempt to work around MSVC's spammy "warning C4127: conditional expression is constant" message. +#ifdef _MSC_VER + #define MZ_MACRO_END while (0, 0) +#else + #define MZ_MACRO_END while (0) +#endif + +// ------------------- Low-level Decompression API Definitions + +// Decompression flags used by tinfl_decompress(). +// TINFL_FLAG_PARSE_ZLIB_HEADER: If set, the input has a valid zlib header and ends with an adler32 checksum (it's a valid zlib stream). Otherwise, the input is a raw deflate stream. +// TINFL_FLAG_HAS_MORE_INPUT: If set, there are more input bytes available beyond the end of the supplied input buffer. If clear, the input buffer contains all remaining input. +// TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF: If set, the output buffer is large enough to hold the entire decompressed stream. If clear, the output buffer is at least the size of the dictionary (typically 32KB). +// TINFL_FLAG_COMPUTE_ADLER32: Force adler-32 checksum computation of the decompressed bytes. +enum +{ + TINFL_FLAG_PARSE_ZLIB_HEADER = 1, + TINFL_FLAG_HAS_MORE_INPUT = 2, + TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF = 4, + TINFL_FLAG_COMPUTE_ADLER32 = 8 +}; + +// High level decompression functions: +// tinfl_decompress_mem_to_heap() decompresses a block in memory to a heap block allocated via malloc(). +// On entry: +// pSrc_buf, src_buf_len: Pointer and size of the Deflate or zlib source data to decompress. +// On return: +// Function returns a pointer to the decompressed data, or NULL on failure. +// *pOut_len will be set to the decompressed data's size, which could be larger than src_buf_len on uncompressible data. +// The caller must call mz_free() on the returned block when it's no longer needed. +void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); + +// tinfl_decompress_mem_to_mem() decompresses a block in memory to another block in memory. +// Returns TINFL_DECOMPRESS_MEM_TO_MEM_FAILED on failure, or the number of bytes written on success. +#define TINFL_DECOMPRESS_MEM_TO_MEM_FAILED ((size_t)(-1)) +size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); + +// tinfl_decompress_mem_to_callback() decompresses a block in memory to an internal 32KB buffer, and a user provided callback function will be called to flush the buffer. +// Returns 1 on success or 0 on failure. +typedef int (*tinfl_put_buf_func_ptr)(const void* pBuf, int len, void *pUser); +int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); + +struct tinfl_decompressor_tag; typedef struct tinfl_decompressor_tag tinfl_decompressor; + +// Max size of LZ dictionary. +#define TINFL_LZ_DICT_SIZE 32768 + +// Return status. +typedef enum +{ + TINFL_STATUS_BAD_PARAM = -3, + TINFL_STATUS_ADLER32_MISMATCH = -2, + TINFL_STATUS_FAILED = -1, + TINFL_STATUS_DONE = 0, + TINFL_STATUS_NEEDS_MORE_INPUT = 1, + TINFL_STATUS_HAS_MORE_OUTPUT = 2 +} tinfl_status; + +// Initializes the decompressor to its initial state. +#define tinfl_init(r) do { (r)->m_state = 0; } MZ_MACRO_END +#define tinfl_get_adler32(r) (r)->m_check_adler32 + +// Main low-level decompressor coroutine function. This is the only function actually needed for decompression. All the other functions are just high-level helpers for improved usability. +// This is a universal API, i.e. it can be used as a building block to build any desired higher level decompression API. In the limit case, it can be called once per every byte input or output. +tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags); + +// Internal/private bits follow. +enum +{ + TINFL_MAX_HUFF_TABLES = 3, TINFL_MAX_HUFF_SYMBOLS_0 = 288, TINFL_MAX_HUFF_SYMBOLS_1 = 32, TINFL_MAX_HUFF_SYMBOLS_2 = 19, + TINFL_FAST_LOOKUP_BITS = 10, TINFL_FAST_LOOKUP_SIZE = 1 << TINFL_FAST_LOOKUP_BITS +}; + +typedef struct +{ + mz_uint8 m_code_size[TINFL_MAX_HUFF_SYMBOLS_0]; + mz_int16 m_look_up[TINFL_FAST_LOOKUP_SIZE], m_tree[TINFL_MAX_HUFF_SYMBOLS_0 * 2]; +} tinfl_huff_table; + +#if MINIZ_HAS_64BIT_REGISTERS + #define TINFL_USE_64BIT_BITBUF 1 +#endif + +#if TINFL_USE_64BIT_BITBUF + typedef mz_uint64 tinfl_bit_buf_t; + #define TINFL_BITBUF_SIZE (64) +#else + typedef mz_uint32 tinfl_bit_buf_t; + #define TINFL_BITBUF_SIZE (32) +#endif + +struct tinfl_decompressor_tag +{ + mz_uint32 m_state, m_num_bits, m_zhdr0, m_zhdr1, m_z_adler32, m_final, m_type, m_check_adler32, m_dist, m_counter, m_num_extra, m_table_sizes[TINFL_MAX_HUFF_TABLES]; + tinfl_bit_buf_t m_bit_buf; + size_t m_dist_from_out_buf_start; + tinfl_huff_table m_tables[TINFL_MAX_HUFF_TABLES]; + mz_uint8 m_raw_header[4], m_len_codes[TINFL_MAX_HUFF_SYMBOLS_0 + TINFL_MAX_HUFF_SYMBOLS_1 + 137]; +}; + +// ------------------- Low-level Compression API Definitions + +// Set TDEFL_LESS_MEMORY to 1 to use less memory (compression will be slightly slower, and raw/dynamic blocks will be output more frequently). +#define TDEFL_LESS_MEMORY 0 + +// tdefl_init() compression flags logically OR'd together (low 12 bits contain the max. number of probes per dictionary search): +// TDEFL_DEFAULT_MAX_PROBES: The compressor defaults to 128 dictionary probes per dictionary search. 0=Huffman only, 1=Huffman+LZ (fastest/crap compression), 4095=Huffman+LZ (slowest/best compression). +enum +{ + TDEFL_HUFFMAN_ONLY = 0, TDEFL_DEFAULT_MAX_PROBES = 128, TDEFL_MAX_PROBES_MASK = 0xFFF +}; + +// TDEFL_WRITE_ZLIB_HEADER: If set, the compressor outputs a zlib header before the deflate data, and the Adler-32 of the source data at the end. Otherwise, you'll get raw deflate data. +// TDEFL_COMPUTE_ADLER32: Always compute the adler-32 of the input data (even when not writing zlib headers). +// TDEFL_GREEDY_PARSING_FLAG: Set to use faster greedy parsing, instead of more efficient lazy parsing. +// TDEFL_NONDETERMINISTIC_PARSING_FLAG: Enable to decrease the compressor's initialization time to the minimum, but the output may vary from run to run given the same input (depending on the contents of memory). +// TDEFL_RLE_MATCHES: Only look for RLE matches (matches with a distance of 1) +// TDEFL_FILTER_MATCHES: Discards matches <= 5 chars if enabled. +// TDEFL_FORCE_ALL_STATIC_BLOCKS: Disable usage of optimized Huffman tables. +// TDEFL_FORCE_ALL_RAW_BLOCKS: Only use raw (uncompressed) deflate blocks. +// The low 12 bits are reserved to control the max # of hash probes per dictionary lookup (see TDEFL_MAX_PROBES_MASK). +enum +{ + TDEFL_WRITE_ZLIB_HEADER = 0x01000, + TDEFL_COMPUTE_ADLER32 = 0x02000, + TDEFL_GREEDY_PARSING_FLAG = 0x04000, + TDEFL_NONDETERMINISTIC_PARSING_FLAG = 0x08000, + TDEFL_RLE_MATCHES = 0x10000, + TDEFL_FILTER_MATCHES = 0x20000, + TDEFL_FORCE_ALL_STATIC_BLOCKS = 0x40000, + TDEFL_FORCE_ALL_RAW_BLOCKS = 0x80000, + TDEFL_TRACK_TOTAL_HUFF_COUNT = 0x100000 +}; + +// High level compression functions: +// tdefl_compress_mem_to_heap() compresses a block in memory to a heap block allocated via malloc(). +// On entry: +// pSrc_buf, src_buf_len: Pointer and size of source block to compress. +// flags: The max match finder probes (default is 128) logically OR'd against the above flags. Higher probes are slower but improve compression. +// On return: +// Function returns a pointer to the compressed data, or NULL on failure. +// *pOut_len will be set to the compressed data's size, which could be larger than src_buf_len on uncompressible data. +// The caller must free() the returned block when it's no longer needed. +void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); + +// tdefl_compress_mem_to_mem() compresses a block in memory to another block in memory. +// Returns 0 on failure. +size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); + +// Compresses an image to a compressed PNG file in memory. +// On entry: +// pImage, w, h, and num_chans describe the image to compress. num_chans may be 1, 2, 3, or 4. +// The image pitch in bytes per scanline will be w*num_chans. The leftmost pixel on the top scanline is stored first in memory. +// level may range from [0,10], use MZ_NO_COMPRESSION, MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc. or a decent default is MZ_DEFAULT_LEVEL +// If flip is true, the image will be flipped on the Y axis (useful for OpenGL apps). +// On return: +// Function returns a pointer to the compressed data, or NULL on failure. +// *pLen_out will be set to the size of the PNG image file. +// The caller must mz_free() the returned heap block (which will typically be larger than *pLen_out) when it's no longer needed. +void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int h, int num_chans, size_t *pLen_out, mz_uint level, mz_bool flip); +void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out); + +// Output stream interface. The compressor uses this interface to write compressed data. It'll typically be called TDEFL_OUT_BUF_SIZE at a time. +typedef mz_bool (*tdefl_put_buf_func_ptr)(const void* pBuf, int len, void *pUser); + +// tdefl_compress_mem_to_output() compresses a block to an output stream. The above helpers use this function internally. +mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); + +enum { TDEFL_MAX_HUFF_TABLES = 3, TDEFL_MAX_HUFF_SYMBOLS_0 = 288, TDEFL_MAX_HUFF_SYMBOLS_1 = 32, TDEFL_MAX_HUFF_SYMBOLS_2 = 19, TDEFL_LZ_DICT_SIZE = 32768, TDEFL_LZ_DICT_SIZE_MASK = TDEFL_LZ_DICT_SIZE - 1, TDEFL_MIN_MATCH_LEN = 3, TDEFL_MAX_MATCH_LEN = 258 }; + +// TDEFL_OUT_BUF_SIZE MUST be large enough to hold a single entire compressed output block (using static/fixed Huffman codes). +#if TDEFL_LESS_MEMORY +enum { TDEFL_LZ_CODE_BUF_SIZE = 24 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13 ) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 12, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS }; +#else +enum { TDEFL_LZ_CODE_BUF_SIZE = 64 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13 ) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 15, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS }; +#endif + +// The low-level tdefl functions below may be used directly if the above helper functions aren't flexible enough. The low-level functions don't make any heap allocations, unlike the above helper functions. +typedef enum +{ + TDEFL_STATUS_BAD_PARAM = -2, + TDEFL_STATUS_PUT_BUF_FAILED = -1, + TDEFL_STATUS_OKAY = 0, + TDEFL_STATUS_DONE = 1, +} tdefl_status; + +// Must map to MZ_NO_FLUSH, MZ_SYNC_FLUSH, etc. enums +typedef enum +{ + TDEFL_NO_FLUSH = 0, + TDEFL_SYNC_FLUSH = 2, + TDEFL_FULL_FLUSH = 3, + TDEFL_FINISH = 4 +} tdefl_flush; + +// tdefl's compression state structure. +typedef struct +{ + tdefl_put_buf_func_ptr m_pPut_buf_func; + void *m_pPut_buf_user; + mz_uint m_flags, m_max_probes[2]; + int m_greedy_parsing; + mz_uint m_adler32, m_lookahead_pos, m_lookahead_size, m_dict_size; + mz_uint8 *m_pLZ_code_buf, *m_pLZ_flags, *m_pOutput_buf, *m_pOutput_buf_end; + mz_uint m_num_flags_left, m_total_lz_bytes, m_lz_code_buf_dict_pos, m_bits_in, m_bit_buffer; + mz_uint m_saved_match_dist, m_saved_match_len, m_saved_lit, m_output_flush_ofs, m_output_flush_remaining, m_finished, m_block_index, m_wants_to_finish; + tdefl_status m_prev_return_status; + const void *m_pIn_buf; + void *m_pOut_buf; + size_t *m_pIn_buf_size, *m_pOut_buf_size; + tdefl_flush m_flush; + const mz_uint8 *m_pSrc; + size_t m_src_buf_left, m_out_buf_ofs; + mz_uint8 m_dict[TDEFL_LZ_DICT_SIZE + TDEFL_MAX_MATCH_LEN - 1]; + mz_uint16 m_huff_count[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; + mz_uint16 m_huff_codes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; + mz_uint8 m_huff_code_sizes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; + mz_uint8 m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE]; + mz_uint16 m_next[TDEFL_LZ_DICT_SIZE]; + mz_uint16 m_hash[TDEFL_LZ_HASH_SIZE]; + mz_uint8 m_output_buf[TDEFL_OUT_BUF_SIZE]; + mz_uint m_huff_total_count[2][TDEFL_MAX_HUFF_SYMBOLS]; +} tdefl_compressor; + +// Initializes the compressor. +// There is no corresponding deinit() function because the tdefl API's do not dynamically allocate memory. +// pBut_buf_func: If NULL, output data will be supplied to the specified callback. In this case, the user should call the tdefl_compress_buffer() API for compression. +// If pBut_buf_func is NULL the user should always call the tdefl_compress() API. +// flags: See the above enums (TDEFL_HUFFMAN_ONLY, TDEFL_WRITE_ZLIB_HEADER, etc.) +tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); + +// Compresses a block of data, consuming as much of the specified input buffer as possible, and writing as much compressed data to the specified output buffer as possible. +tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush); + +// tdefl_compress_buffer() is only usable when the tdefl_init() is called with a non-NULL tdefl_put_buf_func_ptr. +// tdefl_compress_buffer() always consumes the entire input buffer. +tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush); + +tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d); +mz_uint32 tdefl_get_adler32(tdefl_compressor *d); + +// Can't use tdefl_create_comp_flags_from_zip_params if MINIZ_NO_ZLIB_APIS isn't defined, because it uses some of its macros. +#ifndef MINIZ_NO_ZLIB_APIS +// Create tdefl_compress() flags given zlib-style compression parameters. +// level may range from [0,10] (where 10 is absolute max compression, but may be much slower on some files) +// window_bits may be -15 (raw deflate) or 15 (zlib) +// strategy may be either MZ_DEFAULT_STRATEGY, MZ_FILTERED, MZ_HUFFMAN_ONLY, MZ_RLE, or MZ_FIXED +mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy); +#endif // #ifndef MINIZ_NO_ZLIB_APIS + +#ifdef __cplusplus +} +#endif + +#endif // MINIZ_HEADER_INCLUDED + +// ------------------- End of Header: Implementation follows. (If you only want the header, define MINIZ_HEADER_FILE_ONLY.) + +#ifndef MINIZ_HEADER_FILE_ONLY + +typedef unsigned char mz_validate_uint16[sizeof(mz_uint16)==2 ? 1 : -1]; +typedef unsigned char mz_validate_uint32[sizeof(mz_uint32)==4 ? 1 : -1]; +typedef unsigned char mz_validate_uint64[sizeof(mz_uint64)==8 ? 1 : -1]; + +#include +#include + +#define MZ_ASSERT(x) assert(x) + +#ifdef MINIZ_NO_MALLOC + #define MZ_MALLOC(x) NULL + #define MZ_FREE(x) (void)x, ((void)0) + #define MZ_REALLOC(p, x) NULL +#else + #define MZ_MALLOC(x) malloc(x) + #define MZ_FREE(x) free(x) + #define MZ_REALLOC(p, x) realloc(p, x) +#endif + +#define MZ_MAX(a,b) (((a)>(b))?(a):(b)) +#define MZ_MIN(a,b) (((a)<(b))?(a):(b)) +#define MZ_CLEAR_OBJ(obj) memset(&(obj), 0, sizeof(obj)) + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN + #define MZ_READ_LE16(p) *((const mz_uint16 *)(p)) + #define MZ_READ_LE32(p) *((const mz_uint32 *)(p)) +#else + #define MZ_READ_LE16(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U)) + #define MZ_READ_LE32(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U) | ((mz_uint32)(((const mz_uint8 *)(p))[2]) << 16U) | ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U)) +#endif + +#ifdef _MSC_VER + #define MZ_FORCEINLINE __forceinline +#elif defined(__GNUC__) + #define MZ_FORCEINLINE inline __attribute__((__always_inline__)) +#else + #define MZ_FORCEINLINE inline +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +// ------------------- zlib-style API's + +mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len) +{ + mz_uint32 i, s1 = (mz_uint32)(adler & 0xffff), s2 = (mz_uint32)(adler >> 16); size_t block_len = buf_len % 5552; + if (!ptr) return MZ_ADLER32_INIT; + while (buf_len) { + for (i = 0; i + 7 < block_len; i += 8, ptr += 8) { + s1 += ptr[0], s2 += s1; s1 += ptr[1], s2 += s1; s1 += ptr[2], s2 += s1; s1 += ptr[3], s2 += s1; + s1 += ptr[4], s2 += s1; s1 += ptr[5], s2 += s1; s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1; + } + for ( ; i < block_len; ++i) s1 += *ptr++, s2 += s1; + s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552; + } + return (s2 << 16) + s1; +} + +// Karl Malbrain's compact CRC-32. See "A compact CCITT crc16 and crc32 C implementation that balances processor cache usage against speed": http://www.geocities.com/malbrain/ +mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len) +{ + static const mz_uint32 s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, + 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; + mz_uint32 crcu32 = (mz_uint32)crc; + if (!ptr) return MZ_CRC32_INIT; + crcu32 = ~crcu32; while (buf_len--) { mz_uint8 b = *ptr++; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)]; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)]; } + return ~crcu32; +} + +void mz_free(void *p) +{ + MZ_FREE(p); +} + +#ifndef MINIZ_NO_ZLIB_APIS + +static void *def_alloc_func(void *opaque, size_t items, size_t size) { (void)opaque, (void)items, (void)size; return MZ_MALLOC(items * size); } +static void def_free_func(void *opaque, void *address) { (void)opaque, (void)address; MZ_FREE(address); } +static void *def_realloc_func(void *opaque, void *address, size_t items, size_t size) { (void)opaque, (void)address, (void)items, (void)size; return MZ_REALLOC(address, items * size); } + +const char *mz_version(void) +{ + return MZ_VERSION; +} + +int mz_deflateInit(mz_streamp pStream, int level) +{ + return mz_deflateInit2(pStream, level, MZ_DEFLATED, MZ_DEFAULT_WINDOW_BITS, 9, MZ_DEFAULT_STRATEGY); +} + +int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy) +{ + tdefl_compressor *pComp; + mz_uint comp_flags = TDEFL_COMPUTE_ADLER32 | tdefl_create_comp_flags_from_zip_params(level, window_bits, strategy); + + if (!pStream) return MZ_STREAM_ERROR; + if ((method != MZ_DEFLATED) || ((mem_level < 1) || (mem_level > 9)) || ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS))) return MZ_PARAM_ERROR; + + pStream->data_type = 0; + pStream->adler = MZ_ADLER32_INIT; + pStream->msg = NULL; + pStream->reserved = 0; + pStream->total_in = 0; + pStream->total_out = 0; + if (!pStream->zalloc) pStream->zalloc = def_alloc_func; + if (!pStream->zfree) pStream->zfree = def_free_func; + + pComp = (tdefl_compressor *)pStream->zalloc(pStream->opaque, 1, sizeof(tdefl_compressor)); + if (!pComp) + return MZ_MEM_ERROR; + + pStream->state = (struct mz_internal_state *)pComp; + + if (tdefl_init(pComp, NULL, NULL, comp_flags) != TDEFL_STATUS_OKAY) + { + mz_deflateEnd(pStream); + return MZ_PARAM_ERROR; + } + + return MZ_OK; +} + +int mz_deflateReset(mz_streamp pStream) +{ + if ((!pStream) || (!pStream->state) || (!pStream->zalloc) || (!pStream->zfree)) return MZ_STREAM_ERROR; + pStream->total_in = pStream->total_out = 0; + tdefl_init((tdefl_compressor*)pStream->state, NULL, NULL, ((tdefl_compressor*)pStream->state)->m_flags); + return MZ_OK; +} + +int mz_deflate(mz_streamp pStream, int flush) +{ + size_t in_bytes, out_bytes; + mz_ulong orig_total_in, orig_total_out; + int mz_status = MZ_OK; + + if ((!pStream) || (!pStream->state) || (flush < 0) || (flush > MZ_FINISH) || (!pStream->next_out)) return MZ_STREAM_ERROR; + if (!pStream->avail_out) return MZ_BUF_ERROR; + + if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; + + if (((tdefl_compressor*)pStream->state)->m_prev_return_status == TDEFL_STATUS_DONE) + return (flush == MZ_FINISH) ? MZ_STREAM_END : MZ_BUF_ERROR; + + orig_total_in = pStream->total_in; orig_total_out = pStream->total_out; + for ( ; ; ) + { + tdefl_status defl_status; + in_bytes = pStream->avail_in; out_bytes = pStream->avail_out; + + defl_status = tdefl_compress((tdefl_compressor*)pStream->state, pStream->next_in, &in_bytes, pStream->next_out, &out_bytes, (tdefl_flush)flush); + pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; + pStream->total_in += (mz_uint)in_bytes; pStream->adler = tdefl_get_adler32((tdefl_compressor*)pStream->state); + + pStream->next_out += (mz_uint)out_bytes; pStream->avail_out -= (mz_uint)out_bytes; + pStream->total_out += (mz_uint)out_bytes; + + if (defl_status < 0) + { + mz_status = MZ_STREAM_ERROR; + break; + } + else if (defl_status == TDEFL_STATUS_DONE) + { + mz_status = MZ_STREAM_END; + break; + } + else if (!pStream->avail_out) + break; + else if ((!pStream->avail_in) && (flush != MZ_FINISH)) + { + if ((flush) || (pStream->total_in != orig_total_in) || (pStream->total_out != orig_total_out)) + break; + return MZ_BUF_ERROR; // Can't make forward progress without some input. + } + } + return mz_status; +} + +int mz_deflateEnd(mz_streamp pStream) +{ + if (!pStream) return MZ_STREAM_ERROR; + if (pStream->state) + { + pStream->zfree(pStream->opaque, pStream->state); + pStream->state = NULL; + } + return MZ_OK; +} + +mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len) +{ + (void)pStream; + // This is really over conservative. (And lame, but it's actually pretty tricky to compute a true upper bound given the way tdefl's blocking works.) + return MZ_MAX(128 + (source_len * 110) / 100, 128 + source_len + ((source_len / (31 * 1024)) + 1) * 5); +} + +int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level) +{ + int status; + mz_stream stream; + memset(&stream, 0, sizeof(stream)); + + // In case mz_ulong is 64-bits (argh I hate longs). + if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; + + stream.next_in = pSource; + stream.avail_in = (mz_uint32)source_len; + stream.next_out = pDest; + stream.avail_out = (mz_uint32)*pDest_len; + + status = mz_deflateInit(&stream, level); + if (status != MZ_OK) return status; + + status = mz_deflate(&stream, MZ_FINISH); + if (status != MZ_STREAM_END) + { + mz_deflateEnd(&stream); + return (status == MZ_OK) ? MZ_BUF_ERROR : status; + } + + *pDest_len = stream.total_out; + return mz_deflateEnd(&stream); +} + +int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len) +{ + return mz_compress2(pDest, pDest_len, pSource, source_len, MZ_DEFAULT_COMPRESSION); +} + +mz_ulong mz_compressBound(mz_ulong source_len) +{ + return mz_deflateBound(NULL, source_len); +} + +typedef struct +{ + tinfl_decompressor m_decomp; + mz_uint m_dict_ofs, m_dict_avail, m_first_call, m_has_flushed; int m_window_bits; + mz_uint8 m_dict[TINFL_LZ_DICT_SIZE]; + tinfl_status m_last_status; +} inflate_state; + +int mz_inflateInit2(mz_streamp pStream, int window_bits) +{ + inflate_state *pDecomp; + if (!pStream) return MZ_STREAM_ERROR; + if ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS)) return MZ_PARAM_ERROR; + + pStream->data_type = 0; + pStream->adler = 0; + pStream->msg = NULL; + pStream->total_in = 0; + pStream->total_out = 0; + pStream->reserved = 0; + if (!pStream->zalloc) pStream->zalloc = def_alloc_func; + if (!pStream->zfree) pStream->zfree = def_free_func; + + pDecomp = (inflate_state*)pStream->zalloc(pStream->opaque, 1, sizeof(inflate_state)); + if (!pDecomp) return MZ_MEM_ERROR; + + pStream->state = (struct mz_internal_state *)pDecomp; + + tinfl_init(&pDecomp->m_decomp); + pDecomp->m_dict_ofs = 0; + pDecomp->m_dict_avail = 0; + pDecomp->m_last_status = TINFL_STATUS_NEEDS_MORE_INPUT; + pDecomp->m_first_call = 1; + pDecomp->m_has_flushed = 0; + pDecomp->m_window_bits = window_bits; + + return MZ_OK; +} + +int mz_inflateInit(mz_streamp pStream) +{ + return mz_inflateInit2(pStream, MZ_DEFAULT_WINDOW_BITS); +} + +int mz_inflate(mz_streamp pStream, int flush) +{ + inflate_state* pState; + mz_uint n, first_call, decomp_flags = TINFL_FLAG_COMPUTE_ADLER32; + size_t in_bytes, out_bytes, orig_avail_in; + tinfl_status status; + + if ((!pStream) || (!pStream->state)) return MZ_STREAM_ERROR; + if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; + if ((flush) && (flush != MZ_SYNC_FLUSH) && (flush != MZ_FINISH)) return MZ_STREAM_ERROR; + + pState = (inflate_state*)pStream->state; + if (pState->m_window_bits > 0) decomp_flags |= TINFL_FLAG_PARSE_ZLIB_HEADER; + orig_avail_in = pStream->avail_in; + + first_call = pState->m_first_call; pState->m_first_call = 0; + if (pState->m_last_status < 0) return MZ_DATA_ERROR; + + if (pState->m_has_flushed && (flush != MZ_FINISH)) return MZ_STREAM_ERROR; + pState->m_has_flushed |= (flush == MZ_FINISH); + + if ((flush == MZ_FINISH) && (first_call)) + { + // MZ_FINISH on the first call implies that the input and output buffers are large enough to hold the entire compressed/decompressed file. + decomp_flags |= TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF; + in_bytes = pStream->avail_in; out_bytes = pStream->avail_out; + status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pStream->next_out, pStream->next_out, &out_bytes, decomp_flags); + pState->m_last_status = status; + pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; pStream->total_in += (mz_uint)in_bytes; + pStream->adler = tinfl_get_adler32(&pState->m_decomp); + pStream->next_out += (mz_uint)out_bytes; pStream->avail_out -= (mz_uint)out_bytes; pStream->total_out += (mz_uint)out_bytes; + + if (status < 0) + return MZ_DATA_ERROR; + else if (status != TINFL_STATUS_DONE) + { + pState->m_last_status = TINFL_STATUS_FAILED; + return MZ_BUF_ERROR; + } + return MZ_STREAM_END; + } + // flush != MZ_FINISH then we must assume there's more input. + if (flush != MZ_FINISH) decomp_flags |= TINFL_FLAG_HAS_MORE_INPUT; + + if (pState->m_dict_avail) + { + n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); + memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); + pStream->next_out += n; pStream->avail_out -= n; pStream->total_out += n; + pState->m_dict_avail -= n; pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); + return ((pState->m_last_status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK; + } + + for ( ; ; ) + { + in_bytes = pStream->avail_in; + out_bytes = TINFL_LZ_DICT_SIZE - pState->m_dict_ofs; + + status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pState->m_dict, pState->m_dict + pState->m_dict_ofs, &out_bytes, decomp_flags); + pState->m_last_status = status; + + pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; + pStream->total_in += (mz_uint)in_bytes; pStream->adler = tinfl_get_adler32(&pState->m_decomp); + + pState->m_dict_avail = (mz_uint)out_bytes; + + n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); + memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); + pStream->next_out += n; pStream->avail_out -= n; pStream->total_out += n; + pState->m_dict_avail -= n; pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); + + if (status < 0) + return MZ_DATA_ERROR; // Stream is corrupted (there could be some uncompressed data left in the output dictionary - oh well). + else if ((status == TINFL_STATUS_NEEDS_MORE_INPUT) && (!orig_avail_in)) + return MZ_BUF_ERROR; // Signal caller that we can't make forward progress without supplying more input or by setting flush to MZ_FINISH. + else if (flush == MZ_FINISH) + { + // The output buffer MUST be large to hold the remaining uncompressed data when flush==MZ_FINISH. + if (status == TINFL_STATUS_DONE) + return pState->m_dict_avail ? MZ_BUF_ERROR : MZ_STREAM_END; + // status here must be TINFL_STATUS_HAS_MORE_OUTPUT, which means there's at least 1 more byte on the way. If there's no more room left in the output buffer then something is wrong. + else if (!pStream->avail_out) + return MZ_BUF_ERROR; + } + else if ((status == TINFL_STATUS_DONE) || (!pStream->avail_in) || (!pStream->avail_out) || (pState->m_dict_avail)) + break; + } + + return ((status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK; +} + +int mz_inflateEnd(mz_streamp pStream) +{ + if (!pStream) + return MZ_STREAM_ERROR; + if (pStream->state) + { + pStream->zfree(pStream->opaque, pStream->state); + pStream->state = NULL; + } + return MZ_OK; +} + +int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len) +{ + mz_stream stream; + int status; + memset(&stream, 0, sizeof(stream)); + + // In case mz_ulong is 64-bits (argh I hate longs). + if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; + + stream.next_in = pSource; + stream.avail_in = (mz_uint32)source_len; + stream.next_out = pDest; + stream.avail_out = (mz_uint32)*pDest_len; + + status = mz_inflateInit(&stream); + if (status != MZ_OK) + return status; + + status = mz_inflate(&stream, MZ_FINISH); + if (status != MZ_STREAM_END) + { + mz_inflateEnd(&stream); + return ((status == MZ_BUF_ERROR) && (!stream.avail_in)) ? MZ_DATA_ERROR : status; + } + *pDest_len = stream.total_out; + + return mz_inflateEnd(&stream); +} + +const char *mz_error(int err) +{ + static struct { int m_err; const char *m_pDesc; } s_error_descs[] = + { + { MZ_OK, "" }, { MZ_STREAM_END, "stream end" }, { MZ_NEED_DICT, "need dictionary" }, { MZ_ERRNO, "file error" }, { MZ_STREAM_ERROR, "stream error" }, + { MZ_DATA_ERROR, "data error" }, { MZ_MEM_ERROR, "out of memory" }, { MZ_BUF_ERROR, "buf error" }, { MZ_VERSION_ERROR, "version error" }, { MZ_PARAM_ERROR, "parameter error" } + }; + mz_uint i; for (i = 0; i < sizeof(s_error_descs) / sizeof(s_error_descs[0]); ++i) if (s_error_descs[i].m_err == err) return s_error_descs[i].m_pDesc; + return NULL; +} + +#endif //MINIZ_NO_ZLIB_APIS + +// ------------------- Low-level Decompression (completely independent from all compression API's) + +#define TINFL_MEMCPY(d, s, l) memcpy(d, s, l) +#define TINFL_MEMSET(p, c, l) memset(p, c, l) + +#define TINFL_CR_BEGIN switch(r->m_state) { case 0: +#define TINFL_CR_RETURN(state_index, result) do { status = result; r->m_state = state_index; goto common_exit; case state_index:; } MZ_MACRO_END +#define TINFL_CR_RETURN_FOREVER(state_index, result) do { for ( ; ; ) { TINFL_CR_RETURN(state_index, result); } } MZ_MACRO_END +#define TINFL_CR_FINISH } + +// TODO: If the caller has indicated that there's no more input, and we attempt to read beyond the input buf, then something is wrong with the input because the inflator never +// reads ahead more than it needs to. Currently TINFL_GET_BYTE() pads the end of the stream with 0's in this scenario. +#define TINFL_GET_BYTE(state_index, c) do { \ + if (pIn_buf_cur >= pIn_buf_end) { \ + for ( ; ; ) { \ + if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) { \ + TINFL_CR_RETURN(state_index, TINFL_STATUS_NEEDS_MORE_INPUT); \ + if (pIn_buf_cur < pIn_buf_end) { \ + c = *pIn_buf_cur++; \ + break; \ + } \ + } else { \ + c = 0; \ + break; \ + } \ + } \ + } else c = *pIn_buf_cur++; } MZ_MACRO_END + +#define TINFL_NEED_BITS(state_index, n) do { mz_uint c; TINFL_GET_BYTE(state_index, c); bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); num_bits += 8; } while (num_bits < (mz_uint)(n)) +#define TINFL_SKIP_BITS(state_index, n) do { if (num_bits < (mz_uint)(n)) { TINFL_NEED_BITS(state_index, n); } bit_buf >>= (n); num_bits -= (n); } MZ_MACRO_END +#define TINFL_GET_BITS(state_index, b, n) do { if (num_bits < (mz_uint)(n)) { TINFL_NEED_BITS(state_index, n); } b = bit_buf & ((1 << (n)) - 1); bit_buf >>= (n); num_bits -= (n); } MZ_MACRO_END + +// TINFL_HUFF_BITBUF_FILL() is only used rarely, when the number of bytes remaining in the input buffer falls below 2. +// It reads just enough bytes from the input stream that are needed to decode the next Huffman code (and absolutely no more). It works by trying to fully decode a +// Huffman code by using whatever bits are currently present in the bit buffer. If this fails, it reads another byte, and tries again until it succeeds or until the +// bit buffer contains >=15 bits (deflate's max. Huffman code size). +#define TINFL_HUFF_BITBUF_FILL(state_index, pHuff) \ + do { \ + temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]; \ + if (temp >= 0) { \ + code_len = temp >> 9; \ + if ((code_len) && (num_bits >= code_len)) \ + break; \ + } else if (num_bits > TINFL_FAST_LOOKUP_BITS) { \ + code_len = TINFL_FAST_LOOKUP_BITS; \ + do { \ + temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \ + } while ((temp < 0) && (num_bits >= (code_len + 1))); if (temp >= 0) break; \ + } TINFL_GET_BYTE(state_index, c); bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); num_bits += 8; \ + } while (num_bits < 15); + +// TINFL_HUFF_DECODE() decodes the next Huffman coded symbol. It's more complex than you would initially expect because the zlib API expects the decompressor to never read +// beyond the final byte of the deflate stream. (In other words, when this macro wants to read another byte from the input, it REALLY needs another byte in order to fully +// decode the next Huffman code.) Handling this properly is particularly important on raw deflate (non-zlib) streams, which aren't followed by a byte aligned adler-32. +// The slow path is only executed at the very end of the input buffer. +#define TINFL_HUFF_DECODE(state_index, sym, pHuff) do { \ + int temp; mz_uint code_len, c; \ + if (num_bits < 15) { \ + if ((pIn_buf_end - pIn_buf_cur) < 2) { \ + TINFL_HUFF_BITBUF_FILL(state_index, pHuff); \ + } else { \ + bit_buf |= (((tinfl_bit_buf_t)pIn_buf_cur[0]) << num_bits) | (((tinfl_bit_buf_t)pIn_buf_cur[1]) << (num_bits + 8)); pIn_buf_cur += 2; num_bits += 16; \ + } \ + } \ + if ((temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) \ + code_len = temp >> 9, temp &= 511; \ + else { \ + code_len = TINFL_FAST_LOOKUP_BITS; do { temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; } while (temp < 0); \ + } sym = temp; bit_buf >>= code_len; num_bits -= code_len; } MZ_MACRO_END + +tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags) +{ + static const int s_length_base[31] = { 3,4,5,6,7,8,9,10,11,13, 15,17,19,23,27,31,35,43,51,59, 67,83,99,115,131,163,195,227,258,0,0 }; + static const int s_length_extra[31]= { 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; + static const int s_dist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, 257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; + static const int s_dist_extra[32] = { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + static const mz_uint8 s_length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; + static const int s_min_table_sizes[3] = { 257, 1, 4 }; + + tinfl_status status = TINFL_STATUS_FAILED; mz_uint32 num_bits, dist, counter, num_extra; tinfl_bit_buf_t bit_buf; + const mz_uint8 *pIn_buf_cur = pIn_buf_next, *const pIn_buf_end = pIn_buf_next + *pIn_buf_size; + mz_uint8 *pOut_buf_cur = pOut_buf_next, *const pOut_buf_end = pOut_buf_next + *pOut_buf_size; + size_t out_buf_size_mask = (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF) ? (size_t)-1 : ((pOut_buf_next - pOut_buf_start) + *pOut_buf_size) - 1, dist_from_out_buf_start; + + // Ensure the output buffer's size is a power of 2, unless the output buffer is large enough to hold the entire output file (in which case it doesn't matter). + if (((out_buf_size_mask + 1) & out_buf_size_mask) || (pOut_buf_next < pOut_buf_start)) { *pIn_buf_size = *pOut_buf_size = 0; return TINFL_STATUS_BAD_PARAM; } + + num_bits = r->m_num_bits; bit_buf = r->m_bit_buf; dist = r->m_dist; counter = r->m_counter; num_extra = r->m_num_extra; dist_from_out_buf_start = r->m_dist_from_out_buf_start; + TINFL_CR_BEGIN + + bit_buf = num_bits = dist = counter = num_extra = r->m_zhdr0 = r->m_zhdr1 = 0; r->m_z_adler32 = r->m_check_adler32 = 1; + if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) + { + TINFL_GET_BYTE(1, r->m_zhdr0); TINFL_GET_BYTE(2, r->m_zhdr1); + counter = (((r->m_zhdr0 * 256 + r->m_zhdr1) % 31 != 0) || (r->m_zhdr1 & 32) || ((r->m_zhdr0 & 15) != 8)); + if (!(decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) counter |= (((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) || ((out_buf_size_mask + 1) < (size_t)(1ULL << (8U + (r->m_zhdr0 >> 4))))); + if (counter) { TINFL_CR_RETURN_FOREVER(36, TINFL_STATUS_FAILED); } + } + + do + { + TINFL_GET_BITS(3, r->m_final, 3); r->m_type = r->m_final >> 1; + if (r->m_type == 0) + { + TINFL_SKIP_BITS(5, num_bits & 7); + for (counter = 0; counter < 4; ++counter) { if (num_bits) TINFL_GET_BITS(6, r->m_raw_header[counter], 8); else TINFL_GET_BYTE(7, r->m_raw_header[counter]); } + if ((counter = (r->m_raw_header[0] | (r->m_raw_header[1] << 8))) != (mz_uint)(0xFFFF ^ (r->m_raw_header[2] | (r->m_raw_header[3] << 8)))) { TINFL_CR_RETURN_FOREVER(39, TINFL_STATUS_FAILED); } + while ((counter) && (num_bits)) + { + TINFL_GET_BITS(51, dist, 8); + while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(52, TINFL_STATUS_HAS_MORE_OUTPUT); } + *pOut_buf_cur++ = (mz_uint8)dist; + counter--; + } + while (counter) + { + size_t n; while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(9, TINFL_STATUS_HAS_MORE_OUTPUT); } + while (pIn_buf_cur >= pIn_buf_end) + { + if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) + { + TINFL_CR_RETURN(38, TINFL_STATUS_NEEDS_MORE_INPUT); + } + else + { + TINFL_CR_RETURN_FOREVER(40, TINFL_STATUS_FAILED); + } + } + n = MZ_MIN(MZ_MIN((size_t)(pOut_buf_end - pOut_buf_cur), (size_t)(pIn_buf_end - pIn_buf_cur)), counter); + TINFL_MEMCPY(pOut_buf_cur, pIn_buf_cur, n); pIn_buf_cur += n; pOut_buf_cur += n; counter -= (mz_uint)n; + } + } + else if (r->m_type == 3) + { + TINFL_CR_RETURN_FOREVER(10, TINFL_STATUS_FAILED); + } + else + { + if (r->m_type == 1) + { + mz_uint8 *p = r->m_tables[0].m_code_size; mz_uint i; + r->m_table_sizes[0] = 288; r->m_table_sizes[1] = 32; TINFL_MEMSET(r->m_tables[1].m_code_size, 5, 32); + for ( i = 0; i <= 143; ++i) *p++ = 8; for ( ; i <= 255; ++i) *p++ = 9; for ( ; i <= 279; ++i) *p++ = 7; for ( ; i <= 287; ++i) *p++ = 8; + } + else + { + for (counter = 0; counter < 3; counter++) { TINFL_GET_BITS(11, r->m_table_sizes[counter], "\05\05\04"[counter]); r->m_table_sizes[counter] += s_min_table_sizes[counter]; } + MZ_CLEAR_OBJ(r->m_tables[2].m_code_size); for (counter = 0; counter < r->m_table_sizes[2]; counter++) { mz_uint s; TINFL_GET_BITS(14, s, 3); r->m_tables[2].m_code_size[s_length_dezigzag[counter]] = (mz_uint8)s; } + r->m_table_sizes[2] = 19; + } + for ( ; (int)r->m_type >= 0; r->m_type--) + { + int tree_next, tree_cur; tinfl_huff_table *pTable; + mz_uint i, j, used_syms, total, sym_index, next_code[17], total_syms[16]; pTable = &r->m_tables[r->m_type]; MZ_CLEAR_OBJ(total_syms); MZ_CLEAR_OBJ(pTable->m_look_up); MZ_CLEAR_OBJ(pTable->m_tree); + for (i = 0; i < r->m_table_sizes[r->m_type]; ++i) total_syms[pTable->m_code_size[i]]++; + used_syms = 0, total = 0; next_code[0] = next_code[1] = 0; + for (i = 1; i <= 15; ++i) { used_syms += total_syms[i]; next_code[i + 1] = (total = ((total + total_syms[i]) << 1)); } + if ((65536 != total) && (used_syms > 1)) + { + TINFL_CR_RETURN_FOREVER(35, TINFL_STATUS_FAILED); + } + for (tree_next = -1, sym_index = 0; sym_index < r->m_table_sizes[r->m_type]; ++sym_index) + { + mz_uint rev_code = 0, l, cur_code, code_size = pTable->m_code_size[sym_index]; if (!code_size) continue; + cur_code = next_code[code_size]++; for (l = code_size; l > 0; l--, cur_code >>= 1) rev_code = (rev_code << 1) | (cur_code & 1); + if (code_size <= TINFL_FAST_LOOKUP_BITS) { mz_int16 k = (mz_int16)((code_size << 9) | sym_index); while (rev_code < TINFL_FAST_LOOKUP_SIZE) { pTable->m_look_up[rev_code] = k; rev_code += (1 << code_size); } continue; } + if (0 == (tree_cur = pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)])) { pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)] = (mz_int16)tree_next; tree_cur = tree_next; tree_next -= 2; } + rev_code >>= (TINFL_FAST_LOOKUP_BITS - 1); + for (j = code_size; j > (TINFL_FAST_LOOKUP_BITS + 1); j--) + { + tree_cur -= ((rev_code >>= 1) & 1); + if (!pTable->m_tree[-tree_cur - 1]) { pTable->m_tree[-tree_cur - 1] = (mz_int16)tree_next; tree_cur = tree_next; tree_next -= 2; } else tree_cur = pTable->m_tree[-tree_cur - 1]; + } + tree_cur -= ((rev_code >>= 1) & 1); pTable->m_tree[-tree_cur - 1] = (mz_int16)sym_index; + } + if (r->m_type == 2) + { + for (counter = 0; counter < (r->m_table_sizes[0] + r->m_table_sizes[1]); ) + { + mz_uint s; TINFL_HUFF_DECODE(16, dist, &r->m_tables[2]); if (dist < 16) { r->m_len_codes[counter++] = (mz_uint8)dist; continue; } + if ((dist == 16) && (!counter)) + { + TINFL_CR_RETURN_FOREVER(17, TINFL_STATUS_FAILED); + } + num_extra = "\02\03\07"[dist - 16]; TINFL_GET_BITS(18, s, num_extra); s += "\03\03\013"[dist - 16]; + TINFL_MEMSET(r->m_len_codes + counter, (dist == 16) ? r->m_len_codes[counter - 1] : 0, s); counter += s; + } + if ((r->m_table_sizes[0] + r->m_table_sizes[1]) != counter) + { + TINFL_CR_RETURN_FOREVER(21, TINFL_STATUS_FAILED); + } + TINFL_MEMCPY(r->m_tables[0].m_code_size, r->m_len_codes, r->m_table_sizes[0]); TINFL_MEMCPY(r->m_tables[1].m_code_size, r->m_len_codes + r->m_table_sizes[0], r->m_table_sizes[1]); + } + } + for ( ; ; ) + { + mz_uint8 *pSrc; + for ( ; ; ) + { + if (((pIn_buf_end - pIn_buf_cur) < 4) || ((pOut_buf_end - pOut_buf_cur) < 2)) + { + TINFL_HUFF_DECODE(23, counter, &r->m_tables[0]); + if (counter >= 256) + break; + while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(24, TINFL_STATUS_HAS_MORE_OUTPUT); } + *pOut_buf_cur++ = (mz_uint8)counter; + } + else + { + int sym2; mz_uint code_len; +#if TINFL_USE_64BIT_BITBUF + if (num_bits < 30) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE32(pIn_buf_cur)) << num_bits); pIn_buf_cur += 4; num_bits += 32; } +#else + if (num_bits < 15) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); pIn_buf_cur += 2; num_bits += 16; } +#endif + if ((sym2 = r->m_tables[0].m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) + code_len = sym2 >> 9; + else + { + code_len = TINFL_FAST_LOOKUP_BITS; do { sym2 = r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; } while (sym2 < 0); + } + counter = sym2; bit_buf >>= code_len; num_bits -= code_len; + if (counter & 256) + break; + +#if !TINFL_USE_64BIT_BITBUF + if (num_bits < 15) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); pIn_buf_cur += 2; num_bits += 16; } +#endif + if ((sym2 = r->m_tables[0].m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) + code_len = sym2 >> 9; + else + { + code_len = TINFL_FAST_LOOKUP_BITS; do { sym2 = r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; } while (sym2 < 0); + } + bit_buf >>= code_len; num_bits -= code_len; + + pOut_buf_cur[0] = (mz_uint8)counter; + if (sym2 & 256) + { + pOut_buf_cur++; + counter = sym2; + break; + } + pOut_buf_cur[1] = (mz_uint8)sym2; + pOut_buf_cur += 2; + } + } + if ((counter &= 511) == 256) break; + + num_extra = s_length_extra[counter - 257]; counter = s_length_base[counter - 257]; + if (num_extra) { mz_uint extra_bits; TINFL_GET_BITS(25, extra_bits, num_extra); counter += extra_bits; } + + TINFL_HUFF_DECODE(26, dist, &r->m_tables[1]); + num_extra = s_dist_extra[dist]; dist = s_dist_base[dist]; + if (num_extra) { mz_uint extra_bits; TINFL_GET_BITS(27, extra_bits, num_extra); dist += extra_bits; } + + dist_from_out_buf_start = pOut_buf_cur - pOut_buf_start; + if ((dist > dist_from_out_buf_start) && (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) + { + TINFL_CR_RETURN_FOREVER(37, TINFL_STATUS_FAILED); + } + + pSrc = pOut_buf_start + ((dist_from_out_buf_start - dist) & out_buf_size_mask); + + if ((MZ_MAX(pOut_buf_cur, pSrc) + counter) > pOut_buf_end) + { + while (counter--) + { + while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(53, TINFL_STATUS_HAS_MORE_OUTPUT); } + *pOut_buf_cur++ = pOut_buf_start[(dist_from_out_buf_start++ - dist) & out_buf_size_mask]; + } + continue; + } +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES + else if ((counter >= 9) && (counter <= dist)) + { + const mz_uint8 *pSrc_end = pSrc + (counter & ~7); + do + { + ((mz_uint32 *)pOut_buf_cur)[0] = ((const mz_uint32 *)pSrc)[0]; + ((mz_uint32 *)pOut_buf_cur)[1] = ((const mz_uint32 *)pSrc)[1]; + pOut_buf_cur += 8; + } while ((pSrc += 8) < pSrc_end); + if ((counter &= 7) < 3) + { + if (counter) + { + pOut_buf_cur[0] = pSrc[0]; + if (counter > 1) + pOut_buf_cur[1] = pSrc[1]; + pOut_buf_cur += counter; + } + continue; + } + } +#endif + do + { + pOut_buf_cur[0] = pSrc[0]; + pOut_buf_cur[1] = pSrc[1]; + pOut_buf_cur[2] = pSrc[2]; + pOut_buf_cur += 3; pSrc += 3; + } while ((int)(counter -= 3) > 2); + if ((int)counter > 0) + { + pOut_buf_cur[0] = pSrc[0]; + if ((int)counter > 1) + pOut_buf_cur[1] = pSrc[1]; + pOut_buf_cur += counter; + } + } + } + } while (!(r->m_final & 1)); + if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) + { + TINFL_SKIP_BITS(32, num_bits & 7); for (counter = 0; counter < 4; ++counter) { mz_uint s; if (num_bits) TINFL_GET_BITS(41, s, 8); else TINFL_GET_BYTE(42, s); r->m_z_adler32 = (r->m_z_adler32 << 8) | s; } + } + TINFL_CR_RETURN_FOREVER(34, TINFL_STATUS_DONE); + TINFL_CR_FINISH + +common_exit: + r->m_num_bits = num_bits; r->m_bit_buf = bit_buf; r->m_dist = dist; r->m_counter = counter; r->m_num_extra = num_extra; r->m_dist_from_out_buf_start = dist_from_out_buf_start; + *pIn_buf_size = pIn_buf_cur - pIn_buf_next; *pOut_buf_size = pOut_buf_cur - pOut_buf_next; + if ((decomp_flags & (TINFL_FLAG_PARSE_ZLIB_HEADER | TINFL_FLAG_COMPUTE_ADLER32)) && (status >= 0)) + { + const mz_uint8 *ptr = pOut_buf_next; size_t buf_len = *pOut_buf_size; + mz_uint32 i, s1 = r->m_check_adler32 & 0xffff, s2 = r->m_check_adler32 >> 16; size_t block_len = buf_len % 5552; + while (buf_len) + { + for (i = 0; i + 7 < block_len; i += 8, ptr += 8) + { + s1 += ptr[0], s2 += s1; s1 += ptr[1], s2 += s1; s1 += ptr[2], s2 += s1; s1 += ptr[3], s2 += s1; + s1 += ptr[4], s2 += s1; s1 += ptr[5], s2 += s1; s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1; + } + for ( ; i < block_len; ++i) s1 += *ptr++, s2 += s1; + s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552; + } + r->m_check_adler32 = (s2 << 16) + s1; if ((status == TINFL_STATUS_DONE) && (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) && (r->m_check_adler32 != r->m_z_adler32)) status = TINFL_STATUS_ADLER32_MISMATCH; + } + return status; +} + +// Higher level helper functions. +void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags) +{ + tinfl_decompressor decomp; void *pBuf = NULL, *pNew_buf; size_t src_buf_ofs = 0, out_buf_capacity = 0; + *pOut_len = 0; + tinfl_init(&decomp); + for ( ; ; ) + { + size_t src_buf_size = src_buf_len - src_buf_ofs, dst_buf_size = out_buf_capacity - *pOut_len, new_out_buf_capacity; + tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8*)pSrc_buf + src_buf_ofs, &src_buf_size, (mz_uint8*)pBuf, pBuf ? (mz_uint8*)pBuf + *pOut_len : NULL, &dst_buf_size, + (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); + if ((status < 0) || (status == TINFL_STATUS_NEEDS_MORE_INPUT)) + { + MZ_FREE(pBuf); *pOut_len = 0; return NULL; + } + src_buf_ofs += src_buf_size; + *pOut_len += dst_buf_size; + if (status == TINFL_STATUS_DONE) break; + new_out_buf_capacity = out_buf_capacity * 2; if (new_out_buf_capacity < 128) new_out_buf_capacity = 128; + pNew_buf = MZ_REALLOC(pBuf, new_out_buf_capacity); + if (!pNew_buf) + { + MZ_FREE(pBuf); *pOut_len = 0; return NULL; + } + pBuf = pNew_buf; out_buf_capacity = new_out_buf_capacity; + } + return pBuf; +} + +size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags) +{ + tinfl_decompressor decomp; tinfl_status status; tinfl_init(&decomp); + status = tinfl_decompress(&decomp, (const mz_uint8*)pSrc_buf, &src_buf_len, (mz_uint8*)pOut_buf, (mz_uint8*)pOut_buf, &out_buf_len, (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); + return (status != TINFL_STATUS_DONE) ? TINFL_DECOMPRESS_MEM_TO_MEM_FAILED : out_buf_len; +} + +int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) +{ + int result = 0; + tinfl_decompressor decomp; + mz_uint8 *pDict = (mz_uint8*)MZ_MALLOC(TINFL_LZ_DICT_SIZE); size_t in_buf_ofs = 0, dict_ofs = 0; + if (!pDict) + return TINFL_STATUS_FAILED; + tinfl_init(&decomp); + for ( ; ; ) + { + size_t in_buf_size = *pIn_buf_size - in_buf_ofs, dst_buf_size = TINFL_LZ_DICT_SIZE - dict_ofs; + tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8*)pIn_buf + in_buf_ofs, &in_buf_size, pDict, pDict + dict_ofs, &dst_buf_size, + (flags & ~(TINFL_FLAG_HAS_MORE_INPUT | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF))); + in_buf_ofs += in_buf_size; + if ((dst_buf_size) && (!(*pPut_buf_func)(pDict + dict_ofs, (int)dst_buf_size, pPut_buf_user))) + break; + if (status != TINFL_STATUS_HAS_MORE_OUTPUT) + { + result = (status == TINFL_STATUS_DONE); + break; + } + dict_ofs = (dict_ofs + dst_buf_size) & (TINFL_LZ_DICT_SIZE - 1); + } + MZ_FREE(pDict); + *pIn_buf_size = in_buf_ofs; + return result; +} + +// ------------------- Low-level Compression (independent from all decompression API's) + +// Purposely making these tables static for faster init and thread safety. +static const mz_uint16 s_tdefl_len_sym[256] = { + 257,258,259,260,261,262,263,264,265,265,266,266,267,267,268,268,269,269,269,269,270,270,270,270,271,271,271,271,272,272,272,272, + 273,273,273,273,273,273,273,273,274,274,274,274,274,274,274,274,275,275,275,275,275,275,275,275,276,276,276,276,276,276,276,276, + 277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278, + 279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280, + 281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281, + 282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282, + 283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283, + 284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,285 }; + +static const mz_uint8 s_tdefl_len_extra[256] = { + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0 }; + +static const mz_uint8 s_tdefl_small_dist_sym[512] = { + 0,1,2,3,4,4,5,5,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 }; + +static const mz_uint8 s_tdefl_small_dist_extra[512] = { + 0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7 }; + +static const mz_uint8 s_tdefl_large_dist_sym[128] = { + 0,0,18,19,20,20,21,21,22,22,22,22,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, + 28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 }; + +static const mz_uint8 s_tdefl_large_dist_extra[128] = { + 0,0,8,8,9,9,9,9,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 }; + +// Radix sorts tdefl_sym_freq[] array by 16-bit key m_key. Returns ptr to sorted values. +typedef struct { mz_uint16 m_key, m_sym_index; } tdefl_sym_freq; +static tdefl_sym_freq* tdefl_radix_sort_syms(mz_uint num_syms, tdefl_sym_freq* pSyms0, tdefl_sym_freq* pSyms1) +{ + mz_uint32 total_passes = 2, pass_shift, pass, i, hist[256 * 2]; tdefl_sym_freq* pCur_syms = pSyms0, *pNew_syms = pSyms1; MZ_CLEAR_OBJ(hist); + for (i = 0; i < num_syms; i++) { mz_uint freq = pSyms0[i].m_key; hist[freq & 0xFF]++; hist[256 + ((freq >> 8) & 0xFF)]++; } + while ((total_passes > 1) && (num_syms == hist[(total_passes - 1) * 256])) total_passes--; + for (pass_shift = 0, pass = 0; pass < total_passes; pass++, pass_shift += 8) + { + const mz_uint32* pHist = &hist[pass << 8]; + mz_uint offsets[256], cur_ofs = 0; + for (i = 0; i < 256; i++) { offsets[i] = cur_ofs; cur_ofs += pHist[i]; } + for (i = 0; i < num_syms; i++) pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) & 0xFF]++] = pCur_syms[i]; + { tdefl_sym_freq* t = pCur_syms; pCur_syms = pNew_syms; pNew_syms = t; } + } + return pCur_syms; +} + +// tdefl_calculate_minimum_redundancy() originally written by: Alistair Moffat, alistair@cs.mu.oz.au, Jyrki Katajainen, jyrki@diku.dk, November 1996. +static void tdefl_calculate_minimum_redundancy(tdefl_sym_freq *A, int n) +{ + int root, leaf, next, avbl, used, dpth; + if (n==0) return; else if (n==1) { A[0].m_key = 1; return; } + A[0].m_key += A[1].m_key; root = 0; leaf = 2; + for (next=1; next < n-1; next++) + { + if (leaf>=n || A[root].m_key=n || (root=0; next--) A[next].m_key = A[A[next].m_key].m_key+1; + avbl = 1; used = dpth = 0; root = n-2; next = n-1; + while (avbl>0) + { + while (root>=0 && (int)A[root].m_key==dpth) { used++; root--; } + while (avbl>used) { A[next--].m_key = (mz_uint16)(dpth); avbl--; } + avbl = 2*used; dpth++; used = 0; + } +} + +// Limits canonical Huffman code table's max code size. +enum { TDEFL_MAX_SUPPORTED_HUFF_CODESIZE = 32 }; +static void tdefl_huffman_enforce_max_code_size(int *pNum_codes, int code_list_len, int max_code_size) +{ + int i; mz_uint32 total = 0; if (code_list_len <= 1) return; + for (i = max_code_size + 1; i <= TDEFL_MAX_SUPPORTED_HUFF_CODESIZE; i++) pNum_codes[max_code_size] += pNum_codes[i]; + for (i = max_code_size; i > 0; i--) total += (((mz_uint32)pNum_codes[i]) << (max_code_size - i)); + while (total != (1UL << max_code_size)) + { + pNum_codes[max_code_size]--; + for (i = max_code_size - 1; i > 0; i--) if (pNum_codes[i]) { pNum_codes[i]--; pNum_codes[i + 1] += 2; break; } + total--; + } +} + +static void tdefl_optimize_huffman_table(tdefl_compressor *d, int table_num, int table_len, int code_size_limit, int static_table) +{ + int i, j, l, num_codes[1 + TDEFL_MAX_SUPPORTED_HUFF_CODESIZE]; mz_uint next_code[TDEFL_MAX_SUPPORTED_HUFF_CODESIZE + 1]; MZ_CLEAR_OBJ(num_codes); + if (static_table) + { + for (i = 0; i < table_len; i++) num_codes[d->m_huff_code_sizes[table_num][i]]++; + } + else + { + tdefl_sym_freq syms0[TDEFL_MAX_HUFF_SYMBOLS], syms1[TDEFL_MAX_HUFF_SYMBOLS], *pSyms; + int num_used_syms = 0; + const mz_uint16 *pSym_count = &d->m_huff_count[table_num][0]; + for (i = 0; i < table_len; i++) if (pSym_count[i]) { syms0[num_used_syms].m_key = (mz_uint16)pSym_count[i]; syms0[num_used_syms++].m_sym_index = (mz_uint16)i; } + + pSyms = tdefl_radix_sort_syms(num_used_syms, syms0, syms1); tdefl_calculate_minimum_redundancy(pSyms, num_used_syms); + + for (i = 0; i < num_used_syms; i++) num_codes[pSyms[i].m_key]++; + + tdefl_huffman_enforce_max_code_size(num_codes, num_used_syms, code_size_limit); + + MZ_CLEAR_OBJ(d->m_huff_code_sizes[table_num]); MZ_CLEAR_OBJ(d->m_huff_codes[table_num]); + for (i = 1, j = num_used_syms; i <= code_size_limit; i++) + for (l = num_codes[i]; l > 0; l--) d->m_huff_code_sizes[table_num][pSyms[--j].m_sym_index] = (mz_uint8)(i); + } + + next_code[1] = 0; for (j = 0, i = 2; i <= code_size_limit; i++) next_code[i] = j = ((j + num_codes[i - 1]) << 1); + + for (i = 0; i < table_len; i++) + { + mz_uint rev_code = 0, code, code_size; if ((code_size = d->m_huff_code_sizes[table_num][i]) == 0) continue; + code = next_code[code_size]++; for (l = code_size; l > 0; l--, code >>= 1) rev_code = (rev_code << 1) | (code & 1); + d->m_huff_codes[table_num][i] = (mz_uint16)rev_code; + } +} + +#define TDEFL_PUT_BITS(b, l) do { \ + mz_uint bits = b; mz_uint len = l; MZ_ASSERT(bits <= ((1U << len) - 1U)); \ + d->m_bit_buffer |= (bits << d->m_bits_in); d->m_bits_in += len; \ + while (d->m_bits_in >= 8) { \ + if (d->m_pOutput_buf < d->m_pOutput_buf_end) \ + *d->m_pOutput_buf++ = (mz_uint8)(d->m_bit_buffer); \ + d->m_bit_buffer >>= 8; \ + d->m_bits_in -= 8; \ + } \ +} MZ_MACRO_END + +#define TDEFL_RLE_PREV_CODE_SIZE() { if (rle_repeat_count) { \ + if (rle_repeat_count < 3) { \ + d->m_huff_count[2][prev_code_size] = (mz_uint16)(d->m_huff_count[2][prev_code_size] + rle_repeat_count); \ + while (rle_repeat_count--) packed_code_sizes[num_packed_code_sizes++] = prev_code_size; \ + } else { \ + d->m_huff_count[2][16] = (mz_uint16)(d->m_huff_count[2][16] + 1); packed_code_sizes[num_packed_code_sizes++] = 16; packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_repeat_count - 3); \ +} rle_repeat_count = 0; } } + +#define TDEFL_RLE_ZERO_CODE_SIZE() { if (rle_z_count) { \ + if (rle_z_count < 3) { \ + d->m_huff_count[2][0] = (mz_uint16)(d->m_huff_count[2][0] + rle_z_count); while (rle_z_count--) packed_code_sizes[num_packed_code_sizes++] = 0; \ + } else if (rle_z_count <= 10) { \ + d->m_huff_count[2][17] = (mz_uint16)(d->m_huff_count[2][17] + 1); packed_code_sizes[num_packed_code_sizes++] = 17; packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 3); \ + } else { \ + d->m_huff_count[2][18] = (mz_uint16)(d->m_huff_count[2][18] + 1); packed_code_sizes[num_packed_code_sizes++] = 18; packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 11); \ +} rle_z_count = 0; } } + +static mz_uint8 s_tdefl_packed_code_size_syms_swizzle[] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; + +static void tdefl_start_dynamic_block(tdefl_compressor *d) +{ + int num_lit_codes, num_dist_codes, num_bit_lengths; mz_uint i, total_code_sizes_to_pack, num_packed_code_sizes, rle_z_count, rle_repeat_count, packed_code_sizes_index; + mz_uint8 code_sizes_to_pack[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], packed_code_sizes[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], prev_code_size = 0xFF; + + d->m_huff_count[0][256] = 1; + + if (d->m_flags & TDEFL_TRACK_TOTAL_HUFF_COUNT) + { + for (int j = 0; j < TDEFL_MAX_HUFF_SYMBOLS_0; j++) + d->m_huff_total_count[0][j] += d->m_huff_count[0][j]; + + for (int j = 0; j < TDEFL_MAX_HUFF_SYMBOLS_1; j++) + d->m_huff_total_count[1][j] += d->m_huff_count[1][j]; + } + + tdefl_optimize_huffman_table(d, 0, TDEFL_MAX_HUFF_SYMBOLS_0, 15, MZ_FALSE); + tdefl_optimize_huffman_table(d, 1, TDEFL_MAX_HUFF_SYMBOLS_1, 15, MZ_FALSE); + + for (num_lit_codes = 286; num_lit_codes > 257; num_lit_codes--) if (d->m_huff_code_sizes[0][num_lit_codes - 1]) break; + for (num_dist_codes = 30; num_dist_codes > 1; num_dist_codes--) if (d->m_huff_code_sizes[1][num_dist_codes - 1]) break; + + memcpy(code_sizes_to_pack, &d->m_huff_code_sizes[0][0], num_lit_codes); + memcpy(code_sizes_to_pack + num_lit_codes, &d->m_huff_code_sizes[1][0], num_dist_codes); + total_code_sizes_to_pack = num_lit_codes + num_dist_codes; num_packed_code_sizes = 0; rle_z_count = 0; rle_repeat_count = 0; + + memset(&d->m_huff_count[2][0], 0, sizeof(d->m_huff_count[2][0]) * TDEFL_MAX_HUFF_SYMBOLS_2); + for (i = 0; i < total_code_sizes_to_pack; i++) + { + mz_uint8 code_size = code_sizes_to_pack[i]; + if (!code_size) + { + TDEFL_RLE_PREV_CODE_SIZE(); + if (++rle_z_count == 138) { TDEFL_RLE_ZERO_CODE_SIZE(); } + } + else + { + TDEFL_RLE_ZERO_CODE_SIZE(); + if (code_size != prev_code_size) + { + TDEFL_RLE_PREV_CODE_SIZE(); + d->m_huff_count[2][code_size] = (mz_uint16)(d->m_huff_count[2][code_size] + 1); packed_code_sizes[num_packed_code_sizes++] = code_size; + } + else if (++rle_repeat_count == 6) + { + TDEFL_RLE_PREV_CODE_SIZE(); + } + } + prev_code_size = code_size; + } + if (rle_repeat_count) { TDEFL_RLE_PREV_CODE_SIZE(); } else { TDEFL_RLE_ZERO_CODE_SIZE(); } + + tdefl_optimize_huffman_table(d, 2, TDEFL_MAX_HUFF_SYMBOLS_2, 7, MZ_FALSE); + + TDEFL_PUT_BITS(2, 2); + + TDEFL_PUT_BITS(num_lit_codes - 257, 5); + TDEFL_PUT_BITS(num_dist_codes - 1, 5); + + for (num_bit_lengths = 18; num_bit_lengths >= 0; num_bit_lengths--) if (d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[num_bit_lengths]]) break; + num_bit_lengths = MZ_MAX(4, (num_bit_lengths + 1)); TDEFL_PUT_BITS(num_bit_lengths - 4, 4); + for (i = 0; (int)i < num_bit_lengths; i++) TDEFL_PUT_BITS(d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[i]], 3); + + for (packed_code_sizes_index = 0; packed_code_sizes_index < num_packed_code_sizes; ) + { + mz_uint code = packed_code_sizes[packed_code_sizes_index++]; MZ_ASSERT(code < TDEFL_MAX_HUFF_SYMBOLS_2); + TDEFL_PUT_BITS(d->m_huff_codes[2][code], d->m_huff_code_sizes[2][code]); + if (code >= 16) TDEFL_PUT_BITS(packed_code_sizes[packed_code_sizes_index++], "\02\03\07"[code - 16]); + } +} + +static void tdefl_start_static_block(tdefl_compressor *d) +{ + mz_uint i; + mz_uint8 *p = &d->m_huff_code_sizes[0][0]; + + for (i = 0; i <= 143; ++i) *p++ = 8; + for ( ; i <= 255; ++i) *p++ = 9; + for ( ; i <= 279; ++i) *p++ = 7; + for ( ; i <= 287; ++i) *p++ = 8; + + memset(d->m_huff_code_sizes[1], 5, 32); + + tdefl_optimize_huffman_table(d, 0, 288, 15, MZ_TRUE); + tdefl_optimize_huffman_table(d, 1, 32, 15, MZ_TRUE); + + TDEFL_PUT_BITS(1, 2); +} + +static const mz_uint mz_bitmasks[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF }; + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && MINIZ_HAS_64BIT_REGISTERS +static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) +{ + mz_uint flags; + mz_uint8 *pLZ_codes; + mz_uint8 *pOutput_buf = d->m_pOutput_buf; + mz_uint8 *pLZ_code_buf_end = d->m_pLZ_code_buf; + mz_uint64 bit_buffer = d->m_bit_buffer; + mz_uint bits_in = d->m_bits_in; + +#define TDEFL_PUT_BITS_FAST(b, l) { bit_buffer |= (((mz_uint64)(b)) << bits_in); bits_in += (l); } + + flags = 1; + for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < pLZ_code_buf_end; flags >>= 1) + { + if (flags == 1) + flags = *pLZ_codes++ | 0x100; + + if (flags & 1) + { + mz_uint s0, s1, n0, n1, sym, num_extra_bits; + mz_uint match_len = pLZ_codes[0], match_dist = *(const mz_uint16 *)(pLZ_codes + 1); pLZ_codes += 3; + + MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS_FAST(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], s_tdefl_len_extra[match_len]); + + // This sequence coaxes MSVC into using cmov's vs. jmp's. + s0 = s_tdefl_small_dist_sym[match_dist & 511]; + n0 = s_tdefl_small_dist_extra[match_dist & 511]; + s1 = s_tdefl_large_dist_sym[match_dist >> 8]; + n1 = s_tdefl_large_dist_extra[match_dist >> 8]; + sym = (match_dist < 512) ? s0 : s1; + num_extra_bits = (match_dist < 512) ? n0 : n1; + + MZ_ASSERT(d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS_FAST(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits); + } + else + { + mz_uint lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + + if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) + { + flags >>= 1; + lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + + if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) + { + flags >>= 1; + lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + } + } + } + + if (pOutput_buf >= d->m_pOutput_buf_end) + return MZ_FALSE; + + *(mz_uint64*)pOutput_buf = bit_buffer; + pOutput_buf += (bits_in >> 3); + bit_buffer >>= (bits_in & ~7); + bits_in &= 7; + } + +#undef TDEFL_PUT_BITS_FAST + + d->m_pOutput_buf = pOutput_buf; + d->m_bits_in = 0; + d->m_bit_buffer = 0; + + while (bits_in) + { + mz_uint32 n = MZ_MIN(bits_in, 16); + TDEFL_PUT_BITS((mz_uint)bit_buffer & mz_bitmasks[n], n); + bit_buffer >>= n; + bits_in -= n; + } + + TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); + + return (d->m_pOutput_buf < d->m_pOutput_buf_end); +} +#else +static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) +{ + mz_uint flags; + mz_uint8 *pLZ_codes; + + flags = 1; + for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < d->m_pLZ_code_buf; flags >>= 1) + { + if (flags == 1) + flags = *pLZ_codes++ | 0x100; + if (flags & 1) + { + mz_uint sym, num_extra_bits; + mz_uint match_len = pLZ_codes[0], match_dist = (pLZ_codes[1] | (pLZ_codes[2] << 8)); pLZ_codes += 3; + + MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], s_tdefl_len_extra[match_len]); + + if (match_dist < 512) + { + sym = s_tdefl_small_dist_sym[match_dist]; num_extra_bits = s_tdefl_small_dist_extra[match_dist]; + } + else + { + sym = s_tdefl_large_dist_sym[match_dist >> 8]; num_extra_bits = s_tdefl_large_dist_extra[match_dist >> 8]; + } + MZ_ASSERT(d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits); + } + else + { + mz_uint lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + } + } + + TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); + + return (d->m_pOutput_buf < d->m_pOutput_buf_end); +} +#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && MINIZ_HAS_64BIT_REGISTERS + +static mz_bool tdefl_compress_block(tdefl_compressor *d, mz_bool static_block) +{ + if (static_block) + tdefl_start_static_block(d); + else + tdefl_start_dynamic_block(d); + return tdefl_compress_lz_codes(d); +} + +static int tdefl_flush_block(tdefl_compressor *d, int flush) +{ + mz_uint saved_bit_buf, saved_bits_in; + mz_uint8 *pSaved_output_buf; + mz_bool comp_block_succeeded = MZ_FALSE; + int n, use_raw_block = ((d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS) != 0) && (d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size; + mz_uint8 *pOutput_buf_start = ((d->m_pPut_buf_func == NULL) && ((*d->m_pOut_buf_size - d->m_out_buf_ofs) >= TDEFL_OUT_BUF_SIZE)) ? ((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs) : d->m_output_buf; + + d->m_pOutput_buf = pOutput_buf_start; + d->m_pOutput_buf_end = d->m_pOutput_buf + TDEFL_OUT_BUF_SIZE - 16; + + MZ_ASSERT(!d->m_output_flush_remaining); + d->m_output_flush_ofs = 0; + d->m_output_flush_remaining = 0; + + *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> d->m_num_flags_left); + d->m_pLZ_code_buf -= (d->m_num_flags_left == 8); + + if ((d->m_flags & TDEFL_WRITE_ZLIB_HEADER) && (!d->m_block_index)) + { + TDEFL_PUT_BITS(0x78, 8); TDEFL_PUT_BITS(0x01, 8); + } + + TDEFL_PUT_BITS(flush == TDEFL_FINISH, 1); + + pSaved_output_buf = d->m_pOutput_buf; saved_bit_buf = d->m_bit_buffer; saved_bits_in = d->m_bits_in; + + if (!use_raw_block) + comp_block_succeeded = tdefl_compress_block(d, (d->m_flags & TDEFL_FORCE_ALL_STATIC_BLOCKS) || (d->m_total_lz_bytes < 48)); + + // If the block gets expanded, forget the current contents of the output buffer and send a raw block instead. + if ( ((use_raw_block) || ((d->m_total_lz_bytes) && ((d->m_pOutput_buf - pSaved_output_buf + 1U) >= d->m_total_lz_bytes))) && + ((d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size) ) + { + mz_uint i; d->m_pOutput_buf = pSaved_output_buf; d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; + TDEFL_PUT_BITS(0, 2); + if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } + for (i = 2; i; --i, d->m_total_lz_bytes ^= 0xFFFF) + { + TDEFL_PUT_BITS(d->m_total_lz_bytes & 0xFFFF, 16); + } + for (i = 0; i < d->m_total_lz_bytes; ++i) + { + TDEFL_PUT_BITS(d->m_dict[(d->m_lz_code_buf_dict_pos + i) & TDEFL_LZ_DICT_SIZE_MASK], 8); + } + } + // Check for the extremely unlikely (if not impossible) case of the compressed block not fitting into the output buffer when using dynamic codes. + else if (!comp_block_succeeded) + { + d->m_pOutput_buf = pSaved_output_buf; d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; + tdefl_compress_block(d, MZ_TRUE); + } + + if (flush) + { + if (flush == TDEFL_FINISH) + { + if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } + if (d->m_flags & TDEFL_WRITE_ZLIB_HEADER) { mz_uint i, a = d->m_adler32; for (i = 0; i < 4; i++) { TDEFL_PUT_BITS((a >> 24) & 0xFF, 8); a <<= 8; } } + } + else + { + mz_uint i, z = 0; TDEFL_PUT_BITS(0, 3); if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } for (i = 2; i; --i, z ^= 0xFFFF) { TDEFL_PUT_BITS(z & 0xFFFF, 16); } + } + } + + MZ_ASSERT(d->m_pOutput_buf < d->m_pOutput_buf_end); + + memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); + memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); + + d->m_pLZ_code_buf = d->m_lz_code_buf + 1; d->m_pLZ_flags = d->m_lz_code_buf; d->m_num_flags_left = 8; d->m_lz_code_buf_dict_pos += d->m_total_lz_bytes; d->m_total_lz_bytes = 0; d->m_block_index++; + + if ((n = (int)(d->m_pOutput_buf - pOutput_buf_start)) != 0) + { + if (d->m_pPut_buf_func) + { + *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; + if (!(*d->m_pPut_buf_func)(d->m_output_buf, n, d->m_pPut_buf_user)) + return (d->m_prev_return_status = TDEFL_STATUS_PUT_BUF_FAILED); + } + else if (pOutput_buf_start == d->m_output_buf) + { + int bytes_to_copy = (int)MZ_MIN((size_t)n, (size_t)(*d->m_pOut_buf_size - d->m_out_buf_ofs)); + memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf, bytes_to_copy); + d->m_out_buf_ofs += bytes_to_copy; + if ((n -= bytes_to_copy) != 0) + { + d->m_output_flush_ofs = bytes_to_copy; + d->m_output_flush_remaining = n; + } + } + else + { + d->m_out_buf_ofs += n; + } + } + + return d->m_output_flush_remaining; +} + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES +#define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16*)(p) +static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) +{ + mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; + mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; + const mz_uint16 *s = (const mz_uint16*)(d->m_dict + pos), *p, *q; + mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]), s01 = TDEFL_READ_UNALIGNED_WORD(s); + MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); if (max_match_len <= match_len) return; + for ( ; ; ) + { + for ( ; ; ) + { + if (--num_probes_left == 0) return; + #define TDEFL_PROBE \ + next_probe_pos = d->m_next[probe_pos]; \ + if ((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) return; \ + probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ + if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) break; + TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE; + } + if (!dist) break; q = (const mz_uint16*)(d->m_dict + probe_pos); if (TDEFL_READ_UNALIGNED_WORD(q) != s01) continue; p = s; probe_len = 32; + do { } while ( (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && + (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (--probe_len > 0) ); + if (!probe_len) + { + *pMatch_dist = dist; *pMatch_len = MZ_MIN(max_match_len, TDEFL_MAX_MATCH_LEN); break; + } + else if ((probe_len = ((mz_uint)(p - s) * 2) + (mz_uint)(*(const mz_uint8*)p == *(const mz_uint8*)q)) > match_len) + { + *pMatch_dist = dist; if ((*pMatch_len = match_len = MZ_MIN(max_match_len, probe_len)) == max_match_len) break; + c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]); + } + } +} +#else +static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) +{ + mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; + mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; + const mz_uint8 *s = d->m_dict + pos, *p, *q; + mz_uint8 c0 = d->m_dict[pos + match_len], c1 = d->m_dict[pos + match_len - 1]; + MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); if (max_match_len <= match_len) return; + for ( ; ; ) + { + for ( ; ; ) + { + if (--num_probes_left == 0) return; + #define TDEFL_PROBE \ + next_probe_pos = d->m_next[probe_pos]; \ + if ((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) return; \ + probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ + if ((d->m_dict[probe_pos + match_len] == c0) && (d->m_dict[probe_pos + match_len - 1] == c1)) break; + TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE; + } + if (!dist) break; p = s; q = d->m_dict + probe_pos; for (probe_len = 0; probe_len < max_match_len; probe_len++) if (*p++ != *q++) break; + if (probe_len > match_len) + { + *pMatch_dist = dist; if ((*pMatch_len = match_len = probe_len) == max_match_len) return; + c0 = d->m_dict[pos + match_len]; c1 = d->m_dict[pos + match_len - 1]; + } + } +} +#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN +static mz_bool tdefl_compress_fast(tdefl_compressor *d) +{ + // Faster, minimally featured LZRW1-style match+parse loop with better register utilization. Intended for applications where raw throughput is valued more highly than ratio. + mz_uint lookahead_pos = d->m_lookahead_pos, lookahead_size = d->m_lookahead_size, dict_size = d->m_dict_size, total_lz_bytes = d->m_total_lz_bytes, num_flags_left = d->m_num_flags_left; + mz_uint8 *pLZ_code_buf = d->m_pLZ_code_buf, *pLZ_flags = d->m_pLZ_flags; + mz_uint cur_pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; + + while ((d->m_src_buf_left) || ((d->m_flush) && (lookahead_size))) + { + const mz_uint TDEFL_COMP_FAST_LOOKAHEAD_SIZE = 4096; + mz_uint dst_pos = (lookahead_pos + lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK; + mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(d->m_src_buf_left, TDEFL_COMP_FAST_LOOKAHEAD_SIZE - lookahead_size); + d->m_src_buf_left -= num_bytes_to_process; + lookahead_size += num_bytes_to_process; + + while (num_bytes_to_process) + { + mz_uint32 n = MZ_MIN(TDEFL_LZ_DICT_SIZE - dst_pos, num_bytes_to_process); + memcpy(d->m_dict + dst_pos, d->m_pSrc, n); + if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) + memcpy(d->m_dict + TDEFL_LZ_DICT_SIZE + dst_pos, d->m_pSrc, MZ_MIN(n, (TDEFL_MAX_MATCH_LEN - 1) - dst_pos)); + d->m_pSrc += n; + dst_pos = (dst_pos + n) & TDEFL_LZ_DICT_SIZE_MASK; + num_bytes_to_process -= n; + } + + dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - lookahead_size, dict_size); + if ((!d->m_flush) && (lookahead_size < TDEFL_COMP_FAST_LOOKAHEAD_SIZE)) break; + + while (lookahead_size >= 4) + { + mz_uint cur_match_dist, cur_match_len = 1; + mz_uint8 *pCur_dict = d->m_dict + cur_pos; + mz_uint first_trigram = (*(const mz_uint32 *)pCur_dict) & 0xFFFFFF; + mz_uint hash = (first_trigram ^ (first_trigram >> (24 - (TDEFL_LZ_HASH_BITS - 8)))) & TDEFL_LEVEL1_HASH_SIZE_MASK; + mz_uint probe_pos = d->m_hash[hash]; + d->m_hash[hash] = (mz_uint16)lookahead_pos; + + if (((cur_match_dist = (mz_uint16)(lookahead_pos - probe_pos)) <= dict_size) && ((*(const mz_uint32 *)(d->m_dict + (probe_pos &= TDEFL_LZ_DICT_SIZE_MASK)) & 0xFFFFFF) == first_trigram)) + { + const mz_uint16 *p = (const mz_uint16 *)pCur_dict; + const mz_uint16 *q = (const mz_uint16 *)(d->m_dict + probe_pos); + mz_uint32 probe_len = 32; + do { } while ( (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && + (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (--probe_len > 0) ); + cur_match_len = ((mz_uint)(p - (const mz_uint16 *)pCur_dict) * 2) + (mz_uint)(*(const mz_uint8 *)p == *(const mz_uint8 *)q); + if (!probe_len) + cur_match_len = cur_match_dist ? TDEFL_MAX_MATCH_LEN : 0; + + if ((cur_match_len < TDEFL_MIN_MATCH_LEN) || ((cur_match_len == TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 8U*1024U))) + { + cur_match_len = 1; + *pLZ_code_buf++ = (mz_uint8)first_trigram; + *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); + d->m_huff_count[0][(mz_uint8)first_trigram]++; + } + else + { + mz_uint32 s0, s1; + cur_match_len = MZ_MIN(cur_match_len, lookahead_size); + + MZ_ASSERT((cur_match_len >= TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 1) && (cur_match_dist <= TDEFL_LZ_DICT_SIZE)); + + cur_match_dist--; + + pLZ_code_buf[0] = (mz_uint8)(cur_match_len - TDEFL_MIN_MATCH_LEN); + *(mz_uint16 *)(&pLZ_code_buf[1]) = (mz_uint16)cur_match_dist; + pLZ_code_buf += 3; + *pLZ_flags = (mz_uint8)((*pLZ_flags >> 1) | 0x80); + + s0 = s_tdefl_small_dist_sym[cur_match_dist & 511]; + s1 = s_tdefl_large_dist_sym[cur_match_dist >> 8]; + d->m_huff_count[1][(cur_match_dist < 512) ? s0 : s1]++; + + d->m_huff_count[0][s_tdefl_len_sym[cur_match_len - TDEFL_MIN_MATCH_LEN]]++; + } + } + else + { + *pLZ_code_buf++ = (mz_uint8)first_trigram; + *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); + d->m_huff_count[0][(mz_uint8)first_trigram]++; + } + + if (--num_flags_left == 0) { num_flags_left = 8; pLZ_flags = pLZ_code_buf++; } + + total_lz_bytes += cur_match_len; + lookahead_pos += cur_match_len; + dict_size = MZ_MIN(dict_size + cur_match_len, TDEFL_LZ_DICT_SIZE); + cur_pos = (cur_pos + cur_match_len) & TDEFL_LZ_DICT_SIZE_MASK; + MZ_ASSERT(lookahead_size >= cur_match_len); + lookahead_size -= cur_match_len; + + if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) + { + int n; + d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; + d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; + if ((n = tdefl_flush_block(d, 0)) != 0) + return (n < 0) ? MZ_FALSE : MZ_TRUE; + total_lz_bytes = d->m_total_lz_bytes; pLZ_code_buf = d->m_pLZ_code_buf; pLZ_flags = d->m_pLZ_flags; num_flags_left = d->m_num_flags_left; + } + } + + while (lookahead_size) + { + mz_uint8 lit = d->m_dict[cur_pos]; + + total_lz_bytes++; + *pLZ_code_buf++ = lit; + *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); + if (--num_flags_left == 0) { num_flags_left = 8; pLZ_flags = pLZ_code_buf++; } + + d->m_huff_count[0][lit]++; + + lookahead_pos++; + dict_size = MZ_MIN(dict_size + 1, TDEFL_LZ_DICT_SIZE); + cur_pos = (cur_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; + lookahead_size--; + + if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) + { + int n; + d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; + d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; + if ((n = tdefl_flush_block(d, 0)) != 0) + return (n < 0) ? MZ_FALSE : MZ_TRUE; + total_lz_bytes = d->m_total_lz_bytes; pLZ_code_buf = d->m_pLZ_code_buf; pLZ_flags = d->m_pLZ_flags; num_flags_left = d->m_num_flags_left; + } + } + } + + d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; + d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; + return MZ_TRUE; +} +#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN + +static MZ_FORCEINLINE void tdefl_record_literal(tdefl_compressor *d, mz_uint8 lit) +{ + d->m_total_lz_bytes++; + *d->m_pLZ_code_buf++ = lit; + *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> 1); if (--d->m_num_flags_left == 0) { d->m_num_flags_left = 8; d->m_pLZ_flags = d->m_pLZ_code_buf++; } + d->m_huff_count[0][lit]++; +} + +static MZ_FORCEINLINE void tdefl_record_match(tdefl_compressor *d, mz_uint match_len, mz_uint match_dist) +{ + mz_uint32 s0, s1; + + MZ_ASSERT((match_len >= TDEFL_MIN_MATCH_LEN) && (match_dist >= 1) && (match_dist <= TDEFL_LZ_DICT_SIZE)); + + d->m_total_lz_bytes += match_len; + + d->m_pLZ_code_buf[0] = (mz_uint8)(match_len - TDEFL_MIN_MATCH_LEN); + + match_dist -= 1; + d->m_pLZ_code_buf[1] = (mz_uint8)(match_dist & 0xFF); + d->m_pLZ_code_buf[2] = (mz_uint8)(match_dist >> 8); d->m_pLZ_code_buf += 3; + + *d->m_pLZ_flags = (mz_uint8)((*d->m_pLZ_flags >> 1) | 0x80); if (--d->m_num_flags_left == 0) { d->m_num_flags_left = 8; d->m_pLZ_flags = d->m_pLZ_code_buf++; } + + s0 = s_tdefl_small_dist_sym[match_dist & 511]; s1 = s_tdefl_large_dist_sym[(match_dist >> 8) & 127]; + d->m_huff_count[1][(match_dist < 512) ? s0 : s1]++; + + if (match_len >= TDEFL_MIN_MATCH_LEN) d->m_huff_count[0][s_tdefl_len_sym[match_len - TDEFL_MIN_MATCH_LEN]]++; +} + +static mz_bool tdefl_compress_normal(tdefl_compressor *d) +{ + const mz_uint8 *pSrc = d->m_pSrc; size_t src_buf_left = d->m_src_buf_left; + tdefl_flush flush = d->m_flush; + + while ((src_buf_left) || ((flush) && (d->m_lookahead_size))) + { + mz_uint len_to_move, cur_match_dist, cur_match_len, cur_pos; + // Update dictionary and hash chains. Keeps the lookahead size equal to TDEFL_MAX_MATCH_LEN. + if ((d->m_lookahead_size + d->m_dict_size) >= (TDEFL_MIN_MATCH_LEN - 1)) + { + mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK, ins_pos = d->m_lookahead_pos + d->m_lookahead_size - 2; + mz_uint hash = (d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK]; + mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(src_buf_left, TDEFL_MAX_MATCH_LEN - d->m_lookahead_size); + const mz_uint8 *pSrc_end = pSrc + num_bytes_to_process; + src_buf_left -= num_bytes_to_process; + d->m_lookahead_size += num_bytes_to_process; + while (pSrc != pSrc_end) + { + mz_uint8 c = *pSrc++; d->m_dict[dst_pos] = c; if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; + hash = ((hash << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1); + d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)(ins_pos); + dst_pos = (dst_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; ins_pos++; + } + } + else + { + while ((src_buf_left) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) + { + mz_uint8 c = *pSrc++; + mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK; + src_buf_left--; + d->m_dict[dst_pos] = c; + if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) + d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; + if ((++d->m_lookahead_size + d->m_dict_size) >= TDEFL_MIN_MATCH_LEN) + { + mz_uint ins_pos = d->m_lookahead_pos + (d->m_lookahead_size - 1) - 2; + mz_uint hash = ((d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << (TDEFL_LZ_HASH_SHIFT * 2)) ^ (d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1); + d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)(ins_pos); + } + } + } + d->m_dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - d->m_lookahead_size, d->m_dict_size); + if ((!flush) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) + break; + + // Simple lazy/greedy parsing state machine. + len_to_move = 1; cur_match_dist = 0; cur_match_len = d->m_saved_match_len ? d->m_saved_match_len : (TDEFL_MIN_MATCH_LEN - 1); cur_pos = d->m_lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; + if (d->m_flags & (TDEFL_RLE_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS)) + { + if ((d->m_dict_size) && (!(d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) + { + mz_uint8 c = d->m_dict[(cur_pos - 1) & TDEFL_LZ_DICT_SIZE_MASK]; + cur_match_len = 0; while (cur_match_len < d->m_lookahead_size) { if (d->m_dict[cur_pos + cur_match_len] != c) break; cur_match_len++; } + if (cur_match_len < TDEFL_MIN_MATCH_LEN) cur_match_len = 0; else cur_match_dist = 1; + } + } + else + { + tdefl_find_match(d, d->m_lookahead_pos, d->m_dict_size, d->m_lookahead_size, &cur_match_dist, &cur_match_len); + } + if (((cur_match_len == TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 8U*1024U)) || (cur_pos == cur_match_dist) || ((d->m_flags & TDEFL_FILTER_MATCHES) && (cur_match_len <= 5))) + { + cur_match_dist = cur_match_len = 0; + } + if (d->m_saved_match_len) + { + if (cur_match_len > d->m_saved_match_len) + { + tdefl_record_literal(d, (mz_uint8)d->m_saved_lit); + if (cur_match_len >= 128) + { + tdefl_record_match(d, cur_match_len, cur_match_dist); + d->m_saved_match_len = 0; len_to_move = cur_match_len; + } + else + { + d->m_saved_lit = d->m_dict[cur_pos]; d->m_saved_match_dist = cur_match_dist; d->m_saved_match_len = cur_match_len; + } + } + else + { + tdefl_record_match(d, d->m_saved_match_len, d->m_saved_match_dist); + len_to_move = d->m_saved_match_len - 1; d->m_saved_match_len = 0; + } + } + else if (!cur_match_dist) + tdefl_record_literal(d, d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]); + else if ((d->m_greedy_parsing) || (d->m_flags & TDEFL_RLE_MATCHES) || (cur_match_len >= 128)) + { + tdefl_record_match(d, cur_match_len, cur_match_dist); + len_to_move = cur_match_len; + } + else + { + d->m_saved_lit = d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]; d->m_saved_match_dist = cur_match_dist; d->m_saved_match_len = cur_match_len; + } + // Move the lookahead forward by len_to_move bytes. + d->m_lookahead_pos += len_to_move; + MZ_ASSERT(d->m_lookahead_size >= len_to_move); + d->m_lookahead_size -= len_to_move; + d->m_dict_size = MZ_MIN(d->m_dict_size + len_to_move, TDEFL_LZ_DICT_SIZE); + // Check if it's time to flush the current LZ codes to the internal output buffer. + if ( (d->m_pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) || + ( (d->m_total_lz_bytes > 31*1024) && (((((mz_uint)(d->m_pLZ_code_buf - d->m_lz_code_buf) * 115) >> 7) >= d->m_total_lz_bytes) || (d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) ) + { + int n; + d->m_pSrc = pSrc; d->m_src_buf_left = src_buf_left; + if ((n = tdefl_flush_block(d, 0)) != 0) + return (n < 0) ? MZ_FALSE : MZ_TRUE; + } + } + + d->m_pSrc = pSrc; d->m_src_buf_left = src_buf_left; + return MZ_TRUE; +} + +static tdefl_status tdefl_flush_output_buffer(tdefl_compressor *d) +{ + if (d->m_pIn_buf_size) + { + *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; + } + + if (d->m_pOut_buf_size) + { + size_t n = MZ_MIN(*d->m_pOut_buf_size - d->m_out_buf_ofs, d->m_output_flush_remaining); + memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf + d->m_output_flush_ofs, n); + d->m_output_flush_ofs += (mz_uint)n; + d->m_output_flush_remaining -= (mz_uint)n; + d->m_out_buf_ofs += n; + + *d->m_pOut_buf_size = d->m_out_buf_ofs; + } + + return (d->m_finished && !d->m_output_flush_remaining) ? TDEFL_STATUS_DONE : TDEFL_STATUS_OKAY; +} + +tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush) +{ + if (!d) + { + if (pIn_buf_size) *pIn_buf_size = 0; + if (pOut_buf_size) *pOut_buf_size = 0; + return TDEFL_STATUS_BAD_PARAM; + } + + d->m_pIn_buf = pIn_buf; d->m_pIn_buf_size = pIn_buf_size; + d->m_pOut_buf = pOut_buf; d->m_pOut_buf_size = pOut_buf_size; + d->m_pSrc = (const mz_uint8 *)(pIn_buf); d->m_src_buf_left = pIn_buf_size ? *pIn_buf_size : 0; + d->m_out_buf_ofs = 0; + d->m_flush = flush; + + if ( ((d->m_pPut_buf_func != NULL) == ((pOut_buf != NULL) || (pOut_buf_size != NULL))) || (d->m_prev_return_status != TDEFL_STATUS_OKAY) || + (d->m_wants_to_finish && (flush != TDEFL_FINISH)) || (pIn_buf_size && *pIn_buf_size && !pIn_buf) || (pOut_buf_size && *pOut_buf_size && !pOut_buf) ) + { + if (pIn_buf_size) *pIn_buf_size = 0; + if (pOut_buf_size) *pOut_buf_size = 0; + return (d->m_prev_return_status = TDEFL_STATUS_BAD_PARAM); + } + d->m_wants_to_finish |= (flush == TDEFL_FINISH); + + if ((d->m_output_flush_remaining) || (d->m_finished)) + return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN + if (((d->m_flags & TDEFL_MAX_PROBES_MASK) == 1) && + ((d->m_flags & TDEFL_GREEDY_PARSING_FLAG) != 0) && + ((d->m_flags & (TDEFL_FILTER_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS | TDEFL_RLE_MATCHES)) == 0)) + { + if (!tdefl_compress_fast(d)) + return d->m_prev_return_status; + } + else +#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN + { + if (!tdefl_compress_normal(d)) + return d->m_prev_return_status; + } + + if ((d->m_flags & (TDEFL_WRITE_ZLIB_HEADER | TDEFL_COMPUTE_ADLER32)) && (pIn_buf)) + d->m_adler32 = (mz_uint32)mz_adler32(d->m_adler32, (const mz_uint8 *)pIn_buf, d->m_pSrc - (const mz_uint8 *)pIn_buf); + + if ((flush) && (!d->m_lookahead_size) && (!d->m_src_buf_left) && (!d->m_output_flush_remaining)) + { + if (tdefl_flush_block(d, flush) < 0) + return d->m_prev_return_status; + d->m_finished = (flush == TDEFL_FINISH); + if (flush == TDEFL_FULL_FLUSH) { MZ_CLEAR_OBJ(d->m_hash); MZ_CLEAR_OBJ(d->m_next); d->m_dict_size = 0; } + } + + return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); +} + +tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush) +{ + MZ_ASSERT(d->m_pPut_buf_func); return tdefl_compress(d, pIn_buf, &in_buf_size, NULL, NULL, flush); +} + +tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) +{ + d->m_pPut_buf_func = pPut_buf_func; d->m_pPut_buf_user = pPut_buf_user; + d->m_flags = (mz_uint)(flags); d->m_max_probes[0] = 1 + ((flags & 0xFFF) + 2) / 3; d->m_greedy_parsing = (flags & TDEFL_GREEDY_PARSING_FLAG) != 0; + d->m_max_probes[1] = 1 + (((flags & 0xFFF) >> 2) + 2) / 3; + if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG)) MZ_CLEAR_OBJ(d->m_hash); + d->m_lookahead_pos = d->m_lookahead_size = d->m_dict_size = d->m_total_lz_bytes = d->m_lz_code_buf_dict_pos = d->m_bits_in = 0; + d->m_output_flush_ofs = d->m_output_flush_remaining = d->m_finished = d->m_block_index = d->m_bit_buffer = d->m_wants_to_finish = 0; + d->m_pLZ_code_buf = d->m_lz_code_buf + 1; d->m_pLZ_flags = d->m_lz_code_buf; d->m_num_flags_left = 8; + d->m_pOutput_buf = d->m_output_buf; d->m_pOutput_buf_end = d->m_output_buf; d->m_prev_return_status = TDEFL_STATUS_OKAY; + d->m_saved_match_dist = d->m_saved_match_len = d->m_saved_lit = 0; d->m_adler32 = 1; + d->m_pIn_buf = NULL; d->m_pOut_buf = NULL; + d->m_pIn_buf_size = NULL; d->m_pOut_buf_size = NULL; + d->m_flush = TDEFL_NO_FLUSH; d->m_pSrc = NULL; d->m_src_buf_left = 0; d->m_out_buf_ofs = 0; + memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); + memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); + + if (d->m_flags & TDEFL_TRACK_TOTAL_HUFF_COUNT) + { + memset(&d->m_huff_total_count[0][0], 0, sizeof(d->m_huff_total_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); + memset(&d->m_huff_total_count[1][0], 0, sizeof(d->m_huff_total_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); + } + + return TDEFL_STATUS_OKAY; +} + +tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d) +{ + return d->m_prev_return_status; +} + +mz_uint32 tdefl_get_adler32(tdefl_compressor *d) +{ + return d->m_adler32; +} + +mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) +{ + tdefl_compressor *pComp; mz_bool succeeded; if (((buf_len) && (!pBuf)) || (!pPut_buf_func)) return MZ_FALSE; + pComp = (tdefl_compressor*)MZ_MALLOC(sizeof(tdefl_compressor)); if (!pComp) return MZ_FALSE; + succeeded = (tdefl_init(pComp, pPut_buf_func, pPut_buf_user, flags) == TDEFL_STATUS_OKAY); + succeeded = succeeded && (tdefl_compress_buffer(pComp, pBuf, buf_len, TDEFL_FINISH) == TDEFL_STATUS_DONE); + MZ_FREE(pComp); return succeeded; +} + +typedef struct +{ + size_t m_size, m_capacity; + mz_uint8 *m_pBuf; + mz_bool m_expandable; +} tdefl_output_buffer; + +static mz_bool tdefl_output_buffer_putter(const void *pBuf, int len, void *pUser) +{ + tdefl_output_buffer *p = (tdefl_output_buffer *)pUser; + size_t new_size = p->m_size + len; + if (new_size > p->m_capacity) + { + size_t new_capacity = p->m_capacity; mz_uint8 *pNew_buf; if (!p->m_expandable) return MZ_FALSE; + do { new_capacity = MZ_MAX(128U, new_capacity << 1U); } while (new_size > new_capacity); + pNew_buf = (mz_uint8*)MZ_REALLOC(p->m_pBuf, new_capacity); if (!pNew_buf) return MZ_FALSE; + p->m_pBuf = pNew_buf; p->m_capacity = new_capacity; + } + memcpy((mz_uint8*)p->m_pBuf + p->m_size, pBuf, len); p->m_size = new_size; + return MZ_TRUE; +} + +void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags) +{ + tdefl_output_buffer out_buf; MZ_CLEAR_OBJ(out_buf); + if (!pOut_len) return MZ_FALSE; else *pOut_len = 0; + out_buf.m_expandable = MZ_TRUE; + if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) return NULL; + *pOut_len = out_buf.m_size; return out_buf.m_pBuf; +} + +size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags) +{ + tdefl_output_buffer out_buf; MZ_CLEAR_OBJ(out_buf); + if (!pOut_buf) return 0; + out_buf.m_pBuf = (mz_uint8*)pOut_buf; out_buf.m_capacity = out_buf_len; + if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) return 0; + return out_buf.m_size; +} + +#ifndef MINIZ_NO_ZLIB_APIS +static const mz_uint s_tdefl_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 }; + +// level may actually range from [0,10] (10 is a "hidden" max level, where we want a bit more compression and it's fine if throughput to fall off a cliff on some files). +mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy) +{ + mz_uint comp_flags = s_tdefl_num_probes[(level >= 0) ? MZ_MIN(10, level) : MZ_DEFAULT_LEVEL] | ((level <= 3) ? TDEFL_GREEDY_PARSING_FLAG : 0); + if (window_bits > 0) comp_flags |= TDEFL_WRITE_ZLIB_HEADER; + + if (!level) comp_flags |= TDEFL_FORCE_ALL_RAW_BLOCKS; + else if (strategy == MZ_FILTERED) comp_flags |= TDEFL_FILTER_MATCHES; + else if (strategy == MZ_HUFFMAN_ONLY) comp_flags &= ~TDEFL_MAX_PROBES_MASK; + else if (strategy == MZ_FIXED) comp_flags |= TDEFL_FORCE_ALL_STATIC_BLOCKS; + else if (strategy == MZ_RLE) comp_flags |= TDEFL_RLE_MATCHES; + + return comp_flags; +} +#endif //MINIZ_NO_ZLIB_APIS + +#ifdef _MSC_VER +#pragma warning (push) +#pragma warning (disable:4204) // nonstandard extension used : non-constant aggregate initializer (also supported by GNU C and C99, so no big deal) +#endif + +// Simple PNG writer function by Alex Evans, 2011. Released into the public domain: https://gist.github.com/908299, more context at +// http://altdevblogaday.org/2011/04/06/a-smaller-jpg-encoder/. +// This is actually a modification of Alex's original code so PNG files generated by this function pass pngcheck. +void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int h, int num_chans, size_t *pLen_out, mz_uint level, mz_bool flip) +{ + // Using a local copy of this array here in case MINIZ_NO_ZLIB_APIS was defined. + static const mz_uint s_tdefl_png_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 }; + tdefl_compressor *pComp = (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); tdefl_output_buffer out_buf; int i, bpl = w * num_chans, y, z; mz_uint32 c; *pLen_out = 0; + if (!pComp) return NULL; + MZ_CLEAR_OBJ(out_buf); out_buf.m_expandable = MZ_TRUE; out_buf.m_capacity = 57+MZ_MAX(64, (1+bpl)*h); if (NULL == (out_buf.m_pBuf = (mz_uint8*)MZ_MALLOC(out_buf.m_capacity))) { MZ_FREE(pComp); return NULL; } + // write dummy header + for (z = 41; z; --z) tdefl_output_buffer_putter(&z, 1, &out_buf); + // compress image data + tdefl_init(pComp, tdefl_output_buffer_putter, &out_buf, s_tdefl_png_num_probes[MZ_MIN(10, level)] | TDEFL_WRITE_ZLIB_HEADER); + for (y = 0; y < h; ++y) { tdefl_compress_buffer(pComp, &z, 1, TDEFL_NO_FLUSH); tdefl_compress_buffer(pComp, (mz_uint8*)pImage + (flip ? (h - 1 - y) : y) * bpl, bpl, TDEFL_NO_FLUSH); } + if (tdefl_compress_buffer(pComp, NULL, 0, TDEFL_FINISH) != TDEFL_STATUS_DONE) { MZ_FREE(pComp); MZ_FREE(out_buf.m_pBuf); return NULL; } + // write real header + *pLen_out = out_buf.m_size-41; + { + static const mz_uint8 chans[] = {0x00, 0x00, 0x04, 0x02, 0x06}; + mz_uint8 pnghdr[41]={0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52, + 0,0,(mz_uint8)(w>>8),(mz_uint8)w,0,0,(mz_uint8)(h>>8),(mz_uint8)h,8,chans[num_chans],0,0,0,0,0,0,0, + (mz_uint8)(*pLen_out>>24),(mz_uint8)(*pLen_out>>16),(mz_uint8)(*pLen_out>>8),(mz_uint8)*pLen_out,0x49,0x44,0x41,0x54}; + c=(mz_uint32)mz_crc32(MZ_CRC32_INIT,pnghdr+12,17); for (i=0; i<4; ++i, c<<=8) ((mz_uint8*)(pnghdr+29))[i]=(mz_uint8)(c>>24); + memcpy(out_buf.m_pBuf, pnghdr, 41); + } + // write footer (IDAT CRC-32, followed by IEND chunk) + if (!tdefl_output_buffer_putter("\0\0\0\0\0\0\0\0\x49\x45\x4e\x44\xae\x42\x60\x82", 16, &out_buf)) { *pLen_out = 0; MZ_FREE(pComp); MZ_FREE(out_buf.m_pBuf); return NULL; } + c = (mz_uint32)mz_crc32(MZ_CRC32_INIT,out_buf.m_pBuf+41-4, *pLen_out+4); for (i=0; i<4; ++i, c<<=8) (out_buf.m_pBuf+out_buf.m_size-16)[i] = (mz_uint8)(c >> 24); + // compute final size of file, grab compressed data buffer and return + *pLen_out += 57; MZ_FREE(pComp); return out_buf.m_pBuf; +} +void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out) +{ + // Level 6 corresponds to TDEFL_DEFAULT_MAX_PROBES or MZ_DEFAULT_LEVEL (but we can't depend on MZ_DEFAULT_LEVEL being available in case the zlib API's where #defined out) + return tdefl_write_image_to_png_file_in_memory_ex(pImage, w, h, num_chans, pLen_out, 6, MZ_FALSE); +} + +#ifdef _MSC_VER +#pragma warning (pop) +#endif + +#ifdef __cplusplus +} +#endif + +#endif // MINIZ_HEADER_FILE_ONLY + +#ifdef _MSC_VER +#pragma warning(pop) +#endif \ No newline at end of file diff --git a/external/bc7enc_rdo/rdo_bc_encoder.cpp b/external/bc7enc_rdo/rdo_bc_encoder.cpp new file mode 100644 index 0000000000..44d39333ef --- /dev/null +++ b/external/bc7enc_rdo/rdo_bc_encoder.cpp @@ -0,0 +1,1270 @@ +// rdo_bc_encoder.cpp +#include "rdo_bc_encoder.h" + +#define RGBCX_IMPLEMENTATION +#include "rgbcx.h" + +#define DECODE_BC4_TO_GRAYSCALE (0) + +#ifdef _MSC_VER +#pragma warning (disable: 4127) // conditional expression is constant +#endif + +using namespace utils; + +namespace rdo_bc +{ + static const char* get_dxgi_format_string(DXGI_FORMAT fmt) + { + switch (fmt) + { + case DXGI_FORMAT_BC1_UNORM: return "BC1_UNORM"; + case DXGI_FORMAT_BC4_UNORM: return "BC4_UNORM"; + case DXGI_FORMAT_BC3_UNORM: return "BC3_UNORM"; + case DXGI_FORMAT_BC5_UNORM: return "BC5_UNORM"; + case DXGI_FORMAT_BC7_UNORM: return "BC7_UNORM"; + default: break; + } + return "?"; + } + + static std::vector compute_block_mse_scales(const image_u8& source_image, uint32_t blocks_x, uint32_t blocks_y, uint32_t total_blocks, bool rdo_debug_output) + { + const float ULTRASMOOTH_BLOCK_STD_DEV_THRESHOLD = 2.9f; + const float DARK_THRESHOLD = 13.0f; + const float BRIGHT_THRESHOLD = 222.0f; + const float ULTRAMOOTH_BLOCK_MSE_SCALE = 120.0f; + const uint32_t ULTRASMOOTH_REGION_TOO_SMALL_THRESHOLD = 64; + + image_u8 ultrasmooth_blocks_vis(blocks_x, blocks_y); + + for (uint32_t by = 0; by < blocks_y; by++) + { + for (uint32_t bx = 0; bx < blocks_x; bx++) + { + color_quad_u8 block_pixels[16]; + source_image.get_block(bx, by, 4, 4, block_pixels); + + tracked_stat y_stats; + for (uint32_t y = 0; y < 4; y++) + for (uint32_t x = 0; x < 4; x++) + { + int l = block_pixels[x + y * 4].get_luma(); + y_stats.update(l); + } + + float max_std_dev = compute_block_max_std_dev((color_quad_u8*)block_pixels, 4, 4, 3); + + float yl = max_std_dev / ULTRASMOOTH_BLOCK_STD_DEV_THRESHOLD; + + yl = clamp(yl, 0.0f, 1.0f); + yl *= yl; + + float y_avg = y_stats.get_mean(); + + if ((y_avg < DARK_THRESHOLD) || (y_avg >= BRIGHT_THRESHOLD)) + yl = 1.0f; + + int k = std::min((int)(yl * 255.0f + .5f), 255); + + ultrasmooth_blocks_vis.fill_box(bx, by, 1, 1, color_quad_u8((uint8_t)k, 255)); + } + } + + for (int pass = 0; pass < 1; pass++) + { + image_u8 next_vis(ultrasmooth_blocks_vis); + + for (int y = 0; y < (int)blocks_y; y++) + { + for (int x = 0; x < (int)blocks_x; x++) + { + int m = 0; + + for (int dy = -1; dy <= 1; dy++) + for (int dx = -1; dx <= 1; dx++) + { + if (ultrasmooth_blocks_vis.get_clamped(x + dx, y + dy).r == 255) + m = std::max(m, ultrasmooth_blocks_vis.get_clamped(x + dx, y + dy).r); + } + + next_vis(x, y).set((uint8_t)m, 255); + } + } + + ultrasmooth_blocks_vis.swap(next_vis); + } + + for (uint32_t pass = 0; pass < 32; pass++) + { + image_u8 next_vis(ultrasmooth_blocks_vis); + for (int y = 0; y < (int)blocks_y; y++) + { + for (int x = 0; x < (int)blocks_x; x++) + { + if (ultrasmooth_blocks_vis.get_clamped(x, y).r < 255) + { + int m = 0; + + for (int dy = -1; dy <= 1; dy++) + for (int dx = -1; dx <= 1; dx++) + if (ultrasmooth_blocks_vis.get_clamped(x + dx, y + dy).r == 255) + m++; + + if (m >= 5) + next_vis.set_pixel_clipped(x, y, color_quad_u8(255, 255, 255, 255)); + } + } + } + ultrasmooth_blocks_vis.swap(next_vis); + } + + image_u8 orig_ultrasmooth_blocks_vis(ultrasmooth_blocks_vis); + + if (rdo_debug_output) + { + save_png("ultrasmooth_block_mask_pre_filter.png", ultrasmooth_blocks_vis, false); + } + + for (uint32_t by = 0; by < blocks_y; by++) + { + for (uint32_t bx = 0; bx < blocks_x; bx++) + { + const bool is_ultrasmooth = ultrasmooth_blocks_vis(bx, by).r == 0; + if (!is_ultrasmooth) + continue; + + std::vector filled_pixels; + filled_pixels.reserve(256); + + uint32_t total_set_pixels = ultrasmooth_blocks_vis.flood_fill(bx, by, color_quad_u8(255, 255, 255, 255), color_quad_u8(0, 0, 0, 255), &filled_pixels); + + if (total_set_pixels < ULTRASMOOTH_REGION_TOO_SMALL_THRESHOLD) + { + for (uint32_t i = 0; i < filled_pixels.size(); i++) + orig_ultrasmooth_blocks_vis(filled_pixels[i].m_x, filled_pixels[i].m_y) = color_quad_u8(255, 255, 255, 255); + } + + } // bx + } // by + + ultrasmooth_blocks_vis = orig_ultrasmooth_blocks_vis; + + if (rdo_debug_output) + { + save_png("ultrasmooth_block_mask.png", ultrasmooth_blocks_vis, false); + } + + std::vector block_mse_scales(total_blocks); + + uint32_t total_ultrasmooth_blocks = 0; + for (uint32_t by = 0; by < blocks_y; by++) + { + for (uint32_t bx = 0; bx < blocks_x; bx++) + { + const bool is_ultrasmooth = ultrasmooth_blocks_vis(bx, by).r == 0; + + block_mse_scales[bx + by * blocks_x] = is_ultrasmooth ? ULTRAMOOTH_BLOCK_MSE_SCALE : -1.0f; + + total_ultrasmooth_blocks += is_ultrasmooth; + } + } + + if (rdo_debug_output) + printf("Total ultrasmooth blocks: %3.2f%%\n", total_ultrasmooth_blocks * 100.0f / total_blocks); + + return block_mse_scales; + } + + rdo_bc_encoder::rdo_bc_encoder() : + m_pOrig_source_image(nullptr), + m_orig_width(0), + m_orig_height(0), + m_blocks_x(0), + m_blocks_y(0), + m_total_blocks(0), + m_bytes_per_block(0), + m_pixel_format_bpp(0), + m_total_texels(0), + m_has_alpha(false) + { + } + + void rdo_bc_encoder::clear() + { + m_pOrig_source_image = nullptr; + + m_source_image.clear(); + + m_params.clear(); + + m_orig_width = 0; + m_orig_height = 0; + m_blocks_x = 0; + m_blocks_y = 0; + m_total_blocks = 0; + m_bytes_per_block = 0; + m_pixel_format_bpp = 0; + m_total_texels = 0; + m_has_alpha = false; + + m_packed_image8.clear(); + m_packed_image16.clear(); + + m_prerdo_packed_image8.clear(); + m_prerdo_packed_image16.clear(); + + m_bc7enc_pack_params.clear(); +#if SUPPORT_BC7E + memset(&m_bc7e_pack_params, 0, sizeof(m_bc7e_pack_params)); +#endif + } + + bool rdo_bc_encoder::init(const utils::image_u8& src_image, rdo_bc_params& params) + { + clear(); + + m_pOrig_source_image = &src_image; + m_params = params; + + init_encoders(); + + if (!init_source_image()) + return false; + + return true; + } + + bool rdo_bc_encoder::encode() + { + if (!m_packed_image8.size() && !m_packed_image16.size()) + return false; + + if (!init_encoder_params()) + return false; + + if (!encode_texture()) + return false; + + if (!postprocess_rdo()) + return false; + + return true; + } + + void rdo_bc_encoder::init_encoders() + { + rgbcx::init(m_params.m_bc1_mode); + bc7enc_compress_block_init(); +#if SUPPORT_BC7E + ispc::bc7e_compress_block_init(); +#endif + } + + bool rdo_bc_encoder::init_encoder_params() + { + bc7enc_compress_block_params_init(&m_bc7enc_pack_params); + if (!m_params.m_perceptual) + bc7enc_compress_block_params_init_linear_weights(&m_bc7enc_pack_params); + m_bc7enc_pack_params.m_max_partitions = m_params.m_bc7enc_max_partitions_to_scan; + m_bc7enc_pack_params.m_uber_level = std::min(BC7ENC_MAX_UBER_LEVEL, m_params.m_bc7_uber_level); + + if (m_params.m_bc7enc_mode6_only) + m_bc7enc_pack_params.m_mode_mask = 1 << 6; + + if ((m_params.m_dxgi_format == DXGI_FORMAT_BC7_UNORM) && (m_params.m_rdo_lambda > 0.0f)) + { + // Slam off perceptual in RDO mode - we don't support it (too slow). + m_params.m_perceptual = false; + m_bc7enc_pack_params.m_perceptual = false; + bc7enc_compress_block_params_init_linear_weights(&m_bc7enc_pack_params); + } + + if ((m_params.m_dxgi_format == DXGI_FORMAT_BC7_UNORM) && (m_params.m_bc7enc_reduce_entropy)) + { + // Configure the BC7 encoder with some decent parameters for later RDO post-processing. + // Textures with alpha are harder for BC7 to handle, so we use more conservative defaults. + + m_bc7enc_pack_params.m_mode17_partition_estimation_filterbank = false; + + if (m_params.m_bc7enc_rdo_bc7_weight_modes) + { + // Weight modes 5 and especially 6 more highly than the other modes. + if (m_has_alpha) + { + m_bc7enc_pack_params.m_mode5_error_weight = .7f; + m_bc7enc_pack_params.m_mode6_error_weight = .6f; + } + else + { + m_bc7enc_pack_params.m_mode6_error_weight = .4f; + } + } + + if (m_params.m_bc7enc_rdo_bc7_weight_low_frequency_partitions) + { + // Slightly prefer the lower frequency partition patterns. + m_bc7enc_pack_params.m_low_frequency_partition_weight = .9999f; + } + + if (m_params.m_bc7enc_rdo_bc7_quant_mode6_endpoints) + { + // As a good default, don't quantize mode 6 endpoints if the texture has alpha. This isn't required, but helps mask textures. + //if (!has_alpha) + m_bc7enc_pack_params.m_quant_mode6_endpoints = true; + } + + if (m_params.m_bc7enc_rdo_bc7_pbit1_weighting) + { + // Favor p-bit 0 vs. 1, to slightly lower the entropy of output blocks with p-bits + m_bc7enc_pack_params.m_pbit1_weight = 1.3f; + } + } + +#if SUPPORT_BC7E + // Now initialize the BC7 compressor's parameters. + + memset(&m_bc7e_pack_params, 0, sizeof(m_bc7e_pack_params)); + switch (m_params.m_bc7_uber_level) + { + case 0: + ispc::bc7e_compress_block_params_init_ultrafast(&m_bc7e_pack_params, m_params.m_perceptual); + break; + case 1: + ispc::bc7e_compress_block_params_init_veryfast(&m_bc7e_pack_params, m_params.m_perceptual); + break; + case 2: + ispc::bc7e_compress_block_params_init_fast(&m_bc7e_pack_params, m_params.m_perceptual); + break; + case 3: + ispc::bc7e_compress_block_params_init_basic(&m_bc7e_pack_params, m_params.m_perceptual); + break; + case 4: + ispc::bc7e_compress_block_params_init_slow(&m_bc7e_pack_params, m_params.m_perceptual); + break; + case 5: + ispc::bc7e_compress_block_params_init_veryslow(&m_bc7e_pack_params, m_params.m_perceptual); + break; + case 6: + default: + ispc::bc7e_compress_block_params_init_slowest(&m_bc7e_pack_params, m_params.m_perceptual); + break; + } +#endif + + if (m_params.m_status_output) + { + if (m_params.m_dxgi_format == DXGI_FORMAT_BC7_UNORM) + { + if ((SUPPORT_BC7E) && (m_params.m_use_bc7e)) + printf("bc7e.ispc uber level: %u, perceptual: %u\n", m_params.m_bc7_uber_level, m_params.m_perceptual); + else + { + printf("\nbc7enc parameters:\n"); + m_bc7enc_pack_params.print(); + } + } + else + { + printf("BC1 level: %u, use 3-color mode: %u, use 3-color mode for black: %u, bc1_mode: %u\n", + m_params.m_bc1_quality_level, m_params.m_use_bc1_3color_mode, m_params.m_use_bc1_3color_mode_for_black, (int)m_params.m_bc1_mode); + } + + if ((m_params.m_dxgi_format == DXGI_FORMAT_BC3_UNORM) || (m_params.m_dxgi_format == DXGI_FORMAT_BC4_UNORM) || (m_params.m_dxgi_format == DXGI_FORMAT_BC5_UNORM)) + { + printf("Use high quality BC4 block encoder: %u, BC4 block radius: %u, use 6 value mode: %u, use 8 value mode: %u\n", + m_params.m_use_hq_bc345, m_params.m_bc345_search_rad, (m_params.m_bc345_mode_mask & 2) != 0, (m_params.m_bc345_mode_mask & 1) != 0); + } + + printf("\nrdo_bc_params:\n"); + printf(" Perceptual: %u\n", m_params.m_perceptual); + printf(" Y Flip: %u\n", m_params.m_y_flip); + printf(" DXGI format: 0x%X %s\n", m_params.m_dxgi_format, get_dxgi_format_string(m_params.m_dxgi_format)); + + printf("BC1-5 parameters:\n"); + printf(" BC45 channels: %u %u\n", m_params.m_bc45_channel0, m_params.m_bc45_channel1); + printf(" BC1 approximation mode: %u\n", (int)m_params.m_bc1_mode); + printf(" Use BC1 3-color mode: %u\n", m_params.m_use_bc1_3color_mode); + printf(" Use BC1 3-color mode for black: %u\n", m_params.m_use_bc1_3color_mode_for_black); + printf(" BC1 quality level: %u\n", m_params.m_bc1_quality_level); + printf(" Use HQ BC345: %u\n", m_params.m_use_hq_bc345); + printf(" BC345 search radius: %u\n", m_params.m_bc345_search_rad); + printf(" BC345 mode mask: 0x%X\n", m_params.m_bc345_mode_mask); + + printf("BC7 parameters:\n"); + printf(" Use bc7e: %u\n", m_params.m_use_bc7e); + printf(" BC7 uber level: %u\n", m_params.m_bc7_uber_level); + + printf("RDO parameters:\n"); + printf(" Lambda: %f\n", m_params.m_rdo_lambda); + printf(" Lookback window size: %u\n", m_params.m_lookback_window_size); + printf(" Custom lookback window size: %u\n", m_params.m_custom_lookback_window_size); + printf(" Try 2 matches: %u\n", m_params.m_rdo_try_2_matches); + printf(" Smooth block error scale: %f\n", m_params.m_rdo_smooth_block_error_scale); + printf(" Custom RDO smooth block error scale: %u\n", m_params.m_custom_rdo_smooth_block_error_scale); + printf(" Max smooth block std dev: %f\n", m_params.m_rdo_max_smooth_block_std_dev); + printf(" Allow relative movement: %u\n", m_params.m_rdo_allow_relative_movement); + printf(" Ultrasmooth block handling: %u\n", m_params.m_rdo_ultrasmooth_block_handling); + printf(" Multithreading: %u, max threads: %u\n", m_params.m_rdo_multithreading, m_params.m_rdo_max_threads); + + printf("bc7enc parameters:\n"); + printf(" Mode 6 only: %u\n", m_params.m_bc7enc_mode6_only); + printf(" Max partitions to scan: %u\n", m_params.m_bc7enc_max_partitions_to_scan); + printf(" Quant mode 6 endpoints: %u\n", m_params.m_bc7enc_rdo_bc7_quant_mode6_endpoints); + printf(" Weight modes: %u\n", m_params.m_bc7enc_rdo_bc7_weight_modes); + printf(" Weight low freq partitions: %u\n", m_params.m_bc7enc_rdo_bc7_weight_low_frequency_partitions); + printf(" P-bit1 weighting: %u\n", m_params.m_bc7enc_rdo_bc7_pbit1_weighting); + printf(" Reduce entropy mode: %u\n", m_params.m_bc7enc_reduce_entropy); + printf("\n"); + } + + return true; + } + + bool rdo_bc_encoder::init_source_image() + { + switch (m_params.m_dxgi_format) + { + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC4_UNORM: + m_pixel_format_bpp = 4; + break; + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC7_UNORM: + m_pixel_format_bpp = 8; + break; + default: + return false; + } + + m_bytes_per_block = (16 * m_pixel_format_bpp) / 8; + assert((m_bytes_per_block == 8) || (m_bytes_per_block == 16)); + + m_source_image = *m_pOrig_source_image; + + m_orig_width = m_source_image.width(); + m_orig_height = m_source_image.height(); + + if (m_params.m_y_flip) + { + utils::image_u8 temp; + temp.init(m_orig_width, m_orig_height); + + for (uint32_t y = 0; y < m_orig_height; y++) + for (uint32_t x = 0; x < m_orig_width; x++) + temp(x, (m_orig_height - 1) - y) = m_source_image(x, y); + + temp.swap(m_source_image); + } + + m_source_image.crop_dup_borders((m_source_image.width() + 3) & ~3, (m_source_image.height() + 3) & ~3); + + m_blocks_x = m_source_image.width() / 4; + m_blocks_y = m_source_image.height() / 4; + m_total_blocks = m_blocks_x * m_blocks_y; + m_total_texels = m_total_blocks * 16; + + bool has_alpha = false; + for (int by = 0; by < ((int)m_blocks_y) && !has_alpha; by++) + { + for (uint32_t bx = 0; bx < m_blocks_x; bx++) + { + color_quad_u8 pixels[16]; + m_source_image.get_block(bx, by, 4, 4, pixels); + + for (uint32_t i = 0; i < 16; i++) + { + if (pixels[i].m_c[3] < 255) + { + has_alpha = true; + break; + } + } + } + } + + if (m_pixel_format_bpp == 8) + m_packed_image16.resize(m_total_blocks); + else + m_packed_image8.resize(m_total_blocks); + + return true; + } + + bool rdo_bc_encoder::encode_texture() + { + clock_t start_t = clock(); + + uint32_t bc7_mode_hist[8]; + memset(bc7_mode_hist, 0, sizeof(bc7_mode_hist)); + +#if SUPPORT_BC7E + if ((m_params.m_dxgi_format == DXGI_FORMAT_BC7_UNORM) && (m_params.m_use_bc7e)) + { + if (m_params.m_status_output) + printf("Using bc7e: "); + +#pragma omp parallel for + for (int32_t by = 0; by < static_cast(m_blocks_y); by++) + { + // Process 64 blocks at a time, for efficient SIMD processing. + // Ideally, N >= 8 (or more) and (N % 8) == 0. + const int N = 64; + + for (uint32_t bx = 0; bx < m_blocks_x; bx += N) + { + const uint32_t num_blocks_to_process = std::min(m_blocks_x - bx, N); + + color_quad_u8 pixels[16 * N]; + + // Extract num_blocks_to_process 4x4 pixel blocks from the source image and put them into the pixels[] array. + for (uint32_t b = 0; b < num_blocks_to_process; b++) + m_source_image.get_block(bx + b, by, 4, 4, pixels + b * 16); + + // Compress the blocks to BC7. + // Note: If you've used Intel's ispc_texcomp, the input pixels are different. BC7E requires a pointer to an array of 16 pixels for each block. + block16* pBlock = &m_packed_image16[bx + by * m_blocks_x]; + ispc::bc7e_compress_blocks(num_blocks_to_process, reinterpret_cast(pBlock), reinterpret_cast(pixels), &m_bc7e_pack_params); + } + + if (m_params.m_status_output) + { + if ((by & 63) == 0) + printf("."); + } + } + + for (int by = 0; by < (int)m_blocks_y; by++) + { + for (uint32_t bx = 0; bx < m_blocks_x; bx++) + { + block16* pBlock = &m_packed_image16[bx + by * m_blocks_x]; + + uint32_t mode = ((uint8_t*)pBlock)[0]; + for (uint32_t m = 0; m <= 7; m++) + { + if (mode & (1 << m)) + { + bc7_mode_hist[m]++; + break; + } + } + } + } + } + else +#endif + { +#pragma omp parallel for + for (int by = 0; by < (int)m_blocks_y; by++) + { + for (uint32_t bx = 0; bx < m_blocks_x; bx++) + { + color_quad_u8 pixels[16]; + + m_source_image.get_block(bx, by, 4, 4, pixels); + + switch (m_params.m_dxgi_format) + { + case DXGI_FORMAT_BC1_UNORM: + { + block8* pBlock = &m_packed_image8[bx + by * m_blocks_x]; + + rgbcx::encode_bc1(m_params.m_bc1_quality_level, pBlock, &pixels[0].m_c[0], m_params.m_use_bc1_3color_mode, m_params.m_use_bc1_3color_mode_for_black); + break; + } + case DXGI_FORMAT_BC3_UNORM: + { + block16* pBlock = &m_packed_image16[bx + by * m_blocks_x]; + + if (m_params.m_use_hq_bc345) + rgbcx::encode_bc3_hq(m_params.m_bc1_quality_level, pBlock, &pixels[0].m_c[0], m_params.m_bc345_search_rad, m_params.m_bc345_mode_mask); + else + rgbcx::encode_bc3(m_params.m_bc1_quality_level, pBlock, &pixels[0].m_c[0]); + break; + } + case DXGI_FORMAT_BC4_UNORM: + { + block8* pBlock = &m_packed_image8[bx + by * m_blocks_x]; + + if (m_params.m_use_hq_bc345) + rgbcx::encode_bc4_hq(pBlock, &pixels[0].m_c[m_params.m_bc45_channel0], 4, m_params.m_bc345_search_rad, m_params.m_bc345_mode_mask); + else + rgbcx::encode_bc4(pBlock, &pixels[0].m_c[m_params.m_bc45_channel0], 4); + break; + } + case DXGI_FORMAT_BC5_UNORM: + { + block16* pBlock = &m_packed_image16[bx + by * m_blocks_x]; + + if (m_params.m_use_hq_bc345) + rgbcx::encode_bc5_hq(pBlock, &pixels[0].m_c[0], m_params.m_bc45_channel0, m_params.m_bc45_channel1, 4, m_params.m_bc345_search_rad, m_params.m_bc345_mode_mask); + else + rgbcx::encode_bc5(pBlock, &pixels[0].m_c[0], m_params.m_bc45_channel0, m_params.m_bc45_channel1, 4); + break; + } + case DXGI_FORMAT_BC7_UNORM: + { + block16* pBlock = &m_packed_image16[bx + by * m_blocks_x]; + + bc7enc_compress_block(pBlock, pixels, &m_bc7enc_pack_params); + +#pragma omp critical + { + uint32_t mode = ((uint8_t*)pBlock)[0]; + for (uint32_t m = 0; m <= 7; m++) + { + if (mode & (1 << m)) + { + bc7_mode_hist[m]++; + break; + } + } + } + + break; + } + default: + { + assert(0); + break; + } + } + } + + if (m_params.m_status_output) + { + if ((by & 127) == 0) + printf("."); + } + } + } + + clock_t end_t = clock(); + + if (m_params.m_status_output) + { + printf("\nTotal encoding time: %f secs\n", (double)(end_t - start_t) / CLOCKS_PER_SEC); + + if (m_params.m_dxgi_format == DXGI_FORMAT_BC7_UNORM) + { + printf("BC7 mode histogram:\n"); + for (uint32_t i = 0; i < 8; i++) + printf("%u: %u\n", i, bc7_mode_hist[i]); + } + } + + return true; + } + + bool rdo_bc_encoder::postprocess_rdo() + { + m_prerdo_packed_image8 = m_packed_image8; + m_prerdo_packed_image16 = m_packed_image16; + + // Post-process the data with Rate Distortion Optimization + if (m_params.m_rdo_lambda <= 0.0f) + return true; + + const uint32_t MIN_RDO_MULTITHREADING_BLOCKS = 4096; + const int rdo_total_threads = (m_params.m_rdo_multithreading && (m_params.m_rdo_max_threads > 1) && (m_total_blocks >= MIN_RDO_MULTITHREADING_BLOCKS)) ? m_params.m_rdo_max_threads : 1; + + if (m_params.m_status_output) + printf("rdo_total_threads: %u\n", rdo_total_threads); + + int blocks_remaining = m_total_blocks, cur_block_index = 0; + std::vector blocks_to_do(rdo_total_threads), first_block_index(rdo_total_threads); + for (int p = 0; p < rdo_total_threads; p++) + { + const int num_blocks = (p == (rdo_total_threads - 1)) ? blocks_remaining : (m_total_blocks / rdo_total_threads); + + blocks_to_do[p] = num_blocks; + first_block_index[p] = cur_block_index; + + cur_block_index += num_blocks; + blocks_remaining -= num_blocks; + } + + assert(!blocks_remaining && cur_block_index == (int)m_total_blocks); + + ert::reduce_entropy_params ert_p; + + ert_p.m_lambda = m_params.m_rdo_lambda; + ert_p.m_lookback_window_size = m_params.m_lookback_window_size; + ert_p.m_smooth_block_max_mse_scale = m_params.m_rdo_smooth_block_error_scale; + ert_p.m_max_smooth_block_std_dev = m_params.m_rdo_max_smooth_block_std_dev; + ert_p.m_debug_output = m_params.m_rdo_debug_output; + ert_p.m_try_two_matches = m_params.m_rdo_try_2_matches; + ert_p.m_allow_relative_movement = m_params.m_rdo_allow_relative_movement; + ert_p.m_skip_zero_mse_blocks = false; + + std::vector block_rgb_mse_scales(compute_block_mse_scales(m_source_image, m_blocks_x, m_blocks_y, m_total_blocks, m_params.m_rdo_debug_output)); + + std::vector block_pixels(m_total_blocks * 16); + + for (uint32_t by = 0; by < m_blocks_y; by++) + for (uint32_t bx = 0; bx < m_blocks_x; bx++) + m_source_image.get_block(bx, by, 4, 4, (color_quad_u8*)&block_pixels[(bx + by * m_blocks_x) * 16]); + + unpacker_funcs block_unpackers; + block_unpackers.m_allow_3color_mode = m_params.m_use_bc1_3color_mode; + block_unpackers.m_use_bc1_3color_mode_for_black = m_params.m_use_bc1_3color_mode_for_black; + block_unpackers.m_mode = m_params.m_bc1_mode; + + if (m_params.m_dxgi_format == DXGI_FORMAT_BC7_UNORM) + { + ert_p.m_lookback_window_size = std::max(16U, m_params.m_lookback_window_size); + + // BC7 RDO + const uint32_t NUM_COMPONENTS = 4; + + if (!m_params.m_custom_rdo_smooth_block_error_scale) + { + // Attempt to compute a decent conservative smooth block MSE max scaling factor. + // No single smooth block scale setting can work for all textures (unless it's ridiuclously large, killing efficiency). + ert_p.m_smooth_block_max_mse_scale = lerp(15.0f, 50.0f, std::min(1.0f, ert_p.m_lambda / 4.0f)); + + if (m_params.m_status_output) + printf("Using an automatically computed smooth block error scale of %f (use -zb# to override)\n", ert_p.m_smooth_block_max_mse_scale); + } + + for (uint32_t by = 0; by < m_blocks_y; by++) + for (uint32_t bx = 0; bx < m_blocks_x; bx++) + { + float& s = block_rgb_mse_scales[bx + by * m_blocks_x]; + if (s > 0.0f) + s = std::max(ert_p.m_smooth_block_max_mse_scale, s * std::min(ert_p.m_lambda, 3.0f)); + } + + if (m_params.m_status_output) + { + printf("\nERT parameters:\n"); + ert_p.print(); + printf("\n"); + } + + uint32_t total_modified = 0; + + clock_t rdo_start_t = clock(); + +#pragma omp parallel for + for (int p = 0; p < rdo_total_threads; p++) + { + const int first_block_to_encode = first_block_index[p]; + const int num_blocks_to_encode = blocks_to_do[p]; + if (!num_blocks_to_encode) + continue; + + uint32_t total_modified_local = 0; + + std::vector local_block_rgb_mse_scales(num_blocks_to_encode); + for (int i = 0; i < num_blocks_to_encode; i++) + local_block_rgb_mse_scales[i] = block_rgb_mse_scales[first_block_to_encode + i]; + + ert::reduce_entropy(&m_packed_image16[first_block_to_encode], num_blocks_to_encode, + 16, 16, 4, 4, NUM_COMPONENTS, + (ert::color_rgba*)&block_pixels[16 * first_block_to_encode], ert_p, total_modified_local, + unpacker_funcs::unpack_bc7_block, &block_unpackers, + m_params.m_rdo_ultrasmooth_block_handling ? &local_block_rgb_mse_scales : nullptr); + +#pragma omp critical + { + total_modified += total_modified_local; + } + } // p + + clock_t rdo_end_t = clock(); + + if (m_params.m_status_output) + { + printf("Total RDO time: %f secs\n", (double)(rdo_end_t - rdo_start_t) / CLOCKS_PER_SEC); + + printf("Total blocks modified: %u %3.2f%%\n", total_modified, total_modified * 100.0f / m_total_blocks); + + uint32_t bc7_mode_hist[8]; + memset(bc7_mode_hist, 0, sizeof(bc7_mode_hist)); + + for (int by = 0; by < (int)m_blocks_y; by++) + { + for (uint32_t bx = 0; bx < m_blocks_x; bx++) + { + block16* pBlock = &m_packed_image16[bx + by * m_blocks_x]; + + const uint32_t mode_byte = ((uint8_t*)pBlock)[0]; + + uint32_t m; + for (m = 0; m <= 7; m++) + { + if (mode_byte & (1 << m)) + { + bc7_mode_hist[m]++; + break; + } + } + assert(m != 8); + } + } + + printf("BC7 mode histogram:\n"); + for (uint32_t i = 0; i < 8; i++) + printf("%u: %u\n", i, bc7_mode_hist[i]); + } + } + else if (m_params.m_dxgi_format == DXGI_FORMAT_BC5_UNORM) + { + // BC5 RDO - One BC4 block for R followed by one BC4 block for G + + ert_p.m_lookback_window_size = std::max(16U, m_params.m_lookback_window_size); + + std::vector block_pixels_r(m_total_blocks * 16), block_pixels_g(m_total_blocks * 16); + + for (uint32_t by = 0; by < m_blocks_y; by++) + { + for (uint32_t bx = 0; bx < m_blocks_x; bx++) + { + color_quad_u8 orig_block[16]; + m_source_image.get_block(bx, by, 4, 4, orig_block); + + color_quad_u8* pDst_block_r = (color_quad_u8*)&block_pixels_r[(bx + by * m_blocks_x) * 16]; + color_quad_u8* pDst_block_g = (color_quad_u8*)&block_pixels_g[(bx + by * m_blocks_x) * 16]; + + for (uint32_t i = 0; i < 16; i++) + { + pDst_block_r[i].set(orig_block[i].r, 0, 0, 0); + pDst_block_g[i].set(orig_block[i].g, 0, 0, 0); + } + } + } + + const uint32_t NUM_COMPONENTS = 1; + + ert_p.m_color_weights[1] = 0; + ert_p.m_color_weights[2] = 0; + ert_p.m_color_weights[3] = 0; + + if (!m_params.m_custom_rdo_smooth_block_error_scale) + { + // Attempt to compute a decent conservative smooth block MSE max scaling factor. + // No single smooth block scale setting can work for all textures (unless it's ridiuclously large, killing efficiency). + ert_p.m_smooth_block_max_mse_scale = lerp(10.0f, 30.0f, std::min(1.0f, ert_p.m_lambda / 4.0f)); + + if (m_params.m_status_output) + printf("Using an automatically computed smooth block error scale of %f (use -zb# to override)\n", ert_p.m_smooth_block_max_mse_scale); + } + + if (m_params.m_status_output) + { + printf("\nERT parameters:\n"); + ert_p.print(); + printf("\n"); + } + + uint32_t total_modified_r = 0, total_modified_g = 0; + + clock_t rdo_start_t = clock(); + +#pragma omp parallel for + for (int p = 0; p < rdo_total_threads; p++) + { + const int first_block_to_encode = first_block_index[p]; + const int num_blocks_to_encode = blocks_to_do[p]; + if (!num_blocks_to_encode) + continue; + + uint32_t total_modified_local_r = 0, total_modified_local_g = 0; + + ert::reduce_entropy(&m_packed_image16[first_block_to_encode], num_blocks_to_encode, + 2 * sizeof(rgbcx::bc4_block), sizeof(rgbcx::bc4_block), 4, 4, NUM_COMPONENTS, + (ert::color_rgba*)&block_pixels_r[16 * first_block_to_encode], ert_p, total_modified_local_r, + unpacker_funcs::unpack_bc4_block, &block_unpackers); + + ert::reduce_entropy((uint8_t*)&m_packed_image16[first_block_to_encode] + sizeof(rgbcx::bc4_block), num_blocks_to_encode, + 2 * sizeof(rgbcx::bc4_block), sizeof(rgbcx::bc4_block), 4, 4, NUM_COMPONENTS, + (ert::color_rgba*)&block_pixels_g[16 * first_block_to_encode], ert_p, total_modified_local_g, + unpacker_funcs::unpack_bc4_block, &block_unpackers); + +#pragma omp critical + { + total_modified_r += total_modified_local_r; + total_modified_g += total_modified_local_g; + } + } // p + + clock_t rdo_end_t = clock(); + + if (m_params.m_status_output) + { + printf("Total RDO time: %f secs\n", (double)(rdo_end_t - rdo_start_t) / CLOCKS_PER_SEC); + + printf("Total blocks modified R: %u %3.2f%%\n", total_modified_r, total_modified_r * 100.0f / m_total_blocks); + printf("Total blocks modified G: %u %3.2f%%\n", total_modified_g, total_modified_g * 100.0f / m_total_blocks); + } + } + else if (m_params.m_dxgi_format == DXGI_FORMAT_BC4_UNORM) + { + // BC4 RDO - One BC4 block for R + + const uint32_t NUM_COMPONENTS = 1; + + ert_p.m_color_weights[1] = 0; + ert_p.m_color_weights[2] = 0; + ert_p.m_color_weights[3] = 0; + + if (!m_params.m_custom_rdo_smooth_block_error_scale) + { + // Attempt to compute a decent conservative smooth block MSE max scaling factor. + // No single smooth block scale setting can work for all textures (unless it's ridiuclously large, killing efficiency). + ert_p.m_smooth_block_max_mse_scale = lerp(10.0f, 30.0f, std::min(1.0f, ert_p.m_lambda / 4.0f)); + + if (m_params.m_status_output) + printf("Using an automatically computed smooth block error scale of %f (use -zb# to override)\n", ert_p.m_smooth_block_max_mse_scale); + } + + if (m_params.m_status_output) + { + printf("\nERT parameters:\n"); + ert_p.print(); + printf("\n"); + } + + uint32_t total_modified = 0; + + clock_t rdo_start_t = clock(); + +#pragma omp parallel for + for (int p = 0; p < rdo_total_threads; p++) + { + const int first_block_to_encode = first_block_index[p]; + const int num_blocks_to_encode = blocks_to_do[p]; + if (!num_blocks_to_encode) + continue; + + uint32_t total_modified_local = 0; + + ert::reduce_entropy(&m_packed_image8[first_block_to_encode], num_blocks_to_encode, + sizeof(rgbcx::bc4_block), sizeof(rgbcx::bc4_block), 4, 4, NUM_COMPONENTS, + (ert::color_rgba*)&block_pixels[16 * first_block_to_encode], ert_p, total_modified_local, + unpacker_funcs::unpack_bc4_block, &block_unpackers); + +#pragma omp critical + { + total_modified += total_modified_local; + } + } // p + + clock_t rdo_end_t = clock(); + + if (m_params.m_status_output) + { + printf("Total RDO time: %f secs\n", (double)(rdo_end_t - rdo_start_t) / CLOCKS_PER_SEC); + + printf("Total blocks modified: %u %3.2f%%\n", total_modified, total_modified * 100.0f / m_total_blocks); + } + } + else if (m_params.m_dxgi_format == DXGI_FORMAT_BC1_UNORM) + { + // BC1 RDO - One BC1 block + const uint32_t NUM_COMPONENTS = 3; + + ert_p.m_color_weights[3] = 0; + + if (!m_params.m_custom_rdo_smooth_block_error_scale) + { + // This is just a hack - no single setting can work for all textures. + ert_p.m_smooth_block_max_mse_scale = lerp(15.0f, 50.0f, std::min(1.0f, ert_p.m_lambda / 8.0f)); + + if (m_params.m_status_output) + printf("Using an automatically computed smooth block error scale of %f (use -zb# to override)\n", ert_p.m_smooth_block_max_mse_scale); + } + + for (uint32_t by = 0; by < m_blocks_y; by++) + for (uint32_t bx = 0; bx < m_blocks_x; bx++) + { + float& s = block_rgb_mse_scales[bx + by * m_blocks_x]; + if (s > 0.0f) + s = std::max(ert_p.m_smooth_block_max_mse_scale, s * std::min(ert_p.m_lambda, 3.0f)); + } + + printf("\nERT parameters:\n"); + ert_p.print(); + printf("\n"); + + uint32_t total_modified = 0; + + clock_t rdo_start_t = clock(); + +#pragma omp parallel for + for (int p = 0; p < rdo_total_threads; p++) + { + const int first_block_to_encode = first_block_index[p]; + const int num_blocks_to_encode = blocks_to_do[p]; + if (!num_blocks_to_encode) + continue; + + uint32_t total_modified_local = 0; + + std::vector local_block_rgb_mse_scales(num_blocks_to_encode); + for (int i = 0; i < num_blocks_to_encode; i++) + local_block_rgb_mse_scales[i] = block_rgb_mse_scales[first_block_to_encode + i]; + + ert::reduce_entropy(&m_packed_image8[first_block_to_encode], num_blocks_to_encode, + sizeof(rgbcx::bc1_block), sizeof(rgbcx::bc1_block), 4, 4, NUM_COMPONENTS, + (ert::color_rgba*)&block_pixels[16 * first_block_to_encode], ert_p, total_modified_local, + unpacker_funcs::unpack_bc1_block, &block_unpackers, + m_params.m_rdo_ultrasmooth_block_handling ? &local_block_rgb_mse_scales : nullptr); + +#pragma omp critical + { + total_modified += total_modified_local; + } + } // p + + clock_t rdo_end_t = clock(); + + if (m_params.m_status_output) + { + printf("Total RDO time: %f secs\n", (double)(rdo_end_t - rdo_start_t) / CLOCKS_PER_SEC); + + printf("Total blocks modified: %u %3.2f%%\n", + total_modified, total_modified * 100.0f / m_total_blocks); + } + } + else if (m_params.m_dxgi_format == DXGI_FORMAT_BC3_UNORM) + { + // BC3 RDO - One BC4 block followed by one BC1 block + + ert_p.m_lookback_window_size = std::max(16U, m_params.m_lookback_window_size); + + std::vector block_pixels_a(m_total_blocks * 16); + + for (uint32_t by = 0; by < m_blocks_y; by++) + { + for (uint32_t bx = 0; bx < m_blocks_x; bx++) + { + color_quad_u8 orig_block[16]; + m_source_image.get_block(bx, by, 4, 4, orig_block); + + color_quad_u8* pDst_block_a = (color_quad_u8*)&block_pixels_a[(bx + by * m_blocks_x) * 16]; + for (uint32_t i = 0; i < 16; i++) + pDst_block_a[i].set(orig_block[i].a, 0, 0, 0); + } + } + + ert_p.m_color_weights[3] = 0; + + ert::reduce_entropy_params ert_alpha_p(ert_p); + ert_alpha_p.m_color_weights[1] = 0; + ert_alpha_p.m_color_weights[2] = 0; + ert_alpha_p.m_color_weights[3] = 0; + + if (!m_params.m_custom_rdo_smooth_block_error_scale) + { + // This is just a hack - no single setting can work for all textures. + ert_p.m_smooth_block_max_mse_scale = lerp(15.0f, 50.0f, std::min(1.0f, ert_p.m_lambda / 8.0f)); + + if (m_params.m_status_output) + printf("Using an automatically computed smooth block error scale of %f (use -zb# to override) for RGB\n", ert_p.m_smooth_block_max_mse_scale); + + ert_alpha_p.m_smooth_block_max_mse_scale = lerp(10.0f, 30.0f, std::min(1.0f, ert_alpha_p.m_lambda / 4.0f)); + + if (m_params.m_status_output) + printf("Using an automatically computed smooth block error scale of %f for Alpha\n", ert_alpha_p.m_smooth_block_max_mse_scale); + } + + for (uint32_t by = 0; by < m_blocks_y; by++) + for (uint32_t bx = 0; bx < m_blocks_x; bx++) + { + float& s = block_rgb_mse_scales[bx + by * m_blocks_x]; + if (s > 0.0f) + s = std::max(ert_p.m_smooth_block_max_mse_scale, s * std::min(ert_p.m_lambda, 3.0f)); + } + + if (m_params.m_status_output) + { + printf("\nERT RGB parameters:\n"); + ert_p.print(); + + printf("\nERT Alpha parameters:\n"); + ert_alpha_p.print(); + printf("\n"); + } + + uint32_t total_modified_rgb = 0, total_modified_alpha = 0; + + block_unpackers.m_allow_3color_mode = false; + block_unpackers.m_use_bc1_3color_mode_for_black = false; + + clock_t rdo_start_t = clock(); + +#pragma omp parallel for + for (int p = 0; p < rdo_total_threads; p++) + { + const int first_block_to_encode = first_block_index[p]; + const int num_blocks_to_encode = blocks_to_do[p]; + if (!num_blocks_to_encode) + continue; + + uint32_t total_modified_local_rgb = 0, total_modified_local_alpha = 0; + + ert::reduce_entropy((uint8_t*)&m_packed_image16[first_block_to_encode], num_blocks_to_encode, + sizeof(rgbcx::bc1_block) * 2, sizeof(rgbcx::bc4_block), 4, 4, 1, + (ert::color_rgba*)&block_pixels_a[16 * first_block_to_encode], ert_alpha_p, total_modified_local_alpha, + unpacker_funcs::unpack_bc4_block, &block_unpackers); + + std::vector local_block_rgb_mse_scales(num_blocks_to_encode); + for (int i = 0; i < num_blocks_to_encode; i++) + local_block_rgb_mse_scales[i] = block_rgb_mse_scales[first_block_to_encode + i]; + + ert::reduce_entropy((uint8_t*)&m_packed_image16[first_block_to_encode] + sizeof(rgbcx::bc1_block), num_blocks_to_encode, + sizeof(rgbcx::bc1_block) * 2, sizeof(rgbcx::bc1_block), 4, 4, 3, + (ert::color_rgba*)&block_pixels[16 * first_block_to_encode], ert_p, total_modified_local_rgb, + unpacker_funcs::unpack_bc1_block, &block_unpackers, + m_params.m_rdo_ultrasmooth_block_handling ? &local_block_rgb_mse_scales : nullptr); + +#pragma omp critical + { + total_modified_rgb += total_modified_local_rgb; + total_modified_alpha += total_modified_local_alpha; + } + } // p + + clock_t rdo_end_t = clock(); + + if (m_params.m_status_output) + { + printf("Total RDO time: %f secs\n", (double)(rdo_end_t - rdo_start_t) / CLOCKS_PER_SEC); + + printf("Total RGB blocks modified: %u %3.2f%%\n", total_modified_rgb, total_modified_rgb * 100.0f / m_total_blocks); + printf("Total Alpha blocks modified: %u %3.2f%%\n", total_modified_alpha, total_modified_alpha * 100.0f / m_total_blocks); + } + } + + return true; + } + + bool rdo_bc_encoder::unpack_blocks(image_u8& unpacked_image) const + { + unpacked_image.init(get_blocks_x() * 4, get_blocks_y() * 4); + + bool bc1_punchthrough_flag = false; + bool used_bc1_transparent_texels_for_black = false; + + bool unpack_failed = false; + +#pragma omp parallel for + for (int by = 0; by < (int)get_blocks_y(); by++) + { + for (uint32_t bx = 0; bx < get_blocks_x(); bx++) + { + const void* pBlock = (const uint8_t*)get_blocks() + (bx + by * get_blocks_x()) * get_bytes_per_block(); + + color_quad_u8 unpacked_pixels[16]; + for (uint32_t i = 0; i < 16; i++) + unpacked_pixels[i].set(0, 0, 0, 255); + + switch (m_params.m_dxgi_format) + { + case DXGI_FORMAT_BC1_UNORM: + { + const bool used_punchthrough = rgbcx::unpack_bc1(pBlock, unpacked_pixels, true, m_params.m_bc1_mode); + + if (used_punchthrough) + { + bc1_punchthrough_flag = true; + + const rgbcx::bc1_block* pBC1_block = (const rgbcx::bc1_block*)pBlock; + + for (uint32_t y = 0; y < 4; y++) + for (uint32_t x = 0; x < 4; x++) + if (pBC1_block->get_selector(x, y) == 3) + used_bc1_transparent_texels_for_black = true; + } + + break; + } + case DXGI_FORMAT_BC3_UNORM: + { + if (!rgbcx::unpack_bc3(pBlock, unpacked_pixels, m_params.m_bc1_mode)) + bc1_punchthrough_flag = true; + break; + } + case DXGI_FORMAT_BC4_UNORM: + { + rgbcx::unpack_bc4(pBlock, &unpacked_pixels[0][0], 4); + +#if DECODE_BC4_TO_GRAYSCALE + for (uint32_t i = 0; i < 16; i++) + { + unpacked_pixels[i][1] = unpacked_pixels[i][0]; + unpacked_pixels[i][2] = unpacked_pixels[i][0]; + } +#endif + break; + } + case DXGI_FORMAT_BC5_UNORM: + { + rgbcx::unpack_bc5(pBlock, &unpacked_pixels[0][0], 0, 1, 4); + break; + } + case DXGI_FORMAT_BC7_UNORM: + { + if (!bc7decomp::unpack_bc7((const uint8_t*)pBlock, (bc7decomp::color_rgba*)unpacked_pixels)) + { + fprintf(stderr, "bc7decomp::unpack_bc7() failed!\n"); + unpack_failed = true; + } + + // Now unpack the block using the non-SSE reference decoder, to make sure we get the same exact unpacked bits. + color_quad_u8 unpacked_pixels_ref[16]; + if (!bc7decomp_ref::unpack_bc7((const uint8_t*)pBlock, (bc7decomp::color_rgba*)unpacked_pixels_ref)) + { + fprintf(stderr, "bc7decomp::unpack_bc7_ref() failed!\n"); + unpack_failed = true; + } + + if (memcmp(unpacked_pixels, unpacked_pixels_ref, sizeof(unpacked_pixels)) != 0) + { + fprintf(stderr, "BC7 unpack verification failed!\n"); + unpack_failed = true; + } + + break; + } + default: + assert(0); + break; + } + + unpacked_image.set_block(bx, by, 4, 4, unpacked_pixels); + } // bx + } // by + + if (unpack_failed) + return false; + + // Sanity check the BC1/BC3 output + if (m_params.m_dxgi_format == DXGI_FORMAT_BC3_UNORM) + { + if (bc1_punchthrough_flag) + fprintf(stderr, "WARNING: BC3 mode selected, but rgbcx::unpack_bc3() returned one or more blocks using 3-color mode!\n"); + } + else if (m_params.m_dxgi_format == DXGI_FORMAT_BC1_UNORM) + { + if ((bc1_punchthrough_flag) && (!m_params.m_use_bc1_3color_mode)) + fprintf(stderr, "WARNING: BC1 output used 3-color mode, when this was disabled!\n"); + + if ((used_bc1_transparent_texels_for_black) && (!used_bc1_transparent_texels_for_black)) + fprintf(stderr, "WARNING: BC1 output used the transparent selector for black, when this was disabled!\n"); + } + + if (m_params.m_status_output) + { + if ((m_params.m_dxgi_format == DXGI_FORMAT_BC1_UNORM) || (m_params.m_dxgi_format == DXGI_FORMAT_BC3_UNORM)) + printf("Output used 3-color mode: %u, output used transparent texels for black: %u\n", bc1_punchthrough_flag, used_bc1_transparent_texels_for_black); + } + + return true; + } + +} // namespace rdo_bc diff --git a/external/bc7enc_rdo/rdo_bc_encoder.h b/external/bc7enc_rdo/rdo_bc_encoder.h new file mode 100644 index 0000000000..048be052a4 --- /dev/null +++ b/external/bc7enc_rdo/rdo_bc_encoder.h @@ -0,0 +1,250 @@ +// rdo_bc_encoder.h +#pragma once + +#ifndef SUPPORT_BC7E +#define SUPPORT_BC7E 0 +#endif + +#include "utils.h" +#include "ert.h" + +#include "bc7decomp.h" +#include "rgbcx.h" + +#include "bc7enc.h" + +#if SUPPORT_BC7E +#include "bc7e_ispc.h" +#endif + +#include "dds_defs.h" + +namespace rdo_bc +{ + + struct rdo_bc_params + { + rdo_bc_params() + { + clear(); + } + + void clear() + { + m_bc7_uber_level = 6; // BC7ENC_MAX_UBER_LEVEL; + m_bc7enc_max_partitions_to_scan = BC7ENC_MAX_PARTITIONS; + m_perceptual = false; + m_y_flip = false; + m_bc45_channel0 = 0; + m_bc45_channel1 = 1; + + m_bc1_mode = rgbcx::bc1_approx_mode::cBC1Ideal; + m_use_bc1_3color_mode = true; + + // We're just turning this on by default now, like NVDXT.EXE used to do back in the old original Xbox days. + m_use_bc1_3color_mode_for_black = true; // false; + + m_bc1_quality_level = rgbcx::MAX_LEVEL; + + m_dxgi_format = DXGI_FORMAT_BC7_UNORM; + + m_rdo_lambda = 0.0f; + m_rdo_debug_output = false; + m_rdo_smooth_block_error_scale = 15.0f; + m_custom_rdo_smooth_block_error_scale = false; + m_lookback_window_size = 128; + m_custom_lookback_window_size = false; + m_bc7enc_rdo_bc7_quant_mode6_endpoints = true; + m_bc7enc_rdo_bc7_weight_modes = true; + m_bc7enc_rdo_bc7_weight_low_frequency_partitions = true; + m_bc7enc_rdo_bc7_pbit1_weighting = true; + m_rdo_max_smooth_block_std_dev = 18.0f; + m_rdo_allow_relative_movement = false; + m_rdo_try_2_matches = true; + m_rdo_ultrasmooth_block_handling = true; + + m_use_hq_bc345 = true; + m_bc345_search_rad = 5; + m_bc345_mode_mask = rgbcx::BC4_USE_ALL_MODES; + + m_bc7enc_mode6_only = false; + m_rdo_multithreading = true; + + m_bc7enc_reduce_entropy = false; + + m_use_bc7e = false; + +#if SUPPORT_BC7E + // By default, if they've compiled in BC7E.ispc, then use that. In a rate distortion sense it's better overall. + // https://richg42.blogspot.com/2021/02/average-rate-distortion-curves-for.html + m_use_bc7e = true; +#endif + + m_status_output = false; + + m_rdo_max_threads = 128; + } + + int m_bc7_uber_level; + int m_bc7enc_max_partitions_to_scan; + bool m_perceptual; + bool m_y_flip; + uint32_t m_bc45_channel0; + uint32_t m_bc45_channel1; + + rgbcx::bc1_approx_mode m_bc1_mode; + bool m_use_bc1_3color_mode; + + bool m_use_bc1_3color_mode_for_black; + + int m_bc1_quality_level; + + DXGI_FORMAT m_dxgi_format; + + float m_rdo_lambda; + bool m_rdo_debug_output; + float m_rdo_smooth_block_error_scale; + bool m_custom_rdo_smooth_block_error_scale; + uint32_t m_lookback_window_size; + bool m_custom_lookback_window_size; + bool m_bc7enc_rdo_bc7_quant_mode6_endpoints; + bool m_bc7enc_rdo_bc7_weight_modes; + bool m_bc7enc_rdo_bc7_weight_low_frequency_partitions; + bool m_bc7enc_rdo_bc7_pbit1_weighting; + float m_rdo_max_smooth_block_std_dev; + bool m_rdo_allow_relative_movement; + bool m_rdo_try_2_matches; + bool m_rdo_ultrasmooth_block_handling; + + bool m_use_hq_bc345; + int m_bc345_search_rad; + uint32_t m_bc345_mode_mask; + + bool m_bc7enc_mode6_only; + bool m_rdo_multithreading; + + bool m_bc7enc_reduce_entropy; + + bool m_use_bc7e; + bool m_status_output; + + uint32_t m_rdo_max_threads; + }; + + class rdo_bc_encoder + { + public: + rdo_bc_encoder(); + + void clear(); + + bool init(const utils::image_u8& src_image, rdo_bc_params& params); + bool encode(); + + const rdo_bc_params &get_params() const { return m_params; } + + const utils::image_u8* get_orig_source_image() const { return m_pOrig_source_image; } + const utils::image_u8& get_source_image() const { return m_source_image; } + + const void* get_prerdo_blocks() const { return m_prerdo_packed_image8.size() ? (void*)m_prerdo_packed_image8.data() : (void*)m_prerdo_packed_image16.data(); } + const void* get_blocks() const { return m_packed_image8.size() ? (void*)m_packed_image8.data() : (void*)m_packed_image16.data(); } + + bool unpack_blocks(utils::image_u8& unpacked_image) const; + + DXGI_FORMAT get_pixel_format() const { return m_params.m_dxgi_format; } + + uint32_t get_orig_width() const { return m_orig_width; } + uint32_t get_orig_height() const { return m_orig_height; } + uint32_t get_blocks_x() const { return m_blocks_x; } + uint32_t get_blocks_y() const { return m_blocks_y; } + uint32_t get_total_blocks() const { return m_total_blocks; } + uint32_t get_total_blocks_size_in_bytes() const { return m_total_blocks * m_bytes_per_block; } + uint32_t get_bytes_per_block() const { return m_bytes_per_block; } + uint32_t get_pixel_format_bpp() const { return m_pixel_format_bpp; } + uint32_t get_total_texels() const { return m_total_texels; } + bool get_has_alpha() const { return m_has_alpha; } + + private: + const utils::image_u8* m_pOrig_source_image; + utils::image_u8 m_source_image; + rdo_bc_params m_params; + + uint32_t m_orig_width, m_orig_height; + uint32_t m_blocks_x, m_blocks_y, m_total_blocks, m_bytes_per_block, m_pixel_format_bpp; + uint32_t m_total_texels; + bool m_has_alpha; + + utils::block8_vec m_packed_image8; + utils::block16_vec m_packed_image16; + + utils::block8_vec m_prerdo_packed_image8; + utils::block16_vec m_prerdo_packed_image16; + + bc7enc_compress_block_params m_bc7enc_pack_params; +#if SUPPORT_BC7E + ispc::bc7e_compress_block_params m_bc7e_pack_params; +#endif + + void init_encoders(); + bool init_source_image(); + bool init_encoder_params(); + bool encode_texture(); + + struct unpacker_funcs + { + rgbcx::bc1_approx_mode m_mode; + bool m_allow_3color_mode; + bool m_use_bc1_3color_mode_for_black; + + static bool unpack_bc1_block(const void* pBlock, ert::color_rgba* pPixels, uint32_t block_index, void* pUser_data) + { + (void)block_index; + const unpacker_funcs* pState = (const unpacker_funcs*)pUser_data; + + bool used_3color_mode = rgbcx::unpack_bc1(pBlock, pPixels, true, pState->m_mode); + + if (used_3color_mode) + { + if (!pState->m_allow_3color_mode) + return false; + + if (!pState->m_use_bc1_3color_mode_for_black) + { + rgbcx::bc1_block* pBC1_block = (rgbcx::bc1_block*)pBlock; + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + if (pBC1_block->get_selector(x, y) == 3) + return false; + } // x + } // y + } + } + + return true; + } + + // TODO: Enforce 6/8 color constraints + static bool unpack_bc4_block(const void* pBlock, ert::color_rgba* pPixels, uint32_t block_index, void* pUser_data) + { + (void)block_index; + (void)pUser_data; + memset(pPixels, 0, sizeof(ert::color_rgba) * 16); + rgbcx::unpack_bc4(pBlock, (uint8_t*)pPixels, 4); + return true; + } + + static bool unpack_bc7_block(const void* pBlock, ert::color_rgba* pPixels, uint32_t block_index, void* pUser_data) + { + (void)block_index; + (void)pUser_data; + return bc7decomp::unpack_bc7(pBlock, (bc7decomp::color_rgba*)pPixels); + } + }; + + bool postprocess_rdo(); + }; + +} // namespace rdo_bc diff --git a/external/bc7enc_rdo/rgbcx.cpp b/external/bc7enc_rdo/rgbcx.cpp new file mode 100644 index 0000000000..609a4d4e90 --- /dev/null +++ b/external/bc7enc_rdo/rgbcx.cpp @@ -0,0 +1,3083 @@ +// rgbcx.cpp - see license at end of rgbcx.h +#include "rgbcx.h" +#include +#include +#include + +namespace rgbcx +{ + const uint8_t g_bc1_to_linear[4] = { 0, 3, 1, 2 }; + + const uint32_t NUM_UNIQUE_TOTAL_ORDERINGS4 = 969; + +#ifdef _MSC_VER +#pragma region +#endif + // All total orderings for 16 pixels 2-bit selectors. + // BC1 selector order 0, 2, 3, 1 (i.e. the selectors are reordered into linear order). + static uint8_t g_unique_total_orders4[NUM_UNIQUE_TOTAL_ORDERINGS4][4] = + { + {0,8,2,6},{4,3,9,0},{4,8,1,3},{12,0,3,1},{11,3,2,0},{6,4,6,0},{7,5,0,4},{6,0,8,2},{1,0,0,15},{3,0,8,5},{1,1,13,1},{13,1,2,0},{0,14,1,1},{0,15,1,0},{0,13,0,3},{16,0,0,0},{4,3,4,5},{8,6,0,2},{0,10,0,6},{10,0,4,2},{7,2,1,6},{4,7,5,0},{1,4,7,4},{0,14,2,0},{2,7,2,5},{9,0,5,2},{9,2,2,3},{10,0,5,1},{2,3,7,4},{4,9,0,3},{1,5,0,10},{1,1,6,8}, + {6,6,4,0},{11,5,0,0},{11,2,0,3},{4,0,10,2},{2,3,10,1},{1,13,1,1},{0,14,0,2},{2,3,3,8},{12,3,1,0},{14,0,0,2},{9,1,3,3},{6,4,0,6},{1,1,5,9},{5,9,0,2},{2,10,1,3},{12,0,0,4},{4,6,6,0},{0,6,4,6},{3,7,4,2},{0,13,3,0},{3,10,0,3},{10,2,1,3},{1,12,1,2},{2,0,13,1},{11,0,5,0},{12,1,3,0},{6,4,5,1},{10,4,2,0},{3,6,1,6},{7,3,6,0},{10,4,0,2},{10,0,2,4}, + {0,5,9,2},{0,9,3,4},{6,4,2,4},{3,4,7,2},{3,3,5,5},{4,2,9,1},{6,2,8,0},{3,5,3,5},{4,10,1,1},{10,1,3,2},{5,7,0,4},{5,3,7,1},{6,8,1,1},{8,8,0,0},{11,1,0,4},{14,1,0,1},{9,3,2,2},{8,2,1,5},{0,0,2,14},{3,3,9,1},{10,1,5,0},{8,3,1,4},{1,5,8,2},{6,1,9,0},{3,2,1,10},{3,11,1,1},{7,6,3,0},{9,0,3,4},{5,2,5,4},{0,2,3,11},{15,0,0,1},{0,6,6,4}, + {3,4,9,0},{4,7,0,5},{0,4,4,8},{0,13,2,1},{2,4,1,9},{3,2,5,6},{10,6,0,0},{3,5,6,2},{8,0,4,4},{1,3,6,6},{7,7,0,2},{6,1,4,5},{0,11,1,4},{2,2,8,4},{0,1,2,13},{15,0,1,0},{7,2,6,1},{8,1,7,0},{1,8,4,3},{2,13,1,0},{1,0,7,8},{14,2,0,0},{1,8,1,6},{9,3,3,1},{0,0,7,9},{4,4,1,7},{9,0,6,1},{10,2,4,0},{1,7,3,5},{0,3,8,5},{5,2,4,5},{1,2,5,8}, + {0,8,7,1},{10,3,2,1},{12,0,4,0},{2,1,4,9},{5,2,2,7},{1,9,3,3},{15,1,0,0},{6,3,4,3},{9,5,0,2},{1,6,9,0},{6,6,0,4},{13,2,1,0},{5,1,8,2},{0,5,11,0},{7,1,0,8},{1,2,12,1},{0,3,3,10},{7,4,2,3},{5,1,4,6},{7,0,3,6},{3,12,0,1},{3,4,5,4},{1,10,0,5},{7,4,3,2},{10,5,0,1},{13,3,0,0},{2,5,4,5},{3,10,1,2},{5,1,2,8},{14,0,1,1},{1,5,4,6},{1,4,5,6}, + {2,3,11,0},{11,0,4,1},{11,2,2,1},{5,3,8,0},{1,3,10,2},{0,1,13,2},{3,1,4,8},{4,2,4,6},{1,5,6,4},{2,1,11,2},{1,2,9,4},{4,7,3,2},{6,2,5,3},{7,2,2,5},{8,1,4,3},{3,2,8,3},{12,1,0,3},{7,8,1,0},{7,0,2,7},{5,10,0,1},{0,2,14,0},{2,9,3,2},{7,0,0,9},{11,1,4,0},{10,4,1,1},{2,2,9,3},{5,7,2,2},{1,3,1,11},{13,2,0,1},{4,2,8,2},{2,3,1,10},{4,2,5,5}, + {7,0,7,2},{10,0,0,6},{0,8,5,3},{4,4,0,8},{12,4,0,0},{0,1,14,1},{8,0,1,7},{5,1,5,5},{11,0,3,2},{0,4,1,11},{0,8,8,0},{0,2,5,9},{7,3,2,4},{7,8,0,1},{1,0,3,12},{7,4,5,0},{1,6,7,2},{7,6,1,2},{9,6,1,0},{12,2,0,2},{4,1,6,5},{4,0,1,11},{8,4,4,0},{13,0,1,2},{8,6,2,0},{4,12,0,0},{2,7,5,2},{2,0,5,9},{5,4,5,2},{3,8,5,0},{7,3,3,3},{4,4,8,0}, + {2,1,3,10},{5,0,1,10},{6,4,3,3},{4,9,1,2},{1,4,0,11},{11,3,1,1},{4,0,12,0},{13,0,0,3},{6,1,6,3},{9,0,4,3},{8,0,0,8},{8,4,0,4},{0,12,1,3},{0,4,10,2},{3,4,8,1},{1,3,8,4},{9,2,5,0},{5,7,4,0},{1,0,11,4},{4,10,0,2},{1,3,12,0},{6,9,0,1},{5,0,9,2},{5,9,2,0},{13,1,0,2},{9,3,4,0},{9,4,0,3},{3,1,12,0},{2,4,3,7},{1,2,13,0},{2,2,4,8},{6,8,0,2}, + {9,2,1,4},{9,5,1,1},{2,0,4,10},{5,4,0,7},{0,0,6,10},{1,2,0,13},{4,7,2,3},{6,5,5,0},{3,3,1,9},{1,6,1,8},{12,2,1,1},{4,4,5,3},{1,0,6,9},{0,6,10,0},{4,8,3,1},{4,3,2,7},{2,1,7,6},{1,9,1,5},{3,1,3,9},{8,7,1,0},{1,2,3,10},{14,1,1,0},{5,4,4,3},{3,7,0,6},{7,4,1,4},{3,7,5,1},{1,1,0,14},{0,10,3,3},{0,4,3,9},{1,7,7,1},{2,0,10,4},{5,8,0,3}, + {6,7,3,0},{0,8,4,4},{5,7,3,1},{7,9,0,0},{7,6,2,1},{0,4,5,7},{6,3,5,2},{1,2,1,12},{5,2,0,9},{8,5,0,3},{4,6,1,5},{1,1,7,7},{10,5,1,0},{1,2,8,5},{1,8,2,5},{5,1,0,10},{6,9,1,0},{13,0,2,1},{8,3,5,0},{6,3,6,1},{2,11,3,0},{3,7,3,3},{1,5,2,8},{7,5,2,2},{0,6,7,3},{13,1,1,1},{5,3,4,4},{7,2,7,0},{5,8,3,0},{3,13,0,0},{0,7,9,0},{8,0,3,5}, + {1,3,7,5},{4,0,2,10},{12,0,1,3},{1,7,6,2},{3,9,0,4},{7,2,0,7},{0,1,7,8},{2,1,8,5},{0,13,1,2},{0,8,1,7},{5,0,11,0},{5,6,2,3},{0,3,0,13},{2,3,4,7},{5,6,3,2},{4,2,10,0},{3,3,7,3},{7,2,5,2},{1,1,11,3},{12,3,0,1},{5,1,1,9},{1,15,0,0},{9,7,0,0},{9,1,2,4},{0,7,3,6},{3,0,13,0},{3,0,11,2},{0,6,5,5},{8,2,2,4},{6,10,0,0},{4,8,4,0},{0,0,3,13}, + {0,4,12,0},{7,1,6,2},{3,5,0,8},{8,0,6,2},{6,2,3,5},{2,10,0,4},{4,11,0,1},{6,1,5,4},{5,1,3,7},{0,11,3,2},{4,6,0,6},{2,6,0,8},{3,1,7,5},{2,14,0,0},{2,9,2,3},{0,3,4,9},{11,0,1,4},{13,0,3,0},{8,3,0,5},{0,5,3,8},{5,11,0,0},{0,1,4,11},{2,1,9,4},{3,4,4,5},{7,1,2,6},{12,2,2,0},{9,4,1,2},{6,0,2,8},{4,6,2,4},{11,2,3,0},{3,2,2,9},{10,3,1,2}, + {1,1,2,12},{0,5,2,9},{0,1,11,4},{6,2,4,4},{2,8,2,4},{0,9,4,3},{11,0,2,3},{0,2,11,3},{6,0,7,3},{0,3,6,7},{4,5,5,2},{1,2,6,7},{7,5,1,3},{9,0,2,5},{2,6,4,4},{4,1,9,2},{4,8,2,2},{1,12,3,0},{0,9,6,1},{0,10,6,0},{3,1,5,7},{2,13,0,1},{2,2,1,11},{3,6,0,7},{5,6,5,0},{5,5,4,2},{4,0,3,9},{3,4,1,8},{0,11,2,3},{2,12,1,1},{7,1,3,5},{7,0,9,0}, + {8,0,8,0},{1,0,2,13},{3,3,10,0},{2,4,4,6},{2,3,8,3},{1,10,5,0},{7,3,0,6},{2,9,0,5},{1,4,6,5},{6,6,3,1},{5,6,0,5},{6,3,0,7},{3,10,2,1},{2,5,5,4},{3,8,4,1},{1,14,0,1},{10,3,3,0},{3,5,7,1},{1,1,3,11},{2,4,0,10},{9,3,1,3},{5,10,1,0},{3,0,6,7},{3,1,9,3},{11,2,1,2},{5,3,3,5},{0,5,1,10},{4,1,11,0},{10,2,0,4},{7,6,0,3},{2,7,0,7},{4,2,2,8}, + {6,1,7,2},{4,9,2,1},{0,0,8,8},{3,7,2,4},{9,6,0,1},{0,12,4,0},{6,7,1,2},{0,7,2,7},{1,0,10,5},{0,0,14,2},{2,7,3,4},{5,0,0,11},{7,7,1,1},{6,2,7,1},{4,5,3,4},{3,5,1,7},{5,9,1,1},{6,2,1,7},{3,2,0,11},{0,11,0,5},{3,11,2,0},{10,1,4,1},{7,0,4,5},{11,4,0,1},{10,3,0,3},{0,2,4,10},{0,15,0,1},{0,11,5,0},{6,7,2,1},{1,12,2,1},{4,1,3,8},{1,0,13,2}, + {1,8,5,2},{7,0,1,8},{3,12,1,0},{9,2,4,1},{1,7,4,4},{11,4,1,0},{4,3,8,1},{2,8,4,2},{1,11,3,1},{1,1,4,10},{4,10,2,0},{8,2,5,1},{1,0,9,6},{5,3,2,6},{0,9,7,0},{10,2,2,2},{5,8,1,2},{8,7,0,1},{0,3,12,1},{1,0,1,14},{4,8,0,4},{3,8,0,5},{4,6,5,1},{0,9,5,2},{10,2,3,1},{2,3,9,2},{1,0,12,3},{11,3,0,2},{4,5,2,5},{0,2,12,2},{9,1,0,6},{9,2,0,5}, + {1,2,7,6},{4,7,4,1},{0,12,2,2},{0,0,0,16},{2,8,3,3},{3,6,2,5},{0,6,3,7},{7,5,4,0},{3,3,3,7},{3,3,0,10},{5,0,6,5},{0,0,10,6},{8,5,3,0},{8,1,5,2},{6,0,9,1},{11,1,2,2},{2,11,2,1},{9,5,2,0},{3,0,4,9},{2,2,12,0},{2,6,6,2},{2,1,13,0},{6,0,5,5},{2,0,14,0},{2,11,1,2},{4,4,7,1},{2,0,11,3},{3,1,1,11},{2,9,4,1},{3,7,6,0},{14,0,2,0},{1,10,4,1}, + {8,0,7,1},{3,6,5,2},{0,3,11,2},{2,5,6,3},{11,1,3,1},{6,5,3,2},{3,8,1,4},{0,2,7,7},{2,10,2,2},{1,6,2,7},{11,0,0,5},{12,1,1,2},{12,1,2,1},{0,7,1,8},{0,3,9,4},{0,2,1,13},{7,1,4,4},{10,1,0,5},{4,0,8,4},{5,2,7,2},{0,2,0,14},{4,3,7,2},{2,7,1,6},{1,2,2,11},{6,3,3,4},{1,14,1,0},{2,4,6,4},{5,3,6,2},{5,3,5,3},{8,4,1,3},{1,3,0,12},{3,5,2,6}, + {1,8,7,0},{0,7,4,5},{2,1,6,7},{4,11,1,0},{7,2,4,3},{6,1,3,6},{4,5,4,3},{2,11,0,3},{1,5,7,3},{12,0,2,2},{5,0,4,7},{1,13,0,2},{7,7,2,0},{4,1,7,4},{4,5,0,7},{5,0,5,6},{6,5,4,1},{2,4,2,8},{1,10,1,4},{6,3,1,6},{3,3,8,2},{0,7,7,2},{4,4,2,6},{1,1,8,6},{1,12,0,3},{2,1,12,1},{1,9,2,4},{1,11,0,4},{2,5,2,7},{10,0,3,3},{4,6,3,3},{3,7,1,5}, + {1,9,0,6},{7,1,7,1},{1,6,5,4},{9,2,3,2},{6,2,2,6},{2,2,2,10},{8,3,3,2},{0,1,8,7},{2,0,8,6},{0,3,1,12},{9,4,2,1},{9,4,3,0},{6,2,6,2},{1,8,0,7},{5,1,10,0},{0,5,5,6},{8,2,4,2},{2,3,2,9},{6,0,3,7},{2,2,6,6},{2,6,2,6},{1,13,2,0},{9,3,0,4},{7,3,5,1},{6,5,2,3},{5,2,6,3},{2,0,12,2},{5,7,1,3},{8,1,3,4},{3,1,10,2},{1,0,15,0},{0,8,0,8}, + {5,0,7,4},{4,4,6,2},{0,1,0,15},{10,0,1,5},{7,3,4,2},{4,9,3,0},{2,5,7,2},{3,4,2,7},{8,3,2,3},{5,1,6,4},{0,10,2,4},{6,6,1,3},{6,0,0,10},{4,4,3,5},{1,3,9,3},{7,5,3,1},{3,0,7,6},{1,8,6,1},{4,3,0,9},{3,11,0,2},{6,0,6,4},{0,1,3,12},{0,4,2,10},{5,5,6,0},{4,1,4,7},{8,1,6,1},{5,6,4,1},{8,4,2,2},{4,3,1,8},{3,0,2,11},{1,11,4,0},{0,8,3,5}, + {5,1,7,3},{7,0,8,1},{4,3,5,4},{4,6,4,2},{3,2,4,7},{1,6,3,6},{0,7,8,1},{3,0,1,12},{9,1,4,2},{7,4,0,5},{1,7,0,8},{5,4,1,6},{9,1,5,1},{1,1,9,5},{4,1,1,10},{5,3,0,8},{2,2,5,7},{4,0,0,12},{9,0,7,0},{3,4,0,9},{0,2,6,8},{8,2,0,6},{3,2,6,5},{4,2,6,4},{3,6,4,3},{2,8,6,0},{5,0,3,8},{0,4,0,12},{0,16,0,0},{0,9,2,5},{4,0,11,1},{1,6,4,5}, + {0,1,6,9},{3,4,6,3},{3,0,10,3},{7,0,6,3},{1,4,9,2},{1,5,3,7},{8,5,2,1},{0,12,0,4},{7,2,3,4},{0,5,6,5},{11,1,1,3},{6,5,0,5},{2,1,5,8},{1,4,11,0},{9,1,1,5},{0,0,13,3},{5,8,2,1},{2,12,0,2},{3,3,6,4},{4,1,10,1},{4,0,5,7},{8,1,0,7},{5,1,9,1},{4,3,3,6},{0,2,2,12},{6,3,2,5},{0,0,12,4},{1,5,1,9},{2,6,5,3},{3,6,3,4},{2,12,2,0},{1,6,8,1}, + {10,1,1,4},{1,3,4,8},{7,4,4,1},{1,11,1,3},{1,2,10,3},{3,9,3,1},{8,5,1,2},{2,10,4,0},{4,2,0,10},{2,7,6,1},{8,2,3,3},{1,5,5,5},{3,1,0,12},{3,10,3,0},{8,0,5,3},{0,6,8,2},{0,3,13,0},{0,0,16,0},{1,9,4,2},{4,1,8,3},{1,6,6,3},{0,10,5,1},{0,1,12,3},{4,0,6,6},{3,8,3,2},{0,5,4,7},{1,0,14,1},{0,4,6,6},{3,9,1,3},{3,5,8,0},{3,6,6,1},{5,4,7,0}, + {3,0,12,1},{8,6,1,1},{2,9,5,0},{6,1,1,8},{4,1,2,9},{3,9,4,0},{5,2,9,0},{0,12,3,1},{1,4,10,1},{4,0,7,5},{3,1,2,10},{5,4,2,5},{5,5,5,1},{4,2,3,7},{1,7,5,3},{2,8,0,6},{8,1,2,5},{3,8,2,3},{6,1,2,7},{3,9,2,2},{9,0,0,7},{0,8,6,2},{8,4,3,1},{0,2,8,6},{6,5,1,4},{2,3,5,6},{2,10,3,1},{0,7,0,9},{4,2,7,3},{2,4,8,2},{7,1,1,7},{2,4,7,3}, + {2,4,10,0},{0,1,10,5},{4,7,1,4},{0,10,4,2},{9,0,1,6},{1,9,6,0},{3,3,4,6},{4,5,7,0},{5,5,2,4},{2,8,1,5},{2,3,6,5},{0,1,1,14},{3,2,3,8},{10,1,2,3},{9,1,6,0},{3,4,3,6},{2,2,0,12},{0,0,9,7},{4,0,9,3},{7,0,5,4},{4,5,6,1},{2,5,1,8},{2,5,9,0},{3,5,4,4},{1,3,11,1},{7,1,5,3},{3,2,7,4},{1,4,2,9},{1,11,2,2},{2,2,3,9},{5,0,10,1},{3,2,11,0}, + {1,10,3,2},{8,3,4,1},{3,6,7,0},{0,7,5,4},{1,3,3,9},{2,2,10,2},{1,9,5,1},{0,5,0,11},{3,0,3,10},{0,4,8,4},{2,7,7,0},{2,0,2,12},{1,2,11,2},{6,3,7,0},{0,6,2,8},{0,10,1,5},{0,9,0,7},{6,4,4,2},{6,0,1,9},{1,5,10,0},{5,4,6,1},{5,5,3,3},{0,0,4,12},{0,3,2,11},{1,4,1,10},{3,0,9,4},{5,5,0,6},{1,7,8,0},{2,0,3,11},{6,4,1,5},{10,0,6,0},{0,6,0,10}, + {0,4,11,1},{3,1,6,6},{2,5,8,1},{0,2,10,4},{3,1,11,1},{6,6,2,2},{1,1,10,4},{2,1,2,11},{6,1,8,1},{0,2,13,1},{0,7,6,3},{6,8,2,0},{3,0,0,13},{4,4,4,4},{6,2,0,8},{7,3,1,5},{0,11,4,1},{6,7,0,3},{2,6,3,5},{5,2,1,8},{7,1,8,0},{5,5,1,5},{1,8,3,4},{8,2,6,0},{6,0,10,0},{5,6,1,4},{1,4,4,7},{2,7,4,3},{1,4,8,3},{5,4,3,4},{1,10,2,3},{2,9,1,4}, + {2,2,11,1},{2,5,0,9},{0,0,1,15},{0,0,11,5},{0,4,7,5},{0,1,15,0},{2,1,0,13},{0,3,10,3},{8,0,2,6},{3,3,2,8},{3,5,5,3},{1,7,1,7},{1,3,2,10},{4,0,4,8},{2,0,9,5},{1,1,1,13},{2,2,7,5},{2,1,10,3},{4,2,1,9},{4,3,6,3},{1,3,5,7},{2,5,3,6},{1,0,8,7},{5,0,2,9},{2,8,5,1},{1,6,0,9},{0,0,5,11},{0,4,9,3},{2,0,7,7},{1,7,2,6},{2,1,1,12},{2,4,9,1}, + {0,5,7,4},{6,0,4,6},{3,2,10,1},{0,6,1,9},{2,6,1,7},{0,5,8,3},{4,1,0,11},{1,2,4,9},{4,1,5,6},{6,1,0,9},{1,4,3,8},{4,5,1,6},{1,0,5,10},{5,3,1,7},{0,9,1,6},{2,0,1,13},{2,0,6,8},{8,1,1,6},{1,5,9,1},{0,6,9,1},{0,3,5,8},{0,2,9,5},{5,2,8,1},{1,1,14,0},{3,2,9,2},{5,0,8,3},{0,5,10,1},{5,2,3,6},{2,6,7,1},{2,3,0,11},{0,1,9,6},{1,0,4,11}, + {3,0,5,8},{0,0,15,1},{2,4,5,5},{0,3,7,6},{2,0,0,14},{1,1,12,2},{2,6,8,0},{3,1,8,4},{0,1,5,10} + }; + + // All total orderings for 16 pixels [0,2] 2-bit selectors. + // BC1 selector order: 0, 1, 2 + // Note this is different from g_unique_total_orders4[], which reorders the selectors into linear order. + const uint32_t NUM_UNIQUE_TOTAL_ORDERINGS3 = 153; + static uint8_t g_unique_total_orders3[NUM_UNIQUE_TOTAL_ORDERINGS3][3] = + { + {6,0,10},{3,6,7},{3,0,13},{13,3,0},{12,4,0},{9,1,6},{2,13,1},{4,7,5},{7,5,4},{9,6,1},{7,4,5},{8,6,2},{16,0,0},{10,6,0},{2,7,7}, + {0,0,16},{0,3,13},{1,15,0},{0,2,14},{1,4,11},{15,1,0},{1,12,3},{9,2,5},{14,1,1},{8,2,6},{3,3,10},{4,2,10},{14,0,2},{0,14,2},{1,7,8},{6,6,4}, + {11,5,0},{6,4,6},{11,3,2},{4,3,9},{7,1,8},{10,4,2},{12,1,3},{11,0,5},{9,3,4},{1,0,15},{9,0,7},{2,6,8},{12,2,2},{6,2,8},{6,8,2},{15,0,1}, + {4,8,4},{0,4,12},{8,5,3},{5,9,2},{11,2,3},{12,3,1},{6,3,7},{1,1,14},{2,9,5},{1,8,7},{4,10,2},{7,7,2},{13,1,2},{0,15,1},{3,2,11},{7,0,9}, + {4,4,8},{3,8,5},{0,5,11},{13,2,1},{1,10,5},{4,11,1},{3,10,3},{5,10,1},{10,2,4},{0,6,10},{14,2,0},{11,4,1},{3,12,1},{1,13,2},{1,5,10},{5,11,0}, + {12,0,4},{8,1,7},{6,10,0},{3,13,0},{7,2,7},{0,7,9},{5,8,3},{0,12,4},{11,1,4},{13,0,3},{0,16,0},{5,7,4},{10,3,3},{10,0,6},{0,13,3},{4,6,6}, + {2,8,6},{2,5,9},{7,8,1},{2,1,13},{2,0,14},{7,3,6},{5,1,10},{3,11,2},{5,4,7},{8,3,5},{10,5,1},{6,9,1},{1,3,12},{4,5,7},{2,2,12},{4,1,11}, + {0,8,8},{4,12,0},{6,5,5},{8,7,1},{5,5,6},{3,7,6},{7,9,0},{4,9,3},{0,10,6},{8,0,8},{5,3,8},{10,1,5},{6,1,9},{7,6,3},{9,5,2},{0,1,15}, + {9,7,0},{2,14,0},{3,4,9},{8,4,4},{9,4,3},{0,9,7},{1,9,6},{3,9,4},{5,2,9},{2,3,11},{5,6,5},{1,14,1},{6,7,3},{2,4,10},{2,12,2},{8,8,0}, + {2,10,4},{4,0,12},{0,11,5},{2,11,3},{1,11,4},{3,5,8},{5,0,11},{3,1,12},{1,2,13},{1,6,9} + }; + + // For each total ordering, this table indicates which other total orderings are likely to improve quality using a least squares pass. Each array is sorted by usefulness. + static uint16_t g_best_total_orderings4[NUM_UNIQUE_TOTAL_ORDERINGS4][MAX_TOTAL_ORDERINGS4] = + { +#if RGBCX_USE_SMALLER_TABLES + #include "rgbcx_table4_small.h" +#else + #include "rgbcx_table4.h" +#endif + }; + + static uint8_t g_best_total_orderings3[NUM_UNIQUE_TOTAL_ORDERINGS3][32] = + { + { 12,1,3,5,27,2,4,38,8,7,16,18,6,10,41,79,40,23,46,9,20,88,22,37,14,19,24,126,99,119,35,11 }, + { 7,64,116,14,94,30,8,42,1,108,47,55,137,10,134,95,96,115,69,32,63,29,90,113,11,148,16,103,19,9,34,25 }, + { 12,1,0,5,3,7,4,27,8,6,38,40,41,16,18,46,9,10,20,23,79,62,14,22,88,99,37,126,92,19,120,11 }, + { 16,88,27,18,46,48,126,107,79,19,59,38,37,65,23,66,0,2,3,43,12,151,28,25,5,87,72,40,1,20,52,92 }, + { 79,48,88,16,27,65,18,38,46,19,37,4,72,33,126,41,52,0,12,92,5,1,2,107,3,77,23,91,43,51,22,74 }, + { 1,8,41,122,10,22,2,0,87,24,37,120,38,7,39,4,5,3,9,92,62,59,23,16,104,11,27,79,19,26,25,32 }, + { 2,76,99,28,40,86,93,21,138,60,6,0,17,128,145,119,98,144,141,82,147,54,67,75,5,12,27,132,146,1,38,14 }, + { 47,7,64,90,1,118,116,85,57,14,30,94,50,45,137,134,8,42,69,139,55,68,58,108,95,29,10,115,0,32,2,11 }, + { 49,8,10,30,124,11,32,113,130,58,125,9,100,53,104,115,131,103,24,7,1,39,45,36,139,0,137,22,90,44,114,105 }, + { 9,38,72,125,49,41,84,11,13,5,27,0,16,92,8,2,65,105,10,18,48,29,127,131,36,14,1,46,111,79,130,12 }, + { 130,8,10,100,104,131,49,32,53,39,30,36,113,24,11,22,124,44,83,58,7,103,1,4,9,125,5,0,91,33,115,74 }, + { 114,11,58,8,120,49,9,124,142,111,41,30,10,0,97,130,62,84,38,5,72,125,92,127,100,27,139,113,13,132,32,1 }, + { 60,46,28,27,40,20,0,17,18,2,126,16,6,38,86,23,79,54,1,93,5,88,41,14,21,111,7,48,3,84,72,62 }, + { 72,92,38,65,84,48,41,79,27,16,29,111,88,5,18,46,1,0,152,14,37,19,77,42,132,7,22,13,119,56,12,2 }, + { 7,55,1,95,29,56,64,116,143,8,14,30,47,94,152,90,65,67,10,133,42,72,146,84,16,48,6,0,25,108,77,21 }, + { 27,23,20,5,0,79,38,2,3,1,59,46,4,41,33,86,37,87,88,92,7,126,43,8,22,152,151,150,149,148,147,146 }, + { 12,0,1,2,7,6,3,5,28,4,8,14,60,40,17,19,21,86,126,93,10,18,9,29,48,99,65,25,84,119,72,41 }, + { 60,40,99,2,54,12,0,1,19,28,98,93,6,138,21,5,27,17,151,14,76,46,16,18,38,29,86,144,107,7,25,41 }, + { 12,0,1,2,3,5,6,7,4,28,8,60,14,40,16,17,21,10,19,9,86,38,126,41,93,27,29,48,62,84,79,99 }, + { 0,1,2,10,5,8,3,25,4,29,32,34,63,7,77,26,16,48,65,56,14,22,129,103,72,24,18,152,140,53,96,42 }, + { 46,126,18,54,12,16,1,0,5,2,27,98,20,23,6,3,88,48,28,7,19,8,4,60,151,38,37,21,79,14,65,40 }, + { 76,6,141,86,119,2,138,67,28,145,0,93,17,1,40,60,146,99,147,14,21,144,132,7,5,29,55,27,16,75,19,12 }, + { 71,5,51,39,22,80,0,43,10,122,8,62,41,24,104,87,35,37,2,91,33,120,36,38,1,131,9,100,130,66,3,4 }, + { 126,18,46,27,20,16,88,23,12,79,54,59,48,0,73,1,37,151,5,19,28,38,2,66,60,3,65,98,14,26,6,43 }, + { 22,10,8,5,0,71,35,80,104,39,24,51,100,1,62,32,2,130,11,41,7,9,53,43,49,83,122,120,30,44,37,38 }, + { 1,34,14,129,53,63,42,26,121,148,7,44,96,10,0,24,100,32,64,116,140,22,5,19,29,103,135,108,8,61,39,83 }, + { 1,7,34,63,44,25,135,14,24,108,22,0,83,94,5,129,35,101,47,121,2,19,42,53,6,110,103,8,148,10,16,123 }, + { 12,28,16,60,18,1,6,21,14,0,86,19,2,48,93,17,38,29,7,5,65,126,46,72,41,79,84,119,40,56,54,88 }, + { 0,2,12,27,5,46,38,40,41,79,88,99,3,23,1,62,20,4,22,37,92,35,18,8,16,24,10,60,7,120,98,54 }, + { 1,7,14,56,8,0,84,67,10,2,133,72,42,111,5,30,21,4,9,3,25,94,16,116,47,11,65,18,132,90,55,64 }, + { 30,8,124,139,45,11,58,90,113,137,7,115,10,32,1,49,94,85,9,47,108,103,0,97,63,14,50,114,53,106,100,25 }, + { 65,38,48,27,16,79,72,18,88,19,46,77,84,92,37,41,0,29,1,14,12,111,2,5,31,36,87,74,105,40,28,51 }, + { 10,8,30,113,130,100,53,32,115,103,104,7,1,121,39,49,131,44,24,36,63,137,34,45,22,90,108,83,26,11,94,139 }, + { 51,52,43,33,5,74,16,37,71,91,38,3,36,87,48,22,4,0,122,41,39,18,66,27,79,24,65,88,59,23,62,92 }, + { 1,7,63,53,108,121,94,44,103,100,14,10,129,47,32,26,24,25,148,42,135,22,0,61,83,8,39,104,5,64,115,34 }, + { 1,8,10,7,5,0,80,32,62,2,24,44,53,83,9,41,30,22,100,11,14,25,120,4,26,6,3,16,122,34,19,35 }, + { 74,4,36,48,33,91,39,79,22,16,65,5,131,38,24,71,27,52,0,105,51,18,88,104,3,31,10,37,72,19,41,130 }, + { 59,43,38,79,23,27,92,51,0,16,46,5,18,88,41,37,66,3,87,20,48,2,122,4,22,12,1,126,19,65,33,24 }, + { 12,28,1,27,0,16,2,46,65,60,21,3,5,18,6,19,48,14,4,7,79,88,86,29,22,72,93,40,23,8,17,41 }, + { 22,91,39,33,24,71,5,131,36,10,51,0,130,8,104,2,35,125,9,43,52,49,83,80,100,41,122,3,37,38,4,16 }, + { 12,0,1,2,5,3,4,8,7,27,18,38,10,6,16,46,9,20,41,23,126,79,22,14,19,99,88,54,37,48,62,35 }, + { 12,27,1,2,3,0,46,4,38,16,8,28,7,79,18,5,84,6,88,10,14,21,23,20,40,22,60,19,9,29,72,65 }, + { 1,14,7,55,95,29,8,94,30,56,10,108,77,116,152,64,32,48,63,42,143,148,16,25,137,65,11,0,115,9,19,72 }, + { 37,79,66,38,16,52,48,59,43,27,87,33,41,4,23,51,3,5,88,18,92,46,73,122,22,71,20,0,65,19,2,120 }, + { 24,32,83,22,53,1,8,10,7,30,35,5,103,0,100,101,121,113,34,123,63,2,44,25,71,115,80,14,26,108,51,39 }, + { 97,45,111,58,85,139,0,90,47,7,120,106,142,30,50,132,41,62,84,1,119,114,14,56,117,8,38,29,2,64,116,5 }, + { 12,28,16,18,1,60,6,14,2,21,0,86,126,19,48,93,7,27,17,29,5,65,54,38,72,79,84,88,119,145,8,111 }, + { 118,47,64,116,57,85,7,14,50,1,42,0,45,68,86,69,2,111,134,28,90,55,16,29,56,48,84,144,60,30,112,41 }, + { 12,1,2,0,7,6,28,5,3,4,8,14,60,21,18,40,17,86,10,9,16,29,19,93,126,79,38,84,72,27,111,119 }, + { 11,8,49,130,10,125,9,124,100,114,131,30,58,104,32,39,24,113,36,105,0,41,22,120,5,53,111,38,142,44,83,35 }, + { 50,70,47,118,85,57,106,0,45,7,64,90,81,14,2,134,28,62,86,55,69,1,78,119,68,56,18,67,16,60,29,21 }, + { 43,37,33,87,51,41,66,5,122,38,22,59,92,0,23,91,27,16,71,79,18,52,120,4,3,24,46,20,73,39,62,36 }, + { 79,48,4,16,27,88,43,33,18,38,65,37,46,3,19,51,52,22,66,87,74,5,41,91,23,59,0,71,122,72,20,92 }, + { 32,100,10,8,30,104,24,44,39,113,83,103,1,7,22,53,115,63,135,121,26,35,34,5,0,108,137,90,91,45,2,130 }, + { 0,1,2,5,16,12,6,7,14,3,19,18,29,20,4,21,40,8,17,35,23,48,126,22,25,56,26,10,98,27,38,65 }, + { 143,67,56,146,1,7,133,55,64,141,134,69,6,47,14,29,84,21,111,147,57,16,95,72,118,132,50,0,2,18,119,42 }, + { 1,7,67,14,133,111,8,84,0,21,2,47,64,132,55,10,95,147,119,42,16,5,72,56,4,3,6,29,9,25,18,30 }, + { 68,57,69,112,144,86,102,2,134,55,0,70,118,64,75,47,14,28,93,143,67,7,50,149,1,21,29,56,119,95,60,78 }, + { 58,97,114,30,124,45,11,139,8,90,0,142,7,10,41,113,84,62,49,111,85,1,9,5,137,120,32,14,2,117,47,38 }, + { 23,66,18,79,38,20,43,27,16,88,46,59,126,37,87,12,73,92,3,5,48,0,19,54,2,51,28,1,41,65,122,22 }, + { 0,12,2,27,5,40,46,38,1,41,3,79,88,23,99,4,20,62,22,54,92,18,8,37,16,35,10,7,19,120,144,24 }, + { 1,14,25,26,0,7,44,34,129,42,24,5,135,22,19,148,6,96,83,2,29,16,63,35,101,64,140,136,116,110,3,10 }, + { 12,1,2,27,3,4,38,5,7,8,18,16,46,6,0,40,41,10,79,23,88,9,20,22,14,19,37,92,48,126,28,21 }, + { 7,1,10,32,108,103,94,47,8,53,25,14,34,115,100,129,121,130,148,42,64,116,63,26,44,0,24,30,113,4,104,22 }, + { 47,134,7,14,55,69,64,95,1,29,85,118,56,116,45,57,102,143,50,90,42,30,16,94,0,8,67,75,133,2,18,48 }, + { 12,1,2,0,7,6,28,8,14,5,3,4,40,21,17,18,60,86,16,93,126,10,9,29,99,38,119,25,19,54,27,84 }, + { 59,16,27,18,23,88,79,37,46,66,38,20,73,126,3,43,48,87,92,51,41,12,19,5,52,107,65,0,151,122,54,2 }, + { 1,21,147,7,119,14,76,132,55,0,86,145,2,6,69,67,16,143,111,138,17,28,29,60,18,93,8,19,40,56,84,5 }, + { 144,86,112,2,68,102,69,0,149,93,75,28,57,55,145,60,21,67,99,134,143,40,146,119,82,110,62,6,29,26,78,14 }, + { 102,57,55,69,143,75,146,67,56,68,134,2,29,141,0,21,6,14,133,118,64,1,7,95,47,84,111,28,147,82,72,119 }, + { 0,70,57,119,50,145,2,86,28,118,69,78,149,47,60,68,67,55,93,81,134,21,14,62,64,7,5,1,132,85,41,16 }, + { 51,5,43,71,122,87,41,37,91,39,0,22,33,36,38,24,66,120,62,2,80,16,92,10,59,4,27,23,35,79,8,3 }, + { 12,1,2,0,7,6,28,5,8,14,3,21,40,4,60,17,86,18,16,93,10,9,126,119,99,29,19,41,38,27,25,92 }, + { 27,18,46,126,23,16,88,79,20,151,59,73,48,38,0,54,12,2,37,1,19,5,28,60,66,41,3,109,86,65,40,6 }, + { 48,79,4,33,16,74,65,38,88,27,91,52,18,36,22,19,46,0,37,3,51,5,71,39,72,43,24,41,92,87,2,10 }, + { 86,2,144,93,28,112,141,6,102,21,99,60,75,0,68,82,69,146,67,149,55,40,145,76,111,147,56,119,110,143,26,132 }, + { 6,138,2,99,86,17,40,93,28,21,145,141,0,60,119,147,128,76,67,54,1,12,5,27,144,14,38,98,146,41,29,19 }, + { 1,8,0,10,2,29,7,5,3,56,4,25,14,152,63,32,65,72,96,42,34,108,48,9,26,16,84,103,67,148,22,129 }, + { 149,145,0,86,2,28,93,144,62,60,119,101,21,41,5,35,78,99,26,40,12,68,57,67,110,120,69,18,55,76,132,70 }, + { 12,28,16,1,48,19,6,60,2,14,18,21,0,27,46,65,86,29,5,7,72,93,40,3,17,84,56,88,126,4,38,8 }, + { 1,8,5,10,7,24,2,62,0,41,22,122,120,9,4,3,32,87,11,37,38,83,100,44,25,104,16,26,39,80,14,6 }, + { 0,119,62,86,145,149,28,132,93,2,120,67,60,41,35,5,144,21,123,38,111,81,84,56,12,44,24,50,92,55,40,22 }, + { 2,93,99,28,40,144,60,0,86,150,76,21,149,98,6,25,1,61,82,26,12,5,54,141,7,18,145,16,27,138,110,38 }, + { 24,8,10,22,32,35,100,5,1,53,0,7,71,80,30,123,83,104,51,11,2,39,44,113,9,62,25,103,34,101,43,41 }, + { 12,1,2,0,7,6,28,5,40,60,8,16,3,18,14,4,86,21,17,93,41,10,9,99,27,119,38,19,126,22,48,145 }, + { 45,47,50,7,85,90,97,1,64,139,116,118,30,58,14,106,70,111,0,57,94,42,137,142,29,120,8,56,18,134,84,41 }, + { 12,0,2,5,27,38,1,46,41,40,79,144,3,22,88,23,28,60,99,62,6,24,26,7,4,16,10,35,37,18,14,20 }, + { 37,38,59,92,0,5,23,51,79,41,27,22,2,3,87,16,46,4,1,43,20,33,18,88,24,71,8,10,48,19,126,122 }, + { 12,28,16,60,1,18,6,21,19,14,48,0,2,86,93,5,46,29,17,27,65,7,3,72,38,126,119,40,84,37,56,4 }, + { 0,2,5,1,16,6,27,28,18,38,60,7,14,21,46,40,86,41,19,48,93,8,3,79,22,4,10,37,62,23,24,111 }, + { 85,7,90,30,47,139,45,50,94,58,137,1,8,64,14,116,118,115,113,11,124,108,0,10,97,57,32,70,42,106,29,114 }, + { 33,36,22,71,51,5,91,39,0,52,43,24,131,74,16,37,38,122,41,3,87,48,4,104,35,80,10,2,105,62,27,18 }, + { 12,1,27,2,0,16,3,28,46,18,4,6,5,72,21,79,38,7,14,60,88,8,65,19,48,29,23,40,22,20,86,126 }, + { 0,12,2,27,5,38,46,41,1,40,79,3,88,23,22,99,20,37,62,4,18,6,16,35,60,28,24,7,92,8,14,10 }, + { 7,47,1,30,137,8,116,94,90,64,14,115,108,118,57,10,148,113,42,85,32,11,63,50,103,45,124,134,55,9,69,34 }, + { 55,7,1,29,56,143,64,47,67,133,14,146,95,72,84,8,116,111,6,134,141,21,65,0,69,30,16,45,85,42,50,10 }, + { 14,1,42,8,10,29,108,63,55,148,95,32,7,19,25,115,103,34,56,129,77,0,16,152,94,30,113,26,2,5,48,4 }, + { 111,120,142,97,58,0,41,45,62,132,114,84,139,30,5,8,38,2,7,85,119,90,117,1,124,11,56,47,28,27,35,72 }, + { 1,0,14,2,6,5,16,19,7,29,42,18,3,25,12,35,21,8,26,17,40,4,20,48,109,99,22,96,55,101,10,61 }, + { 12,0,1,5,3,2,4,7,27,8,38,6,40,18,16,10,20,46,9,41,23,22,79,14,62,19,37,126,88,11,92,48 }, + { 10,8,104,39,24,32,22,83,44,100,30,130,53,91,113,5,11,1,35,33,7,49,0,2,103,71,36,124,9,80,131,34 }, + { 1,7,0,14,8,34,5,25,35,26,6,63,10,123,2,16,103,19,44,32,135,121,108,80,62,30,115,94,149,144,53,18 }, + { 75,68,146,141,102,67,2,21,6,57,69,143,0,55,82,86,28,144,147,29,93,112,56,119,133,14,76,60,84,134,111,145 }, + { 10,32,115,7,8,53,1,108,30,113,94,137,100,63,90,34,130,103,121,47,44,25,104,39,24,26,85,14,49,36,22,131 }, + { 39,24,10,22,8,130,91,104,83,49,5,33,100,11,0,35,32,131,71,36,9,44,53,2,80,51,30,1,41,7,43,62 }, + { 38,36,65,105,27,72,31,79,41,131,5,48,125,39,0,16,92,46,22,13,18,84,24,37,88,2,33,74,91,71,130,49 }, + { 0,106,62,50,45,119,85,81,132,28,2,86,41,47,38,60,35,117,5,29,7,30,145,90,55,70,14,111,18,67,93,56 }, + { 0,2,5,1,3,25,19,26,4,34,29,10,22,16,8,7,24,14,48,65,53,18,6,77,44,56,72,61,121,21,136,40 }, + { 7,1,94,8,47,115,10,32,113,103,30,108,137,63,14,64,116,148,129,42,90,25,34,118,53,57,11,49,85,9,96,50 }, + { 14,0,1,26,19,5,42,2,25,24,29,22,6,44,61,16,7,96,136,3,140,34,35,55,135,18,48,77,83,4,8,10 }, + { 1,7,14,0,25,6,34,5,26,16,63,2,19,8,35,101,108,29,94,10,18,42,123,144,129,47,61,21,3,62,149,4 }, + { 12,0,2,1,28,5,6,120,7,60,40,16,18,86,27,14,21,93,8,62,41,38,3,17,4,119,99,48,19,126,10,9 }, + { 86,144,93,2,28,149,0,60,99,112,110,145,40,21,102,26,75,62,69,1,12,101,119,25,76,67,7,68,55,5,6,14 }, + { 8,30,10,32,113,49,115,137,124,103,45,90,7,139,11,1,58,53,130,94,108,100,9,63,85,125,34,47,0,24,44,104 }, + { 120,142,111,41,58,114,97,0,11,62,84,124,5,30,8,38,132,127,27,139,92,10,72,45,49,9,28,2,29,56,16,1 }, + { 8,113,30,137,7,32,10,90,94,115,1,103,108,63,47,85,49,53,11,45,34,50,14,25,9,124,100,130,139,121,42,26 }, + { 64,7,14,47,134,55,1,42,95,69,116,90,94,30,8,29,56,137,45,108,85,10,57,16,102,143,118,19,63,32,11,50 }, + { 62,132,0,119,120,41,111,86,35,28,5,84,56,38,2,93,145,60,67,12,92,27,29,72,55,117,21,24,133,149,22,45 }, + { 57,68,69,118,134,64,50,47,55,14,7,2,102,144,0,112,70,86,85,1,95,29,116,143,42,75,16,56,28,45,21,48 }, + { 0,12,2,1,5,28,6,40,60,27,7,38,16,14,86,18,93,41,62,46,99,35,8,23,3,17,22,21,10,19,79,20 }, + { 12,1,2,27,16,3,38,111,4,0,18,5,7,46,40,8,79,6,14,28,88,10,48,41,19,84,21,9,22,23,20,72 }, + { 53,103,32,7,1,100,22,63,71,44,10,115,108,24,92,104,26,30,122,94,8,39,83,34,137,135,90,91,121,5,87,47 }, + { 87,37,41,0,22,38,2,92,1,24,4,8,3,59,10,5,39,23,71,79,122,27,16,46,33,7,91,20,18,51,9,120 }, + { 1,7,8,10,0,5,35,32,53,44,14,30,2,80,25,34,6,62,26,103,16,19,63,9,149,24,121,41,22,11,113,83 }, + { 11,58,8,30,124,49,10,113,9,114,139,45,97,32,7,137,90,1,0,130,115,125,100,24,5,94,53,41,14,13,35,38 }, + { 125,105,9,36,131,49,8,130,39,11,10,5,22,38,41,104,0,31,13,24,27,16,2,72,65,91,48,32,84,18,100,74 }, + { 12,1,0,2,6,3,7,5,4,8,14,28,16,60,18,10,21,17,19,9,40,27,86,93,29,38,54,11,25,48,46,41 }, + { 84,41,38,72,92,29,111,5,65,120,79,0,27,56,48,14,132,16,119,22,86,88,46,28,62,12,1,2,93,18,24,127 }, + { 99,28,40,60,2,93,138,0,98,17,86,54,76,12,27,1,21,144,128,38,5,14,46,18,25,16,109,6,41,145,7,29 }, + { 1,63,10,32,148,14,103,34,42,7,8,108,116,53,64,96,25,121,26,94,140,0,29,19,55,24,100,136,5,4,44,115 }, + { 131,100,130,49,10,8,36,104,39,0,48,41,11,38,4,24,27,22,16,44,79,5,33,2,53,9,125,74,91,120,32,83 }, + { 36,39,131,74,4,91,22,33,125,104,130,48,10,24,16,5,49,8,100,105,79,0,9,65,71,2,18,83,31,11,19,44 }, + { 0,12,2,1,6,5,7,28,40,60,16,14,18,62,86,27,93,8,17,38,21,41,35,99,3,19,10,23,22,4,9,48 }, + { 1,7,67,14,21,147,111,55,132,119,0,8,2,76,64,16,47,84,6,18,86,95,145,10,42,29,133,5,56,134,17,72 }, + { 69,55,47,134,102,143,7,57,118,95,14,64,29,56,1,50,75,67,146,2,0,133,68,16,21,6,141,85,116,18,72,65 }, + { 1,44,7,24,83,63,34,103,22,121,53,32,25,35,0,115,108,5,14,8,10,101,94,30,2,123,110,26,137,47,90,19 }, + { 14,1,25,42,34,0,26,96,19,29,140,5,53,10,2,121,3,24,44,22,55,77,129,7,63,16,8,4,6,61,100,48 }, + { 30,90,7,8,137,94,85,1,47,113,115,108,45,139,124,11,10,32,50,58,103,14,63,64,9,116,49,42,25,148,0,53 }, + { 40,99,2,60,28,17,0,54,93,98,86,138,6,12,21,76,1,5,27,144,128,38,19,46,14,41,145,7,16,67,3,109 }, + { 45,58,30,139,90,7,85,137,97,8,124,47,1,11,106,114,50,94,0,113,10,115,14,32,9,64,108,41,49,29,62,116 }, + { 14,42,10,1,63,96,32,25,34,8,129,29,0,103,55,19,26,53,77,5,95,2,4,7,3,16,148,56,18,24,121,108 }, + { 21,2,75,86,6,76,144,28,119,99,93,147,141,67,102,145,60,132,146,128,0,82,40,138,55,111,143,17,133,112,69,14 }, + { 111,120,41,62,84,132,0,5,38,119,56,92,72,142,27,28,29,35,58,80,2,86,65,79,12,14,1,24,145,16,21,48 }, + { 146,67,141,69,133,21,6,143,57,55,111,147,56,1,14,132,7,2,134,102,0,119,29,84,76,64,86,72,28,68,47,75 }, + { 12,1,0,5,27,3,7,4,38,8,6,41,16,40,46,10,18,79,2,9,23,86,20,22,62,14,37,88,92,19,24,11 }, + { 0,12,2,1,27,5,38,28,60,6,40,7,16,46,18,14,41,99,93,62,3,79,86,23,149,8,22,35,88,17,19,10 }, + { 141,6,21,67,147,102,146,2,76,119,132,69,55,111,86,75,28,133,143,0,1,145,14,128,56,99,17,60,29,93,84,68 }, + { 21,76,1,119,86,145,2,0,14,7,6,138,146,55,17,28,132,93,67,40,60,143,29,147,111,16,69,141,5,56,19,133 }, + { 1,8,108,14,7,116,64,42,10,63,94,32,115,103,113,96,30,34,55,47,95,148,29,140,129,25,134,53,69,26,19,11 }, + { 12,1,3,5,4,2,0,7,8,38,27,16,18,6,10,20,41,40,79,46,9,23,22,88,92,37,14,24,62,19,48,99 }, + { 1,14,7,0,6,25,5,16,19,2,42,26,29,35,61,8,18,129,101,21,3,110,34,148,96,10,17,4,22,40,12,20 }, + { 0,2,5,1,3,19,22,26,16,24,29,7,14,6,4,25,18,44,8,48,12,61,20,21,10,35,65,56,23,40,17,107 }, + { 1,7,8,29,56,0,10,14,2,42,72,5,4,65,3,30,84,94,67,9,25,133,111,11,32,108,16,63,21,96,26,48 } + }; +#ifdef _MSC_VER +#pragma endregion +#endif + + static inline uint32_t iabs(int32_t i) { return (i < 0) ? static_cast(-i) : static_cast(i); } + //static inline uint64_t iabs(int64_t i) { return (i < 0) ? static_cast(-i) : static_cast(i); } + + static inline uint8_t to_5(uint32_t v) { v = v * 31 + 128; return (uint8_t)((v + (v >> 8)) >> 8); } + static inline uint8_t to_6(uint32_t v) { v = v * 63 + 128; return (uint8_t)((v + (v >> 8)) >> 8); } + + template inline T square(T a) { return a * a; } + + static inline float clampf(float value, float low, float high) { if (value < low) value = low; else if (value > high) value = high; return value; } + + template inline S clamp(S value, S low, S high) { return (value < low) ? low : ((value > high) ? high : value); } + static inline int32_t clampi(int32_t value, int32_t low, int32_t high) { if (value < low) value = low; else if (value > high) value = high; return value; } + + static inline int squarei(int a) { return a * a; } + //static inline int absi(int a) { return (a < 0) ? -a : a; } + + template inline F lerp(F a, F b, F s) { return a + (b - a) * s; } + + static const uint32_t TOTAL_ORDER_4_0_16 = 15; + static const uint32_t TOTAL_ORDER_4_1_16 = 700; + static const uint32_t TOTAL_ORDER_4_2_16 = 753; + static const uint32_t TOTAL_ORDER_4_3_16 = 515; + static uint16_t g_total_ordering4_hash[4096]; + static float g_selector_factors4[NUM_UNIQUE_TOTAL_ORDERINGS4][3]; + + static const uint32_t TOTAL_ORDER_3_0_16 = 12; + static const uint32_t TOTAL_ORDER_3_1_16 = 15; + static const uint32_t TOTAL_ORDER_3_2_16 = 89; + static uint16_t g_total_ordering3_hash[256]; + static float g_selector_factors3[NUM_UNIQUE_TOTAL_ORDERINGS3][3]; + + struct hist4 + { + uint8_t m_hist[4]; + + hist4() + { + memset(m_hist, 0, sizeof(m_hist)); + } + + hist4(uint32_t i, uint32_t j, uint32_t k, uint32_t l) + { + m_hist[0] = (uint8_t)i; + m_hist[1] = (uint8_t)j; + m_hist[2] = (uint8_t)k; + m_hist[3] = (uint8_t)l; + } + + inline bool operator== (const hist4& h) const + { + if (m_hist[0] != h.m_hist[0]) return false; + if (m_hist[1] != h.m_hist[1]) return false; + if (m_hist[2] != h.m_hist[2]) return false; + if (m_hist[3] != h.m_hist[3]) return false; + return true; + } + + inline bool any_16() const + { + return (m_hist[0] == 16) || (m_hist[1] == 16) || (m_hist[2] == 16) || (m_hist[3] == 16); + } + + inline uint32_t lookup_total_ordering_index() const + { + if (m_hist[0] == 16) + return TOTAL_ORDER_4_0_16; + else if (m_hist[1] == 16) + return TOTAL_ORDER_4_1_16; + else if (m_hist[2] == 16) + return TOTAL_ORDER_4_2_16; + else if (m_hist[3] == 16) + return TOTAL_ORDER_4_3_16; + + // Must sum to 16, so m_hist[3] isn't needed. + return g_total_ordering4_hash[m_hist[0] | (m_hist[1] << 4) | (m_hist[2] << 8)]; + } + }; + + struct hist3 + { + uint8_t m_hist[3]; + + hist3() + { + memset(m_hist, 0, sizeof(m_hist)); + } + + hist3(uint32_t i, uint32_t j, uint32_t k) + { + m_hist[0] = (uint8_t)i; + m_hist[1] = (uint8_t)j; + m_hist[2] = (uint8_t)k; + } + + inline bool operator== (const hist3& h) const + { + if (m_hist[0] != h.m_hist[0]) return false; + if (m_hist[1] != h.m_hist[1]) return false; + if (m_hist[2] != h.m_hist[2]) return false; + return true; + } + + inline bool any_16() const + { + return (m_hist[0] == 16) || (m_hist[1] == 16) || (m_hist[2] == 16); + } + + inline uint32_t lookup_total_ordering_index() const + { + if (m_hist[0] == 16) + return TOTAL_ORDER_3_0_16; + else if (m_hist[1] == 16) + return TOTAL_ORDER_3_1_16; + else if (m_hist[2] == 16) + return TOTAL_ORDER_3_2_16; + + // Must sum to 16, so m_hist[2] isn't needed. + return g_total_ordering3_hash[m_hist[0] | (m_hist[1] << 4)]; + } + }; + + struct bc1_match_entry + { + uint8_t m_hi; + uint8_t m_lo; + uint8_t m_e; + }; + + static bc1_approx_mode g_bc1_approx_mode; + static bc1_match_entry g_bc1_match5_equals_1[256], g_bc1_match6_equals_1[256]; + static bc1_match_entry g_bc1_match5_half[256], g_bc1_match6_half[256]; + + static inline int scale_5_to_8(int v) { return (v << 3) | (v >> 2); } + static inline int scale_6_to_8(int v) { return (v << 2) | (v >> 4); } + + // v0, v1 = unexpanded DXT1 endpoint values (5/6-bits) + // c0, c1 = expanded DXT1 endpoint values (8-bits) + static inline int interp_5_6_ideal(int c0, int c1) { assert(c0 < 256 && c1 < 256); return (c0 * 2 + c1) / 3; } + static inline int interp_5_6_ideal_round(int c0, int c1) { assert(c0 < 256 && c1 < 256); return (c0 * 2 + c1 + 1) / 3; } + static inline int interp_half_5_6_ideal(int c0, int c1) { assert(c0 < 256 && c1 < 256); return (c0 + c1) / 2; } + + static inline int interp_5_nv(int v0, int v1) { assert(v0 < 32 && v1 < 32); return ((2 * v0 + v1) * 22) / 8; } + static inline int interp_6_nv(int c0, int c1) { assert(c0 < 256 && c1 < 256); const int gdiff = c1 - c0; return (256 * c0 + (gdiff / 4) + 128 + gdiff * 80) / 256; } + + static inline int interp_half_5_nv(int v0, int v1) { assert(v0 < 32 && v1 < 32); return ((v0 + v1) * 33) / 8; } + static inline int interp_half_6_nv(int c0, int c1) { assert(c0 < 256 && c1 < 256); const int gdiff = c1 - c0; return (256 * c0 + gdiff / 4 + 128 + gdiff * 128) / 256; } + + static inline int interp_5_6_amd(int c0, int c1) { assert(c0 < 256 && c1 < 256); return (c0 * 43 + c1 * 21 + 32) >> 6; } + static inline int interp_half_5_6_amd(int c0, int c1) { assert(c0 < 256 && c1 < 256); return (c0 + c1 + 1) >> 1; } + + static inline int interp_5(int v0, int v1, int c0, int c1, bc1_approx_mode mode) + { + assert(scale_5_to_8(v0) == c0 && scale_5_to_8(v1) == c1); + switch (mode) + { + case bc1_approx_mode::cBC1NVidia: return interp_5_nv(v0, v1); + case bc1_approx_mode::cBC1AMD: return interp_5_6_amd(c0, c1); + default: + case bc1_approx_mode::cBC1Ideal: return interp_5_6_ideal(c0, c1); + case bc1_approx_mode::cBC1IdealRound4: return interp_5_6_ideal_round(c0, c1); + } + } + + static inline int interp_6(int v0, int v1, int c0, int c1, bc1_approx_mode mode) + { + (void)v0; (void)v1; + assert(scale_6_to_8(v0) == c0 && scale_6_to_8(v1) == c1); + switch (mode) + { + case bc1_approx_mode::cBC1NVidia: return interp_6_nv(c0, c1); + case bc1_approx_mode::cBC1AMD: return interp_5_6_amd(c0, c1); + default: + case bc1_approx_mode::cBC1Ideal: return interp_5_6_ideal(c0, c1); + case bc1_approx_mode::cBC1IdealRound4: return interp_5_6_ideal_round(c0, c1); + } + } + + static inline int interp_half_5(int v0, int v1, int c0, int c1, bc1_approx_mode mode) + { + assert(scale_5_to_8(v0) == c0 && scale_5_to_8(v1) == c1); + switch (mode) + { + case bc1_approx_mode::cBC1NVidia: return interp_half_5_nv(v0, v1); + case bc1_approx_mode::cBC1AMD: return interp_half_5_6_amd(c0, c1); + case bc1_approx_mode::cBC1Ideal: + case bc1_approx_mode::cBC1IdealRound4: + default: + return interp_half_5_6_ideal(c0, c1); + } + } + + static inline int interp_half_6(int v0, int v1, int c0, int c1, bc1_approx_mode mode) + { + (void)v0; (void)v1; + assert(scale_6_to_8(v0) == c0 && scale_6_to_8(v1) == c1); + switch (mode) + { + case bc1_approx_mode::cBC1NVidia: return interp_half_6_nv(c0, c1); + case bc1_approx_mode::cBC1AMD: return interp_half_5_6_amd(c0, c1); + case bc1_approx_mode::cBC1Ideal: + case bc1_approx_mode::cBC1IdealRound4: + default: + return interp_half_5_6_ideal(c0, c1); + } + } + + static void prepare_bc1_single_color_table_half(bc1_match_entry* pTable, const uint8_t* pExpand, int size, bc1_approx_mode mode) + { + for (int i = 0; i < 256; i++) + { + int lowest_e = 256; + for (int lo = 0; lo < size; lo++) + { + const int lo_e = pExpand[lo]; + + for (int hi = 0; hi < size; hi++) + { + const int hi_e = pExpand[hi]; + + const int v = (size == 32) ? interp_half_5(hi, lo, hi_e, lo_e, mode) : interp_half_6(hi, lo, hi_e, lo_e, mode); + + int e = iabs(v - i); + + // We only need to factor in 3% error in BC1 ideal mode. + if ((mode == bc1_approx_mode::cBC1Ideal) || (mode == bc1_approx_mode::cBC1IdealRound4)) + e += (iabs(hi_e - lo_e) * 3) / 100; + + // Favor equal endpoints, for lower error on actual GPU's which approximate the interpolation. + if ((e < lowest_e) || ((e == lowest_e) && (lo == hi))) + { + pTable[i].m_hi = static_cast(hi); + pTable[i].m_lo = static_cast(lo); + + assert(e <= UINT8_MAX); + pTable[i].m_e = static_cast(e); + + lowest_e = e; + } + + } // hi + } // lo + } + } + + static void prepare_bc1_single_color_table(bc1_match_entry* pTable, const uint8_t* pExpand, int size, bc1_approx_mode mode) + { + for (int i = 0; i < 256; i++) + { + int lowest_e = 256; + for (int lo = 0; lo < size; lo++) + { + const int lo_e = pExpand[lo]; + + for (int hi = 0; hi < size; hi++) + { + const int hi_e = pExpand[hi]; + + const int v = (size == 32) ? interp_5(hi, lo, hi_e, lo_e, mode) : interp_6(hi, lo, hi_e, lo_e, mode); + + int e = iabs(v - i); + + if ((mode == bc1_approx_mode::cBC1Ideal) || (mode == bc1_approx_mode::cBC1IdealRound4)) + e += (iabs(hi_e - lo_e) * 3) / 100; + + // Favor equal endpoints, for lower error on actual GPU's which approximate the interpolation. + if ((e < lowest_e) || ((e == lowest_e) && (lo == hi))) + { + pTable[i].m_hi = static_cast(hi); + pTable[i].m_lo = static_cast(lo); + + assert(e <= UINT8_MAX); + pTable[i].m_e = static_cast(e); + + lowest_e = e; + } + + } // hi + } // lo + } + } + + // This table is: 9 * (w * w), 9 * ((1.0f - w) * w), 9 * ((1.0f - w) * (1.0f - w)) + // where w is [0,1/3,2/3,1]. 9 is the perfect multiplier. + static const uint32_t g_weight_vals4[4] = { 0x000009, 0x010204, 0x040201, 0x090000 }; + + // multiplier is 4 for 3-color + static const uint32_t g_weight_vals3[3] = { 0x000004, 0x040000, 0x010101 }; + + static inline void compute_selector_factors4(const hist4& h, float& iz00, float& iz10, float& iz11) + { + uint32_t weight_accum = 0; + for (uint32_t sel = 0; sel < 4; sel++) + weight_accum += g_weight_vals4[sel] * h.m_hist[sel]; + + float z00 = (float)((weight_accum >> 16) & 0xFF); + float z10 = (float)((weight_accum >> 8) & 0xFF); + float z11 = (float)(weight_accum & 0xFF); + float z01 = z10; + + float det = z00 * z11 - z01 * z10; + if (fabs(det) < 1e-8f) + det = 0.0f; + else + det = (3.0f / 255.0f) / det; + + iz00 = z11 * det; + iz10 = -z10 * det; + iz11 = z00 * det; + } + + static inline void compute_selector_factors3(const hist3& h, float& iz00, float& iz10, float& iz11) + { + uint32_t weight_accum = 0; + for (uint32_t sel = 0; sel < 3; sel++) + weight_accum += g_weight_vals3[sel] * h.m_hist[sel]; + + float z00 = (float)((weight_accum >> 16) & 0xFF); + float z10 = (float)((weight_accum >> 8) & 0xFF); + float z11 = (float)(weight_accum & 0xFF); + float z01 = z10; + + float det = z00 * z11 - z01 * z10; + if (fabs(det) < 1e-8f) + det = 0.0f; + else + det = (2.0f / 255.0f) / det; + + iz00 = z11 * det; + iz10 = -z10 * det; + iz11 = z00 * det; + } + + static bool g_initialized; + + void init(bc1_approx_mode mode) + { + g_bc1_approx_mode = mode; + + uint8_t bc1_expand5[32]; + for (int i = 0; i < 32; i++) + bc1_expand5[i] = static_cast((i << 3) | (i >> 2)); + prepare_bc1_single_color_table(g_bc1_match5_equals_1, bc1_expand5, 32, mode); + prepare_bc1_single_color_table_half(g_bc1_match5_half, bc1_expand5, 32, mode); + + uint8_t bc1_expand6[64]; + for (int i = 0; i < 64; i++) + bc1_expand6[i] = static_cast((i << 2) | (i >> 4)); + prepare_bc1_single_color_table(g_bc1_match6_equals_1, bc1_expand6, 64, mode); + prepare_bc1_single_color_table_half(g_bc1_match6_half, bc1_expand6, 64, mode); + + for (uint32_t i = 0; i < NUM_UNIQUE_TOTAL_ORDERINGS4; i++) + { + hist4 h; + h.m_hist[0] = (uint8_t)g_unique_total_orders4[i][0]; + h.m_hist[1] = (uint8_t)g_unique_total_orders4[i][1]; + h.m_hist[2] = (uint8_t)g_unique_total_orders4[i][2]; + h.m_hist[3] = (uint8_t)g_unique_total_orders4[i][3]; + + if (!h.any_16()) + { + const uint32_t index = h.m_hist[0] | (h.m_hist[1] << 4) | (h.m_hist[2] << 8); + assert(index < 4096); + g_total_ordering4_hash[index] = (uint16_t)i; + } + + compute_selector_factors4(h, g_selector_factors4[i][0], g_selector_factors4[i][1], g_selector_factors4[i][2]); + } + + for (uint32_t i = 0; i < NUM_UNIQUE_TOTAL_ORDERINGS3; i++) + { + hist3 h; + h.m_hist[0] = (uint8_t)g_unique_total_orders3[i][0]; + h.m_hist[1] = (uint8_t)g_unique_total_orders3[i][1]; + h.m_hist[2] = (uint8_t)g_unique_total_orders3[i][2]; + + if (!h.any_16()) + { + const uint32_t index = h.m_hist[0] | (h.m_hist[1] << 4); + assert(index < 256); + g_total_ordering3_hash[index] = (uint16_t)i; + } + + compute_selector_factors3(h, g_selector_factors3[i][0], g_selector_factors3[i][1], g_selector_factors3[i][2]); + } + + g_initialized = true; + } + + void encode_bc1_solid_block(void* pDst, uint32_t fr, uint32_t fg, uint32_t fb, bool allow_3color) + { + bc1_block* pDst_block = static_cast(pDst); + + uint32_t mask = 0xAA; + int max16 = -1, min16 = 0; + + if (allow_3color) + { + const uint32_t err4 = g_bc1_match5_equals_1[fr].m_e + g_bc1_match6_equals_1[fg].m_e + g_bc1_match5_equals_1[fb].m_e; + const uint32_t err3 = g_bc1_match5_half[fr].m_e + g_bc1_match6_half[fg].m_e + g_bc1_match5_half[fb].m_e; + + if (err3 < err4) + { + max16 = (g_bc1_match5_half[fr].m_hi << 11) | (g_bc1_match6_half[fg].m_hi << 5) | g_bc1_match5_half[fb].m_hi; + min16 = (g_bc1_match5_half[fr].m_lo << 11) | (g_bc1_match6_half[fg].m_lo << 5) | g_bc1_match5_half[fb].m_lo; + + if (max16 > min16) + std::swap(max16, min16); + } + } + + if (max16 == -1) + { + max16 = (g_bc1_match5_equals_1[fr].m_hi << 11) | (g_bc1_match6_equals_1[fg].m_hi << 5) | g_bc1_match5_equals_1[fb].m_hi; + min16 = (g_bc1_match5_equals_1[fr].m_lo << 11) | (g_bc1_match6_equals_1[fg].m_lo << 5) | g_bc1_match5_equals_1[fb].m_lo; + + if (min16 == max16) + { + // Always forbid 3 color blocks + // This is to guarantee that BC3 blocks never use punchthrough alpha (3 color) mode, which isn't supported on some (all?) GPU's. + mask = 0; + + // Make l > h + if (min16 > 0) + min16--; + else + { + // l = h = 0 + assert(min16 == max16 && max16 == 0); + + max16 = 1; + min16 = 0; + mask = 0x55; + } + + assert(max16 > min16); + } + + if (max16 < min16) + { + std::swap(max16, min16); + mask ^= 0x55; + } + } + + pDst_block->set_low_color(static_cast(max16)); + pDst_block->set_high_color(static_cast(min16)); + pDst_block->m_selectors[0] = static_cast(mask); + pDst_block->m_selectors[1] = static_cast(mask); + pDst_block->m_selectors[2] = static_cast(mask); + pDst_block->m_selectors[3] = static_cast(mask); + } + + static const float g_midpoint5[32] = { .015686f, .047059f, .078431f, .111765f, .145098f, .176471f, .207843f, .241176f, .274510f, .305882f, .337255f, .370588f, .403922f, .435294f, .466667f, .5f, .533333f, .564706f, .596078f, .629412f, .662745f, .694118f, .725490f, .758824f, .792157f, .823529f, .854902f, .888235f, .921569f, .952941f, .984314f, 1e+37f }; + static const float g_midpoint6[64] = { .007843f, .023529f, .039216f, .054902f, .070588f, .086275f, .101961f, .117647f, .133333f, .149020f, .164706f, .180392f, .196078f, .211765f, .227451f, .245098f, .262745f, .278431f, .294118f, .309804f, .325490f, .341176f, .356863f, .372549f, .388235f, .403922f, .419608f, .435294f, .450980f, .466667f, .482353f, .500000f, .517647f, .533333f, .549020f, .564706f, .580392f, .596078f, .611765f, .627451f, .643137f, .658824f, .674510f, .690196f, .705882f, .721569f, .737255f, .754902f, .772549f, .788235f, .803922f, .819608f, .835294f, .850980f, .866667f, .882353f, .898039f, .913725f, .929412f, .945098f, .960784f, .976471f, .992157f, 1e+37f }; + + struct vec3F { float c[3]; }; + + static inline void compute_least_squares_endpoints4_rgb( + vec3F* pXl, vec3F* pXh, + int total_r, int total_g, int total_b, + float iz00, float iz10, float iz11, + uint32_t s, const uint32_t r_sum[17], const uint32_t g_sum[17], const uint32_t b_sum[17]) + { + const float iz01 = iz10; + + const uint32_t f1 = g_unique_total_orders4[s][0]; + const uint32_t f2 = g_unique_total_orders4[s][0] + g_unique_total_orders4[s][1]; + const uint32_t f3 = g_unique_total_orders4[s][0] + g_unique_total_orders4[s][1] + g_unique_total_orders4[s][2]; + uint32_t uq00_r = (r_sum[f2] - r_sum[f1]) + (r_sum[f3] - r_sum[f2]) * 2 + (r_sum[16] - r_sum[f3]) * 3; + uint32_t uq00_g = (g_sum[f2] - g_sum[f1]) + (g_sum[f3] - g_sum[f2]) * 2 + (g_sum[16] - g_sum[f3]) * 3; + uint32_t uq00_b = (b_sum[f2] - b_sum[f1]) + (b_sum[f3] - b_sum[f2]) * 2 + (b_sum[16] - b_sum[f3]) * 3; + + float q10_r = (float)(total_r * 3 - uq00_r); + float q10_g = (float)(total_g * 3 - uq00_g); + float q10_b = (float)(total_b * 3 - uq00_b); + + pXl->c[0] = iz00 * (float)uq00_r + iz01 * q10_r; + pXh->c[0] = iz10 * (float)uq00_r + iz11 * q10_r; + + pXl->c[1] = iz00 * (float)uq00_g + iz01 * q10_g; + pXh->c[1] = iz10 * (float)uq00_g + iz11 * q10_g; + + pXl->c[2] = iz00 * (float)uq00_b + iz01 * q10_b; + pXh->c[2] = iz10 * (float)uq00_b + iz11 * q10_b; + } + + static inline bool compute_least_squares_endpoints4_rgb(const color32* pColors, const uint8_t* pSelectors, vec3F* pXl, vec3F* pXh, int total_r, int total_g, int total_b) + { + uint32_t uq00_r = 0, uq00_g = 0, uq00_b = 0; + uint32_t weight_accum = 0; + for (uint32_t i = 0; i < 16; i++) + { + const uint8_t r = pColors[i].c[0], g = pColors[i].c[1], b = pColors[i].c[2]; + const uint8_t sel = pSelectors[i]; + + weight_accum += g_weight_vals4[sel]; + uq00_r += sel * r; + uq00_g += sel * g; + uq00_b += sel * b; + } + + int q10_r = total_r * 3 - uq00_r; + int q10_g = total_g * 3 - uq00_g; + int q10_b = total_b * 3 - uq00_b; + + float z00 = (float)((weight_accum >> 16) & 0xFF); + float z10 = (float)((weight_accum >> 8) & 0xFF); + float z11 = (float)(weight_accum & 0xFF); + float z01 = z10; + + float det = z00 * z11 - z01 * z10; + if (fabs(det) < 1e-8f) + return false; + + det = (3.0f / 255.0f) / det; + + float iz00, iz01, iz10, iz11; + iz00 = z11 * det; + iz01 = -z01 * det; + iz10 = -z10 * det; + iz11 = z00 * det; + + pXl->c[0] = iz00 * (float)uq00_r + iz01 * q10_r; + pXh->c[0] = iz10 * (float)uq00_r + iz11 * q10_r; + + pXl->c[1] = iz00 * (float)uq00_g + iz01 * q10_g; + pXh->c[1] = iz10 * (float)uq00_g + iz11 * q10_g; + + pXl->c[2] = iz00 * (float)uq00_b + iz01 * q10_b; + pXh->c[2] = iz10 * (float)uq00_b + iz11 * q10_b; + + return true; + } + + static inline void compute_least_squares_endpoints3_rgb( + vec3F* pXl, vec3F* pXh, + int total_r, int total_g, int total_b, + float iz00, float iz10, float iz11, + uint32_t s, const uint32_t r_sum[17], const uint32_t g_sum[17], const uint32_t b_sum[17]) + { + const float iz01 = iz10; + + // Compensates for BC1 3-color ordering, which is selector 0, 2, 1 + const uint32_t f1 = g_unique_total_orders3[s][0]; + const uint32_t f2 = g_unique_total_orders3[s][0] + g_unique_total_orders3[s][2]; + uint32_t uq00_r = (r_sum[16] - r_sum[f2]) * 2 + (r_sum[f2] - r_sum[f1]); + uint32_t uq00_g = (g_sum[16] - g_sum[f2]) * 2 + (g_sum[f2] - g_sum[f1]); + uint32_t uq00_b = (b_sum[16] - b_sum[f2]) * 2 + (b_sum[f2] - b_sum[f1]); + + float q10_r = (float)(total_r * 2 - uq00_r); + float q10_g = (float)(total_g * 2 - uq00_g); + float q10_b = (float)(total_b * 2 - uq00_b); + + pXl->c[0] = iz00 * (float)uq00_r + iz01 * q10_r; + pXh->c[0] = iz10 * (float)uq00_r + iz11 * q10_r; + + pXl->c[1] = iz00 * (float)uq00_g + iz01 * q10_g; + pXh->c[1] = iz10 * (float)uq00_g + iz11 * q10_g; + + pXl->c[2] = iz00 * (float)uq00_b + iz01 * q10_b; + pXh->c[2] = iz10 * (float)uq00_b + iz11 * q10_b; + } + + static inline bool compute_least_squares_endpoints3_rgb(bool use_black, const color32* pColors, const uint8_t* pSelectors, vec3F* pXl, vec3F* pXh) + { + int uq00_r = 0, uq00_g = 0, uq00_b = 0; + uint32_t weight_accum = 0; + int total_r = 0, total_g = 0, total_b = 0; + for (uint32_t i = 0; i < 16; i++) + { + const uint8_t r = pColors[i].c[0], g = pColors[i].c[1], b = pColors[i].c[2]; + if (use_black) + { + if ((r | g | b) < 4) + continue; + } + + const uint8_t sel = pSelectors[i]; + assert(sel <= 3); + if (sel == 3) + continue; + + weight_accum += g_weight_vals3[sel]; + + static const uint8_t s_tran[3] = { 0, 2, 1 }; + const uint8_t tsel = s_tran[sel]; + uq00_r += tsel * r; + uq00_g += tsel * g; + uq00_b += tsel * b; + + total_r += r; + total_g += g; + total_b += b; + } + + int q10_r = total_r * 2 - uq00_r; + int q10_g = total_g * 2 - uq00_g; + int q10_b = total_b * 2 - uq00_b; + + float z00 = (float)((weight_accum >> 16) & 0xFF); + float z10 = (float)((weight_accum >> 8) & 0xFF); + float z11 = (float)(weight_accum & 0xFF); + float z01 = z10; + + float det = z00 * z11 - z01 * z10; + if (fabs(det) < 1e-8f) + return false; + + det = (2.0f / 255.0f) / det; + + float iz00, iz01, iz10, iz11; + iz00 = z11 * det; + iz01 = -z01 * det; + iz10 = -z10 * det; + iz11 = z00 * det; + + pXl->c[0] = iz00 * (float)uq00_r + iz01 * q10_r; + pXh->c[0] = iz10 * (float)uq00_r + iz11 * q10_r; + + pXl->c[1] = iz00 * (float)uq00_g + iz01 * q10_g; + pXh->c[1] = iz10 * (float)uq00_g + iz11 * q10_g; + + pXl->c[2] = iz00 * (float)uq00_b + iz01 * q10_b; + pXh->c[2] = iz10 * (float)uq00_b + iz11 * q10_b; + + return true; + } + + static inline void bc1_get_block_colors4(uint32_t block_r[4], uint32_t block_g[4], uint32_t block_b[4], uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb) + { + block_r[0] = (lr << 3) | (lr >> 2); block_g[0] = (lg << 2) | (lg >> 4); block_b[0] = (lb << 3) | (lb >> 2); + block_r[3] = (hr << 3) | (hr >> 2); block_g[3] = (hg << 2) | (hg >> 4); block_b[3] = (hb << 3) | (hb >> 2); + + if (g_bc1_approx_mode == bc1_approx_mode::cBC1Ideal) + { + block_r[1] = (block_r[0] * 2 + block_r[3]) / 3; block_g[1] = (block_g[0] * 2 + block_g[3]) / 3; block_b[1] = (block_b[0] * 2 + block_b[3]) / 3; + block_r[2] = (block_r[3] * 2 + block_r[0]) / 3; block_g[2] = (block_g[3] * 2 + block_g[0]) / 3; block_b[2] = (block_b[3] * 2 + block_b[0]) / 3; + } + else if (g_bc1_approx_mode == bc1_approx_mode::cBC1IdealRound4) + { + block_r[1] = (block_r[0] * 2 + block_r[3] + 1) / 3; block_g[1] = (block_g[0] * 2 + block_g[3] + 1) / 3; block_b[1] = (block_b[0] * 2 + block_b[3] + 1) / 3; + block_r[2] = (block_r[3] * 2 + block_r[0] + 1) / 3; block_g[2] = (block_g[3] * 2 + block_g[0] + 1) / 3; block_b[2] = (block_b[3] * 2 + block_b[0] + 1) / 3; + } + else if (g_bc1_approx_mode == bc1_approx_mode::cBC1AMD) + { + block_r[1] = interp_5_6_amd(block_r[0], block_r[3]); block_g[1] = interp_5_6_amd(block_g[0], block_g[3]); block_b[1] = interp_5_6_amd(block_b[0], block_b[3]); + block_r[2] = interp_5_6_amd(block_r[3], block_r[0]); block_g[2] = interp_5_6_amd(block_g[3], block_g[0]); block_b[2] = interp_5_6_amd(block_b[3], block_b[0]); + } + else + { + block_r[1] = interp_5_nv(lr, hr); block_g[1] = interp_6_nv(block_g[0], block_g[3]); block_b[1] = interp_5_nv(lb, hb); + block_r[2] = interp_5_nv(hr, lr); block_g[2] = interp_6_nv(block_g[3], block_g[0]); block_b[2] = interp_5_nv(hb, lb); + } + } + + static inline void bc1_get_block_colors3(uint32_t block_r[3], uint32_t block_g[3], uint32_t block_b[3], uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb) + { + block_r[0] = (lr << 3) | (lr >> 2); block_g[0] = (lg << 2) | (lg >> 4); block_b[0] = (lb << 3) | (lb >> 2); + block_r[1] = (hr << 3) | (hr >> 2); block_g[1] = (hg << 2) | (hg >> 4); block_b[1] = (hb << 3) | (hb >> 2); + + if ((g_bc1_approx_mode == bc1_approx_mode::cBC1Ideal) || (g_bc1_approx_mode == bc1_approx_mode::cBC1IdealRound4)) + { + block_r[2] = (block_r[0] + block_r[1]) / 2; block_g[2] = (block_g[0] + block_g[1]) / 2; block_b[2] = (block_b[0] + block_b[1]) / 2; + } + else if (g_bc1_approx_mode == bc1_approx_mode::cBC1AMD) + { + block_r[2] = interp_half_5_6_amd(block_r[0], block_r[1]); block_g[2] = interp_half_5_6_amd(block_g[0], block_g[1]); block_b[2] = interp_half_5_6_amd(block_b[0], block_b[1]); + } + else + { + block_r[2] = interp_half_5_nv(lr, hr); block_g[2] = interp_half_6_nv(block_g[0], block_g[1]); block_b[2] = interp_half_5_nv(lb, hb); + } + } + + static inline void bc1_find_sels4_noerr(const color32* pSrc_pixels, uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb, uint8_t sels[16], const uint8_t* pForce_selectors) + { + if (pForce_selectors) + { + memcpy(sels, pForce_selectors, 16); + return; + } + + uint32_t block_r[4], block_g[4], block_b[4]; + bc1_get_block_colors4(block_r, block_g, block_b, lr, lg, lb, hr, hg, hb); + + int ar = block_r[3] - block_r[0], ag = block_g[3] - block_g[0], ab = block_b[3] - block_b[0]; + + int dots[4]; + for (uint32_t i = 0; i < 4; i++) + dots[i] = (int)block_r[i] * ar + (int)block_g[i] * ag + (int)block_b[i] * ab; + + int t0 = dots[0] + dots[1], t1 = dots[1] + dots[2], t2 = dots[2] + dots[3]; + + ar *= 2; ag *= 2; ab *= 2; + + static const uint8_t s_sels[4] = { 3, 2, 1, 0 }; + + for (uint32_t i = 0; i < 16; i += 4) + { + const int d0 = pSrc_pixels[i + 0].r * ar + pSrc_pixels[i + 0].g * ag + pSrc_pixels[i + 0].b * ab; + const int d1 = pSrc_pixels[i + 1].r * ar + pSrc_pixels[i + 1].g * ag + pSrc_pixels[i + 1].b * ab; + const int d2 = pSrc_pixels[i + 2].r * ar + pSrc_pixels[i + 2].g * ag + pSrc_pixels[i + 2].b * ab; + const int d3 = pSrc_pixels[i + 3].r * ar + pSrc_pixels[i + 3].g * ag + pSrc_pixels[i + 3].b * ab; + + sels[i + 0] = s_sels[(d0 <= t0) + (d0 < t1) + (d0 < t2)]; + sels[i + 1] = s_sels[(d1 <= t0) + (d1 < t1) + (d1 < t2)]; + sels[i + 2] = s_sels[(d2 <= t0) + (d2 < t1) + (d2 < t2)]; + sels[i + 3] = s_sels[(d3 <= t0) + (d3 < t1) + (d3 < t2)]; + } + } + + static inline uint32_t bc1_find_sels4_fasterr(const color32* pSrc_pixels, uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb, uint8_t sels[16], uint32_t cur_err) + { + uint32_t block_r[4], block_g[4], block_b[4]; + bc1_get_block_colors4(block_r, block_g, block_b, lr, lg, lb, hr, hg, hb); + + int ar = block_r[3] - block_r[0], ag = block_g[3] - block_g[0], ab = block_b[3] - block_b[0]; + + int dots[4]; + for (uint32_t i = 0; i < 4; i++) + dots[i] = (int)block_r[i] * ar + (int)block_g[i] * ag + (int)block_b[i] * ab; + + int t0 = dots[0] + dots[1], t1 = dots[1] + dots[2], t2 = dots[2] + dots[3]; + + ar *= 2; ag *= 2; ab *= 2; + + static const uint8_t s_sels[4] = { 3, 2, 1, 0 }; + + uint32_t total_err = 0; + + for (uint32_t i = 0; i < 16; i += 4) + { + const int d0 = pSrc_pixels[i + 0].r * ar + pSrc_pixels[i + 0].g * ag + pSrc_pixels[i + 0].b * ab; + const int d1 = pSrc_pixels[i + 1].r * ar + pSrc_pixels[i + 1].g * ag + pSrc_pixels[i + 1].b * ab; + const int d2 = pSrc_pixels[i + 2].r * ar + pSrc_pixels[i + 2].g * ag + pSrc_pixels[i + 2].b * ab; + const int d3 = pSrc_pixels[i + 3].r * ar + pSrc_pixels[i + 3].g * ag + pSrc_pixels[i + 3].b * ab; + + uint8_t sel0 = s_sels[(d0 <= t0) + (d0 < t1) + (d0 < t2)]; + uint8_t sel1 = s_sels[(d1 <= t0) + (d1 < t1) + (d1 < t2)]; + uint8_t sel2 = s_sels[(d2 <= t0) + (d2 < t1) + (d2 < t2)]; + uint8_t sel3 = s_sels[(d3 <= t0) + (d3 < t1) + (d3 < t2)]; + + sels[i + 0] = sel0; + sels[i + 1] = sel1; + sels[i + 2] = sel2; + sels[i + 3] = sel3; + + total_err += squarei(pSrc_pixels[i + 0].r - block_r[sel0]) + squarei(pSrc_pixels[i + 0].g - block_g[sel0]) + squarei(pSrc_pixels[i + 0].b - block_b[sel0]); + total_err += squarei(pSrc_pixels[i + 1].r - block_r[sel1]) + squarei(pSrc_pixels[i + 1].g - block_g[sel1]) + squarei(pSrc_pixels[i + 1].b - block_b[sel1]); + total_err += squarei(pSrc_pixels[i + 2].r - block_r[sel2]) + squarei(pSrc_pixels[i + 2].g - block_g[sel2]) + squarei(pSrc_pixels[i + 2].b - block_b[sel2]); + total_err += squarei(pSrc_pixels[i + 3].r - block_r[sel3]) + squarei(pSrc_pixels[i + 3].g - block_g[sel3]) + squarei(pSrc_pixels[i + 3].b - block_b[sel3]); + + if (total_err >= cur_err) + break; + } + + return total_err; + } + + static inline uint32_t bc1_find_sels4_check2_err(const color32* pSrc_pixels, uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb, uint8_t sels[16], uint32_t cur_err) + { + uint32_t block_r[4], block_g[4], block_b[4]; + bc1_get_block_colors4(block_r, block_g, block_b, lr, lg, lb, hr, hg, hb); + + int dr = block_r[3] - block_r[0], dg = block_g[3] - block_g[0], db = block_b[3] - block_b[0]; + + const float f = 4.0f / (float)(squarei(dr) + squarei(dg) + squarei(db) + .00000125f); + + uint32_t total_err = 0; + + for (uint32_t i = 0; i < 16; i++) + { + const int r = pSrc_pixels[i].r; + const int g = pSrc_pixels[i].g; + const int b = pSrc_pixels[i].b; + + int sel = (int)((float)((r - (int)block_r[0]) * dr + (g - (int)block_g[0]) * dg + (b - (int)block_b[0]) * db) * f + .5f); + sel = clampi(sel, 1, 3); + + uint32_t err0 = squarei((int)block_r[sel - 1] - (int)r) + squarei((int)block_g[sel - 1] - (int)g) + squarei((int)block_b[sel - 1] - (int)b); + uint32_t err1 = squarei((int)block_r[sel] - (int)r) + squarei((int)block_g[sel] - (int)g) + squarei((int)block_b[sel] - (int)b); + + int best_sel = sel; + uint32_t best_err = err1; + if (err0 == err1) + { + // Prefer non-interpolation + if ((best_sel - 1) == 0) + best_sel = 0; + } + else if (err0 < best_err) + { + best_sel = sel - 1; + best_err = err0; + } + + total_err += best_err; + + if (total_err >= cur_err) + break; + + sels[i] = (uint8_t)best_sel; + } + return total_err; + } + + static inline uint32_t bc1_find_sels4_fullerr(const color32* pSrc_pixels, uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb, uint8_t sels[16], uint32_t cur_err) + { + uint32_t block_r[4], block_g[4], block_b[4]; + bc1_get_block_colors4(block_r, block_g, block_b, lr, lg, lb, hr, hg, hb); + + uint32_t total_err = 0; + + for (uint32_t i = 0; i < 16; i++) + { + const int r = pSrc_pixels[i].r; + const int g = pSrc_pixels[i].g; + const int b = pSrc_pixels[i].b; + + uint32_t best_err = squarei((int)block_r[0] - (int)r) + squarei((int)block_g[0] - (int)g) + squarei((int)block_b[0] - (int)b); + uint8_t best_sel = 0; + + for (uint32_t j = 1; (j < 4) && best_err; j++) + { + uint32_t err = squarei((int)block_r[j] - (int)r) + squarei((int)block_g[j] - (int)g) + squarei((int)block_b[j] - (int)b); + if ((err < best_err) || ((err == best_err) && (j == 3))) + { + best_err = err; + best_sel = (uint8_t)j; + } + } + + total_err += best_err; + + if (total_err >= cur_err) + break; + + sels[i] = (uint8_t)best_sel; + } + return total_err; + } + + static inline uint32_t bc1_find_sels4(uint32_t flags, const color32* pSrc_pixels, uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb, uint8_t sels[16], uint32_t cur_err, const uint8_t* pForce_selectors) + { + uint32_t err; + + if (pForce_selectors) + { + memcpy(sels, pForce_selectors, 16); + + uint32_t block_r[4], block_g[4], block_b[4]; + bc1_get_block_colors4(block_r, block_g, block_b, lr, lg, lb, hr, hg, hb); + + err = 0; + for (uint32_t i = 0; i < 16; i++) + { + const int r = pSrc_pixels[i].r; + const int g = pSrc_pixels[i].g; + const int b = pSrc_pixels[i].b; + + const uint32_t sel = pForce_selectors[i]; + assert(sel <= 3); + + err += squarei((int)block_r[sel] - (int)r) + squarei((int)block_g[sel] - (int)g) + squarei((int)block_b[sel] - (int)b); + } + } + else + { + if (flags & cEncodeBC1UseFasterMSEEval) + err = bc1_find_sels4_fasterr(pSrc_pixels, lr, lg, lb, hr, hg, hb, sels, cur_err); + else if (flags & cEncodeBC1UseFullMSEEval) + err = bc1_find_sels4_fullerr(pSrc_pixels, lr, lg, lb, hr, hg, hb, sels, cur_err); + else + err = bc1_find_sels4_check2_err(pSrc_pixels, lr, lg, lb, hr, hg, hb, sels, cur_err); + } + + return err; + } + + static inline uint32_t bc1_find_sels3_fullerr(bool use_black, const color32* pSrc_pixels, uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb, uint8_t sels[16], uint32_t cur_err, const uint8_t* pForce_selectors) + { + uint32_t block_r[4], block_g[4], block_b[4]; + bc1_get_block_colors3(block_r, block_g, block_b, lr, lg, lb, hr, hg, hb); + + uint32_t total_err = 0; + + if (pForce_selectors) + { + memcpy(sels, pForce_selectors, 16); + + //uint32_t block_r[4], block_g[4], block_b[4]; + //bc1_get_block_colors3(block_r, block_g, block_b, lr, lg, lb, hr, hg, hb); + + block_r[3] = 0; block_g[3] = 0; block_b[3] = 0; + + for (uint32_t i = 0; i < 16; i++) + { + const int r = pSrc_pixels[i].r; + const int g = pSrc_pixels[i].g; + const int b = pSrc_pixels[i].b; + + const uint32_t sel = pForce_selectors[i]; + assert(sel <= 3); + + total_err += squarei((int)block_r[sel] - (int)r) + squarei((int)block_g[sel] - (int)g) + squarei((int)block_b[sel] - (int)b); + } + } + else + { + for (uint32_t i = 0; i < 16; i++) + { + const int r = pSrc_pixels[i].r; + const int g = pSrc_pixels[i].g; + const int b = pSrc_pixels[i].b; + + uint32_t best_err = squarei((int)block_r[0] - (int)r) + squarei((int)block_g[0] - (int)g) + squarei((int)block_b[0] - (int)b); + uint32_t best_sel = 0; + + uint32_t err1 = squarei((int)block_r[1] - (int)r) + squarei((int)block_g[1] - (int)g) + squarei((int)block_b[1] - (int)b); + if (err1 < best_err) + { + best_err = err1; + best_sel = 1; + } + + uint32_t err2 = squarei((int)block_r[2] - (int)r) + squarei((int)block_g[2] - (int)g) + squarei((int)block_b[2] - (int)b); + if (err2 < best_err) + { + best_err = err2; + best_sel = 2; + } + + if (use_black) + { + uint32_t err3 = squarei(r) + squarei(g) + squarei(b); + if (err3 < best_err) + { + best_err = err3; + best_sel = 3; + } + } + + total_err += best_err; + if (total_err >= cur_err) + return total_err; + + sels[i] = (uint8_t)best_sel; + } + } + + return total_err; + } + + static inline void precise_round_565(const vec3F& xl, const vec3F& xh, + int& trial_lr, int& trial_lg, int& trial_lb, + int& trial_hr, int& trial_hg, int& trial_hb) + { + trial_lr = (int)(xl.c[0] * 31.0f); + trial_lg = (int)(xl.c[1] * 63.0f); + trial_lb = (int)(xl.c[2] * 31.0f); + + trial_hr = (int)(xh.c[0] * 31.0f); + trial_hg = (int)(xh.c[1] * 63.0f); + trial_hb = (int)(xh.c[2] * 31.0f); + + if ((uint32_t)(trial_lr | trial_lb | trial_hr | trial_hb) > 31U) + { + trial_lr = ((uint32_t)trial_lr > 31U) ? (~trial_lr >> 31) & 31 : trial_lr; + trial_hr = ((uint32_t)trial_hr > 31U) ? (~trial_hr >> 31) & 31 : trial_hr; + + trial_lb = ((uint32_t)trial_lb > 31U) ? (~trial_lb >> 31) & 31 : trial_lb; + trial_hb = ((uint32_t)trial_hb > 31U) ? (~trial_hb >> 31) & 31 : trial_hb; + } + + if ((uint32_t)(trial_lg | trial_hg) > 63U) + { + trial_lg = ((uint32_t)trial_lg > 63U) ? (~trial_lg >> 31) & 63 : trial_lg; + trial_hg = ((uint32_t)trial_hg > 63U) ? (~trial_hg >> 31) & 63 : trial_hg; + } + + trial_lr = (trial_lr + (xl.c[0] > g_midpoint5[trial_lr])) & 31; + trial_lg = (trial_lg + (xl.c[1] > g_midpoint6[trial_lg])) & 63; + trial_lb = (trial_lb + (xl.c[2] > g_midpoint5[trial_lb])) & 31; + + trial_hr = (trial_hr + (xh.c[0] > g_midpoint5[trial_hr])) & 31; + trial_hg = (trial_hg + (xh.c[1] > g_midpoint6[trial_hg])) & 63; + trial_hb = (trial_hb + (xh.c[2] > g_midpoint5[trial_hb])) & 31; + } + + static inline void precise_round_565_noscale(vec3F xl, vec3F xh, + int& trial_lr, int& trial_lg, int& trial_lb, + int& trial_hr, int& trial_hg, int& trial_hb) + { + xl.c[0] *= 1.0f / 255.0f; + xl.c[1] *= 1.0f / 255.0f; + xl.c[2] *= 1.0f / 255.0f; + + xh.c[0] *= 1.0f / 255.0f; + xh.c[1] *= 1.0f / 255.0f; + xh.c[2] *= 1.0f / 255.0f; + + precise_round_565(xl, xh, trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb); + } + + static inline void bc1_encode4(bc1_block* pDst_block, int lr, int lg, int lb, int hr, int hg, int hb, const uint8_t sels[16]) + { + uint32_t lc16 = bc1_block::pack_unscaled_color(lr, lg, lb); + uint32_t hc16 = bc1_block::pack_unscaled_color(hr, hg, hb); + + // Always forbid 3 color blocks + if (lc16 == hc16) + { + uint8_t mask = 0; + + // Make l > h + if (hc16 > 0) + hc16--; + else + { + // lc16 = hc16 = 0 + assert(lc16 == hc16 && hc16 == 0); + + hc16 = 0; + lc16 = 1; + mask = 0x55; // select hc16 + } + + assert(lc16 > hc16); + pDst_block->set_low_color(static_cast(lc16)); + pDst_block->set_high_color(static_cast(hc16)); + + pDst_block->m_selectors[0] = mask; + pDst_block->m_selectors[1] = mask; + pDst_block->m_selectors[2] = mask; + pDst_block->m_selectors[3] = mask; + } + else + { + uint8_t invert_mask = 0; + if (lc16 < hc16) + { + std::swap(lc16, hc16); + invert_mask = 0x55; + } + + assert(lc16 > hc16); + pDst_block->set_low_color((uint16_t)lc16); + pDst_block->set_high_color((uint16_t)hc16); + + uint32_t packed_sels = 0; + static const uint8_t s_sel_trans[4] = { 0, 2, 3, 1 }; + for (uint32_t i = 0; i < 16; i++) + packed_sels |= ((uint32_t)s_sel_trans[sels[i]] << (i * 2)); + + pDst_block->m_selectors[0] = (uint8_t)packed_sels ^ invert_mask; + pDst_block->m_selectors[1] = (uint8_t)(packed_sels >> 8) ^ invert_mask; + pDst_block->m_selectors[2] = (uint8_t)(packed_sels >> 16) ^ invert_mask; + pDst_block->m_selectors[3] = (uint8_t)(packed_sels >> 24) ^ invert_mask; + } + } + + static inline void bc1_encode3(bc1_block* pDst_block, int lr, int lg, int lb, int hr, int hg, int hb, const uint8_t sels[16]) + { + uint32_t lc16 = bc1_block::pack_unscaled_color(lr, lg, lb); + uint32_t hc16 = bc1_block::pack_unscaled_color(hr, hg, hb); + + bool invert_flag = false; + if (lc16 > hc16) + { + std::swap(lc16, hc16); + invert_flag = true; + } + + assert(lc16 <= hc16); + + pDst_block->set_low_color((uint16_t)lc16); + pDst_block->set_high_color((uint16_t)hc16); + + uint32_t packed_sels = 0; + + if (invert_flag) + { + static const uint8_t s_sel_trans_inv[4] = { 1, 0, 2, 3 }; + + for (uint32_t i = 0; i < 16; i++) + packed_sels |= ((uint32_t)s_sel_trans_inv[sels[i]] << (i * 2)); + } + else + { + for (uint32_t i = 0; i < 16; i++) + packed_sels |= ((uint32_t)sels[i] << (i * 2)); + } + + pDst_block->m_selectors[0] = (uint8_t)packed_sels; + pDst_block->m_selectors[1] = (uint8_t)(packed_sels >> 8); + pDst_block->m_selectors[2] = (uint8_t)(packed_sels >> 16); + pDst_block->m_selectors[3] = (uint8_t)(packed_sels >> 24); + } + + struct bc1_encode_results + { + int lr, lg, lb; + int hr, hg, hb; + uint8_t sels[16]; + bool m_3color; + }; + + static bool try_3color_block_useblack(const color32* pSrc_pixels, uint32_t flags, uint32_t& cur_err, bc1_encode_results& results, const uint8_t* pForce_selectors) + { + int total_r = 0, total_g = 0, total_b = 0; + int max_r = 0, max_g = 0, max_b = 0; + int min_r = 255, min_g = 255, min_b = 255; + int total_pixels = 0; + for (uint32_t i = 0; i < 16; i++) + { + const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b; + if ((r | g | b) < 4) + continue; + + max_r = std::max(max_r, r); max_g = std::max(max_g, g); max_b = std::max(max_b, b); + min_r = std::min(min_r, r); min_g = std::min(min_g, g); min_b = std::min(min_b, b); + total_r += r; total_g += g; total_b += b; + + total_pixels++; + } + + if (!total_pixels) + return false; + + int half_total_pixels = total_pixels >> 1; + int avg_r = (total_r + half_total_pixels) / total_pixels; + int avg_g = (total_g + half_total_pixels) / total_pixels; + int avg_b = (total_b + half_total_pixels) / total_pixels; + + uint32_t low_c = 0, high_c = 0; + + int icov[6] = { 0, 0, 0, 0, 0, 0 }; + for (uint32_t i = 0; i < 16; i++) + { + int r = (int)pSrc_pixels[i].r; + int g = (int)pSrc_pixels[i].g; + int b = (int)pSrc_pixels[i].b; + + if ((r | g | b) < 4) + continue; + + r -= avg_r; + g -= avg_g; + b -= avg_b; + + icov[0] += r * r; + icov[1] += r * g; + icov[2] += r * b; + icov[3] += g * g; + icov[4] += g * b; + icov[5] += b * b; + } + + float cov[6]; + for (uint32_t i = 0; i < 6; i++) + cov[i] = (float)(icov[i]) * (1.0f / 255.0f); + + float xr = (float)(max_r - min_r); + float xg = (float)(max_g - min_g); + float xb = (float)(max_b - min_b); + + if (icov[2] < 0) + xr = -xr; + + if (icov[4] < 0) + xg = -xg; + + for (uint32_t power_iter = 0; power_iter < 4; power_iter++) + { + float r = xr * cov[0] + xg * cov[1] + xb * cov[2]; + float g = xr * cov[1] + xg * cov[3] + xb * cov[4]; + float b = xr * cov[2] + xg * cov[4] + xb * cov[5]; + xr = r; xg = g; xb = b; + } + + float k = maximum(fabsf(xr), fabsf(xg), fabsf(xb)); + int saxis_r = 306, saxis_g = 601, saxis_b = 117; + if (k >= 2) + { + float m = 1024.0f / k; + saxis_r = (int)(xr * m); + saxis_g = (int)(xg * m); + saxis_b = (int)(xb * m); + } + + int low_dot = INT_MAX, high_dot = INT_MIN; + for (uint32_t i = 0; i < 16; i++) + { + int r = (int)pSrc_pixels[i].r, g = (int)pSrc_pixels[i].g, b = (int)pSrc_pixels[i].b; + + if ((r | g | b) < 4) + continue; + + int dot = r * saxis_r + g * saxis_g + b * saxis_b; + if (dot < low_dot) + { + low_dot = dot; + low_c = i; + } + if (dot > high_dot) + { + high_dot = dot; + high_c = i; + } + } + + int lr = to_5(pSrc_pixels[low_c].r); + int lg = to_6(pSrc_pixels[low_c].g); + int lb = to_5(pSrc_pixels[low_c].b); + + int hr = to_5(pSrc_pixels[high_c].r); + int hg = to_6(pSrc_pixels[high_c].g); + int hb = to_5(pSrc_pixels[high_c].b); + + uint8_t trial_sels[16]; + uint32_t trial_err = bc1_find_sels3_fullerr(true, pSrc_pixels, lr, lg, lb, hr, hg, hb, trial_sels, UINT32_MAX, pForce_selectors); + + if (trial_err) + { + const uint32_t total_ls_passes = flags & cEncodeBC1TwoLeastSquaresPasses ? 2 : 1; + for (uint32_t trials = 0; trials < total_ls_passes; trials++) + { + vec3F xl, xh; + int lr2, lg2, lb2, hr2, hg2, hb2; + if (!compute_least_squares_endpoints3_rgb(true, pSrc_pixels, trial_sels, &xl, &xh)) + { + lr2 = g_bc1_match5_half[avg_r].m_hi; + lg2 = g_bc1_match6_half[avg_g].m_hi; + lb2 = g_bc1_match5_half[avg_b].m_hi; + + hr2 = g_bc1_match5_half[avg_r].m_lo; + hg2 = g_bc1_match6_half[avg_g].m_lo; + hb2 = g_bc1_match5_half[avg_b].m_lo; + } + else + { + precise_round_565(xl, xh, hr2, hg2, hb2, lr2, lg2, lb2); + } + + if ((lr == lr2) && (lg == lg2) && (lb == lb2) && (hr == hr2) && (hg == hg2) && (hb == hb2)) + break; + + uint8_t trial_sels2[16]; + uint32_t trial_err2 = bc1_find_sels3_fullerr(true, pSrc_pixels, lr2, lg2, lb2, hr2, hg2, hb2, trial_sels2, trial_err, pForce_selectors); + + if (trial_err2 < trial_err) + { + trial_err = trial_err2; + lr = lr2; lg = lg2; lb = lb2; + hr = hr2; hg = hg2; hb = hb2; + memcpy(trial_sels, trial_sels2, sizeof(trial_sels)); + } + else + break; + } + } + + if (trial_err < cur_err) + { + results.m_3color = true; + results.lr = lr; + results.lg = lg; + results.lb = lb; + results.hr = hr; + results.hg = hg; + results.hb = hb; + memcpy(results.sels, trial_sels, 16); + + cur_err = trial_err; + + return true; + } + + return false; + } + + static bool try_3color_block(const color32* pSrc_pixels, uint32_t flags, uint32_t& cur_err, + int avg_r, int avg_g, int avg_b, int lr, int lg, int lb, int hr, int hg, int hb, int total_r, int total_g, int total_b, uint32_t total_orderings_to_try, + bc1_encode_results& results, const uint8_t* pForce_selectors) + { + if (pForce_selectors) + { + for (uint32_t i = 0; i < 16; i++) + if (pForce_selectors[i] == 3) + return false; + } + + uint8_t trial_sels[16]; + uint32_t trial_err = bc1_find_sels3_fullerr(false, pSrc_pixels, lr, lg, lb, hr, hg, hb, trial_sels, UINT32_MAX, pForce_selectors); + + if (trial_err) + { + const uint32_t total_ls_passes = flags & cEncodeBC1TwoLeastSquaresPasses ? 2 : 1; + for (uint32_t trials = 0; trials < total_ls_passes; trials++) + { + vec3F xl, xh; + int lr2, lg2, lb2, hr2, hg2, hb2; + if (!compute_least_squares_endpoints3_rgb(false, pSrc_pixels, trial_sels, &xl, &xh)) + { + lr2 = g_bc1_match5_half[avg_r].m_hi; + lg2 = g_bc1_match6_half[avg_g].m_hi; + lb2 = g_bc1_match5_half[avg_b].m_hi; + + hr2 = g_bc1_match5_half[avg_r].m_lo; + hg2 = g_bc1_match6_half[avg_g].m_lo; + hb2 = g_bc1_match5_half[avg_b].m_lo; + } + else + { + precise_round_565(xl, xh, hr2, hg2, hb2, lr2, lg2, lb2); + } + + if ((lr == lr2) && (lg == lg2) && (lb == lb2) && (hr == hr2) && (hg == hg2) && (hb == hb2)) + break; + + uint8_t trial_sels2[16]; + uint32_t trial_err2 = bc1_find_sels3_fullerr(false, pSrc_pixels, lr2, lg2, lb2, hr2, hg2, hb2, trial_sels2, trial_err, pForce_selectors); + + if (trial_err2 < trial_err) + { + trial_err = trial_err2; + lr = lr2; lg = lg2; lb = lb2; + hr = hr2; hg = hg2; hb = hb2; + memcpy(trial_sels, trial_sels2, sizeof(trial_sels)); + } + else + break; + } + } + + if ((trial_err) && (flags & cEncodeBC1UseLikelyTotalOrderings) && (total_orderings_to_try)) + { + hist3 h; + for (uint32_t i = 0; i < 16; i++) + { + assert(trial_sels[i] < 3); + h.m_hist[trial_sels[i]]++; + } + + const uint32_t orig_total_order_index = h.lookup_total_ordering_index(); + + int r0, g0, b0, r3, g3, b3; + r0 = (lr << 3) | (lr >> 2); g0 = (lg << 2) | (lg >> 4); b0 = (lb << 3) | (lb >> 2); + r3 = (hr << 3) | (hr >> 2); g3 = (hg << 2) | (hg >> 4); b3 = (hb << 3) | (hb >> 2); + + int ar = r3 - r0, ag = g3 - g0, ab = b3 - b0; + + int dots[16]; + for (uint32_t i = 0; i < 16; i++) + { + int r = pSrc_pixels[i].r; + int g = pSrc_pixels[i].g; + int b = pSrc_pixels[i].b; + int d = 0x1000000 + (r * ar + g * ag + b * ab); + assert(d >= 0); + dots[i] = (d << 4) + i; + } + + std::sort(dots, dots + 16); + + uint32_t r_sum[17], g_sum[17], b_sum[17]; + uint32_t r = 0, g = 0, b = 0; + for (uint32_t i = 0; i < 16; i++) + { + const uint32_t p = dots[i] & 15; + + r_sum[i] = r; + g_sum[i] = g; + b_sum[i] = b; + + r += pSrc_pixels[p].r; + g += pSrc_pixels[p].g; + b += pSrc_pixels[p].b; + } + + r_sum[16] = total_r; + g_sum[16] = total_g; + b_sum[16] = total_b; + + const uint32_t q_total = (flags & cEncodeBC1Exhaustive) ? NUM_UNIQUE_TOTAL_ORDERINGS3 : std::min(total_orderings_to_try, MAX_TOTAL_ORDERINGS3); + for (uint32_t q = 0; q < q_total; q++) + { + const uint32_t s = (flags & cEncodeBC1Exhaustive) ? q : g_best_total_orderings3[orig_total_order_index][q]; + + int trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb; + + vec3F xl, xh; + + if ((s == TOTAL_ORDER_3_0_16) || (s == TOTAL_ORDER_3_1_16) || (s == TOTAL_ORDER_3_2_16)) + { + trial_lr = g_bc1_match5_half[avg_r].m_hi; + trial_lg = g_bc1_match6_half[avg_g].m_hi; + trial_lb = g_bc1_match5_half[avg_b].m_hi; + + trial_hr = g_bc1_match5_half[avg_r].m_lo; + trial_hg = g_bc1_match6_half[avg_g].m_lo; + trial_hb = g_bc1_match5_half[avg_b].m_lo; + } + else + { + compute_least_squares_endpoints3_rgb(&xl, &xh, total_r, total_g, total_b, + g_selector_factors3[s][0], g_selector_factors3[s][1], g_selector_factors3[s][2], s, r_sum, g_sum, b_sum); + + precise_round_565(xl, xh, trial_hr, trial_hg, trial_hb, trial_lr, trial_lg, trial_lb); + } + + uint8_t trial_sels2[16]; + uint32_t trial_err2 = bc1_find_sels3_fullerr(false, pSrc_pixels, trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb, trial_sels2, UINT32_MAX, pForce_selectors); + + if (trial_err2 < trial_err) + { + trial_err = trial_err2; + + lr = trial_lr; + lg = trial_lg; + lb = trial_lb; + + hr = trial_hr; + hg = trial_hg; + hb = trial_hb; + + memcpy(trial_sels, trial_sels2, sizeof(trial_sels)); + } + + } // s + } + + if (trial_err < cur_err) + { + results.m_3color = true; + results.lr = lr; + results.lg = lg; + results.lb = lb; + results.hr = hr; + results.hg = hg; + results.hb = hb; + memcpy(results.sels, trial_sels, 16); + + cur_err = trial_err; + + return true; + } + + return false; + } + + void encode_bc1(uint32_t level, void* pDst, const uint8_t* pPixels, bool allow_3color, bool allow_transparent_texels_for_black, const uint8_t* pForce_selectors) + { + uint32_t flags = 0, total_orderings4 = 1, total_orderings3 = 1; + + static_assert(MAX_TOTAL_ORDERINGS3 >= 32, "MAX_TOTAL_ORDERINGS3 >= 32"); + static_assert(MAX_TOTAL_ORDERINGS4 >= 32, "MAX_TOTAL_ORDERINGS4 >= 32"); + + switch (level) + { + case 0: + // Faster/higher quality than stb_dxt default. + flags = cEncodeBC1BoundingBoxInt; + break; + case 1: + // Faster/higher quality than stb_dxt default. A bit higher average quality vs. mode 0. + flags = cEncodeBC1Use2DLS; + break; + case 2: + // On average mode 2 is a little weaker than modes 0/1, but it's stronger on outliers (very tough textures). + // Slightly stronger than stb_dxt. + flags = 0; + break; + case 3: + // Slightly stronger than stb_dxt HIGHQUAL. + flags = cEncodeBC1TwoLeastSquaresPasses; + break; + case 4: + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1Use6PowerIters; + break; + default: + case 5: + // stb_dxt HIGHQUAL + permit 3 color (if it's enabled). + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFasterMSEEval; + flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); + break; + case 6: + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFasterMSEEval | cEncodeBC1UseLikelyTotalOrderings; + flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); + break; + case 7: + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFasterMSEEval | cEncodeBC1UseLikelyTotalOrderings; + flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); + total_orderings4 = 4; + break; + case 8: + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFasterMSEEval | cEncodeBC1UseLikelyTotalOrderings; + flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); + total_orderings4 = 8; + break; + case 9: + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseLikelyTotalOrderings; + flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); + total_orderings4 = 11; + total_orderings3 = 3; + break; + case 10: + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseLikelyTotalOrderings; + flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); + total_orderings4 = 20; + total_orderings3 = 8; + break; + case 11: + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseLikelyTotalOrderings; + flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); + total_orderings4 = 28; + total_orderings3 = 16; + break; + case 12: + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseLikelyTotalOrderings; + flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); + total_orderings4 = 32; + total_orderings3 = 32; + break; + case 13: + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use6PowerIters | (20 << cEncodeBC1EndpointSearchRoundsShift) | cEncodeBC1TryAllInitialEndponts; + flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); + total_orderings4 = 32; + total_orderings3 = 32; + break; + case 14: + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use6PowerIters | (32 << cEncodeBC1EndpointSearchRoundsShift) | cEncodeBC1TryAllInitialEndponts; + flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); + total_orderings4 = 32; + total_orderings3 = 32; + break; + case 15: + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use6PowerIters | (32 << cEncodeBC1EndpointSearchRoundsShift) | cEncodeBC1TryAllInitialEndponts; + flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); + total_orderings4 = ((((32 + MAX_TOTAL_ORDERINGS4) / 2) + 32) / 2); + total_orderings3 = 32; + break; + case 16: + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use6PowerIters | (256 << cEncodeBC1EndpointSearchRoundsShift) | cEncodeBC1TryAllInitialEndponts; + flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); + total_orderings4 = (32 + MAX_TOTAL_ORDERINGS4) / 2; + total_orderings3 = 32; + break; + case 17: + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use6PowerIters | (256 << cEncodeBC1EndpointSearchRoundsShift) | cEncodeBC1TryAllInitialEndponts; + flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); + total_orderings4 = MAX_TOTAL_ORDERINGS4; + total_orderings3 = 32; + break; + case 18: + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use6PowerIters | cEncodeBC1Iterative | (256 << cEncodeBC1EndpointSearchRoundsShift) | cEncodeBC1TryAllInitialEndponts; + flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); + total_orderings4 = MAX_TOTAL_ORDERINGS4; + total_orderings3 = 32; + break; + case 19: + // This hidden mode is *extremely* slow and abuses the encoder. It's just for testing/training. + flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use6PowerIters | cEncodeBC1Exhaustive | cEncodeBC1Iterative | (256 << cEncodeBC1EndpointSearchRoundsShift) | cEncodeBC1TryAllInitialEndponts; + flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); + total_orderings4 = 32; + total_orderings3 = 32; + break; + } + + encode_bc1(pDst, pPixels, flags, total_orderings4, total_orderings3, pForce_selectors); + } + + static inline void encode_bc1_pick_initial(const color32* pSrc_pixels, uint32_t flags, bool grayscale_flag, + int min_r, int min_g, int min_b, int max_r, int max_g, int max_b, + int avg_r, int avg_g, int avg_b, int total_r, int total_g, int total_b, + int& lr, int& lg, int& lb, int& hr, int& hg, int& hb) + { + if (grayscale_flag) + { + const int fr = pSrc_pixels[0].r; + + // Grayscale blocks are a common enough case to specialize. + if ((max_r - min_r) < 2) + { + lr = lb = hr = hb = to_5(fr); + lg = hg = to_6(fr); + } + else + { + lr = lb = to_5(min_r); + lg = to_6(min_r); + + hr = hb = to_5(max_r); + hg = to_6(max_r); + } + } + else if (flags & cEncodeBC1Use2DLS) + { + // 2D Least Squares approach from Humus's example, with added inset and optimal rounding. + int big_chan = 0, min_chan_val = min_r, max_chan_val = max_r; + if ((max_g - min_g) > (max_chan_val - min_chan_val)) + big_chan = 1, min_chan_val = min_g, max_chan_val = max_g; + + if ((max_b - min_b) > (max_chan_val - min_chan_val)) + big_chan = 2, min_chan_val = min_b, max_chan_val = max_b; + + int sum_xy_r = 0, sum_xy_g = 0, sum_xy_b = 0; + vec3F l, h; + if (big_chan == 0) + { + for (uint32_t i = 0; i < 16; i++) + { + const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b; + sum_xy_r += r * r, sum_xy_g += r * g, sum_xy_b += r * b; + } + + int sum_x = total_r; + int sum_x2 = sum_xy_r; + + float div = (float)(16 * sum_x2 - sum_x * sum_x); + float b_y = 0.0f, b_z = 0.0f; + if (fabs(div) > 1e-8f) + { + div = 1.0f / div; + b_y = (16 * sum_xy_g - sum_x * total_g) * div; + b_z = (16 * sum_xy_b - sum_x * total_b) * div; + } + + float a_y = (total_g - b_y * sum_x) / 16.0f; + float a_z = (total_b - b_z * sum_x) / 16.0f; + + l.c[1] = a_y + b_y * min_chan_val; + l.c[2] = a_z + b_z * min_chan_val; + + h.c[1] = a_y + b_y * max_chan_val; + h.c[2] = a_z + b_z * max_chan_val; + + float dg = (h.c[1] - l.c[1]); + float db = (h.c[2] - l.c[2]); + + h.c[1] = l.c[1] + dg * (15.0f / 16.0f); + h.c[2] = l.c[2] + db * (15.0f / 16.0f); + + l.c[1] = l.c[1] + dg * (1.0f / 16.0f); + l.c[2] = l.c[2] + db * (1.0f / 16.0f); + + float d = (float)(max_chan_val - min_chan_val); + float fmin_chan_val = min_chan_val + d * (1.0f / 16.0f); + float fmax_chan_val = min_chan_val + d * (15.0f / 16.0f); + + l.c[0] = fmin_chan_val; + h.c[0] = fmax_chan_val; + } + else if (big_chan == 1) + { + for (uint32_t i = 0; i < 16; i++) + { + const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b; + sum_xy_r += g * r, sum_xy_g += g * g, sum_xy_b += g * b; + } + + int sum_x = total_g; + int sum_x2 = sum_xy_g; + + float div = (float)(16 * sum_x2 - sum_x * sum_x); + float b_x = 0.0f, b_z = 0.0f; + if (fabs(div) > 1e-8f) + { + div = 1.0f / div; + b_x = (16 * sum_xy_r - sum_x * total_r) * div; + b_z = (16 * sum_xy_b - sum_x * total_b) * div; + } + + float a_x = (total_r - b_x * sum_x) / 16.0f; + float a_z = (total_b - b_z * sum_x) / 16.0f; + + l.c[0] = a_x + b_x * min_chan_val; + l.c[2] = a_z + b_z * min_chan_val; + + h.c[0] = a_x + b_x * max_chan_val; + h.c[2] = a_z + b_z * max_chan_val; + + float dr = (h.c[0] - l.c[0]); + float db = (h.c[2] - l.c[2]); + + h.c[0] = l.c[0] + dr * (15.0f / 16.0f); + h.c[2] = l.c[2] + db * (15.0f / 16.0f); + + l.c[0] = l.c[0] + dr * (1.0f / 16.0f); + l.c[2] = l.c[2] + db * (1.0f / 16.0f); + + float d = (float)(max_chan_val - min_chan_val); + float fmin_chan_val = min_chan_val + d * (1.0f / 16.0f); + float fmax_chan_val = min_chan_val + d * (15.0f / 16.0f); + + l.c[1] = fmin_chan_val; + h.c[1] = fmax_chan_val; + } + else + { + for (uint32_t i = 0; i < 16; i++) + { + const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b; + sum_xy_r += b * r, sum_xy_g += b * g, sum_xy_b += b * b; + } + + int sum_x = total_b; + int sum_x2 = sum_xy_b; + + float div = (float)(16 * sum_x2 - sum_x * sum_x); + float b_x = 0.0f, b_y = 0.0f; + if (fabs(div) > 1e-8f) + { + div = 1.0f / div; + b_x = (16 * sum_xy_r - sum_x * total_r) * div; + b_y = (16 * sum_xy_g - sum_x * total_g) * div; + } + + float a_x = (total_r - b_x * sum_x) / 16.0f; + float a_y = (total_g - b_y * sum_x) / 16.0f; + + l.c[0] = a_x + b_x * min_chan_val; + l.c[1] = a_y + b_y * min_chan_val; + + h.c[0] = a_x + b_x * max_chan_val; + h.c[1] = a_y + b_y * max_chan_val; + + float dr = (h.c[0] - l.c[0]); + float dg = (h.c[1] - l.c[1]); + + h.c[0] = l.c[0] + dr * (15.0f / 16.0f); + h.c[1] = l.c[1] + dg * (15.0f / 16.0f); + + l.c[0] = l.c[0] + dr * (1.0f / 16.0f); + l.c[1] = l.c[1] + dg * (1.0f / 16.0f); + + float d = (float)(max_chan_val - min_chan_val); + float fmin_chan_val = min_chan_val + d * (1.0f / 16.0f); + float fmax_chan_val = min_chan_val + d * (15.0f / 16.0f); + + l.c[2] = fmin_chan_val; + h.c[2] = fmax_chan_val; + } + + precise_round_565_noscale(l, h, lr, lg, lb, hr, hg, hb); + } + else if (flags & cEncodeBC1BoundingBox) + { + // Algorithm from icbc.h compress_dxt1_fast() + vec3F l, h; + l.c[0] = min_r * (1.0f / 255.0f); + l.c[1] = min_g * (1.0f / 255.0f); + l.c[2] = min_b * (1.0f / 255.0f); + + h.c[0] = max_r * (1.0f / 255.0f); + h.c[1] = max_g * (1.0f / 255.0f); + h.c[2] = max_b * (1.0f / 255.0f); + + const float bias = 8.0f / 255.0f; + float inset_r = (h.c[0] - l.c[0] - bias) * (1.0f / 16.0f); + float inset_g = (h.c[1] - l.c[1] - bias) * (1.0f / 16.0f); + float inset_b = (h.c[2] - l.c[2] - bias) * (1.0f / 16.0f); + + l.c[0] = clampf(l.c[0] + inset_r, 0.0f, 1.0f); + l.c[1] = clampf(l.c[1] + inset_g, 0.0f, 1.0f); + l.c[2] = clampf(l.c[2] + inset_b, 0.0f, 1.0f); + + h.c[0] = clampf(h.c[0] - inset_r, 0.0f, 1.0f); + h.c[1] = clampf(h.c[1] - inset_g, 0.0f, 1.0f); + h.c[2] = clampf(h.c[2] - inset_b, 0.0f, 1.0f); + + int icov_xz = 0, icov_yz = 0; + for (uint32_t i = 0; i < 16; i++) + { + int r = (int)pSrc_pixels[i].r - avg_r; + int g = (int)pSrc_pixels[i].g - avg_g; + int b = (int)pSrc_pixels[i].b - avg_b; + icov_xz += r * b; + icov_yz += g * b; + } + + if (icov_xz < 0) + std::swap(l.c[0], h.c[0]); + + if (icov_yz < 0) + std::swap(l.c[1], h.c[1]); + + precise_round_565(l, h, lr, lg, lb, hr, hg, hb); + } + else if (flags & cEncodeBC1BoundingBoxInt) + { + // Algorithm from icbc.h compress_dxt1_fast(), but converted to integer. + int inset_r = (max_r - min_r - 8) >> 4; + int inset_g = (max_g - min_g - 8) >> 4; + int inset_b = (max_b - min_b - 8) >> 4; + + min_r += inset_r; + min_g += inset_g; + min_b += inset_b; + if ((uint32_t)(min_r | min_g | min_b) > 255U) + { + min_r = clampi(min_r, 0, 255); + min_g = clampi(min_g, 0, 255); + min_b = clampi(min_b, 0, 255); + } + + max_r -= inset_r; + max_g -= inset_g; + max_b -= inset_b; + if ((uint32_t)(max_r | max_g | max_b) > 255U) + { + max_r = clampi(max_r, 0, 255); + max_g = clampi(max_g, 0, 255); + max_b = clampi(max_b, 0, 255); + } + + int icov_xz = 0, icov_yz = 0; + for (uint32_t i = 0; i < 16; i++) + { + int r = (int)pSrc_pixels[i].r - avg_r; + int g = (int)pSrc_pixels[i].g - avg_g; + int b = (int)pSrc_pixels[i].b - avg_b; + icov_xz += r * b; + icov_yz += g * b; + } + + int x0 = min_r; + int y0 = min_g; + int x1 = max_r; + int y1 = max_g; + + if (icov_xz < 0) + std::swap(x0, x1); + + if (icov_yz < 0) + std::swap(y0, y1); + + lr = to_5(x0); + lg = to_6(y0); + lb = to_5(min_b); + + hr = to_5(x1); + hg = to_6(y1); + hb = to_5(max_b); + } + else + { + // Select 2 colors along the principle axis. (There must be a faster/simpler way.) + uint32_t low_c = 0, high_c = 0; + + int icov[6] = { 0, 0, 0, 0, 0, 0 }; + for (uint32_t i = 0; i < 16; i++) + { + int r = (int)pSrc_pixels[i].r - avg_r; + int g = (int)pSrc_pixels[i].g - avg_g; + int b = (int)pSrc_pixels[i].b - avg_b; + icov[0] += r * r; + icov[1] += r * g; + icov[2] += r * b; + icov[3] += g * g; + icov[4] += g * b; + icov[5] += b * b; + } + + int saxis_r = 306, saxis_g = 601, saxis_b = 117; + + float xr = (float)(max_r - min_r); + float xg = (float)(max_g - min_g); + float xb = (float)(max_b - min_b); + + if (icov[2] < 0) + xr = -xr; + + if (icov[4] < 0) + xg = -xg; + + float cov[6]; + for (uint32_t i = 0; i < 6; i++) + cov[i] = (float)(icov[i]) * (1.0f / 255.0f); + + const uint32_t total_power_iters = (flags & cEncodeBC1Use6PowerIters) ? 6 : 4; + for (uint32_t power_iter = 0; power_iter < total_power_iters; power_iter++) + { + float r = xr * cov[0] + xg * cov[1] + xb * cov[2]; + float g = xr * cov[1] + xg * cov[3] + xb * cov[4]; + float b = xr * cov[2] + xg * cov[4] + xb * cov[5]; + xr = r; xg = g; xb = b; + } + + float k = maximum(fabsf(xr), fabsf(xg), fabsf(xb)); + if (k >= 2) + { + float m = 2048.0f / k; + saxis_r = (int)(xr * m); + saxis_g = (int)(xg * m); + saxis_b = (int)(xb * m); + } + + int low_dot = INT_MAX, high_dot = INT_MIN; + + saxis_r = (int)((uint32_t)saxis_r << 4U); + saxis_g = (int)((uint32_t)saxis_g << 4U); + saxis_b = (int)((uint32_t)saxis_b << 4U); + + for (uint32_t i = 0; i < 16; i += 4) + { + int dot0 = ((pSrc_pixels[i].r * saxis_r + pSrc_pixels[i].g * saxis_g + pSrc_pixels[i].b * saxis_b) & ~0xF) + i; + int dot1 = ((pSrc_pixels[i + 1].r * saxis_r + pSrc_pixels[i + 1].g * saxis_g + pSrc_pixels[i + 1].b * saxis_b) & ~0xF) + i + 1; + int dot2 = ((pSrc_pixels[i + 2].r * saxis_r + pSrc_pixels[i + 2].g * saxis_g + pSrc_pixels[i + 2].b * saxis_b) & ~0xF) + i + 2; + int dot3 = ((pSrc_pixels[i + 3].r * saxis_r + pSrc_pixels[i + 3].g * saxis_g + pSrc_pixels[i + 3].b * saxis_b) & ~0xF) + i + 3; + + int min_d01 = std::min(dot0, dot1); + int max_d01 = std::max(dot0, dot1); + + int min_d23 = std::min(dot2, dot3); + int max_d23 = std::max(dot2, dot3); + + int min_d = std::min(min_d01, min_d23); + int max_d = std::max(max_d01, max_d23); + + low_dot = std::min(low_dot, min_d); + high_dot = std::max(high_dot, max_d); + } + low_c = low_dot & 15; + high_c = high_dot & 15; + + lr = to_5(pSrc_pixels[low_c].r); + lg = to_6(pSrc_pixels[low_c].g); + lb = to_5(pSrc_pixels[low_c].b); + + hr = to_5(pSrc_pixels[high_c].r); + hg = to_6(pSrc_pixels[high_c].g); + hb = to_5(pSrc_pixels[high_c].b); + } + } + + static const int8_t s_adjacent_voxels[16][4] = + { + { 1,0,0, 3 }, // 0 + { 0,1,0, 4 }, // 1 + { 0,0,1, 5 }, // 2 + { -1,0,0, 0 }, // 3 + { 0,-1,0, 1 }, // 4 + { 0,0,-1, 2 }, // 5 + { 1,1,0, 9 }, // 6 + { 1,0,1, 10 }, // 7 + { 0,1,1, 11 }, // 8 + { -1,-1,0, 6 }, // 9 + { -1,0,-1, 7 }, // 10 + { 0,-1,-1, 8 }, // 11 + { -1,1,0, 13 }, // 12 + { 1,-1,0, 12 }, // 13 + { 0,-1,1, 15 }, // 14 + { 0,1,-1, 14 }, // 15 + }; + + // From icbc's high quality mode. + static inline void encode_bc1_endpoint_search(const color32* pSrc_pixels, bool any_black_pixels, + uint32_t flags, bc1_encode_results& results, uint32_t cur_err, const uint8_t* pForce_selectors) + { + int& lr = results.lr, & lg = results.lg, & lb = results.lb, & hr = results.hr, & hg = results.hg, & hb = results.hb; + uint8_t* sels = results.sels; + + int prev_improvement_index = 0, forbidden_direction = -1; + + const int endpoint_search_rounds = (flags & cEncodeBC1EndpointSearchRoundsMask) >> cEncodeBC1EndpointSearchRoundsShift; + for (int i = 0; i < endpoint_search_rounds; i++) + { + assert(s_adjacent_voxels[s_adjacent_voxels[i & 15][3]][3] == (i & 15)); + + if (forbidden_direction == (i & 31)) + continue; + + const int8_t delta[3] = { s_adjacent_voxels[i & 15][0], s_adjacent_voxels[i & 15][1], s_adjacent_voxels[i & 15][2] }; + + int trial_lr = lr, trial_lg = lg, trial_lb = lb, trial_hr = hr, trial_hg = hg, trial_hb = hb; + + if ((i >> 4) & 1) + { + trial_lr = clampi(trial_lr + delta[0], 0, 31); + trial_lg = clampi(trial_lg + delta[1], 0, 63); + trial_lb = clampi(trial_lb + delta[2], 0, 31); + } + else + { + trial_hr = clampi(trial_hr + delta[0], 0, 31); + trial_hg = clampi(trial_hg + delta[1], 0, 63); + trial_hb = clampi(trial_hb + delta[2], 0, 31); + } + + uint8_t trial_sels[16]; + + uint32_t trial_err; + if (results.m_3color) + { + trial_err = bc1_find_sels3_fullerr( + ((any_black_pixels) && ((flags & cEncodeBC1Use3ColorBlocksForBlackPixels) != 0)), + pSrc_pixels, trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb, trial_sels, cur_err, pForce_selectors); + } + else + { + trial_err = bc1_find_sels4(flags, pSrc_pixels, trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb, trial_sels, cur_err, pForce_selectors); + } + + if (trial_err < cur_err) + { + cur_err = trial_err; + + forbidden_direction = s_adjacent_voxels[i & 15][3] | (i & 16); + + lr = trial_lr, lg = trial_lg, lb = trial_lb, hr = trial_hr, hg = trial_hg, hb = trial_hb; + + memcpy(sels, trial_sels, 16); + + prev_improvement_index = i; + } + + if (i - prev_improvement_index > 32) + break; + } + } + + void encode_bc1(void* pDst, const uint8_t* pPixels, uint32_t flags, uint32_t total_orderings_to_try, uint32_t total_orderings_to_try3, const uint8_t* pForce_selectors) + { + assert(g_initialized); + + const color32* pSrc_pixels = (const color32*)pPixels; + bc1_block* pDst_block = static_cast(pDst); + + int avg_r, avg_g, avg_b, min_r, min_g, min_b, max_r, max_g, max_b; + + const uint32_t fr = pSrc_pixels[0].r, fg = pSrc_pixels[0].g, fb = pSrc_pixels[0].b; + + uint32_t j; + for (j = 15; j >= 1; --j) + if ((pSrc_pixels[j].r != fr) || (pSrc_pixels[j].g != fg) || (pSrc_pixels[j].b != fb)) + break; + + if (j == 0) + { + encode_bc1_solid_block(pDst, fr, fg, fb, (flags & (cEncodeBC1Use3ColorBlocks | cEncodeBC1Use3ColorBlocksForBlackPixels)) != 0); + return; + } + + int total_r = fr, total_g = fg, total_b = fb; + + max_r = fr, max_g = fg, max_b = fb; + min_r = fr, min_g = fg, min_b = fb; + + uint32_t grayscale_flag = (fr == fg) && (fr == fb); + uint32_t any_black_pixels = (fr | fg | fb) < 4; + + for (uint32_t i = 1; i < 16; i++) + { + const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b; + + grayscale_flag &= ((r == g) && (r == b)); + any_black_pixels |= ((r | g | b) < 4); + + max_r = std::max(max_r, r); max_g = std::max(max_g, g); max_b = std::max(max_b, b); + min_r = std::min(min_r, r); min_g = std::min(min_g, g); min_b = std::min(min_b, b); + total_r += r; total_g += g; total_b += b; + } + + avg_r = (total_r + 8) >> 4, avg_g = (total_g + 8) >> 4, avg_b = (total_b + 8) >> 4; + + bc1_encode_results results; + results.m_3color = false; + + uint8_t* sels = results.sels; + int& lr = results.lr, & lg = results.lg, & lb = results.lb, & hr = results.hr, & hg = results.hg, & hb = results.hb; + int orig_lr = 0, orig_lg = 0, orig_lb = 0, orig_hr = 0, orig_hg = 0, orig_hb = 0; + + lr = 0, lg = 0, lb = 0, hr = 0, hg = 0, hb = 0; + + const bool needs_block_error = ((flags & (cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use3ColorBlocks | cEncodeBC1UseFullMSEEval | cEncodeBC1EndpointSearchRoundsMask)) != 0) || + (any_black_pixels && ((flags & cEncodeBC1Use3ColorBlocksForBlackPixels) != 0)); + + uint32_t cur_err = UINT32_MAX; + + if (!needs_block_error) + { + assert((flags & cEncodeBC1TryAllInitialEndponts) == 0); + + encode_bc1_pick_initial(pSrc_pixels, flags, grayscale_flag != 0, + min_r, min_g, min_b, max_r, max_g, max_b, + avg_r, avg_g, avg_b, total_r, total_g, total_b, + lr, lg, lb, hr, hg, hb); + + orig_lr = lr, orig_lg = lg, orig_lb = lb, orig_hr = hr, orig_hg = hg, orig_hb = hb; + + bc1_find_sels4_noerr(pSrc_pixels, lr, lg, lb, hr, hg, hb, sels, pForce_selectors); + + const uint32_t total_ls_passes = flags & cEncodeBC1TwoLeastSquaresPasses ? 2 : 1; + for (uint32_t ls_pass = 0; ls_pass < total_ls_passes; ls_pass++) + { + int trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb; + + vec3F xl, xh; + if (!compute_least_squares_endpoints4_rgb(pSrc_pixels, sels, &xl, &xh, total_r, total_g, total_b)) + { + // All selectors equal - treat it as a solid block which should always be equal or better. + trial_lr = g_bc1_match5_equals_1[avg_r].m_hi; + trial_lg = g_bc1_match6_equals_1[avg_g].m_hi; + trial_lb = g_bc1_match5_equals_1[avg_b].m_hi; + + trial_hr = g_bc1_match5_equals_1[avg_r].m_lo; + trial_hg = g_bc1_match6_equals_1[avg_g].m_lo; + trial_hb = g_bc1_match5_equals_1[avg_b].m_lo; + + // In high/higher quality mode, let it try again in case the optimal tables have caused the sels to diverge. + } + else + { + precise_round_565(xl, xh, trial_hr, trial_hg, trial_hb, trial_lr, trial_lg, trial_lb); + } + + if ((lr == trial_lr) && (lg == trial_lg) && (lb == trial_lb) && (hr == trial_hr) && (hg == trial_hg) && (hb == trial_hb)) + break; + + bc1_find_sels4_noerr(pSrc_pixels, trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb, sels, pForce_selectors); + + lr = trial_lr; + lg = trial_lg; + lb = trial_lb; + hr = trial_hr; + hg = trial_hg; + hb = trial_hb; + + } // ls_pass + } + else + { + const uint32_t total_rounds = (flags & cEncodeBC1TryAllInitialEndponts) ? 2 : 1; + for (uint32_t round = 0; round < total_rounds; round++) + { + uint32_t modified_flags = flags; + if (round == 1) + { + modified_flags &= ~(cEncodeBC1Use2DLS | cEncodeBC1BoundingBox); + modified_flags |= cEncodeBC1BoundingBox; + } + + int round_lr, round_lg, round_lb, round_hr, round_hg, round_hb; + uint8_t round_sels[16]; + + encode_bc1_pick_initial(pSrc_pixels, modified_flags, grayscale_flag != 0, + min_r, min_g, min_b, max_r, max_g, max_b, + avg_r, avg_g, avg_b, total_r, total_g, total_b, + round_lr, round_lg, round_lb, round_hr, round_hg, round_hb); + + int orig_round_lr = round_lr, orig_round_lg = round_lg, orig_round_lb = round_lb, orig_round_hr = round_hr, orig_round_hg = round_hg, orig_round_hb = round_hb; + + uint32_t round_err = bc1_find_sels4(flags, pSrc_pixels, round_lr, round_lg, round_lb, round_hr, round_hg, round_hb, round_sels, UINT32_MAX, pForce_selectors); + + const uint32_t total_ls_passes = flags & cEncodeBC1TwoLeastSquaresPasses ? 2 : 1; + for (uint32_t ls_pass = 0; ls_pass < total_ls_passes; ls_pass++) + { + int trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb; + + vec3F xl, xh; + if (!compute_least_squares_endpoints4_rgb(pSrc_pixels, round_sels, &xl, &xh, total_r, total_g, total_b)) + { + // All selectors equal - treat it as a solid block which should always be equal or better. + trial_lr = g_bc1_match5_equals_1[avg_r].m_hi; + trial_lg = g_bc1_match6_equals_1[avg_g].m_hi; + trial_lb = g_bc1_match5_equals_1[avg_b].m_hi; + + trial_hr = g_bc1_match5_equals_1[avg_r].m_lo; + trial_hg = g_bc1_match6_equals_1[avg_g].m_lo; + trial_hb = g_bc1_match5_equals_1[avg_b].m_lo; + + // In high/higher quality mode, let it try again in case the optimal tables have caused the sels to diverge. + } + else + { + precise_round_565(xl, xh, trial_hr, trial_hg, trial_hb, trial_lr, trial_lg, trial_lb); + } + + if ((round_lr == trial_lr) && (round_lg == trial_lg) && (round_lb == trial_lb) && (round_hr == trial_hr) && (round_hg == trial_hg) && (round_hb == trial_hb)) + break; + + uint8_t trial_sels[16]; + uint32_t trial_err = bc1_find_sels4(flags, pSrc_pixels, trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb, trial_sels, round_err, pForce_selectors); + + if (trial_err < round_err) + { + round_lr = trial_lr; + round_lg = trial_lg; + round_lb = trial_lb; + + round_hr = trial_hr; + round_hg = trial_hg; + round_hb = trial_hb; + + round_err = trial_err; + memcpy(round_sels, trial_sels, 16); + } + else + break; + + } // ls_pass + + if (round_err <= cur_err) + { + cur_err = round_err; + + lr = round_lr; + lg = round_lg; + lb = round_lb; + hr = round_hr; + hg = round_hg; + hb = round_hb; + + orig_lr = orig_round_lr; + orig_lg = orig_round_lg; + orig_lb = orig_round_lb; + orig_hr = orig_round_hr; + orig_hg = orig_round_hg; + orig_hb = orig_round_hb; + + memcpy(sels, round_sels, 16); + } + + } // round + } + + if ((cur_err) && (flags & cEncodeBC1UseLikelyTotalOrderings)) + { + assert(needs_block_error); + + const uint32_t total_iters = (flags & cEncodeBC1Iterative) ? 2 : 1; + for (uint32_t iter_index = 0; iter_index < total_iters; iter_index++) + { + const uint32_t orig_err = cur_err; + + hist4 h; + for (uint32_t i = 0; i < 16; i++) + { + assert(sels[i] < 4); + h.m_hist[sels[i]]++; + } + + const uint32_t orig_total_order_index = h.lookup_total_ordering_index(); + + int r0, g0, b0, r3, g3, b3; + r0 = (lr << 3) | (lr >> 2); g0 = (lg << 2) | (lg >> 4); b0 = (lb << 3) | (lb >> 2); + r3 = (hr << 3) | (hr >> 2); g3 = (hg << 2) | (hg >> 4); b3 = (hb << 3) | (hb >> 2); + + int ar = r3 - r0, ag = g3 - g0, ab = b3 - b0; + + int dots[16]; + for (uint32_t i = 0; i < 16; i++) + { + int r = pSrc_pixels[i].r; + int g = pSrc_pixels[i].g; + int b = pSrc_pixels[i].b; + int d = 0x1000000 + (r * ar + g * ag + b * ab); + assert(d >= 0); + dots[i] = (d << 4) + i; + } + + std::sort(dots, dots + 16); + + uint32_t r_sum[17], g_sum[17], b_sum[17]; + uint32_t r = 0, g = 0, b = 0; + for (uint32_t i = 0; i < 16; i++) + { + const uint32_t p = dots[i] & 15; + + r_sum[i] = r; + g_sum[i] = g; + b_sum[i] = b; + + r += pSrc_pixels[p].r; + g += pSrc_pixels[p].g; + b += pSrc_pixels[p].b; + } + + r_sum[16] = total_r; + g_sum[16] = total_g; + b_sum[16] = total_b; + + const uint32_t q_total = (flags & cEncodeBC1Exhaustive) ? NUM_UNIQUE_TOTAL_ORDERINGS4 : clampi(total_orderings_to_try, MIN_TOTAL_ORDERINGS, MAX_TOTAL_ORDERINGS4); + for (uint32_t q = 0; q < q_total; q++) + { + const uint32_t s = (flags & cEncodeBC1Exhaustive) ? q : g_best_total_orderings4[orig_total_order_index][q]; + + int trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb; + + vec3F xl, xh; + + if ((s == TOTAL_ORDER_4_0_16) || (s == TOTAL_ORDER_4_1_16) || (s == TOTAL_ORDER_4_2_16) || (s == TOTAL_ORDER_4_3_16)) + { + trial_lr = g_bc1_match5_equals_1[avg_r].m_hi; + trial_lg = g_bc1_match6_equals_1[avg_g].m_hi; + trial_lb = g_bc1_match5_equals_1[avg_b].m_hi; + + trial_hr = g_bc1_match5_equals_1[avg_r].m_lo; + trial_hg = g_bc1_match6_equals_1[avg_g].m_lo; + trial_hb = g_bc1_match5_equals_1[avg_b].m_lo; + } + else + { + compute_least_squares_endpoints4_rgb(&xl, &xh, total_r, total_g, total_b, + g_selector_factors4[s][0], g_selector_factors4[s][1], g_selector_factors4[s][2], s, r_sum, g_sum, b_sum); + + precise_round_565(xl, xh, trial_hr, trial_hg, trial_hb, trial_lr, trial_lg, trial_lb); + } + + uint8_t trial_sels[16]; + + uint32_t trial_err = bc1_find_sels4(flags, pSrc_pixels, trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb, trial_sels, cur_err, pForce_selectors); + + if (trial_err < cur_err) + { + cur_err = trial_err; + + lr = trial_lr; + lg = trial_lg; + lb = trial_lb; + + hr = trial_hr; + hg = trial_hg; + hb = trial_hb; + + memcpy(sels, trial_sels, 16); + } + + } // s + + if ((!cur_err) || (cur_err == orig_err)) + break; + + } // iter_index + } + + if (((flags & (cEncodeBC1Use3ColorBlocks | cEncodeBC1Use3ColorBlocksForBlackPixels)) != 0) && (cur_err)) + { + if (flags & cEncodeBC1Use3ColorBlocks) + { + assert(needs_block_error); + try_3color_block(pSrc_pixels, flags, cur_err, avg_r, avg_g, avg_b, orig_lr, orig_lg, orig_lb, orig_hr, orig_hg, orig_hb, total_r, total_g, total_b, total_orderings_to_try3, results, pForce_selectors); + } + + if ((any_black_pixels) && ((flags & cEncodeBC1Use3ColorBlocksForBlackPixels) != 0)) + { + assert(needs_block_error); + try_3color_block_useblack(pSrc_pixels, flags, cur_err, results, pForce_selectors); + } + } + + if ((flags & cEncodeBC1EndpointSearchRoundsMask) && (cur_err)) + { + assert(needs_block_error); + + encode_bc1_endpoint_search(pSrc_pixels, any_black_pixels != 0, flags, results, cur_err, pForce_selectors); + } + + if (results.m_3color) + bc1_encode3(pDst_block, results.lr, results.lg, results.lb, results.hr, results.hg, results.hb, results.sels); + else + bc1_encode4(pDst_block, results.lr, results.lg, results.lb, results.hr, results.hg, results.hb, results.sels); + } + + // BC3-5 + + void encode_bc4(void* pDst, const uint8_t* pPixels, uint32_t stride) + { + assert(g_initialized); + + uint32_t min0_v, max0_v, min1_v, max1_v, min2_v, max2_v, min3_v, max3_v; + + { + min0_v = max0_v = pPixels[0 * stride]; + min1_v = max1_v = pPixels[1 * stride]; + min2_v = max2_v = pPixels[2 * stride]; + min3_v = max3_v = pPixels[3 * stride]; + } + + { + uint32_t v0 = pPixels[4 * stride]; min0_v = std::min(min0_v, v0); max0_v = std::max(max0_v, v0); + uint32_t v1 = pPixels[5 * stride]; min1_v = std::min(min1_v, v1); max1_v = std::max(max1_v, v1); + uint32_t v2 = pPixels[6 * stride]; min2_v = std::min(min2_v, v2); max2_v = std::max(max2_v, v2); + uint32_t v3 = pPixels[7 * stride]; min3_v = std::min(min3_v, v3); max3_v = std::max(max3_v, v3); + } + + { + uint32_t v0 = pPixels[8 * stride]; min0_v = std::min(min0_v, v0); max0_v = std::max(max0_v, v0); + uint32_t v1 = pPixels[9 * stride]; min1_v = std::min(min1_v, v1); max1_v = std::max(max1_v, v1); + uint32_t v2 = pPixels[10 * stride]; min2_v = std::min(min2_v, v2); max2_v = std::max(max2_v, v2); + uint32_t v3 = pPixels[11 * stride]; min3_v = std::min(min3_v, v3); max3_v = std::max(max3_v, v3); + } + + { + uint32_t v0 = pPixels[12 * stride]; min0_v = std::min(min0_v, v0); max0_v = std::max(max0_v, v0); + uint32_t v1 = pPixels[13 * stride]; min1_v = std::min(min1_v, v1); max1_v = std::max(max1_v, v1); + uint32_t v2 = pPixels[14 * stride]; min2_v = std::min(min2_v, v2); max2_v = std::max(max2_v, v2); + uint32_t v3 = pPixels[15 * stride]; min3_v = std::min(min3_v, v3); max3_v = std::max(max3_v, v3); + } + + const uint32_t min_v = minimum(min0_v, min1_v, min2_v, min3_v); + const uint32_t max_v = maximum(max0_v, max1_v, max2_v, max3_v); + + uint8_t* pDst_bytes = static_cast(pDst); + pDst_bytes[0] = (uint8_t)max_v; + pDst_bytes[1] = (uint8_t)min_v; + + if (max_v == min_v) + { + memset(pDst_bytes + 2, 0, 6); + return; + } + + const uint32_t delta = max_v - min_v; + + // min_v is now 0. Compute thresholds between values by scaling max_v. It's x14 because we're adding two x7 scale factors. + const int t0 = delta * 13; + const int t1 = delta * 11; + const int t2 = delta * 9; + const int t3 = delta * 7; + const int t4 = delta * 5; + const int t5 = delta * 3; + const int t6 = delta * 1; + + // BC4 floors in its divisions, which we compensate for with the 4 bias. + // This function is optimal for all possible inputs (i.e. it outputs the same results as checking all 8 values and choosing the closest one). + const int bias = 4 - min_v * 14; + + static const uint32_t s_tran0[8] = { 1U , 7U , 6U , 5U , 4U , 3U , 2U , 0U }; + static const uint32_t s_tran1[8] = { 1U << 3U, 7U << 3U, 6U << 3U, 5U << 3U, 4U << 3U, 3U << 3U, 2U << 3U, 0U << 3U }; + static const uint32_t s_tran2[8] = { 1U << 6U, 7U << 6U, 6U << 6U, 5U << 6U, 4U << 6U, 3U << 6U, 2U << 6U, 0U << 6U }; + static const uint32_t s_tran3[8] = { 1U << 9U, 7U << 9U, 6U << 9U, 5U << 9U, 4U << 9U, 3U << 9U, 2U << 9U, 0U << 9U }; + + uint64_t a0, a1, a2, a3; + { + const int v0 = pPixels[0 * stride] * 14 + bias; + const int v1 = pPixels[1 * stride] * 14 + bias; + const int v2 = pPixels[2 * stride] * 14 + bias; + const int v3 = pPixels[3 * stride] * 14 + bias; + a0 = s_tran0[(v0 >= t0) + (v0 >= t1) + (v0 >= t2) + (v0 >= t3) + (v0 >= t4) + (v0 >= t5) + (v0 >= t6)]; + a1 = s_tran1[(v1 >= t0) + (v1 >= t1) + (v1 >= t2) + (v1 >= t3) + (v1 >= t4) + (v1 >= t5) + (v1 >= t6)]; + a2 = s_tran2[(v2 >= t0) + (v2 >= t1) + (v2 >= t2) + (v2 >= t3) + (v2 >= t4) + (v2 >= t5) + (v2 >= t6)]; + a3 = s_tran3[(v3 >= t0) + (v3 >= t1) + (v3 >= t2) + (v3 >= t3) + (v3 >= t4) + (v3 >= t5) + (v3 >= t6)]; + } + + { + const int v0 = pPixels[4 * stride] * 14 + bias; + const int v1 = pPixels[5 * stride] * 14 + bias; + const int v2 = pPixels[6 * stride] * 14 + bias; + const int v3 = pPixels[7 * stride] * 14 + bias; + a0 |= (uint64_t)(s_tran0[(v0 >= t0) + (v0 >= t1) + (v0 >= t2) + (v0 >= t3) + (v0 >= t4) + (v0 >= t5) + (v0 >= t6)] << 12U); + a1 |= (uint64_t)(s_tran1[(v1 >= t0) + (v1 >= t1) + (v1 >= t2) + (v1 >= t3) + (v1 >= t4) + (v1 >= t5) + (v1 >= t6)] << 12U); + a2 |= (uint64_t)(s_tran2[(v2 >= t0) + (v2 >= t1) + (v2 >= t2) + (v2 >= t3) + (v2 >= t4) + (v2 >= t5) + (v2 >= t6)] << 12U); + a3 |= (uint64_t)(s_tran3[(v3 >= t0) + (v3 >= t1) + (v3 >= t2) + (v3 >= t3) + (v3 >= t4) + (v3 >= t5) + (v3 >= t6)] << 12U); + } + + { + const int v0 = pPixels[8 * stride] * 14 + bias; + const int v1 = pPixels[9 * stride] * 14 + bias; + const int v2 = pPixels[10 * stride] * 14 + bias; + const int v3 = pPixels[11 * stride] * 14 + bias; + a0 |= (((uint64_t)s_tran0[(v0 >= t0) + (v0 >= t1) + (v0 >= t2) + (v0 >= t3) + (v0 >= t4) + (v0 >= t5) + (v0 >= t6)]) << 24U); + a1 |= (((uint64_t)s_tran1[(v1 >= t0) + (v1 >= t1) + (v1 >= t2) + (v1 >= t3) + (v1 >= t4) + (v1 >= t5) + (v1 >= t6)]) << 24U); + a2 |= (((uint64_t)s_tran2[(v2 >= t0) + (v2 >= t1) + (v2 >= t2) + (v2 >= t3) + (v2 >= t4) + (v2 >= t5) + (v2 >= t6)]) << 24U); + a3 |= (((uint64_t)s_tran3[(v3 >= t0) + (v3 >= t1) + (v3 >= t2) + (v3 >= t3) + (v3 >= t4) + (v3 >= t5) + (v3 >= t6)]) << 24U); + } + + { + const int v0 = pPixels[12 * stride] * 14 + bias; + const int v1 = pPixels[13 * stride] * 14 + bias; + const int v2 = pPixels[14 * stride] * 14 + bias; + const int v3 = pPixels[15 * stride] * 14 + bias; + a0 |= (((uint64_t)s_tran0[(v0 >= t0) + (v0 >= t1) + (v0 >= t2) + (v0 >= t3) + (v0 >= t4) + (v0 >= t5) + (v0 >= t6)]) << 36U); + a1 |= (((uint64_t)s_tran1[(v1 >= t0) + (v1 >= t1) + (v1 >= t2) + (v1 >= t3) + (v1 >= t4) + (v1 >= t5) + (v1 >= t6)]) << 36U); + a2 |= (((uint64_t)s_tran2[(v2 >= t0) + (v2 >= t1) + (v2 >= t2) + (v2 >= t3) + (v2 >= t4) + (v2 >= t5) + (v2 >= t6)]) << 36U); + a3 |= (((uint64_t)s_tran3[(v3 >= t0) + (v3 >= t1) + (v3 >= t2) + (v3 >= t3) + (v3 >= t4) + (v3 >= t5) + (v3 >= t6)]) << 36U); + } + + const uint64_t f = a0 | a1 | a2 | a3; + + pDst_bytes[2] = (uint8_t)f; + pDst_bytes[3] = (uint8_t)(f >> 8U); + pDst_bytes[4] = (uint8_t)(f >> 16U); + pDst_bytes[5] = (uint8_t)(f >> 24U); + pDst_bytes[6] = (uint8_t)(f >> 32U); + pDst_bytes[7] = (uint8_t)(f >> 40U); + } + + uint32_t encode_bc4_hq(void* pDst, const uint8_t* pPixels, uint32_t stride, uint32_t search_rad, uint32_t mode_flag, const uint8_t* pForce_selectors) + { + assert(mode_flag); + + uint8_t* pDst_bytes = static_cast(pDst); + + uint32_t min_val = 255, max_val = 0; + for (uint32_t i = 0; i < 16; i++) + { + uint32_t val = pPixels[i * stride]; + min_val = std::min(val, min_val); + max_val = std::max(val, max_val); + } + + if (min_val == max_val) + { + if (mode_flag & BC4_USE_MODE6_FLAG) + { + pDst_bytes[0] = (uint8_t)min_val; + pDst_bytes[1] = (uint8_t)min_val; + + memset(pDst_bytes + 2, 0, 6); + + assert(!(pDst_bytes[0] > pDst_bytes[1])); + } + else + { + // Use an 8 value encoding + if (min_val > 0) + { + pDst_bytes[0] = (uint8_t)min_val; + pDst_bytes[1] = (uint8_t)min_val - 1; + + memset(pDst_bytes + 2, 0, 6); + } + else + { + static const uint8_t s_const_1_vals[8] = { 1, 0, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24 }; + memcpy(pDst_bytes, s_const_1_vals, 8); + } + + assert(pDst_bytes[0] > pDst_bytes[1]); + } + +#if defined(_DEBUG) || defined(DEBUG) + { + bc4_block* pBlock = (bc4_block*)pDst; + uint8_t pixels[16]; + unpack_bc4(pDst, pixels, 1); + for (uint32_t i = 0; i < 16; i++) + assert(pixels[i] == min_val); + if (mode_flag & BC4_USE_MODE6_FLAG) + { + assert(pBlock->is_alpha6_block()); + } + else + { + assert(!pBlock->is_alpha6_block()); + } + } +#endif + + return 0; + } + + uint32_t best_err = UINT32_MAX; + for (uint32_t mode = 0; mode < 2; mode++) + { + if ((mode_flag & (1 << mode)) == 0) + continue; + + for (int lo_delta = -(int)search_rad; lo_delta <= (int)search_rad; lo_delta++) + { + for (int hi_delta = -(int)search_rad; hi_delta <= (int)search_rad; hi_delta++) + { + bc4_block trial_block; + trial_block.m_endpoints[0] = (uint8_t)clamp(max_val + hi_delta, 0, 255); + trial_block.m_endpoints[1] = (uint8_t)clamp(min_val + lo_delta, 0, 255); + + if (trial_block.m_endpoints[0] == trial_block.m_endpoints[1]) + continue; + + if (mode == 0) + { + if (trial_block.is_alpha6_block()) + std::swap(trial_block.m_endpoints[0], trial_block.m_endpoints[1]); + } + else if (!trial_block.is_alpha6_block()) + std::swap(trial_block.m_endpoints[0], trial_block.m_endpoints[1]); + + uint8_t block_vals[8]; + trial_block.get_block_values(block_vals, trial_block.m_endpoints[0], trial_block.m_endpoints[1]); + + uint32_t trial_err = 0; + uint8_t trial_sels[16]; + + if (pForce_selectors) + { + memcpy(trial_sels, pForce_selectors, 16); + + for (uint32_t i = 0; i < 16; i++) + trial_err += squarei(block_vals[pForce_selectors[i]] - pPixels[i * stride]); + } + else + { + for (uint32_t i = 0; i < 16; i++) + { + uint32_t best_index_err = UINT32_MAX; + uint32_t best_index = 0; + for (uint32_t j = 0; j < 8; j++) + { + uint32_t err = squarei(block_vals[j] - pPixels[i * stride]); + if (err < best_index_err) + { + best_index_err = err; + best_index = j; + if (!err) + break; + } + } + + trial_err += best_index_err; + if (trial_err >= best_err) + break; + + trial_sels[i] = (uint8_t)best_index; + } // i + } + + if (trial_err < best_err) + { + best_err = trial_err; + + uint64_t sel_vals = 0; + for (uint32_t i = 0; i < 16; i++) + sel_vals |= ((uint64_t)trial_sels[i] << (i * 3)); + + trial_block.m_selectors[0] = (uint8_t)sel_vals; + trial_block.m_selectors[1] = (uint8_t)(sel_vals >> 8); + trial_block.m_selectors[2] = (uint8_t)(sel_vals >> 16); + trial_block.m_selectors[3] = (uint8_t)(sel_vals >> 24); + trial_block.m_selectors[4] = (uint8_t)(sel_vals >> 32); + trial_block.m_selectors[5] = (uint8_t)(sel_vals >> 40); + + memcpy(pDst_bytes, &trial_block, sizeof(bc4_block)); + } // if (trial_err < best_err) + + } // hi_delta + + } // lo_delta + + } // mode + + return best_err; + } + + void encode_bc3(void* pDst, const uint8_t* pPixels, uint32_t flags, uint32_t total_orderings_to_try) + { + assert(g_initialized); + + // 3-color blocks are not allowed with BC3 (on most GPU's). + flags &= ~(cEncodeBC1Use3ColorBlocksForBlackPixels | cEncodeBC1Use3ColorBlocks); + + encode_bc4(pDst, pPixels + 3, 4); + encode_bc1(static_cast(pDst) + 8, pPixels, flags, total_orderings_to_try); + } + + void encode_bc3(uint32_t level, void* pDst, const uint8_t* pPixels) + { + assert(g_initialized); + + encode_bc4(pDst, pPixels + 3, 4); + encode_bc1(level, static_cast(pDst) + 8, pPixels, false, false); + } + + void encode_bc3_hq(uint32_t level, void* pDst, const uint8_t* pPixels, uint32_t alpha_search_rad, uint32_t alpha_modes) + { + assert(g_initialized); + + encode_bc4_hq(pDst, pPixels + 3, 4, alpha_search_rad, alpha_modes); + encode_bc1(level, static_cast(pDst) + 8, pPixels, false, false); + } + + void encode_bc5(void* pDst, const uint8_t* pPixels, uint32_t chan0, uint32_t chan1, uint32_t stride) + { + assert(g_initialized); + + encode_bc4(pDst, pPixels + chan0, stride); + encode_bc4(static_cast(pDst) + 8, pPixels + chan1, stride); + } + + void encode_bc5_hq(void* pDst, const uint8_t* pPixels, uint32_t chan0, uint32_t chan1, uint32_t stride, uint32_t alpha_search_rad, uint32_t alpha_modes) + { + assert(g_initialized); + + encode_bc4_hq(pDst, pPixels + chan0, stride, alpha_search_rad, alpha_modes); + encode_bc4_hq(static_cast(pDst) + 8, pPixels + chan1, stride, alpha_search_rad, alpha_modes); + } + + bool unpack_bc1_block_colors(const void* pBlock_bits, color32* c, bc1_approx_mode mode) + { + const bc1_block* pBlock = static_cast(pBlock_bits); + + const uint32_t l = pBlock->get_low_color(); + const uint32_t h = pBlock->get_high_color(); + + const int cr0 = (l >> 11) & 31; + const int cg0 = (l >> 5) & 63; + const int cb0 = l & 31; + const int r0 = (cr0 << 3) | (cr0 >> 2); + const int g0 = (cg0 << 2) | (cg0 >> 4); + const int b0 = (cb0 << 3) | (cb0 >> 2); + + const int cr1 = (h >> 11) & 31; + const int cg1 = (h >> 5) & 63; + const int cb1 = h & 31; + const int r1 = (cr1 << 3) | (cr1 >> 2); + const int g1 = (cg1 << 2) | (cg1 >> 4); + const int b1 = (cb1 << 3) | (cb1 >> 2); + + bool used_punchthrough = false; + + if (l > h) + { + c[0].set_noclamp_rgba(r0, g0, b0, 255); + c[1].set_noclamp_rgba(r1, g1, b1, 255); + switch (mode) + { + case bc1_approx_mode::cBC1Ideal: + c[2].set_noclamp_rgba((r0 * 2 + r1) / 3, (g0 * 2 + g1) / 3, (b0 * 2 + b1) / 3, 255); + c[3].set_noclamp_rgba((r1 * 2 + r0) / 3, (g1 * 2 + g0) / 3, (b1 * 2 + b0) / 3, 255); + break; + case bc1_approx_mode::cBC1IdealRound4: + c[2].set_noclamp_rgba((r0 * 2 + r1 + 1) / 3, (g0 * 2 + g1 + 1) / 3, (b0 * 2 + b1 + 1) / 3, 255); + c[3].set_noclamp_rgba((r1 * 2 + r0 + 1) / 3, (g1 * 2 + g0 + 1) / 3, (b1 * 2 + b0 + 1) / 3, 255); + break; + case bc1_approx_mode::cBC1NVidia: + c[2].set_noclamp_rgba(interp_5_nv(cr0, cr1), interp_6_nv(g0, g1), interp_5_nv(cb0, cb1), 255); + c[3].set_noclamp_rgba(interp_5_nv(cr1, cr0), interp_6_nv(g1, g0), interp_5_nv(cb1, cb0), 255); + break; + case bc1_approx_mode::cBC1AMD: + c[2].set_noclamp_rgba(interp_5_6_amd(r0, r1), interp_5_6_amd(g0, g1), interp_5_6_amd(b0, b1), 255); + c[3].set_noclamp_rgba(interp_5_6_amd(r1, r0), interp_5_6_amd(g1, g0), interp_5_6_amd(b1, b0), 255); + break; + } + } + else + { + c[0].set_noclamp_rgba(r0, g0, b0, 255); + c[1].set_noclamp_rgba(r1, g1, b1, 255); + switch (mode) + { + case bc1_approx_mode::cBC1Ideal: + case bc1_approx_mode::cBC1IdealRound4: + c[2].set_noclamp_rgba((r0 + r1) / 2, (g0 + g1) / 2, (b0 + b1) / 2, 255); + break; + case bc1_approx_mode::cBC1NVidia: + c[2].set_noclamp_rgba(interp_half_5_nv(cr0, cr1), interp_half_6_nv(g0, g1), interp_half_5_nv(cb0, cb1), 255); + break; + case bc1_approx_mode::cBC1AMD: + c[2].set_noclamp_rgba(interp_half_5_6_amd(r0, r1), interp_half_5_6_amd(g0, g1), interp_half_5_6_amd(b0, b1), 255); + break; + } + + c[3].set_noclamp_rgba(0, 0, 0, 0); + used_punchthrough = true; + } + + return used_punchthrough; + } + + // Returns true if the block uses 3 color punchthrough alpha mode. + bool unpack_bc1(const void* pBlock_bits, void* pPixels, bool set_alpha, bc1_approx_mode mode) + { + color32* pDst_pixels = static_cast(pPixels); + + static_assert(sizeof(bc1_block) == 8, "sizeof(bc1_block) == 8"); + static_assert(sizeof(bc4_block) == 8, "sizeof(bc4_block) == 8"); + + const bc1_block* pBlock = static_cast(pBlock_bits); + + color32 c[4]; + const bool used_punchthrough = unpack_bc1_block_colors(pBlock_bits, c, mode); + + if (set_alpha) + { + for (uint32_t y = 0; y < 4; y++, pDst_pixels += 4) + { + pDst_pixels[0] = c[pBlock->get_selector(0, y)]; + pDst_pixels[1] = c[pBlock->get_selector(1, y)]; + pDst_pixels[2] = c[pBlock->get_selector(2, y)]; + pDst_pixels[3] = c[pBlock->get_selector(3, y)]; + } + } + else + { + for (uint32_t y = 0; y < 4; y++, pDst_pixels += 4) + { + pDst_pixels[0].set_rgb(c[pBlock->get_selector(0, y)]); + pDst_pixels[1].set_rgb(c[pBlock->get_selector(1, y)]); + pDst_pixels[2].set_rgb(c[pBlock->get_selector(2, y)]); + pDst_pixels[3].set_rgb(c[pBlock->get_selector(3, y)]); + } + } + + return used_punchthrough; + } + + void unpack_bc4(const void* pBlock_bits, uint8_t* pPixels, uint32_t stride) + { + static_assert(sizeof(bc4_block) == 8, "sizeof(bc4_block) == 8"); + + const bc4_block* pBlock = static_cast(pBlock_bits); + + uint8_t sel_values[8]; + bc4_block::get_block_values(sel_values, pBlock->get_low_alpha(), pBlock->get_high_alpha()); + + const uint64_t selector_bits = pBlock->get_selector_bits(); + + for (uint32_t y = 0; y < 4; y++, pPixels += (stride * 4U)) + { + pPixels[0] = sel_values[pBlock->get_selector(0, y, selector_bits)]; + pPixels[stride * 1] = sel_values[pBlock->get_selector(1, y, selector_bits)]; + pPixels[stride * 2] = sel_values[pBlock->get_selector(2, y, selector_bits)]; + pPixels[stride * 3] = sel_values[pBlock->get_selector(3, y, selector_bits)]; + } + } + + // Returns false if the block uses 3-color punchthrough alpha mode, which isn't supported on some GPU's for BC3. + bool unpack_bc3(const void* pBlock_bits, void* pPixels, bc1_approx_mode mode) + { + color32* pDst_pixels = static_cast(pPixels); + + bool success = true; + + if (unpack_bc1((const uint8_t*)pBlock_bits + sizeof(bc4_block), pDst_pixels, true, mode)) + success = false; + + unpack_bc4(pBlock_bits, &pDst_pixels[0].a, sizeof(color32)); + + return success; + } + + // writes RG + void unpack_bc5(const void* pBlock_bits, void* pPixels, uint32_t chan0, uint32_t chan1, uint32_t stride) + { + unpack_bc4(pBlock_bits, (uint8_t*)pPixels + chan0, stride); + unpack_bc4((const uint8_t*)pBlock_bits + sizeof(bc4_block), (uint8_t*)pPixels + chan1, stride); + } + +} // namespace rgbcx + + + diff --git a/external/bc7enc_rdo/rgbcx.h b/external/bc7enc_rdo/rgbcx.h new file mode 100644 index 0000000000..cf793921aa --- /dev/null +++ b/external/bc7enc_rdo/rgbcx.h @@ -0,0 +1,473 @@ +// rgbcx.h v1.13 +// High-performance scalar encoders and RDO (Rate Distortion Optimization) post processors for BC1-5. +// Public Domain or MIT license (you choose - see below), written by Richard Geldreich 2020 . +// +// Influential references: +// https://tinyurl.com/y3vxz457 (Ortego and Ramchandran, "Rate-distortion Methods for Image and Video Compression", 1998) +// http://sjbrown.co.uk/2006/01/19/dxt-compression-techniques/ +// https://github.com/nothings/stb/blob/master/stb_dxt.h +// https://gist.github.com/castano/c92c7626f288f9e99e158520b14a61cf +// https://github.com/castano/icbc/blob/master/icbc.h +// http://www.humus.name/index.php?page=3D&ID=79 +// +// This is a single header file library. Be sure to "#define RGBCX_IMPLEMENTATION" in one .cpp file somewhere. +// +// Instructions: +// +// The library MUST be initialized by calling this function at least once before using any encoder or decoder functions: +// +// void rgbcx::init(bc1_approx_mode mode = cBC1Ideal); +// +// This function manipulates global state, so it is not thread safe. +// You can call it multiple times to change the global BC1 approximation mode. +// Important: BC1/3 textures encoded using non-ideal BC1 approximation modes should only be sampled on parts from that vendor. +// If you encode for AMD, average error on AMD parts will go down, but average error on NVidia parts will go up and vice versa. +// If in doubt, encode in ideal BC1 mode. +// +// Call these functions to encode BC1-5: +// void rgbcx::encode_bc1(uint32_t level, void* pDst, const uint8_t* pPixels, bool allow_3color, bool use_transparent_texels_for_black); +// void rgbcx::encode_bc3(uint32_t level, void* pDst, const uint8_t* pPixels); +// void rgbcx::encode_bc4(void* pDst, const uint8_t* pPixels, uint32_t stride = 4); +// void rgbcx::encode_bc5(void* pDst, const uint8_t* pPixels, uint32_t chan0 = 0, uint32_t chan1 = 1, uint32_t stride = 4); +// +// - level ranges from MIN_LEVEL to MAX_LEVEL. The higher the level, the slower the encoder goes, but the higher the average quality. +// levels [0,4] are fast and compete against stb_dxt (default and HIGHQUAL). The remaining levels compete against squish/NVTT/icbc and icbc HQ. +// If in doubt just use level 10, set allow_3color to true and use_transparent_texels_for_black to false, and adjust as needed. +// +// - pDst is a pointer to the 8-byte (BC1/4) or 16-byte (BC3/5) destination block. +// +// - pPixels is a pointer to the 32-bpp pixels, in either RGBX or RGBA format (R is first in memory). +// Alpha is always ignored by encode_bc1(). +// +// - allow_3color: If true the encoder will use 3-color blocks. This flag is ignored unless level is >= 5 (because lower levels compete against stb_dxt and it doesn't support 3-color blocks). +// Do not enable on BC3-5 textures. 3-color block usage slows down encoding. +// +// - use_transparent_texels_for_black: If true the encoder will use 3-color block transparent black pixels to code very dark or black texels. Your engine/shader MUST ignore the sampled +// alpha value for textures encoded in this mode. This is how NVidia's classic "nvdxt" encoder (used by many original Xbox titles) used to work by default on DXT1C textures. It increases +// average quality substantially (because dark texels/black are very common) and is highly recommended. +// Do not enable on BC3-5 textures. +// +// - stride is the source pixel stride, in bytes. It's typically 4. +// +// - chan0 and chan1 are the source channels. Typically they will be 0 and 1. +// +// All encoding and decoding functions are threade-safe. +// +// To reduce the compiled size of the encoder, set #define RGBCX_USE_SMALLER_TABLES to 1 before including this header. +// +#ifndef RGBCX_INCLUDE_H +#define RGBCX_INCLUDE_H + +#ifdef _MSC_VER +#pragma warning (disable:4201) //nameless struct/union +#endif + +#include +#include +#include +#include +#include + +// By default, the table used to accelerate cluster fit on 4 color blocks uses a 969x128 entry table. +// To reduce the executable size, set RGBCX_USE_SMALLER_TABLES to 1, which selects the smaller 969x32 entry table. +#ifndef RGBCX_USE_SMALLER_TABLES +#define RGBCX_USE_SMALLER_TABLES 0 +#endif + +namespace rgbcx +{ + enum class bc1_approx_mode + { + // The default mode. No rounding for 4-color colors 2,3. My older tools/compressors use this mode. + // This matches the D3D10 docs on BC1. + cBC1Ideal = 0, + + // NVidia GPU mode. + cBC1NVidia = 1, + + // AMD GPU mode. + cBC1AMD = 2, + + // This mode matches AMD Compressonator's output. It rounds 4-color colors 2,3 (not 3-color color 2). + // This matches the D3D9 docs on DXT1. + cBC1IdealRound4 = 3 + }; + + enum class eNoClamp { cNoClamp }; + static inline uint8_t clamp255(int32_t i) { return (uint8_t)((i & 0xFFFFFF00U) ? (~(i >> 31)) : i); } + + template inline S maximum(S a, S b) { return (a > b) ? a : b; } + template inline S maximum(S a, S b, S c) { return maximum(maximum(a, b), c); } + template inline S maximum(S a, S b, S c, S d) { return maximum(maximum(maximum(a, b), c), d); } + + template inline S minimum(S a, S b) { return (a < b) ? a : b; } + template inline S minimum(S a, S b, S c) { return minimum(minimum(a, b), c); } + template inline S minimum(S a, S b, S c, S d) { return minimum(minimum(minimum(a, b), c), d); } + + struct color32 + { + union + { + struct + { + uint8_t r; + uint8_t g; + uint8_t b; + uint8_t a; + }; + + uint8_t c[4]; + + uint32_t m; + }; + + color32() { } + + color32(uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { set(vr, vg, vb, va); } + color32(eNoClamp unused, uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { (void)unused; set_noclamp_rgba(vr, vg, vb, va); } + + void set(uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { c[0] = static_cast(vr); c[1] = static_cast(vg); c[2] = static_cast(vb); c[3] = static_cast(va); } + + void set_noclamp_rgb(uint32_t vr, uint32_t vg, uint32_t vb) { c[0] = static_cast(vr); c[1] = static_cast(vg); c[2] = static_cast(vb); } + void set_noclamp_rgba(uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { set(vr, vg, vb, va); } + + void set_clamped(int vr, int vg, int vb, int va) { c[0] = clamp255(vr); c[1] = clamp255(vg); c[2] = clamp255(vb); c[3] = clamp255(va); } + + uint8_t operator[] (uint32_t idx) const { assert(idx < 4); return c[idx]; } + uint8_t& operator[] (uint32_t idx) { assert(idx < 4); return c[idx]; } + + bool operator== (const color32& rhs) const { return m == rhs.m; } + + void set_rgb(const color32& other) { c[0] = static_cast(other.c[0]); c[1] = static_cast(other.c[1]); c[2] = static_cast(other.c[2]); } + + static color32 comp_min(const color32& a, const color32& b) { return color32(eNoClamp::cNoClamp, std::min(a[0], b[0]), std::min(a[1], b[1]), std::min(a[2], b[2]), std::min(a[3], b[3])); } + static color32 comp_max(const color32& a, const color32& b) { return color32(eNoClamp::cNoClamp, std::max(a[0], b[0]), std::max(a[1], b[1]), std::max(a[2], b[2]), std::max(a[3], b[3])); } + }; + + // init() MUST be called once before using the BC1 encoder. + // This function may be called multiple times to change the BC1 approximation mode. + // This function initializes global state, so don't call it while other threads inside the encoder. + // Important: If you encode textures for a specific vendor's GPU's, beware that using that texture data on other GPU's may result in ugly artifacts. + // Encode to cBC1Ideal unless you know the texture data will only be deployed or used on a specific vendor's GPU. + void init(bc1_approx_mode mode = bc1_approx_mode::cBC1Ideal); + + // Optimally encodes a solid color block to BC1 format. + void encode_bc1_solid_block(void* pDst, uint32_t fr, uint32_t fg, uint32_t fb, bool allow_3color); + + // BC1 low-level API encoder flags. You can ignore this if you use the simple level API. + enum + { + // Try to improve quality using the most likely total orderings. + // The total_orderings_to_try parameter will then control the number of total orderings to try for 4 color blocks, and the + // total_orderings_to_try3 parameter will control the number of total orderings to try for 3 color blocks (if they are enabled). + cEncodeBC1UseLikelyTotalOrderings = 2, + + // Use 2 least squares pass, instead of one (same as stb_dxt's HIGHQUAL option). + // Recommended if you're enabling cEncodeBC1UseLikelyTotalOrderings. + cEncodeBC1TwoLeastSquaresPasses = 4, + + // cEncodeBC1Use3ColorBlocksForBlackPixels allows the BC1 encoder to use 3-color blocks for blocks containing black or very dark pixels. + // You shader/engine MUST ignore the alpha channel on textures encoded with this flag. + // Average quality goes up substantially for my 100 texture corpus (~.5 dB), so it's worth using if you can. + // Note the BC1 encoder does not actually support transparency in 3-color mode. + // Don't set when encoding to BC3. + cEncodeBC1Use3ColorBlocksForBlackPixels = 8, + + // If cEncodeBC1Use3ColorBlocks is set, the encoder can use 3-color mode for a small but noticeable gain in average quality, but lower perf. + // If you also specify the cEncodeBC1UseLikelyTotalOrderings flag, set the total_orderings_to_try3 paramter to the number of total orderings to try. + // Don't set when encoding to BC3. + cEncodeBC1Use3ColorBlocks = 16, + + // cEncodeBC1Iterative will greatly increase encode time, but is very slightly higher quality. + // Same as squish's iterative cluster fit option. Not really worth the tiny boost in quality, unless you just don't care about perf. at all. + cEncodeBC1Iterative = 32, + + // cEncodeBC1BoundingBox enables a fast all-integer PCA approximation on 4-color blocks. + // At level 0 options (no other flags), this is ~15% faster, and higher *average* quality. + cEncodeBC1BoundingBox = 64, + + // Use a slightly lower quality, but ~30% faster MSE evaluation function for 4-color blocks. + cEncodeBC1UseFasterMSEEval = 128, + + // Examine all colors to compute selectors/MSE (slower than default) + cEncodeBC1UseFullMSEEval = 256, + + // Use 2D least squares+inset+optimal rounding (the method used in Humus's GPU texture encoding demo), instead of PCA. + // Around 18% faster, very slightly lower average quality to better (depends on the content). + cEncodeBC1Use2DLS = 512, + + // Use 6 power iterations vs. 4 for PCA. + cEncodeBC1Use6PowerIters = 2048, + + // Check all total orderings - *very* slow. The encoder is not designed to be used in this way. + cEncodeBC1Exhaustive = 8192, + + // Try 2 different ways of choosing the initial endpoints. + cEncodeBC1TryAllInitialEndponts = 16384, + + // Same as cEncodeBC1BoundingBox, but implemented using integer math (faster, slightly less quality) + cEncodeBC1BoundingBoxInt = 32768, + + // Try refining the final endpoints by examining nearby colors. + cEncodeBC1EndpointSearchRoundsShift = 22, + cEncodeBC1EndpointSearchRoundsMask = 1023U << cEncodeBC1EndpointSearchRoundsShift, + }; + + const uint32_t MIN_TOTAL_ORDERINGS = 1; + const uint32_t MAX_TOTAL_ORDERINGS3 = 32; + +#if RGBCX_USE_SMALLER_TABLES + const uint32_t MAX_TOTAL_ORDERINGS4 = 32; +#else + const uint32_t MAX_TOTAL_ORDERINGS4 = 128; +#endif + + // DEFAULT_TOTAL_ORDERINGS_TO_TRY is around 3x faster than libsquish at slightly higher average quality. 10-16 is a good range to start to compete against libsquish. + const uint32_t DEFAULT_TOTAL_ORDERINGS_TO_TRY = 10; + + const uint32_t DEFAULT_TOTAL_ORDERINGS_TO_TRY3 = 1; + + // Encodes a 4x4 block of RGBX (X=ignored) pixels to BC1 format. + // This is the simplified interface for BC1 encoding, which accepts a level parameter and converts that to the best overall flags. + // The pixels are in RGBA format, where R is first in memory. The BC1 encoder completely ignores the alpha channel (i.e. there is no punchthrough alpha support). + // This is the recommended function to use for BC1 encoding, becuase it configures the encoder for you in the best possible way (on average). + // Note that the 3 color modes won't be used at all until level 5 or higher. + // No transparency supported, however if you set use_transparent_texels_for_black to true the encocer will use transparent selectors on very dark/black texels to reduce MSE. + const uint32_t MIN_LEVEL = 0, MAX_LEVEL = 18; + void encode_bc1(uint32_t level, void* pDst, const uint8_t* pPixels, bool allow_3color, bool use_transparent_texels_for_black, const uint8_t* pForce_selectors = nullptr); + + // Low-level interface for BC1 encoding. + // Always returns a 4 color block, unless cEncodeBC1Use3ColorBlocksForBlackPixels or cEncodeBC1Use3ColorBlock flags are specified. + // total_orderings_to_try controls the perf. vs. quality tradeoff on 4-color blocks when the cEncodeBC1UseLikelyTotalOrderings flag is used. It must range between [MIN_TOTAL_ORDERINGS, MAX_TOTAL_ORDERINGS4]. + // total_orderings_to_try3 controls the perf. vs. quality tradeoff on 3-color bocks when the cEncodeBC1UseLikelyTotalOrderings and the cEncodeBC1Use3ColorBlocks flags are used. Valid range is [0,MAX_TOTAL_ORDERINGS3] (0=disabled). + void encode_bc1(void* pDst, const uint8_t* pPixels, uint32_t flags = 0, uint32_t total_orderings_to_try = DEFAULT_TOTAL_ORDERINGS_TO_TRY, uint32_t total_orderings_to_try3 = DEFAULT_TOTAL_ORDERINGS_TO_TRY3, const uint8_t *pForce_selectors = nullptr); + + // Constants used for high quality BC4/BC5 encoding (and alpha of BC3) + const uint32_t BC4_DEFAULT_SEARCH_RAD = 3; + const uint32_t BC4_USE_MODE8_FLAG = 1; + const uint32_t BC4_USE_MODE6_FLAG = 2; + const uint32_t BC4_USE_ALL_MODES = 3; + + // Encodes a 4x4 block of RGBA pixels to BC3 format. + // There are two encode_bc3() functions. + // The first is the recommended function, which accepts a level parameter. + // The second is a low-level version that allows fine control over BC1 encoding. + void encode_bc3(uint32_t level, void* pDst, const uint8_t* pPixels); + void encode_bc3(void* pDst, const uint8_t* pPixels, uint32_t flags = 0, uint32_t total_orderings_to_try = DEFAULT_TOTAL_ORDERINGS_TO_TRY); + void encode_bc3_hq(uint32_t level, void* pDst, const uint8_t* pPixels, uint32_t alpha_search_rad = BC4_DEFAULT_SEARCH_RAD, uint32_t alpha_modes = BC4_USE_ALL_MODES); + + // Encodes a single channel to BC4. + // stride is the source pixel stride in bytes. + void encode_bc4(void* pDst, const uint8_t* pPixels, uint32_t stride = 4); + uint32_t encode_bc4_hq(void* pDst, const uint8_t* pPixels, uint32_t stride = 4, uint32_t search_rad = BC4_DEFAULT_SEARCH_RAD, uint32_t mode_flag = BC4_USE_ALL_MODES, const uint8_t* pForce_selectors = nullptr); + + // Encodes two channels to BC5. + // chan0/chan1 control which channels, stride is the source pixel stride in bytes. + void encode_bc5(void* pDst, const uint8_t* pPixels, uint32_t chan0 = 0, uint32_t chan1 = 1, uint32_t stride = 4); + void encode_bc5_hq(void* pDst, const uint8_t* pPixels, uint32_t chan0 = 0, uint32_t chan1 = 1, uint32_t stride = 4, uint32_t alpha_search_rad = BC4_DEFAULT_SEARCH_RAD, uint32_t alpha_modes = BC4_USE_ALL_MODES); + + // Decompression functions. + + bool unpack_bc1_block_colors(const void* pBlock_bits, color32* c, bc1_approx_mode mode = bc1_approx_mode::cBC1Ideal); + + // Returns true if the block uses 3 color punchthrough alpha mode. + bool unpack_bc1(const void* pBlock_bits, void* pPixels, bool set_alpha = true, bc1_approx_mode mode = bc1_approx_mode::cBC1Ideal); + + void unpack_bc4(const void* pBlock_bits, uint8_t* pPixels, uint32_t stride = 4); + + // Returns true if the block uses 3 color punchthrough alpha mode. + bool unpack_bc3(const void* pBlock_bits, void* pPixels, bc1_approx_mode mode = bc1_approx_mode::cBC1Ideal); + + void unpack_bc5(const void* pBlock_bits, void* pPixels, uint32_t chan0 = 0, uint32_t chan1 = 1, uint32_t stride = 4); + + // Rate Distortion Optimization (RDO) + enum dxt_constants + { + cDXT1SelectorBits = 2U, cDXT1SelectorValues = 1U << cDXT1SelectorBits, cDXT1SelectorMask = cDXT1SelectorValues - 1U, + cDXT5SelectorBits = 3U, cDXT5SelectorValues = 1U << cDXT5SelectorBits, cDXT5SelectorMask = cDXT5SelectorValues - 1U, + }; + + struct bc1_block + { + enum { cTotalEndpointBytes = 2, cTotalSelectorBytes = 4 }; + + uint8_t m_low_color[cTotalEndpointBytes]; + uint8_t m_high_color[cTotalEndpointBytes]; + uint8_t m_selectors[cTotalSelectorBytes]; + + inline uint32_t get_low_color() const { return m_low_color[0] | (m_low_color[1] << 8U); } + inline uint32_t get_high_color() const { return m_high_color[0] | (m_high_color[1] << 8U); } + inline bool is_3color() const { return get_low_color() <= get_high_color(); } + inline void set_low_color(uint16_t c) { m_low_color[0] = static_cast(c & 0xFF); m_low_color[1] = static_cast((c >> 8) & 0xFF); } + inline void set_high_color(uint16_t c) { m_high_color[0] = static_cast(c & 0xFF); m_high_color[1] = static_cast((c >> 8) & 0xFF); } + inline uint32_t get_selector(uint32_t x, uint32_t y) const { assert((x < 4U) && (y < 4U)); return (m_selectors[y] >> (x * cDXT1SelectorBits)) & cDXT1SelectorMask; } + inline void set_selector(uint32_t x, uint32_t y, uint32_t val) { assert((x < 4U) && (y < 4U) && (val < 4U)); m_selectors[y] &= (~(cDXT1SelectorMask << (x * cDXT1SelectorBits))); m_selectors[y] |= (val << (x * cDXT1SelectorBits)); } + + inline uint32_t get_endpoint_bits() const { return m_low_color[0] | (m_low_color[1] << 8) | (m_high_color[0] << 16) | (m_high_color[1] << 24); } + inline void set_endpoint_bits(uint32_t s) { m_low_color[0] = (uint8_t)s; m_low_color[1] = (uint8_t)(s >> 8); m_high_color[0] = (uint8_t)(s >> 16); m_high_color[1] = (uint8_t)(s >> 24); } + + inline uint32_t get_selector_bits() const { return m_selectors[0] | (m_selectors[1] << 8) | (m_selectors[2] << 16) | (m_selectors[3] << 24); } + inline void set_selector_bits(uint32_t s) { m_selectors[0] = (uint8_t)s; m_selectors[1] = (uint8_t)(s >> 8); m_selectors[2] = (uint8_t)(s >> 16); m_selectors[3] = (uint8_t)(s >> 24); } + + inline bool any_selectors_transparent() const + { + uint32_t sel_bits = get_selector_bits(); + for (uint32_t i = 0; i < 16; i++) + { + if ((sel_bits & 3) == 3) + return true; + + sel_bits >>= 2; + } + return false; + } + + static inline uint16_t pack_color(const color32& color, bool scaled, uint32_t bias = 127U) + { + uint32_t r = color.r, g = color.g, b = color.b; + if (scaled) + { + r = (r * 31U + bias) / 255U; + g = (g * 63U + bias) / 255U; + b = (b * 31U + bias) / 255U; + } + return static_cast(minimum(b, 31U) | (minimum(g, 63U) << 5U) | (minimum(r, 31U) << 11U)); + } + + static inline uint16_t pack_unscaled_color(uint32_t r, uint32_t g, uint32_t b) { return static_cast(b | (g << 5U) | (r << 11U)); } + + static inline void unpack_color(uint32_t c, uint32_t& r, uint32_t& g, uint32_t& b) + { + r = (c >> 11) & 31; + g = (c >> 5) & 63; + b = c & 31; + + r = (r << 3) | (r >> 2); + g = (g << 2) | (g >> 4); + b = (b << 3) | (b >> 2); + } + + static inline void unpack_color_unscaled(uint32_t c, uint32_t& r, uint32_t& g, uint32_t& b) + { + r = (c >> 11) & 31; + g = (c >> 5) & 63; + b = c & 31; + } + }; + + struct bc4_block + { + enum { cBC4SelectorBits = 3, cTotalSelectorBytes = 6, cMaxSelectorValues = 8 }; + uint8_t m_endpoints[2]; + + uint8_t m_selectors[cTotalSelectorBytes]; + + inline uint32_t get_low_alpha() const { return m_endpoints[0]; } + inline uint32_t get_high_alpha() const { return m_endpoints[1]; } + inline bool is_alpha6_block() const { return get_low_alpha() <= get_high_alpha(); } + + inline uint64_t get_selector_bits() const + { + return ((uint64_t)((uint32_t)m_selectors[0] | ((uint32_t)m_selectors[1] << 8U) | ((uint32_t)m_selectors[2] << 16U) | ((uint32_t)m_selectors[3] << 24U))) | + (((uint64_t)m_selectors[4]) << 32U) | + (((uint64_t)m_selectors[5]) << 40U); + } + + inline void set_selector_bits(uint64_t v) + { + for (uint32_t i = 0; i < 6; i++) + { + m_selectors[i] = (uint8_t)v; + v >>= 8; + } + } + + inline uint32_t get_selector(uint32_t x, uint32_t y, uint64_t selector_bits) const + { + assert((x < 4U) && (y < 4U)); + return (selector_bits >> (((y * 4) + x) * cBC4SelectorBits)) & (cMaxSelectorValues - 1); + } + + static inline uint32_t get_block_values6(uint8_t* pDst, uint32_t l, uint32_t h) + { + pDst[0] = static_cast(l); + pDst[1] = static_cast(h); + pDst[2] = static_cast((l * 4 + h) / 5); + pDst[3] = static_cast((l * 3 + h * 2) / 5); + pDst[4] = static_cast((l * 2 + h * 3) / 5); + pDst[5] = static_cast((l + h * 4) / 5); + pDst[6] = 0; + pDst[7] = 255; + return 6; + } + + static inline uint32_t get_block_values8(uint8_t* pDst, uint32_t l, uint32_t h) + { + pDst[0] = static_cast(l); + pDst[1] = static_cast(h); + pDst[2] = static_cast((l * 6 + h) / 7); + pDst[3] = static_cast((l * 5 + h * 2) / 7); + pDst[4] = static_cast((l * 4 + h * 3) / 7); + pDst[5] = static_cast((l * 3 + h * 4) / 7); + pDst[6] = static_cast((l * 2 + h * 5) / 7); + pDst[7] = static_cast((l + h * 6) / 7); + return 8; + } + + static inline uint32_t get_block_values(uint8_t* pDst, uint32_t l, uint32_t h) + { + if (l > h) + return get_block_values8(pDst, l, h); + else + return get_block_values6(pDst, l, h); + } + }; + +} +#endif // #ifndef RGBCX_INCLUDE_H + +#ifdef RGBCX_IMPLEMENTATION +#endif //#ifdef RGBCX_IMPLEMENTATION + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright(c) 2020 Richard Geldreich, Jr. +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. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain(www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non - commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain.We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors.We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +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 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. +------------------------------------------------------------------------------ +*/ + diff --git a/external/bc7enc_rdo/rgbcx_table4.h b/external/bc7enc_rdo/rgbcx_table4.h new file mode 100644 index 0000000000..cda3f0a1ac --- /dev/null +++ b/external/bc7enc_rdo/rgbcx_table4.h @@ -0,0 +1,969 @@ +{ 202,403,51,450,318,23,120,13,494,5,523,260,77,21,15,128,48,141,33,817,137,269,12,102,1,475,4,326,7,32,453,64,196,115,730,49,165,2,82,342,6,401,180,31,899,59,402,351,197,17,125,457,14,386,40,3,61,58,37,221,95,16,99,719,98,20,10,854,117,153,27,576,134,341,308,216,11,194,30,24,922,285,9,50,86,65,19,615,391,44,75,237,177,90,352,93,56,22,18,116,70,96,247,291,45,110,105,60,57,54,43,36,0,217,421,203,46,629,569,365,210,92,69,66,38,28,144,551 }, +{ 13,115,51,23,141,217,269,137,318,202,77,21,317,5,64,4,291,2,352,7,32,33,6,372,0,48,365,3,102,349,12,341,177,180,10,237,9,221,403,165,752,22,11,244,28,308,15,128,247,197,49,16,494,125,98,40,120,498,31,90,304,143,95,93,437,196,144,86,44,864,153,18,678,342,901,39,24,30,203,160,117,105,475,14,482,253,457,873,59,35,579,36,569,450,206,72,99,17,717,401,241,453,110,546,201,83,421,61,37,326,260,509,284,275,96,8,109,57,391,386,468,134,82,961,822,576,89,68 }, +{ 29,58,262,74,287,52,151,331,171,500,396,334,75,27,635,220,53,1,26,409,6,324,5,70,145,223,163,112,73,50,45,549,445,113,297,19,675,651,46,61,502,307,14,17,34,573,186,80,394,436,583,315,138,38,21,767,250,491,820,350,64,2,32,357,42,852,25,764,309,67,802,96,631,48,606,780,243,881,103,241,115,807,13,4,155,181,11,106,611,614,278,153,23,108,69,845,841,308,400,72,853,200,66,196,226,237,587,632,24,281,785,133,128,125,117,380,95,474,294,83,197,90,161,134,366,236,760,311 }, +{ 40,51,62,33,453,14,23,56,730,196,475,99,12,34,139,775,153,403,585,440,102,38,130,47,162,17,108,880,117,11,202,57,361,84,123,27,184,236,4,128,19,2,670,136,54,26,111,134,13,161,277,719,152,6,377,183,5,59,211,53,412,485,46,328,77,711,78,21,556,452,65,283,421,129,37,514,507,402,176,29,25,229,401,488,757,45,76,205,899,322,32,177,494,527,383,497,457,249,300,114,215,555,386,119,133,0,349,115,3,862,1,165,73,41,523,72,200,64,291,217,80,305,22,318,194,308,18,714 }, +{ 33,51,102,202,23,128,196,13,64,153,40,12,141,99,403,15,10,269,77,139,475,453,5,318,117,2,14,134,1,86,165,120,401,3,0,22,137,6,197,277,17,402,180,21,421,494,37,115,31,82,38,9,95,342,93,7,110,351,125,457,65,36,361,49,54,19,260,111,44,291,237,28,8,11,194,961,719,352,217,18,485,523,308,730,386,326,210,450,328,300,98,899,27,32,341,48,25,670,34,50,629,26,24,503,498,285,317,67,817,143,365,177,509,41,164,116,757,55,46,203,569,898,373,114,144,16,349,775 }, +{ 13,23,51,115,77,177,202,4,141,32,40,33,217,64,128,90,269,102,59,318,11,291,0,137,403,22,21,7,165,197,15,210,247,180,16,117,153,352,14,2,125,494,10,49,237,18,95,453,6,9,1,24,28,349,475,216,12,342,317,304,3,196,86,98,275,134,31,17,35,25,365,308,19,341,44,36,372,30,93,20,401,76,241,402,139,752,57,244,105,386,37,26,260,110,288,120,116,48,326,421,221,285,901,38,99,82,498,39,468,55,523,143,111,482,65,300,214,450,203,457,351,43,29,27,8,576,678,569 }, +{ 235,26,19,648,624,630,78,47,122,444,145,27,665,112,85,42,390,416,813,113,130,65,680,64,711,25,453,108,644,6,53,73,138,256,95,412,22,730,29,289,90,194,34,525,74,690,32,297,128,45,196,250,287,133,445,86,283,214,236,237,137,222,884,200,746,59,52,312,77,280,632,0,17,114,835,51,123,14,288,881,28,307,180,57,381,141,183,70,4,472,10,33,76,337,3,389,247,315,2,18,368,849,874,573,23,58,544,153,151,436,102,322,99,352,36,1,177,714,719,125,597,63,165,519,285,49,13,396 }, +{ 64,352,751,141,217,247,237,304,269,954,437,372,177,947,312,86,318,349,180,875,95,864,291,597,498,128,678,77,232,92,115,317,752,32,202,588,59,197,579,90,638,392,652,76,210,546,260,1,448,126,340,164,18,303,13,165,275,14,582,120,633,205,179,69,156,296,35,230,391,888,267,572,28,16,379,851,660,96,717,314,0,23,863,49,195,39,223,5,386,137,75,509,107,571,563,46,194,526,309,21,450,342,288,140,83,24,330,87,70,50,12,9,514,365,246,199,100,65,36,385,55,125,658,244,326,264,696,453 }, +{ 642,898,638,180,901,341,82,197,951,10,762,253,165,15,752,811,479,244,143,365,569,873,242,110,506,351,31,8,116,55,137,115,317,499,141,352,44,338,206,373,386,854,164,22,758,93,37,217,36,1,417,77,629,661,21,717,33,9,564,160,401,456,30,4,203,559,5,509,86,28,326,102,282,268,535,0,13,308,170,269,11,498,391,51,120,2,457,64,704,965,40,32,23,299,421,482,148,615,39,318,533,3,169,961,801,202,260,851,576,117,247,221,349,372,670,968,403,468,291,285,128,824,134,719,237,734,177,342 }, +{ 51,221,23,254,308,438,21,125,166,39,530,656,159,401,49,13,158,115,386,421,688,613,629,228,743,48,518,190,627,453,0,829,333,30,105,912,341,9,670,424,827,165,406,217,404,840,669,391,137,274,197,301,286,272,170,468,457,95,89,22,770,242,33,310,109,569,938,393,960,1,101,36,88,773,538,364,890,131,616,100,28,219,456,344,64,479,679,734,327,846,365,261,55,317,32,5,4,492,180,68,67,482,237,475,793,385,2,367,16,7,347,293,371,224,86,35,719,762,578,332,202,102,442,865,12,949,351,98 }, +{ 1,143,31,197,44,116,242,2,180,125,23,55,206,13,93,498,5,8,115,341,36,752,638,338,141,268,64,901,165,456,0,203,951,546,479,365,873,253,417,4,569,137,15,762,506,237,12,352,965,120,3,299,244,170,164,7,22,282,51,144,6,86,864,21,269,384,558,128,37,9,457,326,844,492,160,961,391,499,202,509,599,870,260,317,685,434,127,217,824,393,373,489,629,77,98,903,308,33,559,332,811,473,301,318,401,102,963,28,386,564,918,367,110,105,911,285,959,523,134,482,740,678,169,617,14,96,758,450 }, +{ 12,23,51,37,13,99,14,38,15,196,328,54,21,134,153,64,453,401,117,128,2,33,139,120,308,5,82,141,361,0,277,29,403,351,719,165,10,115,629,457,46,475,89,450,22,32,110,260,1,31,269,93,9,137,8,386,202,125,86,18,40,111,52,180,17,49,48,4,102,72,477,523,474,326,318,45,898,3,44,402,197,77,730,203,28,24,6,19,421,854,961,352,237,194,114,65,155,373,116,50,36,498,242,236,221,98,55,16,25,7,217,391,569,880,615,41,546,144,509,59,316,79,57,514,494,317,899,488 }, +{ 13,23,15,961,457,115,569,51,165,38,197,2,4,1,474,5,719,99,629,77,0,14,37,401,3,33,7,94,6,128,11,40,10,453,59,64,153,79,509,482,54,17,21,328,111,89,139,277,12,102,498,188,9,152,141,734,76,157,873,386,196,402,32,475,177,117,72,391,36,8,730,758,237,45,304,57,403,134,579,148,202,775,22,523,341,29,431,318,317,308,120,546,62,313,468,437,86,405,217,180,361,50,269,46,342,90,31,143,16,48,44,339,184,19,49,27,18,749,41,450,880,542,205,901,300,216,164,52 }, +{ 15,10,12,0,1,23,961,197,5,82,2,4,3,120,134,457,7,165,260,33,51,9,6,11,351,31,22,21,14,64,8,180,40,450,110,141,386,898,719,523,37,17,153,102,77,117,44,341,217,32,326,93,36,854,269,317,115,18,730,352,49,922,196,365,202,901,28,38,99,59,291,817,125,318,16,569,453,403,55,498,475,111,48,30,94,372,349,342,752,41,391,139,72,474,128,19,899,373,210,203,57,873,661,177,494,98,79,86,143,95,509,27,76,401,89,864,615,304,116,431,144,482,758,137,35,45,29,277 }, +{ 23,51,13,961,719,457,730,401,453,386,758,165,99,899,328,0,10,9,2,1,308,15,134,33,7,6,5,117,54,12,153,11,523,4,391,403,197,629,40,139,14,22,361,28,202,509,128,402,236,231,888,488,369,111,87,57,196,514,79,115,880,317,65,35,817,377,3,291,46,176,77,49,44,38,31,8,450,64,585,477,244,180,141,498,120,507,412,283,102,59,775,475,114,108,62,52,546,237,188,160,157,152,137,94,452,383,260,95,56,440,215,830,774,757,622,569,494,485,472,342,330,300,275,210,203,201,187,144 }, +{ 134,898,82,117,13,23,33,102,153,77,351,341,196,197,110,260,961,180,901,10,120,165,115,111,457,8,450,854,177,40,569,51,94,365,37,11,922,523,277,4,326,291,0,79,55,342,1,9,93,642,12,217,59,352,817,202,5,730,317,21,873,719,141,31,661,811,629,349,16,98,509,373,386,453,372,44,64,18,54,32,3,139,203,116,615,275,22,125,269,210,899,38,318,128,2,144,752,57,479,49,704,17,28,90,30,6,564,638,95,7,403,475,137,304,494,758,474,300,48,36,391,237,498,482,105,499,14,39 }, +{ 60,126,167,191,18,71,35,121,199,16,271,24,212,92,146,150,118,575,107,68,727,566,446,132,21,273,463,108,246,7,279,467,48,653,695,608,517,589,1,101,9,598,5,354,14,649,55,562,345,522,97,98,441,375,140,0,195,22,407,640,149,28,32,223,10,156,49,298,125,13,423,755,508,953,363,221,23,411,314,46,50,781,346,447,154,37,12,818,356,95,647,302,31,230,43,69,674,2,388,20,783,809,232,621,359,189,267,362,124,175,67,293,105,51,109,65,360,493,520,236,163,607,535,75,165,103,39,33 }, +{ 136,62,129,123,128,41,162,789,211,618,249,214,183,678,248,507,38,216,710,119,152,177,269,130,64,17,57,141,245,597,318,205,184,4,179,90,503,77,59,402,305,106,3,313,229,157,266,54,210,139,102,257,275,556,209,45,117,40,13,11,292,99,328,76,457,33,339,23,452,378,217,86,291,80,194,471,369,947,349,383,188,524,497,304,542,381,255,153,519,751,494,240,361,84,803,588,202,32,440,372,115,403,742,164,56,529,12,137,37,790,21,5,504,432,207,196,10,14,285,215,134,342,36,15,587,0,358,165 }, +{ 523,494,475,403,51,899,817,453,202,23,450,730,421,13,805,120,128,757,102,5,4,719,33,21,342,318,958,326,196,153,260,402,7,1,386,12,48,133,65,20,32,457,141,9,8,615,16,114,108,14,10,77,19,0,361,137,17,300,84,82,59,351,123,3,194,576,11,700,221,401,269,95,64,49,177,541,27,40,57,26,115,125,117,22,474,308,99,37,862,701,304,193,56,503,91,697,551,134,105,283,50,129,86,24,249,240,2,942,814,673,671,579,569,519,490,468,437,397,389,365,352,349,306,291,281,247,218,208 }, +{ 59,4,84,62,77,40,3,102,76,119,27,33,56,177,32,12,161,73,21,196,136,123,17,210,11,193,216,80,90,18,64,57,128,51,6,25,13,611,300,63,202,65,48,415,42,605,106,23,152,0,99,275,22,217,803,26,49,205,122,503,291,53,5,2,37,29,349,87,667,453,402,318,209,361,19,690,283,403,718,445,342,129,14,61,194,79,436,245,370,397,297,141,86,862,485,269,240,52,91,85,494,304,510,153,95,573,115,1,45,416,249,184,139,757,475,255,133,81,529,292,41,469,111,680,250,813,113,31 }, +{ 43,414,422,319,20,819,945,7,0,376,61,904,97,470,325,173,707,5,804,693,22,104,14,49,560,426,330,95,595,32,392,17,107,147,207,887,577,246,46,21,324,356,77,74,344,725,58,52,1,198,113,784,347,28,27,18,66,38,76,427,135,105,329,31,858,25,12,158,526,291,263,112,9,523,357,239,232,120,115,362,81,230,359,118,19,10,715,450,119,241,64,44,259,424,315,24,260,140,13,942,292,350,165,102,56,45,37,36,861,125,879,817,719,600,86,33,30,2,814,204,500,476,205,98,26,16,180,179 }, +{ 13,23,51,217,115,77,141,2,33,10,4,0,64,7,180,6,102,40,11,22,317,9,14,269,352,3,1,5,202,197,15,177,341,165,59,237,291,125,365,16,12,128,28,18,247,318,308,31,153,196,349,95,372,117,36,17,24,137,49,498,98,752,32,403,304,134,90,475,342,457,453,210,143,401,93,391,19,86,44,120,30,901,275,386,8,57,105,216,244,164,569,39,65,494,509,20,29,110,25,421,864,961,139,116,873,38,55,27,719,37,35,82,50,221,482,46,260,56,26,546,450,316,468,351,326,45,899,523 }, +{ 28,49,24,105,35,65,159,0,55,109,1,16,239,320,14,7,347,95,424,158,168,170,124,9,2,185,67,68,301,18,169,654,286,149,12,289,175,36,5,127,154,21,10,71,69,114,98,64,740,83,512,39,108,13,272,48,164,327,31,23,623,420,374,395,46,50,713,125,371,518,51,194,338,577,312,6,37,143,916,22,346,344,429,570,32,86,835,103,336,761,101,928,44,638,242,890,737,60,133,202,237,293,115,538,30,762,128,141,137,38,302,398,747,484,479,165,439,189,96,844,610,92,221,299,892,308,54,131 }, +{ 15,10,0,12,1,457,13,165,5,2,82,9,4,117,120,7,961,3,134,6,64,22,197,14,11,260,351,37,33,32,51,21,31,719,77,141,180,38,341,17,8,365,450,317,102,217,153,28,523,269,110,115,44,93,898,372,854,202,386,18,196,40,291,326,99,901,49,730,349,453,352,16,128,125,922,36,237,72,111,318,509,177,76,59,342,403,48,475,817,401,98,391,29,30,89,752,90,474,373,569,27,137,45,704,24,275,19,95,328,55,494,54,498,86,899,143,437,139,210,304,629,758,57,25,402,116,546,873 }, +{ 7,97,71,14,92,150,140,60,149,189,18,16,517,69,336,398,298,154,124,66,302,35,43,68,175,467,273,38,230,118,251,508,314,429,24,2,28,399,172,232,20,0,882,36,279,55,423,173,267,6,46,1,107,126,67,375,83,566,108,22,74,65,547,29,607,104,192,5,426,246,135,847,52,81,531,420,109,596,501,10,809,9,13,952,387,533,505,608,484,169,21,458,330,674,628,49,823,86,25,345,158,51,191,705,48,101,637,12,386,723,439,570,324,653,462,185,168,697,779,535,783,796,346,114,722,861,799,95 }, +{ 102,4,77,59,33,210,11,342,40,32,12,64,128,139,624,5,503,196,202,90,494,21,300,91,51,233,318,403,23,17,291,177,416,269,275,678,141,817,450,13,529,0,25,10,3,485,277,153,151,49,37,42,789,216,496,457,115,57,197,680,214,22,18,788,523,249,205,27,389,194,86,72,453,122,145,480,81,26,961,280,148,138,134,111,104,74,65,6,899,730,204,165,120,89,209,804,475,348,123,95,19,636,396,174,693,651,287,125,869,750,629,306,257,76,48,386,349,221,61,45,803,784,544,402,397,240,58,31 }, +{ 25,42,256,235,19,122,85,436,813,6,297,680,53,26,573,416,233,445,390,63,605,73,250,343,80,27,65,630,389,283,106,255,194,444,45,17,138,544,396,690,525,503,648,269,141,64,119,33,145,123,611,113,128,102,174,112,84,91,29,789,70,624,4,412,77,0,736,483,209,358,205,597,179,56,117,249,243,280,287,108,153,650,196,619,114,32,136,78,678,18,746,348,5,129,2,495,200,57,14,378,76,240,40,511,86,137,161,90,216,10,684,881,23,665,222,22,432,12,289,51,177,1,21,214,370,245,134,11 }, +{ 102,300,402,128,202,403,33,23,342,77,40,99,21,757,84,12,115,196,483,318,19,119,117,210,494,139,90,32,25,4,569,153,469,277,26,475,91,134,63,59,80,523,73,14,275,51,485,453,44,36,31,10,6,48,576,37,49,22,352,193,56,165,18,790,152,415,53,42,880,125,370,291,177,74,13,1,197,180,81,64,62,3,814,611,343,161,136,106,391,386,138,129,66,54,45,38,34,27,17,2,678,11,378,770,697,543,511,504,120,65,82,226,961,899,862,730,718,690,643,317,256,235,89,87,72,61,47,605 }, +{ 158,109,9,39,49,0,35,65,168,68,24,124,159,344,185,154,22,55,333,577,272,175,254,289,810,169,16,327,101,346,95,105,570,149,747,627,286,374,71,310,703,67,439,793,30,28,252,429,131,419,1,455,912,114,610,671,347,18,424,364,7,36,835,100,194,14,21,420,239,336,86,688,10,634,69,108,83,538,706,709,578,484,23,518,2,320,64,51,13,166,48,12,60,118,962,170,128,5,190,133,913,398,50,46,125,677,535,137,127,96,98,345,302,189,826,584,103,251,31,224,638,37,265,92,160,722,219,32 }, +{ 237,498,546,180,115,197,873,287,5,34,923,61,297,509,165,45,400,80,445,2,311,341,3,58,52,468,176,231,186,881,250,64,13,56,151,48,17,217,62,490,14,153,141,23,513,901,51,391,21,667,334,247,352,903,171,84,482,161,549,10,72,401,243,53,738,592,196,46,316,73,719,308,869,666,396,365,645,106,130,585,125,887,635,569,215,86,749,1,207,864,472,177,211,317,22,659,573,37,95,40,227,136,33,372,527,29,507,483,128,651,90,469,229,629,436,833,721,787,758,515,437,54,36,27,117,32,430,304 }, +{ 120,968,704,260,373,450,202,137,661,326,717,269,349,110,217,77,318,473,1,652,95,851,291,93,177,244,33,21,372,141,719,102,351,82,518,156,51,48,848,340,210,928,713,160,922,98,296,128,817,146,86,827,304,264,32,197,225,115,623,317,212,96,23,751,386,854,35,13,7,863,698,180,919,494,385,64,800,253,730,678,523,140,15,70,65,303,453,437,275,247,49,642,341,352,127,37,888,737,5,942,898,167,776,87,658,744,692,615,389,203,101,36,478,196,190,393,59,55,363,132,118,850,163,131,916,836,811,599 }, +{ 44,116,144,268,489,434,367,384,127,918,98,855,940,948,617,206,203,959,93,137,105,31,332,393,492,22,131,9,911,282,276,141,219,202,0,49,284,28,299,120,326,36,39,417,269,1,51,523,30,473,935,899,293,318,352,125,23,395,253,64,13,244,55,160,10,551,128,95,403,373,201,143,450,115,260,8,692,386,21,86,109,110,187,730,165,456,272,737,159,791,261,499,170,7,16,341,728,295,77,951,5,48,96,944,559,242,258,365,371,494,24,254,2,317,421,578,752,18,224,716,164,197,391,285,301,498,924,12 }, +{ 77,13,23,51,102,33,141,64,115,0,177,291,217,202,269,6,2,7,4,318,40,14,180,128,59,1,10,196,117,153,22,11,16,15,352,95,134,9,137,3,165,197,210,18,86,403,17,237,28,49,304,342,125,275,12,349,24,341,247,317,453,5,90,19,475,216,57,25,36,494,65,365,27,20,457,31,120,143,93,498,372,308,401,402,391,29,26,752,260,98,110,719,312,82,961,164,45,56,386,35,44,139,21,99,509,30,730,194,38,244,144,351,8,37,111,203,421,546,50,300,96,288,285,208,46,54,39,901 }, +{ 15,4,11,40,141,165,23,32,202,180,21,197,64,269,125,13,59,386,120,93,51,110,77,5,128,57,318,457,82,3,12,523,260,0,17,49,10,450,730,134,117,31,403,1,719,352,8,102,137,22,115,90,153,899,351,98,44,326,237,2,494,475,139,203,391,144,9,111,961,56,37,402,116,177,210,48,801,453,65,196,6,95,217,341,509,14,421,99,76,291,7,86,216,373,758,401,498,18,28,752,27,36,275,365,300,72,342,615,901,854,898,247,317,45,922,105,127,30,308,152,304,123,817,551,19,791,393,55 }, +{ 176,231,585,62,56,161,412,34,236,527,14,440,202,3,57,17,283,361,84,402,136,23,369,51,128,4,803,13,130,472,383,548,322,507,46,719,457,555,53,73,38,514,503,250,381,119,59,200,162,64,77,452,401,495,153,469,11,229,318,29,205,211,196,497,453,152,2,730,556,240,33,390,27,372,210,184,106,961,215,183,123,65,757,629,99,494,108,129,52,37,18,0,21,40,529,515,475,54,377,828,275,209,197,217,117,1,899,543,300,269,245,862,483,305,45,504,378,342,297,111,102,76,50,24,10,95,12,611 }, +{ 101,9,237,180,0,352,217,230,498,141,100,88,702,115,68,317,83,175,213,39,365,1,252,30,345,752,64,546,482,208,321,864,265,341,490,562,13,372,818,336,952,399,128,69,36,244,197,212,96,410,21,154,689,269,158,28,251,289,166,194,65,382,419,48,443,759,596,901,873,23,468,67,51,16,547,831,797,165,570,55,285,264,930,329,49,756,646,346,124,694,144,391,579,799,854,247,35,190,189,164,699,755,24,364,203,777,323,238,429,569,768,435,37,724,466,201,349,12,509,723,840,50,789,826,160,676,291,137 }, +{ 28,22,49,109,9,39,1,95,0,105,158,168,83,185,159,55,86,30,96,208,141,272,128,12,420,5,505,13,31,327,169,160,131,69,67,137,23,202,21,64,115,251,286,254,51,35,98,127,2,101,244,44,238,194,48,197,50,531,10,7,217,927,180,533,175,352,584,103,285,269,165,37,65,218,100,535,317,323,68,374,946,239,597,24,837,735,289,797,896,418,341,347,333,601,170,116,346,365,237,143,318,345,678,32,344,125,16,164,498,627,253,752,402,577,424,310,4,219,99,403,252,6,312,144,578,166,789,242 }, +{ 72,76,38,89,51,477,4,413,308,179,474,12,152,401,57,148,59,11,205,99,54,421,670,23,245,17,629,431,79,488,405,90,94,184,13,569,21,453,32,229,128,3,358,45,197,14,475,188,77,528,157,464,316,165,257,543,115,41,288,202,457,428,961,216,15,341,403,40,734,266,5,339,749,10,64,33,2,452,328,217,645,460,141,775,111,313,468,1,247,361,102,277,432,743,365,381,587,482,62,509,37,269,0,769,497,471,285,137,402,177,794,449,155,6,318,542,377,86,805,181,129,9,369,7,153,524,349,243 }, +{ 23,13,457,961,15,51,165,629,12,719,11,3,197,2,1,37,0,117,5,569,7,509,33,153,40,196,6,134,328,99,9,542,391,237,17,474,139,111,277,64,453,54,730,546,386,401,57,4,38,14,514,45,775,59,734,361,115,21,102,41,498,477,77,873,431,475,880,369,339,19,587,62,89,377,29,27,523,479,248,128,758,308,482,352,291,275,210,32,8,468,413,164,94,155,659,428,864,752,751,579,494,405,403,397,342,247,240,216,184,180,171,148,122,106,91,84,72,56,52,34,721,188,157,79,654,597,312,95 }, +{ 254,310,100,166,625,9,265,272,30,731,190,39,404,557,688,1,578,131,98,593,101,616,438,264,0,31,829,252,795,716,127,21,382,51,812,49,88,93,613,48,105,827,478,274,18,639,329,36,44,656,23,203,363,68,411,96,682,159,16,116,327,160,242,128,333,13,5,938,910,224,35,447,286,676,144,165,921,530,67,228,137,520,125,219,223,22,724,455,86,33,846,110,284,118,627,905,120,24,77,115,65,83,737,435,32,158,856,664,95,326,924,821,102,518,167,960,202,385,395,931,371,406,10,69,403,55,709,40 }, +{ 51,23,202,99,128,12,15,13,120,403,10,453,153,196,141,64,165,5,318,117,475,82,197,269,401,33,260,2,37,3,1,110,0,14,180,93,386,22,21,450,421,31,402,115,125,137,17,351,134,326,102,494,6,38,308,457,44,36,4,77,11,95,523,28,49,7,9,8,719,237,352,730,32,203,116,391,373,57,18,98,59,361,86,54,19,89,285,775,328,277,757,498,341,854,111,16,27,139,72,45,48,41,143,79,509,961,898,758,342,291,65,474,488,30,569,217,144,56,901,242,899,670,34,24,678,817,922,194 }, +{ 38,99,542,453,139,196,117,457,23,328,13,111,37,134,961,11,12,775,401,51,587,40,474,153,277,477,54,629,475,33,719,79,165,41,14,569,157,4,413,188,89,115,64,339,734,308,15,361,369,197,313,102,94,247,155,45,248,236,57,514,72,758,402,128,181,485,377,509,86,237,488,0,403,266,141,46,10,164,211,471,184,588,65,180,29,2,875,528,490,95,76,22,5,50,17,7,721,670,391,49,18,503,817,789,431,21,257,216,32,208,305,177,136,1,880,803,352,140,342,260,229,202,67,867,597,59,757,899 }, +{ 85,6,233,343,91,25,138,26,63,174,256,235,122,29,19,81,283,65,605,648,42,718,445,370,4,74,59,573,389,416,194,396,45,177,544,297,355,64,141,348,145,77,114,216,123,280,436,881,133,680,432,87,70,511,137,108,27,128,57,630,0,11,415,18,90,503,619,86,412,40,287,17,397,789,222,14,73,269,32,66,52,291,204,243,56,22,209,275,597,104,76,72,529,148,678,84,80,119,53,643,304,210,208,285,33,46,2,523,5,311,813,636,510,381,255,10,524,112,102,403,289,214,152,483,62,736,525,349 }, +{ 49,5,197,408,193,18,20,61,713,350,173,21,64,97,509,95,729,841,263,0,241,32,165,104,43,422,65,125,35,510,60,474,7,120,102,523,397,14,48,232,260,128,347,68,546,387,38,58,693,403,16,105,81,71,115,784,10,560,91,72,6,862,27,92,51,707,344,22,9,237,319,29,414,107,55,66,643,147,663,450,391,498,240,357,70,468,90,2,751,370,98,701,84,819,903,330,207,623,141,63,52,718,569,308,864,475,25,159,74,283,356,326,158,86,12,900,494,137,171,42,221,202,85,734,386,847,873,650 }, +{ 434,144,268,489,116,384,367,855,940,206,617,332,959,911,127,93,44,98,203,137,276,282,219,202,131,22,141,31,417,284,918,9,36,105,28,201,269,258,244,120,473,23,318,523,51,326,253,1,450,39,0,30,352,160,948,143,10,13,8,110,49,64,125,55,551,935,951,692,295,187,128,21,86,261,567,260,499,559,373,96,224,170,899,386,242,115,299,817,95,662,728,293,165,197,811,395,159,48,492,365,109,317,498,403,37,752,341,393,836,638,717,5,180,254,77,15,272,851,164,24,944,494,237,385,16,7,301,391 }, +{ 106,17,255,32,64,62,136,292,162,129,476,352,237,214,123,519,241,720,141,752,498,247,211,41,119,209,864,507,249,180,179,290,710,954,425,148,317,618,197,90,186,21,5,115,248,77,76,269,217,183,45,48,14,227,130,3,263,12,304,38,165,128,243,546,23,2,358,207,117,164,57,579,51,245,205,54,454,313,152,350,177,13,155,873,339,270,50,4,428,378,157,655,449,496,305,400,365,171,86,1,437,742,556,372,369,408,471,328,266,216,33,80,153,139,460,181,597,542,316,40,102,29,751,59,361,257,84,341 }, +{ 2,29,52,58,5,50,27,6,53,26,171,45,366,151,14,287,61,19,357,74,17,73,764,1,113,34,297,309,218,262,181,38,133,48,583,70,487,600,739,334,25,396,250,760,281,96,186,445,516,75,502,635,315,114,308,108,3,223,80,549,42,545,103,331,324,106,200,163,112,21,785,67,436,145,603,238,401,243,51,37,651,433,155,834,491,675,236,99,745,209,161,13,845,32,227,115,409,23,894,388,765,12,56,36,311,255,220,920,766,138,323,453,573,24,594,62,59,65,832,754,160,86,54,307,283,83,285,629 }, +{ 130,711,412,381,59,196,210,730,236,77,402,401,803,202,453,361,99,108,283,291,153,57,183,128,503,421,4,51,14,719,432,11,318,275,117,23,529,757,3,475,13,339,457,133,488,123,670,899,603,369,134,33,65,46,266,386,2,47,754,12,32,389,114,38,838,56,300,40,102,177,739,111,961,523,629,328,758,64,54,90,216,514,269,21,594,0,743,37,775,657,576,894,403,152,650,194,471,34,200,5,832,162,50,494,805,472,18,165,22,6,29,181,95,285,10,129,188,480,15,1,322,24,229,342,139,714,79,86 }, +{ 13,23,51,217,115,77,141,33,4,64,10,202,102,180,0,40,317,352,177,11,291,269,197,165,9,32,22,59,7,2,128,318,341,18,15,21,237,137,117,6,16,5,95,3,153,403,125,349,365,14,247,752,49,12,196,28,31,453,90,1,24,98,304,17,143,494,372,308,244,475,498,134,210,221,120,901,401,36,342,421,86,93,44,30,216,260,35,164,457,19,110,275,569,391,57,386,203,105,326,55,864,82,402,523,241,139,8,450,39,873,730,719,144,65,20,253,160,27,351,116,72,29,437,509,37,629,285,546 }, +{ 23,13,202,51,21,269,141,120,5,48,128,137,318,523,15,102,125,98,1,450,93,403,165,260,64,197,77,33,180,12,457,32,221,82,817,115,44,110,31,7,352,494,2,386,475,308,117,4,153,326,14,401,719,116,196,421,37,237,16,453,9,144,730,351,17,99,6,30,291,402,203,18,11,899,19,24,217,96,498,40,391,20,10,39,95,854,3,341,50,134,349,293,373,177,615,35,365,65,139,0,45,285,372,61,8,317,90,922,805,901,342,59,43,898,76,29,509,393,127,86,752,170,208,105,89,72,67,38 }, +{ 2,1,46,14,52,29,171,67,38,103,58,75,70,69,163,24,83,223,5,96,309,181,54,186,112,334,108,45,394,675,155,366,220,35,238,151,16,236,409,18,281,760,307,133,537,400,36,71,189,328,227,433,28,218,766,61,545,65,17,487,149,7,48,552,21,502,0,12,262,19,87,6,765,114,25,388,267,150,113,820,418,50,549,27,26,37,251,22,99,335,430,486,32,60,536,287,68,587,9,828,55,64,74,243,10,516,137,160,86,66,128,311,600,696,739,852,583,451,336,315,514,72,135,80,175,145,89,294 }, +{ 15,2,1,13,0,10,153,5,9,7,12,23,3,14,117,6,165,134,4,719,457,196,82,341,180,197,33,22,120,115,77,8,961,21,64,217,102,317,569,365,351,141,260,32,31,18,28,291,11,16,110,111,37,125,93,386,17,202,40,450,269,372,730,901,99,898,44,36,177,854,38,342,349,352,48,523,758,318,453,57,128,401,391,304,72,76,403,19,922,326,752,29,629,49,509,475,237,137,116,98,89,55,373,95,24,27,26,30,494,247,59,482,86,25,210,96,54,46,437,899,139,65,253,817,661,498,308,873 }, +{ 509,197,546,391,165,180,308,13,23,498,569,29,873,115,901,5,401,61,457,903,80,734,629,468,3,287,34,2,45,758,311,445,250,579,297,341,961,237,17,186,171,749,386,51,14,38,217,231,48,58,62,400,46,752,247,64,211,176,490,106,719,56,764,738,667,227,215,349,151,11,558,316,502,513,833,32,161,243,54,317,153,196,50,21,53,40,365,583,155,923,10,6,587,334,305,483,33,4,369,372,181,136,1,125,119,12,482,130,552,263,57,52,95,123,814,266,84,832,495,645,739,864,96,15,787,472,129,36 }, +{ 73,19,250,27,714,200,444,472,26,34,813,53,390,322,17,283,78,297,106,630,436,113,122,690,123,432,136,128,176,862,161,389,503,684,611,495,80,378,62,42,108,529,14,56,469,57,25,412,236,177,59,47,65,102,6,216,275,3,381,680,235,179,527,605,84,129,383,130,619,183,368,46,255,814,33,23,318,2,789,77,141,13,453,194,245,51,11,445,45,4,152,63,650,269,22,90,64,0,133,440,29,349,40,585,86,678,736,291,95,196,153,184,361,18,210,38,58,803,401,5,117,10,114,358,61,730,249,119 }, +{ 17,21,3,45,62,32,155,119,106,38,5,328,14,828,227,76,2,401,209,123,129,243,270,115,540,29,56,536,46,12,221,488,99,13,629,57,72,719,181,51,552,290,361,136,41,37,514,165,543,152,421,408,84,48,77,308,207,255,90,306,23,263,569,11,454,52,587,162,758,378,4,89,80,754,130,402,236,197,186,440,457,27,383,157,50,1,183,311,832,128,10,794,425,59,576,961,211,741,453,805,790,86,742,496,386,34,313,54,700,600,266,148,659,202,19,94,341,22,880,509,229,240,697,770,670,548,73,177 }, +{ 115,341,873,365,197,13,901,180,569,752,317,1,509,498,10,143,15,4,634,165,268,943,261,5,258,23,237,116,141,0,127,601,244,843,282,253,164,44,12,33,64,860,638,533,219,77,144,9,567,31,134,7,2,352,864,276,160,535,51,206,217,824,125,391,8,28,951,295,11,93,332,201,40,964,844,308,137,6,3,120,531,260,22,36,482,98,177,111,318,474,417,37,170,82,961,291,196,102,169,924,434,203,153,94,954,395,734,898,384,269,242,479,965,735,405,326,30,728,662,617,386,159,24,18,944,401,301,367 }, +{ 453,51,23,33,403,475,421,196,153,102,670,13,117,753,134,40,494,523,4,730,342,0,21,65,59,22,12,880,77,11,86,801,401,719,202,48,28,899,18,805,757,64,14,10,24,128,1,629,457,99,108,57,308,5,2,217,317,139,16,485,569,165,141,36,361,341,365,177,143,125,283,386,120,82,44,9,115,221,7,817,576,300,152,137,124,123,98,61,50,46,32,6,450,111,775,543,488,417,269,197,114,110,95,93,54,35,31,402,34,17,3,911,642,564,561,554,511,431,332,277,261,253,242,239,194,170,116,96 }, +{ 23,13,51,33,12,453,196,117,99,153,134,40,102,403,14,128,202,77,15,401,475,37,139,38,54,11,64,165,421,21,2,0,141,115,308,318,719,328,65,108,670,197,10,46,457,361,269,730,79,1,22,402,28,111,120,95,82,18,3,386,9,389,6,17,283,50,36,24,86,236,114,125,775,5,494,180,4,260,31,94,41,32,899,523,19,210,110,137,59,391,7,326,488,450,351,291,217,177,412,341,93,300,485,477,509,880,377,44,39,30,277,52,221,16,8,961,629,365,203,29,758,133,26,817,350,342,237,194 }, +{ 2,7,14,5,52,29,70,61,112,46,87,592,135,1,66,45,38,16,32,6,186,21,315,290,48,227,24,72,307,113,75,172,425,20,243,58,74,97,666,128,845,631,76,226,155,294,18,738,23,270,25,35,64,141,334,115,0,89,22,50,43,163,151,37,51,171,77,207,69,17,220,36,177,202,19,262,10,13,137,9,90,232,4,54,86,92,263,269,255,278,59,496,655,60,28,95,140,26,106,27,180,12,454,192,148,67,40,209,102,318,33,292,400,849,49,65,324,331,409,405,217,491,311,461,549,476,431,210 }, +{ 33,102,128,202,51,23,141,196,64,153,13,269,318,403,77,117,10,137,134,40,1,5,453,2,6,165,3,0,14,475,86,99,139,15,180,120,12,22,494,402,17,197,352,260,19,7,95,342,21,110,237,65,82,115,93,125,31,36,37,277,18,217,210,9,49,44,25,177,291,326,523,38,450,401,194,32,457,421,285,386,26,28,351,16,111,719,27,4,11,114,48,341,203,300,8,752,98,373,143,730,361,498,57,54,365,317,24,164,961,116,569,108,275,899,50,34,391,45,41,901,96,244,29,629,133,72,509,144 }, +{ 92,16,43,20,126,107,7,35,71,97,14,60,140,246,279,68,18,149,230,121,575,356,375,191,362,24,783,150,118,55,695,566,345,48,0,359,175,173,319,598,298,232,939,22,653,441,167,463,21,414,125,819,467,407,33,69,346,38,422,146,77,446,154,608,28,649,336,172,10,199,102,101,104,168,189,637,251,212,49,314,376,2,124,51,9,595,399,221,23,66,5,392,541,755,196,470,386,13,6,158,117,768,393,147,628,551,493,683,165,67,46,36,259,108,81,1,727,535,364,342,325,672,267,281,674,120,203,153 }, +{ 13,23,77,115,51,33,59,4,177,40,90,64,102,32,141,202,10,128,22,210,291,0,11,21,117,95,137,217,16,318,196,9,180,153,7,197,165,49,28,269,6,342,14,18,2,216,1,237,134,86,98,352,349,203,326,24,403,36,494,31,125,450,120,475,275,15,93,351,341,260,194,386,105,3,247,48,57,365,373,20,372,402,317,457,44,5,139,110,17,35,30,25,12,498,76,144,116,72,39,453,304,19,300,244,208,82,60,401,143,285,65,214,55,38,26,817,569,50,678,551,391,308,123,111,46,854,509,523 }, +{ 507,162,129,211,41,183,38,123,4,248,59,62,57,556,130,99,361,402,305,128,202,11,266,136,17,3,77,803,152,497,313,452,184,210,369,33,40,471,339,56,117,757,157,54,328,229,205,494,381,23,139,457,153,12,403,84,503,257,19,34,65,13,76,514,119,275,37,188,542,14,80,106,440,475,775,318,618,102,21,134,453,300,27,432,64,880,95,89,49,141,86,196,32,529,377,249,73,79,460,177,50,5,10,90,53,619,548,342,94,401,269,179,288,587,961,383,148,114,579,115,477,216,72,45,805,285,291,217 }, +{ 643,123,193,718,650,18,802,65,389,84,415,91,177,25,90,619,256,216,87,289,511,183,736,370,217,324,380,235,108,63,808,500,432,102,249,57,275,194,152,6,673,510,304,862,240,524,355,588,561,397,233,372,13,523,130,81,96,4,0,343,605,141,1,22,103,77,59,283,214,64,789,437,306,630,23,85,153,80,33,475,597,529,210,544,349,196,129,56,291,32,27,847,300,114,889,550,138,86,886,444,269,124,28,26,416,421,280,208,174,70,10,2,814,401,115,19,851,117,42,730,469,352,204,17,202,150,73,51 }, +{ 23,13,51,15,5,1,2,7,115,0,12,6,165,141,21,3,4,457,9,197,180,32,77,14,37,202,217,10,33,120,341,352,11,269,22,8,16,93,569,961,31,401,318,102,247,719,453,308,629,17,365,18,260,403,177,317,901,386,40,48,509,137,752,44,730,28,391,498,72,117,523,128,110,153,59,450,98,494,99,196,36,372,237,30,90,49,475,134,291,326,125,24,210,95,349,89,899,482,38,116,421,468,351,304,19,76,873,82,20,139,57,734,203,86,342,373,546,54,39,437,45,65,817,854,758,922,144,96 }, +{ 51,23,13,453,21,403,12,475,202,165,141,64,128,115,32,5,95,523,125,730,494,180,197,401,899,308,48,120,37,719,386,269,318,817,457,4,99,421,3,326,1,6,237,17,450,2,260,10,19,22,14,0,217,194,18,402,77,221,90,247,15,177,27,25,26,961,59,9,7,758,137,16,670,391,352,117,11,801,312,33,110,82,50,28,241,57,40,351,123,153,49,615,317,291,72,341,210,24,86,54,61,29,196,102,216,93,56,569,31,304,170,98,275,289,46,42,20,629,361,108,58,89,389,283,144,45,84,203 }, +{ 204,74,135,174,192,66,138,85,6,280,353,348,580,172,7,673,97,889,426,500,792,568,95,87,355,32,620,64,712,29,65,91,233,81,232,222,52,448,43,872,25,825,42,104,173,888,22,289,226,63,526,86,387,5,312,636,861,49,90,237,278,2,343,415,194,560,21,0,715,92,38,214,145,140,20,256,835,324,235,330,18,10,750,61,28,75,808,1,4,26,681,288,77,36,24,70,69,58,107,45,874,347,125,14,112,314,33,72,337,102,298,241,294,707,59,729,108,180,37,115,370,40,287,76,48,356,164,117 }, +{ 35,68,149,24,69,0,65,133,103,16,189,9,28,18,50,114,175,336,124,101,1,71,154,46,83,251,14,7,2,55,283,118,230,108,218,238,38,398,345,140,705,75,54,302,443,39,596,22,532,309,335,181,96,361,418,21,399,12,52,394,565,433,412,267,346,109,60,5,29,36,486,236,48,160,375,732,831,545,23,480,487,516,51,220,92,366,86,429,10,13,64,323,328,67,49,252,30,37,330,514,364,212,100,439,547,158,389,95,87,458,194,115,32,646,891,930,246,208,70,641,171,163,6,191,223,722,167,99 }, +{ 101,118,16,71,24,9,18,154,191,212,0,35,60,520,124,68,694,806,167,364,375,252,604,346,55,302,562,628,28,39,149,917,439,126,419,92,65,826,329,100,706,589,166,108,175,265,264,21,1,273,199,109,22,701,48,925,676,49,158,7,150,363,404,10,146,942,5,88,121,815,105,411,14,967,682,67,23,535,69,13,818,566,882,50,777,907,647,429,95,159,51,96,30,12,333,621,31,2,857,848,32,107,140,722,98,575,821,246,37,847,46,382,905,221,677,169,36,336,125,553,695,83,467,593,185,759,114,286 }, +{ 35,16,9,0,68,24,65,1,18,71,149,103,67,189,101,28,21,48,212,114,23,335,486,124,13,51,39,118,167,191,55,154,7,133,238,433,50,30,443,141,96,230,22,100,140,218,60,5,137,64,537,352,115,12,88,330,217,223,75,10,128,399,37,269,49,83,411,202,32,283,175,36,31,221,246,264,98,163,398,2,281,723,375,302,69,166,478,447,125,108,487,180,54,372,317,589,44,99,520,336,181,361,345,418,318,363,177,86,695,341,664,565,77,160,95,545,562,252,70,237,116,752,532,190,72,105,92,14 }, +{ 13,23,202,77,51,128,33,32,115,102,21,269,177,141,318,64,5,217,137,494,291,11,4,10,0,48,22,153,95,210,117,86,90,196,3,15,6,317,2,49,125,349,40,18,12,342,352,9,31,17,247,304,403,194,134,36,16,7,14,450,19,275,98,180,120,1,61,44,372,216,28,341,65,165,221,326,116,76,20,260,59,523,237,365,285,203,24,35,105,453,288,143,386,678,30,351,101,68,60,55,25,817,421,475,96,901,401,367,308,293,99,93,82,39,37,27,752,312,144,615,323,730,58,72,437,859,899,316 }, +{ 16,92,60,35,7,18,68,150,24,126,149,97,191,246,375,118,14,230,107,140,71,273,575,175,517,653,154,566,55,43,298,345,167,399,0,121,28,467,20,108,279,212,101,441,346,302,336,66,423,232,508,48,22,674,124,38,356,608,314,9,21,2,189,199,359,446,49,10,695,46,5,69,1,463,65,815,589,12,172,439,607,755,251,146,37,362,67,392,23,173,6,109,13,722,125,809,702,796,628,36,32,51,95,637,74,135,354,398,52,132,83,29,429,221,407,768,882,105,672,50,64,104,86,271,501,364,535,96 }, +{ 76,90,464,21,179,316,205,288,460,245,32,257,184,148,45,358,152,57,270,48,241,38,449,89,14,2,1,350,769,645,229,155,5,497,221,54,17,524,37,243,12,59,227,405,266,428,4,452,413,308,749,432,50,619,99,720,51,29,292,476,217,11,290,46,157,115,79,188,339,129,313,216,401,381,431,471,171,341,247,77,10,94,106,513,400,3,23,64,317,141,52,7,0,365,773,474,477,72,430,528,36,659,162,369,453,181,62,214,128,33,237,741,186,9,6,281,328,13,202,102,502,349,536,498,177,291,180,372 }, +{ 19,297,26,27,813,80,436,495,17,73,53,250,122,106,200,113,378,390,690,42,4,45,469,361,59,25,742,128,136,161,77,255,202,736,445,605,402,123,862,630,40,63,318,78,383,803,56,11,235,102,283,444,119,527,6,62,210,503,680,14,57,33,148,472,209,129,684,256,84,412,667,611,18,573,85,365,483,0,177,12,3,300,814,153,504,65,22,76,139,61,34,205,133,341,117,64,51,23,13,58,269,152,90,257,10,236,2,358,497,38,432,342,95,47,368,243,183,494,757,453,619,196,184,548,171,714,475,322 }, +{ 6,26,235,138,145,112,19,42,624,122,70,648,27,331,262,85,78,47,25,500,52,632,630,226,113,444,307,644,409,453,29,222,665,163,75,50,849,324,2,65,108,390,294,64,675,53,416,711,130,220,22,34,196,17,73,813,87,32,95,680,14,280,223,852,412,133,730,151,74,237,315,33,86,45,115,66,197,287,241,58,236,153,583,51,256,28,5,114,1,297,283,792,180,4,165,38,90,63,135,102,337,690,250,21,3,171,820,396,546,36,853,889,357,10,183,137,46,200,445,56,475,125,99,461,603,309,117,0 }, +{ 16,7,14,92,24,35,60,18,46,140,126,71,87,50,171,54,9,2,38,5,0,220,108,69,23,230,21,13,246,128,163,70,12,107,394,58,20,68,64,121,155,150,330,309,28,48,22,67,32,10,51,141,267,137,55,314,236,202,146,1,37,281,115,181,502,461,269,189,307,852,232,774,132,97,571,328,75,43,223,65,278,199,52,217,86,820,77,366,335,172,72,112,186,6,409,622,318,99,61,95,103,149,262,49,780,552,177,133,36,227,29,294,462,430,17,334,135,352,572,45,675,563,270,66,33,451,39,180 }, +{ 257,90,205,184,460,769,245,32,179,524,5,45,229,497,288,152,619,21,57,432,452,2,17,292,59,381,266,14,476,1,4,48,106,241,316,358,216,255,29,77,38,217,11,54,155,58,313,64,263,157,425,76,471,12,129,6,227,72,243,148,186,141,3,79,247,37,128,7,339,464,214,188,290,209,207,99,720,519,369,317,177,40,50,115,365,33,710,51,89,270,269,102,221,588,86,46,162,61,202,529,237,291,111,454,94,10,62,372,408,875,23,277,350,618,210,645,349,123,308,19,52,25,180,36,449,352,119,181 }, +{ 15,4,5,11,13,23,141,21,32,40,202,180,1,0,33,269,3,128,17,318,352,134,51,120,2,64,153,117,450,31,326,12,137,196,22,197,102,82,260,44,6,752,165,59,10,49,7,48,177,217,494,57,341,115,403,523,95,901,237,386,457,37,210,14,317,98,351,365,90,56,9,961,203,817,498,719,125,93,28,730,18,110,19,372,116,291,244,678,86,475,615,8,194,76,342,27,45,453,349,36,61,139,96,873,864,216,402,391,111,72,373,16,275,143,285,30,25,247,39,144,300,253,24,922,214,38,70,164 }, +{ 130,711,47,412,108,453,730,196,283,390,78,381,27,183,236,503,472,51,14,200,803,128,153,719,59,250,133,432,34,318,57,73,123,4,114,117,65,17,53,177,33,576,714,216,657,56,378,322,475,46,23,3,529,754,134,369,275,339,19,11,269,12,389,899,291,813,402,650,368,40,603,401,21,444,361,436,266,210,99,457,297,202,480,77,102,54,666,592,513,349,403,129,194,106,894,38,471,0,523,32,739,137,18,22,2,690,136,386,594,152,161,684,678,181,162,548,26,670,141,37,10,184,814,743,421,789,45,629 }, +{ 12,277,51,474,153,111,99,23,37,13,629,961,431,94,569,38,453,542,139,115,79,134,117,401,196,33,40,188,157,89,11,775,457,72,485,15,405,54,4,339,413,300,377,197,477,148,313,328,165,59,734,308,102,719,76,14,45,210,179,21,128,730,152,3,64,17,509,498,386,10,266,880,2,77,32,391,57,482,41,475,0,471,403,304,141,177,898,523,82,18,365,490,205,758,275,5,217,29,402,546,372,488,260,351,341,120,24,202,452,358,237,22,352,873,468,361,6,269,317,216,155,437,162,48,1,229,31,811 }, +{ 495,469,17,378,106,26,27,483,161,862,383,742,19,73,80,527,53,436,814,136,297,84,62,119,611,56,250,25,440,209,113,42,6,122,34,4,255,128,240,14,3,684,200,59,585,129,65,45,29,123,504,57,573,2,5,11,445,361,141,630,61,64,205,179,86,833,76,32,667,690,33,235,202,245,162,618,40,283,680,548,318,472,402,269,503,77,555,102,194,184,108,183,207,95,151,21,152,112,177,514,46,153,887,491,311,803,54,58,257,12,38,10,507,90,648,196,51,176,22,614,306,48,0,229,130,145,1,114 }, +{ 681,636,81,750,91,370,138,718,0,104,348,784,174,397,673,693,18,29,355,192,173,280,74,426,306,65,207,6,701,715,86,319,64,124,671,85,52,32,289,95,510,22,90,511,887,204,343,712,560,879,526,422,240,233,214,7,49,312,40,120,72,77,519,43,24,707,484,4,577,353,42,523,84,63,11,177,27,145,835,730,57,474,643,151,448,756,28,25,10,61,19,21,20,260,415,102,194,888,580,87,861,610,825,33,288,232,193,115,66,59,817,76,45,172,847,17,2,719,457,273,114,26,23,450,168,13,414,302 }, +{ 15,33,77,102,115,117,4,134,153,40,196,11,13,217,1,5,23,317,21,3,365,2,291,341,32,12,59,51,177,139,342,6,0,349,210,7,372,37,180,48,351,111,17,90,569,141,275,36,57,197,457,202,137,72,89,304,14,308,9,120,854,901,898,300,277,10,55,96,64,148,247,961,160,27,165,450,128,437,269,719,352,260,752,38,401,318,523,216,730,734,93,629,76,221,94,482,56,579,18,16,143,253,873,922,453,61,638,179,49,19,22,31,244,498,125,8,697,45,24,817,44,245,403,485,79,326,84,899 }, +{ 9,0,28,68,35,65,101,39,67,175,1,124,154,69,24,22,55,18,16,238,103,30,336,114,12,49,251,109,149,96,50,13,21,51,7,23,252,5,345,100,596,218,158,141,831,418,189,480,532,37,10,166,115,346,2,433,64,323,217,128,137,48,443,88,86,160,36,439,75,237,547,269,202,71,289,866,646,429,118,335,389,364,285,230,317,930,197,352,180,159,143,181,486,503,402,283,99,133,281,95,223,194,498,208,165,168,318,32,60,14,83,4,657,105,212,131,265,694,745,956,54,185,163,484,6,403,77,722 }, +{ 23,33,102,40,51,77,13,403,117,196,153,64,11,128,453,134,137,300,59,291,141,4,10,202,22,475,180,95,57,719,139,99,0,342,86,65,494,90,12,28,9,49,485,421,21,115,114,1,194,901,752,210,177,165,120,108,15,37,18,349,328,2,323,269,899,450,391,351,260,197,125,36,961,523,457,361,48,14,341,958,954,947,922,854,817,758,730,546,509,498,412,365,289,275,236,160,93,54,32,16,7,847,805,576,401,217,962,570,467,285,218,124,105,874,835,775,701,670,629,577,569,541,386,373,372,347,277,247 }, +{ 214,90,289,874,6,65,256,235,64,751,25,42,312,249,194,746,288,875,525,519,247,835,174,85,233,348,544,217,437,32,524,352,343,95,123,138,26,63,355,954,86,122,91,280,630,416,0,177,605,22,204,317,752,648,222,736,141,77,45,579,864,180,74,216,415,304,389,59,597,57,66,306,81,237,287,56,881,588,243,115,84,208,19,445,370,108,498,114,183,87,29,671,4,316,49,283,76,145,275,18,444,205,573,396,240,52,28,112,337,104,10,636,202,624,70,368,11,511,353,33,21,135,102,650,680,137,291,619 }, +{ 1,22,2,28,67,36,50,5,12,49,0,95,14,168,55,7,83,46,103,105,114,69,194,9,38,21,159,584,35,65,239,133,169,109,24,218,23,16,158,208,10,323,48,170,54,51,96,37,160,597,164,13,29,6,18,320,244,708,32,115,892,202,128,503,505,424,185,874,776,253,312,64,347,143,68,75,238,654,137,141,756,31,124,480,301,531,39,181,269,289,824,3,251,835,646,389,361,318,789,52,98,189,797,532,30,638,285,180,165,308,420,99,286,751,127,237,17,283,45,4,175,44,577,125,533,154,72,197 }, +{ 269,318,352,202,141,13,77,51,180,102,349,23,372,291,137,403,33,128,125,197,21,44,31,494,342,317,217,32,402,117,1,365,16,901,475,177,49,22,11,5,116,98,93,386,165,160,153,115,59,40,18,752,253,244,15,14,12,10,7,2,0,4,947,704,692,678,661,615,597,576,473,373,326,208,203,48,39,30,6,90,28,24,498,453,421,127,96,17,961,899,817,474,408,401,350,308,304,285,263,241,196,194,185,169,168,148,134,113,111,101,95,94,89,86,71,64,55,36,35,769,638,569,275,257,152,9,8,968 }, +{ 435,144,274,88,203,418,410,778,190,30,530,960,521,795,686,466,1,321,326,96,367,100,166,822,382,264,692,855,539,131,438,576,335,213,9,265,201,98,613,921,93,615,859,44,31,840,765,403,800,83,772,662,225,744,523,494,284,473,116,957,924,0,909,36,478,217,817,141,28,966,69,934,831,551,137,21,120,731,269,829,219,128,948,669,406,51,639,625,23,5,230,206,39,13,268,77,944,372,110,617,238,260,404,125,716,557,67,856,691,224,32,7,442,349,332,16,805,492,254,242,228,10,704,291,223,35,842,64 }, +{ 76,72,90,179,205,21,245,316,428,288,32,464,184,37,38,257,460,413,148,54,645,405,57,749,45,308,12,358,152,221,431,14,449,4,155,350,229,48,401,50,270,2,59,1,99,5,497,769,17,11,528,524,452,474,266,241,115,51,243,247,10,128,773,477,79,741,432,281,430,217,129,188,77,181,619,292,64,659,157,339,46,313,227,106,23,453,476,720,36,202,468,7,328,743,381,488,216,94,341,141,3,0,498,794,471,197,137,421,180,536,317,403,237,629,490,29,62,482,86,13,6,165,540,369,33,402,352,162 }, +{ 77,102,33,141,64,115,23,40,177,13,51,291,2,269,202,217,6,128,10,210,180,318,1,196,7,14,352,137,197,0,165,3,22,4,153,237,95,117,19,17,59,5,275,15,134,139,86,11,342,125,9,16,317,18,25,349,341,12,36,26,494,216,49,403,31,498,752,27,93,143,111,65,300,24,110,312,28,120,457,391,372,386,44,98,21,247,20,901,164,304,29,82,203,453,402,401,365,99,569,57,719,56,509,475,961,194,260,34,730,678,546,45,116,32,50,48,244,35,38,864,37,308,629,46,450,326,8,54 }, +{ 397,32,788,81,65,693,249,681,90,422,4,804,194,123,21,59,56,348,11,64,23,61,95,91,690,3,725,718,84,319,0,280,152,237,138,43,355,817,174,6,510,57,494,17,523,899,141,114,49,214,52,165,414,370,784,77,526,60,86,51,386,217,74,40,12,904,85,365,102,450,326,208,18,120,945,750,636,343,242,233,115,650,615,5,20,511,342,29,33,887,457,888,524,880,350,263,180,137,133,108,36,24,15,13,222,204,183,177,160,582,532,391,278,135,730,719,289,715,671,597,10,566,421,403,221,218,207,202 }, +{ 126,60,16,314,150,121,199,146,107,92,246,7,132,35,71,359,232,18,24,14,298,392,649,672,423,517,140,441,97,279,508,388,95,653,32,462,877,195,108,21,230,598,607,407,167,46,172,451,5,118,68,22,387,357,38,267,640,55,522,191,28,156,467,360,271,380,594,0,10,953,733,49,48,2,356,64,66,955,633,809,603,273,278,75,149,65,50,1,52,660,783,135,43,12,362,354,674,236,711,212,702,86,309,13,9,115,493,37,330,20,125,36,220,312,241,54,501,324,101,87,29,345,23,90,550,928,446,77 }, +{ 217,15,141,115,317,365,341,13,23,260,51,137,120,202,77,372,180,33,349,4,269,352,64,102,40,1,110,373,450,291,197,21,32,36,160,117,244,752,318,128,5,854,351,0,11,922,59,247,134,661,9,304,10,901,165,12,153,22,457,177,143,96,253,28,86,82,48,523,2,196,730,494,57,90,811,49,403,7,326,237,16,83,3,8,18,437,125,39,817,30,72,111,139,55,37,17,961,898,498,899,308,719,24,475,386,76,164,35,717,288,873,704,6,89,221,569,14,642,391,241,203,67,56,509,210,285,95,342 }, +{ 111,134,117,474,23,13,961,569,12,431,51,37,115,99,277,15,405,38,197,89,72,629,148,457,76,54,4,45,165,11,139,94,719,498,106,59,873,14,79,128,40,10,196,33,482,3,17,179,188,2,64,413,730,775,245,177,153,205,471,57,509,477,401,358,453,0,403,6,485,22,5,152,304,1,180,402,275,475,300,341,901,36,880,339,237,210,82,141,386,32,110,7,758,120,452,77,365,317,260,129,391,31,95,202,308,46,864,542,523,8,757,86,18,44,752,217,162,93,65,734,437,497,421,678,269,229,546,285 }, +{ 23,13,51,5,202,21,32,1,12,2,141,15,165,115,269,7,4,453,197,403,318,6,48,120,9,0,3,386,128,64,180,14,125,37,475,308,401,137,457,16,10,99,18,450,260,196,523,33,352,237,494,730,719,17,77,11,421,341,326,31,22,40,221,102,8,391,90,24,82,217,30,93,59,117,177,153,351,365,28,19,44,110,899,98,317,569,39,72,61,629,961,817,49,134,509,57,498,247,76,20,29,402,45,27,203,38,36,96,752,89,241,50,56,373,144,25,304,758,86,291,46,54,65,35,349,116,901,576 }, +{ 13,141,23,5,115,202,4,51,269,352,217,11,2,318,180,137,317,21,7,341,77,3,6,32,197,752,33,1,291,12,64,372,10,365,128,9,102,22,0,165,403,40,15,349,494,498,482,48,308,177,901,31,28,16,37,873,44,237,14,49,125,153,247,18,244,98,30,59,453,120,143,55,401,475,304,36,39,457,342,93,17,72,95,221,24,196,35,117,134,253,86,90,509,579,76,116,203,864,326,961,576,569,210,717,523,859,144,421,678,160,8,719,110,127,216,89,391,260,468,730,65,386,629,450,437,805,164,105 }, +{ 165,125,391,197,21,13,558,380,23,48,386,237,900,221,66,509,180,14,326,120,457,33,32,357,115,961,97,426,401,298,135,278,308,719,51,98,758,841,172,75,38,56,12,6,571,204,770,74,19,72,554,867,629,408,393,77,670,64,63,25,10,1,42,498,462,134,40,7,563,247,102,715,773,90,31,763,324,808,494,451,523,450,317,293,244,210,177,43,29,20,171,22,572,501,681,582,350,743,615,365,335,262,217,203,105,87,69,490,482,641,370,26,11,81,73,65,53,4,579,192,963,367,342,267,260,241,239,216 }, +{ 120,82,260,450,351,15,141,21,854,77,217,13,23,51,1,202,817,180,33,898,110,48,326,93,102,32,128,137,5,165,523,269,352,318,125,291,922,2,177,203,275,403,317,4,210,12,373,494,115,64,197,96,386,7,144,0,342,196,36,457,752,37,349,453,9,6,16,221,50,237,615,59,10,475,341,14,372,730,244,18,22,223,285,160,67,365,86,498,661,421,402,401,31,901,308,719,391,70,3,99,35,44,24,95,90,28,473,899,69,30,65,864,704,116,11,29,8,83,367,17,163,49,551,304,961,216,61,692 }, +{ 23,51,13,15,961,0,2,10,115,1,457,5,569,453,4,7,9,719,14,33,629,11,165,40,197,6,77,21,64,3,474,139,38,401,59,22,72,57,102,12,111,475,32,79,341,730,386,128,54,37,509,177,17,8,196,391,36,237,141,202,277,18,89,148,76,99,734,28,758,308,41,117,498,180,90,403,873,365,482,31,45,328,94,546,48,153,86,210,93,317,24,468,494,247,304,300,269,82,16,95,402,120,670,134,46,488,757,194,110,55,62,125,155,29,188,52,405,49,899,775,50,275,221,880,477,44,152,523 }, +{ 264,166,435,9,39,254,30,382,921,404,438,363,656,190,100,897,411,478,93,203,812,274,625,1,795,691,88,156,101,473,326,110,265,639,340,51,447,272,141,18,35,165,131,33,329,67,0,354,77,910,616,291,914,530,105,68,118,197,731,137,120,23,21,578,128,36,333,49,593,494,271,98,676,310,102,44,664,613,48,349,28,228,195,5,960,658,800,180,24,724,96,682,678,403,160,688,523,127,829,242,521,83,31,716,13,342,159,69,16,144,260,352,32,269,55,167,158,219,576,364,704,4,615,202,65,60,318,456 }, +{ 252,9,0,166,265,100,364,329,404,39,101,520,676,419,68,118,553,604,382,88,167,274,18,212,593,333,158,264,16,49,806,865,438,48,812,21,154,30,677,310,1,35,656,24,96,124,51,857,22,13,23,105,28,60,31,71,286,562,65,777,435,455,190,98,639,159,759,109,917,254,344,191,647,125,10,55,907,694,363,221,44,127,5,557,131,327,682,411,67,628,95,83,538,936,149,925,272,36,664,175,375,478,121,64,793,146,821,50,671,69,302,271,921,116,625,541,942,446,530,724,709,706,33,634,463,170,128,223 }, +{ 15,4,11,141,5,13,21,23,202,40,269,32,12,165,523,3,180,64,318,17,352,457,197,1,93,0,110,2,125,120,128,386,51,59,77,31,117,326,49,10,719,403,961,82,153,48,137,134,899,450,115,260,494,196,44,33,37,730,6,57,203,817,177,752,22,98,9,90,18,373,237,8,7,217,958,351,291,14,139,95,341,144,27,210,475,615,402,391,56,453,901,116,19,143,86,349,244,317,72,105,498,123,485,365,111,152,342,401,76,28,30,247,678,801,65,45,216,36,569,300,308,509,221,99,127,84,164,873 }, +{ 24,35,69,18,71,68,46,67,16,1,2,50,14,149,108,133,189,28,38,75,83,0,7,9,218,65,238,114,52,335,29,54,251,60,55,309,236,175,118,336,486,267,96,394,181,220,366,87,418,124,154,5,545,412,516,140,70,22,487,12,21,36,101,171,433,641,230,328,58,48,458,345,361,398,283,92,6,37,103,514,302,906,10,388,596,565,273,443,64,160,532,163,399,705,223,891,86,150,262,537,32,51,39,831,23,109,95,375,155,13,99,480,571,45,49,128,281,696,112,194,754,25,137,294,602,208,323,191 }, +{ 90,214,289,874,64,712,751,77,51,13,177,32,312,23,192,66,194,202,216,59,288,4,835,875,65,0,249,247,95,519,102,57,5,123,33,22,524,234,104,450,173,49,437,500,889,210,217,636,319,597,21,153,416,196,38,20,117,954,304,115,134,120,18,715,86,583,113,494,61,204,10,784,291,28,275,342,147,318,879,43,74,142,11,588,888,403,864,237,2,198,352,426,752,707,48,1,639,17,81,180,750,861,52,315,207,560,24,128,402,40,141,16,671,31,372,36,130,455,260,12,9,317,37,325,349,389,904,306 }, +{ 9,0,49,127,28,301,98,371,395,159,512,158,916,737,761,31,101,24,623,16,272,68,18,39,35,293,242,1,286,109,44,385,327,65,170,299,55,125,51,23,22,518,105,836,21,116,616,137,685,284,48,599,344,252,7,124,13,276,64,187,95,506,5,131,890,202,456,627,36,2,219,30,254,333,419,763,14,347,12,154,578,320,96,713,141,935,201,144,338,442,870,118,71,128,10,364,168,374,67,60,37,310,221,100,32,318,424,93,269,393,910,165,403,86,688,160,793,908,50,83,69,203,421,492,401,6,244,166 }, +{ 17,136,62,214,123,129,249,710,119,162,618,292,209,141,32,183,77,128,211,106,64,45,4,11,179,269,507,519,207,59,177,130,3,40,90,86,255,378,33,202,76,57,205,655,790,152,678,38,21,245,37,742,248,5,102,597,476,306,556,41,291,229,117,349,80,339,153,313,266,318,84,54,947,184,56,12,155,134,240,197,305,157,304,217,148,186,165,275,257,789,99,216,13,497,317,72,137,115,10,196,460,383,619,61,51,188,361,457,369,425,50,290,440,14,342,263,180,503,452,241,208,237,194,432,381,65,111,22 }, +{ 5,107,581,441,356,493,362,660,279,534,32,683,298,423,259,786,22,612,590,359,21,13,49,147,61,508,241,263,929,48,97,246,14,126,0,132,7,465,939,232,64,230,607,95,121,941,23,92,771,115,470,314,51,387,626,172,1,58,12,347,779,392,407,17,150,687,16,357,28,146,43,77,87,60,199,197,37,40,711,178,501,65,10,9,180,140,35,33,24,595,102,120,56,30,70,207,344,324,125,46,31,165,18,20,577,414,376,2,350,4,260,427,173,408,195,141,247,76,603,217,86,11,379,55,729,90,75,50 }, +{ 51,475,453,13,23,15,730,403,457,421,386,523,899,719,670,401,12,361,6,99,33,1,128,269,961,141,27,19,5,494,165,21,64,2,450,153,202,117,65,115,236,7,196,77,95,32,328,37,14,10,0,318,134,17,391,197,102,308,40,26,120,9,22,4,125,412,389,16,34,194,57,569,402,54,53,8,352,25,758,291,59,3,880,757,503,488,217,90,38,72,48,45,801,177,11,304,509,326,283,260,180,139,137,76,47,41,867,350,629,558,949,838,832,803,775,773,770,754,749,657,597,576,543,514,468,297,255,250 }, +{ 49,159,272,28,9,327,254,158,22,347,95,627,374,286,131,424,105,168,35,39,912,65,68,578,688,0,538,55,24,518,175,154,124,239,634,346,289,224,169,913,577,16,320,364,747,219,185,616,101,716,67,344,1,890,570,170,30,810,109,333,228,420,21,36,439,64,149,23,127,371,194,13,706,827,125,51,114,312,83,187,98,429,613,10,137,829,610,86,310,166,910,31,835,190,406,71,18,242,202,846,141,938,160,44,14,2,385,69,7,48,308,301,258,128,638,237,115,12,165,96,100,103,562,703,221,116,164,50 }, +{ 15,33,77,4,102,317,341,141,117,365,134,13,180,1,40,153,5,115,23,11,197,10,217,196,21,901,22,64,752,352,143,253,244,351,137,51,32,2,269,177,82,59,165,12,3,291,569,202,120,0,854,139,342,86,55,36,372,31,9,898,48,498,349,37,260,7,28,111,125,17,482,49,318,160,457,6,450,44,128,90,275,237,95,210,57,386,873,638,98,523,105,164,89,93,30,719,922,961,509,308,8,14,72,951,403,401,730,391,304,116,326,39,468,56,38,717,94,24,579,817,76,61,96,16,18,546,629,494 }, +{ 134,13,15,23,12,474,569,51,37,10,197,457,961,99,115,4,38,2,165,0,153,5,3,11,719,64,139,431,1,277,120,82,33,6,94,873,14,401,110,7,89,117,351,40,498,128,260,148,54,93,72,629,453,180,21,31,22,9,405,143,141,8,17,77,36,102,44,386,41,509,196,59,450,125,730,55,342,523,86,403,326,45,95,898,98,32,854,237,365,217,391,775,116,349,291,210,179,203,202,317,752,901,372,341,352,177,402,49,57,76,922,475,28,30,144,373,421,318,308,269,90,494,413,46,18,678,899,242 }, +{ 7,2,66,20,58,29,52,74,128,14,135,5,32,97,192,43,38,61,6,631,16,151,87,21,25,315,172,177,46,48,173,186,45,884,70,90,113,77,227,72,226,23,102,51,137,35,210,337,202,59,40,104,402,155,115,269,89,592,81,33,122,13,60,174,112,107,24,19,243,0,145,222,580,76,37,49,64,10,416,318,738,18,353,204,26,491,678,95,4,290,141,54,232,69,92,22,415,140,712,270,217,12,171,496,86,220,27,17,549,294,209,1,355,609,494,425,285,50,665,148,403,560,36,216,400,75,275,307 }, +{ 77,202,13,23,128,318,33,269,141,102,403,117,4,342,153,134,51,40,64,196,32,0,49,177,22,494,291,137,11,21,59,65,95,475,98,165,210,90,18,115,48,217,197,15,275,105,10,120,127,86,28,180,9,453,352,36,39,317,31,125,5,194,402,57,450,349,372,14,116,44,16,300,6,2,284,96,24,20,30,457,12,859,678,299,289,242,114,110,109,61,7,1,216,214,100,326,304,260,237,3,82,789,752,579,576,490,347,344,293,207,205,144,139,93,37,615,373,351,285,421,401,961,391,203,817,923,922,901 }, +{ 2,14,1,46,29,38,6,52,103,50,65,36,67,5,108,75,83,7,22,24,25,69,28,86,208,133,0,323,19,26,484,18,309,782,96,283,236,238,124,160,135,21,10,12,74,87,66,168,17,262,70,412,23,389,16,51,650,278,289,532,45,194,3,756,218,32,220,58,646,244,42,115,95,37,27,13,48,886,49,267,366,226,302,128,54,610,64,516,547,584,137,253,9,308,143,388,141,717,335,480,401,164,185,357,505,109,150,732,602,420,99,285,172,202,891,112,189,324,181,35,418,696,331,90,114,55,294,458 }, +{ 15,5,1,2,3,4,12,11,13,10,0,341,21,180,7,33,197,6,134,17,77,32,365,23,901,37,117,9,8,40,165,102,153,961,51,498,196,569,14,873,752,217,22,94,64,317,59,36,352,474,31,509,99,141,110,55,291,111,457,120,391,57,19,16,82,48,177,401,38,386,349,202,308,139,93,342,453,72,275,18,44,143,351,28,27,90,128,403,269,372,45,137,76,260,318,89,326,210,86,277,898,413,237,719,148,864,730,96,95,79,373,475,61,24,46,30,523,253,98,482,83,546,54,49,50,41,899,758 }, +{ 203,268,206,940,93,417,959,499,473,137,31,44,728,692,8,120,202,559,564,450,127,141,260,326,817,244,22,10,0,23,551,318,144,125,13,523,269,128,299,98,1,253,373,51,494,403,9,116,341,143,64,110,638,285,5,615,642,859,367,55,918,576,21,421,180,386,922,165,105,36,401,2,365,115,899,242,352,28,951,393,704,86,30,901,475,7,762,276,77,384,948,237,32,197,49,492,434,160,661,489,170,15,39,752,317,498,854,453,282,717,6,18,16,569,395,479,351,805,12,958,898,456,48,293,851,308,301,509 }, +{ 15,120,82,10,165,31,0,197,64,260,33,8,93,110,22,351,40,44,77,23,153,13,9,102,4,51,196,125,326,11,450,49,139,28,237,203,386,98,457,18,32,373,95,523,1,21,277,59,854,180,111,202,12,141,898,17,36,116,144,14,115,922,86,57,128,5,45,30,2,391,217,7,817,37,177,730,90,509,719,72,99,16,76,62,453,291,352,475,318,269,403,341,48,134,961,55,24,3,143,899,308,401,137,65,38,615,210,629,317,901,758,342,569,494,661,365,39,247,164,421,704,546,61,6,811,41,642,752 }, +{ 60,7,16,71,43,0,14,20,28,97,68,22,92,24,149,2,35,10,154,13,126,615,608,51,124,362,140,55,805,18,958,576,566,175,23,359,6,1,48,453,158,150,703,21,421,260,173,475,298,153,107,74,64,36,29,925,46,12,882,899,441,801,81,357,246,196,77,69,38,25,9,117,65,49,314,37,484,386,730,336,115,570,403,356,324,221,135,121,19,401,99,939,420,399,859,942,628,610,289,285,259,125,101,95,33,26,702,677,165,4,653,375,185,192,91,515,302,197,104,326,595,318,230,202,191,143,102,90 }, +{ 26,19,6,27,80,25,84,45,17,5,504,42,129,2,240,123,618,29,56,106,113,710,4,76,119,128,14,136,65,64,73,59,1,209,483,53,162,51,90,548,122,205,249,202,40,99,3,460,32,257,62,292,61,214,77,245,57,12,378,141,183,453,34,297,11,184,108,23,255,469,0,403,22,33,58,95,10,86,814,318,769,114,179,402,611,667,130,475,21,151,210,137,742,161,38,177,494,7,436,269,102,194,115,445,18,36,421,13,47,153,880,775,54,133,196,37,49,495,306,311,112,46,52,117,250,28,491,48 }, +{ 15,77,13,33,4,23,102,11,51,5,40,177,0,117,10,202,64,8,93,22,291,32,21,44,31,153,110,1,141,49,115,59,82,180,9,17,318,196,98,269,351,403,137,453,36,95,457,217,3,90,139,128,48,28,898,12,165,450,475,349,341,197,523,18,30,210,317,86,16,260,401,2,961,901,719,57,116,494,854,326,373,125,365,817,352,730,275,134,39,386,105,76,24,7,308,372,37,342,6,421,120,704,144,14,899,922,203,111,304,569,638,72,661,61,629,96,127,99,811,535,498,65,615,752,247,83,402,758 }, +{ 195,271,98,223,167,132,407,146,360,591,1,212,834,121,522,393,293,199,259,354,446,668,590,562,807,191,156,48,765,125,107,147,941,163,727,541,535,465,126,284,21,346,31,279,23,55,18,5,687,16,60,640,13,697,586,178,534,35,20,608,581,150,955,427,68,70,589,43,142,791,463,198,116,51,883,362,9,963,781,202,49,0,818,96,493,7,948,281,120,165,367,798,450,10,44,318,77,105,14,325,221,92,28,22,61,770,101,777,58,93,32,97,467,141,386,33,144,371,75,127,37,108,929,269,411,598,551,128 }, +{ 210,128,202,77,402,318,102,403,33,342,275,40,196,475,6,300,139,29,177,99,494,269,42,503,111,757,277,141,117,52,2,4,678,13,153,12,0,23,59,285,37,137,85,81,7,291,859,657,351,122,82,576,44,31,880,260,216,120,91,78,63,14,11,1,745,65,64,93,854,27,684,22,485,180,76,74,19,3,21,805,49,38,281,48,966,838,631,452,450,421,218,134,26,25,569,341,115,898,738,592,110,98,10,315,788,707,491,483,432,396,319,268,242,125,116,95,62,57,56,50,17,16,9,655,526,453,426,422 }, +{ 40,33,102,23,51,13,117,196,153,77,134,64,128,202,4,59,141,453,65,475,11,403,22,95,0,137,14,139,15,342,210,12,86,318,269,165,115,1,49,10,494,177,28,180,36,291,421,21,57,5,6,217,18,194,99,401,2,457,108,719,125,19,111,260,82,37,27,48,17,3,523,197,133,26,402,120,114,670,352,7,24,730,93,216,90,46,237,50,32,386,361,9,341,351,25,349,300,283,277,38,34,901,365,326,275,98,110,285,45,41,391,44,317,576,961,242,143,16,509,170,31,854,308,54,116,817,757,629 }, +{ 7,14,16,24,18,28,71,2,92,60,35,22,20,0,154,118,168,6,1,97,69,703,302,149,140,150,185,38,109,43,66,68,108,420,29,55,10,158,610,12,65,67,5,701,189,273,570,95,230,429,46,124,246,289,298,51,21,169,143,49,175,23,107,747,126,671,13,64,48,159,25,925,677,137,36,52,398,32,9,251,584,467,164,128,942,19,86,577,847,83,173,336,403,74,50,424,202,232,882,172,17,344,279,638,375,105,314,104,37,125,115,441,356,505,99,253,239,26,221,359,329,194,533,837,517,165,494,601 }, +{ 23,1,15,51,2,13,5,0,7,180,21,9,6,115,197,120,12,165,4,33,457,386,523,202,141,3,14,260,450,48,8,16,77,93,31,341,37,269,40,403,44,730,110,326,32,102,317,137,318,453,352,719,365,18,128,217,153,82,475,36,98,64,391,752,401,901,899,421,308,196,11,498,22,28,351,99,116,10,117,24,817,96,221,30,39,494,509,569,177,203,49,961,144,291,373,615,59,17,801,372,482,72,758,90,89,854,50,629,134,127,35,86,349,922,160,55,244,105,237,143,468,898,210,54,46,670,342,45 }, +{ 132,146,199,107,60,121,126,279,150,441,92,649,16,955,493,195,598,423,653,298,35,407,356,640,362,508,32,21,953,7,360,359,522,18,271,783,5,246,167,0,660,156,534,939,71,191,22,517,590,24,49,259,314,10,607,28,392,13,232,147,68,97,95,14,43,883,118,1,37,581,48,501,354,809,55,108,4,591,12,20,23,347,345,212,467,230,446,241,125,50,941,75,9,31,98,683,929,77,2,672,33,713,463,702,273,61,40,59,70,46,101,58,172,586,357,296,115,779,36,350,109,727,388,236,207,87,105,408 }, +{ 31,44,276,284,98,299,935,116,201,662,9,39,492,144,489,131,567,371,268,0,49,918,127,137,367,254,28,434,293,737,30,203,1,295,22,456,93,125,219,385,23,202,187,393,21,716,105,599,578,51,36,128,141,836,272,269,244,318,384,13,159,395,48,261,96,110,224,616,326,242,35,16,253,5,95,55,64,160,258,158,143,18,100,699,165,24,115,948,120,37,403,86,166,310,12,924,457,855,940,77,10,442,494,101,109,7,197,317,206,68,2,373,617,761,352,285,908,217,332,341,916,228,32,33,518,688,730,473 }, +{ 13,15,23,51,1,0,10,2,4,115,77,5,9,202,3,197,457,7,22,11,165,6,961,12,33,14,59,177,403,21,102,40,453,180,719,217,18,31,120,141,32,475,8,318,569,37,16,341,210,17,386,450,401,28,269,64,99,326,494,317,730,308,44,523,93,352,291,90,125,365,260,36,275,24,134,49,139,30,110,498,421,98,57,196,391,19,117,72,342,153,48,817,873,349,482,901,221,629,76,237,111,899,86,95,216,509,752,304,137,247,82,372,116,758,89,27,38,39,65,203,55,402,45,29,373,300,143,615 }, +{ 162,123,257,184,183,17,229,130,84,136,497,556,152,383,129,452,99,80,3,205,62,57,56,266,106,119,12,128,40,4,161,378,27,14,495,504,381,202,769,469,249,59,77,432,11,34,33,305,64,90,403,240,38,54,5,102,45,32,23,73,618,475,51,361,440,139,775,37,402,471,318,53,21,494,65,141,19,372,453,313,421,177,880,472,757,217,245,548,250,527,2,76,524,349,61,86,216,153,210,196,115,179,10,619,328,269,291,214,72,483,117,209,6,26,22,477,111,95,13,401,114,157,369,211,36,134,48,306 }, +{ 196,153,117,453,134,33,40,23,102,51,13,475,0,14,22,15,12,2,64,670,21,401,730,4,18,99,65,10,9,11,1,28,95,57,128,77,5,38,46,37,403,386,202,719,24,6,108,457,899,139,31,59,16,82,36,165,32,120,961,86,236,48,8,342,141,775,125,308,137,7,54,523,50,269,197,494,318,115,300,260,39,758,450,180,421,277,90,217,341,629,361,49,3,326,114,93,391,291,210,194,328,317,111,17,352,558,110,377,29,275,283,133,485,817,898,615,801,351,160,19,488,569,350,373,109,84,56,183 }, +{ 224,219,187,258,442,871,908,385,836,131,944,574,839,127,98,613,31,116,926,44,137,829,860,160,827,276,39,254,284,36,144,228,201,96,406,1,371,530,202,856,716,93,30,51,9,203,268,737,902,492,23,49,21,190,13,318,843,531,326,269,924,125,367,141,64,77,120,166,816,935,800,242,299,115,456,260,293,274,931,494,395,567,110,217,662,5,317,22,717,100,143,434,128,28,48,86,533,10,295,105,332,55,489,180,365,918,418,102,578,197,244,83,341,576,403,384,625,165,261,177,159,352,291,822,863,473,251,206 }, +{ 195,121,360,590,146,407,156,786,522,132,883,591,626,929,941,259,687,279,379,586,296,465,467,150,178,354,5,21,55,534,70,60,783,771,13,346,340,48,271,581,49,493,163,1,199,147,608,668,125,955,167,562,535,98,518,108,362,18,371,212,446,107,761,878,31,126,50,463,35,818,105,75,120,598,87,0,767,223,165,640,22,447,293,777,159,16,23,9,142,115,658,92,481,44,95,37,807,93,61,58,24,191,33,7,846,395,12,197,4,385,127,423,71,140,82,427,144,116,17,117,2,363,698,246,39,64,32,781 }, +{ 2,1,29,14,6,46,52,26,75,38,5,25,19,50,96,70,108,114,309,36,103,74,17,65,27,112,45,262,236,220,145,218,58,42,86,516,24,366,22,7,67,21,12,66,532,87,412,18,480,283,602,323,137,3,163,226,238,0,194,51,32,28,10,69,171,37,23,115,208,128,331,394,135,48,99,64,13,433,285,160,61,782,113,357,308,222,95,484,401,16,141,294,151,287,223,83,646,124,389,361,894,866,545,421,54,324,4,278,388,396,186,650,594,53,168,453,289,202,59,253,181,90,273,138,150,403,756,606 }, +{ 15,82,120,10,197,260,0,165,351,8,64,31,110,93,9,22,117,13,457,450,1,44,33,23,326,102,49,125,898,153,719,77,854,523,18,14,98,12,40,7,961,2,115,373,180,5,51,386,36,111,141,95,730,28,196,922,139,203,55,116,4,817,498,899,128,30,177,86,569,144,661,99,37,202,16,24,65,318,21,873,11,59,6,277,217,391,269,341,38,32,291,143,237,352,210,317,3,365,509,474,349,758,704,642,216,39,615,137,453,275,403,401,94,300,304,629,247,372,242,342,90,48,752,901,801,308,221,811 }, +{ 7,66,97,172,232,192,226,2,74,324,52,29,135,92,568,222,43,107,353,87,387,580,500,38,620,448,331,526,140,330,5,138,294,174,356,20,14,262,298,32,357,145,173,853,6,359,21,126,58,16,204,808,64,888,337,104,314,673,35,22,729,95,872,25,278,380,70,802,37,583,426,1,49,12,112,69,75,65,86,61,45,60,48,10,246,90,230,0,42,355,24,220,415,85,81,889,46,885,36,825,287,28,194,72,171,792,392,632,560,280,312,50,71,115,76,54,26,18,151,155,707,587,89,17,4,764,147,59 }, +{ 62,129,123,162,183,507,618,136,249,152,211,57,77,184,205,59,130,4,128,41,11,40,117,17,229,497,361,257,3,33,38,313,452,266,378,248,153,64,106,90,210,383,119,12,328,214,99,432,216,157,196,86,202,556,179,54,102,80,37,381,402,471,134,245,177,5,514,369,188,339,440,305,275,524,141,45,269,84,710,529,291,403,139,342,115,56,318,209,76,504,421,372,742,619,292,240,237,79,27,14,775,22,19,10,23,457,95,21,207,488,13,494,180,542,65,300,401,306,32,34,114,26,215,25,217,769,151,110 }, +{ 13,1,4,5,2,23,115,15,3,51,6,0,7,77,341,217,11,141,177,33,317,12,180,21,365,197,202,32,318,352,269,102,901,9,291,10,165,40,403,752,59,22,8,31,401,569,349,494,120,308,304,44,110,90,17,386,64,93,37,247,153,210,326,14,450,28,373,117,16,372,48,196,457,260,98,275,475,498,237,453,125,30,18,203,523,342,49,509,391,36,961,128,873,134,719,116,629,24,482,421,39,221,216,139,244,72,730,253,95,817,55,86,143,615,57,661,351,704,144,127,899,105,76,864,576,82,922,758 }, +{ 6,26,235,145,19,47,112,78,648,624,630,27,85,64,42,95,122,444,25,644,113,70,108,453,29,632,130,711,53,222,74,390,32,65,237,412,416,280,665,287,813,138,730,307,73,680,283,14,196,52,34,4,312,51,236,226,90,262,17,337,22,180,59,331,500,128,86,884,315,194,690,114,133,498,849,137,50,200,3,256,21,2,49,45,33,23,13,66,141,409,445,297,288,57,381,719,11,396,289,247,87,163,165,1,250,5,46,115,153,525,99,183,76,746,324,63,792,675,294,316,56,214,28,583,751,125,285,503 }, +{ 51,23,99,12,15,13,153,10,117,403,120,37,82,165,128,453,401,64,202,197,2,115,110,14,260,457,21,475,5,308,0,38,93,719,31,3,22,134,141,1,33,196,386,180,351,17,421,569,44,326,125,523,961,11,730,269,137,402,318,450,4,494,8,49,36,9,98,18,7,95,391,6,54,629,328,32,237,28,40,19,86,775,373,57,116,41,854,77,79,59,899,352,94,474,102,203,509,477,65,758,89,341,285,221,901,217,111,177,16,361,144,30,880,757,498,46,29,27,670,105,898,143,24,62,72,277,317,55 }, +{ 16,24,71,18,92,108,35,60,146,64,7,118,246,199,126,121,32,50,9,267,649,156,167,830,271,133,273,140,36,68,5,230,132,247,21,14,1,640,12,563,48,0,87,388,75,2,237,220,330,86,46,354,115,65,672,304,128,55,751,522,180,360,95,28,236,191,516,114,163,696,149,953,189,22,54,565,141,51,137,217,674,412,352,49,340,23,633,37,309,458,202,39,10,394,58,103,70,597,125,262,72,38,947,726,591,502,437,195,164,363,67,641,514,602,954,124,864,448,107,150,143,101,366,283,13,678,317,177 }, +{ 15,2,0,13,1,4,3,5,23,7,217,6,9,115,51,8,341,10,11,317,372,180,365,77,33,12,22,247,901,18,120,197,457,14,16,165,291,28,21,202,31,349,961,719,102,260,32,453,30,352,523,40,752,569,730,24,82,450,304,308,110,437,93,117,44,177,36,351,196,403,64,17,318,475,153,899,134,269,494,922,401,386,128,48,482,316,326,37,137,49,57,873,125,39,854,59,55,509,90,579,342,35,817,629,758,373,210,98,498,237,898,116,65,111,144,139,615,19,670,241,20,56,638,468,89,95,275,801 }, +{ 234,639,178,416,77,455,5,49,142,202,450,427,0,147,329,21,198,315,61,557,344,13,113,32,318,120,22,23,325,48,259,534,494,105,95,347,518,798,39,884,159,58,481,99,817,623,878,291,112,711,70,64,17,1,31,320,51,265,158,65,465,128,362,192,137,236,845,260,403,44,310,141,196,342,177,30,7,271,241,195,135,269,28,290,210,929,15,4,307,170,125,663,102,33,275,263,132,859,408,294,194,786,581,402,301,153,86,523,98,150,423,346,167,25,237,415,36,858,682,592,352,117,100,12,37,10,709,146 }, +{ 31,1,44,36,116,64,55,5,180,2,22,352,98,86,127,141,12,164,13,498,125,115,144,253,170,4,242,137,752,197,128,105,7,244,0,160,237,23,341,21,165,9,365,299,901,301,3,951,317,10,6,28,864,51,338,269,15,268,844,83,169,217,202,873,638,93,569,509,96,824,546,8,37,456,740,293,512,203,77,395,479,318,206,14,776,599,95,506,33,367,276,11,48,685,954,285,239,457,535,201,492,762,717,401,965,533,102,393,482,208,49,109,391,601,558,489,67,870,284,947,961,403,708,946,35,434,923,40 }, +{ 120,217,260,141,23,77,13,51,317,1,180,269,15,115,202,450,137,110,373,291,21,352,64,349,5,177,82,326,351,48,318,854,341,36,365,304,165,197,0,32,922,372,128,96,9,93,752,12,22,523,160,10,2,244,7,457,4,28,898,386,86,901,661,498,719,33,16,275,90,247,203,143,11,253,482,40,37,83,403,730,494,102,50,18,961,615,473,221,237,8,817,30,968,125,704,216,39,59,14,67,6,117,210,35,49,95,72,342,308,24,89,453,55,134,475,76,69,116,17,61,31,3,437,864,70,899,576,98 }, +{ 26,396,648,6,112,122,624,145,287,19,222,416,42,25,573,138,74,651,644,151,66,113,445,45,85,665,280,29,525,204,64,174,337,680,87,884,135,53,65,70,436,27,95,58,297,881,194,73,80,746,544,235,17,86,2,90,243,32,22,5,128,1,609,353,311,141,61,315,307,491,226,106,0,52,81,813,614,209,255,7,632,75,114,10,36,186,580,415,289,63,611,14,34,33,49,214,28,792,117,250,312,283,77,125,172,108,389,76,192,208,355,237,667,56,4,91,165,294,40,348,148,635,102,123,256,153,46,549 }, +{ 156,360,522,271,146,354,21,446,121,132,5,463,591,340,195,727,586,18,48,407,13,49,167,32,668,60,199,566,23,16,447,698,955,575,9,658,296,493,608,150,126,0,534,35,24,581,92,71,590,363,107,279,141,125,640,31,212,4,929,411,467,562,10,1,51,115,783,165,191,22,623,68,598,379,61,12,293,273,202,95,197,303,163,663,269,108,37,101,221,118,621,391,76,28,17,40,109,7,767,260,55,518,120,33,11,77,259,39,347,941,44,252,713,478,98,140,408,350,93,626,346,264,900,509,818,30,170,763 }, +{ 21,5,61,49,98,23,95,32,612,178,259,51,182,48,13,481,120,77,683,660,427,291,147,64,70,4,465,33,344,269,241,0,17,767,318,263,202,141,107,415,817,450,180,22,534,392,362,125,116,347,11,929,350,121,595,408,423,352,293,260,196,165,117,105,102,87,86,59,37,18,7,3,557,376,845,663,579,541,490,356,316,115,90,163,928,711,28,132,590,407,941,922,704,645,523,360,346,284,268,232,210,203,195,177,144,134,118,97,65,60,40,16,1,298,153,146,58,937,798,414,113,31,771,246,207,142,281,647 }, +{ 468,89,358,79,365,94,179,205,317,405,482,498,245,72,115,341,217,180,413,490,111,734,247,431,188,216,37,474,152,452,11,629,569,873,752,749,497,197,4,339,308,13,12,59,901,428,864,579,40,76,23,372,291,875,10,352,134,961,117,77,542,528,401,51,588,349,471,529,33,464,546,477,645,139,221,1,377,38,21,99,36,177,509,64,449,316,14,2,304,143,102,437,9,32,196,741,3,165,5,275,202,128,54,277,237,153,210,743,457,430,300,773,485,460,141,17,0,350,22,288,421,257,270,48,8,184,137,15 }, +{ 24,35,71,68,16,18,92,118,375,108,7,101,302,175,336,154,60,273,14,124,9,398,230,140,0,150,55,149,28,345,189,399,246,191,65,346,69,722,212,46,1,458,167,22,429,314,2,267,126,674,21,388,439,97,67,38,114,10,48,252,628,95,364,251,882,50,133,637,36,49,39,109,12,823,172,768,602,103,236,650,5,83,520,66,232,64,517,32,562,847,694,815,589,702,107,96,51,594,23,695,363,298,37,535,462,484,29,13,796,86,467,886,604,806,868,121,419,125,54,755,451,168,100,135,570,158,6,169 }, +{ 421,453,51,801,730,475,23,523,386,670,401,719,13,629,899,365,403,758,457,115,494,569,805,958,576,543,697,165,615,221,423,817,450,33,488,308,197,102,66,21,514,388,56,14,38,734,341,117,7,326,69,467,961,880,323,196,153,19,202,886,770,128,273,97,120,811,642,532,458,207,110,24,10,6,1,540,67,0,753,554,390,135,134,92,73,52,43,894,37,32,743,214,114,103,90,65,29,891,847,782,125,451,269,208,75,754,602,480,244,229,200,133,130,119,16,9,426,162,83,40,22,2,42,25,203,123,4,901 }, +{ 113,311,614,29,491,145,45,112,80,6,151,631,209,315,74,61,27,2,73,5,287,66,26,243,25,70,396,611,667,52,138,19,58,454,869,122,222,17,186,106,87,255,445,32,64,496,42,297,1,135,684,227,4,128,644,7,86,624,76,337,95,416,65,22,72,85,59,14,204,148,90,21,738,174,250,53,119,141,280,10,483,0,833,137,651,690,549,46,75,226,11,378,37,665,155,742,200,56,194,207,57,177,179,525,12,114,84,77,48,495,40,469,172,292,307,161,49,38,884,887,655,573,881,89,425,18,36,33 }, +{ 471,339,188,4,11,59,377,79,12,99,94,102,77,33,51,111,542,37,342,152,961,13,474,403,40,202,196,153,128,3,452,453,177,229,431,475,401,23,139,117,184,266,157,57,134,115,494,210,300,17,291,402,129,90,32,529,629,5,141,76,775,72,64,275,38,21,318,757,569,277,216,162,14,421,313,123,269,880,89,1,2,497,257,62,197,405,27,45,285,54,304,148,485,217,15,457,41,10,6,179,165,205,180,137,477,349,130,488,245,19,523,432,437,260,22,120,95,769,372,0,352,381,249,618,482,308,237,7 }, +{ 15,40,4,11,33,120,10,82,165,77,110,93,31,8,260,0,23,22,102,51,13,59,44,351,125,64,197,139,32,9,21,326,28,450,196,180,98,203,57,141,386,49,373,12,111,95,1,391,5,457,99,403,115,18,453,116,202,134,475,523,719,854,37,117,128,401,237,48,144,177,14,898,36,217,2,90,308,269,342,758,30,210,318,277,730,494,17,509,922,352,291,817,86,3,65,16,901,24,194,402,105,38,137,7,341,317,29,961,39,629,55,72,76,300,661,752,421,899,242,54,775,247,349,365,569,143,615,485 }, +{ 16,71,24,35,68,18,118,60,0,28,124,92,7,55,9,419,375,14,109,175,149,101,126,252,302,346,150,439,108,154,158,570,169,185,364,22,273,49,65,917,701,329,168,962,420,191,925,39,628,107,2,1,604,46,140,67,97,21,535,265,38,69,159,942,677,10,722,336,105,345,694,467,703,48,5,95,246,553,810,882,20,83,333,43,12,706,13,637,826,100,23,847,671,36,167,279,121,793,189,199,374,50,125,51,212,230,286,66,272,566,6,484,634,344,32,429,289,327,86,103,96,601,114,441,517,37,64,298 }, +{ 17,45,227,106,209,243,21,290,255,400,207,48,263,270,62,186,119,2,496,454,50,32,3,5,52,221,29,425,136,408,430,46,513,171,14,659,54,84,787,721,741,56,281,38,536,80,181,378,240,742,587,552,1,306,76,123,241,541,655,328,428,61,129,41,666,72,502,57,89,12,760,540,115,155,148,383,449,794,37,96,361,152,11,34,214,4,311,51,440,474,592,431,64,790,202,179,405,350,292,36,90,67,663,6,141,59,13,498,103,583,130,697,514,40,211,99,58,10,128,237,217,770,27,869,157,828,834,391 }, +{ 340,354,586,658,668,156,195,698,363,447,883,296,1,411,303,18,379,9,919,360,51,621,98,31,48,591,371,13,21,446,163,5,121,70,132,125,23,759,846,127,761,478,60,293,223,271,146,385,120,664,691,108,763,82,634,638,75,4,260,24,807,774,144,44,522,407,30,457,32,16,914,463,126,777,335,93,771,367,71,49,39,12,0,687,351,118,299,201,40,7,50,848,518,284,922,854,758,538,364,279,11,10,724,310,217,326,64,393,77,541,767,167,150,137,105,103,101,87,58,17,115,286,225,33,401,867,850,663 }, +{ 277,153,111,12,23,51,474,99,38,139,37,457,453,117,542,41,79,629,196,401,13,11,14,569,961,102,33,134,188,89,40,157,54,328,72,775,57,115,17,94,413,339,431,15,377,369,3,477,308,719,248,165,313,4,468,45,485,148,32,197,76,734,216,62,2,21,10,587,405,64,5,59,29,34,6,210,82,509,471,128,155,152,730,177,490,7,266,361,52,120,475,1,0,873,19,305,758,9,899,125,22,110,386,300,211,93,529,229,48,260,237,180,65,50,528,880,77,391,86,36,27,588,326,546,482,402,514,56 }, +{ 18,16,24,0,159,35,68,49,105,9,60,71,101,28,344,55,7,118,320,109,424,14,327,455,239,22,286,170,272,310,1,374,252,154,419,329,167,158,124,518,23,95,709,39,2,21,51,65,13,301,5,890,48,92,265,98,191,212,12,10,108,137,347,128,30,538,31,364,125,202,37,553,20,149,121,557,185,36,677,67,333,169,338,146,127,346,46,175,64,6,126,100,577,50,254,32,512,916,33,403,86,395,69,242,806,371,115,96,44,77,318,221,479,694,616,102,165,623,83,910,627,737,917,38,793,578,846,375 }, +{ 0,105,9,16,49,18,24,68,101,518,158,320,28,35,301,170,272,890,344,286,109,327,39,65,55,512,7,1,127,916,98,118,252,60,737,159,239,371,21,71,124,395,154,14,48,455,623,242,31,23,51,419,374,364,761,5,2,12,137,310,95,125,293,333,846,202,13,616,329,347,338,385,30,37,131,44,938,479,128,836,709,22,538,265,506,64,793,627,10,67,167,299,403,827,212,713,578,149,116,32,36,219,100,910,254,553,175,318,677,108,185,50,6,96,46,685,221,421,424,191,577,92,93,269,599,187,165,284 }, +{ 141,180,1,5,352,365,13,2,4,217,341,115,269,317,15,23,752,3,7,901,6,0,197,21,51,31,77,202,44,318,32,64,372,873,498,10,93,8,11,244,33,9,165,12,102,137,22,253,49,48,237,116,30,98,125,39,177,569,401,28,143,291,308,864,509,40,120,349,403,37,105,391,144,153,482,203,450,110,421,127,72,576,494,95,453,260,247,96,475,373,326,117,36,717,304,131,128,134,90,89,14,457,854,221,206,196,55,811,82,947,629,351,922,386,59,961,734,670,17,437,661,224,201,16,88,76,164,187 }, +{ 51,4,23,102,33,300,40,485,453,880,153,19,17,196,27,342,78,26,53,403,47,77,210,0,475,117,73,2,57,34,11,5,200,13,99,494,14,1,22,12,176,421,64,111,41,21,368,361,59,757,231,130,123,6,139,128,134,401,106,18,56,49,322,317,177,45,775,48,115,165,108,10,125,65,504,495,197,32,605,229,80,341,221,183,390,813,46,37,618,306,95,719,554,152,753,736,543,444,161,402,277,119,630,236,216,122,113,29,730,237,25,899,217,714,383,297,472,445,378,250,38,678,670,527,503,469,412,318 }, +{ 62,440,56,184,229,183,556,130,3,136,548,152,266,99,162,161,17,57,84,452,305,12,383,257,123,403,34,40,527,14,205,349,504,555,497,328,4,361,202,139,775,33,38,37,128,475,129,880,313,381,757,102,11,196,59,119,401,432,402,54,471,453,215,77,23,514,507,585,51,211,153,80,494,495,469,236,477,117,111,64,421,240,369,106,21,214,277,157,308,5,291,141,378,249,13,2,803,619,318,45,76,177,27,485,472,134,41,32,412,339,216,65,524,197,10,72,114,176,165,53,90,372,22,188,245,86,217,543 }, +{ 13,23,115,51,141,202,77,64,269,217,33,318,102,32,21,128,137,0,177,180,4,5,291,9,48,352,10,197,90,196,317,40,153,7,372,18,15,349,22,2,247,165,275,6,403,11,117,125,237,59,3,16,752,494,28,342,304,31,341,134,14,98,86,210,36,241,12,244,49,95,24,498,30,116,39,1,143,901,453,20,450,144,365,402,221,17,475,93,203,127,65,253,216,72,326,120,164,576,35,19,96,44,437,160,421,308,83,67,864,954,569,817,719,25,101,100,61,55,57,284,805,523,401,60,293,285,105,88 }, +{ 1,22,36,105,170,28,55,239,86,31,2,95,5,9,127,0,98,301,12,64,67,7,49,320,109,654,44,83,10,169,208,143,21,312,35,13,23,128,141,740,125,242,14,512,293,116,160,237,51,395,50,338,37,159,96,6,933,114,115,708,299,751,185,137,844,505,269,168,69,48,638,103,597,928,202,180,244,323,16,352,253,165,3,713,197,194,892,39,24,599,65,54,341,285,318,286,46,685,456,951,4,623,824,32,133,158,365,584,601,535,38,498,144,218,251,841,533,506,30,371,217,479,8,503,284,870,752,276 }, +{ 15,0,1,2,5,13,23,7,901,9,6,8,12,51,4,3,457,180,341,898,82,22,115,10,141,120,117,31,351,14,202,260,197,28,269,33,153,961,64,30,44,37,93,18,569,854,11,21,16,77,217,137,365,386,719,237,134,391,110,128,523,49,450,36,629,498,352,102,125,326,317,40,401,509,730,318,196,24,203,546,308,39,116,922,55,752,32,86,817,17,403,90,98,35,453,95,373,59,99,873,177,758,111,143,38,291,242,139,65,48,244,899,372,285,642,349,247,144,734,638,615,482,277,72,253,421,89,475 }, +{ 274,98,100,39,1,265,438,190,310,625,382,30,530,223,909,96,264,593,166,778,88,812,410,960,731,557,252,31,125,21,539,23,254,9,48,51,116,639,44,478,393,131,127,13,101,0,293,284,329,795,404,840,144,656,435,333,724,616,5,219,228,321,272,421,834,165,921,957,224,105,32,36,93,128,697,367,541,669,765,242,221,49,676,137,418,455,160,748,83,897,163,202,682,578,475,453,553,386,807,217,213,551,613,406,335,403,141,466,197,827,180,948,37,158,187,115,905,821,791,203,352,286,258,371,120,863,730,2 }, +{ 212,18,118,447,167,781,363,411,271,647,146,121,60,562,664,621,463,815,478,1,16,446,9,777,354,628,21,936,48,101,932,132,68,191,98,520,522,223,71,264,5,24,759,55,199,575,727,566,126,13,23,724,156,360,691,125,0,407,591,608,49,293,604,221,51,35,92,195,346,31,107,252,108,375,586,96,154,914,682,541,807,150,39,589,124,848,265,69,22,105,50,834,32,364,302,393,329,12,4,10,382,535,404,28,166,765,100,668,273,33,149,88,706,806,163,279,95,410,598,44,335,955,7,30,67,284,159,467 }, +{ 24,28,14,7,35,16,22,65,0,1,2,158,49,109,55,159,124,95,18,67,149,105,71,239,169,68,108,185,424,289,9,12,69,46,577,10,175,154,320,5,164,347,6,747,344,21,835,36,286,50,38,83,170,654,892,23,420,92,114,51,64,143,60,13,374,189,302,429,140,48,103,570,118,32,37,29,336,610,133,327,312,398,39,484,128,638,168,301,272,125,202,137,86,150,30,194,230,671,345,584,703,96,54,115,273,251,310,283,141,518,98,308,20,538,401,101,127,52,31,221,346,455,535,236,403,389,458,267 }, +{ 105,272,131,22,286,239,320,327,98,127,219,9,185,224,374,187,55,28,578,86,31,258,36,913,616,535,1,95,538,64,164,837,634,109,116,601,44,654,312,170,910,49,708,623,115,23,5,0,713,371,201,159,13,505,2,197,83,892,7,35,67,180,533,928,51,933,317,737,301,751,10,716,352,284,6,160,776,237,509,916,165,242,498,251,531,12,395,39,924,137,638,385,293,269,30,276,168,141,217,254,752,208,144,569,896,836,143,346,24,824,21,4,546,468,169,308,14,761,128,345,244,318,482,365,3,597,391,384 }, +{ 28,301,22,31,127,512,105,98,395,109,44,299,293,95,9,320,1,599,685,900,55,0,239,36,763,338,242,49,116,125,841,168,870,456,286,23,276,506,86,35,284,51,185,65,492,159,2,24,374,479,13,393,928,5,144,7,64,169,713,141,12,137,327,21,202,14,268,237,16,935,10,201,558,272,538,67,401,367,37,143,83,308,424,164,312,128,158,115,48,165,918,654,194,269,923,740,39,347,244,623,18,6,489,253,318,114,963,160,352,289,124,180,68,96,420,170,203,175,131,421,219,434,197,391,221,762,453,93 }, +{ 2,58,29,52,1,186,334,46,5,14,151,75,45,400,155,50,61,227,163,262,502,69,549,70,220,223,48,38,311,112,67,409,113,780,7,243,675,767,27,17,209,24,103,80,394,96,21,315,54,307,513,536,83,287,787,309,37,281,6,16,106,807,171,587,496,267,19,32,631,474,270,491,12,35,181,26,583,454,74,869,820,852,36,324,721,255,845,278,64,73,335,357,89,87,140,72,537,25,760,290,18,659,614,430,189,66,97,133,663,114,108,592,552,128,331,666,764,141,606,3,86,380,486,366,76,65,148,10 }, +{ 7,107,232,135,97,387,92,356,298,66,14,2,192,359,278,172,52,357,126,324,448,35,60,526,314,16,38,29,46,330,380,43,362,259,392,230,20,226,74,140,262,246,279,147,24,825,64,58,5,121,568,87,294,32,220,501,132,21,612,465,95,150,86,104,620,18,12,71,173,581,54,534,0,893,37,22,808,583,178,353,90,10,580,550,146,707,802,600,606,331,194,112,222,28,69,660,853,65,70,199,171,68,560,1,174,36,50,77,49,48,779,500,204,683,493,414,6,61,25,764,55,138,33,102,750,888,307,45 }, +{ 20,43,104,414,560,426,707,784,173,319,861,7,819,81,715,422,879,0,376,330,74,95,97,52,32,192,64,38,22,49,526,356,66,204,681,397,207,140,232,5,470,65,693,61,359,636,387,500,107,324,28,91,712,18,10,29,147,77,21,595,392,113,577,172,729,2,325,24,138,92,33,347,125,86,945,102,90,306,40,115,4,198,370,583,230,174,12,904,180,11,858,312,153,124,17,587,750,76,59,69,344,298,3,135,13,37,46,825,718,357,165,348,315,214,72,887,117,289,353,246,196,141,84,36,427,51,237,48 }, +{ 104,74,636,204,355,222,66,81,0,145,25,319,784,746,192,750,29,20,173,174,792,64,90,138,280,715,65,194,91,879,525,32,22,4,348,287,43,95,18,422,7,214,415,86,77,42,40,6,681,289,59,524,151,33,10,52,712,2,28,544,945,13,597,102,45,177,97,21,57,11,243,49,85,36,312,500,426,693,141,5,673,624,396,16,1,122,87,115,648,24,26,186,632,233,67,17,172,414,304,416,123,12,353,389,117,651,580,69,588,751,153,113,874,112,14,23,227,216,128,58,217,197,27,875,114,635,137,707 }, +{ 101,0,9,35,68,154,252,39,65,28,364,124,166,100,149,336,158,289,346,439,429,419,67,55,114,570,694,30,16,265,24,109,484,88,1,329,69,194,404,637,49,189,389,547,133,398,703,826,671,283,22,168,610,175,212,190,7,83,345,103,64,14,768,399,71,274,333,344,230,95,799,50,21,706,36,722,677,420,10,185,962,51,23,18,553,140,254,159,125,967,535,676,46,48,310,2,86,96,952,264,13,12,169,382,5,596,108,323,705,782,251,118,208,857,702,756,562,865,438,218,60,267,131,237,37,755,105,272 }, +{ 57,14,4,236,231,59,369,361,300,585,342,51,23,719,401,13,38,176,46,202,62,402,3,56,210,54,12,2,412,803,381,457,215,11,507,128,40,757,555,77,514,961,32,730,629,322,161,328,37,162,33,133,283,108,129,21,211,34,102,494,17,152,130,29,99,139,153,52,527,472,181,79,123,475,229,6,497,899,453,240,758,194,205,184,188,183,177,0,136,377,305,134,155,248,165,157,425,290,440,714,495,209,739,196,277,269,80,50,556,10,805,64,65,523,503,386,257,141,16,7,5,179,403,84,600,469,318,180 }, +{ 2,1,3,5,141,6,7,15,0,269,180,64,33,77,10,352,102,13,202,128,318,11,197,17,14,4,291,12,134,117,9,120,752,165,153,196,137,217,498,341,349,260,110,21,342,93,40,31,237,23,317,44,82,115,22,16,59,19,86,51,351,678,32,57,36,961,37,450,111,125,365,457,27,143,901,569,95,79,203,49,403,873,326,8,139,494,864,372,28,98,402,116,18,244,56,854,509,48,719,386,947,29,922,954,76,94,373,38,45,523,25,391,285,99,730,546,144,475,275,72,90,164,210,26,24,453,817,253 }, +{ 5,21,61,48,32,202,1,70,259,13,58,115,22,23,178,90,0,494,51,12,475,453,182,18,465,403,49,17,76,450,120,142,318,141,137,147,534,455,402,146,132,128,64,31,11,522,260,771,953,922,859,523,420,269,241,221,207,175,121,72,37,6,4,3,2,768,205,179,415,376,362,28,10,237,30,937,702,113,68,16,9,798,247,590,326,197,165,626,344,279,347,878,125,195,955,933,928,868,854,851,821,815,795,780,765,727,678,668,657,576,562,540,503,502,493,488,482,430,423,411,365,288,285,281,273,118,87,65 }, +{ 205,141,59,152,245,4,352,72,497,76,216,247,79,452,11,588,94,21,188,217,89,875,77,339,864,954,464,269,115,148,64,12,37,529,38,111,32,358,180,5,316,405,471,490,45,474,365,317,349,752,177,288,437,498,51,99,90,468,102,372,128,318,48,1,237,17,542,23,947,241,431,221,54,3,33,291,2,734,197,413,377,270,460,13,401,961,873,341,14,196,579,482,244,569,629,40,308,645,184,257,304,678,720,449,36,10,202,749,275,134,117,428,15,290,153,143,453,57,139,7,430,6,350,769,281,210,476,403 }, +{ 15,1,0,2,5,13,4,3,7,6,23,365,341,115,8,51,9,77,31,10,457,93,44,569,120,197,202,141,12,961,165,33,317,450,901,11,260,55,110,352,22,719,730,453,217,98,82,64,401,18,102,40,21,269,523,403,70,386,49,351,752,105,498,28,16,629,308,318,111,61,898,30,117,475,509,391,817,95,922,342,36,59,494,210,134,899,137,421,873,116,854,14,32,177,196,139,153,734,128,143,291,24,20,349,37,758,372,247,90,326,690,801,113,216,48,275,670,27,125,25,39,57,638,17,304,35,237,244 }, +{ 5,2,50,58,171,186,46,29,14,52,45,38,61,155,17,218,1,281,334,151,227,400,48,487,502,36,54,760,67,133,103,114,21,96,328,236,366,243,80,552,209,83,311,828,27,745,160,920,19,24,766,32,6,108,832,65,12,223,106,514,3,433,70,787,842,99,28,549,113,112,834,540,361,163,26,37,536,516,496,137,765,75,480,454,754,532,780,0,430,966,739,22,238,86,474,51,767,283,18,25,583,115,285,587,309,7,73,287,72,255,23,600,412,128,822,807,13,323,315,208,76,119,545,10,956,270,64,16 }, +{ 457,795,70,120,846,48,23,761,125,318,64,751,415,291,758,221,763,202,391,269,87,401,77,352,237,21,165,128,96,163,558,13,1,260,137,494,5,51,851,767,141,197,546,557,867,597,49,518,102,349,450,623,509,33,98,177,678,922,900,743,498,293,31,223,342,403,371,32,180,873,854,0,217,884,196,153,95,4,44,308,7,2,541,17,30,127,765,58,351,372,386,117,807,6,903,704,182,845,22,134,663,210,105,39,27,402,326,859,307,159,285,281,82,817,719,455,353,312,192,61,931,523,203,947,247,207,385,45 }, +{ 23,51,13,40,453,102,33,4,196,77,117,475,64,153,0,22,10,11,65,59,15,12,134,21,1,403,139,202,95,14,210,28,177,108,18,115,141,165,57,137,128,457,86,2,31,99,6,37,36,401,269,49,9,318,82,7,275,180,5,24,217,342,485,16,111,277,125,386,291,44,32,300,197,19,421,352,46,48,194,730,341,237,17,120,93,494,283,133,90,25,523,260,3,285,114,89,216,8,317,899,38,961,719,498,312,50,26,20,365,351,67,391,54,110,373,326,289,208,168,546,752,569,308,304,98,377,402,361 }, +{ 229,152,266,57,381,452,432,313,471,12,99,17,184,339,369,62,4,129,59,157,128,77,497,3,11,38,123,202,162,37,291,188,257,40,403,136,5,216,21,205,102,111,775,79,51,475,14,33,32,45,402,453,54,619,90,119,115,64,76,177,2,106,361,377,72,880,139,23,494,130,277,757,183,349,84,401,27,56,308,89,80,19,318,141,117,1,94,10,328,529,474,210,245,249,41,36,217,269,421,86,618,6,148,556,342,305,588,179,383,0,134,34,514,477,304,769,542,22,214,378,275,137,13,65,300,95,285,82 }, +{ 49,109,159,28,272,22,327,9,105,95,254,168,131,374,286,347,39,35,424,158,55,175,169,420,627,578,312,67,346,194,0,912,1,224,219,65,86,239,892,36,83,518,114,688,320,538,127,634,584,913,439,371,64,616,30,69,24,10,535,187,336,2,228,7,716,289,68,98,601,23,16,31,164,654,208,505,51,258,14,13,170,874,128,44,12,837,103,890,160,115,385,137,345,50,185,143,116,756,251,141,101,96,190,747,333,125,202,5,166,708,133,21,637,570,242,237,46,835,189,165,638,149,610,706,100,751,48,577 }, +{ 5,61,29,58,311,2,45,209,80,52,454,227,243,106,17,496,592,869,1,151,255,334,75,667,287,70,738,549,171,48,46,483,663,74,155,14,50,163,207,666,290,6,186,119,32,27,378,21,220,659,263,112,136,84,742,307,833,7,400,780,469,767,62,64,72,513,113,148,262,56,409,270,161,331,315,635,425,89,19,38,495,631,3,76,73,383,887,502,69,66,34,223,128,26,240,54,86,306,87,491,96,67,845,408,135,814,37,4,25,445,181,95,294,24,90,226,103,10,405,237,12,297,141,22,655,129,11,16 }, +{ 260,244,373,276,44,269,141,228,110,131,574,219,137,30,839,717,224,217,661,36,352,567,406,120,1,116,253,93,318,160,202,341,31,21,88,201,39,190,187,77,372,752,96,180,64,851,268,55,98,317,82,22,258,613,326,86,351,48,51,23,115,295,213,100,539,291,144,860,35,922,864,9,450,261,489,28,365,105,13,177,442,840,515,321,83,166,856,854,49,935,203,530,284,0,274,349,816,69,197,954,251,165,67,10,811,434,247,778,143,385,531,254,968,957,237,498,843,127,384,669,466,824,102,223,32,5,871,800 }, +{ 99,12,139,79,453,11,277,196,474,51,37,542,111,401,23,94,188,775,33,13,40,102,313,339,961,629,153,431,477,4,38,485,475,300,115,569,134,117,377,157,210,59,14,471,266,15,89,328,880,148,369,57,457,54,413,405,308,403,197,152,128,72,64,165,734,10,3,2,21,17,670,488,719,202,229,82,757,0,5,402,32,41,77,275,177,45,76,29,305,22,342,36,498,1,730,46,494,184,28,318,93,31,529,162,514,6,269,27,482,62,110,873,528,452,179,120,141,137,86,421,317,7,237,129,8,18,361,428 }, +{ 68,35,16,149,24,71,9,69,0,18,67,118,101,212,65,191,114,230,167,133,124,103,399,140,154,1,50,283,246,398,60,7,64,565,55,695,39,218,336,723,375,302,796,28,108,238,267,705,83,189,330,100,23,486,589,702,562,458,21,443,175,13,361,48,75,345,92,96,22,51,181,237,532,755,46,30,2,115,88,14,10,86,363,650,732,335,12,36,49,54,891,520,217,411,516,141,166,95,412,394,641,180,37,5,906,478,447,223,251,247,264,433,252,389,146,480,98,596,602,545,830,346,664,309,271,121,364,628 }, +{ 88,274,435,30,613,100,131,829,166,530,382,93,960,795,190,127,856,466,957,187,521,264,473,778,31,254,228,716,406,1,686,39,863,203,410,224,800,457,137,9,160,704,219,438,28,924,944,120,450,144,836,492,299,326,260,44,116,840,98,202,83,96,321,36,0,21,921,55,141,367,341,827,639,385,265,158,128,772,201,49,539,64,258,317,180,110,86,269,851,442,295,125,908,77,662,276,23,669,744,272,373,242,105,82,931,48,35,968,351,168,318,859,115,578,822,33,557,418,371,616,32,625,67,213,217,109,523,365 }, +{ 167,118,212,18,16,71,60,24,191,375,411,68,363,146,447,101,199,589,271,562,126,302,647,121,815,9,628,566,273,35,575,664,21,92,55,781,621,1,48,777,478,0,149,936,818,108,520,150,354,154,446,847,463,124,346,132,264,98,107,7,65,522,156,28,759,13,22,23,39,49,932,727,882,5,14,223,32,640,608,467,100,51,604,125,695,10,69,724,806,246,221,50,140,195,517,67,252,96,768,279,293,31,360,848,88,166,105,691,95,682,674,46,535,103,2,175,649,109,159,598,458,265,329,364,914,12,653,33 }, +{ 141,64,86,177,128,597,77,269,95,180,237,352,304,291,275,147,588,372,102,194,125,947,13,678,49,875,202,349,120,437,115,4,59,137,153,751,197,40,208,342,465,954,67,23,5,318,135,32,216,660,470,534,196,182,98,31,22,612,90,38,312,448,107,7,10,581,165,353,192,172,707,51,262,498,494,117,33,21,17,1,389,76,203,14,46,565,563,65,569,546,391,330,285,284,277,210,205,139,134,26,25,20,19,12,9,6,3,620,217,11,326,97,853,629,259,278,232,789,380,365,294,289,244,55,43,0,247,111 }, +{ 18,289,701,65,240,194,90,403,523,214,421,283,475,389,217,102,862,202,847,437,494,453,650,64,697,874,51,352,751,401,817,33,84,0,899,13,597,5,196,805,32,23,11,954,95,3,27,22,24,757,875,141,671,312,108,21,153,19,306,114,118,247,450,288,77,17,730,56,4,12,177,942,273,958,814,117,519,86,61,128,859,207,835,193,880,123,249,838,28,120,342,49,134,300,2,6,801,216,719,57,457,576,864,304,125,302,124,14,615,372,16,210,40,237,60,577,504,119,770,608,752,62,10,9,643,48,1,15 }, +{ 51,23,13,202,115,21,12,5,32,128,403,453,141,401,165,308,120,318,457,15,475,4,269,64,1,0,197,10,719,494,99,2,450,37,48,730,3,180,523,77,7,18,386,14,9,6,16,59,22,217,260,125,11,17,90,177,341,237,117,421,153,24,221,899,33,352,317,102,28,326,137,247,82,817,961,19,40,365,402,391,569,27,629,57,95,49,25,31,8,216,210,110,758,304,72,29,93,54,351,26,38,291,98,20,134,61,196,76,56,45,44,241,275,139,372,349,509,36,65,342,350,615,678,285,89,214,50,670 }, +{ 98,223,393,125,31,791,834,116,271,1,93,202,697,44,64,167,127,293,5,541,51,446,801,77,450,212,48,284,807,234,120,23,765,21,318,13,421,18,195,948,639,551,132,360,730,770,141,142,562,146,163,96,386,49,963,144,668,354,591,197,346,128,260,221,0,198,82,165,416,269,494,670,367,949,817,147,33,178,522,70,32,535,455,719,137,453,326,203,842,22,102,687,61,156,55,121,407,4,315,2,325,105,403,883,110,329,217,342,95,692,10,781,615,463,798,12,958,291,351,7,17,39,878,586,113,196,28,68 }, +{ 15,4,40,11,23,165,13,51,110,93,120,32,82,77,125,33,197,141,260,202,59,10,0,21,102,64,180,5,57,31,453,22,386,12,269,8,318,128,403,134,3,139,95,475,457,730,44,9,49,719,326,117,203,1,115,351,98,450,17,352,28,99,116,217,494,523,210,373,391,961,37,177,90,144,137,2,342,18,153,317,401,56,854,14,48,65,237,341,36,758,421,291,111,277,402,365,509,30,7,922,242,105,275,372,349,24,86,901,801,899,898,300,39,308,817,72,6,670,16,45,752,498,27,38,76,304,170,615 }, +{ 15,1,0,13,2,5,901,7,23,6,9,341,8,3,4,51,961,12,115,10,898,180,82,569,134,31,22,141,351,202,457,120,44,269,165,77,260,365,403,401,318,317,14,33,217,11,854,93,28,30,453,18,137,37,386,21,110,64,719,36,498,352,128,450,16,117,922,475,509,49,177,55,111,391,40,730,523,99,326,98,102,629,758,153,32,39,642,372,24,873,752,116,291,308,421,125,373,95,143,482,203,817,494,35,899,196,86,304,349,17,244,38,237,65,275,247,242,59,105,402,210,638,48,615,144,342,148,127 }, +{ 234,416,77,315,5,639,202,325,147,113,198,49,450,455,61,142,329,178,21,0,427,470,494,342,58,32,557,22,318,230,725,43,858,112,120,70,102,13,48,263,20,344,260,884,425,817,128,798,115,290,105,518,291,137,95,904,23,403,64,141,491,159,241,845,523,31,121,33,319,97,320,392,246,196,153,17,173,104,10,39,663,269,117,592,501,125,51,347,72,30,163,28,253,170,408,194,376,107,18,265,544,326,352,270,341,4,738,615,534,475,595,98,259,66,631,449,301,922,158,76,134,720,512,312,9,180,859,690 }, +{ 146,60,271,126,16,156,360,199,18,121,167,640,522,132,24,446,354,591,71,463,118,340,150,92,598,273,441,195,107,212,22,0,407,10,5,21,108,467,28,279,586,575,423,566,727,191,101,493,649,534,68,95,608,517,55,35,32,783,653,9,408,48,49,508,363,296,607,698,246,13,668,33,64,117,109,356,98,314,39,658,140,105,7,362,660,447,809,411,955,93,31,621,50,303,298,153,347,12,158,125,65,953,713,264,163,350,359,141,124,14,143,51,939,478,149,115,36,75,4,781,581,225,207,102,77,30,562,44 }, +{ 4,11,361,300,77,56,377,368,14,59,40,161,51,128,33,200,210,23,378,27,54,495,102,554,38,494,453,17,21,12,202,80,444,108,53,757,37,46,78,13,245,457,342,390,139,133,123,386,84,523,32,605,196,862,527,736,803,99,73,57,19,630,561,475,3,542,509,421,317,250,181,136,111,277,269,450,197,472,183,48,26,485,730,297,62,714,402,381,403,391,880,122,719,341,318,306,145,25,5,514,256,61,899,546,106,90,50,34,383,833,236,775,497,165,129,85,401,366,184,469,436,838,358,328,316,291,275,241 }, +{ 141,351,217,82,352,120,854,260,64,15,180,372,1,922,269,317,36,137,752,373,13,21,349,51,898,450,77,202,110,23,318,160,93,115,291,128,365,48,197,177,901,96,5,165,244,864,10,86,457,4,40,237,523,247,33,579,341,32,304,11,661,125,83,143,498,326,817,2,203,275,437,69,102,954,717,16,59,961,35,386,851,730,22,475,28,253,31,7,57,98,95,134,144,391,12,6,719,117,210,116,17,196,139,0,3,37,494,473,403,114,49,30,29,164,899,704,559,153,90,72,55,9,45,509,482,453,393,230 }, +{ 15,77,13,1,0,102,23,33,2,4,51,5,10,291,7,9,3,450,6,217,117,120,177,317,341,260,11,12,817,342,365,115,8,134,21,153,180,16,18,22,349,40,165,82,14,64,141,453,372,31,457,523,901,196,197,326,275,352,210,961,719,730,28,304,475,403,569,44,128,32,899,93,59,269,401,24,17,49,752,98,318,110,36,629,216,30,386,125,95,494,90,137,48,351,308,116,111,57,139,37,86,99,498,65,615,247,482,144,39,237,221,20,96,19,244,421,300,758,203,670,194,509,38,854,402,873,437,391 }, +{ 15,23,13,77,141,260,137,120,51,202,180,115,1,365,217,0,341,450,269,291,317,318,5,197,128,21,9,177,373,351,110,352,165,2,12,523,7,64,349,326,10,48,36,901,32,33,22,403,854,82,90,96,4,922,16,37,28,18,752,457,40,386,244,372,102,494,6,308,8,160,86,24,30,14,401,49,661,817,453,719,421,402,11,704,961,475,237,873,342,55,3,39,730,391,59,196,93,221,117,143,216,615,898,44,498,275,253,210,304,35,285,95,125,31,98,17,139,509,72,153,811,482,89,83,144,899,99,576 }, +{ 348,174,85,138,6,280,74,355,233,192,204,636,580,353,343,289,673,66,65,91,81,104,712,750,25,42,214,792,95,64,681,173,194,32,715,135,90,312,29,879,172,825,63,235,835,86,22,87,145,370,5,256,7,222,415,52,0,874,426,97,500,519,17,26,237,43,4,288,36,18,10,389,20,33,560,76,21,61,40,544,45,59,249,888,77,577,746,232,28,102,2,72,49,568,123,287,56,525,448,751,180,11,337,526,707,671,226,27,19,247,24,319,117,48,422,114,12,69,108,84,208,597,37,1,861,67,889,58 }, +{ 152,452,497,59,216,4,269,188,77,11,79,339,128,529,94,471,318,141,202,588,32,76,377,177,678,33,111,291,349,90,5,102,21,137,51,72,12,179,542,38,99,64,257,184,37,1,245,217,460,196,48,372,115,947,148,45,402,474,40,89,342,210,17,352,205,288,3,153,769,13,117,10,2,134,292,54,275,304,139,875,498,431,23,405,241,403,247,317,569,229,401,453,494,285,358,180,197,86,300,57,0,476,961,6,954,308,36,143,524,165,277,475,316,597,14,95,237,15,7,221,341,58,157,735,129,266,214,421 }, +{ 417,253,244,499,141,10,559,564,110,8,260,352,728,143,180,951,120,642,638,661,752,922,341,373,811,137,269,901,717,197,93,206,498,44,165,31,116,203,160,854,384,351,36,873,762,326,704,268,217,1,64,115,282,317,959,55,144,15,365,82,898,968,509,164,86,479,318,13,851,22,21,332,473,434,51,202,77,940,911,569,23,125,450,864,824,237,261,9,242,615,372,617,127,48,201,102,128,4,33,5,96,506,0,391,117,98,28,401,386,40,295,105,32,758,531,276,338,37,83,35,349,59,533,153,177,629,11,12 }, +{ 77,13,23,51,177,102,33,115,59,4,40,0,141,128,90,210,202,137,64,22,269,291,217,10,196,28,153,117,318,7,49,2,14,216,134,18,180,16,6,11,9,24,403,1,275,197,3,95,36,86,125,165,247,342,31,352,494,19,32,402,12,139,453,317,20,237,98,65,15,349,44,475,26,285,17,30,120,111,57,93,21,372,105,27,25,719,194,457,341,203,304,386,260,391,730,116,421,365,35,29,5,99,326,123,498,208,39,569,509,244,288,752,450,143,678,144,110,523,401,308,82,214,300,351,43,37,48,164 }, +{ 1,2,22,50,67,14,36,5,46,28,103,12,0,38,83,114,65,168,194,7,69,133,86,95,24,49,218,29,54,21,55,96,109,160,51,10,584,16,128,6,9,23,48,158,18,75,756,37,35,105,169,32,389,289,159,323,238,181,52,244,202,13,503,646,164,137,532,141,239,115,361,480,185,64,17,143,789,283,124,708,253,505,946,597,3,717,45,776,58,170,108,269,70,735,312,874,285,610,68,782,189,318,424,71,531,31,308,237,320,171,4,892,72,402,99,328,220,418,251,420,394,19,180,577,487,401,347,344 }, +{ 17,106,119,378,742,255,306,136,207,240,84,383,62,790,80,655,61,45,5,56,311,3,209,504,440,667,76,151,32,58,263,483,179,29,2,833,292,548,214,123,129,425,186,454,128,243,205,738,445,64,21,245,148,52,38,14,26,249,57,27,328,19,90,6,4,555,11,34,59,54,162,202,184,507,469,141,592,229,48,215,887,710,152,73,86,40,161,72,618,460,266,257,491,77,358,211,227,287,25,869,183,318,297,50,290,495,10,216,130,614,155,1,476,177,137,361,12,315,37,112,33,22,46,95,113,269,194,171 }, +{ 141,128,202,3,5,2,1,269,64,318,6,33,17,102,15,180,0,196,137,10,153,7,120,352,197,13,77,117,51,134,403,14,165,12,23,402,11,93,9,342,260,82,110,21,494,19,22,237,31,351,4,125,86,475,457,450,326,27,44,32,203,40,36,95,291,961,453,115,25,285,143,111,678,98,341,37,139,99,523,817,49,57,752,498,45,386,18,38,217,8,116,65,16,244,28,144,317,365,56,719,373,901,194,854,79,898,277,59,29,576,26,421,30,569,401,730,947,177,164,864,48,72,391,922,24,873,94,349 }, +{ 38,514,328,377,11,57,266,248,41,880,313,471,556,152,361,4,485,99,305,757,403,157,12,102,339,54,369,40,211,130,542,457,3,37,188,14,139,23,13,153,494,117,33,475,775,229,507,381,300,196,77,453,452,59,555,162,488,184,277,585,236,477,440,629,62,128,51,111,421,134,402,183,215,961,670,79,548,123,342,210,202,89,401,527,474,94,65,587,719,543,432,181,45,17,257,291,80,64,72,21,619,108,32,413,828,46,5,29,0,95,2,275,129,308,10,56,504,205,86,618,155,76,177,49,431,569,90,497 }, +{ 68,520,167,101,264,118,478,562,0,9,664,777,936,604,212,100,191,252,154,18,124,806,265,16,759,21,48,1,71,375,88,724,628,24,329,35,682,411,410,363,166,302,815,447,65,419,589,55,23,39,647,149,917,909,821,382,125,942,98,346,925,772,13,701,146,96,223,51,108,31,10,221,271,22,60,28,321,44,92,905,69,30,676,639,49,593,364,882,274,694,521,907,64,105,5,158,67,621,781,812,126,133,553,189,848,897,213,686,95,32,121,404,522,199,103,116,156,50,140,83,429,706,763,273,115,165,127,77 }, +{ 230,689,699,213,466,831,352,217,30,443,418,854,144,201,840,855,251,203,957,822,96,530,1,539,93,36,137,800,317,83,190,128,326,669,752,351,748,494,88,206,160,31,473,859,335,202,141,44,321,253,735,498,269,435,116,367,187,86,35,927,332,180,237,69,98,778,244,285,219,82,131,576,228,617,208,922,866,930,372,100,120,64,2,934,403,349,531,702,48,21,731,817,274,23,5,10,13,406,365,224,947,824,795,345,898,291,382,295,223,692,318,286,238,39,341,276,863,77,615,166,260,625,678,51,28,67,410,125 }, +{ 77,33,102,117,134,153,196,291,13,51,15,23,82,64,40,202,128,120,0,141,260,351,450,22,4,95,59,137,269,342,177,386,318,326,11,115,10,210,65,373,86,180,217,49,403,1,165,275,28,18,453,57,36,125,98,352,494,523,139,197,14,31,854,475,2,194,216,9,7,817,21,719,93,6,730,24,457,237,90,12,116,16,44,349,110,3,5,402,99,961,317,114,372,19,48,32,285,105,96,17,365,341,300,143,8,203,401,247,164,108,421,25,752,144,26,30,20,391,39,111,304,109,758,50,221,208,37,289 }, +{ 11,40,33,51,542,328,13,117,38,14,23,139,153,134,54,102,111,12,485,377,775,37,99,403,231,277,401,719,369,3,475,453,514,4,629,308,211,880,457,291,305,89,266,152,130,2,57,196,961,6,488,215,5,176,59,555,471,313,72,300,477,183,62,184,79,0,507,248,115,21,670,339,249,548,361,1,165,292,29,197,229,77,556,474,236,386,421,157,413,188,452,17,758,41,162,391,449,587,32,46,123,428,509,52,247,569,136,899,757,523,210,753,155,129,76,50,237,64,730,720,476,383,312,440,275,90,45,342 }, +{ 77,64,141,202,33,102,128,153,2,117,269,6,23,318,1,13,0,134,137,51,5,180,3,196,10,7,40,165,15,14,352,197,86,291,237,115,403,95,17,177,22,217,36,139,210,9,120,19,125,342,494,275,82,475,457,49,453,16,12,31,4,65,21,402,11,143,260,194,110,93,450,25,28,351,317,111,498,326,27,18,349,752,44,341,59,164,386,26,285,116,365,98,719,208,32,391,300,509,401,523,99,20,24,38,114,244,373,730,55,48,901,372,203,312,961,8,277,160,678,304,34,37,57,854,56,546,29,144 }, +{ 15,4,93,5,13,21,11,1,23,32,110,141,64,82,180,2,33,40,3,98,352,120,6,10,0,12,77,7,341,197,37,51,102,351,269,854,95,17,202,31,9,752,901,44,165,117,48,318,153,291,134,137,115,365,237,196,372,59,498,260,349,450,14,128,90,36,317,244,899,22,342,922,437,125,143,873,453,16,160,72,105,482,179,817,19,89,401,457,57,661,403,523,177,164,45,308,864,373,253,245,8,898,49,421,569,223,76,719,28,61,18,247,139,56,96,27,490,210,468,111,494,475,144,38,961,391,304,25 }, +{ 1,2,50,46,14,67,103,38,24,83,133,29,52,96,75,28,114,5,36,238,65,54,108,171,70,0,58,18,69,181,160,532,236,7,22,412,433,754,283,55,163,220,480,361,487,124,12,223,545,45,328,394,21,398,16,155,9,366,48,35,956,6,154,87,323,646,309,514,112,186,822,137,17,109,149,418,745,175,547,86,37,285,68,800,866,10,429,732,516,25,208,302,51,32,118,334,281,99,531,71,61,194,537,458,23,891,389,19,151,675,409,336,128,168,13,400,307,95,262,832,227,49,273,420,3,115,484,64 }, +{ 258,276,860,201,843,295,137,160,567,116,261,144,268,943,284,202,187,935,662,203,699,131,219,224,44,141,127,36,326,96,98,31,318,269,244,964,23,93,384,489,55,21,434,332,13,403,51,120,1,617,918,352,908,367,110,206,180,365,254,197,492,473,871,442,48,82,10,143,800,260,39,574,28,944,299,940,282,253,9,115,494,418,341,125,855,77,8,49,128,836,535,165,100,576,30,523,385,105,822,217,395,959,564,22,531,911,37,83,393,851,717,64,817,752,421,716,5,317,901,551,373,859,0,170,291,599,533,251 }, +{ 7,2,14,87,46,52,278,92,16,140,75,29,135,294,262,70,38,35,172,171,409,24,60,58,69,5,97,112,66,314,1,163,571,71,50,461,155,267,232,330,18,220,54,334,357,126,380,307,21,74,12,230,48,309,186,675,32,37,298,331,226,246,151,45,774,107,64,337,25,324,6,67,606,189,622,20,448,150,43,61,0,400,22,849,287,10,68,9,86,563,28,95,227,583,192,394,620,103,36,764,572,108,128,335,83,55,587,550,13,145,600,549,536,65,141,852,366,49,415,90,26,236,526,950,17,4,181,72 }, +{ 13,23,51,115,2,33,77,0,1,10,4,7,217,5,9,141,102,6,3,180,11,40,317,22,15,64,14,197,352,202,16,12,341,269,365,165,18,318,177,17,59,153,453,196,752,291,32,117,308,237,125,403,31,128,8,36,401,24,28,349,372,49,498,137,475,247,95,304,143,569,901,21,98,468,457,134,44,139,19,90,421,86,210,120,386,629,93,37,116,482,494,57,110,873,342,55,961,275,111,391,546,35,509,244,203,30,27,99,29,437,48,20,260,65,719,216,734,25,38,54,450,326,50,351,46,864,105,253 }, +{ 74,145,204,66,138,42,25,6,337,174,525,222,192,29,26,544,746,287,415,632,85,609,135,7,353,280,112,580,87,396,712,355,64,122,81,104,2,45,173,673,416,648,172,43,792,226,52,22,97,651,151,194,70,65,0,19,32,20,715,95,825,348,5,624,233,113,86,635,91,879,294,10,644,235,1,90,500,36,573,560,49,636,243,58,63,21,331,426,61,75,389,27,445,14,69,750,28,289,46,38,17,888,311,312,18,24,140,186,76,283,141,12,874,16,232,278,72,461,707,53,4,526,597,255,665,180,114,881 }, +{ 77,217,33,102,317,291,202,23,13,51,141,15,275,269,318,115,342,180,21,4,196,352,64,128,11,494,32,5,137,403,40,2,0,125,3,177,10,98,365,349,12,7,372,6,341,453,165,197,153,475,48,752,22,237,31,117,9,95,59,93,16,90,120,247,308,450,49,221,244,36,28,18,144,86,14,134,326,421,203,44,17,304,24,116,523,260,110,864,210,498,401,901,1,35,241,386,82,127,817,39,72,437,160,105,65,143,730,719,351,216,457,402,30,350,293,164,37,859,96,367,139,284,19,579,576,391,285,373 }, +{ 187,258,871,219,442,574,908,839,926,160,116,44,137,224,276,201,36,860,131,202,613,228,144,531,406,93,31,902,567,385,843,318,203,268,800,98,662,856,494,23,190,120,127,418,30,295,533,836,1,284,96,822,244,64,944,717,86,851,55,13,21,51,22,840,434,269,251,367,489,326,48,110,141,699,816,260,39,384,261,371,473,83,206,254,859,10,669,492,28,317,373,128,49,365,450,77,180,863,559,530,82,829,341,918,253,32,9,197,125,351,332,165,143,943,728,535,67,831,576,855,940,403,217,716,105,274,69,959 }, +{ 1,372,23,5,141,21,744,13,291,77,225,349,144,48,459,96,839,260,304,269,442,335,691,352,32,30,622,203,303,284,330,64,45,521,180,317,217,160,88,752,418,120,93,190,948,166,954,340,919,686,342,244,228,202,201,189,137,110,321,914,411,447,781,772,254,51,765,31,656,264,237,167,724,478,842,437,274,127,125,69,44,662,466,435,351,326,82,9,897,410,253,716,286,678,479,299,238,197,68,7,2,934,223,100,70,58,154,98,682,393,967,960,922,856,805,762,475,402,365,341,336,285,247,221,177,169,163,131 }, +{ 66,222,74,135,87,29,145,2,337,294,52,172,138,331,6,7,25,226,42,97,632,70,192,112,353,609,525,415,461,204,287,500,26,174,75,43,324,1,58,32,220,5,232,544,580,85,620,635,278,45,746,64,426,568,448,396,262,122,173,151,69,20,95,19,61,526,140,65,889,86,307,14,104,280,21,46,81,355,92,38,872,22,387,651,186,648,113,194,416,72,163,673,90,24,35,155,49,16,330,37,792,0,888,243,17,36,76,861,10,48,849,67,644,227,50,4,89,853,334,63,27,314,312,12,825,712,91,298 }, +{ 45,17,106,209,255,119,186,5,263,207,454,29,2,48,425,243,21,496,62,290,3,270,400,408,52,155,136,659,171,14,56,513,50,80,84,32,378,46,61,655,666,742,221,58,383,38,1,54,311,306,240,721,181,440,502,430,334,129,72,536,227,123,76,790,592,214,89,328,281,555,34,787,241,148,64,215,663,287,587,37,11,405,162,27,237,504,57,90,130,152,541,179,12,211,548,41,36,552,184,4,741,115,431,292,449,869,229,96,77,507,223,128,183,40,7,86,51,249,205,245,161,6,738,236,103,151,59,10 }, +{ 213,88,260,120,93,373,141,30,100,450,166,36,372,321,459,473,264,180,110,326,1,225,144,704,717,351,82,855,530,269,466,352,217,265,190,22,274,131,96,539,165,86,457,291,28,244,64,187,318,752,39,349,661,330,9,160,202,219,77,410,197,44,908,254,116,49,137,968,276,317,125,406,31,521,523,435,15,98,228,128,32,299,35,662,293,143,115,21,934,778,224,33,856,923,876,854,689,403,371,341,10,935,851,498,437,8,922,48,642,776,903,839,836,730,613,365,268,242,55,0,944,899,492,898,615,385,304,285 }, +{ 266,57,152,381,471,313,369,99,229,12,339,62,157,77,4,37,188,40,475,162,38,3,452,775,129,184,403,17,59,128,11,432,202,111,453,33,56,183,291,401,216,361,328,102,136,402,79,54,440,14,139,880,123,494,51,23,514,277,507,130,757,474,377,21,94,529,177,548,421,349,64,76,211,90,117,89,72,308,13,318,383,5,141,210,134,556,342,153,305,497,257,555,119,485,84,269,275,106,670,2,115,477,488,45,196,41,300,205,32,542,10,543,304,431,86,180,504,19,27,82,179,36,629,249,46,50,237,245 }, +{ 352,217,317,141,752,372,365,180,341,15,349,77,864,21,291,244,115,13,120,269,1,498,5,901,579,98,144,64,23,48,482,351,51,237,102,201,82,437,125,137,318,4,2,247,202,0,31,854,203,143,253,260,32,177,160,490,10,96,110,44,22,494,251,33,128,403,9,3,898,717,164,28,197,72,93,11,873,450,36,165,386,95,373,6,223,661,30,12,49,922,342,206,523,16,457,127,109,468,308,391,116,531,332,473,187,39,88,35,730,453,326,221,7,719,69,86,105,100,83,851,475,90,350,230,678,421,101,304 }, +{ 14,514,369,880,102,403,377,51,719,485,153,23,453,401,457,11,40,13,328,12,57,4,33,38,629,236,670,54,730,117,111,361,961,59,37,134,99,758,757,165,2,46,386,412,421,391,277,29,308,543,477,494,188,600,6,196,21,542,197,139,300,739,475,52,899,79,509,523,488,775,583,283,231,7,803,552,32,5,402,89,828,3,507,176,77,50,15,155,211,64,17,569,215,115,18,381,237,305,266,202,90,34,342,194,128,62,555,389,242,125,108,65,0,471,338,136,56,548,506,221,181,133,10,440,114,248,95,1 }, +{ 107,172,7,359,126,92,14,135,314,278,60,150,298,46,392,279,232,192,2,441,356,330,357,16,32,380,97,534,423,581,35,526,38,448,493,132,52,288,246,660,5,121,66,24,230,324,572,21,387,226,462,259,247,95,220,146,140,77,18,508,147,262,90,48,312,707,20,71,603,54,33,195,550,362,86,236,108,739,199,830,23,64,43,29,895,802,451,22,36,28,929,294,606,50,87,70,501,13,808,177,55,1,194,178,711,316,4,0,102,590,366,49,893,600,37,582,309,872,267,117,388,241,620,115,786,939,571,360 }, +{ 59,4,90,45,216,13,25,0,177,23,77,51,27,95,72,26,115,65,12,91,210,123,275,37,389,19,102,33,11,49,22,18,194,5,214,21,85,53,48,202,343,291,31,57,6,128,42,746,93,73,58,44,32,196,283,81,319,61,141,249,153,64,138,117,422,355,40,348,139,403,789,145,788,300,247,240,134,74,34,804,619,370,104,86,38,1,304,180,524,494,217,20,597,544,318,352,323,233,174,114,76,17,475,280,204,588,342,285,14,3,43,725,287,7,888,636,235,52,29,63,337,232,122,784,125,397,817,678 }, +{ 5,315,416,49,455,639,202,350,77,408,21,197,137,450,402,13,61,509,329,113,713,344,569,347,401,48,0,841,494,318,734,749,64,70,308,95,903,120,342,884,237,557,32,194,546,115,845,1,23,165,663,128,873,102,291,518,22,58,817,391,498,263,17,33,221,269,403,923,260,105,241,125,51,196,312,39,10,31,153,234,112,523,158,18,4,265,12,141,9,159,928,623,326,207,25,177,310,3,2,859,98,28,65,30,163,11,19,275,491,290,6,117,541,16,15,124,76,72,27,922,210,44,341,349,134,773,147,24 }, +{ 130,47,381,390,59,90,200,472,214,714,65,289,6,122,874,85,64,29,751,648,52,50,74,875,247,194,624,249,288,26,312,437,32,217,630,881,4,123,95,78,835,352,196,665,519,33,57,711,524,954,108,42,19,77,22,153,597,416,412,0,145,444,27,243,25,14,183,304,117,453,51,256,141,730,102,177,134,236,315,680,86,112,34,11,115,235,287,237,113,45,283,151,317,588,579,99,3,752,216,342,813,128,445,864,180,56,46,28,18,73,12,23,114,13,389,53,644,719,21,396,58,17,372,947,137,316,10,250 }, +{ 51,453,23,719,13,730,165,457,37,197,99,12,386,401,475,961,4,17,11,64,59,308,54,115,57,38,328,758,391,6,5,2,899,3,753,403,32,523,670,10,509,40,33,421,629,120,21,65,19,22,0,202,125,95,569,117,90,558,29,26,514,494,1,775,128,134,14,450,361,34,9,86,194,177,350,269,72,27,25,7,880,757,111,62,153,316,236,141,50,56,260,217,196,867,546,161,130,106,77,48,41,31,16,8,317,152,468,242,221,136,734,80,89,968,949,862,814,801,717,704,495,469,440,428,412,383,378,326 }, +{ 15,13,1,5,23,2,7,0,6,3,12,51,4,180,115,21,9,165,457,197,141,352,11,14,202,217,10,37,8,32,341,120,22,117,752,269,16,77,134,961,901,719,318,48,317,365,33,110,93,31,569,18,102,28,40,260,17,509,128,44,153,137,82,498,59,629,351,72,386,403,36,49,401,453,730,308,196,450,89,873,30,523,125,99,391,326,177,98,64,247,494,854,24,291,95,475,38,86,482,39,203,922,372,349,116,90,144,57,35,758,55,864,221,468,244,210,421,139,817,76,373,899,54,105,19,304,342,96 }, +{ 0,9,35,28,68,24,67,65,1,16,18,114,69,103,50,101,149,22,175,124,55,39,12,218,133,96,154,189,5,83,21,71,23,7,336,433,251,13,49,75,118,335,2,51,48,486,30,14,10,283,181,745,115,223,137,54,230,109,418,37,345,64,128,141,108,281,99,36,60,100,202,956,537,163,532,480,221,766,302,596,487,95,252,346,58,158,46,180,217,361,237,70,398,86,269,160,31,32,105,657,443,140,285,125,87,212,166,167,502,6,88,375,165,323,831,317,754,29,318,439,77,98,364,38,197,429,44,765 }, +{ 28,105,22,320,109,49,301,0,9,170,95,1,35,55,127,65,24,168,98,159,713,16,512,31,395,36,623,2,7,293,740,14,338,347,424,185,286,12,44,23,21,169,124,5,158,68,67,928,13,371,18,299,242,125,51,289,175,916,64,761,479,374,39,737,685,154,48,272,6,114,599,116,10,86,141,37,194,83,149,506,327,312,841,202,763,237,50,900,870,538,284,115,131,420,346,137,654,385,456,165,187,762,30,276,239,32,308,69,143,269,429,96,570,71,128,180,933,160,164,46,197,221,401,634,965,219,101,318 }, +{ 77,13,51,102,4,59,23,33,202,210,115,40,403,177,128,196,141,153,117,64,494,269,318,134,475,217,342,0,291,11,90,453,22,402,137,15,216,139,10,180,275,86,95,65,57,6,36,18,523,1,125,21,317,365,197,49,28,421,32,14,352,25,19,7,2,899,730,719,391,341,152,24,401,48,27,17,12,901,247,123,114,16,9,111,99,26,349,285,576,50,20,3,386,372,326,260,194,120,110,351,283,482,293,242,165,96,29,37,30,817,801,498,457,450,393,373,299,237,214,203,615,569,116,93,34,82,958,805 }, +{ 13,23,77,51,33,141,115,102,0,217,10,2,6,4,7,64,22,1,11,177,180,40,3,14,202,269,9,291,352,15,165,197,17,128,317,153,196,5,318,18,372,117,16,28,59,36,19,137,95,210,237,247,125,49,86,349,341,304,134,365,24,275,12,31,27,453,403,752,25,143,308,26,57,20,901,120,475,44,401,457,29,498,90,139,65,8,391,93,342,494,216,509,164,98,99,35,55,386,244,111,32,45,37,21,260,38,110,56,450,105,39,730,402,523,46,437,82,30,719,569,203,961,873,326,285,194,116,421 }, +{ 456,116,492,268,949,867,203,51,719,8,391,918,791,457,730,499,13,386,23,206,685,125,31,551,170,870,93,417,401,10,22,479,506,338,940,44,509,143,64,692,670,558,453,0,473,197,523,758,629,341,165,1,564,55,899,762,308,961,421,959,36,638,115,569,801,180,642,86,299,164,28,37,141,965,498,559,9,5,120,237,95,546,260,873,599,137,253,12,244,903,901,2,817,752,728,128,352,450,105,202,7,615,127,365,958,21,301,49,951,403,740,326,239,898,373,922,475,6,854,242,15,3,318,4,269,98,65,99 }, +{ 17,237,106,62,180,45,136,32,498,64,115,41,255,129,546,752,864,197,21,227,241,490,352,482,57,123,292,350,247,509,449,162,365,468,214,38,23,13,4,476,148,76,437,155,507,141,165,77,3,720,317,290,270,873,211,164,72,153,209,117,5,659,54,48,249,217,341,186,710,33,40,14,12,496,119,11,519,90,183,618,139,179,37,328,579,221,431,248,372,405,130,59,99,400,263,205,425,2,358,349,901,51,177,171,89,428,50,454,304,207,542,1,457,308,734,721,391,316,29,569,94,243,143,339,196,313,128,111 }, +{ 1,5,180,15,2,4,0,352,3,13,901,341,7,752,6,141,217,23,365,317,115,197,21,51,165,269,12,11,9,202,31,33,77,569,44,93,318,137,110,120,36,10,22,372,260,498,116,64,32,873,125,48,102,308,8,349,98,482,291,386,401,14,373,326,28,237,37,55,86,134,203,457,391,16,117,177,253,144,509,421,127,153,40,206,403,961,864,468,221,494,437,453,18,17,196,304,143,128,96,854,450,72,247,35,579,89,642,758,82,342,160,629,719,282,811,59,351,922,730,95,638,523,210,546,332,661,49,734 }, +{ 141,205,497,216,269,152,588,59,452,128,4,76,352,875,188,77,79,11,94,678,947,339,954,217,471,372,90,529,72,318,247,64,32,89,177,12,288,37,1,304,349,202,5,51,291,33,474,102,111,23,115,21,99,179,864,38,148,377,13,460,431,498,437,316,180,2,961,40,358,542,137,490,405,241,464,317,3,45,54,7,184,196,17,10,402,752,245,342,210,14,873,48,143,285,153,257,197,308,292,0,36,569,769,237,134,482,139,275,165,468,341,629,413,734,86,476,365,6,300,851,117,751,494,401,270,229,453,29 }, +{ 247,64,317,217,237,437,180,498,349,115,752,579,304,372,864,482,291,141,352,468,197,177,13,391,164,490,23,546,33,365,77,153,72,216,954,597,277,10,708,269,134,569,275,51,695,509,318,179,0,678,244,140,312,640,117,76,629,196,751,128,36,953,674,260,102,901,32,21,22,225,401,86,717,143,92,873,351,16,133,114,191,386,253,165,69,59,9,458,341,202,149,82,649,35,453,398,166,100,95,93,90,125,15,373,330,923,316,48,854,586,213,486,230,922,5,411,823,734,189,139,103,65,50,24,18,12,830,167 }, +{ 2,1,5,7,6,3,77,0,141,13,180,15,217,64,33,23,102,10,352,14,117,9,11,197,165,40,269,17,291,4,115,134,12,153,341,317,752,372,237,51,349,22,498,202,318,16,457,128,196,36,177,365,32,21,59,19,125,901,342,8,86,120,139,93,45,961,57,95,38,143,509,28,29,391,111,210,27,260,873,244,82,137,18,386,164,37,719,25,48,31,304,49,864,98,402,275,569,110,351,629,253,546,26,41,90,494,50,730,56,523,453,44,54,144,24,99,30,403,678,76,898,450,437,55,954,482,308,277 }, +{ 11,40,38,328,542,33,339,313,12,377,157,775,485,99,51,471,41,369,23,37,475,57,54,457,14,117,13,188,305,629,102,403,79,4,139,514,880,961,111,266,719,152,248,474,134,453,401,153,211,342,477,21,2,59,361,89,587,277,94,29,308,196,64,32,413,77,229,210,184,215,402,128,431,381,46,670,5,247,197,165,556,757,386,115,300,50,17,391,803,494,875,490,730,177,162,450,421,275,202,0,6,1,257,76,72,65,48,19,10,129,569,236,130,15,7,555,901,898,588,86,9,543,488,90,452,749,619,507 }, +{ 77,102,33,196,40,51,202,23,153,128,117,13,342,64,134,141,4,59,0,269,210,177,22,318,137,403,65,86,10,475,139,453,95,115,28,99,11,165,217,36,180,197,49,402,291,125,1,352,18,15,494,421,194,275,31,300,110,120,57,90,93,12,237,401,317,6,457,14,2,82,24,114,260,9,386,44,285,108,361,98,16,7,21,349,326,216,5,116,730,341,372,19,133,719,203,48,32,391,39,25,143,111,105,67,576,752,670,961,899,308,498,37,351,304,20,30,283,901,523,365,27,244,208,55,3,164,485,8 }, +{ 472,34,80,495,250,469,176,389,527,17,14,161,53,231,4,128,56,283,216,106,84,57,27,483,177,59,119,503,436,45,585,297,194,29,378,3,42,62,269,136,26,40,11,2,862,678,619,33,73,236,255,514,719,200,25,6,64,240,179,141,52,102,789,361,618,129,597,5,153,611,349,205,65,245,803,402,210,457,123,383,90,304,667,318,814,504,328,133,130,51,32,48,684,108,714,412,215,13,139,19,95,77,47,275,99,12,311,211,165,1,432,207,322,196,117,61,23,524,152,115,369,183,134,114,573,54,162,46 }, +{ 752,352,317,180,141,217,365,269,244,341,498,115,253,901,1,372,202,21,318,4,5,23,700,717,13,137,2,349,197,864,10,873,143,7,482,0,51,3,64,11,67,308,531,12,8,6,28,237,22,31,468,579,533,291,160,221,35,30,96,48,55,33,9,961,120,49,44,39,32,247,83,69,450,326,260,77,36,98,851,509,165,37,16,457,437,110,93,88,82,14,345,822,765,638,421,219,190,131,128,114,203,144,99,800,401,844,453,125,494,475,373,351,241,206,170,164,148,134,127,116,105,100,86,40,38,18,811,19 }, +{ 9,39,101,265,18,333,520,329,100,593,553,364,310,252,167,16,68,604,0,363,404,118,166,121,254,158,272,24,60,271,212,286,639,327,159,35,146,1,109,30,455,411,793,105,557,49,132,647,31,71,621,21,656,354,438,627,676,688,98,48,682,28,156,538,190,22,5,55,23,195,65,44,848,264,51,446,857,709,127,374,781,447,191,344,865,625,821,13,124,96,93,7,578,125,419,907,360,463,32,116,126,37,274,777,88,731,108,67,154,92,95,36,199,12,137,131,10,562,128,326,664,203,382,50,806,242,921,435 }, +{ 15,1,901,180,2,4,5,3,0,752,7,6,341,13,115,317,365,23,217,141,9,197,352,165,51,21,137,11,36,202,12,33,22,873,308,77,269,10,64,86,498,569,31,372,55,93,40,120,160,44,509,318,349,482,638,8,117,37,116,164,102,32,28,401,110,128,196,144,206,244,153,457,468,951,17,291,16,203,96,260,811,143,373,642,125,134,437,386,546,268,247,177,14,48,758,717,719,391,579,72,421,89,661,629,111,730,559,961,221,59,403,523,304,851,35,30,169,854,494,127,82,326,450,251,898,417,475,734 }, +{ 131,39,829,166,613,827,716,578,9,100,224,310,406,30,98,616,228,1,254,856,219,438,938,190,31,846,265,931,0,127,96,625,274,924,44,371,101,385,116,252,272,863,51,137,88,21,333,731,557,36,23,404,48,223,125,49,264,160,187,737,242,105,28,258,144,93,13,530,158,944,382,284,395,203,812,593,518,442,5,456,836,128,326,293,68,329,403,35,202,816,77,115,83,909,688,86,890,478,120,64,22,639,16,165,276,393,455,871,410,201,286,299,33,576,960,656,24,217,95,159,110,32,367,421,492,221,55,102 }, +{ 17,64,62,141,106,136,751,292,129,352,41,38,954,86,476,214,217,128,177,32,237,947,180,162,123,209,710,269,519,247,90,864,157,77,318,99,57,76,59,4,437,40,179,358,11,45,618,119,313,5,304,211,597,148,875,23,249,197,130,95,507,37,54,3,216,457,248,58,210,115,288,12,425,678,186,164,328,72,454,339,245,102,80,498,312,165,372,139,155,2,152,56,33,21,655,243,720,183,207,14,29,241,117,266,290,471,137,84,51,188,305,275,205,449,7,263,48,542,13,270,742,171,752,509,61,317,349,369 }, +{ 42,25,235,650,736,65,605,630,233,343,123,256,122,85,26,416,6,389,63,141,249,368,444,194,511,174,544,19,108,597,348,524,138,90,27,183,32,370,304,525,84,56,53,283,789,445,18,78,280,91,130,947,588,619,45,355,17,680,73,4,0,222,112,3,813,119,145,64,678,297,250,80,21,573,523,86,214,216,102,76,11,746,40,33,269,240,29,289,624,177,323,450,57,24,561,77,152,114,184,74,287,28,396,665,648,378,372,137,37,5,390,106,70,22,847,51,49,349,874,47,881,23,817,432,337,243,153,124 }, +{ 184,229,152,432,266,452,57,497,381,619,17,313,471,257,59,129,369,339,4,12,205,99,157,77,3,5,45,128,123,106,62,202,162,32,21,216,40,136,11,188,119,249,402,349,2,403,14,37,38,54,64,291,618,524,102,475,76,177,80,90,214,33,79,141,453,23,210,111,245,372,137,27,318,269,217,494,775,86,94,139,10,1,19,115,51,401,56,769,183,361,84,529,474,277,757,72,48,880,6,247,29,209,710,179,377,89,41,292,285,328,13,588,180,342,130,556,36,477,308,275,460,378,61,197,196,0,165,421 }, +{ 137,202,160,131,860,567,318,36,295,141,843,39,800,93,30,105,187,224,276,201,261,943,964,98,49,269,219,851,116,9,22,473,1,352,203,127,822,100,206,699,144,268,662,244,253,10,717,535,332,120,44,258,143,31,64,450,704,96,859,190,180,115,55,365,531,326,95,217,28,110,564,752,86,373,284,228,317,21,77,341,13,48,434,221,197,51,911,940,159,23,384,533,260,494,559,935,291,901,88,109,574,282,128,442,367,308,959,617,5,83,489,299,251,728,170,164,165,177,492,406,926,417,293,401,349,871,125,968 }, +{ 125,64,493,0,49,165,35,293,55,93,18,98,9,325,68,10,279,137,31,48,453,389,194,197,147,13,788,14,132,95,107,77,391,371,342,174,61,43,581,105,28,22,5,259,319,104,758,671,590,128,44,32,20,767,761,457,146,121,725,465,198,126,757,289,116,100,23,21,110,763,612,12,663,199,142,120,102,101,7,427,4,356,37,941,963,867,848,498,156,88,86,58,51,33,690,558,376,180,2,864,163,955,70,623,804,422,657,202,1,40,534,90,649,470,798,522,392,352,945,502,386,359,237,221,203,177,159,144 }, +{ 15,33,4,77,13,102,23,40,32,5,11,349,51,177,21,141,117,93,202,59,110,153,64,291,318,196,31,217,269,115,10,180,82,137,1,8,44,3,98,125,134,0,165,22,12,128,351,17,95,116,2,304,120,139,403,457,210,197,49,341,453,144,372,450,494,86,48,352,386,523,36,90,719,898,6,275,30,365,57,730,28,9,317,247,326,854,76,373,475,7,72,37,421,817,638,901,401,111,961,342,899,216,402,277,260,18,237,758,569,203,99,629,437,535,39,61,16,96,752,14,300,208,922,704,105,83,308,143 }, +{ 110,854,253,811,352,141,951,661,244,642,180,752,143,498,384,269,559,317,922,10,911,160,351,533,365,373,206,902,638,873,332,261,345,260,137,717,116,843,31,417,120,44,959,531,217,341,535,201,125,36,699,860,82,55,564,434,926,318,268,940,197,901,164,574,864,276,251,824,295,876,127,450,64,617,943,93,258,776,15,282,326,165,546,817,855,851,203,96,187,144,728,83,1,372,601,219,224,762,237,284,509,21,170,169,499,98,391,479,115,768,482,473,406,86,898,662,349,48,202,131,51,5,0,896,871,401,238,228 }, +{ 2,29,70,75,220,52,112,331,145,1,163,26,74,324,6,69,58,307,19,409,278,287,38,226,46,223,394,87,25,294,606,50,66,14,632,135,583,151,42,67,45,27,396,357,171,380,675,138,5,21,113,267,262,97,24,7,309,764,635,53,537,222,103,48,335,500,83,32,122,16,550,186,96,17,73,334,849,155,189,644,852,802,37,61,54,64,571,140,35,12,582,651,461,486,853,108,36,80,18,133,451,315,624,65,337,785,573,366,445,72,86,774,92,89,297,400,10,114,95,416,587,648,462,172,71,600,820,238 }, +{ 23,13,77,51,115,177,64,141,33,102,4,217,202,40,128,269,291,59,0,180,10,2,6,7,318,11,196,14,137,90,32,22,95,153,352,210,9,1,117,15,165,16,197,49,3,125,86,237,349,18,403,216,19,17,247,21,317,304,342,24,341,134,475,453,12,275,25,36,28,20,98,494,372,57,31,93,65,44,110,27,26,120,139,365,752,111,37,35,326,164,116,402,901,260,457,30,288,421,105,56,498,29,144,391,82,203,5,401,308,285,719,386,99,143,48,39,351,55,194,437,312,450,96,523,76,509,244,316 }, +{ 340,897,691,478,914,658,724,382,363,812,698,682,100,156,166,521,264,447,909,411,1,404,88,354,303,438,96,296,274,772,39,656,418,921,9,30,410,144,23,744,848,639,664,435,21,586,919,13,271,31,335,254,51,5,850,98,367,225,960,77,203,759,621,190,48,127,676,120,32,668,33,83,4,67,44,36,272,217,69,291,131,284,286,360,821,101,285,116,242,18,223,686,102,265,905,842,317,329,93,68,82,822,195,128,125,576,692,351,103,64,238,115,652,475,349,765,326,141,966,578,110,118,0,260,403,201,163,105 }, +{ 310,18,9,326,265,252,121,51,159,77,195,105,101,120,363,33,24,354,271,102,272,709,167,98,16,13,132,639,23,158,260,55,333,327,704,450,35,170,60,202,49,557,125,93,411,254,1,364,95,455,146,817,28,520,338,494,7,286,137,156,109,39,21,14,48,128,116,64,40,31,859,320,118,212,141,360,890,318,293,4,523,615,269,576,169,20,165,153,75,196,329,373,210,177,92,69,0,301,291,781,479,371,217,627,407,403,342,127,71,44,36,910,374,5,50,668,647,351,936,682,578,538,593,553,203,185,180,110 }, +{ 57,313,471,99,369,12,339,157,266,152,38,475,328,453,775,37,403,401,514,40,188,342,139,77,11,59,377,361,229,474,33,4,51,880,277,54,3,211,14,102,62,381,23,111,162,196,130,529,556,305,757,275,128,79,115,629,13,402,421,507,308,485,210,129,123,184,177,494,41,477,153,488,117,542,452,248,300,216,202,236,134,94,670,431,89,64,17,183,440,569,136,555,72,76,734,432,457,543,961,257,215,291,304,10,413,15,205,548,90,56,2,21,46,165,318,247,349,197,86,32,0,283,412,141,36,828,386,82 }, +{ 16,24,35,60,140,71,92,7,14,230,189,108,18,69,46,150,388,246,278,2,172,68,1,451,38,330,135,126,236,309,149,443,50,267,121,565,67,582,21,75,48,462,52,563,594,314,29,399,66,191,877,103,572,55,232,366,97,696,357,380,733,167,83,220,517,5,28,674,74,12,65,0,54,9,118,262,335,146,516,32,37,653,915,22,36,133,251,96,324,87,273,394,64,199,723,223,107,10,486,458,711,13,6,95,163,571,86,726,448,212,641,192,345,70,181,132,23,49,114,550,98,20,271,606,298,633,99,603 }, +{ 206,417,940,959,93,473,728,559,499,203,137,202,8,450,564,31,44,120,269,260,318,141,116,326,244,253,10,127,268,143,22,125,98,817,434,1,373,144,128,615,51,638,23,384,692,523,341,64,922,0,851,13,489,110,352,105,9,951,717,86,28,386,367,403,299,704,642,242,55,551,901,36,958,282,859,160,77,49,291,494,801,968,30,180,492,365,911,661,498,276,854,165,164,873,37,762,456,197,21,317,12,15,5,7,569,285,918,421,752,629,576,479,115,95,2,349,96,401,758,899,393,170,898,217,457,391,48,39 }, +{ 15,1,2,13,0,5,23,7,4,3,6,51,9,217,77,341,115,10,8,11,33,349,12,317,291,180,177,14,102,16,365,120,22,901,304,165,457,21,372,260,197,32,18,40,403,453,31,202,82,961,719,475,28,247,523,117,450,64,93,141,730,110,30,352,351,752,569,44,401,153,17,386,196,59,308,24,134,36,854,494,318,899,48,137,342,326,125,629,90,49,128,437,37,817,95,275,922,421,498,758,98,210,111,203,99,237,391,116,216,57,482,144,373,39,35,20,19,468,139,615,55,221,288,898,873,509,244,86 }, +{ 2,1,14,5,50,48,46,290,21,45,29,32,263,155,207,52,38,425,171,76,408,72,449,17,292,227,89,58,513,400,428,119,476,7,61,54,67,720,75,241,243,186,502,655,69,221,36,148,24,96,6,306,3,214,106,37,0,103,223,10,179,281,16,83,350,64,90,129,430,464,181,663,666,22,413,405,18,240,710,84,262,790,123,431,28,12,741,163,115,460,255,536,56,128,35,334,141,9,220,65,205,51,86,659,99,249,23,541,95,245,618,209,519,202,70,592,270,237,528,62,27,217,133,4,394,137,114,675 }, +{ 132,121,354,167,146,463,271,195,668,446,98,223,407,360,18,212,522,447,1,781,60,48,591,411,156,562,586,363,664,21,777,393,199,293,125,807,936,9,23,590,163,16,13,658,5,126,541,55,101,941,107,259,621,191,51,834,786,68,647,765,31,150,929,759,284,35,71,49,24,465,221,118,520,7,92,883,116,608,279,727,535,70,96,44,687,478,105,50,346,697,467,963,281,33,10,566,22,581,626,93,77,296,493,4,102,108,115,640,147,75,39,770,87,32,914,127,144,598,178,0,117,273,12,2,37,783,691,932 }, +{ 131,578,371,219,224,716,105,616,737,385,187,761,258,916,254,159,49,910,9,623,98,127,836,924,272,286,442,39,28,688,890,320,627,518,293,0,944,871,574,242,31,395,22,201,327,44,116,158,276,109,908,301,860,284,36,51,23,137,95,926,713,512,30,160,125,333,170,239,96,21,456,347,228,13,86,64,128,1,68,101,839,202,506,424,295,662,938,144,55,168,24,567,48,843,406,83,65,185,613,438,203,268,35,165,492,244,299,902,221,384,16,141,115,166,827,93,10,829,37,364,763,261,169,269,5,656,434,685 }, +{ 302,467,484,97,453,6,398,124,69,36,51,14,421,298,1,66,273,87,74,523,81,426,2,403,67,168,18,386,886,756,701,801,158,13,65,0,26,23,475,24,758,86,22,108,719,25,547,615,401,159,117,423,150,730,847,563,154,75,19,646,29,7,505,817,189,278,457,165,42,458,717,572,267,138,782,531,429,153,135,450,134,49,700,208,958,671,715,622,336,244,172,143,114,95,85,63,60,52,650,197,46,899,140,92,160,28,10,791,885,718,327,314,12,5,610,109,43,703,673,670,370,341,326,289,38,35,805,879 }, +{ 190,30,778,530,539,88,100,625,382,1,960,410,731,274,96,840,957,435,321,795,748,264,669,438,466,39,166,131,36,418,144,265,9,44,228,213,23,219,224,921,223,160,406,251,31,863,83,98,310,116,21,613,13,557,203,51,128,0,252,367,335,137,254,5,924,521,284,352,829,48,765,856,258,475,827,69,201,93,49,909,404,716,238,101,616,822,33,421,32,456,593,217,125,127,944,752,67,286,276,679,931,831,329,403,816,158,77,812,221,772,317,639,37,35,28,242,120,268,578,50,230,966,686,494,187,551,478,285 }, +{ 141,202,128,2,269,1,64,5,180,3,318,33,197,6,352,15,7,102,77,0,134,13,137,10,196,153,165,120,117,14,17,11,12,82,110,4,9,237,23,291,260,494,93,51,403,217,21,498,752,450,342,341,31,32,351,22,326,125,402,457,317,143,86,36,115,19,203,40,111,961,285,16,48,475,98,116,44,678,365,95,8,37,57,28,244,27,18,901,49,45,864,569,349,373,386,391,453,59,523,144,719,139,509,25,854,372,38,24,56,898,194,164,947,79,29,817,94,253,99,873,954,730,55,65,597,61,26,546 }, +{ 44,201,567,489,116,662,224,268,131,219,434,295,187,144,31,276,699,384,137,110,442,258,36,160,228,261,367,613,93,30,64,120,908,244,284,203,260,141,202,385,1,9,269,940,39,855,253,918,98,96,373,22,406,856,326,105,206,143,318,10,217,127,55,523,115,77,125,717,617,86,49,13,836,51,28,23,574,332,128,83,190,180,871,839,371,393,944,352,317,21,164,473,935,197,450,341,959,0,177,911,840,254,531,165,291,716,418,899,800,88,829,282,827,494,48,492,661,854,5,351,100,82,299,851,822,15,860,365 }, +{ 51,12,23,15,99,37,13,10,453,165,117,38,0,197,629,569,82,115,401,120,64,134,22,474,457,11,110,719,31,93,260,9,14,475,111,32,153,79,1,94,21,40,308,128,125,8,28,5,18,54,403,351,3,44,180,202,89,450,328,33,961,2,139,36,4,49,77,45,141,523,326,386,730,48,17,217,30,431,148,405,317,237,29,98,16,341,775,413,196,365,352,55,318,72,758,116,6,59,24,7,477,898,734,509,58,39,203,95,372,482,86,854,19,391,421,402,269,144,494,90,102,291,922,817,57,373,899,27 }, +{ 135,7,172,2,92,140,66,52,97,74,324,14,226,29,232,46,38,380,87,262,314,357,278,330,16,298,571,448,35,126,60,220,620,606,75,6,24,192,107,69,246,230,331,1,5,267,294,70,622,353,222,853,550,563,71,572,583,138,150,600,189,500,25,43,50,309,21,526,32,872,12,174,54,58,37,20,893,802,22,48,145,86,64,580,462,95,67,18,888,42,950,65,387,36,171,108,451,112,10,501,26,726,335,441,103,785,83,359,204,582,279,337,461,49,0,72,423,45,443,409,61,68,356,28,392,163,673,114 }, +{ 125,386,391,23,963,60,51,949,165,221,21,13,541,393,118,719,150,197,326,758,421,791,517,801,566,558,308,48,362,7,834,670,453,551,173,401,203,102,43,20,5,71,36,457,251,77,697,279,140,867,33,126,115,32,92,149,422,743,367,232,193,0,770,4,98,509,40,674,81,18,341,11,783,192,577,546,397,16,494,510,508,217,189,104,705,610,330,2,596,105,823,293,202,117,10,314,796,64,862,629,475,468,281,246,242,38,403,29,474,298,31,27,14,858,414,95,942,779,773,569,523,430,317,301,172,134,116,91 }, +{ 85,6,42,138,235,25,222,174,525,256,746,26,289,64,280,214,544,65,32,337,90,204,355,348,74,312,95,415,145,122,233,609,416,66,194,19,29,630,835,63,22,87,45,237,874,5,605,353,112,86,519,343,135,17,648,76,736,70,287,249,180,681,0,288,21,580,27,123,444,4,226,192,52,247,81,1,56,751,216,78,58,75,49,91,792,23,48,53,183,396,108,59,61,28,3,636,624,2,208,84,370,368,12,207,37,114,10,151,153,389,197,172,51,673,72,33,671,597,18,115,125,31,730,573,179,141,73,250 }, +{ 1,14,50,24,5,67,46,2,69,103,18,54,58,48,16,38,83,96,0,35,28,502,21,36,45,181,155,12,61,7,223,513,430,22,270,65,108,9,75,10,37,133,540,29,32,290,71,52,17,171,238,114,218,72,236,55,99,309,807,70,149,328,89,433,163,227,834,68,64,23,189,51,666,6,766,765,221,115,474,86,60,366,552,541,488,13,487,243,425,95,592,536,76,780,141,477,767,186,128,663,267,251,3,794,49,741,137,418,263,202,160,207,545,27,543,920,335,428,388,408,400,150,760,148,124,106,19,269 }, +{ 811,351,642,951,180,752,110,638,253,10,352,854,197,82,365,564,873,341,499,55,143,244,535,36,498,559,901,417,22,661,141,9,28,282,165,30,206,898,373,35,509,260,115,922,728,8,39,332,49,317,31,44,762,964,93,15,911,533,203,160,1,217,120,391,137,24,116,33,105,102,479,943,77,569,717,338,134,117,968,125,965,164,64,473,127,196,153,531,384,269,601,308,98,37,959,23,177,13,867,109,617,291,864,482,169,21,372,242,546,843,434,824,692,40,32,4,551,299,758,5,468,11,629,903,12,89,949,791 }, +{ 51,23,13,453,403,12,475,115,4,15,165,202,523,719,21,457,386,99,308,37,401,2,730,5,197,32,494,0,33,1,120,450,10,59,102,128,17,14,117,3,961,77,153,9,217,569,11,196,134,899,421,40,318,391,247,90,6,629,64,7,16,57,210,48,341,177,141,269,38,260,402,180,22,468,29,27,758,317,291,817,25,19,72,18,56,361,326,133,304,54,221,757,236,34,26,288,300,275,670,365,514,509,125,237,36,65,139,137,108,45,76,52,28,498,351,801,82,805,576,114,89,61,352,41,615,24,8,854 }, +{ 120,13,23,141,77,51,260,217,202,326,1,137,291,269,93,102,82,21,203,450,351,15,180,110,165,318,352,5,128,177,373,48,854,197,64,922,523,317,96,36,349,32,0,386,372,144,33,2,9,125,752,115,59,12,210,7,457,16,817,90,403,244,367,14,898,237,160,28,35,342,719,6,275,10,18,494,304,37,30,341,50,39,24,498,730,365,391,22,473,901,4,86,223,285,247,116,31,704,453,678,83,221,661,216,44,69,61,615,201,421,65,402,8,475,268,401,11,468,49,29,98,88,899,300,242,68,3,418 }, +{ 1,5,22,12,0,2,36,21,28,48,10,14,86,32,54,50,37,7,49,9,23,65,51,55,202,96,95,13,24,208,128,3,137,323,67,17,6,99,4,16,168,18,38,194,83,115,114,281,58,45,64,318,141,745,402,46,269,31,160,480,77,103,503,105,11,403,164,69,35,218,181,72,133,29,822,433,735,430,75,180,223,89,109,584,244,341,197,361,289,165,657,169,401,239,757,177,389,98,124,217,851,238,159,33,158,956,30,59,143,70,102,39,308,44,494,754,40,253,90,155,61,766,163,540,221,76,270,756 }, +{ 219,127,98,258,23,308,301,51,910,401,276,616,284,170,395,293,105,165,22,13,327,242,512,125,201,944,115,900,374,320,109,924,964,763,272,239,567,28,860,629,391,131,116,386,55,197,935,453,843,341,9,943,743,365,506,206,457,261,758,295,36,180,670,31,95,237,538,535,662,44,224,456,185,558,332,64,911,479,0,143,169,569,492,634,10,841,317,421,867,338,282,253,49,144,685,740,384,110,901,468,187,734,719,86,417,844,509,268,12,564,141,286,713,762,918,475,299,120,1,578,164,137,159,403,870,168,551,498 }, +{ 64,180,237,5,80,165,61,58,498,250,297,197,186,2,752,864,34,445,95,869,881,17,311,391,231,115,29,151,546,549,3,312,247,483,153,469,45,27,22,365,334,73,26,136,933,62,56,495,32,52,243,215,21,90,472,592,396,509,288,651,48,738,106,53,490,482,161,211,11,316,287,177,13,369,635,378,141,86,262,667,119,663,216,128,179,40,19,209,50,164,719,457,145,23,10,352,176,241,196,527,666,171,833,269,383,125,758,14,46,70,341,507,317,873,579,464,255,400,37,875,405,210,117,33,143,331,84,6 }, +{ 77,13,102,23,64,33,141,2,115,51,1,0,10,7,177,217,6,269,180,40,3,14,202,128,22,15,318,291,196,5,197,165,153,9,117,352,210,4,237,95,17,134,16,11,125,137,86,18,317,139,12,31,93,59,28,36,49,341,24,275,304,19,349,365,110,44,342,143,403,27,120,29,719,752,457,498,164,372,111,45,203,453,82,25,569,391,8,494,216,144,98,21,247,386,475,26,401,402,30,312,37,99,57,65,20,901,38,678,244,116,326,260,56,308,450,32,35,509,300,34,961,597,194,730,48,629,55,351 }, +{ 15,120,450,51,23,13,202,523,153,196,260,457,719,386,326,4,730,128,318,141,21,11,64,403,453,33,77,32,475,269,95,5,494,125,102,165,48,12,98,1,115,2,401,117,116,10,0,180,40,197,817,7,9,308,99,899,3,352,137,90,16,37,6,18,14,237,22,17,59,217,421,402,134,8,291,49,31,961,82,28,177,670,341,351,342,247,61,758,221,194,19,391,30,317,44,93,214,365,24,57,27,20,275,25,241,216,312,285,29,288,65,576,349,629,70,72,26,39,304,498,36,96,569,123,210,46,289,854 }, +{ 2,5,1,29,45,14,58,207,263,425,52,32,46,76,186,72,292,50,7,61,476,655,408,227,48,38,155,21,720,89,17,75,243,119,6,449,171,148,306,70,241,163,106,334,214,592,54,400,36,179,90,64,790,663,24,666,84,3,16,67,69,240,10,464,56,405,496,128,0,710,74,86,270,129,22,290,460,519,255,209,220,18,141,428,223,123,659,205,96,65,19,513,83,37,4,12,27,25,112,103,115,358,66,23,9,202,95,262,249,221,51,151,28,26,767,59,35,77,350,87,137,780,245,40,409,99,237,618 }, +{ 15,4,13,11,5,23,21,32,1,40,141,3,33,2,180,17,197,64,12,269,31,352,44,117,165,102,202,120,37,318,153,0,6,137,51,10,196,341,134,22,7,49,77,752,59,217,128,48,260,203,125,237,901,82,93,317,115,365,498,90,14,110,342,111,450,95,177,873,72,326,61,8,494,244,457,57,45,19,36,210,139,386,96,144,56,89,509,143,98,76,372,275,719,27,9,160,403,94,351,349,546,854,704,678,817,391,947,253,453,304,99,569,864,308,401,247,29,70,216,758,717,670,475,474,961,116,523,221 }, +{ 214,76,5,129,710,249,618,123,45,460,2,257,17,179,769,205,245,519,207,61,184,106,162,29,209,90,119,32,1,58,6,14,255,292,183,128,77,229,64,21,141,3,655,48,27,38,52,19,263,57,59,4,40,497,151,25,202,152,464,72,7,26,80,99,102,306,311,269,33,115,288,130,318,524,86,54,177,790,62,358,50,243,452,137,46,10,84,186,454,0,425,51,12,148,619,11,210,56,23,556,22,240,112,266,402,36,217,216,37,432,476,136,227,65,70,403,738,155,237,95,111,194,381,139,241,317,180,13 }, +{ 51,23,141,1,202,13,120,21,326,15,269,137,180,165,318,197,352,5,128,48,260,2,77,0,217,12,33,102,7,403,450,203,93,9,32,110,386,115,16,14,64,6,36,4,82,523,373,457,125,18,494,237,291,351,24,342,196,96,37,453,475,817,3,752,391,177,244,615,50,144,28,854,730,210,35,719,99,30,8,317,341,401,160,31,10,44,901,86,221,98,421,22,349,402,576,365,116,922,153,308,39,704,40,72,20,285,17,59,498,372,367,393,661,49,899,67,95,551,70,55,90,275,29,247,89,83,65,69 }, +{ 7,135,2,172,97,87,66,29,52,14,112,70,58,232,337,92,46,226,74,43,262,192,331,461,20,409,16,307,5,294,107,155,334,186,171,278,140,38,151,32,849,324,415,35,75,21,25,45,609,24,227,6,145,1,298,222,60,448,61,64,620,353,387,126,37,86,69,287,549,356,173,48,400,330,644,10,314,583,18,12,22,113,220,526,54,128,359,49,853,36,95,0,76,525,163,67,568,50,65,872,28,104,72,243,138,90,137,587,71,357,4,141,17,246,544,26,230,888,177,194,380,122,474,311,315,635,83,631 }, +{ 574,187,926,860,384,258,531,434,269,110,160,244,141,253,116,871,533,940,261,717,699,959,902,219,661,224,201,373,143,36,911,352,137,260,268,31,851,617,817,728,10,318,523,180,206,295,332,144,811,489,44,843,922,64,251,662,816,120,450,55,127,93,276,855,535,839,98,131,752,951,284,559,824,164,406,642,854,203,1,864,202,317,237,228,365,345,776,498,326,567,442,197,125,282,341,367,96,21,217,417,13,943,86,351,83,679,115,908,564,954,473,82,800,896,165,968,23,128,35,669,48,5,22,170,901,873,169,385 }, +{ 354,156,296,586,1,98,850,163,223,698,379,291,64,44,31,937,48,340,96,349,182,125,237,120,658,77,284,39,30,367,23,385,221,195,293,18,202,144,105,774,128,771,687,541,342,197,116,49,371,121,118,93,5,626,360,16,692,591,453,421,386,352,318,242,153,117,36,10,795,759,260,141,463,372,326,102,87,33,697,11,4,931,446,13,35,948,103,958,899,827,781,752,664,638,558,551,497,475,457,415,304,269,217,205,201,179,166,140,131,127,126,113,107,100,92,89,88,72,55,37,24,883,203,70,21,7,914,846 }, +{ 250,34,472,80,495,483,194,469,141,176,17,64,53,161,33,814,4,667,527,73,27,231,84,56,833,269,14,102,297,585,283,503,59,597,119,106,77,862,255,128,789,11,90,153,209,389,95,887,57,76,3,240,58,23,678,61,236,40,202,134,113,117,151,51,123,304,342,136,369,137,22,237,86,65,45,32,62,445,412,311,200,573,129,436,803,328,19,10,611,196,177,133,491,214,514,72,36,947,26,5,52,139,402,378,318,504,114,0,216,180,287,322,13,381,396,358,629,475,285,46,28,2,383,179,130,112,738,247 }, +{ 97,140,66,172,7,192,314,81,92,426,74,232,298,462,501,43,508,330,69,135,279,6,230,189,24,48,21,885,104,14,448,861,38,712,126,173,715,572,60,563,246,267,16,91,633,423,71,526,52,36,357,29,362,387,18,204,63,443,32,568,324,681,879,441,138,107,67,22,20,0,150,517,85,636,607,12,825,5,893,2,174,278,65,37,149,28,726,86,87,35,779,380,560,42,125,565,95,750,83,124,46,1,49,370,251,653,77,64,877,25,4,10,221,54,33,61,672,40,23,451,98,102,31,9,51,120,348,915 }, +{ 44,31,116,144,268,434,489,367,918,492,384,948,393,127,98,9,940,22,206,105,203,0,855,332,49,93,395,959,28,456,617,911,293,137,1,299,39,125,282,202,51,141,473,55,963,120,417,326,23,95,159,21,599,109,276,730,242,13,36,10,131,8,272,284,253,551,219,30,318,523,2,352,165,512,403,269,18,64,5,7,899,244,16,301,616,450,158,115,12,170,559,935,160,924,143,260,791,386,86,692,201,421,128,457,24,719,728,499,373,37,261,916,110,197,578,48,951,239,286,576,811,494,308,35,96,564,14,498 }, +{ 202,128,141,3,51,64,15,269,5,120,33,2,102,13,403,318,1,23,196,197,153,10,165,17,0,137,82,6,110,117,180,260,453,93,352,12,475,14,125,7,351,450,494,22,11,523,457,402,31,326,77,342,86,99,386,237,9,32,36,21,19,4,134,44,27,203,18,730,37,115,8,373,95,817,421,719,40,291,139,401,49,143,341,98,285,57,111,116,25,961,498,28,391,38,854,317,144,26,752,56,16,217,308,65,277,899,365,898,509,59,45,79,922,48,72,30,41,678,757,569,24,177,615,34,29,864,873,244 }, +{ 127,98,31,105,395,293,28,9,512,299,22,44,0,49,763,599,242,685,109,284,320,159,276,95,1,116,456,870,55,286,900,125,492,36,713,506,158,51,23,935,393,24,327,16,35,239,623,144,201,13,2,65,272,21,39,7,338,12,168,141,18,202,424,5,268,14,170,347,137,86,489,841,68,367,918,301,269,64,374,185,124,165,48,567,479,221,403,662,37,963,308,131,30,401,6,318,67,616,948,115,83,197,237,434,160,295,96,169,128,421,203,154,10,143,538,194,916,352,101,371,253,928,910,261,180,164,244,737 }, +{ 7,24,97,124,2,69,66,1,14,92,18,6,140,67,20,71,43,16,21,118,29,23,149,52,150,51,32,81,5,429,189,48,36,484,172,273,38,60,65,28,22,25,74,83,46,91,13,0,298,314,12,420,610,154,42,108,398,701,467,135,35,505,173,221,576,104,421,168,336,423,37,232,403,302,143,185,847,267,137,115,10,703,158,251,308,508,330,75,68,49,86,61,26,253,202,230,107,401,64,799,388,128,99,443,102,72,607,165,426,453,570,387,547,326,105,125,85,109,517,386,95,138,615,87,126,192,671,63 }, +{ 1,349,64,303,284,442,622,202,691,141,652,447,682,67,717,917,340,237,154,352,269,919,752,547,429,411,197,293,260,44,335,180,160,863,238,201,191,167,318,9,751,730,98,453,33,418,956,475,360,69,77,765,217,140,96,31,153,120,87,724,664,389,323,268,206,116,922,888,102,948,854,842,805,196,127,399,586,658,873,851,850,796,781,695,657,385,330,244,149,137,0,662,367,351,82,947,774,551,498,363,225,146,125,35,212,909,899,848,807,776,772,770,759,726,604,576,541,523,480,450,403,393,372,332,329,327,301,296 }, +{ 1,2,141,15,7,10,180,3,5,6,64,0,13,197,77,269,33,11,352,165,9,102,14,4,349,12,291,341,23,237,134,752,22,120,117,202,498,128,36,217,318,115,51,17,317,40,153,93,365,110,342,961,82,31,864,901,125,137,59,143,196,372,16,86,21,260,111,44,873,32,49,947,457,95,57,244,326,8,351,37,28,569,954,203,19,373,678,18,139,450,29,30,48,386,72,27,79,45,854,391,144,509,55,546,94,99,164,98,116,20,76,83,253,56,898,922,38,25,24,39,61,177,210,719,58,523,494,402 }, +{ 139,99,12,453,196,277,775,475,40,401,215,33,51,111,130,23,11,77,313,211,14,38,266,129,474,477,37,328,339,369,153,719,162,152,54,231,3,308,57,700,117,403,305,188,629,102,880,457,569,183,62,514,229,961,157,556,555,115,176,41,177,471,248,13,507,670,342,4,542,257,17,123,291,236,72,79,304,134,452,89,34,184,90,2,59,76,383,488,94,421,80,32,361,128,440,377,202,119,56,316,21,494,46,165,757,288,45,543,197,528,730,585,249,431,136,5,0,432,52,210,402,120,485,29,1,529,548,536 }, +{ 77,102,33,141,128,202,23,64,51,59,269,153,4,40,115,177,13,196,318,117,291,210,0,137,134,403,22,90,217,342,10,95,180,494,18,49,11,1,475,65,32,6,16,352,216,36,15,139,86,7,194,24,402,275,14,28,9,2,21,19,125,453,165,20,25,120,57,237,3,260,26,341,317,114,349,197,326,214,48,31,12,5,82,17,300,111,421,308,365,523,450,98,110,93,247,304,351,457,285,498,39,27,312,123,44,152,99,401,37,615,373,108,372,170,143,116,68,67,56,96,719,678,361,29,961,205,35,133 }, +{ 7,14,2,58,46,16,70,112,87,38,52,135,5,155,29,66,97,294,172,32,20,334,24,92,186,35,128,227,18,171,6,21,107,37,64,75,780,666,400,61,140,43,60,48,220,232,0,23,141,177,1,54,202,307,13,592,461,115,22,77,12,45,50,51,126,163,137,409,10,315,192,270,25,845,69,90,269,76,72,513,28,113,74,210,49,262,243,9,95,89,71,318,402,631,86,884,298,40,431,102,4,275,290,278,17,324,217,19,180,151,36,237,230,67,356,291,352,314,65,403,59,33,26,609,387,226,285,330 }, +{ 15,13,1,5,2,23,3,0,365,10,7,4,341,51,11,6,9,115,180,317,14,33,77,12,217,102,40,197,21,153,165,17,64,8,117,141,569,22,901,134,32,16,202,352,37,36,457,291,128,31,269,125,237,18,139,196,44,453,391,177,372,28,349,59,719,93,482,629,86,509,961,318,873,498,99,55,752,386,19,401,210,143,48,137,120,342,50,38,49,29,27,403,24,30,758,111,110,57,475,95,203,730,46,98,260,116,90,45,523,494,326,54,105,72,96,65,546,402,351,242,277,164,67,450,734,253,83,26 }, +{ 2,1,75,29,52,14,69,220,67,262,46,38,70,87,103,6,74,24,83,267,25,226,357,366,394,96,26,189,451,112,606,486,135,145,388,324,294,108,335,278,50,66,42,238,163,58,16,331,150,71,19,149,545,222,35,236,18,418,696,133,114,7,218,582,5,36,45,433,516,537,60,380,171,138,641,600,65,550,251,151,21,54,309,603,853,223,181,12,27,287,28,0,739,565,22,17,785,48,86,68,140,461,594,37,97,10,32,423,458,95,160,733,337,583,61,122,307,281,336,64,571,186,273,85,55,774,632,172 }, +{ 9,105,18,101,39,557,16,890,1,252,272,100,265,938,21,326,23,51,301,49,0,68,24,60,264,13,35,310,254,159,737,363,167,593,137,127,121,166,98,846,118,827,156,48,202,30,333,31,55,5,411,395,128,329,132,146,578,44,520,512,242,77,731,682,170,320,371,120,71,916,518,450,373,28,821,286,33,447,327,212,354,271,32,195,639,125,7,364,95,704,102,65,616,385,615,36,688,203,64,12,110,523,455,96,141,197,75,910,4,116,836,506,88,165,93,604,404,22,318,931,2,10,260,86,338,817,40,905 }, +{ 80,209,667,61,45,17,106,483,255,6,833,151,454,29,5,738,378,2,887,742,112,311,27,119,26,469,495,113,491,161,58,145,396,19,25,84,73,70,315,207,814,76,56,136,42,64,32,1,243,62,52,306,614,287,128,445,14,74,383,53,631,3,90,240,34,141,179,86,297,4,72,148,496,65,250,611,214,138,527,46,194,123,137,186,21,655,95,66,549,50,881,292,592,790,48,87,7,11,129,263,205,122,22,440,361,59,222,573,307,38,202,227,75,269,57,85,10,358,245,644,684,54,200,862,651,425,36,171 }, +{ 23,13,51,5,21,115,12,202,15,1,141,32,2,165,0,269,180,197,401,7,4,3,9,457,308,403,453,6,341,37,318,10,719,14,48,120,128,352,33,77,22,137,11,730,217,523,40,386,99,16,260,31,475,569,18,64,450,317,28,237,391,90,17,494,421,365,177,59,125,8,102,72,93,30,629,247,961,24,221,117,44,153,498,758,351,291,196,509,899,402,817,49,304,134,76,89,210,98,326,82,482,45,57,110,38,36,752,901,39,139,468,20,96,372,116,216,19,349,203,288,29,61,95,275,546,670,27,576 }, +{ 99,12,453,277,139,474,369,339,51,38,157,196,37,775,401,188,23,475,111,328,11,313,471,153,40,629,266,79,54,4,477,33,102,59,14,57,248,880,152,342,13,457,305,542,117,377,403,514,94,308,115,229,569,488,961,210,300,211,431,41,89,734,361,485,275,670,134,128,184,381,3,72,529,2,556,719,402,64,413,21,15,215,46,177,757,165,77,197,236,32,62,421,155,50,130,17,162,202,5,45,587,52,507,10,183,555,82,247,490,129,588,123,405,148,216,76,141,7,0,1,181,29,432,6,730,90,468,452 }, +{ 7,92,232,126,97,298,387,140,107,16,60,246,14,66,35,462,150,441,104,357,314,359,279,330,633,423,380,172,230,199,24,121,38,392,356,71,132,192,451,324,22,146,893,508,493,568,289,65,560,95,0,5,32,74,189,830,2,135,21,173,18,603,64,46,43,707,20,501,52,362,90,214,712,550,877,86,607,28,426,312,48,36,29,10,69,278,12,194,49,37,1,6,672,874,204,81,267,68,526,108,835,259,733,895,388,500,779,649,448,915,61,125,149,443,50,55,54,399,590,70,72,939,572,191,124,711,517,167 }, +{ 13,23,318,202,77,177,51,269,33,102,141,115,494,4,90,403,210,153,40,196,117,32,59,128,11,137,342,134,217,291,64,21,12,475,352,31,341,14,2,98,93,10,7,95,700,49,317,275,216,20,19,16,44,22,365,116,6,453,110,247,144,180,96,9,24,17,5,82,0,498,402,349,300,127,48,3,125,57,111,87,28,86,1,203,197,35,25,401,18,165,351,326,139,60,43,26,36,450,873,864,551,473,393,373,372,288,678,576,285,37,523,120,70,65,817,67,752,697,529,421,415,386,304,214,164,152,123,61 }, +{ 13,77,2,23,141,6,0,1,217,115,7,3,180,5,10,51,33,14,197,269,352,64,102,177,9,291,15,4,317,40,17,165,22,11,341,202,318,237,196,117,153,349,16,365,28,210,372,752,134,19,18,128,304,498,36,247,12,125,59,139,95,8,275,457,86,31,27,49,21,24,29,391,342,569,509,25,93,45,143,901,137,32,244,403,26,57,38,719,111,873,386,120,44,864,20,37,546,56,494,39,961,164,758,401,30,453,110,475,35,730,98,65,216,437,34,203,41,326,99,402,300,253,82,90,55,46,194,351 }, +{ 15,4,110,13,120,93,11,23,5,21,32,1,40,180,10,82,165,2,3,33,197,141,51,37,0,48,901,102,12,31,6,7,125,117,352,77,752,341,144,153,351,196,9,237,64,134,498,143,17,269,457,342,59,202,115,98,365,450,318,22,44,401,291,873,8,244,217,475,57,391,253,14,72,349,854,372,55,36,509,89,898,403,90,719,19,386,697,139,111,546,661,27,260,61,56,177,96,569,482,961,16,638,332,758,494,28,864,148,76,45,241,79,350,308,247,437,421,70,474,559,221,210,41,164,160,137,453,275 }, +{ 15,1,13,2,0,23,4,5,3,7,6,51,77,9,341,10,115,291,11,33,217,8,12,102,177,365,317,14,165,16,22,120,349,40,180,197,31,457,901,453,18,21,450,153,961,141,719,260,523,32,44,82,64,117,304,28,93,372,110,17,210,475,59,30,134,352,386,342,569,401,752,275,196,730,90,403,326,202,36,49,629,125,817,216,98,308,247,269,351,24,203,494,899,37,95,111,139,482,758,373,391,19,48,116,237,922,509,57,144,86,137,498,854,421,128,670,873,898,253,437,65,300,55,99,20,704,244,615 }, +{ 20,43,198,325,904,104,173,147,234,422,66,97,426,319,861,77,376,712,416,725,427,945,0,7,5,470,450,192,142,32,707,178,330,819,639,38,202,22,500,21,784,583,414,2,324,230,858,61,889,49,315,113,671,81,455,18,392,74,207,232,52,24,329,107,342,33,560,13,140,595,10,715,291,120,102,95,48,1,64,359,693,600,879,16,798,58,312,494,4,14,344,835,764,306,105,526,290,40,23,289,259,90,159,158,884,577,246,37,9,170,204,681,138,29,239,194,112,12,17,31,318,72,28,226,70,397,153,65 }, +{ 105,28,0,9,49,301,159,127,512,16,170,623,24,109,35,395,158,98,68,1,65,22,55,31,761,371,713,916,18,293,286,7,242,124,347,95,338,737,327,44,39,21,2,14,272,424,154,36,506,685,23,168,101,125,299,51,12,479,48,13,870,763,374,284,64,385,320,599,5,67,202,71,276,116,131,141,185,137,836,456,175,344,239,37,900,187,30,10,577,538,6,616,289,740,60,518,118,86,169,83,364,912,219,96,50,115,928,128,935,165,318,149,747,221,346,32,114,69,810,254,237,627,269,308,144,393,201,492 }, +{ 213,466,689,88,230,435,321,30,699,795,201,831,352,144,217,443,854,530,840,190,539,957,418,1,96,203,382,855,251,100,669,410,335,93,83,748,367,44,662,960,31,934,36,206,141,752,351,317,822,128,731,116,778,120,284,274,131,98,228,927,332,187,69,438,521,800,21,242,160,224,48,372,219,310,137,735,686,557,326,285,237,576,127,922,5,859,269,260,13,494,264,82,523,403,35,244,202,615,166,39,616,551,345,930,180,67,253,921,299,966,2,10,9,258,23,473,365,692,265,197,866,32,276,51,816,617,856,223 }, +{ 130,453,196,47,57,4,236,14,59,412,51,711,381,730,153,77,202,108,128,361,23,46,283,402,210,11,300,719,13,117,38,803,200,401,183,78,34,475,54,342,318,27,369,432,275,2,757,133,503,472,12,3,585,134,62,862,161,529,37,328,457,56,390,494,102,73,176,50,440,322,111,670,65,52,377,899,181,629,17,114,33,136,99,266,123,40,514,339,291,53,250,84,177,21,188,216,389,217,386,139,32,961,155,480,162,754,832,714,894,739,383,657,269,152,106,603,543,527,523,497,277,485,838,137,86,64,48,758 }, +{ 1,2,14,50,5,38,46,36,22,67,103,0,114,65,29,12,28,218,54,7,133,83,86,96,69,21,75,208,24,6,52,168,194,389,10,128,51,160,55,17,23,48,18,181,238,45,37,32,95,16,283,532,58,137,503,202,49,124,171,361,480,13,735,9,289,109,782,285,3,115,70,756,141,169,484,584,35,244,717,64,402,4,328,220,163,646,158,803,505,19,253,789,164,185,108,25,155,487,236,269,143,946,394,318,610,401,335,105,433,403,851,87,800,223,866,309,420,61,27,180,597,99,366,308,59,754,514,418 }, +{ 6,74,26,19,165,453,391,197,14,138,730,29,357,70,51,457,1,50,108,125,500,509,27,145,386,112,366,52,46,235,133,262,13,308,47,331,2,719,78,42,309,75,603,25,223,394,785,23,600,218,38,163,115,114,17,558,34,53,220,128,487,58,236,122,65,130,766,401,498,96,409,307,45,85,66,444,899,73,516,632,64,711,54,630,412,196,5,103,21,180,894,113,221,137,624,241,237,594,773,758,867,629,433,390,475,820,546,12,648,67,32,153,285,606,99,545,745,569,644,324,583,3,181,675,903,283,802,670 }, +{ 10,9,30,376,0,68,55,39,18,43,20,49,174,104,88,501,120,342,450,858,28,2,137,523,470,453,197,757,603,37,414,165,31,325,730,729,671,595,455,222,204,77,64,58,22,21,17,13,5,194,110,95,389,318,260,177,128,102,97,33,1,904,725,7,788,568,387,90,54,46,32,14,11,259,98,147,61,817,392,518,961,958,922,899,873,854,819,805,785,739,719,713,661,615,550,534,528,494,477,475,474,465,457,449,386,372,355,351,349,337,298,294,291,289,269,262,247,196,173,171,155,135,122,105,94,56,48,36 }, +{ 15,23,13,1,202,0,51,77,5,9,341,141,137,120,4,260,115,2,351,21,128,7,12,450,82,901,197,180,269,318,10,8,11,22,403,32,854,33,165,40,6,18,3,16,37,494,523,457,102,177,28,64,352,453,14,317,922,217,36,365,48,421,401,719,475,291,30,110,59,24,569,817,93,961,308,730,17,752,125,117,898,31,342,153,196,285,44,99,576,86,275,642,49,90,402,39,143,139,98,221,386,244,116,373,55,57,629,144,210,661,349,134,203,859,899,95,498,35,482,372,72,237,253,105,216,96,111,758 }, +{ 272,131,105,578,219,159,371,49,616,716,9,224,320,286,737,623,187,910,385,28,258,98,761,127,254,347,916,424,22,109,627,158,713,95,924,239,0,242,836,39,201,31,301,912,944,442,125,170,116,327,293,44,538,688,374,23,55,168,276,36,64,284,51,871,185,395,35,506,221,512,518,202,890,137,101,13,860,169,68,574,479,86,908,10,24,333,16,1,65,144,269,364,308,228,344,141,21,338,567,30,577,165,128,160,747,18,763,124,839,926,299,261,456,268,295,164,662,406,197,67,312,175,7,928,421,685,154,810 }, +{ 457,51,13,23,961,719,12,453,629,99,401,57,515,3,4,165,11,45,62,41,14,17,2,569,37,77,33,32,5,0,40,59,1,308,76,115,197,38,72,79,730,21,474,102,7,475,6,54,9,64,403,10,56,775,237,477,202,29,152,188,341,328,90,509,111,89,215,128,880,734,339,247,757,134,386,84,421,317,313,217,129,94,22,318,157,34,130,117,361,210,670,555,369,365,285,269,266,186,181,153,123,24,899,485,120,542,25,391,758,514,468,277,270,243,227,196,180,179,155,148,137,52,50,49,46,18,471,236 }, +{ 202,318,5,120,450,494,77,33,102,260,21,1,128,13,165,403,523,23,269,342,12,326,817,32,475,141,402,64,2,17,82,457,180,137,48,730,125,291,197,453,37,93,51,615,922,719,386,210,15,177,854,351,98,7,899,576,275,6,44,25,961,4,196,117,115,285,95,14,217,31,391,352,237,65,38,29,27,20,758,40,10,9,153,194,367,116,110,105,50,49,35,16,139,498,341,61,163,39,30,11,349,293,216,144,108,99,76,58,54,43,0,203,3,134,113,70,959,958,940,933,923,900,855,841,750,725,704,639 }, +{ 141,269,352,180,217,202,349,64,160,137,317,318,372,494,752,418,244,954,864,437,753,237,13,341,291,165,717,22,197,115,304,260,365,93,36,21,351,247,120,922,77,82,48,498,32,5,579,144,10,23,342,373,33,854,95,128,0,391,164,143,125,98,482,51,403,28,326,898,386,76,72,1,951,678,638,453,201,86,110,30,457,312,253,221,163,96,44,475,102,901,719,421,196,134,190,166,131,100,88,474,401,203,859,597,521,509,466,459,435,393,321,284,228,108,65,59,40,4,851,576,350,308,288,241,216,214,179,99 }, +{ 70,145,29,112,74,26,2,75,287,52,220,226,632,87,294,6,135,307,163,66,19,396,278,138,635,409,25,151,58,113,1,122,331,222,5,97,42,644,324,461,27,849,500,69,651,45,7,172,262,853,337,53,648,573,624,64,334,445,171,21,67,186,32,73,297,46,38,416,14,17,140,80,61,50,436,155,884,223,24,22,85,48,380,852,92,65,86,889,12,315,36,774,571,103,549,37,10,95,243,491,83,16,72,665,227,89,357,394,76,309,35,106,54,675,808,267,474,250,609,71,881,209,133,606,96,232,583,400 }, +{ 351,82,317,141,752,898,901,180,352,341,15,365,1,498,217,115,33,253,32,143,10,160,55,0,854,5,197,269,21,77,4,36,137,23,64,2,110,482,169,873,120,244,96,7,89,13,349,86,164,102,72,93,372,148,922,40,16,345,90,531,9,83,437,22,251,35,260,457,546,165,202,6,864,48,291,51,28,719,59,238,18,308,247,128,11,304,117,12,569,237,65,961,817,509,450,535,196,95,125,730,523,468,144,98,49,3,899,661,342,318,373,153,579,734,14,490,116,203,134,559,391,312,130,123,109,84,76,326 }, +{ 39,9,310,254,101,252,265,272,100,0,557,30,49,688,455,105,190,166,329,627,159,286,625,709,327,333,18,68,158,404,520,578,131,438,731,16,553,24,98,364,31,676,35,118,593,1,518,48,344,44,167,23,65,21,93,604,829,795,127,60,890,96,88,616,22,363,656,51,242,28,419,716,125,124,846,71,274,36,264,613,13,137,95,116,212,938,109,224,827,411,154,910,160,639,371,664,128,5,374,144,530,395,228,170,219,865,67,10,203,759,121,83,301,382,320,737,55,682,37,647,86,271,793,7,821,115,916,285 }, +{ 2,58,29,151,52,186,70,5,549,75,1,112,45,400,61,163,113,227,307,315,311,287,220,46,7,14,155,74,243,87,409,66,27,80,209,631,845,780,69,262,135,48,50,171,767,496,869,454,331,6,491,17,334,278,106,32,19,64,614,21,73,145,26,294,24,592,67,25,38,659,223,16,97,255,172,72,226,502,852,128,37,140,721,666,89,667,290,36,103,324,86,849,267,76,141,54,35,83,65,207,22,148,96,270,12,635,10,4,95,92,738,474,18,445,119,611,425,137,431,263,114,396,663,0,122,133,90,237 }, +{ 141,217,269,352,317,180,23,13,21,115,77,349,202,137,51,64,372,165,197,32,365,752,318,291,341,5,237,102,15,177,498,33,48,244,304,128,125,4,864,253,39,30,44,11,247,22,9,0,31,901,308,403,1,717,201,342,49,10,98,16,7,221,95,144,40,88,494,90,12,28,117,93,678,120,68,326,100,203,86,96,468,2,475,206,116,546,457,160,437,8,873,210,127,110,76,65,55,37,418,386,350,72,18,453,223,143,24,153,851,351,260,284,579,576,401,268,482,196,35,421,82,3,402,166,101,954,391,83 }, +{ 68,35,101,149,124,154,0,65,9,175,24,398,28,16,189,71,118,429,55,346,67,114,7,345,18,230,399,364,133,14,252,722,39,283,1,547,140,69,108,484,302,694,100,439,103,46,705,83,166,267,389,2,458,92,336,50,212,289,21,246,375,251,419,109,36,520,329,158,22,637,12,60,952,48,265,236,702,596,96,806,30,732,5,826,604,64,194,49,412,701,388,88,420,191,535,264,562,167,886,23,796,168,51,650,238,570,782,868,86,13,218,95,917,768,38,10,32,309,404,706,37,54,221,602,125,159,105,676 }, +{ 66,7,29,112,52,97,2,192,20,151,74,43,145,173,222,135,226,525,415,172,644,104,337,544,353,580,32,45,25,287,186,609,58,70,204,155,14,5,21,712,122,87,227,174,331,61,849,549,426,90,355,81,334,560,6,232,416,243,632,46,0,92,324,177,64,113,673,624,107,59,37,635,216,140,396,138,22,500,16,38,4,707,128,65,48,307,17,77,86,137,91,35,12,721,665,789,141,24,294,884,85,42,414,194,115,526,72,311,825,11,126,262,597,76,89,10,28,75,1,387,209,60,304,171,51,147,651,40 }, +{ 31,125,44,299,116,22,170,55,242,456,599,685,36,870,64,393,492,268,1,479,164,86,558,28,506,144,10,740,23,206,903,9,2,0,963,237,127,546,301,13,434,143,367,5,169,93,51,239,12,654,965,384,137,498,7,923,203,918,489,98,180,95,391,141,762,115,352,417,638,841,253,6,105,14,951,8,940,165,197,844,128,948,457,401,959,244,160,308,282,185,21,312,109,286,202,332,341,49,168,386,752,269,538,365,4,37,24,512,911,473,873,509,551,634,499,318,719,3,208,395,708,217,450,421,96,901,35,16 }, +{ 188,11,79,12,99,377,542,94,339,33,474,37,40,139,111,102,453,4,51,775,475,277,13,471,23,196,629,153,431,401,117,210,134,266,152,403,115,38,961,128,59,300,57,77,880,342,157,485,313,569,3,229,202,14,177,275,477,54,308,184,488,328,21,89,72,670,32,64,2,76,10,402,15,90,165,369,148,141,5,162,318,405,17,269,257,205,216,413,757,129,62,361,0,494,734,41,421,179,45,452,197,217,291,120,82,22,130,386,123,1,50,237,358,125,381,497,498,6,137,285,36,180,48,482,372,29,46,341 }, +{ 658,698,340,303,31,363,919,98,44,156,296,850,586,668,354,87,914,120,163,30,127,70,23,385,51,48,1,478,125,49,77,774,223,260,291,82,691,349,13,854,225,217,116,39,10,724,21,922,898,447,351,293,201,75,9,269,284,759,541,480,281,268,221,165,621,141,442,622,411,371,318,187,153,115,105,102,65,777,93,64,33,652,352,202,744,453,433,398,330,191,180,177,137,128,117,95,69,35,931,638,40,5,888,372,146,140,100,88,565,457,450,335,326,317,219,190,159,158,134,36,32,22,518,482,401,394,276,947 }, +{ 15,82,4,197,13,33,1,23,901,21,5,11,10,165,32,0,120,180,2,40,3,51,110,77,642,7,8,351,326,115,6,386,365,217,457,9,117,401,12,37,102,260,523,134,719,758,569,22,36,59,317,730,31,57,342,898,961,450,453,153,17,141,291,137,475,55,177,48,116,90,196,93,44,403,14,64,352,629,54,372,817,28,143,18,269,139,16,958,96,202,494,349,421,275,752,210,128,49,94,86,244,29,498,899,801,318,851,38,670,72,615,474,304,148,41,89,25,19,308,482,160,373,253,70,61,30,277,125 }, +{ 15,4,11,13,23,5,21,180,141,32,202,269,3,40,1,352,318,17,12,64,33,165,197,31,2,0,51,120,128,117,326,59,457,10,153,196,134,817,6,48,125,93,237,82,44,137,450,77,494,403,49,203,386,752,37,523,7,22,961,217,260,8,115,110,341,57,177,498,719,90,615,9,317,102,365,139,14,730,901,210,98,402,72,453,19,116,65,18,111,391,45,56,95,351,27,899,99,349,293,291,300,475,86,28,36,401,25,55,144,244,275,509,247,216,38,678,76,61,393,29,372,576,485,373,30,253,551,468 }, +{ 91,233,370,718,85,6,81,25,65,256,63,235,42,138,511,397,123,26,343,74,650,87,249,643,355,544,18,64,194,510,636,45,174,280,90,22,108,348,681,104,1,84,86,114,389,4,415,66,19,0,673,283,214,141,122,524,289,56,53,193,208,95,240,750,297,29,119,605,27,573,445,436,736,10,14,11,287,597,32,630,49,24,192,57,5,17,204,475,103,61,102,70,947,152,51,588,23,16,183,77,619,730,523,453,444,59,561,2,813,701,874,323,75,33,28,804,129,96,403,368,21,9,145,177,396,255,693,611 }, +{ 23,51,202,13,21,128,318,141,403,120,450,137,48,494,269,5,1,165,125,64,32,260,15,523,102,475,115,12,14,457,31,33,197,77,817,44,98,453,2,308,95,49,99,16,7,180,18,93,326,37,221,6,4,352,421,401,116,291,61,386,203,82,59,36,9,40,30,24,719,117,110,20,217,153,730,17,615,351,402,237,50,854,10,196,39,19,342,3,922,25,96,341,35,28,22,11,105,177,90,72,58,38,317,247,54,961,805,576,207,68,57,46,349,210,134,86,704,75,70,899,373,65,901,670,0,391,89,45 }, +{ 365,180,317,752,341,217,115,352,901,482,372,498,291,15,253,244,141,13,1,579,269,349,7,5,21,4,318,23,351,82,0,2,51,77,93,125,10,898,89,160,202,44,6,854,165,3,96,308,221,148,137,332,247,197,33,11,304,851,531,144,120,494,40,717,468,251,403,72,177,391,32,12,546,453,421,260,203,437,961,574,258,533,48,509,55,922,880,661,615,373,261,134,241,873,475,345,949,867,734,728,699,569,490,473,434,295,288,237,219,143,127,110,27,17,16,187,153,117,876,350,99,36,9,947,128,86,64,679 }, +{ 115,498,901,197,341,468,13,352,482,546,165,509,237,569,9,873,64,23,365,22,180,95,391,317,758,558,49,752,734,109,28,105,217,51,844,86,837,143,629,131,254,876,12,159,158,719,39,406,308,148,141,679,117,490,83,637,457,10,708,166,36,706,102,89,35,505,168,442,372,125,55,530,221,37,208,669,535,332,272,153,103,98,903,401,261,219,768,114,33,864,364,187,169,345,4,574,434,258,242,224,67,30,3,253,961,868,164,228,816,77,843,120,438,384,351,230,134,128,100,99,2,753,50,44,31,584,347,170 }, +{ 23,13,51,202,141,21,180,165,5,197,125,1,115,269,32,120,12,128,318,64,15,137,523,2,33,386,7,260,14,403,48,457,102,4,450,6,93,99,82,401,719,9,730,110,16,31,237,77,326,308,421,98,453,352,37,221,475,90,44,117,30,0,18,144,899,153,10,817,3,203,391,196,11,59,351,40,217,494,177,17,341,134,116,39,8,24,95,752,498,402,20,509,615,61,28,96,19,247,961,291,36,72,365,86,317,285,241,76,49,373,38,29,25,342,70,304,58,57,242,546,576,22,350,349,901,629,801,551 }, +{ 214,289,90,174,874,280,355,138,65,85,64,6,751,81,312,194,249,835,233,348,636,875,91,343,288,519,32,0,524,247,415,104,29,370,681,750,74,204,22,95,217,437,235,86,123,25,352,192,42,597,954,256,77,18,673,63,864,752,671,306,87,353,746,287,712,237,397,389,115,588,222,177,180,145,580,715,21,141,59,474,317,207,66,56,49,52,33,28,579,45,544,10,84,61,784,102,4,511,202,693,57,40,24,117,173,76,319,240,208,5,216,26,304,134,291,205,114,525,72,17,153,577,168,11,108,422,718,498 }, +{ 15,4,11,5,13,23,21,32,33,1,37,31,2,141,3,180,64,102,44,12,49,196,120,77,40,6,17,7,153,117,352,134,0,82,269,197,51,22,93,10,752,260,165,217,98,317,137,365,342,202,901,318,95,341,450,115,48,30,9,128,177,351,125,523,110,498,854,291,237,89,90,8,817,45,59,14,57,86,457,873,326,373,372,72,61,922,139,56,275,482,36,864,391,96,898,386,111,403,144,27,38,509,899,453,70,116,29,58,253,244,76,160,475,437,304,316,210,16,41,569,308,300,203,719,288,221,546,148 }, +{ 217,33,15,13,117,196,153,134,23,51,77,141,0,2,64,115,102,10,4,5,7,6,180,3,1,11,165,352,202,22,9,40,317,269,197,14,128,318,341,237,17,177,16,291,12,95,365,120,125,18,752,28,453,372,59,137,498,349,49,36,31,24,403,32,110,98,210,386,19,457,401,8,391,901,475,44,86,260,342,304,143,247,308,730,93,275,244,494,164,719,21,864,65,509,57,961,523,25,90,105,546,139,216,55,38,482,569,402,35,29,450,99,873,421,48,670,45,27,26,326,20,37,437,39,629,579,56,203 }, +{ 15,33,77,4,102,117,40,115,134,11,153,13,217,21,1,5,317,196,32,23,3,2,59,12,291,341,365,51,139,120,177,180,372,349,48,141,260,17,342,110,6,197,37,7,72,482,90,165,111,57,352,93,898,752,0,326,457,210,82,854,901,450,269,202,14,36,64,125,523,373,10,137,89,922,203,719,498,730,961,569,244,817,143,44,318,8,76,304,277,403,253,275,31,494,128,386,308,160,22,247,56,899,148,144,453,468,61,638,579,300,96,437,221,116,873,38,485,94,99,237,216,9,27,49,45,19,86,401 }, +{ 15,13,217,2,1,23,0,4,5,3,317,51,341,7,6,8,115,9,365,202,10,11,291,12,22,33,269,31,82,180,308,457,120,28,901,30,18,77,197,450,351,21,961,40,221,372,523,165,730,318,719,854,141,102,64,453,110,260,14,569,93,117,44,16,817,36,32,349,386,498,482,98,403,898,196,134,35,153,24,49,125,752,579,326,899,237,128,137,247,401,342,48,475,177,39,304,661,20,922,509,494,19,116,59,37,203,468,95,329,144,758,55,17,65,244,86,111,391,90,118,437,113,91,122,143,629,864,99 }, +{ 135,66,2,7,192,337,97,52,14,20,673,355,29,43,104,107,331,226,415,376,353,222,294,147,74,112,46,172,560,155,32,5,324,470,609,173,174,21,825,16,64,58,298,145,92,707,38,232,77,35,356,4,10,414,22,525,287,262,171,888,86,632,544,595,635,568,178,90,48,580,87,334,202,597,72,37,60,587,474,6,151,95,307,49,177,59,25,0,142,17,858,61,409,128,1,12,721,583,318,259,362,500,141,126,269,198,102,319,70,494,13,230,853,45,227,54,849,612,400,65,204,186,33,819,246,76,644,279 }, +{ 195,132,146,142,271,167,121,363,878,178,687,647,786,212,354,77,522,929,60,202,411,120,35,234,147,259,101,360,520,626,446,781,98,0,450,668,5,199,55,771,562,23,16,706,777,49,936,18,621,604,48,158,318,639,13,31,407,22,125,21,591,590,465,481,159,534,51,109,198,419,24,126,364,191,141,7,682,551,252,28,20,806,634,156,105,14,447,948,494,107,10,116,39,43,1,269,260,33,265,128,640,291,93,403,137,326,95,203,421,379,102,765,9,82,692,110,416,32,883,664,553,455,694,475,842,523,293,239 }, +{ 202,77,20,318,104,66,269,291,494,102,177,43,128,0,342,216,173,5,2,97,52,450,234,22,7,33,750,29,112,319,74,275,90,337,32,49,198,210,678,544,147,204,58,24,141,789,21,349,64,18,304,16,10,14,580,120,192,194,325,13,416,142,403,500,196,61,59,137,115,86,712,153,113,12,226,174,415,40,23,81,4,28,70,525,402,1,9,230,72,35,178,214,636,46,11,6,904,37,95,87,48,217,355,597,334,31,798,39,17,38,427,186,222,65,376,117,426,285,36,135,51,208,353,673,155,792,172,260 }, +{ 107,362,612,359,414,356,97,392,683,259,819,43,298,660,465,147,581,729,173,779,7,595,501,20,319,470,534,858,246,376,279,126,230,14,5,178,427,232,493,35,92,49,132,426,885,60,32,104,387,0,786,423,66,38,21,121,878,22,16,146,861,441,95,357,560,830,142,2,199,61,172,10,81,707,150,70,590,422,207,48,140,46,58,929,52,324,603,192,18,508,202,314,77,37,347,33,263,13,135,28,241,12,23,29,125,1,345,124,102,98,74,64,568,24,198,380,40,4,687,626,105,607,117,72,177,577,65,318 }, +{ 6,19,13,26,453,165,457,386,51,23,14,74,401,391,308,758,719,603,47,867,29,138,2,70,730,27,366,309,108,324,197,1,25,196,743,711,78,235,262,130,42,475,133,50,115,145,670,487,112,58,53,52,85,17,421,894,96,34,412,5,331,516,509,163,33,500,569,629,482,388,45,468,153,218,128,64,341,283,594,545,444,65,125,600,217,114,236,754,75,899,73,785,630,137,95,38,801,328,895,103,961,550,901,200,11,350,558,117,4,220,180,54,46,745,3,134,433,766,287,739,122,223,317,226,390,241,21,357 }, +{ 179,205,72,245,317,247,152,180,216,490,76,752,352,79,217,59,864,94,498,4,497,452,89,148,11,875,111,141,405,115,188,21,468,588,873,197,579,471,365,464,37,645,372,482,5,77,64,431,341,237,10,529,349,1,12,23,2,474,128,134,316,339,291,36,32,51,38,413,437,629,954,734,308,99,13,143,48,102,165,14,288,90,377,749,184,401,460,542,33,428,3,7,269,449,961,569,901,350,86,40,257,244,202,0,270,117,6,304,54,241,402,45,137,221,457,403,177,9,164,139,318,17,528,15,453,421,358,769 }, +{ 107,359,7,314,392,298,387,279,581,32,232,60,14,126,97,493,534,150,356,121,423,362,172,92,259,147,441,95,35,501,22,357,21,16,246,590,0,380,786,49,18,465,13,64,132,5,28,146,178,10,508,779,23,140,48,24,71,939,929,660,51,135,607,324,603,115,230,43,46,241,38,192,683,462,247,66,612,568,941,835,819,77,12,550,90,36,560,199,4,312,33,9,893,347,330,65,59,52,20,519,2,278,50,626,58,202,37,345,771,294,117,40,102,70,470,451,156,448,350,316,707,236,173,288,31,75,54,672 }, +{ 156,354,586,271,195,591,668,132,48,360,340,121,23,21,463,446,1,5,13,18,658,296,407,51,146,70,698,883,626,55,60,221,777,163,32,363,379,621,590,562,58,49,167,467,647,522,150,61,118,24,411,781,115,447,223,767,786,7,16,31,87,308,687,22,9,259,279,212,44,17,518,346,71,10,371,45,98,2,919,241,761,33,12,93,64,39,541,37,608,35,774,341,759,75,664,941,663,125,846,581,401,120,638,566,303,68,936,260,0,932,199,105,634,270,706,30,453,141,102,95,86,110,107,771,273,535,82,727 }, +{ 23,51,13,453,4,475,0,12,457,10,2,115,401,15,11,403,5,1,40,99,14,59,961,165,569,629,9,32,77,37,308,3,719,7,57,421,21,64,17,494,6,22,33,102,18,202,177,128,730,197,523,670,139,141,899,16,90,341,8,56,217,210,402,48,24,386,125,27,318,95,45,86,72,775,269,758,50,65,19,76,111,38,317,180,89,62,342,54,46,734,28,247,41,29,36,509,237,26,880,196,352,365,275,468,120,216,153,152,108,25,137,757,349,221,181,117,277,49,477,123,34,291,304,801,82,31,678,597 }, +{ 48,125,221,21,165,23,197,13,763,423,508,193,98,293,457,391,5,867,693,386,441,81,18,16,51,92,60,314,64,683,401,49,237,96,104,43,430,35,397,558,241,180,126,523,105,32,758,140,38,72,510,308,474,356,230,95,279,102,501,784,517,663,858,541,31,633,498,718,149,127,91,422,97,418,118,900,159,144,115,511,44,203,246,366,24,223,480,453,361,350,218,160,71,22,701,719,393,40,173,124,963,421,370,148,69,643,93,743,598,493,298,253,191,170,164,116,7,1,939,730,120,74,33,20,326,63,192,269 }, +{ 202,5,450,77,120,132,494,195,523,318,326,1,260,146,121,271,167,576,203,0,817,615,18,21,403,692,234,604,354,142,49,13,35,23,7,212,20,14,2,682,158,252,147,137,101,102,128,32,33,265,48,16,291,551,342,419,364,60,22,966,475,43,107,9,178,363,51,639,17,10,687,12,821,6,859,159,520,416,97,848,805,31,360,269,109,93,198,329,259,39,55,64,562,786,402,92,82,553,878,70,61,647,455,180,411,95,315,191,4,842,105,239,165,822,638,115,98,634,24,453,346,126,99,156,899,199,522,28 }, +{ 39,166,9,101,404,158,333,30,0,190,310,252,274,68,438,419,100,344,88,49,254,124,694,865,154,530,656,364,577,28,810,265,65,35,131,455,159,857,16,21,24,793,22,539,212,777,105,625,747,677,709,562,95,48,286,1,329,703,18,228,71,125,272,36,109,13,10,289,538,219,676,706,778,51,31,98,557,86,23,175,60,553,406,55,962,671,840,118,224,168,221,83,669,67,213,382,96,570,64,960,346,327,170,613,731,191,242,44,115,759,439,957,627,748,114,634,264,688,593,37,251,137,320,127,7,520,167,518 }, +{ 15,110,4,120,11,5,1,23,13,165,93,21,10,2,32,40,180,82,197,3,51,6,33,0,7,125,351,901,391,352,77,9,115,260,102,341,117,217,317,134,31,141,752,453,12,48,8,153,386,509,873,203,457,401,196,37,898,372,59,326,475,55,14,202,569,57,498,403,719,17,64,308,237,494,318,269,94,90,253,961,22,44,730,36,697,342,177,482,56,474,137,89,72,421,349,38,670,576,139,111,30,28,210,148,96,758,143,734,629,16,244,160,128,18,291,41,805,247,25,19,84,373,245,61,488,579,205,523 }, +{ 2,29,52,1,26,58,6,262,5,50,14,70,103,46,19,38,309,27,96,112,67,516,75,163,133,331,218,145,108,223,17,236,45,83,287,25,487,74,114,171,785,409,357,113,238,24,433,151,53,36,388,220,739,34,545,396,307,532,583,675,61,600,181,42,65,73,764,160,635,21,603,394,12,80,594,186,150,324,894,632,3,7,334,99,54,137,315,891,69,445,37,412,323,48,745,537,18,283,87,458,138,822,308,243,155,765,86,711,895,398,285,28,651,366,226,115,766,849,294,23,480,820,51,221,297,22,732,209 }, +{ 120,77,260,141,51,13,217,23,317,1,450,291,15,202,137,326,373,110,177,180,21,269,165,318,128,197,352,115,349,64,32,203,5,342,351,0,102,48,341,96,854,93,82,523,2,244,457,9,160,752,386,36,922,12,365,372,37,898,7,304,275,403,86,10,210,253,817,16,704,28,83,90,901,498,143,6,615,4,719,22,494,237,18,661,730,473,30,24,308,50,221,40,76,72,55,8,59,35,11,33,391,285,67,89,144,125,61,961,99,39,401,14,3,475,247,402,44,31,70,453,49,509,642,153,208,482,17,216 }, +{ 444,183,291,297,358,196,554,255,56,59,123,269,33,605,108,122,153,177,275,210,77,57,341,117,130,128,475,467,730,152,134,42,403,4,50,880,19,381,315,401,51,65,421,216,630,349,283,21,503,235,133,85,23,11,719,368,46,202,99,494,432,229,40,14,29,561,665,339,670,480,736,588,523,453,102,15,899,650,326,256,249,236,197,125,318,2,775,757,711,624,396,365,328,524,78,64,3,529,194,18,13,0,250,12,6,690,25,445,266,48,511,402,285,26,789,678,260,242,165,120,343,769,543,488,409,390,369,366 }, +{ 23,13,51,12,165,14,120,153,38,197,117,37,99,401,134,386,453,54,128,202,141,196,64,5,328,40,237,21,137,139,15,260,33,2,719,475,125,133,180,457,0,46,403,242,77,236,6,208,1,36,96,32,4,391,361,115,308,52,194,629,17,569,730,477,86,102,546,817,450,19,10,758,961,933,923,903,558,160,11,29,22,18,3,188,111,79,114,108,65,48,95,291,56,349,157,94,41,338,221,89,82,34,59,277,177,49,317,304,506,372,351,50,26,421,217,44,31,7,72,341,352,350,316,312,207,183,143,130 }, +{ 95,64,348,33,467,56,343,174,554,511,77,312,233,120,108,180,0,561,6,355,543,13,306,370,197,165,859,25,18,29,297,256,91,63,899,237,49,770,650,412,235,85,138,19,42,523,65,671,90,102,22,9,32,368,194,40,23,10,4,576,426,416,204,161,153,117,116,86,26,27,104,448,775,721,719,457,450,344,326,275,217,72,24,605,730,283,245,196,98,76,17,5,577,519,123,835,475,192,81,78,353,588,386,365,269,260,222,220,214,179,170,141,134,125,119,105,97,66,51,28,11,881,273,242,172,746,707,643 }, +{ 120,51,260,326,450,202,23,77,141,203,93,13,137,318,21,1,82,165,110,15,523,5,351,269,197,64,102,373,128,33,217,48,180,386,32,291,457,125,817,352,922,854,403,115,144,116,177,349,210,12,96,196,615,475,7,719,372,367,237,40,730,2,342,704,4,98,391,10,275,59,494,453,401,0,37,6,421,317,50,16,90,36,44,752,308,9,498,160,31,393,18,899,221,341,14,3,30,45,402,8,898,304,83,692,99,24,551,72,947,247,216,28,961,153,864,678,661,473,88,509,70,22,285,17,576,300,76,35 }, +{ 15,4,11,13,5,23,21,32,1,64,93,33,2,3,180,40,22,37,141,10,82,0,6,77,102,44,31,352,7,120,117,165,341,12,48,49,110,197,98,134,9,752,17,901,153,498,342,269,196,115,291,365,128,260,36,317,137,51,95,59,217,318,237,202,349,72,8,509,391,14,873,177,16,523,86,922,386,247,143,304,210,125,29,45,57,457,453,90,854,482,403,111,579,160,244,18,569,437,89,61,253,76,27,899,351,864,275,450,719,56,758,116,875,961,277,468,164,148,25,817,401,316,84,139,546,490,216,46 }, +{ 15,341,13,141,23,33,217,4,77,180,1,102,40,317,5,137,0,365,202,51,11,21,351,854,9,269,82,10,115,372,32,64,922,901,22,117,260,352,197,153,128,36,28,196,752,134,165,59,318,349,3,120,2,12,30,177,244,37,450,143,291,31,86,457,48,139,160,16,8,7,898,247,253,125,523,18,49,44,57,403,304,55,730,569,961,6,111,110,14,96,498,494,17,308,719,72,39,237,642,386,475,90,98,24,342,45,401,817,326,873,661,76,277,95,509,105,421,210,93,811,453,717,144,391,99,89,164,221 }, +{ 272,105,131,327,286,320,578,109,22,28,219,239,224,159,9,616,371,49,95,623,538,98,716,910,713,127,258,737,187,185,385,761,424,168,170,64,55,254,347,169,928,916,0,158,164,1,924,31,23,301,51,293,39,627,374,125,913,201,44,836,242,912,36,395,13,116,65,479,634,24,442,654,86,346,284,276,35,312,137,308,512,160,115,194,420,10,175,2,154,7,338,21,128,16,944,83,143,456,12,67,601,202,762,141,908,124,535,289,574,871,688,165,401,900,5,763,96,892,933,384,317,506,237,860,14,37,68,30 }, +{ 16,68,35,71,18,60,118,24,191,126,92,101,150,212,167,154,302,175,9,346,55,0,273,7,124,108,107,375,628,28,566,14,722,149,815,199,589,439,882,575,520,363,121,562,246,467,21,364,1,806,279,140,22,49,48,252,517,695,65,230,345,847,647,97,621,411,69,146,336,46,653,39,10,109,694,604,535,5,189,768,399,446,637,50,441,2,755,419,125,298,608,43,314,423,13,649,158,706,463,398,100,67,818,508,38,12,37,20,826,95,354,264,23,32,169,166,132,271,105,96,221,674,83,51,932,429,356,54 }, +{ 20,470,147,43,904,376,798,427,325,595,142,178,858,198,319,0,97,173,414,22,259,61,422,819,77,945,202,14,32,5,362,49,426,392,107,207,887,725,660,481,263,465,234,104,450,534,494,861,95,28,18,33,120,10,612,64,344,105,13,30,324,39,21,455,817,115,46,146,102,31,132,4,246,356,318,65,158,66,260,40,7,48,523,581,9,35,159,315,113,729,23,230,125,347,112,38,128,878,359,59,36,60,12,239,600,182,237,192,153,342,196,683,98,16,170,2,306,298,357,54,279,101,70,560,501,345,199,845 }, +{ 51,23,13,12,99,453,33,202,128,64,153,102,15,196,37,403,141,40,120,117,475,38,134,115,14,137,77,401,139,10,0,165,318,269,82,308,21,2,5,197,54,3,180,260,22,31,494,421,17,86,93,1,95,44,111,457,277,237,402,450,9,110,18,6,98,719,125,65,351,32,28,217,49,342,326,328,730,629,352,386,285,361,221,11,50,36,19,341,48,569,177,41,59,8,194,27,24,89,79,523,29,775,4,961,365,7,670,291,144,373,210,114,46,317,391,34,116,509,757,203,236,108,30,26,817,55,498,57 }, +{ 383,136,17,62,84,440,119,504,56,240,548,3,80,129,378,123,106,128,555,205,4,184,507,59,162,11,14,183,57,361,249,38,202,469,152,64,179,495,483,90,32,215,257,214,245,130,209,54,161,27,250,503,328,229,618,211,5,73,402,45,12,306,318,40,34,514,790,76,452,77,65,26,86,297,141,19,53,497,742,269,814,283,37,33,255,311,194,436,667,114,177,61,217,803,95,207,266,2,50,432,769,757,236,102,21,527,36,556,46,22,10,72,115,41,494,611,381,29,196,99,216,210,151,248,445,137,0,576 }, +{ 70,652,48,5,638,846,1,21,163,340,888,767,221,125,761,349,260,562,269,303,518,658,591,586,13,698,623,23,883,774,98,87,49,31,9,371,296,223,51,763,850,863,120,541,360,346,141,634,64,535,39,30,2,0,845,7,622,156,318,195,44,95,202,900,32,12,931,379,6,558,768,293,271,115,777,401,58,354,818,61,55,17,132,668,450,308,385,914,351,919,93,922,391,457,128,22,590,212,291,77,807,762,758,252,159,101,663,352,538,372,100,446,75,520,18,937,284,96,146,626,326,127,118,116,771,522,463,69 }, +{ 66,135,74,97,278,6,172,69,324,140,267,808,462,14,550,204,7,357,138,87,189,85,298,75,29,2,500,52,335,38,25,92,582,802,174,571,572,841,563,42,380,1,24,314,21,350,16,451,67,46,280,220,501,443,150,620,230,103,486,423,35,353,622,60,83,226,71,192,32,889,26,22,65,903,95,5,48,232,330,64,108,86,565,792,641,580,36,448,70,509,197,222,43,348,558,426,241,726,125,262,0,877,893,50,872,81,309,63,233,950,37,749,18,388,149,145,12,91,237,10,355,606,294,246,114,508,673,28 }, +{ 51,23,33,102,13,128,40,196,202,77,64,65,139,141,99,12,14,453,117,153,475,403,134,10,86,137,4,11,22,0,318,269,115,401,36,114,108,21,38,5,120,180,421,165,402,59,28,15,95,82,210,37,2,177,494,31,342,9,260,217,277,523,386,3,308,450,6,457,730,17,133,18,719,24,46,361,1,352,49,194,143,111,54,50,351,197,300,94,44,237,341,164,365,221,389,67,32,48,283,19,485,291,29,236,27,854,93,961,758,110,326,817,317,285,125,275,90,52,45,34,26,7,391,181,57,8,752,670 }, +{ 88,264,435,100,166,274,772,921,478,382,909,639,438,960,521,96,897,410,30,1,466,190,530,778,265,321,682,691,418,144,724,329,686,39,9,447,93,31,914,131,404,203,44,411,765,335,593,475,795,367,98,625,254,664,120,213,613,403,0,744,539,116,83,656,363,238,5,48,13,576,77,812,805,110,23,21,141,966,69,125,616,829,326,286,201,82,35,520,225,51,821,127,604,285,284,165,260,217,33,36,310,731,340,842,223,102,137,101,615,64,831,252,228,49,10,67,224,557,219,443,692,406,272,268,910,506,197,351 }, +{ 440,62,136,548,504,56,84,3,555,383,507,129,361,128,123,162,4,17,59,119,184,14,202,183,152,161,402,495,328,57,205,514,527,229,215,80,27,257,38,11,378,73,757,497,472,240,211,130,503,452,803,54,469,77,53,34,494,381,318,283,266,250,106,12,102,33,245,210,432,64,403,19,40,880,236,90,5,556,179,21,412,377,2,32,200,300,99,196,269,585,153,488,141,51,275,216,45,37,117,249,529,194,214,372,76,862,177,134,133,313,26,421,0,139,471,41,305,65,248,483,13,114,678,23,217,50,72,775 }, +{ 911,617,959,332,206,253,244,141,282,120,110,384,951,143,352,260,269,10,160,373,717,531,811,417,940,55,728,661,533,36,434,450,93,137,559,203,473,498,642,116,180,326,855,261,295,44,268,638,922,854,752,31,499,164,318,351,201,535,144,851,564,341,365,64,8,115,165,197,843,1,217,317,704,864,187,699,567,127,202,873,237,251,22,258,574,824,98,86,968,860,489,23,817,82,125,21,169,509,926,219,13,276,15,601,28,345,9,372,51,901,349,943,871,5,367,291,776,308,131,391,96,523,105,83,386,902,338,35 }, +{ 120,260,450,141,77,15,1,23,351,326,137,64,373,82,203,33,13,291,51,21,217,523,269,177,102,128,922,165,110,197,854,5,318,457,180,352,48,32,125,144,93,817,160,202,386,96,50,7,372,36,349,304,210,2,342,730,115,898,719,16,0,196,247,494,59,10,9,473,22,4,403,116,18,86,67,341,752,615,95,75,901,317,275,704,24,475,453,437,367,208,164,163,143,37,90,899,244,98,12,3,365,968,551,300,237,206,55,35,29,6,801,805,678,576,401,393,391,288,268,216,194,99,72,61,58,49,39,242 }, +{ 15,0,1,2,5,51,9,23,7,13,6,901,12,3,8,180,4,141,82,115,14,10,341,120,197,33,93,730,21,40,125,401,260,202,102,22,110,64,569,719,457,165,37,961,898,453,18,351,31,28,203,16,137,352,217,450,77,326,11,403,629,308,128,196,32,30,36,269,44,98,116,318,365,99,475,373,670,237,24,899,854,523,391,95,421,49,48,317,177,221,817,153,55,117,752,39,86,144,38,642,105,922,242,291,54,143,17,134,494,498,244,59,661,96,473,65,160,509,139,170,247,89,114,90,638,20,704,482 }, +{ 104,7,97,107,356,560,66,232,707,359,298,568,289,324,712,392,192,38,14,426,173,65,95,64,172,387,22,43,92,32,357,362,214,20,259,526,90,0,330,380,126,246,501,49,5,86,893,74,500,194,874,147,135,612,230,10,204,779,52,2,729,808,550,140,35,835,21,28,314,77,312,60,16,465,132,715,279,423,414,600,885,802,683,18,81,24,36,13,636,861,150,33,178,29,819,519,288,4,31,58,660,448,121,534,12,168,61,48,581,278,70,37,146,102,441,23,46,199,142,6,751,249,76,319,202,189,124,237 }, +{ 6,66,1,2,74,67,29,14,24,69,83,135,25,458,52,150,108,451,75,38,103,380,267,278,7,87,26,42,324,36,357,138,602,114,97,19,85,238,594,273,65,149,398,335,172,46,160,204,70,18,711,550,50,16,309,220,71,732,96,696,5,133,603,12,891,86,174,28,280,500,418,467,226,32,22,21,222,189,27,60,124,423,486,547,895,302,733,236,532,388,208,64,63,0,35,17,13,298,95,262,45,906,336,646,582,37,145,194,571,20,531,112,23,58,140,516,484,48,886,218,118,115,99,81,462,429,54,55 }, +{ 51,23,13,453,12,115,202,21,403,401,5,4,457,719,475,37,99,165,32,308,64,3,1,2,523,10,730,0,128,17,197,15,141,494,11,22,14,6,269,961,7,318,120,386,77,899,18,247,421,450,817,48,16,117,59,90,33,125,217,9,19,153,180,629,26,758,237,24,177,28,221,95,57,341,40,25,38,54,569,391,27,260,402,29,216,317,36,72,291,102,56,134,365,45,76,49,468,304,352,137,210,203,34,89,196,342,82,275,194,349,437,46,123,326,50,20,8,670,482,86,509,139,498,316,53,61,576,288 }, +{ 57,59,77,4,381,11,412,369,210,291,421,283,803,53,250,542,377,14,339,471,275,108,99,670,19,300,453,403,23,27,401,368,40,51,202,361,775,21,12,554,236,183,402,813,33,342,38,378,475,503,46,37,444,10,736,390,152,90,56,561,285,153,134,123,117,650,73,899,523,281,0,529,494,63,386,880,432,162,514,128,58,605,102,817,743,690,495,349,277,256,196,137,111,79,18,9,801,235,139,78,867,391,200,119,758,130,42,26,480,389,719,714,467,341,80,269,122,730,221,216,188,177,161,133,114,45,29,22 }, +{ 15,1,5,2,0,7,23,6,13,51,9,3,180,115,12,457,4,8,14,141,901,719,197,33,21,82,961,365,22,120,165,341,31,351,64,202,308,77,37,401,260,117,16,153,28,11,110,93,730,10,32,44,269,137,217,569,18,98,102,49,128,317,453,125,30,36,99,523,48,352,134,752,450,196,386,318,326,40,95,24,758,898,17,116,629,39,373,203,86,72,899,237,403,59,177,35,873,90,89,55,291,105,817,144,734,475,244,139,421,65,498,76,247,494,20,38,854,349,160,253,509,372,96,482,221,216,615,143 }, +{ 64,237,180,95,312,197,146,32,90,247,316,929,352,126,165,288,317,132,304,13,60,490,77,217,955,522,92,314,86,22,4,23,7,5,21,626,40,14,11,12,652,498,291,177,232,164,199,33,10,482,51,141,115,150,633,462,579,340,216,16,529,128,37,360,638,388,121,359,143,468,275,59,107,49,534,125,202,658,509,269,888,267,1,598,581,588,76,17,467,451,296,28,751,660,441,349,194,29,31,71,698,279,253,45,640,57,48,546,134,117,18,2,830,647,372,102,65,437,493,351,98,733,622,423,273,241,309,137 }, +{ 1,23,13,51,120,15,202,180,5,21,260,141,0,326,2,137,7,77,197,450,269,33,165,318,9,128,352,110,48,6,102,523,12,115,342,317,4,32,16,386,14,403,373,203,817,36,18,217,64,96,37,457,93,752,82,28,341,494,24,615,3,22,291,351,401,8,475,10,308,453,421,391,901,221,196,59,719,730,854,30,177,90,160,365,402,125,35,498,31,285,99,39,11,244,237,72,20,899,44,40,704,86,17,922,83,50,210,349,569,576,98,95,67,76,372,509,49,143,116,253,961,65,144,89,55,551,661,29 }, +{ 14,46,2,16,24,75,69,35,220,52,7,38,1,140,267,29,71,50,309,60,87,92,70,171,189,67,18,54,163,262,335,108,230,58,366,103,150,5,675,236,181,112,223,278,409,537,21,83,294,48,155,68,12,486,149,37,571,582,96,0,246,334,135,186,443,45,328,28,32,133,641,97,451,151,388,64,307,126,25,9,502,760,394,281,357,22,65,66,774,36,10,55,172,114,61,6,565,462,461,251,552,563,400,74,820,330,238,218,600,72,99,86,606,314,17,380,430,227,587,433,20,13,23,583,516,545,121,115 }, +{ 127,98,31,44,299,276,284,9,935,293,116,599,49,0,456,201,492,28,39,105,144,371,662,22,159,125,272,137,242,131,737,489,393,567,268,395,51,1,761,578,367,202,158,30,109,918,916,685,219,254,203,616,23,434,36,21,55,141,295,95,13,24,16,187,93,385,128,18,96,948,48,269,763,160,318,64,5,165,86,101,244,326,115,518,35,286,836,261,37,512,7,10,68,327,623,716,384,120,403,253,688,110,333,224,2,890,457,143,100,197,12,386,252,301,320,258,963,310,65,14,237,924,221,170,494,421,83,699 }, +{ 53,573,445,297,436,73,6,27,151,113,26,250,491,19,614,145,611,200,315,112,45,396,881,138,80,42,58,70,34,684,25,631,17,222,287,106,74,472,122,61,624,714,690,235,5,90,32,65,255,64,648,29,14,66,95,85,322,2,209,243,549,311,644,22,1,52,665,280,47,161,86,76,87,194,312,651,3,667,133,416,75,307,114,128,78,62,137,51,57,4,226,141,50,136,46,862,483,49,289,884,119,440,632,814,12,21,176,237,148,56,236,283,174,36,135,63,123,337,10,453,33,412,84,469,214,59,108,23 }, +{ 90,788,804,32,115,693,494,81,84,56,725,403,119,21,18,681,99,77,202,526,65,240,214,576,64,817,91,0,784,350,241,102,397,342,690,848,104,61,24,945,318,69,825,453,421,365,210,134,123,117,33,20,707,402,60,293,263,207,194,114,49,888,370,97,43,673,671,523,726,326,125,510,879,773,718,715,701,462,283,249,180,153,59,57,51,11,887,835,814,111,23,4,889,468,289,247,221,95,89,86,66,120,719,325,192,899,730,683,595,422,757,486,484,426,351,312,306,302,285,275,260,238,216,203,196,177,174,165 }, +{ 24,7,14,149,71,16,18,108,65,69,28,154,189,35,2,140,124,92,68,150,118,175,429,302,0,66,273,67,336,38,55,97,251,46,60,36,547,1,267,484,22,458,230,29,83,6,9,388,86,650,172,314,95,109,114,52,135,21,64,886,602,74,505,10,232,5,20,12,596,823,705,398,32,103,49,101,420,570,236,531,289,533,50,298,168,169,48,133,462,451,380,23,882,246,283,51,799,13,43,25,185,797,194,847,75,357,278,158,37,439,346,594,330,733,399,423,610,164,192,535,701,104,345,467,143,443,125,137 }, +{ 68,0,101,9,212,65,124,35,154,189,69,149,114,230,67,39,252,100,1,336,702,329,16,265,520,83,103,191,264,755,64,589,88,562,28,705,30,24,283,167,118,18,777,732,478,12,21,723,71,166,23,49,175,133,398,335,596,55,664,218,237,429,389,532,818,604,364,50,158,115,484,289,246,352,238,410,141,22,759,419,323,375,345,36,13,10,806,128,51,547,796,269,213,5,48,722,140,247,321,96,565,480,164,180,251,330,803,553,37,676,95,143,202,86,75,490,443,7,936,724,99,2,190,694,346,197,782,917 }, +{ 5,2,186,61,29,52,45,58,311,17,171,80,227,209,48,155,1,106,243,496,50,46,334,454,592,21,513,14,502,255,869,666,151,663,262,223,75,207,38,32,270,667,62,6,27,738,659,119,56,3,807,54,780,287,378,84,721,74,220,290,96,163,483,72,263,89,67,549,103,281,136,37,583,76,430,181,536,7,70,408,12,394,64,787,73,675,148,495,469,69,161,400,409,36,833,86,65,34,19,474,587,742,767,221,26,324,128,4,309,115,24,83,306,425,25,22,431,10,241,760,90,141,764,541,133,240,95,383 }, +{ 15,1,13,2,5,3,4,0,341,7,6,23,10,11,14,12,9,33,51,17,165,153,197,365,569,180,77,40,102,8,115,117,21,901,64,217,317,22,141,16,128,32,457,196,31,134,28,36,291,18,177,139,137,237,719,961,37,57,120,111,352,349,386,59,202,453,629,86,752,19,758,38,93,873,269,44,391,372,49,143,95,342,730,30,475,498,509,260,210,318,125,110,304,55,27,29,403,82,48,24,277,72,482,275,116,494,25,450,98,54,351,76,90,326,41,79,373,99,899,546,523,194,144,474,94,56,203,39 }, +{ 13,23,15,51,0,1,10,4,2,5,77,9,115,3,12,14,22,102,11,197,33,457,7,961,165,453,403,40,59,6,21,475,494,18,719,64,180,28,202,569,32,401,31,37,17,16,8,210,177,341,523,120,141,386,730,49,217,99,44,318,57,450,308,36,629,421,125,93,153,342,90,117,24,111,498,139,269,237,30,196,817,291,134,317,326,98,95,365,899,260,352,19,48,82,275,391,72,38,89,110,509,482,86,873,216,76,349,148,247,79,27,54,116,474,65,203,901,615,55,45,351,128,758,137,304,752,94,50 }, +{ 15,13,0,1,23,2,10,102,5,9,33,7,4,3,6,77,51,115,12,11,341,217,196,40,14,117,153,18,317,569,22,8,457,365,523,16,342,180,197,165,120,719,453,961,59,134,730,21,64,141,260,31,901,401,291,899,386,28,139,82,210,177,349,269,49,24,482,202,17,372,817,44,450,93,629,111,32,125,351,326,300,352,37,318,110,128,30,36,475,95,579,468,57,308,19,137,38,98,247,437,304,275,20,65,752,237,498,391,494,758,615,90,86,373,854,116,277,99,72,96,48,421,203,45,216,105,898,89 }, +{ 166,39,274,190,438,310,30,333,530,100,252,656,625,539,265,404,778,88,101,455,9,0,557,960,593,329,254,131,1,676,382,709,724,158,553,840,731,228,98,31,669,23,68,219,264,48,21,748,957,812,406,49,224,127,44,13,344,36,272,286,51,159,520,419,105,96,116,125,613,83,5,93,795,124,213,28,863,22,223,35,478,10,816,352,293,69,67,829,16,827,258,616,364,160,64,242,639,578,120,167,128,65,518,217,321,154,32,137,187,604,180,4,679,435,118,18,251,212,144,86,95,759,141,77,410,793,371,37 }, +{ 734,94,148,308,79,111,413,468,89,37,431,115,179,401,569,197,629,341,188,13,873,474,490,365,72,12,11,134,205,245,317,117,4,247,358,59,40,152,509,51,482,901,961,76,99,528,23,180,10,498,217,216,477,339,77,139,102,38,165,55,749,421,196,743,579,143,33,542,428,391,875,752,471,497,54,1,452,153,177,21,488,588,3,64,141,349,453,485,670,277,291,457,2,128,5,57,403,36,475,529,184,540,202,48,377,90,7,372,14,50,405,210,437,15,758,402,464,386,352,300,157,6,17,0,45,794,9,342 }, +{ 539,228,224,219,190,816,840,871,30,669,530,957,258,748,863,406,93,187,778,531,160,213,88,466,839,36,131,137,116,202,728,679,926,120,44,352,39,321,373,318,274,276,851,31,574,442,860,144,730,217,201,203,613,251,856,55,559,533,944,141,435,1,450,242,230,22,127,86,110,64,800,28,49,326,473,9,260,752,268,254,166,418,717,567,456,98,96,776,902,385,968,100,719,180,269,616,317,918,351,83,827,492,10,625,931,494,125,831,908,197,21,365,372,82,371,35,77,716,854,795,689,295,704,5,332,345,244,291 }, +{ 801,393,125,791,386,730,23,551,51,21,144,116,48,203,98,221,175,165,949,93,575,31,126,13,958,326,697,601,421,345,788,293,367,22,963,541,110,455,60,608,670,273,197,44,463,4,32,677,623,127,33,259,834,35,948,453,375,133,107,120,77,40,223,0,407,342,68,719,121,43,14,446,621,590,523,373,308,102,49,16,899,1,815,475,199,770,725,191,493,804,96,36,319,141,101,92,39,146,690,71,55,7,118,38,805,352,649,735,615,602,533,531,480,323,279,246,208,201,196,180,160,105,64,743,589,132,117,598 }, +{ 13,23,77,51,115,141,33,217,4,2,177,6,0,102,40,7,64,11,10,14,3,1,180,269,22,202,9,59,16,15,17,352,318,128,18,197,291,247,32,165,196,153,117,134,317,19,5,90,341,125,237,24,137,210,36,28,304,349,403,49,12,95,86,25,275,372,453,365,31,308,752,216,342,20,143,139,475,93,27,98,498,57,26,401,21,120,386,391,457,326,8,569,316,494,421,111,65,901,203,110,105,30,260,468,288,164,437,241,45,48,29,35,99,44,482,719,82,402,509,144,37,244,55,546,56,285,961,293 }, +{ 2,52,29,70,112,7,58,14,75,87,46,220,307,186,171,163,151,1,334,262,135,278,66,5,69,155,294,97,38,140,74,16,45,172,287,549,92,227,400,24,849,226,331,113,61,324,25,48,852,32,35,21,37,6,461,67,409,50,19,12,644,315,267,145,26,243,223,311,27,64,60,54,232,122,71,18,83,17,571,583,189,86,36,853,103,72,65,394,380,587,780,774,309,20,43,22,357,42,96,314,298,128,209,335,536,95,474,767,675,270,337,76,80,89,330,222,0,90,721,290,230,10,137,108,246,126,28,448 }, +{ 321,88,213,435,466,100,689,382,30,230,1,795,352,410,96,217,699,921,190,831,521,530,443,36,83,686,144,418,840,264,438,854,128,251,539,957,44,141,180,557,752,335,69,223,317,960,31,265,48,137,855,116,934,201,98,748,160,669,909,93,166,203,812,731,403,21,274,351,593,39,778,206,367,772,219,64,228,131,455,202,9,284,5,372,35,326,238,127,23,735,82,51,656,285,67,158,310,125,639,800,221,187,224,332,269,120,365,576,494,13,897,252,345,822,478,765,349,702,77,268,421,242,208,110,318,859,101,237 }, +{ 363,520,411,354,101,195,668,132,447,9,156,905,364,664,121,146,360,23,18,759,781,1,98,765,271,51,96,676,252,264,13,777,5,31,586,621,591,478,223,167,848,21,100,691,936,551,33,393,857,70,48,883,125,682,77,16,39,687,948,821,44,367,116,93,24,407,265,127,593,834,110,49,842,522,296,4,293,166,626,812,865,64,404,203,333,102,538,212,36,638,40,55,446,50,647,118,291,656,897,144,639,60,771,697,128,403,379,67,35,692,541,165,463,163,604,453,658,199,590,69,791,286,7,32,12,317,217,724 }, +{ 51,23,13,453,401,475,12,403,457,730,719,21,5,308,99,115,2,32,11,4,3,421,961,1,165,15,629,899,0,670,37,10,6,17,197,9,33,18,22,523,569,64,40,202,28,19,56,26,7,57,27,16,72,48,196,194,24,59,494,177,153,45,36,139,77,386,210,128,117,65,758,34,8,391,341,817,468,217,54,29,450,275,221,76,757,509,350,141,134,90,89,46,38,291,180,880,237,102,304,216,775,734,546,402,361,277,137,130,129,67,41,25,14,247,148,62,901,498,477,283,262,260,133,123,74,42,801,365 }, +{ 72,76,89,205,179,90,245,528,148,54,184,37,12,431,38,308,152,4,257,59,474,316,428,401,464,57,460,749,32,288,358,405,229,23,477,645,743,99,11,21,51,115,497,77,217,1,794,79,157,14,5,629,540,488,453,216,45,449,17,155,2,221,770,165,48,670,421,569,328,266,50,452,197,341,181,3,128,769,10,365,137,64,13,317,587,241,36,457,734,188,247,0,339,313,7,536,350,471,9,202,94,468,524,509,721,482,141,46,129,102,773,697,33,432,40,180,270,237,281,619,741,381,86,361,961,543,476,720 }, +{ 376,43,147,470,20,595,173,107,858,97,319,142,427,819,414,178,729,362,426,325,5,259,7,32,861,392,61,798,246,14,104,198,230,560,885,324,77,21,422,904,356,0,465,126,357,48,707,234,38,330,22,49,207,35,501,612,66,13,202,95,534,359,298,2,10,577,76,28,16,70,113,64,132,4,17,481,318,715,102,60,58,18,784,59,120,40,72,11,90,29,500,23,74,279,879,146,33,1,112,660,387,56,52,45,315,81,232,9,494,177,140,36,115,37,153,600,57,199,217,31,12,121,347,51,403,878,671,164 }, +{ 202,269,141,494,318,51,137,403,128,77,453,4,475,217,678,349,421,5,342,352,96,102,291,177,372,317,64,341,180,21,2,40,10,59,32,752,33,11,61,3,515,120,304,36,0,365,6,31,13,22,7,39,30,95,125,260,237,12,717,275,115,28,23,98,244,482,268,105,947,851,402,805,203,194,144,954,576,450,351,48,859,289,283,86,65,55,49,44,795,197,82,90,498,312,285,241,201,182,165,160,57,56,14,411,293,284,9,822,326,899,523,931,921,897,863,854,839,821,735,691,668,579,569,442,360,251,214,207 }, +{ 77,202,318,102,494,33,128,269,23,13,51,196,153,177,117,342,134,291,403,0,141,137,64,15,349,82,22,351,203,49,275,615,373,21,551,393,473,217,95,859,31,210,4,475,402,1,352,65,11,10,450,120,32,180,86,285,36,18,2,7,3,453,12,260,6,28,98,14,125,39,421,48,90,5,372,40,194,59,44,165,817,16,9,115,326,341,523,17,678,216,30,197,317,116,576,96,127,237,61,93,300,24,365,124,70,401,105,730,214,160,114,304,289,110,329,20,704,163,35,386,208,899,144,692,244,67,50,719 }, +{ 253,951,352,110,811,499,244,854,10,638,642,752,559,180,143,141,564,8,260,341,498,417,922,661,901,197,206,165,911,373,137,93,282,873,351,384,15,959,55,332,120,762,717,728,269,160,898,82,473,64,326,164,36,365,203,22,704,533,317,509,31,479,86,968,116,318,115,202,531,1,268,217,33,535,28,44,9,617,237,13,434,4,261,23,77,940,125,5,372,11,851,864,40,32,338,21,102,0,569,386,30,96,482,349,169,824,421,51,105,546,12,401,242,758,576,391,35,127,98,170,2,117,144,844,295,457,24,291 }, +{ 141,23,13,5,4,269,352,51,180,21,317,115,202,217,1,197,2,11,365,318,32,341,3,6,372,137,7,498,77,64,349,291,48,752,33,0,165,237,9,15,22,12,901,221,253,16,144,244,143,403,93,28,401,30,453,110,475,24,304,40,39,120,125,494,421,203,308,72,160,569,18,386,177,35,102,482,31,14,260,44,10,36,391,95,473,373,153,49,468,864,247,117,873,128,100,88,59,134,69,546,241,76,717,89,86,196,17,37,437,166,509,351,164,98,854,67,8,90,704,629,82,851,450,96,811,367,326,284 }, +{ 252,101,18,9,0,68,16,118,329,35,364,24,39,167,60,333,265,109,158,553,71,212,677,28,419,604,100,793,49,286,159,154,191,105,55,310,272,694,327,455,124,810,806,48,22,166,254,593,21,7,374,344,1,520,146,121,538,5,917,65,346,706,857,634,92,562,23,627,404,126,925,13,98,185,51,108,30,14,907,271,169,709,31,942,95,10,446,96,149,628,557,125,375,170,175,67,688,199,363,132,639,239,190,656,107,621,320,12,912,638,137,36,150,44,815,302,50,463,865,221,438,32,37,578,671,439,848,131 }, +{ 28,109,158,9,168,49,39,175,35,159,22,0,55,185,65,289,272,67,95,194,114,346,333,577,169,584,254,1,344,327,105,570,286,336,24,83,86,30,747,68,627,374,124,505,69,101,810,610,837,439,36,154,535,133,103,7,310,16,14,835,131,756,601,345,2,429,874,149,389,50,799,793,252,347,283,208,547,51,251,46,23,100,128,10,189,312,164,424,912,21,484,5,64,688,637,12,190,578,455,96,239,420,13,518,143,634,137,419,533,364,18,398,166,48,709,320,218,538,127,160,170,230,323,125,71,37,98,202 }, +{ 15,13,1,5,2,3,4,341,11,23,0,33,6,51,7,12,40,115,10,9,77,102,14,197,365,180,17,901,21,217,317,196,165,32,569,22,141,8,64,961,453,457,16,153,59,117,18,352,31,202,125,37,139,291,401,629,28,386,269,134,719,177,475,237,93,318,120,730,44,48,372,110,24,111,899,36,210,403,19,57,523,391,349,752,326,49,38,128,308,342,260,494,498,116,95,509,98,137,30,873,304,758,90,801,27,56,86,203,615,144,275,45,482,450,65,670,373,54,41,50,734,94,143,25,82,244,105,79 }, +{ 173,693,18,104,422,20,102,0,77,49,61,5,784,560,526,707,226,32,13,33,397,64,193,344,134,117,91,66,21,153,715,263,81,95,172,232,207,196,31,11,6,65,510,42,25,414,197,180,135,48,29,22,10,43,72,819,4,470,324,40,85,546,86,887,347,51,319,204,57,28,27,426,359,283,498,376,138,128,90,194,392,643,879,701,474,87,74,59,52,38,9,387,681,7,862,597,192,814,847,718,713,334,291,270,217,165,125,83,37,56,23,202,177,141,122,825,241,509,330,942,817,523,370,269,115,98,84,44 }, +{ 23,51,386,308,13,401,221,421,801,949,719,165,468,730,21,770,341,125,697,453,867,14,115,670,457,6,391,403,1,475,958,523,450,117,102,197,629,365,33,569,607,7,2,758,120,66,899,515,743,134,217,791,342,97,16,326,67,733,74,350,150,773,749,260,202,52,29,18,9,501,456,805,809,734,482,56,0,317,135,4,906,458,153,3,380,103,645,579,558,490,24,93,83,388,196,108,817,11,99,903,685,177,69,32,561,267,236,335,5,180,594,696,554,451,642,576,564,559,546,349,291,238,122,89,87,76,75,73 }, +{ 49,0,24,16,105,159,28,9,35,158,68,320,18,109,239,55,65,170,124,7,1,154,301,347,71,95,14,286,518,101,2,344,327,272,127,118,39,21,60,374,890,98,577,623,12,149,22,5,916,338,512,168,36,713,395,23,31,67,51,371,13,48,185,175,125,137,10,424,169,64,202,737,479,30,747,538,6,761,37,108,128,346,242,32,740,293,131,46,50,302,654,69,44,252,419,289,810,86,114,92,83,616,141,385,846,299,164,254,364,506,403,677,310,671,375,191,221,116,938,318,634,100,165,439,115,143,333,96 }, +{ 2,5,29,45,207,58,61,1,76,292,32,655,263,14,476,52,72,6,119,17,306,70,186,7,106,46,179,214,790,90,148,243,720,38,227,50,240,112,151,710,255,592,84,89,64,48,25,464,75,241,209,21,129,74,155,460,358,3,128,454,496,425,36,77,19,22,141,738,10,115,56,26,86,16,123,66,408,311,27,245,0,249,95,65,205,287,519,290,618,40,24,177,549,171,202,87,4,59,163,307,54,334,237,51,23,62,269,12,102,37,18,449,869,137,80,69,113,28,99,33,67,13,135,180,318,315,769,288 }, +{ 125,21,115,95,715,197,49,165,64,56,66,32,6,278,13,33,713,681,808,350,204,237,120,408,263,241,172,135,81,22,324,87,509,74,0,85,97,4,90,86,468,65,888,353,174,558,391,841,192,180,23,950,872,645,571,554,650,580,141,5,2,412,283,467,341,673,59,138,38,108,903,177,91,51,7,511,370,164,75,31,620,475,203,893,170,98,712,104,44,19,885,10,1,561,426,415,308,63,403,196,153,117,102,84,389,128,27,825,569,210,77,347,53,123,386,316,159,143,835,194,900,448,93,11,546,232,18,572 }, +{ 612,325,427,202,107,494,5,403,470,147,518,376,64,362,49,21,392,788,465,98,14,342,125,623,318,178,48,31,845,804,534,858,423,70,690,595,414,278,93,422,269,453,7,660,102,77,33,693,61,953,767,798,819,581,307,298,234,198,116,110,97,39,32,30,10,237,4,671,663,389,289,194,128,43,0,20,904,725,761,711,678,509,501,493,366,319,236,232,220,174,104,99,95,88,87,68,55,44,38,37,18,9,900,293,13,715,441,315,105,291,163,141,391,112,848,397,22,763,713,558,846,835,828,822,757,657,557,546 }, +{ 32,76,21,72,14,241,449,50,292,2,350,5,1,155,48,221,46,38,89,179,270,45,476,90,54,720,214,430,148,464,17,281,129,460,37,205,413,741,181,36,245,519,29,227,52,290,257,184,405,12,123,710,3,528,162,7,773,243,541,10,358,0,288,431,67,57,249,536,316,152,99,96,23,106,171,51,513,4,743,308,618,128,137,6,115,64,474,477,103,408,86,207,769,229,263,9,328,83,133,180,59,183,119,552,794,787,540,114,217,488,425,218,62,11,421,659,77,645,760,721,22,524,202,58,400,401,141,770 }, +{ 24,154,149,28,124,16,35,0,71,7,14,68,175,108,65,18,55,92,109,302,118,9,336,570,484,398,69,140,60,2,420,67,189,22,101,46,150,185,158,346,230,1,439,169,252,273,168,419,289,39,49,38,505,251,83,345,701,535,799,610,637,267,21,36,97,10,650,50,95,12,429,246,103,533,114,388,458,133,5,48,399,314,86,6,671,375,159,66,364,29,236,329,962,703,105,547,23,51,172,601,333,283,64,265,886,126,96,194,52,13,232,722,32,20,389,54,37,677,164,100,143,125,327,602,75,917,344,286 }, +{ 5,14,1,50,48,2,46,38,67,54,45,103,24,270,21,96,513,155,290,83,58,61,281,69,32,36,181,72,502,0,29,171,17,12,16,7,76,263,37,18,28,52,227,35,425,207,89,666,22,221,243,133,541,663,65,10,741,218,408,223,114,536,108,474,75,9,186,6,592,552,51,23,99,238,328,115,309,794,540,3,433,834,86,292,760,477,148,449,428,64,476,128,400,528,119,655,55,236,241,106,202,141,765,766,487,70,13,163,137,366,95,71,587,697,488,720,179,160,19,418,807,308,659,149,27,90,431,4 }, +{ 961,13,569,37,197,23,474,94,148,79,12,629,401,111,901,341,15,51,165,405,734,873,99,4,413,188,134,89,10,11,358,152,179,117,308,115,40,59,72,468,245,139,457,33,153,247,365,477,205,277,339,317,77,758,5,38,498,76,579,453,216,180,0,3,542,762,36,490,2,177,102,143,482,217,196,471,14,452,128,437,55,1,54,304,22,210,9,377,64,638,202,17,21,488,349,431,300,775,528,485,32,7,141,318,372,86,8,509,157,45,291,497,137,184,6,864,402,670,275,880,403,110,543,328,529,875,90,657 }, +{ 102,33,51,77,23,40,128,202,64,13,141,139,196,318,403,153,269,117,99,137,22,4,453,134,59,115,12,10,11,475,0,14,86,65,95,180,15,2,120,1,210,494,342,28,18,165,352,6,36,49,177,217,300,260,82,719,401,421,24,402,386,21,5,457,7,197,730,3,125,37,450,19,291,48,523,17,351,237,27,114,326,93,50,111,38,341,317,25,285,98,26,277,110,54,194,46,9,391,361,275,16,44,31,961,32,308,96,349,899,34,133,854,569,29,485,757,108,105,283,67,144,373,57,509,678,498,221,116 }, +{ 24,35,1,67,0,28,18,16,103,9,68,69,50,65,83,149,12,5,71,133,14,7,22,114,75,96,2,55,189,218,108,48,21,54,223,175,281,251,181,23,46,58,37,124,101,51,336,238,36,70,13,154,118,163,418,10,99,60,745,766,137,537,39,128,38,335,202,141,487,49,361,64,32,45,115,486,155,765,283,109,502,345,230,140,87,430,171,29,269,398,30,267,95,221,543,92,86,820,236,217,6,412,285,17,160,302,77,177,596,61,318,180,458,488,31,52,540,165,352,4,237,105,920,545,125,657,705,273 }, +{ 384,617,940,911,959,855,332,206,282,434,244,253,141,268,352,93,120,144,10,269,137,110,160,201,417,36,143,450,116,203,260,44,811,31,717,951,55,295,318,64,187,261,373,567,202,276,489,258,326,498,98,642,559,180,473,127,22,728,860,217,1,661,219,499,86,23,851,638,8,197,692,341,13,531,165,224,351,523,817,115,9,854,164,125,752,365,28,533,367,51,922,15,564,131,21,96,317,128,82,5,662,699,843,105,871,372,615,237,0,83,386,30,864,509,242,800,901,284,291,551,77,2,776,349,7,704,37,574 }, +{ 93,30,203,473,326,704,137,652,450,31,800,269,848,160,127,190,274,144,254,219,187,625,349,303,166,352,120,372,116,521,224,110,131,752,435,88,217,202,141,260,291,77,367,156,340,228,822,744,5,382,197,296,658,438,180,863,410,44,730,698,578,317,418,1,859,165,850,829,735,494,102,795,616,159,264,921,98,960,373,36,100,23,13,341,128,21,64,258,10,0,523,330,318,39,717,321,778,709,7,968,125,919,942,177,49,86,158,9,365,225,901,478,105,686,531,33,924,888,851,96,2,363,371,442,385,747,691,615 }, +{ 53,73,27,250,26,200,19,297,630,714,472,611,42,122,235,25,17,34,6,436,65,684,106,680,690,80,14,256,113,322,57,813,85,108,64,45,59,648,283,4,161,194,573,445,236,389,128,862,444,114,624,390,469,78,56,51,141,133,2,90,22,84,11,176,491,0,18,255,495,453,416,32,3,412,23,47,145,137,63,29,665,123,95,269,46,378,62,61,614,483,86,361,814,10,5,605,136,396,216,177,112,50,249,619,730,77,129,119,503,13,432,202,179,12,719,285,318,24,597,102,151,183,76,21,130,742,37,209 }, +{ 15,2,1,5,7,3,0,6,141,180,10,4,13,33,11,352,77,197,9,217,14,134,64,12,341,317,365,165,752,40,498,372,269,102,23,17,115,117,291,8,349,22,51,153,196,59,32,237,16,901,36,120,21,260,202,342,961,128,569,143,82,57,864,37,45,318,873,110,93,111,457,18,72,391,386,76,28,86,351,125,137,509,95,31,56,954,326,450,79,48,27,854,139,29,482,19,38,44,546,89,373,99,49,244,90,55,84,719,523,94,403,35,177,54,579,453,277,24,164,922,41,253,30,203,730,61,20,58 }, +{ 254,530,960,613,39,829,688,221,406,190,166,475,827,438,30,9,669,269,180,23,98,51,31,228,21,541,202,274,141,840,318,131,938,105,48,158,127,125,96,44,846,137,453,49,393,219,352,116,13,1,679,421,856,625,286,317,36,308,100,333,310,403,115,890,144,217,791,101,931,616,569,10,386,551,401,0,876,272,910,55,258,88,102,77,327,656,224,629,252,64,468,731,160,385,860,518,926,28,697,344,326,159,33,5,197,93,944,627,128,165,816,293,574,455,187,765,371,364,843,404,242,120,22,284,95,32,345,506 }, +{ 39,9,166,28,158,35,101,30,175,364,68,168,190,0,67,346,194,100,49,88,131,36,333,420,274,310,570,344,404,252,83,289,706,109,55,69,208,1,86,160,137,610,96,65,967,251,438,352,637,336,114,16,577,159,128,254,756,154,345,219,22,64,230,799,228,810,95,24,51,747,224,185,141,818,149,584,768,202,103,419,429,21,826,752,124,530,857,31,656,10,13,169,323,505,237,143,865,562,189,165,793,238,694,535,23,217,874,455,164,116,105,7,197,127,44,547,125,286,180,213,868,539,71,2,703,272,498,115 }, +{ 62,555,548,56,3,507,161,440,34,215,527,136,514,162,361,4,211,17,130,328,383,757,14,84,183,123,205,152,494,11,184,57,585,38,236,202,377,59,54,504,452,129,402,128,176,556,229,880,80,372,300,381,495,40,33,378,37,469,106,266,472,119,12,214,497,248,102,803,403,342,249,73,53,77,245,412,313,51,196,27,153,543,257,485,210,471,76,283,488,99,305,200,421,13,139,157,23,349,432,79,45,90,339,32,117,240,46,179,714,457,292,108,134,250,719,318,41,217,64,21,22,369,710,188,72,133,277,453 }, +{ 126,107,92,356,493,279,359,7,246,97,298,362,392,441,508,60,199,35,423,16,146,132,121,14,43,230,501,232,939,20,649,150,173,5,779,660,414,607,672,314,590,259,534,21,66,140,729,683,387,191,18,71,941,955,953,32,104,49,48,22,38,0,46,319,640,95,819,172,147,167,24,357,28,10,2,13,858,603,324,195,68,598,12,1,345,595,426,61,64,653,522,407,612,470,4,885,77,23,52,236,125,37,33,702,31,687,581,6,118,74,98,711,399,212,40,75,70,376,465,517,360,135,271,105,102,50,192,156 }, +{ 291,141,349,373,372,82,15,260,351,120,922,854,326,217,318,77,450,1,352,898,93,269,523,102,202,21,203,144,13,64,23,304,5,752,137,437,32,51,473,98,704,247,180,177,317,237,197,342,59,457,947,817,494,316,76,33,719,615,300,961,12,36,968,954,475,386,367,268,165,115,86,83,69,67,48,39,22,2,851,341,275,210,201,110,662,576,418,403,391,365,284,241,194,116,105,96,88,54,44,31,7,730,485,205,125,40,117,875,873,864,661,579,498,490,482,468,393,332,308,244,221,190,185,169,160,128,109,100 }, +{ 141,217,352,115,269,180,317,752,341,244,13,291,21,77,23,197,365,5,372,165,51,64,237,349,48,9,4,304,482,102,32,864,28,318,247,137,11,202,308,33,39,98,7,3,1,498,351,125,2,468,437,110,10,82,490,253,120,100,88,954,515,177,93,901,31,12,401,201,0,49,922,72,203,569,55,30,6,342,260,143,22,117,898,717,44,89,35,153,144,854,128,36,386,350,101,68,196,40,373,221,134,96,206,873,391,316,288,241,164,160,105,16,90,579,403,326,645,629,523,421,284,116,65,61,961,59,24,18 }, +{ 78,47,390,108,130,711,813,19,453,412,27,283,730,444,690,196,250,123,236,128,389,503,200,650,183,14,59,4,26,65,472,133,73,34,381,297,153,51,177,57,269,11,53,318,33,216,719,17,194,630,680,322,619,114,113,368,714,46,684,803,432,56,77,29,657,6,480,141,117,3,445,22,603,122,42,235,84,361,90,899,13,64,23,102,249,2,754,524,605,457,99,63,0,475,349,789,40,38,588,210,18,152,106,134,678,436,24,10,25,597,50,529,291,594,401,52,245,95,402,894,129,266,86,471,339,119,523,137 }, +{ 250,297,34,80,472,495,311,64,53,17,667,61,148,27,56,483,469,136,90,73,141,161,45,243,194,3,106,597,527,176,128,751,352,151,436,62,86,874,738,4,209,153,833,491,881,614,396,32,383,84,26,76,445,231,95,5,659,14,887,237,29,378,573,431,947,196,405,58,23,255,119,117,65,11,113,59,33,719,134,814,292,287,57,177,721,240,12,585,611,247,269,51,22,283,200,498,2,583,304,180,19,145,312,165,678,205,202,10,835,349,72,217,114,514,40,555,315,588,137,130,37,875,389,197,207,179,0,13 }, +{ 51,23,551,421,453,13,33,102,77,21,326,153,401,958,308,120,615,196,5,48,202,221,115,692,523,791,403,899,342,4,801,475,210,805,260,107,450,291,966,93,730,576,32,117,842,541,468,18,1,16,203,116,110,697,60,96,126,121,386,68,31,40,2,494,259,125,463,407,137,154,24,704,427,373,218,180,92,10,575,244,35,104,64,175,302,628,351,318,197,160,98,71,817,770,743,670,612,12,859,158,17,590,199,650,7,945,815,752,346,949,851,717,642,597,473,439,402,367,253,252,217,146,56,44,6,3,36,847 }, +{ 98,223,393,363,411,834,478,664,1,691,791,284,156,447,724,914,759,697,293,354,541,807,51,586,421,48,948,668,765,848,264,195,9,163,658,23,801,18,125,551,21,386,96,340,772,909,682,963,730,698,31,453,360,13,371,949,905,770,520,5,621,781,221,744,271,296,116,202,647,857,132,70,118,335,821,44,656,842,367,897,719,121,167,446,32,69,457,450,318,101,100,670,379,638,127,634,144,137,410,761,662,217,846,758,146,401,932,615,75,777,883,538,87,165,33,225,936,591,286,93,166,269,197,812,326,141,105,919 }, +{ 232,7,107,92,14,46,135,172,359,220,314,278,60,5,171,192,2,526,16,620,21,262,52,75,35,32,126,294,29,872,24,132,18,77,246,87,448,571,230,48,1,54,12,58,38,236,50,606,247,86,23,70,177,112,461,298,121,380,97,71,37,888,217,392,66,279,150,356,155,64,13,20,441,108,678,304,751,572,147,226,115,334,140,61,291,785,153,739,579,43,451,178,146,186,947,437,387,394,90,51,330,195,194,875,307,216,352,597,587,357,117,0,269,181,45,603,349,210,199,137,415,128,267,95,366,315,156,31 }, +{ 32,76,2,241,21,14,292,1,476,72,48,5,45,720,50,179,270,214,46,89,90,29,148,129,464,155,17,290,519,38,227,460,205,123,245,350,243,358,52,184,54,257,171,710,249,408,7,400,186,221,405,513,3,36,162,618,12,106,37,288,181,57,502,413,0,263,10,428,316,99,281,207,6,229,4,58,152,64,115,425,430,769,67,741,119,59,22,128,659,308,773,183,23,202,96,86,431,83,75,62,141,9,524,51,16,103,328,645,69,237,497,255,209,217,130,11,24,496,666,28,137,403,528,18,247,536,452,77 }, +{ 15,77,33,102,13,23,51,117,4,32,11,202,40,90,0,1,5,141,153,247,177,128,134,214,288,21,137,269,17,453,3,318,291,403,8,110,82,180,10,59,165,494,22,6,342,197,457,351,64,475,260,9,93,2,120,523,326,48,31,217,115,57,421,386,12,373,44,196,16,19,719,730,25,139,96,352,341,36,961,49,210,317,349,203,125,194,401,18,275,7,24,28,98,817,285,898,365,95,308,901,450,30,99,661,372,86,223,65,854,615,922,402,56,899,697,758,208,103,14,237,116,105,569,37,304,221,704,638 }, +{ 66,74,135,69,6,380,278,267,97,14,2,29,1,75,24,87,324,52,150,38,335,138,357,189,204,172,67,103,25,388,85,7,462,220,83,423,108,550,149,71,603,42,733,571,696,174,26,582,140,36,458,565,16,808,895,802,486,46,238,35,19,70,298,21,18,114,65,226,22,86,60,418,32,251,192,92,64,451,280,273,500,309,95,594,222,501,12,50,5,145,563,398,353,0,889,28,443,48,607,711,641,517,112,262,336,348,37,125,580,596,906,705,622,572,10,160,81,43,63,54,58,133,792,68,620,124,165,294 }, +{ 152,471,4,339,59,188,79,77,11,377,128,94,529,102,33,202,402,111,12,99,51,216,542,452,291,40,474,342,210,196,13,141,184,64,403,37,453,153,134,318,17,177,117,494,23,961,139,5,32,76,431,3,300,257,205,757,497,115,401,275,269,10,229,179,72,475,21,2,86,90,14,57,89,349,1,0,180,157,285,277,148,629,137,266,197,38,36,304,45,217,485,6,498,678,129,405,700,95,569,245,437,734,247,460,22,413,313,352,19,372,775,308,421,292,880,48,237,143,769,503,358,873,488,54,7,618,710,386 }, +{ 15,1,196,0,33,13,2,77,5,10,9,102,217,23,7,6,3,12,117,14,4,134,177,153,40,11,457,291,210,275,22,730,16,115,18,165,21,386,341,719,120,82,180,64,197,51,141,523,317,8,569,365,450,202,32,961,372,260,28,349,342,125,352,95,37,31,899,351,17,128,318,269,48,110,49,403,19,93,901,59,475,401,72,326,24,139,36,65,111,61,237,758,494,90,99,30,854,304,817,44,482,137,391,56,509,898,437,25,308,752,98,38,629,247,76,922,421,86,57,373,670,26,253,70,203,221,801,579 }, +{ 209,106,17,207,45,255,119,655,5,742,306,378,61,62,136,425,263,80,311,84,240,29,790,2,58,56,186,32,3,383,738,243,454,592,869,76,151,14,179,129,290,123,48,72,440,148,21,52,292,64,90,504,287,667,214,46,1,128,54,408,507,50,476,34,27,833,549,57,38,548,155,227,162,86,241,19,70,152,89,205,6,334,171,26,496,483,112,183,181,141,130,400,249,59,245,266,184,555,663,75,270,358,77,229,361,37,215,95,445,4,297,10,211,25,33,666,519,881,11,257,202,73,710,269,237,40,221,180 }, +{ 120,450,260,817,523,15,23,1,51,326,98,13,202,82,125,64,5,351,318,21,31,269,457,32,116,93,115,165,102,77,33,12,95,922,719,30,494,110,44,615,128,48,14,180,141,36,2,730,61,9,137,342,403,899,197,86,49,10,704,551,386,237,8,203,96,83,67,37,7,177,291,352,90,22,18,16,402,196,153,373,179,144,76,39,17,6,961,854,475,898,692,401,241,207,148,105,100,65,50,20,453,349,344,3,217,901,678,341,293,263,247,210,99,88,69,45,40,11,958,801,317,132,126,107,35,24,752,661 }, +{ 116,268,492,918,93,206,203,940,23,51,551,417,523,499,473,959,22,421,8,125,791,692,730,120,31,401,949,10,0,13,899,165,44,386,450,260,867,453,64,9,629,115,36,719,559,341,728,170,55,137,599,299,197,615,569,180,457,28,391,141,1,326,685,301,564,479,475,338,506,86,509,105,638,202,95,817,308,242,253,762,244,2,373,801,670,127,901,21,49,870,951,5,558,237,143,269,37,752,239,12,642,922,403,873,7,352,4,758,365,318,128,18,965,456,32,320,221,14,805,512,317,498,961,16,704,98,33,898 }, +{ 15,13,165,23,197,4,0,1,180,12,11,117,5,8,82,901,719,341,2,120,51,9,523,260,509,7,3,730,141,386,10,450,351,6,33,752,758,134,115,498,352,961,317,365,153,898,14,899,854,64,217,922,873,22,569,326,93,128,817,31,269,237,291,202,21,110,391,37,801,615,28,318,17,457,44,16,77,18,32,98,99,36,49,30,349,401,453,403,102,38,373,958,35,629,116,40,137,125,55,19,482,203,304,242,86,546,474,96,24,144,65,308,475,139,143,247,210,402,89,54,69,177,196,48,485,661,83,734 }, +{ 14,24,69,66,7,108,2,398,267,150,67,97,189,29,149,74,38,71,36,6,83,52,273,388,140,1,135,18,46,172,602,65,28,124,429,302,154,380,336,451,547,16,278,114,732,68,484,324,75,733,92,175,103,118,22,462,0,25,251,357,86,596,55,160,87,705,594,35,60,531,133,467,423,711,236,95,650,109,458,443,298,21,886,5,50,138,26,12,505,238,168,309,314,42,32,10,646,220,49,70,335,192,232,906,420,204,48,20,64,37,43,603,13,19,533,96,85,23,565,51,330,226,550,221,570,208,283,54 }, +{ 330,335,96,839,523,662,367,443,615,418,141,403,717,244,692,576,922,372,1,352,269,217,752,349,64,498,36,854,966,180,822,831,954,873,864,317,284,291,776,201,318,144,69,98,351,678,7,21,5,160,77,203,83,82,442,137,551,2,260,223,622,187,494,44,13,385,128,202,23,475,75,341,901,48,31,437,238,304,247,230,765,93,373,120,393,22,67,251,371,293,125,661,342,859,285,898,163,365,30,32,450,29,110,459,326,934,51,10,197,842,851,399,246,189,800,421,237,0,37,116,221,165,16,579,127,9,321,88 }, +{ 184,257,205,90,245,229,769,524,152,432,497,619,17,57,5,452,32,45,381,266,106,2,59,21,179,4,292,217,313,460,288,1,214,129,14,76,77,3,128,216,48,207,471,339,157,141,710,11,202,38,64,519,369,6,61,209,12,37,119,79,99,123,29,317,72,188,7,62,255,33,58,162,269,247,40,54,102,115,177,51,618,372,476,318,10,89,137,86,249,148,241,263,180,316,352,402,50,403,655,155,19,210,23,94,136,291,308,349,358,237,453,377,111,56,139,425,365,27,341,46,143,277,401,153,588,221,0,186 }, +{ 7,14,16,46,107,32,35,24,70,60,23,307,172,5,18,2,38,87,92,58,13,21,20,10,177,51,202,77,135,48,37,128,0,97,232,115,171,112,126,43,9,220,140,318,12,141,102,71,852,155,4,54,291,22,90,1,269,52,163,33,137,298,192,28,66,64,217,356,61,132,294,278,359,147,349,461,95,29,45,609,448,121,259,186,314,76,474,304,362,17,108,6,150,415,59,400,780,146,36,342,31,275,67,86,246,402,334,279,678,75,247,50,620,30,409,502,39,372,72,49,230,40,494,227,69,465,872,68 }, +{ 140,66,97,172,92,7,267,189,14,314,16,69,298,380,60,135,451,230,150,35,24,71,74,357,423,232,330,38,324,246,192,443,278,563,2,572,877,550,462,126,448,52,893,508,67,501,6,568,29,21,603,46,565,607,83,388,204,633,22,279,18,149,723,733,399,65,48,1,95,64,526,915,5,32,726,28,75,36,841,25,350,87,138,108,68,500,895,10,43,0,251,808,125,104,12,426,49,81,50,20,37,309,517,674,86,802,174,107,103,653,173,582,220,226,85,387,26,55,712,903,241,197,121,237,262,54,711,191 }, +{ 121,167,354,212,132,407,191,107,147,146,271,199,101,446,126,647,195,35,259,18,16,60,55,20,590,465,43,411,68,363,178,198,142,562,9,427,463,92,640,14,346,7,727,798,941,520,364,325,815,5,581,13,1,621,21,23,522,534,0,589,279,158,28,806,706,125,439,109,98,97,118,48,22,694,955,393,604,362,150,932,608,51,105,33,252,165,234,265,108,49,598,156,96,419,818,10,467,197,154,493,12,765,376,120,70,786,169,777,967,102,687,38,202,32,682,246,64,39,31,447,781,612,58,159,61,260,40,450 }, +{ 76,90,460,205,179,257,245,32,288,184,21,45,769,358,316,524,229,241,152,5,57,48,497,2,476,148,720,619,452,266,72,155,1,17,38,432,14,54,243,290,292,227,449,381,12,4,89,247,50,29,313,645,270,59,350,11,129,216,51,217,106,157,221,128,99,58,37,471,64,188,77,214,408,339,141,115,186,3,369,23,52,202,79,46,428,425,308,6,317,464,7,255,405,162,413,33,171,519,496,372,365,341,269,401,10,0,94,36,137,875,318,263,237,62,588,352,123,474,181,431,40,177,291,180,102,61,207,618 }, +{ 147,259,427,178,798,581,878,786,198,534,465,325,929,142,362,20,376,43,107,771,35,481,132,470,234,5,626,146,590,279,97,522,49,70,77,345,21,199,640,450,612,202,13,48,14,102,150,0,33,725,595,846,941,23,22,7,58,195,423,660,501,121,687,126,518,260,117,904,120,858,953,39,342,60,455,1,196,165,125,158,105,159,246,92,28,153,10,31,360,315,346,271,761,683,603,212,18,298,128,711,167,379,318,113,623,817,95,32,291,61,16,134,72,359,108,221,197,115,98,163,767,523,493,191,329,30,87,50 }, +{ 473,778,450,203,855,144,93,617,30,704,141,466,530,330,372,459,201,326,934,321,88,839,254,36,505,403,128,559,83,120,523,217,86,213,131,613,717,110,332,728,344,251,264,352,686,434,82,39,578,317,206,35,625,435,44,795,840,961,539,274,244,116,137,55,662,265,228,863,577,406,96,924,601,564,417,384,351,341,225,95,49,28,800,418,21,831,719,531,367,219,202,31,64,822,224,335,960,968,922,854,829,688,365,197,22,160,410,165,873,752,716,518,456,347,242,125,731,269,180,948,498,478,349,237,98,77,33,9 }, +{ 523,475,899,730,453,51,23,403,719,13,421,457,33,386,196,817,801,4,120,117,153,11,450,260,102,202,515,361,670,165,758,494,125,108,128,961,283,236,99,21,3,880,5,401,32,59,77,543,615,10,6,318,402,221,183,137,650,57,40,7,2,1,90,847,412,247,241,210,207,115,12,208,181,150,133,114,63,42,467,775,389,342,111,56,39,31,30,28,22,9,0,576,558,304,229,216,177,152,123,113,47,29,25,958,554,391,629,968,967,966,965,964,963,962,960,959,957,956,955,954,953,952,951,950,949,948,947,946 }, +{ 1,5,15,2,13,0,7,23,10,3,317,341,6,9,4,365,11,115,33,180,217,77,17,64,197,165,102,117,141,40,14,21,51,32,134,12,8,291,901,752,16,569,22,509,352,237,482,372,143,18,498,153,457,59,128,349,269,125,202,177,961,546,31,391,342,196,45,36,873,57,38,28,37,86,48,386,24,19,139,318,111,95,29,44,403,27,719,304,120,41,110,629,93,72,164,275,61,55,253,99,56,90,49,137,730,210,864,758,35,260,76,50,579,116,94,300,221,26,25,277,326,98,54,475,453,30,79,244 }, +{ 19,119,40,4,27,84,77,56,202,73,102,59,757,33,485,26,300,210,504,494,128,80,862,23,402,63,42,139,880,342,129,32,5,361,25,13,196,51,12,11,2,99,21,6,153,469,123,10,710,53,65,618,64,161,117,736,90,38,22,106,17,803,95,76,0,45,37,14,548,813,250,245,108,297,453,378,162,57,113,460,403,611,255,205,256,383,217,1,235,114,86,742,209,152,292,630,576,240,343,790,667,475,16,48,133,122,18,136,134,85,115,15,283,34,179,436,180,78,29,9,200,605,561,318,49,269,684,495 }, +{ 32,20,13,21,2,38,5,43,29,23,61,12,52,115,90,6,202,37,64,48,95,207,51,81,66,7,25,49,17,74,26,76,178,147,98,46,362,54,22,63,19,14,0,259,128,577,125,97,58,91,77,56,182,65,197,465,376,27,141,427,316,1,241,291,113,878,217,247,312,137,120,4,858,481,142,595,165,31,237,93,230,379,534,482,180,116,86,72,42,11,44,203,263,470,356,352,279,102,84,40,33,687,626,835,786,107,683,260,18,318,24,414,298,468,367,326,304,216,117,105,99,3,933,612,415,347,501,344 }, +{ 339,188,11,377,79,4,99,94,12,542,102,111,474,37,51,33,471,453,152,40,475,342,77,403,59,196,277,139,153,57,134,117,13,775,229,128,401,38,880,23,210,64,184,202,431,115,961,157,300,3,266,72,485,402,89,629,21,54,15,129,177,76,14,162,32,17,216,10,148,275,269,5,757,452,361,477,141,90,205,313,569,494,2,65,179,120,257,381,421,237,197,405,86,488,328,36,318,48,22,137,165,413,50,308,0,1,341,130,82,95,49,457,161,543,245,18,304,260,62,45,285,180,291,41,529,498,125,56 }, +{ 128,283,503,34,318,529,432,176,495,275,231,412,527,291,402,161,381,202,59,3,389,469,177,803,53,585,216,14,269,57,200,17,73,472,27,56,250,136,678,4,152,51,862,361,80,245,11,789,619,194,123,719,401,23,714,84,507,210,77,12,65,322,106,99,436,130,129,46,62,2,13,38,162,369,236,108,33,183,133,457,153,64,483,211,297,741,514,403,114,18,629,961,378,555,440,119,383,597,475,29,453,229,40,165,240,215,196,655,611,556,21,249,117,54,667,134,102,308,814,19,50,86,391,22,0,197,95,26 }, +{ 15,217,13,341,317,141,365,115,23,51,180,349,291,1,120,77,260,269,202,137,21,5,450,352,373,110,0,372,64,33,36,128,177,4,318,351,102,9,197,2,304,854,10,901,7,12,32,165,326,752,40,244,922,160,96,22,523,117,11,48,16,86,661,90,457,82,386,494,403,308,59,28,55,253,247,18,498,134,8,143,153,221,14,6,83,30,196,93,3,37,615,453,401,898,421,817,24,95,961,285,475,719,873,17,35,39,391,730,125,67,237,49,98,811,704,642,717,216,203,69,482,99,342,402,851,50,57,569 }, +{ 13,961,15,4,11,12,457,51,3,37,2,197,5,10,569,99,115,23,6,72,89,14,0,1,134,7,59,33,40,38,165,111,196,76,405,79,139,117,148,498,873,339,719,300,277,485,17,471,157,152,128,21,94,431,32,177,188,509,474,64,45,54,482,730,153,36,629,386,41,22,28,141,901,864,18,180,77,523,9,401,678,437,102,304,210,308,16,775,579,48,31,317,179,413,365,758,352,57,24,341,86,752,546,137,58,318,245,44,27,402,95,899,19,108,269,216,202,49,184,110,93,954,880,56,55,452,358,8 }, +{ 15,13,1,2,0,5,10,23,33,9,7,3,4,6,12,102,115,14,11,217,51,117,77,40,569,153,341,196,317,18,457,22,8,16,961,197,719,180,64,365,165,730,120,134,21,141,899,202,82,31,523,291,125,372,386,28,17,139,93,349,128,304,269,177,110,482,32,342,111,37,318,95,453,579,36,901,59,24,352,450,44,437,137,403,49,260,401,210,237,247,326,817,494,98,99,57,752,19,48,203,30,86,351,485,758,116,402,391,26,898,308,38,27,25,275,801,498,854,65,56,629,76,90,300,922,468,144,35 }, +{ 76,292,5,214,45,32,2,519,710,460,129,179,29,1,90,58,123,249,464,207,205,618,17,14,245,257,72,61,48,263,106,21,358,425,769,241,119,52,184,6,162,186,50,46,38,7,655,148,209,243,128,255,3,155,288,183,290,64,141,454,227,89,77,476,54,115,4,25,59,19,57,229,36,202,269,408,152,99,70,151,130,86,177,75,592,216,720,62,318,12,217,40,26,10,37,27,496,306,33,247,524,311,316,56,497,350,84,51,137,171,790,102,270,23,0,112,11,22,16,452,334,237,432,402,96,180,95,449 }, +{ 76,32,72,21,38,4,54,89,57,17,179,12,14,99,148,45,23,59,51,90,488,3,11,241,401,2,428,37,543,152,205,528,453,128,5,421,13,115,129,77,10,474,245,184,350,670,449,413,1,569,137,79,403,629,475,328,308,221,155,464,0,361,123,743,202,460,214,257,33,40,64,794,292,165,405,770,805,41,476,62,162,270,229,358,86,285,36,402,775,316,341,94,197,50,576,106,431,720,46,29,540,217,139,773,119,838,48,15,216,181,657,177,290,514,288,7,457,227,961,9,22,102,247,828,6,141,365,180 }, +{ 98,223,393,1,834,284,791,264,697,724,293,909,772,905,541,478,51,821,807,363,897,48,682,421,765,447,411,730,801,410,163,948,386,96,9,31,963,23,21,691,664,453,125,5,382,100,13,521,949,551,656,44,116,770,686,670,639,221,39,367,914,265,166,144,719,335,812,848,371,0,101,842,318,321,127,88,252,520,662,329,354,32,759,438,33,698,93,202,593,201,286,156,450,658,281,115,165,49,401,120,604,586,82,2,22,36,225,217,77,744,10,498,141,102,615,180,118,435,69,30,921,404,326,197,433,475,83,70 }, +{ 341,13,23,509,762,638,569,242,901,629,165,8,197,873,10,961,506,456,391,499,116,338,180,457,492,206,12,51,115,268,143,365,951,1,93,965,642,867,417,37,2,253,546,64,5,203,3,498,758,752,719,0,401,15,352,44,31,7,36,244,86,4,141,386,734,237,6,22,308,730,55,844,164,918,473,326,125,82,564,949,898,551,940,791,120,38,9,260,523,137,661,373,559,110,14,854,959,615,317,11,54,33,102,692,269,99,351,903,89,870,740,217,708,170,824,40,801,728,864,817,717,160,128,28,117,776,479,77 }, +{ 818,230,755,443,352,420,1,2,244,50,14,5,38,46,29,36,114,218,65,96,22,133,52,181,58,0,17,28,21,103,75,54,45,86,67,175,48,171,7,12,323,137,24,285,208,51,487,6,283,18,10,70,23,155,32,83,194,361,3,503,163,389,328,128,223,37,803,532,16,19,168,735,69,13,124,61,202,160,186,433,9,115,484,27,236,514,238,782,95,25,754,108,64,657,112,141,281,220,412,289,55,756,401,394,584,151,308,49,545,851,822,4,227,717,866,334,269,646,403,402,26,400,87,35,745,366,99,143 }, +{ 481,878,32,202,5,21,23,269,13,318,494,142,77,51,70,1,182,557,141,137,33,291,58,178,415,465,61,48,590,259,922,115,2,929,640,403,207,884,4,260,120,87,817,626,534,349,342,102,195,0,132,351,59,427,252,109,35,7,961,678,345,247,153,72,845,158,169,49,12,10,6,196,112,798,450,687,279,841,713,475,457,128,40,146,28,3,416,290,265,75,767,854,771,947,795,753,704,637,631,597,592,581,546,509,493,354,352,341,326,316,288,285,241,237,212,197,159,90,54,52,46,38,37,36,17,14,39,9 }, +{ 15,1,5,4,2,13,11,341,0,3,7,12,10,6,21,365,9,180,32,134,317,197,33,23,37,117,40,165,17,77,217,498,8,752,153,901,64,102,569,141,873,51,14,961,196,115,59,110,352,509,22,128,57,111,120,143,125,72,38,48,372,36,291,308,349,99,139,31,90,202,260,269,457,44,16,89,76,49,55,401,342,237,27,93,177,94,82,18,45,29,326,28,19,386,221,351,137,86,277,546,391,41,50,35,403,453,54,164,318,719,474,629,373,203,98,95,475,854,253,304,148,24,450,244,56,758,542,300 }, +{ 25,26,119,42,19,6,27,45,122,84,469,4,17,790,814,113,80,76,59,73,483,2,29,611,128,32,202,40,1,77,90,862,106,56,209,33,240,0,684,136,102,14,292,416,5,311,11,504,196,318,123,680,378,255,12,129,161,22,690,151,53,117,63,179,667,10,85,72,61,115,65,210,402,396,57,141,64,614,134,757,153,137,62,18,99,445,51,269,66,177,7,3,24,710,256,648,36,655,235,38,23,306,58,618,70,491,48,454,21,403,742,361,49,34,86,494,275,383,342,28,300,145,13,74,112,52,297,245 }, +{ 14,7,24,2,1,16,69,6,38,67,108,22,65,28,124,0,46,18,29,86,66,35,83,5,71,398,36,12,168,289,140,95,610,189,150,149,10,21,92,756,52,302,23,109,97,20,584,25,50,267,194,64,49,51,32,60,103,55,505,13,429,172,128,273,420,158,37,458,19,547,118,48,75,115,137,74,135,9,185,164,143,388,154,202,26,701,650,251,133,336,17,114,169,68,230,236,43,54,141,244,671,253,703,105,208,90,3,160,159,278,99,462,314,403,380,87,389,175,357,324,484,318,232,708,125,799,451,886 }, +{ 128,51,202,23,141,120,403,15,64,13,318,82,10,269,99,33,12,197,475,453,260,153,137,165,196,0,3,402,351,5,494,1,22,14,110,117,180,102,93,17,2,31,37,38,125,9,326,450,49,21,86,44,401,457,7,6,36,352,115,18,77,523,237,28,134,95,285,386,421,719,32,48,342,98,11,54,203,730,57,341,961,373,139,8,854,361,757,111,898,45,4,40,308,194,65,16,922,277,41,880,678,116,291,24,498,19,27,391,143,56,217,899,59,569,30,79,365,775,50,503,208,55,144,817,61,105,901,94 }, +{ 16,24,35,18,71,68,9,0,65,189,1,7,133,50,69,149,60,28,103,101,108,537,67,118,230,75,114,23,335,55,167,21,124,92,12,191,181,433,13,39,140,5,14,48,223,64,212,96,51,218,443,281,487,154,141,163,22,217,99,37,70,565,2,115,49,267,58,54,394,766,46,246,545,83,30,128,10,330,820,202,32,361,137,622,125,238,237,100,121,77,165,412,175,87,143,352,399,171,317,86,126,745,146,486,418,177,36,291,269,318,283,336,105,302,398,695,4,98,197,180,31,345,251,271,109,309,430,38 }, +{ 50,2,1,46,14,29,38,52,171,67,5,58,103,96,36,24,218,133,223,83,114,236,45,70,54,181,163,186,108,155,75,28,65,238,334,151,18,433,160,745,328,0,366,112,532,48,516,17,514,61,832,400,281,21,227,22,760,19,6,69,754,766,412,12,7,309,545,409,27,361,283,137,16,220,675,480,55,86,765,822,502,552,32,10,307,99,956,285,25,113,9,398,323,37,51,800,26,388,394,64,891,128,124,243,549,828,3,458,194,208,35,646,95,262,23,311,150,966,820,866,894,149,13,115,87,430,80,287 }, +{ 21,32,5,76,72,14,17,2,3,38,54,89,45,51,1,12,23,4,10,48,90,137,36,148,221,401,22,0,421,179,115,86,99,543,11,453,13,37,128,270,46,241,285,29,290,64,428,57,6,361,202,59,540,50,403,328,114,475,528,65,155,449,77,308,794,569,181,7,805,27,40,141,292,133,33,576,263,129,514,205,341,9,413,350,208,19,838,629,323,28,430,480,119,657,474,214,741,123,245,402,102,720,15,770,476,408,494,56,425,106,269,62,207,775,243,152,477,670,180,318,197,405,165,95,58,281,18,697 }, +{ 434,384,268,144,940,855,617,206,959,911,332,116,93,203,137,489,282,244,141,120,36,44,160,269,253,367,110,450,10,127,202,276,417,219,98,258,326,131,260,31,64,373,201,9,187,318,692,473,22,224,523,817,143,86,352,1,55,30,23,51,28,295,567,105,559,499,261,717,811,0,125,951,180,8,115,13,217,128,551,39,165,49,96,341,284,77,21,851,728,564,662,498,317,386,752,48,351,531,5,642,365,197,83,661,237,615,800,291,242,15,170,164,494,82,95,638,704,349,37,854,228,7,32,24,935,968,35,16 }, +{ 2,5,1,15,7,13,0,10,6,3,180,217,23,9,141,11,317,4,341,17,352,117,197,14,77,33,64,165,134,365,115,12,102,752,237,40,498,153,291,32,372,51,22,21,8,349,901,269,16,196,457,45,569,128,36,143,59,57,509,125,27,38,19,342,86,202,864,873,120,31,546,318,110,37,28,961,29,164,177,95,48,244,111,137,93,391,18,719,139,44,49,82,386,629,54,24,482,56,99,26,453,260,50,579,76,25,304,35,98,253,326,41,55,277,210,72,275,30,730,437,90,523,403,203,351,61,79,450 }, +{ 113,25,2,29,6,833,45,61,145,7,32,74,151,0,42,1,210,128,177,5,19,4,72,14,64,106,655,59,22,122,26,112,174,66,40,77,738,209,525,402,138,90,148,20,483,104,684,141,51,76,17,27,425,18,21,416,23,10,202,95,16,255,52,13,115,624,318,137,102,311,33,269,85,81,49,887,87,746,544,491,275,86,119,790,454,690,65,24,9,222,216,665,291,117,80,204,58,243,134,48,476,814,217,46,349,287,70,28,285,43,348,36,84,342,11,757,194,91,207,315,31,38,73,153,192,355,135,300 }, +{ 116,268,918,551,203,692,31,940,403,791,421,206,417,93,499,523,299,44,8,473,23,51,805,22,13,450,120,475,202,0,959,730,386,125,599,326,137,9,10,401,899,105,1,576,817,559,453,564,165,393,494,21,28,36,456,5,127,949,64,670,728,638,391,242,685,2,260,762,457,197,180,615,569,141,170,253,308,963,49,115,341,492,55,143,719,479,873,37,18,4,86,7,77,506,48,244,801,867,95,318,269,901,512,98,951,33,6,301,958,642,338,30,352,870,39,221,365,12,16,395,373,24,237,629,164,102,159,239 }, +{ 107,612,126,132,362,146,259,199,279,660,493,590,121,20,939,683,534,43,147,941,376,35,595,953,649,581,60,470,640,955,356,522,5,97,195,150,407,49,465,16,92,14,7,687,359,298,22,858,246,0,13,360,21,48,18,427,271,167,423,191,10,441,325,392,32,598,929,28,33,31,178,414,1,77,232,173,55,230,156,125,24,68,23,95,345,4,904,626,105,212,319,98,786,783,70,61,202,142,44,702,58,71,40,314,37,198,51,64,2,623,163,159,819,93,446,158,59,346,357,12,501,118,260,46,663,116,120,102 }, +{ 15,13,1,2,0,23,5,4,3,77,102,33,10,51,6,7,9,115,341,12,11,217,342,317,14,117,40,22,365,180,120,8,569,18,196,165,457,141,21,210,197,64,177,31,291,153,16,961,59,523,817,453,719,450,134,730,93,260,352,44,269,275,49,386,401,32,901,110,82,28,17,629,125,349,139,475,899,24,128,37,326,111,752,95,202,36,318,403,372,498,216,90,308,247,30,98,482,137,86,237,116,615,300,48,65,203,19,57,351,55,391,509,99,38,734,922,468,244,144,221,854,304,579,373,39,143,758,148 }, +{ 53,27,161,17,469,73,378,527,136,250,383,19,862,495,62,26,56,200,297,106,84,585,440,80,34,14,436,128,119,45,4,3,472,123,129,813,504,240,483,361,59,444,205,65,611,5,202,548,108,255,742,514,283,78,814,113,179,162,690,57,402,183,38,555,714,6,245,390,122,54,42,803,184,25,61,33,630,318,209,12,194,64,77,684,11,141,328,757,503,269,99,236,2,102,389,51,22,618,176,152,257,453,47,21,48,210,86,680,40,381,148,133,217,880,650,215,46,10,130,377,18,0,412,497,23,114,13,229 }, +{ 209,45,17,106,207,119,5,255,454,243,263,425,290,655,306,186,84,29,62,61,2,408,136,58,742,378,21,56,311,240,3,592,48,32,383,50,52,80,227,790,270,46,171,14,72,440,148,287,334,76,659,400,666,179,504,496,869,64,155,241,129,1,123,54,38,214,738,75,663,162,90,141,89,221,151,292,57,358,237,507,513,130,34,548,152,70,205,37,128,183,211,184,667,41,229,328,476,266,115,555,181,86,549,405,6,281,163,269,215,12,96,245,11,220,502,720,257,36,313,430,288,180,833,40,202,165,449,27 }, +{ 152,4,452,59,128,471,529,339,79,216,11,188,377,77,291,202,318,94,102,402,32,33,99,5,90,51,269,76,349,12,184,257,542,474,17,177,111,141,37,21,342,210,23,205,275,678,13,72,403,38,285,3,2,40,64,229,588,57,10,769,494,48,134,45,372,196,117,217,129,6,497,1,148,460,757,245,453,475,0,137,153,157,89,139,7,115,961,292,179,498,304,524,266,197,14,629,431,477,405,775,288,437,180,15,165,214,237,86,401,308,119,123,54,22,221,120,9,162,27,619,300,62,317,316,31,488,277,880 }, +{ 15,1,2,5,0,7,3,4,6,13,23,115,9,12,51,180,8,317,197,10,961,901,11,22,77,21,752,33,202,141,110,341,14,16,217,134,120,102,31,165,365,40,93,269,457,352,64,44,28,18,37,351,260,117,569,82,308,125,32,196,49,36,153,719,128,482,318,99,17,401,326,137,450,403,203,111,177,730,386,291,55,873,523,373,98,30,237,24,453,89,48,95,221,475,39,59,116,372,349,105,144,139,509,143,72,96,758,391,898,494,854,86,342,899,210,629,57,468,247,90,304,65,148,83,817,421,160,20 }, +{ 951,752,638,811,642,253,351,180,10,197,341,901,873,352,110,244,143,762,165,8,898,55,564,141,15,365,854,499,82,137,417,498,509,36,535,922,479,559,206,661,373,317,282,115,31,22,338,160,93,569,164,260,717,217,391,86,533,33,44,1,28,9,242,965,728,120,116,77,64,968,21,102,203,125,37,117,506,30,13,386,5,4,531,269,40,911,153,23,0,169,384,2,326,372,105,196,851,170,134,109,704,332,268,349,96,127,48,291,32,758,237,318,24,177,202,35,11,961,401,39,308,83,3,629,51,210,12,434 }, +{ 6,197,350,74,262,841,509,26,47,115,13,196,583,903,165,4,235,138,50,308,21,130,749,324,675,19,38,331,391,145,711,569,33,75,241,453,734,64,153,223,52,558,236,468,99,220,34,70,112,11,117,546,237,125,3,27,32,1,42,134,409,51,78,25,163,29,14,648,23,645,180,820,46,2,85,108,65,773,802,624,122,394,341,785,22,730,95,386,606,57,412,247,923,316,66,498,357,221,630,133,457,59,853,90,53,226,873,632,48,113,719,629,45,889,17,307,141,766,69,12,37,444,83,171,54,600,5,765 }, +{ 125,391,165,867,558,386,221,758,23,457,21,51,13,197,401,308,963,115,961,97,719,77,791,743,451,603,949,48,180,670,770,341,89,120,730,352,291,148,450,426,607,304,7,403,393,66,64,350,316,217,134,135,14,421,74,247,177,50,380,24,696,236,172,87,629,10,141,475,144,35,901,801,523,453,138,509,467,456,241,210,150,98,18,565,357,267,103,582,545,342,301,278,237,216,20,16,99,69,903,650,551,412,389,283,81,32,298,739,543,498,370,365,317,309,300,260,170,140,116,85,52,37,33,30,25,5,273,203 }, +{ 14,1,46,2,24,16,38,50,5,69,58,35,7,75,18,67,54,48,0,155,513,171,163,61,103,45,29,52,430,270,37,223,21,70,12,28,9,780,32,267,60,290,83,227,71,36,666,767,22,189,140,807,10,72,96,65,108,181,64,186,220,309,17,335,92,394,23,592,243,89,536,663,115,281,51,6,474,55,68,112,141,400,128,133,87,13,425,99,741,236,95,675,278,230,76,221,114,86,263,113,820,552,502,27,269,202,49,760,537,149,262,328,408,90,366,137,150,207,77,357,315,307,218,241,19,148,25,66 }, +{ 23,51,13,115,453,12,0,2,4,10,403,1,202,5,401,475,15,21,457,59,77,165,9,3,37,99,32,11,197,719,308,6,14,64,7,569,17,629,961,318,180,22,33,494,120,18,730,141,40,102,269,217,177,57,16,128,523,450,341,8,90,421,386,237,28,48,125,19,117,31,247,402,72,210,899,221,260,291,134,89,342,317,365,509,38,24,391,216,352,468,817,153,54,36,45,49,27,196,56,326,82,65,76,304,349,139,50,25,86,275,44,137,482,372,670,498,26,734,546,62,95,758,29,41,46,93,351,79 }, +{ 129,84,17,27,56,495,80,378,19,548,123,162,161,53,469,618,73,26,504,106,40,257,205,59,3,183,184,862,4,136,62,6,128,202,14,77,11,65,769,5,527,108,45,57,383,361,2,497,250,249,200,130,23,34,22,90,402,483,245,240,12,51,214,38,0,139,25,99,64,318,102,152,32,210,300,10,297,757,21,494,880,775,114,710,111,33,54,29,460,403,452,36,42,133,18,61,86,141,436,177,814,269,13,194,119,179,49,28,342,453,217,95,115,514,229,556,76,137,37,1,742,283,485,401,503,488,475,24 }, +{ 28,109,49,9,22,67,168,158,39,185,159,420,1,55,0,83,35,95,194,272,86,105,69,103,36,114,169,327,50,254,208,175,65,584,286,323,535,346,251,345,797,30,131,756,374,12,333,533,128,2,218,68,96,133,344,160,101,23,64,289,7,597,189,24,646,577,874,896,13,5,601,51,46,503,531,837,16,238,747,627,115,14,347,10,98,310,789,137,124,21,202,127,164,578,54,799,141,154,230,532,547,31,312,708,285,480,37,810,637,596,48,143,336,100,389,835,252,439,237,38,518,912,219,424,44,239,253,868 }, +{ 242,391,456,116,23,13,492,8,51,341,401,165,93,206,499,457,867,338,268,569,417,509,386,22,1,762,479,638,10,629,918,758,64,551,203,730,901,719,12,31,197,791,115,5,86,14,125,949,0,559,37,2,642,951,873,959,237,961,692,55,170,752,870,120,44,180,940,9,141,564,523,3,308,36,7,4,15,899,450,365,728,137,21,473,253,898,558,143,128,453,740,164,801,260,903,6,685,202,403,670,965,54,114,28,854,326,817,844,352,95,82,498,11,923,244,98,299,922,239,110,38,317,105,599,373,661,160,99 }, +{ 211,162,248,130,556,57,507,4,305,266,183,41,152,361,11,229,129,471,62,38,377,313,300,514,77,339,184,157,381,59,128,452,99,3,328,40,202,123,54,210,440,494,369,555,342,136,117,542,402,757,64,548,139,23,196,188,880,457,775,33,153,56,14,102,432,13,177,205,257,497,17,12,37,291,51,89,403,215,961,111,141,90,349,216,488,269,485,803,477,180,165,115,10,475,437,383,79,197,95,21,84,134,503,421,86,453,318,308,1,670,76,194,719,618,106,32,629,15,730,65,22,5,245,94,214,45,482,288 }, +{ 92,7,97,298,140,16,126,232,314,60,246,279,35,173,230,71,107,14,43,508,423,150,779,653,441,607,66,189,359,501,24,362,20,172,104,387,356,21,48,38,18,399,199,330,5,674,192,877,81,191,729,517,74,672,426,939,560,633,0,267,2,649,69,121,149,392,324,135,462,22,95,29,46,52,125,598,37,723,707,49,10,357,68,345,6,32,830,98,64,1,702,380,118,28,900,12,695,251,861,885,493,783,603,146,65,715,61,55,278,36,236,273,138,33,75,25,31,124,175,221,293,83,165,763,712,451,414,319 }, +{ 15,1,2,5,0,7,13,6,23,9,3,12,180,4,51,115,8,901,457,117,14,165,22,341,82,120,141,10,37,197,961,31,21,11,202,351,64,260,77,365,110,16,134,28,217,93,269,33,44,36,569,18,719,308,450,317,128,102,125,137,32,629,153,98,401,55,352,30,318,373,49,116,898,730,48,17,752,523,196,237,386,24,95,86,326,403,291,99,453,40,39,72,38,177,89,203,873,391,144,247,349,498,899,59,734,90,475,372,54,494,421,143,482,304,854,105,758,35,210,65,76,244,160,216,221,83,45,546 }, +{ 403,18,0,102,25,523,64,6,91,85,42,74,342,32,24,13,51,306,95,49,22,33,475,151,681,880,421,128,899,750,397,214,122,757,730,77,28,519,288,247,23,5,817,805,317,879,861,673,273,177,145,21,120,52,283,81,275,701,577,453,104,59,202,193,697,636,401,287,249,216,207,196,180,165,138,125,123,118,90,84,60,48,43,587,260,389,16,10,4,1,351,326,318,933,804,635,498,280,237,197,186,172,153,148,137,134,117,99,61,29,9,671,289,958,838,814,579,312,238,124,65,56,847,719,654,650,457,424 }, +{ 56,65,554,33,561,18,84,123,63,64,343,194,0,90,49,22,6,27,19,289,240,129,73,659,431,214,475,523,370,368,233,899,701,287,257,95,85,28,102,183,736,650,467,256,153,25,207,124,108,80,32,24,120,26,389,874,718,635,51,525,891,752,751,730,648,614,498,496,450,249,237,209,184,177,162,114,59,45,29,235,77,42,817,497,444,137,112,74,53,352,511,681,630,643,196,947,942,847,764,719,696,651,615,610,603,602,543,457,412,386,337,326,312,288,262,260,247,227,226,179,152,139,134,119,117,105,86,76 }, +{ 127,98,31,293,299,395,44,9,105,0,49,599,284,28,276,116,242,685,159,456,22,763,125,935,272,492,158,1,623,393,109,144,201,39,36,95,18,51,24,320,137,23,286,55,16,512,916,489,202,21,662,301,268,367,327,371,35,761,567,13,434,65,7,101,918,616,2,5,141,737,506,870,12,64,131,68,30,48,900,948,86,128,295,10,219,239,269,910,403,627,338,578,143,14,37,124,160,203,318,384,170,244,165,261,96,347,254,713,963,168,457,237,187,93,67,154,421,221,253,401,344,424,164,479,6,386,83,855 }, +{ 1,14,5,2,46,50,38,58,171,61,45,155,7,48,69,270,290,24,21,29,75,52,16,67,54,666,32,663,227,72,502,0,425,223,18,592,89,17,35,243,37,207,76,186,103,263,36,163,96,83,741,6,408,10,400,22,181,28,9,428,12,536,64,221,220,70,262,281,23,267,115,106,65,807,292,309,119,148,474,449,394,128,141,86,241,3,655,430,51,189,476,140,431,541,587,95,334,738,675,90,114,13,780,108,71,720,19,133,27,202,335,413,4,767,112,77,25,405,513,179,659,99,218,787,55,180,528,151 }, +{ 23,51,13,453,457,12,719,401,961,4,629,730,99,475,115,2,11,14,403,17,40,5,15,165,1,3,64,0,10,57,33,21,77,569,32,50,37,308,7,386,9,16,38,670,197,59,41,217,128,494,46,6,758,62,22,775,65,45,18,86,48,29,72,899,514,361,328,139,102,247,153,54,56,421,468,79,523,95,108,757,196,52,19,317,117,482,342,341,24,734,509,210,202,180,177,237,488,402,114,36,134,880,76,498,90,275,111,34,28,291,67,20,474,120,743,125,82,391,130,752,490,437,405,318,277,27,141,89 }, +{ 968,967,966,965,964,963,962,961,960,959,958,957,956,955,954,953,952,951,950,949,948,947,946,945,944,943,942,941,940,939,938,937,936,935,934,933,932,931,930,929,928,927,926,925,924,923,922,921,920,919,918,917,916,915,914,913,912,911,910,909,908,907,906,905,904,903,902,901,900,899,898,897,896,895,894,893,892,891,890,889,888,887,886,885,884,883,882,881,880,879,878,877,876,875,874,873,872,871,870,869,868,867,866,865,864,863,862,861,860,859,858,857,856,855,854,853,852,851,850,849,848,847,846,845,844,843,842,841 }, +{ 2,1,29,103,75,52,14,67,46,309,6,83,70,238,38,24,108,220,218,133,74,96,262,36,114,87,388,26,50,25,366,236,69,160,112,5,65,58,66,394,19,145,226,7,532,135,163,42,18,45,150,545,458,433,891,331,357,594,17,28,412,27,294,418,86,278,21,124,398,149,732,894,324,537,283,223,273,222,71,12,606,739,16,646,547,138,267,48,696,171,137,151,0,175,602,800,22,37,487,181,99,208,32,194,287,785,336,64,23,13,113,55,95,335,54,97,323,154,61,711,128,68,302,118,10,308,600,484 }, +{ 7,92,71,97,140,60,150,16,298,24,189,230,14,149,423,35,508,314,18,43,279,232,66,399,273,246,251,38,607,69,126,172,517,674,2,173,28,375,74,467,104,68,0,809,20,823,336,118,267,175,135,108,191,154,21,345,501,796,36,52,125,653,29,81,330,107,124,362,356,6,387,55,359,46,779,302,192,22,5,575,48,67,877,462,10,388,441,9,566,723,783,221,1,65,49,398,101,37,278,702,83,91,357,705,392,12,109,121,236,426,380,32,212,695,443,86,596,103,868,608,560,165,830,167,13,558,25,541 }, +{ 51,23,202,120,141,13,1,260,128,21,269,450,77,137,318,48,115,165,15,32,102,5,197,64,180,494,82,351,326,125,291,817,12,349,342,98,523,403,203,93,7,33,854,352,2,31,14,719,457,6,110,144,44,4,386,177,730,96,116,308,99,221,9,217,10,153,17,210,922,453,18,16,402,237,90,704,37,36,117,25,421,11,615,95,20,898,373,30,475,40,401,391,19,317,8,3,304,498,576,69,285,901,275,223,293,247,196,86,899,134,83,341,127,59,45,39,365,216,692,372,50,0,801,752,367,163,139,100 }, +{ 77,102,33,13,177,23,51,141,202,64,40,128,115,4,269,59,318,6,217,137,210,291,0,7,2,1,180,196,14,22,10,95,153,11,117,125,165,15,86,352,197,134,90,403,216,275,3,16,9,18,237,453,494,342,49,31,19,139,25,65,28,5,17,317,349,93,36,304,475,26,82,12,98,44,341,27,120,365,57,24,20,110,372,386,21,247,457,719,194,402,498,116,29,730,99,260,8,143,144,523,164,114,569,48,32,111,326,285,208,391,401,244,30,509,312,961,300,752,56,160,105,203,34,450,546,67,482,170 }, +{ 101,9,363,676,264,18,411,682,604,905,520,821,271,167,621,647,364,121,252,404,118,39,166,848,781,265,100,16,382,664,447,212,777,478,354,146,907,812,132,446,360,724,0,60,463,759,24,329,23,1,88,71,35,936,68,857,195,21,48,593,865,639,932,156,897,31,98,96,51,191,13,286,333,125,656,49,694,30,254,105,591,55,806,562,109,158,44,438,419,272,521,124,154,407,274,5,65,310,553,28,144,691,33,116,159,127,93,32,77,22,67,50,410,37,538,108,706,393,115,83,36,92,12,199,327,223,10,418 }, +{ 144,203,326,382,166,96,822,418,438,93,859,88,921,1,367,141,744,269,349,110,576,473,83,77,410,23,966,21,403,120,692,39,494,274,521,317,291,217,615,523,855,303,817,13,639,264,800,32,100,909,691,225,36,478,914,765,506,5,498,652,44,435,265,321,260,160,910,551,404,137,48,772,202,897,453,450,208,101,960,254,31,863,342,286,190,51,30,593,831,616,419,730,682,98,340,372,341,197,69,33,9,625,724,848,686,284,466,704,656,223,180,102,335,125,617,352,285,363,0,662,244,530,919,812,393,374,351,318 }, +{ 21,13,180,23,32,115,48,125,197,191,165,51,5,199,237,146,12,225,18,16,93,901,350,271,22,241,375,0,71,118,408,49,447,264,126,1,167,31,24,522,302,98,65,64,575,864,569,92,566,247,744,86,58,391,352,713,212,141,60,44,9,4,88,562,459,308,303,203,202,100,45,37,17,2,818,463,360,316,919,897,698,586,478,363,293,221,213,103,72,40,691,909,608,558,509,166,68,35,727,340,517,217,724,629,546,467,446,341,304,156,120,108,11,640,288,110,7,734,296,150,591,914,346,354,321,317,269,114 }, +{ 15,13,23,51,102,0,8,77,1,5,12,33,9,4,2,10,180,82,165,197,115,110,18,403,202,22,120,326,457,7,11,351,260,898,141,342,14,373,401,901,961,64,36,386,3,291,453,31,16,40,28,93,21,6,352,59,44,99,27,341,450,217,719,49,117,48,125,475,128,37,391,308,153,95,269,24,318,177,854,730,203,615,421,98,30,32,38,137,922,317,498,704,523,57,817,509,56,569,629,116,899,133,83,365,758,105,752,144,661,196,304,638,494,134,300,670,206,402,221,210,208,86,535,143,65,532,109,35 }, +{ 77,33,102,64,202,141,128,51,40,196,23,13,117,318,269,153,134,1,177,115,10,342,137,180,210,2,0,95,6,139,403,86,14,22,15,7,217,291,4,352,165,197,36,59,237,275,3,11,5,494,65,125,49,9,453,475,16,19,28,18,120,82,216,17,402,31,93,110,260,326,12,341,194,349,401,203,98,25,99,27,24,457,44,317,365,498,372,26,351,285,719,143,386,450,300,21,752,391,116,29,312,38,114,304,111,244,164,961,509,57,247,569,523,144,308,373,901,34,421,96,56,160,437,35,20,678,32,8 }, +{ 174,104,544,151,624,74,525,25,644,66,29,177,636,416,0,204,750,122,216,6,81,45,186,222,319,138,2,145,287,112,665,192,64,59,243,7,77,32,355,22,715,128,784,17,173,20,311,135,789,280,52,33,549,113,879,4,227,21,194,90,5,141,491,102,86,42,95,43,137,58,12,27,496,275,65,529,614,11,348,678,304,651,402,580,712,503,269,422,49,37,14,318,210,673,396,202,792,10,18,500,869,36,148,85,426,247,405,681,19,226,97,825,72,16,196,40,61,609,597,115,24,217,233,51,28,881,91,153 }, +{ 372,141,304,352,947,954,291,177,217,269,349,128,318,437,498,77,678,202,864,64,102,115,86,210,873,137,751,597,247,13,180,5,275,32,16,35,21,950,752,92,197,83,87,7,457,160,776,70,33,24,179,36,317,245,165,126,107,569,288,717,95,402,237,23,263,108,774,156,546,509,340,37,18,12,946,342,872,75,800,244,114,103,851,735,365,341,146,121,99,60,579,312,120,1,195,354,296,140,888,71,51,260,223,418,758,622,537,473,363,196,98,69,10,526,48,820,817,765,704,586,450,316,246,208,148,96,90,50 }, +{ 200,161,714,53,73,27,472,383,17,440,34,585,62,56,136,250,106,78,527,322,19,862,361,4,3,514,80,84,390,14,176,179,236,378,162,377,129,548,202,47,469,495,217,26,11,494,128,757,555,453,402,412,130,880,328,507,257,183,51,45,5,38,300,184,123,497,54,12,57,33,444,59,556,283,205,245,108,485,297,209,803,152,342,40,119,99,318,452,2,46,102,211,23,196,64,229,65,77,215,684,21,814,6,240,0,153,368,403,90,730,475,13,117,133,61,37,317,305,32,255,813,22,504,181,503,29,436,95 }, +{ 32,76,72,21,38,14,241,89,54,428,449,5,45,148,37,181,90,179,2,17,221,350,12,292,46,129,48,476,155,1,794,99,477,205,720,3,770,50,464,773,4,540,308,36,57,460,270,245,413,743,184,214,741,328,115,23,123,474,137,257,10,358,11,0,281,431,29,488,421,405,162,51,288,59,64,401,710,536,430,152,290,128,218,519,22,316,697,552,7,587,86,670,361,487,6,227,13,52,618,133,249,543,77,106,62,165,769,141,243,202,403,229,114,453,263,67,475,745,341,119,197,207,497,285,9,40,180,920 }, +{ 128,141,202,64,102,33,23,77,51,13,196,318,269,153,2,3,180,165,40,137,5,15,1,6,403,10,117,139,197,86,352,134,14,17,0,19,494,210,120,342,22,7,402,237,453,291,177,475,125,115,93,217,95,21,12,82,260,110,36,457,11,65,341,450,31,25,27,194,99,9,4,326,498,275,961,349,26,49,111,401,317,44,203,391,351,277,38,28,386,18,421,37,752,164,16,143,29,285,98,24,48,678,114,116,32,373,509,300,244,208,54,719,56,59,365,57,8,50,546,144,20,523,30,569,372,898,90,308 }, +{ 39,137,96,840,30,202,9,0,613,88,406,669,100,141,180,576,160,28,49,530,403,1,269,22,228,822,829,679,856,190,244,166,219,352,816,966,765,827,36,55,68,83,128,274,418,23,318,98,44,442,35,10,253,258,51,863,77,31,317,251,21,876,158,494,475,213,95,65,116,254,859,268,125,48,13,16,931,187,367,131,805,574,105,5,365,800,102,177,93,115,33,224,127,242,120,110,291,924,217,960,144,64,842,616,165,531,385,351,101,159,276,839,778,203,201,492,109,67,24,284,748,860,345,692,295,421,272,456 }, +{ 180,352,141,752,1,901,269,365,115,5,217,2,15,4,317,23,197,7,13,341,0,244,3,253,6,51,498,202,21,318,31,372,873,165,44,77,98,9,33,10,116,137,237,93,482,125,64,864,105,12,32,48,349,509,128,131,22,120,579,11,143,8,102,569,717,37,391,177,260,127,308,110,28,30,291,450,40,559,49,39,401,160,203,144,14,437,373,564,72,24,453,403,386,546,421,96,326,16,95,36,148,661,951,247,533,494,219,109,201,159,55,961,251,475,728,468,642,117,254,221,134,18,811,153,210,82,345,224 }, +{ 1,67,28,50,46,2,103,83,14,65,114,24,0,38,133,69,36,55,18,75,9,54,124,29,22,283,7,218,5,238,16,154,35,52,96,160,480,109,108,547,12,68,398,429,646,323,181,732,175,220,21,361,171,71,335,236,389,418,70,394,48,49,149,86,58,866,531,87,309,366,37,484,208,328,251,118,194,6,10,302,412,487,420,189,336,23,168,545,800,51,803,433,185,137,128,163,754,39,45,505,169,285,596,486,13,503,533,60,101,155,95,64,32,289,570,223,158,267,927,140,745,516,17,115,514,346,956,99 }, +{ 180,352,365,317,115,217,752,901,341,1,253,141,873,2,15,4,0,5,197,3,244,308,951,31,7,498,318,44,6,372,291,165,269,202,98,137,120,127,160,36,116,373,105,260,482,13,131,33,509,110,51,125,77,39,569,349,304,437,9,11,8,450,96,64,22,21,391,221,23,93,638,717,28,219,12,421,10,403,187,83,17,102,49,661,564,851,401,128,247,811,351,523,117,535,546,468,224,201,86,35,559,48,16,148,494,134,143,579,968,922,854,817,800,551,475,55,801,758,728,615,196,177,153,144,14,32,30,533 }, +{ 32,5,21,347,13,95,49,713,51,48,197,23,107,60,126,64,237,180,153,77,165,241,33,379,850,1,263,296,196,195,4,121,134,132,102,28,115,22,117,217,0,291,16,841,929,928,652,534,660,39,493,247,31,279,18,50,36,626,150,90,76,40,407,883,509,362,349,260,9,356,125,10,177,92,441,340,259,35,24,752,351,199,65,11,71,809,546,953,933,854,312,75,61,56,37,30,7,598,207,44,423,372,298,522,783,590,354,156,645,608,591,939,937,638,498,450,437,391,359,303,273,86,57,342,316,59,640,446 }, +{ 341,365,180,901,317,115,752,15,873,217,564,82,951,197,110,165,0,1,141,351,4,3,482,352,6,372,2,12,269,13,10,559,253,854,5,468,7,244,282,23,535,18,898,14,661,417,349,308,318,102,33,509,125,811,704,36,143,77,964,28,498,326,237,137,51,533,692,638,38,475,31,22,9,642,867,391,30,8,202,120,203,966,758,373,338,206,24,569,291,922,494,403,332,144,116,49,44,697,55,450,386,128,943,842,768,728,706,405,346,299,295,261,260,258,242,160,148,39,27,26,19,17,11,50,48,46,843,634 }, +{ 45,17,106,21,227,209,62,243,5,155,32,3,290,38,255,119,54,270,14,2,207,181,587,48,263,12,794,29,46,552,540,186,659,37,430,408,770,496,721,50,454,136,84,52,221,425,56,76,308,828,99,697,400,328,115,123,741,80,488,1,528,474,401,57,218,281,41,129,541,513,421,36,487,128,10,787,61,241,378,477,543,64,51,742,306,133,240,413,11,72,428,4,165,734,23,152,655,453,211,34,920,311,59,90,236,137,214,58,162,629,431,179,832,341,6,366,583,89,77,202,313,361,383,317,514,86,745,365 }, +{ 16,24,35,18,50,7,71,75,60,14,69,0,9,1,189,108,68,67,21,181,28,12,48,223,92,5,23,140,46,103,51,133,13,2,267,230,54,163,149,65,22,335,70,281,10,32,55,96,87,37,64,171,128,394,114,141,502,58,115,486,236,99,820,98,766,202,38,137,83,309,118,246,269,49,36,95,125,191,155,167,121,430,39,218,101,77,6,150,237,126,641,774,31,318,221,487,180,443,177,433,251,545,220,565,388,29,86,72,352,399,165,217,552,112,61,105,537,17,852,45,44,30,212,175,124,89,307,102 }, +{ 127,308,293,98,165,395,258,219,13,286,23,629,401,51,115,301,569,197,457,276,512,391,509,105,616,239,924,338,22,734,170,55,961,295,31,758,169,910,272,567,116,763,201,320,944,341,143,261,237,506,180,479,873,365,141,185,206,36,242,86,374,762,498,546,913,131,44,64,923,327,843,601,386,332,492,160,125,860,317,654,964,900,284,95,28,634,943,164,137,10,901,282,224,740,468,456,144,109,841,558,719,268,120,417,535,384,299,844,482,903,110,93,9,1,935,662,578,217,253,928,730,187,393,2,752,244,531,434 }, +{ 748,957,840,213,669,539,466,88,30,251,863,321,217,679,190,137,93,144,317,530,352,831,228,230,160,617,800,689,219,203,816,96,418,202,36,473,258,406,141,871,326,83,855,752,120,854,778,82,44,100,187,201,1,435,224,351,345,719,335,116,110,443,274,28,310,55,21,450,332,382,822,574,86,931,494,531,365,31,839,128,39,180,341,367,898,23,613,498,372,731,860,9,410,926,197,704,5,817,131,69,35,125,434,166,22,944,318,924,856,268,64,48,567,244,206,291,922,523,269,32,876,717,98,49,13,349,169,859 }, +{ 5,48,21,14,1,2,54,50,36,430,38,32,181,270,45,281,12,72,17,67,46,0,290,218,99,22,28,83,76,155,24,541,37,10,513,89,114,65,58,133,61,103,96,488,51,221,425,263,3,9,328,29,23,487,697,207,741,115,18,86,745,160,428,474,148,408,6,16,502,7,64,171,137,794,108,52,920,477,842,227,55,236,552,543,13,119,514,361,449,202,238,828,536,128,308,292,476,243,592,90,241,186,179,666,285,4,27,655,663,480,421,401,106,208,141,165,433,528,532,19,834,95,283,197,11,180,720,403 }, +{ 13,23,51,115,217,33,77,0,4,2,9,317,102,141,7,11,1,10,180,5,40,202,22,197,3,6,352,365,12,269,341,165,14,18,16,28,64,15,59,318,177,403,752,31,24,196,308,32,372,125,128,291,498,137,17,247,153,21,49,401,453,349,98,117,44,8,95,237,901,36,86,93,494,342,475,30,482,210,468,457,304,873,569,90,105,143,421,391,386,37,509,39,134,139,110,116,35,275,244,144,120,326,55,961,19,546,203,46,864,27,719,221,111,65,164,253,285,216,127,402,730,50,437,38,67,20,288,54 }, +{ 13,23,165,15,37,54,134,12,117,38,457,51,64,197,99,115,153,89,961,719,33,10,82,509,14,128,120,237,3,196,308,86,141,328,0,1,629,72,450,277,139,102,523,386,351,77,8,401,65,4,546,95,155,202,180,21,2,498,391,40,352,7,5,32,11,6,730,474,31,475,110,137,899,854,453,922,569,291,114,108,22,898,44,9,177,403,148,49,361,342,285,260,514,269,93,17,758,901,210,864,479,59,34,29,28,67,217,494,318,236,179,90,76,56,50,18,242,417,528,488,206,98,413,94,817,789,468,402 }, +{ 5,21,32,14,2,48,17,3,1,12,72,38,45,54,51,10,36,22,76,23,0,89,540,13,137,86,37,4,430,270,50,114,11,221,99,285,115,64,6,61,46,361,29,181,290,65,58,403,208,155,28,133,480,281,148,128,323,453,657,401,514,541,754,421,697,202,90,9,7,475,241,263,40,56,328,308,95,59,207,576,805,165,838,513,57,27,402,19,425,18,775,488,119,283,218,741,428,341,24,141,77,33,794,408,227,197,102,194,52,179,832,55,180,494,269,365,449,164,236,350,745,318,171,859,244,474,108,880 }, +{ 202,318,77,291,128,275,102,33,269,342,177,210,402,678,141,403,494,40,20,196,0,137,7,23,49,32,64,216,4,416,104,139,285,59,352,43,61,66,13,304,234,90,22,475,319,450,11,349,117,300,113,5,153,58,947,17,112,21,6,115,120,70,544,38,16,142,2,315,194,134,95,18,498,9,74,597,237,51,329,884,25,12,453,864,24,789,173,415,639,859,155,277,52,81,86,222,178,10,48,560,14,230,665,198,97,31,355,557,65,1,186,105,817,111,39,226,57,546,121,29,147,28,15,87,60,96,265,523 }, +{ 1,24,46,2,14,67,69,75,103,38,35,50,52,83,29,108,18,16,71,220,149,394,309,236,189,70,96,133,171,54,68,366,28,58,5,238,181,163,87,7,433,0,335,60,218,114,251,487,65,267,537,36,328,418,223,9,486,55,516,262,112,150,155,12,388,48,21,45,675,175,336,22,409,118,37,186,281,140,412,696,6,124,25,514,151,294,61,99,154,10,334,32,17,273,92,135,160,283,760,278,458,227,766,64,307,19,86,361,398,230,552,641,532,400,137,565,23,502,345,51,13,95,765,26,66,72,128,399 }, +{ 15,1,5,2,13,0,7,23,6,3,180,12,51,4,9,115,457,165,197,21,8,14,141,901,37,752,117,16,77,10,32,120,202,11,317,217,110,961,22,33,365,341,82,269,719,93,352,31,102,18,128,153,134,28,260,48,569,64,137,40,318,196,386,351,509,17,44,30,326,125,730,308,450,49,177,36,95,453,89,72,98,99,203,873,523,401,498,403,59,291,116,38,24,629,372,90,349,76,55,391,373,144,758,494,237,244,96,482,475,54,854,39,468,143,45,139,105,221,247,86,899,50,148,253,35,210,304,421 }, +{ 28,65,124,14,0,154,24,67,69,55,175,7,9,429,46,2,109,35,149,336,68,1,189,83,114,251,108,16,133,398,484,103,36,18,38,22,50,267,420,140,283,289,71,570,158,236,389,101,505,230,86,346,185,39,12,169,168,799,194,118,49,596,29,732,782,302,309,5,533,52,252,95,388,419,535,21,439,458,705,75,797,160,412,6,10,54,531,218,92,345,208,96,159,610,48,60,64,323,756,105,37,23,646,238,51,128,329,886,547,278,13,650,637,32,172,135,364,164,143,584,602,115,701,601,137,333,399,443 }, +{ 162,403,56,775,129,880,161,527,99,3,17,40,33,475,23,4,361,128,196,14,200,183,34,202,102,184,548,402,383,53,130,153,757,494,27,257,108,453,38,12,136,117,51,485,123,64,57,65,19,585,141,73,13,139,421,134,229,106,11,80,556,469,670,84,59,152,62,78,714,412,378,77,5,495,21,54,236,488,497,2,6,90,514,86,111,730,22,180,26,46,507,440,95,269,37,472,115,32,401,45,283,452,618,0,328,47,18,29,266,390,10,211,165,899,250,24,300,862,719,504,133,543,197,318,277,50,176,457 }, +{ 151,29,112,2,58,311,186,52,70,113,315,45,66,74,61,631,5,87,287,243,491,209,1,869,6,227,614,135,7,307,75,80,27,145,496,226,25,454,17,14,549,26,845,19,32,46,73,106,294,163,155,64,255,659,849,667,632,644,592,72,220,331,21,334,222,172,42,69,400,48,76,138,396,337,148,635,50,86,611,445,128,171,97,122,141,95,738,119,16,37,38,4,207,67,425,290,409,53,24,65,262,89,90,12,297,278,192,461,137,22,624,36,20,483,881,84,292,684,43,10,833,56,651,655,114,263,204,115 }, +{ 6,74,75,1,70,66,138,29,25,85,26,42,87,220,52,2,135,226,222,802,324,112,145,357,103,19,278,108,380,67,114,309,235,14,500,69,451,133,606,280,38,24,582,83,65,262,163,86,97,394,294,267,486,96,50,36,889,388,603,641,58,256,32,895,238,223,853,45,122,594,46,537,64,21,204,150,27,335,792,102,7,115,337,218,13,418,71,33,160,632,5,189,696,571,308,461,95,565,16,545,331,125,4,137,134,153,113,117,17,35,558,54,287,149,22,171,18,711,174,630,247,63,12,23,0,194,462,90 }, +{ 15,13,23,51,1,120,0,180,202,5,260,9,2,102,450,115,77,7,141,12,21,269,318,197,137,523,403,6,165,326,33,351,341,817,110,901,342,128,365,36,14,4,16,457,308,401,18,494,8,48,32,59,64,82,352,22,475,10,217,386,730,317,28,93,37,3,373,854,453,719,752,31,615,24,44,30,421,291,11,210,221,39,899,99,96,961,55,86,98,40,116,177,402,922,160,898,244,203,35,576,17,569,117,509,144,391,90,49,372,704,349,153,873,285,498,253,275,125,89,143,300,196,72,247,67,95,629,127 }, +{ 5,45,17,14,46,2,50,48,186,181,227,61,29,38,155,281,54,52,80,106,400,209,21,58,3,171,243,487,540,32,328,311,103,218,133,430,255,62,67,12,828,454,36,56,536,236,27,1,207,496,787,119,697,366,114,37,19,108,6,760,513,541,600,587,592,84,745,842,99,920,96,502,151,76,13,26,270,583,263,86,221,115,83,832,666,51,23,136,34,334,65,10,290,72,308,137,663,869,739,361,514,25,721,738,794,4,659,543,89,401,667,11,64,576,378,148,22,24,834,0,474,357,73,483,754,516,41,53 }, +{ 18,16,35,60,68,121,265,158,159,24,329,105,9,132,167,252,327,709,101,55,286,39,21,71,146,49,7,109,374,23,22,126,604,107,419,333,271,14,28,1,48,0,191,120,92,212,20,310,272,890,553,118,5,326,137,199,260,455,51,95,446,320,13,32,450,259,170,627,621,639,2,10,195,647,128,98,364,301,557,463,43,37,239,77,576,848,64,100,351,82,102,125,65,285,202,12,354,6,363,346,178,344,197,165,493,407,147,29,523,242,907,96,538,932,403,33,279,916,97,704,36,31,402,520,318,156,912,846 }, +{ 467,650,389,108,283,56,412,123,177,216,670,619,349,269,33,475,899,775,453,503,789,401,678,65,543,51,196,403,730,128,84,23,194,523,13,421,719,576,457,11,597,153,880,141,249,847,3,801,117,817,57,133,18,0,202,114,59,24,150,32,386,64,40,95,291,4,183,450,130,524,162,5,554,152,90,22,9,361,134,236,102,17,27,120,304,19,961,629,210,432,21,770,86,16,14,10,77,165,46,28,594,381,377,240,137,26,229,494,947,372,602,342,318,275,125,98,630,743,701,605,184,103,97,63,50,49,958,444 }, +{ 514,11,377,328,361,3,4,880,507,403,485,57,130,14,757,152,38,102,300,211,556,215,54,176,236,62,229,56,494,40,585,555,266,34,183,59,342,12,162,440,453,548,51,37,77,402,488,305,184,196,542,421,775,471,123,527,210,369,313,33,457,136,719,23,202,231,13,128,153,381,629,452,803,543,129,412,157,17,248,339,111,84,139,497,475,205,99,119,32,828,188,177,961,349,383,117,46,89,79,730,216,504,277,401,161,134,308,291,322,76,249,283,72,65,64,21,2,22,670,503,241,41,257,90,108,618,472,94 }, +{ 3,555,62,266,507,215,130,440,99,514,229,152,471,40,57,139,403,12,56,548,305,33,475,38,313,775,361,14,123,211,880,328,196,102,23,556,381,184,136,757,377,77,277,54,183,494,453,421,4,11,205,349,291,129,162,452,34,236,84,17,369,37,59,485,497,111,401,402,51,153,157,477,585,13,670,128,117,339,176,161,41,488,248,202,383,300,457,249,119,76,432,46,342,134,79,188,89,214,2,474,72,527,961,21,32,308,719,543,165,177,257,730,412,133,413,64,283,216,210,245,106,618,803,90,15,629,115,460 }, +{ 120,318,450,260,77,15,202,13,817,51,269,5,33,494,922,128,1,326,102,23,403,523,137,141,21,177,351,40,342,48,291,82,854,153,125,64,7,615,32,196,22,704,210,402,98,4,475,12,373,115,93,2,96,453,285,44,275,349,36,61,31,116,216,859,197,117,49,28,16,899,678,203,165,59,90,180,139,50,24,6,144,217,95,898,692,170,110,45,18,17,10,0,730,352,72,37,207,457,576,341,237,35,20,9,661,372,194,961,223,214,958,949,811,805,791,551,424,391,365,244,242,221,208,160,127,99,89,76 }, +{ 23,1,15,51,13,2,5,0,7,6,180,12,9,115,21,3,197,165,4,457,386,120,141,33,202,453,14,730,523,719,401,37,40,32,341,8,31,403,260,82,450,352,16,48,110,269,317,77,217,308,44,137,22,102,18,365,318,901,93,351,421,117,475,752,11,326,28,391,49,98,153,498,128,99,64,30,569,10,899,509,36,196,961,24,221,59,39,89,177,758,854,134,494,116,17,629,90,817,670,468,86,247,72,95,35,105,96,203,482,55,373,125,372,873,144,210,922,291,38,244,237,898,54,50,20,349,615,65 }, +{ 15,180,351,317,82,115,365,217,141,898,10,854,901,197,143,77,23,752,341,352,33,110,13,36,64,102,51,4,1,260,253,244,120,9,21,5,22,40,498,55,165,137,117,28,11,873,372,922,482,134,59,0,72,153,196,160,32,48,202,3,2,961,90,12,35,811,164,291,177,349,31,86,30,308,7,125,509,642,450,128,6,139,17,96,210,237,89,951,523,342,457,93,730,57,37,39,661,16,83,437,373,546,269,49,18,14,531,8,717,318,111,45,24,569,247,76,533,719,221,67,326,282,468,386,203,52,44,38 }, +{ 104,289,707,66,712,173,97,214,90,64,426,20,874,414,568,43,65,32,194,715,7,204,312,560,74,500,192,835,324,0,38,376,819,861,147,319,95,636,22,86,729,21,470,879,288,5,107,526,52,81,178,2,751,49,10,519,142,595,427,247,77,356,232,249,4,750,237,597,28,885,784,36,889,858,51,202,802,14,135,298,115,13,59,524,808,1,330,325,23,92,180,359,392,31,24,583,681,61,18,259,172,48,177,123,825,798,37,357,12,208,33,174,387,362,140,102,35,76,40,17,137,198,11,216,600,16,671,91 }, +{ 84,65,56,18,194,249,0,108,123,643,847,554,63,524,416,141,453,24,26,403,22,511,467,630,475,128,73,137,33,9,80,899,95,64,370,76,45,16,133,42,289,19,650,214,27,240,730,719,210,196,119,114,49,494,402,304,102,90,32,11,10,588,561,283,235,202,523,183,25,736,609,580,576,500,457,433,357,349,343,209,124,60,57,39,28,3,1,757,150,23,368,670,51,597,947,813,667,659,529,431,291,287,243,236,233,216,179,177,153,134,122,117,112,89,85,72,31,30,6,421,389,165,125,895,874,619,519,361 }, +{ 21,350,308,13,346,197,826,352,101,841,570,68,165,509,23,115,100,694,749,569,903,51,212,401,9,0,221,734,391,154,777,252,88,124,610,265,237,39,558,125,48,30,217,230,421,35,289,468,64,55,535,475,213,546,175,909,1,403,382,166,589,28,645,812,419,180,32,706,98,593,410,703,759,141,317,629,65,241,83,194,818,773,22,321,752,689,923,341,962,96,671,699,158,95,16,329,429,854,264,724,190,439,31,722,316,72,900,144,10,93,247,49,831,676,372,24,223,36,553,269,293,69,365,490,191,5,639,251 }, +{ 92,16,60,24,7,71,126,18,35,140,330,14,246,46,50,267,121,146,236,108,75,220,199,571,394,68,309,150,132,107,314,448,230,54,232,633,5,366,118,2,21,9,278,38,388,37,87,64,1,181,328,12,641,55,70,672,582,726,48,526,0,622,172,516,563,86,69,32,103,10,133,36,156,167,28,65,101,135,195,52,171,950,149,22,830,189,99,649,191,451,67,13,29,262,294,606,83,545,58,517,462,271,23,572,95,163,696,128,675,594,620,392,514,77,785,45,155,192,217,653,335,279,522,212,237,51,177,565 }, +{ 15,82,898,365,33,77,341,180,115,901,21,10,102,197,55,5,4,351,13,165,117,36,11,1,217,23,317,141,40,752,120,153,450,134,253,12,2,260,143,196,873,51,89,457,32,3,177,352,349,854,372,244,160,59,7,719,961,64,202,96,6,110,291,137,523,498,111,0,210,482,28,31,30,17,951,125,318,22,128,509,139,811,730,386,169,304,9,391,37,164,48,326,269,203,93,373,237,148,535,342,72,569,704,308,247,38,533,49,98,922,86,734,109,14,45,275,216,95,817,403,44,437,57,899,661,41,39,968 }, +{ 16,24,35,71,18,68,108,140,189,69,103,60,267,50,149,118,230,7,1,133,191,92,46,167,9,75,246,0,2,443,309,236,486,335,14,54,212,330,218,516,65,67,38,394,641,21,181,55,28,101,48,83,399,366,563,412,545,114,220,696,388,51,328,13,23,5,64,458,273,124,126,12,238,487,52,345,37,537,87,121,29,915,723,150,175,32,302,154,163,361,146,375,674,22,10,171,271,96,514,251,86,433,70,336,36,571,622,223,906,796,237,726,398,602,283,39,262,115,702,565,891,58,695,562,199,128,894,49 }, +{ 60,20,16,43,7,71,18,92,118,14,35,628,608,68,154,28,375,126,175,107,0,279,150,173,22,356,97,149,566,55,153,169,49,140,69,33,13,230,117,38,23,10,362,51,2,77,783,414,421,109,298,246,359,196,125,124,446,102,104,386,722,66,21,1,601,575,621,326,439,429,12,392,134,32,882,192,74,345,551,533,419,185,336,191,4,232,37,273,595,81,189,791,314,202,158,917,576,467,570,6,5,302,48,422,115,801,319,197,165,677,535,925,420,387,9,423,399,251,517,515,403,291,199,260,694,553,64,40 }, +{ 187,258,871,295,434,489,219,201,224,268,839,384,699,940,110,261,116,160,131,44,36,574,228,144,141,93,137,567,406,244,926,120,98,253,260,373,64,442,206,269,127,908,318,55,31,911,959,855,617,10,1,531,332,523,202,613,203,661,326,352,860,217,717,367,276,21,51,143,180,96,23,105,13,450,22,385,533,284,662,197,851,86,77,251,30,115,83,9,48,816,164,282,811,317,365,39,856,165,351,843,669,473,899,341,125,922,902,752,291,817,372,918,345,417,177,728,82,293,242,951,498,968,854,386,559,15,349,49 }, +{ 66,97,7,172,192,712,232,204,324,387,74,426,448,526,104,173,107,568,560,43,356,825,808,500,729,135,359,52,707,92,32,95,330,20,636,64,65,22,140,38,138,81,298,2,289,715,885,5,802,392,29,49,14,174,0,889,91,86,226,348,90,750,861,6,357,280,314,312,126,214,246,792,353,10,36,24,380,580,21,835,37,28,414,58,230,69,222,595,362,194,673,16,278,12,77,85,33,46,874,18,819,61,60,681,147,858,888,612,600,13,241,25,501,102,48,35,67,189,87,71,40,4,583,519,779,1,237,150 }, +{ 15,1,5,341,4,13,0,3,2,134,33,12,11,7,10,77,6,9,21,23,40,197,8,32,365,37,17,901,111,102,51,117,180,317,961,153,217,165,59,14,22,16,82,141,31,457,94,202,115,291,453,403,196,57,36,372,475,318,719,28,349,18,401,72,269,99,48,386,110,498,64,494,120,352,93,351,54,139,27,509,474,177,45,44,30,670,90,421,326,76,56,89,128,898,642,629,304,260,450,19,482,137,29,55,391,873,342,24,49,730,203,62,373,143,210,79,752,41,39,758,661,817,157,152,98,523,579,402 }, +{ 0,24,35,28,124,68,9,154,65,16,109,149,55,175,158,71,39,252,7,419,14,108,101,346,168,22,185,289,429,49,18,420,169,67,439,671,703,336,302,1,159,92,610,962,484,118,333,95,69,2,677,398,344,100,364,810,272,345,105,46,329,114,60,535,265,327,577,30,10,189,21,12,254,286,133,194,83,23,140,793,553,86,36,50,570,637,13,103,5,722,310,51,374,230,48,38,64,32,747,706,505,701,273,251,150,164,601,455,166,627,143,634,125,283,424,239,458,799,128,246,267,388,547,6,137,96,37,538 }, +{ 7,92,14,16,46,140,220,60,35,24,2,126,38,87,75,278,71,172,262,135,52,314,107,54,294,246,394,150,18,50,330,29,309,267,230,171,1,70,232,108,21,5,121,620,97,236,69,622,32,572,563,950,366,409,58,199,12,48,64,328,37,571,189,146,448,132,66,68,155,872,112,192,461,67,441,181,675,279,13,298,28,226,0,451,23,163,423,606,9,582,128,20,86,526,36,334,307,55,380,462,888,357,335,61,43,10,22,45,83,337,331,186,353,359,103,726,133,633,95,51,65,202,72,74,785,114,141,149 }, +{ 92,7,126,16,314,172,60,140,35,135,278,14,232,2,107,246,46,150,330,24,66,38,71,230,52,380,97,298,279,448,563,192,357,262,199,121,87,18,582,309,462,441,29,75,74,132,220,5,146,451,526,324,423,50,21,550,69,32,68,226,508,1,70,37,633,64,12,108,606,267,48,572,493,54,189,726,366,0,392,359,22,95,43,58,571,603,28,10,20,86,236,55,171,600,36,9,388,163,65,607,387,6,67,49,294,649,830,583,356,362,90,622,394,620,167,259,939,149,443,83,580,114,25,103,118,672,61,45 }, +{ 235,26,53,297,6,436,73,113,27,445,42,25,250,611,90,19,65,214,648,614,85,624,289,64,122,200,491,684,416,32,17,194,45,665,145,34,80,95,573,151,112,322,86,680,714,315,630,106,690,14,29,472,255,141,396,56,312,57,22,247,76,209,4,128,61,288,123,84,352,249,11,874,108,3,138,5,217,256,70,119,59,74,0,835,283,161,114,751,269,597,525,389,136,77,51,10,40,115,287,47,2,52,78,176,881,62,13,524,519,23,137,33,133,28,46,177,746,311,18,236,12,63,180,453,237,631,179,243 }, +{ 352,141,752,854,36,1,351,217,230,244,661,110,816,258,160,224,180,219,82,201,269,567,144,295,260,373,922,93,120,203,489,64,35,202,406,317,206,699,137,116,268,871,717,10,839,251,434,228,864,253,326,96,21,131,9,30,83,384,44,442,39,450,574,69,332,48,318,418,728,898,55,127,187,642,365,86,276,88,28,341,831,498,22,901,443,100,367,523,128,531,940,213,5,689,748,190,860,679,0,31,811,843,559,164,7,669,143,662,851,77,564,372,165,335,98,800,261,2,959,349,284,170,115,291,824,345,50,855 }, +{ 126,60,16,35,107,18,191,121,68,92,279,446,598,463,375,43,167,493,7,20,118,199,212,566,14,150,97,28,575,608,589,55,407,101,246,154,146,24,346,21,0,175,48,71,362,815,354,49,628,132,939,5,467,22,649,10,9,1,356,259,147,271,149,783,439,140,23,108,32,109,230,376,683,125,13,621,345,441,363,31,51,647,612,273,124,562,173,695,768,105,38,252,2,727,169,818,640,195,755,590,637,158,722,364,104,37,953,535,12,44,64,66,359,33,202,806,298,46,419,98,221,95,77,185,660,399,653,520 }, +{ 1,15,2,5,4,3,13,0,23,11,7,6,341,115,77,51,10,9,12,33,180,197,102,40,217,165,141,365,901,21,317,32,202,8,14,64,177,22,269,352,59,17,291,31,569,318,125,210,16,93,386,453,196,457,401,18,494,403,153,752,37,28,475,961,117,110,498,120,342,523,139,116,629,44,326,134,349,203,98,372,49,128,275,57,308,48,237,391,719,30,509,24,95,36,86,19,421,260,758,247,90,730,615,216,137,373,450,873,111,482,144,29,899,304,817,670,25,300,143,801,55,20,244,82,45,27,39,242 }, +{ 51,23,13,202,21,5,403,137,32,141,318,128,1,120,165,125,12,48,15,475,269,180,453,197,115,64,401,33,2,7,450,6,523,308,260,421,221,4,494,37,386,99,16,14,196,457,730,237,93,817,102,77,61,82,352,9,719,98,110,10,20,899,326,19,18,3,117,90,17,391,402,95,0,341,31,11,217,25,961,629,351,96,134,72,49,153,30,26,569,801,203,372,40,509,24,50,317,285,27,758,116,349,342,70,59,58,76,39,44,291,89,57,45,29,854,28,22,144,177,35,194,576,86,670,54,365,678,247 }, +{ 131,716,371,224,737,385,219,254,616,924,836,187,258,98,761,916,944,127,39,105,442,578,9,49,272,31,688,44,116,242,137,871,908,159,395,518,890,28,293,284,574,202,623,51,160,23,0,201,276,36,827,938,839,22,333,125,456,299,286,144,109,438,158,13,95,910,64,30,829,228,327,166,101,1,860,926,613,96,86,512,846,310,21,295,10,406,55,318,252,320,93,843,128,301,627,567,203,165,48,662,492,100,268,37,531,457,221,190,434,403,68,384,421,239,393,261,902,35,533,169,170,120,110,260,244,308,5,506 }, +{ 15,5,1,2,3,4,7,0,6,11,13,10,180,197,12,217,341,141,33,134,77,17,165,9,352,40,365,32,317,64,498,752,102,21,117,901,59,14,237,8,23,291,349,36,864,269,372,153,57,37,82,961,22,115,569,196,120,509,873,342,202,48,51,351,110,16,93,45,31,457,125,19,76,72,111,244,27,260,128,143,318,79,546,56,139,28,18,86,44,98,90,391,94,61,55,854,95,38,386,29,482,898,49,99,89,253,210,177,137,730,450,35,221,84,25,304,954,758,326,922,474,403,203,20,373,50,247,523 }, +{ 66,74,192,173,222,226,174,7,29,712,52,204,353,43,20,500,2,138,145,97,104,673,426,355,6,64,560,87,0,580,331,172,414,90,32,25,337,65,22,49,135,825,861,112,280,5,287,81,95,525,86,21,707,42,38,792,415,85,750,889,356,36,324,819,10,632,232,45,526,330,1,107,544,91,319,140,746,151,294,194,58,92,28,14,67,289,4,636,115,37,17,12,262,715,470,16,155,59,27,61,233,387,298,18,376,568,216,26,122,69,77,113,24,23,888,70,13,114,51,75,448,729,11,609,102,348,312,33 }, +{ 786,259,5,534,590,493,465,929,581,21,279,941,49,13,612,132,32,362,23,147,61,48,35,121,939,626,683,146,178,107,771,687,408,347,713,345,58,427,126,70,18,60,4,197,878,150,344,640,379,1,195,841,33,120,263,356,51,509,522,260,28,22,0,115,55,10,376,663,207,350,199,16,423,142,407,221,156,246,623,595,241,105,31,903,298,11,71,68,95,92,64,17,40,450,441,90,167,308,165,518,44,783,316,247,953,360,351,98,30,102,82,65,159,955,290,87,817,134,20,182,39,24,230,117,59,501,315,569 }, +{ 278,14,135,2,140,16,267,69,92,24,7,46,35,189,38,52,71,29,60,75,357,172,87,309,66,380,262,74,324,230,462,220,1,451,150,335,226,571,108,18,97,50,443,606,563,103,67,246,550,6,641,126,330,70,388,366,5,83,149,68,21,486,48,314,25,12,54,565,298,394,600,622,32,423,294,232,37,582,236,222,572,28,65,251,603,36,192,64,58,145,0,171,331,55,950,853,95,133,86,22,10,114,112,399,620,138,448,26,163,353,508,500,583,96,45,877,238,42,726,9,785,121,279,181,696,72,19,223 }, +{ 165,13,308,391,197,23,401,509,758,457,569,51,629,734,180,115,873,317,901,961,3,453,719,29,46,546,80,34,2,482,217,468,181,867,48,106,45,341,52,17,14,287,297,5,730,445,386,552,428,62,221,186,15,11,171,56,50,12,38,365,250,328,133,61,211,540,153,215,119,53,41,903,670,58,743,311,99,305,231,176,27,236,4,54,130,881,403,151,6,600,57,136,84,40,764,787,114,475,862,472,469,73,32,26,33,400,227,137,21,1,255,196,270,281,155,65,752,635,440,405,326,161,110,549,477,430,396,592 }, +{ 1,14,22,2,28,7,67,168,65,24,49,0,35,46,55,50,95,69,12,159,36,105,16,114,109,158,5,83,194,103,38,133,239,169,9,289,164,185,18,424,6,21,10,708,124,170,320,283,312,389,29,68,51,23,420,143,189,347,505,336,37,175,835,892,86,149,108,64,874,54,13,577,251,48,32,654,756,547,96,71,115,301,286,128,154,202,236,344,160,253,484,638,52,75,208,230,747,610,308,39,218,533,137,140,267,141,374,3,345,31,127,237,799,98,601,597,244,272,323,125,398,401,118,17,327,99,412,101 }, +{ 34,453,130,196,322,3,14,236,361,47,51,377,11,730,514,711,4,412,153,57,161,440,485,102,176,59,162,108,17,62,283,757,202,56,136,38,328,880,77,494,184,12,719,128,402,403,200,23,78,117,27,475,21,300,40,381,54,472,33,53,183,152,129,99,2,714,452,13,585,803,80,210,862,555,383,73,46,123,37,139,84,670,556,503,548,6,507,421,5,111,527,29,19,342,229,457,26,775,134,318,469,133,115,90,106,257,277,401,250,497,205,1,543,266,211,542,629,899,45,488,215,217,65,72,275,339,432,32 }, +{ 48,18,23,21,35,60,16,24,156,51,13,71,121,221,5,132,46,141,163,7,1,43,271,202,115,92,411,178,340,137,447,308,32,363,150,698,125,223,195,781,541,318,147,142,28,22,0,108,360,621,401,241,2,463,354,49,658,586,67,303,269,97,20,761,50,296,146,70,65,763,867,691,638,182,647,93,82,10,767,167,31,914,670,290,128,107,75,61,225,98,64,4,120,14,12,758,110,29,949,457,316,165,105,95,293,30,668,932,180,39,446,724,743,666,421,391,372,351,114,96,86,66,591,352,33,942,922,459 }, +{ 13,165,629,457,961,569,23,197,341,401,41,758,901,719,17,509,51,115,38,421,62,54,157,12,32,45,117,57,37,339,328,106,188,14,365,734,99,546,488,477,76,873,2,453,308,542,248,72,10,184,40,721,214,211,4,386,305,479,474,152,3,243,90,139,11,5,1,153,313,21,468,134,471,217,148,129,123,179,77,89,670,255,162,130,94,7,391,136,59,102,111,536,196,828,247,237,743,428,6,514,277,556,128,33,475,155,266,229,29,528,209,720,413,241,64,361,476,183,9,0,519,405,317,202,181,805,775,431 }, +{ 77,141,2,102,33,1,64,6,5,3,7,269,202,128,180,23,318,14,0,10,13,291,352,153,40,197,165,137,237,51,17,177,15,217,117,115,196,9,86,4,139,134,11,19,22,12,210,403,16,342,95,125,36,457,317,21,498,752,349,275,143,59,341,120,27,93,82,18,28,111,494,110,164,38,25,365,901,475,391,57,8,203,509,260,31,961,49,453,386,48,678,351,326,56,37,719,402,99,401,546,372,569,44,65,304,864,32,730,300,194,26,45,244,873,277,29,285,41,208,597,20,253,160,523,24,98,54,312 }, +{ 212,68,154,124,562,101,191,0,9,375,118,520,167,149,818,65,16,722,302,21,777,35,24,71,604,350,100,806,252,478,346,264,664,841,1,759,265,48,13,695,429,55,701,329,51,23,724,398,589,18,936,115,882,484,755,88,749,69,903,125,189,410,22,221,535,382,108,308,166,917,411,39,28,223,67,92,509,32,10,197,64,5,694,650,114,558,95,246,60,909,7,83,241,96,165,363,391,593,98,230,321,103,364,826,553,925,639,49,458,734,628,419,336,447,768,399,140,105,175,37,886,682,905,674,821,404,109,812 }, +{ 48,23,51,98,125,541,598,259,293,13,807,126,21,115,221,493,963,223,35,31,670,386,121,0,107,770,165,144,90,203,116,719,949,783,727,279,590,197,32,326,10,284,146,49,401,407,132,64,199,16,955,342,97,39,834,1,194,453,191,522,427,114,105,92,30,14,7,465,393,763,271,50,725,615,195,108,22,77,44,9,640,291,20,202,269,941,767,671,591,498,467,360,147,128,28,704,551,389,289,33,150,141,60,43,697,534,362,589,58,325,621,523,475,403,260,237,218,210,140,137,127,109,102,87,83,46,36,867 }, +{ 21,23,13,5,1,586,32,48,167,51,781,31,647,33,271,165,49,141,591,44,115,522,77,197,221,22,360,18,93,146,391,558,105,932,217,447,118,153,961,352,60,900,317,761,196,459,0,363,260,241,82,4,12,698,463,7,291,98,27,247,815,156,120,36,623,35,10,191,628,95,65,46,17,50,922,341,202,45,411,64,521,372,102,16,934,308,269,663,410,351,326,14,116,686,349,225,110,457,29,2,509,71,621,854,701,475,354,342,159,158,132,127,24,478,446,321,246,199,640,848,777,759,371,318,316,273,223,126 }, +{ 2,29,61,52,7,1,5,14,58,70,45,425,6,290,112,738,32,207,46,72,66,186,87,76,655,38,243,263,74,151,21,75,16,227,25,50,135,17,148,64,89,255,292,128,24,106,155,141,315,476,209,226,90,26,833,19,113,27,306,115,48,454,549,592,18,4,163,307,0,20,119,77,10,86,36,270,54,177,35,171,720,22,65,137,496,202,40,887,59,179,95,294,790,23,69,269,220,172,631,334,9,67,449,28,408,318,483,311,145,13,97,845,84,287,240,214,51,37,43,241,405,33,49,102,663,80,12,180 }, +{ 39,265,9,333,100,310,411,254,363,101,447,404,18,272,98,639,264,166,1,286,203,327,682,676,31,905,156,520,821,16,93,656,593,30,625,354,105,24,438,44,664,688,23,116,51,557,0,326,329,21,812,195,49,190,159,35,759,60,478,125,118,121,48,364,132,627,13,167,33,110,921,242,68,274,158,96,127,252,137,668,77,5,731,578,692,102,795,865,131,435,165,22,604,586,271,473,455,382,146,120,10,88,144,65,64,966,212,71,67,128,83,691,897,160,576,551,36,724,615,223,82,50,647,7,95,197,621,115 }, +{ 6,26,2,25,74,1,29,19,42,138,51,108,114,70,324,14,23,386,133,103,5,96,85,13,719,75,453,52,27,66,730,602,220,38,309,65,388,457,58,17,112,122,50,128,323,357,64,235,280,238,670,421,135,165,150,475,7,523,197,32,145,278,87,500,899,401,550,3,218,273,758,208,113,86,83,603,532,222,115,711,12,137,21,895,394,46,24,163,53,45,97,67,125,283,28,458,236,117,34,11,262,294,90,36,801,792,141,516,484,341,302,33,802,297,204,57,95,4,756,594,226,256,134,480,891,545,99,450 }, +{ 20,43,356,414,49,595,858,359,819,107,392,319,97,7,422,470,376,612,173,5,246,0,427,14,683,147,197,22,660,95,230,347,945,713,32,344,92,61,830,362,325,259,33,31,21,12,4,904,707,623,126,509,18,2,77,357,232,165,140,105,102,729,196,153,426,117,408,841,518,98,64,10,17,16,501,663,560,76,44,104,38,558,125,391,23,324,178,134,46,54,29,13,40,51,330,120,493,279,168,581,263,180,158,116,241,455,159,81,28,903,298,90,900,66,465,441,423,202,198,30,534,237,58,24,3,52,887,845 }, +{ 68,35,0,101,65,9,124,154,175,114,336,67,28,69,149,189,103,133,1,24,39,83,50,230,55,345,16,429,251,7,283,218,252,346,18,389,547,71,118,364,100,2,238,140,646,109,46,22,12,439,166,289,36,23,49,484,30,399,14,51,732,13,86,930,532,398,64,96,54,323,694,88,21,722,158,265,5,75,38,48,329,181,705,212,194,952,480,361,419,443,208,302,868,782,520,10,95,108,503,128,191,115,246,237,335,267,637,37,167,160,137,723,702,141,806,565,309,105,264,831,826,701,604,535,60,330,562,375 }, +{ 23,13,51,115,15,5,202,12,1,165,2,0,21,197,453,457,4,318,269,10,32,7,141,9,6,401,3,180,14,403,37,11,341,77,22,719,120,569,217,475,308,177,33,18,260,365,17,961,64,59,99,16,317,237,48,28,629,128,450,730,90,117,137,386,352,523,31,40,494,291,102,247,8,421,509,72,24,498,125,391,196,76,49,44,57,221,36,93,468,203,326,30,45,153,210,899,89,304,216,482,372,38,110,95,82,19,275,134,402,758,342,139,349,98,901,678,752,670,873,546,734,27,56,351,65,817,61,86 }, +{ 121,195,407,126,60,271,146,199,167,16,107,493,98,132,191,223,35,279,1,212,20,362,727,92,48,43,18,21,150,522,446,259,393,467,5,783,590,598,360,640,612,939,649,354,71,246,7,156,834,68,49,125,293,24,0,147,55,608,591,163,14,376,534,31,660,541,463,683,807,97,13,345,589,23,953,668,562,22,32,818,221,108,955,118,284,96,581,595,10,50,28,470,765,695,575,346,116,2,37,61,356,535,566,95,12,51,105,101,70,281,64,273,423,230,202,441,44,9,755,75,697,653,465,38,768,173,175,77 }, +{ 31,44,299,116,393,492,144,268,918,367,456,434,105,489,22,948,127,384,963,9,98,28,0,49,125,242,293,206,395,940,36,512,55,51,203,1,855,93,911,617,159,95,272,23,959,332,763,301,137,21,13,141,64,109,86,282,10,170,120,286,320,551,202,417,599,239,165,685,7,2,616,5,128,730,143,457,352,719,48,39,8,253,160,37,692,326,327,386,450,421,158,269,12,276,18,506,791,473,115,24,16,244,391,164,558,318,403,338,623,131,219,14,523,401,284,30,197,499,900,951,308,479,221,260,728,169,910,935 }, +{ 23,457,51,401,13,758,719,165,629,453,961,730,197,901,386,569,308,670,391,3,29,14,12,739,231,34,52,153,832,828,115,341,2,40,46,514,176,365,5,21,33,0,838,181,4,328,45,54,555,130,509,494,540,734,552,583,215,196,507,227,11,211,99,117,361,180,38,10,1,351,894,134,27,26,186,50,48,543,152,749,369,202,62,236,421,102,600,468,403,171,161,155,57,9,528,17,880,753,36,477,19,440,903,488,377,22,585,108,37,7,6,697,899,757,523,475,576,326,67,479,469,281,867,805,801,659,657,587 }, +{ 105,131,22,36,127,115,180,341,201,219,272,31,365,169,98,1,44,317,9,64,239,187,141,197,498,143,873,320,752,286,901,352,86,164,160,258,327,244,224,185,109,159,217,13,535,253,538,144,116,0,374,276,261,776,170,28,83,634,531,2,569,533,269,616,95,896,251,824,482,165,37,55,128,282,10,5,578,49,546,654,947,913,371,384,295,208,8,860,21,137,202,954,312,284,30,23,567,509,125,574,39,285,318,268,206,203,843,623,33,708,12,77,716,385,837,7,638,120,237,301,254,308,293,16,951,3,395,15 }, +{ 6,1,2,29,14,25,52,38,74,66,26,65,67,114,42,19,108,5,69,83,46,388,75,86,324,135,103,7,17,27,85,380,36,24,70,150,278,87,138,97,594,886,357,267,50,51,18,484,650,23,458,45,646,21,732,398,95,208,64,96,273,13,238,0,124,22,711,550,12,532,323,302,28,220,160,37,335,63,32,194,421,133,262,451,602,283,386,309,730,10,172,467,453,235,168,3,401,782,115,610,670,48,719,81,145,16,20,500,137,226,58,280,165,603,244,866,141,308,222,197,189,112,547,53,99,73,475,180 }, +{ 51,453,386,23,719,730,670,13,758,6,457,401,899,475,629,19,2,29,569,47,26,165,14,894,421,130,801,236,197,108,412,27,74,1,308,754,5,50,17,961,133,45,52,285,523,711,657,78,324,196,128,137,65,34,115,25,99,138,357,59,480,42,114,46,361,867,53,739,58,4,743,403,603,366,11,859,38,262,12,594,202,22,235,153,64,391,218,0,516,487,10,145,200,3,33,444,70,117,901,57,223,134,54,745,390,112,283,95,123,309,96,21,66,803,220,86,341,18,365,402,176,37,328,77,488,73,322,250 }, +{ 252,121,18,101,16,9,167,132,271,60,146,419,364,35,265,363,212,0,158,604,329,682,68,647,109,848,907,191,520,463,39,24,333,28,446,159,821,55,621,553,118,126,593,411,49,71,407,23,286,634,105,195,354,107,404,857,13,676,374,310,259,22,538,562,92,100,31,10,21,793,199,1,327,639,108,48,98,806,51,7,709,346,522,932,166,147,5,590,96,137,254,465,272,20,150,694,64,706,12,14,203,169,95,36,124,77,2,116,360,44,865,402,125,154,128,33,627,576,185,810,455,156,822,777,37,326,127,842 }, +{ 283,503,128,432,269,529,63,26,275,789,193,678,318,389,102,122,291,77,59,177,256,6,862,342,25,18,235,57,216,445,27,4,573,605,349,65,11,85,403,523,643,84,813,630,494,397,233,40,56,73,475,202,138,416,210,718,42,32,133,415,381,736,453,412,511,19,619,91,240,255,80,22,64,114,23,289,194,0,17,123,561,87,174,152,343,81,436,66,300,297,148,95,78,3,217,51,803,510,370,341,139,137,130,49,45,119,396,372,90,237,544,141,74,476,129,86,21,650,421,378,352,209,196,33,288,247,402,701 }, +{ 2,75,29,52,87,74,226,69,220,1,278,135,46,262,70,267,14,380,6,66,324,38,357,294,7,394,222,140,145,97,331,25,335,189,24,67,92,16,112,853,571,26,42,309,163,50,138,35,550,582,103,172,83,96,337,451,71,108,150,5,58,486,785,537,21,60,298,19,462,583,600,461,171,32,230,48,65,366,45,500,606,54,774,12,18,36,149,223,114,37,443,641,133,632,287,563,64,409,85,22,764,388,314,238,151,950,95,61,27,307,155,86,28,415,565,17,246,423,43,572,113,0,186,609,251,396,10,802 }, +{ 97,298,172,140,69,66,7,189,267,92,501,314,60,423,135,24,232,81,71,16,43,150,462,74,14,330,192,517,173,426,733,149,251,35,885,273,6,279,38,18,221,67,278,508,83,607,2,91,380,52,125,448,124,29,387,458,87,20,36,443,230,861,108,915,711,302,104,21,568,526,723,324,12,68,48,5,362,1,336,335,0,28,22,46,541,126,357,103,25,451,877,726,246,398,565,50,138,879,175,963,65,86,165,809,391,715,197,705,191,118,117,42,712,386,204,160,823,674,54,107,467,399,441,633,831,572,563,236 }, +{ 475,421,805,899,403,453,958,615,817,51,801,523,120,401,670,730,450,326,494,23,576,202,386,629,569,260,115,365,697,77,165,110,153,351,318,24,117,13,317,0,341,221,16,704,137,5,196,342,308,757,543,22,719,197,11,4,457,20,9,302,484,758,300,10,7,217,6,193,901,391,91,361,1,791,515,862,291,273,118,102,66,38,36,2,402,125,114,661,643,352,474,134,82,33,133,756,642,511,48,373,240,847,735,608,480,172,135,52,43,21,14,859,244,116,29,370,124,754,180,35,42,898,886,851,842,811,770,558 }, +{ 7,128,20,14,177,97,16,112,43,202,269,77,107,66,415,318,2,135,141,275,147,38,18,58,35,52,307,173,10,356,298,29,210,414,172,32,6,0,137,192,24,291,70,22,102,494,9,87,334,13,104,60,115,64,40,678,342,46,49,186,33,217,5,121,48,90,23,21,4,155,86,232,403,59,28,74,132,37,227,324,319,61,362,402,36,126,95,92,431,337,178,400,609,1,376,71,51,294,665,631,392,151,549,105,81,359,353,304,230,196,67,349,15,134,544,311,285,278,884,352,259,76,427,262,194,50,496,171 }, +{ 24,14,7,28,2,16,0,22,124,1,65,35,108,168,149,67,109,69,71,18,46,55,158,49,289,12,92,95,185,38,6,169,5,420,83,10,189,154,159,584,140,150,36,68,429,164,21,671,484,50,398,60,105,175,29,302,143,703,239,103,86,23,64,344,424,32,51,9,336,251,230,273,577,114,747,133,37,118,194,66,13,48,267,97,128,835,505,52,170,137,320,892,253,115,236,570,388,347,374,125,286,54,20,345,202,458,314,638,246,654,610,25,75,708,17,172,312,96,135,677,141,19,221,3,650,799,547,601 }, +{ 26,80,122,73,27,25,42,684,19,209,445,573,667,17,680,690,106,6,255,297,611,483,4,495,59,119,250,45,84,378,113,469,65,436,128,311,85,64,29,53,200,56,648,396,235,61,742,11,136,76,383,77,0,86,32,161,62,22,814,361,256,14,12,5,137,123,40,389,194,491,503,813,283,269,862,21,3,95,112,454,179,63,141,129,33,177,233,57,202,803,2,102,70,10,34,240,402,18,416,624,275,145,605,614,52,358,504,665,527,343,133,114,108,139,50,881,151,58,205,51,790,24,210,38,174,49,216,285 }, +{ 107,259,465,362,376,595,534,660,683,470,581,147,612,20,858,43,427,49,5,178,246,786,0,35,97,356,279,878,21,423,929,61,142,14,230,126,70,132,146,904,590,325,319,493,22,199,48,32,501,392,298,953,95,77,414,640,347,345,359,798,31,13,198,7,173,58,64,121,105,711,28,125,150,344,12,518,10,941,713,603,4,60,33,450,1,481,92,202,98,120,687,55,207,23,16,18,626,197,102,522,819,163,232,771,113,577,17,318,37,65,357,263,40,324,422,260,623,59,44,663,408,702,494,441,68,455,845,237 }, +{ 131,30,190,856,228,406,224,530,88,863,219,778,274,944,613,539,816,258,187,100,435,871,39,160,321,840,44,116,31,166,93,625,137,36,957,531,127,442,213,669,466,716,385,1,144,839,492,202,827,829,96,382,908,242,662,731,9,254,120,367,276,456,371,960,203,795,201,98,730,574,83,13,924,410,800,926,326,21,217,851,318,523,836,717,268,473,931,352,533,418,23,49,141,28,260,110,77,22,86,310,567,494,457,64,10,55,244,737,251,373,728,128,299,125,105,0,51,48,679,822,489,5,616,265,295,284,615,102 }, +{ 113,311,611,6,491,80,667,25,209,45,26,27,684,42,122,73,85,396,255,145,106,17,614,29,648,297,690,19,454,61,64,624,4,5,416,445,112,32,2,138,76,65,74,151,483,90,174,66,665,119,22,287,1,59,86,378,128,833,194,573,881,141,70,52,0,525,742,214,315,243,544,680,14,87,216,469,11,746,179,250,495,887,95,12,10,222,21,348,814,289,280,204,84,72,436,77,123,56,33,114,177,235,53,137,102,81,161,631,136,46,790,503,58,240,292,208,200,153,36,202,63,7,186,50,135,57,49,37 }, +{ 15,0,1,5,23,9,51,13,2,7,12,120,115,77,260,82,180,341,202,4,450,141,10,8,351,197,21,901,6,817,403,137,102,14,64,22,165,342,457,269,93,16,3,32,11,110,37,128,318,177,401,40,494,18,365,523,854,453,33,36,421,352,475,217,28,210,922,31,569,898,317,125,44,719,30,730,59,86,144,24,48,203,961,17,49,373,116,98,99,308,326,117,752,386,576,153,55,291,39,629,899,95,221,196,139,642,661,402,237,143,244,134,160,90,509,670,391,65,498,349,89,54,127,57,805,275,253,758 }, +{ 219,127,258,98,395,924,421,276,293,697,944,567,201,284,453,401,242,512,308,51,860,475,23,105,295,131,137,272,770,301,843,670,116,299,578,386,935,125,261,13,763,31,576,456,791,115,44,492,403,221,662,268,9,730,801,269,202,49,365,964,55,805,616,159,699,943,22,141,506,224,327,206,541,21,551,144,39,393,165,326,0,842,535,203,36,743,910,28,170,332,318,282,494,949,716,253,569,197,1,143,10,341,533,5,160,615,457,391,916,317,911,187,737,286,384,93,24,599,109,371,180,900,783,244,352,12,623,48 }, +{ 15,352,752,317,180,217,854,141,351,82,1,898,36,341,260,115,23,13,365,21,120,110,10,33,291,922,64,901,372,77,349,160,143,244,51,137,32,498,661,269,5,4,202,304,197,48,253,40,237,102,450,457,373,318,11,22,35,482,251,67,55,9,719,165,59,117,72,153,177,196,12,83,28,961,579,247,326,45,96,17,864,69,523,2,468,125,0,86,730,811,128,817,134,93,90,148,144,437,37,111,403,342,76,57,546,230,704,345,308,139,89,58,873,29,203,164,531,50,30,3,275,559,127,855,629,473,8,56 }, +{ 129,123,257,184,162,17,205,249,183,769,80,119,497,229,106,5,45,130,84,90,59,152,3,99,128,4,618,27,57,77,245,40,62,452,556,378,19,214,460,136,14,12,240,56,26,2,202,432,6,33,61,266,11,209,402,403,64,21,269,102,381,25,141,29,504,76,139,318,54,73,305,34,217,619,179,1,10,32,177,38,361,207,475,383,37,483,22,210,255,115,494,58,196,524,65,23,710,775,53,306,153,742,86,180,421,36,469,137,117,15,51,216,48,134,313,0,111,72,161,285,288,7,757,250,880,503,151,372 }, +{ 102,33,128,64,77,23,51,202,141,269,13,137,40,10,196,22,0,86,117,153,403,318,342,210,65,1,115,139,15,95,134,475,453,180,165,2,177,217,14,6,494,291,197,99,36,4,59,49,28,5,7,11,402,120,12,114,194,3,18,9,19,31,125,237,82,352,17,16,21,110,275,401,44,260,24,285,719,349,25,93,326,457,164,351,111,300,216,27,317,421,133,26,37,203,143,312,116,108,8,277,498,730,365,678,341,98,244,20,386,523,308,105,29,752,372,32,485,450,901,391,361,57,283,48,30,208,96,38 }, +{ 7,14,172,107,92,2,16,135,46,35,232,294,60,97,87,5,278,24,126,29,220,52,38,21,262,66,192,202,58,20,70,48,43,171,359,54,32,448,356,337,37,353,226,112,75,298,1,526,18,12,872,132,64,409,140,22,155,387,334,128,121,392,357,318,307,461,331,0,150,314,49,146,61,415,86,69,71,620,673,230,494,380,324,6,362,355,330,45,259,77,888,137,10,13,246,95,186,141,74,23,50,279,147,194,28,25,51,9,4,609,151,177,55,849,145,199,31,115,102,550,597,59,36,216,90,17,441,222 }, +{ 576,403,615,805,523,475,326,817,494,421,120,51,450,859,137,202,453,260,670,402,77,23,551,401,386,33,958,318,704,342,269,197,196,0,165,480,373,323,65,153,899,753,629,10,803,697,102,7,569,59,4,2,351,90,12,13,962,677,110,9,801,118,40,6,95,5,128,28,143,730,446,124,122,114,14,917,306,207,82,621,407,86,16,164,115,154,64,842,886,848,735,661,484,397,302,247,174,149,141,71,60,1,719,216,104,81,925,628,457,208,168,49,25,22,844,824,685,338,175,109,259,810,236,933,932,854,804,788 }, +{ 141,352,202,269,137,217,180,372,349,9,18,0,51,115,23,13,16,365,221,318,165,317,2,494,752,7,125,120,77,98,20,10,64,49,341,291,22,901,95,260,854,351,308,55,30,28,403,144,93,44,922,873,326,223,82,48,39,35,21,14,197,203,24,153,33,102,753,498,473,156,88,65,386,32,717,275,268,31,196,177,817,730,704,678,661,482,450,437,393,373,288,241,195,132,121,118,110,105,101,36,1,947,475,237,5,253,244,206,201,168,164,158,143,128,961,954,864,751,615,576,551,546,523,509,489,453,442,421 }, +{ 23,202,51,141,13,165,1,21,5,180,197,269,318,137,48,128,15,7,403,120,12,102,125,64,2,33,14,326,523,450,260,93,37,16,386,32,9,4,237,6,115,352,77,203,457,153,196,82,18,117,0,110,421,494,453,401,40,24,817,98,351,475,99,221,730,144,391,31,3,44,96,291,30,719,308,36,39,341,342,11,217,35,8,899,50,20,402,854,615,922,116,160,72,28,17,22,45,10,373,317,89,88,61,59,285,509,752,365,372,58,19,901,46,139,70,349,25,177,65,86,293,90,247,498,54,576,758,898 }, +{ 25,151,145,6,122,174,29,138,74,665,42,416,113,614,45,746,525,287,348,311,396,544,85,66,26,81,280,243,624,355,52,222,32,64,65,680,4,59,19,0,491,2,22,90,7,204,194,104,77,216,112,445,1,61,5,128,86,177,651,91,214,17,95,209,611,141,648,297,80,415,21,102,87,233,454,33,27,43,881,503,20,137,636,573,10,18,14,117,289,76,58,869,202,153,337,496,186,196,789,106,315,11,40,28,135,49,667,269,192,36,13,57,12,115,134,750,70,208,63,72,73,46,597,529,51,48,684,173 }, +{ 166,190,382,254,30,100,731,829,438,264,274,88,795,131,613,578,716,625,9,93,921,616,435,404,265,1,530,203,31,44,960,36,39,827,160,127,272,326,98,924,96,473,224,23,410,116,252,77,144,310,137,856,105,219,101,33,83,0,863,110,800,13,812,51,128,406,478,228,125,521,120,639,21,49,836,102,593,217,242,28,897,772,931,5,688,957,286,115,64,141,691,269,656,317,321,10,494,159,187,197,291,86,363,576,944,67,22,450,201,523,55,411,373,82,822,557,260,456,704,329,367,225,276,48,202,268,213,32 }, +{ 132,21,379,5,32,13,23,195,626,51,48,121,70,1,850,296,687,883,156,771,61,49,407,95,146,125,105,55,652,4,98,761,77,58,33,518,260,18,623,586,349,340,120,82,523,522,354,163,24,16,0,293,45,87,786,165,929,75,64,888,763,535,308,102,31,698,40,269,202,159,37,35,9,845,622,207,663,153,117,900,608,386,817,591,351,347,310,241,221,199,170,158,115,76,65,59,28,22,706,223,774,640,629,461,415,116,101,71,303,60,941,638,427,421,401,391,372,197,196,127,299,937,854,768,475,453,450,403 }, +{ 254,9,272,0,49,688,39,101,578,131,159,518,158,327,333,105,286,68,716,224,252,28,890,344,616,310,846,829,219,827,228,613,24,35,364,16,30,18,938,371,406,166,419,65,455,22,95,627,793,709,98,910,124,154,51,100,31,127,48,1,21,385,190,23,320,242,137,187,374,347,258,36,44,13,301,404,109,856,116,170,125,118,96,160,442,656,424,865,438,931,67,168,64,55,239,623,128,737,265,924,553,221,202,10,71,677,86,83,88,916,60,329,293,538,7,577,512,5,761,395,912,421,212,144,816,944,506,346 }, +{ 16,35,60,20,7,18,126,68,14,43,92,107,118,101,55,71,28,121,9,154,0,97,109,24,621,150,2,191,419,252,5,202,279,363,917,22,21,124,364,169,439,604,199,49,346,446,175,158,12,167,575,48,38,13,493,246,185,10,362,32,95,51,259,375,1,39,598,628,932,566,421,6,23,64,29,108,146,925,61,46,356,494,318,132,140,345,694,149,359,147,65,407,329,376,125,403,697,273,302,212,96,69,137,50,848,25,467,298,77,453,173,230,570,826,221,66,70,143,677,535,265,608,551,58,815,128,907,100 }, +{ 15,1,13,2,341,5,0,11,4,3,10,7,33,23,12,6,117,21,9,40,17,901,197,8,134,77,22,37,365,14,32,165,317,153,102,180,217,457,202,51,961,569,141,128,115,318,38,31,64,19,16,291,137,269,196,372,111,59,44,36,25,352,349,57,99,18,509,72,30,27,752,120,93,54,45,41,342,48,110,49,453,498,79,177,28,719,94,403,402,386,89,82,474,29,285,139,86,482,56,237,361,95,55,391,26,277,116,873,34,210,76,758,326,50,39,143,90,328,260,308,247,125,898,164,24,494,401,421 }, +{ 78,444,47,19,26,390,813,130,108,453,711,27,412,730,65,122,680,283,690,113,51,235,236,73,128,630,196,297,14,250,123,53,194,183,200,133,64,445,368,90,719,3,381,42,23,389,269,6,472,650,249,56,475,32,59,4,57,45,34,648,605,624,503,114,17,25,736,256,22,803,141,318,153,315,95,214,0,684,119,99,18,432,216,899,85,289,46,457,243,33,11,436,480,50,322,177,29,152,129,54,13,657,304,285,84,52,401,117,881,255,714,202,665,597,2,961,12,339,38,361,77,524,115,58,24,145,670,402 }, +{ 2,29,7,52,66,61,45,112,738,113,74,14,5,151,6,315,20,592,70,128,32,425,16,25,1,222,87,135,177,43,64,491,186,59,38,655,21,72,76,46,290,90,243,141,115,77,631,58,106,19,337,207,145,137,4,24,454,833,97,0,26,40,227,311,402,192,36,27,89,210,35,292,269,48,86,10,202,209,496,18,217,22,102,226,138,17,887,204,122,65,318,33,28,104,172,51,255,13,23,42,148,644,216,790,307,287,174,180,92,69,291,95,49,415,75,416,483,549,179,275,263,270,107,9,334,869,214,155 }, +{ 145,112,74,66,26,6,29,70,396,287,138,87,135,222,226,25,644,151,42,19,122,307,651,624,635,337,648,45,2,113,294,58,85,632,849,5,416,75,52,172,61,573,445,27,1,315,884,665,64,7,53,204,32,461,95,17,97,297,174,163,436,220,280,525,192,65,792,73,14,186,86,609,881,353,36,311,549,72,243,22,194,331,148,500,235,80,69,46,680,278,38,312,48,90,21,106,37,409,491,128,10,114,614,631,209,67,415,227,50,108,237,250,580,155,76,141,171,544,262,24,620,12,43,133,611,4,334,389 }, +{ 92,126,60,16,7,24,35,232,71,14,150,140,121,246,314,146,172,132,199,107,18,267,46,278,572,230,108,451,330,236,380,388,462,135,68,38,830,633,392,279,97,2,448,309,649,517,672,32,357,21,5,75,9,118,22,55,167,87,582,192,526,594,366,156,359,298,191,195,64,653,28,50,189,324,563,13,220,0,1,66,467,12,10,423,441,149,733,52,262,877,48,29,70,95,49,516,133,36,54,508,407,360,354,598,550,101,69,37,58,65,271,640,711,212,571,86,345,895,696,273,125,522,23,90,603,72,739,163 }, +{ 13,115,569,734,219,341,127,365,197,509,629,23,98,538,873,901,286,762,55,206,258,165,253,332,170,169,638,535,180,391,116,276,844,31,44,12,546,0,395,164,1,293,10,752,911,36,964,143,282,37,384,512,237,498,308,616,301,740,5,141,352,8,261,9,2,943,654,317,120,284,38,338,913,601,295,244,105,7,3,201,468,924,125,923,910,144,239,21,4,479,482,242,6,86,131,417,961,185,22,64,758,374,110,841,533,401,93,160,15,944,434,82,951,567,843,268,14,564,837,299,272,719,28,860,109,11,351,935 }, +{ 151,58,396,53,287,74,27,73,297,549,29,651,145,70,445,112,113,315,436,26,331,6,573,250,75,45,334,52,307,17,5,34,80,163,2,138,19,491,61,881,220,409,631,262,1,614,632,226,171,106,611,186,32,200,66,50,62,311,25,46,845,767,500,21,135,644,243,223,87,14,48,42,64,3,472,108,324,76,122,161,635,684,65,294,56,38,136,95,72,255,114,849,780,278,209,37,90,852,84,714,7,51,89,148,624,237,383,36,207,236,502,22,12,133,86,322,659,227,119,69,222,11,4,96,309,263,179,33 }, +{ 214,289,90,874,104,751,64,835,312,249,204,65,750,288,875,348,519,174,247,194,74,715,81,138,32,280,524,784,192,636,319,437,879,0,95,85,6,681,217,173,954,91,29,177,86,597,792,77,317,671,422,22,115,864,888,52,202,752,216,673,588,712,18,123,180,233,306,43,355,304,352,20,76,693,579,66,4,5,25,51,21,343,59,237,2,28,61,426,235,577,33,10,397,316,707,287,145,370,24,102,49,291,17,108,84,945,222,97,57,208,56,401,42,526,560,13,730,40,402,23,117,207,474,7,484,72,494,36 }, +{ 9,39,166,28,35,158,49,30,101,175,439,0,346,1,364,64,88,274,100,168,36,67,404,310,333,952,159,55,345,505,190,706,254,420,86,237,23,336,68,22,251,344,51,69,194,114,164,131,570,208,180,756,10,799,143,399,109,83,50,115,141,967,438,768,584,868,128,752,105,95,103,189,286,252,352,5,323,2,230,65,596,289,137,498,7,702,165,13,12,577,503,535,160,125,202,48,547,455,244,610,96,21,16,253,169,857,217,154,797,646,656,228,197,530,747,149,810,124,930,272,865,597,98,185,31,24,389,625 }, +{ 341,901,15,1,365,10,569,0,2,5,180,4,3,115,6,31,7,197,9,13,22,317,951,165,44,629,143,23,253,401,116,244,762,55,93,242,479,752,30,217,51,37,141,28,873,137,638,36,202,203,12,21,86,386,421,77,24,758,11,268,453,318,269,110,33,576,64,811,352,326,164,16,494,506,498,308,670,82,717,642,351,206,120,338,170,261,32,125,40,851,805,260,102,859,8,403,54,661,961,291,144,105,965,98,35,898,482,391,373,153,509,492,958,117,17,499,615,38,824,559,456,384,854,457,282,89,564,237 }, +{ 202,450,120,77,260,318,494,128,102,817,15,269,51,13,342,403,23,291,5,523,137,326,21,141,33,1,922,32,82,351,48,854,177,859,402,64,196,70,615,31,475,40,4,153,285,59,0,12,22,10,2,9,95,98,61,90,28,210,30,17,453,194,117,139,8,352,96,49,275,35,678,899,113,349,165,65,180,6,730,93,692,115,58,704,217,37,203,719,116,576,125,50,457,75,44,421,163,216,36,134,7,39,3,416,14,67,197,25,373,110,341,207,112,86,386,87,56,127,99,11,223,551,365,300,105,16,19,237 }, +{ 241,32,13,115,197,180,165,316,64,288,125,21,23,237,247,141,95,16,22,92,167,522,191,546,498,391,341,28,752,177,586,4,48,509,447,118,459,90,5,352,59,901,264,225,304,350,35,199,126,363,18,217,24,410,468,691,246,841,744,10,478,102,77,649,386,117,86,49,317,308,302,212,146,33,71,954,156,72,46,674,93,31,0,640,411,923,903,645,686,271,698,2,521,140,602,591,120,36,375,68,12,864,321,695,873,758,340,336,318,269,179,143,65,897,772,446,880,839,682,366,190,57,30,818,781,303,953,388 }, +{ 16,24,35,71,60,14,267,18,46,140,69,1,7,108,189,2,92,50,75,230,309,68,236,38,335,220,394,54,366,52,486,21,150,149,246,48,29,87,67,5,571,388,9,181,133,0,103,443,28,163,537,171,55,223,126,545,121,70,12,96,262,328,565,83,32,118,65,516,58,218,37,191,330,563,64,167,22,114,13,51,23,238,251,622,281,278,487,294,399,99,696,115,36,10,582,135,514,86,6,128,517,950,675,674,273,98,101,594,172,49,72,146,95,314,451,155,45,409,212,433,221,345,141,66,247,97,733,125 }, +{ 15,898,180,197,901,341,638,165,33,10,115,77,365,1,4,217,317,5,102,117,253,13,951,752,3,134,2,762,153,569,37,21,0,196,40,11,244,23,6,82,7,120,143,291,32,141,137,51,31,873,55,12,351,44,260,349,352,401,372,479,177,93,22,342,116,36,9,629,308,59,758,450,386,210,854,139,110,111,482,457,164,17,922,421,961,202,719,269,203,373,247,523,28,125,160,48,437,64,326,242,57,704,509,304,14,318,730,498,403,506,148,817,670,8,90,453,494,282,144,72,127,275,579,221,206,899,54,89 }, +{ 523,193,18,84,730,817,90,56,65,240,214,475,453,196,33,719,4,233,202,32,51,153,289,152,123,421,11,194,403,129,99,96,386,249,135,102,40,27,23,361,847,352,59,511,91,457,177,370,134,128,117,510,13,561,75,753,643,388,278,247,204,115,494,450,415,304,77,524,217,216,64,6,5,3,174,701,880,659,609,437,433,432,381,287,260,257,165,139,120,111,87,74,66,1,402,372,318,269,21,899,183,63,141,650,605,770,743,735,718,667,629,611,569,544,543,348,306,288,209,207,162,95,93,86,61,57,49,48 }, +{ 151,29,112,74,222,66,145,2,287,624,52,6,416,45,7,113,186,25,122,665,549,337,87,204,243,5,135,644,311,58,884,226,138,396,61,32,192,70,42,525,415,614,315,19,64,491,651,26,4,227,174,609,544,20,21,43,14,27,128,22,172,632,0,59,209,65,353,97,631,72,1,85,580,86,17,445,80,454,307,104,90,334,81,496,177,46,635,141,255,48,37,77,75,10,155,869,659,76,294,106,49,73,11,95,38,36,115,673,69,18,216,712,148,173,792,33,331,102,280,12,16,24,137,881,89,297,91,28 }, +{ 13,2,23,0,77,5,217,7,1,6,33,3,15,51,10,115,141,102,180,64,4,9,40,317,11,197,14,117,165,153,341,22,352,237,17,365,134,269,291,125,16,202,12,196,372,59,349,177,752,498,128,28,18,32,318,8,36,95,457,19,86,49,210,143,391,901,24,342,21,304,569,31,509,137,139,120,27,386,57,25,164,98,29,111,401,403,45,26,244,864,482,546,110,44,961,308,38,275,453,37,35,93,48,402,247,629,20,50,46,719,873,55,475,65,56,30,72,579,203,523,99,253,494,468,170,54,116,76 }, +{ 28,67,0,65,1,114,103,83,69,50,9,55,2,109,124,46,133,24,14,35,22,154,36,68,38,547,389,218,7,283,323,16,54,18,12,160,194,420,49,251,175,5,75,185,238,39,289,429,158,96,208,168,532,29,86,480,505,531,484,189,503,169,149,797,782,361,21,101,570,52,346,71,181,336,927,533,48,95,37,108,51,596,10,252,23,159,128,799,105,285,418,64,118,535,335,398,732,6,70,803,419,137,220,13,866,171,756,394,30,32,309,328,140,115,87,60,230,433,345,141,58,439,831,402,610,366,99,754 }, +{ 121,271,132,167,146,18,363,101,411,621,354,212,520,60,9,647,932,446,806,16,195,407,463,777,364,562,35,360,522,68,55,1,98,118,31,252,706,694,191,0,24,107,936,664,676,604,199,48,126,781,23,590,156,28,591,150,21,447,39,125,5,109,264,49,759,265,96,22,404,33,13,10,100,44,51,905,259,71,346,857,682,116,223,848,941,7,92,154,93,105,108,478,77,467,286,821,166,64,638,907,765,691,628,279,178,14,203,102,12,30,120,393,158,159,593,834,724,419,147,50,293,163,815,786,367,70,634,2 }, +{ 26,6,85,122,396,624,42,25,573,445,174,416,665,19,680,648,138,145,348,881,64,436,214,113,235,65,297,544,194,90,45,746,525,280,112,289,74,233,32,53,27,355,29,222,287,389,17,151,86,80,95,813,81,73,256,5,249,141,283,91,597,0,343,76,22,66,87,204,415,874,209,312,690,524,611,255,288,63,644,123,243,70,614,216,4,128,2,77,119,61,370,106,52,491,315,58,10,56,651,21,12,519,18,14,835,59,250,352,247,114,49,179,636,205,684,619,311,57,84,28,337,667,177,108,11,208,503,240 }, +{ 146,16,199,24,71,18,126,60,92,121,271,156,360,953,640,108,132,674,35,246,118,273,32,354,195,649,7,314,150,458,522,95,517,167,446,191,21,140,340,463,22,388,68,107,566,575,241,727,10,345,591,359,296,48,586,14,407,28,5,608,149,672,594,602,660,1,467,363,212,13,9,823,49,267,101,225,124,55,232,37,653,0,392,877,50,447,330,702,12,809,462,441,230,508,46,668,189,77,303,236,733,23,698,621,115,423,411,399,298,97,350,247,72,796,451,64,658,217,69,589,309,51,928,264,168,102,163,133 }, +{ 51,23,13,453,475,730,719,899,403,202,401,21,15,64,523,115,95,457,33,12,141,308,32,102,4,128,40,19,11,421,5,117,386,3,99,22,153,125,26,817,120,25,6,961,165,1,180,196,17,197,494,57,134,221,0,194,2,237,260,7,670,48,27,365,37,629,450,49,170,65,14,569,137,342,236,38,352,10,56,29,20,16,468,316,241,402,391,77,177,350,84,34,283,269,217,82,9,247,546,351,318,42,59,372,903,841,558,317,129,86,47,46,41,28,18,326,615,341,90,291,164,801,509,119,76,63,54,24 }, +{ 151,396,53,113,73,445,145,6,27,297,573,26,287,315,112,436,74,58,138,491,45,70,881,19,614,34,250,61,29,549,611,80,17,631,632,5,307,2,200,644,32,222,64,25,52,106,42,1,243,87,66,75,845,226,311,186,334,849,95,122,472,322,294,21,651,714,255,684,48,171,331,194,65,161,209,14,128,86,72,141,46,624,50,135,22,635,262,227,85,108,136,7,220,90,76,163,235,176,114,312,280,62,409,10,337,4,148,56,454,283,237,12,469,37,51,780,214,667,236,3,767,133,36,89,495,155,0,23 }, +{ 223,774,1,888,385,260,98,863,202,269,421,730,96,349,697,453,141,393,622,834,318,751,87,418,791,765,801,922,163,21,335,352,5,7,120,13,291,854,64,23,717,851,293,30,284,372,31,678,371,217,947,351,70,51,32,137,48,77,128,82,442,450,44,49,36,752,125,386,541,931,304,873,0,498,22,2,201,276,807,317,10,670,180,102,6,75,237,39,373,33,69,770,144,177,95,17,16,160,116,100,842,203,197,968,949,221,115,275,165,494,475,127,898,58,963,523,403,12,954,537,45,50,433,872,652,526,268,241 }, +{ 60,16,126,92,121,35,150,246,7,598,279,199,191,167,441,107,71,97,146,195,271,18,298,24,407,356,517,230,1,14,98,508,423,140,674,132,359,223,653,212,48,68,399,783,345,21,314,108,607,43,467,232,362,649,118,392,189,20,5,0,149,702,727,55,22,695,28,446,672,69,66,49,493,10,50,388,809,273,2,522,31,46,640,293,125,9,13,95,101,267,173,501,393,834,877,38,575,67,32,75,37,796,346,779,608,12,156,589,236,566,163,96,221,104,360,375,535,64,711,463,23,175,755,172,414,562,953,354 }, +{ 22,105,28,1,239,95,55,170,320,301,127,36,98,31,49,109,9,2,0,168,35,67,185,169,12,14,86,512,7,44,395,159,5,194,293,312,114,64,83,928,713,740,65,24,23,623,21,299,10,338,16,51,242,50,125,141,933,420,13,237,37,164,844,286,143,69,175,584,892,202,48,6,46,371,103,133,269,116,685,39,916,137,115,160,599,208,272,128,96,284,158,737,762,638,180,244,276,187,763,308,165,841,761,479,505,401,347,424,318,389,30,352,870,18,131,32,197,219,965,327,538,54,456,900,506,253,385,874 }, +{ 2,292,6,119,29,207,76,61,306,45,5,790,17,240,32,58,106,1,151,476,710,14,214,209,25,179,84,52,70,64,90,7,112,26,311,19,618,72,128,129,27,255,123,655,460,59,249,141,86,4,80,40,113,22,115,46,10,245,464,205,145,243,263,358,77,56,36,74,65,315,504,454,148,3,186,95,0,519,50,177,75,202,21,269,38,257,66,42,137,23,16,769,51,738,48,136,33,162,18,184,62,241,99,227,24,318,194,87,491,37,11,12,57,425,833,180,402,49,237,89,287,216,13,720,102,54,631,138 }, +{ 51,221,23,115,254,438,48,421,530,541,13,21,401,613,308,39,688,386,125,840,228,551,453,960,827,1,166,96,406,326,393,627,670,158,49,697,656,829,846,770,333,856,404,5,180,30,863,190,202,669,518,890,219,83,159,98,50,131,33,102,310,217,165,137,743,77,32,101,31,752,679,15,105,615,468,391,341,317,0,224,9,498,352,258,286,455,364,187,778,197,344,44,865,539,457,482,272,128,116,37,28,949,403,876,385,963,373,709,931,719,64,574,68,35,160,274,268,616,345,442,95,492,450,293,843,839,22,261 }, +{ 5,1,22,21,2,12,14,36,48,0,54,86,32,10,28,50,65,37,38,23,51,17,7,208,3,9,114,45,281,13,4,137,323,46,24,6,99,95,18,49,58,55,115,480,72,202,96,745,285,194,181,67,64,16,270,89,133,218,83,168,403,11,430,29,61,155,128,160,503,361,540,223,77,244,221,389,318,757,164,103,141,283,76,402,502,401,59,859,920,40,341,543,290,31,803,269,513,735,124,165,308,33,75,253,421,143,838,754,69,90,180,197,125,102,19,494,453,475,966,105,27,289,109,584,576,569,765,148 }, +{ 182,23,363,284,296,447,340,98,1,291,698,367,93,668,658,156,144,21,269,70,433,379,31,318,478,354,203,44,691,335,180,13,223,125,116,937,586,411,326,110,107,48,18,421,664,724,273,197,141,51,692,195,87,5,67,914,687,486,759,349,551,386,375,268,232,149,102,60,35,33,115,795,251,69,65,49,415,364,77,771,626,163,453,281,165,127,121,24,10,360,806,791,393,336,39,475,372,217,850,662,942,682,518,484,361,359,221,196,146,133,128,117,75,64,22,12,7,883,591,457,132,16,647,153,120,68,801,670 }, +{ 45,498,17,106,546,115,32,62,873,41,197,180,509,54,129,468,243,255,123,752,165,155,38,341,13,241,292,217,720,449,57,136,536,734,569,148,51,476,248,428,214,139,76,369,221,482,328,237,542,365,72,89,339,181,23,227,350,64,90,211,117,11,519,270,290,405,721,587,457,21,901,50,128,741,710,141,552,313,430,162,2,540,130,202,15,102,528,247,488,317,209,157,77,48,14,3,391,152,431,308,629,4,618,743,281,179,5,183,33,40,12,37,358,361,266,46,86,961,828,471,773,372,421,543,249,507,119,10 }, +{ 32,95,64,237,92,180,246,22,241,197,125,115,312,652,126,638,49,316,13,21,5,165,288,534,7,4,48,0,28,23,498,392,296,107,888,340,90,303,658,626,247,70,441,10,16,365,953,468,260,230,546,18,24,774,12,379,883,98,490,482,863,31,877,508,391,141,51,830,933,354,9,517,347,150,314,385,177,132,65,146,645,40,653,76,33,2,341,217,14,269,44,698,263,156,195,850,649,633,199,120,360,359,563,923,509,216,128,86,60,733,873,267,35,1,442,168,330,293,929,545,11,622,591,87,77,641,437,660 }, +{ 15,33,341,217,13,77,141,4,317,102,23,40,115,180,365,351,117,21,5,352,854,1,137,197,11,10,153,51,82,901,32,134,59,64,202,196,36,244,269,22,922,165,2,291,260,177,752,143,0,120,898,48,3,318,12,9,372,253,128,457,31,569,28,37,160,30,247,86,139,55,44,72,7,57,349,110,90,237,498,342,304,111,719,579,450,96,8,730,403,308,811,49,523,164,386,35,125,482,437,17,6,14,961,39,98,494,116,93,275,642,401,210,95,221,76,277,105,717,373,203,216,38,873,899,18,817,326,509 }, +{ 120,260,1,15,141,217,352,13,77,82,93,351,110,23,180,317,349,51,202,21,854,326,165,64,269,128,137,5,291,304,752,36,373,372,922,450,318,177,203,197,115,48,457,10,342,2,0,898,102,160,12,16,901,22,125,386,86,9,144,32,96,35,719,28,7,365,341,244,275,494,210,730,18,95,83,661,4,403,237,523,498,247,143,864,473,90,14,961,437,33,817,40,37,8,678,482,253,579,569,98,72,24,50,475,391,67,69,954,717,288,164,65,49,6,206,216,55,17,134,947,899,576,308,76,316,196,490,402 }, +{ 23,13,51,115,77,217,141,177,33,202,4,64,269,102,0,128,10,2,7,318,40,59,32,14,6,11,352,22,9,291,90,247,180,237,137,1,165,16,317,21,210,197,117,153,196,18,125,49,403,3,95,15,17,349,341,304,12,372,216,365,342,19,36,134,453,86,98,28,308,24,31,244,494,93,275,143,475,57,401,44,48,5,498,457,241,120,203,20,8,105,144,221,25,326,110,752,29,65,523,164,37,55,30,719,421,402,139,39,160,27,116,260,26,96,35,300,437,961,82,569,38,45,901,99,72,253,678,316 }, +{ 478,264,724,520,682,98,1,772,905,664,759,821,9,223,21,48,411,604,909,447,363,23,265,100,13,410,897,166,5,907,293,31,88,329,252,39,101,0,51,125,639,848,32,167,96,647,691,807,781,541,686,382,284,521,44,321,777,393,621,274,118,212,18,676,116,163,69,271,936,834,221,593,812,16,24,914,30,10,127,765,115,37,49,354,335,217,144,68,93,386,105,404,586,22,33,4,83,70,806,165,553,697,932,60,77,50,744,463,71,64,286,421,254,281,435,102,35,12,656,371,191,225,963,446,121,213,201,763 }, +{ 29,20,128,7,43,77,174,74,2,23,32,416,52,102,66,491,104,113,81,33,13,6,51,342,222,202,173,14,0,21,525,59,137,45,192,141,319,5,318,64,10,210,22,291,631,18,72,122,90,145,269,196,151,86,61,58,16,665,4,177,40,355,204,153,134,402,28,285,42,738,544,135,48,216,25,275,115,85,24,65,217,9,12,87,76,833,415,226,179,198,38,138,114,49,97,84,243,337,315,311,287,36,426,869,422,172,89,255,17,209,784,112,454,317,425,35,349,117,95,27,494,208,91,194,503,232,30,11 }, +{ 2,1,5,14,58,7,52,29,46,61,290,45,75,38,592,425,50,270,70,16,32,163,24,155,21,186,171,72,6,227,69,334,263,207,220,17,243,663,48,18,89,76,0,67,400,655,738,35,408,54,112,87,148,36,64,449,66,23,106,22,307,10,262,128,292,74,409,115,119,135,9,476,90,65,141,278,37,767,103,83,86,28,720,140,95,780,255,96,25,405,27,77,3,241,51,12,13,306,20,97,666,179,223,40,19,177,4,428,92,151,496,209,172,26,502,113,84,202,790,137,60,431,833,240,659,331,217,324 }, +{ 80,483,209,106,6,26,17,495,255,833,378,469,113,742,27,25,19,814,119,445,161,887,45,42,76,667,61,64,491,151,90,573,73,235,84,29,65,32,136,614,179,383,128,112,145,297,122,2,527,396,214,62,56,240,85,5,53,862,194,648,123,311,611,624,207,141,58,86,315,95,14,22,306,292,34,4,454,436,59,684,790,0,1,289,440,250,129,738,205,70,416,361,3,249,245,57,269,287,665,52,108,402,202,46,12,177,11,114,216,21,137,36,10,200,33,115,72,180,74,138,50,28,318,247,312,51,585,148 }, +{ 98,223,393,834,1,354,195,791,697,447,293,284,360,541,781,807,51,664,591,156,421,411,48,801,163,883,948,668,765,386,18,586,132,121,23,963,363,125,21,446,551,759,31,621,949,770,407,777,271,658,146,730,167,670,13,116,936,453,5,367,296,478,144,371,221,96,70,9,44,202,105,719,127,687,379,49,118,55,60,698,101,842,626,318,771,217,647,212,691,137,281,638,340,165,75,522,463,706,724,32,93,401,39,364,269,16,520,562,35,141,77,50,265,914,450,33,203,197,268,498,264,69,857,335,22,317,103,905 }, +{ 679,876,36,816,141,144,93,137,752,406,669,228,180,269,96,251,332,21,1,48,352,203,351,202,855,160,831,318,345,498,83,5,116,187,120,617,201,64,317,902,258,261,840,23,839,613,473,110,864,466,190,574,219,32,860,13,873,418,450,326,539,926,748,856,260,44,51,384,704,143,50,295,531,197,489,843,661,206,10,944,778,530,217,567,871,88,82,268,901,800,128,822,125,372,365,86,957,31,30,165,37,442,244,728,224,768,851,373,854,505,625,863,386,367,276,55,827,237,115,922,349,420,274,523,223,169,72,61 }, +{ 15,13,2,1,341,5,23,3,0,4,7,11,10,6,51,12,14,9,33,165,115,569,197,180,17,365,217,153,77,64,196,102,22,21,40,453,317,8,32,901,141,457,117,961,134,31,18,37,16,386,629,291,719,110,28,44,475,177,120,93,269,202,86,237,372,24,95,19,125,59,49,403,57,401,352,318,48,349,730,36,111,326,137,128,98,38,82,391,27,139,65,30,873,275,242,203,54,260,29,45,494,55,25,342,210,450,99,56,46,116,509,498,482,752,373,50,351,899,523,308,247,90,143,35,437,76,72,26 }, +{ 202,13,23,51,403,21,494,5,141,128,48,269,450,125,120,523,64,12,318,180,165,453,95,475,15,33,817,32,197,1,137,115,102,7,260,899,4,37,10,99,2,98,326,93,49,196,730,719,221,457,77,16,237,9,31,22,401,6,421,14,386,308,0,117,134,18,352,40,82,20,19,177,615,59,44,61,402,17,391,203,116,110,27,25,90,341,351,153,30,28,285,105,217,3,291,8,958,854,96,24,50,805,922,54,961,758,576,39,26,801,247,347,509,46,757,342,317,365,498,11,194,72,670,210,38,139,275,170 }, +{ 16,24,71,146,60,18,92,199,126,118,246,35,121,108,140,167,132,230,649,271,360,267,7,9,640,388,150,156,232,191,133,522,273,68,236,101,107,212,0,672,55,446,953,14,149,458,674,330,46,67,314,566,95,189,602,633,392,562,195,64,591,103,21,467,39,354,69,463,407,114,247,98,32,5,50,172,10,1,733,399,278,366,49,36,653,309,412,65,823,22,28,915,288,877,316,124,75,345,340,264,37,12,594,516,135,563,598,451,225,86,38,572,830,125,31,30,359,517,115,571,363,164,726,398,48,237,116,251 }, +{ 269,141,177,678,202,77,318,947,128,349,33,291,40,102,352,210,498,137,954,120,205,864,216,64,196,597,304,275,217,494,461,23,402,115,342,90,13,403,450,300,95,49,197,111,14,326,22,139,237,10,0,125,873,372,182,751,86,117,615,7,44,195,36,31,83,67,752,356,153,98,46,96,59,252,109,97,800,357,285,774,523,550,208,609,569,546,391,247,116,93,66,24,19,18,17,15,6,5,3,2,30,922,414,373,180,159,147,105,20,485,75,859,854,392,376,317,298,288,277,260,143,134,107,39,28,735,415,409 }, +{ 16,71,24,92,35,60,18,191,167,108,246,126,150,118,140,68,7,273,121,149,212,21,388,14,399,314,517,267,796,230,48,146,823,199,271,458,1,467,189,695,877,674,345,9,55,97,46,702,101,575,602,594,733,841,0,350,22,375,107,95,232,28,236,462,32,566,69,298,50,672,13,2,5,727,133,451,154,302,125,653,463,23,446,124,10,589,223,132,64,67,175,38,37,49,98,65,354,423,398,103,649,172,562,755,75,66,336,221,197,903,508,915,809,363,359,51,380,411,309,608,237,330,412,241,12,640,509,36 }, +{ 2,14,75,46,29,52,1,70,171,69,163,220,58,38,112,24,16,7,409,67,262,223,35,334,155,186,5,151,267,394,54,307,87,140,103,309,50,45,83,189,400,18,71,60,92,335,760,227,502,48,21,181,108,61,96,537,12,820,25,278,6,852,113,549,66,357,366,32,287,587,17,37,19,536,27,606,36,150,135,97,74,64,26,380,486,65,0,552,583,28,230,281,600,294,787,582,849,68,149,133,675,22,315,311,236,72,474,243,114,10,324,571,238,86,226,764,9,55,780,218,145,209,80,462,328,95,430,767 }, +{ 265,166,252,100,404,9,329,382,520,593,812,39,88,274,604,101,264,0,553,1,639,676,438,865,664,333,310,68,30,656,167,821,118,363,411,96,23,682,18,158,48,21,478,364,190,105,286,51,98,49,254,435,759,724,647,13,212,16,907,272,124,921,159,31,223,419,125,905,557,5,447,93,154,321,44,393,83,410,327,455,848,35,67,621,293,271,127,191,71,530,354,344,32,24,60,625,213,418,242,109,131,36,69,33,221,144,765,28,121,806,65,50,777,116,22,238,960,146,834,781,897,697,778,165,163,466,115,948 }, +{ 16,35,60,18,24,68,158,71,0,7,55,118,109,14,49,22,159,105,9,28,329,126,344,92,20,107,10,154,553,265,2,191,101,95,424,23,21,5,327,121,13,1,286,239,43,747,51,419,48,455,108,374,168,39,272,677,137,169,124,149,12,199,310,150,46,128,38,279,320,37,709,170,346,6,64,98,167,202,31,185,252,67,810,65,36,125,917,175,577,97,212,32,942,44,518,29,925,628,86,301,69,146,375,132,538,575,913,890,566,403,634,439,333,61,33,50,326,147,165,120,66,446,102,273,421,96,493,116 }, +{ 13,15,23,51,0,1,2,5,77,4,10,115,3,6,9,197,7,177,202,165,961,22,11,12,457,318,217,180,31,14,21,141,33,403,40,102,32,120,453,269,8,341,59,18,16,28,44,17,64,291,93,210,719,37,352,401,110,569,49,317,134,117,90,203,475,260,365,30,450,386,494,36,730,523,125,326,196,153,24,498,98,275,901,111,99,421,308,137,349,817,48,139,752,82,72,95,116,237,86,304,391,247,873,19,509,76,372,216,482,629,57,342,899,128,373,39,758,89,65,864,351,437,105,55,221,38,144,96 }, +{ 160,251,137,93,317,36,180,1,345,120,352,752,617,318,217,332,202,96,365,531,269,498,10,901,141,83,851,341,55,143,64,816,35,968,679,800,260,473,351,230,144,21,373,244,717,82,831,201,876,533,110,372,295,559,258,418,206,203,50,28,704,855,237,349,22,669,86,261,48,898,115,860,253,926,482,9,406,748,197,67,854,873,574,7,434,564,839,69,661,450,15,902,164,228,2,219,843,268,125,187,98,5,728,16,922,165,221,613,335,109,224,442,367,384,868,77,539,840,871,291,822,417,579,116,31,918,44,326 }, +{ 42,25,6,59,85,611,233,128,122,26,4,27,19,343,91,269,614,318,45,177,283,503,138,680,77,80,73,11,216,573,145,102,445,297,0,402,235,210,275,209,174,63,202,389,84,14,803,311,18,33,529,396,255,648,416,280,40,65,256,483,10,64,2,57,678,1,667,624,250,81,24,348,304,17,196,76,194,5,544,454,114,789,151,285,133,90,74,106,51,29,690,12,349,141,61,123,119,152,137,32,355,9,52,56,7,153,525,21,237,28,13,881,36,22,87,436,111,576,300,117,605,495,370,361,291,53,23,494 }, +{ 95,64,81,91,32,237,51,65,180,7,347,74,343,207,204,511,498,577,38,197,348,56,312,128,23,20,370,49,104,43,18,138,22,233,124,86,0,90,554,28,10,681,453,21,14,280,87,750,202,141,25,546,561,29,306,115,63,16,636,241,172,165,147,85,52,24,11,467,650,580,353,192,84,6,13,713,194,673,500,283,9,368,718,151,145,72,57,33,355,263,19,544,475,412,324,318,269,235,173,140,125,108,102,4,933,174,899,519,42,643,879,751,525,403,278,247,221,217,148,123,120,112,111,97,75,73,61,59 }, +{ 326,202,120,817,260,450,494,318,403,137,704,859,128,523,77,576,5,615,553,51,342,291,23,13,1,421,234,475,142,15,48,269,178,968,147,16,21,33,639,922,285,20,49,351,7,854,682,70,58,363,265,373,198,252,402,401,158,82,416,60,132,55,455,354,0,68,102,24,2,329,141,35,101,64,18,6,121,43,95,325,165,31,9,848,798,341,36,12,805,195,32,14,411,10,146,107,75,912,569,116,96,793,424,374,167,156,98,125,17,670,692,163,604,465,25,965,629,349,115,907,427,61,457,65,621,86,71,520 }, +{ 43,20,107,356,362,595,126,92,7,359,319,858,392,493,422,246,441,259,173,683,414,49,97,5,819,279,21,104,60,16,230,35,945,232,0,612,376,48,660,121,32,199,147,132,649,22,18,71,14,663,61,423,470,13,146,672,81,623,298,1,105,693,125,159,408,58,427,98,51,165,501,263,729,95,68,4,24,12,325,779,140,55,23,953,426,28,560,72,804,715,241,581,767,314,939,885,202,118,40,204,102,33,37,17,955,192,713,70,221,598,397,77,2,387,251,344,64,44,31,10,941,75,6,465,603,534,46,761 }, +{ 42,25,6,77,210,483,690,29,102,33,122,342,0,27,4,59,177,40,19,91,300,680,18,21,648,153,196,26,475,202,117,494,128,119,790,48,22,2,343,85,145,56,36,24,32,757,81,1,684,106,292,269,28,833,9,814,151,402,137,84,45,134,70,64,23,139,112,464,396,73,655,115,52,20,614,14,10,403,50,216,63,13,358,233,370,86,7,5,76,37,17,12,485,72,65,397,476,291,57,51,80,611,209,881,665,491,179,99,74,49,416,11,667,624,453,174,148,113,95,235,138,275,61,742,544,341,510,746 }, +{ 31,44,299,116,599,393,456,144,492,125,22,268,242,367,28,963,9,0,105,489,948,434,301,918,36,127,384,1,95,55,49,170,98,512,109,506,206,51,320,23,940,93,558,13,900,86,203,2,10,239,64,5,959,457,141,395,143,7,293,282,855,911,137,202,12,253,165,8,417,159,338,21,24,332,115,401,498,327,551,286,719,197,352,16,791,617,269,391,128,120,870,37,763,244,180,479,14,168,386,308,65,164,39,421,473,160,6,18,692,841,403,276,499,326,730,48,951,272,685,523,713,365,169,903,450,424,559,35 }, +{ 410,521,686,367,321,662,201,772,144,335,88,934,1,98,96,921,264,284,897,274,435,443,909,744,692,203,225,551,120,393,33,960,639,44,418,382,190,217,260,93,64,523,442,197,77,9,100,30,237,166,102,948,244,31,326,765,475,438,165,615,82,10,791,473,717,351,238,206,125,12,805,498,466,213,69,842,617,268,778,899,576,127,116,110,37,5,318,187,0,699,530,303,230,855,854,822,817,613,403,269,39,35,32,21,2,489,141,23,291,704,160,478,131,966,539,905,851,768,730,352,272,247,180,175,137,36,22,922 }, +{ 878,142,178,234,786,132,195,929,416,202,146,147,77,639,522,259,687,167,271,450,481,771,626,212,590,465,49,534,455,427,198,5,315,407,120,0,360,318,48,640,325,23,125,329,113,35,883,22,562,163,346,70,581,13,21,31,98,591,1,61,121,199,107,798,279,150,818,159,20,260,379,668,354,446,44,557,494,269,43,32,10,371,293,95,55,105,141,386,58,33,344,884,64,158,467,116,768,102,93,18,16,362,342,817,60,30,518,191,296,128,711,99,223,39,535,87,170,291,777,97,51,75,402,783,7,156,363,347 }, +{ 254,39,131,578,272,9,716,310,827,829,0,224,518,166,616,333,613,846,228,938,101,30,49,252,105,890,100,219,404,406,371,159,190,265,98,286,158,688,127,68,438,385,455,931,327,910,31,242,856,1,187,709,28,924,737,258,23,329,16,21,557,51,137,96,656,625,125,44,442,116,24,18,48,35,36,13,160,88,65,731,124,863,274,22,95,293,344,395,5,93,109,553,816,128,299,627,530,916,364,761,836,301,154,284,871,118,202,676,201,144,83,276,165,419,944,456,203,10,55,512,32,7,320,724,520,60,115,593 }, +{ 699,854,230,855,473,450,831,704,351,137,217,498,352,800,251,202,160,144,253,203,201,418,206,317,332,752,443,141,1,96,36,180,326,82,822,372,93,244,83,494,335,35,365,817,69,859,237,689,898,21,617,864,318,901,44,702,384,922,954,349,345,341,98,10,48,64,824,367,187,128,295,873,284,120,67,531,579,269,7,86,5,22,678,268,2,261,840,927,957,930,28,735,13,291,31,559,947,116,143,30,851,669,373,723,23,16,260,959,661,125,868,717,403,9,748,437,110,50,213,115,223,539,55,615,466,946,285,533 }, +{ 403,475,202,453,77,318,51,402,494,23,13,33,342,102,128,576,269,141,137,450,120,899,421,523,196,4,117,40,90,275,153,365,349,59,177,291,65,210,64,217,84,0,134,670,15,372,95,197,401,817,1,180,805,341,237,96,260,194,3,285,139,114,99,18,873,326,615,503,393,386,317,293,125,24,11,389,165,70,216,800,752,745,730,719,697,678,657,277,115,108,87,83,69,36,32,21,859,111,457,901,788,323,300,283,266,130,118,86,76,57,12,352,351,9,7,6,2,842,725,541,361,329,312,221,168,124,49,945 }, +{ 144,23,291,268,197,182,202,116,98,44,264,284,415,96,70,100,125,367,141,203,39,110,905,411,1,107,93,363,120,180,296,658,82,310,447,692,897,238,361,190,77,664,260,105,88,520,48,478,166,682,118,576,340,30,18,966,51,865,13,349,379,403,795,551,921,326,687,301,254,581,223,101,676,457,404,156,812,195,242,213,208,9,165,364,323,269,65,60,615,498,21,765,621,271,137,128,917,914,890,855,481,217,154,102,68,232,883,593,523,354,131,948,318,219,691,842,846,771,272,252,0,626,382,149,87,824,822,791 }, +{ 15,23,13,77,1,51,202,120,180,115,141,260,5,0,21,9,137,450,269,128,12,2,318,365,7,197,326,351,48,102,341,177,342,352,523,217,291,403,165,6,64,110,32,373,4,317,18,16,37,36,901,22,14,10,494,90,457,28,854,453,82,24,386,817,40,33,308,8,11,475,401,752,96,922,93,3,244,30,275,719,730,349,210,421,86,160,99,17,898,285,31,961,50,39,569,44,221,59,704,49,117,35,372,237,153,55,143,899,391,253,203,116,134,615,576,144,196,402,65,125,629,98,247,482,83,20,873,509 }, +{ 0,95,18,577,32,207,64,193,29,784,65,887,715,102,52,61,671,138,49,91,74,180,104,701,237,693,474,280,403,241,804,847,22,263,6,174,344,583,453,862,475,77,85,643,500,397,38,37,306,498,494,312,289,2,81,33,5,681,942,510,370,27,283,422,316,192,25,155,347,84,901,319,113,576,24,835,355,348,43,933,814,353,72,194,240,204,42,19,298,650,523,125,86,718,173,247,51,721,389,124,879,490,707,291,153,141,58,54,17,889,202,97,402,1,546,342,134,482,36,511,421,805,750,673,426,196,120,117 }, +{ 101,9,0,252,68,364,166,100,265,124,154,329,39,16,419,212,24,404,71,118,191,676,158,35,88,18,274,553,520,382,65,562,694,28,962,677,671,60,55,30,333,302,706,149,167,604,375,49,109,857,21,703,967,917,865,1,264,593,806,344,310,438,346,190,48,254,96,105,439,23,22,701,812,13,125,175,777,67,925,51,159,656,83,589,570,7,455,95,628,289,108,98,31,286,10,5,221,429,69,810,826,336,36,435,92,131,557,639,722,32,168,793,638,272,273,14,44,128,126,114,50,170,146,37,238,127,484,634 }, +{ 16,24,191,71,167,118,212,18,35,68,149,375,101,108,302,589,60,92,755,9,21,562,674,124,154,246,0,273,48,1,126,363,398,411,55,7,447,146,458,350,841,695,140,65,818,150,388,199,628,345,478,264,22,13,189,647,95,271,602,32,69,823,267,121,28,50,67,796,14,346,23,650,49,175,5,621,520,664,51,882,399,10,903,133,815,777,252,98,100,197,649,64,115,781,46,847,314,517,566,221,509,223,103,575,12,953,125,114,236,230,354,37,336,2,39,96,107,308,640,749,463,936,165,724,462,886,604,237 }, +{ 69,14,2,24,46,267,71,189,38,29,67,278,52,35,135,1,103,108,149,75,309,16,388,83,150,7,60,87,18,236,74,66,220,335,68,251,262,6,50,140,582,357,451,324,133,28,226,366,238,516,172,565,65,36,25,486,114,70,336,0,92,55,594,5,443,458,273,175,54,418,96,571,97,394,906,733,21,26,124,380,12,118,9,218,58,22,154,641,606,398,86,230,48,222,160,37,19,705,42,596,331,550,112,10,412,138,95,45,399,181,294,171,163,145,64,462,32,831,600,603,345,696,517,711,602,545,894,302 }, +{ 13,23,1,4,115,51,2,0,5,3,11,180,33,7,77,10,15,9,341,141,6,365,12,102,217,202,197,317,40,22,165,269,352,318,59,403,64,901,17,21,14,32,752,28,31,49,177,308,457,401,498,453,8,18,873,128,291,494,16,125,117,475,569,196,95,509,36,93,237,153,24,98,372,137,961,386,349,37,139,44,30,326,210,134,342,48,719,482,391,90,120,55,111,86,110,247,203,39,421,116,523,304,260,450,19,546,629,65,105,734,730,27,275,57,468,402,758,143,35,864,351,38,54,144,244,216,300,373 }, +{ 447,1,698,411,125,98,31,21,363,5,919,848,48,44,691,144,759,293,225,914,459,120,13,478,354,156,4,116,922,32,23,127,64,668,163,857,371,202,49,82,30,839,284,586,70,17,223,93,865,664,621,340,165,87,51,39,421,321,260,897,110,551,88,724,330,264,335,318,221,77,3,2,821,772,744,442,190,242,195,634,520,360,201,682,963,916,898,854,685,372,351,349,291,269,217,180,141,105,102,96,95,75,59,40,686,622,949,938,687,658,228,909,100,931,867,638,446,407,761,558,463,456,342,310,237,197,166,90 }, +{ 854,351,180,82,217,352,141,752,898,317,15,244,1,922,21,36,10,64,77,115,260,372,365,35,110,22,291,28,13,341,40,48,120,901,349,4,864,5,661,32,23,160,304,498,237,137,33,11,269,51,202,143,373,93,144,59,164,96,326,98,83,450,318,165,203,102,253,230,55,45,197,2,247,201,67,128,579,17,125,86,76,177,69,37,57,0,16,31,44,728,117,72,27,9,52,116,251,482,342,817,457,7,523,811,367,559,50,719,12,134,961,717,494,187,127,105,49,3,90,873,569,899,418,196,18,316,6,61 }, +{ 13,1,5,0,4,10,33,23,9,2,82,11,3,77,120,6,21,7,40,12,102,8,51,31,117,260,351,134,22,16,153,110,64,450,93,32,196,457,523,115,28,165,18,719,98,59,44,730,30,17,326,386,116,197,898,854,217,961,180,177,291,36,49,817,125,48,342,95,141,90,317,341,922,57,758,202,373,899,139,14,365,352,349,24,203,37,372,901,801,615,128,275,318,269,210,453,39,144,111,237,401,391,72,55,137,105,752,403,86,38,569,494,642,704,99,475,509,498,661,304,811,277,61,247,65,873,308,551 }, +{ 51,403,475,23,13,21,12,494,453,115,99,1,5,523,817,202,7,421,49,22,64,450,899,95,221,32,0,120,308,730,6,180,37,141,48,2,20,10,401,128,44,31,14,753,125,402,3,719,260,11,9,318,801,40,33,19,17,4,386,289,237,105,90,86,16,457,326,36,361,269,170,102,76,39,38,30,165,26,25,961,341,958,576,365,247,240,197,117,98,89,77,61,35,34,350,137,93,82,805,782,756,701,671,670,569,503,484,468,413,405,352,317,241,217,216,214,208,179,134,8,281,316,270,144,83,68,945,901 }, +{ 752,180,352,864,498,317,141,217,237,39,365,115,901,30,88,930,579,230,0,83,101,9,197,372,482,873,128,546,64,100,341,36,1,166,437,927,702,35,213,96,23,13,175,285,68,252,269,349,251,28,689,190,69,868,443,735,304,21,562,723,457,137,399,759,509,244,831,419,10,274,77,321,539,165,818,67,530,201,219,194,228,840,418,345,410,93,131,144,86,570,143,48,154,854,247,646,224,866,49,12,699,669,402,596,954,212,203,208,160,158,800,31,177,694,358,24,117,51,957,406,382,202,22,346,134,7,438,16 }, +{ 16,24,35,71,7,0,18,28,60,14,22,158,109,68,154,118,124,92,168,2,55,149,159,49,747,185,169,424,1,108,105,95,10,577,150,344,175,126,20,239,65,9,677,69,5,67,302,6,12,21,671,46,329,38,107,97,164,23,51,43,286,375,170,48,50,125,140,327,64,320,39,420,29,36,701,374,289,83,101,273,570,37,143,32,13,347,137,191,345,189,230,86,66,553,265,638,128,202,429,455,252,54,272,703,403,246,535,103,52,221,421,654,398,279,98,194,121,114,310,336,467,584,298,165,25,453,346,96 }, +{ 15,341,23,13,0,51,77,1,141,202,33,4,137,9,260,115,120,180,102,269,351,40,11,291,5,318,82,7,2,21,10,901,197,12,22,128,854,922,165,450,16,117,352,59,8,177,217,28,3,64,457,349,90,32,36,403,37,110,18,30,14,401,6,17,523,134,898,365,317,453,48,752,57,31,719,386,817,308,196,421,153,93,24,244,139,86,143,475,730,569,39,99,494,961,373,55,642,44,49,498,285,96,210,253,275,661,125,342,35,237,203,372,95,899,326,144,402,247,629,160,98,391,61,304,576,221,216,208 }, +{ 68,35,24,149,18,71,16,118,189,108,14,7,101,154,0,9,230,175,140,336,69,124,65,267,28,114,67,133,302,46,55,398,251,375,345,2,1,236,458,103,388,83,399,596,60,50,283,38,92,346,732,412,602,36,22,212,309,21,273,39,650,722,246,12,109,48,172,429,29,218,191,906,75,52,364,443,5,86,167,547,54,10,135,252,49,64,238,95,330,37,278,723,96,23,705,516,520,439,628,891,13,51,366,565,158,915,930,232,562,30,868,6,335,637,696,150,952,194,451,484,32,220,100,694,702,886,389,168 }, +{ 308,13,197,115,391,165,546,509,125,629,569,237,749,468,23,9,558,28,903,338,217,801,734,317,352,401,740,254,341,49,36,180,22,386,51,39,159,901,873,95,365,490,506,530,168,961,498,131,166,438,64,482,247,219,579,83,185,109,93,752,656,187,345,439,613,857,457,688,316,101,86,21,158,627,258,843,89,829,637,312,10,55,679,105,967,224,170,251,574,332,406,221,175,228,48,758,902,261,960,505,44,31,876,116,37,12,868,840,72,424,347,1,371,98,15,518,274,141,32,827,333,77,190,892,816,272,253,143 }, +{ 90,64,217,32,115,128,141,216,77,312,86,597,95,59,4,33,247,875,13,172,352,197,147,237,177,288,102,437,210,22,97,5,194,137,202,37,57,11,182,208,153,76,61,14,304,134,117,65,40,751,23,291,947,10,864,342,196,21,362,49,356,178,60,45,874,317,0,54,48,612,165,107,51,259,588,752,324,192,819,298,275,180,20,678,372,307,289,173,43,120,112,415,285,207,164,72,36,35,707,44,7,359,89,46,802,414,156,2,789,729,579,168,123,104,98,92,55,24,712,524,125,87,70,66,470,387,465,148 }, +{ 1,22,28,105,36,95,67,49,2,55,239,0,5,12,83,170,50,9,159,312,86,109,7,114,320,21,208,14,103,69,35,168,301,31,164,64,194,23,892,127,169,323,160,654,98,51,141,65,48,158,10,96,143,133,37,505,13,218,584,38,6,46,751,54,115,24,185,244,347,128,424,44,824,202,253,503,597,16,269,32,237,238,39,137,286,180,512,420,3,352,740,533,29,646,165,638,251,242,318,338,623,175,125,4,18,776,395,797,480,285,713,197,531,116,532,30,928,68,341,401,293,371,99,933,124,789,844,272 }, +{ 18,9,16,101,159,68,252,35,24,105,0,60,310,265,49,39,890,329,320,71,455,118,272,557,7,55,167,28,327,121,286,1,137,170,98,364,271,100,518,333,301,65,14,520,51,23,254,13,212,553,21,604,5,363,109,202,938,128,239,709,30,31,127,95,419,64,22,125,578,846,132,191,616,2,154,158,146,124,371,48,647,395,92,67,621,12,242,627,10,916,411,344,424,116,44,403,32,108,512,338,446,737,374,326,166,86,149,793,36,120,688,421,69,827,318,93,293,126,346,731,20,463,37,260,639,450,848,264 }, +{ 129,123,249,618,214,257,460,205,769,184,17,5,245,162,106,45,90,119,76,183,128,2,209,229,61,80,179,497,6,59,130,1,64,202,99,3,152,27,77,19,710,14,207,84,4,306,40,12,29,141,255,57,240,62,26,452,10,790,58,25,269,177,619,556,21,524,38,266,32,742,217,56,136,86,102,519,7,137,115,432,318,33,292,311,11,151,22,402,48,0,216,51,37,378,288,23,210,54,655,667,381,95,36,34,113,65,72,194,403,139,50,305,111,361,504,483,46,833,285,15,494,180,475,317,112,16,263,275 }, +{ 51,719,23,453,899,457,730,13,475,386,670,4,523,15,401,961,11,12,196,99,153,403,32,3,57,117,21,33,450,59,775,165,40,115,130,421,236,77,308,202,128,120,134,758,108,6,65,391,217,90,64,125,177,197,0,361,5,34,26,260,2,19,1,629,300,183,47,216,54,141,328,817,78,123,22,17,180,342,801,7,95,27,37,241,210,214,269,221,14,10,56,237,275,242,194,494,317,558,412,25,743,73,38,247,48,102,28,488,381,318,9,82,29,326,291,711,288,137,53,304,129,46,277,402,339,283,266,24 }, +{ 173,192,66,204,104,74,636,560,426,825,20,7,43,289,750,707,712,97,861,414,214,348,65,715,81,500,90,138,95,64,835,32,312,174,319,22,526,194,280,874,792,52,0,580,91,681,232,29,6,819,330,889,673,879,5,888,86,77,568,519,422,85,376,288,135,729,387,172,370,2,222,33,38,61,10,21,784,355,49,353,107,249,324,25,69,24,18,42,36,577,226,28,356,102,140,76,448,59,92,751,207,115,671,40,325,4,237,31,359,247,524,343,180,470,145,147,397,16,392,153,117,13,120,26,177,597,125,45 }, +{ 23,51,13,202,21,141,5,1,165,120,269,180,48,12,197,32,15,2,318,115,403,125,128,260,450,137,7,9,523,64,82,33,352,93,386,326,0,6,308,4,453,401,421,102,237,37,457,475,31,14,110,351,77,16,3,221,341,391,99,494,30,44,18,117,8,11,817,203,98,730,17,217,39,719,153,899,373,40,196,24,10,61,498,402,72,365,509,50,90,854,569,317,116,28,144,247,134,19,291,59,96,752,45,285,961,89,615,922,342,58,49,25,35,36,22,349,177,20,546,241,57,670,88,54,29,105,576,65 }, +{ 200,78,34,322,472,27,390,714,161,136,19,59,283,444,250,128,236,176,862,108,47,62,527,14,57,412,53,813,73,3,381,17,453,711,56,585,210,4,46,361,77,196,440,26,65,129,51,153,130,432,383,730,216,183,297,803,690,402,401,45,469,202,133,389,123,529,5,495,162,33,90,275,318,754,194,12,378,177,291,32,257,102,38,719,117,184,114,789,480,13,23,11,106,48,503,814,2,61,629,84,684,54,475,245,21,657,555,231,40,678,152,99,300,507,137,119,80,0,436,113,457,369,650,6,403,86,22,523 }, +{ 347,33,204,498,66,546,681,56,174,5,426,95,135,348,97,172,353,864,49,22,928,923,873,808,73,263,241,10,568,370,27,197,180,77,554,207,81,580,102,21,42,237,368,32,751,526,192,134,117,19,0,350,86,63,715,448,468,115,380,123,76,25,4,29,64,44,31,36,6,91,7,511,40,645,387,85,74,861,408,298,80,736,69,173,872,13,501,355,108,712,138,153,87,61,28,17,901,18,467,72,673,59,620,343,232,161,233,312,800,509,324,278,125,45,30,14,650,636,90,3,451,415,577,500,65,561,165,70 }, +{ 131,224,219,187,385,442,258,836,371,944,871,908,737,924,254,127,98,31,827,716,574,44,39,829,116,201,613,276,839,616,242,860,926,284,137,228,395,144,293,36,96,9,1,578,406,30,456,0,299,567,93,21,13,125,202,23,843,160,166,49,51,64,856,105,846,902,203,761,935,938,662,492,128,295,159,83,48,916,438,268,190,100,115,269,5,403,310,272,318,489,367,110,77,141,931,28,10,531,55,326,165,918,688,32,86,576,22,699,88,158,120,717,530,261,244,143,421,341,434,217,2,512,197,960,625,164,37,333 }, +{ 1,4,5,2,13,180,3,15,7,141,6,115,23,352,901,341,51,0,217,317,197,77,752,365,33,21,11,165,12,269,32,9,202,102,291,177,318,93,40,372,247,10,137,31,349,498,22,120,8,308,403,44,17,873,569,110,401,203,116,59,125,36,457,28,326,196,48,304,14,37,494,386,373,98,144,134,153,128,90,64,117,475,758,260,509,72,18,16,206,55,49,523,86,237,210,95,961,629,421,482,453,30,391,253,450,951,719,342,139,638,730,576,39,864,275,268,579,241,19,82,221,24,546,437,89,57,127,811 }, +{ 370,91,681,636,397,718,510,74,81,240,355,66,84,582,278,289,214,511,701,138,90,18,782,6,104,288,5,65,64,32,693,117,247,77,63,192,56,0,814,306,750,673,312,233,85,40,453,847,671,415,11,643,317,207,134,72,61,42,33,102,4,942,519,343,123,115,27,1,86,25,348,249,22,580,537,461,396,352,153,75,484,784,475,403,304,194,21,10,235,29,3,193,119,583,287,196,114,76,59,52,319,256,124,26,23,13,874,579,389,610,462,302,238,17,710,817,597,353,129,96,51,48,217,164,89,835,804,751 }, +{ 15,13,23,4,197,51,165,1,2,120,180,341,0,260,386,5,8,82,12,7,9,3,141,450,317,153,11,10,391,217,6,351,326,115,64,77,14,457,117,901,498,523,854,509,291,110,134,730,401,758,33,961,237,352,22,202,898,125,922,93,21,365,308,196,31,44,615,269,128,817,99,453,801,28,203,899,116,373,873,752,629,18,40,55,349,137,98,37,318,372,403,36,49,475,569,32,38,86,546,95,16,661,143,704,102,719,30,342,59,39,35,17,642,304,494,482,48,24,638,144,177,300,194,139,958,29,54,492 }, +{ 32,76,292,2,5,476,45,214,72,29,1,241,14,519,464,460,21,179,48,129,290,90,17,710,148,205,123,263,249,50,58,358,52,425,186,243,408,46,257,618,207,38,245,184,89,227,155,769,162,270,171,350,3,7,288,119,61,6,106,57,316,64,54,400,449,128,183,229,255,75,4,141,36,496,115,152,524,655,99,209,720,334,497,62,12,202,59,77,37,86,10,405,0,56,51,221,130,666,23,25,40,592,22,181,237,269,11,247,432,137,16,217,454,84,27,452,428,24,663,619,19,513,318,177,659,26,67,341 }, +{ 13,569,115,165,509,197,629,734,17,873,23,659,106,457,180,45,41,32,961,901,38,536,341,428,62,155,587,474,391,54,21,431,99,546,255,51,243,528,308,365,136,241,37,468,405,89,123,129,14,482,181,2,211,401,139,72,12,148,542,719,221,117,794,214,76,749,498,449,350,317,292,157,743,540,29,758,328,152,552,188,162,11,3,119,720,488,339,770,413,237,227,179,50,248,48,209,697,313,90,741,476,130,4,477,128,1,773,519,277,40,421,507,46,266,57,249,33,245,361,137,153,202,453,369,471,64,133,358 }, +{ 68,101,24,35,71,16,154,124,9,0,149,118,175,65,302,18,108,375,346,28,55,92,252,364,212,429,191,7,439,60,694,39,520,14,398,806,100,22,109,329,166,167,484,273,336,604,67,69,419,189,562,21,826,589,1,701,695,345,95,140,230,265,246,49,10,264,48,158,114,637,755,168,103,917,133,46,628,2,64,722,126,650,399,88,404,535,125,768,570,289,150,458,13,706,83,30,50,36,388,32,420,23,267,12,185,5,882,674,818,96,169,51,676,925,37,363,283,602,86,105,38,221,333,967,159,286,942,553 }, +{ 0,9,68,35,1,65,101,230,69,28,124,23,83,39,141,154,67,13,21,352,212,217,51,30,100,252,88,16,336,115,48,175,864,103,24,317,189,5,180,114,166,128,96,443,36,399,10,12,238,64,329,562,264,478,177,32,18,265,752,77,55,22,321,372,291,218,160,702,149,520,167,50,437,304,202,498,247,137,118,269,99,49,596,365,589,221,759,486,349,197,165,382,346,323,410,2,664,480,223,419,213,777,604,433,418,75,7,4,335,482,15,547,532,37,251,363,237,125,936,72,143,755,341,553,308,190,109,201 }, +{ 909,265,100,410,382,812,88,593,321,213,1,30,252,166,676,639,264,435,466,230,689,39,9,48,724,352,478,21,98,553,96,329,190,223,101,23,274,51,217,13,83,5,921,310,699,438,795,125,69,821,905,530,293,752,759,35,36,656,557,128,144,393,443,520,0,541,284,521,604,137,419,32,682,831,141,455,317,418,664,855,854,251,31,165,772,221,404,386,93,201,180,203,33,686,421,335,539,840,115,55,127,44,957,160,285,158,28,344,68,67,367,77,202,345,254,697,102,669,562,897,807,702,765,286,10,351,64,269 }, +{ 113,61,904,43,0,204,848,453,389,315,788,198,174,5,22,899,222,59,37,102,33,207,422,290,288,128,97,329,306,46,31,30,77,470,817,523,159,58,40,942,122,65,725,690,324,291,104,64,263,450,426,20,54,337,304,247,205,196,153,134,117,105,95,49,408,757,615,351,326,194,115,82,28,18,9,177,137,32,350,887,372,347,331,325,217,90,48,2,701,344,342,320,316,158,317,804,376,341,819,319,849,685,666,600,580,579,553,501,498,403,392,365,357,349,330,301,270,262,242,237,180,112,76,44,39,36,7,147 }, +{ 24,16,141,71,18,0,352,269,75,108,140,7,60,35,330,12,199,217,65,9,486,28,498,864,87,246,64,92,68,50,318,267,126,954,118,115,55,230,70,5,146,177,950,545,13,372,197,752,271,101,98,14,133,77,180,641,349,317,99,36,726,458,23,537,487,156,102,437,22,10,622,165,21,563,516,832,202,2,341,149,48,565,86,457,304,273,220,237,116,44,674,526,117,100,39,33,120,49,37,365,360,830,58,137,103,291,135,522,181,166,121,88,54,51,412,167,284,223,46,15,394,1,696,852,463,361,264,212 }, +{ 271,167,121,60,199,146,191,463,18,446,212,132,575,126,598,354,407,16,955,727,640,566,1,608,195,35,562,279,522,21,48,107,98,71,118,783,223,493,150,467,68,589,24,5,360,781,92,156,363,591,411,668,447,55,13,534,818,101,23,9,108,346,581,647,777,590,49,621,0,259,125,362,936,664,939,7,273,28,31,22,51,163,32,807,10,535,834,221,147,520,246,33,293,541,50,37,586,14,815,375,393,4,116,12,105,96,70,2,44,77,39,93,252,149,281,441,46,158,75,61,759,154,97,649,95,423,364,140 }, +{ 15,115,217,317,365,341,180,13,141,33,23,260,120,4,82,110,102,351,51,40,854,77,372,137,352,21,64,1,5,32,36,10,197,117,898,752,11,901,269,202,922,165,59,9,160,244,0,661,373,134,2,143,22,48,457,349,153,253,450,12,386,196,318,482,247,326,128,308,177,55,72,90,498,523,7,125,961,719,93,28,37,86,3,291,811,509,237,96,57,873,16,437,89,579,391,730,111,203,31,864,18,6,615,35,468,210,216,14,569,275,139,164,304,17,342,76,899,403,221,494,642,316,817,251,30,531,717,95 }, +{ 173,97,356,7,43,387,107,426,104,729,414,359,232,20,560,392,595,885,858,861,707,819,66,81,612,5,49,22,362,319,126,192,230,32,660,330,0,74,357,92,246,147,784,715,14,324,298,172,470,879,95,263,2,422,259,16,427,38,314,207,683,61,376,140,21,681,35,6,29,397,91,60,18,241,10,279,28,64,52,77,24,830,500,493,31,636,33,37,501,12,4,86,779,204,135,58,577,370,65,568,441,40,199,48,526,13,98,581,712,105,534,125,325,17,102,72,44,347,750,138,120,70,59,46,465,25,45,30 }, +{ 15,23,13,82,120,51,110,93,31,33,116,98,95,196,453,4,165,40,197,260,117,0,386,2,180,217,12,1,351,11,77,5,8,134,102,9,141,326,457,115,341,291,3,153,10,401,21,450,317,523,854,202,352,14,7,391,898,6,64,961,373,719,22,125,475,901,28,922,615,403,18,177,269,498,203,237,44,349,99,758,509,32,30,318,128,37,817,16,899,629,308,57,365,670,36,421,49,139,275,661,730,111,569,137,24,39,48,86,704,144,801,752,35,17,65,109,494,342,558,38,372,551,221,216,170,46,55,638 }, +{ 100,9,120,260,30,827,795,373,264,77,137,166,202,326,127,578,1,39,254,82,704,318,217,450,18,101,395,737,351,0,731,291,265,317,156,349,341,31,716,105,102,93,141,197,55,33,968,98,269,5,296,128,478,131,24,851,252,371,342,32,859,938,921,44,616,411,403,404,385,924,144,109,165,40,456,274,180,10,494,836,16,512,854,410,299,195,110,68,28,7,518,442,36,438,286,242,13,244,167,96,363,850,379,656,521,284,95,523,125,64,658,615,340,116,67,922,212,115,447,187,937,935,916,724,936,856,822,372 }, +{ 14,24,2,67,69,46,28,108,1,65,38,83,7,398,18,0,124,154,114,103,36,50,267,133,29,55,236,189,149,35,16,547,52,68,429,175,283,71,336,9,160,118,309,22,302,251,109,458,646,75,6,140,388,86,135,484,278,412,12,596,5,389,650,172,531,54,238,60,218,420,602,96,21,66,208,87,886,220,194,505,782,150,185,169,92,64,10,891,168,95,25,101,797,335,289,533,570,532,74,906,37,230,48,357,49,273,262,323,366,696,346,158,23,516,443,39,32,799,70,565,58,705,137,51,13,439,418,128 }, +{ 66,69,14,267,189,24,71,7,150,172,140,97,149,16,60,380,135,462,2,35,67,74,388,92,38,18,451,278,108,29,83,68,251,6,357,52,46,1,230,443,36,324,423,298,458,65,273,28,336,517,314,823,232,192,398,330,711,118,594,103,87,0,75,565,175,55,335,399,705,124,22,86,25,21,603,448,906,568,204,95,48,12,50,236,5,563,309,43,550,10,154,138,64,32,345,302,37,596,893,20,133,572,54,467,114,126,607,42,26,160,246,220,733,375,809,226,429,526,501,723,9,895,49,808,70,500,602,915 }, +{ 15,1,13,5,2,341,4,365,3,0,23,10,11,7,12,180,6,117,9,17,33,21,134,115,77,14,32,217,197,102,317,165,8,141,457,153,64,40,901,37,51,128,22,961,569,291,202,196,16,31,269,177,352,36,137,38,873,372,28,93,19,351,59,55,349,111,44,509,342,498,752,18,48,125,318,99,304,139,120,386,143,237,116,308,72,401,86,391,110,30,95,54,629,27,482,210,76,45,164,24,89,79,29,90,453,403,25,719,57,275,203,216,82,98,41,758,579,277,247,46,260,49,523,244,26,285,326,144 }, +{ 1,22,12,5,28,36,0,21,2,86,49,48,95,55,37,23,10,50,9,7,96,13,202,32,51,105,14,54,208,168,65,115,128,24,83,16,160,67,4,141,137,31,64,99,318,3,269,194,109,6,323,18,164,159,17,114,35,170,239,281,402,285,180,11,238,745,69,584,103,197,165,480,158,45,341,181,169,403,77,244,44,46,38,218,143,98,433,289,401,30,223,58,717,125,657,503,352,217,851,33,177,185,29,946,597,757,708,39,365,312,317,72,800,253,75,789,102,678,124,418,133,237,59,956,90,127,308,430 }, +{ 123,605,630,63,108,736,444,65,650,368,19,561,619,389,122,216,25,114,183,177,26,53,27,813,133,42,102,194,84,445,249,899,297,56,421,349,90,401,33,597,588,250,137,78,73,130,11,730,51,283,45,524,629,235,59,57,14,141,196,153,32,40,343,255,719,134,117,467,304,119,76,17,13,0,152,6,436,77,390,4,323,511,678,475,457,136,64,594,342,23,403,256,12,129,503,218,208,86,62,61,5,416,233,372,52,3,469,184,275,381,106,947,789,554,214,112,680,450,95,309,217,18,9,529,432,291,269,80 }, +{ 127,39,9,254,98,395,371,31,0,385,836,44,1,30,299,284,100,166,116,578,131,187,272,28,935,49,293,276,21,125,23,16,219,310,599,51,737,442,827,48,242,616,137,18,101,908,5,144,13,846,24,265,456,716,35,512,96,252,93,88,202,22,201,68,159,36,158,7,77,55,224,924,938,141,492,203,128,190,688,269,518,258,32,333,64,37,318,228,2,65,829,326,274,244,761,165,12,115,67,286,120,931,217,110,367,404,105,839,33,102,567,83,268,916,662,95,438,14,86,50,944,109,574,557,69,327,625,10 }, +{ 2,29,61,45,151,6,655,112,207,52,25,425,32,833,76,7,70,106,1,113,14,119,292,790,58,26,72,5,887,64,209,128,17,90,255,315,66,19,145,4,186,306,243,476,115,59,483,27,77,74,21,177,311,38,87,86,40,263,141,738,46,290,36,23,148,454,287,10,240,95,42,22,84,16,137,0,179,202,135,33,631,491,814,75,227,51,269,89,50,210,65,214,20,12,80,222,48,318,24,28,49,13,11,216,18,155,358,102,99,56,464,122,37,644,138,549,710,54,180,337,205,117,496,67,172,869,123,720 }, +{ 2,17,5,29,27,3,6,401,45,58,51,26,23,19,53,52,14,34,46,453,151,133,366,13,61,236,50,218,114,1,73,99,308,487,603,108,21,25,181,670,287,421,297,80,115,396,48,74,56,137,171,412,764,445,202,38,281,62,457,42,65,629,516,480,475,341,113,549,64,573,600,386,57,403,894,250,106,730,54,436,651,491,86,145,12,334,208,155,832,128,328,614,361,262,165,283,84,32,719,323,745,200,90,141,37,36,711,657,631,67,760,754,583,739,635,569,7,594,488,315,161,10,285,59,402,758,243,430 }, +{ 22,170,31,301,127,1,98,44,28,36,239,105,55,299,512,293,86,395,116,685,242,841,9,95,125,338,599,900,2,0,5,654,23,320,169,109,13,456,870,49,64,185,763,10,51,7,237,12,141,144,164,479,143,965,312,35,137,923,21,268,115,14,933,492,128,168,393,284,506,67,286,762,276,83,37,244,6,114,202,160,180,928,24,352,634,194,367,201,197,159,308,165,269,253,558,844,401,538,48,65,208,272,935,391,584,50,420,341,365,131,203,913,318,16,498,3,489,327,96,4,457,374,317,892,386,32,434,638 }, +{ 14,21,50,48,5,2,1,32,270,46,38,290,76,72,45,155,54,17,263,181,408,207,425,281,29,430,221,67,36,96,292,89,449,52,428,37,476,513,241,83,103,119,0,171,7,541,720,528,3,12,10,24,227,148,22,58,179,61,536,502,214,243,655,6,413,90,9,350,23,218,106,51,16,86,69,129,65,186,28,133,115,114,99,431,552,400,760,794,464,64,474,128,433,123,328,460,18,405,137,487,306,84,108,477,245,710,35,236,205,4,13,787,27,238,308,587,309,770,141,540,19,56,790,240,95,223,488,202 }, +{ 17,119,106,378,240,383,136,84,62,80,306,790,56,504,742,3,440,207,209,128,255,483,123,45,5,667,61,32,57,64,179,27,129,14,205,548,297,4,245,2,214,311,141,90,11,76,833,655,184,151,29,361,59,469,152,249,26,38,162,19,58,215,328,257,73,495,161,34,54,229,269,202,250,266,292,21,12,402,514,555,216,113,194,887,130,1,445,503,507,183,6,25,318,237,186,72,52,814,710,618,99,10,86,211,148,452,263,243,65,137,37,40,41,23,36,33,155,497,13,403,53,95,313,227,494,180,77,738 }, +{ 13,1,2,15,23,5,115,0,51,10,4,3,6,341,7,11,365,217,180,317,9,33,197,77,165,40,22,12,14,102,64,141,117,153,196,453,457,8,202,901,17,21,269,18,128,28,125,569,31,386,59,318,32,16,134,349,352,291,372,237,36,719,403,752,475,873,961,730,509,391,177,137,24,401,95,57,44,37,93,498,120,308,139,494,110,98,326,111,247,86,304,30,482,49,143,48,55,629,210,260,758,523,19,351,65,450,72,116,46,76,342,29,275,203,50,170,105,164,89,82,734,242,27,38,54,144,899,90 }, +{ 772,335,662,96,367,744,897,1,303,686,264,521,652,340,116,520,141,31,919,201,966,260,888,203,44,64,905,321,144,225,269,98,691,658,349,284,410,698,692,363,120,88,848,717,863,187,551,914,909,418,576,202,646,443,850,639,523,69,404,336,958,293,128,730,131,615,274,382,296,166,960,948,258,228,224,219,751,486,160,125,82,411,191,765,244,223,475,453,352,326,100,318,676,596,67,351,899,703,403,389,435,947,589,498,102,33,954,291,265,156,922,854,402,93,759,664,447,372,212,137,478,329,724,562,530,286,217,942 }, +{ 1,28,5,0,36,24,65,83,50,14,67,22,12,96,2,48,218,114,281,54,18,21,9,133,55,103,46,181,37,58,160,38,16,7,99,10,223,69,238,32,430,433,502,45,35,51,766,49,108,86,23,124,361,155,487,765,532,283,75,137,270,115,17,838,163,109,480,95,13,61,6,543,154,754,513,70,29,72,202,540,822,657,323,920,398,89,68,64,141,966,3,221,208,285,128,290,956,547,488,269,236,175,168,429,194,474,800,646,171,39,412,775,52,308,531,866,149,880,389,4,180,403,318,842,834,402,217,185 }, +{ 138,174,348,42,25,6,145,81,544,280,525,74,85,26,648,204,355,287,396,91,233,66,636,104,122,746,416,29,64,65,90,45,0,235,194,681,87,22,222,651,95,624,573,32,214,289,750,415,343,445,192,52,112,86,17,370,19,5,135,881,7,151,2,337,113,605,243,63,389,256,49,59,10,4,673,680,77,18,297,61,312,76,614,97,72,249,283,11,524,70,353,33,27,28,216,114,874,173,311,57,43,21,14,597,36,1,141,102,58,24,217,12,436,665,80,172,715,792,148,123,619,56,133,20,491,75,784,117 }, +{ 24,16,35,68,0,18,158,28,71,159,49,7,55,154,109,14,22,60,105,124,344,65,118,424,9,239,95,1,320,2,149,577,286,170,92,169,108,347,12,21,327,374,175,185,67,10,272,5,101,51,48,23,302,455,39,6,671,301,46,13,69,310,20,518,64,150,36,346,50,32,137,202,709,677,191,126,98,125,375,168,538,289,164,38,37,128,638,30,703,747,890,273,127,634,31,419,140,143,439,86,403,114,252,83,962,654,221,762,623,338,115,29,212,103,701,570,308,107,512,189,54,97,167,230,479,345,312,913 }, +{ 854,699,230,352,93,689,144,251,160,137,855,202,617,203,217,36,669,332,450,120,473,351,831,201,213,752,326,800,206,141,258,748,82,418,345,30,180,816,957,318,840,190,443,228,44,35,863,968,10,1,219,871,704,317,64,22,679,83,466,539,498,224,55,96,898,31,116,406,851,384,86,244,295,28,873,98,817,531,187,822,864,373,494,131,559,372,530,901,574,365,69,127,839,735,128,268,67,533,442,868,860,922,88,269,927,859,9,367,613,253,564,930,567,261,260,728,39,237,109,284,276,164,730,489,166,926,125,776 }, +{ 15,13,5,1,2,23,3,0,317,51,115,4,10,11,7,6,217,33,9,77,17,14,341,165,102,117,180,365,134,40,197,153,64,22,12,32,196,21,8,141,391,110,752,372,291,498,352,125,569,16,36,901,202,59,260,28,237,482,349,18,269,457,961,120,318,93,57,509,37,29,128,177,49,31,19,401,48,453,342,38,719,873,45,55,629,111,24,44,143,468,386,50,54,403,86,139,27,308,304,95,210,546,730,475,46,137,98,247,35,72,90,99,82,76,437,494,864,30,326,758,96,52,275,116,402,277,164,56 }, +{ 104,173,20,319,43,66,426,355,712,77,97,0,202,7,198,74,580,204,174,500,32,5,59,2,102,337,90,325,226,234,4,52,22,450,904,155,222,376,861,21,750,33,192,414,194,147,324,342,889,58,544,636,18,291,416,112,784,81,334,64,707,95,331,422,639,715,36,400,14,141,560,792,65,29,177,49,37,315,427,28,57,10,120,24,1,40,48,107,673,11,494,318,230,61,524,128,196,16,12,470,632,232,138,115,329,455,113,142,186,153,819,294,17,525,526,70,117,87,25,247,587,105,269,583,588,158,171,348 }, +{ 23,13,51,5,15,1,2,115,0,141,12,7,4,21,6,165,32,3,269,9,10,457,202,180,197,14,77,11,37,453,22,318,352,120,33,719,217,341,401,403,16,961,17,40,308,18,31,28,8,48,64,475,569,730,260,365,59,128,247,317,137,177,90,93,237,102,99,629,523,44,386,117,36,450,110,153,30,752,899,38,349,72,134,98,509,498,49,326,901,125,24,391,196,421,57,82,291,76,95,19,203,494,89,45,817,304,468,221,139,210,758,351,546,65,373,372,96,54,482,734,144,116,86,39,29,216,402,288 }, +{ 15,1,13,0,2,5,4,23,3,317,115,51,7,6,341,9,8,365,217,22,10,33,77,31,457,197,44,901,18,12,28,180,11,120,165,202,961,102,719,569,40,308,21,730,20,260,351,523,141,36,401,64,482,82,55,49,450,453,403,269,93,318,16,30,498,468,342,14,372,352,110,61,817,125,137,386,117,70,899,25,898,291,509,196,494,475,24,629,854,39,153,349,98,32,134,221,391,416,234,758,59,37,237,95,86,19,91,48,27,177,247,326,903,17,734,873,89,128,421,105,922,57,111,143,638,300,304,90 }, +{ 15,1,3,2,0,4,10,5,9,13,82,12,8,11,16,7,31,23,351,898,365,93,44,854,22,64,21,457,217,180,6,141,317,730,110,318,18,752,719,352,341,51,961,28,269,33,260,77,922,120,202,291,98,55,372,197,349,901,105,165,30,450,14,817,494,523,403,899,128,125,453,95,36,115,116,475,386,326,49,401,111,94,811,642,758,479,474,391,373,203,201,187,153,144,137,38,37,24,102,59,421,282,206,48,569,342,275,216,210,864,846,801,795,692,661,597,559,442,253,244,230,196,177,170,143,127,123,89 }, +{ 2,5,14,1,29,50,38,46,45,17,52,58,114,133,171,218,21,181,48,186,36,6,155,3,19,65,487,12,32,54,27,61,480,323,70,22,51,86,361,137,96,0,208,115,285,227,283,151,23,412,10,281,28,108,37,236,112,328,7,334,163,400,25,4,223,26,67,75,657,194,18,103,128,24,13,514,745,99,401,202,308,532,59,803,389,16,760,11,243,72,64,80,106,9,502,83,832,113,453,56,552,421,403,503,402,95,735,341,956,69,124,782,366,90,141,409,77,57,160,822,433,89,209,244,40,76,177,484 }, +{ 68,101,0,9,212,124,154,65,149,35,16,100,118,24,252,71,562,589,189,336,114,167,265,191,39,329,398,88,67,429,1,264,478,69,166,484,55,30,777,18,399,520,759,13,818,722,175,419,230,48,283,664,796,115,23,28,375,724,346,140,133,103,410,21,705,806,64,51,701,604,83,246,7,345,158,389,60,36,382,302,14,2,108,50,755,5,695,694,237,702,547,917,92,639,411,936,732,213,267,238,32,404,190,10,364,321,289,49,180,553,447,247,650,72,218,46,593,925,468,458,96,905,596,217,95,546,223,439 }, +{ 14,2,1,22,46,67,7,65,28,24,0,69,38,168,50,36,83,289,5,12,16,29,35,55,86,114,103,133,109,49,18,158,95,108,6,194,584,124,185,610,52,169,10,159,189,105,51,23,21,484,283,9,505,389,236,128,239,267,420,164,13,547,143,54,32,64,71,115,149,75,37,140,251,68,48,208,160,253,708,309,137,96,154,244,312,170,782,202,320,412,577,175,308,424,25,141,336,429,218,344,60,892,835,874,347,398,401,531,230,17,278,388,92,135,797,638,732,237,3,323,39,19,286,99,747,4,66,403 }, +{ 23,13,51,15,0,10,115,1,4,2,9,961,457,77,11,5,453,12,33,3,403,14,40,102,197,7,22,165,59,475,64,6,37,401,21,569,719,18,308,99,32,17,177,730,16,141,523,8,341,31,629,217,180,117,386,202,153,196,120,57,28,49,111,125,95,139,899,494,128,421,72,65,210,317,36,342,391,90,19,93,89,44,86,269,365,24,291,237,110,76,318,873,509,482,54,48,300,498,247,134,450,82,275,260,352,98,27,137,326,38,304,758,148,50,79,817,45,670,372,30,179,29,203,734,152,116,349,216 }, +{ 15,1,0,2,5,9,7,23,13,51,901,8,6,12,3,4,180,10,719,341,120,14,31,115,22,141,898,197,82,260,93,21,28,44,457,37,217,125,202,16,153,351,64,110,401,18,11,33,36,961,569,30,77,49,352,450,98,269,139,317,117,116,32,40,453,326,308,128,523,318,365,203,137,730,24,629,854,403,102,39,237,165,55,291,99,475,95,196,48,86,498,134,752,899,373,391,817,244,38,105,242,421,922,59,144,386,57,143,35,349,54,509,482,372,65,253,221,177,304,494,247,638,17,170,72,127,164,114 }, +{ 100,252,265,88,724,101,382,410,48,676,213,909,321,9,593,0,812,329,553,21,352,1,30,230,166,39,419,520,23,51,264,217,221,478,689,435,190,664,13,604,466,677,694,125,752,777,36,98,699,639,83,759,96,35,158,68,128,562,141,223,344,274,310,69,455,115,5,180,404,317,656,364,203,293,831,438,175,308,443,401,333,31,144,570,154,854,105,137,212,346,49,857,530,418,840,855,201,55,921,28,539,421,557,806,821,127,124,67,251,10,634,165,936,22,610,795,16,286,957,167,541,32,962,905,682,686,241,44 }, +{ 58,171,2,46,5,50,14,29,186,1,52,45,334,151,400,38,155,61,103,96,67,227,502,281,223,54,48,17,83,181,552,69,70,309,75,163,24,549,21,311,27,366,80,536,243,113,218,787,106,36,112,433,765,430,209,133,12,6,236,487,19,780,675,394,766,238,587,545,32,37,767,807,834,7,108,114,328,287,315,65,262,820,16,496,583,26,18,454,513,0,3,600,220,25,474,86,307,73,28,35,255,869,537,631,22,72,89,491,409,357,64,270,828,267,189,845,160,221,10,592,137,119,99,659,128,516,541,785 }, +{ 23,202,120,141,51,13,318,269,21,128,260,165,137,197,180,326,1,450,5,77,33,82,15,48,93,64,110,351,32,125,403,203,102,523,854,386,352,457,922,115,7,2,12,494,373,817,615,196,342,153,221,217,16,6,210,144,402,453,36,4,391,14,37,730,9,96,475,291,98,0,99,901,3,421,551,177,18,40,401,237,752,349,31,898,86,719,341,24,704,285,117,11,308,393,116,35,61,160,8,30,65,90,59,44,275,10,241,50,39,216,509,372,67,72,961,247,22,899,28,569,293,83,139,801,473,76,95,46 }, +{ 341,197,901,10,13,569,23,638,15,479,8,873,961,180,165,143,12,115,0,1,951,509,116,37,642,365,499,498,242,253,5,36,898,4,752,2,352,141,268,206,51,55,401,391,7,22,3,417,506,492,82,9,93,11,137,456,338,244,457,64,317,120,110,629,351,546,431,33,21,386,31,86,260,217,164,6,758,965,28,762,474,918,661,326,551,153,125,14,719,94,421,854,203,801,373,269,44,16,730,202,615,237,844,791,811,523,450,40,18,128,864,282,117,111,148,824,940,102,959,17,139,559,170,32,958,867,968,38 }, +{ 23,1,21,51,202,13,15,141,120,5,180,2,197,165,7,269,352,48,12,318,260,326,137,33,386,403,9,450,0,32,6,4,115,128,14,16,523,457,102,37,110,82,93,18,217,3,64,221,752,421,203,453,237,125,77,153,351,494,308,475,196,401,719,31,44,391,373,817,24,730,8,342,30,36,11,40,341,901,96,50,99,615,98,116,117,39,10,22,498,317,17,59,35,160,144,86,28,20,854,961,291,244,177,899,72,402,509,90,922,350,349,95,29,247,285,19,127,661,365,372,49,569,758,65,576,241,898,61 }, +{ 2,29,58,50,262,52,53,27,6,151,14,1,171,5,287,34,324,17,74,46,26,113,309,396,45,223,61,334,96,73,635,445,583,38,19,75,67,103,80,357,70,331,181,573,112,785,236,675,163,281,549,145,366,54,108,315,760,218,220,491,453,297,12,138,62,250,133,436,51,409,200,487,600,128,502,37,64,106,114,651,48,83,394,24,25,820,433,59,766,307,23,155,36,614,311,65,66,137,57,4,765,186,69,21,99,202,56,13,3,587,165,767,7,631,238,86,780,115,283,161,322,545,221,42,32,739,400,47 }, +{ 13,51,23,141,202,115,217,77,317,4,269,33,5,11,318,352,0,102,180,2,64,10,341,7,21,9,137,3,40,128,32,6,22,291,752,15,197,12,365,1,165,31,125,28,498,177,16,403,494,237,18,308,44,59,372,98,349,24,93,48,244,386,49,90,30,342,95,901,475,39,120,196,14,117,457,116,453,17,247,391,153,8,143,482,36,304,203,110,509,326,450,260,37,134,144,210,468,523,86,221,401,569,873,546,719,139,253,35,160,127,285,105,373,421,961,864,576,82,367,437,351,55,579,19,216,275,402,164 }, +{ 1,24,67,50,69,103,35,18,16,14,28,0,5,83,9,54,223,2,96,58,181,12,46,68,48,65,108,133,71,281,149,22,7,163,21,114,36,75,38,55,155,502,238,37,189,99,70,218,45,10,430,433,236,60,765,251,171,61,175,540,23,820,32,51,418,270,29,487,513,52,124,118,336,17,64,49,920,154,13,141,115,545,72,267,221,537,745,290,86,488,309,128,335,39,227,89,328,160,95,834,361,6,101,486,514,543,112,137,474,394,186,202,388,109,150,140,552,807,412,283,307,345,87,780,366,398,77,516 }, +{ 13,23,51,141,202,115,77,269,64,217,102,128,318,33,32,291,177,180,137,10,352,4,21,16,197,0,11,22,9,7,165,90,40,494,125,2,210,247,14,18,153,49,59,31,6,95,317,28,196,349,24,304,5,341,403,342,98,237,117,120,372,44,3,275,35,86,48,1,93,752,36,15,241,12,475,144,30,19,17,216,110,365,260,116,326,134,82,105,143,308,203,20,39,402,386,221,901,127,72,498,437,244,453,76,401,65,38,96,285,316,160,55,351,25,288,482,164,57,139,457,678,490,201,523,509,391,83,817 }, +{ 115,365,180,317,873,498,752,482,341,569,217,901,13,197,352,546,468,1,864,457,509,579,165,23,143,21,15,2,185,36,7,148,12,134,332,22,351,9,261,51,16,5,10,0,346,93,30,141,868,734,372,253,345,116,474,94,77,876,76,28,896,679,384,203,160,39,37,6,98,14,391,109,530,187,843,177,86,629,33,637,11,437,18,4,902,574,434,144,120,44,31,837,72,613,295,169,349,505,228,190,102,95,49,48,706,406,405,96,83,961,617,597,254,237,926,903,717,531,420,258,164,110,860,268,661,477,464,449 }, +{ 184,257,229,205,432,497,152,619,452,17,381,57,266,524,5,45,90,106,313,471,245,32,128,129,59,4,214,2,339,119,769,77,369,12,123,21,14,99,157,3,202,38,710,1,618,216,64,217,292,188,162,76,11,40,249,141,62,51,33,19,372,102,179,37,209,23,27,6,111,318,29,61,403,86,460,349,207,54,269,402,10,48,139,115,36,136,79,137,7,255,72,80,177,519,291,453,529,401,288,58,0,153,475,377,247,306,25,56,26,94,210,22,84,494,50,790,89,775,474,361,328,148,241,588,285,317,678,277 }, +{ 13,23,1,2,0,51,10,5,115,4,15,3,365,7,9,33,11,180,77,6,217,341,22,102,317,40,197,14,12,64,141,165,18,8,17,31,202,28,125,16,269,21,117,901,453,196,177,59,153,36,128,475,318,569,32,24,352,291,403,134,93,401,98,44,752,237,391,372,49,509,457,961,873,308,498,386,95,342,349,116,137,37,139,494,19,30,210,247,143,304,86,629,48,203,111,55,57,719,523,110,482,546,120,38,65,54,326,421,216,730,50,99,899,758,402,260,105,275,39,72,450,96,144,35,25,242,29,437 }, +{ 626,70,687,771,379,767,846,518,878,49,937,591,82,761,31,786,481,407,845,195,590,351,98,44,163,557,13,120,125,48,87,883,371,623,360,817,450,260,178,522,21,5,854,523,116,326,105,291,142,4,296,929,884,259,127,0,132,922,615,77,713,293,217,197,165,22,146,64,931,608,465,457,349,196,32,941,455,279,621,315,202,201,126,110,40,16,11,10,391,666,467,446,373,354,346,144,58,33,581,763,512,916,535,795,768,658,558,447,344,150,92,51,28,24,9,265,212,93,586,562,180,156,147,134,117,1,783,663 }, +{ 264,909,410,897,772,1,686,521,478,914,98,335,96,284,691,639,382,44,744,321,724,100,765,438,223,662,88,144,475,367,31,265,125,116,921,9,682,656,166,363,127,225,21,201,842,0,447,905,393,48,443,421,5,82,329,252,120,805,411,51,821,13,919,69,834,948,934,664,33,23,435,551,274,77,217,131,268,7,93,854,418,520,340,110,30,213,141,453,165,101,39,791,260,922,403,238,698,898,351,102,593,433,64,203,83,303,286,293,197,32,960,812,697,523,466,285,180,692,404,658,35,873,254,163,352,553,190,615 }, +{ 13,23,2,51,1,5,115,0,10,77,15,217,7,6,180,33,3,317,40,4,141,102,9,197,11,341,14,64,165,22,365,17,117,196,352,202,12,269,153,16,291,237,453,128,457,498,752,32,18,134,177,59,21,125,386,318,901,28,8,372,31,349,391,403,95,475,36,137,569,49,308,961,401,509,482,143,98,19,24,44,730,86,120,719,139,546,402,342,93,304,110,29,210,421,873,45,38,629,57,260,326,247,111,275,30,523,55,90,450,46,116,253,50,37,244,65,494,105,99,468,758,25,170,48,96,216,35,27 }, +{ 141,269,77,115,13,318,64,202,177,23,137,217,102,291,5,51,180,48,21,352,0,32,7,16,33,18,11,2,197,128,4,15,10,752,24,244,14,494,317,165,96,9,3,349,247,237,93,35,28,12,6,49,44,1,421,60,20,403,36,341,95,22,475,372,326,308,275,196,144,90,40,39,117,31,678,954,901,304,284,268,221,203,110,98,89,68,46,365,153,134,76,67,576,453,432,402,381,342,179,125,118,86,72,71,69,59,50,17,498,160,164,143,120,111,82,961,873,851,401,377,335,288,285,241,223,210,121,116 }, +{ 23,13,51,15,0,10,453,2,115,1,40,961,33,11,14,4,9,457,22,401,77,102,7,5,569,475,197,12,64,3,21,165,59,719,629,6,196,18,177,386,37,32,17,111,153,57,117,139,31,16,28,730,308,99,38,141,8,403,36,128,670,391,217,210,72,90,523,79,482,341,202,237,45,474,180,125,41,509,46,494,304,275,48,54,95,94,899,29,277,134,120,76,758,65,44,247,498,24,291,148,89,468,86,49,437,82,56,30,402,143,365,349,317,93,50,757,269,734,342,98,352,450,678,62,188,19,152,328 }, +{ 1,22,36,5,12,0,105,28,2,49,31,21,95,9,86,55,13,23,128,7,141,98,170,44,115,239,37,48,127,83,160,4,180,164,51,202,10,269,3,96,6,208,159,137,67,244,320,197,312,50,318,352,64,285,301,125,341,32,165,109,116,217,14,402,708,39,365,16,654,35,30,242,317,169,168,99,253,15,678,11,69,751,569,54,531,752,8,901,947,338,735,77,24,238,143,323,498,158,65,401,17,237,293,946,18,717,740,597,93,512,638,286,403,395,892,144,347,308,299,424,457,185,418,713,194,221,757,824 }, +{ 100,252,101,88,265,0,382,759,329,410,724,9,213,321,553,676,419,593,166,39,21,30,909,694,562,520,68,13,812,264,23,435,677,230,35,352,478,48,190,154,689,212,1,217,570,51,466,639,124,221,83,806,604,175,699,826,703,125,98,308,55,671,664,346,32,158,610,706,96,962,274,31,317,289,344,69,438,49,28,831,917,115,656,455,936,404,165,116,208,777,310,5,854,857,16,201,128,36,333,752,194,67,24,71,144,795,391,197,589,141,818,364,921,131,44,86,203,251,748,105,65,22,180,557,149,702,350,855 }, +{ 539,88,840,190,30,321,530,957,435,748,669,778,144,96,100,466,418,863,410,203,228,213,382,274,795,406,613,131,36,822,1,83,326,856,219,352,335,494,251,230,679,31,224,960,44,831,855,141,859,944,217,9,367,160,201,137,625,128,166,93,258,662,120,800,521,403,116,98,187,28,576,752,816,269,202,557,39,931,21,265,686,616,443,921,10,180,731,438,689,523,473,125,871,317,23,77,197,457,827,55,264,35,617,692,254,33,719,260,86,966,817,32,829,206,276,127,242,475,456,284,51,615,252,0,854,238,492,551 }, +{ 7,97,173,92,232,298,314,107,387,729,356,43,359,126,246,140,362,441,501,426,392,230,560,20,14,707,885,104,16,66,330,779,172,683,60,35,493,861,22,357,5,0,95,49,81,279,38,568,18,24,21,74,192,71,414,830,423,259,324,2,121,526,125,633,508,32,672,52,319,10,150,48,28,147,29,46,715,347,6,64,199,380,189,61,858,69,660,33,204,135,649,713,36,595,1,98,37,879,31,146,132,75,819,263,784,443,408,607,448,54,12,663,138,68,58,117,102,70,13,267,65,55,712,91,153,77,399,165 }, +{ 14,2,7,58,46,1,38,16,75,5,70,52,24,155,29,45,220,35,163,69,50,171,61,186,87,227,18,270,92,48,666,54,32,290,140,21,278,592,513,307,67,112,262,6,66,60,37,0,135,243,97,767,64,425,23,89,71,72,409,400,128,845,113,17,334,36,22,172,20,10,315,115,76,141,9,28,51,12,663,103,86,74,77,207,13,65,177,90,263,83,267,202,95,137,43,269,151,294,189,27,25,431,19,49,428,430,68,40,223,536,852,106,738,324,226,655,474,780,96,502,496,217,114,108,318,230,102,148 }, +{ 447,411,664,363,647,478,936,621,354,271,98,781,759,223,777,1,360,18,691,668,48,932,167,156,132,121,212,195,591,446,724,520,118,586,146,21,23,463,31,293,9,264,393,16,51,914,13,125,807,101,49,834,284,44,60,163,682,24,848,221,658,541,5,105,35,71,68,55,96,39,116,562,407,32,905,604,22,252,772,0,33,765,522,69,10,963,67,191,93,100,638,676,166,340,364,120,281,698,608,286,821,404,50,115,382,144,77,265,697,64,28,102,909,126,410,30,628,82,662,95,367,7,815,127,744,335,40,296 }, +{ 14,2,1,46,67,65,38,7,69,36,29,24,83,28,50,0,22,103,5,6,52,124,108,484,168,12,114,86,75,133,208,18,16,194,236,283,289,389,21,610,10,109,756,160,25,267,35,23,51,95,32,309,55,505,135,584,71,13,185,66,547,128,189,37,732,54,96,48,169,646,17,49,412,9,420,158,87,19,323,115,278,244,26,64,218,164,70,143,253,74,238,140,220,398,172,45,137,58,149,262,797,141,92,308,4,3,503,302,202,60,68,388,154,159,118,650,531,90,516,366,150,285,105,532,335,251,671,429 }, +{ 386,421,51,791,801,697,958,730,453,23,165,551,221,670,615,326,401,391,576,403,13,102,457,899,805,523,842,770,48,24,450,475,0,203,125,949,541,719,566,77,193,115,308,197,21,18,398,153,33,393,317,117,43,202,137,743,120,300,7,124,467,5,91,108,9,71,342,291,118,42,32,16,97,134,85,279,61,260,173,289,281,517,494,14,859,817,196,60,809,758,692,36,882,25,194,388,20,373,302,140,65,547,429,273,851,717,458,412,122,104,95,509,233,81,492,318,6,362,832,110,69,92,49,149,35,508,298,608 }, +{ 319,104,945,422,81,20,715,43,0,879,693,681,306,32,784,74,173,207,61,7,22,52,397,671,414,904,887,636,240,95,6,115,835,192,5,707,91,426,18,2,76,29,819,330,316,263,56,85,138,84,28,232,577,365,64,97,113,519,312,725,526,17,344,370,204,49,202,214,329,24,38,560,403,750,66,494,10,804,500,241,25,105,289,718,159,587,523,77,124,102,86,861,348,498,450,292,51,288,90,117,140,65,899,510,168,347,158,16,448,45,817,237,107,324,33,9,194,180,120,318,92,790,40,280,21,356,320,874 }, +{ 2,29,70,1,52,262,75,112,26,145,46,163,309,58,103,67,14,50,6,220,96,74,38,394,223,331,357,19,83,238,45,69,5,324,171,287,27,409,151,25,366,307,24,583,218,537,133,108,632,42,267,396,451,53,36,433,87,114,65,17,113,635,186,764,550,545,226,600,138,675,388,66,37,21,61,54,48,181,122,516,12,606,294,236,418,73,35,189,18,80,86,486,487,651,135,155,150,7,32,16,137,644,243,739,281,222,445,334,278,380,573,149,849,106,227,582,603,160,335,34,64,283,696,648,765,624,297,72 }, +{ 771,929,786,941,590,626,687,259,465,178,70,878,132,5,13,21,534,146,49,518,279,48,107,35,379,493,31,147,125,767,105,108,87,195,221,481,126,121,44,163,22,623,23,127,61,581,407,362,0,150,165,937,427,58,846,345,371,142,883,467,167,761,120,33,10,640,98,75,591,360,391,1,663,271,77,30,199,4,845,763,522,60,185,102,291,7,349,159,156,137,128,246,450,51,308,296,293,239,32,11,158,423,558,557,342,269,116,39,260,112,17,386,232,502,441,281,196,153,95,37,12,783,953,612,535,401,197,15 }, +{ 5,186,45,2,61,29,50,227,52,400,58,17,46,48,171,209,14,155,106,243,80,311,38,1,430,281,496,54,502,536,255,181,454,513,103,96,592,760,3,334,207,21,666,67,119,552,587,869,663,62,151,541,27,32,583,309,721,84,56,37,659,218,133,366,221,136,83,540,6,834,72,36,223,270,667,290,738,12,328,34,807,89,287,263,474,19,487,262,236,238,148,76,75,115,69,425,240,378,99,26,394,24,766,433,483,128,114,306,70,549,65,324,600,675,828,357,764,53,780,108,545,73,137,161,7,833,90,765 }, +{ 0,95,453,64,32,389,494,817,342,207,312,365,577,690,194,403,848,237,202,316,180,671,5,482,757,61,490,805,102,289,498,450,65,835,475,523,113,49,401,241,887,115,120,263,329,21,17,18,576,22,33,137,344,13,318,402,77,3,1,899,11,48,347,4,210,141,118,125,90,51,933,942,260,23,645,874,306,308,117,134,597,615,27,247,12,196,24,122,19,6,2,751,697,743,317,468,291,25,16,288,177,730,629,28,86,84,349,770,421,214,611,592,491,483,476,425,56,36,670,300,275,153,217,621,350,39,71,60 }, +{ 23,13,51,202,115,15,5,1,12,4,2,77,403,165,0,21,10,318,453,32,457,33,128,197,9,7,6,141,3,401,475,59,177,269,14,11,308,17,37,494,22,719,217,99,64,341,180,117,18,90,40,102,120,16,317,730,961,569,48,365,28,421,386,352,629,8,38,523,450,237,31,291,402,125,210,137,247,216,19,391,196,57,221,36,509,326,260,72,93,24,349,275,153,203,49,95,498,342,304,899,45,134,82,44,76,30,468,372,98,89,27,817,25,139,86,110,758,65,54,29,111,546,351,116,241,46,20,482 }, +{ 119,292,6,45,306,76,2,26,240,209,17,61,710,106,5,80,29,19,27,25,214,84,113,32,64,618,129,255,128,1,179,90,123,4,59,65,151,14,58,667,40,460,311,56,504,22,245,86,249,207,0,790,141,205,42,95,77,483,3,833,10,112,115,202,7,23,18,887,137,194,11,52,57,36,62,136,269,476,177,162,99,33,491,21,257,73,769,454,12,70,38,28,402,13,24,145,16,48,72,318,184,196,614,445,122,102,53,114,49,117,153,210,548,285,46,54,464,134,180,51,396,50,297,183,315,243,237,814 }, +{ 15,1,23,13,51,180,0,2,120,5,7,9,450,523,33,12,115,260,197,102,165,6,202,77,4,21,141,14,457,351,403,341,16,901,8,326,82,308,365,3,269,18,36,137,93,318,48,128,386,59,31,37,719,217,453,401,730,817,22,110,44,475,64,317,352,10,32,28,421,494,40,30,116,98,11,899,342,373,752,196,24,615,221,177,86,291,49,854,203,39,99,509,961,96,144,569,898,55,922,35,391,210,117,244,629,125,349,498,873,17,50,247,372,89,160,758,237,670,300,95,127,143,153,65,285,402,90,801 }, +{ 6,138,222,280,74,85,66,226,337,87,42,204,235,25,145,294,64,135,95,174,609,29,112,415,256,26,65,525,792,461,353,32,580,22,52,122,746,172,630,544,289,70,348,416,237,287,19,278,49,312,86,605,75,10,108,2,0,194,192,5,620,1,7,21,90,97,736,220,63,45,632,500,114,214,61,355,36,151,233,396,180,58,69,24,125,141,72,28,14,648,27,519,673,889,872,624,241,444,288,18,343,197,48,426,33,207,133,665,263,232,113,73,347,91,17,568,448,316,103,208,165,128,104,53,380,12,81,498 }, +{ 39,9,333,101,0,158,252,310,254,272,455,68,49,627,327,344,159,286,419,364,18,16,709,329,24,688,105,265,109,30,100,553,118,374,35,557,166,124,190,154,677,131,65,578,912,71,793,22,60,518,1,538,51,167,21,23,98,28,212,48,95,438,604,625,13,404,7,31,96,55,127,520,36,731,137,890,857,125,320,616,694,656,806,716,44,577,5,10,170,224,67,83,829,168,242,219,228,128,191,14,239,827,88,86,301,347,12,424,160,747,810,37,115,64,846,346,371,613,69,910,221,33,149,2,562,93,865,676 }, +{ 21,32,14,5,38,76,72,2,48,54,270,45,1,17,50,46,221,290,181,89,36,430,3,741,428,218,408,155,37,540,281,449,0,10,12,148,179,90,241,263,207,29,292,133,425,22,477,328,99,51,697,421,114,67,770,487,115,476,23,4,528,227,65,28,6,119,243,488,214,720,552,541,86,474,24,52,350,64,61,7,9,137,11,186,103,536,401,129,745,413,106,58,83,96,920,308,236,13,57,513,123,18,842,464,543,361,245,160,56,59,205,128,655,431,514,358,828,285,171,108,460,55,62,400,27,16,453,40 }, +{ 137,269,141,202,120,450,260,318,494,922,351,291,82,77,5,326,678,352,704,854,128,523,1,817,21,15,64,349,180,342,32,13,475,90,177,947,7,372,61,51,49,23,165,95,403,11,207,115,312,102,4,48,197,237,402,719,203,50,96,308,30,6,2,373,205,86,70,69,67,36,210,241,105,898,859,851,615,208,194,217,901,285,25,453,216,182,163,87,65,46,45,8,0,457,31,307,139,112,58,37,12,3,117,968,158,127,20,730,386,273,199,178,168,147,126,108,60,28,18,16,10,9,954,795,597,275,247,134 }, +{ 16,68,71,24,149,35,191,118,167,212,18,124,101,246,108,399,189,154,140,92,267,9,60,375,65,458,695,302,133,67,398,589,7,0,69,230,114,562,702,1,705,103,55,915,755,283,21,388,602,336,412,48,14,175,273,650,50,345,823,674,411,46,121,146,28,363,236,447,39,10,64,672,22,664,478,796,264,309,330,271,100,520,647,37,95,218,199,12,906,23,565,36,83,32,252,777,88,166,628,126,5,13,125,49,75,2,366,51,96,86,732,486,346,54,815,237,733,429,98,891,759,516,633,818,115,443,723,238 }, +{ 28,109,0,9,67,22,1,55,65,114,103,158,39,49,83,194,168,69,35,420,185,289,36,50,208,24,68,133,2,124,505,251,218,175,86,46,7,389,323,154,95,169,159,346,12,547,160,14,756,101,646,16,570,105,30,5,799,189,533,38,531,96,503,238,596,252,128,64,535,23,54,18,21,344,51,782,272,336,610,419,283,532,345,333,480,13,100,10,37,137,327,115,789,584,149,286,230,361,48,75,285,181,202,29,254,374,164,429,927,141,71,896,143,671,930,577,32,237,140,810,244,484,439,31,131,601,402,310 }, +{ 325,147,427,198,178,142,798,202,259,5,376,20,534,43,465,450,904,318,234,470,858,77,725,455,120,581,329,315,70,97,61,929,105,878,786,113,362,260,58,557,481,403,660,14,639,21,173,0,170,49,159,494,319,269,48,23,344,523,128,107,301,595,1,845,518,416,33,884,817,324,320,13,326,199,22,475,402,158,37,270,132,51,40,38,35,32,7,95,590,121,4,422,239,141,104,66,146,347,112,615,263,230,126,75,28,307,76,207,704,414,360,265,195,9,922,453,356,298,19,17,137,72,342,290,102,87,50,395 }, +{ 28,0,65,109,9,35,55,175,124,67,289,24,39,158,68,114,14,336,570,154,420,1,22,7,185,168,69,133,194,49,16,429,149,101,46,505,83,189,2,103,169,346,50,252,484,36,547,389,610,283,18,756,95,419,159,535,345,251,86,71,105,12,108,398,100,230,30,140,439,333,533,344,584,703,21,208,272,286,671,38,5,327,267,10,64,601,23,254,51,96,118,810,13,48,164,782,265,128,364,236,29,143,160,837,329,374,677,54,577,218,310,637,399,60,37,962,797,92,166,323,793,705,32,238,732,75,6,596 }, +{ 141,180,115,269,13,23,4,1,352,5,202,318,51,317,2,217,21,752,365,77,3,7,165,341,197,32,0,137,11,308,10,6,901,33,15,9,31,22,177,102,403,64,401,12,30,44,498,237,291,48,143,244,93,349,569,40,494,28,8,39,253,125,372,90,221,98,453,304,386,482,873,509,203,120,110,116,18,59,49,457,144,128,95,247,391,864,326,117,16,421,37,153,14,196,475,36,629,134,105,210,260,961,373,160,164,55,719,546,437,216,734,35,468,350,201,17,139,96,89,579,473,72,758,717,111,24,743,275 }, +{ 15,0,1,2,9,23,13,5,7,51,12,6,4,8,901,33,3,180,14,197,10,341,115,77,102,93,120,141,260,22,21,82,457,899,31,64,453,28,165,16,450,18,523,11,351,475,202,36,110,37,203,401,125,30,352,898,44,403,961,730,719,116,128,569,421,365,196,49,40,98,32,217,137,373,269,39,308,237,144,55,854,153,177,318,317,86,326,24,17,117,95,629,48,817,752,59,300,670,498,99,391,494,386,291,134,38,105,90,642,342,922,873,242,143,244,253,393,473,221,50,247,372,57,349,139,65,111,661 }, +{ 6,74,138,66,75,85,25,324,42,380,278,135,26,500,87,226,1,220,97,29,70,222,889,841,52,350,19,606,280,235,294,394,112,571,69,853,21,38,145,335,903,267,582,65,550,309,14,172,792,509,32,2,197,64,749,262,237,174,241,357,122,95,461,486,808,67,337,256,537,96,103,115,774,546,204,63,125,27,391,22,558,462,83,451,7,238,630,5,308,802,24,165,108,734,46,163,140,950,648,641,92,45,13,298,189,416,583,525,150,72,923,86,600,48,114,53,331,221,388,12,620,180,468,426,90,645,746,348 }, +{ 51,23,13,453,12,115,403,4,457,401,165,475,15,0,1,10,11,37,59,5,99,40,3,308,64,197,32,2,33,202,17,9,719,77,629,730,7,14,22,6,961,21,569,523,494,421,386,18,120,141,57,125,177,318,269,102,237,128,90,38,899,341,45,450,111,76,16,180,217,19,36,31,134,117,247,49,670,139,72,28,210,95,291,196,402,153,41,25,24,89,509,216,260,8,93,86,54,221,82,137,65,468,758,26,56,44,27,317,391,352,817,365,304,62,349,123,498,48,34,326,275,152,775,342,114,372,300,757 }, +{ 788,180,319,21,5,83,32,498,314,547,526,17,693,61,817,48,11,4,27,510,33,12,848,77,288,104,24,160,0,814,120,64,3,804,153,134,117,56,519,342,196,102,207,725,326,690,523,450,69,40,403,95,899,306,60,958,90,961,942,801,500,232,174,155,84,43,38,115,945,457,386,595,475,615,247,887,715,671,494,482,365,192,13,312,202,165,10,9,81,51,566,65,71,119,113,861,835,802,770,757,756,746,743,729,692,683,629,587,583,551,550,525,449,426,422,418,414,324,291,260,221,217,214,186,170,125,123,105 }, +{ 15,1,2,13,23,4,5,3,0,11,7,6,341,51,10,9,12,33,77,115,102,40,217,14,197,180,165,141,365,901,569,317,202,64,22,21,8,16,59,32,403,31,17,269,177,318,475,18,196,386,453,352,153,93,401,120,125,117,28,291,457,494,210,110,37,961,629,326,128,391,237,260,139,49,44,349,98,372,116,719,342,36,523,95,57,86,111,137,19,24,203,450,308,752,30,275,38,730,134,90,509,304,373,247,300,144,48,498,27,45,20,758,482,65,143,72,105,55,99,35,670,76,873,402,615,82,29,817 }, +{ 101,520,18,167,9,118,212,604,364,16,60,694,252,0,264,917,24,68,146,55,363,562,35,191,121,166,265,806,329,71,676,100,706,647,411,271,39,907,628,621,925,21,419,848,404,28,682,942,48,1,815,154,777,446,109,132,124,5,821,463,49,857,158,13,199,905,967,23,932,126,88,108,22,346,96,382,354,759,51,575,125,105,98,92,32,522,65,286,333,31,447,812,639,7,553,664,566,727,159,593,30,10,149,150,865,156,375,14,897,936,407,95,638,274,478,175,439,272,67,221,634,302,50,2,12,107,144,44 }, +{ 13,23,51,115,33,217,77,141,64,0,4,102,202,9,2,317,7,269,180,21,291,352,32,16,10,128,5,11,318,6,177,40,341,3,18,22,165,197,137,15,14,153,247,237,125,28,24,12,59,196,365,31,349,117,90,752,49,403,372,98,221,93,308,17,95,44,86,342,48,494,1,304,210,498,30,36,120,475,453,134,401,241,244,386,143,275,19,391,901,72,110,35,39,203,144,326,116,260,164,20,437,457,37,402,509,421,8,482,55,523,105,82,96,316,65,350,450,864,139,216,25,76,285,29,27,579,546,127 }, +{ 66,135,172,74,97,204,278,6,138,324,7,174,87,192,85,448,140,353,29,232,280,620,500,52,802,92,25,226,808,38,568,380,889,42,298,69,426,580,792,314,571,330,2,872,348,95,26,572,622,43,563,32,526,222,893,22,14,65,5,21,81,64,673,24,75,267,950,1,355,885,220,70,357,726,145,104,86,63,888,91,387,189,16,46,289,294,126,71,501,20,107,233,60,19,48,462,335,67,173,28,45,194,49,241,550,235,230,37,90,0,312,83,18,415,61,58,36,262,12,35,112,633,10,72,150,712,246,343 }, +{ 97,24,2,69,66,423,298,6,29,7,267,172,74,52,14,189,67,38,25,607,150,149,83,71,1,36,18,135,733,467,81,0,140,501,426,517,21,33,398,278,160,118,124,809,42,154,26,19,462,85,273,92,20,46,429,302,117,60,336,568,508,204,28,192,715,232,770,705,165,65,16,153,596,173,102,279,50,91,87,175,43,23,448,45,12,861,386,37,13,63,421,104,48,51,324,388,314,197,134,711,138,32,531,526,330,681,712,443,22,451,75,608,185,4,949,697,221,882,636,236,370,196,54,420,5,309,885,458 }, +{ 158,9,0,68,39,333,109,344,49,101,24,16,35,159,124,154,254,272,310,793,252,327,419,65,627,286,71,22,364,455,18,374,105,577,747,28,30,168,912,118,677,55,95,185,709,100,688,149,60,175,671,131,190,346,166,265,518,578,538,329,169,703,424,1,212,21,7,694,962,289,706,439,347,191,108,51,810,48,10,634,23,67,14,616,239,553,170,302,557,98,320,125,31,2,570,857,625,13,5,36,12,128,375,86,137,127,114,37,716,88,44,913,420,92,83,69,96,50,64,224,638,562,242,301,167,890,731,160 }, +{ 15,10,33,77,197,4,180,341,365,115,13,102,23,317,141,117,217,5,1,901,11,40,253,165,134,153,21,752,244,143,32,36,352,51,638,137,2,196,12,55,3,873,569,951,372,82,37,120,291,177,7,59,898,349,6,64,0,509,31,342,269,22,351,498,260,308,160,93,14,139,854,44,202,28,86,48,457,17,482,90,401,450,111,719,72,203,116,125,110,523,128,961,164,57,304,922,9,386,318,38,730,326,49,762,535,275,391,277,629,210,242,373,99,98,148,96,734,817,95,89,237,717,247,30,479,45,758,54 }, +{ 100,382,166,478,265,264,404,274,593,438,88,39,921,724,98,639,682,1,363,411,447,435,905,812,821,9,96,30,897,31,656,23,223,252,254,310,664,410,116,190,51,144,329,691,21,520,393,44,127,101,0,909,48,125,13,625,333,284,557,521,418,286,367,960,772,5,93,77,321,118,105,83,948,616,272,530,33,293,203,795,156,765,676,68,466,102,67,551,131,604,120,242,49,35,16,354,848,421,18,32,553,730,69,158,335,165,759,791,110,731,914,163,613,115,10,386,217,24,36,778,834,65,395,4,578,238,842,364 }, +{ 19,283,436,297,53,26,813,122,42,432,503,27,605,25,736,73,390,235,389,128,630,123,250,529,63,256,80,65,108,445,690,573,269,789,106,444,216,113,381,412,6,14,133,680,200,78,318,650,177,678,17,194,57,114,619,368,4,349,84,472,59,112,85,275,291,56,18,378,714,40,32,396,183,102,11,152,33,416,136,495,341,236,46,403,130,161,90,243,561,255,184,24,129,597,0,742,86,45,469,76,145,862,401,285,249,141,947,665,13,179,51,524,287,50,527,803,233,117,684,12,304,148,205,29,719,23,139,61 }, +{ 202,128,494,141,33,269,137,36,51,0,13,102,180,6,2,1,196,65,4,86,402,95,29,475,403,117,59,40,457,77,450,15,210,177,134,49,22,21,18,291,153,12,3,260,114,90,817,386,318,120,25,16,32,23,11,961,922,576,237,217,194,165,115,14,7,453,342,216,873,373,197,164,64,719,874,854,789,757,751,704,597,558,391,372,326,304,301,300,285,275,208,203,159,133,110,105,99,93,81,74,70,66,52,48,47,42,41,34,28,26,24,10,5,139,76,958,899,801,730,615,551,160,963,901,752,657,584,421 }, +{ 18,60,16,68,167,191,101,118,212,121,35,126,199,146,647,520,55,9,628,806,621,71,24,107,575,346,363,132,446,463,364,0,566,92,562,28,271,411,252,1,727,21,815,48,407,150,604,598,694,279,932,154,608,49,589,493,439,22,5,7,124,109,706,419,10,108,13,354,14,23,640,467,375,96,273,158,848,302,955,535,175,195,39,818,534,105,125,100,221,522,676,264,777,12,51,50,159,329,32,265,65,259,362,917,98,20,826,783,149,37,31,581,95,169,43,67,97,46,223,147,907,166,590,64,246,36,2,967 }, +{ 352,230,531,160,36,748,854,217,93,669,728,137,251,689,871,699,373,228,574,258,202,752,351,717,559,120,144,268,318,260,219,203,269,201,831,533,839,567,539,187,840,213,816,489,679,82,1,317,851,332,44,141,55,295,855,206,30,617,863,418,83,345,926,96,180,443,800,473,116,10,143,326,110,35,406,564,131,224,22,860,276,64,450,28,98,9,21,190,957,466,822,968,244,164,31,434,856,169,384,661,69,898,0,365,730,824,284,125,442,253,128,372,873,498,88,530,922,776,261,165,494,48,237,86,68,940,39,927 }, +{ 15,13,51,23,0,77,8,4,5,1,202,33,10,11,165,180,82,22,12,110,115,9,102,197,40,59,342,403,141,120,351,326,7,453,373,31,386,18,93,457,260,49,2,401,318,475,128,28,901,64,269,291,44,494,36,854,719,21,177,14,30,523,961,16,898,57,3,349,421,125,922,99,341,32,730,98,137,203,56,217,317,450,117,615,76,391,498,275,24,352,569,365,95,6,105,308,144,37,196,899,86,65,153,39,535,90,210,629,116,704,247,83,208,237,48,661,752,638,509,17,758,402,133,551,143,139,817,244 }, +{ 101,9,100,0,88,217,252,68,39,35,352,562,175,30,115,230,752,213,265,419,13,317,197,166,180,154,237,83,212,158,124,64,321,777,382,208,1,336,410,65,194,759,329,694,36,141,826,289,23,365,724,341,429,128,509,69,165,570,345,676,909,96,346,756,553,21,593,372,854,702,498,55,799,264,399,67,86,190,28,468,589,768,51,364,308,144,677,755,689,323,125,722,482,610,547,391,333,137,789,812,189,546,49,32,952,310,247,274,131,72,16,344,98,10,671,351,435,386,251,478,285,244,901,167,160,484,706,164 }, +{ 32,64,95,147,288,21,90,5,519,470,49,61,0,356,22,48,115,362,97,247,312,141,835,387,560,57,56,4,182,128,20,237,178,59,18,11,31,13,107,214,202,28,298,217,44,76,316,7,65,43,259,180,819,874,51,40,23,216,173,330,207,197,150,25,2,86,729,324,120,376,279,140,612,392,595,104,72,66,29,6,352,37,12,210,678,414,172,683,779,490,482,317,291,165,134,102,81,77,58,45,33,26,195,864,795,304,858,87,54,660,427,707,878,465,357,501,232,753,205,177,170,126,117,91,19,597,230,212 }, +{ 24,16,14,35,7,18,69,1,50,46,75,5,2,58,163,67,54,70,0,71,28,502,60,48,38,12,9,21,189,103,155,140,267,223,281,108,37,171,430,92,394,65,68,22,230,513,83,10,23,181,32,55,309,87,45,36,236,51,335,29,220,149,307,99,61,133,112,141,64,13,780,52,6,115,128,227,270,72,89,852,537,328,17,150,474,49,807,114,767,221,552,186,96,290,95,20,246,366,77,443,400,137,202,86,269,486,666,388,237,540,25,278,477,217,4,536,218,765,177,19,125,180,165,126,113,318,251,39 }, +{ 195,18,354,265,252,411,39,9,363,167,101,682,271,132,16,121,60,1,333,203,21,593,35,146,520,156,364,447,639,360,212,5,24,327,23,627,668,310,404,13,48,664,286,100,538,0,777,676,77,98,821,7,68,33,692,446,865,93,158,576,159,116,115,647,966,883,551,407,272,107,51,687,120,591,463,326,137,71,102,857,31,781,421,37,586,30,44,329,379,50,125,374,166,105,92,96,621,709,142,65,36,127,562,475,109,403,14,126,118,70,346,223,479,199,805,450,190,43,20,191,936,905,656,128,254,12,2,202 }, +{ 4,115,13,5,23,141,51,180,2,202,1,217,11,269,318,3,77,341,7,6,317,33,365,0,21,12,352,197,165,9,15,32,102,10,137,40,177,308,752,64,291,31,22,901,349,372,28,8,59,403,90,494,30,237,498,44,120,37,401,125,48,39,14,93,17,244,49,457,569,509,128,153,16,386,98,143,304,36,873,475,196,391,117,482,342,253,210,203,110,453,116,247,373,221,326,24,216,18,144,72,421,260,95,55,134,450,961,576,86,139,719,105,468,35,164,82,57,127,160,89,864,678,523,351,88,275,67,546 }, +{ 7,71,24,14,16,35,140,92,189,149,150,108,60,68,18,230,97,69,66,314,273,267,458,388,336,38,2,65,232,251,175,399,118,46,398,172,67,28,462,246,36,55,375,0,705,1,21,124,154,22,298,302,135,95,451,733,877,126,594,423,345,64,467,101,9,74,517,29,48,86,602,236,6,20,191,83,596,52,330,380,32,357,43,5,10,674,50,12,133,49,429,723,103,711,212,346,104,192,114,107,915,278,167,387,37,443,324,309,121,823,54,125,96,633,566,221,796,484,75,109,547,603,13,23,289,809,575,607 }, +{ 1,22,31,5,36,12,105,44,2,86,21,170,98,180,127,0,55,141,64,23,7,352,28,13,9,128,116,125,164,239,4,301,49,115,6,95,197,37,3,160,242,51,341,752,202,83,498,269,10,96,165,144,48,253,244,285,901,217,320,365,208,569,137,8,338,299,318,395,293,109,654,93,512,143,32,50,237,317,159,402,864,11,15,708,776,873,169,201,14,35,99,67,638,39,954,30,844,531,479,678,77,69,456,740,533,16,403,308,268,120,751,951,33,961,947,457,286,238,401,276,482,203,601,17,506,312,509,18 }, +{ 97,66,192,7,560,52,20,2,135,74,43,173,324,104,580,414,226,107,147,750,204,29,174,500,376,568,825,707,222,0,356,470,77,32,331,194,90,38,729,16,819,298,92,172,355,22,60,64,888,595,357,232,24,18,259,712,202,353,426,81,5,362,262,874,427,526,49,330,14,178,95,885,387,21,10,138,37,861,142,6,33,102,86,28,889,4,359,65,312,36,858,126,59,1,112,792,673,337,58,151,177,91,35,113,319,291,9,115,145,13,636,501,342,448,278,140,12,87,61,71,583,294,751,465,237,246,230,325 }, +{ 101,0,68,9,252,154,124,364,166,35,39,100,24,65,419,16,149,694,71,265,329,28,439,158,346,88,30,289,212,404,55,671,703,562,570,49,274,175,429,21,706,589,18,553,118,375,1,722,67,302,22,109,962,190,677,382,333,108,60,23,967,191,168,95,69,48,344,14,51,336,114,254,676,610,484,13,398,10,83,92,7,520,310,857,818,125,264,593,189,64,133,185,826,438,12,32,159,865,221,103,535,50,194,695,286,105,36,604,96,169,420,230,283,701,167,241,131,140,2,350,656,115,272,5,239,637,812,98 }, +{ 39,100,127,30,737,836,9,254,856,31,166,190,98,395,0,385,88,931,625,131,373,264,863,93,827,28,228,120,44,125,1,219,116,137,110,382,371,55,13,101,731,299,260,144,908,442,21,77,265,23,456,64,203,51,599,242,33,187,49,326,310,22,224,578,202,5,450,36,272,18,276,16,141,795,82,105,916,284,165,274,318,48,95,512,944,35,716,478,24,935,258,201,616,851,32,557,102,96,252,109,68,269,128,351,435,492,83,724,86,67,7,10,704,293,772,59,921,329,846,156,924,286,197,438,717,4,291,244 }, +{ 17,5,45,21,14,2,48,3,32,155,106,227,186,181,38,29,61,209,62,46,328,133,400,80,243,54,56,52,1,51,832,23,19,50,99,255,114,430,6,84,543,536,12,514,401,236,27,37,137,361,552,453,119,136,34,311,58,218,171,221,76,72,4,754,115,281,108,13,285,496,65,454,629,513,41,207,308,540,421,26,290,805,480,541,488,920,657,202,475,11,487,787,128,86,89,569,57,739,151,838,502,36,270,59,403,208,90,10,7,721,474,22,263,745,576,0,457,659,592,663,587,25,161,129,165,148,323,894 }, +{ 131,613,224,856,228,406,716,274,827,30,100,219,190,39,166,863,88,931,924,829,944,31,382,44,625,9,127,1,442,385,187,98,116,731,93,578,258,254,530,816,137,871,160,616,960,96,36,310,265,0,371,203,144,836,410,438,264,435,795,125,242,21,202,120,201,531,276,908,51,921,128,23,101,49,839,846,28,737,48,326,5,83,778,13,110,64,284,105,35,492,272,10,557,33,938,115,299,77,252,158,456,367,268,669,217,260,165,213,32,177,22,800,352,473,86,102,69,197,574,321,318,567,141,935,593,403,55,180 }, +{ 352,217,752,141,954,864,64,372,437,269,180,115,498,177,349,776,579,291,317,247,77,947,873,717,304,318,678,237,179,23,197,128,33,0,35,165,13,275,68,210,457,341,459,1,67,410,32,143,365,65,244,202,102,9,160,140,137,225,569,12,36,18,125,75,51,134,93,751,15,546,509,86,708,482,928,713,330,312,201,164,144,100,10,7,521,268,246,44,24,21,16,558,55,851,682,342,260,245,120,117,101,98,39,28,726,363,116,110,30,189,72,478,83,744,953,841,824,672,563,358,166,114,92,31,5,386,196,69 }, +{ 141,217,317,180,352,365,115,341,5,372,23,13,752,498,253,244,15,1,237,2,51,197,269,0,7,165,21,202,64,349,77,6,137,143,4,318,3,9,901,546,33,177,308,11,32,10,160,12,48,49,482,30,22,125,468,98,373,247,120,102,93,31,864,110,509,260,531,391,28,44,494,437,36,450,569,90,40,490,453,326,221,219,203,16,128,96,82,386,164,72,873,291,251,224,187,117,403,401,210,39,131,116,24,18,473,144,86,37,629,148,105,8,533,951,758,475,421,228,139,170,134,95,65,35,734,704,617,275 }, +{ 5,2,45,17,14,29,48,1,21,58,181,38,50,61,3,133,46,155,171,186,114,52,32,27,281,19,6,218,36,236,227,54,361,151,51,12,754,209,26,400,80,137,514,243,65,106,552,487,13,480,334,23,285,86,412,328,108,4,283,502,311,37,56,99,323,22,745,657,208,202,25,62,72,128,115,838,760,59,430,7,34,536,64,70,454,11,76,10,28,255,119,803,194,787,67,421,0,576,57,859,496,103,84,96,18,532,75,165,89,453,389,223,24,920,401,163,73,113,308,828,402,77,739,112,287,148,457,513 }, +{ 6,25,2,119,790,29,113,76,26,45,483,655,887,42,292,32,19,4,59,128,151,207,1,306,84,17,814,106,240,90,112,209,61,145,14,177,77,64,65,52,833,27,122,179,491,210,70,0,72,311,115,40,255,58,614,74,85,7,214,202,710,22,5,57,469,21,141,11,123,80,476,95,36,396,33,10,24,269,38,137,102,66,425,23,416,49,194,86,275,504,13,216,56,402,318,46,358,18,138,28,460,624,9,148,50,174,129,618,51,205,87,75,16,291,186,12,217,249,222,287,454,20,54,99,243,315,117,114 }, +{ 23,13,51,115,2,4,5,0,141,180,7,11,217,3,33,77,6,1,202,9,317,10,102,197,21,269,40,352,341,32,12,165,16,22,64,318,365,28,128,15,14,18,752,137,59,24,291,308,177,125,31,17,403,498,237,494,372,98,49,117,901,93,196,30,44,153,457,349,8,37,120,134,90,116,247,342,36,482,401,95,35,210,143,221,86,453,260,203,144,475,326,48,244,110,391,386,55,304,873,39,19,569,961,421,105,509,719,546,450,253,864,216,20,402,29,523,72,57,50,139,25,730,373,468,275,65,82,629 }, +{ 23,13,51,202,21,141,115,5,165,318,32,12,403,197,453,1,269,120,15,128,2,180,475,125,308,457,401,7,48,6,386,64,0,730,4,9,719,137,3,10,523,18,33,14,37,421,16,99,494,11,260,450,341,221,17,196,93,77,40,217,22,117,90,95,237,899,31,391,247,352,326,28,24,102,19,153,30,317,98,961,817,134,82,44,25,59,8,241,110,49,365,20,26,291,27,61,177,36,351,498,509,569,402,39,203,758,29,72,57,45,629,350,54,116,316,96,752,50,38,349,67,901,65,46,342,304,285,58 }, +{ 39,9,100,30,31,127,44,88,0,276,98,131,1,385,254,442,166,49,908,116,187,190,935,201,219,284,827,299,28,224,144,829,96,228,36,274,137,141,101,21,265,716,382,48,51,258,202,23,352,22,125,836,93,856,613,128,839,158,371,264,578,395,13,55,16,180,662,244,269,252,217,567,492,110,310,35,64,77,272,83,268,410,931,203,120,326,752,260,68,318,18,489,293,574,625,160,24,33,115,86,159,924,242,373,165,438,5,450,69,102,616,213,197,918,863,321,295,717,291,82,731,177,456,317,406,7,599,737 }, +{ 22,109,49,28,159,185,95,9,105,131,272,327,254,1,67,286,36,39,35,168,86,83,55,169,505,158,224,374,420,127,584,208,98,219,312,578,31,347,535,601,0,69,708,424,44,114,103,30,160,627,346,64,141,194,187,518,175,96,239,345,616,892,10,128,164,143,896,116,137,50,12,5,2,237,228,913,533,13,23,7,21,371,320,597,688,538,751,912,352,323,251,716,165,115,634,202,258,197,498,637,37,531,180,797,874,51,253,768,48,101,890,16,189,201,613,24,752,385,14,170,285,365,406,789,244,218,46,133 }, +{ 5,1,21,2,48,14,12,32,22,36,0,17,54,10,38,3,37,86,50,45,65,28,51,72,281,23,4,6,58,114,89,46,137,13,270,99,430,11,7,208,76,202,181,61,115,403,155,9,133,18,540,64,361,221,29,323,480,285,49,128,24,95,218,401,657,421,290,745,19,576,194,55,308,754,59,453,513,920,148,880,96,341,502,52,16,475,77,67,842,40,283,859,318,197,402,494,171,141,474,244,543,757,165,775,90,541,27,33,180,57,83,227,164,217,428,328,269,108,425,569,514,207,31,143,223,263,102,503 }, +{ 141,352,269,372,351,217,854,82,752,922,318,180,954,260,317,15,349,1,202,64,120,898,717,77,67,35,864,291,69,365,137,851,437,36,22,5,247,86,373,4,457,450,244,165,189,163,140,68,13,237,901,115,128,304,23,21,341,98,125,177,51,93,32,28,961,160,96,494,110,95,10,0,719,253,661,523,326,767,83,730,275,44,386,418,40,12,817,210,19,17,102,59,45,18,7,579,498,482,615,403,144,11,6,3,203,76,822,475,49,48,31,33,293,284,268,228,187,947,899,587,583,485,474,367,342,300,245,100 }, +{ 144,613,203,406,669,418,326,137,228,96,679,494,160,816,1,817,822,36,317,859,840,83,856,876,855,217,251,219,863,831,944,202,576,365,539,93,800,5,345,530,77,128,44,957,748,141,13,839,30,23,21,778,143,341,115,473,617,332,201,64,120,190,492,456,829,531,349,367,716,258,98,48,578,116,180,924,403,187,31,515,966,692,574,442,131,86,931,719,523,450,9,224,351,291,860,752,82,28,10,244,51,371,22,276,39,102,125,730,261,50,851,269,827,335,318,871,704,916,268,110,898,69,67,498,206,177,615,805 }, +{ 15,13,23,51,202,1,21,33,5,269,180,217,2,141,308,12,120,0,352,165,7,221,115,117,48,32,6,318,197,4,153,9,260,82,196,453,134,457,3,40,386,523,730,110,14,719,77,401,31,403,450,137,326,37,102,341,16,351,8,128,752,11,475,93,18,498,317,44,365,391,64,30,98,237,72,10,49,421,22,99,901,494,509,28,24,899,17,125,39,817,569,854,116,203,59,291,177,89,961,95,36,244,629,758,105,247,90,372,241,864,349,546,670,898,96,35,144,86,65,350,373,50,139,304,61,160,922,615 }, +{ 23,115,13,51,77,0,1,4,365,2,141,341,5,33,202,217,11,10,317,9,180,102,3,7,6,15,269,22,318,197,165,64,352,12,40,494,403,21,28,31,128,308,125,32,453,59,177,18,291,16,401,475,901,14,24,752,237,93,342,137,349,457,569,44,8,17,372,30,153,98,120,95,49,210,36,498,196,117,110,509,482,421,116,247,386,873,304,37,391,39,629,244,48,139,90,203,143,134,55,86,523,450,326,468,260,275,57,961,144,719,65,35,402,216,730,221,19,253,373,46,50,734,437,678,576,96,758,551 }, +{ 531,373,728,160,943,559,717,260,93,269,332,206,533,244,352,384,261,535,964,564,120,110,10,253,295,137,365,318,141,55,143,959,180,617,36,851,911,843,197,661,203,873,282,1,752,940,341,699,968,901,82,417,326,21,144,450,22,351,317,434,64,642,498,855,824,574,202,926,473,860,800,896,164,23,28,898,8,51,13,258,15,116,35,816,567,127,187,237,776,9,951,219,601,268,115,811,165,217,201,864,131,98,406,854,77,523,251,902,922,125,48,345,44,31,16,704,96,499,86,83,489,871,367,299,177,72,817,24 }, +{ 1,31,36,170,55,86,22,44,127,5,301,64,98,164,2,116,740,105,299,12,10,242,237,125,169,338,9,0,21,143,7,512,23,28,841,128,141,13,239,51,395,180,654,208,293,685,37,144,870,923,95,6,599,83,197,115,160,456,900,352,67,498,506,253,165,638,49,3,268,492,137,965,4,479,14,393,763,269,244,185,708,202,109,341,96,365,50,762,509,933,276,48,284,951,367,505,864,751,752,546,320,601,597,35,8,569,634,312,323,217,558,201,391,824,317,401,308,901,457,32,837,159,535,93,873,54,114,38 }, +{ 13,23,51,115,32,141,77,177,202,33,64,269,90,4,102,318,128,40,59,21,217,291,137,180,352,210,95,10,48,0,22,5,196,494,15,7,237,14,117,49,18,216,197,125,342,98,31,304,11,9,165,153,403,317,247,86,752,134,28,275,349,16,24,116,365,341,2,6,76,44,453,17,12,20,30,300,221,93,39,143,139,36,1,19,3,402,326,386,312,105,457,65,244,194,8,576,498,901,308,110,99,72,372,120,401,203,50,25,241,144,61,26,208,96,678,450,160,615,421,391,127,114,57,46,37,35,27,947 }, +{ 202,260,120,450,318,51,269,77,23,351,1,326,13,128,82,137,141,21,33,15,494,102,523,817,5,403,110,165,922,64,203,197,854,125,32,180,177,291,48,153,196,93,116,12,342,98,352,373,40,4,115,7,475,144,349,36,217,90,2,453,386,16,0,285,95,44,615,237,59,49,31,457,704,6,898,210,24,58,96,86,30,719,117,70,401,216,8,275,28,22,14,402,17,247,50,39,29,18,421,99,37,20,10,391,304,61,25,752,341,730,678,9,365,859,576,473,139,45,961,692,293,661,498,317,214,132,35,76 }, +{ 899,523,102,730,33,153,196,117,719,23,475,51,817,13,15,403,453,5,4,342,77,494,40,120,21,11,450,202,421,59,457,12,805,165,139,134,26,19,17,2,1,300,386,801,961,57,32,27,7,6,3,880,197,99,361,757,670,128,125,72,58,56,48,45,37,14,318,64,49,770,247,82,576,260,884,775,635,629,509,485,456,402,391,180,177,141,95,89,84,76,70,62,61,54,53,38,29,25,758,401,269,262,583,409,365,341,331,217,52,968,967,966,965,964,963,962,960,959,958,957,956,955,954,953,952,951,950,949 }, +{ 202,494,403,475,523,817,453,450,318,402,120,576,51,13,77,102,342,33,260,128,23,326,5,899,15,4,82,615,210,269,137,351,291,59,196,141,90,730,40,386,285,214,177,21,719,389,49,11,65,61,30,22,48,153,117,457,114,12,3,98,64,44,39,31,1,922,194,216,84,349,165,95,32,28,10,0,757,197,421,474,123,38,961,887,805,690,629,551,401,283,263,207,139,125,118,113,58,848,503,115,41,880,275,24,17,422,319,104,942,854,803,801,704,671,509,416,400,393,372,334,237,227,217,186,180,151,134,96 }, +{ 2,29,52,112,66,87,70,151,135,7,226,58,74,307,186,294,172,287,549,644,334,5,14,97,46,75,45,227,331,113,145,6,25,315,155,337,222,1,61,192,32,243,163,311,64,220,38,400,43,262,171,69,21,37,624,461,20,884,122,849,631,416,26,16,48,86,27,24,42,22,19,278,138,92,353,635,36,609,232,0,128,140,10,500,324,50,17,72,665,59,12,95,76,90,409,209,35,4,396,491,614,65,18,496,415,54,721,568,592,67,632,49,141,137,80,28,89,204,659,869,60,106,426,845,448,177,207,115 }, +{ 1,349,652,5,260,291,77,39,342,102,120,23,100,888,13,269,64,340,264,51,303,698,32,2,202,21,9,296,33,98,70,385,163,638,318,137,327,87,293,58,50,128,48,195,69,774,141,75,121,7,658,850,326,96,371,284,223,931,863,759,132,126,92,71,221,678,203,82,551,961,937,615,575,563,494,105,83,67,55,36,30,27,17,771,418,115,90,31,156,914,687,393,372,12,6,3,622,144,922,898,854,731,691,478,403,367,363,352,351,333,310,286,170,146,0,950,230,93,95,49,919,954,947,865,851,765,751,719 }, +{ 1,5,2,13,4,23,7,3,15,0,6,180,51,115,141,341,11,77,269,352,21,901,217,197,365,33,12,32,177,752,317,202,318,165,40,9,102,10,291,93,8,569,31,22,349,498,120,90,44,110,401,59,37,304,326,48,17,64,372,403,196,117,16,98,14,457,210,453,125,494,28,36,386,629,247,153,475,30,308,260,134,873,116,253,373,450,18,237,244,482,203,49,128,961,275,137,144,216,509,523,421,391,143,342,24,719,105,95,55,72,76,89,39,206,437,139,468,57,579,758,730,864,546,127,221,96,734,19 }, +{ 14,7,16,46,24,2,35,70,92,58,5,38,75,18,140,60,87,171,220,54,1,155,69,307,50,21,163,48,71,32,112,0,37,12,23,278,780,502,126,9,61,52,186,172,135,45,28,64,29,13,67,227,20,107,22,115,97,513,51,10,267,72,68,270,128,230,89,314,666,330,246,141,6,232,189,36,400,177,66,108,290,150,17,309,55,430,767,334,77,474,121,262,103,243,409,223,137,83,43,113,202,592,217,461,49,95,315,571,65,181,394,357,86,281,269,774,294,236,380,852,536,845,76,90,25,102,298,4 }, +{ 226,135,87,2,29,66,74,52,294,278,222,220,75,7,172,145,331,70,324,262,97,6,25,112,138,337,140,42,1,92,461,26,69,38,500,58,357,14,380,5,287,16,46,571,232,620,808,632,267,163,32,24,35,583,853,774,43,314,609,45,171,21,298,353,19,802,95,60,151,415,448,409,64,67,192,22,65,396,85,525,37,174,307,189,872,204,20,71,50,12,330,86,622,61,48,27,36,186,394,764,113,54,335,563,114,108,309,150,950,72,155,17,10,572,122,635,544,103,96,606,28,893,246,18,49,230,550,334 }, +{ 15,33,77,117,134,153,102,4,40,196,1,217,21,11,291,13,32,5,177,202,51,115,3,23,141,2,48,317,180,349,59,137,372,128,17,269,342,210,341,96,57,64,365,120,247,12,216,82,221,139,318,110,6,260,93,90,352,898,450,165,10,36,31,197,275,523,7,37,72,494,203,244,457,56,351,579,125,111,8,237,817,326,403,0,752,98,922,961,901,160,277,22,719,730,144,44,206,14,386,899,86,45,482,437,304,373,143,89,569,9,116,453,475,308,253,300,61,105,76,27,638,164,95,49,490,29,18,94 }, +{ 217,15,317,82,351,141,260,854,13,77,23,120,51,922,115,1,21,180,110,137,365,341,352,372,269,349,898,291,36,202,64,5,32,450,318,373,177,128,752,96,304,523,93,33,48,165,326,197,102,0,10,40,901,9,4,160,498,247,90,244,661,203,22,59,482,2,12,143,86,437,386,83,457,28,473,30,67,253,961,11,35,16,221,24,125,117,391,39,7,811,494,88,37,8,69,719,559,3,817,704,237,216,76,72,61,14,873,403,18,642,31,899,210,164,45,730,717,49,179,134,139,851,475,421,251,223,100,56 }, +{ 190,373,31,30,863,908,120,88,110,127,260,442,856,318,254,326,717,935,131,836,228,93,187,44,39,385,299,100,968,274,219,203,82,166,224,197,116,661,276,77,1,217,98,269,86,450,51,371,36,128,180,829,137,372,341,160,704,141,64,435,202,49,395,144,9,23,918,410,28,22,730,778,244,242,351,55,737,523,827,177,851,625,944,382,272,530,317,115,349,352,96,613,492,291,954,32,931,744,716,125,268,258,284,253,686,48,615,515,367,247,21,33,456,165,321,795,10,567,466,225,83,839,102,578,521,919,817,752 }, +{ 23,13,308,115,401,51,165,9,391,21,629,254,125,159,773,197,743,569,49,468,217,438,656,627,341,89,39,558,221,32,317,386,509,350,28,95,530,228,457,867,109,166,406,876,679,48,669,364,219,158,365,346,168,912,810,101,170,105,72,64,143,30,347,258,967,237,148,90,688,274,131,670,272,185,749,843,33,12,10,187,55,175,141,4,734,758,242,196,190,453,261,518,224,902,747,286,482,164,37,333,241,2,439,102,0,424,420,393,706,613,338,153,67,372,351,68,40,310,120,816,634,332,840,35,320,88,86,289 }, +{ 49,5,165,125,21,173,43,623,104,193,422,102,13,7,91,18,95,22,0,192,141,64,48,197,900,693,558,105,51,23,32,232,391,387,314,98,31,116,20,779,202,81,92,319,408,241,16,126,38,77,494,33,784,643,474,11,221,28,712,138,862,663,595,403,350,879,29,510,27,633,180,140,729,397,172,44,4,858,237,61,718,501,359,71,60,58,511,448,370,356,750,490,482,347,344,316,308,177,93,37,24,498,293,115,158,145,72,65,40,830,246,207,63,85,107,841,569,468,414,352,330,326,269,203,69,14,12,2 }, +{ 4,1,2,5,13,23,77,115,15,3,0,341,7,51,6,11,33,202,102,217,12,180,10,141,9,40,21,317,318,177,365,901,197,269,32,165,352,22,59,8,64,31,291,14,494,403,93,17,401,569,752,16,453,37,342,210,110,153,275,18,475,44,125,196,90,28,308,326,386,98,120,117,116,372,457,128,349,36,95,629,49,421,237,48,139,203,260,244,450,498,137,134,304,30,24,523,144,247,373,719,216,57,391,961,86,482,143,253,39,730,509,111,55,221,817,96,615,19,65,873,351,758,99,670,437,72,50,734 }, +{ 843,295,93,120,160,206,36,943,567,373,384,332,268,137,261,141,201,260,110,10,203,531,144,55,64,617,434,197,258,699,116,244,282,318,559,564,964,269,44,352,911,717,253,860,202,180,31,326,533,1,940,143,473,417,728,661,276,351,959,187,22,341,851,535,219,871,855,28,367,127,82,131,115,450,365,86,901,752,926,317,21,51,98,48,77,165,23,105,224,96,968,662,217,13,8,902,574,489,125,817,349,800,523,515,83,704,49,811,498,164,494,39,5,393,228,32,291,251,128,9,12,898,642,576,69,67,873,839 }, +{ 192,81,43,173,426,879,7,715,172,104,712,91,636,526,232,825,568,97,560,5,95,681,448,66,49,861,32,387,370,74,20,750,33,204,22,707,330,729,718,140,61,0,6,356,397,69,21,117,422,347,135,359,38,92,102,263,348,64,174,4,414,153,888,237,138,319,76,298,40,13,885,52,2,107,86,500,25,196,784,595,77,819,241,180,134,58,207,85,29,42,31,355,65,577,72,18,28,1,343,48,392,23,10,126,89,324,37,189,344,233,314,11,933,71,14,511,16,408,115,673,46,498,45,671,125,60,858,246 }, +{ 475,453,403,51,33,102,494,23,196,13,202,153,117,77,0,318,128,757,421,22,342,730,899,817,18,805,65,15,958,450,134,4,402,24,36,59,269,40,49,210,401,1,28,697,670,64,11,114,291,48,16,576,108,386,523,141,57,177,21,20,86,165,133,95,90,120,365,317,326,260,221,180,137,31,10,115,752,99,498,457,391,361,352,70,50,32,349,113,9,6,3,864,838,770,743,373,351,338,268,242,206,125,116,109,5,283,253,84,17,961,801,791,546,372,341,237,217,214,205,194,163,143,96,72,69,68,30,14 }, +{ 141,269,260,318,352,202,120,351,349,137,854,82,1,851,922,5,180,372,291,64,32,947,21,15,77,752,494,13,48,304,33,7,51,717,23,217,373,177,128,678,450,115,237,326,317,70,898,36,403,704,312,4,160,102,86,90,968,247,95,87,196,49,275,244,197,22,165,67,96,35,288,203,817,735,125,342,144,93,16,216,163,50,44,31,83,954,2,69,597,457,241,59,153,961,221,110,98,39,30,9,8,901,661,551,523,473,442,386,367,284,210,864,117,61,12,0,800,29,24,863,859,730,719,475,453,385,316,293 }, +{ 15,1,2,13,5,4,3,0,23,7,6,115,217,12,180,197,9,51,21,11,352,961,8,10,165,77,457,341,141,317,22,14,901,33,31,117,93,120,102,40,134,752,202,365,260,16,37,269,569,110,32,44,28,318,64,18,17,48,351,719,153,386,177,82,291,36,196,98,873,450,49,125,59,128,498,403,72,326,482,30,523,401,99,854,308,203,24,453,89,137,95,391,509,111,349,86,139,730,372,247,144,55,210,116,342,494,304,475,373,148,922,90,105,237,661,35,579,899,143,221,39,19,629,275,421,758,244,468 }, +{ 166,39,274,404,101,252,190,30,333,9,310,0,100,438,656,158,265,88,68,625,329,530,553,419,344,539,254,455,793,778,21,48,759,228,49,676,1,131,960,709,557,731,520,154,23,35,382,13,124,364,604,677,105,28,272,16,286,406,212,31,51,18,613,219,224,593,840,159,167,125,36,98,65,518,669,865,118,24,44,96,213,748,264,777,115,83,175,22,86,538,957,221,127,55,327,5,10,857,694,688,137,258,795,410,806,627,95,71,577,289,128,116,578,32,50,242,69,724,187,352,562,346,616,67,33,827,846,191 }, +{ 28,0,1,9,22,65,12,83,67,55,109,50,24,5,36,49,39,96,35,238,16,18,2,21,114,124,69,37,7,218,48,23,323,103,158,160,168,54,51,128,285,154,13,68,185,137,14,194,99,141,95,169,181,418,289,420,202,433,86,30,75,480,175,10,505,105,115,32,402,281,223,389,269,208,646,503,745,64,133,46,180,657,159,800,531,547,251,956,101,429,4,318,31,149,163,6,70,346,58,532,822,533,484,757,797,165,335,252,197,735,570,352,283,361,71,98,29,118,3,535,927,766,221,217,38,799,237,308 }, +{ 15,1,2,0,23,5,51,13,7,6,9,180,12,115,3,457,197,8,719,21,730,4,120,901,141,202,14,33,165,341,453,386,82,31,260,351,365,523,308,64,37,22,44,401,450,32,40,16,93,77,110,10,98,961,403,36,102,899,28,217,11,125,352,196,48,318,137,317,475,153,18,269,49,569,116,752,99,326,421,128,24,30,221,95,39,203,117,873,144,817,629,758,177,55,86,35,494,509,898,373,59,237,105,17,65,291,96,89,498,670,482,247,253,134,468,38,143,54,244,72,90,372,160,854,127,210,391,801 }, +{ 9,39,166,49,30,28,0,158,22,131,180,100,219,35,352,190,345,228,1,752,88,498,115,141,274,317,482,109,83,128,930,251,36,217,95,365,230,55,101,160,254,165,224,159,168,23,341,13,105,31,208,187,258,927,310,197,69,137,333,901,864,364,64,185,269,86,344,505,252,202,404,68,286,873,539,372,96,669,438,51,10,164,67,5,868,346,244,637,439,2,7,21,748,323,406,418,318,16,237,44,272,50,840,706,420,265,127,98,946,735,793,768,579,169,125,530,175,148,327,857,702,678,238,116,12,48,533,335 }, +{ 61,311,80,209,45,29,5,58,2,151,454,106,17,6,667,243,255,738,52,592,70,496,287,74,483,1,833,112,549,27,207,119,26,315,32,227,378,19,64,14,138,25,84,263,75,742,186,631,113,21,136,56,48,887,62,46,7,307,469,72,76,145,50,73,66,161,128,495,148,425,814,651,491,4,34,95,869,86,38,87,3,334,240,290,383,396,845,42,53,306,12,171,65,141,163,445,135,155,11,22,54,297,90,331,179,226,655,632,37,614,361,292,663,89,400,13,36,23,10,137,294,666,99,659,250,220,59,51 }, +{ 31,44,299,22,125,599,456,685,116,28,492,393,170,242,144,268,963,301,506,1,95,558,367,36,239,55,489,0,918,109,206,23,105,9,10,434,127,51,384,13,86,286,948,479,98,64,841,5,338,2,93,12,203,498,164,7,512,168,21,143,165,49,903,940,320,401,391,137,8,37,900,417,352,141,115,128,546,253,457,959,237,14,185,197,308,169,202,395,282,421,374,911,180,740,332,293,386,6,24,312,855,538,509,752,244,473,65,928,762,160,638,617,341,269,961,867,949,730,654,403,551,499,965,523,48,719,16,453 }, +{ 187,258,926,839,574,860,93,219,406,228,871,160,531,224,137,902,201,120,116,36,203,144,669,268,318,131,442,567,816,295,434,908,851,533,843,44,384,717,202,800,559,373,489,728,141,332,855,206,261,276,1,260,269,251,617,326,180,317,385,940,110,613,217,959,55,31,450,352,968,365,115,197,64,699,679,244,98,96,83,23,10,840,341,77,492,473,899,856,831,661,143,127,190,918,752,539,21,284,418,13,943,748,662,911,564,530,48,165,291,523,704,128,345,125,822,351,169,954,86,349,367,922,776,535,177,51,824,22 }, +{ 7,107,24,60,349,232,16,51,18,75,9,291,87,23,71,269,92,126,77,141,64,177,307,150,461,35,220,14,330,37,121,0,46,279,115,947,267,132,32,12,172,55,112,309,13,10,448,278,202,21,70,2,372,210,852,678,441,304,28,5,328,217,147,54,48,786,660,259,359,318,155,90,334,181,180,140,872,108,22,163,102,31,409,314,394,352,341,281,171,68,30,622,294,236,20,423,49,626,33,760,186,58,687,415,50,39,407,128,43,771,365,197,237,1,400,929,498,888,590,366,342,270,192,135,100,76,61,675 }, +{ 15,1,2,0,5,7,13,6,3,4,115,23,180,9,12,901,51,8,341,961,365,197,10,22,141,82,33,351,14,11,77,120,31,202,457,165,217,308,134,352,28,64,102,21,269,569,110,18,260,317,40,44,16,37,36,719,93,318,237,137,99,177,450,30,125,128,386,49,752,153,55,498,17,391,98,24,111,403,32,39,196,117,401,116,373,898,730,523,326,291,453,95,854,509,304,247,86,59,372,546,482,349,143,475,899,203,244,494,139,35,48,642,253,811,144,105,210,160,758,421,148,629,221,90,164,65,127,638 }, +{ 23,51,13,202,5,12,115,21,141,165,1,32,2,318,197,15,403,180,453,7,6,3,401,269,4,0,128,308,37,10,99,457,14,11,9,120,64,22,48,341,137,386,494,475,17,77,16,719,18,217,125,31,352,523,421,59,730,90,153,365,391,237,177,317,28,40,450,260,72,221,33,8,569,93,509,961,44,19,89,102,291,98,247,326,498,76,24,49,817,899,758,30,57,629,117,61,36,110,29,139,20,210,402,82,304,196,95,45,351,752,38,285,116,203,134,349,241,96,468,54,216,901,482,576,546,25,275,342 }, +{ 2,1,77,64,141,6,3,7,0,33,102,5,10,13,23,14,269,180,15,217,165,291,352,40,117,197,9,17,115,202,237,4,128,11,22,341,12,153,349,134,196,16,51,86,318,317,177,36,19,125,137,95,342,18,752,8,28,365,31,210,457,143,139,498,59,372,21,164,57,304,82,120,45,27,38,275,24,49,110,391,386,111,93,44,244,901,260,509,56,32,41,450,98,65,99,351,30,961,55,37,403,864,569,494,29,678,48,312,453,326,546,203,20,25,54,401,79,373,402,61,253,26,46,62,719,76,475,523 }, +{ 345,531,332,269,717,260,373,317,728,752,351,180,352,533,10,365,498,82,160,251,244,36,901,143,217,341,93,55,1,141,873,864,898,35,9,564,64,851,951,22,417,137,253,28,617,169,67,69,120,559,854,197,601,482,318,546,115,768,21,96,83,661,261,876,110,372,237,164,144,535,574,203,800,206,16,86,349,31,824,699,50,48,831,902,843,860,434,968,125,221,579,959,700,679,384,926,922,295,7,51,23,291,148,418,230,202,24,943,468,896,201,5,776,77,839,44,258,954,816,13,811,940,844,637,473,868,822,308 }, +{ 92,16,189,7,77,60,388,140,33,153,196,102,35,117,230,134,150,733,314,24,14,71,21,915,246,1,108,594,97,18,32,48,66,126,69,517,121,462,64,22,98,13,399,723,65,5,291,95,67,451,674,267,232,217,653,298,2,23,38,223,104,711,83,0,197,90,36,423,149,46,125,49,167,28,68,195,20,172,120,251,86,12,289,214,508,115,386,633,236,133,10,50,350,458,191,165,330,51,107,31,260,6,43,55,271,841,450,457,273,326,796,146,509,221,603,380,237,702,9,194,4,202,199,103,52,357,29,74 }, +{ 234,142,178,202,639,5,49,450,77,70,786,416,929,48,259,455,21,0,878,147,315,481,198,329,427,318,1,125,105,120,61,113,534,846,58,344,12,132,95,518,465,325,22,31,163,557,494,13,159,32,761,767,128,590,146,37,798,195,269,711,371,291,402,265,50,342,158,362,260,39,98,221,884,687,30,64,279,137,2,167,10,771,165,35,640,626,522,403,293,310,102,23,817,347,170,28,581,99,141,236,127,150,107,51,271,87,763,623,845,212,7,18,423,194,17,523,112,345,663,33,44,376,239,199,121,391,116,75 }, +{ 81,715,192,712,681,636,104,173,750,91,370,0,74,95,718,22,7,825,879,20,49,560,43,64,422,172,397,66,138,207,784,86,500,65,28,18,707,204,414,10,577,174,319,426,32,38,312,888,348,330,4,526,289,52,355,61,511,861,347,33,237,29,102,232,448,31,21,353,835,124,5,6,2,643,36,85,97,117,153,77,306,59,134,819,140,673,671,24,40,120,165,729,568,240,135,280,324,105,125,98,344,519,233,387,194,288,196,693,474,241,214,701,44,107,583,314,260,450,847,287,69,25,872,587,343,84,9,817 }, +{ 23,13,51,15,0,10,9,115,1,453,2,961,4,77,5,457,11,40,33,401,3,7,475,197,102,14,569,165,22,59,12,6,719,32,64,21,99,730,57,17,177,18,37,8,217,386,403,196,28,308,16,31,141,139,111,341,523,120,125,180,153,117,629,391,210,36,45,237,72,899,49,95,202,128,485,247,38,482,24,48,44,509,90,27,260,450,30,19,137,317,365,41,65,291,269,89,134,342,86,304,498,421,474,82,79,148,54,277,758,318,352,46,76,56,326,468,29,670,349,494,275,351,437,300,93,50,546,873 }, +{ 64,297,5,80,445,61,95,311,250,312,472,34,237,86,45,180,738,17,151,58,22,667,869,247,2,14,73,288,194,106,53,21,128,197,352,177,32,29,186,469,833,217,52,165,287,255,3,1,495,391,396,243,176,137,90,546,125,56,161,141,136,592,48,10,209,27,0,231,76,751,62,11,437,315,119,887,115,334,179,23,84,498,651,207,77,4,864,145,13,881,389,304,6,59,49,631,372,65,16,240,164,153,112,378,549,483,584,527,316,26,862,509,409,752,51,7,875,18,933,171,269,196,457,283,241,148,114,19 }, +{ 71,16,24,18,60,35,7,92,118,154,68,149,150,14,175,28,124,55,302,97,0,273,126,108,429,140,230,43,375,2,246,109,20,628,69,336,189,9,101,66,38,298,107,65,439,22,517,346,279,345,1,467,419,21,67,169,399,49,48,46,158,847,420,10,570,185,232,251,6,653,29,252,441,314,12,566,637,191,5,535,51,52,508,423,364,533,722,36,32,398,172,74,882,674,917,168,121,95,39,23,621,83,221,159,105,50,505,356,13,701,96,37,484,694,962,173,608,604,135,267,86,104,64,826,329,103,363,236 }, +{ 195,360,156,591,687,771,163,626,70,883,146,132,586,371,407,379,354,48,846,121,293,13,296,31,761,98,18,767,49,105,385,44,279,522,668,21,1,55,23,125,5,518,271,127,590,878,340,10,608,223,33,807,167,259,77,447,116,75,60,658,102,446,265,929,115,128,35,457,221,87,786,301,284,4,95,51,165,395,39,481,698,541,781,291,178,664,372,150,252,777,557,64,30,24,16,153,120,40,558,535,281,107,465,763,638,783,663,393,101,937,9,467,58,196,217,144,61,401,212,199,117,299,941,32,22,817,260,118 }, +{ 13,77,202,318,23,51,33,269,141,64,137,32,291,0,128,102,21,494,4,10,403,217,177,342,5,196,9,349,117,22,153,134,98,95,115,59,31,120,753,18,16,40,48,28,90,372,317,237,49,450,1,86,65,244,352,475,194,11,180,165,142,100,44,125,76,12,116,93,523,275,127,121,24,20,453,365,341,61,859,401,144,82,402,210,198,178,147,88,37,17,2,351,234,105,7,6,326,197,110,30,203,143,922,854,851,427,325,259,118,107,101,72,55,704,421,260,114,36,208,329,265,38,164,864,752,717,558,498 }, +{ 192,81,172,173,7,426,97,232,861,715,43,879,66,712,104,387,330,568,825,74,526,893,91,298,885,448,636,681,140,92,49,560,6,204,135,779,22,5,95,572,707,64,125,726,750,14,370,563,314,20,324,10,362,29,174,246,713,0,718,356,107,138,25,397,85,63,18,38,71,21,441,98,58,500,230,31,501,32,319,408,69,729,189,13,663,422,24,784,359,241,858,165,16,347,263,77,357,623,673,26,888,2,12,353,900,141,23,52,126,37,33,622,278,830,197,48,233,40,443,355,44,42,45,267,87,19,61,237 }, +{ 14,2,1,67,6,24,69,66,7,29,38,108,36,65,83,124,46,52,150,86,25,484,28,302,74,22,388,18,267,398,458,103,50,273,168,97,12,5,16,0,650,135,26,19,160,75,172,189,21,10,208,32,289,278,380,547,782,95,610,140,51,602,118,37,114,451,429,357,42,71,23,324,505,194,149,420,48,143,92,87,17,13,421,115,60,54,70,35,584,96,756,462,20,238,109,185,27,164,64,45,220,244,253,594,3,154,99,138,43,283,335,701,133,309,128,403,797,49,58,732,550,202,169,646,401,423,218,847 }, +{ 202,77,33,13,102,128,51,318,23,64,494,4,141,196,59,0,115,403,40,22,269,210,177,153,137,117,32,90,10,475,291,21,342,15,11,134,352,95,18,65,49,217,86,16,180,36,197,453,165,275,57,1,402,9,194,48,24,341,719,28,105,6,123,349,317,285,523,125,120,372,216,14,450,365,20,457,2,237,7,82,576,98,3,421,12,5,260,247,110,730,116,44,31,901,752,300,8,208,30,498,351,96,93,139,678,164,46,19,401,386,308,817,615,214,50,35,961,758,859,326,160,17,503,391,293,242,221,203 }, +{ 269,318,141,291,77,202,349,217,947,304,33,177,102,851,372,352,753,260,351,120,5,137,854,752,494,275,403,32,922,22,180,475,21,317,30,10,954,31,64,44,418,365,49,28,48,450,39,23,95,341,661,373,82,11,4,36,93,13,61,128,7,6,3,2,859,51,0,197,800,576,96,59,901,69,165,40,203,144,247,1,86,898,12,76,70,160,498,437,342,237,125,9,433,330,238,103,98,67,453,312,864,367,326,253,87,58,361,221,99,90,888,717,678,579,65,774,241,115,50,45,968,951,704,615,473,277,244,134 }, +{ 6,74,138,85,66,222,226,87,42,280,25,135,26,792,500,294,75,29,220,204,70,174,337,145,235,112,278,853,461,19,52,97,1,32,122,38,808,2,256,172,64,889,69,324,380,774,620,802,609,525,7,95,353,21,571,5,65,580,746,415,22,108,140,96,14,241,24,331,63,45,544,287,67,237,267,125,262,92,394,348,103,86,163,632,426,90,194,606,165,630,550,58,53,36,233,76,91,192,357,28,27,17,141,189,416,72,582,486,81,49,114,16,622,113,78,115,10,928,444,537,872,462,46,605,83,350,335,150 }, +{ 9,0,105,39,101,18,16,68,310,24,333,272,252,127,98,518,846,938,28,371,1,916,35,158,286,737,455,31,301,265,327,100,395,616,49,30,254,7,578,55,23,827,118,512,109,44,329,21,65,890,60,320,242,116,137,709,170,51,385,125,48,761,166,14,5,2,13,71,293,131,520,627,154,159,299,557,344,836,12,553,364,93,202,96,167,88,623,128,36,124,506,64,688,212,604,924,910,931,120,284,50,144,10,419,22,165,219,32,37,95,77,110,121,326,67,403,404,203,442,197,187,6,141,676,276,260,239,33 }, +{ 2,14,1,67,46,24,108,29,83,69,38,103,52,75,133,236,309,36,114,28,50,18,398,135,6,65,458,278,7,238,74,87,160,388,124,220,732,0,267,262,66,149,532,335,283,25,412,71,16,5,96,55,547,154,70,273,602,22,302,418,429,218,516,366,646,150,336,357,86,696,175,26,189,54,12,68,118,226,35,172,324,58,582,19,486,208,9,21,594,109,531,112,45,484,140,596,251,60,95,323,17,10,32,37,194,394,64,650,48,168,163,145,42,571,97,222,23,420,505,27,181,92,389,533,606,171,361,99 }, +{ 22,1,28,105,95,49,55,67,168,159,239,65,14,320,35,0,2,36,114,7,170,109,83,12,169,347,194,50,301,69,9,24,5,424,164,185,103,133,654,46,312,420,16,127,10,175,158,64,584,21,23,51,98,143,31,86,286,13,37,289,6,336,389,48,283,505,96,124,68,38,638,512,160,208,39,141,202,18,115,189,128,395,54,623,874,338,237,713,547,44,272,308,740,137,149,371,125,251,32,30,518,345,844,535,180,3,293,928,756,916,242,29,835,165,538,708,327,323,99,737,484,221,401,218,533,374,253,154 }, +{ 66,7,172,97,232,92,314,568,298,140,192,380,135,330,74,324,387,448,357,14,526,126,38,246,204,16,426,107,572,52,2,808,712,501,359,60,69,278,29,230,32,779,441,500,35,95,550,5,21,22,893,6,43,563,392,104,267,46,24,150,362,64,726,138,189,423,173,65,825,71,356,20,462,279,0,12,802,87,86,174,560,10,81,18,49,37,226,830,633,25,48,28,90,289,58,36,67,75,707,91,508,241,312,1,85,451,220,70,443,199,214,636,50,108,83,61,54,222,121,353,262,125,280,45,888,750,237,42 }, +{ 2,29,52,50,46,14,5,1,6,26,133,114,58,218,366,70,19,108,45,27,112,17,236,137,75,38,262,25,74,13,283,516,53,487,223,151,145,208,96,48,51,412,287,163,23,401,323,285,86,65,171,61,36,220,21,480,594,42,128,80,331,73,103,754,181,115,12,739,113,3,532,4,194,54,602,635,186,99,202,409,675,745,34,308,583,307,357,309,782,396,150,57,361,7,764,165,66,735,324,64,966,457,453,90,24,386,445,11,484,32,389,141,629,59,87,244,155,956,711,670,421,22,545,832,758,334,328,573 }, +{ 6,74,1,25,29,42,75,26,66,2,70,138,52,19,85,220,103,388,38,14,226,87,135,324,67,357,108,112,235,69,238,603,222,65,550,500,96,114,145,594,83,309,133,516,27,36,150,451,218,294,262,532,711,51,58,602,280,13,163,50,380,63,137,97,802,23,122,278,458,64,5,394,86,53,606,696,792,46,891,160,461,267,732,12,7,204,582,113,308,453,24,545,889,386,331,45,21,165,398,486,391,115,32,423,401,95,337,758,632,17,208,3,853,457,256,537,335,78,630,141,307,189,641,37,646,444,670,10 }, +{ 22,28,109,49,9,105,131,95,1,36,159,39,86,185,31,98,272,169,127,55,44,219,83,254,286,208,141,128,35,327,352,160,30,180,116,0,224,202,115,239,13,535,187,137,5,96,12,374,317,269,2,244,837,312,752,67,531,21,533,253,237,197,64,217,51,143,168,158,578,251,318,505,37,258,165,285,365,10,7,23,498,201,538,371,901,320,50,424,347,678,48,69,164,776,708,601,341,597,616,345,228,170,873,238,634,6,947,3,482,93,125,144,518,242,946,913,864,716,4,735,8,627,221,420,100,688,910,323 }, +{ 203,822,77,859,326,576,23,403,39,817,137,100,102,473,494,691,411,291,33,177,704,70,523,217,447,96,367,478,18,373,160,13,363,265,1,658,615,93,966,520,310,144,30,692,800,578,342,182,180,120,90,51,254,296,40,158,682,333,9,354,921,349,273,127,121,101,83,60,59,24,731,264,115,821,364,44,268,260,752,857,810,272,196,166,153,131,118,48,16,457,156,67,506,481,450,415,230,15,0,593,968,914,212,937,829,395,365,351,242,225,224,219,194,187,146,141,132,117,110,87,82,49,36,35,22,905,901,656 }, +{ 15,33,117,77,102,134,153,4,115,196,13,40,217,11,341,1,23,5,317,3,365,2,291,21,32,12,349,569,177,59,51,342,0,6,372,139,7,37,901,210,10,180,17,90,111,629,48,275,82,120,197,244,304,141,14,253,137,57,202,247,401,638,308,457,300,9,719,961,482,437,260,277,351,579,31,44,93,216,165,269,36,125,450,72,523,453,89,38,352,94,730,854,116,752,18,817,143,98,386,64,56,96,318,16,468,55,160,148,61,54,76,22,485,110,403,99,221,922,19,474,79,127,65,105,588,27,490,128 }, +{ 15,13,23,51,0,8,197,180,1,165,9,33,82,5,4,10,12,120,2,102,386,115,260,475,7,351,141,110,77,901,326,14,21,18,11,217,22,457,40,93,898,453,373,36,450,341,16,6,125,31,64,854,352,719,401,117,32,391,28,730,3,291,177,203,24,961,523,202,59,317,403,99,49,44,210,922,615,37,237,111,801,153,128,498,342,629,196,509,30,899,569,421,304,752,48,758,817,276,258,137,269,130,393,98,365,57,116,65,338,144,55,704,134,349,105,206,661,551,308,242,38,95,494,275,86,546,318,56 }, +{ 23,51,1,13,21,141,5,180,15,2,202,120,7,0,197,165,12,9,6,4,115,48,352,269,403,386,33,260,318,93,3,32,457,110,37,137,14,450,475,16,82,128,523,453,102,31,18,326,125,421,8,77,44,221,391,64,308,730,401,341,217,153,11,117,98,719,498,196,30,351,99,40,752,494,24,237,317,39,72,28,36,10,59,203,49,373,365,17,116,817,90,899,96,509,22,569,35,901,144,961,615,342,45,50,291,177,86,89,244,661,55,134,20,54,854,65,873,801,402,160,95,247,38,350,629,127,105,29 }, +{ 15,1,0,2,5,3,7,4,6,8,13,10,341,23,9,180,51,82,120,77,31,110,197,961,115,12,22,93,116,165,569,730,202,217,365,752,457,453,719,102,125,44,351,30,403,141,352,33,11,260,523,317,291,475,28,21,450,318,64,898,401,98,899,386,203,36,210,40,177,269,16,242,638,421,326,153,349,372,18,817,494,854,117,275,342,59,111,196,14,137,629,49,134,55,39,143,70,32,37,139,95,758,244,958,498,801,87,24,922,86,670,253,144,170,208,90,105,615,373,873,391,308,247,482,216,61,393,304 }, +{ 559,661,922,564,373,141,260,533,244,332,269,317,642,143,10,93,110,295,728,752,261,876,531,351,206,843,120,345,203,352,180,811,253,384,36,197,144,434,717,901,959,365,498,55,567,1,943,9,28,535,817,22,160,873,902,341,326,911,35,82,601,860,39,30,679,489,824,704,417,926,217,251,940,699,574,137,617,854,201,816,116,282,898,115,44,372,855,258,237,473,662,509,187,169,864,499,349,284,125,31,468,224,21,669,64,318,164,546,951,395,964,839,450,8,219,170,776,638,268,851,23,131,98,482,367,299,48,730 }, +{ 15,5,1,2,23,0,13,7,6,51,3,180,12,9,115,4,165,719,197,457,21,8,14,33,901,22,37,141,82,341,120,10,730,202,16,110,32,31,386,11,317,153,117,752,260,351,453,217,401,18,352,77,308,93,961,48,28,44,134,569,365,391,49,269,102,523,128,98,196,758,137,99,498,36,40,30,450,64,403,17,318,509,24,89,95,475,629,854,72,125,221,177,86,873,326,247,96,899,817,898,39,38,421,139,116,291,482,55,494,59,105,203,210,144,65,468,29,20,237,54,349,90,148,372,244,734,35,45 }, +{ 198,234,5,0,325,77,416,202,61,32,147,49,639,20,43,21,315,22,450,113,95,455,142,427,48,318,230,207,342,18,494,13,329,904,577,725,64,178,28,10,70,58,344,470,102,403,128,819,269,263,104,137,1,319,112,246,17,23,347,291,7,65,887,798,120,12,241,4,36,858,107,237,66,76,376,817,39,422,316,72,97,33,945,105,2,51,90,141,290,884,557,253,9,518,251,671,11,173,86,31,115,27,159,158,194,3,24,312,289,362,260,259,192,859,414,426,16,14,306,523,37,126,475,712,576,310,453,98 }, +{ 447,411,264,363,676,9,664,682,821,812,759,478,897,166,100,905,354,156,1,382,98,265,404,724,39,18,691,656,668,101,520,195,23,144,223,21,865,271,438,593,639,848,31,96,13,5,51,521,125,586,48,127,604,88,909,30,252,765,393,647,360,77,33,121,167,781,367,44,621,132,93,0,410,274,286,118,203,254,120,272,105,102,293,446,116,83,32,658,68,310,371,284,777,115,364,4,834,16,948,69,333,163,24,212,190,40,340,329,551,914,117,49,110,153,70,165,146,35,296,418,10,67,842,242,883,326,697,238 }, +{ 24,71,35,14,69,149,189,108,267,18,16,68,46,2,7,67,140,388,60,38,236,83,251,1,133,118,309,230,336,52,103,29,458,278,28,65,135,175,150,50,172,92,273,55,0,154,75,443,114,9,705,124,399,66,565,398,412,602,335,366,36,101,823,596,451,74,220,345,375,302,594,330,696,516,87,238,6,891,21,218,5,12,54,262,48,96,86,22,582,357,324,97,191,64,70,232,283,723,95,10,37,160,831,732,346,246,563,380,32,25,109,486,733,167,58,314,212,226,192,13,429,99,547,23,181,126,572,394 }, +{ 35,16,7,20,14,60,18,121,24,43,107,68,109,126,199,326,92,120,77,907,2,147,23,259,265,475,403,260,553,1,13,523,132,252,12,146,71,55,33,0,5,859,191,318,817,38,6,450,82,202,848,402,9,286,51,21,329,159,494,419,351,28,465,327,102,10,158,48,682,374,576,198,178,97,32,421,272,621,269,615,590,279,128,941,22,446,167,142,70,493,4,310,604,581,19,105,640,463,453,407,153,694,64,810,150,108,90,29,534,427,212,346,285,709,638,557,793,137,101,39,37,25,291,165,118,95,58,50 }, +{ 30,131,276,187,613,442,44,228,39,31,190,839,935,224,116,856,219,88,9,406,201,908,574,100,244,127,567,137,36,98,110,144,1,93,202,863,258,141,829,260,28,284,49,120,269,295,318,716,21,827,254,661,166,160,203,373,299,55,385,0,22,662,352,944,13,82,530,77,253,86,268,23,96,717,489,64,180,51,326,274,778,918,48,351,492,5,752,197,83,206,125,128,450,115,217,860,32,242,931,578,293,213,102,924,494,851,95,10,101,836,105,272,143,291,699,371,35,434,165,843,864,367,403,159,177,418,261,68 }, +{ 98,223,1,393,812,834,421,697,48,265,593,791,51,410,100,382,293,284,21,23,125,96,541,213,656,88,801,453,31,321,230,765,730,386,221,13,689,9,264,670,639,163,217,5,909,807,116,144,44,352,137,286,551,30,770,948,39,252,699,466,438,435,201,401,127,93,842,475,203,165,921,478,180,166,949,724,367,963,831,36,128,404,455,805,141,676,854,202,2,317,318,772,840,190,32,418,251,855,105,35,333,77,83,197,102,335,49,443,576,957,719,351,539,308,69,55,82,310,115,0,120,557,752,329,403,269,686,669 }, +{ 98,616,219,127,258,51,293,512,924,395,105,421,272,276,308,201,401,284,763,116,23,301,295,453,327,567,944,31,44,843,261,13,268,860,170,770,115,125,569,900,131,386,144,935,456,55,578,365,320,143,341,662,137,109,28,403,434,242,221,36,203,670,286,141,10,326,22,629,21,943,95,9,743,685,160,384,623,506,180,49,206,949,533,719,734,558,282,299,185,159,244,64,8,0,110,964,911,169,32,4,224,551,202,475,11,187,910,617,492,901,253,841,716,1,489,269,959,940,165,699,615,374,855,332,237,713,86,371 }, +{ 253,951,352,110,811,244,206,141,180,332,854,642,282,10,143,638,417,752,559,533,498,260,55,661,911,499,717,120,351,959,535,93,564,160,873,531,137,341,269,197,922,384,373,36,365,728,261,617,901,8,44,82,116,165,31,317,164,64,203,217,509,824,115,473,968,268,144,326,704,434,295,601,86,15,345,851,864,237,943,251,450,169,1,843,201,762,13,372,22,258,308,125,898,96,98,202,127,855,940,4,33,489,21,28,187,9,40,546,117,83,569,338,964,51,5,32,479,391,276,23,102,318,482,349,219,153,128,817 }, +{ 49,254,272,159,9,158,627,131,327,39,518,688,0,578,28,286,68,105,101,347,424,374,364,344,224,22,333,616,65,219,35,24,124,154,716,890,95,577,16,371,320,109,810,538,228,168,310,793,747,127,30,419,613,829,827,187,385,239,846,170,21,1,98,18,36,71,938,406,910,252,31,55,346,175,23,289,51,190,48,258,86,185,83,912,100,623,301,166,128,149,125,67,118,96,44,137,64,242,13,737,857,160,703,671,694,455,202,442,169,60,856,10,761,924,221,709,116,706,634,114,439,677,194,479,7,570,212,395 }, +{ 105,272,22,131,327,374,286,320,109,224,219,28,239,95,98,578,9,169,127,185,538,159,187,616,55,258,371,36,634,623,64,164,49,713,86,910,716,385,168,654,170,420,424,1,10,312,737,201,35,254,293,284,51,23,143,13,44,761,141,601,160,395,933,31,928,916,276,301,924,208,116,67,346,237,137,347,535,39,194,242,0,442,836,83,762,165,584,338,638,505,892,244,251,175,345,114,740,12,391,944,837,128,158,202,197,479,261,253,908,352,912,125,531,96,308,295,144,24,21,30,7,269,268,2,751,323,228,5 }, +{ 691,478,340,724,658,914,698,1,363,744,772,156,411,447,682,909,303,284,296,264,354,919,335,98,9,21,686,664,225,223,586,410,96,367,382,897,51,13,521,33,848,765,125,144,23,32,120,759,48,69,662,260,44,31,166,40,93,77,5,4,551,668,35,269,30,82,191,167,163,318,351,87,404,371,102,88,812,438,165,70,39,385,293,116,65,64,656,364,101,622,286,948,254,271,393,321,141,75,11,18,854,842,443,433,118,100,418,274,202,421,16,774,67,326,329,905,149,922,110,37,386,201,12,197,127,49,203,907 }, +{ 16,24,71,35,18,108,140,60,92,267,68,189,7,230,191,246,149,14,118,167,388,46,69,236,458,399,674,212,273,9,133,1,126,150,21,309,330,50,101,55,2,48,103,121,67,906,602,5,0,345,723,412,232,172,271,146,565,28,516,696,702,75,38,65,451,32,796,12,37,594,633,154,278,733,375,366,302,199,124,314,36,336,398,443,823,64,695,54,135,114,29,22,95,97,462,915,52,563,582,251,705,575,891,589,175,10,83,566,572,13,220,223,23,467,218,830,163,363,394,66,562,132,107,446,641,517,49,86 }, +{ 9,127,0,395,371,98,39,31,737,49,512,385,272,44,28,293,299,101,836,761,158,252,254,16,242,1,284,159,116,18,518,35,276,310,333,24,187,51,21,599,137,30,301,22,131,68,286,23,219,327,202,125,616,48,442,935,456,578,916,5,109,166,685,55,265,7,65,100,688,128,105,201,36,890,623,96,144,13,908,329,12,2,846,64,37,95,141,344,455,318,403,124,93,492,154,32,404,14,203,269,938,627,67,258,118,224,170,244,326,110,268,165,367,763,86,60,827,221,716,160,924,553,120,419,489,662,10,83 }, +{ 16,18,60,68,35,101,252,0,118,71,9,419,28,24,109,364,604,191,126,167,55,121,329,92,7,158,265,39,212,22,346,14,925,49,107,694,185,169,621,146,439,333,628,124,199,150,942,21,159,48,154,553,706,175,108,575,279,677,10,962,20,105,100,848,917,815,446,363,907,132,5,793,271,375,43,149,23,65,13,566,520,806,286,810,95,166,593,374,302,51,1,97,634,598,404,407,12,31,2,272,493,46,467,727,463,562,589,125,326,327,310,50,967,96,682,168,37,344,140,608,203,98,38,647,821,246,362,67 }, +{ 116,268,203,692,93,206,940,31,551,417,473,959,499,44,202,523,559,8,137,120,450,728,299,494,403,22,51,576,0,326,564,817,10,260,13,23,127,1,899,9,105,421,125,615,318,492,638,98,386,918,141,393,341,269,253,21,791,5,28,2,144,64,37,244,805,762,373,180,128,401,599,55,901,242,352,30,165,197,453,642,730,475,170,873,115,49,569,36,4,859,7,143,391,498,86,48,308,922,752,39,395,719,365,951,285,6,457,456,958,12,110,402,704,384,367,95,512,949,18,24,16,515,479,221,32,948,801,282 }, +{ 225,1,744,919,21,459,914,48,691,284,330,385,141,96,98,335,622,166,5,293,51,32,120,223,948,340,260,443,203,88,286,30,831,372,50,363,351,269,82,64,934,70,658,9,190,127,403,352,13,115,418,682,411,371,87,144,393,909,521,922,776,272,102,90,69,61,839,23,15,4,774,349,327,321,268,244,202,197,100,93,551,75,848,662,523,442,478,373,206,201,180,125,76,59,45,36,33,963,538,410,274,237,163,156,821,303,264,772,724,450,382,367,958,954,899,898,865,864,859,854,765,752,730,668,664,506,494,475 }, +{ 5,1,14,2,36,50,28,0,48,281,21,67,24,54,22,83,218,12,38,18,65,181,58,45,114,133,430,32,17,46,96,10,9,103,37,160,502,61,155,99,270,55,72,7,29,513,16,51,108,487,238,23,543,745,86,3,290,6,540,89,361,115,834,13,52,202,221,433,842,488,480,137,236,76,69,328,223,64,838,514,49,532,35,666,474,128,171,283,766,536,227,124,966,308,75,19,552,95,70,208,775,141,323,27,541,822,697,425,754,765,4,285,207,148,657,109,318,412,243,263,77,592,832,663,741,186,807,576 }, +{ 450,137,704,202,326,120,260,851,318,968,494,269,457,182,403,291,351,349,77,678,141,23,310,373,817,859,576,661,523,890,60,128,82,64,795,110,854,70,515,96,5,159,285,1,961,341,13,717,9,421,922,203,180,95,244,55,379,658,577,347,105,75,49,822,687,115,363,800,557,301,160,36,937,475,411,67,59,237,18,16,354,195,864,771,615,520,424,415,344,83,68,51,28,0,805,447,386,364,268,232,107,101,90,86,7,668,481,342,271,786,735,901,897,846,751,731,719,638,621,586,518,402,296,253,239,208,197,165 }, +{ 15,4,33,77,40,13,102,11,23,5,32,21,110,117,217,51,93,153,59,1,247,134,115,141,64,202,120,2,372,180,3,10,12,31,82,291,177,116,139,125,269,196,8,317,17,22,165,137,98,351,318,36,44,128,203,197,28,0,352,48,260,349,898,144,57,403,450,437,6,719,341,72,304,111,457,523,90,365,494,9,326,49,37,730,7,210,39,86,30,14,475,95,386,453,638,961,854,373,76,401,901,237,277,752,56,342,160,817,244,758,402,308,899,143,89,206,216,569,421,615,61,535,45,18,316,127,164,579 }, +{ 23,13,51,1,15,5,2,7,0,21,180,6,115,12,141,9,165,3,197,457,202,4,14,352,719,48,33,32,16,269,37,217,341,8,11,401,120,318,308,22,386,77,31,18,128,752,40,110,260,10,28,453,730,93,137,498,901,403,391,153,82,317,365,117,44,102,17,523,961,569,64,450,509,72,99,49,134,36,758,59,98,221,24,629,89,30,351,475,196,326,125,177,494,291,90,421,237,29,899,203,35,39,247,864,817,95,372,96,349,20,116,854,65,38,54,160,19,144,57,86,244,304,873,55,342,373,350,316 }, +{ 219,258,127,276,98,944,395,201,567,284,131,293,935,860,116,662,295,224,737,105,578,576,242,403,843,371,137,551,272,456,512,421,51,31,475,716,202,697,261,44,492,187,924,616,268,9,49,326,206,254,144,299,39,385,22,115,916,805,93,699,308,203,943,159,160,761,836,763,125,23,13,0,332,453,401,386,36,120,28,770,141,21,327,615,384,393,282,958,221,318,494,367,365,143,217,128,434,64,692,940,10,244,110,617,301,911,55,964,730,320,5,966,523,86,719,623,457,96,95,1,269,317,24,670,197,859,842,286 }, +{ 16,35,60,18,7,92,20,14,118,0,68,126,71,28,154,24,107,43,158,22,2,109,49,55,677,168,185,1,97,6,121,12,21,175,10,5,159,703,150,202,169,105,191,942,95,38,494,279,37,137,23,13,9,329,230,140,628,48,69,420,32,553,124,326,167,128,403,120,747,101,74,51,108,925,31,65,66,621,246,475,29,46,36,576,344,52,419,25,575,81,104,98,375,173,570,421,346,39,265,199,86,50,671,269,424,362,58,318,54,450,44,149,125,143,817,566,615,302,61,439,260,453,170,165,493,402,67,286 }, +{ 728,531,160,93,373,574,559,717,120,860,533,295,269,260,318,926,851,434,258,36,902,137,251,332,617,141,201,261,699,206,384,940,968,843,816,345,352,244,187,839,564,55,776,661,144,959,871,116,64,219,44,473,489,268,535,203,10,567,31,911,498,143,896,110,679,450,523,224,824,800,197,164,276,601,351,406,662,202,873,752,943,317,365,169,855,228,704,282,131,180,253,326,82,954,1,669,125,854,367,901,98,217,165,417,817,341,86,442,831,8,898,642,284,13,127,876,237,21,947,864,22,83,23,748,418,115,946,868 }, +{ 28,9,0,1,22,109,49,39,83,55,12,158,67,96,69,5,35,30,65,95,168,323,159,128,185,238,21,50,36,105,2,24,160,23,194,208,103,7,68,169,137,218,141,48,37,505,16,420,51,13,202,86,251,285,18,114,269,31,115,531,124,10,289,418,101,402,797,154,433,32,99,175,64,866,735,252,180,646,272,100,286,480,503,54,333,533,244,14,344,131,352,44,318,127,98,327,6,346,217,570,254,197,237,181,657,800,535,745,374,4,335,75,317,165,281,756,143,584,757,419,532,345,956,365,223,831,403,341 }, +{ 23,13,51,5,141,21,1,165,202,2,15,32,12,197,115,180,7,0,48,269,120,9,4,6,453,386,403,318,308,401,37,457,14,33,137,352,64,3,125,128,523,16,31,93,391,260,730,719,475,341,450,237,99,18,82,110,11,10,44,77,326,421,8,217,494,40,28,90,102,59,49,17,117,36,98,30,221,899,247,317,22,365,72,153,509,24,196,351,39,498,569,629,752,89,116,134,177,203,20,373,96,961,901,372,817,241,291,45,86,57,19,61,76,304,38,758,468,65,50,160,105,144,55,402,29,244,216,25 }, +{ 5,21,13,49,23,43,32,20,48,14,7,51,97,107,61,115,38,713,22,24,1,12,70,46,652,955,142,58,16,590,0,626,197,2,640,147,64,279,581,132,350,150,121,303,81,493,340,888,841,104,36,60,87,18,95,345,92,241,296,221,509,98,349,308,622,91,202,195,638,141,125,35,408,407,156,379,269,146,66,28,31,9,786,534,17,128,903,929,518,178,29,354,4,108,105,263,522,687,247,65,259,850,126,44,237,199,54,774,535,271,260,50,347,6,446,318,159,90,10,288,137,783,360,76,223,598,55,586 }, +{ 9,28,0,39,101,30,49,35,68,1,67,166,175,83,22,158,100,252,141,55,88,69,65,109,36,23,180,217,323,115,64,269,345,103,21,124,10,317,13,251,289,238,364,498,154,352,230,5,419,131,190,31,7,51,194,48,50,346,96,128,439,159,160,105,202,24,274,143,952,95,16,168,12,646,341,254,752,86,868,365,637,596,244,127,137,570,433,318,418,114,864,208,44,37,503,404,372,2,32,344,197,333,116,532,218,77,98,187,237,164,125,723,535,443,480,169,265,901,189,310,221,420,336,873,797,403,402,285 }, +{ 260,120,450,351,854,82,269,922,5,32,13,125,33,23,202,291,165,21,197,77,137,1,141,203,457,349,318,51,4,326,177,144,180,753,730,275,386,523,817,237,116,217,373,719,403,98,93,31,372,128,241,115,12,899,704,341,304,196,102,44,40,391,48,2,342,898,954,864,801,494,284,208,110,76,59,365,352,285,207,947,758,663,615,599,558,492,482,456,408,350,263,210,201,160,64,57,49,19,18,16,14,11,10,7,6,961,317,361,37,968,752,661,498,475,453,402,323,300,293,268,244,206,154,127,105,96,95,86 }, +{ 121,16,60,363,35,18,101,20,167,68,621,259,126,191,604,407,107,132,55,364,43,146,199,252,7,14,92,419,590,147,212,71,9,326,5,463,520,21,694,917,465,24,354,446,647,109,13,271,682,0,28,22,120,203,10,97,806,821,48,169,77,279,727,362,2,346,195,581,640,932,178,589,118,115,102,125,23,202,51,439,941,907,848,411,450,33,857,427,634,165,553,154,108,180,39,494,325,185,373,329,142,475,265,818,49,342,158,967,403,260,1,523,374,612,110,962,12,534,955,37,615,376,150,793,692,562,137,638 }, +{ 23,13,51,5,1,12,2,141,15,21,115,0,202,180,7,32,197,3,165,4,6,9,401,37,269,14,308,457,352,11,318,453,341,386,120,403,10,16,33,22,8,719,18,391,40,31,77,48,217,28,137,17,99,365,523,475,569,128,730,44,93,59,260,102,498,450,90,49,509,24,30,317,110,752,421,64,247,125,72,82,237,221,177,629,98,351,961,494,153,36,89,19,117,758,901,373,196,326,57,38,39,29,20,65,546,304,134,116,95,899,817,139,372,76,35,55,316,241,291,468,482,203,144,210,45,402,873,54 }, +{ 201,144,206,443,418,332,203,435,330,96,494,326,473,372,335,269,434,268,187,403,822,817,459,1,88,498,564,384,839,382,617,367,83,264,934,559,295,276,30,717,344,521,141,831,321,274,44,202,576,31,9,686,709,190,100,921,699,812,252,55,230,137,208,450,616,457,284,180,128,93,28,859,410,966,228,265,456,352,69,523,318,244,158,795,961,747,735,662,584,531,421,855,213,168,960,225,478,959,899,716,578,577,489,466,417,291,223,116,36,35,23,13,954,952,237,800,349,285,77,744,866,772,752,346,197,166,98,32 }, +{ 44,276,31,116,201,284,662,567,131,489,144,268,295,434,918,30,9,39,98,137,187,219,299,224,935,367,49,384,385,36,93,22,28,0,244,261,141,127,492,699,203,110,254,1,202,836,160,442,253,258,105,96,64,269,393,51,128,371,125,23,716,55,86,318,326,10,908,120,206,940,855,77,143,190,827,13,21,228,352,217,100,35,159,48,165,115,272,944,373,948,260,617,829,102,197,166,578,737,83,16,332,293,95,717,450,24,523,88,180,403,109,18,177,37,164,5,899,242,959,613,730,285,291,15,7,616,911,473 }, +{ 520,664,478,604,759,264,167,1,724,777,9,647,411,682,48,806,936,363,101,223,265,410,21,68,118,252,100,907,848,447,772,98,96,781,0,212,88,905,16,821,39,925,917,23,329,909,382,18,166,942,125,191,639,221,13,24,51,676,124,932,321,897,621,628,521,5,71,154,69,31,30,815,686,293,541,49,284,271,60,593,765,55,32,812,404,435,335,807,163,562,44,834,553,35,691,65,364,763,105,83,146,28,127,274,10,158,7,190,393,64,238,213,419,67,701,421,354,33,22,254,697,149,116,272,201,115,77,144 }, +{ 70,23,87,21,60,75,163,182,267,92,291,120,115,107,146,379,195,132,446,795,937,246,126,121,98,71,48,18,7,415,931,566,232,133,51,24,125,371,821,668,535,411,401,340,318,308,221,116,77,44,40,32,11,4,281,850,293,563,537,407,273,217,202,199,140,13,5,807,197,64,591,385,33,883,386,626,687,891,823,820,770,766,754,743,670,658,633,627,615,598,551,545,541,458,394,392,372,364,361,349,342,338,333,330,301,284,283,268,264,216,210,105,102,100,95,49,35,31,866,774,597,498,335,244,238,237,160,2 }, +{ 39,9,737,127,0,310,98,827,846,395,100,31,371,916,254,265,385,105,272,101,18,30,836,1,242,166,44,512,16,557,116,252,131,578,938,931,137,93,301,28,125,68,333,24,51,404,23,120,286,616,856,35,299,21,55,13,64,202,593,716,128,96,48,326,329,219,260,158,7,110,264,5,688,456,77,203,165,36,49,373,924,761,442,118,863,639,144,518,318,284,228,88,438,60,327,363,12,450,33,190,82,10,411,731,102,65,293,109,455,95,170,908,599,623,494,115,478,187,141,2,14,22,812,685,276,403,935,197 }, +{ 107,126,279,20,43,356,362,92,7,359,16,598,683,595,246,441,60,392,939,653,399,35,199,319,125,649,97,259,414,71,0,493,121,858,230,150,140,232,191,49,48,14,702,173,575,68,95,298,422,674,18,64,98,590,147,22,612,118,28,24,672,104,819,407,345,146,77,660,695,10,953,375,423,31,945,314,293,33,640,23,115,93,158,44,167,149,132,154,21,783,5,175,81,807,508,376,105,109,59,13,40,391,779,387,237,124,589,470,55,426,4,330,727,729,51,427,169,120,796,223,91,189,446,117,153,541,463,755 }, +{ 206,417,93,959,728,559,499,473,137,120,8,564,141,244,260,253,450,31,44,10,269,352,203,318,373,143,341,202,638,116,752,180,144,951,940,326,268,110,160,851,115,922,127,98,717,642,384,125,434,64,13,36,51,282,615,704,365,661,197,498,23,901,817,30,762,489,276,692,15,873,165,22,968,86,1,854,128,386,299,105,217,811,55,0,242,421,317,351,523,367,237,911,21,170,49,77,9,349,391,28,509,479,187,177,82,201,576,285,164,898,492,401,96,456,291,569,494,800,338,33,32,5,39,372,12,261,295,293 }, +{ 259,465,147,581,534,132,590,687,146,427,199,279,941,195,955,640,786,107,178,522,798,121,929,362,150,5,198,325,626,142,35,21,878,376,407,360,167,48,271,1,423,10,70,20,13,126,77,22,125,98,493,31,163,49,212,202,0,105,43,783,33,14,156,345,883,102,612,767,28,97,660,346,470,221,23,450,60,12,771,92,191,379,120,591,2,467,318,9,32,61,4,535,128,153,117,116,562,95,953,18,115,595,159,494,17,371,44,293,818,58,165,51,7,68,354,246,234,269,87,342,845,196,260,72,6,134,481,93 }, +{ 523,403,817,202,15,899,450,120,51,730,494,421,719,128,457,453,13,23,342,102,401,318,64,196,33,475,141,180,49,5,115,269,308,197,237,221,165,99,4,77,137,95,260,0,757,576,365,316,125,65,48,615,402,326,159,11,671,389,312,289,283,247,210,203,194,148,105,22,21,386,835,12,958,749,743,697,485,351,350,341,300,177,170,158,155,151,136,133,129,127,123,122,119,114,113,112,90,89,86,84,80,72,62,61,59,58,56,45,40,34,27,26,25,19,17,3,901,752,153,134,117,961,922,968,967,966,965,964 }, +{ 141,559,244,10,661,253,564,143,365,533,752,180,55,110,901,160,922,373,341,317,93,535,352,206,260,531,36,197,332,269,82,642,282,964,498,911,717,261,728,873,943,351,137,64,417,854,120,1,811,9,115,217,898,169,28,165,164,86,384,203,22,15,83,21,959,96,617,499,318,35,31,8,482,295,951,251,345,372,902,5,473,601,144,32,546,843,800,237,13,864,44,509,109,824,67,268,450,391,308,349,23,258,77,567,851,291,202,116,949,615,125,926,954,638,551,569,457,51,326,102,59,434,817,418,958,719,629,523 }, +{ 219,258,276,127,284,98,935,860,943,843,567,201,137,295,964,131,261,116,535,662,492,44,160,253,31,224,206,203,615,268,144,332,293,692,924,918,384,244,944,326,36,128,434,395,716,737,367,456,187,55,96,403,551,318,911,617,616,385,699,533,115,940,202,365,10,836,576,966,523,959,77,28,21,93,9,120,489,141,1,260,48,371,531,217,143,282,564,125,110,180,51,704,421,299,39,23,64,363,254,393,442,242,494,417,105,822,473,317,578,269,272,697,22,855,102,805,475,13,948,341,0,373,33,285,82,49,932,574 }, +{ 422,319,0,945,207,887,32,577,693,43,95,20,904,22,344,61,104,804,707,306,426,124,5,725,7,241,153,325,316,49,715,414,113,671,115,239,263,329,173,198,180,102,18,365,117,83,24,33,376,510,942,355,324,140,134,69,21,9,232,77,76,240,237,196,189,177,160,158,36,10,835,292,341,526,334,331,168,92,48,16,330,37,25,204,64,901,595,416,392,347,858,362,244,174,164,149,97,86,60,58,39,31,30,27,790,770,222,65,2,350,40,11,4,814,13,933,424,159,819,397,697,623,610,491,403,387,315,288 }, +{ 1,22,12,5,2,0,36,21,28,49,105,86,95,37,55,9,7,48,23,32,141,83,10,51,31,96,269,202,13,128,50,4,160,239,208,318,14,168,159,6,3,170,44,67,164,54,115,285,99,35,109,98,244,180,64,137,402,65,24,127,16,352,320,18,197,69,323,30,158,11,169,301,708,678,238,312,77,717,597,39,143,165,584,194,125,17,253,217,341,735,281,114,116,218,654,181,403,237,424,103,347,317,185,177,45,401,15,776,242,29,46,72,68,418,498,433,223,33,569,901,480,531,40,657,365,800,851,8 }, +{ 15,13,2,1,5,23,3,0,4,7,6,51,115,9,10,12,197,11,14,77,22,217,269,8,165,31,961,33,457,202,32,180,21,341,40,141,120,102,177,16,569,453,28,318,317,17,260,291,44,365,93,37,117,134,110,30,352,18,403,719,153,196,49,401,59,475,901,36,326,98,64,304,386,125,498,730,349,494,450,137,48,247,95,90,523,308,752,24,128,210,111,99,82,139,372,203,873,57,76,116,237,342,72,629,351,391,482,509,19,421,39,144,373,35,55,216,89,275,437,817,20,86,105,56,899,96,38,65 }, +{ 23,202,77,51,13,120,1,141,15,326,180,269,260,137,318,102,450,5,128,21,110,217,291,165,197,352,115,317,373,2,48,12,7,0,523,33,203,386,403,9,96,64,93,342,6,351,82,32,14,457,177,16,36,817,349,752,494,37,4,475,18,210,901,854,341,285,615,59,275,90,498,50,244,160,391,453,99,308,86,10,365,401,22,719,922,8,221,24,730,28,704,402,421,11,125,83,67,237,661,3,40,898,30,153,35,961,31,196,65,253,39,576,17,44,247,20,569,300,95,49,899,116,509,473,117,143,70,372 }, +{ 15,1,0,2,51,13,23,5,7,180,9,6,12,4,115,33,197,523,21,120,3,8,14,457,901,165,351,141,450,260,202,365,341,82,16,40,730,31,37,308,719,401,77,93,44,18,10,899,64,453,403,32,137,317,386,217,36,48,110,98,475,102,326,28,22,128,269,30,11,116,569,421,352,318,817,752,24,196,961,221,99,39,49,144,153,629,55,89,17,203,373,35,117,59,801,898,291,873,177,509,86,125,494,244,95,160,482,134,498,854,72,372,96,615,349,468,38,143,758,237,90,127,391,54,342,670,734,247 }, +{ 16,24,18,92,35,71,60,7,75,126,140,108,50,132,9,21,68,121,14,246,13,0,146,23,267,1,48,128,220,107,70,230,150,32,12,199,118,5,394,181,87,137,537,46,51,133,269,189,141,54,64,22,167,10,202,156,2,330,281,820,171,77,99,291,774,217,177,349,58,65,39,37,103,69,163,28,95,67,622,318,309,633,86,236,101,360,372,6,563,36,195,304,115,38,641,314,30,149,522,232,20,591,352,354,49,545,55,98,571,271,317,526,649,407,672,278,100,640,586,45,223,114,31,678,430,237,388,328 }, +{ 180,341,901,15,1,365,5,2,0,4,197,7,6,115,3,752,10,13,569,317,873,23,165,8,55,141,9,143,44,93,31,498,217,51,638,253,509,308,352,12,22,401,244,36,116,33,21,11,206,64,144,120,951,391,629,137,16,37,86,372,269,125,734,386,134,110,351,40,18,421,417,260,77,282,117,326,268,499,102,457,164,318,482,373,237,203,170,127,95,35,661,642,82,202,177,559,468,261,201,196,160,221,105,961,32,28,854,551,169,24,349,811,762,728,564,338,14,242,717,291,109,153,139,128,403,312,437,851 }, +{ 9,0,101,175,35,28,39,68,364,67,252,65,124,289,158,336,154,166,83,55,100,114,439,103,419,69,49,194,346,1,30,189,345,570,109,88,22,168,64,251,50,16,547,36,230,96,596,133,389,868,265,238,149,86,429,24,694,21,128,218,637,399,141,703,23,646,51,826,13,671,208,677,159,706,95,137,7,797,505,610,237,12,115,756,10,404,484,131,768,190,2,333,71,164,18,799,329,323,344,967,283,202,274,420,782,930,48,105,286,140,217,702,480,143,212,54,37,962,269,14,857,185,310,532,254,535,197,118 }, +{ 64,115,180,197,237,165,391,247,217,352,386,316,304,32,90,13,21,468,95,72,317,76,498,89,365,291,141,125,22,509,349,288,179,86,546,98,372,23,341,225,437,49,116,569,645,796,923,459,18,411,308,177,48,640,4,586,490,16,5,12,591,312,241,933,117,35,65,134,482,752,672,269,164,77,156,302,71,1,264,873,410,321,118,446,360,271,102,59,24,682,674,246,953,88,149,751,51,521,92,823,447,144,864,37,7,11,695,702,166,781,698,662,647,588,458,403,401,363,283,239,216,194,170,153,57,33,28,17 }, +{ 15,13,1,2,5,23,0,4,7,3,115,6,51,217,9,12,197,10,141,21,11,961,457,180,8,341,77,33,165,22,14,32,31,317,202,120,40,37,177,260,16,102,93,269,901,365,352,28,44,247,318,18,117,110,134,17,386,569,372,719,752,59,48,30,36,498,153,403,196,49,450,291,82,72,125,137,304,128,453,391,730,401,98,873,349,373,523,139,509,24,64,326,39,90,475,111,99,308,899,116,95,89,482,203,351,210,86,922,144,437,629,55,57,421,148,494,342,854,35,76,20,179,817,758,275,105,237,216 }, +{ 132,199,146,121,407,60,493,279,640,598,534,522,195,581,590,955,360,126,259,107,150,783,362,35,5,156,271,49,167,939,18,16,147,612,941,591,467,21,883,465,423,929,0,10,191,92,22,298,441,356,446,13,70,48,7,31,626,28,77,24,32,296,178,97,212,33,354,108,608,786,623,68,345,586,727,660,71,649,687,102,163,125,9,105,115,683,55,4,463,379,75,23,87,98,14,953,293,159,50,44,818,761,376,61,246,40,64,763,713,109,1,120,117,767,359,427,95,101,20,344,58,43,607,221,575,663,142,153 }, +{ 28,1,0,22,9,24,65,55,12,5,67,36,96,83,114,50,18,16,2,14,35,103,21,109,49,48,7,218,160,54,124,69,433,37,281,238,23,10,181,51,223,133,137,39,154,745,68,58,99,480,202,13,95,86,75,128,657,115,283,532,285,46,32,163,323,822,38,141,175,547,30,389,766,108,45,168,646,64,194,429,158,169,185,155,361,505,418,70,420,800,531,105,208,502,269,430,6,101,71,866,318,765,402,289,838,398,149,31,251,221,29,484,757,543,4,3,533,308,180,503,17,403,72,754,171,118,217,89 }, +{ 93,120,957,968,459,77,30,160,352,217,473,110,102,372,202,373,613,291,137,260,190,752,704,141,317,31,318,961,269,177,44,326,203,851,330,863,450,264,321,265,228,224,728,457,304,247,88,924,116,840,800,219,144,365,197,115,28,187,717,49,39,944,559,908,829,406,934,349,213,916,244,131,64,225,36,98,82,9,730,403,342,275,210,180,109,100,86,33,938,855,55,831,521,367,719,10,661,165,922,935,258,839,918,864,669,539,351,274,196,166,83,341,15,959,822,772,617,285,897,531,410,716,686,478,871,251,901,836 }, +{ 15,0,1,13,9,23,2,5,51,7,12,6,120,4,8,10,102,197,523,901,341,180,14,260,115,82,77,141,33,165,3,16,21,18,202,59,450,22,403,457,110,817,93,475,64,351,11,453,137,37,401,898,421,128,28,40,719,31,961,217,36,48,569,365,30,125,269,308,318,373,203,317,210,32,494,98,44,116,730,352,24,86,49,326,386,117,342,854,95,629,17,153,144,55,391,177,922,899,99,291,237,143,196,39,805,134,221,96,576,670,139,752,35,253,244,661,300,50,57,127,402,65,638,349,19,498,206,111 }, +{ 206,417,244,499,141,253,44,8,137,559,269,144,93,10,31,728,116,564,203,143,268,352,717,638,120,260,160,752,951,318,384,341,180,282,373,959,434,127,110,197,202,125,851,64,36,901,642,473,498,326,332,115,165,450,201,98,873,242,922,23,22,1,217,261,276,762,55,13,489,86,661,51,317,365,15,940,898,811,82,855,854,704,9,295,0,21,372,164,351,37,968,187,569,367,911,5,576,28,617,401,237,170,615,128,776,349,7,48,105,421,479,386,16,96,95,299,291,12,258,824,864,308,817,2,30,403,49,692 }, +{ 530,840,254,228,406,829,669,613,827,96,21,48,51,31,23,960,137,224,219,1,166,131,39,98,679,438,310,190,856,116,93,403,274,221,144,127,258,846,36,202,180,938,688,120,318,765,421,385,931,317,475,13,77,816,876,105,44,187,30,115,5,625,203,125,752,442,141,32,367,308,365,284,924,778,341,842,50,28,268,333,242,217,860,160,100,22,616,539,110,88,871,159,37,345,9,165,33,839,332,299,83,574,351,576,68,404,371,10,518,326,82,748,716,863,492,578,401,265,456,102,269,656,128,926,557,531,498,494 }, +{ 15,13,197,457,0,719,23,8,730,1,82,165,120,134,9,10,5,180,2,141,7,12,115,51,260,901,4,899,351,6,341,352,33,3,22,386,450,31,202,11,117,569,523,269,128,93,18,898,44,110,758,28,752,373,365,64,30,961,77,318,498,873,21,854,111,49,102,37,16,40,99,137,125,317,14,391,55,217,24,116,326,98,403,474,36,494,482,817,509,372,35,661,277,139,922,615,38,801,203,143,291,153,475,86,453,253,629,304,148,437,402,237,48,642,954,564,864,431,244,95,242,144,39,401,72,17,196,958 }, +{ 68,0,16,24,35,9,252,71,419,18,28,101,154,158,109,124,118,60,39,55,329,364,333,49,65,677,346,22,7,185,265,149,159,175,169,191,810,302,553,100,14,92,344,108,439,671,703,793,105,168,375,286,272,327,374,21,694,706,1,10,67,126,254,634,310,95,212,289,701,2,48,167,150,455,166,627,577,30,747,420,273,538,46,69,962,36,51,23,424,13,12,64,857,429,593,96,5,570,925,86,917,199,37,125,31,50,83,826,628,912,107,239,604,98,638,114,688,221,967,131,709,137,170,336,140,20,589,128 }, +{ 51,1,23,13,15,180,120,2,5,197,202,141,0,7,21,165,260,326,33,9,4,450,12,102,6,523,48,386,115,403,269,137,457,352,14,318,16,128,110,77,3,40,196,32,18,93,217,82,317,37,341,8,817,96,31,401,453,36,752,342,351,44,719,203,901,28,475,221,421,365,64,730,24,391,153,30,308,373,10,494,22,615,59,11,39,99,98,50,116,899,498,961,177,372,291,35,854,144,509,244,17,49,922,569,86,72,247,65,349,125,160,210,482,127,117,402,20,134,55,873,38,83,898,67,275,88,285,237 }, +{ 535,253,352,564,365,110,82,180,854,341,10,533,873,55,244,898,752,901,143,642,141,559,498,36,317,951,638,160,661,115,197,282,964,137,531,165,634,351,64,308,164,217,169,206,417,811,86,499,482,28,332,125,373,509,15,569,93,546,83,728,762,965,96,22,468,601,260,911,269,717,9,349,922,109,345,800,291,734,31,23,338,170,1,372,538,629,221,943,8,120,261,44,21,318,743,494,401,128,202,13,822,579,403,251,617,959,719,770,67,864,219,185,127,117,48,286,384,299,730,475,453,402,350,69,421,391,98,39 }, +{ 31,125,44,116,338,64,242,55,164,36,299,1,237,86,456,10,22,558,506,144,498,492,13,23,762,170,268,143,206,685,93,870,180,844,599,5,903,546,197,115,2,203,509,169,479,165,141,127,0,352,253,393,752,740,8,137,12,51,28,341,391,638,7,244,9,457,160,367,873,98,128,384,951,963,282,202,918,21,269,37,6,105,569,629,434,365,120,301,4,708,318,3,417,489,923,901,719,317,308,401,386,535,217,14,15,734,95,551,634,499,208,533,332,49,758,83,824,961,730,239,776,601,523,751,948,717,864,654 }, +{ 23,13,51,4,115,202,5,217,77,141,1,11,180,2,317,0,3,7,33,269,318,15,365,341,21,9,102,10,32,6,40,12,352,177,22,197,403,64,165,128,901,59,752,31,494,137,308,291,28,8,18,349,401,16,125,90,30,14,237,498,372,93,37,98,153,49,453,17,36,873,44,475,457,39,342,196,210,24,48,326,569,386,421,247,95,203,120,509,275,116,391,961,117,244,110,143,57,304,144,216,482,719,134,139,468,86,523,55,221,450,67,76,50,253,35,105,260,65,437,373,730,72,859,629,46,692,576,111 }, +{ 39,9,166,364,68,101,158,333,0,154,562,28,404,30,65,124,252,35,175,274,344,310,190,706,49,289,570,100,168,438,694,419,346,703,826,55,16,24,439,21,88,149,254,577,429,810,109,159,962,857,671,212,455,656,22,610,95,194,1,336,747,13,125,67,36,131,530,865,48,71,625,793,10,589,23,64,841,265,484,539,86,224,558,350,69,237,420,51,835,96,272,105,406,677,165,228,83,18,31,141,114,286,557,221,347,115,137,169,722,778,7,391,98,818,816,308,840,634,709,44,185,128,960,777,143,258,669,60 }, +{ 15,341,13,33,23,77,141,4,0,351,1,260,102,51,82,9,40,349,854,11,115,217,269,137,180,202,922,5,901,22,10,117,21,365,318,197,120,352,64,12,7,153,177,59,291,32,128,2,165,196,372,36,403,317,457,28,18,8,16,304,30,14,450,31,898,37,3,752,48,134,139,494,421,6,453,401,719,90,86,569,523,110,24,55,475,210,49,44,386,17,730,95,247,244,961,143,125,308,342,817,629,98,498,93,96,76,39,275,509,326,99,285,373,57,237,35,402,160,111,253,105,391,221,116,899,72,127,661 } diff --git a/external/bc7enc_rdo/rgbcx_table4_small.h b/external/bc7enc_rdo/rgbcx_table4_small.h new file mode 100644 index 0000000000..30ccc709aa --- /dev/null +++ b/external/bc7enc_rdo/rgbcx_table4_small.h @@ -0,0 +1,969 @@ +{ 202, 120, 13, 318, 15, 23, 403, 450, 5, 51, 260, 128, 77, 21, 33, 494, 515, 523, 4, 141, 269, 1, 2, 700, 137, 49, 48, 102, 7, 64, 753, 82 }, +{ 13,141,23,217,115,51,77,2,64,21,0,4,5,317,137,269,202,33,318,7,291,352,9,10,3,180,32,6,365,102,341,349 }, +{ 29,58,262,1,52,74,6,171,5,287,151,334,27,500,75,26,331,223,53,635,220,19,50,45,46,17,14,396,163,409,324,70 }, +{ 40,51,33,453,14,23,62,56,12,196,730,475,153,99,403,775,117,130,585,34,4,17,162,11,139,57,102,38,108,47,123,440 }, +{ 33,23,51,13,102,64,202,128,12,40,15,196,153,10,1,2,77,99,141,0,515,5,117,3,120,403,700,165,22,14,269,453 }, +{ 13,23,51,4,77,141,202,33,115,64,32,128,0,11,177,40,15,102,2,217,7,137,269,21,90,59,515,1,180,403,22,6 }, +{ 26,235,19,47,648,624,78,145,27,112,122,64,444,6,630,453,25,42,65,130,711,85,390,113,416,108,665,29,730,138,644,95 }, +{ 64,141,352,751,217,247,237,437,177,269,86,954,947,875,32,318,95,77,304,92,597,180,232,291,128,864,349,588,372,202,312,1 }, +{ 642,898,180,638,901,341,82,197,10,951,15,515,165,762,700,253,811,753,752,365,143,479,244,569,8,110,351,873,55,31,499,116 }, +{ 221,23,51,125,438,254,13,21,39,49,308,656,0,115,530,159,158,401,30,166,912,386,165,688,518,9,105,627,424,22,421,33 }, +{ 143,31,1,44,197,8,180,125,116,55,13,498,23,341,638,242,93,15,2,141,0,901,752,115,36,206,165,479,338,365,515,762 }, +{ 12,23,51,13,14,15,37,99,515,38,700,117,2,196,134,153,753,64,54,33,128,120,21,0,328,5,139,82,453,719,457,1 }, +{ 13,15,23,515,961,700,457,753,51,115,4,165,197,2,38,569,1,474,0,37,99,719,5,12,629,14,11,3,33,77,64,10 }, +{ 15,515,700,753,1,0,2,4,3,23,134,12,961,5,10,197,11,33,82,120,457,51,165,7,6,341,217,21,77,9,40,180 }, +{ 13,51,23,457,719,961,730,401,165,453,0,117,386,15,134,1,758,153,12,54,515,99,11,2,700,5,753,4,308,33,6,899 }, +{ 134,898,82,117,13,33,77,102,23,260,341,351,120,901,197,153,961,111,196,110,180,457,854,10,450,8,165,40,4,115,0,365 }, +{ 60,18,126,167,35,16,191,71,24,92,121,271,68,107,212,146,118,150,199,7,21,1,9,575,727,5,566,48,0,132,108,273 }, +{ 62,136,129,123,128,41,162,17,249,211,214,789,618,710,38,678,248,507,57,64,152,269,119,3,177,183,597,106,4,179,216,90 }, +{ 403,523,51,475,494,453,817,899,202,23,450,13,421,120,102,730,33,128,4,1,805,5,7,153,757,260,318,196,77,457,326,65 }, +{ 4,59,3,62,12,33,56,193,27,21,102,17,40,77,76,84,32,0,6,123,119,177,128,11,18,611,605,25,13,51,73,210 }, +{ 43,20,319,422,414,945,0,7,819,61,5,376,325,173,804,904,470,693,97,707,14,49,22,104,147,107,95,32,426,1,330,577 }, +{ 13,23,51,2,0,115,4,141,217,33,10,77,1,15,64,180,3,515,7,6,22,102,11,5,40,9,165,700,202,197,317,341 }, +{ 28,49,0,105,1,24,65,159,35,55,95,239,16,2,109,7,9,14,170,320,347,168,424,158,10,301,124,5,67,21,64,36 }, +{ 15,515,700,753,0,1,13,2,117,4,12,10,5,165,457,3,9,134,11,7,6,51,77,64,961,82,33,197,14,341,120,141 }, +{ 7,71,14,149,97,18,60,16,150,92,398,189,140,124,24,273,35,2,69,302,154,68,0,336,517,43,66,28,118,251,230,1 }, +{ 4,102,33,77,40,59,11,624,210,12,128,342,5,503,91,139,64,32,25,494,202,678,416,0,403,275,21,450,196,318,523,177 }, +{ 25,19,42,6,122,813,256,235,85,26,436,53,297,573,680,390,445,63,27,416,80,233,65,73,389,283,45,605,194,17,250,343 }, +{ 402,102,202,128,33,300,403,23,12,77,40,21,342,117,483,99,25,494,6,4,63,32,84,569,139,757,475,318,19,26,196,134 }, +{ 158,9,0,109,39,49,65,22,35,168,55,24,68,124,159,16,185,344,333,154,254,272,175,289,1,577,95,28,105,810,30,169 }, +{ 197,180,115,237,498,165,2,5,287,546,400,3,61,34,509,13,297,80,341,52,45,186,58,881,23,873,468,176,64,17,311,250 }, +{ 120,968,373,260,704,110,450,202,137,318,77,95,269,326,217,717,661,652,851,349,93,1,518,98,827,291,21,177,82,33,848,719 }, +{ 44,116,144,268,434,489,367,384,98,127,918,93,948,31,206,940,855,0,203,137,9,22,617,141,332,105,393,492,959,282,299,131 }, +{ 13,77,23,33,51,0,64,141,102,4,2,115,1,6,202,15,10,128,269,7,177,180,3,40,22,11,515,217,117,318,700,137 }, +{ 15,515,700,753,4,11,141,40,165,23,64,180,13,202,32,3,51,125,5,197,21,128,0,93,77,1,120,82,269,117,110,59 }, +{ 176,231,585,62,34,14,412,161,56,236,527,57,17,3,51,202,4,23,369,283,128,13,472,440,84,361,136,457,381,130,719,53 }, +{ 9,0,180,217,237,101,141,352,88,100,230,64,175,317,115,498,68,39,30,1,702,83,213,36,365,208,752,13,252,321,952,546 }, +{ 28,9,22,1,49,0,109,39,83,95,86,30,13,105,128,55,141,168,158,67,31,159,208,12,96,5,185,2,160,64,137,23 }, +{ 72,4,38,12,51,89,477,11,57,76,401,308,23,474,99,148,413,179,59,13,431,152,54,569,17,3,205,629,197,421,405,15 }, +{ 457,13,23,961,15,51,515,700,165,12,753,629,11,1,719,117,0,3,2,37,569,197,40,328,33,5,153,134,99,64,38,196 }, +{ 254,100,310,9,30,1,39,625,166,265,190,0,272,557,131,731,31,98,578,688,404,93,101,88,49,21,127,264,44,36,252,478 }, +{ 51,23,12,13,15,128,99,120,10,202,515,153,64,82,700,33,165,2,5,117,403,1,141,0,3,196,37,453,753,197,260,93 }, +{ 38,99,542,139,453,117,196,23,457,13,328,111,37,134,961,11,12,51,40,775,587,401,474,54,153,477,41,629,33,475,14,277 }, +{ 6,85,25,233,343,91,26,63,138,29,19,65,283,4,81,235,42,122,605,64,648,256,174,370,74,389,718,59,45,194,445,416 }, +{ 49,5,97,20,197,21,18,193,0,64,408,729,173,350,43,422,165,7,14,104,61,32,509,713,523,102,120,95,125,397,35,232 }, +{ 144,116,268,434,384,489,367,206,93,855,940,44,98,332,617,127,959,911,137,282,203,31,22,219,141,9,131,276,417,0,1,120 }, +{ 17,106,64,62,32,255,136,292,476,162,129,241,123,141,41,237,720,214,209,352,519,211,186,148,752,247,507,90,21,77,197,119 }, +{ 2,29,52,50,5,58,14,6,27,1,366,357,45,53,17,19,171,151,26,181,133,38,218,764,287,583,61,113,3,487,600,281 }, +{ 130,59,196,412,381,730,711,236,77,210,202,402,453,99,401,108,361,803,291,283,153,4,57,51,128,183,14,719,503,117,23,11 }, +{ 13,23,51,141,77,4,33,64,115,0,217,10,180,202,2,102,11,9,15,165,40,21,128,352,22,7,197,3,317,515,269,1 }, +{ 23,13,202,51,120,15,21,5,141,1,128,269,137,515,64,102,125,48,98,33,260,523,318,93,700,165,450,77,2,12,403,82 }, +{ 1,2,14,46,29,67,38,52,5,171,58,24,103,69,96,70,83,181,54,75,163,223,16,45,112,309,155,0,186,35,18,108 }, +{ 15,515,700,753,13,0,1,2,153,5,23,10,117,3,9,7,134,165,12,6,341,33,4,14,77,457,115,21,719,180,217,82 }, +{ 197,165,509,13,391,180,308,115,23,546,5,498,2,29,3,401,901,61,34,80,14,457,250,569,237,873,38,297,45,15,468,386 }, +{ 19,73,27,250,200,714,444,472,26,53,34,17,813,322,283,390,128,297,78,123,432,14,436,136,106,690,57,122,389,80,503,3 }, +{ 3,17,21,45,62,32,38,12,155,14,2,328,5,99,401,536,828,13,227,488,106,51,719,119,540,76,165,221,115,629,209,41 }, +{ 115,341,873,197,365,13,901,180,569,752,317,1,10,498,143,634,261,0,509,15,943,237,44,31,116,601,165,127,282,23,141,64 }, +{ 453,51,23,403,33,421,475,102,15,153,196,515,13,700,117,523,12,40,753,21,4,134,0,494,670,899,22,801,730,10,11,401 }, +{ 23,13,51,33,12,117,153,134,453,196,15,99,515,40,14,700,128,102,11,753,77,64,403,202,0,401,475,37,65,2,3,38 }, +{ 2,7,5,14,70,1,29,61,52,45,6,112,66,16,21,32,592,46,38,135,87,58,186,315,290,128,113,0,64,48,227,23 }, +{ 33,23,102,51,128,13,64,202,141,1,77,10,153,40,196,117,2,3,0,5,15,269,403,12,137,134,318,165,120,6,453,99 }, +{ 16,92,7,20,43,35,126,71,60,14,107,18,68,97,0,121,279,149,24,246,191,48,118,575,55,140,362,783,230,150,375,566 }, +{ 13,23,4,33,77,64,51,102,141,128,32,10,0,202,40,115,59,22,90,11,177,21,291,6,7,318,180,117,137,2,95,165 }, +{ 507,162,129,41,4,211,62,38,123,59,57,248,183,130,99,11,3,361,202,17,402,556,266,305,803,210,128,184,152,136,313,117 }, +{ 643,123,193,650,802,18,25,389,718,256,65,289,84,91,619,511,415,90,235,63,57,510,324,216,862,102,6,183,108,397,217,736 }, +{ 13,23,15,1,515,51,0,2,700,5,753,165,141,115,12,3,4,180,21,197,457,7,6,10,120,9,33,202,77,32,8,11 }, +{ 23,51,13,453,64,403,12,21,5,202,128,475,165,141,523,95,125,115,3,1,4,730,120,32,2,494,180,719,457,197,450,401 }, +{ 204,74,135,66,6,174,192,7,138,172,85,353,348,580,280,97,95,500,29,64,426,32,87,889,65,81,25,2,52,43,568,673 }, +{ 35,0,68,69,24,9,1,16,65,103,149,133,18,114,28,50,83,2,189,7,46,14,101,336,175,124,251,55,71,218,38,238 }, +{ 16,101,0,118,9,18,24,68,35,154,71,124,60,212,191,520,55,806,694,167,28,39,364,375,1,346,252,65,604,302,22,21 }, +{ 0,9,16,35,1,24,68,18,65,21,103,67,13,149,28,189,71,23,101,238,114,7,335,133,486,141,22,212,48,50,30,118 }, +{ 13,202,23,77,33,51,128,5,21,141,115,32,102,64,4,0,318,269,10,15,291,2,494,177,11,217,3,515,22,137,6,700 }, +{ 16,92,60,35,7,18,24,68,150,149,14,71,0,375,97,126,118,107,230,191,246,273,140,55,175,653,9,575,2,28,566,517 }, +{ 76,90,21,179,316,148,205,32,464,288,184,257,245,1,89,2,460,57,152,45,38,358,645,5,12,449,350,48,37,17,4,14 }, +{ 19,27,26,813,80,297,17,495,436,53,73,200,4,378,250,59,106,25,45,128,361,42,113,469,122,390,77,40,736,6,11,136 }, +{ 6,26,235,138,19,145,112,70,331,262,25,42,52,624,27,453,122,47,500,78,648,85,29,2,630,632,409,113,50,226,108,75 }, +{ 7,16,14,24,92,35,18,2,46,9,60,140,0,87,50,5,54,13,12,38,171,23,126,21,58,64,1,70,128,71,220,163 }, +{ 90,205,257,184,32,179,460,5,245,45,2,288,769,524,57,21,152,229,17,1,497,4,292,59,619,452,432,76,476,11,266,14 }, +{ 15,515,700,753,4,5,11,141,13,1,33,3,0,128,202,23,180,21,2,64,269,32,117,134,120,40,102,318,153,17,137,352 }, +{ 47,130,711,108,453,412,730,196,390,283,78,27,51,183,381,236,128,200,719,14,153,472,503,34,59,250,3,4,57,803,123,432 }, +{ 12,277,51,474,111,153,23,99,13,37,961,94,629,542,569,431,79,139,38,134,117,453,33,188,196,40,115,15,11,157,401,515 }, +{ 17,495,469,106,26,378,80,27,161,483,19,742,527,436,383,862,73,136,53,814,297,6,119,84,62,56,25,3,209,611,4,128 }, +{ 81,681,636,91,0,750,370,104,718,138,18,693,173,784,29,397,348,74,192,673,174,65,6,207,64,280,306,52,671,32,355,319 }, +{ 15,515,700,753,33,77,4,102,115,117,40,13,1,153,134,11,5,217,23,196,2,21,3,317,32,365,0,341,291,59,12,51 }, +{ 0,9,28,35,68,1,65,67,101,39,69,175,16,238,13,22,96,124,18,24,251,30,55,12,23,2,50,141,114,5,154,103 }, +{ 23,33,77,13,117,40,11,102,64,4,51,403,153,453,10,0,196,134,128,65,12,291,86,99,95,59,15,141,202,180,137,719 }, +{ 214,90,289,6,874,64,25,65,235,42,751,249,256,312,194,85,746,875,174,32,525,288,519,835,247,348,233,544,217,524,437,352 }, +{ 1,22,2,0,36,67,28,5,49,95,12,50,168,83,105,55,7,9,14,194,103,23,114,21,584,46,10,13,38,69,208,159 }, +{ 269,141,13,202,33,180,318,77,291,137,102,352,128,23,349,51,31,217,372,317,125,197,44,21,11,5,901,1,18,0,4,494 }, +{ 435,144,274,88,203,418,30,1,190,410,96,778,100,530,521,326,466,795,686,166,960,321,382,264,367,822,131,31,692,9,213,93 }, +{ 76,72,90,21,37,179,12,205,32,428,148,38,308,405,4,413,57,184,749,245,316,221,54,645,288,1,152,155,464,257,2,14 }, +{ 77,33,64,102,13,141,23,2,40,1,51,10,0,115,6,180,202,128,4,3,177,269,15,7,22,165,291,14,217,318,137,11 }, +{ 397,81,4,32,65,788,693,804,681,11,249,21,91,64,690,494,3,0,422,56,348,725,194,123,23,59,523,319,61,510,95,90 }, +{ 60,126,16,7,92,121,314,246,35,107,150,132,14,146,24,18,199,298,232,71,359,140,672,97,392,649,5,423,95,21,22,388 }, +{ 15,515,141,217,115,700,13,23,120,317,753,180,33,260,110,137,341,51,1,365,4,77,64,202,0,40,36,352,197,269,10,21 }, +{ 111,134,117,474,23,13,961,12,569,431,37,15,51,115,515,700,277,99,753,38,197,405,457,4,72,94,629,45,11,89,54,148 }, +{ 23,13,51,5,1,15,2,21,12,202,141,0,515,165,120,32,4,64,700,3,115,197,269,125,753,7,9,128,6,180,453,403 }, +{ 13,141,4,23,5,2,115,217,202,51,180,137,269,352,77,1,317,3,21,318,0,15,9,64,10,197,11,341,33,515,752,7 }, +{ 165,125,197,13,391,21,23,558,48,380,97,120,298,33,14,426,66,115,32,386,900,180,6,98,357,237,326,509,51,278,221,457 }, +{ 120,82,15,260,515,1,351,77,450,700,13,21,141,23,753,202,217,93,110,33,51,854,5,128,326,102,137,180,817,48,269,352 }, +{ 23,13,15,51,515,700,961,753,0,457,1,2,4,115,10,453,569,5,33,165,11,719,14,40,64,197,3,21,474,629,38,401 }, +{ 264,166,39,30,9,100,435,254,93,921,190,363,1,625,411,382,897,656,203,478,404,812,438,110,473,88,18,691,156,141,274,272 }, +{ 9,0,252,100,166,39,101,265,364,68,88,329,520,18,419,676,118,167,404,604,16,1,21,30,212,158,553,49,382,274,48,13 }, +{ 15,515,700,753,4,11,141,5,3,13,202,1,180,21,2,165,269,23,40,64,0,318,12,32,128,51,77,117,523,197,120,457 }, +{ 24,1,2,69,35,16,67,18,14,50,0,46,68,9,38,7,133,71,83,149,28,108,189,218,65,114,238,29,75,54,5,96 }, +{ 90,289,214,64,874,13,77,712,66,751,4,23,51,192,32,0,202,194,312,177,33,65,234,104,875,288,59,5,835,416,102,95 }, +{ 0,9,49,127,98,31,301,28,371,159,1,395,512,737,158,761,916,623,16,44,242,39,170,18,293,105,24,272,101,22,23,385 }, +{ 17,62,136,214,123,129,32,292,119,209,710,106,141,162,128,64,45,4,77,249,11,618,211,3,207,130,519,183,38,177,21,269 }, +{ 5,107,581,356,279,32,441,362,493,660,13,298,0,534,49,147,21,22,132,121,97,423,7,590,259,683,14,786,126,508,60,246 }, +{ 51,13,15,730,453,23,515,719,386,457,12,700,403,475,899,1,6,523,753,421,99,401,165,33,2,19,361,5,0,670,120,27 }, +{ 49,28,9,159,272,22,254,131,158,327,95,105,0,39,35,168,347,286,374,55,65,627,424,912,68,578,1,24,239,175,688,169 }, +{ 15,515,700,33,753,4,77,141,341,317,1,10,13,180,102,22,40,117,115,365,5,901,23,197,134,11,217,351,64,82,21,137 }, +{ 134,15,13,515,23,700,12,753,51,474,37,961,197,10,457,569,4,0,99,2,115,38,165,153,94,3,139,11,1,82,33,5 }, +{ 7,2,20,58,5,14,128,66,6,29,32,43,21,52,16,38,631,61,74,97,46,135,113,25,202,192,13,0,884,45,112,87 }, +{ 77,13,33,202,23,128,102,4,141,342,117,0,269,318,134,22,11,21,32,153,403,291,49,64,137,51,40,15,494,5,196,98 }, +{ 2,1,14,6,46,38,29,65,5,36,67,0,103,7,22,86,133,50,108,208,52,83,24,323,283,69,28,18,10,25,23,75 }, +{ 15,515,700,753,1,5,4,2,3,13,0,11,180,341,12,33,10,197,134,365,77,23,21,901,6,117,165,7,37,32,17,102 }, +{ 203,268,206,93,417,940,31,8,120,137,44,499,959,473,202,692,728,559,0,260,10,326,141,564,817,127,341,1,450,22,110,23 }, +{ 15,82,515,120,700,0,10,753,33,8,64,165,110,31,260,93,13,197,23,22,40,4,351,44,77,9,11,153,102,51,1,196 }, +{ 60,0,16,7,14,43,20,71,28,10,2,22,154,18,13,24,92,1,51,576,35,615,805,925,68,126,124,149,97,64,23,55 }, +{ 19,6,26,80,5,84,27,17,25,2,504,129,45,240,56,123,4,119,618,1,76,106,64,51,14,3,128,65,32,710,0,42 }, +{ 15,515,700,753,13,4,77,23,33,51,0,5,8,10,11,31,44,1,82,22,202,64,110,102,93,21,291,40,141,180,9,49 }, +{ 195,98,271,223,132,167,146,407,1,360,121,834,393,591,212,199,293,259,522,107,354,147,156,191,807,590,48,18,125,16,765,541 }, +{ 128,202,77,210,402,318,33,102,6,40,403,29,342,269,196,757,99,139,2,111,42,4,494,117,275,300,13,12,678,0,177,122 }, +{ 13,33,23,40,51,102,4,117,77,64,134,0,128,153,202,196,453,11,15,12,1,22,403,141,59,14,10,475,515,65,700,95 }, +{ 7,16,14,24,18,2,28,0,92,71,1,22,6,35,60,20,168,10,154,118,5,302,124,69,97,109,703,158,420,12,149,66 }, +{ 15,1,515,23,0,13,700,2,51,753,180,5,120,165,197,21,115,4,33,9,141,7,12,6,3,457,386,202,260,523,8,31 }, +{ 60,107,121,132,146,126,199,279,150,92,16,649,441,35,955,7,21,0,423,5,18,195,598,298,493,356,32,653,22,362,953,10 }, +{ 31,44,98,276,284,299,116,935,9,201,0,131,39,127,144,662,1,137,371,492,567,489,93,254,49,268,22,28,30,293,434,737 }, +{ 13,15,23,515,700,0,1,51,753,4,2,10,77,202,5,115,3,165,197,457,9,12,11,961,33,120,22,141,180,7,6,40 }, +{ 123,162,184,257,17,183,229,130,129,3,84,136,99,152,556,383,57,497,12,205,4,62,56,452,80,266,128,14,40,119,27,106 }, +{ 196,33,117,40,153,23,134,13,51,102,453,0,15,475,12,14,515,2,22,700,4,21,753,64,401,670,730,1,9,11,10,99 }, +{ 224,219,187,131,258,385,442,871,836,31,98,908,44,574,127,944,137,839,116,36,613,1,254,39,926,160,829,96,93,371,860,827 }, +{ 121,195,156,132,146,360,590,407,786,522,883,591,259,929,626,941,150,687,5,55,296,379,467,178,586,465,279,21,1,13,60,354 }, +{ 2,1,14,29,6,5,46,52,38,19,114,75,26,65,108,96,25,50,36,70,103,309,17,236,218,74,12,86,0,3,10,112 }, +{ 15,515,82,700,120,753,10,0,8,197,260,165,351,64,13,110,117,93,31,1,9,33,22,23,457,44,450,77,102,898,40,49 }, +{ 7,66,97,2,172,74,226,52,29,135,192,232,43,324,92,5,38,20,222,14,6,568,87,107,353,620,580,16,138,174,448,32 }, +{ 62,129,123,162,136,249,618,183,507,57,4,152,17,59,11,184,117,77,3,128,211,41,130,205,12,40,33,106,64,229,38,313 }, +{ 1,13,15,2,4,515,23,0,3,115,700,5,51,77,341,141,753,180,33,217,197,202,901,6,21,165,11,365,318,317,10,102 }, +{ 6,26,235,19,145,47,112,78,64,27,453,95,29,444,25,624,85,108,648,70,32,130,74,42,711,630,632,138,65,122,113,730 }, +{ 23,51,12,15,13,99,515,153,117,10,700,37,120,82,165,2,753,64,128,0,403,3,5,1,134,197,453,31,202,457,110,21 }, +{ 16,24,18,71,64,35,92,7,246,146,9,108,60,118,199,5,140,2,267,0,230,830,32,133,1,68,50,330,247,563,36,12 }, +{ 15,515,700,753,0,1,13,2,23,3,4,217,51,5,115,8,9,180,341,10,7,6,317,77,33,372,901,197,365,11,120,165 }, +{ 234,639,178,202,77,142,5,455,450,49,416,0,147,427,198,21,315,329,13,318,325,557,120,344,113,259,22,128,61,105,23,494 }, +{ 1,31,36,44,141,180,55,2,64,22,98,116,13,352,0,115,10,127,5,164,253,498,237,165,341,197,4,86,15,170,125,23 }, +{ 15,120,13,141,23,260,217,515,1,77,51,110,180,700,317,82,269,137,115,202,21,753,64,5,351,291,0,450,352,93,36,326 }, +{ 26,6,112,396,19,145,25,122,648,287,42,74,624,222,416,45,138,66,644,151,113,651,29,573,64,280,445,27,525,85,70,58 }, +{ 156,360,5,146,121,21,271,522,354,132,49,13,18,195,16,340,60,591,446,586,727,0,107,407,167,48,1,463,199,566,32,23 }, +{ 5,61,49,147,178,612,660,120,21,182,23,427,259,683,33,4,77,70,13,3,376,98,64,0,481,344,48,595,291,263,141,51 }, +{ 89,79,468,179,358,205,94,405,115,498,72,180,365,431,37,111,341,734,188,317,482,217,11,4,245,152,413,216,12,474,490,752 }, +{ 24,16,35,68,18,71,7,92,0,108,9,14,118,101,336,175,375,302,28,124,154,55,149,60,398,1,65,2,140,273,345,230 }, +{ 51,730,421,801,453,386,23,523,13,475,719,401,670,365,899,403,115,457,758,165,33,494,450,6,423,805,629,56,569,514,958,388 }, +{ 113,45,6,311,29,2,151,614,145,491,112,80,5,27,61,74,315,66,209,631,19,25,58,17,73,26,1,243,70,64,611,287 }, +{ 4,339,188,471,11,59,79,12,377,94,99,33,77,102,51,111,37,152,13,961,474,542,40,342,3,23,128,403,202,177,184,57 }, +{ 15,4,515,11,700,33,82,40,0,120,753,10,8,110,13,93,23,165,77,260,64,31,22,51,44,102,351,1,125,9,197,21 }, +{ 16,24,18,0,35,68,28,71,124,118,60,7,9,55,14,92,109,101,419,175,22,252,154,375,149,302,158,346,2,49,1,126 }, +{ 17,45,227,21,106,3,2,243,209,5,48,32,221,62,207,50,29,186,290,270,263,52,14,496,400,119,46,255,54,430,38,721 }, +{ 340,354,586,658,156,195,698,668,1,296,9,18,883,363,447,379,303,98,411,13,31,163,51,5,371,48,919,846,121,21,360,70 }, +{ 277,153,111,12,23,51,474,99,38,37,139,117,41,457,79,453,542,13,11,33,134,157,629,188,961,14,196,401,102,569,15,94 }, +{ 0,18,16,159,49,24,9,105,35,68,7,28,22,1,60,344,55,101,109,2,14,158,13,23,71,118,455,286,272,424,5,327 }, +{ 0,105,9,49,16,18,158,28,518,24,101,320,1,68,170,301,272,127,7,286,35,890,109,39,159,98,21,344,31,55,371,23 }, +{ 141,1,180,15,13,2,365,217,515,352,317,115,341,0,4,5,269,700,23,21,3,752,197,77,753,51,31,901,10,202,8,64 }, +{ 4,23,51,33,19,17,102,153,485,880,40,403,196,26,300,453,27,117,78,0,12,200,47,5,11,14,342,99,53,77,475,2 }, +{ 62,184,56,440,130,229,183,3,556,152,99,162,12,266,17,548,136,57,305,161,123,14,452,4,383,403,257,34,40,84,33,139 }, +{ 13,23,77,141,64,202,33,51,269,115,0,102,21,4,217,128,5,32,318,137,291,9,15,2,180,10,3,317,177,515,7,6 }, +{ 1,22,36,105,170,0,86,2,31,28,239,64,55,5,10,98,9,44,127,95,654,67,301,143,13,12,49,23,320,141,83,21 }, +{ 15,515,700,753,0,1,13,2,23,901,5,8,51,82,9,180,457,4,7,12,3,6,10,120,341,141,22,898,197,351,115,260 }, +{ 1,39,274,98,100,265,190,30,438,310,166,223,88,96,909,31,264,625,530,9,382,812,21,252,593,0,254,539,44,131,23,778 }, +{ 18,212,167,118,363,1,447,411,146,60,271,16,781,121,647,9,621,562,21,478,664,68,815,5,354,98,48,101,24,446,777,463 }, +{ 24,28,22,0,7,1,2,16,14,65,35,49,158,95,109,159,55,105,10,18,124,9,67,5,239,149,12,289,108,68,21,424 }, +{ 105,22,131,272,286,98,55,239,1,31,320,9,127,327,36,185,28,374,86,219,0,64,187,44,578,164,224,913,535,115,601,13 }, +{ 22,31,28,301,127,98,44,0,105,1,512,395,9,293,109,299,95,338,239,125,242,116,36,320,55,841,900,685,599,23,13,763 }, +{ 2,1,58,29,5,14,52,46,186,334,45,155,151,50,400,75,38,69,502,61,48,227,223,7,163,17,262,67,549,21,70,113 }, +{ 7,107,135,232,97,14,2,92,66,16,172,192,278,387,298,356,38,35,448,52,46,43,60,29,20,126,324,526,357,359,64,5 }, +{ 20,43,104,426,173,7,560,414,707,784,319,81,0,861,422,819,38,74,715,52,376,97,879,32,330,22,49,64,66,95,192,526 }, +{ 104,74,636,66,204,0,355,81,222,25,29,319,145,784,20,65,90,4,174,194,7,64,6,746,138,173,750,715,91,43,192,32 }, +{ 0,9,101,35,68,39,65,28,252,124,67,154,364,336,100,166,30,1,289,55,149,346,16,114,158,88,439,24,429,22,570,194 }, +{ 57,14,4,231,236,585,176,59,369,23,361,13,719,51,300,342,12,457,56,3,62,38,202,401,34,46,2,322,11,215,210,507 }, +{ 1,2,15,3,141,0,515,5,33,700,13,64,77,180,6,128,753,10,4,269,102,202,11,7,134,197,352,120,117,318,12,291 }, +{ 5,1,21,202,13,32,48,23,0,61,259,22,494,120,70,49,51,18,137,128,465,12,178,115,2,453,403,141,58,3,90,450 }, +{ 141,205,4,72,59,79,245,11,352,94,152,76,247,216,21,188,452,217,497,12,89,37,111,339,588,77,64,875,864,115,358,464 }, +{ 15,515,700,753,0,1,2,13,5,4,23,3,8,341,365,51,115,10,120,457,6,141,77,197,31,7,165,9,202,450,961,260 }, +{ 5,2,50,14,58,38,171,46,29,1,45,186,17,52,155,218,48,281,61,487,54,36,67,21,328,334,151,227,760,114,400,133 }, +{ 457,120,70,125,318,64,23,48,795,291,202,761,751,415,77,846,269,758,21,237,96,260,391,165,87,1,128,5,221,13,137,763 }, +{ 13,23,51,33,4,40,117,102,453,64,153,196,0,77,15,11,12,475,1,65,134,10,515,22,21,14,700,59,403,141,2,753 }, +{ 229,152,57,266,452,381,432,12,313,184,99,471,17,4,62,339,157,3,129,59,128,11,369,37,77,38,40,123,5,497,188,257 }, +{ 49,28,109,22,159,9,272,95,105,131,55,35,254,168,39,327,169,0,1,286,175,374,347,158,420,67,36,194,312,424,627,346 }, +{ 5,2,61,29,45,58,80,311,1,17,209,227,52,243,106,869,454,151,592,496,48,334,14,155,6,186,46,171,75,21,255,667 }, +{ 244,44,110,141,260,30,269,352,839,131,574,228,373,276,1,406,219,717,217,137,253,224,120,93,36,31,567,116,661,187,341,88 }, +{ 12,99,79,139,11,453,196,51,277,474,111,23,542,37,94,188,33,13,401,775,40,961,313,102,4,339,153,485,629,134,300,431 }, +{ 16,35,9,0,68,24,149,69,67,18,1,114,65,230,71,7,103,133,50,167,212,118,101,191,140,64,399,28,124,283,55,565 }, +{ 88,30,274,435,131,613,190,100,93,829,166,1,187,795,530,127,382,957,960,160,31,137,466,264,39,800,406,254,28,473,521,219 }, +{ 167,16,18,118,212,24,60,71,101,68,191,9,375,411,363,35,0,1,589,199,302,21,447,55,146,126,92,271,647,121,562,48 }, +{ 64,141,86,177,77,128,147,597,304,95,269,102,275,4,352,49,120,5,372,194,465,13,588,237,947,216,202,180,612,751,107,534 }, +{ 18,65,90,403,523,289,240,214,194,102,701,475,202,217,283,862,389,51,33,0,494,421,453,817,84,64,847,899,352,13,23,437 }, +{ 13,51,23,202,5,12,21,128,15,115,0,1,141,120,64,32,4,2,515,403,165,457,3,10,700,99,453,318,719,450,308,401 }, +{ 98,223,393,31,1,271,834,791,167,44,202,64,93,697,5,116,77,125,450,446,212,18,541,293,51,120,195,132,284,13,807,765 }, +{ 15,515,700,753,4,11,23,13,40,51,82,165,0,110,93,33,141,64,120,5,10,77,3,102,180,32,202,125,8,197,31,21 }, +{ 15,515,700,753,0,1,13,2,901,23,5,341,3,51,82,8,4,180,961,9,115,10,12,6,898,7,351,141,134,22,31,120 }, +{ 234,416,77,5,315,639,325,202,147,198,113,49,450,61,455,142,0,21,22,342,329,494,178,58,102,427,318,230,13,120,43,470 }, +{ 60,146,16,18,156,126,121,271,199,360,132,24,167,0,640,10,71,522,21,92,5,340,107,354,118,150,22,195,446,35,28,212 }, +{ 4,361,11,14,56,368,377,161,27,12,300,77,59,200,17,554,202,33,40,494,495,21,210,80,757,25,128,23,19,38,444,53 }, +{ 141,82,217,351,15,352,120,1,180,260,515,64,854,36,700,317,752,372,13,269,77,753,922,21,349,23,202,110,93,137,51,373 }, +{ 15,515,700,753,77,13,0,1,23,33,102,2,51,4,3,5,291,217,10,9,450,120,341,7,317,6,11,117,115,8,260,180 }, +{ 15,515,120,13,700,23,77,141,1,260,0,753,180,51,137,202,115,365,110,291,217,5,128,9,21,341,197,269,2,450,317,165 }, +{ 174,6,348,85,138,74,280,204,66,233,192,355,289,65,81,580,636,353,25,91,104,343,673,214,64,95,42,712,792,32,194,90 }, +{ 152,497,452,59,4,216,11,79,94,77,128,188,269,339,588,33,76,529,318,32,141,471,12,202,111,21,5,51,37,90,72,177 }, +{ 417,499,10,141,253,244,110,559,8,564,180,260,728,120,352,638,642,341,951,206,143,752,901,93,137,661,922,373,44,31,811,197 }, +{ 13,77,23,33,4,51,0,102,128,59,141,40,64,115,177,10,137,22,202,2,7,11,90,1,117,180,269,14,49,6,134,3 }, +{ 1,2,22,0,36,5,67,50,14,28,12,86,38,46,83,168,194,65,103,114,49,7,10,95,21,69,23,24,128,51,55,13 }, +{ 17,106,119,207,255,306,742,378,84,62,136,45,3,5,240,80,61,56,209,383,311,790,655,32,2,440,76,151,58,29,179,263 }, +{ 3,128,1,141,2,202,33,5,64,15,0,515,102,13,269,10,700,180,134,51,120,6,77,318,23,137,17,117,753,197,82,153 }, +{ 514,38,377,328,11,57,41,248,880,266,556,4,152,361,471,757,485,403,305,102,3,211,313,99,457,130,12,14,157,40,23,54 }, +{ 68,0,167,101,9,118,264,520,16,18,21,478,562,1,124,212,100,936,664,777,191,88,806,154,48,24,759,604,35,252,265,65 }, +{ 230,689,699,213,466,352,217,831,30,443,418,144,854,201,840,855,1,251,203,317,530,957,96,93,822,539,36,752,351,137,83,800 }, +{ 33,77,102,117,15,82,13,134,23,64,0,515,120,153,51,4,40,128,700,260,202,141,196,22,753,11,351,10,1,326,95,269 }, +{ 11,40,33,51,117,13,542,328,14,134,38,153,23,12,485,231,102,54,775,37,3,377,111,139,211,4,457,403,369,475,99,719 }, +{ 33,64,77,128,141,2,1,202,102,13,23,117,0,15,3,153,51,134,10,40,6,5,515,269,137,180,318,165,700,7,196,753 }, +{ 15,515,700,753,4,1,5,11,13,21,33,180,93,141,64,2,23,77,82,3,0,102,32,40,352,341,10,197,98,110,117,901 }, +{ 1,2,14,67,50,46,38,24,103,83,0,5,36,28,29,133,114,96,65,52,18,75,54,108,22,7,238,58,160,9,361,69 }, +{ 258,201,276,137,160,860,116,261,295,843,567,144,131,44,187,268,943,219,284,31,202,935,141,98,662,203,127,96,36,93,224,1 }, +{ 7,2,14,16,46,87,75,52,92,278,29,38,140,70,1,5,35,294,24,262,135,69,171,172,58,409,112,60,50,66,97,12 }, +{ 13,23,0,2,51,1,33,4,115,10,15,141,77,3,5,180,217,515,9,7,64,11,700,6,102,40,197,22,317,753,165,202 }, +{ 74,145,6,66,25,204,42,29,222,337,138,26,7,525,192,174,746,287,544,135,415,2,609,632,112,64,87,0,85,45,712,396 }, +{ 77,33,102,15,217,13,23,141,202,515,51,700,291,4,269,753,317,180,21,64,318,115,128,0,275,2,352,196,3,5,137,11 }, +{ 187,219,258,871,44,442,160,574,137,224,908,116,839,131,36,926,276,201,93,228,202,860,31,613,144,531,406,1,902,30,190,318 }, +{ 1,372,141,5,21,77,225,744,96,30,23,349,13,291,269,284,69,442,459,144,303,839,217,622,160,330,260,48,120,410,189,352 }, +{ 66,222,2,74,29,87,135,6,7,145,52,25,294,337,226,172,138,331,42,70,97,112,26,1,632,192,43,5,415,609,461,353 }, +{ 45,17,106,209,5,2,21,29,48,207,3,186,243,155,255,263,454,119,400,496,270,14,290,62,425,1,171,32,659,52,38,56 }, +{ 93,88,141,120,30,213,260,373,100,717,459,82,110,1,166,450,180,321,217,372,36,269,131,225,22,352,326,466,473,187,244,410 }, +{ 266,57,152,381,313,471,12,229,99,369,339,62,157,3,4,37,77,38,188,17,11,162,40,184,129,59,475,775,128,452,403,453 }, +{ 217,352,317,141,752,15,180,515,372,365,700,341,753,349,77,21,291,1,115,244,64,120,13,98,269,82,5,498,864,351,23,144 }, +{ 14,514,369,102,403,377,51,719,880,153,23,13,457,11,485,4,401,12,328,453,33,40,117,57,629,38,730,236,134,670,361,961 }, +{ 107,7,172,14,92,135,2,359,60,314,46,16,126,278,232,150,279,32,38,392,298,5,35,97,24,192,259,288,330,52,356,312 }, +{ 0,4,25,13,59,90,65,23,26,19,18,12,5,216,91,51,389,33,77,11,22,85,27,81,21,177,746,45,42,194,37,123 }, +{ 5,49,315,202,416,77,455,639,450,21,197,137,350,13,408,0,329,318,494,344,61,402,64,509,347,120,113,48,95,713,308,401 }, +{ 130,47,381,390,59,90,200,214,289,6,65,472,29,64,874,648,50,751,624,26,52,32,4,194,875,714,85,249,247,33,881,19 }, +{ 51,23,453,13,719,12,457,165,37,730,99,4,386,197,401,17,11,2,3,15,5,961,475,6,515,64,54,700,32,115,0,403 }, +{ 15,515,1,13,700,2,23,0,753,5,3,180,51,4,165,12,141,21,197,457,7,115,6,9,352,10,120,202,8,341,11,77 }, +{ 0,9,1,67,35,28,68,16,24,65,18,69,50,114,103,12,22,13,5,101,2,96,23,83,149,21,39,55,7,175,433,124 }, +{ 28,105,22,0,1,320,170,9,49,301,109,95,127,31,98,55,65,35,2,24,168,159,36,713,16,740,13,338,21,44,512,23 }, +{ 13,77,4,51,23,33,102,202,128,59,40,0,64,141,117,403,115,11,15,318,153,269,22,515,475,134,10,494,177,1,90,210 }, +{ 13,23,0,51,77,33,2,141,4,10,1,64,115,102,3,6,22,15,217,11,180,7,40,515,165,202,177,9,269,128,700,5 }, +{ 456,116,492,8,949,268,867,391,203,51,499,13,719,386,31,791,457,918,125,10,23,93,479,685,417,0,22,338,506,551,870,730 }, +{ 17,237,45,180,106,62,32,64,115,41,136,498,255,21,197,129,241,13,3,227,23,352,165,752,350,365,449,155,4,546,476,38 }, +{ 1,15,180,515,0,2,341,700,901,352,4,141,13,3,752,5,753,217,317,115,365,23,197,21,51,165,31,6,269,202,77,7 }, +{ 205,141,216,269,497,4,588,76,59,152,128,452,79,77,875,11,72,94,188,217,352,12,247,37,90,64,32,1,474,23,947,372 }, +{ 64,247,217,237,317,180,752,115,349,141,498,13,437,304,23,372,352,164,579,291,33,864,177,197,0,490,72,10,482,77,269,51 }, +{ 2,1,0,13,15,141,3,77,5,515,64,33,23,180,6,700,4,117,217,7,10,11,102,165,753,197,115,134,40,352,12,269 }, +{ 11,40,38,328,33,542,12,313,41,339,23,157,377,117,369,51,471,99,775,485,13,305,457,57,14,475,37,248,4,54,188,719 }, +{ 33,77,102,40,13,23,0,51,4,128,64,202,117,141,22,196,153,10,134,15,59,269,1,137,65,11,403,318,453,86,515,177 }, +{ 472,80,34,250,495,161,17,14,469,176,128,4,389,106,283,436,216,527,3,297,483,177,53,56,231,194,119,84,719,57,255,59 }, +{ 317,352,180,141,217,752,115,341,365,244,1,269,202,901,253,15,21,498,372,4,137,515,13,2,700,318,5,197,23,143,753,349 }, +{ 9,39,101,18,265,100,333,520,252,16,0,329,593,1,553,364,68,167,310,30,121,254,118,158,363,166,60,604,272,24,286,404 }, +{ 15,515,1,180,700,901,0,2,753,341,752,4,3,13,115,365,317,5,23,197,141,217,165,352,6,22,36,9,137,51,7,10 }, +{ 131,39,9,829,166,613,578,827,1,30,716,254,100,98,31,224,0,406,228,310,616,219,44,846,127,190,938,96,265,371,856,438 }, +{ 17,64,62,106,141,751,136,292,32,129,352,41,38,476,86,128,214,237,5,177,123,209,217,45,269,954,162,710,180,3,90,4 }, +{ 25,42,235,65,650,736,605,6,630,85,123,343,233,256,26,122,63,389,141,249,416,444,368,194,19,108,138,174,90,0,544,511 }, +{ 184,229,152,57,266,432,497,452,17,381,619,257,313,12,4,205,59,3,99,471,157,128,5,129,339,369,77,11,32,45,202,2 }, +{ 137,202,160,860,141,30,93,567,36,276,295,261,131,39,9,964,201,843,1,98,800,318,116,22,943,187,10,219,206,44,269,535 }, +{ 0,493,125,64,49,9,279,10,35,18,93,55,293,31,14,13,194,165,325,48,22,132,21,107,98,389,44,581,342,259,174,137 }, +{ 15,515,700,753,4,33,13,77,23,5,51,32,102,40,93,11,349,141,21,8,82,202,64,31,110,10,117,0,1,44,3,318 }, +{ 110,253,854,811,352,141,244,951,180,642,661,384,498,143,752,317,911,10,269,206,559,351,261,120,902,533,922,959,365,160,332,217 }, +{ 2,29,70,1,75,52,6,220,26,112,145,331,74,163,19,69,38,324,46,58,14,5,25,21,278,223,50,307,66,7,67,409 }, +{ 13,23,77,33,51,4,64,141,115,102,0,2,128,177,40,11,202,10,6,180,7,15,269,1,32,217,59,22,291,3,137,515 }, +{ 340,897,691,478,658,264,914,382,100,812,363,1,724,156,166,698,88,521,39,404,682,447,296,96,303,411,30,909,9,274,656,772 }, +{ 9,18,310,101,265,159,326,120,105,158,33,363,77,195,51,55,13,39,354,132,23,7,28,639,16,137,98,1,252,272,709,49 }, +{ 57,313,471,12,99,369,157,339,266,152,38,37,475,453,328,775,11,40,59,188,77,514,401,403,342,4,139,33,377,51,229,14 }, +{ 16,7,24,14,35,140,60,92,18,69,71,2,189,1,46,230,108,388,150,38,21,172,278,67,246,267,50,309,236,135,451,0 }, +{ 206,417,93,940,959,473,499,203,8,137,559,728,31,202,44,120,450,141,10,260,116,564,22,326,269,318,268,244,0,1,253,638 }, +{ 15,515,700,753,1,0,13,2,23,4,3,51,5,217,7,77,341,115,8,9,10,33,6,180,317,349,291,120,11,165,457,901 }, +{ 1,2,5,14,48,21,290,32,50,45,38,46,263,207,155,72,76,29,17,408,425,171,89,52,7,0,292,449,3,227,513,428 }, +{ 121,132,354,167,271,223,146,98,18,463,1,668,446,195,407,60,212,447,781,48,360,363,411,522,156,393,807,9,21,16,293,13 }, +{ 131,578,105,371,219,224,716,616,187,49,9,254,737,159,385,98,258,127,272,761,0,916,623,910,28,286,39,31,22,518,924,242 }, +{ 302,467,97,6,273,1,24,484,124,51,36,18,2,398,453,421,523,69,7,23,13,403,386,150,66,0,298,65,426,165,22,158 }, +{ 30,190,530,88,1,100,778,539,625,274,382,410,96,731,960,39,795,321,9,131,264,144,840,748,44,166,669,957,36,31,435,228 }, +{ 141,1,2,128,64,33,15,202,3,0,180,5,13,77,515,134,269,102,197,700,10,137,318,6,120,165,753,352,4,82,23,117 }, +{ 44,201,567,116,131,224,295,662,489,268,219,31,434,144,187,276,110,384,93,261,699,137,36,442,120,1,613,30,228,64,141,244 }, +{ 12,15,51,23,515,37,99,13,700,0,10,117,753,38,165,82,134,120,11,453,197,64,115,569,1,629,401,22,457,474,110,153 }, +{ 7,135,2,92,172,14,66,140,38,52,97,46,29,74,16,324,278,226,6,87,1,571,262,5,357,232,35,380,69,314,24,330 }, +{ 125,386,23,963,949,60,51,391,165,221,13,197,118,21,719,193,541,421,517,150,393,7,401,453,308,5,791,551,326,558,48,173 }, +{ 6,85,42,25,138,222,174,235,280,256,525,289,26,214,64,746,90,32,544,65,204,19,66,337,355,95,348,415,74,29,5,312 }, +{ 1,14,5,50,2,67,24,0,46,69,48,21,58,103,16,12,18,38,54,96,83,7,502,45,36,181,35,9,430,28,10,155 }, +{ 811,351,642,180,951,752,110,638,253,10,82,352,197,341,365,564,499,854,873,55,9,417,282,901,244,22,559,143,206,141,28,898 }, +{ 23,13,51,15,12,453,403,165,4,515,115,719,475,457,700,523,2,21,0,99,202,197,14,5,386,753,128,401,37,308,33,117 }, +{ 120,13,23,77,141,1,15,93,217,82,260,51,137,202,110,515,21,180,165,5,128,102,64,351,291,700,269,352,326,203,177,0 }, +{ 1,5,0,22,12,2,36,21,10,23,86,13,28,51,9,128,48,14,32,50,7,3,96,137,54,4,202,49,37,65,208,323 }, +{ 219,98,23,127,301,51,258,308,170,910,13,165,22,105,293,616,125,242,276,401,201,395,964,115,55,284,31,374,327,206,512,900 }, +{ 64,180,80,165,5,237,2,250,34,58,297,61,197,17,22,29,186,498,231,445,247,3,752,311,95,32,483,153,27,45,115,469 }, +{ 13,77,23,33,0,2,1,64,141,51,102,10,15,3,115,40,180,6,515,128,7,22,269,202,4,217,700,5,177,117,14,165 }, +{ 15,120,51,515,13,450,23,700,202,153,196,753,260,64,128,141,730,4,326,386,21,523,33,318,5,457,95,32,403,1,77,269 }, +{ 2,1,5,29,32,45,207,263,14,425,58,72,76,21,7,408,48,46,52,186,17,292,38,6,61,89,476,50,155,720,119,3 }, +{ 15,515,700,753,4,13,11,5,1,23,33,21,3,141,32,2,40,180,117,64,269,202,102,197,0,165,120,51,341,352,153,12 }, +{ 76,5,214,129,2,123,45,710,17,249,618,460,179,32,1,257,205,519,90,207,245,184,162,61,769,209,292,106,6,29,14,128 }, +{ 1,15,23,13,120,141,51,515,202,21,700,165,0,180,137,2,5,77,128,93,753,260,269,197,326,33,110,352,82,102,318,48 }, +{ 7,2,135,14,29,87,66,52,97,172,70,112,5,58,46,337,92,16,20,43,1,38,232,155,74,294,6,461,409,151,262,32 }, +{ 574,187,384,926,860,110,258,434,269,531,141,244,160,261,253,116,699,959,940,717,533,36,219,31,902,661,871,295,201,352,10,260 }, +{ 156,354,296,1,182,586,64,379,340,937,850,698,31,48,98,44,120,18,163,23,30,658,195,125,77,284,223,291,774,481,96,39 }, +{ 250,80,34,472,17,495,176,469,33,194,64,483,4,297,141,14,161,27,53,667,56,833,73,527,585,231,106,51,84,814,2,59 }, +{ 97,7,81,140,66,92,172,192,24,298,43,6,74,69,314,426,462,14,501,16,21,508,60,189,267,232,230,104,48,20,135,330 }, +{ 31,44,116,144,268,393,492,434,367,489,127,98,918,0,384,9,22,206,948,105,93,203,1,456,332,940,299,28,137,49,293,125 }, +{ 15,128,33,3,13,51,141,1,202,64,23,2,515,120,102,0,5,82,10,700,165,197,269,153,403,110,753,137,196,318,117,12 }, +{ 31,98,127,9,0,105,22,28,44,512,293,395,299,1,242,49,685,763,320,599,125,116,109,276,284,95,870,159,23,456,36,900 }, +{ 7,24,124,1,6,97,2,69,14,18,23,92,21,67,66,16,5,484,43,20,118,65,36,22,28,0,51,140,13,71,29,150 }, +{ 1,64,442,303,284,349,202,141,622,67,154,447,260,44,652,429,9,335,237,919,197,98,167,33,682,269,547,77,863,411,340,201 }, +{ 1,15,2,141,515,0,700,13,3,180,10,753,5,64,77,33,4,6,7,197,102,269,165,23,134,11,352,341,291,349,22,120 }, +{ 99,139,12,453,196,277,775,40,475,33,23,401,215,51,11,14,77,111,313,130,38,211,37,266,129,15,339,153,719,3,369,515 }, +{ 33,77,102,4,23,128,13,141,202,64,51,0,40,59,269,115,117,137,153,1,318,11,10,177,15,134,22,90,196,2,403,32 }, +{ 7,2,14,58,70,112,16,5,87,38,46,52,6,128,135,1,32,21,155,29,66,64,0,97,92,186,172,294,13,23,20,37 }, +{ 15,13,515,1,700,2,23,0,753,5,3,4,51,10,341,115,365,180,11,33,317,77,6,7,217,12,197,165,117,9,64,102 }, +{ 2,1,14,29,75,69,67,6,52,46,38,24,103,220,83,25,70,87,262,74,96,267,50,366,26,16,226,394,357,66,108,19 }, +{ 9,105,18,39,1,0,16,557,101,272,252,890,326,49,265,21,137,100,23,938,13,310,159,5,31,24,254,51,30,128,202,132 }, +{ 80,209,45,61,667,17,6,106,5,2,151,29,483,255,454,833,27,311,112,19,738,378,1,58,113,26,25,469,119,887,32,64 }, +{ 13,23,51,15,5,1,515,0,21,2,12,141,700,165,202,115,753,32,180,4,3,197,10,120,457,9,269,128,64,341,7,33 }, +{ 99,12,453,277,139,157,369,474,339,51,38,23,37,196,188,401,775,111,11,313,328,475,153,266,4,471,79,40,33,629,102,14 }, +{ 7,92,16,232,97,140,126,14,60,107,66,35,298,387,314,104,246,462,441,150,0,38,24,2,172,357,230,330,5,633,22,289 }, +{ 13,77,23,202,318,141,33,4,51,269,102,177,115,403,137,2,40,494,90,11,342,128,31,117,21,32,7,12,64,134,14,10 }, +{ 13,2,0,23,141,1,77,3,180,33,6,64,15,10,115,51,4,5,217,197,7,165,515,102,22,11,700,269,40,352,177,14 }, +{ 15,515,700,753,4,11,1,93,13,5,180,110,82,21,120,23,2,33,10,141,3,165,197,102,901,0,32,341,117,40,153,12 }, +{ 15,515,700,753,1,13,0,2,23,4,77,51,3,5,341,291,7,33,6,115,10,9,8,217,11,177,120,180,102,165,197,365 }, +{ 20,43,198,325,173,904,104,234,66,147,77,319,416,422,97,426,5,0,7,450,861,202,712,725,2,32,639,376,38,324,945,315 }, +{ 105,0,9,28,49,301,170,1,127,159,22,16,31,98,512,623,24,109,158,395,35,68,371,65,713,55,2,242,293,21,44,18 }, +{ 213,88,689,466,230,30,321,435,699,352,217,201,795,831,144,854,1,443,96,539,530,840,418,251,855,190,93,100,669,31,957,662 }, +{ 130,453,47,196,4,57,14,59,236,711,51,153,730,77,412,381,23,202,108,128,361,13,283,117,11,719,200,46,34,78,210,2 }, +{ 1,2,5,14,0,50,36,22,38,46,65,67,12,86,114,28,103,29,208,7,10,128,21,83,218,23,96,54,194,6,133,51 }, +{ 6,26,74,19,165,453,14,730,1,125,197,50,29,51,138,357,13,2,108,391,70,719,46,457,47,500,386,262,112,23,235,52 }, +{ 9,10,376,20,43,0,49,18,30,120,2,33,325,104,501,470,77,788,725,102,523,39,858,5,904,414,174,55,137,37,342,13 }, +{ 15,515,700,753,0,1,13,23,51,77,120,202,341,82,5,4,9,260,2,137,141,128,115,351,901,8,180,10,197,21,450,33 }, +{ 105,131,272,578,9,49,371,219,159,616,286,320,224,187,716,98,28,22,0,623,127,258,910,737,385,31,239,347,254,109,424,95 }, +{ 457,51,13,23,961,12,719,99,453,15,4,515,165,401,629,3,700,11,17,14,2,37,753,41,57,569,38,45,0,33,5,32 }, +{ 202,120,5,33,318,77,450,102,1,260,403,128,494,21,165,13,269,12,326,23,342,523,402,2,817,64,15,141,125,82,457,475 }, +{ 141,269,352,217,180,64,349,137,202,160,317,15,372,515,700,752,318,753,244,13,437,291,165,864,22,237,5,82,954,21,77,418 }, +{ 70,29,2,145,74,112,26,6,75,52,19,66,632,1,87,220,5,135,163,287,307,25,226,7,58,396,294,278,113,409,69,151 }, +{ 82,351,317,15,752,180,898,352,141,901,515,341,10,700,365,1,753,498,0,217,253,115,55,854,33,5,143,32,21,160,36,197 }, +{ 39,9,310,254,0,30,101,49,252,272,100,265,105,455,159,557,190,333,286,688,18,166,1,158,709,16,625,627,31,131,327,329 }, +{ 2,58,29,5,1,151,186,52,70,45,7,549,14,75,112,400,113,155,61,46,227,163,311,315,66,6,307,27,17,220,287,74 }, +{ 141,217,13,21,352,23,269,77,180,115,317,64,202,15,349,137,5,51,165,291,318,752,372,4,0,102,33,365,197,32,341,125 }, +{ 68,35,0,9,65,101,149,124,24,154,175,16,28,7,67,1,18,189,114,398,55,14,345,39,118,133,69,2,230,429,71,283 }, +{ 66,7,29,2,112,52,20,43,97,151,74,192,135,5,173,525,337,45,145,58,415,25,14,32,644,70,544,226,222,21,6,580 }, +{ 31,125,44,22,116,299,242,55,1,170,64,36,479,870,456,685,10,599,558,0,268,506,28,740,23,903,492,164,393,206,2,86 }, +{ 188,11,79,12,99,377,94,33,542,339,40,474,111,37,4,51,102,453,139,775,13,475,23,961,277,471,134,57,431,266,115,117 }, +{ 658,698,340,98,296,303,1,31,850,363,156,919,44,774,586,385,120,77,82,10,223,30,354,291,23,914,478,87,260,163,48,13 }, +{ 15,515,700,753,82,4,1,13,901,33,197,11,5,10,23,165,2,0,180,3,21,77,51,120,365,115,217,40,117,102,32,401 }, +{ 15,515,700,753,4,11,5,13,1,141,3,180,23,202,21,2,269,64,165,33,40,32,0,318,120,128,12,197,117,352,51,17 }, +{ 91,6,233,85,370,718,81,65,25,256,63,343,42,74,235,123,138,511,397,249,26,194,650,355,64,87,544,18,90,643,66,214 }, +{ 23,13,202,51,21,120,1,5,141,128,450,64,318,403,15,137,260,33,12,48,32,31,125,494,269,102,165,515,77,2,197,14 }, +{ 180,317,365,341,752,217,115,352,901,482,372,498,1,141,15,253,515,244,2,700,0,21,13,82,23,4,579,351,753,291,269,77 }, +{ 13,115,197,341,9,352,468,237,64,498,23,165,22,509,901,546,482,180,28,569,317,51,365,873,391,95,86,217,49,837,752,706 }, +{ 13,23,51,1,141,5,165,202,21,120,64,125,180,15,2,33,197,115,128,32,260,269,12,82,4,515,137,7,318,93,0,700 }, +{ 214,289,90,174,874,6,138,280,65,81,64,85,355,751,194,233,312,348,835,91,0,32,343,636,249,29,875,288,519,104,247,74 }, +{ 15,515,700,753,4,5,11,13,1,33,23,21,2,3,102,32,141,77,180,117,31,64,0,40,134,196,120,352,12,44,197,6 }, +{ 33,15,13,515,117,23,700,217,134,753,0,51,153,77,141,2,4,64,196,1,3,180,10,115,5,102,6,11,22,202,165,7 }, +{ 15,515,700,753,33,4,77,102,1,40,13,117,11,115,134,5,21,153,23,217,3,32,2,317,120,196,180,141,51,12,59,260 }, +{ 15,515,700,753,13,0,1,23,2,217,51,3,4,5,8,317,115,9,341,10,202,180,6,365,7,82,457,22,120,901,33,291 }, +{ 7,2,135,20,97,14,66,52,337,673,192,29,43,355,353,5,16,294,107,376,147,226,331,560,64,470,222,104,415,32,4,324 }, +{ 195,132,142,167,146,77,363,271,121,354,202,120,647,178,786,212,687,0,101,878,16,522,60,5,450,411,35,55,98,639,259,318 }, +{ 202,77,20,0,318,66,104,128,102,269,177,43,33,7,216,291,494,5,2,342,74,173,97,112,450,22,337,10,234,52,64,678 }, +{ 107,362,612,356,359,97,414,43,259,20,392,7,298,147,819,683,465,173,729,660,319,14,5,779,581,595,246,35,501,92,0,230 }, +{ 6,165,14,453,13,51,19,23,386,457,74,391,308,2,26,401,47,758,603,108,719,366,1,29,309,730,324,197,133,70,115,867 }, +{ 179,72,205,180,247,245,4,490,352,59,317,152,79,498,94,217,148,76,752,864,11,216,141,405,89,452,197,111,497,188,37,21 }, +{ 107,7,298,314,14,359,32,392,232,279,172,97,60,581,387,126,121,0,534,493,356,92,441,95,13,21,35,147,22,5,16,362 }, +{ 156,271,354,586,360,132,591,195,121,18,340,1,5,13,21,48,668,446,23,463,296,658,60,55,407,698,146,70,626,51,163,24 }, +{ 13,23,51,4,0,12,457,15,11,453,2,515,5,1,99,10,115,165,700,475,401,403,3,961,40,14,37,753,719,32,64,569 }, +{ 48,125,21,165,13,221,23,763,423,508,197,5,98,92,193,16,441,386,64,314,293,457,391,140,49,60,102,693,683,51,35,867 }, +{ 202,77,120,450,5,318,1,494,0,195,18,132,523,403,326,604,354,260,121,576,203,167,234,817,682,49,35,615,21,20,13,102 }, +{ 39,9,166,30,0,101,158,68,404,190,333,274,252,310,88,100,49,28,344,35,21,22,419,131,438,1,16,65,530,694,124,10 }, +{ 15,515,700,753,110,4,1,11,165,180,93,13,82,5,2,197,33,120,0,3,10,23,21,115,901,217,341,77,317,51,32,117 }, +{ 2,29,1,14,6,52,5,46,50,26,70,19,103,58,38,67,96,262,516,309,218,133,108,27,75,17,112,114,24,487,331,83 }, +{ 120,77,15,13,1,141,260,23,515,217,110,51,137,700,317,202,165,291,180,21,753,128,0,177,326,93,450,82,64,269,197,5 }, +{ 255,59,554,297,183,56,33,444,108,358,123,196,269,122,77,153,57,177,117,730,19,467,605,130,128,50,275,4,291,475,134,133 }, +{ 13,23,51,12,153,14,117,120,165,134,99,401,38,453,15,128,197,719,64,515,475,403,37,33,196,700,40,125,5,0,54,2 }, +{ 64,33,174,348,95,108,467,554,56,0,25,306,233,6,63,511,343,120,13,85,29,561,543,707,319,180,899,355,77,49,256,18 }, +{ 120,260,51,23,77,15,202,1,93,82,141,450,13,326,515,137,21,5,64,33,110,700,128,165,318,203,269,102,351,753,197,125 }, +{ 15,515,700,753,4,13,11,1,5,21,23,2,33,64,3,180,32,141,22,102,77,0,10,93,82,352,117,40,341,31,165,6 }, +{ 15,515,700,753,341,13,23,141,33,1,0,217,4,77,180,10,82,351,51,137,5,64,9,317,21,11,102,40,260,202,854,115 }, +{ 105,272,131,22,327,286,28,239,320,9,109,578,219,49,98,224,95,159,538,371,616,127,187,64,713,55,0,170,168,258,716,623 }, +{ 16,18,68,35,24,60,71,118,92,126,0,9,101,191,7,55,154,175,212,14,167,150,302,28,375,1,107,124,346,273,21,108 }, +{ 20,147,43,470,376,142,904,178,427,798,0,595,198,325,858,319,61,202,173,97,5,422,14,22,107,259,32,49,887,77,414,392 }, +{ 13,23,51,12,33,15,99,64,128,515,453,202,117,153,37,102,700,40,134,196,120,0,2,753,141,14,38,3,82,403,77,21 }, +{ 383,17,62,136,84,119,56,440,3,504,240,80,378,129,123,548,106,128,4,11,14,555,162,32,184,361,59,64,205,5,469,57 }, +{ 70,1,48,652,5,638,846,888,21,349,269,260,340,562,767,761,163,883,774,141,125,518,591,0,23,9,87,13,371,303,622,31 }, +{ 66,135,6,97,74,278,69,7,14,324,267,172,2,140,462,1,357,38,808,550,92,841,189,29,16,25,298,87,75,204,24,335 }, +{ 51,23,33,13,102,40,12,128,64,77,10,202,0,196,117,4,14,99,134,453,65,153,11,475,139,403,22,141,86,2,21,15 }, +{ 88,100,264,166,274,435,772,1,382,921,96,478,30,438,639,909,897,521,190,466,960,410,9,144,530,418,31,329,265,691,778,93 }, +{ 62,440,136,56,84,3,504,548,555,383,4,17,129,128,507,361,123,59,119,162,14,57,152,328,161,11,202,495,184,27,80,215 }, +{ 911,617,332,959,206,141,253,244,282,384,110,120,10,260,352,143,951,811,269,373,160,417,93,531,728,203,434,940,137,55,36,717 }, +{ 120,15,260,141,77,1,515,82,700,351,33,23,450,13,110,326,64,217,269,753,203,137,102,5,165,21,51,291,93,177,373,128 }, +{ 15,515,700,753,0,1,2,23,13,51,5,9,82,901,180,8,3,4,120,6,7,141,93,12,197,341,10,33,115,730,64,125 }, +{ 7,104,97,107,356,232,66,560,298,289,14,707,38,568,359,64,20,0,65,324,22,214,92,32,192,5,387,43,712,90,172,95 }, +{ 6,1,2,66,67,14,74,24,108,29,69,83,458,7,25,38,135,103,36,150,451,114,52,594,75,65,380,18,267,602,19,278 }, +{ 13,23,51,12,115,21,202,5,457,15,4,1,64,719,0,403,2,3,453,165,99,141,401,128,32,515,10,37,523,197,120,700 }, +{ 57,59,4,11,412,381,77,53,421,291,250,368,99,14,27,369,803,283,23,108,403,19,339,210,0,401,12,444,236,40,361,736 }, +{ 15,515,700,1,0,753,2,13,23,5,51,180,3,115,6,7,457,4,9,8,12,82,197,165,141,901,120,719,33,64,21,22 }, +{ 64,95,180,247,929,146,90,126,197,32,237,60,288,165,316,92,5,13,77,7,217,955,522,22,16,314,132,4,317,10,312,86 }, +{ 15,1,120,13,23,515,0,51,700,180,141,2,5,202,21,260,753,165,137,33,77,110,197,128,326,7,450,4,102,9,269,12 }, +{ 14,2,16,46,1,7,24,69,75,35,38,50,29,220,52,140,267,67,18,54,70,309,5,60,92,189,171,87,71,163,58,0 }, +{ 31,98,127,44,9,299,0,276,293,284,116,49,935,599,105,22,456,201,28,1,39,125,242,137,371,144,131,492,159,272,51,395 }, +{ 6,27,151,53,573,445,297,113,26,73,436,19,491,250,396,315,45,112,145,58,614,881,25,34,611,200,17,80,70,5,138,631 }, +{ 32,693,81,788,90,804,403,56,494,21,84,397,202,65,18,77,64,681,214,725,523,784,526,33,102,825,240,0,115,241,817,91 }, +{ 24,7,14,2,18,16,65,0,108,149,28,69,1,71,154,36,124,35,67,140,189,429,92,68,66,22,55,118,302,150,9,6 }, +{ 0,68,9,35,65,101,189,212,114,67,124,69,1,154,149,39,230,64,252,16,88,702,103,100,18,336,28,329,520,83,30,755 }, +{ 5,2,186,29,61,45,17,1,52,48,58,171,155,227,80,209,311,21,14,46,50,106,243,513,334,502,496,38,3,6,32,592 }, +{ 15,515,700,753,13,1,2,0,3,4,5,23,341,11,10,33,6,51,165,117,153,7,180,12,365,901,77,569,197,115,64,9 }, +{ 13,15,23,515,0,51,1,700,4,2,753,10,3,5,12,77,33,961,165,457,197,11,115,9,22,102,40,403,202,21,14,59 }, +{ 15,515,700,753,13,0,1,23,2,33,102,5,4,10,9,3,51,115,77,7,6,341,12,11,217,40,457,196,180,165,8,523 }, +{ 166,39,30,274,190,100,333,438,530,310,88,252,0,9,539,265,1,656,404,101,625,131,778,254,31,455,676,329,724,158,21,23 }, +{ 734,148,94,308,431,115,37,89,111,413,79,468,197,629,341,474,569,12,13,873,179,401,11,4,180,23,205,72,59,365,134,51 }, +{ 539,228,224,219,816,190,30,258,871,840,669,93,406,530,957,187,160,531,748,137,131,88,863,36,728,839,44,213,352,116,202,466 }, +{ 393,791,125,801,730,551,386,23,31,175,93,98,51,13,144,788,126,203,21,345,116,22,949,110,575,165,326,44,0,4,60,221 }, +{ 13,23,77,141,0,4,51,2,33,115,64,1,10,3,6,15,11,102,7,217,180,40,515,22,128,177,202,9,700,269,165,5 }, +{ 2,29,7,70,52,14,1,58,112,46,75,5,171,163,87,220,307,151,186,334,38,66,155,16,69,135,278,45,262,97,6,21 }, +{ 88,321,213,100,230,435,689,466,1,382,30,352,217,699,410,96,795,36,921,752,190,141,144,180,44,831,317,83,443,31,840,251 }, +{ 363,411,101,520,354,9,195,668,132,156,447,1,905,364,18,23,765,664,146,5,360,13,121,96,98,31,252,39,100,759,264,551 }, +{ 13,23,51,730,12,719,453,457,401,475,5,21,403,2,0,1,15,4,3,899,99,32,165,11,515,308,197,115,6,961,700,523 }, +{ 72,76,89,12,37,4,308,179,38,528,90,431,54,205,148,184,401,57,152,474,23,59,51,245,428,11,32,99,405,316,257,21 }, +{ 376,20,43,147,470,173,97,595,107,319,414,142,819,5,729,178,858,7,427,32,426,104,14,0,392,362,259,61,230,77,560,246 }, +{ 202,141,269,494,318,137,51,128,403,4,217,96,77,5,64,177,291,180,15,352,102,10,33,349,2,317,0,341,120,515,21,453 }, +{ 77,202,33,128,102,318,494,269,13,0,117,23,342,291,403,15,134,51,153,141,177,515,82,137,196,700,203,64,22,351,753,4 }, +{ 253,110,951,352,499,811,10,854,180,638,244,559,642,752,564,8,141,143,417,341,901,260,206,197,922,661,93,15,498,373,165,911 }, +{ 141,13,23,180,4,217,5,1,269,317,21,0,2,202,115,51,352,77,3,197,64,341,318,15,291,9,137,93,32,165,515,33 }, +{ 9,0,18,252,16,101,68,39,24,118,35,109,158,329,28,167,60,364,333,265,49,100,22,419,553,55,1,677,71,7,212,159 }, +{ 28,109,9,39,0,158,49,22,168,35,55,175,1,65,67,185,194,159,289,95,272,114,30,105,86,584,36,169,254,2,83,24 }, +{ 15,515,13,700,1,753,2,23,0,3,4,5,33,341,11,51,6,10,197,115,901,180,77,40,102,12,365,165,141,217,7,317 }, +{ 173,693,104,422,5,18,61,32,102,0,20,13,784,560,33,66,397,526,49,207,29,25,510,707,65,6,11,344,21,263,81,77 }, +{ 23,13,386,51,308,801,719,221,401,949,21,730,165,421,102,115,125,33,341,670,468,117,770,1,120,6,197,14,403,97,67,958 }, +{ 0,49,105,16,28,24,159,9,158,320,1,68,35,239,170,18,109,7,55,65,2,95,301,124,347,14,21,154,22,127,286,31 }, +{ 2,5,1,207,45,29,32,58,76,61,6,263,292,655,72,14,17,476,7,119,52,306,70,64,21,90,186,214,106,38,3,790 }, +{ 21,6,125,49,13,64,715,66,115,95,197,33,22,32,204,165,56,278,0,408,241,120,4,808,681,350,263,85,81,571,135,509 }, +{ 612,427,325,107,202,5,376,49,64,392,403,470,21,147,31,788,494,14,362,465,858,98,20,804,518,43,845,318,125,97,725,534 }, +{ 32,21,76,72,2,1,14,5,241,449,89,38,350,221,155,48,50,292,37,46,45,90,270,54,17,179,214,12,148,430,476,413 }, +{ 24,0,28,16,7,124,35,154,14,149,65,18,9,68,55,108,175,71,2,1,22,109,92,67,484,336,118,69,302,398,570,420 }, +{ 1,5,14,2,48,50,38,67,46,21,0,54,45,270,281,12,24,32,155,96,513,103,290,83,61,58,36,17,37,72,69,181 }, +{ 13,961,569,197,37,15,23,474,515,94,148,111,12,165,629,341,700,79,901,401,51,405,753,10,134,4,115,734,873,11,89,117 }, +{ 33,23,102,51,13,40,77,128,64,202,141,15,4,12,0,1,2,117,22,11,10,403,153,515,99,318,137,269,139,196,700,134 }, +{ 0,1,24,67,9,16,18,35,28,69,103,50,5,2,65,12,83,68,7,96,14,22,21,149,75,114,13,133,23,71,218,54 }, +{ 384,617,940,332,855,911,206,959,434,282,141,10,93,253,244,110,144,268,120,36,352,137,417,203,116,31,44,269,160,201,143,951 }, +{ 30,93,473,137,31,704,450,652,190,203,800,254,166,274,326,144,269,160,127,303,120,625,88,848,110,435,77,521,349,131,340,744 }, +{ 53,27,73,26,19,250,297,200,25,630,17,6,611,122,34,42,714,235,472,65,436,14,80,684,690,106,45,113,680,108,64,4 }, +{ 15,515,1,2,700,0,753,3,5,141,180,4,13,77,33,10,217,6,7,134,11,352,197,64,165,341,317,23,12,115,102,40 }, +{ 254,530,39,613,688,221,30,31,438,190,228,960,1,44,141,21,180,406,23,166,9,202,13,96,137,48,131,829,317,269,393,51 }, +{ 9,39,28,35,30,166,158,36,0,175,101,346,364,67,49,68,168,420,88,1,194,131,100,352,55,83,190,64,137,570,86,65 }, +{ 62,56,3,548,555,507,440,161,34,4,215,136,162,514,361,527,17,14,211,130,328,11,383,123,84,183,38,57,184,152,205,494 }, +{ 92,126,107,7,356,493,97,279,359,298,16,246,35,60,14,441,362,121,43,423,5,132,392,20,508,230,199,146,232,173,150,414 }, +{ 15,82,141,515,291,922,349,700,217,260,372,120,351,93,77,753,318,352,373,854,1,326,269,21,13,102,144,202,64,23,203,137 }, +{ 141,217,352,115,180,13,269,317,752,77,23,21,341,197,5,372,244,291,9,64,51,102,4,1,365,2,165,33,3,48,237,351 }, +{ 78,47,390,19,130,453,108,27,711,813,730,444,412,283,196,690,123,14,128,26,250,389,650,236,200,65,51,4,34,183,297,73 }, +{ 34,250,297,80,472,64,495,17,311,3,148,45,667,61,176,53,243,27,90,161,469,141,483,151,62,128,29,4,58,56,5,231 }, +{ 51,23,33,13,551,77,102,326,421,21,523,120,5,899,453,692,202,153,308,615,115,958,450,401,791,68,221,93,475,18,403,4 }, +{ 98,223,393,363,411,1,478,834,664,156,284,691,447,791,914,293,354,724,697,9,807,541,759,51,18,421,48,264,948,586,195,848 }, +{ 7,14,107,232,16,92,2,60,46,5,359,121,24,526,220,620,135,1,172,21,126,314,132,77,18,75,32,278,12,23,52,38 }, +{ 32,76,2,1,21,72,241,14,5,48,292,89,476,45,720,270,179,90,17,214,148,38,50,29,129,155,350,46,290,227,123,464 }, +{ 15,515,700,753,13,23,33,77,51,4,102,0,32,202,1,11,128,82,117,141,40,5,110,8,3,90,137,21,10,318,403,165 }, +{ 66,6,69,2,1,74,14,135,278,267,380,24,29,97,67,38,103,75,7,388,324,25,52,150,87,83,189,357,335,108,204,172 }, +{ 152,4,339,59,79,471,188,11,77,94,128,33,529,377,12,111,102,202,452,402,216,99,13,542,51,40,474,37,64,291,23,961 }, +{ 15,515,700,753,1,0,196,13,33,2,77,5,23,102,3,10,9,7,217,4,6,153,117,177,14,457,115,12,40,730,11,134 }, +{ 17,209,45,106,207,5,255,119,62,2,61,3,263,742,306,655,425,378,32,56,29,136,84,80,311,58,186,240,243,383,14,21 }, +{ 120,260,450,15,1,23,817,13,515,523,326,5,700,51,82,31,202,64,21,753,318,93,32,269,98,33,351,77,102,125,457,165 }, +{ 116,492,268,93,23,206,203,0,551,918,13,51,8,22,417,940,120,10,499,31,949,791,125,523,165,473,341,730,421,959,401,391 }, +{ 15,515,700,753,165,13,0,1,197,23,4,82,120,2,180,12,260,719,8,3,386,117,5,523,901,11,341,51,10,9,141,351 }, +{ 14,24,69,7,2,66,108,1,67,6,36,398,18,267,150,97,29,38,83,149,65,74,28,0,189,71,388,16,273,124,46,22 }, +{ 330,96,523,335,367,662,141,839,1,922,372,615,244,717,269,443,418,352,403,692,217,854,752,180,36,64,498,576,349,201,98,284 }, +{ 184,90,257,205,245,229,57,152,769,17,524,5,32,497,45,432,619,2,452,266,4,106,1,21,179,59,76,3,460,292,381,128 }, +{ 7,14,16,2,46,5,70,107,87,13,58,307,92,32,38,23,202,0,172,24,18,21,60,128,77,35,20,10,9,4,171,112 }, +{ 7,66,140,16,14,92,97,69,267,172,189,24,380,2,35,60,298,451,230,135,314,74,150,71,38,357,6,330,67,423,21,443 }, +{ 121,167,354,132,18,446,147,101,212,146,407,16,55,35,647,191,20,271,199,68,60,259,463,107,9,126,363,7,195,43,14,411 }, +{ 76,90,179,32,205,21,184,460,257,288,45,245,316,5,57,152,241,2,358,1,229,72,524,148,48,769,17,4,12,38,14,720 }, +{ 147,259,178,878,427,465,581,198,786,798,142,534,325,929,20,362,35,132,107,376,43,5,279,77,49,146,70,202,590,771,33,14 }, +{ 473,93,450,778,141,30,855,466,144,203,330,530,88,523,459,372,201,617,839,704,254,321,934,326,39,36,82,717,332,213,559,403 }, +{ 523,475,51,899,730,453,23,719,403,33,457,13,421,386,4,120,117,196,102,153,15,801,450,817,515,260,202,11,700,99,165,125 }, +{ 15,1,13,515,0,2,700,5,23,753,4,3,341,317,10,115,180,11,33,64,217,77,117,165,197,7,6,365,9,141,102,134 }, +{ 19,4,119,40,33,202,27,84,102,56,77,73,504,485,26,494,757,63,862,59,23,300,25,12,128,11,5,13,342,880,469,6 }, +{ 32,20,2,13,5,21,23,6,12,38,43,29,64,7,95,51,61,207,48,147,90,178,17,182,49,0,115,202,52,362,37,22 }, +{ 339,188,11,79,4,94,377,12,99,111,542,102,37,33,474,51,471,40,453,152,77,13,59,403,342,23,117,57,475,134,128,38 }, +{ 34,128,283,176,495,231,318,432,503,275,529,527,161,53,3,202,56,291,585,469,73,17,14,412,57,27,80,245,250,381,402,51 }, +{ 15,515,13,700,1,217,141,120,23,180,753,115,365,51,317,341,77,260,0,291,110,137,202,5,21,269,64,36,349,2,4,10 }, +{ 13,15,961,515,700,753,4,12,2,457,3,11,197,51,37,569,115,23,5,0,99,10,1,134,6,111,165,33,72,40,38,79 }, +{ 15,515,700,753,13,1,0,2,23,33,5,3,10,4,9,115,7,102,6,51,12,217,77,11,40,457,569,341,117,317,14,719 }, +{ 5,76,2,32,292,214,45,1,129,519,123,179,90,710,17,29,460,72,14,207,21,249,58,205,464,263,618,48,6,245,3,257 }, +{ 72,76,32,4,21,12,38,23,99,54,89,3,14,17,51,57,11,90,13,488,179,2,59,148,45,37,5,115,401,1,10,421 }, +{ 98,223,393,1,834,264,284,791,724,293,478,772,697,909,363,682,905,447,541,821,411,51,421,9,807,48,765,31,730,96,386,410 }, +{ 341,13,509,8,23,638,165,901,762,10,569,242,391,197,873,642,506,499,629,961,15,180,116,456,206,546,417,1,338,457,515,867 }, +{ 1,2,5,50,14,38,46,114,0,36,29,22,218,65,86,96,137,21,133,285,12,10,323,181,17,58,51,23,67,7,28,6 }, +{ 481,878,202,13,5,23,182,32,269,21,1,318,77,142,557,494,141,33,640,137,70,291,2,51,260,415,929,403,120,58,4,259 }, +{ 15,515,700,753,1,4,13,0,2,5,341,3,11,180,134,12,10,317,197,365,33,21,23,165,117,6,77,7,217,37,32,498 }, +{ 25,119,19,6,26,42,27,17,4,790,45,814,2,469,483,84,122,1,0,33,32,128,76,80,611,113,73,56,5,240,202,77 }, +{ 14,2,7,1,24,0,65,6,16,69,67,22,124,28,108,5,18,36,86,10,38,46,66,398,289,168,12,83,21,23,610,13 }, +{ 51,23,128,13,15,202,12,120,33,64,141,82,10,515,0,403,700,3,1,99,117,269,153,165,753,5,318,197,102,260,2,137 }, +{ 16,35,24,0,9,18,7,1,68,69,50,71,103,65,67,189,133,23,28,13,60,537,149,335,75,21,64,5,114,2,12,14 }, +{ 754,803,133,576,880,543,2,1,657,50,14,38,46,5,29,67,218,36,58,171,52,96,24,103,775,0,114,83,181,54,65,45 }, +{ 21,32,5,3,2,17,14,72,76,1,12,23,38,51,4,54,10,0,89,13,99,137,45,36,421,115,543,11,22,128,221,48 }, +{ 434,384,268,144,855,940,617,206,332,116,93,911,959,282,203,137,141,489,44,120,10,110,244,36,98,31,269,253,367,417,160,9 }, +{ 15,2,1,0,13,515,5,700,3,23,180,217,141,10,753,4,117,6,77,33,64,7,11,197,352,317,341,134,165,115,12,9 }, +{ 2,113,6,25,1,0,29,4,7,833,5,45,32,61,128,19,77,151,74,145,64,42,14,210,655,106,59,177,27,17,21,738 }, +{ 116,268,918,203,551,31,8,692,206,791,403,499,417,93,940,421,0,23,22,120,13,523,44,51,299,473,959,1,10,475,202,125 }, +{ 107,126,132,612,362,279,20,146,259,493,199,121,590,43,660,147,35,376,939,60,941,534,683,5,0,953,16,7,49,649,595,470 }, +{ 15,515,700,753,13,1,0,23,2,33,77,4,3,51,5,102,115,10,9,341,6,7,11,342,217,12,120,180,40,317,141,8 }, +{ 53,27,17,161,469,378,73,527,19,136,383,250,495,56,862,26,62,84,80,106,200,4,34,14,440,297,3,128,585,5,129,123 }, +{ 17,45,209,106,5,207,243,454,119,255,2,263,186,290,29,3,21,62,425,61,84,32,58,56,48,408,655,136,306,14,742,227 }, +{ 4,152,59,452,128,79,216,11,339,471,529,188,94,77,202,12,291,33,318,377,99,51,23,5,402,349,32,474,102,13,205,111 }, +{ 15,515,700,753,1,0,2,13,3,5,23,4,180,51,115,9,6,12,7,8,197,33,10,961,901,77,141,752,110,22,120,341 }, +{ 951,752,638,811,351,642,180,253,10,341,197,901,110,873,8,244,15,352,165,898,143,515,564,762,499,55,365,700,82,753,141,854 }, +{ 6,262,197,350,74,26,115,509,841,583,165,38,21,13,47,50,235,19,33,324,453,4,308,196,138,99,64,903,675,1,223,130 }, +{ 125,165,391,23,386,221,21,13,558,457,51,867,197,115,401,758,77,97,308,791,7,180,48,120,963,451,743,89,603,134,403,450 }, +{ 1,14,2,5,16,46,7,38,58,24,50,0,69,48,35,67,54,18,12,75,21,45,513,155,430,37,270,9,61,163,223,32 }, +{ 23,13,51,0,12,15,4,1,115,2,515,453,10,457,5,3,202,21,165,700,403,11,37,64,77,401,9,197,753,59,475,99 }, +{ 129,84,17,56,27,495,19,548,80,123,162,378,3,504,161,469,618,73,40,53,4,26,205,184,106,183,62,6,257,128,862,12 }, +{ 28,9,22,49,109,1,67,0,39,55,168,158,83,36,35,86,420,194,185,159,95,105,69,208,272,103,50,114,2,254,169,30 }, +{ 242,391,8,456,116,13,23,492,341,165,867,51,499,457,479,638,338,509,719,10,1,642,417,762,401,93,206,268,901,569,22,197 }, +{ 211,162,248,130,57,4,41,556,507,266,183,152,305,361,11,129,62,229,38,471,514,313,157,300,377,3,440,128,123,328,339,59 }, +{ 7,92,97,16,298,140,60,126,14,35,279,314,232,246,43,230,508,173,71,107,423,24,150,779,20,189,66,18,607,21,0,653 }, +{ 15,515,700,753,1,0,2,13,23,5,3,180,51,901,6,4,7,12,9,115,8,457,165,82,120,197,10,64,141,341,22,117 }, +{ 0,18,403,25,523,74,6,24,42,91,22,102,13,51,49,193,475,681,95,85,730,64,899,397,273,750,247,673,32,805,757,288 }, +{ 56,0,18,65,33,554,84,343,64,6,90,561,22,19,899,108,27,63,289,475,240,467,370,32,233,214,24,123,95,287,28,194 }, +{ 31,98,127,9,0,44,293,105,395,299,49,242,28,22,599,116,1,284,276,125,456,685,763,159,272,623,23,935,393,144,201,137 }, +{ 1,5,2,14,38,46,50,48,21,7,58,45,270,61,155,171,0,290,69,32,29,54,67,16,24,666,663,17,37,75,502,52 }, +{ 23,51,13,453,457,12,719,4,15,99,401,2,961,3,11,730,475,515,0,1,165,115,629,700,14,17,403,40,5,33,37,64 }, +{ 968,967,966,965,964,963,962,961,960,959,958,957,956,955,954,953,952,951,950,949,948,947,946,945,944,943,942,941,940,939,938,937 }, +{ 2,1,14,29,67,103,6,46,52,75,24,133,38,218,83,309,36,108,70,114,96,5,238,74,25,26,220,236,65,50,69,87 }, +{ 7,71,16,92,24,60,14,97,150,140,35,189,149,298,18,230,43,508,2,423,69,0,38,314,66,279,399,517,251,20,232,273 }, +{ 23,1,120,51,13,202,77,141,260,21,15,5,128,82,2,450,269,165,102,318,48,32,137,515,125,64,12,115,351,180,33,7 }, +{ 77,13,33,23,64,51,4,102,141,128,40,1,2,202,0,6,177,115,137,15,59,10,11,7,269,22,515,180,318,3,700,95 }, +{ 101,9,18,363,264,520,411,604,676,682,905,271,16,821,167,0,621,364,39,100,121,118,166,781,647,252,1,848,447,265,404,60 }, +{ 144,203,326,382,166,418,93,88,96,822,1,141,859,77,744,438,110,269,921,367,521,274,100,39,494,120,403,473,217,576,13,291 }, +{ 13,21,180,125,5,23,191,32,18,16,146,199,115,24,165,118,0,225,22,1,60,197,64,901,375,241,48,12,408,71,522,818 }, +{ 15,515,700,753,13,0,23,8,1,51,82,102,2,33,4,9,180,165,5,77,10,110,12,197,120,260,18,326,351,403,22,457 }, +{ 33,77,102,64,13,23,128,51,141,202,1,40,0,2,117,10,15,4,6,318,269,134,22,515,180,115,177,153,137,196,3,700 }, +{ 174,544,104,525,74,0,151,25,6,624,29,66,2,636,81,45,204,177,64,416,7,644,5,138,222,319,355,77,22,122,789,216 }, +{ 141,304,372,352,291,947,177,269,128,954,77,349,217,202,64,318,498,437,102,864,86,13,115,180,137,5,210,197,32,950,678,7 }, +{ 161,200,53,17,714,27,34,73,472,62,585,56,440,383,136,78,527,19,4,3,106,361,14,250,80,514,377,84,322,390,862,548 }, +{ 32,76,72,21,38,14,89,54,12,37,2,241,5,428,17,1,181,221,350,45,3,4,449,90,148,179,99,292,794,770,477,46 }, +{ 33,23,128,64,141,13,77,51,102,202,2,15,1,3,40,10,5,153,269,515,165,0,117,196,180,318,6,700,137,134,120,22 }, +{ 96,137,30,0,9,39,840,202,669,406,141,530,613,1,180,88,22,160,679,576,28,403,31,219,49,228,829,100,36,15,10,856 }, +{ 180,141,352,1,15,752,115,0,217,365,2,515,13,901,341,317,23,4,197,700,269,5,3,31,753,244,21,165,253,202,51,44 }, +{ 1,2,67,0,28,50,83,65,14,46,103,114,24,38,36,9,69,5,18,7,22,133,55,218,16,124,29,54,96,160,12,480 }, +{ 180,115,352,317,365,217,752,901,141,15,341,1,515,253,700,0,753,873,2,197,31,137,165,244,4,120,160,44,98,5,202,3 }, +{ 5,32,347,49,13,21,95,713,23,1,77,33,60,64,107,4,126,928,296,850,0,241,197,102,652,195,180,534,165,153,379,10 }, +{ 341,180,365,901,317,115,15,752,515,700,217,873,753,82,0,110,197,141,951,165,1,564,13,351,253,12,10,3,2,4,308,244 }, +{ 17,45,21,3,106,5,155,38,227,32,2,209,62,54,12,243,14,181,552,587,46,540,207,794,37,48,430,119,255,221,770,29 }, +{ 16,24,35,18,7,0,50,1,9,14,75,69,2,5,12,21,60,13,67,71,23,48,10,108,223,181,189,103,46,64,92,51 }, +{ 127,13,98,165,308,23,286,293,258,51,219,395,197,115,301,401,31,391,22,105,457,170,239,276,55,338,629,116,180,479,509,569 }, +{ 539,213,748,840,957,669,30,466,88,217,144,251,863,190,137,93,230,228,679,352,317,203,617,321,258,530,160,219,96,831,816,689 }, +{ 5,48,1,21,2,14,0,36,12,38,32,54,430,181,50,270,72,99,281,45,17,10,46,22,37,218,67,3,290,76,23,51 }, +{ 13,23,0,4,33,51,2,115,141,1,77,217,180,10,9,317,3,102,11,5,15,197,7,202,22,165,40,64,515,6,341,31 }, +{ 13,15,117,515,23,12,37,134,165,700,38,54,457,753,51,64,153,197,14,10,33,82,961,0,99,89,115,719,141,3,4,1 }, +{ 5,21,2,3,1,32,14,12,48,17,0,10,51,23,38,22,4,72,13,54,36,45,137,76,99,114,86,37,11,64,540,430 }, +{ 202,128,77,318,291,33,269,102,275,141,494,342,40,678,0,177,20,210,402,7,4,5,137,6,13,450,403,32,49,120,23,22 }, +{ 1,2,24,14,67,46,69,50,38,103,16,18,75,35,83,29,52,96,5,108,0,7,54,71,149,394,236,309,70,133,220,58 }, +{ 15,515,1,700,0,2,753,13,23,5,180,3,51,4,165,457,12,197,115,6,7,21,9,141,8,901,33,82,120,77,10,110 }, +{ 0,28,65,14,67,2,124,24,1,9,7,69,55,154,36,16,46,114,175,35,83,22,429,18,109,149,68,189,108,336,251,133 }, +{ 56,162,403,3,129,775,99,161,17,40,527,33,880,4,14,128,475,12,548,23,102,202,361,117,34,184,383,200,183,196,64,53 }, +{ 151,2,29,58,112,45,186,113,5,70,52,1,311,6,315,66,61,7,74,27,631,17,80,87,287,243,209,227,14,491,19,869 }, +{ 6,1,74,2,75,29,25,66,26,70,52,138,67,324,357,42,19,220,14,85,87,108,38,451,309,103,24,69,380,135,114,65 }, +{ 15,515,700,13,23,0,1,120,753,51,180,2,260,202,5,141,77,102,9,450,115,21,197,165,7,137,110,33,12,269,901,4 }, +{ 5,45,17,2,14,46,48,38,181,50,155,3,186,54,61,29,21,227,281,80,540,106,12,400,52,1,58,32,328,171,209,487 }, +{ 16,18,265,121,158,35,60,9,39,7,329,105,252,68,24,1,132,167,159,22,0,49,286,101,21,146,23,327,120,709,5,14 }, +{ 108,467,283,56,389,650,123,412,33,177,899,475,216,453,269,349,619,65,51,730,403,670,23,196,523,128,84,13,401,789,503,543 }, +{ 514,3,11,377,328,4,361,507,57,403,14,880,130,485,176,215,236,38,152,102,211,56,62,757,54,585,300,556,34,555,40,229 }, +{ 3,555,62,266,130,99,507,139,514,12,152,229,215,305,57,40,440,33,403,471,38,56,475,14,361,313,775,328,196,548,123,23 }, +{ 120,202,318,15,77,13,1,450,33,269,515,260,5,128,494,51,23,700,102,141,40,753,326,403,817,137,523,21,177,922,342,7 }, +{ 15,1,515,23,0,13,700,2,51,753,180,5,165,21,197,12,3,120,115,4,141,6,9,7,457,33,386,202,82,8,31,341 }, +{ 15,180,515,82,351,700,10,317,753,115,217,365,141,898,33,901,13,23,110,854,752,77,1,197,4,341,143,36,64,352,102,9 }, +{ 104,289,66,707,214,90,712,64,97,173,20,0,414,194,874,43,32,7,568,560,65,38,426,312,715,192,376,74,835,5,324,147 }, +{ 84,56,0,554,63,65,453,249,123,643,18,26,847,475,511,403,416,561,524,289,370,73,9,19,45,42,719,194,27,467,33,730 }, +{ 21,346,13,350,308,826,197,101,352,68,570,0,165,23,9,841,115,100,509,694,221,230,35,217,569,88,124,749,1,777,212,154 }, +{ 16,92,7,24,60,18,35,140,126,14,50,71,46,330,2,75,246,5,121,267,571,1,230,309,220,0,9,64,146,236,54,108 }, +{ 82,15,515,898,365,700,180,33,341,753,77,901,10,115,55,351,21,5,1,4,13,102,36,217,2,165,752,120,197,117,11,317 }, +{ 16,24,35,18,69,71,140,1,103,7,189,68,0,50,9,108,2,133,60,267,230,46,149,67,167,118,92,14,75,21,191,38 }, +{ 60,71,16,18,7,20,43,118,35,68,375,28,608,0,175,566,154,92,14,149,628,33,22,13,2,10,279,23,107,356,55,117 }, +{ 187,258,871,295,201,434,219,224,489,384,268,110,261,839,44,699,93,116,36,131,141,228,144,160,940,567,244,406,137,574,98,253 }, +{ 66,7,97,172,192,712,232,324,204,74,43,448,387,426,568,20,526,107,104,135,356,729,173,0,22,5,32,95,2,64,500,560 }, +{ 15,515,700,753,1,4,0,341,13,3,134,2,5,33,11,77,12,10,23,197,365,901,7,40,217,32,21,6,51,180,961,37 }, +{ 0,28,24,9,35,65,16,124,68,55,109,154,7,39,22,149,158,14,175,1,49,252,18,71,2,168,289,419,108,420,67,101 }, +{ 7,16,14,92,2,46,140,24,220,35,38,60,75,1,50,18,87,54,5,126,29,52,278,262,314,107,71,21,172,135,330,394 }, +{ 7,92,16,14,172,126,2,60,140,35,135,314,278,46,24,38,232,107,330,66,5,18,150,246,230,97,52,1,121,563,279,21 }, +{ 6,26,235,53,297,436,27,19,25,73,113,445,90,214,65,42,64,289,250,611,624,32,45,648,614,17,85,491,34,122,200,416 }, +{ 352,141,1,217,854,752,351,180,244,36,110,661,82,258,816,160,295,219,567,224,230,269,922,144,260,268,93,201,137,116,489,202 }, +{ 16,60,35,18,126,107,68,191,92,121,7,14,598,20,493,279,167,446,118,0,28,43,463,55,24,212,375,566,9,150,575,21 }, +{ 15,1,515,2,4,13,0,700,3,5,23,753,341,77,51,115,33,11,180,10,197,141,6,165,7,901,102,40,9,202,217,12 }, +{ 23,51,13,202,21,5,1,120,15,137,128,125,32,2,12,141,33,165,64,515,403,318,700,48,180,7,6,450,115,523,475,260 }, +{ 131,716,224,371,219,187,737,616,385,254,9,98,105,924,31,258,836,39,127,578,49,916,44,761,272,137,944,159,0,242,442,22 }, +{ 15,515,700,1,753,2,5,0,4,13,3,180,11,141,197,10,341,217,33,134,165,6,77,7,317,12,352,64,365,32,102,40 }, +{ 66,74,7,173,174,29,192,2,222,20,226,43,353,52,712,6,0,138,500,204,97,145,64,104,426,673,355,90,25,5,65,87 }, +{ 5,259,786,534,590,493,279,49,13,581,465,21,929,35,941,132,147,32,23,612,362,626,107,121,178,0,146,61,48,939,10,18 }, +{ 2,14,16,7,278,69,135,140,46,24,267,35,92,38,1,189,29,52,309,60,66,75,71,172,74,357,18,87,67,6,230,5 }, +{ 165,13,308,197,391,23,401,15,51,457,180,509,115,569,3,629,961,719,34,758,317,734,14,29,46,2,17,901,38,453,5,217 }, +{ 1,22,2,14,0,28,7,168,67,49,65,24,36,95,5,105,55,35,12,46,69,16,114,159,194,50,10,9,158,83,164,109 }, +{ 34,453,3,196,130,14,322,11,47,51,377,236,361,4,730,153,514,711,57,440,62,17,161,108,176,59,485,56,162,412,202,117 }, +{ 18,16,21,23,48,13,24,35,121,5,156,60,51,1,7,132,141,221,163,115,0,271,447,340,363,202,125,71,2,781,22,698 }, +{ 165,13,457,23,197,961,629,569,341,41,12,38,401,901,54,51,115,17,15,509,421,37,62,45,719,57,32,328,117,758,157,99 }, +{ 2,1,77,141,33,64,3,102,0,23,13,5,128,10,6,15,180,202,269,40,51,515,7,165,137,117,318,4,700,153,197,352 }, +{ 68,212,0,124,101,9,154,16,562,191,21,149,65,24,35,1,118,167,818,350,520,100,722,841,264,71,13,302,478,23,375,346 }, +{ 98,23,48,598,13,293,541,21,125,121,51,807,0,31,35,259,126,7,386,1,223,783,10,107,199,20,221,144,342,963,49,64 }, +{ 21,13,5,586,1,23,167,48,33,781,647,49,165,18,51,271,77,32,761,118,0,82,391,22,146,141,459,31,197,156,115,4 }, +{ 2,1,5,61,29,7,58,45,14,6,425,32,70,52,290,738,207,21,72,112,66,76,655,17,186,46,64,263,38,0,128,87 }, +{ 39,265,9,100,1,333,363,101,18,411,447,254,166,310,31,98,264,30,639,404,156,286,16,93,593,203,272,682,0,905,44,821 }, +{ 6,2,1,19,29,51,26,108,25,74,5,23,14,114,13,386,133,103,42,66,453,70,309,138,719,324,65,38,64,96,52,75 }, +{ 20,43,356,107,49,858,595,7,414,359,0,5,392,319,97,612,422,819,14,376,173,246,22,470,147,427,230,92,197,33,683,95 }, +{ 0,9,68,35,65,67,114,101,28,1,124,175,336,69,154,103,83,24,189,133,39,16,50,7,2,149,55,251,18,345,230,36 }, +{ 23,13,51,15,0,1,515,115,165,2,5,12,700,202,4,21,141,457,753,197,10,3,180,120,32,9,318,11,453,64,6,269 }, +{ 121,195,60,16,126,107,98,271,146,407,132,35,1,167,199,223,493,191,279,20,18,5,43,7,21,92,48,393,0,362,212,467 }, +{ 31,44,299,116,393,144,492,456,268,22,105,0,367,918,384,434,127,489,98,9,963,125,242,948,1,28,206,49,36,51,93,293 }, +{ 23,13,457,51,165,401,719,758,197,453,961,629,308,14,15,12,730,3,386,569,391,29,739,515,34,828,832,901,115,514,670,341 }, +{ 105,36,131,22,180,115,341,127,169,1,9,31,64,98,44,365,317,141,272,143,160,55,219,86,197,776,239,187,0,535,13,752 }, +{ 1,6,2,14,66,25,29,5,108,67,65,114,19,38,26,52,74,7,24,18,69,86,36,388,64,51,17,83,23,46,42,75 }, +{ 51,386,23,453,719,13,730,6,457,670,758,19,401,165,2,475,47,26,899,14,108,17,1,5,197,29,894,754,236,74,27,285 }, +{ 252,18,9,101,121,16,132,0,419,167,364,60,604,35,265,363,146,271,39,158,68,109,28,329,848,24,647,907,682,159,212,55 }, +{ 283,503,128,432,26,193,63,269,789,529,102,122,389,275,678,6,25,318,445,4,342,27,573,605,177,862,643,291,216,57,235,59 }, +{ 2,1,29,75,69,52,14,6,46,74,87,7,220,226,278,38,135,66,267,70,16,262,25,24,380,324,357,140,67,394,97,222 }, +{ 97,298,69,7,66,140,189,24,16,267,172,423,60,150,14,314,92,71,81,501,43,35,74,6,517,232,149,607,83,330,18,2 }, +{ 475,421,403,899,51,805,523,958,453,817,23,615,401,801,120,326,202,670,494,730,450,386,115,629,260,576,77,365,569,0,165,13 }, +{ 7,20,14,128,77,97,112,202,2,177,16,415,269,318,275,66,107,43,141,414,135,38,307,10,58,0,6,291,32,5,4,40 }, +{ 24,14,7,0,2,1,22,28,16,65,168,124,35,67,108,109,18,49,10,149,69,158,5,95,289,12,55,6,36,71,46,21 }, +{ 26,80,27,73,122,25,19,17,6,42,684,209,445,573,667,106,45,690,4,611,255,680,297,495,65,59,128,119,483,113,64,53 }, +{ 107,259,362,376,465,20,470,147,595,534,612,683,660,43,5,49,581,0,858,35,427,246,97,786,178,356,14,21,142,878,7,279 }, +{ 131,30,228,190,856,406,224,88,219,530,863,613,778,274,944,816,187,39,100,160,258,31,44,93,1,321,539,36,871,137,435,531 }, +{ 113,6,311,25,45,491,80,611,27,26,209,667,17,73,122,42,684,396,19,85,106,5,614,4,2,255,151,29,1,64,648,61 }, +{ 15,515,700,753,0,1,23,51,120,2,13,82,5,260,9,4,341,77,180,115,141,10,7,12,450,8,202,901,197,351,165,93 }, +{ 219,127,98,258,395,421,924,293,242,201,697,105,276,51,308,23,453,272,401,944,512,137,13,31,284,567,386,365,116,131,964,125 }, +{ 15,180,352,141,515,752,217,82,1,317,854,700,351,753,115,341,110,13,260,120,21,36,33,898,23,10,5,365,4,160,901,137 }, +{ 129,123,17,257,162,184,205,249,183,769,5,80,3,4,229,130,119,45,90,99,618,106,57,497,12,128,2,84,59,152,27,40 }, +{ 33,102,23,77,64,128,51,13,0,202,10,141,40,15,1,22,117,137,2,86,4,403,269,153,515,196,65,11,700,115,99,5 }, +{ 7,14,2,16,172,107,46,92,5,135,35,202,294,87,38,232,29,97,20,21,24,1,60,220,66,43,12,0,126,52,54,70 }, +{ 403,576,615,523,475,326,805,817,494,421,51,202,120,450,137,453,23,859,260,401,402,77,33,670,0,958,15,197,386,515,165,480 }, +{ 141,352,217,137,0,180,202,349,9,269,23,51,115,291,77,372,13,317,120,752,365,351,93,22,2,341,64,10,82,854,28,18 }, +{ 1,23,13,51,202,141,5,165,21,15,120,180,64,2,197,125,33,102,12,7,137,515,48,128,269,318,93,700,0,403,9,4 }, +{ 25,151,6,145,122,29,174,45,113,74,4,665,42,138,2,614,416,287,19,348,746,0,66,26,1,7,64,243,311,396,81,624 }, +{ 30,190,254,166,100,382,731,829,88,131,264,795,9,93,625,274,438,1,578,613,716,31,44,39,530,36,616,921,265,203,160,77 }, +{ 132,5,21,13,1,23,32,195,379,687,156,121,626,296,48,70,850,146,51,82,883,771,35,49,652,407,60,4,260,0,845,33 }, +{ 9,254,0,49,272,131,39,159,688,101,105,578,518,158,286,28,327,333,68,224,252,219,344,16,22,1,716,31,30,228,24,890 }, +{ 16,7,35,60,18,20,14,68,9,0,28,118,43,92,126,55,107,2,101,154,24,71,5,202,121,109,22,252,21,97,1,621 }, +{ 15,515,700,753,13,1,341,2,0,4,3,5,11,23,10,33,117,12,901,197,6,134,77,8,165,317,21,365,217,7,17,40 }, +{ 78,19,444,47,26,390,27,453,130,813,108,730,711,65,412,122,51,680,113,235,690,196,630,283,128,236,14,64,73,53,200,445 }, +{ 2,7,29,5,61,6,45,1,66,113,112,14,52,315,738,128,32,151,74,16,20,64,70,21,592,0,25,4,425,43,491,222 }, +{ 145,112,74,66,6,29,26,70,19,396,25,87,2,287,135,151,138,222,5,226,42,122,7,307,1,644,45,58,113,651,635,632 }, +{ 92,16,7,60,126,24,140,35,14,232,18,121,246,71,46,267,172,150,107,314,132,146,230,2,278,108,330,199,236,5,38,572 }, +{ 13,115,197,538,569,341,98,55,165,127,365,762,219,286,844,23,170,206,734,638,535,901,169,253,629,0,873,509,180,10,332,258 }, +{ 58,151,74,53,287,27,29,396,6,70,2,73,5,52,112,26,651,1,297,113,17,75,19,45,334,445,145,34,315,549,436,331 }, +{ 214,289,90,874,104,751,64,65,312,835,204,249,750,194,74,81,875,32,519,288,348,0,174,247,636,715,138,192,784,6,524,280 }, +{ 9,39,28,35,30,0,166,49,1,175,439,158,64,346,36,101,67,364,86,88,274,100,168,55,23,10,420,22,190,141,505,180 }, +{ 341,901,15,515,700,753,1,365,10,0,569,180,2,197,115,31,165,3,5,4,44,22,317,13,9,951,23,253,116,143,762,93 }, +{ 120,202,77,450,260,15,128,318,102,515,494,13,817,700,269,5,403,51,1,33,23,753,82,326,141,342,291,137,21,523,351,32 }, +{ 13,115,241,64,180,32,125,197,165,4,118,22,21,23,16,247,237,28,225,191,95,141,167,5,0,341,288,35,459,18,177,24 }, +{ 16,24,35,14,1,2,7,69,18,46,60,50,267,140,71,189,108,38,75,92,0,5,9,230,67,21,309,335,54,236,394,220 }, +{ 15,515,700,753,898,180,901,341,197,638,10,165,33,1,115,4,77,365,317,13,102,217,117,0,5,2,253,3,82,569,21,752 }, +{ 193,523,18,84,56,730,233,65,4,817,90,33,643,403,91,511,453,240,59,11,214,51,719,196,153,475,32,123,64,847,102,561 }, +{ 112,29,151,2,74,6,66,7,222,145,287,45,5,624,52,25,113,416,58,122,19,70,186,204,4,87,644,549,337,884,32,0 }, +{ 13,0,23,2,1,15,33,3,77,515,141,5,4,217,10,51,64,180,700,115,6,117,11,7,753,40,102,165,197,22,317,153 }, +{ 28,0,1,67,65,9,2,114,83,69,103,50,36,22,55,24,46,14,124,109,35,7,16,38,133,160,389,323,18,12,154,5 }, +{ 121,132,18,167,271,146,101,363,621,9,411,647,16,354,520,60,212,932,1,806,55,0,195,446,68,35,31,364,777,252,407,118 }, +{ 26,6,85,396,122,624,25,19,42,445,64,648,573,416,174,680,665,214,45,348,90,65,194,145,113,881,138,289,112,436,297,544 }, +{ 16,146,18,92,24,199,60,71,121,126,35,108,156,953,271,674,132,7,32,640,360,246,649,118,21,95,5,517,14,9,1,314 }, +{ 51,13,23,453,475,730,719,15,457,403,64,115,33,95,4,523,3,12,21,6,899,102,5,128,401,202,11,141,308,515,22,125 }, +{ 151,396,6,53,27,113,58,26,73,112,74,287,45,29,297,19,145,70,138,445,315,436,34,2,17,573,5,61,549,491,1,80 }, +{ 223,1,888,774,260,98,269,385,349,202,96,141,421,622,730,863,318,697,87,453,393,418,922,834,751,5,163,335,120,291,352,30 }, +{ 16,60,92,35,126,121,7,150,246,18,107,1,598,24,167,195,14,97,71,279,98,441,191,199,517,146,356,223,298,271,230,0 }, +{ 22,1,105,28,239,170,0,55,95,31,36,301,2,320,98,127,9,49,44,64,35,67,10,86,5,12,109,23,168,13,21,312 }, +{ 2,6,5,207,292,76,1,119,45,32,17,29,61,306,790,58,240,106,14,64,214,151,476,710,7,72,84,128,4,179,70,25 }, +{ 51,23,221,254,115,13,438,530,125,48,21,39,541,960,386,49,1,613,15,840,228,308,627,131,688,401,5,326,421,158,165,83 }, +{ 1,5,2,0,12,22,21,36,10,14,48,86,23,13,32,54,3,4,28,65,51,50,137,37,208,114,9,38,17,7,281,202 }, +{ 363,23,447,182,296,340,1,93,698,478,379,156,284,144,18,269,21,98,141,70,668,411,664,658,110,914,67,937,180,691,335,291 }, +{ 17,32,45,498,41,115,180,197,106,62,54,38,546,165,13,155,468,509,341,243,241,217,542,15,57,536,428,51,117,721,292,129 }, +{ 32,95,64,246,22,92,180,13,5,652,125,241,638,237,7,49,4,126,21,115,197,296,888,316,0,165,774,23,16,392,1,534 }, +{ 15,515,700,753,33,341,13,217,4,141,77,23,180,317,1,10,102,351,82,115,40,5,854,21,137,11,352,901,365,117,197,0 }, +{ 15,120,1,82,93,217,515,260,77,141,13,110,700,351,352,23,180,753,21,854,202,317,64,349,269,51,165,137,5,128,291,36 }, +{ 13,23,51,141,77,0,33,4,115,64,2,10,102,202,217,128,1,177,269,11,7,22,6,21,32,9,180,40,15,3,165,318 }, +{ 478,264,1,520,98,724,9,682,223,664,21,759,13,772,604,100,23,363,411,48,821,5,0,905,909,447,31,265,88,101,166,39 }, +{ 20,29,7,2,77,416,6,128,33,5,0,113,104,32,43,13,491,66,23,21,102,51,74,210,202,525,64,318,10,81,174,14 }, +{ 2,1,5,14,7,58,61,29,45,290,46,38,52,21,32,270,6,592,425,0,75,155,16,48,17,50,72,70,207,24,263,663 }, +{ 80,6,17,209,106,26,483,113,19,469,255,25,378,27,495,833,45,64,161,2,61,667,76,742,32,90,445,5,814,65,887,119 }, +{ 98,223,393,1,354,834,195,791,447,697,284,293,360,541,781,156,51,807,18,664,421,411,163,668,48,31,591,765,883,386,948,23 }, +{ 679,141,816,36,93,406,876,144,228,137,1,180,669,21,332,251,5,269,116,187,96,351,202,752,317,64,203,831,574,466,855,345 }, +{ 15,515,700,13,1,753,2,0,23,341,3,5,4,10,51,11,33,165,6,7,115,197,12,64,180,153,217,77,9,569,901,317 }, +{ 13,23,202,51,5,21,403,15,120,64,1,450,128,141,12,523,33,165,494,125,2,515,269,7,48,102,318,95,260,180,453,197 }, +{ 16,18,24,60,71,92,146,246,199,35,140,7,9,118,121,108,167,230,126,132,0,640,156,14,68,133,267,360,649,271,64,55 }, +{ 269,141,678,177,202,77,128,318,33,947,40,120,291,349,102,137,64,352,210,864,461,498,13,342,196,23,275,450,954,0,205,111 }, +{ 16,24,92,18,71,60,35,7,108,191,167,246,140,14,126,21,1,68,150,118,149,388,399,9,273,0,121,796,230,48,212,517 }, +{ 2,14,1,29,46,75,52,70,69,171,38,7,58,163,16,5,24,220,67,112,223,54,50,409,155,35,267,186,151,334,394,140 }, +{ 9,252,100,265,166,39,88,404,329,0,1,520,382,812,101,593,264,274,604,676,30,118,68,553,18,664,363,23,639,865,21,411 }, +{ 16,18,35,24,0,60,158,7,22,68,14,49,109,159,55,9,28,71,2,10,5,105,1,118,329,13,344,23,92,20,21,126 }, +{ 15,13,515,700,23,0,753,1,51,2,4,10,77,5,3,197,115,165,961,202,9,457,180,12,141,22,33,120,6,11,318,31 }, +{ 160,93,251,137,317,1,180,36,120,217,345,752,617,352,332,10,96,531,498,318,365,202,141,269,816,341,901,679,143,35,83,968 }, +{ 6,25,42,128,19,59,122,4,85,26,611,27,269,233,45,0,343,91,318,80,11,177,283,73,33,614,2,77,64,138,445,216 }, +{ 95,64,74,7,32,81,51,204,0,20,237,65,56,38,91,23,207,180,347,343,29,6,511,52,49,10,25,18,554,370,14,312 }, +{ 202,120,326,260,450,817,494,318,137,403,128,77,523,553,859,5,704,1,15,23,13,576,7,16,615,51,682,291,515,0,21,234 }, +{ 20,43,107,356,362,126,595,92,359,7,422,319,493,16,858,5,392,246,414,683,60,0,35,945,441,21,259,819,49,97,279,173 }, +{ 25,42,6,77,33,102,0,122,4,690,29,483,210,27,21,19,2,300,18,648,680,119,117,59,1,10,342,12,26,153,91,684 }, +{ 31,44,299,116,125,242,456,599,22,393,0,144,492,28,268,1,9,963,301,105,367,36,127,170,384,434,206,98,918,10,13,93 }, +{ 410,521,686,367,662,88,335,321,201,96,98,772,144,1,934,921,443,435,284,274,264,551,120,897,44,100,33,225,744,418,909,960 }, +{ 142,178,878,234,132,786,195,202,77,416,147,929,146,522,167,259,687,639,450,271,626,481,590,5,198,212,771,49,0,465,315,427 }, +{ 254,39,131,9,272,0,578,716,310,224,30,49,105,827,518,829,166,333,616,228,613,846,101,219,1,31,890,98,159,938,252,100 }, +{ 230,699,854,473,450,351,831,137,855,217,352,704,800,202,251,498,160,144,206,203,317,201,253,752,418,141,1,332,82,180,443,36 }, +{ 403,202,475,453,494,23,51,77,318,402,13,33,128,102,137,141,120,342,269,0,450,4,899,576,40,421,275,117,217,177,196,64 }, +{ 23,44,98,182,291,144,116,39,110,141,96,82,905,70,367,264,125,93,77,411,120,1,658,202,100,415,107,363,197,30,447,105 }, +{ 15,515,1,13,700,23,77,120,0,753,51,180,202,141,260,5,21,115,2,137,128,9,450,197,365,269,12,326,110,102,318,7 }, +{ 0,32,18,95,207,577,193,29,61,104,64,784,715,102,693,887,81,91,583,671,403,5,52,474,397,180,138,49,37,344,38,263 }, +{ 0,101,9,68,252,16,100,39,166,364,124,24,154,265,212,88,18,35,329,419,28,118,71,30,65,158,191,55,1,694,21,676 }, +{ 16,24,191,18,35,71,167,118,149,68,212,9,0,1,21,108,101,92,60,375,302,7,589,755,124,674,350,48,562,246,13,363 }, +{ 2,14,69,24,1,67,46,16,38,103,29,267,7,35,189,135,278,71,108,18,83,309,52,6,149,388,75,236,60,0,150,66 }, +{ 13,1,23,0,4,2,51,15,180,33,3,115,5,515,141,10,77,700,11,9,197,341,202,165,217,102,22,7,753,317,365,6 }, +{ 447,1,698,411,31,363,98,5,919,4,156,125,759,691,13,64,459,354,44,21,48,293,30,914,478,225,82,120,2,922,848,839 }, +{ 854,82,351,217,141,180,352,15,515,752,1,700,317,898,753,244,10,21,922,115,77,36,4,260,64,110,372,13,5,365,120,11 }, +{ 0,1,4,13,5,2,82,33,3,120,10,23,9,11,77,260,21,102,8,31,40,6,351,51,64,450,22,117,93,110,7,457 }, +{ 51,13,403,23,12,475,1,2,21,5,453,523,115,202,817,7,0,99,3,6,450,120,494,64,22,95,49,899,10,37,32,141 }, +{ 180,752,352,141,498,864,317,217,9,0,115,237,230,39,30,197,83,1,930,64,35,365,372,13,579,88,702,36,101,901,482,21 }, +{ 16,24,0,7,22,18,28,35,14,158,71,2,109,60,1,168,49,154,124,68,10,55,92,118,159,9,5,747,95,105,65,6 }, +{ 15,515,700,753,0,23,1,13,341,51,120,77,141,4,137,33,260,82,202,9,180,5,351,2,291,10,11,901,21,115,40,128 }, +{ 24,68,35,149,18,16,0,7,9,14,189,108,69,65,67,1,71,2,118,28,140,101,114,336,230,124,175,133,46,55,251,154 }, +{ 13,308,197,115,125,9,165,237,391,23,509,569,546,28,49,629,22,338,317,254,749,180,468,159,903,386,217,352,558,39,36,734 }, +{ 64,90,32,217,77,4,141,216,172,312,128,13,86,33,597,147,352,95,5,115,875,22,59,11,102,14,182,437,97,177,874,707 }, +{ 1,22,36,0,105,28,2,67,95,49,55,5,239,12,86,9,83,170,312,64,31,21,23,10,164,50,114,159,208,13,7,320 }, +{ 9,18,16,0,159,105,101,252,49,310,24,68,35,39,265,272,7,1,60,28,455,890,329,557,118,286,55,137,327,167,5,13 }, +{ 129,123,214,249,618,17,5,257,205,184,460,76,2,162,769,245,90,106,128,45,119,1,183,4,3,12,179,64,6,229,99,209 }, +{ 51,453,719,457,23,13,730,899,475,386,4,15,11,12,670,196,515,523,961,401,153,3,700,99,753,117,403,32,120,165,57,0 }, +{ 173,66,192,204,20,74,104,636,7,43,289,426,825,712,560,214,81,750,65,97,707,0,90,414,64,348,32,500,22,861,95,6 }, +{ 13,23,1,51,5,21,141,120,202,15,165,2,515,180,12,125,0,64,82,700,197,269,32,48,260,128,115,93,9,137,33,753 }, +{ 200,34,322,78,472,390,27,714,19,14,136,161,453,176,236,444,59,3,62,128,108,57,283,862,73,53,47,17,412,813,4,56 }, +{ 33,347,66,204,426,498,56,172,97,95,5,681,546,22,10,0,135,180,4,241,19,174,6,353,263,21,7,370,42,197,27,808 }, +{ 131,224,219,187,385,371,258,442,254,737,31,98,836,127,924,944,44,871,908,716,39,827,201,574,116,137,36,1,276,242,578,616 }, +{ 1,15,2,180,4,141,13,515,0,5,3,115,700,901,341,23,217,352,753,51,197,77,317,33,365,752,165,21,6,7,269,93 }, +{ 370,91,718,74,81,510,397,66,636,240,355,84,138,511,18,278,6,681,701,289,90,5,214,582,64,104,0,643,192,65,750,32 }, +{ 15,515,700,753,13,120,1,0,165,2,197,23,260,180,4,82,51,386,8,5,12,10,3,141,351,341,326,9,450,7,64,6 }, +{ 32,2,76,5,1,292,72,45,476,214,21,241,29,14,17,48,129,90,179,460,464,123,290,148,519,205,3,263,249,38,710,89 }, +{ 13,165,115,17,197,569,23,509,457,45,32,41,106,180,62,38,659,734,155,536,341,629,961,873,587,54,431,37,391,99,405,428 }, +{ 68,24,35,16,0,101,9,124,154,71,149,65,18,175,28,118,7,55,302,108,92,14,22,346,1,39,429,252,375,364,10,67 }, +{ 0,9,1,68,230,65,35,69,83,23,101,13,141,67,217,352,21,39,16,88,28,124,212,100,115,154,51,64,30,36,10,317 }, +{ 100,265,88,909,410,382,812,593,1,213,321,30,252,230,352,264,9,166,689,39,676,98,21,466,724,639,478,217,13,48,553,101 }, +{ 113,61,198,904,43,0,5,37,899,325,20,59,33,523,204,725,817,389,470,329,222,40,174,58,22,453,690,848,122,104,788,105 }, +{ 16,24,141,18,7,0,71,140,35,269,75,352,12,9,108,217,5,330,60,64,199,70,22,13,486,246,318,133,65,50,23,498 }, +{ 271,167,121,60,18,191,146,199,16,1,446,132,575,212,463,354,126,35,598,566,727,98,107,21,608,955,640,407,5,24,223,68 }, +{ 15,515,115,217,700,13,317,753,141,180,33,23,110,120,4,341,82,10,1,260,365,36,64,854,351,21,51,352,137,77,40,0 }, +{ 173,7,97,356,43,107,20,387,729,104,426,232,560,595,359,392,414,707,885,81,5,0,66,858,612,49,861,14,22,32,819,230 }, +{ 15,515,700,753,13,23,51,82,0,33,165,120,196,4,1,2,197,453,260,351,180,12,40,8,386,110,5,326,9,141,217,457 }, +{ 9,100,120,30,77,795,137,82,202,39,264,827,578,127,0,166,373,318,18,326,141,260,1,450,731,31,33,395,217,291,341,254 }, +{ 14,2,67,1,24,69,0,28,65,7,46,18,114,108,36,83,38,398,9,16,124,133,103,154,50,55,22,267,29,160,35,547 }, +{ 14,7,69,24,66,16,2,267,189,67,71,150,140,97,18,60,172,35,6,1,38,149,388,92,83,135,108,74,462,380,29,36 }, +{ 15,515,700,753,1,13,2,0,4,341,5,3,23,365,11,117,180,10,12,33,134,115,77,197,217,165,6,7,317,102,21,9 }, +{ 1,22,0,12,5,2,36,28,21,10,86,13,23,49,128,9,95,51,55,96,208,141,48,202,4,137,37,64,105,3,50,7 }, +{ 605,630,63,123,736,650,65,108,444,368,561,389,19,25,42,619,122,194,183,27,53,33,84,26,297,813,114,73,256,235,249,216 }, +{ 127,39,9,0,31,371,98,254,1,385,395,44,30,836,187,131,100,116,284,578,299,166,28,21,737,16,276,272,23,49,137,935 }, +{ 2,61,6,29,45,151,1,655,7,207,32,5,112,425,17,76,833,4,14,64,58,106,119,25,113,128,72,52,70,21,292,790 }, +{ 2,5,17,14,3,29,23,27,13,401,46,6,51,58,1,453,45,53,34,52,133,19,236,26,181,114,99,366,151,108,218,38 }, +{ 31,22,170,1,301,44,127,98,36,28,55,105,239,0,338,116,512,299,293,125,86,10,242,395,2,13,9,64,841,23,95,685 }, +{ 1,21,2,14,5,32,48,50,38,270,46,76,290,72,45,54,17,0,155,221,263,207,37,281,430,3,89,12,181,408,36,67 }, +{ 17,106,119,378,84,240,62,80,383,136,306,3,56,790,742,5,207,504,64,440,32,128,45,2,123,209,14,4,61,57,297,667 }, +{ 13,15,1,515,23,2,0,700,4,115,3,51,5,10,753,180,33,341,217,11,165,317,365,197,6,77,40,64,22,9,7,117 }, +{ 772,335,96,744,1,367,662,686,652,897,303,264,521,31,225,410,141,520,260,116,64,44,321,98,144,88,919,966,340,269,349,284 }, +{ 1,0,5,28,36,2,12,22,83,67,65,50,24,14,9,96,21,218,18,114,48,281,54,10,7,160,181,103,37,23,133,99 }, +{ 25,6,145,42,138,81,174,348,525,544,26,74,85,280,287,648,746,91,66,0,29,396,204,64,636,90,122,194,355,104,65,233 }, +{ 16,24,0,18,28,158,7,35,49,22,68,159,55,1,14,109,105,2,9,71,65,154,124,95,424,344,60,239,118,577,21,10 }, +{ 352,854,699,230,93,689,137,144,217,160,251,36,669,202,351,120,617,855,752,203,332,82,450,180,141,748,831,30,258,201,1,816 }, +{ 15,13,515,700,1,2,0,753,23,5,4,3,51,33,10,115,11,317,217,77,180,341,117,165,6,134,197,153,64,9,102,7 }, +{ 104,20,43,173,66,319,0,77,202,7,198,5,97,580,355,74,2,204,174,52,712,234,426,155,102,192,32,4,500,337,226,904 }, +{ 13,23,15,51,1,515,0,2,5,700,141,4,753,165,115,12,3,21,457,10,180,269,32,6,197,202,9,7,120,11,77,33 }, +{ 15,515,700,753,0,1,13,2,23,115,4,317,8,3,5,51,9,341,10,217,22,365,33,457,6,180,77,901,197,120,18,7 }, +{ 15,515,700,753,1,0,2,3,4,13,5,141,23,16,82,217,457,10,365,180,9,317,51,21,269,898,64,202,11,12,318,341 }, +{ 2,5,1,14,50,38,29,17,114,46,133,3,45,21,58,171,181,36,218,12,6,52,0,48,137,65,361,23,155,4,285,51 }, +{ 0,68,9,65,101,124,35,212,16,149,154,100,24,1,114,336,67,589,252,39,71,189,69,562,18,13,30,398,118,88,265,264 }, +{ 1,2,14,22,0,7,67,65,28,36,24,46,168,5,86,69,38,16,49,12,289,10,194,50,83,114,95,6,18,23,55,158 }, +{ 13,23,15,51,515,0,700,4,1,753,2,10,115,961,457,12,33,11,3,5,197,9,165,77,102,403,453,40,64,22,37,59 }, +{ 15,515,700,753,0,1,2,13,23,5,51,901,8,9,180,3,7,82,4,120,12,10,719,341,6,31,141,457,197,22,115,93 }, +{ 100,252,88,101,0,265,9,724,48,1,21,352,213,676,410,382,321,230,30,329,593,909,39,812,553,217,23,689,520,264,166,419 }, +{ 2,5,1,58,171,14,46,50,29,52,45,38,186,155,67,54,151,281,334,61,48,96,17,181,103,400,502,227,21,223,12,69 }, +{ 23,120,13,1,202,141,51,21,165,128,260,15,5,269,137,64,33,180,82,318,93,197,77,326,515,125,110,700,450,2,32,48 }, +{ 341,197,10,901,13,15,8,638,569,515,479,23,180,873,700,165,143,642,0,961,753,951,1,115,509,499,116,12,498,242,82,206 }, +{ 15,1,23,13,515,21,120,51,2,141,202,700,5,180,165,0,753,197,12,7,33,260,352,137,269,4,82,128,48,9,110,6 }, +{ 2,29,50,58,1,6,5,52,14,262,17,46,27,53,151,34,171,74,324,26,38,309,45,113,19,96,287,396,223,67,73,583 }, +{ 13,23,141,51,4,202,0,115,77,2,33,217,5,317,180,64,10,269,3,9,15,21,1,128,102,137,318,11,352,515,22,31 }, +{ 1,67,0,24,50,5,14,18,16,69,2,9,103,35,83,12,96,28,54,7,58,223,21,46,281,48,65,181,22,38,36,108 }, +{ 13,23,141,51,77,64,202,115,33,102,128,4,0,269,10,21,217,32,180,318,9,137,2,11,22,291,7,177,16,31,165,197 }, +{ 317,115,180,365,873,498,217,341,13,752,482,197,569,352,1,901,36,23,457,468,165,346,546,143,509,134,579,876,868,2,332,21 }, +{ 184,257,205,229,152,17,57,497,266,432,452,524,5,619,381,32,4,90,2,12,313,128,45,59,245,106,3,471,129,769,339,214 }, +{ 13,23,1,0,15,2,4,515,51,3,10,33,5,700,115,180,753,77,11,365,341,217,9,6,197,7,102,165,317,40,22,64 }, +{ 626,70,771,687,379,846,767,761,518,878,82,481,31,786,49,591,178,163,407,44,87,13,845,125,590,371,195,120,98,557,937,351 }, +{ 264,1,410,909,772,897,686,521,335,478,98,96,691,639,100,44,284,382,31,321,744,88,914,724,662,765,223,9,682,363,0,367 }, +{ 13,23,1,2,0,15,51,515,5,10,4,33,115,77,180,700,3,141,217,40,6,753,317,197,64,165,7,11,102,9,341,22 }, +{ 141,77,13,64,269,23,115,21,318,217,5,202,102,33,137,2,15,291,177,51,48,180,32,4,515,352,128,7,0,10,96,11 }, +{ 13,15,23,515,51,0,700,753,1,2,4,10,33,11,961,453,115,40,457,14,12,3,9,5,165,401,197,77,22,21,64,102 }, +{ 1,22,0,36,2,31,5,12,13,105,28,9,49,86,141,21,23,95,128,55,44,115,170,10,164,98,180,4,137,239,83,51 }, +{ 100,101,88,0,252,9,265,30,21,39,759,724,213,329,321,13,419,68,562,382,676,352,694,35,553,410,1,166,909,593,230,23 }, +{ 539,88,30,190,321,530,840,144,669,435,957,748,778,100,96,418,203,213,1,131,410,228,466,274,36,382,219,863,613,83,822,352 }, +{ 7,97,92,173,298,107,43,314,232,140,16,356,20,387,729,362,126,359,246,14,230,501,426,441,0,5,560,66,104,779,35,60 }, +{ 2,14,7,1,58,5,46,16,38,70,75,45,24,155,29,0,21,52,61,163,220,50,69,270,35,48,32,171,18,6,64,54 }, +{ 447,411,363,664,647,98,621,1,354,271,223,478,18,777,781,936,360,759,167,132,121,48,21,156,9,195,118,293,23,691,13,264 }, +{ 2,1,14,65,36,67,0,7,46,22,69,5,38,24,28,6,83,29,86,114,168,50,124,208,12,18,108,10,194,484,103,16 }, +{ 421,386,51,791,730,958,165,801,23,453,697,403,615,13,221,523,24,899,401,326,551,670,576,102,18,33,125,77,566,115,203,197 }, +{ 104,319,422,945,0,81,20,43,715,32,784,693,879,7,397,74,306,207,52,681,671,2,61,173,6,636,904,95,887,5,18,192 }, +{ 2,29,1,46,14,52,70,262,6,26,50,67,75,96,309,38,103,112,58,19,5,163,145,83,74,220,223,357,24,69,331,25 }, +{ 786,929,590,771,687,626,941,178,465,259,70,5,13,21,35,534,107,518,132,49,878,48,146,121,379,279,31,767,147,195,108,125 }, +{ 5,2,186,45,17,29,48,50,14,61,46,155,400,1,227,171,52,58,38,54,430,209,80,281,3,106,536,311,181,243,21,502 }, +{ 0,32,64,95,817,494,342,403,207,202,194,389,453,365,312,180,316,5,690,237,848,577,450,61,102,523,475,289,49,241,65,482 }, +{ 23,13,51,15,202,515,1,0,2,12,115,4,700,5,165,753,77,457,21,141,128,10,3,64,403,32,197,318,9,11,33,117 }, +{ 119,2,6,76,5,17,45,292,306,240,32,1,19,84,64,61,4,209,710,80,26,0,106,27,214,25,128,129,29,179,3,113 }, +{ 15,515,700,1,753,0,13,23,180,120,51,2,5,33,165,197,9,450,7,260,115,523,4,12,202,141,82,77,21,102,8,6 }, +{ 6,138,74,280,222,85,66,226,25,42,87,204,64,337,29,135,95,174,235,26,145,65,19,32,792,294,112,52,256,2,5,22 }, +{ 39,9,0,101,333,158,49,252,310,254,272,68,16,18,159,286,344,455,30,109,627,327,24,105,419,100,364,22,35,1,329,709 }, +{ 21,5,32,14,2,1,38,72,76,54,17,3,48,221,270,0,45,46,12,181,37,89,36,50,540,290,430,10,4,741,99,23 }, +{ 120,137,202,269,141,260,318,450,922,494,77,291,82,15,5,351,128,1,515,326,64,854,700,352,342,21,753,678,349,32,523,90 }, +{ 16,24,68,35,71,18,149,118,191,167,9,0,212,124,65,246,7,67,140,189,399,101,133,60,1,108,267,114,69,92,695,154 }, +{ 28,0,9,67,1,22,109,36,55,65,194,114,39,83,49,69,2,35,103,50,158,208,86,420,168,289,505,24,7,185,5,323 }, +{ 147,325,198,427,142,178,202,798,5,376,20,318,259,43,120,450,77,234,534,904,470,465,878,725,329,14,315,0,260,858,70,61 }, +{ 28,0,65,9,109,1,55,67,35,22,24,39,289,7,175,14,114,2,158,124,420,194,68,16,336,36,49,69,168,570,154,505 }, +{ 141,180,13,115,1,23,4,269,2,202,0,317,217,51,15,5,21,352,77,318,3,752,197,10,165,365,137,341,9,515,33,64 }, +{ 15,515,700,0,753,1,2,13,23,9,51,5,4,901,33,7,8,3,12,93,180,120,197,6,82,341,10,141,22,260,457,115 }, +{ 6,74,66,1,25,75,324,380,278,26,138,85,135,500,87,42,220,841,97,350,29,19,70,226,38,21,52,606,235,889,2,14 }, +{ 13,23,51,12,4,15,453,0,457,1,403,165,115,3,11,2,64,5,401,10,515,37,202,33,40,32,99,475,197,700,308,17 }, +{ 788,180,5,83,693,319,314,4,32,21,17,11,817,3,510,498,33,12,24,104,814,120,64,117,306,804,523,450,288,160,102,43 }, +{ 15,1,515,13,2,700,23,0,4,753,3,341,5,51,33,11,10,6,77,7,115,102,180,165,141,9,197,217,901,40,12,64 }, +{ 101,18,9,167,520,16,0,118,60,212,604,364,694,24,55,252,68,917,264,35,1,121,146,363,39,100,806,5,21,166,191,28 }, +{ 13,23,0,33,51,141,77,4,64,2,115,217,9,102,7,202,21,10,180,3,15,128,5,269,6,32,11,16,165,352,22,317 }, +{ 66,135,97,74,172,6,278,7,204,324,138,174,29,85,2,87,25,140,92,192,52,38,802,69,448,500,808,620,22,1,280,232 }, +{ 2,24,69,6,97,7,1,0,14,298,423,66,67,29,150,25,189,267,124,74,607,18,36,81,172,33,83,38,52,273,71,809 }, +{ 0,9,158,39,68,49,109,16,24,333,35,344,101,22,159,254,272,30,124,65,28,18,793,154,310,252,327,105,627,419,286,55 }, +{ 15,515,700,10,753,33,77,180,4,341,1,197,13,115,365,23,901,317,5,102,11,217,165,117,141,40,2,3,253,21,134,55 }, +{ 100,166,382,478,265,264,88,39,98,1,404,274,9,593,724,921,639,438,363,682,411,31,30,812,96,447,821,905,252,0,223,435 }, +{ 19,283,436,53,297,26,813,432,27,128,42,25,390,503,122,736,73,123,605,63,389,529,630,250,690,65,381,444,6,269,108,216 }, +{ 33,202,13,128,494,0,51,141,269,1,4,2,102,180,15,137,65,95,6,450,77,40,117,59,457,36,196,817,134,86,49,515 }, +{ 18,16,60,68,101,167,191,118,35,121,9,212,55,0,126,1,24,647,199,146,520,107,628,621,363,71,21,28,346,92,806,727 }, +{ 352,230,217,531,160,93,36,669,748,854,689,258,137,871,728,699,752,251,574,202,373,351,228,120,717,260,144,219,268,82,816,1 }, +{ 15,515,700,753,13,23,0,51,8,1,4,82,165,77,110,33,10,180,5,202,11,22,120,12,9,197,115,93,403,141,40,351 }, +{ 0,9,101,217,35,88,352,100,39,175,30,68,562,752,13,317,252,115,180,197,64,1,83,141,65,213,165,230,194,36,28,265 }, +{ 32,64,5,470,288,90,21,147,0,95,356,22,20,519,835,312,819,18,247,182,11,97,13,4,387,49,43,298,316,48,107,7 }, +{ 16,14,24,1,7,2,35,0,5,50,18,69,46,12,58,75,9,67,70,163,21,54,38,48,223,502,281,37,140,60,28,10 }, +{ 18,265,9,252,39,195,354,411,1,16,132,101,121,682,167,203,5,363,146,593,35,333,21,271,60,13,100,0,156,327,7,520 }, +{ 4,13,1,115,141,23,2,180,5,0,51,3,217,202,77,15,33,269,341,318,317,21,165,515,11,10,197,365,9,137,64,352 }, +{ 7,24,16,14,71,35,18,92,140,189,108,149,68,60,69,150,2,230,97,66,0,458,67,1,65,251,38,314,388,267,36,46 }, +{ 1,22,31,36,0,2,44,5,141,105,180,170,12,64,13,98,86,55,23,21,28,164,115,127,10,125,128,4,9,239,352,197 }, +{ 66,7,97,2,192,20,52,43,135,74,560,107,104,0,750,147,414,29,580,173,324,376,226,194,77,174,204,38,356,64,16,470 }, +{ 0,101,9,68,35,124,24,65,39,16,252,100,154,166,28,364,149,694,30,88,55,346,1,419,71,439,265,289,22,21,175,158 }, +{ 39,9,100,30,127,0,737,856,31,836,827,254,98,931,166,88,93,1,44,190,131,228,120,395,625,385,863,264,219,373,110,28 }, +{ 5,17,2,3,21,45,14,155,48,32,38,1,328,181,186,46,23,51,12,61,227,29,106,54,99,133,62,832,13,37,514,543 }, +{ 131,613,30,224,228,716,274,100,827,406,219,856,39,190,31,88,1,166,9,44,829,863,931,93,0,187,625,924,127,98,137,254 }, +{ 352,217,64,141,752,269,180,864,437,372,954,115,498,177,77,349,317,318,579,291,947,197,247,0,23,717,237,304,128,457,776,678 }, +{ 141,217,180,317,352,115,15,341,1,23,13,365,515,752,2,64,0,5,498,700,372,165,51,237,753,77,244,197,137,4,21,253 }, +{ 5,2,17,14,1,45,3,38,21,29,181,58,46,48,50,133,114,171,61,155,32,6,186,281,361,12,36,54,4,13,52,514 }, +{ 6,2,119,25,790,4,45,483,655,113,1,29,76,26,32,19,887,17,128,0,292,833,59,61,106,64,77,814,14,151,84,42 }, +{ 13,23,2,0,51,4,1,115,141,3,5,180,33,217,77,9,202,11,7,15,10,6,317,64,21,197,515,165,102,128,22,269 }, +{ 13,23,51,202,21,5,1,15,141,165,120,2,115,12,32,0,515,128,318,64,125,700,4,403,197,453,180,457,3,7,10,6 }, +{ 9,39,31,30,0,127,1,44,100,131,98,187,385,276,88,442,219,908,254,116,49,166,935,28,201,36,141,827,137,299,284,21 }, +{ 22,49,28,109,9,185,105,95,1,131,159,272,36,67,86,254,39,55,35,0,505,31,83,169,208,327,286,98,168,535,312,708 }, +{ 5,1,2,21,0,12,48,22,10,14,36,3,32,17,23,54,86,38,4,51,13,37,137,50,65,281,114,45,28,99,58,202 }, +{ 141,269,352,82,217,351,180,854,372,922,752,1,15,260,317,318,515,202,64,700,120,349,954,753,77,35,67,717,898,137,365,115 }, +{ 144,203,613,418,326,406,96,669,137,679,1,228,494,822,840,317,36,83,855,160,817,859,856,816,217,831,345,93,876,77,44,251 }, +{ 15,13,515,23,700,753,51,1,33,0,202,21,2,5,180,141,120,165,217,82,12,117,4,352,269,197,115,32,3,9,134,260 }, +{ 13,23,115,1,0,51,4,77,2,33,15,141,10,5,341,180,515,3,217,202,9,365,317,64,700,102,11,165,197,22,753,7 }, +{ 531,943,373,160,728,93,206,260,261,559,964,269,717,535,332,384,365,295,110,533,141,10,180,352,244,137,120,55,959,564,36,253 }, +{ 1,31,36,170,22,55,44,10,86,64,127,0,2,98,301,164,740,338,237,143,5,125,116,13,242,141,299,180,23,169,105,12 }, +{ 13,23,141,77,51,4,64,32,33,202,115,269,102,128,21,0,177,180,318,90,40,10,7,5,137,15,217,352,9,291,59,22 }, +{ 202,120,260,318,77,15,450,269,1,82,33,23,141,13,51,515,351,128,700,5,64,326,137,21,102,110,753,494,93,523,817,165 }, +{ 523,899,102,33,730,15,23,403,719,117,153,13,515,51,475,4,700,5,453,817,196,753,494,40,202,120,1,2,450,457,17,421 }, +{ 202,403,494,450,120,817,523,475,318,453,33,402,128,77,13,51,260,576,342,102,15,23,515,4,700,5,82,753,326,210,137,615 }, +{ 2,29,112,66,7,52,70,151,58,87,135,5,74,226,307,6,14,186,1,45,549,172,644,25,113,287,46,155,334,64,294,97 }, +{ 1,77,349,291,260,120,652,102,5,39,64,269,9,33,340,342,13,98,888,698,23,296,100,318,51,202,87,137,638,128,50,850 }, +{ 1,13,15,2,0,4,23,515,5,141,180,3,700,341,115,51,753,269,77,901,197,352,217,33,21,11,365,6,165,202,7,317 }, +{ 7,14,16,2,46,5,70,58,1,38,24,35,92,163,0,75,21,18,50,54,140,12,87,220,155,69,171,23,60,9,13,307 }, +{ 2,29,66,226,135,7,87,74,52,278,6,75,222,220,294,70,97,1,145,25,172,262,324,38,69,112,331,92,5,14,140,26 }, +{ 15,515,700,753,33,77,117,4,1,102,134,40,153,11,13,196,217,21,5,51,23,115,32,3,2,202,141,137,128,291,48,177 }, +{ 15,217,82,515,351,141,317,1,13,700,260,77,110,120,115,854,23,753,180,51,21,36,137,922,5,64,365,352,291,202,93,341 }, +{ 31,190,30,373,120,110,863,88,44,127,908,856,260,318,82,98,93,187,836,717,935,39,442,131,141,254,228,219,1,968,77,116 }, +{ 23,13,308,9,165,115,51,21,401,125,49,39,197,391,159,254,217,743,28,438,773,629,558,386,341,95,32,317,876,679,109,166 }, +{ 49,5,43,165,7,0,21,104,125,22,173,422,64,13,623,102,20,18,314,95,91,141,23,31,193,51,391,900,779,558,92,232 }, +{ 1,4,13,2,15,0,23,515,77,3,341,33,5,700,115,51,202,753,141,180,11,10,102,217,6,901,40,7,197,318,317,365 }, +{ 93,843,295,120,36,160,206,261,10,137,567,110,384,141,943,268,201,332,258,55,1,180,64,116,44,144,699,203,282,31,260,373 }, +{ 81,7,192,426,43,173,172,104,879,91,5,712,715,526,6,97,568,95,448,66,33,861,560,32,49,20,0,636,232,825,2,22 }, +{ 475,403,51,453,33,102,13,23,494,202,0,196,15,77,153,18,4,117,515,450,318,22,730,128,700,421,65,753,269,402,134,817 }, +{ 141,269,260,318,202,120,352,349,82,351,1,5,854,137,64,291,15,922,180,851,32,77,515,372,21,700,7,217,13,947,33,753 }, +{ 15,515,700,753,1,13,0,2,4,23,3,5,180,115,197,12,51,165,217,10,961,9,6,141,352,21,8,7,33,77,457,120 }, +{ 39,166,9,30,0,101,274,404,252,333,190,100,158,438,310,88,68,265,656,21,1,530,329,344,49,539,625,254,13,131,48,419 }, +{ 0,1,28,9,22,12,65,83,67,36,5,2,50,55,96,109,16,13,24,23,21,238,49,18,285,160,128,39,69,114,7,323 }, +{ 15,515,700,1,0,753,23,2,13,51,5,180,115,6,3,9,197,12,457,120,7,165,901,82,4,21,8,141,31,33,719,341 }, +{ 9,39,30,0,28,166,22,49,180,1,352,35,317,158,88,141,498,131,115,345,752,128,228,217,100,83,219,930,13,251,365,36 }, +{ 5,61,45,2,80,29,311,209,6,17,58,1,151,106,454,667,243,70,52,496,287,592,255,738,64,74,483,14,27,32,112,19 }, +{ 31,125,22,44,299,456,685,242,599,116,170,28,0,1,492,393,506,144,558,10,268,301,239,23,13,36,963,367,55,206,105,95 }, +{ 187,258,926,574,839,93,228,860,406,219,871,160,137,531,224,116,120,902,669,201,36,131,44,144,843,533,318,384,442,1,434,268 }, +{ 7,107,75,16,87,9,64,177,24,18,291,77,349,141,60,232,23,0,51,269,132,14,5,21,70,32,678,112,126,121,71,947 }, +{ 15,515,700,753,1,0,2,13,5,3,23,180,4,115,901,51,6,8,961,9,7,10,12,82,197,22,141,341,33,120,365,457 }, +{ 13,23,51,1,5,202,2,12,15,21,165,141,0,115,3,4,32,515,197,10,180,318,128,120,64,700,6,7,403,269,457,137 }, +{ 1,2,0,77,64,3,141,13,33,15,23,10,6,102,5,515,180,4,117,7,700,165,11,217,269,40,753,115,128,17,197,134 }, +{ 345,531,332,269,260,317,717,752,373,351,180,352,728,82,10,365,160,533,217,143,498,251,244,93,341,901,36,1,141,898,55,864 }, +{ 16,7,33,189,92,77,388,60,140,35,102,24,14,1,230,21,150,117,733,314,18,915,71,13,108,134,5,64,69,2,98,22 }, +{ 142,202,234,178,5,786,77,49,70,0,416,450,639,878,1,48,21,929,147,259,315,455,198,120,12,481,163,113,846,329,318,22 }, +{ 81,715,192,0,173,712,681,104,636,91,74,20,750,370,7,718,95,879,22,43,825,560,422,64,207,49,172,18,397,10,426,319 }, +{ 13,23,15,51,515,0,700,753,4,1,961,2,10,115,457,11,33,453,3,5,9,40,12,197,165,77,401,475,64,102,22,569 }, +{ 64,297,5,445,95,61,250,311,80,34,17,312,45,2,86,472,58,14,180,53,22,151,869,738,247,237,29,1,128,165,21,288 }, +{ 16,24,18,71,7,35,118,92,14,154,60,68,0,149,28,302,124,150,55,175,2,9,97,1,429,20,108,273,22,65,43,126 }, +{ 195,360,156,771,132,163,626,687,591,371,883,146,121,846,70,586,379,13,293,98,407,48,761,296,354,18,31,1,55,49,21,105 }, +{ 202,13,77,23,318,33,51,0,4,141,5,21,217,32,291,102,64,128,15,10,9,494,269,137,515,403,1,31,117,700,120,317 }, +{ 7,192,97,81,172,66,426,173,43,715,712,232,861,879,104,330,568,298,74,893,885,526,387,825,92,140,91,14,636,6,5,448 }, +{ 2,1,14,6,67,7,65,69,24,36,66,124,108,83,38,29,22,86,0,18,484,5,28,46,12,10,25,302,150,16,650,74 }, +{ 33,77,13,202,102,4,0,23,128,51,141,64,318,22,403,269,137,10,15,40,494,117,32,59,11,153,1,21,177,196,515,115 }, +{ 269,141,318,77,349,291,217,202,33,15,372,304,515,22,102,177,351,700,352,120,5,137,10,317,260,753,64,851,854,403,49,21 }, +{ 6,74,66,85,138,25,87,42,135,26,226,222,280,29,75,500,220,278,792,70,19,2,1,294,204,64,32,145,853,112,52,174 }, +{ 9,0,105,39,16,18,1,101,272,31,127,98,24,518,333,252,310,28,68,737,846,371,158,916,938,49,30,7,286,35,301,455 }, +{ 2,1,14,67,24,46,83,108,69,29,38,103,114,36,6,133,18,0,28,7,65,52,236,75,50,398,5,309,135,16,278,160 }, +{ 22,1,28,105,49,95,0,2,67,55,36,239,168,159,65,35,14,170,320,164,9,7,10,5,114,12,83,64,194,109,24,301 }, +{ 7,66,172,97,92,140,232,568,298,14,192,314,16,380,135,324,2,330,74,38,357,448,126,69,35,5,107,6,387,60,204,572 }, +{ 2,29,1,14,5,6,46,133,114,50,52,26,218,108,19,13,366,236,27,45,70,17,58,23,86,51,137,65,112,38,25,12 }, +{ 6,1,74,25,2,26,29,66,42,19,75,14,388,67,108,70,52,85,103,65,38,138,357,133,114,594,324,516,603,96,309,69 }, +{ 22,9,28,1,36,49,109,105,86,95,131,31,169,39,0,141,272,159,44,55,98,180,13,30,185,115,83,128,352,137,64,208 }, +{ 203,822,326,23,77,859,403,494,576,39,473,182,33,1,691,100,18,217,13,817,411,447,363,102,93,966,96,478,291,704,310,120 }, +{ 15,515,700,753,33,77,117,4,102,134,115,153,13,1,40,217,11,196,341,2,5,3,23,317,365,0,21,291,32,51,12,569 }, +{ 15,515,700,753,13,0,23,1,8,82,51,165,197,120,180,2,9,33,4,110,5,12,10,260,351,386,141,7,457,475,93,901 }, +{ 1,23,13,15,51,0,21,2,515,5,141,180,120,165,700,202,197,4,753,12,33,9,7,82,115,93,3,352,260,6,110,48 }, +{ 15,515,700,753,0,1,2,5,3,4,8,13,180,341,10,23,7,6,9,51,77,197,961,115,165,82,120,31,22,202,457,217 }, +{ 559,661,922,564,141,533,10,317,373,110,143,269,244,260,332,261,93,642,752,295,351,876,531,843,180,206,728,384,352,1,434,120 }, +{ 15,515,1,0,700,2,13,23,753,5,51,180,3,165,12,6,197,115,4,9,7,21,719,8,457,82,141,120,33,22,901,10 }, +{ 198,234,0,325,5,77,202,416,20,147,32,43,639,315,49,61,450,455,142,21,113,230,22,318,725,342,207,13,95,904,494,10 }, +{ 447,264,363,9,411,676,682,1,156,664,821,478,166,354,812,39,100,905,382,897,98,18,759,404,31,101,724,5,265,223,88,13 }, +{ 24,14,69,16,35,18,2,7,108,189,71,67,267,149,1,46,68,83,38,140,0,236,251,9,388,60,133,103,65,28,29,50 }, +{ 16,7,35,20,14,18,109,2,43,120,107,60,1,121,326,907,553,77,13,147,23,82,68,260,0,403,5,24,202,126,265,199 }, +{ 30,131,187,276,31,44,613,442,39,9,190,228,1,839,116,935,908,219,127,88,244,224,110,137,93,201,98,141,36,567,0,856 }, +{ 98,223,1,393,812,265,100,421,593,834,697,48,51,410,791,382,21,88,31,284,9,125,96,293,230,23,213,217,656,689,541,5 }, +{ 98,51,127,219,616,258,105,293,395,421,924,512,31,308,23,201,116,44,301,272,763,276,125,13,453,170,401,295,261,944,115,567 }, +{ 253,110,951,352,811,206,332,180,141,244,282,10,854,417,642,638,559,752,143,911,260,55,93,533,499,498,661,120,351,959,564,341 }, +{ 49,9,159,254,272,158,0,131,28,39,627,105,327,286,22,518,688,578,68,347,374,101,224,424,95,35,219,24,16,364,65,344 }, +{ 105,22,131,272,98,286,327,109,374,239,28,95,320,219,9,224,55,127,187,36,578,169,64,185,538,1,159,10,371,634,49,616 }, +{ 691,478,340,1,658,914,724,363,744,698,156,772,411,296,682,447,9,284,335,98,264,303,909,21,354,410,225,13,664,686,88,919 }, +{ 16,24,35,18,71,7,140,108,189,267,92,60,14,230,68,69,9,1,149,46,246,191,388,167,2,0,118,236,133,21,674,5 }, +{ 9,0,127,31,98,371,395,39,737,49,1,44,385,272,512,28,293,242,836,761,254,299,101,16,187,22,116,158,159,131,18,21 }, +{ 16,18,68,0,60,35,9,101,252,28,118,24,419,55,7,109,604,71,39,121,22,364,14,158,191,167,925,126,329,21,92,49 }, +{ 116,268,203,93,206,692,551,31,417,940,499,8,473,44,202,523,959,0,120,137,559,22,450,403,576,10,728,299,13,326,51,1 }, +{ 225,459,744,1,919,914,691,330,622,21,141,223,5,284,934,335,88,538,340,82,385,839,363,120,478,98,48,30,64,32,686,166 }, +{ 5,1,2,0,14,36,21,281,12,48,50,67,22,28,54,83,24,218,38,10,181,9,32,18,65,58,45,114,430,17,99,37 }, +{ 137,450,202,704,120,260,326,318,968,269,851,403,291,77,23,141,182,310,494,373,351,457,82,890,349,110,60,128,817,678,105,96 }, +{ 15,515,700,753,4,33,13,23,77,5,40,11,102,93,1,21,110,51,82,117,141,2,10,8,32,64,120,31,202,3,217,115 }, +{ 15,13,1,23,515,0,51,2,700,5,753,21,180,141,165,3,12,115,197,4,7,6,457,9,352,202,33,8,719,120,77,341 }, +{ 219,127,258,98,276,201,131,395,944,293,116,284,567,31,242,105,137,935,295,44,403,860,51,224,576,456,9,371,578,475,202,512 }, +{ 16,7,18,35,60,0,14,20,118,28,68,22,2,24,1,92,158,107,5,49,154,126,109,12,43,10,55,6,677,71,21,168 }, +{ 93,728,531,160,559,373,574,120,295,860,533,269,717,260,926,902,258,318,36,201,261,434,851,137,617,141,187,352,843,384,332,251 }, +{ 28,0,1,9,22,109,83,39,49,12,36,67,55,5,96,2,128,30,158,69,21,23,160,208,35,13,65,323,50,141,194,238 }, +{ 23,13,51,1,5,15,141,21,0,2,165,515,202,700,12,197,180,120,32,115,4,753,64,9,7,269,6,3,125,386,48,453 }, +{ 5,21,13,49,14,20,7,23,43,32,1,0,652,48,713,22,38,2,16,132,955,107,12,279,24,888,197,640,70,303,18,638 }, +{ 9,0,28,39,1,30,35,101,22,67,83,141,49,175,36,68,55,88,13,251,10,69,23,158,180,115,64,100,217,65,345,166 }, +{ 260,120,82,269,5,450,351,1,202,141,854,13,77,922,32,33,137,4,23,125,291,21,15,515,165,349,177,700,318,326,180,753 }, +{ 121,16,18,35,363,101,60,20,107,14,68,259,621,55,604,43,7,252,9,364,126,0,167,191,5,407,132,28,199,419,146,10 }, +{ 13,23,51,1,15,0,2,141,5,515,12,21,700,115,165,180,4,753,3,197,202,32,9,120,7,8,6,11,37,10,457,269 }, +{ 201,144,206,443,418,203,435,96,335,459,187,1,88,332,330,321,269,934,30,372,822,521,268,326,44,523,382,141,410,264,494,473 }, +{ 31,44,276,201,116,131,284,662,567,144,9,489,98,295,268,434,0,30,137,39,93,1,187,22,219,918,110,299,141,36,224,384 }, +{ 520,478,664,1,264,604,9,167,777,759,411,0,806,724,48,21,101,68,647,936,363,223,118,682,410,18,100,16,252,98,265,13 }, +{ 23,70,21,87,60,75,120,182,163,379,92,18,7,937,71,121,446,132,24,98,931,126,107,77,795,195,115,44,411,146,51,850 }, +{ 39,9,0,737,127,31,846,98,1,827,105,310,371,30,254,100,44,18,395,242,272,101,385,916,836,16,265,131,938,93,166,557 }, +{ 279,20,43,126,107,7,92,16,356,362,60,595,246,359,598,35,0,683,939,653,121,97,125,441,399,392,150,199,48,230,14,649 }, +{ 206,417,93,959,499,728,8,559,120,473,137,141,10,564,31,260,44,450,203,341,253,244,373,116,143,638,268,180,352,110,318,940 }, +{ 259,465,147,132,590,687,534,199,581,146,941,427,107,640,279,178,121,5,195,150,522,955,198,35,786,929,798,142,1,21,325,626 }, +{ 523,15,120,450,202,515,403,51,817,700,13,753,23,457,33,899,128,64,730,102,494,342,115,719,453,196,49,99,318,421,308,5 }, +{ 141,559,10,244,365,564,661,180,253,143,752,110,55,317,533,341,901,93,373,206,535,160,82,922,260,36,531,964,352,332,261,197 }, +{ 219,258,98,127,276,964,943,137,843,535,201,935,131,860,261,295,284,567,206,44,116,31,253,492,203,332,160,615,36,93,55,692 }, +{ 0,319,422,207,945,693,577,887,32,804,95,344,104,904,61,20,5,43,7,725,113,510,306,102,49,263,153,426,33,83,22,9 }, +{ 1,22,0,5,12,2,36,21,28,86,49,105,9,10,23,13,141,95,31,55,128,37,51,4,83,202,3,64,96,7,32,44 }, +{ 15,515,13,700,1,0,753,2,23,3,4,5,51,10,115,197,6,33,12,9,165,7,8,77,11,961,180,269,141,22,120,457 }, +{ 15,1,23,120,77,13,515,51,141,202,700,180,110,137,260,753,326,5,128,102,0,21,2,165,269,33,197,450,318,217,93,115 }, +{ 15,515,1,700,0,753,13,2,23,180,51,5,120,4,9,115,197,12,7,165,21,33,6,82,3,8,523,901,31,141,457,260 }, +{ 16,18,24,7,92,35,60,75,9,13,71,14,0,108,50,21,126,121,1,140,23,5,132,146,2,12,128,10,64,141,70,87 }, +{ 180,341,901,15,515,1,365,700,0,2,197,753,115,4,10,13,752,5,3,8,165,317,141,23,143,873,44,31,569,55,93,6 }, +{ 9,0,175,35,101,28,39,67,68,1,65,83,30,69,364,336,22,114,55,124,194,158,100,289,252,166,64,345,103,36,50,88 }, +{ 64,165,180,197,115,247,217,237,21,13,32,316,22,141,352,72,288,304,95,225,76,391,386,16,468,90,49,35,365,640,372,23 }, +{ 15,515,700,13,753,1,0,2,23,4,5,3,115,51,141,197,12,10,180,961,7,9,21,33,217,6,8,165,457,11,77,341 }, +{ 132,121,199,146,60,279,493,640,407,598,126,195,534,581,955,590,107,5,150,35,522,49,259,16,18,360,156,0,147,362,21,167 }, +{ 0,1,28,9,22,5,36,12,65,24,67,96,2,83,18,50,114,55,21,16,7,10,23,14,13,160,137,51,48,218,103,69 }, +{ 93,120,957,77,30,968,459,110,137,160,613,102,202,352,373,141,31,372,217,330,190,318,269,260,203,44,28,473,228,177,863,704 }, +{ 15,515,700,0,753,1,13,23,2,51,5,9,120,82,4,7,901,197,10,8,260,180,341,12,33,6,3,523,165,102,115,141 }, +{ 206,417,8,141,499,44,244,93,31,10,137,253,559,116,728,144,120,564,269,638,203,352,143,260,341,752,268,717,951,180,160,110 }, +{ 530,254,228,1,96,21,406,39,827,31,669,840,613,829,137,679,166,98,23,51,960,438,131,93,48,224,219,317,310,36,876,190 }, +{ 15,515,700,753,13,457,0,197,719,1,165,82,23,8,120,730,2,10,12,180,134,5,9,141,260,4,351,51,115,3,341,899 }, +{ 0,16,68,9,24,28,18,35,252,109,39,419,124,158,154,55,101,71,22,118,60,7,49,65,333,14,1,10,329,364,677,346 }, +{ 1,15,13,23,515,51,120,0,700,180,2,165,5,753,141,197,21,33,202,102,260,4,9,12,7,326,137,450,115,6,82,110 }, +{ 535,253,352,564,110,365,82,180,341,10,854,533,55,898,244,901,873,141,752,143,642,559,498,317,36,951,115,964,638,282,661,197 }, +{ 31,44,125,338,116,64,242,36,1,10,55,22,456,237,180,13,299,164,506,86,23,165,558,143,0,762,492,479,844,546,93,8 }, +{ 13,23,4,1,202,2,0,51,115,77,141,180,5,15,217,3,33,11,515,317,9,10,102,21,700,341,365,318,269,64,32,128 }, +{ 9,39,0,166,68,101,28,364,30,158,562,35,175,65,333,154,49,404,706,124,21,252,274,168,190,289,100,570,16,1,310,346 }, +{ 15,515,700,753,341,13,0,23,1,33,141,4,260,82,77,51,351,180,9,5,115,137,10,217,11,120,102,40,349,269,202,854 } diff --git a/external/bc7enc_rdo/test.cpp b/external/bc7enc_rdo/test.cpp new file mode 100644 index 0000000000..ecfd2ebe7e --- /dev/null +++ b/external/bc7enc_rdo/test.cpp @@ -0,0 +1,872 @@ +// test.cpp - Command line example/test app +#ifdef _MSC_VER +#define _CRT_SECURE_NO_WARNINGS +#endif + +#define BC7ENC_VERSION "1.08" + +#define COMPUTE_SSIM (0) + +#if _OPENMP +#include +#endif + +#include "rdo_bc_encoder.h" + +using namespace utils; + +static int print_usage() +{ + fprintf(stderr, "\nReads PNG files (with or without alpha channels) and packs them to BC1-5 or BC7/BPTC (the default).\nFor BC7, the tool uses either bc7enc.cpp (uses modes 1/5/6/7) or bc7e.ispc (all modes, -U option, the default if SUPPORT_BC7E was TRUE).\n"); + fprintf(stderr, "Supports optional reduced entropy BC7 encoding (using -e, bc7enc.cpp only) and Rate Distortion\nOptimization (RDO - all encoders) for BC1-7 using -z# where # is lambda. Higher lambdas=more compressible files, but lower quality. Can also combine RDO with -e.\n"); + fprintf(stderr, "By default, this tool compresses to BC7. A DX10 DDS file and a unpacked PNG file will be written\nto the current directory with the .dds/_unpacked.png/_unpacked_alpha.png suffixes.\n"); + fprintf(stderr, "This tool does not yet support generating mipmaps (yet).\n"); + fprintf(stderr, "\nUsage: bc7enc [-apng_filename] [options] input_filename.png [compressed_output.dds] [unpacked_output.png]\n\n"); + fprintf(stderr, "-q Quiet mode (less debug/status output)\n"); + fprintf(stderr, "-apng_filename Load G channel of PNG file into alpha channel of source image\n"); + fprintf(stderr, "-g Don't write unpacked output PNG files (this disables PSNR metrics too).\n"); + fprintf(stderr, "-y Flip source image along Y axis before packing.\n"); + fprintf(stderr, "-o Write output files to the source file's directory, instead of the current directory.\n"); + fprintf(stderr, "-1 Encode to BC1. Use -L# option to set the base BC1 encoder's quality (default is 18 - highest quality).\n"); + fprintf(stderr, "-3 Encode to BC3. Use -L# option to set the base BC1 encoder's quality (default is 18 - highest quality).\n"); + fprintf(stderr, "-4 Encode to BC4. Use -hl and -hr# options to change the base encoder's quality.\n"); + fprintf(stderr, "-5 Encode to BC5. Use -hl and -hr# options to change the base encoder's quality.\n"); + fprintf(stderr, "-f Force writing DX10-style DDS files (otherwise for BC1-5 it uses DX9-style DDS files)\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "-X# BC4/5: Set first color channel (defaults to 0 or red)\n"); + fprintf(stderr, "-Y# BC4/5: Set second color channel (defaults to 1 or green)\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "-U BC7: Use bc7e.ispc (this is the default if it's been compiled in) instead of bc7enc.cpp. Higher quality using all BC7 modes, but doesn't support -e.\n"); + fprintf(stderr, "-C BC7: Use bc7enc.cpp instead of the default bc7e.ispc. Only supports modes 1/5/6/7. May be a slight win at certain lambdas combined with -e, but overall is weaker vs. bc7e.ispc.\n"); + fprintf(stderr, "-s BC7: Use perceptual colorspace metrics instead of linear (bc7e.ispc only). The default for all formats is to use linear RGB/RGBA metrics. RDO mode is currently always linear.\n"); + fprintf(stderr, "-uX BC7: Set the BC7 base encoder quality level. X ranges from [0,4] for bc7enc.cpp or [0,6] for bc7e.ispc. Default is 6 (highest quality).\n"); + fprintf(stderr, "-pX BC7: (bc7enc.cpp only) Scan X partitions in mode 1, X ranges from [0,64], use 0 to disable mode 1 entirely (faster)\n"); + fprintf(stderr, "-LX BC1: Set rgbcx.cpp's BC1/BC3 RGB encoding level, where 0=fastest and 18=slowest but highest quality. Default is 18.\n"); + fprintf(stderr, "\nBC3-5 alpha block encoding options:\n"); + fprintf(stderr, "-hl BC3-5: Use lower quality BC4 block encoder (much faster, but lower quality, only uses 8 value mode)\n"); + fprintf(stderr, "-h6 BC3-5: Use 6 value mode only for BC4 blocks\n"); + fprintf(stderr, "-h8 BC3-5: Use 8 value mode only for BC4 blocks\n"); + fprintf(stderr, "-hr# BC3-5: Set search radius, default is 5, larger=higher quality but slower compression\n"); + fprintf(stderr, "\nRDO encoding options (compatible with all formats/encoders):\n"); + fprintf(stderr, "-e BC7: (bc7enc.cpp only) Quantize/weight BC7 output for lower entropy (no slowdown but only 5-10%% gains, can be combined with -z# for more gains)\n"); + fprintf(stderr, "-z# BC1-7: Set RDO lambda factor (quality), lower=higher quality/larger LZ compressed files, try .1-4, combine with -e for BC7 for more gains\n"); + fprintf(stderr, "-zb# BC1-7: Manually set smooth block scale factor, higher values = less distortion on smooth blocks, try 5-70\n"); + fprintf(stderr, "-zc# BC1: Set RDO lookback window size in bytes (higher=more effective but slower, default=128, try 8-16384)\n"); + fprintf(stderr, "-zn BC1-7: Inject up to 2 matches into each block vs. 1 (the default, a little slower, but noticeably higher compression)\n"); + fprintf(stderr, "-ze BC1-7: Inject up to 1 matches into each block vs. 1 (a little faster, but less compression)\n"); + fprintf(stderr, "-zm BC1-7: Allow byte sequences to be moved inside blocks (significantly slower, not worth it in benchmarking, will likely be removed)\n"); + fprintf(stderr, "-zu BC1/3/7: Disable RGB ultrasmooth block detection/handling\n"); + fprintf(stderr, "\nRDO debugging/development:\n"); + fprintf(stderr, "-zd BC1-7: Enable RDO debug output\n"); + fprintf(stderr, "-zt BC1-7: Disable RDO multithreading\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "BC1/BC3 RGB specific options:\n"); + fprintf(stderr, "-b BC1: Don't use 3-color mode transparent texels on blocks containing black or very dark pixels. By default this mode is now enabled.\n"); + fprintf(stderr, "-c BC1: Disable 3-color mode\n"); + fprintf(stderr, "-n BC1/BC3: Encode/decode BC1 for NVidia GPU's\n"); + fprintf(stderr, "-m BC1/BC3: Encode/decode BC1 for AMD GPU's\n"); + fprintf(stderr, "-r BC1/BC3: Encode/decode BC1 using ideal BC1 formulas with rounding for 4-color block colors 2,3 (same as AMD Compressonator)\n"); + fprintf(stderr, "\nBy default, this tool encodes to BC1 *without rounding* 4-color block colors 2,3, which may not match the output of some software decoders.\n"); + fprintf(stderr, "\nFor BC4 and BC5: Not all tools support reading DX9-style BC4/BC5 format files (or BC4/5 files at all). AMD Compressonator does.\n"); + fprintf(stderr, "\nFor BC1, the engine/shader must ignore decoded texture alpha because the encoder utilizes transparent texel to get black/dark texels. Use -b to disable.\n"); + fprintf(stderr, "\nReduced entropy/RDO encoding examples:\n"); + fprintf(stderr, "\n\"bc7enc -C -e blah.png\" - Reduced entropy BC7 encoding using bc7enc.cpp (extremely fast, but only 5-10%% gains, and only 4 BC7 modes)\n"); + fprintf(stderr, "\"bc7enc -z1.0 -zc32 -ze blah.png\" - RDO BC7 with lambda 1.0, window size 32 bytes (default window is 128), 1 matches per block for faster compression\n"); + fprintf(stderr, "\"bc7enc -z1.0 -zc256 blah.png\" - RDO BC7 with lambda 1.0, window size 256 bytes (default window is only 128), 2 matches per block for higher compression\n"); + fprintf(stderr, "\"bc7enc -z1.0 -C -e -zc1024 blah.png\" - RDO BC7 with lambda 1.0, window size 1024 bytes for more gains (but slower), combined with reduced entropy BC7\n"); + fprintf(stderr, "\"bc7enc -1 -z1.0 blah.png\" - RDO BC1 with lambda 1.0\n"); + +#if SUPPORT_BC7E + fprintf(stderr, "\nbc7e.ispc (-U option) is supported in this build.\n"); +#else + fprintf(stderr, "\nbc7e.ispc (-U option) is NOT supported in this build.\n"); +#endif + + return EXIT_FAILURE; +} + +static bool load_listing_file(const std::string& f, std::vector& filenames) +{ + std::string filename(f); + //filename.erase(0, 1); + + FILE* pFile = nullptr; +#ifdef _WIN32 + fopen_s(&pFile, filename.c_str(), "r"); +#else + pFile = fopen(filename.c_str(), "r"); +#endif + + if (!pFile) + { + fprintf(stderr, "Failed opening listing file: \"%s\"\n", filename.c_str()); + return false; + } + + uint32_t total_filenames = 0; + + for (; ; ) + { + char buf[3072]; + buf[0] = '\0'; + + char* p = fgets(buf, sizeof(buf), pFile); + if (!p) + { + if (ferror(pFile)) + { + fprintf(stderr, "Failed reading from listing file: \"%s\"\n", filename.c_str()); + + fclose(pFile); + return false; + } + else + break; + } + + std::string read_filename(p); + while (read_filename.size()) + { + if (read_filename[0] == ' ') + read_filename.erase(0, 1); + else + break; + } + + while (read_filename.size()) + { + const char c = read_filename.back(); + if ((c == ' ') || (c == '\n') || (c == '\r')) + read_filename.erase(read_filename.size() - 1, 1); + else + break; + } + + if (read_filename.size()) + { + filenames.push_back(read_filename); + total_filenames++; + } + } + + fclose(pFile); + + printf("Successfully read %u filenames(s) from listing file \"%s\"\n", total_filenames, filename.c_str()); + + return true; +} + +static int graph_mode(const std::string& graph_listing_file, rdo_bc::rdo_bc_params rp) +{ + rp.m_status_output = false; + + std::vector filenames; + if (!load_listing_file(graph_listing_file, filenames)) + { + fprintf(stderr, "Failed loading graph listing file \"%s\"\n", graph_listing_file.c_str()); + return EXIT_FAILURE; + } + + if (!filenames.size()) + { + fprintf(stderr, "No files to process!\n"); + return EXIT_FAILURE; + } + + struct encode_results + { + float m_lambda; + float m_rate; + float m_distortion; + }; + + std::vector< std::vector > results(filenames.size()); + + static float s_lambdas[] = { .01f, .1f, .25f, .4f, .5f, .6f, .75f, .9f, 1.0f, 1.5f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f }; + const uint32_t TOTAL_LAMBDAS = ARRAY_SIZE(s_lambdas); + + for (uint32_t file_index = 0; file_index < filenames.size(); file_index++) + { + image_u8 source_image; + if (!load_png(filenames[file_index].c_str(), source_image)) + return EXIT_FAILURE; + + printf("Source image: %s %ux%u\n", filenames[file_index].c_str(), source_image.width(), source_image.height()); + + for (uint32_t lambda_index = 0; lambda_index < TOTAL_LAMBDAS; lambda_index++) + { + rp.m_rdo_lambda = s_lambdas[lambda_index]; + + printf("Using lambda %f\n", rp.m_rdo_lambda); + + rdo_bc::rdo_bc_encoder encoder; + if (!encoder.init(source_image, rp)) + { + fprintf(stderr, "rdo_bc_encoder::init() failed!\n"); + return EXIT_FAILURE; + } + + if (lambda_index == 0) + { + if (encoder.get_has_alpha()) + printf("Source image has an alpha channel.\n"); + else + printf("Source image is opaque.\n"); + } + + if (!encoder.encode()) + { + fprintf(stderr, "rdo_bc_encoder::encode() failed!\n"); + return EXIT_FAILURE; + } + + // Compress the output data losslessly using Deflate + const uint32_t output_data_size = encoder.get_total_blocks_size_in_bytes(); + const uint32_t pre_rdo_comp_size = get_deflate_size(encoder.get_prerdo_blocks(), output_data_size); + const uint32_t comp_size = get_deflate_size(encoder.get_blocks(), output_data_size); + + float pre_rdo_lz_bits_per_texel = (pre_rdo_comp_size * 8.0f) / encoder.get_total_texels(); + UNUSED(pre_rdo_lz_bits_per_texel); + float lz_bits_per_texel = comp_size * 8.0f / encoder.get_total_texels(); + + image_u8 unpacked_image; + if (!encoder.unpack_blocks(unpacked_image)) + return EXIT_FAILURE; + + image_metrics rgb_metrics; + rgb_metrics.compute(source_image, unpacked_image, 0, 3); + + results[file_index].resize(lambda_index + 1); + results[file_index][lambda_index].m_distortion = (float)rgb_metrics.m_peak_snr; + results[file_index][lambda_index].m_rate = lz_bits_per_texel; + results[file_index][lambda_index].m_lambda = rp.m_rdo_lambda; + + printf("Rate %f distortion %f\n", lz_bits_per_texel, rgb_metrics.m_peak_snr); + + } // lambda_index + + printf("\n"); + + } // file_index + + FILE* pCSV_file = fopen("graph5.csv", "w"); + if (!pCSV_file) + { + fprintf(stderr, "Failed creating graph.csv!\n"); + return EXIT_FAILURE; + } + + fprintf(pCSV_file, "lambda, avg_rate, avg_psnr,"); + + for (uint32_t file_index = 0; file_index < filenames.size(); file_index++) + { + std::string fname; + fname = filenames[file_index].c_str(); + strip_path(fname); + fprintf(pCSV_file, "%s Rate, %s PSNR%c", fname.c_str(), fname.c_str(), file_index != (filenames.size() - 1) ? ',' : ' '); + } + fprintf(pCSV_file, "\n"); + + for (uint32_t lambda_index = 0; lambda_index < TOTAL_LAMBDAS; lambda_index++) + { + fprintf(pCSV_file, "%f,", s_lambdas[lambda_index]); + + float total_rate = 0.0f, total_distortion = 0.0f; + for (uint32_t file_index = 0; file_index < filenames.size(); file_index++) + { + total_rate += results[file_index][lambda_index].m_rate; + total_distortion += results[file_index][lambda_index].m_distortion; + } + total_rate /= filenames.size(); + total_distortion /= filenames.size(); + + fprintf(pCSV_file, "%f,%f,", total_rate, total_distortion); + + for (uint32_t file_index = 0; file_index < filenames.size(); file_index++) + { + fprintf(pCSV_file, "%f,%f", results[file_index][lambda_index].m_rate, results[file_index][lambda_index].m_distortion); + if (file_index != (filenames.size() - 1)) + fprintf(pCSV_file, ","); + } + fprintf(pCSV_file, "\n"); + } + + fclose(pCSV_file); + pCSV_file = nullptr; + + return EXIT_SUCCESS; +} + +int main(int argc, char* argv[]) +{ + bool quiet_mode = false; + + for (int i = 0; i < argc; i++) + if (strcmp(argv[i], "-q") == 0) + quiet_mode = true; + + if (!quiet_mode) + printf("bc7enc v%s - RDO BC1-7 Texture Compressor\n", BC7ENC_VERSION); + + int max_threads = 1; +#if _OPENMP + max_threads = std::min(std::max(1, omp_get_max_threads()), 128); +#endif + + if (argc < 2) + return print_usage(); + + std::string src_filename, src_alpha_filename, dds_output_filename, png_output_filename, png_alpha_output_filename; + + bool no_output_png = false; + bool out_cur_dir = true; + bool force_dx10_dds = false; + FILE* pCSV_file = nullptr; + + uint32_t pixel_format_bpp = 8; + + rdo_bc::rdo_bc_params rp; + rp.m_rdo_max_threads = max_threads; + rp.m_status_output = !quiet_mode; + + std::string graph_listing_file; + + for (int i = 1; i < argc; i++) + { + const char *pArg = argv[i]; + if (pArg[0] == '-') + { + switch (pArg[1]) + { + case 'G': + { + graph_listing_file = (pArg + 2); + break; + } + case 'q': + { + break; + } + case 'U': + { + rp.m_use_bc7e = true; + break; + } + case 'C': + { + rp.m_use_bc7e = false; + break; + } + case 'e': + { + rp.m_bc7enc_reduce_entropy = true; + break; + } + case 'h': + { + if (strcmp(pArg, "-hl") == 0) + rp.m_use_hq_bc345 = false; + else if (strcmp(pArg, "-h6") == 0) + rp.m_bc345_mode_mask = rgbcx::BC4_USE_MODE6_FLAG; + else if (strcmp(pArg, "-h8") == 0) + rp.m_bc345_mode_mask = rgbcx::BC4_USE_MODE8_FLAG; + else if (strncmp(pArg, "-hr", 3) == 0) + { + rp.m_bc345_search_rad = atoi(pArg + 3); + rp.m_bc345_search_rad = std::max(0, std::min(32, rp.m_bc345_search_rad)); + } + + break; + } + case '6': + { + rp.m_bc7enc_mode6_only = true; + break; + } + case '1': + { + rp.m_dxgi_format = DXGI_FORMAT_BC1_UNORM; + pixel_format_bpp = 4; + printf("Compressing to BC1\n"); + break; + } + case '3': + { + rp.m_dxgi_format = DXGI_FORMAT_BC3_UNORM; + pixel_format_bpp = 8; + printf("Compressing to BC3\n"); + break; + } + case '4': + { + rp.m_dxgi_format = DXGI_FORMAT_BC4_UNORM; + pixel_format_bpp = 4; + printf("Compressing to BC4\n"); + break; + } + case '5': + { + rp.m_dxgi_format = DXGI_FORMAT_BC5_UNORM; + pixel_format_bpp = 8; + printf("Compressing to BC5\n"); + break; + } + case 'y': + { + rp.m_y_flip = true; + break; + } + case 'a': + { + src_alpha_filename = pArg + 2; + break; + } + case 'X': + { + rp.m_bc45_channel0 = atoi(pArg + 2); + if ((rp.m_bc45_channel0 < 0) || (rp.m_bc45_channel0 > 3)) + { + fprintf(stderr, "Invalid argument: %s\n", pArg); + return EXIT_FAILURE; + } + break; + } + case 'Y': + { + rp.m_bc45_channel1 = atoi(pArg + 2); + if ((rp.m_bc45_channel1 < 0) || (rp.m_bc45_channel1 > 3)) + { + fprintf(stderr, "Invalid argument: %s\n", pArg); + return EXIT_FAILURE; + } + break; + } + case 'f': + { + force_dx10_dds = true; + break; + } + case 'u': + { + rp.m_bc7_uber_level = atoi(pArg + 2); + if ((rp.m_bc7_uber_level < 0) || (rp.m_bc7_uber_level > 6)) //BC7ENC_MAX_UBER_LEVEL)) + { + fprintf(stderr, "Invalid argument: %s\n", pArg); + return EXIT_FAILURE; + } + break; + + } + case 'L': + { + rp.m_bc1_quality_level = atoi(pArg + 2); + if (((int)rp.m_bc1_quality_level < (int)rgbcx::MIN_LEVEL) || ((int)rp.m_bc1_quality_level > (int)(rgbcx::MAX_LEVEL + 1))) + { + fprintf(stderr, "Invalid argument: %s\n", pArg); + return EXIT_FAILURE; + } + break; + + } + case 'g': + { + no_output_png = true; + break; + } + case 's': + { + rp.m_perceptual = true; + break; + } + case 'p': + { + rp.m_bc7enc_max_partitions_to_scan = atoi(pArg + 2); + if ((rp.m_bc7enc_max_partitions_to_scan < 0) || (rp.m_bc7enc_max_partitions_to_scan > BC7ENC_MAX_PARTITIONS)) + { + fprintf(stderr, "Invalid argument: %s\n", pArg); + return EXIT_FAILURE; + } + break; + } + case 'n': + { + rp.m_bc1_mode = rgbcx::bc1_approx_mode::cBC1NVidia; + break; + } + case 'm': + { + rp.m_bc1_mode = rgbcx::bc1_approx_mode::cBC1AMD; + break; + } + case 'r': + { + rp.m_bc1_mode = rgbcx::bc1_approx_mode::cBC1IdealRound4; + break; + } + case 'z': + { + if (strncmp(pArg, "-zt", 3) == 0) + { + rp.m_rdo_multithreading = false; + } + else if (strncmp(pArg, "-zd", 3) == 0) + { + rp.m_rdo_debug_output = true; + } + else if (strncmp(pArg, "-zq", 3) == 0) + { + rp.m_bc7enc_rdo_bc7_quant_mode6_endpoints = false; + } + else if (strncmp(pArg, "-zw", 3) == 0) + { + rp.m_bc7enc_rdo_bc7_weight_modes = false; + } + else if (strncmp(pArg, "-zp", 3) == 0) + { + rp.m_bc7enc_rdo_bc7_weight_low_frequency_partitions = false; + } + else if (strncmp(pArg, "-zo", 3) == 0) + { + rp.m_bc7enc_rdo_bc7_pbit1_weighting = false; + } + else if (strncmp(pArg, "-zm", 3) == 0) + { + rp.m_rdo_allow_relative_movement = true; + } + else if (strncmp(pArg, "-zn", 3) == 0) + { + rp.m_rdo_try_2_matches = true; + } + else if (strncmp(pArg, "-ze", 3) == 0) + { + rp.m_rdo_try_2_matches = false; + } + else if (strncmp(pArg, "-zu", 3) == 0) + { + rp.m_rdo_ultrasmooth_block_handling = false; + } + else if (strncmp(pArg, "-zb", 3) == 0) + { + rp.m_rdo_smooth_block_error_scale = (float)atof(pArg + 3); + rp.m_rdo_smooth_block_error_scale = std::min(std::max(rp.m_rdo_smooth_block_error_scale, 1.0f), 500.0f); + rp.m_custom_rdo_smooth_block_error_scale = true; + } + else if (strncmp(pArg, "-zc", 3) == 0) + { + rp.m_lookback_window_size = atoi(pArg + 3); + rp.m_lookback_window_size = std::min(std::max(rp.m_lookback_window_size, 8), 65536*2); + rp.m_custom_lookback_window_size = true; + } + else if (strncmp(pArg, "-zv", 3) == 0) + { + rp.m_rdo_max_smooth_block_std_dev = (float)atof(pArg + 3); + rp.m_rdo_max_smooth_block_std_dev = std::min(std::max(rp.m_rdo_max_smooth_block_std_dev, .000125f), 256.0f); + } + else + { + rp.m_rdo_lambda = (float)atof(pArg + 2); + rp.m_rdo_lambda = std::min(std::max(rp.m_rdo_lambda, 0.0f), 500.0f); + } + break; + } + case 'o': + { + out_cur_dir = false; + break; + } + case 'b': + { + rp.m_use_bc1_3color_mode_for_black = false; + break; + } + case 'c': + { + rp.m_use_bc1_3color_mode = false; + break; + } + case 'v': + { + if (pCSV_file) + fclose(pCSV_file); + + pCSV_file = fopen(pArg + 2, "a"); + if (!pCSV_file) + { + fprintf(stderr, "Failed opening file %s\n", pArg + 2); + return EXIT_FAILURE; + } + break; + } + default: + { + fprintf(stderr, "Invalid argument: %s\n", pArg); + return EXIT_FAILURE; + } + } + } + else + { + if (!src_filename.size()) + src_filename = pArg; + else if (!dds_output_filename.size()) + dds_output_filename = pArg; + else if (!png_output_filename.size()) + png_output_filename = pArg; + else + { + fprintf(stderr, "Invalid argument: %s\n", pArg); + return EXIT_FAILURE; + } + } + } + + if (rp.m_status_output) + { + printf("Max threads: %u\n", max_threads); + printf("Supports bc7e.ispc: %u\n", SUPPORT_BC7E); + } + + if (graph_listing_file.size()) + { + return graph_mode(graph_listing_file, rp); + } + + if (!src_filename.size()) + { + fprintf(stderr, "No source filename specified!\n"); + return EXIT_FAILURE; + } + + if (!dds_output_filename.size()) + { + dds_output_filename = src_filename; + strip_extension(dds_output_filename); + if (out_cur_dir) + strip_path(dds_output_filename); + dds_output_filename += ".dds"; + } + + if (!png_output_filename.size()) + { + png_output_filename = src_filename; + strip_extension(png_output_filename); + if (out_cur_dir) + strip_path(png_output_filename); + png_output_filename += "_unpacked.png"; + } + + png_alpha_output_filename = png_output_filename; + strip_extension(png_alpha_output_filename); + png_alpha_output_filename += "_alpha.png"; + + image_u8 source_image; + if (!load_png(src_filename.c_str(), source_image)) + return EXIT_FAILURE; + + if (rp.m_status_output) + printf("Source image: %s %ux%u\n", src_filename.c_str(), source_image.width(), source_image.height()); + + if (src_alpha_filename.size()) + { + image_u8 source_alpha_image; + if (!load_png(src_alpha_filename.c_str(), source_alpha_image)) + return EXIT_FAILURE; + + if (rp.m_status_output) + printf("Source alpha image: %s %ux%u\n", src_alpha_filename.c_str(), source_alpha_image.width(), source_alpha_image.height()); + + const uint32_t w = std::min(source_alpha_image.width(), source_image.width()); + const uint32_t h = std::min(source_alpha_image.height(), source_image.height()); + + for (uint32_t y = 0; y < h; y++) + for (uint32_t x = 0; x < w; x++) + source_image(x, y)[3] = source_alpha_image(x, y)[1]; + } + + clock_t overall_start_t = clock(); + + rdo_bc::rdo_bc_encoder encoder; + if (!encoder.init(source_image, rp)) + { + fprintf(stderr, "rdo_bc_encoder::init() failed!\n"); + return EXIT_FAILURE; + } + + if (rp.m_status_output) + { + if (encoder.get_has_alpha()) + printf("Source image has an alpha channel.\n"); + else + printf("Source image is opaque.\n"); + } + + if (!encoder.encode()) + { + fprintf(stderr, "rdo_bc_encoder::encode() failed!\n"); + return EXIT_FAILURE; + } + + clock_t overall_end_t = clock(); + + if (rp.m_status_output) + printf("Total processing time: %f secs\n", (double)(overall_end_t - overall_start_t) / CLOCKS_PER_SEC); + + // Compress the output data losslessly using Deflate + const uint32_t output_data_size = encoder.get_total_blocks_size_in_bytes(); + const uint32_t pre_rdo_comp_size = get_deflate_size(encoder.get_prerdo_blocks(), output_data_size); + + float pre_rdo_lz_bits_per_texel = (pre_rdo_comp_size * 8.0f) / encoder.get_total_texels(); + + if (rp.m_status_output) + { + printf("Output data size: %u, LZ (Deflate) compressed file size: %u, %3.2f bits/texel\n", + output_data_size, + (uint32_t)pre_rdo_comp_size, + pre_rdo_lz_bits_per_texel); + } + + const uint32_t comp_size = get_deflate_size(encoder.get_blocks(), output_data_size); + + float lz_bits_per_texel = comp_size * 8.0f / encoder.get_total_texels(); + + if (rp.m_status_output) + printf("RDO output data size: %u, LZ (Deflate) compressed file size: %u, %3.2f bits/texel, savings: %3.2f%%\n", output_data_size, (uint32_t)comp_size, lz_bits_per_texel, + (lz_bits_per_texel != pre_rdo_lz_bits_per_texel) ? 100.0f - (lz_bits_per_texel * 100.0f) / pre_rdo_lz_bits_per_texel : 0.0f); + + if (!save_dds(dds_output_filename.c_str(), encoder.get_orig_width(), encoder.get_orig_height(), + encoder.get_blocks(), pixel_format_bpp, rp.m_dxgi_format, rp.m_perceptual, force_dx10_dds)) + { + fprintf(stderr, "Failed writing file \"%s\"\n", dds_output_filename.c_str()); + return EXIT_FAILURE; + } + + if (rp.m_status_output) + printf("Wrote DDS file %s\n", dds_output_filename.c_str()); + + float csv_psnr = 0.0f, csv_ssim = 0.0f; + (void)csv_ssim; + + if ((!no_output_png) && (png_output_filename.size())) + { + image_u8 unpacked_image; + if (!encoder.unpack_blocks(unpacked_image)) + return EXIT_FAILURE; + + if ((rp.m_dxgi_format != DXGI_FORMAT_BC4_UNORM) && (rp.m_dxgi_format != DXGI_FORMAT_BC5_UNORM)) + { + image_metrics y_metrics; + y_metrics.compute(source_image, unpacked_image, 0, 0); + if (rp.m_status_output) + printf("Luma Max error: %3.0f RMSE: %f PSNR %03.3f dB, PSNR per bits/texel: %f\n", y_metrics.m_max, y_metrics.m_root_mean_squared, y_metrics.m_peak_snr, y_metrics.m_peak_snr / lz_bits_per_texel * 10000.0f); + + image_metrics rgb_metrics; + rgb_metrics.compute(source_image, unpacked_image, 0, 3); + if (rp.m_status_output) + printf("RGB Max error: %3.0f RMSE: %f PSNR %03.3f dB, PSNR per bits/texel: %f\n", rgb_metrics.m_max, rgb_metrics.m_root_mean_squared, rgb_metrics.m_peak_snr, rgb_metrics.m_peak_snr / lz_bits_per_texel * 10000.0f); + + csv_psnr = (float)rgb_metrics.m_peak_snr; + + image_metrics rgba_metrics; + rgba_metrics.compute(source_image, unpacked_image, 0, 4); + if (rp.m_status_output) + printf("RGBA Max error: %3.0f RMSE: %f PSNR %03.3f dB, PSNR per bits/texel: %f\n", rgba_metrics.m_max, rgba_metrics.m_root_mean_squared, rgba_metrics.m_peak_snr, rgba_metrics.m_peak_snr / lz_bits_per_texel * 10000.0f); + +#if COMPUTE_SSIM + vec4F ssim_y(compute_ssim(source_image, unpacked_image, true)); + vec4F ssim_rgba(compute_ssim(source_image, unpacked_image, false)); + + if (rp.m_status_output) + { + printf("R SSIM: %f\n", ssim_rgba[0]); + printf("G SSIM: %f\n", ssim_rgba[1]); + printf("B SSIM: %f\n", ssim_rgba[2]); + printf("RGB Avg SSIM: %f\n", (ssim_rgba[0] + ssim_rgba[1] + ssim_rgba[2]) / 3.0f); + printf("A SSIM: %f\n", ssim_rgba[3]); + + printf("Luma SSIM: %f\n", ssim_y[0]); + } + + csv_ssim = (ssim_rgba[0] + ssim_rgba[1] + ssim_rgba[2]) / 3.0f; +#endif + } + + for (uint32_t chan = 0; chan < 4; chan++) + { + if (rp.m_dxgi_format == DXGI_FORMAT_BC4_UNORM) + { + if (chan != rp.m_bc45_channel0) + continue; + } + else if (rp.m_dxgi_format == DXGI_FORMAT_BC5_UNORM) + { + if ((chan != rp.m_bc45_channel0) && (chan != rp.m_bc45_channel1)) + continue; + } + + image_metrics c_metrics; + c_metrics.compute(source_image, unpacked_image, chan, 1); + static const char *s_chan_names[4] = { "Red ", "Green", "Blue ", "Alpha" }; + + if (rp.m_status_output) + printf("%s Max error: %3.0f RMSE: %f PSNR %03.3f dB\n", s_chan_names[chan], c_metrics.m_max, c_metrics.m_root_mean_squared, c_metrics.m_peak_snr); + + if (rp.m_dxgi_format == DXGI_FORMAT_BC4_UNORM) + csv_psnr = (float)c_metrics.m_peak_snr; + } + + if (rp.m_dxgi_format == DXGI_FORMAT_BC5_UNORM) + { + image_metrics c_metrics; + c_metrics.compute(source_image, unpacked_image, 0, 2); + + if (rp.m_status_output) + printf("RG Max error: %3.0f RMSE: %f PSNR %03.3f dB\n", c_metrics.m_max, c_metrics.m_root_mean_squared, c_metrics.m_peak_snr); + + csv_psnr = (float)c_metrics.m_peak_snr; + } + + if (rp.m_status_output) + { + if (rp.m_bc1_mode != rgbcx::bc1_approx_mode::cBC1Ideal) + printf("Note: BC1/BC3 RGB decoding was done with the specified vendor's BC1 approximations.\n"); + } + + image_u8 unpacked_image_cropped(unpacked_image); + unpacked_image_cropped.crop(encoder.get_orig_width(), encoder.get_orig_height()); + if (!save_png(png_output_filename.c_str(), unpacked_image_cropped, false)) + { + fprintf(stderr, "Failed writing file \"%s\"\n", png_output_filename.c_str()); + return EXIT_FAILURE; + } + + if (rp.m_status_output) + printf("Wrote PNG file %s\n", png_output_filename.c_str()); + + if (png_alpha_output_filename.size()) + { + image_u8 unpacked_image_alpha(unpacked_image); + for (uint32_t y = 0; y < unpacked_image_alpha.height(); y++) + for (uint32_t x = 0; x < unpacked_image_alpha.width(); x++) + unpacked_image_alpha(x, y).set(unpacked_image_alpha(x, y)[3], 255); + unpacked_image_alpha.crop(encoder.get_orig_width(), encoder.get_orig_height()); + + if (!save_png(png_alpha_output_filename.c_str(), unpacked_image_alpha, false)) + { + fprintf(stderr, "Failed writing file \"%s\"\n", png_alpha_output_filename.c_str()); + return EXIT_FAILURE; + } + + if (rp.m_status_output) + printf("Wrote PNG file %s\n", png_alpha_output_filename.c_str()); + } + } + + if (pCSV_file) + { + fprintf(pCSV_file, "%f,%f,%f\n", rp.m_rdo_lambda, lz_bits_per_texel, csv_psnr); + fclose(pCSV_file); + pCSV_file = nullptr; + } + + return EXIT_SUCCESS; +} diff --git a/external/bc7enc_rdo/utils.cpp b/external/bc7enc_rdo/utils.cpp new file mode 100644 index 0000000000..d9edb9c404 --- /dev/null +++ b/external/bc7enc_rdo/utils.cpp @@ -0,0 +1,901 @@ +// File: utils.cpp +#include "utils.h" +#include "lodepng.h" +#include "miniz.h" + +namespace utils +{ + +#define FLOOD_PUSH(y, xl, xr, dy) if (((y + (dy)) >= 0) && ((y + (dy)) < (int)m_height)) { stack.push_back(fill_segment(y, xl, xr, dy)); } + +// See http://www.realtimerendering.com/resources/GraphicsGems/gems/SeedFill.c +uint32_t image_u8::flood_fill(int x, int y, const color_quad_u8& c, const color_quad_u8& b, std::vector* pSet_pixels) +{ + uint32_t total_set = 0; + + if (!flood_fill_is_inside(x, y, b)) + return 0; + + std::vector stack; + stack.reserve(64); + + FLOOD_PUSH(y, x, x, 1); + FLOOD_PUSH(y + 1, x, x, -1); + + while (stack.size()) + { + fill_segment s = stack.back(); + stack.pop_back(); + + int x1 = s.m_xl, x2 = s.m_xr, dy = s.m_dy; + y = s.m_y + s.m_dy; + + for (x = x1; (x >= 0) && flood_fill_is_inside(x, y, b); x--) + { + (*this)(x, y) = c; + total_set++; + if (pSet_pixels) + pSet_pixels->push_back(pixel_coord(x, y)); + } + + int l; + + if (x >= x1) + goto skip; + + l = x + 1; + if (l < x1) + FLOOD_PUSH(y, l, x1 - 1, -dy); + + x = x1 + 1; + + do + { + for (; x <= ((int)m_width - 1) && flood_fill_is_inside(x, y, b); x++) + { + (*this)(x, y) = c; + total_set++; + if (pSet_pixels) + pSet_pixels->push_back(pixel_coord(x, y)); + } + FLOOD_PUSH(y, l, x - 1, dy); + + if (x > (x2 + 1)) + FLOOD_PUSH(y, x2 + 1, x - 1, -dy); + + skip: + for (x++; x <= x2 && !flood_fill_is_inside(x, y, b); x++) + ; + + l = x; + } while (x <= x2); + } + + return total_set; +} + +void image_u8::draw_line(int xs, int ys, int xe, int ye, const color_quad_u8& color) +{ + if (xs > xe) + { + std::swap(xs, xe); + std::swap(ys, ye); + } + + int dx = xe - xs, dy = ye - ys; + if (!dx) + { + if (ys > ye) + std::swap(ys, ye); + for (int i = ys; i <= ye; i++) + set_pixel_clipped(xs, i, color); + } + else if (!dy) + { + for (int i = xs; i < xe; i++) + set_pixel_clipped(i, ys, color); + } + else if (dy > 0) + { + if (dy <= dx) + { + int e = 2 * dy - dx, e_no_inc = 2 * dy, e_inc = 2 * (dy - dx); + rasterize_line(xs, ys, xe, ye, 0, 1, e, e_inc, e_no_inc, color); + } + else + { + int e = 2 * dx - dy, e_no_inc = 2 * dx, e_inc = 2 * (dx - dy); + rasterize_line(xs, ys, xe, ye, 1, 1, e, e_inc, e_no_inc, color); + } + } + else + { + dy = -dy; + if (dy <= dx) + { + int e = 2 * dy - dx, e_no_inc = 2 * dy, e_inc = 2 * (dy - dx); + rasterize_line(xs, ys, xe, ye, 0, -1, e, e_inc, e_no_inc, color); + } + else + { + int e = 2 * dx - dy, e_no_inc = (2 * dx), e_inc = 2 * (dx - dy); + rasterize_line(xe, ye, xs, ys, 1, -1, e, e_inc, e_no_inc, color); + } + } +} + +void image_u8::rasterize_line(int xs, int ys, int xe, int ye, int pred, int inc_dec, int e, int e_inc, int e_no_inc, const color_quad_u8& color) +{ + int start, end, var; + + if (pred) + { + start = ys; + end = ye; + var = xs; + for (int i = start; i <= end; i++) + { + set_pixel_clipped(var, i, color); + if (e < 0) + e += e_no_inc; + else + { + var += inc_dec; + e += e_inc; + } + } + } + else + { + start = xs; + end = xe; + var = ys; + for (int i = start; i <= end; i++) + { + set_pixel_clipped(i, var, color); + if (e < 0) + e += e_no_inc; + else + { + var += inc_dec; + e += e_inc; + } + } + } +} + +bool load_png(const char* pFilename, image_u8& img) +{ + img.clear(); + + std::vector pixels; + unsigned int w = 0, h = 0; + unsigned int e = lodepng::decode(pixels, w, h, pFilename); + if (e != 0) + { + fprintf(stderr, "Failed loading PNG file %s\n", pFilename); + return false; + } + + img.init(w, h); + memcpy(&img.get_pixels()[0], &pixels[0], w * h * sizeof(uint32_t)); + + return true; +} + +bool save_png(const char* pFilename, const image_u8& img, bool save_alpha) +{ + const uint32_t w = img.width(); + const uint32_t h = img.height(); + + std::vector pixels; + if (save_alpha) + { + pixels.resize(w * h * sizeof(color_quad_u8)); + memcpy(&pixels[0], &img.get_pixels()[0], w * h * sizeof(color_quad_u8)); + } + else + { + pixels.resize(w * h * 3); + unsigned char* pDst = &pixels[0]; + for (uint32_t y = 0; y < h; y++) + for (uint32_t x = 0; x < w; x++, pDst += 3) + pDst[0] = img(x, y)[0], pDst[1] = img(x, y)[1], pDst[2] = img(x, y)[2]; + } + + return lodepng::encode(pFilename, pixels, w, h, save_alpha ? LCT_RGBA : LCT_RGB) == 0; +} + +static float gauss(int x, int y, float sigma_sqr) +{ + float pow = expf(-((x * x + y * y) / (2.0f * sigma_sqr))); + float g = (1.0f / (sqrtf((float)(2.0f * M_PI * sigma_sqr)))) * pow; + return g; +} + +// size_x/y should be odd +void compute_gaussian_kernel(float* pDst, int size_x, int size_y, float sigma_sqr, uint32_t flags) +{ + assert(size_x & size_y & 1); + + if (!(size_x | size_y)) + return; + + int mid_x = size_x / 2; + int mid_y = size_y / 2; + + double sum = 0; + for (int x = 0; x < size_x; x++) + { + for (int y = 0; y < size_y; y++) + { + float g; + if ((x > mid_x) && (y < mid_y)) + g = pDst[(size_x - x - 1) + y * size_x]; + else if ((x < mid_x) && (y > mid_y)) + g = pDst[x + (size_y - y - 1) * size_x]; + else if ((x > mid_x) && (y > mid_y)) + g = pDst[(size_x - x - 1) + (size_y - y - 1) * size_x]; + else + g = gauss(x - mid_x, y - mid_y, sigma_sqr); + + pDst[x + y * size_x] = g; + sum += g; + } + } + + if (flags & cComputeGaussianFlagNormalizeCenterToOne) + { + sum = pDst[mid_x + mid_y * size_x]; + } + + if (flags & (cComputeGaussianFlagNormalizeCenterToOne | cComputeGaussianFlagNormalize)) + { + double one_over_sum = 1.0f / sum; + for (int i = 0; i < size_x * size_y; i++) + pDst[i] = static_cast(pDst[i] * one_over_sum); + + if (flags & cComputeGaussianFlagNormalizeCenterToOne) + pDst[mid_x + mid_y * size_x] = 1.0f; + } + + if (flags & cComputeGaussianFlagPrint) + { + printf("{\n"); + for (int y = 0; y < size_y; y++) + { + printf(" "); + for (int x = 0; x < size_x; x++) + { + printf("%f, ", pDst[x + y * size_x]); + } + printf("\n"); + } + printf("}"); + } +} + +void gaussian_filter(imagef& dst, const imagef& orig_img, uint32_t odd_filter_width, float sigma_sqr, bool wrapping, uint32_t width_divisor, uint32_t height_divisor) +{ + assert(odd_filter_width && (odd_filter_width & 1)); + odd_filter_width |= 1; + + std::vector kernel(odd_filter_width * odd_filter_width); + compute_gaussian_kernel(&kernel[0], odd_filter_width, odd_filter_width, sigma_sqr, cComputeGaussianFlagNormalize); + + const int dst_width = orig_img.get_width() / width_divisor; + const int dst_height = orig_img.get_height() / height_divisor; + + const int H = odd_filter_width / 2; + const int L = -H; + + dst.crop(dst_width, dst_height); + +#pragma omp parallel for + for (int oy = 0; oy < dst_height; oy++) + { + for (int ox = 0; ox < dst_width; ox++) + { + vec4F c(0.0f); + + for (int yd = L; yd <= H; yd++) + { + int y = oy * height_divisor + (height_divisor >> 1) + yd; + + for (int xd = L; xd <= H; xd++) + { + int x = ox * width_divisor + (width_divisor >> 1) + xd; + + const vec4F& p = orig_img.get_clamped_or_wrapped(x, y, wrapping, wrapping); + + float w = kernel[(xd + H) + (yd + H) * odd_filter_width]; + c[0] += p[0] * w; + c[1] += p[1] * w; + c[2] += p[2] * w; + c[3] += p[3] * w; + } + } + + dst(ox, oy).set(c[0], c[1], c[2], c[3]); + } + } +} + +static void pow_image(const imagef& src, imagef& dst, const vec4F& power) +{ + dst.resize(src); + +#pragma omp parallel for + for (int y = 0; y < (int)dst.get_height(); y++) + { + for (uint32_t x = 0; x < dst.get_width(); x++) + { + const vec4F& p = src(x, y); + + if ((power[0] == 2.0f) && (power[1] == 2.0f) && (power[2] == 2.0f) && (power[3] == 2.0f)) + dst(x, y).set(p[0] * p[0], p[1] * p[1], p[2] * p[2], p[3] * p[3]); + else + dst(x, y).set(powf(p[0], power[0]), powf(p[1], power[1]), powf(p[2], power[2]), powf(p[3], power[3])); + } + } +} + +#if 0 +static void mul_image(const imagef& src, imagef& dst, const vec4F& mul) +{ + dst.resize(src); + +#pragma omp parallel for + for (int y = 0; y < (int)dst.get_height(); y++) + { + for (uint32_t x = 0; x < dst.get_width(); x++) + { + const vec4F& p = src(x, y); + dst(x, y).set(p[0] * mul[0], p[1] * mul[1], p[2] * mul[2], p[3] * mul[3]); + } + } +} +#endif + +static void scale_image(const imagef& src, imagef& dst, const vec4F& scale, const vec4F& shift) +{ + dst.resize(src); + +#pragma omp parallel for + for (int y = 0; y < (int)dst.get_height(); y++) + { + for (uint32_t x = 0; x < dst.get_width(); x++) + { + const vec4F& p = src(x, y); + + vec4F d; + + for (uint32_t c = 0; c < 4; c++) + d[c] = scale[c] * p[c] + shift[c]; + + dst(x, y).set(d[0], d[1], d[2], d[3]); + } + } +} + +static void add_weighted_image(const imagef& src1, const vec4F& alpha, const imagef& src2, const vec4F& beta, const vec4F& gamma, imagef& dst) +{ + dst.resize(src1); + +#pragma omp parallel for + for (int y = 0; y < (int)dst.get_height(); y++) + { + for (uint32_t x = 0; x < dst.get_width(); x++) + { + const vec4F& s1 = src1(x, y); + const vec4F& s2 = src2(x, y); + + dst(x, y).set( + s1[0] * alpha[0] + s2[0] * beta[0] + gamma[0], + s1[1] * alpha[1] + s2[1] * beta[1] + gamma[1], + s1[2] * alpha[2] + s2[2] * beta[2] + gamma[2], + s1[3] * alpha[3] + s2[3] * beta[3] + gamma[3]); + } + } +} + +static void add_image(const imagef& src1, const imagef& src2, imagef& dst) +{ + dst.resize(src1); + +#pragma omp parallel for + for (int y = 0; y < (int)dst.get_height(); y++) + { + for (uint32_t x = 0; x < dst.get_width(); x++) + { + const vec4F& s1 = src1(x, y); + const vec4F& s2 = src2(x, y); + + dst(x, y).set(s1[0] + s2[0], s1[1] + s2[1], s1[2] + s2[2], s1[3] + s2[3]); + } + } +} + +static void adds_image(const imagef& src, const vec4F& value, imagef& dst) +{ + dst.resize(src); + +#pragma omp parallel for + for (int y = 0; y < (int)dst.get_height(); y++) + { + for (uint32_t x = 0; x < dst.get_width(); x++) + { + const vec4F& p = src(x, y); + + dst(x, y).set(p[0] + value[0], p[1] + value[1], p[2] + value[2], p[3] + value[3]); + } + } +} + +static void mul_image(const imagef& src1, const imagef& src2, imagef& dst, const vec4F& scale) +{ + dst.resize(src1); + +#pragma omp parallel for + for (int y = 0; y < (int)dst.get_height(); y++) + { + for (uint32_t x = 0; x < dst.get_width(); x++) + { + const vec4F& s1 = src1(x, y); + const vec4F& s2 = src2(x, y); + + vec4F d; + + for (uint32_t c = 0; c < 4; c++) + { + float v1 = s1[c]; + float v2 = s2[c]; + d[c] = v1 * v2 * scale[c]; + } + + dst(x, y) = d; + } + } +} + +static void div_image(const imagef& src1, const imagef& src2, imagef& dst, const vec4F& scale) +{ + dst.resize(src1); + +#pragma omp parallel for + for (int y = 0; y < (int)dst.get_height(); y++) + { + for (uint32_t x = 0; x < dst.get_width(); x++) + { + const vec4F& s1 = src1(x, y); + const vec4F& s2 = src2(x, y); + + vec4F d; + + for (uint32_t c = 0; c < 4; c++) + { + float v = s2[c]; + if (v == 0.0f) + d[c] = 0.0f; + else + d[c] = (s1[c] * scale[c]) / v; + } + + dst(x, y) = d; + } + } +} + +static vec4F avg_image(const imagef& src) +{ + vec4F avg(0.0f); + + for (uint32_t y = 0; y < src.get_height(); y++) + { + for (uint32_t x = 0; x < src.get_width(); x++) + { + const vec4F& s = src(x, y); + + avg += vec4F(s[0], s[1], s[2], s[3]); + } + } + + avg /= static_cast(src.get_total_pixels()); + + return avg; +} + +// Reference: https://ece.uwaterloo.ca/~z70wang/research/ssim/index.html +vec4F compute_ssim(const imagef& a, const imagef& b) +{ + imagef axb, a_sq, b_sq, mu1, mu2, mu1_sq, mu2_sq, mu1_mu2, s1_sq, s2_sq, s12, smap, t1, t2, t3; + + const float C1 = 6.50250f, C2 = 58.52250f; + + pow_image(a, a_sq, vec4F(2)); + pow_image(b, b_sq, vec4F(2)); + mul_image(a, b, axb, vec4F(1.0f)); + + gaussian_filter(mu1, a, 11, 1.5f * 1.5f); + gaussian_filter(mu2, b, 11, 1.5f * 1.5f); + + pow_image(mu1, mu1_sq, vec4F(2)); + pow_image(mu2, mu2_sq, vec4F(2)); + mul_image(mu1, mu2, mu1_mu2, vec4F(1.0f)); + + gaussian_filter(s1_sq, a_sq, 11, 1.5f * 1.5f); + add_weighted_image(s1_sq, vec4F(1), mu1_sq, vec4F(-1), vec4F(0), s1_sq); + + gaussian_filter(s2_sq, b_sq, 11, 1.5f * 1.5f); + add_weighted_image(s2_sq, vec4F(1), mu2_sq, vec4F(-1), vec4F(0), s2_sq); + + gaussian_filter(s12, axb, 11, 1.5f * 1.5f); + add_weighted_image(s12, vec4F(1), mu1_mu2, vec4F(-1), vec4F(0), s12); + + scale_image(mu1_mu2, t1, vec4F(2), vec4F(0)); + adds_image(t1, vec4F(C1), t1); + + scale_image(s12, t2, vec4F(2), vec4F(0)); + adds_image(t2, vec4F(C2), t2); + + mul_image(t1, t2, t3, vec4F(1)); + + add_image(mu1_sq, mu2_sq, t1); + adds_image(t1, vec4F(C1), t1); + + add_image(s1_sq, s2_sq, t2); + adds_image(t2, vec4F(C2), t2); + + mul_image(t1, t2, t1, vec4F(1)); + + div_image(t3, t1, smap, vec4F(1)); + + return avg_image(smap); +} + +vec4F compute_ssim(const image_u8& a, const image_u8& b, bool luma) +{ + image_u8 ta(a), tb(b); + + if ((ta.width() != tb.width()) || (ta.height() != tb.height())) + { + fprintf(stderr, "compute_ssim: Cropping input images to equal dimensions\n"); + + const uint32_t w = std::min(a.width(), b.width()); + const uint32_t h = std::min(a.height(), b.height()); + ta.crop(w, h); + tb.crop(w, h); + } + + if (!ta.width() || !ta.height()) + { + assert(0); + return vec4F(0); + } + + if (luma) + { + for (uint32_t y = 0; y < ta.height(); y++) + { + for (uint32_t x = 0; x < ta.width(); x++) + { + ta(x, y).set((uint8_t)ta(x, y).get_luma(), ta(x, y).a); + tb(x, y).set((uint8_t)tb(x, y).get_luma(), tb(x, y).a); + } + } + } + + imagef fta, ftb; + + fta.set(ta); + ftb.set(tb); + + return compute_ssim(fta, ftb); +} + +bool save_dds(const char* pFilename, uint32_t width, uint32_t height, const void* pBlocks, uint32_t pixel_format_bpp, DXGI_FORMAT dxgi_format, bool srgb, bool force_dx10_header) +{ + (void)srgb; + + FILE* pFile = NULL; +#ifdef _MSC_VER + fopen_s(&pFile, pFilename, "wb"); +#else + pFile = fopen(pFilename, "wb"); +#endif + if (!pFile) + { + fprintf(stderr, "Failed creating file %s!\n", pFilename); + return false; + } + + fwrite("DDS ", 4, 1, pFile); + + DDSURFACEDESC2 desc; + memset(&desc, 0, sizeof(desc)); + + desc.dwSize = sizeof(desc); + desc.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_CAPS; + + desc.dwWidth = width; + desc.dwHeight = height; + + desc.ddsCaps.dwCaps = DDSCAPS_TEXTURE; + desc.ddpfPixelFormat.dwSize = sizeof(desc.ddpfPixelFormat); + + desc.ddpfPixelFormat.dwFlags |= DDPF_FOURCC; + + desc.lPitch = (((desc.dwWidth + 3) & ~3) * ((desc.dwHeight + 3) & ~3) * pixel_format_bpp) >> 3; + desc.dwFlags |= DDSD_LINEARSIZE; + + desc.ddpfPixelFormat.dwRGBBitCount = 0; + + if ((!force_dx10_header) && + ((dxgi_format == DXGI_FORMAT_BC1_UNORM) || + (dxgi_format == DXGI_FORMAT_BC3_UNORM) || + (dxgi_format == DXGI_FORMAT_BC4_UNORM) || + (dxgi_format == DXGI_FORMAT_BC5_UNORM))) + { + if (dxgi_format == DXGI_FORMAT_BC1_UNORM) + desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('D', 'X', 'T', '1'); + else if (dxgi_format == DXGI_FORMAT_BC3_UNORM) + desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('D', 'X', 'T', '5'); + else if (dxgi_format == DXGI_FORMAT_BC4_UNORM) + desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('A', 'T', 'I', '1'); + else if (dxgi_format == DXGI_FORMAT_BC5_UNORM) + desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('A', 'T', 'I', '2'); + + fwrite(&desc, sizeof(desc), 1, pFile); + } + else + { + desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('D', 'X', '1', '0'); + + fwrite(&desc, sizeof(desc), 1, pFile); + + DDS_HEADER_DXT10 hdr10; + memset(&hdr10, 0, sizeof(hdr10)); + + // Not all tools support DXGI_FORMAT_BC7_UNORM_SRGB (like NVTT), but ddsview in DirectXTex pays attention to it. So not sure what to do here. + // For best compatibility just write DXGI_FORMAT_BC7_UNORM. + //hdr10.dxgiFormat = srgb ? DXGI_FORMAT_BC7_UNORM_SRGB : DXGI_FORMAT_BC7_UNORM; + hdr10.dxgiFormat = dxgi_format; // DXGI_FORMAT_BC7_UNORM; + hdr10.resourceDimension = D3D10_RESOURCE_DIMENSION_TEXTURE2D; + hdr10.arraySize = 1; + + fwrite(&hdr10, sizeof(hdr10), 1, pFile); + } + + fwrite(pBlocks, desc.lPitch, 1, pFile); + + if (fclose(pFile) == EOF) + { + fprintf(stderr, "Failed writing to DDS file %s!\n", pFilename); + return false; + } + + return true; +} + +void strip_extension(std::string& s) +{ + for (int32_t i = (int32_t)s.size() - 1; i >= 0; i--) + { + if (s[i] == '.') + { + s.resize(i); + break; + } + } +} + +void strip_path(std::string& s) +{ + for (int32_t i = (int32_t)s.size() - 1; i >= 0; i--) + { + if ((s[i] == '/') || (s[i] == ':') || (s[i] == '\\')) + { + s.erase(0, i + 1); + break; + } + } +} + +uint32_t hash_hsieh(const uint8_t* pBuf, size_t len) +{ + if (!pBuf || !len) + return 0; + + uint32_t h = static_cast(len); + + const uint32_t bytes_left = len & 3; + len >>= 2; + + while (len--) + { + const uint16_t* pWords = reinterpret_cast(pBuf); + + h += pWords[0]; + + const uint32_t t = (pWords[1] << 11) ^ h; + h = (h << 16) ^ t; + + pBuf += sizeof(uint32_t); + + h += h >> 11; + } + + switch (bytes_left) + { + case 1: + h += *reinterpret_cast(pBuf); + h ^= h << 10; + h += h >> 1; + break; + case 2: + h += *reinterpret_cast(pBuf); + h ^= h << 11; + h += h >> 17; + break; + case 3: + h += *reinterpret_cast(pBuf); + h ^= h << 16; + h ^= (static_cast(pBuf[sizeof(uint16_t)])) << 18; + h += h >> 11; + break; + default: + break; + } + + h ^= h << 3; + h += h >> 5; + h ^= h << 4; + h += h >> 17; + h ^= h << 25; + h += h >> 6; + + return h; +} + +float compute_block_max_std_dev(const color_quad_u8* pPixels, uint32_t block_width, uint32_t block_height, uint32_t num_comps) +{ + tracked_stat comp_stats[4]; + + for (uint32_t y = 0; y < block_height; y++) + { + for (uint32_t x = 0; x < block_width; x++) + { + const color_quad_u8* pPixel = pPixels + x + y * block_width; + + for (uint32_t c = 0; c < num_comps; c++) + comp_stats[c].update(pPixel->m_c[c]); + } + } + + float max_std_dev = 0.0f; + for (uint32_t i = 0; i < num_comps; i++) + max_std_dev = std::max(max_std_dev, comp_stats[i].get_std_dev()); + return max_std_dev; +} + +const uint32_t ASTC_SIG = 0x5CA1AB13; + +#pragma pack(push, 1) +struct astc_header +{ + uint32_t m_sig; + uint8_t m_block_x; + uint8_t m_block_y; + uint8_t m_block_z; + uint8_t m_width[3]; + uint8_t m_height[3]; + uint8_t m_depth[3]; +}; +#pragma pack(pop) + +bool save_astc_file(const char* pFilename, block16_vec& blocks, uint32_t width, uint32_t height, uint32_t block_width, uint32_t block_height) +{ + FILE* pFile = nullptr; + +#ifdef _MSC_VER + fopen_s(&pFile, pFilename, "wb"); +#else + pFile = fopen(pFilename, "wb"); +#endif + + if (!pFile) + return false; + + astc_header hdr; + memset(&hdr, 0, sizeof(hdr)); + + hdr.m_sig = ASTC_SIG; + hdr.m_block_x = (uint8_t)block_width; + hdr.m_block_y = (uint8_t)block_height; + hdr.m_block_z = 1; + hdr.m_width[0] = (uint8_t)(width); + hdr.m_width[1] = (uint8_t)(width >> 8); + hdr.m_width[2] = (uint8_t)(width >> 16); + hdr.m_height[0] = (uint8_t)(height); + hdr.m_height[1] = (uint8_t)(height >> 8); + hdr.m_height[2] = (uint8_t)(height >> 16); + hdr.m_depth[0] = 1; + fwrite(&hdr, sizeof(hdr), 1, pFile); + + fwrite(blocks.data(), 16, blocks.size(), pFile); + if (fclose(pFile) == EOF) + return false; + + return true; +} + +bool load_astc_file(const char* pFilename, block16_vec& blocks, uint32_t& width, uint32_t& height, uint32_t& block_width, uint32_t& block_height) +{ + FILE* pFile = nullptr; + +#ifdef _MSC_VER + fopen_s(&pFile, pFilename, "rb"); +#else + pFile = fopen(pFilename, "rb"); +#endif + + if (!pFile) + return false; + + astc_header hdr; + if (fread(&hdr, sizeof(hdr), 1, pFile) != 1) + { + fclose(pFile); + return false; + } + + if (hdr.m_sig != ASTC_SIG) + { + fclose(pFile); + return false; + } + + width = hdr.m_width[0] + (hdr.m_width[1] << 8) + (hdr.m_width[2] << 16); + height = hdr.m_height[0] + (hdr.m_height[1] << 8) + (hdr.m_height[2] << 16); + uint32_t depth = hdr.m_depth[0] + (hdr.m_depth[1] << 8) + (hdr.m_depth[2] << 16); + + if ((width < 1) || (width > 32768) || (height < 1) || (height > 32768)) + return false; + if ((hdr.m_block_z != 1) || (depth != 1)) + return false; + + block_width = hdr.m_block_x; + block_height = hdr.m_block_y; + + if ((block_width < 4) || (block_width > 12) || (block_height < 4) || (block_height > 12)) + return false; + + uint32_t blocks_x = (width + block_width - 1) / block_width; + uint32_t blocks_y = (height + block_height - 1) / block_height; + uint32_t total_blocks = blocks_x * blocks_y; + + blocks.resize(total_blocks); + + if (fread(blocks.data(), 16, total_blocks, pFile) != total_blocks) + { + fclose(pFile); + return false; + } + + fclose(pFile); + return true; +} + +uint32_t get_deflate_size(const void* pData, size_t data_size) +{ + size_t comp_size = 0; + void* pPre_RDO_Comp_data = tdefl_compress_mem_to_heap(pData, data_size, &comp_size, TDEFL_MAX_PROBES_MASK);// TDEFL_DEFAULT_MAX_PROBES); + mz_free(pPre_RDO_Comp_data); + + if (comp_size > UINT32_MAX) + return UINT32_MAX; + + return (uint32_t)comp_size; +} + +} // namespace utils diff --git a/external/bc7enc_rdo/utils.h b/external/bc7enc_rdo/utils.h new file mode 100644 index 0000000000..b806c58a50 --- /dev/null +++ b/external/bc7enc_rdo/utils.h @@ -0,0 +1,2617 @@ +// File: utils.h +#pragma once +#ifdef _MSC_VER +#pragma warning (push) +#pragma warning (disable:4127) // conditional expression is constant +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "dds_defs.h" + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +#define ASSUME(c) static_assert(c, #c) +#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) + +#define VECTOR_TEXT_LINE_SIZE (30.0f) +#define VECTOR_TEXT_CORE_LINE_SIZE (21.0f) + +#define UNUSED(x) (void)x + +namespace utils +{ +extern const uint32_t g_pretty_colors[]; +extern const uint32_t g_num_pretty_colors; + +const float cDegToRad = 0.01745329252f; +const float cRadToDeg = 57.29577951f; + +enum eClear { cClear }; +enum eZero { cZero }; +enum eInitExpand { cInitExpand }; + +inline int iabs(int i) { if (i < 0) i = -i; return i; } +inline uint8_t clamp255(int32_t i) { return (uint8_t)((i & 0xFFFFFF00U) ? (~(i >> 31)) : i); } +template inline S clamp(S value, S low, S high) { return (value < low) ? low : ((value > high) ? high : value); } +template inline F lerp(F a, F b, F s) { return a + (b - a) * s; } +template inline F square(F a) { return a * a; } + +template +inline T prev_wrap(T i, T n) +{ + T temp = i - 1; + if (temp < 0) + temp = n - 1; + return temp; +} + +template +inline T next_wrap(T i, T n) +{ + T temp = i + 1; + if (temp >= n) + temp = 0; + return temp; +} + +inline int posmod(int x, int y) +{ + if (x >= 0) + return (x < y) ? x : (x % y); + int m = (-x) % y; + return (m != 0) ? (y - m) : m; +} + +inline float deg_to_rad(float f) +{ + return f * cDegToRad; +}; + +inline float rad_to_deg(float f) +{ + return f * cRadToDeg; +}; + +template +struct rel_ops +{ + friend bool operator!=(const T& x, const T& y) + { + return (!(x == y)); + } + friend bool operator>(const T& x, const T& y) + { + return (y < x); + } + friend bool operator<=(const T& x, const T& y) + { + return (!(y < x)); + } + friend bool operator>=(const T& x, const T& y) + { + return (!(x < y)); + } +}; + +template +class vec : public rel_ops > +{ +public: + typedef T scalar_type; + enum + { + num_elements = N + }; + + inline vec() + { + } + + inline vec(eClear) + { + clear(); + } + + inline vec(const vec& other) + { + for (uint32_t i = 0; i < N; i++) + m_s[i] = other.m_s[i]; + } + + template + inline vec(const vec& other) + { + set(other); + } + + template + inline vec(const vec& other, T w) + { + *this = other; + m_s[N - 1] = w; + } + + explicit inline vec(T val) + { + set(val); + } + + inline vec(T val0, T val1) + { + set(val0, val1); + } + + inline vec(T val0, T val1, T val2) + { + set(val0, val1, val2); + } + + inline vec(T val0, T val1, T val2, T val3) + { + set(val0, val1, val2, val3); + } + + inline vec(T val0, T val1, T val2, T val3, T val4, T val5) + { + set(val0, val1, val2, val3, val4, val5); + } + + inline vec( + T val0, T val1, T val2, T val3, + T val4, T val5, T val6, T val7, + T val8, T val9, T val10, T val11, + T val12, T val13, T val14, T val15) + { + set(val0, val1, val2, val3, + val4, val5, val6, val7, + val8, val9, val10, val11, + val12, val13, val14, val15); + } + + inline vec( + T val0, T val1, T val2, T val3, + T val4, T val5, T val6, T val7, + T val8, T val9, T val10, T val11, + T val12, T val13, T val14, T val15, + T val16, T val17, T val18, T val19) + { + set(val0, val1, val2, val3, + val4, val5, val6, val7, + val8, val9, val10, val11, + val12, val13, val14, val15, + val16, val17, val18, val19); + } + + inline vec( + T val0, T val1, T val2, T val3, + T val4, T val5, T val6, T val7, + T val8, T val9, T val10, T val11, + T val12, T val13, T val14, T val15, + T val16, T val17, T val18, T val19, + T val20, T val21, T val22, T val23, + T val24) + { + set(val0, val1, val2, val3, + val4, val5, val6, val7, + val8, val9, val10, val11, + val12, val13, val14, val15, + val16, val17, val18, val19, + val20, val21, val22, val23, + val24); + } + + inline void clear() + { + if (N > 4) + memset(m_s, 0, sizeof(m_s)); + else + { + for (uint32_t i = 0; i < N; i++) + m_s[i] = 0; + } + } + + template + inline vec& set(const vec& other) + { + if ((void*)this == (void*)&other) + return *this; + const uint32_t m = std::min(N, ON); + uint32_t i; + for (i = 0; i < m; i++) + m_s[i] = static_cast(other[i]); + for (; i < N; i++) + m_s[i] = 0; + return *this; + } + + inline vec& set_component(uint32_t index, T val) + { + assert(index < N); + m_s[index] = val; + return *this; + } + + inline vec& set(T val) + { + for (uint32_t i = 0; i < N; i++) + m_s[i] = val; + return *this; + } + + inline vec& set(T val0, T val1) + { + m_s[0] = val0; + if (N >= 2) + { + m_s[1] = val1; + + for (uint32_t i = 2; i < N; i++) + m_s[i] = 0; + } + return *this; + } + + inline vec& set(T val0, T val1, T val2) + { + m_s[0] = val0; + if (N >= 2) + { + m_s[1] = val1; + + if (N >= 3) + { + m_s[2] = val2; + + for (uint32_t i = 3; i < N; i++) + m_s[i] = 0; + } + } + return *this; + } + + inline vec& set(T val0, T val1, T val2, T val3) + { + m_s[0] = val0; + if (N >= 2) + { + m_s[1] = val1; + + if (N >= 3) + { + m_s[2] = val2; + + if (N >= 4) + { + m_s[3] = val3; + + for (uint32_t i = 4; i < N; i++) + m_s[i] = 0; + } + } + } + return *this; + } + + inline vec& set(T val0, T val1, T val2, T val3, T val4, T val5) + { + m_s[0] = val0; + if (N >= 2) + { + m_s[1] = val1; + + if (N >= 3) + { + m_s[2] = val2; + + if (N >= 4) + { + m_s[3] = val3; + + if (N >= 5) + { + m_s[4] = val4; + + if (N >= 6) + { + m_s[5] = val5; + + for (uint32_t i = 6; i < N; i++) + m_s[i] = 0; + } + } + } + } + } + return *this; + } + + inline vec& set( + T val0, T val1, T val2, T val3, + T val4, T val5, T val6, T val7, + T val8, T val9, T val10, T val11, + T val12, T val13, T val14, T val15) + { + m_s[0] = val0; + if (N >= 2) + m_s[1] = val1; + if (N >= 3) + m_s[2] = val2; + if (N >= 4) + m_s[3] = val3; + + if (N >= 5) + m_s[4] = val4; + if (N >= 6) + m_s[5] = val5; + if (N >= 7) + m_s[6] = val6; + if (N >= 8) + m_s[7] = val7; + + if (N >= 9) + m_s[8] = val8; + if (N >= 10) + m_s[9] = val9; + if (N >= 11) + m_s[10] = val10; + if (N >= 12) + m_s[11] = val11; + + if (N >= 13) + m_s[12] = val12; + if (N >= 14) + m_s[13] = val13; + if (N >= 15) + m_s[14] = val14; + if (N >= 16) + m_s[15] = val15; + + for (uint32_t i = 16; i < N; i++) + m_s[i] = 0; + + return *this; + } + + inline vec& set( + T val0, T val1, T val2, T val3, + T val4, T val5, T val6, T val7, + T val8, T val9, T val10, T val11, + T val12, T val13, T val14, T val15, + T val16, T val17, T val18, T val19) + { + m_s[0] = val0; + if (N >= 2) + m_s[1] = val1; + if (N >= 3) + m_s[2] = val2; + if (N >= 4) + m_s[3] = val3; + + if (N >= 5) + m_s[4] = val4; + if (N >= 6) + m_s[5] = val5; + if (N >= 7) + m_s[6] = val6; + if (N >= 8) + m_s[7] = val7; + + if (N >= 9) + m_s[8] = val8; + if (N >= 10) + m_s[9] = val9; + if (N >= 11) + m_s[10] = val10; + if (N >= 12) + m_s[11] = val11; + + if (N >= 13) + m_s[12] = val12; + if (N >= 14) + m_s[13] = val13; + if (N >= 15) + m_s[14] = val14; + if (N >= 16) + m_s[15] = val15; + + if (N >= 17) + m_s[16] = val16; + if (N >= 18) + m_s[17] = val17; + if (N >= 19) + m_s[18] = val18; + if (N >= 20) + m_s[19] = val19; + + for (uint32_t i = 20; i < N; i++) + m_s[i] = 0; + + return *this; + } + + inline vec& set( + T val0, T val1, T val2, T val3, + T val4, T val5, T val6, T val7, + T val8, T val9, T val10, T val11, + T val12, T val13, T val14, T val15, + T val16, T val17, T val18, T val19, + T val20, T val21, T val22, T val23, + T val24) + { + m_s[0] = val0; + if (N >= 2) + m_s[1] = val1; + if (N >= 3) + m_s[2] = val2; + if (N >= 4) + m_s[3] = val3; + + if (N >= 5) + m_s[4] = val4; + if (N >= 6) + m_s[5] = val5; + if (N >= 7) + m_s[6] = val6; + if (N >= 8) + m_s[7] = val7; + + if (N >= 9) + m_s[8] = val8; + if (N >= 10) + m_s[9] = val9; + if (N >= 11) + m_s[10] = val10; + if (N >= 12) + m_s[11] = val11; + + if (N >= 13) + m_s[12] = val12; + if (N >= 14) + m_s[13] = val13; + if (N >= 15) + m_s[14] = val14; + if (N >= 16) + m_s[15] = val15; + + if (N >= 17) + m_s[16] = val16; + if (N >= 18) + m_s[17] = val17; + if (N >= 19) + m_s[18] = val18; + if (N >= 20) + m_s[19] = val19; + + if (N >= 21) + m_s[20] = val20; + if (N >= 22) + m_s[21] = val21; + if (N >= 23) + m_s[22] = val22; + if (N >= 24) + m_s[23] = val23; + + if (N >= 25) + m_s[24] = val24; + + for (uint32_t i = 25; i < N; i++) + m_s[i] = 0; + + return *this; + } + + inline vec& set(const T* pValues) + { + for (uint32_t i = 0; i < N; i++) + m_s[i] = pValues[i]; + return *this; + } + + template + inline vec& swizzle_set(const vec& other, uint32_t i) + { + return set(static_cast(other[i])); + } + + template + inline vec& swizzle_set(const vec& other, uint32_t i, uint32_t j) + { + return set(static_cast(other[i]), static_cast(other[j])); + } + + template + inline vec& swizzle_set(const vec& other, uint32_t i, uint32_t j, uint32_t k) + { + return set(static_cast(other[i]), static_cast(other[j]), static_cast(other[k])); + } + + template + inline vec& swizzle_set(const vec& other, uint32_t i, uint32_t j, uint32_t k, uint32_t l) + { + return set(static_cast(other[i]), static_cast(other[j]), static_cast(other[k]), static_cast(other[l])); + } + + inline vec& operator=(const vec& rhs) + { + if (this != &rhs) + { + for (uint32_t i = 0; i < N; i++) + m_s[i] = rhs.m_s[i]; + } + return *this; + } + + template + inline vec& operator=(const vec& other) + { + if ((void*)this == (void*)&other) + return *this; + + uint32_t s = std::min(N, O); + + uint32_t i; + for (i = 0; i < s; i++) + m_s[i] = static_cast(other[i]); + + for (; i < N; i++) + m_s[i] = 0; + + return *this; + } + + inline bool operator==(const vec& rhs) const + { + for (uint32_t i = 0; i < N; i++) + if (!(m_s[i] == rhs.m_s[i])) + return false; + return true; + } + + inline bool operator<(const vec& rhs) const + { + for (uint32_t i = 0; i < N; i++) + { + if (m_s[i] < rhs.m_s[i]) + return true; + else if (!(m_s[i] == rhs.m_s[i])) + return false; + } + + return false; + } + + inline T operator[](uint32_t i) const + { + assert(i < N); + return m_s[i]; + } + + inline T& operator[](uint32_t i) + { + assert(i < N); + return m_s[i]; + } + + template + inline uint64_t get_component_as_uint() const + { + ASSUME(index < N); + if (sizeof(T) == sizeof(float)) + return *reinterpret_cast(&m_s[index]); + else + return *reinterpret_cast(&m_s[index]); + } + + inline T get_x(void) const + { + return m_s[0]; + } + inline T get_y(void) const + { + ASSUME(N >= 2); + return m_s[1]; + } + inline T get_z(void) const + { + ASSUME(N >= 3); + return m_s[2]; + } + inline T get_w(void) const + { + ASSUME(N >= 4); + return m_s[3]; + } + + inline vec get_x_vector() const + { + return broadcast<0>(); + } + inline vec get_y_vector() const + { + return broadcast<1>(); + } + inline vec get_z_vector() const + { + return broadcast<2>(); + } + inline vec get_w_vector() const + { + return broadcast<3>(); + } + + inline T get_component(uint32_t i) const + { + return (*this)[i]; + } + + inline vec& set_x(T v) + { + m_s[0] = v; + return *this; + } + inline vec& set_y(T v) + { + ASSUME(N >= 2); + m_s[1] = v; + return *this; + } + inline vec& set_z(T v) + { + ASSUME(N >= 3); + m_s[2] = v; + return *this; + } + inline vec& set_w(T v) + { + ASSUME(N >= 4); + m_s[3] = v; + return *this; + } + + inline const T* get_ptr() const + { + return reinterpret_cast(&m_s[0]); + } + inline T* get_ptr() + { + return reinterpret_cast(&m_s[0]); + } + + inline vec as_point() const + { + vec result(*this); + result[N - 1] = 1; + return result; + } + + inline vec as_dir() const + { + vec result(*this); + result[N - 1] = 0; + return result; + } + + inline vec<2, T> select2(uint32_t i, uint32_t j) const + { + assert((i < N) && (j < N)); + return vec<2, T>(m_s[i], m_s[j]); + } + + inline vec<3, T> select3(uint32_t i, uint32_t j, uint32_t k) const + { + assert((i < N) && (j < N) && (k < N)); + return vec<3, T>(m_s[i], m_s[j], m_s[k]); + } + + inline vec<4, T> select4(uint32_t i, uint32_t j, uint32_t k, uint32_t l) const + { + assert((i < N) && (j < N) && (k < N) && (l < N)); + return vec<4, T>(m_s[i], m_s[j], m_s[k], m_s[l]); + } + + inline bool is_dir() const + { + return m_s[N - 1] == 0; + } + inline bool is_vector() const + { + return is_dir(); + } + inline bool is_point() const + { + return m_s[N - 1] == 1; + } + + inline vec project() const + { + vec result(*this); + if (result[N - 1]) + result /= result[N - 1]; + return result; + } + + inline vec broadcast(unsigned i) const + { + return vec((*this)[i]); + } + + template + inline vec broadcast() const + { + return vec((*this)[i]); + } + + inline vec swizzle(uint32_t i, uint32_t j) const + { + return vec((*this)[i], (*this)[j]); + } + + inline vec swizzle(uint32_t i, uint32_t j, uint32_t k) const + { + return vec((*this)[i], (*this)[j], (*this)[k]); + } + + inline vec swizzle(uint32_t i, uint32_t j, uint32_t k, uint32_t l) const + { + return vec((*this)[i], (*this)[j], (*this)[k], (*this)[l]); + } + + inline vec operator-() const + { + vec result; + for (uint32_t i = 0; i < N; i++) + result.m_s[i] = -m_s[i]; + return result; + } + + inline vec operator+() const + { + return *this; + } + + inline vec& operator+=(const vec& other) + { + for (uint32_t i = 0; i < N; i++) + m_s[i] += other.m_s[i]; + return *this; + } + + inline vec& operator-=(const vec& other) + { + for (uint32_t i = 0; i < N; i++) + m_s[i] -= other.m_s[i]; + return *this; + } + + inline vec& operator*=(const vec& other) + { + for (uint32_t i = 0; i < N; i++) + m_s[i] *= other.m_s[i]; + return *this; + } + + inline vec& operator/=(const vec& other) + { + for (uint32_t i = 0; i < N; i++) + m_s[i] /= other.m_s[i]; + return *this; + } + + inline vec& operator*=(T s) + { + for (uint32_t i = 0; i < N; i++) + m_s[i] *= s; + return *this; + } + + inline vec& operator/=(T s) + { + for (uint32_t i = 0; i < N; i++) + m_s[i] /= s; + return *this; + } + + // component-wise multiply (not a dot product like in previous versions) + // just remarking it out because it's too ambiguous, use dot() or mul_components() instead +#if 0 + friend inline vec operator*(const vec& lhs, const vec& rhs) + { + return vec::mul_components(lhs, rhs); + } +#endif + + friend inline vec operator*(const vec& lhs, T val) + { + vec result; + for (uint32_t i = 0; i < N; i++) + result.m_s[i] = lhs.m_s[i] * val; + return result; + } + + friend inline vec operator*(T val, const vec& rhs) + { + vec result; + for (uint32_t i = 0; i < N; i++) + result.m_s[i] = val * rhs.m_s[i]; + return result; + } + + friend inline vec operator/(const vec& lhs, const vec& rhs) + { + vec result; + for (uint32_t i = 0; i < N; i++) + result.m_s[i] = lhs.m_s[i] / rhs.m_s[i]; + return result; + } + + friend inline vec operator/(const vec& lhs, T val) + { + vec result; + for (uint32_t i = 0; i < N; i++) + result.m_s[i] = lhs.m_s[i] / val; + return result; + } + + friend inline vec operator+(const vec& lhs, const vec& rhs) + { + vec result; + for (uint32_t i = 0; i < N; i++) + result.m_s[i] = lhs.m_s[i] + rhs.m_s[i]; + return result; + } + + friend inline vec operator-(const vec& lhs, const vec& rhs) + { + vec result; + for (uint32_t i = 0; i < N; i++) + result.m_s[i] = lhs.m_s[i] - rhs.m_s[i]; + return result; + } + + static inline vec<3, T> cross2(const vec& a, const vec& b) + { + ASSUME(N >= 2); + return vec<3, T>(0, 0, a[0] * b[1] - a[1] * b[0]); + } + + inline vec<3, T> cross2(const vec& b) const + { + return cross2(*this, b); + } + + static inline vec<3, T> cross3(const vec& a, const vec& b) + { + ASSUME(N >= 3); + return vec<3, T>(a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]); + } + + inline vec<3, T> cross3(const vec& b) const + { + return cross3(*this, b); + } + + static inline vec<3, T> cross(const vec& a, const vec& b) + { + ASSUME(N >= 2); + + if (N == 2) + return cross2(a, b); + else + return cross3(a, b); + } + + inline vec<3, T> cross(const vec& b) const + { + ASSUME(N >= 2); + return cross(*this, b); + } + + inline T dot(const vec& rhs) const + { + return dot(*this, rhs); + } + + inline vec dot_vector(const vec& rhs) const + { + return vec(dot(*this, rhs)); + } + + static inline T dot(const vec& lhs, const vec& rhs) + { + T result = lhs.m_s[0] * rhs.m_s[0]; + for (uint32_t i = 1; i < N; i++) + result += lhs.m_s[i] * rhs.m_s[i]; + return result; + } + + inline T dot2(const vec& rhs) const + { + ASSUME(N >= 2); + return m_s[0] * rhs.m_s[0] + m_s[1] * rhs.m_s[1]; + } + + inline T dot3(const vec& rhs) const + { + ASSUME(N >= 3); + return m_s[0] * rhs.m_s[0] + m_s[1] * rhs.m_s[1] + m_s[2] * rhs.m_s[2]; + } + + inline T dot4(const vec& rhs) const + { + ASSUME(N >= 4); + return m_s[0] * rhs.m_s[0] + m_s[1] * rhs.m_s[1] + m_s[2] * rhs.m_s[2] + m_s[3] * rhs.m_s[3]; + } + + inline T norm(void) const + { + T sum = m_s[0] * m_s[0]; + for (uint32_t i = 1; i < N; i++) + sum += m_s[i] * m_s[i]; + return sum; + } + + inline T length(void) const + { + return sqrt(norm()); + } + + inline T squared_distance(const vec& rhs) const + { + T dist2 = 0; + for (uint32_t i = 0; i < N; i++) + { + T d = m_s[i] - rhs.m_s[i]; + dist2 += d * d; + } + return dist2; + } + + inline T squared_distance(const vec& rhs, T early_out) const + { + T dist2 = 0; + for (uint32_t i = 0; i < N; i++) + { + T d = m_s[i] - rhs.m_s[i]; + dist2 += d * d; + if (dist2 > early_out) + break; + } + return dist2; + } + + inline T distance(const vec& rhs) const + { + T dist2 = 0; + for (uint32_t i = 0; i < N; i++) + { + T d = m_s[i] - rhs.m_s[i]; + dist2 += d * d; + } + return sqrt(dist2); + } + + inline vec inverse() const + { + vec result; + for (uint32_t i = 0; i < N; i++) + result[i] = m_s[i] ? (1.0f / m_s[i]) : 0; + return result; + } + + // returns squared length (norm) + inline double normalize(const vec* pDefaultVec = NULL) + { + double n = m_s[0] * m_s[0]; + for (uint32_t i = 1; i < N; i++) + n += m_s[i] * m_s[i]; + + if (n != 0) + *this *= static_cast(1.0f / sqrt(n)); + else if (pDefaultVec) + *this = *pDefaultVec; + return n; + } + + inline double normalize3(const vec* pDefaultVec = NULL) + { + ASSUME(N >= 3); + + double n = m_s[0] * m_s[0] + m_s[1] * m_s[1] + m_s[2] * m_s[2]; + + if (n != 0) + *this *= static_cast((1.0f / sqrt(n))); + else if (pDefaultVec) + *this = *pDefaultVec; + return n; + } + + inline vec& normalize_in_place(const vec* pDefaultVec = NULL) + { + normalize(pDefaultVec); + return *this; + } + + inline vec& normalize3_in_place(const vec* pDefaultVec = NULL) + { + normalize3(pDefaultVec); + return *this; + } + + inline vec get_normalized(const vec* pDefaultVec = NULL) const + { + vec result(*this); + result.normalize(pDefaultVec); + return result; + } + + inline vec get_normalized3(const vec* pDefaultVec = NULL) const + { + vec result(*this); + result.normalize3(pDefaultVec); + return result; + } + + inline vec& clamp(T l, T h) + { + for (uint32_t i = 0; i < N; i++) + m_s[i] = static_cast(clamp(m_s[i], l, h)); + return *this; + } + + inline vec& saturate() + { + return clamp(0.0f, 1.0f); + } + + inline vec& clamp(const vec& l, const vec& h) + { + for (uint32_t i = 0; i < N; i++) + m_s[i] = static_cast(clamp(m_s[i], l[i], h[i])); + return *this; + } + + inline bool is_within_bounds(const vec& l, const vec& h) const + { + for (uint32_t i = 0; i < N; i++) + if ((m_s[i] < l[i]) || (m_s[i] > h[i])) + return false; + + return true; + } + + inline bool is_within_bounds(T l, T h) const + { + for (uint32_t i = 0; i < N; i++) + if ((m_s[i] < l) || (m_s[i] > h)) + return false; + + return true; + } + + inline uint32_t get_major_axis(void) const + { + T m = fabs(m_s[0]); + uint32_t r = 0; + for (uint32_t i = 1; i < N; i++) + { + const T c = fabs(m_s[i]); + if (c > m) + { + m = c; + r = i; + } + } + return r; + } + + inline uint32_t get_minor_axis(void) const + { + T m = fabs(m_s[0]); + uint32_t r = 0; + for (uint32_t i = 1; i < N; i++) + { + const T c = fabs(m_s[i]); + if (c < m) + { + m = c; + r = i; + } + } + return r; + } + + inline void get_projection_axes(uint32_t& u, uint32_t& v) const + { + const int axis = get_major_axis(); + if (m_s[axis] < 0.0f) + { + v = next_wrap(axis, N); + u = next_wrap(v, N); + } + else + { + u = next_wrap(axis, N); + v = next_wrap(u, N); + } + } + + inline T get_absolute_minimum(void) const + { + T result = fabs(m_s[0]); + for (uint32_t i = 1; i < N; i++) + result = std::min(result, fabs(m_s[i])); + return result; + } + + inline T get_absolute_maximum(void) const + { + T result = fabs(m_s[0]); + for (uint32_t i = 1; i < N; i++) + result = std::max(result, fabs(m_s[i])); + return result; + } + + inline T get_minimum(void) const + { + T result = m_s[0]; + for (uint32_t i = 1; i < N; i++) + result = std::min(result, m_s[i]); + return result; + } + + inline T get_maximum(void) const + { + T result = m_s[0]; + for (uint32_t i = 1; i < N; i++) + result = std::max(result, m_s[i]); + return result; + } + + inline vec& remove_unit_direction(const vec& dir) + { + *this -= (dot(dir) * dir); + return *this; + } + + inline vec get_remove_unit_direction(const vec& dir) const + { + return *this - (dot(dir) * dir); + } + + inline bool all_less(const vec& b) const + { + for (uint32_t i = 0; i < N; i++) + if (m_s[i] >= b.m_s[i]) + return false; + return true; + } + + inline bool all_less_equal(const vec& b) const + { + for (uint32_t i = 0; i < N; i++) + if (m_s[i] > b.m_s[i]) + return false; + return true; + } + + inline bool all_greater(const vec& b) const + { + for (uint32_t i = 0; i < N; i++) + if (m_s[i] <= b.m_s[i]) + return false; + return true; + } + + inline bool all_greater_equal(const vec& b) const + { + for (uint32_t i = 0; i < N; i++) + if (m_s[i] < b.m_s[i]) + return false; + return true; + } + + inline vec negate_xyz() const + { + vec ret; + + ret[0] = -m_s[0]; + if (N >= 2) + ret[1] = -m_s[1]; + if (N >= 3) + ret[2] = -m_s[2]; + + for (uint32_t i = 3; i < N; i++) + ret[i] = m_s[i]; + + return ret; + } + + inline vec& invert() + { + for (uint32_t i = 0; i < N; i++) + if (m_s[i] != 0.0f) + m_s[i] = 1.0f / m_s[i]; + return *this; + } + + inline scalar_type perp_dot(const vec& b) const + { + ASSUME(N == 2); + return m_s[0] * b.m_s[1] - m_s[1] * b.m_s[0]; + } + + inline vec perp() const + { + ASSUME(N == 2); + return vec(-m_s[1], m_s[0]); + } + + inline vec get_floor() const + { + vec result; + for (uint32_t i = 0; i < N; i++) + result[i] = floor(m_s[i]); + return result; + } + + inline vec get_ceil() const + { + vec result; + for (uint32_t i = 0; i < N; i++) + result[i] = ceil(m_s[i]); + return result; + } + + // static helper methods + + static inline vec mul_components(const vec& lhs, const vec& rhs) + { + vec result; + for (uint32_t i = 0; i < N; i++) + result[i] = lhs.m_s[i] * rhs.m_s[i]; + return result; + } + + static inline vec mul_add_components(const vec& a, const vec& b, const vec& c) + { + vec result; + for (uint32_t i = 0; i < N; i++) + result[i] = a.m_s[i] * b.m_s[i] + c.m_s[i]; + return result; + } + + static inline vec make_axis(uint32_t i) + { + vec result; + result.clear(); + result[i] = 1; + return result; + } + + static inline vec equals_mask(const vec& a, const vec& b) + { + vec ret; + for (uint32_t i = 0; i < N; i++) + ret[i] = (a[i] == b[i]); + return ret; + } + + static inline vec not_equals_mask(const vec& a, const vec& b) + { + vec ret; + for (uint32_t i = 0; i < N; i++) + ret[i] = (a[i] != b[i]); + return ret; + } + + static inline vec less_mask(const vec& a, const vec& b) + { + vec ret; + for (uint32_t i = 0; i < N; i++) + ret[i] = (a[i] < b[i]); + return ret; + } + + static inline vec less_equals_mask(const vec& a, const vec& b) + { + vec ret; + for (uint32_t i = 0; i < N; i++) + ret[i] = (a[i] <= b[i]); + return ret; + } + + static inline vec greater_equals_mask(const vec& a, const vec& b) + { + vec ret; + for (uint32_t i = 0; i < N; i++) + ret[i] = (a[i] >= b[i]); + return ret; + } + + static inline vec greater_mask(const vec& a, const vec& b) + { + vec ret; + for (uint32_t i = 0; i < N; i++) + ret[i] = (a[i] > b[i]); + return ret; + } + + static inline vec component_max(const vec& a, const vec& b) + { + vec ret; + for (uint32_t i = 0; i < N; i++) + ret.m_s[i] = std::max(a.m_s[i], b.m_s[i]); + return ret; + } + + static inline vec component_min(const vec& a, const vec& b) + { + vec ret; + for (uint32_t i = 0; i < N; i++) + ret.m_s[i] = std::min(a.m_s[i], b.m_s[i]); + return ret; + } + + static inline vec lerp(const vec& a, const vec& b, float t) + { + vec ret; + for (uint32_t i = 0; i < N; i++) + ret.m_s[i] = a.m_s[i] + (b.m_s[i] - a.m_s[i]) * t; + return ret; + } + + static inline bool equal_tol(const vec& a, const vec& b, float t) + { + for (uint32_t i = 0; i < N; i++) + if (!equal_tol(a.m_s[i], b.m_s[i], t)) + return false; + return true; + } + + inline bool equal_tol(const vec& b, float t) const + { + return equal_tol(*this, b, t); + } + +protected: + T m_s[N]; +}; + +typedef vec<1, double> vec1D; +typedef vec<2, double> vec2D; +typedef vec<3, double> vec3D; +typedef vec<4, double> vec4D; + +typedef vec<1, float> vec1F; + +typedef vec<2, float> vec2F; +typedef std::vector vec2F_array; + +typedef vec<3, float> vec3F; +typedef std::vector vec3F_array; + +typedef vec<4, float> vec4F; +typedef std::vector vec4F_array; + +typedef vec<2, uint32_t> vec2U; +typedef vec<3, uint32_t> vec3U; +typedef vec<2, int> vec2I; +typedef vec<3, int> vec3I; +typedef vec<4, int> vec4I; + +typedef vec<2, int16_t> vec2I16; +typedef vec<3, int16_t> vec3I16; + +inline vec2F rotate_point(const vec2F& p, float rad) +{ + float c = cos(rad); + float s = sin(rad); + + float x = p[0]; + float y = p[1]; + + return vec2F(x * c - y * s, x * s + y * c); +} + +class rect +{ +public: + inline rect() + { + } + + inline rect(eClear) + { + clear(); + } + + inline rect(eInitExpand) + { + init_expand(); + } + + // up to, but not including right/bottom + inline rect(int left, int top, int right, int bottom) + { + set(left, top, right, bottom); + } + + inline rect(const vec2I& lo, const vec2I& hi) + { + m_corner[0] = lo; + m_corner[1] = hi; + } + + inline rect(const vec2I& point) + { + m_corner[0] = point; + m_corner[1].set(point[0] + 1, point[1] + 1); + } + + inline bool operator==(const rect& r) const + { + return (m_corner[0] == r.m_corner[0]) && (m_corner[1] == r.m_corner[1]); + } + + inline bool operator<(const rect& r) const + { + for (uint32_t i = 0; i < 2; i++) + { + if (m_corner[i] < r.m_corner[i]) + return true; + else if (!(m_corner[i] == r.m_corner[i])) + return false; + } + + return false; + } + + inline void clear() + { + m_corner[0].clear(); + m_corner[1].clear(); + } + + inline void set(int left, int top, int right, int bottom) + { + m_corner[0].set(left, top); + m_corner[1].set(right, bottom); + } + + inline void set(const vec2I& lo, const vec2I& hi) + { + m_corner[0] = lo; + m_corner[1] = hi; + } + + inline void set(const vec2I& point) + { + m_corner[0] = point; + m_corner[1].set(point[0] + 1, point[1] + 1); + } + + inline uint32_t get_width() const + { + return m_corner[1][0] - m_corner[0][0]; + } + inline uint32_t get_height() const + { + return m_corner[1][1] - m_corner[0][1]; + } + + inline int get_left() const + { + return m_corner[0][0]; + } + inline int get_top() const + { + return m_corner[0][1]; + } + inline int get_right() const + { + return m_corner[1][0]; + } + inline int get_bottom() const + { + return m_corner[1][1]; + } + + inline bool is_empty() const + { + return (m_corner[1][0] <= m_corner[0][0]) || (m_corner[1][1] <= m_corner[0][1]); + } + + inline uint32_t get_dimension(uint32_t axis) const + { + return m_corner[1][axis] - m_corner[0][axis]; + } + inline uint32_t get_area() const + { + return get_dimension(0) * get_dimension(1); + } + + inline const vec2I& operator[](uint32_t i) const + { + assert(i < 2); + return m_corner[i]; + } + inline vec2I& operator[](uint32_t i) + { + assert(i < 2); + return m_corner[i]; + } + + inline rect& translate(int x_ofs, int y_ofs) + { + m_corner[0][0] += x_ofs; + m_corner[0][1] += y_ofs; + m_corner[1][0] += x_ofs; + m_corner[1][1] += y_ofs; + return *this; + } + + inline rect& init_expand() + { + m_corner[0].set(INT_MAX); + m_corner[1].set(INT_MIN); + return *this; + } + + inline rect& expand(int x, int y) + { + m_corner[0][0] = std::min(m_corner[0][0], x); + m_corner[0][1] = std::min(m_corner[0][1], y); + m_corner[1][0] = std::max(m_corner[1][0], x + 1); + m_corner[1][1] = std::max(m_corner[1][1], y + 1); + return *this; + } + + inline rect& expand(const rect& r) + { + m_corner[0][0] = std::min(m_corner[0][0], r[0][0]); + m_corner[0][1] = std::min(m_corner[0][1], r[0][1]); + m_corner[1][0] = std::max(m_corner[1][0], r[1][0]); + m_corner[1][1] = std::max(m_corner[1][1], r[1][1]); + return *this; + } + + inline bool touches(const rect& r) const + { + for (uint32_t i = 0; i < 2; i++) + { + if (r[1][i] <= m_corner[0][i]) + return false; + else if (r[0][i] >= m_corner[1][i]) + return false; + } + + return true; + } + + inline bool fully_within(const rect& r) const + { + for (uint32_t i = 0; i < 2; i++) + { + if (m_corner[0][i] < r[0][i]) + return false; + else if (m_corner[1][i] > r[1][i]) + return false; + } + + return true; + } + + inline bool intersect(const rect& r) + { + if (!touches(r)) + { + clear(); + return false; + } + + for (uint32_t i = 0; i < 2; i++) + { + m_corner[0][i] = std::max(m_corner[0][i], r[0][i]); + m_corner[1][i] = std::min(m_corner[1][i], r[1][i]); + } + + return true; + } + + inline bool contains(int x, int y) const + { + return (x >= m_corner[0][0]) && (x < m_corner[1][0]) && + (y >= m_corner[0][1]) && (y < m_corner[1][1]); + } + + inline bool contains(const vec2I& p) const + { + return contains(p[0], p[1]); + } + +private: + vec2I m_corner[2]; +}; + +inline rect make_rect(uint32_t width, uint32_t height) +{ + return rect(0, 0, width, height); +} + +struct color_quad_u8 +{ +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4201) +#endif + union + { + uint8_t m_c[4]; + struct + { + uint8_t r; + uint8_t g; + uint8_t b; + uint8_t a; + }; + }; +#ifdef _MSC_VER +#pragma warning(pop) +#endif + + inline color_quad_u8(eClear) : color_quad_u8(0, 0, 0, 0) { } + + inline color_quad_u8(uint8_t cr, uint8_t cg, uint8_t cb, uint8_t ca) + { + set(cr, cg, cb, ca); + } + + inline color_quad_u8(uint8_t cy = 0, uint8_t ca = 255) + { + set(cy, ca); + } + + inline void clear() + { + set(0, 0, 0, 0); + } + + inline color_quad_u8& set(uint8_t cy, uint8_t ca = 255) + { + m_c[0] = cy; + m_c[1] = cy; + m_c[2] = cy; + m_c[3] = ca; + return *this; + } + + inline color_quad_u8& set(uint8_t cr, uint8_t cg, uint8_t cb, uint8_t ca) + { + m_c[0] = cr; + m_c[1] = cg; + m_c[2] = cb; + m_c[3] = ca; + return *this; + } + + inline color_quad_u8& set_clamped(int cr, int cg, int cb, int ca) + { + m_c[0] = (uint8_t)clamp(cr, 0, 255); + m_c[1] = (uint8_t)clamp(cg, 0, 255); + m_c[2] = (uint8_t)clamp(cb, 0, 255); + m_c[3] = (uint8_t)clamp(ca, 0, 255); + return *this; + } + + color_quad_u8& set_alpha(int ca) { a = (uint8_t)clamp(ca, 0, 255); return *this; } + + inline uint8_t& operator[] (uint32_t i) { assert(i < 4); return m_c[i]; } + inline uint8_t operator[] (uint32_t i) const { assert(i < 4); return m_c[i]; } + + inline int get_luma() const { return (13938U * m_c[0] + 46869U * m_c[1] + 4729U * m_c[2] + 32768U) >> 16U; } // REC709 weightings + + inline bool operator== (const color_quad_u8& other) const + { + return (m_c[0] == other.m_c[0]) && (m_c[1] == other.m_c[1]) && (m_c[2] == other.m_c[2]) && (m_c[3] == other.m_c[3]); + } + + inline bool operator!= (const color_quad_u8& other) const + { + return !(*this == other); + } + + inline uint32_t squared_distance(const color_quad_u8& c, bool alpha = true) const + { + return square(r - c.r) + square(g - c.g) + square(b - c.b) + (alpha ? square(a - c.a) : 0); + } + + inline bool rgb_equals(const color_quad_u8& rhs) const + { + return (r == rhs.r) && (g == rhs.g) && (b == rhs.b); + } +}; +typedef std::vector color_quad_u8_vec; + +inline uint32_t color_distance(bool perceptual, const color_quad_u8& e1, const color_quad_u8& e2, bool alpha) +{ + if (perceptual) + { + const float l1 = e1.r * .2126f + e1.g * .715f + e1.b * .0722f; + const float cr1 = e1.r - l1; + const float cb1 = e1.b - l1; + + const float l2 = e2.r * .2126f + e2.g * .715f + e2.b * .0722f; + const float cr2 = e2.r - l2; + const float cb2 = e2.b - l2; + + const float dl = l1 - l2; + const float dcr = cr1 - cr2; + const float dcb = cb1 - cb2; + + uint32_t d = static_cast( + 32.0f * 4.0f * dl * dl + + 32.0f * 2.0f * (.5f / (1.0f - .2126f)) * (.5f / (1.0f - .2126f)) * dcr * dcr + + 32.0f * .25f * (.5f / (1.0f - .0722f)) * (.5f / (1.0f - .0722f)) * dcb * dcb); + + if (alpha) + { + int da = (int)e1.a - (int)e2.a; + + d += static_cast(128.0f * da * da); + } + + return d; + } + else + return e1.squared_distance(e2, alpha); +} + +extern color_quad_u8 g_white_color_u8, g_black_color_u8, g_red_color_u8, g_green_color_u8, g_blue_color_u8, g_yellow_color_u8, g_purple_color_u8, g_magenta_color_u8, g_cyan_color_u8; + +class image_u8 +{ +public: + image_u8() : + m_width(0), m_height(0), + m_clip_rect(cClear) + { + } + + image_u8(uint32_t width, uint32_t height) : + m_width(width), m_height(height), + m_clip_rect(0, 0, width, height) + { + m_pixels.resize(width * height); + } + + inline const color_quad_u8_vec& get_pixels() const { return m_pixels; } + inline color_quad_u8_vec& get_pixels() { return m_pixels; } + + inline uint32_t width() const { return m_width; } + inline uint32_t height() const { return m_height; } + inline uint32_t total_pixels() const { return m_width * m_height; } + + inline const rect& get_clip_rect() const { return m_clip_rect; } + + inline void set_clip_rect(const rect& r) + { + assert((r.get_left() >= 0) && (r.get_top() >= 0) && (r.get_right() <= (int)m_width) && (r.get_bottom() <= (int)m_height)); + + m_clip_rect = r; + } + + inline void clear_clip_rect() { m_clip_rect.set(0, 0, m_width, m_height); } + + inline bool is_clipped(int x, int y) const { return !m_clip_rect.contains(x, y); } + + inline rect get_bounds() const { return rect(0, 0, m_width, m_height); } + + inline color_quad_u8& operator()(uint32_t x, uint32_t y) { assert((x < m_width) && (y < m_height)); return m_pixels[x + m_width * y]; } + inline const color_quad_u8& operator()(uint32_t x, uint32_t y) const { assert((x < m_width) && (y < m_height)); return m_pixels[x + m_width * y]; } + + image_u8& clear() + { + m_width = m_height = 0; + m_clip_rect.clear(); + m_pixels.clear(); + return *this; + } + + image_u8& init(uint32_t width, uint32_t height) + { + clear(); + + m_width = width; + m_height = height; + m_clip_rect.set(0, 0, width, height); + m_pixels.resize(width * height); + return *this; + } + + image_u8& set_all(const color_quad_u8& p) + { + for (uint32_t i = 0; i < m_pixels.size(); i++) + m_pixels[i] = p; + return *this; + } + + inline const color_quad_u8& get_clamped(int x, int y) const { return (*this)(clamp(x, 0, m_width - 1), clamp(y, 0, m_height - 1)); } + inline color_quad_u8& get_clamped(int x, int y) { return (*this)(clamp(x, 0, m_width - 1), clamp(y, 0, m_height - 1)); } + + inline image_u8& set_pixel_clipped(int x, int y, const color_quad_u8& c) + { + if (!is_clipped(x, y)) + (*this)(x, y) = c; + return *this; + } + + inline image_u8& fill_box(int x, int y, int w, int h, const color_quad_u8& c) + { + for (int y_ofs = 0; y_ofs < h; y_ofs++) + for (int x_ofs = 0; x_ofs < w; x_ofs++) + set_pixel_clipped(x + x_ofs, y + y_ofs, c); + return *this; + } + + void invert_box(int inX, int inY, int inW, int inH) + { + for (int y = 0; y < inH; y++) + { + const uint32_t yy = inY + y; + + for (int x = 0; x < inW; x++) + { + const uint32_t xx = inX + x; + + if (is_clipped(xx, yy)) + continue; + + color_quad_u8 c((*this)(xx, yy)); + + c.r = 255 - c.r; + c.g = 255 - c.g; + c.b = 255 - c.b; + + set_pixel_clipped(xx, yy, c); + } + } + } + + image_u8& crop_dup_borders(uint32_t w, uint32_t h) + { + const uint32_t orig_w = m_width, orig_h = m_height; + + crop(w, h); + + if (orig_w && orig_h) + { + if (m_width > orig_w) + { + for (uint32_t x = orig_w; x < m_width; x++) + for (uint32_t y = 0; y < m_height; y++) + set_pixel_clipped(x, y, get_clamped(std::min(x, orig_w - 1U), std::min(y, orig_h - 1U))); + } + + if (m_height > orig_h) + { + for (uint32_t y = orig_h; y < m_height; y++) + for (uint32_t x = 0; x < m_width; x++) + set_pixel_clipped(x, y, get_clamped(std::min(x, orig_w - 1U), std::min(y, orig_h - 1U))); + } + } + return *this; + } + + image_u8& crop(uint32_t new_width, uint32_t new_height) + { + if ((m_width == new_width) && (m_height == new_height)) + return *this; + + image_u8 new_image(new_width, new_height); + + const uint32_t w = std::min(m_width, new_width); + const uint32_t h = std::min(m_height, new_height); + + for (uint32_t y = 0; y < h; y++) + for (uint32_t x = 0; x < w; x++) + new_image(x, y) = (*this)(x, y); + + return swap(new_image); + } + + image_u8& swap(image_u8& other) + { + std::swap(m_width, other.m_width); + std::swap(m_height, other.m_height); + std::swap(m_pixels, other.m_pixels); + std::swap(m_clip_rect, other.m_clip_rect); + return *this; + } + + // No clipping + inline void get_block(uint32_t bx, uint32_t by, uint32_t width, uint32_t height, color_quad_u8* pPixels) const + { + assert((bx * width + width) <= m_width); + assert((by * height + height) <= m_height); + + for (uint32_t y = 0; y < height; y++) + memcpy(pPixels + y * width, &(*this)(bx * width, by * height + y), width * sizeof(color_quad_u8)); + } + + inline void get_block_clamped(uint32_t bx, uint32_t by, uint32_t width, uint32_t height, color_quad_u8* pPixels) const + { + for (uint32_t y = 0; y < height; y++) + for (uint32_t x = 0; x < width; x++) + pPixels[x + y * width] = get_clamped(bx * width + x, by * height + y); + } + + // No clipping + inline void set_block(uint32_t bx, uint32_t by, uint32_t width, uint32_t height, const color_quad_u8* pPixels) + { + assert((bx * width + width) <= m_width); + assert((by * height + height) <= m_height); + + for (uint32_t y = 0; y < height; y++) + memcpy(&(*this)(bx * width, by * height + y), pPixels + y * width, width * sizeof(color_quad_u8)); + } + + image_u8& swizzle(uint32_t r, uint32_t g, uint32_t b, uint32_t a) + { + assert((r | g | b | a) <= 3); + for (uint32_t y = 0; y < m_height; y++) + { + for (uint32_t x = 0; x < m_width; x++) + { + color_quad_u8 tmp((*this)(x, y)); + (*this)(x, y).set(tmp[r], tmp[g], tmp[b], tmp[a]); + } + } + + return *this; + } + + struct pixel_coord + { + uint16_t m_x, m_y; + pixel_coord() { } + pixel_coord(uint32_t x, uint32_t y) : m_x((uint16_t)x), m_y((uint16_t)y) { } + }; + + uint32_t flood_fill(int x, int y, const color_quad_u8& c, const color_quad_u8& b, std::vector* pSet_pixels = nullptr); + + void draw_line(int xs, int ys, int xe, int ye, const color_quad_u8& color); + + inline void set_pixel_clipped_alphablend(int x, int y, const color_quad_u8& c) + { + if (is_clipped(x, y)) + return; + + color_quad_u8 ct(m_pixels[x + y * m_width]); + + ct.r = static_cast(ct.r + ((c.r - ct.r) * c.a) / 255); + ct.g = static_cast(ct.g + ((c.g - ct.g) * c.a) / 255); + ct.b = static_cast(ct.b + ((c.b - ct.b) * c.a) / 255); + + m_pixels[x + y * m_width] = ct; + } + +private: + color_quad_u8_vec m_pixels; + uint32_t m_width, m_height; + rect m_clip_rect; + + struct fill_segment + { + int16_t m_y, m_xl, m_xr, m_dy; + + fill_segment(int y, int xl, int xr, int dy) : + m_y((int16_t)y), m_xl((int16_t)xl), m_xr((int16_t)xr), m_dy((int16_t)dy) + { + } + }; + + inline bool flood_fill_is_inside(int x, int y, const color_quad_u8& b) const + { + if (is_clipped(x, y)) + return false; + + return (*this)(x, y) == b; + } + + void rasterize_line(int xs, int ys, int xe, int ye, int pred, int inc_dec, int e, int e_inc, int e_no_inc, const color_quad_u8& color); + + void draw_aaline_pixel(int x, int y, int a, color_quad_u8 color) + { + color.a = static_cast(255 - a); + set_pixel_clipped_alphablend(x, y, color); + } +}; + +bool load_png(const char* pFilename, image_u8& img); + +bool save_png(const char* pFilename, const image_u8& img, bool save_alpha); + +class image_metrics +{ +public: + double m_max, m_mean, m_mean_squared, m_root_mean_squared, m_peak_snr; + + image_metrics() + { + clear(); + } + + void clear() + { + memset(this, 0, sizeof(*this)); + } + + void compute(const image_u8& a, const image_u8& b, uint32_t first_channel, uint32_t num_channels) + { + const bool average_component_error = true; + + const uint32_t width = std::min(a.width(), b.width()); + const uint32_t height = std::min(a.height(), b.height()); + + assert((first_channel < 4U) && (first_channel + num_channels <= 4U)); + + // Histogram approach originally due to Charles Bloom. + double hist[256]; + memset(hist, 0, sizeof(hist)); + + for (uint32_t y = 0; y < height; y++) + { + for (uint32_t x = 0; x < width; x++) + { + const color_quad_u8& ca = a(x, y); + const color_quad_u8& cb = b(x, y); + + if (!num_channels) + hist[iabs(ca.get_luma() - cb.get_luma())]++; + else + { + for (uint32_t c = 0; c < num_channels; c++) + hist[iabs(ca[first_channel + c] - cb[first_channel + c])]++; + } + } + } + + m_max = 0; + double sum = 0.0f, sum2 = 0.0f; + for (uint32_t i = 0; i < 256; i++) + { + if (!hist[i]) + continue; + + m_max = std::max(m_max, i); + + double x = i * hist[i]; + + sum += x; + sum2 += i * x; + } + + // See http://richg42.blogspot.com/2016/09/how-to-compute-psnr-from-old-berkeley.html + double total_values = width * height; + + if (average_component_error) + total_values *= clamp(num_channels, 1, 4); + + m_mean = clamp(sum / total_values, 0.0f, 255.0f); + m_mean_squared = clamp(sum2 / total_values, 0.0f, 255.0f * 255.0f); + + m_root_mean_squared = sqrt(m_mean_squared); + + if (!m_root_mean_squared) + m_peak_snr = 100.0f; + else + m_peak_snr = clamp(log10(255.0f / m_root_mean_squared) * 20.0f, 0.0f, 100.0f); + } +}; + +class imagef +{ +public: + imagef() : + m_width(0), m_height(0), m_pitch(0) + { + } + + imagef(uint32_t w, uint32_t h, uint32_t p = UINT32_MAX) : + m_width(0), m_height(0), m_pitch(0) + { + resize(w, h, p); + } + + imagef(const imagef& other) : + m_width(0), m_height(0), m_pitch(0) + { + *this = other; + } + + imagef& swap(imagef& other) + { + std::swap(m_width, other.m_width); + std::swap(m_height, other.m_height); + std::swap(m_pitch, other.m_pitch); + m_pixels.swap(other.m_pixels); + return *this; + } + + imagef& operator= (const imagef& rhs) + { + if (this != &rhs) + { + m_width = rhs.m_width; + m_height = rhs.m_height; + m_pitch = rhs.m_pitch; + m_pixels = rhs.m_pixels; + } + return *this; + } + + imagef& clear() + { + m_width = 0; + m_height = 0; + m_pitch = 0; + m_pixels.resize(0); + return *this; + } + + imagef& set(const image_u8& src, const vec4F& scale = vec4F(1), const vec4F& bias = vec4F(0)) + { + const uint32_t width = src.width(); + const uint32_t height = src.height(); + + resize(width, height); + + for (int y = 0; y < (int)height; y++) + { + for (uint32_t x = 0; x < width; x++) + { + const color_quad_u8& src_pixel = src(x, y); + (*this)(x, y).set((float)src_pixel.r * scale[0] + bias[0], (float)src_pixel.g * scale[1] + bias[1], (float)src_pixel.b * scale[2] + bias[2], (float)src_pixel.a * scale[3] + bias[3]); + } + } + + return *this; + } + + imagef& resize(const imagef& other, uint32_t p = UINT32_MAX, const vec4F& background = vec4F(0, 0, 0, 1)) + { + return resize(other.get_width(), other.get_height(), p, background); + } + + imagef& resize(uint32_t w, uint32_t h, uint32_t p = UINT32_MAX, const vec4F& background = vec4F(0, 0, 0, 1)) + { + return crop(w, h, p, background); + } + + imagef& set_all(const vec4F& c) + { + for (uint32_t i = 0; i < m_pixels.size(); i++) + m_pixels[i] = c; + return *this; + } + + imagef& fill_box(uint32_t x, uint32_t y, uint32_t w, uint32_t h, const vec4F& c) + { + for (uint32_t iy = 0; iy < h; iy++) + for (uint32_t ix = 0; ix < w; ix++) + set_pixel_clipped(x + ix, y + iy, c); + return *this; + } + + imagef& crop(uint32_t w, uint32_t h, uint32_t p = UINT32_MAX, const vec4F& background = vec4F(0, 0, 0, 1)) + { + if (p == UINT32_MAX) + p = w; + + if ((w == m_width) && (m_height == h) && (m_pitch == p)) + return *this; + + if ((!w) || (!h) || (!p)) + { + clear(); + return *this; + } + + vec4F_array cur_state; + cur_state.swap(m_pixels); + + m_pixels.resize(p * h); + + for (uint32_t y = 0; y < h; y++) + { + for (uint32_t x = 0; x < w; x++) + { + if ((x < m_width) && (y < m_height)) + m_pixels[x + y * p] = cur_state[x + y * m_pitch]; + else + m_pixels[x + y * p] = background; + } + } + + m_width = w; + m_height = h; + m_pitch = p; + + return *this; + } + + inline const vec4F& operator() (uint32_t x, uint32_t y) const { assert(x < m_width&& y < m_height); return m_pixels[x + y * m_pitch]; } + inline vec4F& operator() (uint32_t x, uint32_t y) { assert(x < m_width&& y < m_height); return m_pixels[x + y * m_pitch]; } + + inline const vec4F& get_clamped(int x, int y) const { return (*this)(clamp(x, 0, m_width - 1), clamp(y, 0, m_height - 1)); } + inline vec4F& get_clamped(int x, int y) { return (*this)(clamp(x, 0, m_width - 1), clamp(y, 0, m_height - 1)); } + + inline const vec4F& get_clamped_or_wrapped(int x, int y, bool wrap_u, bool wrap_v) const + { + x = wrap_u ? posmod(x, m_width) : clamp(x, 0, m_width - 1); + y = wrap_v ? posmod(y, m_height) : clamp(y, 0, m_height - 1); + return m_pixels[x + y * m_pitch]; + } + + inline vec4F& get_clamped_or_wrapped(int x, int y, bool wrap_u, bool wrap_v) + { + x = wrap_u ? posmod(x, m_width) : clamp(x, 0, m_width - 1); + y = wrap_v ? posmod(y, m_height) : clamp(y, 0, m_height - 1); + return m_pixels[x + y * m_pitch]; + } + + inline imagef& set_pixel_clipped(int x, int y, const vec4F& c) + { + if ((static_cast(x) < m_width) && (static_cast(y) < m_height)) + (*this)(x, y) = c; + return *this; + } + + // Very straightforward blit with full clipping. Not fast, but it works. + imagef& blit(const imagef& src, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y) + { + for (int y = 0; y < src_h; y++) + { + const int sy = src_y + y; + if (sy < 0) + continue; + else if (sy >= (int)src.get_height()) + break; + + for (int x = 0; x < src_w; x++) + { + const int sx = src_x + x; + if (sx < 0) + continue; + else if (sx >= (int)src.get_height()) + break; + + set_pixel_clipped(dst_x + x, dst_y + y, src(sx, sy)); + } + } + + return *this; + } + + const imagef& extract_block_clamped(vec4F* pDst, uint32_t src_x, uint32_t src_y, uint32_t w, uint32_t h) const + { + for (uint32_t y = 0; y < h; y++) + for (uint32_t x = 0; x < w; x++) + *pDst++ = get_clamped(src_x + x, src_y + y); + return *this; + } + + imagef& set_block_clipped(const vec4F* pSrc, uint32_t dst_x, uint32_t dst_y, uint32_t w, uint32_t h) + { + for (uint32_t y = 0; y < h; y++) + for (uint32_t x = 0; x < w; x++) + set_pixel_clipped(dst_x + x, dst_y + y, *pSrc++); + return *this; + } + + inline uint32_t get_width() const { return m_width; } + inline uint32_t get_height() const { return m_height; } + inline uint32_t get_pitch() const { return m_pitch; } + inline uint32_t get_total_pixels() const { return m_width * m_height; } + + inline uint32_t get_block_width(uint32_t w) const { return (m_width + (w - 1)) / w; } + inline uint32_t get_block_height(uint32_t h) const { return (m_height + (h - 1)) / h; } + inline uint32_t get_total_blocks(uint32_t w, uint32_t h) const { return get_block_width(w) * get_block_height(h); } + + inline const vec4F_array& get_pixels() const { return m_pixels; } + inline vec4F_array& get_pixels() { return m_pixels; } + + inline const vec4F* get_ptr() const { return &m_pixels[0]; } + inline vec4F* get_ptr() { return &m_pixels[0]; } + +private: + uint32_t m_width, m_height, m_pitch; // all in pixels + vec4F_array m_pixels; +}; + +enum +{ + cComputeGaussianFlagNormalize = 1, + cComputeGaussianFlagPrint = 2, + cComputeGaussianFlagNormalizeCenterToOne = 4 +}; + +// size_x/y should be odd +void compute_gaussian_kernel(float* pDst, int size_x, int size_y, float sigma_sqr, uint32_t flags); + +void gaussian_filter(imagef& dst, const imagef& orig_img, uint32_t odd_filter_width, float sigma_sqr, bool wrapping = false, uint32_t width_divisor = 1, uint32_t height_divisor = 1); + +vec4F compute_ssim(const imagef& a, const imagef& b); + +vec4F compute_ssim(const image_u8& a, const image_u8& b, bool luma); + +struct block8 +{ + uint64_t m_vals[1]; +}; + +typedef std::vector block8_vec; + +struct block16 +{ + uint64_t m_vals[2]; +}; + +typedef std::vector block16_vec; + +bool save_dds(const char* pFilename, uint32_t width, uint32_t height, const void* pBlocks, uint32_t pixel_format_bpp, DXGI_FORMAT dxgi_format, bool srgb, bool force_dx10_header); + +void strip_extension(std::string& s); +void strip_path(std::string& s); + +uint32_t hash_hsieh(const uint8_t* pBuf, size_t len); + +// https://www.johndcook.com/blog/standard_deviation/ +// This class is for small numbers of integers, so precision shouldn't be an issue. +class tracked_stat +{ +public: + tracked_stat() { clear(); } + + void clear() { m_num = 0; m_total = 0; m_total2 = 0; } + + void update(uint32_t val) { m_num++; m_total += val; m_total2 += val * val; } + + tracked_stat& operator += (uint32_t val) { update(val); return *this; } + + uint32_t get_number_of_values() const { return m_num; } + uint64_t get_total() const { return m_total; } + uint64_t get_total2() const { return m_total2; } + + float get_mean() const { return m_num ? (float)m_total / m_num : 0.0f; }; + + float get_variance() const { return m_num ? ((float)(m_num * m_total2 - m_total * m_total)) / (m_num * m_num) : 0.0f; } + float get_std_dev() const { return m_num ? sqrtf((float)(m_num * m_total2 - m_total * m_total)) / m_num : 0.0f; } + + float get_sample_variance() const { return (m_num > 1) ? ((float)(m_num * m_total2 - m_total * m_total)) / (m_num * (m_num - 1)) : 0.0f; } + float get_sample_std_dev() const { return (m_num > 1) ? sqrtf(get_sample_variance()) : 0.0f; } + +private: + uint32_t m_num; + uint64_t m_total; + uint64_t m_total2; +}; + +inline float compute_covariance(const float* pA, const float* pB, const tracked_stat& a, const tracked_stat& b, bool sample) +{ + const uint32_t n = a.get_number_of_values(); + assert(n == b.get_number_of_values()); + + if (!n) + { + assert(0); + return 0.0f; + } + if ((sample) && (n == 1)) + { + assert(0); + return 0; + } + + const float mean_a = a.get_mean(); + const float mean_b = b.get_mean(); + + float total = 0.0f; + for (uint32_t i = 0; i < n; i++) + total += (pA[i] - mean_a) * (pB[i] - mean_b); + + return total / (sample ? (n - 1) : n); +} + +inline float compute_correlation_coefficient(const float* pA, const float* pB, const tracked_stat& a, const tracked_stat& b, float c, bool sample) +{ + if (!a.get_number_of_values()) + return 1.0f; + + float covar = compute_covariance(pA, pB, a, b, sample); + float std_dev_a = sample ? a.get_sample_std_dev() : a.get_std_dev(); + float std_dev_b = sample ? b.get_sample_std_dev() : b.get_std_dev(); + float denom = std_dev_a * std_dev_b + c; + + if (denom < .0000125f) + return 1.0f; + + float result = (covar + c) / denom; + + return clamp(result, -1.0f, 1.0f); +} + +float compute_block_max_std_dev(const color_quad_u8* pPixels, uint32_t block_width, uint32_t block_height, uint32_t num_comps); + +class rand +{ + std::mt19937 m_mt; + +public: + rand() { } + + rand(uint32_t s) { seed(s); } + void seed(uint32_t s) { m_mt.seed(s); } + + // between [l,h] + int irand(int l, int h) { std::uniform_int_distribution d(l, h); return d(m_mt); } + + uint32_t urand32() { return static_cast(irand(INT32_MIN, INT32_MAX)); } + + bool bit() { return irand(0, 1) == 1; } + + uint8_t byte() { return static_cast(urand32()); } + + // between [l,h) + float frand(float l, float h) { std::uniform_real_distribution d(l, h); return d(m_mt); } + + float gaussian(float mean, float stddev) { std::normal_distribution d(mean, stddev); return d(m_mt); } +}; + +bool save_astc_file(const char* pFilename, block16_vec& blocks, uint32_t width, uint32_t height, uint32_t block_width, uint32_t block_height); +bool load_astc_file(const char* pFilename, block16_vec& blocks, uint32_t& width, uint32_t& height, uint32_t& block_width, uint32_t& block_height); + +class value_stats +{ +public: + value_stats() + { + clear(); + } + + void clear() + { + m_sum = 0; + m_sum2 = 0; + m_num = 0; + m_min = 1e+39; + m_max = -1e+39; + m_vals.clear(); + } + + void add(double val) + { + m_sum += val; + m_sum2 += val * val; + + m_num++; + + m_min = std::min(m_min, val); + m_max = std::max(m_max, val); + + m_vals.push_back(val); + } + + void add(int val) + { + add(static_cast(val)); + } + + void add(uint32_t val) + { + add(static_cast(val)); + } + + void add(int64_t val) + { + add(static_cast(val)); + } + + void add(uint64_t val) + { + add(static_cast(val)); + } + + void print(const char* pPrefix = "") + { + if (!m_vals.size()) + printf("%s: Empty\n", pPrefix); + else + printf("%s: Samples: %llu, Total: %f, Avg: %f, Std Dev: %f, Min: %f, Max: %f, Mean: %f\n", + pPrefix, (unsigned long long)get_num(), get_total(), get_average(), get_std_dev(), get_min(), get_max(), get_mean()); + } + + double get_total() const + { + return m_sum; + } + + double get_average() const + { + return m_num ? (m_sum / m_num) : 0.0f; + } + + double get_min() const + { + return m_min; + } + + double get_max() const + { + return m_max; + } + + uint64_t get_num() const + { + return m_num; + } + + double get_val(uint32_t index) const + { + return m_vals[index]; + } + + // Returns population standard deviation + double get_std_dev() const + { + if (!m_num) + return 0.0f; + + // TODO: FP precision + return sqrt((m_sum2 - ((m_sum * m_sum) / m_num)) / m_num); + } + + double get_mean() const + { + if (!m_num) + return 0.0f; + + std::vector sorted_vals(m_vals); + std::sort(sorted_vals.begin(), sorted_vals.end()); + + return sorted_vals[sorted_vals.size() / 2]; + } + +private: + double m_sum; + double m_sum2; + + uint64_t m_num; + + double m_min; + double m_max; + + mutable std::vector m_vals; +}; + +uint32_t get_deflate_size(const void* pData, size_t data_size); + +} // namespace utils + +#ifdef _MSC_VER +#pragma warning (pop) +#endif \ No newline at end of file diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 9c3c24ac27..67afdf1386 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -57,6 +57,7 @@ option( LIBKTX_FEATURE_KTX2 "Enable KTX 2 support." ON ) option( LIBKTX_FEATURE_VK_UPLOAD "Enable Vulkan texture upload." ON ) option( LIBKTX_FEATURE_GL_UPLOAD "Enable OpenGL texture upload." ON ) option( LIBKTX_FEATURE_ETC_UNPACK "ETC decoding support." ON ) +option( LIBKTX_FEATURE_BCN_DECODER "BCn decoding support." ON ) # Intentionally override the BASISU options, only making them visible # when they are useful. @@ -135,6 +136,7 @@ endif() set(LIBKTX_MAIN_SRC include/ktx.h src/astc_codec.cpp + src/bcn_codec.cpp src/basis_sgd.h src/basis_transcode.cpp src/miniz_wrapper.cpp @@ -178,6 +180,15 @@ if (LIBKTX_FEATURE_ETC_UNPACK) list( APPEND LIBKTX_MAIN_SRC ../external/etcdec/etcdec.cxx ) endif() +if (LIBKTX_FEATURE_BCN_DECODER) + list( APPEND LIBKTX_MAIN_SRC + ../external/bc7enc_rdo/rgbcx.h + ../external/bc7enc_rdo/rgbcx.cpp + ../external/bc7enc_rdo/bc7decomp.h + ../external/bc7enc_rdo/bc7decomp.cpp + ) +endif() + if(LIBKTX_FEATURE_GL_UPLOAD) list(APPEND LIBKTX_MAIN_SRC src/gl_funclist.inl diff --git a/lib/include/ktx.h b/lib/include/ktx.h index 03da76f5e1..7caa24db35 100644 --- a/lib/include/ktx.h +++ b/lib/include/ktx.h @@ -1398,6 +1398,9 @@ ktxTexture2_CompressAstc(ktxTexture2* This, ktx_uint32_t quality); KTX_API KTX_error_code KTX_APIENTRY ktxTexture2_DecodeAstc(ktxTexture2* This); +KTX_API KTX_error_code KTX_APIENTRY +ktxTexture2_DecodeBCn(ktxTexture2* This); + /** * @~English * @brief Options specifiying basis codec. diff --git a/lib/src/bcn_codec.cpp b/lib/src/bcn_codec.cpp new file mode 100644 index 0000000000..d4680ff8fa --- /dev/null +++ b/lib/src/bcn_codec.cpp @@ -0,0 +1,689 @@ +/* -*- tab-width: 4; -*- */ +/* vi: set sw=2 ts=4 expandtab: */ + +/* + * Copyright (c) 2021, Arm Limited and Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @internal + * @file + * @~English + * + * @brief Functions for compressing a texture to ASTC format and decoding one in ASTC format.. + * + * @author Wasim Abbas , www.arm.com + */ + +#include +#include +#include +#include + +#include "dfdutils/dfd.h" +#include "ktx.h" +#include "ktxint.h" +#include "texture2.h" +#include "vkformat_enum.h" + +#include "bc7enc_rdo/bc7decomp.h" /* for BC7 decoder */ +#include "bc7enc_rdo/rgbcx.h" /* for BC1-BC5 encoders/decoders */ + +#define BCN_BLOCK_SIZE 4 + +#define BC1_BLOCK_SIZE 8 +#define BC2_BLOCK_SIZE 16 +#define BC3_BLOCK_SIZE 16 +#define BC4_BLOCK_SIZE 8 +#define BC5_BLOCK_SIZE 16 +#define BC6H_BLOCK_SIZE 16 +#define BC7_BLOCK_SIZE 16 + +#define BC1_OUTPUT_NCHANNELS 4 +#define BC3_OUTPUT_NCHANNELS 4 +#define BC4_OUTPUT_NCHANNELS 1 +#define BC5_OUTPUT_NCHANNELS 2 +#define BC6H_OUTPUT_NCHANNELS 4 +#define BC7_OUTPUT_NCHANNELS 4 + +//************************************************************************ +//* Functions common to decoder and encoder * +//************************************************************************ + +#if !defined(_WIN32) || defined(WIN32_HAS_PTHREADS) + #include +#else + // Provide pthreads support on windows + #define WIN32_LEAN_AND_MEAN + #include + +typedef HANDLE pthread_t; +typedef int pthread_attr_t; + +/* Public function, see header file for detailed documentation */ +static int +pthread_create(pthread_t* thread, const pthread_attr_t* attribs, void* (*threadfunc)(void*), + void* thread_arg) { + (void)attribs; + #ifdef __clang__ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wcast-function-type-mismatch" + #endif + LPTHREAD_START_ROUTINE func = (LPTHREAD_START_ROUTINE)(threadfunc); + #ifdef __clang__ + #pragma clang diagnostic pop + #endif + *thread = CreateThread(nullptr, 0, func, thread_arg, 0, nullptr); + return 0; +} + +/* Public function, see header file for detailed documentation */ +static int +pthread_join(pthread_t thread, void** value) { + (void)value; + WaitForSingleObject(thread, INFINITE); + return 0; +} +#endif + +/** + * @internal + * @~English + * @brief Worker thread helper payload for launchThreads. + */ +struct LaunchDesc { + /** The native thread handle. */ + pthread_t threadHandle; + /** The total number of threads in the thread pool. */ + int threadCount; + /** The thread index in the thread pool. */ + int threadId; + /** The user thread function to execute. */ + void (*func)(int, int, void*); + /** The user thread payload. */ + void* payload; +}; + +/** + * @internal + * @~English + * @brief Helper function to translate thread entry points. + * + * Convert a (void*) thread entry to an (int, void*) thread entry, where the + * integer contains the thread ID in the thread pool. + * + * @param p The thread launch helper payload. + */ +static void* +launchThreadsHelper(void* p) { + LaunchDesc* ltd = (LaunchDesc*)p; + ltd->func(ltd->threadCount, ltd->threadId, ltd->payload); + return nullptr; +} + +static void +launchThreads(int threadCount, void (*func)(int, int, void*), void* payload) { + // Directly execute single threaded workloads on this thread + if (threadCount <= 1) { + func(1, 0, payload); + return; + } + + // Otherwise spawn worker threads + LaunchDesc* threadDescs = new LaunchDesc[threadCount]; + for (int i = 0; i < threadCount; i++) { + threadDescs[i].threadCount = threadCount; + threadDescs[i].threadId = i; + threadDescs[i].payload = payload; + threadDescs[i].func = func; + + pthread_create(&(threadDescs[i].threadHandle), nullptr, launchThreadsHelper, + (void*)&(threadDescs[i])); + } + + // ... and then wait for them to complete + for (int i = 0; i < threadCount; i++) { + pthread_join(threadDescs[i].threadHandle, nullptr); + } + + delete[] threadDescs; +} + +//************************************************************************ +//* Decoder functions * +//************************************************************************ + +/** + * @memberof ktxTexture + * @internal + * @ingroup reader + * @~English + * @brief Should be used to get uncompressed version of BCn VkFormat + * + * The decompressed format is calculated from corresponding BCn format. There are + * only 3 possible options currently supported. RGBA8, SRGBA8 and RGBA16. + * + * @return Uncompressed version of VKFormat for a specific BCn VkFormat or + * VK_FORMAT_UNDEFINED in case the ktxTexture2's vkFormat does not + * reflect a BCn compressed texture. + */ +inline VkFormat +getUncompressedFormat(ktxTexture2* This) noexcept { + switch (This->vkFormat) { + case VK_FORMAT_BC1_RGB_SRGB_BLOCK: + case VK_FORMAT_BC3_SRGB_BLOCK: + case VK_FORMAT_BC7_SRGB_BLOCK: + return VK_FORMAT_R8G8B8A8_SRGB; + case VK_FORMAT_BC4_UNORM_BLOCK: + return VK_FORMAT_R8_UNORM; + case VK_FORMAT_BC5_UNORM_BLOCK: + return VK_FORMAT_R8G8_UNORM; + default: + return VK_FORMAT_UNDEFINED; + } +} + +/* + * Cannot use DECLARE_PRIVATE macro declared in texture.h because it calls the + * variable `private` which is obviously a no-no in c++. TODO: consider changing. + * Declare our own similar macros. Cognizant that the using functions handle both + * This and a prototype object, pass the object as a parameter. + */ +#define DECLARE_PRIVATE_EX(n, t2) ktxTexture2_private& n = *(t2->_private) +#define DECLARE_PROTECTED_EX(n, t2) ktxTexture_protected& n = *(t2->_protected) + +/** + * @ingroup reader + * @brief Decodes a ktx2 texture object, if it is BCn encoded (i.e., BC1, BC3, + * BC4, BC5, or BC7 encoded). + + * The decompressed format is calculated from corresponding BCn format. There + * are only 3 possible options currently supported: RGBA8, SRGBA8 and RGBA32. + * @note 3d textures are decoded to a multi-slice 3d texture. + * + * Updates @p This with the decoded image. + * + * @param This The texture to decode + * + * @return KTX_SUCCESS on success, other KTX_* enum values on error. + * + * @exception KTX_FILE_DATA_ERROR + * DFD is incorrect: supercompression scheme or + * sample's channelId do not match BCn colorModel. + * @exception KTX_INVALID_OPERATION + * The texture's images are not in BCn format. + * @exception KTX_INVALID_OPERATION + * The texture object does not contain any data. + * @exception KTX_OUT_OF_MEMORY + * Not enough memory to carry out decoding. + * @exception KTX_UNSUPPORTED_FEATURE + * The texture's images are supercompressed with an + * unsupported scheme. + */ +KTX_error_code +ktxTexture2_DecodeBCn(ktxTexture2* This) { + // Decompress This using bc7enc_rdo + uint32_t* BDB = This->pDfd + 1; + khr_df_model_e colorModel = (khr_df_model_e)KHR_DFDVAL(BDB, MODEL); + uint32_t channelId = KHR_DFDSVAL(BDB, 0, CHANNELID); + switch (colorModel) { + case KHR_DF_MODEL_BC1A: + if (!(channelId == KHR_DF_CHANNEL_BC1A_COLOR || channelId == KHR_DF_CHANNEL_BC1A_ALPHA)) { + return KTX_FILE_DATA_ERROR; + } + break; + case KHR_DF_MODEL_BC3: + break; + case KHR_DF_MODEL_BC4: + break; + case KHR_DF_MODEL_BC5: + break; + case KHR_DF_MODEL_BC7: + break; + default: + return KTX_INVALID_OPERATION; // Not in BCn decodable format + } + + if (This->supercompressionScheme == KTX_SS_BASIS_LZ || + This->supercompressionScheme == KTX_SS_UASTC_HDR_6x6_INTERMEDIATE) { + return KTX_FILE_DATA_ERROR; // Not a valid file. + } + // Safety check. + if (This->supercompressionScheme > KTX_SS_END_RANGE) { + return KTX_UNSUPPORTED_FEATURE; // Unsupported scheme. + } + // Other schemes are decoded in ktxTexture2_LoadImageData. + + DECLARE_PRIVATE_EX(priv, This); + + ktx_uint32_t vkformat = (ktx_uint32_t)getUncompressedFormat(This); + if (vkformat == VK_FORMAT_UNDEFINED) { + return KTX_INVALID_OPERATION; // Not in BCn decodable format + } + + // Create a prototype texture to use for calculating sizes in the target + // format and, as useful side effects, provide us with a properly sized + // data allocation and the DFD for the target format. + ktxTextureCreateInfo createInfo; + createInfo.glInternalformat = 0; + createInfo.vkFormat = vkformat; + createInfo.baseWidth = This->baseWidth; + createInfo.baseHeight = This->baseHeight; + createInfo.baseDepth = This->baseDepth; + createInfo.generateMipmaps = This->generateMipmaps; + createInfo.isArray = This->isArray; + createInfo.numDimensions = This->numDimensions; + createInfo.numFaces = This->numFaces; + createInfo.numLayers = This->numLayers; + createInfo.numLevels = This->numLevels; + createInfo.pDfd = nullptr; + + KTX_error_code result; + ktxTexture2* prototype; + result = ktxTexture2_Create(&createInfo, KTX_TEXTURE_CREATE_ALLOC_STORAGE, &prototype); + + if (result != KTX_SUCCESS) { + assert(result == KTX_OUT_OF_MEMORY); // The only run time error + return result; + } + + if (!This->pData) { + if (ktxTexture_isActiveStream((ktxTexture*)This)) { + // Load pending. Complete it. + result = ktxTexture2_LoadImageData(This, NULL, 0); + if (result != KTX_SUCCESS) { + ktxTexture2_Destroy(prototype); + return result; + } + } else { + // No data to decode. + ktxTexture2_Destroy(prototype); + return KTX_INVALID_OPERATION; + } + } + + const ktx_size_t rgba_pitch = BCN_BLOCK_SIZE * BC1_OUTPUT_NCHANNELS; + ktx_uint8_t rgba[BCN_BLOCK_SIZE * rgba_pitch]; /* 64 bytes */ + + for (uint32_t levelIndex = 0; levelIndex < This->numLevels; ++levelIndex) { + const uint32_t imageWidth = std::max(This->baseWidth >> levelIndex, 1u); + const uint32_t imageHeight = std::max(This->baseHeight >> levelIndex, 1u); + const uint32_t imageDepths = std::max(This->baseDepth >> levelIndex, 1u); + + for (uint32_t layerIndex = 0; layerIndex < This->numLayers; ++layerIndex) { + for (uint32_t faceIndex = 0; faceIndex < This->numFaces; ++faceIndex) { + for (uint32_t depthSliceIndex = 0; depthSliceIndex < imageDepths; + ++depthSliceIndex) { + ktx_size_t levelImageSizeIn = ktxTexture_calcImageSize( + ktxTexture(This), levelIndex, KTX_FORMAT_VERSION_TWO); + + ktx_size_t imageOffsetIn; + ktx_size_t imageOffsetOut; + + // TODO: are we sure these can't fail? (i.e., return != KTX_SUCCESS) + ktxTexture2_GetImageOffset(This, levelIndex, layerIndex, + faceIndex + depthSliceIndex, &imageOffsetIn); + ktxTexture2_GetImageOffset(prototype, levelIndex, layerIndex, + faceIndex + depthSliceIndex, &imageOffsetOut); + + auto* imageDataIn = This->pData + imageOffsetIn; + auto* imageDataOut = prototype->pData + imageOffsetOut; + + const ktx_size_t dst_pitch = imageWidth * BC1_OUTPUT_NCHANNELS; + + const ktx_uint8_t* src_blocks = imageDataIn; + + for (size_t y{0}; y < imageHeight; y += BCN_BLOCK_SIZE) { + for (size_t x{0}; x < imageWidth; x += BCN_BLOCK_SIZE) { + switch (colorModel) { + // BC1: 8 bytes -> 4 x 4 x 4 = 64 bytes + case KHR_DF_MODEL_BC1A: + rgbcx::unpack_bc1(src_blocks, rgba, true); + src_blocks += BC1_BLOCK_SIZE; + break; + + case KHR_DF_MODEL_BC3: + break; + + case KHR_DF_MODEL_BC4: + break; + + case KHR_DF_MODEL_BC5: + break; + + case KHR_DF_MODEL_BC7: + break; + + default: + break; // should never occur + } + + // now we copy the decoded block into the actual + // texture image while taking into consideration + // that dimenions may not be a multiple of 4. + const ktx_uint8_t* pSrc = rgba; + ktx_uint8_t* pDst = + imageDataOut + y * dst_pitch + BC1_OUTPUT_NCHANNELS * x; + int cols = fmin(BCN_BLOCK_SIZE, imageWidth - x); + for (ktx_size_t py{0}; py < BCN_BLOCK_SIZE && y + py < imageHeight; + ++py) { + memcpy(pDst, pSrc, cols * BC1_OUTPUT_NCHANNELS); + pSrc += rgba_pitch; + pDst += dst_pitch; + } + } + } + + // astcenc_decompress_image(work.context, work.data, work.data_len; + } + } + } + } + + // We are done with astcdecoder + // astcenc_context_free(astc_context); + + if (result == KTX_SUCCESS) { + // Fix up the current texture + DECLARE_PROTECTED_EX(thisPrtctd, This); + DECLARE_PRIVATE_EX(protoPriv, prototype); + DECLARE_PROTECTED_EX(protoPrtctd, prototype); + memcpy(&thisPrtctd._formatSize, &protoPrtctd._formatSize, sizeof(ktxFormatSize)); + This->vkFormat = vkformat; + This->isCompressed = prototype->isCompressed; + This->supercompressionScheme = KTX_SS_NONE; + priv._requiredLevelAlignment = protoPriv._requiredLevelAlignment; + // Copy the levelIndex from the prototype to This. + memcpy(priv._levelIndex, protoPriv._levelIndex, + This->numLevels * sizeof(ktxLevelIndexEntry)); + // Move the DFD and data from the prototype to This. + free(This->pDfd); + This->pDfd = prototype->pDfd; + prototype->pDfd = 0; + free(This->pData); + This->pData = prototype->pData; + This->dataSize = prototype->dataSize; + prototype->pData = 0; + prototype->dataSize = 0; + // Free SGD data + This->_private->_sgdByteLength = 0; + if (This->_private->_supercompressionGlobalData) { + free(This->_private->_supercompressionGlobalData); + This->_private->_supercompressionGlobalData = NULL; + } + } + ktxTexture2_Destroy(prototype); + return result; +} + +//************************************************************************ +//* Encoder functions * +//************************************************************************ + +/** + * @memberof ktxTexture2 + * @ingroup writer + * @~English + * @brief Encode and compress a ktx texture with uncompressed images to astc. + * + * The images are encoded to ASTC block-compressed format. The encoded images + * replace the original images and the texture's fields including the DFD are + * modified to reflect the new state. + * + * Such textures can be directly uploaded to a GPU via a graphics API. + * + * @param[in] This pointer to the ktxTexture2 object of interest. + * @param[in] params pointer to ASTC params object. + * + * @return KTX_SUCCESS on success, other KTX_* enum values on error. + * + * @exception KTX_INVALID_OPERATION + * The texture's images are supercompressed. + * @exception KTX_INVALID_OPERATION + * The texture's images are in a block compressed + * format. + * @exception KTX_INVALID_OPERATION + * The texture image's format is a packed format + * (e.g. RGB565). + * @exception KTX_INVALID_OPERATION + * The texture image format's component size is not + * 8-bits. + * @exception KTX_INVALID_OPERATION + * The texture's images are 1D. Only 2D images can + * be supercompressed. + * @exception KTX_INVALID_OPERATION + * Transfer function of @c This is not sRGB or Linear. + * @exception KTX_INVALID_OPERATION + * @c params->mode is HDR but transfer function + * of @c This is sRGB. + * @exception KTX_INVALID_OPERATION + * ASTC encoder failed to compress image. + * Possibly due to incorrect floating point + * compilation settings. Should not happen + * in release package. + * @exception KTX_INVALID_OPERATION + * This->generateMipmaps is set. + * @exception KTX_OUT_OF_MEMORY Not enough memory to carry out compression. + * @exception KTX_UNSUPPORTED_FEATURE + * @c params->mode is HDR mode which is not + * yet implemented. + * @exception KTX_UNSUPPORTED_FEATURE + * ASTC encoder not compiled with enough + * capacity for requested block size. Should + * not happen in release package. + */ +// extern "C" KTX_error_code +// ktxTexture2_CompressAstcEx(ktxTexture2* This, ktxAstcParams* params) { +// assert(This->classId == ktxTexture2_c && "Only support ktx2 ASTC."); +// +// ktx_error_code_e result; +// ktx_pack_astc_encoder_mode_e mode; +// +// if (!params) return KTX_INVALID_VALUE; +// +// if (params->structSize != sizeof(struct ktxAstcParams)) return KTX_INVALID_VALUE; +// +// if (This->generateMipmaps) return KTX_INVALID_OPERATION; +// +// if (This->supercompressionScheme != KTX_SS_NONE) +// return KTX_INVALID_OPERATION; // Can't apply multiple schemes. +// +// if (This->isCompressed) +// return KTX_INVALID_OPERATION; // Only non-block compressed formats +// // can be encoded into an ASTC format. +// +// if (This->_protected->_formatSize.flags & KTX_FORMAT_SIZE_PACKED_BIT) +// return KTX_INVALID_OPERATION; +// +// // Basic descriptor block begins after the total size field. +// const uint32_t* BDB = This->pDfd + 1; +// +// uint32_t num_components, component_size; +// getDFDComponentInfoUnpacked(This->pDfd, &num_components, &component_size); +// ktx_uint32_t transfer = KHR_DFDVAL(BDB, TRANSFER); +// bool sRGB = transfer == KHR_DF_TRANSFER_SRGB; +// ktx_uint8_t alphaMode = KHR_DFDVAL(BDB, FLAGS); +// +// if (component_size != 1) +// return KTX_UNSUPPORTED_FEATURE; // Can only deal with 8-bit components at the moment +// if (params->mode == KTX_PACK_ASTC_ENCODER_MODE_DEFAULT) { +// if (component_size == 1 || sRGB) +// mode = KTX_PACK_ASTC_ENCODER_MODE_LDR; +// else +// mode = KTX_PACK_ASTC_ENCODER_MODE_HDR; +// } else { +// mode = static_cast(params->mode); +// } +// +// if (mode == KTX_PACK_ASTC_ENCODER_MODE_HDR && sRGB) return KTX_INVALID_OPERATION; +// +// if (!(sRGB || transfer == KHR_DF_TRANSFER_LINEAR)) return KTX_INVALID_OPERATION; +// +// if (This->pData == NULL) { +// result = ktxTexture2_LoadImageData((ktxTexture2*)This, nullptr, 0); +// +// if (result != KTX_SUCCESS) return result; +// } +// +// ktx_uint32_t threadCount = params->threadCount; +// if (threadCount < 1) threadCount = 1; +// +// // VkFormat vkFormat = astcVkFormat(params->blockDimension, sRGB); +// +// // This->numLevels = 0 not allowed for block compressed formats +// // But just in case make sure its not zero +// This->numLevels = MAX(1, This->numLevels); +// +// // Create a prototype texture to use for calculating sizes in the target +// // format and, as useful side effects, provide us with a properly sized +// // data allocation and the DFD for the target format. +// ktxTextureCreateInfo createInfo; +// createInfo.glInternalformat = 0; +// // createInfo.vkFormat = vkFormat; +// createInfo.baseWidth = This->baseWidth; +// createInfo.baseHeight = This->baseHeight; +// createInfo.baseDepth = This->baseDepth; +// createInfo.generateMipmaps = This->generateMipmaps; +// createInfo.isArray = This->isArray; +// createInfo.numDimensions = This->numDimensions; +// createInfo.numFaces = This->numFaces; +// createInfo.numLayers = This->numLayers; +// createInfo.numLevels = This->numLevels; +// createInfo.pDfd = nullptr; +// +// ktxTexture2* prototype; +// result = ktxTexture2_Create(&createInfo, KTX_TEXTURE_CREATE_ALLOC_STORAGE, &prototype); +// +// if (result != KTX_SUCCESS) { +// assert(result == KTX_OUT_OF_MEMORY && "Out of memory allocating texture."); +// return result; +// } +// +// uint32_t block_size_x{6}; +// uint32_t block_size_y{6}; +// uint32_t block_size_z{1}; +// float quality{0}; +// // uint32_t flags{params->normalMap ? ASTCENC_FLG_MAP_NORMAL : 0}; +// +// // Walk in reverse on levels so we don't have to do this later +// assert(prototype->dataSize && "Prototype texture size not initialized.\n"); +// +// if (!prototype->pData) { +// return KTX_OUT_OF_MEMORY; +// } +// +// uint8_t* buffer_out = prototype->pData; +// +// for (int32_t level = This->numLevels - 1; level >= 0; level--) { +// uint32_t width = MAX(1, This->baseWidth >> level); +// uint32_t height = MAX(1, This->baseHeight >> level); +// uint32_t depth = MAX(1, This->baseDepth >> level); +// ktx_size_t levelImageSizeIn = 0; +// ktx_size_t levelImageSizeOut = 0; +// ktx_uint32_t levelImages = 0; +// +// levelImages = This->numLayers * This->numFaces * depth; +// levelImageSizeIn = +// ktxTexture_calcImageSize(ktxTexture(This), level, KTX_FORMAT_VERSION_TWO); +// levelImageSizeOut = +// ktxTexture_calcImageSize(ktxTexture(prototype), level, KTX_FORMAT_VERSION_TWO); +// ktx_size_t offset = ktxTexture2_levelDataOffset(This, level); +// +// for (uint32_t image = 0; image < levelImages; image++) { +// } +// } +// +// // We are done with astcencoder +// +// assert(KHR_DFDVAL(prototype->pDfd + 1, MODEL) == KHR_DF_MODEL_ASTC && +// "Invalid dfd generated for ASTC image\n"); +// assert((transfer == KHR_DF_TRANSFER_SRGB +// ? KHR_DFDVAL(prototype->pDfd + 1, TRANSFER) == KHR_DF_TRANSFER_SRGB && +// KHR_DFDVAL(prototype->pDfd + 1, PRIMARIES) == KHR_DF_PRIMARIES_SRGB +// : true) && +// "Not a valid sRGB image\n"); +// +// // Fix up the current (This) texture +// #undef DECLARE_PRIVATE +// #undef DECLARE_PROTECTED +// #define DECLARE_PRIVATE(n, t2) ktxTexture2_private& n = *(t2->_private) +// #define DECLARE_PROTECTED(n, t2) ktxTexture_protected& n = *(t2->_protected) +// +// DECLARE_PROTECTED(thisPrtctd, This); +// DECLARE_PRIVATE(protoPriv, prototype); +// DECLARE_PROTECTED(protoPrtctd, prototype); +// memcpy(&thisPrtctd._formatSize, &protoPrtctd._formatSize, sizeof(ktxFormatSize)); +// // This->vkFormat = vkFormat; +// This->isCompressed = prototype->isCompressed; +// This->supercompressionScheme = KTX_SS_NONE; +// This->_private->_requiredLevelAlignment = protoPriv._requiredLevelAlignment; +// // Copy the levelIndex from the prototype to This. +// memcpy(This->_private->_levelIndex, protoPriv._levelIndex, +// This->numLevels * sizeof(ktxLevelIndexEntry)); +// // Move the DFD and data from the prototype to This. +// free(This->pDfd); +// This->pDfd = prototype->pDfd; +// prototype->pDfd = 0; +// free(This->pData); +// This->pData = prototype->pData; +// This->dataSize = prototype->dataSize; +// prototype->pData = 0; +// prototype->dataSize = 0; +// +// ktxTexture2_Destroy(prototype); +// +// KHR_DFDSETVAL(This->pDfd + 1, FLAGS, alphaMode); // Restore alphaMode flags +// return KTX_SUCCESS; +// } + +/** + * @memberof ktxTexture2 + * @ingroup writer + * @~English + * @brief Encode and compress a ktx texture with uncompressed images to astc. + * + * The images are either encoded to ASTC block-compressed format. The encoded images + * replace the original images and the texture's fields including the DFD are modified to reflect + the new + * state. + * + * Such textures can be directly uploaded to a GPU via a graphics API. + * + * @param[in] This pointer to the ktxTexture2 object of interest. + * @param[in] quality Compression quality, a value from 0 - 100. + Higher=higher quality/slower speed. + Lower=lower quality/faster speed. + Negative values for quality are considered > 100. + * + * @return KTX_SUCCESS on success, other KTX_* enum values on error. + * + * @exception KTX_INVALID_OPERATION + * The texture's images are supercompressed. + * @exception KTX_INVALID_OPERATION + * The texture's image are in a block compressed + * format. + * @exception KTX_INVALID_OPERATION + * The texture image's format is a packed format + * (e.g. RGB565). + * @exception KTX_INVALID_OPERATION + * The texture image format's component size is not 8-bits. + * @exception KTX_INVALID_OPERATION + * The texture's images are 1D. Only 2D images can + * be supercompressed. + * @exception KTX_OUT_OF_MEMORY Not enough memory to carry out supercompression. + */ +// extern "C" KTX_error_code +// ktxTexture2_CompressAstc(ktxTexture2* This, ktx_uint32_t quality) { +// return ktxTexture2_CompressAstcEx(This, NULL); +// } + +// extern "C" KTX_error_code +// ktxTexture2_CompressBcnEx(ktxTexture2*) { +// return KTX_INVALID_OPERATION; +// } +// +// extern "C" KTX_error_code +// ktxTexture2_CompressBcn(ktxTexture2*, ktx_uint32_t) { +// return KTX_INVALID_OPERATION; +// } diff --git a/tests/resources/ktx2/color_grid_bc1.ktx2 b/tests/resources/ktx2/color_grid_bc1.ktx2 new file mode 100644 index 0000000000..34998283f1 --- /dev/null +++ b/tests/resources/ktx2/color_grid_bc1.ktx2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faffeeb7a27bd8459a9376be999e5d000f9cafaf7807e27b4111889aa62e60d6 +size 699520 diff --git a/tests/texturetests/texturetests.cc b/tests/texturetests/texturetests.cc index 933aef9c0a..08337a194e 100644 --- a/tests/texturetests/texturetests.cc +++ b/tests/texturetests/texturetests.cc @@ -3257,6 +3257,95 @@ TEST_F(ktxTexture2AstcDecodeTestBase, Decode_astc_8x8_unorm_array_7) { runTest(u8"astc_8x8_unorm_array_7.ktx2"); } +//------------------------------------------------- +// Template for base fixture for BCn decode tests. +//------------------------------------------------- + +class ktxTexture2BCnDecodeTestBase : public ::testing::Test { + public: + void runTest(const std::u8string& bcnFileName) { + ktxTexture2* texture; + KTX_error_code result; + + fs::path bcnPath = ktx2Path; + bcnPath.replace_filename(bcnFileName); + result = ktxTexture2_CreateFromNamedFile( + reinterpret_cast(bcnPath.u8string().c_str()), + KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, &texture); + + EXPECT_EQ(result, KTX_SUCCESS) + << format("ktxTexture2_CreateFromNamedFile \"{}\" failed: {}", + from_u8string(bcnPath.u8string()), ktxErrorString(result)); + EXPECT_NE(texture, nullptr); + + // Check the input file is valid BCn (TODO) + khr_df_model_e colormodel = ktxTexture2_GetColorModel_e(texture); + ASSERT_TRUE(colormodel == KHR_DF_MODEL_BC1A || colormodel == KHR_DF_MODEL_BC3 || + colormodel == KHR_DF_MODEL_BC4 || colormodel == KHR_DF_MODEL_BC5 || + colormodel == KHR_DF_MODEL_BC7) + << format( + "Color model of \"{}\" {} is not a BC1, BC3, BC4, BC5, or BC7 encoded test file", + from_u8string(bcnPath.u8string()), dfdToStringColorModel(colormodel)); + ASSERT_TRUE(texture->isCompressed); + ASSERT_FALSE(ktxTexture2_NeedsTranscoding(texture)); + ASSERT_TRUE(texture->pDfd != nullptr); + + auto height = texture->baseHeight; + auto width = texture->baseWidth; + auto depth = texture->baseDepth; + ASSERT_TRUE(depth == 1); + auto numLayers = texture->numLayers; + auto isArray = texture->isArray; + auto isHdr = ktxTexture2_IsHDR(texture); + auto isPremultipliedAlpha = ktxTexture2_GetPremultipliedAlpha(texture); + uint32_t* pBdb = texture->pDfd + 1; + auto isFloat = (KHR_DFDSVAL(pBdb, 0, QUALIFIERS) & KHR_DF_SAMPLE_DATATYPE_FLOAT) != 0U; + auto isSrgb = KHR_DFDVAL(pBdb, TRANSFER) == KHR_DF_TRANSFER_SRGB; + + EXPECT_FALSE(isSrgb && isFloat); + + result = ktxTexture2_DecodeBCn(texture); + + EXPECT_EQ(result, KTX_SUCCESS) + << format("ktxTexture2_DecodeBCn failed: {}", ktxErrorString(result)); + // Get the pointer to the updated DFD + ASSERT_FALSE(ktxTexture2_NeedsTranscoding(texture)); + ASSERT_FALSE(texture->isCompressed); + ASSERT_TRUE(texture->pDfd != nullptr); + pBdb = texture->pDfd + 1; + if (isFloat) { + EXPECT_EQ(texture->vkFormat, (ktx_uint32_t)VK_FORMAT_R16G16B16A16_SFLOAT); + EXPECT_NE((KHR_DFDSVAL(pBdb, 1, QUALIFIERS) & KHR_DF_SAMPLE_DATATYPE_FLOAT), 0U); + EXPECT_FALSE(KHR_DFDVAL(pBdb, TRANSFER) == KHR_DF_TRANSFER_SRGB); + } else if (isSrgb) + EXPECT_EQ(texture->vkFormat, (ktx_uint32_t)VK_FORMAT_R8G8B8A8_SRGB); + else + EXPECT_EQ(texture->vkFormat, (ktx_uint32_t)VK_FORMAT_R8G8B8A8_UNORM); + + khr_df_model_e model = static_cast(KHR_DFDVAL(texture->pDfd + 1, MODEL)); + EXPECT_EQ(model, KHR_DF_MODEL_RGBSDA); + EXPECT_EQ(height, texture->baseHeight); + EXPECT_EQ(width, texture->baseWidth); + EXPECT_EQ(depth, texture->baseDepth); + EXPECT_EQ(numLayers, texture->numLayers); + EXPECT_EQ(isArray, texture->isArray); + EXPECT_EQ(isHdr, ktxTexture2_IsHDR(texture)); + EXPECT_EQ(isPremultipliedAlpha, ktxTexture2_GetPremultipliedAlpha(texture)); + + if (texture) { + ktxTexture2_Destroy(texture); + } + } +}; + +// Test fixtures for BCn decode tests. + +//////////////////////////////////////////// +// BCn decode tests +/////////////////////////////////////////// + +TEST_F(ktxTexture2BCnDecodeTestBase, Decode_color_grid_bc1) { runTest(u8"color_grid_bc1.ktx2"); } + } // namespace From 12ab6622ab8400f57916e8a8a6c3b69e9af865e2 Mon Sep 17 00:00:00 2001 From: Walid Chtioui Date: Wed, 6 May 2026 11:25:26 +0200 Subject: [PATCH 02/81] Add BC1, BC3, BC4, BC5, and BC7 decoding support to ktx extract command Signed-off-by: Walid Chtioui --- lib/src/bcn_codec.cpp | 73 +++--------- lib/src/bcn_codec.h | 62 ++++++++++ tools/ktx/command_extract.cpp | 206 +++++++++++++++++++++++++++++++++- 3 files changed, 284 insertions(+), 57 deletions(-) create mode 100644 lib/src/bcn_codec.h diff --git a/lib/src/bcn_codec.cpp b/lib/src/bcn_codec.cpp index d4680ff8fa..ed667e8497 100644 --- a/lib/src/bcn_codec.cpp +++ b/lib/src/bcn_codec.cpp @@ -16,37 +16,19 @@ * @author Wasim Abbas , www.arm.com */ + +#include "bcn_codec.h" #include #include #include #include -#include "dfdutils/dfd.h" -#include "ktx.h" #include "ktxint.h" #include "texture2.h" -#include "vkformat_enum.h" -#include "bc7enc_rdo/bc7decomp.h" /* for BC7 decoder */ +// #include "bc7enc_rdo/bc7decomp.h" /* for BC7 decoder */ #include "bc7enc_rdo/rgbcx.h" /* for BC1-BC5 encoders/decoders */ -#define BCN_BLOCK_SIZE 4 - -#define BC1_BLOCK_SIZE 8 -#define BC2_BLOCK_SIZE 16 -#define BC3_BLOCK_SIZE 16 -#define BC4_BLOCK_SIZE 8 -#define BC5_BLOCK_SIZE 16 -#define BC6H_BLOCK_SIZE 16 -#define BC7_BLOCK_SIZE 16 - -#define BC1_OUTPUT_NCHANNELS 4 -#define BC3_OUTPUT_NCHANNELS 4 -#define BC4_OUTPUT_NCHANNELS 1 -#define BC5_OUTPUT_NCHANNELS 2 -#define BC6H_OUTPUT_NCHANNELS 4 -#define BC7_OUTPUT_NCHANNELS 4 - //************************************************************************ //* Functions common to decoder and encoder * //************************************************************************ @@ -154,36 +136,6 @@ launchThreads(int threadCount, void (*func)(int, int, void*), void* payload) { //* Decoder functions * //************************************************************************ -/** - * @memberof ktxTexture - * @internal - * @ingroup reader - * @~English - * @brief Should be used to get uncompressed version of BCn VkFormat - * - * The decompressed format is calculated from corresponding BCn format. There are - * only 3 possible options currently supported. RGBA8, SRGBA8 and RGBA16. - * - * @return Uncompressed version of VKFormat for a specific BCn VkFormat or - * VK_FORMAT_UNDEFINED in case the ktxTexture2's vkFormat does not - * reflect a BCn compressed texture. - */ -inline VkFormat -getUncompressedFormat(ktxTexture2* This) noexcept { - switch (This->vkFormat) { - case VK_FORMAT_BC1_RGB_SRGB_BLOCK: - case VK_FORMAT_BC3_SRGB_BLOCK: - case VK_FORMAT_BC7_SRGB_BLOCK: - return VK_FORMAT_R8G8B8A8_SRGB; - case VK_FORMAT_BC4_UNORM_BLOCK: - return VK_FORMAT_R8_UNORM; - case VK_FORMAT_BC5_UNORM_BLOCK: - return VK_FORMAT_R8G8_UNORM; - default: - return VK_FORMAT_UNDEFINED; - } -} - /* * Cannot use DECLARE_PRIVATE macro declared in texture.h because it calls the * variable `private` which is obviously a no-no in c++. TODO: consider changing. @@ -232,12 +184,17 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { if (!(channelId == KHR_DF_CHANNEL_BC1A_COLOR || channelId == KHR_DF_CHANNEL_BC1A_ALPHA)) { return KTX_FILE_DATA_ERROR; } + // TODO: expose as parameter + rgbcx::init(rgbcx::bc1_approx_mode::cBC1Ideal); break; case KHR_DF_MODEL_BC3: + rgbcx::init(); break; case KHR_DF_MODEL_BC4: + rgbcx::init(); break; case KHR_DF_MODEL_BC5: + rgbcx::init(); break; case KHR_DF_MODEL_BC7: break; @@ -257,7 +214,7 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { DECLARE_PRIVATE_EX(priv, This); - ktx_uint32_t vkformat = (ktx_uint32_t)getUncompressedFormat(This); + ktx_uint32_t vkformat = (ktx_uint32_t)getBCnUncompressedFormat(This->vkFormat); if (vkformat == VK_FORMAT_UNDEFINED) { return KTX_INVALID_OPERATION; // Not in BCn decodable format } @@ -303,6 +260,9 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { } } + // Create intermediate storage to store decoded blocks. Not all blocks + // necessarily decode to 4x4x4 but this is enough to hold all possible + // combinations (at least for LDR - i.e., not for BC6H formats). const ktx_size_t rgba_pitch = BCN_BLOCK_SIZE * BC1_OUTPUT_NCHANNELS; ktx_uint8_t rgba[BCN_BLOCK_SIZE * rgba_pitch]; /* 64 bytes */ @@ -315,8 +275,8 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { for (uint32_t faceIndex = 0; faceIndex < This->numFaces; ++faceIndex) { for (uint32_t depthSliceIndex = 0; depthSliceIndex < imageDepths; ++depthSliceIndex) { - ktx_size_t levelImageSizeIn = ktxTexture_calcImageSize( - ktxTexture(This), levelIndex, KTX_FORMAT_VERSION_TWO); + // ktx_size_t levelImageSizeIn = ktxTexture_calcImageSize( + // ktxTexture(This), levelIndex, KTX_FORMAT_VERSION_TWO); ktx_size_t imageOffsetIn; ktx_size_t imageOffsetOut; @@ -337,13 +297,16 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { for (size_t y{0}; y < imageHeight; y += BCN_BLOCK_SIZE) { for (size_t x{0}; x < imageWidth; x += BCN_BLOCK_SIZE) { switch (colorModel) { - // BC1: 8 bytes -> 4 x 4 x 4 = 64 bytes case KHR_DF_MODEL_BC1A: + // BC1: 8 bytes -> 4 x 4 x 4 = 64 bytes rgbcx::unpack_bc1(src_blocks, rgba, true); src_blocks += BC1_BLOCK_SIZE; break; case KHR_DF_MODEL_BC3: + // BC3: 16 bytes -> 4 x 4 x 4 = 64 bytes + rgbcx::unpack_bc3(src_blocks, rgba); + src_blocks += BC3_BLOCK_SIZE; break; case KHR_DF_MODEL_BC4: diff --git a/lib/src/bcn_codec.h b/lib/src/bcn_codec.h new file mode 100644 index 0000000000..516c65c675 --- /dev/null +++ b/lib/src/bcn_codec.h @@ -0,0 +1,62 @@ +/* -*- tab-width: 4; -*- */ +/* vi: set sw=2 ts=4 expandtab textwidth=70: */ + +/* + * Copyright 2019-2020 The Khronos Group Inc. + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef _BCN_CODEC_H_ +#define _BCN_CODEC_H_ + +#include "vkformat_enum.h" +#include "ktx.h" + +#define BCN_BLOCK_SIZE 4 + +#define BC1_BLOCK_SIZE 8 +#define BC2_BLOCK_SIZE 16 +#define BC3_BLOCK_SIZE 16 +#define BC4_BLOCK_SIZE 8 +#define BC5_BLOCK_SIZE 16 +#define BC6H_BLOCK_SIZE 16 +#define BC7_BLOCK_SIZE 16 + +#define BC1_OUTPUT_NCHANNELS 4 +#define BC3_OUTPUT_NCHANNELS 4 +#define BC4_OUTPUT_NCHANNELS 1 +#define BC5_OUTPUT_NCHANNELS 2 +#define BC6H_OUTPUT_NCHANNELS 4 +#define BC7_OUTPUT_NCHANNELS 4 + +/** + * @memberof ktxTexture + * @internal + * @ingroup reader + * @~English + * @brief Should be used to get uncompressed version of BCn VkFormat + * + * The decompressed format is calculated from corresponding BCn format. There are + * only 3 possible options currently supported. RGBA8, SRGBA8 and RGBA16. + * + * @return Uncompressed version of VKFormat for a specific BCn VkFormat or + * VK_FORMAT_UNDEFINED in case the ktxTexture2's vkFormat does not + * reflect a BCn compressed texture. + */ +inline VkFormat +getBCnUncompressedFormat(ktx_uint32_t vkFormat) noexcept { + switch (vkFormat) { + case VK_FORMAT_BC1_RGB_SRGB_BLOCK: + case VK_FORMAT_BC3_SRGB_BLOCK: + case VK_FORMAT_BC7_SRGB_BLOCK: + return VK_FORMAT_R8G8B8A8_SRGB; + case VK_FORMAT_BC4_UNORM_BLOCK: + return VK_FORMAT_R8_UNORM; + case VK_FORMAT_BC5_UNORM_BLOCK: + return VK_FORMAT_R8G8_UNORM; + default: + return VK_FORMAT_UNDEFINED; + } +} + +#endif diff --git a/tools/ktx/command_extract.cpp b/tools/ktx/command_extract.cpp index 07c26aa6c8..361d2b67bd 100644 --- a/tools/ktx/command_extract.cpp +++ b/tools/ktx/command_extract.cpp @@ -2,6 +2,7 @@ // Copyright 2022-2023 RasterGrid Kft. // SPDX-License-Identifier: Apache-2.0 +#include "bc7enc_rdo/bc7decomp.h" #include "command.h" #include "platform_utils.h" #include "format_descriptor.h" @@ -28,6 +29,9 @@ #include "astc-encoder/Source/ThirdParty/tinyexr.h" #include "astc-encoder/Source/astcenc.h" +#include "bc7enc_rdo/rgbcx.h" // for BC1-BC5 decoders +#include "bcn_codec.h" + // ------------------------------------------------------------------------------------------------- namespace ktx { @@ -184,6 +188,9 @@ class CommandExtract : public Command { const FormatDescriptor& format, uint32_t width, uint32_t height, float scale, float offset, const char* data, std::size_t size); void unpackAndSave422(std::string filepath, bool appendExtension, VkFormat vkFormat, const FormatDescriptor& format, uint32_t width, uint32_t height, const char* data, std::size_t size); + void decodeAndSaveBCn(std::string filepath, bool appendExtension, VkFormat vkFormat, + uint32_t width, uint32_t height, const char* compressedData, + std::size_t compressedSize); }; // ------------------------------------------------------------------------------------------------- @@ -592,6 +599,180 @@ void CommandExtract::decodeAndSaveASTC(std::string filepath, bool appendExtensio height); } +void CommandExtract::decodeAndSaveBCn(std::string filepath, bool appendExtension, VkFormat vkFormat, + uint32_t width, uint32_t height, const char* compressedData, + std::size_t compressedSize) { + VkFormat uncompressedVkFormat; + std::size_t nchannels; + std::size_t expectedCompressedSize; + const std::size_t nBlocks = (std::size_t)((width + BCN_BLOCK_SIZE - 1) / BCN_BLOCK_SIZE) * + ((height + BCN_BLOCK_SIZE - 1) / BCN_BLOCK_SIZE); + + switch (vkFormat) { + case VK_FORMAT_BC1_RGB_UNORM_BLOCK: + case VK_FORMAT_BC1_RGBA_UNORM_BLOCK: + // TODO: for the moment map this to RGBA so that we don't have to add + // an additional loop in the decoding code below (rgbcx::unpack_bc1 + // decodes into RGBA block). + uncompressedVkFormat = VK_FORMAT_R8G8B8A8_UNORM; + nchannels = BC1_OUTPUT_NCHANNELS; + expectedCompressedSize = BC1_BLOCK_SIZE * nBlocks; + rgbcx::init(); + break; + + case VK_FORMAT_BC1_RGB_SRGB_BLOCK: + case VK_FORMAT_BC1_RGBA_SRGB_BLOCK: + uncompressedVkFormat = VK_FORMAT_R8G8B8A8_SRGB; + nchannels = BC1_OUTPUT_NCHANNELS; + expectedCompressedSize = BC1_BLOCK_SIZE * nBlocks; + rgbcx::init(); + break; + + case VK_FORMAT_BC3_UNORM_BLOCK: + case VK_FORMAT_BC3_SRGB_BLOCK: + uncompressedVkFormat = VK_FORMAT_R8G8B8A8_SRGB; + nchannels = BC3_OUTPUT_NCHANNELS; + expectedCompressedSize = BC3_BLOCK_SIZE * nBlocks; + rgbcx::init(); + break; + + case VK_FORMAT_BC4_UNORM_BLOCK: + case VK_FORMAT_BC4_SNORM_BLOCK: + uncompressedVkFormat = VK_FORMAT_R8_UNORM; + nchannels = BC4_OUTPUT_NCHANNELS; + expectedCompressedSize = BC4_BLOCK_SIZE * nBlocks; + rgbcx::init(); + break; + + case VK_FORMAT_BC5_UNORM_BLOCK: + case VK_FORMAT_BC5_SNORM_BLOCK: + uncompressedVkFormat = VK_FORMAT_R8G8_UNORM; + nchannels = BC5_OUTPUT_NCHANNELS; + expectedCompressedSize = BC5_BLOCK_SIZE * nBlocks; + rgbcx::init(); + break; + +#if 0 + case VK_FORMAT_BC6H_UFLOAT_BLOCK: + case VK_FORMAT_BC6H_SFLOAT_BLOCK: + break; +#endif + + case VK_FORMAT_BC7_UNORM_BLOCK: + case VK_FORMAT_BC7_SRGB_BLOCK: + uncompressedVkFormat = VK_FORMAT_R8G8B8A8_SRGB; + nchannels = BC7_OUTPUT_NCHANNELS; + expectedCompressedSize = BC7_BLOCK_SIZE * nBlocks; + break; + + default: // should never occur + fatal(rc::RUNTIME_ERROR, "Provided format is not a BCn block-compressed format: {}", + static_cast(vkFormat)); + return; + } + + // Before doing anything, be absolutely certain that we won't overflow the + // compressedData buffer + if (compressedSize != expectedCompressedSize) { + fatal(rc::RUNTIME_ERROR, + "BCn decoding failed. Provided compressed data size does not match the expected " + "size. Expected: {} bytes but got: {} bytes", + expectedCompressedSize, compressedSize); + } + + const std::size_t uncompressedSize = width * height * nchannels; + const auto uncompressedBuffer = std::make_unique(uncompressedSize); + auto* bufferPtr = uncompressedBuffer.get(); + + // Create intermediate storage to store decoded blocks. Not all blocks + // necessarily decode to 4x4x4 but this is enough to hold all possible + // combinations (at least for LDR - i.e., not for BC6H formats). + const ktx_size_t rgba_pitch = BCN_BLOCK_SIZE * 4; /* 4x4 */ + ktx_uint8_t rgba[BCN_BLOCK_SIZE * rgba_pitch]; /* 4x4x4 = 64 bytes */ +#if 0 + ktx_uint16_t rgbh[BCN_BLOCK_SIZE * BCN_BLOCK_SIZE * 4]; +#endif + + const ktx_size_t dst_pitch = width * nchannels; + const char* src_blocks = compressedData; + + for (size_t y{0}; y < height; y += BCN_BLOCK_SIZE) { + for (size_t x{0}; x < width; x += BCN_BLOCK_SIZE) { + switch (vkFormat) { + case VK_FORMAT_BC1_RGB_UNORM_BLOCK: + case VK_FORMAT_BC1_RGB_SRGB_BLOCK: + case VK_FORMAT_BC1_RGBA_UNORM_BLOCK: + case VK_FORMAT_BC1_RGBA_SRGB_BLOCK: + // BC1: 8 bytes -> 4 x 4 x 4 = 64 bytes (alpha is 1-bit encoded or ignored) + // Keep set_alpha true otherwise we get a transparent picture + // (i.e., we have to set alpha ourselves). + rgbcx::unpack_bc1(src_blocks, rgba, + /* set_alpha */ true); + src_blocks += BC1_BLOCK_SIZE; + break; + + case VK_FORMAT_BC3_UNORM_BLOCK: + case VK_FORMAT_BC3_SRGB_BLOCK: + // BC3: 16 bytes -> 4 x 4 x 4 = 64 bytes + rgbcx::unpack_bc3(src_blocks, rgba); + src_blocks += BC3_BLOCK_SIZE; + break; + + case VK_FORMAT_BC4_UNORM_BLOCK: + case VK_FORMAT_BC4_SNORM_BLOCK: + // BC4: 8 bytes -> 4 x 4 x 1 = 16 bytes + rgbcx::unpack_bc4(src_blocks, rgba, /* stride */ BC4_OUTPUT_NCHANNELS); + src_blocks += BC4_BLOCK_SIZE; + break; + + case VK_FORMAT_BC5_UNORM_BLOCK: + case VK_FORMAT_BC5_SNORM_BLOCK: + // BC5: 16 bytes -> 4 x 4 x 2 = 32 bytes + rgbcx::unpack_bc5(src_blocks, rgba, 0, 1, + /* stride */ BC5_OUTPUT_NCHANNELS); + src_blocks += BC5_BLOCK_SIZE; + break; + +#if 0 + case VK_FORMAT_BC6H_UFLOAT_BLOCK: + case VK_FORMAT_BC6H_SFLOAT_BLOCK: + break; +#endif + + case VK_FORMAT_BC7_UNORM_BLOCK: + case VK_FORMAT_BC7_SRGB_BLOCK: + // BC7: 16 bytes -> 4 x 4 x 4 = 64 bytes + bc7decomp::unpack_bc7(src_blocks, reinterpret_cast(rgba)); + src_blocks += BC7_BLOCK_SIZE; + break; + + default: + return; // should never occur + } + + // now we copy the decoded block into the actual texture image while + // taking into consideration that dims may not be a multiple of 4. + const ktx_uint8_t* pSrc = rgba; + ktx_uint8_t* pDst = bufferPtr + y * dst_pitch + nchannels * x; + int cols = fmin(BCN_BLOCK_SIZE, width - x); + for (ktx_size_t py{0}; py < BCN_BLOCK_SIZE && y + py < height; ++py) { + memcpy(pDst, pSrc, cols * nchannels); + pSrc += rgba_pitch; + pDst += dst_pitch; + } + } + } + + std::cout << vkFormat << '\n'; + + // Range mapping has been handled here so no need to pass the parameters on to + // this recursive call. + saveImageFile(std::move(filepath), appendExtension, + reinterpret_cast(uncompressedBuffer.get()), uncompressedSize, + uncompressedVkFormat, createFormatDescriptor(uncompressedVkFormat, *this), width, + height); +} + using namespace imageio; void CommandExtract::unpackAndSave422(std::string filepath, bool appendExtension, @@ -1378,11 +1559,32 @@ void CommandExtract::saveImageFile( saveEXR(std::move(filepath), appendExtension, vkFormat, format, width, height, {TINYEXR_PIXELTYPE_FLOAT, TINYEXR_PIXELTYPE_HALF}, data, size); break; + case VK_FORMAT_BC1_RGB_UNORM_BLOCK: [[fallthrough]]; + case VK_FORMAT_BC1_RGB_SRGB_BLOCK: [[fallthrough]]; + case VK_FORMAT_BC1_RGBA_UNORM_BLOCK: [[fallthrough]]; + case VK_FORMAT_BC1_RGBA_SRGB_BLOCK: [[fallthrough]]; + case VK_FORMAT_BC3_UNORM_BLOCK: [[fallthrough]]; + case VK_FORMAT_BC3_SRGB_BLOCK: [[fallthrough]]; + case VK_FORMAT_BC4_UNORM_BLOCK: [[fallthrough]]; + case VK_FORMAT_BC4_SNORM_BLOCK: [[fallthrough]]; + case VK_FORMAT_BC5_UNORM_BLOCK: [[fallthrough]]; + case VK_FORMAT_BC5_SNORM_BLOCK: [[fallthrough]]; +#if 0 + case VK_FORMAT_BC6H_UFLOAT_BLOCK: [[fallthrough]]; + case VK_FORMAT_BC6H_SFLOAT_BLOCK: [[fallthrough]]; +#endif + case VK_FORMAT_BC7_UNORM_BLOCK: [[fallthrough]]; + case VK_FORMAT_BC7_SRGB_BLOCK: + // BCn decode will recurse into this function with the uncompressed data and format + decodeAndSaveBCn(std::move(filepath), appendExtension, vkFormat, width, height, data, size); + break; + default: - fatal(rc::INVALID_FILE, "Requested format conversion from {} is not supported.", toString(vkFormat)); + fatal(rc::INVALID_FILE, "Requested format conversion from {} is not supported.", + toString(vkFormat)); } } -} // namespace ktx +} // namespace ktx KTX_COMMAND_ENTRY_POINT(ktxExtract, ktx::CommandExtract) From d3fdab22ab8573dab06a82d8e87668bf5610c424 Mon Sep 17 00:00:00 2001 From: Walid Chtioui Date: Thu, 7 May 2026 15:47:20 +0200 Subject: [PATCH 03/81] Add BC1, BC3, BC4, BC5 and BC7 encoders and add encoder/decode tests *Add encode/decode tests (that use both CompressBCn/DecodeBCn) *Add BCn ktx2 test files (transcoded from tests/resources/ktx2/color_grid_uastc_zstd_5.ktx2) *Cleanup BCn test fixtures *Remove `std::cout` statement Signed-off-by: Walid Chtioui --- external/bc7enc_rdo/CMakeLists.txt | 108 - external/bc7enc_rdo/bc7enc.h | 3 + external/bc7enc_rdo/build_msvc.bat | 1 - external/bc7enc_rdo/dds_defs.h | 286 - external/bc7enc_rdo/ert.cpp | 3 +- external/bc7enc_rdo/ert.h | 1 + external/bc7enc_rdo/lodepng.cpp | 6235 ---------------------- external/bc7enc_rdo/lodepng.h | 1761 ------ external/bc7enc_rdo/miniz.h | 2541 --------- external/bc7enc_rdo/rdo_bc_encoder.cpp | 1270 ----- external/bc7enc_rdo/rdo_bc_encoder.h | 250 - external/bc7enc_rdo/rgbcx_table4_small.h | 969 ---- external/bc7enc_rdo/test.cpp | 872 --- external/bc7enc_rdo/utils.cpp | 901 ---- external/bc7enc_rdo/utils.h | 2617 --------- lib/CMakeLists.txt | 9 +- lib/include/ktx.h | 42 + lib/src/bcn_codec.cpp | 740 ++- lib/src/bcn_codec.h | 33 - tests/resources/ktx2/color_grid_bc3.ktx2 | 3 + tests/resources/ktx2/color_grid_bc4.ktx2 | 3 + tests/resources/ktx2/color_grid_bc5.ktx2 | 3 + tests/resources/ktx2/color_grid_bc7.ktx2 | 3 + tests/texturetests/texturetests.cc | 254 +- tools/ktx/command_extract.cpp | 2 - 25 files changed, 743 insertions(+), 18167 deletions(-) delete mode 100644 external/bc7enc_rdo/CMakeLists.txt delete mode 100644 external/bc7enc_rdo/build_msvc.bat delete mode 100644 external/bc7enc_rdo/dds_defs.h delete mode 100644 external/bc7enc_rdo/lodepng.cpp delete mode 100644 external/bc7enc_rdo/lodepng.h delete mode 100644 external/bc7enc_rdo/miniz.h delete mode 100644 external/bc7enc_rdo/rdo_bc_encoder.cpp delete mode 100644 external/bc7enc_rdo/rdo_bc_encoder.h delete mode 100644 external/bc7enc_rdo/rgbcx_table4_small.h delete mode 100644 external/bc7enc_rdo/test.cpp delete mode 100644 external/bc7enc_rdo/utils.cpp delete mode 100644 external/bc7enc_rdo/utils.h create mode 100644 tests/resources/ktx2/color_grid_bc3.ktx2 create mode 100644 tests/resources/ktx2/color_grid_bc4.ktx2 create mode 100644 tests/resources/ktx2/color_grid_bc5.ktx2 create mode 100644 tests/resources/ktx2/color_grid_bc7.ktx2 diff --git a/external/bc7enc_rdo/CMakeLists.txt b/external/bc7enc_rdo/CMakeLists.txt deleted file mode 100644 index 1ec2e73721..0000000000 --- a/external/bc7enc_rdo/CMakeLists.txt +++ /dev/null @@ -1,108 +0,0 @@ -project(bc7enc) - -cmake_minimum_required(VERSION 2.8) -option(BUILD_X64 "build 64-bit" TRUE) -option(SUPPORT_BC7E "support BC7E (requires ispc)" FALSE) - -message("Initial BUILD_X64=${BUILD_X64}") -message("Initial CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}") -message("Initial SUPPORT_BC7E=${SUPPORT_BC7E}") - -if( NOT CMAKE_BUILD_TYPE ) - set( CMAKE_BUILD_TYPE Release ) -endif( NOT CMAKE_BUILD_TYPE ) - -message( ${PROJECT_NAME} " build type: " ${CMAKE_BUILD_TYPE} ) - -if (BUILD_X64) - message("Building 64-bit") -else() - message("Building 32-bit") -endif(BUILD_X64) - -if (NOT MSVC) - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -fopenmp") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -fopenmp") - - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fopenmp") - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fopenmp") -else() - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /openmp /W4") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /openmp /W4") - - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /openmp /W4") - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /openmp /W4") -endif() - -if (SUPPORT_BC7E) - if (NOT MSVC) - add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/bc7e.o ${CMAKE_SOURCE_DIR}/bc7e_avx.o ${CMAKE_SOURCE_DIR}/bc7e_sse2.o ${CMAKE_SOURCE_DIR}/bc7e_sse4.o ${CMAKE_SOURCE_DIR}/bc7e_avx2.o - COMMAND ispc -g -O2 ${CMAKE_SOURCE_DIR}/bc7e.ispc -o ${CMAKE_SOURCE_DIR}/bc7e.o -h ${CMAKE_SOURCE_DIR}/bc7e_ispc.h --target=sse2,sse4,avx,avx2 --opt=fast-math --opt=disable-assertions - DEPENDS bc7e.ispc) - else() - add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/bc7e.obj ${CMAKE_SOURCE_DIR}/bc7e_avx.obj ${CMAKE_SOURCE_DIR}/bc7e_sse2.obj ${CMAKE_SOURCE_DIR}/bc7e_sse4.obj ${CMAKE_SOURCE_DIR}/bc7e_avx2.obj - COMMAND ispc -g -O2 ${CMAKE_SOURCE_DIR}/bc7e.ispc -o ${CMAKE_SOURCE_DIR}/bc7e.obj -h ${CMAKE_SOURCE_DIR}/bc7e_ispc.h --target=sse2,sse4,avx,avx2 --opt=fast-math --opt=disable-assertions - DEPENDS bc7e.ispc) - endif() -endif() - -# -fno-strict-aliasing shouldn't be necessary, it's here because that is what MSVC uses by default and that's what I've tested with the most. -if (NOT MSVC) - set(GCC_COMPILE_FLAGS "-fno-strict-aliasing -Wall -Wextra") - if (NOT BUILD_X64) - set(GCC_COMPILE_FLAGS "${GCC_COMPILE_FLAGS} -m32") - endif() -endif() - -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COMPILE_FLAGS}") -set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${GCC_COMPILE_FLAGS}") -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${GCC_COMPILE_FLAGS} -D_DEBUG") - -if (SUPPORT_BC7E) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COMPILE_FLAGS} -DSUPPORT_BC7E=1") -else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COMPILE_FLAGS}") -endif() - -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${GCC_COMPILE_FLAGS}") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${GCC_COMPILE_FLAGS} -D_DEBUG") - -set (BC7ENC_SRC_LIST ${COMMON_SRC_LIST} - bc7enc.cpp - bc7enc.h - bc7decomp.cpp - bc7decomp_ref.cpp - bc7decomp.h - lodepng.cpp - lodepng.h - test.cpp - rgbcx.cpp - rgbcx.h - rgbcx_table4.h - rgbcx_table4_small.h - utils.cpp - utils.h - miniz.h - dds_defs.h - ert.cpp - ert.h - rdo_bc_encoder.cpp - rdo_bc_encoder.h - bc7e.ispc - ) - -if (NOT SUPPORT_BC7E) - add_executable(bc7enc ${BC7ENC_SRC_LIST}) -else() - if (NOT MSVC) - add_executable(bc7enc ${BC7ENC_SRC_LIST} ${CMAKE_SOURCE_DIR}/bc7e.o ${CMAKE_SOURCE_DIR}/bc7e_avx.o ${CMAKE_SOURCE_DIR}/bc7e_avx2.o ${CMAKE_SOURCE_DIR}/bc7e_sse2.o ${CMAKE_SOURCE_DIR}/bc7e_sse4.o) - else() - add_executable(bc7enc ${BC7ENC_SRC_LIST} ${CMAKE_SOURCE_DIR}/bc7e.obj ${CMAKE_SOURCE_DIR}/bc7e_avx.obj ${CMAKE_SOURCE_DIR}/bc7e_avx2.obj ${CMAKE_SOURCE_DIR}/bc7e_sse2.obj ${CMAKE_SOURCE_DIR}/bc7e_sse4.obj) - endif() -endif() - -if (NOT MSVC) - target_link_libraries(bc7enc m) -endif() - - diff --git a/external/bc7enc_rdo/bc7enc.h b/external/bc7enc_rdo/bc7enc.h index 8794c15d5c..1ad52796f5 100644 --- a/external/bc7enc_rdo/bc7enc.h +++ b/external/bc7enc_rdo/bc7enc.h @@ -1,5 +1,8 @@ // File: bc7enc.h - Richard Geldreich, Jr. - MIT license or public domain (see end of bc7enc.c) // If you use this software in a product, attribution / credits is requested but not required. + +#pragma once + #include #include #include diff --git a/external/bc7enc_rdo/build_msvc.bat b/external/bc7enc_rdo/build_msvc.bat deleted file mode 100644 index 1a77d87102..0000000000 --- a/external/bc7enc_rdo/build_msvc.bat +++ /dev/null @@ -1 +0,0 @@ -cmake -D SUPPORT_BC7E=TRUE . diff --git a/external/bc7enc_rdo/dds_defs.h b/external/bc7enc_rdo/dds_defs.h deleted file mode 100644 index 034cccfacc..0000000000 --- a/external/bc7enc_rdo/dds_defs.h +++ /dev/null @@ -1,286 +0,0 @@ -// File: dds_defs.h -// DX9/10 .DDS file header definitions. -#pragma once - -#define PIXEL_FMT_FOURCC(a, b, c, d) ((a) | ((b) << 8U) | ((c) << 16U) | ((d) << 24U)) - -enum pixel_format -{ - PIXEL_FMT_INVALID = 0, - - PIXEL_FMT_DXT1 = PIXEL_FMT_FOURCC('D', 'X', 'T', '1'), - PIXEL_FMT_DXT2 = PIXEL_FMT_FOURCC('D', 'X', 'T', '2'), - PIXEL_FMT_DXT3 = PIXEL_FMT_FOURCC('D', 'X', 'T', '3'), - PIXEL_FMT_DXT4 = PIXEL_FMT_FOURCC('D', 'X', 'T', '4'), - PIXEL_FMT_DXT5 = PIXEL_FMT_FOURCC('D', 'X', 'T', '5'), - PIXEL_FMT_3DC = PIXEL_FMT_FOURCC('A', 'T', 'I', '2'), // DXN_YX - PIXEL_FMT_DXN = PIXEL_FMT_FOURCC('A', '2', 'X', 'Y'), // DXN_XY - PIXEL_FMT_DXT5A = PIXEL_FMT_FOURCC('A', 'T', 'I', '1'), // ATI1N, http://developer.amd.com/media/gpu_assets/Radeon_X1x00_Programming_Guide.pdf - - // Non-standard formats (some of these are supported by ATI's Compressonator) - PIXEL_FMT_DXT5_CCxY = PIXEL_FMT_FOURCC('C', 'C', 'x', 'Y'), - PIXEL_FMT_DXT5_xGxR = PIXEL_FMT_FOURCC('x', 'G', 'x', 'R'), - PIXEL_FMT_DXT5_xGBR = PIXEL_FMT_FOURCC('x', 'G', 'B', 'R'), - PIXEL_FMT_DXT5_AGBR = PIXEL_FMT_FOURCC('A', 'G', 'B', 'R'), - - PIXEL_FMT_DXT1A = PIXEL_FMT_FOURCC('D', 'X', '1', 'A'), - PIXEL_FMT_ETC1 = PIXEL_FMT_FOURCC('E', 'T', 'C', '1'), - - PIXEL_FMT_R8G8B8 = PIXEL_FMT_FOURCC('R', 'G', 'B', 'x'), - PIXEL_FMT_L8 = PIXEL_FMT_FOURCC('L', 'x', 'x', 'x'), - PIXEL_FMT_A8 = PIXEL_FMT_FOURCC('x', 'x', 'x', 'A'), - PIXEL_FMT_A8L8 = PIXEL_FMT_FOURCC('L', 'x', 'x', 'A'), - PIXEL_FMT_A8R8G8B8 = PIXEL_FMT_FOURCC('R', 'G', 'B', 'A') -}; - -const uint32_t cDDSMaxImageDimensions = 8192U; - -// Total size of header is sizeof(uint32)+cDDSSizeofDDSurfaceDesc2; -const uint32_t cDDSSizeofDDSurfaceDesc2 = 124; - -// "DDS " -const uint32_t cDDSFileSignature = 0x20534444; - -struct DDCOLORKEY -{ - uint32_t dwUnused0; - uint32_t dwUnused1; -}; - -struct DDPIXELFORMAT -{ - uint32_t dwSize; - uint32_t dwFlags; - uint32_t dwFourCC; - uint32_t dwRGBBitCount; // ATI compressonator will place a FOURCC code here for swizzled/cooked DXTn formats - uint32_t dwRBitMask; - uint32_t dwGBitMask; - uint32_t dwBBitMask; - uint32_t dwRGBAlphaBitMask; -}; - -struct DDSCAPS2 -{ - uint32_t dwCaps; - uint32_t dwCaps2; - uint32_t dwCaps3; - uint32_t dwCaps4; -}; - -struct DDSURFACEDESC2 -{ - uint32_t dwSize; - uint32_t dwFlags; - uint32_t dwHeight; - uint32_t dwWidth; - union - { - int32_t lPitch; - uint32_t dwLinearSize; - }; - uint32_t dwBackBufferCount; - uint32_t dwMipMapCount; - uint32_t dwAlphaBitDepth; - uint32_t dwUnused0; - uint32_t lpSurface; - DDCOLORKEY unused0; - DDCOLORKEY unused1; - DDCOLORKEY unused2; - DDCOLORKEY unused3; - DDPIXELFORMAT ddpfPixelFormat; - DDSCAPS2 ddsCaps; - uint32_t dwUnused1; -}; - -const uint32_t DDSD_CAPS = 0x00000001; -const uint32_t DDSD_HEIGHT = 0x00000002; -const uint32_t DDSD_WIDTH = 0x00000004; -const uint32_t DDSD_PITCH = 0x00000008; - -const uint32_t DDSD_BACKBUFFERCOUNT = 0x00000020; -const uint32_t DDSD_ZBUFFERBITDEPTH = 0x00000040; -const uint32_t DDSD_ALPHABITDEPTH = 0x00000080; - -const uint32_t DDSD_LPSURFACE = 0x00000800; - -const uint32_t DDSD_PIXELFORMAT = 0x00001000; -const uint32_t DDSD_CKDESTOVERLAY = 0x00002000; -const uint32_t DDSD_CKDESTBLT = 0x00004000; -const uint32_t DDSD_CKSRCOVERLAY = 0x00008000; - -const uint32_t DDSD_CKSRCBLT = 0x00010000; -const uint32_t DDSD_MIPMAPCOUNT = 0x00020000; -const uint32_t DDSD_REFRESHRATE = 0x00040000; -const uint32_t DDSD_LINEARSIZE = 0x00080000; - -const uint32_t DDSD_TEXTURESTAGE = 0x00100000; -const uint32_t DDSD_FVF = 0x00200000; -const uint32_t DDSD_SRCVBHANDLE = 0x00400000; -const uint32_t DDSD_DEPTH = 0x00800000; - -const uint32_t DDSD_ALL = 0x00fff9ee; - -const uint32_t DDPF_ALPHAPIXELS = 0x00000001; -const uint32_t DDPF_ALPHA = 0x00000002; -const uint32_t DDPF_FOURCC = 0x00000004; -const uint32_t DDPF_PALETTEINDEXED8 = 0x00000020; -const uint32_t DDPF_RGB = 0x00000040; -const uint32_t DDPF_LUMINANCE = 0x00020000; - -const uint32_t DDSCAPS_COMPLEX = 0x00000008; -const uint32_t DDSCAPS_TEXTURE = 0x00001000; -const uint32_t DDSCAPS_MIPMAP = 0x00400000; - -const uint32_t DDSCAPS2_CUBEMAP = 0x00000200; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEX = 0x00000400; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEX = 0x00000800; - -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEY = 0x00001000; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEY = 0x00002000; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEZ = 0x00004000; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x00008000; - -const uint32_t DDSCAPS2_VOLUME = 0x00200000; - -typedef enum DXGI_FORMAT -{ - DXGI_FORMAT_UNKNOWN = 0, - DXGI_FORMAT_R32G32B32A32_TYPELESS = 1, - DXGI_FORMAT_R32G32B32A32_FLOAT = 2, - DXGI_FORMAT_R32G32B32A32_UINT = 3, - DXGI_FORMAT_R32G32B32A32_SINT = 4, - DXGI_FORMAT_R32G32B32_TYPELESS = 5, - DXGI_FORMAT_R32G32B32_FLOAT = 6, - DXGI_FORMAT_R32G32B32_UINT = 7, - DXGI_FORMAT_R32G32B32_SINT = 8, - DXGI_FORMAT_R16G16B16A16_TYPELESS = 9, - DXGI_FORMAT_R16G16B16A16_FLOAT = 10, - DXGI_FORMAT_R16G16B16A16_UNORM = 11, - DXGI_FORMAT_R16G16B16A16_UINT = 12, - DXGI_FORMAT_R16G16B16A16_SNORM = 13, - DXGI_FORMAT_R16G16B16A16_SINT = 14, - DXGI_FORMAT_R32G32_TYPELESS = 15, - DXGI_FORMAT_R32G32_FLOAT = 16, - DXGI_FORMAT_R32G32_UINT = 17, - DXGI_FORMAT_R32G32_SINT = 18, - DXGI_FORMAT_R32G8X24_TYPELESS = 19, - DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 20, - DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS = 21, - DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22, - DXGI_FORMAT_R10G10B10A2_TYPELESS = 23, - DXGI_FORMAT_R10G10B10A2_UNORM = 24, - DXGI_FORMAT_R10G10B10A2_UINT = 25, - DXGI_FORMAT_R11G11B10_FLOAT = 26, - DXGI_FORMAT_R8G8B8A8_TYPELESS = 27, - DXGI_FORMAT_R8G8B8A8_UNORM = 28, - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29, - DXGI_FORMAT_R8G8B8A8_UINT = 30, - DXGI_FORMAT_R8G8B8A8_SNORM = 31, - DXGI_FORMAT_R8G8B8A8_SINT = 32, - DXGI_FORMAT_R16G16_TYPELESS = 33, - DXGI_FORMAT_R16G16_FLOAT = 34, - DXGI_FORMAT_R16G16_UNORM = 35, - DXGI_FORMAT_R16G16_UINT = 36, - DXGI_FORMAT_R16G16_SNORM = 37, - DXGI_FORMAT_R16G16_SINT = 38, - DXGI_FORMAT_R32_TYPELESS = 39, - DXGI_FORMAT_D32_FLOAT = 40, - DXGI_FORMAT_R32_FLOAT = 41, - DXGI_FORMAT_R32_UINT = 42, - DXGI_FORMAT_R32_SINT = 43, - DXGI_FORMAT_R24G8_TYPELESS = 44, - DXGI_FORMAT_D24_UNORM_S8_UINT = 45, - DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 46, - DXGI_FORMAT_X24_TYPELESS_G8_UINT = 47, - DXGI_FORMAT_R8G8_TYPELESS = 48, - DXGI_FORMAT_R8G8_UNORM = 49, - DXGI_FORMAT_R8G8_UINT = 50, - DXGI_FORMAT_R8G8_SNORM = 51, - DXGI_FORMAT_R8G8_SINT = 52, - DXGI_FORMAT_R16_TYPELESS = 53, - DXGI_FORMAT_R16_FLOAT = 54, - DXGI_FORMAT_D16_UNORM = 55, - DXGI_FORMAT_R16_UNORM = 56, - DXGI_FORMAT_R16_UINT = 57, - DXGI_FORMAT_R16_SNORM = 58, - DXGI_FORMAT_R16_SINT = 59, - DXGI_FORMAT_R8_TYPELESS = 60, - DXGI_FORMAT_R8_UNORM = 61, - DXGI_FORMAT_R8_UINT = 62, - DXGI_FORMAT_R8_SNORM = 63, - DXGI_FORMAT_R8_SINT = 64, - DXGI_FORMAT_A8_UNORM = 65, - DXGI_FORMAT_R1_UNORM = 66, - DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67, - DXGI_FORMAT_R8G8_B8G8_UNORM = 68, - DXGI_FORMAT_G8R8_G8B8_UNORM = 69, - DXGI_FORMAT_BC1_TYPELESS = 70, - DXGI_FORMAT_BC1_UNORM = 71, - DXGI_FORMAT_BC1_UNORM_SRGB = 72, - DXGI_FORMAT_BC2_TYPELESS = 73, - DXGI_FORMAT_BC2_UNORM = 74, - DXGI_FORMAT_BC2_UNORM_SRGB = 75, - DXGI_FORMAT_BC3_TYPELESS = 76, - DXGI_FORMAT_BC3_UNORM = 77, - DXGI_FORMAT_BC3_UNORM_SRGB = 78, - DXGI_FORMAT_BC4_TYPELESS = 79, - DXGI_FORMAT_BC4_UNORM = 80, - DXGI_FORMAT_BC4_SNORM = 81, - DXGI_FORMAT_BC5_TYPELESS = 82, - DXGI_FORMAT_BC5_UNORM = 83, - DXGI_FORMAT_BC5_SNORM = 84, - DXGI_FORMAT_B5G6R5_UNORM = 85, - DXGI_FORMAT_B5G5R5A1_UNORM = 86, - DXGI_FORMAT_B8G8R8A8_UNORM = 87, - DXGI_FORMAT_B8G8R8X8_UNORM = 88, - DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89, - DXGI_FORMAT_B8G8R8A8_TYPELESS = 90, - DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91, - DXGI_FORMAT_B8G8R8X8_TYPELESS = 92, - DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93, - DXGI_FORMAT_BC6H_TYPELESS = 94, - DXGI_FORMAT_BC6H_UF16 = 95, - DXGI_FORMAT_BC6H_SF16 = 96, - DXGI_FORMAT_BC7_TYPELESS = 97, - DXGI_FORMAT_BC7_UNORM = 98, - DXGI_FORMAT_BC7_UNORM_SRGB = 99, - DXGI_FORMAT_AYUV = 100, - DXGI_FORMAT_Y410 = 101, - DXGI_FORMAT_Y416 = 102, - DXGI_FORMAT_NV12 = 103, - DXGI_FORMAT_P010 = 104, - DXGI_FORMAT_P016 = 105, - DXGI_FORMAT_420_OPAQUE = 106, - DXGI_FORMAT_YUY2 = 107, - DXGI_FORMAT_Y210 = 108, - DXGI_FORMAT_Y216 = 109, - DXGI_FORMAT_NV11 = 110, - DXGI_FORMAT_AI44 = 111, - DXGI_FORMAT_IA44 = 112, - DXGI_FORMAT_P8 = 113, - DXGI_FORMAT_A8P8 = 114, - DXGI_FORMAT_B4G4R4A4_UNORM = 115, - DXGI_FORMAT_P208 = 130, - DXGI_FORMAT_V208 = 131, - DXGI_FORMAT_V408 = 132, - DXGI_FORMAT_FORCE_UINT = 0xffffffff -} DXGI_FORMAT; - -enum D3D10_RESOURCE_DIMENSION -{ - D3D10_RESOURCE_DIMENSION_UNKNOWN = 0, - D3D10_RESOURCE_DIMENSION_BUFFER = 1, - D3D10_RESOURCE_DIMENSION_TEXTURE1D = 2, - D3D10_RESOURCE_DIMENSION_TEXTURE2D = 3, - D3D10_RESOURCE_DIMENSION_TEXTURE3D = 4 -}; - -struct DDS_HEADER_DXT10 -{ - DXGI_FORMAT dxgiFormat; - D3D10_RESOURCE_DIMENSION resourceDimension; - uint32_t miscFlag; - uint32_t arraySize; - uint32_t miscFlags2; -}; - diff --git a/external/bc7enc_rdo/ert.cpp b/external/bc7enc_rdo/ert.cpp index 4a37f953d1..7b5e61cf1e 100644 --- a/external/bc7enc_rdo/ert.cpp +++ b/external/bc7enc_rdo/ert.cpp @@ -2,7 +2,6 @@ #include #include #include -#include "utils.h" #define ERT_FAVOR_CONT_AND_REP0_MATCHES (1) #define ERT_FAVOR_REP0_MATCHES (0) @@ -701,4 +700,4 @@ namespace ert return true; } -} // namespace ert \ No newline at end of file +} // namespace ert diff --git a/external/bc7enc_rdo/ert.h b/external/bc7enc_rdo/ert.h index d387f52778..fc6b47e70d 100644 --- a/external/bc7enc_rdo/ert.h +++ b/external/bc7enc_rdo/ert.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include diff --git a/external/bc7enc_rdo/lodepng.cpp b/external/bc7enc_rdo/lodepng.cpp deleted file mode 100644 index bfb9ab3ead..0000000000 --- a/external/bc7enc_rdo/lodepng.cpp +++ /dev/null @@ -1,6235 +0,0 @@ -/* -LodePNG version 20161127 - -Copyright (c) 2005-2016 Lode Vandevenne - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ - -/* -The manual and changelog are in the header file "lodepng.h" -Rename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for C. -*/ - -#include "lodepng.h" - -#include -#include -#include - -#if defined(_MSC_VER) && (_MSC_VER >= 1310) /*Visual Studio: A few warning types are not desired here.*/ -#pragma warning( disable : 4244 ) /*implicit conversions: not warned by gcc -Wall -Wextra and requires too much casts*/ -#pragma warning( disable : 4996 ) /*VS does not like fopen, but fopen_s is not standard C so unusable here*/ -#endif /*_MSC_VER */ - -const char* LODEPNG_VERSION_STRING = "20161127"; - -/* -This source file is built up in the following large parts. The code sections -with the "LODEPNG_COMPILE_" #defines divide this up further in an intermixed way. --Tools for C and common code for PNG and Zlib --C Code for Zlib (huffman, deflate, ...) --C Code for PNG (file format chunks, adam7, PNG filters, color conversions, ...) --The C++ wrapper around all of the above -*/ - -/*The malloc, realloc and free functions defined here with "lodepng_" in front -of the name, so that you can easily change them to others related to your -platform if needed. Everything else in the code calls these. Pass --DLODEPNG_NO_COMPILE_ALLOCATORS to the compiler, or comment out -#define LODEPNG_COMPILE_ALLOCATORS in the header, to disable the ones here and -define them in your own project's source files without needing to change -lodepng source code. Don't forget to remove "static" if you copypaste them -from here.*/ - -// rg: Disabling auto conversion to palettized -#define LODEPNG_DEFAULT_AUTO_CONVERT (0) - -#ifdef LODEPNG_COMPILE_ALLOCATORS -static void* lodepng_malloc(size_t size) -{ - return malloc(size); -} - -static void* lodepng_realloc(void* ptr, size_t new_size) -{ - return realloc(ptr, new_size); -} - -static void lodepng_free(void* ptr) -{ - free(ptr); -} -#else /*LODEPNG_COMPILE_ALLOCATORS*/ -void* lodepng_malloc(size_t size); -void* lodepng_realloc(void* ptr, size_t new_size); -void lodepng_free(void* ptr); -#endif /*LODEPNG_COMPILE_ALLOCATORS*/ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* // Tools for C, and common code for PNG and Zlib. // */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ - -/* -Often in case of an error a value is assigned to a variable and then it breaks -out of a loop (to go to the cleanup phase of a function). This macro does that. -It makes the error handling code shorter and more readable. - -Example: if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83); -*/ -#define CERROR_BREAK(errorvar, code)\ -{\ - errorvar = code;\ - break;\ -} - -/*version of CERROR_BREAK that assumes the common case where the error variable is named "error"*/ -#define ERROR_BREAK(code) CERROR_BREAK(error, code) - -/*Set error var to the error code, and return it.*/ -#define CERROR_RETURN_ERROR(errorvar, code)\ -{\ - errorvar = code;\ - return code;\ -} - -/*Try the code, if it returns error, also return the error.*/ -#define CERROR_TRY_RETURN(call)\ -{\ - unsigned error = call;\ - if(error) return error;\ -} - -/*Set error var to the error code, and return from the void function.*/ -#define CERROR_RETURN(errorvar, code)\ -{\ - errorvar = code;\ - return;\ -} - -/* -About uivector, ucvector and string: --All of them wrap dynamic arrays or text strings in a similar way. --LodePNG was originally written in C++. The vectors replace the std::vectors that were used in the C++ version. --The string tools are made to avoid problems with compilers that declare things like strncat as deprecated. --They're not used in the interface, only internally in this file as static functions. --As with many other structs in this file, the init and cleanup functions serve as ctor and dtor. -*/ - -#ifdef LODEPNG_COMPILE_ZLIB -/*dynamic vector of unsigned ints*/ -typedef struct uivector -{ - unsigned* data; - size_t size; /*size in number of unsigned longs*/ - size_t allocsize; /*allocated size in bytes*/ -} uivector; - -static void uivector_cleanup(void* p) -{ - ((uivector*)p)->size = ((uivector*)p)->allocsize = 0; - lodepng_free(((uivector*)p)->data); - ((uivector*)p)->data = NULL; -} - -/*returns 1 if success, 0 if failure ==> nothing done*/ -static unsigned uivector_reserve(uivector* p, size_t allocsize) -{ - if (allocsize > p->allocsize) - { - size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2); - void* data = lodepng_realloc(p->data, newsize); - if (data) - { - p->allocsize = newsize; - p->data = (unsigned*)data; - } - else return 0; /*error: not enough memory*/ - } - return 1; -} - -/*returns 1 if success, 0 if failure ==> nothing done*/ -static unsigned uivector_resize(uivector* p, size_t size) -{ - if (!uivector_reserve(p, size * sizeof(unsigned))) return 0; - p->size = size; - return 1; /*success*/ -} - -/*resize and give all new elements the value*/ -static unsigned uivector_resizev(uivector* p, size_t size, unsigned value) -{ - size_t oldsize = p->size, i; - if (!uivector_resize(p, size)) return 0; - for (i = oldsize; i < size; ++i) p->data[i] = value; - return 1; -} - -static void uivector_init(uivector* p) -{ - p->data = NULL; - p->size = p->allocsize = 0; -} - -#ifdef LODEPNG_COMPILE_ENCODER -/*returns 1 if success, 0 if failure ==> nothing done*/ -static unsigned uivector_push_back(uivector* p, unsigned c) -{ - if (!uivector_resize(p, p->size + 1)) return 0; - p->data[p->size - 1] = c; - return 1; -} -#endif /*LODEPNG_COMPILE_ENCODER*/ -#endif /*LODEPNG_COMPILE_ZLIB*/ - -/* /////////////////////////////////////////////////////////////////////////// */ - -/*dynamic vector of unsigned chars*/ -typedef struct ucvector -{ - unsigned char* data; - size_t size; /*used size*/ - size_t allocsize; /*allocated size*/ -} ucvector; - -/*returns 1 if success, 0 if failure ==> nothing done*/ -static unsigned ucvector_reserve(ucvector* p, size_t allocsize) -{ - if (allocsize > p->allocsize) - { - size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2); - void* data = lodepng_realloc(p->data, newsize); - if (data) - { - p->allocsize = newsize; - p->data = (unsigned char*)data; - } - else return 0; /*error: not enough memory*/ - } - return 1; -} - -/*returns 1 if success, 0 if failure ==> nothing done*/ -static unsigned ucvector_resize(ucvector* p, size_t size) -{ - if (!ucvector_reserve(p, size * sizeof(unsigned char))) return 0; - p->size = size; - return 1; /*success*/ -} - -#ifdef LODEPNG_COMPILE_PNG - -static void ucvector_cleanup(void* p) -{ - ((ucvector*)p)->size = ((ucvector*)p)->allocsize = 0; - lodepng_free(((ucvector*)p)->data); - ((ucvector*)p)->data = NULL; -} - -static void ucvector_init(ucvector* p) -{ - p->data = NULL; - p->size = p->allocsize = 0; -} -#endif /*LODEPNG_COMPILE_PNG*/ - -#ifdef LODEPNG_COMPILE_ZLIB -/*you can both convert from vector to buffer&size and vica versa. If you use -init_buffer to take over a buffer and size, it is not needed to use cleanup*/ -static void ucvector_init_buffer(ucvector* p, unsigned char* buffer, size_t size) -{ - p->data = buffer; - p->allocsize = p->size = size; -} -#endif /*LODEPNG_COMPILE_ZLIB*/ - -#if (defined(LODEPNG_COMPILE_PNG) && defined(LODEPNG_COMPILE_ANCILLARY_CHUNKS)) || defined(LODEPNG_COMPILE_ENCODER) -/*returns 1 if success, 0 if failure ==> nothing done*/ -static unsigned ucvector_push_back(ucvector* p, unsigned char c) -{ - if (!ucvector_resize(p, p->size + 1)) return 0; - p->data[p->size - 1] = c; - return 1; -} -#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/ - - -/* ////////////////////////////////////////////////////////////////////////// */ - -#ifdef LODEPNG_COMPILE_PNG -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS -/*returns 1 if success, 0 if failure ==> nothing done*/ -static unsigned string_resize(char** out, size_t size) -{ - char* data = (char*)lodepng_realloc(*out, size + 1); - if (data) - { - data[size] = 0; /*null termination char*/ - *out = data; - } - return data != 0; -} - -/*init a {char*, size_t} pair for use as string*/ -static void string_init(char** out) -{ - *out = NULL; - string_resize(out, 0); -} - -/*free the above pair again*/ -static void string_cleanup(char** out) -{ - lodepng_free(*out); - *out = NULL; -} - -static void string_set(char** out, const char* in) -{ - size_t insize = strlen(in), i; - if (string_resize(out, insize)) - { - for (i = 0; i != insize; ++i) - { - (*out)[i] = in[i]; - } - } -} -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ -#endif /*LODEPNG_COMPILE_PNG*/ - -/* ////////////////////////////////////////////////////////////////////////// */ - -unsigned lodepng_read32bitInt(const unsigned char* buffer) -{ - return (unsigned)((buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]); -} - -#if defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER) -/*buffer must have at least 4 allocated bytes available*/ -static void lodepng_set32bitInt(unsigned char* buffer, unsigned value) -{ - buffer[0] = (unsigned char)((value >> 24) & 0xff); - buffer[1] = (unsigned char)((value >> 16) & 0xff); - buffer[2] = (unsigned char)((value >> 8) & 0xff); - buffer[3] = (unsigned char)((value) & 0xff); -} -#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/ - -#ifdef LODEPNG_COMPILE_ENCODER -static void lodepng_add32bitInt(ucvector* buffer, unsigned value) -{ - ucvector_resize(buffer, buffer->size + 4); /*todo: give error if resize failed*/ - lodepng_set32bitInt(&buffer->data[buffer->size - 4], value); -} -#endif /*LODEPNG_COMPILE_ENCODER*/ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / File IO / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -#ifdef LODEPNG_COMPILE_DISK - -/* returns negative value on error. This should be pure C compatible, so no fstat. */ -static long lodepng_filesize(const char* filename) -{ - FILE* file; - long size; - file = fopen(filename, "rb"); - if (!file) return -1; - - if (fseek(file, 0, SEEK_END) != 0) - { - fclose(file); - return -1; - } - - size = ftell(file); - /* It may give LONG_MAX as directory size, this is invalid for us. */ - if (size == LONG_MAX) size = -1; - - fclose(file); - return size; -} - -/* load file into buffer that already has the correct allocated size. Returns error code.*/ -static unsigned lodepng_buffer_file(unsigned char* out, size_t size, const char* filename) -{ - FILE* file; - size_t readsize; - file = fopen(filename, "rb"); - if (!file) return 78; - - readsize = fread(out, 1, size, file); - fclose(file); - - if (readsize != size) return 78; - return 0; -} - -unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename) -{ - long size = lodepng_filesize(filename); - if (size < 0) return 78; - *outsize = (size_t)size; - - *out = (unsigned char*)lodepng_malloc((size_t)size); - if (!(*out) && size > 0) return 83; /*the above malloc failed*/ - - return lodepng_buffer_file(*out, (size_t)size, filename); -} - -/*write given buffer to the file, overwriting the file, it doesn't append to it.*/ -unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename) -{ - FILE* file; - file = fopen(filename, "wb"); - if (!file) return 79; - fwrite((char*)buffer, 1, buffersize, file); - fclose(file); - return 0; -} - -#endif /*LODEPNG_COMPILE_DISK*/ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* // End of common code and tools. Begin of Zlib related code. // */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ - -#ifdef LODEPNG_COMPILE_ZLIB -#ifdef LODEPNG_COMPILE_ENCODER -/*TODO: this ignores potential out of memory errors*/ -#define addBitToStream(/*size_t**/ bitpointer, /*ucvector**/ bitstream, /*unsigned char*/ bit)\ -{\ - /*add a new byte at the end*/\ - if(((*bitpointer) & 7) == 0) ucvector_push_back(bitstream, (unsigned char)0);\ - /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/\ - (bitstream->data[bitstream->size - 1]) |= (bit << ((*bitpointer) & 0x7));\ - ++(*bitpointer);\ -} - -static void addBitsToStream(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) -{ - size_t i; - for (i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> i) & 1)); -} - -static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) -{ - size_t i; - for (i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> (nbits - 1 - i)) & 1)); -} -#endif /*LODEPNG_COMPILE_ENCODER*/ - -#ifdef LODEPNG_COMPILE_DECODER - -#define READBIT(bitpointer, bitstream) ((bitstream[bitpointer >> 3] >> (bitpointer & 0x7)) & (unsigned char)1) - -static unsigned char readBitFromStream(size_t* bitpointer, const unsigned char* bitstream) -{ - unsigned char result = (unsigned char)(READBIT(*bitpointer, bitstream)); - ++(*bitpointer); - return result; -} - -static unsigned readBitsFromStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) -{ - unsigned result = 0, i; - for (i = 0; i != nbits; ++i) - { - result += ((unsigned)READBIT(*bitpointer, bitstream)) << i; - ++(*bitpointer); - } - return result; -} -#endif /*LODEPNG_COMPILE_DECODER*/ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / Deflate - Huffman / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -#define FIRST_LENGTH_CODE_INDEX 257 -#define LAST_LENGTH_CODE_INDEX 285 -/*256 literals, the end code, some length codes, and 2 unused codes*/ -#define NUM_DEFLATE_CODE_SYMBOLS 288 -/*the distance codes have their own symbols, 30 used, 2 unused*/ -#define NUM_DISTANCE_SYMBOLS 32 -/*the code length codes. 0-15: code lengths, 16: copy previous 3-6 times, 17: 3-10 zeros, 18: 11-138 zeros*/ -#define NUM_CODE_LENGTH_CODES 19 - -/*the base lengths represented by codes 257-285*/ -static const unsigned LENGTHBASE[29] -= { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, - 67, 83, 99, 115, 131, 163, 195, 227, 258 }; - -/*the extra bits used by codes 257-285 (added to base length)*/ -static const unsigned LENGTHEXTRA[29] -= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, - 4, 4, 4, 4, 5, 5, 5, 5, 0 }; - -/*the base backwards distances (the bits of distance codes appear after length codes and use their own huffman tree)*/ -static const unsigned DISTANCEBASE[30] -= { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, - 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 }; - -/*the extra bits of backwards distances (added to base)*/ -static const unsigned DISTANCEEXTRA[30] -= { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, - 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }; - -/*the order in which "code length alphabet code lengths" are stored, out of this -the huffman tree of the dynamic huffman tree lengths is generated*/ -static const unsigned CLCL_ORDER[NUM_CODE_LENGTH_CODES] -= { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; - -/* ////////////////////////////////////////////////////////////////////////// */ - -/* -Huffman tree struct, containing multiple representations of the tree -*/ -typedef struct HuffmanTree -{ - unsigned* tree2d; - unsigned* tree1d; - unsigned* lengths; /*the lengths of the codes of the 1d-tree*/ - unsigned maxbitlen; /*maximum number of bits a single code can get*/ - unsigned numcodes; /*number of symbols in the alphabet = number of codes*/ -} HuffmanTree; - -/*function used for debug purposes to draw the tree in ascii art with C++*/ -/* -static void HuffmanTree_draw(HuffmanTree* tree) -{ - std::cout << "tree. length: " << tree->numcodes << " maxbitlen: " << tree->maxbitlen << std::endl; - for(size_t i = 0; i != tree->tree1d.size; ++i) - { - if(tree->lengths.data[i]) - std::cout << i << " " << tree->tree1d.data[i] << " " << tree->lengths.data[i] << std::endl; - } - std::cout << std::endl; -}*/ - -static void HuffmanTree_init(HuffmanTree* tree) -{ - tree->tree2d = 0; - tree->tree1d = 0; - tree->lengths = 0; -} - -static void HuffmanTree_cleanup(HuffmanTree* tree) -{ - lodepng_free(tree->tree2d); - lodepng_free(tree->tree1d); - lodepng_free(tree->lengths); -} - -/*the tree representation used by the decoder. return value is error*/ -static unsigned HuffmanTree_make2DTree(HuffmanTree* tree) -{ - unsigned nodefilled = 0; /*up to which node it is filled*/ - unsigned treepos = 0; /*position in the tree (1 of the numcodes columns)*/ - unsigned n, i; - - tree->tree2d = (unsigned*)lodepng_malloc(tree->numcodes * 2 * sizeof(unsigned)); - if (!tree->tree2d) return 83; /*alloc fail*/ - - /* - convert tree1d[] to tree2d[][]. In the 2D array, a value of 32767 means - uninited, a value >= numcodes is an address to another bit, a value < numcodes - is a code. The 2 rows are the 2 possible bit values (0 or 1), there are as - many columns as codes - 1. - A good huffman tree has N * 2 - 1 nodes, of which N - 1 are internal nodes. - Here, the internal nodes are stored (what their 0 and 1 option point to). - There is only memory for such good tree currently, if there are more nodes - (due to too long length codes), error 55 will happen - */ - for (n = 0; n < tree->numcodes * 2; ++n) - { - tree->tree2d[n] = 32767; /*32767 here means the tree2d isn't filled there yet*/ - } - - for (n = 0; n < tree->numcodes; ++n) /*the codes*/ - { - for (i = 0; i != tree->lengths[n]; ++i) /*the bits for this code*/ - { - unsigned char bit = (unsigned char)((tree->tree1d[n] >> (tree->lengths[n] - i - 1)) & 1); - /*oversubscribed, see comment in lodepng_error_text*/ - if (treepos > 2147483647 || treepos + 2 > tree->numcodes) return 55; - if (tree->tree2d[2 * treepos + bit] == 32767) /*not yet filled in*/ - { - if (i + 1 == tree->lengths[n]) /*last bit*/ - { - tree->tree2d[2 * treepos + bit] = n; /*put the current code in it*/ - treepos = 0; - } - else - { - /*put address of the next step in here, first that address has to be found of course - (it's just nodefilled + 1)...*/ - ++nodefilled; - /*addresses encoded with numcodes added to it*/ - tree->tree2d[2 * treepos + bit] = nodefilled + tree->numcodes; - treepos = nodefilled; - } - } - else treepos = tree->tree2d[2 * treepos + bit] - tree->numcodes; - } - } - - for (n = 0; n < tree->numcodes * 2; ++n) - { - if (tree->tree2d[n] == 32767) tree->tree2d[n] = 0; /*remove possible remaining 32767's*/ - } - - return 0; -} - -/* -Second step for the ...makeFromLengths and ...makeFromFrequencies functions. -numcodes, lengths and maxbitlen must already be filled in correctly. return -value is error. -*/ -static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree) -{ - uivector blcount; - uivector nextcode; - unsigned error = 0; - unsigned bits, n; - - uivector_init(&blcount); - uivector_init(&nextcode); - - tree->tree1d = (unsigned*)lodepng_malloc(tree->numcodes * sizeof(unsigned)); - if (!tree->tree1d) error = 83; /*alloc fail*/ - - if (!uivector_resizev(&blcount, tree->maxbitlen + 1, 0) - || !uivector_resizev(&nextcode, tree->maxbitlen + 1, 0)) - error = 83; /*alloc fail*/ - - if (!error) - { - /*step 1: count number of instances of each code length*/ - for (bits = 0; bits != tree->numcodes; ++bits) ++blcount.data[tree->lengths[bits]]; - /*step 2: generate the nextcode values*/ - for (bits = 1; bits <= tree->maxbitlen; ++bits) - { - nextcode.data[bits] = (nextcode.data[bits - 1] + blcount.data[bits - 1]) << 1; - } - /*step 3: generate all the codes*/ - for (n = 0; n != tree->numcodes; ++n) - { - if (tree->lengths[n] != 0) tree->tree1d[n] = nextcode.data[tree->lengths[n]]++; - } - } - - uivector_cleanup(&blcount); - uivector_cleanup(&nextcode); - - if (!error) return HuffmanTree_make2DTree(tree); - else return error; -} - -/* -given the code lengths (as stored in the PNG file), generate the tree as defined -by Deflate. maxbitlen is the maximum bits that a code in the tree can have. -return value is error. -*/ -static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const unsigned* bitlen, - size_t numcodes, unsigned maxbitlen) -{ - unsigned i; - tree->lengths = (unsigned*)lodepng_malloc(numcodes * sizeof(unsigned)); - if (!tree->lengths) return 83; /*alloc fail*/ - for (i = 0; i != numcodes; ++i) tree->lengths[i] = bitlen[i]; - tree->numcodes = (unsigned)numcodes; /*number of symbols*/ - tree->maxbitlen = maxbitlen; - return HuffmanTree_makeFromLengths2(tree); -} - -#ifdef LODEPNG_COMPILE_ENCODER - -/*BPM: Boundary Package Merge, see "A Fast and Space-Economical Algorithm for Length-Limited Coding", -Jyrki Katajainen, Alistair Moffat, Andrew Turpin, 1995.*/ - -/*chain node for boundary package merge*/ -typedef struct BPMNode -{ - int weight; /*the sum of all weights in this chain*/ - unsigned index; /*index of this leaf node (called "count" in the paper)*/ - struct BPMNode* tail; /*the next nodes in this chain (null if last)*/ - int in_use; -} BPMNode; - -/*lists of chains*/ -typedef struct BPMLists -{ - /*memory pool*/ - unsigned memsize; - BPMNode* memory; - unsigned numfree; - unsigned nextfree; - BPMNode** freelist; - /*two heads of lookahead chains per list*/ - unsigned listsize; - BPMNode** chains0; - BPMNode** chains1; -} BPMLists; - -/*creates a new chain node with the given parameters, from the memory in the lists */ -static BPMNode* bpmnode_create(BPMLists* lists, int weight, unsigned index, BPMNode* tail) -{ - unsigned i; - BPMNode* result; - - /*memory full, so garbage collect*/ - if (lists->nextfree >= lists->numfree) - { - /*mark only those that are in use*/ - for (i = 0; i != lists->memsize; ++i) lists->memory[i].in_use = 0; - for (i = 0; i != lists->listsize; ++i) - { - BPMNode* node; - for (node = lists->chains0[i]; node != 0; node = node->tail) node->in_use = 1; - for (node = lists->chains1[i]; node != 0; node = node->tail) node->in_use = 1; - } - /*collect those that are free*/ - lists->numfree = 0; - for (i = 0; i != lists->memsize; ++i) - { - if (!lists->memory[i].in_use) lists->freelist[lists->numfree++] = &lists->memory[i]; - } - lists->nextfree = 0; - } - - result = lists->freelist[lists->nextfree++]; - result->weight = weight; - result->index = index; - result->tail = tail; - return result; -} - -/*sort the leaves with stable mergesort*/ -static void bpmnode_sort(BPMNode* leaves, size_t num) -{ - BPMNode* mem = (BPMNode*)lodepng_malloc(sizeof(*leaves) * num); - size_t width, counter = 0; - for (width = 1; width < num; width *= 2) - { - BPMNode* a = (counter & 1) ? mem : leaves; - BPMNode* b = (counter & 1) ? leaves : mem; - size_t p; - for (p = 0; p < num; p += 2 * width) - { - size_t q = (p + width > num) ? num : (p + width); - size_t r = (p + 2 * width > num) ? num : (p + 2 * width); - size_t i = p, j = q, k; - for (k = p; k < r; k++) - { - if (i < q && (j >= r || a[i].weight <= a[j].weight)) b[k] = a[i++]; - else b[k] = a[j++]; - } - } - counter++; - } - if (counter & 1) memcpy(leaves, mem, sizeof(*leaves) * num); - lodepng_free(mem); -} - -/*Boundary Package Merge step, numpresent is the amount of leaves, and c is the current chain.*/ -static void boundaryPM(BPMLists* lists, BPMNode* leaves, size_t numpresent, int c, int num) -{ - unsigned lastindex = lists->chains1[c]->index; - - if (c == 0) - { - if (lastindex >= numpresent) return; - lists->chains0[c] = lists->chains1[c]; - lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, 0); - } - else - { - /*sum of the weights of the head nodes of the previous lookahead chains.*/ - int sum = lists->chains0[c - 1]->weight + lists->chains1[c - 1]->weight; - lists->chains0[c] = lists->chains1[c]; - if (lastindex < numpresent && sum > leaves[lastindex].weight) - { - lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, lists->chains1[c]->tail); - return; - } - lists->chains1[c] = bpmnode_create(lists, sum, lastindex, lists->chains1[c - 1]); - /*in the end we are only interested in the chain of the last list, so no - need to recurse if we're at the last one (this gives measurable speedup)*/ - if (num + 1 < (int)(2 * numpresent - 2)) - { - boundaryPM(lists, leaves, numpresent, c - 1, num); - boundaryPM(lists, leaves, numpresent, c - 1, num); - } - } -} - -unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies, - size_t numcodes, unsigned maxbitlen) -{ - unsigned error = 0; - unsigned i; - size_t numpresent = 0; /*number of symbols with non-zero frequency*/ - BPMNode* leaves; /*the symbols, only those with > 0 frequency*/ - - if (numcodes == 0) return 80; /*error: a tree of 0 symbols is not supposed to be made*/ - if ((1ull << maxbitlen) < numcodes) return 80; /*error: represent all symbols*/ - - leaves = (BPMNode*)lodepng_malloc(numcodes * sizeof(*leaves)); - if (!leaves) return 83; /*alloc fail*/ - - for (i = 0; i != numcodes; ++i) - { - if (frequencies[i] > 0) - { - leaves[numpresent].weight = (int)frequencies[i]; - leaves[numpresent].index = i; - ++numpresent; - } - } - - for (i = 0; i != numcodes; ++i) lengths[i] = 0; - - /*ensure at least two present symbols. There should be at least one symbol - according to RFC 1951 section 3.2.7. Some decoders incorrectly require two. To - make these work as well ensure there are at least two symbols. The - Package-Merge code below also doesn't work correctly if there's only one - symbol, it'd give it the theoritical 0 bits but in practice zlib wants 1 bit*/ - if (numpresent == 0) - { - lengths[0] = lengths[1] = 1; /*note that for RFC 1951 section 3.2.7, only lengths[0] = 1 is needed*/ - } - else if (numpresent == 1) - { - lengths[leaves[0].index] = 1; - lengths[leaves[0].index == 0 ? 1 : 0] = 1; - } - else - { - BPMLists lists; - BPMNode* node; - - bpmnode_sort(leaves, numpresent); - - lists.listsize = maxbitlen; - lists.memsize = 2 * maxbitlen * (maxbitlen + 1); - lists.nextfree = 0; - lists.numfree = lists.memsize; - lists.memory = (BPMNode*)lodepng_malloc(lists.memsize * sizeof(*lists.memory)); - lists.freelist = (BPMNode**)lodepng_malloc(lists.memsize * sizeof(BPMNode*)); - lists.chains0 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*)); - lists.chains1 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*)); - if (!lists.memory || !lists.freelist || !lists.chains0 || !lists.chains1) error = 83; /*alloc fail*/ - - if (!error) - { - for (i = 0; i != lists.memsize; ++i) lists.freelist[i] = &lists.memory[i]; - - bpmnode_create(&lists, leaves[0].weight, 1, 0); - bpmnode_create(&lists, leaves[1].weight, 2, 0); - - for (i = 0; i != lists.listsize; ++i) - { - lists.chains0[i] = &lists.memory[0]; - lists.chains1[i] = &lists.memory[1]; - } - - /*each boundaryPM call adds one chain to the last list, and we need 2 * numpresent - 2 chains.*/ - for (i = 2; i != 2 * numpresent - 2; ++i) boundaryPM(&lists, leaves, numpresent, (int)maxbitlen - 1, (int)i); - - for (node = lists.chains1[maxbitlen - 1]; node; node = node->tail) - { - for (i = 0; i != node->index; ++i) ++lengths[leaves[i].index]; - } - } - - lodepng_free(lists.memory); - lodepng_free(lists.freelist); - lodepng_free(lists.chains0); - lodepng_free(lists.chains1); - } - - lodepng_free(leaves); - return error; -} - -/*Create the Huffman tree given the symbol frequencies*/ -static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies, - size_t mincodes, size_t numcodes, unsigned maxbitlen) -{ - unsigned error = 0; - while (!frequencies[numcodes - 1] && numcodes > mincodes) --numcodes; /*trim zeroes*/ - tree->maxbitlen = maxbitlen; - tree->numcodes = (unsigned)numcodes; /*number of symbols*/ - tree->lengths = (unsigned*)lodepng_realloc(tree->lengths, numcodes * sizeof(unsigned)); - if (!tree->lengths) return 83; /*alloc fail*/ - /*initialize all lengths to 0*/ - memset(tree->lengths, 0, numcodes * sizeof(unsigned)); - - error = lodepng_huffman_code_lengths(tree->lengths, frequencies, numcodes, maxbitlen); - if (!error) error = HuffmanTree_makeFromLengths2(tree); - return error; -} - -static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned index) -{ - return tree->tree1d[index]; -} - -static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned index) -{ - return tree->lengths[index]; -} -#endif /*LODEPNG_COMPILE_ENCODER*/ - -/*get the literal and length code tree of a deflated block with fixed tree, as per the deflate specification*/ -static unsigned generateFixedLitLenTree(HuffmanTree* tree) -{ - unsigned i, error = 0; - unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned)); - if (!bitlen) return 83; /*alloc fail*/ - - /*288 possible codes: 0-255=literals, 256=endcode, 257-285=lengthcodes, 286-287=unused*/ - for (i = 0; i <= 143; ++i) bitlen[i] = 8; - for (i = 144; i <= 255; ++i) bitlen[i] = 9; - for (i = 256; i <= 279; ++i) bitlen[i] = 7; - for (i = 280; i <= 287; ++i) bitlen[i] = 8; - - error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DEFLATE_CODE_SYMBOLS, 15); - - lodepng_free(bitlen); - return error; -} - -/*get the distance code tree of a deflated block with fixed tree, as specified in the deflate specification*/ -static unsigned generateFixedDistanceTree(HuffmanTree* tree) -{ - unsigned i, error = 0; - unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned)); - if (!bitlen) return 83; /*alloc fail*/ - - /*there are 32 distance codes, but 30-31 are unused*/ - for (i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen[i] = 5; - error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DISTANCE_SYMBOLS, 15); - - lodepng_free(bitlen); - return error; -} - -#ifdef LODEPNG_COMPILE_DECODER - -/* -returns the code, or (unsigned)(-1) if error happened -inbitlength is the length of the complete buffer, in bits (so its byte length times 8) -*/ -static unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp, - const HuffmanTree* codetree, size_t inbitlength) -{ - unsigned treepos = 0, ct; - for (;;) - { - if (*bp >= inbitlength) return (unsigned)(-1); /*error: end of input memory reached without endcode*/ - /* - decode the symbol from the tree. The "readBitFromStream" code is inlined in - the expression below because this is the biggest bottleneck while decoding - */ - ct = codetree->tree2d[(treepos << 1) + READBIT(*bp, in)]; - ++(*bp); - if (ct < codetree->numcodes) return ct; /*the symbol is decoded, return it*/ - else treepos = ct - codetree->numcodes; /*symbol not yet decoded, instead move tree position*/ - - if (treepos >= codetree->numcodes) return (unsigned)(-1); /*error: it appeared outside the codetree*/ - } -} -#endif /*LODEPNG_COMPILE_DECODER*/ - -#ifdef LODEPNG_COMPILE_DECODER - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / Inflator (Decompressor) / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -/*get the tree of a deflated block with fixed tree, as specified in the deflate specification*/ -static void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d) -{ - /*TODO: check for out of memory errors*/ - generateFixedLitLenTree(tree_ll); - generateFixedDistanceTree(tree_d); -} - -/*get the tree of a deflated block with dynamic tree, the tree itself is also Huffman compressed with a known tree*/ -static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree* tree_d, - const unsigned char* in, size_t* bp, size_t inlength) -{ - /*make sure that length values that aren't filled in will be 0, or a wrong tree will be generated*/ - unsigned error = 0; - unsigned n, HLIT, HDIST, HCLEN, i; - size_t inbitlength = inlength * 8; - - /*see comments in deflateDynamic for explanation of the context and these variables, it is analogous*/ - unsigned* bitlen_ll = 0; /*lit,len code lengths*/ - unsigned* bitlen_d = 0; /*dist code lengths*/ - /*code length code lengths ("clcl"), the bit lengths of the huffman tree used to compress bitlen_ll and bitlen_d*/ - unsigned* bitlen_cl = 0; - HuffmanTree tree_cl; /*the code tree for code length codes (the huffman tree for compressed huffman trees)*/ - - if ((*bp) + 14 > (inlength << 3)) return 49; /*error: the bit pointer is or will go past the memory*/ - - /*number of literal/length codes + 257. Unlike the spec, the value 257 is added to it here already*/ - HLIT = readBitsFromStream(bp, in, 5) + 257; - /*number of distance codes. Unlike the spec, the value 1 is added to it here already*/ - HDIST = readBitsFromStream(bp, in, 5) + 1; - /*number of code length codes. Unlike the spec, the value 4 is added to it here already*/ - HCLEN = readBitsFromStream(bp, in, 4) + 4; - - if ((*bp) + HCLEN * 3 > (inlength << 3)) return 50; /*error: the bit pointer is or will go past the memory*/ - - HuffmanTree_init(&tree_cl); - - while (!error) - { - /*read the code length codes out of 3 * (amount of code length codes) bits*/ - - bitlen_cl = (unsigned*)lodepng_malloc(NUM_CODE_LENGTH_CODES * sizeof(unsigned)); - if (!bitlen_cl) ERROR_BREAK(83 /*alloc fail*/); - - for (i = 0; i != NUM_CODE_LENGTH_CODES; ++i) - { - if (i < HCLEN) bitlen_cl[CLCL_ORDER[i]] = readBitsFromStream(bp, in, 3); - else bitlen_cl[CLCL_ORDER[i]] = 0; /*if not, it must stay 0*/ - } - - error = HuffmanTree_makeFromLengths(&tree_cl, bitlen_cl, NUM_CODE_LENGTH_CODES, 7); - if (error) break; - - /*now we can use this tree to read the lengths for the tree that this function will return*/ - bitlen_ll = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned)); - bitlen_d = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned)); - if (!bitlen_ll || !bitlen_d) ERROR_BREAK(83 /*alloc fail*/); - for (i = 0; i != NUM_DEFLATE_CODE_SYMBOLS; ++i) bitlen_ll[i] = 0; - for (i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen_d[i] = 0; - - /*i is the current symbol we're reading in the part that contains the code lengths of lit/len and dist codes*/ - i = 0; - while (i < HLIT + HDIST) - { - unsigned code = huffmanDecodeSymbol(in, bp, &tree_cl, inbitlength); - if (code <= 15) /*a length code*/ - { - if (i < HLIT) bitlen_ll[i] = code; - else bitlen_d[i - HLIT] = code; - ++i; - } - else if (code == 16) /*repeat previous*/ - { - unsigned replength = 3; /*read in the 2 bits that indicate repeat length (3-6)*/ - unsigned value; /*set value to the previous code*/ - - if (i == 0) ERROR_BREAK(54); /*can't repeat previous if i is 0*/ - - if ((*bp + 2) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ - replength += readBitsFromStream(bp, in, 2); - - if (i < HLIT + 1) value = bitlen_ll[i - 1]; - else value = bitlen_d[i - HLIT - 1]; - /*repeat this value in the next lengths*/ - for (n = 0; n < replength; ++n) - { - if (i >= HLIT + HDIST) ERROR_BREAK(13); /*error: i is larger than the amount of codes*/ - if (i < HLIT) bitlen_ll[i] = value; - else bitlen_d[i - HLIT] = value; - ++i; - } - } - else if (code == 17) /*repeat "0" 3-10 times*/ - { - unsigned replength = 3; /*read in the bits that indicate repeat length*/ - if ((*bp + 3) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ - replength += readBitsFromStream(bp, in, 3); - - /*repeat this value in the next lengths*/ - for (n = 0; n < replength; ++n) - { - if (i >= HLIT + HDIST) ERROR_BREAK(14); /*error: i is larger than the amount of codes*/ - - if (i < HLIT) bitlen_ll[i] = 0; - else bitlen_d[i - HLIT] = 0; - ++i; - } - } - else if (code == 18) /*repeat "0" 11-138 times*/ - { - unsigned replength = 11; /*read in the bits that indicate repeat length*/ - if ((*bp + 7) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ - replength += readBitsFromStream(bp, in, 7); - - /*repeat this value in the next lengths*/ - for (n = 0; n < replength; ++n) - { - if (i >= HLIT + HDIST) ERROR_BREAK(15); /*error: i is larger than the amount of codes*/ - - if (i < HLIT) bitlen_ll[i] = 0; - else bitlen_d[i - HLIT] = 0; - ++i; - } - } - else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ - { - if (code == (unsigned)(-1)) - { - /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol - (10=no endcode, 11=wrong jump outside of tree)*/ - error = (*bp) > inbitlength ? 10 : 11; - } - else error = 16; /*unexisting code, this can never happen*/ - break; - } - } - if (error) break; - - if (bitlen_ll[256] == 0) ERROR_BREAK(64); /*the length of the end code 256 must be larger than 0*/ - - /*now we've finally got HLIT and HDIST, so generate the code trees, and the function is done*/ - error = HuffmanTree_makeFromLengths(tree_ll, bitlen_ll, NUM_DEFLATE_CODE_SYMBOLS, 15); - if (error) break; - error = HuffmanTree_makeFromLengths(tree_d, bitlen_d, NUM_DISTANCE_SYMBOLS, 15); - - break; /*end of error-while*/ - } - - lodepng_free(bitlen_cl); - lodepng_free(bitlen_ll); - lodepng_free(bitlen_d); - HuffmanTree_cleanup(&tree_cl); - - return error; -} - -/*inflate a block with dynamic of fixed Huffman tree*/ -static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in, size_t* bp, - size_t* pos, size_t inlength, unsigned btype) -{ - unsigned error = 0; - HuffmanTree tree_ll; /*the huffman tree for literal and length codes*/ - HuffmanTree tree_d; /*the huffman tree for distance codes*/ - size_t inbitlength = inlength * 8; - - HuffmanTree_init(&tree_ll); - HuffmanTree_init(&tree_d); - - if (btype == 1) getTreeInflateFixed(&tree_ll, &tree_d); - else if (btype == 2) error = getTreeInflateDynamic(&tree_ll, &tree_d, in, bp, inlength); - - while (!error) /*decode all symbols until end reached, breaks at end code*/ - { - /*code_ll is literal, length or end code*/ - unsigned code_ll = huffmanDecodeSymbol(in, bp, &tree_ll, inbitlength); - if (code_ll <= 255) /*literal symbol*/ - { - /*ucvector_push_back would do the same, but for some reason the two lines below run 10% faster*/ - if (!ucvector_resize(out, (*pos) + 1)) ERROR_BREAK(83 /*alloc fail*/); - out->data[*pos] = (unsigned char)code_ll; - ++(*pos); - } - else if (code_ll >= FIRST_LENGTH_CODE_INDEX && code_ll <= LAST_LENGTH_CODE_INDEX) /*length code*/ - { - unsigned code_d, distance; - unsigned numextrabits_l, numextrabits_d; /*extra bits for length and distance*/ - size_t start, forward, backward, length; - - /*part 1: get length base*/ - length = LENGTHBASE[code_ll - FIRST_LENGTH_CODE_INDEX]; - - /*part 2: get extra bits and add the value of that to length*/ - numextrabits_l = LENGTHEXTRA[code_ll - FIRST_LENGTH_CODE_INDEX]; - if ((*bp + numextrabits_l) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/ - length += readBitsFromStream(bp, in, numextrabits_l); - - /*part 3: get distance code*/ - code_d = huffmanDecodeSymbol(in, bp, &tree_d, inbitlength); - if (code_d > 29) - { - if (code_ll == (unsigned)(-1)) /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ - { - /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol - (10=no endcode, 11=wrong jump outside of tree)*/ - error = (*bp) > inlength * 8 ? 10 : 11; - } - else error = 18; /*error: invalid distance code (30-31 are never used)*/ - break; - } - distance = DISTANCEBASE[code_d]; - - /*part 4: get extra bits from distance*/ - numextrabits_d = DISTANCEEXTRA[code_d]; - if ((*bp + numextrabits_d) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/ - distance += readBitsFromStream(bp, in, numextrabits_d); - - /*part 5: fill in all the out[n] values based on the length and dist*/ - start = (*pos); - if (distance > start) ERROR_BREAK(52); /*too long backward distance*/ - backward = start - distance; - - if (!ucvector_resize(out, (*pos) + length)) ERROR_BREAK(83 /*alloc fail*/); - if (distance < length) { - for (forward = 0; forward < length; ++forward) - { - out->data[(*pos)++] = out->data[backward++]; - } - } - else { - memcpy(out->data + *pos, out->data + backward, length); - *pos += length; - } - } - else if (code_ll == 256) - { - break; /*end code, break the loop*/ - } - else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ - { - /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol - (10=no endcode, 11=wrong jump outside of tree)*/ - error = ((*bp) > inlength * 8) ? 10 : 11; - break; - } - } - - HuffmanTree_cleanup(&tree_ll); - HuffmanTree_cleanup(&tree_d); - - return error; -} - -static unsigned inflateNoCompression(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength) -{ - size_t p; - unsigned LEN, NLEN, n, error = 0; - - /*go to first boundary of byte*/ - while (((*bp) & 0x7) != 0) ++(*bp); - p = (*bp) / 8; /*byte position*/ - - /*read LEN (2 bytes) and NLEN (2 bytes)*/ - if (p + 4 >= inlength) return 52; /*error, bit pointer will jump past memory*/ - LEN = in[p] + 256u * in[p + 1]; p += 2; - NLEN = in[p] + 256u * in[p + 1]; p += 2; - - /*check if 16-bit NLEN is really the one's complement of LEN*/ - if (LEN + NLEN != 65535) return 21; /*error: NLEN is not one's complement of LEN*/ - - if (!ucvector_resize(out, (*pos) + LEN)) return 83; /*alloc fail*/ - - /*read the literal data: LEN bytes are now stored in the out buffer*/ - if (p + LEN > inlength) return 23; /*error: reading outside of in buffer*/ - for (n = 0; n < LEN; ++n) out->data[(*pos)++] = in[p++]; - - (*bp) = p * 8; - - return error; -} - -static unsigned lodepng_inflatev(ucvector* out, - const unsigned char* in, size_t insize, - const LodePNGDecompressSettings* settings) -{ - /*bit pointer in the "in" data, current byte is bp >> 3, current bit is bp & 0x7 (from lsb to msb of the byte)*/ - size_t bp = 0; - unsigned BFINAL = 0; - size_t pos = 0; /*byte position in the out buffer*/ - unsigned error = 0; - - (void)settings; - - while (!BFINAL) - { - unsigned BTYPE; - if (bp + 2 >= insize * 8) return 52; /*error, bit pointer will jump past memory*/ - BFINAL = readBitFromStream(&bp, in); - BTYPE = 1u * readBitFromStream(&bp, in); - BTYPE += 2u * readBitFromStream(&bp, in); - - if (BTYPE == 3) return 20; /*error: invalid BTYPE*/ - else if (BTYPE == 0) error = inflateNoCompression(out, in, &bp, &pos, insize); /*no compression*/ - else error = inflateHuffmanBlock(out, in, &bp, &pos, insize, BTYPE); /*compression, BTYPE 01 or 10*/ - - if (error) return error; - } - - return error; -} - -unsigned lodepng_inflate(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGDecompressSettings* settings) -{ - unsigned error; - ucvector v; - ucvector_init_buffer(&v, *out, *outsize); - error = lodepng_inflatev(&v, in, insize, settings); - *out = v.data; - *outsize = v.size; - return error; -} - -static unsigned inflate(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGDecompressSettings* settings) -{ - if (settings->custom_inflate) - { - return settings->custom_inflate(out, outsize, in, insize, settings); - } - else - { - return lodepng_inflate(out, outsize, in, insize, settings); - } -} - -#endif /*LODEPNG_COMPILE_DECODER*/ - -#ifdef LODEPNG_COMPILE_ENCODER - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / Deflator (Compressor) / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -static const size_t MAX_SUPPORTED_DEFLATE_LENGTH = 258; - -/*bitlen is the size in bits of the code*/ -static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned code, unsigned bitlen) -{ - addBitsToStreamReversed(bp, compressed, code, bitlen); -} - -/*search the index in the array, that has the largest value smaller than or equal to the given value, -given array must be sorted (if no value is smaller, it returns the size of the given array)*/ -static size_t searchCodeIndex(const unsigned* array, size_t array_size, size_t value) -{ - /*binary search (only small gain over linear). TODO: use CPU log2 instruction for getting symbols instead*/ - size_t left = 1; - size_t right = array_size - 1; - - while (left <= right) { - size_t mid = (left + right) >> 1; - if (array[mid] >= value) right = mid - 1; - else left = mid + 1; - } - if (left >= array_size || array[left] > value) left--; - return left; -} - -static void addLengthDistance(uivector* values, size_t length, size_t distance) -{ - /*values in encoded vector are those used by deflate: - 0-255: literal bytes - 256: end - 257-285: length/distance pair (length code, followed by extra length bits, distance code, extra distance bits) - 286-287: invalid*/ - - unsigned length_code = (unsigned)searchCodeIndex(LENGTHBASE, 29, length); - unsigned extra_length = (unsigned)(length - LENGTHBASE[length_code]); - unsigned dist_code = (unsigned)searchCodeIndex(DISTANCEBASE, 30, distance); - unsigned extra_distance = (unsigned)(distance - DISTANCEBASE[dist_code]); - - uivector_push_back(values, length_code + FIRST_LENGTH_CODE_INDEX); - uivector_push_back(values, extra_length); - uivector_push_back(values, dist_code); - uivector_push_back(values, extra_distance); -} - -/*3 bytes of data get encoded into two bytes. The hash cannot use more than 3 -bytes as input because 3 is the minimum match length for deflate*/ -static const unsigned HASH_NUM_VALUES = 65536; -static const unsigned HASH_BIT_MASK = 65535; /*HASH_NUM_VALUES - 1, but C90 does not like that as initializer*/ - -typedef struct Hash -{ - int* head; /*hash value to head circular pos - can be outdated if went around window*/ - /*circular pos to prev circular pos*/ - unsigned short* chain; - int* val; /*circular pos to hash value*/ - - /*TODO: do this not only for zeros but for any repeated byte. However for PNG - it's always going to be the zeros that dominate, so not important for PNG*/ - int* headz; /*similar to head, but for chainz*/ - unsigned short* chainz; /*those with same amount of zeros*/ - unsigned short* zeros; /*length of zeros streak, used as a second hash chain*/ -} Hash; - -static unsigned hash_init(Hash* hash, unsigned windowsize) -{ - unsigned i; - hash->head = (int*)lodepng_malloc(sizeof(int) * HASH_NUM_VALUES); - hash->val = (int*)lodepng_malloc(sizeof(int) * windowsize); - hash->chain = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); - - hash->zeros = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); - hash->headz = (int*)lodepng_malloc(sizeof(int) * (MAX_SUPPORTED_DEFLATE_LENGTH + 1)); - hash->chainz = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); - - if (!hash->head || !hash->chain || !hash->val || !hash->headz || !hash->chainz || !hash->zeros) - { - return 83; /*alloc fail*/ - } - - /*initialize hash table*/ - for (i = 0; i != HASH_NUM_VALUES; ++i) hash->head[i] = -1; - for (i = 0; i != windowsize; ++i) hash->val[i] = -1; - for (i = 0; i != windowsize; ++i) hash->chain[i] = i; /*same value as index indicates uninitialized*/ - - for (i = 0; i <= MAX_SUPPORTED_DEFLATE_LENGTH; ++i) hash->headz[i] = -1; - for (i = 0; i != windowsize; ++i) hash->chainz[i] = i; /*same value as index indicates uninitialized*/ - - return 0; -} - -static void hash_cleanup(Hash* hash) -{ - lodepng_free(hash->head); - lodepng_free(hash->val); - lodepng_free(hash->chain); - - lodepng_free(hash->zeros); - lodepng_free(hash->headz); - lodepng_free(hash->chainz); -} - - - -static unsigned getHash(const unsigned char* data, size_t size, size_t pos) -{ - unsigned result = 0; - if (pos + 2 < size) - { - /*A simple shift and xor hash is used. Since the data of PNGs is dominated - by zeroes due to the filters, a better hash does not have a significant - effect on speed in traversing the chain, and causes more time spend on - calculating the hash.*/ - result ^= (unsigned)(data[pos + 0] << 0u); - result ^= (unsigned)(data[pos + 1] << 4u); - result ^= (unsigned)(data[pos + 2] << 8u); - } - else { - size_t amount, i; - if (pos >= size) return 0; - amount = size - pos; - for (i = 0; i != amount; ++i) result ^= (unsigned)(data[pos + i] << (i * 8u)); - } - return result & HASH_BIT_MASK; -} - -static unsigned countZeros(const unsigned char* data, size_t size, size_t pos) -{ - const unsigned char* start = data + pos; - const unsigned char* end = start + MAX_SUPPORTED_DEFLATE_LENGTH; - if (end > data + size) end = data + size; - data = start; - while (data != end && *data == 0) ++data; - /*subtracting two addresses returned as 32-bit number (max value is MAX_SUPPORTED_DEFLATE_LENGTH)*/ - return (unsigned)(data - start); -} - -/*wpos = pos & (windowsize - 1)*/ -static void updateHashChain(Hash* hash, size_t wpos, unsigned hashval, unsigned short numzeros) -{ - hash->val[wpos] = (int)hashval; - if (hash->head[hashval] != -1) hash->chain[wpos] = hash->head[hashval]; - hash->head[hashval] = (int)wpos; - - hash->zeros[wpos] = numzeros; - if (hash->headz[numzeros] != -1) hash->chainz[wpos] = hash->headz[numzeros]; - hash->headz[numzeros] = (int)wpos; -} - -/* -LZ77-encode the data. Return value is error code. The input are raw bytes, the output -is in the form of unsigned integers with codes representing for example literal bytes, or -length/distance pairs. -It uses a hash table technique to let it encode faster. When doing LZ77 encoding, a -sliding window (of windowsize) is used, and all past bytes in that window can be used as -the "dictionary". A brute force search through all possible distances would be slow, and -this hash technique is one out of several ways to speed this up. -*/ -static unsigned encodeLZ77(uivector* out, Hash* hash, - const unsigned char* in, size_t inpos, size_t insize, unsigned windowsize, - unsigned minmatch, unsigned nicematch, unsigned lazymatching) -{ - size_t pos; - unsigned i, error = 0; - /*for large window lengths, assume the user wants no compression loss. Otherwise, max hash chain length speedup.*/ - unsigned maxchainlength = windowsize >= 8192 ? windowsize : windowsize / 8; - unsigned maxlazymatch = windowsize >= 8192 ? MAX_SUPPORTED_DEFLATE_LENGTH : 64; - - unsigned usezeros = 1; /*not sure if setting it to false for windowsize < 8192 is better or worse*/ - unsigned numzeros = 0; - - unsigned offset; /*the offset represents the distance in LZ77 terminology*/ - unsigned length; - unsigned lazy = 0; - unsigned lazylength = 0, lazyoffset = 0; - unsigned hashval; - unsigned current_offset, current_length; - unsigned prev_offset; - const unsigned char *lastptr, *foreptr, *backptr; - unsigned hashpos; - - if (windowsize == 0 || windowsize > 32768) return 60; /*error: windowsize smaller/larger than allowed*/ - if ((windowsize & (windowsize - 1)) != 0) return 90; /*error: must be power of two*/ - - if (nicematch > MAX_SUPPORTED_DEFLATE_LENGTH) nicematch = MAX_SUPPORTED_DEFLATE_LENGTH; - - for (pos = inpos; pos < insize; ++pos) - { - size_t wpos = pos & (windowsize - 1); /*position for in 'circular' hash buffers*/ - unsigned chainlength = 0; - - hashval = getHash(in, insize, pos); - - if (usezeros && hashval == 0) - { - if (numzeros == 0) numzeros = countZeros(in, insize, pos); - else if (pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros; - } - else - { - numzeros = 0; - } - - updateHashChain(hash, wpos, hashval, numzeros); - - /*the length and offset found for the current position*/ - length = 0; - offset = 0; - - hashpos = hash->chain[wpos]; - - lastptr = &in[insize < pos + MAX_SUPPORTED_DEFLATE_LENGTH ? insize : pos + MAX_SUPPORTED_DEFLATE_LENGTH]; - - /*search for the longest string*/ - prev_offset = 0; - for (;;) - { - if (chainlength++ >= maxchainlength) break; - current_offset = (unsigned int)(hashpos <= wpos ? wpos - hashpos : wpos - hashpos + windowsize); - - if (current_offset < prev_offset) break; /*stop when went completely around the circular buffer*/ - prev_offset = current_offset; - if (current_offset > 0) - { - /*test the next characters*/ - foreptr = &in[pos]; - backptr = &in[pos - current_offset]; - - /*common case in PNGs is lots of zeros. Quickly skip over them as a speedup*/ - if (numzeros >= 3) - { - unsigned skip = hash->zeros[hashpos]; - if (skip > numzeros) skip = numzeros; - backptr += skip; - foreptr += skip; - } - - while (foreptr != lastptr && *backptr == *foreptr) /*maximum supported length by deflate is max length*/ - { - ++backptr; - ++foreptr; - } - current_length = (unsigned)(foreptr - &in[pos]); - - if (current_length > length) - { - length = current_length; /*the longest length*/ - offset = current_offset; /*the offset that is related to this longest length*/ - /*jump out once a length of max length is found (speed gain). This also jumps - out if length is MAX_SUPPORTED_DEFLATE_LENGTH*/ - if (current_length >= nicematch) break; - } - } - - if (hashpos == hash->chain[hashpos]) break; - - if (numzeros >= 3 && length > numzeros) - { - hashpos = hash->chainz[hashpos]; - if (hash->zeros[hashpos] != numzeros) break; - } - else - { - hashpos = hash->chain[hashpos]; - /*outdated hash value, happens if particular value was not encountered in whole last window*/ - if (hash->val[hashpos] != (int)hashval) break; - } - } - - if (lazymatching) - { - if (!lazy && length >= 3 && length <= maxlazymatch && length < MAX_SUPPORTED_DEFLATE_LENGTH) - { - lazy = 1; - lazylength = length; - lazyoffset = offset; - continue; /*try the next byte*/ - } - if (lazy) - { - lazy = 0; - if (pos == 0) ERROR_BREAK(81); - if (length > lazylength + 1) - { - /*push the previous character as literal*/ - if (!uivector_push_back(out, in[pos - 1])) ERROR_BREAK(83 /*alloc fail*/); - } - else - { - length = lazylength; - offset = lazyoffset; - hash->head[hashval] = -1; /*the same hashchain update will be done, this ensures no wrong alteration*/ - hash->headz[numzeros] = -1; /*idem*/ - --pos; - } - } - } - if (length >= 3 && offset > windowsize) ERROR_BREAK(86 /*too big (or overflown negative) offset*/); - - /*encode it as length/distance pair or literal value*/ - if (length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/ - { - if (!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/); - } - else if (length < minmatch || (length == 3 && offset > 4096)) - { - /*compensate for the fact that longer offsets have more extra bits, a - length of only 3 may be not worth it then*/ - if (!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/); - } - else - { - addLengthDistance(out, length, offset); - for (i = 1; i < length; ++i) - { - ++pos; - wpos = pos & (windowsize - 1); - hashval = getHash(in, insize, pos); - if (usezeros && hashval == 0) - { - if (numzeros == 0) numzeros = countZeros(in, insize, pos); - else if (pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros; - } - else - { - numzeros = 0; - } - updateHashChain(hash, wpos, hashval, numzeros); - } - } - } /*end of the loop through each character of input*/ - - return error; -} - -/* /////////////////////////////////////////////////////////////////////////// */ - -static unsigned deflateNoCompression(ucvector* out, const unsigned char* data, size_t datasize) -{ - /*non compressed deflate block data: 1 bit BFINAL,2 bits BTYPE,(5 bits): it jumps to start of next byte, - 2 bytes LEN, 2 bytes NLEN, LEN bytes literal DATA*/ - - size_t i, j, numdeflateblocks = (datasize + 65534) / 65535; - unsigned datapos = 0; - for (i = 0; i != numdeflateblocks; ++i) - { - unsigned BFINAL, BTYPE, LEN, NLEN; - unsigned char firstbyte; - - BFINAL = (i == numdeflateblocks - 1); - BTYPE = 0; - - firstbyte = (unsigned char)(BFINAL + ((BTYPE & 1) << 1) + ((BTYPE & 2) << 1)); - ucvector_push_back(out, firstbyte); - - LEN = 65535; - if (datasize - datapos < 65535) LEN = (unsigned)datasize - datapos; - NLEN = 65535 - LEN; - - ucvector_push_back(out, (unsigned char)(LEN & 255)); - ucvector_push_back(out, (unsigned char)(LEN >> 8)); - ucvector_push_back(out, (unsigned char)(NLEN & 255)); - ucvector_push_back(out, (unsigned char)(NLEN >> 8)); - - /*Decompressed data*/ - for (j = 0; j < 65535 && datapos < datasize; ++j) - { - ucvector_push_back(out, data[datapos++]); - } - } - - return 0; -} - -/* -write the lz77-encoded data, which has lit, len and dist codes, to compressed stream using huffman trees. -tree_ll: the tree for lit and len codes. -tree_d: the tree for distance codes. -*/ -static void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz77_encoded, - const HuffmanTree* tree_ll, const HuffmanTree* tree_d) -{ - size_t i = 0; - for (i = 0; i != lz77_encoded->size; ++i) - { - unsigned val = lz77_encoded->data[i]; - addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_ll, val), HuffmanTree_getLength(tree_ll, val)); - if (val > 256) /*for a length code, 3 more things have to be added*/ - { - unsigned length_index = val - FIRST_LENGTH_CODE_INDEX; - unsigned n_length_extra_bits = LENGTHEXTRA[length_index]; - unsigned length_extra_bits = lz77_encoded->data[++i]; - - unsigned distance_code = lz77_encoded->data[++i]; - - unsigned distance_index = distance_code; - unsigned n_distance_extra_bits = DISTANCEEXTRA[distance_index]; - unsigned distance_extra_bits = lz77_encoded->data[++i]; - - addBitsToStream(bp, out, length_extra_bits, n_length_extra_bits); - addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_d, distance_code), - HuffmanTree_getLength(tree_d, distance_code)); - addBitsToStream(bp, out, distance_extra_bits, n_distance_extra_bits); - } - } -} - -/*Deflate for a block of type "dynamic", that is, with freely, optimally, created huffman trees*/ -static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash, - const unsigned char* data, size_t datapos, size_t dataend, - const LodePNGCompressSettings* settings, unsigned final) -{ - unsigned error = 0; - - /* - A block is compressed as follows: The PNG data is lz77 encoded, resulting in - literal bytes and length/distance pairs. This is then huffman compressed with - two huffman trees. One huffman tree is used for the lit and len values ("ll"), - another huffman tree is used for the dist values ("d"). These two trees are - stored using their code lengths, and to compress even more these code lengths - are also run-length encoded and huffman compressed. This gives a huffman tree - of code lengths "cl". The code lenghts used to describe this third tree are - the code length code lengths ("clcl"). - */ - - /*The lz77 encoded data, represented with integers since there will also be length and distance codes in it*/ - uivector lz77_encoded; - HuffmanTree tree_ll; /*tree for lit,len values*/ - HuffmanTree tree_d; /*tree for distance codes*/ - HuffmanTree tree_cl; /*tree for encoding the code lengths representing tree_ll and tree_d*/ - uivector frequencies_ll; /*frequency of lit,len codes*/ - uivector frequencies_d; /*frequency of dist codes*/ - uivector frequencies_cl; /*frequency of code length codes*/ - uivector bitlen_lld; /*lit,len,dist code lenghts (int bits), literally (without repeat codes).*/ - uivector bitlen_lld_e; /*bitlen_lld encoded with repeat codes (this is a rudemtary run length compression)*/ - /*bitlen_cl is the code length code lengths ("clcl"). The bit lengths of codes to represent tree_cl - (these are written as is in the file, it would be crazy to compress these using yet another huffman - tree that needs to be represented by yet another set of code lengths)*/ - uivector bitlen_cl; - size_t datasize = dataend - datapos; - - /* - Due to the huffman compression of huffman tree representations ("two levels"), there are some anologies: - bitlen_lld is to tree_cl what data is to tree_ll and tree_d. - bitlen_lld_e is to bitlen_lld what lz77_encoded is to data. - bitlen_cl is to bitlen_lld_e what bitlen_lld is to lz77_encoded. - */ - - unsigned BFINAL = final; - size_t numcodes_ll, numcodes_d, i; - unsigned HLIT, HDIST, HCLEN; - - uivector_init(&lz77_encoded); - HuffmanTree_init(&tree_ll); - HuffmanTree_init(&tree_d); - HuffmanTree_init(&tree_cl); - uivector_init(&frequencies_ll); - uivector_init(&frequencies_d); - uivector_init(&frequencies_cl); - uivector_init(&bitlen_lld); - uivector_init(&bitlen_lld_e); - uivector_init(&bitlen_cl); - - /*This while loop never loops due to a break at the end, it is here to - allow breaking out of it to the cleanup phase on error conditions.*/ - while (!error) - { - if (settings->use_lz77) - { - error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, - settings->minmatch, settings->nicematch, settings->lazymatching); - if (error) break; - } - else - { - if (!uivector_resize(&lz77_encoded, datasize)) ERROR_BREAK(83 /*alloc fail*/); - for (i = datapos; i < dataend; ++i) lz77_encoded.data[i - datapos] = data[i]; /*no LZ77, but still will be Huffman compressed*/ - } - - if (!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83 /*alloc fail*/); - if (!uivector_resizev(&frequencies_d, 30, 0)) ERROR_BREAK(83 /*alloc fail*/); - - /*Count the frequencies of lit, len and dist codes*/ - for (i = 0; i != lz77_encoded.size; ++i) - { - unsigned symbol = lz77_encoded.data[i]; - ++frequencies_ll.data[symbol]; - if (symbol > 256) - { - unsigned dist = lz77_encoded.data[i + 2]; - ++frequencies_d.data[dist]; - i += 3; - } - } - frequencies_ll.data[256] = 1; /*there will be exactly 1 end code, at the end of the block*/ - - /*Make both huffman trees, one for the lit and len codes, one for the dist codes*/ - error = HuffmanTree_makeFromFrequencies(&tree_ll, frequencies_ll.data, 257, frequencies_ll.size, 15); - if (error) break; - /*2, not 1, is chosen for mincodes: some buggy PNG decoders require at least 2 symbols in the dist tree*/ - error = HuffmanTree_makeFromFrequencies(&tree_d, frequencies_d.data, 2, frequencies_d.size, 15); - if (error) break; - - numcodes_ll = tree_ll.numcodes; if (numcodes_ll > 286) numcodes_ll = 286; - numcodes_d = tree_d.numcodes; if (numcodes_d > 30) numcodes_d = 30; - /*store the code lengths of both generated trees in bitlen_lld*/ - for (i = 0; i != numcodes_ll; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_ll, (unsigned)i)); - for (i = 0; i != numcodes_d; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_d, (unsigned)i)); - - /*run-length compress bitlen_ldd into bitlen_lld_e by using repeat codes 16 (copy length 3-6 times), - 17 (3-10 zeroes), 18 (11-138 zeroes)*/ - for (i = 0; i != (unsigned)bitlen_lld.size; ++i) - { - unsigned j = 0; /*amount of repititions*/ - while (i + j + 1 < (unsigned)bitlen_lld.size && bitlen_lld.data[i + j + 1] == bitlen_lld.data[i]) ++j; - - if (bitlen_lld.data[i] == 0 && j >= 2) /*repeat code for zeroes*/ - { - ++j; /*include the first zero*/ - if (j <= 10) /*repeat code 17 supports max 10 zeroes*/ - { - uivector_push_back(&bitlen_lld_e, 17); - uivector_push_back(&bitlen_lld_e, j - 3); - } - else /*repeat code 18 supports max 138 zeroes*/ - { - if (j > 138) j = 138; - uivector_push_back(&bitlen_lld_e, 18); - uivector_push_back(&bitlen_lld_e, j - 11); - } - i += (j - 1); - } - else if (j >= 3) /*repeat code for value other than zero*/ - { - size_t k; - unsigned num = j / 6, rest = j % 6; - uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]); - for (k = 0; k < num; ++k) - { - uivector_push_back(&bitlen_lld_e, 16); - uivector_push_back(&bitlen_lld_e, 6 - 3); - } - if (rest >= 3) - { - uivector_push_back(&bitlen_lld_e, 16); - uivector_push_back(&bitlen_lld_e, rest - 3); - } - else j -= rest; - i += j; - } - else /*too short to benefit from repeat code*/ - { - uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]); - } - } - - /*generate tree_cl, the huffmantree of huffmantrees*/ - - if (!uivector_resizev(&frequencies_cl, NUM_CODE_LENGTH_CODES, 0)) ERROR_BREAK(83 /*alloc fail*/); - for (i = 0; i != bitlen_lld_e.size; ++i) - { - ++frequencies_cl.data[bitlen_lld_e.data[i]]; - /*after a repeat code come the bits that specify the number of repetitions, - those don't need to be in the frequencies_cl calculation*/ - if (bitlen_lld_e.data[i] >= 16) ++i; - } - - error = HuffmanTree_makeFromFrequencies(&tree_cl, frequencies_cl.data, - frequencies_cl.size, frequencies_cl.size, 7); - if (error) break; - - if (!uivector_resize(&bitlen_cl, tree_cl.numcodes)) ERROR_BREAK(83 /*alloc fail*/); - for (i = 0; i != tree_cl.numcodes; ++i) - { - /*lenghts of code length tree is in the order as specified by deflate*/ - bitlen_cl.data[i] = HuffmanTree_getLength(&tree_cl, CLCL_ORDER[i]); - } - while (bitlen_cl.data[bitlen_cl.size - 1] == 0 && bitlen_cl.size > 4) - { - /*remove zeros at the end, but minimum size must be 4*/ - if (!uivector_resize(&bitlen_cl, bitlen_cl.size - 1)) ERROR_BREAK(83 /*alloc fail*/); - } - if (error) break; - - /* - Write everything into the output - - After the BFINAL and BTYPE, the dynamic block consists out of the following: - - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN - - (HCLEN+4)*3 bits code lengths of code length alphabet - - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length - alphabet, + possible repetition codes 16, 17, 18) - - HDIST + 1 code lengths of distance alphabet (encoded using the code length - alphabet, + possible repetition codes 16, 17, 18) - - compressed data - - 256 (end code) - */ - - /*Write block type*/ - addBitToStream(bp, out, BFINAL); - addBitToStream(bp, out, 0); /*first bit of BTYPE "dynamic"*/ - addBitToStream(bp, out, 1); /*second bit of BTYPE "dynamic"*/ - - /*write the HLIT, HDIST and HCLEN values*/ - HLIT = (unsigned)(numcodes_ll - 257); - HDIST = (unsigned)(numcodes_d - 1); - HCLEN = (unsigned)bitlen_cl.size - 4; - /*trim zeroes for HCLEN. HLIT and HDIST were already trimmed at tree creation*/ - while (!bitlen_cl.data[HCLEN + 4 - 1] && HCLEN > 0) --HCLEN; - addBitsToStream(bp, out, HLIT, 5); - addBitsToStream(bp, out, HDIST, 5); - addBitsToStream(bp, out, HCLEN, 4); - - /*write the code lenghts of the code length alphabet*/ - for (i = 0; i != HCLEN + 4; ++i) addBitsToStream(bp, out, bitlen_cl.data[i], 3); - - /*write the lenghts of the lit/len AND the dist alphabet*/ - for (i = 0; i != bitlen_lld_e.size; ++i) - { - addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_cl, bitlen_lld_e.data[i]), - HuffmanTree_getLength(&tree_cl, bitlen_lld_e.data[i])); - /*extra bits of repeat codes*/ - if (bitlen_lld_e.data[i] == 16) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 2); - else if (bitlen_lld_e.data[i] == 17) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 3); - else if (bitlen_lld_e.data[i] == 18) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 7); - } - - /*write the compressed data symbols*/ - writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d); - /*error: the length of the end code 256 must be larger than 0*/ - if (HuffmanTree_getLength(&tree_ll, 256) == 0) ERROR_BREAK(64); - - /*write the end code*/ - addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); - - break; /*end of error-while*/ - } - - /*cleanup*/ - uivector_cleanup(&lz77_encoded); - HuffmanTree_cleanup(&tree_ll); - HuffmanTree_cleanup(&tree_d); - HuffmanTree_cleanup(&tree_cl); - uivector_cleanup(&frequencies_ll); - uivector_cleanup(&frequencies_d); - uivector_cleanup(&frequencies_cl); - uivector_cleanup(&bitlen_lld_e); - uivector_cleanup(&bitlen_lld); - uivector_cleanup(&bitlen_cl); - - return error; -} - -static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash, - const unsigned char* data, - size_t datapos, size_t dataend, - const LodePNGCompressSettings* settings, unsigned final) -{ - HuffmanTree tree_ll; /*tree for literal values and length codes*/ - HuffmanTree tree_d; /*tree for distance codes*/ - - unsigned BFINAL = final; - unsigned error = 0; - size_t i; - - HuffmanTree_init(&tree_ll); - HuffmanTree_init(&tree_d); - - generateFixedLitLenTree(&tree_ll); - generateFixedDistanceTree(&tree_d); - - addBitToStream(bp, out, BFINAL); - addBitToStream(bp, out, 1); /*first bit of BTYPE*/ - addBitToStream(bp, out, 0); /*second bit of BTYPE*/ - - if (settings->use_lz77) /*LZ77 encoded*/ - { - uivector lz77_encoded; - uivector_init(&lz77_encoded); - error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, - settings->minmatch, settings->nicematch, settings->lazymatching); - if (!error) writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d); - uivector_cleanup(&lz77_encoded); - } - else /*no LZ77, but still will be Huffman compressed*/ - { - for (i = datapos; i < dataend; ++i) - { - addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, data[i]), HuffmanTree_getLength(&tree_ll, data[i])); - } - } - /*add END code*/ - if (!error) addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); - - /*cleanup*/ - HuffmanTree_cleanup(&tree_ll); - HuffmanTree_cleanup(&tree_d); - - return error; -} - -static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in, size_t insize, - const LodePNGCompressSettings* settings) -{ - unsigned error = 0; - size_t i, blocksize, numdeflateblocks; - size_t bp = 0; /*the bit pointer*/ - Hash hash; - - if (settings->btype > 2) return 61; - else if (settings->btype == 0) return deflateNoCompression(out, in, insize); - else if (settings->btype == 1) blocksize = insize; - else /*if(settings->btype == 2)*/ - { - /*on PNGs, deflate blocks of 65-262k seem to give most dense encoding*/ - blocksize = insize / 8 + 8; - if (blocksize < 65536) blocksize = 65536; - if (blocksize > 262144) blocksize = 262144; - } - - numdeflateblocks = (insize + blocksize - 1) / blocksize; - if (numdeflateblocks == 0) numdeflateblocks = 1; - - error = hash_init(&hash, settings->windowsize); - if (error) return error; - - for (i = 0; i != numdeflateblocks && !error; ++i) - { - unsigned final = (i == numdeflateblocks - 1); - size_t start = i * blocksize; - size_t end = start + blocksize; - if (end > insize) end = insize; - - if (settings->btype == 1) error = deflateFixed(out, &bp, &hash, in, start, end, settings, final); - else if (settings->btype == 2) error = deflateDynamic(out, &bp, &hash, in, start, end, settings, final); - } - - hash_cleanup(&hash); - - return error; -} - -unsigned lodepng_deflate(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGCompressSettings* settings) -{ - unsigned error; - ucvector v; - ucvector_init_buffer(&v, *out, *outsize); - error = lodepng_deflatev(&v, in, insize, settings); - *out = v.data; - *outsize = v.size; - return error; -} - -static unsigned deflate(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGCompressSettings* settings) -{ - if (settings->custom_deflate) - { - return settings->custom_deflate(out, outsize, in, insize, settings); - } - else - { - return lodepng_deflate(out, outsize, in, insize, settings); - } -} - -#endif /*LODEPNG_COMPILE_DECODER*/ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / Adler32 */ -/* ////////////////////////////////////////////////////////////////////////// */ - -static unsigned update_adler32(unsigned adler, const unsigned char* data, unsigned len) -{ - unsigned s1 = adler & 0xffff; - unsigned s2 = (adler >> 16) & 0xffff; - - while (len > 0) - { - /*at least 5550 sums can be done before the sums overflow, saving a lot of module divisions*/ - unsigned amount = len > 5550 ? 5550 : len; - len -= amount; - while (amount > 0) - { - s1 += (*data++); - s2 += s1; - --amount; - } - s1 %= 65521; - s2 %= 65521; - } - - return (s2 << 16) | s1; -} - -/*Return the adler32 of the bytes data[0..len-1]*/ -static unsigned adler32(const unsigned char* data, unsigned len) -{ - return update_adler32(1L, data, len); -} - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / Zlib / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -#ifdef LODEPNG_COMPILE_DECODER - -unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, - size_t insize, const LodePNGDecompressSettings* settings) -{ - unsigned error = 0; - unsigned CM, CINFO, FDICT; - - if (insize < 2) return 53; /*error, size of zlib data too small*/ - /*read information from zlib header*/ - if ((in[0] * 256 + in[1]) % 31 != 0) - { - /*error: 256 * in[0] + in[1] must be a multiple of 31, the FCHECK value is supposed to be made that way*/ - return 24; - } - - CM = in[0] & 15; - CINFO = (in[0] >> 4) & 15; - /*FCHECK = in[1] & 31;*/ /*FCHECK is already tested above*/ - FDICT = (in[1] >> 5) & 1; - /*FLEVEL = (in[1] >> 6) & 3;*/ /*FLEVEL is not used here*/ - - if (CM != 8 || CINFO > 7) - { - /*error: only compression method 8: inflate with sliding window of 32k is supported by the PNG spec*/ - return 25; - } - if (FDICT != 0) - { - /*error: the specification of PNG says about the zlib stream: - "The additional flags shall not specify a preset dictionary."*/ - return 26; - } - - error = inflate(out, outsize, in + 2, insize - 2, settings); - if (error) return error; - - if (!settings->ignore_adler32) - { - unsigned ADLER32 = lodepng_read32bitInt(&in[insize - 4]); - unsigned checksum = adler32(*out, (unsigned)(*outsize)); - if (checksum != ADLER32) return 58; /*error, adler checksum not correct, data must be corrupted*/ - } - - return 0; /*no error*/ -} - -static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, - size_t insize, const LodePNGDecompressSettings* settings) -{ - if (settings->custom_zlib) - { - return settings->custom_zlib(out, outsize, in, insize, settings); - } - else - { - return lodepng_zlib_decompress(out, outsize, in, insize, settings); - } -} - -#endif /*LODEPNG_COMPILE_DECODER*/ - -#ifdef LODEPNG_COMPILE_ENCODER - -unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, - size_t insize, const LodePNGCompressSettings* settings) -{ - /*initially, *out must be NULL and outsize 0, if you just give some random *out - that's pointing to a non allocated buffer, this'll crash*/ - ucvector outv; - size_t i; - unsigned error; - unsigned char* deflatedata = 0; - size_t deflatesize = 0; - - /*zlib data: 1 byte CMF (CM+CINFO), 1 byte FLG, deflate data, 4 byte ADLER32 checksum of the Decompressed data*/ - unsigned CMF = 120; /*0b01111000: CM 8, CINFO 7. With CINFO 7, any window size up to 32768 can be used.*/ - unsigned FLEVEL = 0; - unsigned FDICT = 0; - unsigned CMFFLG = 256 * CMF + FDICT * 32 + FLEVEL * 64; - unsigned FCHECK = 31 - CMFFLG % 31; - CMFFLG += FCHECK; - - /*ucvector-controlled version of the output buffer, for dynamic array*/ - ucvector_init_buffer(&outv, *out, *outsize); - - ucvector_push_back(&outv, (unsigned char)(CMFFLG >> 8)); - ucvector_push_back(&outv, (unsigned char)(CMFFLG & 255)); - - error = deflate(&deflatedata, &deflatesize, in, insize, settings); - - if (!error) - { - unsigned ADLER32 = adler32(in, (unsigned)insize); - for (i = 0; i != deflatesize; ++i) ucvector_push_back(&outv, deflatedata[i]); - lodepng_free(deflatedata); - lodepng_add32bitInt(&outv, ADLER32); - } - - *out = outv.data; - *outsize = outv.size; - - return error; -} - -/* compress using the default or custom zlib function */ -static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, - size_t insize, const LodePNGCompressSettings* settings) -{ - if (settings->custom_zlib) - { - return settings->custom_zlib(out, outsize, in, insize, settings); - } - else - { - return lodepng_zlib_compress(out, outsize, in, insize, settings); - } -} - -#endif /*LODEPNG_COMPILE_ENCODER*/ - -#else /*no LODEPNG_COMPILE_ZLIB*/ - -#ifdef LODEPNG_COMPILE_DECODER -static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, - size_t insize, const LodePNGDecompressSettings* settings) -{ - if (!settings->custom_zlib) return 87; /*no custom zlib function provided */ - return settings->custom_zlib(out, outsize, in, insize, settings); -} -#endif /*LODEPNG_COMPILE_DECODER*/ -#ifdef LODEPNG_COMPILE_ENCODER -static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, - size_t insize, const LodePNGCompressSettings* settings) -{ - if (!settings->custom_zlib) return 87; /*no custom zlib function provided */ - return settings->custom_zlib(out, outsize, in, insize, settings); -} -#endif /*LODEPNG_COMPILE_ENCODER*/ - -#endif /*LODEPNG_COMPILE_ZLIB*/ - -/* ////////////////////////////////////////////////////////////////////////// */ - -#ifdef LODEPNG_COMPILE_ENCODER - -/*this is a good tradeoff between speed and compression ratio*/ -#define DEFAULT_WINDOWSIZE 2048 - -void lodepng_compress_settings_init(LodePNGCompressSettings* settings) -{ - /*compress with dynamic huffman tree (not in the mathematical sense, just not the predefined one)*/ - settings->btype = 2; - settings->use_lz77 = 1; - settings->windowsize = DEFAULT_WINDOWSIZE; - settings->minmatch = 3; - settings->nicematch = 128; - settings->lazymatching = 1; - - settings->custom_zlib = 0; - settings->custom_deflate = 0; - settings->custom_context = 0; -} - -const LodePNGCompressSettings lodepng_default_compress_settings = { 2, 1, DEFAULT_WINDOWSIZE, 3, 128, 1, 0, 0, 0 }; - - -#endif /*LODEPNG_COMPILE_ENCODER*/ - -#ifdef LODEPNG_COMPILE_DECODER - -void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings) -{ - settings->ignore_adler32 = 0; - - settings->custom_zlib = 0; - settings->custom_inflate = 0; - settings->custom_context = 0; -} - -const LodePNGDecompressSettings lodepng_default_decompress_settings = { 0, 0, 0, 0 }; - -#endif /*LODEPNG_COMPILE_DECODER*/ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* // End of Zlib related code. Begin of PNG related code. // */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ - -#ifdef LODEPNG_COMPILE_PNG - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / CRC32 / */ -/* ////////////////////////////////////////////////////////////////////////// */ - - -#ifndef LODEPNG_NO_COMPILE_CRC -/* CRC polynomial: 0xedb88320 */ -static unsigned lodepng_crc32_table[256] = { - 0u, 1996959894u, 3993919788u, 2567524794u, 124634137u, 1886057615u, 3915621685u, 2657392035u, - 249268274u, 2044508324u, 3772115230u, 2547177864u, 162941995u, 2125561021u, 3887607047u, 2428444049u, - 498536548u, 1789927666u, 4089016648u, 2227061214u, 450548861u, 1843258603u, 4107580753u, 2211677639u, - 325883990u, 1684777152u, 4251122042u, 2321926636u, 335633487u, 1661365465u, 4195302755u, 2366115317u, - 997073096u, 1281953886u, 3579855332u, 2724688242u, 1006888145u, 1258607687u, 3524101629u, 2768942443u, - 901097722u, 1119000684u, 3686517206u, 2898065728u, 853044451u, 1172266101u, 3705015759u, 2882616665u, - 651767980u, 1373503546u, 3369554304u, 3218104598u, 565507253u, 1454621731u, 3485111705u, 3099436303u, - 671266974u, 1594198024u, 3322730930u, 2970347812u, 795835527u, 1483230225u, 3244367275u, 3060149565u, - 1994146192u, 31158534u, 2563907772u, 4023717930u, 1907459465u, 112637215u, 2680153253u, 3904427059u, - 2013776290u, 251722036u, 2517215374u, 3775830040u, 2137656763u, 141376813u, 2439277719u, 3865271297u, - 1802195444u, 476864866u, 2238001368u, 4066508878u, 1812370925u, 453092731u, 2181625025u, 4111451223u, - 1706088902u, 314042704u, 2344532202u, 4240017532u, 1658658271u, 366619977u, 2362670323u, 4224994405u, - 1303535960u, 984961486u, 2747007092u, 3569037538u, 1256170817u, 1037604311u, 2765210733u, 3554079995u, - 1131014506u, 879679996u, 2909243462u, 3663771856u, 1141124467u, 855842277u, 2852801631u, 3708648649u, - 1342533948u, 654459306u, 3188396048u, 3373015174u, 1466479909u, 544179635u, 3110523913u, 3462522015u, - 1591671054u, 702138776u, 2966460450u, 3352799412u, 1504918807u, 783551873u, 3082640443u, 3233442989u, - 3988292384u, 2596254646u, 62317068u, 1957810842u, 3939845945u, 2647816111u, 81470997u, 1943803523u, - 3814918930u, 2489596804u, 225274430u, 2053790376u, 3826175755u, 2466906013u, 167816743u, 2097651377u, - 4027552580u, 2265490386u, 503444072u, 1762050814u, 4150417245u, 2154129355u, 426522225u, 1852507879u, - 4275313526u, 2312317920u, 282753626u, 1742555852u, 4189708143u, 2394877945u, 397917763u, 1622183637u, - 3604390888u, 2714866558u, 953729732u, 1340076626u, 3518719985u, 2797360999u, 1068828381u, 1219638859u, - 3624741850u, 2936675148u, 906185462u, 1090812512u, 3747672003u, 2825379669u, 829329135u, 1181335161u, - 3412177804u, 3160834842u, 628085408u, 1382605366u, 3423369109u, 3138078467u, 570562233u, 1426400815u, - 3317316542u, 2998733608u, 733239954u, 1555261956u, 3268935591u, 3050360625u, 752459403u, 1541320221u, - 2607071920u, 3965973030u, 1969922972u, 40735498u, 2617837225u, 3943577151u, 1913087877u, 83908371u, - 2512341634u, 3803740692u, 2075208622u, 213261112u, 2463272603u, 3855990285u, 2094854071u, 198958881u, - 2262029012u, 4057260610u, 1759359992u, 534414190u, 2176718541u, 4139329115u, 1873836001u, 414664567u, - 2282248934u, 4279200368u, 1711684554u, 285281116u, 2405801727u, 4167216745u, 1634467795u, 376229701u, - 2685067896u, 3608007406u, 1308918612u, 956543938u, 2808555105u, 3495958263u, 1231636301u, 1047427035u, - 2932959818u, 3654703836u, 1088359270u, 936918000u, 2847714899u, 3736837829u, 1202900863u, 817233897u, - 3183342108u, 3401237130u, 1404277552u, 615818150u, 3134207493u, 3453421203u, 1423857449u, 601450431u, - 3009837614u, 3294710456u, 1567103746u, 711928724u, 3020668471u, 3272380065u, 1510334235u, 755167117u -}; - -/*Return the CRC of the bytes buf[0..len-1].*/ -unsigned lodepng_crc32(const unsigned char* data, size_t length) -{ - unsigned r = 0xffffffffu; - size_t i; - for (i = 0; i < length; ++i) - { - r = lodepng_crc32_table[(r ^ data[i]) & 0xff] ^ (r >> 8); - } - return r ^ 0xffffffffu; -} -#else /* !LODEPNG_NO_COMPILE_CRC */ -unsigned lodepng_crc32(const unsigned char* data, size_t length); -#endif /* !LODEPNG_NO_COMPILE_CRC */ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / Reading and writing single bits and bytes from/to stream for LodePNG / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -static unsigned char readBitFromReversedStream(size_t* bitpointer, const unsigned char* bitstream) -{ - unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> (7 - ((*bitpointer) & 0x7))) & 1); - ++(*bitpointer); - return result; -} - -static unsigned readBitsFromReversedStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) -{ - unsigned result = 0; - size_t i; - for (i = 0; i < nbits; ++i) - { - result <<= 1; - result |= (unsigned)readBitFromReversedStream(bitpointer, bitstream); - } - return result; -} - -#ifdef LODEPNG_COMPILE_DECODER -static void setBitOfReversedStream0(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) -{ - /*the current bit in bitstream must be 0 for this to work*/ - if (bit) - { - /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/ - bitstream[(*bitpointer) >> 3] |= (bit << (7 - ((*bitpointer) & 0x7))); - } - ++(*bitpointer); -} -#endif /*LODEPNG_COMPILE_DECODER*/ - -static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) -{ - /*the current bit in bitstream may be 0 or 1 for this to work*/ - if (bit == 0) bitstream[(*bitpointer) >> 3] &= (unsigned char)(~(1 << (7 - ((*bitpointer) & 0x7)))); - else bitstream[(*bitpointer) >> 3] |= (1 << (7 - ((*bitpointer) & 0x7))); - ++(*bitpointer); -} - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / PNG chunks / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -unsigned lodepng_chunk_length(const unsigned char* chunk) -{ - return lodepng_read32bitInt(&chunk[0]); -} - -void lodepng_chunk_type(char type[5], const unsigned char* chunk) -{ - unsigned i; - for (i = 0; i != 4; ++i) type[i] = (char)chunk[4 + i]; - type[4] = 0; /*null termination char*/ -} - -unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type) -{ - if (strlen(type) != 4) return 0; - return (chunk[4] == type[0] && chunk[5] == type[1] && chunk[6] == type[2] && chunk[7] == type[3]); -} - -unsigned char lodepng_chunk_ancillary(const unsigned char* chunk) -{ - return((chunk[4] & 32) != 0); -} - -unsigned char lodepng_chunk_private(const unsigned char* chunk) -{ - return((chunk[6] & 32) != 0); -} - -unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk) -{ - return((chunk[7] & 32) != 0); -} - -unsigned char* lodepng_chunk_data(unsigned char* chunk) -{ - return &chunk[8]; -} - -const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk) -{ - return &chunk[8]; -} - -unsigned lodepng_chunk_check_crc(const unsigned char* chunk) -{ - unsigned length = lodepng_chunk_length(chunk); - unsigned CRC = lodepng_read32bitInt(&chunk[length + 8]); - /*the CRC is taken of the data and the 4 chunk type letters, not the length*/ - unsigned checksum = lodepng_crc32(&chunk[4], length + 4); - if (CRC != checksum) return 1; - else return 0; -} - -void lodepng_chunk_generate_crc(unsigned char* chunk) -{ - unsigned length = lodepng_chunk_length(chunk); - unsigned CRC = lodepng_crc32(&chunk[4], length + 4); - lodepng_set32bitInt(chunk + 8 + length, CRC); -} - -unsigned char* lodepng_chunk_next(unsigned char* chunk) -{ - unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; - return &chunk[total_chunk_length]; -} - -const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk) -{ - unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; - return &chunk[total_chunk_length]; -} - -unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk) -{ - unsigned i; - unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; - unsigned char *chunk_start, *new_buffer; - size_t new_length = (*outlength) + total_chunk_length; - if (new_length < total_chunk_length || new_length < (*outlength)) return 77; /*integer overflow happened*/ - - new_buffer = (unsigned char*)lodepng_realloc(*out, new_length); - if (!new_buffer) return 83; /*alloc fail*/ - (*out) = new_buffer; - (*outlength) = new_length; - chunk_start = &(*out)[new_length - total_chunk_length]; - - for (i = 0; i != total_chunk_length; ++i) chunk_start[i] = chunk[i]; - - return 0; -} - -unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, - const char* type, const unsigned char* data) -{ - unsigned i; - unsigned char *chunk, *new_buffer; - size_t new_length = (*outlength) + length + 12; - if (new_length < length + 12 || new_length < (*outlength)) return 77; /*integer overflow happened*/ - new_buffer = (unsigned char*)lodepng_realloc(*out, new_length); - if (!new_buffer) return 83; /*alloc fail*/ - (*out) = new_buffer; - (*outlength) = new_length; - chunk = &(*out)[(*outlength) - length - 12]; - - /*1: length*/ - lodepng_set32bitInt(chunk, (unsigned)length); - - /*2: chunk name (4 letters)*/ - chunk[4] = (unsigned char)type[0]; - chunk[5] = (unsigned char)type[1]; - chunk[6] = (unsigned char)type[2]; - chunk[7] = (unsigned char)type[3]; - - /*3: the data*/ - for (i = 0; i != length; ++i) chunk[8 + i] = data[i]; - - /*4: CRC (of the chunkname characters and the data)*/ - lodepng_chunk_generate_crc(chunk); - - return 0; -} - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / Color types and such / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -/*return type is a LodePNG error code*/ -static unsigned checkColorValidity(LodePNGColorType colortype, unsigned bd) /*bd = bitdepth*/ -{ - switch (colortype) - { - case 0: if (!(bd == 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) return 37; break; /*grey*/ - case 2: if (!(bd == 8 || bd == 16)) return 37; break; /*RGB*/ - case 3: if (!(bd == 1 || bd == 2 || bd == 4 || bd == 8)) return 37; break; /*palette*/ - case 4: if (!(bd == 8 || bd == 16)) return 37; break; /*grey + alpha*/ - case 6: if (!(bd == 8 || bd == 16)) return 37; break; /*RGBA*/ - default: return 31; - } - return 0; /*allowed color type / bits combination*/ -} - -static unsigned getNumColorChannels(LodePNGColorType colortype) -{ - switch (colortype) - { - case 0: return 1; /*grey*/ - case 2: return 3; /*RGB*/ - case 3: return 1; /*palette*/ - case 4: return 2; /*grey + alpha*/ - case 6: return 4; /*RGBA*/ - } - return 0; /*unexisting color type*/ -} - -static unsigned lodepng_get_bpp_lct(LodePNGColorType colortype, unsigned bitdepth) -{ - /*bits per pixel is amount of channels * bits per channel*/ - return getNumColorChannels(colortype) * bitdepth; -} - -/* ////////////////////////////////////////////////////////////////////////// */ - -void lodepng_color_mode_init(LodePNGColorMode* info) -{ - info->key_defined = 0; - info->key_r = info->key_g = info->key_b = 0; - info->colortype = LCT_RGBA; - info->bitdepth = 8; - info->palette = 0; - info->palettesize = 0; -} - -void lodepng_color_mode_cleanup(LodePNGColorMode* info) -{ - lodepng_palette_clear(info); -} - -unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source) -{ - size_t i; - lodepng_color_mode_cleanup(dest); - *dest = *source; - if (source->palette) - { - dest->palette = (unsigned char*)lodepng_malloc(1024); - if (!dest->palette && source->palettesize) return 83; /*alloc fail*/ - for (i = 0; i != source->palettesize * 4; ++i) dest->palette[i] = source->palette[i]; - } - return 0; -} - -static int lodepng_color_mode_equal(const LodePNGColorMode* a, const LodePNGColorMode* b) -{ - size_t i; - if (a->colortype != b->colortype) return 0; - if (a->bitdepth != b->bitdepth) return 0; - if (a->key_defined != b->key_defined) return 0; - if (a->key_defined) - { - if (a->key_r != b->key_r) return 0; - if (a->key_g != b->key_g) return 0; - if (a->key_b != b->key_b) return 0; - } - /*if one of the palette sizes is 0, then we consider it to be the same as the - other: it means that e.g. the palette was not given by the user and should be - considered the same as the palette inside the PNG.*/ - if (1/*a->palettesize != 0 && b->palettesize != 0*/) { - if (a->palettesize != b->palettesize) return 0; - for (i = 0; i != a->palettesize * 4; ++i) - { - if (a->palette[i] != b->palette[i]) return 0; - } - } - return 1; -} - -void lodepng_palette_clear(LodePNGColorMode* info) -{ - if (info->palette) lodepng_free(info->palette); - info->palette = 0; - info->palettesize = 0; -} - -unsigned lodepng_palette_add(LodePNGColorMode* info, - unsigned char r, unsigned char g, unsigned char b, unsigned char a) -{ - unsigned char* data; - /*the same resize technique as C++ std::vectors is used, and here it's made so that for a palette with - the max of 256 colors, it'll have the exact alloc size*/ - if (!info->palette) /*allocate palette if empty*/ - { - /*room for 256 colors with 4 bytes each*/ - data = (unsigned char*)lodepng_realloc(info->palette, 1024); - if (!data) return 83; /*alloc fail*/ - else info->palette = data; - } - info->palette[4 * info->palettesize + 0] = r; - info->palette[4 * info->palettesize + 1] = g; - info->palette[4 * info->palettesize + 2] = b; - info->palette[4 * info->palettesize + 3] = a; - ++info->palettesize; - return 0; -} - -unsigned lodepng_get_bpp(const LodePNGColorMode* info) -{ - /*calculate bits per pixel out of colortype and bitdepth*/ - return lodepng_get_bpp_lct(info->colortype, info->bitdepth); -} - -unsigned lodepng_get_channels(const LodePNGColorMode* info) -{ - return getNumColorChannels(info->colortype); -} - -unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info) -{ - return info->colortype == LCT_GREY || info->colortype == LCT_GREY_ALPHA; -} - -unsigned lodepng_is_alpha_type(const LodePNGColorMode* info) -{ - return (info->colortype & 4) != 0; /*4 or 6*/ -} - -unsigned lodepng_is_palette_type(const LodePNGColorMode* info) -{ - return info->colortype == LCT_PALETTE; -} - -unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info) -{ - size_t i; - for (i = 0; i != info->palettesize; ++i) - { - if (info->palette[i * 4 + 3] < 255) return 1; - } - return 0; -} - -unsigned lodepng_can_have_alpha(const LodePNGColorMode* info) -{ - return info->key_defined - || lodepng_is_alpha_type(info) - || lodepng_has_palette_alpha(info); -} - -size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color) -{ - /*will not overflow for any color type if roughly w * h < 268435455*/ - size_t bpp = lodepng_get_bpp(color); - size_t n = w * h; - return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8; -} - -size_t lodepng_get_raw_size_lct(unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) -{ - /*will not overflow for any color type if roughly w * h < 268435455*/ - size_t bpp = lodepng_get_bpp_lct(colortype, bitdepth); - size_t n = w * h; - return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8; -} - - -#ifdef LODEPNG_COMPILE_PNG -#ifdef LODEPNG_COMPILE_DECODER -/*in an idat chunk, each scanline is a multiple of 8 bits, unlike the lodepng output buffer*/ -static size_t lodepng_get_raw_size_idat(unsigned w, unsigned h, const LodePNGColorMode* color) -{ - /*will not overflow for any color type if roughly w * h < 268435455*/ - size_t bpp = lodepng_get_bpp(color); - size_t line = ((w / 8) * bpp) + ((w & 7) * bpp + 7) / 8; - return h * line; -} -#endif /*LODEPNG_COMPILE_DECODER*/ -#endif /*LODEPNG_COMPILE_PNG*/ - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - -static void LodePNGUnknownChunks_init(LodePNGInfo* info) -{ - unsigned i; - for (i = 0; i != 3; ++i) info->unknown_chunks_data[i] = 0; - for (i = 0; i != 3; ++i) info->unknown_chunks_size[i] = 0; -} - -static void LodePNGUnknownChunks_cleanup(LodePNGInfo* info) -{ - unsigned i; - for (i = 0; i != 3; ++i) lodepng_free(info->unknown_chunks_data[i]); -} - -static unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest, const LodePNGInfo* src) -{ - unsigned i; - - LodePNGUnknownChunks_cleanup(dest); - - for (i = 0; i != 3; ++i) - { - size_t j; - dest->unknown_chunks_size[i] = src->unknown_chunks_size[i]; - dest->unknown_chunks_data[i] = (unsigned char*)lodepng_malloc(src->unknown_chunks_size[i]); - if (!dest->unknown_chunks_data[i] && dest->unknown_chunks_size[i]) return 83; /*alloc fail*/ - for (j = 0; j < src->unknown_chunks_size[i]; ++j) - { - dest->unknown_chunks_data[i][j] = src->unknown_chunks_data[i][j]; - } - } - - return 0; -} - -/******************************************************************************/ - -static void LodePNGText_init(LodePNGInfo* info) -{ - info->text_num = 0; - info->text_keys = NULL; - info->text_strings = NULL; -} - -static void LodePNGText_cleanup(LodePNGInfo* info) -{ - size_t i; - for (i = 0; i != info->text_num; ++i) - { - string_cleanup(&info->text_keys[i]); - string_cleanup(&info->text_strings[i]); - } - lodepng_free(info->text_keys); - lodepng_free(info->text_strings); -} - -static unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* source) -{ - size_t i = 0; - dest->text_keys = 0; - dest->text_strings = 0; - dest->text_num = 0; - for (i = 0; i != source->text_num; ++i) - { - CERROR_TRY_RETURN(lodepng_add_text(dest, source->text_keys[i], source->text_strings[i])); - } - return 0; -} - -void lodepng_clear_text(LodePNGInfo* info) -{ - LodePNGText_cleanup(info); -} - -unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str) -{ - char** new_keys = (char**)(lodepng_realloc(info->text_keys, sizeof(char*) * (info->text_num + 1))); - char** new_strings = (char**)(lodepng_realloc(info->text_strings, sizeof(char*) * (info->text_num + 1))); - if (!new_keys || !new_strings) - { - lodepng_free(new_keys); - lodepng_free(new_strings); - return 83; /*alloc fail*/ - } - - ++info->text_num; - info->text_keys = new_keys; - info->text_strings = new_strings; - - string_init(&info->text_keys[info->text_num - 1]); - string_set(&info->text_keys[info->text_num - 1], key); - - string_init(&info->text_strings[info->text_num - 1]); - string_set(&info->text_strings[info->text_num - 1], str); - - return 0; -} - -/******************************************************************************/ - -static void LodePNGIText_init(LodePNGInfo* info) -{ - info->itext_num = 0; - info->itext_keys = NULL; - info->itext_langtags = NULL; - info->itext_transkeys = NULL; - info->itext_strings = NULL; -} - -static void LodePNGIText_cleanup(LodePNGInfo* info) -{ - size_t i; - for (i = 0; i != info->itext_num; ++i) - { - string_cleanup(&info->itext_keys[i]); - string_cleanup(&info->itext_langtags[i]); - string_cleanup(&info->itext_transkeys[i]); - string_cleanup(&info->itext_strings[i]); - } - lodepng_free(info->itext_keys); - lodepng_free(info->itext_langtags); - lodepng_free(info->itext_transkeys); - lodepng_free(info->itext_strings); -} - -static unsigned LodePNGIText_copy(LodePNGInfo* dest, const LodePNGInfo* source) -{ - size_t i = 0; - dest->itext_keys = 0; - dest->itext_langtags = 0; - dest->itext_transkeys = 0; - dest->itext_strings = 0; - dest->itext_num = 0; - for (i = 0; i != source->itext_num; ++i) - { - CERROR_TRY_RETURN(lodepng_add_itext(dest, source->itext_keys[i], source->itext_langtags[i], - source->itext_transkeys[i], source->itext_strings[i])); - } - return 0; -} - -void lodepng_clear_itext(LodePNGInfo* info) -{ - LodePNGIText_cleanup(info); -} - -unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag, - const char* transkey, const char* str) -{ - char** new_keys = (char**)(lodepng_realloc(info->itext_keys, sizeof(char*) * (info->itext_num + 1))); - char** new_langtags = (char**)(lodepng_realloc(info->itext_langtags, sizeof(char*) * (info->itext_num + 1))); - char** new_transkeys = (char**)(lodepng_realloc(info->itext_transkeys, sizeof(char*) * (info->itext_num + 1))); - char** new_strings = (char**)(lodepng_realloc(info->itext_strings, sizeof(char*) * (info->itext_num + 1))); - if (!new_keys || !new_langtags || !new_transkeys || !new_strings) - { - lodepng_free(new_keys); - lodepng_free(new_langtags); - lodepng_free(new_transkeys); - lodepng_free(new_strings); - return 83; /*alloc fail*/ - } - - ++info->itext_num; - info->itext_keys = new_keys; - info->itext_langtags = new_langtags; - info->itext_transkeys = new_transkeys; - info->itext_strings = new_strings; - - string_init(&info->itext_keys[info->itext_num - 1]); - string_set(&info->itext_keys[info->itext_num - 1], key); - - string_init(&info->itext_langtags[info->itext_num - 1]); - string_set(&info->itext_langtags[info->itext_num - 1], langtag); - - string_init(&info->itext_transkeys[info->itext_num - 1]); - string_set(&info->itext_transkeys[info->itext_num - 1], transkey); - - string_init(&info->itext_strings[info->itext_num - 1]); - string_set(&info->itext_strings[info->itext_num - 1], str); - - return 0; -} -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - -void lodepng_info_init(LodePNGInfo* info) -{ - lodepng_color_mode_init(&info->color); - info->interlace_method = 0; - info->compression_method = 0; - info->filter_method = 0; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - info->background_defined = 0; - info->background_r = info->background_g = info->background_b = 0; - - LodePNGText_init(info); - LodePNGIText_init(info); - - info->time_defined = 0; - info->phys_defined = 0; - - LodePNGUnknownChunks_init(info); -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ -} - -void lodepng_info_cleanup(LodePNGInfo* info) -{ - lodepng_color_mode_cleanup(&info->color); -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - LodePNGText_cleanup(info); - LodePNGIText_cleanup(info); - - LodePNGUnknownChunks_cleanup(info); -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ -} - -unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source) -{ - lodepng_info_cleanup(dest); - *dest = *source; - lodepng_color_mode_init(&dest->color); - CERROR_TRY_RETURN(lodepng_color_mode_copy(&dest->color, &source->color)); - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - CERROR_TRY_RETURN(LodePNGText_copy(dest, source)); - CERROR_TRY_RETURN(LodePNGIText_copy(dest, source)); - - LodePNGUnknownChunks_init(dest); - CERROR_TRY_RETURN(LodePNGUnknownChunks_copy(dest, source)); -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - return 0; -} - -void lodepng_info_swap(LodePNGInfo* a, LodePNGInfo* b) -{ - LodePNGInfo temp = *a; - *a = *b; - *b = temp; -} - -/* ////////////////////////////////////////////////////////////////////////// */ - -/*index: bitgroup index, bits: bitgroup size(1, 2 or 4), in: bitgroup value, out: octet array to add bits to*/ -static void addColorBits(unsigned char* out, size_t index, unsigned bits, unsigned in) -{ - unsigned m = bits == 1 ? 7 : bits == 2 ? 3 : 1; /*8 / bits - 1*/ - /*p = the partial index in the byte, e.g. with 4 palettebits it is 0 for first half or 1 for second half*/ - unsigned p = index & m; - in &= (1u << bits) - 1u; /*filter out any other bits of the input value*/ - in = in << (bits * (m - p)); - if (p == 0) out[index * bits / 8] = in; - else out[index * bits / 8] |= in; -} - -typedef struct ColorTree ColorTree; - -/* -One node of a color tree -This is the data structure used to count the number of unique colors and to get a palette -index for a color. It's like an octree, but because the alpha channel is used too, each -node has 16 instead of 8 children. -*/ -struct ColorTree -{ - ColorTree* children[16]; /*up to 16 pointers to ColorTree of next level*/ - int index; /*the payload. Only has a meaningful value if this is in the last level*/ -}; - -static void color_tree_init(ColorTree* tree) -{ - int i; - for (i = 0; i != 16; ++i) tree->children[i] = 0; - tree->index = -1; -} - -static void color_tree_cleanup(ColorTree* tree) -{ - int i; - for (i = 0; i != 16; ++i) - { - if (tree->children[i]) - { - color_tree_cleanup(tree->children[i]); - lodepng_free(tree->children[i]); - } - } -} - -/*returns -1 if color not present, its index otherwise*/ -static int color_tree_get(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) -{ - int bit = 0; - for (bit = 0; bit < 8; ++bit) - { - int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1); - if (!tree->children[i]) return -1; - else tree = tree->children[i]; - } - return tree ? tree->index : -1; -} - -#ifdef LODEPNG_COMPILE_ENCODER -static int color_tree_has(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) -{ - return color_tree_get(tree, r, g, b, a) >= 0; -} -#endif /*LODEPNG_COMPILE_ENCODER*/ - -/*color is not allowed to already exist. -Index should be >= 0 (it's signed to be compatible with using -1 for "doesn't exist")*/ -static void color_tree_add(ColorTree* tree, - unsigned char r, unsigned char g, unsigned char b, unsigned char a, unsigned index) -{ - int bit; - for (bit = 0; bit < 8; ++bit) - { - int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1); - if (!tree->children[i]) - { - tree->children[i] = (ColorTree*)lodepng_malloc(sizeof(ColorTree)); - color_tree_init(tree->children[i]); - } - tree = tree->children[i]; - } - tree->index = (int)index; -} - -/*put a pixel, given its RGBA color, into image of any color type*/ -static unsigned rgba8ToPixel(unsigned char* out, size_t i, - const LodePNGColorMode* mode, ColorTree* tree /*for palette*/, - unsigned char r, unsigned char g, unsigned char b, unsigned char a) -{ - if (mode->colortype == LCT_GREY) - { - unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/; - if (mode->bitdepth == 8) out[i] = grey; - else if (mode->bitdepth == 16) out[i * 2 + 0] = out[i * 2 + 1] = grey; - else - { - /*take the most significant bits of grey*/ - grey = (grey >> (8 - mode->bitdepth)) & ((1 << mode->bitdepth) - 1); - addColorBits(out, i, mode->bitdepth, grey); - } - } - else if (mode->colortype == LCT_RGB) - { - if (mode->bitdepth == 8) - { - out[i * 3 + 0] = r; - out[i * 3 + 1] = g; - out[i * 3 + 2] = b; - } - else - { - out[i * 6 + 0] = out[i * 6 + 1] = r; - out[i * 6 + 2] = out[i * 6 + 3] = g; - out[i * 6 + 4] = out[i * 6 + 5] = b; - } - } - else if (mode->colortype == LCT_PALETTE) - { - int index = color_tree_get(tree, r, g, b, a); - if (index < 0) return 82; /*color not in palette*/ - if (mode->bitdepth == 8) out[i] = index; - else addColorBits(out, i, mode->bitdepth, (unsigned)index); - } - else if (mode->colortype == LCT_GREY_ALPHA) - { - unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/; - if (mode->bitdepth == 8) - { - out[i * 2 + 0] = grey; - out[i * 2 + 1] = a; - } - else if (mode->bitdepth == 16) - { - out[i * 4 + 0] = out[i * 4 + 1] = grey; - out[i * 4 + 2] = out[i * 4 + 3] = a; - } - } - else if (mode->colortype == LCT_RGBA) - { - if (mode->bitdepth == 8) - { - out[i * 4 + 0] = r; - out[i * 4 + 1] = g; - out[i * 4 + 2] = b; - out[i * 4 + 3] = a; - } - else - { - out[i * 8 + 0] = out[i * 8 + 1] = r; - out[i * 8 + 2] = out[i * 8 + 3] = g; - out[i * 8 + 4] = out[i * 8 + 5] = b; - out[i * 8 + 6] = out[i * 8 + 7] = a; - } - } - - return 0; /*no error*/ -} - -/*put a pixel, given its RGBA16 color, into image of any color 16-bitdepth type*/ -static void rgba16ToPixel(unsigned char* out, size_t i, - const LodePNGColorMode* mode, - unsigned short r, unsigned short g, unsigned short b, unsigned short a) -{ - if (mode->colortype == LCT_GREY) - { - unsigned short grey = r; /*((unsigned)r + g + b) / 3*/; - out[i * 2 + 0] = (grey >> 8) & 255; - out[i * 2 + 1] = grey & 255; - } - else if (mode->colortype == LCT_RGB) - { - out[i * 6 + 0] = (r >> 8) & 255; - out[i * 6 + 1] = r & 255; - out[i * 6 + 2] = (g >> 8) & 255; - out[i * 6 + 3] = g & 255; - out[i * 6 + 4] = (b >> 8) & 255; - out[i * 6 + 5] = b & 255; - } - else if (mode->colortype == LCT_GREY_ALPHA) - { - unsigned short grey = r; /*((unsigned)r + g + b) / 3*/; - out[i * 4 + 0] = (grey >> 8) & 255; - out[i * 4 + 1] = grey & 255; - out[i * 4 + 2] = (a >> 8) & 255; - out[i * 4 + 3] = a & 255; - } - else if (mode->colortype == LCT_RGBA) - { - out[i * 8 + 0] = (r >> 8) & 255; - out[i * 8 + 1] = r & 255; - out[i * 8 + 2] = (g >> 8) & 255; - out[i * 8 + 3] = g & 255; - out[i * 8 + 4] = (b >> 8) & 255; - out[i * 8 + 5] = b & 255; - out[i * 8 + 6] = (a >> 8) & 255; - out[i * 8 + 7] = a & 255; - } -} - -/*Get RGBA8 color of pixel with index i (y * width + x) from the raw image with given color type.*/ -static void getPixelColorRGBA8(unsigned char* r, unsigned char* g, - unsigned char* b, unsigned char* a, - const unsigned char* in, size_t i, - const LodePNGColorMode* mode) -{ - if (mode->colortype == LCT_GREY) - { - if (mode->bitdepth == 8) - { - *r = *g = *b = in[i]; - if (mode->key_defined && *r == mode->key_r) *a = 0; - else *a = 255; - } - else if (mode->bitdepth == 16) - { - *r = *g = *b = in[i * 2 + 0]; - if (mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0; - else *a = 255; - } - else - { - unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/ - size_t j = i * mode->bitdepth; - unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth); - *r = *g = *b = (value * 255) / highest; - if (mode->key_defined && value == mode->key_r) *a = 0; - else *a = 255; - } - } - else if (mode->colortype == LCT_RGB) - { - if (mode->bitdepth == 8) - { - *r = in[i * 3 + 0]; *g = in[i * 3 + 1]; *b = in[i * 3 + 2]; - if (mode->key_defined && *r == mode->key_r && *g == mode->key_g && *b == mode->key_b) *a = 0; - else *a = 255; - } - else - { - *r = in[i * 6 + 0]; - *g = in[i * 6 + 2]; - *b = in[i * 6 + 4]; - if (mode->key_defined && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r - && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g - && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0; - else *a = 255; - } - } - else if (mode->colortype == LCT_PALETTE) - { - unsigned index; - if (mode->bitdepth == 8) index = in[i]; - else - { - size_t j = i * mode->bitdepth; - index = readBitsFromReversedStream(&j, in, mode->bitdepth); - } - - if (index >= mode->palettesize) - { - /*This is an error according to the PNG spec, but common PNG decoders make it black instead. - Done here too, slightly faster due to no error handling needed.*/ - *r = *g = *b = 0; - *a = 255; - } - else - { - *r = mode->palette[index * 4 + 0]; - *g = mode->palette[index * 4 + 1]; - *b = mode->palette[index * 4 + 2]; - *a = mode->palette[index * 4 + 3]; - } - } - else if (mode->colortype == LCT_GREY_ALPHA) - { - if (mode->bitdepth == 8) - { - *r = *g = *b = in[i * 2 + 0]; - *a = in[i * 2 + 1]; - } - else - { - *r = *g = *b = in[i * 4 + 0]; - *a = in[i * 4 + 2]; - } - } - else if (mode->colortype == LCT_RGBA) - { - if (mode->bitdepth == 8) - { - *r = in[i * 4 + 0]; - *g = in[i * 4 + 1]; - *b = in[i * 4 + 2]; - *a = in[i * 4 + 3]; - } - else - { - *r = in[i * 8 + 0]; - *g = in[i * 8 + 2]; - *b = in[i * 8 + 4]; - *a = in[i * 8 + 6]; - } - } -} - -/*Similar to getPixelColorRGBA8, but with all the for loops inside of the color -mode test cases, optimized to convert the colors much faster, when converting -to RGBA or RGB with 8 bit per cannel. buffer must be RGBA or RGB output with -enough memory, if has_alpha is true the output is RGBA. mode has the color mode -of the input buffer.*/ -static void getPixelColorsRGBA8(unsigned char* buffer, size_t numpixels, - unsigned has_alpha, const unsigned char* in, - const LodePNGColorMode* mode) -{ - unsigned num_channels = has_alpha ? 4 : 3; - size_t i; - if (mode->colortype == LCT_GREY) - { - if (mode->bitdepth == 8) - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = buffer[1] = buffer[2] = in[i]; - if (has_alpha) buffer[3] = mode->key_defined && in[i] == mode->key_r ? 0 : 255; - } - } - else if (mode->bitdepth == 16) - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = buffer[1] = buffer[2] = in[i * 2]; - if (has_alpha) buffer[3] = mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r ? 0 : 255; - } - } - else - { - unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/ - size_t j = 0; - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth); - buffer[0] = buffer[1] = buffer[2] = (value * 255) / highest; - if (has_alpha) buffer[3] = mode->key_defined && value == mode->key_r ? 0 : 255; - } - } - } - else if (mode->colortype == LCT_RGB) - { - if (mode->bitdepth == 8) - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = in[i * 3 + 0]; - buffer[1] = in[i * 3 + 1]; - buffer[2] = in[i * 3 + 2]; - if (has_alpha) buffer[3] = mode->key_defined && buffer[0] == mode->key_r - && buffer[1] == mode->key_g && buffer[2] == mode->key_b ? 0 : 255; - } - } - else - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = in[i * 6 + 0]; - buffer[1] = in[i * 6 + 2]; - buffer[2] = in[i * 6 + 4]; - if (has_alpha) buffer[3] = mode->key_defined - && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r - && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g - && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b ? 0 : 255; - } - } - } - else if (mode->colortype == LCT_PALETTE) - { - unsigned index; - size_t j = 0; - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - if (mode->bitdepth == 8) index = in[i]; - else index = readBitsFromReversedStream(&j, in, mode->bitdepth); - - if (index >= mode->palettesize) - { - /*This is an error according to the PNG spec, but most PNG decoders make it black instead. - Done here too, slightly faster due to no error handling needed.*/ - buffer[0] = buffer[1] = buffer[2] = 0; - if (has_alpha) buffer[3] = 255; - } - else - { - buffer[0] = mode->palette[index * 4 + 0]; - buffer[1] = mode->palette[index * 4 + 1]; - buffer[2] = mode->palette[index * 4 + 2]; - if (has_alpha) buffer[3] = mode->palette[index * 4 + 3]; - } - } - } - else if (mode->colortype == LCT_GREY_ALPHA) - { - if (mode->bitdepth == 8) - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = buffer[1] = buffer[2] = in[i * 2 + 0]; - if (has_alpha) buffer[3] = in[i * 2 + 1]; - } - } - else - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = buffer[1] = buffer[2] = in[i * 4 + 0]; - if (has_alpha) buffer[3] = in[i * 4 + 2]; - } - } - } - else if (mode->colortype == LCT_RGBA) - { - if (mode->bitdepth == 8) - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = in[i * 4 + 0]; - buffer[1] = in[i * 4 + 1]; - buffer[2] = in[i * 4 + 2]; - if (has_alpha) buffer[3] = in[i * 4 + 3]; - } - } - else - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = in[i * 8 + 0]; - buffer[1] = in[i * 8 + 2]; - buffer[2] = in[i * 8 + 4]; - if (has_alpha) buffer[3] = in[i * 8 + 6]; - } - } - } -} - -/*Get RGBA16 color of pixel with index i (y * width + x) from the raw image with -given color type, but the given color type must be 16-bit itself.*/ -static void getPixelColorRGBA16(unsigned short* r, unsigned short* g, unsigned short* b, unsigned short* a, - const unsigned char* in, size_t i, const LodePNGColorMode* mode) -{ - if (mode->colortype == LCT_GREY) - { - *r = *g = *b = 256 * in[i * 2 + 0] + in[i * 2 + 1]; - if (mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0; - else *a = 65535; - } - else if (mode->colortype == LCT_RGB) - { - *r = 256u * in[i * 6 + 0] + in[i * 6 + 1]; - *g = 256u * in[i * 6 + 2] + in[i * 6 + 3]; - *b = 256u * in[i * 6 + 4] + in[i * 6 + 5]; - if (mode->key_defined - && 256u * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r - && 256u * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g - && 256u * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0; - else *a = 65535; - } - else if (mode->colortype == LCT_GREY_ALPHA) - { - *r = *g = *b = 256u * in[i * 4 + 0] + in[i * 4 + 1]; - *a = 256u * in[i * 4 + 2] + in[i * 4 + 3]; - } - else if (mode->colortype == LCT_RGBA) - { - *r = 256u * in[i * 8 + 0] + in[i * 8 + 1]; - *g = 256u * in[i * 8 + 2] + in[i * 8 + 3]; - *b = 256u * in[i * 8 + 4] + in[i * 8 + 5]; - *a = 256u * in[i * 8 + 6] + in[i * 8 + 7]; - } -} - -unsigned lodepng_convert(unsigned char* out, const unsigned char* in, - const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in, - unsigned w, unsigned h) -{ - size_t i; - ColorTree tree; - size_t numpixels = w * h; - - if (lodepng_color_mode_equal(mode_out, mode_in)) - { - size_t numbytes = lodepng_get_raw_size(w, h, mode_in); - for (i = 0; i != numbytes; ++i) out[i] = in[i]; - return 0; - } - - if (mode_out->colortype == LCT_PALETTE) - { - size_t palettesize = mode_out->palettesize; - const unsigned char* palette = mode_out->palette; - size_t palsize = (size_t)(1ull << mode_out->bitdepth); - /*if the user specified output palette but did not give the values, assume - they want the values of the input color type (assuming that one is palette). - Note that we never create a new palette ourselves.*/ - if (palettesize == 0) - { - palettesize = mode_in->palettesize; - palette = mode_in->palette; - } - if (palettesize < palsize) palsize = palettesize; - color_tree_init(&tree); - for (i = 0; i != palsize; ++i) - { - const unsigned char* p = &palette[i * 4]; - color_tree_add(&tree, p[0], p[1], p[2], p[3], (unsigned int)i); - } - } - - if (mode_in->bitdepth == 16 && mode_out->bitdepth == 16) - { - for (i = 0; i != numpixels; ++i) - { - unsigned short r = 0, g = 0, b = 0, a = 0; - getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in); - rgba16ToPixel(out, i, mode_out, r, g, b, a); - } - } - else if (mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGBA) - { - getPixelColorsRGBA8(out, numpixels, 1, in, mode_in); - } - else if (mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGB) - { - getPixelColorsRGBA8(out, numpixels, 0, in, mode_in); - } - else - { - unsigned char r = 0, g = 0, b = 0, a = 0; - for (i = 0; i != numpixels; ++i) - { - getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in); - CERROR_TRY_RETURN(rgba8ToPixel(out, i, mode_out, &tree, r, g, b, a)); - } - } - - if (mode_out->colortype == LCT_PALETTE) - { - color_tree_cleanup(&tree); - } - - return 0; /*no error*/ -} - -#ifdef LODEPNG_COMPILE_ENCODER - -void lodepng_color_profile_init(LodePNGColorProfile* profile) -{ - profile->colored = 0; - profile->key = 0; - profile->key_r = profile->key_g = profile->key_b = 0; - profile->alpha = 0; - profile->numcolors = 0; - profile->bits = 1; -} - -/*function used for debug purposes with C++*/ -/*void printColorProfile(LodePNGColorProfile* p) -{ - std::cout << "colored: " << (int)p->colored << ", "; - std::cout << "key: " << (int)p->key << ", "; - std::cout << "key_r: " << (int)p->key_r << ", "; - std::cout << "key_g: " << (int)p->key_g << ", "; - std::cout << "key_b: " << (int)p->key_b << ", "; - std::cout << "alpha: " << (int)p->alpha << ", "; - std::cout << "numcolors: " << (int)p->numcolors << ", "; - std::cout << "bits: " << (int)p->bits << std::endl; -}*/ - -/*Returns how many bits needed to represent given value (max 8 bit)*/ -static unsigned getValueRequiredBits(unsigned char value) -{ - if (value == 0 || value == 255) return 1; - /*The scaling of 2-bit and 4-bit values uses multiples of 85 and 17*/ - if (value % 17 == 0) return value % 85 == 0 ? 2 : 4; - return 8; -} - -/*profile must already have been inited with mode. -It's ok to set some parameters of profile to done already.*/ -unsigned lodepng_get_color_profile(LodePNGColorProfile* profile, - const unsigned char* in, unsigned w, unsigned h, - const LodePNGColorMode* mode) -{ - unsigned error = 0; - size_t i; - ColorTree tree; - size_t numpixels = w * h; - - unsigned colored_done = lodepng_is_greyscale_type(mode) ? 1 : 0; - unsigned alpha_done = lodepng_can_have_alpha(mode) ? 0 : 1; - unsigned numcolors_done = 0; - unsigned bpp = lodepng_get_bpp(mode); - unsigned bits_done = bpp == 1 ? 1 : 0; - unsigned maxnumcolors = 257; - unsigned sixteen = 0; - if (bpp <= 8) maxnumcolors = bpp == 1 ? 2 : (bpp == 2 ? 4 : (bpp == 4 ? 16 : 256)); - - color_tree_init(&tree); - - /*Check if the 16-bit input is truly 16-bit*/ - if (mode->bitdepth == 16) - { - unsigned short r, g, b, a; - for (i = 0; i != numpixels; ++i) - { - getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); - if ((r & 255) != ((r >> 8) & 255) || (g & 255) != ((g >> 8) & 255) || - (b & 255) != ((b >> 8) & 255) || (a & 255) != ((a >> 8) & 255)) /*first and second byte differ*/ - { - sixteen = 1; - break; - } - } - } - - if (sixteen) - { - unsigned short r = 0, g = 0, b = 0, a = 0; - profile->bits = 16; - bits_done = numcolors_done = 1; /*counting colors no longer useful, palette doesn't support 16-bit*/ - - for (i = 0; i != numpixels; ++i) - { - getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); - - if (!colored_done && (r != g || r != b)) - { - profile->colored = 1; - colored_done = 1; - } - - if (!alpha_done) - { - unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b); - if (a != 65535 && (a != 0 || (profile->key && !matchkey))) - { - profile->alpha = 1; - profile->key = 0; - alpha_done = 1; - } - else if (a == 0 && !profile->alpha && !profile->key) - { - profile->key = 1; - profile->key_r = r; - profile->key_g = g; - profile->key_b = b; - } - else if (a == 65535 && profile->key && matchkey) - { - /* Color key cannot be used if an opaque pixel also has that RGB color. */ - profile->alpha = 1; - profile->key = 0; - alpha_done = 1; - } - } - if (alpha_done && numcolors_done && colored_done && bits_done) break; - } - - if (profile->key && !profile->alpha) - { - for (i = 0; i != numpixels; ++i) - { - getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); - if (a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b) - { - /* Color key cannot be used if an opaque pixel also has that RGB color. */ - profile->alpha = 1; - profile->key = 0; - alpha_done = 1; - } - } - } - } - else /* < 16-bit */ - { - unsigned char r = 0, g = 0, b = 0, a = 0; - for (i = 0; i != numpixels; ++i) - { - getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode); - - if (!bits_done && profile->bits < 8) - { - /*only r is checked, < 8 bits is only relevant for greyscale*/ - unsigned bits = getValueRequiredBits(r); - if (bits > profile->bits) profile->bits = bits; - } - bits_done = (profile->bits >= bpp); - - if (!colored_done && (r != g || r != b)) - { - profile->colored = 1; - colored_done = 1; - if (profile->bits < 8) profile->bits = 8; /*PNG has no colored modes with less than 8-bit per channel*/ - } - - if (!alpha_done) - { - unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b); - if (a != 255 && (a != 0 || (profile->key && !matchkey))) - { - profile->alpha = 1; - profile->key = 0; - alpha_done = 1; - if (profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ - } - else if (a == 0 && !profile->alpha && !profile->key) - { - profile->key = 1; - profile->key_r = r; - profile->key_g = g; - profile->key_b = b; - } - else if (a == 255 && profile->key && matchkey) - { - /* Color key cannot be used if an opaque pixel also has that RGB color. */ - profile->alpha = 1; - profile->key = 0; - alpha_done = 1; - if (profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ - } - } - - if (!numcolors_done) - { - if (!color_tree_has(&tree, r, g, b, a)) - { - color_tree_add(&tree, r, g, b, a, profile->numcolors); - if (profile->numcolors < 256) - { - unsigned char* p = profile->palette; - unsigned n = profile->numcolors; - p[n * 4 + 0] = r; - p[n * 4 + 1] = g; - p[n * 4 + 2] = b; - p[n * 4 + 3] = a; - } - ++profile->numcolors; - numcolors_done = profile->numcolors >= maxnumcolors; - } - } - - if (alpha_done && numcolors_done && colored_done && bits_done) break; - } - - if (profile->key && !profile->alpha) - { - for (i = 0; i != numpixels; ++i) - { - getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode); - if (a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b) - { - /* Color key cannot be used if an opaque pixel also has that RGB color. */ - profile->alpha = 1; - profile->key = 0; - alpha_done = 1; - if (profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ - } - } - } - - /*make the profile's key always 16-bit for consistency - repeat each byte twice*/ - profile->key_r += (profile->key_r << 8); - profile->key_g += (profile->key_g << 8); - profile->key_b += (profile->key_b << 8); - } - - color_tree_cleanup(&tree); - return error; -} - -/*Automatically chooses color type that gives smallest amount of bits in the -output image, e.g. grey if there are only greyscale pixels, palette if there -are less than 256 colors, ... -Updates values of mode with a potentially smaller color model. mode_out should -contain the user chosen color model, but will be overwritten with the new chosen one.*/ -unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out, - const unsigned char* image, unsigned w, unsigned h, - const LodePNGColorMode* mode_in) -{ - LodePNGColorProfile prof; - unsigned error = 0; - unsigned i, n, palettebits, palette_ok; - - lodepng_color_profile_init(&prof); - error = lodepng_get_color_profile(&prof, image, w, h, mode_in); - if (error) return error; - mode_out->key_defined = 0; - - if (prof.key && w * h <= 16) - { - prof.alpha = 1; /*too few pixels to justify tRNS chunk overhead*/ - prof.key = 0; - if (prof.bits < 8) prof.bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ - } - n = prof.numcolors; - palettebits = n <= 2 ? 1 : (n <= 4 ? 2 : (n <= 16 ? 4 : 8)); - palette_ok = n <= 256 && prof.bits <= 8; - if (w * h < n * 2) palette_ok = 0; /*don't add palette overhead if image has only a few pixels*/ - if (!prof.colored && prof.bits <= palettebits) palette_ok = 0; /*grey is less overhead*/ - - if (palette_ok) - { - unsigned char* p = prof.palette; - lodepng_palette_clear(mode_out); /*remove potential earlier palette*/ - for (i = 0; i != prof.numcolors; ++i) - { - error = lodepng_palette_add(mode_out, p[i * 4 + 0], p[i * 4 + 1], p[i * 4 + 2], p[i * 4 + 3]); - if (error) break; - } - - mode_out->colortype = LCT_PALETTE; - mode_out->bitdepth = palettebits; - - if (mode_in->colortype == LCT_PALETTE && mode_in->palettesize >= mode_out->palettesize - && mode_in->bitdepth == mode_out->bitdepth) - { - /*If input should have same palette colors, keep original to preserve its order and prevent conversion*/ - lodepng_color_mode_cleanup(mode_out); - lodepng_color_mode_copy(mode_out, mode_in); - } - } - else /*8-bit or 16-bit per channel*/ - { - mode_out->bitdepth = prof.bits; - mode_out->colortype = prof.alpha ? (prof.colored ? LCT_RGBA : LCT_GREY_ALPHA) - : (prof.colored ? LCT_RGB : LCT_GREY); - - if (prof.key) - { - unsigned mask = (1u << mode_out->bitdepth) - 1u; /*profile always uses 16-bit, mask converts it*/ - mode_out->key_r = prof.key_r & mask; - mode_out->key_g = prof.key_g & mask; - mode_out->key_b = prof.key_b & mask; - mode_out->key_defined = 1; - } - } - - return error; -} - -#endif /* #ifdef LODEPNG_COMPILE_ENCODER */ - -/* -Paeth predicter, used by PNG filter type 4 -The parameters are of type short, but should come from unsigned chars, the shorts -are only needed to make the paeth calculation correct. -*/ -static unsigned char paethPredictor(short a, short b, short c) -{ - short pa = abs(b - c); - short pb = abs(a - c); - short pc = abs(a + b - c - c); - - if (pc < pa && pc < pb) return (unsigned char)c; - else if (pb < pa) return (unsigned char)b; - else return (unsigned char)a; -} - -/*shared values used by multiple Adam7 related functions*/ - -static const unsigned ADAM7_IX[7] = { 0, 4, 0, 2, 0, 1, 0 }; /*x start values*/ -static const unsigned ADAM7_IY[7] = { 0, 0, 4, 0, 2, 0, 1 }; /*y start values*/ -static const unsigned ADAM7_DX[7] = { 8, 8, 4, 4, 2, 2, 1 }; /*x delta values*/ -static const unsigned ADAM7_DY[7] = { 8, 8, 8, 4, 4, 2, 2 }; /*y delta values*/ - -/* -Outputs various dimensions and positions in the image related to the Adam7 reduced images. -passw: output containing the width of the 7 passes -passh: output containing the height of the 7 passes -filter_passstart: output containing the index of the start and end of each - reduced image with filter bytes -padded_passstart output containing the index of the start and end of each - reduced image when without filter bytes but with padded scanlines -passstart: output containing the index of the start and end of each reduced - image without padding between scanlines, but still padding between the images -w, h: width and height of non-interlaced image -bpp: bits per pixel -"padded" is only relevant if bpp is less than 8 and a scanline or image does not - end at a full byte -*/ -static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8], - size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp) -{ - /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/ - unsigned i; - - /*calculate width and height in pixels of each pass*/ - for (i = 0; i != 7; ++i) - { - passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i]; - passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i]; - if (passw[i] == 0) passh[i] = 0; - if (passh[i] == 0) passw[i] = 0; - } - - filter_passstart[0] = padded_passstart[0] = passstart[0] = 0; - for (i = 0; i != 7; ++i) - { - /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/ - filter_passstart[i + 1] = filter_passstart[i] - + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0); - /*bits padded if needed to fill full byte at end of each scanline*/ - padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8); - /*only padded at end of reduced image*/ - passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8; - } -} - -#ifdef LODEPNG_COMPILE_DECODER - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / PNG Decoder / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -/*read the information from the header and store it in the LodePNGInfo. return value is error*/ -unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state, - const unsigned char* in, size_t insize) -{ - LodePNGInfo* info = &state->info_png; - if (insize == 0 || in == 0) - { - CERROR_RETURN_ERROR(state->error, 48); /*error: the given data is empty*/ - } - if (insize < 33) - { - CERROR_RETURN_ERROR(state->error, 27); /*error: the data length is smaller than the length of a PNG header*/ - } - - /*when decoding a new PNG image, make sure all parameters created after previous decoding are reset*/ - lodepng_info_cleanup(info); - lodepng_info_init(info); - - if (in[0] != 137 || in[1] != 80 || in[2] != 78 || in[3] != 71 - || in[4] != 13 || in[5] != 10 || in[6] != 26 || in[7] != 10) - { - CERROR_RETURN_ERROR(state->error, 28); /*error: the first 8 bytes are not the correct PNG signature*/ - } - if (lodepng_chunk_length(in + 8) != 13) - { - CERROR_RETURN_ERROR(state->error, 94); /*error: header size must be 13 bytes*/ - } - if (!lodepng_chunk_type_equals(in + 8, "IHDR")) - { - CERROR_RETURN_ERROR(state->error, 29); /*error: it doesn't start with a IHDR chunk!*/ - } - - /*read the values given in the header*/ - *w = lodepng_read32bitInt(&in[16]); - *h = lodepng_read32bitInt(&in[20]); - info->color.bitdepth = in[24]; - info->color.colortype = (LodePNGColorType)in[25]; - info->compression_method = in[26]; - info->filter_method = in[27]; - info->interlace_method = in[28]; - - if (*w == 0 || *h == 0) - { - CERROR_RETURN_ERROR(state->error, 93); - } - - if (!state->decoder.ignore_crc) - { - unsigned CRC = lodepng_read32bitInt(&in[29]); - unsigned checksum = lodepng_crc32(&in[12], 17); - if (CRC != checksum) - { - CERROR_RETURN_ERROR(state->error, 57); /*invalid CRC*/ - } - } - - /*error: only compression method 0 is allowed in the specification*/ - if (info->compression_method != 0) CERROR_RETURN_ERROR(state->error, 32); - /*error: only filter method 0 is allowed in the specification*/ - if (info->filter_method != 0) CERROR_RETURN_ERROR(state->error, 33); - /*error: only interlace methods 0 and 1 exist in the specification*/ - if (info->interlace_method > 1) CERROR_RETURN_ERROR(state->error, 34); - - state->error = checkColorValidity(info->color.colortype, info->color.bitdepth); - return state->error; -} - -static unsigned unfilterScanline(unsigned char* recon, const unsigned char* scanline, const unsigned char* precon, - size_t bytewidth, unsigned char filterType, size_t length) -{ - /* - For PNG filter method 0 - unfilter a PNG image scanline by scanline. when the pixels are smaller than 1 byte, - the filter works byte per byte (bytewidth = 1) - precon is the previous unfiltered scanline, recon the result, scanline the current one - the incoming scanlines do NOT include the filtertype byte, that one is given in the parameter filterType instead - recon and scanline MAY be the same memory address! precon must be disjoint. - */ - - size_t i; - switch (filterType) - { - case 0: - for (i = 0; i != length; ++i) recon[i] = scanline[i]; - break; - case 1: - for (i = 0; i != bytewidth; ++i) recon[i] = scanline[i]; - for (i = bytewidth; i < length; ++i) recon[i] = scanline[i] + recon[i - bytewidth]; - break; - case 2: - if (precon) - { - for (i = 0; i != length; ++i) recon[i] = scanline[i] + precon[i]; - } - else - { - for (i = 0; i != length; ++i) recon[i] = scanline[i]; - } - break; - case 3: - if (precon) - { - for (i = 0; i != bytewidth; ++i) recon[i] = scanline[i] + (precon[i] >> 1); - for (i = bytewidth; i < length; ++i) recon[i] = scanline[i] + ((recon[i - bytewidth] + precon[i]) >> 1); - } - else - { - for (i = 0; i != bytewidth; ++i) recon[i] = scanline[i]; - for (i = bytewidth; i < length; ++i) recon[i] = scanline[i] + (recon[i - bytewidth] >> 1); - } - break; - case 4: - if (precon) - { - for (i = 0; i != bytewidth; ++i) - { - recon[i] = (scanline[i] + precon[i]); /*paethPredictor(0, precon[i], 0) is always precon[i]*/ - } - for (i = bytewidth; i < length; ++i) - { - recon[i] = (scanline[i] + paethPredictor(recon[i - bytewidth], precon[i], precon[i - bytewidth])); - } - } - else - { - for (i = 0; i != bytewidth; ++i) - { - recon[i] = scanline[i]; - } - for (i = bytewidth; i < length; ++i) - { - /*paethPredictor(recon[i - bytewidth], 0, 0) is always recon[i - bytewidth]*/ - recon[i] = (scanline[i] + recon[i - bytewidth]); - } - } - break; - default: return 36; /*error: unexisting filter type given*/ - } - return 0; -} - -static unsigned unfilter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) -{ - /* - For PNG filter method 0 - this function unfilters a single image (e.g. without interlacing this is called once, with Adam7 seven times) - out must have enough bytes allocated already, in must have the scanlines + 1 filtertype byte per scanline - w and h are image dimensions or dimensions of reduced image, bpp is bits per pixel - in and out are allowed to be the same memory address (but aren't the same size since in has the extra filter bytes) - */ - - unsigned y; - unsigned char* prevline = 0; - - /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ - size_t bytewidth = (bpp + 7) / 8; - size_t linebytes = (w * bpp + 7) / 8; - - for (y = 0; y < h; ++y) - { - size_t outindex = linebytes * y; - size_t inindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ - unsigned char filterType = in[inindex]; - - CERROR_TRY_RETURN(unfilterScanline(&out[outindex], &in[inindex + 1], prevline, bytewidth, filterType, linebytes)); - - prevline = &out[outindex]; - } - - return 0; -} - -/* -in: Adam7 interlaced image, with no padding bits between scanlines, but between - reduced images so that each reduced image starts at a byte. -out: the same pixels, but re-ordered so that they're now a non-interlaced image with size w*h -bpp: bits per pixel -out has the following size in bits: w * h * bpp. -in is possibly bigger due to padding bits between reduced images. -out must be big enough AND must be 0 everywhere if bpp < 8 in the current implementation -(because that's likely a little bit faster) -NOTE: comments about padding bits are only relevant if bpp < 8 -*/ -static void Adam7_deinterlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) -{ - unsigned passw[7], passh[7]; - size_t filter_passstart[8], padded_passstart[8], passstart[8]; - unsigned i; - - Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); - - if (bpp >= 8) - { - for (i = 0; i != 7; ++i) - { - unsigned x, y, b; - size_t bytewidth = bpp / 8; - for (y = 0; y < passh[i]; ++y) - for (x = 0; x < passw[i]; ++x) - { - size_t pixelinstart = passstart[i] + (y * passw[i] + x) * bytewidth; - size_t pixeloutstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth; - for (b = 0; b < bytewidth; ++b) - { - out[pixeloutstart + b] = in[pixelinstart + b]; - } - } - } - } - else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ - { - for (i = 0; i != 7; ++i) - { - unsigned x, y, b; - unsigned ilinebits = bpp * passw[i]; - unsigned olinebits = bpp * w; - size_t obp, ibp; /*bit pointers (for out and in buffer)*/ - for (y = 0; y < passh[i]; ++y) - for (x = 0; x < passw[i]; ++x) - { - ibp = (8 * passstart[i]) + (y * ilinebits + x * bpp); - obp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp; - for (b = 0; b < bpp; ++b) - { - unsigned char bit = readBitFromReversedStream(&ibp, in); - /*note that this function assumes the out buffer is completely 0, use setBitOfReversedStream otherwise*/ - setBitOfReversedStream0(&obp, out, bit); - } - } - } - } -} - -static void removePaddingBits(unsigned char* out, const unsigned char* in, - size_t olinebits, size_t ilinebits, unsigned h) -{ - /* - After filtering there are still padding bits if scanlines have non multiple of 8 bit amounts. They need - to be removed (except at last scanline of (Adam7-reduced) image) before working with pure image buffers - for the Adam7 code, the color convert code and the output to the user. - in and out are allowed to be the same buffer, in may also be higher but still overlapping; in must - have >= ilinebits*h bits, out must have >= olinebits*h bits, olinebits must be <= ilinebits - also used to move bits after earlier such operations happened, e.g. in a sequence of reduced images from Adam7 - only useful if (ilinebits - olinebits) is a value in the range 1..7 - */ - unsigned y; - size_t diff = ilinebits - olinebits; - size_t ibp = 0, obp = 0; /*input and output bit pointers*/ - for (y = 0; y < h; ++y) - { - size_t x; - for (x = 0; x < olinebits; ++x) - { - unsigned char bit = readBitFromReversedStream(&ibp, in); - setBitOfReversedStream(&obp, out, bit); - } - ibp += diff; - } -} - -/*out must be buffer big enough to contain full image, and in must contain the full decompressed data from -the IDAT chunks (with filter index bytes and possible padding bits) -return value is error*/ -static unsigned postProcessScanlines(unsigned char* out, unsigned char* in, - unsigned w, unsigned h, const LodePNGInfo* info_png) -{ - /* - This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype. - Steps: - *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8) - *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace - NOTE: the in buffer will be overwritten with intermediate data! - */ - unsigned bpp = lodepng_get_bpp(&info_png->color); - if (bpp == 0) return 31; /*error: invalid colortype*/ - - if (info_png->interlace_method == 0) - { - if (bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) - { - CERROR_TRY_RETURN(unfilter(in, in, w, h, bpp)); - removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h); - } - /*we can immediately filter into the out buffer, no other steps needed*/ - else CERROR_TRY_RETURN(unfilter(out, in, w, h, bpp)); - } - else /*interlace_method is 1 (Adam7)*/ - { - unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8]; - unsigned i; - - Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); - - for (i = 0; i != 7; ++i) - { - CERROR_TRY_RETURN(unfilter(&in[padded_passstart[i]], &in[filter_passstart[i]], passw[i], passh[i], bpp)); - /*TODO: possible efficiency improvement: if in this reduced image the bits fit nicely in 1 scanline, - move bytes instead of bits or move not at all*/ - if (bpp < 8) - { - /*remove padding bits in scanlines; after this there still may be padding - bits between the different reduced images: each reduced image still starts nicely at a byte*/ - removePaddingBits(&in[passstart[i]], &in[padded_passstart[i]], passw[i] * bpp, - ((passw[i] * bpp + 7) / 8) * 8, passh[i]); - } - } - - Adam7_deinterlace(out, in, w, h, bpp); - } - - return 0; -} - -static unsigned readChunk_PLTE(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) -{ - unsigned pos = 0, i; - if (color->palette) lodepng_free(color->palette); - color->palettesize = chunkLength / 3; - color->palette = (unsigned char*)lodepng_malloc(4 * color->palettesize); - if (!color->palette && color->palettesize) - { - color->palettesize = 0; - return 83; /*alloc fail*/ - } - if (color->palettesize > 256) return 38; /*error: palette too big*/ - - for (i = 0; i != color->palettesize; ++i) - { - color->palette[4 * i + 0] = data[pos++]; /*R*/ - color->palette[4 * i + 1] = data[pos++]; /*G*/ - color->palette[4 * i + 2] = data[pos++]; /*B*/ - color->palette[4 * i + 3] = 255; /*alpha*/ - } - - return 0; /* OK */ -} - -static unsigned readChunk_tRNS(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) -{ - unsigned i; - if (color->colortype == LCT_PALETTE) - { - /*error: more alpha values given than there are palette entries*/ - if (chunkLength > color->palettesize) return 38; - - for (i = 0; i != chunkLength; ++i) color->palette[4 * i + 3] = data[i]; - } - else if (color->colortype == LCT_GREY) - { - /*error: this chunk must be 2 bytes for greyscale image*/ - if (chunkLength != 2) return 30; - - color->key_defined = 1; - color->key_r = color->key_g = color->key_b = 256u * data[0] + data[1]; - } - else if (color->colortype == LCT_RGB) - { - /*error: this chunk must be 6 bytes for RGB image*/ - if (chunkLength != 6) return 41; - - color->key_defined = 1; - color->key_r = 256u * data[0] + data[1]; - color->key_g = 256u * data[2] + data[3]; - color->key_b = 256u * data[4] + data[5]; - } - else return 42; /*error: tRNS chunk not allowed for other color models*/ - - return 0; /* OK */ -} - - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS -/*background color chunk (bKGD)*/ -static unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) -{ - if (info->color.colortype == LCT_PALETTE) - { - /*error: this chunk must be 1 byte for indexed color image*/ - if (chunkLength != 1) return 43; - - info->background_defined = 1; - info->background_r = info->background_g = info->background_b = data[0]; - } - else if (info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) - { - /*error: this chunk must be 2 bytes for greyscale image*/ - if (chunkLength != 2) return 44; - - info->background_defined = 1; - info->background_r = info->background_g = info->background_b = 256u * data[0] + data[1]; - } - else if (info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) - { - /*error: this chunk must be 6 bytes for greyscale image*/ - if (chunkLength != 6) return 45; - - info->background_defined = 1; - info->background_r = 256u * data[0] + data[1]; - info->background_g = 256u * data[2] + data[3]; - info->background_b = 256u * data[4] + data[5]; - } - - return 0; /* OK */ -} - -/*text chunk (tEXt)*/ -static unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) -{ - unsigned error = 0; - char *key = 0, *str = 0; - unsigned i; - - while (!error) /*not really a while loop, only used to break on error*/ - { - unsigned length, string2_begin; - - length = 0; - while (length < chunkLength && data[length] != 0) ++length; - /*even though it's not allowed by the standard, no error is thrown if - there's no null termination char, if the text is empty*/ - if (length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ - - key = (char*)lodepng_malloc(length + 1); - if (!key) CERROR_BREAK(error, 83); /*alloc fail*/ - - key[length] = 0; - for (i = 0; i != length; ++i) key[i] = (char)data[i]; - - string2_begin = length + 1; /*skip keyword null terminator*/ - - length = (unsigned int)(chunkLength < string2_begin ? 0 : chunkLength - string2_begin); - str = (char*)lodepng_malloc(length + 1); - if (!str) CERROR_BREAK(error, 83); /*alloc fail*/ - - str[length] = 0; - for (i = 0; i != length; ++i) str[i] = (char)data[string2_begin + i]; - - error = lodepng_add_text(info, key, str); - - break; - } - - lodepng_free(key); - lodepng_free(str); - - return error; -} - -/*compressed text chunk (zTXt)*/ -static unsigned readChunk_zTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings, - const unsigned char* data, size_t chunkLength) -{ - unsigned error = 0; - unsigned i; - - unsigned length, string2_begin; - char *key = 0; - ucvector decoded; - - ucvector_init(&decoded); - - while (!error) /*not really a while loop, only used to break on error*/ - { - for (length = 0; length < chunkLength && data[length] != 0; ++length); - if (length + 2 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/ - if (length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ - - key = (char*)lodepng_malloc(length + 1); - if (!key) CERROR_BREAK(error, 83); /*alloc fail*/ - - key[length] = 0; - for (i = 0; i != length; ++i) key[i] = (char)data[i]; - - if (data[length + 1] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/ - - string2_begin = length + 2; - if (string2_begin > chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/ - - length = (unsigned int)(chunkLength - string2_begin); - /*will fail if zlib error, e.g. if length is too small*/ - error = zlib_decompress(&decoded.data, &decoded.size, - (unsigned char*)(&data[string2_begin]), - length, zlibsettings); - if (error) break; - ucvector_push_back(&decoded, 0); - - error = lodepng_add_text(info, key, (char*)decoded.data); - - break; - } - - lodepng_free(key); - ucvector_cleanup(&decoded); - - return error; -} - -/*international text chunk (iTXt)*/ -static unsigned readChunk_iTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings, - const unsigned char* data, size_t chunkLength) -{ - unsigned error = 0; - unsigned i; - - unsigned length, begin, compressed; - char *key = 0, *langtag = 0, *transkey = 0; - ucvector decoded; - ucvector_init(&decoded); - - while (!error) /*not really a while loop, only used to break on error*/ - { - /*Quick check if the chunk length isn't too small. Even without check - it'd still fail with other error checks below if it's too short. This just gives a different error code.*/ - if (chunkLength < 5) CERROR_BREAK(error, 30); /*iTXt chunk too short*/ - - /*read the key*/ - for (length = 0; length < chunkLength && data[length] != 0; ++length); - if (length + 3 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination char, corrupt?*/ - if (length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ - - key = (char*)lodepng_malloc(length + 1); - if (!key) CERROR_BREAK(error, 83); /*alloc fail*/ - - key[length] = 0; - for (i = 0; i != length; ++i) key[i] = (char)data[i]; - - /*read the compression method*/ - compressed = data[length + 1]; - if (data[length + 2] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/ - - /*even though it's not allowed by the standard, no error is thrown if - there's no null termination char, if the text is empty for the next 3 texts*/ - - /*read the langtag*/ - begin = length + 3; - length = 0; - for (i = begin; i < chunkLength && data[i] != 0; ++i) ++length; - - langtag = (char*)lodepng_malloc(length + 1); - if (!langtag) CERROR_BREAK(error, 83); /*alloc fail*/ - - langtag[length] = 0; - for (i = 0; i != length; ++i) langtag[i] = (char)data[begin + i]; - - /*read the transkey*/ - begin += length + 1; - length = 0; - for (i = begin; i < chunkLength && data[i] != 0; ++i) ++length; - - transkey = (char*)lodepng_malloc(length + 1); - if (!transkey) CERROR_BREAK(error, 83); /*alloc fail*/ - - transkey[length] = 0; - for (i = 0; i != length; ++i) transkey[i] = (char)data[begin + i]; - - /*read the actual text*/ - begin += length + 1; - - length = (unsigned int)(chunkLength < begin ? 0 : chunkLength - begin); - - if (compressed) - { - /*will fail if zlib error, e.g. if length is too small*/ - error = zlib_decompress(&decoded.data, &decoded.size, - (unsigned char*)(&data[begin]), - length, zlibsettings); - if (error) break; - if (decoded.allocsize < decoded.size) decoded.allocsize = decoded.size; - ucvector_push_back(&decoded, 0); - } - else - { - if (!ucvector_resize(&decoded, length + 1)) CERROR_BREAK(error, 83 /*alloc fail*/); - - decoded.data[length] = 0; - for (i = 0; i != length; ++i) decoded.data[i] = data[begin + i]; - } - - error = lodepng_add_itext(info, key, langtag, transkey, (char*)decoded.data); - - break; - } - - lodepng_free(key); - lodepng_free(langtag); - lodepng_free(transkey); - ucvector_cleanup(&decoded); - - return error; -} - -static unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) -{ - if (chunkLength != 7) return 73; /*invalid tIME chunk size*/ - - info->time_defined = 1; - info->time.year = 256u * data[0] + data[1]; - info->time.month = data[2]; - info->time.day = data[3]; - info->time.hour = data[4]; - info->time.minute = data[5]; - info->time.second = data[6]; - - return 0; /* OK */ -} - -static unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) -{ - if (chunkLength != 9) return 74; /*invalid pHYs chunk size*/ - - info->phys_defined = 1; - info->phys_x = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3]; - info->phys_y = 16777216u * data[4] + 65536u * data[5] + 256u * data[6] + data[7]; - info->phys_unit = data[8]; - - return 0; /* OK */ -} -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - -/*read a PNG, the result will be in the same color type as the PNG (hence "generic")*/ -static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h, - LodePNGState* state, - const unsigned char* in, size_t insize) -{ - unsigned char IEND = 0; - const unsigned char* chunk; - size_t i; - ucvector idat; /*the data from idat chunks*/ - ucvector scanlines; - size_t predict; - size_t numpixels; - size_t outsize = 0; - - /*for unknown chunk order*/ - unsigned unknown = 0; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - unsigned critical_pos = 1; /*1 = after IHDR, 2 = after PLTE, 3 = after IDAT*/ -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - - /*provide some proper output values if error will happen*/ - *out = 0; - - state->error = lodepng_inspect(w, h, state, in, insize); /*reads header and resets other parameters in state->info_png*/ - if (state->error) return; - - numpixels = *w * *h; - - /*multiplication overflow*/ - if (*h != 0 && numpixels / *h != *w) CERROR_RETURN(state->error, 92); - /*multiplication overflow possible further below. Allows up to 2^31-1 pixel - bytes with 16-bit RGBA, the rest is room for filter bytes.*/ - if (numpixels > 268435455) CERROR_RETURN(state->error, 92); - - ucvector_init(&idat); - chunk = &in[33]; /*first byte of the first chunk after the header*/ - - /*loop through the chunks, ignoring unknown chunks and stopping at IEND chunk. - IDAT data is put at the start of the in buffer*/ - while (!IEND && !state->error) - { - unsigned chunkLength; - const unsigned char* data; /*the data in the chunk*/ - - /*error: size of the in buffer too small to contain next chunk*/ - if ((size_t)((chunk - in) + 12) > insize || chunk < in) CERROR_BREAK(state->error, 30); - - /*length of the data of the chunk, excluding the length bytes, chunk type and CRC bytes*/ - chunkLength = lodepng_chunk_length(chunk); - /*error: chunk length larger than the max PNG chunk size*/ - if (chunkLength > 2147483647) CERROR_BREAK(state->error, 63); - - if ((size_t)((chunk - in) + chunkLength + 12) > insize || (chunk + chunkLength + 12) < in) - { - CERROR_BREAK(state->error, 64); /*error: size of the in buffer too small to contain next chunk*/ - } - - data = lodepng_chunk_data_const(chunk); - - /*IDAT chunk, containing compressed image data*/ - if (lodepng_chunk_type_equals(chunk, "IDAT")) - { - size_t oldsize = idat.size; - if (!ucvector_resize(&idat, oldsize + chunkLength)) CERROR_BREAK(state->error, 83 /*alloc fail*/); - for (i = 0; i != chunkLength; ++i) idat.data[oldsize + i] = data[i]; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - critical_pos = 3; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - } - /*IEND chunk*/ - else if (lodepng_chunk_type_equals(chunk, "IEND")) - { - IEND = 1; - } - /*palette chunk (PLTE)*/ - else if (lodepng_chunk_type_equals(chunk, "PLTE")) - { - state->error = readChunk_PLTE(&state->info_png.color, data, chunkLength); - if (state->error) break; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - critical_pos = 2; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - } - /*palette transparency chunk (tRNS)*/ - else if (lodepng_chunk_type_equals(chunk, "tRNS")) - { - state->error = readChunk_tRNS(&state->info_png.color, data, chunkLength); - if (state->error) break; - } -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - /*background color chunk (bKGD)*/ - else if (lodepng_chunk_type_equals(chunk, "bKGD")) - { - state->error = readChunk_bKGD(&state->info_png, data, chunkLength); - if (state->error) break; - } - /*text chunk (tEXt)*/ - else if (lodepng_chunk_type_equals(chunk, "tEXt")) - { - if (state->decoder.read_text_chunks) - { - state->error = readChunk_tEXt(&state->info_png, data, chunkLength); - if (state->error) break; - } - } - /*compressed text chunk (zTXt)*/ - else if (lodepng_chunk_type_equals(chunk, "zTXt")) - { - if (state->decoder.read_text_chunks) - { - state->error = readChunk_zTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength); - if (state->error) break; - } - } - /*international text chunk (iTXt)*/ - else if (lodepng_chunk_type_equals(chunk, "iTXt")) - { - if (state->decoder.read_text_chunks) - { - state->error = readChunk_iTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength); - if (state->error) break; - } - } - else if (lodepng_chunk_type_equals(chunk, "tIME")) - { - state->error = readChunk_tIME(&state->info_png, data, chunkLength); - if (state->error) break; - } - else if (lodepng_chunk_type_equals(chunk, "pHYs")) - { - state->error = readChunk_pHYs(&state->info_png, data, chunkLength); - if (state->error) break; - } -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - else /*it's not an implemented chunk type, so ignore it: skip over the data*/ - { - /*error: unknown critical chunk (5th bit of first byte of chunk type is 0)*/ - if (!lodepng_chunk_ancillary(chunk)) CERROR_BREAK(state->error, 69); - - unknown = 1; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - if (state->decoder.remember_unknown_chunks) - { - state->error = lodepng_chunk_append(&state->info_png.unknown_chunks_data[critical_pos - 1], - &state->info_png.unknown_chunks_size[critical_pos - 1], chunk); - if (state->error) break; - } -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - } - - if (!state->decoder.ignore_crc && !unknown) /*check CRC if wanted, only on known chunk types*/ - { - if (lodepng_chunk_check_crc(chunk)) CERROR_BREAK(state->error, 57); /*invalid CRC*/ - } - - if (!IEND) chunk = lodepng_chunk_next_const(chunk); - } - - ucvector_init(&scanlines); - /*predict output size, to allocate exact size for output buffer to avoid more dynamic allocation. - If the decompressed size does not match the prediction, the image must be corrupt.*/ - if (state->info_png.interlace_method == 0) - { - /*The extra *h is added because this are the filter bytes every scanline starts with*/ - predict = lodepng_get_raw_size_idat(*w, *h, &state->info_png.color) + *h; - } - else - { - /*Adam-7 interlaced: predicted size is the sum of the 7 sub-images sizes*/ - const LodePNGColorMode* color = &state->info_png.color; - predict = 0; - predict += lodepng_get_raw_size_idat((*w + 7) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3); - if (*w > 4) predict += lodepng_get_raw_size_idat((*w + 3) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3); - predict += lodepng_get_raw_size_idat((*w + 3) >> 2, (*h + 3) >> 3, color) + ((*h + 3) >> 3); - if (*w > 2) predict += lodepng_get_raw_size_idat((*w + 1) >> 2, (*h + 3) >> 2, color) + ((*h + 3) >> 2); - predict += lodepng_get_raw_size_idat((*w + 1) >> 1, (*h + 1) >> 2, color) + ((*h + 1) >> 2); - if (*w > 1) predict += lodepng_get_raw_size_idat((*w + 0) >> 1, (*h + 1) >> 1, color) + ((*h + 1) >> 1); - predict += lodepng_get_raw_size_idat((*w + 0), (*h + 0) >> 1, color) + ((*h + 0) >> 1); - } - if (!state->error && !ucvector_reserve(&scanlines, predict)) state->error = 83; /*alloc fail*/ - if (!state->error) - { - state->error = zlib_decompress(&scanlines.data, &scanlines.size, idat.data, - idat.size, &state->decoder.zlibsettings); - if (!state->error && scanlines.size != predict) state->error = 91; /*decompressed size doesn't match prediction*/ - } - ucvector_cleanup(&idat); - - if (!state->error) - { - outsize = lodepng_get_raw_size(*w, *h, &state->info_png.color); - *out = (unsigned char*)lodepng_malloc(outsize); - if (!*out) state->error = 83; /*alloc fail*/ - } - if (!state->error) - { - for (i = 0; i < outsize; i++) (*out)[i] = 0; - state->error = postProcessScanlines(*out, scanlines.data, *w, *h, &state->info_png); - } - ucvector_cleanup(&scanlines); -} - -unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h, - LodePNGState* state, - const unsigned char* in, size_t insize) -{ - *out = 0; - decodeGeneric(out, w, h, state, in, insize); - if (state->error) return state->error; - if (!state->decoder.color_convert || lodepng_color_mode_equal(&state->info_raw, &state->info_png.color)) - { - /*same color type, no copying or converting of data needed*/ - /*store the info_png color settings on the info_raw so that the info_raw still reflects what colortype - the raw image has to the end user*/ - if (!state->decoder.color_convert) - { - state->error = lodepng_color_mode_copy(&state->info_raw, &state->info_png.color); - if (state->error) return state->error; - } - } - else - { - /*color conversion needed; sort of copy of the data*/ - unsigned char* data = *out; - size_t outsize; - - /*TODO: check if this works according to the statement in the documentation: "The converter can convert - from greyscale input color type, to 8-bit greyscale or greyscale with alpha"*/ - if (!(state->info_raw.colortype == LCT_RGB || state->info_raw.colortype == LCT_RGBA) - && !(state->info_raw.bitdepth == 8)) - { - return 56; /*unsupported color mode conversion*/ - } - - outsize = lodepng_get_raw_size(*w, *h, &state->info_raw); - *out = (unsigned char*)lodepng_malloc(outsize); - if (!(*out)) - { - state->error = 83; /*alloc fail*/ - } - else state->error = lodepng_convert(*out, data, &state->info_raw, - &state->info_png.color, *w, *h); - lodepng_free(data); - } - return state->error; -} - -unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, - size_t insize, LodePNGColorType colortype, unsigned bitdepth) -{ - unsigned error; - LodePNGState state; - lodepng_state_init(&state); - state.info_raw.colortype = colortype; - state.info_raw.bitdepth = bitdepth; - error = lodepng_decode(out, w, h, &state, in, insize); - lodepng_state_cleanup(&state); - return error; -} - -unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) -{ - return lodepng_decode_memory(out, w, h, in, insize, LCT_RGBA, 8); -} - -unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) -{ - return lodepng_decode_memory(out, w, h, in, insize, LCT_RGB, 8); -} - -#ifdef LODEPNG_COMPILE_DISK -unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename, - LodePNGColorType colortype, unsigned bitdepth) -{ - unsigned char* buffer = 0; - size_t buffersize; - unsigned error; - error = lodepng_load_file(&buffer, &buffersize, filename); - if (!error) error = lodepng_decode_memory(out, w, h, buffer, buffersize, colortype, bitdepth); - lodepng_free(buffer); - return error; -} - -unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) -{ - return lodepng_decode_file(out, w, h, filename, LCT_RGBA, 8); -} - -unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) -{ - return lodepng_decode_file(out, w, h, filename, LCT_RGB, 8); -} -#endif /*LODEPNG_COMPILE_DISK*/ - -void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings) -{ - settings->color_convert = 1; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - settings->read_text_chunks = 1; - settings->remember_unknown_chunks = 0; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - settings->ignore_crc = 0; - lodepng_decompress_settings_init(&settings->zlibsettings); -} - -#endif /*LODEPNG_COMPILE_DECODER*/ - -#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) - -void lodepng_state_init(LodePNGState* state) -{ -#ifdef LODEPNG_COMPILE_DECODER - lodepng_decoder_settings_init(&state->decoder); -#endif /*LODEPNG_COMPILE_DECODER*/ -#ifdef LODEPNG_COMPILE_ENCODER - lodepng_encoder_settings_init(&state->encoder); -#endif /*LODEPNG_COMPILE_ENCODER*/ - lodepng_color_mode_init(&state->info_raw); - lodepng_info_init(&state->info_png); - state->error = 1; -} - -void lodepng_state_cleanup(LodePNGState* state) -{ - lodepng_color_mode_cleanup(&state->info_raw); - lodepng_info_cleanup(&state->info_png); -} - -void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source) -{ - lodepng_state_cleanup(dest); - *dest = *source; - lodepng_color_mode_init(&dest->info_raw); - lodepng_info_init(&dest->info_png); - dest->error = lodepng_color_mode_copy(&dest->info_raw, &source->info_raw); if (dest->error) return; - dest->error = lodepng_info_copy(&dest->info_png, &source->info_png); if (dest->error) return; -} - -#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */ - -#ifdef LODEPNG_COMPILE_ENCODER - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / PNG Encoder / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -/*chunkName must be string of 4 characters*/ -static unsigned addChunk(ucvector* out, const char* chunkName, const unsigned char* data, size_t length) -{ - CERROR_TRY_RETURN(lodepng_chunk_create(&out->data, &out->size, (unsigned)length, chunkName, data)); - out->allocsize = out->size; /*fix the allocsize again*/ - return 0; -} - -static void writeSignature(ucvector* out) -{ - /*8 bytes PNG signature, aka the magic bytes*/ - ucvector_push_back(out, 137); - ucvector_push_back(out, 80); - ucvector_push_back(out, 78); - ucvector_push_back(out, 71); - ucvector_push_back(out, 13); - ucvector_push_back(out, 10); - ucvector_push_back(out, 26); - ucvector_push_back(out, 10); -} - -static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth, unsigned interlace_method) -{ - unsigned error = 0; - ucvector header; - ucvector_init(&header); - - lodepng_add32bitInt(&header, w); /*width*/ - lodepng_add32bitInt(&header, h); /*height*/ - ucvector_push_back(&header, (unsigned char)bitdepth); /*bit depth*/ - ucvector_push_back(&header, (unsigned char)colortype); /*color type*/ - ucvector_push_back(&header, 0); /*compression method*/ - ucvector_push_back(&header, 0); /*filter method*/ - ucvector_push_back(&header, interlace_method); /*interlace method*/ - - error = addChunk(out, "IHDR", header.data, header.size); - ucvector_cleanup(&header); - - return error; -} - -static unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* info) -{ - unsigned error = 0; - size_t i; - ucvector PLTE; - ucvector_init(&PLTE); - for (i = 0; i != info->palettesize * 4; ++i) - { - /*add all channels except alpha channel*/ - if (i % 4 != 3) ucvector_push_back(&PLTE, info->palette[i]); - } - error = addChunk(out, "PLTE", PLTE.data, PLTE.size); - ucvector_cleanup(&PLTE); - - return error; -} - -static unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* info) -{ - unsigned error = 0; - size_t i; - ucvector tRNS; - ucvector_init(&tRNS); - if (info->colortype == LCT_PALETTE) - { - size_t amount = info->palettesize; - /*the tail of palette values that all have 255 as alpha, does not have to be encoded*/ - for (i = info->palettesize; i != 0; --i) - { - if (info->palette[4 * (i - 1) + 3] == 255) --amount; - else break; - } - /*add only alpha channel*/ - for (i = 0; i != amount; ++i) ucvector_push_back(&tRNS, info->palette[4 * i + 3]); - } - else if (info->colortype == LCT_GREY) - { - if (info->key_defined) - { - ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8)); - ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255)); - } - } - else if (info->colortype == LCT_RGB) - { - if (info->key_defined) - { - ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8)); - ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255)); - ucvector_push_back(&tRNS, (unsigned char)(info->key_g >> 8)); - ucvector_push_back(&tRNS, (unsigned char)(info->key_g & 255)); - ucvector_push_back(&tRNS, (unsigned char)(info->key_b >> 8)); - ucvector_push_back(&tRNS, (unsigned char)(info->key_b & 255)); - } - } - - error = addChunk(out, "tRNS", tRNS.data, tRNS.size); - ucvector_cleanup(&tRNS); - - return error; -} - -static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, size_t datasize, - LodePNGCompressSettings* zlibsettings) -{ - ucvector zlibdata; - unsigned error = 0; - - /*compress with the Zlib compressor*/ - ucvector_init(&zlibdata); - error = zlib_compress(&zlibdata.data, &zlibdata.size, data, datasize, zlibsettings); - if (!error) error = addChunk(out, "IDAT", zlibdata.data, zlibdata.size); - ucvector_cleanup(&zlibdata); - - return error; -} - -static unsigned addChunk_IEND(ucvector* out) -{ - unsigned error = 0; - error = addChunk(out, "IEND", 0, 0); - return error; -} - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - -static unsigned addChunk_tEXt(ucvector* out, const char* keyword, const char* textstring) -{ - unsigned error = 0; - size_t i; - ucvector text; - ucvector_init(&text); - for (i = 0; keyword[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)keyword[i]); - if (i < 1 || i > 79) return 89; /*error: invalid keyword size*/ - ucvector_push_back(&text, 0); /*0 termination char*/ - for (i = 0; textstring[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)textstring[i]); - error = addChunk(out, "tEXt", text.data, text.size); - ucvector_cleanup(&text); - - return error; -} - -static unsigned addChunk_zTXt(ucvector* out, const char* keyword, const char* textstring, - LodePNGCompressSettings* zlibsettings) -{ - unsigned error = 0; - ucvector data, compressed; - size_t i, textsize = strlen(textstring); - - ucvector_init(&data); - ucvector_init(&compressed); - for (i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]); - if (i < 1 || i > 79) return 89; /*error: invalid keyword size*/ - ucvector_push_back(&data, 0); /*0 termination char*/ - ucvector_push_back(&data, 0); /*compression method: 0*/ - - error = zlib_compress(&compressed.data, &compressed.size, - (unsigned char*)textstring, textsize, zlibsettings); - if (!error) - { - for (i = 0; i != compressed.size; ++i) ucvector_push_back(&data, compressed.data[i]); - error = addChunk(out, "zTXt", data.data, data.size); - } - - ucvector_cleanup(&compressed); - ucvector_cleanup(&data); - return error; -} - -static unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const char* keyword, const char* langtag, - const char* transkey, const char* textstring, LodePNGCompressSettings* zlibsettings) -{ - unsigned error = 0; - ucvector data; - size_t i, textsize = strlen(textstring); - - ucvector_init(&data); - - for (i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]); - if (i < 1 || i > 79) return 89; /*error: invalid keyword size*/ - ucvector_push_back(&data, 0); /*null termination char*/ - ucvector_push_back(&data, compressed ? 1 : 0); /*compression flag*/ - ucvector_push_back(&data, 0); /*compression method*/ - for (i = 0; langtag[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)langtag[i]); - ucvector_push_back(&data, 0); /*null termination char*/ - for (i = 0; transkey[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)transkey[i]); - ucvector_push_back(&data, 0); /*null termination char*/ - - if (compressed) - { - ucvector compressed_data; - ucvector_init(&compressed_data); - error = zlib_compress(&compressed_data.data, &compressed_data.size, - (unsigned char*)textstring, textsize, zlibsettings); - if (!error) - { - for (i = 0; i != compressed_data.size; ++i) ucvector_push_back(&data, compressed_data.data[i]); - } - ucvector_cleanup(&compressed_data); - } - else /*not compressed*/ - { - for (i = 0; textstring[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)textstring[i]); - } - - if (!error) error = addChunk(out, "iTXt", data.data, data.size); - ucvector_cleanup(&data); - return error; -} - -static unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info) -{ - unsigned error = 0; - ucvector bKGD; - ucvector_init(&bKGD); - if (info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) - { - ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8)); - ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); - } - else if (info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) - { - ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8)); - ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); - ucvector_push_back(&bKGD, (unsigned char)(info->background_g >> 8)); - ucvector_push_back(&bKGD, (unsigned char)(info->background_g & 255)); - ucvector_push_back(&bKGD, (unsigned char)(info->background_b >> 8)); - ucvector_push_back(&bKGD, (unsigned char)(info->background_b & 255)); - } - else if (info->color.colortype == LCT_PALETTE) - { - ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); /*palette index*/ - } - - error = addChunk(out, "bKGD", bKGD.data, bKGD.size); - ucvector_cleanup(&bKGD); - - return error; -} - -static unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time) -{ - unsigned error = 0; - unsigned char* data = (unsigned char*)lodepng_malloc(7); - if (!data) return 83; /*alloc fail*/ - data[0] = (unsigned char)(time->year >> 8); - data[1] = (unsigned char)(time->year & 255); - data[2] = (unsigned char)time->month; - data[3] = (unsigned char)time->day; - data[4] = (unsigned char)time->hour; - data[5] = (unsigned char)time->minute; - data[6] = (unsigned char)time->second; - error = addChunk(out, "tIME", data, 7); - lodepng_free(data); - return error; -} - -static unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info) -{ - unsigned error = 0; - ucvector data; - ucvector_init(&data); - - lodepng_add32bitInt(&data, info->phys_x); - lodepng_add32bitInt(&data, info->phys_y); - ucvector_push_back(&data, info->phys_unit); - - error = addChunk(out, "pHYs", data.data, data.size); - ucvector_cleanup(&data); - - return error; -} - -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - -static void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline, - size_t length, size_t bytewidth, unsigned char filterType) -{ - size_t i; - switch (filterType) - { - case 0: /*None*/ - for (i = 0; i != length; ++i) out[i] = scanline[i]; - break; - case 1: /*Sub*/ - for (i = 0; i != bytewidth; ++i) out[i] = scanline[i]; - for (i = bytewidth; i < length; ++i) out[i] = scanline[i] - scanline[i - bytewidth]; - break; - case 2: /*Up*/ - if (prevline) - { - for (i = 0; i != length; ++i) out[i] = scanline[i] - prevline[i]; - } - else - { - for (i = 0; i != length; ++i) out[i] = scanline[i]; - } - break; - case 3: /*Average*/ - if (prevline) - { - for (i = 0; i != bytewidth; ++i) out[i] = scanline[i] - (prevline[i] >> 1); - for (i = bytewidth; i < length; ++i) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) >> 1); - } - else - { - for (i = 0; i != bytewidth; ++i) out[i] = scanline[i]; - for (i = bytewidth; i < length; ++i) out[i] = scanline[i] - (scanline[i - bytewidth] >> 1); - } - break; - case 4: /*Paeth*/ - if (prevline) - { - /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/ - for (i = 0; i != bytewidth; ++i) out[i] = (scanline[i] - prevline[i]); - for (i = bytewidth; i < length; ++i) - { - out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth])); - } - } - else - { - for (i = 0; i != bytewidth; ++i) out[i] = scanline[i]; - /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/ - for (i = bytewidth; i < length; ++i) out[i] = (scanline[i] - scanline[i - bytewidth]); - } - break; - default: return; /*unexisting filter type given*/ - } -} - -/* log2 approximation. A slight bit faster than std::log. */ -static float flog2(float f) -{ - float result = 0; - while (f > 32) { result += 4; f /= 16; } - while (f > 2) { ++result; f /= 2; } - return result + 1.442695f * (f * f * f / 3 - 3 * f * f / 2 + 3 * f - 1.83333f); -} - -static unsigned filter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, - const LodePNGColorMode* info, const LodePNGEncoderSettings* settings) -{ - /* - For PNG filter method 0 - out must be a buffer with as size: h + (w * h * bpp + 7) / 8, because there are - the scanlines with 1 extra byte per scanline - */ - - unsigned bpp = lodepng_get_bpp(info); - /*the width of a scanline in bytes, not including the filter type*/ - size_t linebytes = (w * bpp + 7) / 8; - /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ - size_t bytewidth = (bpp + 7) / 8; - const unsigned char* prevline = 0; - unsigned x, y; - unsigned error = 0; - LodePNGFilterStrategy strategy = settings->filter_strategy; - - /* - There is a heuristic called the minimum sum of absolute differences heuristic, suggested by the PNG standard: - * If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e. - use fixed filtering, with the filter None). - * (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is - not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply - all five filters and select the filter that produces the smallest sum of absolute values per row. - This heuristic is used if filter strategy is LFS_MINSUM and filter_palette_zero is true. - - If filter_palette_zero is true and filter_strategy is not LFS_MINSUM, the above heuristic is followed, - but for "the other case", whatever strategy filter_strategy is set to instead of the minimum sum - heuristic is used. - */ - if (settings->filter_palette_zero && - (info->colortype == LCT_PALETTE || info->bitdepth < 8)) strategy = LFS_ZERO; - - if (bpp == 0) return 31; /*error: invalid color type*/ - - if (strategy == LFS_ZERO) - { - for (y = 0; y != h; ++y) - { - size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ - size_t inindex = linebytes * y; - out[outindex] = 0; /*filter type byte*/ - filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, 0); - prevline = &in[inindex]; - } - } - else if (strategy == LFS_MINSUM) - { - /*adaptive filtering*/ - size_t sum[5]; - unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ - size_t smallest = 0; - unsigned char type, bestType = 0; - - for (type = 0; type != 5; ++type) - { - attempt[type] = (unsigned char*)lodepng_malloc(linebytes); - if (!attempt[type]) return 83; /*alloc fail*/ - } - - if (!error) - { - for (y = 0; y != h; ++y) - { - /*try the 5 filter types*/ - for (type = 0; type != 5; ++type) - { - filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); - - /*calculate the sum of the result*/ - sum[type] = 0; - if (type == 0) - { - for (x = 0; x != linebytes; ++x) sum[type] += (unsigned char)(attempt[type][x]); - } - else - { - for (x = 0; x != linebytes; ++x) - { - /*For differences, each byte should be treated as signed, values above 127 are negative - (converted to signed char). Filtertype 0 isn't a difference though, so use unsigned there. - This means filtertype 0 is almost never chosen, but that is justified.*/ - unsigned char s = attempt[type][x]; - sum[type] += s < 128 ? s : (255U - s); - } - } - - /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/ - if (type == 0 || sum[type] < smallest) - { - bestType = type; - smallest = sum[type]; - } - } - - prevline = &in[y * linebytes]; - - /*now fill the out values*/ - out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ - for (x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; - } - } - - for (type = 0; type != 5; ++type) lodepng_free(attempt[type]); - } - else if (strategy == LFS_ENTROPY) - { - float sum[5]; - unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ - float smallest = 0; - unsigned type, bestType = 0; - unsigned count[256]; - - for (type = 0; type != 5; ++type) - { - attempt[type] = (unsigned char*)lodepng_malloc(linebytes); - if (!attempt[type]) return 83; /*alloc fail*/ - } - - for (y = 0; y != h; ++y) - { - /*try the 5 filter types*/ - for (type = 0; type != 5; ++type) - { - filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); - for (x = 0; x != 256; ++x) count[x] = 0; - for (x = 0; x != linebytes; ++x) ++count[attempt[type][x]]; - ++count[type]; /*the filter type itself is part of the scanline*/ - sum[type] = 0; - for (x = 0; x != 256; ++x) - { - float p = count[x] / (float)(linebytes + 1); - sum[type] += count[x] == 0 ? 0 : flog2(1 / p) * p; - } - /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/ - if (type == 0 || sum[type] < smallest) - { - bestType = type; - smallest = sum[type]; - } - } - - prevline = &in[y * linebytes]; - - /*now fill the out values*/ - out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ - for (x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; - } - - for (type = 0; type != 5; ++type) lodepng_free(attempt[type]); - } - else if (strategy == LFS_PREDEFINED) - { - for (y = 0; y != h; ++y) - { - size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ - size_t inindex = linebytes * y; - unsigned char type = settings->predefined_filters[y]; - out[outindex] = type; /*filter type byte*/ - filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, type); - prevline = &in[inindex]; - } - } - else if (strategy == LFS_BRUTE_FORCE) - { - /*brute force filter chooser. - deflate the scanline after every filter attempt to see which one deflates best. - This is very slow and gives only slightly smaller, sometimes even larger, result*/ - size_t size[5]; - unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ - size_t smallest = 0; - unsigned type = 0, bestType = 0; - unsigned char* dummy; - LodePNGCompressSettings zlibsettings = settings->zlibsettings; - /*use fixed tree on the attempts so that the tree is not adapted to the filtertype on purpose, - to simulate the true case where the tree is the same for the whole image. Sometimes it gives - better result with dynamic tree anyway. Using the fixed tree sometimes gives worse, but in rare - cases better compression. It does make this a bit less slow, so it's worth doing this.*/ - zlibsettings.btype = 1; - /*a custom encoder likely doesn't read the btype setting and is optimized for complete PNG - images only, so disable it*/ - zlibsettings.custom_zlib = 0; - zlibsettings.custom_deflate = 0; - for (type = 0; type != 5; ++type) - { - attempt[type] = (unsigned char*)lodepng_malloc(linebytes); - if (!attempt[type]) return 83; /*alloc fail*/ - } - for (y = 0; y != h; ++y) /*try the 5 filter types*/ - { - for (type = 0; type != 5; ++type) - { - unsigned testsize = (unsigned)linebytes; - /*if(testsize > 8) testsize /= 8;*/ /*it already works good enough by testing a part of the row*/ - - filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); - size[type] = 0; - dummy = 0; - zlib_compress(&dummy, &size[type], attempt[type], testsize, &zlibsettings); - lodepng_free(dummy); - /*check if this is smallest size (or if type == 0 it's the first case so always store the values)*/ - if (type == 0 || size[type] < smallest) - { - bestType = type; - smallest = size[type]; - } - } - prevline = &in[y * linebytes]; - out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ - for (x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; - } - for (type = 0; type != 5; ++type) lodepng_free(attempt[type]); - } - else return 88; /* unknown filter strategy */ - - return error; -} - -static void addPaddingBits(unsigned char* out, const unsigned char* in, - size_t olinebits, size_t ilinebits, unsigned h) -{ - /*The opposite of the removePaddingBits function - olinebits must be >= ilinebits*/ - unsigned y; - size_t diff = olinebits - ilinebits; - size_t obp = 0, ibp = 0; /*bit pointers*/ - for (y = 0; y != h; ++y) - { - size_t x; - for (x = 0; x < ilinebits; ++x) - { - unsigned char bit = readBitFromReversedStream(&ibp, in); - setBitOfReversedStream(&obp, out, bit); - } - /*obp += diff; --> no, fill in some value in the padding bits too, to avoid - "Use of uninitialised value of size ###" warning from valgrind*/ - for (x = 0; x != diff; ++x) setBitOfReversedStream(&obp, out, 0); - } -} - -/* -in: non-interlaced image with size w*h -out: the same pixels, but re-ordered according to PNG's Adam7 interlacing, with - no padding bits between scanlines, but between reduced images so that each - reduced image starts at a byte. -bpp: bits per pixel -there are no padding bits, not between scanlines, not between reduced images -in has the following size in bits: w * h * bpp. -out is possibly bigger due to padding bits between reduced images -NOTE: comments about padding bits are only relevant if bpp < 8 -*/ -static void Adam7_interlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) -{ - unsigned passw[7], passh[7]; - size_t filter_passstart[8], padded_passstart[8], passstart[8]; - unsigned i; - - Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); - - if (bpp >= 8) - { - for (i = 0; i != 7; ++i) - { - unsigned x, y, b; - size_t bytewidth = bpp / 8; - for (y = 0; y < passh[i]; ++y) - for (x = 0; x < passw[i]; ++x) - { - size_t pixelinstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth; - size_t pixeloutstart = passstart[i] + (y * passw[i] + x) * bytewidth; - for (b = 0; b < bytewidth; ++b) - { - out[pixeloutstart + b] = in[pixelinstart + b]; - } - } - } - } - else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ - { - for (i = 0; i != 7; ++i) - { - unsigned x, y, b; - unsigned ilinebits = bpp * passw[i]; - unsigned olinebits = bpp * w; - size_t obp, ibp; /*bit pointers (for out and in buffer)*/ - for (y = 0; y < passh[i]; ++y) - for (x = 0; x < passw[i]; ++x) - { - ibp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp; - obp = (8 * passstart[i]) + (y * ilinebits + x * bpp); - for (b = 0; b < bpp; ++b) - { - unsigned char bit = readBitFromReversedStream(&ibp, in); - setBitOfReversedStream(&obp, out, bit); - } - } - } - } -} - -/*out must be buffer big enough to contain uncompressed IDAT chunk data, and in must contain the full image. -return value is error**/ -static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const unsigned char* in, - unsigned w, unsigned h, - const LodePNGInfo* info_png, const LodePNGEncoderSettings* settings) -{ - /* - This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps: - *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter - *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter - */ - unsigned bpp = lodepng_get_bpp(&info_png->color); - unsigned error = 0; - - if (info_png->interlace_method == 0) - { - *outsize = h + (h * ((w * bpp + 7) / 8)); /*image size plus an extra byte per scanline + possible padding bits*/ - *out = (unsigned char*)lodepng_malloc(*outsize); - if (!(*out) && (*outsize)) error = 83; /*alloc fail*/ - - if (!error) - { - /*non multiple of 8 bits per scanline, padding bits needed per scanline*/ - if (bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) - { - unsigned char* padded = (unsigned char*)lodepng_malloc(h * ((w * bpp + 7) / 8)); - if (!padded) error = 83; /*alloc fail*/ - if (!error) - { - addPaddingBits(padded, in, ((w * bpp + 7) / 8) * 8, w * bpp, h); - error = filter(*out, padded, w, h, &info_png->color, settings); - } - lodepng_free(padded); - } - else - { - /*we can immediately filter into the out buffer, no other steps needed*/ - error = filter(*out, in, w, h, &info_png->color, settings); - } - } - } - else /*interlace_method is 1 (Adam7)*/ - { - unsigned passw[7], passh[7]; - size_t filter_passstart[8], padded_passstart[8], passstart[8]; - unsigned char* adam7; - - Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); - - *outsize = filter_passstart[7]; /*image size plus an extra byte per scanline + possible padding bits*/ - *out = (unsigned char*)lodepng_malloc(*outsize); - if (!(*out)) error = 83; /*alloc fail*/ - - adam7 = (unsigned char*)lodepng_malloc(passstart[7]); - if (!adam7 && passstart[7]) error = 83; /*alloc fail*/ - - if (!error) - { - unsigned i; - - Adam7_interlace(adam7, in, w, h, bpp); - for (i = 0; i != 7; ++i) - { - if (bpp < 8) - { - unsigned char* padded = (unsigned char*)lodepng_malloc(padded_passstart[i + 1] - padded_passstart[i]); - if (!padded) ERROR_BREAK(83); /*alloc fail*/ - addPaddingBits(padded, &adam7[passstart[i]], - ((passw[i] * bpp + 7) / 8) * 8, passw[i] * bpp, passh[i]); - error = filter(&(*out)[filter_passstart[i]], padded, - passw[i], passh[i], &info_png->color, settings); - lodepng_free(padded); - } - else - { - error = filter(&(*out)[filter_passstart[i]], &adam7[padded_passstart[i]], - passw[i], passh[i], &info_png->color, settings); - } - - if (error) break; - } - } - - lodepng_free(adam7); - } - - return error; -} - -/* -palette must have 4 * palettesize bytes allocated, and given in format RGBARGBARGBARGBA... -returns 0 if the palette is opaque, -returns 1 if the palette has a single color with alpha 0 ==> color key -returns 2 if the palette is semi-translucent. -*/ -static unsigned getPaletteTranslucency(const unsigned char* palette, size_t palettesize) -{ - size_t i; - unsigned key = 0; - unsigned r = 0, g = 0, b = 0; /*the value of the color with alpha 0, so long as color keying is possible*/ - for (i = 0; i != palettesize; ++i) - { - if (!key && palette[4 * i + 3] == 0) - { - r = palette[4 * i + 0]; g = palette[4 * i + 1]; b = palette[4 * i + 2]; - key = 1; - i = (size_t)(-1); /*restart from beginning, to detect earlier opaque colors with key's value*/ - } - else if (palette[4 * i + 3] != 255) return 2; - /*when key, no opaque RGB may have key's RGB*/ - else if (key && r == palette[i * 4 + 0] && g == palette[i * 4 + 1] && b == palette[i * 4 + 2]) return 2; - } - return key; -} - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS -static unsigned addUnknownChunks(ucvector* out, unsigned char* data, size_t datasize) -{ - unsigned char* inchunk = data; - while ((size_t)(inchunk - data) < datasize) - { - CERROR_TRY_RETURN(lodepng_chunk_append(&out->data, &out->size, inchunk)); - out->allocsize = out->size; /*fix the allocsize again*/ - inchunk = lodepng_chunk_next(inchunk); - } - return 0; -} -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - -unsigned lodepng_encode(unsigned char** out, size_t* outsize, - const unsigned char* image, unsigned w, unsigned h, - LodePNGState* state) -{ - LodePNGInfo info; - ucvector outv; - unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/ - size_t datasize = 0; - - /*provide some proper output values if error will happen*/ - *out = 0; - *outsize = 0; - state->error = 0; - - lodepng_info_init(&info); - lodepng_info_copy(&info, &state->info_png); - - if ((info.color.colortype == LCT_PALETTE || state->encoder.force_palette) - && (info.color.palettesize == 0 || info.color.palettesize > 256)) - { - state->error = 68; /*invalid palette size, it is only allowed to be 1-256*/ - return state->error; - } - - if (state->encoder.auto_convert) - { - state->error = lodepng_auto_choose_color(&info.color, image, w, h, &state->info_raw); - } - if (state->error) return state->error; - - if (state->encoder.zlibsettings.btype > 2) - { - CERROR_RETURN_ERROR(state->error, 61); /*error: unexisting btype*/ - } - if (state->info_png.interlace_method > 1) - { - CERROR_RETURN_ERROR(state->error, 71); /*error: unexisting interlace mode*/ - } - - state->error = checkColorValidity(info.color.colortype, info.color.bitdepth); - if (state->error) return state->error; /*error: unexisting color type given*/ - state->error = checkColorValidity(state->info_raw.colortype, state->info_raw.bitdepth); - if (state->error) return state->error; /*error: unexisting color type given*/ - - if (!lodepng_color_mode_equal(&state->info_raw, &info.color)) - { - unsigned char* converted; - size_t size = (w * h * (size_t)lodepng_get_bpp(&info.color) + 7) / 8; - - converted = (unsigned char*)lodepng_malloc(size); - if (!converted && size) state->error = 83; /*alloc fail*/ - if (!state->error) - { - state->error = lodepng_convert(converted, image, &info.color, &state->info_raw, w, h); - } - if (!state->error) preProcessScanlines(&data, &datasize, converted, w, h, &info, &state->encoder); - lodepng_free(converted); - } - else preProcessScanlines(&data, &datasize, image, w, h, &info, &state->encoder); - - ucvector_init(&outv); - while (!state->error) /*while only executed once, to break on error*/ - { -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - size_t i; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - /*write signature and chunks*/ - writeSignature(&outv); - /*IHDR*/ - addChunk_IHDR(&outv, w, h, info.color.colortype, info.color.bitdepth, info.interlace_method); -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - /*unknown chunks between IHDR and PLTE*/ - if (info.unknown_chunks_data[0]) - { - state->error = addUnknownChunks(&outv, info.unknown_chunks_data[0], info.unknown_chunks_size[0]); - if (state->error) break; - } -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - /*PLTE*/ - if (info.color.colortype == LCT_PALETTE) - { - addChunk_PLTE(&outv, &info.color); - } - if (state->encoder.force_palette && (info.color.colortype == LCT_RGB || info.color.colortype == LCT_RGBA)) - { - addChunk_PLTE(&outv, &info.color); - } - /*tRNS*/ - if (info.color.colortype == LCT_PALETTE && getPaletteTranslucency(info.color.palette, info.color.palettesize) != 0) - { - addChunk_tRNS(&outv, &info.color); - } - if ((info.color.colortype == LCT_GREY || info.color.colortype == LCT_RGB) && info.color.key_defined) - { - addChunk_tRNS(&outv, &info.color); - } -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - /*bKGD (must come between PLTE and the IDAt chunks*/ - if (info.background_defined) addChunk_bKGD(&outv, &info); - /*pHYs (must come before the IDAT chunks)*/ - if (info.phys_defined) addChunk_pHYs(&outv, &info); - - /*unknown chunks between PLTE and IDAT*/ - if (info.unknown_chunks_data[1]) - { - state->error = addUnknownChunks(&outv, info.unknown_chunks_data[1], info.unknown_chunks_size[1]); - if (state->error) break; - } -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - /*IDAT (multiple IDAT chunks must be consecutive)*/ - state->error = addChunk_IDAT(&outv, data, datasize, &state->encoder.zlibsettings); - if (state->error) break; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - /*tIME*/ - if (info.time_defined) addChunk_tIME(&outv, &info.time); - /*tEXt and/or zTXt*/ - for (i = 0; i != info.text_num; ++i) - { - if (strlen(info.text_keys[i]) > 79) - { - state->error = 66; /*text chunk too large*/ - break; - } - if (strlen(info.text_keys[i]) < 1) - { - state->error = 67; /*text chunk too small*/ - break; - } - if (state->encoder.text_compression) - { - addChunk_zTXt(&outv, info.text_keys[i], info.text_strings[i], &state->encoder.zlibsettings); - } - else - { - addChunk_tEXt(&outv, info.text_keys[i], info.text_strings[i]); - } - } - /*LodePNG version id in text chunk*/ - if (state->encoder.add_id) - { - unsigned alread_added_id_text = 0; - for (i = 0; i != info.text_num; ++i) - { - if (!strcmp(info.text_keys[i], "LodePNG")) - { - alread_added_id_text = 1; - break; - } - } - if (alread_added_id_text == 0) - { - addChunk_tEXt(&outv, "LodePNG", LODEPNG_VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/ - } - } - /*iTXt*/ - for (i = 0; i != info.itext_num; ++i) - { - if (strlen(info.itext_keys[i]) > 79) - { - state->error = 66; /*text chunk too large*/ - break; - } - if (strlen(info.itext_keys[i]) < 1) - { - state->error = 67; /*text chunk too small*/ - break; - } - addChunk_iTXt(&outv, state->encoder.text_compression, - info.itext_keys[i], info.itext_langtags[i], info.itext_transkeys[i], info.itext_strings[i], - &state->encoder.zlibsettings); - } - - /*unknown chunks between IDAT and IEND*/ - if (info.unknown_chunks_data[2]) - { - state->error = addUnknownChunks(&outv, info.unknown_chunks_data[2], info.unknown_chunks_size[2]); - if (state->error) break; - } -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - addChunk_IEND(&outv); - - break; /*this isn't really a while loop; no error happened so break out now!*/ - } - - lodepng_info_cleanup(&info); - lodepng_free(data); - /*instead of cleaning the vector up, give it to the output*/ - *out = outv.data; - *outsize = outv.size; - - return state->error; -} - -unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, const unsigned char* image, - unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) -{ - unsigned error; - LodePNGState state; - lodepng_state_init(&state); - state.info_raw.colortype = colortype; - state.info_raw.bitdepth = bitdepth; - state.info_png.color.colortype = colortype; - state.info_png.color.bitdepth = bitdepth; - lodepng_encode(out, outsize, image, w, h, &state); - error = state.error; - lodepng_state_cleanup(&state); - return error; -} - -unsigned lodepng_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) -{ - return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGBA, 8); -} - -unsigned lodepng_encode24(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) -{ - return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGB, 8); -} - -#ifdef LODEPNG_COMPILE_DISK -unsigned lodepng_encode_file(const char* filename, const unsigned char* image, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth) -{ - unsigned char* buffer; - size_t buffersize; - unsigned error = lodepng_encode_memory(&buffer, &buffersize, image, w, h, colortype, bitdepth); - if (!error) error = lodepng_save_file(buffer, buffersize, filename); - lodepng_free(buffer); - return error; -} - -unsigned lodepng_encode32_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) -{ - return lodepng_encode_file(filename, image, w, h, LCT_RGBA, 8); -} - -unsigned lodepng_encode24_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) -{ - return lodepng_encode_file(filename, image, w, h, LCT_RGB, 8); -} -#endif /*LODEPNG_COMPILE_DISK*/ - -void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings) -{ - lodepng_compress_settings_init(&settings->zlibsettings); - settings->filter_palette_zero = 1; - settings->filter_strategy = LFS_MINSUM; - settings->auto_convert = LODEPNG_DEFAULT_AUTO_CONVERT; - settings->force_palette = 0; - settings->predefined_filters = 0; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - settings->add_id = 0; - settings->text_compression = 1; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ -} - -#endif /*LODEPNG_COMPILE_ENCODER*/ -#endif /*LODEPNG_COMPILE_PNG*/ - -#ifdef LODEPNG_COMPILE_ERROR_TEXT -/* -This returns the description of a numerical error code in English. This is also -the documentation of all the error codes. -*/ -const char* lodepng_error_text(unsigned code) -{ - switch (code) - { - case 0: return "no error, everything went ok"; - case 1: return "nothing done yet"; /*the Encoder/Decoder has done nothing yet, error checking makes no sense yet*/ - case 10: return "end of input memory reached without huffman end code"; /*while huffman decoding*/ - case 11: return "error in code tree made it jump outside of huffman tree"; /*while huffman decoding*/ - case 13: return "problem while processing dynamic deflate block"; - case 14: return "problem while processing dynamic deflate block"; - case 15: return "problem while processing dynamic deflate block"; - case 16: return "unexisting code while processing dynamic deflate block"; - case 17: return "end of out buffer memory reached while inflating"; - case 18: return "invalid distance code while inflating"; - case 19: return "end of out buffer memory reached while inflating"; - case 20: return "invalid deflate block BTYPE encountered while decoding"; - case 21: return "NLEN is not ones complement of LEN in a deflate block"; - /*end of out buffer memory reached while inflating: - This can happen if the inflated deflate data is longer than the amount of bytes required to fill up - all the pixels of the image, given the color depth and image dimensions. Something that doesn't - happen in a normal, well encoded, PNG image.*/ - case 22: return "end of out buffer memory reached while inflating"; - case 23: return "end of in buffer memory reached while inflating"; - case 24: return "invalid FCHECK in zlib header"; - case 25: return "invalid compression method in zlib header"; - case 26: return "FDICT encountered in zlib header while it's not used for PNG"; - case 27: return "PNG file is smaller than a PNG header"; - /*Checks the magic file header, the first 8 bytes of the PNG file*/ - case 28: return "incorrect PNG signature, it's no PNG or corrupted"; - case 29: return "first chunk is not the header chunk"; - case 30: return "chunk length too large, chunk broken off at end of file"; - case 31: return "illegal PNG color type or bpp"; - case 32: return "illegal PNG compression method"; - case 33: return "illegal PNG filter method"; - case 34: return "illegal PNG interlace method"; - case 35: return "chunk length of a chunk is too large or the chunk too small"; - case 36: return "illegal PNG filter type encountered"; - case 37: return "illegal bit depth for this color type given"; - case 38: return "the palette is too big"; /*more than 256 colors*/ - case 39: return "more palette alpha values given in tRNS chunk than there are colors in the palette"; - case 40: return "tRNS chunk has wrong size for greyscale image"; - case 41: return "tRNS chunk has wrong size for RGB image"; - case 42: return "tRNS chunk appeared while it was not allowed for this color type"; - case 43: return "bKGD chunk has wrong size for palette image"; - case 44: return "bKGD chunk has wrong size for greyscale image"; - case 45: return "bKGD chunk has wrong size for RGB image"; - case 48: return "empty input buffer given to decoder. Maybe caused by non-existing file?"; - case 49: return "jumped past memory while generating dynamic huffman tree"; - case 50: return "jumped past memory while generating dynamic huffman tree"; - case 51: return "jumped past memory while inflating huffman block"; - case 52: return "jumped past memory while inflating"; - case 53: return "size of zlib data too small"; - case 54: return "repeat symbol in tree while there was no value symbol yet"; - /*jumped past tree while generating huffman tree, this could be when the - tree will have more leaves than symbols after generating it out of the - given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib.*/ - case 55: return "jumped past tree while generating huffman tree"; - case 56: return "given output image colortype or bitdepth not supported for color conversion"; - case 57: return "invalid CRC encountered (checking CRC can be disabled)"; - case 58: return "invalid ADLER32 encountered (checking ADLER32 can be disabled)"; - case 59: return "requested color conversion not supported"; - case 60: return "invalid window size given in the settings of the encoder (must be 0-32768)"; - case 61: return "invalid BTYPE given in the settings of the encoder (only 0, 1 and 2 are allowed)"; - /*LodePNG leaves the choice of RGB to greyscale conversion formula to the user.*/ - case 62: return "conversion from color to greyscale not supported"; - case 63: return "length of a chunk too long, max allowed for PNG is 2147483647 bytes per chunk"; /*(2^31-1)*/ - /*this would result in the inability of a deflated block to ever contain an end code. It must be at least 1.*/ - case 64: return "the length of the END symbol 256 in the Huffman tree is 0"; - case 66: return "the length of a text chunk keyword given to the encoder is longer than the maximum of 79 bytes"; - case 67: return "the length of a text chunk keyword given to the encoder is smaller than the minimum of 1 byte"; - case 68: return "tried to encode a PLTE chunk with a palette that has less than 1 or more than 256 colors"; - case 69: return "unknown chunk type with 'critical' flag encountered by the decoder"; - case 71: return "unexisting interlace mode given to encoder (must be 0 or 1)"; - case 72: return "while decoding, unexisting compression method encountering in zTXt or iTXt chunk (it must be 0)"; - case 73: return "invalid tIME chunk size"; - case 74: return "invalid pHYs chunk size"; - /*length could be wrong, or data chopped off*/ - case 75: return "no null termination char found while decoding text chunk"; - case 76: return "iTXt chunk too short to contain required bytes"; - case 77: return "integer overflow in buffer size"; - case 78: return "failed to open file for reading"; /*file doesn't exist or couldn't be opened for reading*/ - case 79: return "failed to open file for writing"; - case 80: return "tried creating a tree of 0 symbols"; - case 81: return "lazy matching at pos 0 is impossible"; - case 82: return "color conversion to palette requested while a color isn't in palette"; - case 83: return "memory allocation failed"; - case 84: return "given image too small to contain all pixels to be encoded"; - case 86: return "impossible offset in lz77 encoding (internal bug)"; - case 87: return "must provide custom zlib function pointer if LODEPNG_COMPILE_ZLIB is not defined"; - case 88: return "invalid filter strategy given for LodePNGEncoderSettings.filter_strategy"; - case 89: return "text chunk keyword too short or long: must have size 1-79"; - /*the windowsize in the LodePNGCompressSettings. Requiring POT(==> & instead of %) makes encoding 12% faster.*/ - case 90: return "windowsize must be a power of two"; - case 91: return "invalid decompressed idat size"; - case 92: return "too many pixels, not supported"; - case 93: return "zero width or height is invalid"; - case 94: return "header chunk must have a size of 13 bytes"; - } - return "unknown error code"; -} -#endif /*LODEPNG_COMPILE_ERROR_TEXT*/ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* // C++ Wrapper // */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ - -#ifdef LODEPNG_COMPILE_CPP -namespace lodepng -{ - -#ifdef LODEPNG_COMPILE_DISK - unsigned load_file(std::vector& buffer, const std::string& filename) - { - long size = lodepng_filesize(filename.c_str()); - if (size < 0) return 78; - buffer.resize((size_t)size); - return size == 0 ? 0 : lodepng_buffer_file(&buffer[0], (size_t)size, filename.c_str()); - } - - /*write given buffer to the file, overwriting the file, it doesn't append to it.*/ - unsigned save_file(const std::vector& buffer, const std::string& filename) - { - return lodepng_save_file(buffer.empty() ? 0 : &buffer[0], buffer.size(), filename.c_str()); - } -#endif /* LODEPNG_COMPILE_DISK */ - -#ifdef LODEPNG_COMPILE_ZLIB -#ifdef LODEPNG_COMPILE_DECODER - unsigned decompress(std::vector& out, const unsigned char* in, size_t insize, - const LodePNGDecompressSettings& settings) - { - unsigned char* buffer = 0; - size_t buffersize = 0; - unsigned error = zlib_decompress(&buffer, &buffersize, in, insize, &settings); - if (buffer) - { - out.insert(out.end(), &buffer[0], &buffer[buffersize]); - lodepng_free(buffer); - } - return error; - } - - unsigned decompress(std::vector& out, const std::vector& in, - const LodePNGDecompressSettings& settings) - { - return decompress(out, in.empty() ? 0 : &in[0], in.size(), settings); - } -#endif /* LODEPNG_COMPILE_DECODER */ - -#ifdef LODEPNG_COMPILE_ENCODER - unsigned compress(std::vector& out, const unsigned char* in, size_t insize, - const LodePNGCompressSettings& settings) - { - unsigned char* buffer = 0; - size_t buffersize = 0; - unsigned error = zlib_compress(&buffer, &buffersize, in, insize, &settings); - if (buffer) - { - out.insert(out.end(), &buffer[0], &buffer[buffersize]); - lodepng_free(buffer); - } - return error; - } - - unsigned compress(std::vector& out, const std::vector& in, - const LodePNGCompressSettings& settings) - { - return compress(out, in.empty() ? 0 : &in[0], in.size(), settings); - } -#endif /* LODEPNG_COMPILE_ENCODER */ -#endif /* LODEPNG_COMPILE_ZLIB */ - - -#ifdef LODEPNG_COMPILE_PNG - - State::State() - { - lodepng_state_init(this); - } - - State::State(const State& other) - { - lodepng_state_init(this); - lodepng_state_copy(this, &other); - } - - State::~State() - { - lodepng_state_cleanup(this); - } - - State& State::operator=(const State& other) - { - lodepng_state_copy(this, &other); - return *this; - } - -#ifdef LODEPNG_COMPILE_DECODER - - unsigned decode(std::vector& out, unsigned& w, unsigned& h, const unsigned char* in, - size_t insize, LodePNGColorType colortype, unsigned bitdepth) - { - unsigned char* buffer; - unsigned error = lodepng_decode_memory(&buffer, &w, &h, in, insize, colortype, bitdepth); - if (buffer && !error) - { - State state; - state.info_raw.colortype = colortype; - state.info_raw.bitdepth = bitdepth; - size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw); - out.insert(out.end(), &buffer[0], &buffer[buffersize]); - lodepng_free(buffer); - } - return error; - } - - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - const std::vector& in, LodePNGColorType colortype, unsigned bitdepth) - { - return decode(out, w, h, in.empty() ? 0 : &in[0], (unsigned)in.size(), colortype, bitdepth); - } - - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - State& state, - const unsigned char* in, size_t insize) - { - unsigned char* buffer = NULL; - unsigned error = lodepng_decode(&buffer, &w, &h, &state, in, insize); - if (buffer && !error) - { - size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw); - out.insert(out.end(), &buffer[0], &buffer[buffersize]); - } - lodepng_free(buffer); - return error; - } - - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - State& state, - const std::vector& in) - { - return decode(out, w, h, state, in.empty() ? 0 : &in[0], in.size()); - } - -#ifdef LODEPNG_COMPILE_DISK - unsigned decode(std::vector& out, unsigned& w, unsigned& h, const std::string& filename, - LodePNGColorType colortype, unsigned bitdepth) - { - std::vector buffer; - unsigned error = load_file(buffer, filename); - if (error) return error; - return decode(out, w, h, buffer, colortype, bitdepth); - } -#endif /* LODEPNG_COMPILE_DECODER */ -#endif /* LODEPNG_COMPILE_DISK */ - -#ifdef LODEPNG_COMPILE_ENCODER - unsigned encode(std::vector& out, const unsigned char* in, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth) - { - unsigned char* buffer; - size_t buffersize; - unsigned error = lodepng_encode_memory(&buffer, &buffersize, in, w, h, colortype, bitdepth); - if (buffer) - { - out.insert(out.end(), &buffer[0], &buffer[buffersize]); - lodepng_free(buffer); - } - return error; - } - - unsigned encode(std::vector& out, - const std::vector& in, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth) - { - if (lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84; - return encode(out, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth); - } - - unsigned encode(std::vector& out, - const unsigned char* in, unsigned w, unsigned h, - State& state) - { - unsigned char* buffer; - size_t buffersize; - unsigned error = lodepng_encode(&buffer, &buffersize, in, w, h, &state); - if (buffer) - { - out.insert(out.end(), &buffer[0], &buffer[buffersize]); - lodepng_free(buffer); - } - return error; - } - - unsigned encode(std::vector& out, - const std::vector& in, unsigned w, unsigned h, - State& state) - { - if (lodepng_get_raw_size(w, h, &state.info_raw) > in.size()) return 84; - return encode(out, in.empty() ? 0 : &in[0], w, h, state); - } - -#ifdef LODEPNG_COMPILE_DISK - unsigned encode(const std::string& filename, - const unsigned char* in, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth) - { - std::vector buffer; - unsigned error = encode(buffer, in, w, h, colortype, bitdepth); - if (!error) error = save_file(buffer, filename); - return error; - } - - unsigned encode(const std::string& filename, - const std::vector& in, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth) - { - if (lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84; - return encode(filename, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth); - } -#endif /* LODEPNG_COMPILE_DISK */ -#endif /* LODEPNG_COMPILE_ENCODER */ -#endif /* LODEPNG_COMPILE_PNG */ -} /* namespace lodepng */ -#endif /*LODEPNG_COMPILE_CPP*/ diff --git a/external/bc7enc_rdo/lodepng.h b/external/bc7enc_rdo/lodepng.h deleted file mode 100644 index df0f1e78c2..0000000000 --- a/external/bc7enc_rdo/lodepng.h +++ /dev/null @@ -1,1761 +0,0 @@ -/* -LodePNG version 20161127 - -Copyright (c) 2005-2016 Lode Vandevenne - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ - -#ifndef LODEPNG_H -#define LODEPNG_H - -#include /*for size_t*/ - -extern const char* LODEPNG_VERSION_STRING; - -/* -The following #defines are used to create code sections. They can be disabled -to disable code sections, which can give faster compile time and smaller binary. -The "NO_COMPILE" defines are designed to be used to pass as defines to the -compiler command to disable them without modifying this header, e.g. --DLODEPNG_NO_COMPILE_ZLIB for gcc. -In addition to those below, you can also define LODEPNG_NO_COMPILE_CRC to -allow implementing a custom lodepng_crc32. -*/ -/*deflate & zlib. If disabled, you must specify alternative zlib functions in -the custom_zlib field of the compress and decompress settings*/ -#ifndef LODEPNG_NO_COMPILE_ZLIB -#define LODEPNG_COMPILE_ZLIB -#endif -/*png encoder and png decoder*/ -#ifndef LODEPNG_NO_COMPILE_PNG -#define LODEPNG_COMPILE_PNG -#endif -/*deflate&zlib decoder and png decoder*/ -#ifndef LODEPNG_NO_COMPILE_DECODER -#define LODEPNG_COMPILE_DECODER -#endif -/*deflate&zlib encoder and png encoder*/ -#ifndef LODEPNG_NO_COMPILE_ENCODER -#define LODEPNG_COMPILE_ENCODER -#endif -/*the optional built in harddisk file loading and saving functions*/ -#ifndef LODEPNG_NO_COMPILE_DISK -#define LODEPNG_COMPILE_DISK -#endif -/*support for chunks other than IHDR, IDAT, PLTE, tRNS, IEND: ancillary and unknown chunks*/ -#ifndef LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS -#define LODEPNG_COMPILE_ANCILLARY_CHUNKS -#endif -/*ability to convert error numerical codes to English text string*/ -#ifndef LODEPNG_NO_COMPILE_ERROR_TEXT -#define LODEPNG_COMPILE_ERROR_TEXT -#endif -/*Compile the default allocators (C's free, malloc and realloc). If you disable this, -you can define the functions lodepng_free, lodepng_malloc and lodepng_realloc in your -source files with custom allocators.*/ -#ifndef LODEPNG_NO_COMPILE_ALLOCATORS -#define LODEPNG_COMPILE_ALLOCATORS -#endif -/*compile the C++ version (you can disable the C++ wrapper here even when compiling for C++)*/ -#ifdef __cplusplus -#ifndef LODEPNG_NO_COMPILE_CPP -#define LODEPNG_COMPILE_CPP -#endif -#endif - -#ifdef LODEPNG_COMPILE_CPP -#include -#include -#endif /*LODEPNG_COMPILE_CPP*/ - -#ifdef LODEPNG_COMPILE_PNG -/*The PNG color types (also used for raw).*/ -typedef enum LodePNGColorType -{ - LCT_GREY = 0, /*greyscale: 1,2,4,8,16 bit*/ - LCT_RGB = 2, /*RGB: 8,16 bit*/ - LCT_PALETTE = 3, /*palette: 1,2,4,8 bit*/ - LCT_GREY_ALPHA = 4, /*greyscale with alpha: 8,16 bit*/ - LCT_RGBA = 6 /*RGB with alpha: 8,16 bit*/ -} LodePNGColorType; - -#ifdef LODEPNG_COMPILE_DECODER -/* -Converts PNG data in memory to raw pixel data. -out: Output parameter. Pointer to buffer that will contain the raw pixel data. - After decoding, its size is w * h * (bytes per pixel) bytes larger than - initially. Bytes per pixel depends on colortype and bitdepth. - Must be freed after usage with free(*out). - Note: for 16-bit per channel colors, uses big endian format like PNG does. -w: Output parameter. Pointer to width of pixel data. -h: Output parameter. Pointer to height of pixel data. -in: Memory buffer with the PNG file. -insize: size of the in buffer. -colortype: the desired color type for the raw output image. See explanation on PNG color types. -bitdepth: the desired bit depth for the raw output image. See explanation on PNG color types. -Return value: LodePNG error code (0 means no error). -*/ -unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, - const unsigned char* in, size_t insize, - LodePNGColorType colortype, unsigned bitdepth); - -/*Same as lodepng_decode_memory, but always decodes to 32-bit RGBA raw image*/ -unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, - const unsigned char* in, size_t insize); - -/*Same as lodepng_decode_memory, but always decodes to 24-bit RGB raw image*/ -unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, - const unsigned char* in, size_t insize); - -#ifdef LODEPNG_COMPILE_DISK -/* -Load PNG from disk, from file with given name. -Same as the other decode functions, but instead takes a filename as input. -*/ -unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, - const char* filename, - LodePNGColorType colortype, unsigned bitdepth); - -/*Same as lodepng_decode_file, but always decodes to 32-bit RGBA raw image.*/ -unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, - const char* filename); - -/*Same as lodepng_decode_file, but always decodes to 24-bit RGB raw image.*/ -unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, - const char* filename); -#endif /*LODEPNG_COMPILE_DISK*/ -#endif /*LODEPNG_COMPILE_DECODER*/ - - -#ifdef LODEPNG_COMPILE_ENCODER -/* -Converts raw pixel data into a PNG image in memory. The colortype and bitdepth - of the output PNG image cannot be chosen, they are automatically determined - by the colortype, bitdepth and content of the input pixel data. - Note: for 16-bit per channel colors, needs big endian format like PNG does. -out: Output parameter. Pointer to buffer that will contain the PNG image data. - Must be freed after usage with free(*out). -outsize: Output parameter. Pointer to the size in bytes of the out buffer. -image: The raw pixel data to encode. The size of this buffer should be - w * h * (bytes per pixel), bytes per pixel depends on colortype and bitdepth. -w: width of the raw pixel data in pixels. -h: height of the raw pixel data in pixels. -colortype: the color type of the raw input image. See explanation on PNG color types. -bitdepth: the bit depth of the raw input image. See explanation on PNG color types. -Return value: LodePNG error code (0 means no error). -*/ -unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, - const unsigned char* image, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth); - -/*Same as lodepng_encode_memory, but always encodes from 32-bit RGBA raw image.*/ -unsigned lodepng_encode32(unsigned char** out, size_t* outsize, - const unsigned char* image, unsigned w, unsigned h); - -/*Same as lodepng_encode_memory, but always encodes from 24-bit RGB raw image.*/ -unsigned lodepng_encode24(unsigned char** out, size_t* outsize, - const unsigned char* image, unsigned w, unsigned h); - -#ifdef LODEPNG_COMPILE_DISK -/* -Converts raw pixel data into a PNG file on disk. -Same as the other encode functions, but instead takes a filename as output. -NOTE: This overwrites existing files without warning! -*/ -unsigned lodepng_encode_file(const char* filename, - const unsigned char* image, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth); - -/*Same as lodepng_encode_file, but always encodes from 32-bit RGBA raw image.*/ -unsigned lodepng_encode32_file(const char* filename, - const unsigned char* image, unsigned w, unsigned h); - -/*Same as lodepng_encode_file, but always encodes from 24-bit RGB raw image.*/ -unsigned lodepng_encode24_file(const char* filename, - const unsigned char* image, unsigned w, unsigned h); -#endif /*LODEPNG_COMPILE_DISK*/ -#endif /*LODEPNG_COMPILE_ENCODER*/ - - -#ifdef LODEPNG_COMPILE_CPP -namespace lodepng -{ -#ifdef LODEPNG_COMPILE_DECODER - /*Same as lodepng_decode_memory, but decodes to an std::vector. The colortype - is the format to output the pixels to. Default is RGBA 8-bit per channel.*/ - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - const unsigned char* in, size_t insize, - LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - const std::vector& in, - LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); -#ifdef LODEPNG_COMPILE_DISK - /* - Converts PNG file from disk to raw pixel data in memory. - Same as the other decode functions, but instead takes a filename as input. - */ - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - const std::string& filename, - LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); -#endif /* LODEPNG_COMPILE_DISK */ -#endif /* LODEPNG_COMPILE_DECODER */ - -#ifdef LODEPNG_COMPILE_ENCODER - /*Same as lodepng_encode_memory, but encodes to an std::vector. colortype - is that of the raw input data. The output PNG color type will be auto chosen.*/ - unsigned encode(std::vector& out, - const unsigned char* in, unsigned w, unsigned h, - LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); - unsigned encode(std::vector& out, - const std::vector& in, unsigned w, unsigned h, - LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); -#ifdef LODEPNG_COMPILE_DISK - /* - Converts 32-bit RGBA raw pixel data into a PNG file on disk. - Same as the other encode functions, but instead takes a filename as output. - NOTE: This overwrites existing files without warning! - */ - unsigned encode(const std::string& filename, - const unsigned char* in, unsigned w, unsigned h, - LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); - unsigned encode(const std::string& filename, - const std::vector& in, unsigned w, unsigned h, - LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); -#endif /* LODEPNG_COMPILE_DISK */ -#endif /* LODEPNG_COMPILE_ENCODER */ -} /* namespace lodepng */ -#endif /*LODEPNG_COMPILE_CPP*/ -#endif /*LODEPNG_COMPILE_PNG*/ - -#ifdef LODEPNG_COMPILE_ERROR_TEXT -/*Returns an English description of the numerical error code.*/ -const char* lodepng_error_text(unsigned code); -#endif /*LODEPNG_COMPILE_ERROR_TEXT*/ - -#ifdef LODEPNG_COMPILE_DECODER -/*Settings for zlib decompression*/ -typedef struct LodePNGDecompressSettings LodePNGDecompressSettings; -struct LodePNGDecompressSettings -{ - unsigned ignore_adler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/ - - /*use custom zlib decoder instead of built in one (default: null)*/ - unsigned(*custom_zlib)(unsigned char**, size_t*, - const unsigned char*, size_t, - const LodePNGDecompressSettings*); - /*use custom deflate decoder instead of built in one (default: null) - if custom_zlib is used, custom_deflate is ignored since only the built in - zlib function will call custom_deflate*/ - unsigned(*custom_inflate)(unsigned char**, size_t*, - const unsigned char*, size_t, - const LodePNGDecompressSettings*); - - const void* custom_context; /*optional custom settings for custom functions*/ -}; - -extern const LodePNGDecompressSettings lodepng_default_decompress_settings; -void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings); -#endif /*LODEPNG_COMPILE_DECODER*/ - -#ifdef LODEPNG_COMPILE_ENCODER -/* -Settings for zlib compression. Tweaking these settings tweaks the balance -between speed and compression ratio. -*/ -typedef struct LodePNGCompressSettings LodePNGCompressSettings; -struct LodePNGCompressSettings /*deflate = compress*/ -{ - /*LZ77 related settings*/ - unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/ - unsigned use_lz77; /*whether or not to use LZ77. Should be 1 for proper compression.*/ - unsigned windowsize; /*must be a power of two <= 32768. higher compresses more but is slower. Default value: 2048.*/ - unsigned minmatch; /*mininum lz77 length. 3 is normally best, 6 can be better for some PNGs. Default: 0*/ - unsigned nicematch; /*stop searching if >= this length found. Set to 258 for best compression. Default: 128*/ - unsigned lazymatching; /*use lazy matching: better compression but a bit slower. Default: true*/ - - /*use custom zlib encoder instead of built in one (default: null)*/ - unsigned(*custom_zlib)(unsigned char**, size_t*, - const unsigned char*, size_t, - const LodePNGCompressSettings*); - /*use custom deflate encoder instead of built in one (default: null) - if custom_zlib is used, custom_deflate is ignored since only the built in - zlib function will call custom_deflate*/ - unsigned(*custom_deflate)(unsigned char**, size_t*, - const unsigned char*, size_t, - const LodePNGCompressSettings*); - - const void* custom_context; /*optional custom settings for custom functions*/ -}; - -extern const LodePNGCompressSettings lodepng_default_compress_settings; -void lodepng_compress_settings_init(LodePNGCompressSettings* settings); -#endif /*LODEPNG_COMPILE_ENCODER*/ - -#ifdef LODEPNG_COMPILE_PNG -/* -Color mode of an image. Contains all information required to decode the pixel -bits to RGBA colors. This information is the same as used in the PNG file -format, and is used both for PNG and raw image data in LodePNG. -*/ -typedef struct LodePNGColorMode -{ - /*header (IHDR)*/ - LodePNGColorType colortype; /*color type, see PNG standard or documentation further in this header file*/ - unsigned bitdepth; /*bits per sample, see PNG standard or documentation further in this header file*/ - - /* - palette (PLTE and tRNS) - - Dynamically allocated with the colors of the palette, including alpha. - When encoding a PNG, to store your colors in the palette of the LodePNGColorMode, first use - lodepng_palette_clear, then for each color use lodepng_palette_add. - If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette. - - When decoding, by default you can ignore this palette, since LodePNG already - fills the palette colors in the pixels of the raw RGBA output. - - The palette is only supported for color type 3. - */ - unsigned char* palette; /*palette in RGBARGBA... order. When allocated, must be either 0, or have size 1024*/ - size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/ - - /* - transparent color key (tRNS) - - This color uses the same bit depth as the bitdepth value in this struct, which can be 1-bit to 16-bit. - For greyscale PNGs, r, g and b will all 3 be set to the same. - - When decoding, by default you can ignore this information, since LodePNG sets - pixels with this key to transparent already in the raw RGBA output. - - The color key is only supported for color types 0 and 2. - */ - unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/ - unsigned key_r; /*red/greyscale component of color key*/ - unsigned key_g; /*green component of color key*/ - unsigned key_b; /*blue component of color key*/ -} LodePNGColorMode; - -/*init, cleanup and copy functions to use with this struct*/ -void lodepng_color_mode_init(LodePNGColorMode* info); -void lodepng_color_mode_cleanup(LodePNGColorMode* info); -/*return value is error code (0 means no error)*/ -unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source); - -void lodepng_palette_clear(LodePNGColorMode* info); -/*add 1 color to the palette*/ -unsigned lodepng_palette_add(LodePNGColorMode* info, - unsigned char r, unsigned char g, unsigned char b, unsigned char a); - -/*get the total amount of bits per pixel, based on colortype and bitdepth in the struct*/ -unsigned lodepng_get_bpp(const LodePNGColorMode* info); -/*get the amount of color channels used, based on colortype in the struct. -If a palette is used, it counts as 1 channel.*/ -unsigned lodepng_get_channels(const LodePNGColorMode* info); -/*is it a greyscale type? (only colortype 0 or 4)*/ -unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info); -/*has it got an alpha channel? (only colortype 2 or 6)*/ -unsigned lodepng_is_alpha_type(const LodePNGColorMode* info); -/*has it got a palette? (only colortype 3)*/ -unsigned lodepng_is_palette_type(const LodePNGColorMode* info); -/*only returns true if there is a palette and there is a value in the palette with alpha < 255. -Loops through the palette to check this.*/ -unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info); -/* -Check if the given color info indicates the possibility of having non-opaque pixels in the PNG image. -Returns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels). -Returns false if the image can only have opaque pixels. -In detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values, -or if "key_defined" is true. -*/ -unsigned lodepng_can_have_alpha(const LodePNGColorMode* info); -/*Returns the byte size of a raw image buffer with given width, height and color mode*/ -size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color); - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS -/*The information of a Time chunk in PNG.*/ -typedef struct LodePNGTime -{ - unsigned year; /*2 bytes used (0-65535)*/ - unsigned month; /*1-12*/ - unsigned day; /*1-31*/ - unsigned hour; /*0-23*/ - unsigned minute; /*0-59*/ - unsigned second; /*0-60 (to allow for leap seconds)*/ -} LodePNGTime; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - -/*Information about the PNG image, except pixels, width and height.*/ -typedef struct LodePNGInfo -{ - /*header (IHDR), palette (PLTE) and transparency (tRNS) chunks*/ - unsigned compression_method;/*compression method of the original file. Always 0.*/ - unsigned filter_method; /*filter method of the original file*/ - unsigned interlace_method; /*interlace method of the original file*/ - LodePNGColorMode color; /*color type and bits, palette and transparency of the PNG file*/ - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - /* - suggested background color chunk (bKGD) - This color uses the same color mode as the PNG (except alpha channel), which can be 1-bit to 16-bit. - - For greyscale PNGs, r, g and b will all 3 be set to the same. When encoding - the encoder writes the red one. For palette PNGs: When decoding, the RGB value - will be stored, not a palette index. But when encoding, specify the index of - the palette in background_r, the other two are then ignored. - - The decoder does not use this background color to edit the color of pixels. - */ - unsigned background_defined; /*is a suggested background color given?*/ - unsigned background_r; /*red component of suggested background color*/ - unsigned background_g; /*green component of suggested background color*/ - unsigned background_b; /*blue component of suggested background color*/ - - /* - non-international text chunks (tEXt and zTXt) - - The char** arrays each contain num strings. The actual messages are in - text_strings, while text_keys are keywords that give a short description what - the actual text represents, e.g. Title, Author, Description, or anything else. - - A keyword is minimum 1 character and maximum 79 characters long. It's - discouraged to use a single line length longer than 79 characters for texts. - - Don't allocate these text buffers yourself. Use the init/cleanup functions - correctly and use lodepng_add_text and lodepng_clear_text. - */ - size_t text_num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/ - char** text_keys; /*the keyword of a text chunk (e.g. "Comment")*/ - char** text_strings; /*the actual text*/ - - /* - international text chunks (iTXt) - Similar to the non-international text chunks, but with additional strings - "langtags" and "transkeys". - */ - size_t itext_num; /*the amount of international texts in this PNG*/ - char** itext_keys; /*the English keyword of the text chunk (e.g. "Comment")*/ - char** itext_langtags; /*language tag for this text's language, ISO/IEC 646 string, e.g. ISO 639 language tag*/ - char** itext_transkeys; /*keyword translated to the international language - UTF-8 string*/ - char** itext_strings; /*the actual international text - UTF-8 string*/ - - /*time chunk (tIME)*/ - unsigned time_defined; /*set to 1 to make the encoder generate a tIME chunk*/ - LodePNGTime time; - - /*phys chunk (pHYs)*/ - unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/ - unsigned phys_x; /*pixels per unit in x direction*/ - unsigned phys_y; /*pixels per unit in y direction*/ - unsigned phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/ - - /* - unknown chunks - There are 3 buffers, one for each position in the PNG where unknown chunks can appear - each buffer contains all unknown chunks for that position consecutively - The 3 buffers are the unknown chunks between certain critical chunks: - 0: IHDR-PLTE, 1: PLTE-IDAT, 2: IDAT-IEND - Do not allocate or traverse this data yourself. Use the chunk traversing functions declared - later, such as lodepng_chunk_next and lodepng_chunk_append, to read/write this struct. - */ - unsigned char* unknown_chunks_data[3]; - size_t unknown_chunks_size[3]; /*size in bytes of the unknown chunks, given for protection*/ -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ -} LodePNGInfo; - -/*init, cleanup and copy functions to use with this struct*/ -void lodepng_info_init(LodePNGInfo* info); -void lodepng_info_cleanup(LodePNGInfo* info); -/*return value is error code (0 means no error)*/ -unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source); - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS -void lodepng_clear_text(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/ -unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str); /*push back both texts at once*/ - -void lodepng_clear_itext(LodePNGInfo* info); /*use this to clear the itexts again after you filled them in*/ -unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag, - const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/ -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - -/* -Converts raw buffer from one color type to another color type, based on -LodePNGColorMode structs to describe the input and output color type. -See the reference manual at the end of this header file to see which color conversions are supported. -return value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported) -The out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel -of the output color type (lodepng_get_bpp). -For < 8 bpp images, there should not be padding bits at the end of scanlines. -For 16-bit per channel colors, uses big endian format like PNG does. -Return value is LodePNG error code -*/ -unsigned lodepng_convert(unsigned char* out, const unsigned char* in, - const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in, - unsigned w, unsigned h); - -#ifdef LODEPNG_COMPILE_DECODER -/* -Settings for the decoder. This contains settings for the PNG and the Zlib -decoder, but not the Info settings from the Info structs. -*/ -typedef struct LodePNGDecoderSettings -{ - LodePNGDecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/ - - unsigned ignore_crc; /*ignore CRC checksums*/ - - unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/ - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - unsigned read_text_chunks; /*if false but remember_unknown_chunks is true, they're stored in the unknown chunks*/ - /*store all bytes from unknown chunks in the LodePNGInfo (off by default, useful for a png editor)*/ - unsigned remember_unknown_chunks; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ -} LodePNGDecoderSettings; - -void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings); -#endif /*LODEPNG_COMPILE_DECODER*/ - -#ifdef LODEPNG_COMPILE_ENCODER -/*automatically use color type with less bits per pixel if losslessly possible. Default: AUTO*/ -typedef enum LodePNGFilterStrategy -{ - /*every filter at zero*/ - LFS_ZERO, - /*Use filter that gives minimum sum, as described in the official PNG filter heuristic.*/ - LFS_MINSUM, - /*Use the filter type that gives smallest Shannon entropy for this scanline. Depending - on the image, this is better or worse than minsum.*/ - LFS_ENTROPY, - /* - Brute-force-search PNG filters by compressing each filter for each scanline. - Experimental, very slow, and only rarely gives better compression than MINSUM. - */ - LFS_BRUTE_FORCE, - /*use predefined_filters buffer: you specify the filter type for each scanline*/ - LFS_PREDEFINED -} LodePNGFilterStrategy; - -/*Gives characteristics about the colors of the image, which helps decide which color model to use for encoding. -Used internally by default if "auto_convert" is enabled. Public because it's useful for custom algorithms.*/ -typedef struct LodePNGColorProfile -{ - unsigned colored; /*not greyscale*/ - unsigned key; /*image is not opaque and color key is possible instead of full alpha*/ - unsigned short key_r; /*key values, always as 16-bit, in 8-bit case the byte is duplicated, e.g. 65535 means 255*/ - unsigned short key_g; - unsigned short key_b; - unsigned alpha; /*image is not opaque and alpha channel or alpha palette required*/ - unsigned numcolors; /*amount of colors, up to 257. Not valid if bits == 16.*/ - unsigned char palette[1024]; /*Remembers up to the first 256 RGBA colors, in no particular order*/ - unsigned bits; /*bits per channel (not for palette). 1,2 or 4 for greyscale only. 16 if 16-bit per channel required.*/ -} LodePNGColorProfile; - -void lodepng_color_profile_init(LodePNGColorProfile* profile); - -/*Get a LodePNGColorProfile of the image.*/ -unsigned lodepng_get_color_profile(LodePNGColorProfile* profile, - const unsigned char* image, unsigned w, unsigned h, - const LodePNGColorMode* mode_in); -/*The function LodePNG uses internally to decide the PNG color with auto_convert. -Chooses an optimal color model, e.g. grey if only grey pixels, palette if < 256 colors, ...*/ -unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out, - const unsigned char* image, unsigned w, unsigned h, - const LodePNGColorMode* mode_in); - -/*Settings for the encoder.*/ -typedef struct LodePNGEncoderSettings -{ - LodePNGCompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/ - - unsigned auto_convert; /*automatically choose output PNG color type. Default: true*/ - - /*If true, follows the official PNG heuristic: if the PNG uses a palette or lower than - 8 bit depth, set all filters to zero. Otherwise use the filter_strategy. Note that to - completely follow the official PNG heuristic, filter_palette_zero must be true and - filter_strategy must be LFS_MINSUM*/ - unsigned filter_palette_zero; - /*Which filter strategy to use when not using zeroes due to filter_palette_zero. - Set filter_palette_zero to 0 to ensure always using your chosen strategy. Default: LFS_MINSUM*/ - LodePNGFilterStrategy filter_strategy; - /*used if filter_strategy is LFS_PREDEFINED. In that case, this must point to a buffer with - the same length as the amount of scanlines in the image, and each value must <= 5. You - have to cleanup this buffer, LodePNG will never free it. Don't forget that filter_palette_zero - must be set to 0 to ensure this is also used on palette or low bitdepth images.*/ - const unsigned char* predefined_filters; - - /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette). - If colortype is 3, PLTE is _always_ created.*/ - unsigned force_palette; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - /*add LodePNG identifier and version as a text chunk, for debugging*/ - unsigned add_id; - /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/ - unsigned text_compression; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ -} LodePNGEncoderSettings; - -void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings); -#endif /*LODEPNG_COMPILE_ENCODER*/ - - -#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) -/*The settings, state and information for extended encoding and decoding.*/ -typedef struct LodePNGState -{ -#ifdef LODEPNG_COMPILE_DECODER - LodePNGDecoderSettings decoder; /*the decoding settings*/ -#endif /*LODEPNG_COMPILE_DECODER*/ -#ifdef LODEPNG_COMPILE_ENCODER - LodePNGEncoderSettings encoder; /*the encoding settings*/ -#endif /*LODEPNG_COMPILE_ENCODER*/ - LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/ - LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/ - unsigned error; -#ifdef LODEPNG_COMPILE_CPP - /* For the lodepng::State subclass. */ - virtual ~LodePNGState() {} -#endif -} LodePNGState; - -/*init, cleanup and copy functions to use with this struct*/ -void lodepng_state_init(LodePNGState* state); -void lodepng_state_cleanup(LodePNGState* state); -void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source); -#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */ - -#ifdef LODEPNG_COMPILE_DECODER -/* -Same as lodepng_decode_memory, but uses a LodePNGState to allow custom settings and -getting much more information about the PNG image and color mode. -*/ -unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h, - LodePNGState* state, - const unsigned char* in, size_t insize); - -/* -Read the PNG header, but not the actual data. This returns only the information -that is in the header chunk of the PNG, such as width, height and color type. The -information is placed in the info_png field of the LodePNGState. -*/ -unsigned lodepng_inspect(unsigned* w, unsigned* h, - LodePNGState* state, - const unsigned char* in, size_t insize); -#endif /*LODEPNG_COMPILE_DECODER*/ - - -#ifdef LODEPNG_COMPILE_ENCODER -/*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/ -unsigned lodepng_encode(unsigned char** out, size_t* outsize, - const unsigned char* image, unsigned w, unsigned h, - LodePNGState* state); -#endif /*LODEPNG_COMPILE_ENCODER*/ - -/* -The lodepng_chunk functions are normally not needed, except to traverse the -unknown chunks stored in the LodePNGInfo struct, or add new ones to it. -It also allows traversing the chunks of an encoded PNG file yourself. - -PNG standard chunk naming conventions: -First byte: uppercase = critical, lowercase = ancillary -Second byte: uppercase = public, lowercase = private -Third byte: must be uppercase -Fourth byte: uppercase = unsafe to copy, lowercase = safe to copy -*/ - -/* -Gets the length of the data of the chunk. Total chunk length has 12 bytes more. -There must be at least 4 bytes to read from. If the result value is too large, -it may be corrupt data. -*/ -unsigned lodepng_chunk_length(const unsigned char* chunk); - -/*puts the 4-byte type in null terminated string*/ -void lodepng_chunk_type(char type[5], const unsigned char* chunk); - -/*check if the type is the given type*/ -unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type); - -/*0: it's one of the critical chunk types, 1: it's an ancillary chunk (see PNG standard)*/ -unsigned char lodepng_chunk_ancillary(const unsigned char* chunk); - -/*0: public, 1: private (see PNG standard)*/ -unsigned char lodepng_chunk_private(const unsigned char* chunk); - -/*0: the chunk is unsafe to copy, 1: the chunk is safe to copy (see PNG standard)*/ -unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk); - -/*get pointer to the data of the chunk, where the input points to the header of the chunk*/ -unsigned char* lodepng_chunk_data(unsigned char* chunk); -const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk); - -/*returns 0 if the crc is correct, 1 if it's incorrect (0 for OK as usual!)*/ -unsigned lodepng_chunk_check_crc(const unsigned char* chunk); - -/*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/ -void lodepng_chunk_generate_crc(unsigned char* chunk); - -/*iterate to next chunks. don't use on IEND chunk, as there is no next chunk then*/ -unsigned char* lodepng_chunk_next(unsigned char* chunk); -const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk); - -/* -Appends chunk to the data in out. The given chunk should already have its chunk header. -The out variable and outlength are updated to reflect the new reallocated buffer. -Returns error code (0 if it went ok) -*/ -unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk); - -/* -Appends new chunk to out. The chunk to append is given by giving its length, type -and data separately. The type is a 4-letter string. -The out variable and outlength are updated to reflect the new reallocated buffer. -Returne error code (0 if it went ok) -*/ -unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, - const char* type, const unsigned char* data); - - -/*Calculate CRC32 of buffer*/ -unsigned lodepng_crc32(const unsigned char* buf, size_t len); -#endif /*LODEPNG_COMPILE_PNG*/ - - -#ifdef LODEPNG_COMPILE_ZLIB -/* -This zlib part can be used independently to zlib compress and decompress a -buffer. It cannot be used to create gzip files however, and it only supports the -part of zlib that is required for PNG, it does not support dictionaries. -*/ - -#ifdef LODEPNG_COMPILE_DECODER -/*Inflate a buffer. Inflate is the decompression step of deflate. Out buffer must be freed after use.*/ -unsigned lodepng_inflate(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGDecompressSettings* settings); - -/* -Decompresses Zlib data. Reallocates the out buffer and appends the data. The -data must be according to the zlib specification. -Either, *out must be NULL and *outsize must be 0, or, *out must be a valid -buffer and *outsize its size in bytes. out must be freed by user after usage. -*/ -unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGDecompressSettings* settings); -#endif /*LODEPNG_COMPILE_DECODER*/ - -#ifdef LODEPNG_COMPILE_ENCODER -/* -Compresses data with Zlib. Reallocates the out buffer and appends the data. -Zlib adds a small header and trailer around the deflate data. -The data is output in the format of the zlib specification. -Either, *out must be NULL and *outsize must be 0, or, *out must be a valid -buffer and *outsize its size in bytes. out must be freed by user after usage. -*/ -unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGCompressSettings* settings); - -/* -Find length-limited Huffman code for given frequencies. This function is in the -public interface only for tests, it's used internally by lodepng_deflate. -*/ -unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies, - size_t numcodes, unsigned maxbitlen); - -/*Compress a buffer with deflate. See RFC 1951. Out buffer must be freed after use.*/ -unsigned lodepng_deflate(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGCompressSettings* settings); - -#endif /*LODEPNG_COMPILE_ENCODER*/ -#endif /*LODEPNG_COMPILE_ZLIB*/ - -#ifdef LODEPNG_COMPILE_DISK -/* -Load a file from disk into buffer. The function allocates the out buffer, and -after usage you should free it. -out: output parameter, contains pointer to loaded buffer. -outsize: output parameter, size of the allocated out buffer -filename: the path to the file to load -return value: error code (0 means ok) -*/ -unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename); - -/* -Save a file from buffer to disk. Warning, if it exists, this function overwrites -the file without warning! -buffer: the buffer to write -buffersize: size of the buffer to write -filename: the path to the file to save to -return value: error code (0 means ok) -*/ -unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename); -#endif /*LODEPNG_COMPILE_DISK*/ - -#ifdef LODEPNG_COMPILE_CPP -/* The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. */ -namespace lodepng -{ -#ifdef LODEPNG_COMPILE_PNG - class State : public LodePNGState - { - public: - State(); - State(const State& other); - virtual ~State(); - State& operator=(const State& other); - }; - -#ifdef LODEPNG_COMPILE_DECODER - /* Same as other lodepng::decode, but using a State for more settings and information. */ - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - State& state, - const unsigned char* in, size_t insize); - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - State& state, - const std::vector& in); -#endif /*LODEPNG_COMPILE_DECODER*/ - -#ifdef LODEPNG_COMPILE_ENCODER - /* Same as other lodepng::encode, but using a State for more settings and information. */ - unsigned encode(std::vector& out, - const unsigned char* in, unsigned w, unsigned h, - State& state); - unsigned encode(std::vector& out, - const std::vector& in, unsigned w, unsigned h, - State& state); -#endif /*LODEPNG_COMPILE_ENCODER*/ - -#ifdef LODEPNG_COMPILE_DISK - /* - Load a file from disk into an std::vector. - return value: error code (0 means ok) - */ - unsigned load_file(std::vector& buffer, const std::string& filename); - - /* - Save the binary data in an std::vector to a file on disk. The file is overwritten - without warning. - */ - unsigned save_file(const std::vector& buffer, const std::string& filename); -#endif /* LODEPNG_COMPILE_DISK */ -#endif /* LODEPNG_COMPILE_PNG */ - -#ifdef LODEPNG_COMPILE_ZLIB -#ifdef LODEPNG_COMPILE_DECODER - /* Zlib-decompress an unsigned char buffer */ - unsigned decompress(std::vector& out, const unsigned char* in, size_t insize, - const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings); - - /* Zlib-decompress an std::vector */ - unsigned decompress(std::vector& out, const std::vector& in, - const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings); -#endif /* LODEPNG_COMPILE_DECODER */ - -#ifdef LODEPNG_COMPILE_ENCODER - /* Zlib-compress an unsigned char buffer */ - unsigned compress(std::vector& out, const unsigned char* in, size_t insize, - const LodePNGCompressSettings& settings = lodepng_default_compress_settings); - - /* Zlib-compress an std::vector */ - unsigned compress(std::vector& out, const std::vector& in, - const LodePNGCompressSettings& settings = lodepng_default_compress_settings); -#endif /* LODEPNG_COMPILE_ENCODER */ -#endif /* LODEPNG_COMPILE_ZLIB */ -} /* namespace lodepng */ -#endif /*LODEPNG_COMPILE_CPP*/ - -/* -TODO: -[.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often -[.] check compatibility with various compilers - done but needs to be redone for every newer version -[X] converting color to 16-bit per channel types -[ ] read all public PNG chunk types (but never let the color profile and gamma ones touch RGB values) -[ ] make sure encoder generates no chunks with size > (2^31)-1 -[ ] partial decoding (stream processing) -[X] let the "isFullyOpaque" function check color keys and transparent palettes too -[X] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl" -[ ] don't stop decoding on errors like 69, 57, 58 (make warnings) -[ ] make warnings like: oob palette, checksum fail, data after iend, wrong/unknown crit chunk, no null terminator in text, ... -[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes -[ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ... -[ ] allow user to give data (void*) to custom allocator -*/ - -#endif /*LODEPNG_H inclusion guard*/ - -/* -LodePNG Documentation ---------------------- - -0. table of contents --------------------- - - 1. about - 1.1. supported features - 1.2. features not supported - 2. C and C++ version - 3. security - 4. decoding - 5. encoding - 6. color conversions - 6.1. PNG color types - 6.2. color conversions - 6.3. padding bits - 6.4. A note about 16-bits per channel and endianness - 7. error values - 8. chunks and PNG editing - 9. compiler support - 10. examples - 10.1. decoder C++ example - 10.2. decoder C example - 11. state settings reference - 12. changes - 13. contact information - - -1. about --------- - -PNG is a file format to store raster images losslessly with good compression, -supporting different color types and alpha channel. - -LodePNG is a PNG codec according to the Portable Network Graphics (PNG) -Specification (Second Edition) - W3C Recommendation 10 November 2003. - -The specifications used are: - -*) Portable Network Graphics (PNG) Specification (Second Edition): - http://www.w3.org/TR/2003/REC-PNG-20031110 -*) RFC 1950 ZLIB Compressed Data Format version 3.3: - http://www.gzip.org/zlib/rfc-zlib.html -*) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3: - http://www.gzip.org/zlib/rfc-deflate.html - -The most recent version of LodePNG can currently be found at -http://lodev.org/lodepng/ - -LodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds -extra functionality. - -LodePNG exists out of two files: --lodepng.h: the header file for both C and C++ --lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage - -If you want to start using LodePNG right away without reading this doc, get the -examples from the LodePNG website to see how to use it in code, or check the -smaller examples in chapter 13 here. - -LodePNG is simple but only supports the basic requirements. To achieve -simplicity, the following design choices were made: There are no dependencies -on any external library. There are functions to decode and encode a PNG with -a single function call, and extended versions of these functions taking a -LodePNGState struct allowing to specify or get more information. By default -the colors of the raw image are always RGB or RGBA, no matter what color type -the PNG file uses. To read and write files, there are simple functions to -convert the files to/from buffers in memory. - -This all makes LodePNG suitable for loading textures in games, demos and small -programs, ... It's less suitable for full fledged image editors, loading PNGs -over network (it requires all the image data to be available before decoding can -begin), life-critical systems, ... - -1.1. supported features ------------------------ - -The following features are supported by the decoder: - -*) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image, - or the same color type as the PNG -*) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image -*) Adam7 interlace and deinterlace for any color type -*) loading the image from harddisk or decoding it from a buffer from other sources than harddisk -*) support for alpha channels, including RGBA color model, translucent palettes and color keying -*) zlib decompression (inflate) -*) zlib compression (deflate) -*) CRC32 and ADLER32 checksums -*) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks. -*) the following chunks are supported (generated/interpreted) by both encoder and decoder: - IHDR: header information - PLTE: color palette - IDAT: pixel data - IEND: the final chunk - tRNS: transparency for palettized images - tEXt: textual information - zTXt: compressed textual information - iTXt: international textual information - bKGD: suggested background color - pHYs: physical dimensions - tIME: modification time - -1.2. features not supported ---------------------------- - -The following features are _not_ supported: - -*) some features needed to make a conformant PNG-Editor might be still missing. -*) partial loading/stream processing. All data must be available and is processed in one call. -*) The following public chunks are not supported but treated as unknown chunks by LodePNG - cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT - Some of these are not supported on purpose: LodePNG wants to provide the RGB values - stored in the pixels, not values modified by system dependent gamma or color models. - - -2. C and C++ version --------------------- - -The C version uses buffers allocated with alloc that you need to free() -yourself. You need to use init and cleanup functions for each struct whenever -using a struct from the C version to avoid exploits and memory leaks. - -The C++ version has extra functions with std::vectors in the interface and the -lodepng::State class which is a LodePNGState with constructor and destructor. - -These files work without modification for both C and C++ compilers because all -the additional C++ code is in "#ifdef __cplusplus" blocks that make C-compilers -ignore it, and the C code is made to compile both with strict ISO C90 and C++. - -To use the C++ version, you need to rename the source file to lodepng.cpp -(instead of lodepng.c), and compile it with a C++ compiler. - -To use the C version, you need to rename the source file to lodepng.c (instead -of lodepng.cpp), and compile it with a C compiler. - - -3. Security ------------ - -Even if carefully designed, it's always possible that LodePNG contains possible -exploits. If you discover one, please let me know, and it will be fixed. - -When using LodePNG, care has to be taken with the C version of LodePNG, as well -as the C-style structs when working with C++. The following conventions are used -for all C-style structs: - --if a struct has a corresponding init function, always call the init function when making a new one --if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks --if a struct has a corresponding copy function, use the copy function instead of "=". - The destination must also be inited already. - - -4. Decoding ------------ - -Decoding converts a PNG compressed image to a raw pixel buffer. - -Most documentation on using the decoder is at its declarations in the header -above. For C, simple decoding can be done with functions such as -lodepng_decode32, and more advanced decoding can be done with the struct -LodePNGState and lodepng_decode. For C++, all decoding can be done with the -various lodepng::decode functions, and lodepng::State can be used for advanced -features. - -When using the LodePNGState, it uses the following fields for decoding: -*) LodePNGInfo info_png: it stores extra information about the PNG (the input) in here -*) LodePNGColorMode info_raw: here you can say what color mode of the raw image (the output) you want to get -*) LodePNGDecoderSettings decoder: you can specify a few extra settings for the decoder to use - -LodePNGInfo info_png --------------------- - -After decoding, this contains extra information of the PNG image, except the actual -pixels, width and height because these are already gotten directly from the decoder -functions. - -It contains for example the original color type of the PNG image, text comments, -suggested background color, etc... More details about the LodePNGInfo struct are -at its declaration documentation. - -LodePNGColorMode info_raw -------------------------- - -When decoding, here you can specify which color type you want -the resulting raw image to be. If this is different from the colortype of the -PNG, then the decoder will automatically convert the result. This conversion -always works, except if you want it to convert a color PNG to greyscale or to -a palette with missing colors. - -By default, 32-bit color is used for the result. - -LodePNGDecoderSettings decoder ------------------------------- - -The settings can be used to ignore the errors created by invalid CRC and Adler32 -chunks, and to disable the decoding of tEXt chunks. - -There's also a setting color_convert, true by default. If false, no conversion -is done, the resulting data will be as it was in the PNG (after decompression) -and you'll have to puzzle the colors of the pixels together yourself using the -color type information in the LodePNGInfo. - - -5. Encoding ------------ - -Encoding converts a raw pixel buffer to a PNG compressed image. - -Most documentation on using the encoder is at its declarations in the header -above. For C, simple encoding can be done with functions such as -lodepng_encode32, and more advanced decoding can be done with the struct -LodePNGState and lodepng_encode. For C++, all encoding can be done with the -various lodepng::encode functions, and lodepng::State can be used for advanced -features. - -Like the decoder, the encoder can also give errors. However it gives less errors -since the encoder input is trusted, the decoder input (a PNG image that could -be forged by anyone) is not trusted. - -When using the LodePNGState, it uses the following fields for encoding: -*) LodePNGInfo info_png: here you specify how you want the PNG (the output) to be. -*) LodePNGColorMode info_raw: here you say what color type of the raw image (the input) has -*) LodePNGEncoderSettings encoder: you can specify a few settings for the encoder to use - -LodePNGInfo info_png --------------------- - -When encoding, you use this the opposite way as when decoding: for encoding, -you fill in the values you want the PNG to have before encoding. By default it's -not needed to specify a color type for the PNG since it's automatically chosen, -but it's possible to choose it yourself given the right settings. - -The encoder will not always exactly match the LodePNGInfo struct you give, -it tries as close as possible. Some things are ignored by the encoder. The -encoder uses, for example, the following settings from it when applicable: -colortype and bitdepth, text chunks, time chunk, the color key, the palette, the -background color, the interlace method, unknown chunks, ... - -When encoding to a PNG with colortype 3, the encoder will generate a PLTE chunk. -If the palette contains any colors for which the alpha channel is not 255 (so -there are translucent colors in the palette), it'll add a tRNS chunk. - -LodePNGColorMode info_raw -------------------------- - -You specify the color type of the raw image that you give to the input here, -including a possible transparent color key and palette you happen to be using in -your raw image data. - -By default, 32-bit color is assumed, meaning your input has to be in RGBA -format with 4 bytes (unsigned chars) per pixel. - -LodePNGEncoderSettings encoder ------------------------------- - -The following settings are supported (some are in sub-structs): -*) auto_convert: when this option is enabled, the encoder will -automatically choose the smallest possible color mode (including color key) that -can encode the colors of all pixels without information loss. -*) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree, - 2 = dynamic huffman tree (best compression). Should be 2 for proper - compression. -*) use_lz77: whether or not to use LZ77 for compressed block types. Should be - true for proper compression. -*) windowsize: the window size used by the LZ77 encoder (1 - 32768). Has value - 2048 by default, but can be set to 32768 for better, but slow, compression. -*) force_palette: if colortype is 2 or 6, you can make the encoder write a PLTE - chunk if force_palette is true. This can used as suggested palette to convert - to by viewers that don't support more than 256 colors (if those still exist) -*) add_id: add text chunk "Encoder: LodePNG " to the image. -*) text_compression: default 1. If 1, it'll store texts as zTXt instead of tEXt chunks. - zTXt chunks use zlib compression on the text. This gives a smaller result on - large texts but a larger result on small texts (such as a single program name). - It's all tEXt or all zTXt though, there's no separate setting per text yet. - - -6. color conversions --------------------- - -An important thing to note about LodePNG, is that the color type of the PNG, and -the color type of the raw image, are completely independent. By default, when -you decode a PNG, you get the result as a raw image in the color type you want, -no matter whether the PNG was encoded with a palette, greyscale or RGBA color. -And if you encode an image, by default LodePNG will automatically choose the PNG -color type that gives good compression based on the values of colors and amount -of colors in the image. It can be configured to let you control it instead as -well, though. - -To be able to do this, LodePNG does conversions from one color mode to another. -It can convert from almost any color type to any other color type, except the -following conversions: RGB to greyscale is not supported, and converting to a -palette when the palette doesn't have a required color is not supported. This is -not supported on purpose: this is information loss which requires a color -reduction algorithm that is beyong the scope of a PNG encoder (yes, RGB to grey -is easy, but there are multiple ways if you want to give some channels more -weight). - -By default, when decoding, you get the raw image in 32-bit RGBA or 24-bit RGB -color, no matter what color type the PNG has. And by default when encoding, -LodePNG automatically picks the best color model for the output PNG, and expects -the input image to be 32-bit RGBA or 24-bit RGB. So, unless you want to control -the color format of the images yourself, you can skip this chapter. - -6.1. PNG color types --------------------- - -A PNG image can have many color types, ranging from 1-bit color to 64-bit color, -as well as palettized color modes. After the zlib decompression and unfiltering -in the PNG image is done, the raw pixel data will have that color type and thus -a certain amount of bits per pixel. If you want the output raw image after -decoding to have another color type, a conversion is done by LodePNG. - -The PNG specification gives the following color types: - -0: greyscale, bit depths 1, 2, 4, 8, 16 -2: RGB, bit depths 8 and 16 -3: palette, bit depths 1, 2, 4 and 8 -4: greyscale with alpha, bit depths 8 and 16 -6: RGBA, bit depths 8 and 16 - -Bit depth is the amount of bits per pixel per color channel. So the total amount -of bits per pixel is: amount of channels * bitdepth. - -6.2. color conversions ----------------------- - -As explained in the sections about the encoder and decoder, you can specify -color types and bit depths in info_png and info_raw to change the default -behaviour. - -If, when decoding, you want the raw image to be something else than the default, -you need to set the color type and bit depth you want in the LodePNGColorMode, -or the parameters colortype and bitdepth of the simple decoding function. - -If, when encoding, you use another color type than the default in the raw input -image, you need to specify its color type and bit depth in the LodePNGColorMode -of the raw image, or use the parameters colortype and bitdepth of the simple -encoding function. - -If, when encoding, you don't want LodePNG to choose the output PNG color type -but control it yourself, you need to set auto_convert in the encoder settings -to false, and specify the color type you want in the LodePNGInfo of the -encoder (including palette: it can generate a palette if auto_convert is true, -otherwise not). - -If the input and output color type differ (whether user chosen or auto chosen), -LodePNG will do a color conversion, which follows the rules below, and may -sometimes result in an error. - -To avoid some confusion: --the decoder converts from PNG to raw image --the encoder converts from raw image to PNG --the colortype and bitdepth in LodePNGColorMode info_raw, are those of the raw image --the colortype and bitdepth in the color field of LodePNGInfo info_png, are those of the PNG --when encoding, the color type in LodePNGInfo is ignored if auto_convert - is enabled, it is automatically generated instead --when decoding, the color type in LodePNGInfo is set by the decoder to that of the original - PNG image, but it can be ignored since the raw image has the color type you requested instead --if the color type of the LodePNGColorMode and PNG image aren't the same, a conversion - between the color types is done if the color types are supported. If it is not - supported, an error is returned. If the types are the same, no conversion is done. --even though some conversions aren't supported, LodePNG supports loading PNGs from any - colortype and saving PNGs to any colortype, sometimes it just requires preparing - the raw image correctly before encoding. --both encoder and decoder use the same color converter. - -Non supported color conversions: --color to greyscale: no error is thrown, but the result will look ugly because -only the red channel is taken --anything to palette when that palette does not have that color in it: in this -case an error is thrown - -Supported color conversions: --anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA --any grey or grey+alpha, to grey or grey+alpha --anything to a palette, as long as the palette has the requested colors in it --removing alpha channel --higher to smaller bitdepth, and vice versa - -If you want no color conversion to be done (e.g. for speed or control): --In the encoder, you can make it save a PNG with any color type by giving the -raw color mode and LodePNGInfo the same color mode, and setting auto_convert to -false. --In the decoder, you can make it store the pixel data in the same color type -as the PNG has, by setting the color_convert setting to false. Settings in -info_raw are then ignored. - -The function lodepng_convert does the color conversion. It is available in the -interface but normally isn't needed since the encoder and decoder already call -it. - -6.3. padding bits ------------------ - -In the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines -have a bit amount that isn't a multiple of 8, then padding bits are used so that each -scanline starts at a fresh byte. But that is NOT true for the LodePNG raw input and output. -The raw input image you give to the encoder, and the raw output image you get from the decoder -will NOT have these padding bits, e.g. in the case of a 1-bit image with a width -of 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte, -not the first bit of a new byte. - -6.4. A note about 16-bits per channel and endianness ----------------------------------------------------- - -LodePNG uses unsigned char arrays for 16-bit per channel colors too, just like -for any other color format. The 16-bit values are stored in big endian (most -significant byte first) in these arrays. This is the opposite order of the -little endian used by x86 CPU's. - -LodePNG always uses big endian because the PNG file format does so internally. -Conversions to other formats than PNG uses internally are not supported by -LodePNG on purpose, there are myriads of formats, including endianness of 16-bit -colors, the order in which you store R, G, B and A, and so on. Supporting and -converting to/from all that is outside the scope of LodePNG. - -This may mean that, depending on your use case, you may want to convert the big -endian output of LodePNG to little endian with a for loop. This is certainly not -always needed, many applications and libraries support big endian 16-bit colors -anyway, but it means you cannot simply cast the unsigned char* buffer to an -unsigned short* buffer on x86 CPUs. - - -7. error values ---------------- - -All functions in LodePNG that return an error code, return 0 if everything went -OK, or a non-zero code if there was an error. - -The meaning of the LodePNG error values can be retrieved with the function -lodepng_error_text: given the numerical error code, it returns a description -of the error in English as a string. - -Check the implementation of lodepng_error_text to see the meaning of each code. - - -8. chunks and PNG editing -------------------------- - -If you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG -editor that should follow the rules about handling of unknown chunks, or if your -program is able to read other types of chunks than the ones handled by LodePNG, -then that's possible with the chunk functions of LodePNG. - -A PNG chunk has the following layout: - -4 bytes length -4 bytes type name -length bytes data -4 bytes CRC - -8.1. iterating through chunks ------------------------------ - -If you have a buffer containing the PNG image data, then the first chunk (the -IHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the -signature of the PNG and are not part of a chunk. But if you start at byte 8 -then you have a chunk, and can check the following things of it. - -NOTE: none of these functions check for memory buffer boundaries. To avoid -exploits, always make sure the buffer contains all the data of the chunks. -When using lodepng_chunk_next, make sure the returned value is within the -allocated memory. - -unsigned lodepng_chunk_length(const unsigned char* chunk): - -Get the length of the chunk's data. The total chunk length is this length + 12. - -void lodepng_chunk_type(char type[5], const unsigned char* chunk): -unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type): - -Get the type of the chunk or compare if it's a certain type - -unsigned char lodepng_chunk_critical(const unsigned char* chunk): -unsigned char lodepng_chunk_private(const unsigned char* chunk): -unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk): - -Check if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are). -Check if the chunk is private (public chunks are part of the standard, private ones not). -Check if the chunk is safe to copy. If it's not, then, when modifying data in a critical -chunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your -program doesn't handle that type of unknown chunk. - -unsigned char* lodepng_chunk_data(unsigned char* chunk): -const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk): - -Get a pointer to the start of the data of the chunk. - -unsigned lodepng_chunk_check_crc(const unsigned char* chunk): -void lodepng_chunk_generate_crc(unsigned char* chunk): - -Check if the crc is correct or generate a correct one. - -unsigned char* lodepng_chunk_next(unsigned char* chunk): -const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk): - -Iterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these -functions do no boundary checking of the allocated data whatsoever, so make sure there is enough -data available in the buffer to be able to go to the next chunk. - -unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk): -unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, - const char* type, const unsigned char* data): - -These functions are used to create new chunks that are appended to the data in *out that has -length *outlength. The append function appends an existing chunk to the new data. The create -function creates a new chunk with the given parameters and appends it. Type is the 4-letter -name of the chunk. - -8.2. chunks in info_png ------------------------ - -The LodePNGInfo struct contains fields with the unknown chunk in it. It has 3 -buffers (each with size) to contain 3 types of unknown chunks: -the ones that come before the PLTE chunk, the ones that come between the PLTE -and the IDAT chunks, and the ones that come after the IDAT chunks. -It's necessary to make the distionction between these 3 cases because the PNG -standard forces to keep the ordering of unknown chunks compared to the critical -chunks, but does not force any other ordering rules. - -info_png.unknown_chunks_data[0] is the chunks before PLTE -info_png.unknown_chunks_data[1] is the chunks after PLTE, before IDAT -info_png.unknown_chunks_data[2] is the chunks after IDAT - -The chunks in these 3 buffers can be iterated through and read by using the same -way described in the previous subchapter. - -When using the decoder to decode a PNG, you can make it store all unknown chunks -if you set the option settings.remember_unknown_chunks to 1. By default, this -option is off (0). - -The encoder will always encode unknown chunks that are stored in the info_png. -If you need it to add a particular chunk that isn't known by LodePNG, you can -use lodepng_chunk_append or lodepng_chunk_create to the chunk data in -info_png.unknown_chunks_data[x]. - -Chunks that are known by LodePNG should not be added in that way. E.g. to make -LodePNG add a bKGD chunk, set background_defined to true and add the correct -parameters there instead. - - -9. compiler support -------------------- - -No libraries other than the current standard C library are needed to compile -LodePNG. For the C++ version, only the standard C++ library is needed on top. -Add the files lodepng.c(pp) and lodepng.h to your project, include -lodepng.h where needed, and your program can read/write PNG files. - -It is compatible with C90 and up, and C++03 and up. - -If performance is important, use optimization when compiling! For both the -encoder and decoder, this makes a large difference. - -Make sure that LodePNG is compiled with the same compiler of the same version -and with the same settings as the rest of the program, or the interfaces with -std::vectors and std::strings in C++ can be incompatible. - -CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets. - -*) gcc and g++ - -LodePNG is developed in gcc so this compiler is natively supported. It gives no -warnings with compiler options "-Wall -Wextra -pedantic -ansi", with gcc and g++ -version 4.7.1 on Linux, 32-bit and 64-bit. - -*) Clang - -Fully supported and warning-free. - -*) Mingw - -The Mingw compiler (a port of gcc for Windows) should be fully supported by -LodePNG. - -*) Visual Studio and Visual C++ Express Edition - -LodePNG should be warning-free with warning level W4. Two warnings were disabled -with pragmas though: warning 4244 about implicit conversions, and warning 4996 -where it wants to use a non-standard function fopen_s instead of the standard C -fopen. - -Visual Studio may want "stdafx.h" files to be included in each source file and -give an error "unexpected end of file while looking for precompiled header". -This is not standard C++ and will not be added to the stock LodePNG. You can -disable it for lodepng.cpp only by right clicking it, Properties, C/C++, -Precompiled Headers, and set it to Not Using Precompiled Headers there. - -NOTE: Modern versions of VS should be fully supported, but old versions, e.g. -VS6, are not guaranteed to work. - -*) Compilers on Macintosh - -LodePNG has been reported to work both with gcc and LLVM for Macintosh, both for -C and C++. - -*) Other Compilers - -If you encounter problems on any compilers, feel free to let me know and I may -try to fix it if the compiler is modern and standards complient. - - -10. examples ------------- - -This decoder example shows the most basic usage of LodePNG. More complex -examples can be found on the LodePNG website. - -10.1. decoder C++ example -------------------------- - -#include "lodepng.h" -#include - -int main(int argc, char *argv[]) -{ - const char* filename = argc > 1 ? argv[1] : "test.png"; - - //load and decode - std::vector image; - unsigned width, height; - unsigned error = lodepng::decode(image, width, height, filename); - - //if there's an error, display it - if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl; - - //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ... -} - -10.2. decoder C example ------------------------ - -#include "lodepng.h" - -int main(int argc, char *argv[]) -{ - unsigned error; - unsigned char* image; - size_t width, height; - const char* filename = argc > 1 ? argv[1] : "test.png"; - - error = lodepng_decode32_file(&image, &width, &height, filename); - - if(error) printf("decoder error %u: %s\n", error, lodepng_error_text(error)); - - / * use image here * / - - free(image); - return 0; -} - -11. state settings reference ----------------------------- - -A quick reference of some settings to set on the LodePNGState - -For decoding: - -state.decoder.zlibsettings.ignore_adler32: ignore ADLER32 checksums -state.decoder.zlibsettings.custom_...: use custom inflate function -state.decoder.ignore_crc: ignore CRC checksums -state.decoder.color_convert: convert internal PNG color to chosen one -state.decoder.read_text_chunks: whether to read in text metadata chunks -state.decoder.remember_unknown_chunks: whether to read in unknown chunks -state.info_raw.colortype: desired color type for decoded image -state.info_raw.bitdepth: desired bit depth for decoded image -state.info_raw....: more color settings, see struct LodePNGColorMode -state.info_png....: no settings for decoder but ouput, see struct LodePNGInfo - -For encoding: - -state.encoder.zlibsettings.btype: disable compression by setting it to 0 -state.encoder.zlibsettings.use_lz77: use LZ77 in compression -state.encoder.zlibsettings.windowsize: tweak LZ77 windowsize -state.encoder.zlibsettings.minmatch: tweak min LZ77 length to match -state.encoder.zlibsettings.nicematch: tweak LZ77 match where to stop searching -state.encoder.zlibsettings.lazymatching: try one more LZ77 matching -state.encoder.zlibsettings.custom_...: use custom deflate function -state.encoder.auto_convert: choose optimal PNG color type, if 0 uses info_png -state.encoder.filter_palette_zero: PNG filter strategy for palette -state.encoder.filter_strategy: PNG filter strategy to encode with -state.encoder.force_palette: add palette even if not encoding to one -state.encoder.add_id: add LodePNG identifier and version as a text chunk -state.encoder.text_compression: use compressed text chunks for metadata -state.info_raw.colortype: color type of raw input image you provide -state.info_raw.bitdepth: bit depth of raw input image you provide -state.info_raw: more color settings, see struct LodePNGColorMode -state.info_png.color.colortype: desired color type if auto_convert is false -state.info_png.color.bitdepth: desired bit depth if auto_convert is false -state.info_png.color....: more color settings, see struct LodePNGColorMode -state.info_png....: more PNG related settings, see struct LodePNGInfo - - -12. changes ------------ - -The version number of LodePNG is the date of the change given in the format -yyyymmdd. - -Some changes aren't backwards compatible. Those are indicated with a (!) -symbol. - -*) 27 nov 2016: grey+alpha auto color model detection bugfix -*) 18 apr 2016: Changed qsort to custom stable sort (for platforms w/o qsort). -*) 09 apr 2016: Fixed colorkey usage detection, and better file loading (within - the limits of pure C90). -*) 08 dec 2015: Made load_file function return error if file can't be opened. -*) 24 okt 2015: Bugfix with decoding to palette output. -*) 18 apr 2015: Boundary PM instead of just package-merge for faster encoding. -*) 23 aug 2014: Reduced needless memory usage of decoder. -*) 28 jun 2014: Removed fix_png setting, always support palette OOB for - simplicity. Made ColorProfile public. -*) 09 jun 2014: Faster encoder by fixing hash bug and more zeros optimization. -*) 22 dec 2013: Power of two windowsize required for optimization. -*) 15 apr 2013: Fixed bug with LAC_ALPHA and color key. -*) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png). -*) 11 mar 2013 (!): Bugfix with custom free. Changed from "my" to "lodepng_" - prefix for the custom allocators and made it possible with a new #define to - use custom ones in your project without needing to change lodepng's code. -*) 28 jan 2013: Bugfix with color key. -*) 27 okt 2012: Tweaks in text chunk keyword length error handling. -*) 8 okt 2012 (!): Added new filter strategy (entropy) and new auto color mode. - (no palette). Better deflate tree encoding. New compression tweak settings. - Faster color conversions while decoding. Some internal cleanups. -*) 23 sep 2012: Reduced warnings in Visual Studio a little bit. -*) 1 sep 2012 (!): Removed #define's for giving custom (de)compression functions - and made it work with function pointers instead. -*) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc - and free functions and toggle #defines from compiler flags. Small fixes. -*) 6 may 2012 (!): Made plugging in custom zlib/deflate functions more flexible. -*) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed - redundant C++ codec classes. Reduced amount of structs. Everything changed, - but it is cleaner now imho and functionality remains the same. Also fixed - several bugs and shrunk the implementation code. Made new samples. -*) 6 nov 2011 (!): By default, the encoder now automatically chooses the best - PNG color model and bit depth, based on the amount and type of colors of the - raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color. -*) 9 okt 2011: simpler hash chain implementation for the encoder. -*) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching. -*) 23 aug 2011: tweaked the zlib compression parameters after benchmarking. - A bug with the PNG filtertype heuristic was fixed, so that it chooses much - better ones (it's quite significant). A setting to do an experimental, slow, - brute force search for PNG filter types is added. -*) 17 aug 2011 (!): changed some C zlib related function names. -*) 16 aug 2011: made the code less wide (max 120 characters per line). -*) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors. -*) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled. -*) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman - to optimize long sequences of zeros. -*) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and - LodePNG_InfoColor_canHaveAlpha functions for convenience. -*) 7 nov 2010: added LodePNG_error_text function to get error code description. -*) 30 okt 2010: made decoding slightly faster -*) 26 okt 2010: (!) changed some C function and struct names (more consistent). - Reorganized the documentation and the declaration order in the header. -*) 08 aug 2010: only changed some comments and external samples. -*) 05 jul 2010: fixed bug thanks to warnings in the new gcc version. -*) 14 mar 2010: fixed bug where too much memory was allocated for char buffers. -*) 02 sep 2008: fixed bug where it could create empty tree that linux apps could - read by ignoring the problem but windows apps couldn't. -*) 06 jun 2008: added more error checks for out of memory cases. -*) 26 apr 2008: added a few more checks here and there to ensure more safety. -*) 06 mar 2008: crash with encoding of strings fixed -*) 02 feb 2008: support for international text chunks added (iTXt) -*) 23 jan 2008: small cleanups, and #defines to divide code in sections -*) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor. -*) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder. -*) 17 jan 2008: ability to encode and decode compressed zTXt chunks added - Also various fixes, such as in the deflate and the padding bits code. -*) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved - filtering code of encoder. -*) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A - C++ wrapper around this provides an interface almost identical to before. - Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code - are together in these files but it works both for C and C++ compilers. -*) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks -*) 30 aug 2007: bug fixed which makes this Borland C++ compatible -*) 09 aug 2007: some VS2005 warnings removed again -*) 21 jul 2007: deflate code placed in new namespace separate from zlib code -*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images -*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing - invalid std::vector element [0] fixed, and level 3 and 4 warnings removed -*) 02 jun 2007: made the encoder add a tag with version by default -*) 27 may 2007: zlib and png code separated (but still in the same file), - simple encoder/decoder functions added for more simple usage cases -*) 19 may 2007: minor fixes, some code cleaning, new error added (error 69), - moved some examples from here to lodepng_examples.cpp -*) 12 may 2007: palette decoding bug fixed -*) 24 apr 2007: changed the license from BSD to the zlib license -*) 11 mar 2007: very simple addition: ability to encode bKGD chunks. -*) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding - palettized PNG images. Plus little interface change with palette and texts. -*) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes. - Fixed a bug where the end code of a block had length 0 in the Huffman tree. -*) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented - and supported by the encoder, resulting in smaller PNGs at the output. -*) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone. -*) 24 jan 2007: gave encoder an error interface. Added color conversion from any - greyscale type to 8-bit greyscale with or without alpha. -*) 21 jan 2007: (!) Totally changed the interface. It allows more color types - to convert to and is more uniform. See the manual for how it works now. -*) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days: - encode/decode custom tEXt chunks, separate classes for zlib & deflate, and - at last made the decoder give errors for incorrect Adler32 or Crc. -*) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel. -*) 29 dec 2006: Added support for encoding images without alpha channel, and - cleaned out code as well as making certain parts faster. -*) 28 dec 2006: Added "Settings" to the encoder. -*) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now. - Removed some code duplication in the decoder. Fixed little bug in an example. -*) 09 dec 2006: (!) Placed output parameters of public functions as first parameter. - Fixed a bug of the decoder with 16-bit per color. -*) 15 okt 2006: Changed documentation structure -*) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the - given image buffer, however for now it's not compressed. -*) 08 sep 2006: (!) Changed to interface with a Decoder class -*) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different - way. Renamed decodePNG to decodePNGGeneric. -*) 29 jul 2006: (!) Changed the interface: image info is now returned as a - struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy. -*) 28 jul 2006: Cleaned the code and added new error checks. - Corrected terminology "deflate" into "inflate". -*) 23 jun 2006: Added SDL example in the documentation in the header, this - example allows easy debugging by displaying the PNG and its transparency. -*) 22 jun 2006: (!) Changed way to obtain error value. Added - loadFile function for convenience. Made decodePNG32 faster. -*) 21 jun 2006: (!) Changed type of info vector to unsigned. - Changed position of palette in info vector. Fixed an important bug that - happened on PNGs with an uncompressed block. -*) 16 jun 2006: Internally changed unsigned into unsigned where - needed, and performed some optimizations. -*) 07 jun 2006: (!) Renamed functions to decodePNG and placed them - in LodePNG namespace. Changed the order of the parameters. Rewrote the - documentation in the header. Renamed files to lodepng.cpp and lodepng.h -*) 22 apr 2006: Optimized and improved some code -*) 07 sep 2005: (!) Changed to std::vector interface -*) 12 aug 2005: Initial release (C++, decoder only) - - -13. contact information ------------------------ - -Feel free to contact me with suggestions, problems, comments, ... concerning -LodePNG. If you encounter a PNG image that doesn't work properly with this -decoder, feel free to send it and I'll use it to find and fix the problem. - -My email address is (puzzle the account and domain together with an @ symbol): -Domain: gmail dot com. -Account: lode dot vandevenne. - - -Copyright (c) 2005-2016 Lode Vandevenne -*/ diff --git a/external/bc7enc_rdo/miniz.h b/external/bc7enc_rdo/miniz.h deleted file mode 100644 index 9ea03b857d..0000000000 --- a/external/bc7enc_rdo/miniz.h +++ /dev/null @@ -1,2541 +0,0 @@ -/* miniz.c v1.15 - deflate/inflate, zlib-subset, ZIP reading/writing/appending, PNG writing - Implements RFC 1950: http://www.ietf.org/rfc/rfc1950.txt and RFC 1951: http://www.ietf.org/rfc/rfc1951.txt - - Forked from the public domain/unlicense version at: https://code.google.com/archive/p/miniz/ - - Copyright (C) 2019-2021 Binomial LLC. All Rights Reserved. - - 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. -*/ - -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4505) //warning C4505: 'def_realloc_func': unreferenced local function has been removed -#endif - -#ifndef MINIZ_HEADER_INCLUDED -#define MINIZ_HEADER_INCLUDED - -#include - -// Defines to completely disable specific portions of miniz.c: -// If all macros here are defined the only functionality remaining will be CRC-32, adler-32, tinfl, and tdefl. - -// Define MINIZ_NO_STDIO to disable all usage and any functions which rely on stdio for file I/O. -//#define MINIZ_NO_STDIO - -// If MINIZ_NO_TIME is specified then the ZIP archive functions will not be able to get the current time, or -// get/set file times, and the C run-time funcs that get/set times won't be called. -// The current downside is the times written to your archives will be from 1979. -//#define MINIZ_NO_TIME - -// Define MINIZ_NO_ARCHIVE_APIS to disable all ZIP archive API's. -//#define MINIZ_NO_ARCHIVE_APIS - -// Define MINIZ_NO_ARCHIVE_APIS to disable all writing related ZIP archive API's. -//#define MINIZ_NO_ARCHIVE_WRITING_APIS - -// Define MINIZ_NO_ZLIB_APIS to remove all ZLIB-style compression/decompression API's. -//#define MINIZ_NO_ZLIB_APIS - -// Define MINIZ_NO_ZLIB_COMPATIBLE_NAME to disable zlib names, to prevent conflicts against stock zlib. -//#define MINIZ_NO_ZLIB_COMPATIBLE_NAMES - -// Define MINIZ_NO_MALLOC to disable all calls to malloc, free, and realloc. -// Note if MINIZ_NO_MALLOC is defined then the user must always provide custom user alloc/free/realloc -// callbacks to the zlib and archive API's, and a few stand-alone helper API's which don't provide custom user -// functions (such as tdefl_compress_mem_to_heap() and tinfl_decompress_mem_to_heap()) won't work. -//#define MINIZ_NO_MALLOC - -#if defined(__TINYC__) && (defined(__linux) || defined(__linux__)) - // TODO: Work around "error: include file 'sys\utime.h' when compiling with tcc on Linux - #define MINIZ_NO_TIME -#endif - -#if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_ARCHIVE_APIS) - #include -#endif - -#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || defined(__i386) || defined(__i486__) || defined(__i486) || defined(i386) || defined(__ia64__) || defined(__x86_64__) -// MINIZ_X86_OR_X64_CPU is only used to help set the below macros. -#define MINIZ_X86_OR_X64_CPU 1 -#endif - -#if (__BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__) || MINIZ_X86_OR_X64_CPU -// Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian. -#define MINIZ_LITTLE_ENDIAN 1 -#endif - -#if MINIZ_X86_OR_X64_CPU -// Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient integer loads and stores from unaligned addresses. -#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 -#endif - -#if defined(_M_X64) || defined(_WIN64) || defined(__MINGW64__) || defined(_LP64) || defined(__LP64__) || defined(__ia64__) || defined(__x86_64__) -// Set MINIZ_HAS_64BIT_REGISTERS to 1 if operations on 64-bit integers are reasonably fast (and don't involve compiler generated calls to helper functions). -#define MINIZ_HAS_64BIT_REGISTERS 1 -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -// ------------------- zlib-style API Definitions. - -// For more compatibility with zlib, miniz.c uses unsigned long for some parameters/struct members. Beware: mz_ulong can be either 32 or 64-bits! -typedef unsigned long mz_ulong; - -// mz_free() internally uses the MZ_FREE() macro (which by default calls free() unless you've modified the MZ_MALLOC macro) to release a block allocated from the heap. -void mz_free(void *p); - -#define MZ_ADLER32_INIT (1) -// mz_adler32() returns the initial adler-32 value to use when called with ptr==NULL. -mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len); - -#define MZ_CRC32_INIT (0) -// mz_crc32() returns the initial CRC-32 value to use when called with ptr==NULL. -mz_ulong mz_crc32(mz_ulong crc, const unsigned char *ptr, size_t buf_len); - -// Compression strategies. -enum { MZ_DEFAULT_STRATEGY = 0, MZ_FILTERED = 1, MZ_HUFFMAN_ONLY = 2, MZ_RLE = 3, MZ_FIXED = 4 }; - -// Method -#define MZ_DEFLATED 8 - -#ifndef MINIZ_NO_ZLIB_APIS - -// Heap allocation callbacks. -// Note that mz_alloc_func parameter types purpsosely differ from zlib's: items/size is size_t, not unsigned long. -typedef void *(*mz_alloc_func)(void *opaque, size_t items, size_t size); -typedef void (*mz_free_func)(void *opaque, void *address); -typedef void *(*mz_realloc_func)(void *opaque, void *address, size_t items, size_t size); - -#define MZ_VERSION "9.1.15" -#define MZ_VERNUM 0x91F0 -#define MZ_VER_MAJOR 9 -#define MZ_VER_MINOR 1 -#define MZ_VER_REVISION 15 -#define MZ_VER_SUBREVISION 0 - -// Flush values. For typical usage you only need MZ_NO_FLUSH and MZ_FINISH. The other values are for advanced use (refer to the zlib docs). -enum { MZ_NO_FLUSH = 0, MZ_PARTIAL_FLUSH = 1, MZ_SYNC_FLUSH = 2, MZ_FULL_FLUSH = 3, MZ_FINISH = 4, MZ_BLOCK = 5 }; - -// Return status codes. MZ_PARAM_ERROR is non-standard. -enum { MZ_OK = 0, MZ_STREAM_END = 1, MZ_NEED_DICT = 2, MZ_ERRNO = -1, MZ_STREAM_ERROR = -2, MZ_DATA_ERROR = -3, MZ_MEM_ERROR = -4, MZ_BUF_ERROR = -5, MZ_VERSION_ERROR = -6, MZ_PARAM_ERROR = -10000 }; - -// Compression levels: 0-9 are the standard zlib-style levels, 10 is best possible compression (not zlib compatible, and may be very slow), MZ_DEFAULT_COMPRESSION=MZ_DEFAULT_LEVEL. -enum { MZ_NO_COMPRESSION = 0, MZ_BEST_SPEED = 1, MZ_BEST_COMPRESSION = 9, MZ_UBER_COMPRESSION = 10, MZ_DEFAULT_LEVEL = 6, MZ_DEFAULT_COMPRESSION = -1 }; - -// Window bits -#define MZ_DEFAULT_WINDOW_BITS 15 - -struct mz_internal_state; - -// Compression/decompression stream struct. -typedef struct mz_stream_s -{ - const unsigned char *next_in; // pointer to next byte to read - unsigned int avail_in; // number of bytes available at next_in - mz_ulong total_in; // total number of bytes consumed so far - - unsigned char *next_out; // pointer to next byte to write - unsigned int avail_out; // number of bytes that can be written to next_out - mz_ulong total_out; // total number of bytes produced so far - - char *msg; // error msg (unused) - struct mz_internal_state *state; // internal state, allocated by zalloc/zfree - - mz_alloc_func zalloc; // optional heap allocation function (defaults to malloc) - mz_free_func zfree; // optional heap free function (defaults to free) - void *opaque; // heap alloc function user pointer - - int data_type; // data_type (unused) - mz_ulong adler; // adler32 of the source or uncompressed data - mz_ulong reserved; // not used -} mz_stream; - -typedef mz_stream *mz_streamp; - -// Returns the version string of miniz.c. -const char *mz_version(void); - -// mz_deflateInit() initializes a compressor with default options: -// Parameters: -// pStream must point to an initialized mz_stream struct. -// level must be between [MZ_NO_COMPRESSION, MZ_BEST_COMPRESSION]. -// level 1 enables a specially optimized compression function that's been optimized purely for performance, not ratio. -// (This special func. is currently only enabled when MINIZ_USE_UNALIGNED_LOADS_AND_STORES and MINIZ_LITTLE_ENDIAN are defined.) -// Return values: -// MZ_OK on success. -// MZ_STREAM_ERROR if the stream is bogus. -// MZ_PARAM_ERROR if the input parameters are bogus. -// MZ_MEM_ERROR on out of memory. -int mz_deflateInit(mz_streamp pStream, int level); - -// mz_deflateInit2() is like mz_deflate(), except with more control: -// Additional parameters: -// method must be MZ_DEFLATED -// window_bits must be MZ_DEFAULT_WINDOW_BITS (to wrap the deflate stream with zlib header/adler-32 footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate/no header or footer) -// mem_level must be between [1, 9] (it's checked but ignored by miniz.c) -int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy); - -// Quickly resets a compressor without having to reallocate anything. Same as calling mz_deflateEnd() followed by mz_deflateInit()/mz_deflateInit2(). -int mz_deflateReset(mz_streamp pStream); - -// mz_deflate() compresses the input to output, consuming as much of the input and producing as much output as possible. -// Parameters: -// pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. -// flush may be MZ_NO_FLUSH, MZ_PARTIAL_FLUSH/MZ_SYNC_FLUSH, MZ_FULL_FLUSH, or MZ_FINISH. -// Return values: -// MZ_OK on success (when flushing, or if more input is needed but not available, and/or there's more output to be written but the output buffer is full). -// MZ_STREAM_END if all input has been consumed and all output bytes have been written. Don't call mz_deflate() on the stream anymore. -// MZ_STREAM_ERROR if the stream is bogus. -// MZ_PARAM_ERROR if one of the parameters is invalid. -// MZ_BUF_ERROR if no forward progress is possible because the input and/or output buffers are empty. (Fill up the input buffer or free up some output space and try again.) -int mz_deflate(mz_streamp pStream, int flush); - -// mz_deflateEnd() deinitializes a compressor: -// Return values: -// MZ_OK on success. -// MZ_STREAM_ERROR if the stream is bogus. -int mz_deflateEnd(mz_streamp pStream); - -// mz_deflateBound() returns a (very) conservative upper bound on the amount of data that could be generated by deflate(), assuming flush is set to only MZ_NO_FLUSH or MZ_FINISH. -mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len); - -// Single-call compression functions mz_compress() and mz_compress2(): -// Returns MZ_OK on success, or one of the error codes from mz_deflate() on failure. -int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); -int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level); - -// mz_compressBound() returns a (very) conservative upper bound on the amount of data that could be generated by calling mz_compress(). -mz_ulong mz_compressBound(mz_ulong source_len); - -// Initializes a decompressor. -int mz_inflateInit(mz_streamp pStream); - -// mz_inflateInit2() is like mz_inflateInit() with an additional option that controls the window size and whether or not the stream has been wrapped with a zlib header/footer: -// window_bits must be MZ_DEFAULT_WINDOW_BITS (to parse zlib header/footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate). -int mz_inflateInit2(mz_streamp pStream, int window_bits); - -// Decompresses the input stream to the output, consuming only as much of the input as needed, and writing as much to the output as possible. -// Parameters: -// pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. -// flush may be MZ_NO_FLUSH, MZ_SYNC_FLUSH, or MZ_FINISH. -// On the first call, if flush is MZ_FINISH it's assumed the input and output buffers are both sized large enough to decompress the entire stream in a single call (this is slightly faster). -// MZ_FINISH implies that there are no more source bytes available beside what's already in the input buffer, and that the output buffer is large enough to hold the rest of the decompressed data. -// Return values: -// MZ_OK on success. Either more input is needed but not available, and/or there's more output to be written but the output buffer is full. -// MZ_STREAM_END if all needed input has been consumed and all output bytes have been written. For zlib streams, the adler-32 of the decompressed data has also been verified. -// MZ_STREAM_ERROR if the stream is bogus. -// MZ_DATA_ERROR if the deflate stream is invalid. -// MZ_PARAM_ERROR if one of the parameters is invalid. -// MZ_BUF_ERROR if no forward progress is possible because the input buffer is empty but the inflater needs more input to continue, or if the output buffer is not large enough. Call mz_inflate() again -// with more input data, or with more room in the output buffer (except when using single call decompression, described above). -int mz_inflate(mz_streamp pStream, int flush); - -// Deinitializes a decompressor. -int mz_inflateEnd(mz_streamp pStream); - -// Single-call decompression. -// Returns MZ_OK on success, or one of the error codes from mz_inflate() on failure. -int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); - -// Returns a string description of the specified error code, or NULL if the error code is invalid. -const char *mz_error(int err); - -// Redefine zlib-compatible names to miniz equivalents, so miniz.c can be used as a drop-in replacement for the subset of zlib that miniz.c supports. -// Define MINIZ_NO_ZLIB_COMPATIBLE_NAMES to disable zlib-compatibility if you use zlib in the same project. -#ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES - typedef unsigned char Byte; - typedef unsigned int uInt; - typedef mz_ulong uLong; - typedef Byte Bytef; - typedef uInt uIntf; - typedef char charf; - typedef int intf; - typedef void *voidpf; - typedef uLong uLongf; - typedef void *voidp; - typedef void *const voidpc; - #define Z_NULL 0 - #define Z_NO_FLUSH MZ_NO_FLUSH - #define Z_PARTIAL_FLUSH MZ_PARTIAL_FLUSH - #define Z_SYNC_FLUSH MZ_SYNC_FLUSH - #define Z_FULL_FLUSH MZ_FULL_FLUSH - #define Z_FINISH MZ_FINISH - #define Z_BLOCK MZ_BLOCK - #define Z_OK MZ_OK - #define Z_STREAM_END MZ_STREAM_END - #define Z_NEED_DICT MZ_NEED_DICT - #define Z_ERRNO MZ_ERRNO - #define Z_STREAM_ERROR MZ_STREAM_ERROR - #define Z_DATA_ERROR MZ_DATA_ERROR - #define Z_MEM_ERROR MZ_MEM_ERROR - #define Z_BUF_ERROR MZ_BUF_ERROR - #define Z_VERSION_ERROR MZ_VERSION_ERROR - #define Z_PARAM_ERROR MZ_PARAM_ERROR - #define Z_NO_COMPRESSION MZ_NO_COMPRESSION - #define Z_BEST_SPEED MZ_BEST_SPEED - #define Z_BEST_COMPRESSION MZ_BEST_COMPRESSION - #define Z_DEFAULT_COMPRESSION MZ_DEFAULT_COMPRESSION - #define Z_DEFAULT_STRATEGY MZ_DEFAULT_STRATEGY - #define Z_FILTERED MZ_FILTERED - #define Z_HUFFMAN_ONLY MZ_HUFFMAN_ONLY - #define Z_RLE MZ_RLE - #define Z_FIXED MZ_FIXED - #define Z_DEFLATED MZ_DEFLATED - #define Z_DEFAULT_WINDOW_BITS MZ_DEFAULT_WINDOW_BITS - #define alloc_func mz_alloc_func - #define free_func mz_free_func - #define internal_state mz_internal_state - #define z_stream mz_stream - #define deflateInit mz_deflateInit - #define deflateInit2 mz_deflateInit2 - #define deflateReset mz_deflateReset - #define deflate mz_deflate - #define deflateEnd mz_deflateEnd - #define deflateBound mz_deflateBound - #define compress mz_compress - #define compress2 mz_compress2 - #define compressBound mz_compressBound - #define inflateInit mz_inflateInit - #define inflateInit2 mz_inflateInit2 - #define inflate mz_inflate - #define inflateEnd mz_inflateEnd - #define uncompress mz_uncompress - #define crc32 mz_crc32 - #define adler32 mz_adler32 - #define MAX_WBITS 15 - #define MAX_MEM_LEVEL 9 - #define zError mz_error - #define ZLIB_VERSION MZ_VERSION - #define ZLIB_VERNUM MZ_VERNUM - #define ZLIB_VER_MAJOR MZ_VER_MAJOR - #define ZLIB_VER_MINOR MZ_VER_MINOR - #define ZLIB_VER_REVISION MZ_VER_REVISION - #define ZLIB_VER_SUBREVISION MZ_VER_SUBREVISION - #define zlibVersion mz_version - #define zlib_version mz_version() -#endif // #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES - -#endif // MINIZ_NO_ZLIB_APIS - -// ------------------- Types and macros - -typedef unsigned char mz_uint8; -typedef signed short mz_int16; -typedef unsigned short mz_uint16; -typedef unsigned int mz_uint32; -typedef unsigned int mz_uint; -typedef long long mz_int64; -typedef unsigned long long mz_uint64; -typedef int mz_bool; - -#define MZ_FALSE (0) -#define MZ_TRUE (1) - -// An attempt to work around MSVC's spammy "warning C4127: conditional expression is constant" message. -#ifdef _MSC_VER - #define MZ_MACRO_END while (0, 0) -#else - #define MZ_MACRO_END while (0) -#endif - -// ------------------- Low-level Decompression API Definitions - -// Decompression flags used by tinfl_decompress(). -// TINFL_FLAG_PARSE_ZLIB_HEADER: If set, the input has a valid zlib header and ends with an adler32 checksum (it's a valid zlib stream). Otherwise, the input is a raw deflate stream. -// TINFL_FLAG_HAS_MORE_INPUT: If set, there are more input bytes available beyond the end of the supplied input buffer. If clear, the input buffer contains all remaining input. -// TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF: If set, the output buffer is large enough to hold the entire decompressed stream. If clear, the output buffer is at least the size of the dictionary (typically 32KB). -// TINFL_FLAG_COMPUTE_ADLER32: Force adler-32 checksum computation of the decompressed bytes. -enum -{ - TINFL_FLAG_PARSE_ZLIB_HEADER = 1, - TINFL_FLAG_HAS_MORE_INPUT = 2, - TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF = 4, - TINFL_FLAG_COMPUTE_ADLER32 = 8 -}; - -// High level decompression functions: -// tinfl_decompress_mem_to_heap() decompresses a block in memory to a heap block allocated via malloc(). -// On entry: -// pSrc_buf, src_buf_len: Pointer and size of the Deflate or zlib source data to decompress. -// On return: -// Function returns a pointer to the decompressed data, or NULL on failure. -// *pOut_len will be set to the decompressed data's size, which could be larger than src_buf_len on uncompressible data. -// The caller must call mz_free() on the returned block when it's no longer needed. -void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); - -// tinfl_decompress_mem_to_mem() decompresses a block in memory to another block in memory. -// Returns TINFL_DECOMPRESS_MEM_TO_MEM_FAILED on failure, or the number of bytes written on success. -#define TINFL_DECOMPRESS_MEM_TO_MEM_FAILED ((size_t)(-1)) -size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); - -// tinfl_decompress_mem_to_callback() decompresses a block in memory to an internal 32KB buffer, and a user provided callback function will be called to flush the buffer. -// Returns 1 on success or 0 on failure. -typedef int (*tinfl_put_buf_func_ptr)(const void* pBuf, int len, void *pUser); -int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); - -struct tinfl_decompressor_tag; typedef struct tinfl_decompressor_tag tinfl_decompressor; - -// Max size of LZ dictionary. -#define TINFL_LZ_DICT_SIZE 32768 - -// Return status. -typedef enum -{ - TINFL_STATUS_BAD_PARAM = -3, - TINFL_STATUS_ADLER32_MISMATCH = -2, - TINFL_STATUS_FAILED = -1, - TINFL_STATUS_DONE = 0, - TINFL_STATUS_NEEDS_MORE_INPUT = 1, - TINFL_STATUS_HAS_MORE_OUTPUT = 2 -} tinfl_status; - -// Initializes the decompressor to its initial state. -#define tinfl_init(r) do { (r)->m_state = 0; } MZ_MACRO_END -#define tinfl_get_adler32(r) (r)->m_check_adler32 - -// Main low-level decompressor coroutine function. This is the only function actually needed for decompression. All the other functions are just high-level helpers for improved usability. -// This is a universal API, i.e. it can be used as a building block to build any desired higher level decompression API. In the limit case, it can be called once per every byte input or output. -tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags); - -// Internal/private bits follow. -enum -{ - TINFL_MAX_HUFF_TABLES = 3, TINFL_MAX_HUFF_SYMBOLS_0 = 288, TINFL_MAX_HUFF_SYMBOLS_1 = 32, TINFL_MAX_HUFF_SYMBOLS_2 = 19, - TINFL_FAST_LOOKUP_BITS = 10, TINFL_FAST_LOOKUP_SIZE = 1 << TINFL_FAST_LOOKUP_BITS -}; - -typedef struct -{ - mz_uint8 m_code_size[TINFL_MAX_HUFF_SYMBOLS_0]; - mz_int16 m_look_up[TINFL_FAST_LOOKUP_SIZE], m_tree[TINFL_MAX_HUFF_SYMBOLS_0 * 2]; -} tinfl_huff_table; - -#if MINIZ_HAS_64BIT_REGISTERS - #define TINFL_USE_64BIT_BITBUF 1 -#endif - -#if TINFL_USE_64BIT_BITBUF - typedef mz_uint64 tinfl_bit_buf_t; - #define TINFL_BITBUF_SIZE (64) -#else - typedef mz_uint32 tinfl_bit_buf_t; - #define TINFL_BITBUF_SIZE (32) -#endif - -struct tinfl_decompressor_tag -{ - mz_uint32 m_state, m_num_bits, m_zhdr0, m_zhdr1, m_z_adler32, m_final, m_type, m_check_adler32, m_dist, m_counter, m_num_extra, m_table_sizes[TINFL_MAX_HUFF_TABLES]; - tinfl_bit_buf_t m_bit_buf; - size_t m_dist_from_out_buf_start; - tinfl_huff_table m_tables[TINFL_MAX_HUFF_TABLES]; - mz_uint8 m_raw_header[4], m_len_codes[TINFL_MAX_HUFF_SYMBOLS_0 + TINFL_MAX_HUFF_SYMBOLS_1 + 137]; -}; - -// ------------------- Low-level Compression API Definitions - -// Set TDEFL_LESS_MEMORY to 1 to use less memory (compression will be slightly slower, and raw/dynamic blocks will be output more frequently). -#define TDEFL_LESS_MEMORY 0 - -// tdefl_init() compression flags logically OR'd together (low 12 bits contain the max. number of probes per dictionary search): -// TDEFL_DEFAULT_MAX_PROBES: The compressor defaults to 128 dictionary probes per dictionary search. 0=Huffman only, 1=Huffman+LZ (fastest/crap compression), 4095=Huffman+LZ (slowest/best compression). -enum -{ - TDEFL_HUFFMAN_ONLY = 0, TDEFL_DEFAULT_MAX_PROBES = 128, TDEFL_MAX_PROBES_MASK = 0xFFF -}; - -// TDEFL_WRITE_ZLIB_HEADER: If set, the compressor outputs a zlib header before the deflate data, and the Adler-32 of the source data at the end. Otherwise, you'll get raw deflate data. -// TDEFL_COMPUTE_ADLER32: Always compute the adler-32 of the input data (even when not writing zlib headers). -// TDEFL_GREEDY_PARSING_FLAG: Set to use faster greedy parsing, instead of more efficient lazy parsing. -// TDEFL_NONDETERMINISTIC_PARSING_FLAG: Enable to decrease the compressor's initialization time to the minimum, but the output may vary from run to run given the same input (depending on the contents of memory). -// TDEFL_RLE_MATCHES: Only look for RLE matches (matches with a distance of 1) -// TDEFL_FILTER_MATCHES: Discards matches <= 5 chars if enabled. -// TDEFL_FORCE_ALL_STATIC_BLOCKS: Disable usage of optimized Huffman tables. -// TDEFL_FORCE_ALL_RAW_BLOCKS: Only use raw (uncompressed) deflate blocks. -// The low 12 bits are reserved to control the max # of hash probes per dictionary lookup (see TDEFL_MAX_PROBES_MASK). -enum -{ - TDEFL_WRITE_ZLIB_HEADER = 0x01000, - TDEFL_COMPUTE_ADLER32 = 0x02000, - TDEFL_GREEDY_PARSING_FLAG = 0x04000, - TDEFL_NONDETERMINISTIC_PARSING_FLAG = 0x08000, - TDEFL_RLE_MATCHES = 0x10000, - TDEFL_FILTER_MATCHES = 0x20000, - TDEFL_FORCE_ALL_STATIC_BLOCKS = 0x40000, - TDEFL_FORCE_ALL_RAW_BLOCKS = 0x80000, - TDEFL_TRACK_TOTAL_HUFF_COUNT = 0x100000 -}; - -// High level compression functions: -// tdefl_compress_mem_to_heap() compresses a block in memory to a heap block allocated via malloc(). -// On entry: -// pSrc_buf, src_buf_len: Pointer and size of source block to compress. -// flags: The max match finder probes (default is 128) logically OR'd against the above flags. Higher probes are slower but improve compression. -// On return: -// Function returns a pointer to the compressed data, or NULL on failure. -// *pOut_len will be set to the compressed data's size, which could be larger than src_buf_len on uncompressible data. -// The caller must free() the returned block when it's no longer needed. -void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); - -// tdefl_compress_mem_to_mem() compresses a block in memory to another block in memory. -// Returns 0 on failure. -size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); - -// Compresses an image to a compressed PNG file in memory. -// On entry: -// pImage, w, h, and num_chans describe the image to compress. num_chans may be 1, 2, 3, or 4. -// The image pitch in bytes per scanline will be w*num_chans. The leftmost pixel on the top scanline is stored first in memory. -// level may range from [0,10], use MZ_NO_COMPRESSION, MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc. or a decent default is MZ_DEFAULT_LEVEL -// If flip is true, the image will be flipped on the Y axis (useful for OpenGL apps). -// On return: -// Function returns a pointer to the compressed data, or NULL on failure. -// *pLen_out will be set to the size of the PNG image file. -// The caller must mz_free() the returned heap block (which will typically be larger than *pLen_out) when it's no longer needed. -void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int h, int num_chans, size_t *pLen_out, mz_uint level, mz_bool flip); -void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out); - -// Output stream interface. The compressor uses this interface to write compressed data. It'll typically be called TDEFL_OUT_BUF_SIZE at a time. -typedef mz_bool (*tdefl_put_buf_func_ptr)(const void* pBuf, int len, void *pUser); - -// tdefl_compress_mem_to_output() compresses a block to an output stream. The above helpers use this function internally. -mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); - -enum { TDEFL_MAX_HUFF_TABLES = 3, TDEFL_MAX_HUFF_SYMBOLS_0 = 288, TDEFL_MAX_HUFF_SYMBOLS_1 = 32, TDEFL_MAX_HUFF_SYMBOLS_2 = 19, TDEFL_LZ_DICT_SIZE = 32768, TDEFL_LZ_DICT_SIZE_MASK = TDEFL_LZ_DICT_SIZE - 1, TDEFL_MIN_MATCH_LEN = 3, TDEFL_MAX_MATCH_LEN = 258 }; - -// TDEFL_OUT_BUF_SIZE MUST be large enough to hold a single entire compressed output block (using static/fixed Huffman codes). -#if TDEFL_LESS_MEMORY -enum { TDEFL_LZ_CODE_BUF_SIZE = 24 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13 ) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 12, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS }; -#else -enum { TDEFL_LZ_CODE_BUF_SIZE = 64 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13 ) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 15, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS }; -#endif - -// The low-level tdefl functions below may be used directly if the above helper functions aren't flexible enough. The low-level functions don't make any heap allocations, unlike the above helper functions. -typedef enum -{ - TDEFL_STATUS_BAD_PARAM = -2, - TDEFL_STATUS_PUT_BUF_FAILED = -1, - TDEFL_STATUS_OKAY = 0, - TDEFL_STATUS_DONE = 1, -} tdefl_status; - -// Must map to MZ_NO_FLUSH, MZ_SYNC_FLUSH, etc. enums -typedef enum -{ - TDEFL_NO_FLUSH = 0, - TDEFL_SYNC_FLUSH = 2, - TDEFL_FULL_FLUSH = 3, - TDEFL_FINISH = 4 -} tdefl_flush; - -// tdefl's compression state structure. -typedef struct -{ - tdefl_put_buf_func_ptr m_pPut_buf_func; - void *m_pPut_buf_user; - mz_uint m_flags, m_max_probes[2]; - int m_greedy_parsing; - mz_uint m_adler32, m_lookahead_pos, m_lookahead_size, m_dict_size; - mz_uint8 *m_pLZ_code_buf, *m_pLZ_flags, *m_pOutput_buf, *m_pOutput_buf_end; - mz_uint m_num_flags_left, m_total_lz_bytes, m_lz_code_buf_dict_pos, m_bits_in, m_bit_buffer; - mz_uint m_saved_match_dist, m_saved_match_len, m_saved_lit, m_output_flush_ofs, m_output_flush_remaining, m_finished, m_block_index, m_wants_to_finish; - tdefl_status m_prev_return_status; - const void *m_pIn_buf; - void *m_pOut_buf; - size_t *m_pIn_buf_size, *m_pOut_buf_size; - tdefl_flush m_flush; - const mz_uint8 *m_pSrc; - size_t m_src_buf_left, m_out_buf_ofs; - mz_uint8 m_dict[TDEFL_LZ_DICT_SIZE + TDEFL_MAX_MATCH_LEN - 1]; - mz_uint16 m_huff_count[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; - mz_uint16 m_huff_codes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; - mz_uint8 m_huff_code_sizes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; - mz_uint8 m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE]; - mz_uint16 m_next[TDEFL_LZ_DICT_SIZE]; - mz_uint16 m_hash[TDEFL_LZ_HASH_SIZE]; - mz_uint8 m_output_buf[TDEFL_OUT_BUF_SIZE]; - mz_uint m_huff_total_count[2][TDEFL_MAX_HUFF_SYMBOLS]; -} tdefl_compressor; - -// Initializes the compressor. -// There is no corresponding deinit() function because the tdefl API's do not dynamically allocate memory. -// pBut_buf_func: If NULL, output data will be supplied to the specified callback. In this case, the user should call the tdefl_compress_buffer() API for compression. -// If pBut_buf_func is NULL the user should always call the tdefl_compress() API. -// flags: See the above enums (TDEFL_HUFFMAN_ONLY, TDEFL_WRITE_ZLIB_HEADER, etc.) -tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); - -// Compresses a block of data, consuming as much of the specified input buffer as possible, and writing as much compressed data to the specified output buffer as possible. -tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush); - -// tdefl_compress_buffer() is only usable when the tdefl_init() is called with a non-NULL tdefl_put_buf_func_ptr. -// tdefl_compress_buffer() always consumes the entire input buffer. -tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush); - -tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d); -mz_uint32 tdefl_get_adler32(tdefl_compressor *d); - -// Can't use tdefl_create_comp_flags_from_zip_params if MINIZ_NO_ZLIB_APIS isn't defined, because it uses some of its macros. -#ifndef MINIZ_NO_ZLIB_APIS -// Create tdefl_compress() flags given zlib-style compression parameters. -// level may range from [0,10] (where 10 is absolute max compression, but may be much slower on some files) -// window_bits may be -15 (raw deflate) or 15 (zlib) -// strategy may be either MZ_DEFAULT_STRATEGY, MZ_FILTERED, MZ_HUFFMAN_ONLY, MZ_RLE, or MZ_FIXED -mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy); -#endif // #ifndef MINIZ_NO_ZLIB_APIS - -#ifdef __cplusplus -} -#endif - -#endif // MINIZ_HEADER_INCLUDED - -// ------------------- End of Header: Implementation follows. (If you only want the header, define MINIZ_HEADER_FILE_ONLY.) - -#ifndef MINIZ_HEADER_FILE_ONLY - -typedef unsigned char mz_validate_uint16[sizeof(mz_uint16)==2 ? 1 : -1]; -typedef unsigned char mz_validate_uint32[sizeof(mz_uint32)==4 ? 1 : -1]; -typedef unsigned char mz_validate_uint64[sizeof(mz_uint64)==8 ? 1 : -1]; - -#include -#include - -#define MZ_ASSERT(x) assert(x) - -#ifdef MINIZ_NO_MALLOC - #define MZ_MALLOC(x) NULL - #define MZ_FREE(x) (void)x, ((void)0) - #define MZ_REALLOC(p, x) NULL -#else - #define MZ_MALLOC(x) malloc(x) - #define MZ_FREE(x) free(x) - #define MZ_REALLOC(p, x) realloc(p, x) -#endif - -#define MZ_MAX(a,b) (((a)>(b))?(a):(b)) -#define MZ_MIN(a,b) (((a)<(b))?(a):(b)) -#define MZ_CLEAR_OBJ(obj) memset(&(obj), 0, sizeof(obj)) - -#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN - #define MZ_READ_LE16(p) *((const mz_uint16 *)(p)) - #define MZ_READ_LE32(p) *((const mz_uint32 *)(p)) -#else - #define MZ_READ_LE16(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U)) - #define MZ_READ_LE32(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U) | ((mz_uint32)(((const mz_uint8 *)(p))[2]) << 16U) | ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U)) -#endif - -#ifdef _MSC_VER - #define MZ_FORCEINLINE __forceinline -#elif defined(__GNUC__) - #define MZ_FORCEINLINE inline __attribute__((__always_inline__)) -#else - #define MZ_FORCEINLINE inline -#endif - -#ifdef __cplusplus - extern "C" { -#endif - -// ------------------- zlib-style API's - -mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len) -{ - mz_uint32 i, s1 = (mz_uint32)(adler & 0xffff), s2 = (mz_uint32)(adler >> 16); size_t block_len = buf_len % 5552; - if (!ptr) return MZ_ADLER32_INIT; - while (buf_len) { - for (i = 0; i + 7 < block_len; i += 8, ptr += 8) { - s1 += ptr[0], s2 += s1; s1 += ptr[1], s2 += s1; s1 += ptr[2], s2 += s1; s1 += ptr[3], s2 += s1; - s1 += ptr[4], s2 += s1; s1 += ptr[5], s2 += s1; s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1; - } - for ( ; i < block_len; ++i) s1 += *ptr++, s2 += s1; - s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552; - } - return (s2 << 16) + s1; -} - -// Karl Malbrain's compact CRC-32. See "A compact CCITT crc16 and crc32 C implementation that balances processor cache usage against speed": http://www.geocities.com/malbrain/ -mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len) -{ - static const mz_uint32 s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, - 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; - mz_uint32 crcu32 = (mz_uint32)crc; - if (!ptr) return MZ_CRC32_INIT; - crcu32 = ~crcu32; while (buf_len--) { mz_uint8 b = *ptr++; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)]; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)]; } - return ~crcu32; -} - -void mz_free(void *p) -{ - MZ_FREE(p); -} - -#ifndef MINIZ_NO_ZLIB_APIS - -static void *def_alloc_func(void *opaque, size_t items, size_t size) { (void)opaque, (void)items, (void)size; return MZ_MALLOC(items * size); } -static void def_free_func(void *opaque, void *address) { (void)opaque, (void)address; MZ_FREE(address); } -static void *def_realloc_func(void *opaque, void *address, size_t items, size_t size) { (void)opaque, (void)address, (void)items, (void)size; return MZ_REALLOC(address, items * size); } - -const char *mz_version(void) -{ - return MZ_VERSION; -} - -int mz_deflateInit(mz_streamp pStream, int level) -{ - return mz_deflateInit2(pStream, level, MZ_DEFLATED, MZ_DEFAULT_WINDOW_BITS, 9, MZ_DEFAULT_STRATEGY); -} - -int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy) -{ - tdefl_compressor *pComp; - mz_uint comp_flags = TDEFL_COMPUTE_ADLER32 | tdefl_create_comp_flags_from_zip_params(level, window_bits, strategy); - - if (!pStream) return MZ_STREAM_ERROR; - if ((method != MZ_DEFLATED) || ((mem_level < 1) || (mem_level > 9)) || ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS))) return MZ_PARAM_ERROR; - - pStream->data_type = 0; - pStream->adler = MZ_ADLER32_INIT; - pStream->msg = NULL; - pStream->reserved = 0; - pStream->total_in = 0; - pStream->total_out = 0; - if (!pStream->zalloc) pStream->zalloc = def_alloc_func; - if (!pStream->zfree) pStream->zfree = def_free_func; - - pComp = (tdefl_compressor *)pStream->zalloc(pStream->opaque, 1, sizeof(tdefl_compressor)); - if (!pComp) - return MZ_MEM_ERROR; - - pStream->state = (struct mz_internal_state *)pComp; - - if (tdefl_init(pComp, NULL, NULL, comp_flags) != TDEFL_STATUS_OKAY) - { - mz_deflateEnd(pStream); - return MZ_PARAM_ERROR; - } - - return MZ_OK; -} - -int mz_deflateReset(mz_streamp pStream) -{ - if ((!pStream) || (!pStream->state) || (!pStream->zalloc) || (!pStream->zfree)) return MZ_STREAM_ERROR; - pStream->total_in = pStream->total_out = 0; - tdefl_init((tdefl_compressor*)pStream->state, NULL, NULL, ((tdefl_compressor*)pStream->state)->m_flags); - return MZ_OK; -} - -int mz_deflate(mz_streamp pStream, int flush) -{ - size_t in_bytes, out_bytes; - mz_ulong orig_total_in, orig_total_out; - int mz_status = MZ_OK; - - if ((!pStream) || (!pStream->state) || (flush < 0) || (flush > MZ_FINISH) || (!pStream->next_out)) return MZ_STREAM_ERROR; - if (!pStream->avail_out) return MZ_BUF_ERROR; - - if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; - - if (((tdefl_compressor*)pStream->state)->m_prev_return_status == TDEFL_STATUS_DONE) - return (flush == MZ_FINISH) ? MZ_STREAM_END : MZ_BUF_ERROR; - - orig_total_in = pStream->total_in; orig_total_out = pStream->total_out; - for ( ; ; ) - { - tdefl_status defl_status; - in_bytes = pStream->avail_in; out_bytes = pStream->avail_out; - - defl_status = tdefl_compress((tdefl_compressor*)pStream->state, pStream->next_in, &in_bytes, pStream->next_out, &out_bytes, (tdefl_flush)flush); - pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; - pStream->total_in += (mz_uint)in_bytes; pStream->adler = tdefl_get_adler32((tdefl_compressor*)pStream->state); - - pStream->next_out += (mz_uint)out_bytes; pStream->avail_out -= (mz_uint)out_bytes; - pStream->total_out += (mz_uint)out_bytes; - - if (defl_status < 0) - { - mz_status = MZ_STREAM_ERROR; - break; - } - else if (defl_status == TDEFL_STATUS_DONE) - { - mz_status = MZ_STREAM_END; - break; - } - else if (!pStream->avail_out) - break; - else if ((!pStream->avail_in) && (flush != MZ_FINISH)) - { - if ((flush) || (pStream->total_in != orig_total_in) || (pStream->total_out != orig_total_out)) - break; - return MZ_BUF_ERROR; // Can't make forward progress without some input. - } - } - return mz_status; -} - -int mz_deflateEnd(mz_streamp pStream) -{ - if (!pStream) return MZ_STREAM_ERROR; - if (pStream->state) - { - pStream->zfree(pStream->opaque, pStream->state); - pStream->state = NULL; - } - return MZ_OK; -} - -mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len) -{ - (void)pStream; - // This is really over conservative. (And lame, but it's actually pretty tricky to compute a true upper bound given the way tdefl's blocking works.) - return MZ_MAX(128 + (source_len * 110) / 100, 128 + source_len + ((source_len / (31 * 1024)) + 1) * 5); -} - -int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level) -{ - int status; - mz_stream stream; - memset(&stream, 0, sizeof(stream)); - - // In case mz_ulong is 64-bits (argh I hate longs). - if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; - - stream.next_in = pSource; - stream.avail_in = (mz_uint32)source_len; - stream.next_out = pDest; - stream.avail_out = (mz_uint32)*pDest_len; - - status = mz_deflateInit(&stream, level); - if (status != MZ_OK) return status; - - status = mz_deflate(&stream, MZ_FINISH); - if (status != MZ_STREAM_END) - { - mz_deflateEnd(&stream); - return (status == MZ_OK) ? MZ_BUF_ERROR : status; - } - - *pDest_len = stream.total_out; - return mz_deflateEnd(&stream); -} - -int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len) -{ - return mz_compress2(pDest, pDest_len, pSource, source_len, MZ_DEFAULT_COMPRESSION); -} - -mz_ulong mz_compressBound(mz_ulong source_len) -{ - return mz_deflateBound(NULL, source_len); -} - -typedef struct -{ - tinfl_decompressor m_decomp; - mz_uint m_dict_ofs, m_dict_avail, m_first_call, m_has_flushed; int m_window_bits; - mz_uint8 m_dict[TINFL_LZ_DICT_SIZE]; - tinfl_status m_last_status; -} inflate_state; - -int mz_inflateInit2(mz_streamp pStream, int window_bits) -{ - inflate_state *pDecomp; - if (!pStream) return MZ_STREAM_ERROR; - if ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS)) return MZ_PARAM_ERROR; - - pStream->data_type = 0; - pStream->adler = 0; - pStream->msg = NULL; - pStream->total_in = 0; - pStream->total_out = 0; - pStream->reserved = 0; - if (!pStream->zalloc) pStream->zalloc = def_alloc_func; - if (!pStream->zfree) pStream->zfree = def_free_func; - - pDecomp = (inflate_state*)pStream->zalloc(pStream->opaque, 1, sizeof(inflate_state)); - if (!pDecomp) return MZ_MEM_ERROR; - - pStream->state = (struct mz_internal_state *)pDecomp; - - tinfl_init(&pDecomp->m_decomp); - pDecomp->m_dict_ofs = 0; - pDecomp->m_dict_avail = 0; - pDecomp->m_last_status = TINFL_STATUS_NEEDS_MORE_INPUT; - pDecomp->m_first_call = 1; - pDecomp->m_has_flushed = 0; - pDecomp->m_window_bits = window_bits; - - return MZ_OK; -} - -int mz_inflateInit(mz_streamp pStream) -{ - return mz_inflateInit2(pStream, MZ_DEFAULT_WINDOW_BITS); -} - -int mz_inflate(mz_streamp pStream, int flush) -{ - inflate_state* pState; - mz_uint n, first_call, decomp_flags = TINFL_FLAG_COMPUTE_ADLER32; - size_t in_bytes, out_bytes, orig_avail_in; - tinfl_status status; - - if ((!pStream) || (!pStream->state)) return MZ_STREAM_ERROR; - if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; - if ((flush) && (flush != MZ_SYNC_FLUSH) && (flush != MZ_FINISH)) return MZ_STREAM_ERROR; - - pState = (inflate_state*)pStream->state; - if (pState->m_window_bits > 0) decomp_flags |= TINFL_FLAG_PARSE_ZLIB_HEADER; - orig_avail_in = pStream->avail_in; - - first_call = pState->m_first_call; pState->m_first_call = 0; - if (pState->m_last_status < 0) return MZ_DATA_ERROR; - - if (pState->m_has_flushed && (flush != MZ_FINISH)) return MZ_STREAM_ERROR; - pState->m_has_flushed |= (flush == MZ_FINISH); - - if ((flush == MZ_FINISH) && (first_call)) - { - // MZ_FINISH on the first call implies that the input and output buffers are large enough to hold the entire compressed/decompressed file. - decomp_flags |= TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF; - in_bytes = pStream->avail_in; out_bytes = pStream->avail_out; - status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pStream->next_out, pStream->next_out, &out_bytes, decomp_flags); - pState->m_last_status = status; - pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; pStream->total_in += (mz_uint)in_bytes; - pStream->adler = tinfl_get_adler32(&pState->m_decomp); - pStream->next_out += (mz_uint)out_bytes; pStream->avail_out -= (mz_uint)out_bytes; pStream->total_out += (mz_uint)out_bytes; - - if (status < 0) - return MZ_DATA_ERROR; - else if (status != TINFL_STATUS_DONE) - { - pState->m_last_status = TINFL_STATUS_FAILED; - return MZ_BUF_ERROR; - } - return MZ_STREAM_END; - } - // flush != MZ_FINISH then we must assume there's more input. - if (flush != MZ_FINISH) decomp_flags |= TINFL_FLAG_HAS_MORE_INPUT; - - if (pState->m_dict_avail) - { - n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); - memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); - pStream->next_out += n; pStream->avail_out -= n; pStream->total_out += n; - pState->m_dict_avail -= n; pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); - return ((pState->m_last_status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK; - } - - for ( ; ; ) - { - in_bytes = pStream->avail_in; - out_bytes = TINFL_LZ_DICT_SIZE - pState->m_dict_ofs; - - status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pState->m_dict, pState->m_dict + pState->m_dict_ofs, &out_bytes, decomp_flags); - pState->m_last_status = status; - - pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; - pStream->total_in += (mz_uint)in_bytes; pStream->adler = tinfl_get_adler32(&pState->m_decomp); - - pState->m_dict_avail = (mz_uint)out_bytes; - - n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); - memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); - pStream->next_out += n; pStream->avail_out -= n; pStream->total_out += n; - pState->m_dict_avail -= n; pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); - - if (status < 0) - return MZ_DATA_ERROR; // Stream is corrupted (there could be some uncompressed data left in the output dictionary - oh well). - else if ((status == TINFL_STATUS_NEEDS_MORE_INPUT) && (!orig_avail_in)) - return MZ_BUF_ERROR; // Signal caller that we can't make forward progress without supplying more input or by setting flush to MZ_FINISH. - else if (flush == MZ_FINISH) - { - // The output buffer MUST be large to hold the remaining uncompressed data when flush==MZ_FINISH. - if (status == TINFL_STATUS_DONE) - return pState->m_dict_avail ? MZ_BUF_ERROR : MZ_STREAM_END; - // status here must be TINFL_STATUS_HAS_MORE_OUTPUT, which means there's at least 1 more byte on the way. If there's no more room left in the output buffer then something is wrong. - else if (!pStream->avail_out) - return MZ_BUF_ERROR; - } - else if ((status == TINFL_STATUS_DONE) || (!pStream->avail_in) || (!pStream->avail_out) || (pState->m_dict_avail)) - break; - } - - return ((status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK; -} - -int mz_inflateEnd(mz_streamp pStream) -{ - if (!pStream) - return MZ_STREAM_ERROR; - if (pStream->state) - { - pStream->zfree(pStream->opaque, pStream->state); - pStream->state = NULL; - } - return MZ_OK; -} - -int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len) -{ - mz_stream stream; - int status; - memset(&stream, 0, sizeof(stream)); - - // In case mz_ulong is 64-bits (argh I hate longs). - if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; - - stream.next_in = pSource; - stream.avail_in = (mz_uint32)source_len; - stream.next_out = pDest; - stream.avail_out = (mz_uint32)*pDest_len; - - status = mz_inflateInit(&stream); - if (status != MZ_OK) - return status; - - status = mz_inflate(&stream, MZ_FINISH); - if (status != MZ_STREAM_END) - { - mz_inflateEnd(&stream); - return ((status == MZ_BUF_ERROR) && (!stream.avail_in)) ? MZ_DATA_ERROR : status; - } - *pDest_len = stream.total_out; - - return mz_inflateEnd(&stream); -} - -const char *mz_error(int err) -{ - static struct { int m_err; const char *m_pDesc; } s_error_descs[] = - { - { MZ_OK, "" }, { MZ_STREAM_END, "stream end" }, { MZ_NEED_DICT, "need dictionary" }, { MZ_ERRNO, "file error" }, { MZ_STREAM_ERROR, "stream error" }, - { MZ_DATA_ERROR, "data error" }, { MZ_MEM_ERROR, "out of memory" }, { MZ_BUF_ERROR, "buf error" }, { MZ_VERSION_ERROR, "version error" }, { MZ_PARAM_ERROR, "parameter error" } - }; - mz_uint i; for (i = 0; i < sizeof(s_error_descs) / sizeof(s_error_descs[0]); ++i) if (s_error_descs[i].m_err == err) return s_error_descs[i].m_pDesc; - return NULL; -} - -#endif //MINIZ_NO_ZLIB_APIS - -// ------------------- Low-level Decompression (completely independent from all compression API's) - -#define TINFL_MEMCPY(d, s, l) memcpy(d, s, l) -#define TINFL_MEMSET(p, c, l) memset(p, c, l) - -#define TINFL_CR_BEGIN switch(r->m_state) { case 0: -#define TINFL_CR_RETURN(state_index, result) do { status = result; r->m_state = state_index; goto common_exit; case state_index:; } MZ_MACRO_END -#define TINFL_CR_RETURN_FOREVER(state_index, result) do { for ( ; ; ) { TINFL_CR_RETURN(state_index, result); } } MZ_MACRO_END -#define TINFL_CR_FINISH } - -// TODO: If the caller has indicated that there's no more input, and we attempt to read beyond the input buf, then something is wrong with the input because the inflator never -// reads ahead more than it needs to. Currently TINFL_GET_BYTE() pads the end of the stream with 0's in this scenario. -#define TINFL_GET_BYTE(state_index, c) do { \ - if (pIn_buf_cur >= pIn_buf_end) { \ - for ( ; ; ) { \ - if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) { \ - TINFL_CR_RETURN(state_index, TINFL_STATUS_NEEDS_MORE_INPUT); \ - if (pIn_buf_cur < pIn_buf_end) { \ - c = *pIn_buf_cur++; \ - break; \ - } \ - } else { \ - c = 0; \ - break; \ - } \ - } \ - } else c = *pIn_buf_cur++; } MZ_MACRO_END - -#define TINFL_NEED_BITS(state_index, n) do { mz_uint c; TINFL_GET_BYTE(state_index, c); bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); num_bits += 8; } while (num_bits < (mz_uint)(n)) -#define TINFL_SKIP_BITS(state_index, n) do { if (num_bits < (mz_uint)(n)) { TINFL_NEED_BITS(state_index, n); } bit_buf >>= (n); num_bits -= (n); } MZ_MACRO_END -#define TINFL_GET_BITS(state_index, b, n) do { if (num_bits < (mz_uint)(n)) { TINFL_NEED_BITS(state_index, n); } b = bit_buf & ((1 << (n)) - 1); bit_buf >>= (n); num_bits -= (n); } MZ_MACRO_END - -// TINFL_HUFF_BITBUF_FILL() is only used rarely, when the number of bytes remaining in the input buffer falls below 2. -// It reads just enough bytes from the input stream that are needed to decode the next Huffman code (and absolutely no more). It works by trying to fully decode a -// Huffman code by using whatever bits are currently present in the bit buffer. If this fails, it reads another byte, and tries again until it succeeds or until the -// bit buffer contains >=15 bits (deflate's max. Huffman code size). -#define TINFL_HUFF_BITBUF_FILL(state_index, pHuff) \ - do { \ - temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]; \ - if (temp >= 0) { \ - code_len = temp >> 9; \ - if ((code_len) && (num_bits >= code_len)) \ - break; \ - } else if (num_bits > TINFL_FAST_LOOKUP_BITS) { \ - code_len = TINFL_FAST_LOOKUP_BITS; \ - do { \ - temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \ - } while ((temp < 0) && (num_bits >= (code_len + 1))); if (temp >= 0) break; \ - } TINFL_GET_BYTE(state_index, c); bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); num_bits += 8; \ - } while (num_bits < 15); - -// TINFL_HUFF_DECODE() decodes the next Huffman coded symbol. It's more complex than you would initially expect because the zlib API expects the decompressor to never read -// beyond the final byte of the deflate stream. (In other words, when this macro wants to read another byte from the input, it REALLY needs another byte in order to fully -// decode the next Huffman code.) Handling this properly is particularly important on raw deflate (non-zlib) streams, which aren't followed by a byte aligned adler-32. -// The slow path is only executed at the very end of the input buffer. -#define TINFL_HUFF_DECODE(state_index, sym, pHuff) do { \ - int temp; mz_uint code_len, c; \ - if (num_bits < 15) { \ - if ((pIn_buf_end - pIn_buf_cur) < 2) { \ - TINFL_HUFF_BITBUF_FILL(state_index, pHuff); \ - } else { \ - bit_buf |= (((tinfl_bit_buf_t)pIn_buf_cur[0]) << num_bits) | (((tinfl_bit_buf_t)pIn_buf_cur[1]) << (num_bits + 8)); pIn_buf_cur += 2; num_bits += 16; \ - } \ - } \ - if ((temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) \ - code_len = temp >> 9, temp &= 511; \ - else { \ - code_len = TINFL_FAST_LOOKUP_BITS; do { temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; } while (temp < 0); \ - } sym = temp; bit_buf >>= code_len; num_bits -= code_len; } MZ_MACRO_END - -tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags) -{ - static const int s_length_base[31] = { 3,4,5,6,7,8,9,10,11,13, 15,17,19,23,27,31,35,43,51,59, 67,83,99,115,131,163,195,227,258,0,0 }; - static const int s_length_extra[31]= { 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; - static const int s_dist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, 257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; - static const int s_dist_extra[32] = { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; - static const mz_uint8 s_length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; - static const int s_min_table_sizes[3] = { 257, 1, 4 }; - - tinfl_status status = TINFL_STATUS_FAILED; mz_uint32 num_bits, dist, counter, num_extra; tinfl_bit_buf_t bit_buf; - const mz_uint8 *pIn_buf_cur = pIn_buf_next, *const pIn_buf_end = pIn_buf_next + *pIn_buf_size; - mz_uint8 *pOut_buf_cur = pOut_buf_next, *const pOut_buf_end = pOut_buf_next + *pOut_buf_size; - size_t out_buf_size_mask = (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF) ? (size_t)-1 : ((pOut_buf_next - pOut_buf_start) + *pOut_buf_size) - 1, dist_from_out_buf_start; - - // Ensure the output buffer's size is a power of 2, unless the output buffer is large enough to hold the entire output file (in which case it doesn't matter). - if (((out_buf_size_mask + 1) & out_buf_size_mask) || (pOut_buf_next < pOut_buf_start)) { *pIn_buf_size = *pOut_buf_size = 0; return TINFL_STATUS_BAD_PARAM; } - - num_bits = r->m_num_bits; bit_buf = r->m_bit_buf; dist = r->m_dist; counter = r->m_counter; num_extra = r->m_num_extra; dist_from_out_buf_start = r->m_dist_from_out_buf_start; - TINFL_CR_BEGIN - - bit_buf = num_bits = dist = counter = num_extra = r->m_zhdr0 = r->m_zhdr1 = 0; r->m_z_adler32 = r->m_check_adler32 = 1; - if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) - { - TINFL_GET_BYTE(1, r->m_zhdr0); TINFL_GET_BYTE(2, r->m_zhdr1); - counter = (((r->m_zhdr0 * 256 + r->m_zhdr1) % 31 != 0) || (r->m_zhdr1 & 32) || ((r->m_zhdr0 & 15) != 8)); - if (!(decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) counter |= (((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) || ((out_buf_size_mask + 1) < (size_t)(1ULL << (8U + (r->m_zhdr0 >> 4))))); - if (counter) { TINFL_CR_RETURN_FOREVER(36, TINFL_STATUS_FAILED); } - } - - do - { - TINFL_GET_BITS(3, r->m_final, 3); r->m_type = r->m_final >> 1; - if (r->m_type == 0) - { - TINFL_SKIP_BITS(5, num_bits & 7); - for (counter = 0; counter < 4; ++counter) { if (num_bits) TINFL_GET_BITS(6, r->m_raw_header[counter], 8); else TINFL_GET_BYTE(7, r->m_raw_header[counter]); } - if ((counter = (r->m_raw_header[0] | (r->m_raw_header[1] << 8))) != (mz_uint)(0xFFFF ^ (r->m_raw_header[2] | (r->m_raw_header[3] << 8)))) { TINFL_CR_RETURN_FOREVER(39, TINFL_STATUS_FAILED); } - while ((counter) && (num_bits)) - { - TINFL_GET_BITS(51, dist, 8); - while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(52, TINFL_STATUS_HAS_MORE_OUTPUT); } - *pOut_buf_cur++ = (mz_uint8)dist; - counter--; - } - while (counter) - { - size_t n; while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(9, TINFL_STATUS_HAS_MORE_OUTPUT); } - while (pIn_buf_cur >= pIn_buf_end) - { - if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) - { - TINFL_CR_RETURN(38, TINFL_STATUS_NEEDS_MORE_INPUT); - } - else - { - TINFL_CR_RETURN_FOREVER(40, TINFL_STATUS_FAILED); - } - } - n = MZ_MIN(MZ_MIN((size_t)(pOut_buf_end - pOut_buf_cur), (size_t)(pIn_buf_end - pIn_buf_cur)), counter); - TINFL_MEMCPY(pOut_buf_cur, pIn_buf_cur, n); pIn_buf_cur += n; pOut_buf_cur += n; counter -= (mz_uint)n; - } - } - else if (r->m_type == 3) - { - TINFL_CR_RETURN_FOREVER(10, TINFL_STATUS_FAILED); - } - else - { - if (r->m_type == 1) - { - mz_uint8 *p = r->m_tables[0].m_code_size; mz_uint i; - r->m_table_sizes[0] = 288; r->m_table_sizes[1] = 32; TINFL_MEMSET(r->m_tables[1].m_code_size, 5, 32); - for ( i = 0; i <= 143; ++i) *p++ = 8; for ( ; i <= 255; ++i) *p++ = 9; for ( ; i <= 279; ++i) *p++ = 7; for ( ; i <= 287; ++i) *p++ = 8; - } - else - { - for (counter = 0; counter < 3; counter++) { TINFL_GET_BITS(11, r->m_table_sizes[counter], "\05\05\04"[counter]); r->m_table_sizes[counter] += s_min_table_sizes[counter]; } - MZ_CLEAR_OBJ(r->m_tables[2].m_code_size); for (counter = 0; counter < r->m_table_sizes[2]; counter++) { mz_uint s; TINFL_GET_BITS(14, s, 3); r->m_tables[2].m_code_size[s_length_dezigzag[counter]] = (mz_uint8)s; } - r->m_table_sizes[2] = 19; - } - for ( ; (int)r->m_type >= 0; r->m_type--) - { - int tree_next, tree_cur; tinfl_huff_table *pTable; - mz_uint i, j, used_syms, total, sym_index, next_code[17], total_syms[16]; pTable = &r->m_tables[r->m_type]; MZ_CLEAR_OBJ(total_syms); MZ_CLEAR_OBJ(pTable->m_look_up); MZ_CLEAR_OBJ(pTable->m_tree); - for (i = 0; i < r->m_table_sizes[r->m_type]; ++i) total_syms[pTable->m_code_size[i]]++; - used_syms = 0, total = 0; next_code[0] = next_code[1] = 0; - for (i = 1; i <= 15; ++i) { used_syms += total_syms[i]; next_code[i + 1] = (total = ((total + total_syms[i]) << 1)); } - if ((65536 != total) && (used_syms > 1)) - { - TINFL_CR_RETURN_FOREVER(35, TINFL_STATUS_FAILED); - } - for (tree_next = -1, sym_index = 0; sym_index < r->m_table_sizes[r->m_type]; ++sym_index) - { - mz_uint rev_code = 0, l, cur_code, code_size = pTable->m_code_size[sym_index]; if (!code_size) continue; - cur_code = next_code[code_size]++; for (l = code_size; l > 0; l--, cur_code >>= 1) rev_code = (rev_code << 1) | (cur_code & 1); - if (code_size <= TINFL_FAST_LOOKUP_BITS) { mz_int16 k = (mz_int16)((code_size << 9) | sym_index); while (rev_code < TINFL_FAST_LOOKUP_SIZE) { pTable->m_look_up[rev_code] = k; rev_code += (1 << code_size); } continue; } - if (0 == (tree_cur = pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)])) { pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)] = (mz_int16)tree_next; tree_cur = tree_next; tree_next -= 2; } - rev_code >>= (TINFL_FAST_LOOKUP_BITS - 1); - for (j = code_size; j > (TINFL_FAST_LOOKUP_BITS + 1); j--) - { - tree_cur -= ((rev_code >>= 1) & 1); - if (!pTable->m_tree[-tree_cur - 1]) { pTable->m_tree[-tree_cur - 1] = (mz_int16)tree_next; tree_cur = tree_next; tree_next -= 2; } else tree_cur = pTable->m_tree[-tree_cur - 1]; - } - tree_cur -= ((rev_code >>= 1) & 1); pTable->m_tree[-tree_cur - 1] = (mz_int16)sym_index; - } - if (r->m_type == 2) - { - for (counter = 0; counter < (r->m_table_sizes[0] + r->m_table_sizes[1]); ) - { - mz_uint s; TINFL_HUFF_DECODE(16, dist, &r->m_tables[2]); if (dist < 16) { r->m_len_codes[counter++] = (mz_uint8)dist; continue; } - if ((dist == 16) && (!counter)) - { - TINFL_CR_RETURN_FOREVER(17, TINFL_STATUS_FAILED); - } - num_extra = "\02\03\07"[dist - 16]; TINFL_GET_BITS(18, s, num_extra); s += "\03\03\013"[dist - 16]; - TINFL_MEMSET(r->m_len_codes + counter, (dist == 16) ? r->m_len_codes[counter - 1] : 0, s); counter += s; - } - if ((r->m_table_sizes[0] + r->m_table_sizes[1]) != counter) - { - TINFL_CR_RETURN_FOREVER(21, TINFL_STATUS_FAILED); - } - TINFL_MEMCPY(r->m_tables[0].m_code_size, r->m_len_codes, r->m_table_sizes[0]); TINFL_MEMCPY(r->m_tables[1].m_code_size, r->m_len_codes + r->m_table_sizes[0], r->m_table_sizes[1]); - } - } - for ( ; ; ) - { - mz_uint8 *pSrc; - for ( ; ; ) - { - if (((pIn_buf_end - pIn_buf_cur) < 4) || ((pOut_buf_end - pOut_buf_cur) < 2)) - { - TINFL_HUFF_DECODE(23, counter, &r->m_tables[0]); - if (counter >= 256) - break; - while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(24, TINFL_STATUS_HAS_MORE_OUTPUT); } - *pOut_buf_cur++ = (mz_uint8)counter; - } - else - { - int sym2; mz_uint code_len; -#if TINFL_USE_64BIT_BITBUF - if (num_bits < 30) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE32(pIn_buf_cur)) << num_bits); pIn_buf_cur += 4; num_bits += 32; } -#else - if (num_bits < 15) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); pIn_buf_cur += 2; num_bits += 16; } -#endif - if ((sym2 = r->m_tables[0].m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) - code_len = sym2 >> 9; - else - { - code_len = TINFL_FAST_LOOKUP_BITS; do { sym2 = r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; } while (sym2 < 0); - } - counter = sym2; bit_buf >>= code_len; num_bits -= code_len; - if (counter & 256) - break; - -#if !TINFL_USE_64BIT_BITBUF - if (num_bits < 15) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); pIn_buf_cur += 2; num_bits += 16; } -#endif - if ((sym2 = r->m_tables[0].m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) - code_len = sym2 >> 9; - else - { - code_len = TINFL_FAST_LOOKUP_BITS; do { sym2 = r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; } while (sym2 < 0); - } - bit_buf >>= code_len; num_bits -= code_len; - - pOut_buf_cur[0] = (mz_uint8)counter; - if (sym2 & 256) - { - pOut_buf_cur++; - counter = sym2; - break; - } - pOut_buf_cur[1] = (mz_uint8)sym2; - pOut_buf_cur += 2; - } - } - if ((counter &= 511) == 256) break; - - num_extra = s_length_extra[counter - 257]; counter = s_length_base[counter - 257]; - if (num_extra) { mz_uint extra_bits; TINFL_GET_BITS(25, extra_bits, num_extra); counter += extra_bits; } - - TINFL_HUFF_DECODE(26, dist, &r->m_tables[1]); - num_extra = s_dist_extra[dist]; dist = s_dist_base[dist]; - if (num_extra) { mz_uint extra_bits; TINFL_GET_BITS(27, extra_bits, num_extra); dist += extra_bits; } - - dist_from_out_buf_start = pOut_buf_cur - pOut_buf_start; - if ((dist > dist_from_out_buf_start) && (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) - { - TINFL_CR_RETURN_FOREVER(37, TINFL_STATUS_FAILED); - } - - pSrc = pOut_buf_start + ((dist_from_out_buf_start - dist) & out_buf_size_mask); - - if ((MZ_MAX(pOut_buf_cur, pSrc) + counter) > pOut_buf_end) - { - while (counter--) - { - while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(53, TINFL_STATUS_HAS_MORE_OUTPUT); } - *pOut_buf_cur++ = pOut_buf_start[(dist_from_out_buf_start++ - dist) & out_buf_size_mask]; - } - continue; - } -#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES - else if ((counter >= 9) && (counter <= dist)) - { - const mz_uint8 *pSrc_end = pSrc + (counter & ~7); - do - { - ((mz_uint32 *)pOut_buf_cur)[0] = ((const mz_uint32 *)pSrc)[0]; - ((mz_uint32 *)pOut_buf_cur)[1] = ((const mz_uint32 *)pSrc)[1]; - pOut_buf_cur += 8; - } while ((pSrc += 8) < pSrc_end); - if ((counter &= 7) < 3) - { - if (counter) - { - pOut_buf_cur[0] = pSrc[0]; - if (counter > 1) - pOut_buf_cur[1] = pSrc[1]; - pOut_buf_cur += counter; - } - continue; - } - } -#endif - do - { - pOut_buf_cur[0] = pSrc[0]; - pOut_buf_cur[1] = pSrc[1]; - pOut_buf_cur[2] = pSrc[2]; - pOut_buf_cur += 3; pSrc += 3; - } while ((int)(counter -= 3) > 2); - if ((int)counter > 0) - { - pOut_buf_cur[0] = pSrc[0]; - if ((int)counter > 1) - pOut_buf_cur[1] = pSrc[1]; - pOut_buf_cur += counter; - } - } - } - } while (!(r->m_final & 1)); - if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) - { - TINFL_SKIP_BITS(32, num_bits & 7); for (counter = 0; counter < 4; ++counter) { mz_uint s; if (num_bits) TINFL_GET_BITS(41, s, 8); else TINFL_GET_BYTE(42, s); r->m_z_adler32 = (r->m_z_adler32 << 8) | s; } - } - TINFL_CR_RETURN_FOREVER(34, TINFL_STATUS_DONE); - TINFL_CR_FINISH - -common_exit: - r->m_num_bits = num_bits; r->m_bit_buf = bit_buf; r->m_dist = dist; r->m_counter = counter; r->m_num_extra = num_extra; r->m_dist_from_out_buf_start = dist_from_out_buf_start; - *pIn_buf_size = pIn_buf_cur - pIn_buf_next; *pOut_buf_size = pOut_buf_cur - pOut_buf_next; - if ((decomp_flags & (TINFL_FLAG_PARSE_ZLIB_HEADER | TINFL_FLAG_COMPUTE_ADLER32)) && (status >= 0)) - { - const mz_uint8 *ptr = pOut_buf_next; size_t buf_len = *pOut_buf_size; - mz_uint32 i, s1 = r->m_check_adler32 & 0xffff, s2 = r->m_check_adler32 >> 16; size_t block_len = buf_len % 5552; - while (buf_len) - { - for (i = 0; i + 7 < block_len; i += 8, ptr += 8) - { - s1 += ptr[0], s2 += s1; s1 += ptr[1], s2 += s1; s1 += ptr[2], s2 += s1; s1 += ptr[3], s2 += s1; - s1 += ptr[4], s2 += s1; s1 += ptr[5], s2 += s1; s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1; - } - for ( ; i < block_len; ++i) s1 += *ptr++, s2 += s1; - s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552; - } - r->m_check_adler32 = (s2 << 16) + s1; if ((status == TINFL_STATUS_DONE) && (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) && (r->m_check_adler32 != r->m_z_adler32)) status = TINFL_STATUS_ADLER32_MISMATCH; - } - return status; -} - -// Higher level helper functions. -void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags) -{ - tinfl_decompressor decomp; void *pBuf = NULL, *pNew_buf; size_t src_buf_ofs = 0, out_buf_capacity = 0; - *pOut_len = 0; - tinfl_init(&decomp); - for ( ; ; ) - { - size_t src_buf_size = src_buf_len - src_buf_ofs, dst_buf_size = out_buf_capacity - *pOut_len, new_out_buf_capacity; - tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8*)pSrc_buf + src_buf_ofs, &src_buf_size, (mz_uint8*)pBuf, pBuf ? (mz_uint8*)pBuf + *pOut_len : NULL, &dst_buf_size, - (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); - if ((status < 0) || (status == TINFL_STATUS_NEEDS_MORE_INPUT)) - { - MZ_FREE(pBuf); *pOut_len = 0; return NULL; - } - src_buf_ofs += src_buf_size; - *pOut_len += dst_buf_size; - if (status == TINFL_STATUS_DONE) break; - new_out_buf_capacity = out_buf_capacity * 2; if (new_out_buf_capacity < 128) new_out_buf_capacity = 128; - pNew_buf = MZ_REALLOC(pBuf, new_out_buf_capacity); - if (!pNew_buf) - { - MZ_FREE(pBuf); *pOut_len = 0; return NULL; - } - pBuf = pNew_buf; out_buf_capacity = new_out_buf_capacity; - } - return pBuf; -} - -size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags) -{ - tinfl_decompressor decomp; tinfl_status status; tinfl_init(&decomp); - status = tinfl_decompress(&decomp, (const mz_uint8*)pSrc_buf, &src_buf_len, (mz_uint8*)pOut_buf, (mz_uint8*)pOut_buf, &out_buf_len, (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); - return (status != TINFL_STATUS_DONE) ? TINFL_DECOMPRESS_MEM_TO_MEM_FAILED : out_buf_len; -} - -int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) -{ - int result = 0; - tinfl_decompressor decomp; - mz_uint8 *pDict = (mz_uint8*)MZ_MALLOC(TINFL_LZ_DICT_SIZE); size_t in_buf_ofs = 0, dict_ofs = 0; - if (!pDict) - return TINFL_STATUS_FAILED; - tinfl_init(&decomp); - for ( ; ; ) - { - size_t in_buf_size = *pIn_buf_size - in_buf_ofs, dst_buf_size = TINFL_LZ_DICT_SIZE - dict_ofs; - tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8*)pIn_buf + in_buf_ofs, &in_buf_size, pDict, pDict + dict_ofs, &dst_buf_size, - (flags & ~(TINFL_FLAG_HAS_MORE_INPUT | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF))); - in_buf_ofs += in_buf_size; - if ((dst_buf_size) && (!(*pPut_buf_func)(pDict + dict_ofs, (int)dst_buf_size, pPut_buf_user))) - break; - if (status != TINFL_STATUS_HAS_MORE_OUTPUT) - { - result = (status == TINFL_STATUS_DONE); - break; - } - dict_ofs = (dict_ofs + dst_buf_size) & (TINFL_LZ_DICT_SIZE - 1); - } - MZ_FREE(pDict); - *pIn_buf_size = in_buf_ofs; - return result; -} - -// ------------------- Low-level Compression (independent from all decompression API's) - -// Purposely making these tables static for faster init and thread safety. -static const mz_uint16 s_tdefl_len_sym[256] = { - 257,258,259,260,261,262,263,264,265,265,266,266,267,267,268,268,269,269,269,269,270,270,270,270,271,271,271,271,272,272,272,272, - 273,273,273,273,273,273,273,273,274,274,274,274,274,274,274,274,275,275,275,275,275,275,275,275,276,276,276,276,276,276,276,276, - 277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278, - 279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280, - 281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281, - 282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282, - 283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283, - 284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,285 }; - -static const mz_uint8 s_tdefl_len_extra[256] = { - 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, - 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, - 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0 }; - -static const mz_uint8 s_tdefl_small_dist_sym[512] = { - 0,1,2,3,4,4,5,5,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14, - 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, - 14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, - 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,16, - 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, - 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, - 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,17,17,17,17,17,17, - 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, - 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, - 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 }; - -static const mz_uint8 s_tdefl_small_dist_extra[512] = { - 0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5, - 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, - 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, - 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 7,7,7,7,7,7,7,7 }; - -static const mz_uint8 s_tdefl_large_dist_sym[128] = { - 0,0,18,19,20,20,21,21,22,22,22,22,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26, - 26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, - 28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 }; - -static const mz_uint8 s_tdefl_large_dist_extra[128] = { - 0,0,8,8,9,9,9,9,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 }; - -// Radix sorts tdefl_sym_freq[] array by 16-bit key m_key. Returns ptr to sorted values. -typedef struct { mz_uint16 m_key, m_sym_index; } tdefl_sym_freq; -static tdefl_sym_freq* tdefl_radix_sort_syms(mz_uint num_syms, tdefl_sym_freq* pSyms0, tdefl_sym_freq* pSyms1) -{ - mz_uint32 total_passes = 2, pass_shift, pass, i, hist[256 * 2]; tdefl_sym_freq* pCur_syms = pSyms0, *pNew_syms = pSyms1; MZ_CLEAR_OBJ(hist); - for (i = 0; i < num_syms; i++) { mz_uint freq = pSyms0[i].m_key; hist[freq & 0xFF]++; hist[256 + ((freq >> 8) & 0xFF)]++; } - while ((total_passes > 1) && (num_syms == hist[(total_passes - 1) * 256])) total_passes--; - for (pass_shift = 0, pass = 0; pass < total_passes; pass++, pass_shift += 8) - { - const mz_uint32* pHist = &hist[pass << 8]; - mz_uint offsets[256], cur_ofs = 0; - for (i = 0; i < 256; i++) { offsets[i] = cur_ofs; cur_ofs += pHist[i]; } - for (i = 0; i < num_syms; i++) pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) & 0xFF]++] = pCur_syms[i]; - { tdefl_sym_freq* t = pCur_syms; pCur_syms = pNew_syms; pNew_syms = t; } - } - return pCur_syms; -} - -// tdefl_calculate_minimum_redundancy() originally written by: Alistair Moffat, alistair@cs.mu.oz.au, Jyrki Katajainen, jyrki@diku.dk, November 1996. -static void tdefl_calculate_minimum_redundancy(tdefl_sym_freq *A, int n) -{ - int root, leaf, next, avbl, used, dpth; - if (n==0) return; else if (n==1) { A[0].m_key = 1; return; } - A[0].m_key += A[1].m_key; root = 0; leaf = 2; - for (next=1; next < n-1; next++) - { - if (leaf>=n || A[root].m_key=n || (root=0; next--) A[next].m_key = A[A[next].m_key].m_key+1; - avbl = 1; used = dpth = 0; root = n-2; next = n-1; - while (avbl>0) - { - while (root>=0 && (int)A[root].m_key==dpth) { used++; root--; } - while (avbl>used) { A[next--].m_key = (mz_uint16)(dpth); avbl--; } - avbl = 2*used; dpth++; used = 0; - } -} - -// Limits canonical Huffman code table's max code size. -enum { TDEFL_MAX_SUPPORTED_HUFF_CODESIZE = 32 }; -static void tdefl_huffman_enforce_max_code_size(int *pNum_codes, int code_list_len, int max_code_size) -{ - int i; mz_uint32 total = 0; if (code_list_len <= 1) return; - for (i = max_code_size + 1; i <= TDEFL_MAX_SUPPORTED_HUFF_CODESIZE; i++) pNum_codes[max_code_size] += pNum_codes[i]; - for (i = max_code_size; i > 0; i--) total += (((mz_uint32)pNum_codes[i]) << (max_code_size - i)); - while (total != (1UL << max_code_size)) - { - pNum_codes[max_code_size]--; - for (i = max_code_size - 1; i > 0; i--) if (pNum_codes[i]) { pNum_codes[i]--; pNum_codes[i + 1] += 2; break; } - total--; - } -} - -static void tdefl_optimize_huffman_table(tdefl_compressor *d, int table_num, int table_len, int code_size_limit, int static_table) -{ - int i, j, l, num_codes[1 + TDEFL_MAX_SUPPORTED_HUFF_CODESIZE]; mz_uint next_code[TDEFL_MAX_SUPPORTED_HUFF_CODESIZE + 1]; MZ_CLEAR_OBJ(num_codes); - if (static_table) - { - for (i = 0; i < table_len; i++) num_codes[d->m_huff_code_sizes[table_num][i]]++; - } - else - { - tdefl_sym_freq syms0[TDEFL_MAX_HUFF_SYMBOLS], syms1[TDEFL_MAX_HUFF_SYMBOLS], *pSyms; - int num_used_syms = 0; - const mz_uint16 *pSym_count = &d->m_huff_count[table_num][0]; - for (i = 0; i < table_len; i++) if (pSym_count[i]) { syms0[num_used_syms].m_key = (mz_uint16)pSym_count[i]; syms0[num_used_syms++].m_sym_index = (mz_uint16)i; } - - pSyms = tdefl_radix_sort_syms(num_used_syms, syms0, syms1); tdefl_calculate_minimum_redundancy(pSyms, num_used_syms); - - for (i = 0; i < num_used_syms; i++) num_codes[pSyms[i].m_key]++; - - tdefl_huffman_enforce_max_code_size(num_codes, num_used_syms, code_size_limit); - - MZ_CLEAR_OBJ(d->m_huff_code_sizes[table_num]); MZ_CLEAR_OBJ(d->m_huff_codes[table_num]); - for (i = 1, j = num_used_syms; i <= code_size_limit; i++) - for (l = num_codes[i]; l > 0; l--) d->m_huff_code_sizes[table_num][pSyms[--j].m_sym_index] = (mz_uint8)(i); - } - - next_code[1] = 0; for (j = 0, i = 2; i <= code_size_limit; i++) next_code[i] = j = ((j + num_codes[i - 1]) << 1); - - for (i = 0; i < table_len; i++) - { - mz_uint rev_code = 0, code, code_size; if ((code_size = d->m_huff_code_sizes[table_num][i]) == 0) continue; - code = next_code[code_size]++; for (l = code_size; l > 0; l--, code >>= 1) rev_code = (rev_code << 1) | (code & 1); - d->m_huff_codes[table_num][i] = (mz_uint16)rev_code; - } -} - -#define TDEFL_PUT_BITS(b, l) do { \ - mz_uint bits = b; mz_uint len = l; MZ_ASSERT(bits <= ((1U << len) - 1U)); \ - d->m_bit_buffer |= (bits << d->m_bits_in); d->m_bits_in += len; \ - while (d->m_bits_in >= 8) { \ - if (d->m_pOutput_buf < d->m_pOutput_buf_end) \ - *d->m_pOutput_buf++ = (mz_uint8)(d->m_bit_buffer); \ - d->m_bit_buffer >>= 8; \ - d->m_bits_in -= 8; \ - } \ -} MZ_MACRO_END - -#define TDEFL_RLE_PREV_CODE_SIZE() { if (rle_repeat_count) { \ - if (rle_repeat_count < 3) { \ - d->m_huff_count[2][prev_code_size] = (mz_uint16)(d->m_huff_count[2][prev_code_size] + rle_repeat_count); \ - while (rle_repeat_count--) packed_code_sizes[num_packed_code_sizes++] = prev_code_size; \ - } else { \ - d->m_huff_count[2][16] = (mz_uint16)(d->m_huff_count[2][16] + 1); packed_code_sizes[num_packed_code_sizes++] = 16; packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_repeat_count - 3); \ -} rle_repeat_count = 0; } } - -#define TDEFL_RLE_ZERO_CODE_SIZE() { if (rle_z_count) { \ - if (rle_z_count < 3) { \ - d->m_huff_count[2][0] = (mz_uint16)(d->m_huff_count[2][0] + rle_z_count); while (rle_z_count--) packed_code_sizes[num_packed_code_sizes++] = 0; \ - } else if (rle_z_count <= 10) { \ - d->m_huff_count[2][17] = (mz_uint16)(d->m_huff_count[2][17] + 1); packed_code_sizes[num_packed_code_sizes++] = 17; packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 3); \ - } else { \ - d->m_huff_count[2][18] = (mz_uint16)(d->m_huff_count[2][18] + 1); packed_code_sizes[num_packed_code_sizes++] = 18; packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 11); \ -} rle_z_count = 0; } } - -static mz_uint8 s_tdefl_packed_code_size_syms_swizzle[] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; - -static void tdefl_start_dynamic_block(tdefl_compressor *d) -{ - int num_lit_codes, num_dist_codes, num_bit_lengths; mz_uint i, total_code_sizes_to_pack, num_packed_code_sizes, rle_z_count, rle_repeat_count, packed_code_sizes_index; - mz_uint8 code_sizes_to_pack[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], packed_code_sizes[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], prev_code_size = 0xFF; - - d->m_huff_count[0][256] = 1; - - if (d->m_flags & TDEFL_TRACK_TOTAL_HUFF_COUNT) - { - for (int j = 0; j < TDEFL_MAX_HUFF_SYMBOLS_0; j++) - d->m_huff_total_count[0][j] += d->m_huff_count[0][j]; - - for (int j = 0; j < TDEFL_MAX_HUFF_SYMBOLS_1; j++) - d->m_huff_total_count[1][j] += d->m_huff_count[1][j]; - } - - tdefl_optimize_huffman_table(d, 0, TDEFL_MAX_HUFF_SYMBOLS_0, 15, MZ_FALSE); - tdefl_optimize_huffman_table(d, 1, TDEFL_MAX_HUFF_SYMBOLS_1, 15, MZ_FALSE); - - for (num_lit_codes = 286; num_lit_codes > 257; num_lit_codes--) if (d->m_huff_code_sizes[0][num_lit_codes - 1]) break; - for (num_dist_codes = 30; num_dist_codes > 1; num_dist_codes--) if (d->m_huff_code_sizes[1][num_dist_codes - 1]) break; - - memcpy(code_sizes_to_pack, &d->m_huff_code_sizes[0][0], num_lit_codes); - memcpy(code_sizes_to_pack + num_lit_codes, &d->m_huff_code_sizes[1][0], num_dist_codes); - total_code_sizes_to_pack = num_lit_codes + num_dist_codes; num_packed_code_sizes = 0; rle_z_count = 0; rle_repeat_count = 0; - - memset(&d->m_huff_count[2][0], 0, sizeof(d->m_huff_count[2][0]) * TDEFL_MAX_HUFF_SYMBOLS_2); - for (i = 0; i < total_code_sizes_to_pack; i++) - { - mz_uint8 code_size = code_sizes_to_pack[i]; - if (!code_size) - { - TDEFL_RLE_PREV_CODE_SIZE(); - if (++rle_z_count == 138) { TDEFL_RLE_ZERO_CODE_SIZE(); } - } - else - { - TDEFL_RLE_ZERO_CODE_SIZE(); - if (code_size != prev_code_size) - { - TDEFL_RLE_PREV_CODE_SIZE(); - d->m_huff_count[2][code_size] = (mz_uint16)(d->m_huff_count[2][code_size] + 1); packed_code_sizes[num_packed_code_sizes++] = code_size; - } - else if (++rle_repeat_count == 6) - { - TDEFL_RLE_PREV_CODE_SIZE(); - } - } - prev_code_size = code_size; - } - if (rle_repeat_count) { TDEFL_RLE_PREV_CODE_SIZE(); } else { TDEFL_RLE_ZERO_CODE_SIZE(); } - - tdefl_optimize_huffman_table(d, 2, TDEFL_MAX_HUFF_SYMBOLS_2, 7, MZ_FALSE); - - TDEFL_PUT_BITS(2, 2); - - TDEFL_PUT_BITS(num_lit_codes - 257, 5); - TDEFL_PUT_BITS(num_dist_codes - 1, 5); - - for (num_bit_lengths = 18; num_bit_lengths >= 0; num_bit_lengths--) if (d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[num_bit_lengths]]) break; - num_bit_lengths = MZ_MAX(4, (num_bit_lengths + 1)); TDEFL_PUT_BITS(num_bit_lengths - 4, 4); - for (i = 0; (int)i < num_bit_lengths; i++) TDEFL_PUT_BITS(d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[i]], 3); - - for (packed_code_sizes_index = 0; packed_code_sizes_index < num_packed_code_sizes; ) - { - mz_uint code = packed_code_sizes[packed_code_sizes_index++]; MZ_ASSERT(code < TDEFL_MAX_HUFF_SYMBOLS_2); - TDEFL_PUT_BITS(d->m_huff_codes[2][code], d->m_huff_code_sizes[2][code]); - if (code >= 16) TDEFL_PUT_BITS(packed_code_sizes[packed_code_sizes_index++], "\02\03\07"[code - 16]); - } -} - -static void tdefl_start_static_block(tdefl_compressor *d) -{ - mz_uint i; - mz_uint8 *p = &d->m_huff_code_sizes[0][0]; - - for (i = 0; i <= 143; ++i) *p++ = 8; - for ( ; i <= 255; ++i) *p++ = 9; - for ( ; i <= 279; ++i) *p++ = 7; - for ( ; i <= 287; ++i) *p++ = 8; - - memset(d->m_huff_code_sizes[1], 5, 32); - - tdefl_optimize_huffman_table(d, 0, 288, 15, MZ_TRUE); - tdefl_optimize_huffman_table(d, 1, 32, 15, MZ_TRUE); - - TDEFL_PUT_BITS(1, 2); -} - -static const mz_uint mz_bitmasks[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF }; - -#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && MINIZ_HAS_64BIT_REGISTERS -static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) -{ - mz_uint flags; - mz_uint8 *pLZ_codes; - mz_uint8 *pOutput_buf = d->m_pOutput_buf; - mz_uint8 *pLZ_code_buf_end = d->m_pLZ_code_buf; - mz_uint64 bit_buffer = d->m_bit_buffer; - mz_uint bits_in = d->m_bits_in; - -#define TDEFL_PUT_BITS_FAST(b, l) { bit_buffer |= (((mz_uint64)(b)) << bits_in); bits_in += (l); } - - flags = 1; - for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < pLZ_code_buf_end; flags >>= 1) - { - if (flags == 1) - flags = *pLZ_codes++ | 0x100; - - if (flags & 1) - { - mz_uint s0, s1, n0, n1, sym, num_extra_bits; - mz_uint match_len = pLZ_codes[0], match_dist = *(const mz_uint16 *)(pLZ_codes + 1); pLZ_codes += 3; - - MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); - TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); - TDEFL_PUT_BITS_FAST(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], s_tdefl_len_extra[match_len]); - - // This sequence coaxes MSVC into using cmov's vs. jmp's. - s0 = s_tdefl_small_dist_sym[match_dist & 511]; - n0 = s_tdefl_small_dist_extra[match_dist & 511]; - s1 = s_tdefl_large_dist_sym[match_dist >> 8]; - n1 = s_tdefl_large_dist_extra[match_dist >> 8]; - sym = (match_dist < 512) ? s0 : s1; - num_extra_bits = (match_dist < 512) ? n0 : n1; - - MZ_ASSERT(d->m_huff_code_sizes[1][sym]); - TDEFL_PUT_BITS_FAST(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]); - TDEFL_PUT_BITS_FAST(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits); - } - else - { - mz_uint lit = *pLZ_codes++; - MZ_ASSERT(d->m_huff_code_sizes[0][lit]); - TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); - - if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) - { - flags >>= 1; - lit = *pLZ_codes++; - MZ_ASSERT(d->m_huff_code_sizes[0][lit]); - TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); - - if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) - { - flags >>= 1; - lit = *pLZ_codes++; - MZ_ASSERT(d->m_huff_code_sizes[0][lit]); - TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); - } - } - } - - if (pOutput_buf >= d->m_pOutput_buf_end) - return MZ_FALSE; - - *(mz_uint64*)pOutput_buf = bit_buffer; - pOutput_buf += (bits_in >> 3); - bit_buffer >>= (bits_in & ~7); - bits_in &= 7; - } - -#undef TDEFL_PUT_BITS_FAST - - d->m_pOutput_buf = pOutput_buf; - d->m_bits_in = 0; - d->m_bit_buffer = 0; - - while (bits_in) - { - mz_uint32 n = MZ_MIN(bits_in, 16); - TDEFL_PUT_BITS((mz_uint)bit_buffer & mz_bitmasks[n], n); - bit_buffer >>= n; - bits_in -= n; - } - - TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); - - return (d->m_pOutput_buf < d->m_pOutput_buf_end); -} -#else -static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) -{ - mz_uint flags; - mz_uint8 *pLZ_codes; - - flags = 1; - for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < d->m_pLZ_code_buf; flags >>= 1) - { - if (flags == 1) - flags = *pLZ_codes++ | 0x100; - if (flags & 1) - { - mz_uint sym, num_extra_bits; - mz_uint match_len = pLZ_codes[0], match_dist = (pLZ_codes[1] | (pLZ_codes[2] << 8)); pLZ_codes += 3; - - MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); - TDEFL_PUT_BITS(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); - TDEFL_PUT_BITS(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], s_tdefl_len_extra[match_len]); - - if (match_dist < 512) - { - sym = s_tdefl_small_dist_sym[match_dist]; num_extra_bits = s_tdefl_small_dist_extra[match_dist]; - } - else - { - sym = s_tdefl_large_dist_sym[match_dist >> 8]; num_extra_bits = s_tdefl_large_dist_extra[match_dist >> 8]; - } - MZ_ASSERT(d->m_huff_code_sizes[1][sym]); - TDEFL_PUT_BITS(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]); - TDEFL_PUT_BITS(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits); - } - else - { - mz_uint lit = *pLZ_codes++; - MZ_ASSERT(d->m_huff_code_sizes[0][lit]); - TDEFL_PUT_BITS(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); - } - } - - TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); - - return (d->m_pOutput_buf < d->m_pOutput_buf_end); -} -#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && MINIZ_HAS_64BIT_REGISTERS - -static mz_bool tdefl_compress_block(tdefl_compressor *d, mz_bool static_block) -{ - if (static_block) - tdefl_start_static_block(d); - else - tdefl_start_dynamic_block(d); - return tdefl_compress_lz_codes(d); -} - -static int tdefl_flush_block(tdefl_compressor *d, int flush) -{ - mz_uint saved_bit_buf, saved_bits_in; - mz_uint8 *pSaved_output_buf; - mz_bool comp_block_succeeded = MZ_FALSE; - int n, use_raw_block = ((d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS) != 0) && (d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size; - mz_uint8 *pOutput_buf_start = ((d->m_pPut_buf_func == NULL) && ((*d->m_pOut_buf_size - d->m_out_buf_ofs) >= TDEFL_OUT_BUF_SIZE)) ? ((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs) : d->m_output_buf; - - d->m_pOutput_buf = pOutput_buf_start; - d->m_pOutput_buf_end = d->m_pOutput_buf + TDEFL_OUT_BUF_SIZE - 16; - - MZ_ASSERT(!d->m_output_flush_remaining); - d->m_output_flush_ofs = 0; - d->m_output_flush_remaining = 0; - - *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> d->m_num_flags_left); - d->m_pLZ_code_buf -= (d->m_num_flags_left == 8); - - if ((d->m_flags & TDEFL_WRITE_ZLIB_HEADER) && (!d->m_block_index)) - { - TDEFL_PUT_BITS(0x78, 8); TDEFL_PUT_BITS(0x01, 8); - } - - TDEFL_PUT_BITS(flush == TDEFL_FINISH, 1); - - pSaved_output_buf = d->m_pOutput_buf; saved_bit_buf = d->m_bit_buffer; saved_bits_in = d->m_bits_in; - - if (!use_raw_block) - comp_block_succeeded = tdefl_compress_block(d, (d->m_flags & TDEFL_FORCE_ALL_STATIC_BLOCKS) || (d->m_total_lz_bytes < 48)); - - // If the block gets expanded, forget the current contents of the output buffer and send a raw block instead. - if ( ((use_raw_block) || ((d->m_total_lz_bytes) && ((d->m_pOutput_buf - pSaved_output_buf + 1U) >= d->m_total_lz_bytes))) && - ((d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size) ) - { - mz_uint i; d->m_pOutput_buf = pSaved_output_buf; d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; - TDEFL_PUT_BITS(0, 2); - if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } - for (i = 2; i; --i, d->m_total_lz_bytes ^= 0xFFFF) - { - TDEFL_PUT_BITS(d->m_total_lz_bytes & 0xFFFF, 16); - } - for (i = 0; i < d->m_total_lz_bytes; ++i) - { - TDEFL_PUT_BITS(d->m_dict[(d->m_lz_code_buf_dict_pos + i) & TDEFL_LZ_DICT_SIZE_MASK], 8); - } - } - // Check for the extremely unlikely (if not impossible) case of the compressed block not fitting into the output buffer when using dynamic codes. - else if (!comp_block_succeeded) - { - d->m_pOutput_buf = pSaved_output_buf; d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; - tdefl_compress_block(d, MZ_TRUE); - } - - if (flush) - { - if (flush == TDEFL_FINISH) - { - if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } - if (d->m_flags & TDEFL_WRITE_ZLIB_HEADER) { mz_uint i, a = d->m_adler32; for (i = 0; i < 4; i++) { TDEFL_PUT_BITS((a >> 24) & 0xFF, 8); a <<= 8; } } - } - else - { - mz_uint i, z = 0; TDEFL_PUT_BITS(0, 3); if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } for (i = 2; i; --i, z ^= 0xFFFF) { TDEFL_PUT_BITS(z & 0xFFFF, 16); } - } - } - - MZ_ASSERT(d->m_pOutput_buf < d->m_pOutput_buf_end); - - memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); - memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); - - d->m_pLZ_code_buf = d->m_lz_code_buf + 1; d->m_pLZ_flags = d->m_lz_code_buf; d->m_num_flags_left = 8; d->m_lz_code_buf_dict_pos += d->m_total_lz_bytes; d->m_total_lz_bytes = 0; d->m_block_index++; - - if ((n = (int)(d->m_pOutput_buf - pOutput_buf_start)) != 0) - { - if (d->m_pPut_buf_func) - { - *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; - if (!(*d->m_pPut_buf_func)(d->m_output_buf, n, d->m_pPut_buf_user)) - return (d->m_prev_return_status = TDEFL_STATUS_PUT_BUF_FAILED); - } - else if (pOutput_buf_start == d->m_output_buf) - { - int bytes_to_copy = (int)MZ_MIN((size_t)n, (size_t)(*d->m_pOut_buf_size - d->m_out_buf_ofs)); - memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf, bytes_to_copy); - d->m_out_buf_ofs += bytes_to_copy; - if ((n -= bytes_to_copy) != 0) - { - d->m_output_flush_ofs = bytes_to_copy; - d->m_output_flush_remaining = n; - } - } - else - { - d->m_out_buf_ofs += n; - } - } - - return d->m_output_flush_remaining; -} - -#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES -#define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16*)(p) -static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) -{ - mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; - mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; - const mz_uint16 *s = (const mz_uint16*)(d->m_dict + pos), *p, *q; - mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]), s01 = TDEFL_READ_UNALIGNED_WORD(s); - MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); if (max_match_len <= match_len) return; - for ( ; ; ) - { - for ( ; ; ) - { - if (--num_probes_left == 0) return; - #define TDEFL_PROBE \ - next_probe_pos = d->m_next[probe_pos]; \ - if ((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) return; \ - probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ - if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) break; - TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE; - } - if (!dist) break; q = (const mz_uint16*)(d->m_dict + probe_pos); if (TDEFL_READ_UNALIGNED_WORD(q) != s01) continue; p = s; probe_len = 32; - do { } while ( (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && - (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (--probe_len > 0) ); - if (!probe_len) - { - *pMatch_dist = dist; *pMatch_len = MZ_MIN(max_match_len, TDEFL_MAX_MATCH_LEN); break; - } - else if ((probe_len = ((mz_uint)(p - s) * 2) + (mz_uint)(*(const mz_uint8*)p == *(const mz_uint8*)q)) > match_len) - { - *pMatch_dist = dist; if ((*pMatch_len = match_len = MZ_MIN(max_match_len, probe_len)) == max_match_len) break; - c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]); - } - } -} -#else -static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) -{ - mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; - mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; - const mz_uint8 *s = d->m_dict + pos, *p, *q; - mz_uint8 c0 = d->m_dict[pos + match_len], c1 = d->m_dict[pos + match_len - 1]; - MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); if (max_match_len <= match_len) return; - for ( ; ; ) - { - for ( ; ; ) - { - if (--num_probes_left == 0) return; - #define TDEFL_PROBE \ - next_probe_pos = d->m_next[probe_pos]; \ - if ((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) return; \ - probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ - if ((d->m_dict[probe_pos + match_len] == c0) && (d->m_dict[probe_pos + match_len - 1] == c1)) break; - TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE; - } - if (!dist) break; p = s; q = d->m_dict + probe_pos; for (probe_len = 0; probe_len < max_match_len; probe_len++) if (*p++ != *q++) break; - if (probe_len > match_len) - { - *pMatch_dist = dist; if ((*pMatch_len = match_len = probe_len) == max_match_len) return; - c0 = d->m_dict[pos + match_len]; c1 = d->m_dict[pos + match_len - 1]; - } - } -} -#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES - -#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN -static mz_bool tdefl_compress_fast(tdefl_compressor *d) -{ - // Faster, minimally featured LZRW1-style match+parse loop with better register utilization. Intended for applications where raw throughput is valued more highly than ratio. - mz_uint lookahead_pos = d->m_lookahead_pos, lookahead_size = d->m_lookahead_size, dict_size = d->m_dict_size, total_lz_bytes = d->m_total_lz_bytes, num_flags_left = d->m_num_flags_left; - mz_uint8 *pLZ_code_buf = d->m_pLZ_code_buf, *pLZ_flags = d->m_pLZ_flags; - mz_uint cur_pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; - - while ((d->m_src_buf_left) || ((d->m_flush) && (lookahead_size))) - { - const mz_uint TDEFL_COMP_FAST_LOOKAHEAD_SIZE = 4096; - mz_uint dst_pos = (lookahead_pos + lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK; - mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(d->m_src_buf_left, TDEFL_COMP_FAST_LOOKAHEAD_SIZE - lookahead_size); - d->m_src_buf_left -= num_bytes_to_process; - lookahead_size += num_bytes_to_process; - - while (num_bytes_to_process) - { - mz_uint32 n = MZ_MIN(TDEFL_LZ_DICT_SIZE - dst_pos, num_bytes_to_process); - memcpy(d->m_dict + dst_pos, d->m_pSrc, n); - if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) - memcpy(d->m_dict + TDEFL_LZ_DICT_SIZE + dst_pos, d->m_pSrc, MZ_MIN(n, (TDEFL_MAX_MATCH_LEN - 1) - dst_pos)); - d->m_pSrc += n; - dst_pos = (dst_pos + n) & TDEFL_LZ_DICT_SIZE_MASK; - num_bytes_to_process -= n; - } - - dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - lookahead_size, dict_size); - if ((!d->m_flush) && (lookahead_size < TDEFL_COMP_FAST_LOOKAHEAD_SIZE)) break; - - while (lookahead_size >= 4) - { - mz_uint cur_match_dist, cur_match_len = 1; - mz_uint8 *pCur_dict = d->m_dict + cur_pos; - mz_uint first_trigram = (*(const mz_uint32 *)pCur_dict) & 0xFFFFFF; - mz_uint hash = (first_trigram ^ (first_trigram >> (24 - (TDEFL_LZ_HASH_BITS - 8)))) & TDEFL_LEVEL1_HASH_SIZE_MASK; - mz_uint probe_pos = d->m_hash[hash]; - d->m_hash[hash] = (mz_uint16)lookahead_pos; - - if (((cur_match_dist = (mz_uint16)(lookahead_pos - probe_pos)) <= dict_size) && ((*(const mz_uint32 *)(d->m_dict + (probe_pos &= TDEFL_LZ_DICT_SIZE_MASK)) & 0xFFFFFF) == first_trigram)) - { - const mz_uint16 *p = (const mz_uint16 *)pCur_dict; - const mz_uint16 *q = (const mz_uint16 *)(d->m_dict + probe_pos); - mz_uint32 probe_len = 32; - do { } while ( (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && - (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (--probe_len > 0) ); - cur_match_len = ((mz_uint)(p - (const mz_uint16 *)pCur_dict) * 2) + (mz_uint)(*(const mz_uint8 *)p == *(const mz_uint8 *)q); - if (!probe_len) - cur_match_len = cur_match_dist ? TDEFL_MAX_MATCH_LEN : 0; - - if ((cur_match_len < TDEFL_MIN_MATCH_LEN) || ((cur_match_len == TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 8U*1024U))) - { - cur_match_len = 1; - *pLZ_code_buf++ = (mz_uint8)first_trigram; - *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); - d->m_huff_count[0][(mz_uint8)first_trigram]++; - } - else - { - mz_uint32 s0, s1; - cur_match_len = MZ_MIN(cur_match_len, lookahead_size); - - MZ_ASSERT((cur_match_len >= TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 1) && (cur_match_dist <= TDEFL_LZ_DICT_SIZE)); - - cur_match_dist--; - - pLZ_code_buf[0] = (mz_uint8)(cur_match_len - TDEFL_MIN_MATCH_LEN); - *(mz_uint16 *)(&pLZ_code_buf[1]) = (mz_uint16)cur_match_dist; - pLZ_code_buf += 3; - *pLZ_flags = (mz_uint8)((*pLZ_flags >> 1) | 0x80); - - s0 = s_tdefl_small_dist_sym[cur_match_dist & 511]; - s1 = s_tdefl_large_dist_sym[cur_match_dist >> 8]; - d->m_huff_count[1][(cur_match_dist < 512) ? s0 : s1]++; - - d->m_huff_count[0][s_tdefl_len_sym[cur_match_len - TDEFL_MIN_MATCH_LEN]]++; - } - } - else - { - *pLZ_code_buf++ = (mz_uint8)first_trigram; - *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); - d->m_huff_count[0][(mz_uint8)first_trigram]++; - } - - if (--num_flags_left == 0) { num_flags_left = 8; pLZ_flags = pLZ_code_buf++; } - - total_lz_bytes += cur_match_len; - lookahead_pos += cur_match_len; - dict_size = MZ_MIN(dict_size + cur_match_len, TDEFL_LZ_DICT_SIZE); - cur_pos = (cur_pos + cur_match_len) & TDEFL_LZ_DICT_SIZE_MASK; - MZ_ASSERT(lookahead_size >= cur_match_len); - lookahead_size -= cur_match_len; - - if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) - { - int n; - d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; - d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; - if ((n = tdefl_flush_block(d, 0)) != 0) - return (n < 0) ? MZ_FALSE : MZ_TRUE; - total_lz_bytes = d->m_total_lz_bytes; pLZ_code_buf = d->m_pLZ_code_buf; pLZ_flags = d->m_pLZ_flags; num_flags_left = d->m_num_flags_left; - } - } - - while (lookahead_size) - { - mz_uint8 lit = d->m_dict[cur_pos]; - - total_lz_bytes++; - *pLZ_code_buf++ = lit; - *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); - if (--num_flags_left == 0) { num_flags_left = 8; pLZ_flags = pLZ_code_buf++; } - - d->m_huff_count[0][lit]++; - - lookahead_pos++; - dict_size = MZ_MIN(dict_size + 1, TDEFL_LZ_DICT_SIZE); - cur_pos = (cur_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; - lookahead_size--; - - if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) - { - int n; - d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; - d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; - if ((n = tdefl_flush_block(d, 0)) != 0) - return (n < 0) ? MZ_FALSE : MZ_TRUE; - total_lz_bytes = d->m_total_lz_bytes; pLZ_code_buf = d->m_pLZ_code_buf; pLZ_flags = d->m_pLZ_flags; num_flags_left = d->m_num_flags_left; - } - } - } - - d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; - d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; - return MZ_TRUE; -} -#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN - -static MZ_FORCEINLINE void tdefl_record_literal(tdefl_compressor *d, mz_uint8 lit) -{ - d->m_total_lz_bytes++; - *d->m_pLZ_code_buf++ = lit; - *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> 1); if (--d->m_num_flags_left == 0) { d->m_num_flags_left = 8; d->m_pLZ_flags = d->m_pLZ_code_buf++; } - d->m_huff_count[0][lit]++; -} - -static MZ_FORCEINLINE void tdefl_record_match(tdefl_compressor *d, mz_uint match_len, mz_uint match_dist) -{ - mz_uint32 s0, s1; - - MZ_ASSERT((match_len >= TDEFL_MIN_MATCH_LEN) && (match_dist >= 1) && (match_dist <= TDEFL_LZ_DICT_SIZE)); - - d->m_total_lz_bytes += match_len; - - d->m_pLZ_code_buf[0] = (mz_uint8)(match_len - TDEFL_MIN_MATCH_LEN); - - match_dist -= 1; - d->m_pLZ_code_buf[1] = (mz_uint8)(match_dist & 0xFF); - d->m_pLZ_code_buf[2] = (mz_uint8)(match_dist >> 8); d->m_pLZ_code_buf += 3; - - *d->m_pLZ_flags = (mz_uint8)((*d->m_pLZ_flags >> 1) | 0x80); if (--d->m_num_flags_left == 0) { d->m_num_flags_left = 8; d->m_pLZ_flags = d->m_pLZ_code_buf++; } - - s0 = s_tdefl_small_dist_sym[match_dist & 511]; s1 = s_tdefl_large_dist_sym[(match_dist >> 8) & 127]; - d->m_huff_count[1][(match_dist < 512) ? s0 : s1]++; - - if (match_len >= TDEFL_MIN_MATCH_LEN) d->m_huff_count[0][s_tdefl_len_sym[match_len - TDEFL_MIN_MATCH_LEN]]++; -} - -static mz_bool tdefl_compress_normal(tdefl_compressor *d) -{ - const mz_uint8 *pSrc = d->m_pSrc; size_t src_buf_left = d->m_src_buf_left; - tdefl_flush flush = d->m_flush; - - while ((src_buf_left) || ((flush) && (d->m_lookahead_size))) - { - mz_uint len_to_move, cur_match_dist, cur_match_len, cur_pos; - // Update dictionary and hash chains. Keeps the lookahead size equal to TDEFL_MAX_MATCH_LEN. - if ((d->m_lookahead_size + d->m_dict_size) >= (TDEFL_MIN_MATCH_LEN - 1)) - { - mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK, ins_pos = d->m_lookahead_pos + d->m_lookahead_size - 2; - mz_uint hash = (d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK]; - mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(src_buf_left, TDEFL_MAX_MATCH_LEN - d->m_lookahead_size); - const mz_uint8 *pSrc_end = pSrc + num_bytes_to_process; - src_buf_left -= num_bytes_to_process; - d->m_lookahead_size += num_bytes_to_process; - while (pSrc != pSrc_end) - { - mz_uint8 c = *pSrc++; d->m_dict[dst_pos] = c; if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; - hash = ((hash << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1); - d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)(ins_pos); - dst_pos = (dst_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; ins_pos++; - } - } - else - { - while ((src_buf_left) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) - { - mz_uint8 c = *pSrc++; - mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK; - src_buf_left--; - d->m_dict[dst_pos] = c; - if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) - d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; - if ((++d->m_lookahead_size + d->m_dict_size) >= TDEFL_MIN_MATCH_LEN) - { - mz_uint ins_pos = d->m_lookahead_pos + (d->m_lookahead_size - 1) - 2; - mz_uint hash = ((d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << (TDEFL_LZ_HASH_SHIFT * 2)) ^ (d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1); - d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)(ins_pos); - } - } - } - d->m_dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - d->m_lookahead_size, d->m_dict_size); - if ((!flush) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) - break; - - // Simple lazy/greedy parsing state machine. - len_to_move = 1; cur_match_dist = 0; cur_match_len = d->m_saved_match_len ? d->m_saved_match_len : (TDEFL_MIN_MATCH_LEN - 1); cur_pos = d->m_lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; - if (d->m_flags & (TDEFL_RLE_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS)) - { - if ((d->m_dict_size) && (!(d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) - { - mz_uint8 c = d->m_dict[(cur_pos - 1) & TDEFL_LZ_DICT_SIZE_MASK]; - cur_match_len = 0; while (cur_match_len < d->m_lookahead_size) { if (d->m_dict[cur_pos + cur_match_len] != c) break; cur_match_len++; } - if (cur_match_len < TDEFL_MIN_MATCH_LEN) cur_match_len = 0; else cur_match_dist = 1; - } - } - else - { - tdefl_find_match(d, d->m_lookahead_pos, d->m_dict_size, d->m_lookahead_size, &cur_match_dist, &cur_match_len); - } - if (((cur_match_len == TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 8U*1024U)) || (cur_pos == cur_match_dist) || ((d->m_flags & TDEFL_FILTER_MATCHES) && (cur_match_len <= 5))) - { - cur_match_dist = cur_match_len = 0; - } - if (d->m_saved_match_len) - { - if (cur_match_len > d->m_saved_match_len) - { - tdefl_record_literal(d, (mz_uint8)d->m_saved_lit); - if (cur_match_len >= 128) - { - tdefl_record_match(d, cur_match_len, cur_match_dist); - d->m_saved_match_len = 0; len_to_move = cur_match_len; - } - else - { - d->m_saved_lit = d->m_dict[cur_pos]; d->m_saved_match_dist = cur_match_dist; d->m_saved_match_len = cur_match_len; - } - } - else - { - tdefl_record_match(d, d->m_saved_match_len, d->m_saved_match_dist); - len_to_move = d->m_saved_match_len - 1; d->m_saved_match_len = 0; - } - } - else if (!cur_match_dist) - tdefl_record_literal(d, d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]); - else if ((d->m_greedy_parsing) || (d->m_flags & TDEFL_RLE_MATCHES) || (cur_match_len >= 128)) - { - tdefl_record_match(d, cur_match_len, cur_match_dist); - len_to_move = cur_match_len; - } - else - { - d->m_saved_lit = d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]; d->m_saved_match_dist = cur_match_dist; d->m_saved_match_len = cur_match_len; - } - // Move the lookahead forward by len_to_move bytes. - d->m_lookahead_pos += len_to_move; - MZ_ASSERT(d->m_lookahead_size >= len_to_move); - d->m_lookahead_size -= len_to_move; - d->m_dict_size = MZ_MIN(d->m_dict_size + len_to_move, TDEFL_LZ_DICT_SIZE); - // Check if it's time to flush the current LZ codes to the internal output buffer. - if ( (d->m_pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) || - ( (d->m_total_lz_bytes > 31*1024) && (((((mz_uint)(d->m_pLZ_code_buf - d->m_lz_code_buf) * 115) >> 7) >= d->m_total_lz_bytes) || (d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) ) - { - int n; - d->m_pSrc = pSrc; d->m_src_buf_left = src_buf_left; - if ((n = tdefl_flush_block(d, 0)) != 0) - return (n < 0) ? MZ_FALSE : MZ_TRUE; - } - } - - d->m_pSrc = pSrc; d->m_src_buf_left = src_buf_left; - return MZ_TRUE; -} - -static tdefl_status tdefl_flush_output_buffer(tdefl_compressor *d) -{ - if (d->m_pIn_buf_size) - { - *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; - } - - if (d->m_pOut_buf_size) - { - size_t n = MZ_MIN(*d->m_pOut_buf_size - d->m_out_buf_ofs, d->m_output_flush_remaining); - memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf + d->m_output_flush_ofs, n); - d->m_output_flush_ofs += (mz_uint)n; - d->m_output_flush_remaining -= (mz_uint)n; - d->m_out_buf_ofs += n; - - *d->m_pOut_buf_size = d->m_out_buf_ofs; - } - - return (d->m_finished && !d->m_output_flush_remaining) ? TDEFL_STATUS_DONE : TDEFL_STATUS_OKAY; -} - -tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush) -{ - if (!d) - { - if (pIn_buf_size) *pIn_buf_size = 0; - if (pOut_buf_size) *pOut_buf_size = 0; - return TDEFL_STATUS_BAD_PARAM; - } - - d->m_pIn_buf = pIn_buf; d->m_pIn_buf_size = pIn_buf_size; - d->m_pOut_buf = pOut_buf; d->m_pOut_buf_size = pOut_buf_size; - d->m_pSrc = (const mz_uint8 *)(pIn_buf); d->m_src_buf_left = pIn_buf_size ? *pIn_buf_size : 0; - d->m_out_buf_ofs = 0; - d->m_flush = flush; - - if ( ((d->m_pPut_buf_func != NULL) == ((pOut_buf != NULL) || (pOut_buf_size != NULL))) || (d->m_prev_return_status != TDEFL_STATUS_OKAY) || - (d->m_wants_to_finish && (flush != TDEFL_FINISH)) || (pIn_buf_size && *pIn_buf_size && !pIn_buf) || (pOut_buf_size && *pOut_buf_size && !pOut_buf) ) - { - if (pIn_buf_size) *pIn_buf_size = 0; - if (pOut_buf_size) *pOut_buf_size = 0; - return (d->m_prev_return_status = TDEFL_STATUS_BAD_PARAM); - } - d->m_wants_to_finish |= (flush == TDEFL_FINISH); - - if ((d->m_output_flush_remaining) || (d->m_finished)) - return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); - -#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN - if (((d->m_flags & TDEFL_MAX_PROBES_MASK) == 1) && - ((d->m_flags & TDEFL_GREEDY_PARSING_FLAG) != 0) && - ((d->m_flags & (TDEFL_FILTER_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS | TDEFL_RLE_MATCHES)) == 0)) - { - if (!tdefl_compress_fast(d)) - return d->m_prev_return_status; - } - else -#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN - { - if (!tdefl_compress_normal(d)) - return d->m_prev_return_status; - } - - if ((d->m_flags & (TDEFL_WRITE_ZLIB_HEADER | TDEFL_COMPUTE_ADLER32)) && (pIn_buf)) - d->m_adler32 = (mz_uint32)mz_adler32(d->m_adler32, (const mz_uint8 *)pIn_buf, d->m_pSrc - (const mz_uint8 *)pIn_buf); - - if ((flush) && (!d->m_lookahead_size) && (!d->m_src_buf_left) && (!d->m_output_flush_remaining)) - { - if (tdefl_flush_block(d, flush) < 0) - return d->m_prev_return_status; - d->m_finished = (flush == TDEFL_FINISH); - if (flush == TDEFL_FULL_FLUSH) { MZ_CLEAR_OBJ(d->m_hash); MZ_CLEAR_OBJ(d->m_next); d->m_dict_size = 0; } - } - - return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); -} - -tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush) -{ - MZ_ASSERT(d->m_pPut_buf_func); return tdefl_compress(d, pIn_buf, &in_buf_size, NULL, NULL, flush); -} - -tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) -{ - d->m_pPut_buf_func = pPut_buf_func; d->m_pPut_buf_user = pPut_buf_user; - d->m_flags = (mz_uint)(flags); d->m_max_probes[0] = 1 + ((flags & 0xFFF) + 2) / 3; d->m_greedy_parsing = (flags & TDEFL_GREEDY_PARSING_FLAG) != 0; - d->m_max_probes[1] = 1 + (((flags & 0xFFF) >> 2) + 2) / 3; - if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG)) MZ_CLEAR_OBJ(d->m_hash); - d->m_lookahead_pos = d->m_lookahead_size = d->m_dict_size = d->m_total_lz_bytes = d->m_lz_code_buf_dict_pos = d->m_bits_in = 0; - d->m_output_flush_ofs = d->m_output_flush_remaining = d->m_finished = d->m_block_index = d->m_bit_buffer = d->m_wants_to_finish = 0; - d->m_pLZ_code_buf = d->m_lz_code_buf + 1; d->m_pLZ_flags = d->m_lz_code_buf; d->m_num_flags_left = 8; - d->m_pOutput_buf = d->m_output_buf; d->m_pOutput_buf_end = d->m_output_buf; d->m_prev_return_status = TDEFL_STATUS_OKAY; - d->m_saved_match_dist = d->m_saved_match_len = d->m_saved_lit = 0; d->m_adler32 = 1; - d->m_pIn_buf = NULL; d->m_pOut_buf = NULL; - d->m_pIn_buf_size = NULL; d->m_pOut_buf_size = NULL; - d->m_flush = TDEFL_NO_FLUSH; d->m_pSrc = NULL; d->m_src_buf_left = 0; d->m_out_buf_ofs = 0; - memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); - memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); - - if (d->m_flags & TDEFL_TRACK_TOTAL_HUFF_COUNT) - { - memset(&d->m_huff_total_count[0][0], 0, sizeof(d->m_huff_total_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); - memset(&d->m_huff_total_count[1][0], 0, sizeof(d->m_huff_total_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); - } - - return TDEFL_STATUS_OKAY; -} - -tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d) -{ - return d->m_prev_return_status; -} - -mz_uint32 tdefl_get_adler32(tdefl_compressor *d) -{ - return d->m_adler32; -} - -mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) -{ - tdefl_compressor *pComp; mz_bool succeeded; if (((buf_len) && (!pBuf)) || (!pPut_buf_func)) return MZ_FALSE; - pComp = (tdefl_compressor*)MZ_MALLOC(sizeof(tdefl_compressor)); if (!pComp) return MZ_FALSE; - succeeded = (tdefl_init(pComp, pPut_buf_func, pPut_buf_user, flags) == TDEFL_STATUS_OKAY); - succeeded = succeeded && (tdefl_compress_buffer(pComp, pBuf, buf_len, TDEFL_FINISH) == TDEFL_STATUS_DONE); - MZ_FREE(pComp); return succeeded; -} - -typedef struct -{ - size_t m_size, m_capacity; - mz_uint8 *m_pBuf; - mz_bool m_expandable; -} tdefl_output_buffer; - -static mz_bool tdefl_output_buffer_putter(const void *pBuf, int len, void *pUser) -{ - tdefl_output_buffer *p = (tdefl_output_buffer *)pUser; - size_t new_size = p->m_size + len; - if (new_size > p->m_capacity) - { - size_t new_capacity = p->m_capacity; mz_uint8 *pNew_buf; if (!p->m_expandable) return MZ_FALSE; - do { new_capacity = MZ_MAX(128U, new_capacity << 1U); } while (new_size > new_capacity); - pNew_buf = (mz_uint8*)MZ_REALLOC(p->m_pBuf, new_capacity); if (!pNew_buf) return MZ_FALSE; - p->m_pBuf = pNew_buf; p->m_capacity = new_capacity; - } - memcpy((mz_uint8*)p->m_pBuf + p->m_size, pBuf, len); p->m_size = new_size; - return MZ_TRUE; -} - -void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags) -{ - tdefl_output_buffer out_buf; MZ_CLEAR_OBJ(out_buf); - if (!pOut_len) return MZ_FALSE; else *pOut_len = 0; - out_buf.m_expandable = MZ_TRUE; - if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) return NULL; - *pOut_len = out_buf.m_size; return out_buf.m_pBuf; -} - -size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags) -{ - tdefl_output_buffer out_buf; MZ_CLEAR_OBJ(out_buf); - if (!pOut_buf) return 0; - out_buf.m_pBuf = (mz_uint8*)pOut_buf; out_buf.m_capacity = out_buf_len; - if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) return 0; - return out_buf.m_size; -} - -#ifndef MINIZ_NO_ZLIB_APIS -static const mz_uint s_tdefl_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 }; - -// level may actually range from [0,10] (10 is a "hidden" max level, where we want a bit more compression and it's fine if throughput to fall off a cliff on some files). -mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy) -{ - mz_uint comp_flags = s_tdefl_num_probes[(level >= 0) ? MZ_MIN(10, level) : MZ_DEFAULT_LEVEL] | ((level <= 3) ? TDEFL_GREEDY_PARSING_FLAG : 0); - if (window_bits > 0) comp_flags |= TDEFL_WRITE_ZLIB_HEADER; - - if (!level) comp_flags |= TDEFL_FORCE_ALL_RAW_BLOCKS; - else if (strategy == MZ_FILTERED) comp_flags |= TDEFL_FILTER_MATCHES; - else if (strategy == MZ_HUFFMAN_ONLY) comp_flags &= ~TDEFL_MAX_PROBES_MASK; - else if (strategy == MZ_FIXED) comp_flags |= TDEFL_FORCE_ALL_STATIC_BLOCKS; - else if (strategy == MZ_RLE) comp_flags |= TDEFL_RLE_MATCHES; - - return comp_flags; -} -#endif //MINIZ_NO_ZLIB_APIS - -#ifdef _MSC_VER -#pragma warning (push) -#pragma warning (disable:4204) // nonstandard extension used : non-constant aggregate initializer (also supported by GNU C and C99, so no big deal) -#endif - -// Simple PNG writer function by Alex Evans, 2011. Released into the public domain: https://gist.github.com/908299, more context at -// http://altdevblogaday.org/2011/04/06/a-smaller-jpg-encoder/. -// This is actually a modification of Alex's original code so PNG files generated by this function pass pngcheck. -void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int h, int num_chans, size_t *pLen_out, mz_uint level, mz_bool flip) -{ - // Using a local copy of this array here in case MINIZ_NO_ZLIB_APIS was defined. - static const mz_uint s_tdefl_png_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 }; - tdefl_compressor *pComp = (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); tdefl_output_buffer out_buf; int i, bpl = w * num_chans, y, z; mz_uint32 c; *pLen_out = 0; - if (!pComp) return NULL; - MZ_CLEAR_OBJ(out_buf); out_buf.m_expandable = MZ_TRUE; out_buf.m_capacity = 57+MZ_MAX(64, (1+bpl)*h); if (NULL == (out_buf.m_pBuf = (mz_uint8*)MZ_MALLOC(out_buf.m_capacity))) { MZ_FREE(pComp); return NULL; } - // write dummy header - for (z = 41; z; --z) tdefl_output_buffer_putter(&z, 1, &out_buf); - // compress image data - tdefl_init(pComp, tdefl_output_buffer_putter, &out_buf, s_tdefl_png_num_probes[MZ_MIN(10, level)] | TDEFL_WRITE_ZLIB_HEADER); - for (y = 0; y < h; ++y) { tdefl_compress_buffer(pComp, &z, 1, TDEFL_NO_FLUSH); tdefl_compress_buffer(pComp, (mz_uint8*)pImage + (flip ? (h - 1 - y) : y) * bpl, bpl, TDEFL_NO_FLUSH); } - if (tdefl_compress_buffer(pComp, NULL, 0, TDEFL_FINISH) != TDEFL_STATUS_DONE) { MZ_FREE(pComp); MZ_FREE(out_buf.m_pBuf); return NULL; } - // write real header - *pLen_out = out_buf.m_size-41; - { - static const mz_uint8 chans[] = {0x00, 0x00, 0x04, 0x02, 0x06}; - mz_uint8 pnghdr[41]={0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52, - 0,0,(mz_uint8)(w>>8),(mz_uint8)w,0,0,(mz_uint8)(h>>8),(mz_uint8)h,8,chans[num_chans],0,0,0,0,0,0,0, - (mz_uint8)(*pLen_out>>24),(mz_uint8)(*pLen_out>>16),(mz_uint8)(*pLen_out>>8),(mz_uint8)*pLen_out,0x49,0x44,0x41,0x54}; - c=(mz_uint32)mz_crc32(MZ_CRC32_INIT,pnghdr+12,17); for (i=0; i<4; ++i, c<<=8) ((mz_uint8*)(pnghdr+29))[i]=(mz_uint8)(c>>24); - memcpy(out_buf.m_pBuf, pnghdr, 41); - } - // write footer (IDAT CRC-32, followed by IEND chunk) - if (!tdefl_output_buffer_putter("\0\0\0\0\0\0\0\0\x49\x45\x4e\x44\xae\x42\x60\x82", 16, &out_buf)) { *pLen_out = 0; MZ_FREE(pComp); MZ_FREE(out_buf.m_pBuf); return NULL; } - c = (mz_uint32)mz_crc32(MZ_CRC32_INIT,out_buf.m_pBuf+41-4, *pLen_out+4); for (i=0; i<4; ++i, c<<=8) (out_buf.m_pBuf+out_buf.m_size-16)[i] = (mz_uint8)(c >> 24); - // compute final size of file, grab compressed data buffer and return - *pLen_out += 57; MZ_FREE(pComp); return out_buf.m_pBuf; -} -void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out) -{ - // Level 6 corresponds to TDEFL_DEFAULT_MAX_PROBES or MZ_DEFAULT_LEVEL (but we can't depend on MZ_DEFAULT_LEVEL being available in case the zlib API's where #defined out) - return tdefl_write_image_to_png_file_in_memory_ex(pImage, w, h, num_chans, pLen_out, 6, MZ_FALSE); -} - -#ifdef _MSC_VER -#pragma warning (pop) -#endif - -#ifdef __cplusplus -} -#endif - -#endif // MINIZ_HEADER_FILE_ONLY - -#ifdef _MSC_VER -#pragma warning(pop) -#endif \ No newline at end of file diff --git a/external/bc7enc_rdo/rdo_bc_encoder.cpp b/external/bc7enc_rdo/rdo_bc_encoder.cpp deleted file mode 100644 index 44d39333ef..0000000000 --- a/external/bc7enc_rdo/rdo_bc_encoder.cpp +++ /dev/null @@ -1,1270 +0,0 @@ -// rdo_bc_encoder.cpp -#include "rdo_bc_encoder.h" - -#define RGBCX_IMPLEMENTATION -#include "rgbcx.h" - -#define DECODE_BC4_TO_GRAYSCALE (0) - -#ifdef _MSC_VER -#pragma warning (disable: 4127) // conditional expression is constant -#endif - -using namespace utils; - -namespace rdo_bc -{ - static const char* get_dxgi_format_string(DXGI_FORMAT fmt) - { - switch (fmt) - { - case DXGI_FORMAT_BC1_UNORM: return "BC1_UNORM"; - case DXGI_FORMAT_BC4_UNORM: return "BC4_UNORM"; - case DXGI_FORMAT_BC3_UNORM: return "BC3_UNORM"; - case DXGI_FORMAT_BC5_UNORM: return "BC5_UNORM"; - case DXGI_FORMAT_BC7_UNORM: return "BC7_UNORM"; - default: break; - } - return "?"; - } - - static std::vector compute_block_mse_scales(const image_u8& source_image, uint32_t blocks_x, uint32_t blocks_y, uint32_t total_blocks, bool rdo_debug_output) - { - const float ULTRASMOOTH_BLOCK_STD_DEV_THRESHOLD = 2.9f; - const float DARK_THRESHOLD = 13.0f; - const float BRIGHT_THRESHOLD = 222.0f; - const float ULTRAMOOTH_BLOCK_MSE_SCALE = 120.0f; - const uint32_t ULTRASMOOTH_REGION_TOO_SMALL_THRESHOLD = 64; - - image_u8 ultrasmooth_blocks_vis(blocks_x, blocks_y); - - for (uint32_t by = 0; by < blocks_y; by++) - { - for (uint32_t bx = 0; bx < blocks_x; bx++) - { - color_quad_u8 block_pixels[16]; - source_image.get_block(bx, by, 4, 4, block_pixels); - - tracked_stat y_stats; - for (uint32_t y = 0; y < 4; y++) - for (uint32_t x = 0; x < 4; x++) - { - int l = block_pixels[x + y * 4].get_luma(); - y_stats.update(l); - } - - float max_std_dev = compute_block_max_std_dev((color_quad_u8*)block_pixels, 4, 4, 3); - - float yl = max_std_dev / ULTRASMOOTH_BLOCK_STD_DEV_THRESHOLD; - - yl = clamp(yl, 0.0f, 1.0f); - yl *= yl; - - float y_avg = y_stats.get_mean(); - - if ((y_avg < DARK_THRESHOLD) || (y_avg >= BRIGHT_THRESHOLD)) - yl = 1.0f; - - int k = std::min((int)(yl * 255.0f + .5f), 255); - - ultrasmooth_blocks_vis.fill_box(bx, by, 1, 1, color_quad_u8((uint8_t)k, 255)); - } - } - - for (int pass = 0; pass < 1; pass++) - { - image_u8 next_vis(ultrasmooth_blocks_vis); - - for (int y = 0; y < (int)blocks_y; y++) - { - for (int x = 0; x < (int)blocks_x; x++) - { - int m = 0; - - for (int dy = -1; dy <= 1; dy++) - for (int dx = -1; dx <= 1; dx++) - { - if (ultrasmooth_blocks_vis.get_clamped(x + dx, y + dy).r == 255) - m = std::max(m, ultrasmooth_blocks_vis.get_clamped(x + dx, y + dy).r); - } - - next_vis(x, y).set((uint8_t)m, 255); - } - } - - ultrasmooth_blocks_vis.swap(next_vis); - } - - for (uint32_t pass = 0; pass < 32; pass++) - { - image_u8 next_vis(ultrasmooth_blocks_vis); - for (int y = 0; y < (int)blocks_y; y++) - { - for (int x = 0; x < (int)blocks_x; x++) - { - if (ultrasmooth_blocks_vis.get_clamped(x, y).r < 255) - { - int m = 0; - - for (int dy = -1; dy <= 1; dy++) - for (int dx = -1; dx <= 1; dx++) - if (ultrasmooth_blocks_vis.get_clamped(x + dx, y + dy).r == 255) - m++; - - if (m >= 5) - next_vis.set_pixel_clipped(x, y, color_quad_u8(255, 255, 255, 255)); - } - } - } - ultrasmooth_blocks_vis.swap(next_vis); - } - - image_u8 orig_ultrasmooth_blocks_vis(ultrasmooth_blocks_vis); - - if (rdo_debug_output) - { - save_png("ultrasmooth_block_mask_pre_filter.png", ultrasmooth_blocks_vis, false); - } - - for (uint32_t by = 0; by < blocks_y; by++) - { - for (uint32_t bx = 0; bx < blocks_x; bx++) - { - const bool is_ultrasmooth = ultrasmooth_blocks_vis(bx, by).r == 0; - if (!is_ultrasmooth) - continue; - - std::vector filled_pixels; - filled_pixels.reserve(256); - - uint32_t total_set_pixels = ultrasmooth_blocks_vis.flood_fill(bx, by, color_quad_u8(255, 255, 255, 255), color_quad_u8(0, 0, 0, 255), &filled_pixels); - - if (total_set_pixels < ULTRASMOOTH_REGION_TOO_SMALL_THRESHOLD) - { - for (uint32_t i = 0; i < filled_pixels.size(); i++) - orig_ultrasmooth_blocks_vis(filled_pixels[i].m_x, filled_pixels[i].m_y) = color_quad_u8(255, 255, 255, 255); - } - - } // bx - } // by - - ultrasmooth_blocks_vis = orig_ultrasmooth_blocks_vis; - - if (rdo_debug_output) - { - save_png("ultrasmooth_block_mask.png", ultrasmooth_blocks_vis, false); - } - - std::vector block_mse_scales(total_blocks); - - uint32_t total_ultrasmooth_blocks = 0; - for (uint32_t by = 0; by < blocks_y; by++) - { - for (uint32_t bx = 0; bx < blocks_x; bx++) - { - const bool is_ultrasmooth = ultrasmooth_blocks_vis(bx, by).r == 0; - - block_mse_scales[bx + by * blocks_x] = is_ultrasmooth ? ULTRAMOOTH_BLOCK_MSE_SCALE : -1.0f; - - total_ultrasmooth_blocks += is_ultrasmooth; - } - } - - if (rdo_debug_output) - printf("Total ultrasmooth blocks: %3.2f%%\n", total_ultrasmooth_blocks * 100.0f / total_blocks); - - return block_mse_scales; - } - - rdo_bc_encoder::rdo_bc_encoder() : - m_pOrig_source_image(nullptr), - m_orig_width(0), - m_orig_height(0), - m_blocks_x(0), - m_blocks_y(0), - m_total_blocks(0), - m_bytes_per_block(0), - m_pixel_format_bpp(0), - m_total_texels(0), - m_has_alpha(false) - { - } - - void rdo_bc_encoder::clear() - { - m_pOrig_source_image = nullptr; - - m_source_image.clear(); - - m_params.clear(); - - m_orig_width = 0; - m_orig_height = 0; - m_blocks_x = 0; - m_blocks_y = 0; - m_total_blocks = 0; - m_bytes_per_block = 0; - m_pixel_format_bpp = 0; - m_total_texels = 0; - m_has_alpha = false; - - m_packed_image8.clear(); - m_packed_image16.clear(); - - m_prerdo_packed_image8.clear(); - m_prerdo_packed_image16.clear(); - - m_bc7enc_pack_params.clear(); -#if SUPPORT_BC7E - memset(&m_bc7e_pack_params, 0, sizeof(m_bc7e_pack_params)); -#endif - } - - bool rdo_bc_encoder::init(const utils::image_u8& src_image, rdo_bc_params& params) - { - clear(); - - m_pOrig_source_image = &src_image; - m_params = params; - - init_encoders(); - - if (!init_source_image()) - return false; - - return true; - } - - bool rdo_bc_encoder::encode() - { - if (!m_packed_image8.size() && !m_packed_image16.size()) - return false; - - if (!init_encoder_params()) - return false; - - if (!encode_texture()) - return false; - - if (!postprocess_rdo()) - return false; - - return true; - } - - void rdo_bc_encoder::init_encoders() - { - rgbcx::init(m_params.m_bc1_mode); - bc7enc_compress_block_init(); -#if SUPPORT_BC7E - ispc::bc7e_compress_block_init(); -#endif - } - - bool rdo_bc_encoder::init_encoder_params() - { - bc7enc_compress_block_params_init(&m_bc7enc_pack_params); - if (!m_params.m_perceptual) - bc7enc_compress_block_params_init_linear_weights(&m_bc7enc_pack_params); - m_bc7enc_pack_params.m_max_partitions = m_params.m_bc7enc_max_partitions_to_scan; - m_bc7enc_pack_params.m_uber_level = std::min(BC7ENC_MAX_UBER_LEVEL, m_params.m_bc7_uber_level); - - if (m_params.m_bc7enc_mode6_only) - m_bc7enc_pack_params.m_mode_mask = 1 << 6; - - if ((m_params.m_dxgi_format == DXGI_FORMAT_BC7_UNORM) && (m_params.m_rdo_lambda > 0.0f)) - { - // Slam off perceptual in RDO mode - we don't support it (too slow). - m_params.m_perceptual = false; - m_bc7enc_pack_params.m_perceptual = false; - bc7enc_compress_block_params_init_linear_weights(&m_bc7enc_pack_params); - } - - if ((m_params.m_dxgi_format == DXGI_FORMAT_BC7_UNORM) && (m_params.m_bc7enc_reduce_entropy)) - { - // Configure the BC7 encoder with some decent parameters for later RDO post-processing. - // Textures with alpha are harder for BC7 to handle, so we use more conservative defaults. - - m_bc7enc_pack_params.m_mode17_partition_estimation_filterbank = false; - - if (m_params.m_bc7enc_rdo_bc7_weight_modes) - { - // Weight modes 5 and especially 6 more highly than the other modes. - if (m_has_alpha) - { - m_bc7enc_pack_params.m_mode5_error_weight = .7f; - m_bc7enc_pack_params.m_mode6_error_weight = .6f; - } - else - { - m_bc7enc_pack_params.m_mode6_error_weight = .4f; - } - } - - if (m_params.m_bc7enc_rdo_bc7_weight_low_frequency_partitions) - { - // Slightly prefer the lower frequency partition patterns. - m_bc7enc_pack_params.m_low_frequency_partition_weight = .9999f; - } - - if (m_params.m_bc7enc_rdo_bc7_quant_mode6_endpoints) - { - // As a good default, don't quantize mode 6 endpoints if the texture has alpha. This isn't required, but helps mask textures. - //if (!has_alpha) - m_bc7enc_pack_params.m_quant_mode6_endpoints = true; - } - - if (m_params.m_bc7enc_rdo_bc7_pbit1_weighting) - { - // Favor p-bit 0 vs. 1, to slightly lower the entropy of output blocks with p-bits - m_bc7enc_pack_params.m_pbit1_weight = 1.3f; - } - } - -#if SUPPORT_BC7E - // Now initialize the BC7 compressor's parameters. - - memset(&m_bc7e_pack_params, 0, sizeof(m_bc7e_pack_params)); - switch (m_params.m_bc7_uber_level) - { - case 0: - ispc::bc7e_compress_block_params_init_ultrafast(&m_bc7e_pack_params, m_params.m_perceptual); - break; - case 1: - ispc::bc7e_compress_block_params_init_veryfast(&m_bc7e_pack_params, m_params.m_perceptual); - break; - case 2: - ispc::bc7e_compress_block_params_init_fast(&m_bc7e_pack_params, m_params.m_perceptual); - break; - case 3: - ispc::bc7e_compress_block_params_init_basic(&m_bc7e_pack_params, m_params.m_perceptual); - break; - case 4: - ispc::bc7e_compress_block_params_init_slow(&m_bc7e_pack_params, m_params.m_perceptual); - break; - case 5: - ispc::bc7e_compress_block_params_init_veryslow(&m_bc7e_pack_params, m_params.m_perceptual); - break; - case 6: - default: - ispc::bc7e_compress_block_params_init_slowest(&m_bc7e_pack_params, m_params.m_perceptual); - break; - } -#endif - - if (m_params.m_status_output) - { - if (m_params.m_dxgi_format == DXGI_FORMAT_BC7_UNORM) - { - if ((SUPPORT_BC7E) && (m_params.m_use_bc7e)) - printf("bc7e.ispc uber level: %u, perceptual: %u\n", m_params.m_bc7_uber_level, m_params.m_perceptual); - else - { - printf("\nbc7enc parameters:\n"); - m_bc7enc_pack_params.print(); - } - } - else - { - printf("BC1 level: %u, use 3-color mode: %u, use 3-color mode for black: %u, bc1_mode: %u\n", - m_params.m_bc1_quality_level, m_params.m_use_bc1_3color_mode, m_params.m_use_bc1_3color_mode_for_black, (int)m_params.m_bc1_mode); - } - - if ((m_params.m_dxgi_format == DXGI_FORMAT_BC3_UNORM) || (m_params.m_dxgi_format == DXGI_FORMAT_BC4_UNORM) || (m_params.m_dxgi_format == DXGI_FORMAT_BC5_UNORM)) - { - printf("Use high quality BC4 block encoder: %u, BC4 block radius: %u, use 6 value mode: %u, use 8 value mode: %u\n", - m_params.m_use_hq_bc345, m_params.m_bc345_search_rad, (m_params.m_bc345_mode_mask & 2) != 0, (m_params.m_bc345_mode_mask & 1) != 0); - } - - printf("\nrdo_bc_params:\n"); - printf(" Perceptual: %u\n", m_params.m_perceptual); - printf(" Y Flip: %u\n", m_params.m_y_flip); - printf(" DXGI format: 0x%X %s\n", m_params.m_dxgi_format, get_dxgi_format_string(m_params.m_dxgi_format)); - - printf("BC1-5 parameters:\n"); - printf(" BC45 channels: %u %u\n", m_params.m_bc45_channel0, m_params.m_bc45_channel1); - printf(" BC1 approximation mode: %u\n", (int)m_params.m_bc1_mode); - printf(" Use BC1 3-color mode: %u\n", m_params.m_use_bc1_3color_mode); - printf(" Use BC1 3-color mode for black: %u\n", m_params.m_use_bc1_3color_mode_for_black); - printf(" BC1 quality level: %u\n", m_params.m_bc1_quality_level); - printf(" Use HQ BC345: %u\n", m_params.m_use_hq_bc345); - printf(" BC345 search radius: %u\n", m_params.m_bc345_search_rad); - printf(" BC345 mode mask: 0x%X\n", m_params.m_bc345_mode_mask); - - printf("BC7 parameters:\n"); - printf(" Use bc7e: %u\n", m_params.m_use_bc7e); - printf(" BC7 uber level: %u\n", m_params.m_bc7_uber_level); - - printf("RDO parameters:\n"); - printf(" Lambda: %f\n", m_params.m_rdo_lambda); - printf(" Lookback window size: %u\n", m_params.m_lookback_window_size); - printf(" Custom lookback window size: %u\n", m_params.m_custom_lookback_window_size); - printf(" Try 2 matches: %u\n", m_params.m_rdo_try_2_matches); - printf(" Smooth block error scale: %f\n", m_params.m_rdo_smooth_block_error_scale); - printf(" Custom RDO smooth block error scale: %u\n", m_params.m_custom_rdo_smooth_block_error_scale); - printf(" Max smooth block std dev: %f\n", m_params.m_rdo_max_smooth_block_std_dev); - printf(" Allow relative movement: %u\n", m_params.m_rdo_allow_relative_movement); - printf(" Ultrasmooth block handling: %u\n", m_params.m_rdo_ultrasmooth_block_handling); - printf(" Multithreading: %u, max threads: %u\n", m_params.m_rdo_multithreading, m_params.m_rdo_max_threads); - - printf("bc7enc parameters:\n"); - printf(" Mode 6 only: %u\n", m_params.m_bc7enc_mode6_only); - printf(" Max partitions to scan: %u\n", m_params.m_bc7enc_max_partitions_to_scan); - printf(" Quant mode 6 endpoints: %u\n", m_params.m_bc7enc_rdo_bc7_quant_mode6_endpoints); - printf(" Weight modes: %u\n", m_params.m_bc7enc_rdo_bc7_weight_modes); - printf(" Weight low freq partitions: %u\n", m_params.m_bc7enc_rdo_bc7_weight_low_frequency_partitions); - printf(" P-bit1 weighting: %u\n", m_params.m_bc7enc_rdo_bc7_pbit1_weighting); - printf(" Reduce entropy mode: %u\n", m_params.m_bc7enc_reduce_entropy); - printf("\n"); - } - - return true; - } - - bool rdo_bc_encoder::init_source_image() - { - switch (m_params.m_dxgi_format) - { - case DXGI_FORMAT_BC1_UNORM: - case DXGI_FORMAT_BC4_UNORM: - m_pixel_format_bpp = 4; - break; - case DXGI_FORMAT_BC3_UNORM: - case DXGI_FORMAT_BC5_UNORM: - case DXGI_FORMAT_BC7_UNORM: - m_pixel_format_bpp = 8; - break; - default: - return false; - } - - m_bytes_per_block = (16 * m_pixel_format_bpp) / 8; - assert((m_bytes_per_block == 8) || (m_bytes_per_block == 16)); - - m_source_image = *m_pOrig_source_image; - - m_orig_width = m_source_image.width(); - m_orig_height = m_source_image.height(); - - if (m_params.m_y_flip) - { - utils::image_u8 temp; - temp.init(m_orig_width, m_orig_height); - - for (uint32_t y = 0; y < m_orig_height; y++) - for (uint32_t x = 0; x < m_orig_width; x++) - temp(x, (m_orig_height - 1) - y) = m_source_image(x, y); - - temp.swap(m_source_image); - } - - m_source_image.crop_dup_borders((m_source_image.width() + 3) & ~3, (m_source_image.height() + 3) & ~3); - - m_blocks_x = m_source_image.width() / 4; - m_blocks_y = m_source_image.height() / 4; - m_total_blocks = m_blocks_x * m_blocks_y; - m_total_texels = m_total_blocks * 16; - - bool has_alpha = false; - for (int by = 0; by < ((int)m_blocks_y) && !has_alpha; by++) - { - for (uint32_t bx = 0; bx < m_blocks_x; bx++) - { - color_quad_u8 pixels[16]; - m_source_image.get_block(bx, by, 4, 4, pixels); - - for (uint32_t i = 0; i < 16; i++) - { - if (pixels[i].m_c[3] < 255) - { - has_alpha = true; - break; - } - } - } - } - - if (m_pixel_format_bpp == 8) - m_packed_image16.resize(m_total_blocks); - else - m_packed_image8.resize(m_total_blocks); - - return true; - } - - bool rdo_bc_encoder::encode_texture() - { - clock_t start_t = clock(); - - uint32_t bc7_mode_hist[8]; - memset(bc7_mode_hist, 0, sizeof(bc7_mode_hist)); - -#if SUPPORT_BC7E - if ((m_params.m_dxgi_format == DXGI_FORMAT_BC7_UNORM) && (m_params.m_use_bc7e)) - { - if (m_params.m_status_output) - printf("Using bc7e: "); - -#pragma omp parallel for - for (int32_t by = 0; by < static_cast(m_blocks_y); by++) - { - // Process 64 blocks at a time, for efficient SIMD processing. - // Ideally, N >= 8 (or more) and (N % 8) == 0. - const int N = 64; - - for (uint32_t bx = 0; bx < m_blocks_x; bx += N) - { - const uint32_t num_blocks_to_process = std::min(m_blocks_x - bx, N); - - color_quad_u8 pixels[16 * N]; - - // Extract num_blocks_to_process 4x4 pixel blocks from the source image and put them into the pixels[] array. - for (uint32_t b = 0; b < num_blocks_to_process; b++) - m_source_image.get_block(bx + b, by, 4, 4, pixels + b * 16); - - // Compress the blocks to BC7. - // Note: If you've used Intel's ispc_texcomp, the input pixels are different. BC7E requires a pointer to an array of 16 pixels for each block. - block16* pBlock = &m_packed_image16[bx + by * m_blocks_x]; - ispc::bc7e_compress_blocks(num_blocks_to_process, reinterpret_cast(pBlock), reinterpret_cast(pixels), &m_bc7e_pack_params); - } - - if (m_params.m_status_output) - { - if ((by & 63) == 0) - printf("."); - } - } - - for (int by = 0; by < (int)m_blocks_y; by++) - { - for (uint32_t bx = 0; bx < m_blocks_x; bx++) - { - block16* pBlock = &m_packed_image16[bx + by * m_blocks_x]; - - uint32_t mode = ((uint8_t*)pBlock)[0]; - for (uint32_t m = 0; m <= 7; m++) - { - if (mode & (1 << m)) - { - bc7_mode_hist[m]++; - break; - } - } - } - } - } - else -#endif - { -#pragma omp parallel for - for (int by = 0; by < (int)m_blocks_y; by++) - { - for (uint32_t bx = 0; bx < m_blocks_x; bx++) - { - color_quad_u8 pixels[16]; - - m_source_image.get_block(bx, by, 4, 4, pixels); - - switch (m_params.m_dxgi_format) - { - case DXGI_FORMAT_BC1_UNORM: - { - block8* pBlock = &m_packed_image8[bx + by * m_blocks_x]; - - rgbcx::encode_bc1(m_params.m_bc1_quality_level, pBlock, &pixels[0].m_c[0], m_params.m_use_bc1_3color_mode, m_params.m_use_bc1_3color_mode_for_black); - break; - } - case DXGI_FORMAT_BC3_UNORM: - { - block16* pBlock = &m_packed_image16[bx + by * m_blocks_x]; - - if (m_params.m_use_hq_bc345) - rgbcx::encode_bc3_hq(m_params.m_bc1_quality_level, pBlock, &pixels[0].m_c[0], m_params.m_bc345_search_rad, m_params.m_bc345_mode_mask); - else - rgbcx::encode_bc3(m_params.m_bc1_quality_level, pBlock, &pixels[0].m_c[0]); - break; - } - case DXGI_FORMAT_BC4_UNORM: - { - block8* pBlock = &m_packed_image8[bx + by * m_blocks_x]; - - if (m_params.m_use_hq_bc345) - rgbcx::encode_bc4_hq(pBlock, &pixels[0].m_c[m_params.m_bc45_channel0], 4, m_params.m_bc345_search_rad, m_params.m_bc345_mode_mask); - else - rgbcx::encode_bc4(pBlock, &pixels[0].m_c[m_params.m_bc45_channel0], 4); - break; - } - case DXGI_FORMAT_BC5_UNORM: - { - block16* pBlock = &m_packed_image16[bx + by * m_blocks_x]; - - if (m_params.m_use_hq_bc345) - rgbcx::encode_bc5_hq(pBlock, &pixels[0].m_c[0], m_params.m_bc45_channel0, m_params.m_bc45_channel1, 4, m_params.m_bc345_search_rad, m_params.m_bc345_mode_mask); - else - rgbcx::encode_bc5(pBlock, &pixels[0].m_c[0], m_params.m_bc45_channel0, m_params.m_bc45_channel1, 4); - break; - } - case DXGI_FORMAT_BC7_UNORM: - { - block16* pBlock = &m_packed_image16[bx + by * m_blocks_x]; - - bc7enc_compress_block(pBlock, pixels, &m_bc7enc_pack_params); - -#pragma omp critical - { - uint32_t mode = ((uint8_t*)pBlock)[0]; - for (uint32_t m = 0; m <= 7; m++) - { - if (mode & (1 << m)) - { - bc7_mode_hist[m]++; - break; - } - } - } - - break; - } - default: - { - assert(0); - break; - } - } - } - - if (m_params.m_status_output) - { - if ((by & 127) == 0) - printf("."); - } - } - } - - clock_t end_t = clock(); - - if (m_params.m_status_output) - { - printf("\nTotal encoding time: %f secs\n", (double)(end_t - start_t) / CLOCKS_PER_SEC); - - if (m_params.m_dxgi_format == DXGI_FORMAT_BC7_UNORM) - { - printf("BC7 mode histogram:\n"); - for (uint32_t i = 0; i < 8; i++) - printf("%u: %u\n", i, bc7_mode_hist[i]); - } - } - - return true; - } - - bool rdo_bc_encoder::postprocess_rdo() - { - m_prerdo_packed_image8 = m_packed_image8; - m_prerdo_packed_image16 = m_packed_image16; - - // Post-process the data with Rate Distortion Optimization - if (m_params.m_rdo_lambda <= 0.0f) - return true; - - const uint32_t MIN_RDO_MULTITHREADING_BLOCKS = 4096; - const int rdo_total_threads = (m_params.m_rdo_multithreading && (m_params.m_rdo_max_threads > 1) && (m_total_blocks >= MIN_RDO_MULTITHREADING_BLOCKS)) ? m_params.m_rdo_max_threads : 1; - - if (m_params.m_status_output) - printf("rdo_total_threads: %u\n", rdo_total_threads); - - int blocks_remaining = m_total_blocks, cur_block_index = 0; - std::vector blocks_to_do(rdo_total_threads), first_block_index(rdo_total_threads); - for (int p = 0; p < rdo_total_threads; p++) - { - const int num_blocks = (p == (rdo_total_threads - 1)) ? blocks_remaining : (m_total_blocks / rdo_total_threads); - - blocks_to_do[p] = num_blocks; - first_block_index[p] = cur_block_index; - - cur_block_index += num_blocks; - blocks_remaining -= num_blocks; - } - - assert(!blocks_remaining && cur_block_index == (int)m_total_blocks); - - ert::reduce_entropy_params ert_p; - - ert_p.m_lambda = m_params.m_rdo_lambda; - ert_p.m_lookback_window_size = m_params.m_lookback_window_size; - ert_p.m_smooth_block_max_mse_scale = m_params.m_rdo_smooth_block_error_scale; - ert_p.m_max_smooth_block_std_dev = m_params.m_rdo_max_smooth_block_std_dev; - ert_p.m_debug_output = m_params.m_rdo_debug_output; - ert_p.m_try_two_matches = m_params.m_rdo_try_2_matches; - ert_p.m_allow_relative_movement = m_params.m_rdo_allow_relative_movement; - ert_p.m_skip_zero_mse_blocks = false; - - std::vector block_rgb_mse_scales(compute_block_mse_scales(m_source_image, m_blocks_x, m_blocks_y, m_total_blocks, m_params.m_rdo_debug_output)); - - std::vector block_pixels(m_total_blocks * 16); - - for (uint32_t by = 0; by < m_blocks_y; by++) - for (uint32_t bx = 0; bx < m_blocks_x; bx++) - m_source_image.get_block(bx, by, 4, 4, (color_quad_u8*)&block_pixels[(bx + by * m_blocks_x) * 16]); - - unpacker_funcs block_unpackers; - block_unpackers.m_allow_3color_mode = m_params.m_use_bc1_3color_mode; - block_unpackers.m_use_bc1_3color_mode_for_black = m_params.m_use_bc1_3color_mode_for_black; - block_unpackers.m_mode = m_params.m_bc1_mode; - - if (m_params.m_dxgi_format == DXGI_FORMAT_BC7_UNORM) - { - ert_p.m_lookback_window_size = std::max(16U, m_params.m_lookback_window_size); - - // BC7 RDO - const uint32_t NUM_COMPONENTS = 4; - - if (!m_params.m_custom_rdo_smooth_block_error_scale) - { - // Attempt to compute a decent conservative smooth block MSE max scaling factor. - // No single smooth block scale setting can work for all textures (unless it's ridiuclously large, killing efficiency). - ert_p.m_smooth_block_max_mse_scale = lerp(15.0f, 50.0f, std::min(1.0f, ert_p.m_lambda / 4.0f)); - - if (m_params.m_status_output) - printf("Using an automatically computed smooth block error scale of %f (use -zb# to override)\n", ert_p.m_smooth_block_max_mse_scale); - } - - for (uint32_t by = 0; by < m_blocks_y; by++) - for (uint32_t bx = 0; bx < m_blocks_x; bx++) - { - float& s = block_rgb_mse_scales[bx + by * m_blocks_x]; - if (s > 0.0f) - s = std::max(ert_p.m_smooth_block_max_mse_scale, s * std::min(ert_p.m_lambda, 3.0f)); - } - - if (m_params.m_status_output) - { - printf("\nERT parameters:\n"); - ert_p.print(); - printf("\n"); - } - - uint32_t total_modified = 0; - - clock_t rdo_start_t = clock(); - -#pragma omp parallel for - for (int p = 0; p < rdo_total_threads; p++) - { - const int first_block_to_encode = first_block_index[p]; - const int num_blocks_to_encode = blocks_to_do[p]; - if (!num_blocks_to_encode) - continue; - - uint32_t total_modified_local = 0; - - std::vector local_block_rgb_mse_scales(num_blocks_to_encode); - for (int i = 0; i < num_blocks_to_encode; i++) - local_block_rgb_mse_scales[i] = block_rgb_mse_scales[first_block_to_encode + i]; - - ert::reduce_entropy(&m_packed_image16[first_block_to_encode], num_blocks_to_encode, - 16, 16, 4, 4, NUM_COMPONENTS, - (ert::color_rgba*)&block_pixels[16 * first_block_to_encode], ert_p, total_modified_local, - unpacker_funcs::unpack_bc7_block, &block_unpackers, - m_params.m_rdo_ultrasmooth_block_handling ? &local_block_rgb_mse_scales : nullptr); - -#pragma omp critical - { - total_modified += total_modified_local; - } - } // p - - clock_t rdo_end_t = clock(); - - if (m_params.m_status_output) - { - printf("Total RDO time: %f secs\n", (double)(rdo_end_t - rdo_start_t) / CLOCKS_PER_SEC); - - printf("Total blocks modified: %u %3.2f%%\n", total_modified, total_modified * 100.0f / m_total_blocks); - - uint32_t bc7_mode_hist[8]; - memset(bc7_mode_hist, 0, sizeof(bc7_mode_hist)); - - for (int by = 0; by < (int)m_blocks_y; by++) - { - for (uint32_t bx = 0; bx < m_blocks_x; bx++) - { - block16* pBlock = &m_packed_image16[bx + by * m_blocks_x]; - - const uint32_t mode_byte = ((uint8_t*)pBlock)[0]; - - uint32_t m; - for (m = 0; m <= 7; m++) - { - if (mode_byte & (1 << m)) - { - bc7_mode_hist[m]++; - break; - } - } - assert(m != 8); - } - } - - printf("BC7 mode histogram:\n"); - for (uint32_t i = 0; i < 8; i++) - printf("%u: %u\n", i, bc7_mode_hist[i]); - } - } - else if (m_params.m_dxgi_format == DXGI_FORMAT_BC5_UNORM) - { - // BC5 RDO - One BC4 block for R followed by one BC4 block for G - - ert_p.m_lookback_window_size = std::max(16U, m_params.m_lookback_window_size); - - std::vector block_pixels_r(m_total_blocks * 16), block_pixels_g(m_total_blocks * 16); - - for (uint32_t by = 0; by < m_blocks_y; by++) - { - for (uint32_t bx = 0; bx < m_blocks_x; bx++) - { - color_quad_u8 orig_block[16]; - m_source_image.get_block(bx, by, 4, 4, orig_block); - - color_quad_u8* pDst_block_r = (color_quad_u8*)&block_pixels_r[(bx + by * m_blocks_x) * 16]; - color_quad_u8* pDst_block_g = (color_quad_u8*)&block_pixels_g[(bx + by * m_blocks_x) * 16]; - - for (uint32_t i = 0; i < 16; i++) - { - pDst_block_r[i].set(orig_block[i].r, 0, 0, 0); - pDst_block_g[i].set(orig_block[i].g, 0, 0, 0); - } - } - } - - const uint32_t NUM_COMPONENTS = 1; - - ert_p.m_color_weights[1] = 0; - ert_p.m_color_weights[2] = 0; - ert_p.m_color_weights[3] = 0; - - if (!m_params.m_custom_rdo_smooth_block_error_scale) - { - // Attempt to compute a decent conservative smooth block MSE max scaling factor. - // No single smooth block scale setting can work for all textures (unless it's ridiuclously large, killing efficiency). - ert_p.m_smooth_block_max_mse_scale = lerp(10.0f, 30.0f, std::min(1.0f, ert_p.m_lambda / 4.0f)); - - if (m_params.m_status_output) - printf("Using an automatically computed smooth block error scale of %f (use -zb# to override)\n", ert_p.m_smooth_block_max_mse_scale); - } - - if (m_params.m_status_output) - { - printf("\nERT parameters:\n"); - ert_p.print(); - printf("\n"); - } - - uint32_t total_modified_r = 0, total_modified_g = 0; - - clock_t rdo_start_t = clock(); - -#pragma omp parallel for - for (int p = 0; p < rdo_total_threads; p++) - { - const int first_block_to_encode = first_block_index[p]; - const int num_blocks_to_encode = blocks_to_do[p]; - if (!num_blocks_to_encode) - continue; - - uint32_t total_modified_local_r = 0, total_modified_local_g = 0; - - ert::reduce_entropy(&m_packed_image16[first_block_to_encode], num_blocks_to_encode, - 2 * sizeof(rgbcx::bc4_block), sizeof(rgbcx::bc4_block), 4, 4, NUM_COMPONENTS, - (ert::color_rgba*)&block_pixels_r[16 * first_block_to_encode], ert_p, total_modified_local_r, - unpacker_funcs::unpack_bc4_block, &block_unpackers); - - ert::reduce_entropy((uint8_t*)&m_packed_image16[first_block_to_encode] + sizeof(rgbcx::bc4_block), num_blocks_to_encode, - 2 * sizeof(rgbcx::bc4_block), sizeof(rgbcx::bc4_block), 4, 4, NUM_COMPONENTS, - (ert::color_rgba*)&block_pixels_g[16 * first_block_to_encode], ert_p, total_modified_local_g, - unpacker_funcs::unpack_bc4_block, &block_unpackers); - -#pragma omp critical - { - total_modified_r += total_modified_local_r; - total_modified_g += total_modified_local_g; - } - } // p - - clock_t rdo_end_t = clock(); - - if (m_params.m_status_output) - { - printf("Total RDO time: %f secs\n", (double)(rdo_end_t - rdo_start_t) / CLOCKS_PER_SEC); - - printf("Total blocks modified R: %u %3.2f%%\n", total_modified_r, total_modified_r * 100.0f / m_total_blocks); - printf("Total blocks modified G: %u %3.2f%%\n", total_modified_g, total_modified_g * 100.0f / m_total_blocks); - } - } - else if (m_params.m_dxgi_format == DXGI_FORMAT_BC4_UNORM) - { - // BC4 RDO - One BC4 block for R - - const uint32_t NUM_COMPONENTS = 1; - - ert_p.m_color_weights[1] = 0; - ert_p.m_color_weights[2] = 0; - ert_p.m_color_weights[3] = 0; - - if (!m_params.m_custom_rdo_smooth_block_error_scale) - { - // Attempt to compute a decent conservative smooth block MSE max scaling factor. - // No single smooth block scale setting can work for all textures (unless it's ridiuclously large, killing efficiency). - ert_p.m_smooth_block_max_mse_scale = lerp(10.0f, 30.0f, std::min(1.0f, ert_p.m_lambda / 4.0f)); - - if (m_params.m_status_output) - printf("Using an automatically computed smooth block error scale of %f (use -zb# to override)\n", ert_p.m_smooth_block_max_mse_scale); - } - - if (m_params.m_status_output) - { - printf("\nERT parameters:\n"); - ert_p.print(); - printf("\n"); - } - - uint32_t total_modified = 0; - - clock_t rdo_start_t = clock(); - -#pragma omp parallel for - for (int p = 0; p < rdo_total_threads; p++) - { - const int first_block_to_encode = first_block_index[p]; - const int num_blocks_to_encode = blocks_to_do[p]; - if (!num_blocks_to_encode) - continue; - - uint32_t total_modified_local = 0; - - ert::reduce_entropy(&m_packed_image8[first_block_to_encode], num_blocks_to_encode, - sizeof(rgbcx::bc4_block), sizeof(rgbcx::bc4_block), 4, 4, NUM_COMPONENTS, - (ert::color_rgba*)&block_pixels[16 * first_block_to_encode], ert_p, total_modified_local, - unpacker_funcs::unpack_bc4_block, &block_unpackers); - -#pragma omp critical - { - total_modified += total_modified_local; - } - } // p - - clock_t rdo_end_t = clock(); - - if (m_params.m_status_output) - { - printf("Total RDO time: %f secs\n", (double)(rdo_end_t - rdo_start_t) / CLOCKS_PER_SEC); - - printf("Total blocks modified: %u %3.2f%%\n", total_modified, total_modified * 100.0f / m_total_blocks); - } - } - else if (m_params.m_dxgi_format == DXGI_FORMAT_BC1_UNORM) - { - // BC1 RDO - One BC1 block - const uint32_t NUM_COMPONENTS = 3; - - ert_p.m_color_weights[3] = 0; - - if (!m_params.m_custom_rdo_smooth_block_error_scale) - { - // This is just a hack - no single setting can work for all textures. - ert_p.m_smooth_block_max_mse_scale = lerp(15.0f, 50.0f, std::min(1.0f, ert_p.m_lambda / 8.0f)); - - if (m_params.m_status_output) - printf("Using an automatically computed smooth block error scale of %f (use -zb# to override)\n", ert_p.m_smooth_block_max_mse_scale); - } - - for (uint32_t by = 0; by < m_blocks_y; by++) - for (uint32_t bx = 0; bx < m_blocks_x; bx++) - { - float& s = block_rgb_mse_scales[bx + by * m_blocks_x]; - if (s > 0.0f) - s = std::max(ert_p.m_smooth_block_max_mse_scale, s * std::min(ert_p.m_lambda, 3.0f)); - } - - printf("\nERT parameters:\n"); - ert_p.print(); - printf("\n"); - - uint32_t total_modified = 0; - - clock_t rdo_start_t = clock(); - -#pragma omp parallel for - for (int p = 0; p < rdo_total_threads; p++) - { - const int first_block_to_encode = first_block_index[p]; - const int num_blocks_to_encode = blocks_to_do[p]; - if (!num_blocks_to_encode) - continue; - - uint32_t total_modified_local = 0; - - std::vector local_block_rgb_mse_scales(num_blocks_to_encode); - for (int i = 0; i < num_blocks_to_encode; i++) - local_block_rgb_mse_scales[i] = block_rgb_mse_scales[first_block_to_encode + i]; - - ert::reduce_entropy(&m_packed_image8[first_block_to_encode], num_blocks_to_encode, - sizeof(rgbcx::bc1_block), sizeof(rgbcx::bc1_block), 4, 4, NUM_COMPONENTS, - (ert::color_rgba*)&block_pixels[16 * first_block_to_encode], ert_p, total_modified_local, - unpacker_funcs::unpack_bc1_block, &block_unpackers, - m_params.m_rdo_ultrasmooth_block_handling ? &local_block_rgb_mse_scales : nullptr); - -#pragma omp critical - { - total_modified += total_modified_local; - } - } // p - - clock_t rdo_end_t = clock(); - - if (m_params.m_status_output) - { - printf("Total RDO time: %f secs\n", (double)(rdo_end_t - rdo_start_t) / CLOCKS_PER_SEC); - - printf("Total blocks modified: %u %3.2f%%\n", - total_modified, total_modified * 100.0f / m_total_blocks); - } - } - else if (m_params.m_dxgi_format == DXGI_FORMAT_BC3_UNORM) - { - // BC3 RDO - One BC4 block followed by one BC1 block - - ert_p.m_lookback_window_size = std::max(16U, m_params.m_lookback_window_size); - - std::vector block_pixels_a(m_total_blocks * 16); - - for (uint32_t by = 0; by < m_blocks_y; by++) - { - for (uint32_t bx = 0; bx < m_blocks_x; bx++) - { - color_quad_u8 orig_block[16]; - m_source_image.get_block(bx, by, 4, 4, orig_block); - - color_quad_u8* pDst_block_a = (color_quad_u8*)&block_pixels_a[(bx + by * m_blocks_x) * 16]; - for (uint32_t i = 0; i < 16; i++) - pDst_block_a[i].set(orig_block[i].a, 0, 0, 0); - } - } - - ert_p.m_color_weights[3] = 0; - - ert::reduce_entropy_params ert_alpha_p(ert_p); - ert_alpha_p.m_color_weights[1] = 0; - ert_alpha_p.m_color_weights[2] = 0; - ert_alpha_p.m_color_weights[3] = 0; - - if (!m_params.m_custom_rdo_smooth_block_error_scale) - { - // This is just a hack - no single setting can work for all textures. - ert_p.m_smooth_block_max_mse_scale = lerp(15.0f, 50.0f, std::min(1.0f, ert_p.m_lambda / 8.0f)); - - if (m_params.m_status_output) - printf("Using an automatically computed smooth block error scale of %f (use -zb# to override) for RGB\n", ert_p.m_smooth_block_max_mse_scale); - - ert_alpha_p.m_smooth_block_max_mse_scale = lerp(10.0f, 30.0f, std::min(1.0f, ert_alpha_p.m_lambda / 4.0f)); - - if (m_params.m_status_output) - printf("Using an automatically computed smooth block error scale of %f for Alpha\n", ert_alpha_p.m_smooth_block_max_mse_scale); - } - - for (uint32_t by = 0; by < m_blocks_y; by++) - for (uint32_t bx = 0; bx < m_blocks_x; bx++) - { - float& s = block_rgb_mse_scales[bx + by * m_blocks_x]; - if (s > 0.0f) - s = std::max(ert_p.m_smooth_block_max_mse_scale, s * std::min(ert_p.m_lambda, 3.0f)); - } - - if (m_params.m_status_output) - { - printf("\nERT RGB parameters:\n"); - ert_p.print(); - - printf("\nERT Alpha parameters:\n"); - ert_alpha_p.print(); - printf("\n"); - } - - uint32_t total_modified_rgb = 0, total_modified_alpha = 0; - - block_unpackers.m_allow_3color_mode = false; - block_unpackers.m_use_bc1_3color_mode_for_black = false; - - clock_t rdo_start_t = clock(); - -#pragma omp parallel for - for (int p = 0; p < rdo_total_threads; p++) - { - const int first_block_to_encode = first_block_index[p]; - const int num_blocks_to_encode = blocks_to_do[p]; - if (!num_blocks_to_encode) - continue; - - uint32_t total_modified_local_rgb = 0, total_modified_local_alpha = 0; - - ert::reduce_entropy((uint8_t*)&m_packed_image16[first_block_to_encode], num_blocks_to_encode, - sizeof(rgbcx::bc1_block) * 2, sizeof(rgbcx::bc4_block), 4, 4, 1, - (ert::color_rgba*)&block_pixels_a[16 * first_block_to_encode], ert_alpha_p, total_modified_local_alpha, - unpacker_funcs::unpack_bc4_block, &block_unpackers); - - std::vector local_block_rgb_mse_scales(num_blocks_to_encode); - for (int i = 0; i < num_blocks_to_encode; i++) - local_block_rgb_mse_scales[i] = block_rgb_mse_scales[first_block_to_encode + i]; - - ert::reduce_entropy((uint8_t*)&m_packed_image16[first_block_to_encode] + sizeof(rgbcx::bc1_block), num_blocks_to_encode, - sizeof(rgbcx::bc1_block) * 2, sizeof(rgbcx::bc1_block), 4, 4, 3, - (ert::color_rgba*)&block_pixels[16 * first_block_to_encode], ert_p, total_modified_local_rgb, - unpacker_funcs::unpack_bc1_block, &block_unpackers, - m_params.m_rdo_ultrasmooth_block_handling ? &local_block_rgb_mse_scales : nullptr); - -#pragma omp critical - { - total_modified_rgb += total_modified_local_rgb; - total_modified_alpha += total_modified_local_alpha; - } - } // p - - clock_t rdo_end_t = clock(); - - if (m_params.m_status_output) - { - printf("Total RDO time: %f secs\n", (double)(rdo_end_t - rdo_start_t) / CLOCKS_PER_SEC); - - printf("Total RGB blocks modified: %u %3.2f%%\n", total_modified_rgb, total_modified_rgb * 100.0f / m_total_blocks); - printf("Total Alpha blocks modified: %u %3.2f%%\n", total_modified_alpha, total_modified_alpha * 100.0f / m_total_blocks); - } - } - - return true; - } - - bool rdo_bc_encoder::unpack_blocks(image_u8& unpacked_image) const - { - unpacked_image.init(get_blocks_x() * 4, get_blocks_y() * 4); - - bool bc1_punchthrough_flag = false; - bool used_bc1_transparent_texels_for_black = false; - - bool unpack_failed = false; - -#pragma omp parallel for - for (int by = 0; by < (int)get_blocks_y(); by++) - { - for (uint32_t bx = 0; bx < get_blocks_x(); bx++) - { - const void* pBlock = (const uint8_t*)get_blocks() + (bx + by * get_blocks_x()) * get_bytes_per_block(); - - color_quad_u8 unpacked_pixels[16]; - for (uint32_t i = 0; i < 16; i++) - unpacked_pixels[i].set(0, 0, 0, 255); - - switch (m_params.m_dxgi_format) - { - case DXGI_FORMAT_BC1_UNORM: - { - const bool used_punchthrough = rgbcx::unpack_bc1(pBlock, unpacked_pixels, true, m_params.m_bc1_mode); - - if (used_punchthrough) - { - bc1_punchthrough_flag = true; - - const rgbcx::bc1_block* pBC1_block = (const rgbcx::bc1_block*)pBlock; - - for (uint32_t y = 0; y < 4; y++) - for (uint32_t x = 0; x < 4; x++) - if (pBC1_block->get_selector(x, y) == 3) - used_bc1_transparent_texels_for_black = true; - } - - break; - } - case DXGI_FORMAT_BC3_UNORM: - { - if (!rgbcx::unpack_bc3(pBlock, unpacked_pixels, m_params.m_bc1_mode)) - bc1_punchthrough_flag = true; - break; - } - case DXGI_FORMAT_BC4_UNORM: - { - rgbcx::unpack_bc4(pBlock, &unpacked_pixels[0][0], 4); - -#if DECODE_BC4_TO_GRAYSCALE - for (uint32_t i = 0; i < 16; i++) - { - unpacked_pixels[i][1] = unpacked_pixels[i][0]; - unpacked_pixels[i][2] = unpacked_pixels[i][0]; - } -#endif - break; - } - case DXGI_FORMAT_BC5_UNORM: - { - rgbcx::unpack_bc5(pBlock, &unpacked_pixels[0][0], 0, 1, 4); - break; - } - case DXGI_FORMAT_BC7_UNORM: - { - if (!bc7decomp::unpack_bc7((const uint8_t*)pBlock, (bc7decomp::color_rgba*)unpacked_pixels)) - { - fprintf(stderr, "bc7decomp::unpack_bc7() failed!\n"); - unpack_failed = true; - } - - // Now unpack the block using the non-SSE reference decoder, to make sure we get the same exact unpacked bits. - color_quad_u8 unpacked_pixels_ref[16]; - if (!bc7decomp_ref::unpack_bc7((const uint8_t*)pBlock, (bc7decomp::color_rgba*)unpacked_pixels_ref)) - { - fprintf(stderr, "bc7decomp::unpack_bc7_ref() failed!\n"); - unpack_failed = true; - } - - if (memcmp(unpacked_pixels, unpacked_pixels_ref, sizeof(unpacked_pixels)) != 0) - { - fprintf(stderr, "BC7 unpack verification failed!\n"); - unpack_failed = true; - } - - break; - } - default: - assert(0); - break; - } - - unpacked_image.set_block(bx, by, 4, 4, unpacked_pixels); - } // bx - } // by - - if (unpack_failed) - return false; - - // Sanity check the BC1/BC3 output - if (m_params.m_dxgi_format == DXGI_FORMAT_BC3_UNORM) - { - if (bc1_punchthrough_flag) - fprintf(stderr, "WARNING: BC3 mode selected, but rgbcx::unpack_bc3() returned one or more blocks using 3-color mode!\n"); - } - else if (m_params.m_dxgi_format == DXGI_FORMAT_BC1_UNORM) - { - if ((bc1_punchthrough_flag) && (!m_params.m_use_bc1_3color_mode)) - fprintf(stderr, "WARNING: BC1 output used 3-color mode, when this was disabled!\n"); - - if ((used_bc1_transparent_texels_for_black) && (!used_bc1_transparent_texels_for_black)) - fprintf(stderr, "WARNING: BC1 output used the transparent selector for black, when this was disabled!\n"); - } - - if (m_params.m_status_output) - { - if ((m_params.m_dxgi_format == DXGI_FORMAT_BC1_UNORM) || (m_params.m_dxgi_format == DXGI_FORMAT_BC3_UNORM)) - printf("Output used 3-color mode: %u, output used transparent texels for black: %u\n", bc1_punchthrough_flag, used_bc1_transparent_texels_for_black); - } - - return true; - } - -} // namespace rdo_bc diff --git a/external/bc7enc_rdo/rdo_bc_encoder.h b/external/bc7enc_rdo/rdo_bc_encoder.h deleted file mode 100644 index 048be052a4..0000000000 --- a/external/bc7enc_rdo/rdo_bc_encoder.h +++ /dev/null @@ -1,250 +0,0 @@ -// rdo_bc_encoder.h -#pragma once - -#ifndef SUPPORT_BC7E -#define SUPPORT_BC7E 0 -#endif - -#include "utils.h" -#include "ert.h" - -#include "bc7decomp.h" -#include "rgbcx.h" - -#include "bc7enc.h" - -#if SUPPORT_BC7E -#include "bc7e_ispc.h" -#endif - -#include "dds_defs.h" - -namespace rdo_bc -{ - - struct rdo_bc_params - { - rdo_bc_params() - { - clear(); - } - - void clear() - { - m_bc7_uber_level = 6; // BC7ENC_MAX_UBER_LEVEL; - m_bc7enc_max_partitions_to_scan = BC7ENC_MAX_PARTITIONS; - m_perceptual = false; - m_y_flip = false; - m_bc45_channel0 = 0; - m_bc45_channel1 = 1; - - m_bc1_mode = rgbcx::bc1_approx_mode::cBC1Ideal; - m_use_bc1_3color_mode = true; - - // We're just turning this on by default now, like NVDXT.EXE used to do back in the old original Xbox days. - m_use_bc1_3color_mode_for_black = true; // false; - - m_bc1_quality_level = rgbcx::MAX_LEVEL; - - m_dxgi_format = DXGI_FORMAT_BC7_UNORM; - - m_rdo_lambda = 0.0f; - m_rdo_debug_output = false; - m_rdo_smooth_block_error_scale = 15.0f; - m_custom_rdo_smooth_block_error_scale = false; - m_lookback_window_size = 128; - m_custom_lookback_window_size = false; - m_bc7enc_rdo_bc7_quant_mode6_endpoints = true; - m_bc7enc_rdo_bc7_weight_modes = true; - m_bc7enc_rdo_bc7_weight_low_frequency_partitions = true; - m_bc7enc_rdo_bc7_pbit1_weighting = true; - m_rdo_max_smooth_block_std_dev = 18.0f; - m_rdo_allow_relative_movement = false; - m_rdo_try_2_matches = true; - m_rdo_ultrasmooth_block_handling = true; - - m_use_hq_bc345 = true; - m_bc345_search_rad = 5; - m_bc345_mode_mask = rgbcx::BC4_USE_ALL_MODES; - - m_bc7enc_mode6_only = false; - m_rdo_multithreading = true; - - m_bc7enc_reduce_entropy = false; - - m_use_bc7e = false; - -#if SUPPORT_BC7E - // By default, if they've compiled in BC7E.ispc, then use that. In a rate distortion sense it's better overall. - // https://richg42.blogspot.com/2021/02/average-rate-distortion-curves-for.html - m_use_bc7e = true; -#endif - - m_status_output = false; - - m_rdo_max_threads = 128; - } - - int m_bc7_uber_level; - int m_bc7enc_max_partitions_to_scan; - bool m_perceptual; - bool m_y_flip; - uint32_t m_bc45_channel0; - uint32_t m_bc45_channel1; - - rgbcx::bc1_approx_mode m_bc1_mode; - bool m_use_bc1_3color_mode; - - bool m_use_bc1_3color_mode_for_black; - - int m_bc1_quality_level; - - DXGI_FORMAT m_dxgi_format; - - float m_rdo_lambda; - bool m_rdo_debug_output; - float m_rdo_smooth_block_error_scale; - bool m_custom_rdo_smooth_block_error_scale; - uint32_t m_lookback_window_size; - bool m_custom_lookback_window_size; - bool m_bc7enc_rdo_bc7_quant_mode6_endpoints; - bool m_bc7enc_rdo_bc7_weight_modes; - bool m_bc7enc_rdo_bc7_weight_low_frequency_partitions; - bool m_bc7enc_rdo_bc7_pbit1_weighting; - float m_rdo_max_smooth_block_std_dev; - bool m_rdo_allow_relative_movement; - bool m_rdo_try_2_matches; - bool m_rdo_ultrasmooth_block_handling; - - bool m_use_hq_bc345; - int m_bc345_search_rad; - uint32_t m_bc345_mode_mask; - - bool m_bc7enc_mode6_only; - bool m_rdo_multithreading; - - bool m_bc7enc_reduce_entropy; - - bool m_use_bc7e; - bool m_status_output; - - uint32_t m_rdo_max_threads; - }; - - class rdo_bc_encoder - { - public: - rdo_bc_encoder(); - - void clear(); - - bool init(const utils::image_u8& src_image, rdo_bc_params& params); - bool encode(); - - const rdo_bc_params &get_params() const { return m_params; } - - const utils::image_u8* get_orig_source_image() const { return m_pOrig_source_image; } - const utils::image_u8& get_source_image() const { return m_source_image; } - - const void* get_prerdo_blocks() const { return m_prerdo_packed_image8.size() ? (void*)m_prerdo_packed_image8.data() : (void*)m_prerdo_packed_image16.data(); } - const void* get_blocks() const { return m_packed_image8.size() ? (void*)m_packed_image8.data() : (void*)m_packed_image16.data(); } - - bool unpack_blocks(utils::image_u8& unpacked_image) const; - - DXGI_FORMAT get_pixel_format() const { return m_params.m_dxgi_format; } - - uint32_t get_orig_width() const { return m_orig_width; } - uint32_t get_orig_height() const { return m_orig_height; } - uint32_t get_blocks_x() const { return m_blocks_x; } - uint32_t get_blocks_y() const { return m_blocks_y; } - uint32_t get_total_blocks() const { return m_total_blocks; } - uint32_t get_total_blocks_size_in_bytes() const { return m_total_blocks * m_bytes_per_block; } - uint32_t get_bytes_per_block() const { return m_bytes_per_block; } - uint32_t get_pixel_format_bpp() const { return m_pixel_format_bpp; } - uint32_t get_total_texels() const { return m_total_texels; } - bool get_has_alpha() const { return m_has_alpha; } - - private: - const utils::image_u8* m_pOrig_source_image; - utils::image_u8 m_source_image; - rdo_bc_params m_params; - - uint32_t m_orig_width, m_orig_height; - uint32_t m_blocks_x, m_blocks_y, m_total_blocks, m_bytes_per_block, m_pixel_format_bpp; - uint32_t m_total_texels; - bool m_has_alpha; - - utils::block8_vec m_packed_image8; - utils::block16_vec m_packed_image16; - - utils::block8_vec m_prerdo_packed_image8; - utils::block16_vec m_prerdo_packed_image16; - - bc7enc_compress_block_params m_bc7enc_pack_params; -#if SUPPORT_BC7E - ispc::bc7e_compress_block_params m_bc7e_pack_params; -#endif - - void init_encoders(); - bool init_source_image(); - bool init_encoder_params(); - bool encode_texture(); - - struct unpacker_funcs - { - rgbcx::bc1_approx_mode m_mode; - bool m_allow_3color_mode; - bool m_use_bc1_3color_mode_for_black; - - static bool unpack_bc1_block(const void* pBlock, ert::color_rgba* pPixels, uint32_t block_index, void* pUser_data) - { - (void)block_index; - const unpacker_funcs* pState = (const unpacker_funcs*)pUser_data; - - bool used_3color_mode = rgbcx::unpack_bc1(pBlock, pPixels, true, pState->m_mode); - - if (used_3color_mode) - { - if (!pState->m_allow_3color_mode) - return false; - - if (!pState->m_use_bc1_3color_mode_for_black) - { - rgbcx::bc1_block* pBC1_block = (rgbcx::bc1_block*)pBlock; - - for (uint32_t y = 0; y < 4; y++) - { - for (uint32_t x = 0; x < 4; x++) - { - if (pBC1_block->get_selector(x, y) == 3) - return false; - } // x - } // y - } - } - - return true; - } - - // TODO: Enforce 6/8 color constraints - static bool unpack_bc4_block(const void* pBlock, ert::color_rgba* pPixels, uint32_t block_index, void* pUser_data) - { - (void)block_index; - (void)pUser_data; - memset(pPixels, 0, sizeof(ert::color_rgba) * 16); - rgbcx::unpack_bc4(pBlock, (uint8_t*)pPixels, 4); - return true; - } - - static bool unpack_bc7_block(const void* pBlock, ert::color_rgba* pPixels, uint32_t block_index, void* pUser_data) - { - (void)block_index; - (void)pUser_data; - return bc7decomp::unpack_bc7(pBlock, (bc7decomp::color_rgba*)pPixels); - } - }; - - bool postprocess_rdo(); - }; - -} // namespace rdo_bc diff --git a/external/bc7enc_rdo/rgbcx_table4_small.h b/external/bc7enc_rdo/rgbcx_table4_small.h deleted file mode 100644 index 30ccc709aa..0000000000 --- a/external/bc7enc_rdo/rgbcx_table4_small.h +++ /dev/null @@ -1,969 +0,0 @@ -{ 202, 120, 13, 318, 15, 23, 403, 450, 5, 51, 260, 128, 77, 21, 33, 494, 515, 523, 4, 141, 269, 1, 2, 700, 137, 49, 48, 102, 7, 64, 753, 82 }, -{ 13,141,23,217,115,51,77,2,64,21,0,4,5,317,137,269,202,33,318,7,291,352,9,10,3,180,32,6,365,102,341,349 }, -{ 29,58,262,1,52,74,6,171,5,287,151,334,27,500,75,26,331,223,53,635,220,19,50,45,46,17,14,396,163,409,324,70 }, -{ 40,51,33,453,14,23,62,56,12,196,730,475,153,99,403,775,117,130,585,34,4,17,162,11,139,57,102,38,108,47,123,440 }, -{ 33,23,51,13,102,64,202,128,12,40,15,196,153,10,1,2,77,99,141,0,515,5,117,3,120,403,700,165,22,14,269,453 }, -{ 13,23,51,4,77,141,202,33,115,64,32,128,0,11,177,40,15,102,2,217,7,137,269,21,90,59,515,1,180,403,22,6 }, -{ 26,235,19,47,648,624,78,145,27,112,122,64,444,6,630,453,25,42,65,130,711,85,390,113,416,108,665,29,730,138,644,95 }, -{ 64,141,352,751,217,247,237,437,177,269,86,954,947,875,32,318,95,77,304,92,597,180,232,291,128,864,349,588,372,202,312,1 }, -{ 642,898,180,638,901,341,82,197,10,951,15,515,165,762,700,253,811,753,752,365,143,479,244,569,8,110,351,873,55,31,499,116 }, -{ 221,23,51,125,438,254,13,21,39,49,308,656,0,115,530,159,158,401,30,166,912,386,165,688,518,9,105,627,424,22,421,33 }, -{ 143,31,1,44,197,8,180,125,116,55,13,498,23,341,638,242,93,15,2,141,0,901,752,115,36,206,165,479,338,365,515,762 }, -{ 12,23,51,13,14,15,37,99,515,38,700,117,2,196,134,153,753,64,54,33,128,120,21,0,328,5,139,82,453,719,457,1 }, -{ 13,15,23,515,961,700,457,753,51,115,4,165,197,2,38,569,1,474,0,37,99,719,5,12,629,14,11,3,33,77,64,10 }, -{ 15,515,700,753,1,0,2,4,3,23,134,12,961,5,10,197,11,33,82,120,457,51,165,7,6,341,217,21,77,9,40,180 }, -{ 13,51,23,457,719,961,730,401,165,453,0,117,386,15,134,1,758,153,12,54,515,99,11,2,700,5,753,4,308,33,6,899 }, -{ 134,898,82,117,13,33,77,102,23,260,341,351,120,901,197,153,961,111,196,110,180,457,854,10,450,8,165,40,4,115,0,365 }, -{ 60,18,126,167,35,16,191,71,24,92,121,271,68,107,212,146,118,150,199,7,21,1,9,575,727,5,566,48,0,132,108,273 }, -{ 62,136,129,123,128,41,162,17,249,211,214,789,618,710,38,678,248,507,57,64,152,269,119,3,177,183,597,106,4,179,216,90 }, -{ 403,523,51,475,494,453,817,899,202,23,450,13,421,120,102,730,33,128,4,1,805,5,7,153,757,260,318,196,77,457,326,65 }, -{ 4,59,3,62,12,33,56,193,27,21,102,17,40,77,76,84,32,0,6,123,119,177,128,11,18,611,605,25,13,51,73,210 }, -{ 43,20,319,422,414,945,0,7,819,61,5,376,325,173,804,904,470,693,97,707,14,49,22,104,147,107,95,32,426,1,330,577 }, -{ 13,23,51,2,0,115,4,141,217,33,10,77,1,15,64,180,3,515,7,6,22,102,11,5,40,9,165,700,202,197,317,341 }, -{ 28,49,0,105,1,24,65,159,35,55,95,239,16,2,109,7,9,14,170,320,347,168,424,158,10,301,124,5,67,21,64,36 }, -{ 15,515,700,753,0,1,13,2,117,4,12,10,5,165,457,3,9,134,11,7,6,51,77,64,961,82,33,197,14,341,120,141 }, -{ 7,71,14,149,97,18,60,16,150,92,398,189,140,124,24,273,35,2,69,302,154,68,0,336,517,43,66,28,118,251,230,1 }, -{ 4,102,33,77,40,59,11,624,210,12,128,342,5,503,91,139,64,32,25,494,202,678,416,0,403,275,21,450,196,318,523,177 }, -{ 25,19,42,6,122,813,256,235,85,26,436,53,297,573,680,390,445,63,27,416,80,233,65,73,389,283,45,605,194,17,250,343 }, -{ 402,102,202,128,33,300,403,23,12,77,40,21,342,117,483,99,25,494,6,4,63,32,84,569,139,757,475,318,19,26,196,134 }, -{ 158,9,0,109,39,49,65,22,35,168,55,24,68,124,159,16,185,344,333,154,254,272,175,289,1,577,95,28,105,810,30,169 }, -{ 197,180,115,237,498,165,2,5,287,546,400,3,61,34,509,13,297,80,341,52,45,186,58,881,23,873,468,176,64,17,311,250 }, -{ 120,968,373,260,704,110,450,202,137,318,77,95,269,326,217,717,661,652,851,349,93,1,518,98,827,291,21,177,82,33,848,719 }, -{ 44,116,144,268,434,489,367,384,98,127,918,93,948,31,206,940,855,0,203,137,9,22,617,141,332,105,393,492,959,282,299,131 }, -{ 13,77,23,33,51,0,64,141,102,4,2,115,1,6,202,15,10,128,269,7,177,180,3,40,22,11,515,217,117,318,700,137 }, -{ 15,515,700,753,4,11,141,40,165,23,64,180,13,202,32,3,51,125,5,197,21,128,0,93,77,1,120,82,269,117,110,59 }, -{ 176,231,585,62,34,14,412,161,56,236,527,57,17,3,51,202,4,23,369,283,128,13,472,440,84,361,136,457,381,130,719,53 }, -{ 9,0,180,217,237,101,141,352,88,100,230,64,175,317,115,498,68,39,30,1,702,83,213,36,365,208,752,13,252,321,952,546 }, -{ 28,9,22,1,49,0,109,39,83,95,86,30,13,105,128,55,141,168,158,67,31,159,208,12,96,5,185,2,160,64,137,23 }, -{ 72,4,38,12,51,89,477,11,57,76,401,308,23,474,99,148,413,179,59,13,431,152,54,569,17,3,205,629,197,421,405,15 }, -{ 457,13,23,961,15,51,515,700,165,12,753,629,11,1,719,117,0,3,2,37,569,197,40,328,33,5,153,134,99,64,38,196 }, -{ 254,100,310,9,30,1,39,625,166,265,190,0,272,557,131,731,31,98,578,688,404,93,101,88,49,21,127,264,44,36,252,478 }, -{ 51,23,12,13,15,128,99,120,10,202,515,153,64,82,700,33,165,2,5,117,403,1,141,0,3,196,37,453,753,197,260,93 }, -{ 38,99,542,139,453,117,196,23,457,13,328,111,37,134,961,11,12,51,40,775,587,401,474,54,153,477,41,629,33,475,14,277 }, -{ 6,85,25,233,343,91,26,63,138,29,19,65,283,4,81,235,42,122,605,64,648,256,174,370,74,389,718,59,45,194,445,416 }, -{ 49,5,97,20,197,21,18,193,0,64,408,729,173,350,43,422,165,7,14,104,61,32,509,713,523,102,120,95,125,397,35,232 }, -{ 144,116,268,434,384,489,367,206,93,855,940,44,98,332,617,127,959,911,137,282,203,31,22,219,141,9,131,276,417,0,1,120 }, -{ 17,106,64,62,32,255,136,292,476,162,129,241,123,141,41,237,720,214,209,352,519,211,186,148,752,247,507,90,21,77,197,119 }, -{ 2,29,52,50,5,58,14,6,27,1,366,357,45,53,17,19,171,151,26,181,133,38,218,764,287,583,61,113,3,487,600,281 }, -{ 130,59,196,412,381,730,711,236,77,210,202,402,453,99,401,108,361,803,291,283,153,4,57,51,128,183,14,719,503,117,23,11 }, -{ 13,23,51,141,77,4,33,64,115,0,217,10,180,202,2,102,11,9,15,165,40,21,128,352,22,7,197,3,317,515,269,1 }, -{ 23,13,202,51,120,15,21,5,141,1,128,269,137,515,64,102,125,48,98,33,260,523,318,93,700,165,450,77,2,12,403,82 }, -{ 1,2,14,46,29,67,38,52,5,171,58,24,103,69,96,70,83,181,54,75,163,223,16,45,112,309,155,0,186,35,18,108 }, -{ 15,515,700,753,13,0,1,2,153,5,23,10,117,3,9,7,134,165,12,6,341,33,4,14,77,457,115,21,719,180,217,82 }, -{ 197,165,509,13,391,180,308,115,23,546,5,498,2,29,3,401,901,61,34,80,14,457,250,569,237,873,38,297,45,15,468,386 }, -{ 19,73,27,250,200,714,444,472,26,53,34,17,813,322,283,390,128,297,78,123,432,14,436,136,106,690,57,122,389,80,503,3 }, -{ 3,17,21,45,62,32,38,12,155,14,2,328,5,99,401,536,828,13,227,488,106,51,719,119,540,76,165,221,115,629,209,41 }, -{ 115,341,873,197,365,13,901,180,569,752,317,1,10,498,143,634,261,0,509,15,943,237,44,31,116,601,165,127,282,23,141,64 }, -{ 453,51,23,403,33,421,475,102,15,153,196,515,13,700,117,523,12,40,753,21,4,134,0,494,670,899,22,801,730,10,11,401 }, -{ 23,13,51,33,12,117,153,134,453,196,15,99,515,40,14,700,128,102,11,753,77,64,403,202,0,401,475,37,65,2,3,38 }, -{ 2,7,5,14,70,1,29,61,52,45,6,112,66,16,21,32,592,46,38,135,87,58,186,315,290,128,113,0,64,48,227,23 }, -{ 33,23,102,51,128,13,64,202,141,1,77,10,153,40,196,117,2,3,0,5,15,269,403,12,137,134,318,165,120,6,453,99 }, -{ 16,92,7,20,43,35,126,71,60,14,107,18,68,97,0,121,279,149,24,246,191,48,118,575,55,140,362,783,230,150,375,566 }, -{ 13,23,4,33,77,64,51,102,141,128,32,10,0,202,40,115,59,22,90,11,177,21,291,6,7,318,180,117,137,2,95,165 }, -{ 507,162,129,41,4,211,62,38,123,59,57,248,183,130,99,11,3,361,202,17,402,556,266,305,803,210,128,184,152,136,313,117 }, -{ 643,123,193,650,802,18,25,389,718,256,65,289,84,91,619,511,415,90,235,63,57,510,324,216,862,102,6,183,108,397,217,736 }, -{ 13,23,15,1,515,51,0,2,700,5,753,165,141,115,12,3,4,180,21,197,457,7,6,10,120,9,33,202,77,32,8,11 }, -{ 23,51,13,453,64,403,12,21,5,202,128,475,165,141,523,95,125,115,3,1,4,730,120,32,2,494,180,719,457,197,450,401 }, -{ 204,74,135,66,6,174,192,7,138,172,85,353,348,580,280,97,95,500,29,64,426,32,87,889,65,81,25,2,52,43,568,673 }, -{ 35,0,68,69,24,9,1,16,65,103,149,133,18,114,28,50,83,2,189,7,46,14,101,336,175,124,251,55,71,218,38,238 }, -{ 16,101,0,118,9,18,24,68,35,154,71,124,60,212,191,520,55,806,694,167,28,39,364,375,1,346,252,65,604,302,22,21 }, -{ 0,9,16,35,1,24,68,18,65,21,103,67,13,149,28,189,71,23,101,238,114,7,335,133,486,141,22,212,48,50,30,118 }, -{ 13,202,23,77,33,51,128,5,21,141,115,32,102,64,4,0,318,269,10,15,291,2,494,177,11,217,3,515,22,137,6,700 }, -{ 16,92,60,35,7,18,24,68,150,149,14,71,0,375,97,126,118,107,230,191,246,273,140,55,175,653,9,575,2,28,566,517 }, -{ 76,90,21,179,316,148,205,32,464,288,184,257,245,1,89,2,460,57,152,45,38,358,645,5,12,449,350,48,37,17,4,14 }, -{ 19,27,26,813,80,297,17,495,436,53,73,200,4,378,250,59,106,25,45,128,361,42,113,469,122,390,77,40,736,6,11,136 }, -{ 6,26,235,138,19,145,112,70,331,262,25,42,52,624,27,453,122,47,500,78,648,85,29,2,630,632,409,113,50,226,108,75 }, -{ 7,16,14,24,92,35,18,2,46,9,60,140,0,87,50,5,54,13,12,38,171,23,126,21,58,64,1,70,128,71,220,163 }, -{ 90,205,257,184,32,179,460,5,245,45,2,288,769,524,57,21,152,229,17,1,497,4,292,59,619,452,432,76,476,11,266,14 }, -{ 15,515,700,753,4,5,11,141,13,1,33,3,0,128,202,23,180,21,2,64,269,32,117,134,120,40,102,318,153,17,137,352 }, -{ 47,130,711,108,453,412,730,196,390,283,78,27,51,183,381,236,128,200,719,14,153,472,503,34,59,250,3,4,57,803,123,432 }, -{ 12,277,51,474,111,153,23,99,13,37,961,94,629,542,569,431,79,139,38,134,117,453,33,188,196,40,115,15,11,157,401,515 }, -{ 17,495,469,106,26,378,80,27,161,483,19,742,527,436,383,862,73,136,53,814,297,6,119,84,62,56,25,3,209,611,4,128 }, -{ 81,681,636,91,0,750,370,104,718,138,18,693,173,784,29,397,348,74,192,673,174,65,6,207,64,280,306,52,671,32,355,319 }, -{ 15,515,700,753,33,77,4,102,115,117,40,13,1,153,134,11,5,217,23,196,2,21,3,317,32,365,0,341,291,59,12,51 }, -{ 0,9,28,35,68,1,65,67,101,39,69,175,16,238,13,22,96,124,18,24,251,30,55,12,23,2,50,141,114,5,154,103 }, -{ 23,33,77,13,117,40,11,102,64,4,51,403,153,453,10,0,196,134,128,65,12,291,86,99,95,59,15,141,202,180,137,719 }, -{ 214,90,289,6,874,64,25,65,235,42,751,249,256,312,194,85,746,875,174,32,525,288,519,835,247,348,233,544,217,524,437,352 }, -{ 1,22,2,0,36,67,28,5,49,95,12,50,168,83,105,55,7,9,14,194,103,23,114,21,584,46,10,13,38,69,208,159 }, -{ 269,141,13,202,33,180,318,77,291,137,102,352,128,23,349,51,31,217,372,317,125,197,44,21,11,5,901,1,18,0,4,494 }, -{ 435,144,274,88,203,418,30,1,190,410,96,778,100,530,521,326,466,795,686,166,960,321,382,264,367,822,131,31,692,9,213,93 }, -{ 76,72,90,21,37,179,12,205,32,428,148,38,308,405,4,413,57,184,749,245,316,221,54,645,288,1,152,155,464,257,2,14 }, -{ 77,33,64,102,13,141,23,2,40,1,51,10,0,115,6,180,202,128,4,3,177,269,15,7,22,165,291,14,217,318,137,11 }, -{ 397,81,4,32,65,788,693,804,681,11,249,21,91,64,690,494,3,0,422,56,348,725,194,123,23,59,523,319,61,510,95,90 }, -{ 60,126,16,7,92,121,314,246,35,107,150,132,14,146,24,18,199,298,232,71,359,140,672,97,392,649,5,423,95,21,22,388 }, -{ 15,515,141,217,115,700,13,23,120,317,753,180,33,260,110,137,341,51,1,365,4,77,64,202,0,40,36,352,197,269,10,21 }, -{ 111,134,117,474,23,13,961,12,569,431,37,15,51,115,515,700,277,99,753,38,197,405,457,4,72,94,629,45,11,89,54,148 }, -{ 23,13,51,5,1,15,2,21,12,202,141,0,515,165,120,32,4,64,700,3,115,197,269,125,753,7,9,128,6,180,453,403 }, -{ 13,141,4,23,5,2,115,217,202,51,180,137,269,352,77,1,317,3,21,318,0,15,9,64,10,197,11,341,33,515,752,7 }, -{ 165,125,197,13,391,21,23,558,48,380,97,120,298,33,14,426,66,115,32,386,900,180,6,98,357,237,326,509,51,278,221,457 }, -{ 120,82,15,260,515,1,351,77,450,700,13,21,141,23,753,202,217,93,110,33,51,854,5,128,326,102,137,180,817,48,269,352 }, -{ 23,13,15,51,515,700,961,753,0,457,1,2,4,115,10,453,569,5,33,165,11,719,14,40,64,197,3,21,474,629,38,401 }, -{ 264,166,39,30,9,100,435,254,93,921,190,363,1,625,411,382,897,656,203,478,404,812,438,110,473,88,18,691,156,141,274,272 }, -{ 9,0,252,100,166,39,101,265,364,68,88,329,520,18,419,676,118,167,404,604,16,1,21,30,212,158,553,49,382,274,48,13 }, -{ 15,515,700,753,4,11,141,5,3,13,202,1,180,21,2,165,269,23,40,64,0,318,12,32,128,51,77,117,523,197,120,457 }, -{ 24,1,2,69,35,16,67,18,14,50,0,46,68,9,38,7,133,71,83,149,28,108,189,218,65,114,238,29,75,54,5,96 }, -{ 90,289,214,64,874,13,77,712,66,751,4,23,51,192,32,0,202,194,312,177,33,65,234,104,875,288,59,5,835,416,102,95 }, -{ 0,9,49,127,98,31,301,28,371,159,1,395,512,737,158,761,916,623,16,44,242,39,170,18,293,105,24,272,101,22,23,385 }, -{ 17,62,136,214,123,129,32,292,119,209,710,106,141,162,128,64,45,4,77,249,11,618,211,3,207,130,519,183,38,177,21,269 }, -{ 5,107,581,356,279,32,441,362,493,660,13,298,0,534,49,147,21,22,132,121,97,423,7,590,259,683,14,786,126,508,60,246 }, -{ 51,13,15,730,453,23,515,719,386,457,12,700,403,475,899,1,6,523,753,421,99,401,165,33,2,19,361,5,0,670,120,27 }, -{ 49,28,9,159,272,22,254,131,158,327,95,105,0,39,35,168,347,286,374,55,65,627,424,912,68,578,1,24,239,175,688,169 }, -{ 15,515,700,33,753,4,77,141,341,317,1,10,13,180,102,22,40,117,115,365,5,901,23,197,134,11,217,351,64,82,21,137 }, -{ 134,15,13,515,23,700,12,753,51,474,37,961,197,10,457,569,4,0,99,2,115,38,165,153,94,3,139,11,1,82,33,5 }, -{ 7,2,20,58,5,14,128,66,6,29,32,43,21,52,16,38,631,61,74,97,46,135,113,25,202,192,13,0,884,45,112,87 }, -{ 77,13,33,202,23,128,102,4,141,342,117,0,269,318,134,22,11,21,32,153,403,291,49,64,137,51,40,15,494,5,196,98 }, -{ 2,1,14,6,46,38,29,65,5,36,67,0,103,7,22,86,133,50,108,208,52,83,24,323,283,69,28,18,10,25,23,75 }, -{ 15,515,700,753,1,5,4,2,3,13,0,11,180,341,12,33,10,197,134,365,77,23,21,901,6,117,165,7,37,32,17,102 }, -{ 203,268,206,93,417,940,31,8,120,137,44,499,959,473,202,692,728,559,0,260,10,326,141,564,817,127,341,1,450,22,110,23 }, -{ 15,82,515,120,700,0,10,753,33,8,64,165,110,31,260,93,13,197,23,22,40,4,351,44,77,9,11,153,102,51,1,196 }, -{ 60,0,16,7,14,43,20,71,28,10,2,22,154,18,13,24,92,1,51,576,35,615,805,925,68,126,124,149,97,64,23,55 }, -{ 19,6,26,80,5,84,27,17,25,2,504,129,45,240,56,123,4,119,618,1,76,106,64,51,14,3,128,65,32,710,0,42 }, -{ 15,515,700,753,13,4,77,23,33,51,0,5,8,10,11,31,44,1,82,22,202,64,110,102,93,21,291,40,141,180,9,49 }, -{ 195,98,271,223,132,167,146,407,1,360,121,834,393,591,212,199,293,259,522,107,354,147,156,191,807,590,48,18,125,16,765,541 }, -{ 128,202,77,210,402,318,33,102,6,40,403,29,342,269,196,757,99,139,2,111,42,4,494,117,275,300,13,12,678,0,177,122 }, -{ 13,33,23,40,51,102,4,117,77,64,134,0,128,153,202,196,453,11,15,12,1,22,403,141,59,14,10,475,515,65,700,95 }, -{ 7,16,14,24,18,2,28,0,92,71,1,22,6,35,60,20,168,10,154,118,5,302,124,69,97,109,703,158,420,12,149,66 }, -{ 15,1,515,23,0,13,700,2,51,753,180,5,120,165,197,21,115,4,33,9,141,7,12,6,3,457,386,202,260,523,8,31 }, -{ 60,107,121,132,146,126,199,279,150,92,16,649,441,35,955,7,21,0,423,5,18,195,598,298,493,356,32,653,22,362,953,10 }, -{ 31,44,98,276,284,299,116,935,9,201,0,131,39,127,144,662,1,137,371,492,567,489,93,254,49,268,22,28,30,293,434,737 }, -{ 13,15,23,515,700,0,1,51,753,4,2,10,77,202,5,115,3,165,197,457,9,12,11,961,33,120,22,141,180,7,6,40 }, -{ 123,162,184,257,17,183,229,130,129,3,84,136,99,152,556,383,57,497,12,205,4,62,56,452,80,266,128,14,40,119,27,106 }, -{ 196,33,117,40,153,23,134,13,51,102,453,0,15,475,12,14,515,2,22,700,4,21,753,64,401,670,730,1,9,11,10,99 }, -{ 224,219,187,131,258,385,442,871,836,31,98,908,44,574,127,944,137,839,116,36,613,1,254,39,926,160,829,96,93,371,860,827 }, -{ 121,195,156,132,146,360,590,407,786,522,883,591,259,929,626,941,150,687,5,55,296,379,467,178,586,465,279,21,1,13,60,354 }, -{ 2,1,14,29,6,5,46,52,38,19,114,75,26,65,108,96,25,50,36,70,103,309,17,236,218,74,12,86,0,3,10,112 }, -{ 15,515,82,700,120,753,10,0,8,197,260,165,351,64,13,110,117,93,31,1,9,33,22,23,457,44,450,77,102,898,40,49 }, -{ 7,66,97,2,172,74,226,52,29,135,192,232,43,324,92,5,38,20,222,14,6,568,87,107,353,620,580,16,138,174,448,32 }, -{ 62,129,123,162,136,249,618,183,507,57,4,152,17,59,11,184,117,77,3,128,211,41,130,205,12,40,33,106,64,229,38,313 }, -{ 1,13,15,2,4,515,23,0,3,115,700,5,51,77,341,141,753,180,33,217,197,202,901,6,21,165,11,365,318,317,10,102 }, -{ 6,26,235,19,145,47,112,78,64,27,453,95,29,444,25,624,85,108,648,70,32,130,74,42,711,630,632,138,65,122,113,730 }, -{ 23,51,12,15,13,99,515,153,117,10,700,37,120,82,165,2,753,64,128,0,403,3,5,1,134,197,453,31,202,457,110,21 }, -{ 16,24,18,71,64,35,92,7,246,146,9,108,60,118,199,5,140,2,267,0,230,830,32,133,1,68,50,330,247,563,36,12 }, -{ 15,515,700,753,0,1,13,2,23,3,4,217,51,5,115,8,9,180,341,10,7,6,317,77,33,372,901,197,365,11,120,165 }, -{ 234,639,178,202,77,142,5,455,450,49,416,0,147,427,198,21,315,329,13,318,325,557,120,344,113,259,22,128,61,105,23,494 }, -{ 1,31,36,44,141,180,55,2,64,22,98,116,13,352,0,115,10,127,5,164,253,498,237,165,341,197,4,86,15,170,125,23 }, -{ 15,120,13,141,23,260,217,515,1,77,51,110,180,700,317,82,269,137,115,202,21,753,64,5,351,291,0,450,352,93,36,326 }, -{ 26,6,112,396,19,145,25,122,648,287,42,74,624,222,416,45,138,66,644,151,113,651,29,573,64,280,445,27,525,85,70,58 }, -{ 156,360,5,146,121,21,271,522,354,132,49,13,18,195,16,340,60,591,446,586,727,0,107,407,167,48,1,463,199,566,32,23 }, -{ 5,61,49,147,178,612,660,120,21,182,23,427,259,683,33,4,77,70,13,3,376,98,64,0,481,344,48,595,291,263,141,51 }, -{ 89,79,468,179,358,205,94,405,115,498,72,180,365,431,37,111,341,734,188,317,482,217,11,4,245,152,413,216,12,474,490,752 }, -{ 24,16,35,68,18,71,7,92,0,108,9,14,118,101,336,175,375,302,28,124,154,55,149,60,398,1,65,2,140,273,345,230 }, -{ 51,730,421,801,453,386,23,523,13,475,719,401,670,365,899,403,115,457,758,165,33,494,450,6,423,805,629,56,569,514,958,388 }, -{ 113,45,6,311,29,2,151,614,145,491,112,80,5,27,61,74,315,66,209,631,19,25,58,17,73,26,1,243,70,64,611,287 }, -{ 4,339,188,471,11,59,79,12,377,94,99,33,77,102,51,111,37,152,13,961,474,542,40,342,3,23,128,403,202,177,184,57 }, -{ 15,4,515,11,700,33,82,40,0,120,753,10,8,110,13,93,23,165,77,260,64,31,22,51,44,102,351,1,125,9,197,21 }, -{ 16,24,18,0,35,68,28,71,124,118,60,7,9,55,14,92,109,101,419,175,22,252,154,375,149,302,158,346,2,49,1,126 }, -{ 17,45,227,21,106,3,2,243,209,5,48,32,221,62,207,50,29,186,290,270,263,52,14,496,400,119,46,255,54,430,38,721 }, -{ 340,354,586,658,156,195,698,668,1,296,9,18,883,363,447,379,303,98,411,13,31,163,51,5,371,48,919,846,121,21,360,70 }, -{ 277,153,111,12,23,51,474,99,38,37,139,117,41,457,79,453,542,13,11,33,134,157,629,188,961,14,196,401,102,569,15,94 }, -{ 0,18,16,159,49,24,9,105,35,68,7,28,22,1,60,344,55,101,109,2,14,158,13,23,71,118,455,286,272,424,5,327 }, -{ 0,105,9,49,16,18,158,28,518,24,101,320,1,68,170,301,272,127,7,286,35,890,109,39,159,98,21,344,31,55,371,23 }, -{ 141,1,180,15,13,2,365,217,515,352,317,115,341,0,4,5,269,700,23,21,3,752,197,77,753,51,31,901,10,202,8,64 }, -{ 4,23,51,33,19,17,102,153,485,880,40,403,196,26,300,453,27,117,78,0,12,200,47,5,11,14,342,99,53,77,475,2 }, -{ 62,184,56,440,130,229,183,3,556,152,99,162,12,266,17,548,136,57,305,161,123,14,452,4,383,403,257,34,40,84,33,139 }, -{ 13,23,77,141,64,202,33,51,269,115,0,102,21,4,217,128,5,32,318,137,291,9,15,2,180,10,3,317,177,515,7,6 }, -{ 1,22,36,105,170,0,86,2,31,28,239,64,55,5,10,98,9,44,127,95,654,67,301,143,13,12,49,23,320,141,83,21 }, -{ 15,515,700,753,0,1,13,2,23,901,5,8,51,82,9,180,457,4,7,12,3,6,10,120,341,141,22,898,197,351,115,260 }, -{ 1,39,274,98,100,265,190,30,438,310,166,223,88,96,909,31,264,625,530,9,382,812,21,252,593,0,254,539,44,131,23,778 }, -{ 18,212,167,118,363,1,447,411,146,60,271,16,781,121,647,9,621,562,21,478,664,68,815,5,354,98,48,101,24,446,777,463 }, -{ 24,28,22,0,7,1,2,16,14,65,35,49,158,95,109,159,55,105,10,18,124,9,67,5,239,149,12,289,108,68,21,424 }, -{ 105,22,131,272,286,98,55,239,1,31,320,9,127,327,36,185,28,374,86,219,0,64,187,44,578,164,224,913,535,115,601,13 }, -{ 22,31,28,301,127,98,44,0,105,1,512,395,9,293,109,299,95,338,239,125,242,116,36,320,55,841,900,685,599,23,13,763 }, -{ 2,1,58,29,5,14,52,46,186,334,45,155,151,50,400,75,38,69,502,61,48,227,223,7,163,17,262,67,549,21,70,113 }, -{ 7,107,135,232,97,14,2,92,66,16,172,192,278,387,298,356,38,35,448,52,46,43,60,29,20,126,324,526,357,359,64,5 }, -{ 20,43,104,426,173,7,560,414,707,784,319,81,0,861,422,819,38,74,715,52,376,97,879,32,330,22,49,64,66,95,192,526 }, -{ 104,74,636,66,204,0,355,81,222,25,29,319,145,784,20,65,90,4,174,194,7,64,6,746,138,173,750,715,91,43,192,32 }, -{ 0,9,101,35,68,39,65,28,252,124,67,154,364,336,100,166,30,1,289,55,149,346,16,114,158,88,439,24,429,22,570,194 }, -{ 57,14,4,231,236,585,176,59,369,23,361,13,719,51,300,342,12,457,56,3,62,38,202,401,34,46,2,322,11,215,210,507 }, -{ 1,2,15,3,141,0,515,5,33,700,13,64,77,180,6,128,753,10,4,269,102,202,11,7,134,197,352,120,117,318,12,291 }, -{ 5,1,21,202,13,32,48,23,0,61,259,22,494,120,70,49,51,18,137,128,465,12,178,115,2,453,403,141,58,3,90,450 }, -{ 141,205,4,72,59,79,245,11,352,94,152,76,247,216,21,188,452,217,497,12,89,37,111,339,588,77,64,875,864,115,358,464 }, -{ 15,515,700,753,0,1,2,13,5,4,23,3,8,341,365,51,115,10,120,457,6,141,77,197,31,7,165,9,202,450,961,260 }, -{ 5,2,50,14,58,38,171,46,29,1,45,186,17,52,155,218,48,281,61,487,54,36,67,21,328,334,151,227,760,114,400,133 }, -{ 457,120,70,125,318,64,23,48,795,291,202,761,751,415,77,846,269,758,21,237,96,260,391,165,87,1,128,5,221,13,137,763 }, -{ 13,23,51,33,4,40,117,102,453,64,153,196,0,77,15,11,12,475,1,65,134,10,515,22,21,14,700,59,403,141,2,753 }, -{ 229,152,57,266,452,381,432,12,313,184,99,471,17,4,62,339,157,3,129,59,128,11,369,37,77,38,40,123,5,497,188,257 }, -{ 49,28,109,22,159,9,272,95,105,131,55,35,254,168,39,327,169,0,1,286,175,374,347,158,420,67,36,194,312,424,627,346 }, -{ 5,2,61,29,45,58,80,311,1,17,209,227,52,243,106,869,454,151,592,496,48,334,14,155,6,186,46,171,75,21,255,667 }, -{ 244,44,110,141,260,30,269,352,839,131,574,228,373,276,1,406,219,717,217,137,253,224,120,93,36,31,567,116,661,187,341,88 }, -{ 12,99,79,139,11,453,196,51,277,474,111,23,542,37,94,188,33,13,401,775,40,961,313,102,4,339,153,485,629,134,300,431 }, -{ 16,35,9,0,68,24,149,69,67,18,1,114,65,230,71,7,103,133,50,167,212,118,101,191,140,64,399,28,124,283,55,565 }, -{ 88,30,274,435,131,613,190,100,93,829,166,1,187,795,530,127,382,957,960,160,31,137,466,264,39,800,406,254,28,473,521,219 }, -{ 167,16,18,118,212,24,60,71,101,68,191,9,375,411,363,35,0,1,589,199,302,21,447,55,146,126,92,271,647,121,562,48 }, -{ 64,141,86,177,77,128,147,597,304,95,269,102,275,4,352,49,120,5,372,194,465,13,588,237,947,216,202,180,612,751,107,534 }, -{ 18,65,90,403,523,289,240,214,194,102,701,475,202,217,283,862,389,51,33,0,494,421,453,817,84,64,847,899,352,13,23,437 }, -{ 13,51,23,202,5,12,21,128,15,115,0,1,141,120,64,32,4,2,515,403,165,457,3,10,700,99,453,318,719,450,308,401 }, -{ 98,223,393,31,1,271,834,791,167,44,202,64,93,697,5,116,77,125,450,446,212,18,541,293,51,120,195,132,284,13,807,765 }, -{ 15,515,700,753,4,11,23,13,40,51,82,165,0,110,93,33,141,64,120,5,10,77,3,102,180,32,202,125,8,197,31,21 }, -{ 15,515,700,753,0,1,13,2,901,23,5,341,3,51,82,8,4,180,961,9,115,10,12,6,898,7,351,141,134,22,31,120 }, -{ 234,416,77,5,315,639,325,202,147,198,113,49,450,61,455,142,0,21,22,342,329,494,178,58,102,427,318,230,13,120,43,470 }, -{ 60,146,16,18,156,126,121,271,199,360,132,24,167,0,640,10,71,522,21,92,5,340,107,354,118,150,22,195,446,35,28,212 }, -{ 4,361,11,14,56,368,377,161,27,12,300,77,59,200,17,554,202,33,40,494,495,21,210,80,757,25,128,23,19,38,444,53 }, -{ 141,82,217,351,15,352,120,1,180,260,515,64,854,36,700,317,752,372,13,269,77,753,922,21,349,23,202,110,93,137,51,373 }, -{ 15,515,700,753,77,13,0,1,23,33,102,2,51,4,3,5,291,217,10,9,450,120,341,7,317,6,11,117,115,8,260,180 }, -{ 15,515,120,13,700,23,77,141,1,260,0,753,180,51,137,202,115,365,110,291,217,5,128,9,21,341,197,269,2,450,317,165 }, -{ 174,6,348,85,138,74,280,204,66,233,192,355,289,65,81,580,636,353,25,91,104,343,673,214,64,95,42,712,792,32,194,90 }, -{ 152,497,452,59,4,216,11,79,94,77,128,188,269,339,588,33,76,529,318,32,141,471,12,202,111,21,5,51,37,90,72,177 }, -{ 417,499,10,141,253,244,110,559,8,564,180,260,728,120,352,638,642,341,951,206,143,752,901,93,137,661,922,373,44,31,811,197 }, -{ 13,77,23,33,4,51,0,102,128,59,141,40,64,115,177,10,137,22,202,2,7,11,90,1,117,180,269,14,49,6,134,3 }, -{ 1,2,22,0,36,5,67,50,14,28,12,86,38,46,83,168,194,65,103,114,49,7,10,95,21,69,23,24,128,51,55,13 }, -{ 17,106,119,207,255,306,742,378,84,62,136,45,3,5,240,80,61,56,209,383,311,790,655,32,2,440,76,151,58,29,179,263 }, -{ 3,128,1,141,2,202,33,5,64,15,0,515,102,13,269,10,700,180,134,51,120,6,77,318,23,137,17,117,753,197,82,153 }, -{ 514,38,377,328,11,57,41,248,880,266,556,4,152,361,471,757,485,403,305,102,3,211,313,99,457,130,12,14,157,40,23,54 }, -{ 68,0,167,101,9,118,264,520,16,18,21,478,562,1,124,212,100,936,664,777,191,88,806,154,48,24,759,604,35,252,265,65 }, -{ 230,689,699,213,466,352,217,831,30,443,418,144,854,201,840,855,1,251,203,317,530,957,96,93,822,539,36,752,351,137,83,800 }, -{ 33,77,102,117,15,82,13,134,23,64,0,515,120,153,51,4,40,128,700,260,202,141,196,22,753,11,351,10,1,326,95,269 }, -{ 11,40,33,51,117,13,542,328,14,134,38,153,23,12,485,231,102,54,775,37,3,377,111,139,211,4,457,403,369,475,99,719 }, -{ 33,64,77,128,141,2,1,202,102,13,23,117,0,15,3,153,51,134,10,40,6,5,515,269,137,180,318,165,700,7,196,753 }, -{ 15,515,700,753,4,1,5,11,13,21,33,180,93,141,64,2,23,77,82,3,0,102,32,40,352,341,10,197,98,110,117,901 }, -{ 1,2,14,67,50,46,38,24,103,83,0,5,36,28,29,133,114,96,65,52,18,75,54,108,22,7,238,58,160,9,361,69 }, -{ 258,201,276,137,160,860,116,261,295,843,567,144,131,44,187,268,943,219,284,31,202,935,141,98,662,203,127,96,36,93,224,1 }, -{ 7,2,14,16,46,87,75,52,92,278,29,38,140,70,1,5,35,294,24,262,135,69,171,172,58,409,112,60,50,66,97,12 }, -{ 13,23,0,2,51,1,33,4,115,10,15,141,77,3,5,180,217,515,9,7,64,11,700,6,102,40,197,22,317,753,165,202 }, -{ 74,145,6,66,25,204,42,29,222,337,138,26,7,525,192,174,746,287,544,135,415,2,609,632,112,64,87,0,85,45,712,396 }, -{ 77,33,102,15,217,13,23,141,202,515,51,700,291,4,269,753,317,180,21,64,318,115,128,0,275,2,352,196,3,5,137,11 }, -{ 187,219,258,871,44,442,160,574,137,224,908,116,839,131,36,926,276,201,93,228,202,860,31,613,144,531,406,1,902,30,190,318 }, -{ 1,372,141,5,21,77,225,744,96,30,23,349,13,291,269,284,69,442,459,144,303,839,217,622,160,330,260,48,120,410,189,352 }, -{ 66,222,2,74,29,87,135,6,7,145,52,25,294,337,226,172,138,331,42,70,97,112,26,1,632,192,43,5,415,609,461,353 }, -{ 45,17,106,209,5,2,21,29,48,207,3,186,243,155,255,263,454,119,400,496,270,14,290,62,425,1,171,32,659,52,38,56 }, -{ 93,88,141,120,30,213,260,373,100,717,459,82,110,1,166,450,180,321,217,372,36,269,131,225,22,352,326,466,473,187,244,410 }, -{ 266,57,152,381,313,471,12,229,99,369,339,62,157,3,4,37,77,38,188,17,11,162,40,184,129,59,475,775,128,452,403,453 }, -{ 217,352,317,141,752,15,180,515,372,365,700,341,753,349,77,21,291,1,115,244,64,120,13,98,269,82,5,498,864,351,23,144 }, -{ 14,514,369,102,403,377,51,719,880,153,23,13,457,11,485,4,401,12,328,453,33,40,117,57,629,38,730,236,134,670,361,961 }, -{ 107,7,172,14,92,135,2,359,60,314,46,16,126,278,232,150,279,32,38,392,298,5,35,97,24,192,259,288,330,52,356,312 }, -{ 0,4,25,13,59,90,65,23,26,19,18,12,5,216,91,51,389,33,77,11,22,85,27,81,21,177,746,45,42,194,37,123 }, -{ 5,49,315,202,416,77,455,639,450,21,197,137,350,13,408,0,329,318,494,344,61,402,64,509,347,120,113,48,95,713,308,401 }, -{ 130,47,381,390,59,90,200,214,289,6,65,472,29,64,874,648,50,751,624,26,52,32,4,194,875,714,85,249,247,33,881,19 }, -{ 51,23,453,13,719,12,457,165,37,730,99,4,386,197,401,17,11,2,3,15,5,961,475,6,515,64,54,700,32,115,0,403 }, -{ 15,515,1,13,700,2,23,0,753,5,3,180,51,4,165,12,141,21,197,457,7,115,6,9,352,10,120,202,8,341,11,77 }, -{ 0,9,1,67,35,28,68,16,24,65,18,69,50,114,103,12,22,13,5,101,2,96,23,83,149,21,39,55,7,175,433,124 }, -{ 28,105,22,0,1,320,170,9,49,301,109,95,127,31,98,55,65,35,2,24,168,159,36,713,16,740,13,338,21,44,512,23 }, -{ 13,77,4,51,23,33,102,202,128,59,40,0,64,141,117,403,115,11,15,318,153,269,22,515,475,134,10,494,177,1,90,210 }, -{ 13,23,0,51,77,33,2,141,4,10,1,64,115,102,3,6,22,15,217,11,180,7,40,515,165,202,177,9,269,128,700,5 }, -{ 456,116,492,8,949,268,867,391,203,51,499,13,719,386,31,791,457,918,125,10,23,93,479,685,417,0,22,338,506,551,870,730 }, -{ 17,237,45,180,106,62,32,64,115,41,136,498,255,21,197,129,241,13,3,227,23,352,165,752,350,365,449,155,4,546,476,38 }, -{ 1,15,180,515,0,2,341,700,901,352,4,141,13,3,752,5,753,217,317,115,365,23,197,21,51,165,31,6,269,202,77,7 }, -{ 205,141,216,269,497,4,588,76,59,152,128,452,79,77,875,11,72,94,188,217,352,12,247,37,90,64,32,1,474,23,947,372 }, -{ 64,247,217,237,317,180,752,115,349,141,498,13,437,304,23,372,352,164,579,291,33,864,177,197,0,490,72,10,482,77,269,51 }, -{ 2,1,0,13,15,141,3,77,5,515,64,33,23,180,6,700,4,117,217,7,10,11,102,165,753,197,115,134,40,352,12,269 }, -{ 11,40,38,328,33,542,12,313,41,339,23,157,377,117,369,51,471,99,775,485,13,305,457,57,14,475,37,248,4,54,188,719 }, -{ 33,77,102,40,13,23,0,51,4,128,64,202,117,141,22,196,153,10,134,15,59,269,1,137,65,11,403,318,453,86,515,177 }, -{ 472,80,34,250,495,161,17,14,469,176,128,4,389,106,283,436,216,527,3,297,483,177,53,56,231,194,119,84,719,57,255,59 }, -{ 317,352,180,141,217,752,115,341,365,244,1,269,202,901,253,15,21,498,372,4,137,515,13,2,700,318,5,197,23,143,753,349 }, -{ 9,39,101,18,265,100,333,520,252,16,0,329,593,1,553,364,68,167,310,30,121,254,118,158,363,166,60,604,272,24,286,404 }, -{ 15,515,1,180,700,901,0,2,753,341,752,4,3,13,115,365,317,5,23,197,141,217,165,352,6,22,36,9,137,51,7,10 }, -{ 131,39,9,829,166,613,578,827,1,30,716,254,100,98,31,224,0,406,228,310,616,219,44,846,127,190,938,96,265,371,856,438 }, -{ 17,64,62,106,141,751,136,292,32,129,352,41,38,476,86,128,214,237,5,177,123,209,217,45,269,954,162,710,180,3,90,4 }, -{ 25,42,235,65,650,736,605,6,630,85,123,343,233,256,26,122,63,389,141,249,416,444,368,194,19,108,138,174,90,0,544,511 }, -{ 184,229,152,57,266,432,497,452,17,381,619,257,313,12,4,205,59,3,99,471,157,128,5,129,339,369,77,11,32,45,202,2 }, -{ 137,202,160,860,141,30,93,567,36,276,295,261,131,39,9,964,201,843,1,98,800,318,116,22,943,187,10,219,206,44,269,535 }, -{ 0,493,125,64,49,9,279,10,35,18,93,55,293,31,14,13,194,165,325,48,22,132,21,107,98,389,44,581,342,259,174,137 }, -{ 15,515,700,753,4,33,13,77,23,5,51,32,102,40,93,11,349,141,21,8,82,202,64,31,110,10,117,0,1,44,3,318 }, -{ 110,253,854,811,352,141,244,951,180,642,661,384,498,143,752,317,911,10,269,206,559,351,261,120,902,533,922,959,365,160,332,217 }, -{ 2,29,70,1,75,52,6,220,26,112,145,331,74,163,19,69,38,324,46,58,14,5,25,21,278,223,50,307,66,7,67,409 }, -{ 13,23,77,33,51,4,64,141,115,102,0,2,128,177,40,11,202,10,6,180,7,15,269,1,32,217,59,22,291,3,137,515 }, -{ 340,897,691,478,658,264,914,382,100,812,363,1,724,156,166,698,88,521,39,404,682,447,296,96,303,411,30,909,9,274,656,772 }, -{ 9,18,310,101,265,159,326,120,105,158,33,363,77,195,51,55,13,39,354,132,23,7,28,639,16,137,98,1,252,272,709,49 }, -{ 57,313,471,12,99,369,157,339,266,152,38,37,475,453,328,775,11,40,59,188,77,514,401,403,342,4,139,33,377,51,229,14 }, -{ 16,7,24,14,35,140,60,92,18,69,71,2,189,1,46,230,108,388,150,38,21,172,278,67,246,267,50,309,236,135,451,0 }, -{ 206,417,93,940,959,473,499,203,8,137,559,728,31,202,44,120,450,141,10,260,116,564,22,326,269,318,268,244,0,1,253,638 }, -{ 15,515,700,753,1,0,13,2,23,4,3,51,5,217,7,77,341,115,8,9,10,33,6,180,317,349,291,120,11,165,457,901 }, -{ 1,2,5,14,48,21,290,32,50,45,38,46,263,207,155,72,76,29,17,408,425,171,89,52,7,0,292,449,3,227,513,428 }, -{ 121,132,354,167,271,223,146,98,18,463,1,668,446,195,407,60,212,447,781,48,360,363,411,522,156,393,807,9,21,16,293,13 }, -{ 131,578,105,371,219,224,716,616,187,49,9,254,737,159,385,98,258,127,272,761,0,916,623,910,28,286,39,31,22,518,924,242 }, -{ 302,467,97,6,273,1,24,484,124,51,36,18,2,398,453,421,523,69,7,23,13,403,386,150,66,0,298,65,426,165,22,158 }, -{ 30,190,530,88,1,100,778,539,625,274,382,410,96,731,960,39,795,321,9,131,264,144,840,748,44,166,669,957,36,31,435,228 }, -{ 141,1,2,128,64,33,15,202,3,0,180,5,13,77,515,134,269,102,197,700,10,137,318,6,120,165,753,352,4,82,23,117 }, -{ 44,201,567,116,131,224,295,662,489,268,219,31,434,144,187,276,110,384,93,261,699,137,36,442,120,1,613,30,228,64,141,244 }, -{ 12,15,51,23,515,37,99,13,700,0,10,117,753,38,165,82,134,120,11,453,197,64,115,569,1,629,401,22,457,474,110,153 }, -{ 7,135,2,92,172,14,66,140,38,52,97,46,29,74,16,324,278,226,6,87,1,571,262,5,357,232,35,380,69,314,24,330 }, -{ 125,386,23,963,949,60,51,391,165,221,13,197,118,21,719,193,541,421,517,150,393,7,401,453,308,5,791,551,326,558,48,173 }, -{ 6,85,42,25,138,222,174,235,280,256,525,289,26,214,64,746,90,32,544,65,204,19,66,337,355,95,348,415,74,29,5,312 }, -{ 1,14,5,50,2,67,24,0,46,69,48,21,58,103,16,12,18,38,54,96,83,7,502,45,36,181,35,9,430,28,10,155 }, -{ 811,351,642,180,951,752,110,638,253,10,82,352,197,341,365,564,499,854,873,55,9,417,282,901,244,22,559,143,206,141,28,898 }, -{ 23,13,51,15,12,453,403,165,4,515,115,719,475,457,700,523,2,21,0,99,202,197,14,5,386,753,128,401,37,308,33,117 }, -{ 120,13,23,77,141,1,15,93,217,82,260,51,137,202,110,515,21,180,165,5,128,102,64,351,291,700,269,352,326,203,177,0 }, -{ 1,5,0,22,12,2,36,21,10,23,86,13,28,51,9,128,48,14,32,50,7,3,96,137,54,4,202,49,37,65,208,323 }, -{ 219,98,23,127,301,51,258,308,170,910,13,165,22,105,293,616,125,242,276,401,201,395,964,115,55,284,31,374,327,206,512,900 }, -{ 64,180,80,165,5,237,2,250,34,58,297,61,197,17,22,29,186,498,231,445,247,3,752,311,95,32,483,153,27,45,115,469 }, -{ 13,77,23,33,0,2,1,64,141,51,102,10,15,3,115,40,180,6,515,128,7,22,269,202,4,217,700,5,177,117,14,165 }, -{ 15,120,51,515,13,450,23,700,202,153,196,753,260,64,128,141,730,4,326,386,21,523,33,318,5,457,95,32,403,1,77,269 }, -{ 2,1,5,29,32,45,207,263,14,425,58,72,76,21,7,408,48,46,52,186,17,292,38,6,61,89,476,50,155,720,119,3 }, -{ 15,515,700,753,4,13,11,5,1,23,33,21,3,141,32,2,40,180,117,64,269,202,102,197,0,165,120,51,341,352,153,12 }, -{ 76,5,214,129,2,123,45,710,17,249,618,460,179,32,1,257,205,519,90,207,245,184,162,61,769,209,292,106,6,29,14,128 }, -{ 1,15,23,13,120,141,51,515,202,21,700,165,0,180,137,2,5,77,128,93,753,260,269,197,326,33,110,352,82,102,318,48 }, -{ 7,2,135,14,29,87,66,52,97,172,70,112,5,58,46,337,92,16,20,43,1,38,232,155,74,294,6,461,409,151,262,32 }, -{ 574,187,384,926,860,110,258,434,269,531,141,244,160,261,253,116,699,959,940,717,533,36,219,31,902,661,871,295,201,352,10,260 }, -{ 156,354,296,1,182,586,64,379,340,937,850,698,31,48,98,44,120,18,163,23,30,658,195,125,77,284,223,291,774,481,96,39 }, -{ 250,80,34,472,17,495,176,469,33,194,64,483,4,297,141,14,161,27,53,667,56,833,73,527,585,231,106,51,84,814,2,59 }, -{ 97,7,81,140,66,92,172,192,24,298,43,6,74,69,314,426,462,14,501,16,21,508,60,189,267,232,230,104,48,20,135,330 }, -{ 31,44,116,144,268,393,492,434,367,489,127,98,918,0,384,9,22,206,948,105,93,203,1,456,332,940,299,28,137,49,293,125 }, -{ 15,128,33,3,13,51,141,1,202,64,23,2,515,120,102,0,5,82,10,700,165,197,269,153,403,110,753,137,196,318,117,12 }, -{ 31,98,127,9,0,105,22,28,44,512,293,395,299,1,242,49,685,763,320,599,125,116,109,276,284,95,870,159,23,456,36,900 }, -{ 7,24,124,1,6,97,2,69,14,18,23,92,21,67,66,16,5,484,43,20,118,65,36,22,28,0,51,140,13,71,29,150 }, -{ 1,64,442,303,284,349,202,141,622,67,154,447,260,44,652,429,9,335,237,919,197,98,167,33,682,269,547,77,863,411,340,201 }, -{ 1,15,2,141,515,0,700,13,3,180,10,753,5,64,77,33,4,6,7,197,102,269,165,23,134,11,352,341,291,349,22,120 }, -{ 99,139,12,453,196,277,775,40,475,33,23,401,215,51,11,14,77,111,313,130,38,211,37,266,129,15,339,153,719,3,369,515 }, -{ 33,77,102,4,23,128,13,141,202,64,51,0,40,59,269,115,117,137,153,1,318,11,10,177,15,134,22,90,196,2,403,32 }, -{ 7,2,14,58,70,112,16,5,87,38,46,52,6,128,135,1,32,21,155,29,66,64,0,97,92,186,172,294,13,23,20,37 }, -{ 15,13,515,1,700,2,23,0,753,5,3,4,51,10,341,115,365,180,11,33,317,77,6,7,217,12,197,165,117,9,64,102 }, -{ 2,1,14,29,75,69,67,6,52,46,38,24,103,220,83,25,70,87,262,74,96,267,50,366,26,16,226,394,357,66,108,19 }, -{ 9,105,18,39,1,0,16,557,101,272,252,890,326,49,265,21,137,100,23,938,13,310,159,5,31,24,254,51,30,128,202,132 }, -{ 80,209,45,61,667,17,6,106,5,2,151,29,483,255,454,833,27,311,112,19,738,378,1,58,113,26,25,469,119,887,32,64 }, -{ 13,23,51,15,5,1,515,0,21,2,12,141,700,165,202,115,753,32,180,4,3,197,10,120,457,9,269,128,64,341,7,33 }, -{ 99,12,453,277,139,157,369,474,339,51,38,23,37,196,188,401,775,111,11,313,328,475,153,266,4,471,79,40,33,629,102,14 }, -{ 7,92,16,232,97,140,126,14,60,107,66,35,298,387,314,104,246,462,441,150,0,38,24,2,172,357,230,330,5,633,22,289 }, -{ 13,77,23,202,318,141,33,4,51,269,102,177,115,403,137,2,40,494,90,11,342,128,31,117,21,32,7,12,64,134,14,10 }, -{ 13,2,0,23,141,1,77,3,180,33,6,64,15,10,115,51,4,5,217,197,7,165,515,102,22,11,700,269,40,352,177,14 }, -{ 15,515,700,753,4,11,1,93,13,5,180,110,82,21,120,23,2,33,10,141,3,165,197,102,901,0,32,341,117,40,153,12 }, -{ 15,515,700,753,1,13,0,2,23,4,77,51,3,5,341,291,7,33,6,115,10,9,8,217,11,177,120,180,102,165,197,365 }, -{ 20,43,198,325,173,904,104,234,66,147,77,319,416,422,97,426,5,0,7,450,861,202,712,725,2,32,639,376,38,324,945,315 }, -{ 105,0,9,28,49,301,170,1,127,159,22,16,31,98,512,623,24,109,158,395,35,68,371,65,713,55,2,242,293,21,44,18 }, -{ 213,88,689,466,230,30,321,435,699,352,217,201,795,831,144,854,1,443,96,539,530,840,418,251,855,190,93,100,669,31,957,662 }, -{ 130,453,47,196,4,57,14,59,236,711,51,153,730,77,412,381,23,202,108,128,361,13,283,117,11,719,200,46,34,78,210,2 }, -{ 1,2,5,14,0,50,36,22,38,46,65,67,12,86,114,28,103,29,208,7,10,128,21,83,218,23,96,54,194,6,133,51 }, -{ 6,26,74,19,165,453,14,730,1,125,197,50,29,51,138,357,13,2,108,391,70,719,46,457,47,500,386,262,112,23,235,52 }, -{ 9,10,376,20,43,0,49,18,30,120,2,33,325,104,501,470,77,788,725,102,523,39,858,5,904,414,174,55,137,37,342,13 }, -{ 15,515,700,753,0,1,13,23,51,77,120,202,341,82,5,4,9,260,2,137,141,128,115,351,901,8,180,10,197,21,450,33 }, -{ 105,131,272,578,9,49,371,219,159,616,286,320,224,187,716,98,28,22,0,623,127,258,910,737,385,31,239,347,254,109,424,95 }, -{ 457,51,13,23,961,12,719,99,453,15,4,515,165,401,629,3,700,11,17,14,2,37,753,41,57,569,38,45,0,33,5,32 }, -{ 202,120,5,33,318,77,450,102,1,260,403,128,494,21,165,13,269,12,326,23,342,523,402,2,817,64,15,141,125,82,457,475 }, -{ 141,269,352,217,180,64,349,137,202,160,317,15,372,515,700,752,318,753,244,13,437,291,165,864,22,237,5,82,954,21,77,418 }, -{ 70,29,2,145,74,112,26,6,75,52,19,66,632,1,87,220,5,135,163,287,307,25,226,7,58,396,294,278,113,409,69,151 }, -{ 82,351,317,15,752,180,898,352,141,901,515,341,10,700,365,1,753,498,0,217,253,115,55,854,33,5,143,32,21,160,36,197 }, -{ 39,9,310,254,0,30,101,49,252,272,100,265,105,455,159,557,190,333,286,688,18,166,1,158,709,16,625,627,31,131,327,329 }, -{ 2,58,29,5,1,151,186,52,70,45,7,549,14,75,112,400,113,155,61,46,227,163,311,315,66,6,307,27,17,220,287,74 }, -{ 141,217,13,21,352,23,269,77,180,115,317,64,202,15,349,137,5,51,165,291,318,752,372,4,0,102,33,365,197,32,341,125 }, -{ 68,35,0,9,65,101,149,124,24,154,175,16,28,7,67,1,18,189,114,398,55,14,345,39,118,133,69,2,230,429,71,283 }, -{ 66,7,29,2,112,52,20,43,97,151,74,192,135,5,173,525,337,45,145,58,415,25,14,32,644,70,544,226,222,21,6,580 }, -{ 31,125,44,22,116,299,242,55,1,170,64,36,479,870,456,685,10,599,558,0,268,506,28,740,23,903,492,164,393,206,2,86 }, -{ 188,11,79,12,99,377,94,33,542,339,40,474,111,37,4,51,102,453,139,775,13,475,23,961,277,471,134,57,431,266,115,117 }, -{ 658,698,340,98,296,303,1,31,850,363,156,919,44,774,586,385,120,77,82,10,223,30,354,291,23,914,478,87,260,163,48,13 }, -{ 15,515,700,753,82,4,1,13,901,33,197,11,5,10,23,165,2,0,180,3,21,77,51,120,365,115,217,40,117,102,32,401 }, -{ 15,515,700,753,4,11,5,13,1,141,3,180,23,202,21,2,269,64,165,33,40,32,0,318,120,128,12,197,117,352,51,17 }, -{ 91,6,233,85,370,718,81,65,25,256,63,343,42,74,235,123,138,511,397,249,26,194,650,355,64,87,544,18,90,643,66,214 }, -{ 23,13,202,51,21,120,1,5,141,128,450,64,318,403,15,137,260,33,12,48,32,31,125,494,269,102,165,515,77,2,197,14 }, -{ 180,317,365,341,752,217,115,352,901,482,372,498,1,141,15,253,515,244,2,700,0,21,13,82,23,4,579,351,753,291,269,77 }, -{ 13,115,197,341,9,352,468,237,64,498,23,165,22,509,901,546,482,180,28,569,317,51,365,873,391,95,86,217,49,837,752,706 }, -{ 13,23,51,1,141,5,165,202,21,120,64,125,180,15,2,33,197,115,128,32,260,269,12,82,4,515,137,7,318,93,0,700 }, -{ 214,289,90,174,874,6,138,280,65,81,64,85,355,751,194,233,312,348,835,91,0,32,343,636,249,29,875,288,519,104,247,74 }, -{ 15,515,700,753,4,5,11,13,1,33,23,21,2,3,102,32,141,77,180,117,31,64,0,40,134,196,120,352,12,44,197,6 }, -{ 33,15,13,515,117,23,700,217,134,753,0,51,153,77,141,2,4,64,196,1,3,180,10,115,5,102,6,11,22,202,165,7 }, -{ 15,515,700,753,33,4,77,102,1,40,13,117,11,115,134,5,21,153,23,217,3,32,2,317,120,196,180,141,51,12,59,260 }, -{ 15,515,700,753,13,0,1,23,2,217,51,3,4,5,8,317,115,9,341,10,202,180,6,365,7,82,457,22,120,901,33,291 }, -{ 7,2,135,20,97,14,66,52,337,673,192,29,43,355,353,5,16,294,107,376,147,226,331,560,64,470,222,104,415,32,4,324 }, -{ 195,132,142,167,146,77,363,271,121,354,202,120,647,178,786,212,687,0,101,878,16,522,60,5,450,411,35,55,98,639,259,318 }, -{ 202,77,20,0,318,66,104,128,102,269,177,43,33,7,216,291,494,5,2,342,74,173,97,112,450,22,337,10,234,52,64,678 }, -{ 107,362,612,356,359,97,414,43,259,20,392,7,298,147,819,683,465,173,729,660,319,14,5,779,581,595,246,35,501,92,0,230 }, -{ 6,165,14,453,13,51,19,23,386,457,74,391,308,2,26,401,47,758,603,108,719,366,1,29,309,730,324,197,133,70,115,867 }, -{ 179,72,205,180,247,245,4,490,352,59,317,152,79,498,94,217,148,76,752,864,11,216,141,405,89,452,197,111,497,188,37,21 }, -{ 107,7,298,314,14,359,32,392,232,279,172,97,60,581,387,126,121,0,534,493,356,92,441,95,13,21,35,147,22,5,16,362 }, -{ 156,271,354,586,360,132,591,195,121,18,340,1,5,13,21,48,668,446,23,463,296,658,60,55,407,698,146,70,626,51,163,24 }, -{ 13,23,51,4,0,12,457,15,11,453,2,515,5,1,99,10,115,165,700,475,401,403,3,961,40,14,37,753,719,32,64,569 }, -{ 48,125,21,165,13,221,23,763,423,508,197,5,98,92,193,16,441,386,64,314,293,457,391,140,49,60,102,693,683,51,35,867 }, -{ 202,77,120,450,5,318,1,494,0,195,18,132,523,403,326,604,354,260,121,576,203,167,234,817,682,49,35,615,21,20,13,102 }, -{ 39,9,166,30,0,101,158,68,404,190,333,274,252,310,88,100,49,28,344,35,21,22,419,131,438,1,16,65,530,694,124,10 }, -{ 15,515,700,753,110,4,1,11,165,180,93,13,82,5,2,197,33,120,0,3,10,23,21,115,901,217,341,77,317,51,32,117 }, -{ 2,29,1,14,6,52,5,46,50,26,70,19,103,58,38,67,96,262,516,309,218,133,108,27,75,17,112,114,24,487,331,83 }, -{ 120,77,15,13,1,141,260,23,515,217,110,51,137,700,317,202,165,291,180,21,753,128,0,177,326,93,450,82,64,269,197,5 }, -{ 255,59,554,297,183,56,33,444,108,358,123,196,269,122,77,153,57,177,117,730,19,467,605,130,128,50,275,4,291,475,134,133 }, -{ 13,23,51,12,153,14,117,120,165,134,99,401,38,453,15,128,197,719,64,515,475,403,37,33,196,700,40,125,5,0,54,2 }, -{ 64,33,174,348,95,108,467,554,56,0,25,306,233,6,63,511,343,120,13,85,29,561,543,707,319,180,899,355,77,49,256,18 }, -{ 120,260,51,23,77,15,202,1,93,82,141,450,13,326,515,137,21,5,64,33,110,700,128,165,318,203,269,102,351,753,197,125 }, -{ 15,515,700,753,4,13,11,1,5,21,23,2,33,64,3,180,32,141,22,102,77,0,10,93,82,352,117,40,341,31,165,6 }, -{ 15,515,700,753,341,13,23,141,33,1,0,217,4,77,180,10,82,351,51,137,5,64,9,317,21,11,102,40,260,202,854,115 }, -{ 105,272,131,22,327,286,28,239,320,9,109,578,219,49,98,224,95,159,538,371,616,127,187,64,713,55,0,170,168,258,716,623 }, -{ 16,18,68,35,24,60,71,118,92,126,0,9,101,191,7,55,154,175,212,14,167,150,302,28,375,1,107,124,346,273,21,108 }, -{ 20,147,43,470,376,142,904,178,427,798,0,595,198,325,858,319,61,202,173,97,5,422,14,22,107,259,32,49,887,77,414,392 }, -{ 13,23,51,12,33,15,99,64,128,515,453,202,117,153,37,102,700,40,134,196,120,0,2,753,141,14,38,3,82,403,77,21 }, -{ 383,17,62,136,84,119,56,440,3,504,240,80,378,129,123,548,106,128,4,11,14,555,162,32,184,361,59,64,205,5,469,57 }, -{ 70,1,48,652,5,638,846,888,21,349,269,260,340,562,767,761,163,883,774,141,125,518,591,0,23,9,87,13,371,303,622,31 }, -{ 66,135,6,97,74,278,69,7,14,324,267,172,2,140,462,1,357,38,808,550,92,841,189,29,16,25,298,87,75,204,24,335 }, -{ 51,23,33,13,102,40,12,128,64,77,10,202,0,196,117,4,14,99,134,453,65,153,11,475,139,403,22,141,86,2,21,15 }, -{ 88,100,264,166,274,435,772,1,382,921,96,478,30,438,639,909,897,521,190,466,960,410,9,144,530,418,31,329,265,691,778,93 }, -{ 62,440,136,56,84,3,504,548,555,383,4,17,129,128,507,361,123,59,119,162,14,57,152,328,161,11,202,495,184,27,80,215 }, -{ 911,617,332,959,206,141,253,244,282,384,110,120,10,260,352,143,951,811,269,373,160,417,93,531,728,203,434,940,137,55,36,717 }, -{ 120,15,260,141,77,1,515,82,700,351,33,23,450,13,110,326,64,217,269,753,203,137,102,5,165,21,51,291,93,177,373,128 }, -{ 15,515,700,753,0,1,2,23,13,51,5,9,82,901,180,8,3,4,120,6,7,141,93,12,197,341,10,33,115,730,64,125 }, -{ 7,104,97,107,356,232,66,560,298,289,14,707,38,568,359,64,20,0,65,324,22,214,92,32,192,5,387,43,712,90,172,95 }, -{ 6,1,2,66,67,14,74,24,108,29,69,83,458,7,25,38,135,103,36,150,451,114,52,594,75,65,380,18,267,602,19,278 }, -{ 13,23,51,12,115,21,202,5,457,15,4,1,64,719,0,403,2,3,453,165,99,141,401,128,32,515,10,37,523,197,120,700 }, -{ 57,59,4,11,412,381,77,53,421,291,250,368,99,14,27,369,803,283,23,108,403,19,339,210,0,401,12,444,236,40,361,736 }, -{ 15,515,700,1,0,753,2,13,23,5,51,180,3,115,6,7,457,4,9,8,12,82,197,165,141,901,120,719,33,64,21,22 }, -{ 64,95,180,247,929,146,90,126,197,32,237,60,288,165,316,92,5,13,77,7,217,955,522,22,16,314,132,4,317,10,312,86 }, -{ 15,1,120,13,23,515,0,51,700,180,141,2,5,202,21,260,753,165,137,33,77,110,197,128,326,7,450,4,102,9,269,12 }, -{ 14,2,16,46,1,7,24,69,75,35,38,50,29,220,52,140,267,67,18,54,70,309,5,60,92,189,171,87,71,163,58,0 }, -{ 31,98,127,44,9,299,0,276,293,284,116,49,935,599,105,22,456,201,28,1,39,125,242,137,371,144,131,492,159,272,51,395 }, -{ 6,27,151,53,573,445,297,113,26,73,436,19,491,250,396,315,45,112,145,58,614,881,25,34,611,200,17,80,70,5,138,631 }, -{ 32,693,81,788,90,804,403,56,494,21,84,397,202,65,18,77,64,681,214,725,523,784,526,33,102,825,240,0,115,241,817,91 }, -{ 24,7,14,2,18,16,65,0,108,149,28,69,1,71,154,36,124,35,67,140,189,429,92,68,66,22,55,118,302,150,9,6 }, -{ 0,68,9,35,65,101,189,212,114,67,124,69,1,154,149,39,230,64,252,16,88,702,103,100,18,336,28,329,520,83,30,755 }, -{ 5,2,186,29,61,45,17,1,52,48,58,171,155,227,80,209,311,21,14,46,50,106,243,513,334,502,496,38,3,6,32,592 }, -{ 15,515,700,753,13,1,2,0,3,4,5,23,341,11,10,33,6,51,165,117,153,7,180,12,365,901,77,569,197,115,64,9 }, -{ 13,15,23,515,0,51,1,700,4,2,753,10,3,5,12,77,33,961,165,457,197,11,115,9,22,102,40,403,202,21,14,59 }, -{ 15,515,700,753,13,0,1,23,2,33,102,5,4,10,9,3,51,115,77,7,6,341,12,11,217,40,457,196,180,165,8,523 }, -{ 166,39,30,274,190,100,333,438,530,310,88,252,0,9,539,265,1,656,404,101,625,131,778,254,31,455,676,329,724,158,21,23 }, -{ 734,148,94,308,431,115,37,89,111,413,79,468,197,629,341,474,569,12,13,873,179,401,11,4,180,23,205,72,59,365,134,51 }, -{ 539,228,224,219,816,190,30,258,871,840,669,93,406,530,957,187,160,531,748,137,131,88,863,36,728,839,44,213,352,116,202,466 }, -{ 393,791,125,801,730,551,386,23,31,175,93,98,51,13,144,788,126,203,21,345,116,22,949,110,575,165,326,44,0,4,60,221 }, -{ 13,23,77,141,0,4,51,2,33,115,64,1,10,3,6,15,11,102,7,217,180,40,515,22,128,177,202,9,700,269,165,5 }, -{ 2,29,7,70,52,14,1,58,112,46,75,5,171,163,87,220,307,151,186,334,38,66,155,16,69,135,278,45,262,97,6,21 }, -{ 88,321,213,100,230,435,689,466,1,382,30,352,217,699,410,96,795,36,921,752,190,141,144,180,44,831,317,83,443,31,840,251 }, -{ 363,411,101,520,354,9,195,668,132,156,447,1,905,364,18,23,765,664,146,5,360,13,121,96,98,31,252,39,100,759,264,551 }, -{ 13,23,51,730,12,719,453,457,401,475,5,21,403,2,0,1,15,4,3,899,99,32,165,11,515,308,197,115,6,961,700,523 }, -{ 72,76,89,12,37,4,308,179,38,528,90,431,54,205,148,184,401,57,152,474,23,59,51,245,428,11,32,99,405,316,257,21 }, -{ 376,20,43,147,470,173,97,595,107,319,414,142,819,5,729,178,858,7,427,32,426,104,14,0,392,362,259,61,230,77,560,246 }, -{ 202,141,269,494,318,137,51,128,403,4,217,96,77,5,64,177,291,180,15,352,102,10,33,349,2,317,0,341,120,515,21,453 }, -{ 77,202,33,128,102,318,494,269,13,0,117,23,342,291,403,15,134,51,153,141,177,515,82,137,196,700,203,64,22,351,753,4 }, -{ 253,110,951,352,499,811,10,854,180,638,244,559,642,752,564,8,141,143,417,341,901,260,206,197,922,661,93,15,498,373,165,911 }, -{ 141,13,23,180,4,217,5,1,269,317,21,0,2,202,115,51,352,77,3,197,64,341,318,15,291,9,137,93,32,165,515,33 }, -{ 9,0,18,252,16,101,68,39,24,118,35,109,158,329,28,167,60,364,333,265,49,100,22,419,553,55,1,677,71,7,212,159 }, -{ 28,109,9,39,0,158,49,22,168,35,55,175,1,65,67,185,194,159,289,95,272,114,30,105,86,584,36,169,254,2,83,24 }, -{ 15,515,13,700,1,753,2,23,0,3,4,5,33,341,11,51,6,10,197,115,901,180,77,40,102,12,365,165,141,217,7,317 }, -{ 173,693,104,422,5,18,61,32,102,0,20,13,784,560,33,66,397,526,49,207,29,25,510,707,65,6,11,344,21,263,81,77 }, -{ 23,13,386,51,308,801,719,221,401,949,21,730,165,421,102,115,125,33,341,670,468,117,770,1,120,6,197,14,403,97,67,958 }, -{ 0,49,105,16,28,24,159,9,158,320,1,68,35,239,170,18,109,7,55,65,2,95,301,124,347,14,21,154,22,127,286,31 }, -{ 2,5,1,207,45,29,32,58,76,61,6,263,292,655,72,14,17,476,7,119,52,306,70,64,21,90,186,214,106,38,3,790 }, -{ 21,6,125,49,13,64,715,66,115,95,197,33,22,32,204,165,56,278,0,408,241,120,4,808,681,350,263,85,81,571,135,509 }, -{ 612,427,325,107,202,5,376,49,64,392,403,470,21,147,31,788,494,14,362,465,858,98,20,804,518,43,845,318,125,97,725,534 }, -{ 32,21,76,72,2,1,14,5,241,449,89,38,350,221,155,48,50,292,37,46,45,90,270,54,17,179,214,12,148,430,476,413 }, -{ 24,0,28,16,7,124,35,154,14,149,65,18,9,68,55,108,175,71,2,1,22,109,92,67,484,336,118,69,302,398,570,420 }, -{ 1,5,14,2,48,50,38,67,46,21,0,54,45,270,281,12,24,32,155,96,513,103,290,83,61,58,36,17,37,72,69,181 }, -{ 13,961,569,197,37,15,23,474,515,94,148,111,12,165,629,341,700,79,901,401,51,405,753,10,134,4,115,734,873,11,89,117 }, -{ 33,23,102,51,13,40,77,128,64,202,141,15,4,12,0,1,2,117,22,11,10,403,153,515,99,318,137,269,139,196,700,134 }, -{ 0,1,24,67,9,16,18,35,28,69,103,50,5,2,65,12,83,68,7,96,14,22,21,149,75,114,13,133,23,71,218,54 }, -{ 384,617,940,332,855,911,206,959,434,282,141,10,93,253,244,110,144,268,120,36,352,137,417,203,116,31,44,269,160,201,143,951 }, -{ 30,93,473,137,31,704,450,652,190,203,800,254,166,274,326,144,269,160,127,303,120,625,88,848,110,435,77,521,349,131,340,744 }, -{ 53,27,73,26,19,250,297,200,25,630,17,6,611,122,34,42,714,235,472,65,436,14,80,684,690,106,45,113,680,108,64,4 }, -{ 15,515,1,2,700,0,753,3,5,141,180,4,13,77,33,10,217,6,7,134,11,352,197,64,165,341,317,23,12,115,102,40 }, -{ 254,530,39,613,688,221,30,31,438,190,228,960,1,44,141,21,180,406,23,166,9,202,13,96,137,48,131,829,317,269,393,51 }, -{ 9,39,28,35,30,166,158,36,0,175,101,346,364,67,49,68,168,420,88,1,194,131,100,352,55,83,190,64,137,570,86,65 }, -{ 62,56,3,548,555,507,440,161,34,4,215,136,162,514,361,527,17,14,211,130,328,11,383,123,84,183,38,57,184,152,205,494 }, -{ 92,126,107,7,356,493,97,279,359,298,16,246,35,60,14,441,362,121,43,423,5,132,392,20,508,230,199,146,232,173,150,414 }, -{ 15,82,141,515,291,922,349,700,217,260,372,120,351,93,77,753,318,352,373,854,1,326,269,21,13,102,144,202,64,23,203,137 }, -{ 141,217,352,115,180,13,269,317,752,77,23,21,341,197,5,372,244,291,9,64,51,102,4,1,365,2,165,33,3,48,237,351 }, -{ 78,47,390,19,130,453,108,27,711,813,730,444,412,283,196,690,123,14,128,26,250,389,650,236,200,65,51,4,34,183,297,73 }, -{ 34,250,297,80,472,64,495,17,311,3,148,45,667,61,176,53,243,27,90,161,469,141,483,151,62,128,29,4,58,56,5,231 }, -{ 51,23,33,13,551,77,102,326,421,21,523,120,5,899,453,692,202,153,308,615,115,958,450,401,791,68,221,93,475,18,403,4 }, -{ 98,223,393,363,411,1,478,834,664,156,284,691,447,791,914,293,354,724,697,9,807,541,759,51,18,421,48,264,948,586,195,848 }, -{ 7,14,107,232,16,92,2,60,46,5,359,121,24,526,220,620,135,1,172,21,126,314,132,77,18,75,32,278,12,23,52,38 }, -{ 32,76,2,1,21,72,241,14,5,48,292,89,476,45,720,270,179,90,17,214,148,38,50,29,129,155,350,46,290,227,123,464 }, -{ 15,515,700,753,13,23,33,77,51,4,102,0,32,202,1,11,128,82,117,141,40,5,110,8,3,90,137,21,10,318,403,165 }, -{ 66,6,69,2,1,74,14,135,278,267,380,24,29,97,67,38,103,75,7,388,324,25,52,150,87,83,189,357,335,108,204,172 }, -{ 152,4,339,59,79,471,188,11,77,94,128,33,529,377,12,111,102,202,452,402,216,99,13,542,51,40,474,37,64,291,23,961 }, -{ 15,515,700,753,1,0,196,13,33,2,77,5,23,102,3,10,9,7,217,4,6,153,117,177,14,457,115,12,40,730,11,134 }, -{ 17,209,45,106,207,5,255,119,62,2,61,3,263,742,306,655,425,378,32,56,29,136,84,80,311,58,186,240,243,383,14,21 }, -{ 120,260,450,15,1,23,817,13,515,523,326,5,700,51,82,31,202,64,21,753,318,93,32,269,98,33,351,77,102,125,457,165 }, -{ 116,492,268,93,23,206,203,0,551,918,13,51,8,22,417,940,120,10,499,31,949,791,125,523,165,473,341,730,421,959,401,391 }, -{ 15,515,700,753,165,13,0,1,197,23,4,82,120,2,180,12,260,719,8,3,386,117,5,523,901,11,341,51,10,9,141,351 }, -{ 14,24,69,7,2,66,108,1,67,6,36,398,18,267,150,97,29,38,83,149,65,74,28,0,189,71,388,16,273,124,46,22 }, -{ 330,96,523,335,367,662,141,839,1,922,372,615,244,717,269,443,418,352,403,692,217,854,752,180,36,64,498,576,349,201,98,284 }, -{ 184,90,257,205,245,229,57,152,769,17,524,5,32,497,45,432,619,2,452,266,4,106,1,21,179,59,76,3,460,292,381,128 }, -{ 7,14,16,2,46,5,70,107,87,13,58,307,92,32,38,23,202,0,172,24,18,21,60,128,77,35,20,10,9,4,171,112 }, -{ 7,66,140,16,14,92,97,69,267,172,189,24,380,2,35,60,298,451,230,135,314,74,150,71,38,357,6,330,67,423,21,443 }, -{ 121,167,354,132,18,446,147,101,212,146,407,16,55,35,647,191,20,271,199,68,60,259,463,107,9,126,363,7,195,43,14,411 }, -{ 76,90,179,32,205,21,184,460,257,288,45,245,316,5,57,152,241,2,358,1,229,72,524,148,48,769,17,4,12,38,14,720 }, -{ 147,259,178,878,427,465,581,198,786,798,142,534,325,929,20,362,35,132,107,376,43,5,279,77,49,146,70,202,590,771,33,14 }, -{ 473,93,450,778,141,30,855,466,144,203,330,530,88,523,459,372,201,617,839,704,254,321,934,326,39,36,82,717,332,213,559,403 }, -{ 523,475,51,899,730,453,23,719,403,33,457,13,421,386,4,120,117,196,102,153,15,801,450,817,515,260,202,11,700,99,165,125 }, -{ 15,1,13,515,0,2,700,5,23,753,4,3,341,317,10,115,180,11,33,64,217,77,117,165,197,7,6,365,9,141,102,134 }, -{ 19,4,119,40,33,202,27,84,102,56,77,73,504,485,26,494,757,63,862,59,23,300,25,12,128,11,5,13,342,880,469,6 }, -{ 32,20,2,13,5,21,23,6,12,38,43,29,64,7,95,51,61,207,48,147,90,178,17,182,49,0,115,202,52,362,37,22 }, -{ 339,188,11,79,4,94,377,12,99,111,542,102,37,33,474,51,471,40,453,152,77,13,59,403,342,23,117,57,475,134,128,38 }, -{ 34,128,283,176,495,231,318,432,503,275,529,527,161,53,3,202,56,291,585,469,73,17,14,412,57,27,80,245,250,381,402,51 }, -{ 15,515,13,700,1,217,141,120,23,180,753,115,365,51,317,341,77,260,0,291,110,137,202,5,21,269,64,36,349,2,4,10 }, -{ 13,15,961,515,700,753,4,12,2,457,3,11,197,51,37,569,115,23,5,0,99,10,1,134,6,111,165,33,72,40,38,79 }, -{ 15,515,700,753,13,1,0,2,23,33,5,3,10,4,9,115,7,102,6,51,12,217,77,11,40,457,569,341,117,317,14,719 }, -{ 5,76,2,32,292,214,45,1,129,519,123,179,90,710,17,29,460,72,14,207,21,249,58,205,464,263,618,48,6,245,3,257 }, -{ 72,76,32,4,21,12,38,23,99,54,89,3,14,17,51,57,11,90,13,488,179,2,59,148,45,37,5,115,401,1,10,421 }, -{ 98,223,393,1,834,264,284,791,724,293,478,772,697,909,363,682,905,447,541,821,411,51,421,9,807,48,765,31,730,96,386,410 }, -{ 341,13,509,8,23,638,165,901,762,10,569,242,391,197,873,642,506,499,629,961,15,180,116,456,206,546,417,1,338,457,515,867 }, -{ 1,2,5,50,14,38,46,114,0,36,29,22,218,65,86,96,137,21,133,285,12,10,323,181,17,58,51,23,67,7,28,6 }, -{ 481,878,202,13,5,23,182,32,269,21,1,318,77,142,557,494,141,33,640,137,70,291,2,51,260,415,929,403,120,58,4,259 }, -{ 15,515,700,753,1,4,13,0,2,5,341,3,11,180,134,12,10,317,197,365,33,21,23,165,117,6,77,7,217,37,32,498 }, -{ 25,119,19,6,26,42,27,17,4,790,45,814,2,469,483,84,122,1,0,33,32,128,76,80,611,113,73,56,5,240,202,77 }, -{ 14,2,7,1,24,0,65,6,16,69,67,22,124,28,108,5,18,36,86,10,38,46,66,398,289,168,12,83,21,23,610,13 }, -{ 51,23,128,13,15,202,12,120,33,64,141,82,10,515,0,403,700,3,1,99,117,269,153,165,753,5,318,197,102,260,2,137 }, -{ 16,35,24,0,9,18,7,1,68,69,50,71,103,65,67,189,133,23,28,13,60,537,149,335,75,21,64,5,114,2,12,14 }, -{ 754,803,133,576,880,543,2,1,657,50,14,38,46,5,29,67,218,36,58,171,52,96,24,103,775,0,114,83,181,54,65,45 }, -{ 21,32,5,3,2,17,14,72,76,1,12,23,38,51,4,54,10,0,89,13,99,137,45,36,421,115,543,11,22,128,221,48 }, -{ 434,384,268,144,855,940,617,206,332,116,93,911,959,282,203,137,141,489,44,120,10,110,244,36,98,31,269,253,367,417,160,9 }, -{ 15,2,1,0,13,515,5,700,3,23,180,217,141,10,753,4,117,6,77,33,64,7,11,197,352,317,341,134,165,115,12,9 }, -{ 2,113,6,25,1,0,29,4,7,833,5,45,32,61,128,19,77,151,74,145,64,42,14,210,655,106,59,177,27,17,21,738 }, -{ 116,268,918,203,551,31,8,692,206,791,403,499,417,93,940,421,0,23,22,120,13,523,44,51,299,473,959,1,10,475,202,125 }, -{ 107,126,132,612,362,279,20,146,259,493,199,121,590,43,660,147,35,376,939,60,941,534,683,5,0,953,16,7,49,649,595,470 }, -{ 15,515,700,753,13,1,0,23,2,33,77,4,3,51,5,102,115,10,9,341,6,7,11,342,217,12,120,180,40,317,141,8 }, -{ 53,27,17,161,469,378,73,527,19,136,383,250,495,56,862,26,62,84,80,106,200,4,34,14,440,297,3,128,585,5,129,123 }, -{ 17,45,209,106,5,207,243,454,119,255,2,263,186,290,29,3,21,62,425,61,84,32,58,56,48,408,655,136,306,14,742,227 }, -{ 4,152,59,452,128,79,216,11,339,471,529,188,94,77,202,12,291,33,318,377,99,51,23,5,402,349,32,474,102,13,205,111 }, -{ 15,515,700,753,1,0,2,13,3,5,23,4,180,51,115,9,6,12,7,8,197,33,10,961,901,77,141,752,110,22,120,341 }, -{ 951,752,638,811,351,642,180,253,10,341,197,901,110,873,8,244,15,352,165,898,143,515,564,762,499,55,365,700,82,753,141,854 }, -{ 6,262,197,350,74,26,115,509,841,583,165,38,21,13,47,50,235,19,33,324,453,4,308,196,138,99,64,903,675,1,223,130 }, -{ 125,165,391,23,386,221,21,13,558,457,51,867,197,115,401,758,77,97,308,791,7,180,48,120,963,451,743,89,603,134,403,450 }, -{ 1,14,2,5,16,46,7,38,58,24,50,0,69,48,35,67,54,18,12,75,21,45,513,155,430,37,270,9,61,163,223,32 }, -{ 23,13,51,0,12,15,4,1,115,2,515,453,10,457,5,3,202,21,165,700,403,11,37,64,77,401,9,197,753,59,475,99 }, -{ 129,84,17,56,27,495,19,548,80,123,162,378,3,504,161,469,618,73,40,53,4,26,205,184,106,183,62,6,257,128,862,12 }, -{ 28,9,22,49,109,1,67,0,39,55,168,158,83,36,35,86,420,194,185,159,95,105,69,208,272,103,50,114,2,254,169,30 }, -{ 242,391,8,456,116,13,23,492,341,165,867,51,499,457,479,638,338,509,719,10,1,642,417,762,401,93,206,268,901,569,22,197 }, -{ 211,162,248,130,57,4,41,556,507,266,183,152,305,361,11,129,62,229,38,471,514,313,157,300,377,3,440,128,123,328,339,59 }, -{ 7,92,97,16,298,140,60,126,14,35,279,314,232,246,43,230,508,173,71,107,423,24,150,779,20,189,66,18,607,21,0,653 }, -{ 15,515,700,753,1,0,2,13,23,5,3,180,51,901,6,4,7,12,9,115,8,457,165,82,120,197,10,64,141,341,22,117 }, -{ 0,18,403,25,523,74,6,24,42,91,22,102,13,51,49,193,475,681,95,85,730,64,899,397,273,750,247,673,32,805,757,288 }, -{ 56,0,18,65,33,554,84,343,64,6,90,561,22,19,899,108,27,63,289,475,240,467,370,32,233,214,24,123,95,287,28,194 }, -{ 31,98,127,9,0,44,293,105,395,299,49,242,28,22,599,116,1,284,276,125,456,685,763,159,272,623,23,935,393,144,201,137 }, -{ 1,5,2,14,38,46,50,48,21,7,58,45,270,61,155,171,0,290,69,32,29,54,67,16,24,666,663,17,37,75,502,52 }, -{ 23,51,13,453,457,12,719,4,15,99,401,2,961,3,11,730,475,515,0,1,165,115,629,700,14,17,403,40,5,33,37,64 }, -{ 968,967,966,965,964,963,962,961,960,959,958,957,956,955,954,953,952,951,950,949,948,947,946,945,944,943,942,941,940,939,938,937 }, -{ 2,1,14,29,67,103,6,46,52,75,24,133,38,218,83,309,36,108,70,114,96,5,238,74,25,26,220,236,65,50,69,87 }, -{ 7,71,16,92,24,60,14,97,150,140,35,189,149,298,18,230,43,508,2,423,69,0,38,314,66,279,399,517,251,20,232,273 }, -{ 23,1,120,51,13,202,77,141,260,21,15,5,128,82,2,450,269,165,102,318,48,32,137,515,125,64,12,115,351,180,33,7 }, -{ 77,13,33,23,64,51,4,102,141,128,40,1,2,202,0,6,177,115,137,15,59,10,11,7,269,22,515,180,318,3,700,95 }, -{ 101,9,18,363,264,520,411,604,676,682,905,271,16,821,167,0,621,364,39,100,121,118,166,781,647,252,1,848,447,265,404,60 }, -{ 144,203,326,382,166,418,93,88,96,822,1,141,859,77,744,438,110,269,921,367,521,274,100,39,494,120,403,473,217,576,13,291 }, -{ 13,21,180,125,5,23,191,32,18,16,146,199,115,24,165,118,0,225,22,1,60,197,64,901,375,241,48,12,408,71,522,818 }, -{ 15,515,700,753,13,0,23,8,1,51,82,102,2,33,4,9,180,165,5,77,10,110,12,197,120,260,18,326,351,403,22,457 }, -{ 33,77,102,64,13,23,128,51,141,202,1,40,0,2,117,10,15,4,6,318,269,134,22,515,180,115,177,153,137,196,3,700 }, -{ 174,544,104,525,74,0,151,25,6,624,29,66,2,636,81,45,204,177,64,416,7,644,5,138,222,319,355,77,22,122,789,216 }, -{ 141,304,372,352,291,947,177,269,128,954,77,349,217,202,64,318,498,437,102,864,86,13,115,180,137,5,210,197,32,950,678,7 }, -{ 161,200,53,17,714,27,34,73,472,62,585,56,440,383,136,78,527,19,4,3,106,361,14,250,80,514,377,84,322,390,862,548 }, -{ 32,76,72,21,38,14,89,54,12,37,2,241,5,428,17,1,181,221,350,45,3,4,449,90,148,179,99,292,794,770,477,46 }, -{ 33,23,128,64,141,13,77,51,102,202,2,15,1,3,40,10,5,153,269,515,165,0,117,196,180,318,6,700,137,134,120,22 }, -{ 96,137,30,0,9,39,840,202,669,406,141,530,613,1,180,88,22,160,679,576,28,403,31,219,49,228,829,100,36,15,10,856 }, -{ 180,141,352,1,15,752,115,0,217,365,2,515,13,901,341,317,23,4,197,700,269,5,3,31,753,244,21,165,253,202,51,44 }, -{ 1,2,67,0,28,50,83,65,14,46,103,114,24,38,36,9,69,5,18,7,22,133,55,218,16,124,29,54,96,160,12,480 }, -{ 180,115,352,317,365,217,752,901,141,15,341,1,515,253,700,0,753,873,2,197,31,137,165,244,4,120,160,44,98,5,202,3 }, -{ 5,32,347,49,13,21,95,713,23,1,77,33,60,64,107,4,126,928,296,850,0,241,197,102,652,195,180,534,165,153,379,10 }, -{ 341,180,365,901,317,115,15,752,515,700,217,873,753,82,0,110,197,141,951,165,1,564,13,351,253,12,10,3,2,4,308,244 }, -{ 17,45,21,3,106,5,155,38,227,32,2,209,62,54,12,243,14,181,552,587,46,540,207,794,37,48,430,119,255,221,770,29 }, -{ 16,24,35,18,7,0,50,1,9,14,75,69,2,5,12,21,60,13,67,71,23,48,10,108,223,181,189,103,46,64,92,51 }, -{ 127,13,98,165,308,23,286,293,258,51,219,395,197,115,301,401,31,391,22,105,457,170,239,276,55,338,629,116,180,479,509,569 }, -{ 539,213,748,840,957,669,30,466,88,217,144,251,863,190,137,93,230,228,679,352,317,203,617,321,258,530,160,219,96,831,816,689 }, -{ 5,48,1,21,2,14,0,36,12,38,32,54,430,181,50,270,72,99,281,45,17,10,46,22,37,218,67,3,290,76,23,51 }, -{ 13,23,0,4,33,51,2,115,141,1,77,217,180,10,9,317,3,102,11,5,15,197,7,202,22,165,40,64,515,6,341,31 }, -{ 13,15,117,515,23,12,37,134,165,700,38,54,457,753,51,64,153,197,14,10,33,82,961,0,99,89,115,719,141,3,4,1 }, -{ 5,21,2,3,1,32,14,12,48,17,0,10,51,23,38,22,4,72,13,54,36,45,137,76,99,114,86,37,11,64,540,430 }, -{ 202,128,77,318,291,33,269,102,275,141,494,342,40,678,0,177,20,210,402,7,4,5,137,6,13,450,403,32,49,120,23,22 }, -{ 1,2,24,14,67,46,69,50,38,103,16,18,75,35,83,29,52,96,5,108,0,7,54,71,149,394,236,309,70,133,220,58 }, -{ 15,515,1,700,0,2,753,13,23,5,180,3,51,4,165,457,12,197,115,6,7,21,9,141,8,901,33,82,120,77,10,110 }, -{ 0,28,65,14,67,2,124,24,1,9,7,69,55,154,36,16,46,114,175,35,83,22,429,18,109,149,68,189,108,336,251,133 }, -{ 56,162,403,3,129,775,99,161,17,40,527,33,880,4,14,128,475,12,548,23,102,202,361,117,34,184,383,200,183,196,64,53 }, -{ 151,2,29,58,112,45,186,113,5,70,52,1,311,6,315,66,61,7,74,27,631,17,80,87,287,243,209,227,14,491,19,869 }, -{ 6,1,74,2,75,29,25,66,26,70,52,138,67,324,357,42,19,220,14,85,87,108,38,451,309,103,24,69,380,135,114,65 }, -{ 15,515,700,13,23,0,1,120,753,51,180,2,260,202,5,141,77,102,9,450,115,21,197,165,7,137,110,33,12,269,901,4 }, -{ 5,45,17,2,14,46,48,38,181,50,155,3,186,54,61,29,21,227,281,80,540,106,12,400,52,1,58,32,328,171,209,487 }, -{ 16,18,265,121,158,35,60,9,39,7,329,105,252,68,24,1,132,167,159,22,0,49,286,101,21,146,23,327,120,709,5,14 }, -{ 108,467,283,56,389,650,123,412,33,177,899,475,216,453,269,349,619,65,51,730,403,670,23,196,523,128,84,13,401,789,503,543 }, -{ 514,3,11,377,328,4,361,507,57,403,14,880,130,485,176,215,236,38,152,102,211,56,62,757,54,585,300,556,34,555,40,229 }, -{ 3,555,62,266,130,99,507,139,514,12,152,229,215,305,57,40,440,33,403,471,38,56,475,14,361,313,775,328,196,548,123,23 }, -{ 120,202,318,15,77,13,1,450,33,269,515,260,5,128,494,51,23,700,102,141,40,753,326,403,817,137,523,21,177,922,342,7 }, -{ 15,1,515,23,0,13,700,2,51,753,180,5,165,21,197,12,3,120,115,4,141,6,9,7,457,33,386,202,82,8,31,341 }, -{ 15,180,515,82,351,700,10,317,753,115,217,365,141,898,33,901,13,23,110,854,752,77,1,197,4,341,143,36,64,352,102,9 }, -{ 104,289,66,707,214,90,712,64,97,173,20,0,414,194,874,43,32,7,568,560,65,38,426,312,715,192,376,74,835,5,324,147 }, -{ 84,56,0,554,63,65,453,249,123,643,18,26,847,475,511,403,416,561,524,289,370,73,9,19,45,42,719,194,27,467,33,730 }, -{ 21,346,13,350,308,826,197,101,352,68,570,0,165,23,9,841,115,100,509,694,221,230,35,217,569,88,124,749,1,777,212,154 }, -{ 16,92,7,24,60,18,35,140,126,14,50,71,46,330,2,75,246,5,121,267,571,1,230,309,220,0,9,64,146,236,54,108 }, -{ 82,15,515,898,365,700,180,33,341,753,77,901,10,115,55,351,21,5,1,4,13,102,36,217,2,165,752,120,197,117,11,317 }, -{ 16,24,35,18,69,71,140,1,103,7,189,68,0,50,9,108,2,133,60,267,230,46,149,67,167,118,92,14,75,21,191,38 }, -{ 60,71,16,18,7,20,43,118,35,68,375,28,608,0,175,566,154,92,14,149,628,33,22,13,2,10,279,23,107,356,55,117 }, -{ 187,258,871,295,201,434,219,224,489,384,268,110,261,839,44,699,93,116,36,131,141,228,144,160,940,567,244,406,137,574,98,253 }, -{ 66,7,97,172,192,712,232,324,204,74,43,448,387,426,568,20,526,107,104,135,356,729,173,0,22,5,32,95,2,64,500,560 }, -{ 15,515,700,753,1,4,0,341,13,3,134,2,5,33,11,77,12,10,23,197,365,901,7,40,217,32,21,6,51,180,961,37 }, -{ 0,28,24,9,35,65,16,124,68,55,109,154,7,39,22,149,158,14,175,1,49,252,18,71,2,168,289,419,108,420,67,101 }, -{ 7,16,14,92,2,46,140,24,220,35,38,60,75,1,50,18,87,54,5,126,29,52,278,262,314,107,71,21,172,135,330,394 }, -{ 7,92,16,14,172,126,2,60,140,35,135,314,278,46,24,38,232,107,330,66,5,18,150,246,230,97,52,1,121,563,279,21 }, -{ 6,26,235,53,297,436,27,19,25,73,113,445,90,214,65,42,64,289,250,611,624,32,45,648,614,17,85,491,34,122,200,416 }, -{ 352,141,1,217,854,752,351,180,244,36,110,661,82,258,816,160,295,219,567,224,230,269,922,144,260,268,93,201,137,116,489,202 }, -{ 16,60,35,18,126,107,68,191,92,121,7,14,598,20,493,279,167,446,118,0,28,43,463,55,24,212,375,566,9,150,575,21 }, -{ 15,1,515,2,4,13,0,700,3,5,23,753,341,77,51,115,33,11,180,10,197,141,6,165,7,901,102,40,9,202,217,12 }, -{ 23,51,13,202,21,5,1,120,15,137,128,125,32,2,12,141,33,165,64,515,403,318,700,48,180,7,6,450,115,523,475,260 }, -{ 131,716,224,371,219,187,737,616,385,254,9,98,105,924,31,258,836,39,127,578,49,916,44,761,272,137,944,159,0,242,442,22 }, -{ 15,515,700,1,753,2,5,0,4,13,3,180,11,141,197,10,341,217,33,134,165,6,77,7,317,12,352,64,365,32,102,40 }, -{ 66,74,7,173,174,29,192,2,222,20,226,43,353,52,712,6,0,138,500,204,97,145,64,104,426,673,355,90,25,5,65,87 }, -{ 5,259,786,534,590,493,279,49,13,581,465,21,929,35,941,132,147,32,23,612,362,626,107,121,178,0,146,61,48,939,10,18 }, -{ 2,14,16,7,278,69,135,140,46,24,267,35,92,38,1,189,29,52,309,60,66,75,71,172,74,357,18,87,67,6,230,5 }, -{ 165,13,308,197,391,23,401,15,51,457,180,509,115,569,3,629,961,719,34,758,317,734,14,29,46,2,17,901,38,453,5,217 }, -{ 1,22,2,14,0,28,7,168,67,49,65,24,36,95,5,105,55,35,12,46,69,16,114,159,194,50,10,9,158,83,164,109 }, -{ 34,453,3,196,130,14,322,11,47,51,377,236,361,4,730,153,514,711,57,440,62,17,161,108,176,59,485,56,162,412,202,117 }, -{ 18,16,21,23,48,13,24,35,121,5,156,60,51,1,7,132,141,221,163,115,0,271,447,340,363,202,125,71,2,781,22,698 }, -{ 165,13,457,23,197,961,629,569,341,41,12,38,401,901,54,51,115,17,15,509,421,37,62,45,719,57,32,328,117,758,157,99 }, -{ 2,1,77,141,33,64,3,102,0,23,13,5,128,10,6,15,180,202,269,40,51,515,7,165,137,117,318,4,700,153,197,352 }, -{ 68,212,0,124,101,9,154,16,562,191,21,149,65,24,35,1,118,167,818,350,520,100,722,841,264,71,13,302,478,23,375,346 }, -{ 98,23,48,598,13,293,541,21,125,121,51,807,0,31,35,259,126,7,386,1,223,783,10,107,199,20,221,144,342,963,49,64 }, -{ 21,13,5,586,1,23,167,48,33,781,647,49,165,18,51,271,77,32,761,118,0,82,391,22,146,141,459,31,197,156,115,4 }, -{ 2,1,5,61,29,7,58,45,14,6,425,32,70,52,290,738,207,21,72,112,66,76,655,17,186,46,64,263,38,0,128,87 }, -{ 39,265,9,100,1,333,363,101,18,411,447,254,166,310,31,98,264,30,639,404,156,286,16,93,593,203,272,682,0,905,44,821 }, -{ 6,2,1,19,29,51,26,108,25,74,5,23,14,114,13,386,133,103,42,66,453,70,309,138,719,324,65,38,64,96,52,75 }, -{ 20,43,356,107,49,858,595,7,414,359,0,5,392,319,97,612,422,819,14,376,173,246,22,470,147,427,230,92,197,33,683,95 }, -{ 0,9,68,35,65,67,114,101,28,1,124,175,336,69,154,103,83,24,189,133,39,16,50,7,2,149,55,251,18,345,230,36 }, -{ 23,13,51,15,0,1,515,115,165,2,5,12,700,202,4,21,141,457,753,197,10,3,180,120,32,9,318,11,453,64,6,269 }, -{ 121,195,60,16,126,107,98,271,146,407,132,35,1,167,199,223,493,191,279,20,18,5,43,7,21,92,48,393,0,362,212,467 }, -{ 31,44,299,116,393,144,492,456,268,22,105,0,367,918,384,434,127,489,98,9,963,125,242,948,1,28,206,49,36,51,93,293 }, -{ 23,13,457,51,165,401,719,758,197,453,961,629,308,14,15,12,730,3,386,569,391,29,739,515,34,828,832,901,115,514,670,341 }, -{ 105,36,131,22,180,115,341,127,169,1,9,31,64,98,44,365,317,141,272,143,160,55,219,86,197,776,239,187,0,535,13,752 }, -{ 1,6,2,14,66,25,29,5,108,67,65,114,19,38,26,52,74,7,24,18,69,86,36,388,64,51,17,83,23,46,42,75 }, -{ 51,386,23,453,719,13,730,6,457,670,758,19,401,165,2,475,47,26,899,14,108,17,1,5,197,29,894,754,236,74,27,285 }, -{ 252,18,9,101,121,16,132,0,419,167,364,60,604,35,265,363,146,271,39,158,68,109,28,329,848,24,647,907,682,159,212,55 }, -{ 283,503,128,432,26,193,63,269,789,529,102,122,389,275,678,6,25,318,445,4,342,27,573,605,177,862,643,291,216,57,235,59 }, -{ 2,1,29,75,69,52,14,6,46,74,87,7,220,226,278,38,135,66,267,70,16,262,25,24,380,324,357,140,67,394,97,222 }, -{ 97,298,69,7,66,140,189,24,16,267,172,423,60,150,14,314,92,71,81,501,43,35,74,6,517,232,149,607,83,330,18,2 }, -{ 475,421,403,899,51,805,523,958,453,817,23,615,401,801,120,326,202,670,494,730,450,386,115,629,260,576,77,365,569,0,165,13 }, -{ 7,20,14,128,77,97,112,202,2,177,16,415,269,318,275,66,107,43,141,414,135,38,307,10,58,0,6,291,32,5,4,40 }, -{ 24,14,7,0,2,1,22,28,16,65,168,124,35,67,108,109,18,49,10,149,69,158,5,95,289,12,55,6,36,71,46,21 }, -{ 26,80,27,73,122,25,19,17,6,42,684,209,445,573,667,106,45,690,4,611,255,680,297,495,65,59,128,119,483,113,64,53 }, -{ 107,259,362,376,465,20,470,147,595,534,612,683,660,43,5,49,581,0,858,35,427,246,97,786,178,356,14,21,142,878,7,279 }, -{ 131,30,228,190,856,406,224,88,219,530,863,613,778,274,944,816,187,39,100,160,258,31,44,93,1,321,539,36,871,137,435,531 }, -{ 113,6,311,25,45,491,80,611,27,26,209,667,17,73,122,42,684,396,19,85,106,5,614,4,2,255,151,29,1,64,648,61 }, -{ 15,515,700,753,0,1,23,51,120,2,13,82,5,260,9,4,341,77,180,115,141,10,7,12,450,8,202,901,197,351,165,93 }, -{ 219,127,98,258,395,421,924,293,242,201,697,105,276,51,308,23,453,272,401,944,512,137,13,31,284,567,386,365,116,131,964,125 }, -{ 15,180,352,141,515,752,217,82,1,317,854,700,351,753,115,341,110,13,260,120,21,36,33,898,23,10,5,365,4,160,901,137 }, -{ 129,123,17,257,162,184,205,249,183,769,5,80,3,4,229,130,119,45,90,99,618,106,57,497,12,128,2,84,59,152,27,40 }, -{ 33,102,23,77,64,128,51,13,0,202,10,141,40,15,1,22,117,137,2,86,4,403,269,153,515,196,65,11,700,115,99,5 }, -{ 7,14,2,16,172,107,46,92,5,135,35,202,294,87,38,232,29,97,20,21,24,1,60,220,66,43,12,0,126,52,54,70 }, -{ 403,576,615,523,475,326,805,817,494,421,51,202,120,450,137,453,23,859,260,401,402,77,33,670,0,958,15,197,386,515,165,480 }, -{ 141,352,217,137,0,180,202,349,9,269,23,51,115,291,77,372,13,317,120,752,365,351,93,22,2,341,64,10,82,854,28,18 }, -{ 1,23,13,51,202,141,5,165,21,15,120,180,64,2,197,125,33,102,12,7,137,515,48,128,269,318,93,700,0,403,9,4 }, -{ 25,151,6,145,122,29,174,45,113,74,4,665,42,138,2,614,416,287,19,348,746,0,66,26,1,7,64,243,311,396,81,624 }, -{ 30,190,254,166,100,382,731,829,88,131,264,795,9,93,625,274,438,1,578,613,716,31,44,39,530,36,616,921,265,203,160,77 }, -{ 132,5,21,13,1,23,32,195,379,687,156,121,626,296,48,70,850,146,51,82,883,771,35,49,652,407,60,4,260,0,845,33 }, -{ 9,254,0,49,272,131,39,159,688,101,105,578,518,158,286,28,327,333,68,224,252,219,344,16,22,1,716,31,30,228,24,890 }, -{ 16,7,35,60,18,20,14,68,9,0,28,118,43,92,126,55,107,2,101,154,24,71,5,202,121,109,22,252,21,97,1,621 }, -{ 15,515,700,753,13,1,341,2,0,4,3,5,11,23,10,33,117,12,901,197,6,134,77,8,165,317,21,365,217,7,17,40 }, -{ 78,19,444,47,26,390,27,453,130,813,108,730,711,65,412,122,51,680,113,235,690,196,630,283,128,236,14,64,73,53,200,445 }, -{ 2,7,29,5,61,6,45,1,66,113,112,14,52,315,738,128,32,151,74,16,20,64,70,21,592,0,25,4,425,43,491,222 }, -{ 145,112,74,66,6,29,26,70,19,396,25,87,2,287,135,151,138,222,5,226,42,122,7,307,1,644,45,58,113,651,635,632 }, -{ 92,16,7,60,126,24,140,35,14,232,18,121,246,71,46,267,172,150,107,314,132,146,230,2,278,108,330,199,236,5,38,572 }, -{ 13,115,197,538,569,341,98,55,165,127,365,762,219,286,844,23,170,206,734,638,535,901,169,253,629,0,873,509,180,10,332,258 }, -{ 58,151,74,53,287,27,29,396,6,70,2,73,5,52,112,26,651,1,297,113,17,75,19,45,334,445,145,34,315,549,436,331 }, -{ 214,289,90,874,104,751,64,65,312,835,204,249,750,194,74,81,875,32,519,288,348,0,174,247,636,715,138,192,784,6,524,280 }, -{ 9,39,28,35,30,0,166,49,1,175,439,158,64,346,36,101,67,364,86,88,274,100,168,55,23,10,420,22,190,141,505,180 }, -{ 341,901,15,515,700,753,1,365,10,0,569,180,2,197,115,31,165,3,5,4,44,22,317,13,9,951,23,253,116,143,762,93 }, -{ 120,202,77,450,260,15,128,318,102,515,494,13,817,700,269,5,403,51,1,33,23,753,82,326,141,342,291,137,21,523,351,32 }, -{ 13,115,241,64,180,32,125,197,165,4,118,22,21,23,16,247,237,28,225,191,95,141,167,5,0,341,288,35,459,18,177,24 }, -{ 16,24,35,14,1,2,7,69,18,46,60,50,267,140,71,189,108,38,75,92,0,5,9,230,67,21,309,335,54,236,394,220 }, -{ 15,515,700,753,898,180,901,341,197,638,10,165,33,1,115,4,77,365,317,13,102,217,117,0,5,2,253,3,82,569,21,752 }, -{ 193,523,18,84,56,730,233,65,4,817,90,33,643,403,91,511,453,240,59,11,214,51,719,196,153,475,32,123,64,847,102,561 }, -{ 112,29,151,2,74,6,66,7,222,145,287,45,5,624,52,25,113,416,58,122,19,70,186,204,4,87,644,549,337,884,32,0 }, -{ 13,0,23,2,1,15,33,3,77,515,141,5,4,217,10,51,64,180,700,115,6,117,11,7,753,40,102,165,197,22,317,153 }, -{ 28,0,1,67,65,9,2,114,83,69,103,50,36,22,55,24,46,14,124,109,35,7,16,38,133,160,389,323,18,12,154,5 }, -{ 121,132,18,167,271,146,101,363,621,9,411,647,16,354,520,60,212,932,1,806,55,0,195,446,68,35,31,364,777,252,407,118 }, -{ 26,6,85,396,122,624,25,19,42,445,64,648,573,416,174,680,665,214,45,348,90,65,194,145,113,881,138,289,112,436,297,544 }, -{ 16,146,18,92,24,199,60,71,121,126,35,108,156,953,271,674,132,7,32,640,360,246,649,118,21,95,5,517,14,9,1,314 }, -{ 51,13,23,453,475,730,719,15,457,403,64,115,33,95,4,523,3,12,21,6,899,102,5,128,401,202,11,141,308,515,22,125 }, -{ 151,396,6,53,27,113,58,26,73,112,74,287,45,29,297,19,145,70,138,445,315,436,34,2,17,573,5,61,549,491,1,80 }, -{ 223,1,888,774,260,98,269,385,349,202,96,141,421,622,730,863,318,697,87,453,393,418,922,834,751,5,163,335,120,291,352,30 }, -{ 16,60,92,35,126,121,7,150,246,18,107,1,598,24,167,195,14,97,71,279,98,441,191,199,517,146,356,223,298,271,230,0 }, -{ 22,1,105,28,239,170,0,55,95,31,36,301,2,320,98,127,9,49,44,64,35,67,10,86,5,12,109,23,168,13,21,312 }, -{ 2,6,5,207,292,76,1,119,45,32,17,29,61,306,790,58,240,106,14,64,214,151,476,710,7,72,84,128,4,179,70,25 }, -{ 51,23,221,254,115,13,438,530,125,48,21,39,541,960,386,49,1,613,15,840,228,308,627,131,688,401,5,326,421,158,165,83 }, -{ 1,5,2,0,12,22,21,36,10,14,48,86,23,13,32,54,3,4,28,65,51,50,137,37,208,114,9,38,17,7,281,202 }, -{ 363,23,447,182,296,340,1,93,698,478,379,156,284,144,18,269,21,98,141,70,668,411,664,658,110,914,67,937,180,691,335,291 }, -{ 17,32,45,498,41,115,180,197,106,62,54,38,546,165,13,155,468,509,341,243,241,217,542,15,57,536,428,51,117,721,292,129 }, -{ 32,95,64,246,22,92,180,13,5,652,125,241,638,237,7,49,4,126,21,115,197,296,888,316,0,165,774,23,16,392,1,534 }, -{ 15,515,700,753,33,341,13,217,4,141,77,23,180,317,1,10,102,351,82,115,40,5,854,21,137,11,352,901,365,117,197,0 }, -{ 15,120,1,82,93,217,515,260,77,141,13,110,700,351,352,23,180,753,21,854,202,317,64,349,269,51,165,137,5,128,291,36 }, -{ 13,23,51,141,77,0,33,4,115,64,2,10,102,202,217,128,1,177,269,11,7,22,6,21,32,9,180,40,15,3,165,318 }, -{ 478,264,1,520,98,724,9,682,223,664,21,759,13,772,604,100,23,363,411,48,821,5,0,905,909,447,31,265,88,101,166,39 }, -{ 20,29,7,2,77,416,6,128,33,5,0,113,104,32,43,13,491,66,23,21,102,51,74,210,202,525,64,318,10,81,174,14 }, -{ 2,1,5,14,7,58,61,29,45,290,46,38,52,21,32,270,6,592,425,0,75,155,16,48,17,50,72,70,207,24,263,663 }, -{ 80,6,17,209,106,26,483,113,19,469,255,25,378,27,495,833,45,64,161,2,61,667,76,742,32,90,445,5,814,65,887,119 }, -{ 98,223,393,1,354,834,195,791,447,697,284,293,360,541,781,156,51,807,18,664,421,411,163,668,48,31,591,765,883,386,948,23 }, -{ 679,141,816,36,93,406,876,144,228,137,1,180,669,21,332,251,5,269,116,187,96,351,202,752,317,64,203,831,574,466,855,345 }, -{ 15,515,700,13,1,753,2,0,23,341,3,5,4,10,51,11,33,165,6,7,115,197,12,64,180,153,217,77,9,569,901,317 }, -{ 13,23,202,51,5,21,403,15,120,64,1,450,128,141,12,523,33,165,494,125,2,515,269,7,48,102,318,95,260,180,453,197 }, -{ 16,18,24,60,71,92,146,246,199,35,140,7,9,118,121,108,167,230,126,132,0,640,156,14,68,133,267,360,649,271,64,55 }, -{ 269,141,678,177,202,77,128,318,33,947,40,120,291,349,102,137,64,352,210,864,461,498,13,342,196,23,275,450,954,0,205,111 }, -{ 16,24,92,18,71,60,35,7,108,191,167,246,140,14,126,21,1,68,150,118,149,388,399,9,273,0,121,796,230,48,212,517 }, -{ 2,14,1,29,46,75,52,70,69,171,38,7,58,163,16,5,24,220,67,112,223,54,50,409,155,35,267,186,151,334,394,140 }, -{ 9,252,100,265,166,39,88,404,329,0,1,520,382,812,101,593,264,274,604,676,30,118,68,553,18,664,363,23,639,865,21,411 }, -{ 16,18,35,24,0,60,158,7,22,68,14,49,109,159,55,9,28,71,2,10,5,105,1,118,329,13,344,23,92,20,21,126 }, -{ 15,13,515,700,23,0,753,1,51,2,4,10,77,5,3,197,115,165,961,202,9,457,180,12,141,22,33,120,6,11,318,31 }, -{ 160,93,251,137,317,1,180,36,120,217,345,752,617,352,332,10,96,531,498,318,365,202,141,269,816,341,901,679,143,35,83,968 }, -{ 6,25,42,128,19,59,122,4,85,26,611,27,269,233,45,0,343,91,318,80,11,177,283,73,33,614,2,77,64,138,445,216 }, -{ 95,64,74,7,32,81,51,204,0,20,237,65,56,38,91,23,207,180,347,343,29,6,511,52,49,10,25,18,554,370,14,312 }, -{ 202,120,326,260,450,817,494,318,137,403,128,77,523,553,859,5,704,1,15,23,13,576,7,16,615,51,682,291,515,0,21,234 }, -{ 20,43,107,356,362,126,595,92,359,7,422,319,493,16,858,5,392,246,414,683,60,0,35,945,441,21,259,819,49,97,279,173 }, -{ 25,42,6,77,33,102,0,122,4,690,29,483,210,27,21,19,2,300,18,648,680,119,117,59,1,10,342,12,26,153,91,684 }, -{ 31,44,299,116,125,242,456,599,22,393,0,144,492,28,268,1,9,963,301,105,367,36,127,170,384,434,206,98,918,10,13,93 }, -{ 410,521,686,367,662,88,335,321,201,96,98,772,144,1,934,921,443,435,284,274,264,551,120,897,44,100,33,225,744,418,909,960 }, -{ 142,178,878,234,132,786,195,202,77,416,147,929,146,522,167,259,687,639,450,271,626,481,590,5,198,212,771,49,0,465,315,427 }, -{ 254,39,131,9,272,0,578,716,310,224,30,49,105,827,518,829,166,333,616,228,613,846,101,219,1,31,890,98,159,938,252,100 }, -{ 230,699,854,473,450,351,831,137,855,217,352,704,800,202,251,498,160,144,206,203,317,201,253,752,418,141,1,332,82,180,443,36 }, -{ 403,202,475,453,494,23,51,77,318,402,13,33,128,102,137,141,120,342,269,0,450,4,899,576,40,421,275,117,217,177,196,64 }, -{ 23,44,98,182,291,144,116,39,110,141,96,82,905,70,367,264,125,93,77,411,120,1,658,202,100,415,107,363,197,30,447,105 }, -{ 15,515,1,13,700,23,77,120,0,753,51,180,202,141,260,5,21,115,2,137,128,9,450,197,365,269,12,326,110,102,318,7 }, -{ 0,32,18,95,207,577,193,29,61,104,64,784,715,102,693,887,81,91,583,671,403,5,52,474,397,180,138,49,37,344,38,263 }, -{ 0,101,9,68,252,16,100,39,166,364,124,24,154,265,212,88,18,35,329,419,28,118,71,30,65,158,191,55,1,694,21,676 }, -{ 16,24,191,18,35,71,167,118,149,68,212,9,0,1,21,108,101,92,60,375,302,7,589,755,124,674,350,48,562,246,13,363 }, -{ 2,14,69,24,1,67,46,16,38,103,29,267,7,35,189,135,278,71,108,18,83,309,52,6,149,388,75,236,60,0,150,66 }, -{ 13,1,23,0,4,2,51,15,180,33,3,115,5,515,141,10,77,700,11,9,197,341,202,165,217,102,22,7,753,317,365,6 }, -{ 447,1,698,411,31,363,98,5,919,4,156,125,759,691,13,64,459,354,44,21,48,293,30,914,478,225,82,120,2,922,848,839 }, -{ 854,82,351,217,141,180,352,15,515,752,1,700,317,898,753,244,10,21,922,115,77,36,4,260,64,110,372,13,5,365,120,11 }, -{ 0,1,4,13,5,2,82,33,3,120,10,23,9,11,77,260,21,102,8,31,40,6,351,51,64,450,22,117,93,110,7,457 }, -{ 51,13,403,23,12,475,1,2,21,5,453,523,115,202,817,7,0,99,3,6,450,120,494,64,22,95,49,899,10,37,32,141 }, -{ 180,752,352,141,498,864,317,217,9,0,115,237,230,39,30,197,83,1,930,64,35,365,372,13,579,88,702,36,101,901,482,21 }, -{ 16,24,0,7,22,18,28,35,14,158,71,2,109,60,1,168,49,154,124,68,10,55,92,118,159,9,5,747,95,105,65,6 }, -{ 15,515,700,753,0,23,1,13,341,51,120,77,141,4,137,33,260,82,202,9,180,5,351,2,291,10,11,901,21,115,40,128 }, -{ 24,68,35,149,18,16,0,7,9,14,189,108,69,65,67,1,71,2,118,28,140,101,114,336,230,124,175,133,46,55,251,154 }, -{ 13,308,197,115,125,9,165,237,391,23,509,569,546,28,49,629,22,338,317,254,749,180,468,159,903,386,217,352,558,39,36,734 }, -{ 64,90,32,217,77,4,141,216,172,312,128,13,86,33,597,147,352,95,5,115,875,22,59,11,102,14,182,437,97,177,874,707 }, -{ 1,22,36,0,105,28,2,67,95,49,55,5,239,12,86,9,83,170,312,64,31,21,23,10,164,50,114,159,208,13,7,320 }, -{ 9,18,16,0,159,105,101,252,49,310,24,68,35,39,265,272,7,1,60,28,455,890,329,557,118,286,55,137,327,167,5,13 }, -{ 129,123,214,249,618,17,5,257,205,184,460,76,2,162,769,245,90,106,128,45,119,1,183,4,3,12,179,64,6,229,99,209 }, -{ 51,453,719,457,23,13,730,899,475,386,4,15,11,12,670,196,515,523,961,401,153,3,700,99,753,117,403,32,120,165,57,0 }, -{ 173,66,192,204,20,74,104,636,7,43,289,426,825,712,560,214,81,750,65,97,707,0,90,414,64,348,32,500,22,861,95,6 }, -{ 13,23,1,51,5,21,141,120,202,15,165,2,515,180,12,125,0,64,82,700,197,269,32,48,260,128,115,93,9,137,33,753 }, -{ 200,34,322,78,472,390,27,714,19,14,136,161,453,176,236,444,59,3,62,128,108,57,283,862,73,53,47,17,412,813,4,56 }, -{ 33,347,66,204,426,498,56,172,97,95,5,681,546,22,10,0,135,180,4,241,19,174,6,353,263,21,7,370,42,197,27,808 }, -{ 131,224,219,187,385,371,258,442,254,737,31,98,836,127,924,944,44,871,908,716,39,827,201,574,116,137,36,1,276,242,578,616 }, -{ 1,15,2,180,4,141,13,515,0,5,3,115,700,901,341,23,217,352,753,51,197,77,317,33,365,752,165,21,6,7,269,93 }, -{ 370,91,718,74,81,510,397,66,636,240,355,84,138,511,18,278,6,681,701,289,90,5,214,582,64,104,0,643,192,65,750,32 }, -{ 15,515,700,753,13,120,1,0,165,2,197,23,260,180,4,82,51,386,8,5,12,10,3,141,351,341,326,9,450,7,64,6 }, -{ 32,2,76,5,1,292,72,45,476,214,21,241,29,14,17,48,129,90,179,460,464,123,290,148,519,205,3,263,249,38,710,89 }, -{ 13,165,115,17,197,569,23,509,457,45,32,41,106,180,62,38,659,734,155,536,341,629,961,873,587,54,431,37,391,99,405,428 }, -{ 68,24,35,16,0,101,9,124,154,71,149,65,18,175,28,118,7,55,302,108,92,14,22,346,1,39,429,252,375,364,10,67 }, -{ 0,9,1,68,230,65,35,69,83,23,101,13,141,67,217,352,21,39,16,88,28,124,212,100,115,154,51,64,30,36,10,317 }, -{ 100,265,88,909,410,382,812,593,1,213,321,30,252,230,352,264,9,166,689,39,676,98,21,466,724,639,478,217,13,48,553,101 }, -{ 113,61,198,904,43,0,5,37,899,325,20,59,33,523,204,725,817,389,470,329,222,40,174,58,22,453,690,848,122,104,788,105 }, -{ 16,24,141,18,7,0,71,140,35,269,75,352,12,9,108,217,5,330,60,64,199,70,22,13,486,246,318,133,65,50,23,498 }, -{ 271,167,121,60,18,191,146,199,16,1,446,132,575,212,463,354,126,35,598,566,727,98,107,21,608,955,640,407,5,24,223,68 }, -{ 15,515,115,217,700,13,317,753,141,180,33,23,110,120,4,341,82,10,1,260,365,36,64,854,351,21,51,352,137,77,40,0 }, -{ 173,7,97,356,43,107,20,387,729,104,426,232,560,595,359,392,414,707,885,81,5,0,66,858,612,49,861,14,22,32,819,230 }, -{ 15,515,700,753,13,23,51,82,0,33,165,120,196,4,1,2,197,453,260,351,180,12,40,8,386,110,5,326,9,141,217,457 }, -{ 9,100,120,30,77,795,137,82,202,39,264,827,578,127,0,166,373,318,18,326,141,260,1,450,731,31,33,395,217,291,341,254 }, -{ 14,2,67,1,24,69,0,28,65,7,46,18,114,108,36,83,38,398,9,16,124,133,103,154,50,55,22,267,29,160,35,547 }, -{ 14,7,69,24,66,16,2,267,189,67,71,150,140,97,18,60,172,35,6,1,38,149,388,92,83,135,108,74,462,380,29,36 }, -{ 15,515,700,753,1,13,2,0,4,341,5,3,23,365,11,117,180,10,12,33,134,115,77,197,217,165,6,7,317,102,21,9 }, -{ 1,22,0,12,5,2,36,28,21,10,86,13,23,49,128,9,95,51,55,96,208,141,48,202,4,137,37,64,105,3,50,7 }, -{ 605,630,63,123,736,650,65,108,444,368,561,389,19,25,42,619,122,194,183,27,53,33,84,26,297,813,114,73,256,235,249,216 }, -{ 127,39,9,0,31,371,98,254,1,385,395,44,30,836,187,131,100,116,284,578,299,166,28,21,737,16,276,272,23,49,137,935 }, -{ 2,61,6,29,45,151,1,655,7,207,32,5,112,425,17,76,833,4,14,64,58,106,119,25,113,128,72,52,70,21,292,790 }, -{ 2,5,17,14,3,29,23,27,13,401,46,6,51,58,1,453,45,53,34,52,133,19,236,26,181,114,99,366,151,108,218,38 }, -{ 31,22,170,1,301,44,127,98,36,28,55,105,239,0,338,116,512,299,293,125,86,10,242,395,2,13,9,64,841,23,95,685 }, -{ 1,21,2,14,5,32,48,50,38,270,46,76,290,72,45,54,17,0,155,221,263,207,37,281,430,3,89,12,181,408,36,67 }, -{ 17,106,119,378,84,240,62,80,383,136,306,3,56,790,742,5,207,504,64,440,32,128,45,2,123,209,14,4,61,57,297,667 }, -{ 13,15,1,515,23,2,0,700,4,115,3,51,5,10,753,180,33,341,217,11,165,317,365,197,6,77,40,64,22,9,7,117 }, -{ 772,335,96,744,1,367,662,686,652,897,303,264,521,31,225,410,141,520,260,116,64,44,321,98,144,88,919,966,340,269,349,284 }, -{ 1,0,5,28,36,2,12,22,83,67,65,50,24,14,9,96,21,218,18,114,48,281,54,10,7,160,181,103,37,23,133,99 }, -{ 25,6,145,42,138,81,174,348,525,544,26,74,85,280,287,648,746,91,66,0,29,396,204,64,636,90,122,194,355,104,65,233 }, -{ 16,24,0,18,28,158,7,35,49,22,68,159,55,1,14,109,105,2,9,71,65,154,124,95,424,344,60,239,118,577,21,10 }, -{ 352,854,699,230,93,689,137,144,217,160,251,36,669,202,351,120,617,855,752,203,332,82,450,180,141,748,831,30,258,201,1,816 }, -{ 15,13,515,700,1,2,0,753,23,5,4,3,51,33,10,115,11,317,217,77,180,341,117,165,6,134,197,153,64,9,102,7 }, -{ 104,20,43,173,66,319,0,77,202,7,198,5,97,580,355,74,2,204,174,52,712,234,426,155,102,192,32,4,500,337,226,904 }, -{ 13,23,15,51,1,515,0,2,5,700,141,4,753,165,115,12,3,21,457,10,180,269,32,6,197,202,9,7,120,11,77,33 }, -{ 15,515,700,753,0,1,13,2,23,115,4,317,8,3,5,51,9,341,10,217,22,365,33,457,6,180,77,901,197,120,18,7 }, -{ 15,515,700,753,1,0,2,3,4,13,5,141,23,16,82,217,457,10,365,180,9,317,51,21,269,898,64,202,11,12,318,341 }, -{ 2,5,1,14,50,38,29,17,114,46,133,3,45,21,58,171,181,36,218,12,6,52,0,48,137,65,361,23,155,4,285,51 }, -{ 0,68,9,65,101,124,35,212,16,149,154,100,24,1,114,336,67,589,252,39,71,189,69,562,18,13,30,398,118,88,265,264 }, -{ 1,2,14,22,0,7,67,65,28,36,24,46,168,5,86,69,38,16,49,12,289,10,194,50,83,114,95,6,18,23,55,158 }, -{ 13,23,15,51,515,0,700,4,1,753,2,10,115,961,457,12,33,11,3,5,197,9,165,77,102,403,453,40,64,22,37,59 }, -{ 15,515,700,753,0,1,2,13,23,5,51,901,8,9,180,3,7,82,4,120,12,10,719,341,6,31,141,457,197,22,115,93 }, -{ 100,252,88,101,0,265,9,724,48,1,21,352,213,676,410,382,321,230,30,329,593,909,39,812,553,217,23,689,520,264,166,419 }, -{ 2,5,1,58,171,14,46,50,29,52,45,38,186,155,67,54,151,281,334,61,48,96,17,181,103,400,502,227,21,223,12,69 }, -{ 23,120,13,1,202,141,51,21,165,128,260,15,5,269,137,64,33,180,82,318,93,197,77,326,515,125,110,700,450,2,32,48 }, -{ 341,197,10,901,13,15,8,638,569,515,479,23,180,873,700,165,143,642,0,961,753,951,1,115,509,499,116,12,498,242,82,206 }, -{ 15,1,23,13,515,21,120,51,2,141,202,700,5,180,165,0,753,197,12,7,33,260,352,137,269,4,82,128,48,9,110,6 }, -{ 2,29,50,58,1,6,5,52,14,262,17,46,27,53,151,34,171,74,324,26,38,309,45,113,19,96,287,396,223,67,73,583 }, -{ 13,23,141,51,4,202,0,115,77,2,33,217,5,317,180,64,10,269,3,9,15,21,1,128,102,137,318,11,352,515,22,31 }, -{ 1,67,0,24,50,5,14,18,16,69,2,9,103,35,83,12,96,28,54,7,58,223,21,46,281,48,65,181,22,38,36,108 }, -{ 13,23,141,51,77,64,202,115,33,102,128,4,0,269,10,21,217,32,180,318,9,137,2,11,22,291,7,177,16,31,165,197 }, -{ 317,115,180,365,873,498,217,341,13,752,482,197,569,352,1,901,36,23,457,468,165,346,546,143,509,134,579,876,868,2,332,21 }, -{ 184,257,205,229,152,17,57,497,266,432,452,524,5,619,381,32,4,90,2,12,313,128,45,59,245,106,3,471,129,769,339,214 }, -{ 13,23,1,0,15,2,4,515,51,3,10,33,5,700,115,180,753,77,11,365,341,217,9,6,197,7,102,165,317,40,22,64 }, -{ 626,70,771,687,379,846,767,761,518,878,82,481,31,786,49,591,178,163,407,44,87,13,845,125,590,371,195,120,98,557,937,351 }, -{ 264,1,410,909,772,897,686,521,335,478,98,96,691,639,100,44,284,382,31,321,744,88,914,724,662,765,223,9,682,363,0,367 }, -{ 13,23,1,2,0,15,51,515,5,10,4,33,115,77,180,700,3,141,217,40,6,753,317,197,64,165,7,11,102,9,341,22 }, -{ 141,77,13,64,269,23,115,21,318,217,5,202,102,33,137,2,15,291,177,51,48,180,32,4,515,352,128,7,0,10,96,11 }, -{ 13,15,23,515,51,0,700,753,1,2,4,10,33,11,961,453,115,40,457,14,12,3,9,5,165,401,197,77,22,21,64,102 }, -{ 1,22,0,36,2,31,5,12,13,105,28,9,49,86,141,21,23,95,128,55,44,115,170,10,164,98,180,4,137,239,83,51 }, -{ 100,101,88,0,252,9,265,30,21,39,759,724,213,329,321,13,419,68,562,382,676,352,694,35,553,410,1,166,909,593,230,23 }, -{ 539,88,30,190,321,530,840,144,669,435,957,748,778,100,96,418,203,213,1,131,410,228,466,274,36,382,219,863,613,83,822,352 }, -{ 7,97,92,173,298,107,43,314,232,140,16,356,20,387,729,362,126,359,246,14,230,501,426,441,0,5,560,66,104,779,35,60 }, -{ 2,14,7,1,58,5,46,16,38,70,75,45,24,155,29,0,21,52,61,163,220,50,69,270,35,48,32,171,18,6,64,54 }, -{ 447,411,363,664,647,98,621,1,354,271,223,478,18,777,781,936,360,759,167,132,121,48,21,156,9,195,118,293,23,691,13,264 }, -{ 2,1,14,65,36,67,0,7,46,22,69,5,38,24,28,6,83,29,86,114,168,50,124,208,12,18,108,10,194,484,103,16 }, -{ 421,386,51,791,730,958,165,801,23,453,697,403,615,13,221,523,24,899,401,326,551,670,576,102,18,33,125,77,566,115,203,197 }, -{ 104,319,422,945,0,81,20,43,715,32,784,693,879,7,397,74,306,207,52,681,671,2,61,173,6,636,904,95,887,5,18,192 }, -{ 2,29,1,46,14,52,70,262,6,26,50,67,75,96,309,38,103,112,58,19,5,163,145,83,74,220,223,357,24,69,331,25 }, -{ 786,929,590,771,687,626,941,178,465,259,70,5,13,21,35,534,107,518,132,49,878,48,146,121,379,279,31,767,147,195,108,125 }, -{ 5,2,186,45,17,29,48,50,14,61,46,155,400,1,227,171,52,58,38,54,430,209,80,281,3,106,536,311,181,243,21,502 }, -{ 0,32,64,95,817,494,342,403,207,202,194,389,453,365,312,180,316,5,690,237,848,577,450,61,102,523,475,289,49,241,65,482 }, -{ 23,13,51,15,202,515,1,0,2,12,115,4,700,5,165,753,77,457,21,141,128,10,3,64,403,32,197,318,9,11,33,117 }, -{ 119,2,6,76,5,17,45,292,306,240,32,1,19,84,64,61,4,209,710,80,26,0,106,27,214,25,128,129,29,179,3,113 }, -{ 15,515,700,1,753,0,13,23,180,120,51,2,5,33,165,197,9,450,7,260,115,523,4,12,202,141,82,77,21,102,8,6 }, -{ 6,138,74,280,222,85,66,226,25,42,87,204,64,337,29,135,95,174,235,26,145,65,19,32,792,294,112,52,256,2,5,22 }, -{ 39,9,0,101,333,158,49,252,310,254,272,68,16,18,159,286,344,455,30,109,627,327,24,105,419,100,364,22,35,1,329,709 }, -{ 21,5,32,14,2,1,38,72,76,54,17,3,48,221,270,0,45,46,12,181,37,89,36,50,540,290,430,10,4,741,99,23 }, -{ 120,137,202,269,141,260,318,450,922,494,77,291,82,15,5,351,128,1,515,326,64,854,700,352,342,21,753,678,349,32,523,90 }, -{ 16,24,68,35,71,18,149,118,191,167,9,0,212,124,65,246,7,67,140,189,399,101,133,60,1,108,267,114,69,92,695,154 }, -{ 28,0,9,67,1,22,109,36,55,65,194,114,39,83,49,69,2,35,103,50,158,208,86,420,168,289,505,24,7,185,5,323 }, -{ 147,325,198,427,142,178,202,798,5,376,20,318,259,43,120,450,77,234,534,904,470,465,878,725,329,14,315,0,260,858,70,61 }, -{ 28,0,65,9,109,1,55,67,35,22,24,39,289,7,175,14,114,2,158,124,420,194,68,16,336,36,49,69,168,570,154,505 }, -{ 141,180,13,115,1,23,4,269,2,202,0,317,217,51,15,5,21,352,77,318,3,752,197,10,165,365,137,341,9,515,33,64 }, -{ 15,515,700,0,753,1,2,13,23,9,51,5,4,901,33,7,8,3,12,93,180,120,197,6,82,341,10,141,22,260,457,115 }, -{ 6,74,66,1,25,75,324,380,278,26,138,85,135,500,87,42,220,841,97,350,29,19,70,226,38,21,52,606,235,889,2,14 }, -{ 13,23,51,12,4,15,453,0,457,1,403,165,115,3,11,2,64,5,401,10,515,37,202,33,40,32,99,475,197,700,308,17 }, -{ 788,180,5,83,693,319,314,4,32,21,17,11,817,3,510,498,33,12,24,104,814,120,64,117,306,804,523,450,288,160,102,43 }, -{ 15,1,515,13,2,700,23,0,4,753,3,341,5,51,33,11,10,6,77,7,115,102,180,165,141,9,197,217,901,40,12,64 }, -{ 101,18,9,167,520,16,0,118,60,212,604,364,694,24,55,252,68,917,264,35,1,121,146,363,39,100,806,5,21,166,191,28 }, -{ 13,23,0,33,51,141,77,4,64,2,115,217,9,102,7,202,21,10,180,3,15,128,5,269,6,32,11,16,165,352,22,317 }, -{ 66,135,97,74,172,6,278,7,204,324,138,174,29,85,2,87,25,140,92,192,52,38,802,69,448,500,808,620,22,1,280,232 }, -{ 2,24,69,6,97,7,1,0,14,298,423,66,67,29,150,25,189,267,124,74,607,18,36,81,172,33,83,38,52,273,71,809 }, -{ 0,9,158,39,68,49,109,16,24,333,35,344,101,22,159,254,272,30,124,65,28,18,793,154,310,252,327,105,627,419,286,55 }, -{ 15,515,700,10,753,33,77,180,4,341,1,197,13,115,365,23,901,317,5,102,11,217,165,117,141,40,2,3,253,21,134,55 }, -{ 100,166,382,478,265,264,88,39,98,1,404,274,9,593,724,921,639,438,363,682,411,31,30,812,96,447,821,905,252,0,223,435 }, -{ 19,283,436,53,297,26,813,432,27,128,42,25,390,503,122,736,73,123,605,63,389,529,630,250,690,65,381,444,6,269,108,216 }, -{ 33,202,13,128,494,0,51,141,269,1,4,2,102,180,15,137,65,95,6,450,77,40,117,59,457,36,196,817,134,86,49,515 }, -{ 18,16,60,68,101,167,191,118,35,121,9,212,55,0,126,1,24,647,199,146,520,107,628,621,363,71,21,28,346,92,806,727 }, -{ 352,230,217,531,160,93,36,669,748,854,689,258,137,871,728,699,752,251,574,202,373,351,228,120,717,260,144,219,268,82,816,1 }, -{ 15,515,700,753,13,23,0,51,8,1,4,82,165,77,110,33,10,180,5,202,11,22,120,12,9,197,115,93,403,141,40,351 }, -{ 0,9,101,217,35,88,352,100,39,175,30,68,562,752,13,317,252,115,180,197,64,1,83,141,65,213,165,230,194,36,28,265 }, -{ 32,64,5,470,288,90,21,147,0,95,356,22,20,519,835,312,819,18,247,182,11,97,13,4,387,49,43,298,316,48,107,7 }, -{ 16,14,24,1,7,2,35,0,5,50,18,69,46,12,58,75,9,67,70,163,21,54,38,48,223,502,281,37,140,60,28,10 }, -{ 18,265,9,252,39,195,354,411,1,16,132,101,121,682,167,203,5,363,146,593,35,333,21,271,60,13,100,0,156,327,7,520 }, -{ 4,13,1,115,141,23,2,180,5,0,51,3,217,202,77,15,33,269,341,318,317,21,165,515,11,10,197,365,9,137,64,352 }, -{ 7,24,16,14,71,35,18,92,140,189,108,149,68,60,69,150,2,230,97,66,0,458,67,1,65,251,38,314,388,267,36,46 }, -{ 1,22,31,36,0,2,44,5,141,105,180,170,12,64,13,98,86,55,23,21,28,164,115,127,10,125,128,4,9,239,352,197 }, -{ 66,7,97,2,192,20,52,43,135,74,560,107,104,0,750,147,414,29,580,173,324,376,226,194,77,174,204,38,356,64,16,470 }, -{ 0,101,9,68,35,124,24,65,39,16,252,100,154,166,28,364,149,694,30,88,55,346,1,419,71,439,265,289,22,21,175,158 }, -{ 39,9,100,30,127,0,737,856,31,836,827,254,98,931,166,88,93,1,44,190,131,228,120,395,625,385,863,264,219,373,110,28 }, -{ 5,17,2,3,21,45,14,155,48,32,38,1,328,181,186,46,23,51,12,61,227,29,106,54,99,133,62,832,13,37,514,543 }, -{ 131,613,30,224,228,716,274,100,827,406,219,856,39,190,31,88,1,166,9,44,829,863,931,93,0,187,625,924,127,98,137,254 }, -{ 352,217,64,141,752,269,180,864,437,372,954,115,498,177,77,349,317,318,579,291,947,197,247,0,23,717,237,304,128,457,776,678 }, -{ 141,217,180,317,352,115,15,341,1,23,13,365,515,752,2,64,0,5,498,700,372,165,51,237,753,77,244,197,137,4,21,253 }, -{ 5,2,17,14,1,45,3,38,21,29,181,58,46,48,50,133,114,171,61,155,32,6,186,281,361,12,36,54,4,13,52,514 }, -{ 6,2,119,25,790,4,45,483,655,113,1,29,76,26,32,19,887,17,128,0,292,833,59,61,106,64,77,814,14,151,84,42 }, -{ 13,23,2,0,51,4,1,115,141,3,5,180,33,217,77,9,202,11,7,15,10,6,317,64,21,197,515,165,102,128,22,269 }, -{ 13,23,51,202,21,5,1,15,141,165,120,2,115,12,32,0,515,128,318,64,125,700,4,403,197,453,180,457,3,7,10,6 }, -{ 9,39,31,30,0,127,1,44,100,131,98,187,385,276,88,442,219,908,254,116,49,166,935,28,201,36,141,827,137,299,284,21 }, -{ 22,49,28,109,9,185,105,95,1,131,159,272,36,67,86,254,39,55,35,0,505,31,83,169,208,327,286,98,168,535,312,708 }, -{ 5,1,2,21,0,12,48,22,10,14,36,3,32,17,23,54,86,38,4,51,13,37,137,50,65,281,114,45,28,99,58,202 }, -{ 141,269,352,82,217,351,180,854,372,922,752,1,15,260,317,318,515,202,64,700,120,349,954,753,77,35,67,717,898,137,365,115 }, -{ 144,203,613,418,326,406,96,669,137,679,1,228,494,822,840,317,36,83,855,160,817,859,856,816,217,831,345,93,876,77,44,251 }, -{ 15,13,515,23,700,753,51,1,33,0,202,21,2,5,180,141,120,165,217,82,12,117,4,352,269,197,115,32,3,9,134,260 }, -{ 13,23,115,1,0,51,4,77,2,33,15,141,10,5,341,180,515,3,217,202,9,365,317,64,700,102,11,165,197,22,753,7 }, -{ 531,943,373,160,728,93,206,260,261,559,964,269,717,535,332,384,365,295,110,533,141,10,180,352,244,137,120,55,959,564,36,253 }, -{ 1,31,36,170,22,55,44,10,86,64,127,0,2,98,301,164,740,338,237,143,5,125,116,13,242,141,299,180,23,169,105,12 }, -{ 13,23,141,77,51,4,64,32,33,202,115,269,102,128,21,0,177,180,318,90,40,10,7,5,137,15,217,352,9,291,59,22 }, -{ 202,120,260,318,77,15,450,269,1,82,33,23,141,13,51,515,351,128,700,5,64,326,137,21,102,110,753,494,93,523,817,165 }, -{ 523,899,102,33,730,15,23,403,719,117,153,13,515,51,475,4,700,5,453,817,196,753,494,40,202,120,1,2,450,457,17,421 }, -{ 202,403,494,450,120,817,523,475,318,453,33,402,128,77,13,51,260,576,342,102,15,23,515,4,700,5,82,753,326,210,137,615 }, -{ 2,29,112,66,7,52,70,151,58,87,135,5,74,226,307,6,14,186,1,45,549,172,644,25,113,287,46,155,334,64,294,97 }, -{ 1,77,349,291,260,120,652,102,5,39,64,269,9,33,340,342,13,98,888,698,23,296,100,318,51,202,87,137,638,128,50,850 }, -{ 1,13,15,2,0,4,23,515,5,141,180,3,700,341,115,51,753,269,77,901,197,352,217,33,21,11,365,6,165,202,7,317 }, -{ 7,14,16,2,46,5,70,58,1,38,24,35,92,163,0,75,21,18,50,54,140,12,87,220,155,69,171,23,60,9,13,307 }, -{ 2,29,66,226,135,7,87,74,52,278,6,75,222,220,294,70,97,1,145,25,172,262,324,38,69,112,331,92,5,14,140,26 }, -{ 15,515,700,753,33,77,117,4,1,102,134,40,153,11,13,196,217,21,5,51,23,115,32,3,2,202,141,137,128,291,48,177 }, -{ 15,217,82,515,351,141,317,1,13,700,260,77,110,120,115,854,23,753,180,51,21,36,137,922,5,64,365,352,291,202,93,341 }, -{ 31,190,30,373,120,110,863,88,44,127,908,856,260,318,82,98,93,187,836,717,935,39,442,131,141,254,228,219,1,968,77,116 }, -{ 23,13,308,9,165,115,51,21,401,125,49,39,197,391,159,254,217,743,28,438,773,629,558,386,341,95,32,317,876,679,109,166 }, -{ 49,5,43,165,7,0,21,104,125,22,173,422,64,13,623,102,20,18,314,95,91,141,23,31,193,51,391,900,779,558,92,232 }, -{ 1,4,13,2,15,0,23,515,77,3,341,33,5,700,115,51,202,753,141,180,11,10,102,217,6,901,40,7,197,318,317,365 }, -{ 93,843,295,120,36,160,206,261,10,137,567,110,384,141,943,268,201,332,258,55,1,180,64,116,44,144,699,203,282,31,260,373 }, -{ 81,7,192,426,43,173,172,104,879,91,5,712,715,526,6,97,568,95,448,66,33,861,560,32,49,20,0,636,232,825,2,22 }, -{ 475,403,51,453,33,102,13,23,494,202,0,196,15,77,153,18,4,117,515,450,318,22,730,128,700,421,65,753,269,402,134,817 }, -{ 141,269,260,318,202,120,352,349,82,351,1,5,854,137,64,291,15,922,180,851,32,77,515,372,21,700,7,217,13,947,33,753 }, -{ 15,515,700,753,1,13,0,2,4,23,3,5,180,115,197,12,51,165,217,10,961,9,6,141,352,21,8,7,33,77,457,120 }, -{ 39,166,9,30,0,101,274,404,252,333,190,100,158,438,310,88,68,265,656,21,1,530,329,344,49,539,625,254,13,131,48,419 }, -{ 0,1,28,9,22,12,65,83,67,36,5,2,50,55,96,109,16,13,24,23,21,238,49,18,285,160,128,39,69,114,7,323 }, -{ 15,515,700,1,0,753,23,2,13,51,5,180,115,6,3,9,197,12,457,120,7,165,901,82,4,21,8,141,31,33,719,341 }, -{ 9,39,30,0,28,166,22,49,180,1,352,35,317,158,88,141,498,131,115,345,752,128,228,217,100,83,219,930,13,251,365,36 }, -{ 5,61,45,2,80,29,311,209,6,17,58,1,151,106,454,667,243,70,52,496,287,592,255,738,64,74,483,14,27,32,112,19 }, -{ 31,125,22,44,299,456,685,242,599,116,170,28,0,1,492,393,506,144,558,10,268,301,239,23,13,36,963,367,55,206,105,95 }, -{ 187,258,926,574,839,93,228,860,406,219,871,160,137,531,224,116,120,902,669,201,36,131,44,144,843,533,318,384,442,1,434,268 }, -{ 7,107,75,16,87,9,64,177,24,18,291,77,349,141,60,232,23,0,51,269,132,14,5,21,70,32,678,112,126,121,71,947 }, -{ 15,515,700,753,1,0,2,13,5,3,23,180,4,115,901,51,6,8,961,9,7,10,12,82,197,22,141,341,33,120,365,457 }, -{ 13,23,51,1,5,202,2,12,15,21,165,141,0,115,3,4,32,515,197,10,180,318,128,120,64,700,6,7,403,269,457,137 }, -{ 1,2,0,77,64,3,141,13,33,15,23,10,6,102,5,515,180,4,117,7,700,165,11,217,269,40,753,115,128,17,197,134 }, -{ 345,531,332,269,260,317,717,752,373,351,180,352,728,82,10,365,160,533,217,143,498,251,244,93,341,901,36,1,141,898,55,864 }, -{ 16,7,33,189,92,77,388,60,140,35,102,24,14,1,230,21,150,117,733,314,18,915,71,13,108,134,5,64,69,2,98,22 }, -{ 142,202,234,178,5,786,77,49,70,0,416,450,639,878,1,48,21,929,147,259,315,455,198,120,12,481,163,113,846,329,318,22 }, -{ 81,715,192,0,173,712,681,104,636,91,74,20,750,370,7,718,95,879,22,43,825,560,422,64,207,49,172,18,397,10,426,319 }, -{ 13,23,15,51,515,0,700,753,4,1,961,2,10,115,457,11,33,453,3,5,9,40,12,197,165,77,401,475,64,102,22,569 }, -{ 64,297,5,445,95,61,250,311,80,34,17,312,45,2,86,472,58,14,180,53,22,151,869,738,247,237,29,1,128,165,21,288 }, -{ 16,24,18,71,7,35,118,92,14,154,60,68,0,149,28,302,124,150,55,175,2,9,97,1,429,20,108,273,22,65,43,126 }, -{ 195,360,156,771,132,163,626,687,591,371,883,146,121,846,70,586,379,13,293,98,407,48,761,296,354,18,31,1,55,49,21,105 }, -{ 202,13,77,23,318,33,51,0,4,141,5,21,217,32,291,102,64,128,15,10,9,494,269,137,515,403,1,31,117,700,120,317 }, -{ 7,192,97,81,172,66,426,173,43,715,712,232,861,879,104,330,568,298,74,893,885,526,387,825,92,140,91,14,636,6,5,448 }, -{ 2,1,14,6,67,7,65,69,24,36,66,124,108,83,38,29,22,86,0,18,484,5,28,46,12,10,25,302,150,16,650,74 }, -{ 33,77,13,202,102,4,0,23,128,51,141,64,318,22,403,269,137,10,15,40,494,117,32,59,11,153,1,21,177,196,515,115 }, -{ 269,141,318,77,349,291,217,202,33,15,372,304,515,22,102,177,351,700,352,120,5,137,10,317,260,753,64,851,854,403,49,21 }, -{ 6,74,66,85,138,25,87,42,135,26,226,222,280,29,75,500,220,278,792,70,19,2,1,294,204,64,32,145,853,112,52,174 }, -{ 9,0,105,39,16,18,1,101,272,31,127,98,24,518,333,252,310,28,68,737,846,371,158,916,938,49,30,7,286,35,301,455 }, -{ 2,1,14,67,24,46,83,108,69,29,38,103,114,36,6,133,18,0,28,7,65,52,236,75,50,398,5,309,135,16,278,160 }, -{ 22,1,28,105,49,95,0,2,67,55,36,239,168,159,65,35,14,170,320,164,9,7,10,5,114,12,83,64,194,109,24,301 }, -{ 7,66,172,97,92,140,232,568,298,14,192,314,16,380,135,324,2,330,74,38,357,448,126,69,35,5,107,6,387,60,204,572 }, -{ 2,29,1,14,5,6,46,133,114,50,52,26,218,108,19,13,366,236,27,45,70,17,58,23,86,51,137,65,112,38,25,12 }, -{ 6,1,74,25,2,26,29,66,42,19,75,14,388,67,108,70,52,85,103,65,38,138,357,133,114,594,324,516,603,96,309,69 }, -{ 22,9,28,1,36,49,109,105,86,95,131,31,169,39,0,141,272,159,44,55,98,180,13,30,185,115,83,128,352,137,64,208 }, -{ 203,822,326,23,77,859,403,494,576,39,473,182,33,1,691,100,18,217,13,817,411,447,363,102,93,966,96,478,291,704,310,120 }, -{ 15,515,700,753,33,77,117,4,102,134,115,153,13,1,40,217,11,196,341,2,5,3,23,317,365,0,21,291,32,51,12,569 }, -{ 15,515,700,753,13,0,23,1,8,82,51,165,197,120,180,2,9,33,4,110,5,12,10,260,351,386,141,7,457,475,93,901 }, -{ 1,23,13,15,51,0,21,2,515,5,141,180,120,165,700,202,197,4,753,12,33,9,7,82,115,93,3,352,260,6,110,48 }, -{ 15,515,700,753,0,1,2,5,3,4,8,13,180,341,10,23,7,6,9,51,77,197,961,115,165,82,120,31,22,202,457,217 }, -{ 559,661,922,564,141,533,10,317,373,110,143,269,244,260,332,261,93,642,752,295,351,876,531,843,180,206,728,384,352,1,434,120 }, -{ 15,515,1,0,700,2,13,23,753,5,51,180,3,165,12,6,197,115,4,9,7,21,719,8,457,82,141,120,33,22,901,10 }, -{ 198,234,0,325,5,77,202,416,20,147,32,43,639,315,49,61,450,455,142,21,113,230,22,318,725,342,207,13,95,904,494,10 }, -{ 447,264,363,9,411,676,682,1,156,664,821,478,166,354,812,39,100,905,382,897,98,18,759,404,31,101,724,5,265,223,88,13 }, -{ 24,14,69,16,35,18,2,7,108,189,71,67,267,149,1,46,68,83,38,140,0,236,251,9,388,60,133,103,65,28,29,50 }, -{ 16,7,35,20,14,18,109,2,43,120,107,60,1,121,326,907,553,77,13,147,23,82,68,260,0,403,5,24,202,126,265,199 }, -{ 30,131,187,276,31,44,613,442,39,9,190,228,1,839,116,935,908,219,127,88,244,224,110,137,93,201,98,141,36,567,0,856 }, -{ 98,223,1,393,812,265,100,421,593,834,697,48,51,410,791,382,21,88,31,284,9,125,96,293,230,23,213,217,656,689,541,5 }, -{ 98,51,127,219,616,258,105,293,395,421,924,512,31,308,23,201,116,44,301,272,763,276,125,13,453,170,401,295,261,944,115,567 }, -{ 253,110,951,352,811,206,332,180,141,244,282,10,854,417,642,638,559,752,143,911,260,55,93,533,499,498,661,120,351,959,564,341 }, -{ 49,9,159,254,272,158,0,131,28,39,627,105,327,286,22,518,688,578,68,347,374,101,224,424,95,35,219,24,16,364,65,344 }, -{ 105,22,131,272,98,286,327,109,374,239,28,95,320,219,9,224,55,127,187,36,578,169,64,185,538,1,159,10,371,634,49,616 }, -{ 691,478,340,1,658,914,724,363,744,698,156,772,411,296,682,447,9,284,335,98,264,303,909,21,354,410,225,13,664,686,88,919 }, -{ 16,24,35,18,71,7,140,108,189,267,92,60,14,230,68,69,9,1,149,46,246,191,388,167,2,0,118,236,133,21,674,5 }, -{ 9,0,127,31,98,371,395,39,737,49,1,44,385,272,512,28,293,242,836,761,254,299,101,16,187,22,116,158,159,131,18,21 }, -{ 16,18,68,0,60,35,9,101,252,28,118,24,419,55,7,109,604,71,39,121,22,364,14,158,191,167,925,126,329,21,92,49 }, -{ 116,268,203,93,206,692,551,31,417,940,499,8,473,44,202,523,959,0,120,137,559,22,450,403,576,10,728,299,13,326,51,1 }, -{ 225,459,744,1,919,914,691,330,622,21,141,223,5,284,934,335,88,538,340,82,385,839,363,120,478,98,48,30,64,32,686,166 }, -{ 5,1,2,0,14,36,21,281,12,48,50,67,22,28,54,83,24,218,38,10,181,9,32,18,65,58,45,114,430,17,99,37 }, -{ 137,450,202,704,120,260,326,318,968,269,851,403,291,77,23,141,182,310,494,373,351,457,82,890,349,110,60,128,817,678,105,96 }, -{ 15,515,700,753,4,33,13,23,77,5,40,11,102,93,1,21,110,51,82,117,141,2,10,8,32,64,120,31,202,3,217,115 }, -{ 15,13,1,23,515,0,51,2,700,5,753,21,180,141,165,3,12,115,197,4,7,6,457,9,352,202,33,8,719,120,77,341 }, -{ 219,127,258,98,276,201,131,395,944,293,116,284,567,31,242,105,137,935,295,44,403,860,51,224,576,456,9,371,578,475,202,512 }, -{ 16,7,18,35,60,0,14,20,118,28,68,22,2,24,1,92,158,107,5,49,154,126,109,12,43,10,55,6,677,71,21,168 }, -{ 93,728,531,160,559,373,574,120,295,860,533,269,717,260,926,902,258,318,36,201,261,434,851,137,617,141,187,352,843,384,332,251 }, -{ 28,0,1,9,22,109,83,39,49,12,36,67,55,5,96,2,128,30,158,69,21,23,160,208,35,13,65,323,50,141,194,238 }, -{ 23,13,51,1,5,15,141,21,0,2,165,515,202,700,12,197,180,120,32,115,4,753,64,9,7,269,6,3,125,386,48,453 }, -{ 5,21,13,49,14,20,7,23,43,32,1,0,652,48,713,22,38,2,16,132,955,107,12,279,24,888,197,640,70,303,18,638 }, -{ 9,0,28,39,1,30,35,101,22,67,83,141,49,175,36,68,55,88,13,251,10,69,23,158,180,115,64,100,217,65,345,166 }, -{ 260,120,82,269,5,450,351,1,202,141,854,13,77,922,32,33,137,4,23,125,291,21,15,515,165,349,177,700,318,326,180,753 }, -{ 121,16,18,35,363,101,60,20,107,14,68,259,621,55,604,43,7,252,9,364,126,0,167,191,5,407,132,28,199,419,146,10 }, -{ 13,23,51,1,15,0,2,141,5,515,12,21,700,115,165,180,4,753,3,197,202,32,9,120,7,8,6,11,37,10,457,269 }, -{ 201,144,206,443,418,203,435,96,335,459,187,1,88,332,330,321,269,934,30,372,822,521,268,326,44,523,382,141,410,264,494,473 }, -{ 31,44,276,201,116,131,284,662,567,144,9,489,98,295,268,434,0,30,137,39,93,1,187,22,219,918,110,299,141,36,224,384 }, -{ 520,478,664,1,264,604,9,167,777,759,411,0,806,724,48,21,101,68,647,936,363,223,118,682,410,18,100,16,252,98,265,13 }, -{ 23,70,21,87,60,75,120,182,163,379,92,18,7,937,71,121,446,132,24,98,931,126,107,77,795,195,115,44,411,146,51,850 }, -{ 39,9,0,737,127,31,846,98,1,827,105,310,371,30,254,100,44,18,395,242,272,101,385,916,836,16,265,131,938,93,166,557 }, -{ 279,20,43,126,107,7,92,16,356,362,60,595,246,359,598,35,0,683,939,653,121,97,125,441,399,392,150,199,48,230,14,649 }, -{ 206,417,93,959,499,728,8,559,120,473,137,141,10,564,31,260,44,450,203,341,253,244,373,116,143,638,268,180,352,110,318,940 }, -{ 259,465,147,132,590,687,534,199,581,146,941,427,107,640,279,178,121,5,195,150,522,955,198,35,786,929,798,142,1,21,325,626 }, -{ 523,15,120,450,202,515,403,51,817,700,13,753,23,457,33,899,128,64,730,102,494,342,115,719,453,196,49,99,318,421,308,5 }, -{ 141,559,10,244,365,564,661,180,253,143,752,110,55,317,533,341,901,93,373,206,535,160,82,922,260,36,531,964,352,332,261,197 }, -{ 219,258,98,127,276,964,943,137,843,535,201,935,131,860,261,295,284,567,206,44,116,31,253,492,203,332,160,615,36,93,55,692 }, -{ 0,319,422,207,945,693,577,887,32,804,95,344,104,904,61,20,5,43,7,725,113,510,306,102,49,263,153,426,33,83,22,9 }, -{ 1,22,0,5,12,2,36,21,28,86,49,105,9,10,23,13,141,95,31,55,128,37,51,4,83,202,3,64,96,7,32,44 }, -{ 15,515,13,700,1,0,753,2,23,3,4,5,51,10,115,197,6,33,12,9,165,7,8,77,11,961,180,269,141,22,120,457 }, -{ 15,1,23,120,77,13,515,51,141,202,700,180,110,137,260,753,326,5,128,102,0,21,2,165,269,33,197,450,318,217,93,115 }, -{ 15,515,1,700,0,753,13,2,23,180,51,5,120,4,9,115,197,12,7,165,21,33,6,82,3,8,523,901,31,141,457,260 }, -{ 16,18,24,7,92,35,60,75,9,13,71,14,0,108,50,21,126,121,1,140,23,5,132,146,2,12,128,10,64,141,70,87 }, -{ 180,341,901,15,515,1,365,700,0,2,197,753,115,4,10,13,752,5,3,8,165,317,141,23,143,873,44,31,569,55,93,6 }, -{ 9,0,175,35,101,28,39,67,68,1,65,83,30,69,364,336,22,114,55,124,194,158,100,289,252,166,64,345,103,36,50,88 }, -{ 64,165,180,197,115,247,217,237,21,13,32,316,22,141,352,72,288,304,95,225,76,391,386,16,468,90,49,35,365,640,372,23 }, -{ 15,515,700,13,753,1,0,2,23,4,5,3,115,51,141,197,12,10,180,961,7,9,21,33,217,6,8,165,457,11,77,341 }, -{ 132,121,199,146,60,279,493,640,407,598,126,195,534,581,955,590,107,5,150,35,522,49,259,16,18,360,156,0,147,362,21,167 }, -{ 0,1,28,9,22,5,36,12,65,24,67,96,2,83,18,50,114,55,21,16,7,10,23,14,13,160,137,51,48,218,103,69 }, -{ 93,120,957,77,30,968,459,110,137,160,613,102,202,352,373,141,31,372,217,330,190,318,269,260,203,44,28,473,228,177,863,704 }, -{ 15,515,700,0,753,1,13,23,2,51,5,9,120,82,4,7,901,197,10,8,260,180,341,12,33,6,3,523,165,102,115,141 }, -{ 206,417,8,141,499,44,244,93,31,10,137,253,559,116,728,144,120,564,269,638,203,352,143,260,341,752,268,717,951,180,160,110 }, -{ 530,254,228,1,96,21,406,39,827,31,669,840,613,829,137,679,166,98,23,51,960,438,131,93,48,224,219,317,310,36,876,190 }, -{ 15,515,700,753,13,457,0,197,719,1,165,82,23,8,120,730,2,10,12,180,134,5,9,141,260,4,351,51,115,3,341,899 }, -{ 0,16,68,9,24,28,18,35,252,109,39,419,124,158,154,55,101,71,22,118,60,7,49,65,333,14,1,10,329,364,677,346 }, -{ 1,15,13,23,515,51,120,0,700,180,2,165,5,753,141,197,21,33,202,102,260,4,9,12,7,326,137,450,115,6,82,110 }, -{ 535,253,352,564,110,365,82,180,341,10,854,533,55,898,244,901,873,141,752,143,642,559,498,317,36,951,115,964,638,282,661,197 }, -{ 31,44,125,338,116,64,242,36,1,10,55,22,456,237,180,13,299,164,506,86,23,165,558,143,0,762,492,479,844,546,93,8 }, -{ 13,23,4,1,202,2,0,51,115,77,141,180,5,15,217,3,33,11,515,317,9,10,102,21,700,341,365,318,269,64,32,128 }, -{ 9,39,0,166,68,101,28,364,30,158,562,35,175,65,333,154,49,404,706,124,21,252,274,168,190,289,100,570,16,1,310,346 }, -{ 15,515,700,753,341,13,0,23,1,33,141,4,260,82,77,51,351,180,9,5,115,137,10,217,11,120,102,40,349,269,202,854 } diff --git a/external/bc7enc_rdo/test.cpp b/external/bc7enc_rdo/test.cpp deleted file mode 100644 index ecfd2ebe7e..0000000000 --- a/external/bc7enc_rdo/test.cpp +++ /dev/null @@ -1,872 +0,0 @@ -// test.cpp - Command line example/test app -#ifdef _MSC_VER -#define _CRT_SECURE_NO_WARNINGS -#endif - -#define BC7ENC_VERSION "1.08" - -#define COMPUTE_SSIM (0) - -#if _OPENMP -#include -#endif - -#include "rdo_bc_encoder.h" - -using namespace utils; - -static int print_usage() -{ - fprintf(stderr, "\nReads PNG files (with or without alpha channels) and packs them to BC1-5 or BC7/BPTC (the default).\nFor BC7, the tool uses either bc7enc.cpp (uses modes 1/5/6/7) or bc7e.ispc (all modes, -U option, the default if SUPPORT_BC7E was TRUE).\n"); - fprintf(stderr, "Supports optional reduced entropy BC7 encoding (using -e, bc7enc.cpp only) and Rate Distortion\nOptimization (RDO - all encoders) for BC1-7 using -z# where # is lambda. Higher lambdas=more compressible files, but lower quality. Can also combine RDO with -e.\n"); - fprintf(stderr, "By default, this tool compresses to BC7. A DX10 DDS file and a unpacked PNG file will be written\nto the current directory with the .dds/_unpacked.png/_unpacked_alpha.png suffixes.\n"); - fprintf(stderr, "This tool does not yet support generating mipmaps (yet).\n"); - fprintf(stderr, "\nUsage: bc7enc [-apng_filename] [options] input_filename.png [compressed_output.dds] [unpacked_output.png]\n\n"); - fprintf(stderr, "-q Quiet mode (less debug/status output)\n"); - fprintf(stderr, "-apng_filename Load G channel of PNG file into alpha channel of source image\n"); - fprintf(stderr, "-g Don't write unpacked output PNG files (this disables PSNR metrics too).\n"); - fprintf(stderr, "-y Flip source image along Y axis before packing.\n"); - fprintf(stderr, "-o Write output files to the source file's directory, instead of the current directory.\n"); - fprintf(stderr, "-1 Encode to BC1. Use -L# option to set the base BC1 encoder's quality (default is 18 - highest quality).\n"); - fprintf(stderr, "-3 Encode to BC3. Use -L# option to set the base BC1 encoder's quality (default is 18 - highest quality).\n"); - fprintf(stderr, "-4 Encode to BC4. Use -hl and -hr# options to change the base encoder's quality.\n"); - fprintf(stderr, "-5 Encode to BC5. Use -hl and -hr# options to change the base encoder's quality.\n"); - fprintf(stderr, "-f Force writing DX10-style DDS files (otherwise for BC1-5 it uses DX9-style DDS files)\n"); - fprintf(stderr, "\n"); - fprintf(stderr, "-X# BC4/5: Set first color channel (defaults to 0 or red)\n"); - fprintf(stderr, "-Y# BC4/5: Set second color channel (defaults to 1 or green)\n"); - fprintf(stderr, "\n"); - fprintf(stderr, "-U BC7: Use bc7e.ispc (this is the default if it's been compiled in) instead of bc7enc.cpp. Higher quality using all BC7 modes, but doesn't support -e.\n"); - fprintf(stderr, "-C BC7: Use bc7enc.cpp instead of the default bc7e.ispc. Only supports modes 1/5/6/7. May be a slight win at certain lambdas combined with -e, but overall is weaker vs. bc7e.ispc.\n"); - fprintf(stderr, "-s BC7: Use perceptual colorspace metrics instead of linear (bc7e.ispc only). The default for all formats is to use linear RGB/RGBA metrics. RDO mode is currently always linear.\n"); - fprintf(stderr, "-uX BC7: Set the BC7 base encoder quality level. X ranges from [0,4] for bc7enc.cpp or [0,6] for bc7e.ispc. Default is 6 (highest quality).\n"); - fprintf(stderr, "-pX BC7: (bc7enc.cpp only) Scan X partitions in mode 1, X ranges from [0,64], use 0 to disable mode 1 entirely (faster)\n"); - fprintf(stderr, "-LX BC1: Set rgbcx.cpp's BC1/BC3 RGB encoding level, where 0=fastest and 18=slowest but highest quality. Default is 18.\n"); - fprintf(stderr, "\nBC3-5 alpha block encoding options:\n"); - fprintf(stderr, "-hl BC3-5: Use lower quality BC4 block encoder (much faster, but lower quality, only uses 8 value mode)\n"); - fprintf(stderr, "-h6 BC3-5: Use 6 value mode only for BC4 blocks\n"); - fprintf(stderr, "-h8 BC3-5: Use 8 value mode only for BC4 blocks\n"); - fprintf(stderr, "-hr# BC3-5: Set search radius, default is 5, larger=higher quality but slower compression\n"); - fprintf(stderr, "\nRDO encoding options (compatible with all formats/encoders):\n"); - fprintf(stderr, "-e BC7: (bc7enc.cpp only) Quantize/weight BC7 output for lower entropy (no slowdown but only 5-10%% gains, can be combined with -z# for more gains)\n"); - fprintf(stderr, "-z# BC1-7: Set RDO lambda factor (quality), lower=higher quality/larger LZ compressed files, try .1-4, combine with -e for BC7 for more gains\n"); - fprintf(stderr, "-zb# BC1-7: Manually set smooth block scale factor, higher values = less distortion on smooth blocks, try 5-70\n"); - fprintf(stderr, "-zc# BC1: Set RDO lookback window size in bytes (higher=more effective but slower, default=128, try 8-16384)\n"); - fprintf(stderr, "-zn BC1-7: Inject up to 2 matches into each block vs. 1 (the default, a little slower, but noticeably higher compression)\n"); - fprintf(stderr, "-ze BC1-7: Inject up to 1 matches into each block vs. 1 (a little faster, but less compression)\n"); - fprintf(stderr, "-zm BC1-7: Allow byte sequences to be moved inside blocks (significantly slower, not worth it in benchmarking, will likely be removed)\n"); - fprintf(stderr, "-zu BC1/3/7: Disable RGB ultrasmooth block detection/handling\n"); - fprintf(stderr, "\nRDO debugging/development:\n"); - fprintf(stderr, "-zd BC1-7: Enable RDO debug output\n"); - fprintf(stderr, "-zt BC1-7: Disable RDO multithreading\n"); - fprintf(stderr, "\n"); - fprintf(stderr, "BC1/BC3 RGB specific options:\n"); - fprintf(stderr, "-b BC1: Don't use 3-color mode transparent texels on blocks containing black or very dark pixels. By default this mode is now enabled.\n"); - fprintf(stderr, "-c BC1: Disable 3-color mode\n"); - fprintf(stderr, "-n BC1/BC3: Encode/decode BC1 for NVidia GPU's\n"); - fprintf(stderr, "-m BC1/BC3: Encode/decode BC1 for AMD GPU's\n"); - fprintf(stderr, "-r BC1/BC3: Encode/decode BC1 using ideal BC1 formulas with rounding for 4-color block colors 2,3 (same as AMD Compressonator)\n"); - fprintf(stderr, "\nBy default, this tool encodes to BC1 *without rounding* 4-color block colors 2,3, which may not match the output of some software decoders.\n"); - fprintf(stderr, "\nFor BC4 and BC5: Not all tools support reading DX9-style BC4/BC5 format files (or BC4/5 files at all). AMD Compressonator does.\n"); - fprintf(stderr, "\nFor BC1, the engine/shader must ignore decoded texture alpha because the encoder utilizes transparent texel to get black/dark texels. Use -b to disable.\n"); - fprintf(stderr, "\nReduced entropy/RDO encoding examples:\n"); - fprintf(stderr, "\n\"bc7enc -C -e blah.png\" - Reduced entropy BC7 encoding using bc7enc.cpp (extremely fast, but only 5-10%% gains, and only 4 BC7 modes)\n"); - fprintf(stderr, "\"bc7enc -z1.0 -zc32 -ze blah.png\" - RDO BC7 with lambda 1.0, window size 32 bytes (default window is 128), 1 matches per block for faster compression\n"); - fprintf(stderr, "\"bc7enc -z1.0 -zc256 blah.png\" - RDO BC7 with lambda 1.0, window size 256 bytes (default window is only 128), 2 matches per block for higher compression\n"); - fprintf(stderr, "\"bc7enc -z1.0 -C -e -zc1024 blah.png\" - RDO BC7 with lambda 1.0, window size 1024 bytes for more gains (but slower), combined with reduced entropy BC7\n"); - fprintf(stderr, "\"bc7enc -1 -z1.0 blah.png\" - RDO BC1 with lambda 1.0\n"); - -#if SUPPORT_BC7E - fprintf(stderr, "\nbc7e.ispc (-U option) is supported in this build.\n"); -#else - fprintf(stderr, "\nbc7e.ispc (-U option) is NOT supported in this build.\n"); -#endif - - return EXIT_FAILURE; -} - -static bool load_listing_file(const std::string& f, std::vector& filenames) -{ - std::string filename(f); - //filename.erase(0, 1); - - FILE* pFile = nullptr; -#ifdef _WIN32 - fopen_s(&pFile, filename.c_str(), "r"); -#else - pFile = fopen(filename.c_str(), "r"); -#endif - - if (!pFile) - { - fprintf(stderr, "Failed opening listing file: \"%s\"\n", filename.c_str()); - return false; - } - - uint32_t total_filenames = 0; - - for (; ; ) - { - char buf[3072]; - buf[0] = '\0'; - - char* p = fgets(buf, sizeof(buf), pFile); - if (!p) - { - if (ferror(pFile)) - { - fprintf(stderr, "Failed reading from listing file: \"%s\"\n", filename.c_str()); - - fclose(pFile); - return false; - } - else - break; - } - - std::string read_filename(p); - while (read_filename.size()) - { - if (read_filename[0] == ' ') - read_filename.erase(0, 1); - else - break; - } - - while (read_filename.size()) - { - const char c = read_filename.back(); - if ((c == ' ') || (c == '\n') || (c == '\r')) - read_filename.erase(read_filename.size() - 1, 1); - else - break; - } - - if (read_filename.size()) - { - filenames.push_back(read_filename); - total_filenames++; - } - } - - fclose(pFile); - - printf("Successfully read %u filenames(s) from listing file \"%s\"\n", total_filenames, filename.c_str()); - - return true; -} - -static int graph_mode(const std::string& graph_listing_file, rdo_bc::rdo_bc_params rp) -{ - rp.m_status_output = false; - - std::vector filenames; - if (!load_listing_file(graph_listing_file, filenames)) - { - fprintf(stderr, "Failed loading graph listing file \"%s\"\n", graph_listing_file.c_str()); - return EXIT_FAILURE; - } - - if (!filenames.size()) - { - fprintf(stderr, "No files to process!\n"); - return EXIT_FAILURE; - } - - struct encode_results - { - float m_lambda; - float m_rate; - float m_distortion; - }; - - std::vector< std::vector > results(filenames.size()); - - static float s_lambdas[] = { .01f, .1f, .25f, .4f, .5f, .6f, .75f, .9f, 1.0f, 1.5f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f }; - const uint32_t TOTAL_LAMBDAS = ARRAY_SIZE(s_lambdas); - - for (uint32_t file_index = 0; file_index < filenames.size(); file_index++) - { - image_u8 source_image; - if (!load_png(filenames[file_index].c_str(), source_image)) - return EXIT_FAILURE; - - printf("Source image: %s %ux%u\n", filenames[file_index].c_str(), source_image.width(), source_image.height()); - - for (uint32_t lambda_index = 0; lambda_index < TOTAL_LAMBDAS; lambda_index++) - { - rp.m_rdo_lambda = s_lambdas[lambda_index]; - - printf("Using lambda %f\n", rp.m_rdo_lambda); - - rdo_bc::rdo_bc_encoder encoder; - if (!encoder.init(source_image, rp)) - { - fprintf(stderr, "rdo_bc_encoder::init() failed!\n"); - return EXIT_FAILURE; - } - - if (lambda_index == 0) - { - if (encoder.get_has_alpha()) - printf("Source image has an alpha channel.\n"); - else - printf("Source image is opaque.\n"); - } - - if (!encoder.encode()) - { - fprintf(stderr, "rdo_bc_encoder::encode() failed!\n"); - return EXIT_FAILURE; - } - - // Compress the output data losslessly using Deflate - const uint32_t output_data_size = encoder.get_total_blocks_size_in_bytes(); - const uint32_t pre_rdo_comp_size = get_deflate_size(encoder.get_prerdo_blocks(), output_data_size); - const uint32_t comp_size = get_deflate_size(encoder.get_blocks(), output_data_size); - - float pre_rdo_lz_bits_per_texel = (pre_rdo_comp_size * 8.0f) / encoder.get_total_texels(); - UNUSED(pre_rdo_lz_bits_per_texel); - float lz_bits_per_texel = comp_size * 8.0f / encoder.get_total_texels(); - - image_u8 unpacked_image; - if (!encoder.unpack_blocks(unpacked_image)) - return EXIT_FAILURE; - - image_metrics rgb_metrics; - rgb_metrics.compute(source_image, unpacked_image, 0, 3); - - results[file_index].resize(lambda_index + 1); - results[file_index][lambda_index].m_distortion = (float)rgb_metrics.m_peak_snr; - results[file_index][lambda_index].m_rate = lz_bits_per_texel; - results[file_index][lambda_index].m_lambda = rp.m_rdo_lambda; - - printf("Rate %f distortion %f\n", lz_bits_per_texel, rgb_metrics.m_peak_snr); - - } // lambda_index - - printf("\n"); - - } // file_index - - FILE* pCSV_file = fopen("graph5.csv", "w"); - if (!pCSV_file) - { - fprintf(stderr, "Failed creating graph.csv!\n"); - return EXIT_FAILURE; - } - - fprintf(pCSV_file, "lambda, avg_rate, avg_psnr,"); - - for (uint32_t file_index = 0; file_index < filenames.size(); file_index++) - { - std::string fname; - fname = filenames[file_index].c_str(); - strip_path(fname); - fprintf(pCSV_file, "%s Rate, %s PSNR%c", fname.c_str(), fname.c_str(), file_index != (filenames.size() - 1) ? ',' : ' '); - } - fprintf(pCSV_file, "\n"); - - for (uint32_t lambda_index = 0; lambda_index < TOTAL_LAMBDAS; lambda_index++) - { - fprintf(pCSV_file, "%f,", s_lambdas[lambda_index]); - - float total_rate = 0.0f, total_distortion = 0.0f; - for (uint32_t file_index = 0; file_index < filenames.size(); file_index++) - { - total_rate += results[file_index][lambda_index].m_rate; - total_distortion += results[file_index][lambda_index].m_distortion; - } - total_rate /= filenames.size(); - total_distortion /= filenames.size(); - - fprintf(pCSV_file, "%f,%f,", total_rate, total_distortion); - - for (uint32_t file_index = 0; file_index < filenames.size(); file_index++) - { - fprintf(pCSV_file, "%f,%f", results[file_index][lambda_index].m_rate, results[file_index][lambda_index].m_distortion); - if (file_index != (filenames.size() - 1)) - fprintf(pCSV_file, ","); - } - fprintf(pCSV_file, "\n"); - } - - fclose(pCSV_file); - pCSV_file = nullptr; - - return EXIT_SUCCESS; -} - -int main(int argc, char* argv[]) -{ - bool quiet_mode = false; - - for (int i = 0; i < argc; i++) - if (strcmp(argv[i], "-q") == 0) - quiet_mode = true; - - if (!quiet_mode) - printf("bc7enc v%s - RDO BC1-7 Texture Compressor\n", BC7ENC_VERSION); - - int max_threads = 1; -#if _OPENMP - max_threads = std::min(std::max(1, omp_get_max_threads()), 128); -#endif - - if (argc < 2) - return print_usage(); - - std::string src_filename, src_alpha_filename, dds_output_filename, png_output_filename, png_alpha_output_filename; - - bool no_output_png = false; - bool out_cur_dir = true; - bool force_dx10_dds = false; - FILE* pCSV_file = nullptr; - - uint32_t pixel_format_bpp = 8; - - rdo_bc::rdo_bc_params rp; - rp.m_rdo_max_threads = max_threads; - rp.m_status_output = !quiet_mode; - - std::string graph_listing_file; - - for (int i = 1; i < argc; i++) - { - const char *pArg = argv[i]; - if (pArg[0] == '-') - { - switch (pArg[1]) - { - case 'G': - { - graph_listing_file = (pArg + 2); - break; - } - case 'q': - { - break; - } - case 'U': - { - rp.m_use_bc7e = true; - break; - } - case 'C': - { - rp.m_use_bc7e = false; - break; - } - case 'e': - { - rp.m_bc7enc_reduce_entropy = true; - break; - } - case 'h': - { - if (strcmp(pArg, "-hl") == 0) - rp.m_use_hq_bc345 = false; - else if (strcmp(pArg, "-h6") == 0) - rp.m_bc345_mode_mask = rgbcx::BC4_USE_MODE6_FLAG; - else if (strcmp(pArg, "-h8") == 0) - rp.m_bc345_mode_mask = rgbcx::BC4_USE_MODE8_FLAG; - else if (strncmp(pArg, "-hr", 3) == 0) - { - rp.m_bc345_search_rad = atoi(pArg + 3); - rp.m_bc345_search_rad = std::max(0, std::min(32, rp.m_bc345_search_rad)); - } - - break; - } - case '6': - { - rp.m_bc7enc_mode6_only = true; - break; - } - case '1': - { - rp.m_dxgi_format = DXGI_FORMAT_BC1_UNORM; - pixel_format_bpp = 4; - printf("Compressing to BC1\n"); - break; - } - case '3': - { - rp.m_dxgi_format = DXGI_FORMAT_BC3_UNORM; - pixel_format_bpp = 8; - printf("Compressing to BC3\n"); - break; - } - case '4': - { - rp.m_dxgi_format = DXGI_FORMAT_BC4_UNORM; - pixel_format_bpp = 4; - printf("Compressing to BC4\n"); - break; - } - case '5': - { - rp.m_dxgi_format = DXGI_FORMAT_BC5_UNORM; - pixel_format_bpp = 8; - printf("Compressing to BC5\n"); - break; - } - case 'y': - { - rp.m_y_flip = true; - break; - } - case 'a': - { - src_alpha_filename = pArg + 2; - break; - } - case 'X': - { - rp.m_bc45_channel0 = atoi(pArg + 2); - if ((rp.m_bc45_channel0 < 0) || (rp.m_bc45_channel0 > 3)) - { - fprintf(stderr, "Invalid argument: %s\n", pArg); - return EXIT_FAILURE; - } - break; - } - case 'Y': - { - rp.m_bc45_channel1 = atoi(pArg + 2); - if ((rp.m_bc45_channel1 < 0) || (rp.m_bc45_channel1 > 3)) - { - fprintf(stderr, "Invalid argument: %s\n", pArg); - return EXIT_FAILURE; - } - break; - } - case 'f': - { - force_dx10_dds = true; - break; - } - case 'u': - { - rp.m_bc7_uber_level = atoi(pArg + 2); - if ((rp.m_bc7_uber_level < 0) || (rp.m_bc7_uber_level > 6)) //BC7ENC_MAX_UBER_LEVEL)) - { - fprintf(stderr, "Invalid argument: %s\n", pArg); - return EXIT_FAILURE; - } - break; - - } - case 'L': - { - rp.m_bc1_quality_level = atoi(pArg + 2); - if (((int)rp.m_bc1_quality_level < (int)rgbcx::MIN_LEVEL) || ((int)rp.m_bc1_quality_level > (int)(rgbcx::MAX_LEVEL + 1))) - { - fprintf(stderr, "Invalid argument: %s\n", pArg); - return EXIT_FAILURE; - } - break; - - } - case 'g': - { - no_output_png = true; - break; - } - case 's': - { - rp.m_perceptual = true; - break; - } - case 'p': - { - rp.m_bc7enc_max_partitions_to_scan = atoi(pArg + 2); - if ((rp.m_bc7enc_max_partitions_to_scan < 0) || (rp.m_bc7enc_max_partitions_to_scan > BC7ENC_MAX_PARTITIONS)) - { - fprintf(stderr, "Invalid argument: %s\n", pArg); - return EXIT_FAILURE; - } - break; - } - case 'n': - { - rp.m_bc1_mode = rgbcx::bc1_approx_mode::cBC1NVidia; - break; - } - case 'm': - { - rp.m_bc1_mode = rgbcx::bc1_approx_mode::cBC1AMD; - break; - } - case 'r': - { - rp.m_bc1_mode = rgbcx::bc1_approx_mode::cBC1IdealRound4; - break; - } - case 'z': - { - if (strncmp(pArg, "-zt", 3) == 0) - { - rp.m_rdo_multithreading = false; - } - else if (strncmp(pArg, "-zd", 3) == 0) - { - rp.m_rdo_debug_output = true; - } - else if (strncmp(pArg, "-zq", 3) == 0) - { - rp.m_bc7enc_rdo_bc7_quant_mode6_endpoints = false; - } - else if (strncmp(pArg, "-zw", 3) == 0) - { - rp.m_bc7enc_rdo_bc7_weight_modes = false; - } - else if (strncmp(pArg, "-zp", 3) == 0) - { - rp.m_bc7enc_rdo_bc7_weight_low_frequency_partitions = false; - } - else if (strncmp(pArg, "-zo", 3) == 0) - { - rp.m_bc7enc_rdo_bc7_pbit1_weighting = false; - } - else if (strncmp(pArg, "-zm", 3) == 0) - { - rp.m_rdo_allow_relative_movement = true; - } - else if (strncmp(pArg, "-zn", 3) == 0) - { - rp.m_rdo_try_2_matches = true; - } - else if (strncmp(pArg, "-ze", 3) == 0) - { - rp.m_rdo_try_2_matches = false; - } - else if (strncmp(pArg, "-zu", 3) == 0) - { - rp.m_rdo_ultrasmooth_block_handling = false; - } - else if (strncmp(pArg, "-zb", 3) == 0) - { - rp.m_rdo_smooth_block_error_scale = (float)atof(pArg + 3); - rp.m_rdo_smooth_block_error_scale = std::min(std::max(rp.m_rdo_smooth_block_error_scale, 1.0f), 500.0f); - rp.m_custom_rdo_smooth_block_error_scale = true; - } - else if (strncmp(pArg, "-zc", 3) == 0) - { - rp.m_lookback_window_size = atoi(pArg + 3); - rp.m_lookback_window_size = std::min(std::max(rp.m_lookback_window_size, 8), 65536*2); - rp.m_custom_lookback_window_size = true; - } - else if (strncmp(pArg, "-zv", 3) == 0) - { - rp.m_rdo_max_smooth_block_std_dev = (float)atof(pArg + 3); - rp.m_rdo_max_smooth_block_std_dev = std::min(std::max(rp.m_rdo_max_smooth_block_std_dev, .000125f), 256.0f); - } - else - { - rp.m_rdo_lambda = (float)atof(pArg + 2); - rp.m_rdo_lambda = std::min(std::max(rp.m_rdo_lambda, 0.0f), 500.0f); - } - break; - } - case 'o': - { - out_cur_dir = false; - break; - } - case 'b': - { - rp.m_use_bc1_3color_mode_for_black = false; - break; - } - case 'c': - { - rp.m_use_bc1_3color_mode = false; - break; - } - case 'v': - { - if (pCSV_file) - fclose(pCSV_file); - - pCSV_file = fopen(pArg + 2, "a"); - if (!pCSV_file) - { - fprintf(stderr, "Failed opening file %s\n", pArg + 2); - return EXIT_FAILURE; - } - break; - } - default: - { - fprintf(stderr, "Invalid argument: %s\n", pArg); - return EXIT_FAILURE; - } - } - } - else - { - if (!src_filename.size()) - src_filename = pArg; - else if (!dds_output_filename.size()) - dds_output_filename = pArg; - else if (!png_output_filename.size()) - png_output_filename = pArg; - else - { - fprintf(stderr, "Invalid argument: %s\n", pArg); - return EXIT_FAILURE; - } - } - } - - if (rp.m_status_output) - { - printf("Max threads: %u\n", max_threads); - printf("Supports bc7e.ispc: %u\n", SUPPORT_BC7E); - } - - if (graph_listing_file.size()) - { - return graph_mode(graph_listing_file, rp); - } - - if (!src_filename.size()) - { - fprintf(stderr, "No source filename specified!\n"); - return EXIT_FAILURE; - } - - if (!dds_output_filename.size()) - { - dds_output_filename = src_filename; - strip_extension(dds_output_filename); - if (out_cur_dir) - strip_path(dds_output_filename); - dds_output_filename += ".dds"; - } - - if (!png_output_filename.size()) - { - png_output_filename = src_filename; - strip_extension(png_output_filename); - if (out_cur_dir) - strip_path(png_output_filename); - png_output_filename += "_unpacked.png"; - } - - png_alpha_output_filename = png_output_filename; - strip_extension(png_alpha_output_filename); - png_alpha_output_filename += "_alpha.png"; - - image_u8 source_image; - if (!load_png(src_filename.c_str(), source_image)) - return EXIT_FAILURE; - - if (rp.m_status_output) - printf("Source image: %s %ux%u\n", src_filename.c_str(), source_image.width(), source_image.height()); - - if (src_alpha_filename.size()) - { - image_u8 source_alpha_image; - if (!load_png(src_alpha_filename.c_str(), source_alpha_image)) - return EXIT_FAILURE; - - if (rp.m_status_output) - printf("Source alpha image: %s %ux%u\n", src_alpha_filename.c_str(), source_alpha_image.width(), source_alpha_image.height()); - - const uint32_t w = std::min(source_alpha_image.width(), source_image.width()); - const uint32_t h = std::min(source_alpha_image.height(), source_image.height()); - - for (uint32_t y = 0; y < h; y++) - for (uint32_t x = 0; x < w; x++) - source_image(x, y)[3] = source_alpha_image(x, y)[1]; - } - - clock_t overall_start_t = clock(); - - rdo_bc::rdo_bc_encoder encoder; - if (!encoder.init(source_image, rp)) - { - fprintf(stderr, "rdo_bc_encoder::init() failed!\n"); - return EXIT_FAILURE; - } - - if (rp.m_status_output) - { - if (encoder.get_has_alpha()) - printf("Source image has an alpha channel.\n"); - else - printf("Source image is opaque.\n"); - } - - if (!encoder.encode()) - { - fprintf(stderr, "rdo_bc_encoder::encode() failed!\n"); - return EXIT_FAILURE; - } - - clock_t overall_end_t = clock(); - - if (rp.m_status_output) - printf("Total processing time: %f secs\n", (double)(overall_end_t - overall_start_t) / CLOCKS_PER_SEC); - - // Compress the output data losslessly using Deflate - const uint32_t output_data_size = encoder.get_total_blocks_size_in_bytes(); - const uint32_t pre_rdo_comp_size = get_deflate_size(encoder.get_prerdo_blocks(), output_data_size); - - float pre_rdo_lz_bits_per_texel = (pre_rdo_comp_size * 8.0f) / encoder.get_total_texels(); - - if (rp.m_status_output) - { - printf("Output data size: %u, LZ (Deflate) compressed file size: %u, %3.2f bits/texel\n", - output_data_size, - (uint32_t)pre_rdo_comp_size, - pre_rdo_lz_bits_per_texel); - } - - const uint32_t comp_size = get_deflate_size(encoder.get_blocks(), output_data_size); - - float lz_bits_per_texel = comp_size * 8.0f / encoder.get_total_texels(); - - if (rp.m_status_output) - printf("RDO output data size: %u, LZ (Deflate) compressed file size: %u, %3.2f bits/texel, savings: %3.2f%%\n", output_data_size, (uint32_t)comp_size, lz_bits_per_texel, - (lz_bits_per_texel != pre_rdo_lz_bits_per_texel) ? 100.0f - (lz_bits_per_texel * 100.0f) / pre_rdo_lz_bits_per_texel : 0.0f); - - if (!save_dds(dds_output_filename.c_str(), encoder.get_orig_width(), encoder.get_orig_height(), - encoder.get_blocks(), pixel_format_bpp, rp.m_dxgi_format, rp.m_perceptual, force_dx10_dds)) - { - fprintf(stderr, "Failed writing file \"%s\"\n", dds_output_filename.c_str()); - return EXIT_FAILURE; - } - - if (rp.m_status_output) - printf("Wrote DDS file %s\n", dds_output_filename.c_str()); - - float csv_psnr = 0.0f, csv_ssim = 0.0f; - (void)csv_ssim; - - if ((!no_output_png) && (png_output_filename.size())) - { - image_u8 unpacked_image; - if (!encoder.unpack_blocks(unpacked_image)) - return EXIT_FAILURE; - - if ((rp.m_dxgi_format != DXGI_FORMAT_BC4_UNORM) && (rp.m_dxgi_format != DXGI_FORMAT_BC5_UNORM)) - { - image_metrics y_metrics; - y_metrics.compute(source_image, unpacked_image, 0, 0); - if (rp.m_status_output) - printf("Luma Max error: %3.0f RMSE: %f PSNR %03.3f dB, PSNR per bits/texel: %f\n", y_metrics.m_max, y_metrics.m_root_mean_squared, y_metrics.m_peak_snr, y_metrics.m_peak_snr / lz_bits_per_texel * 10000.0f); - - image_metrics rgb_metrics; - rgb_metrics.compute(source_image, unpacked_image, 0, 3); - if (rp.m_status_output) - printf("RGB Max error: %3.0f RMSE: %f PSNR %03.3f dB, PSNR per bits/texel: %f\n", rgb_metrics.m_max, rgb_metrics.m_root_mean_squared, rgb_metrics.m_peak_snr, rgb_metrics.m_peak_snr / lz_bits_per_texel * 10000.0f); - - csv_psnr = (float)rgb_metrics.m_peak_snr; - - image_metrics rgba_metrics; - rgba_metrics.compute(source_image, unpacked_image, 0, 4); - if (rp.m_status_output) - printf("RGBA Max error: %3.0f RMSE: %f PSNR %03.3f dB, PSNR per bits/texel: %f\n", rgba_metrics.m_max, rgba_metrics.m_root_mean_squared, rgba_metrics.m_peak_snr, rgba_metrics.m_peak_snr / lz_bits_per_texel * 10000.0f); - -#if COMPUTE_SSIM - vec4F ssim_y(compute_ssim(source_image, unpacked_image, true)); - vec4F ssim_rgba(compute_ssim(source_image, unpacked_image, false)); - - if (rp.m_status_output) - { - printf("R SSIM: %f\n", ssim_rgba[0]); - printf("G SSIM: %f\n", ssim_rgba[1]); - printf("B SSIM: %f\n", ssim_rgba[2]); - printf("RGB Avg SSIM: %f\n", (ssim_rgba[0] + ssim_rgba[1] + ssim_rgba[2]) / 3.0f); - printf("A SSIM: %f\n", ssim_rgba[3]); - - printf("Luma SSIM: %f\n", ssim_y[0]); - } - - csv_ssim = (ssim_rgba[0] + ssim_rgba[1] + ssim_rgba[2]) / 3.0f; -#endif - } - - for (uint32_t chan = 0; chan < 4; chan++) - { - if (rp.m_dxgi_format == DXGI_FORMAT_BC4_UNORM) - { - if (chan != rp.m_bc45_channel0) - continue; - } - else if (rp.m_dxgi_format == DXGI_FORMAT_BC5_UNORM) - { - if ((chan != rp.m_bc45_channel0) && (chan != rp.m_bc45_channel1)) - continue; - } - - image_metrics c_metrics; - c_metrics.compute(source_image, unpacked_image, chan, 1); - static const char *s_chan_names[4] = { "Red ", "Green", "Blue ", "Alpha" }; - - if (rp.m_status_output) - printf("%s Max error: %3.0f RMSE: %f PSNR %03.3f dB\n", s_chan_names[chan], c_metrics.m_max, c_metrics.m_root_mean_squared, c_metrics.m_peak_snr); - - if (rp.m_dxgi_format == DXGI_FORMAT_BC4_UNORM) - csv_psnr = (float)c_metrics.m_peak_snr; - } - - if (rp.m_dxgi_format == DXGI_FORMAT_BC5_UNORM) - { - image_metrics c_metrics; - c_metrics.compute(source_image, unpacked_image, 0, 2); - - if (rp.m_status_output) - printf("RG Max error: %3.0f RMSE: %f PSNR %03.3f dB\n", c_metrics.m_max, c_metrics.m_root_mean_squared, c_metrics.m_peak_snr); - - csv_psnr = (float)c_metrics.m_peak_snr; - } - - if (rp.m_status_output) - { - if (rp.m_bc1_mode != rgbcx::bc1_approx_mode::cBC1Ideal) - printf("Note: BC1/BC3 RGB decoding was done with the specified vendor's BC1 approximations.\n"); - } - - image_u8 unpacked_image_cropped(unpacked_image); - unpacked_image_cropped.crop(encoder.get_orig_width(), encoder.get_orig_height()); - if (!save_png(png_output_filename.c_str(), unpacked_image_cropped, false)) - { - fprintf(stderr, "Failed writing file \"%s\"\n", png_output_filename.c_str()); - return EXIT_FAILURE; - } - - if (rp.m_status_output) - printf("Wrote PNG file %s\n", png_output_filename.c_str()); - - if (png_alpha_output_filename.size()) - { - image_u8 unpacked_image_alpha(unpacked_image); - for (uint32_t y = 0; y < unpacked_image_alpha.height(); y++) - for (uint32_t x = 0; x < unpacked_image_alpha.width(); x++) - unpacked_image_alpha(x, y).set(unpacked_image_alpha(x, y)[3], 255); - unpacked_image_alpha.crop(encoder.get_orig_width(), encoder.get_orig_height()); - - if (!save_png(png_alpha_output_filename.c_str(), unpacked_image_alpha, false)) - { - fprintf(stderr, "Failed writing file \"%s\"\n", png_alpha_output_filename.c_str()); - return EXIT_FAILURE; - } - - if (rp.m_status_output) - printf("Wrote PNG file %s\n", png_alpha_output_filename.c_str()); - } - } - - if (pCSV_file) - { - fprintf(pCSV_file, "%f,%f,%f\n", rp.m_rdo_lambda, lz_bits_per_texel, csv_psnr); - fclose(pCSV_file); - pCSV_file = nullptr; - } - - return EXIT_SUCCESS; -} diff --git a/external/bc7enc_rdo/utils.cpp b/external/bc7enc_rdo/utils.cpp deleted file mode 100644 index d9edb9c404..0000000000 --- a/external/bc7enc_rdo/utils.cpp +++ /dev/null @@ -1,901 +0,0 @@ -// File: utils.cpp -#include "utils.h" -#include "lodepng.h" -#include "miniz.h" - -namespace utils -{ - -#define FLOOD_PUSH(y, xl, xr, dy) if (((y + (dy)) >= 0) && ((y + (dy)) < (int)m_height)) { stack.push_back(fill_segment(y, xl, xr, dy)); } - -// See http://www.realtimerendering.com/resources/GraphicsGems/gems/SeedFill.c -uint32_t image_u8::flood_fill(int x, int y, const color_quad_u8& c, const color_quad_u8& b, std::vector* pSet_pixels) -{ - uint32_t total_set = 0; - - if (!flood_fill_is_inside(x, y, b)) - return 0; - - std::vector stack; - stack.reserve(64); - - FLOOD_PUSH(y, x, x, 1); - FLOOD_PUSH(y + 1, x, x, -1); - - while (stack.size()) - { - fill_segment s = stack.back(); - stack.pop_back(); - - int x1 = s.m_xl, x2 = s.m_xr, dy = s.m_dy; - y = s.m_y + s.m_dy; - - for (x = x1; (x >= 0) && flood_fill_is_inside(x, y, b); x--) - { - (*this)(x, y) = c; - total_set++; - if (pSet_pixels) - pSet_pixels->push_back(pixel_coord(x, y)); - } - - int l; - - if (x >= x1) - goto skip; - - l = x + 1; - if (l < x1) - FLOOD_PUSH(y, l, x1 - 1, -dy); - - x = x1 + 1; - - do - { - for (; x <= ((int)m_width - 1) && flood_fill_is_inside(x, y, b); x++) - { - (*this)(x, y) = c; - total_set++; - if (pSet_pixels) - pSet_pixels->push_back(pixel_coord(x, y)); - } - FLOOD_PUSH(y, l, x - 1, dy); - - if (x > (x2 + 1)) - FLOOD_PUSH(y, x2 + 1, x - 1, -dy); - - skip: - for (x++; x <= x2 && !flood_fill_is_inside(x, y, b); x++) - ; - - l = x; - } while (x <= x2); - } - - return total_set; -} - -void image_u8::draw_line(int xs, int ys, int xe, int ye, const color_quad_u8& color) -{ - if (xs > xe) - { - std::swap(xs, xe); - std::swap(ys, ye); - } - - int dx = xe - xs, dy = ye - ys; - if (!dx) - { - if (ys > ye) - std::swap(ys, ye); - for (int i = ys; i <= ye; i++) - set_pixel_clipped(xs, i, color); - } - else if (!dy) - { - for (int i = xs; i < xe; i++) - set_pixel_clipped(i, ys, color); - } - else if (dy > 0) - { - if (dy <= dx) - { - int e = 2 * dy - dx, e_no_inc = 2 * dy, e_inc = 2 * (dy - dx); - rasterize_line(xs, ys, xe, ye, 0, 1, e, e_inc, e_no_inc, color); - } - else - { - int e = 2 * dx - dy, e_no_inc = 2 * dx, e_inc = 2 * (dx - dy); - rasterize_line(xs, ys, xe, ye, 1, 1, e, e_inc, e_no_inc, color); - } - } - else - { - dy = -dy; - if (dy <= dx) - { - int e = 2 * dy - dx, e_no_inc = 2 * dy, e_inc = 2 * (dy - dx); - rasterize_line(xs, ys, xe, ye, 0, -1, e, e_inc, e_no_inc, color); - } - else - { - int e = 2 * dx - dy, e_no_inc = (2 * dx), e_inc = 2 * (dx - dy); - rasterize_line(xe, ye, xs, ys, 1, -1, e, e_inc, e_no_inc, color); - } - } -} - -void image_u8::rasterize_line(int xs, int ys, int xe, int ye, int pred, int inc_dec, int e, int e_inc, int e_no_inc, const color_quad_u8& color) -{ - int start, end, var; - - if (pred) - { - start = ys; - end = ye; - var = xs; - for (int i = start; i <= end; i++) - { - set_pixel_clipped(var, i, color); - if (e < 0) - e += e_no_inc; - else - { - var += inc_dec; - e += e_inc; - } - } - } - else - { - start = xs; - end = xe; - var = ys; - for (int i = start; i <= end; i++) - { - set_pixel_clipped(i, var, color); - if (e < 0) - e += e_no_inc; - else - { - var += inc_dec; - e += e_inc; - } - } - } -} - -bool load_png(const char* pFilename, image_u8& img) -{ - img.clear(); - - std::vector pixels; - unsigned int w = 0, h = 0; - unsigned int e = lodepng::decode(pixels, w, h, pFilename); - if (e != 0) - { - fprintf(stderr, "Failed loading PNG file %s\n", pFilename); - return false; - } - - img.init(w, h); - memcpy(&img.get_pixels()[0], &pixels[0], w * h * sizeof(uint32_t)); - - return true; -} - -bool save_png(const char* pFilename, const image_u8& img, bool save_alpha) -{ - const uint32_t w = img.width(); - const uint32_t h = img.height(); - - std::vector pixels; - if (save_alpha) - { - pixels.resize(w * h * sizeof(color_quad_u8)); - memcpy(&pixels[0], &img.get_pixels()[0], w * h * sizeof(color_quad_u8)); - } - else - { - pixels.resize(w * h * 3); - unsigned char* pDst = &pixels[0]; - for (uint32_t y = 0; y < h; y++) - for (uint32_t x = 0; x < w; x++, pDst += 3) - pDst[0] = img(x, y)[0], pDst[1] = img(x, y)[1], pDst[2] = img(x, y)[2]; - } - - return lodepng::encode(pFilename, pixels, w, h, save_alpha ? LCT_RGBA : LCT_RGB) == 0; -} - -static float gauss(int x, int y, float sigma_sqr) -{ - float pow = expf(-((x * x + y * y) / (2.0f * sigma_sqr))); - float g = (1.0f / (sqrtf((float)(2.0f * M_PI * sigma_sqr)))) * pow; - return g; -} - -// size_x/y should be odd -void compute_gaussian_kernel(float* pDst, int size_x, int size_y, float sigma_sqr, uint32_t flags) -{ - assert(size_x & size_y & 1); - - if (!(size_x | size_y)) - return; - - int mid_x = size_x / 2; - int mid_y = size_y / 2; - - double sum = 0; - for (int x = 0; x < size_x; x++) - { - for (int y = 0; y < size_y; y++) - { - float g; - if ((x > mid_x) && (y < mid_y)) - g = pDst[(size_x - x - 1) + y * size_x]; - else if ((x < mid_x) && (y > mid_y)) - g = pDst[x + (size_y - y - 1) * size_x]; - else if ((x > mid_x) && (y > mid_y)) - g = pDst[(size_x - x - 1) + (size_y - y - 1) * size_x]; - else - g = gauss(x - mid_x, y - mid_y, sigma_sqr); - - pDst[x + y * size_x] = g; - sum += g; - } - } - - if (flags & cComputeGaussianFlagNormalizeCenterToOne) - { - sum = pDst[mid_x + mid_y * size_x]; - } - - if (flags & (cComputeGaussianFlagNormalizeCenterToOne | cComputeGaussianFlagNormalize)) - { - double one_over_sum = 1.0f / sum; - for (int i = 0; i < size_x * size_y; i++) - pDst[i] = static_cast(pDst[i] * one_over_sum); - - if (flags & cComputeGaussianFlagNormalizeCenterToOne) - pDst[mid_x + mid_y * size_x] = 1.0f; - } - - if (flags & cComputeGaussianFlagPrint) - { - printf("{\n"); - for (int y = 0; y < size_y; y++) - { - printf(" "); - for (int x = 0; x < size_x; x++) - { - printf("%f, ", pDst[x + y * size_x]); - } - printf("\n"); - } - printf("}"); - } -} - -void gaussian_filter(imagef& dst, const imagef& orig_img, uint32_t odd_filter_width, float sigma_sqr, bool wrapping, uint32_t width_divisor, uint32_t height_divisor) -{ - assert(odd_filter_width && (odd_filter_width & 1)); - odd_filter_width |= 1; - - std::vector kernel(odd_filter_width * odd_filter_width); - compute_gaussian_kernel(&kernel[0], odd_filter_width, odd_filter_width, sigma_sqr, cComputeGaussianFlagNormalize); - - const int dst_width = orig_img.get_width() / width_divisor; - const int dst_height = orig_img.get_height() / height_divisor; - - const int H = odd_filter_width / 2; - const int L = -H; - - dst.crop(dst_width, dst_height); - -#pragma omp parallel for - for (int oy = 0; oy < dst_height; oy++) - { - for (int ox = 0; ox < dst_width; ox++) - { - vec4F c(0.0f); - - for (int yd = L; yd <= H; yd++) - { - int y = oy * height_divisor + (height_divisor >> 1) + yd; - - for (int xd = L; xd <= H; xd++) - { - int x = ox * width_divisor + (width_divisor >> 1) + xd; - - const vec4F& p = orig_img.get_clamped_or_wrapped(x, y, wrapping, wrapping); - - float w = kernel[(xd + H) + (yd + H) * odd_filter_width]; - c[0] += p[0] * w; - c[1] += p[1] * w; - c[2] += p[2] * w; - c[3] += p[3] * w; - } - } - - dst(ox, oy).set(c[0], c[1], c[2], c[3]); - } - } -} - -static void pow_image(const imagef& src, imagef& dst, const vec4F& power) -{ - dst.resize(src); - -#pragma omp parallel for - for (int y = 0; y < (int)dst.get_height(); y++) - { - for (uint32_t x = 0; x < dst.get_width(); x++) - { - const vec4F& p = src(x, y); - - if ((power[0] == 2.0f) && (power[1] == 2.0f) && (power[2] == 2.0f) && (power[3] == 2.0f)) - dst(x, y).set(p[0] * p[0], p[1] * p[1], p[2] * p[2], p[3] * p[3]); - else - dst(x, y).set(powf(p[0], power[0]), powf(p[1], power[1]), powf(p[2], power[2]), powf(p[3], power[3])); - } - } -} - -#if 0 -static void mul_image(const imagef& src, imagef& dst, const vec4F& mul) -{ - dst.resize(src); - -#pragma omp parallel for - for (int y = 0; y < (int)dst.get_height(); y++) - { - for (uint32_t x = 0; x < dst.get_width(); x++) - { - const vec4F& p = src(x, y); - dst(x, y).set(p[0] * mul[0], p[1] * mul[1], p[2] * mul[2], p[3] * mul[3]); - } - } -} -#endif - -static void scale_image(const imagef& src, imagef& dst, const vec4F& scale, const vec4F& shift) -{ - dst.resize(src); - -#pragma omp parallel for - for (int y = 0; y < (int)dst.get_height(); y++) - { - for (uint32_t x = 0; x < dst.get_width(); x++) - { - const vec4F& p = src(x, y); - - vec4F d; - - for (uint32_t c = 0; c < 4; c++) - d[c] = scale[c] * p[c] + shift[c]; - - dst(x, y).set(d[0], d[1], d[2], d[3]); - } - } -} - -static void add_weighted_image(const imagef& src1, const vec4F& alpha, const imagef& src2, const vec4F& beta, const vec4F& gamma, imagef& dst) -{ - dst.resize(src1); - -#pragma omp parallel for - for (int y = 0; y < (int)dst.get_height(); y++) - { - for (uint32_t x = 0; x < dst.get_width(); x++) - { - const vec4F& s1 = src1(x, y); - const vec4F& s2 = src2(x, y); - - dst(x, y).set( - s1[0] * alpha[0] + s2[0] * beta[0] + gamma[0], - s1[1] * alpha[1] + s2[1] * beta[1] + gamma[1], - s1[2] * alpha[2] + s2[2] * beta[2] + gamma[2], - s1[3] * alpha[3] + s2[3] * beta[3] + gamma[3]); - } - } -} - -static void add_image(const imagef& src1, const imagef& src2, imagef& dst) -{ - dst.resize(src1); - -#pragma omp parallel for - for (int y = 0; y < (int)dst.get_height(); y++) - { - for (uint32_t x = 0; x < dst.get_width(); x++) - { - const vec4F& s1 = src1(x, y); - const vec4F& s2 = src2(x, y); - - dst(x, y).set(s1[0] + s2[0], s1[1] + s2[1], s1[2] + s2[2], s1[3] + s2[3]); - } - } -} - -static void adds_image(const imagef& src, const vec4F& value, imagef& dst) -{ - dst.resize(src); - -#pragma omp parallel for - for (int y = 0; y < (int)dst.get_height(); y++) - { - for (uint32_t x = 0; x < dst.get_width(); x++) - { - const vec4F& p = src(x, y); - - dst(x, y).set(p[0] + value[0], p[1] + value[1], p[2] + value[2], p[3] + value[3]); - } - } -} - -static void mul_image(const imagef& src1, const imagef& src2, imagef& dst, const vec4F& scale) -{ - dst.resize(src1); - -#pragma omp parallel for - for (int y = 0; y < (int)dst.get_height(); y++) - { - for (uint32_t x = 0; x < dst.get_width(); x++) - { - const vec4F& s1 = src1(x, y); - const vec4F& s2 = src2(x, y); - - vec4F d; - - for (uint32_t c = 0; c < 4; c++) - { - float v1 = s1[c]; - float v2 = s2[c]; - d[c] = v1 * v2 * scale[c]; - } - - dst(x, y) = d; - } - } -} - -static void div_image(const imagef& src1, const imagef& src2, imagef& dst, const vec4F& scale) -{ - dst.resize(src1); - -#pragma omp parallel for - for (int y = 0; y < (int)dst.get_height(); y++) - { - for (uint32_t x = 0; x < dst.get_width(); x++) - { - const vec4F& s1 = src1(x, y); - const vec4F& s2 = src2(x, y); - - vec4F d; - - for (uint32_t c = 0; c < 4; c++) - { - float v = s2[c]; - if (v == 0.0f) - d[c] = 0.0f; - else - d[c] = (s1[c] * scale[c]) / v; - } - - dst(x, y) = d; - } - } -} - -static vec4F avg_image(const imagef& src) -{ - vec4F avg(0.0f); - - for (uint32_t y = 0; y < src.get_height(); y++) - { - for (uint32_t x = 0; x < src.get_width(); x++) - { - const vec4F& s = src(x, y); - - avg += vec4F(s[0], s[1], s[2], s[3]); - } - } - - avg /= static_cast(src.get_total_pixels()); - - return avg; -} - -// Reference: https://ece.uwaterloo.ca/~z70wang/research/ssim/index.html -vec4F compute_ssim(const imagef& a, const imagef& b) -{ - imagef axb, a_sq, b_sq, mu1, mu2, mu1_sq, mu2_sq, mu1_mu2, s1_sq, s2_sq, s12, smap, t1, t2, t3; - - const float C1 = 6.50250f, C2 = 58.52250f; - - pow_image(a, a_sq, vec4F(2)); - pow_image(b, b_sq, vec4F(2)); - mul_image(a, b, axb, vec4F(1.0f)); - - gaussian_filter(mu1, a, 11, 1.5f * 1.5f); - gaussian_filter(mu2, b, 11, 1.5f * 1.5f); - - pow_image(mu1, mu1_sq, vec4F(2)); - pow_image(mu2, mu2_sq, vec4F(2)); - mul_image(mu1, mu2, mu1_mu2, vec4F(1.0f)); - - gaussian_filter(s1_sq, a_sq, 11, 1.5f * 1.5f); - add_weighted_image(s1_sq, vec4F(1), mu1_sq, vec4F(-1), vec4F(0), s1_sq); - - gaussian_filter(s2_sq, b_sq, 11, 1.5f * 1.5f); - add_weighted_image(s2_sq, vec4F(1), mu2_sq, vec4F(-1), vec4F(0), s2_sq); - - gaussian_filter(s12, axb, 11, 1.5f * 1.5f); - add_weighted_image(s12, vec4F(1), mu1_mu2, vec4F(-1), vec4F(0), s12); - - scale_image(mu1_mu2, t1, vec4F(2), vec4F(0)); - adds_image(t1, vec4F(C1), t1); - - scale_image(s12, t2, vec4F(2), vec4F(0)); - adds_image(t2, vec4F(C2), t2); - - mul_image(t1, t2, t3, vec4F(1)); - - add_image(mu1_sq, mu2_sq, t1); - adds_image(t1, vec4F(C1), t1); - - add_image(s1_sq, s2_sq, t2); - adds_image(t2, vec4F(C2), t2); - - mul_image(t1, t2, t1, vec4F(1)); - - div_image(t3, t1, smap, vec4F(1)); - - return avg_image(smap); -} - -vec4F compute_ssim(const image_u8& a, const image_u8& b, bool luma) -{ - image_u8 ta(a), tb(b); - - if ((ta.width() != tb.width()) || (ta.height() != tb.height())) - { - fprintf(stderr, "compute_ssim: Cropping input images to equal dimensions\n"); - - const uint32_t w = std::min(a.width(), b.width()); - const uint32_t h = std::min(a.height(), b.height()); - ta.crop(w, h); - tb.crop(w, h); - } - - if (!ta.width() || !ta.height()) - { - assert(0); - return vec4F(0); - } - - if (luma) - { - for (uint32_t y = 0; y < ta.height(); y++) - { - for (uint32_t x = 0; x < ta.width(); x++) - { - ta(x, y).set((uint8_t)ta(x, y).get_luma(), ta(x, y).a); - tb(x, y).set((uint8_t)tb(x, y).get_luma(), tb(x, y).a); - } - } - } - - imagef fta, ftb; - - fta.set(ta); - ftb.set(tb); - - return compute_ssim(fta, ftb); -} - -bool save_dds(const char* pFilename, uint32_t width, uint32_t height, const void* pBlocks, uint32_t pixel_format_bpp, DXGI_FORMAT dxgi_format, bool srgb, bool force_dx10_header) -{ - (void)srgb; - - FILE* pFile = NULL; -#ifdef _MSC_VER - fopen_s(&pFile, pFilename, "wb"); -#else - pFile = fopen(pFilename, "wb"); -#endif - if (!pFile) - { - fprintf(stderr, "Failed creating file %s!\n", pFilename); - return false; - } - - fwrite("DDS ", 4, 1, pFile); - - DDSURFACEDESC2 desc; - memset(&desc, 0, sizeof(desc)); - - desc.dwSize = sizeof(desc); - desc.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_CAPS; - - desc.dwWidth = width; - desc.dwHeight = height; - - desc.ddsCaps.dwCaps = DDSCAPS_TEXTURE; - desc.ddpfPixelFormat.dwSize = sizeof(desc.ddpfPixelFormat); - - desc.ddpfPixelFormat.dwFlags |= DDPF_FOURCC; - - desc.lPitch = (((desc.dwWidth + 3) & ~3) * ((desc.dwHeight + 3) & ~3) * pixel_format_bpp) >> 3; - desc.dwFlags |= DDSD_LINEARSIZE; - - desc.ddpfPixelFormat.dwRGBBitCount = 0; - - if ((!force_dx10_header) && - ((dxgi_format == DXGI_FORMAT_BC1_UNORM) || - (dxgi_format == DXGI_FORMAT_BC3_UNORM) || - (dxgi_format == DXGI_FORMAT_BC4_UNORM) || - (dxgi_format == DXGI_FORMAT_BC5_UNORM))) - { - if (dxgi_format == DXGI_FORMAT_BC1_UNORM) - desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('D', 'X', 'T', '1'); - else if (dxgi_format == DXGI_FORMAT_BC3_UNORM) - desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('D', 'X', 'T', '5'); - else if (dxgi_format == DXGI_FORMAT_BC4_UNORM) - desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('A', 'T', 'I', '1'); - else if (dxgi_format == DXGI_FORMAT_BC5_UNORM) - desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('A', 'T', 'I', '2'); - - fwrite(&desc, sizeof(desc), 1, pFile); - } - else - { - desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('D', 'X', '1', '0'); - - fwrite(&desc, sizeof(desc), 1, pFile); - - DDS_HEADER_DXT10 hdr10; - memset(&hdr10, 0, sizeof(hdr10)); - - // Not all tools support DXGI_FORMAT_BC7_UNORM_SRGB (like NVTT), but ddsview in DirectXTex pays attention to it. So not sure what to do here. - // For best compatibility just write DXGI_FORMAT_BC7_UNORM. - //hdr10.dxgiFormat = srgb ? DXGI_FORMAT_BC7_UNORM_SRGB : DXGI_FORMAT_BC7_UNORM; - hdr10.dxgiFormat = dxgi_format; // DXGI_FORMAT_BC7_UNORM; - hdr10.resourceDimension = D3D10_RESOURCE_DIMENSION_TEXTURE2D; - hdr10.arraySize = 1; - - fwrite(&hdr10, sizeof(hdr10), 1, pFile); - } - - fwrite(pBlocks, desc.lPitch, 1, pFile); - - if (fclose(pFile) == EOF) - { - fprintf(stderr, "Failed writing to DDS file %s!\n", pFilename); - return false; - } - - return true; -} - -void strip_extension(std::string& s) -{ - for (int32_t i = (int32_t)s.size() - 1; i >= 0; i--) - { - if (s[i] == '.') - { - s.resize(i); - break; - } - } -} - -void strip_path(std::string& s) -{ - for (int32_t i = (int32_t)s.size() - 1; i >= 0; i--) - { - if ((s[i] == '/') || (s[i] == ':') || (s[i] == '\\')) - { - s.erase(0, i + 1); - break; - } - } -} - -uint32_t hash_hsieh(const uint8_t* pBuf, size_t len) -{ - if (!pBuf || !len) - return 0; - - uint32_t h = static_cast(len); - - const uint32_t bytes_left = len & 3; - len >>= 2; - - while (len--) - { - const uint16_t* pWords = reinterpret_cast(pBuf); - - h += pWords[0]; - - const uint32_t t = (pWords[1] << 11) ^ h; - h = (h << 16) ^ t; - - pBuf += sizeof(uint32_t); - - h += h >> 11; - } - - switch (bytes_left) - { - case 1: - h += *reinterpret_cast(pBuf); - h ^= h << 10; - h += h >> 1; - break; - case 2: - h += *reinterpret_cast(pBuf); - h ^= h << 11; - h += h >> 17; - break; - case 3: - h += *reinterpret_cast(pBuf); - h ^= h << 16; - h ^= (static_cast(pBuf[sizeof(uint16_t)])) << 18; - h += h >> 11; - break; - default: - break; - } - - h ^= h << 3; - h += h >> 5; - h ^= h << 4; - h += h >> 17; - h ^= h << 25; - h += h >> 6; - - return h; -} - -float compute_block_max_std_dev(const color_quad_u8* pPixels, uint32_t block_width, uint32_t block_height, uint32_t num_comps) -{ - tracked_stat comp_stats[4]; - - for (uint32_t y = 0; y < block_height; y++) - { - for (uint32_t x = 0; x < block_width; x++) - { - const color_quad_u8* pPixel = pPixels + x + y * block_width; - - for (uint32_t c = 0; c < num_comps; c++) - comp_stats[c].update(pPixel->m_c[c]); - } - } - - float max_std_dev = 0.0f; - for (uint32_t i = 0; i < num_comps; i++) - max_std_dev = std::max(max_std_dev, comp_stats[i].get_std_dev()); - return max_std_dev; -} - -const uint32_t ASTC_SIG = 0x5CA1AB13; - -#pragma pack(push, 1) -struct astc_header -{ - uint32_t m_sig; - uint8_t m_block_x; - uint8_t m_block_y; - uint8_t m_block_z; - uint8_t m_width[3]; - uint8_t m_height[3]; - uint8_t m_depth[3]; -}; -#pragma pack(pop) - -bool save_astc_file(const char* pFilename, block16_vec& blocks, uint32_t width, uint32_t height, uint32_t block_width, uint32_t block_height) -{ - FILE* pFile = nullptr; - -#ifdef _MSC_VER - fopen_s(&pFile, pFilename, "wb"); -#else - pFile = fopen(pFilename, "wb"); -#endif - - if (!pFile) - return false; - - astc_header hdr; - memset(&hdr, 0, sizeof(hdr)); - - hdr.m_sig = ASTC_SIG; - hdr.m_block_x = (uint8_t)block_width; - hdr.m_block_y = (uint8_t)block_height; - hdr.m_block_z = 1; - hdr.m_width[0] = (uint8_t)(width); - hdr.m_width[1] = (uint8_t)(width >> 8); - hdr.m_width[2] = (uint8_t)(width >> 16); - hdr.m_height[0] = (uint8_t)(height); - hdr.m_height[1] = (uint8_t)(height >> 8); - hdr.m_height[2] = (uint8_t)(height >> 16); - hdr.m_depth[0] = 1; - fwrite(&hdr, sizeof(hdr), 1, pFile); - - fwrite(blocks.data(), 16, blocks.size(), pFile); - if (fclose(pFile) == EOF) - return false; - - return true; -} - -bool load_astc_file(const char* pFilename, block16_vec& blocks, uint32_t& width, uint32_t& height, uint32_t& block_width, uint32_t& block_height) -{ - FILE* pFile = nullptr; - -#ifdef _MSC_VER - fopen_s(&pFile, pFilename, "rb"); -#else - pFile = fopen(pFilename, "rb"); -#endif - - if (!pFile) - return false; - - astc_header hdr; - if (fread(&hdr, sizeof(hdr), 1, pFile) != 1) - { - fclose(pFile); - return false; - } - - if (hdr.m_sig != ASTC_SIG) - { - fclose(pFile); - return false; - } - - width = hdr.m_width[0] + (hdr.m_width[1] << 8) + (hdr.m_width[2] << 16); - height = hdr.m_height[0] + (hdr.m_height[1] << 8) + (hdr.m_height[2] << 16); - uint32_t depth = hdr.m_depth[0] + (hdr.m_depth[1] << 8) + (hdr.m_depth[2] << 16); - - if ((width < 1) || (width > 32768) || (height < 1) || (height > 32768)) - return false; - if ((hdr.m_block_z != 1) || (depth != 1)) - return false; - - block_width = hdr.m_block_x; - block_height = hdr.m_block_y; - - if ((block_width < 4) || (block_width > 12) || (block_height < 4) || (block_height > 12)) - return false; - - uint32_t blocks_x = (width + block_width - 1) / block_width; - uint32_t blocks_y = (height + block_height - 1) / block_height; - uint32_t total_blocks = blocks_x * blocks_y; - - blocks.resize(total_blocks); - - if (fread(blocks.data(), 16, total_blocks, pFile) != total_blocks) - { - fclose(pFile); - return false; - } - - fclose(pFile); - return true; -} - -uint32_t get_deflate_size(const void* pData, size_t data_size) -{ - size_t comp_size = 0; - void* pPre_RDO_Comp_data = tdefl_compress_mem_to_heap(pData, data_size, &comp_size, TDEFL_MAX_PROBES_MASK);// TDEFL_DEFAULT_MAX_PROBES); - mz_free(pPre_RDO_Comp_data); - - if (comp_size > UINT32_MAX) - return UINT32_MAX; - - return (uint32_t)comp_size; -} - -} // namespace utils diff --git a/external/bc7enc_rdo/utils.h b/external/bc7enc_rdo/utils.h deleted file mode 100644 index b806c58a50..0000000000 --- a/external/bc7enc_rdo/utils.h +++ /dev/null @@ -1,2617 +0,0 @@ -// File: utils.h -#pragma once -#ifdef _MSC_VER -#pragma warning (push) -#pragma warning (disable:4127) // conditional expression is constant -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "dds_defs.h" - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#define ASSUME(c) static_assert(c, #c) -#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) - -#define VECTOR_TEXT_LINE_SIZE (30.0f) -#define VECTOR_TEXT_CORE_LINE_SIZE (21.0f) - -#define UNUSED(x) (void)x - -namespace utils -{ -extern const uint32_t g_pretty_colors[]; -extern const uint32_t g_num_pretty_colors; - -const float cDegToRad = 0.01745329252f; -const float cRadToDeg = 57.29577951f; - -enum eClear { cClear }; -enum eZero { cZero }; -enum eInitExpand { cInitExpand }; - -inline int iabs(int i) { if (i < 0) i = -i; return i; } -inline uint8_t clamp255(int32_t i) { return (uint8_t)((i & 0xFFFFFF00U) ? (~(i >> 31)) : i); } -template inline S clamp(S value, S low, S high) { return (value < low) ? low : ((value > high) ? high : value); } -template inline F lerp(F a, F b, F s) { return a + (b - a) * s; } -template inline F square(F a) { return a * a; } - -template -inline T prev_wrap(T i, T n) -{ - T temp = i - 1; - if (temp < 0) - temp = n - 1; - return temp; -} - -template -inline T next_wrap(T i, T n) -{ - T temp = i + 1; - if (temp >= n) - temp = 0; - return temp; -} - -inline int posmod(int x, int y) -{ - if (x >= 0) - return (x < y) ? x : (x % y); - int m = (-x) % y; - return (m != 0) ? (y - m) : m; -} - -inline float deg_to_rad(float f) -{ - return f * cDegToRad; -}; - -inline float rad_to_deg(float f) -{ - return f * cRadToDeg; -}; - -template -struct rel_ops -{ - friend bool operator!=(const T& x, const T& y) - { - return (!(x == y)); - } - friend bool operator>(const T& x, const T& y) - { - return (y < x); - } - friend bool operator<=(const T& x, const T& y) - { - return (!(y < x)); - } - friend bool operator>=(const T& x, const T& y) - { - return (!(x < y)); - } -}; - -template -class vec : public rel_ops > -{ -public: - typedef T scalar_type; - enum - { - num_elements = N - }; - - inline vec() - { - } - - inline vec(eClear) - { - clear(); - } - - inline vec(const vec& other) - { - for (uint32_t i = 0; i < N; i++) - m_s[i] = other.m_s[i]; - } - - template - inline vec(const vec& other) - { - set(other); - } - - template - inline vec(const vec& other, T w) - { - *this = other; - m_s[N - 1] = w; - } - - explicit inline vec(T val) - { - set(val); - } - - inline vec(T val0, T val1) - { - set(val0, val1); - } - - inline vec(T val0, T val1, T val2) - { - set(val0, val1, val2); - } - - inline vec(T val0, T val1, T val2, T val3) - { - set(val0, val1, val2, val3); - } - - inline vec(T val0, T val1, T val2, T val3, T val4, T val5) - { - set(val0, val1, val2, val3, val4, val5); - } - - inline vec( - T val0, T val1, T val2, T val3, - T val4, T val5, T val6, T val7, - T val8, T val9, T val10, T val11, - T val12, T val13, T val14, T val15) - { - set(val0, val1, val2, val3, - val4, val5, val6, val7, - val8, val9, val10, val11, - val12, val13, val14, val15); - } - - inline vec( - T val0, T val1, T val2, T val3, - T val4, T val5, T val6, T val7, - T val8, T val9, T val10, T val11, - T val12, T val13, T val14, T val15, - T val16, T val17, T val18, T val19) - { - set(val0, val1, val2, val3, - val4, val5, val6, val7, - val8, val9, val10, val11, - val12, val13, val14, val15, - val16, val17, val18, val19); - } - - inline vec( - T val0, T val1, T val2, T val3, - T val4, T val5, T val6, T val7, - T val8, T val9, T val10, T val11, - T val12, T val13, T val14, T val15, - T val16, T val17, T val18, T val19, - T val20, T val21, T val22, T val23, - T val24) - { - set(val0, val1, val2, val3, - val4, val5, val6, val7, - val8, val9, val10, val11, - val12, val13, val14, val15, - val16, val17, val18, val19, - val20, val21, val22, val23, - val24); - } - - inline void clear() - { - if (N > 4) - memset(m_s, 0, sizeof(m_s)); - else - { - for (uint32_t i = 0; i < N; i++) - m_s[i] = 0; - } - } - - template - inline vec& set(const vec& other) - { - if ((void*)this == (void*)&other) - return *this; - const uint32_t m = std::min(N, ON); - uint32_t i; - for (i = 0; i < m; i++) - m_s[i] = static_cast(other[i]); - for (; i < N; i++) - m_s[i] = 0; - return *this; - } - - inline vec& set_component(uint32_t index, T val) - { - assert(index < N); - m_s[index] = val; - return *this; - } - - inline vec& set(T val) - { - for (uint32_t i = 0; i < N; i++) - m_s[i] = val; - return *this; - } - - inline vec& set(T val0, T val1) - { - m_s[0] = val0; - if (N >= 2) - { - m_s[1] = val1; - - for (uint32_t i = 2; i < N; i++) - m_s[i] = 0; - } - return *this; - } - - inline vec& set(T val0, T val1, T val2) - { - m_s[0] = val0; - if (N >= 2) - { - m_s[1] = val1; - - if (N >= 3) - { - m_s[2] = val2; - - for (uint32_t i = 3; i < N; i++) - m_s[i] = 0; - } - } - return *this; - } - - inline vec& set(T val0, T val1, T val2, T val3) - { - m_s[0] = val0; - if (N >= 2) - { - m_s[1] = val1; - - if (N >= 3) - { - m_s[2] = val2; - - if (N >= 4) - { - m_s[3] = val3; - - for (uint32_t i = 4; i < N; i++) - m_s[i] = 0; - } - } - } - return *this; - } - - inline vec& set(T val0, T val1, T val2, T val3, T val4, T val5) - { - m_s[0] = val0; - if (N >= 2) - { - m_s[1] = val1; - - if (N >= 3) - { - m_s[2] = val2; - - if (N >= 4) - { - m_s[3] = val3; - - if (N >= 5) - { - m_s[4] = val4; - - if (N >= 6) - { - m_s[5] = val5; - - for (uint32_t i = 6; i < N; i++) - m_s[i] = 0; - } - } - } - } - } - return *this; - } - - inline vec& set( - T val0, T val1, T val2, T val3, - T val4, T val5, T val6, T val7, - T val8, T val9, T val10, T val11, - T val12, T val13, T val14, T val15) - { - m_s[0] = val0; - if (N >= 2) - m_s[1] = val1; - if (N >= 3) - m_s[2] = val2; - if (N >= 4) - m_s[3] = val3; - - if (N >= 5) - m_s[4] = val4; - if (N >= 6) - m_s[5] = val5; - if (N >= 7) - m_s[6] = val6; - if (N >= 8) - m_s[7] = val7; - - if (N >= 9) - m_s[8] = val8; - if (N >= 10) - m_s[9] = val9; - if (N >= 11) - m_s[10] = val10; - if (N >= 12) - m_s[11] = val11; - - if (N >= 13) - m_s[12] = val12; - if (N >= 14) - m_s[13] = val13; - if (N >= 15) - m_s[14] = val14; - if (N >= 16) - m_s[15] = val15; - - for (uint32_t i = 16; i < N; i++) - m_s[i] = 0; - - return *this; - } - - inline vec& set( - T val0, T val1, T val2, T val3, - T val4, T val5, T val6, T val7, - T val8, T val9, T val10, T val11, - T val12, T val13, T val14, T val15, - T val16, T val17, T val18, T val19) - { - m_s[0] = val0; - if (N >= 2) - m_s[1] = val1; - if (N >= 3) - m_s[2] = val2; - if (N >= 4) - m_s[3] = val3; - - if (N >= 5) - m_s[4] = val4; - if (N >= 6) - m_s[5] = val5; - if (N >= 7) - m_s[6] = val6; - if (N >= 8) - m_s[7] = val7; - - if (N >= 9) - m_s[8] = val8; - if (N >= 10) - m_s[9] = val9; - if (N >= 11) - m_s[10] = val10; - if (N >= 12) - m_s[11] = val11; - - if (N >= 13) - m_s[12] = val12; - if (N >= 14) - m_s[13] = val13; - if (N >= 15) - m_s[14] = val14; - if (N >= 16) - m_s[15] = val15; - - if (N >= 17) - m_s[16] = val16; - if (N >= 18) - m_s[17] = val17; - if (N >= 19) - m_s[18] = val18; - if (N >= 20) - m_s[19] = val19; - - for (uint32_t i = 20; i < N; i++) - m_s[i] = 0; - - return *this; - } - - inline vec& set( - T val0, T val1, T val2, T val3, - T val4, T val5, T val6, T val7, - T val8, T val9, T val10, T val11, - T val12, T val13, T val14, T val15, - T val16, T val17, T val18, T val19, - T val20, T val21, T val22, T val23, - T val24) - { - m_s[0] = val0; - if (N >= 2) - m_s[1] = val1; - if (N >= 3) - m_s[2] = val2; - if (N >= 4) - m_s[3] = val3; - - if (N >= 5) - m_s[4] = val4; - if (N >= 6) - m_s[5] = val5; - if (N >= 7) - m_s[6] = val6; - if (N >= 8) - m_s[7] = val7; - - if (N >= 9) - m_s[8] = val8; - if (N >= 10) - m_s[9] = val9; - if (N >= 11) - m_s[10] = val10; - if (N >= 12) - m_s[11] = val11; - - if (N >= 13) - m_s[12] = val12; - if (N >= 14) - m_s[13] = val13; - if (N >= 15) - m_s[14] = val14; - if (N >= 16) - m_s[15] = val15; - - if (N >= 17) - m_s[16] = val16; - if (N >= 18) - m_s[17] = val17; - if (N >= 19) - m_s[18] = val18; - if (N >= 20) - m_s[19] = val19; - - if (N >= 21) - m_s[20] = val20; - if (N >= 22) - m_s[21] = val21; - if (N >= 23) - m_s[22] = val22; - if (N >= 24) - m_s[23] = val23; - - if (N >= 25) - m_s[24] = val24; - - for (uint32_t i = 25; i < N; i++) - m_s[i] = 0; - - return *this; - } - - inline vec& set(const T* pValues) - { - for (uint32_t i = 0; i < N; i++) - m_s[i] = pValues[i]; - return *this; - } - - template - inline vec& swizzle_set(const vec& other, uint32_t i) - { - return set(static_cast(other[i])); - } - - template - inline vec& swizzle_set(const vec& other, uint32_t i, uint32_t j) - { - return set(static_cast(other[i]), static_cast(other[j])); - } - - template - inline vec& swizzle_set(const vec& other, uint32_t i, uint32_t j, uint32_t k) - { - return set(static_cast(other[i]), static_cast(other[j]), static_cast(other[k])); - } - - template - inline vec& swizzle_set(const vec& other, uint32_t i, uint32_t j, uint32_t k, uint32_t l) - { - return set(static_cast(other[i]), static_cast(other[j]), static_cast(other[k]), static_cast(other[l])); - } - - inline vec& operator=(const vec& rhs) - { - if (this != &rhs) - { - for (uint32_t i = 0; i < N; i++) - m_s[i] = rhs.m_s[i]; - } - return *this; - } - - template - inline vec& operator=(const vec& other) - { - if ((void*)this == (void*)&other) - return *this; - - uint32_t s = std::min(N, O); - - uint32_t i; - for (i = 0; i < s; i++) - m_s[i] = static_cast(other[i]); - - for (; i < N; i++) - m_s[i] = 0; - - return *this; - } - - inline bool operator==(const vec& rhs) const - { - for (uint32_t i = 0; i < N; i++) - if (!(m_s[i] == rhs.m_s[i])) - return false; - return true; - } - - inline bool operator<(const vec& rhs) const - { - for (uint32_t i = 0; i < N; i++) - { - if (m_s[i] < rhs.m_s[i]) - return true; - else if (!(m_s[i] == rhs.m_s[i])) - return false; - } - - return false; - } - - inline T operator[](uint32_t i) const - { - assert(i < N); - return m_s[i]; - } - - inline T& operator[](uint32_t i) - { - assert(i < N); - return m_s[i]; - } - - template - inline uint64_t get_component_as_uint() const - { - ASSUME(index < N); - if (sizeof(T) == sizeof(float)) - return *reinterpret_cast(&m_s[index]); - else - return *reinterpret_cast(&m_s[index]); - } - - inline T get_x(void) const - { - return m_s[0]; - } - inline T get_y(void) const - { - ASSUME(N >= 2); - return m_s[1]; - } - inline T get_z(void) const - { - ASSUME(N >= 3); - return m_s[2]; - } - inline T get_w(void) const - { - ASSUME(N >= 4); - return m_s[3]; - } - - inline vec get_x_vector() const - { - return broadcast<0>(); - } - inline vec get_y_vector() const - { - return broadcast<1>(); - } - inline vec get_z_vector() const - { - return broadcast<2>(); - } - inline vec get_w_vector() const - { - return broadcast<3>(); - } - - inline T get_component(uint32_t i) const - { - return (*this)[i]; - } - - inline vec& set_x(T v) - { - m_s[0] = v; - return *this; - } - inline vec& set_y(T v) - { - ASSUME(N >= 2); - m_s[1] = v; - return *this; - } - inline vec& set_z(T v) - { - ASSUME(N >= 3); - m_s[2] = v; - return *this; - } - inline vec& set_w(T v) - { - ASSUME(N >= 4); - m_s[3] = v; - return *this; - } - - inline const T* get_ptr() const - { - return reinterpret_cast(&m_s[0]); - } - inline T* get_ptr() - { - return reinterpret_cast(&m_s[0]); - } - - inline vec as_point() const - { - vec result(*this); - result[N - 1] = 1; - return result; - } - - inline vec as_dir() const - { - vec result(*this); - result[N - 1] = 0; - return result; - } - - inline vec<2, T> select2(uint32_t i, uint32_t j) const - { - assert((i < N) && (j < N)); - return vec<2, T>(m_s[i], m_s[j]); - } - - inline vec<3, T> select3(uint32_t i, uint32_t j, uint32_t k) const - { - assert((i < N) && (j < N) && (k < N)); - return vec<3, T>(m_s[i], m_s[j], m_s[k]); - } - - inline vec<4, T> select4(uint32_t i, uint32_t j, uint32_t k, uint32_t l) const - { - assert((i < N) && (j < N) && (k < N) && (l < N)); - return vec<4, T>(m_s[i], m_s[j], m_s[k], m_s[l]); - } - - inline bool is_dir() const - { - return m_s[N - 1] == 0; - } - inline bool is_vector() const - { - return is_dir(); - } - inline bool is_point() const - { - return m_s[N - 1] == 1; - } - - inline vec project() const - { - vec result(*this); - if (result[N - 1]) - result /= result[N - 1]; - return result; - } - - inline vec broadcast(unsigned i) const - { - return vec((*this)[i]); - } - - template - inline vec broadcast() const - { - return vec((*this)[i]); - } - - inline vec swizzle(uint32_t i, uint32_t j) const - { - return vec((*this)[i], (*this)[j]); - } - - inline vec swizzle(uint32_t i, uint32_t j, uint32_t k) const - { - return vec((*this)[i], (*this)[j], (*this)[k]); - } - - inline vec swizzle(uint32_t i, uint32_t j, uint32_t k, uint32_t l) const - { - return vec((*this)[i], (*this)[j], (*this)[k], (*this)[l]); - } - - inline vec operator-() const - { - vec result; - for (uint32_t i = 0; i < N; i++) - result.m_s[i] = -m_s[i]; - return result; - } - - inline vec operator+() const - { - return *this; - } - - inline vec& operator+=(const vec& other) - { - for (uint32_t i = 0; i < N; i++) - m_s[i] += other.m_s[i]; - return *this; - } - - inline vec& operator-=(const vec& other) - { - for (uint32_t i = 0; i < N; i++) - m_s[i] -= other.m_s[i]; - return *this; - } - - inline vec& operator*=(const vec& other) - { - for (uint32_t i = 0; i < N; i++) - m_s[i] *= other.m_s[i]; - return *this; - } - - inline vec& operator/=(const vec& other) - { - for (uint32_t i = 0; i < N; i++) - m_s[i] /= other.m_s[i]; - return *this; - } - - inline vec& operator*=(T s) - { - for (uint32_t i = 0; i < N; i++) - m_s[i] *= s; - return *this; - } - - inline vec& operator/=(T s) - { - for (uint32_t i = 0; i < N; i++) - m_s[i] /= s; - return *this; - } - - // component-wise multiply (not a dot product like in previous versions) - // just remarking it out because it's too ambiguous, use dot() or mul_components() instead -#if 0 - friend inline vec operator*(const vec& lhs, const vec& rhs) - { - return vec::mul_components(lhs, rhs); - } -#endif - - friend inline vec operator*(const vec& lhs, T val) - { - vec result; - for (uint32_t i = 0; i < N; i++) - result.m_s[i] = lhs.m_s[i] * val; - return result; - } - - friend inline vec operator*(T val, const vec& rhs) - { - vec result; - for (uint32_t i = 0; i < N; i++) - result.m_s[i] = val * rhs.m_s[i]; - return result; - } - - friend inline vec operator/(const vec& lhs, const vec& rhs) - { - vec result; - for (uint32_t i = 0; i < N; i++) - result.m_s[i] = lhs.m_s[i] / rhs.m_s[i]; - return result; - } - - friend inline vec operator/(const vec& lhs, T val) - { - vec result; - for (uint32_t i = 0; i < N; i++) - result.m_s[i] = lhs.m_s[i] / val; - return result; - } - - friend inline vec operator+(const vec& lhs, const vec& rhs) - { - vec result; - for (uint32_t i = 0; i < N; i++) - result.m_s[i] = lhs.m_s[i] + rhs.m_s[i]; - return result; - } - - friend inline vec operator-(const vec& lhs, const vec& rhs) - { - vec result; - for (uint32_t i = 0; i < N; i++) - result.m_s[i] = lhs.m_s[i] - rhs.m_s[i]; - return result; - } - - static inline vec<3, T> cross2(const vec& a, const vec& b) - { - ASSUME(N >= 2); - return vec<3, T>(0, 0, a[0] * b[1] - a[1] * b[0]); - } - - inline vec<3, T> cross2(const vec& b) const - { - return cross2(*this, b); - } - - static inline vec<3, T> cross3(const vec& a, const vec& b) - { - ASSUME(N >= 3); - return vec<3, T>(a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]); - } - - inline vec<3, T> cross3(const vec& b) const - { - return cross3(*this, b); - } - - static inline vec<3, T> cross(const vec& a, const vec& b) - { - ASSUME(N >= 2); - - if (N == 2) - return cross2(a, b); - else - return cross3(a, b); - } - - inline vec<3, T> cross(const vec& b) const - { - ASSUME(N >= 2); - return cross(*this, b); - } - - inline T dot(const vec& rhs) const - { - return dot(*this, rhs); - } - - inline vec dot_vector(const vec& rhs) const - { - return vec(dot(*this, rhs)); - } - - static inline T dot(const vec& lhs, const vec& rhs) - { - T result = lhs.m_s[0] * rhs.m_s[0]; - for (uint32_t i = 1; i < N; i++) - result += lhs.m_s[i] * rhs.m_s[i]; - return result; - } - - inline T dot2(const vec& rhs) const - { - ASSUME(N >= 2); - return m_s[0] * rhs.m_s[0] + m_s[1] * rhs.m_s[1]; - } - - inline T dot3(const vec& rhs) const - { - ASSUME(N >= 3); - return m_s[0] * rhs.m_s[0] + m_s[1] * rhs.m_s[1] + m_s[2] * rhs.m_s[2]; - } - - inline T dot4(const vec& rhs) const - { - ASSUME(N >= 4); - return m_s[0] * rhs.m_s[0] + m_s[1] * rhs.m_s[1] + m_s[2] * rhs.m_s[2] + m_s[3] * rhs.m_s[3]; - } - - inline T norm(void) const - { - T sum = m_s[0] * m_s[0]; - for (uint32_t i = 1; i < N; i++) - sum += m_s[i] * m_s[i]; - return sum; - } - - inline T length(void) const - { - return sqrt(norm()); - } - - inline T squared_distance(const vec& rhs) const - { - T dist2 = 0; - for (uint32_t i = 0; i < N; i++) - { - T d = m_s[i] - rhs.m_s[i]; - dist2 += d * d; - } - return dist2; - } - - inline T squared_distance(const vec& rhs, T early_out) const - { - T dist2 = 0; - for (uint32_t i = 0; i < N; i++) - { - T d = m_s[i] - rhs.m_s[i]; - dist2 += d * d; - if (dist2 > early_out) - break; - } - return dist2; - } - - inline T distance(const vec& rhs) const - { - T dist2 = 0; - for (uint32_t i = 0; i < N; i++) - { - T d = m_s[i] - rhs.m_s[i]; - dist2 += d * d; - } - return sqrt(dist2); - } - - inline vec inverse() const - { - vec result; - for (uint32_t i = 0; i < N; i++) - result[i] = m_s[i] ? (1.0f / m_s[i]) : 0; - return result; - } - - // returns squared length (norm) - inline double normalize(const vec* pDefaultVec = NULL) - { - double n = m_s[0] * m_s[0]; - for (uint32_t i = 1; i < N; i++) - n += m_s[i] * m_s[i]; - - if (n != 0) - *this *= static_cast(1.0f / sqrt(n)); - else if (pDefaultVec) - *this = *pDefaultVec; - return n; - } - - inline double normalize3(const vec* pDefaultVec = NULL) - { - ASSUME(N >= 3); - - double n = m_s[0] * m_s[0] + m_s[1] * m_s[1] + m_s[2] * m_s[2]; - - if (n != 0) - *this *= static_cast((1.0f / sqrt(n))); - else if (pDefaultVec) - *this = *pDefaultVec; - return n; - } - - inline vec& normalize_in_place(const vec* pDefaultVec = NULL) - { - normalize(pDefaultVec); - return *this; - } - - inline vec& normalize3_in_place(const vec* pDefaultVec = NULL) - { - normalize3(pDefaultVec); - return *this; - } - - inline vec get_normalized(const vec* pDefaultVec = NULL) const - { - vec result(*this); - result.normalize(pDefaultVec); - return result; - } - - inline vec get_normalized3(const vec* pDefaultVec = NULL) const - { - vec result(*this); - result.normalize3(pDefaultVec); - return result; - } - - inline vec& clamp(T l, T h) - { - for (uint32_t i = 0; i < N; i++) - m_s[i] = static_cast(clamp(m_s[i], l, h)); - return *this; - } - - inline vec& saturate() - { - return clamp(0.0f, 1.0f); - } - - inline vec& clamp(const vec& l, const vec& h) - { - for (uint32_t i = 0; i < N; i++) - m_s[i] = static_cast(clamp(m_s[i], l[i], h[i])); - return *this; - } - - inline bool is_within_bounds(const vec& l, const vec& h) const - { - for (uint32_t i = 0; i < N; i++) - if ((m_s[i] < l[i]) || (m_s[i] > h[i])) - return false; - - return true; - } - - inline bool is_within_bounds(T l, T h) const - { - for (uint32_t i = 0; i < N; i++) - if ((m_s[i] < l) || (m_s[i] > h)) - return false; - - return true; - } - - inline uint32_t get_major_axis(void) const - { - T m = fabs(m_s[0]); - uint32_t r = 0; - for (uint32_t i = 1; i < N; i++) - { - const T c = fabs(m_s[i]); - if (c > m) - { - m = c; - r = i; - } - } - return r; - } - - inline uint32_t get_minor_axis(void) const - { - T m = fabs(m_s[0]); - uint32_t r = 0; - for (uint32_t i = 1; i < N; i++) - { - const T c = fabs(m_s[i]); - if (c < m) - { - m = c; - r = i; - } - } - return r; - } - - inline void get_projection_axes(uint32_t& u, uint32_t& v) const - { - const int axis = get_major_axis(); - if (m_s[axis] < 0.0f) - { - v = next_wrap(axis, N); - u = next_wrap(v, N); - } - else - { - u = next_wrap(axis, N); - v = next_wrap(u, N); - } - } - - inline T get_absolute_minimum(void) const - { - T result = fabs(m_s[0]); - for (uint32_t i = 1; i < N; i++) - result = std::min(result, fabs(m_s[i])); - return result; - } - - inline T get_absolute_maximum(void) const - { - T result = fabs(m_s[0]); - for (uint32_t i = 1; i < N; i++) - result = std::max(result, fabs(m_s[i])); - return result; - } - - inline T get_minimum(void) const - { - T result = m_s[0]; - for (uint32_t i = 1; i < N; i++) - result = std::min(result, m_s[i]); - return result; - } - - inline T get_maximum(void) const - { - T result = m_s[0]; - for (uint32_t i = 1; i < N; i++) - result = std::max(result, m_s[i]); - return result; - } - - inline vec& remove_unit_direction(const vec& dir) - { - *this -= (dot(dir) * dir); - return *this; - } - - inline vec get_remove_unit_direction(const vec& dir) const - { - return *this - (dot(dir) * dir); - } - - inline bool all_less(const vec& b) const - { - for (uint32_t i = 0; i < N; i++) - if (m_s[i] >= b.m_s[i]) - return false; - return true; - } - - inline bool all_less_equal(const vec& b) const - { - for (uint32_t i = 0; i < N; i++) - if (m_s[i] > b.m_s[i]) - return false; - return true; - } - - inline bool all_greater(const vec& b) const - { - for (uint32_t i = 0; i < N; i++) - if (m_s[i] <= b.m_s[i]) - return false; - return true; - } - - inline bool all_greater_equal(const vec& b) const - { - for (uint32_t i = 0; i < N; i++) - if (m_s[i] < b.m_s[i]) - return false; - return true; - } - - inline vec negate_xyz() const - { - vec ret; - - ret[0] = -m_s[0]; - if (N >= 2) - ret[1] = -m_s[1]; - if (N >= 3) - ret[2] = -m_s[2]; - - for (uint32_t i = 3; i < N; i++) - ret[i] = m_s[i]; - - return ret; - } - - inline vec& invert() - { - for (uint32_t i = 0; i < N; i++) - if (m_s[i] != 0.0f) - m_s[i] = 1.0f / m_s[i]; - return *this; - } - - inline scalar_type perp_dot(const vec& b) const - { - ASSUME(N == 2); - return m_s[0] * b.m_s[1] - m_s[1] * b.m_s[0]; - } - - inline vec perp() const - { - ASSUME(N == 2); - return vec(-m_s[1], m_s[0]); - } - - inline vec get_floor() const - { - vec result; - for (uint32_t i = 0; i < N; i++) - result[i] = floor(m_s[i]); - return result; - } - - inline vec get_ceil() const - { - vec result; - for (uint32_t i = 0; i < N; i++) - result[i] = ceil(m_s[i]); - return result; - } - - // static helper methods - - static inline vec mul_components(const vec& lhs, const vec& rhs) - { - vec result; - for (uint32_t i = 0; i < N; i++) - result[i] = lhs.m_s[i] * rhs.m_s[i]; - return result; - } - - static inline vec mul_add_components(const vec& a, const vec& b, const vec& c) - { - vec result; - for (uint32_t i = 0; i < N; i++) - result[i] = a.m_s[i] * b.m_s[i] + c.m_s[i]; - return result; - } - - static inline vec make_axis(uint32_t i) - { - vec result; - result.clear(); - result[i] = 1; - return result; - } - - static inline vec equals_mask(const vec& a, const vec& b) - { - vec ret; - for (uint32_t i = 0; i < N; i++) - ret[i] = (a[i] == b[i]); - return ret; - } - - static inline vec not_equals_mask(const vec& a, const vec& b) - { - vec ret; - for (uint32_t i = 0; i < N; i++) - ret[i] = (a[i] != b[i]); - return ret; - } - - static inline vec less_mask(const vec& a, const vec& b) - { - vec ret; - for (uint32_t i = 0; i < N; i++) - ret[i] = (a[i] < b[i]); - return ret; - } - - static inline vec less_equals_mask(const vec& a, const vec& b) - { - vec ret; - for (uint32_t i = 0; i < N; i++) - ret[i] = (a[i] <= b[i]); - return ret; - } - - static inline vec greater_equals_mask(const vec& a, const vec& b) - { - vec ret; - for (uint32_t i = 0; i < N; i++) - ret[i] = (a[i] >= b[i]); - return ret; - } - - static inline vec greater_mask(const vec& a, const vec& b) - { - vec ret; - for (uint32_t i = 0; i < N; i++) - ret[i] = (a[i] > b[i]); - return ret; - } - - static inline vec component_max(const vec& a, const vec& b) - { - vec ret; - for (uint32_t i = 0; i < N; i++) - ret.m_s[i] = std::max(a.m_s[i], b.m_s[i]); - return ret; - } - - static inline vec component_min(const vec& a, const vec& b) - { - vec ret; - for (uint32_t i = 0; i < N; i++) - ret.m_s[i] = std::min(a.m_s[i], b.m_s[i]); - return ret; - } - - static inline vec lerp(const vec& a, const vec& b, float t) - { - vec ret; - for (uint32_t i = 0; i < N; i++) - ret.m_s[i] = a.m_s[i] + (b.m_s[i] - a.m_s[i]) * t; - return ret; - } - - static inline bool equal_tol(const vec& a, const vec& b, float t) - { - for (uint32_t i = 0; i < N; i++) - if (!equal_tol(a.m_s[i], b.m_s[i], t)) - return false; - return true; - } - - inline bool equal_tol(const vec& b, float t) const - { - return equal_tol(*this, b, t); - } - -protected: - T m_s[N]; -}; - -typedef vec<1, double> vec1D; -typedef vec<2, double> vec2D; -typedef vec<3, double> vec3D; -typedef vec<4, double> vec4D; - -typedef vec<1, float> vec1F; - -typedef vec<2, float> vec2F; -typedef std::vector vec2F_array; - -typedef vec<3, float> vec3F; -typedef std::vector vec3F_array; - -typedef vec<4, float> vec4F; -typedef std::vector vec4F_array; - -typedef vec<2, uint32_t> vec2U; -typedef vec<3, uint32_t> vec3U; -typedef vec<2, int> vec2I; -typedef vec<3, int> vec3I; -typedef vec<4, int> vec4I; - -typedef vec<2, int16_t> vec2I16; -typedef vec<3, int16_t> vec3I16; - -inline vec2F rotate_point(const vec2F& p, float rad) -{ - float c = cos(rad); - float s = sin(rad); - - float x = p[0]; - float y = p[1]; - - return vec2F(x * c - y * s, x * s + y * c); -} - -class rect -{ -public: - inline rect() - { - } - - inline rect(eClear) - { - clear(); - } - - inline rect(eInitExpand) - { - init_expand(); - } - - // up to, but not including right/bottom - inline rect(int left, int top, int right, int bottom) - { - set(left, top, right, bottom); - } - - inline rect(const vec2I& lo, const vec2I& hi) - { - m_corner[0] = lo; - m_corner[1] = hi; - } - - inline rect(const vec2I& point) - { - m_corner[0] = point; - m_corner[1].set(point[0] + 1, point[1] + 1); - } - - inline bool operator==(const rect& r) const - { - return (m_corner[0] == r.m_corner[0]) && (m_corner[1] == r.m_corner[1]); - } - - inline bool operator<(const rect& r) const - { - for (uint32_t i = 0; i < 2; i++) - { - if (m_corner[i] < r.m_corner[i]) - return true; - else if (!(m_corner[i] == r.m_corner[i])) - return false; - } - - return false; - } - - inline void clear() - { - m_corner[0].clear(); - m_corner[1].clear(); - } - - inline void set(int left, int top, int right, int bottom) - { - m_corner[0].set(left, top); - m_corner[1].set(right, bottom); - } - - inline void set(const vec2I& lo, const vec2I& hi) - { - m_corner[0] = lo; - m_corner[1] = hi; - } - - inline void set(const vec2I& point) - { - m_corner[0] = point; - m_corner[1].set(point[0] + 1, point[1] + 1); - } - - inline uint32_t get_width() const - { - return m_corner[1][0] - m_corner[0][0]; - } - inline uint32_t get_height() const - { - return m_corner[1][1] - m_corner[0][1]; - } - - inline int get_left() const - { - return m_corner[0][0]; - } - inline int get_top() const - { - return m_corner[0][1]; - } - inline int get_right() const - { - return m_corner[1][0]; - } - inline int get_bottom() const - { - return m_corner[1][1]; - } - - inline bool is_empty() const - { - return (m_corner[1][0] <= m_corner[0][0]) || (m_corner[1][1] <= m_corner[0][1]); - } - - inline uint32_t get_dimension(uint32_t axis) const - { - return m_corner[1][axis] - m_corner[0][axis]; - } - inline uint32_t get_area() const - { - return get_dimension(0) * get_dimension(1); - } - - inline const vec2I& operator[](uint32_t i) const - { - assert(i < 2); - return m_corner[i]; - } - inline vec2I& operator[](uint32_t i) - { - assert(i < 2); - return m_corner[i]; - } - - inline rect& translate(int x_ofs, int y_ofs) - { - m_corner[0][0] += x_ofs; - m_corner[0][1] += y_ofs; - m_corner[1][0] += x_ofs; - m_corner[1][1] += y_ofs; - return *this; - } - - inline rect& init_expand() - { - m_corner[0].set(INT_MAX); - m_corner[1].set(INT_MIN); - return *this; - } - - inline rect& expand(int x, int y) - { - m_corner[0][0] = std::min(m_corner[0][0], x); - m_corner[0][1] = std::min(m_corner[0][1], y); - m_corner[1][0] = std::max(m_corner[1][0], x + 1); - m_corner[1][1] = std::max(m_corner[1][1], y + 1); - return *this; - } - - inline rect& expand(const rect& r) - { - m_corner[0][0] = std::min(m_corner[0][0], r[0][0]); - m_corner[0][1] = std::min(m_corner[0][1], r[0][1]); - m_corner[1][0] = std::max(m_corner[1][0], r[1][0]); - m_corner[1][1] = std::max(m_corner[1][1], r[1][1]); - return *this; - } - - inline bool touches(const rect& r) const - { - for (uint32_t i = 0; i < 2; i++) - { - if (r[1][i] <= m_corner[0][i]) - return false; - else if (r[0][i] >= m_corner[1][i]) - return false; - } - - return true; - } - - inline bool fully_within(const rect& r) const - { - for (uint32_t i = 0; i < 2; i++) - { - if (m_corner[0][i] < r[0][i]) - return false; - else if (m_corner[1][i] > r[1][i]) - return false; - } - - return true; - } - - inline bool intersect(const rect& r) - { - if (!touches(r)) - { - clear(); - return false; - } - - for (uint32_t i = 0; i < 2; i++) - { - m_corner[0][i] = std::max(m_corner[0][i], r[0][i]); - m_corner[1][i] = std::min(m_corner[1][i], r[1][i]); - } - - return true; - } - - inline bool contains(int x, int y) const - { - return (x >= m_corner[0][0]) && (x < m_corner[1][0]) && - (y >= m_corner[0][1]) && (y < m_corner[1][1]); - } - - inline bool contains(const vec2I& p) const - { - return contains(p[0], p[1]); - } - -private: - vec2I m_corner[2]; -}; - -inline rect make_rect(uint32_t width, uint32_t height) -{ - return rect(0, 0, width, height); -} - -struct color_quad_u8 -{ -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4201) -#endif - union - { - uint8_t m_c[4]; - struct - { - uint8_t r; - uint8_t g; - uint8_t b; - uint8_t a; - }; - }; -#ifdef _MSC_VER -#pragma warning(pop) -#endif - - inline color_quad_u8(eClear) : color_quad_u8(0, 0, 0, 0) { } - - inline color_quad_u8(uint8_t cr, uint8_t cg, uint8_t cb, uint8_t ca) - { - set(cr, cg, cb, ca); - } - - inline color_quad_u8(uint8_t cy = 0, uint8_t ca = 255) - { - set(cy, ca); - } - - inline void clear() - { - set(0, 0, 0, 0); - } - - inline color_quad_u8& set(uint8_t cy, uint8_t ca = 255) - { - m_c[0] = cy; - m_c[1] = cy; - m_c[2] = cy; - m_c[3] = ca; - return *this; - } - - inline color_quad_u8& set(uint8_t cr, uint8_t cg, uint8_t cb, uint8_t ca) - { - m_c[0] = cr; - m_c[1] = cg; - m_c[2] = cb; - m_c[3] = ca; - return *this; - } - - inline color_quad_u8& set_clamped(int cr, int cg, int cb, int ca) - { - m_c[0] = (uint8_t)clamp(cr, 0, 255); - m_c[1] = (uint8_t)clamp(cg, 0, 255); - m_c[2] = (uint8_t)clamp(cb, 0, 255); - m_c[3] = (uint8_t)clamp(ca, 0, 255); - return *this; - } - - color_quad_u8& set_alpha(int ca) { a = (uint8_t)clamp(ca, 0, 255); return *this; } - - inline uint8_t& operator[] (uint32_t i) { assert(i < 4); return m_c[i]; } - inline uint8_t operator[] (uint32_t i) const { assert(i < 4); return m_c[i]; } - - inline int get_luma() const { return (13938U * m_c[0] + 46869U * m_c[1] + 4729U * m_c[2] + 32768U) >> 16U; } // REC709 weightings - - inline bool operator== (const color_quad_u8& other) const - { - return (m_c[0] == other.m_c[0]) && (m_c[1] == other.m_c[1]) && (m_c[2] == other.m_c[2]) && (m_c[3] == other.m_c[3]); - } - - inline bool operator!= (const color_quad_u8& other) const - { - return !(*this == other); - } - - inline uint32_t squared_distance(const color_quad_u8& c, bool alpha = true) const - { - return square(r - c.r) + square(g - c.g) + square(b - c.b) + (alpha ? square(a - c.a) : 0); - } - - inline bool rgb_equals(const color_quad_u8& rhs) const - { - return (r == rhs.r) && (g == rhs.g) && (b == rhs.b); - } -}; -typedef std::vector color_quad_u8_vec; - -inline uint32_t color_distance(bool perceptual, const color_quad_u8& e1, const color_quad_u8& e2, bool alpha) -{ - if (perceptual) - { - const float l1 = e1.r * .2126f + e1.g * .715f + e1.b * .0722f; - const float cr1 = e1.r - l1; - const float cb1 = e1.b - l1; - - const float l2 = e2.r * .2126f + e2.g * .715f + e2.b * .0722f; - const float cr2 = e2.r - l2; - const float cb2 = e2.b - l2; - - const float dl = l1 - l2; - const float dcr = cr1 - cr2; - const float dcb = cb1 - cb2; - - uint32_t d = static_cast( - 32.0f * 4.0f * dl * dl + - 32.0f * 2.0f * (.5f / (1.0f - .2126f)) * (.5f / (1.0f - .2126f)) * dcr * dcr + - 32.0f * .25f * (.5f / (1.0f - .0722f)) * (.5f / (1.0f - .0722f)) * dcb * dcb); - - if (alpha) - { - int da = (int)e1.a - (int)e2.a; - - d += static_cast(128.0f * da * da); - } - - return d; - } - else - return e1.squared_distance(e2, alpha); -} - -extern color_quad_u8 g_white_color_u8, g_black_color_u8, g_red_color_u8, g_green_color_u8, g_blue_color_u8, g_yellow_color_u8, g_purple_color_u8, g_magenta_color_u8, g_cyan_color_u8; - -class image_u8 -{ -public: - image_u8() : - m_width(0), m_height(0), - m_clip_rect(cClear) - { - } - - image_u8(uint32_t width, uint32_t height) : - m_width(width), m_height(height), - m_clip_rect(0, 0, width, height) - { - m_pixels.resize(width * height); - } - - inline const color_quad_u8_vec& get_pixels() const { return m_pixels; } - inline color_quad_u8_vec& get_pixels() { return m_pixels; } - - inline uint32_t width() const { return m_width; } - inline uint32_t height() const { return m_height; } - inline uint32_t total_pixels() const { return m_width * m_height; } - - inline const rect& get_clip_rect() const { return m_clip_rect; } - - inline void set_clip_rect(const rect& r) - { - assert((r.get_left() >= 0) && (r.get_top() >= 0) && (r.get_right() <= (int)m_width) && (r.get_bottom() <= (int)m_height)); - - m_clip_rect = r; - } - - inline void clear_clip_rect() { m_clip_rect.set(0, 0, m_width, m_height); } - - inline bool is_clipped(int x, int y) const { return !m_clip_rect.contains(x, y); } - - inline rect get_bounds() const { return rect(0, 0, m_width, m_height); } - - inline color_quad_u8& operator()(uint32_t x, uint32_t y) { assert((x < m_width) && (y < m_height)); return m_pixels[x + m_width * y]; } - inline const color_quad_u8& operator()(uint32_t x, uint32_t y) const { assert((x < m_width) && (y < m_height)); return m_pixels[x + m_width * y]; } - - image_u8& clear() - { - m_width = m_height = 0; - m_clip_rect.clear(); - m_pixels.clear(); - return *this; - } - - image_u8& init(uint32_t width, uint32_t height) - { - clear(); - - m_width = width; - m_height = height; - m_clip_rect.set(0, 0, width, height); - m_pixels.resize(width * height); - return *this; - } - - image_u8& set_all(const color_quad_u8& p) - { - for (uint32_t i = 0; i < m_pixels.size(); i++) - m_pixels[i] = p; - return *this; - } - - inline const color_quad_u8& get_clamped(int x, int y) const { return (*this)(clamp(x, 0, m_width - 1), clamp(y, 0, m_height - 1)); } - inline color_quad_u8& get_clamped(int x, int y) { return (*this)(clamp(x, 0, m_width - 1), clamp(y, 0, m_height - 1)); } - - inline image_u8& set_pixel_clipped(int x, int y, const color_quad_u8& c) - { - if (!is_clipped(x, y)) - (*this)(x, y) = c; - return *this; - } - - inline image_u8& fill_box(int x, int y, int w, int h, const color_quad_u8& c) - { - for (int y_ofs = 0; y_ofs < h; y_ofs++) - for (int x_ofs = 0; x_ofs < w; x_ofs++) - set_pixel_clipped(x + x_ofs, y + y_ofs, c); - return *this; - } - - void invert_box(int inX, int inY, int inW, int inH) - { - for (int y = 0; y < inH; y++) - { - const uint32_t yy = inY + y; - - for (int x = 0; x < inW; x++) - { - const uint32_t xx = inX + x; - - if (is_clipped(xx, yy)) - continue; - - color_quad_u8 c((*this)(xx, yy)); - - c.r = 255 - c.r; - c.g = 255 - c.g; - c.b = 255 - c.b; - - set_pixel_clipped(xx, yy, c); - } - } - } - - image_u8& crop_dup_borders(uint32_t w, uint32_t h) - { - const uint32_t orig_w = m_width, orig_h = m_height; - - crop(w, h); - - if (orig_w && orig_h) - { - if (m_width > orig_w) - { - for (uint32_t x = orig_w; x < m_width; x++) - for (uint32_t y = 0; y < m_height; y++) - set_pixel_clipped(x, y, get_clamped(std::min(x, orig_w - 1U), std::min(y, orig_h - 1U))); - } - - if (m_height > orig_h) - { - for (uint32_t y = orig_h; y < m_height; y++) - for (uint32_t x = 0; x < m_width; x++) - set_pixel_clipped(x, y, get_clamped(std::min(x, orig_w - 1U), std::min(y, orig_h - 1U))); - } - } - return *this; - } - - image_u8& crop(uint32_t new_width, uint32_t new_height) - { - if ((m_width == new_width) && (m_height == new_height)) - return *this; - - image_u8 new_image(new_width, new_height); - - const uint32_t w = std::min(m_width, new_width); - const uint32_t h = std::min(m_height, new_height); - - for (uint32_t y = 0; y < h; y++) - for (uint32_t x = 0; x < w; x++) - new_image(x, y) = (*this)(x, y); - - return swap(new_image); - } - - image_u8& swap(image_u8& other) - { - std::swap(m_width, other.m_width); - std::swap(m_height, other.m_height); - std::swap(m_pixels, other.m_pixels); - std::swap(m_clip_rect, other.m_clip_rect); - return *this; - } - - // No clipping - inline void get_block(uint32_t bx, uint32_t by, uint32_t width, uint32_t height, color_quad_u8* pPixels) const - { - assert((bx * width + width) <= m_width); - assert((by * height + height) <= m_height); - - for (uint32_t y = 0; y < height; y++) - memcpy(pPixels + y * width, &(*this)(bx * width, by * height + y), width * sizeof(color_quad_u8)); - } - - inline void get_block_clamped(uint32_t bx, uint32_t by, uint32_t width, uint32_t height, color_quad_u8* pPixels) const - { - for (uint32_t y = 0; y < height; y++) - for (uint32_t x = 0; x < width; x++) - pPixels[x + y * width] = get_clamped(bx * width + x, by * height + y); - } - - // No clipping - inline void set_block(uint32_t bx, uint32_t by, uint32_t width, uint32_t height, const color_quad_u8* pPixels) - { - assert((bx * width + width) <= m_width); - assert((by * height + height) <= m_height); - - for (uint32_t y = 0; y < height; y++) - memcpy(&(*this)(bx * width, by * height + y), pPixels + y * width, width * sizeof(color_quad_u8)); - } - - image_u8& swizzle(uint32_t r, uint32_t g, uint32_t b, uint32_t a) - { - assert((r | g | b | a) <= 3); - for (uint32_t y = 0; y < m_height; y++) - { - for (uint32_t x = 0; x < m_width; x++) - { - color_quad_u8 tmp((*this)(x, y)); - (*this)(x, y).set(tmp[r], tmp[g], tmp[b], tmp[a]); - } - } - - return *this; - } - - struct pixel_coord - { - uint16_t m_x, m_y; - pixel_coord() { } - pixel_coord(uint32_t x, uint32_t y) : m_x((uint16_t)x), m_y((uint16_t)y) { } - }; - - uint32_t flood_fill(int x, int y, const color_quad_u8& c, const color_quad_u8& b, std::vector* pSet_pixels = nullptr); - - void draw_line(int xs, int ys, int xe, int ye, const color_quad_u8& color); - - inline void set_pixel_clipped_alphablend(int x, int y, const color_quad_u8& c) - { - if (is_clipped(x, y)) - return; - - color_quad_u8 ct(m_pixels[x + y * m_width]); - - ct.r = static_cast(ct.r + ((c.r - ct.r) * c.a) / 255); - ct.g = static_cast(ct.g + ((c.g - ct.g) * c.a) / 255); - ct.b = static_cast(ct.b + ((c.b - ct.b) * c.a) / 255); - - m_pixels[x + y * m_width] = ct; - } - -private: - color_quad_u8_vec m_pixels; - uint32_t m_width, m_height; - rect m_clip_rect; - - struct fill_segment - { - int16_t m_y, m_xl, m_xr, m_dy; - - fill_segment(int y, int xl, int xr, int dy) : - m_y((int16_t)y), m_xl((int16_t)xl), m_xr((int16_t)xr), m_dy((int16_t)dy) - { - } - }; - - inline bool flood_fill_is_inside(int x, int y, const color_quad_u8& b) const - { - if (is_clipped(x, y)) - return false; - - return (*this)(x, y) == b; - } - - void rasterize_line(int xs, int ys, int xe, int ye, int pred, int inc_dec, int e, int e_inc, int e_no_inc, const color_quad_u8& color); - - void draw_aaline_pixel(int x, int y, int a, color_quad_u8 color) - { - color.a = static_cast(255 - a); - set_pixel_clipped_alphablend(x, y, color); - } -}; - -bool load_png(const char* pFilename, image_u8& img); - -bool save_png(const char* pFilename, const image_u8& img, bool save_alpha); - -class image_metrics -{ -public: - double m_max, m_mean, m_mean_squared, m_root_mean_squared, m_peak_snr; - - image_metrics() - { - clear(); - } - - void clear() - { - memset(this, 0, sizeof(*this)); - } - - void compute(const image_u8& a, const image_u8& b, uint32_t first_channel, uint32_t num_channels) - { - const bool average_component_error = true; - - const uint32_t width = std::min(a.width(), b.width()); - const uint32_t height = std::min(a.height(), b.height()); - - assert((first_channel < 4U) && (first_channel + num_channels <= 4U)); - - // Histogram approach originally due to Charles Bloom. - double hist[256]; - memset(hist, 0, sizeof(hist)); - - for (uint32_t y = 0; y < height; y++) - { - for (uint32_t x = 0; x < width; x++) - { - const color_quad_u8& ca = a(x, y); - const color_quad_u8& cb = b(x, y); - - if (!num_channels) - hist[iabs(ca.get_luma() - cb.get_luma())]++; - else - { - for (uint32_t c = 0; c < num_channels; c++) - hist[iabs(ca[first_channel + c] - cb[first_channel + c])]++; - } - } - } - - m_max = 0; - double sum = 0.0f, sum2 = 0.0f; - for (uint32_t i = 0; i < 256; i++) - { - if (!hist[i]) - continue; - - m_max = std::max(m_max, i); - - double x = i * hist[i]; - - sum += x; - sum2 += i * x; - } - - // See http://richg42.blogspot.com/2016/09/how-to-compute-psnr-from-old-berkeley.html - double total_values = width * height; - - if (average_component_error) - total_values *= clamp(num_channels, 1, 4); - - m_mean = clamp(sum / total_values, 0.0f, 255.0f); - m_mean_squared = clamp(sum2 / total_values, 0.0f, 255.0f * 255.0f); - - m_root_mean_squared = sqrt(m_mean_squared); - - if (!m_root_mean_squared) - m_peak_snr = 100.0f; - else - m_peak_snr = clamp(log10(255.0f / m_root_mean_squared) * 20.0f, 0.0f, 100.0f); - } -}; - -class imagef -{ -public: - imagef() : - m_width(0), m_height(0), m_pitch(0) - { - } - - imagef(uint32_t w, uint32_t h, uint32_t p = UINT32_MAX) : - m_width(0), m_height(0), m_pitch(0) - { - resize(w, h, p); - } - - imagef(const imagef& other) : - m_width(0), m_height(0), m_pitch(0) - { - *this = other; - } - - imagef& swap(imagef& other) - { - std::swap(m_width, other.m_width); - std::swap(m_height, other.m_height); - std::swap(m_pitch, other.m_pitch); - m_pixels.swap(other.m_pixels); - return *this; - } - - imagef& operator= (const imagef& rhs) - { - if (this != &rhs) - { - m_width = rhs.m_width; - m_height = rhs.m_height; - m_pitch = rhs.m_pitch; - m_pixels = rhs.m_pixels; - } - return *this; - } - - imagef& clear() - { - m_width = 0; - m_height = 0; - m_pitch = 0; - m_pixels.resize(0); - return *this; - } - - imagef& set(const image_u8& src, const vec4F& scale = vec4F(1), const vec4F& bias = vec4F(0)) - { - const uint32_t width = src.width(); - const uint32_t height = src.height(); - - resize(width, height); - - for (int y = 0; y < (int)height; y++) - { - for (uint32_t x = 0; x < width; x++) - { - const color_quad_u8& src_pixel = src(x, y); - (*this)(x, y).set((float)src_pixel.r * scale[0] + bias[0], (float)src_pixel.g * scale[1] + bias[1], (float)src_pixel.b * scale[2] + bias[2], (float)src_pixel.a * scale[3] + bias[3]); - } - } - - return *this; - } - - imagef& resize(const imagef& other, uint32_t p = UINT32_MAX, const vec4F& background = vec4F(0, 0, 0, 1)) - { - return resize(other.get_width(), other.get_height(), p, background); - } - - imagef& resize(uint32_t w, uint32_t h, uint32_t p = UINT32_MAX, const vec4F& background = vec4F(0, 0, 0, 1)) - { - return crop(w, h, p, background); - } - - imagef& set_all(const vec4F& c) - { - for (uint32_t i = 0; i < m_pixels.size(); i++) - m_pixels[i] = c; - return *this; - } - - imagef& fill_box(uint32_t x, uint32_t y, uint32_t w, uint32_t h, const vec4F& c) - { - for (uint32_t iy = 0; iy < h; iy++) - for (uint32_t ix = 0; ix < w; ix++) - set_pixel_clipped(x + ix, y + iy, c); - return *this; - } - - imagef& crop(uint32_t w, uint32_t h, uint32_t p = UINT32_MAX, const vec4F& background = vec4F(0, 0, 0, 1)) - { - if (p == UINT32_MAX) - p = w; - - if ((w == m_width) && (m_height == h) && (m_pitch == p)) - return *this; - - if ((!w) || (!h) || (!p)) - { - clear(); - return *this; - } - - vec4F_array cur_state; - cur_state.swap(m_pixels); - - m_pixels.resize(p * h); - - for (uint32_t y = 0; y < h; y++) - { - for (uint32_t x = 0; x < w; x++) - { - if ((x < m_width) && (y < m_height)) - m_pixels[x + y * p] = cur_state[x + y * m_pitch]; - else - m_pixels[x + y * p] = background; - } - } - - m_width = w; - m_height = h; - m_pitch = p; - - return *this; - } - - inline const vec4F& operator() (uint32_t x, uint32_t y) const { assert(x < m_width&& y < m_height); return m_pixels[x + y * m_pitch]; } - inline vec4F& operator() (uint32_t x, uint32_t y) { assert(x < m_width&& y < m_height); return m_pixels[x + y * m_pitch]; } - - inline const vec4F& get_clamped(int x, int y) const { return (*this)(clamp(x, 0, m_width - 1), clamp(y, 0, m_height - 1)); } - inline vec4F& get_clamped(int x, int y) { return (*this)(clamp(x, 0, m_width - 1), clamp(y, 0, m_height - 1)); } - - inline const vec4F& get_clamped_or_wrapped(int x, int y, bool wrap_u, bool wrap_v) const - { - x = wrap_u ? posmod(x, m_width) : clamp(x, 0, m_width - 1); - y = wrap_v ? posmod(y, m_height) : clamp(y, 0, m_height - 1); - return m_pixels[x + y * m_pitch]; - } - - inline vec4F& get_clamped_or_wrapped(int x, int y, bool wrap_u, bool wrap_v) - { - x = wrap_u ? posmod(x, m_width) : clamp(x, 0, m_width - 1); - y = wrap_v ? posmod(y, m_height) : clamp(y, 0, m_height - 1); - return m_pixels[x + y * m_pitch]; - } - - inline imagef& set_pixel_clipped(int x, int y, const vec4F& c) - { - if ((static_cast(x) < m_width) && (static_cast(y) < m_height)) - (*this)(x, y) = c; - return *this; - } - - // Very straightforward blit with full clipping. Not fast, but it works. - imagef& blit(const imagef& src, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y) - { - for (int y = 0; y < src_h; y++) - { - const int sy = src_y + y; - if (sy < 0) - continue; - else if (sy >= (int)src.get_height()) - break; - - for (int x = 0; x < src_w; x++) - { - const int sx = src_x + x; - if (sx < 0) - continue; - else if (sx >= (int)src.get_height()) - break; - - set_pixel_clipped(dst_x + x, dst_y + y, src(sx, sy)); - } - } - - return *this; - } - - const imagef& extract_block_clamped(vec4F* pDst, uint32_t src_x, uint32_t src_y, uint32_t w, uint32_t h) const - { - for (uint32_t y = 0; y < h; y++) - for (uint32_t x = 0; x < w; x++) - *pDst++ = get_clamped(src_x + x, src_y + y); - return *this; - } - - imagef& set_block_clipped(const vec4F* pSrc, uint32_t dst_x, uint32_t dst_y, uint32_t w, uint32_t h) - { - for (uint32_t y = 0; y < h; y++) - for (uint32_t x = 0; x < w; x++) - set_pixel_clipped(dst_x + x, dst_y + y, *pSrc++); - return *this; - } - - inline uint32_t get_width() const { return m_width; } - inline uint32_t get_height() const { return m_height; } - inline uint32_t get_pitch() const { return m_pitch; } - inline uint32_t get_total_pixels() const { return m_width * m_height; } - - inline uint32_t get_block_width(uint32_t w) const { return (m_width + (w - 1)) / w; } - inline uint32_t get_block_height(uint32_t h) const { return (m_height + (h - 1)) / h; } - inline uint32_t get_total_blocks(uint32_t w, uint32_t h) const { return get_block_width(w) * get_block_height(h); } - - inline const vec4F_array& get_pixels() const { return m_pixels; } - inline vec4F_array& get_pixels() { return m_pixels; } - - inline const vec4F* get_ptr() const { return &m_pixels[0]; } - inline vec4F* get_ptr() { return &m_pixels[0]; } - -private: - uint32_t m_width, m_height, m_pitch; // all in pixels - vec4F_array m_pixels; -}; - -enum -{ - cComputeGaussianFlagNormalize = 1, - cComputeGaussianFlagPrint = 2, - cComputeGaussianFlagNormalizeCenterToOne = 4 -}; - -// size_x/y should be odd -void compute_gaussian_kernel(float* pDst, int size_x, int size_y, float sigma_sqr, uint32_t flags); - -void gaussian_filter(imagef& dst, const imagef& orig_img, uint32_t odd_filter_width, float sigma_sqr, bool wrapping = false, uint32_t width_divisor = 1, uint32_t height_divisor = 1); - -vec4F compute_ssim(const imagef& a, const imagef& b); - -vec4F compute_ssim(const image_u8& a, const image_u8& b, bool luma); - -struct block8 -{ - uint64_t m_vals[1]; -}; - -typedef std::vector block8_vec; - -struct block16 -{ - uint64_t m_vals[2]; -}; - -typedef std::vector block16_vec; - -bool save_dds(const char* pFilename, uint32_t width, uint32_t height, const void* pBlocks, uint32_t pixel_format_bpp, DXGI_FORMAT dxgi_format, bool srgb, bool force_dx10_header); - -void strip_extension(std::string& s); -void strip_path(std::string& s); - -uint32_t hash_hsieh(const uint8_t* pBuf, size_t len); - -// https://www.johndcook.com/blog/standard_deviation/ -// This class is for small numbers of integers, so precision shouldn't be an issue. -class tracked_stat -{ -public: - tracked_stat() { clear(); } - - void clear() { m_num = 0; m_total = 0; m_total2 = 0; } - - void update(uint32_t val) { m_num++; m_total += val; m_total2 += val * val; } - - tracked_stat& operator += (uint32_t val) { update(val); return *this; } - - uint32_t get_number_of_values() const { return m_num; } - uint64_t get_total() const { return m_total; } - uint64_t get_total2() const { return m_total2; } - - float get_mean() const { return m_num ? (float)m_total / m_num : 0.0f; }; - - float get_variance() const { return m_num ? ((float)(m_num * m_total2 - m_total * m_total)) / (m_num * m_num) : 0.0f; } - float get_std_dev() const { return m_num ? sqrtf((float)(m_num * m_total2 - m_total * m_total)) / m_num : 0.0f; } - - float get_sample_variance() const { return (m_num > 1) ? ((float)(m_num * m_total2 - m_total * m_total)) / (m_num * (m_num - 1)) : 0.0f; } - float get_sample_std_dev() const { return (m_num > 1) ? sqrtf(get_sample_variance()) : 0.0f; } - -private: - uint32_t m_num; - uint64_t m_total; - uint64_t m_total2; -}; - -inline float compute_covariance(const float* pA, const float* pB, const tracked_stat& a, const tracked_stat& b, bool sample) -{ - const uint32_t n = a.get_number_of_values(); - assert(n == b.get_number_of_values()); - - if (!n) - { - assert(0); - return 0.0f; - } - if ((sample) && (n == 1)) - { - assert(0); - return 0; - } - - const float mean_a = a.get_mean(); - const float mean_b = b.get_mean(); - - float total = 0.0f; - for (uint32_t i = 0; i < n; i++) - total += (pA[i] - mean_a) * (pB[i] - mean_b); - - return total / (sample ? (n - 1) : n); -} - -inline float compute_correlation_coefficient(const float* pA, const float* pB, const tracked_stat& a, const tracked_stat& b, float c, bool sample) -{ - if (!a.get_number_of_values()) - return 1.0f; - - float covar = compute_covariance(pA, pB, a, b, sample); - float std_dev_a = sample ? a.get_sample_std_dev() : a.get_std_dev(); - float std_dev_b = sample ? b.get_sample_std_dev() : b.get_std_dev(); - float denom = std_dev_a * std_dev_b + c; - - if (denom < .0000125f) - return 1.0f; - - float result = (covar + c) / denom; - - return clamp(result, -1.0f, 1.0f); -} - -float compute_block_max_std_dev(const color_quad_u8* pPixels, uint32_t block_width, uint32_t block_height, uint32_t num_comps); - -class rand -{ - std::mt19937 m_mt; - -public: - rand() { } - - rand(uint32_t s) { seed(s); } - void seed(uint32_t s) { m_mt.seed(s); } - - // between [l,h] - int irand(int l, int h) { std::uniform_int_distribution d(l, h); return d(m_mt); } - - uint32_t urand32() { return static_cast(irand(INT32_MIN, INT32_MAX)); } - - bool bit() { return irand(0, 1) == 1; } - - uint8_t byte() { return static_cast(urand32()); } - - // between [l,h) - float frand(float l, float h) { std::uniform_real_distribution d(l, h); return d(m_mt); } - - float gaussian(float mean, float stddev) { std::normal_distribution d(mean, stddev); return d(m_mt); } -}; - -bool save_astc_file(const char* pFilename, block16_vec& blocks, uint32_t width, uint32_t height, uint32_t block_width, uint32_t block_height); -bool load_astc_file(const char* pFilename, block16_vec& blocks, uint32_t& width, uint32_t& height, uint32_t& block_width, uint32_t& block_height); - -class value_stats -{ -public: - value_stats() - { - clear(); - } - - void clear() - { - m_sum = 0; - m_sum2 = 0; - m_num = 0; - m_min = 1e+39; - m_max = -1e+39; - m_vals.clear(); - } - - void add(double val) - { - m_sum += val; - m_sum2 += val * val; - - m_num++; - - m_min = std::min(m_min, val); - m_max = std::max(m_max, val); - - m_vals.push_back(val); - } - - void add(int val) - { - add(static_cast(val)); - } - - void add(uint32_t val) - { - add(static_cast(val)); - } - - void add(int64_t val) - { - add(static_cast(val)); - } - - void add(uint64_t val) - { - add(static_cast(val)); - } - - void print(const char* pPrefix = "") - { - if (!m_vals.size()) - printf("%s: Empty\n", pPrefix); - else - printf("%s: Samples: %llu, Total: %f, Avg: %f, Std Dev: %f, Min: %f, Max: %f, Mean: %f\n", - pPrefix, (unsigned long long)get_num(), get_total(), get_average(), get_std_dev(), get_min(), get_max(), get_mean()); - } - - double get_total() const - { - return m_sum; - } - - double get_average() const - { - return m_num ? (m_sum / m_num) : 0.0f; - } - - double get_min() const - { - return m_min; - } - - double get_max() const - { - return m_max; - } - - uint64_t get_num() const - { - return m_num; - } - - double get_val(uint32_t index) const - { - return m_vals[index]; - } - - // Returns population standard deviation - double get_std_dev() const - { - if (!m_num) - return 0.0f; - - // TODO: FP precision - return sqrt((m_sum2 - ((m_sum * m_sum) / m_num)) / m_num); - } - - double get_mean() const - { - if (!m_num) - return 0.0f; - - std::vector sorted_vals(m_vals); - std::sort(sorted_vals.begin(), sorted_vals.end()); - - return sorted_vals[sorted_vals.size() / 2]; - } - -private: - double m_sum; - double m_sum2; - - uint64_t m_num; - - double m_min; - double m_max; - - mutable std::vector m_vals; -}; - -uint32_t get_deflate_size(const void* pData, size_t data_size); - -} // namespace utils - -#ifdef _MSC_VER -#pragma warning (pop) -#endif \ No newline at end of file diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 67afdf1386..1355bf2a20 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -182,10 +182,15 @@ endif() if (LIBKTX_FEATURE_BCN_DECODER) list( APPEND LIBKTX_MAIN_SRC - ../external/bc7enc_rdo/rgbcx.h + ../external/bc7enc_rdo/rgbcx.h # BC1, BC3, BC4 and BC5 encoders/decoders ../external/bc7enc_rdo/rgbcx.cpp - ../external/bc7enc_rdo/bc7decomp.h + ../external/bc7enc_rdo/bc7decomp.h # BC7 decoder ../external/bc7enc_rdo/bc7decomp.cpp + ../external/bc7enc_rdo/bc7enc.h # BC7 encoder + ../external/bc7enc_rdo/bc7enc.cpp + ../external/bc7enc_rdo/ert.h # RDO post processing step + ../external/bc7enc_rdo/ert.cpp + # ../external/bc7enc_rdo/bc7e.ispc # SIMD (i.e., fast) BC7 encoder ) endif() diff --git a/lib/include/ktx.h b/lib/include/ktx.h index 7caa24db35..509388cbe9 100644 --- a/lib/include/ktx.h +++ b/lib/include/ktx.h @@ -1389,6 +1389,40 @@ typedef struct ktxAstcParams { */ } ktxAstcParams; +typedef struct ktxBCnParams { + ktx_uint32_t structSize; + /*!< Size of this struct. Used so library can tell which version + of struct is being passed. + */ + + ktx_uint32_t threadCount; + /*!< Number of threads used for compression. Default is 1. + */ + + khr_df_model_e bcn; + /*!< BCn format to compress to. E.g., for BC7 this should be set to: + * KHR_DF_MODEL_BC7 + */ + + ktx_uint32_t qualityLevel; + /*!< astcenc supports -fastest, -fast, -medium, -thorough, -exhaustive + */ + + ktx_bool_t normalMap; + /*!< Tunes codec parameters for better quality on normal maps + In this mode normals are compressed to X,Y components + Discarding Z component, reader will need to generate Z + component in shaders. + */ + + ktx_bool_t perceptual; + /*!< The codec should optimize for perceptual error, instead of direct + RMS error. This aims to improves perceived image quality, but + typically lowers the measured PSNR score. Perceptual methods are + currently only available for normal maps and RGB color data. + */ +} ktxBCnParams; + KTX_API KTX_error_code KTX_APIENTRY ktxTexture2_CompressAstcEx(ktxTexture2* This, ktxAstcParams* params); @@ -1401,6 +1435,14 @@ ktxTexture2_DecodeAstc(ktxTexture2* This); KTX_API KTX_error_code KTX_APIENTRY ktxTexture2_DecodeBCn(ktxTexture2* This); +KTX_API KTX_error_code KTX_APIENTRY +ktxTexture2_CompressBCnEx(ktxTexture2* This, ktxBCnParams* params); + +#if 0 +KTX_API KTX_error_code KTX_APIENTRY +ktxTexture2_CompressBCn(ktxTexture2* This /*, ktx_bcn_compression_e bcn, ktx_uint32_t quality */); +#endif + /** * @~English * @brief Options specifiying basis codec. diff --git a/lib/src/bcn_codec.cpp b/lib/src/bcn_codec.cpp index ed667e8497..2dde4442f9 100644 --- a/lib/src/bcn_codec.cpp +++ b/lib/src/bcn_codec.cpp @@ -16,18 +16,22 @@ * @author Wasim Abbas , www.arm.com */ - #include "bcn_codec.h" #include #include #include #include +#include "bc7enc_rdo/bc7enc.h" /* for BC7 encoder */ +#include "bc7enc_rdo/bc7decomp.h" + +#include "vkformat_enum.h" +#include "ktx.h" #include "ktxint.h" #include "texture2.h" // #include "bc7enc_rdo/bc7decomp.h" /* for BC7 decoder */ -#include "bc7enc_rdo/rgbcx.h" /* for BC1-BC5 encoders/decoders */ +#include "bc7enc_rdo/rgbcx.h" /* for BC1-BC5 encoders/decoders */ //************************************************************************ //* Functions common to decoder and encoder * @@ -69,69 +73,6 @@ pthread_join(pthread_t thread, void** value) { } #endif -/** - * @internal - * @~English - * @brief Worker thread helper payload for launchThreads. - */ -struct LaunchDesc { - /** The native thread handle. */ - pthread_t threadHandle; - /** The total number of threads in the thread pool. */ - int threadCount; - /** The thread index in the thread pool. */ - int threadId; - /** The user thread function to execute. */ - void (*func)(int, int, void*); - /** The user thread payload. */ - void* payload; -}; - -/** - * @internal - * @~English - * @brief Helper function to translate thread entry points. - * - * Convert a (void*) thread entry to an (int, void*) thread entry, where the - * integer contains the thread ID in the thread pool. - * - * @param p The thread launch helper payload. - */ -static void* -launchThreadsHelper(void* p) { - LaunchDesc* ltd = (LaunchDesc*)p; - ltd->func(ltd->threadCount, ltd->threadId, ltd->payload); - return nullptr; -} - -static void -launchThreads(int threadCount, void (*func)(int, int, void*), void* payload) { - // Directly execute single threaded workloads on this thread - if (threadCount <= 1) { - func(1, 0, payload); - return; - } - - // Otherwise spawn worker threads - LaunchDesc* threadDescs = new LaunchDesc[threadCount]; - for (int i = 0; i < threadCount; i++) { - threadDescs[i].threadCount = threadCount; - threadDescs[i].threadId = i; - threadDescs[i].payload = payload; - threadDescs[i].func = func; - - pthread_create(&(threadDescs[i].threadHandle), nullptr, launchThreadsHelper, - (void*)&(threadDescs[i])); - } - - // ... and then wait for them to complete - for (int i = 0; i < threadCount; i++) { - pthread_join(threadDescs[i].threadHandle, nullptr); - } - - delete[] threadDescs; -} - //************************************************************************ //* Decoder functions * //************************************************************************ @@ -149,10 +90,13 @@ launchThreads(int threadCount, void (*func)(int, int, void*), void* payload) { * @ingroup reader * @brief Decodes a ktx2 texture object, if it is BCn encoded (i.e., BC1, BC3, * BC4, BC5, or BC7 encoded). - - * The decompressed format is calculated from corresponding BCn format. There - * are only 3 possible options currently supported: RGBA8, SRGBA8 and RGBA32. - * @note 3d textures are decoded to a multi-slice 3d texture. + * + * The decompressed format is calculated from corresponding BCn format. + * For BC1, BC3, and BC7 the decompressed VkFormat is: + * VK_FORMAT_R8G8B8A8_[UNORM|SRGB] depending on the original color space. + * For BC4: VK_FORMAT_R8_UNORM + * For BC5: VK_FORMAT_R8G8_UNORM + * * * Updates @p This with the decoded image. * @@ -164,9 +108,14 @@ launchThreads(int threadCount, void (*func)(int, int, void*), void* payload) { * DFD is incorrect: supercompression scheme or * sample's channelId do not match BCn colorModel. * @exception KTX_INVALID_OPERATION - * The texture's images are not in BCn format. + * The texture's images are not in BCn format + * (i.e., either color model is not set to BCn or + * This->vkFormat does not correspond to the set + * BCn color model). * @exception KTX_INVALID_OPERATION - * The texture object does not contain any data. + * The texture object does not contain any data + * (i.e., This->pData is NULL and there is no + * pending data load). * @exception KTX_OUT_OF_MEMORY * Not enough memory to carry out decoding. * @exception KTX_UNSUPPORTED_FEATURE @@ -179,25 +128,96 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { uint32_t* BDB = This->pDfd + 1; khr_df_model_e colorModel = (khr_df_model_e)KHR_DFDVAL(BDB, MODEL); uint32_t channelId = KHR_DFDSVAL(BDB, 0, CHANNELID); + ktx_size_t nchannels; + ktx_uint32_t decompressedVkFormat; + switch (colorModel) { case KHR_DF_MODEL_BC1A: if (!(channelId == KHR_DF_CHANNEL_BC1A_COLOR || channelId == KHR_DF_CHANNEL_BC1A_ALPHA)) { return KTX_FILE_DATA_ERROR; } + nchannels = BC1_OUTPUT_NCHANNELS; /* 4 */ + // further sanity check on vkFormat + switch (This->vkFormat) { + case VK_FORMAT_BC1_RGB_UNORM_BLOCK: + case VK_FORMAT_BC1_RGBA_UNORM_BLOCK: + decompressedVkFormat = VK_FORMAT_R8G8B8A8_UNORM; + break; + case VK_FORMAT_BC1_RGB_SRGB_BLOCK: + case VK_FORMAT_BC1_RGBA_SRGB_BLOCK: + decompressedVkFormat = VK_FORMAT_R8G8B8A8_SRGB; + break; + default: + return KTX_INVALID_OPERATION; // invalid vkFormat (should be BC1) + } // TODO: expose as parameter rgbcx::init(rgbcx::bc1_approx_mode::cBC1Ideal); break; + case KHR_DF_MODEL_BC3: - rgbcx::init(); + nchannels = BC3_OUTPUT_NCHANNELS; /* 4 */ + switch (This->vkFormat) { + case VK_FORMAT_BC3_UNORM_BLOCK: + decompressedVkFormat = VK_FORMAT_R8G8B8A8_UNORM; + break; + case VK_FORMAT_BC3_SRGB_BLOCK: + decompressedVkFormat = VK_FORMAT_R8G8B8A8_SRGB; + break; + default: + return KTX_INVALID_OPERATION; // invalid vkFormat (should be BC3) + } + rgbcx::init(rgbcx::bc1_approx_mode::cBC1Ideal); break; + case KHR_DF_MODEL_BC4: - rgbcx::init(); + nchannels = BC4_OUTPUT_NCHANNELS; /* 1 */ + switch (This->vkFormat) { + case VK_FORMAT_BC4_UNORM_BLOCK: + decompressedVkFormat = VK_FORMAT_R8_UNORM; + break; + case VK_FORMAT_BC4_SNORM_BLOCK: + decompressedVkFormat = VK_FORMAT_R8_SNORM; + break; + default: + return KTX_INVALID_OPERATION; // invalid vkFormat (should be BC4) + } + rgbcx::init(rgbcx::bc1_approx_mode::cBC1Ideal); break; + case KHR_DF_MODEL_BC5: - rgbcx::init(); + nchannels = BC5_OUTPUT_NCHANNELS; /* 2 */ + switch (This->vkFormat) { + case VK_FORMAT_BC5_UNORM_BLOCK: + decompressedVkFormat = VK_FORMAT_R8G8_UNORM; + break; + case VK_FORMAT_BC5_SNORM_BLOCK: + decompressedVkFormat = VK_FORMAT_R8G8_SNORM; + break; + default: + return KTX_INVALID_OPERATION; // invalid vkFormat (should be BC5) + } + rgbcx::init(rgbcx::bc1_approx_mode::cBC1Ideal); + break; + +#if 0 + case KHR_DF_MODEL_BC6H: break; +#endif + case KHR_DF_MODEL_BC7: + nchannels = BC7_OUTPUT_NCHANNELS; /* 4 */ + switch (This->vkFormat) { + case VK_FORMAT_BC7_UNORM_BLOCK: + decompressedVkFormat = VK_FORMAT_R8G8B8A8_UNORM; + break; + case VK_FORMAT_BC7_SRGB_BLOCK: + decompressedVkFormat = VK_FORMAT_R8G8B8A8_SRGB; + break; + default: + return KTX_INVALID_OPERATION; // invalid vkFormat (should be BC7) + } break; + default: return KTX_INVALID_OPERATION; // Not in BCn decodable format } @@ -214,17 +234,12 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { DECLARE_PRIVATE_EX(priv, This); - ktx_uint32_t vkformat = (ktx_uint32_t)getBCnUncompressedFormat(This->vkFormat); - if (vkformat == VK_FORMAT_UNDEFINED) { - return KTX_INVALID_OPERATION; // Not in BCn decodable format - } - // Create a prototype texture to use for calculating sizes in the target // format and, as useful side effects, provide us with a properly sized // data allocation and the DFD for the target format. ktxTextureCreateInfo createInfo; createInfo.glInternalformat = 0; - createInfo.vkFormat = vkformat; + createInfo.vkFormat = decompressedVkFormat; createInfo.baseWidth = This->baseWidth; createInfo.baseHeight = This->baseHeight; createInfo.baseDepth = This->baseDepth; @@ -275,9 +290,6 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { for (uint32_t faceIndex = 0; faceIndex < This->numFaces; ++faceIndex) { for (uint32_t depthSliceIndex = 0; depthSliceIndex < imageDepths; ++depthSliceIndex) { - // ktx_size_t levelImageSizeIn = ktxTexture_calcImageSize( - // ktxTexture(This), levelIndex, KTX_FORMAT_VERSION_TWO); - ktx_size_t imageOffsetIn; ktx_size_t imageOffsetOut; @@ -287,11 +299,10 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { ktxTexture2_GetImageOffset(prototype, levelIndex, layerIndex, faceIndex + depthSliceIndex, &imageOffsetOut); - auto* imageDataIn = This->pData + imageOffsetIn; - auto* imageDataOut = prototype->pData + imageOffsetOut; - - const ktx_size_t dst_pitch = imageWidth * BC1_OUTPUT_NCHANNELS; + const ktx_uint8_t* imageDataIn = This->pData + imageOffsetIn; + ktx_uint8_t* imageDataOut = prototype->pData + imageOffsetOut; + const ktx_size_t dst_pitch = imageWidth * nchannels; const ktx_uint8_t* src_blocks = imageDataIn; for (size_t y{0}; y < imageHeight; y += BCN_BLOCK_SIZE) { @@ -310,12 +321,24 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { break; case KHR_DF_MODEL_BC4: + // BC4: 8 bytes -> 4 x 4 x 1 = 16 bytes + rgbcx::unpack_bc4(src_blocks, rgba, + /* stride */ BC4_OUTPUT_NCHANNELS); + src_blocks += BC4_BLOCK_SIZE; break; case KHR_DF_MODEL_BC5: + // BC5: 16 bytes -> 4 x 4 x 2 = 32 bytes + rgbcx::unpack_bc5(src_blocks, rgba, 0, 1, + /* stride */ BC5_OUTPUT_NCHANNELS); + src_blocks += BC5_BLOCK_SIZE; break; case KHR_DF_MODEL_BC7: + // BC7: 16 bytes -> 4 x 4 x 4 = 64 bytes + bc7decomp::unpack_bc7( + src_blocks, reinterpret_cast(rgba)); + src_blocks += BC7_BLOCK_SIZE; break; default: @@ -326,40 +349,36 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { // texture image while taking into consideration // that dimenions may not be a multiple of 4. const ktx_uint8_t* pSrc = rgba; - ktx_uint8_t* pDst = - imageDataOut + y * dst_pitch + BC1_OUTPUT_NCHANNELS * x; - int cols = fmin(BCN_BLOCK_SIZE, imageWidth - x); + ktx_uint8_t* pDst = imageDataOut + y * dst_pitch + nchannels * x; + ktx_size_t cols = fmin(BCN_BLOCK_SIZE, imageWidth - x); for (ktx_size_t py{0}; py < BCN_BLOCK_SIZE && y + py < imageHeight; ++py) { - memcpy(pDst, pSrc, cols * BC1_OUTPUT_NCHANNELS); + memcpy(pDst, pSrc, cols * nchannels); pSrc += rgba_pitch; pDst += dst_pitch; } - } - } - - // astcenc_decompress_image(work.context, work.data, work.data_len; - } - } - } + } // x blocks + } // y blocks + } // depth slices + } // faces + } // layers } - // We are done with astcdecoder - // astcenc_context_free(astc_context); - if (result == KTX_SUCCESS) { // Fix up the current texture DECLARE_PROTECTED_EX(thisPrtctd, This); DECLARE_PRIVATE_EX(protoPriv, prototype); DECLARE_PROTECTED_EX(protoPrtctd, prototype); memcpy(&thisPrtctd._formatSize, &protoPrtctd._formatSize, sizeof(ktxFormatSize)); - This->vkFormat = vkformat; + This->vkFormat = decompressedVkFormat; This->isCompressed = prototype->isCompressed; This->supercompressionScheme = KTX_SS_NONE; priv._requiredLevelAlignment = protoPriv._requiredLevelAlignment; + // Copy the levelIndex from the prototype to This. memcpy(priv._levelIndex, protoPriv._levelIndex, This->numLevels * sizeof(ktxLevelIndexEntry)); + // Move the DFD and data from the prototype to This. free(This->pDfd); This->pDfd = prototype->pDfd; @@ -369,6 +388,7 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { This->dataSize = prototype->dataSize; prototype->pData = 0; prototype->dataSize = 0; + // Free SGD data This->_private->_sgdByteLength = 0; if (This->_private->_supercompressionGlobalData) { @@ -388,24 +408,27 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { * @memberof ktxTexture2 * @ingroup writer * @~English - * @brief Encode and compress a ktx texture with uncompressed images to astc. + * @brief Encode and compress a ktx texture with uncompressed images to provided + * BCn format. Currently, only BC1, BC3, BC4, BC5, and BC7 target formats + * are supported. * - * The images are encoded to ASTC block-compressed format. The encoded images + * The images are encoded to BCn block-compressed format. The encoded images * replace the original images and the texture's fields including the DFD are * modified to reflect the new state. * * Such textures can be directly uploaded to a GPU via a graphics API. * * @param[in] This pointer to the ktxTexture2 object of interest. - * @param[in] params pointer to ASTC params object. + * @param[in] params pointer to BCn params object. * * @return KTX_SUCCESS on success, other KTX_* enum values on error. * * @exception KTX_INVALID_OPERATION * The texture's images are supercompressed. * @exception KTX_INVALID_OPERATION - * The texture's images are in a block compressed - * format. + * The texture's images are already in a block + * compressed format (i.e., This->isCompressed is + * true). * @exception KTX_INVALID_OPERATION * The texture image's format is a packed format * (e.g. RGB565). @@ -414,191 +437,323 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { * 8-bits. * @exception KTX_INVALID_OPERATION * The texture's images are 1D. Only 2D images can - * be supercompressed. + * be block compressed. * @exception KTX_INVALID_OPERATION - * Transfer function of @c This is not sRGB or Linear. + * Transfer function of @c This is not sRGB or + * Linear. * @exception KTX_INVALID_OPERATION * @c params->mode is HDR but transfer function * of @c This is sRGB. * @exception KTX_INVALID_OPERATION - * ASTC encoder failed to compress image. - * Possibly due to incorrect floating point - * compilation settings. Should not happen - * in release package. - * @exception KTX_INVALID_OPERATION * This->generateMipmaps is set. * @exception KTX_OUT_OF_MEMORY Not enough memory to carry out compression. * @exception KTX_UNSUPPORTED_FEATURE * @c params->mode is HDR mode which is not * yet implemented. - * @exception KTX_UNSUPPORTED_FEATURE - * ASTC encoder not compiled with enough - * capacity for requested block size. Should - * not happen in release package. */ -// extern "C" KTX_error_code -// ktxTexture2_CompressAstcEx(ktxTexture2* This, ktxAstcParams* params) { -// assert(This->classId == ktxTexture2_c && "Only support ktx2 ASTC."); -// -// ktx_error_code_e result; -// ktx_pack_astc_encoder_mode_e mode; -// -// if (!params) return KTX_INVALID_VALUE; -// -// if (params->structSize != sizeof(struct ktxAstcParams)) return KTX_INVALID_VALUE; -// -// if (This->generateMipmaps) return KTX_INVALID_OPERATION; -// -// if (This->supercompressionScheme != KTX_SS_NONE) -// return KTX_INVALID_OPERATION; // Can't apply multiple schemes. -// -// if (This->isCompressed) -// return KTX_INVALID_OPERATION; // Only non-block compressed formats -// // can be encoded into an ASTC format. -// -// if (This->_protected->_formatSize.flags & KTX_FORMAT_SIZE_PACKED_BIT) -// return KTX_INVALID_OPERATION; -// -// // Basic descriptor block begins after the total size field. -// const uint32_t* BDB = This->pDfd + 1; -// -// uint32_t num_components, component_size; -// getDFDComponentInfoUnpacked(This->pDfd, &num_components, &component_size); -// ktx_uint32_t transfer = KHR_DFDVAL(BDB, TRANSFER); -// bool sRGB = transfer == KHR_DF_TRANSFER_SRGB; -// ktx_uint8_t alphaMode = KHR_DFDVAL(BDB, FLAGS); -// -// if (component_size != 1) -// return KTX_UNSUPPORTED_FEATURE; // Can only deal with 8-bit components at the moment -// if (params->mode == KTX_PACK_ASTC_ENCODER_MODE_DEFAULT) { -// if (component_size == 1 || sRGB) -// mode = KTX_PACK_ASTC_ENCODER_MODE_LDR; -// else -// mode = KTX_PACK_ASTC_ENCODER_MODE_HDR; -// } else { -// mode = static_cast(params->mode); -// } -// -// if (mode == KTX_PACK_ASTC_ENCODER_MODE_HDR && sRGB) return KTX_INVALID_OPERATION; -// -// if (!(sRGB || transfer == KHR_DF_TRANSFER_LINEAR)) return KTX_INVALID_OPERATION; -// -// if (This->pData == NULL) { -// result = ktxTexture2_LoadImageData((ktxTexture2*)This, nullptr, 0); -// -// if (result != KTX_SUCCESS) return result; -// } -// -// ktx_uint32_t threadCount = params->threadCount; -// if (threadCount < 1) threadCount = 1; -// -// // VkFormat vkFormat = astcVkFormat(params->blockDimension, sRGB); -// -// // This->numLevels = 0 not allowed for block compressed formats -// // But just in case make sure its not zero -// This->numLevels = MAX(1, This->numLevels); -// -// // Create a prototype texture to use for calculating sizes in the target -// // format and, as useful side effects, provide us with a properly sized -// // data allocation and the DFD for the target format. -// ktxTextureCreateInfo createInfo; -// createInfo.glInternalformat = 0; -// // createInfo.vkFormat = vkFormat; -// createInfo.baseWidth = This->baseWidth; -// createInfo.baseHeight = This->baseHeight; -// createInfo.baseDepth = This->baseDepth; -// createInfo.generateMipmaps = This->generateMipmaps; -// createInfo.isArray = This->isArray; -// createInfo.numDimensions = This->numDimensions; -// createInfo.numFaces = This->numFaces; -// createInfo.numLayers = This->numLayers; -// createInfo.numLevels = This->numLevels; -// createInfo.pDfd = nullptr; -// -// ktxTexture2* prototype; -// result = ktxTexture2_Create(&createInfo, KTX_TEXTURE_CREATE_ALLOC_STORAGE, &prototype); -// -// if (result != KTX_SUCCESS) { -// assert(result == KTX_OUT_OF_MEMORY && "Out of memory allocating texture."); -// return result; -// } -// -// uint32_t block_size_x{6}; -// uint32_t block_size_y{6}; -// uint32_t block_size_z{1}; -// float quality{0}; -// // uint32_t flags{params->normalMap ? ASTCENC_FLG_MAP_NORMAL : 0}; -// -// // Walk in reverse on levels so we don't have to do this later -// assert(prototype->dataSize && "Prototype texture size not initialized.\n"); -// -// if (!prototype->pData) { -// return KTX_OUT_OF_MEMORY; -// } -// -// uint8_t* buffer_out = prototype->pData; -// -// for (int32_t level = This->numLevels - 1; level >= 0; level--) { -// uint32_t width = MAX(1, This->baseWidth >> level); -// uint32_t height = MAX(1, This->baseHeight >> level); -// uint32_t depth = MAX(1, This->baseDepth >> level); -// ktx_size_t levelImageSizeIn = 0; -// ktx_size_t levelImageSizeOut = 0; -// ktx_uint32_t levelImages = 0; -// -// levelImages = This->numLayers * This->numFaces * depth; -// levelImageSizeIn = -// ktxTexture_calcImageSize(ktxTexture(This), level, KTX_FORMAT_VERSION_TWO); -// levelImageSizeOut = -// ktxTexture_calcImageSize(ktxTexture(prototype), level, KTX_FORMAT_VERSION_TWO); -// ktx_size_t offset = ktxTexture2_levelDataOffset(This, level); -// -// for (uint32_t image = 0; image < levelImages; image++) { -// } -// } -// -// // We are done with astcencoder -// -// assert(KHR_DFDVAL(prototype->pDfd + 1, MODEL) == KHR_DF_MODEL_ASTC && -// "Invalid dfd generated for ASTC image\n"); -// assert((transfer == KHR_DF_TRANSFER_SRGB -// ? KHR_DFDVAL(prototype->pDfd + 1, TRANSFER) == KHR_DF_TRANSFER_SRGB && -// KHR_DFDVAL(prototype->pDfd + 1, PRIMARIES) == KHR_DF_PRIMARIES_SRGB -// : true) && -// "Not a valid sRGB image\n"); -// -// // Fix up the current (This) texture -// #undef DECLARE_PRIVATE -// #undef DECLARE_PROTECTED -// #define DECLARE_PRIVATE(n, t2) ktxTexture2_private& n = *(t2->_private) -// #define DECLARE_PROTECTED(n, t2) ktxTexture_protected& n = *(t2->_protected) -// -// DECLARE_PROTECTED(thisPrtctd, This); -// DECLARE_PRIVATE(protoPriv, prototype); -// DECLARE_PROTECTED(protoPrtctd, prototype); -// memcpy(&thisPrtctd._formatSize, &protoPrtctd._formatSize, sizeof(ktxFormatSize)); -// // This->vkFormat = vkFormat; -// This->isCompressed = prototype->isCompressed; -// This->supercompressionScheme = KTX_SS_NONE; -// This->_private->_requiredLevelAlignment = protoPriv._requiredLevelAlignment; -// // Copy the levelIndex from the prototype to This. -// memcpy(This->_private->_levelIndex, protoPriv._levelIndex, -// This->numLevels * sizeof(ktxLevelIndexEntry)); -// // Move the DFD and data from the prototype to This. -// free(This->pDfd); -// This->pDfd = prototype->pDfd; -// prototype->pDfd = 0; -// free(This->pData); -// This->pData = prototype->pData; -// This->dataSize = prototype->dataSize; -// prototype->pData = 0; -// prototype->dataSize = 0; -// -// ktxTexture2_Destroy(prototype); -// -// KHR_DFDSETVAL(This->pDfd + 1, FLAGS, alphaMode); // Restore alphaMode flags -// return KTX_SUCCESS; -// } +extern "C" KTX_error_code +ktxTexture2_CompressBCnEx(ktxTexture2* This, ktxBCnParams* params) { + assert(This->classId == ktxTexture2_c && "Only support ktx2 BCn."); + + ktx_error_code_e result; + + if (!params) return KTX_INVALID_VALUE; + + if (params->structSize != sizeof(struct ktxBCnParams)) return KTX_INVALID_VALUE; + + // TODO: why? + if (This->generateMipmaps) return KTX_INVALID_OPERATION; + + if (This->supercompressionScheme != KTX_SS_NONE) + return KTX_INVALID_OPERATION; // Can't apply multiple schemes. + + if (This->isCompressed) + return KTX_INVALID_OPERATION; // Only non-block compressed formats + // can be encoded into a BCn format. + + if (This->_protected->_formatSize.flags & KTX_FORMAT_SIZE_PACKED_BIT) + return KTX_INVALID_OPERATION; + + // Basic descriptor block begins after the total size field. + const uint32_t* BDB = This->pDfd + 1; + + // ktx_uint32_t transfer = KHR_DFDVAL(BDB, TRANSFER); + // bool sRGB = transfer == KHR_DF_TRANSFER_SRGB; + ktx_uint8_t alphaMode = KHR_DFDVAL(BDB, FLAGS); + size_t nchannels; + VkFormat compressedVkFormat; + bc7enc_compress_block_params bc7_cmp_params; + + switch (params->bcn) { + case KHR_DF_MODEL_BC1A: + // Currently we can only encode RGBA uncompressed textures into BC1 + // (TODO: I think this makes sense, if we have an R8 channel then using + // BC1 makes no sense in the first place). + switch (This->vkFormat) { + case VK_FORMAT_R8G8B8A8_UNORM: + compressedVkFormat = VK_FORMAT_BC1_RGBA_UNORM_BLOCK; + break; + case VK_FORMAT_R8G8B8A8_SRGB: + compressedVkFormat = VK_FORMAT_BC1_RGBA_SRGB_BLOCK; + break; + default: + return KTX_INVALID_OPERATION; // Not a valid decompressed vkformat for BC1 + } + nchannels = BC1_OUTPUT_NCHANNELS; + rgbcx::init(rgbcx::bc1_approx_mode::cBC1Ideal); + break; + + case KHR_DF_MODEL_BC3: + switch (This->vkFormat) { + case VK_FORMAT_R8G8B8A8_UNORM: + compressedVkFormat = VK_FORMAT_BC3_UNORM_BLOCK; + break; + case VK_FORMAT_R8G8B8A8_SRGB: + compressedVkFormat = VK_FORMAT_BC3_SRGB_BLOCK; + break; + default: + return KTX_INVALID_OPERATION; // Not a valid decompressed vkformat for BC3 + } + nchannels = BC3_OUTPUT_NCHANNELS; + rgbcx::init(rgbcx::bc1_approx_mode::cBC1Ideal); + break; + + case KHR_DF_MODEL_BC4: + switch (This->vkFormat) { + case VK_FORMAT_R8_UNORM: + compressedVkFormat = VK_FORMAT_BC4_UNORM_BLOCK; + break; + case VK_FORMAT_R8_SNORM: + compressedVkFormat = VK_FORMAT_BC4_SNORM_BLOCK; + break; + default: + return KTX_INVALID_OPERATION; // Not a valid decompressed vkformat for BC4 + } + nchannels = BC4_OUTPUT_NCHANNELS; + rgbcx::init(rgbcx::bc1_approx_mode::cBC1Ideal); + break; + + case KHR_DF_MODEL_BC5: + switch (This->vkFormat) { + case VK_FORMAT_R8G8_UNORM: + compressedVkFormat = VK_FORMAT_BC5_UNORM_BLOCK; + break; + case VK_FORMAT_R8G8_SNORM: + compressedVkFormat = VK_FORMAT_BC5_SNORM_BLOCK; + break; + default: + return KTX_INVALID_OPERATION; // Not a valid decompressed vkformat for BC5 + } + nchannels = BC5_OUTPUT_NCHANNELS; + rgbcx::init(rgbcx::bc1_approx_mode::cBC1Ideal); + break; + + case KHR_DF_MODEL_BC7: + switch (This->vkFormat) { + case VK_FORMAT_R8G8B8A8_UNORM: + compressedVkFormat = VK_FORMAT_BC7_UNORM_BLOCK; + break; + case VK_FORMAT_R8G8B8A8_SRGB: + compressedVkFormat = VK_FORMAT_BC7_SRGB_BLOCK; + break; + default: + return KTX_INVALID_OPERATION; // Not a valid decompressed vkformat for BC7 + } + nchannels = BC7_OUTPUT_NCHANNELS; + // MUST be called before calling bc7enc_compress_block() (or you'll get artifacts). + bc7enc_compress_block_init(); + bc7enc_compress_block_params_init(&bc7_cmp_params); + break; + + default: + return KTX_INVALID_VALUE; // Provided color model is not BCn + } + + if (This->pData == NULL) { + result = ktxTexture2_LoadImageData((ktxTexture2*)This, nullptr, 0); + if (result != KTX_SUCCESS) return result; + } + + ktx_uint32_t threadCount = params->threadCount; + if (threadCount < 1) threadCount = 1; + + // This->numLevels = 0 not allowed for block compressed formats + // But just in case make sure it's not zero + This->numLevels = MAX(1, This->numLevels); + + // Create a prototype texture to use for calculating sizes in the target + // format and, as useful side effects, provide us with a properly sized + // data allocation and the DFD for the target format. + ktxTextureCreateInfo createInfo; + createInfo.glInternalformat = 0; + createInfo.vkFormat = compressedVkFormat; + createInfo.baseWidth = This->baseWidth; + createInfo.baseHeight = This->baseHeight; + createInfo.baseDepth = This->baseDepth; + createInfo.generateMipmaps = This->generateMipmaps; + createInfo.isArray = This->isArray; + createInfo.numDimensions = This->numDimensions; + createInfo.numFaces = This->numFaces; + createInfo.numLayers = This->numLayers; + createInfo.numLevels = This->numLevels; + createInfo.pDfd = nullptr; + + ktxTexture2* prototype; + result = ktxTexture2_Create(&createInfo, KTX_TEXTURE_CREATE_ALLOC_STORAGE, &prototype); + + if (result != KTX_SUCCESS) { + assert(result == KTX_OUT_OF_MEMORY && "Out of memory allocating texture."); + return result; + } + + assert(prototype->dataSize && "Prototype texture size not initialized.\n"); + + if (!prototype->pData) { + return KTX_OUT_OF_MEMORY; + } + + // This is where the decoded LDR BCn block is saved. + const size_t pixels_pitch{BCN_BLOCK_SIZE * 4}; // 4 x 4 + uint8_t pPixels[BCN_BLOCK_SIZE * pixels_pitch]; // 4 x 4 x 4 + +#if 0 + uint16_t pPixelsHdr [BCN_BLOCK_SIZE * BCN_BLOCK_SIZE * 4]; // 4 x 4 x 4 +#endif + + // TODO: why in reverse? + for (int32_t level = This->numLevels - 1; level >= 0; --level) { + uint32_t width = MAX(1, This->baseWidth >> level); + uint32_t height = MAX(1, This->baseHeight >> level); + uint32_t depth = MAX(1, This->baseDepth >> level); + ktx_size_t levelImageSizeIn = 0; + ktx_size_t levelImageSizeOut = 0; + const ktx_uint32_t levelImages = This->numLayers * This->numFaces * depth; + + levelImageSizeIn = + ktxTexture_calcImageSize(ktxTexture(This), level, KTX_FORMAT_VERSION_TWO); + levelImageSizeOut = + ktxTexture_calcImageSize(ktxTexture(prototype), level, KTX_FORMAT_VERSION_TWO); + + const size_t levelDataOffsetIn = ktxTexture2_levelDataOffset(This, level); + + // Points to start of raw source/destination compressed blocks image + // data within this miplevl (e.g., for 3D texture and for miplevel 0, + // this initially points to start of first depth slice image data, then + // this gets update to point to next slice and so on until we exit this + // loop and this gets initialized again to point to start of depth slice + // 0 withing next mip level) + const ktx_uint8_t* pSrcLevelImage = This->pData + levelDataOffsetIn; + + // points to start of destination image within this miplevel + ktx_uint8_t* pDstLevelImage = prototype->pData /* + levelDataOffset */; + const size_t nbrBlocksX = (width + BCN_BLOCK_SIZE - 1) / BCN_BLOCK_SIZE; + + for (uint32_t image = 0; image < levelImages; image++) { + // Row-major loop over blocks + for (size_t y{0}; y < height; y += BCN_BLOCK_SIZE) { + for (size_t x{0}; x < width; x += BCN_BLOCK_SIZE) { + // Extract/Copy source block + for (size_t i{0}; i < BCN_BLOCK_SIZE; ++i) { + // copy 4 pixels (32bpp) to pPixels + memcpy(pPixels + i * pixels_pitch, + pSrcLevelImage + (y + i) * width * nchannels + x * nchannels, + pixels_pitch); + } + + const auto xBlock = x / BCN_BLOCK_SIZE; + const auto yBlock = y / BCN_BLOCK_SIZE; + + switch (params->bcn) { + case KHR_DF_MODEL_BC1A: + // BC1: 4 x 4 x 4 = 64 bytes -> 8 bytes + rgbcx::encode_bc1( + 10, pDstLevelImage + (yBlock * nbrBlocksX + xBlock) * BC1_BLOCK_SIZE, + reinterpret_cast(pPixels), true, false); + break; + + case KHR_DF_MODEL_BC3: + // BC3: 4 x 4 x 4 = 64 bytes -> 16 bytes + rgbcx::encode_bc3( + 10, pDstLevelImage + (yBlock * nbrBlocksX + xBlock) * BC3_BLOCK_SIZE, + reinterpret_cast(pPixels)); + break; + + case KHR_DF_MODEL_BC4: + // BC4: 4 x 4 x 1 = 16 bytes -> 8 bytes + rgbcx::encode_bc4( + pDstLevelImage + (yBlock * nbrBlocksX + xBlock) * BC4_BLOCK_SIZE, + reinterpret_cast(pPixels), + /* stride */ BC4_OUTPUT_NCHANNELS); + break; + + case KHR_DF_MODEL_BC5: + // BC5: 4 x 4 x 2 = 32 bytes -> 16 bytes + rgbcx::encode_bc5( + pDstLevelImage + (yBlock * nbrBlocksX + xBlock) * BC5_BLOCK_SIZE, + reinterpret_cast(pPixels), 0, 1, + /* stride */ BC5_OUTPUT_NCHANNELS); + break; + + case KHR_DF_MODEL_BC7: + // BC7: 4 x 4 x 4 = 64 bytes -> 16 bytes + bc7enc_compress_block( + pDstLevelImage + (yBlock * nbrBlocksX + xBlock) * BC7_BLOCK_SIZE, + reinterpret_cast(pPixels), &bc7_cmp_params); + break; + + default: + return KTX_INVALID_VALUE; // should never occur + } + } // x blocks + } // y blocks + + pDstLevelImage += levelImageSizeOut; // next destination image within this miplevel + pSrcLevelImage += levelImageSizeIn; // next source image within this miplevel + } + } + + assert(KHR_DFDVAL(prototype->pDfd + 1, MODEL) == params->bcn && + "Invalid dfd generated for BCn image\n"); + // assert((transfer == KHR_DF_TRANSFER_SRGB + // ? KHR_DFDVAL(prototype->pDfd + 1, TRANSFER) == KHR_DF_TRANSFER_SRGB && + // KHR_DFDVAL(prototype->pDfd + 1, PRIMARIES) == KHR_DF_PRIMARIES_SRGB + // : true) && + // "Not a valid sRGB image\n"); + +// Fix up the current (This) texture +#undef DECLARE_PRIVATE +#undef DECLARE_PROTECTED +#define DECLARE_PRIVATE(n, t2) ktxTexture2_private& n = *(t2->_private) +#define DECLARE_PROTECTED(n, t2) ktxTexture_protected& n = *(t2->_protected) + + DECLARE_PROTECTED(thisPrtctd, This); + DECLARE_PRIVATE(protoPriv, prototype); + DECLARE_PROTECTED(protoPrtctd, prototype); + memcpy(&thisPrtctd._formatSize, &protoPrtctd._formatSize, sizeof(ktxFormatSize)); + This->vkFormat = prototype->vkFormat; + This->isCompressed = prototype->isCompressed; + This->supercompressionScheme = KTX_SS_NONE; + This->_private->_requiredLevelAlignment = protoPriv._requiredLevelAlignment; + + // Copy the levelIndex from the prototype to This. + memcpy(This->_private->_levelIndex, protoPriv._levelIndex, + This->numLevels * sizeof(ktxLevelIndexEntry)); + + // Move the DFD and data from the prototype to This. + free(This->pDfd); + This->pDfd = prototype->pDfd; + prototype->pDfd = 0; + free(This->pData); + This->pData = prototype->pData; + This->dataSize = prototype->dataSize; + prototype->pData = 0; + prototype->dataSize = 0; + + ktxTexture2_Destroy(prototype); + + KHR_DFDSETVAL(This->pDfd + 1, FLAGS, alphaMode); // Restore alphaMode flags + return KTX_SUCCESS; +} /** * @memberof ktxTexture2 @@ -636,17 +791,12 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { * be supercompressed. * @exception KTX_OUT_OF_MEMORY Not enough memory to carry out supercompression. */ -// extern "C" KTX_error_code -// ktxTexture2_CompressAstc(ktxTexture2* This, ktx_uint32_t quality) { -// return ktxTexture2_CompressAstcEx(This, NULL); -// } - -// extern "C" KTX_error_code -// ktxTexture2_CompressBcnEx(ktxTexture2*) { -// return KTX_INVALID_OPERATION; -// } -// -// extern "C" KTX_error_code -// ktxTexture2_CompressBcn(ktxTexture2*, ktx_uint32_t) { -// return KTX_INVALID_OPERATION; -// } +extern "C" KTX_error_code +ktxTexture2_CompressBcnEx(ktxTexture2*, ktxBCnParams) { + return KTX_INVALID_OPERATION; +} + +extern "C" KTX_error_code +ktxTexture2_CompressBcn(ktxTexture2*, ktx_uint32_t) { + return KTX_INVALID_OPERATION; +} diff --git a/lib/src/bcn_codec.h b/lib/src/bcn_codec.h index 516c65c675..3ff3b20f60 100644 --- a/lib/src/bcn_codec.h +++ b/lib/src/bcn_codec.h @@ -9,9 +9,6 @@ #ifndef _BCN_CODEC_H_ #define _BCN_CODEC_H_ -#include "vkformat_enum.h" -#include "ktx.h" - #define BCN_BLOCK_SIZE 4 #define BC1_BLOCK_SIZE 8 @@ -29,34 +26,4 @@ #define BC6H_OUTPUT_NCHANNELS 4 #define BC7_OUTPUT_NCHANNELS 4 -/** - * @memberof ktxTexture - * @internal - * @ingroup reader - * @~English - * @brief Should be used to get uncompressed version of BCn VkFormat - * - * The decompressed format is calculated from corresponding BCn format. There are - * only 3 possible options currently supported. RGBA8, SRGBA8 and RGBA16. - * - * @return Uncompressed version of VKFormat for a specific BCn VkFormat or - * VK_FORMAT_UNDEFINED in case the ktxTexture2's vkFormat does not - * reflect a BCn compressed texture. - */ -inline VkFormat -getBCnUncompressedFormat(ktx_uint32_t vkFormat) noexcept { - switch (vkFormat) { - case VK_FORMAT_BC1_RGB_SRGB_BLOCK: - case VK_FORMAT_BC3_SRGB_BLOCK: - case VK_FORMAT_BC7_SRGB_BLOCK: - return VK_FORMAT_R8G8B8A8_SRGB; - case VK_FORMAT_BC4_UNORM_BLOCK: - return VK_FORMAT_R8_UNORM; - case VK_FORMAT_BC5_UNORM_BLOCK: - return VK_FORMAT_R8G8_UNORM; - default: - return VK_FORMAT_UNDEFINED; - } -} - #endif diff --git a/tests/resources/ktx2/color_grid_bc3.ktx2 b/tests/resources/ktx2/color_grid_bc3.ktx2 new file mode 100644 index 0000000000..6090050824 --- /dev/null +++ b/tests/resources/ktx2/color_grid_bc3.ktx2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40d3e9bea33e83c7c88b3d2b5b41959397b8b7bdc91e40962bd49a37e9dfb042 +size 1048816 diff --git a/tests/resources/ktx2/color_grid_bc4.ktx2 b/tests/resources/ktx2/color_grid_bc4.ktx2 new file mode 100644 index 0000000000..23ae66cf05 --- /dev/null +++ b/tests/resources/ktx2/color_grid_bc4.ktx2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9a067f0720e15c8d7f348c2868eb2f3d49fe9193626cdb4aca746a427d405f0 +size 524504 diff --git a/tests/resources/ktx2/color_grid_bc5.ktx2 b/tests/resources/ktx2/color_grid_bc5.ktx2 new file mode 100644 index 0000000000..8da322f87f --- /dev/null +++ b/tests/resources/ktx2/color_grid_bc5.ktx2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5362589abf538de1f0502ac319d3f7361e9b4470cecedecd595534053607d1e8 +size 1048816 diff --git a/tests/resources/ktx2/color_grid_bc7.ktx2 b/tests/resources/ktx2/color_grid_bc7.ktx2 new file mode 100644 index 0000000000..a451176a85 --- /dev/null +++ b/tests/resources/ktx2/color_grid_bc7.ktx2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9219e847f2a4c0438e5420b8085937aea5511181d2fcc8966d5a2d7700b99cac +size 1048800 diff --git a/tests/texturetests/texturetests.cc b/tests/texturetests/texturetests.cc index 08337a194e..9c6cdad658 100644 --- a/tests/texturetests/texturetests.cc +++ b/tests/texturetests/texturetests.cc @@ -3257,6 +3257,187 @@ TEST_F(ktxTexture2AstcDecodeTestBase, Decode_astc_8x8_unorm_array_7) { runTest(u8"astc_8x8_unorm_array_7.ktx2"); } +//------------------------------------------------------------ +// Template for base fixture for BCn encode and decode tests. +//------------------------------------------------------------ + +template +class ktxTexture2BCnEncodeDecodeTestBase + : public ktxTexture2TestBase { + protected: + using ktxTextureTestBase::helper; + using ktxTextureTestBase::ktxMemFile; + using ktxTextureTestBase::ktxMemFileLen; + + public: + void runTest(khr_df_model_e bcn) { + ktxTexture2* texture; + KTX_error_code result; + auto tmpDir = fs::temp_directory_path(); + + result = ktxTexture2_CreateFromMemory(ktxMemFile, ktxMemFileLen, + KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, &texture); + ASSERT_TRUE(result == KTX_SUCCESS); + ASSERT_TRUE(texture != NULL) + << "ktxTexture_CreateFromMemory failed: " << ktxErrorString(result); + ASSERT_TRUE(texture->pData != NULL) << "Image data not loaded"; + + ktx_uint32_t compressedFormat; + ktx_uint32_t expectedDecompressedFormat; + + const bool isSRGB = KHR_DFDVAL(texture->pDfd + 1, TRANSFER) == KHR_DF_TRANSFER_SRGB; + + fs::path ktxdiffOut = tmpDir / "ktxdiffOut.txt"; + fs::path original; + fs::path decoded; + + switch (bcn) { + case KHR_DF_MODEL_BC1A: + original = tmpDir / "CompressToBC1ThenDecode_original.ktx2"; + decoded = tmpDir / "CompressToBC1ThenDecode_decoded.ktx2"; + if (isSRGB) { + compressedFormat = VK_FORMAT_BC1_RGBA_SRGB_BLOCK; + expectedDecompressedFormat = VK_FORMAT_R8G8B8A8_SRGB; + } else { + compressedFormat = VK_FORMAT_BC1_RGBA_UNORM_BLOCK; + expectedDecompressedFormat = VK_FORMAT_R8G8B8A8_UNORM; + } + break; + + case KHR_DF_MODEL_BC3: + original = tmpDir / "CompressToBC3ThenDecode_original.ktx2"; + decoded = tmpDir / "CompressToBC3ThenDecode_decoded.ktx2"; + if (isSRGB) { + compressedFormat = VK_FORMAT_BC3_SRGB_BLOCK; + expectedDecompressedFormat = VK_FORMAT_R8G8B8A8_SRGB; + } else { + compressedFormat = VK_FORMAT_BC3_UNORM_BLOCK; + expectedDecompressedFormat = VK_FORMAT_R8G8B8A8_UNORM; + } + break; + + case KHR_DF_MODEL_BC4: + original = tmpDir / "CompressToBC4ThenDecode_original.ktx2"; + decoded = tmpDir / "CompressToBC4ThenDecode_decoded.ktx2"; + ASSERT_FALSE(isSRGB); // should never occur + if (texture->vkFormat == VK_FORMAT_R8_UNORM) { + compressedFormat = VK_FORMAT_BC4_UNORM_BLOCK; + expectedDecompressedFormat = VK_FORMAT_R8_UNORM; + } else { /* this is tested below */ + compressedFormat = VK_FORMAT_BC4_SNORM_BLOCK; + expectedDecompressedFormat = VK_FORMAT_R8_SNORM; + } + break; + + case KHR_DF_MODEL_BC5: + original = tmpDir / "CompressToBC5ThenDecode_original.ktx2"; + decoded = tmpDir / "CompressToBC5ThenDecode_decoded.ktx2"; + ASSERT_FALSE(isSRGB); // should never occur + if (texture->vkFormat == VK_FORMAT_R8G8_UNORM) { + compressedFormat = VK_FORMAT_BC5_UNORM_BLOCK; + expectedDecompressedFormat = VK_FORMAT_R8G8_UNORM; + } else { /* this is tested below */ + compressedFormat = VK_FORMAT_BC5_SNORM_BLOCK; + expectedDecompressedFormat = VK_FORMAT_R8G8_SNORM; + } + break; + + case KHR_DF_MODEL_BC7: + original = tmpDir / "CompressToBC7ThenDecode_original.ktx2"; + decoded = tmpDir / "CompressToBC7ThenDecode_decoded.ktx2"; + if (isSRGB) { + compressedFormat = VK_FORMAT_BC7_SRGB_BLOCK; + expectedDecompressedFormat = VK_FORMAT_R8G8B8A8_SRGB; + } else { + compressedFormat = VK_FORMAT_BC7_UNORM_BLOCK; + expectedDecompressedFormat = VK_FORMAT_R8G8B8A8_UNORM; + } + break; + + default: + return; + } + + ASSERT_EQ(texture->vkFormat, expectedDecompressedFormat); + + if (ktxMemFile == NULL) { + return; + } + + result = ktxTexture2_WriteToNamedFile(texture, original.string().c_str()); + ASSERT_TRUE(result == KTX_SUCCESS); + + auto depth = texture->baseDepth; + auto height = texture->baseHeight; + auto width = texture->baseWidth; + auto dataSize = texture->dataSize; + + ASSERT_TRUE(depth == 1); + + ktxBCnParams params; + params.structSize = sizeof(params); + params.threadCount = 1; + params.bcn = bcn; + params.qualityLevel = 10; + params.normalMap = false; + params.perceptual = false; + result = ktxTexture2_CompressBCnEx(texture, ¶ms); + + EXPECT_EQ(result, KTX_SUCCESS); + EXPECT_TRUE(texture->vkFormat == compressedFormat); + + uint32_t* pBdb = texture->pDfd + 1; + if (isSRGB) { + EXPECT_TRUE(KHR_DFDVAL(pBdb, TRANSFER) == KHR_DF_TRANSFER_SRGB); + } + khr_df_model_e model = static_cast(KHR_DFDVAL(pBdb, MODEL)); + EXPECT_EQ(model, bcn); + EXPECT_EQ(texture->supercompressionScheme, KTX_SS_NONE); + EXPECT_TRUE(texture->_private->_supercompressionGlobalData == (ktx_uint8_t*)0); + EXPECT_EQ(texture->numLevels, helper.numLevels); + EXPECT_EQ(texture->baseDepth, depth); + EXPECT_EQ(texture->baseHeight, height); + EXPECT_EQ(texture->baseWidth, width); + EXPECT_LT(texture->dataSize, dataSize); + + result = ktxTexture2_DecodeBCn(texture); + ASSERT_EQ(result, KTX_SUCCESS) << format("ktxTexture2_DecodeBCn failed with error code: {}", ktxErrorString(result)); + EXPECT_EQ(texture->vkFormat, expectedDecompressedFormat); + model = static_cast(KHR_DFDVAL(texture->pDfd + 1, MODEL)); + EXPECT_EQ(model, KHR_DF_MODEL_RGBSDA); + EXPECT_EQ(depth, texture->baseDepth); + result = ktxTexture2_WriteToNamedFile(texture, decoded.string().c_str()); + EXPECT_EQ(texture->baseHeight, height); + EXPECT_EQ(texture->baseWidth, width); + if (texture) { + ktxTexture_Destroy(ktxTexture(texture)); + fs::remove(original); + fs::remove(decoded); + fs::remove(ktxdiffOut); + } + } +}; + +// Test fixtures for BCn encode and decode tests. + +class ktxTexture2_BCnEncodeDecodeTestRGBA8_SRGB + : public ktxTexture2BCnEncodeDecodeTestBase {}; +class ktxTexture2_BC4EncodeDecodeTestR8_UNORM + : public ktxTexture2BCnEncodeDecodeTestBase {}; +class ktxTexture2_BC5EncodeDecodeTestR8G8_UNORM + : public ktxTexture2BCnEncodeDecodeTestBase {}; + +//////////////////////////////////////////// +// BCn encode & decode tests +/////////////////////////////////////////// + +TEST_F(ktxTexture2_BCnEncodeDecodeTestRGBA8_SRGB, CompressToBC1ThenDecode) { runTest(KHR_DF_MODEL_BC1A); } +TEST_F(ktxTexture2_BCnEncodeDecodeTestRGBA8_SRGB, CompressToBC3ThenDecode) { runTest(KHR_DF_MODEL_BC3); } +TEST_F(ktxTexture2_BC4EncodeDecodeTestR8_UNORM, CompressToBC4ThenDecode) { runTest(KHR_DF_MODEL_BC4); } +TEST_F(ktxTexture2_BC5EncodeDecodeTestR8G8_UNORM, CompressToBC5ThenDecode) { runTest(KHR_DF_MODEL_BC5); } +TEST_F(ktxTexture2_BCnEncodeDecodeTestRGBA8_SRGB, CompressToBC7ThenDecode) { runTest(KHR_DF_MODEL_BC7); } +// TODO: BCn RDO tests (also some tests with some parameters) + //------------------------------------------------- // Template for base fixture for BCn decode tests. //------------------------------------------------- @@ -3266,17 +3447,18 @@ class ktxTexture2BCnDecodeTestBase : public ::testing::Test { void runTest(const std::u8string& bcnFileName) { ktxTexture2* texture; KTX_error_code result; - + ktx_uint32_t expectedDecompressedFormat; fs::path bcnPath = ktx2Path; bcnPath.replace_filename(bcnFileName); + result = ktxTexture2_CreateFromNamedFile( reinterpret_cast(bcnPath.u8string().c_str()), KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, &texture); - EXPECT_EQ(result, KTX_SUCCESS) + ASSERT_EQ(result, KTX_SUCCESS) << format("ktxTexture2_CreateFromNamedFile \"{}\" failed: {}", from_u8string(bcnPath.u8string()), ktxErrorString(result)); - EXPECT_NE(texture, nullptr); + ASSERT_NE(texture, nullptr); // Check the input file is valid BCn (TODO) khr_df_model_e colormodel = ktxTexture2_GetColorModel_e(texture); @@ -3284,8 +3466,46 @@ class ktxTexture2BCnDecodeTestBase : public ::testing::Test { colormodel == KHR_DF_MODEL_BC4 || colormodel == KHR_DF_MODEL_BC5 || colormodel == KHR_DF_MODEL_BC7) << format( - "Color model of \"{}\" {} is not a BC1, BC3, BC4, BC5, or BC7 encoded test file", + "Color model of \"{}\" {} is not a BC1, BC3, BC4, BC5, or BC7 encoded ktx test file", from_u8string(bcnPath.u8string()), dfdToStringColorModel(colormodel)); + + switch (texture->vkFormat) { + case VK_FORMAT_BC1_RGB_UNORM_BLOCK: + case VK_FORMAT_BC1_RGBA_UNORM_BLOCK: + case VK_FORMAT_BC3_UNORM_BLOCK: + case VK_FORMAT_BC7_UNORM_BLOCK: + expectedDecompressedFormat = VK_FORMAT_R8G8B8A8_UNORM; + break; + + case VK_FORMAT_BC1_RGB_SRGB_BLOCK: + case VK_FORMAT_BC1_RGBA_SRGB_BLOCK: + case VK_FORMAT_BC3_SRGB_BLOCK: + case VK_FORMAT_BC7_SRGB_BLOCK: + expectedDecompressedFormat = VK_FORMAT_R8G8B8A8_SRGB; + break; + + case VK_FORMAT_BC4_UNORM_BLOCK: + expectedDecompressedFormat = VK_FORMAT_R8_UNORM; + break; + + case VK_FORMAT_BC4_SNORM_BLOCK: + expectedDecompressedFormat = VK_FORMAT_R8_SNORM; + break; + + case VK_FORMAT_BC5_UNORM_BLOCK: + expectedDecompressedFormat = VK_FORMAT_R8G8_UNORM; + break; + + case VK_FORMAT_BC5_SNORM_BLOCK: + expectedDecompressedFormat = VK_FORMAT_R8G8_SNORM; + break; + + default: + ASSERT_TRUE(false) << + format("VkFormat {} is not of a supported BCn block compression format.", texture->vkFormat); + break; // should never occur because of colormodel check above + } + ASSERT_TRUE(texture->isCompressed); ASSERT_FALSE(ktxTexture2_NeedsTranscoding(texture)); ASSERT_TRUE(texture->pDfd != nullptr); @@ -3298,31 +3518,18 @@ class ktxTexture2BCnDecodeTestBase : public ::testing::Test { auto isArray = texture->isArray; auto isHdr = ktxTexture2_IsHDR(texture); auto isPremultipliedAlpha = ktxTexture2_GetPremultipliedAlpha(texture); - uint32_t* pBdb = texture->pDfd + 1; - auto isFloat = (KHR_DFDSVAL(pBdb, 0, QUALIFIERS) & KHR_DF_SAMPLE_DATATYPE_FLOAT) != 0U; - auto isSrgb = KHR_DFDVAL(pBdb, TRANSFER) == KHR_DF_TRANSFER_SRGB; - - EXPECT_FALSE(isSrgb && isFloat); result = ktxTexture2_DecodeBCn(texture); - EXPECT_EQ(result, KTX_SUCCESS) + ASSERT_EQ(result, KTX_SUCCESS) << format("ktxTexture2_DecodeBCn failed: {}", ktxErrorString(result)); // Get the pointer to the updated DFD ASSERT_FALSE(ktxTexture2_NeedsTranscoding(texture)); ASSERT_FALSE(texture->isCompressed); ASSERT_TRUE(texture->pDfd != nullptr); - pBdb = texture->pDfd + 1; - if (isFloat) { - EXPECT_EQ(texture->vkFormat, (ktx_uint32_t)VK_FORMAT_R16G16B16A16_SFLOAT); - EXPECT_NE((KHR_DFDSVAL(pBdb, 1, QUALIFIERS) & KHR_DF_SAMPLE_DATATYPE_FLOAT), 0U); - EXPECT_FALSE(KHR_DFDVAL(pBdb, TRANSFER) == KHR_DF_TRANSFER_SRGB); - } else if (isSrgb) - EXPECT_EQ(texture->vkFormat, (ktx_uint32_t)VK_FORMAT_R8G8B8A8_SRGB); - else - EXPECT_EQ(texture->vkFormat, (ktx_uint32_t)VK_FORMAT_R8G8B8A8_UNORM); - - khr_df_model_e model = static_cast(KHR_DFDVAL(texture->pDfd + 1, MODEL)); + uint32_t* pBdb = texture->pDfd + 1; + EXPECT_EQ(texture->vkFormat, expectedDecompressedFormat); + khr_df_model_e model = static_cast(KHR_DFDVAL(pBdb, MODEL)); EXPECT_EQ(model, KHR_DF_MODEL_RGBSDA); EXPECT_EQ(height, texture->baseHeight); EXPECT_EQ(width, texture->baseWidth); @@ -3345,10 +3552,13 @@ class ktxTexture2BCnDecodeTestBase : public ::testing::Test { /////////////////////////////////////////// TEST_F(ktxTexture2BCnDecodeTestBase, Decode_color_grid_bc1) { runTest(u8"color_grid_bc1.ktx2"); } +TEST_F(ktxTexture2BCnDecodeTestBase, Decode_color_grid_bc3) { runTest(u8"color_grid_bc3.ktx2"); } +TEST_F(ktxTexture2BCnDecodeTestBase, Decode_color_grid_bc4) { runTest(u8"color_grid_bc4.ktx2"); } +TEST_F(ktxTexture2BCnDecodeTestBase, Decode_color_grid_bc5) { runTest(u8"color_grid_bc5.ktx2"); } +TEST_F(ktxTexture2BCnDecodeTestBase, Decode_color_grid_bc7) { runTest(u8"color_grid_bc7.ktx2"); } } // namespace - GTEST_API_ int main(int argc, char* argv[]) { testing::InitGoogleTest(&argc, argv); diff --git a/tools/ktx/command_extract.cpp b/tools/ktx/command_extract.cpp index 361d2b67bd..2edc1b8d2b 100644 --- a/tools/ktx/command_extract.cpp +++ b/tools/ktx/command_extract.cpp @@ -763,8 +763,6 @@ void CommandExtract::decodeAndSaveBCn(std::string filepath, bool appendExtension } } - std::cout << vkFormat << '\n'; - // Range mapping has been handled here so no need to pass the parameters on to // this recursive call. saveImageFile(std::move(filepath), appendExtension, From b036239443bef244f010508d8663baeb20d8ff14 Mon Sep 17 00:00:00 2001 From: Walid Chtioui Date: Fri, 8 May 2026 09:13:28 +0200 Subject: [PATCH 04/81] Add BCn encoding support for CLI command encode *Add BC1, BC3, BC4, BC5, and BC7 encoding support to "ktx encode" command. *Cleanup ktxBCnParams and add BC1/BC3 quality and mode params. *Add docstrings/documentation to newly added enums/structs in ktx.h. Signed-off-by: Walid Chtioui --- lib/include/ktx.h | 85 +++++++++++++++++----- lib/src/bcn_codec.cpp | 39 +++++----- tests/texturetests/texturetests.cc | 4 +- tools/ktx/command_encode.cpp | 101 +++++++++++++++++++++----- tools/ktx/encode_utils_bcn.h | 112 +++++++++++++++++++++++++++++ tools/ktx/formats.h | 28 ++++++++ 6 files changed, 314 insertions(+), 55 deletions(-) create mode 100644 tools/ktx/encode_utils_bcn.h diff --git a/lib/include/ktx.h b/lib/include/ktx.h index 509388cbe9..cbf1a35d33 100644 --- a/lib/include/ktx.h +++ b/lib/include/ktx.h @@ -1389,38 +1389,89 @@ typedef struct ktxAstcParams { */ } ktxAstcParams; +/** + * @~English + * @brief Options specifiying BC1/BC3 encoding/decoding approximation modes. + */ +typedef enum ktx_bc1_approx_mode_e { + KTX_PACK_BC1_BLOCK_APPROX_MODE_IDEAL = 0, + /*!< The default mode. No rounding for 4-color colors 2,3. This matches + the D3D10 docs on BC1. + */ + KTX_PACK_BC1_BLOCK_APPROX_MODE_NVIDIA = 1, + /*!< NVidia GPU mode. May produce artifacts on non-NVidia GPUs. */ + KTX_PACK_BC1_BLOCK_APPROX_MODE_AMD = 2, + /*!< AMD GPU mode. May produce artifacts on non-AMD GPUs. */ + KTX_PACK_BC1_BLOCK_APPROX_MODE_IDEAL_ROUND_4 = 3, + /*!< Matches AMD Compressonator's output. Rounds 4-color colors 2,3 (not + 3-color color 2). This matches the D3D9 docs on DXT1. + */ +} ktx_bc1_approx_mode_e; + +/** + * @~English + * @brief Options specifiying BC1/BC3 encoding quality levels. + */ +typedef enum ktx_pack_bc1_quality_levels_e { + KTX_PACK_BC1_QUALITY_LEVEL_FASTEST = 0U, + /*!< Fastest compression. */ + KTX_PACK_BC1_QUALITY_LEVEL_FAST = 5U, + /*!< Fast compression. */ + KTX_PACK_BC1_QUALITY_LEVEL_MEDIUM = 10U, + /*!< Medium compression. */ + KTX_PACK_BC1_QUALITY_LEVEL_THOROUGH = 15U, + /*!< Slower compression. */ + KTX_PACK_BC1_QUALITY_LEVEL_EXHAUSTIVE = 19U, + /*!< Very slow compression. */ + KTX_PACK_BC1_QUALITY_LEVEL_MAX = KTX_PACK_BC1_QUALITY_LEVEL_EXHAUSTIVE, + /*!< Maximum supported quality level. */ +} ktx_pack_bc1_quality_levels_e; +typedef ktx_uint32_t ktx_pack_bc1_quality_levels; + +/** + * @memberof ktxTexture + * @~English + * @brief Structure for passing extended parameters to + * ktxTexture2_CompressBCnEx. + * + * Since it makes no sense to set the target BCn format to some default value, + * this struct does not have a default initializer. I.e., initializing this 0 + * (e.g. " = {0};") is not supported. + */ typedef struct ktxBCnParams { ktx_uint32_t structSize; /*!< Size of this struct. Used so library can tell which version of struct is being passed. */ + // TODO: add comment about RDO (because RDO has its own integrated MT...) ktx_uint32_t threadCount; - /*!< Number of threads used for compression. Default is 1. - */ + /*!< Number of threads used for compression. Default is 1. */ khr_df_model_e bcn; /*!< BCn format to compress to. E.g., for BC7 this should be set to: - * KHR_DF_MODEL_BC7 + KHR_DF_MODEL_BC7. Only options related to the provided target BCn + format are used. */ - ktx_uint32_t qualityLevel; - /*!< astcenc supports -fastest, -fast, -medium, -thorough, -exhaustive + ktx_bc1_approx_mode_e bc1ApproxMode; + /*!< BC1/BC3 approximation mode (for both: encoding and decoding). + Default is KTX_PACK_BC1_BLOCK_APPROX_MODE_IDEAL. + + If you encode textures for a specific vendor's GPU's, beware that + using that texture data on other GPU's may result in ugly artifacts. + Encode to KTX_PACK_BC1_BLOCK_APPROX_MODE_IDEAL unless you know the + texture data will only be deployed or used on a specific vendor's + GPU. */ - ktx_bool_t normalMap; - /*!< Tunes codec parameters for better quality on normal maps - In this mode normals are compressed to X,Y components - Discarding Z component, reader will need to generate Z - component in shaders. - */ - - ktx_bool_t perceptual; - /*!< The codec should optimize for perceptual error, instead of direct - RMS error. This aims to improves perceived image quality, but - typically lowers the measured PSNR score. Perceptual methods are - currently only available for normal maps and RGB color data. + ktx_uint32_t bc1CompressionQuality; + /*!< BC1/BC3 compression quality. Range is [0,19]. Default is 5. + Lower values give faster compression speed but potentially lower + quality. Higher values give slower compression speed but potentially + better quality. */ + } ktxBCnParams; KTX_API KTX_error_code KTX_APIENTRY diff --git a/lib/src/bcn_codec.cpp b/lib/src/bcn_codec.cpp index 2dde4442f9..5927486280 100644 --- a/lib/src/bcn_codec.cpp +++ b/lib/src/bcn_codec.cpp @@ -11,9 +11,11 @@ * @file * @~English * - * @brief Functions for compressing a texture to ASTC format and decoding one in ASTC format.. + * @brief Functions for compressing a texture to BCn format and decoding one in + * BCn format. Currently supported BCn formats are: BC1, BC3, BC4, BC5, + * and BC7. * - * @author Wasim Abbas , www.arm.com + * @author Walid Chtioui , individual contributor (walid.chtioui.main@gmail.com) */ #include "bcn_codec.h" @@ -22,17 +24,15 @@ #include #include -#include "bc7enc_rdo/bc7enc.h" /* for BC7 encoder */ -#include "bc7enc_rdo/bc7decomp.h" +#include "bc7enc_rdo/bc7enc.h" /* for BC7 encoder */ +#include "bc7enc_rdo/bc7decomp.h" /* for BC7 decoder */ +#include "bc7enc_rdo/rgbcx.h" /* for BC1-BC5 encoders/decoders */ #include "vkformat_enum.h" #include "ktx.h" #include "ktxint.h" #include "texture2.h" -// #include "bc7enc_rdo/bc7decomp.h" /* for BC7 decoder */ -#include "bc7enc_rdo/rgbcx.h" /* for BC1-BC5 encoders/decoders */ - //************************************************************************ //* Functions common to decoder and encoder * //************************************************************************ @@ -302,6 +302,8 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { const ktx_uint8_t* imageDataIn = This->pData + imageOffsetIn; ktx_uint8_t* imageDataOut = prototype->pData + imageOffsetOut; + // Probably very little benefit of using multithreading here + const ktx_size_t dst_pitch = imageWidth * nchannels; const ktx_uint8_t* src_blocks = imageDataIn; @@ -310,6 +312,9 @@ ktxTexture2_DecodeBCn(ktxTexture2* This) { switch (colorModel) { case KHR_DF_MODEL_BC1A: // BC1: 8 bytes -> 4 x 4 x 4 = 64 bytes + // TODO: BC1 with punchthrough alpha should already be supported, + // right? (since we already right to 4x4x4 block and then to an RGBA + // texture)? rgbcx::unpack_bc1(src_blocks, rgba, true); src_blocks += BC1_BLOCK_SIZE; break; @@ -476,9 +481,6 @@ ktxTexture2_CompressBCnEx(ktxTexture2* This, ktxBCnParams* params) { // Basic descriptor block begins after the total size field. const uint32_t* BDB = This->pDfd + 1; - - // ktx_uint32_t transfer = KHR_DFDVAL(BDB, TRANSFER); - // bool sRGB = transfer == KHR_DF_TRANSFER_SRGB; ktx_uint8_t alphaMode = KHR_DFDVAL(BDB, FLAGS); size_t nchannels; VkFormat compressedVkFormat; @@ -500,7 +502,7 @@ ktxTexture2_CompressBCnEx(ktxTexture2* This, ktxBCnParams* params) { return KTX_INVALID_OPERATION; // Not a valid decompressed vkformat for BC1 } nchannels = BC1_OUTPUT_NCHANNELS; - rgbcx::init(rgbcx::bc1_approx_mode::cBC1Ideal); + rgbcx::init(static_cast(params->bc1ApproxMode)); break; case KHR_DF_MODEL_BC3: @@ -515,7 +517,7 @@ ktxTexture2_CompressBCnEx(ktxTexture2* This, ktxBCnParams* params) { return KTX_INVALID_OPERATION; // Not a valid decompressed vkformat for BC3 } nchannels = BC3_OUTPUT_NCHANNELS; - rgbcx::init(rgbcx::bc1_approx_mode::cBC1Ideal); + rgbcx::init(static_cast(params->bc1ApproxMode)); break; case KHR_DF_MODEL_BC4: @@ -530,7 +532,7 @@ ktxTexture2_CompressBCnEx(ktxTexture2* This, ktxBCnParams* params) { return KTX_INVALID_OPERATION; // Not a valid decompressed vkformat for BC4 } nchannels = BC4_OUTPUT_NCHANNELS; - rgbcx::init(rgbcx::bc1_approx_mode::cBC1Ideal); + rgbcx::init(static_cast(params->bc1ApproxMode)); break; case KHR_DF_MODEL_BC5: @@ -545,7 +547,7 @@ ktxTexture2_CompressBCnEx(ktxTexture2* This, ktxBCnParams* params) { return KTX_INVALID_OPERATION; // Not a valid decompressed vkformat for BC5 } nchannels = BC5_OUTPUT_NCHANNELS; - rgbcx::init(rgbcx::bc1_approx_mode::cBC1Ideal); + rgbcx::init(static_cast(params->bc1ApproxMode)); break; case KHR_DF_MODEL_BC7: @@ -648,6 +650,9 @@ ktxTexture2_CompressBCnEx(ktxTexture2* This, ktxBCnParams* params) { ktx_uint8_t* pDstLevelImage = prototype->pData /* + levelDataOffset */; const size_t nbrBlocksX = (width + BCN_BLOCK_SIZE - 1) / BCN_BLOCK_SIZE; + // TODO: add and profile multithreading (contrary to decoding, encoding + // BC7 takes singnificantly much longer). + for (uint32_t image = 0; image < levelImages; image++) { // Row-major loop over blocks for (size_t y{0}; y < height; y += BCN_BLOCK_SIZE) { @@ -667,14 +672,16 @@ ktxTexture2_CompressBCnEx(ktxTexture2* This, ktxBCnParams* params) { case KHR_DF_MODEL_BC1A: // BC1: 4 x 4 x 4 = 64 bytes -> 8 bytes rgbcx::encode_bc1( - 10, pDstLevelImage + (yBlock * nbrBlocksX + xBlock) * BC1_BLOCK_SIZE, + params->bc1CompressionQuality, + pDstLevelImage + (yBlock * nbrBlocksX + xBlock) * BC1_BLOCK_SIZE, reinterpret_cast(pPixels), true, false); break; case KHR_DF_MODEL_BC3: // BC3: 4 x 4 x 4 = 64 bytes -> 16 bytes rgbcx::encode_bc3( - 10, pDstLevelImage + (yBlock * nbrBlocksX + xBlock) * BC3_BLOCK_SIZE, + params->bc1CompressionQuality, + pDstLevelImage + (yBlock * nbrBlocksX + xBlock) * BC3_BLOCK_SIZE, reinterpret_cast(pPixels)); break; diff --git a/tests/texturetests/texturetests.cc b/tests/texturetests/texturetests.cc index 9c6cdad658..73e13f28f2 100644 --- a/tests/texturetests/texturetests.cc +++ b/tests/texturetests/texturetests.cc @@ -3378,9 +3378,7 @@ class ktxTexture2BCnEncodeDecodeTestBase params.structSize = sizeof(params); params.threadCount = 1; params.bcn = bcn; - params.qualityLevel = 10; - params.normalMap = false; - params.perceptual = false; + params.bc1CompressionQuality = KTX_PACK_BC1_QUALITY_LEVEL_MEDIUM; result = ktxTexture2_CompressBCnEx(texture, ¶ms); EXPECT_EQ(result, KTX_SUCCESS); diff --git a/tools/ktx/command_encode.cpp b/tools/ktx/command_encode.cpp index 15f6b8d767..c9d3e48088 100644 --- a/tools/ktx/command_encode.cpp +++ b/tools/ktx/command_encode.cpp @@ -4,6 +4,7 @@ #include "command.h" #include "encode_utils_astc.h" +#include "encode_utils_bcn.h" #include "encode_utils_common.h" #include "platform_utils.h" #include "metrics_utils.h" @@ -49,6 +50,10 @@ Encode a KTX2 file. For universal and ASTC LDR formats, the input file must be R8, R8G8, R8G8B8 or R8G8B8A8 (or their sRGB variants). + For BC1, BC3 and BC7 formats, the input file must be R8G8B8A8 (or their SRGB variants). + For BC4 format, the input file must be R8. + For BC5 format, the input file must be R8G8. + For universal HDR formats, the input file must be R16G16B16_SFLOAT or R16G16B16A16_SFLOAT. 3s_SVrzkeg!r{wq- zKSCPs@t>m%H8Z(;BfeKRlBSx^=ie9dHqIL(o~_1^I%!DndNZ`rbVwIVZT^-FD5n$F zAt~a3S{PI@6fv^=ABNyi##w5(>VRf77(_dNh&4rkxO{)9%@7V!Z}lFW(g0bMrD4@+ zFtp1aC%rFIKh=D64Gz}j6qO|G2{4s-S^E-39o_fz2FqClY@WnKG)^OhN8sSUr&9`XJo zs2-&%_a^~_dT~OewkXO2JV@QV#dhps;%#R&Sa2bh%CUP^nAyVm8C`%}}E*^n*%2YR;Y1 zWXu=(LAg!l+=9r6(GSYK&Yb&qSZB)-Dl)gsocl4XL1Sj?u4pdza$)qnPV63Ll-6f! zmN|EJnvtu|*2U)B#gVzhx)6k1)f>AmMbY;<@mi$UXo*UnX3lM0YRm`fDnjl9AIH|! z6n(D~1z#F7fV!ykb>`f_5~D8knsUp`xpjw)Z!x!&d!{*8iR5B#Dc5e!O*7hcG?TwU zSz_P5NKfm;*{>MVK#U_7-#0`@$+JHz`d%l#3>kgFIH>f+=G;?tcVED7VX;`@FHP#yF_NtL73V(Go5mDV2C6TB5d2RN1)+k5~&{9^PMt za05+x#P8*MRZxFlDc?_%Q|l3=tdH{b#=B3xUn(cVBYq^`w;Jy?@_mE^Al(1tdzJBi zfqeh*{XF#`J>~lnBY%{9|Fhgw9x+J1-zTTnBmM)1J^FL5@%}IQJ|a~g-#_Ggy_|55 z_`7_6)OcU3e{Yoky?lSwcwec%KmPx?dl$GUtNed_kP${f25nMIN=hmUDiSPoC{Y~1 z3>icQD}lC)v1YBwjM{p`hAGFVr?t{*x68U+HruSMwEKk-1H3GXxkYKEW_1X6!(w$X za(?g6InVRVGXtc3+x>rE|F5stkvZo)=YBrte9q^p^v@&WOV#;uiFk!rGK^oupHSna zB0g0d85qBa$GxT0H%7@<*W+9fzfX;yF5ayI1sXqa0=|A4|v2th)46ybS_vF@ z&lQGt3i$maLd-K2h7kzE*H#$v5mNEniZBJih4@nlK7=n2u0z^S_?!Bd3d3ZCTM#@5 zw<7&1{B1$_4q*}E62hYh&m#v2GK==`PF}Tjp zeyYMygm4>zgzy|fBSIU(2;`?CSP`ZmT!(Ng!Xg9-;ZcMbjIXL2=9`4H@H!w5Y|g%P zowP8=KY@J43!H;1bisHJ`3$mD?W2-hC+A*5J2>B52;BP%%=fecX9U{O`ErH9!Sb|& zACEFft;DuRH`-7f^4WV`gF{T0^J=&PNpE(`d9E$?sDZRr3|wo)QsqTGRqF=g0krB5 zN=Nz>A3Rzg;q385QECNx`ST6uk_HqgTKEhMjq?mKdGTIl#KX*YjqVSci$BqP&js|O z4g~N1^Lr?Eh^BFJ)LF^jb_jnQtVO+9oS3A9Q=OzZ42M`RRfb|9`8D`Yti*qP zlKN^mH?i#_yeu5-(mT~V7~{!0)$yG6zcrq|8qUpb!zqmMyu9##G9JtS)_5#!skpTr z?5ZDB1f##ZE{W)Dc#M~Ddd+x_zQ?zvK?K&pj)=gMB6r zWTd=7DVrQ@Z>O&M%#i9gDAoTR?|TP(KtpIzeI`|(4i=L@P*8m)Rez<{S5%)#)$jXW zt^Ti+@)Q(nwX>whc+C9q65lqHHy9x<6Ww_Jprxqec~=`DDkFCw!O3|*sm#nPGip6U z?-Qu^L$uzbXm&`^XF0+c-?j%XvmDIJQ8x0jfTGz{^qXqkz_V%KA8@pazQMq=Y2cAs zDGWTD27bSmvYJxvcd++g;nyolp$lBZL|fXYmEITgEf3XUyB zOKs-6O02~YEp?sPCwvs$KrF?G59(6C)>7{kP{Y67rKRS*6m0D+Ewx73D>SyJwbZwC zsrPBAtNB?YdbUtYUAjD2?+sdNfr157y;p0gn{_jJnU?yFZZ(s%)CS!O4b)QiFAcWV z2?SKk!*Sg%`CLm))~$S#ma4vgsAsQesRg=kAJbA_(e?LkE%jdA8qd{I8+57HYN<8z z_%X!Sg4}h8{{CKhlTjZoM(V6pju$Hoa}e%Acm&}^ge?f4B6J``y;NaHL>P@wfKY*u zxeoa2a}@?Bey>DWi|`u41%InBbRq1(?}G?_gbmME7(PL0NB9XLZbOB^yuQMag>V(Z zOoZDJl9676zt17OjW7;zJHjl4#Rz{#+EIiD@OvG?dkA|FOfOUzE=9;iC`Gsh;ZB5a zk!JvYD&hA=ga(9GN=N8Mh{M>1B0mjbBEk%W+YxFJ{)Dgrp#fnZf=Z#Q+Mwand+q@~ zo!AnJPjmXBWo%wN++;mZXj{;KpF*g#;81ke`77#qmGu2kX)~vKpCfH1w!tpv=^<NuDY;p&377RQ)PHH&Y z0gKci0=gT=pH^pH-xwuDoqe_6fA(~Lx72_fF+xs{&MJ{Ufd)-3FnN;WP6juAL=~|E zh2gnf4``HTVK{$DZ2JIdNi4ZmqynyM%9!ONKi&P10l8Y5k|v!dRVPEI$-86+G1v82r+~*bf;5)>xutEMmIaCxyFPPL1t{vC^mQ!%i zRTm>FH<`x+F_uWOuKiL5QDT=j)WEs`F|Pl-5vY? z_*Zi5{pg-E2C_Qv(Fy_o_Bax?p%_o_NvAE}O!awftz2!#BFE-Hc}F&`K(p5G!H&2I zS4CBNBCz#UX98Q-me1B*nfg zclL6FobBPOzT^-#jPnBP=AIe}0#3xvLX(H2%!u}D(KI$zLda86`H(Cqz+YuC%n!oh zM2?UUcMT%N0tdVI45CP&8W<_?gS(SsOl^Q&QSeaQ<7p}~?;{tinfO`eU`6LEb8W6Y zhcYp(RH68j`^O`}c+dCLLJVtv z3OtuW7_IXl0swG=B{)q`@AL)X z(GkdC&&2VmrW5NPEI2j*0B=t*bl_4K;6QWXk_jz5g!gfeD-VNI#cwk#Q%(Y&; zRXw`_spd(|y5$U9%9dlz_l6a>*sSQ*N(&>!t^!IdFy3SkYaI@x`qU-hu6D+l5Lyp6DvQ+&UHB>d(a6EFawwz$%e6_oGEe_bUIYcrMCgREwPS5O#YV`dZ?OM~eeHSbb)*SQPQl&5i)*q?t<%oOg%+=!Qo9;4w%?NP=UQH@fDQe%&kbBf;ATV;{Dxz|{v!AN+hM z%0sUhj<$Sk$hiTW%J^8yOYpHXN9XrTj!4gk9BYEF?W}%VM;G<0InXb?sGs?@sUzG6 z%-$lC`L(>*WHai8w=N$u66ZhPh$V34OO6C-v$PG=F@t&e0W#|gXIM{7zkMVtL zUVbouT^QNo_C>>Lbt3ZQ*!xm_-lEt@I(E^$wpB=UclCFjj}Az%aEF?xj{eSQTr2sO z_G(eDH0eH!z|ww`yDJ*Dj6%MRcE(VVD5o)_u6>~X`-Jchd8LW%XK5cLVP@LR?ye}; zKuqtTQLu3eZ^SegiL_ZLG2xF~DVro<$)Bu1jFkU5eq?grIoGgcm|R?S?9&muN3}>3 z7m~91#Kk}r+T&o03!Q^Wu5S8+eIP>xdmt_m7_lobs*2wF`eG%YAi}P=nl6PFX+r`2 zrheo*4hfG=5?^-tvEZ?u-AgZ$wzYIgzQ{W3%m(9vn0fuJ*$vQtY-t}PXEp%qgPE{~ z_{d$J-OETt$LjLSc^zh36Yf6}B;fS}Grf!;l#_Pn-mP+!@i~D3_P5QH`X)oyy$ekv z{&*NaU`S?0tOE71J?4Wpd7029;{aZ)(Tyj4t5Pe2bmJ%KA)V}5{Q=R9<2WIO$Rhpa zxoJQwj;@TuD!49^;z<4+ATzY;33NbEf7jhlr^(7Vbdx?ZWgI2wFRzD%0fEjWM>q%J z)*Jw_DMD$>>w&ab!UZ|#z!Bv@kK%kirF|j~Deb>-D($aO+jp?@Zc+(87zcN$!^dIv z{08)rQ>e@A$-;-HP~YHFt&ic9*VXrhN)3vu1YNHJLdxZB5qNf1X4HvDCtkb`)_hR? z?(5)ppYW_N1!(|FwLO^i9?x1QC^*R45X^dtXFa}Ot&ked6m6|Qme%kh{#_~Ta0yZ& zHLQGhJ!XH5}AE|j9$6U2xg(%0_g-#w^xkZM=HyPan}qK%lU$QD(U z=&Q)%-^K4!2SQaS-=*@bn=AE`rewwQtZ{qQQZ#8w*1tgjbFklOSu|-%)~7tHQ_V8h z&c_}MX1~p|Pk(}wMwC&fh%T>1mNusk^6&onnc6sYS@~`u&w5hZDzwf@RyohQ=S#H| zby>-p$g|S46NI{~WS!5mURD=L>#~w<;@J~}*<~0J3geg~xM%}8vFcjwnO{fG{4u`t z2+(6&c|Yu&KIdTePn76Az@#1QY%xW!cgLeQsL|i@Xs#H!oso*1gY8kHQ+V`ru^a3x zn@1gL^dcTzFjo+s*jYTfLd`Yv=$it#?aaWVe-iU(XGicRaWJbIJ;c@ZO(OqivVIFN!2w!Xkk3OJI&Ye73Efxm)uspg^jb6v2H~&VE zrZ{~L=jWr!0I%S=x3nppyqHJVsnL-<>it;Bjpxzd-=>s};L$1K2(vSKUpd$gbwpqC z=-<`3+QXxttCRBqj|OHdRlUZeN%NHGvpiZ111LD7?CcR9ohObFJM;3WTh0AFk9Ml< z-pZr@P^WGtj}HAxsj84iKdw+_<4PWF6}OU|U4p22q+vvTh2cVku?PhSWeBqnTnM!Y z4<>i z5Pw|=s}PcdU9Y6wicAq0LY?AO3q;mVP6ek++&1Yg^A z4J>^&wRC|-NSNwO2V|4|Z13AY1f&FFd-o{_>)syW9Z3}=gyTZm(;ps|ULMgIs6JQyGX3XRz9YgP68-79-bLk9NBKDk1ktnGd%Oox2DW_4&5*SbFRc{~e zYe;V&Mu~_B1^zsH_4vO?>m}BKH}yAnTmv>d&^yv*YIaY}hWz;qs@i2*-eAJx$h)LN zYKAFYv;nMl25GTzi!xUp_k-{yR36+>L=6Dd!MzK9qact9BZH+7|AhRz1;%BG3`kbH z`&oTRm}i7?z!0g)$0Adw#-|qgtxXH?8nX~JWWYJy0ki-CQQpRp zonnG|xTOTx^M_>MV@qrxFV;P-+Zh>{8t)y~IMGNQ74{$UbHHJf3zC#qFXmZN7voIV z6nW`>h>=c$VEI!ML071`7gIx~FOrb5d_XDG0Y)@_PcXo1s2ovOF^W?vKqv0A+5*>L zIgixx2UcQjIT@@THlD@ea{70ow5#PfNLC=DHsO7Y*I`6OeeG_LbHaqG1qClJ5hKK| zCK_~zHV}L7tImLc3l+ZkeuT`riBvWU%An8yxAW3c&~Q7v<%ijz(ysz<=3sI_2!YN; zKD@eEVCR9}iDub2nG_*d`6#Z00Y}C}QLNgiO?WF!xCRo<%nl+A3_sUeFx#?mnQU}p zwXLn@+T&<|B>$Uct&%Fc-9L7lYd@kkfApJc|BfFZY;iC4-Ms0e?Q?KeNFVyX?LRr= zL)h5#eT)8#YH75YXc^_$X>#U$Qk?Y@XWFb)?yhd<9CsHyWdkNAHQ=m@Y#CMBIRQ10 zwK45m*GE;qL20p5SV+h7yJ3ea8e6mxI~$z=Z6MFon2&cCB4*`XWfqz3gV79#+}miG z`a_KX!Y?i;`(VGZ2`kAatl!-jE9ZA(GClG1_$WVI!X7w}&!8rstu7A!Vtx4Hlwo!F z;#k0yVDn2(vMiCXfphk$EelTKSXPQto;b^Rp3BDTWMd=Du|#Boh|7+itM-i_>&khG zqkJ}I0{jU-d|h&izNx^@KA#reuc98?h4E5sofI3y1WHk zTu~r6Ld^inlm~Axra*qIyCD|OeAi#ma53{I^U+sm%Ab7vi9z{y)e?<6&~M%dIX^%e zL9NAK1>VoW?jWFPH0S%hIA?PqA#bkz2c-u3neR#?7^seyasCuCxs=F~)+5eJoTxr2 z4*S)a@9yewPLvvZ|3^zOWhPD+v?uJ|U!*n3p@gqTT5s!N)YhZG-sgHWW2o+c(R>$OkbFI$ z{?jUhQe3(R>oFs^9yzogR%JbmKffM(Xf+0^>(Pq!Ky_jvUI|?Y<0&k}PiF=fVxO`Q zdw`GY7h>31;S14FeJ7p)WstFJ`s3C5hLT zWYg3>m!yp^Nxb>4JY`Alt3iraUWn6DUPA&i-Zf7AkLCG|x;!VGlj)$Jq%2STyriE2 z7hYPwLLRD`7K!JGb$Tvzo#Ibnok|n6b@K3Ta+ujfeYG0x zv<1sLCCK@51nLoG!`JL-zGh>Sc$c&_>!1Q5YX5N{UqQ z5#hDL$-{oHZ3kEB_c4?A@zwaifnJ)Sp!D!K;6hOL7rabg8+3A?MmAy9G00v>+37?L zlw?YWDyBI3x0ab#Z}zTv3~A<(wOD0%wX5@PT8p^nC>%DwyN+^J*I73^ht0mJs-Ot= z>>2(87RM{Xab-PH9ak*NRD|t^PvrI?4q2vRY&UsK<~59cm$J>Z+$6-6z~2VKuQJbR zA0GAwq4U(s%g=HzGv$NL*I;blPL{30KIGrv<5})I@mUX%QgOXBSqpclnvc8iy4b>A zNCOWHJZBGeQQ{*fzm82tv?IpUcARoHiTNj;C~)qCT9m^0AWbVX(B5;#VphQm>2=bZ zStMnLOgij>sk2S9Og#{@%xC9RW|`0H?}sR}%;$U#ViKRmel?=)M!-XA>3+$VYTE)X3)t;m z4{cKH!|2g_+er3DUh@VLGH@2H$6xQ74ftPPLsVz)nvMMTB>tOHr0>0(vhi1TZSii( z!4G<#wP3S@7Lf{vB_686*M&x?7VjGR*4j1C(nGl%`%SWKkz|5BaI=hWNONP^8JCfQ z9Iu0P^iJ$fT-_Z%Q)lGgO6oc8}rp@D8J%NYo>9GP+%s zse|l5OD5c;Qa;!KgY&KL(v&#i@S>^hG9-@P+urZh2r;3uhei)}a?~{PJz*3>lx3PT zsP0ACMJiY2tJEiKf%Rftys&#Ep1JULbNMiSaMg?VGwGL)A@j4u#E~i!rTP{>cojHn z#Or8y`&sDXu<+N>NB9)uCjHeV@i4$I!T2@a|6l~y9EfnziwQ3)L;Kk{0Bg7QRy<#M zSV<+ZC?w^?W^8^A;~bA~w-A|xbAU`F-2V|iK~ou9!N9`@-okiT%rV#Q$D+%N;^Etr z4Dx=O`pFbjLiU5k!@tYm*>?yF;MbF}I&J|a`_Fh+UT}4Zfga8Gp)k7k^Cgf!^O1Pq z^r2b;yf#I@@f=rd37Pw3b`bB{Gu{5n)r9v!0B;`!nf#sy8dV@leab1Vv6$e~rNVgF z!ki#20W&P#y3Oo44?_{J81w zwq_olW|J%A*d}a-L5+rP)C;nQ)#v&_typ;@{mS}R==4Nafy|s;` z06;=<`v@kw-Mis_4dNsYiloP+AAc61_ldvC=LRJYtE;IlKAVW;upzQb+ z{x5#ELVpgzoIq8j2&-*BL;@xlNfa!hSJ^LYr#&8E()fM#Iabx)s3J!N0-`&vurQ%`C_^gb7ixk8{w5K_RIY zI4=ZU)p@QWppxwz8Bzd(Oy<`j-0UoJ#skCt74_&yuu;`;+aMA(ffbX}U6C6i>dAH+ zB4g(NFuE@IEp^cW<^E$09RPN~(R?C}z40|fbqc;w4?Jv7_tzcLWqt0Dnx!UF1(0A- zFFzkZKQ1=`K5+TvTCDjN?EE@S0>J<>y+(DjeqpY?AFYN6mSKoewN7NQpL7}9I382f zj9ZQU4ZqwFxxtR2f=#R~8(A<^-@(4XFUU-Jhy?|mE^!Cb=B*>in*}$Nv48GSm%UUf zNYUB6gK-UMQHsQf?xyBdE42e`@V<0&+Sq=--R+_ zm1EOs{G8Se-atk!TwIwwUlS5$gL9rU1Ph8bFY%Rl+GWAC2a%>YSYk=oSmwLQtXT<* z6g|a=u}4eGSoL<^bEzO3hmZR}w3GvfGSMK@)fVG>d=rNa;T%9UcxF?|R&(v;`0MV9 zG}n^cx4R4U9U>!CR*V*%En#PU$SdWIm}|3 z83oO$6*QX#34!?u?3tI2al$*tA@UO72pe5sFG2Gf3(U|9sFX%|( z@2Anxky=@?AwsO^PG&j-!eq@WTUlUusbO5bD-NQgHyu&N<@$$iKAU&z=aVc-m9cMy z76H15p}dP4Fb6AJF$*t?+UoH0=!KXNx_v;2oy#X=^^0Oc=yi^M0nNJWf?{k#*k!Vr z@C~b`Xa~%s)Q~{yLVShI32Qo-Mi)K5Am~IhT3f*@u%O~<3%e4vD)^7OxPx5hl(G5s zn8_*Gm?NP1*jYf#kM61*?W;%@lOPwgL4<2TZW+toN?#_xhVcPdO-gVd^uw)SG}^*B zLCt*!yaBC$^$nR0+s;0tzwCUF2C)g+oa z*q>g|`snuOxW<;T71Nau0pg24rurp6tEM0DG$yr@ud&mx^*ZpQ(%PZHB8RkC!IdZI zgOqYW9rcCgTC#lu`@rT}1OIWpYdZY9EyjlH2+U6mR41~tDP4>TR@`9RHx1&Rm>*2e z=qAt(%pNGu1>8#$4Cd87_agdJHx6WT+Va}=ar-B_t|((;wqe>(aY~>%g*9PcC>7Tc zcq~m4HP9bk!{0({IL|erjEw?V2Ilhe#8g3fWg$!0BRi>bEFSHI+flZRmHGs61V?C=WxtM?}&97yP5hwB?)a<3z90eDdzNl@K1pX zl291li>Uq+xeNf=4Z8Vo#A5C%qtoeXtn4bhHF$>eN^Ff+@EN{23qQZ%KgF99-&Nr| zdV+4I10!B)q6LNozh4@RU)Dw-ht2E|s>PavABrDVzu7~EtB}3}QNmHmA#*n8E9j5p z86(M>4w(KvRiZpct##0z)U*`wABZA{-C9<+JC6Ra2fhU!Jvdv{H35`4dVU;vd6Db zX`*<2NmF7W(8wQZ{xZn2drGi3GmgSd3?1`VAR-N-_on>&c(n)|z6_f^U-w{Z5uae= zNU(^M{knM8b>LYS@)hOJd=)<1ND^0o3-N*u(w_65y$bHLIO6^!LwaK(usjCE7< z&NIRvVjoMqN}9E+V3&5EJP&xr4m@c|Pl#+j?E&?m_GNSt%~%@*saDR52QXYjPe|Jy zM7)JNyrsLqdj%`j8`VY+0?$z~6VUMZsO?{LiEJjSmr<+*PQMZEcWFvd?LKFb9am{= zKA5mXZgW~vTigdbrWFTVJJ@Ytf(l+6 zUwssb#B@OE!nW&YromEGjCm59hwCD7+59*$u7SmY(~0&7P?bEiM2!aYpNw?kcR)(R zJO16%7N4&1l{*Xref0hz7T`-^6e>YGq3kWN}$`%Kvf{PHF~Dw z2W>C+{*hielQ%%4uue73PpYEFV%3U6q@VDW03gca0K`9?3T7oI3*icxIfzD5r%d7bRt0|>$t=%g>!t-kIzr*`D{b}^9!2i@G_V)M30&f4M zxOi(JejrG6t5)KP#214vr!02@!SZ@?PzF{;@jqCrDWeDMJrc|m0u}%parj#W8#{M+$M<{ zMm0?g-Xy`It`AeN+;*0DEFHhj|7?D08 zi?x+>tZ)kb*axY0tVEbvCef3@B|tr1PZqTUubiH2`oY0X0mcaH1fw$+{5|@Ft%bEB zF|M(0>TU4WQQ8PQZaL8#p2G6!9?_k*jj*Dm0!~1(pr(L30soh=E6?Cck9gws;OJ3h zz^{f2t;i^$n9SDs7%^J7t*qSnpk+EG{*`PB}H4heY`Aknasj1Ogg z_JDIkrR>a&IhFWjMQ^EBaAa@+xmdTuXyAlg4kDoBdijcio(p2`5KhcJ8%Tuh1UA{F zbOS1cU4GCD+U_W#?Vk22HHk*>ywe(u-SjqAJ3tKNjkhFouhJ(geZH4w!Q-1I{tae44Gb(RP@R)3#syIVAot`U6TlD{cP~ zPeghjZbk~^=OA=hOSq&Ao3Kkvz%CHr)9Ru-k3i%ro|bq8a^1F8(sy*1?!y{G2#AyF zz2y*oq}A1v>I+$Fp+c%poJKWO*B=QGiA=5e!-Z6HEbK$|O|M5w)&PVaA#ns+y%iU3 zR3mzUAymT%?;dIX)fj>2N&v@f1MGy8a`YBbv4YT=&)#U*_2^6kyY78IV1GaRJTQiE z7xBK`tZ6ZEd_4`|AH>%c5ve0!x^LP~Ye|N$rB>^Y&fz62b~_!C()JQ4RTYEo^Ug-P z#UPLv8-wY0C6=&p>nVlXHs-<;X+Mh9gbHmlyJ9J{eLMJj$-8MED#z(QysAz+^{>Ad zr~WRUPZ-C2gefm?;HXY%yzfAycT+10ff3@B_fXehu1ba+I?x(icWdZZq{RQgP=HrH zgt(VSt&Uz$n_UwBf*RrTIKjhCnL} z^V_u#;;;05sxNgDrA`HF1CQ9V!nwoZ66ZBxB!SE$l1!@>;M2<%-+&3{39yg2t`nY9 zJIWjZzOKyhD#pcIbZ?25cn5O4JT9F8>wK`%ODHVVFcOi zA<2Q>J_4DeQW4qXDw1~A`J%2Ju1WVx+Sy0_=%q6~+j%EVRcul|SI* z>a*dej6I}Ju(M<9l<&>8_hBWVN(cXOp`UDgMXeJ3MfUX2Y}*CuvY@}n9uu0K_pDkP z{YCcB(Cm-@s%E3V$UfG<<6<(XzhCPU?ChHj>i1%H8bh<$t7^8Gopqtvzul;2i`nt& zv#GU(`UE?>Q$N`Wc6Lo@_O`$3szdfTeKu8hfj+^`-bzuXN)QmBXJ=VW(e8Ogl6BZWn+ereRpVfwA#KCGlcA0 z^w~5dhd#m1hRxyxd7{x0mI75e_(u)>r1KeVNJKW_pTviL@|W;kh+6)+C1lh~HL$>_ zk=-1cJyJXDFluDK6q>zOTX>8b*{edcFV(U!YGmJ`&!$mduTQYEOJNlSD*}Bmko)ZH z$+b$<%cB{8QKG-+QKOh~_~YbJn;M@0~# zugy}l)CTkDt!i#R9(_zeo}K-Gd%@0@h&hJ;8y-DNjsAm217dn1i_fEWHTpV_-mga2 z@#s10l>z>dM_*N=D|vKdq0*~GJnB*>XAX}##6m$AgGV1$qf>dbKpZB}&*ISmH!4-7 z^XOITw4cqRk{TVtqjUbO^eU1^%f~2XNwo*|&B00GOZF9yzNC)mBOcwL&Q&9i`qarG z&mi#KF1&_X=PF)d?cB#=E z9)0UP4(Zr$h_1@|5&C%u4uqQ#oCt1&2N3>(umRzHgl2@#5DwGte}l(x6uNZyJ+K?P zbO{j&97o;&U@RH7ftkJ`5=( z=o6I@=iw9Lrhg3%Hp$y9Opv17-}njr*Q|;3mvXv^cZ65eN}FW`nBAO^0}V2{-~c$8 z=6i^8tq2TgWeZBR#XUgTal!vL}Zut7Wfk%6w0 z;4OfX8iXdh!5bN{+?QkmRzw%M|X|741ZJrrU4qqdEAIv2{QZ z1kagr@b#1@QoKPf*hO643xV8&hhN4F=kT2fZoizDEoyhLN9#gLG{Le)u*8W<4kWxp zidtgqPF)GNKiQ=<5J(O-kfeS-dx!4xD$f9QIUn&rz4LK*=yD2qOX9aUuz>91R^aI_ z6SsRqiny?i0e8Y>vu1%=P>W^4LQU;}B);%J1~nFQEkPNiRHQ{F(87!vf%aSF86*Mj z^OpO4tbYbfxfn;)%hyIg;ZM%qDVfJk?QmYg>+qmHp}Mu(Jn3VwrXuS{+5EZWoE$!k zgP*%v!nJ#}hf!XKTxs-1%Tr>Z2-VBoW+{Cthlm?Od-Gsz~uA{4s2a-;)EuzNm7}~eK4XipNm|2%S^6FsmSsMWkMk` z5=vVIeM?`WDClzFO&*M(V)62Vcoe!`S^&S6P|Rt7W2%mf-Kj_14bi@TL2l5T{{sw! z#7%6B097C$Pc~UUa(xd5ptT&9k+{vT)7;0g3u0)q9EZ83ezYC(p@6l<_k6frywUnD~)kG=}@yagHLM^;r_wJh7o<$JvPv_M2~s zYGQKN^BMAd4uYMwvREZ>n>_xA_?@$&XlZE|wI!;@wzr>R{s6x|PV}$B*<4VJdL)Q*o#4u{UV&SVu67ixB8Asb6P_8e&oQw6# zsmZfLq4G`Qg7vwcl=LN0?4HKM3Z`Pw(n0Q1A$uIiJT9E@_ABOcU7_Nqw7>NIktc`shv;1sOsP;uh$G76{vAg?>9O2nVaa^M^o% zl+d0fjc|W?f;3o!G978KfT>8z$nA-^N&hFF8Mf0t zjU!?@ybFjspv}DK2Ijxm!6o`%CUfE7UXXC>{9Qjln9>;!1RRHJ1*v0mZ2)3{IV{8i zE0HQ%`I8Yn(l_k)-b7+94pRC zl%`qasj(azKVp4_1mB&b-EY^R3WM_ksqis&&7JUwt0W{;?L>Oj!iVtQ%6wc;@^@2- zMjJ_Z;m>3A2VISkxjaS?mh>r0Kof#S8T5Wd++0|EySCVzM*kXG`| z_B0vaT!+br+ebKQgZ!}9wjpCHF(=A5!tBl#Y?!9J(Nm@Unxp-itNkLmVeuVZ`}~)! zhW-TXknsiTJRZ+o4tv=AW`{I6kWz2(rdP!aJ5UATK*B#U-PBH8oXt8Ld00{ zEgCN^2OsDtwy#ZayHBVts>U{-j3RD(Y{e?P>a>gUMBBQL0v9@)12u-Wv{+ zo(=^jACX}b2h;nQ4lJ7hmL!x152~eaNU*lKzyd{7+xiP!>)p2Xk-pp310t~^=KMx) z;cE2YD#*1*K~Wfof_2+GyjO#OnMe)6Nh=zNz`o!h2|uWX8^NCKFO|O0-hdgG%GaSH zG}#^rfF`*yGP@<@8Ga%7(6dIrrFsLJAaI2NO{1-r=2V59i6jpl1fLiVKB?FD20qj* zTb0-od|WlsyVMF`XC&$A1%YQXgg{l`;hz9<3Z%l?P{^@_LXP(KKb?5k=k-SKvE_$109Oy*Z%~ehO6(_P-c5GMOpqQf7mt?;a^%U`?D=UB;5Z?q z=Z}3MPu(H}D@O!Ib&=pT@uCEY8@|P>Ri6_HRX0L#Mj%FOAJd_s;<$9MHA~5XLK*vP zGm7&&PBcmw(@oS1xCDkWz*gFn3L?sd;KJ`cxlI7A5Uq`nJXI)63b}-iM!FX!8k_^+ zXdR^14{5W2bo%ae`htH43xRSdu6TJ=79ZGZWE*bvS|HW1mEyJC3n6mIkCC`K3AMM9q!Z9Q z>oMmgLHf92M%`r&;O>#BatCuP!Sr$Sd_e20$6TKXc{wYWwsVcwum)`|xqIax3h#hv zOTs65n>N@uG0Yw<^Oo38JGuhX>@u#D2k$|XkiIY6r^(i7W*KVb!c{?;Iz^sOrfEW| zO_9L6B7E&yzUjLY%C*X6cv;nAG|lA`k48j5nJ$9fzOHB%Z$B0wR*)0}{`=Qm5ILHO zCgIcJbwr53Cgi{Vp#nm1T4vC9s@Lh@w2W7KMESs?xNN<;n^aMteS6gUl=tx|!&9O> zIe~4j$3E1-6YCqE>V9|1@MK#g;7NY}*TK^jU-!Kxq44BB{r?a=Mg9KQ!Bf;%eNS5m zJiV}0g{R!w|1>-;Kh$?8Lf|Rk&feiE-3OAa0#D8_b?|fxA{spHYf<^e+Zsl zoB!+J>9qrWPg@8)l{cvH^aGH)|LpyA>Cbc`1fH5)y~ESo_k!@0yk7@T!w}Kn>E7m3 zhNnO8KLvQo*6RDE@RTi2&SKlELG{$#PfdNpQ_^ow8J?bT3V8Y_p1Z#W-+TOvzBfiF zJbek#=l?VK-mL0h2T!v;?|a%p;Av333QtcFiuoVK_YQp4cPB#NY2m!y;VJ!&A2fV# z&psVIH6o(HQ}*^#hNmL6M?ZHz9p0wa_eG4g!4xS44^}Qyc@bqBJ{~>r9O8)zP#rtXK-oB?T1fJe~UxlXG3-J3L*F!&t@lYCqAz(*i^^csksu?*EhGdx1}s9{n6VJ*L(7OW`R?o}9_vhPw$p zJniTko@#D5Wq9g;yMU)cDAN6!`{}3FzSkrao^l~F_)>hr zp1!9o1fI@(Q-!Bj3B~-6!qbrt`|d;tJgune9iHa?DWKtdhj#1W>0?ARc)Hqm%J5XF z_UPyCr|vqnJ_Vjsb4sb7mq~XT;YR}IeIXMFF~EFdYLl-k(%LeAL@H#)AubWQc{Uls zutSI3&N_Bu0^qo@J~Csg4;Srjl7r6w1QIl7K-@FOG|^k&Z_Mc?7NtDjX#LRDhOc3= z5!NqBaD-%GdY9k5T2+y4v~^Hvc$?cf$9LWnLg75+K>k(F{m0J7R})(I<}#wIXY1sg>!JX~y-rzWrg)=Pr#~u_ zJQpTH6?>xbl3$)wZpDPBrJc|t+2(k58Mzz zeqnk6v?=M}^(+y8f* zlkk_!z;h$>g@S>huVJZLgUK7wI6>?g;)E%doHJZElH7UzT(UK`jH*z*E(duaR;mJ0 z&amtVkIPyW$MQ)?X_@mJSUyZ}!ktsmTsd&2mFBAwFmM%bq$wLb+f<^6 zqTNTektmvqOa0KMT*Nbx=tJ~IMRs;SPHujcP=C`NA&Rz&*D5S!&PH} zG7I)yBoq|juiM(;JPi(P220V^F{*_$h%u>F(?TSg&>oq*R$Q*plIJKb+oU+M2n*PH z27-}|u1wrX5PMwiOThMG8xO;rGt4m?t$C(-vGCo~%p#_IOWff`vd;)FU7W{Cg0vxb z6koptVJr_$lDWlFc+YkFp&FlI!7-EUNt;{=d#V|bO;e@`hA=nXhG}ZNdj)E~5kXzS z686|o;Rk~YYGE?Q$t`FuC^*OxBT00%8+1f&RvRAp!EhO)+_Pa&Y4Q1u3A zlfpr_kxaL%;>pT%IN#1L+j#3Mii~2>EO~K2tJ& zACmEku6zp1#0yUO?7EQ8Bq|?VkHv^WJ&T_m7HeLD0^NCuxEkZxiLID_NTbu?;m)%d z)dfyqd+=sb>Yox)zcnSK{v8*DL~nz*tFHAEB#}jnm;zh7)Q6sMy@T{CMy)4-O$vTC zA>^~Ym+QI(c+!k{PH@XSeARvet3JO#& z#ExLgKr;+fFQ%V|j^aFq{obr&q~+ylKf8$zg!RxYc^@e(c;I>Klao%Tb0L(|J z9^a4s++Pw9hTpkge86GTo1i;hmFcfSx!@_|m>x1E!yF3Or~6nOjKE4T{$(>+i$c%f z?Fk(jY*l zvsbUtJ_Gpc#x1A?LW0gRSlHL|-snvD8)!?>(HH!3^Ic~J>FbE-po{_Mfv$5GVdB++C$W*UX#c5)Qwy#bH7}V(B2TH}nvg2ST@tJ!f$h7Qsz~DJ zTOzxUs;IWexyiULOl;?M*lW3IqEf#5mdxNOSTkrBLFu#i6??e8*E1fNU(WF*D(xR&P^ixq>ruo#OC0@ z!||Jov>`1@1b&)9y##Vw2g_oUTJh=~KnQJaN~BL-lme_aW3PhO(o1uwvaXl2ZikB2 znq1#1UBsTy&D~Y{qmJKmewd1*V>w6b0!`d2s42Kzo<@wX&+{{a>+=UBienrwq3ydA zwm?@jjs2F2;%vDtJ$R~^b(p-@*XOB%b3@njwQ0dd64;PCQ7v$l>ymn)F_%+~@G6@? zIE*q0SA|q{dMH*DMNu)5D?+}LL$AiE=Y*VV<0&eNm4_6&8wjFyVYnB~H7pq>PpLZg z$%w6^wo4Nhg8m^*SPX(sdt9T9p(Gyohv|=u43o6bh$S6~xi7|3g2ND zoxMI?+upwk`MjC#Ht~W2wqpl)sCGj_AShD*X2a|f^R>9kr7H-DQ4QOF7V{u5v&K%v)N?0Av2Hn74Ml|s1I=sH#gAbw^y87wBpyz9!SFDw~t-K$@uGktnBTMN@g?*9MjIGiTcYT8IAl#ah zD-`2tq}kYN&i|OZ5_e`}YUHKyQU+nc30#LNKbDT7Pu@~nKxN+a3GRF&sWqZen#OIe zze_H^vYqbK^}K``(7rlA3%g7AI7?)cih_erVwdS+32X+wRCZl2D|!`mCu~KpOX;!s zM~Tlu?!;VO_cC_NQ(%ums>d-5-xio*Xej#SqKK8z`5;|&rFMY>0u&$?gCzf36HJO* ztqI_iG`xvE@N{pM`ZkyV)V;Zc#qb-Z=R4fZaYqX{7$B&^vVtEJck2}OMF3|*+wJUk zR4oYc^de9Qs<|p+507@;EDo5SGSy4;W7#S%f<;#8L-V8-_vQrf3Y->cn>>N8mX#3` z_;6r`q#w3GbmV3X2v;#5ZJ9RO<1|{7z*ThjYCu!(^B1-N|=vJ@L2H9=mWNMs6YChFcpWD zrNvKpI2NZEkFLYkViUle$i=j7aeM?&KZlaP(c7AP`g&+9>W)ri z8-h=!J9IsteNmPDKIk*A#eXc#njTTYX5m7ewd$M9N<-Y3O2e55DVJ3miV&(0{($fV z!gmNK5C&adX-Gu42jLBbMue0se2-9p@Ct$tVHd&|2>(L(2_bfDr6C((4uS_^6T%jR z4-pO`96>OQt27v`m4?$0-bC1suq3b`ttvt2A7Xa7G^b zfZ)lmG+a|qX-Ed4mD6L%|0T>WIixN&^INd{1%K{n*bAQppb*2QN57nwq3@ z$t6vW=UTbLNmfSrZkOBNf59>-uOKGxYS+kPd4iuZRM8{vgttc=hEi!K=-PyBGGC-ZXgNA%}<8 zI@oh+q^D7C8lrALaNW1&mSj67u5JSAg@Z|OY7CdHH6WsXs^m! zqQ888RsU*TB``I>t}&@NaUv-9u!uzFqFo(=+e50fdGNVqXS+9IpbGB-?LuS87^ucg z>Su3|G!4|AbJM}r?S+i;2$iHOsLTlLb>Pc#dJXsA7{Co|&*vTp=?yCYm_c?TY^(0{>QlXyYWoc2il$#?P8({~W z4BD^7R15t~Z1HHI%G~CPojsn9r5)CCT-x07Esj;G$-T8-&A|xsq$Uu6;MIAV(O{nB zqo#3R%)k~fT60ytmAKO$eFYtWIWRqc4wsr#NxL~oW9S9<*=#BRzB(SWz%!uTzof(L zxfujzG=VMMShE6sy_&X04`q0De{*|bV4EH(WA~nh4~2a^@QfCN0eJi#a04qim#yaw z{Lh!sINiWtX(|j!X{Q_gWz`p=7`%nC3opixCKw6Z?)F8}lM5)6!fq?hP;a^nc4J;w zAYZ=DXk8-sZEzJ;5#$VtmIZ%L%u}`6a*#Dh(*&svpHLq=3E|D`d4lF7pZ0-VkjI$^&qB+^lF3ZK55oZ+>3X3P^ z+LcHTr^g<72~~1>Y$G{@HK+_}qRA?FEPq3KQ87?7>X!-B&jXPYz+gkc@cRCu)kl}Y zU|n?z3IX?qx8V`gez9`>_^Adx&$m*oA-E@00&zC%zz{(8N?AT%Ef+>vo{~)q1am*m z*b;h$kIcYGreq)WnILaN#K@%$!3WQixf)(JQ@3FH%cLi~LAMlW>g&bVa;K@6z!6&+ z2yMeie$9uErNDx@Ovb|oHV~zJCuaZx>F@PDG5-Z@J>`D# zhho+{xjO+kn`?xZKte!zuOahfHQ@9cj?*vE4qFCIQan82@lL|N^aOMLi62Y^Y{P!i5ZHV(X4JJ0n8wcD$dRJJf>@k-awRMpjijy#Z?~jC8-4;}5y&q( zOjQ>8+Xq0_jf~4J>9&^oo$1&(k5t10P$Gj^CYhGB)-gp)G6pU2@e*ta# zElRx{cc_L03Q*Pq;z!RbM?!=&fMc>@*f<>IV}$F8PR7B*X&S@-Lhw8JK8k7V)=gtNF*6Ff|MuQC#5 zSho*6IDB3d>uVnXS~NY1!qM06zo|Pf$mQZM+1UnGw+r)B87r_N6AceCKw(eTcc^^G zlT~Ww_vNe2CojCLM`0?eP7NH^_c1m3R8EGGS^U(fu+XTS)YN6`5fZ?;UPTSTft$=0CtC z%QEFo3%`5Lr5=Rx7O^h0XJIGD6xapPklKBKQVv}lj?kM(X}~HbHDCtG^in8+ls6uA zZUANAUE1vVGk(ZR8M%R3P4y@i*37kc(-)28aQ1!-3Qq~b4AW&>3?x1M%NrJgHHcq( z=tWWYvOiF>Fu_37%jwp<8LDi?OpwRy?1pt1Lf&)`97r}}x)C*AvYk8EJr5?%diDS_X)OIGHbzm0|ZtGbP19IptPs>**nit zFGJB=l3<&{U!s`Q7|d=l`tB~^FS1_jH<7%bV$#CF_N8Mo9d>NA%{U_Icmqub_6(-6 zY3Q3Y6(|;$E9j4ET?r(2g^4`29ODpHvC`SMpoc1v`P11xqK@Weo&sP4sxpi~8PyX>raKha7Ab|XOTvI{W!`vnTYcIQ zISS`bkDgmY8z+EM-``@?!$sS)6T=U`z%#*7hr{U%@Vs#_V+taNju0CdPpy zk8cW`ApV@*M)eG@neTlX70^W;tw~uO+@`nVdDR|`qjn5c-1kiv#$-2p$m^Ti_fpeQZ(fG{;;0zpG%$}nJpi>LP&M|wwAqYLtZT5Ul>3LZgrCgB7hKz;qo_H|$ z0bqST7`SX^_L)6-F8r~u#ANo+5g=|w+}ewAqCMNhPqaIDA{mmr1&KF+f{90m>pJyF zbrvI^KSsEza|rf^Z1xQI(isNVMGn?>QBY<8Bx~^+Sv^&e8Hki>=Fo$~eJ^^UA|zw* zTR}*E4uAcmjP3goj#l$ipi`x8Jd#@lQ7Byawf-sW9U_NtTCFO|Ddnf3D1;ZrAWuW< zg%BvLpvM!mdexFatR5#u+X3_ucM?s>(q0al5-LT~j6||jA3R)EHcfbp>~d^>^{FfQG*qv5856VTAc3f4D9XAO*>TSm<^iBTWmAb&? zXkj$l3t|a1?s>hG|0Ou*(oWs7m#`<{&zodsrdUwA#ea0yxe>VZK!H>7HPBFiuR$DE zFL50!Dx^}SCQw(17)B>%#%^wcXaF4&I2^J{JDo#t69Ncq+lnPKTRjFlV-Vd&i0)(` zaJiS{jH6`CEim6Mmsmh81^W;-oaL)5=1Ev^(9=d5S{QtACCsj_N>~Gu_y+u^*!L}@ zT^Y!H8I=_f1v57}4+d!4tR(w8Z!6yH2f=IRcQO3Mpm9hP;~NDf1WUf>TwS_0I9Ixv zQttC47C}!q9S!Lw+C8 zl%HdzsKL6x0z!*%0C2lj;~yicI{N=n!R=t_u+S99+`ujeXE4v|>UMo7mHVZlL~(Mv zPRGJH<3p*^?H29X0;(-8QBtgdwf5d7C|=i5h}uAngRgmhqO_~!IH-E?rQSqM36^4-KO_#A7g&&q=oq#xAzHKa?-*B`ffSrq=g6eT{!Zjg=6|I-01Uz)?E@guc>AU$= zO4+`**=cmRn_ zrrFLqUgi~p-w%Ewf4_v!=F+}uMd?>ix&YXq`JTm~13(XD?(9mUWe>c4x_U1LE&_?W z0=Ywq8k1Ae-)40H5Ozp~hv7nICtIYHDu@TU|Hhqh=PTC49+31)fXFbnfJv8ksP-y091hssk(Wtu^N z3gozpsaW--jNKV~!18-HuSZ4PKvY z>kR3+o#oD*Zg4O08=P@(({5IT0NMxZw{-bosu}d^p2+CaYcMB#{k?F$B@iv{S7|(O zJh}AnG}>p&Dfk$Q>1(rwloPk|is*a$8RZTXiN~E6+ zRS8b3vvn$!1D}jW<-jLRU|HDw?K`L);FUc){oQKb=^!N-YuI=XQS=ug^hrY;Q6<&582aLLi^0);)>xQPfaRqP#L=^E25$@ZwNoS*(%XACMQ% zy9Vz^=WzVA4JGk<&_>kal6Ks&K_C@oM)x@G+1`)Q26}^Z*#JxQ|L`YxNzbj$?`V)~@@scva z;T*k&&3Mz|Bwtq3RR9G^vra+s!B@cy@GG2DQjpxq_78@FBz&A3a9S9=bB#nF#v+H1 zC_~>v@D@_DY>dH~!QVqfIqGE>J@xjBh@B=_Z4xA^}1zGSwvjFdRaeybSRu6DNH&JMHnH}r_ zkb~*#gsPfezNX_IbTs%SaCR8kUx{>VGXduOuE*6!kqfh|kOVLw^K1E;BngOviJs|U zs?|5&k2%z+OQc$juJhMg0#0qkLrMJ6dT_;BexyIfS0mc{jou5El=-!KUN4S42pRS~ z_6GK-n(D3H>zqPr@Xc)CAR>Y|BjveJk_Q1BIP?h|95akyu{E_5_ zLFy@rXRoY6my0ak;qH8kQNY3N7;)ICf&Ek*B*4E1d_)l7AtlSM9}S>Wr0uzO-yd`d zb~Zs5o6a(Hu^H@KT`Y@zlT0M=Y;?DLGd3K_Fi)bBT8I(obuoVW13FFOG2J2Bmr}_j zX;BVcT5B)_Tw1DL^>(3GeU{SA%h_TyrB|z#$|iv)4BEl60;Mp&{Im*`TQ8`R_4#dp6!JsDkf79HaFZC1pFXkgF{5|LpP*|_cVD=d!TIGV9B;l|5c(*aA?=hiSFw$Vq;>#4h2HL}9kX7LY4|JEgH_E}{7YpE>aVX!{cQsEXwO zNixC!BQrpRAVDIB;syl`LU2$6xj+mAFo}qe=(?K43n4>L1cF0^;q55iw~LDFf$O3x z3cEiw11<@m9HMf0fTA`gYLEy6MCSjk?tbUIgarNb`MfZ%Uw2h^b$4}Db#-+)r~IdQ zhcAw>r(?#x>?!MMwajiKF$`>j+uUDn8*87H88}?N#(1)Ur92Dcy7GOD>)cWNl-#)C zfp9uomx76zJL;82)T|8ZIvmES&YI&u15_M4@$&fJKzA;7#@IW?Vaos;=-5E!7_K7> zlxD>N*M!PpFiRf^6LNo#(%0}(x-|jDtx{OHq``08C~7Pn8^lxu*p3oxdjVD!CSQQd zc&@`4eZhRtkE0((KaLyK0_ZSaL43}~Ler0YbWHSlp_fh{|7l9DyA}qKMkS*^Cok^H zCLM>AfxeJWaqA&su1Jc(l2gF#Jl!=v;`NG3G%mU~Ds$mFS{Ll5?7-AF?DRlnRx%)d z*4ZqR_Ye${5bJRE-)P!pkK?!qT+QlPFZ!_=#Zzl!2oboPrF~2S^m;Bp*F%6l8>{+3 zG4_VCAA3iXp5s*R$%OQGgWnaDU;XKo4hN357-)QKs7o?zKU+TMW*s z7#Mu<9hHQup?IK;j=C08hfYXIi{gq{82wf3H=IT8f6!*;)C#-8n-|Gg)R#7RIUI|3M6nRhl0AmRtH_En(59U-&Uy7I1p0M zhznw&R^w(?Ul<89oC#I6os}AxCsW6GQ(}O#$^( z4{OLH;aycgoC!C#1}>q({aFw|b3}uAVS=&BT;F^%no*Y#V7pI8o zuiK%Ju|*h!v#x{>!9n2 z@CR4$#EZZK#12${B<7vLcc6MIIl`$jF)%L?DkwZyE2cy03@)NwO(9$j7eqBl>zaQz zSILy4g~7QEY|<~F8V`4rOzXw4oP2+~VL4a%oflQr#;=S6T^46Y$@;~0B{;y>Tb+D% z+zZ-}y2N)Z>nUsvoNXvd6|Pg^TgV)wTh`M9!-cQ;%_KJpj$)ZD&e zs=B=Sf?b=$cysdw$&cSWISbk7 zYsb@Ze&|hPmEu?Zr97r;StJusroPA|hC@E<-yMTt>HzMy);{nJoGfCkVp)Wnr|Z@V z@>`Qb0p|Dl_Lc6?M5SdxvOwDx{5W7sCO9ezow2U0khSM1fn`YfgNTf7o@kl8gu8d8`={>pjg`Dl_{2p$o#@1FrJ+3C~ zr5uF+Ima}F?eC_pKlNCD5N-|<3L(Zc!HFu(^R3>zfA!NngdWcPe1pn(KI%x$0Ec4` zY`fTg1mkhk;t&nC*4sfr)RJzY6NJJYjR zc8R(Eir8#e(QyM2u8cok2bou@U`gy5gI1Ny?l-)pu<@`yN6Y)tA#*2VW*X#;d}6iZS_}q1cP@?$W)fp8j%+Q5= z0lO2IzOmtfSS?&wZ#0xyU@GHG+fxfqZEC>P)M{L7wN6%1iru?Bxi}^RU9PIEU)o_Q z|4HKG{7V_(vuH2T*0zZFy5XP)Bvc-vJ}Nb`G+2XhP| z_HqV?8SMz$pSV~x7o)@MZ_B-H=M6qm?Eu3pbEZXW+k}612fm-LOtw2GHIpD<bwJE}pk*uvN0)XcRT|w}+58>Yl4O%fPt;R4n#vOn(ApbLLB}3>@zD%Ge(#`1Wpq zz(RmcV68&@Oygjn3^Ts34yF~0`!yedMnu^p{bf zJeE7i6vKy$(+c`eq`d;JR-`<~HHg`oT5%g1=leTP{4;(!5D16d35zrpBkyp|;G6up__iDoY`_%B zM*0NeA>rqRM{)*NKn+Edpv~;Xf~zPEddOg%c*581O438PcO`%&q1_R!-OIFg#}bQr zo|EaAmfiKZN+#52Ft2uu%f6r@_BQ%CN@xJ!4-93;H5gSK2IvMslJ9#MJBVanjEbt zp4~L+Du!dP&6a-JwzTH!sd;*er4s!d;FVw2j~A}1l)))RY}j@uAamy6ffn&n|PV;k?JLa~iE zb@DI)L!Pv>ZTGu=t=*bM0t$v&kXs~d3odM;VD4~~4KwbnXR8&Ap@Mc57X^EO<=Lwf zo$U*%x=U8HJcFGDtr4bnC5%e&V2qR*jT3y+J5LF+KQyMJdLap;$|H16ylVe2U z%Lz#LWMNP}?KYsn_%ZtA8ynRyQ+A|q%GbxRLHCp6S7?7YTkiOZHer&4mcut_Zljvy zs{XWPNy4ADlS0~4J}Wtw>OzxZ;m1uKYt2ojg=}vlFECImAecqW{NelY=d1hi2)|&r zAK#st7CT~Ss$Bqv!N+QfebFyx*cRnQ`q~#+VPB+TKB{>O)J1hKK97X);{HeW^w`tq zD+G!MH15w*J_!5qC%`(ze*ELs{rIwfr^7SijB`L}xxo(qB?JZ#lG-et!=jSdV;|7; z9(x?sR9jQk@a4+5{zt-`ktWK~OeZRFnBDJONn7kyfQta>++IpEn*xSdx#3H9mSmBX+VgY->%nO>ukNh<#_=fuVWb0$R#+JR&Lpkjd3DKQLDj^ zsHhDL&Frh3)r89yuo78m3APieDgmkzMTnDjnbKNh}cc3r# z9XOYK2YQq1euk6Byb8ffM(X;vqQUC?N70!-;g$k_BhPhH6S@42Hf4>}`tZZjYss8c zPlpY%9!30}*A5MgGv>hhqq!?(?9ojJ$?R)v3F8U`{V9*eCNEC`V6cTI_+2D(j7y1i%A^ez-7tUKRnV7mO z6uV?~y$$4uWr3WJLB+n2KhZ*Idx@l;WTog?Mo-03*OZ-lyn*2&=>WoDw6&zpBzzpgn z1a0d=_-rh++CMcVg59BJHl2&adRcP=c@awo{U(%v!D?Z?){*-V+{Q6e*`6%2WQcR= zfOQMpNiV)yz zh4@LaUL4nRBOX7YdP9sc0{N`Q2qACk_9;a3fd%}$_7u%$6T1!;2~rwxi!%1=hs$U_ z=Zk1Q=P2EU=M<4uxHU79n_{8 z6~+X;!x`i`;f~Z9S4m-Ih~`e$QhnvO%uFhMSgXWNb0uy8ir~9+s32H*EujmE-z6Ni z_G&;!1 zro^Z23|7+JfuTi|8a|#73=P0*@R5A_TR94UeY-rBy)Xc=Dd^jbi~d4HaOD}ofE)Iv zIs+MqP0$G)ynuYQdwCW*P@&WihdL(?w+XJMWMy0MU4p#rht##cnpy3Y>fpPSrM6?p z*$MukBdbM4ln~*}XJ=IY997=ssJ4cjyCuH#AhsHxp&X(y!Ah#9G6xC?w&i>Hwv=51 zQ_2KaaAX9cav+Q!jlM1Z+S*K1y^n}r81sEI_VWROgYq3IOA6&92#y2-*Q@m$2sZtr ztEj>V4Zn&S5?w{qWT!9uIeLHsYIp(2;VxRT_Dog zbMJF_3mf)+DDUF+dOgUr^`|LD)BCE@aT`L z0NH=P9vD};bkpN;p->9SvJM~Zk4}pVRnkj!Wd{Ckg>eMyc{T5bo**}?#)T_jwe%7H zCDMN^0e3oK;l#U(zjryej=!@rzaJRK&UokRC^xIX91pgx0Jd2=?F!%te3K`-V@Gs`n$rpaZ40I&FIwy0ggxObXMdoj-zno z5NNY2vVfpEdm;Wh$QtdL=AGuCz=D@e<%Gs?gq07}mEzIv}W&W?O7327;=HYX4QrL!niTpgb=nl*eQ+FKY-GOU9 zW4eRN-%jOWqt^)BWOq>R5i!_W)cKs`R6b5%Q;vh=^9&@nL&`}`g+81tNOIiJ$QGg1 zAS@vWQ1AqVCP$r?|C&?9sEzU@fstyAc|j8e^Foew%nejVP8^$Vp;@-`nwEA8<$jfN z%UL1@0hUk8ASlF~G!6oI?rAe&8kL9J-WGJrSVOnO+e|iXCR{9#DqEWE7D8)e1wgAo zI5bJ3HIeDKrxV8;s7XMbRIWg5#8~zn+p-|BEE|uqu_Oir-bLdv+_#Lo;yAMW#_foJS@LI&r`-t;d8zwu2Gub_5y#rgKN;Md3Ch=K1`R*03 z#Ao?Icr%|RpK?1s``OjjK5fyM*GAx@RK7(Mn?_Kn0o%#>>?JM9t&J|X$lW?VyQ7FV zUpWaM)W*_Ft;}EEviusK%@z3#W4(2Jwk?%!QFjo_+f{fp98w66x zC0nt!Ykae}ik6e<=Iq)iUr7)ISx<@2PS?u|`ND1`(y)yb^)(EFSUyX# zkCD$p_R(fSyucPS6YP*`Bm1MP1d+r{Xl=L9j*Mgxb?8Zv2h7=5Y`wE5FkK;Ya~ zT@bmx;;DBrl@A%pPic^RUQis4#e;~?!=WMf6Y%)}9r!`a z)O@zHx+y+C7j6^#Ax!rsS-S=DG=c$hdHP}-K2O#AX#($Fea18?;Zp7@L+(}#1+5z@ zsCGT!3W0;OzgEW@$^LXBTqiEJ_{`Xs%|NfTc*QR)}$lrqQpqX`{ zIX46j>@bqxB?TwDh5fhu7Ie7AGPa1^MwZcve%B`OVgjSGfTlT}mj7xMt%29INdC|u zbZr?%ZDf8oPA5w%TBw!(2bDj?m4If}ji**VkrYEJe~u^*>wRq-L>+}u*2L>tApCb$ zLG2mKn*vZK5Jxq3Ne#tVqs7OpKWHExKV=Zw%q$QfY7=0TZ*4uaUhxVbr(Aw(-tX(x zrKeV2<7xS#d<;)(a>b^h(1QxW5uw#$jYj)jSMp{H2(4bRsSb~wDg=!a76=HYu4}<4 z*2M}p)>{R@FX~hD=BWG^O@G!rG zlPuV;4D!5uG@o|V#-?qBoI}b2GYth=vE&#*3?dLGlc$UYqN7?_$<3`T@Jwq9+|t?t zzSb6K-`WDZa!pifPOdT%_jz+MT@F)q3+s@%!%*N9N5BOHqBSGnw;a7~r-<`E1fn%K zgTEhVj*e5~qb=Yd#_mb@{UEBcwU(c1E#}&QXaPGnHsq4u58_BxY(rXEi?@D1h&yaR zw6aq#`28SiGc{T?t(q9={~s!F5_`9e9mWWvT*s*mq*l^@@b3q4aHQ7qQ?148HXvHr zg*X3x5dDoH_QS|xkq$nTLP79CauXcqVmsE7a6sp^xNuPVwk{mp{R9wLcx!%3fV= zC~%52zm7n(X1EVB;B1j-5lwGpt2Vc`z%zydr#S1cArOKL+R$sIaNJD?(K4C-yP-N^ zM73MA!EPM%FA#{<^xljZoULY716zyp#1LycTaEL-1fn(VT=M&I<_etfkmmNaztodM z6L;-lRDZ-E4P`Uc7PvXTI-AaT;6BqE=#)wW>@O9($Z_oT(lH!HL0mVZ2<|%v6tXmwTcCA6ALO)Sy1O!bry8acY+0ty@InKpsvWPk3+P$>TH(7 zL5Ui71Qz;2%_*wFcV1m~({ij{8Ib!ceb>AeoHf+YmdllE`OB!a&QWX5v~o! z@2@jaL}nzGWy$znOEW%#jOYy#(J*7wfhGX+p(z2gTWldxIScAcWSr)h76)JCJjVW) z8;R06oAXVn|B|WQOsP-E)HtNtbmtExw#nP=lmE{?`9=HW`;biRLQFwaSj@k2B%>_} zqAf>rL|d*CsqrH98<{%Bl=_iOy;!8SnHEpfct@u85~+Ypsn5yOcBZ_FOg&VL@H2HT zI07mk=Cji-!w7&SJ4WB zB%{r;#;3_z+=^72J}II))Owy&Q|4cP;pWy&1M5;ZQd&pg_cd6UeXW=dTpQ+wKjXd^Or5JPLR z%v?XkI1FdV)ZHRgQuA7w`hh7mN2b1RN*yFqA2+3*DO2w;r8;HmEl9PYe1V=U__}Zp z5UX0c3DSQu1@(HHQkTnAw<+~LnR@tI<0zOdQ}>!uua~JCO{rJP)VEBjLuBf+rqmRf zy4aN3UZ&0vsgemaj1;Z7R;0>d^rcMAG3Bk1se?qSobGSR)H6*Go|dUjr0UbX>m_2k zpY=LT_cA`+cjmKyJ*Q9ibzjhQ-^pr6$mzbdB5$V z?h%p72hmp6O{UH_rN+tBznW5OM+ibpG^KtjQ!f>%oM>Cw`!e-hQ|c=+wUY_LLo)UF zHG0=?Wpicfx2DvaWa<`E>Uf#D#+2%lsV|6B-f>%5KbaabrFvv)Ia2k`2&Rk9c;Gea zjM=<1YVuj{WqM}}`J6hVhE2_ooq;8#Ms!Bi6TCA%;GJ=n0bLbamLW*#5~;j1s@M{l z`pYDp5LK*9rhaZpohnn;n^H%~)RiKYcSaSvNTxn%N==rj3q>j?PZet;Q*T2mwIq~X z#iw~yilH&%O+~g}E*j%Qs!qGSp@Mb=D~NV%G9?_sp&FxnJKlmOkHA1b<5N;k;-Ye zk{!NGG;XRXb+1evB~m%B9dq)>tSj3^8&UnsKj#r323psrr&u0%jt<&elokX9<*+;`cpS-=H?4=cXkHTW7=tZQ%LKIutAG)%Z?0>x{c6BB6KoI_aK^&Fn96II2Cj0oM~y)J6rw z2(*FO)Ey{vIx>_(x=R2zTi{OYkb8nJJOf8lJLltii;c?K)UkBC1!DH#f{UIL0P58j z59641Ba~w<@^;{m8vz-Y*eBWEZh>QsQJ}hLY zPTZk2$JuEnL5P1Nj;^ijx^RQCUfJx)TBqzpsN?8_M5P`F)E|VhMQ5PbX_4`i5rbdh z0fZ6WcpdI6$DvtM7t45x$}SwVpP7GTeIpK%;+%UnqUF&)9nSh~k-l;MLghNi}V>KX%gJe+VI6j$R#f1-MrDYyIj|2mH8&#H zEGVa?tG}b5@89Fb!W{@Oja^*cl@~!KcN{^2jl~a zBpki1(c-UOTbNJk;))m1aL|-uH7uiMrC)(&rH@goL!G-RF4&6zBw0gmXe^>_2pzol zL?JqtjsDj!I&pEa*HU!T3r)<;?XN7Ls#V|~>5?{8xMgTFU9 zC=1!<{82QrOA1C#cPyL6a4XA$f1PT1&pSC3 zxypo{uWw4BxZX-czW?vP(I18C#Z|aY3^h00Y_*vkI~O-wX&IWh*{YCkwnB*csme%~ zMk|_1Xs;RHn3LgK(mH%sxPcO}`6X5{Klr7{xZ4ctBJQ#DcT)1)7gbf0PR(z|b;0R> zimR|F?XcntL>tRa3q&LSo~3<>$qq^;CObi$uE+pBi=}u}l;3NMKplB51hPx3#>G2* z!r;T9#05%w-_f#jc)WuhsQq*O+rwQBD#G8mk!@lg^)t>;*!bQ?^#YZ7B6Yh zVe{OGdEs|ce9%I~gjl>8qEWUhH?Y3HZ?@ZC2keBIbGilL2tQM(bc~jH8(HyI&_BnWn&U#8WnTmw@}>4D#a=`tik+_-M5Ms2jm}KpSN=zo99LR2 znB!L3NF%p`Xe9AC!JFz*5PGBV>X5TW8GBXgHds#sYw6}2y5wc-)t=lP!2(wKv1cLO z45rL;DxJhdz;v;=2az6A!?*zj%cXDYjAU!wx8pWsbUNMU9>E2nO5!%n`b>EIu+1kW)%H8Xn%GwUqWnGoLhSfy3)QtexqdMr` z9?aVA#O-&uwq|4?jF6#qsI{+vc`6Gai$whhRd!V{=W38_mJ>n9l+iBs*xk4?tPRNz z#@45OOpWJ*NME#g|3Mz@Nn!SBmB2w12&GEf!0LrG{>!?ShBTV5eudY&Evg+@eGC7b zSbCrKc@%XCzZ^N&opv}imwF9?X3)i5=03vWa!*ef%JWtzzuEiBV zse!do2%aNSYTJ0;T^p$HwdQPmO|4l?wAj9PO$Pq+g+1eNp+p3MWX96u`_+w5B6;X) zC&VneelZCb+^t^m>Z`9F**DFx?T3*Q*!RQsBcO*Xn3D+RX}{(4X4 z$P)-Elj{oRx`kjW7^vW%>V2O09*A7vS@aS#nP}h2**_LLLb-0(8|DC3M}(*0(Sj#o z5F?hB(|Qfs*6!Hql($ABdNG^_=^8W)Yy?qlhns!a-~S87q`oGzrFe~&C$Xy^!IE?q z(Fq~)#<+cByz-JXT+c_LuxE3)bbl~iI^jl;9|~*3Az8#{iZZ?rpZ=JCd4hxSRb0@D607Ym3;57YtfQ5&L|;>GelwyjpvJmMGGO zE|`hE=jM7sYIBpHN*p&E1guJtH{H zg#ofuxlBQPblhs>_T{SGkc)1>-pRpkK#1v&SZf81#L2vwfm}E40&@ALMEvWuY8SC? z%MGn4Vv&1Iue&)(;;~d*(N(8n#6rbJ6BW2P{YIL(2;UX z_u`~K6yasSb>JNQ;TRtI|A66h1YkSx0sj2awAxL8*WwSa`fkKfr*WC2u>`wu`9Y#- zT&leAEG4%u&FM_HFVl-y15O->l3eaVDuIY~xFF7D;c_>I zU9rUW!!sC9CY}j+bm>ms2QrweFUrB7zp+S|lE4BwnOFcf(p0_LNdY90Wz90Y5k<$-wnJlCmcqT<>Cb7>pU?rAs$*cx%)%Rj0a=e5` z>$E^*j=wtx+A9z_y}ToUdi!voZv3Yp&unig1>@N1ui>L=M zO?JmrVzrl7BA66F4Fq97GlC?F3?5;?L3b!+BG_pIR+pHV=hFz9jCa})^cv!ws+DoF zA*h<5DFo6)^FR?6%8K-M5XUV`1Rq2>UJy=%Stsr^0yIA2;SE5#Qs4@D>2_mYKf2oP zc60``ZUu^>t7&AXHGyob*EiPEWlIPdnVos0>Il&+Q00V%2)QKUe@xI1>Z{%*M86ww zszmD}j3|UiM6f+MqQreExwu;*pQRFb8c_{FSK7xa_2?coND;p9&nQM$R)m~u=QWHYo36r0p0!+2!i-C#TNGu7(RasnDsBY6CKYKXXlST>})CFc?Zq@CyD z_f|cj?8J>mxaR^l8d>hS_~vvpU)*!iomMwcP&6kq&QMzb3S~N>eo?SiK1M)$Pu4CU z?xyQB%{4wGI^|IUrcU!QF4-$E_7m7(-p=am&p`u+;yC1)m%TGk<-XDLS@wRiu^^@* zhGcf#u!8;mHi5a!QFhZ|c*)@g`|SO-u29~7cGp9N4j9aBm_rI-MR)Oe$xF2hWbcQr z?y6mRB%6^c1^{L4*`h}P0;x|#to#kz&9rXK1X?{X@3&m_96qn zHZL^CNms=#TYoUBfHo1LP3l)^8v^SR=!(aPCwCWac?AX%lM?9ejQ0d_5Z^L>Qh z@5ovFLnx~aF3E>&Xw}d`j&|d4Lf5!rhSNq%PL(K5w(OreQM~Ly!&@R-h&Mq|+A7j2 zL{q!_MV18D6_$iWSLutHiw!dXcC%E&o0t9gcNNVlE1Ho2B5FW!%S|;n7oVD*X}j9T zlE!8gcvECEt^#jZ5xqB2Mbs24^}Ow9O2FsbyO4A5@f62O<=(>xF;6F+8ZWpvt+%I& z!)ADV+RjV^wbQ+9#R`?;P<(Z=2G&KCO~EM*M|Snt5XyA*si7!;?@yrSdzGmWT==~q zv0Cpfgvdr+o6>*|!Y(Z)S7K>FI}!=oJP}v=_zN&;al(+0kwj8LW-^$OTo^>;e8Gb{ z6J*JQXmuFngjX@~ADAHWne)>^buLYJMhCG(G%Gq2ap;|F7mTpPT_>l+to-k}I9ZH+ z{+p2sG`u&C*9Whg-TkU@j@(9XGhOT->9CN{9ga?AXUu{*iI9x-2D|Ix1)0N4Bls^s z!sRS+-xJ+j)L`Z4od}M0b5Vn2>dM3vZXYPiMjJ!(+@J@2`kq?s3v02N@SsrP!-)B$PHZ>preUkK78`CV z_8y9bFlTVz;x}IusqhA|&t6jT)>#3}v2yD(2U~h;7hFj6nkfLKzPZ_4!<(1gjyEL} zn>w}<&UL4OrkHoCY)`+(B-t%VL#;V8lhI>bxFOi%oYtw(h6>mTH%{xsa+?}+-xJ2h zto%nLY80jfE}NP6m{UWC8ydBl2bMM2yRA0x4b35%Z$@_YXDWlKm1GcM#RMWz$u#*N zA8JV`%A*_7T%duF@|vvJi3Gcfsoj+ro#|yA&`8exV)dRXDy_;_qHag6b^Gv2<6xKv zB}!x@=L%CJW)8C?JV+&Ry#=O05gC#-&2E?meTsVKuM%f%M4L`o^ROKfHLTZ{KH zRd(BQ>Rz`-#inKDcj7fNnq}n!Rt)cs(aGUvw*v#Q|Dp3#9)+GF{%?}sClPe1FwqiV z9CA(9sZUdN`oUVK^9*&uwPT(WXw_=wN5U$FleGKz}t~acsWxH~NGAGfKwHEU& z{C#|AR8q(}44PT^=XkEz1?Sd7x4ROR!=k2OgQQmlYT|&RXIa>eIV2Y7c@3oJ(Xs|T zkCruPiVeQc_`*i2o>*Bnz+SA5MmJmWy#D58&)`iA@Lz#UBN4TB?P$I0lcF;d*&D`^ zME60j+0uOy@U3nS#$+L(9o^5T#?X{p-3|qsp!;GgzbHq-5u7}Vciv z8dRtXSKuXAJE3xn2Aa1(V{W@yU(5HniJqZe2i$!S(bydCkT z1Z8(yDZ3h<#5mFx=z1&1Pb3uD0$neKAGI5k$w+qgb09zQYxDez5On~}6gfH1A?R5x;EHr5RrH)bC49vWj}Dz`#Z zRx!I+FT$KjOD1m6&1WfZfu>l(M-6Chc{z3*?J+DbobK*z$L+@ z>2>q6z%#}U_S2hK-0y;+mKMS1Q`K79=s*Rcl13fqKURDr(8~&9<~#Xyd~wqp`K;sN zV{+zYS;s{et6=ud(3nJSw<2Rzo{O8VV6nQ9 z`wtDvYszl5wxTJ!Rp~L%Se2^`cB?$A-D=A{0D)ApTO}+Izop$O$J(gOOc?Ip&P)l- zb3UPLnUK$ZX*d?Gn3DoyI|h1vSr%@YIbK;c-jj6{B#f31#^uCpGxDTWt?`1?>A5M> zT%PQ3!n%C61IIbY)pT?IM3%Y-8*)=z0IOuzN2lZ70%*^Lj}VEtJ$BFiD)VcwcG#fH zEOh?+Na7Cgk2w!Rfm<|$(|`~54j~eewR-eXkjG;0nC!OQF{$v4Z^AHbBeNWg7|1S$ z#=oppo(n3PhDO~847yCxIQzkzIG+aH6NiqG-Ifo;UX-vH39vPgmi5dBW;4S-p@5;Q zmC1=Qi{kaM)geQm3HxopP6WHLzdCp91jr*Xqo`M34c zug2{Rk`9+6uUg$CR`@vS<)3ixn7dFIdtFWz?uSDjb3f0R)gkKtgk8x7lk1V1>nh}; zkIHP9_&z{<4@6V^eBGn7MaH$|32T+Uh8kd^Lnl-T93v69p8&sDThE6zEs8di=dEA) zIA*=0-A5l457nXo?u=0Lrm^izAmZfIXhXpKV~ zV)UeDOLVZ7kb0$;?R!+MjLTY?HmD4ybYPup8_b$;$#2UJ-SA_ywk^B%<;JMk_pl+# z-y3wI5Ji-PZ4neEC$skO<4mEl8FJ4upIsOPFEHmg@e<{5fr-!n$oN@Z%@V8?{1qC% ziF{XGs*b&t){Y*APej=Z`!+|}Zw|#$_Ws+OEAd852``({Y>D~S60$E6SpgOheLCdg zO-%F4tPQ_qIBge$LeW7W5iGy#%%3n$C%U9dpt#pnS(mnFSY88;n*^$0B(4j=19eKB zQt#Uc7svktfl8|;!@;0G99QWq2KW1PD#&PKLKj~}#M?8(hM^lPA$#)|>TGO0LXWH) z5yS>(0|L*J5~+BB=U-q|hV8;cHgb{PM6Px}_psW^u(iwXg+!u~gHI|y@_M{b%f=E1 zz$Z^9unTsZW{m&T3L+CA$c8Crb3>iVtx5Cz?jaTRC)RQu2sK7aLht7Ke$_$CXpueX zW|QyLo5>AI|Iu(&S#gbnSZ*4{_mLNa(7GoY%*k$cF@UH9@v?I@kn5}Wyf{VC1Cf7Ae)TU$W*);SnfCt?IaM@0mXV^$zHKEx+8u{>Iu&pmLAhRucYH3_e3dj_-J_o!fwSixNWcS~K)qPl35 z*b32|1UznoUB>`)rWYt!saCNQR)}913?D9bKLDuU+-w28frx8*>O}0RfqK>o>Op`K z*r8f%VVS^BJl!>Hj2nAZg>2`;nMghrI4p>1Q8ta1t9sF1-QpCgq^GUov2NOeb=T1Zfv#2;BrhXcp+*o%^6LG|4cm7v zwmoF*yZ_-$5M_md-T$P(FFs2zd? zaaK^}5T;EX`dOOM6p=tmVBlMHE7p`Qu%~y%KuLfLGneY_f*H6r8KGs+MNW1tW!uD7 zy(qsnYC04(?J~ogmkrWt^t_dDk34CqQ5I@MoihAPojA)--e4{|2>YknTrbSa ze|QsFu_v&X+g9G(uP%yj8L>-NmPIuc>|z+9*~Bh-R8@WRSq7eHFjI#RDnHA<*& zu>a7TV2V?Y4GE~CJ%Ct%>vMcFi6Oq9nuVsCsvR@hphq1mu{7dB8 zAA-+8_+v9TP5TldslI|d8OEWiR?Eo_L)9<<|Nd*WD+9*LkX|}G*FX_U*aS^O!0u^; zP3(&=4o?9V<$D47;ERFk5O=K9Fwl`+jl`7kE>p&9wTyo2KPni>#mSz$chP#yZn8 zQ>HmQk5uKesr%H9=w!{EsR8P2{nS4e&>0$_Bx~+tSF26zZvFI?_Q`Ag^nvy%&HCvT z?bBfEr~9-|msmf|)IRyFpRU$E4Yz)}RQq(P^;2){(*WzIw%Vujt)J?ORBBvo{j^Q{ zly3d>w)SbL_0v<@ryrhlw=nUI@7s`CYw0wPR^R<)tI%)ZO+veN%g`mv=*yaS@zP9<+$b4ZfUq9P?56FB^ zX!*`D<|D%1R-h49WdV~>N?nNdz01jd z^6Lw=n|Tf2yewYR$u=7oISJ=sLtZEQOw*aR*yJsxykb$GVk-7`t=Kl3Vi%h7&eZaL zY|KkUo9#EOO0s?p$gZ#7L$t!%jfHWBoRmDFq_)pj6bdnw>Z?~^m7%zsm6xf-A2b%%v)@bEMU7Gc2XGg{TF%Aa9(Wh1-KOr< zM7b+OS=KpDS10uPo^D_046Q*Oj2R&F5QRu0IkZbxl3ncE3aX%+{nMc%S-=rngbykNZBv^A%HlG*ZqHH$*NzxCygnr7_!2S(HqPdkuQW2zZkRWkmYGgh z`0)(-rPwhZPZZCOhl(AqHxxTA|FzhWkLNl(|G*Q*^QXhbj-(?v+Z8Ex1n^M3^6^}U zX9=D!@mzMS*f9=|AJ1!ee#CPEkLP%?<8wR}jm3@!@Ff3M?8wGbh-V3&4R}&d6g%F> zlO8R0oZ~2Qti%(>^Ov|1M+KhF@g)u)p1FA5$Fm#HuXwx(C5}`)&*0gNXPUFbF$Yh# z(@GqR@T|hK70*6AFSaRhq_-_`jK))orxDLxt`f&LcpC6L(yqku9-b|DlG>Lz((q*A zS&wH2o`Mb~j<4|q+$D~O@%#(V-KUp0uI~ugc)q|h+Ee1V2G7%Y8u65QOB|JW9>wz# zo@021cPepI;W@u^iQ_UnGw`gzvk^~+E+vjaJO}U$N-S}Vz;gnR=M2Ebb2FZ|@x-CO zcl8Ec@IUqaay*^7l{i9pHsaZX=ZvHh$2dH%;rSfTk9b_&ffLV7cwWG>3D0+U;?68_ zB;y&1=P!6F@Vt&^1D^eOqIk~iQR285Pd=WT@!X5&IXwS|X9u2N@SL7p;^>bj6VJ_f z{()y79#78_#}#;H;CT|yT0B4C>3mj+;}Sfjc$VT>jpq=a9=%E&L-35pb0?lKo*(h_ zO#yy9*Wn4_`2tV!*(Hvv@r3Zaj^{T#xuDIhc;?|z&-~#${&*3r1Ob1@>8Sfb$rtmq`u|F(EUZ$FeJOVKYU9k8KQ=6T57&M1f@-_V1kRqdDN# z<>dU_j{8<&i>07Z*p&3Tt|lmCQ{pGOcw7KfmGny#)x2=WI<4g@^m5&c$s-G;RDNVb zuY(hDK9bGp4ZSkQ8(8mF=D;DJoMy?o1q&JWU@j2t38s@>i%uHwxLnN`mrr)wLR8v_ zV$)8&u>uRxwkhLv>*3!V1D{Sc{BiI*#K6aSiBpEJ4qUwpR_xG+6sM1VCcwq!-Kj4{ zZZ;inaw$6Q(3c{$>-qnDz7#5mo3g8@kj+a$=g*Seinvd)XJkEZw`unL%os0OQ02jF zoFN?pd(da7@ffeN9u`sTIAmg&vvDc$83JIHDQ2=3L;I zgE>qGctL#|7qJ_tggmXH&VM+)LWsgSM#NHKX|pji;jK8+75=$R;QIs{9+E;Za-6|* z6#(W}@zm-m(rGYZ^D{il$jwv_aR8%{lDs;`orl63=+O_F zj{9b_4WGoTDB~;Sio-f+pl@!(Q+W%#b`TRt<#;Z(;;$H@lK;8cN3$Z)8a)>E1h^?5Z_FBDNuW^2oDB}<9Dhf`Cur+6*%K&wz z%S87^^0go9njsEz!zT{w`BbU^O{qrW&HUgDI_+?-H(oT?voHjtp(`@NQ$6 z0|@ezklh#>)fTXPH8Z=F-W(5}HMrh9^lmNQk6f+n4n*y!B^i7~Tf3ws@nBVkr$axw2QJpWcM40T(!}(q`3WA~|GqTGC12 zBrnvm!AipL)5|W1JsgpMzQvcAP8CrZAath%I!qXBiuE6t_0{mcZlY(Z`q>mNBM_D1G4}>nz&7cePrd)8o8sSA0 zHJs$(IspdU0$O2qHZ|bDuORr$bz!hEuL}m5a&A2PRQHxCPo&^u4Yz57uRNIs`Zq`@ zo;qc%Q&aU+`4xe=&HV2S;(vp{|I9NjMz1RQP$#**>Y$vGJBTwVd$Hg=Lowqb&C7*h z2W?88sNbaHvniO+WWjfuFUVb^6YMK{ck@NhBI!6*oXDY4HsXY2H1KCC*4d7i?Vz{v zMB+MbZoB0|wCK0gTlJiMqu^0z8WILX%lor-NKnQNQnryO7e<)S1^Y01ssM!WL2f7&TvkW?@TS9%wQWkv;$g^aw5*3Vpvus) zswu`F4lzPupJSK+bgH`1dT6Vd%4mnSxM9Jd19{m%T3lu&(NZ%jk?q6c5}id04?BmO zUxlia!d&_qG^;N=HZ2l8oYOz937Z7sb@Z|xs3R0h(S=GnLdgG)e$4b@)QXeIv=WF&02`|1;G<;^15fEn@r<$& zZm<(3L+B2EdNRYEur@UKQQ^?P6|*AsGsJVHh=iCH+tAktc{%qFn-4?ODpBadX6M85 znE5~{ruh)4bF2JX*@6%jtaKHQ))c`BEi`y5n~ay#`tXSa#IK)85dk2#M!?&wqU#Im zK_yLeC2dgILTVk`I0Mo%XH@y@vdQSIEvyK3-r*)m8-eo~f&{|{X%J{X*;dM( ztlL{?@0O6W9^9R^rIn+2i)Ge;b#ax1CfNX4*2~Bek(PYt{WiB z<&TFQgq@g#c5h}k(U&>Y84c7KvFH7}QZ^2N?OB}D z+R*$w!UmdemWC!#wN5ZK@g+D$%s9FZ`Q=EJ%f1|{#qf?m*C`R@!thVsSUz4u?v-g( z$}WTt{z{(FIqJ#X3Bj}{=o+XZ`$lxAQp5IV@ezq|L^-}gJVdovh4^}7v@WfHVq}ob zn-maFW_3gKl=W_!ghpfSS!&aut8f{bTiopodneJ5xr`nwiN3d1l1_t96XB18Kh+9f zH>M`C3;BAdhWP7)H>jW=-s2#J6A|lcd*k(8@tRm#*by=YKh^y>_ZWqAu>^)TnDySS zdIBB1TXG!{fZ+4jf&GoN ze-PWBKUG=#^N%&|-xmY__Zat8Mx!ff7Z7|Y7xVG1j~5qn=c!B zlk>M^9-#tR`nuy*Z84dOdO2$%g|l*4WdF2_VE1O?n5nwm_fU-!eMn2x@Jr$>fO zsi$CV4UV$w4re#;U~TmjtgW7XlnqV|TS>Z|31j;ERC_OJYF;NV*d~x&@1$UD4I)@u zeOX(!JGanL`wULJcFMtzhY6a`4q9&`G|igG+vk-#aAe<(u=Akikp~+mf_~P zMj~BpqP%6Yo|Yx78$>$v4!2p2aEb_xs?Dl^(8Fd0DS{$2QbfXhCn9|j_OYDc`DV(Z!jQ4=z)HT34u6Iby#qB+ zT*@{fM1~J^34fgs*cX?uHgNaiB!|BpXvc|0QNk0}Dp`wpKv8>Q_2-y1VySB_Q49C5 zxcKgli(P-yc#3HWBGiNrbXK;K3_lv3h68#daizdo(WgC{=u^dmUJd(d{9OZcT@JsO zj_=decjAbp(uK+cR9SbujW|_3Jvll(iKSl+R^3J7=nI=|L)qC)qM<5gH`L-P1UTut z%FY9G?`D_z%5V}U_joWh#_|b%_=nDi*T$92$8vp$h+Gdj9rs6}tu!+C#i8fIKXf69 z-8m|hkq~l@3_0%&O>gU~pP6K}bgK8*1ip)4geyCa>;{vM^!T{XR;4{uV)T{@G7!dH zRU>elwDX>P=6MDSfZ#Yo*#y)|XFp|AP{+3LREbVc#7XgdHgh5p42tXH=x!l0$dy1_ zUjlWoC(|0k`BOdns}o)-@8ooZASE}O?d0(;|HV)yDF?^%T*2=0_J|RPT}e{8=be!q zNqWqKZP2suHQ)}7gi$$E?uK1?ZJ;VqiHP$Tl+jm%BN+R=>VkUp)lk~ELs%w_-FZLX z_Ok38ZYSZWSra_JDIu1jPx%jOO$?pansyI~t>eT-qYuX!D{ljRmAUnjJI`>jp4Wnk zeiv!i`i@9F+HGT8k0aPbk$Tm*PAUY5p-lHG8SZVYUvxg`;H<#70BxYSE&KuoaHS1h z4)!f|PmXg9O-iL0F)tAsfQITAx<_o7_2z&_*8mld;$BUMCmbpV#q|NA?)fZjERI2p zkSwu|00>b8f-JTi3RD1eYy}ktAKXlr53uAX5w?skPWf!*cu4V=IYifz&0XuFoki3| z=mC8lI|P*pnUQV2Z8q$&9@ve#1|o5u%D1SMwE^!Bqz;AM>V*o&=@ScXb&3+T`zDMk@5kp%@xn<{fZ7lPS%4| zLL=c7Ew@H^P9ZPl{t>J=us+e}$7Je*koiI+eH~5LBnA`vA^mSWxX&)K5v%&Qlg)zh z7ng@&FP`oZq+K|4tk^ElH%=aS8^nz@TFP=An=Ch}iE=`(qZ_Gce#h=BpH1axenUA? zCmd$?jY@7jYHHoij!_H0UZoe;Z4R=wY5>pJR<598HmyW$FAx9RKJa~88`8`Yg@WnD z>hwWHZ50eIzZvc6jqI#O{N*JM#^ML}%5BKB567u@D>bt`R1`DM(5o%+vO8oe)-B;ukdB@4|gg1EMor$`u%(kF(pa0Ib};it};fJko(} zdBfO01Z*O^c`h_MjsJK!YH`%`IgvY)R!5*G#WR3gWuSHAI+;cAD@fbJYvEaVALydm zBVqp>2WNx<37b$a9A`z)_!ys0ZiD{W$X+=Le2|jocx|}A zwS)sxf?EyER)6?>r2h`vKA6)8Z|IJg5%a^pWG6QU)6=57S^Ne75{wt4In;-cJ$o(0 zZw%*5bkb_J>L&CMDs=5?gb8foj!@mNp&9S3m~HUMYIPd8=N7gbxaXGtUJyA@6GaTj zKor_dgeVxxM0<+TX2R)4kt9}U&`Ofomxi|#wiR#EMDl-Vs;M7UsQ~?{x%0w+fORnr zk~d8sVO=tMvn+jGA1{UlS>A48<9}031*HFtvWeVp*xi#=-AJwy!J2~1+$@TTOX!2f4k1R?qJBK_hpr$Hw&b_yFwu%O;7#~*qPL?CwoSXf{t zAvsl8SSq03mtCw(O)*u_>B*Lt9B8$BgCJ07JiaN0OW=AcV^h*TrfP))`*_1}?Hk{> z$QgkOBEo7LAqJq@&;qPV({%)olqTqB>TrR|LsEr$=b|zRL#-YI$d{=)P6>UfAC;vr z>e#_CXb&i!wkLfGwp!>cl~S0Zti^fmuNy(~9JeQXdn&)l5wro3XukiOa^Y5xu=wEH ziHjjG^I+xTmgN4V$cWwQv2Id+3vqGhlej%HY1+-D87@Q+-HAWOt0SX>pJZ1ctQKMu z_z-jM+CLihPv>yh=;_+F(qbfc&&95Q7)GuYyrZx#Wr`h4-xP@diNyA^8@0vypTynx z&bdZz(3+_741M{7sWKQf$5i4$8>I1(7MgJg+OUNcy^0D;<0I~5b7BRpm+O>mg(1js zFBfWpD#%HOrOrRq$7KM-6~yDm9da~1-r?7Q#zy7;>=ku5X{Qk&D3by%EjrUNfEy6_ z?~5@Q*jVqULd_TvkI@S?BSCo0(mttmh|eRqG{m`oAK#bLVZzI1EP(@io9a>=(#Q$> zO>F&!sP&6z_2X9)%A!C4YaW-kW2$icWmyGmtr}*TY!@7RHj+@3-H^7Svg$u@HgzCC zVxT%1m+axf6Ob%xBktV$7?i_Sw^Eb3B@j*sAK-U%Y{W8IxuNU|7^f8vaZ~HXEER+r zA8B(G@&oR{p*>bFMx%eTLig`Iic>5;QB}5J@Gd(({TV0AA6+jQE~>+cMpYytcUR_ zu+AH})fMOeUdiDS6kQ>7nUa$ZjJ~OfU>_DeNw5#@pepf{?Sw44ll1|jOy877|5{A7 zv?_|ljGeU&Wi#`!;d_`i%*T0QHTR8E7qf9maT2=$ZHDncdX#yX18B}T9NfbhaIjTXUsKIQiK~{mRK_sRI zulz&S03(Xm08nzgs6lV72Fvvt@TQ}Qs6j#v)kLpGim@7v{>5TNeH3F5V?)|TdH)N0 zD2x)g9QJTdN<1RWZK&-W$`Nj{>y=Ucl??QGJ@&}cswy|&q&QllF-EdbKsLY~4?n+% zn#UeGSW=j>#`yjdk(ujm?2O`#Y2o1hcH?!o&VHX>fk3ZKI6nuZ$irp1Z$H z#1e;sKw0%ee8tysp10|uA>m&QnyJf`Ks<{OYmPqZ{yduE^eh}h!ynf&PjwyH(_@d& zru%#un$sVy83^)?V@4_587}0^h?XsKu`_eYzbD06mSp@C7{16+)<(H|ksA&KQPM}? zw{Qh4dbHw`B+zx5y4P}GIVwX2R|v?4!xJ#*5m-)JuMxCzWuQNFmGPvhJd-1k+vXYo zu?5lqmjKF;5%J0INZZ5fdL=jvR%*}Nqf(Tx+MK}fd%#uhDH{le0)u^cpEIE*bZ1-N z(Pj+v-$!`+Krg2+KQ!9OCPP0Atn1Gw<-@4J639j96DHlx)h>w%nElNQ#x797y-cAiL5UsMvRr!@ zGVCYBm(SamgMZcUJy~XBjG0c@AivRiU~taHVV|x;jpA)Od@DpZ>JFsjKNr)7y$GN- zt<*kLX_w4?CIun~SHAFFm>lfF{5VW^T6-~8dXWAvkl(rd01@5G@1t%|K)?vL(x#J> zkk#<{_;aWRnRN`SGi@_;z@jB?`b87}Om*o1TdYVK!X{8cx6o8)<>A#yeBIrN^%nk3 zQ|jp|_Hf!^a9f?74*w(j=W zCJ?sxrmzjR!R8g%g3V%E@vKhCv??NGdTuiMT`sz@{eBk}kVa40>nMl$k)GSLxpE_8 z%TX!ShLv}jBvFYox=NaIx!r_VNx5^} z%}xkDACgS`BLXKA;ve-*@sF!HT+EDmUAm9qAAK$-zZ8Vct0dvZlXWmOHc=Ux7KIQV z^w)X`P%lzxf z@ni@ zX4WeOHaHO@SKu53hgU+Ek@j)gp3v|GA?K`w^>#`RN$JC=iHtVeRlaK??Y$~aScX|9 zZX6Yj^zHIjTNo)HFT!4mBN?<+0hn!I23Ka&6)o0Vlg=l=w9p%t8o24GH_9Wz$MNA< zRyrcUB1F-Mawlz!V~Mm1q~AUXIJ9y?h9~zNaRH_VCW*bp!HBgA2CoTKQ;{{w6 znvfs%A@s6m;bUm7GAAkFIE+5csdkEUkur}=1X!;?R*;@s11ws=^d}_IHERG|#$fJn zDRUc&*hTZ9+48y!Wka-j!JGIzsu%Q`F#iL~F=1Z7)mf1%=LEr`UR?efBu@g7i!?jZjWM;ZKI~Nq6P? zNlm1X;25X&gLE-LlY>;*EO|ag4>dKPU4ytZ+Canob(f%Z1-ShvnJdA#^{BHaYiD3x zGNd0jZ7+bSbtj7hM4v5~`WR2cF&rTFG}w&@H*X1zCtc#9!8ErXLJ#T<5g@XL%p5Ru z!7oc-KwD_a!&7J&w{0kEJ-M3%t_(4DRa~aAyX-MJcEMR1V#hAWwiZ*BV24A_{Irkl zW{Ad4z-e_c&V*>FiU{naUPolZPQ-qiwx0>TmpCyxi~PWBh1WfgQX_;|rgl|sBCWKt zn^{vOpHoXRZP^OtCW(?e31^cfZ?Y?yEJ}XTY{~OuOHwhVgWyy+DsUXC1lF@qd0(2y z4V8y!JVnA^$A`xCC4suVTt09)@{V9Z9Tu!h#Tv=%*2s4s(Yu%#*T{O`+&Wq#3Bl&o zeKDZ^13wHH&uT(Bb#!YN7W3>zXyRPvEQo{#KcK+5oK65>KzF2JhJzv)&5^M`2&{V1EivNCXfHThWBXYt=teAfi`CLs&5noV7^qVU_9L`AmMepNPN#$O_WIwY;pt~+&=6D! z%d`J;zFuCW6zoihgEoO>8B`vQ8!jLdK-bm9g3m$a0;#W{9y^<=$2hef80R}}>H!bI z&qY1pGsu)ds07(D8r~=Usq*8{NJPM|2AQ4H6T+wtktG}BDdemUW`E*~lx5wxR0s;N z5ymbi+a8jAP3kEGA+=M$f@k%Ik)aw96+ZF5XJU_Hz9p$!Wc)61&K&FE3}8FoZsu5o zuxIiC2+d3^WS9O5<_PV3D2a`B%cB| zHndI5py|*Kl&Vv@xM7l#Dgx?X<&K zL$FiFkDO`PJh`8VzPzLvTnCq`Eo_x`L4e^oM5_=e{lkaO+4Vt>0IZ6*azKNv;J zg$kxG`|v__)>q6N1(Od)i3PKS^)fZc$a)Q!>-vsDNQ5TLnC zGFtWT7)m_ZwrzJ%UAU-=Z8>t7#Y76wi6YFUdc$0rqRyp+-88Z=VGUEqFojbLPxBXU-5=0DB7M@W;S&-C1M&2W0!LO`NbA z)oDs~7V!JbuF%lGC|7PMwip?5J?H}h)YKg)%eaQPs2GHNkye<#*wFHNt75Fu|Ci@f zLE0F-PF*julAoVwxg6%}n&$1WZPlhM-%_^2W+R5+@{@JcBFt4-FNH1ml$dTAk9E{< zdsvo;={=o2hPkbH*TKq^wj}S~R3u?LBHq0l5UYyyGLRU{av zhrV7`^(q{^ig#a$Zr7_lI;oiBZK}omKHob%$0|IM_{U6&135U1QSF}yj?y&R3Pvd-#C>sS{#x^l3&YF*szmDfdeB}LXXoY!@8 zjJkSsR#%O$1L}@ASnF^|S52KsSKr?r-ITvtIzijrTJbcx$SL8_r|*@7{sq!(XrQj4 z$mN^vmBec=dOi4*`f91zm_UA2jqJRhVidjR>aRHAZ)CsIGPrHdL^7DKod<^uwez7W zrW1vVH;cLl6Sp5)MiZC6d&d(ByF{XJ5J%zH+oIceG#PEg`WK=cp;^1EDnx9wmfo(z z$U*+iAG9`dkWX*aUTx0gSRkjVATJ&!K<4k>;RJHmNRVwD#rQ-Uq7j}z~&qf3*=U^KgYl@s37xqZ#!a3&5tca?N(FiH^#aTM-FuEe?j8wp3kUhS7$C=80pu6G(I79=VdNkm z&_@CX*%k)!jj=#JsDk{5p#o(7?ma>vCr5&Oj)S~>Yc!Upbn6_;-&90{{H6{g2idB> za*!839>Vf1u|VE}5lRDt{X~Gw-@V%rTWW~}`6LIq_D|6uZ|d4P$k{PKHtR5Qkmu@y zmxKJuh7icN#{zk~ishSCkomiJCt=wd3GxvRa`zY@H+Jb9WW^JWJQF?#&`h^@#*(JqK#l3(=UGbp@c>AC3m<Oap%19c#wb4)Fc0aRWXQ1{0I%BTYM>uUt2_`BCkK&32rpCnp>Z&lH zejN*__f()9Dp360dy0VS7Xg(0oP!OE0a4NwAlgh&?$YS=1KBfjjzo@_T zEM{JXL;NOOUywVMgg4=n3nn=Hez>auXE6s4L_Wd-2k2^lHXO<^ObAwTK%EL!{T9 zdBXiR$y2C>g9Xe0H`K!a>0<#cbm%W=;S1|JZ{e+^3!Ri2e{3qXkeUj$?GbJ3OQWK9 zjAouUL^iV}qM2j}oF#-Q(QRDuklIFQZ*Wj8qKz$~HlhO@aB8!006KugtZL-w+MEd18EBH1y9s9Swb%#BtsM`Z1x=MQG0vXczLksPT2_!5;&E zY83pXH%H^XDjNE;o5G<_;S=M{;7mzADNhg+gB05EcO94c0iPFeqXf$cu6dPv(NOQ; zq%2p3TbwQ=+Z@b`1Kj?w&HZ+4X}xN{I9wC{aeY(^?a1L8B(}W%qm=?ZWR|Dtf1#=m z*Z+2s^EoYNnEp2}QvcgY&c(5EM(Te%$vGlACxNO9^r8Q~iqr&3UK&Xuq^D$P2J8&V zkr>urryoGmNjbpC2uAbtixbg#L!ne)lr?6)t)1jkRdMO;0S<%uI+{7@b!L0b7|>W~ zDVN#ctOR!I??5IFQwK70l03D^nu6h|s$gg#+4N!1Pv~EvBhJ_LW#~;!e-)uS=|NzT zegPIo&@Z&;`h^yus{?^`2S`iWyho_2>*xq*tE!=Hfj7e#8fut92o1HWGP#A7cEiC1 zWd+XYa1Ax=NQtf#wuft|(XI{}>eMI=bp~mup$}9w)U!hNtmneVYPg>IrWNW~)%4T{ zV(Y0}bv-rd2BY-U+!`PiS~SJjOVv{gy(He(?AB(Bs-f-xfu^Bug|8n? zLrvPkH^Ma32XqZJ6r-Ak`T%LDPr_c0>nCHX3`X+0$(Xl;ZVdN%bs-~oQ|8>*`e~uR z`@!}*4K6hDibiHn^a%uUnc8$41~IJqX%NG_*amY449;fV%%NMzZino^#?$)3O?P4% zb4{gcY5WE{nC`R+(;bX56KP+e0;>^rh{x;B#F24LSF)@TraP7iIF>{vHFv1viJP9q zR9u}|uGR-@gXWM`jcR(<34sl>hr&@Hxafg>xG+ZQgkn9!Yl)!`g{~gf;6?1te?p2P zRQ@s5hPP>8>MGH2vvPB9B6ptpL4w-c!oIU10_5HjTrxDcB#muLR^L6f!yRk{28!HG z$xroO_*)jp5iC`}7vQY?1E*23O6Jm;x5*_^Ue>DfGJ$Hswq0j zdJBq9X#Y^*k5Y7M^F5-zobRuXD>@0sP;?gRiq0$82oOe98-bV@eS1l0PQ<`y^rXOi zfWH`VT7vv$;UqJ;&6>uRzk^}jO`ec~rPRci(pZjP=Td#q2H41#dc}O#cAAgu0Xnbm zi(kd84~F8SDO(I}>l>7VsFFr?HB&PiTi=5wlbCo9q_H*OuS40g@Ymt&XW_5uYzAJV zu^E$p3tW+Z>(Ai>eTl)pwO%pjnfs|_9dd^AZ=Ldte~OheoPX;y=Y7#RJMeFrRv^_K z00S3p#-vP23$tMYrO@o$VZ%g5=XYS(j2Vvb7Zo`E2lG_oH5w~u1 z;r&QHu!rpVRQn~Exi>4RaXM`Z8J*iL1G6PTFJjiaMyof(tq@Db&FS=dxy?CQ_ACjT zwawus5wPr`7G~@GANZ4)_4W9k`U=~*i6R*hHeAN_p$xjUvKTQRz>}c-qzFO&q|HGCpcb*4=!< zV>XVH!O$nBtCD4Eabu{`S*pX`fIOdHbr)@Qk*C!zy!u#nPXMUgX#;sL6aHe9VjDKj z^a-9Du6F(tADpx1K&{<^NBEUn*!tXt)2NwpQr2s(Q5~-?IUy%O1CB49`)xr10>p6N zLz{mgx*s38`ROz<#f@wuBX)=_nq%4|B&jFXJ-kXO$A@(GNvHD~A( z{D=*3(yign+S%x&p?}nmsf$D64wGX37EP1t?LnMX2*~3{!hLWHeo`|oVAJb;=fO0b z5|MLFykUxQzw9!k$afi1L7uu!L@xMhZKZjBn)bCZPN06d7_FugsAN7%&e~(7Ii#h5 zScAA%N>+d!#e>sDXB4rGV4};*f^c-(LeRRBK>e}_P#{km$RW3QzozoI_*2I;6-!c! z0h!kaWa zRNuG*co*&saN1=Dm7~5{**hlPcLMIlIf%FaOSf!2SONs7UVg}5KsCQjEp)UOBOcPP z4mV?sr%X|dp~xC`trnzf5HUwxIhPp9eU*BsPdFE-2eu;EE{ zmVw;ZTM1*pj4QVxi);dYbF*&@jrNdI=#oJml|ii=MfT^@kr4q8%_M?SRQk zi`0x^4nPQCGV(*ltH`5M%#3wc&e*Thj8&axw7i~|4E~%fbz}6oBP<`aQ=G=E&P%qu z-r#AAx2$~)s0yYjj%RVdufg3z$rBDB4#)+m;3vo>PJmF4!4`GZTkFq&1sa6tHX4LY zr7*1O%S%wE7~ur>fSjG`U~l(_m)0o|ZA>vbSS`KeX2rWqS#d67MlBBc>osQMQY1R+ zh4V~E1sKDU#e=M9U++x_1TW^{4gksEN`Nylx{U>>#{&A(7=vpvL78v#OEf6LxEig5 zUQ}$JNqGQA)*S5g#f!nF*`g*yWz+(GiYfql)kT@#I2Z2ozWE+?H0TD=bnzXH2Mo=d z`rQqyOSqoJdFmlX{b-zxy%>5)VNc-&0+&gkiReW60EoO&kczjHEGR=5pb zh=_c-fRC>zgI{DkDQ+C}oDHA=(5;oY^WqMiIiyR19?t6R>f4cPdLJLrL7p=Ym$&tX z*IMdPr!*A~Ld)^sHvkH>OlP-#3-^-fkUSGF8%8e`6RD^j~-xs`o^O^WtrW1rwn!RiC9!gS$)>i5`l_VS7E_}hzU z0sIH4QzrngN*&!azcL^ABY#f(*ep>f>>;?H<_-ToACz%VNC(fQKjgl{7}P4C>cQDP zxLUIs#X$0h4>gVK1K#|n-=b7`pbDJH?ISIfeR$+ zoc>f~SFK3&Q9t6;HV#0C4#Jg?qK_~wsA_Zrxk~K#^}vY$yvxV@cHw{-nKo0VF?XWK zF_Y9HFB~w&{vf&yLt;9+2q9+-EOcz0RcjpvmqtA~2Zsi7gpG=76MY7e;a_9ItwC{l zI$Qen#aK{iCuPF?VWg`1H*vr4OD|$dlmAOw42nNzE}xOQ^A`+HPL1i5tt!3&D<6Fj zJdN^^j6Njxq2slxTQ4ws-&_W>hg#u*9%q|BqqpT&_@ih4B?0jy8=ba=W=D0rX%AQ` z$a9r4-6VhKeFw*jWqycULnx>Q)6OhjZZ15t68TC-XM=K0cr~-SI3norX-Fjbyw=k37BxMg<1CT?{s6fQiSxaZMI{ z1Z%!MVK4FxKJ~{ZB**rzo%(k2Da0iqPIc=^#cGaQAj{aYKw1h!R^jgj{LzTz>yPHI zwQV}xhtl?fV1ZxfYEZ$eMcrJx<)>&Hv7;de0$?J_9~vsT9w^WJ<#cy%Hn`?IIYQh+ zYEMsXy0XO7)QingBeS(gtNbu|vw+}^27L5D&!mcIpwoFW-E9oImyLYsJG$B$USo=w zH&b0U)2Ni_QTXlM)D>zeh3(oXsS{#|<%4ACiy^hos?5CTnn@DfM7az1-n8mVjKf4e zy6KdoJPWHB_eL2`R-dHO$s1)WT~bK$f2{)0*366US3qAetQ_nWbZ2mRDiV-SQ7e{3 zoi|X)h}s{jM4cR-v0prowh8C!J>cN8fcT;47WUFw*kNB{scXDy%^kpY-0}p^Tfrv7 zL~K))97D!Cp0=RHejG)S<3jFMIm9UZW0t@dU5};|YlZ>BZwpk&%gx9`PHDMNMujF^ zG~(6s6H@$UpQ(oKH^GR302WF^FsS2?gZSb|9ULE0v&8wyu-n`q*(GfScP7F&c;Pp= zT}$Qj?IF!91NTl$Mnl*)eF%%8u$i@ws^#7VIfj8>@^7!*uF=lAJqPTby5p%*JF4!xwX ze$5zRI1rv(e#YSXIUoQ}Ij`a^cYo*a=uRu{kG+-dR2HrT^KGC$@a+Wg3WTTGmhoRh z`KP4TXMW?l8)By-5Q-G=pq}~^+)H*I^Fu70#GUD54W*Be=h3C&F$U71BHs1B6m1M+ zUdJdSe7vS<_9mbo&1}!Jz$k<)4`5NSSYCzKWZGUvQILD69_m8$U&jqCdLh;0`Phd3%G93@=t5a~F zNIQlj6jcm{ieH7?j(FKw@iQlm~7_;$pOpX6P1akr<4_jJYP=0H?=+U6L%9OFKbqFU>j5C z%SC1^8}MvQ1|ylutdx@VnM-WTQk+v0wY7T*t=-ynH!5eG!Rjwy4BAckurJDVH@gps z{@xTmX2Sb>I2Kh*qLFLr1Go$X)fG=88<0eKGCGck6YoAK0UB^gAC89G-*d1RFqp;d z1aiQGD@k0}f~JutSO_k&;pc|f!-Xi#nVt&va0edzLK9C}yW|>zWoB$5653nG<`cVk zkDf5)YBk~5TM@rVk6*9FgBFaPUDTrGOY>~qp@!gJ>6tnPYZOCTxG@?HDw1MEzme6is{W6MiYh(G%tLl zU>+TJum`bA?|h8>RPW-jF#-?P7$dD>jI@X`GFwj=IY#E{@nK`cgfW8gbC*6wtlAjC z98>HJE>Yz-jc5d$y#z>t5$6~g_g;u)INU^O-BcAl{A$sNAv28@TJJj+FN1(rb75SK zIi`wl#iXMMolxuiS%@EKWq1D`^i{~|`^D~~Bn^nL%>jvcLQF*Le8(KI`&Lw@OA4dJ ztxr-uz8aHvy?{m~`F*es=1b)l!omw9EOUZOjB*!tRh2{BFO))ixpvioq2oQMZ)5gGnBAy+$lJ z`#K5x9$r4~C~0@Ui1DJc-z2eBT@b6cNK;IhSY4%lyg!0&6Z_}JV9>dZsOn~1Ipl1` zgAIQ7Mt+|~NSN~~Qqf9yv(fkjO{b`fGv62c&nw*h$t5FGtmK4O>@8I3SK1VyoZJAz zp&_5|v<70qh2};Zmf>Q*Zzsp>S#9o{*})cVbGsQW2Vzu@_JUs$_8rCSD7UDNLLN?SF;nQS~PIr$V%j)JT|Lq#x3> zbYoZ{#J$>E7W)<0eN9huA@+a*e%CbDLSXS+#fOi?W&DHWc6EMx>l!3ilqEQ`;PcL+ zr?P-Q7vYI`Z1IBSR?s7#LdWP8_3KJRD}_})WfcOx!g8gs!B<#;ds}Es`sn3|f{oPE z1yq)oO7ZbS(!Rpus_eX|7&5G`HB@~gi96*T>+n=+R#F(;zL!q7<4)3~QExRqhD6vB zeAn(u@O&3=_j9I^RFALU1=FxBYitIjQiuKC8OVr2q`Jlgr6`zj*!MV{#jk5L4ml*B zulw8>zl(~N`(%FT8tb{#ZmDrlK zgtH4e&IUe5q@g3?j>{a)#Gw=fLzt5f)UkvNJd8u?WR3>Kwnpxn`GM;ePg}cdqNk0J z1>dn>%L+$UU5<|jWQD4q*ddqukaLN?-Z@?h;|t|o)JBCjz_F%&0kz<1Dnj9K`JT>3 z7)zpW*LVcjm|?+SMXkmADxoWpa|gU{J;x;C&Ab)G*jvY~K@;35r8fyias7)LQt*wk z!Y)Z6rveUEfj0ZRcL93&m_U^8al#M)qsayT7dyWKVAMQ9&0h&MNf?}FPq9(TRxyD~ z3HTt6i4WXj5{8c{;rN&Ud>mtsVfj((phlxUJ_cCU_0&LDPm$Cwf&2x7@b(U|m%RamN4|MX{1b-E zI#;5DsIn1WIgkJ}Dm;ovn;>>!v4xP1WxPF`wckA25Zb^O$>(W^6`4InMi|q(yNoTe zS}HCBz0~yQee#mMMYE?_5)`iD!Qs%WuiTB}AnCOI6GyOpt1}{rS&-zIdioI`QA! zX>41`SxC7|KH9gtjiX=>gW>#|!NC#%HyZ5AH&uM(a?GDCAD!3u3IvI`&sIr&D)X>w z2)7>_>j}2IdMLR;zX2!Yf}SAR;L67#Cc#DYX8?8Y(v^ayu767#%NUCD{rP0XFZuIH zrzOpvcR;Wxv|h)?kqxuBBaSvAE634q5cvOxqbJ6EKaSS^JQ_#wgriS0!f;fAIX+_S zrQrP8^U&W1fTxUL-C11R+O4iBJ`?`>K7lk0TB&R01M*cwL2V(deJ8L6R%3#v&XgH& z|NDnyjw%c1?>x;``Gk0EahBzCMst z!&E#MqsmM+<9&Q~{6cbyt#Lbc{y4{mtrW(h+?6(0xke1VWZ!CQlLgCy{W4&F9hTC* zB5P)$*`1JSH@SK{^Ys1D>4_L%Gl|g6m+OVt*u;gzI(Cj6!Pp{cSuaS-Qk+*orYBSa zTS+dit@nUT8;)V=;Yh!?o_?r7yEq56g{Q~(CFxud%b2O2sdSlYQh~jBa}N};QB#1dQ%J6pss==?l&!;LAMmDbCg3Ian9K z)P}CcC?fqS?EpT7n5+n5GSfVt3AZxomq`Kd7jn!7cYH?e0n6?j2=`oTY-o)U-E%-r z%-ZR?rK47s_W=afuxH!(eQl#|c&0PkU{^;xe#++5N;L$ zdy+4a7-=A8f|;f}Se6Z1FDUIL4Xl4@UBqcEE9c z7-E6NVvHAcnN=5EB`4^u!>rEJySThiTbq%XX7y?a=s^X-jwL}Pn^Z$f{5RX?>*VnW z`KlND*kauA5q0w^-^f}luh*%Y)jrXiRST-CYwXUicmF>sBAJRvoIh_=?QC4>xx+A< zRz*So*vy+o87|mO23NOIa}k?8oX`g4Y{%Kp(^uQ!7HBA#!tQK9;#7$>emGM?oDhpR zQ?OsEo|ILUmnAPxuPO|(kB9L-0NdF+h*k}uEZk6*A2;+f}P z8)-mkwOAOH!jo+IjiU^H`$;E0`N~eiIQTYZ<>gWxH=^A9P`Rxrw?EER>V-apLQ}V+ z&_Yq@N0?hQ)+P>R+wQnu0&~774GplHG>f$C;d0g149u3da7mA$DCmIa?f~6)(LR59!t#}X3!(G^EY<{yo^R=4 zc&-5fUyilpxg!Xa_;PR(+uTP};X}eFAFH=_gHr~hJS&wQdzx30;w;B_aHjNv;$$lx zAw~>(bDSWC0;ZcIcq>a!E5)6NCb((N8VVA+9pfO!3XoHRFupii%(}mPHi&_A zr%7IB9(L5z76&B6IX7+FNTWzXF?tmx&r$6B5?><5O`O)^Bl1Kr2sCG?v(e4Lr8c(l zw`YQPt6k3N6TBWju@SV`*P}YFD#utN+s*ZHggrBYR{UChOHKY9I(H%YbBLRiz)qRx zc~~#k7!QkcrQ+eX^J{pJI=M#rV1WeO%XM@2o28mQNYA4kr^2J@3@VRa5}w-WqeY>r zhNQxHux|Sx6%PHQ^?9MO#g9Y;3*WX))Ik*)yw@Xz{7i@?8;3v^({#>MnfRFmu7`ekidF5qR3Cq4KnTS?)np`!< z1`F*tNQ09x6s;$f1X3=%HD9XpSCQpobReA(E>K2=3KG zOY{&)TE*9udT5m%D%V35dZ@>R~lQ~CQz9-f1zr#9PHxqu=ocksw9{JE8X8sw|ojzE3oaXeAtd-Q{Ur6xaQ zM2MNdN3nkbMk>9T#gCPK*tTm%8+f%p|SeL!fCZ>phYl#sX}Kh0lG!<-kFKb-$mHmfkP;$#B=W1~?mD#eQ2 z%`aK^V4<32DoYcfhmSMwPEH^G`*=e_>llX~;u(d#1hB z{Srh%1XCAmX+XOmwIYj;aN!jo#4R`E{h%xKte{WNB=nLZ8$kF5U6Q*KoW<1doGQsR z)cYVLx64l+Ltn+-06d=jc>)%M;QwCk!W1E=(YeP9jysZ1N!R-)ah|9@D0W zMiReBl|1y^t;|br>dO0*r<5~M)z}VIC88=6t5(w0q4%;{(Pslu5#fa2WXG@tXm{@b zH*)ti1}XSD4L%Guwrw6CYyNU=zLOd<$9yrH2DQO;ZTTKf9Nek0n6Qu1w9U*hy1K!F zM=5M){pk1=|0aC!W>(T@ds!Z1`Z z&|qg`lzAnBPK06wNoN23w1*_~88kb@>Bx@~847Vhxg$f-iLO0PwVhLsKa||hxe3-_X}cqcMl7`PRs(!=0we?Mq}_9 zKo5m9Y0(sL_~f$L!+8bpeDG_0!OhuFpmr_NXCp{Z7)g;&6v@l7L7p?J zbH`UV)SfYpnrtjTW5pBOpM>(avYYx`sJq(T^+J9^inX|^@{mN=NyHMw^!#HqcWP% zo#?iC2dGDT@*Xvhs?~aP-hmx@&*}m$tT!ajFUPV6dG1&m#WiWzr_Q=Ie4h#d!x)fQ z&q|{NwmaFerjBSXdv(hfL1M4N#v3p1Jp1{^Qe1e(sAK#|uZ>;%+2onQ{oQ>>4=pE^) zyKvADu-vgu9ReGHKW7Ved(MjUhMJHH4Q#eM4w#%|Eb`^0 zu!@_()%$U0Z&^`*D_Ba-kn1o<{Avmg)#*< zd`~ed52W}K*%zZZSaR}wsIKPjH$hy9tFs-<`zw^(0)Xes$v#pN;mZ^g8vyKMe96a( zxOn(YGKA!_)+DiM7^d2bC(zwB+!IK4{lpWnx~}mAdbqCk1bRZDbrg*dm@R)j9J4xH zz6mL;ScPgziUt-cEn?|tnpOjkpm7-yF%QCNEkaN8+@}LE zR0qPcn+yJ%;^YRT9#rCK>+6osZb~cx`$E;k^P({0GZNH);InV?&D~srJ0{0j zydyx0F~%M;$rtPGe#uw1g%x3=23lv7{Z0Lyx9QMT?bN!2Y!RUafyrlH3P1UBaMb-0 zFV8(idB}7juMZB{!gtPLlxSc{T5mC1DeCfh7aTeESp zdJ@zRioNE+kJzRRfBo6mDft{--&pcveDR z;0U@mv04A^NeWYZDTU3%uko?GY{!+B)45x*y(+>gK23g&3n1R0{m=v7dIZwq<96)%HMDemYJVj;5+zy{hfo z<-k3+>L zaT_CH@nodDrhbAAb~;>iNBJyMpWi`S3j&L39d6ii`9P4(t~$nD|Mi?>1I&RW$AL^ zImKa+>(*S70K>9A^2Bz}{vpHaJhknfz`zxW!QN@GL7X;~RaiNXQ(c%M`>UoPU;F%w zx972k5Up=2c>Aqk?VkzQVSoZ!Z}sPz33`7nZ)$xmTAe#o#0(cLX_faAep>2tQ)uiP zVC@1(<9yH$(3q*uO_!KCyt+>D4P*o5sPxC795XkBa@+TyJS80E@2(0%`3*q%Z!s+h z<+2}&n=q`4;m_12vt+Kx5Vj>VTt z)X+cbN6z1{yCS~w@yk`tdBd?T-GKZBzP#bG%ae`+4tZ(89h_C_dmbV)oQULag5@aY zLKrrZz=2Vd5x#vY9zoxNOBAvqdHPV4CUag(nUd|BGTetDbj&|t^dK4&6UOj?FoEkP zd}|Nl&9}AzPuv{sTT4X5_aqTYId_h4?I|8u;9Gkdfg=CfbNHcuY;}tOj7zJq5hacp zfI>wa9wSz6@dQ3dz6e3QyPZw3FO_7@N-EDR0^cjggTJo(k1;-wdD%T8b2%NBx5CmF zN7itZt8O5)TsXf6CdOiw(8oCFZ`Bl2nE`IOyZjnwJV>i^eShp}vd4oFJ`RQ!1ciT< zUw0CZetE^!PNSZxR-__9mRa7x6QJV3at5lU+Q|cWK2>dRA9mUEpO*MckxH%~o8cbp z{1fmXs!JKHZK1eS%q*8vVHRt43t*+=iFL#L9%gk6Ybc(|mX1KjO)^rQ5E0i|p&ri+ zJdl)Gw>;icYvt`r5(3XijR+qs8L%GXCN%QoG|wI`C&ux_Wkj{PJZuNa!-VA#5*#!a z3$~g}DBI6MLozu{=DBbQ?HbArxge&6J6HY0rpqGUGdP4~rF%kO!KEzUS7y%il0S|ftV8_Vl#?zMN>f&k3ws=qAjWkja)Yx~( zQ-&5f*xiBV;B@x0Ea;&drpoX6x9Bdkbzi zV;|Gk1hyMd$*5WybwvDGudbZb z?YH8ffibwm40XCX3%cPHrvRIIpa$9H7R6r0cYcT-c@bQey$Y=_{)*ZR1`F-qb{2`<<~K+S)6^d! z#lC^?ilZ_PcKHHj+3*G_WgJT3W>$vO7Y>+Q@ZYq-bM_*;?;p*0hcKCtcJ@0qm%qo+ zdzI(x|5zb^H@Hw&16zU@6ymv@$H3r=WnapvymE&@AwS7y_ z{gR5yGaDC6z}yb#(23o8&!nNR1O4+fF9;iNG}e4&+r@@)oV$Qkm#C}}Nl?YsD#XVV zy};HA2U@2Xr_t7`{kr?5us)lwR!Sz2@$LbNeLK#3EtJBOWQ8T^gHao>S-k%R{!pU4 zhA5W&7ox?(>gC5s7Eu>4W*%Rj6c3Ni?>8lt8dz!GQtTX7nlbdr{}X{T9~bZ8!UiAd zLHM98!2wJvuZ70ex!_WBaB1pv2Mh8+Gf1&-_LK#zO4&I}UfDT_qguJdB$y%3-R=N; z&wlc4bFiqG`tyGuQU`B#u<>80Lt-;~>Hu}qIrd!X8T{^Gd+<*6fCF~0RhTYn@G;!o z9EO_lNuoc18UTAtK8WSfFTFMY2}9{P^&~0#@;kt-8M^n}U# z?u?Rw-a+T$;maRnOU~UoQ7-?RMwHQsr6isp<9yIYRpzn(MVRH_ct*DQq9kEJTPli> zmtZ~Um-hB}!T=z#XpvH7O zQdp`qo+=PZ)h<$D1car!d?(e|9!h0=gO?SV>LgDk0Spzc^1sHY@vl4;0js7mi?V2< zhoE1_Q<*}kY$6rS_)w}6p2{3bHAti)#y6BIo2RmhRQ}5C_(=bN-%7qGL>QW79!H_m zdWiTR`sbHMi*h4z$0lO?1}Q=%*-H2;H&asl^H**W0fe@yA!xoXWE<06Q`9y~w?0XI z5sANzD9^`>QByTrdG8xhNT@Z-v|6baQLfc>y_zE{7M$5y4uZyCxkH7?U%68c)##zU zdWf%sc=J~_=y9|b(m#LYaS=d>78LsDuiPL4*krBZ5&28RkBk3QR%xFr*Xf~hJyfBE z@>f#GU%6h5pf*Z_EES~bDz!MrqlxN7SX{t6pw#M|p-1}iSFtH-d|#(C6kl16^4Mtg zlf_vc_KE6dSLvm#4}HpC!VG%+maupiYn&iz@9nG!i(ko3sPTQA$3yYF@$7Z=Q!ghA z`$X7ae^5US3a(h<<85b7$XC$srHFE|*`b$}Y_j??IJjaJ%h6w6=S>_LdgtvLtiE3p ze4ToL^$5N5nhl|MLODA>lB!K(SG@|tbd-H9EFOR0mVMEn`z6(0e~sNlI$ap#&220^ z9Snw1QOaBXPJPk@lMd?AZ`Dsh0^ zAZHIn0M~l)fcqjGUHNigo@^#d>TrBo9m*s#yDNlH0jw;&L}DgO1u3|xizZmS-4Rsm zR^s{ZZN@EZNu&$d|HXaiO82zVuJpE3yp0E|t=L8Z=98@yB6%Xs2RI~t57AZO~Lu2Uh_Mm{tbH&$sz5^A;qcBJhQ8hL*Vm?;ql@4#3sIo zElWcjI%P^4UUnHH5Dp>rOu>P7ht?D11SgBEuC7E*5q^vl1I-1h;9Y}w1 z?g*VnGvE&fnn_eFuVqeT!Sv-AW()qCUc|n_#2|GBcVuAY`Y_DbHO*w(5!wWFz3`cS=)-;V?Pg zfWsE4bHh?6zST>r=0z$TrYc?yJN7Y{{(T2gf;8J@3GUj9kZ$)Nd$-~hm@&)B7KGq` z^%+Q`bV=Qe?=-}OFE||En>yf|t62EOsU*PkR-v>a%kJf=iiZ|1%kD`7EW4)<@`+nt z^NiFZzJ05Zs=THaMM=J0i|``4%lG&?3VX}(bY-ZEa!P4{X=#0SqM?Rzkup~p z7nb-Y4Jh$VAJjMi^bxL(ZR2v0z_NA~x?o%m1wHc-EExA!WV5V&5$vMn_3{Pn3*dd% zn}#2m1J4~Dq`_64O7=G2*PV|%D1mvK*t4IZFL)4QLJZep_OhY3)VKjGH)&P8PQdK^ zCoN*jv4}lKS`UTd*mbWXDDIcV`nB>LMh&s)QsdnbSzpkymV~l4?P}H%52wV-Q4gWc zAs@b+Z)DB?A&@E%As^-t%|`GtOi{dqQlKbR_R`2fXn^b`)FL#fu?;BDvN_nrkyNlr z;Z4I)Xe!RnUkFIl#Jo2k1=mPjB;!o1={%9e`w|jt#oGQHem$ozJJ=f|E(NDzFUvd7 zZ%8f2mMTXu=nkuVsQiqjyv=|$#0Ch&S&6PzBFSbTB*Uby%BLUO*K@_TpTzLB>Rgq`h^D%YFKAvV5 z(Jsz6me*`Vw8dTrARNUSW~$CYJR@F6f4i6SuPU0_|3Z90X}mTGX)2U)XT9D-7S23z;pB>M1$D&tpAp^83=&Z+WxnI8u2fjXH~~0 zEf9#=h3&E$lP_Y1yspQL7BN#HT2RwmBVvM~a;zez>`gt*WmJihzYCSzEMl&IUQhF( zhm=3fWSmq^S{)?=6+x1$=6cv!v z?b2iJ5i!3Br6Eiq&3&8oG`AzBM9%9|QpdUyh5d+RYkaa`&F)(o@6ez@#rcptH*&7j z6VAfSKf;H}{}~H2NoQdkBl}3zGUr!ntCR;Y+Q7j0_@Jm#qg_26?4^-lV?Z&9jTu+h ziw|bb#T-^a2EdPhO^u;pjK(03J1o!GT4H9Xc$Jy)P?aq1eVv*40lbXu3Ggy8R=yG+ z*b+WdnBfFq;Oq{UH!u2Hn-RZjT_7F0ut1uH-xB=x!SCJp?GacYy?SwhbPfKh@Yn6z z1yTU$IG zs!`qWt9@2~wb#%WvznNGy03o(@Nd8$!B2mi@b@C#Yw&jnf2Z*GCH^GDm*8(D{;Kge z41eSBr{(L3FyB90Nxnd$kB`?Ufr}+sZR@o-CVLX@8wwCFPaN*qL&rxY_gI;mvxE4$ zZ{$*d7Uu>cLnH-Q0PRb8S%7crTdM7?L3f+Ft$)3Iu{5vxKn#awoIhM{C z3Mv~;j$#!|y9SgIDp;=KscF*?UG|KQsV6P*DYIfGofDOG72IpZOuDFJQh6PR!5K64 zy&Y3ea{0Kgu4r({i%?|a%6Y*nV-~zh#2U*d8p#t<@dTp3xIsvsXub%t2YJglIhmb4 z&{Klh$SAT)N)FrZZpU_aqa(N?y)=>S-HUmiEa#-l6X70hBdAHdFMrI12}XlE8Jl&S zKq&%Qtp_87ZHVp7-=c8&1Z>$X6+Q}bmKK8#8&;?wA1ui{=5l%3ZihsQtfbaE{|Fw0 zFNyDcL}PIyAB*d&?Hhvbr_`}{!)mAi9qgS}i~A*xv8Nv8d-_GVCEIf*$ph~BZpa~0 zy2H7Bo6%M1X-mMQ;^4}+I_qijkZNxT0ET2rDO}G|_N%ZDmJ1_czrSoT1Xf%?T;jK5 zeU%>`ii1bhvU>}mrVJN}YbQ-C6=Y6ECT{@rCImfqU{Sgb0nqv)cJ9;OB*?1hO%ZfV zx3r6I?smGOdCahjb(iDV^p8Pp(UFB)AXqCWt@%_OI9hWWjrE+q=xH$eco>CEV;8d_ zT>uCH+OFSu2TDw4FJwuOLD8u%$#pZ(13R{~Vpe#Ts&zpy!tNQDK*6h&!tJaN#H9TD zzu)c!spa-Y+6gN5y>xnbhtIwfqDh~Di=L(LE_s5)Rvv)03&H>h7BMIm-}Wknx!w`(w-I4{OUtsiGV)LKd33}U8w47s9L{$3o4hY?Azch#lFQ+`Y@Y&EANQAXh-xB z<{Zsp5}=pY{1$KOMhIpa>mBTo_xb)1T7>m%#Xf8}@Oya+c7`A)#jN5{i-cpI_H9jb zQ8c9frBj*23%69fPi^}C3I>Y`F#p%H-f9I;>lJ*n&H^tU+XzkB?qMpquSPSm&HoQ{ z4VKsK+mN#~&cRM%hem}gK<1{g6}5j$hc+kYGavZ-&cb z#Ap;SOQ(R7KIRl~7>ZjkhEu>nr1-ae#IqN(j~ckhf~Z9?yB*~;Euq<^PoHF%2LQdr z?4B+OQqzoLP#^boDC~s~6F9Y}#S7&f{E(MNg?um(zjE=|dZx-JD{7LB` zj9SDaoOn`%-+QkfTB3(sdT6B{TBV1|^-zT#s?tO2^w4@ev_TJT)I*!}&}KcfMGtM& zL)-Px4n4F}57p?Qy?Urt4;|D)4SMK^9y+dv-qS-T_0TCjbXpIc(?d)THS3`kJ=Cg) z0(z)j4~^GD1$yW%J>*bBtl$oVP_|jT*x%D&D9TmWj}C;fH&INIM@Fd18sbP*2083# zj40&=F56 z&gXp(A)ogoo{Dz?L=QgiDTHMnzE(nn-@8st+^qo!QNs|uQMn3b*#k8pN+P+t5Dx-e zHJRVLQ4ej>L!0%`4n4F}57i=sp#=mT)Z-fT&=Ea!Tn{->Gqnb!M-MGgLmEBvX9p;W zl5O>8w@}E_XmJ0xhCqk79sMJmj=oLwiL^S&m&&cV7K7gH-bh5|@mf0K2#S zlx;0hO~2Qv!T}5*L|$a6O8|=+?*LolUCE>9iJT-uqqGio%TB1rAE%V^F8T;(mxJZp zq4FWDD`Bcz-Y#fweUDQEWreB?ReZ9o$7d4*!8~i%ptBU)U0;0m}E?g&?0a z6j$vnz%#h35Knc|{OwmXY3L)N5F~_W-~=t(;w{0FchRekiE>#HeNdsM4vqNGa1I}( zKWuDbw=L$DoHJTr)b9K? z@it`g&GDN=g^k1TdJ(5=Fg0B(<^1uO3QOgc?Mgwr{E1I7BRiZ#dJdSu366_DDSxkD zkrn@@ZV-M&cy?K|d@K$O;Hn|m)W32Dd>BVL9ogV`mh*9)4BdO)+UhLTX z+rDSp7_sc1xO5*x8#or#+Sml5?>qqN4BnyiU1IOu1qz>QY}jzs=ZiA89R5+hzh6H7 zNbi@%&48SAKZFB6e`-6!V{CtK0@mUsM-ALm2s__nY}42u!?`4*2`ZePVIerbAIPyG zAVnVl^ROEbnBTgZWbN+(W<@!Tr|K?*`^YADAt8FC(}deU;WWXsZzIxkzGpoGobS03 zFU0Ev?qNSqb@K7Sxp}WWju>~r!4sCoLxa~eR&DFz8d4ny77Jz&oW;^y?w~m+P;Cw` z`h&8bxMU7OG^`83T}FaSoVY$c8Nwt*LIm4I+kR4{&1b_u6uTFrw7$ne{qGg42(J!{ zBRdK%A0Lek2XU5UVz!6dC*YI>$$qZcLxu|!N^w2`nWflrZ$5x6_q*J_2CS&t#Iqog zd<>RxRWJg0QtY~I9Zv(&oj}6AT%KZ_PUi021AGiCg-1%qmG&<7B{KOh=(fTmZ21U2 zkmk@rWp8%AjKLkuaIjObt}9<{l=iGYxXDmcfd}rJh2bBGG-_YQH`xBsu?W@fPbG1E zegU()!XrBj)iaM*^-wLgU^Jkb(`CB`(0)|>H&w>r2|vwQTxkoz<=@I-VGj2S$~=?n zcF#l5>yPn}H^otw-S!XV!uLvXxuFU7*%Ab=^h72AzXF3fMtw^DAoccYNQ~PZye3o% z-+M485>>KcPZ=?-+|N@nH=!6BJUQrcVhZvHIV`W|8>c(q-$)FBf48R6$$$s$#4541 z&qAs+qjpTb5$!}@`0}%$K?rMa*w@FSzWVdC;?QUmF{&2%=g+I^p(->$H>RNQ`=|o^ zmG)l9ZJqS-vl0@NDpkG)*Y>Ie*CC%*B{G&C_6>eJNroVW+b({f2Bo)J`e7>|N}z_4 z6B-PJz7P{Pur;sJNN8Zc;8<{Ft0tgHTo?1+K`eI0(!ON#*|1IYyQRX2{2lwg-{Qqm zV-sqTalnTeEEQBG4}6P23EV>Ar2YW}g?tzvC{3;=0kmf<`RKee z-68h~PBY2&W_;};7cvKX|G}Orq~6&W3r&47_Hfb4aTM%*7g;F@u=@m%3Pk%QLFb@(6hb*H>*)9qB50kZ+9f z**Dfaf^>9_eQchM?qMg-Yf{r~Y$G&j7{YXVy>FCgPn=v=CYf;3oCKh(YwLX&2YhhU z{0Rl{(rnInlSXci14J(2gD7VlFB%dUY=s{rqaNG zMu#7W8MbB-nHxPuPv6Wf;pbwy%JwaFpBm%$^P@3Stm0@)0<_(L3_!DW1Z?*irAZYn}_T{=Wrfv-=0XKzov3RLTNR*)DnwsK~YR#A>3zxYp-t~xI zv(oqr*Dro$@p|wA_pA52%RFT`g!FTM)(VEEere1Qev|+`g>i#pKcDU=62F;FS)G*a z8|h@cM67!{b}<+e;Q#6%7UW?Z%{jLROAL-&@jVo~Wj#p@x3hWpmFI4Tx(XNvO1Lf6 zSQHErOS*{DKKnTgCk%9)Oo!~Rh|$>)2n$Eab2m|%!qeg?V5FNk8UBn_1;Z=vYO9aJ zRsSkg@YyRMA@$qWp-%KRp#VR`3d7eb$z#>2bC_jjg{Dpg1cB_fhZ7{{5|DodW#Ii% z&p63RJ5daW)g-vHpXM^ppnIz?PPU&LWL%O=SWN!gNE!6NZ?S)}SBdFV;b3c5 zV6nEJ2JMK{orK8%KYvGS2T{4uKfYdOhbD&yZaZL|4Xqv>fj#9;uAy!(8H;o18)}=n zmR<#y6ztahSmn6C8B7bC^Ll+~Xa563n;fu!X55p`F&#Cu`R9n^^Cw$S-0BqS4>z3e z%Y~=VbC&TJBRbCj5h~<#e9srD0JDcR$&1Vdh6G?~a+gMB-84n*(j&$2<-$9ZE_bA(Xtna4X^@8({~rD6 zJ|!RJoJN+{M&R~bUpX0 z!28?Ay?hbFgENr&S$8Fqtr?k_mHPIuX&+ z6R^0tllGM^Cc`q&ggaH+34iiTvz!66XWnUACa%uQHOq$_Z0e^YaL)x?PUFZmF1GjK z7T#l?TwL_az-omlV`7okc#UD3^Cgkhhiz90ItGsa&w^2l8n?XtdcHK|3n8$g0UIH> zoQQYd4Txy^9wC3Sa;|Y$oak$^(twHm%PBA(oM61N+3f_I%F&tCbCIx8haH(<94`~& zNDAoZp*4XL#Y)T~lqkP@p)+Q&ah^Cs8)*vvE+#Ga+Dg`)Fx3)N2X$e`5@pBwbSbXkH zzOv2aL1NR7bgyE6gRoh91*a+4o)vCBRRs=GLLO7T9jtpy*~C4jY=Pg3 zPCcghM?`u|spTwxO|^Y*&|Rmp{6ppnmnpyWVaYqpjDm^m{InC)jUhCzXu6O1(B9K= zuO9Qgp`vdCbw$aZ@m%t<#VSpenv3fpV;##D(jURkM z4fmr4I`>rLxvZUgnvIg>LRc)|5U=IW`oSl-`!W1hJ@^!>J2uQ-EO9G&utF*z?mmRo zNdqtx3b#WBdMiAx_zX?yWW2J&Z{N`eV1ltl=M`g+lEzY`Gs4XQDK4pD-NEL_GcnnA zRu`V0PwW4wd9$lb@_vETL5DS@YAZOW=P8_?V*n~^$=(yhv;6NXsW)6%MB5DRo7sCq zd6k`bUwVK$dVn;h*fb614A{ty$5Ci(h5cYD$y{K9ZQK+TXjw}#HA}_6@hlie+^uCT zIk$qfzvH@vB-+cu4|Nlcl{nb5IA#qOsiSadH+I73x6(DHx>XrS?Xy_u_6Q!Cte%&n zBsC|D(ZX`>?vN8Fw?iIUZ>;uFTOlMaPOEt9?>m|oKo4H;e*`PEG-&zHB;O-soZ|ai zIi8^Unm<=gjvp;f!XBgjH3OT`p^9TH4mKeics3^T+X%?$X_IPMyB`QZn*(SwIaHWp zV*3VDC1g1K!s8HT2sD`fsy2pw`KL$}h)h*_rjNaPrgypA0Jvj&VrH7IXBzt(J<~IK zriu=kjAg* zFKm92StLJgcq>0`II@WC{v7;i_}Msq*08R$le325x2Evvtj&IUVN@T7-) z;(%|%zQt}T!Hqm6ndX(2iZ;;F2>|FYPOIXMD|Zk2I@ap$a^XONrGoqikW)Qkczapa zrWo*AK`JaRi@6bO8pQc)(@P{tbTCrW z@PbAmKwCs4d-4^YjD|qdBN#2I@QYerMv9@`K$a?^+7DXDGqyn(heQMPM8D;U&QVGG zP!dn{o=7xEPjnwobea+k)e^mmL>CT#<8a_(<8=UN#C+ZbP;I5)4a?vnGzM*&Lv6xN zdF~k6Ey?gM6L7ea+2w6&bw5W*Y`q3yG2Vznx{)}f>xn~3BMxaGaY+5tzB-DE!W>yf z@1lQu1}kx?cL4!@=gVrXU%{wIjXS8teH4mYze7#uC*vc#^#mjCDjyZo zq_c8-p#fpL264n4GRVP5BmjjoB0k)OFp|bQ$tua+q=kDZLI@-Nkch*Or(GuEFy>zp zAq;u12qn7;@x|(zfM*X^4xT+-nRv##d#hu7a(`5d@onXI3lqYdZ_yBLb-0q4@@GgF zSF-ESvZkfT3OAv6CcCb~)9M<8XAf6DJbPj<^Su~OKdoZe+H|dokM7%1FeDcoIZNoJ zoBEOmX)hU|H1GGLtI@`90rnGOI+EH$TTj}5}Prsg-_nFP`VX=%kVc3e|zzF z8wOSH>lXq!1_SUNI-gsPm#`&49IV$oB9)Wmzy|%@Ws&|U6eH={Mk2^$02+`{3@@%3S88sOZ?!FnJKHmR!Hqzdjf z30%M>XfYt_!k%pqR(#0t9IUShl$WiOU>ICjQEjghyPTj~!7IDf0S&IOa)rq&WNah{ zUbc#4ej8XRezhgdS}XWrE1GEL8)Q_A3M#qg1f^rsLZzczbsKeR3TaM+qr!LI)N*U9 zwW>b?KTU3Ogor2`E}AnSwG`Xjp>^2iYC3K){1ad!9>{kU>>+7C)JE=PNWTv5BcikN z|6}c40HZ3d2kuR>Aqxa{k$?fCqN1XpML`9En1IXEzy>7oQ9xAEHKHQy70^b4o7HTt z+hYG}t<~1HwxzA@pQ>n}K7t?#f`FDT2*?jMr|Xr=F!Rr#itl^Z*s&TC?6n# zGIg5N1ypl|Xjnq-7c%0fg{#mb_YGIIxWr!2p@h4CE__(H>WG$|?{Al#r+D%9{&&98 z`{^P?08SRMvhvp@*t0PpCX9esMxD=ZMPXy;%;59z*k+uTy_Os&9F--*orD~iMp|6D zgy?`yz(F+Nk8mKPC^R@A|B3o&YqDPmi2LY%v2@r$ZU1vx`0b4}aEJ8E7nZo9J;GHl zg1yi2OisHy)T@_pnj=hX04=f_G#U|}SR2pR0jeuT`;T}ZYw*6*0DDUPm%uoPUPKJc z)=i^RukjC2=d`?fp18bMx9aF&s2l22Lx$HoC%bNT9~}NqNySR=xYVvcfZJ8i5l)ZD zfBxNwvjjdu0<_k%SGY#J8$ShBBvzuF=mPreSPHQ=ah{}QSJW5t??%8IK>f5|!)UZ( zgg*<)Yy^AND0_ES~EThP^l@u$g5>Y(Jq*Cc0B_@fd+Hr8+` zMEo(`URldk;YuBtyvXPxrW-Yc7^AxjTNj_zrFjT^l+?9K6c%1zPSyc$ANLn}^lENm zv}EXrF2$7zEWWk#%;o$Hcf8AaZ&y8s3fV7)4 zzJ7Hpuk0q(3+5CAn;7z48;fUP!@pCH%oLUsx&n z`o~mXM|J2cqV63svAe$Egc|=Cz|!KdCrKGoLX>SH%c_CWnD$^m-Nv|PMsq}3r^ZXm z8~C~+T($4w(6usO2yvyzX~&tTd3lH$4bB5RLl>-wO4C96tdT1uWPB_i@RCU?`N+8jCZ zB&ALUlC1s|NMECy%bq!THwC&>ofU-#?XBsg=od5z8m&JGWXSUki{NnuKamL!O33&% z{8786Uz`!VP@ZWusDk{e2A+*$$^Yb%`K~)Jo$tDB#C+Gcx&MgYaU;z?bDm_syG#rw z$g8Bu`#NMFn#RY4=m)r3aGok&~2}u~*n6ARqq5b}>^_SoMauL|K zEcaW8*{7jCAv)1h@4?kZKQ$iqI!gHPWqsdIa|g>CXWAbLsodn0&gDUx(fh`UVRM1?$N+xp}Cj2G6DY zKR-ZuXN05~5y)Oejm_dq4N%rFd%|Ee#t7F<@+Vb#A$u*mm26K$LuAWRciwQ8t69Pr zBzYlkLf)dkz6yeJAr7829PTaAOm#x+n`O^wB!amWs_LyMk9Dt@J`*` zgXPWZD3e$`l7?gB$0in!3M3W}2ZF@ng2duMiN!+_i}M4H+mi`?%YixgX? z+6vSxwPB+CeqCQ%Cun_%Bm*bvuSXMS*(fnbA*!~&tsI737PYKTzztpbUWLr(atumsFoW{U_`sAk)p}^l-9#B8L&x9vn;%>UTCGkQ=xN0}M z--FUkYiEk_sM9KG@Kdvd&+%5!3$b#8T~gpLfDYODyk6Iv z?KbN5v(1zigs9uykUC`uq8y9O6|u zPOFTs@M1*7E}4Ce%cR{6&ag)qbEO11V<4sAF#pil=+i6H3naM{O4*@@X#f)_ajBV zkIht0E<3rQ*er%pChw9(?K z;hF6URF5k>&K2sTk)x-a7Fn{dKOu*5=h$u14uIdB{VME<$N>EwYrOiQndGdR(pk6$U`d_21?eAu`6V!LGD_^*)$plXdau&u80xI*KFtd1JY zDkZJG{npA4Yj+C|A+fTbre{3(gcIfsFw)SlZ zt{9Kak^>yVyf)Qv^|X7;Uq@0uu6F&n?Rwt_JnJr6RvC2{?>Zvb#l*nYzqC8**(8m zijqY?mI5n(CT`tg#oichU~HpltKHG2N@Vow_x^ z=@vWI9)YXm$Xql_H>wQhxkGE6`Ox`Gr!!;|b1Oy{=Y?|CWN53=FxkBG#pNQGKh}i$ zK~%*#Qb+;kNVF$(KQF^riWLTmmLPOK5@2J{qdYMmx~|U)+to4_v9Uv4&XvjKy;pL1 zUsas4LrsE2btg9dDb7pFUgyXo^F$mu9nDlR(><{_xfIqw#mq5l)aK+)K?w*!eFZQ` zKM^}vIl+UVRy?yZCvmq&&(XpsWR4~>M=df(b5js`NejBdU}_AqJqHAcR7Tt*gio~M%Z-LUPLT@&PB_=k10u3 z;+`To94)+GI^0#vn>R+&VL`gqpzJ@%0W0L|u0MFhe1I(a)S~paZ z+SZ5KLDXeOK1?KpO%j_f`A(30pdfiKLGsJ&iJox7pm=ZnTY!V9+@G;dOm`|qdzN@4 z9=$d;+pc~JRWvujPG}t**N)cC_|qTJ+Gd9;wS8!TND)J5QkjZe_~rNRs1ycnwmp4_ zjPDkqcM^fZ}u`0JD5kkG(NPcWaXD^5W2_u??@y4c)}BN|ejVF>7tAg4^Gh){3J zNz$3YgdQ%PS^gvuxarbK`}Tuh9g|6F@yjR?hzQ{F1;9D zaQBq?uHx{<07mgYG33e8f|B>bz8vdl!z8twqzsky>tCY9FS!r)c z{d(bCjLlQ@veYauR1fIuAxe6M-HtrZY=Axqn36my2|}D2T5OlO?eU1oidX|B9#xJ$ zo3sWQR{!uaLRPVtu>79yovC+i&@5FvMBX^TsD8Z9{HZ8#i*f~9uvK0W?*lz$I~$uG zOURHQsxZWai{wB!zsxt(8k=g=`&5p8zdwI{As>JHgnIDzln`h*2lUW8gvO7_Y5bn7 zM(@jW^I{V|3b&n&xt;JOFI8WCjkYrw#gC(r-PW#=Wo-svx0XGo)eXB>_O|*^-Ga|&S|K5pBWp?`z{jhhOgqlU5`?01)`PQ^4NF8;8hh}^v?tl z=Sc2{Nsw5o>J$rV`K5-7+c399Z$%C-dh1UOFA5IJE+hO}sq+YZ_mXMzU0ynKHve3i zu1xvA`7w9$B=tO_eUxSW5d-XSFHFu4_r~P>un&{-!+kJ0KYWUqoc9xx^ZsIT-dCnE zPfX5F6_fLPF*(m-U)+LOgZRrye?pzw^CDT--Wt*AiY}r|>muHh ziFtYA*(C7v)--T4ncWO}cDB0C)SegofTwBuiMS6Y?(t#V&(@_De@o2xj);}TpQ9KO zJT9Bz>0j&9U(S(FwXMffd|Hv1cy_bIx04#)@29(VlE(kNP-@sOjo&~G&Hed0X|90e z(TGSK`UOU+h^h4iVkdS7w?4t74JMb2r`W^U+X+>Hvd(`MBfAB$spaen?Y#I%oM_ z_<78PGZ<_fBg9oebB39J1=Y8!tzXDNFv)Hu+jC?^6LZNJpF4tS8&z+yBiw z`Nl8XQd*ZZe!z1I7_jG}lx@IJtVF^$fh6qkTGXapYRX3(unSi*vWXQT&q}eRt+q}N z4i+Lg9M}2a36k=}2w)U{o5 zrLHWSxCvK(!ADtJ&nfXtXfJH-1|lszi}o=9i6Z;JJg@&fC|K0^MJD}2#A}weTo4-PDaUS^sz+yBKG(fN>`K z(9?70)bQa<>kJWshBu2B+1)=eE#R9GEIv%W2<;m;Iw$AMYuicFr1zPu*V)qH5{W|q` zv(D?Pe%Za;6@@2j;NgCnvApW1U0&?yN78=%I(l3lr8A z@YDw;3RhU-E06ZJ``F7#myA6`ZnVr3y9;%z@uASuOlyenV z@F*jLwR{{LC1$2C^2ZPw-q9kj`&F*!{7%+k0#F2Xb}H_dkWS7*p8E6O%BWvp3tPY%mWiYQ_@=RslUU>PMjX<@x=CO5GRW6_Vj{)`t_A~xNTQi4=!{a@Ov^s zJu8QlsqRl|F`=G}4jnY#t3O3jr3aO%_kVDl(t16KrInA9wrW@)%DmikcPJUJl`YrO z*EE(4_sCeJ9!^xOjKyBzR62p$&8N1%^`Tg}t%HGf5iNbvhS;=G0iIXf2?cG7MqcD2 z1g`yJ(+i^B#z|6)RHs@L9rsA=6)8|*Qc7fp%I#@1B(7ya{I3aWBW)7@`9V&_ukPd; z9;6tQwqsJJF0zfkiM8+W*O8}vHiTnt(vx-H6Po`*E)a`JMe31UEv7F^dj9rd1$6NI z#qHN^<%`R2_zfY}WxkbT7FkPz7G_-W0l}7?Pf2R}8wl!vD!XPh9JxNjMI}6`86e~l zFOi24u8};H45HJuexa*%*92hB?M}bmK`DVSpkFK|&(#~GesL}*T`MMk4j)<2-VZ$q zG69d%N`)O0A#g0RkH3VPlIz*~h%?27w(N>NwwFtcJ+aCb;~~9&a!a1*iDHR!sK1pR z{#QomhQc=%7wEjMx+?OONL}i~U*T@3YxDY?hP{1UVg1CH>~61iKulR_4v$9Nbo_gx zHCUJ_>#;c0KSW?ernuucY(ZDUIP`Zqzy5ZV@Xzppt;fk}361(s)?$sX(W5c43kWGf z#3v0baejE9u}fDjSJAbCCF(RzjJ5{Dj>*srZHh*o<2N>8)P_UuKumubjjiDkmB|~W zBwL~)9& z{y11pY5UZF4(`SO?T9&$H9VT^W^%)U{)Jo8{KG|ZLH2V0rf5lns9XzPkdEWYU)>*N;J&`S#cP#c*tQ>dq63bV8f94Xaho%-^AsE9W(O?TX)jg3r3qYT9Ru@49uq<*gumg8m#5>WW`=g3sOF$P`ur zC9*lULX)TZR*nuWSQhd|F5&rWvND()nVAQEFRry!JI8q=U-7i=$1VJ|chqfkB7Niz za?-=sJ|u5Mv$NU1&!wjFU7dbp@3?g1;6cNk*ZV46!QFp)Dg)%)6i_v*B^#Hw<{>^s z00F{^`q|#*o#5YBCT{Ngad02eFxtN#QBJ`2H;|jwo?M`=xdTsTqhB7KC3{DNH)zg=^a+t|=nT+&;%@_T9Z+n3+9!VC^a{XPwsj_4&pszr4 zQJGmrzFrad?+VUHz9^9wIKR?QROM=1g$SU#(vv@Wma!w(a*SxIA>kLoErE{Af-D(d zw4}))H8Su?Uprv7pxHzsh!T7?9>}cjDnKuAMTdKI*M`z+!ig_ z87*Nbb20sq*>3c|B3RSt*OrfselhzJ{K&EU2!`~rCxiK=V1Dt@4bBOyn>DF^;ca)` z&Z#56e!*f9TXHPuWj1gB&So(~t6#8e!IDBuEaTKyA94zLBYWgl+Qq{5@3l}V=Wh}7ePI@6F2Zj&x zD8!?cqpc+i7JDN>c`e-+$;yq~*wcLB<-@bAnc?Ll2U^#NMcE{wl+2_{wi`^>YO0{Z zCEFypxEeLD6~nk)I;EkSb_SJWT$bnW3Wgm^c`L;7qm8Wt}4h z&Zhua^6a0%68}CJka89JxmgcCp`gref6FT+zrsyjZZkudI{?a*3xFSqx&t_F2M)p9 zC10dr?x++z_WulH2;srb>AcFYYfY{*`z<@OED^w!Vy7&`77TY;i@Rhkmf9sv;zqn* zVuwsAC{s7y4g*MgS?TRHeJ9!fV2Os$084%mtwQN)0sPMyX$zn>^}WXbbor&k5;6E+ z@8JJ)N&LS?xAID54jSTJn89i0ujCcgbhE6wO>noL$YhtiQYYl&O^2x+NW&=_;7v8m zXdgRWs*1*#sfW{M>aCxdnG&X6riNJ-B{C~$ubJg-E@!e{2~Kw=>vEto5cTf@qT17m z$RspYX1r&5i&!3m8`n84{xyjkp$n2d7fkrey}IjImcOFjo-f$&ikdwIrtjBImG!?# zBGKvQyA)hM;!`Pp9>wGLr*LJI#+7a1s=bCHZ{uEYWe+sj<}tagq0)jL=@^s<4C&%K zlB7FdCTV<0z5X&CsqP61Qf*Ve`wV8{zq1~?>S1#>OR^wWa&M@*Wpt(s$Y!(QY>96|wPabWvVQ zbUBFUbvB*TQQa^`+l~ZNB8%|B<9witeoVWaB)Etlbku6h*~_96J*x84g@m`8=kx*i zSGGLGR~@zl#$RbhiV$-?>=Py64FcR*BwCNodBWQ#B6&mzf1_Ugl}!D8x!Ivoy;ZFV z&J>g+aNN(9$rdJ-?rYTd=jmNba)rxnEw|NG^{gL>g=&|qsq?>>u+};2=dT07Rxt}O zCg1BRLKBCNAMxb}iMX(E$BFoIU#@*n__xc1eH$*^+fZTN&J*74EMeWCIR`%xqYn{^ zcwyAA&`e~6h-2kJ#eKjo!!>C2W`BJKdl#Sxt;?}{$ceKLCr0 z3t*mg;Z##oBb3h!=lQ=h!`a^(naxuf&O9D*bn>XJ>)J&i1OY+@5-625ddnQvoLHCj zvi&tIML+TS+!_Hivd2nliJv95=8nII6I(0luT}Y9$&{SH#x+?()c>%GA8`tQOrO)1 zYD&ycP%vv%p?}}vzWR*sSC|^?QSK)>-LnJu{IzCXaJDDRlwe4B1I*iANi>7k_q(VP zh2J>SS&sU6%W}-K^b*{~M$=qJFNT)vA-oeOYHT$pzY&+HUIa=Ry1}*@0;Of@l+{o< z0)1`D8;ZB~4s_LW@|1jYpDZM6r3|%jrfZOnQ2EOtvqLlwmlyu$+D$<>5gKjEZJZNJ zR%2d8b;NHeYsKkiw=X7^=kNghcn32DJx!bJ3nPl@dVV3)Q$Ci$y4f* z8(I>W+cwDcxm?Td+vDYTlloKh-bC{oj3`Yn#jIviVrcq?-8C2U85+RY2Tb(__#`d;^)AzyGX=z~Zt=O0>xdPA_l z-2ak$Y%OslN69p~0KaBy%f+tvIqG75SQ!KL@U#Y}FthMdwTop4Ta}OA%Gz88{~^>5 zCN$Uw{s64b4uvM9@%A1gJd z>~aq2V;0?I1*-4OTx3lpuQN@$Ov}JgwYyXE5BxOQe0$sCx`vn{mt~{{Q_bJ!N*}ko zZk~h4B2&USZqMMjEh12Fl*Ft9me-3KS_2l#`rdJQa9tf?m!&g z!G|6)C+MafG|9M?vOb@gE<1hIK78`uM9>uM$;;+@*blT2pZBjaF}U<%yDQ3M*r))V z?8rtD$0vG_VkhRFwny)GtND~WKGP(sG-zIuYa021k+$isYOvFW=jFRP4A1H^LDp7n zK&tA9M`wNR@HR*LbU;=(NPQkz^fj5U23GYd*e>y`QRDHKH>}rCy-KzPXA9wk91jt2 zH0!lZ6#xq}C#+X<|Bg)6X8)TRoBf;l*T}yu{A=RhTm0Lak+S!OpwQYgCuG3#nb7}l z4A?z?>xu!pPk0gXO66(}!xwH44kNh+Cu?!RJ1A_sTbHc6X91j+#~bMlo3!q(#kbvC zIGME}AyC#W0MExv=G_;p<~sk@<_kcY@ZlcTb?a`sGqj-4W1YTk@xlf3`NHZ;MZ%Lz z_E?@e|69#R`F7o{w=L0iKhO8;7T#RE$-z6a3 zCj}QS)YSshLS3+_`DePI*D6|nr0J=Q*Lrg6J+sJV_mFQUQ7HTdrgQG_zuZgW6?Tsb zd5ph^t8QxMn8`>l2J3nn<8!enu?DZtWof>aOC_d)ZXGMA^KXu0a6$~Lf71CBXnW;m z;lg>h=pMZ*cXwIvt}OKKN!uD*#WpO??js9J_F5|v~RM|Q5XTC^b?BR4Jgpy&=s1vxMvzG`UE0-IVA2VIP9!s-@YhBpr}ko6`j zp*Ve1%7F>Rk2x^uh%c9Er(uNu$2~soP&a&jBI>m?R}PO?$l>u)IXqq@hsPmucsxfA zk7tyr^}Ca_tB)KWk@&C3mE+@5bA0SQ;@u6+-ElM`I8^x1X|dvuz2o0t@0+PbC9T1} zveP1ES#q1q1cA6)RWKkEgwj`TZsbPW7?ZrQV-nQg_mn6kGHxW15HC0x(_v5QxSx6y zimWr`(SYP5XEe+J)kwq_Q7VRV^hO)cld}K(ftjn!&{%`DT2m%g>VHIQ1MUvrD!ALK zHqCIrB7#Xrum%E_$iECjrtzTweDEdBstRYRhjc3(cO@Gv9L7G47v=cpnns>|OB&gy z=IKUS5EQs%>nhn-=T`~qpAK67zDHU^vtUbyQ!RbC{$H#d>|k1>mJhR-DImQxA*_b% zjy*cI@t^6^5ozNoIbwHeqohL{YWowkFuk226oqt0hOoPJQBr?05w*+B3pl`@hWcdQ zE%TRHrx1C1frVuJh)h~@KZtaSxjVKhugN&mu1lHjTR#?to6lvpV2i#QfHOE(Tj33E z*)Hxl;$HHv3Ol2MXY=cdGv!Eqy*?tg6yQceIyT0++M(;uPp_Yfs24C@@uerOw6B-b7@DaR;Om#^ zihUxd^`2SHUp+tGh%ofYIr6!ed}`*%8`)0@Gf&=#;+lp*Le19o50xT}IK?rW>^G@3 zVGp;Lx#K-vlW}}qnh36UMp`9D`r-vGiE^e)DYq8eEA`xnG!|V}#fVwT^SIf><-BF& z1H$AxlNG;JPnKDNO6_s#xi!5WTG$8W5mkp1s^5ve6Rp~(?j=um!a5@BcgG3_phQ+* zKux&KsKyKfZBQ)@M?%u9kiY%vHkvf->wYyyH@{zfd}&%YlDc2{)$+@F2BV#YrXw+( zDOu}+ebGn|fJnH*UjQaYj3iv%< zof|*d8AEGTjJ%6zlF_wNK{T>R{}mZmR7Z+8M!JO?k_H{$<_%^IQcU%!6@v~bOAH#* zBW=(jPkboqe)6eve)%pC8YX7)a~O zKGfd09-0wb*2{Vk22H~hZeU~ul%cv)NQe%8=v}qp;9q(+l}2NdIa&pl!xpq5SjD8M zZ(^-Hll+m}u_{1Fsd;-{gMHA}JsyfEu3UYe*IH6{)-OIxXiFs|INDf=2u!+Lu_>d} zi)a+05vh{H!9Y7Ekc>DmRM&%4D>@2mrOB)oas}~5=Fp6wy1m&MwN9*`9yMLqG!oU5 zPo6nG52#3mHjL_CrfQZ6^ln@CIu?@&W4Aj-Tr=Wr9Gg;HQ9H)!{cw;LP7v~++`J>+ zSIfR9(^J)wO~?t^4qJo$Wv{aK;{P_kB{6DF8)yPPcHU{%WRV5k*=S)EVRF!%HRr0=Uck3u;u z3Dfa^7pGAHtz4NtO8uI4=`JDe+O2U!>f6a0$3@VKyBL|81|7?Tt?yXPiVo-@>Jm)E z)OcOk>KE*UD6@SauUO$=hl37go=4@slO`KzpK5)T#{Y<#$lf6Y_@PyX0K@-i&ZkVX z?hwg4jiO{zlK+{QSQ(!Z4%IZ+CY zBifekTkSXzNZQiPlA7Q9t^v4+#1tZtQ^6i!D5AVq@u6UAHvlX3JA@sw`&@oe+C)hO zk5Pf6LHETAgW5E&NxlBAmLr}gC6-7D_A}&lzW9I`V1g`<`pWYEl)Z;v1#nfe!3QmE^!^hFY_{!2cCe{}lZD)W5Dy4tQU^ z-Z~C=kt=P$5y=MYL0k3fcXTK4;oqTt_Z=N{ROY~mOA)UT8BLDG8D>9LFSC@5{uN#WM7A^ z9!~2_|{tX}adTyXB@xGVI zQZ_sI%K2$KcoNMuerw)dl<4BvlehvAaPU;1Q$PNog3vq}p>fWFmWOiIdFY#lR7m*4 zj)#Z89jy>LBg@NFG4?#pp4(OSjdwvl()6w!+Lw5UBJAbJ)LGK2PKza_ke6=c6q1xe z8p)YCeyG&h;9oatbg0&c9Hssb8NUefyfs(q_196DcL}g2$*-K9KKKB-TWD{e#iCQs zK5XV z7hhGhQ&&JK1C-zp2(#V9(ox^qsZq4sW`Ey|_#`GdIGlHCP5Wb4e7HOodA|C~j#TN) z_yBnR8}*7Hc>+u#H4ijGph;T8|yt1al2u1x*FJb8Dkup>gojkH3QZe8fI zZEeo7B{ZGX6@BeKgle*mlqY5urS`5)bMy-8ARz^TCmzpGpAk^JGE)a|WU2n7$PmK| zhNKZg&94pu;C6mB7CFM&Y>c$3T>-YiQZAxZG>x%OoB9a<>?knH)$LoDW!*|F zCPQ=#=VmNT%PPBI-XJ=f-W9b^p5P9OR772eL`3!5TE>w4H~39vT6bv?&#s`PQ$TNt z{13f}>^3Y1F|Dc|r`NZ>4#_o+7|yE&+=^izdzN5CNyi{KFCQ|?T_>`5?zSYPG@2b+ zZcKHtNJ`r2ZkfheU0a_WYovR9614s32}IesOT9JLG%durW3xpxE62Lvwlq_)i&D+U zN*dJP_J~|zGcsAdIf7L-DWgP)yb>JcIR&ZgX^mwP~ zsp(C7Q%wtlI-?*loS}lW^@luVy$IcNV{XWLuBiu5|VBKzZ zJs7$()1jdm0%l zwsN4@#YxJ)Q!G3EO(^OD(JBuSfz-x`X)(vT0D1jxQQ>Wcp7@*8uXtl)xU%e;4WDI( z|B;cE2=B;fUIreEat~XUGA>aGsx^O=gGz9XVg66qqPLwhsR?PWxSj;q$-YTt)ZZjE zH($Yr!F}S^u|s{-q>Jagt|c{&x5o~(P(Sw8yvFyh3p+`5(JG%*)yILj$oiduRwZim zYTd`e$+6CGx&g41<{RCaJrrqvoqA+(Sp-yT!5m|^`uAS|y-D4F8Dbd|xeq7L-BI{3 zaC@~>OIM3bCP}BU?>SF%LXSIBG(h%wnWCk$%ubOwD{ZH63TZY^3eBWY+B{A`X&?;Y z)(+oH$d$o5P;`x3^U~48bsVy^|XfI1X5;AV!VnjIXyuaFBx{0lS` zX>INpo#cm_7?I9Q$XWkRV?x;G3uK$m1x(>8fvS={8>WH18{B6T=QVr3zt!8PC|B*H zYEE%G@HQ%CmOCEaqF1OFWx%xnTdQn4i9B@TCUnC3;1;E5S9)Djs1+v)b9fUcia8rQ z9o;m2A1(`vL$Eoq$@==!1A2@&qEB&@zk4;qj$nMfs89$+;2eX0LqvU%*L!O==`rfa z-+uL_jFI7E8I!$o(%vD9@2-dcv)Z z6LQ5UClx(RFy9p&p{jQ4u{f?DG%dAOvcO1fiO%xiv;tZw5+&488dtO;FzKgeI-R3x{|v62*Z@F2mqY#> zigtx7S{kGc0Kk><=u(dwu^|mp#3Jj9Kher$(FL5qlpRIt_vz3222K>39BFyI*O3K( z=3ep{u4?Cw$+QaUiZjNH&#>|wv3+h`an_jeS=yB?`?Q8|QwBPtYxGg9#o@EHGH)y@ z60lF|7v}e(%LV)PgM9%xQ+7(ryW;b-6^b;%s0RAMaF!e)nx)Som)Z{1yy6at3+)@x zfI=1`K>$lusRXGM%`EN%P)4Jr-Db43wcki-Y5ywB*reP8MFk$oWKeaapLH%=_w+&P zqc?do!xKDBh#uBmtek38FCy0QoZf;a3i}^#O}>0D5{6c%llc2niXIMf*4MPl%twDL zNTZb+HIw+cvSk%R-p-=Q*)Zm>*5}jhf#_Nh71~#+Ou7k#5BCer(meetXUnV(sDFsQ zBO|y=H@Qmf9w~$R1cQ31J_fF;ldJ1I^$++a^8>s6&CVgHk_gm$tv2gV!W5N zZ9gr5%lB5b>@wr2LO#z7od>zr!__Qi#ZG6=(3=aL8AxZE<;bt)Ug&!U1oI_o&Q4G! z=z9-=@lO2)PJ?u(w)Je`cA_B;NEKP7i}2hO82UMMd&5z;y}1(a`|NIv!4+-wOo6m5i1*5ygoM;B*?5aBz>@Me0He+ z8O{ZTtzMDtCd~NS{zqkdNLWwE7>|1u#rjZ2RLi@_G!gT!3aBPgP_(1RI&>4n^H#+J zp>6(W2-)N0@ zCwWTjpY8mdv#W4+7tTuWIY;lK8G-_XW#g=Guo;PjKzOB(<%Ni(t!n2p!`-#2tVGg0l!&ZMJyR96wJW7??lN_S{x<#5#l01@-pZKaxGi(T3=yZgjfbUf^x zGW6a)lZd`X<*f)+xEZAC|Byy{E4jaf8r#Zrb>&@EcaUTU0-fIIGfg!BG|054t* zN|91x2I+8{uFQ3$GaHS*>e&wTiQu30;yy~8RY~leAC!a=rs2uE(gT1j(J2#msMR~2 zO}!HYDHGyJMEiKyp6n)DDY0k$s|1zL0U%qF^Zt5}fkqRoyKdAdxshFrv{R{e+fwa9 zh-5uYb2FAEz^g|MS-%iErfYqB0=4=dj?SsU0k`Dg#$w^y!JPZ@`VtX*mJ?oi=mQd7 z*9sBCVK)-PBgsTIjjn}|ID+_a^0}AK9V7!7I5gH>T+_l#{1HytKwimGpz46xQ@RZ%{s%jQQ^XY7#C99(T>XkPYh&fBtGhz#1%E*;QmwBSga-+)#Hkc<5 zkZKK#P9B7BSakA`1d&XJsY3_k`)Zk%s)sA0#recRi53rw&Txm94@MCtV;2^BZ zf(`sJaUGlwz>MM{;wg=7-2jM4#s-NX5c@Yk{bA3c?|qn6jpydEW`0I+zGVX4n& z$>-1Txj~W(XUV4Fd>Fi%mIJDlI>q|jpvu|u!Ci9Z-l1OFihOn?iwuzJAXX>@UU%^L zw28nv4v1!^Ai@+V4WcJats0_nYHT}18~W0K7(h}}quwP2flxeDH);n2bEh@gjanxz z4s=?KnHA+2`xwAuSd8K)(E(2Kr}<^w=G(i<8bJ_R9M7c6k4FE-@tUB7Gcy{; zi*=(bJk!lP(L@v4;G5KrtWO#VKc;o{_EZmp6&>%fbq}L4d552MbUZwPbTg_o$o5oU zbiB{#aE-Fso|+dOpBL5oW5}f1Re;;B0l(&kj^GzM;0MRG4}p+{OD3fT;qp`1p?0Vp zTjHpvy*0~O1G3O~^a_s{uP=$ruqpS-kLiZDMssaf$!IX`r$MJR-LNi}kfM+i_|b79 zSC(n@uOdwWo1~Qd{dY}C_``hNfOy9dc72m%U%GXtUbQl$YS~+yRJPapZFMJC;MxV% zRkjO%6`Qwdh6AbnW1^eGMw#6$K2r*^BUPsguI`%_g+(GAUT$wbmvLPYEm@VdVfksn zhotDB z#<|Qa$$;7lz66vtM!xq1)IxLNAm3{~LB1ySiT-_5{aydos81wqZBpQN-?aw)lII1m zuYMK-C^B5V_2&n>3kB5-a{i7a1(hC%h=KURV`bo1*LrXS%=G%XU@4UiM3;zNpe2s*WrIYuh;IT zqbCagv6;azyYtM?(vWlH`Dr16&vc;bbO@w<;`P*v zXH|u1zGshQ^Lvqor<$K7?fHavPK>FK2Hr#)Ar8r_4*p{32=i2xYGnUoNy$M zn_YCx2IUR!&FT`&ZtY;+2*Rg<34Gy}w0x^z0sJJ=+9Xda5)#8$<^}I#b1)Oz^bU|~ zj&_MC zpMkMT=Xd}!?2Ppy0MNo-j2n9*KzSWeK?1ACx(vi8XF1}N0pY~akngxMl+FH+kfVg$ z{7Qx}r%eZgR84Pa#_=0R3@2I zNAStitoYt_X2q^*+U)-jeFJ8(8EFY-;LCGiF(21kj2^SzS76q4{0|V~1k2cb5|_vT-+dLQ%9lz$ zvRf-NOVMm?I9qa7lzeFJUeI^`5A5xdz~blJRg?QKbSgf8b^bL*R+O;Ta;w_@R^jCR z(32A{NluQShPP$_n~yW6cV2#c_yn75*3j^!rykQ^p0g@pE=xABYMbi(A4W^|FjT^C z&jgupkdzt3ey6}uV1(N+v#non=lq)`{KdtTsb6S@9G{glxm}ad`~U+dnv#p_!IAk= zuA7v*d7+*f%8|c@z#MvpyLls`@CWf{kW0zxvvPEWwQ!*~A|^OYU3|3U4vuW*Zv7~c zWGp*k%BlatEE~4P3!B8P0>-rXF%PF~yPB&;SzZ0niALOiFI zc;t7Vy6=DYa**Ex5i1iaR?wFgs)Xj5)f=7UYhKJK$ZRYf5+yeT0oHE9E?{e)?-Ug=;jP zG*Vu`HVK;kdRmq~laRKrieWm*0F51{2MD3Mj8CRL%3joYaF)aFz#BEGHD?%Lt^*hu znwx&NSF@@aA@bQcpo|3+eMrD}(<0-Jfp4^MD@}5~bJGVBW@$~1bqwOZM=2TFlAUla ztU9uHsT=Mdg29wG^41Y5soEwb_8uh#kv*ruo;4Vg@l%68rk^HAVE$R~obT~mYMC&I zd=WkEt9Q0Wy`plO1ydzPUq{fMVp?PF_P6T0Hn~&J=ch=4hqyZ? z5{~6hM!~TPv0#gn0XoYXkc_BfonL=5pGpkV)6tCLw$D=UYr^74?%;jevm50?9p^I7_BN0!`$z)9u&9mO=Gm{%#h9o)*pd<^>m|T3iI;=vj%)MdYUX zAE!+{Zxgg1E#gSqSK7#A=wX?uKK!}RFKuZ2&^Opwb@1}+&;WKKruOz!Q}xNFXy^X* zY-h_PCs2;<4L1tAxD38+1|c{mIUzX2{e8N7mO5tvRtS>Mpw;*6e6e#J{ww*}zw?z>UT)jPzC2-$|yg zVm*v#z>XZ^XS)bfvpumBOg>j)$Y+H58UG;}tAn?Qw4aAos~)?5aPJ_5rjJEJ9;HA( zUZaE-?{Kn;-|s0`uQ;Ff;vhWT9qh#$&|Q7K;cn~@`Z>txkAg?leS0CRjZgdh(e~!0CobbbK z^I<#mMRuq=I7*}zDZIlZ(5wcfm;ip1`4Ixf-Cpz4A~G#d5v1m4KOaJGUj~;?rayLD zc`HXRUNHYwZ$$Fx+9ms&+xR$qI2&$l>0(fiZ9<%o9JUK4>|9;0wRxv5mt!rLP-(Xi zOYO9JD`Yse*!a2DDG~vhgv>3?zoel4eEpqw-7>$hkCngvmY@_YCFq)z!fHb`uar{o zebnTQY>=Dzsi14m>v#O2v^VlB7k0_M_)NSm4YystBshPu#E`CEaI1m9$|iV8e0cqx zcP)aEa45iJw}(c)=Za@#4lLZkoa6ThmSzb4-aKMUWXt+~hDz5L@aw($4YKj3koSXc zq$BSO{lFsFH)JqvYlW#+EBmx2bj-H+FyW4#zsXrdv=F+?u$S$XJ!&dr83-y?NM-!? zCYaBS?KoMk?w}H=R)Pb~^ugh#%$oPTSEEn@Dz*5`Tx>C%JPx_Z0MB}T4$-7KwLl#= z+Z?bB@;poBQ>h^Hh{T9@$wwBQeMGx}I%q5!G)U_?(y5c9Dv3FUy{AO}5aeI@-4&KN+l#4BMGn}*3?0M3K z>3Q}BvY>b)PYH_2^DFgp%~E0eNYa#U7UyA|&wA#IdY0bzwi0AS+h~>S=NmE3&PlJ0 zWExV_mvhY^5uKitMZ^QdGxkf~B%K|Sv}G$A1WnTLMD?hrwX|C)Bufd&8sT{3NUYwC zBi^MV#|=PIJlrlhHqK)2I%Pydgla7KjKmt!B!DSeGnGv*D8$Q zmps=La8AgffNkv*u!rFSWf`M2bA__7U=v*E5A>mF$pxTEGS*%_lkjUMJ*y^R#=^XPr~}ZAv{Gb49o z!@qoG>K#Td$(E(}H{3GJ$@ft&mhZARld;ud(Jo8@ag#8GV#g#$1M4_IXgenY%irT6 z!WL=iIy<%apvu{)!) z_eZOgUgcuR?tLj|?0i|}lQPCGlvO?{li!Z3Tx>c=kp^4)zjCg%-yy5(W(fU2!=Iod zWL+ORLhS1Xcf3`Xh~<6*Ex706jI@4sgT7M$c>GCr0^i-N9@yf@5CjsVh+Ip_2Ykh0}Y*>6+V=} zF`4w;?poXRrT6|Kk=Ryv-}CR%0TYn%sL>_6mwLl(iBJ#H9(A+3Z7#~r0L^Iv_zwU- za2>RM?#w4y4kZ|bhfpr0D10Awum%0t5g*j_RkqmY|YyM$t(uNBWSYj-ZKqQ=k z3`^F`^4Q2)NV)pt7_bXBWBVQQGbWtm8I`T6F;VM}E$wu&y@xDqHQK-1`yk3;q>>3_ zf7V5n(}MLR_Y2-6C$yxJAov+{B=|%*`k&!)7EeC+zLpbKLrJnnmbV$CKqmt7lA*x| z1zUCD{Ogj1iIuc@=!WoHaC+o6N_fZb%-Rtjr2X2GFOpAt2q^IvajJVyBE7DVT}9&? zyNbp)c9o9!h8H{|)z^N*AXt&h?u=hps!Yj^<<@~dE+{Yr=r?91r z=mb*18okC$(Vzb?Q?eB$YV%Viy0@1Y%l6kGgqAF&^=taNT)tTCQ~ZE2`qy6d9CxE< z@3*c8SFP};?!|rV9AS{cjanM^DUxSF@{x5pV=}Ds!-u~LT~IeEV@z>|MO@mWp@O}4qpkM;=6Dg~9;qlEbLey1{I&hv4-CgSbf5){E z1^Kbl)c(5MU{yRm)l-9R2}{Ms3c@YjcMQVG>YL&&Y=p&};t37}(VO+AU7TxgWoxjj zRJmT0`_z~&KJH?XT>?ufi|hhfWRjnI5JpARR9%(GD347c8}~+aW=2b*_B!VbzEQvi z&tJ@9>Ok2xl8P)1Uv9k^2b)yR#>8k} z3baM(IxN}qpnC_;M3a3V&Z?@{Z(yRX5L@y6>XOH_AjEBN=eRjWDrkLy3|dq-@7Cw@lPbztQ-LGpx}dWiog^-LRF zE{<666-=XQJEd=O$;tSOeB|@`835$$|KCk@?j{-cBnfgh^nrAaVS_W48nupfmU{Cv zJTkVc=^8>*pj~wjplrfZxMxXTkWJT;7o-b>=)fO{h_0PK5HX!Whi3(>B!BQ%Mo7!N zJ`l>8kA6Ma&`+e8(q2klbL$yt@|rZpAk}|i;=S-! z%#i3pf1lS^#$YNLOj#OVV+HbvwRo_}+hm zZzBK(eEX(U;NV-eso=lExA@Fs@NIQRe47O-dhE}S@ihHCUz&J=?E(Gf-q3Ass;f_t?#F-OeD=3e z2d>a%&SyG|j(qk8pGiN~3B2{y{J~LM>OigZ3sG0h1J4NPu}3xif{wHX_eFmw!6W~w z$%w>m5|NcFz9QHv4nW)0S-PY81s!t5D}rt2#p?Di;1^u+lAsHlWWM-D`wKWFSA1m9 zV_w|T{z4=#@zYF%f$i!my}(V>4FF&WNE}Ec)I9-KLTkWuHZx@6Upt2O(%CC ze(D}$sCxB=_+qSFD}7kIs&nWvS;??VP2~g;bJC8cu6B1c5j#}*BW5x0P`_nELZzc) z32aq6RxL~tHfOYtCMW4y0Kg^H#|(*`zrUMoO!&VN$EO1s()d->Zv1YSj1-fAx;ewk z2+NOE3TE)RC#u>|l7$Opp zvGVVgplG;a$SG9;${tlY0q0KtUSgDRe3YndVgFvAdUl2!rzIMf1g6cjeuc{s2Jh1e z#nnGlM3Ay8u+tHVjJg-C5`)-Z>~`+VmSNthW00Y>+?KH3agL&!8Y)~bWHdjaf!Hnb zmhrS;=ZJlQe=o7%1Z5gcEVxGhHf~(UK-w_gfs}7bc2~MZS%?67&K?4ah-tWg@6e4{ zrAl0+1`<@2sTqJ%X1C2MSDB?Kj7l~^lCdlH5gho^_wk*LE+540plI=6Zy!z!U57}k zBR`=elXMT)I;W22CB`0DJe|{~jQN7Mtje|jQh8-%zi6ZgY>CCRYXoskqfd*+YgD@n zZ;oKJl5nZbIg~(`8M&5Mgf-|t09n8$5BcG!oy&KKY5NL!Y7IEPu+ga3ipNhp6e zcJ{L9gnYHRgt4EHZ-Ar-c+8bHvOAmit$c6z~UHAzGG-k_R`@Z~I z?O$DgB`8r5jd-Zm)~!WfMX`xNpm;5B&d7*9?c%mE;^uEZSASfbeOw75HAeDMSGimT z_S}R#xWD(IMqne?>Bt>A*Xb~RQezR*)vDjtn1RTkWZbXq`n-|l7$n=cT1_TU_k@DN z;-V$_u}AL^tae zJ0?Ze55~aM#5EGKsV!K1sMO6PnoC*Foawny6Ym;3NrnY|za9(DInkI5l~_O|2%lD&QHlyaGM3VT#A8EbFgE#2l=0rS zFZ$RrUTiLMyGTK9t|LV}(SgQ4M_md-`u4PRwqFe$ ztM{h>^3r@xU*4CiJ`FBqL)sj93ZOB(m7l2pDU*|{EV}klxnKJPe-V;I4v(SZmPM2_P1Y^URAH~h{fu0^8aFr zRBm6jvQg6h+DqMqOFfIx1k=}EE7+Bnx|860L#m&aeee z;@))KC-kCZUo0}2x6VvMt<7XVN@>|fU%1~a@oFIs4kpC!CE7t^tt@6k+Pg&65Va;z zRbNN06DTAm{sgHkiK=%$bdq^bk@tU0V$R3edW*5w3R#Sf5(PpydwJTXvA9W19w1meD}}{Rpd7HD)>wSsNwN5}l^Zn{FL4(xF<87+ zP5L%iyhLNMfTOWkpiW}(E{(-|+Oc?VK=rK^EN&Alo*-DLz7Y{>eH{RZ`@~{g7{Ka`4Gh%rk+5t@>D^{=b#a^Bm zb28$w$S5jH;)!NmlGu{k-Rkc%sK1BrZ5?dRUMpL(9V_B5@%yMD78%KPAf|7kYZpqT z(N`DoqXvN2_G40%W9txmd|qY7%vf%bJ>G-7Hjr2=AI4(W@K@alwZ62W`QP--))nGd z5RFJ%;#c6%*73PTQT>vtq#k{}VQ*&P1|BTFB{zoo8b1Ppwv1-^G63n&}xwDluX zar|_<3E!5XQ+-2Y0!d-h(roI9ueWu(?5Af0GgvJq@9U;irg`&Pcp=@j#Q5Bm7rE1gtkM+O$9OS0TECki2j-k;mQ6c6C1uSuLzO$eV)WxUDMjV zjAZmx2__>*FL#@Dh!@s};^x01<7^2kbp7q@zhYYxS;P1C)?gt!2VBe0{@k_d*lB77 zi3xBA5M`H}p!?OY)>Bj?seDtXa~>v|*D7X?YBh=Zj1GpOiu>g|U}@T23< z)amFhwVqgP5JRPES~-#aU8s`g{gSBlO)81$XfRBm+(ci!iNB!Mt^BChYG_oCzpYVM zM26tc-!=ZUQbOa8%zxD2?Ra;1rz=V-D~&`Ni5(=8>l6}QVUQ>R!Nz&8N6pTjhDuUh5|v)G^=ncE4(=M2bPoiTbU8sK4DynwWO(6>HJoPL(dF<<(l0@j zCn2{6QSkDJXW9q#6mE{x@E#u^TVH6x`3z6WqpyCOpXl0Z{t6Ds-G50qy=)?OOillEO7~7gSl2(0B&<$zMM7Rz^OeS28H>8ev;0kB?ytDEWAa=b{k>qW zTsoMmKl_^GbrJIcdHvm4hP>+C*JJ53Z{<2Tj8jHHU7PW_C~WXb z%Lo?TMJ%kovAs|YF@|y(8sxZ=d40qX)oFl0k|G}??SHtj2x`jqT9l_ZQx1IDHG7jZ z`*3(~qD)+y^he>URXS&wzLCsd4@=Il4mguoD=U7MDu($9Zz?b`I@JqQlj5r^^96>q z2F;S6Ovl?yy#12=SBc5on1J~ctaNy>&R^};Ulqj9OqT0h;9!of);ZI5q)(xn9SZef z9J$+UbEH;3Uo5j^O~fYt>fl77oG}xzOKs&~XrL~~!c!Fx$v&PJENU+zhsa-0C>Gl* zDEFK9;}CvMgxu6UR>0qRb8Gu(N4y)=qBD&hY%Z3h2+D$M{)j-ojX!Ge+KV!(8s@v^ z@vqZ=;En!I>!d~g+%CG%p%zMV%Nr+}37u#rw3|z9`X1}|q~;~w$d9QS6O;W!!2B;v zOsv~0dj|6`b%i}VY=b%_1!|_WxD!GwN-taTQQU!yzStZ8)R{|~@X!F;w5aEuxL6D;UnldzB zs2b7F^#Zl;^ElD~vA=6G9QZz0^wl7hsq0rUHxgs!#uKMH@>u7fWOZk~E)>cKMZ82Vhf3NGvZhd65--%K7GR!oO72 zu$R)4@P9DpTSw)%YefC^v6A|z{}oI$5Kr3LznA2h)hIX_KUK3{ysPR9OJ1?&+D|X! zYuiu8vRYZG(X2ZEs@e&jI{zcJ6S@n@oPhbkCXxoMLQ2{c>QS0X{Vc#m@863Mb``sa zPsBSVwRQf7&0f~LA7Coo!6Jr4N`6D2^}m7{o>d>!6uGc9G_(4Cw=3jF*qc5WZi>b; zU&u&YuCAYPy9=Q(%;8(H;tVjME~6M)cW7uyb?Hp0cK3r+YpDHZPhqR|J7-Ukcdy7h z?WJq>12LKim|S#1m()|&((|=~2c!kF{q^?c9RvIo9`)8#P*NwEEZG-*HAGSG1g><5 z5@B5A$!6U=%%aRgyTn39Q=}EnL6FRx2KSnHx>uk6)-X|xNICeg(f^!z`-DXK&qZ@t z8Y_81-M~nQto!ULXPA9{GAjC;Xj%&*{JW1Y=LlD=!5ud&jzy<1F_JxYcMv%b)3#$T0#L$upq$ffwXihZejK3Jo_Kr?$oiV|Bh)oqM@FnbA{czP%s0 zwd}X8f^R42_BdClUs%uzKaScmr_1wymh7_kflHXC^lp0}=qFD)0hYlt0~mu)kv}4% zP8^dx_H0(let>4mQpALGgL!o&57*X-E+Jt(Lc{8+)wu0KU>%A6rPPqrvnLI-*bkw1 zB91YRq*@;{NXKp3TNW&4n@(7exO2M$iABf74sN?DBb>bVB}7rZYk}aUiQQ}chcIC^ z=|U@XhO6o-MO@O>*Iae(_OIQszVU@&94I=2pRpHc@ zI00+W#kIx>C#yW%O30YG$Hw2CLp2?`)Diwk8va26wZJ3r7YO|M!2kHCaort>z^kI% z*xe+s8$CL4e~#0cKmWpX=EsA&=*(2cDy=hx+#aVhtEi?!XNF@K{_|dtGYSbf9{-(cEA_yPkK*G+@>Dgu-DUb!({!ESLn;fLdS4d!othy ztsggb6GaFwqrGFL8QOj=N!#9{#_4WeB@xB>)#IBd77RqI#b*i}n48BWgG7@9>WoQ* zz%K#;!BPpM))bwdM{8n1=Z(3iaGoS)ct2Up$hti2mifUKp$0~lusbD75XOAF%7E-4 z$ieiqMq~gn_l>dK2cjiy<@Vvicf2*P^Q>Z(edfylFtsbZH9z5gr3Cw}_SQ(oZ9v0z z7REtT03!~>?<5u5Hs~~L^&koB+v24bTnCQz@w zM>tP3W7hJX?1iq%0(D#04fW{MkRxSH&8hX@e z=)el;Uu~+P!MY*&o8FMzryBYn)6k%<8|vPvAxU~5J&Ngu)}$I5q8pOG=?%$!s-X)_ zLofH~a_G8sYG{|!&|uwAQ>vk1x*_?S-jLj<8rqPhhi-b;4RszmAs5RBlNZpY9O>ao8vZBu0D%b*BtnF!QBhDMpn?Gn;3Oyp29S$F6cBNYs3
#O$xhh4f z-7AavWA8xgp}f$j9}u9Y?>O*L&~v2&7DO}^J2?+0}&Jbc9_f28h?JmZG^Mfr|3BqP2d&PuGk z2rMd__7689ofQEy#QO{}7ubw%=wuSmXQ z6>U1HdvrrwMSWx==4K4&=0Mhj7#RFJhuNCdkf%SRFMDEDOx9J%GrkJ>j#Y7ssp5+c z&3&<}Sbo|nKKe<^DyHfx z#nYyW+*7Mq-CPA6)o2x6TU9YrS0T^%D&#v>MZT$GbNf>UYF%>`adWZusg?uf(N)MZ zz6$w{Rq>}2dZ2DSwF<$>_H@S$R7tBUX6q{C8DE8b$EqkZRUB*A+>3JsA?^$(WYLZA zuw-O?fnprChH_41Qa?LL-etlCF)wepOwR=&?r z?Q7p_*tk}zwUL`WxWa9=2Uqrd8x>q3b*8EqDkzrOciOTR&i7FuyN>&_Tu}H^rA40~>dB#^E-)9)Mc2Z#<_0!bmVY|+tY_aEQ z_bF}>1a*behzl)VDU}uFoa$%TdUBa=hdkrkA>U_cM@7>;QEA-f^CRcGibJ*Z770yP z<~DuN&y}9sQBM2Ibl89#lU&QY$Z)t;KfP$xD948z*ToUjUw z!@;#*NiJbwl1r}Gw6%w2iP z+2eejy_|4iYih7?Rhkm&DPgNdjINy~WGNv_G<3R_nUGb4tkes{wK`uK={iJ+k~1OV zFec3hgzVAK;M!|K_7k#?Q6|kn6VgP8&2Bp(A;N{3V!1Ll&X|4w9r)w!z40EBUxPnx zjHe>2e#EV=yqg2Q7`PLD&c<1H-#J_SVP8Yl8)urd&OkrSttP#4tCaZkVwEJ1@+$`2 zd7tlIXCNt>5W((!jB~7DZH(n>%7aCOMWQ$AvBw3!AQ2a&7y2 z4aRQ-HiWAw^|>ce&f9958f@~ z{|3{#ar%tecWVFPYxvUTi+#uV^kTwdn9T2e)9=OKx-;;&mo6@Foq-;9SsL82$2zM; zr#tv2*~K+cTnm4#2WZV{%G*w`u`TBeh=UR7tzKeowY+87slKbF!w=qh$Nkb_G5@>q zK_C^^^4#e>9?dJO+pQ+I%$w#LEO|ZC=iba>xMkzRb4)(pXnT}Web?)nC+pljTIO!= zyGU|-AD$zw?R###efsRXWhy&woIY2VLz4v+c~e7Lu$+?I>MwW3jZ8DL<4yCkGRqfc zIVO4$0%dhIxwoOYp^|R;Ru+z4kp6|4?Y6O`iC}3r$@*xwqd-E4pvI^WGT( zB)*OtF&e?rmU6sFqUeq)4dOrRM^T!#Pf8Q7z zjkxib8obvr*4X3I<1BQh?`(UVeT;L*jrW;_+p4@t&E@GS#ESg&5@Ziw{DkZJa`k*m zEnXM(F}8=m-c3RV`f~01=1^bO#_11EzgOn9{l+`JcRt9tdgtmIK*68g&|HITl^95| zH;itSLuUY$!&$siGD@%P0?yd_u4%Qtmq~o<_3c||2G8fS;ZofnSEV2wR9`d<-bGv8 z8)x4?W4g4pXya^(0|tFVqN8zDi;NjD;FV5xk9D$Rw3BQx0=)al?pEKAZ0@JMUNX=S z%dox`0})eytyN=FjS4yDBt(TAZS~u@?sK62BJwZjurjkuWaeO3(?gv}>V>uZU^-$O z+MZbdTJtOO#QbO$c5=aJ5oHoRoFbU}ZuNI3$}Lzhb77Ys37Z6eQF7*KF6hY|*^n)G zakMt+u0Ae=^YMg)gsbE!{~(Z34YxV6A&0Qj@PJ1r9UtHR6uaovlNVrO#t<&bmrTwE$ zDhCye{ zd6wkFsK$mul4yojvMx(L!&UNZS(a&33s%?Vn$>l2WW&g45p~zfc*$qDN}er?h-|o? zFuNo12Om1JSm%`ZaFsk;=8RSDtUN$uWW!B7b)(1VeDWEtl4r|&kqvIb$gR_!uhU9M zxJsU_)7~7H_SjJAiG+l!pypyoVc{_ z=(G|Nu99c#wBES1KhtR?BwQuWmT8TFW6f>2CbD5Z@u!EHvAPtA4_C>vWhpJdKb}Dk zymi+(2kD&hY@PE_!cJf3Cj~Mh5+AOTXX~8hXUzF4om1k&Rq|||vy!kVtUjdEN=Ud$ zo~_d^iAy_5rWQrj|!!+4RJ?%n*B%97db72!|cPL5D4r}+%C7Tk;5>ary9@Fc7f0W z(_$IihtCv&qo#^&Vl)GBpn`8v)!n5&yk)=mdpU^1Fp;7;B8m{1wuE2kXn(zprbA$4 zK8Tmwc=?qF&uS?mGA}hI9#Tv`kqr?s!P}I4$tIj0wYwFindlFF)v`669=ZZ$z%@-; z8E`p2HF=!NO5dr;H$T^#pPS8(NB<0{Eq!O%Y|>WnHp-qZBn2(Q1ZPh@{8QcZcmvsEYjkd`JP^V2U ztV`46Lhx+pgyizK2MNvYJ=Y`7$~@CvM+!8vCQioCP5`m_WI45skGwvR4C?;t&T?#9 zEP10gH-tXH-Jdis*y(6p0s@6{Q1W>8Qsl^^aYaJyi!g*vkH6>01L=_mlC5^u4S6a( zKi!s|vFRz~BQT>7T-apYo-XQL|8zdy88Gd8bxrB8n||B3_pz_b97%tv`##OuQm1++ zZ9#rQ#~f=+dS8e7w_5F|blFGa}}??}m3)f!2q z(^gll<$cNGRXi)g61z=@I4ZWuM?vWc-wKP4_169JcCGkYm#|Cy3f4=(KYia=y)pZN zG)4RIF(JLXeMfX6WPDtQg3hFGlj?#Gp{$1{TY3nktHQisYG`<-@uz_@0`4$UR#KTb z!RTaFR5D+|r}VRG9l_hGYIr786emlmG0_PF;mnT+%4lKHUOY3r**r77U3g}BB|O`k z+P}7ROBMp5@{BGF`&Yy3!1(o!{nLXQK12h3XCyzy3yO(e#rQ>9+bX7ewTISmSlIdO zFAy(3I8Ai9_ZGPJc(JIrQ>~hHDgIaXgA96%7x}uK>hVdWn9w8=ahI{`n(kdKWP*VTbHPB@C*=BT z`xI>P{Vl!#@{8dI5Z%#tl2{!p>62&BjTrqHG%6}{0x>lE`5vR-~n{$MZG zS8Ll7(hX;yj?<<+ivV9(<9TQ1u;f|JkL&sC=qB9R`33|7U^(M(k^K+B=am!Dz=;mP2+*o`Mli z*YcImHa^!2!)ueAwF9*>zU$d6U5X6pJ@tm0YMl!)3d7%pcP%A)-C;Y zy%@%eEV2jGjBPqCh|Wy&XtLfi8G3uswOnZJ^!i|B_#f-%Ksa9~^ycWsf^WmeSq ztA#eu;ke1MZqF$Ar?)Ho>0RpX=kpx?ZGG6>z9S}7oQ2SM`-!p6vjN57obrczA@S__ z7jtF$*yrPDAL*cNuQ~(rU?C=X#Dw2S0Bt;*=9r9vkGz9%DpHhDu*d5hXUf+Ri12_P z<7ElAO$m-k$AMbVsc#szh@XsP^mkn+`tGQ?Yu2n;#~Pra>b_5o5g1KYYG2~hqp>AT z@v%o>-xR?`>4!xdLnpRG7^ncvd#9dOO>VRI&_K-jx}Vo zsiSX6I*o|0rl4+a7uF80C|D}$X`HGd7K&@>&@Pq3J6^Am) zt<<^$NlA5XD-DZb{HjZi3-1@>@+NjlD7jvQETwU$aT+A>ukpE+2$3;5-GaO*N)8Q& z5%$`Qn+*<2jw1r>^*4HIsL0b&)j<4|7G<>x+og8=I>B)iX;N>8vN;n~-Ir!Z7SyPV zHRY+7n^R$@<+;|WG-&FFo&L_R@)PV*vnQ&1+DxxO+L|=EVA9kFJ3=szxmiuT0grW) zCJUx2#R3fcwM4Vu56820VXm|Da16l|=JT7+Zy~>h{^H4Qt9UYYeDDfBxcFvN7XO=d z;aP^LlSjKL&}Su*F!F+*Ms7kQhNZl0x?x87Gg&2{rem;|D-*>F1D)|*- z5_{&RCH*;+{C;B^qT`$L=AZXf6i<2EDRBry#of5o8{3}FkBUb~!Hrm?VS3=4!{X4AmeYZ|_`odREf z(eO3(JR82e=hr+-v9pYQ!bD)v081_d71MRIaBsH*n;7bupMWo285p3&JOG=qQ7(h@ z*6#iEEN#;_bExph9k{kqq7{2wOEKiMbYjp~8C|8vY@4)863oa>rNRrrig0S{>*rCt1%|TWoucD8@){IfN|#wvw4$2E2YBQk;`j2)BCMaGWFhDsK;_A=;XXt5S5Ob%mPcayknXPr0Is(#DR8$Q;P= zQcS7HR8(u31beltUr2}vS9`spB`ry09xy_obE3OYYpXY{X+F%gR&UBjvuEi+vuPNk z6&(KJj8>fa@Hf%UrS(E5@o^@8kN?n2_%9!UvnQ!Py@lG{mEyTXn{a%Qt3Ly_gAM_< z+JvJEuP6y#?nj%npaZ_gni9bDZ`>r5abd<$N1=D9c(p|e!poz`>)iOfbQ?{B6db4e za)yNss9yV^&SperF|!sdIb=0$ypdut!%TMH4SEsE@-vGMj+$AM zeJdo;;QG#j*ml=_mYlT3`TD!ohmF}_{cXMGQ0%BIbSemJOu;0lwOjVR*WayqTCa@= zM@84ZSq1gZN^yTw1NA|Z`I;#&mg*)jK zXW(nz-jcrHlC<=GePSdpx4?ign^^fEQ zHg%jK`u9E0$G@(q@u3j7I!5%yO(zE!SELb@&4^Csj3tv0agT##d@98ul{E+YGM%X( zRQFAW{~y=EkCP4@MlamTjEqZW`XdiyL>|b2D4&DI=OO%k)#7xeYW@H=u}NxAjd&r= z!A6I;X)41WDk-c#GrYEaj!*FkfN8#=?3EwzTE6h0-sJXGyY@#nxzBOepe}kq^tDi% zhZR$g3Ru`xFXIC9wjwv;+!q;(b;WR@K8xG7`C^v(K9GcJ173Ec+xM1Chi9*>BfU>P z%Q{j&n|CSl8IH#?W;kAE6kp=^*KzOhTPXXJ_ycn>gPG{X>YadJnPRo}J=w9hV~tYp z*iE`KINv%F?aXmZ3aeY^Xst0rZVJBz|Dc?b4CQkrl+XAdMf&)A+8f&xcI;NPPn1g@ zrGG}o(LaT!p?{R7e>k6MZ=zyuyxMgr+Gq~9O1*r)SnAip7&i6e-!9aT_G~$y*HfvV z2eDFQsGscC)K9d1cK$)+$5w7j3Wyv2X|%|#9(maw&%=5=Pib0vnr6IKymJcu<2{A` ziJot>J)YRHc8L(M(Kf;4_KO9OY|q`X1gb@XPGua}+a;(2yMg4?$UF?~MbE&!e%IRp zqE6mcl%8M?)yyyF8T7!5@eYVroWhCL1IeKqBa^HuO&!0bsh4ol6O}f`te@LaOs(y{ z-Kx`P60s@pv$N;mV6|REDDTh zW%=+fkRGZK&W>FH^~3jOromr_?aHXs)b_$!S;Z%Gg)E@Ab%k=iq(Z)bSI+L&@>YcU z=&aDMLj`*~7ypUMos~k*`)mI_^i_Tz8pbur>@G7LAjO;cVPtL-bM%fnm6`_+nZ>X$ zJAZZR5|OFK^@$$NWo7(KkAdq$Kka4UhZP2~v_{A?7>w`G4{9<4SNyAI{+~ zl|S9~q=cmSe+)YR;zMHZEkmJT?Q|`}W69fmX*-ODNPkr@59!trf~a}I4xf<$~Z;#aap>Qq7qyfnXqL zR5}he##-CO7VI0x=qlhKbH*b4&oIz@+VyM-peW9O9*1-r%v0N)*l$O?nTstve z;s5)|pld5g2lKsc-h)6%1xwdqXSh~9&bqToR!xK;;iji{lI=Pi@+decI6qk>;`j=~ zyj=aXwD^D}k?N8q7`-ufxl`1Fy>Ya?-rwbZLO6)B9X{e49dcn_1onwO>7Q_`B`E8| z$XlJ@%@r@~Xbd%pKC@vW^zDL09kag)=E61QV!0210s&_T#|BCfB;x&^WM+r9DT~;7 z+J9(>m`XRt2;8hK$htrN{JhcZK&PCaKh)>voUVq<=mt<`_lTZ8p8Z$!^sz%da^>k^ zRv%9ET#7qUnaRWd(ld$S39sn+!M=ssmcGnDSEy}|0-cB=T zA#tb$RAXQ}IHBGdc!dENuljRJi}-S@@w2p=g{g+m6>2+k=;y?GI}SZ4KdD$rnb%k- z`Zzy^S#o)2IhL_i>Jz8nK>dR$VRZ z%+eZGi&e7K`TC?RR!qA8`$FgPEsd!d=ypD{r4lOv+d)snTtV?y4rl|2TG)$y^`Eop zyzdffxIK^a3NFV=pRKIj$l(p(ak{pbImAuM&Al$>Gvrz-=*>+HNk137B+jlbr`k}- z+bkt)(B^rj9T&68O#WK8>U5$fD{HN!YDX$rZLW2z&(LT3W=*Is*zSB>NQS->YWtSd z)_tESvH-_1gE1~xvPx}E`An?xAq%j=mIc6rHbyp9qO0rL$}vIgrXr* z95YD_^Pf6jEJzV^4YRmw(Q-r9?y|J9vsyTKQCD%t2VH!b<;n@v!XBhYPJG=h}RO?(I3l3dmeH783rRM7)jg$Y!hXUuXm+(#mf zExb2*=CKCiOLb7H6oq-RHj3Fk9d4LwnM`en;n>~KnIhG}SE;-{s2OQEbPBpw1!|p@ zm69kljmC&=xcw`?iC_Xg)ynkUVaP39t zZ2!rV-puOZ+KW&|^>A?@)Y4LXF4(Fp#pC|#iiCLf*LU}waR<} z91l0QW}InF7OlBsW6l?%Shy;a?4q%Ped@Irpf%Rk7R@||tl@+#x_K|-SX!kmsN44Qi&XWGOWP@`!1DmB)h?%zc45XQM zCr41M2`r2S2DK=U>SIT>^V}2{wT@C$M?0#6XL4LrjYNHyWeQC5%#4fLBvBvQQK_EU zaZ$ArwaJd^;PJ*qZI!5B5*4fx&dY!Z9*u*WMPn=&fEtU;LRm&&Ltyc-EZA!=LEgxD zDwX@=KM-t0_;R!2L{KOK7#ecDFz%oR*T+)T$EUJ%`TDHYl;*{&d%AZZqW9j*{Y~w? zm-w4HcrWlbWq2_e^b@EE&A;+>6;F=-<4$jT|M3J!!_k>2$i5paSpl82v!6|UUegl) zH6Q=wk^|HoweMW;6=<+zC1f;Ko(n2uB%A?@r(gHq;q`hRNrvpl);j}%ef_uL3Y4rU zOJRkuYSa%eK_qD9IycyDm3no#VP|NoMn)(GBkt8-el=3ZJe3C`jwb-vvW!4LUu;fGgB zr3F%)X@RR8=shV__oQm!YFz6K%!YfR=4d*OxjfU@PT-WZa-7vZI5OKBnXL9VGPExC zu@%;`S_)??t-KHfQm{mT%vsq(zssWWrWY&`c=z1{P-Ug~X0rFG_X;7yLg_S2kkR-R z8W|=Hk9SvSvkX$ zPrpsQz8;|oYeFTPFp(CT0F}2Y_{>yNhDug97TNtKMLk|Cbqai|#8PZ+%qv(T%iS4x zfhSaH5VLJ1M@S;>S3;(o{r#Jd;#(K!|AlQY@%8d_(Iz3uK{? z!Z!BGa$MM|_CLMY7>TTxE3L?SDMD&~I9ju)m8k-1Zuljo2_$sHejz|u2I%g+2(Oli zCyI6csNka)r8oSBV_nGj6ycir{?$l8l&mbv5Z4ki8g4ZN7{*3nBE5d<1z8Vzkj|=N zdH{4x-@2B{&fYMDVX}#kU+0+P)&PQ_xh(CGL^k+$p|ujkams7t0Q$DMo^!lGBJ9Gg z0`iQ$X@cy!Z!8xfmtd{{r z(ioZ{hLH7w!DO#|s?8sQ)qo;u<2I;s0(XyvnK<$z-LTByuxx)_j{nO9yFG#X$r5Y6 zg{{4pWlq6O8J=ZSVYO4AEX|~ka@^vYxgQJs?Pr|!6$>G$(v`qM(V4?a8VyAAzai?emFDq zYJE=nkZq|4;AH9akf0(ci4SIHpL2v54Ho4)U$4{jXDF*GG<={Q?{J~!lsfxthZ>C| zLwB5>4Bdm6`f9V?1Rs|j*)rGHk1vsTS1r`G2$9H@ZVh8PypZ%;gTqI1L?-+u3I9OC zrxLzDID95NdBQyseptfi2Olq|B$(b9+T1f!Y=UCpFhhjfgi0*x7knVu|5zV5^`6hc za-Q6JWD#n4L_Rbrtzii6_X$3b-XQqAECaK-;|$Qs!X1sJbsL)Bc`gRcBmFisFGuxV zptn9sjzvelSP_qA9C2(PVQ9I~8bZDXTTLB+)=u2JWk&l7h2kUS*iGJq_}K&ioxQ3!3D|wMSxj$ zYcPwU(-G-<$Sog|^nKv21@Sj&JI`eJE5&(?eZw6uPA2nJacHTTE9)cm@4p&cc@1rc zY1MT+7m%uEh48KF)yiz~_#rpz%%@xiOW>&PU~Ip+068o@k_#6&t8rH@s`v}RF8lp2 z_XF_CgT`Zk>tI;pK$Z=g6SwhD8bVh{8SJov9>bcTkN`Ibb2cGFNEx=pbH0Y?FV|9D z1&+ByU%~5CUYQ`d)d?9|l!!Iz{*R;`T<|z6$Lh_1OP+$e7;RU5b;-^pm_x96YCx4U zpv|-XNU@vGPu{QT|E$n>)YC=Y0QPanrOf>`@;^r+7cwN;8))z~Gn}3A-0+`9uH)zQ z#CMSUe}wTt!*03j3hBWSR`p4^2HZHacaSJHL?Sq^Wjw&2pg$QLk)@N7DJ*O_2qXwo zG|4wySlmXnW&NMi#D$i>rc!nXZ>MeLwY(%)g_vGV#jNX2y=%-u6o#>i8z{PDvl`uH zGvSZ?2GYay3DfrCJV*6?4l&q6cp#HI{<4H^h3T|kV#<=;>MR z1YrYex49H!x*)3;IK(#s$+jKpg}+PN=VxU324HYm*rh|(o{S)4)6=t%T^WzFz@A%m z|AUP1Ar)EJ7#VPsa*U%pDJ;u7hkhakWNrq!*v0&@&T#QhG5i~NSZEXtI0N8H14mhD+iu3`nPBfn1 zzm^7`<9Rf$f%CY*kOtnS8`!@VR`>;QxLG%#U3le!B>YQ6YF>E2_@DdXWTZg^MP$W& z)Rn21Sj21fLFi_V7Y1dvkK(4F&_@*n6OIEpBUb3?6rtN|Ri3ZDbBi7UJR z9psoATP&zve_^`KJp2DFYpc~d())py{}i50H_+El04pQWGyh=xEi`)YrP&j;cYicMjoMzCM;OQxw6O-$wu&vCr!5z)86W%eHh&4gwDYYV`{e6FS+P z295J1PPQifPvg5asjc{9)`Tph1>(yV=2&3$aXM3y;SPqD^2R~vCg{@O^Go;$K2s^r z^=o*B1FLv4Ee1@3LRQ?z9B!Z&5g&ePNy)NK%0*&58p zcTXsAP^wf9{RW(~HRDZIoTHIJSxcx&WQOntL1vRpefy_Khr1WD8VfB!)}qJt78Xsr(Vx4KIQC5UELrMi_5OM{}NfzTdj zd+L|69dox-Ih!eB`Zu%3$W>D*pZ?7P)|{NX>FJYMmFcTySC<^CX{NPaAlORHOXG+) zz_Xv>fWfMPKzf2dNk%qgI{4Cj&O8^^hKmMC2g5}}f=g=Q zWPimu#a>u9gMZB`k@5T2L~ltW6QK?F3ovBB;=P_abSmtmjw7W`S8({j?w;i&F{%fdIdDg! zMdtk88ZoV4#LNe~avpPpMtG2eoT{GP(GLmLX;w(u7fkn$n3jyV>ja_dq9yihU81Jz zO+$rjiVXZcP%{Re7n!8X(qdZDRz54^_pmtH*=DXM94so(c+UB_P}#u=YP>yJgF67B zAA8Tm^F)EG)^56ME0>!!>XYp>-L)y0?RRZTHVCAh^O?FOp1PTI^^fKcZ9=6Le}EhzJrI)jABN3~whIbm<0L&dHmF>z^(nq|_mrqR@LtdvL29 z$nv+xVsjb?6j;Q*?v@5>D7*EKGF<9|1k|rwO5n#1vD=Hn11ns%Ac!IS zk(tzY-O9SR$06NWDX#2sOPw{K)*9e%7*lavu#R(aA;HU>8-iIwWI#h1{4ioatZOOi zX#b@!~|?B?E8ah8`cxy?P%b4*j- zdKVG|ef+;jasI&_N3S#59uV+8%fRtO8@i94?53exHmXZ#*y&KgpSKxQ zkT0m9K{yc0)G3y+n8FdQH-UjZNy1a#7jXUPDIApWX#5ID6vM0#c#Y!YyVgEEo6U9 z8~hRU4+VTdSyCua$ry$8Gn@8_Bn|uTS1{g&@-pP7(%Ty8ilM1?+WViNy}qs**%)w$ z7TpBLt5?4l!UX3*TdgYxVe9~bj#Rg3CL~A6mFTySei!ohTmD|*@Bby4$BBbxIG*Rvk#OdJZN;5A*Z(guval26zaRTg zGN7dHkh$wlzyHPj={fsCM9{ zKPWb!|A6EOgiR7>bqg;y8EX8M>|~|r*V**{>s=iUACNgJL(Jy#8~NO&ZsA7omQ!ZPMd{e{e1ToWmnEfBrc^Lqox3yH(NGafJx;fvai8QZg;mH4O~F0d_z}9W45kalW)2y zx)qH(We{c9-utR~*q(W`ivxX>C3=jxgwWdZ7~TmM^@3q}JHNTsJBB-%>6m`)3`Y}x z{rOwR-xmJPVPwxNnk+_dV*e6(!~Tu_C-3}g7LZP9r9cUMz;i(tT%8B6hYdMxfOxn| z=Lkl3WMtD72Qr5agTtcvD@_En6anNGG{gExWI}_R<#y8QWISAl_0_bDtN(b?LphKk zg*QN7jLMs2pK5mQms1T#RAjjX-NFQXx4ksPS-FI5ozE{JU)v-UTF7Kh-6_Pv_$(xB z{ogNg2HpjxL)zK4>>;Dmr7UZQ32}3;NwnGv3)550PGjv5J|9fu4S<(;O5+Nr0~aSE zuj#BzV;s;MsCFHWN-q72Pj%~1#FiSd->2@ zw(p>JP%c|B2SOHBrvJbq|M8yA!1qEK6=nPPH#IcyD(uXmzUgES1u{rEDKZbM2kBqk)TehzOUhLmEfGpz$_lym z23DJ~o_4AiH$yU^ z4SR*(wFmNGr=EUB&~okR>)L6P7O~mCq9E4>btE51EsT#eNJ#_uhQ??(0o|pFe-8Mi z#GtVc6VWiAl>YC>`tE6l=JJ#l(Cocjbs}RNB%^Y22-s$(L@jpMA{mXt>fKpL99+X> zs!ut_m%;HCs3&bLX(hpGNpQBTJ|yh7+nn@^aNmfLh3K5?(P`c7$Nt?xI(nBZ z7@Y%2+)CNd(3Lk!wUCb>OxhA4@sMWK9=4H_st_)IaiQFMBDUP#cXs>|muq8SP^l@B z%B9MZr1u*34)t}Z_nL&NW&MA~vWt!T+mkVHCY51t!&!MX$KqxtPeUI*X+KvB47kao zdVSr+(SY!Yo>~9#ZqC4YEX=Z@WA(jZIX4s`E-XAJWM8ffYN0Bdv5nZSt2|`nX!LcK zxfL`5qUJhKpv&CSoUcdk91UAjn4{Li_~8#7Ko5O_&x5`>APX1;HU0`|IZ$r%jY!E> zuJj9&gCjFIv0ytbSP16KA+g)46GSoRx5AY3-qAcDzn#>D14HX^HNyChi{5OsiO$M@ zGT_ooXJrF#ty}mEEo8VKV_`JBOS}wAXYjf8%zWy%LXYw+cn_Pk`fjxE_P)AZu(fUw zK2JTTxzE{M3=?Z_OoQL#7G74g9cKcxZl?Z|f+ls91{yjWhn#)&%ou!RIxBaMEMVV$ zw<>d7#BLyK$)5d$=%z8h-TFT-QEx7=Cz4xcP%jGxQP zo7xH#=2l``@|%bt2$%OcqCNXrm7+Vn!>yO56Ly0jr0z4o?XtiOhzugQ^#rUt-XXfr zGt*biOwp6&?b$lrA<{8X|07Tq?KHP@9c_SrenJ;+6v`6hD%K9_(MV9IW|%44(j^X+ zo!AE|aj=sap-vWL${WOwA6i+{8$Q2p}c|NiihATVx zyj+9(7v#mIQCcwg4j;(K_>K<~^Z5 z@=1ruC&`usL<-Z~-3GNUbTmf7fg^TwIM5V(V>##o8$ck;+*`VX7BiU=~>R?Jo-#?7xc>W1I1;KE4vdEGNS_cbl)e?AtTp3K=7JisvIKB zt^QGjrJ2~s3ZF*8n}-l0DIAE7qB?s_GUFkmpV06p(nZ$GL{a&)zY9mh8Tj}d`T?<5 zjpIH(L|13kYk~=DAquoA{xeJ%!Og1p$v@~d zg8akty``hczvNJbMi`@ z(&Q4PkW<)~j zDZg5mAH6)EO8HQ*>d0~A2x`6e1Hq7<2o*4m`x!LZ^8+LKBoX>DCuJb=nVzwc^^yoS ztbBw*BXw9lk^|jT`U9O=P6FU`H4k6C+Bm`Cm~nz?9oH}oyX{P4k9#`k(vVmG zP3R6p2#N=W0&d-onjlPU(^-`85ueqPy z-(t*vk#5F(gDFI)r>hC#^e!?22q2(OgtWs!nWC|V@-=f$C8p@edJPK0>0&61#rkSjtpt9hDYwc@YxH)Ebx`PV282^97zND* zVbFvEHBm${y9-cLul{wfmM(8^u#knJCtXIxy0$_8-s)a-IQb_mU1=`bzo=@f>hUel1;xheQWUMH}HGyp!NS2j4iR% zp?*A%8g;&FF!H4A0f9rMpri{Elke$&XBPm(YY~F;9tpzc>Brs0R6p6 zzH{ti3zIXwS4muV9k-e|--RK)_~}8b>7JxsJ7A{k6M?BHK7ZkCd#NK<_IC=1%_HO> zHXHr`wli97%hA}0p+l+k&r~Y2{|dSMZ;C7m#tk`FRZ-L3JT5 zs_IrB9u!QZDBj__F%I`!w(^x?bXhqxF@1IjuU|V5~dA;l=ip{WXoRfw3z% z^Ofy+QNTU>HDs(;d=v#dIsWM81QD_=9@tP#72_D8@7U4tOZOO-kOGrA4mTghOZ*G7 z5`4t~I1{JkA0zW})lWXsQvaD%}tdYJY}I ze!8^>ut%JLWngo`#sx8Nn2bqIRr)y|lngo1xub?qG0xL!k4ta(ngy#{gnl_fRt>YH zcGH?s$n7;uZ2n&GE8>fqzo#H`&~O#s(MI5KR1S~Z?TbEj4XuQ*%24keltn#XkC0pa zs)`kT@}JU6dzWk7tc1wiJT>*U&J1)B`$s~<7+MMKpFJeqcd2JRy8;65P4=#k2Mtt~ z;F;MO7I3}#DdzG+A&FBxZ|3z(RU}Fk$B`$DR&faO@rz8}u|Q zg$Ctx(G5z`4U#xjJ-&?wB}o;YxGJVd70pKvLGgNhud5O1II+0$`=L+^99f>1C*lwH z>m$o#e$LpDWT_>QTB1~_Gq8r-R`DR438Y!L($WVParMbfGZKY0=)W42Py+WrJk}_@?WAH5y zH^uW$n*ETz`gCd3<36(IoHpto5|wb;sGVM-z5ty^fiBV4+aotA zT+S!kf^XgK z*id2Vek|Pokc6sf6wcw;;Gw5Cf`@i}15-ngbI(&N{cJLo_M=k6Pk8tCpC;hAQMc`H z@OK+J6Lo5?9BJxNZeLD~8Y=~UeA=j^lZdL-QD;J4>NA0@6{NAC%=2o8lp8o~P1kud zFtxWq(#|1mS(181-e@ATEQ1Pb> z2E`^yx}C%RZWyM)7natrus{oA#J5eSDhqHc3WxM zsV`-?jtF);6P{?Vwn>^jZKdg;UXnCx+Den89+Nb(n$B2Pvbt5$z<)e*niO@Fq$wng z|M&uI*QEVgs37kpnk|;6`C843Ksa2{g|JW-LV8_qckPwhZ`2KGb6OJBd&CnHHek}q~scre3~ObLPI0X zJbhep!|pT2B{m4}mlMxctai(xQ8q4ZvR3%9&cHd;*w6z6Jc%?b-=Pg12thk~j!jG4 z6hP?a*gy2CDfea)H=6f@*mY?5)Vw#9@czDepDN*D-lf2|K|u{~n20;z5QyqmH(y7I z%34Rd7bWVn{mq0~RyRSPb1N5s4;u$_wzdlMqKLphgg|S%As;U1+@a=1zKmESGsLzU zCMO${tU^p-k7UaHo8@U+B}P-V8Ww@!K-UZNLktP|H_I;VAkvCO4*J@Ttk99mh~N?n zFa)?b;#upZ)L>v8;}i_k@RVCh^L3Cfk7U>u*u*PV1>`5_S^`6#7j6C3wUl`gJ2vvO z&9$7@)h1*O$9h7Z`U>iUvYK=|2TKi);`;(N(qPc0rzQ_m0Fy6> zQ}*|7mZmto_u%7Ytt?k#OIsIGFh~4lirm2QzeP*4=4p%C(u)x0taY<#fwpM96z3zB zOYC_U;bI2P@3Yvy{PNRCwQKE?qI`3L*XFc0*XueF$d%4k2e$Hz3go`ay9rlGJwzZ^ zl1R4^$ko{}YP|-d*3QSPK!{e!v(1LBvs!v4b1ohZ1Yq3ycR_93x?utt%v1?DI0L_@ zyTBGlynP}pV8p`U{jjpl0Pl2IbFyoC2O7s7`?~J?6l;53L+_;R_teb{hGf)`|LA+z zc(Win(Xu^hnF;u>qo1;%B^l(R2S7kR<)?re{?Y0&^N{%(c-D%xOxOd!kK8r0lIav#~O4 z%3c>Md+RA>+g_mhS@B+=P8r|N7*NJ{%o1Zf{2968ZtjH{!-Ed7Kz_NUt<1MES7P*q zvXbnwChTuE&|<8a>*DlC>Jn+%&NhlGHpQ)5teX}J$r#x)95=mc58xSDFH76Mus)OX z5pR+8`!x*q<26*e&N-rV9oD+I|AOyfHBB53-uVcwwQ$8`f%Ez0lt#qoHH(AWp+vX( zh=B6V8N_NWGAXrM%O^yk9IYInT*B2k-37|!Rb~h%*V%xIb*ewDv-CBv;rnU*P}5w4 zT+C@cOA2Gx`1?cA6WA@fevx}{cxM;^mTG-H9j*Ty$)W{Y)bnRa{ZfWqzs}~swCi>? z?0Ya~+w7^guv2Rml~AT&J{WYk+S#G51oq)(p4oIx3!%OLUNswBC^w{zhF4KTWK_3) zVHmcLnPtktjB+VwYjR)@vlQ0)meO$60qhz*4zHds%t{GG3kCifN+ts2bX7I3embJa&K!n`Fgzn*4%Yb=2 z%bvq$;Zx7qcM8^7WUu%vMatQpQa(B*Ie1ossI(dXj+S#k?Xf!Ph40Rzb+x`}*7!WD zS~%EZBYDu^VR@Wl^ex}uRBuOk{3DO;?OE%uO>I0^ANSL=1XW|!VE-Xn=FO;KfnuA! zhCR^X#xAN#8J#Xv$Zz+;RQx;D%5)*=`;=61Y+C;}R*nQ) zJI$r*g>m=t%^EO$U7O_tj=f1yVqV8ue}oYe#&3%^*!FbrH6Kzm0@l&)*CDjU)g6P}b+9 z_4EBt%I{9v0{(tY+(m?K<@Zg#Kjkm!wi%Ah2{RnKNq3#Jh4`7|Pp6Js_YQ_O86Vb-94gOHk5YrA91~_sCeWJH%wZ60lhZhywTk+b!*lYc`Jdd+Zju|PLE`3HYp38A=9-vWn0)pOUksax<8mc+#gavJUr@UJHKbMhYz6}w-q z{nAzLt!MLF;k0+R=4`%4yaF828~L=ICf-@5gGSuwS<3g zI>!@UNS_AvwTV&q!8!62t&o$%?u!yAOB|W3)lnO8;lQ z>DPem7-SQ1`;rwHV#8m;Qg(FCw9m?TsjL4vo+FQIsYueTkaBh-oi<1|LPA%B?AOlv zxK79#VkZ;J>n2|1e8uZdUPahe-Tf3q%w{=KbEp@c5^smddO5QiExy1?UPb0_v(yxl z`j9X04K22YR~b`rHG`{T$tp4mXglG!kXry8E}SI-++sV!8Z%iR{`!u&`B;PP20~7W zQHRR=oRur-npJ#r*tJADY1_jhU*CG$31V~l!LFtUvpx56!(nc}54X7ej;~64G>leL zP>+JRkOOh5>PE4=MEny{Ifm!_Lo(6h{f<<_{9D{XtSC-cQc$wb8F+vZX$cdzk8cAe zeh>e_GW3duAZ=@S1!ial)MHpox`-_rCKd*gV?dofwam*>Y(ABp93{flpJ}e5Pq4Umx>0OxHSXLAfC8b zOU}wQkfC}#Mb`~jVZn$0;pBqXxQVE-C6B{Kocii#SPGk$jRByf;6r%VO-F!FoGj^u z-gK3-@=Jjg*9o)eQdaWiR!w6C4J}O1@o|nl@y3@d1=NMK+(~)O?}gNLZE=gOBe%Mg z6)c8?x?RaRqvV7v*sWk8+ssmQxpx2WwwJ3F(5tha$vRrs8vtgC#M$@&iliFPR~+6V znv`{`H}95Xjwi=l#CI&=s6+kF45WTt%CE_r*ed4UOV1f5hQl2@qb|y>-~chd^e)d zXwIb5ZeoCwqgUAT%ksCs!%@a#3!_pqyfX#ic; zkY3l2U48%-k(f~fe=kh$iNU3l^?8Zy>#JQW@=mm`UsAH7fury#Gu_E88ZKBmT2$DP zJWQXzwqp?QQCr1Mmih*Wq+Re`mumw~;;3OC1_1PM4u84rNsSK8Uz-Gt=?Qk3<;Xf5 zP$%s~$#VrVOj^hrRBUOPWDv2Xg}uc}zm^#fy4D!0lXQ_z!2Dj@n8rH;2a489+pOB4 zZy6fw25HO6M*bzXs`XNqRc){5|Gb>*tpCk&o_ls@EI_sLo@47Hu3}>1<>_%@a*kLD zfo2Hm4F$<_U$A7%H)q?PBR*SeOu(i1#!6`kz7!0aHeQbBV5?fY zK6*n7ukW@Vm&?(@y5q?>oK36SpPUqK#2p)l+?AAIEI$`ID?<#f7}~3>>{ z!+J&-i8lLlC$DYrD?`)?`!jj2VWn!=Wem%b%vG@KNS31zO$S#Knp+~_vlZj7yHHmY zE{gi=8ZqdBMs`!7*NBfVrML!Jww@Q56fSF4QN7TEZ$n0wZzet6ddUh&aJ5z}iFQlW z4@|i7CrY;@iQO%o&Czfd7@KYK<~@3wJjJt*UQsO^t8QO5TLUT+|EdOoMW-_es`Kqu z|Ni332sH6220gpJi!ru;ZW3CW#{h zw)Q4$+(*Ia{Qm$(Lmad8>}Pp9+6bjRkkdHDAPR#ee8W9Yfq=wyaST)kQr(ZOV{hb6 zhh6ydTNsS>@amyfWEu@IC~M{ebh7p6^wkk{O-ZO`N7lnSq;g&ig7L!l!)(Q1n` ze}(mM!m2~lcpB4~+U4oY`wfFC8PaJ5Q7j7QJs`Fy1MB)&ygA9n&a?hQ^P4v-ZI%$5 zgtPQU8=9LOT(}~*aH;IHwt*i|=McfIJJg&5nkQa)DW77OsjF`=p|9vr-(@1#nksUw zzVqdl;_r|Jp^~NQhjL>WR=0WWebF{sBTy_&6KlEcd@+kjlTp@10@^(go}?7tt;XHzhap;z&i+L41=4dqYer;;j{CkYl4X zQB=6}`A+M1>92!QSkpz$%8%uRDY!>Z!JX1qv+KGxvE|N1^x@-Cddm$#4DR+|K?7a_ zhECU)vf7OSg!Wut8CksjT28rQPvc2nm<`otP8bBW4uf3_(Z!CzL_14{8-22i>YEP#?0LO3AZ&ZjR|d{?cm_4Sw10TXZ6 zco5Cq=BiC->>(z9m+Schc+!0Bx4G6OG-CU;mV5MdGDfz8YHy|TD2;ZV&0xrpmeRA==|5>UHGhB`y%XC(sdx0Ww_6P*xH!*ak1T--CR zR}ajRUWw7irRvJ1&Z*mP|#<888!L zgHUr?v2`dD!S>5q5#jcWO;a9?AsDXd)}pIs=wihws9DcsOuD+}Z(oX5NVey-Sej?Q zjZ1@{q!7uvlFV*Ua71o!?!e&OeA;MwF$7ST^>*K6E>2K~jJD{n+@aB;pK&X~f(z`B z&)70HZb|gA@5U|7ZdK^9O_xFG%=I_*_ul7k8sNRVVL92vxmS@`8O2yQ)Nutt#1@k=Rj2*BNP64gzU z7@YyA$JA+1jSnk+_8?(kvV2zRaR^h-Pu0~wz{0s6ORwr3H1F4mC zNx_m@R^B6&$p4tRIKpBvLnQ{4llk-jv& zrhQ4w>$tI=-_bNC2=wb#*U~Jvnrs@;AQ+ydwYtz*S-g z9P(G>IV&r86+?^OkzB#ks%x41aoUeH1+Q?cV=lNs0|W2U&N1n@n)UBb(AmU6n`<>fO7vG}0~cELjblBB=*U>R zBNK=j@Gel3SC;5pUWYG)#{BrcCt|g-eYDpjNsK)iAue~R=dMAzLR^RKQpeNGdsyQH;Na_ zy&hrs)6e2vNdTVrme67d2sVmU3=&+Dl>$tgY{4u#voh>jBQdbI<&HhNqp0l8(18R^yITt1;?p6VTo&h%}^2qOZII`fUBmup=HJ4HtNAS=D_)| zd*3v@QFOD%)gD&g#WF*f27A3Yr(js&Tx`6vO5N(0uvNu0`;kU)?mqSVjli@S_kBbI zn3x?7oyW+4-v#1a`>IR!**bMtGiP*=vmu`1vcz0{)`N^3AJxcX&A;N?>(h70)P};n%#IaFz4j zol&c-he8|-fU;(b_UU^ z$7S&{&2g&SNdz3Ct59DfnXJMO#>I}a7hfgE*>cG*WLB+(dJf29v!ak{q|0{ zB9cVvg4v_9Im!|t3}6BgUg*dcZvr8ChfT8sHVw;y`FKtX*j8Rl(_|D2oq=A`${ng5 zKF#zo{d$&2oC{0smZXK8)S^YR9Sv7-8i4V4Iwp$kRi);CPR~R!URCC0_)n&Jhx$*Z zdk6VXw(}0~pKR~F%zv_j_hSFa3~$~jav7!SJ!gk{AN%6cmxTnG6bQfpNxs`XJB4-wmM2qzbUvM~*oU=J zE-lJ8Pm=};EK7>&z*L^m&Ph2nf|%ip+Gw2ad$ugm)@2r-n9eugkXjTJ9c^@E#Wh| zkmNmnA$|EX5SGp$*E^stvDJh4y#P)`!{?;Pdcg*0^UBjWK)Lw^SUlQa4qh4vwgUTk z;+cWxV2xOOx&Mc|cL9&8x*ESH$p8ZcCSZVwQBkR4!HNbI2x=fqf?{LcjfxNyneVsuJ~K%W z)bIV?|MPs$AD*1qXP!vn)wXq zxl(XFNu&fh15}QsGB%t!t!n9`eSiu1P>;JS>=N)LS6`jpnXNZdjq0#?F^~`Hhd*IY z)oE-;nr8X56CNGom7{)a1Bd|_NHEOTl1NVPFw9RK#gJA@gj2K@;?AmGCM8ra=P3f` z@>U;vh$qdEpVHLO=4~SHEPFH*idJu^NBUXBj2lsVXy8PwzijsNBQoY{_m;Qhf_-gh zIZFt;C=`RZ!(Jygj*z{TdhnGZ`Nj8yN8MEb?)8`;x@%zRv1_ zykBMT=PEuSpEAB}iwDn0K(Y*D`mU+=rY3+a3osg^)Xz55Win<`H~}e9n&bxrN8PhfbA+N#fFk! z+5>$=C})e_MlEL;FS1ES`c0gOHz4^Ym3J8;^DZCJl9_01S=ibom$ZIcu{gFA95qOqoTtUL}RAOaN29B`A6m3 zkL{H{Vr(y8_#$VFH?7W2?}dGh`};G_8r(ak=~X(x6m{*tWe}whci)hWWN@8~cFUdp zkJC{3PV(}a0R%kuuqSX>^-IRZ6qm8iEzbRpmjyk3?5ZMjte#ng`FK4j0E*n0*wu4* z=C)u8XE#Wuq4Pjbw0=pM zx2lU-ElB{(sWl)Nd(-Ub{;`|Prq10y1Fc4sVx|!7udQ~uh>P2K-a6H3V2W6~Qe}Vk za(sp}44jLHGGFPX4W4U|ZGkKYpLx`6)WjMWT?)0c5L;xI607~7={06hiL9fb`lMAB zq=3I&BNS2Yp>Wo+#UDv87=yDy5)=8@e6vp#=`nL|$!!gHE{SvL<~3{17|=166HRP7 zrB$uSkdhtgQe}pysi~oYe-cN;&#y5@L|>b)D>?URdxCefPTJ0Tb|7oAm=Zi9V;RVl zlb=|~vsQ|*ja5BNp4u2`iI{3FV2R_B%}`0FU5*(33EjkLA$}Q~q&?x8ZliGgVzejq zB|QTIVp>b}3F@ApL_#4aL$z*bc5Y(?lR)y{*ku!hReTO(ny{J?KHVjWYd2^%Oh)^Z z8_-E0<$Bx}3p)fF*^`G|vDqWWXGS_Cd^aE*wERqT^Ku}Gc1!iq)-qx5&NBB+6!UB| zSlboE`WrzJ!~&1X>XByMGgfvzQ7+I2TZyjH3ox;fo+k+nRhR$nEPc)^v$vwTAl0b> zPq@_bF$blDkvpR~I1zA^!_tFyn8T7WR>z`PYy+NurGpy7e{IapJo|WKcHeVfAG6A% zdd%8}>y&jee7e{UWA^x1iVS4HNNPL4ppLtYa%){QqY(#5Xq%|Ups0bvHT$OHh zrS4BtdUqP`wDO(JhNo<{(sHrUVpIeX3{a~ZCu7p;+ly;XbEz58g9*un$4%umms7V# zE=5O$r<8W1cRnHnV7HHUsY2nbj^?Zjf!L4W#d05^U5%^f(nXu?_#l>~d+D5SCkc)zIcupFK24PPBVCys%=i%o9`tw#eFv0Qiz2rD-pdFPcYZAhYUd^y zLa*8#!-}fj4eDdM6t}IlH_!<^oa%-92BAeK-R9V!RmAmZTc#&^YXK)13QdL<8L}H? zfjY9gAnPL6@cxR+C2H|~3h8X%*6S@UC@-L84+Gg zQ`$aD%S71-)8LiY(X%H0r=auC4($PSp@NMKI+^PSfO6Lb`Mj=Np1nt*fAWCt{IP%P zp%=hhlZPIEwUEOmWB8oV{idLx3Q_>}mrrsBKv0MpA|=5pjE6)*zWMcMnK*=ybQgao zZB_kifI=}3|3-fLxU`>=RSw~b|I%DyW4 zMQXS(w1QS7FqkwXsBQt)Tx5ECmlGq?3o((@6eo9S=jP{S4D^ksnWJ&|?lMAMGDvsH z;AlE6=gpj#v38u*!yY}z99YoE7@dusnAC7L0$lKnN{bA^yIUt~{GjH}mXT{SN1Hbq zMh~JS#+$EW1~vCUEuWi6^KqBmNS}Uh&_JT6vi;c3I-Xqn`Hb0u=F_PgGT86Rvo+dz zyhaWg^*w9!ATvNPN;Z>EX1r1VN@$xKBK;gjFLJ9!6_J|(((pJVxYH>jY{1#P$x(Bt z{VR>f9U)a!P+}X^`kD{o!O5njW)THRtDZcR>4Ehmj4NHWokxqM#zb$95Uw{W!u7E; zDUcQ=G@YZZorUu2lJMAN$d**6S~^i2L>`-?H$gc>;FnEGm4m00f;UlK;WY9r0hjFL zmox_?jh;QKRzm*pNc~X+>zGOsiu&o|HyOmvujL{l_)>K3@ z9#2B_?j%G5&h8~m1!bv20|WwfaL>cZ;3I1ozR3e)2XO^#*ZBkW_M{<;H;MxEBp9UR zb5?k%qhyk^LWX4$!Yvwomu9HGeY7g{h4E@hVOPs{v+iiOtdA8V1T%}hujcF|DKW<@ zd<4-0z(!w)ypm-H&l4a zj91Ix*+wHMF@DB9N>Hs@#RZ%3h~kg+lUyh2eY*5V_x@|0@1x$xGH1h1Efko13eaMd@BAfde2xZKfvF(; zaM_mCvW3zy%*UIu7gKig9VZ;4Z-$TqWQK2fVhEXgNn(Ju^iM*_)u|H9lg4~@t<2+7 zw9lNe*Gfy3)5IA&apX-cFh}0Zc1K>$yV3o3w;gt|oR6QkH=Ls7m9C;#gz$*2H9-8&5l*M%|#He3Z0k}kV3zcIA*+g1VNv-a7 zKlKUS*Y49!`E&!Htf=tObK(~stc-kVm8r_e7gpJ;g62B0N%&(grU~h}Aic9aG;&Hv z2&qukNtj_7klD@*i)<&2D)m`?YnK(OPNr&XpGp9W%WeNNwSu=Ujke1D9lk+w@D0NK zU8~&RwQ_&Q{p%ybW%M%D{p_Lx+<^MSJ$a@;u5Ng4j;JWiqRZeRhLIM3c%@pAb3&?|r*%3RnGnJEoo5E@H6O;UgBClzng6>qKzG$ty3$u8Qg zI_ruz(@<_80yG$wM_`#C-Xr&NVMZl?kWLVJAO7J@ls&v@8Ifk1m=}@#Hb_7CL1`xTT-BQh07q)Ba zoW9NR=DS0$%J=45WV!#>asxL@Xd!l(g^Ok*M354F|0q6}O4LUaIJy3Z@SbAz4&iv@ zRi|jL`XxcTD1$mgU}QjP8rU>D9?6PF)}m!4nDrm1>olLQt3r}QH|0*6LZRxXUwyz< zD5|`aCgqAq@>IuPS06WXh^RY7P7d|%mzeYcpE2n>bv)EUbP;lAnW4<& z=SKaRFOJ?m>Wu=6rL}#XzloTWrKu`B>>&B*1hzHA#!{=yd@+}M1l0v6GXUbp2>Mrl zz>kr3Vsr$jf(#OFw%UAb6=rc&K{`uYw}p@bS@tQePb2u9E$ zxK{PrVT0HPO@0l!p@W`0+^r^~uT6$lCqp;8q59ZB3Hf8Y=#$3S{#ZRhAoX?jYC%8G znAbH}(FK|M*Ntabvt&b6A>TTq5k{;kXD$D zUpWmlc5BmF9EqeueZyxtde+EeGLw}>2=OWqqy~%!sINF-`yM#|ySHx&?K2wUgLNza z)FO*Zn1C*1F>TCE7{=j!RE^tn^(h_h(C)-}Fwb9c1A~RKq_q+f7Q$0N(6AmHM`E}v z<7rsTS|1iXghFMCXu)i4@GLug1A`@*z?Zi&NU_HVv+xEl#YMcHdzyPPYNe-OSoAPx}5cCJ?7+!d8(y*YK`U4rX zwS@ImvqV;Drb%K_;Q=$L60ZilBzLV6q-eQn*4gybouawM<0RDwzjo2)iMYm{Azie1 z&CKiBWb?D0NU`+FsMz8k+dz-uDvjfcY6FEGOeqf!u~*3G*%#WK#oj1aIAiieI6n4k z>0kk@n}a)%_4LQ!Gca_Lwq9TQfY13{r&1Br=zU0xQP6r>R|Gs^WP%cF%+_OXUnDrG zPW6lKJ>8uu&{y7AOJ4$TB7<$c^lLI69pY}v+--gXR|4Li8I$F24 zc{H*xvD*PE=Sr_CgbQvy2@?-OQtmY=T5_t>gfX==pGec}l%@j0Ia`dbkF5u}yKZZ6 zBDQE;a|j0>}2ID>Hd}kO1nv)fKOi2tihf-YgS8dj*IGvNd*X{-(RRAG14niu=C8V%76gf}M{n3qL>aaKi17$M* zIa?NwoIC%9Ik;4=)DdDcNj|V%1odh}5hB1Qw~apq-WVmXh}ZC=e)gcq(p!4;(C81; z2oA@xk0hbJmrMHqw?k%q_$z)!&jb?&gCfxk5)T(9gT|vz({EQl+pV4vqGT#Ff9|ejvOJJH^U*b$&R6WtZC>J@fo@ zh8RI7?_xcC(y*W!_{nGS@=He@U6P8|GLy19DLMO)4$*ben;==ebmuXt7y@U1%V$`9 z({CD5&C1DLDW&==I#Y9^)H8B-&(8|s2OGC(gIPrnf0!`lCA)h5k>=BKcVkrI%w&Rf z?GxCWMC?i?m6do(hm~k}X8Ic?+2bXbluciB|dj0;>cyrI_ro{UvyIS0# zFx^K2Q4dMe7nE;nq5*FFyiUk}i6j`8#1gM-k5}JJILUSq(2*P9SFLWQNrQDN-0xXe zq60Wp@)hm3r>Ma%2JMxa;EC-%B1)jC6XTI>c6BW&V4CFdQ`g)tUOh?*eD`$23bIzN zl>%07<_Y~+eJ#I({~fQEZKdu@$`2C2sGNQZN;j^h5?k?DVkW~I8lt}p($D*NavzN( zvSG(XH!r|!V+nU&gV?3~8F?85hnwI4g5ykZD8Xw@Fwb3;Fu#cqrTh@Ts^}^iI+-BD zFER#F+IjKQ6qh-X57mwM@(oVpfo)K_?NYfuBom&{qcy83+#_~Y9wy-0S*avwN~$0f zR8LS+Tr=3>dO%eMq?55P<2c)>3}u;ibtJd|M=om51&Rgb&?&7wCc1Qlqtr7g)g zGhid$#w)^|JTs`OAr>YiXr|39rT_E_i2%E4)v9cL&R=*up4tYcEmW>>c(;TSdzm zgL9qixjq)cL2f;?N+!B$R-}Vd9VGVAKQnjz@fSBTKqRAU-dPi`a1%l7EQ;Hy=E-HGx0mtFL#x?!^%28I72htxg#l*^`}ZGEa?C%==x zf3_pTiQov&@TIx>dl(O@GQ3XaVt^}mBcx)TRkR<6rW_(vm*0X3E{fKA+oBHq7g1*( zlQ~^7x236lsfE_=^hCy&o=#uT^$DtNAO+KxF+S;wc=?j4JPtfOuu1yU;`XN%9eTa% z7p2=d_7A=GL|^Vd{Y(DH=fS-OpIr9^4zlp8J4yZdW>E|G2GNT#I^kAepGfE)+#L}d1gG0& zn{^RL6TZhzY8T=E*k|{0MyKcQ4ELC1uA6nNn2w6R+mg21N=ZXe^oL$+G_?_{emOLd+oI{f#D(7Mnsp;~VJcBl_; zrO_P8=Xv87tDPLm?aqveg+_{Av$=W+w^!a4QI+?^pSi0fq47sKAq9Kc!LPC0IKrdv`+Hyypp~mJuu9|y&+dQs;S^`i5j!=u<&Z%48p?DrD*s(>tW=`#$}Pgk0yUv$NW{PBgq}oxsM9nJdGe18huK{ z9P+t7VXSOZy(-WlJ6Ip+r$Mi;6&V;FP+TlGy0Fs@$l{(b6#zg3(91WhV^jwENxok# zF-#zl1sWdUX8I!nVxx02zp#14RehN%9cFh`Kl{v2jF0KG0-5mgin6RZK2Fl(yg9X# ztVP%!%C@e~XefXfB+QA}1m1>gE0HFc`C(=9h{e?7D=W3s&2z9Lk!Fte}I{ei~@%S9C zIQ@nx`P?IV=FuhXYG?RkzoakgJ?}l7@;n=YXZA9gzexACx&K(^E^G@KUP42c7$6fe?=}qCooX-$X=+_b5t>?E$T@f1(T{C zd}Yj_WjyJQ1-Tjm17$peoWd$eX%}2$UyUg>ru{h9)CS&p^07jYuh>^#!{9@z7qv2L zj<-Cmw!EwbyK`gf(h+Abmq0dwWfB-dV3h<$5m<{janXJ)lDF~<9IT77p1p&yOtH%L zt3RJcYXZxyz(9zd>+NalqMLkn4${bdzD`xk5-Z4nnjSR@4z27%<^){MF*wPgZKops zgRMBe-josj@xYYGe;*g=2y-%2%(V|)X=~=e0Y}^LOMCS&kr#~a&zxLrFu(mq$=^9k zb6j1R89pOaDGkyHFzX#g{xxBQ2*Bnx_+$5XX7UztbW=Y>D(Hk;Mi!3CU%V{uJ`JARwmvL^mtCnweMS@EkaMa(gOVlX=485^ZDxPeR?XYzM&7PTygBkVCGmz4BF}nJ z4$vv(%4&T{;_W7RyEgGQMc#gxcq^2*>k@Bb>wo?AiMPS>HZ}2fs=NuZ)iwC#ZF=G@ zMc!s4-aZ4y*UN^eQ@$r}HzeL(mp2jj(cch~@~pop@%Eg&-JE#)i@eQBy!}?*W+&br z;EkR4ge3D0)$(88L^4k>B(uL_90fr(BW|PvUHugo>p(Yug(%WPLgVaF2h#l&r|1CJ zMZI;Pr@x}B4rE|ZLkD{KD-MB-*#!L+AL)SKUm@rj65C&~hk$*LFUDDXy9BqY@yH>a za5Z#Lf2u?OUYH?$(1F5?slP&#QXul7>_pxV*@;@P6u5YHwg-XUNQEondBCu1Jn%@bVfv*n2=g`8UFr%0?2(Um8v<*+ooXx*pU8TOSv zy8)Kv6=yX@-%qp0cx`W`J!+j@n4Vjhapy@8q8t`8ac_t})e+KybZJ4l7sut%dY{pL zmMblz{rtEjDe(F;nAe3qKbG1Hycq@~^}!J|CMZrfgZ(?k%E;s`s0NYl6!~igoE9~b zJe$kdK9RJ%=FYR}K&NqtRA*ye)J2@XMp<856)Ejo+7|%3?l67lvbL4`S}s;FS{2w& zBaUs`Nr|=v_PY&pr}Raf1#5RQS{@F1K`yk4OVp|lb_q|aL17KouI8gru}AD%Se#*uFaAeze2LeE=06s z&JcCye!nJxci1gz9@^l?Th!We7AATp_$G2Rl9SQ?{M$S;?E2}~Z!(S0=Zn=~lJ@s` z*ds(9zml~jl4?D)X+nMD1StyFLC0s8SSxRngejT_dNuyOP;kbau&DlodVP)xY%neDXiNc;G8q_dlB- zd$N}cdah~wv0pJ}_7X8`ICzPeHMF0Ur&WEQ)bOMjIIL^+=C;i3Vb_a=!C&Ps5uvqpU(loXSBM3tXloyT#ZgLTrT8m8*MUnhR-yxW{)%^X;4**3KXu@z z{tCI86G57aMjaUCulPFw!-};%_D)Mz9DOG*j5iuRz8>y0y#9*i(q{cpB<+4nCeW2% z%=5SwrS2nY4GAlx;KN-Ih;VIiBA}`Ye+egg{6N^U(yyR;=1s8=CSlg=6u#Kiy0Z2T zC1k#!Y*9>?EG6Pk;!^-uyBaUR)w|41Q2n^q(fEb60=U{9*MPGOZ!1gACovIch51Zd zTzA8N|AlFX`o(|2r>Sj;wtD?bmy;?!FgBD4YlsP~h&s#jH#a|=vTh2UX)ZRgw-NFD zZJ$4svMwaCc_wxs?o6M5_@!T@teYjV-#4*gNn0)@2({jfHocU)Ok!`A63R$RtE|{^ zqSd+5sz%EZ$U9h<7CtQ`BxGpZA(+rRA51Wzxwz!Jz#Bc9vf7&R5VlL4DVwdLS0{4+ z?s_(|rmX7dokmML0BK3rTWaK%t36K9vWCDuYJowc%#T1#f?XpvxG{^MwNIbhIfPRY z=*THfvA0$^aypeh#TnYatQOA6w&%%EmIA$Nfilzwp+sIz%6Ye%D1!M~_VqX)!53?2sx4I?k8 zLN^c5w@-5MWJeyt9!>5ce?^s)vrHNo-Fu{T1j@svkNCR>2s?D_9NOKkV_Cd@*LF`` zd)#)L#zyPCv_xCwwheO95M*z~PUV!y$#Qtjj91HoiR%SbqR!h29vKj?mepiVw;dA% zRrfE_u%dC$6D|fQRMD{W=sHsH!(_)@hFV-`;9KCyK7wNbzG&I9PLZB?R$<(N%AY&L z(|j7ve(*I-oIQG=coFnLX>`@!@1K7@N9WBf@~%O(WY-WOeeA$PPSI-k((Nn)u1!g< z;OVC)RxnH=wFudKLoUVs#_)r4dZCRasu~EJ!t&5FG~R13)|hp%#;gx$%(_D3j|UQ% zbtjlrZvl1hc+)mEcfo(>jn}!>V{1Q*w*F{-F?L&m26vC;2YmzKr>apy*~fKGxlKBn z&P>A$23m6>X+V>tVSg*0K|7D8gzs>3)n7oghHI92Lu{rChU&5h1p#@j*i>TRQp(;? zA=JI?wq4q5_Nw-MlD%Q4KYF$#Z0kkSsq!AkO6&?L;a*z1{a<>d{1yM;m+IA)2c*)0 z2HQ9qVv2+6rs;kS%sxv-x`5KxQv4&c6P_Plnd+gKnV70pl zDbwDqW=j>$ZIZnuv;+!AJlg3(HuNN=YZxlyQXAV;8VO7Ul~Rr$S$gnuZnDJpucF)#dsdfmAc z5tUd*4P2SX4+G-pc@a?qnGLh}K~w)6dlCa8Q^w$Zhy6)!X|g|!-rs(I(%Y7LsoT+b zJLoRYPC&QHStdg!HDj@K;A}f(z1;iHKC4c|HAN{f=cVauQ?6G<$t>-KhQw~o zSeDcSBQ-jIwd6M1nCNQ`h}LID7wz>p^LB?Z2cwlTor3+j4Us03-n1eYA?#w>WVAM$ z#uE&cbOFJ%ya|FCwFkRA!=4zDvVY5sp5-szNZsP?Lb!mlm#y52Ul;zi@b@`?Z}B%_ z*NvVvJ8tx}@aIWQN%f?Dmw#gI z&0?c%8waBX;~g${jPK4qrE=sMlWxBlR2zoqQxR#g0I^w47GtMv; zOrnS%E&D<%(h8HUqYz0u@>sLktjGa#Z#@rt<_82y?0G)BephSsKSz*aNwqHqMI#*1 zIa>P;Vk7fAMeFzKGiu-fE6L9d*xgr81nq>qYej*vHpsdanGtTkHdP@oLQ4y$vb_pn z7L)SJ%hK6`Tf;wqP5DG{f@D1_R4(;y)y()W)j|ND#hkFW^zbv?JnbHF-y{_D|R7(`tii?Bo zY7H;M;|5!;Bq*T60G#c8b{H z=jJQmYwl;`hcn>oD86D9rH5XCF$bUjRe_T(UAY~GYu_l`&g+_?PUKFKJKe9{Nxt;x zEao7?1C_2hwpZH|v!m~HiGGn1&ew`GSb+P&%jN19ox&HYpRCJ}89LXVe+_4;P(4*L zX1dDdTtb+8!*2V*@bu!rS3rP;Gjk3y<)SsDPp$!CfZ)L!jq3d=$8w!D9YO-3gTdg; zM|{|m?z}y)pqHm0Hl84UG>cCklr9u}qEAY~Bqzivs+S32Ze7k(#Bnr| z3rj*+z50&{!Q9$tLU6a1m{3OeZqoD$&*RxUJcnmmq>sa4l+k_TC(J1nce++I5b>Pt zDq_=FxU=D&P5@2FzVWZ(O^;EOni|$8;}eU0C#BI|9;T(yD7QI6eLccMdG-u{pJxUe zh_vQ3p1om&Z>KYcT~hvZJK{}H)p$M-uKlpVFDP}|?>hmpb`x4V69fo&u5Ga@}?@#xYYIr zIi$D8uM-nI2NBV=ijI^of@zf*8UZw!lly@8sYbI73cNXSyQenP0MH9Adz;2YW!+DJ zr(-NQwBFhGSTK6U?kNzIz245BnVWyJ%ecx91)cFz)ye08qVs2R5p4OQ`7^!7@HfS| zHRYbLKq0@mx*WEiJzTvkE;f2HU~TQlIzc;j+1bycbCzx+w8pt1Lub=g>kD(seEuba zAx~yl#a?r9$*5UZC&TS{H4>DqVxoP8S52mRcqs8ZeDcQFc{E2w-&bJIV46=HKvku| zIK}1Ppf#!Cfd;Q01;?wiI|0I14~)f+J zTb2>Yr^LjaVEvER?xxe%+bQv2Mq%#JJGZb$*kuQfU)`VX@6Lf&sS7^+DuIE|<}m4E z;8O^?Q0N5;HNWX8Myox)DI;N3Tr8zdgWG9LM`cWw(N-hIaX#Lh36u0<5eR|#`XiQ( zfIYS>HzXK)JJjNnPR-8;VSJFkp> zf$oc3Av~MTRpN6H*h&9KDY>aw=I0`r>*Qwd+>di=o4+?QHIiL5I%VXT6fP4-r;Z#W zmx-g(Mvgi5GI1qEntNggL8iDm+QbqqTF1$R3F!onnd`mL8Kr%L`YOpWiGCQOA8$4U zR?`YN25aO8^Rt!H8uWdVF{f>mUton7Jv>pk!DC|}z()1b-jCpiuS&D0J?xKFkkS8i z+Nd8zGW}2Ir;M6~VU4HrQ%8m2HrF;FjFw}`6;ukmjLS6{~O1RY_YpGk>BucBA*3i5#)Vag=EBT)2 z!J>C$G9FWByJ;to0TLi`Ud5Y{bE9RevF#r%TjPnG8tNuxMDS*$>*(y(@zIMP#G6mk zbAy3E^X&unZYlF+zER8&5iBa&P?{Q#td2+42=OM6^lCh^4i5>ao{aIThU?)1rct-M zf=X_uiP~ju#hX>yn{uVFOOs5HANEY5hH2|ixS~wq?SNZo;$+o$2{3{{(*}E-V2wg` z&R;U*>gKZ8n~{+rx#xt?)BU)NwsPW*tYbDGbjPAU?QX|1{jf)}uA(DyR29XV-N{Ie z4>too?eU@JzXw)H?{qJU;UJe7Yk){9i=0TF?AXIolRGvmO50a@-WW!iE4Sk#lAqV= z&-&s=ZpZ8Wv2L6W?XA#GDi;YQmgm<5srTj;YEE3zhfxCio$ zhkGL5csK+3#>2gkZ#>+aF+7GaOjs0cBMN`~eTdA!K4(gcJwD4Sx-WO5Ut1pzCWPbe zgB{njk#YHElc}-t<6kvPjs9n@{$G*KoTsHT;b=tGs6MxR1C(?id+l@Sq3)Z$JI1vx zoryU=^3iKK0CYbD4Z!X==NBWVtrB3$nkLDr^&TryOle zP2MV71qlfzE|y&(rV>|*NmV}z3#Vw65TV+LroLuIf)N>}JB$odzhiHhUw6}U&MO#X z-632DbI!3fAjX!66jikV^lZBZWAea5L8cZp5djS2-<}JV_>^+n(yV`sbIbByFmM>r7+fm2ZK6B)fQi8hU=_3x4439$BNc$+qvEBz-q&F z&V*RppATEo%#S-+BNn9lV__+5ySm!67n`Hh_+qO%NGhxP8lGawRNgSGF4oq-bhYwRAJ|NAw*-+t_Uo8NV)trerfXG8 zE4vAZzLB|7`OJV_wz~WtDEzErO_Cvd~fc2-<|2&0{rLKqdq*} zn`nr(LV7JNN?0M?z&hjRpv?-Y&|g1#3;Uyc#r|j^_D9Pe(qh!hsshUsV${E~iW2XRqP1$uCR(e<2?ZSKxn2g%JzetV>Fe2$QM}azuE;!yQ7IvOsx*hc z(${9tYpz+aP18AFg;E)8_S$6volhQ;^A3%IkMgxf#eN|!l{6`J9dq1#y8BYZi{RU$ zmX0?f9cvesu-=#RI-AWpDSj*G6==0Lic16+oYxsJg30AyS}E|PF$>ok-VgMZ^pPf9 zaw9L(8O*`%EEg*6l;<_5Z&%xX`dtwBSP`qgT*T@}idg+cB36%A;B;IQvEQ97e2FuJ zEs-r;3AVr9;oc%v-$TUeeYj`00!PFn;t`o7mS2h9TEA_N-*pz?j&SMREG^-4<`$4L zqK8LHy;hf;+SyiNf7Bnp=RE>876~p!qS1>mjx|5snxD~7sAW#A!t92^0rD|E-`h|) zNQW+IC>$aIb^7nX$`K>>Q<%lU-6|YnE%HY1L8dh8SbUs-ap_LsAZwAq#(Kesym`51=VNs*H|!VoJ9V%KHn1Dv*S6C_gf@TK?=Su_l_3VW+@Qmq?kRgaT$Zj1@G z-bv6n0(Q0$Z0|_|zYJV0+AF0~I!S$OK0$W#YX^7qIpMGH0{`Qr5%=9d7S==;|59P> zu^NV&P7dOSD=P{x#i0H?Q%d6>yMr5Y7O$cpuIqS5!N3@dwl_hH&l!ciaAJe%gST(> zfN2Tq%kQhe8lpTW#2J(#8?R)hkGy02n5R_X&(H~s!_NZ%iDPW5WyAzOi+YilUsB0F z#apI%(}=#8w)e&LK?NU%@j*58qfXs?P63$el^U_9^#`E&*a3ZBYCqIuRZD~0ymUav z^X{(@KVk4;j?LA68gg5VY|)*Wp*xt5b`F-cuEIBE9ifMbjLT_6J0HtBW3|k8+94#x zu*^iz&c8M{f9jpWKOBFJx@IQxn18K5qcayF{tOf}d!e+IQGm8q-T;14)yf;nZyvvS zB#hPut^8|8Kc!opG%J1$uRzKjqwxRz)~z0^My3TAar0W$ z0&lVdN_@SBId&ZZJ*#FEPrF7+__}3rSEq&x7_&w1)q)yUb)GI}EKkglC-!xdbiBNf2i&^_a8qHqJ1TKSkt{gAJo)v3k^}AHsWbB}nA6SvdAY;8}(@ zB+|U5e7k>LGk$j7O;OWZph(i-Rah~>3hJ+Nr=Wv|X?uKw>93e1GXIX$6di%eK=dwg zSvt}7xh_kimKa}>Qop?rftBMHa@lt-1gf|f7B|}JPy5bUqZ&TBhJxCnjK;Py{$7bf zP>sy57MKw@gF@z+5SW=o*q{sbuA?brNy|T>kaf^rA>@+lc2%zBzrj-bD`Z5s%K7R7 zL`6^nxevqVl;d3Y)Z^clvtZQliz2`lKi@?L3Yt&Z3Si6 zR~(6MJZo@Ww3fTX)8~((SqG1}%`%4PuMm>7o#A=^lJg{{Lq7k#Cllw|HFx)lK{70u ziRMRK`shU?>m}c-A=IiFAYW<*@`M*6YegbDEF3!v!-_NVTiE9=t-hR3qAKV0g#KG( z9ol>ljaxP(f_R8R80t^oPZ)iZPoVe8sjzjC~yR#i?@9oE@_2o1EJO5XhG&6)r^Cm~zxh49D zed42S(t&PMKj?gJ+pdNIb;R%!p)(?Z(BqK37%ti`3QsqGAe>F%Qa}5W++QEihr#_- zftJK!@N;ggRS!!JgZpK4ISd|*+6*oOB9ZnE;ae_$9XmnWngF|BS`Gx+E?nnMath9aN z6m2f;Q>@1A6pr*}HIxe`dppe1t1#A9AS&D3vYx_~4r2Lz7^!7kB$Su!XaBbZ)fMfl z3aG?reaNeNYbhGsfz4G#jY(CvYz;=8!ox#nGy2I=Ur=(`m7-o^Xpd9Wa*Aqtf^X{C zU7)A^9Qh8|+e*7Mq-ZJl(fWXfoAEp~lJz7!w+a$70|0F&j)(Z4-LCE-Yw0Nb8U~K2 zO>YSNMEZu#G3^l9VCi2jEosi@5@EYqMG}~cnIyX*dUzC#wYNul=?o^VU()s~?PA_i zcw=Pp7@2u;Gr<5HeNqHBxyNq^WF#)`kmo>i|7*jdRS2~Ebz!ej`^!6JN5G}{X7wWs z%}bZWRs1^zh9?zXy%mLym5oQf_IDNAc1y3W~l*#Ij) zV;yuFn#TI*YL7=Ql{!mWNCrEQ7k!F}3Xgxui)FV1Al*f}RLaztR zajwr~tXUR-%Ip#2GX1f8WbE~6+?nI!YTEU8@y%@O?YA5sBmQr)t*0A|h=jn*NiNs% z7)wN&6;pP^?p*9DMZDhIa6aZ6&c~p2g1d5ROT8z;SKo#0kwjeQKETXPOL9H1)C|g6 z_-$N|e4ie2F5baiqMwA$lOAq8{1wYjjK3D|-`RnGVNc0mk+f5xw9BwmwVzGes@W^g z6~n&d85_tG|8ooRXI)X)gW1jZ8p~?YKge;U1!~jX*sbcZgz!4#zGK-e8IrS{UM(>> zs+f?FMJ6QlhY8J0h72JrG;AmtcUv+fCj^rtoD3~UhVD*=%9EjrWT-M3x-S`8mJBUV zh8{|W9!`ck+XzDd^^2W%Fj#hE_VN>Zy@o@j|^?w5>TMF^2#o}5ouzgBDwVT=P)g*G3BcRM%nrJl8^EQqP@tF6=H zm=-3Q8}&V|&?)_9_qBT?%O{yy1{izcq*$M!o5T)FrGnYD74$@#QX(H9jz*j#jJw&%``iW@KaX>T zFRD@^pCU5BePduVO{F5u!wjlF%@MYVi4v&k+Kb_>bsQPC5xUd$go6wBWk4Ik%;Zc1h_0vnUVIqw@7j52$U07!x?;$%BH>rAy$*c8?>0X zWV9XmR29qQnK%KREQxizI#MZRu=Hmy*d~)!1)o4=fmShh;w@7h8kt?RH8O zUD955ysv5XiL=f%^7VZqy+&Xz=tnj(uy0vIk^hWbPuL6x_Q-COC>$woRdC-9=mJu5jA!=X&WLT!u+ZI_8h%33(gv*%wC_i0wJi zdMmw3y|7=-YA9a}B@rt$!@-Q758D*cx;$%~uUSm^>Te<-85<;HrZ4mC^?D#0zBUlA z>w)M$=qDa~ID&g{r=(=HrCPh0$hUQ2Nc|$SZ2O|MBJI{~V$!Ke=~Zs}X}Vp~EwNf9 zCH!bf?x(_e3BU z`$XL!BrwO;D2Og~FItFag1uERx!<>4O*K=g~u4DA(STXgO~Qlm(Ze{<|Tme-6W z>K_)06Rv_SdP%HF7=>4Si$%@GQO(cxeP{3s1CdOZg~cM_^`-*(ZA#~Ss|Xm zJ26+Jh44!~mZNBdGbS~tT265-7sd7wWsDbbIS-prmu0OG@DOJhWNIM=SANC7AckZH zYfy24Znr)9fO7?Qi(0X4WRF(XnEm$HlUlT0qn3uz8ew77$QgYgHzvhIcDQZTG?OlW zVo;?O&{9n~2`{c2>IZ;dh6{d)4_;fh-au;I+upQBD>Y5G9z$*>k%gV7RC}kbF_&D6 zYOuLOEFxKVrHl50OOlCp67o$levghg8vnb-rdmA6p3@Rl850chg9|j!?&%bKZ8a3D zYntGg=z3@}Hs2fQ7Z_XiY}=6?BB*NaW6zEWTEyO+jOIn+7p%?7*`e6O#4<_c;hrcK zN@FH}sF!`TMsG!8Q*A2I+NK(DjGwl%HdSVfV+n?j#t}4i$~F~LS5T+)G0z`M7qN-0 z>d^uYg!-_iC6kU38qkNE4l*bGy0GjtE!#Bea~i!>&7uVIen&^IuXmRG1Es(DSr+c@ z6W*fFHw^X74Ib@;)VM}=0*&!Yg6em#Y4&?CbQlC5zoe;DkVa%PIv)L5G70>A-&DcR zxcD_+MRW}xCZSf=y{qvh%U8<#6y{dW78@lI*Vy+Cb@_%5;w9?vUyx4}Uw8&7V0u@w zoDeDebp9++lo%MQp^kPt*@Kktm`!T_?>~q)iN0l2Z;qbG$x*#Kir4v?Wfbm-ba|cz zdyIKDX*5GH(^xr?BeM*FUb#W_n}6tG0KNGVvz9h`Hh1# zWu7o9B?-L|Mx`EGkF=&rT4mOmANFJdhVhxDVYrVhi1u)Ny{*aJpjvDhd3&uXeegZQ zon$#-pE=(>h<+<17kPn1Jrn|oos-PYN0Y@RPv$0|@2hvxhsnaRI_wnf#445g1#+GQ z)glmu96c8fl?(QVVYwIy|7D+YO|7>u0Lxh_m$0rId)P?E37!!i5CcrJM-*ma9EjaP zWUjR#tJ&+=L$D|0zP|o%C@QV>AxY6`(1{kGChI9rls=X^)WF^F*zPxpF8C;ZV1Q=A zhzO5_oY$wByzoiU!~Icy-J!a?`<0gF?HkV4(kx3S=pEnqpW2~9McPMPG4?<>+2m)- z6uLYbD}NZQ7xmgi$?&WXSY7Xvssk@hq}<1Wp?IXl3GB3Y$X~7JQKRW!Svb!CoTz39MW`cc=IvT$FhV1SSU_+Phu-GVfa`+azzhM+)l)f#IvO zW=ywyYxM;|n=p@Q|Kk1k0TONU9l{*3r_m>|SbrEbUUot_gpTtN0Ss2~G)n}3xX*F{ zF#+T*QUu5fTQLzka8}5f#)#@N!KS++ahj+zqKIT>qH{tNt6blGqQ01eH=v0a7;j_$xh- zml~fY4FaAXWoaz8S&9juA(cu=J>jH2IJn?ube9WM||>>JFBsxo3=PesdB+xUC+0H})BR$)|RnUK5B) zzDG{7_3%!Pqeipi`}lbcv_jNKfk69U4&Q_vN1nnIUn#R^Z!WfcC>*e4J0o>IRXA z)l%ZEQI;O}EcHgh?B8#heId)eankEam~&|M1ooFOX^{;3uzRIK)vho?u-MfHb4>UlAS;FuaeC-~x^iYO!LrV^{MbDY)p>9^8X11Dt~QbrdJ%*sqM_&+ z$V!~f&4ylyGmc|l^n#zv@-!D9^M1vM>6wwSp`Wnvw#$1ad52GHJ+3j#gST_h(b*Vw z>At2mB3hXn|D54DxG5z(-Yyt!?+E>v(io?-U~^i0-YDIg7GULsc;WXH89f{0Qo{vs z8VW|q&%sTY(b8vz&URy6Q+Ay?wObvhmEnhWQDXG%l(a3O+k{>SZ(ktL__J@SVYF^^ zojQ#IhMH{i?xq;YIOUr%`rM4CLviMqj8B)-Iydjh-;{UTk7s!npAA^~qqDt78wwUk zw;JxPlpp>z6x^+U?k$%e{x#fNVFGf6XKdRSVgRdacy#Di>FCoU`r}r-YWp{g=VU6T z$}b!4l^pUfsVjJ_?s)5+LsBOC*|PaFn*$f7ZScEze~6mf@Tn+strO|TVnL@X*FofK z5@MP?f6&naui7&5Td;WtgGISt-m2GxQO$4|siRkWlbRg&?=j0MU8s|^$?7lM-Dvz2 znW^#g2039&E=|LeFCpori*NS*;v}eF9ci~f8#Q1<#n49MK59oBiO~9%OF$cmTj$e~ z6=La{BL9|>bI@7*7zJYhfcMfa6CFo*z3QD0*sOJ&*&k?+rG?VW?qRl$>8kg>YC@0aj^tL8V3|K!`|VN){P@3aq78b-^=S48Q5GcwFu~H85ZJX45DrWOK4G zPkp`+VzPRJUWwWr#zJ@FV=;yB|-u3lIx&DOy`!`7C|-$u4F^ka9ZH@0XJ1MB&ubeDIh zkFkK|`ZO0Bo7*k@6bUN_4@<6#wyG=|4S>KZAGW z*kaes&W%adaBl*VGu)McWW*`%4mFOmfTWXFj^+rW3qd>=mG=vIC4}PqAQQSY(vw{t z>MTW_0bSAjGrmS5rvj*y#tP*r>q9jE&hU9XO}Em4*|{%D7B%y?m}9w4M{L&-ew;Wp zT|vY;V;8g0A6p_&?n&SVDUN#Oj)IUJf-o7TD_WMQC{gqBwurGh#Y2gRhS>OR7AuXs}kE=LLts-OHc!_%~$2s%|5p6bM8hOC-$dB!Su0*Ug}lT!i_%!|72 zebhiPhvi5z#3bS8?P&1Swu+A&NgY&`s0Nsv>eMEBESwkgZzMTe^|PA+71SQZi(1cm zpnnG}^UFeW*rVWv4ACXbZV+&iu(}nKK^i0SV#d1-F`S=4=?C}#w?XHdPT9f@*?||I zE@C0Jy~)8{FUqME^ZFp9@Hp8BVgtw}Z8})5@76mZ3UMoT^&Lk(s1~gHoT%!j{8W9H zWWNACXA6)GJcT7gluhiyf%Ze`fQ5;ob7V@xM@r5|`9bBZ>&c4+FvZvsL~UcDq>GeGY@gEwPY8v^4B z1folm-e(D`sNJxHFAgE1g%-4Wf^{kf905Wz(pdtW+D`flsNCv;M^SLoy%ZSwB@;%j zh2(Nq{+x5rb2ZG082CUh40bs}>&2p*TrWJu%j^*oG9&$hLD|)KmGOW2QGWGDJj2{9 zks9RU)iVi8)3*udRglAA{Xy(yAdaqwl+oq-$i*vVS>Tl&s-Tg4rXarRQaYfYVkHLn zq>b)=NeF*>^C8xC`Hmw<$*@&rU}1`qqRP37XCXOV{UF_7F>7^Vx?v(t?_W@3wBJklyP->T+|5FAH`9D;DNc;+)%=fy3aW?D-Sj&+e71av3ZEJQhhAF)2?}X)}ZB)Xx~-n!AY>`7!;aPW53k?qRA`57QR7 zjJ5bVA(53rgG~Wk@0Jsze)BdKtb_O5$O@NtnazhdePhm{7tVJiPnsRuAiw$EgWBm% zN(5KZI<3cb%EMi1xIoi`5*;*iS*%t~J`aw%uH}2oRkWs+hU+u15FhQ%z(S>UbJ-`747G_7D=hvGVZDgMoB! z_&VXisnAHx|0;6Vg1E8(rQ_vK@OfZ&Ltw8&pnSGZeqGB%YD^gh)r>2^!f}uufju+~ z_7I*Y8^Rgb;=yLp>}7g?!-kQ*X?HboBiQkd#6djr96!|6wOH-PD zPZiO+M;0HJR`{3xgGBzPt+fO65wx72W3zah=N=oC+B{Q?;P@+kd7LUTn)9*JdGlDo zb3Q@r9X~Sm#XIfIlk_d4Gd^AYI~y|wOKHflHNYrTqkpX#BO#93FzHVTrGi5Z z+0po6g5>8L98t_`2vI4bkbv8WI`EeE9sKy}ZxDq{oq3EXBy9y%ym{WYoOU|X)?zWu zI`Jb-sx^gW2Q5lJSjXA+UQlcT2=XEqm*fA0TfwdB53A*dJ8~u!{PQKlEWI?6shOqy zvG2}Q3S!0~Ub3W7vPok6gANVa!W}0FHx5i;bXuh7+%MaGe9;@8N%_&Myzc`UB?cWr z*F~4$N2cYaF<7LPk-zyA8oEP$sEISqQ^&h5m7BT_#OaI=Z}l|AD4vF-U@JlH*C#oF zJ<`Zcf0x7SJ}q{-N7ND*Z)0BLk@xJPJ?a!V z+)?9rdaL>yD;bt69!rL~2j^_j-~Gd>H+df9ZykS6pMI047k^z&yUFtp-p?ak!e1eO z4aEJB)#2&h_AiBCYTN7oB$W0)$@Crac=f;Tow|3HfATywQ?%o@}#OhhtI?4@8UbA#Honw_8D^#jDV2V$%C_HbT8 z@^*hvJ;Egis6dFSzK@uN>8~gd3{vzpIptYX5tscw-<17Fz2jpNz}}2}Y?so!4&;jJ z&T5yn^A)Q?!xR2H;HM<`a6qTai4)Hbi(17**a0NRt9uq^B{|eBF#U~ z)d(Onbj%4>OCh3fJl$tsjn|rjEEW9VR?YhEWPFowCwe?%^E%&F70vr5QObqs(Rdfk zhQ)pOWQupiCsVu|HVfk2u~`sL51&?|-i4R~{-KR~MdSW(y3{5$I7ZQGzbG1S6$hu$q9Dt-{-M3@G-$AUs_+I(lpn85^Zgn

dIR2IxS!rF|ch1$LY{U#4Z7qnt@AD1z3eHV2VbIV2s^_;r^FhLMC4nV1^)X)`mlr{m5*UpgOwF*VUE@VgvPHnP?3jDF|V!=EyxM1bJlC9YJ>|_Rs#NYQ5E_I`5 zd9Enfl2iU>Inb%1E|t$D5f+t{8eQU$`aS;MB=5mDCm2BX7{?ict^6@#;3}6D-Q-RH zok;+*!%z+h4&&4}NqVejANaVKsy`t6q1u+-6oy>ZPGZ}#Qz%2Z;;c#W=#t|Mx-``m zJ#S=VAsVVBvcPtuKWX7}P%Vif9m7cuSv(N@N^m7Wxue5StY*U;IT(>6+L}Lh zh=9M|v4`+n?`R+-S{)5_j%}3cZ7j{%YsNd0HB3`aux@$x8$3-IAxIAiRsUodz2pY!|`d2+g(#>#r_bwtxn8bI} z&YjoYRK-L}S7Ij7pwGc&23c`CA$%Lp7YbU;c8WY_>Z9fg%^+HK^i9GOq>zyJ798P- z)jr>CxD(Ehp=9KYoFvD#I}hJbFdJ*5=$tc9Ro;9t&cZYlL`)4r#9fUxJ^E%-j#p8RW29hXhYy9ybh$*F&cv|}W2yDTr zmtl(wMxl3~Y;BncUL^G5h)zo?8$=@cU?&bzbg)D*r0+wPAa1rfi{{8?;Dzn7iMGSs zavOPZz_c;zEm{$K7GZ3%Z42ZpQce44ff=92)5Tm{oueHYBtOTdXy))fxu)60B7d=* zvFJ*qdThtxu2_;h62^b!_nc|+6*PLw8ezVtQqP)*%H`eA8?~g0v%cKq*Gc|iomL|Zc(0mS5%3{?nfx5M zs0R5~AI{QHjLRtwG}s`&oI*C==9WCqyV}s0DsW~=B&OcqlBi?MSKya>f5cUtP*qt_ z$7^~W@epN_g7gITM%>_T-UqNC>^Uaa@T!%r6%X3c#YRwxst3NS?!$7Chz4XD5XLURfYiGEeYNFp z+)qi!*R;brEzX{x4Ri12^oO4z{ozs(w-mR`PfdxNm>cKX^Tr08l>Y=RssZuO;;4bu zsF7ZP@EkcK;W>gAaCh}N;>HdSE!y=}^o*(@wRKhT zy{=O9%39Hve$9XIfqU#ZW^2V)fFimt1GG_Ztf9UvZ>Rhz3?JD`M!?s+04vGu@26e& z#(Gr}hi6*nsEf;!)IFlS>QD2H{MJzI$~QJe)vrAoE~}7bY)1S@w9rc%RCV|Lcdo?1 z6j#AS(=ai|)Z9vkXa6PI6>n6jYN$=^#)vweikoO`-pj@MXd|jtYRm6IiGfusP#183 zL0*Z{)t&d>k2#|C ztGZi(XZ0M%nhrw!au90mx#(9fu~w9zi*Gb^ia&%F3xxaALjAE;%*M^gN}vj;=J^*% zv6voYL@@IO=B#SO=Cgrz5j}k$J}01II1e|S-EDLw5aGqL0)1!}7WY(T@J0C zZ>Y9agG>FG1`)yo9Uot-fdrymf57`dk!K)K#M|soal`#^GEN$l@=MIh7rRN$sr7cB zXt!3B)4iNYbaMBbR%>vxsk-DoL&>75On4#a4Bfut3T?PMEqr%d`0gFyyFU%zT^_z$ z8NTZY-(8{KrQs-R67T42rTc_mKaq&t#Cl?@hk(I-q7@r{B3xgEt(M4znlRANxRvKi7{vU1iLS$hp~d#>{t{SiFnCjzPbrgSbO9`j?jb z3_J0W_`HkH1$=1T@Ol{+xn98Z9>9W0<}DRRV5cq;pJr~F_sN9ZV=<58j^66 zo%S$z6Iyo|Cf&qmre2%|n4XhVj?m>RI4u9R^k_hoouU1hj(B3BpOA(V&X+cC!7=O9 z8gcL`Lw&9~uH>rYN&>2MIedBXPC0oh4pQ-@o1kcg>~rf3974XtG3rz?j#0;mM|csp z=qUG>Dd6~cf8&K$`H{k+FApmJwkdoXqhm_T>*%IYZ%-UV7+KXOD`n~u4Dz?cIfnI? z*?K+lueTftFxdkBNyQ>YoUKjN3Ut0un|7|Y71T~kiKRUe{Go_1Ut>!pqH=E3<2&fHv19n9!SCF!%tQmQ3;TZ z*zP$AbW{Rl0UIeZM6MDzr)UX?y^BquyHeFBC_vU<08Uy$=GWCj%*)Q4vZ2D1qV(wKIzg$Fd(LvG5!Q^k^BPs2ol%4OqkapyxL`T z`^O+|tKUj(_S1S}*3LIW5em6{w+*;uhTA`Ab#XYjaMx3bB#|)KEs|Sd5Toy}#Y|a7|+OJ%oAb@h2Afat@=5t8DJJA+Emewn46hv5e8JM#5{bMZLX?pli}4 zG2_uKe2od+!^fi+t}+M;f2;Kl=K1JFKyv#-^Ha=N3^YGp^%i27#f$1;(- zSY)SBcO1!B`Y@4Z;Pd0AT!c_1xy`%MY5oAyLPQ>`bX9<+X z3~%1N#X%em%#6lS@3GY-I*Mj4o>N2!@;UrY`BfZ{l!+G=6X``Y*%>&%b)|w}dK6Sa zKr_9Y7?~5Kf;a@c&vwekeh8LagFe|T{_e&1$<~hg1geDi*nT2MS%|pixvLx9{Kz4~pGUjtKHDz?&>?)?l~UF27sJSYOOocipgP!B(T*Tbc|qrI|U} zC>r69q7eq;s(p(Vgm4r+UlqOkA&w`QiHSOyxX1vxs~d1kT|Ed>c=}YH!sN5@(uJ?6 zj-3$%nAQVJ11KGLcVu)xeD{mk(f(#C2${&HMI{VdvR#AToQNCN*K+$;)GmUBIh{SQ zMp(@2k{9W~r0-~dp6_Yr z+q&(}v&QbRpSSq+v4s618)QCA)T#(#>$C>3yGGh78eEsUPdwp1pRuBs`}`Da0_SNH zIFC(0k$<%n03zU*;OQ0^^F@FO?l+7=Y&8Qq-)f@!|Bdn=P_s`;OPmx}0Ipud>h7eV3%z`vAlgVmsWiAAZ z;Ps*JE=-kq{b13y@EBB$VEw%drMIBfXL5TBPQ!%9-e~pQhPw6q;}v@m{J}b{R%G%5 zv3fqE<1UY=yDi_k?)Ug<-LZD_rT0;Y1~a~@KrIc;Z{dCwiKv=u=_-M)UZ*R}LPPWa z&=naxHUEOH2GG?{=&CN|8bl&(h6RX@5KMpqPBqB)7K;BjbR!@4T6!D=QsS5+Ea zeL+{Z14GTtbk&>geMDD-=<2U@bva$_rz=D_Ff`ZD70ET5U!$u_>FT$1HG-~wPFI)F z)eCfWC0+d&U8T}h1zlZ%KP`_}%}1jxtE(2!*YYX~;@xs@)ku1FSCKrq{_{ZAUJ#iH z`Ki{8HST5u_}*qC(o*D%ZkbXAUewTHubM~ij$>+OT76}ZD>tnkj=?)kgNNsamH|~J z`m$7Et{YlbEnL7MF!xVfT$LE7#_Zd#%(+8hqd`94tj?Yi= znS{?qdlTrtYq@wo+`3VaNs)IZ~>xKX3xO{01xB$|8o={w4DNxxB68=fWg?>``U z;J`stZ1AX*A)|&48-D4i5trd->Znndj~X>_)D@#fjZA~=^Ci?rpWov1OMD1s(3`cV z#{r>{A_JJWSztm-_S|Iudi%5@-EEy?jj4Ee!S(oI%-+TB>+!l_D}(@ZWbaR5zX0>! zd1g@yo%Kmlw>OAkEqlB#k}lEhA8Y--8;jKKzuvm;5xU^)5UY}7mljvO-#4}K+|gls zM>cqU%kjF^lZRJ?v6ylabTqW3ch2THtF=op3m%+bfaK4x%^kg{z+i7>uQIDAf!^Ov zb%D4|ItkfG;WS_JTKhiNK*+O=?lq8Ad5&WSLY!^ir~N~)39&Lu_OZ#mQ*QqsGAAa5 z4DoKPa%OX4aj=r_$}_j4>4RQYn#uoOh#x-EpLsdV9J%C_qXFG=dOMl&>i8A8OGIzo znmM-=mdrlKD~J;4b!_rE_IMqeeGUk5aM6Hd4)qQX76w!^mFkQ33H;iizDU{zM*jf( zKG@uu@YO2VloeJdw!mx)Fyf&lCU%iIv|w)o@r0S|5MhIuW`rQ2f?P4cHpGdW6&i}? zka6~pz)qv%v?UBe0Z3eQ*_oHasD!ltq`cH+X^@+eFs+_*yU>EJ=lBr}D|=9=t4Vl6 zUD3PG|M*8ndGEX#2Em2x9M8tpSJ#Se%^|1qTM2eXp_g56eEgSO^@rn$$tVh!$kFH8 zNtgNZHHEyYL_KrQGrSjKMy<66j8JGyaBSO6&(`9(*}tI@nhd&`CJQJy$B^F z#(D@(WYKxp3e!X@zy;7+K{QeUrI5?=FPP+)m7!qa68!YCkAsi@60kM~Rz3#kf{_Ufm!jdp>lT#(vn+U$tV@TiNynTFFbMk_L)2Q6rod=ou45 z9PD%xPwQppU&;Xp@3NiY!Fhd_V6icm==5 zspteP89L$M(w&q`Q04Rq$b<*9%*z*cPJC{y_~Dm0XhXEg{urhElzcQWFb$T~!Ltp0 z^L{~OCTzdk<}H)%Cmw@^U+H9EMLF~y+MqiwyWt1mx*5AQZPizFxm7FG22NKuwvB-_C?mEThZ{q!cp=hHU9Nkb3ssoUPv!zu&+ zyk$G(W{hq?%K!|U;ENKWmwq*GPYg?NlilxvDvWA8CU<^GJ_^SK`1)$6{2hM5ZUIh)3BZ~irZJvB(7vV}BNfIO z((}M_UbBQd-ts%BT3~_)Exr3-9N=hqQD{=ET0;i#H`vc1kP2v7)?P$xDDcB}lN|#H zCO7QSfV&nIvOYBT3|*w7a*5r4krUm7;-2xN;o4h!GH`5I~VGZ@AeHL3AT^e zf)7k6q*@9ZClq#73#Ieg2>T;2_`)XUnP7J5UDyh1{JCeu!d94ALM;Op!)&j$dgfzO z6i46rvizh`OC*J6yO!bkP#e~{;Yfj>CK#EaqvC86&7mo_Q8;jofWSAwpj~p#ajKL~ z+!gE4Wz;kJ|4^m%wJH7kI!-}$@?Z~Y;Pqp7oN`@_ZhJmN$2F@yz(8ViJLn>8;}KZZ zy%#3d{$`?~WbK$1!UK6$cZUbOE)bI`iLg*0K~a#oD#Iza?pLuBuA$BN24#ee8CLOA z90f!f%54Z}4KTpA$k8~eLK_3Vk4#p}%i#T*^pqpbf<3@C1Nf_Sq_y-zz2a@BoDao3 zo^3&xpYP+5yDZ(HJ+{T9t-%aMw1+4Y(<1PfK`J)LiDNtbn!r94-^_|0uOq!>N|Aiw zRItc(VkSy}2xLGW>6C^-Sl2el7hInN)Vu2K*ZFN5y=^MLC+#cHS`JS)#tK2nxn{8{ z8PPmAG^1BLRU=*>wL`{eik8APoG!C=Z^n=iT!291Uf$V^Y4w++97QLR`fKg_h z04H}TnGk2~1p%x;*i#&P;W+@xrM1J92?1tmTuIRZW`F_vxs`p3Nl3f90a@BCMKE=i zui+Ao7Zb|bUH5V*8I$;^Wk8hv={+$5FE3sDg!#ARt<4RC_h~t#PHLS-6j6#VNTCH68si->^PD%R3(U@Hj%i#cX1 zHRHaV-qId4$qv16hEi%}n`mt1BM~py=!GHS7pRgHy4NdwFOvIU{L>!muv9c?llwLh z#p^w(w<~My@o^xkt}ESbCf5~EYhmKREWRz(HPGE=bJ=hQjl0bF#)8&NkSEqcvRDhv z_|YPf1@-3&J;P(?LRX~%8l>G!Wn)gfVIAb8LD)U$xDshFL9;wJy+-zfje|uX0E`LJ zIB%BrBh0FZ_FZ4A{hS`OfA&xe1REKGX#8^2(;I=0ESEcog&p#NyItw-b%!i};+;*y{K7kBX>vB&cGwL{B?qPeq zwxa~1S+gOU2d4hf{Db|GX0acn!2by8ibDZ3>PUDGr)+mkn%9}?u1>Qb)J~v=PU15^ zkEX)%7U=IGr`iO}m+^*j^u|GO#o0s#16I#q;sU0Y!V@{LI$f+>5?BrOQ+IyIV2zMD z4;i&$?62_@q5hy5&WcapO<; zfxF>o7xMnk+L0>T(*zpoRk8c`gCejLA)U}z;R4vW07f`OhVo11!xEdG=hGu(DR7kQ zh3K#q885Wu2cUiIIW8`exgcZ{^TsZ9TG7uZWPedCit^!d5_IxgdN)MYMfpnIa&9+{ z0Ray7_XsKI!j5|{9f4e?C|@to!Ex^hp3!Qicid}I45>7{}8oVFzBg*Mi-It1TROrO#3xbl?TIF5$t{GAzP@w_JDNmGZX##lB1s zsr3VMqZ}I>F2^X;qT0Jc#1S-L{`Dr!)T9aQc(AdQh{kHjRanYTd&#fWlA?oXkIZ)x z*h5eQpJQHBPczkk?Tfxxi{9`~8~o<9!Qv1w1fNN86=aly)4hqFd-iHWJLl39Fnut2 z=7^NDwei@9H>1V~SFn)o0I1&|=S^9lHySoaQTngX%O6h%Z#o0Cp?vavbBh0*je3fF zC4Oyy6jxIK69lcu^yQna)AqL{$%cqqHtV#v-4pOKMW|KP{0uLnnj*Yh7*SGxIkGY4bPderOSh)#=Pvgr{x_*+GTJ6+wfB|V5`bT#n3<&BVJ^vGK@cQEji|5@i1muI~dpASwY(Xva~8fZ0LBm zKR^aN7huqpMnLmnF@JW1!G9oYrnk&2-@0qDK@39}X-E4=@Cnd9`2P&VL%Q~i&r&Ij zNE$s#EX1x9aE+n*dVx`#_Idn~ypeO^29GjsVVvObYkyy~fVCdF+J4c35KPhAH_Z=H z9$J;dvh~^BXKUg}&V2|u%5jDQ2hhdTw9?c(j;VRO=|7sACA=a)Svo8eh79mPe_u>$ z!OtNrvB*bXqw|LOsYdUOux5k*SfR-~(}K{tVle#sL>^=<(C#LaP$Sn29C>FZi?LYm z5HrSu;(KS>?8x8H%kD5^{Y=H0RLF0-B?9>ZYH!xen@PVx!k5z=$DPf}5f#GkL(C&` zu7n1%(J32Ju>i`FgCY;u_rnnN7c@C8gE*=cat^=T_%|HN%32Ms8+`?>G68SkB=!*m zLC~Hbi0ap~K*G*{jzZ-syoklu3yM_g`$ zQdlTi3d~#nL~60Q7Gd`GL4ySC6v%@h$hn>$*yw?}3$n~+dAvRz3o|dGAeod!#DkGs z%7J6(1~_zfFxeDCkSqyV7lK@FtlEf~=&8YgC{`D2nfrAlBUGxqECU>ojf61I1N8+P z5JO5!4`^v}>wCF$SccD4!Siy?T!^&Mb(HGb@Y_LYdcw9%PxJx`*|d8g{52sxVRN|+ z1}&kyEY;x3poB0G#2~nHBA9>^t;*>qXagM3))&D9c=}-Fp0ltr+AWQ=9d0`)Z!QRc zK>mZAJ3c{r4aMT=o>*k6`e`bem~PAp$W#;%jdUtIiOHzsZ!pZXE{iMOLy?_Ocozyk z<;Z}2t~gMcVb1TlnKWY{)lt$kAicE5JH zKq!=Zh{efHsgajL`DYD=rb6BAmmLY@*}t?_jKoydy}hW-Q@G!9E%4yP1(*pj#`p|rtIxh7A^Eo=0FaXKM@9+-Fwk-ZR*5tD?C$s~j4XD+L(q*}Cmyk2co9n+`jIKnkK`)@ z-Q(uI4Y%MyFLyl|=ssebMV5cHBRIew1tP<*?fAw1mq;$5!T%DHo#xZ1Ia~Kq1P-?8 zo{HqAD0>Zp&GRDija$&KF%}!!obn#j=W}e+yT5KAcYmAS{XL=XH|X8p)=l@H0T}3h z;vcyC(Lj=k_W4U`L8nSDn6nI^m*gyDthAYCT`##(Wk~`W@>3l}?tpiO% zL{C?5%$YQrj6=`X#^F~&X*&I~oUJvv`Ykh+X5tsdXCMGOTWdyv#M1G40UHV=lxC{} zXNFUORNP7|%~!XM^Q~;xJqU0?S`lfRnGY>17I|-j3j=DF)}Nmbz`~w<*T%wk4MbBK zwHuZtm6oa+UP29QJzl%4cj+DKo(SJFmpawG)uDUT-*XO&AB&N@Om;E`$m^^7A_7GM z>cTPIhWV_VS~jeQl82dAL7Z*4OqeOb&Tu^m#fT}n3<%R6bf3KN&XZR05FLM=&PHils2SSbe8b zO}YIOwHZhdz(gtJZ9kzq#{u_wxa~n)gb>z5oF1~Rom_JF_m)^aWPDJ`JC!^UG2*bil|e_5{L}|gNg;ykSloqX zWBKt1%lBfdsKfz}I3TPKDjZ~Ex|RjH{R6aVA~&Do%cxL8O|!8H=H~O!(zP(+L4D+d z-WV>Nx(y3!OR``b2ye_}EmP#GC^o91=eWFzV&h6iMSszQ89lBZv}`9IKxWwJF#BXW zwbTEeh7pU3byfzNt;KEP)po{z;R4xg*>Nkn7Q@%spFiUBP1?hKhWh9ez~>x3 z1T&v+%ygcCjjr-5>eOrJmBTn*v??hGMC6x6D`%pAQBW$b%a?!B-PU{cU?`AaDho1F zBs0cBr>Fbt63K{swsixX5AuGZfCOU#-gnF3NbI&476Dy#*?$K-#ai<|VP2>jJyyXS`Uf(KNS zYazV3T@!tIaEWQOv*d}avD2}BU}#v^7qg?IF=A{TIOO)~yo)r*$AC4+MQY>#%KU?{ z79@{=O;r~@H}ByQjXOMbE)MxvK*`?+2T?Mw4@I}59pP>1@6*HHgnChN z6BtXeI=NXRB|ma;b}`T;p9=@Q@zaud_(55$Mr`-udvay!%glk7gxY0?^#Qpato^IkWuJT|_>}g}~NK zS`*SBcr#UW0lHqapdP>jd|f(p;6M>rK%F___;g*7D3at5iRu_LjU_?3!G)IYy4~%+ z%5?)$964plE_PG`S9mwb;hkn8!5v6P?E6?`S9KgUDh0N67=(f#vBq96IG~;yiAM4v`TQ?X2J@zk;mIzgDFmj zv{l{(krd-I+d>{~wP+!Xx}dz2Shjv$g%wjRk&73F73(e6H*k*D{@6@JLy=_D7O;NM zLXcLX-y*M>uEQKJ`a}LyH3*8_EX(P};QlC&tn>FC%~)A7DyS zkoa)w*;*@*xEW&|p|7Cl@N@3`0oq4!94|1bJ4q3U1?|X^!-PJf)}$X=}mn$btHT|hYrd>FIqWmJNZ32 z$1(p;@@yqn6Guskw#+0}BA(5SVD9blt=Q~g@1a{^#F8*V7^p~m$N5N40;`i{`#)zW zksVTZQtTbsm+OUg76aCSBz9jP&48K7Q27zw$z>dKEow3V-+Z3=9IHUzW)5M5BiAoP z@m-L#BX~s95F{=0B8$-E()Sxe`>)68l&?#)SDL=Y!ZwkJxRc#eU;e5)yx)`%9tx8? zEQRo*h`6Hl0ro8GUDox8oW+O_M6;gVKHKYwU52v(IKNv=lo#}0V}c1&$-rt~P4i{( z`@97ftEUe!0+-Oz!oe64@?zbdpU8-{;(e;+abggnJ+j`>U%|G^l7&eK>BZYanR&uw z>$**$*P=xc?_eB)FLX5T37rOJPJ(>iUbA|hcw&4$Y`IcODT|Pjb!3vPBUBPjAN|C% zbs%CX_5$;YE6&A}H3CGT1?|p2maNB7%2SPAX*PwC7Fb=Hy$Dxi3HCV+qA2Kd5S|Aw z;y7DNlMm~Mh+EWIcK=j56sxnWc2nt@L_oyhchjE^372xS(Ltq=9aj3+P>HRNLwchK zBA39y8G4uw=U4aX$oMfZ=yDu`4;i!guxtw@5Qg~$?FfsB(=J+_iw$>Og(_P09R+RO!Y@-ioj+!Vz+TLc0o??Y9ng>f4rRwd{ou7 z@F&SY28c|Ms8LX(1dArN(L@_NhzZFgK@3cYB(@sRtF`%}Z4qZcuLgsY(Hss_sbY&Q zwzQ=!D($5f6fJ53ltiHrl`2-Ms8ly3UkxpVppp6hYo9Zd$pgg4cl}A`Joeeowbx$n z1v-i3)H&$rySk&P9L3j z{}gk~0P9FSdok^!6K7=!XfIY#!G$%GLljlA{_dnH0|+@E>V=D6#2GD;B&OE z?3I=8W3AM!9u)S#3LXU}Wg?mA*hI>?6rEJ?WAxe%s6}Cs_e2YbtVdtNPyV6u7RTZ9k^(~IO_;)}5)^op^f9?GH2mcQ6&ykRrJfnX@}tPFT_F3bQ{tG`66_Xq{V#-K$Z_R-SzUg2fcbo*&oHD_Vw2SCE$xPT} zw#2=a^X#HtS#Vz|P``}_VMr9QlLwN18u&_ZjF*bRC!C^!PK=?ei0oYZu)tvL5=ip0 z2O-I=<4)TVwIx~_8Eh0as?&cge8ePHo2Qx|5w)8bGaI$40Yj4#rwMf;_6VF3r_u&n zrb=B_`T?FlTkH@UoG~tF840F#O5LTk%OVJh8$}opTZ8_#9(GV72+UZNj(+_~lU1#A z7=ca*O>-7}@MvXAg^l&S{ho z3K4sowK5;t-e#A?kdF0gyDF@Ml9+ig^oqOj4XO+~uMMZ%%W$jBk328qtIjk0InNG$ zjBI6vwE6K-ccYwpbc!i~oTUM0?xBu3;8^q3mi3@fR9+{~^5s=$z?w{YOK+8g-X>bdIEa||z%S;WP@ed>cQVp~=N9fUQVEg4jYV%zdyUYA}1U2-3&H8NOL|E;9nQ`4uCD`hp;fG4{(gRLHhhP>w z3jy~KNH1IZnlFg{vcT8-d@aoZ!sn_-H^rK?C^MLXQ~YV7*y6KG<_(WFANY+~l9!o0 z(K*ZgP;=Z4w$E={#cOZn;~{u`%9HijY#Fg77whxn+!h~5oBYt_(a0{x`&?umL#@-l zFAc9xC@V_X;D`Gr;k0zSoBFhS!3noJxUA)}KsP}`mNv_Y&0RJ_ zSqTzclfWuPr%=xyBH^wo9nI^2Pn|LUjYz}g6OZ1T2#bRwm_HjM5L~ZPP!D3!m3O~^ zbPp5G*F9TsMRR*!1_>E6yVbvX_C-1}blGWA7HA zE-F9RL~N^A*ERkGuVL#1nsKR#(_$2#OMOk>Xo}CJ&eb=X;)51CCdJ3Lu@h4e%@!9F z(OHpJ%d&>j_!>?T`qEWZtsd}R?;u{q{r3w}A;|(N`8o3E8cBu}NJWl9#s~7x>0FuQxSW_&9iF&G{qh^vJ1$EOe6_^$@4!|&f|}HJ2DQy5fSF!Hv8i`uCe5B0 zy|tpcL|048=bSct9``&HSQ$Lx8HZSsv}M(aC7n-|?&+}w|D)pUrj|OSR4=G#c#1Oz zNVYhE0TGN|Gn1in1lkA6J2gXekJCnI12&4hCdM~7={k&ZLxP`tI1b0T4tL{^ zcr1Zpj%3UohDy?XUq~Ks(RjDM_=>ynb}oqXg{>2tx!2su-MB$^$(5u4q0!TAlc#Ge zlc)DwBX&&yl|liT$8YeYRI1*IBiiu!o=DBq1lBKPoFW+cZMbZ9ps3-_gxP`1u{Fg4y`~$X&7qg&&>I3>(vfOT%?F_)u5Ec@HoN$s z+^fKYvqf;r6eYPszmSgC^ekL(Yr$x=q2sk#!mBy&TLOKNDc^eenv;1m>heAEGn_An zvIJYmuu*a=H`i2}+av7=7^df!%<<2RMM3jlDZ+=x{-7giO_KWgJdmmDAGh&CyZ-Uj zYRd~+hK7di?ib6%{R*c6sa~T63mNK---{Rf!UMT>Qp^LOv+xhP7>t_t^1G2k1uD*63x!#5`OlDP5N1TZ`flW~Lpx0j4GQBp%nr!ra@djOdMQwm|DOnc8H%LFr$+A9 z`(PGxa&jEz=y3$1rwsJWF)Owc}S&33?L3aS4aE=}W<5cBVlZ)z^(!A1WLn;9fz+6#i}2o3Drz%gTe{RbFhYrQZF}vk%miW%(Xk2q``{+* z5cqePe-Zm%3D2kTFQ0#Mox{Ib{HwBmQA zYKz&m@aW@@Kb|-r-@*mCH^<_uhg0UYyfdVBO8Uu(6>9ZzZHtM-GUS$1W6L918_lkl zkA@E2^LlPGsa_Uq4(Ry{bQdPlG?8WaOYji>R#f>aNt7V>>+<<)ckU-Eq;u)P=j7Q1 z^F~J2Nn!Q8sp~Qym6`C&GE0$uBQ_7OiuDS65DHW44Yx3>o2uokd z>6gbrn-HGiGA4K9w$4dqOz!dQ2y~cw?fCd*KJG|kM&0)vh9TQGl#0!V_17(=1#}m` z>}mH8pV2E34au^YdOSvQIIk;7cgDcULU-Pn?`#!#cEE8GC(9MwbUnk?A!j7S_Uzoh z%u?UJufHf&gPf)(Tw1;Wfxf^AhkEbbG7lrOCRN%K5z!Md_i1|~NCaWcf(}eM%V`p^ zsK;#aZ1tZ7KR#gKTN(IBv&Ed{^z6D8_ndG^zr2U|(ilU-6T6eV-Npiu3y4Ezf|1PJ z8BB7C6TP$?d|K@(_@KghS%r(NUgB(q^I@VpwE$<$$;3&>FeYaN3!Rx#nA32Es#*LA zS!UxDrhG5H-bd7p?=hph*2|g(H>H~Y4p(-$i`x&s6)x%?b7I(}V9^ zfz5vLMsamL8A2Ucy%LkuDD}t9oisxIR`uGy z_DWpL&5_VkUnlJ*ChOxoFU>tWd~d;p4hLDlPBHIo;L2F6A4K#GM*0bAzWbAi1#sk& z443raT>A{pwL+vu=QliitnKt4E^@V!b)5gUl%^z@TU(Qtu6Q)Tn4N0OPBTi=J-g7+9E6ysgkWi!lWWiP^tb|lj}}P5BcfG`AU=s_b7lUJPQ4+{w@}1k zHhD6NEQB#d&fq3jxH2V-uiNL+r-uu&~d+hYP*L5#v|_fw@gO@+8$ zmtNFVcu{L%o;1~3m~Z_|lpnJ+&nV0zi=t7OZ3#{bX7{6Re+X`MJ5ZFh@!Z(kp=nkzbKF zz<*P96@k!+mn*S3rn&TiWKLo}vUVKa_wq*)HIzUWc!?3;CFbT`t=+so3YTg(?{Vfw z74YN>Wg1-;__dbE`A<}L4PQuH`#N`9?Y9mUfD4z5#n`oP##M9stbHRAKCvRbTQj2f z$ARO0qTX2X>398e6cDrQ+@{Wl0ZchsicTH%(g5t6eW7znEQf;_g;kd<+fMw zzuaE&iL{5apGMg@YR*o}nw{G6aUyb-1(yGm%<}ZqtQMKou4BzAX=ky<2uv_j{t%wo zjBApY`idNMr6rqmLyo;>dYq16-W*wJ*Ch&?VUQr6!-4(BsNmTBzw)#7U*l8aClAv3KiO>yRy}rm zpL4!a2W|3r^HsrufnElznRQfil3aU&z!#p`!@A877<8F4U1Tatq%$WESiCjRh`qbe z?6V7*k0?IKeNkez_rnL%PY@qSCnO8G;DMwl9w2+Wg$JIE_5eM&)qYgqDeGaOqy8;_ zp7Zpk0o(q>&(o{o;Ozv?Z+pKiY2Zv5(CRa+FZ+eC1fIea36>L6)WpWy=ddf0!JpVM z#~ByhtY*U+8rOo!k#cA;%Q_^y3lk1W*dmP{137#a{C3R%fckRrTiNmIkImNrdTYvO zTQ9*6OT^u5z+!FCn9U}+zTEbfe1Y~p5B&QF4DQ6?|MSe}s{iHj-FhP9!G?SD&o}`1a@T+57nq;VvmVR-m)mRn z0_}Ys_`c&r*8dpi$>*8RrY|tQ&(ogpj01-F{}Df}_+M^s`4?#K^T5m1117USKKv5S z$E!Z&{6dACO4J5!zjW{ezkxZlcI}xpXvemF|v8k-pFsC$4l~HAjT2 zorYVFBzz^=O$eD}Oz95KNHYo%N2Ue;nGo1-c!&afyR+k@+z1yQ<1S}MqUi}c8!(3o z6Kmkb1On~2)C(7r7N^LGDx0xcDh$RWBGG}{J?Wmow!0p`99T%RHS>iH6!UP2xE}b= zJybHp<#(eesWQuQWRGBCr!XZ!&u)IZIY0p z{)v)$+ockDgvGOvF`NlXQH$rkwRPNc`Gp9Gv8$?1kjZE)V6w&wu2>sbyQzbb-*vgQ^#}m?PF^t zuBe5U3W^c4B9Rrno%Q}L^5HsT@0;V^OCx8QU#AJd$l~pAqcoJ9^%mbFfDDgaW^TFc z>v#_SR)DU5_yw&SB=!PkpwqD|%-R%GPG44AWrcbKH6@mrLeQiQ$Klq!~1Uf4%+`5I;0=N=;!^Cus=C(-1JqY^jofATbz7iHCs{Ojr5f zB)04@**YW5105eqRN{*BY)}{_Rw@r6?X;)f<**^)8bl;EDD+IHk*AS~7a^d*V$_c4rQ&4=w}qqRI3IH%RN z%POq-<)du_vlPW|mY(>DvYq_;ZJ8c*{&;(y(rRCiHPaSt#-6Gy z&&ODT|1I{uV5Qv+E06uUug2{&nVYo!*h-taF)6n@%@Ljh{_mTu`n>X#^n@4m;L3WK zhu`Yx@*KGxM2FJGg1P*Ls13R34T=cmk3>>3Vp*@(#9s4`5?Nb(m^Gea2!2fo7C8w_ zV&kQ{X|)q%`tIP5NyMaI)ZuZ~ zjQQ&pZ8Eo#GwYoMR{AU23jQp#ji=OAS$MiE9#3=nXpl#_c3fOO)#(|bgLDR4dcd^T zic73Z3?FRgS4wAC`K zORN2vfSBHI%>w9R>^vw`%L}%;cz}$myTMxYoZrxQ?IaDhtfDWCJ`U`Y_|4m^)r*wEl&Bh&x+!@& zt&G>AHpgq_PHPr?f(|TS4zY?jROn3glhE~m5{VKYpK%yXWdUaQ-!?~9tNA>%cV4PR zG752!Dln|gN6F9hj%3x6&`Rdg5-XTxw;w#cRsHme7$!+|K(M6o?CBpe4U(Sd_goO; zZFS68a4`LjS&>~dJ-kgk;cX+DP{3z_a7dvS0 zk&ba<^4;gjC|!eX4Q_rMPP=yoltq`?^xiI96qrEu;?w(M2ITF+(F~n^t$(biEzXGC zxsY0%=F1qxY;<M%aHC$s2OFYI>z}ZIR_0^TC74;niD5l=-Mv3yHFC@UOAoCQZprJ&yHqE7K{sUQ5 z=`vq>`3RwdAx$gNfC`-kGX8WSc1wQOBXNHz9m@l({6 zuLzJvWz6wgnDw&a@run*At$s%@fgKszPQ=aZ^**B$VMbI9~xgzFme>OFVYh@bI{Pd z6yV^4`6!G0i3M_)t(a%Ds3EznWNRGP0s%|vH*>h>i2po&o(7K`^=Ai<^jML3|Hb>H zP2;?-BD+-JZMs4>-C5TfqpY5AA38MK?R^c?SYy-x1tsH=W9^tWtytG5AIF6o_A9FC zh~c+St8e(1T%QEq75I#E9F2KlefIuMN@V=0{w3Ep?6cI@>whx1Gkq+=(*^$PbSxcn zUev~UKzJn0HSADtwBURpu^jq3blDy!7Yuax)ZY;oQXuEk=HCuG5bRD347Ij{HcO5! z-=}^r_RP&6;vO`A(9b{h`=}edif8?MwZQZUUbIB|4fc!m1Q67ASPGxoMZ@#6B_ zmg2u8ILYD9k*h3;8RW;A^%&Kk1PL)z8t4*VZHl_1MbjV|w#=G3b1=}6(^>{hGgF3{~cI(wGn%H|Bh<4XS8 z5Hd*n#+_fN{Y8D+zx%VdKkSRO|9GGFmw)#5jXS>3`2V|4`?r4f_J@73_OI;I{>0DT zzCm!4F93gM^l3lkv$sF&i?#oaKJ90J_V$f=UugWp`?TM4*Js{;!@gMi&yu?~ZvV^O zr|f?(@_h->G`K$}@wjf&37R!2Bltp>|1@jzXz;edE9ICUDo#8xJQO{!V)Y-hKMj*c z#eMndGxSHwFaC_>cYVh4;m=t9 zPx0l0o#dbBsl+HPIQ)v}VsbD%ln_d}FU#Bk+a09_VCh$p-=%Bf%H5m~30U0D3@{ zD7c}3?SwF1!gqldhzNu1JBAgIn+aA(%_{G)(86hg7S#LuK?{fyeU+-yOHdeub`t%h zA3lf*EhN;6PC&}ePLk~=n(v{O=9`}w%Qr2cqHp+J!GbP}hWRl*uLcnrXO0XrttnUuK;xI;{doN;6 zxoRW8)F=WxLq>Y^A2QNzMyi{Q6w6?{?WokE=ju0P0k!zy((7c~?Mk-TZrNh>dqsKd z-9sm_CrJar8G)T_wVh#S8~bdnS-#frD#2WPWfyKHiIsN)Td9z(L>|xqTZtwm`>I*9 z*G-n_(E=iwtElmOwB3N^h ziK){!BRnl#9qIT75d%M^w5e-g?c%Fo1&P;m%#%JUOSv$3B=NYilqhp`LiIHq`Py*> z6mgYNpDk0@Zcv0}XhtQhc0Ii>B8)3j!QHb&4wgF&j&fcs>}&&+di{U336fFMhzd_~ ziYHwr61FNFo@5Ps(b^m{jcbMT@!DJV|VzwAF zn~CN};oOLh*x@g>LeE|_M~9xxMH@176;8L_CicyE?rN74^?PPBcV{3RcwUQHliW|e z;vuEnYt%*{hMCP~5m~^Ez%oMGWVy7L+;TY=p64hwr;@&VB>-g((~deu`38J-G6wg6 z@~)I&U{A6E1zb2~os5L98}c22a#%~lk`amQ@R2;1 zIW}~Kx@`kIgZAW*p*(E`#FXb`QV6qOC>Bh{>CiCH4MlNa3War$o2A|Dx zy%dy9L^)XdKV*B*vzQmw=|O#J#n<1BnEIOB^M-fTqR<_HSd(|nqR^dO)Fn50|6u9_ zqE%K#QCZ8Itqh`KF|^vKA&Jp?saRco*1Kd4TH`<&M@8kUBZ2izP1Z@jR(*#grKY#R ztZA%$HkDq?NilCvldP!bv^;f&^uoK??t*uzwC{abEQuPVeeaT1?_#TAFD6#fYCu|* ziqu$&Zivuu6Cx(o}a zX^;}IjpUdqqbkhJ1_~ufEcts{x9Ga|SkyRas%R`w9m!F@{^>Y0neN6$tXa$gOOiI) z9r{1qa#UuUccpvgJC75V=n5O0&58Mpw}gG{2`qPqCL{Wi!C$BAaW`Hq)lW?ehpu9M zjZnV+JCVO(eGS>()EX+_-bH^~L&aRl)VGGp>?`t~t4DrZ#7w537$ZL&+qui{?~NaT z;wmf^8s6om{@xRoR*1Kv>kT^>`ocQ#tS_uzs9PfY(K9Z$?`nR!Kf>9$BKo$Rx2AW6 zM}J}mvB7#UusQIfI)^BtHiIr51bQ zQPL}KlR3;NUtvzoWLKDT1P*KW5f{Q7RxMa=Y99DDZ%~lb`@y@UDhB!Tnflh4cRBOv zv3HeE)%*aMBQOwFTv*(B8!T0 zno4poqsn79sfz9NW#&Oi307>D@99kmM)vxi;Kp%TEmr>Jd1EcFTOE3KnESpzF>x2a z!nv?-Emx!p+wHaN`8dKtvbG)#Eb*p+W>JPYbplvF!7R!&r)FDMDf%p7(}|N%nUihs zWbD+NvpW9NBgTP_7u!Hfal%rLRLy^-=_Aw}4U03`DaYtkoS{60PR&62$JU-k@C55H zZIf!-dCw&4w*;n>V~q?M2la6Vh?sY!$!1FHj{@3dVPaVMuGFL!VH9C0-BI_{GX_8M zBvmKmq(EC|B<~L#m*ktIp$76(28cY^32S#5TbQ~$rBRJ7j^jIg>MvDjY;kVSfdLfr zH+F81Cvebzy6*hG3TE4!szbIXkUdbQMo;xv+^qCuPXLUs)t9!2S<@eDndV;l1Ll=< z)xlq1Lr9e_JBv8s)QD%iyOqbTx13vje&_bUoLw)~0yNw}x)A-;i}Wc6Dp) zsv&mO7`tkUT`i7XEs0$%ja@B^T`iAYt%zN%j9smYU9FB?t%+T&ja{veU2TY6HOHWp1=#jXykH5s1T1bx*fsUD4n14e^^UAf)p& zCnnEkeznx{yL$b=R~-(GrE=^o6Cou_oZ;}*bbui0L+;3h#gD9$x8abFhtzkK{7^~V zDQfX37j#FeRo)268Usv5NS4?L)$$c-$Mv^M^mU{D+oYeQVgYD`7ISTC@EY&vN^%(C z93JGp*c!^?S0L_k$C^YrV(eQpB;TQjX$@UvKhj|@TSGqkc0^li==xac>!l}Q`Q{l& z0tew>xD1DKq>@pge98gBc4^2MuGk%t7(Mpvj@Z@Rv8#sIRXP<(H(NtvV^UV0J^Phk7n0UD-=HA>)L0{`FYhwap%>>U-H zd=31uBw3%mJ;-i%-fu*VDuteNZNRV$e^`LETxT7Hbc znpSVKT-iA{$+v0U30ca+cI#)o{CG5&5;C4u6A)I;pB)BjrEXa5)$UPs%eYpA^KEDHpGm^*+S3gr4NUC*aPM~XKgjnFlF;kgNWIfCDgsV35Q)YX@umj z`>BwVpQcc%bu)yYx}i;>QT&=A2Y;)LPzpcBx-|Z_hSKE`)vCECLu)@LpE(d@^doFE z)LL)|qm&-J1G?s9Q@4w}Qpg%LqYXMqKT%KrxrguyS+( zu}L_eTZbO}?V||T41r&$U5@R8IWLEy@V22%Oh3 zL`cRJed6@L+V@UU$RVC2-tawe10;%*ke#XiVOzXUAl=8XfeXYI>713hhi-O{4s`=} zt)UbEL^geE$Pv48#;#oUm6T8Ax;2y;dzT)&8XLRHu&>~1jKE4^AFtqO^90fd(zbdA zylLjdHIm89K{4FXb@wNpg19}41+dM>{wc_smvWxGb5Fw&qBr-qF4L8jW}7>-@ZQ~6 z$MzPHg*y9ZLOz6Ltm;>Ub;PbWiETF$c}!h`uUbX^gsLg=;^v0>CkR?89FP-H?8(9U z)hD|{A2Kf@>G*(O@?nKTH!-~0TZXaV^HY3?hRm`&^?%P3q$Y2|jpv8oQ2*R$bU`Ly9mR(z~@rjkGkGH)=D%X6h1P>fUTZ zB@|e>Z=ML&m>nxMjp!0?_&H)a?`B2|U1l~lu}CU>c`VMU1j3Zb!y0+Mo*&`iYlq5) z=$)UxjF6AwY!cw8<*s$cMqW-Y7aGVTZ-b9CgH`lsH_4Jwzgh?Y)t&epktQYlSSF_DU@y6Bf`U4G>4ov{WkMQqa2K^h`1H zI~xsWeDC6s7U8ukvDDXH|Kr` z5UiGdj(7#Na{wXiYVpc=n1jQ8c7fyOs69KwZ1pzE1gJmE1#)^v`%9mUcDampxq6s) zX8m$ceWSZkl8i&94Lq9d6k5j`Z|MX*(Jg9ZX2Q|tCgjVdX{(YD8@s*Ojj!;jIc4SI z9x^<5M~1`Q_z-&WDKTr1J~qN#ErP41+n&96B*^-Y|3CRjk6>9kYO*gvk7C z)O%<9b%oAgS$4sp(g_KHQ>}M7yi1CEr$6}3=~3V@Waq@Cm>04`g2_)$ zS@=#f?JYdgOaXTYtpFA)o6%33(=*NLyu*d`6sg5a{+!w$CW8+})1dx{f?|<(sad|b zk3NBcRxk1{(FHpSY9G?&HPZ8`2Khuwp3SgeHe?3<@f)9~TWS;iY12aCEt%KAYaqFK z7xICP?^UJKLho-r z&Bz}}2X6@0t*UdV$Ihw%hkUv+B=WQpx^#zHcJDYo5OHm*%%-+mo`^O?wtI#8#!cv3 z5wSCO?#ACpfoWyfDUBrMy4L^w75&|`vcphxaJyRDhYyVyL)Y6HgI34bwU3IvAcc=n z5JUn@$I>%ltEcC|Q=46)5y*qr)GzKDt0zHD}a(Z5$ddFGy4tm(i~P*um3jU@f7EfxM=ucIswRjS=+9|o?G zwL-CKW@Zi5*lZe}P!ny6L(!RY%-g;LEocx^$gFM!- zanp&kD<7zr)&UUK;BR$P!MqfoI`2fjmeOjm{yH<*a<}^7Xlh_Cb~M$^CD+4|b0VT*1M}87K$i zw0urT0Y6j9#-IK^HSr4FtY26f8Wptp$j>1(Zmg>I*@r0 zuN?Z)pU<~Ijy0XPGaJiL)CkP1Sj$XV?_x7`xBae>cfvN2OG)G3jNCW18VVghxu`Yv zZJ@Vy{z6Yp#y}oWyE%Brnq!xVtDI4@Tzq3uNrQIYG`G5oyF2p5eQi|T?AkJg+%9Jy ztf2mAt9c~&!O`Fqj`^eOF0fwip@jW1*y>!=q9YHaP+R#5iH+PwU1S9tSeN*~!Sw|C zRb(cC)hq~{7 zn8H=+ljUH8HbE9F=e_cMVIDbx@W0TxBmB;bn>!NMU^f}4H3O{5;@Vo-Vz(h(M}&4y zIyjAuCX16a~%;J7gISrrs${}>enL!Gr<_;Yju6L zCVab^)!q{+V!k{z4epST^=3^|kx|p+safp~70N+TzFEC-NJQ=|u-V2dqr5@-K3*?z zfx~j-B>?RJ^_BL>WqF;;7PTG1#&IQdmUuIc%zZH&SRQINce#rXba+-JkaRnKg-LU$ z?F4q|=nlAb%unmH$o6}@4x{eFWMh?OZgv;H)KRS6h6k;%8<;WOpyo6B)Mt6wS~|0p z;VCTn1Ln)QZ)Uxg8wqYqYT2JiDEHD=F`YX_(@!Ib;Z?eDN-DI6!}C$#LuM%Iyq+1G zy#^fYy&3!7mKkK%m2a+8H(uv*MAoG<$Lhul&rgV~bI9d2T#6tKpK6J$p8FSd()pGc zZmh`XB#@-!t?Zr@IOd| z!U4R;2&h(Xr+lDZ>3Ih%vRi#?4Oqn6qa_*pgiazIlGUU16YNnsJrV~hJ0q&jd>d5b zuv&HB4?E$gRUeS4=6>fi0C!xeKG|LS{<>O7!Q0eaPgQ3Cs8zGlSxJC!2R;#_&+9UE$;!_F!7@1cbnU}3T&Muey zQltdHmHhedXm9XT7y`S#YE{=Uyw?OY4QfQM;cARx=z>pq(oSp*0YGIKw znBFuE!-kd?p%~tP{4QyfFc5wf z6S-H+=d|>2a>n7mjd^7pkzTV=^U@U@@JDV5eV?lYEAw-*bq8+<-<4)QCxwC^^k5~x z1pww~cuqMajRY?Q2@VVeqDx>VOT~qmM40dkf>Vv1pC6FugrWbEfxqUnh}u-JyWYsqXxz)i5SjgQ#h7W7ui9?3zqHIi@vHiB?5f`Wc{C zjp>s5!Ow>|Og$&ol=MqyfPxS=WFbK2XIKk2Sp1KLovYbBz3UUK&wyS`GiRpSk#de0 zj|z6xWW!o8dU-n*<6&%|0=rthYxLG@G@Rs!X*V7gI5Sg-hm~m5tk+~h&S&7%|2db# zR11I(12Q%N-aXpg_;+rD&41SDX%kgYr^1AzD*do z8(*dW{c0MeV<1A3rE-c?QB&5OK` zHF^IG8Ekl)P4D`;A+6pOGD}eNtN1F%sBdfaZj&0+cmFL1^ak~x-`Gs;(z+te(O#{q zT^g-+xvut6UF|Z>6zJ-fi$okjkJML03+i{&v+u7WovB%`d)idHLAY$`X@ah@DO%+c zUF8osCUbSQ$gxB~CcRt|SFL=mw*1TL<}|yTT8L%$^l{V>rhX8uxlz{~(zQ0U>Q{Ef zjd2z0{(kanOW3|Xw$^@}y2;>u2z7tFDAltG>I)Xg;~je(vsG`pS-!?3nTmJ4NONvs zz2wNdQPyp{TJv4aYoBeFuP2ie`oj-NZy4O1DpHEeDU#c~?=mS_QU+ob`A@I~`|nL~ zd?jW2jPmzdeghp+^H3>YzP@%cTpl2!sQ@u-pPpxEg2VK#6|;LejFJDLv54A7YiP0U zqc_|3(a_<4wvL#}LG7dMg_gEd-T_ubH-|WKgHPq%Bq`Jo6>U(DtrUWNHGQZxL_mUs zMJp|RDl$wuAcTOuRJOL04v4l>7y&vUhaDY|V%D<7^qh7Fq*nFEE(;_)w3aI-|K9a@ zjzHvHBx$;!c;^=*uXGvHw60)>C7i2LckdaFtZ;`~dmR(#-Rbe} z!e~YgXYX#<oL zv(mu3iBGezq{yE^xgW6z#_%8WWA zN*=^mT7CYnWS8_#p=FHmoE+hpk{Y26T)3ZxwF|A#k021Y>5CjA)T}S^jgS*)G`$ne z`Nc+PIS&_k3z|Zk$pZ88EF2b6%?QcgMfw=w)RqcyaW-bo?B zM#;=`I4n;pppn}7^{JnJbv%%Taj=;K)Kw|Z=1kF4hjM8s9BQMCu}=Q-K_ZWQYSB}K zJ1NZ;sYaWjNgCA}DTXUE!cwEiUus7oSg+l)g1~ck{6gGHP5nxmDNMIWIKZ%Cm7Dzb zE9hHo{*{o5`BSwih^D0|x+?j2Z&6@frhDgJszzNupWAa+&-CNdxo0IQQPLFi|OY`7xfHh2;NTBGt!2r z&I}8@YR27yFmp;??Qf$*z;94iSRiFlYfYgwlwK6F0P7E2M*(ZKzLvU-&|3b6L#y~( z?K8si+ZtNWU#V6Fdk$)ZuAi&F{tS_BSh}M=dIcjly?Y|-Qh1Qt9DGi8#Hpxy3T_TQ zC!1)TPn0Df<8`t{c;SAk*(Vrzod5??<_U1A8cAoXkIpK`PEcwJmrt-b^WbK7Trp1! z%}j;8ODs-M{otk9gqAS$#xt~Cj(}aID0SD#o<*o({CmmPvPXoMVBYk6d8kP=hYHKg$AGIwgy3EihsDh@PtP!m1?Trk?-|lRVu#GT-u* zntp-MC|_ojFAtaFZUc3;+c&7yrcn=?-U%VA9@^k_gv)Ub66itxs;r+*>!-{5IVc|P zTfE&4m9}}Dp5G00k@*oTfddueqy}~8`Le@+t2_$VE_sVcFPU!>=|$@s>z5?DLlT)x zN>2Zjl1TcF#OiS1+-Jk)GBZ8+UJw3og9qS|{LXu?D3dUa>!g3dE!o&ZdPepMuqQsH zpwaVEY|g` zNDx#j*L_j#Ql1#=_VU-%z!62e5Ay`_b6!sr_b%ZX1&=EZHewI&>8rC{GCtrI{C!luz;$53k& zW?0ZBMwu51;n&DDxok1km5Z>x4c*N(@%_Fv)nOGjQ#)Mdsm8<0cy8(~2bvrbY$o7l zZZjllWZgk|vx6y#Tsp(2zShZ+`*62B+l3L?!WU6PI}9#95|r=0cMpGOu-HGoi^aY~ zLLA$>WojPTmaXkVCT~6>THY?f+1>vJ%gy;Ukn|cA3Zl~+r)5t{Zp(N_SF$6w#oS>O zhes5 zfUdMY7#v9pYUm@{dT*;b^9H0bdXqw<^F<|wJlX2$|Lh{Wt=xx0*YQ_Be6WpO8h&6m z%cu_hN&rX%L>?`on>*GLP55|%!K9#WweegLO-LDHaqC}aL;WF#pCD69)L%0-j!N&3 zqoO|Z!TKdbV1a~KUV{Bo);LGUS;6`?QA0sw7h=7UCSc_srr)1ddme=5W`KDZNqjes zgWw=&BDVx1eF@MgyA4sAFB+N#fUxEpT(=a`xf z3^oJOdV^pG(N83)&ukrIVdBJNm@}26a~v7Ee(m{S8G5L#2QAu0D9vNgHu6fgiqJL! z(2TS67_^PNrsy$f8~d#o=jd(MaV`{%3^=TBed_mDc^w@mfrAA@_|(t8Lf`u135lO^ zUyTUyK4twgV(Xt{$&PF&2sWn%zncfnlDTw;e$QW0AX+j(Nrb4W3e5x9o)7npxVFTx?{r|dLfu4gebz$Lg>rbu1y>c^MW%Jx5UQTo@`60u zRFT9ZepnuwlWqU)fXjGTX0Bs=ujRjZ37ixz`%n@OBe@=h!Qo^;TTd`%nHs2$?dT;S zN9*F~Mac(}8U~LKN;w|2_$lBH#UQYcDRalAQ@+NU$ zR>M1qiWjbEm;7w;?&dPe5+Mxa$sWxXNx+ykwd_CdAfNg3A{{lO$@_?jh1<%5niM{zb0Gu?~jd!>9Xcu>O?;f8z_#NEYv3MxSA?ii2LB7PPeTlmJ0n4s#<)(Kc z9oKSleGC8o-8feXb?hX=iFbYNX(tJa%GYw%4F_dxo6YhKP2SZEvMvE9e+Zo>@9!8U zuKcTv8vF#;$~WqPH$_IeQk_O4rc68@(EG-=s56JR07=*3+kW_EqL3xMSbGKXB{PQ> zTK+jK;(zH5Y5x5LpDL$0I!q-P;Lxt!Xj1>?7SdB%9hq5Jo+0tse&;8fGS#k-zp2@Bs5cV2RR zripcyN4DXSu&(DusJVX7R%@(`|f2}Sfu%0mI z)15N9KcKUqpn)!6I(c%|>R~1_Os3NCF46P2jK#BI)4LS&IiE;5YL)})E97(a-c`0h zeTljztf}?w>iaXn$$`a`rZ<`>KWRUddSH#Dc^1O`pBwf^bg$Eb_hdNyBo163HZ{dw zybNZLzN!BM48fy~WlU{4y1J@gM4cZpH=t~CethI$SAMyNRR=QWq z_d}@Z;?6Jze+Kw|HkJEO1T@pucSC5i5K3N!5idJ-|)FM8G{(43iEK zxJQ&|oxN5aH>1rky`ACmU5L^bc@H*u_bl@M2iZU%rOEpaCQH~W5x5GejJDVK`Yr*& zUFroBc05z0OkNz`L?Qh$I|0c5 zXtHRX+>NW`)*AN>Li0%d-y6LCLB=hgs4HkeCWUZ-yVS*YbI&dU2DYk)Xol)h%85m7 zr%#mhR9wSVW_0!n1Eb`!sl(o*8Pl<2sjO8t5?6uIOg@LyehSO}uD! zT~?l6m*{@DMVOyabjO;3?P`d0&3n*SrACz5cx|_8Xo{-tFwVmI7`0tGx$c3gR`n zXg5+RMUtIBCS}yOZlHiyvibF88qa+&o@reAVS)y@#RV4NUA-*^c-iz_m_f3*_V4{H zr(hkru3>u(UJ{I@N_{Yz&HrX#s@{%Wy=ds|PFc-?_K_M5iHW3`#np?2q((z)UbWUc z|NfqcY=-8oaea!{AI>2k34r(pS!L@Is+nIxp^8;Rj=3ecCy9kTc0{MhAGKNMR`n{< zWpps*-D16~QA^a1p>eT*k(?pQR`!Eg()3UiDpbh1Mc%F^!K(*E!}|sZ4a~LEsM+1> z-J{j}AD~hYW$X9vvjBH$6pbjK+S(y=(!V0BnpiCwjaiAPe- zoCNj~_)slci6X$em;5JMw&ihHQvH9g(1M>yW>NN#J;>ldOuu6kv;e?(RTYFor}RVp zWVP^A5JT4Yw>&T3E0xRRjw$vsS=O8^(|2*_7&yBFmq}Z57QAdNQ(L1TtIcZ7f5Sfw zCT1%alPJLCS>~*YO`#2Sj~_WK24}ZS7xUqRf}YOd^Qhbb8ytx_~TQd9NTHf2pr@Xzq>CLQ~irL zDrS}#9*YgHY|+cF#I-|xUE6&~9K6tvdBKq%_O{plQJ){_lK7_TQ4WvfDvpkAJFFgG z9Tdb3#%-@F0&>OawF|?Qa!zlL!ZM6k0%lRO}E{k zVBC&ZJiX)m6D^8R3&PAOoWPuFOo#pR^B6deGfOQaoax#K=f0n_prw`(PJk3>>et^c z*Lz%_Sen$Vj#%?D!XfjL3CiDU1PFC;?Kgz|cZYle%sbTGmsu3UGFf+P;r=U1jqQ2= zSPKUgDrhr?@8lEphrd{$aoIvZV~0AIn)?9s4+pKTUricw9&WH1jFD5IzQzlnIyn_t zcpLjysjHtGE~FUAsP@-rQj9WlN;TbZCzs#m5@`J%ND5N+J3OhBCy;UQ_EUsrxC0nh z96bQLPaXQlpd*E@?Rz@Nm+HlB0BADVDB9KYT*_|=9X6R==+3R1V~3tlfSUfhwU7J( z&J_|#qR)EATGlcvOmCh+v`Ozod`e7jF)TBTGxjq_tSow*&1cm9IthT(5lz!2qUp=l zE8x*`K1h=TbZ~bF$)p#PHvja>s7Ya~(2aJG4cz}4?-vjdg1p^6Hkp{e@0E#Zk6NDYjZfJP3Q66OgD#SuWAimVuXZV?Fp^U zYK~o1cRlBsw=)`N2^!107t1ORV;X2h*u;O~GEAD`<=2PPLi*l0TwHtF+@&*D8#9-N z2uk@F&zG2^%q#nthE5SR9p=-WoX|2qBCC9cZCKm%B<38B z!|0f!)FYop0y)O?Vz|jbcI*A}iTtOHY=pzn{_+S-)@ZZHz)ID`R9VBi$tW!jz95YX zdHS1J13M4JH6S8c-6cbJr{inp)K58wr^X-K6HG7R(FV({IWpP5ECjnn%a=a z%kPrs5r9WSb^i4LR6p)T1--H>VWISSk}oEMZ>a0>cCoR>(&7?Th%|;)53N&KMN`m zB8$t;bM!eZ`3@uVh_6XGp~v*?)#`b<C;Qe-`#K^-?Qk=U`_^wkb>P%7vdv9JV3Z~~q>jlyl|!Y6hSRUM6+U#7)mXBwU)- zkr%A*Jf6qgNOj;89UuIBxSI-Sj|ZoN;8M+(T8<>;HjAU^(BQjW=H!&eni&(8AGTlY zbs`yoD4AsGAk8`HS^#s?-v!N(QlbsR*hSvGO~SSQgGh4Tm%*A<_9=jEI_6ne-x@VL zQAS7|>VnOJbK2CC^I5x@tAbT_t!1&LWY=Wyw5&*Z zmuF^*JM?{Ylo0v73*Zj`0(V{nvgjV_cLkddwm&p_5Z@&mPE~SGX^MI5NRH-A2y{yoTSz(jzLmT7I5p^a zY01P(3!EZ{TV1?OfbOfEK4UcM&FyOah2@TpEQzJ_wLWB#WwoD=*x)p^RLUe%_%1G3 z{UMSEB#p&o#Ug?3O7*K5F^T3uiY@(`EOL@Nw3@NkiMPPUVjZ@m-V9EF61^;#$zRCQ zCwL#1-~Dy#HB*6sBJMj4WhW)5*FE4wQ$91>jhU{?O#SVd1HaW}w}rPqdqJJrlUZG3tI+0v=vNIUal zsC+G678_`@s6fMlb^1^Fp`89!?0(BL&n9~`8vdosisfUQtOdPDWnM?WFqjhTw3ODwVN~O1AgQ~C6RGqIJc@;3siG?sb6}j>2XE+>9-U#$Ye0A^q+pbQ8 zp_UUtwd(mjxDa{1oZ?!l+td`dTy*bLJ!gxvnE}{ z`@&TrhNbN^G+k%j2bnRwK*)@eY{Q!lAvMypc={(FU|FUY*d)iK+Vc> zy5-XpyU3W@zk)xlB5M{z2_#)RTRL4+C1XM8(zIGTy-2 zUo7lwpwEbCH5G)E7NBMb8A##B!einnsD-qhpwZt`FfQ!Am>EV{banAWKu|VeNI(!d z=ATus9P?acjD1C!#+@m~ovE!_glQC}S>nr1jgX~%@#*a=z8ti5GcXp|BUS;@OIXWY zYTE-Mz1*p#j}62d>^K)fx543`!7i8Gl4c7p_nxXL+fF2%BDz!z%%R@?u@+tW)N9s7 zw3gpKCNj*u>iawnmp7;nOwdqwxO}a;@Mf;OP2uvTeXSQn<|eW$lCcXf@>eb~yc}m| zvKO^_DqL%7WJZdo3)%nyP2(S|;=I;*}3o>V}xQtXU;-g9HSjY_m@d{hF-=X;ycApKTkB z?-MxFq8<8Ev9D7?(6m>e3~7~(y0T#%#5RZArX#A=fic?UpOqv=CyGw;esb`fS0xhI z43R1>`P*5L%1FXHdD7!kYqn$FhdqKW$%Lf>H&BM5eKHe$q9lm4s#>i%Q#ZhD2>sY7 zr3xmPZ5+~j^dX&uW0c84K`C~r${)QS(Y}tu9nl~NGbInZhv(qutB31Y2NzD(Qf-e< zy=t(MQ*rxn(siOn$QJ1IsawClUy!`DBj_wzn@$F%HotKefJID&D{SFO1`{iT9D`Cx zuLzAi@T{Q5W_8;4cveK{0lUm$6ejXK@?GXWZlLo=RjaLIqoE)|FUSZ12T2ZvC;$$v zlf$4+lV7`PEqQB(Po0k%#w5hlr$dF7w|?|Y98~;YZemc;l^uhMZ_~35F9G1h*Z|d^ zf+`K;qD1O5?^tah(=4j+45C#j@h9} zt)yZO9^8q%V|{A+N0}T*lBq)!1cA{4*Hg2r)Q`_boQ!(#AflEo{NZc@{McOK>lQyL zo9Q+Zi5>G1>HzfER$7SXR ze14!>#6o|F&9?=`T5ysSh8>TbXY8zyHQ+B!sV&z!3Xt5ePXC^S?f1RXr}(AIrSEvW}Xsw|tZcM`IR|-pFa?nP{IkCTm2vD23z;NiX3> z|4w3s4|4362hUBQOt2Mpt>r@^HFyH4?o#3ZMrUm|hY}`dvQd0dkLUHkzbFQldX@tk zgq}jq6__le2>o2Rup7@3ckxCupE%nsAD*7o68zu_z60z~C0z+O@AU^eGF&)~Drk5!Iq3pGO^m%W>?;S+CNEc`nZE&Z&L_Y93kSE#g zKxKG=B6Zzk%-qWk-S;H#P15N}PCHjLr=4W*gK@M{_r<5Q>&@QRZDsG%Iqmj;FPgni zGyWgHMq?+Qz>f|`GupM53P6%1le1oav`#oSWA(~f%fY9vSx;Rj)`H~Zck7p2-*>;{`o4Ff^?m&W)>o%nj<4|5_yz8} zz9(4UBFC3o-{LR1zFl8(ec|KQ7woK!*N=`x%OmoR^l+fdEO46LSs!DG!m(_Wx8)w< zWcKVbX6}&$z%|?4rALi&g~$gBIZgwkez#DRqOpp`OE$-N-f%ZQz>}zVp8p08`@j)z zznt*x5+HWxr~2fL#9eHsIuDJES-(>UiEUTuau;a#95smxT)#VT4(cn>h^1PA8!U}j zQ70!o35L@}4@Qs8nr$US9FktwZ1Ws;hh~6j&6#^BV+Pu?HbOMuVKeVEIC%`V@iG!S z(^O5F-f@|nW-dE@FxIznJXX%Pj>i@HcqAMy$Kx`N$7QkOahb;Pt8_%v)nV^4pL$`K z&QdI)ZRZMOfqk%e&`8GM1pkE|?|K`@Z$KH-564HfJ!VZaqv*&w@xm$Qn3j(d8{T6! zSjEo1d@^UoB0KcN&Rv!QBt2d{VbLr9kGFRLjHVjospY_X!ERhs~X2nfNVqGF8-I%}d0 zn#!Un`G3y2cQ>1m2iEWZhfeODyL0ExoH;Xd<~;iz^d;2+EDPEHeKh#L^p+GeWWl0!F8}Rf7l;!D|8YMTkH>QGRFB8& z5O3mdakKa=Na17x3A?lKTNyFJU(Ds0`5^v>7PD+bW_J%ZAf4sstf zUl$0RD^2hFKWbd7ykT{x`Py6dtZ;L1b-rC0d04(JG`+5I-LU8Bivqng`3rpgp*lYx zaa4kTfaqrIEt4PxaFEXd$TshA{gZ$`HlN4BmR$3+%Qe)6huu3MJ7I!%wqS1o{jDKM=21T#vW!j`o=GneCaKw6x+8nDgeZPk$tq zr+r?!iH_SR|Le=fdzM~SOTx1kx`~n&V1KorA3jMp6kb zL^AqMX={hRURo=>beT9Dbm;LF$Ji=j8c`){1S_GOzYBSl<+sv&i$qv-K6C4FGEUdQEu&2bP3GX ze~TlE205HHm@lqjIN%{^h>47%dT+`5yayMoxkpAdf3{hXZN}HZXaGK1gXs>3SZrC( zBX9ouGs$%F50XrsW)hJK2e8s0j86-xp?)RMfMf(b6qRv=hqDPSRcX#gdd4gph%0zF ztRVr0`RWBRjWLe%E9c=GW%!hk2n7uqp`gJe*&URwl@1i>#iSf&-Yoi#pc7*TG2Z>_ zmvL~JF25BuC`5$0{DUA83B^IAMl%jX{-v4k2@w=cE6o5Ta6qJw4Uyb6=9A}}frBR% zD_X#!cxJ3qrGtTm}k3Mr)pv~iwMJKH8cYRSw z6Uv3d z4@@YII|2EP`W`%k(g@jgqT*)M>#NMj^#tw`igC*DLfl}ewj0dxzaUeIxDfFG_&wiA#1_P8Iej{6~ySy&JCX774~eiq&Jcn`Y6=Bl zALl$!JpAu5cd>D?k-YH!dO+mzirX`U-YHq4Mu8Y3HzmUt@v8HJSu=}nNvKEdYe67fjhO*f=g=G-8eEtOhVDfltSMcKo;_xA& zW5t9s2g_XoV?Y!5Z-Zsh3fI_?=_PaBsiKO;k-^hAe7!lpyPex6nO}V5bLFt5?RF41nUx6(50%F+qF#w72LX~6 z>)_BoM~8xOAmFY9BXB?Wscz9}kY6xsf{U|U{@#TLMItRGN{`5HUXB3OOyiDwN zL|22uUoUAn$E#6G6`2uPsOF*^k*bq)r;^?4F@{U&=&HgS5L6(F!Cw)w4@-1iA3+y) zr4L=#)hm7PuJAp9UY`@q5|rE{`Zm8TE5NPNQ}U{r$k*8dsLj#s+mvUX)T%Z`tJaZXEpsQk86zfYd(!>)~_|tPwNFlYob-H)2g1= zs@TxiIQ?1|SC#hb45=#n5~n+7#=2v>=m+z61~+3$m7E3^F8D^ktAuGuQ5zT`th zDYC~#vKZhDU$Xb^Q<-!z)Jlgp42)2Zg+Av9EL>hd@;tYt5L$JZX($FId;1hi^Qeo% zc1c7YB4+`E-77{DyjqEYWOE9UwP97828(Aa77G71sOM?DZ$TUVn0{6__=W| zCT+>cg19j+-Ne3@D_%8Amr4spr&#ltP_@)l_$*aOG=y!|VvhM7$!l){RJpY;OIulM zVKUF|?DgTiqtZWTL zfFVqYQrS0k(Q}kOc{gteVjyqn6Z~>;gGiYOK*hai{#BZoFRBH&UwVJd=4N%TT3x`>~0x!oScr(rgUvYYRgHVSdGH_t>0 zwUYa&M2$=A8s403_vXDkDVc0dO`*IasTY{y5Fc>uqX)<_yuRtC^mXS~uMc_U^xBLn z|4bQ`ZG~$E>bi{NnLDUfLHllhWO?Jotx_ocr+5(`-%PoyjMrnh-2ken&sZVu!O zr&(j=Cjvj`HZ{dJy);Z$5K?y@5^z8GhM z-jc>dnP@4Zy)?S7Rb?$nVQ1R)ZSltm#YI?z_bGYPpU5_4%}e5_2m;NSt^OeL3Rk1c zSaV9tpL3%>|DK;^gYvDPAzX>)3mb6Ua&b=;SX-5tXPADE$(XG-f1E7%l4{NC+oXJ# zXe~^}=Lr)}O5`4P4=S%MufpD%wR9q5^z7?;S(G%}>F5zvHNvzG`A$V$zs{T=&>6R+Cw!Yq^VExYo8rgZeJfF$ssm3}_zr}8 zhlzh~m&>=y6;p2ZBx{?L;$sN4P*432U)8y_9{KtWEF$QS?wMx%mtGBxT{q3##Ersi zy-8-SNC$E~w*MI)uhd>IvwXd&$K8NH(&wSm^5uW+61AaHVRySlC;AeAs>x@9ZQm~;H1`TF2^+V_m@W^~ry`&qkzk%HdZ6B}^5VnY zbOE6bvtXi3XgO`GCq>j4neTrQP}GVJOv^8**f^4hq=HRHmx*DqTAymF^%QEA#noFP zyaefxx1_VI35%M`-C>-zu^?Q;g78n7`2i35EenQ<1CYr>ObOT^i-M4IR?bk_h8Duf zL!5p>p2?r5(|dJyo!+lMcZi;`YBj7(weX3=kp*O)%VI#$A$HM#UG&#dl<9d11hUNX z26g*$91g(>uxI@*V^(1#=j)~5JLe}d--+-x!<0;x`Q9+Y+`)~`_dTZX1VCDlOi_Ev zi+{?7Yh}LgF>d*dX4oBK!cRN9#e}!Pw$cIH-<}dYSTuC~Z=G4cx&2u$HUT|N&wVoI zQ<%dAK!5;(9nF0EwRb*o=DqO3b?P(kJLy)WWZi!NI`ckN=lyz__c?$y1!7~GwRk9t z01Kiu7cP2jbf%X+qnOk&vKAO~#e*`Nu{YdfChM&*gM-U1KP` zHm89|Fd{#y1?)^~QBshZy+97`dHBoj5S?WUGvbz#Fv>)0?C#3kldo7LdUSG4C{&t@e)tdD%;7r*ydZd&YbHyP)I%rbJs02 z%Rmtn!n`Klq^D&i`R2uIL@!lzeL7p0kEppg-|TPx^k-Jmeo?BO=(GSwlE>BuAl;esghh* zyB!4FZg!266*`F#{OmBMh%-2pLC$e)MIP0chBfdKDn+6d=!26D(~ae89(+vgSN#TTF!I zExA~>v7Kh-wUFIAR_-y=xw#N$_>T(O7qCi~7oILiOf)KSL3MrfL#;O&?LY@i@{$>0 zx6_o5<)cE-mfI$%VvCd3dQB|Z(*44#AH%y$v@$h9t+`h_Z5BvnJIxRxv1^O_bJI?X z*CDM?(6rv-CNOJ@mpLEl*-DFNw_a1*EgtDqRxySaPe$=>6gZ9PO(R285>J_~JkLkG=Xcc)> zx|3vFk_#kZ?vVgH%r^Ug=OD&y_SgQsr{&io@-=+DAyjM6Gq8Lu$*g`~zLun4iTj87#ooockIqHo&F#rwmXW<5St(~#3snhQD--ZDeT+5 z!pm8UGchn*Dlk`#2FfhElN~!}IYzTktb4MxsWF>TlgUxI=TT7#E_W)ejH^_UZed7} zZjCvdMdi75XcSn}_X!gfL$m_pEgj#)@@Z}!Bl-YKYx^>sHVd_42I3Yp{Mh9qW;Ko! zi!(IOm+aWDr2G50i)82b| zA&r6+E&m+~;#NUb#;@dv?Jao`POZb%RsN~d9{;Hs1-loe6rM`U3#$j?g!-3XJZ1~P zgBu%aPU6@3DTV!Fzpjt|D)uE-Z*OU%U~mg%%~qxD#TTV`OSVesZRRfrE^&>-^0HJM zp`hVsJ4-EHBRMqQ<{d$UHrIH2heEI+bk{x>k(qb-LU}U~38}0jsmBk!kIC4iJfU5o_*{iZ9*frY~z6 z55A3aKx<(>3BR&^7bPd4k1E3m`QeXx z+C&$5+6+@a5gW7V9yEk)=6}zqYJj)2M)sol9gg*M8SCPUj`#nlmBL4|u8KLBl#UU6 zI7+N!AVoJBcW2uh1KXz|l#7^u9RMEk;Z$qE2ItD2kcI~S30Y!|K_9wvh3P!3QWS1Vlu6Fu zvrqnx(*wtFJ>4C6!db%ha+uTIooJwtJ2<-9)MD*&;)2TCX5uK>c34x_=|M5iJgxPt z!wyO7c}1g&zN+=GiozV%h4mF#1D$&Gyx2+Vv9+0OgXpnBPEPVzRXD_Vf(61qcq+lF z2y}*tRwI8bmpFb`GW0-)#;FXZxAY4cB5_oYNXT3Iq2!?5?if*41TK%TvPQwP3MDO5 zn6C)AmzViU2pC)P0tH1sJtN{R`J=p~njFm9j0mijWzak}qkKG}znhdv&W8=w(GkmH z^40}E?h5l%c({a=iuBmpqXKg89{9;O?{Bm&5cg3(q@q>$JDo#CK3s5ltiUR(=pJ}V zSbpT2J1_T%e6qiVvSCp@NQ01>0KxzPfMf(#cuTvpI@wXJ2_1X9c*(PQ$4_yViwM`| zrN;$t(5th@d##T5vpU{uW~;)wFOsjJ&UE0{%D}77H0m;UE>l*G7);LNR<4IeaxjtT z4ORg-`pY~>Ix}6rLG%v$8@N{mH-E3+SiQyfO9!WZXX8|X)UG)7XR2~`9Ng6SdjxN; za+}-I!i_cEfdu@sN!^)a;@UX#D%;6^ zGf(!MosvXRPtSi@F}2!2-~1zXr6%9>VzTThgY~{}L`_deWXu6bLY}Et0yM-Xz`nLI zEAkgGOW(!cyZ9c7up9_KAHIEqDap50dPK5q1qNV(5SWk6;ncN*66}-GU|WU8(F@vw zzkdF0$%3gZmn8cF8rwQU)((tS5>Wa$t#P5p+`W!kx+Kg_4bE`mk7fv!$~O>JcEPIU z02ZbXVe%rlbrA=tvZ6Zd`WB^F6H-)yLyS*1XAdg}?wtv_*D~!@=!P6!+}C{*kRaLf ziOziJFu^YlH6WxNz|=1sng&@g{!(=Vk4S;9RfJ|VvWyY-VLB`ngQjNx4YHNHLc^C@ zJxAt7{HIfix1@|mQc-6FqT>!zGI2wH-<~niQi1o@!V0Lfh$@&-nXZW5t&vnE4*#J2OP4dIAxw(c)*3Pd4BPWUQ&LU& zR?+yW7EP#X^9es#f$EF^3vxc?9rWSZ?fLyg;7%$}!dPmZ~zY4%m;ITJ-h}aV>gXGfs&G;_xuC3p&v2ZC+i3=?Jvy1yDT)*m$i|4pb&zi$eqQ)6>bsyzd zP89>GTu(l_LZ)bwY?PuG^Bjd?*%5~_6?uV}xS8aCjuqn1RtRq^h`gKvM2CK;wb0!W zDJR@=@oLgK>#_JQ&q)}_j&)~@^~^s`Z6n5_`H*J@{SDKIv2G#;k9E7PB|~9W&|)=+ zxN4R%W19~BN?#1+uzw)m>WOC)3**5d ztliUW_uwwr%e3fYR5(F*b!tTCN3ix9VdpFDz=RGTjJT-_HO9 zeXA2fNmrr86`cM%R~DErhN{!W5m!dV{4ODP@4TAh&_~)hICt&f+G!d&Urkkkq=(j=ud3ST^kzXF1rwF zvx`lVm(6Dj7CTJcg_BHKN(`)}&#=G-i`IavH&ZLB3XV4=bDb0teIdqWLaOj)_)-jkt~pHfrc@ z1IcXhJUAVtBxbg^RIJn57?uvlr1rw-nAkPfifg~=_Lz9u8xvXATa3xDrZKTD#lY59 zuD2!*5fN9|&2htKppm{7l9jg^cYS>tH6JMYNmC ze^m5TH@h=(CxnO7nyHE-N<`)$wU}!Iwjk>BLH5WOG^m!4B?2xK#l~vwY~D`o#;!fA zwWEYlO``;zILyQZTsrWNQlH9wpRGeUE#yCJV=%yDlFw1F+5i)i%)hYuw4gw2{)Q-S z#CRO)l}km#fyidxVb&^H*Q{(gi6qNOBp@e|2aZ!B6YiP(nB&%S`{1r@Tbq5o6Icm^ zxd|_?I|pbEx>kjC!Qjo}IihO*Nreycj_qVE8Kwa7g<**y!*}DD;%z)iaI!q%$TBBN z8DX+E4qwK+!Gv^}`QS8L9Ums^7`~Y?y)JOSqf47YlLrWEIp%D!YbP;oY}A&n@b#wA z+TOD1XeAqID*@U5Puq$(4oquA;I*>Tg$aRv zE5{^UI65JKv%Y*E8z%8PkoobR1t4VbV%pZ?t@A3@B2ArBehfa4>+M{N2FlgqlQdi;E76 zV>p5h-wpQ!)K)3tD=R-DN=cPGs!1;?=NS+Zgjbu6U)#S*zNS~tP!`y3E}zFrfFn0$F4Q4YFW?#akoHiQs+;*d%{3O=s-qPqC_iLcF%brd|^MUia*;WaQ?@vZuYnUGG zkNdAqhfKzS`E5;q_g`m^Xx@V!(gS=7O|M45&vLQHYR;7IHVBXS`Emu&*YxepIsn|)rF_gI&C@g;kH&$lK?6v^PB zUICvvyF`^!B%$yW3!jSO@Ri7Age`wUdajaFRRn#yV-8Vv9!YBb3{kiksk~~Wo|~{m7=eJHsJwyV5-T8_T1#*W+LBGvV!Gdk4;uo z+hoN@oYgt$lOgDjqlzh&m=pP;==dj#+FW-h!xFN`{CAElEfHqv9`xa=omsla1o}2K zD$N&vc9d2s{*7n*oJIgaRKe~RvenAECgbjEZoJD!Gftukvc;#81vBb&ezs{QIj8)0 zUEDdPuly$GM~}C}BP;MRa()tlNplje$<@CQX}H&G-o6aWswPk8ye!;XhLD2JiQ&~L=;rjU6T zNhRW1N;$(NVnEJdSDLb|LJ6XMs0%1Vqk?NI}*E9G25caW{MgemCu} z*76V%P%L=1TV2q_3ZT}s8=?)MHs-;ML<#Gv-w2OlkINR?^LqC;RASe?xaeITK1~(c zSqLyFP?HBfnlnlSMNITaK(HV5s1MBc=%Jt%ic>h;LLAoFr-C9m6)42Mm@T-u-ULo% zhM>GXWq9FgndwegEcC#6j92FMde*=zGZpXGYOz`rUb)n|FRoU3+ngb_eF*1ObO+;( z9DN4Rf4J2;?t%uTuBJ85=6NZ;EpGCU0@}^U$76`qLx3!Ak`4R(zKT57KXK5Oz=^Tg#~}_dq>C@QPqkZq?vjp-~4azD>;d zYJTt5OXgNlGUSHW2v59h1>9@1L%e-WacAQsG`A|_Yt$2`@2-sG?!CaLw@ zYF@~APOL}0C5r`F#tsRt9{?MLe4*t3Ccj0`H=zgSlDmGD)rC!^%(ohhQLzZV;B$YM zXKgjphQaO&N+G)_p#m-V488}gF)3x!SFi!B5XRpakM~%ZeQ2A=Dz%QKMMV_PZxY5| z;8u&^hzS|KSKxz;@U-&ox^ay7CTmD}U@+mx5a|Ry4Nb)9 zSt|v)M+>BvL$lnhN1CS!U(_AvclaAyDp-a<*~T&i%3#^ELKm%8R9n+RnEVPF_#m*n zZ-x|p1X)+^@}G!(^vc{<8UvLpR%{nsAVAW^h=YThJvM;kfFrT4kyzT^0)Fy4m#ohrYwDtSv*OFcWxo~|luExpgq9{Q44@@kMToMvbQU(Cnbct~BFMgX84dB0X# zqKl&in-b_6%Esj)F0CQRzuC@`fgZ7c5C&AIi2vG6tVRsjvEn>qy?x)A&7=V5F&Kyx zY%IK78nFVIap7tjVJ;igUm4}hr=_*p58GtADA{^9|)U0{;m z?WbS$mS(d$&rUIk_XD9ykte_IPutQg5?9&0q_TOquib<@X3piWt1kc*SvB)pD}rH= z(#-Du6eo(7{&Vda=rhbK*1o3%%?XdtZ6te!Z#A6qP$?=**g3uUAPsvS-JwRSbPj(} zh#4+U_s-#FuyEl01MQt67&*)D4Mqn0y9Xm)gv*hhfnxyPJFkd;7GWRAsJ{zUS_ByU{_x9{53)(&lSLW6H$h|R}#Je-{>+0f>-B}=HwJ&_+E}%VrNmKy@ zOKv*ieIWr(*X)GN<2(tSc|^YKvZZ42=&L>~i&v~yQ!mBfe0nvG4SiPbK0tg{#;*CN zhn8lY%`#B6D9u`0%w5@o`k+xWPJ?Pv*od|oS6Tx^i#AdECJI)+;^bqM3Zz0IQOIlV zZHS%rR-Js?3y-0XjC-D`DU!(tJE@iv-AW(yas5i)TTl-dsBKdf2a@a6w{TrqK?Lej zUNkRUC$p}emFqECxp*P-?jKiXUb8YPR6bYWP%QS=$Ey6)M(r8qgy5-csvg=atO_B1W|)2~ zAIgBYeS#}o$_xJ@i;}?QpLYse%A;^W863F09)k-DP&rk}_E#ww;y_1UH;?>8Hq~0w z_e9xL_fT`;%h64BU7op3YhD+v8GR{geswnXRhVG^M?>DMbEY4 z$d5&Pw8sfWGaBmrjnxQ8^f@tTM!WIu>B%Ts>n)`vN1iQW^xc4_{Z_3Ea;u>(2n>=U zg7^0(+MI$B$bZcnn(5>pESYl6B>GPc7FA39k{0elqBec%_e%75bm!@PKI#p=`oX^B zUs#ptTL*8&df%6v{^r30NNna4qjq)zstXhi7DbY+?cT9iFbRoG{4sc!=IZQ$38L)y zBls1_ceC9!T^IC2-4fAH3pvq-$89;$2$d5}j|9I>p8q2z+8C>1>9;O`IsXKF?guyY zA6$VdY%tPiVVA~U10YB*ooX%&2^*A6yI8f2hKnTqSj{+cYqw_Fm0Kf4R&fJ*%BRoUgP{{nMCP)luvD)x z?s16B)%;hPi4A7#$gx(zW@V>wXo6uiQBAuLlhDdr=C*A2C1XX@-(Y1)z|lUO zgG98m#`v^geMpy1ebQeF#&_`ArVgTe#mPOnt+rZ4wR*HYo(Q8FX1=e>#XgmFCs9Pa z%YVV1i^kCS8&qQ`iwir{L;K~-5$Lkn*N`9zuMM08@xCFd8{&84gv-w2K@xlasM51o zzwUAT4hinXxgOfm%8RGY+~vq?w~aH`{yAx?7x)lf4YJe>3IH%Dn?o9aD6&Lp88VqX5@$T$rg1}Bd1t)XnAocjh?8`3M=D!prt}9yyj^CafRkw&%enozTu^E;doO zF!khgnzRjKv%sKZQM7OHhiF)A@v(HFuY{sSkx@kp%shDD=tBt~c81+tkb4bD4ET~7 zFW^Ym7=S!vYNRZa#(E1uENzl zq9pSmd^4NVPU)X8`^q@&lVl$J?k96x&y!@y=YN|Yk{7>U9%x%Hqf$ojj{|JIjPQa2D)57lXOp*Qts=*bO_YLW97x84*s)mv|_ zYO1%s6&(;A&s@S?O1<^w4fMa*M^g&li|J7pqXDaDa`bX;FD9x&;Cv8F3N`aU@lPJg zYJ+bMaZa~nREp#15vBPvkObFU6dgx&>b~duCsqjzpNq!z@2uGxHLmNr8JuZ zi&^1WCzV`&&UO4E{Xs2qWDkG?)cNzbb^A^w}JdHly0C2Fro9! z%(n#jVJ?XKn5pvAwd*0;miRin4^T8MsCAXrD< z(qfiwVIF<0OSmd5qV}=y5}IA7G0Ek}xA{?)Re!G*WK_Vt7B1N^+01bntE+5_R_$X` z)#|(@tKvTKZ1fX%==X7^)SNzpgv_=Z)6FjVVa;W5-3ehOv01ipeu#Q1wmV-G{fz$% zw)Amyv#t7Gaq4qGl$(aT+dNZL4mpZna$vtH9`?lHJsQ{_KG+iWx*!iE$_wyb4c8N5 z<3wx6X5S!$mjhfT#3P*6gx}#shj1GZr`_ntr*JzV@=?);KY&LK6oK&)g7^!UAg1Q5 zsJohy6J=O)6kOir-6b>D$^2JA9@PWzpT|M#xBVFqln~I#HxF}37lht8Qb{A}X+v;brLcPOXXSkq4u_VEp;(ZJjYEiB;f!i}Ip0bG_k z^mT1BL9d$dMtuum$rRHaRimajf=%f);;%qxHgiB(e;S;;r~}IR?50tru=nGCz_^XG zK1{iC=tEWV&6$?($lc~6P!onnK?8!5ljL-JQN9U5S}IcxFN_#8ejWI1)>XEHijACN z%0}QPS#{GiH`I1w(Tssldqo`_RcT^1c4L{b!K%SmY<6=`+2tK2Y7G$+*IUJ>rM0l# zTumfC@_=`daORi&N{$w0K!8ZMqqp1gTqc-Y?&E1qG?cRUjIurC(@8G!p+$qG7QWR zjP92)W0t#uesc%*DdoEhumeMlx6lq9BG02$n)gAa?4j-HodZJ`gT!z zkkiNd@H;Xy7>>>DH7=lybM)Vvb8Oxb0B3s~!Nyqxoy~@y+W!G3!jb=CW>o3F=z}@u zA#rZuR!PU1JpJ&U!;R^0hQ@QU^!lm}ioZeET>%LvIUSjcsE(dQr-cm|IFo)?nlG^! zm&cu)$1~+Ia+4N3q}E$>-~I6|`uYQD(XSqC-lE(#Tl6*7%JS*u0&QCK$)Kb9^yvzW z6QZB?mdq5_raO#ZKYwb|=e;H4>|eIN-3m~=C8x`;m1d6JjFJ<{3J!$7V>@M!xfG%N zdb8sR*u>8*1|ux1guh-?{HGUtk1f3nfLXtizbLFg@^&gyM*t#0RM)gtN>?ALVLxPcG+;H_;nBB>EWfTGI*9NLstiH>386WmB@$qob#=c_-`$W|JLlI`c?)3eKdr7anUlDe~^`qmR9gn z9ER?R2Bt^Qlv`z9SpgRur)xulzTNJcKylG>7c!t8p;B=g!7Rrr0r}c{?CK+IYZpXm zAzA0d`<}UF;9xmU9cMp+Rc5Z%Cm2q)^}$K;A9M_DuX5x0&s%!8NM99wY$p^}ND;^b zE`&tTCw3TZj9!wA-V^bocW2Ad8#XL%^ag6i8NF1^bUb>pqL!(E(ft0*rqL5GcP&P5 z^SN=~dPy_Rx7KK;qi^Zxy$n{!cz8=!>fJK#o;(s$u5`YIrsfKh>wIgFWU`!Zp~bj@ z33-ISc16p;3Yej`kHDs(B{J&+{hJLfPnPPFc7}HDvN&9_u5#O>t3&(KrlHkUrL~FK z&n{nhYiv%BI8|2&T|JocHC-HhvGJluptCF~DTOz-ctQ4;knn|rn^Ra`>=j9j_OJgA z1nUxvG$K=C*@+zXmQLdl#iC^b)%*~?NXixM#>460A~Z?XS2T9ADzL%My$3Cdvgr?s z{n%qN61J4zw|lU!N>r2U@KN$0&*N2-r7@_Zh+pWn?4Ic7_eKL28|nE5BX7=xfh9WmpuK2!-%!n zR)x5nZ`iSzMc>9s2b&f&Ip=O|d$;wn0$EbF)!nu&#Vtk39cK7Rs?U&QC0cXcEL>&j zfrlXQH~zo+{*6hF`fS*y!G;TvBh z5t*v5z6M>vdQ;(<=psZY#K{&;pKzmxX@M?5U%k6#%RyhH0c@n8zpMGQ`$SjGy4eZl zly2PoDe7I0kjsvDxtKwtwl9tI8fS_Hp3qogZZx!qX~h@KW(5!_Obh40a$rDKx>E!P zXK4GpC3jPdDxIFA!Vy}KEZyFRh5{!b={O3Lk&%Hq=`xHhx?Hbau9Gg;nH^mx;wMLp zvUlIET~5~mbh*x5Q+d!=Z+E$lE`KdOeV#6#1(<5q*a2KLoO$dlC7q6r2l|s7Q3>D~ zb^A~bU2b$t7%bceMn`32puUaqI5*a~3u299!0hp$adG1@BigtS@3h@GTb|9iHCT&V z-64v*$>Q<IXc*%EshR$8}RHRO_RaSl%};g*fu-`n4&Mscw1xo2Fp7+ zO=OTm!|x7_i68hV1lu0J1Ce0cmPDL9fS#4{_|u z+)hp5e{&a%9EYf`#c~#7_smMRa*{%$f*Bv;(?rw+`T&N;bXH*BLd8%*Q@Are418`Y z{cUjDd>e7&DQ;wruHvCo?9}@2fY$nQ%UXkxl%uTd6IlFCWxvtNyd^gZVW!ReG}g?_ zHv|A*B5w^wdWApbnz@4~ZGVJ1aSge{J{akDlyyEtoenfFb1LlJYK8sVt}qI@qGX`ixS%C82ZXOc zRuGH~3{TbT>0xm|6pWk^9sjH`^g1|vl3s^|kJanh;cj~U zQ8+=b=Y$Vo+Zc=t4Ij|!xg9tBN*XDQl^ljcG+Y(AhlQWj_tV2q>veee3B8^d{)Jx8 z58tQPuHiDhUJzcY*Ad~{^g1#;Pp=n-Z`5l>_{Vx36~02Rnc=B=y(m0EuNQ|$bImtr z|9-!4sA7nmZ*H=m=zedvZA`eAzB4v_j9$lu2LSV6#25ZA46I-zJNzHL=7f{<`S|dD z%}?kU7L(`OXw?h4!Tu~vVY0kAx8-D+6&|8(yCyt9uRji_>Gj%h zie7&bPSWdjVYgm?8g76q7mQpVuGi}g;aa^GhWF|9#_(Rf&JOS9nkjn8;jQ|_6W*ZL zo5C;abx!!Ndc8UPN4?$>{*7L54L_>ax#9cuIxoCZuk*uq>vci+cD?$;^Yt1C&(`b0 z@U?nf6uwfgi^G@d^|tUtz1|)kqt`pa7wYxS@G!l03!kOeqHsUG-W5KXYbL4!9jxWD z`YgTG9+UA1;H+7xsF$jvT2ICve{W~lW;#U%Qbf?Wz!TVS&FX9Aq#aQ--6{Gl60N49 zgRGnZv7)CotL{acFVvXfU*cimW0DxGvAUYAIe>^+`T1tOXY5x+{rN}Tp@QNa0LfC(M-0GP#?@U9`5&$HZz& zmf9vrDN9O?j4S1BD)l)NE8Jg7y(6WBZi?1*Qd6l-QtH1D9MRv-Zu;#h`RyZq%Y0XA z*d=!&BMWblyL;vCRk;&!X!tp~6Z?zs({lHo+&wOL_siWwa`%ATS#tNF+%1*6hvaUN z-2GhcZssl+=^p;6Jb752TqSpp$lX-A`-R-)$larImnnC`2nwgm-7n?tOu74&-1U*W zU(4Naq?4JC%Uut7wp#8Ixgo<_mHs5ia!f5dMyArl@g;56Inm{&d{W%V*nz(1*r1>t_Hw zb2>QODf8Xet#t4u`Czep@MZqg+!mdEA9ka#y=I(6RW;XVilnpVip*E#a%rZ>v1=w} z{#`EPGRx(XnOPy1^D{Td<($loav7AlNiL^l{zEP&XKt3u@tIrXl9X8~m(H25bMcmJ z0CU?q@5E@R%&qduoB8JOKb72y{ZRN6r>Mg5J${i;_y~W@U0?UZA6SnSb6ls~JI8en z=>pQlq=O}MT)t&RLJn*8CjTiKITHGf3x8GTd zNdZz3sgx8V{e$!d=`GR+r2VA-kp4^RynK%97*a3NDWrj3-6qq~DNUA#EaUC+#NfCG8{ClIlqfBsXJ~L`os0 zkp_^4kcN{+k;aiOBVA1jS#w;Elb$9$N7_Q#Mf!qtkd$!G99IugFH#>;2FXWSPI`v) zBB_G3jr1WYO!}JiUs6}_xekcvplN&84&k|Lx@KcgIJ z7U@RP0#XraIq5#qW2E1cjt5@{l5$8>Nmr46O1hO4B!x)zq{F1nupLe%4I~XArIRis zjV6sJO(D%76_BnY-9(yCx{dUE(i&1JIKB)#euQ*8V|Wkgc;Nm=(sjTz2;3eby-NBq zaJY%|Thd#k_vqJcv?IzfYRP|t*;>owh5zRMzWmG|e>K5jw%+hlS@8TYTif8jEvuhk zbGBaPopw1}%Fj~nvcuB4Be^Y>miL9OL4&p6%?poUFbiWz7|igd&DQI*ahFN;fdaoj_3=;y6+*;oCO`-{kKL--H8E_;$6w-8Otr|Js3X0q=AKU*T{1 zqWtXC|Gj-bu8X$shM#ma{xa;s*?g6EI%=QT?=}lAd!+nohS@zI39f8~{%J=@ctk`s z!~8W`0&U_J3_H8Pu6bI8cyxU7l;&qe^qqLRs>M@>-w6C1mgBp^?t`>(ceX-(Xycg!sA`R@rTve{-*uI&J%=`zv+(%HPzHb@3Z-XyMZ?n$$M!br#UO?Gl8|J9+%o`di9e!c$=YxIcF)DfuNP4K=j zI@!8CX_pbaFY;7WyAwBr7I)2vEJ!W9iE~cj;yySCTH6f#2wI3JF1Lo8 zKeZ*?1mw-}BQ!THwjZEU_5I|VQ)!_se9b?yea+>Y3k4+vH=g00HgUsQ52mWL*%2~Z z3(|xhXiaCK_@ZNulyIrKLQzsadkTJA%&S)`)+J1I&e&d3^WFNJ& zJz58v4X-GEqJ14*{GXd=BcdFht;s{JUE)8Y0uMGzKjKL_5~;?-U7rU(mW4O5Dt`Lm zk-b9aU+?mRdlIXdg-pTFsGrNCv8wI$_hS=XF3eR&phI(TcNHuUaKj#NAKVT;MEl3& zYh0LO@-MRcR-t`MLrK3^Xf$!<&jpHqgUu?-pYSWb$sUvtIK`SgDEQIgxFU}@Mee2u zQ^4uFu8{V|bF?euzdwt1`9D{7(B%|CEa~zjz|;BcAsj&WJLE17jatg5f>L_nkve>h^ih{R z$(Bd70H!iLY05bDABPTA#=*e881?Fi9z|)$9bJ2!`4-hD5RLppQS{#JFi4995I;bl zV92NT5E5_j3LV0>l~Sh4$jKtMf_K{2C(sd;)@JvOHn_jj;FZ$g$!vSssYvuOhm4@k?6Yaf9i~!Ix}D?MX98fEET?$ zf@n^=qxuo?gjy7|ZG*Kp&9rxo(>iKqRF4@HEYj6!%hgLWS zc`{h_tnc#NNY`;#SZx)_KChcQ@{Bh3_v1fl+TTx{aRh=j-`~%dagwQVGjAQm{%-d_ z+Y_1z0Ah36<#b!P_UYwLr%T@_mP|pCcU&c#8?JnrF^YpalJAi_SQaI))yeAVVZ>d-rJbC8I=_u?XTL z?)}=Pw}KxvjmPrKj_67A@pw{(LB`_)-eRe8f_}poXvrgJNpJOaz#c6B-t^W-)lo=) zHtmS^HHUN;X`etkQ`&bF`cEUn=vjQlr5%9x4+2$b{=ayq z-R8HTx2-(4!Yxd_1*-RwhJSIij6bw#3h-^T7A!UyY76EvKWVT`$9~ zbK`G?92;(2kh0cd}cqWB^zVt03Ek)M(*w7G_q zn@?Vys*d+AAI^Q_fY83@=Ab(=?;3~2gylk4Q6{-2`T&c+796GMu`%D=F)PMZ%Ikqt z#BWU*0l|E1j9^}AGfS_-wc1XELAZ@%^%|%h@K3Q8jk0pGLhj8FjACl|TQpLz5akft z6NNeoHcZh`KAo)$2aJJFR8I!8vYqCy{c^O#ds@OK+S^l>Sx7E zB$9h7hZ1Ybfb}bOVdR zJ#MJb0_P3`w}g1{~6z)ObF9+=Qx+Y$q>Mk61DW8Umj|L)gxK zBlDjM@1;Np5YPvKbhwOyjf;kGK3_D*oPI7(7V!jy18L1CvLX@6HVgWm&*;$Z2Lum0G+$r_O0?+)gSzZ!e?=#PQkg=^eEtBT`HVId&1p~dfTRVDD(1o0*q zcmBK9Zu@--4{h`1kg4I@$m5Q*S=oD?vOksI7L5>X3^P)9`tn7g(84 zbH2&BI<``XvO>N&KlY$h6ir&L7H@}l@l>#H8y01GCZC*iE0@}SV8ha!hIP`0{aL)k ztH8MAUmR5P&97n)N~gBkuo2A~_8K}K(y(><^anvKs5AiTrBoG_XE&O|jy${MVwx9y zY zMB7UicUfO@?rfav!FE}=CO^-$8~q9e1aNPEVZX3O^2Th}wh4GeBPskdr&Kv89$xBX zj=z|U-^p}=AsW8H$sB^g7{1cU47rm`u9KNkL?+A0d?lH5C$k@;v+(IoW{+e}ax&W_ zljLMxlT0JMlSYpg)cDHD>>EyIzms`KGJBlN?S^-@IhmU!^O}>nMl#PjnQ4;wos-Fy z%)?G*q-0h)nZ5m~y2!~qeioUzPUfpq$o#~~{D&ntJj2QCkzXb_nQf98!EqWTHGf5LjHQ((|MZq@AR_q%i3lQsQ6d zxRObykj^4qKpIDyN}5T!iL{thO1hu)IB5;(CDLZnKS|Z3FG$~#x7kWM50h?GGZ zPnu4;mUJuWPEr}^=Omk(W7~Tm#mw~(PT_U`WR{CObNLJc;|#^-?_%5jv{mUq)IAI# z$R$(?wmsX-hbUjM=p1XC00y?`pa?@$>1O4O>iMB>jKA0g;VGdzyQIIKUS8vcnSF3i z@ACeet?{W=RvHY~oo4VE_R{fyEZ^B!W^r!vK)SfpaJ&w*!GHDsrhgq=v8_=3 z;bV!-ZdV_2j}K*ak?Nt*{O44BejKukijUoiRiXJ^GrnqDa)vRbc=5IUUz$tC+kGlw za}X;&u|wNu?-WKZaxUK|yaa?E5%^<-kWqWaR*d@&?2NLG4~~&ag`tV{pKaU+KPJw& z?}RrwMymX)iklAPUk-CHKQ!5GLW%nuxmpp^pF3r#r|1-3cR*1^y_y^h)H;~r@OR=) zo%VT?BPw1@05~4_h#xSHEzj+}NBC^G5WQ<~Fw)ibNJKfu)9dcqaX1CRYSYRbjJ$x2 z^V$g| z*ELWj3f>?a6*x4?n$p*D!qodc+K%L!M6R@Cu(gXA^&dA7SlFLvU78HH7>AJXi?=9e zGjLL~<8>;`$jM4K_&_h*4s12#fW_^uFf3vh))*SD+t-7=1&VA>c{b{5tzl96mvYoWHD(}zavG!ihu;K`~UqT zHh1KY5D79AqKu0o8v%4W?AzFm`Zl(`zJ0UNOQ%;0JVs1p){U6t%(`zjc5VF!Ym(dA z$jLMP&5TM=WGd1P^T0%%4{eCOV?(IxTb%w_6My)7^9N7c8f9Ick*VKqTfZ%PyTczW z;+>=553;1cYt2o95NLf)d0*(_s1CNt$x~g68Rni*(loU_)m7f^zfBJiI1qt~b*M4j zoY%)5^j<8(Xs9HMhRRM`L*;XhCV~&&GC;+5^>z6d5JlsCHuRC%gF-U~`L8Q|KQyWD z`a%3GLKlgW=1zZ~;44=UqDF%&ots|%QZhe}$nFc*4AqsnT{G(1-GFJ|PO~e^Zqrg; z{UIXT+bW~`?vjin#;Lg+UP61%YqDULs2t68{v1Q$fvrz& z0y(mEdQ9EBoXdz@e+BZZ;2m!02qIa&UNeF{;(OL8yv<2&<^{}|D>;zJ_;nGgtiY4r z$c%2Kb$58$Xq`0{$L4jy1r)XZ^!Lk(8p;an@bE4PDm^>ZY}vHGF>#|s9UAfxIrwd#(4Kqq zc)Z=*ZBN2}?6^5WUqfneV>0cOptPk^*k5B?T639Ji}fHcs@-w$z5L#9T8H{qp>NhR zxPg#1&BTaz+v02VTiSG&&}nmYdGL%p0_~cMx6Tl36Y;@J-f4Gv5c(#z|JbxmoA&a( zTgSF`u&IqVf=g0d{z<$CUbcmZZM@pJz|G<;R`CBk*+#>sWi~f6+4q>`8=zG?FxhYG z1B+74pxc|7?2nAr){e=38@16^O!iaFldxlz_@sd&HZG9_sLA(n8y%Nj}t^-fgh* z$J_L7q+@!wOH!2H9mKqI=v`%%wMFlaZ;#$>Pzr6_ekG@x=-o&QdKU{!;$uztA2$C$ zL-3QxG^o|p_A%-zI?Hy0ew?is5hbJRm5gqcx3|OQ?OmLzgLSfS;_#GyjZLFBkr2*7 zI$p_$@#fHj3biDG)Pa`;IM3~)jxBf{HZzN*~cn8&tzrG7jxKwRet zx*@WPBznhHaG*$@DkqekmzwkK2JW3a^l!ZR53Yk zPPgaZF9k6+>#Xr)RC$BfoI2B% z;m!06JQFp^qjs7XKWdtcU!ysqt>iPbdQ5m~^ziv<195D8b%<+G1(L&O9j)Z>SuYo+ zSIAcvJ$!cQWh4A(p;H;vQf48#Ziq zeaC~qUHUxGRdZ~nC-aFoiJGeB%A5Suf-N9F1wT1#ZL|drt^eHMKP5C4{jGFi25d9K zoQ@PrD~cjGqr<;GzhtLWm`?OO8SynLx!cT3Llt|k!kcaxp=*ljy`>`=Lk3gUz)5)r zD_kiqSD?2wc6^VqmjsR{U!3g1$>BEhXE=>4EWPkLw#|{do+CIvnE?B+(lZb?NBsC(XT79+nE{_}uTO5(KQeV{Bk5HZ**&58m zmqnV93IWX+pZ(7MM(+!CWP~pm{M2JIw!sl|6Oh}JxP@tv7-{v3P5xrrYi#4fWb?Oq zal}Tx+5VES%sJksSwEy^2;6+B{p@i~hCH(E#93z9L-79!{%s7GbtL?^u8)KNGjFwo z|KDE!zlDFs+-C5`!Vlw}qP)M(vWv((u+kVX(pK46Wzm)I0h zZJo&~{PeeDH0bPqLJgsy3ey2S1#_alX2THnA9^hs%Kdcszi6}(mR$2RRTqV^$& z?6|bDiQ-rgc~F~SiJRCzM=X*OmzV%Y&~f)8yp(glMeozU8Mz?Yf1AL6tj9`P%MKb< z=-O#sx>)y<>-n&C=UO)>ytbH5QG3<)m`)%9B%(>tultY9&RCEfSlN2tWks{`2a;O- z)rICZ*>iqxd*1tAh|+ftpQ$}+o4$KNMnvelFL{Rb@s&Cqsbo^3e{9svnUmTy3pWaxOTPMMih3FMbt~AS2b20BAP(Whc%AVis5_!a} zyfPy+-Zpisv@UrGv#1C~?>Q@1ATts-y44YXPyE)3@SwaBDbYd!_}T>2y7I7BX%Z22 zakP+jz0JZ3@)L@Lb>#s^j(HahCB7UiPs)K>;H%0JxFALP>nNQa!gF@J9RaPakL>A5@7t%@APJ(?7ZzPHxz`9kLt=^LE^34Du+MQ+% zT^I3!+iuQ7<&GYq$MwyI1pg&S%-B~RhGXII*!l_?TNG)wgA_iiJFILUT}{nfHWEHb z!E8uC0#OBag+B$>fEBGEZkoM3*nXK0K_2zo;cU({N=W96kH`29+4)VxbSl^ty9Au5+Wax;4*ilELOxfz+e zvrPs!vrRtBHc4b|dz-9do3#Be>0X(GZUsn~t$Sr1dnNn-)Ko^)+R(IPdP~y~f7#oz zHSRukO$MGPGi11XQI5s8^bk5vaZIGxdS}}+&rgNTKPDObWsEKyMRis5#)vt(AMsW2 zwrw-I$DWPalsz$^gH^BmIcL>7$UE(>dNFd}S)ZLHLPoeAqPN&pXZct2zy~&!m9s9ryYoi^jv_+k5FXx~A)#=!&9d@i~J)B{x zoVG5dt?l^$o?%WGpZIF6Kl+H{gKdoOj+TIDCfFS(+OrGv7bozz!*;}t^&fy3?X26; z5wQ2iCits8@$$|#{O?vEM_JbYgF)iVzeHhtUB3>HCn%tmE%RmGX&ZU8y;<5`4X!uC zV{bZv^Ra6-KfC&)Mm4zFOUqq6Df8_yxABm0V}c!f&@E}QQ_9^}bB0Aw>yM+hOJ&pd zG+8O+btqI7H#J?w~qY;dS_%&o!BGS`zN+=wfvJmPap&e?B1cK z@U&>(W9k_2=i}5dmV=7g_t$u-?Y_t88C%~5@$fgUF$7d4aP(6tcvPR!BNRB ze>ZDfGOLNFhREU`83A}um&WYPy)R7d%U~Jg^Sl$v>K+`m6y=$vqCC?nraW_d*Nku5 zk==bJ$}>b`gHe&s(rb5b8J`jZz--}ANRNEAO`{yIJ|p&vZTZIj>zb%N%lbYYjMqCd zOoFRDpE-*0I$C*3mm^scDwqz`dV8%t4XM2AXWhrO`PF49t zM5opM7@-+Hun#X!Kz10I*^%H5s>=VLfk8$c9aK_Oe5Dqp6$L3aRwxcqilW3|nObcbOHn>%)XgwxW|HB0%iXlB z&E2-`VQ+UgO?xt8f{#Sa%E}7M>=0C#q(hSP|9sE6cbJ(w16IGkb(nk4J@4~9-*e9Q zNn%_=po-Dyjy$36dGQ-^DFn?`pc$?t$q!OELJ9gnRQ=Wb4eeL^!htG+3D|=Ql@nO< z0`LmS3A~J4o#{(remHf68~7&sd?f1QyV$()1w6yDchlD}V+PeE6Z=x(kv?m{2e2Wp zUQY*q2yM|sY{SO}7ypvbcoc4`rYE|0!j^>erFqh)QXx!p!=CBGBqepoJ`ClN+3p9G z0t=8WV5GE=JdC<`ZUK>)BsS#nf0dITwVbxYTq(C-I~ExWl#I!g5toe9iak-m3X|t0 zr|pEIZ4KB$@~mW#cmh^TRZFUgN&zI!uGUPQB+ItG{$l#x#W!fO$&+z*egj~J)@+mZ zW2)rj3fUlut_)SWQmtgF3@VV+;P!(?E*q|u$A2IvJ1wWpuIsSmkcWElkdntnc{IJi z{scL=hD-4gicnk-wnm;6WaPM;D2dxYS4uJ|wX613#ds95Zy=Z0@GY)=h3rBoKQ|o4 zW7C=Nt>+1jKF|R zpd_(~2x`=b_C_5Brk$_$_Z%fZopZJQja&ffVyXE*>?`{7#BazyJ1GBJo*!=ig6#Dx zYqxzwgBm{sd4uf_7l`~rwfPHK>vgv+SD*joow|Gk^_QM0>_V7@@FBwA z>tWLo;TwczgwqJcM_`*0fzp-XSItB36#lJzQ{UC!ZxBE7E0KocuEw)l2^6oEqqgHe zO4@_?JqJj)0O79)`w`R)o!?)u`4GmYYwdPWwGt*L69@Ci0ot(4E-t~clvZ=>DX}pL z3VSauK?=_aG-pCfLfw_dz-W8qT`B5*RQ<2^{ip`08e3)X1vqp+I`(g6KN|ED?MKnc ztzq&i>FiEX^e8EtEKPAG-8xn%BKyL84h{?BhVj}X%b{Srl*?(_&O$jm5pui0cE_DN zlEl#T#d;!rRD&q8Kn%=xVADn^XE| zrYBUsYckCW-A7g+Pp9|CfV@WPettq)0>|GQVjaoiP%H?^*5`z<#>>5V)gUB0#n1pu za2{KtzH~I0e;pPyn04%y_jzrRr#Wmql_@V&$UElED@-s@1B+vNXH{IRPv+_&d{8l% z^7wZIF{=|w*8YE}#E6f3buyqQX&h-lFZyRE1IpKPz#q=p%>TBtoqse}7=B6Vthtlb z=B_}VPUoMWf0O7+kz*t!p>|mZ^LaEbW*5ItL&TyK$|%G)gOElO{j`H|;Jn*`ywT0; zRe7V^A)O1ri7s#S01Y#pci%>y&g6|k_YfNP*17l!{r7uYcxSAvH@ z)V@yag9ORyc0%J$AsY7ukuUKPv%*VJl;lFZ$*80IO##V|NfU`>a=g%zZFHD-WSjK- z)=7J`k?!>}Xu>f3aZduEG1BZtCkR*mT@2e^wz?-Dwr8W7wSARFi-zqO@-)5_xQVs1 zcLe?v_J@Eu%U1N%I|log8l-mJG5>;OcHXZS(gYcHOzxpa8l7WgfD|R=1lwDyV^f9; z7$&x)V&|r)W@<-vZssr|fWuByM7x52e_ZU7bs*&Zvxf#wLifpc08$)|e@3nj?`BRYAz5KXj&L!@vLsyOyC#$Z8$@c0Uf`4U_!inbhs)OXIe5JBbQQ^!b(M;gQ4 zKw7Y8hJhEy=_D^a1<_Js@%bGs?AM_JnqDVp$~A(Q)`*>v%V?Ngk0KIMQ5rdPDjs}r zu8)&K45$mV45*Kh0Li?pH~5d-@#Yt}`W3B%POKc?3*o+YRF4#AWxuH$^fs|Uuk5NeG(gV@-9MfM?TsVC&ylCY zhGKsB`Alkcu7Ik>5XqK83=Z%pKt_v^dMg&$ZX3*NoMK~*NkNC)FVvTg&SkCrLe6Eo zs`(+;sLJDp3d$<&i7Ji&QM&Ux@L{x3A0}hQ;SctqaX`l)LzqD|PWA90vC{U%ht)Ys@6yQ}<5rske76I#CcK+ze1W+l+Fj5CJex(lk4c9>3%ibJGA~|*JPf8ZLy(3G@D4qrP z;-D<{_>Pts!y@yDo3d4W#ZfAF}-vG~}&JLct zJ=8foM=6Tn`NixIcz)|arL+#Ye(?R<>e%=tq?qxw4FpQUTl<3gL^co zRjTzbHL`V>Vodj4&KlDeVsp}`W+@gX1U-l3wmIlGyl8U$G+= zmXL{^lMAi~d1OM-eTbS|YIJPtfYKtiG>%Wj`H7U#75#t~$)@P%oP|Dmn0^jFy<|tx z&rv?AngP-E(VzYghqQM6oHj)(z@g})g9UaLD(Sh3N;(eTKf!hjR`1#>L1$EUbl(3| zy3#H)>R=X@C~NAzp{TdplQ6W9&rf-KprxH>9K|~6Bwcj- zq>CSHr>8B&A`aVNLhlKWtOm}a`|kV5)fqi4=)NoEC6Jkn-))|LudL$NgXnZv6GM+I zCmvGp>xI;!>vcu4=3>(l#V(%!?`#X-YFv{p~<9=G3~Bh@*N#KICvKIk4v;X2^~vv=7B=eNJ& z;=HIg31CBTf>^CHyPT^h-IWYyw!y$PqH^2P-e+sbHVeYw+YAwCuO%OB33h z-ZsgH)8Mys8jM4H<2V434_6Xc$;WMX6vR_<_v96N&&05pzwjBhNY;IRd^Bu?{T*|P z9;G_B8&R-jzvJcq>8Zwb1s~#O(N$HGY7FF@2G9cHHS<2-49VC%YIFA8{P5((nkd$ zm#9u|Mg?IKMZGEmH>18_P+`DQf(*Q1^#(~4UA{^guse~d@ueWzPteVfW>j6jSiN1G zKI76NFpRhVN>T$x0{R|wd?eDx8eDPaaeY1I%fqXcFP~z|5?^S&8`wQy^@w*IbI89e zDgXWaw4f)?2_#mp891|VMSZgn=vNJk@JwM9!V?Gr`jq*FJcPJDP?OCoKLLIrKKB`j zYD`NCqG;B!D?vJ)$7LK0YL~818}7y4-Tuu--TmSTFbQ$(x{?MX&OS)kj`;-uBy`4e z&VYKLq6z>Nk!PnT@ly#72hEiRYuUm(~4S zjMCVk3>?#NEA*?6po3-v`c=bZJX6?+unmF3e=_GUk(NVlo5ulj0cO`@vr8Cn0Sva6@&(*#}aFzS<1kX@%qi%QbllAlPlc0WvO-<03JagqZ|9zQY{a zA>`7;URo@KTrwc!qSKd9n|)}rY&{C(*~Cg6?LsaSI8`@DvIK-rD6omfC{t@fXT;Rr z)D}Foi-|bIrr%3@Iwq6-jG=109Fv#E9*4b(#*3t^rnHmNa@;ywz}Mbg$CA7n zh!kSeNfz8gzuTxM9bSizE*(oimBBYLJlW3b6ikfel==SUzk===)p9UCdR00VvoBSEFOY}c{`(Zs$GSLaPU;b;h| zIh0NmwB87qT4^{o-ggajD$TC71UCx|&SPz6*G76)1*-bcxe#{VR&p63W%4n93;CRx zS2~dx^Oh6C=PeUI7~0BJSSH-Mh4lMHtA2(YN#g)&&Hk0aI(4wLy%$0$T8BZF-%Va;R;W@F8>e6GWcT`Ah!LCO&VzdD<8 zK<^MeR4n?mM5FExjdG`oZlNPe4w8h~&934btJ#$RFvseTZkr=YDN+`+$o&5MAWLs{ zRbh-2^Bkf211aSZ%yZOh$fAnSVkcEue6Z5776>qsm5vtGO2-y#(%eeN7GnL?l7%?3 z(y@;n=GJ7O8#Bk(ZlwcCtgzCN(-B=X4BkoE3@UWo`s^o9(`=hv!~&D1r=0S_n4}*% z(A+AP!{}{|fo6oGAMW_`DhYq@W`(>FFpf+)$aJ%qePIl`yD;Evkn}L5d!Qpjx&XjY zLB^M171=J#Q%&YAvd`uE14if%aNsIrUmDco_2@!&Kz-3ljMGdMvg5HqN9)~e+p8R? zJ26m&^)cgLWQs;5;gJT;Tr#yVo#Z0>haYwK@x-VvqOqlY_@D?!rU680lu2lf=aJ@) zkXMXQ1Po!vAs}FQB}V$2C8~hoh+qN390T0F)UoH50j1PJj8L)bR>v+E6xux4aUkKs z&7$kT*I;HpufBA257{0QG+1?P?JFFobPpV?Xz_2<&knhp5=>#d^0{>0Cs^|5hnVf+ zTd_8V2>fI>`_z{M{lk5b_u^H}!^JmP?t$AH!p4vFZwk2o#C zJ>M1R`Rf1suHSG^XI;;@_WwiItN9fIP!%%izpg>oIX1!BL7MeDN{ z=M4d9(<9dDp*oxCD4obIQnLL3Y@m`4F5qTU!dsdjlXFqCp-3 z>ezR}FogSae)UjRC{1%OQ3Ag)^e)zsang4bBNBI`Abz}OPl%$|h7Qw552MM4(B#Dl z{Juko%R-e;Ns<>s&ylNMJFDWk*eV&#AEBPNA*@u#RQv5lWZ^iRjOS1Jjk?&2ljZbB zpk!99Dw$C|$-Mk;alN1>Z2;Vcln;Fgof$fXx;V4@eawuilP&QvdlNBY%rG-rVBW@ekb-!Mg`$wK6o01@_-rSzt3?^^yD`W?n3N{RE|N`y z46@xsQB=NhvO3?N=+UGq7)jtXx>#L-1YBJvu|GW$7kCTyKjATqo(;%jY+d z{Q@uLG?=r2G;kgwvxPe4P=xdEN}9szq4{Xxe?(EP%a9NUd|UxAtpNhAKrQR3;AWh9 z*8s-=+x5rUnNG}#{q~^t!df@t2Sw~hp(ur~nAyB}4hUBSf%X`2Z3k{|+ZzeD_YLab zry_-mE+VkS#%~RD%6}RCRC@NYvMgpHNwl6-)3y4Lv{+@jCxvefe7mE);aKyy!BAjW zoPaUAQaLG|!MX=W9E(SA#AR-0<|6L@p^o)aQXN7ng69(s7B;R{)E=|}&tDyjU2aT# zd$8d-&sd_H(zQMAT|EDcFt%HJ+#)>R(Y-{c=2w5IED7=SjecKN($M#Vc&6|4+|^W~ zy8vM(!ixyU5h%WQj}qNw2x>Yvo`cJ#c;&pH5;r1qe(%7v;M@XY>hWJ-+?Fd1;t+FG zed*{B<8S3TRBq6|XZVupP$G}h6H>|k5E<-s(0vkKS0K+N$YVIwIkKT2eZ&WI5k9yA zbYw^;PI<8s{My68$0$VrfYb%*V^C7K$h@+U%5tJ;V8A#Cat;Dt0J0!6^z& zEFL37BV2SMP|AU=5C~$Ns^*nNl<}Yva0`s~Cw~0D zaC8s@3W6bQoSio8WG%SPX>2pO``XE$VJ;BeR@ zj)dl_MQoa~KoRprWw2 zpF`2w9~;(~$h{N*7Hx2mDN^qgnH@cT4Xo!PLiZSrSWw}@&0;E(6r~(=l)ZXE5a`)h z)j|$+fcFRXqIl2IpH|#$(DSd(59)au^}PA+;GScQ>X5QQ58U}j zmMpG6k(O*oFS~Tu%Lo@J>VL@mrt`K3^|FuXW!rf{y&O!v>=xe323&X=1_CAikzPVE zG*T}GA3dMBA?opef^lIXI#NBL>q4Ki8^}HEyCr9WLEpss-}Q|@UutHT;xk>Z8%72V z2?zO8B{cDwQgc2tArUrl8xj(68ve6EUBbbzow8u0i_lUcLJ#GpSlTZ_Vm0)~jmvvF zmIx$0>E!(B%?*BR6-Iln(1v3M$%fJ#P<|fmN)6v1-te2ytU@$=89r0PQ-d4MA@(Y@ z;e{+8i9#BF0RBbjoSX&tMT;Rb0eduGMMBfzElv?F?%F|%zcEsaUtJb9)UVtrTD$|F zsl_Ws1P%4zhHI3i6kg%$H}N6r)$p;uew54khxT21a2oyYRRyNoT(-O4^r1T2krsFGynF*NaJc1t;eyIqp$& zkf8O;!jaEf^|~uSY-Br#aT@#5c@6${(vk_TVtqX#cP&btA5G>xit=@f_)5ykiELoR z7KIP+H*@)nMr;N7kih6NzMVI*H=J})iC8uE)hI5~Y3$2?PewYg>}9s5@O8i)v%Cv5 z%unzT5DGcqVy$uoZ!n)&@y0Mz7T))UIlS-Y2s02Un?)nShRq5+p+`?{WeLXar_cbw6U&9td z$zlv-)Wy(A%Tj|{c90vB?yO~3iI$xcsbyyY73V}5DL{m41t&aVoD!Jtv+&hMCynrB z^WPizDD{oh76?B$OnK~|3(xrBkO&j42-`Q@j(bO>!fq3V^@~(k6b*rVwy|eNSnzM+ ztH9(5Z1`Dq>htS)r;;MIL+R82O{e|_5>lj2trms#k6c&?QXNSPGU~Cpf8*Rp<)@1B z2b@Lu?=9@8`~i{SB0wX8WFYy$+PEb8q77im(@zFrN}lb44zisME=!KwIu)0FhnteR zz8?%DnMOY0`3m_Y4?2r+D_Nk!5&ZnSxYxv>@rX1X{}ROxK8s@eqS)wYV{nuXW0`(_ z_wUF^M*jD*-ZM8$318KRZG3EooJA*Qbl8?5(L0g!yE4MfIvgUt^|KXRiM`Av zL?k-tO;6FAp%Ho$0NBUB3_ZC@`p; zf|`r5n3R*j!PmoAhiqjyD;e2$+3on{mB)g{Lrw5WZhL}@prjqRH>(LUf)X_Cj*wvG z)bN65a4# zpw0INZN5*5t{LH@#1h?G=alG1^exeyLD<-@L^mv{ME5s@oBNmOP9SUG(ygh65R%b^M{t`<|5Q1j2%{@YeU!t&@m4$(H%n= zHKIgUi7;SfiOzy>BSI;{KM>wUs7KI)0{)RXzz=XX33)zQEt$z~^8jcRCKu@;^iY)01+uGK;z2e)Aeo5uL`>u(q^MFIKt$FA*20lAbEkX3sSrBU>d`^;_EFX$%>H$=DBG3F*^yh@O( zv+?5ag-f3F34jY+ZxU&B|4($HH?i;cvPU3LL$nD|u8HrA%*!pW+ zQg+oHHb)<}Go5c7&Z<<{-!)IFYwX3kT;3i9^FzCx<8+nTDUPmcRtt6o16)yEs1)&l zwutJWC@Mml0Pc?wrBJ&LpfyU?DM9I!+AD&hl-kX%e-b>aN;r2ot`w3ja(3#eLtAt3 zjog-&Elbgvt*tOPu{7RtYH@MV9T<+HWpH<1v~ehw3yGDGJI`5y8Rqoe83kcyr*6$d znZg;WDD{)rL-OKy%ZbH_;iVF-HQ*!^1UndPw6PHffzqg}Whkf9h1Y?X(A~4uRkxor ze#t6BK)n`PDnUZz&2tneI{!w3B2~Ug7-<%k1cbc(B%#0UEd(4Z05pl~|A1>Q0H^@+ zTEPJHCWoKp5#h&kSv#;`26qE~b_7LX2J1S5pX{LYN)gVWC@LZZem=sWD)7@iD4miu zCn!p(9XwE)hhX^WK~ixXe%=U$pHDH<%i}Gl7vB{=(_~ED35%9D3gC+fKLleaRRceO zN_gjR*2G&%eOegeklAi46Pgh0D~>eGE-uEkmkqC*3N>v-Tl*+FLtN!SQZDQSlWq{l zR|jjX^~!T@ePe$q_pqFu;jz}s+3BPyT@OVUQkFQVC^FPajy+OoEm=oxf=^U#?`d3V z6WLX0Ci|$(v5q)^ZX?c|O)TsBfHp(U9zr&R{*eOiYMTs=&}L``3k%X3P4;+pJ7AWp zfBXZPI#mA%(r5558SP(^!rlbsOYqCRp9S&DUsGQ?;+NNb8p1Ds@&R5{=lt>ng@vy) zA%i!;>>`PKl8+;o$B=;Gu8v!z>{Og8p$19Dk#`=f0`a3r-svF(@gm@xpdaHtpoWI}R-l15&tm0+L5w*P|czaVq+B-7P-q~ss zslC(GmyX)|=TAaL`HIfk8yMUXurpD|nX= zRng0vr7Vk;$kXw%P{l>LJgVCGl^d{~L&*4oFd^gq+@jW3OR0LZYZIVW5j6f*TKN*P z_!k)EoP-&;&^?Ij0;TyY(vUm(FZc>EyUGdD1AckWm4f{8l5TSyd+&J?zk>gH+!iol z*A=qiVlHU*3Rz$ECHm|YvP(Y>n!VjD#>tE7Tz=Wv6wn{a&P4b7O9@bT>7yvTbpKp* zX+3pen&SHyu9M-jKu>^Aru#LnlW_$mnKuL2yi;D_&A1t-rlH5Ob?~L`fRzTTXsdwD z4D}^??`$mpqoCf^u@U$4V!O4g0|l?*!1U7mk}X*GyfZMs3Svp9HUgJNCc6tr5`!dC zEyU|aN%ti}H*%1r&OTJq+x&SZ3Bv4Bvwx<^(mdC^rV8jL9@vA5f|OopiKvgP43Rav z6<|x5F}Gbs-R`ac6-0JZB2X}N0dNkH@4G-gsTL0J<@8;0^8M0& z%LzNU^gO*+q_+m8&r$84&Xm)gu!0)vB_pUO?853^9eYq@>8)f5lE4dS6LG7%A@E7| zen2>FeQWk8Own)ce7aXh2QfnuJuhg62yehM+H$fF-0O7yr z8+-zLt&YVj-%fI{@k0W)j-99$Bli{JP$+aTpi7=!E{5n_rO>@fqPIhbHio>$dF_*e#vAjBA@@RL#!%rsWl%I9xU48_nyUZ})< zfH=uU1B>>iqrHz%(aq!yivviElI}%iDhNQR9W)o10%<=QBd6~cnT9Bt-uLn~a*xuM z2FgG{FB<|7Pq}$7U?Ym#UnOWTsun-}%gO{D9e_x$-Yg z@h=|1TK_F3V-d#8oRBpd=SS6d_A4vIr$T(fI)YpKol-SlNaOiJf}b6}kc?PJ!vBcU z?+>d)#=+`57~5CVR^?j^z9BhZP0uKCKhPuqAolY~05m*ER+Qn~L@BpaNw-6t1eD9u z1LSboACG7NN_Mh&lGTWua{4}C6(B;iQrZPTL{Z5~QJ3+e?Dz2@ZgVsMZfQ{=Y0#p= z8<3dDhz@2_gK2(#ewWXym>^5=z@}JE`;i3&6i@Uo1{3s!v&lLU{bUKqst}J&s={{gc;T3kHF~7Z1UkB- z?MfZgug$KDh(55Jt(|>_Z`XtAH7kMdul8H;;fei|VCY)PaMSK>UgL$^ai!tGiLWD05`^| ztTX}E#vm&tO&Fb)HTrp7bF9wnUWbqV#i{;wyD!qw6>>F}5-B6lLP0VkHL zEwyI%xm12nEG++`B>%!BDQ7ertW+J(tM*~exko0GV;vnH^5JF|vo2jj)6eJL?EV}R z0TnmzcZQP($OBZCv~+Z_p=iPU$Mn*J6=|5IYfl0c9$bY-k2OKICgcINTQSeK+&Pz= zN)a~)YfOlHPJOu`(AWg({7`d$AF`m&5EX#L(}_u^5EOCVaUDh4N9z zBYT4^_v}iCAv8V^gO&20MR{T%s@soN{0ZYx-qZ|mX*Yoa#N&~Nf|!DN^tf9fq9$2K zd))i*AiIr-_qY@2*_!BaC-MiA$DPCdYItol4W3Qp+sY%4pug^9d?SsM`^}gDZo$Yh zXQ-ArK__txuWVT7agRV2%bcV|1Hw5NA4~ijCFOkv>Vf3{qAE?D)R_0(nPZn&R9dMWp)RKP5| z%=eqopiu?&qjKxLzr;Y3Io~52kWii&lgAc*@sS^%eewVvi1MG46Z;6P$JC=Rw+`>P zz*vuBoJV<`Rj_>(W63>gp1cDfeh$vsdU>`X+mqEMUt_TR1m|_R^*{hX*WG6L&&fbJ zBvQjmk$8PXQ#4h?@`@T9Vh?~_OgZOkXKPpUN+L*ty^7vGNxjXu7QM}w0s=fAmq2Hp zz{lXu6ze=PwUqbf-=C|!Nebyrv&T(6CXm(iraI7@C59|dHt)@+(RxFrNW4CY54PGT zst%w4B9N!Q(|Xk4=TOq{Ppna=uaDVHcj1mY=iF_;WQhr+DWeGt?+m3PRPAxkqGxN0$9*IJ z3ha9mk4g2oZ{;x~JexA{;Bgn>uO&Ch>^cq(FtAnHXEhwj_CUvg+R-pVM!TU84t-{W z)N>R$DzqG0)VF92QWUKoi1n3_OzTVPi52b~{}>KMsh)+2(k4QwH4_Ya{HvKj%CNec2{;|n54L^$ z==Z(2Uhi3$)Mylm({|FinE$8eIIu%xN*e`DTC|OVzM;*)sT^V2B-$w?HP?n%Shoqs zt`aX0net@0o{u$&e0w$>#$T2?eUeV>IiDox>Es4Ib@F|kz?I@+jO@Di0JF9Wm;)x~! zzU1QS(Poc(4`OJ9u$Qj&;6PLBkttExxNg{o$;3#}x)tkTV)?%H1UdX0M#{WdU##CT z$*7MLQF!;*%S{rmKn&LzEFh{lFkpR)uxYKO!m$NsN;1`qAsG$>TSMgX%!|;SeM`@g z%FFQNS;Hgz{H3vLv0mE6c3gTIeF^kHIeiegb)z1g1{^H|G%v8LHQYj5{0@5tO=%h)E`k0bKayZC84lV4pA(wWR+>^cD2;=I zQb#YTmi5}7ts~V;HM!ZD-XxoK+7T>}XpT%r- z7OM~=PDCWymJn-oW@jGXGqiEK@0LHa?QCtK52yB?Ka&5`i!JX;1)?5f_j9aWpX7>>e zBndPpPZXT-H~ftEz{ok`-?4RvwWtKN^_>d<3|o8P4}8i*haPJpzjTPbB>K(7hFgZT zp4OnuAuSJgJ$A=KxD@hNSw4ssdEE5ZyxC3gR^g_N124z<%jftj!HylJI>eu;%HlZB zdcN0eI*K>2n39&@R>=!v>n{Kvmg#Z@?i9?X$@?f9J&L8p?i>=nsLZZoG~$Ek7@kKW zEQW^9D558(ZIss|Q$F<9M=U8GH&4Fw-BIv++IRA=c>OuHCZn#!dSFFnrE zB&5PYh$>tf>9$872<6~_nJB$YB}wW3@VI?64*jL8MNWy|EQ)Txy!%tt$>BIb%1LLn z@*kNZan7R&N~?08tZ~yMQANcuV7~!B*y}Nah01)*;cxlM+jP9iys5yv1QvO0>bJiT zE>;q}bAGhxZ5)9E9xg;{aEL2fy#d?qte0uq#Zbs{CW>M|U5}aPv#cCchrtB3go{>g zlf`QvA*P;)2;7Y6n12d0rsILk_`>RP@{n;!j@RidST7Vzg=?k2!Km%WC z1(8#7Bv)`Gg>z>i$Okkbt#oXCdpsUJn+RXmxb65$=$Fo+M_^S@mMLZihM@?*dF;K{ zhT|wj&osBf=#Urc_=5E}Al$aZ2Z6ML`**DM1Scn6N@p!zjC9ty;bI8fyw_g;4hxGK z#d&&IQtq4ZLY~{*x6*^mU)>AvoM(1j2E`|)`}P`~O~D8Th}}r>tS1D6i*;Z)gD$1Z zG_2FtWEy~rKyX{_-z1VuS#?6Gh!n*WJFbYy-#}^xw75Shkete^iI)g~=^1m6zaBUJ zt#oJLZw0q|R_Pvx=i)B@O*EzzZqkgD-0Ar1aZjSZZ%@VF8h0N4QrYaag#@;KK3$?v z_Af-qyku;9+wVUi;FM}&eMg@5%ekxBRo5el6=FlRL(xl*b-To8y2iSP-fOJ;@E1P> zKlt&{k0NR+=Wb_t@WU<|C`}(Ni=kz^AIQ>4sUF^LS+sZ)4LuIv^i#uUg9>8hLr4Wk zTn_Npz*cj)tt45de$FU1UvkOeo<$F$ z5A6OU0EM+Q2JQonJc(!6K-M^Fy{)lik#4+LEJL-6h3BI7^GswTBh!Ga-MO(1vnv}7 zso@Yz<66V-w)8}t`yRBl@&+jrz$)K7?RUOSO~mD9H|->%nY!uW>U_C4i zSeOp8=p~zb1--%s7*EW80O)PTbOfBqx6#Wx4E)s5&WEu;S#^5j^O#o?= zYLMM`;V;@o4Psw_;e<(kbgxxcnW-m96>?`SyYCE2bH!KJ=!$Np^|Xni1%#9BolD1K z@hVF|f_w*i@-8g1O*Ap!S9YGGun8r&4k|ea1j!zsv650`qP8n(TQ9Wg#;icZ*h86+SoA3(% zzYkDn=~=W$#a)SrQE}HfcvfdZ#a#)A)8Z~Fn)&Wj=SdVvb9EGPIJF}aY9`PDh|uC< z-LK#vG6|+}K%7{Xn6M~DGD3@RhB83X9T6t^k(HQa0V#QGYiaOQcOQzWmZ>6^aQYy} ziYeDo-5lL3l|C{K!oWPnhlFMq5jdrfoL@D2)>5M!5jHsffdGF8)~i5GbhG4RnqxTW zjd!Fd>wYNkLArL)t4OOcL7-6}adQh9H8iT_z(|hfwgzNJRiI+r^&48$U?j9$b^F;|8-Y6QaDEE<6dJOLCAz%*77T$VKk^OsccLjPoCc~LhL$z$521N z(E1&TeoiX#FP-FHI+|Vo

b`NxW4fJbKByV*-3et4EcRN5ny9gy2B(^UBkxFXX&p zF069q9@K-4OQMg7p4=)qcaO*VglEngk7M&GvYn^f9OoB}K;cEHpvD#D%mhh} zt8XAPfdbD@w&Ja|kfSN|gBkcP(26dt+EehPml=j{lM}sCH_IpXVb0bw_7Tq3Hb)$J ztN007V{3+6pPZ~DaC|8_YMsaQjYIH@O$&|38=6gRJ^2PT&}`+US=y4nt4A~sr6}@ zAJ0Iu#C(FU_EH6hQ#`#~99Q99h*-(G0gfPP4t4WutS=EIia^q{o?xtouW71<>Hl2s zuUyY}%uV-F0!P^nt4r_t3}SZaXl~J#5g5c-Bh^8q5qz8P^$)esuJAgs%`D&wfg%Wg z(1CB!zG(&sIJ>Dd$?AgeCT>s8p$?{!>K)Y3n&JI zk51AxUIvoRoK^0f05RVERbc&9cuFgPKsZidv#zG2b`@5FKzyO9f#RJ zA3dL#EEEAp2YTv0hoM`i2X`O#sCV!K{@91bs!3G&_9|PE^H;}nd51!XKuIv`u>%eW zjtO^EW4NVO$jtQ(vHuh>`ie_ssS!p7F)Gg11V_G{%|Hg53Lh3*X*xH=nyp?$SR{D- z!^((-wB+K8Gd)(5@I^YX=sBbk{GKW>eN^Bl6Z~jG_ht|BjXkx4kf`HQVxmO#>EJvT z-~EJVtn+q5tinNtHE`T~PI??hk{eO&GfER6%Q2Ol_?X>q0v@FJVm+Aw%V&$QBUM<< zbco=hNMztdibpf>d4DVHfRpS+43{80CuB5K!*>B~fkX(gOkGAJZzo1{)Rr3Pa9o^acq$AOvQq| z@7N6-3OT!Gb_bpyaI%A>upmc5xg4=hvjNO>#Zv zN=3#x#_%FjQRHY8NgRHU1OL~ebdO_?$FUDtw%drK{~w+s#ypkk!rXdFTcrEo$)nBe zJ`WdSuzHQ<-aUjVCf|moy^pNJ#d``Mo(=mJX4g23jYEsjgRh7Y7OtU=jiFI>K&}t=O>@xh-%^x^7Zq!E6Pd4roO?Bmm@XPoT153O zLcM_w3AR0!as(@TVz9nG?HM4=X{nhARD>Qc=7SbB^|9FQKY13n515LM_K@3JTMkY* zJ*8>mo!$&a`d)}RwXKbi0JfaD)zUUdcg7PlhZOArkjjgbbIa3R+AwF>0=MbgWtG$*#Kuds;2~{yQA< z$lj@4PeN1<2Ob~O30bcmR3hewQ4*~0Ud2}mO4iWl>6T5ik)4CHqdLzlb(*abF=#%gASMuAT!bnSCK}q5V#H z>W*6nnpUx~I0@`GtC8J%6HpmO&z=s6uq|9}UO(THZ7iQ}#Kr9lL?8xx<{E0UO|;>8z~-V-Q0MaV*wf4CwAM@qS?l3S zs}E98mDW}+0@VT@y2k;%u_j8(y7j@eS&s=B2F;~_M7Zkm7w}6?Od&!EaY+9jjMtn5 zT&{Ps6ZG5+(LBMtR1;->Iww$O9UiI7 zLX@e_RJAJbT3z&a8ubbcc+o!mVMhj^t6x1EgERNm65TBbg$RE}n29)@J|;HC5U2hN z;A@(1IA?2uz~pGfBbH4nTL9_9Lg%s+vJ`S0tbQ@KTV7MwJr=?;E@EkbWM!MhXLhZ} z=+ik(iifDBv>++kG^iM8jI<=GvPU2dM>@qtx*50^6y@W5DUgn8oyi0)EexA=uCuTS9$||h; zDyL=v9)XvJ?a7caxVPY;DvtI^=y}h1iY0uk-wtg z`##qy3^!TDL+-(^dVeVZpMwP6>12gt1xZ_3+vd*UAvC zb6-p~WToTO5er-B()3j5#zAfwJp^ULle=1)lBzzhl5*D+-A>ag3;w}1kQOclk3_H& z#6YXlnu#{>X`R3yFr(w~K=ZpwOsiyFQ^SkFpn%N5*(}6Cp~1HJ7ul``6ik4JvE#=zWROe zsag7+!}Y{RtCbF_L|R{(<3yCNTt2gZYBBID9%em{=OIHz&*uz}k z9P~H5jYea3XUwFM_INm(+`2B0ja{VX{Qh>Hvq3`2vbSlla8*h7Y}$i1c{UMqo#;XI zwu3Wl^%DP4$Wt}e4ale40U}k6wTd2b!NU;)F&hzTb)^2g&SQNN6sd7^|IkvTaNOxF z<*q`X^2)t80s*mWO-Im!b?mDvsV9uR&=u3MG*RZfo1)9Hd-|7}@&G@?%KnvD6#NU4 z(wuXuJWaU!az68z^He+(V;jY+ud&te#MD&GLpt>ra}H0aJ}Q{KQXuLaLv>D0#q41@ zV2#N7rAkv$+7Hxm(n3RHjC83qJtT4hMM8UawX$nR^$j4Maemv3OMCZI zpx3}MLiaP$DNpGtoT~%_(4Hdau42n(9#x!_0IrgY?jkfj>wE0sKK${Mb0bimFDG*h zPEOy`!5df&sOAvK3iHHEX(j7wao*OLasLRPC_yuw>y{Y0gF*#*kFR^Pv_mw9DDl?S z_6r3Klhw~SN_U*3@D{1(e-ww4{18sTr?y1KbZ`pi>WMSHb9n|BYLB6FAwwJ^btPsC z$v1Fj3&}soGJoX)Z+Yx5wby{3&IKS+6}dWAPy+@`hLiPXty#Nn%##qgF)Dd{A;mH-?r*uSHz8AlqQo_4b z4|{QDFy38{x3nrz!8lH{R>VA9lnjNhQV_Bo??Nyqt!kW1V=g`*`5H)t6!230n+$;u zY$Brkn`m?tJ{7y^PlSvh3&MBr|H9`9;ek)b35@pN`hyBumbpZ^iVA=mRBZ5LF%1dm zmbe%L6(r+; zK_7^xcgGr;%fEn>4Vphpx%HS6*gI^a6`+cU8@PD7%*E#cS4Z>M2ZtwNXSMDr+Hmco z!2jECB%?4UcyD1_zdR^}D)7}=TAv{8F=yet2wwYPl6%5#zy+mXU%eQBSC~SSai|Ha zz(ylXz!oP>B#@3Nx&_mW<^tlB!5NZ)&|W@^k0eK{#51KqC77bh zSYci;OkIPw08CjE6$nW~Y$!O)xH%Xc{v9j8VfR?HlD30Ms6~YV6##xH!i@1Rka=M2 z?t&BkGA`+Xsl)P7@w`1%k|}#7mlg4E%EfaC5Y|u|%Lu7U&W5a0 z9;*(CB&2t9e0bqMYGU5jH1fru7_d0&SS4DG>woy54A(66UYe#)*Py~d=ZClHv)J&M zotl`}+ZUvQ(4Wzi9D8nfIpvyi%)`Ue%+ZuQMU!i*Cf9Q#!^`u+je{v1}0e~F2$EsY4oKV*bguqrb==2K0~p{(#U&&Gtu9Mw$! zfyv=%sx)c#>cZ2!rHOe#6H_}QJlA|p$#zYypYp?Vp47xVsEN5( z6H}~-nWc%z*2JW1V$RjXBxqvJ%nt8GlP2a+8 z)x>0IV$RdVBx+(}G%?K@Ec%5eW{)Q34Nc4jP0S;j7?&nyktXIQP0Tb+%y>=Ag_@Wo zO-vU}Op9jU`AQSBPZKj&v%aQkV!rz&d<~{(()87=CW9tT@7uy*H9><#S7_>b>vVYS zyFdvJ#R)#mZuP*>@Ve5+hR4Kc@N;u}E-pPl_tm@YCAxBihY_AZcpYIU!eF@{)g}$!p8`w5qc~s(G5Yk6d? zZZCf85q?52EG^OXMMy!o0%0n`T!aM(_am%9coty`LOsGy2!>_IgOGx71;SK>xd;mo z?nhXI@G`=?2>TJfM)(;a{x2oE{s^NGu0)uQa4W(RgbIYm5ne*rhHwz!7=jO>+dU<^ zWQ2n@2)hwJNB9vzzoJCf2Vo?_ScGd3W+Rj!+=uX2gnuJ!La0Ib1fdb( zR|NBY@XLUZhG0b~MEEnpas(OSp9ud!s7Ck@;ah}OgzjY}xu0)uQa5KVU1UJH?2+t$DiSRzcmk7rZV(%}}or7>b z!Z?H}2y+nbMkq&k7~vU&*AaFie1`Bnf*+xm6YBxta)ikU*CX74P>S#n!oLvyhwvW4 z#|RAwrxAL%uqF^LMaV)ZK)4;@F9;ICdW2UIya*p4e1mWbp(_ZP0}(DlxEf&w!k-Wv z2wXnPSO{YaDX^Oc0jyz`I!7E?f31#a8y4{(xy}igp+bIV(@<^?o(yThMZ&anX}O^g z_v}12kC-B4ORF9tW5SjeBU@S(Rv2FNd0=HAD*>EIN0XSt!Vm%a32}FRxHwW*uHnc;OL}% zMu=$f_L(yse;E7ghWhcJOqkUFxkt0Loi>wpj$S0#2@d#oaXhAbei_^*a41#C=KlRZ?jzY8fY z={N*nO>Fk{5ECgiRvz+=F<}_4wEC!Vl_hfAd8s#T+gEZ8dY6^=AlLbLP%Bamtw#(yTqpW`;c-H z-=S%NF)y=qFT_{6OF4$JBVEc`W0rK4GN*cw+VSb!knw|=<0d1fLv#dwgKPc`dDJ;= zkZpl=ME|HSoYk@3#u$sE%{=)N_hDOyfD8X+&rdTxZ+SuF%$ zQSqj*nGyrY*GnQG*9b2Zh3xxy$l8!hnA!C*iUUKrU6DiD3$ylEnGS*3-@YQ34G&>u95<&@y|?N0Ilm4q6$Lt24(j}@@`3AU;}}@^)l&@ z(|@qbNOnJW|4ij_fAiGa-%=i}+v$n(=0c|#fSP0Acu;GP*(P1u(PE4RTodz8h)I?~ zRx&WcRKc`Fl;3U>T)Jiw4E#8&nw>tw(ksB$IQ$Sc@2cu8KzO?98SEv@8$`7@)Ibf0 zYXFg36xfif-am6?D{aAeew(&_U!EH2T2rP%%PB<&~{4CU;gwNBP^^W3Zz=ah;XbY5&k_)Td}- z0OmULDQn&gY0HNG;K?qD=y!b{wATWdkx!qne-HU`6V`DS9Ti$gN(M+Nx5dWIoX&m* z(lO9{N+mSKu6!DA1uf8kCGj^SZM5BJyB!2W;QYuYGWN@xwVsNkT;00qi6I z8TC7x647e3;&@IW@!RJbr4@;EXqnT(*01`=zcmvJjL@3bJh|30EfKh%%+n^w1{oi4 zs%g4`>kdMT0DDhT(Q5(pdMFsZ0w@27MGc#hE-pO0TTXsc@?tN6FF;GR*+tq#^H)pb zoPNmkm*K_fZ?i84(g#?P%=7`&db05*sqR`>uT85;tMe2zdm9YHcaf>|S$a9WQtE5@ z1)8hBoUz~T{Dm}Ep+~j@Ut@O<&uz|95;(prx|t4B9RIVB2F~%3m0Z22i{xmc&A@9w z>nyv??%T1nan6IN)LhH1Y&E71GH^YzBhA>-c!s^mFdy>&SKQX>xYu>mzKpCEH%#&2Fxv)Qy)W@p zX}qGR{U*G#{dgLFWL0+I=#TMaU~?*AduFBQvaJL(A!6(%HMUe^T8{1nfAgL&BXsOiNT0N@}tpC5U}_g5T}Mi7+cL5oNjRHh~R-Aa(`p z{d)3wE333H^nCB4g!&`Wu%PS>I{Kkzih zizdg$dN1PhiadQVOf4&|y1Az^$74Fl&KABex|e?kzFTZ#YnQ7p^KFd%%Fmqma($t6 z)u|eezN0U7NFZO0lXhh3T%6wZ^X$EBEUiQVJ+ljJ1{xziB7h%G`~c+x@OQ~-T)zfc zzJL|TSZIjAvrbY5Ey6pic#2ftFnkBN?iFq13O&`Jvq7S|GpT73PbSAT zkz1^;nz>G&$!;Wtrr67>syDXd*BO|@P)*BIK1`^hX=#UDk2Z;}o5QiKIlW1F%(wuy zQlMgO^z=mQUpRs*;SR;27;x*{8cZ3095ff)H838U;@1TiKZF!+VJovAmAJPC=FA`< zX%l5q3GF4SpFpU> zHVA*jCvhxj4nT)hA|NLT0HZyefYBP z{gsFKUA+R2IB&ub$Gw2~C8+%5Y3`omI)G23c)SL&^-trtgyq3L#)H#u*h)7+^Q2Z> zCE=?Ew8%K8U+;+Hx|u)&*n;u41qerH@y#QW5nXWM<%Y-|P=oG83QXG*l#9EnsT!`Lx#F~{@*Lo%Obj*jQFO<#o<>Vhe*rlON`tAKOwyFcK3|8W zKW{X41nIt1x|1Bu^ER5;4vNlg^EPxTJEHeCb}?_>S@yMl2K3&{n|Ir06vC!`DJG=_ zGxQ>=M|RjRFGz51ABtlwytsNMq)Lm%TNaKtXDuA>anM${La|RXAp`b%rHL7!f0)(@ zTQ%3Gqs~(k(z!>DNuNr#bnkbjQ`ySC5FFwZ{ugAyq1t!FZNHk`|3x!hN6oG$@JnakRhe|S_Tg}S zKc47tEiNncZGrd(N^ga=rP4a0!um725pmEqC{6~MnSU@+hbZqnk1^FsyEi=e|!}&j9KeJ^9Y()4QdvZe$boR(J z$m1)5(w;sZoEDTrBYM8fFwbM0t87P5St0sBdtC4UO8d9c3DbQ*p6DY7TRJc6?Sv-- zlbdE-p4c4gg>vO2uZo7SIc}x%i2J1Uk(}L(FQ+~ocwqQGlES>!_y(2b1qI~D)nvA5 zn_66KEz-&+naV_gC+7xAKL{t{#7j_;o0FOc0QqbVQ_nd$P!9Z}>w ztj;HGQMqkgVV5wndDRrMWiSl8FUyms8QCkBd<-HRBOVUDJ`@9@zN4kFC#lcx-H|<7 z&+Y_zpNtu|fIjP> z18wXGf8iZy>#zex>Ocz-W2Z^H1H;jQX5QlOFQyIv(|{3$4(!!8_?43o`m1!|c??Xb zztyCC)qSY2Z!w))GAaKNkT+S_w=lc@gj_c4L9;Wy=LR0kuBR|pP(U?=&r=(9GcmZE z@xk5vC5{H5({A!f0uKniEUM(a94vY{#mM5-USihp%5)8|ivVjDJF+lCy9k7qOa*+p z=V5-(Ik;Ei zwj|1^kJ(8Ibv9?|V)N#*r=J7&c7%Hser)VR-H&vkaaLv0e!mnY&*SI<2K>u@=@p%D zN+v*dmZROU8e;E3W_3pWiUG^w=rRLq1%p_}`XO$1P=URp7YIy?Tpv)bBY{@f*yZ<< z`V@Tj<*|EEm?+D}?n1OsohDDH0oCbKO_-wWOksp;C7Rgf`Ct81_|Kq zf6|ok<~7^IGhCis0loCeC?BSGt&y0eN%^dNnV8dBwiG)EUDk&o6+dxrzK2fS z;Jn!f;LOMh11WQrl&3Ik;OX&0K9<5}SC$Us@q@%4djZetDSsa&Q%?EY`Lj6X)45TC zKTUWKV;2t2CW5*`mSdx!1dDx}-vP}0lTRVlu>|^LO+ZGe)CW_zx0{FP#+A0&XVcMU zIL_K~ZURhuup~U%{0owBj>>1^n)y&)F+u+h?LPgVHC<*mHLsYDM!iQIZ)bLAaP(hz_@3?2S8k)b zH(1TrCz8Xbc_;uMFRSwO=eQ0Za^XI2p4qzNvIBD|xe^^1j|rf+3KzF#*N3QF0?-k;WkM6{lQ;WNE-+PN;vJ9IBO?43- z!Mhz->a#D9uEOFoNMAPg31O6eAPq+5`Q`T+U)0&Vi;Cg>u5q8(HXuV0y5fi{GQWH| zrPgqY=o`##RrA{+v;)O8F^$N>Tpj@TKR|1~jl=;!&FV%w7I-GRok#S5x>VVg01nBy zQg2YQr7olz3*&IsW&obx8SThS(lwCt8j``#H68|=`we<3blO0@C~e!{n1x|N5wYNX zfX^)(*5j)#!0zrP*xja4y9KwqKXJQZOe)JWruy`yqm^mP8 z1(OXRdV40r5*H|gdPj`ZoA;92#|Rq^Bkb+X!(ixPX9yN&j(U$6Vt0Wck4pp!v$o7d zahVAm)`GYSSYISufCF41ERDz$6Fhw(8vxc52xiL-mKw9`K^m+RX4eDwm8X~hWkbNx z$wC@~lx3up;C^|g7(L+UcIR9$scsZ(V8;lthF&NR$J;Czn8fO!)$MFGEa_JaaS$0L zg5Z!hlP#GE-*3y2&QfFVHOdE@frWXHnE2=>Vh@?5E)sbtt)LpIB)Uwgd}Fk~61S}a z6Q>vpPuQNTs0(wA71>-+q5`$}Umr@i`JrY!=g)*n!NPR*FF=X^_0>H7Cj7;X5|b^y zx%szR{*8O14EpwG{!NF!@~;o82GXkCY{-}lE$KE zxtCf9$CprF^Di+J8>pc^R6?J4BSSxt920%wZ4CXiP5H!|82afs)&Znz%)$xZiTCBo%3Q1?YJYil2=;7h#2p-vkP-_s0)Fn*M}%!BL? zKYv467m_{1{h32#7;M6FRxfy%A;)&G2#hTld!{D|%mM;cLro?(ng(~&IGgnW?YnIT z+YW{yNC^ZKxh*>k{dJx$euxT9HpNah&bCZ8EJ-SQ1U)E9=!JXjYWxXM!2OOU9H7=W zqV;C-c1sjh-qJWUud#U^*wjiR+czIP0lsK$V1L09wD=Yc{C~{73wTu3)&D<}49Nh2 z88ko?grHcl;jIyP6&$PyVUj2YCLoD7F1Cu()LMiYu+?DVB#^`5RBF}QR{PS{x24v; z#a1j-u?f&j5XwcVqM`&v-858#QV5tbzt7rdW^y5**8ZR8pXbTUnRCv*@4fcg>+)T} ztA$fua|8L$eKv_o#PWpcY0F!jj)ZxUi}P)oxdZW$nb~B9np|VIMBcy3^PA&i>m#vj zPeH@jrbsMr4i^`^ctK;|rrDviHBMO?V|t1gFY+<-H8u@83^I1MSuh$HANtWK7^jzW zCL7?<1|n$6kzO`lBM%^l0C)i47onO3npv>V%#Y_Q3FxwvpimBq`_-V_j(3QYQ-M$L$fbIvLO!~v74-djBbGi z8K3uBQ(KKxHd8<(jRLpOBhP@eNP)|Hu#E9J+TilklyD*DaV9MSb^?&GbGYN%=&2dY zw>c}*DsB}B#7igK;0n(*;XFQxeCS#*0JZdhuvcQSHee;^TKJ(Tw#O|Wbj5)1MUmLQ zLKiPDb6!#E44;eUJ2Z58S;`fqDdBz*K!`lc%Tli>O%0_JGiQragAvUXyE@pF_K5OE z4ifvk-M2Bk0-#K(hnDRXw^{RBX{<3N*DSX80AtEHPV>Hx7M>G)iK@l}w*6HIyxt?| zK;JP;CSFcHtkVyrV;92ZE*cWtoqW_Rk8J77Lad!Ka*hc*bEI6ob<;&`6C(14=Cz#f z+Zh@LtGIR9v6#74c7=jm^@9A!RSi+U~DZcSP#<82SRyRHQz$>%>m9G1-|meW*Tk zFN4{EcV^Ap#_B+PGqc{9x!D4Sd}fpN@I?0c8OFo8d>Ic5(2w=-&3qCY_Fn%F_TB;21#UdVnEc?e%z1RqU9&-2eeZl(^sk(So)R*6$!wo zEAM{`Ibd`2nj3J&BX$BVOdy@r35Vq$X*?`IP*z5s7@V@ZYFH(>!AooumkDXuLhA5d z6AE2mK;9yBPg{Acksne7}+3rOpegV2{XNtM6#dY&x8^DS~5x2d6I;eIkJFu zoEf||`DkV0kx%F2sTs|qo~n=;EKMdFKP;Y~nI4FP@zk!OT;lxz=!vqUYQqy!DNoHE zaA2l>Mwi$~YH?5=OT(%K)WweiQ&KWgpd!8IOhU^xky1#fe$L56$Hr^HIPz-br-lYt zv9BlSYfsH8W=?Fal&`jZbB@E*;6J4{u8#VX+*u6Zoj~20MJ_|5ZrRaSF)^G!GB$s_ zRa?))iaeA&H}$!N`pQp4`F7I~C=4{$3fi5q_8C4KYoF)S(Q=Wgv$8WZYUPpH7=KX% z6xlC=RwQ;FrcNdBS@NQdzh?&ljA|eqmMlmkI6!Kokw%UEft5#%zVEL?+~8=`;RHa^ zS|Plt2F07;*JCaKb@rIg>|u;72f5lY8H1)!7+}K%t!>8zEO#Ag3osK6k<&~*8X^Y; zBo{#B?BxR4*jnj5*~Tmnz-3*rGkCYcS@Cmay31)1j6?U9WaBypQxy7E8k%mtq#|JDv%kyk??iMXS8_Cxi_QEk}!vTViuauQkHQlIPDUB&& z?motaRr?U10ZZSN@wb11X{jzlNYGfTS6t64_ZvOUiqX=&(F~iA_>OyO?nAs~reDeJ z`-ljy=?g{)jw(;>Z9L&s-*EyZ==%p}a3?l!BvxT#>RH)!wKxt_MQJSl2)R8|J{eF= z`GjJ1qI@!FwtnvO&_BsU(?5G^BY!G%*Fi3 zGugk2=o|iz%~>mr$B*zn(GeQna~Y2dsY-3N_o~`0##*5c`rJxlN#*hHYIxg~y3_ZO zr)HPX=R%h+JuHTau#*|Dwm{o4~QsMhf<&5|Ma9(i^v%^-S1Ae>nKx`?I&E2ZA*S)fNm2T zJ36aPmtitJh7RbNAl^gb88+JcjZLHD1iNQaEp7f{r1~?oRgYDiR4*4&y$A`ornv%d zIBeK|nqW&AD(bQcww}k3yFc=~sAsL)oukeODwbkQa!2xA8B!kEcHac_`aVF(uo4eKiy|AE>>suK zKs0OC&6VB2k}2-16YHx5LjljM)6kLor0}lqB=&{mrr=C&3i%zILVkvU2GHIVF!@oB zJOI|5E<<()j0;Lsq*@9dhg!EpN!>%4%l(HCHru#ioQ~DccAtn@I)t7|dyw>c!Z&I< z={#lL_dr^-El?F?!92X{gQ?Xgg%Y1C(t4Q}q?1IXby?r07(skW9<{7h^oN>rLUu$U z$^Z7|fGBowVoONZn?X3;-Utqw4+{Z4c+H6f-DevJs3BjLaT!_ROpOuIjS zU+~vtqu`7(hKYiGbSKUj+JAA+gtt5ID-EtZLOBOQUouM$O>iUcC~2Kg?83CKJJZWc zynb4yxAKUmrdj4}E#ADbu1xo7I9{7;G5wo;{-y<9;%Ybq3DPR5S6{gbIU3P}EZKt$ zcf>DruBUu^*pKN|OGkAwbeE_x!w6aOCVeHa-)xSW5p?|jqQBP2+Uv1hJxpT|%WX!k z{*y@CfW;uFRt0Rcfi=efS>*t?@^+AQoPw?!H7D z!0Vee(!b39VM`Y90pE8yEISKLYmJQ1@CN>jlxV9@a@!)=FYcKdd!e zP3SKS$un}r**Wu+v$N0-y~>!zLLNDD>$uhslD?)6Krgi9+*4_Ze)~-1MCaW=Y87)Uwx*%94kH*% zbNq_n%YtJXKT2#JA^dcP*)2AqOicCR38{_@pn76C)sY#6-m`Pqbh}k5{5vrzqi8QL zCoq6($iuKhFZ$~P>aO>w%j445jW#H>`P{v1@#Y^yFonqH{tIMKO_A5FyM5lgc{zu3 zjvxD=!qITTC595iQ#abot$ujyLw!54F-1SYzU}%~2vAei(430EM40=yv{#?arGa~l z$7KM`^-`Sqv=rkz8M-5~$&D;~t5MJvF(SNTUXLqKayI} z3TxaZTSk()$#`1VSNEGytvgIZEMpFYno9RBdLv8YCPS~J;<|S&9WlL*MnoioQFe%G zJ760PJ0evX{mI)38>tN!m|G!tSz=NkK06kY1J3pD`h#%#yRE$hJ! z;9tHSDg4O?PP1GPw`1PQ`i z|9}{cVbYtWnW(>ipQxHxA-Ce5v0Xj2Y&Bx$pO#x@4v0;6i&aWI(jNIy zAu;IuvKVv@6obx@W`1_0`DCOCI*=_wZTvozu z^0vqGyYh_433qtTU+7q!C?!Zk>g!l0i_}DEX8+Cj9$Bl^C0~*f-`PACn&ZeJw zqT2mwy3rUNd^8CN9xUM7#DrOOe+F#M;HJMB0M}z@LGryN5whc2zTjT1?<@)-5d5C!1*BbYeOhaMfBPdYKYjo0T zx2N`(e4A6W`s0vhZXj^~?U9okZVAm@kuoZF-x={l1!x>-G|gM z*vkABG>VV^$=<;CJ->$Xr;&d}enQK!2em~{nRlorbguc-OHCv>JuS+W4A!UHS}yHj z1tb<2N;*~kwvLN{&1Fdjix0pFrg(QvzdZuF|8r%E9UpttS|%D`atfN-+CK& z=g8d~t#Dh*wW#xl>(qM8%WxL*;HykP4I0igbEnG8jqGRIPR%Gqib7cWMOo_c_xs`X zAqWSEySCaSgBq%Vj9`4ohIUynGG3K#C+0nM`GGjiNvtLLw$~FTdAQ^sCP3NJRyxSH zRA_H_HrOvPy76uh{FjWLCth+^Z+`JHJ*&eqt94I|?%Wg2>O6kRtp49$a_SCyt?x;3 zf|ei@7)zOw{n&KclQlWt#@3IAcua;KRPScGbtMVZU+C|l%&{+F@Q#!F;{JlgybI(c z&L2eLEtA}*lXrE4Ftw_sIbMR>e#2UDvgHj-a_yj2N2^wo${EfMK4_m)0G$Y^_x}vX zUvfx&_`fIY+QrjGw#Qoj$E=oob%MbM*q2(Wf@kSTgyM>feo98H zahVqg{JkGZXB<+Gc4WKq#+~1C$p5|Z@1=ZiEcOLa~==K zggKl?7LvYIa5o5gEQg)FmVXbrk9woBEzsy!4)x%8MC8SB_Sh4|`P| zZ_^fS{=2x639rm_%oohFV7wluLr8G7Wu8^$fhZ%gTj-{ja;H7R$Po zHU}TtBI`CD1yHZs(1)EU*j{xTKc%F9{QN|W%_GzLo|M)>e;$4_Nq@SAAZET+A6i8t zI`b(@uL_g0T@^gAPs9_ML76`G zCbA!dE|0YJ35_Ad8umpvPL2}C$qOQF{qc8b^M=krloQH~ zw4Eg(;yn1_9G8F+v)$Nqyn!@Bhw&orH^qsEh3yux^FcNYsSOdZqyClLXNo+kBPu>- z`8ON>Ri?yg+G*<4GvcvfyGDjJX6dY(V`_T62sT z7V^@;2F8ynsBiw)`K*2sh;t*j@+}~!M(zU+N*WreT$$pj4aVQh|CBfBtmDZ%9ILU_ z&_m~c)XXKyvRSCDpWD7HJ)T34)9tM2{^8yX?kfdE;}Z|su2!Ksy`8SUDbkkaStdLe z!6~<^TLZAbl`EJLx5{R%8yI}oZaw~&y_oL$o*jH85ymS-x9M0iVJ^fdgg{=RN1f3* zY>echLWh{}cHoxd|HJAMD4x;UgD@-ZK)8`N%qA2wW7a({Q{kL>#1_ZY7`Q6uN#h1r zKlTv^x2mtk2`JA|N~QPVx_s~nULL!pG=7`ATjZ`-NwOyFQ5<~6QG5;U2BRo1{X1<8 z*Qg)1(74)LWez1`)jTxYMqsm>oJNynax5t#{7VTzZzUwh%Y*E5UMK6%IRB7mFX!VD zhFO!{sRG}UZVtdxqh$cBj^~BanCFH3lMQdX`|iAkvmR%}X7+NX_aQD7(}v3zK+e21`s`7T=ux-P`MEArDkwI&x>&$rBtoJb3w zvo83JTW|F_!*{Q{?N0ms@VD^#fm!63leO*}cZP1`>5c0a+2fsc*RwT^R`KdyJce8&P{(77X_tyEF_O;TF@6Qvo!javMRLC5ig@pita; zbNa%0|4VDkc9$!0kF5{H@2la7+ZA55iTdg3fAKolaz|9gja)Ic zcl}c?t8Z~5Gd&s2*Et*c8DcJ%Tnjj(y|g)AMuN4`-&YCCN&9@4*tCbmroB>Pf@9O(6dKsYrd=D#F-pFZ z3;Sct?pA#{8DpKY5x>dbrL-31_&$FA06W{^ z>%UHRr_6%*6p*}`5XqS^n#|3@k>*dcrR(#qjWnnF_JppnbN0q_{^R?)!soA-RdTwV zjq7C!bjf@NAYDmI>?FSr_>=grGR}-T2TeWLSfR(q`j{_UC?~f+XrtM?u%gFT0@WoePqQb@vx5$mr6ddlD_`VPbjS>o&2zf5wTG+rZc- zmYP&_$0c8=M|AklQe4Alb zi;TA1TrcuprV;FtXSSiK<4*}gQz!+-;bMMA7~|H^Eh}S}$+0^_ z-MZT)Y*Qc1h{0(LtCqsXqLI$XJ)^`Ebw)C$K$o1rqXeLAdxdibzAA2G=}z8Lum7x% zBdRZHqazX>bA+BcMG)IoYU7DonBj8}jUm|~=PkJ4jinpshYyeW9aVR`90)v?NnW^Nnb)^PK8dlwr;RrA+U@lXbwbbORy*I( zqjH|urfRyhk%BvoN_>SUfD1zxP$G^;U$33X{CQ%hVUY}u1^72rin@f_0 z_u{PKJ_nbibZq$y(u8-@%^iY~e=EOH|Ka>{{=@kN|HJu(K5KrLe}?g>UgG|~_=qJ3 z^8LHIb_O%L+h4iT#s zaY+*O+7E20kcI@1g=zj#786pwQZo&`s?isO&UCr>3NPQdEn8bV|IU+Olh)nJ_ zB7?e)h-cX@X_Ab}uHI)HmEXr7Cr1S@Z<}Q6uBrVlN33|$lD&WKXKR}7{UzT|cFkMT zHPW@OqbE4?)YPLV@2jtpK3S!nri(pavSdAcPj(~xgN6lf;=yz7;{aCg`r!})} zIx*8_$rw_pT#cPlK()kAr&n=^~iQNyM!7;ylM+ zg7eWZc|$F$-J$nQgl#BhZg4S=f?B_{h$Z|tGzvXUf(o}yp*kF0v~KB_Zy?Qc12oyJ ze!``EU+@4^Yf2`#)kN?7fGP#sK1SqLcLb4}?M*aA@OyZ!L54hj5p`T<-X+%TE^`pa z`h1S{0gm-~@nby?`eFfucQrlVGSIwBkHF0KmOh;2x6FA231hon465P^; zqwV?l+cX>;BynK}qbOraZWFA8udEh1#x`}CyuDTJ+jypzo$;4@^RmWovxlPx`kL2S zm?`)&==1#tY`4T_W?or0<#lF6)Y~)xnhE>4$0*rtl|n}dZnZZHy_{Yo|-%! zkA0~eSf0}2KWCzc_3d1@c^kfsaBIh`GN%~QEl(?i?L3YkA?Kr<24CwU4`ArDFtb`L zvG%kKW)#jYD=$^Ai~T^!9)>V=J4H$YB&5!TaDTy-TgC5Zo7z`JqPCWPtMrY^ZFSC= ze-9|~MH8@*j;}T^&@5%nc(FMjvCfWSO>35CF=h?>A`U%rOG;%>#0d&rhq}SB-3)q?(4wMI`Tul@e1`U6;a~YH<(4E zA{%4qJqxk{AltAp(mH(o2p&C`$45?+NL3s!H-q#$ZI5qXXu8C^{BpW9Tuws*C_L24 zc${|}>wfd(lTRMoU*XvG_es;$ka4eIq{Svn=;*L(%o{BOXx1N`z`zI8!W5kz_Y~0e zX9CT#efGg2AJEXLbjf|z&}!e-(1qrNILbn%H7OP)&{^z08*V}Hk#rF)==K|&)!{sB6jWkRLq4sy)0}-;wKkF$v21pEBL>f|Lgg`oqvbG*Eso4 z>6O~6my18UOJw~maf@Ge8t_!JHz^+z#bzIm=ix2hTMTQoH+OT=o0}0c2hBE9%;~O8 zx<7L}_6s?=;|u7Zema<@oRYWZGfci`BE3rT4QB`Ici@69ON~D~KI6XCopt8r;8eV12 zk_}l}Q2?mKN!+uk-r}s_2%+8D!E?{eiL52#sJMr#@{?Z@+F}$ix%L|OXzPVN0X39H z$-2{)WOwn7Ob{%lrg(|@PCF%Qw^&XUxLd{|0VG;PvY1<^omx!mzsN$iJt>J|@Fz+= z%qF!}{hodj^|aq6Qc1N&yQD}GUB+8`8i7EEU6eCUW{fg7@E=n%*TESJ6$T40v-tFo z*(7Drifs~E0J@P*l947hADIHGv186`L=|V-=as0~Yu*>B_ace-c#|%=<@MxhjMK9W z4wdNL)g0b6XS#heu|DcU$IU2PX`Wjxj%@dNY7|woaYH;cd%0$pwx)?gx{Z3%n=28a ziv~>>^Uaqpyc$7y$&m|oS$8|lkEEx7ZR_uQEp&N@y|_JmA?J37Jb76R)MR?P z6D}eIdC`+m_d_l5(vTs?1!d+m(C|IABcz{fu$!YT%j0sfdZ6JCiUP1x@9O@wS7Z@r z#^FBjCf|MQM9e61Eq7NP@56%e3Uz&S2~@fGz9e-m5=Z;xZqKt@8YerQeaxs>HkV|0 zo*iUd`v^^P&6$1DsSiA?f2LHq?BPrF9$q9UGOi7Dr=xSwlsJlvH)n^9A~Q%(WMW4T zVJZo*DdNHmb(aDzNx-h)lTIHpg*kUsn+}>HR*GG8b<*%JRG$ZOU1-=6^%)WR;4{{z z{fzZFEk2V-r=R15*@4d#iM63LjZP%n z#zw)C0ax&X25?8L%=>W)8WqPIi5zbW`6I_$ZDgj8pbDv*F7Uextjub&k9HR=$sl?b zxJ(1=tt*bo^bMI}J)$zb0^GGRK%eE<=rsLDpEaZG51fD6OeQ-U0L$_S+ezK5_Nwpp zbA-!H&+^I)+urh{npkMqgloJD`Y#r?5r@WmU4IZq#y5BywrWtzFdt7dd0OQ1P0GBt zkA7lKcekYf!O1)3S(0byS$1c$kp#1Rmxg;|vQb`E;cTg_TEa8%Jl!pRvwzih_;C?P zD{>J&Th14#Jq4TNYJDqoxa#hH4vv0iL(3rU7Q6L}@`8OC`lng!^?4Qyqc+8vzG<#| zIsA+5py4zd8d3d8pLrp>lrET%f-A=9b=mKaYK;{vg5Kc?$D!Y|=Owt{M7u!lnwyi`U(Cl zkjTy6k@`NYH?PR0hut$&xR6e17*CmHhk&firQ>`6;G2aR0*(rcTTSWIA)uE2PEj8* zTe)|NLdkB6+vjr^)(B4t0Xx>!v)3braQ-YY+7&yvEYnjKP&H$RP;wSKUO&p411L9i zNEjIpTW(oE+y8~#W$LN9Lp3N+qKee7qrI0*=&8NJ*&!Y88EqWcJK1E#hrg$QL5;H$ z1;s~2(~~ph_tk>WlU=+&&QQOv_WRG~x5VxGJQ;p^d(Timt5ALJ{#)X{_&-{|CGIc% zhx0pgT%l9vi)eNe=+UMx4(FfQ9U)y%-+G2>mnQ<=h`o{U#+|0AJo)q-)1gnvTIumT zT&5nn^=f!;u~-~faar)u7^1M6KAi&~_}#W*JFX`u)|?JCSM1Vu5=k0Geymp!1qqq= zZ3@j2G_x{mewI<aq6!vLk5g{?-BTW*NQL;ex75Zv!}-}cbiktLZNmKLO# zX|YAPq^_F_s>9T*NaMJ=X}OW;IBTl%Z3WLL{QKENrt4^nR02-%SdmwVMQCi98g>>| zQmxRb(qMD%I~}E9q750K#jZjp9lrstH_cb*njKEBzTGQ+t#i6k+c>{)hV>mc>#E<5 z6UpLU$V+Bz8e89Kl7HHI@jROrsoyV%m}ypFbNAGry?mX;zfpdo{x3@v{{8fA=dcf) z(s;(>)7o#Q#X)H&_ME|IPG9;3(^q`K^xr;hdNy-J$C(mV&c;6FDB_-V@T@N%h>fjJ zF2wi>LUQxpiBL_$k8X0J?|tXwu21ADGkC7%#ewb#W)Fww)5~36f)dmTC3v*!qfNW8 z86jB@&*ntlX%|SzO-Rv*@+H|{-aUI;3O*c~B9F7WXOplbqJDEEC%XYK`={Mo;Su74 z?F<8FID3|C zj88F)u&qlILy{rZsQtqI%GB|>y5bxMzc$01?TUwfI%R{>2C@?W?G!LmopFJk@l9fU zjInFKP_H@h;k{T__Xl<Wt+bb9}D$)qQ$-{mxk4vd>pu)~A+N{|+YRi+bu( zv|`#c(NiOq`(^5}K9eyjaGAMfYCuSv*dnuCX!a8tH=}&s$|Qd7IbDoZc4_=v`?YzI z``mfVPS7xSoif*UL7wJC?%{>gGVMa0X3MV3|EBKsYww+`-_J%0p>Y3O^}F`d>UZtu zuAiL#%hb&s^}8!szwqblKTwDtQ@ZP8L|~?H%9g814(AyTjZEn~yl`mnMiITN9Ktr7H<@jCr=84x{_� zw*7#9Uf=1tXzjL|gL7U)JD<}i)jXb>+Js#hb>LRZ zIKl5;G{W3uzL=B3uT;OA{=kvlnnVd#NC~94#$`r*pM);T*&$(5b|vCFyNwJlQ8w)mKaH zUd?$07ZcYY@rR#0NP}h^Cf7uaX>rqR!!I4_&eqUy%k?+XI0yw((w4e4r>Rsq#S~)Z z5j{{D=*b3|Y1Y+lBVYXMMg5-N9{Ia7{CB!r9N}{s0b380%}_6D-5%kaJEB>OaFF?B z%QKi;*c{l#gmE5Bi+O!3d{6UD@_ zb`12-{QiG`zV{;v-=@^ro=3WI(4V=ytZwCfvHlaWk)2@&snb`VULP^Y%uA;IZ0}$D zIo_}OYH9NA|JZz?y{=BVb~O4k)E|S#2OWvT$@jl-|MyB{*-;s;lKG$ZR8sZT;!Y_) z{r&j-o@6Kb^!Mk{-sewk?`i83Kas2PIDCD9`90+G)bB4{>*p2ujfhEoABX&9v7Pqu ztPdnr%)LK`qC;Fi4t=@YTH<2M7*d{iB^|J+G~SUnqdW?~YXi1#g7dcJH1wApub`}4 zlsYiqCj_=-3I5&ax8S`lv*Q(v>N#G4qSA*@`^+)kgFLwYQe1b zT^|+^x~+5600&O#nQz71V zqA!&AK&T4P^hLls>r!UxG9XGe7DiunCVLn_gf zJI7JxEKVHd<(LDN*Vipw#e2*B8Ffp4rZ2p8OMlLVwR8=ih7PG}EM3iYq(0YJ`V<$~ zWIWQ$H*&)t-)UkX(@fnh5VUI z5A~N@8BEQrplGy%b-%}X)o~2x)r4$Df@qsjWA@}wpQwIcQi}LDsTh^=WP+gWiKgW} z4|dEoX~;}x5oy=e(Ci&s=)DlLf#H`Hdhx=(c!qlZSb=WJ-L74+$or{qU&Y>rgB~$F z?1xMLUpEhJ?uSV>ngqr`{!v_X!b5~37;kx&zn{r5?a#7pbjRK3M9m)1@7R$aN$ zA>G(}y2}4R7j09NL<6XQ{$M={L2 zpw%pzEW@@;_h)`)R9{H1n9Fp3=4WAv)KhQ5^|FSI#gnZ+uE}7=>(?b=WJ#_=!W6mD zd`$;RaO&uQN_z*Gq>>{CpOcJ-nJyCt^t98Q)mF0wRUIHzHCw`itOr&hOH&8`=R&8siCJWyi#P&A4voSX2TyM| z?Tz~PNVj0aYwi$laCld*pL0&LggzI;4Bn76%9kusP>;Bhh3eqFJ)Qx161&AOcENes z>bIAS5?@ap`$i8r<4tY#5@CJRr6-mdp*5?&r&pQhSyYJr%*cDkJ?GWU@Gth^7qFi+g4fATfoTt;baPIM+Q&z_=%xW2B#E4Rz+P3i$yuQs;_N@JI+r6**&$S~6_*BYpj9+)oHnwsB=9J-ew zVj7ot%d7?1L+>$Cgs@IRKFZt|D2@EAV|%)6NJHwQh4Jl1=8)q89AKX?{HtXuJkjWX zicxziZi^J(o*MlzA@}}A!5tvXH$%&$c(lCEf6^9?Ko$pg6Det-lhj`aBAb|l*u0yb zSENapO8sidH4gJ0R!}p>CdBc{2DQ(O?vl7VD5O))5MJB!Y`QJv$26{6-U*s)mNZAA z&1S(Upc9SCR^oOMR=Y&Zyv2{e!rHrJx9Ifm{|n|WWoYC)wJYcmv7lk$SE|TM4#M-~ z!5v^u&sN0ozq29DSwM?y%$e%VDN(j1&ADPp^OtWZENR5)jRFGdOOkhG+ozb)Bn)Xx z>O@SXLkzi5sm#jOqXoGb=Dk3z%!1Lf$`6_8w8FqpV!O6j--bCjB{c=q^P7{cc)C+7 z4s>os^O;)F+^H3@U`H#+d#>dDIa<-w(TW4KqUC}KmCYFc&l}9%nY|SYr>f?}%4QzK z@xR3JI(!xYew9bmw7P5X#NK;w3Ji^eb}Haogc~CB)NvNY6t${S&~g7Fo%5Y+%l|w} zDR_Ol*xnI+8PNW7H}B(2|GZUFWB6;9`#0D5S1kAcrOt1e{`v~H;jd%ylt=x~lL641 z{>^NIevmRAl04L#Pm1|}jk*oE0uvCFN_TKF2A{F{0w`+v*96panP`)LB3{x{iH7KsGUFvZHtR&}XhD|Knv#W!h*LCHp*~fWCkZIf=s)RH zD>fgFjeP@z5076$OrCde7_O4R6#6;18vS%|P2WyRYU%npH--8zCKXO~%Y`s9{yo~{ z7NOF{_(hlFq0m>@A3P~+a%2@|+RPc8g8|P2Fo8QtBx(Mlh2!lnjB;p7VIDNi1AE2( zHlT2FwD3Cn>Gk&0n=z%S-BMS0D>2~<=gK|y(Z<5toOOls=0yu{r?c;hfL?;m6a%4- zIwk7k?Xf;*u8lFZ*qVB6z$l!oZo5a~o@Yt@GyjdMy>frNYF)u>lILmo49zOLm;1d@ z=XGt5JEQq9B6L!|*Z#7Jd487tOP?L0`PuTTE`KDIGV({64PBeAJAw9>O4cO=w2LdQ ze%;F9fOx2jgvVX?9%9$x_Yu3k%4{soCM7MFw0u>c1 z`xu-V#!kjUf)iz!n`{oN>ktS(V8@$7x|=FnM_vFP<>*dMk8pfPH>G0{zlv_|9#oW! z=`AR2+!nXoQN34l;gH=xlB;>%CMnRLn3!je+~>S&hBEH++RXH_q!m&1^0B zAem_#SDG6AZb#SI7Gh?(o#u-T2lWVl#(X;R&@)XONtj#Y@^_}KmoW8J`<5<2BwEb>lDT0tY;5iQc(Y;19>+WwO6yGW68M#>L4BAc*e z%B8x#S)d)vgTk5N);XLNr@F=8=*u}7tqRNer2q5`?LYmxRUiRt7Jtcn zy>y1UC|*4N7&5-PljHu=wp&k+?yq8hU~05ORu*Td%j{a3-;-V27PxfnnWMHqCwxil z*_FJaj_uOTir+rNtXNvb>(0m{HGDaaB2|9SgdBgFBn!Kbc0OzUL0&LDfLma!TP;Wb_>gt8 z0Fzzlc-4IXy4P-@;^uH`nk({Lvn-#`fKtoc%awX{YpUbmFXZtbL^fdlKu+ZnoJDlt zrV|hBK5`Pvcj3F|L`UWODBRMr$fsXkm=)Y8+>F*2j<4#3$(hJz!LZ<_}Z`hBa zOCUA-UJMOO;MIyIEFVb#bANo__%3ky8TJ!}*X>o7NjBreL3KAQu?N9Jek zG-6N|WhMGdZ}%Kp6Dr=S@AP)C8GK8+U4yCRHFe^twLLQQSNAD^e(9!1efK zis_%bPRuZe=WH#*>*RyssUICXxa&j$xg2WNxZoma+dymFB7_@aZazc3@poCB8L4m0 zHqanPZ8s5&SEh9knPe8e#)Y0T4s&x{>WAkwW17}NETcC1dJqnd@D0es$rZo z4~M6oIChY@gq;xG>6hpNATWslSJM8?=(w`fhCrz*`iNM9*GmyA*9#7fBI#L7vH_2<3ezm!fn6@s+te&-O9yU5*oLH-Dn;`9}eH{(Skv z{+>2}8-Gjp5)1@fpXgnR;PTo9(_37m%B8#_m$hc3&1d)u-3#ztK+ZDjTqZ@KM6VMt z>2}6Vz@+g>Ds(1F&;2Z@N$$w2 z{eM-S>bbmKrzx*g4pgZ9$^tV`NA~^w0dX?!&!#XN$*mT0BPP|-H{okV@J7cI@}wQH zo0eR;lUl_N;aj^cwi+zLx8gDpTe%Uw%}`H0Eix;HjZO0OPHaiZTdI+66}b|uiG3jK z>^7&xJq`O z*%^@rClpM?bNvxB7KoS;s$$1{?<{9bI_$;6zH2e#?3o<`xF5R0f zdwZ-fBiUSPot_ZW6RLhMOUbB2R)<)uSqr0x*$!0KqJItv=rLPV((r*){W{3U@EsDQYYf*+0uzF}t zVHWmMbFAVR(b>(yENu?PtPstIsEQ8(W-v8Ny+8LIR{f{EZR#9gD5!Tb3t3-~09nbt zC9VZo!JiAK*F=n?U~yr>txt9;qNlDChsG|0Z?8|AgrF93hcD{L=&&#zI-}eXXUM3` zy!7;z2w<@9zpv`}SooOJ3A4Lf)P8z?k%MC*$5YQBAMcVS{ewIR-4rwr?KZMdS*iiG zdnH{SZvQM+BmGsh1xX;TajO43Cgh^)X>nHY))eWW6l92VQ#;8JkEJ>4otQ)53CAFJ zksS!Z*7R_+oHwKXcDk5@Wr^UusE@Z%q5cA%W%gFD{D`;}mF-|DYn_9cOZb_ZD&Ag6 z(Wg~Q*dTQZyylceJ*y@PN3Tu|5BN1A&=^M5OEMi{*VEz~xus@{RRE+(yT`wY6D@mb zvta+I*-|O|4s|UEGE*)1drMps=D3ij4dDc2%e}AN36H*u2Qt%8GJv*!pDQ>JoB<5i zrjA3pEUF1L_qQTi2CQZ`X#c3aTI>9K`Qqda=15ze|4l9Xr+9Bg8ah5nk1^<%9|C(P zm2TRthU-gUcy_ByE`9sBsz@19e+)yyjrfvyMPaW2#_L z9Lr@-j^)M{OpYxWt^8j?V>2xifC}Q4^lsSSZ|qcW^?uPIUy6Ojc2#Q@h+aA?$k;l9 zcR%zKXE5X8&Sx!H->WC9J6|q9G6$trBT;0F{HXhi)8n7l3C{reMmYiww^7oJ>$M$1 z9%0NvS1C1IG8zb6daycr_gKNi81|I(;BL@=x??nt+gtBIrPQzzA{+njyiTk{T zH7Lu@Mvk9l$%Hy$8|TLtU(cQa@3or!)l|j8L(m4OoZFa%#uBcmcfh<p5 z;Rnam+h;&X0oh#nnX(}-_PV1uYS`6N%dQkq)g1_0+sDJu)5c$=B4UfUpjfg|3yRFafi~q4|*Sqfjs3 zRPVyc6piDU+pM>;7_0nJi8A_J6v`A}l~ePnNryDX>Ys z{(&aetc7BtT!Vpus_c1nWO0E+QOXRSK$l?mYVo^tlI9@7&x5Ja=-)xfI|Ud7-aul~ zG3!u>Rs6F+ybeWKT$D#o8AZjB`zAXuMrJ0gG#3{`lE+S1Jed*uk%PSTo|z?krsQps zMzA!y3a0fFn_O$pKhH9emjRKoT_p18&31s%4qTHtC^lV|I_HM&V4VJXazC0Es1Kh< zqi6b|U-Vt8>U;GyMDSw!fk~S#z31O7koRTcMB!GIyT?JtY)}-QV3E!7b=_PiR079^ z@Cb;D&%Y-Th;A=|=ys|bwxQ1_JWFoGzZ(=aL?U@t!+;pVH?1*?iiLGrqkAXOHMQ^I z3b}mN4!q~TW`;MLCA*=(vv%fuVw5ytkYrBH%V}tcVM?CjYg=?)&eVxkVR6Ipl++y+ zE<^zY3!OSqy|a~4r{?))fj}L{dkD-ZRRymzAE)NgcFVOMB^sreB@n#5UB!$Ljpdk_ z2z9!7y{1mAKVSe}hCXS2U6`h$n^HpGG?x%kt=-(mcGvKZE3zqrv;LUWx6FmD)=jO` z5Qq$8S0*5GSNZa_W$NfUO$Xt`MF2zu7-#4#(~X#wU{4?)UK%Hpe$e0JhX4>P$b1-* zi=tEVD_6g?^AmTxz7^gw^@#mjDHt}#~zminPuvV(9DtMY4dT0-5pjVvcZOtzv>z6%3*Dss)f2Q~2?V-P3fA$RRj~}*P zi^Ni4C}t&zcAilAq?Jd(WN?jQ5^u{58Lq8nPlGw}G9jmFWCYj@u-~D;8hSd;MFY}JnOvsM+A6#Y+Qc%Ip3=v*^79HF zdi9~r5U0*0J6le?hQG@6k2ZAt2P9f$<=8N=%u9wEC3T1{&x*^Fhww~WH-wKIEpWMQ z?^L+QLtjeJ;ieC0HycwOi@K_E6q53rP(qYiwG#BN(f@!WfXL)lm)l|0-pie+{-j29 zPk3ZJNV9rq>-pG!=_IA*W`aE}o{V9b`qq|op?9?cGi72Lv7;g-wpMb9&CgWcc_Vok zDlsj&15hP}IZbCg^d&Oz+93BWO9DNZ&rU{*pC~QuU&XMCqhq;c>Ymm~4!coy42*as zy2UtIY53zYPI?Y&Qn{0(C>C%Bq+O?rXF@m=LOT%8WbxNWp#20cZKc4I-EcTtMZl zwVWjWI$QYN_oBqOReh+(jRzdUH?n11z!4r#)~m2fq4K!sy}^Q!gO2LS1f9ZoJM7xg4R z5o7BRF)&#~t(Eb&>~J5!Lez6K(5k(bo8WKGJi+G=PaGHduVu+i)!PRjQj%#;3M|Mo zyC2H6-!;nM9i}5daZR%7iQlmss_NcVLY<2LE&xZ^A9 zSUT2EK>c$f&@TG9*=p%!7f}1T2VA@?Gv%M5kg9oVez!VstM$1*D5~)?r~^E zLBK9e*4+Tgi@!LC7d7z+*HxtJ`DyoyvU*FecxwMny<>X%+Yd@j0c=&n&L$pea=GlB zFhvvjtauBzL+Fk9xoS^;mpvLa0!^t`!e1Pd9S0?DnT%3YPir1AUV@k$d|o;xF-fJW z^QO~~aGlvy(MyVbwI6`Du zwPmX}y)H+~x0#`1kE&|n$AK)2gVXK)oy~`#t+Qm#pko_@<(m*9bsiSVi$|8Ksds!J zKIlvy;nmB8@V{|mZx(|rc@^m08=2WM8pO%~!e{YhAi_R)Vx* zhj*p89~`9l3cfk}l@dw;uz#t(F);}*1jtYh%Ne0GYv00EsXeCam zvd4sirtivkxp?7b^pr?vJd-hEYcGo}bZaBSwLf9`Bt$jKwWMabA3$Ld(Ny%(G40wh zGF0RsR)DQyn@9Mw1M1%UnOcZpT$i1Q*%i2H6cwtK#g;tyBUg@xC(>KEAC1)RO}MoC z2^*Vn6NjC_)I|t=8(2*08?$Ab4zn+f<~Av~n@#vgm=zwEsVzI`-+FMk2niud)6Ae) zmUdE_O7{pGEnM^{d;Qe@tAOH?xKQ?!#Q1~C4$levE8Y*G^ASA+RQPL|tSB!F6242N zH)~^Tv7*2En_b*N?D;dwb|g5?fzB~9eWHM0ynK0L+Z=!PPdnH=jlu<<@4j9f=UEXI zi4~D67E5=Th2!OnUpO)NZP>)vU1FsviUWy-c-D_)hz>Cp$k2||`J4IrXPtk)2%s^M z)}s48NWU@GRFYa9{@C872);CL981$~zKo#2f=U;N>nwd@2&kBb9?KB^Pn1Q7(BM3$ zBzA&uzMNG#499jt^M_z`Vm4sjyx%r&?k!eFEX3^n>3E>u_|H^Mm)IePP;r%MldX&X z3FsE0F8Lnf zJD3^fPGvU7h6Rg%WSoypWy!CyH-#BU(4H`6J+HPLXaC(GOn@Dk4zqHjvYvBant9K7 zuH;0k!4eJsx}FZ|>zICs9^-c1nZcaCiK+0Ah-tJez`qLl)h?xH@95<7-O1-jFn(X# z%Tec#ibKz5E2o>t-7aU{@|jUHZ>Y>lPi-osrOw}2^OATxtRe`M178IRAo*~Er{+B- zM$62|2H8Wgw6LKy{k*5&nwT0+Uk_8|Xc=RbtX2=t!?&g$b0U{#*^}HQhUoaIcRJR) zxE@pAGGINjV!3dyhY`m&t1);JQ?jPsx&bo?43D2G4}>mPSN%|?^ix*J3PX&VpQ-ad zwA{b8BDK!{Feb?}uwypDk4F8ENm_N*l6|p*XHx~`{yfRvs6?FX3<{q5!PjB7q(4el zVOG6DJgc>c+0;+7W?oiCt@v^1+zfR<)&S6;zvEAYu&lZ zc7>Dml>{_OeVEI#D|z0;Jz`ZfPul@U^R!iPB)eW$L3r`>Fb2#~MDxEF(fms&q8e06 z-OQ+f+3sP)YF_fxL}_=hL@M|6Lv(1ODkmS_7mI9=-Brq?D|@UIV`%rIWB|9cMzZkK zZs(ID<)7}QgHrJKp~C;iH5JCZ#B?6xah1c|92#Zh8uMLRLifENekAC8D+1~n>mzpV zOsk|xO}LeT5zThgF?7HqP7+7+Tr&RV=8lw`lPSNeQx27sv9D9yOf24?FjFFPU7tj& zq-OGG`Paqn8fo^SuvGzo7}c$J^%BOa=6N0lmnT<@dry2tX>%&xJ9Lk<;0ZH-bT2JJ zCnNHBhRx*pvWnDFL}E97OL7W*B{{Rx*+Cvk=2(@;kv`#&utNQq99xPj9MUP9%c72n ze}BYD1I27l_sMr3j`ze0&5SzKH%LGql?BuTE94Q%s3w(3QycwJ-OGEvBHY;%GU%R~ zf6#HJe>L5}GGCnPAq4$^;Q}Erb8(pC=M;Vxx@Xyb-H#kglo{!DXrFw|rwyP_* zxE(D;=s%=5Bn1ZgSpW0EKgi6UpQ~rqlPGj_dvsAllSQ3x7bUIx;eY84M85uC-#?~j zP>OkdCg%QUt|hbU$7K8l~lUe{BOyxwmR`ylP=6G_}Vdt>}w zc%kjD6luFKoF4pyA#9l!sox!G8?-2X=r=(AwS6GHPaE*!y1VBU>HQDl!o8@ur% zcS9r6gxOxfl`TKf!tyKcFLngVTXKV5$|;vDAe+jcNGm$j8@s0HD=Es*3+RhQGIs}i& zDOvWoaTrw*%#Y2=?4#+<&=qEvIDZ#YLDs~%Sh?9@x*nuYJB8_z;AsKsRyw0Kb~L?z zXlmEwe_y+Rlha#ck^3-g zypVZ0B0g>!sbcZjGgRK+G}}qeY38&{qxd>mL0e}qJN>KC>*i>^Zg`~LJVx2_l!2TC zZEeTg*Px6tvmFC)USTe zKowrcC>34@@K3u~CCX{HbX9`vul(ucI~~8`e+~cne*61HzHj7zA^#3XiX$Z@#i`H3 zxmw=K@h|}eCuh*!*@>xDFN!q1;5a=tat?UUJ_lUZOIqoW+VDixI`$uIFK%@rHx-(T6$r<=|GR;yFV?%F$>jWK z21Xk*vHlI88yo<~5^P?DqW|unq3C~Aw7N{>nHUC9J2%7k)zu!1fmhL0oqT0bx{9C7 z>h#k-(xw$hT0DfvIAXpSP(R*_09nkf+^6?0k}Of;!<_GL4FE0;03_{Fmvm~%JJ-vO z=00O*Y}Z~RDr@rzA#nY0*cPG2`hT^@5Pfb{xlMjKNCPvaF62_LHz5&bBR$B7FzDTV zsH9%@Q?$pnZ~Ez5A(%_D6qx?v6xm%Mf(JX&-n-rBcxrdksb%7D&fu8Eqt$yA@4&{i zNo|KTFnn+ZM*^y~oYAW!6|tcRra(;E@I$+%K_E0To|SUXm*LIRp;Nc z-2aa{|7*xL(DE9Udx@hguOF1t4lAV`F74vf6wO-7t>BY9lweEvqw2bhQ$MydL^FD7 zo)s9K?dCngM@i0-SXJC5du92-Wn>qrY!l6XPrc};U(l)s)SnK?PKfC%32 z5=FBkd;@Kx9>J&VD(Tks>#;HwX-x2Lt&~*it@(Q27On2fT*~)NBiU`Ys&Nq+`#E?? zCcNcsOEG<(-pM5BtpCx*9T@1oW;{L@_5^XDd~OH|tAc7AamUkQ9Ho6?@7MuxNNTl; z@*-`6J69dO#(Iai;yn)t#=%$!ynboXZHjM^G%w!`75>!Lvwc>N(d6o?4x*M`HA`T4F{W*L}?r-fhg1ahDV=KchY3`W9~k z5(a4%HW*XJRlf&ybsT$Z$kFQe{tK#J-Du)KQU-CSge&Y4{;if8Yo(OCg-g|UzTHa%I!5hEUSgUKMr1#g;96BYO~lvAIjr@HwNi$!RlPIQZw9GoLVZWg{Dj zS|=4X9mqQYXz(#YQ#N+x*)x5rYHQiECyV!U&=TD?Mr&M!z=W2#m zQAequB`t)B;#3b0^BubbPTxtdKS^8dG`g^;qv}EYW%FE2GDoLw(t-e~!Z{T#LF=%4 z>M==8C+ZCB{z_J)x7pC3&TBY0v`>S`7UbyAr80v~9kCM0E?$j#4);_;1Ug+iBbWJ& zho#JK*{GjMtCLrH=%3iHI}Ky9TD3AmeYy~)9Ha+#ry;?gl1C@TQd1O0TsEL72#{KX z9{MA8SwNjYxdEjxH|Y7jRx=g^;BWmzB_r=&syzB-zB}8yd65o3gyYQ)*Mq6{a%nyd9On~ z8r8aXo%Zn%Pdx*)Xd&ts0)^Ry9Ax>DvnpR&_87&K9um~(f6SpAlSVkqwX$7u?tW(@ z;)ktO-DVTj@NaoBPzL{YV8lSEuyhFPfKOiJv!k=vr*Y4nI(dX_ z-F73Q`W4;QqykymN#hn(w~7*!bG($btEP-#%(A*Kx+G_GYeyx2m1R1(L?g zg~h79o*z;Do>Y5YRKLbdNHAWKt2%z$KFLN^p96)`dqYJ*OoF~PFQF7xS)6n4!n?&i zU(jW?b;_@RQq%(z>xi2f{DDLzZq2yBn+ z#(F6+zhxmQ_b=G?^gG6-m=n;ZNUfxBm05qdm(?TaJr9LnNg%soS8t|;#^c1^5h`cg zGGl`fY*QyUU-dOw#V(J3mt_f)X*?{SYVIfR#ac$|bWdYr#@JrI9elYVvn zm)|7-@sAy$Z^kF#_n-JI6So&8W7@{S<2UNrR7cgaIn%a}|>3n-~#+P+54}c3Kme4@i9Aw&RVq*_PB#JMn+a^CYsqt+P z3goF>{t4Zp2^gv}%Nozk3TQws-!f^8+Hul1HJ53+B6qFYHGD>EA4|URgxs~{w^6%V zu4{Md>!TAgw{O zxe`jFsjg@lwl&uNgjbz77wLJDqn}_sYvj8u{RntAnPgI9b1S4sc0zlimYMO1`SstY zIjS~DK8X3iPOv8);-b-N)WTPITjpV6|L10EAr?7PCYP%dKQC}pJ$DFc9bkmz>}p%p z?TasgQb}p*u@_imx;~bbdFqHEdjgV7WKVyy5{IkcF?1!tHBaNyyyvyYoXWUhgmY!t zj5{4o(~&zl?LSJ3U)f)_cGvdj;Iwb+qc1^UtPR=5hDU033<~C`42T21RK8Tng(*Zo zQ;)o&Eu4FBfYS0UFHtPyIE!`ew-7Fp<;00+@L4JvccFt*+m#LodbqdV=lzHM*bInN zsjXc1>F&GeQyo!D|6Ds+X~FL7P)0dU|HziqS=s-J5#qI*lMwZh*x6oUXWKS(zsbjj zu2tAvzgXw=uW(B6Dp9ZRAJzvWL@YPkRu#m3O|-rqJVTM!X|+0rF~?QYs`DL3m)h*m zPH?_)QRr{>#=QlW2uz4IDX4eH)Ythv0&?SVR`e&BZ7v10PSmVamY85I%8flO7Ldw} zP7?Wzyck(B)B#PJn$1~n3;q>iXU>b*UmAdt2ykOh+dWMYTfKMQ$|fHjQt@*7(VUTM zO&RSQKz{i`tMWkyzn=qfb3lEkK+%=>c#Kwe?t5SKjli7o;}-5C$MN}_De1RknNwQe z;PrO0udog2FlP+6tNdebE!Pprt*$zr5ZQ)5qa{7+XWyU>0)e&H-kKKW5-(OX6_`?# z;Aqjb+<%}>WJvFd+AE{Zze~H?Y%?mc+T5e}o$5LJ*ms&#@3UDFI#f6Nj<`PU4XE3C z%&J>1dbinn)(L{I{Xf>;1wN|c{QuuTfFO|#8Z~HyprELz(V&9C8VDOe3@jpqs;F(P zZqur$yMPxoxLL{Ouq|z+)mFT;wzXDUszhlO8n*|nwqccEE}bWm`MUEJS;tiH71^Q}&7WWK%`xlDxeTb& zYFB8rVRwWf?Q<#8zGJ#M>RYlX1Tk7!N6q!-gtu@9pqPC$C@&t6b-KA}3YNaU;OlfV z@&0lgHysie9)Ac99DagE=MS=QdjW!0XML0M3Fpj&_Dru1BvaWRiZ18!*F1+o-r0Z- z6w2c~u^Mf8qHOPDX(jNvs@Z*Z^aQVBM9GWF$lBI3IDWMhl99inmvUINRpt__)3#sY z=`?GQy6{cnNbt&9fdsLi4%WloyF&1R`S5t^ps8YnkSk+*-B9NUA{PZyfX)kT z=L6_G)8pE^(mi55R25+Rj^OW>J&l*oL-TWXt=_}Y8YTEFgI;;_eDv~1aXFElV90}j zri(Sgb_<5Y-|yLPOY(Ag(7E$Clo>$!Xtn?1_(omy@pw1wzrLXoRJwX&XQ!qTu^2r) zoxKn@u)9WbuqE#r#b58P0{&i+ysMCZE`MR#O!GuZPu3Xsvd-xUoWER=Jncx>5v=`; z@z2C=oEJ7dO7XP}6;hZ7HxG~dwmt;e&?Lgl zs^C=RR@@Qshuc$!XX8_$&#QaYg_?KrL@f&1SwOoq@ql(~2ejC5SkqFp2E9`)1lXbALEPmGEYqH9Z28p zKzR$_F&*$#{?yPKj!B?MKB&+J00Fb<1DF6s1qPbbB4Ic7Lx7xGB&pEfVlsS?BGA9-$D4?%DniL;W^1EvJFP3^j5OT zPMN{YeTiouxI7XqS{J0;L;q=u8ZbUZqYfBb}Xm!|CDv5V@a{d z+K?;RtE|Exxojw+i?dgG=Oi13^9$Zd3PJ0{K&t)|&q@z<B(9Ma|p-5%vv={&GD?t@kj!ixFtl;^FJ2mD-2%8P{L z*T~WRWgaqvuY)CNEojKEY-ab1;!{KbqgtlOOTXu%7xIOq>b> z(tgu;vt*@nB3ozf`g2c~`eL5yu<9dbYL&%@%6pQP_j#3Tyb1YkCjRI-IQvdBe<~g# zbsV$pIu!+Zk<*;R9(n6j#d<+imk4^-K2yY@cn|q(qXT%&EO-9S{ zeg;w9RLt19|CLgAv{yd#59{D~b_Qxz{uKlWhE}ugUP5HBefeT~Ob_dHhUE`nBm;2s z$zaf3n&K+A9+AhGq7rJHsVlx73e*rc#92Lg=?)&7BAu z2~Zy0ceWEnl(f$tPOUPVe&~kW?Ta0sxi0gW=)G0$2u-dMpv~sz z$dgM-J&V@O^Q6~4QTUq=pd+=^$q z)fS}-AH#b0(0Z?}%&hn1Ebytz_WA?a+PZD8oSW0z%bwAO5htxSIGNbOb;_ER7(4h3 z;_w%@y<}xgQ{ru&7BQ42t03lrt8LuVl^>)s_Oj|69~7ZlZ|s$+)FbLXROj2L%)m>L zBvRkurss&`i-ZYUJ-Ta}TKWy1txf1})11zA!_Yq&YqI|_8GJ&T#M9hTVj>-CUWZ;Q^!;g1^xi_$PsJ}iE7QBYsXWkJt>fIz z!3$)zD>d$h%e?p(nmdx(WDTx28ttHPHhD`KP7c$m5)BO6o5`-Zh z(Qi6SvfMDTVR?%qn{^(~#X>Tkc?d-xFA#OpFZ0CS-9k)LkBnJ84#i>%`J!`ULn5zr ze`$WlOAC03c|5hOC*EDb+6O?h47U@km7!A{4@O%(SS30gKR*z?Rou-Jzr(xkd{LY& z?v==5Yye&k<4dN(8s9`{c7O|fiu5xzl)w029L08N6&>AZuDgJJWe-VQyl+@#b&3R` z=1eyi>q$y)n>RmajFyLuPaKMgL%SwrLwCKitXqJUc?g=ui$J@p)b2FNLAoc99Q8{+ ziL%t9a>-vf1EbV+F6>dui*x!syZ5B{qmbOB_7ONEzex7$XqpYh5ZJ)wI*|KUFK>-=IZ6lmB@_- z)WNY}hxhL-X)43s3dd2F*HqT3t9UcTH&^EAp2dMC(eVHkI^!lQ_7VR3^o#ug;e>=l z2?2)qhea4ToRON~K5mhmD0LhE1`|*5vX@e`t`?7A?R`9{?rZ5zpP^0wNvd&WzWCCy zcGIg5=g&H*yI$2fASKj-wR9fdSNvzZWlCkrV|67!MfK$gBi*oIarhaIoQ9g2bLdL_ zFfZjRg}}vs^c@p*)2t<-0C_IBWJCZ$<2MgI|55v&EMR8Wd~tf3svA4f(^!fRQOb2Z z5cyw^;0Uq!luB)-@9rBdzRE7&g8uCdT2XVwTy>TmUu6+0+ONG~3AgS3v-?gXb^GqW zH>CHSQXni6H;Jrs8pq8Bw|3^GJ3hvoV?%d++FY>f0&C(bOg5;amZMxt=-*5;qF0tu z7g$(G@2<>3Sll+67dH9C`_lw8`b}=zZHztwT?8lSyb+{L`R;a6UD?f0$Bp#Xwa17& z8qppb&SNv6ePTeijP}?lLdwY{k`61D>aIg^_wQ?1Ou}MkKR*&mLH~Xa2WtOE*IuE< zjL7PjqHz~eoQx4p-U@Mz6iepF=e&yiN3wB<|1b7` zmojn7&+-0wjr$Dl*KJ@qd`4^L>8ywK)QqZHZZSrTM0P$a~gh<1XS#P-ZIO(W7bzvfl$ z0O%8xsktq9=YK#`Dxr<=7HkFK@~UQD?p1qj#US18tApZC+tB zx5pkcFS<>A#icfuT`JZ+e-M34R_PMq zlQo(w8e@O5gKj$DWbMQ@p2Tjfl%GDL&r>h1)VG5aXQNczk5%}1WHGa-8Kv@%CmzA6_$D2H2;p%(PDVqnzGM`P!;(L=5BFU=nnDdt^Javv4ApgnIB;*0nk8Zzpy5A9Z*(l zvxlSu8FY2@5c@8Z?aE(yvx}06BB2naeG&!sq9B4i46H>mrt`P*-c0&4Q)9oD-kzq?zW`XF0UFW+m;SLeI} zmSV9k^p>d?I&?ix4_BE-U+uvTE|4zZ_q6g-`eb!KH6~F?9zRev$S!Yvz_3|D132$z z0YQ76Ozh!KeWI1Wb=LogBm{crs#JRBAozP%`n+#2UdHcbEfjDCU5i5x-J~55RWvw7G z70mAeVkp(f>DA7r#bjcKzqteC%qne78I`&i`enE3m9y0HVo zO+P5Kt$#4_eZcKC2$EP8M`JmW<5K?^2?38BZ1dUI*=u9)- zwcs|EnN$UIL+<*=lO#%BT;>98-a%2A;Ho2eA?ce50R2r(RnManz{DdbQxKNPLht@ei7-eY>q#b;%c`R`02Xt4He!Dzkt-%n&F5EN6+A=J!1q;*!XqRI=~4ou8YU--M(U z9nB|nMn0sjBQZBDJ|T!z_L1=Q#$%aJUC5_0Um!xbjojSH1$#^_R9+-Lrb){JNdmf; z2lVI|jju$2-*@%F@FoPL%eCX(#yp5eVU?6k)Lu3JMMtLe)m8XhmdAnBE@Omt}&M{Uk5|~DmLJfa(#@R}NBx(mAFm70gjF|eGT-uCWcfpoRpf}dHoV=I16`@N=jAKt^Dwbq z@>kO`6`EPi$Gy;Hv zn@s;#I-!IG@3u%!<>C-{AHpcYH}~DefLD#|U=#sq`gHEt-xwYHBfh)aOQAGJw4vo?1#52^;U0huJpGD^+6dD8!EbX`TWw5xiQa0-QksnBghFi zDX?u@vLGJXM%@P;%yIc34hSyV%bJqce@c<8I773dw~;lA%9EvU-gG0hD!cSe#EUhk z;GGxYmQTSy8Io{SwGvf+q)y0r&mfSqXmH0vcq^|g*UQF8PC4#v`;6%B8|{cZN_OOE zQ02`xL&(xYv!$`FfhL?fAtcu#F#N0DEc}>W*-afmn1~nXKbq|ov<#_z5jV5$WAJ9b ztubC&2+!hw{qWB4IMRK+D?Hw}*`hx6;W6Qgo@8$3GGyQ$FIm<9(S?*d10%OJpU)V|=jsSt1w=CVIn9OAyLblTuX z<+hTY@+7WY1K1TA_ap6jY8qyF({fWc=Pi7XWja4tu@;l1kXO;O#9{(pCiR*Ob%k8nvsibvA zPkcxYfXWT!@g^`Z_D7pH{B4vR8dPXaFi|aJsocuWx#H5Usj#L0TU+v%%gv72>HXDt z$2Z?P?9)!=_N+e4`HMxrMub0P<>{LZjnuV2nyje3OCm?SnT#CE= zpQRVW21TU%F!+l!_D@^e6XGjrna27|wwl1p0J*s;NtURFY>xb!qXSb@@@*Es_2!l$+(&F0 zPZ)(fbT$6{uXnxggQJiy2pnDqIKDN>fC0SV;o#mnj#vB@(GR;gM&?&WQxiZh}?g4EdRk=7=I|~+w;Vj0zMxc<_ z>U1;i0jUlPG_5*;XS$t3DO?U^eT}4-T z#_$&p9RAi@%U+$01g=k9%N+?e`e0pR27fV3^A{%_{arSTzr^?PS0a%adYWW4bz^@0 zu5@v=eAUHQxXjF^$Cv!*!9QkWFedN?<_$t*nP-yBeT`;mvxG;MKY4GK`RgA)k{oml zt7+b#8`j$yg`c)@Ip19Pgc!>#gyz0d4k_O^-*IXHQqc*dyL|hwWOIT=#qrl zU&C6hVcIcdVk|c`c01>BFY=(Y968NA^L1-tMid<@rgGvKWmc}N;Q$!sjU7W!*wCy| zp~cYx(#tFkBd1|n$3s50%r2%^Su@RFW2od}p8~90r9j3)as}2bs3$-VRuKFDBMdXN zSdoo(|0t|Xh;OR@-50&{V)DfMH{P7U+HJIM;5cpuYk$Q=&9=GLb<-=JX}TyFZy>wzsZjU>AVA;q@0RY=f&8&d+%sMRzU9yw+y7G~o`yXgZQ? zcX^R)@`B>k3vcF~eaX1hql9W@{NcNOtE5x?`4loLEl6r=B(Yw5Z!+GBay0qF9sI3X z;021{V_R#=GXnjUUe5xJWJVvy|#UG;n;!cYyc8Z%nlS~reKle5M65b;G44ISIv>mPY#vEXJK zcuTc>r0?jrE_n#}ihjEqubc%nfmjI}eX)}brJpOTlB2|LKn9P@2Kw^QWY)roc>%~= z`x!_FOL&nt0M^+_?1vlD&>^AW;zjB(nZaH*WW^}wF*WeAhd zFz-!s>eCd1iD5o~lWD`#D?}*MUW`}mqIY}4QklyfNZg<`{^gqupTmu?RKeQkS;Act za+%usb0@0eTQKpqHKC0l-j~l0pNO7DRtZ6n&-vyvdh~3O|Be!4`miyc2aqmFiHj|yKo#I8I#`@6P*l6k$g7)`Jp{L~R z4Nak!^@?de@f}f8B5z0>wr4nWl7DO8-mR%ZhBWZwHSo$2WV-bkp6I#0|NoTI53#s( zs~ShLD`jH#Lc_i6<-5u(41x(sF0e{}A!Q`KvccNh@Tqd%BR6sd?xZS>GBiy(t(TqW zLrG>=2`8KlY+)L<%l=>h50lR$K4?9VA?ZG;vfHeU-Sx7Q{gOQd9Yg{uI*6yweg$qc8MWS zZ2m^7YM!u?yVHqrEljSbk(h#;c=PZs3+VylH$=%Cv3@0X_PH zyk{7>tb+}(A`j;c*e8wb29rnHI*gmc=D4ynS~#3=2vObFp#&oT8iy0|(lMW$Ad#Oq z$xvh1wB5^ri8KG2ocQXk)j3+D*YzAUnf=yo3EbwBMd`H?{3{FEZ^&U4c)b;R@$^`* zbcAre)x7;o87EvJ4i=RLizxb+WTj+YV|r{91lwdKt1L+N2E3p|*p!Y?HufFPjsO0q z((rWqj)h|nId`u8rBbuYx~_-TqsTw3N>@&{%3-9jg;(dbKLF)1$6Ccne)sATf_i)k zE=BV3dhMG~;xrpOoYiOGTP3V3Yk7rM9|BRCkDZsny49b0aD1J;9%2${^Z8HP9ysCKGPU-kZIT{<&l;Nw=Y=pr;GB*Rb=u@Ylp+ z7S7yRMmZO<#-nUm;#CfXbtW<1nq=kO1P6R@9FmR=$1V6bmY_6A$GI$6TgFa`-yyHF zv$dys+Pu-d=FPxm{K|)L8SjIgI!VeRa)^)zw_@nDKWrV~yp_-8?3K6jMhfGg6?-gf zQXlR{e|yxAeL>+dv-k~gy#hsaO|bR|x~E8rO_(_J{yz553)YHpR=ip4DnGigDX@bv z5?6?H=KC;*9<-@^e|O$Tm_CP+*LY`E%^yzf1DCw=M8?u}41Mhwo*e1t_I=FcFa`wz z7x#OIG(APo-+$6`HA>Wt=Go7Ww|eB88AUZmgdN;9pShb?anq|TVhbVk<%MdrYIjp; z6yf8MX{gP-4J4(FJrW#%x|s8=J+@@J@n-Q32bP>D31i=A4mq52n4o(<)$i;n>0=mu zC9+qeg)4DPjp4``;F*SGd8;7#m!%ex&94d+6dWB}tT)Dv)SK>|@=osr?K}7S?mgo(Zu|Ro0jn_l&c@kK?x%x5mbCJVHK>9Jb^}r2_=q_k|7{^vNg`QPY_494|kwUQ1Swp{4nFdd!|MB2#}*{JMWKtZ$^tTWY$i+hf zIL*Zt%P&EJr*-m6IP3}Qmym|>B7MHHPL2r$a!jz=5#KSvO6nFMVe`y6Y2Y}Y@`HfI zFP`IPU9vF3A3@>ID_lbxPmPBVPCMSR1)KM@Ki}Amld>Qjttl#D*vCANj_;G&#{myL!w$D&BTP^ssna@r`7;K5H)3=geg!5ID{A*3mrmq;wah zQ@Z;2+;s`s?&ie}#hBjM4trHG%cjkR)?L*DLfcU}nevG?zb%OykHQNc zGy5iU)>$~3Z8Z0PsTa#grFhiNm!*4+_gFWrRb0;^24_~S?H;ULaHndkW zr-V0aWbNQUuKORjOMu($=f&G{f{Ay9$s0{+Tpyuw=0=nEki9&T%TMmKm;JbW$&SKJ z>nnr~S~Gb~bOw*U2e<?|1&xDo%h*AX%hTI?)wu7}x$g*0 zk6Q@XshruVhqFuVR37;EmjQ>Sa*Uk{fUI+$80J242A{a(OLf9j3e(6}Fe*ztu}U{b ze$CoPYSzFMyv!f-_qU3&(no)qKbAd{0BHPpH<@Ek#g%z>F63;8ZysjDqj(6L7fwo> zHudWldp=Mc+x?qRwrs*KJmWPkwv@bh%0Eil{Yd>*7pQ-PR2*lUyV;kWBJ`cv)~|2v zeOPllOaz)^#Qez0p_m3|4Z}{BrgPre3)kA?c1pGg0YnwBeEehRyhuQfU)(l}qdz$| z2Xc^$CM8`b-s)3^lZGU;hkafKmv1!)@Yiq>c_;Hd%jFkQTGR=^vvWz`eXuOlN<6s# z%;2Q0@#AayM^8vq5DfiXZ8{h_8}fb_!yfSn$`f44wHJQcHF~)DtxeyDfqPLU06We_GrTB_>f?ucp&iNAkExbMF2Z7EV zzSg-z*5m))-?RUZ`+NTXaese4Xnza0FNf52@YfRFKwI`)GPMF(AenfOzp*1+rEP2L zkBoJv6iz|~O*R84s~<3j>$W|f*kz~$S8dkofn-^BvMlH7rn1~D7^5ZJBT&P3tdJQO zEmP7+xJopW&FD~G@UBrvi=_+lu;zDDt~uxD+*Hasg=MeADN#lx z{c;)H!seVj=w8Ep+&R!jvYo6Yc!M_Rz0&FJZB(Htz*os@&?8S7-;)jMJ89cSPjcTi zBM*BY7MVSKoetw!|AA(-@yEGl+omuYLu_t$q?p)IUDWHZdG5n&a+3`&)3;5S-%Tm^ znr9zLSYgAX<=1$~n7>bsn%6x0h=%C05AxJos+Cdpe4ByK`^dW>yXI!)ZOtZJA~ zQVsJDy}r8V*D$ZhyXmV$ffSz4vfBjH-pg9{L)?$#1=;C~oYVz*7hT;n4gu7&y-!PK zr4sk>y_rp8wd8@6eLrl*RKgB5=!rMQ1`1&%v+KN%67@A2Fe!+P$08SdAejwZ!%*U{ zeP-1+&|TP!?f-uJ!7#?N*dF;tUj|8!lSazijDD`~2q<}|HI-UPH^h_i*Ct4Bv=<~u zU(E%6QOI`<`V!G)x{=V{>6-R3u|~HN>-ej$nBN^nN}N^d2e8<^(oo9}mn(R!P3V~g z3UxbnEN(8g2ik`;3>9$2Q^cae2{gZ=^TQ^3NduyU}Co?Qq*0 zG%7Ep5!T(gLA!Y@HsJ%pYpvahSTv#EKmR`C_xZRroKT>XV_LKNC91u-7hJvNPe zMW=EXnfvDJ(G{lfZv#hXmaLOcT?YyAEcy1z#<-evM}aHev@!Ab z`ourYiVY(~$eWleBSG$%+*r;l&Bwpg^Tn3lxW2^S?WsV$59s$IbJjHo9@=l@wiRA` z#0EahzmZAuLpTF<5%pv-jnpR|)6Nj%PVbTK5i5FTgK-8tZK3y@fGEp z)!Xn97A2DnLPob;^chnV1hFmD{Fqme{l1$d!)Y@(4fvS;wCSC)88D`y#S3SH4tg9m z)9&=;W&JcSJdea@4=5j%TYCF6-OrE{to;*X(ti4Cw+c9x-eaR*C6bF5>fMdF>~)zyIgYZGt<4*~Y;;KhXE=E_BUN zb>^B2dtVSJ*_mt*^%>ouO%=S00O&wz>|jT$$Q-6C|7g`OB5C;>HgD%}wAzXKDS7s( z#$m}^074#!7^6wKlHd%_zfFs`!8Vu9~K zy8riPSW3!Eb|*(7L{1UAgu>Tu#IPAS>>VckFhl5a5nBi8JcViDC;OFE`bDuWX9-^^W1oMyITE^vBgz1t}-#;zQg&*N&;EvSj z@t!-ZQ_u2_JK+3`bM}}sS7O6eGXHh=zSiC{`d}CjuJ43bM zb8QqaTAx(q-Ca{FyCU~y%GCnu4u)gO?WKa1%zQ50njdfs6>f)?x*dAw<$HL;=3DX6 z{E%sxL~@RkGOvA1@utc>_4b^09s^IDmFC(zL~N^HABE1fga5}o;_`u#mMt-yOpCH2 zhj92(-o|8VD1XUb6;^(iB3&m6_!~Aqh)syi_EF(#*-z1P`VNpO{`n@MI% zip+mO%MSjIs6~$X(I}x z!)n1brL3dYU<5@}?$KmQ00OGvr2UBbxJYock9-I!v1l5Cz3jCEo?zpE=c9^)lY=A* zZ6!pNY050W#Xq1e#EyH082wNoqY1PWyM-q7sUI=xE8jmJIvPwI$N7i8y}{z>CiBpH z?sh+J*Q~OjYO>3!E{Nk}7`h53&>ey~!e*}wwAQ#0oCZZ6cnLU5$U*xn#)oo?1K+2(IEh?E@^5Eg889J}^a=IT4q&sm6L z8zm_@kKx5^Km)6rc!hy_E{$sLzb08&{8qfwxZUiVVVdFf(kP#KdB8 zTq#@3u->fZ)DdnZSe)#*$-nr=4`>7%Rcw0F!pHNO%>#)&f#zM<{flmk)ph&gSJ@|g zacq|_KG{qC*%xLuzX&~ZFiO1Wqjr-eF4{rC@#|8S4y98Q3tFaUna?*z2P$P#S+2i3 z9HKhX6klZ*y*dzF>erCaTBj20v@ho2Jn`L$#lR*%8Ef?sCVC_;w8RR7v9TQr7bZF> zw4KmCyU`YYb325@rpHKVgUIKpL8HMfncTWI4Aasgep7AAekTmOS4u#xawo;rkAI*24O!kBz7In|voYu{@^mZSW=bT@q@i(Wr zW6}9U0RX-kX#9)10(A)$9$QN`AmLFw9qwwdWZ?hJp5v&(MsD$N8g0( zl6J3PH+^ki>x?kSUVb~V59sY0y=_k4+bM7QQlvd@x;yFA{ss~HMRgXdS9!9AZR zI{&!Hy>#vhG36DemCW9BYr)~APs!aro!sq{yzE7mB~dlS-;j_i*Ly>q?zYeA+kWPh zm+a?V@2Hqd+oCt8vhN_BE_vBqJVUyrKT>}nZ8sL|cOaVLWIQNgI`N>&@hY;rhqrs@ zWBMXddS%XpcqliQXc+8Yr3?1NmUdMH`z(myj|PDJwy5~6>iYnvBZVJr77oh;oIT0% z*x##?S5>}jgL}-KGjtEFS`pY>Sh_Jf!plio^wdr zu?)8z%8bb2(bP==Ez5`QEGx{34$&QudPkKtxF3dMlzB8M=q{khzEPMI$B^NK^d}w3 zPtv}MSR3`aTuJc!%sL8}q!BAA z-Kll4t1R#)Wt); zxLiIM5EP8Eif9>*^1Tl&9pAH$hp?4JZ9$57+bOYg@iMiwqH|5J(Jn4s&KJ2JXF!2m ze}aPw1(SmANHB&hGX=>7+-DYf2S8vHUCi8SmvT(3!Xog-i$UN`$xyyobCHj|!>o5w zbPy_q(;Nb~amQQdW*q>plS1J?Q;=#6OXqM2=bPd~QpUuh_MG^5d5?K`lf-wLfEL}S;MV;U2yqa(d> z9C+dCJY1E`-+!J?Saf9jJRAsEakl4j)6jN7pqV7ygkCfgbqwUvMZiDSuT3VK^$DBn zF17YDe6^79KYU}7%+|Hpv`{VA+RuQdSGmUAvso?+`Kihk(^6D4PI404vd%+yS&dCj z>;x~gl2fi4;XfHy{S_at{*oYspUY$|^Ip3lcuxBgI zV%Kev_I>smh(h8S8sfyV!rb~z2?)JrZW!{5Ug^IfwcKK?!%3_2!@5NZ|s<_1N%%q2D@DarJv=}XZ=efhUOwBAlLI?Tq~?j=gX3oY-U*w%XW=m}{#*t-R#`d=ZXJMh3=MBcS7vMK#hE^`&y{2i{XN1kAHzB%~;{%#2pVEYNadTt1ok@qWGq^#_j zTqY?NK~#dOdNwD1#|iM3Jf>0-P|Xj?VbCl`e9v+C_KOTE@&XR4NH^~fNDsrk@Z|^N zzVAM-&dhK=<#-{d!bsW~Ii*ELI+9>1>g`lC`&b;_AgiYXmX}kr`})`nT67Qo>Cysz zq?-xBp7OShFIqV{%V~g|Hi(oZd?aPX2K))Lq=m@$Bvk9;`?E%NjB9_^$d0Fo(NqEh z@T^CNG{2b}{ASWyxFX%F|C@BL{?%Hmr3oO>9axl;5ZGCilb~ZoIf)jXMLEIP7t=J9 z@bpfi+~JFyD7SALC)D~9(4MeFIf=Ov&W>TlY%vmjsheeox$CZIX*vz+vC)C?wm}D4 z8QWUkt@)7#HlR}|*ZnQ+C}KaVP#XQOy&+qDZ{3UBsQ2)fX>xL7dT2F(6)$*m>&0og z(do$a+^n6+{vkx6LvFlk=RcgF)*$GSbx7U6yO-!UeaO|snFiO(Ir(C>6VyDr`z`N# zTz4WWTtkGhEgVU^Db2mT#n(unkwVTI=Q?0((TZ=Xv&jPD#jTP?G8M$BuZ&0Q4@Y3qSU?R?9 zTHogVjUrW~73ymqiu4pWdx=z~)c5_ql%xa?nSqDC!x4hL+bQn!*V?0v^th1t4>oFrutVzMmhE5mx6{J^&tpEF0oB(F+_$8)&33ko9f6NciEvE-QhvnW(_5*|c517)r#lHJNW=-JA{ zE5`Z@>`@wud&r;r*@EenCLA0MI`PrSaxW*BTErlF{TCvr7tCTC7I-h2k*g7X?K6AN z&j>xX3_#w2ZQdrRrXtBpX7VL=S615rsV@ffP>+=Y`yN>QZ+E*lXD5Dt@v;9w%R+Cq(q zW}an;!P{!M%F;m=Z2wT%XPb#w9T0|TBpLk`T)J$?Z&Ke_ri0h#OM02xzK)t=a>p?` z;$HklE$Z3aTTQO;owibiZ>o`k9v1<)Kb=fG2@v|%WVPk`fw~?Z6luRfy8pHIT;gV{ zUzyC-9|jFJ|1d4^6<7`l*L=-gDU9>YQ6aJ)+cJgn>?XB^@($2AWhIobd8+~r(efb*Wa#Vf%$Aejrl`{Cm4#QEemH@% za_h}M9t^UDH<};a9wLJ+HL#kpV6LHKIHJ zMIe@Q*_Qr{b;}WGL;2GAk!q74sf1YhaMH4?jJJ5#9!?f+sw{FcWie2J0 z`!q=lFjGUtK+`rVHfOSy%@VOZ$Kq}@WhaL?FYyCE6=LZ&-17U`&6cKl7yMLU%=x`_l(Wq|l3pG8L>x^b;+b-+kc1s>MsyusooC~+1xub#zDvAm4+ zaJ1h6JKaaD1Z%GN=X-omGB#c=>ffZE-ivuBmD2Mx!i}a?``Mf?vY2P{p|JVo`IJof ztOx2HXp_EOWxjDHGlvq9*j_il7yB=1Z%I%Fe91E7*`*|f5kb6UMIz-NLoR8gBeaxd z;p#q47;xX6rlV)db4oPmmy%SsUceW`tW;$0SRi%Xtt>lhu7EkWI$gG&zsm8OGplU7 zIauQ~B(5m$wBF-xVgD%SE@`4VSH+&`T5Ab{%Yp%q)VNvE!fwqQG&Q(B!H|baUBb_R&iIN}L@pbqK-EH{{w>(?z&9SVibjT)@~IOIcIO z-{qmxaKh=8Z*x4QEpyVdiSR#6XJNAf@d>vM+(az0ThuK-uNCEZ>q#<%ZjM zJC%Btzfc`KY4IfI@Db&~kv6ed_t*7A)u1zH4F+SZ49-i>cg=HTNWE}2yf-(4pz5(( z5thzPQ;Fqz#Wa=`v+%l3C06JaEIf;U0t$jPx+}Y<8{U&yCQi-pdMuniQm!4~BV`w< z{kQ)DDc#DxjHPU%vMkjC0NeuUZ>IDEGiO?{{U!6nB}!CsANSAv8{XO$4CdIbU%Ar% z3bhH#Tp!*`elIrJ$$!7PpFZ9M5S>O^m>#M9R!L*0ul=rT%a8K>Ic+krb1|1#msa%d zceC;-ixg&ABYI{DTUY(UDxBp+_j@}*;Vda48-&M^!2~ON^Yb9T-rRihIIR9(-*Ehc zEaD5%ylqj6QGJ2Z>*zeFmz|5a6o%_Su)ge7O5?cMp$Y7jF)ev7u}RHe~Y zL^ZRgZtU;lpO2|s9?t0U@XSV6#~}0W+5Thm*^n<_A`(J5+#mVtm5tY4w|ieoRr@4y zH&4Rm<7ya+2~;JH4g9sdXQGEm+qTKv+A<#6izvrEZDe?v+i3O&NV_80Wco9r+Apixg;j$^Q#J}N!pY;eMhWlr^`^Og5 zNX}kKy8L9U(ez$14vH`z5RfO|wRqY6vza4{x3{=oZwDwPvo^FfU}{zP(LX&fwuWkh z<5Tv?O9^D9p}HFfx`dmHv8vUWUkp-u%UVK4cq+C;--?H7v)vG3UjycbBUM?_{m)e_ zgMjNN@$$UICD>*GlqUF7PdbS@J0iun_&u4`d@ud@WYrn&RmWNo-B)$&FG0v|u(SVyPCKlF-~xJhx`fHKof+lfAQ z_=j44FmEy4N~{;H*@yemFdi{>Z!Lzyuf8#!3cC^TZI?T z@}LX5s(zXC=Ig`_;6-l9U)UZ0?pex`B{+D!Yn~Y;Cg3qHJD7k)KX6Qd?!p9QKbh5X zbyv#z=YMoL=m&8?k8mmP_i{K)QczU#Z+V%K8T~CpN_hAE$y#925f0@rlqrF^Z zcW5-&-cZMoGOoz5qdMqS72)i@j&@r9^GXiv4tt>_#W$17Y<{;;ZfeH&sPro01!IX3 zv65=5%9e)ss0<(SL$-U3GIq*6smv0vQZ})KmU(UHd%(3RaOLi=1(MK`}cdOYcy4bdAY* z)l2iVR0m4 zw>?(kKPu;uH;Nnk&*gv^F!YWwWjN2$TYSNY0M2YFK`Ui5c!bT*|2YA9(F+YFKV#&& zT&coFc;vsJj#zCvIOKeCV=E`67SOt#{`POMNTh(6X;w^0`~J!!{)F$rZrBAQtr8qo zgT6$`o+$|4&C1aW5K1sTT*+;?gF%FFa5W9?Y!3g1&A$qd(|O~KYCaz&uea1<$sykA zVJZW6UZ5t6s75?xZuDQ^3peIqzr1${AZX6zm4)xB<-*+oLStiNBH6MxtF?k$#D>Qn zk!nxB%q`!=PuW_EWu)@i?+Lvvx>KV{1fNNCELDAETl;ine)#P3i@yz z_h$7t996<$EP7gVzs_v_gWS7*4{>iidWUYH^Syu9fd?@6LI+Miis3Wo}W|6TL*t-?w7zk}{S9(4W$VCF3(5HxW z1YW51ivTck0fbh^Eu25d1G$&%zv*~y!7 zo)LpIx-%rXjnM@zXl#~Z-8bB1S2+Q-{Yjt23;i;{9BNCwij{;`1= zLoPop#FFVv?`78yzQWT3O6hc~ zQ;4zK%9euLr1wYgw+T0eYG|(%sOHEg_OMqV3D;Ujt6o*E!N(V|kM6@7$R`}lb6IV=Lm`}&zK%L{qKbQ%utktPrR>@17`%9(=Bsa%|- z^4&x*jm_gY*$;I3nQ^BAn{`4yg=v1DBP$&dir%GfaM2yynP%Sp8H;YuR$$@~UeZBC z&9!skJZgzosQ-XnrS%2>ChDJd3dd-xOgC>$lky~A#Ntf7RX(DZ102h4Hw`71xw2$l zx2m(?Z2gUDf!mZAtAox-JO zIf6u^%fL#3G%`98jr1M*=EzA`1ZG~>jpR^EMRk8mL-<39J%&zv zony$IV>8Xk6FZ+o_ti=8)wXt|*k9MBa<_9Vi#?`1OQ)TL8caMdyz78&BuNy7>Qlgi zh3P4b4#0e4FzQ?wnz9_N#}fBORk)hOjto3@E9x-y;Ek#>>%P^EwrZgu*U6M-oU(tz z=Dh{)rzeq0jMrx*sBAbM2&^*={TOd$orljDRJRABOOtRNE=OHJcf;nRH#-sC*ROI! z_t;|a){=F2`oo0mlSfpU56&Iu6MG%(8#Yqh-s2E(yRiKp-$Q0L*4j=+h0rb3$+!US83;6tdiY^O?^bEo3VXs-??+y zRGm(K=*t;U#%z(fu>5HE_&1z~XQTJt)5@wZYtvt=>CWVuTadHgk|f?_$NeRjZRZ_Z zkfO(2P8a|n57IpTY(Mm^RaL{@H^q3|PcPFc-)MhlW;`%RB@#!wgIrG@ePvStjnB8`df z{To<(T${ZMKW;qz2%E=V6m;ALeDEi?jk_C#(h8MfGqr zsdw^33t@>f+HB@tDe1Dk;R{=*Eg>^bmYbSDkEwAsUzRF(x@SEjr<$D5F7*HJ0tWEN(I1C@(Ebm*9Y*>q)mh?OI`ojB)>z1}~@+6mS z=5O6n1$!$|chcrFz&kCuN-^*3&Owp)$cpCn|HM4}qODL^Z{LPW;N{jzmTgHI(ih@H=8p?GVu`59=h2s;YW+Fk4w!onA!i}1hj)1M5&n?%#WnFc1%U1v2P$$Nef z_sTO}G`r$qK{%QwZPi5=sSK&$4q3d|hPtqi@TY}Mg`qsHectetO%#FI3x4cPk^NkE z2ToH-s8TkiP}pQWb`eD}hzLT2@|wH+JDW)NIp}_Nl>G@_;u;_@ zXSMW#!F_)(h|Mpy>P(_ysK-oJM(WXG6(stPY6B`Za(-?(=WE7!@`+szVe>o8_s$;p z2n*AJuYS70_@8o>(@Xi=^Qz3<-~mJ`xkxuTrH)MYmbgprlz#fE-*GNq%X6rqyfXq% z(k@8St{^#~r=ij3E&*iZ2B+E=b`+Sx8cmCDC2gu2QOF2)OwE~MGv=theZSPcd*k6O zxlJ%)rY==_hDT@+%(I=OQupb{fB?VMMQ}h_o<=gCYq~8fYJXbekK1>Kn+HB8QMK)g z^yzuH)EB37PV^ezA?IT7@8(9CQPYsdLINF{()b5`s;sV5zs=4?l2vt?miQiCj%C+M ze<_z#tGAe43!HA4V%JLre|qk8%az+{x!ig!?y_FW)rA7h7CXi9BF&{BNhFtLgCR+q z2`gF@zZnOhqvJPQkKx}8P16{c4_B0B!BAK9R9dUZ z>}2bp0Fwca5PBZ)sc!Gx&_*qjx?+F)ns(rb#=w&6pOgx3i=D>l=N?!!>HuQ-#vwWLJR*G68 zhV`^FcpkflJh84at*iD)UK=e7+3PW<4j!Bm@%)R4M8>K9&ChY;73gtr;*U(O8++19l z*KuuLXg-YLMGKT@MxB@+aEiL`H`mjZyxChTR~(GzNKJ%^b(k{nUVP{mzg!)R`;2x zaDxpemTQ`0(mQ(lp&}9Tt|taO&zn5T+%kSA`97jYyLsZy%NNzZSvUl#?hbY;d&G>~ zyO+^uN@TgLF7gLog8p@POfu7JP{E}F(UCEqxwZ5$F-cXnb47%NeeTTMS!ibQz zM(xKURkomXe07nz0cJmJJ{xWwD?BnLh}8-tEye_E?_sQ7gAQ6kBIpkL)mDBWRjC#K z*JRl{cO?eNUG4F&%#*PRj9QJY+IJ?q%}kv$LAx%~p`Mys=8}?pm3@yY8TKRg;1xF{ z3)BvEam1*eKN3?#uol0BAmxm^8|nx8cROX?d1k+-%*vn1nykYmeb$&>zp)q}9p&zu zPaf6pUeV$H?|<6gz43nfCoqgm+=Vw~D}OTHPbi`^&?cMqPoNO1c|}1HyG>K`>@?iM z_(aDs&aU8k_Fbi|(U7;w;`^51;Icrv-cthb+bwLV0%4n&d(7=U0t&~p@0NZX`q&$XH+OZSbGW+ z_MZ*TvS^jKQ81W<&rOx%?nPNjF!7{P+nK8w6_d4R1mE;l74x@rSFpB-?ldoo%DlVB z966+CAaW#rWRPzBXM7Q%70Zj?#V1j?^R?NfyJBdceS-P5Q`3X=56$qg5R56>ikz*k z=@H6E-5AczoOST@^Mzq;s!Lo;;gOpVj#E9O7srKie9mE)38bx!|)BUoNmy zxt4Kc2C$VWIe_^CxME0pL}pDPV|kuQ>O_lP>;vq-?R(jW(NJW3S77z-m}x)0;J41p z-5*rmN)f2|S1`(Nb+YU8IOPb{n3-~Vs&)#Iv-wtYs^f(uq*TP9ky{XhqgRql?kol6 z;>XMT`(x~MAI7d`)Uo?|AHetdkG--&mxBCTo=eV3k9I`T**f665uMX@_BqUm{8DFj z26Q%g|1yA{cS;(rKA^8Y2IyV|)=5-YAsoAyCUS(;XIw%tN4VUF%~`*)`#F}!VXr!c zCO;t-Aa-3>yd>>Bxdk;HO290^>6|N|6qu%RsH)&r#0@iw;A`F;+}@z)LN*@z579Yj zIDckr4qt!kNR%6mzhu8Un&JO~ersfIn>^l|J|Y}FnUes25i9grrGX9f&zp9UDF`F< zwZvLil6Y)fz4g$Nio9WgD+7TuD)P+U29*+lDQ(n_ zoqzXFvm&`mJ9{{*(ogf};{r08X|9^Q>>Hm9boLE<(`6eQ-|WPfk)6dC$uHBatEqA_ z>`500?Ox#7hMtx?)5o|dEZqr;ggglq<>SK`m`#aYBhF6^;S-3mp58upeEZxH<}*7> zcs#OxpYEnZ!QZaa@w@jncAk5WbmMMww~Z_J%=9LWH~*#7N+z>`mCKk4#;`IZg>DF4t8-DS=vdN+*sCKTdYzu%c0 zq}G=0u(B<_mcmav%(dS}w@YoCR#UQ=^LOqnn@;2^=w9an1uSCx_WVGsw^gUk^D1{( z7sycC1yU7$Tf<<^#Q-q`V^JE!(F z;@&iGZf^B(riB*6Op@%oCJ(wjkTe##B$YspXl;+}s6N>|ezvwI8k+^w&(KlwtQ0hx z%+e?9M%xE7)6223WJ1TTjHDZP!%W*4FPSoD0Kl-|XRU}Tj(?*GoLvt4n4g+bV3y*8 ziJpLEW|;Yy=w_O6kM`*(*p){rceZx_Pdnjv9wAM_D_gQ>k4pBOe`~kw{MMfw{6}Sk zLT67E$xv(iu(+ridIoDh7b?w7Z;mfsqN3mYhqZ)KqPOdB-pfB;@pLnCW$yjGmj9_+ zjv=pc{DYt*tp~UhZ|@ac^fO3M`_NSr`(3YOt>1Yz5V$mXdp4>mRI@pO`0ngr;wIW& zdPP%(4cPG?K$c(93jggC`Af!*jXY03jjLQFU|DQ)`J#*&a~LNpB5Ajwxaz; zW1#=`bF>en$I;${0>!UnddS;o_bJoys}L!Jg!_D*eZ+md@3jvYHy{m|hwfxM%r;(V zdn!9l{-)9`!PWovRqtErvxFRevOk!?R!?Wg9@7@SXK z*Q-%zhnc!y8#O(*2cmtatLpWfiq|QwkX z$rG#4hR2xA*?q)n=nlMMw&2hEBbRc$ zHzi?9(&N8e^YHxl(Y5AqsQfXXt2z1R#^Q;t0XFpPuRs(`O{UF{XcJ#EhSB$)skTpD z(!*7}=%UN>?FD|a3@GCPT(2@^8?qHr(F>tM=WeHD&l!Cr&g_*r=8+td7qy3_w>Xav ztI|g1yY{>qfyNlrYW3c<;D}HWnutnaVq=tg7;Y2 z1{TtS9be0qbDMo~Hcw>MBz!JsbZAd7@sjpQWlnr=@7P52GT8r5ny4Ed?V0J1h690q zkzb-rfGff4wXcH8%CoJr{$}c7+=(#ITHRYopgvt88+2RCMfT0_bo9dzrnr6-S)9b- z$M$17_45__sqP^NE9v5LdUAdK()MYf%8#AsxZKLkW=MpOmekyy8;JEsZvaUgd^Fz5 z6}dL_2woA=b9*vtIFkj6A!Z5^i9TcWhH$} zRP^0DQe!ttZC2@3Ozc;2VKDImw|7;912s@xYf|#26nU#(X+su6!`IWBlqV8Q&Eo)> zV3V`kz_#`?Qk8AW!}d~Dk3jQn>Ua0RVB)&~-n+dZ{z2P;ohDrZE^{VBn7a=r^r{Hq zgo*toFsu_atO@?G2J*w3x}RZ5-DHQ=>JO`xz#dbgVf|BRF!nWql;)MqG~weQsB(k! zs*1dqUfCUgZ;wJSdwLh;>C9P4A-Q0?X_-ks%WOaEhyLmcxmzN$&@r~pWgLgdCKlR4>Zbb8*1FJ!`p~;|A&S%z2e?iH z#fFU*9q*~ldd0L1^$~cDx$>Kxipnb}pePWmT?Od;eSUz%v?^(vE5|+SevXNs@Yi4> z!F%YcL))~pAw%9~yZ^Qi(>~s&eGE6aai~ocl&*9rHj&`O4dG;Ls~Pu_=COe+VD+KR zb)l8@q1Wp|e<0#7NxG!a+stEma`v;#qtPa#Jw82;<>sEN*od*5rce=M;G8McINrA7 z*h;vdr8pPs%WuTrXJir?`mT!dLIkMCSHZZ*q@!r3xT4!#P2`U zdpz@LlW4w8syt96g<0UFZMq!x4#zO3Z{kchnyHBarivE-^ucG!RZ4x(7O++6z& z+Cx@t=Ebff8?JG#kKB!3)sofaVRJgYivX@OzwqBbmG`l(H`-$d2dP+2^J`GCF9y!T zVMPJ@*t;QeshdUET)6IFtDYNX$(bsPt~bzkALnE5a`UsVcNt22!48#x+TRLkd9c;ysv&ha|cJtK*xxd-hQuT@enuT6^qe&ZAt zJr6F+Y)G<#z$aT=YV>66Eb=01E{gBYnpYS$pV!+$O*{(nC8;1{6sY^)EEU$x#l}@f zstZDMWm!-?>w)OG!erdoWA4tenKlpwK$AC4Du+GEKwaOx*nM}wUeT zy2jjZ0heP}8()S(((PE1gE!MPJ zixm_VGyxiQPdzWbE02z$J_bx%s)V6>bgnsYF_X)t;pYfSLrI6wZ z)IfO}A(}#-Jy>Ke>|rBBNes=bCa6JuFYIQk)!M&f&g0nw<73aP)-fkGNRWwg1{0dO zK0Gri2ON^=-)a#h+>=xZS96>8II`AzXFy^RCpAt}|NOlW^ns-{fx_~P1>}ZZujbci zbDv@$M&d@!mn@!~fkJ@wT26Ew+T0){;Fu6B+8onN5uA}B#I3!HqEKv(J(Y}v@Nf_R ziNt%uFdh&vvyj@m0XK$Gj!34%T}@{eb7cRz+%e7V7tG0srWH&s=o)D1;SO#AE^qI)Bzu#vf_N_a_jd=2yExvP-FLHVXHeU8 z`*KMAzQ}@91Qr!_y+fYrkY~MpIhI8h(jYP9h|ZKtZ8*Y&5JH4~f#{*2Iz(hW-X~0+ znYPfhL}o6hZanMMSrDp&xqz>ZVHMF&B#@rmq|ZP<`^_*!N{!)`9om1D4zpk=_W`?v7t zFj6iu**ReA4q?>M!N7%)ujPb1H6hOigcX32Wl`d(vM(Jd(QD&|0_sK`bP=xt3Sa$YTu9E9M&V4W z)a&188W0xru_uiy`nXHc;rN0RVhboo?FevG%JrpUi9tJr7!l#mp?T2N29xmpmd9la zAL~hScJ7_(7d*-DJOjRFDpz68ZuRagm@l|8I_s>=9QEy=WM!sldMZostpT{q6_)8m zx=QV=){8W@CR@sfmh3NP5Y6^-a<~rVEtA;Xp~7;ZgblD+kmw9QW6YctT|hfDk8=aF z&_edjlHDOQhuN|mbF@EJ^H%sA4cSu&EnO7KD-L-ix_QRI3OAC(RlI4Ds{$e}v04sR zbm{P2;Nzx{XRRbjhJ{~?ap9642nsxFsn!W{)(%?fT5)OoxC?lM&Z|mW=~t=V*Mb&) z&VMCd^;(FiGgi@7>s}YN-tvtcKvSB>(4PT^rwmYM#EYeeJLu*f;GEgh=#5?Gc1t&N zdq7V0+m*k!x&4IO601`9*Qf9Y*d32<;;B$!ReIqXckw1((j_%X9GjpTA)**xK9sy= zfx}{Zf`}qW9u1KSf8NhjCxT!?^B7)1%|XAQm*oZ5YuYHids-kK`=X!eWHIS-TRa^@ zx$vCC95uV2oE9V)-pP8q>;;DwP=f+ZY3`+BOj3V+j(Vv+`ppU8`@?ZCV;SQH!AZr} zUy`Hx9@K9+xs1tC8UKym49QV{Sg5xw-t@~+2T>Yoy5T<|N1gJ8GB@txztY>H!b+Ea zyp6TfmE#CA9r(11?^%gNCUGW~W8X7dua$UN50^Z~${>#VGOkB*O(0?Q(oEu^S(R~i z9zlb5hy}j2L*?L0q9N1wI#8HOk&(<#EwNsqN?)a%;O4`<&!KAfbDmcuVunPgs(qB| zb?A$CxRT1RqH;TL8Ny}e2>}Hn1C{?CvNn8I`~(YFA5Od{5A!~W5wWh=(K=U*CT}rHnZR;r_ zKd%TCuBxjQ; z%D-tcB)1Bry#$2p)5oj~O=(z5NB-EpVoEa~R@I@56xTH(6ud_&6P6tT1_AN6s~KNT z0OydmtHbEnwL}5)MBPp&HX!&qnE0uqd>g<`CbkU!uJsxo(4&^{FwhX&O>6xOuYrh^ zQPaO1j|(c$qlpEN80Z|GuA%epY-j3z3@(t^f;n{d!H=|^#jou-a1LeCtw9)}>6jRl--gO*L^(JN5fkL^ zi|$pwSsOLM5-V52PLE?T8#ruH0LE_c%4iXo17V21kDsNY7o016K~ra3kUZt+me>!L#GwJDF>l4k-3LVuMIzlRFhC4tdDZ$H z`eo$$bi*AK>2$O!?&ABob8@T|2jtC8^~C4VVfFhRou5LP@0ReGhKTPjL z=hzQ+=>1@aI=e_vT<|+M0IpKDGk5V5bhN0jiYqN@_pGh7bch#q1npCFrPO{ZD`khQ zlpX3*UQmr)xHkO|gUKtuQJ=5>AD4^h&~8TC)~d&gOj8(}Jt~`vhp6C+w7zw9pZwc6?t^0ZT3d~3XGMvnT~O5ueOm%Ks;N=emV&lf|Dw6?9sBobMP zvhU+zel$|?aZ2~95b1_JM~qw4Wv?2$pBC~6vf3A>M2!>N!4HJ+=+H$cn9xPt0*h0b zYSB6&x!9$iI4p8h$EK7paazXomT%zWIN>VOWB_^C80D&4SH+9@z#NkE zAZr|x;6Gj4Rr%J#;b|6Zk5^5)5tBX79_76ZRx2S+Pg{d;ftxQD!bbi58JV^QzCf!W zk+!XU5@y@_%qGS*krn+436^}V+*EMYl~;=%2PiFRGEgd&MV$>(n}W_<{dvB_x{cVS zc}B)P_)sS6gu0H1FlE~om}rSrmy+&pDnQtgqPi@Affi{>>0k7~q~%eUiM}Z%H+*@bdg^{Yt>Fs2 zle$E1n$o{_7vIayW~SM`08*w^lK%-bjdd^mnl}X6Z8~?h1lq0TCp`W`$uM$^rcjG6 zFCW~jr|g8NmKekcz@6yU#~g6T$s@`YIU~cCBks={y5xeA@+8bOKhZ z%B%j2CIq&L&A-&zU1Du0wcaSPHbR4;2pr8}oz@cJ3emJ6tf6OtrMOo!E`^79on-) zLmGQkiamayJ$V!nPpuTVB|bm2_q2mcJ|DugE!kRv1_T2Ln5GHaTQj=|w=X-VOd?>L^Bm~gq2ec1~ zB^HNU6brk93^crOZ#QaHY~zL(6%iLY?2 zoB+2AnpM>;7n#sb^{0=a!cDr|>^9{#M$3(+95ebHMw)`4Py9h-IDtrf-6Snn>Hy#9 zC-}ySc~0sPtg3>RdX*1#3rhyHVc4L}u?xq+qH>2>-y#)w>po?mADn|7($LwiKMa}e zs^|J|!)CkYLu6c?TK$Xb6esub@d*hDof7n`=og8Jo#aXMc|w%(nP2GNlKt0!Zq4!{ zaemYxGh$Yw2SV#6a%$Al`iuIvjKOi*$PW#e<_IdWDqmEsO#j+5+QSiR` z_x}g*+B$*_O` z%Ch!A@l((&^sqpnQX`ktsFE4)h!5=Z#lMHmB<$Ib`)p^g1j!H1=SXBEV(P^C2Lq1}=5cr$F3u6MT;vpoQQ#X*Ty#5_mC9+VsS|}ZYJhQ` zzZ#${><}Dc#f&lcS|DhY<27$MrliJ)sZs~70oZI#yOj426J6o3G+U_~m*;BAR(PU~ zI@ps&(e$GQ^N%;RCf!>5%+M~C_qFB`gG;HJ1X46b1a1Bz#ueU8KT$QW5)fSX%ru;S z)E~Ar9dhP>;hZI(Q)sce{i+yFjGtv72B|u=?KuHzC8Ls6laZ33YnJ8tG#JP_HZ?Dt z6Ao^WU1*na4mXbBmD=qd0VD2W;qHgRj@N!Uc@a-QEf=Zi@FY(WZB zQ^EBhMZs0}q=9H3=L{IhsV6?1cwR+aJmbpV7Sb`35YCUoqH=UtdvHaY7^0gHpRQ

tttg2^duob`(@WasrhDr-2hn}u6w(|hDN%r1CU2jYH|o% z{n!6D5=puif&Nz)9ga9KcLy&9T6Md=W2R>Avo{T~Y7v)-EbpE{0>-cq>nQhbI&|!o z7Sz1uydz$f@W1Y0%e~C$W)|JFJ^Mx;v}e{1LD3r@9uLpMF;G_UM(J4kfq5tUmUG)8 z74lnrEi{FERXT#F&o4*lQU4}h0Ll!ro!H?~l&;k8DGk5tL?1&QkXEW07{^9qmoBcZ z{H5+nR*Rls>{4W?R9L%3n|P$5;4Er}uP{+UO?*%s0RJ&}ng~yX^?yp>syPnRLAV9q zJwQ{maeVMAnVtiLGOnR_Y?oRO%8g^#uCdXz?@KD^7Gaic7WXr3t?P*98vQfz2uD z8wCt_vGZ40N_ig95!{}Qo2C|r1a|Vw1QcajMWB5j!dAm^7(SyezypWP*Yb_w#-mLG zRcnEp+7G~GJle{|*4n-FA(;o_#V<6{_)>Gb;eDhtoc@of_+0i{5y{NLx&=+vF}p0P zW25wM4BR2&vq@3|@|_%0ZqY2^X4`Jf(Lx#H?8Q*+F2qB}0My1|3;yX!u}jA?Wb!EA zHeugHg}BeFlF+u;2rWFjIR@+V)&3HzrqueX#ClJ=gj6F&L3X7XRSxq~*5OoN526xG z$Pp#{CVfdd)7|QMF6H-D4?`E%b^mm0E54BQ+xScfxvjIrQ#FvXHlj&PgRItEma@BuV=4(ik>?t*Hoe zmq%qIn-WE}g~fHCX{5V&C|wCOjd1^VH%J(0I^VstQZDo?E;xqo(t5J(>Q$Fks}-;0 zQ#%3qFrxjbqwEIXYeN0SSOuED22}-phY%WYhCI9JQ4FY|Lg}v*P$$tz1oGH*C{l;J zgMXu1Bi~jpT?k8rEirln$twO$`c8MTaC^QPqNbh84DOadP+O*n405;HaY6JzhTR|m z|Cnvee6xN>{r;pMvj@`I1|3NmdOyr!D(D@q`pIy!kA0<6OZOxI<{x47G)eS#ZvoS& zOo3*b&&YcHj4|>-yQllPH^LKsxabx7?_T;O8$Xi2#LU@R@;8AW@~Nxetk-f)EFrZ# z^3V0cXd>>#Jph?gv^^uZ_!_nk#Fm%;p*Cc5Vm{(q!g1J>3OzpI?Pf^_DZB%hxcqMC zqfGh873z|s?)ao$D#2b#tTd9seeOyB785h+U4H_!5He)6)0cCh9L_PbKrT6Ee(V1* zI_}L*3nw@&d|YH&uzMCAUVI$W{=C#&oLf_zHpG6=X+!uiJ1bR)`Ve}PJ0l8{C(Ji> zU+{}@N-PM6yZCxpSFH#7OQ#zmO#wKkU7zhDWD+;lZbBwmjdD{hR|*3x2oo!Qtkvl6 zI@aIhE`FB!4q8nK_>@_V^(?4Hwat=Y!BCwdu#qki|G&A@S8}OKbPiaJiS^GMvYKH2 zz|F>jE^2RfwyXXxq^Rnh#l-_{db(z@0hrU%xz`=9r+CWI*=1w%qFoh>f;L_4AMNUC z(XNVw`(|WN4uqfPvPEbA-Kw+aNoOCSvp%Y+e=t1ZK%nV1_dOw5@_EVZ03En> zVh$y>cQc--ILiot8@=jJ4+&kvr3p!Ct){j|N-R}s{ZL}nX*#>lk!J08q*)DGnx(EQ z5~5nGz9b+)Y!$SD;O){PNF77TWv{TT3dhfORbO^y$|94Gxkzzz|j&G(mj(zlCp*P7RKXBa7@lowaxg^ftVg)(+ zm@|}i3y*o`^(;6moP~kkZS{^Nkw0OMKXMMpFxquvW0XJ z>6O)(&O&-kNM8R8=u)z(*@!`K&Ac?<&!MjEI-ewvk#~loTGgU2Mi`5rm7!jaB1~ zT!8Uq5k3WC{aP+N)35ews(%u~Nae#IQ&yc%aD!gH$m@gEF zq-Tk_cHbkx+O^rOoBX11OjYk2McUW0a(AiFo4Sm$slJT*pb++9FJ(#Rjx2TH8a^Ce_+R z0SDEUzHTtJPcQ3IkB3zP}!hObi}BIWz%m zbCkA!e4?e&Ha1&&y)4-;=dk7}gF^%u$tC_f9*K5VxY8!Peue5MvcSLdxgDrw zOA=n?_uMUsh0~9RQ7w}9Q-<3U?()4(hl$M=vQ`7hX(2S%o)s`kUbTF=P{9phPg%$+ zE48+ih}+hy`S|HSgQ0?N{qG6AZeaS~@Hpr_=xZ%IWlKb0M8RMLMlJ7kDi$q%SHFWYWd%b{qj! z0=4}M2I7)6cTQxkFEaPm$lM!9H0AR8b_rbSFFwN+(1j$kQ{STpkdB1>E8wT?s*1Wq ztV!L)Su6-KwZ6&D9L_*|H(-J0jZF*w(myh;6IzT*%Bpwnh>nXfy|>?Cw#(Gz!-S7b zEX(Mysg=J!E(o_YtZW9MZt9knP2Jwy)TcvDQv(Wa=wMXm9lxoec`Z;(H|1*CR6=u8 zi)bne;st%g^Y%-box&BiXXRFF3v%i$_Tof+s=_Nos}jjlB#DZIx7v_X@lAqcA9FNx zj(Pi5^mNS;2syOiX;91mCK&&Buq2z0lI2)jGs`1C0W`C%mAUA{SRdPHRb?&`SC=(} zeDI(4s6_MejfG41tsh8as#$}GOobqhbmD|uJqg~em+dKoz<9%Zmos-$76=rr67m9Rd{IF z-nFxda)f1cPM@v8**rtaD(Vou%(Bw-eoZW)#9$wu4B3>hHM~wrLIal}RP#=cJR{w} zp7%Vqh31H>8L^h4BvtDJQ(12<=_&c@^OCfQ1l085R4NW>Az0vI0%k=r-gKcFHN(C+z%ej1bnVdOv?U;}r~zx2w$b`rT#a{_cOrK9enF3uAXsz#SxdqfXr- zWcx`0itIIBU-j`|;UwCSt>={c{_i0oZF|+OFC2($H5U#<#td$zA9}j&;d+%gOzG)u z`MTY<{z{->KGYm)NJpDGhGA;Ex<+U|_0`(w>gtA9pe|XT2Dds4KU1$-Izz896Yop& ztbZ4Vb-_F^#$b@|Jq8q+Kb-Y=ZxmW)G(R1SLK<-l#z=K)II$1dqwYAw9#y4!J%{JV z%@wLI{NT;a4Zj<0c;5d>!&04k{;U=gAOga%St(e&LLcoJvm{1;GS5c7RuY^lzxZ@q z0nl`=sPs)+gO~HrWmkl>UMr+Umm#f_2|ds#YqwZCAw2vmJ|jAcJ>y8=yDsjf9%w*h z-~(%NXA}2S>UFt;HpqG?GubtOc$o{rx`9glm**~)!z2@(&P#qfmV-{E01}{gx(FjD z9ZF4{(oHC}u!}k!A+2ZIDcpJT>MqVFF#=37u;p~RDb=kC7X*BlbR7nW^&{;Q ziP(8!FcSR&&qMQyn&pkXEqKrX**)<;2Ihgy-tdeg=?3P(2Y|e-Nh!OT&PK>; z1gTh}4>#gyUk$Sl2M5$MKgM1z`+kJ531bBR;{W4gq-8 zToi58$m0&~V3(Byq7FrPaL!%{e%>RX_0C|%8N9c3bWCxMNR_*eW?Z%p`2T&J^tFn| z;E@CtHE-S*r_^=Q!L6Fq6SZ6v8?Ys|#F&X`e$s7_|CrZ-LM!{PtA$OR$ zRSWL_C{Gmg^eZ=<(o>pC!VhhWOHB^x^N~?@7wHI-E~4zWVSmhFS?gR`5&?oTrUe!e zFuRwnx2-5A)MwB~s2+yP$l-U|t3wu)j_nEJ^)`hydv7?YJp+G2d8Yo9V5GTpj1T(@ zrHyJrjm!~o&vG?H|5m9p`8BFD@|Dv)gGq2mM)RZII-P0PN+2UG=peVU{z3pCCXrf0 zdf~HC8EWwkAqufA;O!_SR`=|6kX;_tnE=<)2YX?P*~1FD*+)a`goxB1vzr;fFHWJ+ zkfs6bW~TG`@ksxpc6p~FXj^<6XV=cT&LWx1U0qjcMl(xx_P~R#qJsYU@hVq;XVA*| zc%pp#i6Cx*8Y9>5aQ(l6$CvLpTc^ADo>uU9Ckl@m)Ej2;%Ok^FnQr`as$w=r)px*Q z^i#4W33KYiJuO)UlNmkKndyzPzbPmiT+PQ;{}>bISvcG`Z_per2SW*KWh!+d>#7^i zqDGy9%ovG;;>_8yKa%s}KgcMT6!G`vKcj85rw%lGjoD}p#udF#iFR9**;7Y}`IC?e zuX?Nae@;rBpsI$IG!P){`55X`%lDc?q~Reu_XnAyvWpKMH0*q`$m2&(o2~yJ@y>SL z!2js|Lg%^Wzt=F9mi)Km`$^LNn|WozbQQcn()xWso!9|oKaP37=h1e2BK z`^5l`PdXB%_j8PVG#bm=zdWhg0vW?$b?R2+EK?_PoK|iw1BI(xIJ;J<>6=CVvdV5y zleiN5n8)ar?JtrQX07r4ysN`ug#tj*T4S=_nG{~7*7_2CJ}I?c$WJN>&J_f)))G5h zP9`vvYKDtj98pE?4(_U%@oji)jbd$@~#BgRvv zxie)v^M;2CcX-uvztuys=a13qJ6c4YNQm~@+O}z^ zBloEl^4uy8oLOF(IfglKRc4OUKk^6l-5~y^9I833T!>5oz7AS7Nj;A}Q<6z{?NPbseHHap4e8H_95GhqV{mAd2j(?jv zijbU19e>qztZ2WEvpT5bcB!L_uh!|u)!YWIPyE)-yrEKehuU0~0jX5}wbQxR-)|pC zy`|z#zCI3+I!os=eeG0mZwD1rAEknBKIQc6Rc`IfTidB%N(UAEK`Kb{iGWGKQ>-hP z(@q85I;dc}RM5q@+o>Q^S5VMS1+Tr=J`7Hf3cCA-K4c~+UMfhi=TE|1adAT^0o7xm zHlZ@}1_75IK>q|p?JWP)MZV@`lHF#RjPIZyp&w{imWk*i+ANjZ zaRKy8$jFo z|0%Dm9d^1s-&^qwQCdbHIxAiI#~ zOU{hA_fYq~Kw%R~m)%5|aA#t~P?_n~({v9)c~Q`OmokscsQV_^6-&NzL2&1tWKTX4 z*mUNQia`01KvVw(og=*mBDjgjs%UKy<@wYPDf{O14^?UG^z~ zibNt%9Ndg)dxG?Bb48Q*pac)nv=cGpn7A>9dGu_Mjd!!=Sqb|xfDDY32|cXOHTsw= z3ZkcZ77oiZwO|}EJlDylZfB&j%X@8WwZxCv`~7%V*i&3uqgJ1h4gGQlMKms$u=pi!#Wc#43F&IDuJ(U4{DKneFJ3YTz3OcvF}8Ufxez32CUHj9 zwb#KN6I^lwGL)HIdyrOiSLD?M?{k)yG zI)*aII2TG7z%{ipfUDX&01#LkAc`o` zHh9(7SSo1yjDjQq@*{Ku00U}Qopz(KR+WJbCDOayflr#EF=5<6KaUP=Y5*k1#u73( zVXYF(W5do!lsYC-z`>`nT!uZX)Lf8&WMIw#quHT%LtQ^+3L{?ift+gkN!_Uc%kIVr(=IDw2tJJKog$dI+ z&V>&P-oaa8#e#wraAPv7AVnx|1>Dg}sZ}j{D>lVnok*+a>+Y|vlX#L^-#V_D*%cni z;ah5F5OZJ$?rCDOCVp9He9cwjj1{k8T*V*5+eq_H4EF1qwY zlqAqHW6ZDbqZo9gRAZ16q*ssUt}w9@2*hL+;}?!aCSjswARBNIM`ni)DY6IAfUsJZ z$!e{%gjaHfW@$LIY1h)t(Zdu;+HgOzsxh{=&o| z7uXLa0hA#RCGxl8X#AnQ72n4*;^E7J2k#)fa$-H1HGUSU@2+EBG^tC^BvZA&i2;@3zHjU# z)2*_YQ--xW-P+N7SCVcONAFB{otEL3O@1@6WNb!R+rnN0->78!fDXq@evf@%wv#96 zC9KoKIx!xHTw^1JCQ2>;22g9Wder5qzQe2&b66Yjw&RiE1R*^p%$9Z|C9zvAZ9qR_ ziQVL0^*t3qs?NR;c2YoXpJ0LzYbOO$3j5Y4wH1K#NtyGB?zSnd8v9(~qG!{_SVKvn zYjU@d&QKz2rikDriLnr=1rxV4<$H^@rBJMo1}?Tv4+UDfy|H1d(dcPLd{C$Tk_%IV z$ecw8W8kFT>v08&E&~(!AN;cWUBiSLG8baiIDY1)VxR z?kUR3eZ<#$GxDs1H0r7KM`d%0`UyRPExbff92_-CguW1ck|f}A?c-Y)gS(}3w@R3^KKFh+FNz#<=ff-prq-8DnvwbpcK8Fnz! zTkh|}?)^myHl32d;xDO_MKbU}Io9jxn2OnA-_n)ibtikFgj87|CXfs#M-?9-QzTVO zG@2v%aX9sFdg3&UR(7dv`ICu8KcZX*qEB=+Uul&j{a>c#MBF*2eOUY{NOQfcc{dsa&O zCeqeQ#03~4`)06WWqTAhVd*^Cb&oLy0biCIg?G%VLQ1JwzrdZe9O8@hT+#Of9aH29 zJQW@Gwq)3oyp?sbGtj-C((}p*(({6A?ToYvg-omF=4aATOg);#dhX&kGR(HU{qYM-?@~X=TqMjjO%6vN#b}!~L^I^Iz;gw&@k> zRlB1XU-%req%t+GyRj&^;Syw~+Nvcs?oBdAblg#e?~=nVZHe;_o}ttGF-kiuhUu52`k$E>v^ZKUIF_yunr$I!G$wK`tjz(BsN!TT8C1}>tkmn@y zFCbh?)1w%oIb*~0NQMWuAhlq>{+ct&FU^Ha>DAqs((S73eNkx23=r0EQ-w-oEtO$* zBhkoWqrFjRdn@6syLh^MV6BcT$ahRwehry!X_#~S>~_&EHbE^7bEK@gNVElda+sKm z=AN$WDm=S%@ZhG54x5YIe%$6-8RzKccFt_k+#6L6n_8x_S~NExW((AIbjyz4Tq^?| z-Q3kJo4c;Lxp$NF=%N-YbG405ouJnpIE^lIR*`Qzb~2~||BnoG-bBlAEYWIZptH;| z(2<7KV^_osbWZJ1vDATm&OP1G3xRN7cQLE!q;W0mbFhA4VpEOX8_Lt1z;~Rg#aZ&; z_(X_}*6NHOgUZVtEEk|;Bng>b$E8>8xlo$|U_l7+18-IOxww~9sp9{B9}(ri{Zc^N z-q`+?2gy`YFvX#bSFkL!g}`gKb_|FZ;g+w}xpY4|NxDus{%hCOwnjaEo4u)(QP10V zo1L6YHX?7{;F}q3fAUXhU%poV!WocZU!M1*e4CvUTSDNteu%SbW$VXd%2d8`k`2GWOSjXG9-7dO2sVA=52Y^S5Oe)%{`}kGbg$O~Gp`>hmxa2T?78I7aMkc|hwTha} z?y}mp%J8L{0UtGbnmB$xzo`ocYHOue^;jzckR2J*I zA6}9%jF{WI7xqR4$5m*#eh|?&^^)gln;OHisWk1`GnZ4rNZYgGe^S9A!F%mY?;PKn zUFxm!bZbNOyaq0s7*D=C4JIZ@{+_`8YmEKc0RkeC_Cz)PRm`Pz*00wqx?q0gwVNvH zdV~s_#K^Q$AkrCW;FW376G!>SE!AhnSt`9|tJNJgMdHu6#3~(iI0Xql=HzH*TYcs} z$>^mD`pUV)+Tt6b7d-l`Sw46Pt6c8u&*H;FLd6mgQ4r}8`*@~rjaMD5aJIBHYJR-L(d-^)&yPA295<}; zXtJZBM(n^vq=hx)P;IZ(`=zM8R#!*dTYn;C>h8Un(CC_B#$3y4+-lX36f4f(!}c_& zYcZfgu~vUkAd=u8BffPz)j#{OgmsXsw6>ms%?ixKin@MFJ|=f(grLAU{YY|y%ZCya z*nUB*91#OcoaaQ&HNvwLHrg{A?8T%^!KmT{9`LB28epGbsN8Ko!5+bKolWwM*86R2B=`&HE9GHCA=5i^ij$UStsnwDh z-~c!Bdxy)Jd8_eYMzXtLk)1V=Am+Z2rY!`(*#Ax*Rq=I_H}H9!dhyrCZJAK^NJv|> zPuo%x@p`3k@ugg&7C22GjWj`#_iMbf8f}ka)ek+CktWu93;X$!5xV)-e~#Fv=(}j{ zSzL=`HayDCkc`IVNdC53`(UWu#cwm6$KT&-o&C*NhPaYrmJk;TCU|O{K*Aktj~-q8 z;|58MfMWbW6_MAhJ)CCGJ$|c#5*#6=n+LHQDoEstqthPsQKbY>Dwyg_?&#>`=HAdA zh($I|aJ3gqbS0&1f3WX7 z(-Jg5EGv9zhY=)45vD>m{I@UN8>zp`H@ww%8PV?&1hMpY|CH~pplAXPfNNtUvE-AM zB+-z!bEBiXLzG1#!^I=QAy#chC7%kKeDs4EkdZ4PNg*hGLyk)F$!VCM9=0*hrd9%}mCBRXLo8XoOBy4{}W z@(p6=LlWV@V;0&c4Qv3hW3qwm6;4;|nT?PE&5*c@#Wkd;P!eQI)=6Pay7;HCgvBLw zKJ}8OtQw+K_US0sPb8~7)dw)FLbJ#m*l6D~26_~}PXyTM#(&GHwJ2Qi#_9xV4w=A;0T+X8&9Z6C*5?OI^Clu%id%q;Buz6s|a z=?b+zdKT$U#3`f(`;%CM&8%fqJ`~tLXNHk*HQ8Nk*T630;tEc;voiusC%czkhKw91 z-Fp{nC*5LxUScX;1i$#eo;qv&O*h_n87<3Nm(unFr4cX0w0 zIN2(&_Mj+WOR^WwvUd%cbcHT|s7{yEMaEkD=k@W;O@gkaJ+qRW+V8E5iy&pv$!8YL zLL^4vNmmRxY)XF9x@0@y4NS>NSJ;KM350L2vAbw3XSQfLKPc#eP*pDN>;agi$f;-? zcOywevd@V(ZIhhiS8+-03$wHn`M7bgnZnk$U^BIsc;=`UdwcLsBDagqZuxRFE{oI)@W`dGU7KMwF4uQ-*kU6Fo4!YT>EVsi!{v3nUKk z9-yrvACs=O0fXE$UmRLq-|#+kf6I*M_C&8Dv~x*QK|c*trkmG4U)Tnl>7bHY3#-cfTIx z^Q}jD>E_rdm)X{ec1HPBY?Mp&C2d8osqh#T5)jH8D> zx^^BUlqS%0r#pBNJ)-!){^Q`(hs(`Q^_OM%R6rwBOo);DM^lsNBU&e!)-@$KHD$Vk z-%_Q0<*_tQf9C|s80W~5VyB;W0oDxNEpbuaF}Pf+mna~OUUgCKBrGJG;$JKv`1lJ2 zVplqG+ccu1dSEVy?)?Kg9m!xIY43Kb+2i4eQC93!zvfEUu^<1PDcKS*`?|Hx*{nvr z+X$OXPBstrU0BuVxF%G#hRQVG7N4Ks@MC?cCrs|A$0^Z{cG8izwAGhjW4(ye(hM66 zFN&sK(t*)>ab7Zdwe=}~5elt86w*6JkSwf49ife4i2~Cw^+jwx0xR9j;Fjd{z$z}> zK}p-9vmqjVI~EOPT?f8su-$6H=b7*p?qFxW4-~F;wf`+2{(YGwS8^Bo1ShIgw?`y8 zu%dQ3;k|*LcLEEzw1-$tmhgOLEeR`hq?qB4a@vgAD}2h0y-{ozWHb+pREJYo!bh9} z>~Du08d8zou;An&k{wYc?97jwhN^mxy1fv#%Tt^FeL>Hh+-d3^8!>`D71()u5_Z~! zt6x5cG2?PRWV`s(dW!7D<50lbI>s#4-Rt*iOJhzD#l#~MF%kK{(4SzviA)CTh*Im` z5^F`N6)v$J!n#HrA(z`$5r_Ddguhl7qh+u)wE0}(g}g=l zt7nKKH*)f%UmU=v!&-(tgjW<7eI(<3;6F`Tb(-o%W-^sePd@;jTcFoxx*-eedHF9u6B>X>dV ze8xfbWorKcP+imG`t0LiK^INp`Y%P^s`HohmJa^G>ENq$uh5EP5%9BU|KruS}1`7{asDeWD<%~3HsheM9tN4 zlAe`QnUe*uf&33>AZ)9_#PW7Or-OO(<3#h$@4{)Ds7=_XNK9`jtDZzuFUrb2OTJ*W zyOuz|O%}p(uezUivTROnXo{G4K1ABdgHkqVW28C9ZA?sh@}wCF1f;6J5rSrd`Z9{x z9@(D$x5ANZLN5&Kd;+(mw>iIS@! zP#0ftN}w(dX&HYK$8|2~j=lLZRd&t*A|xZxlvwxn2#HM!Yr2Jz`xY%nbe8-;RCFeo zzAyz(?uxH_1U^sbekk2qHSfgyL^*w~hN7-eeHKAcA#TG1*2+ZY4dM@q-ixE58EAT5 zi97f+Ss66^(QF#lz6?+^ln)Vq@mA{~tE5OZp4wSvM-6>YRAr8scge4#V&0bc64*bH z_$h|xdruz>Ngu@H*tO$tLBs->?*eY~r6(DILXVe|~ zh%`y*hvJgmp3qM3sf7O;?XyqpK8NmgrI5F&y3e>D8_4Xhvlk9n8#|YQN_~4s{aUJ$- zQ0wYNFaW*V@$3ZGnrMP?jG!kar$mFeY?8QLF@E|0S)+5qcaI_EcY1cxyj~h9vk3%- ze8dkiA!cw36!zZHGVcd{GZJZ@8fekWU*1oY;18kiRF6A!%6U7c% zjXJJWgT$3;Q1iae(s|9>Fss^J%dow8&>yi0t~br!MO^{P*LPCGkZIDDv0aFS*XFeR zmY^i3&5R?up{@a|A+b*OkV94@ClbKYP|!_X_CuDd?kaAvhAW~6bHWQ}8mI473a z($E(gJ}F|ac6j8$k;p(&?A+8LZ?KsJHYHSi8J|8i)t&uLXl4Uy8XxwNcAQP%o1I=@ zpc>YF9olx z6^Ue}u!1wSIrWkByaxZDF&n~oD3qPb79PqT+OgiDvz?dX@cq;Lr-98UZ_OS~u$a)* zqwMT4Iic)v>U(UT>Iwd`i#IOy`de`vdkQYsgFwF3Jc8t7M=*HoDIIn{xmEWqf|{X7 zCT!+TdsgBM_0C!#LynQA^qwujvLwB!V9?n9h)&ysiPYG|0f;kODMnv4N#Z{x3Ae6t zI|hamAXn1TFZ?CvRWUT3GKw6+zCVb#Q=+zh?a@mSD@+Vf$qK7;&(`IW(u>5i``G54 zWV2F0Rg99gwnI%O971d>Ce+|gb<+wHfM_){OA|EYTP972bCw-#Vm%hax{2~qS?(2j zxo-&NZ6Wu7e60=;RKRZQeRfxHf|fJ%MNlb>oA}3Se}`JH8vawNmICTQs&3uo8?re1 zvxoV+(*Mdua>GTx`A9V)1w)v?c1m~gV0gV&bs?Z~2k&Cz z%6F;4rSVX2f?h)N2t5TO1yfaW&L@%lb2yl&mwRgCgA2;^p*#2?;Tw7UMcVs+6ZXR5!+3}&R-^M|saHJ|pJw69(rMl7f)Lvtd-)%%gp=}7^H2*&fU zR$!#ab+3OJNkS)SljHErebXh4dZKSRa75=gT+$w?BckzXfQ$p}IU^wCaXuF(OYW}Y z4&IWGUML{!l*sf%4#9bkJ12wn>dntu&7qptL&I{&emORx9PO~lP>UviIFCliT-`bH zOabGf*?M^*W%rxz(x_S;Yc#KQqcYC#&>C^4pSrN z?VV}{_x9ZrK|qAwV*1h`*4XOE5DE3wq(+%hY%G$qw0|-}zxLVxS>2L7Y*I$D(f$$!eUCigux%-)FSu&`D zC!_p86~itj1eByG5Kxk$KtOBYp+xLth^Q1%$&~l%m3GEsF)aS$Cyas(09?q1g=NtPAV*Q0!&pXh8f!EBKS?}0aL(|t6F&ux}` znB>^Q2bR4+%BY#=$X>HvefY7g0q5|V=S zy%cTX4A}oNUgGbA@KfwA64DlitqG1rZ}pc8vqC23#8NHm2UiB1@C7+dcB-_0elGG8 zHVCgu<{6Aky47$sX3b)gym^K?^eJ-4UD!K6{RJ0IByj7;0bKi+%)qzAocZOLl_K+f z$p2;3o_X_?SFefFl|;EP&3_G${t|Gv^}$drD`D0|aN7Qf(vAvGd-#80FH8k7d}ER| z{F!?%R%I$;iD5~DJVlKzDnF|h=3C-(^7Di2`x2rvCseo}ZyL3Gs7ykwnpMjrIQDaUwGuD<#wn^;R+27E3_9PC3=xq&up77q;%`HxmUO`{XH%J89E7 z*Z_!z5^E1X2Lv7;BJc+uK&nQS4}tn&w9R%`t)AsZe$zi{rqY``5|W!fg*{>hKnCj^ zQFK_z>VC|FvMWTo)7{=u_ z`FabOf4Y`7S5t*=oGI^B#ZBxMG+b3T!IT@x$1H>_r=g2lH}rO<&>V!SE#YCHAwr-U zAOhf|P)^;~kbTrCEmbZM8m z>1+eoRC`z5Uu6^FxQUcW2deCTrfgV^Vw8|^hlx!Iw0frqv->z`%yYT&Slqm50-8n5@b*lzKsxNR}^w3|{6FIlm3~X1I@R~EYY^%lNU_ixa zsCcBlz?)?|jG!o6i#b@jW~dR@XjdQ1EJGjJmQ zhK_Jg#-jBW(aCTJw?WR?4Ai-anw1&6P20i-pLHIm$>TZyON|e9iKiCaY7>}M++p{p zd-k}48dc}Zy!(g_B@iGsx)uT6CVCHC#yn49Nvk(E(#Cx#3vV6U8wZdzSS6qcm0~Jm zumM#S-u*2>B{TH%0?C1V)lGnGzS(T|u-W#N`0G^wO05p+BT7)R2k1?AkAELDu=L)H z0Ze#_=O|aFb5&ZLafW_?)8Y@uh;TGs%ulhm2R>gM_cS|vK>d#nA2@(JPu%}%0&^Ji!%2hm<@>`1ke@o~UfT$FPh)INlDLr3vAc%igJ>+m8 z<*Ik%Df1Uf68kqng{95N&5jter;(nRb5Ox}Ct$fyfMx4np)MC{ef{9(^BIpzFVGnCP0M zkCeN!@pxTKt zt;uvsbcBtA9Gk6O>hM6*&m{x`XaNsgt`?IQ!klu0bH9fSi!sn1?8D~4GvgqZc-YJt!Gp$Y*}NLz~+~kv3Y}iQvHQB}VMe?SE0R6qd%o?a}j}bo~5M6zV zl0s+SGbD)o1(2XO91^snnFL8$wed{B^L>KnkB!iH{uKF(A9V2iDK+ffRxpijNbC@d zaR6pe4tRUX7=guTfyMdKD-DRq8Zl7i)3^1fX@KK_@>Y^My`TA78OuA7e>T`tQY3^i zfoICa@8CpsC6hN<=Qp2!+XMtBlHWXpKf3OQ|7_AkXa>n${F$8Ew<}NVt8bS&UlBV& z-Wff)llwy~U-yjyUJqkX5+pI zUCfI&NZGt#0(t>D6ib_=B{ZF}9;cWRi^q8t+*rB>4#zSNtWTMId@ zoj_}L-Uho6k%8p2n4uP#myU3VyD0%@ z_|EBBiT*B2u1~>0Qs~WuYhq)mk+DQkL4tpaVpC7OMg}Hc#*Q-?{Zj|9o?7q$$ow zSNLKhEsQ^Aq*3MA4VOmIDSGylUrk>`e=JnxB5{qyauwXph>jFJ+4odu(px z_og>ksWgflMrWasJVM9=%15`~N^`2~W_|TQs)%i_NeGN%3iy`LcHnLDFQJq^@{`Sk z6T1LDWCU|k?8O|nnov|b0RcL8+t6k<+dET`h8CsZ{*=qnwvp4m>hz_E-`v6Pgs{uu z8Q>!KX=7j(llz!2$OYX@)ypaQQ+j|f(j3a&!7xQoGDS#uJl21_<~Z(jRlROK46RX+ z>4C_I)%-*3DOKvoEj;z3b}X2S?8#n~ihhIokf(7rpK89Dbeoi{HlJN8g-4qg=js>A zyf{x|qkJ`TQWD0Nr^Cg_sq@9ZalE1j2;-6vQ8lQ)%LDX=PP!p?P|T@(zj7$37=qP+ zt6p_Noo2)I2{(9}IpH>O+P%ZMZshtlu4Oksm^I;A_=#L~%Y6CRseE)ks&XpWWD&;Ac ztF%gMiOJamC8!3Bm-5>872hL4qrXSc#7LxrBrQ+A{nRK}kpDZ^jclbkTsvSHat&a~ zsoMvU7RC!eox&3;HBJFZny10e-uESK`0DwSo1+$Nh-h?vSxCFpIMQmuC8wM38{XFC z@{Fb5piTh)IDmBXeJzhOc-+n^HS`dRLl&pW^#QaJLfKa!Ro^8d#N&rUFsZKCU8;9E zd$RqO?8!PLf;$)z>b6TQCB9Xld;oK>ap44kX@L%u&;{3$tF^qO!Pl!hl#i2H;Snv# zJ6|hH9D-M>>0N0Xa#tv}Gg3??og&aoW&&X5yWi{J*B({0qXnuYo0K9$pPkrDtS~NO z{Mc*;_75f1HskmA6cudT2!|;pC6p6D!R~)>a~!#6KRx=!_gocpWmwB*9F5eUe6S0$ zl2S9!uX(~K|LFckkZzGZ2Z;|1AM%|2fG01>w^!u5!y&xd*m|nyM~*9)LlTuIk|-&s z2BgV2Syo;(llmAha;DR4XS~&F+4iPLU6tv{mbYn8<}TIeLEvl*K5F(l<{Jk$yW2N} zAi7ukFBk>w20kU8Og%M|73l*r6mfo0$lpX)(%w+8juRQ<3=yjNWhhck%{)0alv3(5 zL-CfzhVm+*2<*K!qDY{JO!Vz9X_W2ik76D=T({V(qZV-tlos<5Z8^}BQtFeF=wVN7 z#d>nA$qz%ZCa2S6l&~}l*!23yAU{u3o-4t`_UD4Ry_`J61zpwBX-s=V{iz4z;tEbw zb#hmwe%}M1V)mJa`c6b6$Gh+DB)gIXI$xLsI+viEZEe;oLR9y2T>`2fQnv-i_$0_{ zoDzXapt4qcHM70(I1*-$6HzrG!enQQ-n;;xC<+%b>PIQ|#c)p5dHZDpya)7X>npHN zd<8IDYu8s`UkhJ>tNrm*iw%dVcA2jB2uOBZUjd8&w68#VWhO^9tO+xrM|3tbQTXbE zT&7!%COJ4_J|TjhWG~yCs#Q#SVUq77gK6S64#J;`>O_mwIu;fcim*sZsjpJ`*aLe5 zik@Dl5e>o37fYR4FIT@J3V}TZMhl_k9BFTAGm_ERKZmv37$_!^DM7I<_T9G1pO@?xztH9*wmp;dgri`IQ6qUHBSPVova3w$h0p|KB;8nolKxN!g;hbM0Cl?Lv+>Zo{b>0n4+&LH71XZeV|B{V6~-d^eQ9=gq?-rqBWEd)8W z9J6&`rciL1d^KER^!Amfj_FeWiCkwTkIhQLx=8$JTKM9;CEhZemNFW{I+B!~L0G4d z4hR)C36<3|J>VcVmQnTbLQxsx?#F#tTR$Mfv)>N|m&@;^iA8txaJhpES(szTr_AqU zPfn^&wBNJ4%JYK#>F>LXujE~NW{Uf_(`EI-msFW9sNUT;_2}aXyJc!y+e0lP(tV}d zgIw2$Z(asjR#JW4*$)k^pY$%YUVo^^r#5%hJMZ!8f@RK{Sn*Adz!wRj;A+Moj>-Le zRVV~}Rq+qS`BrSEPR%6S<~@@4NW8zxD*)Y9-zmM)J++B4?&1IlX6uaI_C~=bjY{l$ zEMXmo%d4(HC1RVHT%P2Rj!9LjgHM&{xKX9S3W}8kUl&N~7*-~nm>458=Nl(^a5*1< zr5ktiTd9Lu3D&C5_9N1(3M@)ZnHO)vL#0d$hqv&F+Tf<$uwZjISj1ni`mTV3r+#U~ zM}N{^$P{8}s=ugd^Ti^*aH{LOMNX~z)SyR*TWV$m0#Yrz6o)FERh#qt&t&Bb z&P>rPZRzV|fw+U;U^izLrkZ%$Q7(0%$%plc$wUq~hmsO-D{6PG>BXYf^g@)ILM%{< z9SA+VfvRVO)(Lbug(~}kUO2B#w42<|VOHBOa5%wzPcJa2sF3*I#Yd=#@Ml5!B~b?o z=}{p)hwKKv^TnFdpJu=l)}!{SAt*&`eGRW(s!^fDYA6kEq`eYinrj?lOAhO5ptu}& z8ZoVGlG@Y{OB_nC)VxhiL@6LS1D%QH?wEwGP+%O=LD9oHO}xn_9X6KJI)?&Uf=YcW zpH^B$=BHSGh=&pKmk?V*-<)9GTWPJ5%Svmt`6)9$PvH@T-SirldP()ikSd%#0ROjt z%Bev|^cShkwM+WDOc&HW9+B6%i>C=$$P)8@cQH<=ND6AhVF7r)%eQg|vI}}Hx8iN5 z4%Cg89cPDE9r|lEq964=^Nc0~+6WI$fbOD*Y)0ZluD;}q# zd_u-Zt_#j7Pxsgx;kfZ`KSxZX6lTQW%@NvE)BgJ*xW7aFeC3<`u2rYYuLhyI=jOu^ zW2LGkd+&`gNR=vcUwnWGfO~$-HvuDT0_O?4<6im!Pv!0BVp+0F74sHEm~4m>6%FHINT(~w-3^o86E8X|BMZG^?}%6?^t05J6HeiQ#bR=^w_TGh|7vzqT_J- z4BY*|W^Z6~f*Oe8CqI6MmTIi%%Km3CJ4d~AYK%6dY>Z*)`MNochrjuCD?EICR1^*M^cvN2e=zYwdVu#vq$%Bqi(q}%HSD;OI2&+d%v4LKW{TGFeZ$NC5*>UNW6oO)=V z{MU!{68Qz(qe15#bT}9JhQt_6^hOp;RCk(d4uBQg45KQ_q_KBTMDUbA(4FXR7v1HA zf${n-Hd~+W*9+)T>hf5^x#}FJvJBK%NK4$oTpmj+y`2{|hB@+GLV5U{;W$2p!cwI@ z3CX<*X?{b{_XbhUG~{;`MNSRM1ml*ulPhQA%&DuVSU9+nzm=MymcyFEq=$tiF+6%$ zv+csM%QH;^D>cK**PH`Z@K9g5h9A7m1>Y{cz3EmBA7JwO3kD`H^Npz~H>5com1({) z96$N~Fi2(x3_iez`EfK84hsWiZ^^B6tuZyLlvuS3bhQPyNMqmKVjBC&pqY&NCkmR4 zXdet{p5-bE8ui>AF;p4yViVCyb^L^|oLSQK5v8R!xx_AYlu5PcMUmb191)??$k(q_ z+hY%-`iP;zPuUeYC`pds$ZJoU7|Lr>ORjCXLEbY^_W$k5ej!UAe|mwY zbCT>u$?1pO#p8u*=w};g_NPZedCC5hTV-^7(|O1FM|7&B7!Ihufu^ntED;#B`E-f| zP17HZ`&q$2IqbLkz#IqkM}dzQ7ajh&KMDI2?Wmy-)%CD4tPK`TZ+)Nc(!r35%hzu} zEnLuP{Y(7VVm);PF)ZS3j1o9_uSFeXv~*{8Vj>WB|9d^tB+}>V{7j^=UiCYzF{)M% z@ggd?*_4XJAWgg-7Hd%Gh`jym9-`<82q@CpfZ`439Yb_HrGJJ{C3C1fr4J5M1LNvX z3^YyfCypquC-B5s{=o zI(wmmi`D9p=K%>bk6`RXVc$fLLxoL!bcFz|Wt|c*OUuRRfg=}_LTX!rf$wxGYXQcn z)BuRK)aV#_82FkjE;I&sVvVemJGp}&2$E(`Y{A#PCQs(K&K+%HYqgesy#baLUEEiK zAFC(&H?Si4Dn||V>D7EN1Nq36;*SHCw@gFbp|z+ap*EgqX>BDVQ8mxOtl{zDtXlt* z*fx113n!{qZi>>WPOlm|)ya$}y}>^h^FDigAA2rx{~CMz0KCxA#c2j}#o8>g`3ea~ zXHhQV*@L@8YftTQo!9$FVv>y zdfe1gfEATnYU~MyY*(M@NPA2C$%m+u%Z0DK?xLLzz9XW@n_b zc26MmGe!-0O$B#44VQl?CR>*YEHYArM4AWb@?g^7W|!7Z1ZAy{w@-jBw0t;T9^yT} zXFBnbU)RR}r(+8XTxY1P#LdQ|V1E&pO7brNHzM35IxHo7Tp6Jfr7CJ?nVY`FR$c|}AJHZcSPskI{ zeK*;791Rgz`|(FX05?sdn(wR>^G%MV`1w2@9Kp$q1N-Art}u!4<^>n=$8Uo4Rr|&W zITIHv8>Ix|*p`NSMmQ>>QNM^r<h?bhE!acn?vqkHWH3NsT32lua;I@B*fTC5X zjxHFlI?FT?wbjE%Knw)iv?I$)-7BS;A&m2TM@b^v$!F*rjujfWsXz*-DN?~MR^xTQ zX|)=E4AEo*O>{5)Sa7XyKajgc! zccgEce^TJP|Btsffsd-X+s7vhFhF1;Mp=c(q9|AqP=i4Ugb5KE7(fzU713&Sj2p`g zU~4cqGc}XTv}mDXi!CZvw6w+rjfyq_OoG8ADAgcngQA`oYEz{UB{09|`JQ_xlMU$m z_W!S+k~?=f_uR95m*=}BFFPwV%dTE~lL4`#gVV+=ylF=$o-!wPL3prV1T;fHpyoF-aEO-G=Nb8i|@k*NUDGprN=Q&wn3qPpnG!!X`@U}6gB@C&OT(=rkdIax?m;X8v%#hfmk^sKc>U&RVl43&#x<}bwU+Lp zM4D-uaD6~ZmdK_Tm`#sh2enkh2%RSHYepVoP?PX&@TO!Sc${NuDIusLesQJRbf@mq zll%#VEX$rF;zpuN?K*KXeAJl;?c}e#=(Hn?TR%ubt4h}+xKMq3{1ceNPzG)^Qq^4t zOLMLbmNOUc14@&PU`O@UeXy0_CDkB?+8b~O?j70oUc7O%N;U6&y5-(+C4BhNmJ?_@ zyu2Up{s+ES`vP8(l5Y227IG$*JAs;FezSAHi^EIf!{gM$edxFdZ$wXbi~sJx%Mm{C zM{8MG7D1WssZqugCyEnlvkhtqWwAf76M zL1-Gnvx{ywbMkl@o_{WM)4_$v_@Y+q)BKg;o=NWdF_sCSq8I!bBs3$#4$s?BT~{4s z;z?A9foPk$Z)va8(xpQ~@l?8P4LwtLEIlU_{{(;JBJ)j#c#UaQA z2=GTfS`*Bw@zuedZLhBc30JYG;n)aiBx|P&2?0xxy$&^w&=bVh3Ri08^oLlZD(-{a_|nf}!81R<0(%m{*0{q7 zMrZa6Dni8^b&V5hRW_r;sTjupmR^UugBiHFhRECAQAmH*6bt-~3Psk=x#~BLfsoOY z45{fd>RX)4!ILNqW9*z8ObjlHSHp)+z|yV3SGMsyL@f$uwa!V>XSmkp21QXASr2!& ztOv}0l2OI13+j;{11ihHN?6a8z!YVJkQ@eibC9+k;O`bD()f$b_kGvpJ;TF8Q+MBo z-&+U-uDDV{Uhc)=J#q;9>Lsw5x|_a3gj&%CE2x}$S;ka2DJ`<1iaPaZ(vd|&t`%pP zb5NI-oY5}da!IIjeue;_|dG!&e7C^WAb z(QLsiMzV3KAcq0}AdekW=YXmpArw|V>KPP6Y!cMMb2;E?O2vx+mk|!jI^0Pb<5{kT zX=Tno$J8H#;KHOU8&aHG9BWH_C9#li;Q(qjbYbTWWtF66As_N==CuHoYBtIjj(hJW zl`~YPZijn%e~hDh4?JFP?)&=~)vI_&%$oP!z0YR-e^2FoHu*o!U5Y8e{K7t32pXJ~ zP%tIN*j^SJTRue$*yZ$*$EQ!ndlG}w?ZN2@3wH2+2Sj#cqx9TwcIn9uH;5#totDlxZbI6#lO^6V#LCX5J zO(=|b14%WT7GJ9RAFY8)Lz4TWQ5Nyo_`PXAL`qwjmqvocs_OKUD6Tvehp4`+&yCx! z`d^1>70d&6qj<)3L%RTFcPYp7NDIK9ujGP?z{BvSzopTvQ2vhe?hN`hcsOb$Ao~Q$ zQ28pLxHh6WNh1ub_$)N0ourx!8+(b%YIh%Ox*4NE%?q4IR+X+DM;x;_*WpsJ`(P4u z7KcJEsxt`P4|)&j;=IAFKjzmhE=SBO$ixwCl3^ZB{^vp#C_7UWl|BUb0BB<)jY=fS zqhswK@YG$fG>VP31dBf^Ka7}Ovzk}UaIsL}su_tkO45^uA59x%_ngi5G|gogi(T!z zGntATu!M0X`On;ouAo4S3pv`EZoVLJAO6)@lynv|GpCO;A9-<50j6B?D#3VSLz*A8 zz>fhA@xfIG>j1>{tO!Xn_>9|wavqWh>zXtYz6g7fq!AECx4+;ioR{wnruPe_kHmCg z3K62_Y$hKK>`Mn99S-Wi9I}<@pNhR278>x~=L_hrW>??tz@$P)UOXRiOb3fihfs7a zRc8Un^v|RKqH~EGX)aW&#PS;veIh~D<8_0q_2@oi*|RIvmD4cEmC*iF7J?M8wv*b@ zM;ZO}Ra)*dFvNq<)YHDQBs}M>z#TDMBS;I}tok6-1ok>yzXop|pMfDj zJiNWKcV8L zkHmt_4oRg+_3_mpSCvRF9b8a?v{-aqFnJl6@@^ZH?JAr4H|86?x)Y!IwH*Fmm)NGs zvcy0&=VNnnl}-7%tg;(mtSoR=!Jia)esb~l8Z48&NE9EV)~uCpOEfz^d*;b-eK&lP zFK?&K5!l7W=7s94Moz^kml*p6M+DWry&pUo&j`ZPN69Fz1o{B$1ntxQ6Pf5{GK zAcKKj62#k;4IRN^M8J5E^iR`9hyMibBYmtA`gmBqep|9l4*}|a{upqwe?JnJdQe*H z5Lc+Ws08g|i2;M1r;xU%XRZxdnJZMx-@CHRf!g<@DR^EO*u8jq;Z4R4Gc{0tUJVva z9{UC0;ouYuBgE7u^%0M}+uXlGZWShvBO0*=@qVzD7^v`=wE@yxp>utKb5o)7@dD>F zC{q=5ZX8!K!C8SQv~?w@;{mvK3m;c^ee(${3UJ8Xpl;?N4C_3;4#)g^;7QudZp2Wj z#XrXUN-8k@`xgElhAa5E`t$LZTwnP80rWVU-#04n+Zf6get)PFet(EWfc(C%$?t#l zBWt&&#F}xMxiRGT!`Y+1r;^{N;ZXQJ&w<}xgnqT<_jSVWhdc#-&y@wkn|f#-7j~1s z1Q3MDy$@U58}xDRd(qq*@8mPRdvf6GH1|GLNQO}cf*KucuGG-y8Hxu23(?@i_YZ2p zqZrDcmIAO^T!C*wpiyP4$?> zltn6(nXD!O`s|cR!2+J>f8P;Y%E!R1CtFPFCpd9*GI`Q`Ub1-7#G~8eJ%Gc9mpQ{R zt5yhWB3laE)P*p~5y1J5{0HtEU%`(@Gb!fM{{&|tf~AinOCmQ=)2?jAl5jnWCA~*I zaX0YDi-aZJ1(uW}ho@pmjGjNzd7Lrje(WB^m?orJDxstx__IftQrUIUOer>+DIE{V zw}2^0*SAdrk?I*?O7D`E=D`M{etk8zvc;5M#%axzp5qPG%8RQ=(*x5yenW~-N0Pym z0?Z0WzVzWg$d{UgFD?J?u%sXG9+M^g6Nj25i9vuYsYzH;le!1p03#8W1ea}C`5~@5 z{MT{H$dU{&C2UxwhTlY{#32AvdM!gUr9%$?<+zg^wOV~vjHaf|*NGSrZqyM;HZ$WN z;~*q^hv2Ev_i%VIwKZ64+Us&r3FIiridd~eZ1lnT0`%Ml2}$2^bKK+ljwOvaNL^H9fM@6Io&^a)P~cocBxlwog&VzyyP}wPiw+!pB>b@gU)-8MJ_GnN%AfZBkrvy_Z?x20 z8`)k8x1$(%__QtZ4Eo!bNk)Vuo)%Md+d|W8JWe!^w#j4#c`O+y|2XT98rJT+=@vw zQq8DTU!;&pG?7URNS{Jt-LWQPy8XPtr(idX@QCMlVsexs^LJ7Vi^wzQvHHnnn#k`C zE~sf;<`a6yCnWL*VpQHRA@cX4OH1VNbVT0XIgw||0!`#EyxdYghzwBqc;{ZB^PkQn zo&QvnkKMVT^K}@7LuDxIrOqx8IzLcnY*u?GW4n5Hg8r%3q4?Gl>htC8wK)QGUdDdPvMbl6(%T$rz4r;Z_qa*w zy+3KCdHiAk$vicWb)=UTnJ13MrTi($Jhz~_dOpcK=MQAQCQXz1W``ei71w1ro(FTQ zCtJ(UtFw9XjI0{<*cBKEi!2h{bj0Luxm|MRB6+oPUkdum!30pfb6i*zPePx|wPDBt7$KtOxYS?PorcJM zNTj0`kwxM>5ZPw+9g>THh6<5=w#+25O-N}PA+kbYH*6<`Z2~d`aq|!goT%w9gRq(^ z0hJBfkw&W{_kfVXQ#skFUUi2?24~j_747G4gA7{kC#z-&G-x1wJ263_q&c}=NJ)`z zVqP+N3MuJRCMDfi;Cz}@0GwNxHV9SkSO6CghSWF;<`t`(7o}k)H?~mHjhd2fWXu+D z(a9~^TNIQ8kdl%J5qq0>7XFU`wOIYgUq{2-!1tEForbkVZCA9>^@B7khEF<7Yg*GCjtB@`7fn~S!l|#9 z6$hMJbX38qw`euhR8V&nu{o-`qP(_KPW#^-g;Ohwr|MquJHi zxmb}AnEL;$qP~0&R-mY&k@YIPK$fglU7?2psRkt5f>bYfjO(@|{nSFL_it~9RL{Ra z>!&uPeWwo4(~I8>PN|dE7juc2vD8RGbT_y{rBXB0#sjh`x=3& zj}WRpA~_+pd}u<|$Y~FofQG8Ce9wZapNxX4v9?X9`i^%ksCoe28@v=_fOyzU3KX#B zHFQzS;Gzot%N+b=$q?WmyNL|fvx2D}P{j>1-o-CK^nMiqq7SKWe&0%X+dzH1QjO#b z07N&207Ty~;S}PVMj07Rb2}f6;Lud;HS9bSM_O*1Z7L_vUr3ILS`(zV0vXdj+8#3A z-d{vFLdLJj;s1567mu=}HmV|=ZpTk$x<>*w?*uYluu`P9v(3H_PC?)En(LWdNTbF( zIrD-Ve|rf=&63vsjMG{{f0{Q`slB+0w1j3cQz+ zV!=8et3_++Yqnc@JbJKmv+e;KIu$e!_HJ24;65MUrY1qmtpAHlRWxutax`XAfa}3L zYOl_J)ktykKUC*m`Y58#Kg&Z?o&Oz2W-T`x!6<@Ab*;6eV{WCa)0up)64PD?R z3}oI3NZQoykq@(6BlDB`QsNZlelH&ANaF0!zI{Z^gViL8pZB`d;^%eo7K|MmFv$65_LF-*Bhimt?W;T(qfjQKSv!AB1x^oeraJj>f2))yiL+ zLMLqDW4DUrC1*6_(nySk->n;%`koZAMAO-id%+)X5 z5~bQVT4KPq_f91S9I>=}(@t&je-vf~|7W}yLe{mJdI?6;gs7=<6a<#yUtQxT%0O+Z z{pEobxT+QY0`>Y&)4=)pRA`=RVg5V;aGHPc8hnTePB%rs>6?Fr2iuydl?JEbzzsO# z(>F}!UqYu+0jF;mteJlt^1*WJ&v*tKkFMO zm3jecAGlWvK(jW$16*G0fTY2?!d*PzTL3X3p{v12Os&!BVl{R>K8)b81oEsV|EW~> zz~E`(4o{6e1>-VthipC-jXOATLSxgZIEnxcgoD(-lCi*H=&aDmGl5WmYwg9qtWmg+ zfCFrd31>$DhZs3L71tuF-27Z48i#>@85-2Zi!;AM&TM#-P(9Fq!>hwB)4O!R60yw}{2FwGWU&ngE>L~=uLk$41EWN)Ka7n#`ynsf!Koz=;3X@Pcuevab zZ@q@ox*RY$7_JV&RrsWpJDc&F!1C{ql`*8lc!4tHeMHvPEUfG2jv;Bb{|3_F2#{x) z?2DChHTxneF6;|LpovOQBDw-|v<8=tL{NuixR31XW1k$rI(fI3`1Mzb#@ zH^^a&0xk!hLR0?%xSWR4gw<-6e(Ka5$6WPT2m7$3H0#PQwOAM8;n>KjAn0vi(Iy0) zHdh%>foJ_*rs;sdBfHg#5#(390gv3vBX313cx0_hUHLWn)!IZ=e4(B(_2%!U zA7P_7iz5uGN|lvR=X_GLpult_zgy;>BC`Edj`O*`@tD>>o#N6 z#vdOpk^gqvv3;RwBM0spRxuj}DmZtA)dd$}gr*@fKMk#D0x+O00rs}UOT(Adwz zOsoaE`P#)pvA)65q_GJG7^o055B!Zm5b5F317YUL;H=<$KYnT`#BLd5f?LP)Z-&{=P+&BEx)7g!0v6tW!L7`8&>6#)rpidYQea$Z9o3>= zV|nAodxnZP?ziWdfo+~l4D#BW=!shuC+DPi*w|2jSQ;H4bN=Tz)|&35KI_uG32x;{ z_3-b|!<2@u##`*MAu-9Jbv7K&3F=cUG~!zkZ$rdK^i?Ux07RytyCD(MMp}X)t2G#) zRAmG>AZF%_0NX?I493=uZ+apoxOF#<$^%XKcOrh51*YK!o4RTZ_P5*|l*dy8@i_1B z{~Yul`e7Ofw0sHH6#s@K>4r=BDh}c}nePaN_M%O-7-x*FJj0B8O?uh1(`{P@9@+@1 z1hUODT4Cn7_=PZUVHj-wrgS(G$ zNH`Gs=zw|D#?M;Tn%)4ulB8BkFYqukKZLk9%4JWZ^ES0T7VA_NyPh!k=Tw8arv$}e zB~|u~!@m|G2%T)`D1W97lWiduVso7LENw;T;d>B1O#XAx9HUFygdn!37ZQHhc_J?( zW00in^1lQ1(4yF$Y-_E)z_YTfK&AINr$Fqj!?+sfrNkl4#A$}r;a>nz+eOw8Uq1(j zXHa!QmsG9}O8g^G8jX5srhzgGgL{i3R7eN?o9h>)y?+VYgCQqFA#R%RR~d*>vx;Olq&DbtCUyr`YPl?7c0kpf53Q$bD8yA2 z9;43MWpa5rpeh*+a<4+*8hpB3s`?%m5(3Vj$EO&B-CY6&5^q>{!_dUp7q#wkP3+k;6iB-J$Ovo&Xk zS5Ah0DRj`Nm5D_`P7aw%rNM%P`XA#Y$-~R#GP;aM*v!Lj%pCB09GRm!4A~P5*=qW6 z-K2~y;$PQN*pi7j{xjSs0W#KDyibB6d#k_RTYaFqfrZ{ulMXKL@V_M2;VDV>85B|! z64K^Uzn=yAxs_z@v@E4c57mK#--Mx6T%^YYVZ@+lv+)A={)im4`4dx)s!zcMW^?+= z_AUK$<4pP}Ic>trlQfA`kDqrE2{v`2n@f=C$~+v}jPyOCjJqJsi?Cs)qzQ%Y#yU|k zgCRs|1|-}7^?h>BGM}CeuaYsEsepYliGq3`uOYS%2X6dy8Ko`snmpB_*T*SM3Ews8 zHQb09U`n2bjzYbtVyHmSZiP z%NO^>1uh)2w2Sdhi=}Za+p)CUV@;OEs|YEoB1cn=v(X4*8EnjYu{(#MM#ZC?ujo*t zkj$y{Vskw116AO-L$pnD_llUC);C)+dzCsXfqmjl#uL;I*kM2d17=S}38>LHvW)@Z zuTs}mB5@V=#VT%XRED1$o-?vxd4xT@F=>j;npfcuk$EKp=zLyzwcWhFH^iLR^Ej`( zrQz(zn_PI4W^$QWS-C4)e0+>%Lz;7qingFmv?%NqK%iuY7ROS+NMPsKx!7>PuvR-d0s zB!&fugyfAdm7q%X(s@Hg&4(p{ zaGLK9dJrJwzD|u?i7l*)ctr>7zi#q-3%qMkg z#A_?_U)V;iCpEp*q>39}wd#EiClyuTFsW}up0>gE-+EFr24GSnwYg3cMfcpW$eeyU zP|qpGlymyRPa|`B-2<4qPUfxHC-Vjk9N&LDbqaV+of-zTE;4XYvnElw?Lt9}m8Dk|OR!p0#{T`)Ij zhx0cJ+(-i%=bMN{|6`?{0Tz`JM~}>Zx0^L`+?K5Jlb~F*7W-i zX6?K4BeOPgK&x5%{?^E>{r+dziP$04YA@o*T-jLU1FuJhC;WZ+R;Ju0Y=Wy9SLsQ+ z7cBjMHEI98O>%u<_w?YTb?wfaC!A}_XRDgVlRWzszd z*b{o1fbYNy);%Yrv!8o!#8Q&n1EkIJML|xIX(NyAGeIAe930;l1RdlF-gbaZvsZ!@ zS7~w}9x7rRPP-f2);ya7nHr=6k08InRTqK1Ccw?Zdk27?V`&hz;%(lm=}h1|cye~` z`0!%ng&M6c-7pQEgC!*>cYBiEfTai1w=0K%uZYMZ)enallrz0-NxWD50LuXAGv-V z{sMHuhfJcN=YNX4bcMa8<9EN8j{aJXJv+g*9rXMiijueuQGtu46R9>k9G9x0zD zf(Mqi)D2yPH$t>in@gbLA^8BJA^O5h4M~81vqd7u5gVm*yqvOd z@GUCS5kZi6`J>0F9(stEKa9gO#ml!vWbY=rdO@Vs@}=PASV>Xr=RS>>?@Ivt5!4}q zmwN^YiI_D$3NMd8WXZB5dfDpR-%(hjplDP_C~4?skWuy3Sz2Zk@TzlglK>Z5&?dC> zff4w8#n~o&E{*-Llogta2$91Va5IxHAogYIF^&$lMVmwc`g;)w8x-xwfC=x6dl3p9 zM(<}MO5`_308m$`UrhmyE#Lx_R9;i>`A>v>DK_Xhha%&gX2XV(_jU_~i2Fs!qh~|1 zi8@E3?-LWh;Se39bUn-hw{_vvp4B8zbne2DGn4 zqc(Nt{RFi6KrkTMokZm_hTyo&n_1fUa(+ioz$ENZY9tv2)8J) z0&fet%`r1mu{-NbTw5UPa!Fu~QE3lcd#?rXvW_nXmze@+j$JwhaBcROz;y!dByjy% zk62(CTn}1r)WCH!ej6G;6Pp8pYuK?h5@%vp8W+*XAX%&hgy@mb3lhZlUliVCb(%;> z9YMFO%_PUt-_)!v7IIw#$NGp?4O7SM(Ne$6 z(44ZVn*S4a z-Am(ZU5QqrU099KS31UDL@jh94W*E>&G-P5x&)-4}h$kW#Py&9q)MX2axA2%4&=my6&Behz z-EMLGq|sa)ys9yv&GG8+B+8tdqA{S&qnw-CVL+R{Jy$Rw_CqkB{0OEHjRE!g0k`SS z$}$oRs9K#n$r2iy&l921`8tJ0hd)I7gQ;%U=krI1j1pFYm#LaN>!Pd#r(VJi|1>;q zS_vkyrHKC9p^Z*T?D|ULUFx~TZL9>O-6nBpu@xB8k?X$#)96y}cL}reI2789f5Tff zwPyzl#n@ILd%rNS2WJWbF>FuD00hM_plzG560iyGAXo`%{tCqoV0HWp zv~6{~4#zD8G0;~U7-%IRtqX2#>8@A__TNe?fhOkLoAKdhA4o+kE5Vgr(lF6Ha~dlF zZ=nPsR)Sk>+DcH25ev!F>YD-DO7IL$8Ct~AMBTC#Y(f`}>7$V^*ghGr6oMbI5^%^+ zeVkLNphhimIfg^KNPyB>d0&aXw#7zoOW!edaZ=qJ2OPV-L|jz(cVQP<#rR*{BgRbO;aW@ivVH z>d`qg4)A`{IG{NEq0kEaQCoTYI>En@#xiR!RcrnS?;-wy-^CFlW=_~!J4bKKIRFH8 z^DqMoz^)!TdZDSS2>pR0Tw9RcVy5tB9btnn(A74OdWe|UM}|aMq8?ugNfeEeE^=QTBafGFCMfe<=Jqc##H9|Du8_0&4 z0YXKt>7hcpNnTQ2x_=+8U-~`f-=dGdhW2f?t1)cC z8RO$OMl{ouE|At+L#b()<_LcejODLtwF5o_7CwGUKT|O{8Jg~O^B3rha;n&IhfDm{S zQJ;dDEf?&_R^wWoe+M4Qa-NA>tJSi7`sZo987E%u=`?c-uot$J@U`{A?Y`)acp%6| zz3}oz{nLH(xdiN(Pt9G2efL%_@~Kt#TV(qR|DTT!3gho0{OyhZKZyT}{$B$2)1v^CO?3*fepQpy9do! zff$-~AUq77`be*haAQDpQ!;x_p*P(W%bPCNc$XP}TfFJ6j=;-_j6xKx6>pwmIn<4& zU^K-t6%FREcSBQJkW#UDs&27Z^WNf9)P-fkItSlfJpsIUw?Mch*!4sl7d;Xt(oJqr zmR|C@(LT3f6r9C|Yf<3+`}>A6^&nK7Y7jygofPQQ7#}<{08gLUW5`??!#*I72*xfX z(N`#*utDAXJ@o!+HI2b)4<;BD$ZQqNs%Txvx&+?DB{t+{TTg%5Lb&&C15VyM6u4RF z`J2;YZ4K~3m@mIRxf8lL(%{)p3>o+Zt3lU5ODoLUX3X0x&!;5}kGZPU5!g)Sjb!x| zxSZjBSR9>j4IT6pGzst8Q@Qc!aX$OR6p<3HXFHIXk>43LrM=+}hd9>aHVYCe^ zMZ{$&snqB(A?p>-ur-_Z-#2=@1dckUBGcr?xE;fsMd{Wph%J^r7+HRB66-LO zRN)ws&*dD7uSl(N_-Pe4ro^Ln$vQ}`aQ+x9m<{2rcViq?*SZ*6{^v0T3#t)h;oMN> ztmXhwDEcWM0dX<6kA{uL%xTE!VDd6E%OV=k1QbRiKpcQx0Wq zPfIOj^3SXaN8k%e_Rbnw1VJZu8w<9ec3`VirAB48`U7mj*gG`nR;kYr?%Lq7tb9AC zW9}GPghaZd%DT1!YbzeoVC@A|j>ci3>;!@vTa-MrFSI3%x*szJ%weXsh_P9P^JQ!bPFuk1j9E`y1rJy~?k(JfN zjdB74t+664nAgZUH2>tUYV~$rCN`2ngsD*^y~<~=MwOK|#Z7QFEg91OWr$6~n_lG2 zKr&g;u?fzkIfkb!9!4hh=VLQq;X>MeEP3n!!@vDNS-?bcD%O$+ahncr#li2 zIs!-dDYGypx`ba^k_n{N@5cpSo{9@i8()UJtB$p$$7&0*!UIc&l_LZkOz}I%N_b5> zD{gmuD1qS)|3*AwAZ>RX<|g^LuCR=_5-`^U&086NK7ff3J%kE~;2_Y1AF^qOQbw&Rx*nyCYo)ZY zC*8<^i~t7`?*!wfe#dq|9zyB5wm$I|IrDwqX!KNz;;@Ia5UGTPvFZ5vIyeMb%n%%+ z)DFM?K2d@3iGiVLv0j{0@*43}PIj5|M2uQJ4Y!$@#c6!&;N$ZUxqApnnGYj1qbu~Q zd6dVJ4eIGcnHb(Bu4xp~S-Whj^S- zXHGKSa~?aOhBUJxw`U2H)Keyl!&>?&o92#E?i3=S2HR-j?8kBK6hp0Z1SQP+}f^4_Q$GwOfxu3g%bs@$Otxz*_ zfn`D2w_~4g-@rvuqo%vCNSw{=$RON~``kycg=F~+#{InK0^U=lF8v|~wTqiP%aE(g zlHZ(GrcF-i%%yl`g}U;4%&ZyaJ9q-7E4dQOXZ<-O?>LXyL_Wl2hd~_rfw>xueCJ^H zl1u*iJM}wXnkDai^AO%y?tM%qLx%r3JJL@y(&&RNm2l4&C=eEp(F$LIoO{#aQ@eS) zz*hmxX%OPs1vz=A#$Xc<7+K(S>MTX zWr6QQDFtJ@=|;!$l%-$Wk8Y2_uvM!=Ura{oOt$rdjWIEHay=3a01Hw~rHZZqFeIaR z5E<~t`jP|#IRd-+t6Kg2zzI+-M*s;zkSrr58?HHs_EamHt|!@W;1qTcfTb%xyxwMv zG0IBS5Xml+C|B&b^41|-@!GMXd$9raUjKiiMen_6e92!jvGzQ-!lA^a*71XvCt>vc zC2xF>p?`gHA2Omkhx1)=H>pJZXg3y1H@fRQ_FFEMIyGb_rleZcx-xC&(ChNW6}ac;S86jVM!Kq(PXkK_89M(QdKW^K9i09#Rm))Qq%6$DmZb>K%nl5im^%(=TTs|JEaL4oX@tXee` zbOVFsD@(&z>yp%n%qbm%SqM!&km}s&2;2t}ijqgZH@O7iBSe_ho0B_UeZ5`8d~A;) zq0FT6G&`p`h*b3PDCEt4m8YRISaEPP)C)LBKSeHM`1-`BcBK(9ymFY|pFI5->PpUyzqVXg< z$Www|uAq7?RheQDJCXWt2Ec>mbmMF%Wsf^bZNQ0NX540K)`=6s8( zqCSGekIps{iqzCxPqG!i(1qa(h8C;7=(v(!KrBcn0c*y>!D(3!xQ_dry5( zDk{+qU0N9a8|JQ}_QYT`0Rz+xU(;gXlAXp4M$`H739*PC;kneU*Wq7e8GC|zk@e7! zT3mWX{{(_c8HHDWDI~J0f$u8AnKGdqH&N=*$)NQ(hzOuxl8O<@szJ{Mo+Qp^U~U~8mUa=-4Y?eAyg+T(Vwk6L{PZj z5Jh_2u2Jha6~rKt#)VN9CAf~@Sx}zkV$H)&ORZQkpxr9fpC&{y(TFcV<_H;c*-*^l z|6pHCj5LN-5EQDN`mN`Gh`Tw4_%UnNA{ix%0R>u8|Ap7I)3D7Z5)Ao54N#>f6nVO3 zK!Ja&!Jhi9Bk%?^YBKhh@YhW23Q@7w9oROKpi*`V_6;0217q-cE;V@zD5D$)B|x%J zjAaFq!m4Sd8nbN4v!!4zmD_xz`WI=1(3X0=IBA468iOx;wvl??m{oAQ>pVk~FTQ zeg}`tM$uG%*tM{09|?XFeG}OksO6%h(28#LkKhMe^X9cY=j|%(C%FfJrA5D=6Y9{_ z8<;w+gAPh%2iyk#SffGaAasbEh22-v7T2IkJ=Y7vSy>(jcKcQx$WMi>PQ{$54Q|v!M>h&(<{_7(9FZEk6uq&W4n<&z! zreVWMfiq0U0v3vyAuP2|OsPS~wAJ4X!9j=(2+(BXEzZ0qKGcc>w7N_8LZJt6rF9tZ z4L1p|Td2N#Lo++k7jBDY&V#J{2$0JGS|bG&xOG2#>+l$)wGHNND0Ey^;XT*AC)xUf z{IB>0g$^umB1Vr>Y|Kgu;P96`oXpsVZbo7#)825Fac!dG?b%_++mlb0erE4kGu`(C zaKqbi-y0=p=4}ylVp3zh4qs`!Z+pD&oA{;w99PmX;;LBhpu)*9S51lWCKXPOy=qFV zH=%HH+*MQJP;Co2%LbO90FB|@Np-a^nxnaFW{Mj0*Xza15RX$Vn&v-_-2~~_$Q%9Bf)^MA*C-PV6W|8hW4|b6azH)?r5r;(cE>d7q>#Cc@3pVm;sd^t6eX zP54+z1q$scwX@uoJnXR;_{fuLhMW~p;azIhv#9e5likiF>b%8}q}&Sx zKraE*gg>Q`uE0`>9`JtE7mXPUFcHOQ#jH-e^vs@5$8e~RCgJ&XjvC4xb&Fu=Pratc z)Y85A7yD^8qdO3p(QNz+;f4qzuKh3#OD+LOo2Ppj%6t&AMIw4Tla$8N3Ir4dArsl^ z!92Ps53-^gtoB5kM`(eu&>qyR-+87#{&! za|rp$$_&}Jzn^GFTB7SNFs+*O|Ckhj~(hZ4LX@?j|R1K;WM%wU$8oL!5WAEQJm2AB3UqYqa!hnCe@9=2V9P`#4}ZG z_tWyXzB9|Jd?%`IY>dumwoz@#U`Dfzrel+~3#pGD$5(HqFlNej=J^-y{xa;_k;EQJ zzA#gM6c?INGVIjEV3e%PCP*a@lH4q zAYlwEW;;uOb0N(KU7mHO4;Z&AphmM5W6>h@5Ywb)6@Ble~8NXgcue z>YA__9&A2VJFp~B3IcW&CRW=)D|Ud}ePqm)BxF-ijuR%^&*OZ@QIK;VtgOfO58OYj z*5QAFpV1YY1VZHbBJ2&s!aA}21b|7*tlHs3O-;;9*jq5SA@3-pv7xx0wFB2H)X|mS zn73_+zAc+IfH$(I${&6H8e=dlvEDv=j?*C96YZ?yduki{$^}nvSW>a+HnP=PNR|6> zM>-pjEZVT)Z&rR6M$x(6R}#-rc47fATcG7V1vunzOXRSS-JMatWt}g)DOD!giZ3>_ z{vxX&a*n*{26g945yC0*hr5NiNMsyr-7Vg(of~bWHrSi>*hOjmMqp4JSL2_qjsW?! z;VnY_6FN-*WqjBmT}{Mpg1Z9zUH33TV?AJv9ChR8=SS={kp!=&d1YqXS9*cFuLp8# zbd!43MK0Ba&1!Go%Zb|P!Ga?eyw^)oov485qFWYl;AUO_@I@IBgtVD-*ZL#l(+~8P zr3zZ;>0++qEYx^c#vxdXua-QSkYn1|n}jHswhFV_df&DN37~tlS6Icvm>&(xW9K|E z#&(j549VnV`7>d7FM4bL9YfCSu6dtp^oCd+4BO3U>5T(}5io$Tgen$vRd>A)_wS6+ z2x;n4*F_SmE$zn)d(Ou2(j#N5C%!W&^cg z;c;E5O$xUIf8Fvlnr9?=PwcxNW6{qTc$|pxWOouJ7Y21H;#o&#Q@&8D`AV?%O7+F} zF+iQ*UNW`ST~+2?AL6c-7%6LR_*eKNqhwo_Fr;!!jWLh2mWcjBlczIjIlsuJeXetm zUy5-HLCMMzTu0YYbxQ_@TzshYeCnJ;sp4qu@OL4l{m!U__YB;JeV=y=Ze_efFhuX= z;1jj@SL6Zae`>-HB02mUlAsafe_DAkjP=pZcU+c;nPY|b&o$tmBu}bEa5OZwN@Je} zu-U%#f*rdy1jw zQ!bj59zf!|aD&~DST4Au$eJ-iTrGxPQ&@Od7POO~Kwknj;#D{Uw;+g?p%DGq)qd#j z#uIeMHjJ0<1pCCrTCqZ$ca81|w&4N0kHj0NVkz?hjZ z0akqygI569+TCy=A2Ic{4jz$ln|ve~YYt7_Cm0$T zTUb40RI%#%PJkjewj`oBz4a$kams2gidlFQ+1K;tsmT6c+iL$uD%$|#ev2N=M>CR8 zbMH%R6LHwGW@d6F?D~Ns+)y5%U%z1Zfeko(>zdF((D8Up#i69F}kV1K2Gp=&# zwfi!Ubi`P2>v~)XKCu@6s-h1d`z=e->1_aC75_9*WKJ{FCr7M&Uo&2sh0j=xTOS26l z5!gF86i*wh&4o9X@4_491`fI0qgyEbDmD~9A$7ZFz^EGEXU%h5MqFIEOFhE-tsWY2 zq4=U;dOUI+>L*2d(d#g^B2u?mR%fb=x+Te&dusK^*i)9%{Ho2eccP^l@XOiYiEywM zndLOJ9K}JvL%xJj7fcBmT0fmYZAKRbdGsgLhmh0OeyT>uQaUEX3ym`IV~ghI!q2&X zt^R4jn)0)jt>cZs@aUwp?U_fB`$rVqliDKEB&m@{D2{i14Wm-g(4Tkr!SCDUw{k3n zKwcp*FG$M`3&J1>fgQsPAr9k7Ko9RM_AS zEuYX>94(&=N6Bn{WfCgHWF_QiecQKkkj=7Wh#}cq;0XK%YLAhT929krwv7N!tQ=!h z&dFAZZzjX+Kisrp*p9}e1w|9~Ol4vY_zr}bqDz43%J8x=DlKOy>HG!0Uo!GD2IVz! zj2EYlr^YX4Gvs?qgWz7E8w_88M(%mDi)c}+4ZE=iNlm_Hh5H`c310c}QAYakWA7U? z#``{tiF@BY30M!@44kV=zv=G#GA8V)S)pxtE*1FoCm?pjL$%FGBMXI2e}Ui%h0Z{3 zTtQ$l34}8r00gm!;1dKIbZ%@mt{=#itk{YXZdX9dLRzo zsUqVSxbJ3X?E3xT#S_sZVWC3%04=xIfa1N$kbtl>Nc* z<8o#jIwv`5zpuvNz#uHzY*18UteL;yoICRv1htw+!T1>#f|N;Xl)L5xgy`^ATCo7O zfYPXE4i1KVy+&Q~`Vh*+Nbm&~=U($E5`PT;I}(5JS=5^IsaODb3bXMF+U7x^9tV8# zyW-BD^yRHVwMMQ=-Wl8p(X1voZ*|~(@5QZH$A_(d8S_>nS4H4`bMB{TZZgz!o3H6g z&q80*AkX!N*wT=*q$K&+KI@w#Ysws~roTJ7A#h>!xLu&@Q}^JF4c8d+)~C+f0HJ{? zH}wZrltaP)5EuB3eLyLBW6%IRQ8_2PXpHJV?rivB$O!YKM&cKxz{1R|J9Ifb-~CUv zmRy11YJ3N+X)kqAh1qE4Apfov{oIE*A99mzpOs97ms`HUSO>K{tg{vP-lDw>JcGbh zQ0Kf`G#(v7no#bsuW%*vj<#$_aqu-$C4U6zrkhTccj4nCA6{I(TqAwMRp!!ojbD8(mEz8`re z#PW`)*SEffr~w7Eo3D5czSidHbu=TstEZc9W_(wi*Gea<&*rVRc@vSPL)IW&tqWAQqb2_h*@&{ z;(EUE)OVJA0RQ6Utf0R1Z!olHHF0ND!{?ID(x{&&9Yv4faGe&yxRzyZ6)G0ZN2ePv^6s(A4>wc zWd_ay3Q(brd__RQvqD^jvkt3xefmV>6!=DRIx-W~n4g1iE`YbZ=Q?9)KkLqqXG#Mf z;7<2ac*+^TR(5B*KuF&Ofm3m&Q$vrfbPv4jnO?z z3Pdu!dAGN*dgv~7)ZGnZ7G4aTXty067AjvHxXn%&u(ejqiDI(CNBDr{fN{ z-TkYHDjNt35 z)!=gcX{sNM=eSBy@7KJJaBq5=o`icoZ$H{AMiTc+k}_te`y%=TA4U9Dj(PzB&}40L zn`SYhABlThR&xj_;lra2 z6@g&SV4B@^qiE&*eUxNSj=&@QFJmHDYtE|D1K8GT=a}Q+8*(sY`)AYq-Ts}qo9t)-?LFtM5AD$Oa zUT6wOZD|hwpZKIRL2I8n?@vdiQd%;E-nA3>Iz0qDc=;)61#6#wW`CZ*C&0%&Q;b=r zgyX$3BJ6laGYf#3kaFg(WK#JaM#e-0EP@U>n8kVIrE|G@7Hm(zpRpx!V0}{C?^$nt zj}V+rzNb~j)8Fkddw0tzz6Zif%lF*LCpZF^M)iDch1v6IX3zUT076nR)zj*HqSg7t zXbOq``wmZSQATM5%!22DX$PcWg=m|xC9n@>=g?vo1B$50skV>)92wC%l6M_q% z4)~|ega>l7`u8eIe-+rPEoM*iiPhEJ@O zt^abr!^hjc>Y(t%?|XVLbg2uAw5v-R;z0I%4|zb**OA*i`+VPLqIhBJ-EZ1w zsCu+4Ie6fSE!(iuMd=?9lELfe(jYw#%WfyE(TJ_CK*aT&@S2U>URgUs3pN^gCB_ce zMn@rzqa?UsEyAxE_i8Kt)AP??9P}0(tKahjgDr-{ZP$*&4*wj=-}+VJV&8?KUaYn4 zUDIN}&e|z0jH-@m0A6K%+k2JeVFkjhxjf>^4Y}^E-_35RAF? zazIvRJbi#yvUbKHDs=UzYMJ;moObUTq;A1G!7*Ni$DSBC!U-v2ZD(GC`^R~9Y4dg2(vyPCcj%i>d=8$e_1%t*5lG-j=O zY!k`y`d~_MQM}K&-p;+|E$}(lBxGP`rEaB*ha<438AHBct@eHod)KcjWmNCn@MY?? z&G=raN2Q5l6j{Ws2Cb8%=OF6w5g_5qM}$c30KHjtcr6xR3w*hEJTW!!h z3x>%dr1qO_MD#-G{Un@h4e-3$!31y4Yx^Phto+34Sc8{O-uN_zl8yxD6gc7FzTUlw zI3`l2HY0GVVG^X1+`H*T0-3fn^;+mEG2Wr5n_Q`OfG28H1qBiCxh}Q%eKQZ4caF4z zXgU3Q)St+c*Gk*};V`P{{V;w<+1HX1L2C#Pk?)1rT0nbyJN7Tp z%d>QNs87U^W$j!pK7e3|9c8&(j6+*UCC1FepTJ}X?4DZhdHO6gRZ+D+D4v8ptU3|# z%%EskOAttDe?=#wV^lgs>pQoj!lL@FRAvLN7Llx}j=<~sj@O{p@RiT=Ct)8M4{vw> zWS1kb4kwXUSbh7(U@$M8fL}$tm)(D-?=Q&%d^(mVSUw$IB?XEPBkLA|iZ9bX9bCb{ zuggrIjptk zfe7K*&FZ?}!Wxv<%()4;sf-asP$$Pia$7kcla$o9cC7Td8&FQw^JtCsDWm~*1e4oo z%%8oLI#l^4S}3LhII+Q1j=Gm!$aH`ap5-s?*5w~UJPUBSc0rZ`y75*=*Wi)u- zWf-iC`4|;iiQCNxkUcJ>h*J?0xRBGWDCWwm#WP9ngd}3-49_iztURd6li@>j2%PR3 zI4|^VYc<2>IE04bxzO1q9pm57Yql{<@3v=lrD3-DjE0W#(4XlCP;dXM!`r7O{i!%{zYu%k_1rT zDpmR^n9|I6rkW^%iyl%NO{=C^zIHG2 zewJFzRyS?s&fsoBV(AWc28bZ4EjsH?u`}vA-x<6lJ7aG{FWDG-vt7z4~>$ zcBv8bF+qG4_=6|ClTFC_vz=^0U7EHD&m*5aa$qFN`wroK1NlDhq1LAtRR(dVm2YTns>pg87ot> z?W-`8!#D!svxGBm<4jo^R9AiyvE2rcozV4j#p;b}bKD@6hY<~~@A3epb${WwK@E!(aY zZl+K;_H{&ChWPV`6ibvz(V0ec{)7xWptHX2r|^8MMX0ZKHzvcmnN9}1b7SB~3DlxV z^?hc5jd=u)0U5%=fl$me0{HhpY6X5d0=Hw?vf@m&I(#9x%<}o-349y&jIJMjbDWv? zNh)LeFXV!P)fbz4cYn&auuLYTIswzbjDfWI5N?lMDhWfp8$ef!`$DFS*md7K` z=ybQ8LbC0dqn-$fTnj^82{fBuZS9-~n<3#Hn?6K@tx|u#;FK&^(y}v6nbbXbN%F=e zh)5%Y5%>;z1`@HU`Ml)atttc2`46-!zv!P_P(-$kJvqU7hsvDr;z&mh6nm)}xH-ls z_4Kyl_Y#e3;~RQfzYxu*?G$uKBRsbk$tM^+_y@FScoVh1cl_|K6JwVR2zzVhsNdf` z#8e;s37n~{y~eylK;elSQaj0yt2IpyI@n z@8G2LADyaF7vS0iXT_3swC1-xcrkvj3~bQ{po{!h{t*0z>L4T!jrKGk5v z&|c81Ye=tNqI<>J4Oc`u%W#EhczbC2L{;@15FQK?Vnydc)UH9#0?%Vs>#s&P%V1tc z-@bk^9oFWvZOD=Z$&Va3juM~~Fv0F+Fgjs6kv9(3CA-7lz;D++7$r=g<9L`;ugw>s z^pTX)TDvr%$2jj&&c`*v4P$$o(zWNxr?z^E-`Qf<>oj95O?yu;VIl^j#4~f%%<=i` zOtmp>yqPW<``=}TQdZ*!>!5}Gu0DdzXP zAm}ho4I^Tp(3=n4qDR%JC=+2k#z0L8 z%HHrf(SRB}jmASwh>9AuATDFxUZd~`Y1B)N_?H@xLo}ej?hy?L*TEijYtp!>3Q-T@ zOnQ<~vmP7P$U0Q;5J|uK%`ga%)5b$Z*A7fK7z>c9Z^%@n(#x0_6Ph^@mEI+lp0~To zZGst8=b)@o_dJ62Si7WO+oc%kD%S4A^=Mkt>=!`<5P!;2T&t}C`#P6SfoloJu9nf7 zh*59>rZRoZFkoxZ#g}hx88D{9kO33lN)8x(!cH+@zvO7GDzipQ>x+-nSo)%whJwwu z87eGx%z=@$yU@8NH@#pLM+?JNueb#&)ip>!g|#&pw5%lvISxcjd0v>zy%N~T8#BiD z%EyDjjPU>fR~@wB+^X+w=#tklA`IHuvlN%=AJ?a`D2-}wA2oEdUVCqRn{KPm!!L}0#ULT*BwJLU&Sdr^2#ZR6fJ2bxkQ69!saFaxAYj@n|aTq*rss(Pq2vPDMa&oU~Tb7SGP zsE4Lp$Dd*}ws77!X>3SUWx;((+;<6;6y3-L+6ZP^=B(rXch+)gIuAhmZ$m1DZ{{hZ z!)3XCx3w(MfU~aEf@~D(cvvq(=&A%0R}AK2tk46NMhmd8amPdOi$YvHT@ELXa|9&W z1M1@z(v+NFG^#`#!M5j<^n#{m;wdW3LCLS0tMVlsvtVXnt8>B2oW6%8zMj8>F=In?n{j9GAtR5IHpuXU(_QD zn|iH#G|UCssNqt>f69rjCELTstdn^@DD!*(Q>^FEg_OFOSw5x?U2m=DAKsSrY*fg4 zfIkd9)|9$6d<+fJVv;*WwtuZl{q;6^iM5*AzC|}b1z)R1;OT~LM&6-@SmUHIFQIV8 zocx0^1zBeoPML%J-4&h{Vv4DCBQ}FkkuG&>hix-+CrHZyn8y$6=J|lS0-Z#%g|pEU zWH3+{ntguZWcxn%M7#KC_Ntx+b7Oj1=-P>D_`kqK&77iUKEZS-HpnpQ@XKvk3EJT4 zQg{BDGvV+*%cpr09A&(YVk+FX2h#gs;qd}3bhYkOTIl#WYj5pnsM>!HA5eEp*JJ+A z6X?Gf@i^@1*05)yEqp>cUjwYgB)%PtzWNIq5P48HdN*{Ow;;P9`Be3h}x#mx;@ouWzU z|LeXJj1xTvP2v+&?ocSv73yi6Me;23JCAhSC;C)5)cRLqu%SH<_>k6-&OUVJZtC~} zKuL(A1g7y|g4z9c-g>a^(9s@@iYBxQ;|kR;gQc7H8yN`W5@cm&Q8dFvfl$-JZCYmKKnlJ^B zx|;bXd>LGwzz=fNNASM@?gja+8nuM7)$-xE>aA1Hdrg3Vua4wLgg=~woQ>Phtm_M! zgK$32h#%DzA%S2fl)zSl1zGutGUAQiqe>YrSld4Jo2VT|Z>~3_gdX&`Sf|jd;DSa} z-l+u)X{PCb=%5zQ#bRp8pVR~DOB(}~rM|$A4FE^k)RY)I4udy7oNyBL3{cSW00^N8 zjRCG#7qF?C(DL!Yd3A4sqW(YL-UTkIYW*J`V31MKK}97+#l)i2LebO^!^;3=C~AV8 zGP@dC7RZcR9Tb}(!QGr=7t7P-obLC|vGSH>ftqNVpqXN7YI#{Z=o~CkREqceJZtS? zW?;bT_kZ=X*lW*TmuEfe_N?c&z$vg6Ppd6zXI(QXsOY*NJc5g^3%0IF4JjHMf`=K3 zD0qYxjSa=4P0`pkc!U*=4Z{OUDyS{BZPD1ac(f}T+fGXjFCIr}12jo7ichCQly zY?PK7T|72gON}WW8>6Mh7LSe9Qsaup#-Z`WV+U%f@x^1~wT%OyZByqCk5Alb?*{%> zgtldFu-2wwUPOi%eP|a}nmXr}C~|*u06OXJB_veKaQ}@SV)SdjHn^88lfTeIi~s*;$Xktj;4a`@~;hRxb9R!*T}yy%_1}SzP?f{6$8#Kw;jY_ z;X@1P{L>M2Al5gV>|-DrTMFMseDLBUD_o>_(fHzEq)OS{H|6Je6%D^-fk|^j3i*!x z9wA?Uz^wY0RKXqL<1jE2X9#QI!#J;bO&*>vahNX=%A!;2sFY;8`8!+R#{*N|eRkKA zQbpkw;B+chkI;XN1q)lydia-6tS2)>;*4smYcxKCz$6wm5rxcdT%Xh;yOHTL_`v~H z+Gsf%Azp>Jp4dF(l%UuFK~n@A8Gv=V#78xG#cI-$|eN)shm+O}v(?I_khE_>@G%xv^f)QiM+J)M#f3=ePk$(?Ta z)D~YZAe9;DZDfcKY#_H$K|FE8pQJT`_$f`!Tf8|cW-Tf2Hr1G=6d;x|MKYbm;iNMi zzDJ;`k50t>DX0*OHCW%T$x*q9qz~kV1vslC%N1~kI|uSj@#jJ)sXh^&Ej7uWaPs) zqb>9MXzDTo3tffIjucXG(p)iV|i6;-k;^J3`o`kd8?5D9W0Z&*7ZwbeV zaz2FiFi_elRwf;4D8(se=b5i&2RpwHnkqgWO_c0Gk@6F0Jl?^*`;NL1>k;{1JB#gr z_5Jq)Q*<08y^i_};eHZYR2b4~jq2gQMm27ra-Evxe~)-s}%+ z$;o)w$*UfpOlITrmN%Hfndwz?7pfWSSiHv9s29V;yrI?Gcz`kq$MGkj!-Z~}@d_}y zGKdV<$vQw@#e$e;1oL{FjC{~ihSUr4`raufpUrhI#38;y6Y3m%TtdxZ>5U1u`K{ z?0%M5ME3b`*Mt5`*Cynw2dmSRuoXJx4GoJ1Pso95uXzK{d^g)-T~>N#fBUVI-G5s_ zwkvOr!dWC8J`qcg29qljToYFW)x#}Vr~XkqF1vW@eXOrf>N4BK$7{!!$cTf?O1~5j z+%0wUBXBSYha|EHTB~$H3|M6Au+YOd8n!z)*)MiHRy+e*;$3XdD|VS;5qaFfgHeR_ z2nm2{MTG*>9wj8@L5bvqd}gKv!8~MlRqzKv&WAzL_Hs{<7nW_;aBCaO;Wb>`#_aN{ z$mYE5No7}ceH*j%?cj#30Q=QcmFn7UALX_cD26JTKs_1D3kM}ZZ^o_t!4(!P96-MFSZ6UqCr*b}261r`+heBDn^f(^4O*ZtwJ~rtV2F}#pda9h`LsN% zZDGd0sn}7FMN8#WRMCRVa0rXYOIs1pa~nJSy$Rl0f*jLObKg3cXlxbhmlB!mPJiAl zEwA&7GTgQz?7xSr;Qz?pQ5j_CnDxDAXajqTrUal0o)>dw|JuN6&H6|9h!q<0d#bAw zdxWC}whA}*v1~hE2@ZM}wegLvA!s*~01&^w*Z^Shw+w(qx@E8GD$T$>RsVF4 zs#>*AI?#vfW23ZSGk5-(ZNeQ_mDTT(n!U{mn>d zQ1&G6kvow8NC4f%tt;4 z2`tS9+=Z2(v5NV^`eJ#5GEXIFi0;4#Vig-#AybT;#^5KDn0F3T3#+wj8>rbZ#u;tM zo1myUAXE7!ce^(ui?}omgdZoDz7(OB#=kf8fWO8qksyAy8t{;+JkGn{0A_{+!!3~~ zwbd1Ysk)4X_b#HQU6_y=;=Un7KNYmb8~8sF-XEFc5#CevG^1!hV>-Dq#D@oHG+SMC zB9J3mTflbR>GT8JxS)3jg<&Geb;<#6;t`ye?hdmA;f+p%fJk1>{Q$C*v>7sd>^D z6%NCjbU-Pcfl^pA&w09#+WPG`59W$ZwmY7|w&PzyIt)-v0YDfZ#Ff(=xI2@b+o z06u^a#Yofi_s4ShX=zT=N|2x2=PJLBoct1gp?0F+7j#E7lc{&`B|f zHYaQ0kAxuut$XRr)jC?)Wryb8iZQ84k4QWY?QJw3?l1+#tf5`p7@)UAfrEx_;AEL% z(kfD`)?2?h;=uN`A~QYWQ8$pXx?Xt!>2JBHc(vp;2?)jX&8Q| zQ^~a&sp(^-qcP=~K7+2jpy|`bQ0#WKHqly8f9cTRaEa%!q2NqH3NTIQ&;ymcBMemY zCkO0i_~C12KwOe52Sj{T7L5kSG`Y8dSp|=oz8JqL^};azRgS_qyC;zt=V|6Fiv%9| zCT#=TH}ep=Hb&g?@ECO{dJo8DdkTLSmV7>hGWpR(?lHW-%!Ibun<0))Z=w4d?Cqq+ z5(@!$ihn=B7nXH_0s?DaBw_Q%&Aoe`$RV{w61uB#bR1I^9zkirA!R2umh_&~#VT)* z%zF%ZooAD+g|u>m*&E1YluyfKGKyuZwKPp#OHl5DMHY+W5@`e{FF1b;Rc5~n{|1un z?785)YM!<*7LwGw?(7dcyY6SOn(tcxA2MIj2kgmk*<^EJ(}tEAmBBZqu>U-8OI=9N zU|&}+mfxlG+yO!Uq{>ynxMQ2u|es~MBac6Ph{E)q(_3gvc%Q5qO9~)ps+DzVDcN}oF;HH zhvCMo!SSl-&PkwtY+kx4;mccY5?|hAQ0OpDU7!6|tkLrRwlydSrXPX&`BGbb5s5{AEwbrgw}N8~9ye5) z>AWQ#`mPZy#eW&^wppgaclv(ug0(YF&5XDKr0Ag#7w@bKwJx~`zf2bE-9Vh-1f~ss zT6{M)-2XMWCy`VBOl#p+giO}nu@;t5jc@KD4IUzHp?g4h-sdFEhhWF$(DY$vOFNyV zlv#-uRo+J^?|sONwOx05#dU>(Io03^T6(@)c6WF8McFcTUlh=ywtY8 z$o4tiPD|FqVB+qe)FS^Vm>?+-b;Dl9I^G78u(r;lLGJMMv8Ze^=H@5ljVtv$_24J4 zk3woi!`9)vJRg%n4jKCt1;c-#*#`Zh4Dn=&f&mBogABtlz%V{oXSJs8Ehd8#tII;=l#4Nx!_qj`+L3178nl~yyEty;1|7qt zZ`orFynbe*HXSqYTFrR?!zOM!gv2v_2j;H4c zI&zOdl!c(xeY2xGtnNv7x*g5phOXo#TR)FI z*S(x5$b<%MWASn#fs6UpAmWlR(F|id7JpGi-K!g&Qa4HO5xONzPZHe8i$ESlPZxW+=PL2(e~m} zW?>z_jBnZQr@5&RRDSfg$!yvI$8g|2%zGgfCE4+*svT@2@g#sW?ukV12IForMeS2Z ziHcbu0XYq9w2`M6?hi-d>Ez$ckaz(I>_-d13Ee7&n6Yke6*oO7WecQ3fY(o!kg;mY z5;j()W<6X06DI}%%dUfNO^4OXb`d)dRss_SYV*R&3U5XoL$HjM72c{KbuT90;!umk zJI(<3OR~1Y5s1KECI1?r8yri{i1){cq_&{4hSdairYL(IcBpPDR@4WdZ;;(8Zu@8u z#!U$ZV5$_r)>$8Ufmi`NOpS)qSQ)Sp^4W|j1$cxG2og8CJvJXXIY_8Ka>?7M2wOP ztuIb!3_A5V)r9@|{bZbd2}@W9fDKIlU`+pFF3`Cxm~`!{+n1FU9#Q3Kj7hhf&Q}Hu0z7LMtqn z1ur6H+$+>>@`DnZfIs9%Bz%i|=$6D?_G?()#r{L+OfCI~z=`y48uxVwv?w{EabI4G zoZM^dR3veiW6Kr>FGvoNf(-;KnSjG&O6y)+$ejsWspZt3;th2`S@Cic;xL)g-1Jqp zxwtT#;%+nkI)Y(rxY~jk&dKqKoE)M={$`KKz74pRzDHKdi|e_e)MBm#%h6>cyOUih zl|FKk8Gg}k_hgCc#qLUsEac*3ENyOXf~<_e1)^|Y&XSW2urfYVN~c-e8UoCaCN;Xd zv$hMqM{%1+a3XXiT+2OQ9KFi8Si*GGm4(<}7#CLC868A=18yyWR_K5rQXk=Tv{Pmw zG2>q=B&3WC1Kfp#gORBLJf1*CDuKcoau;gKj{gZBKMT6^oygJ_X`z`wjSX^K&7ex$ z+pp9%5JJc$I*S^^Egv#;s#n{ ziseUMr>uqlW=>dh7@h1H3DR*5l?!|^koJCn21@f*cWOA6#deDN!5MURbe0&MPD(-+ zx#X0!!EkA4_bZ0ic@3FUZdk-8&8Y0k9zZhN*_*!imT*sv)!N~bx8lK+In_9F_T#td z5dC6SB%e;U1lzC19T1_o6~{5SAV1P%b$w6cm#*6_$v%zki_a(z{Flx(C1U;_Isz)4 zy$JZ&v0I(zLvf`+DpU*#w*Zw4H5@fsU9Y1Y=XuAm*|l!T@oolot@7*$gO3`>X>)*UtyKc8$>O z&W;33`rQ~&;M)9z9B$-5uPm+1{+sL+^iPJ^SAC`d+j)&MKRkrg^h?SA$Jjn}9H}8^ zp&4QrUhrkjCerkX!wYre%H2NQDBBJ_xRf}uhjyp$5x?CFQtN!EwXm3)zf*h*CrqG7 z7S0X^e#>ka-q_5+A<)tWE-rm4fzBhrIEbdhivg4hV77vSYDMK-cv*zXQ5{Mc^+^XR zVI&PQOeumd`*CUtSxlfQ;b;oM775q@!G}TO?Z5tt!M1c0A97%H3lmCWNxX=?yx8$- z@r*Zdbsdh7E6EP(0}Qn`^V>JXzA*5O9K5e2%IQIvB4C)`i|G9vh3euUXhlml+{)+S z`H+>6VEO|gSQJbr12}C_`s~mcf>vn12Ut4FJ>=}zXa}sgqpFKfoakZdOH7da#t__z=+v4Glub~UJ$&-J0>-nA1 z#KOCbT~vkv3q3vMT?jlEHHC-wr=iN_)_xel@fBLbXw}pd;|aERUYsamrNCc!cpJ>R z8={R(D*G7LR(5_{Ek6(p(Uuzi&F9$WpK*2AdQOMWQZv>CP< zEO5a!zk5p@W}xWoyRa^JcGIGHezREmJ1^O?yeNLb^s+Lj<4 zd8kg?LHi8p)UXy5*0I;8VXY#m{-G>sa`X+abZ{KL4_}MuYYmu_jtKDyCy*AobDON& zM(0CM%Und<%y2P*i$;%##mEW`F1X0+?!VqEf2msP`0PIDG0HpvuKBSA9Ra@sLJo4* zISqPI=vtUkiXyU&)r)Ljvsqk)7Br=J2K1>9Qf9&#dOSlMU8)S-c8JXF{w*FaC0$eH zsQNFhb;N`|k{w4y5Ciy$cv&qNan02!E2Pw-?hD`2X}hh?5WDu%np_QjCcKv58hejJ zt6J>;ouMQJkNw2&hCeRs$_-ad6`xs1VKSO%E?S34HNjEi*o1^w)Hzvr=2W4FQYw-! zxvrvA`Qf23_#7&B!KnuQ*xNH%y5n>9WwJqP5{xjG3Jx{~mnbiQRglczHdd&|1ZPQBm1jJS#^HtsKT~mK{TtU8U-(fWTxn z;I?4!fd1*m%Y2YNmzH-z(2=KUKY@{D1o3=bL{}~&Rp3f!X+rn3Tr@x@7{?n)E#k-y zG9yAfbPkYl7JFt@1#PyVD?i8Bl9f9mRP9rIYTw*dZZbM4!+B`sa8q_6wS@PP=RseJ zgL``iW$*F)7I7TEZN+a-yqRNq=&c-+@x0^h9Mi2>4SD^AR%Q*j=K>8dX{VTdZepcD zLDn$D^(4aTAJasABae0dhH!#5PFtQ!^O$qB5yh$h#VtG0S+E{2J5-=L+d(d37ar|MnF zdc*pKHXBPBHQMM8zG64iofDyY!&w3jlOW&(ItvP}Mz4%?)CTB}#rq84x_f{_hspi` za9;iKI&}j9cL;d`1Bd+{@Ie*WSskS%59GZ+!U-42Q^Xz@wcqM0pdkb*+ySDJ$CLMH zGGHcL1^{};UYiO2$$-(@b6XiirwEZWh~fz70E5UMp8%^GAe#OFJ_iFd+1X_|MrQ}W zXC{G0_;e#rYxpE&;yxw}xJ+$qjI#s=(hMRQAPs%QJ=VM94GaeEb?s{d%D$~Zxsvck zP@Y7d7NKmU_<&DEteqkbPZv5|rdl9GHkpzR0@E&bn|t zou3_a8$UbhN&K|x!}uAY58`Jhy+58wJ5Z9|lYi+9b$h?*Y^>JWOjrYjyGJ<_4_jTu z5F^3g4tAsjtU&!A;2w%_ZZanxcKpB#CYf9*f9hs{)a3#Tjz__&)bjhe)b;+QI_n}Y zu(0pJ15|}Q!i8B~_h40&1)lJLne-(gpa;&w&bqF8XFQX3;+Mdcpv?KCEjtK>&UBUB zg3}7z##1x9>0h;{V!G?w`5C2e;^#&B$NcP}f5^{J{T+Vx)L-FewEi4Fd+AT|v$wAC zvyblNXN-P70bbWPFi<}IqhnWZ?4QCpgh{LGJ|Y0Pj~W~Ath@LE%Oswt!sbv_V9#a? z>=(E|19Ly$Cn3W9b#xil{0Lz4Fn;sJW~^Qap{=v7zn;&}OLPZ6FV*MpGfpSH3>*@R)pxgL4P*39LAbl7=uh0ka^GdxxKjZaY{2bgm;8#n)3scb@5a-BV zAEFqjd*AuhHk=nI-b)9VPWN&p^%+AIo2Ozmu?y)k$dWtQ)6~VQ!pPQ_}T$oMNJWKR+kwv-p{z-@?zydL}=o=wkqp zvu>)M!tXceqxm^azlxuk`W5`l(l5a?shnniH2*SPkECBJ=$Cf<%Z++4KmVeigUr)e zca#1TKX2B5;O7keYid;8ErHSHGchwTV-!~YcaKEhUXZB%voeW<0D+67DHDk)^Dc_; zoia1^DGb-G`gQ!gO&`n8+x4sYd52E2TW8&!`sMt*OTU<(v-BSPyj$iakQHLlh%r zJN+w)IVrY{VlIk(Mlm|D>8mOBD8=5P*b<7pM6n`@Jwvf#in%GalwwYbX%u^qVvkYm z0gCOT*j*GO5tV)u#oQDlVNeoTqUos=`y0iQDE4=XB~WY`#V(`R;}q*dF=ArqT@lL? zU7z$_dXk=`Z)ZW8B$0GO{~yK3Q@4JcVoy`-0AkL%cKTQJ3#nJ=+bFhzVxLj$9~4_n zF=7Yn?@;VHioHa!=PC9K#a^HoIX?rJsW>0p|1(#zVI(&2LgyKXjA!9b(!VIx-IV@C zip`+dOB9>xmGegPa_b7HL#r{pPUWgfhcW)hVT7QWE9H;>80ziFsz5A19wkP5N8KSirXL#O)7}R$CL7z^RVAzcxtaEUMD-K; zlh#v=Mo2bAD{Lpky@t_a$=@WzKZre9X& zm|j>7mHBl!rr?iqOp89wG5z{}jw$qm98(8`t_Zyl`XdZNxCUVb!f}LTK=>TtON6fx4j~*z_z?kGbf!+g!$k;v5iUa*j4%>m z48pYtA0li-_yXY|!ZCzugj$4p1oPS)Q#e8-LNr1w!a#)42pI^|5pG4uM#w=}fM5b{ zEeH_^Q3x>zaR~7UBM_1i(hxEbrX$QncnIMUgrx{iAUuokGQ!&kA0Vtp*og22!fu3b z5WYkB0pTZva|rFwpPdoX*XNjKBHV+Jhp+_UafIg(UPJf~!bb?35WYm%hj0|30ig@V zLob9&5e6gJ5V8<%L%0{gfv^POafIg(UPJf~!bb?35WYmv5q?Ja6(Q^s;056!1Q){h z2tOj6K?uT_Y>&_tp%21k2nh&D2p=MRj&Ks;6vBCg&`)zrR)l^CgAiUpcn@JMLMg%_ zgkuO*2tOg5MKFO?(HY?)gcyX82+0Vk2on*eAuL81hVgwB#%mhFQ1oF6!Zw6kf!7|u z={VqK8bUro6~ZqFZPC6&gjs0IMX1Z49|h)PH6|$dQRd&v-+O73!RZ-(3oU|nFdqZ( zqqcmmI6c22Pm7!$zz6>j-nZMr9e+J6Njmw6e@Rf%$|YySa0RbcJUfGdo1#4&`Dcom zDvN2)M@tg?_%Tiui^?CrF&_NF)!y&ppN`pR;CJ86t>AaoW`*Aukf$~L62A}j4aDzr z=S2N+_+BbC;2Yi=d|Rm7iPQHh^0Wq@p)AybgTzb`IerX;IB@o5pV}-RK2!WOPNjg1 z)sNI8etf3rBomNm^QvCHr$%^p#;-Aczfu>={`JUsNq4aI!35-%T9>L!Qw>((eug!%kj!w=axcNgQD=0(8 zhBITI;d76ARPxVR;$j+^ABesG@@JA$zFmxH4c0R1b%OObL}(9%?-Dfb^DU)E z%pn`y3&IlX@}jcu#W^Q?K_3_}u8e`otijud)YW;i4%gC)Z*Gz`Yy`S+z}Y_dS~!k4 zLda7%#FXy^FK-Z^(~pGFgG%;6$<&+;7~?wn}V zC^l98ee><{kBzZ$X;b)o<$Y@~jCgGPh&-*0Ur7%b?!EG&i5~E`(v_mu4$X^Ru?lBl zK*1}Na8F~*T|wqgw++7*%6`zNlfU)IYRHSh>umYjzImicd>P|YONlfV|EY?jMTcy< zrFfS%4?d}(f)0PvCQ}JnqlWDI!TB96ydf3d(=VYUv6Sau&yq8hAr+W~n1b$6Pt&5Y zEb#h!@p@yqSa(B{;oytzR2l^|6&E5;i|F?3Z^rz?t#FZIU!t4>bfnZKM#GU?SN9lm zM#ErW@g~JNdkx=Cr^E%}j=zairI^wvsq>X}0>2bS;JsSEbnuR3K zlYxTivp7#@=?deRheA~1KALzQD;m^i$gg3-3O`Ybc8KIMtgZq=@t=@ihp&?;Di<$L zVW?3=eK5 zCz4Hpx0Weujpaj3Zl!bQQ=d}j{u_B(=v;$diy?XIw_D~mdm z@bfq1xd8ll$^U6kE4U5$zc=A!bYS5og0m?x2^WiW{}LP}i)@B!U=$Y72j;b)Jv0v9W?$I`k*;*u} zy*s_Osv9p*q!qr~%n|BF>d)@fihwFcMpriNPx6^N0jfY`sY{w2)Q1`xL!NB0 z1ix5rWAX}HWF>=74Phb*Hw#v4`OuaQOh5hnL1TX`NpI2;-~Q-EEusEMN9(aP8nz)# z&-{`eXgsgPD760p`e`yCl;@R`*EfOB7t`|y!G!7ekf%jV`@#dSr)T#GnyE%*HL5@NG8T`yp7 z%)VpylM2|_c39-;!sAjw23mzf@a{ai$ayx+x}>%(>4Le3eg_7zI67D{gsiT`ZAhqD zVf+wS%#$Um;yD-bgCg2Pl3~{-jQ|1M$wL7DMKZtcBqISxg)*XP_3F$CDE`Ega1kRr)3l>E|AQOc{hBhg7-QBZh&C=$_@a5{;OV63f9=1=&M!2r& zAXmP%I%OmoRwQazfEucFNcOdgUFQnE!$rN?Rv13o`zMsRc4Oo4H1z>_6fRte%+l#4 z2-}2hn6gM`D4UhW@fZb{`Ie%9 zJ)`&?9lY{ulhWXkvZFR>l(Te%aD0T*$fPuBA#2alO3??WlVgM6V!m9ggU?*gM@P@> zcd?abSKx}h>};S+Vhi8F1SRvAnl4&$3|-P_bzP77=rezg+fd~d^y{Qp zRN2`x1gpVz(tjjP?)fn&IUh8p-iFd)#BG&k6}!&jsu9>NSCIL#SqrY}?b?Q$mx};R z_KMzM^u&PM)36sg2m?pzX_5`&c>%}9C^<{49pqUlvVv))c-`|u;SW$8@#iP+)py}n z8hzWLWS=3j@J7u_M`?c&u;+QJwYq{Cu-+axT%UsBl_ffOekh#WEMOyi0Q(e*RRq{7 z{`F5`EJOiz4~jB`$PcVPN7{E(Lmz-={5%~$>l=8?8yFg<02%P-0eOgbbF1qJiZp6G z@sS4*QbjR-F2~RMP#-|vg^mTm`!aI>$*wxZyCQ7ey#SeE0D=ueDX&~dK>PKilLt&7E{je@J>00;@($k$2X1N$$x;p z5%1chY|NpaT3esV`!e&ntgbgHMQR$Kp(3$*EM1AE1ukaH#W>^G>gbjUJ{+mj6B#0J zZ^$u&4Ow!TT;^s`3FYFYPg9|n0fXsSI}A#XniYfp9X1>f5PO zRS-5y)ypea<7Jh4=?0FO{)T#KOE1r=m--yMxYbLaxp*m1FB|D4PrXb#PHIQ$C5>Kg zR4BRa^>U1`Gflm$g-AqCQ!kev12~E5B`F?Xu23%#gzLWQC6B&D zs+ZH>BTtxm(dp$JbWI3}2kGTU^>QU9g?>c6bXL=^67R}d{>oQ~XIHD`*MVo(i}eqA zKU!NZhtGRRO5^Q}LwJsOX4A5^l{uy<2&)nHBhdSxZ)AwxpJTclVIG3P&Xf-n`~R)jeS4~OyatP-h3rG)GrANXE9UHVC128yNf3SGeygV>(gYob%Ir4qV-aU{jl3zJQfF*skr<@Y~9QS*oV-|$NUm%?@urP=9e~5 zQ$K_;lbv=3)MgF-G@ek>BQQ;(6gj(7^kSZxBaGc*M!+GKiWt*Nj(75}HH=Ks>58U& zm>||_SuxrdyXdwi(7IOF-wF1O#5zfaVz$+}2=5?z&A6i}GJ7+&W9b{B@*EMqpn7p- z5qqnNY(f>wk6co?W?q3KO1wHxjd~Qw@1f0rr7fl^IVuDG!xaAMk{*T-;EmI70eOz< zBS3&_xI+r}Re_t@z86CWQo6nG^7bn zrUuXz3gB@5kbp)};XNgOVmzEe6V`Df6d1j^)%^e^d(LrsS zSwp>1fc8%|Mi&$sXmrgWb*nzU>Q=sQ@PG}YJL{UQ&a-{((ay6M<9O8ooOzkN;&?@V zW=37yR3ys-Fdu$u{$E!jxf`=b%dX&C9cNey542wGxYpV>uBEn}-eg6iUnG2txDE@z zhzV-eo!%7I{0D7=?8pRR58N#YdPT%+c!U_8t-8VsFu&V51C@eFak~4 z7lJn^+s|7Dv~j{A5Yf&yB#8c?T50}u#WD5d8THJsEU%7Z(tqF^f_0NcSFMHP5cRw52q@R4{7!#>`Xx}YFo)-6AV?Z%J zuQyf%x!d42i)Pd>;V!&?^OKw14q`Wa@g1DYMwsk3LjL4@*bF)%p(J5j)d(yyzq3T* zO-?XlUVyoBT~FDyZP2w)6isNrjBctNTJUfn=(KUs@SI3oypPZk2?vVv>x*a9lJimg zHzP!e`A;8h2-$>HE(C6$W>~CnoYKj5@ORde_;55f-{)xa%{h-{Ag;mKd~pR;dYv_5 zd{hjIT?LA3d=z|*tRkw5XwQQg_<4sIA}8U+*l|;xw)!aNrU<~9m|tTpoP_<=v!(gU zr2N){3`5)E%r{v*cWY<+RY3o%qjO`VA&O?P4-~+p_!;^p0nPb8c*a;B(r{drY_GVq zXzllw23V)!GFh=^90BWq^0M+;LxV>7yYm&Wpg%|#CJWTe*@k&B;$|Gn(brQm#miA1 ziX>AkH(ml$B$;AmcQ1;hTEsYA#UNEL|( zh%r7hwX@>LPu#vsw9J8Y_z7{up4mu}0Xsx+JH^Y-9&O0Lw)^ZL9{aI$Sse{Gh@9#| ztm8{@poo}ECzSFjVjiclAIub=boCnL|1n-#8s%R^`i$}_W=+~3H%7U!v8pHF_tC#^ zl*j&Vd3@g|j0Jh^K<@Xz^jgYOYC+CNp4R9!XLTf5U?l9ukYM+bP`K1cH4^8|X>$HO zPXl8M&l*c&h1K~O-ub*)0pC=ceb1ZwH2C4ik#n3payAjfG=4W`;WBj1aPL!RERL7n z@}x6x{^T(}<=R7s*T_ zT$QVhgYHv}HtuFBX56iGlBEs0nwUecD26*xm^f}7gSSF}-4DJ;+d#c2jgI-<8geae zXdc7A(()^11t$q{6ZnJ+*&8&GLbPissi99f>a&wwMej5DRCNRtVkqsFDRA9uZ@3*HMNOmNz}UHky<9+2Nv3(>YK zd3U)OCW~rusWIj+oK+h)z+$Hasy{B!@e__;J zCvELdPU>-jHIo}R6FAB4p=$?h2`Pi~ZWiU&K}r|J1W*?)-JZ-Wsyas%m(3+pnW2to zTw96?wDEtBM*Ea@OYci~g=xWPPVR>W3l4{T$o0iZ#j__I!iNgWRcv3&$y}#yTk3VayXF! zX2R)_c@g#p3IF3PTKGzz4d%w-+{v@BTWWt@X~uyk5R)fNUAEg2lLurdNHTE@a!c$o zol+9>A{`~w(8?=+7kLoPPTezBG^v{Weea#tM4aKGF^$zI-aF=Gd(vhem^^lC#p_0kf( z+CwHX_{512&jQgFIt~(fOeaLIQyK89;MX#v)qx}wRC86ZwinZCib&*PV!sqN0FrO- z2qmqeQ~0QD&lJ(}vnt-Aif=q~a{s}*GP4M+YttgL5*murYYMknT|{KkNZu;Set<$# z4X*AEsae|b^e*E6KY%Qm?lfuYwN<ewKm|V;&R+%d0o_2$a&@w z!dC`C4JsqpP=g}Ew2ji*d1)UORt$dl3dg!~M_)PoNtppPJ4?b-K`o$G=D?5(bJX^2 z6#z@~Bj>ci5buC)#LYt>F<~~4Aud_OM|fgmRcKowyTjZMH$fVRwG-DL4sCGM5VEYy z&%>2OR41-D!#t=)(}|tGCx*dUUZV8wET+>NgY4HsLWO;0ANUQ5rxim>W`3Q|4)Ugx zcUam!!oG_QzE@^OMIetR;>JGSo@)*A=w@Pd z!0E1eamW^VA|^5kiX%16GCtT>AF2pU)RA-m-p|BWS9|T#z>oOu5!5t^C?)JPC<0YD z&ss_R(6Kr31HNt!&mcc)+r?UDSXo^kAR9O-B-UGn(;*3hGom19{fTX~tcy?34z~C# zQqdl{1$!hEC)FOg1u|~6O**$=n|vSJWT~-D)<}&vNSk=CJjseN_7vVLYp_>>wwxS= z9@RFY<4soHF|CEs5I4zfSsVX2c1?6Ve#xZnKHi(VyYMXZguIwGp7l=J^UjR|TYYQ< z>~~?LpcK1VF&aj^#(soaF>V8!ksWXvHdVP?r_YAut95RARIPf$U9GHojYOxhzk|kQ zd)Wvu>BW*zIk)~v$cTVhLZdzB_20?i>BJ{@N~~%W+ls|`biNy{XPs2X+)^0at7rv1jVp5LlqT?|-T@(G(MW`!E7^q3~c2WgBx-bfM1TKx{Q7n@l5p2Ys!km>6MTlBR%Ci1`aMwm>rsuN~ za1D7It`V;k*x-#D?A3TNf+Z3(zC7v=m^fbQ4`q+2w*Q7qf!pq(XQX}$=F91nnBZoV zTjJpSmMsrQW1}F7;w~)aFfnGnMLie<9_1F?{t!U9<$DYu%6d7nE}a-taMTR#JVSrR zoe^hUlN`ea({6Ke>5*XPC^$23tBsGqYGSDhE3;V$jo|rA@z`5i*G!H5vPF!>W{Uryhc9t&mTuP9pnB_$i9l+4a5Z@3# zs>D7U&z3=%%0E6yylob)Ft$KozygJ4&~phPW5RYhhq%fk^(%9txe+ zDrl99t#+ceaEgG5g?O$zgVNEni<&W%>NCYx4N&4?2O{yAVvF(865)LGH_jmm=W-Fe zp8KzU$lq$>9J^34z}lz8jzq_*pHz+(-Z3n(+6*$^)&ZLZAU852%;_^`4f+U zQlu5>AUyL+qc+~iff;!|4QOxJ<*$uL%QvJP!2A5-D;K^BbAjc;bC9bw`!@6sN#-~>FzEZjy*{9)_(Z?r79N``02CrK-&(%u*45l8det`bqxkj>*(GAjb>ZsE3dU{I2T z-aYDZcl0xf=gA!<`*R#l^GRilri>tR&nth9(iYo2Gdf`#3?s`R25?W0CO55S<x4%t*r0Y&5LY4VB7N z_+qj&z@~er7_SQa7zt53T2xr_5k#WIud$9Ng;4jX#pD;e5G1WaL4?Y)1bGMr{y;+XoQsl`JVTZLixNQG z*KGL`3A?<66g0a!dDplKAN5O+Tc&+YrHxj_rXk%!(Xe6PM4@5Zx#$6V802*&#MSoemBZ7;5enyMp|=C(-4*;>_X^-1=!fo znSRFRLn}5Nt2S%;mMx*Olrj&yVB_e zfp(>U`;pVpxF2qZC54-v7Ct{)fVh-}LkaH_QNcbZg*J|13mJtNvhAJX%05()Ri5V{SkH&?0UzVMc~`#lZVUP)ebE4U-_P3i+pJWv*>}YcI_Z-`` zG+*CLpE2Xh$A`vWpHKVaJ~aOGK;xP|u3eKsQPou?Cu=--0yHUI8W1?06Hz6I6&7BR*1mcQ4wMPC{aL`1_hU$nZY}UGaUA z0o9eHzScsz(8Y5o_0r22(WA`^+yfQG>9KMXT z%fMJ`#&W34RtcoQn1~2R$z^MvwHA=CHers3uXZHN7-9kVG!I}r^0av!nOdASe(OJ$ zDCPgOQD5HM&CvzBqCS;2C|MMb3e*3R_X=&fQNG3A)7*}s)BE(|o$N4I*$^D1tCwUrz z+p`FAdp1Sf!4RmMTxWzc7f>zZJ-7ASsg1#DKG_|ZhMEua5Ho)*z-&{L}awG0?KhyQVJE&l{dOu{&{H5fNh&l8O2 zkS8#VM*kE2Wcor9>}_yny8wCdCEoI4GDq4e7Jf?d;&Smc*dVlweS%4epPvaCM;m?| zGW0iL*-0|tSj-koJH>!sWtKZs7CH?e%bhX{=xnbn_UI%NV6#h_?&yayC*2}}(m~Tb zQ0+A~Z#Q0A8k_l5J~Z7wKW7TE1)2`{V*LlLG&2i4%Y<#je#x_F=fRB~e^%StFyA6p zposwJerH+uIt!XZpK7!am}FYllqioCb@uUEFIJzx<+gtI1gtpLMk%Asc7(vQBe6%* z!9`4xMRy_YOuogjF|eY7T7h^z$^DLu`ILTTt(K|un=ing&riRZcbk*|`pxR2p;;N& zp6}IljA?IsK86kZvb5&|OZfs!`qGt2AEY8L>pXgwm&kLwcl+asL|kAo!7U!0RQIcO zLwOjmM*+2vw;TE!#nZ?U8yvIsWG}0==s_l7aA7wSkMyy5?`-2uf&H_6KdX_JnU6v2 zM*#cMGHvd`oF!T&>25^cX`z?pdTH!0S_WLvkgbI`f%`k$?T!YJa(&r@M*D&2OQYYB zt=5-kk*D?bh4lNO5y}#Z1+wfraMa}kGk9-m0{>fhP2iV|mzE~*CntR-@S)OHCNSe` z=u56|9tlqP9CH_hU^wwEiqm)Ciug3G+<7zvw@pvQIU*|iMF8eyQ|EE}lVWzB{53Jf zGPg4s@IVkoqKl2+_6j21-x1Cfvzc%BOs`M)Qq0-WFNj7YMxX6qv8}>A4HBh2kPI64 zQE#*N@UQ4AZCWMKbhbTI&&Ii3xEiqQ-RTwLFH{do7@?)_(WX^6OW`xr7Jq5&VxD>KCZ zP6F2SJ~t(<#_MIAga-F#V$~S^|(TQX2O@Zi08H&EgEv5>ad5>krChV=jceXSb0V2Z}>*YdV5sN`Szq3__Q>LGTdB5s_^%f&NbZp~y# zo!MyEPy_s)+%Uy^m9B6r9bk2XI87pygxY&Sq>0IS4vVO?bW8gUW;e#`;uO{(Y(?T+6ivk{Q(Zg_igNb9KxPZMIEif|rqE!DW4#nRgtpb<`Rk?7b_9u> z^KgpAH;JAU=cYJxOyU{qBM)Qk@jBfODXH4N1)XrmCAlVg8sSmAQ^?0}MF?XMx+CD9 zzxwC!YlbnH*F?3)#U_mJPtf-oZK4Hg!mOIRjYhLPqozc1O^)vV zoXxL@rYEn4HEaOjYZvcpRb{r%p>63p@cJ^uFVk3h4U~cr35}WTbtk}xoZb$MNY1rW zeAR!fNvmo8Z0s?9G811mv?*U!)eL7w~B za_7MgflZ^FC1I@ALr!304f+kjT&zzjiv?MD4JT)?6Mm`u=+jUF-()C(Q$5jK z{z(w7w3gyT=UaY%{9tH*e~F$kY^F5E*~j=r;_L)lZd(iAViNZzMSTNj`E$^4^do3LnT zRW3-6rxy;rmCI76ZsHDlT{c#d~{hW1`cz*Fwv*Uhc%Yv{Xb-+GzCMT9MU zlQ0!ZRO5Rzcx21wt7$PENdmR(4q0TLA@qv!-x_$kqrKro&B)$R@XU(<&XSZfoZm3- zA(6u5krF9)^rMMC+Xu0K&T`RRrK&_KnlC>)gdbjy;~ea@0nb`?2X?uq2R4Q^h_4)! zYkKF3#^3r}2|X5sXAq3EyAj_W4|-nZH=gvp3cu4gdUhBr)6n;!h|_n9--CED!UqWL zhvb?jBhc@2@q7ZoNOxTQZq!RpMK2hK=jJ6Z(2i5gvB$qoZdCtp880mnG5^}bISk25 zi6o0#;BG7a$bH&0xRkF2mjqPyZmTN{hfK*jKD{vv3bAm00Nbb1vmrzX4+*e8!p^>y zy8pWxEf~t(P~jY8U9tgZzN*l5gU~3DCZn#UlOeISEaLlXFht|Y4J>vKnEK=7Rt@5y zc}Xf8+P`T9G5sP+@?z2L!^JA7^v$q55Zz_*Kr9-$y)Fm0Hc7P*!q*<7$=HS3J z2RC1{HZRhheo*W?WHM!tgUx^Y5de)a9J}(uUXw~n|V7+9`u zCb@cOb8>ar73P4SAoGFu#{h&X%S$BEE;f+%pdSg+h&1bkb=(C39JnnP3UIE0;jMm~ zbK|5~INXC_=EV3*y14lmX>9`ca+?6XoB~smYNFz51FQqpmbP72?|yM;bE3 zf~n^~1o40J#}qE!K!sUajra_oi4LA0>{)KGK80){^>ioFI5#J2HSi~mWTdvfJ(ChY zq?id$V$LHqJH5!Uh;b*IPG`At{$r>&ND~;OLVu7V6-WaWNXLSjf>d*@2c%FRkWR|| zxNr_A9S_~sh?51$-T-`YoN)5gG(Vg?iNXmd@8B~v^NwZ!c%Tsg7m_vNggky@Ei0^U zZsq+4EhU~VnZVT#o8nh}q^f?Ps{WX%nf9kOw%@1vli&bR^>ciym#gWs7qF6LidRo@ zduVlh@HSMlAj)JP((KBcDHh1Ivgf13wd@KC7k;Al069{O91S_qV!!khs219ZRh@2l%>5e#Pvd@f@%QcRcz+I&(h;${Qk8@y)IHsp&zUram^t09Pm?uXyQ? zWR!c~UUrJqc!X?3K{WxW{K?j;H=A6GaNe<1 z%f+S}r;S!=Ycs@aNGq2*d7fwvReci)+zV@HXMM1xv7u-BUr<9E_3OIO_88fGqp58G zT+FQi%@_}T5l{2LFmP0ht8Ih_ueM!_gtBc{HbVl*HS?~^0HGYGb?kwedPDp#qrQcq z+6sKT%Nahc-VeTK$NRze77|MM{?7i#eQ_@rmDetSG{HFO8USTjWkPPIlQ~ZA*!IFO zF#JhDiH8lSry(A~0x@pVxdu2Vr#07e(d7Sr4wUb;I5jqWIes*$GeveauXW81?o4r= z{Ho8yW@5~Yt411Ngf|05b~9i|G%cj9Pj=%$EUh4B#ef$3@FKk!GBSe@o;jdN_UcJ3 z4S^o|b(~!y@5RfJU9Barf<@nCEotaSSfVpcYZE@Y`Hu9O@DXD2SicD$v6DyKMdv&t z&NJcrb6T%SaqLTD&?){{Guy*TUY`PVTi*42#fj$}-ngVbNS$yY>ja%CdIzTTdN+>) z$gnYl&4zYQ6C^*B@H?vS6S(?5%~$WXeL{lwr}hy4XuG%>)QkUA+QX-+pBN5wc4jdh ztLkYmF6@qFRxH3@(y8FRa{~K6!Ie1R<6y`_!*?XsVr-PegZU@6_+p2*bJz&+7ox79 zptL#48exV$#zA;%-7Jn};n#}dY1P_wQQ+!D^6=!fFgPDwk1K0?1 z0Q(g5m&QlH0qj$x`Ti>W%WWnHu!~bBa}kK773y*#9<=Ay{CZOx5Qf!TpW(-bWR)s0TH}yXQeg zMYM867rhv6F}FcR@b{YJ2qi& z01M3wxA(o4+hMR|@>&UGPc3WQ)Q#O>4umZk;_mnB3FFO_c}QkyL{Rv~GrkBqFv<@> z&z3QQUa9p*(EC0qfuJ0uln8pgIuL@YJzEeFghz~#f?+b{74TyN4->Dg!7Q%gszD1H zy|{cU1Nqy}9w0qiLpvWZK?~l4v=YpQsz6|_j^=?x+&OO;7rxvgjDSZ>z<8n~_Ccmm zJ9tp?Bm2pyYiT7^)B zFne6C=_iC^<8w`K*>X)^Aed8NFNyFdLRf09X)1yp;SGeiH0UKD3>!*KvLo8SVbr=X z2ts#jR$9B6k6xqPTT${HQW zwdBf;{eLlNe*XGB_DdS>?}13z-W{ZfVOY>kQWmZ!fLe9&Z|c01R*jYnd$;^r^4C&l z_jkSb^VN;&flFBA;$u+Ys~*@bN#QF!v2}d$_%iI5AhjfAx7R+Az1|u7KX%1=*grs} zxSZIH3KqthvOXI@t($2f4F=^)rD|Tm=zB9AUBp|RXoWL7OXA_*%sRfjs*^b3^%KnN zw>w9gmZrox+8S9Cv3Z%{TK{rY#4NA$s)$#-exf3@G2xg4D23qK4QN!>0bc1;)@-kz zRP9#RzmP>Ul;ZDoBuUK#cS`)3%8%0UjjmxTSP*Bj+RnnDa(-CinY`KA_Yyg@0M{>O zuZ+QTA+-Ryo@lxhW;pBa3qX*h#DA25GUeq?vef+{mF~Q-#Gmsb{Y#}okLS`O_;`my zoJ$Wdi2f+W7dt4=B=P5+BnQwiXw-NQppSX{JlyQ~xyR}=ezs%$yzccAda%5;@pFk+ zdJF<8;tsE$s0g3&vlmEJuj-PMP(+`Iwp3l4A zzo*Grr4t^5ZkB_u+3`bT45c<1KNyw8`E|~+u*CejrelalW}`16n8}IVN>0maI6Fni zyJ;|UQ`TYTjF*<= zo&Q$`p#Fk!M%4p`Q=U-in+tyxofQO zbrAX#S2ZnDR7n_sAE=srYrM1s_1QH(Q1_5fwkIGfWn5HXcslo>-`(msNxy!o=IyoU;JHB6q6cl@1!gh9MA)1`Xrzz-EK( z6AU+BFMY{n1-815AEu_o-N@7OwD6FWq)*7sHK3omIwRr6br4 zJGhNEWQh>j7u0)M;`A!+7*GWP>9Z`+NhUI!Q4IMT7uCA{Dg3t^DiSHlX#Pc71Qg)A zCQ% zS|`(@s1L%lC_>Rn-p}_rCux#XK!3mY{o_TS^ql8B_sjSBKHsZ|%Q(5{{@{7tjN8DP z9GgZWIiDUt%XL7kL$WJ!VlT(<7}3RcZC4Z!eOGfo$0wHu=6At?YTDke zl4N*2;tzp7XCq02803#f|4D06%hQ;fmn(&bDgUL7 zH#V0=p=G%uC8MKrZo%Je#9QrCzj*R&+%#5mrhY~_V!Rpu^GiG!NZl-!Lf{oHMhAWWyH|e@`(-<|lQ!~We2Jhycj6fxeWh>Sl zBT&N(FF10e)ZXCT;YIevI%4&L;fgSxL5T*MeX4J<&_rE6^~jS#VBq1tZPr80c6q=g zu{mbF#`l5YyhAPbe#IHNSv{`*?p0MscSQH!+}@TQ(iWOQW2mSy%||^n$!dU)#un@L z=+>#HDMb?&%}Unzq>{~Qm@a&W8p2=0TWgd)T2SxrE*dm09-M~szs`p=R`fhB1*L1% zTc_%TkzUkv4-RPorZ7#&6B6T#XGd30?p$O~Q!$Uz! z;PjZPQ?TxXU~8AD?k7w~Eir}k#OCgu616MCiW7C)+JcJHmlX=JNmk&47oAK zRWK($W;}hHG5a3%nqvkjS&T%!#Y#4ZZbWx?jo_2j^M^QS?R+QO@^8EcAMEWYbJy(Q zQGNecnpma@7MRwPyp8Iv9V4~0{?Fxgn|k88LRM+3QTr%6=x|!Ke-8Iie4UnwsO8&# zxyG!ZlQG|k0RDqHEVX>7;|#<&5f)YF^P*|y?;hd&MdznV!0{0ES^kG|8edojeBR>i z2El#1GAJ!l+HHJvNOV?jb=3+Qix-Z%z_?-FZh`CKN-KG3pHj5J-Xrnpg+p$#@KwHDxbd_K*3Oiz3UfwTWY;^i@XPGz4ajf zVeg9(E)D@eP@`n=sZTJ10lZo7Q$yZ9EZ`?nx?VkV#*svMOgW^4;1$SD5@~xAP#{3j zG?LyrA~0W;4N_@rPlUmzFDiBz4>~L6O4EiIK{C%D@?ogx@@Vs@Ax2@K@YmxVx z%FJ5t8-}+P8=gDDRbo0sa;eB&B<>~-0o6#eom+jX78l*RomZXkpBkuJw2OZ0@!GA&>%Y<>My!bzy%?^N@seEX z>pRUBweG9e(j%7QC+l^)n))c_+yyedzys3Ud-UAws(83-``rAaO1hs~nOT+8q-RDl zsB@D0mRC3Qwb0A8le)P_w}Q!<)(3)h=?&f%mW?Aa4yO`Wf?Svf!)6c$$TI3bO~)N* z$q`Ji0BrBG{8Llc;m7GQm3Z!%?IKNfMUb*9a$j8z$%P+nRz?tnUEB_hNi7@^ zBVFEZT4}irb;5#4djrcBO~PTvqK(#`s=T|xbN{lmin;u#Z~FI1TRh^H8IJ!yhQ3qG zc86&HuL+$e&v0Bw+#*8qKS9gV($dX8DZd#h@3B{n%f(*!+bQAM{@6JoD!K0e)3=24 zYH-}Y(m}0DAF%sW)EYU7AaKqZV%F6JfP(>Fb$4m-^&)=+?3rIR-0Q*Dz2?_u{uple z3-vMBcbQYezWixA^C9`XT@73=J{jCKraGQW)b^nBJtDL~Onng<5FpAkD`WS>}rsXmdMi1I3Iv;;VR2R{6Q2mkNNv?uPtpU(U3oJ;d=l_4v=^yx4N_X?5?*H@d zj%8};?&5FV-%5wNb$qc#an>W&nB48Z#k(z@BIaoy5uF|GP_s00zTKN`(gK`q6AG8l zm7o{fR4G-(%a(}US{2_KW4W23gfiwDuaFZRLi{)&WI)skk#DEqF71BqA{-JWj(R3-8KK?0CD3FCd`QNm~ zBguCTLGoWmxRbEpwi%A^-7&)v;JK2&zB^|)RueW5-r(D%l=CpbUY=PxTO>Ul4K^nL zPXFUs{&jL>bncw#LbX%>>*C<#$D@|RfyqCe1f0X+K+D1b#7OyP7117>!Q}tH@~{2M zr0*{`f#S^ONMlFv{Z``@OKT+W$VSw~qIOLSa73*(BI>MhwUNWFxZ21> zu;81fi{6Nc1-jH9goGFH#K<`}Jo8QTW|MH56;E>{ifBuFnt>gqndnF=$C;d_Mc4IG z7F_Tgk>{GM5a6^K;uAe<96@)W9HD*C&q6suslTrV!bVY#*sit%G!hzXR`SX*=piSs zqyz1Tgi0p;Azn#kawX=d-6bM{?IZHr-*hl)zoNGZX&z2aV>Wg<<$R0Ab|A!`(Aa_P zjoko%OBfNevBQ$5FZ}Bc8oQ)ZQe*GxD9sM|iU}Pm>L|?(X-R3$?kLTwr`}JT)X&&j4)c5j^(mb3D(DFJ; z^KSCaa(9&G%H%QJ|8xg^pWQ8~Jq;bDnb0*U&2KtN^QYu~%}-9#tby<%%E^1jk~@Sm zhiirutoKc$)FY7i0avbFE6e(56yeWOEA<|5*F3@1AX1dek%c|^g#Gf~Y3!$%=%ov~ zJaUpds^@lGtXJwZ3e92*nh@4W5ysRIuk=uGcpAu6kw>tr_1tqN?SPwcN@Wy&2FMpC zeg1~F2?TKw!5kH=$7brGg2@Nmq1$P0!iF;kD*D8=aS2Le|ZOWbx&U4|LiEu(PSX;WJhTxC8wF)QJP<+CoQN69i^#C2GtjLl;-W^ zG+jGN;{^;S0Gp4Nb

pe)+8q?!k7MlZ3Od_iy3{_j896C;aXij^_w(5U#91wvDif z@G;?rduBMM6P6Ix6Lu3El`|au31bL{31|LbhU03&?Sw}Nzb9-Xd`>v+Udkj)Av{d@ zE#Vcyr-W1Po8h>e@O{GFKjeB%_%q>k!V$t*_akFRxP!2e@CU+n!WV>lXe;<&%wMQ! z-w`v!&DTJA8jGUDS=t7JO+E20H^f=l9d_^JC1C#s zeW>^aX`=c$f`;+ecHCW_m@h3HBv$3HlL_7p%@@+TdVY9`CaQcu1h(sQVurKDf=dqA zhDlmkQO1Q{H@vv_apZo#?Zl1`TyB)%!H~)a)x)w!i8j!`;FX!#l|QH`bRi_!#1E>_ zV}-&Iy;P-hc0jm4j`X?FS!>0P2=p2t7wW4V4woa)g=^xgPq27eOfKdn|J7GUVaf>2 zayq>?9b2`JQEYs;)CA{cr3L0u#QHm+5`%X6XOQW^KNkuSd75#3_Ieq-!}S?%ub98P zv0~TT%hQyx`!nHj6qDOAC#PaBbyO_H0C$BRx|q=f$Oy$4;^`UO12;D6uXU<^phVI= z?&r0;~89a~=e=Y*Mn6WH%4SmO_PPBWe z2^FD{F9II{$&5*D@MuD>{VkhloPHRMlz(o{eIyrD}w9XQTUWPWE_NU$($54`o#g4jKl}enj>)vlozQE zf94F5ldvw+S;Qe`lok0^=11AXY%BRlq~Z1^7I8kquD5wUPWsBF^y{8<{d0?|Sma z=BKC5>mQvk-pngQUXMJ!v$p;tCpj`cPZ;j^R%xM??=akQULc<%<85q`@kX#>q9-yd zH*|PBPQ0-2S2q|GJ>py(|38|)Sk2ZIxof5}*v9o93`Su_*NGD|>wkfGjPW=t*)WoY z4o9YBtskrht4Y?{7c5b2Z>bdrZn0TB+sYv(%ww}C%spK5iMgp`zcVNKV~UX&naEG9 zxYvm@%4A?^Z$9mPLKaAiKekmiTInEGv=>b~WGT4~4h|c8yk=2%c z(r{Vy5odhGOKzOONmb`)e^{~_Cz<(1Cg#(V&cgjEGnes2@GMFOi^mb+#qW9IgZ8jQRnOv%k|#2PRDfjM5~d}1Hv!B8|d>5Vi(ZzTL~>y6}M zBjv{YVM+TRM;l34Fnwb4;A-DZ4_M#Q`NlBm-E@}~_o++*3u3391Xjb3;UhCLxz>1I zWu@B^n*_?$=~;4MDHw_p0&? zCB-)NK%Ew2xSGdpUxAr!!;yOE7!QqkuMOIs_m0J@Yt_7!-C(BKV3DOw_!s+Gu47bW zzO!KRZmgvsHePxlSsrXE=!q8ZT6({h2HV(Q?svfhGGqs<=Vd!E%iJt%*4n?o+dSst~cD-4ct1jEr-?61QJ1rHRlk>~GpW;61)$(wlO{a*NBb_1VUrqP8P7sy{HVM9Sx7%o|5+6SVbz!>G1q(yJ6aE-wcIZ^js-u? z?ACguL8r~B_#Gvi7O?8Bi=~x);ca7ib~`dPJS0)<)a);Iy+ko>)Zl_qLoDm^qw;-` z>j$c~`80miV6lilEI4Yg)5w4WT$vV~K3E;RNUj;~nt`$%`kDeyVy3lM%$1M78{4c~ zRU0(u{bwA`O!J?@`w!&3QDqPRpG2oaxkEJ?Y+)Fyp9Sw)&@i3O%6_e%*{08oMj0x$ zhC>)c!hf#csm1^SxU)H`XP#N{u?)_T-tg*golJ+{B#G{?D_WA3QOAv`TVq(b);Ah+ ze877**5|aFiI%{ZNdNUVAxg!sWY}(9Oesw{PnjJ5{hiHk1#^68Xl#_}Uwjq`hE+5D z0;!B~H)<{GP4Q1_^e5u^ieb}1jpNyxmqq#^J((3Oxskb#%lpLPjWOOS^30qhGdxCm zbVgQXW^{(jc!h0V7WFx0P(~4ePz)J@d3H5_PmqTH`PcT5v%>?crz&Gh?J?d3%^0`iCF@G zpZVR!cYGPml>u#IU(9etXF&hqn11ZY=_hL*trHlKIAhX2ufDI888ff~{s7*Kea30N ziF6!sgzb7P^qXE6sJJhB{iHJ}!vG0D>XH2}_z#{gXtPiCj&}P_tt9_~1Dn|^iASV% zW)%+IDf`o#6AnG3A9`~-m4!ooULv8n{FeLFa^o7tDw{9HkVxnTB7N%G4cA!K1Wh7- zXu4z{H8@;a9oG3yM4vMvQnEG>7^TD!y2OR6u8}3QP6~=dZsa!_sE)3ak803w{u?zS z(kSS+6OA->SfwjEi(5%`Ww!d}1EH#9nXLv(y4>(q(^w?E%`W)V^)sXg9mK^*!rbc4)J3in!1n3?TNn}tO~f0dlVf;ZD5$$5H`B z@o?8RHit1K(opE+7}P6M*NH=VA9v_b1=)S7>>*&0en#}|%!=lC?YT##cJq_;X}RoS z@`f|^TQ3b642K?%@lPCy1~=S7g2LH7qU)q#>Z5z)XwwAmO{S!Oyzyqo zD2~Tjn+SR6wJ9r16Wcq@2TQ0D>q8*3_wsdBTA<>@nZ>Mr%VAVn0@p-JvsK0mg7pT5 zMCS~aSO3>Vy!y{EF=)U)P>As>FH;vHHv|*h*rKIGHc^)mkUOD9xB-$mpx_?hCD7{< znPl*&&HZUk*JrsvL<1RR`~L($ojN6)1|j9c$(!17IeF6XGM6DtgqJv&$_|HQB+=xt zWF^CT+HeCw+t|e6butrL-)F;3JRPU+2=ujYYESqGfW%$1o0Y(>oAL7^DA~3PiAG#Z z7KlQgGTlz`G*O$u5e>R4-M$6&OJwWa*1OOFCpF@IlwA?_)M(G);W% zaIe9OSc~BAYs^1upfDO%K;bz#IODSY?Pn+A9hr`LmyCz5vVplg+pT)u<$xLU8XgJeEe}Z3Ia9mnkABK z3#jIFr}-Iy&J+fb?z^e^RwviBIcI^1&gm3tTR~_yjFSy9$iip!)r`C>}LO3m?(UEL|T+kl>}7;`pGo50fd0`tO1g`h()SS{Q=S|Alh z`+V}cbU?bph{$p`CkWUD7sKcYdM98^3;audHd?l?Tw{2lTV-&#JUuk;JjY@Emgeti z=uOce_ix8Oxkeii0jRQ%^+C=mYM`UNJnDDs z?`38+>kxES9eA*pD8V`WSI&A2zCTJA|YTRJ8^P#ID zr_Oj-up{{o94s<|en-454H_Af zQR3!|!mEfEc@Ho(4SF|8>l;F&Nozh8#-Akr;PaPqe#=HvTeopv)Cmo}sA1K$X3Wa2 z%&1t#QDau8O5Qm;ZU2C2zmlkFEFN9OqV7-eT017)#NvWFG9wxo2q=5x-%_enpi#s@ z^}g|R$U+IuSh*W4PugK(G-~}OQkU+fSCApQj*pKjS@fYoIQ}Uk79Sn-9JaUN@MShEP7gcglNc z7*DG3Z8+48tjlmjwhxq?ye(fe06gI7_%F zOAt!QEYoc6u86KC9Lga!^0-HSL-HGrWbu@Mn$4i64A(zB^2Ns4SPI)TrU-PmL z9m(8Cs5kEoI`_ST`gu1t=%`zG0j@jrSNWB%K0`0y==AJJXb5q#%YABfD<$f8eG0on z{{c+ulh|Feok!-lOx<0`zR`F;r8YCzzR0yX>e9#ir0HR;%u&6XEIeP}hwPDiSo%gp zhS8WmSO7)O=(?Na?WJ7sIJta9t4u7WkkY;SGS8k9FkCDd17L7YN z05W{Pg_8959Sh~NvR=n zxuFqNxFk912i0I=C9VNI_!w;L5k|Fug#u;EJoifgsj_^-xU4btH?)ugDDJv$oL`!g zox8z0zs%E4mY58?EHQIFvQ_9!Yd)k6T!wDf8`T_ann6Ql#Yfi-YAH1Zho84J9G2nvheD zqklWH9EOG&5e=Vc<~r#Mj4hNo1o1~7x|-INdM1vC-Y6b;%1m${JdkDVimsE*1r0KN z{CJ4a;gK#?xq=g5gJP8w&d!OhljWj*GDV}+`(0+%aOdELR!LxjfUVGc%*}5;$!;{C zWPh1YvWw)&{YW*#99^dY&@i*ugd^p>@0mwR%0X)GYC(LBv~rb#6_XCrE4*#IkH6CwL>Yh1l#qz-dp;|DM zX*@O^?9*6OOFt0&ul+s}@Fra@cr@h;9YA^NH}?)^psUl@!BKo!>)_ zYSY12>umT1sKf&X9+APCGngaiH@$t#|8Jw*$fZ$`0t>pY66bSMr6#o z73LXqdbATO4kBw2odr?l^y1wBz~-2WqS7jg`zl>pMRD)MxQe1=P@fFm9j(kNBe8mq zNBMhq^Wk<$1CAl1S`R_B9)db|Z8->jur<^D;&JC}EB z#bc=OMDrxq?c|cqSMsqkjVW62JDP3!o0^UDx>k3nh((QiJ{kSZpBD@A6MBPfLC1+2 zAP|MSv-(Bn5>Tp^!oWF3nXCSjYyo_yfrX$tOU8fP(Uvf_!V2cRsDd^igEcl+y*kSr zEdL#ve|fyo5=zT_^r=ma(b<_6ze2RX>$e4uX3TLK$DnRUgH?yP_8bV@h}g+Z^x43A zsqPaU3jA7{=??XjJ}j)x=9>N2hxkqPBs;ePdj>h4nz~%yk#k89{~DZ|?{$R93L{^4Z6=CBkCae4Fe>_rt#+Q<*w% z7QL?GqAr^{R7;#}YK%tzJ4bf)`Ca!*b;h;@WAv8xsR5n-7u|O&=_;OOz$&UYqp!My zANA-bXQw6J=(*1a4-9F)%nNfcR~WMcxvTdV9%1PY6tYV|sE|6S$rF3NI&$@$g{N%3@>z^vW zvM(@<8=}kMt_e%orP!`G0FMoP9_ocg>4lrPOFi3g4ojlBz`NH!L0{tJ`nGqFx4FJG z18lG$(A#cU(5w%-MN?&uXnu>jD^r(Yas+3!TZq_yw~a}7lJcVd7AGa@PFylCSMJ&U zjB(C_amh?H|6L5wI7W3Bqgvv0V#IK_pKYJL4;ekULQW%dP$RO_cw-EYbcU~kAYMFMZ01*`t02i;6?rcQ@z!K1rGP_ zhM~ECI15DcUL2>vD2g#OW#s)AnsS5X>F3A}=uLYX(m9&6aHYP&-5+m^)GZj>nU#); zG*BgSQmIfX!(W_blH|!Ao+*Cb&66`Po;P7ZvL1yIcmS)?N!y!sU;8tbkUl0vJWn4J z3y2YKqg;*3gPV|$Xypqxp;zJlshvM8)JlBrn&*iuGqgc8z*h3@cc&RIw_nRZP+s5x z0DZ8h-t|A^vFR=-;o8sYt$>5d8qGhwo)6b>WEyiuqtN$GBr7CUN1T_o>xqgp*>e!5 zz{y3as~kO+r}IHGfZ11Ee+G=`*)XD80`F;#ZsN&%mJ8s)g?9QNw)j!Q$`Uy4HA-zrNos4T0jC6r|~FcrjH@KFMY z(eP!U%n@v{tHjZ!fk4cbovr=TV5e@wpa}+BF2!?b9jXk142iTlo+O?XXT8FCMSZcw>}V)`JLjisl;h-y{3#zjDg0uW!c2f=70r;&9CA!;xZat8npE zuk9wEy0}GfrY3dyn}RT!tYz5%II%az;)l>$Hammw%d$CTe{RRiW~?k5LsA*(uosMx z$Y!*q=I(mDMW=JKFe@JKO3N)E7%Eqa01D;tlD|nl!zg6JVV@YI^z##=HFphGHMV?s+Mc^vSp>YYtD^ z8=2IGM8hN%nbbUCeAv4pT)Lhi3s2rPQJpn`(Z}zsCp>Ar_%hSP^3oi0uN|pxVcWm} zPIWV8l;+3~Og$bHJa`po@Uv}n5_3NY=(ua9Qye?QU#$)Lgha=< zV6w*@oG0@DO2Zr}_Bd`O=j2`P&~+4nnmM=kKn}Bw zW%9rZpZZY~*JE#!V0gDeuz~(t+6*0KJT&3VXke*W$kH4~pStxB@E4R`r_C4QPB9v@ zYqYr3Ds0qiLRGkGHP>lPgHYo>XQ;QSftP>EouesIx@vs4EfG!b@|AJTSAYIq3*@L> zzVb@P#26dl>nZ1P{T6BgmwxKPGoilGn^Z#@%7&J#qR00K{9C(R2eV=mwuMg+fN(+uV!r#j^CNB#Y;l>SgW2JC;yerj{Wk8|8 zN}1bGe{dNY{hF)jZKSkX-3PH^QPaNRG8u9bt*+>X1Qc|zwO7dQS{*5U5su0t@7h}L z=0)Cha>e|Y;a$TaR2QDy2zy16tA%~IVs@5UD1A}=h!^>r{u-lO%0gVCFNv>DD}-Ak zi%TN`{wt>G`%l3!|9P?N#c3>trs#w$9xeD-R#CiPX0PZ}UfqJIBbR&L@LwmDZ{5$o=q3i z5tfs#{hSy1+jr;T==01HH}Mq7HQ?|fi($EYj7b8a{q)AMuYje1N9!Y-G$`oUU6?d{kD;m?~z|RoH z8#yO6L=h``q#gROLm$CA&DU8c%j!vYKl}`7aj?MKnj(sNC;y zr|_-~=kQ~cuF-hFT1+0*dyKU z6X!f!?96qC+JsJ|;oIS2w3UXE??0bVEcC4nf9;t8D!@ii*!97^qG#O&<(0n4)SuVLJAYIOjw834|MM}-!bbx|U zx;m_(dc?bmV?b!7;mDo*GGC7>-%v3^?Z3d7v|5R?e_j{%; z=zWw4UK*UV*imRqT44nEva-H8J(4vc99UIQKeKbhd5Uj8)OTa!pweZ7N>@TPDQKM2 zcY;(m*`j2MznO9$!Mgd;m*?5 zGT3p`bt@B^OLO!|7Y5A{$S{8kHLY?84Jg>i z^5(Ce6*W40vgi?-ah0q0c{d6E2`%{_*ivO@*2WOEQGb`B zeG}Ec7Ma+h*@-LY1WPBPIZr;dUQjITEq<<>|NHxBexu=$HX}f1_CoL6f-So7?j@UG z%WKgwti#gWaHvpP4QCIFg25aU3X(-zvy(_rbvWU6*bI=WS0ws;#Y z_UIOmkPpabC$%{A3N1D#Q(yAnPz(Ipf4e1$gFjs%=4C-%zrkd{31#4#x9QQkd}-W< zVf+>x@ek|>u$A0s0=6N+E!jcuT4%wLK$C@pOkNG7D=1y-4&{m5%ckshI2mff(_}QT zL}e6nB6`m1!YrP*JbrjgFW_kOi zE%JUq(`xEqMY(Iv1!tkuyqDwUc2L~rt7FA2B`@X8?k0tuM`4tNWppFpseZuY0H?r| zqOY>6NF}JJ?&_1K@vgNMz2tP4>;IJ(%OSirLQB1k?iai-)_QmFXM=UPqp1RBzm>ZN zax9Wbb?L=o$$-G$sE%dth9WE`Z}&z6huoutCei3q4X5soQp5+m2#2bPRFeAEMi$AW z*5Fs3nHR&)9%VM&kp6bp zoFho_5GV+mP?aaXFpo>BDmK{z!PW`*&14L&;_P(z9}Kphia^g4k1;Q6-vVNAItWKV zzwh@4Td(y`yz0-A@P=UPWPfR}bxQne*;UW*A^uttY&|9Za^+Q`=_{|TN5v2`qW+-;M`q?!93)eMYnK?EQAobeOO}ylmQ#z_ z-8+N^h~SU6b>AMY5V6ZMddo4Y0FSZp*YrY<;mb8PmSG?DeP-b(p54iFT9O=KUXiG-zW~eb6YU54sES_WJ|U_7?a+y6uOA(x4iqNZS#zxk(&H4yWzd z27volulkVjZ0VnTX#SY{Hf^3RHgqzy`E-Al0Qm;Slnx{q@0Qq0u}##GN&XlpjE#5j zz+lneDn+?R5OIfEHHHBwg*ti2rylLa#U8fMkb)!bnjg!G)--<`u}Kr)WwXF`3Yu5^ z(^IV=yw27E3o)5;TqdQo4sQHe60b$Txu^P!YX_@2cWK?B>C=S<;4g(sb6g2Ak$!}! z4&$`Nl%OveVFbI10TPoQn>pocJaRg4I9eFPYn=?cKYIMCYW&R+` z>|_-gJIIB@`0qQ7*XzH^fRo34o6FbrSqt{mQA6-(p?l#kD5<&%WuvZgC*R_2P4heX z1q;d%c;<-)T76ufq=8!faC2{IU?&*`J=Xd*en{WO52>sYS)7NMjnLeLowR9KX^y*Q zr?go{Zdb)Q!nc$=*&lWbnpFnAagJNSHvE;13Bga9lwo@iLb69CE%Y(I)JwYE4W$Ko( z%<|?Oq2-ER&@gYVyJm`h$o4yfr5?CuVqP-T7bI9{Oxqv^ht@N<75!wqM8%=YJA%6* z_zTLqO+DD1uIml&QTMx=p^F%TtKBKlP*M-n2}Si#c=93j(}Nh<5Z38|U|lYTtcADy z$4Q0IW!mKEYg5xD0cuk$mv{ZQoAi>73EpUf%Eld$XSYA}7OJ9p({|yYbJy&UB{mB3 zP;5bV)0I#|V5L#oqPe956C3d$-$`xpU)8;mTr6nI60Xrivl9Rm%>fv3hTQ^<1~*f3 zf*-UVN7W8>Ux7redH!?s{%O>kZT>;_$h~wuyjBRr#4H-denb7$y;y zY6pK?|0olvPQAQe+KJHoP%civ!yyO1NcQmyzQ19N#H|}5zmfj@HiTUK7BU&g3hLN_ z{MJT1{HmULF_fJfzy_VLHZ+khv$Lb?q(oIQoU4G2(zgM3&5vZ2dAV^QkVt}*>Q7$f zQ$u4_E;Wlas}*$zUEz^o=5-+=UFh(}aPRlb8$)OqDcUa$oz4YR>$pgyw{DsIE(#U$ zTN{$0SQIMa*Sti82JmQvM(}HOWVwt>LufF+`cARV#meDMp$k*L<1OV{p+De%B2#V_ zx-Vv0xnImBxs~&qe|+aF##4EzSBxi#5zebV>Q5E4-(tNlus#^q4@3a?-et?v7Sy*e z*=pKchT}5L-E0g;+OS51SsWBoQuKM=H1s#XqfwF-dHf;Ji}2$@MhR>A$;hN-;nLNh znQI$Nfk#>&a0$5Xw+#+452N42QroDjy;K&;g>2IY<-TV%`VC zAzAH^UHOf!8^dpS!)She>d*f?9pQY5he6UwN(sqlV{Xooh87Z|shYw_i``;^AGg3& znCtv@=`@KX9BQUvLZhs#tZoj#Nc+7}La^lvu578x>>qn}sM247f9ahfVR z>XiwmvY`yH5RBH7q6~uQ%&Ck=L`tAuqqQI+1)yBbBunAywQYN&=6AOz)7=yKc1i2@ zlweg5gE0CH;$KOw)>sef_kqe;R?o?jT-lRk>ium2mF=Q78 zSB@-1wM33rgdEr$G6fAG!3Ly-qQq3fwsrB2@KZ>Se>#gMC#1KP9~}aKOM|Ep%}9bqE~s`#F5Zy zn(0%MZ@wsLMZH0(vJ7Q2G#}Hv>{UA9lGo6)PFQ;4hfPu-_}b-XkN~!;2}hX2kO0<5 zWFWu7=3Xb50gM1YWf+CoKH&q@@N8lQYU=ATJ(F_a7D;_j_4%x}T-hS33M(ZWD{sy} zMEA6oH&}e)%PH0pKUxmeM2iZj>?vzQyJ?)UPMRW3)EgkG50LQK9CJv*#kp!c<7Mcr z8i@$dghJfeCwvg6VV)rxOBz1r7WX4T##-p8CRX&m$@TTA&)`GEu%fLrBOH?77*@1P zKWnVWRU3MPHxnf)YtY5Ww4>f97!>m#+9COuH}TsL+Rd+2qJA8GhtZTm)v3>e>FBdh zoQ>#*f{2`e?vUfC@Jp?;_XjtlJJQY_{^x}zZew;^OdR`0vtFHkcn5j4V>vEe3mz8!sQ(%s z5C2;ifiPo-nU9ok5LAoOWq|-d&D3s*E3Ir(e?4(_ap-+Egz!_TX~gX&Q?@JZr}gkr zAT(+v)tbLD45YYnftg~J`Fiuo%RUo)MS3yh#7T889BK4obi5ZsUW%#SY*Pofo^TMP z7m!1BFAiJ17!4rMz1XInKS^#G|FdNL{a4b|(1}woDsf8EfYAJ3xy>ApCdLCQtR<7G zCZY%<6jG7NzhZO()#XY)XbMNGP&kCL)-kcvQgI#%$#HgvcBTxW{3J-t=UW0)t$Bf7 z)GVaxAAcw&Zv35P4EA?5zmK>qz>~?-MmA=w6CO7{PK1E`^n21YX_v<77kS-s72;+T zzfYU;7}DtWyR*d|)6N~yMhI6eR&U)R!?2u7G+5sDU}ob zQ8>*o^}Wl?drdg7B6gAUuA0{1MUZ=ocXgWjWY|c#Pfa7=d-{#`KdK`|Y8Aah<5q`+G%7mx}wkD{GDl7kuKK4o9u`Pu!&Q(l0Qf!qOLB~NpQMG1G#|G^_Y>+ATN-eR~IQ= zHq5&k%n`R-K2;BoDuQGR2l$)UGA>$-$+%3;Z}X_-I*34gU4i#SIe6tQx=wDtYUDsx zhS({08k_R|&4N)!`k8A*)}QcC;GK+h7WBY{OR-o*EyhsY0v5dH^gR2{UaoF{cJ=g} zy`T}0qu2^RBNkd~UR^OHGB|&h}AG` zR+P4ep><>bCedUk?Tb5)3cz7MYFpPD+MABwBiebMdtn*CmOhx?qudK`2mIj`WW{cr zKp_Z=g3ozq&oK;Q0>_HUw#B5|Vp@)*=6cr_v(*;!cU#OVTg(%-m>OHmOk2#YwwSTD zm=U&^3vDquwwTVgm_vtC`~JQyW``~2pSGCQwwNbvF}1ds*|wNFZ7~yUF@?66i)}Hz zZ82SKF|A+5`;O}|cSuaY>g6Tw$J`6WAPUPX_rLMwRZ?Y{5{xge%WN_IY%x7;F;OU7 z$;A~Q$?Y-N8IO5g`%`y4A~&^<$TO(xCii4h zUTVz2FXF>&ZOZ#GYo45|`_a^xAGD>${0(`>f6_a*Sb1^K8NlnaA7DZ80HR%q&~XZMK-FZ96hzi+Ru%bB`^i+!o`t#pKyy#@iP9 z)c>T8&mV1jy&yex#JZ%E1Djs;8r$I_zSxtRdF$z^F=yta#^jup8dGdrG&Q!xcS_&X zT({cN{P6A64&P#nxy}|d7pn-#i>9-!UvAUW4{*{LzZY%yit)HK<)H0dR& zX{xVHjd|+L)V|+qTZccgrJ0KiL2{eRY-v_vJu5lQP+J<0KQ+zRQ&VFOAa#~p&VPER z#x!AMAURFv^HS4n)?D*Mtl=-VnCXL3bIr4rJOcl+$#q?5i^;LYbhgF#hozSDzHJZg zu*Lk-7PHzG^Q0}N))q6{7IUX9W`ZrI&=zyCEvC0ErmHQc)dqh)vc>GO#cZ_2tg*#B zWs7;#7V{%pOoc6`%oa1+7BkcqlWU9VVT);l@|(PVKC#6#*Sy^ zi@Dbp^L<;)7+cKcwwV65m{V*q4qMEzU8y_wfGuXx>#1oPZE1>ayJ@8@&B!ZLM}Dyl zhWD}6b&IW>%AL0M*v`Sut*L4JJyL6bxHvUtdV4M{*CSV)`LE7!{FLw;!a70&;cdcx z!Z!r>R(#nK@(5l+IpH3{gMb}2jR=LF|#_*5edBwR_jfiQ(Io$xSW3E{Vd^@LXly9u8X z9IxYVjnJQPIbjUp`-FQ5^Q`c5{yt0i2jSm@_Xr0G8M|gUdJ)bi3@2Pqm`u2zuz>J0 z!ZU=w5?&^}L--#dO6d8<3`al0WrPyK_Xs~AR1tnc_!Z%K!oLV_5%v+jCUk#uhNCax zQo<<0B*NW<2M7jXIpNQQdcy034+%#IUEacP9N{9uHH7hmI|u>7Lc%Wye;{liY$xm? zd_m~c#5@u%AQTWv2~!C(2tmT*gx?YVMtGI*U&3dEw6|wCP9+Q=TtT>&a5LdP!hFI{ z3BMt%BQy}+ChRACLva6x{XobgcnRf%dk7B_B7~<2&k;5e-XMHTI7;aD4ts)d389EE zk#HAb4k1kVCE<^Rmk2uv9}vDIWJ1I|gD{A26=59VHo`1Ih=7#tL3R4`G0sj-DsL>t z!q?29bccV8Q9Po5=7{uwaB1HA%SrPIS4fQSiUvmRb;79$bP|F5O(LHUPY-&n)+fk@ z_AMgA!paMm3Be4Xn@2ml7f#gFvdE1eGAC8N9q!Ob{V_|8gi_5(CG3%BwZKG8U-?o6 z!B!PZ!{)?TejR9=Y9eqkET_)G@cRgYx>0fyMEkyn3vsu621R5HDs&jtk0OO|1lQRR z+-vG275;sm(`7?f?vNLVG;6&&RalUV&GdgiNqX$KXpZIU@kVr&Mz}*8&HO()aemS0 zETnm%pP9*jd4~+LcAbz5Q=RdyqR|72_0Z3ZGm>PSO3azO1c#@6Npst1okko~%^sr* z>4M>yI*S3Nxeof7?;oxC7UL`0yn!DhL@MN^&A%pxSaWDA@V5Bp!L<;RQgCTZ4T}Nq zyeFKm|hqU=nj$a0^+8gxhM6({YZHps2zwlLXtt+N~Uxic{X ziay36(Zv}0kjyaB*!!I_xbB+VZR;?Ot3D^C>X?2<@WAoLXR290B_6*Cm6`GJ8A3(z4)?Qa{lia^I()+Zes)Or7n_2| ztIsy{RPJMT)aJ34xtM0%0=1G6kdYXiT>Xj1`+l?j6Zbbg-rvH+QO>g}{Kt>&{T&=* zVT%2B%w*N8E*zoR73U6)am^25>e#dnzFl>>giVTS3MM91=^t3~#VF%rLCCI*&vq9* zA;Y21JwK}0YWJ@&R@y3t0G9xX_ATefw97Rj&uyAJ!XC%(zh$B6a+t0bm|;n+INhP; zyjs!_p7+_HD3(;U`fo>+CfT#DDTJft0y_{lkgr&wvozpDG;!7@?WD9Ho{<3Omi9=W zf5ITHYNLk0Qx%snTKh!(lHP?j^EXNES4!L`^5XICh8~l*ZK{iOciv6M6ZR2|2C-HD z-SJKaZjnO{9=H4Z6u<^UeuLn{hiK1_Y6{~nYbVOQy@^@=_h zW?h=XRm~`LNq)7a>7A$u4PbU=e)ZRR=%+tk=TlD-s~PoL6!S7Zi^@G87VtrozPdab zTd^ko7CbN_K^R3ebI~U$ujnZX&+r%K4aU6T*!%?zbMwT|N`Y=+6AC=2TLV0sYrR|f zv!~YkZ}f#xiAJ}%+!qe)z?#1lp}HbOD~q-<8E9=*JKvP{Y*r5#-&qIY%nYrAfFOZs z8ZU=;0kIx||IBNdfw|M;Xf9#0Yw#2X#PrngtPOB!;5mrsOQZuBWA z&I()*{2DdJm;j=P9%7i{p6Aa-;84pQf~J@*>^B9!?j*t};w~H0W7`0L4V|gQp?=V< zk0W?>Cv?!i?&QC^;sXGjS@o(0t7`c$pyFW?R}Away1bU3=vx)lDG?%t?`^wzYPi@b zip7cYh-l}r2SFOpDJ~axutz!W4WxY9s(;ko5g03wB4>Z5zyo=_&QtK}%!}rTIay<5 zb^%GR^E`AmU#jPK$Krp%+cS~*a~6!uu1Yt)GCs%d8oJdkDav0*6C@ROzS9kN^#hdN zPwcgwS}@)-(>=$9>R&-o_CuYFYhC-DG^2|o@xPCf`xcy}p)5Vx7~>kHBhN-tR2SeW zC~|Q>s|Ux@A6kt1{ipHj(T&eCy5ci?r~Y!Npds**I9r=^C>&@h7#g^_;HyA6yNDFn zQaq@OyTEuGUO3Qh#?sfK#^sec6V)H0=ZaMU*S! z0%Mlb7?(ACoGWlvsv#bItL3A>m7+G>YlO#TO$~RRvSpMj?PhCcHM(QoPes!{n+qxS zCA%AwT)`_Hf%I^C_&Vq0O&UJ|ULe1um9sUx?anFU3jncZ~n z!!Du4$s^wR2IBV0CygSOlAHtJ*5}yb~Or9ABkdBhG3qFD4m&DH&#WXc9_}=)=Xjo_RUw z32ak8mU>zXs1{<=aXF{H8~weE>0CV-=w17M%O!;P=f#H=#`<r+FQsdekX1I;@ZGsqceX*+1!-715 zyD_nxgVSkD>y7FSrUBpq)$5#hc<9UfXJaq=SgXHN@K_6LzP~_OZD4531R$EZ=Dn>9 zDt2}L4jjan4T7ijs#D$;P?~=AVpAZ$-smyBw9S8kwf=%fTm9w1qc|A{iyD25BpDm~ zd0R)u5(eIV4*!lWQLZ|jznI(9c z_Xy2?iJdY0dKZ2wCjkV^CJ*ZqZ?Xs?B6!Y)6uQC0EK&xX1#kKLbey`_DXAxBEgCbV zdQVzysoN}EXE{y5W6l$RnQc?qwRU!PV(c}Z&9EI?;lgX7l2_c>J6((zD-+%+?x zYZ=;U07t_WA_%?9+)ok2{6o#;LlHgGXxjI@ER#{r;TgvRqNDV97aod4)<|t=o}o-3 zkEoCE>r>ag{2rSsYxvmX!r`$d9PX%ywYrE*DMF83be$9$T_^EEEb0DB)2i%?a&IXf z9U1E?7&XFu!`sH?B18>8hgw6Y{suoMH;DjgRboe1gPUHBpMC4aAHuH-Hi2N>Z;ul31 zex+pf%vQOImz(9OpYvv}Cec6=Lq?NO!briub=B&IS4nC<9-JS;!`%?2!ABi-zmnXEW8NiU%xm_3%P~(+9BomDO&xD3Rb9rg#iqv^zH=q2v$?dbD7O_Q zz1t@iQLxZ7^{~dJ%vF2uNb9WYE_oETgVgm&US;p8Mci zcIo)bXkGgg=BeKT69uO!iOH@uHkGk5`Dk z*if{nd}_n{->%PzlW0z1US055nz?WEec0SQQnXLq{jyx7>4tezw)#AtSnKi4hcI7v z*zAaU_PnHSEIVX&!vg=pR!C8L)})b$20~rbS$&Ie$0Fy35s`^CTFsrxeEzGA`t*TN zELG^eA3rBZs@&PuIl)Wn39;QeA#Q%mgg|MsbV5pMU=i#3#$*j2;|iRex-oHDsioRaZKe}A;_~i3AdS=}Zf(LTqB)j92;^mmrq7)JV1=e!=*UjuGuHsglmC6ueg>GBW<10f7#*yWsb9B4!A>Sax%s_O?Qs*aPR2cKKBgM@|V3}$587tbDStuWmWo}64 z+DL-Ba!{ee^nqrW9*ZBZp#9;}m0>KKVisZ2s_-Q2%q|tn2%;n$dJO}fSS2#B7`{66 znvDZ9X|?PeQzN@m=>DD!-fBh* zx?^>Nw?>|fG%oh0cTg@i{R&E#pkb%)5v5Bo94k)+P3DL})nav=fyrsnan(I4C|&9= zGA6CscbVW)lUAR!p~gm;KJBbx<7axGfHhS9t7@WxDR>%3BbG(+436&=~wLVi$#Q~*f>We_*&-32$RX8=D453EaA|auE)09%6Wxq3~yn zv0N$nyWsk0yL#km)+i&%aIQK&Jd!b!5p$^*28icB%X%s{QPhBc8~`${jx5ij;s$L< zmP>~tyrDnu*m^9=iHz?(K&wTtbx4FH<|d-W!N%w zw?@O|`3sJsXYQEUbv*O)+esrG`!B&xTl1-T8wWTXt(kcn!CnL}UCKHr939O^k8ee}Dt@pNW2r4zpPFdF zddjihz~Z&iS^mTOYIvB~d#&`S{D+&P8QPk#&^=3+hDW%Js%4B{Nw{iRLDi$UpA~8b z`**vMnV9`(gvt@PY_ZRtzb(CR^YvB_|jcPZ57Dxx=H2|=6mEmxbOO!wp!<`!ly zaU=i*@uH`WaRB1Is2U;Q%hZBwFts2Lei8#{@f*LU z&!CUa`O_N~P3H!z*syN#tbGjOl|{0KCuidaA=-bPztc?3r&CM&i*yC&9$$s?b~S&w zhHnc`_Nd)OrsM@^L78%cUR%7gU0WFK0A$zR1%X!oHIdTZ>NdgrvHY#Z{9bDr_YgNc z9`z(P-09*On#t5#Gsb$WPQMW*ljIF-HYR(*eN8J%ToklXyGN`R)zWrpk>=rTQ`-|8 z^FEhFXk>o~6+6P2?b#buxSv!QI1Pqbf9vQ*W*|?;`g=gZ4|Jb8WsxT9ZeoZg%4h^~ zCgQ+UI7MwfrD(BW1T3`1oky`H5KH ztcCJ3xu>F0?WX6_8tqQEzrGVy{7Z6I?8G!VA{l+xUAc6UcmzhhBOx@15aOvS&}gQW#cf@x9{is}Ea<5W|dz(y|&xr)9}P zpgrdp?np^iGO4ffhH~|UvX+-?RIuJdF$GhyXVy(++MX37y-eWPVf49cWrjNc5@x#C zIUxEOr)M!n7qX>nQ}!vo63qvi7KD`o87Gh%oab~vu@L)~rXg5ugg!QAMrTX@O7zE# zSIf#(Gd|8WNwh37VqF`9F7(w`)yqUj#$xFSqp}wO?GhBD<7JH+ZS>A0?Kfv=6QI3} zQ2;ZppTish)x4wtS9 zPku2RsN0f(I`n!O0M+kfhOiMP5Sr5AE@9A|YhBYCin7wg-5o}uv5MN_uIVYXh4Z0&{Ut_MoxGoMoyl`?7l=q) zoaJ&*2>WhtBb=8rh#jK~5A=}nkG=W7q^jX_@vI_t+ha9F18eZ`0xGjs&D`=KNA`=A zohtI*WFe25umkX1CkO8}#!Z9SoH-Re<&bJ#0qC9kD?o32_QvI4H=DIqY#z{u>)o7a zD;VL5Vb^iE4!d3sSEH1X&N^J5dE9T>kiqKx?sDjO;QOthXYaR| zmPs>>ky+gujZ?-?(A1^#iwgmhFY+w&@T!=i6Wi7Z`rz+oJpC|@SPwQ5jaX-=P?HuG z14bc`T>YWRY?|jPn3v_Q`HF5BnZhH`7gFIbuk@*PYq><>bpfA6t+ej=O?%W^DA*%b zuqvGu)uWc;cwDtk+yUcxtJ~wkzE+{9q0n5Zg?go8V#m8XSk;V}((Wx-m~qc*boV6j zs75hb|3{znrddpK4>U@*wwvVkB==^{L-fSI*X)Ved(tPE@J>yC1L;Sb>4Obf((@47 zqV#bsi<mYykV5{5j3byvZ z5O@8ieJi_{wZ#lB@+ zP1C0ZA9NKV8mkSSU?=?lVeU=fqbjoY;dIg@9SC%U08s*of{KC;8bE}oiI4=BKmZB2 zKnx_1UF@>eQ)oPE|GRl7~o!1tamGMCYrxkGeT4e9gv>XfkhS zolTVwW+6;xh050JX9WlTd_ta^q)*EjKX#4%+CR(?k*%><^Wy&YBZtV!N@kK+3W3g` zFC%JjkcEtbsL!#328e&aM9d$dWz^%+Eb%1t0z^dNrb_s0&c%UfrK|si6AGI*8=Z}h zxZph&cYI-?KVyWl88@B}+f{cwy3jYt?kjM>eQd{hDDKo!4~m5K-%%fnX(LK;=Bw-G z^AIwe>4lS^I9fuF-q7U55p~Sbfm8^SOGiQ?%V3Kk`>=@7#fIn7XmI~A<73oQI(DRN zj$=0KXu+D+gWGVAoeL3gY#2nqF(*X8v0iXXZ3+In`{md&g8!VaX7zr$21U7J!0toN z!20Qz-2-?4iX4NtM}oc`5(P<(>7vT;8ygDi8d^+b;jt<~t~gya*BDn>dXf zcOq`$zgc!;#sGb%;NsR6IFSu~nhc;*1v;t}TP>zVEBq+1(>KIlz8V!lr-7YJ1Jdkk2 zwEDqNOG~Dy2NqLnNtqoQUevaJJL?YsvayDI zIu$c+drY0A)}IwZirp206tGTg+NNBQCgp<*7k@%BI5tshGyjABrdF>2IwC}>-R)UQ zPLiCkV2C=VtZKxJ-DA~J{Og{h z$Yu|;DWJfA^H5D0#n=t?|4`j8P)|E@8QNnvy+_h#6cM@uZxIVCgs;e=3$xd_Uedf$ zM!D@xCb}o8T{aFc{$$G^FxX!<(lU(-#1ASEzo(VH zYGlfMC^XaP9(9HJ)aGGrQ$L&zuZTe;W59!dcw=>YEOXN9ZHy<*=4zBH*`wNA2_7}t z-8%paQq-(XVoTpF2%K4)N{7?mAWWk#z&@&eT&CSA&h=xCgR$5HN?X~owO?XAv4yeI zvY&8l9+Y+}>|!Ly`jjaN$`whzL`=G&!&~~x9m*96K1cXRDL)vxmW}(D^Oa+&KP4Of zHDv@hPN|CrWJeXsVA{ozbR!bcaKkIdnpQ=jQ8vgw<%OrP_rR3}!X}k2XDfCegI#N9 zJnkJ8{)hVsiQ^(y+41XqZli6g`drfYtqYa|j($7)eVsI6}m9A`E zjp%A##f_snp}uZY*WHRSpSKg4NJ~xb>rgAk7ziwH>4=pTLkPj z34r55fgei+D9$qWXTOk-DIN!vss|6{VvlM-Txgcla-HzX(mz?q1H;u+C|ff|Jy z6P$^exGNzmkyc#Zl8}|A>|m3#leOCtaF+#xgG3&<5M}-O>dfTP2#rc&m7)!nOBpU< zmD)uN0$W&(7vKAc&3Q@`E@!O<_Pm^dce1WVg_&tkyR^DA?dvXFAL@M!%;h4|!H+H~Ig`onhF$hLiL`(|k4g zb%ug5EjwV1*ManE?@@Hd8gINv|BSTawF{U=(Mh}%16@QK``&EEtAhM`Zwr2jx%$r8 zM6B&DGC%uQUHurtzC`l8>9{M&&oa~tN5E8%FrMs(UBx*0ck)O~aq?0n4b7X^>uAc% zT}M{pC$WR?GfI8snx9{*MZ>>7;SD5JAKPlcc-WO~W#(VBZnF7l& zwxRF{Uc^DPsPF!19~$D2mITh{u`(p29rJc9$i%3S_IJQR02n%9$5!Y;xRbz8ZA3!I z*CcvS5p3W-4BZ0PSz>EC5S*B=e%Z3C^|ee;gj;*+oViheg^lqg$R4?6U^lOGF%}2g)l(K@EKWblJ1Kcri{E~|Kj98&hBK7o<90b~ zU&p(7Yhfli(Trdd)_DTX!uyc`QdCiMl2Cy?y{Ta_j|=~>?z?Ui(?7(9`?~M!>F*B4 z{zM1mh~GZdKk`l`7MI$e2Y;QXx!JYE)6D%6?>Z;o0BT3f&cV|gGf@OC9W{a7pOhAH z7>NBDY6#{~MdN(2u;RkitK{O;eFyfGw&o)55{ z5rtxpTr9HtgiANe-kM8Y-Ln~_+=ZPbFHBMIdtab8yD*Y@hx(@H@YUwzBqB8&${tT^ zV&wpTE@GMT)zag;THnq@Tgi3x&fI3+OFABI4BSP?x2=iJJ9xH;zber`DHD^Zp9glo zH13FND(+jvh8b>>8H-Iau2D)o0-!w2iIoFOpM&s|-8-{TXH0-X22Fp7cl>tuY($jX zOStxyHE z?zwiqg!_L7awDAZv2Xb@oG4$l@F>S-8-Rcdmn&8Vn&a-@pZ*P{?* zgr^-_k8Vx!+wX>hw?M5xO}LsGvWF{beK+lUgx2hqj4wPs9l58 zFXO>7nNi|gpP}Faj9=_xRNr6FDe6r*_Gni(#(-?%ErG^NBFQS+-+3X3@4y)b?ctxx z0=j^Il)WwfJv*-&_@}jxzo1`zSr_Y<=OUGw^z$=k$EH5i4_|mk^qbguA!~Hnk>1Ij z!*jfdEQD7}J4KT4-Pk>Z4|EM)j9}6KU4!q<@+r@cs0GY1d!}^kf^EZ2W}>xDuxwPC z>jv=YnKDCrph`@g+5KK8hz_d#c3_QBcLV~N9c%~7sv5?4=5<_zG768%3?2xQvW{AT) z#O~iIP^^T%%@L*D9gcm}#J{{66O6&ivoqc)Ww)5|j^fMr3oJ7AlhAw)3ns zT)kAMcE=_uQ~8F-ME<5&n|nmpl=>!ITP9265p0yWpf`$8a&W~^CZv5YgcZox-I*Wg zCO)bx*@+<6>7Hswlxx5OTRwQp^M*4@+3EejmE(M+yR;59Bq{|H@Mfg*m1t>ET6)e@ z^~z)1=E&WrUu*4{Sft+K{G9ng9*C_7OljU$II2oU87} z;}rF;%~&EKq}z^oj@y;VNg})uSBfGe54!9^D9cLnxII`0RwZCpxLq0Da0;SQoNp~| zb-tDPTirK~9*vWPiE`lG`*@9@4VoAuUxaNZ9`6tkJ7;MsuDQw_x4CK{6mg9Xg&+h% zeYw^61ughWk7bp+_?4{1XM!(ppH|>$wz&tZ&n-dV{|IGJ(n5geA@$_k&3`-QXWe1e%QZ}dZoT!J z2<1YsNPK#ew~6<{Yyt*npTQWel{bG!#$ha#_#i4#vJ&9ZSlSa8Xk=Va8TEo~(}f#0 zl`h9|Hqv@M;tN=>`%fEa!&>YN0HkVvOtS#N@4TEwiM2+prz*UWDFMoGU+oqrl@~uP zjl(#h1zT_@UB`ky#r7Op=SldIgg++Ch|1YX$w~1~+RvjE z5xEDQP}`!@j0o?n8@X)DDi$*nTMP27A!G`ua5w8};u06q6AS&4S81*@3Mjpt9#!oO`h6 z_Owi#!IGQYBR8d?hktUidfqJqZR2v&Tu!m}PH4c*AkcX&G0@TY>`1=9vo$MMG~MyF?) zJ<1jDS>{00mK?$SB>q#fcnoK}IEJ(BHv$+vuN;%{elr}(#$Cqf1o$C(i(IkGaO*CO_usZ3D$#2V(TMu~Y1eV&Z`vsK5P};*y~nghFyn@u z@bxc^gYS1YoHx=BBys1zx;<2!xH>F`t~N-l-zeCrU(mEkSH+ z^b$n5_GOgoh)Tp9j#_HAT(NmKR3{=3_BMQQxMMYe_cYj}w1#nTG5b60+EJI?c72)JtY>w^CjbGWKgXMgq z`AsSB@(>S(<7Z^NuQ~=7`z^g_ihAKtF?XVbb7iO`?#*?jV($RsNhH5TEAc|r;jFXN z{(@~5CQE(eg~qb7)Qk+*pb$eaY%ATqWf}f-fYfr zjq@~*b&bYNpC%^ce0A+1gX=xb6J6lyo(RT8yZ{s&%n(A$)%8++M4|nj!-+iA2{Lkq zGJc4ZhQ3)xsjw!MzI(c^u;!~!ScMSu&`H?CBYcUqbjL%y19SLA`1Q=j!e1kOjFScCS&nqFk{x zT*JvEVvR7_$E!`1nKaGAE>_#0`6ps~i?{*ul8F=KvZaSk&SY0~dJ}^bHl#5}le6{^ zr-s)P;E={vE$`!e%E7JNa2_@)Gm~%-$%>;*o1nVx*8DW9%l}9}O(Fq}D4!w6_O_1O z?esptw|T(Y(pl(y?y9>0(L0_E*psFHayR$lxfY?F&)tKKq1<#9QwWD4RMP8USKg|2 z`y5`E>_(yQzV@@G)VVJ8y-GBd->`@jS7r8xFTb&MY68riXW#}`C>A&l3a6stY*o)R zCMX8 zpP&9Q9F18o-h-{8)PI~9)t;yF_lWHY^;E(o8rexH-F}*%lIKRy`!_;*|GJ|Z;r&a1 z_pcDsKfHfnmF{n`{$LXR#n;W^00o9P_X50lJSTOOs;jc2N~zD!pxu3X2zYrH&&WVLYjt?}*=>0j}$B2L5cdFc+6 zu0h=F{w6((xFH<>iUTH}?m?`>T!SoEU06%kph)(*WhbLhx~0hnvO(Gly2G6_Hh>v$`M1FS50~%?Z?+lwSL@64i?;UVRiIp935PP= z9p349OZPePgd<`~>&qNRaMJk2fXY|TyLy1QhMW~J1Gj^xHwDkYkCfO-7A~K6CqB*X zgH-Ww1h{qj;QBCR<>l_H%LZ=L!~)EXd1^N1Db32E*k*8@24%aQ>AER5A4e7xP+pD2 z(irkZRS~f$mnnstAWkgSII(_%W}{qg9}=4py`eCBFTX zjX0DBsHJzlF-TbTVVfp+qzR4l`Sc_uFL_$}UeECuXo*mQqLn=`nOsEql}-6d9ZogFn*~w&JJ=5ru;rfTVms9Hq9I7K9me)b zxn5mt3QO8ck9pp9KrBZ&#fi7-6_DM^Ztq@aEq8o?zhW0eO;L_&<2)17DrOJvGcjk6 zZ+?OdjfMP7ju@eU(KLgMJbBLvveWova!~f#e0BEEDV#`p^JDM26Ro~gM1*eE&Dl*1 zNl=G>3EmfP!TR#Jm0SNVIbZY&=(qClQ$WUSl2{LN3#-pN6I|!dPAiaN(x1&hlN8@0 z#dz%#;TXO*%aK+K_VUGIBvE&YJnKWv`r(8)YFnIL5vx_ITs4#<4&;^72ewfn7)CwB zQ*1}s?SHgQQMUPPphQwzN-#utnifltv-<>O5$nV5#tq3rW>f3QSFb)wintRs9Nzr? zL~HO-N=+Gr@cjnCok?xC(y(yPn=GQ6v-Wfo{)@Lxut~F5XMd?|RkCYJlMtQ(CZl{FfH+96wrdC8aEJ64VpSgvzCqT8Yz3~+{!}Ipie7~P< z!Tk?sM&am+L|D5}K5olGgRVN3h$)9@u{PJ43Y)zFrarQF5E)>JXGL0+s~pyXZWQk` zz#Rwk)imk~d1;izFS7t;MPj{}>8b}jYV-NUF)QNe4uk|Gmwp5#Putz}vc**Cmxr>z zJ2^xB-DiWqR0q}hy>HRyFS&FFJ+;=2>+(yZ&JD;(zs?M*T!wHZgmivtZbItpW zAFijO&>|x>*5LzfjUC@_%$W+j2#du5zL#Bc(j3<5*XMB9}kyMD-7`5OwW z!8st`8vgnlXMsSPu>h3u+ec%sGCUo~k(c1%r3-Aa_Y{ypo<0myEsVynE_*K_X$Dd* zAa3M7Jzm0@-PqujlZtRx{Vfj+C=N+&*CEmrhx2a0ZOc0c6<4#s726vJzhgBROWR54 zB`dOO@h>=09m+C0Ht-7n>VT%5bZJ;}!~P-~@XggIp=2p0OkG+yJJ^V8WITJIJJOGOGy6?@2$S7wS2uP^tTwfu96z4#h;v^tb ztY-Mx57?wOp$|9#%%Q4ankW-pZ99y8`tQX ztB4b@YWKP?Qsf-#XMMx!U<0g5S`c0O&bB|=WMkAhX#;HyiSr)kt9d?~M_?B1_Ywto zbZ4kHzmFC8=Ajqv9rrSecR#I&#wbG3L704|y*`&BHELL0eXcm0U~?Si1Xp}MSNEP% zaEO5*o4Un;R)~pJ&T65j;cy9}9ej7>FKwqcsbAveCIt0jLkNzrX;DwT7N(F)S|sw- zFY36ChMCLhOa4Qd}VQ4fB&cDhlL+NWyL?lv$UaZs083+>;EE39WSLr0)mw+JV z$s_aC*VaOJgRLU(b6@u7H3#Bw`#|&R?1T6@wmSO|oF}+UBz;58iD=&nRUY-2eVF-i z|I1S7N_n5Fal>MhWa$k&TT=S@imc^EDir0_XCGz`_21{BgdCT$gAN}Y1?}!$ zdH{U|-K)V-dPt-e=d1TjfI^1D#kZ*4w3_|Mr`bmmb$^!U@DR&jsPnI0j&0y*nqtGz z@~#EAn_?PTgxhJjtHOuNA+q<+$X7S@1$|~6#2UlBKfQI>m!3^Abq&$u;LXq7gDv!_ zn!lrUG|sV5&l>$(Yp#C@wvIc-op3iG3rYn)cP}s&kw(DTw#ThZ!u3wJqi%oC^epXc zr>sP^e}y>PDY=xvPnNTw^x#d)Dh&Ct5TO**Hvqxgoub5wEwxFdwIHTEkEZn0M-7`E zH3}z+Rx(o{L@-@9W#Sa^Gr^Q1+o`3BkuB{sW`jV2(#N|49BXDK`zI!+e}Dsd7{R%b zx#3}*j$`z8!>)ROcKjQ8a#3FMH1&s3kbKEBMTc#$mFC43&sLj{0I&wG21i=9IcWfT zq%PzB5UhLGWhfDgu{O>J0>h{mxtezC_YH!V`pl@Pv!dd2nj2#MIVxr9Y`ece^-XtR ztgacKjH&1bxaN5B68Bb}R!Wa}=~LYww3RyU#ispF0Yi;^I^rSS7b;cB^mif|u|1#* z78oE6_BV|rX&S~T*C)eGt!!c@SAwz$0^QZkm+xp8)U+`s{3w}E>32YNpS9a4+Co9p znaOZCf=*|JxOhmXh{S`euzg9d7!ZHN=>4^#_mRhNTKyONM)SP0_AbhsD~8|@g{G`D zn>$U(N)vSIAI@x($ZVdvH1)^3zyCke*^TV%{d#Bb*E>5+c6M4voh_DMdS|C~v9rIq zQ19%t|1+JPcCwwFgoD&N?QAF&|1bMHMf5j>3;J6Mm-hQRS>31nAL{S_+k?Algx=r( ze;M3EKI?LSPl1%jgd(grSVzzzC3>r5+3Ev)yqfBqb zX2QmG*z763O}0Zfz^MaS^1uO$^Fs35$<*J@NeM>%H~ts(dkzm36qvyiv5x7+2NAyX zXxYA2+_|D`lGK3;Cj%_PTv===50~hnD(`5nEO!t6P(avFJ+~(yDvMrf&+UjAODdgz zDhMTPEL-+#HWsDO9+B*rv$&-)!fC0Z)?0B9Zh!w(@*v!;JO~%TiCN3xeQM|h^$JyD z-%}%h{CS64;gh!E7zy0(-e*1etsuq}Lw zj7khFTCh6PB;B3c0G`3in%k4mq{sMqvR(ZHHBB^>QzX;D7^< zRvqkRZNzTbiVrHSm<`qL=9KBsb?e<1?+2T9Z{_mg=^yAJK^tLiTTydc?0l3y*#bm zT=6gz8iw$VHD6l|;Tt0w!h7Yz8VQ0Y=Bq;*Ql!}yjz@Qb`Z4+k)4{l!+Y)h#meLDb zPq_Tk{_lod`RbAHkOjT^!Z~X*FW5}OmTv%AD1NK zv?N5Xse={ z()mo2k+-VZNaDym_5FcOt%ipe9EpmrWW|}{Dq3glyFd#PNj>vpT1K3;43kvCkpBzc zisQ;hVQqBnSWHF;#mky00^|@7S4^|QmT0K3H^y*_w+x8Gg1AoY3l(U-9Lg`lTS)}o zeN(m^dvzVk?Fk5oQsM;#(0tK&$3<*BMvWIiqFVcRsFh`G|1>P6OGS$9-=W^XbZkNJ z->@dK@NyO|TjzGNWmkP9Y(6oob5n4gAN={=UclBWIuTVMFY_hibdhDIf5B2+f0r%W zt5yEv8>k$fkw%K1ZKZySo+|j-FB%PD(ae?Q4)xhmy%~=)CAw~hdLPp4uYoBc{Z(^2 zT*S2#Xo2W5ayG$`*T`rU_9-=GiD$ZoXD;!a4AI$$J?8Kl9<#gb>3bWxy$;sL!DGbz zF5x`yRZVws>#GCBHh-zLytoJG}&|&B=Gx-iZVj^P97K zh=}Z)e~%pQ{k)kCtN7Z@Xwba1JoW#n2?*44g1W7XdCt1HMc|#+FF|vUs&DKlhJLETUmoOs6;??`!pomg2i)OQw&HrHJL3ZO5U&&$k!op@2j6lvTO5S15 z7LY>4ZoVDrKaUAYdwB~C7T~}Xl>txFS1?;%TRL;TEi zA>S|_jq!bN37Lz%vzn=Baj^OdB*{YEP7Pt9u8js#7r}M*9{7y|xf~#u+77wIA~;V4 zxe5faYTpN<8bw`;WnIn!?7cZUP2H86Mjaqd=FF(!rP1C!WIh>*wVlZ=>O(|W8+cw` zlctP^8i?IMPVaMgdL6Sy6gH%S+LF8O!b|QkRx~cV1xQ#l!$vei*9;puk6$EJKuoQZ zM#A!!ub#7<_Q=n18U#*?Sd)Elb@t9R*@uM4Se?B~q3Ld$&;3z-_HOEq>hU?`OQ?#- zpnlH>uqM-AX&+jG8&GAI5GqGQ}bT{aZs9PA}OOhxvv z7+}k1?E|vSdMifgjVQkLq#7|w$CZc=m5qQr+M=c~4bhD&Y`3UR@nIU1b|hg_1u|QB zSN6|E9EV%f6@3v#i4(@VNPP3F`> zI8z8N#(yHmK1Thx-<-8VUF<*2UzjlNL)ZDxbaQz2_?bSZuOE6Gau$2KV6>q7Gskhg zFBexvPSTGV!`E#HrCw>Z5UPuH!_MIw;LO+|A4phwA#cJ z!?Vp(3`8UBN`Ev%fSwi^v_HET=qEg+*dOrOA41xf@WA+SvyQs&MFWA*WIKzBqorV@ zvS(O!^RQVhC=zIn+r8wnVVF>kqG4=vc1uilBm5_QhCy9#nUX(Mt$Y^d@B&)={Pu@v zk&6Qa=x)bVr(jZhR8_{XO^{D@2cmtm8nF_MnZa;29`78s&m3X%B zju~#tLop~$b3p6cBjkL*_yBBSKf-(c;;6m!n&zL4yR^U${dpGsPVhrNpA(%ePZ{um zF%YdQ&KkJhHyKwSO4M*s>kRuaoEm~@8RsE5aO1-97@XieZs(Ge1=xZAv0w)7F6{d- zx-(9}=0pKHo19RGSnuW-um?FQ8{HLiarV(AgF!51#{#$nV)B7YzWUjpL{?<^(8!-_ zA4W3Qoe;H!GQl6o1pR^du#E^FAU5qXL7c_}pn5Of7D3Q$upV%xHc5Q&f< zJkJwR0lm)?qD+fffB*_xMuD15xv*{H+SfGfvcP@jjJV@n%j(C&bvYO@8=^^|BGDO| zu@YkNZ-f^9>4?xxIj97eX5jGLG+#9aiqE0%H`=bAxEOVcaEy>Ix_oDR!$hO__TA;I z0{2CyVPEC;*}=b}P+5YIr`TVFTZEOX?CRg2NB3eVF&Ny_8tvu@d<8CRL_|v~EGJDl2{v~hdNi*;EVbfam>;*bZcak5 z^j_FU+~<*moP{Q0X~O&~nsG;Re`Y#M%d`=hnBy0B(4rt$-@A|NHDTeqp%4l(8Z?5k zfgY)L_d)1qn|ajpxI+cUzX94}2bB|~IOD7?7)Rex8dmBE{_H7(KV!K`(1p;at?H*g zh`H`;q2(hM2r|N!;OvCM6;3mw&|5pvqM->{Ln`wAH ziY|xYnSlvhSce#%p*kPVS1-5|Y+@Ror@jEgGxA0w-VJx89EicVa9xIQQrKtk32Vb< z_~FC+%EH9}YZv0txQNa`S6YlmuRoZto4Ov$ps2|h5J8f4pM5%7y?Jn%Q zn!#2x;38;OGvF3DaC=c6!k0tBnR_vuImCwBrC{b>jAfQK+#5em5wWYn96JsCF&mq` z5;Q@r34Aesfqvk|W3&_CyxVE8b#fn@u?^KV33?PJ6c~~m(^{7%<*Q9IaG_43=j-3N za65<|^W2^iDy*kS%K0h?p4HU{%Y*e!6GkF!Ep~q z8I*-tEDw$pT-)?jJ@zU=AH6DhM!xELsHIgqg2{ofT;lftuJA5ROVw3!YOgs70-74b zcx#3bd_0HK7*5pD#N_$vc7N6uY=m>(c`vH+92-#ytKlf;owa!KXMM#9YdKrw5Vnlc z`QUXWcL)M@uxku`%h?!OI}F^I3B{cH1pFw_O#OLSZSTiIvt@O*il1K>bX%Pr#4ttR z%t7CZ!&n`&EY&@Y>u#(}_p1w#43!67+k5<`jxn7r1`dUALUmUu#T?pOP3c&_Ufh9~6{__ccIAnX^%UPhs>b%HN+6!Ob@aVNAaXY%e;v~N{n{ReJV;FZ^Bk)8DR3<|Wv1aAgQUtz zT-9P6$EzRCO9c`K^R7lGmgZmZsI7D){!ue}543%Ib7fQm{(i#WG5ndM$B1X(VKc%e zfP-wfsQ2HNz$+zN#!YfmIv2qA#m(k7-i?(P)_^#ICd*!LgCi&kkDfXQ?E^dkCp^n} zMwWV8Jm8U0X4#zGVneo&@}msk!g`)CMraRCFS1@-=GoF35@6hw{_Gn6eE=6m*Sb)Q zlfO(BU3fOT?tY~Cn;H|=g#te~PTUT*7;R^Zdy}FtYf!oG;n#^8+Ga`xt^cvG$sCHk zldcOq%_*+o5LT|UJ^`k8kz2tc9W*M*CuZgWWmoQGg!!5R7bBx4mo)7md z%tMCcUox3e9~Z)mT7o^~J+X%z0yEEHm6y=D^5E)$x2PN0y)I8+%rl){K@w(7^->GM zx&h8Qn)LA`#*)_I7)l{rewt!-c(2Ze#P@4VVBF5r@%Y(b0CSjSCrE}ehiH^IldJ8h zUSs5{x6$^j4LV`d5%QAqr`r>hKi!s|5Bc-Nk`Clgfa4ajiNXQW=pOu7q|rZm4z$f% zJ0AtyguhDsEyG_8{#N0SlspOk6wA!20yX|r8}?)3bS(EgeG&{~)}Mt;YyWm6`~BLooI9gxkXq%AN7~{)vJShLW@&AhUoUUcP zC?P$R2G3#dgxPu{|C7wG>32tO?SOwuuMREm29#Hi3|sN{0si*juTA-#u8*XCgac(3 z%fo6q7`%Tk>?$F}q<>qEAf(W9E0HE4j~|OjNDXPx-wuPpF=h3@1Qt;p-Q_U{a;LiG z6Bb~LYN^d~CdInUZypr~i;eDpRCmliDN;?#7Nk0#B+5mazdM@4NG0jhk$$oM4wEcB zrO0Yu<@Q^E!B`#Z7dKjfVMgj0INbuwrAddHf2;uvFhgzO5t!!c0>_EARb6(h)SD`@ zQF}49oyZH4heNX<9JbReWuaNHzUnl~=+G?W&dv~v3C)5tCL(3IK17w=QKPrNUR)pD zA&viR0q&G9+!kPM-fN$UCR%_sC6&vzu(8Ea*5&bqBZdrl9;QQ_b^S?=tzWXl*ox(t zYCxL5RX>M~t&_sfBMw&TX#8JyQaDbNIQA6dU&C?7(J&k({e-(VcSuuaio=B?2Mak* zQ#YJEvY>RDW}A?9s+Maz#=^8yF`xQ=rlihv)Qn&VQLrf-yV!pgWtaLO?QR{=>AFrZ zY@-hj1BQrT5%#H64cou{CyY)y(p~4bzAm?jpwk2HTLhodR*)8}V}D@w=(Lo!l(0UmJ{>(xL-D_gji>DKgxOzdP{f!=KKp{Ot-oG<_|@<>o1XVM<#VMVhCd z6h+?65EO|gCEi4uzuArLP(<=WNBYRQx9EJp>4{be>?F0!ZB+3L1~P1oN0;fjx?ni0 zw*Ysf+?^DC)zpsHv46g%t5g-LaMd_L)gGkge5CpN;}2m}HR;)oy>M@}Nf>P!w+<_j zU)amqUoTnYv-8e7(HS&Gz%q8}lI5ObsZ5=|q|$S&4-PV(?!dW2GnC7R;6|G*E5C|L z#$n8vIK__s4GALUPnku1kTcMG#)=dU2pH5_;!K0u;;|$F1F`2JMSI#0--7^Q zK9Dx!0qadA3--@J*gJytAx^!-(Z#TYy1RRpjdaqhXgR0Qq+h%1|D`4YHD+mFwOMEZ z?$rL4X#ne-&JHpazsQ{4-N;pMqi(6mNz?w;>H5vmpX|53u7#ds{W{Q|RCpW=BSD9& zVZphtjS-xCDmnJ=Nb`5p;V{mXy(Z}2HUEn6TLIO+9iV#2$)VayqAJ##(Hg328rnfs zAlx~>EO6`mqW3Dfrn6ohY2-5GS45o{^|#C4Jw30jMpX_gi+6>-(jGFf1G0Vths8;7 zz^kJL2jFhj5NvG{B0ym+scm)?diJ7iia2t7dP9u z9J<|_(~#R?ork26{K(Z7ygL_r8`A~m1Bvk~Nb~nn3+8R{ZGXPi_>~9on)-SezfSEk zdV*gEOZ3EgvA>4ix^Kb=YmUeE=EF6M%>miz6gSHP-09>w!UAkjRYL3nT^~=XI1B$4 z5v5@X&`^@m-<|`RE4S9b{!`ZwYsP3q!FOXYYJ?6q*S=z&+jRjuT*PQ>Mw0zK=@1Co z1^q-l1VP=oJ^U*e!Ypfn$9_r)u?3T(Bt7)?eN<=5`+@L?bghYEdH=%**{&rA+gaZ0 z>zlr8k7kdqy|<(F&GFDSZ99@;n}H11<8KcB%J3&giZNbvdw)bfbyxVos_%sA4`GAq zSGYAgqK~;&7lUg1@5GoF`ol(~$pcp&2pd$E1_^w-rf&;7$V?9|_nqcBHkfMmnM-bFEo4y+VflR#^~BbyjG z_n$AwCTs@^(j;4-aNI~X4L>k=BDTbglII459Le%YM^B!2hBWkqnP!K&>2_hJS+3-Y z-T!@El{3^u$HBG26RdkmiC##c&S7{VjFxpa&Axq}XqT`xy@)j1HSQ~u=K74&mLEFw zKc04zE^l>xl80_}rcWMRpyx95$@W(*uUdfng)J#8*c$!Op?}Rf-m0muLs76JaJ7v} z6E^s2;Kt|*t;NurHeArUJ87JYG=F#OGij~)c?JJ;NZ<8kI;C{_c12&WHF9-+|f;2nyw=cpvG=v+w#*dmlCG-KqOdH01(N<(5%>Hde|A*%YbWbCi^+@w~ayYtO zrmrVNUmMLTzoGvgH`bs|y;YU9QeLK@vU{5e_MG;~+{NfTR zRk4O~dhe%n+M&+C z!vMwASGWpHy9LZ0ukZH|E)Qt>VO<{w|A`@ZA`r4o*Y7@Cbp0T9`8K5ad(B=@Qriw{ z4LIy_|7Rqb>+diG=fQDt5(r)-5j>rU4bu>O@w13Ssq6Sz=KnDKHp5SG68PPJmLQ;< z|B)u1eLBF;>OY`+-!T7L{RcnIHAS7~-nSYGG`Z2`_HsSG(9>+Oi-om%C)^$<(dx&~ z6s^V;NBhBm3Ya=$}E? zN@y@!7|T2Y|Hw(OOvPZ)1*eeobCBlmcb|091t#+#1^gL*<-UdMvu;aIMZ8(sW7_(R zHh6?yQi(w5<-g%{vn)2#52o;ryIH^}EwKh&aE5I6Paj8GgUbG&vxHK6nylyx&U5ok*Gi-%1VKTfa zMhA4TreQ|4Ax*HL(6jd;O%|O0k;#HOBWS-S{+-&lI@#Y*d9ek{&L`#Z7CbM~@O=A2 z6HjwJ!0}MBl;a_G=_rhctN+r0y&^O|Ilz!1jFmrxGD6%}VywiWpdR?^jlWazmxjNy z@pnG{bTUc$==Pe-A@)uNOF6s}MqfpsLYu*INviCje}52ZumB0Oe@=?Oo_zTv_$zRc z1?SHAOBp2i>kRVM?MU-C4%qAahjhY)@Rv@%sLW2tcb*lM&dK-NK#9PeyV@b2q+dtl z`=;wnd1F~|wUIZ6Tv8r0KK`92yUc&3--a^Y-Cw34K7JJnQ1Evz{vO2NWBB_U{zx+P zw~+s=uT%LJ!_ywky+9*SdK>av_^18xZC(Gv-qulImLJZDj@aAOyu})Ec8XvYu|}MV zG@0eI9VWB13GSBd$NA13#T%@@*6grO*VBFrutj>CCTcOhI^Ta{A(81)?^1mKfPWby z(Veef;?~!dO;t7W9+juz=+TXW0|y8K4#t$x8%g@qAKGrxFWf+-@z1EruJF&5q5RXh zw;lfJus_b7c@q8c>kJ)OsE{0RP$5GDK_f(qY!1!VPP}Dk@Z`Nlo_ZUjEwzc;?0PX& z{!96qJ)hU8;(B5nve(uz6*hm*ys)c-M$F*noGSXf4+qOYr1|^gHnY=1hPc4LBl)Hj z=oGKF^)bm{k#DdUnDW`(u`cL`}X&XmM|G6#+ISRcnT|1XqRlvK~T7T25z+=X0T_%jZc2>a4Hz2g4&^F=4|a@Eklh z`ruFNFBoAs27g~9IrtxW&*Xz};VI=O={c$b^>jLaL_uM+%pZ-Pwln@a@z-m@QN-_I z{^%$$ArGF7j`*j|{4uDXpul+?0=<#u??dl)L;^XU4SpW#zLuVs@VMD`;Kt|(kv5Ec zUtd}IKvb^B&1#D#E4Nwowf6ZB27{)+7d>p zu8aqXAM7dDa~EoXXM@;35AI#JuM_V50nQVhd*?`m&IR|*5cnKc_ti(jM~wfQP_jP$ zpYLe==Y;ZX#>W`{|G@ai-%t2EhCgeMNcjjJ5Gn-&TH7^m6iqQDWvBa1Mp}S7-B=N4 z0q!(3|Fe7(4SJ43=Pk4c{?!6yL`Up3wjHo(g!G)zy@f3nF z7vjPc9zw&DNKRRhF5kNJx60(J{nK_Txf6$NsrxP(#|Pr>iE+EC#@Bs~RI`%AvjlN2 zc>2Y8j_{+{K0!Vn6T;Iqo0Thv7y1%nm5su7h*QuOKyTck-jujkzX6A5)(HL+gWZQy zEt~r}SMkDUtlI1^SK@G79H6)!r!!$b#@XEt`GN<@hP+taUCiw!#J6oB`u*A_i+lQs z&@xSpEmDaZ zG}rT>LXZpvYTwVzVoU!H=~r4a9-TX40yf5G2N z`1>4x-{bE${3X0p88r}p=i_fW{^sKE4*adf-{biE7ydTjZ#(|>;g9^2=fL?54!`dK zXl`ncUQiVB5`4JpFVQ#A9xCkwzd2vc!X2OqQ+P~~JyWs&`w3i6*}4;qOWImwBaa0v9p6K%l>qveZ5Ff{Omvvw-p1P(!P%;u%S zEMSB0i&p1b8$25xfuF*;>PnR1e5K|nD!_Q!jUP~I-pXaRMdeQKdH7hfET%X(j|FS* ztDN4x^1UmVbb_BtGx;av55KmhHu-U96e{D2TEt8L|FMODEknG2`oI@AwWgIdL|w2Vbg z?~TYJ+YnuWHcSz9*j>TYi;edsbDiFc<@<7Ht$(UXJ6ZZXcg5V`KaA4dEWOBe4oizRX|U4Gme%3I=Eu2qG+6xDXgEmJk)eS5bq+zhp@nS~x>~C7={Dl5>61nmRbk5u4!jnM?{XRH#`IX9!s)jtDx z?jNkx7F}30r!45!>xf=lb;0Q1ZN_7H`J%ZvKOWBp;;7sFFSw&Tu)4N;ybPMp>hIF9N$~C966^qac z45EMFt87K#Qi_E~@my0Kds8q5h)5RrsTSbHu5&Xgz+|ZRRy|8hY2~7&!8E<@mQ?8u_8ZS^Fbu(hHOw zSWWtE5)$fPp60Wht9k(jOsYyI-9RSIb71P2HhInhr?(L& zuwf$UMxlBT>6&G6K=CuA0^TSwAxY?pibZ(8QG+f*`V|Qc{&srJSkJu){QD)|lOl6~&<99^ zA}Dzap$jCm9LWQT2XOcYzDUe^;Eg_MJDscU!v_$4NFOo#CE`b-Dh2;i7F``z5&S2) zNMKk|UIx5o%MT^N^~Q%X2w$f+TYeZF++=(xadF}vt{1h9JRrny%}T*_R6XI6?}`=3)NBL*Nn% zSJ=vn<`+7>xNb-QRk)!Ge1V6+1S?R5s{}~=TLM+O7lXe71hQNCp(pV#aur}EJ&$wU z9|0joLv&%43)%0)Gx#dj4I18pbj>of=W})di5oq)auMn-(tye!cBV_9s^B35Xjvht zo}mMwGe>AZxb@r8Uy=!Kypt0&CPupk>b57E48v(&bf!!2L-;fYOVKOUi@4up~0Itz>Q`hL2Bv1G}QA<#-5u zqR~z;&92)trh(qr*SYF?0Dx&$OQtE;M~+P>9o|c1S%p<)x1jxasHu)G5z4P@b}b4+ zM=avtJO!WS;H={)KelLJO-zFNW6S^ge|5DlK`$E9P1TE`Bi14-E2LpYgzEmY^9hg=ej5dE|=dhZI%ZI zKz2)!^LvygL=LzIR)>KA0{3i@-18WIWToY-6zu*hcG^m+U&l9PKm%{T#amHT%%ZuJ zlAq#vWp!LRRI}h+IvO$aD+<9axY~l>ipt%f$3O58NU(Nq42zxTI-d-}<^skPN%Gr$~ZewhCRP`5di zWxy>84{R(o|D*kY=dD)iR1_^i*ME-p5M*WL9PT^tzziJjo0#DPYX*o(p#QAQPzjL) z{a4FyOG)tCbbUZIE&~CIKt+_Y0sz{8x~UKu7K+@la;Ccx51=B1Zvj$)FD;ctS5_2a zJYFinn7|CT zXc_Vx>sw&y%z6t>$tVl{sQ`+AzXPvz{9EAr4nRhl=9VedrUdElT(uVfkRXmEp}Flh zB*?h{0}D@}ym%EbpyB#7(9csBEzpn@d<0)2U~ng1OALZrb7kHnOWt{FW$wbrxhERA zG5;eS=x!mL4e}6tI|T2+w{yxV2KtMK_@$*K5D?v&<6LWwiZT~~eu7&XITlxPxp7E5 z#8-0C^6th%0P7J!Bhkm_Efp+0iBfGnzOwOSEDg}`Ux!Z-TE7~vb^0%7+0!*_P|9#i zDUt}+MJ{B#SxD_ASk8scs&_5X_`T9~wMPY?CIMWsIXY;4K5CJrw_vRj0mVajt)sXH z>A>Gi6en0vbf(tg1Bw>o<@v~kJzy#9E*ADztuUz+3BBEg_n>}7RUwA^eDM&!v}|rk zaL))`ZUo#QdI>lVDqJ=oNc2(*E)s`f_!6N(NqDVs+;o)4yf=j9{qdBDd3WQrPK<3x z2i^$5e=bpe3Gadbvc=@Lzln$V(y|JCd5AeawdSZSS_YsyWRCJhRJz?V2dpqv!SgQE zC-coNb11^TmJc8d#ffq#rr}3U=Ia24_4x&ymWBgHN*p;8rHF!Kp({hWI>keG7+8vf zgD=nlZ+4eqw);;a8xV_W5ToZC@z8yq(DnD=Apm!$m}x;b7wDEnlepIFui?9e;%jVU zql0}iB#mp^!1^P=emhRW{=tAX#(y|8);~mNiiyq>MmEU+=SIrZmzidmnO-t7S>^qY z&XAS_>tH4m#I(uTa|gaJz^+Y)I=o8o;&~JRui>qLid|a4wb9dfhFGsE<-+A*JOu94 zDki_jR?jWL`&tPE+Xh6^QUcv>V)u@LUFi6l47fIwc6!G$^HXN#kBrQc9;Zdh)Qy?y zWhSXOURP=I8m#OGab_@htyc2d4F<2J11tm9P9O48dwBzJlHZEwFUE}g9G=n0La};W zCkn~zo&gU3J<?jc|5{F4fpFnV=oMncJw*B=%1;uIq3^Lw%Q7 zN~MvoK+n>n=%x}Zf@8E2dMqk0t_ps_M-0p)prn&Pwq+3Vg%KbgF9W<5P$R$)qa`v^ z5DL5{lTLsS@H+5_nQf$z4e|am=kt+r22VRrqBp_Fp!W|hMTt~XDQgOtHC^=b zh2{^Q&}u3+GK9iAL*Zr1f+?dxa-k&_EYiln{S3ESwIA_%7y~cJG4L>cNM)BO9G|pC zuSYThx&DIJ+Jy7o`8pf?T!B6%(7lG%91ScaO5JqmLit1 zh?is$vLCiDG-VOyy_o<&KkStK@P;9a{su6t%qNhVBLPEdex%U?P1J~R8ooqmL=0YQ z{qqbaT;_czEbo_)6A|*(FFP^5-0VbHB7P58bYfy(v5q)sbmG@Hfm(B2Ap7=oj!OOrTvn5Z6%y_9Gb#7=TU3~Y!Yn^A~kY0demKH8Sl(t@66k49%bu;lgfH_{Y710y(3Nb8%$KXh-C3t+UGKNC&XI)ag9NQkIlIBG5S8Nb(m;A@{S8G_#PQ zmO`xKdlBF){Gj7A(^AycENY-EO0Iq$pO2O=lC!}1_{tWSiwdH(E}MXtVtwkwXG{5V zJn>|iz&sPVnU=h5=EEHTZJWRLA`D`E42V&pEf)R^V7XXmohQb`)x?Qv~eHSfZXqNgC>A-T6Hfw=()?4IQNzk|O-9ixA zVZl2=5jhOH0T*G7zE>zz_W&F*JJ)FZ|AZ(FD-nbLBNgZL&cth-AFoC_P--EME^w&#Y(MPyrwxR^!kmqkdj-(74hIUupFV8)#J_9m9+99yUbj7@ms< zi1+w;msCN#PsfwAp8V@Z43i?)H2QBZ!&`F1T|mH7mmuu!R(hu5dj$L)c&$sa7DT-U zN=#bRSc;N7`5EJ4!-=p7uk}J+Wg*38ArBY?30+^@6S=5rW`9#=m)-q-p=e|}T}0R6 zD;v2*6bdu8DX%UIEiZUNvUj0!w;F>jIMwe`W|(DH*l21{H%vVdCgPi+IA z26)*I<*X3Pg=J6;G7uc`7gR!9_V>-GT!Xx0$)qkXssFW&e&1&7=?N!Fas@cdI$n zn(HOcsa38C9!AMJ@CoR{V4(=*0t6dxg)kf=FaGd0$K zK63sCjQq~pC=_7TIqae}@K4@rQFL$d@%nzSnZ>R}sW zR5VCuD5UJ2<4vHiWomwar4KOj?8RqGkLome2d_1nTy;9i=ZIiNMr0WJG;ja}_qeQz|_mrP7V~k%Q);PmD) z>jIfoqV_N##UzDbY*3TPQ(_8Hz2n(N2y61pT<+#Qlc2(vSYBP7R*_$0ATr7Jbs%NOx)sj=u8@CK#1o|X{y%!RmLTj8@sD_> zN>)^{EJ(+Z%ym9<6(Xn!-T1nhV==q4?anH z?dO|fS82w4*J$EU#uC|tm{LURJH6N98SRWKMy@;-xGWy2@kj+=pE9~DM(%tVra_kj zCe?uMOK7MzCbZmH@#{~rY?=^`AT7)O7O4O@SRY;^IJ~$>Z8IOg4Y&xh;VHb35TokIYO1AnClud z*A2`i4R$qntINO8%$oc=f~;6FX&Am%C^RjM!>{l`_Ryu%wHX9Xb}@r&#wRg@^uP?g zz6O;^(e)3!w_q1sug&F)0l~RkTHq$=_}tzGe5(e&R>!^#y(fplYx)mfF2GS=4)y+P zjEU|Nfo3W`2{hw9b-mZWgi=HG@z%x=bXi{T+7vN>);}Ro?j7P!-4Ox)9Kd7CwEJ|= ziUd3SzX0JtALDj2#Ox6~20oU=#VPfOPr%F~L~S!}+HkH~f$y*g?WcrduK5-2v55b` zTjwj8_6(%2M_OtifoT{grLHq*TF%B>WY9N~#X7y|coTTc>_%-z8NQs#FIO2~^h%=f zx~AHWDw==PtC)@|gcy}u&Gz8~#Hg#k(DiS?52%Tu7|X3@8}Sj5!f0dwslfSK1sVWe zKP~|KPFp!7h8?4VFWMdo~`&A zARp6kgR9OQY8orjwygafUnPy=xMl58JVKS~EWbu7u-OVB!z|yE5XHg&F?1eu0lMa& z_<%0J#t3lc6L?^#C?afY&xc7y?_@v&4 z2XulxS&Yd2MkmM^+~3JcyK}?MV59@^^_YBG%}TZHX5H{r5?F3G`?-P5?ok{}MJ%ND zL2NhsTz&wKA0Qw6!TIz9dw;1;S@qM-Rz1TM9?Z@}! z#(RC27ldQWcc|0BI%~ z8jtrRdkI3jFCxr71FQA#VD8d`VXf-{C*Um8v%Z#T4jTGO?aNpS82Af;k(CGhAx9H5 zUVRVHQk6TKUn*RARN7v`TTpEMPBCp-Ltr1mmk5=5%u2mWkq*3V;14Mo&1vvPyvCMX zqzaIdGJ`|ts!&y=N4VCn2UhZK2r_*zq)fIfN^slZK^K5|GMew~DX z;JJ?w6;=qjk86d5fGDdX#LZR+Da)^y5U6DeAu1(=Y`|Zy609|xJG;{HRkD`c*)5wu2}{eW@1e(DzlB9 zC-@&9Ao|L&%0v90c!*!*o?q&$O@ojO<)>ITFA`5lm<$kiS@LocEN(e+rnX+^^OD@8irA)3_UIv8Vyg0eR>q$I=^LlX4&Vwvx z8Ed+S<=kMQah%-gwN!&5H!tKe^?rn^p!p@7N)MA5uRe71&^{QSSZv6z|y@ZXw<(p}}!=gkG;f3l&A~{dyYj zA(*)L3-O->`nOT!`olsr#p8usF)YV-i*%4G{d{J6(9HC?kttMvzbsPbbD8-=6D>`r z?t|A--Hk^|GS<9_8e_?=W{n30V?8AqYpp)qW2H{<0luPHa;w?D@laFU3nTk=qykvo zn!J&SQfc0N9AD&g_FFFAES8+2;H~HhhuqP1E1p5y1nwPKgtQF*EI}%8u|a{A%N%lR zSDp@y^0Oo~G>?l2J;rQuwWe~V;yqB7Tf2G_yt)@=atFb4t>6{dsfGQ&2L!m3T?gQdjUXU?n6q_|C^i;`Y*-@4D632 z{Wr9s|5SV>{Y4~qHXb0|dU40o#YhKWn_v$J0TL^>9G@;TVBZ|@OVTn>S9UPN1tA$0 z(mvAowWtA`FF}k0cwh~SF%myTIv*$D+17@F2z1zHA{(L@;$Z-ik)VS1e&L^$j9R&-o<`rJsz4z$mlW>Ug=u@FEHH z|1kG0@J$uj|2L1eDGj7RfdWN}6h%P=iVCzyOPdyjLI8QVyjR4?`e2&`&=qY>Bc#{3 zT~}S!1(#KKf9SF+?z-4kElt6;JcNR%sI2l(ys-#XYYAAI|M$$?o80sbEBeppGr2Q! z=W))NGiT16d0c+Pupf*&;S%>zDj$-Tx*=(s2Bi*pCgeY+G{`KZBuOhRvFAFa?)DTm zjXsR`oUp4PJ+S`?VQL9>v%#Az(9M3=YP|U;0>xexfRTIg?& zd4JiK0a%w{4FWi2AQp0@ly>sd8bnB>UV}F+L~0x&iyd-3$kxd8v}XHn&V1HN&W{mU zjPafcIHnQaKwv;4dbu{bMf0A8h^6{&XS-ev z@^<^6{cHkWtLjsTI~38yH6d!~!*b{0h1@uS|F)W6LUi$iJU^eWjwhHPL1C8Wf(H&IEfUeCh> zR-In9{~@xtfM>=84dH=4VI3>Qm@jjp*VTYWfUF zV?1Ie+Ps3dRNy97U{6+{jPGw-FK;!X<+Y^G^?*jjBn$8=#3a)Y;!Lt-0xHD%B@G5N z{kjovs8ZV5?DQJg&SBmG`{Rv@N7Q?opJ0?yCqDg2cw$*Kv|`*_~_2ngb^Nk~CON{qvLAyzK$hStjKN9FAZ!M`_{ zi!;dik6Iw@JBm2QPUEqRK)c|0(*5B{mHtqSXhoQBfxq~HU~LN9JcDS3ZQSsiwxvgs zb$bo`oN+!*1(GnJFpgf0`(N;eK%mWLL~h!s$Dz0tZ&X}Td^}iNX(HeaPn^&!@yuXi z1+?>rL!h08Ujgkn{2a6i1R4&NKZ(4M$^~S)Oa+MLNI@XdW-h9=#dz>%Bv3)h`MD60 zYM5#Nn3B8MddH&H^4~`J_XN>k+u_>CKd`m@T_}HgDE}C0W7tGw>ehZ32D8$}hY(#% z!i>z`ObfUsg>&TuL=sp23n_>it5IIMs=()3FVIN^+CyN>4Q30;-$kuwokUq%il&i> zR(Na({7OUig`YR%%5eZ0Qj??sZ4VA$)ssM`Ej&a*sFq>!=rg=mwV$$;hqBOyCnZa8 zz5mr_>0$d|;u8X0o&k7}0_%R50igOk1fb*@XtHRBpDUyX#`2CZm4L*4m|x%x)yVh5 zbW!hznSfU+_>{I9ifE-jCct0(FBuM$!nexsQsn;seyfF?K(tcGhw!VBUr#KPh(eq3 z>#N~Kg>flmxsqqeRCw*t@bn7&R;unb4zts*Hx)b#Kd!08GBxwS#$!ejT1J!bmS(ba z#=9U%_PDNQZ$b3?aU&Y;e?kyM&wT(lh0v-l4X|Sz_tRw)7Y-56tk&ZVQ=sY1y$?J9 zJIo2ZDV~eeY*vZA5kIio7xy9>3w8+@(0DhvatxYlk*R>BB;5t@cO>8=_yf3_#CHVN zEgoF7>ZZ}y|4zkz&Wq&*9J`qpFp&zt6=#F!i50D11`Fah_su{U_XpnVyH=+Z$ydC` zDld}pf?H-ia+wS$%r$!}Woeh*b?3dlMF5Jg>@Gz@HsQ0G3a&-P?5w=>9^*LlB^_OF z^bvx%nGX!RAHL!P9C)y#lAt)4;GdM>4W58wr;{t7Tk^1b(1Qff2MV}8u!5+_c2OL; zi4%b#59;5Abc}4;C2Tom7F9v_qMZnW{xW5OPD&eTXyCBY6Irk2SxfA>;Lov>bZCFX zaP8DVd6G>9#E7Xdx;7oe8)l`SM{m$Rrw~*8ii`n!lTL3&Vf};Nyv*M)&~P~nna@fo z{uy;V(b(jAf#MTX@wn=e%oT-*2g^m^+Dqz}oH_1dC#N5fU)^)3kM{iYSGo7lJtViw zuW<3n61?KX{o9QI4ZL?9$^j`{Hy{z(1)D#(1!N%0gsm&6wkQ19A!7F(4RXod$j)@N z?N0wF)7oziu(sL4+h#o;yahPe@8K=LhGiZ5-{3DM{Y$a9Xdk%$eoSm%mDA8t%!`y} zFHggH%|9B@-fe#v%*}X>8fy(wabogzz7JvSi$VT7DgX0wes&FCG3CcFoQO!W=%y=q z_4hA*0IMJ)DTkBiU}frY<0VS!OYu*u;^mzp8pQLu&ekBsQ>qkNJJx3~|3^IG4CyeM z_>PTxBMA%;oumy7BBe;gTk5VQv_<6=gwebY+<)(bzJCR2{X?=$Ykm=*3yIJV>N%~C z60ND-v{=PLy?3*EAB?1(Li6CqGCPKd>F^cr<4|&n{!JBL42X&ge?k1w_meWupmr

NK2i ze^aG-j?$FLX&91xapp0WhTl525`K2;STB&7Q-ZHPEKntyt|Y2JVZ1H=I*PXi+0<#f z)%Enmtn(@)2eqNT;uWu^jJBcOTv-;jc#q2p*gi!h`mZizzwr-C1hhA$7k z;%a1(r&tf_IAyG=)boR>XHe=4b!y(p$0@1N$*yp^-&q&^-T-UTl|Yqjs(g< z6A<-$dSG~Z-#okrTb7Qd#65W80z44Q&Ig{^6NV4h$9&h&d*qrzxoEZ-)OWXsr|D> zXTrSz_nMMcuhG*_OMkj$MOOp&Tj72Q_ZzsU;r;=)A8sIMk_Wd3?sGU+mqr_-)5pZb zM8rhK#6-o!7^1r*mF5Z);ELe>4p#|x3@+l$T%iE&eYl(6$`#hau`*&bT3t*Gl|ltY zvQpsd0+@Fp%~`l1Z|4fP!94)?30!npuJAXwAK+LS(Jg+OXl-<~E;?Et9UT!JNw1>} zMH7*J9-JM{qvR#r867wkveD+R!0m^thwEDoJmBKM2P5EQybT7O!C=tC84MAThNz;4 z@$Ln<%!*uLJKPs=X7CM5AF0ts>h#nYpaKU~t@T)_gj7Va&$ui$`#tm>xUb=Y?^$~V z+f0{<{`WTAY3hgXgHPbr!u9+BZ46fi_Z1w=-vzwZrArq*T$hN*E?uGw@I)7-e~A7G z=Q^A#^!X@P_zsSxkI+N}e_CBcgnn63`o~BINAJm1!ykiwuY~D23*qf>U&9SRI0xB%Gkbpg=+4!rvV++MgQxSJur01Kfvjzo?bVK{M!y54uKo?b;=# ztLkTb4P|@=r$-s9;WolGtD9iZM(85+Gf{sr+{Ul*Er-*&!q__WyKhnN_xMKQS$v=K zT&^(eJp6F88X-&IsH`t8N!6yu(@mfP(g?@jenT&VsuSj-_oTeDxbyU+v~qzAN>)AR*>M`1unO)C zxU+EAqdk?fm5#uQ=e?mwZ?FkwxWUmjA+L)~_&&xay-FymATOhC9uj|k9n;iMy5ni(9x?{j)iF~;H<=FjtF9LO=Dr? zxF~Ur-!YQ>S((qErohH*VG5>F@;$=(a|_AOXtuhm)A!0FLzdJT;+~# z4e1F{4uk6xQ$YnS)M?990Hj1Zy5eq9fFoC2s2vySxUz7fW?YuW(XVi#c3hU$(SucB zD4eKkUOMhuqcYPIlA=;E;aGxz^9R_A=)MutwkR@cH(_RH+Lo=M758tsUrSeuoP$?qiY4p5a5K5@-Qi8&rQ-?Ov zqF%HKs`gR6krbQLNH^(xaW!sqK(kB)@*lxZb(#wFz{&R|b~8Hteer<<8LQg~D^mUy zti+BnLU|YLSBK#>;9@cAvK$yuy`=;JV3+4N?cwF=!f?6Zi$P|mzmMZ?aIa@|W7!H6 zA?MeEd02aZG;(`HItIzC(^qDl?#@8K-a6;deIvx1us6cz`owo)D%BNda`i)4u5Vp< zeI{xIxjry?*Kv`!sU6v5W{15A1_@s1`|yG3UGL(_K47wleQs+9NE(6trewH~JEZ=( zjp&edFjBA%NkMc-Irc(Z9a3%@b+;T4)-6pPcgT?hg|tVzI#F)atZgNL;9RUkk4EPqB#9%lTlO*#8v$YCa&rf zaYaE;M~+pCt9o%wJ&7wv5*JjCgu*NmQI0r3AFy{Ja-3~0K-A)C@FiEtB_w)3x}x0s z2^dzrEFl2_myq?%LBQ!7YI%iZe@B3k>;-rj$sBQ9emRVIf>h!1^$~W3q{3YO2!|CU zEW3Tz292oQ4vYl3n`~D%=pbj{g1s~C>FCY@({c%Z%Q6z0!OEiWQBZB!>Zdkpwp06{ zrf9i?><=);>2!B=yv*y-J2s&w-im6ReuLv_xfiZRqeEInI-2#rAs8$YI>nXQ;1szA z+&78Y*FaE=EL#3CF={>x2)Knc}bN)SLq zLLY2b?myXxr9D~hKgRt0F7K7_Q>9o-VX-<4HQ0p@KZd%6{ACyHw?ut}Z^EzspxF-9 z;L`C$WtT9>m4FvZsNPb7pcD8$|3e7hr{Je*O$7xkmSg@f^K*Pxzz=-y=Lx%-T(_b= z!ncUpmyCez4}okr$I$K=LEYqk9RA(~)k76Soye(2(YVj%GLF7C$MKsrcKyZ!6>bBxD;W+Hq_Pm71&ClW7_!r0qX@XdK7!zWH$ z5S!IW zeU1)OQ_*?;XRbaAQj}1=r33*8+CDwU4`7^d!I!ZF9(-)gwG9P;Bg7A?%>F|t0tyiA z-4Jv9)Gyf*Z+$3SN^Ra4Tc=HwZX?fI25pY?NnaW68b!*K62Bp-NxMMqIDH zFlrps^ZQYX^ZW&SQeieJ3HUGqA_}t!Y%B~iziwPQq_r7-NUsb^zoxF6$t6e){`RuQ?7sRqUHgorHQ02*y+%uK(6= znZI7G|56Ydo*c_)C{IWg4Uef?G8dDYrA$kq|EiQOuK%`Bx6~Tn$g_Y*Tc!d4eU?v1 z)%q`PA>=q*@SVj(75b@TO4(k}0$rXdKCG{Yt3Ehpb1T}HO=L~3?aWV;SzI##KV~JS zf^w{U`Ci4J(~tcye{BFPe3EmBidMwOc8t|DB`5KL*#uH4g?iz41~3l3&LVl~TbQ3F z$|lz)_`ylf44@(PnA ze6Jk!LiH%4guGr!jb@mX+$`&Kn}DAE54A1^Jxa+}N?9E$r4gkB<*ipWKdXJ6WyAKO z+gLW-hmao1W|+WfjJ+j9-{7>a76cnc>L4*{S5rYZmKPE?B9xb|W}xxA<@^(OPolZl z`1oIVeC4EQQAq%PCu1Fu;7xdB62t)tW&b(K!)_+Z9sC46+8_KqzL_%u}q4hHi zWy|k?eS!^T1Oe#=q4A(CyUW)Yy+{E0eud2Nz>A31lNIL$C`MFSB1V4xjnL8amUnURg@x3`JnT8>>Q-l>5*~f0D zhivpj1Mwg?dk#Vq$zf*r?2e`?W69ewdcIqS_M$}8RHlNO(}4g9^1XQa{*FJuh2Z}o z6$6AU9!LyA!#2b0K@=p52akn3=nSD5OZ5#ScPGZfK?H@iOa(xQ&~n9`(A@yIG7M=s z66n|UUjwJl@W(`6vr#^w`?Km%o`S$ij=ij-{A4sYuu=gK!b+}~V>Je#gK!so-N{2% zs94G>t0}8_11S7YK_DQWu|UNU#`wFLt`7gZV}xPqNuYo5P&-S1F8U6X!~?}i?-iN{YTyQBu`uI zKVgQmFb=rH_1!XD+rj5g1Vl&t`#0S4po~|~!B5mR6+FRW`N&nk{A|3k@dTKQ+(CDR z0MEAw&u%Ko{u3ej5$@;Ui`WDKknCu@8UUlbf@gR5Ii9I#INw0tdcewwQVFXXSXjfb zYG=Iq(c7;HMCPaw7#+2r*$~2OEc_g=rBi7Bi$4T=;P6Debicewi;P1Fr}0hagtf-oqswgqK8ksaMr5t-UTnKa@p`hA&!91{_>P zBuE%Hc7&e?!a>0=pZR%jbHESepeJs^;-T-i_+xV&*p}#g1h8cW?bo?Q6I(fc8iV#d zxDKRLRVmY-$UfUM+@9^5hdU%_6=y1*3Vsve_x*#`%KTj%LuA8LJtzfXfte|N+fr?j z`jEo-ww$XT7jVd_g*2YJ#eNKYy&Rx1dzc9xWy%-@zmN29&=Rw(S9nRx%3wrMDk}p8 zG0T!;FY7ETiJ-t2yFvi8I?KXW=syc#62bi3%5d&eh7g#e7CzsnJO~o*28ESbWE?ME zncPzl_{p(QQZC=*K9iu(mZ<;;;U`zjr@!HD9zo-9;jFc zFM9bVm!Qy=sQ?IZv|KUg=tZ9}%3Sb`;htEme^6doT&Hpjj6apQE(IM+Rh5S9&8@CK zcE@NHTz`B7d4me>uc<+3{n1LX?XN#JWI%4K*B`$?gtGql5%cr)$9Lh!BFG*}zorh0 z+c8vl&Z$xh$Ryv8K;tKUn+TUjE8mtsLuZE^*EpMKV^KP7NyOG1_KA5+l+#H;br_S& z-R3%ZM$0flFu0wF4WxQU9931n8{3yqf&E>S`F`!ISU_>yB@Z@@GY=o zGwWF%1W9M+ld=p{?;5`7-L>}v3~s+7Ksp)+XMe!J$G(yNz8@$wC(PQlt|7I7cir`+?Wa4bUWt*zM0!sd%V z1~U6VTaF9?(oy?tJ0#;V51kCvLmtq5BZ@p2ZU3WsWr%__)biNNDi5Lv3JkR&0NRiT z^|+})Q6A|Q3LpXH@niUW@9-e{Y6+T);Y13 z{#_DP{6GY4)cOkA%3}vuBV#hT09lm&vYx}MBXJB)qaYetj)kP?%w#KU4Ykut)*l`O z6xuQs0HOXOSIo!Hoi(BUQq27FJ|6hNaF|R!51;RMJP51G8Y&rbZ4;0Qv#NALI)@uD zFT$XrnkHNTrMWeQAYjrt5A{+=}&{heS8@9)@{+887)`aEr3oW!{STt5>& z;(Dn$*DLd(j`ZIjW4PFdhL(-*ob`z%_>MSCtD5gy=!N|@3g1UFKj-@kv_XaO{m^8L z6MgWcE} zNm0eO?_6KXD8;4&CG6g~bd)Y_h@U$GYrj-)DM7$cN^4(U{S^iirQQC>{Jh;f@bh+i zl*N*~GPzd44^DN^OFDP^$}Y~RNrZ35%auRsl6-v}a1ByGmH*Q@QpY85)#>XXJhf#6XzM39@l_cjv3!i-OXlYj zluwAO@29KGT210mpd1$@5lJZQoW{hcToU1TZIEJoEuej;6R4eBqUdP@m{PL4Nk zW8;g`PhMkwE)4z(KgY6W7{=A@_+#U0jH#d(;Yo+FqaEYRBpeLH@q3`y+L?!6VOtto z<6Q`k!Yi}k_l>7Fext)q{hs3%x))`~5JFq$49 z#tkk1_`C=!dFLs4XHedRdFwT`73^IU&Ofntum#=(k4%Xzpg(V^>tOh!Qf2#}ZvZ?B z$`LFlP;M+osh|ITqsC`|2;)LeLL5qCQvY=nry6J|2%#s(URI&^OM*gMrUIZ1q4&=d zp|*X2`FVRh3qKbJ-m9TTu=`egTj2!}fF8c6=CCr^BYwMm$_Zt;q2mrE+e&ed3)_$0 zvOhaA*)1`*pf`;RcBSsY-6-=>7jL0AAeBP=TI>5i3gbg>u4Q2NvK2_jWHQ&^T9Z{z z(M~gYID4G=IqDD5t}|lA`&cADKzA4X=n{9*J7$a*s8h-9?0=sPZpz{u1<}rO>}55^ zKUBurSp`6-o#l$Taq;fALhU>cejovDFb6*082mBT#+j6BQ662lFjDRiZ-Hg``L<@V zVeRK!Havu@o$?L@Tbnx&UO*<6 z16F}I$%}mpcj7Bt+^)xj@)Ar7wK@@773a17IK@BUwKpcGHPqhF_v}ZT?K%Z%eu@c^ z2Q9-loDu|`)c4-~FYsiWrty(C_<|UsKgqZqHhEDHCN2&k&`HO*= zf3w@62#${Cdk&0nRIBehWOMpq{z=2WBWj+P2#cS={PQ{ttla!V5VQ|JKkJ|^K(2M@N+yj;YJVNZ|PbOf4t)! znQ=Zx4K!k0`aY>YgB|&$C(pn~Oyj{*J*PvTpCb2p;n>g9=eL4ic%LT-7)jIGvyWa> zzu)+}s^1qO!211Kify;w4^sF0IJw^&<$kZekrC_XD6E(khLoO2SJ(`p8hHOt09LK{ zf0L`nYk&y1A|)wGv<4Ae7~pcCt>ovrvk!jg&R^oex&kJ375_$Fy6d6@9z|<-{Wv=p ztfKwA0nBb5chpw z#S&mj^4`CIC3=266rnIn(NDSlG8I5@a}j~jk$k&}8c^07u4R7S@2`NL_xo5D%hnxr zJQDY7`M?8&seU3b#boJXggA=*pOuJvP=5*4TS^eH4%uFR#QBF;89vY>4$JJ>OtasN z&2%cwo`T>?Irg&ZvKv8FaHR@>5Lbq2_J#ipapfb-&v`Kye%@9~;q%R*AZ=>Rq=I<| zj{}vMoNhM1Ga?DuegYtm?^8}A%n7KHLv=haO-1qXnlqR#id-I7Jfuf1R$Zh zl_i?i>;BRA@9l+7$@lLO_8s+~rX4b0eaJl^`@5h&h{sl$hocB^6^Y)TW_{a&%1c$X z^7Z)hwD=yre`?|uK-tO+x1673QY`osL_d&YFKa(|<{yAaTc!e_jehXh-$VUiCG+!s zupEBg59Y(?n?^wxv+tDqz!;?uwAg{%i`lZT#6A&O=od7>Ivd=9-$>XAmGQ zc9V$pAutjU@yD8%y%g1nrL}O`ByrUc~M^-~qeA`>$|3RudlTMQvq&$xmZG zmMXS``UQTAyaC!W%zcF~xp*_e# z{b4K7yyL<5NAJ*GQ9tj{1VJbJ!|A`ubpQQ+=7EfR2Th^q{4eoQMbY^wh*3q3y{tO_ z1cE|arUD=|s)XtM!-0XK^Cxm_p!4^D&v)S^ltE)9xM?#<26=RUE5uFIA1>SeF;#C^ z0X8XB)yw&*-_92N^h>}@=X+<%BT_YBWg1}f(GQ;)JQu<|3Vu3=gR7$XpxWT4mwblz z75tdt(cPEKbbJEDk&8bh7mstIBs@ZkpT3h^nBYRa*C{y|`zX?e-TU^F+8?h66#Vu# zf}7F5VU(>pHu|x zcKC@Eeb1j}9w^vP{zb+HqAj8xT@>ql^iZwyv7l<5kB39+d@S6~I^Qr@CFy9o$jr49w9M52(+-dO((<>Mz*v7WjXA)Ia; zgIy)8!Lg~sjwsq&bG0mU8-W3dbR7RajyEBh3mLr+JmmCaPw)gPl}}2H8A|#oq=kpl z`%<}9j^weF9Gxc~X~Q|Xn(%(jwV-+$a?#?C>ge3|XzW4-F2TjC6$rqH?f8}WAvQ(Q1=-NKVZx{V zP7xG@NRneOz@$K&NS`0VH+AZi-U;(_KDeVYpU zLQ4+edlB}caB<&xeAQPj3O^8nP)LE#cRl`C z_kl{chqx2HCXIT{&!Ez+e@;>92m){ss4y&-thkoy_+c{@6DPGEpYs zG?#EvPu?%TKG&P=?uy0kE~ENVLq3lucslAQYiO(^DZsw%Ltnf46=L}Pize41=I4E6 zCj96l)A0ye>~2HL7Ly56S?^+orqR^ipvMZL2N`@6#qjdeLp6i@=X$g>)m}<)bVP^m zvC$=*4kr+!(BVVo=XBTuKj^Rvk02c;qOL^?+4q9xiC-+(Q8adtP52TY8IMV@39GNL z2~Q8S36WRYga){igYoUhAvPiPDx0tk?xmqNVdXXWCgim?Vc9U7um$b}+`!>B;U2hG z;BLDf;T!PnIkp zy2U2ACg9tEX*OYOI^dXyG;lX(*o1R%NoJeyJGiH^P=B^f7&pl##NCQ-1j4;=8(^Dk z6TXJKGRGzyg!|W2o3MTwzTY<;xWMh3VG|ykX%mjzj_+8`vI(X;Y{I8-Gv?WZQS)s= z`~sWs`9hm;<06~zEZjl3({Mu<+k|Ym>z3gAg}<~3x;t&cT(}ar5ld}C+FdpwaT&gk zc#ln3yxb=I>OSCezfH(`0N*iOf$wJi+9v!m*CzC^*@S28HsJu=Qx2Q(i z)bY1W5Yo~oviRnI8JXrRA$yW=t8kkzd5VxDOts<1Q%$o>pCJe{Z=WU1o+Aiz@4$z! z=gnWRaM9u=zr0geD%`b|RHd2t)(R%G)e+#-HA%scFCO5Mu7V&yRN7M&MR zF4tHHUTG)Kn(~9a+w3{hrQsnkk#JwYu^FWdtDbI=J{b!6Sm((p7R_6LMT*zn#S-W> zM)$17xl@l@KgG&L3zOfSC*8ONh(eku4I@9%KBhO);{y&uz+v?0(?tC{ulIjm6R2_S zG%Tnv2=tPojqhwiwCMFpdgn2d^QcMZWko6P_3S<3n^i#Xr}J{R%H`_SNy77cB}0-% z{d#Zs`yq8;x70e*)8$Gczz>#k?Q#rTzT7HIU$3!RXRg--dg=AgYFfsi8Ap{b*s)xY zZh!n1!BuX02B9#DpuE{4E+lMl^lB};QOt^U9(~kVUX4loDwDWR8n)+bprCvqKw7Y4 zR5?CHA6DGnP;1mG`Kj+ai0c z44uE1J;LeNIR3R&(;T31dU_>eGkS;MZ3F+Qv7$Fb0i*NSqj~327cxS&g1!p>Hp=7l z#8p5sV%BhQR}z67Dyc(w)a}t9Wc$-DY7a*&yhV9wpr9jyQ9&-UIsP#hi@#joai?Fm zs;iilicgwqRp>V_zw0HIALOq+j}j898p8Rjd3{}4)+d@1W`mJ3h$F6Zu8G&d7LkMN z<}|5y)1L2id~=ode5W`6W}&^iI4f4nF^Xn`+u*k7(JqK^p4aDog;?i#ZSEIT$Rd`R zp6cyOj$Nj0ncbTZ+m$?l=C5BVqv6jpu_>j}lvSzQmr`TOs6kD`K3K>qQ~D9w-+79L z48v^k8?h_(pgB-blAL>drgPx55fcqJ_jTUk>? z|FH97wKt$0yQVRBwz!}%BjvMP^U7Prsg_~8z2~$kdu$2I^&b636ew6cS+`p}QzuD{ z_hAS?W|U=o4#GJOEfHBoNd!!vQ@oBd{FQs^6yPXkO&V5>&x2BN=W_d7pGGok5$4|3 z*aStYAq@eiFLq}Pr;?{m8s_!-wJH9#(obdS&3<=63BG5{Na$W*fbetehi#E7+ZB3& z^OfA+=7{H*2%OJpQb#mlG8I)jAJq$vX!k1pqJ;~PPnkzBo_C&c;X`Cw>!f#0E1+74J_JoVN&$2+*h=_SCLtTHm@>PrjybO+pfRI z2c4^bTr2f2{1NJZtdsSZe%2EI>6cJ{JkdW6O~4w=h&GeX$ROZ@+6FXftn|-K8G;V7X&z+`p$B_%Qet%Zipc zABHL?K!S=rBPg^Yc5YQKbT^%?5lJw<*%&4SN8^A zt>CW;g0I%W$IG=-T&3#?o}wt2;%V7e=~~ZUZ3w>F6nym(e^nfO^%i`*+|3kM=_=a%f3q2UjC{k`07yb)nWeXRPa?De7xKv6j$l0=PCTb6pga4(j~xX1^Vjg!ANhA zeU&aFf0Y<~l>{FzH-~(27ABR7SYAJ^`tSnW)D-K^uB&t%qDYZFD0jU(yV2u1 zjL0gNB&V-(oq~_ki{1z+e*1KBTAcG-Z0;~IDn0+4fT1n7w`gf}dIt}yaF#bZ{R2&F zKgBR8R$%&8G;Cvx!W) zc^H!UgD2G8S!WessS4OE;xL+lla3F)2f373^}vTgO7qS&NgPi_9IO=pv*Iygd|Y1yeyGDCvBAI1jLug(nw7 zF1tMhZOW5N;m_^6T<|0wSxRkjbuf=_8zvQ>~-(-X>&)_TZk6GJ|k0=7A33zV~k};iiH_CLk5K zt%zZ8uYd=UGTe5A7~EH>;3nC4QE(R_LlEw#d7wkMU;k@MxTzqK319{84TxcIljse> zy%`|}_x-Ph=uNWsqTpsyTH%vw1r z2&lzH3wd(rg_dwrK_VLf6}V{(WN_247lNBcItKTX{|wUGTy!x&uX$Rq-|bwpUa&9m zJWc`*c0w+vQ&t#qdn^~kYH1{a_#cvn;z~WFoB3(a)OgXn0dPc8aFaXBAeuKLh{;J- zoX5PyB3<~$zCfXQ=en#BviwiekM?*-UQ3U?Umqx@B?*sXs5o`6XXRd~m270d*mJ#@ zbxIk0dV~)?tL|b0PoEsv19|$LhN`Sa6eLtdvXLz76q!x_F5-ia#+L=?x26IIguhsg zKr8}p0za>>i}RSyRPZ9QIemgX$?4PB;tJ)YIn8q19Ih$!21 zD{P3h_4PoyyZPW+*7RZN|EAj=TT7jw?tvT##Hb)^B{(VrbYTT2~9F> zG+BA;!U&pXkv{G{+-=5tZ&NdJ-xkjNl8CD$4L%?d|@cMS3pb+1z zWU*+N@i%vlZ`94wlFg|&>9GU#0pDw=#(6HJEf>R!|(K18&mQEullfdzNPe<||?L4WouI4QfobHU4 z{G%_PiI!_+djgv@L3D;Re5yctssG1luQ{^Zd=??u+kZcGvJfh&cG2O;OTj%f*vV~U za{Y#=BTqbu`#I~K4o zb!Rg)3r$O?FseYpQ?5_CGg)brwnnd(ecHo7l!Y6gbXoYUiz=1UhJ76XKgbR7)VtIH z2`A|d4eEjv4!p|x!6xbljQgl7+(mt0G4%&*FynlOZHN`X9k$UKl9-^h5Fgw2^S*1H z%-C#_Me6sZ(sPUY2DzXYDo59VwM>lhF`3V8YSkn$gfz#!A$nCXdSQ&5K1!ho$Ds3c zQO`fAIO*BFH0;zya@K0_#+wSx0wG$7ilT+MZl-N{TVBJCh9uWZ^stQ)r;Q2NQl;_t zG0T9?p5T>q7)~uxEgdJGoQh%7dOJgTOl=>OVv!!hD!Vv&Oz1@_3<;j$pf~S}d?E`x zEz+uyox`j{eT5*9u89YkT~v|G2^Q%pv0l~k>-Qiu_)9USDkBwG(})8xgPt=Kd9b*V zdDcqLu(*3xWzZ4`D+ihy*8;`e z1?8((3Pb4`vQWh+8U)%A0E*;)LSyUx>2b($-5hk3RGf5NX^Y@u#y6%f^yS3 zj1EHHv8cRr*gLn8;LI39`o&(i#+|PBxa>qJ>AR6%QzxaR5Jml2j_p!tdW-bo4Q;DG zEdk>lV77&;MQSjqK&kX|H?A6X=QT7L>OSQOlM#OFez3U*>w|9Gfttr%`Lzz4`Y+tQ5d6&q_ zoj$|kq4Igj(i<_r%*L2zr+b8Z1(>EDZ!J>U4b+xK4u(aVR(uAv(kp3cBN|i3g#_`Ikh(J{Q;D_1p^R6cBzjn+m){6NS@r{<40g(c(Sk7BBKd|Z?I_Abp!s3T*;C7Q z6d78>yu3Xv)481HBM=oX-QR;m69Yr;cf7M$q?eLdudqme;vRXB`nr-tRXJ};SxU@>*8ECU7!UISCi~Rb|kaD@bMMK(`o(dm&M< zFNE?*(t5lAvOoh?LWu}X42IGW8XXM9B6L-7zBB@%cxxjWcG-I8QD|hrWnSzZ;yZ_a zNM$>Rurh0{1^ulCOyaG@_>*2e*dLdK3UPnO9=BJpV+?OKn(zhE(E6xRJcl(w&oqPN ze+w&)W+SZtM!B=~Vm4cm%?_@}4&8zGQG7)0?g4>L9uUn{9(@8_er*PqS2K0_uv>C&GO~8@htu;DNOqeOH#-bA|+kh>K=J+as z)Y4ET=GgobOpV;b)W|Fgf;2bJn(Mw|RJjZac1P+RX;ieBHOBs+s`P%mbn7%|1H3O; zCSwbAs3tCP#NN)GapK1fI}+_(#T~S($`RoVXzW?e6HzmzFJL3$=%@VP)|61UDJCdQ znO-p`UPTfPsvAJc(9Y%1g5ktH$@|?|W1v?g?{Rm-Bjp^V-@+hRTLD&3`Yl>Gs+`dn z^6eY6JGl$8Bfq-+#l8(Y;_V~6nAD%p&6M1%sbbMoV;6v;B?Myu zg~5ANmyG6%Pu@ZFz~WXat5p#esD%1k_p=pbg|!dGv#zJ$NHlFT8=%?;&IG(i<6%7UjpN%0G+pd$wPGYV-1!v|c{O zDf?9_xb)5Q6vjMn>x4=of*0p+kHu z+yJ<1;ckY@gcCFo+K7k<9UT4iYKklT28ispdA~Biz$R8WCFmheNdv>Yq;XhEgxkmj zUs6w0j$p(FCCARfHbhQI-t$A0l>3r_=!k-ej*L!|sKsLi>#=aP#lNe6P=1S=A%X3m z2CC9AZNt8MVXIcCN}o%9;+Gx4{s$RM@OEhxUcSgt!WTI@4{sNO7X=65og%~AOwF34 zf*17TBknoyrhT}xsfYb)XH%U0N@r7d%ukwnLZlrEinJ9uDv>5ey-ez&eQ3augpI$> zqZ2IB8uU7q=wGx@5&jD*67eFzd(xO(=bmQBKS^1W>+;qh8Z4M?L5sMv=i2*Yj?*Xq zBn=3~f{-Z0)Qu{4-%L9I69pcfT&|8&!{3WQ?@gfhCD5+`=r0CAPn)6!-JF0Gss7fN zg0G(rzQ*=eG6I;m5rnWyoCHfC0`s3U|FMD4?ERGN}5n^4OO?|K>yD1*~5qv=$s>51G zg+RQ5z^9nFh&e&YrfwcC3bHL|1eynj>(9y>D~Is$rP` zA$GaOHD@bW8`v5Jbrz;4$(_Z5DP~w}%nS9Fc)|OnG1;I0CF>`C>LV#`n*lac^o&Jh zb;|$-Tx|b6H-0ZJmAhs70pu$a~^hQrHSU%*u`W7zZ&q=C-1_*0&yiE`DawToA8^0^AmKy<)|rT zhds`E7)5e=NQ@pt3`$_21m;Yn_$Zjdl1&t&6tfas2XR@u2C%NNpIv(tor5OEj)~6m zv8%>=*485e2br=m-LWuf^>voVR;BroM)0J;S4Tc9qdUIJUlt1mFOdIRrG(nMVeYCZ zg*q*qJ#H%Up8Y7MI=LLzjG3M)KYKXFYmt6C5;OH#5QloKWMAhdbJ=RLn3J)e)Qir>#-6y?67-*(X-kpPR$gv>vel{`!Tj=`)OjB-H5Fe zPOmX#KMV{}Rb+n=#J+9~j%5uJV>}tglxlmI>A|x|%csngUKlO|Xb=||omH_|QFG5q zaJ)dR>J=BvbxK++vq?ILP6^j3yh3>OnUqq@cC2Dy^P;GC_#sCqRaS;)2_g1Mb;m&UdksXgl1lZ+rb1);4TChm7r2KY{h$z*e+)&4ibpQ61TB58>x}*)FQERAv-~;5;*ApB3kWKEP8?o zGmt721tMePy z(lZU#l(`Rclz378ODc0vm!WqZMn;!JEI!DA_OZaflrXgxj~g3uP8q%n_$w!)~fV25=l5j>>f zYRhS^uSJQ`aItWG;I4oh0yi8k8BVD`b`|7T-sgw`7}a z9;lX&FGNq>s=;JncqfF&UY_|0My%q)EM(mmPP2VwM6(&lbqCyHxVzz0;4%HUC48h1 z129sEL+~}zYI9L`2)<#awX;w+V4PbOg3-yQuGG>V5q`H?kTPA-z{De|q0`fGZ84Sgzkc*d=z;g`ckJ0>bJI`2D z%NqJ#{z&5B*?B1SIaa-uLm_kKd>%^UrA*)dSX9W*E%pXti$0q*R!XIz( z$6o&UoImRM!wBmIkWb=|H2xSKK{T-TCIv0j6Z~)W*EFCVFTm+5ajqOL32qqND7dk3 zX>i$aQ{iU8&4;kLtl0(TtF2UiDo z7On{{0xfQY>j~EnZV=p1xEtVZf*TK~@SM^=IX~ZC9paT!j7f^?`9tFTd^nt+o8BaT zz7n~vfg1sLGn`U3J$d<)NB~iXc^$8d$#e8D2%#&33(7|kinIEH(5!nh1Pup) zFPV#1akV66R}-U5|6eJ22-9Q*cn9^O3YDOsZXkCtG$~ z3fx28FH*#;CMs2DALM)_LF4EnW+h_#r@be}aO^|#Ywgk0A@x)+RnSZxpg+p?2_^=H z@)|~{4>IDMW>pl{L13v*aA(JfS)<+A@yeM^mj9bMs2a!DoR2`XL^>bIq-8={UErl{ znxuvo2XWTKCWFJ`$Rr(jbR;5j4DP9!&|EPCtIA3snpb5d(!)I!Gse*_T;{VLA@OmV z+q?{_3pCMOh1*7JBhri8T_nEO(p1%bwJ8n6vcb`n|?8!{D9>#a9nG?4H<| zvfoil#E@<9G#+SNA?m7qPBc5v+d7AKN^CIW&?`{#c$reRV7KW4#c2vth8S5`qXEQmr@Awi*V1L9@!i zTfzF%nwLN;@1gqBpuklL8)(;`vh>OGv$`owv%JLGRKJ-CghpQ>4y4H9n25CiCkY5;dc$DOgWIdFuX=*jE3b z*=!sALq3cyn@-N|I0ufkcVB+L)ruuWtAsx`5;W}4+WR$R>9u&bg1=j5k>9yjCN%8O zv)6jOw)59VL$4E~7t+WifVQ0RWF5QCeBhDF-GH1Abl$bqcSavFQhj@=_ zQ@l2l^IYP}E}m(_rIM}vu~^~Jdw`N)Sss`nHIAo#W30*^Ls3=Psq_%n?!>=)Z8b%$ zEyq9o#NQsK|MdCpwMUp|v3u=Nc&gTZj(_?Ql|yUrXoFbvB^XIIYaG#HG=?HrghOfr z;K$^XAJKi2ig14EHx>Bc5oeCT;r)~v9N3;brWT8&qw~h6Ha(^lJjOzdY4&UJswZs) z^J4Y%v9Y*#uEJ#Y)?O`UjBXYc#|p`yLNZ2s;vRG378LIc96s9edX&qpzO@jz`H_^H+u_Rg4(9Y;BJ(iJEUmyxBI{q}3bY`PgF zH5De_lX{3s|98*}QvZrETRAwNKW(&t26Mhy4s->_1LE(A0MLv4T6ECJi8^A;~#gB#Nm*hn3d#CPZG0+y3>b>kHotlBncg9dLz3_trlz4 zA0wsl?2coQp7@?&7FiFpLd*^lM2Bk=sh~TIRp}7-8bSP+ipH@W6o``JQ6L~hPro&; zVaFi*z+kx%?8+<@+=Y4Ex5iT?i{>>{Xeo6?^?bf(PTE z-{A(BZWzK~3?I9QY%&IciKFC(!VEg_K2yKW97xqTZWO&S753Od78vS0r*RB+9drz| zCV~H~BXF05bg_}Ge$Y7ji`p3YhmZRNp9{uykTK4OK&c3*&6(fo_Gb^y zsjvMv0EfylZ;`t@2OVL&H-A8ead&qapBDUyT|A%;1GA!V3W7fQr*>j7IduLX zrDA}g1p&iy&2ns$P5p-U@X|lsu9Thtr?&(~Vv`!8q}>l+i*u{w6&z8Fy=w=H8!2_e z4h);tGSIE#cT`^9EirAEghG7>|AmEz`leIXoVMmnXHgSj7uY)vCKf8lX;oEMA6Lr{woTl{6D6C5OqwNFn zF#&r&T+ojzVs5go4?v6-bopaQCO{-|d%A4F5lt|hPtz}QPtq%@T!>x~$#h$oDBq`* zI>FxGIt(&bo?4#{O6RFq{^i$fP3Q#TZI<7+m! zCC)nHDtF^!#F@MCwH$FIbc~gS=2(np1?Bc@A^zt`rYj*RcN);g`q7}7Mhcfx8bkM~ zuN{Yx&36X~D6WZ<*P^hmG}|aWGzy0C` zm?dOe5RRw?EB^KDInw$;aE};XKjU#^r2cMhMWA zvG{~Y%2~($pbzyhf}<{Asm@QLfNK~QjdK+v`Ay=+=N;3|IoC7__FfR~ z=f)x$3UQru2ELR!dv9^Sq&KJGY?nO_d!f%|GH-McV(3p0TGp}9;vpc!sW@TRiw=n3 zkW|hQxA{n+*}u;Gd7=5-I`bEzx!!F)>UKy~=2MhG`pwgzBjn7~(bnELiuC_@dl&eq zit~MZH(8Pe0vjMgfB->)Mxh!T)Zj)4giQh%ScoLF$i-H1o7$GkF3>6v+#Jc~cq&@3 zw4$|M@s9n9jn!x(GzkW|cm<0HiaH_GhDsqQvcKnxa#pIdkUn&O7hC z^WH|!O_js|f!%h}S>kMU@EdV8>u40Ks>dOk-3VVVHxt+9|5J_LocRm{E<9PP@$Z%WpaS>9H`S@9uH6OE)GUvmuCV}(uvvZga zt@RvWDd(g4-ZRa|m~*K^&c_q1qfyviJ$*h-9P6kfXPS>~d)0gtqr&f)51K=C1IAJ7bDQYR`r0)M`(@H9c86Y?CuzK!r%67CD{ z0nBn!t#u&r7gcOMN_d^M3JLZMR?#Rze>(;2s75zmkCU&eXYck-f0|7v1Xecud?^l#tm=i9&M+UjeG zRrNjHR^O^~sIQH`?>L?=&(}2q3L|i6Jgmw?Mid1)+xJoD{VqK3t5Zs`co(K<;GR!C z{+;!_WYOf3r+Z1)ScIb=S?a)#}aC#0RM(g#nqhu0i?~mHzW&Gj}rsQ0|{}kupj!^6zzi;i|Av9rM zMoo{jNj(D*w!k?!(24eKn~L;V4)ZkMp#~b7alJnx2A@vQ%WiWHp5gB_8%typ<8Av! zL;kw%ki_%ZmSPp-k^Wr+DL=@!w8t#s_~NC-ZPpR^vNMWht1AUx8>J{cpGrscPPypr&N8s!gn5b_H?r%l-6)CE@_E>Glt;jvO4pt8c z9}p4LAlB+IsEYv^SNVlV@Y3IY_#0iNOM4DrI)`dGe=cnW3PTpLwA3d5heWy5DK1#M zH>~f%>WiIu0wUKQu!}fFF3Rrl2n212r&auYa<2Lu3OHMlc>ni%0g@C9Tz=f=w2x^r zjZHAns$bQ#5Bna+F%=Sy|8^WH9gZVW6rv+h<48H%IKG|KZXDgC$B_aP@>78jJ&t5^ z9F^Go|J!l&?{FMWq21SR9R1HUj$|V*ne%aF`*Gyq^T>SkKg&40aQ)_dyaB{$KaLIO zhF5LqYObu?fM1LC$WGA(V zJn771S(MatC*!%`@Kx9X`Ssxcge`;ND6KQN;=|&WUMV(3ltECEd?PS{zEyjn5lQ

q`ci}JDt`~dDT4IE zKLDJVX(_G4s6DJ_xK`JOmY#rGGSCVs)#@4q5$I8RldoVhIwtTVC6Ml83%iz3^IJ6A zZbMi%qws_%KoUXLM=ovk&(lYNH+SeCH}`6{xxNEA$mWE(E0#OA+WcKj0bQM=d51bj zpSGWnQTR)71p>+eq4Usa5~e#-`$&HkR&)178dQR0lcoZ0B?EV7RHcM8MZ z*5A8jfA{o{^!J5Ge;1x#e}l`NFeYbrcXr&};B6>yZoNIVf7xyQYlG+c_b>iz{i8+K zDa6lG>a>IAsr_5mF9N?6jiZpTPtEdwNlQ*7-q+|8jn)B}#zUV{w9buJDC+hul;`G|0%Yb&iD@2h7do)Zk3x%pcR|U(i3WvX@Kr8dXuqMx%=e8 z?s9ke&5tFvG$+Vy=T<%iTHPmS&+^A@kT)>>P*Hx>g$~*e0Z8AY{R!>b&p!Y5JAc3S z`?YI7;r!bVUGTlee-KJQtX32Ld-!yI@bCQn+W%X-_MbUR`%(CMPm+bN`3NDUcK&n0 z*B{}#|KIQ>s=xbtS^ceFYVBO-(%&cX-S_D4HSO?g`1#}4CEu_8F74VsahCb*V0}N? z^Lvf|!*=a&{V&G<{o0=}BYJ&h^XdH7*ONWI*ZBX|uKj1u(tZ@aUV(POT4O(`?{&uY z6;<9IDZe=BjO9C+-z|yXYkXfn_jS09ejVb|`N4Pm_iO(*Go$DCRz96y`&(S!Yy1=1 zwV!?V_F;dOK$)ouMe3glS>9E{rHXNka@UsD@7u%`=$ASF(A6nBl0p0^C&dZRj%{Kd zjBIhh?TX~hFzN;)9yc4Ni8D9N*0;@?*)%3S$7agAPi?PmSO@LZcDLFq>9{>xTYLYJ z$@cB-jI?)HpOgT@YKPtfH(lo8rb{nwy39FQ`-!vbjtRl9djzh=+fMLbfW>w!hcoTuZao7^GZCN@;SPw!#-FN;B&D)A7+_otv6a5b6RU% z0+-<}j%#dfK20;Bqp=72!iv{D#u4Zt?SkE7oEn*Z!#f z2L-)|X1VUO8dB`1l(&30eCGz2ImbkLc+UMBd9M9~1!tu8bD3{xL7D*zh0_OfPV*0m ztE;WSa~@CMa~%)ycl&wZFX8*+NQchepR!RUk<#Y^ud-3y&Z|88vo!L>+55xses~_^ zmGd_c7Qp}I{IR{K&!at-f95>OTkC~hvZr_P?C`L@@6#cQp6mD7X=)12xqQEKEl+q< zp9efxzV1BB*GHG9zQ>bLLg&=uu=6n;g{3>rb948G+v!!Rmr)R(tZ#?cb197UX+H{6 zp2vSP0x@;Pauk=c0O|P9j$R@HV`53DyWT_pH71R`0Z)XMVzd!8@)n2_FIy4lGZV|pUdTmGLm9w7H$iuap7<{K3s0%pu zcz3?TA6FuNM*Yu9FLUqYufFnnndUEVt8Q1PF(whsrlNH;d~{PRknkaN z*_Sl|w&Ph7qmVGz7^ByP2A=Bkch2931_D5!_YS{ns*2MiUqD%l+IXj{jLnOwtDAusaG}W#1{0&}jsvmd9eM-wOv4(b z`~I;e=(lUXc0`=~TlKhMc<;2{7PdyeJ>srikO!W1IP`Dtk8*0L^lH`$ey4UQ(&TqTVo%&?7&~~x5J1ME#2qk+Zl$V zfq-G>ND@>pA^=zO1^pEalicuZJb~HP6ZHazigJJp>`$PZlhq?Yf~gqRSgilM_RB%B z|7Hk;C=j~q7F-Ng`vPOcOSPZJBFylKB5?`&ijKzaofVqx(CcSNrzuRwWD^RF(RH}% z7P?^Xj*{Y0IA^Qjw?++LR{4G`hc8XTXF54X7%cPw5cC<2SX?s@TZ>>=!(4;PF%ldq z5^cuRbXSkDyIhGmiTEpUAx2JWuqGWBVvKEdZwh>*y9~!mvjC@BPE@_wLlZ)PPXrn1 zDG8mnZ^MtU7VTiBA7>+7k!Es3hv^5^>L+{q61Z)cQqzxW5+WdS~x$AG5n~2ImGqJn_J5 z84JkTI?z851BOgKuE&Mq5e^&V2XHd-oL=#(nIDJYcxlXrM?QToL;2X1(n7c+0e+PE z>9`<0lt0|{QeH+yeg^(r5v&_gk$;7IuYVZK_I@(^7_8-RV-D)emDe2SI@{g0Y+kmE z8Hu735?|?m$ScCTm!cDY+(?T-3gb)T;d&=3BhQ>dln)+4$TzqVAZj;karYRWT}9q0 zp=sFI_vHXXLeqAc;XUd+!Y1^+$FZaHy6H8W;PR2PsB1W|OMH1i&TFMqiblB)tNL+1 z3?yW3QHD?uzgwE#vr6FmNC|w^7%9Pk%-yx7h6{9)6vh9U*;15YWn1IG}rw;mxfAR#(+eD^T>f6-n=$L-DkU$wV3ufy@JVD|rFd{y}!w)bad|1a9Bz#iPe z{LN?f|DwHJJC0MLcq+csGW&ngUO~s>yW)Q}zVwdU>+!#8&)IQ%htGg7=6>W}=2(z? zYUn;|!_(soN7X5;FUc+G;S{n*27+~hPdY4`Yo%neJ2zIJ*v3x7cCJ z!662O^90x_BVj6HL4=k%!EK@bp5Er3`kVS2!zLvTD?EW1Pws}reJCw;UJ+}<4hNI# zB5@b0SN5mLK07yOd0g6D6ve5A^AgIIJMDpZJ-#bA`q=QKL|0<0kq>SlzFu8mZ2nOZ z2ihG%)Oe&JkAzE{p2P6;(1U-FiPoh1U`2)HK8XF(i3k#KHgh5lVP1ls82sAd(q6?j zgYEGcZ*LESn7dx8@nYYk1HGP?to|gG+QJ$5ZVG=B@e>!GH(b1R_h`6yqy;yp>8-($ z2+g5SN-sn3Em-24b~%xH{kN5fU*098c^tOWRB&-`?mW)hN4nvZfQVRc#)OKz&Hd%w zo}L?aV!@@bfZ$%w z4N&5eiBG{p*GDK=d;o@%js?Kx3CN9gv{i)y$GJTtHhVmMo8u%l4MSk6GWY-vl&jgpY;z|y% z4bQ-jp`pU_BK~Zt@NCpQn?s%rhUb7Q*K@!d3RK}faaJJ?Jq^z(0CFpDk()iD1Y&^b z&zy&JvE%Dk1sZ{!d#W_Dn9vEjq5|N17 zI{oeD{|1t*LOlGG0@DQ9(F0;?`;J}^=_oqRxYwC)%@DRoriDOUzjEP98*M$VYzabN z-3*?y2xhp`lh0;}9VDrd*redqzb} z*>BK*qi(F-u3uG|XNP{~a$g8&=gVUJ(--j*{s8$n6G_{|vQu6mzcNmq6(jO>9L^*Q z4x8h`6Q&6=ti%I-PW8(F0DL;Wr&E4+vFV#54DNLSYze2Je>YtTZX1S{&ZfViMVPI1 zXncEZ5B~yLlaXu-Ht2-Dvf_h@;u&$=2radiE-cXhydUvzce_vpl zoFf|WHgS_|^|cBSX>}ld0y~H2569a(55p%4nl{TP3tNQc4cKnCFwYwZH;pMPfy1}H z8$>oV6E@%6-w3$oM?NAKV+I;LOJu(8V)${0g&M?~cz_#pt|b&WqK{7s6~YMCDV|?- zElkHd1p)|POrIu1G8;c!Tr%?$w(wn1|6m6Ec?$yV=*2j`BXSR-^mMK5x&!ndGNVg= z`w>q-cmRrf^;o@N_=?)q*zLri%4@;#9Z~bn*#L1m;58M^o0eOmdue0#{uzVltdX0IGN#q<@7Af(a(e~$^m2>B=C!;W3$*6 z_TuIxM#erZ>K|lh2}g6hbhmF1Z_k8V7(%PGii#V@*&y3kQv(d^4G&93St+K`s#AP> z=rUsa75c<+dT!2mtoBf$fNPkZTfi%>56HooBf+nCHPg;H|{`?rW+8DUm?-BPQ$-e`C z#JfPz#+8Fd*=Ef)nN5V|qQCANY;Q3f`hDNo6g^~TvJsXSTc?{fewsSUW>x4KWcxbB zZ##*9oiOqQ{Og5(Ccm=c&=H8yqgfWj51Z*E&yuVk4r%icIo>c5z6RrpsPx*ccmxj; zzB;t=b|gcZAHTx!BpiDdr5oA}cnU8X?iCMjpwUu-%2D5Y4Q)DJri57%|kc{@8Vi-3eQ~VrP)wAw=DRI_~S6L;l zQ*`35%d@RsOF)8cmOYk))QNh{fj`8XdM(j>g*$DTiE+)rpOCCWci~3c7da-p<(Gzh z3K=Zo#k6^y811!ewzK-O}~eQ1udIoyPT=e(8}gAB#FPuK$kD5RNU$*8=cN{K)-gkeO{4U%m$SUP=9| z2!N9QIgM$A6|OUokP-~0XlixTdv*~^H*kW?`OUA$}v~a?Egj)r;T*^s*}a4r3fZ)H_`tcgG3XB-sO#^tuuRzLTwu zG4F41pIp#E-wLI-n8z8OpAL>CJfcb*=#g#9cf-R46pD>C*Ug?Gbrse`ncE)bgM>5@ zYO}>M#@cO<4!{l`0ME?enb3h?U0nT2f7@(nGIVMBq zVH;IY7;+!k15USlS8w5*1)T7YTJM76(nADco2CpmCUBVR^Y zx7aHNI>BIh(okb}gnoktB^5{;y1`*1kJaPbYi*fFap7?JpV1Ka4o@mdE_Me}&Tz+q zCs}uF2+8^;>II36yto{JoBEv^xCuRlh#>(*g8P@39Upy$(H5p5pbsJ%=D7o@fe-`! z6hbZlc|zG*Xf(aJpZ31d;D+R`n+i5zI3(=oDNo$|Q|GzZu9wXN>V$YDTuuRm@p2S$ zRZ;PTef2vBGhzb*2r$CW>nI!*iK@@(1B#A9bs7P2H;{Hu6 zizMLB2M%yKh5OtMuCWcF!hOwI`ZC zp}tz7m~z*<#@6dg8Qr>U>BWpO;yHvF)^n2GE5-p(FrKRLT&xFD^8g2T;Dk$y2Pp+C zBetAB5?6kKxo&6Ek06twrD>K%p##S;WzU}`4qicNZJM+vPZfLkgl0}MymNC5Z21E% zh}GkIsX+#v)Qi)OjZL!UpjWu*EgzB8`@;Hgq2WoR{Nni+AqdJkliRFZ0o#N7TlCK2 zf@!14M_;5*0w$-Gc*W}XvTY@L29GOfaMEy5v>+RVD77gCL>|v2p`}N}Xfw~rJkLHU z&;cba-{Q|@?59@e;{L(o&V{|9NRpwHL(@|As%(I;=?x%2ur-nI6V-c&44}%v`y9T1 zmNF4)>c2a8*eXLsqP2>=y=c+Uym5UnJ+c86q7>W-2{fAtkExyd{N1&?p0CDIDSl zV)-N-=FlR$c^#^EPut^K>0~#`*e!PITXx*j3J~OR`~y+E-jhnzpB zvk1qpS50qMWCQai4R?F?EdGH$bB}wI{_+iMXJ)FB?D@MKjmfEE(}7M^e4{(;=tT2v z`pZ!;0R%79U!H^4xal&F(oYE+e8N2QlL8Y^?l%?<@QoM+LMTO})9j%aY^~dO&b_b_AC|=bafmp0oI}PyyuBVPj0>+^i1GM^O;~JjC`^Ou5aRcDjcrl!22$h@{lvhQzRLz)89W+B{#@Q-n|`SAB|~P2u3`QPl%dR~UHEIp(x zA;_@odch__!=VBqatF@HNN|TUm?N&fPg+8_O0cn(&2{yX$Z4VIdWE8(&4y<^CY4{* zdp6`?WZpKst@Bjb#NDq&bpJKMr5kd9p^LhQ1M9`VHm4Hlq>$28PP!DVX2)Q#p|6ph zdPA>fpSsq=w&6{^K3E$L?g$Tgb4Y#HhCtt@XYhsD*W1ea+rjy}%I`%UxCGT9aC^L! zd%M_rMGV>5C5RM=&BZqacd$a*>=iFQ+tDUd>QviIalL0VsF{gu zo7IfvhT5rf_yr!ymcD57_tCLe6>bOzUahFWCz$anQFb%7CpjE*bc;Gq6-PEHESm<> zfNM-rb6}efj3A1=;nKR{$gemG=?RG->VBAtY!e%I$F^~TChKmU_kxE~Wc;eO$SEB~ zJ5fO>JL0@$q>4bIxbbOulmVNC6D$sl`@e~SkP6EQfW%@*o}zCJ&BQ$e!F{+TtYy~z8aD|7&?{6lX4}QD-Db|(f5i~yC3==R{ z51Yt&+m6AcadgS(fn3K4q95!Isc>_Z{{`dW#c~@te{#DBTx7-Wq&4v3WZ&!A)=r$d zD#~6dy40dy6J&|TZ}&iI6<##1NF+}`Mo##~5<Ebe`I^(qm)d1xC1T!+7#pM{A$a?OdrOFtm55F)z-v<(`9^Bgod!zzDCNNV z!f`k=4)+ZK+!VJ{GY2rnr9b1ax1V;LB-$2>>)waR9(s-FsgKpiJ3@^m^HvHBc zBkhU(zvvKV7$Z)l#+Vjj^aSwx3t;J-bh>0ssu5K5Es+SFw}=U(6pL5=BHSETEH*EM zW_%*pP)B%PmRPjfO<(Pf)I@FJrWo%dv@sn+sMpqG2v}tdtTW5dl8}cJxmW!510W|9 zPX64?f0*%XzoXXHoIreVS(43f&qbvE;ODJ@ouLO0#+_9Kfu*IXO3wOJ#j{&^qBs*Y3hoalQP6 zb3M0Smc@Rm+1SYkocM+O8oz8r3^uTrRu+9lZ znKib%@zC@xue6q90|R=VKu6a&Nf15uZx>#r{q!I%l+&eM0{Jm{v%&bQb|ifbQ3#H9 zMnZ*qXP`4~Qo}`1F@XVkF3uhWuJWT$;JA14)F)rKw9k;CPs+wEuDGN__Bmv*1Ht1l zfr0o+x2<>j_m%5?i_Ek}+ut(r`$Ni9Pf+9NrI3e1>der`@Nzrz&E z$qmWL6$LsKOW}B-vc$&+uD=>(X zbiQvt^mWLwhW-H3Z5X{4PZ%ygF^9{t9bq(E6O$`BaB$TpP)dx!lbNi$7Gsul#T+>i z#O~4_kLvd`_=f#1!(_Jack9FKH{ZAK_lwA}`n?h9wtjEG6Z*|h%zm?MNBw4N;`gEG zeuwa6_Pcwe-{Hl{ApeGzj5+m+MSI;?b4-6XePapGHy#Ti<E={~N&LE~rU!Lsy8vsg)|2&ZM&B*qO!+$0im~Ib-t;n&!@D|c-U}(S- zz`##TFtBV#U|?%vRRzEhXHDN7crw8dpN;90=mmn>&k;p|y5XT|Dl`jfUdtwV?Ml)X5d) z6~BzG1@U$7jC^?$ztp(rS=R(4lHZwT$YIyZUl48(`~#>-Z#3l1g!S@wRsRQZd|aGd zuQBxACD2}Rl0L~lf!%5ka*jOl0PK+bouy{He+*1n04sU~>5_Phtj{F8a7iBkOG#>Q9Hb zG$3nGU^lcXbj{bRo9r$0{}1lQhFpuhN}~q9`Wn8sw&qun4y_?U4y_?5D-7S$@O1ze#%&^Hnz_En|f_&0qhG+b(rly!26t8r!7{5^w995#P~*QmS!gj>vT ze`w8aO%~>84JBQ;8hyd#x^X>{WA$3o11m`%AMJtVTA2cPO`RfUZr};pX;Gj@(NEYn z;cf|CV;YwkHZ7pcWn$W~F~e;(?gvXvgbv_uS+(T%T$&FLN9{RL+i@{+&YM$%T7i59 z5gC#$eMjxrvAmyZm)lUf8sO4280 z6$@MJVV)bOVogkwM@X0UFe;O1QQ9e#!Lt^uZh#_NW=j;|%!L;Y7q|S4LMV7qdc|F{ z51PBH;&bgya*!I?a6_W2J}*1?dA#^^7WUZ&ar?kyK$45_mTQ84y}mou3a}R4aqkfT zJa-LAxl?Z_jVTs$gOP>Td=(~DZs%5mpP^T{rWP`HSNU$H$6RN#CF5Z$9=LS6aw77) z4wpu|7)*fbnA-Bi1l6&xI{y>EaB08mph*5jJW~g5Qz#)?-^6L8#y`)(kcT9Oy#0Y2 zG9#wNv6*tLEkoqFe2|&DU*&dr2Losj3-_x<92jc8enY+fx$H;4W#(=jDv$GWrSseZ zLZ{=(Fy74egLAp{n zIWS(fn3mauZU*^b^Bji@Y`|H$u^|Ef%2sAlc00jQAVUnSq!^Ct>~7CFJrHWL#RPq!BS=J4-!&FL8`EQ%$i(Uf0A-*MBjMN z-syN%x>m$tCX*$%Uj|LYcCjpfoXuMT=d3liAdHK77z3JvkTLg9KSl0#vG(ju1ecSH z-N6k*Ldehr5E%m6dbtx4UAz?3GPho9!7sDwwIh*KYb3=Zm3k}BTCyAuRm>BIuAB@y z$`^XIJf%t8qbK9rps90L!2(2IoEp-2(g{h9-rWKPI^U^yBeR@UPe1k4rF!GANsePp zJHIwPLIeGMHn%0FNWR;Wo$0fjob^1%uwB9Cgy1&`t~+u_yX9hl6%6|^$oCOYn7kiM z+vE=A7617?c|Y!GhVd?bLmGc8<)&33H)*x^RcId}U)Ns6Z>ck+?UGNdwy49+ZXe#) zOO}9bir+2+Q{oIO43Q0q+mKaOy$9vwDOEOWu-foOauU`ll@*EQlR--2l{CUv1dSpG z!NWBfaj(e0AS$&Nk=707bikm4{3lmx8}PDX1<9q}DC-eJSu+&vv#|4!sdn#jm4D6m z8zsoP8spQ&m_Ih7k;YG;D8UVXD9GKBQhyQ-#YFoygD2yOh*tW4zORj+j)tk?r#a$E zP4d$K2&=GQORl;@rkYR*ZEOQ68x!uO3Z(3enmdt>taAnFaHxEPn-bg)aMUiXCw_H_ zhPuHm4g7dzDsn-Q}&SfAmRhh~>{6&_6?QPgtsipw&`VUHl*i%q)_ z0%#*wlE{1p+A@g)0Aq8!vYADI*0POMZve1_1_-qq&JK}tK*Uu1|3 zanOk?{@EX&;FjJ)S46212vH&m3Qu4%tvImPVK*#B(Kl*gG!e;_dhBiD7j@E(p)CMz zHF-FgGHfI~K<;H2+%rTdJhreq4l^t$KI@L?mOYErMk_wRlP+r-SuNpOPNqezXU3cD z0w;-T0TXsh1KZnc4CJmZF-lqn1B)rK|*;18z0L z(ExKlvU&tQbCrLJZw!NJQ$i{BmB8nqVEED6*uVwHYER$|#Ilfg)JZ!f%nI(9-`4`$B&YaUs+33ek>~$J zR1ZU|zqf+@c6KdruoDCeC=n4x9Rt)bz$Vi`OTtbZ*zi%fi8p%a)m*n6{9X(gCNqkJ zsYQjk;~5kz#R!;5s52V;h*xa-rWY*E5FG^e|M!q;kvg@P0!U(PiX}h8TkGUQa-^hJ zu9u|bw=~8Z+Q|Jc^Z><-;*U#Ep=7QyYt+?>s$yKwx*Dqe+xS|JO=U~7A9r18O#hl= zyS(BCyfzQ7`-g!>OG$KdoEjz8r&dJfLZYNgqfM`Q9I3h&=URPs_G<_Dx0+PkO zNPe!Ga%Fw26ydk_a%um^shCipmbSvczyRMfJO}Q8D9-0|KpywL`k31~ih5FUe-z~Y zuyd9o>0we|3`@rd)x27Nfb`QCYf8xVgui;l#;>lmg-86=JUbtI3GAR;M|tkA0((u$ zEwv$#5MFY49FW>oew>WMHqj4{UJ_6{;;S_sKxVMDXJD~vKJ)159k?W_19FRG2S%U+ z>O9FN51CEMAyA)_s;bdtA21p(=+6FkusmUElgClxuK6aPY&+4V&6X^UAEPusn~+5a zND+zJzuEsEpwudDi>v%Io&n=|7Q)R2NjwI;f%E)+Y%DOUbd^8Je3yCNzlCxnY~Yk< z?)xqIi5g;yQH9?QI2^@Kyo#3*eu6cK_wsRcWqNk>4Y$1=dwir zN?WByCcvt)G*@V-uZdC&MZ`tm?$5C-NDs|Z9ob2>adSvtVMr$b7%$I0=D2Hl4bbj= z;~=IXju1+Zo1-Vgu{{b|r=8imZ1V#@-G%4eS{#91GPQqZdgaLoi z1xiSm4Os}B!YZ}3NJo#KHRfH{ZpioSj2g1m3*%9|eCFG@@@{^z?$YaA<1o`Nw*dFA z1}58H1P&@WTD>FqEO%yzN45EQ;Q4ItDmx*Znk=$yFs z3I{NnE7~w_$1lR=ck#AaoEM%@mgU|4q%6x#B`xfGm9rf5qi4{7m5mCVIW#m>!=Pcs z;f3QUnAi)mMz{viKn7P1r2ZeqCxh0snH8JuNqy`Y+A|NcHBG#wE>2&R49y=rB=klo zqUSlKmi6%r2P6xAdj3k^0bV$~_`+hbcLz9t7H|M~*$WWf`%`Y}e%P`%iic-?8>VKq ztuHjNXzNd##`R2U&g@R7vorE^>`BCw#D?)wfh zr!Y$;`RXF2+H}_)z>DSv2pZ)SG+Csl=_&RhD-Ny3i)j5aU4BEJ7hy~vnz>1gTcO;vdhJ#q4_Cmk9Q4m=!>#nebnF=;gK7AM zX!~ir^R4O+ftPYeQ?I!nRlfWYk$40Xu z1xAd9ryO=gUSUi7Ay&`uFpeHKuW;L%S^#K0upX~rZRACObaC?bBVpelNZKG$Z$xbs zUNI3Wo6&|rGE;k0x^^R>37Cr}Zf6Z#YW8hPokr%a?hr4&W$ z$OGGl_%ciIRcqPn0^5|$znG_)*}aD%de2f9P}*TtBWExKRuNw_&Cvj&p+265xtL<)%Hwu#Rl zA8pHyU2u_}=SAED2x%@O3zn0V2TXmg77I-@E4iBmhL*pLR!J) zVUxuSalW5$(|5c=JU^Jb1{#oP-W#}Texv80k}hZ;QGt+3K&mI&zx-Js5KN3P6|3LE z5pJ6pfE*o8f91NT3Z|U;l5yhTZ;rrRs0zrGf#CMny-xe}Dw8m_W(EcWcTADtqJ&bL zc%}B+uwm> zOMOo@d-wp$fQziNvU;E0T?%9`;*wt2$k~JEX`|THe3Z_3pc$gu^D#DX)7MI`F$t-9 zPYv+VM!N7@vRT{2?zffU<#IkoZ2+!2f1wIA?3M+zS+W4&35;-QUiGr;avqUf+8FhC z>kI1fhwAYM5=C6v5I!p3S!-@wT6bg;op${LG@Jy$e1Jbm zw)j7*P+(8qwWWBYdmbuQ7BHciW%ZtN zelH&SIZp!oPz)UeOe9r=+z-&zy{Y;excc=IUj2&ma$;!O2AZk9#CI_m>-uHfEqKUu_DE-Bg@>o1Yoy!8_k#(R6tG175@)60#*GEip(X8awY$JQ5NbHwVG zt$%hkT8}A>!F2x^O|!vI2FS%s{-cJ@)~=PC2`wNEoVmk0xEsmyl!-;s0`Xy%*e>Ef z=hT~*qi+}KuYo*G9PSmPU(ZLU0Hme59bVh+)_`A*gA{ElO6V)-W}uf*dIN6<*UE>$ z+q+&Wv;EXhuj1C9_-!Skv4@<8IC$*0-k|{KdOCuuUA{+smbyfkle> zTOk)GO2BxZ%hIz7YqG*~50)bg`K9we_MVxmz4e~8{7!sy>?n7p$K9ug9;pyJ<|<5E z(q9EWDLeWW?{9tb^P}OiISI>koot!DbEKX|#;k)8$N~i1PJIkq4!c32-(ZcP27Rc( zgH8PUpk$Kcf=g>`;7Y3_u-_wLua+^kgq^*l7H$cKC;qdQXL9U*4WbeUS0sn(g&Xwg z@Nd&Y$q=E5M^+Tr5D-(I_FSIb?p>g2{%kozzV`?+b6x8r)ZX~Jev%?#-DM=Uz5Rvx zHo&)y;7DlYGq0iACWsb7Wi1K7VI`1ajD#r%d+TZNj~3an*vt83_nP^h z#86iTt_05u3f=SNZ^P8uP1qzE1$l=1vNL*BxSp)=S5+p_x&~3ANbqwTPnJI{J$Mp>DYn6^B-ZxvDBHLf9K@VHa96rPRQlvGT^QaYM9 zl^mqWs0Gq^dh~zvHFtNH980m#cJeVm6OnDA6?#Q}+n3AHKD|8o`(S-ZjH zAzkJFlJxOK5(Lr3Gu9?!XTa?d;WIqz_<&OyoQhiUtZZ97<)(iyO!?5?k)CxhY4((j z^gQG$e;Ab=^*j`dFj}5<&DadriN`M<3p?9TU_+hfd33EK!`(R31H2pbp_ryhgzKqu zRMsBdfxX6+Sz}CcjEp0E3Tv8k$%FSOo$V_Sz?6(8VhU#r%GQ&T{evZT@6yZF>wPF= zA(HMi92Io2@zhjyH|y@4S;LB3nn#?W)~kY_pA3$&E$-32Ml?vZZlK10EAQw!lk8x! z^4bm7$UD`4sO--W2Y0*Z`K&b&;#rHCAB_ArYo)lm_Xc}~=lSN?O3(AEoxoa5Ft*7J zkt>t!{sidP{qffZiPpIi=B}V;ox|Mq=0FT{%<~Wh_m~8KqWD!hra|q9vPsvmMDFW z$vnfS1w=WXF??&9+utSlfliH%4yTvGnz`^L`<2q@{GImnryP+b_fAF5ug)a-sNr$U zcLNzU_ME4kmoHO&uT7GD$EZKp1HnUZ50UU)F1^CyJ~F^0hpAF3du2B&w&CTl$jd~{e5nVMuo#C0lktlZ zKZulAYn6}$ARg=dy6Na1$v5IepfSb>63KK!EgDhwo9Q+{v{5u@AS?(eW*mNlx7(dIm-Y@CG1f3lMQBZ${7uI%a$vL= zS~DDJxUTBc6X5j|ue*broVYz?I&KfS4R@8~o~-@C*|l{t6`_X4uj{qxsG9U2IYt4} z_1g9LMFz|kyphy(krc}ezj&=Zq}_m&c;q;(-B}QJWB5g&?$)@4y-VYK8+ff9})J)JGhw~F|;g{fdR?; zo?UgGeKv95A}X4gX&9V=kj7sq%yRIjLV^nqW8}j${OVdZenVHjweOWAmZ=7jFW&IOQK z@I12zU0%%bNH`jklA(LV7Z_9=2l;9UbLQEM$2?vNfD@%x{7JkOuJr7y$jb=kJ4Pr- znH}*DsFb4#ZzQ(q21ip7qzQ(2@&{P%)ArD25fK|2zQbUVk(ywz_{>UauxJ>!q7u<> z;z=kF2_r*ehMFow+G)j7d#oJ4Eg|hL{DF^irzJSg)oXl3_`&Y=b|m3P(U!49W~{a{ z0P%Wlt@#8MMI`l5B=u+{wLX%1CX(6^Nxc|JRYg*-Mp8AA)aFR4A(Gk}N$rTF-i@So zMN)erseO^ufk;Y3Qimd`mPqPIB-I*8ort7t04-sLcu0|yGm=V(q!J^kq(~|`l1hoB zQX{D}GsWdo8Yd1GVXBIbgkE8%bRsNinvN`ofCFq=H|CjCpudFXLWOcv7!1mXRvSC`?RQ2)G*0A*}+x znOlH$_zQ0=FdiXo71FxIyrH(1SRx@Z`02H_4Ka8uHy@!lLwQ8#uGdnKV2PnNB3{mE)R3k+ z_1rUT#&~B?*aQC#dDg=b88Fwogk(^vkPNwm`p`XUz%W-KgD^wfCe4DPcz-HDFfl7M z&gFz{0^W+WcMpYMm#sW70{gnYu*I0sG8yD%pu9w)eJHrn>x#t(LAj{GX}+V&k%Iuk ze37H^iaeM==n|}kK@jT$vSRN;Tp)j(moAo$V;1p8V|rlnUzfMO4y#shqRKA zc0E(a^;r1TvDikzU(JW#@Ae&G3G4$>S}48N_HQ!1*05>Bq*@%`lKEijEZa{bF9k-> zAuR{rg73huSA4w#f}q|251vBWbo}aFD1?lMgzUNp{jfWQ8r+X;-R-w2K?4*Tk*^4#MaK(JmP|>HT5}J zMCAG$coYN6e@njC4hujOWJdGPYnwV9-RXL1OK`tEWH7sVx;}ZFnD_#C!=9%E z6OgRqH)1a82QkW$^K(AwYvvGb{bVdY}T zGzyPH!;b0(rs}kRsXtGvKVR?< zI2U}#QuW$6GgYVkm9Int+zl$UkC8TH4(JZ&OLeFSPizOempM8xZ&z@0D)?~ZgdSLj zUqpM&%si?Hgf4pu14MK_YRw{47)}#hoAZ`i%6S#XttVn#2WzA!Z~TghiM+TbyqM~s zz>aHSS;Q`>BgtbhQ-|p;jHocfv@q(97-~D{C#~&5p<0nrdvHLP9lCmYmU)9#d}7By zYsJ8!{2N-c0hv$(<5#bR(Yngj-Zh_NcQ(nKGN7wOijYC*R~X~)>+ezicA(qQJBj28 zen)U3tlTHIch(OX`%n;P%#J)SRxL?Ot}TK~D@%g(}xu+th_pg@L*u^C?7^>KiK5D644{hYmr3CYvj(=1^_^;i}r0 zz!16CenQRNyxXm{b_j|R6KxN7f@$iq1eygmip}?5OLpx#Q~@h^he(=^e!$$5*N?WM z4FwCkiEB6+ULA3Za%$aJeA;wO{UV%Tb zNn)nPsD@_t~BZmzxaq1ax-W?ea zHo@4zniaha&%++V60lF40b*u4b8Yn+p4IjCcbnGPz4c=pB*S7@DNg3{TPn78ne_IT zlA>o=Sav6LN%WTE`04nt4}Zns$<%Qv(1=IJ;1V%JGxanSl|Ur%9%{wp%5ul&NTr!q zw8#WF9?qZ`8%r@vgDAb4T7=c&C-@8YfGx*fRaR^2H`-Kxq@8flL)cgL{qPwgQv1;NjedhiTl@0?bp=Wln7!y5Cc21 zTCVN^J55i;!gfdZdrW}o!6Bk0=k=k74p8z_>#B?zhLO)0( zQ?lf)=PG}bPy@qosmynk)1I)c<#&H9TmEOdZ29r08IRjlejmSS5b>X}Bk&XDV=mmW zh{}qK60fK)%0XZmgm0IjN!s%QLl%POEKCIdVTYXxK3k}4JoH9sR$tFA>UZ;tl;~tZAkO%EkK&yKpMT(By3$)?3Z8d_GN=D=@0g+CH!I! z`JGzf;&|Vv#Yknd?>eb$zGr4MdVL!HN}^ZS5fpChQk_4<<|7M%2G54J4zIkzAF|e+ zvb)jhSu`5yXPGRKMEp3ttPBO(26A978wc*+4>FA-i=@)w7g&f3z=J+}#lLQd?%^1- zhd;~Y0o8rf469ff}x%^J)!yKy*e?T9a7K2nrQVKq8yQM}d35q$r{$*%yx+Z6<1m_%jp%`@d%bp#8N9VS~5 zP`vP7Zc`i9MpZSwt*S|=N>Z$w;YR_P80sYJ-};>=4_OSbRW>T$xP{3Dals70f(xd-uWwi0LSOy5eRzWtbk{N9c61 zHS|C9k^Yr4qUUPOw+fr8uYmUqH`+)4jseIyX&zMSFpMg+EIu~SJYt_}e8K`N64%ax zV?LItWZS|oq+*eV=Ov2wdw)Xp)TO>Xgw`T+pCO{8pmCGV3`U!>tt_^s7{8q4Cuz2| zIKEa4fFfwH?_*XF%@zEkccg-SC%y`Evdy*YFV?&J9>z>ZFU);dU2;{L%MV@n18UG) zU`;`hYQlI7SS9U9nq9jSHOsC&u$kM;S`63bFI0Oc&`CA|EVwHQ3v#1teW^g!8iNL& zM$)V`!>To3)~e9;^jf3Q^qRZ{z)6h5utm&cR=mHIHXtuqHgl;d`Z}wV2Y4v6lp4_Q8XjRq|ov>fRhByoro^vzl;){j1?2THb||SFNT^Tjzkx9C6K+EQs?C$f=?-ZHB&({E`E8=Z`z(%mG0P@?!$?Ez0)XT_&-E zR5_Z~dMyfH`sU(uSouNJ_~ z>FBe`^3A%G+<1&X$>h!_$!CX4lOfA^zAH2R10p>C{XhnjLcu}~4-snd0=FD_)Pen_ zSNw1kOfT1vV>D(yT52o8O^?tMJgTmFgu!l3Dx$oTu)r)wADe8MZ=%dI6uMK+VIwWe5%shr1eWfxczcHz3m%NGz*1 zPvB|^;{3ye{nR6)82u2|fz$O8R6hm&ECed|XJTm~&|J)-OM|T!_=g5-cECt{(EwRw zjQ;|4cam%6KL+u%FFA^4)XoG>DQpBR%tk({gHd?nYMFi%zoN(EIKJQ60% zEve%POxi)b#r$LYF+coV9#g=4w=HB*zLJNHM)Ay`gW;y0*o87{$WT7O$5=cDUw;)s zIvZjR;aAU1GXA;&&+9FF8#-2~Z36xke}c7BoIVMHy9zW0XIw~vWx^TSScU}Voqr5m ze5$QtLhd$7%!iQv$l-kf{41&t@0EO58Coq8qd!DIIC&9`+uWgk@%X1W21A_V75^T1 zkTnydf`^h}6}K5N`YcQW8s#Jk*B@c+ndKWpL%ZlbW^tlPbxCUuj-^8>L+kBB$|U7C zAN|UtGPuhD01RmbWJk6^k%hlFg+W)vgcMbJ#Y+v`uU+N+!Ck01M|CTWQ2D0+9pm%VJ&FRWSPRU;& zPHFRJjM01IJb(aHgMHfuTVm0gh*(sYpP&R-8XEk4O{;%{U~wCSi4|ImU_)pz!cAPY z9O_G1Mtu$4rUaxzy4BOVSqTohSA#y)CkCIDE6Sx!!pG4(pecgV9w8SOEdXN3zA0kR zi!hv(3r0#FIe0o5z<9tv(Dy9x*O&alI>gbKVTpK^yo&6*H(4*puKgqi!I|(CAr&&% ziF(Pm@Y!&5LBwN5SzW^-A^A)7cW-t^@|R}3)ic?Sn6|_+6yycPVg;rEk&NH~tk7di zV4P`fHQJ?-0WB7zo@J<8*!H{11Qn-6CQxh7gLRJ|Y>ZW7=O zgSGKS0&IFxLXvX9FCR_0YjJMl_Y>3g2X-JMB-aP^J$i=8x6tSxoWha}nC-?to(&hi zQd>!hNr2%x^l2I`+k>0acohX`utLXS5~yPaT@ z@99+{(e^u!A+iLIA=1A@KEYP5BWbBsQZ_n7ZSmrrw?<)4`F5(=KEi}IihtcMPf^Lf zgbOV?k+Hy9TU=EVx(ZmsYU$=U1z$DY3DGA0-UB;(J?<#(`0$U$9*8Y3L2ZGe{@UH# z@&@4y9wONaIbmh-@Rb#_^$-6I!9qUyKDj+2;^|! z3e7|WfhhVV-4O~T8mXkcc8RDb>if|Oy2$ic!Iz+2Au~jKaOAXQ0gj=9Qhf`7eYnx z6u_tCz^Rq&GabLRI(!m*{Q!Ow;ZTD==I*+3hfI@_Ex;9+YK?;EDn!MV5S_?#klP>? zA+I1NWRvUQ3da=8QGA7(0J1Ec0No(go6`VIO#yG2k>7U5w?TDIhtOPB5-Lda^S%_t z7EKWkLrxNC(1Tf`ECWcHJJD##JqeWEu|NR~3>7hZ8C z$`+M&qY#`D_qi`Vns`;c5#(CwZM26$L9K-nxBx@3Jt0l? zaZkFwy-1854))YsM}b~=ea~a^HCUtVV(6t&FGs?t1qeV^myE3m3^Bi-9kTcaT^-Bz zJA(WE)wLlc6_dKbf{+Evzlh!M9+Lo1C;2Wh(&**pr^10rzEIRYNvOp_J3H+{i@YQ+ zj3zI)C7V(9lRI41Bz9l4=q~ZZI&3&_kT}!EJlR=x+~v}4fGonoIBhZ>YMXin_YYE= z4PxNqfZ$qrHS*yS;fJOd3g26)@Fi=x1mnX+0?$4<3LL8wQ6j2IQS4QB_psSsz7H4< zTURBbz*^xJhO=@D6h6Elry+c`7zgQj(+(cx<8&ytARei0O6gJy$D;D3Kq+|!u6asM z$h>w7;r=_Ug>WNSdbJQHnS0{GB;O&B8B`c0%IrX5atk_A8ea@%?js8Gm3;dr%@zwx z6_QK)l1s2SRq;Lg*bHMrHblB)(8i7kNu8!XHcQbEL+T-MKp<2?27kRkqMDw#(n?}j zokpdo9n+kklC~xi?qKyp$hJj<8}cZmz~wtYLD9SneVHX}S_F^v=b$$#F7b-b)0Or@ z^?dz7^jwOD&B~i+nkPc3gEMu($vz{3R@41aXl3egn$s=0#31u)TsWAQVRl^&-5fV! z8p)NQ7o=p?)HcOtNewWg2t+S%iK!O5f3+0T_cK++CaA@M-$=xR`2VW1YN>I?x_Kcoz=A;303j)CK`W3u z6p5|b-EB>!=n19Zqh;OxnbES0#golG2J%2iUVfJNv@oeoqjKAR)aI=ElncUBi`pV* zEU&l#${~eO`jrukN^JTn+?<}dMKzygu$#rMas0GM{BCrV0x^z83XS6KN^l4}$YZ}v z@JOvV4dFNQNg5WA);smFkj}U2 ztvPY(bl@ug8R-Af+-$osF&ngwn}L02tMpt%TJ-vGzvRYq)h>~_1sw>lI0K|?A{-4+JlrSf$?8r3CN6JTLQA)avfZIUDPb6Lc<#&{sS=Izj_GsEk_SL z?y0t=r=eYKh6qn^T+!RpzaMPdp6(nHwLM+c@%Hp~uhX}u+K>cqQyB~{lU+wDgwUOaV}XC}1|?hXlwSD@I016rrN$(K6UN za6#u_>tNTNl809Z`SEZps1+B0B$iU8usqnB;ZF~?_Vo|(WjV0@$-s0qCDt--JGmAl z0zC2nc&yfDOSR$Heof?qjOiVHuwn~(;Q(i5bza5GJ(`nhheu4nr4S!5OrC+wd^3`-voINDD+y8VUTD|_#0+_QUXQ{O1u`e*!&m6ga8)sConA0 z{OK5}8~qo@2%6jYTheov_A#D$f^EJ$vL|ds7A+DA)<`J;;4tdpZ{;HW3*SfW|hYv z+GF_07Xv0MLZd;n#m}g=0hf#TzmT+>+|Ny)pubdI6AR7#*w#hLEkel%E&-hwqFKTB zr0eT$9Eu?4E~%;XJdXUdZxifwo+oS-p2s2EUSCQnINXJ?jrSZHh7SY_LzV62WQP|; zWZRDjhQPj^t>u~uh$wP_L&M-jWXf-tD64zi%J;gE!=2@_VD{ zq<^f165T8$ar|&gbIc3&qi-aD8ormU6WcdhZbG)55ucz!SxC%FbO7lN*`tOA$D z-OQA=jCIP{YwZ0m%rR$G9)p<>7vmL8LPJuSE~c-C-cd%>7>@8AdhJk~?L_Rg2(Dyv z-Pr&XqK5xO>BHVc{v^C{9V@F0NO}Oug)_B)GZ~}_*+YSJF-@ViQU{is zR09O7E%)TINN!nMZh_srk3H~9UG@+s(h=Uz*++$$XP4vH{h4O>?w@ByiN-$h?5Rs( z7FAA)iT>%wSOEFMLu-?;naDXxLnNy8=oP@6hjqh-vv|7AVTi3dvYo@two1j30|39$h!A=Sh#e0ugDA)`1I0^yF zDbP_;3JMsy&4YbfHP@=mKVF?VZT=jo=c$KVdQ<>})s`-bg~9JirZlNu>8?;`z2s_; zur;SpJ-hJce?s`Zfi*|oa$olP%E>cF4=(-KSE%vrYoa;jw2v?V(_#ZIqYWar2et!c zgyToXYVkv6D6?flI{>G~dTkee6VZl_U3v%7;Iw4^9{j3a>@!os?*pqiaa^>xp2%h- zX{zA6X2;JUwfAS~yQM#)Ash0BGhtubG99!}g29;K$O&#XrDSfo(FfkMG>`0)TYlCq z09K>ecZ=+kGAYGqtS+cNsh)(^@Pr{RO_a9Uyf;xMxL*$>Hpv3&_QY{`G!+{9bVSHc zTd^dW1juyr zzmQxExV)=PL_PCY<|nWJ#v+I1?+`5{J+TZU|FRU&o;~%~(uo=Jg@+)Ew+|2k9g{b5Pqiyinm?-GJJ6!$`{}oC$ ziimkAB)d^BSus{&hH~4Es#rHZ`adiZle9YVy@~neY^x)H`CQKDT%Yqi&v~v8`2C9Co_Dw`3-HT- z*P7Qit#DaZKJ4Q9!%~xux0tS=RFD1}RmUEDqc{{AlCIUP;uZ8*uMA zu+;Nwnr+!EUjI75wwy72{gdc&e(Dra1%>(Qdkk1}E}8z^GzJDVy4mcztM^BaK@!i* z>c+^ZZT$r0aSLRP8Z^4kkFvO;%SgPPaH~NKsSZ3)F@N$KJ<$C+_o6s@5Jus^mjr&Yga{ zs*1*AEHq+nO2Bj$( zePC=cHOW)GL>0YB<7B`n0$}kqOtjbqof*RU)Hv*XiL98yTzFwUX(~qAJEXgVnn_nQ zTq*){YHxj029wzqOu1mkGb69X`3{%NxC)@L-Jv4B|2YthSc3?<_B}@3(Ju#mnVqk0 z9for!qTc-Q$6oe3AzBUK@M^z3-l6_;y`UIuzssCO-~ta2^@C2$`kR^#nCkw9W433>twRmE2bqNLY+b_(s2@VS|b0rtn(^%7bp zqpy2_b6KDE8R=~fb->4%g<$T=c#HE!f|wATcz~FC;hTYo*Rb$um&J>JOYrXj{Cfx+ z$r53Ww3`2m3a20Og>Zm`(jjvRD1vSICTurs!OG`k3vR>@^SK&5jBG2@5I%s{qJ1yW zaWP<}jsI2@XVRB22q}(G zHMm6RU)hf4UbK1rdFzwU-l0kb8!ji3*`gPX`94Pa0D=3 zNkVxB)CP6NQWBy*IfbN z=uBpaZdPem(C61W=i0e+kd3hvUE?gh3LNup{87(*ML0Nub$p6F|V{%^z=RS_7LK#M@KjsreaoS;o z0T7JCeU*y26B27Ixa;#kF$^hHk5jZ;m`5{#G&>$e_pA>f#}c4wf0hW zAE74o54QyFR`N$3dM^tiUHC05#%QsvOI5!e=&^gF-~K7Ajs1C*^qaHS4MSmsrQ5;Z zT012v_&Kb9TKR*Z#b(SDm0$H0jxzEea#$C|svG}7h718|D`ym09Uyya(9(7__46@w zc}hZYBX0}3?8}NVV+`a~1~x50j{=+6FIBw((~NLW*~vcpmUQ=S7o#Cn{uyz5a-Vxb zVp?q>_ARM1>PDCBfbMbiOP69J8ulGg_U(lZe-609n{Sp7GT<`I%Z}oj@FR^5bC6Ql0-!?a?F@lga4CHqtGbYBh z5D&pDq5KJ9p3L%i>wj%Nw!J^MC4HysVs-cTd*MoNBsj7|U zSZZ@(_~Xm526AEpS+Pxhjp+89Xk8tIZ8i3Q#n@hBKTg{te_nuE=e*;!mXxbOMz-S) zvm`fqYSq}k7ij+F3JVxycVCXc-BaRWTjFfx{o657EHAT@$f2GbhpfDo*oasJ9A_r< z;4$=jKzaAM##AJbvC&_7C{V(~KwH2L@y_F<4WdoVWX5hm>)F;Z?~luCwXFrOe9Rx4 zhawi(?o73wqSZ4(t%lm@E&dj?3LF(|>5EWHi?1}P5J^^c+bL?Ty5>ZD7=_Ht#_Yqu z%3@M#^2Y5k%5i=xYc551+vy_@*MR3^h)nA%DL2R`T>*`fc!_}AWnyXRDN^DoiH~$I za+t!>v=NU+)Mi?7U<9ad6l${je3%SOXNp9GM7FPX?glq6FE*b?thZWd3!oM?BC=k}^C@(27%!1rGHfRbW&T4N%SsIW)$>Mn8ZAMG2m7TOpD`tBpgs%(KfI z@53(t&kG2N^^ z;Ko@NEZK?M<)F-v-ZA`Mjf>NZw0}DmDVxHEOIY^Rg2)frSYURRnzu&_$i9w&`|nW4rEBY!M9{%K0RARQrOD z&Im1dUIix)&cU3&Pi6ihIe(L^z!R$K6+M9v&~%%KMH8_?>q9}Y0^k+hskN`if?E8W zHBo(vHx5$OXL(g?-=Ke9c3+Mabs^CncY8`Rdm^vM-!Lx+6zinA>KIxc0_Ws`>dp2`qBE}C0!iPbE@Z32;SU(L=vb2ib2H*lG z_U_y{wG@t77?x$vxFAGnehm3F1``F7iUD~GgR{ukJQ8fzIDwNBnVe7bYvRC~7XK=) z3z(c_wep{2a`c1KGCAg=Xhz4sstSS(HGLYuZMihNoZ#t-0n;@uw;9L($3p<^co+bU zpj5HODwgzAH~Zv5?T4=b7#?GK8YH8@2S4JZ?LKTwp}dV86Lw_2=Xk(14II-98lO76 zn8i9E<8;gjsDzBYp#Uk?Cfc#|V2E4KLd{E~TJFg!Dt7Mc4eFE$#glXb zvG6N+L@-J#@ON}I8j7fHrF!dmO@Sn_h)6p=K}+oR3YKp&NRDHWTwx44j6IxQ#)AR4 zPgp^lTQ_D6M~c_@3i!-#Z-qSTZcGul0-FD+AKpg8h|`dHa=wlg8jIwF*@#OWPc>|M z-Q8;Kv3Nmyx6EdrJ@y1XiPK!5*3A$;39}>VR)xju4L^!#IAzqS7j82dy-x5iOGL3G z*ygqls~YWD+-z~5d5YG~)vbB1w;nr1i5Oj?!#S3G8=1C5tW-GDCh~S?CuYs~(KoxQ z(C6N+#>0JFlduGmuyrE(43e-k&!JXdNuArKcTNrBkTz}rk15z=mvG=aH3z;+P>9KN z3kU9hfLkKSg~t`D*Iq3U0~{Q8;&9foW@8=iO9HRwc}MdQo2#%A;34GK$g4Bn*^LLP z$6CN(9n$8-Er>K?#w~^bisTV7KCkxtU|rDLh)9oi$H6NKQGW4Y;SZibn=5ri#HG>h zb3B3HT%%TGMO>N_;U4G-9CszI$cnr)C(_;1gBVA)6oXu1P?Nv!#IMc%6OM-vhuB6CErH_I zA8Ws|p($K9<`*MVl1)KMpb#ubENzC3_*3wK!pWzJi`$=*J1HRf%O zv2<8^%Yq>%CaU^tYA zM_OKU`cE#zt4?V8qv2M@?5d_HKX6aUc2bT~QVxG^yzvnPUOFwtM}Q$?N5Ea@yO4)g zyJCK|EKu>-nH22Z-wZ1rs5}!o?3-AK2nz!9o7JH{5LV<>6{rVtaT>#D^A7vQ06Z<7 zG?g0f6XPEmqcMJbC-orlKaf6nxJBkUyinbisqLh8p*O&%$_J2`8_d&GVEkz0OcnypVF(fIJNzx}{`oK@9F}J}tGH3D}6iw)y87fE`-woxfiZS;5_k2~RVg};IvB8!X zuP_gK1!}=G!BTSO3;;~R3Vdoa&LW1?1j*coX_&z=m@a&D-$G{dY7nAw*-S$MG7 z+eB|?io-cya^BOTZA{$>f;q~q^VQ8)nCIk^zK5lcxc`fy>4fp<8lKVJJ=u74foe3t zgLnh>p&`;Y>Nna9GwicXI8NT+9hoksSvV8qbgB{9|=-9_;U26q=P3KW7EcS<{?c zENFjcr?ofVa^2I>5v)5(ojf5}rw*X~vSt#hb`*`tX9_o@R4ep7A%2gNGT4}az@)(L zwcZr`B^5awZY=80m0+_@ z43mf+LN&-hg{~5Z8rBuHP^<|_vhIk)DGV&ifEaBsgA=l4#CpTu3bB^Z?K3!G8lLIw zd==g-mXh8eIAI2Ed`~dM9}G(HSArAXj}xjct$MI$n5gQ;!PVa-cK-nK88iAE6j~p% zI|m}7K6Xw79yd~Sud2WA7I1yB*z>Olhsr>|f^)<^=yZs|Iifp`*~h5=(l0ikzK;s^ zYvE?}Yr2*5!+i3KLW|?P0wn{R*I-&5YAYQd%q2Q)^O51r)0m|5ys%bvXM6iUzaj0z zdxmD^x3o9^9FF*b&Gd(Ms0m@sle750K?rM99<)cjp#c-ofMh>51e_sSRhuV4raCnV z(LK?Ik#-~^(^mc-I>1B?e|_s$iPC3g-|=z_n6B+}tTcpv6)YSbm6&Wi7B3yDVh|^d z*TL0_$8`{*`pLD1p*ShSsnSlffG0u{;%nn?K0-|rqS$~s{Br}OHnAp9y|D?Cr@JpZ zv^IwfLQsBLn<6J;(Zlw4*v@+JdOLIQMO`br zdP8&g81gXu_`-HH>s8qi1XV7&s(U>+TGNWEu>c$x6yG#UoI$rAq&Pmc?mOS_zmC=X zSa?i~l@f5{_wo@3Hu|=K7PG*{%s~{HCOA`3y>s=~2py30O<2qg&sKgEY4h&D+?d~F zz@W^`J)9fop~1kJNN`-zs&9Bh9LbKvDv2DR&gEFJ1`d}7YiQ!JB{Qk#>AngI;M_~Xk-_2s0P z6W0y}O+AnZE(P%Y_FKJzW7&u3a)C|6u1Y)2D{?yp_;<80QIShpwp6tWFR*CCh2mk5+6Lv{MY&YrtSB=oT~!o^Ugu zSB~5{Dd{=MM5t-7pPQD7j5UyAek!2#&Nur5rQFN;Kg5@T9Q`m|(s57h3@M6jH) zrd~!)s(A^^yA*u3S3ax2XNG&PVc+L-E1!K|y8BaG`TLM270z27tZs06%c6Ma5N?Kj zqah$!|8MAe*dPCWZA}Al+=_Re8G2b6d}$mvCc;hnOlMPQAW8<(!8{AqK-z02!a=<6 z)=P@}JO3T}BJCCq9R<)DF<@h?=h!7Ds;y;m@?woLg0_))eR|nGTr3)fr6^Rh3Td}5 zOnKD-D%88l<2&Kz;aN&UhGzgjW`WjN_dTAa!w?3lbZL?W(K44NSm1jrfU}5+8k{|F z^bah;F^C3*sj9UvV8>nu$+Sr8c8dn*BhldODC!CY1IiUZU5xI)7MOZs9G{`jVKwUQ zUmF0Z>s9v4fEpYv(ObWdhEnS8Ex-w|`^Y;uqf04@`buyR#QHQdN=|%Vc%R^$+S@nl zurb5xo7G~>h_5~ng@WdrfrEV1Hhd_*<6ufz{u)t<{qVR5$kXgC z^b2QKBNwM%*mZWwwetz}oH$5JraVv8C$uE!f|&g*s_k@) z%Q^*A&Vzl&iM1#qQ-o30kyKAGM&PPCUj`43`DVUDbIQGaIOSV{Q@&lM{5_fSs-hS@ z<%Oo|9aFwNIOVKK5z^auf6j;6*f6d+K&)e(j>G|I3bMIA659|vx^?-1QH#@fiD%^Xq zjj@LzUA6CPOmBn0?AkfnK*+RDh0-ViDta0tKp;lB-<}yrz6?%hcH4hpb^@;{z$Pg3 z!^N=m!**-czBt{D6gb;J#wZ>+__h6gzIMv_S4@wVX~wmT#}e;17#>88ZEc_@W`DpC z5*E=oU zfcxI`T}%F?F(@B|!Q*T!T(hw#PKWHmN-{0|WzYu!u>EqTZw*J(rbLP4;DoZs)BI>gMJ-FSh^lZLBwJT@wLJ|0Hr}yyzp~an|7Ky zW7Cz@Fv6K13hLPqEzzFXp}v0%uvUQ1+Pogr?}>()0KhBO^RdNOV9hiNxER&@B7G&X z{@9u6)eEBi);^A=KE?;ew$an#M(06(9hF|UXy8ncj=L9v+Sy~pdb$PjaMoQC3v`>{ zi~u&%TX}mvwsKG&17W;p;&E40U|Jj{AYFZPt)?tBBsUWJltg9%qfT)q((}RfnFet;KEUxHI7TGJVAjF!*dZN+ zm=F}s-s+pZSCR?sQy-Q`wil<&N5-27GXhF|U}e`nYDkIy=TYCk5Tiyw5X85cMnDe+ z9-8)x0D20rx(<2s9#&mK-t02N-I&p89BSe25a7l#c-}6D`AS_K{)RS8GDHAMjlB&> zoUjJ1Ay_+#SpaaY9Q|PjK$pP}mD=M8jXBmL<4u4OI`(e9nlph?EV>OeC9M}tvueiA{U-nRgi zF|t6Ny1Oxh$LDxw6&X#jIEtmkk<7?WwX71=x#>a?LpkMZmdRqe06*{oHE%!IznyC7 z)%5v94KqT*&xDmGU)>oIwy&S3c~}8#$+3VGqCaTTu8l_ zYjk?usr1~zve3rCH6#M2tJM1*c0SP!1RiGi>g8@EO^5w?`@n{;u(ws%)e8G>74}Bx zD19)dC~3xVjipumvtSo@st>1AITxzvkHLy=`ClqxX;uFxR5X2Zet{aE!nB~SF8(?3 zq`{=7(`IO?bAod#ITSHC*f$q57NjWL)N?2M)^T4`V}32nMVV2QD)bTP-yINgi^!vs zm00L|m3a=a2%(s36ei1PZe<2&Y4nMxFH{)-u*NMNZR-N-bc$`Qk zLS$Vk0k`Jm6Hg1+)x@DHhQodd%3)b>39#@F_HC!SDs4Qn!yAjO-hh#UOkBQ_(lJ#& zFf1z%q2yt1V+yDU0M=q4+^+b{reKke+$G_ z4(IAfWatcBqQ1NM7$v!6H+SuV-$`^jwwAlx-L-69TmX@0WZizbb-d+hj>A%lJi>zm z?v==^j_{znKEPz#S7Lv4D^0W5ygmR!*))*8IEz1LBvQ{)>(g=4(Gp%s+8>=%-p~25 zmwKuiY~^LVu2ZcO8D+#(jLVWQXjAU`U4iPmGRU{j@%K_|QzY_ZzOm{lh@mQPMTFVW ztJdT4Xk+!SRys2djoOyJd@rm>Ack;W5ZwD4xvNP4ATy)TORc<2c8x@LW}17qxdF){>(!j8~aKw%|T)_RK62Y z{Lv$*+&Vctsj#@lV3BE&GJa}M z4cUnx2oZ+8;63jGRb2U3RCpCAR_~Kesu^Us!C0Wpj^k*+wcEwt2Znxg;71?Nt9b2Y%_(5Sf5Q(PIP> z=8%Gs3AD>XSXcrU^R4Ay20BZ@bQ-fOj30ykC($t9beDowsRwVw%;!~T_BzB^+seO2 z8$1$xj$dO+sv~fBtdX1O{3k^xJ@3y)xG88DNdob)f7Y|US?heW*868|ueGnnLu9>z z$spWZ;R3qX;hXi8NM9&&=91xO2Y-AeyM6Xg)tzr;z({Yk=?GxD0GJK{?SknDjDbRF z^+WYQh%EA9D#r!;XgV}2a*4%NpCH%*kcG~XRxQsO z97e^zL9elQ9|Ak5qm?fH1F;D$y360?yBr6k5R8LmdN8G3C(&EH&&f+57cc{^WK=Od zRKW@rm+HlSj?lgtIfO zPN{V!{ta9|-qQFwdnwv=Y)h;NEp?#cGj_pRAAn|2joE;O>A6NV@NASBy0EGRF2jqK zgr1eA^>*DU@25{L9oGjch0q8xL8D{@`=Q|YUwE=`j_gE+jMb^LF#;TDb+^ZS2!>Ss zVhgg7=1E2W2!DDz#?gU4HD)0^SsG^1utN)7M_{)jCewDgK-kTAyjo$O49JitSNYZ| zT=>>fOXU;w5!MDkRtDwx_WA{+cu}IfIrwcSy9~N3Gu)<#; zBQ}Zwemy0r7FPm!GN(IKW`mDqNb96SI0%8qQs2%8vCgA0g{LGF`u=3pU|Z|mi+2XU=+O1>wks;>3Y!X%pTcG)9AFKsy=B=*t^dnFjOSd^Jqyts6$jMTly z)SjC2lw$Zf{g^Goo|-G(jqq7xO9A&t9Cw#wQoqi6{C;)<>BI2Xq2iG-S9d0&@mzd??0RDj{ zU5P`jMe0#iw(7GI) zaPoCo0>P6ZYXNg^@28x}EKDi;=J(63xh$W|oMgdXHFfHUaQ4vKgUQ`q-`+;)DcV3T znLtxod%3GZdB@;xc-F>c7wV02^hog`Ay&spsW^j%1rbj^rpt! z3v&P%xA6yBNEhUWZsgDOBWUCkYozo#4#bYU8|!%?_{ZmcO0IJ`f!=53S|jESa!r(o zm``#|{EeI)a!qia;q$&OH$=en}inlo{I42yu+?h(wTfF7cgXJPCnBAy zy&X{GE4=L<*d%?~sh+`YA;fam>v(vciuI+93ZqRt7Swo?$YOLH=6Gj2Rv<5>^1 zN_Fb!7`*iJ-e^_d;U>KmDI(xV1{JEbIxcUWJMn3<|D7F_cC#2TZ&sV98YbuKebF`2 zLAbT8*BS+M)QjxYm{sCR^|OE$yVu*~FqS?)mRwb+y}D3)VH3z2 z%oyY0DjcMKQJ#y@XfU2|F0%^sM7Ru1VLNH^fi@aYk-GjH5y+n@2Dw&OH{GR(rrv%( zJFG0xa8Q?C8!`fP(dI>@Fie%apC9!b^rx%Ux>58ItQNKFmG~LCVOy2%nGB?IpZ?={39dX7;8*MHZ=Te7};$Yu9mI`c^k!U4G--oqS!` zXs-dM2WEFSK{cvB)=I39!KeU|HE#jb_ZNb--aWzmNHu!Cf!qdnkeq#?%Ml<1pxU#^ zo^SlG-;|~ec8@zjK0zQWQ11@bs=7|WAbirh##^`w81UeP(+)V&oyJm|M_?f(D2=D} zOlF-JOZZ5158}%|;3W>+!+=wFJp@}nJSyDN1`|I7u_vB7V#&0Xp9knBSDg&_^lT-D z!)!6Eli_Ir9qHjYjK8+>Xg;Y|Q!W&NA;Nbi&~3%=^8@5JXgdUWVx45}C~S5PgMR?H z%d@RN(69@>7V9*TjSwuonacrf9vf(r2L8+^_3G@D-vW&*cwImbXsgj31~V|@`+Kgo zSrGSU&#@lv#s147KLA>UoJM#=5X+o)Iw* zkJIUmGbs`tVC)u&KD*^kGCUSA{yjWa{6)C5diBNmm_kn6w1+WqGD1!kQGAf#4Cl-Q zNsWydzI$oOm6$S4gLyu%d1;udNvLO>#Wl=x526_jbiSGzJdUM_JB3Myw=;%n8f$T1 z#0uk`pN9%w8T7j_QBs$4fE{EjY697Gt|k(yEf-m<7vfM!lA$-N%DoJdGOF)2t|M65N8HI z-DJ9kK7{Gg6uEpV$SkL@$8f-EE1vqcrlLoja1*l!FohZy*VO_S??xH!J|QjI@>OqX zG0iSiKfNcKU5$mQd3l-3;TRc~*{q8(3Bd%7NKI(6UqVGSbdO1zCEZ_Op@{T{Wyl?0Gm0_pw-!Y z^SBH9n)Wh}vdm7^^0#b@voA{FT-{!-2<50e!$`mRICQ$X8J{#h33Y)<{x2r80XcX7 z4n*N|{gz;9O1r;>^ue|~5tsr>i#b>T*VXL{1xHJ(q^IO+fFt1QT3kpV$qOWq z0M!Rj9}*qBhZ`v8^^9|P_0Ci*LV-i2KZ)rI$_ZK_wSD2E22+}#iN2O76riZ(-%SC; z`F`^NNqnNYUOl`a5})!Wj;6Bfo5o7@7=>=pWR@Jjwe?iS1ly}q8EDO{sk$6*?6fls z!Nng@*nImZybUraz4QcVp;XfVY`b=rTwU{V8zcujUIoP)HZS)KzDequVYPW_#$BlX z^fHK<=8741o8ZiCCiBT{W)NIOBr)b=qxz%PqzEKp{}EaEkhCj0h(~0B1$Q~rg8IFI zrvA`+_w(#;bHx?Gk5afdb@lZ)0mSL^JJJ()s{)%SWPx?o%)q9-xU$*B)_(XOm@`3l zVayTD(?r-NA8kB_l`7rJk`~0pxhjJaQ+uYdqq?cT&PFR*WYA~uUi$pQ6>inj=v>GH zoI4ZepC_MuCwk=%ej z+PutH=GjWA8nEL7xB+VO&c#BbJJvzJA)iyE#n>&bIWQ2AJ28~_=76nurq_$XeJ9f5eTLvZ%U zMqgQhFWcJq44D<7>%cdHt#LqC*ESBcG%m+0bFf(GG<-vlsuj)UcvIyJd1s{fX`In_wWbOjMKLMYzfaQ-M8%Hq&K3b+%=un@Xl|ckP zXM@o4MQ39+Gc$C;f?J*6!I_~$Yl}Lzrgnr{y92EiWp@C$%Td_GDbw+`Bk~x$GlV>X ziyGyMA)NgVoHG`7{q{zXY%*K5_K`T1TN;t=g0!IvXoGucDdV@^W6Bun3)OF_krwB9 zl+%JiZ#C-m3^^3_F-0+^bd2UDspxZ2WFfB3l`FG~ooZ0~V4hma{Xwn@qLNF)NZumU z)=2q#JCOf>B29}P)THSysq#uRNG9SiM$3Iz-h_)nHFJx}pAiXqtMtfh<$gko2w{x5 zan8|t=M=Z{ZCR+6s%N`)>NI3hx*JLl+W&f7OyDU*a-n* zZ@e@Y?veX26Hjm^OpucXoonJS(aiodkFCYzH?BozoLe+-QfM+Qycc!qoex4aPDYJ# zh$>Xa9*)E|3yOG}=C!Zp1wbs$WOFrJ+E?@Fqi8OYRtI;q*Z5P(&jH<|aCEnWMPnGA zW>S06S`;-&7Fo!3^`60K@5K~rq6Q>1d)frqar(P!y_}zM_?0WnVLWqsI`yo#e`F|2CU`Kj0$Y> z;x*gJ@U@;7sGLYLT1vNyc-1FPKdy^A9JYF6vlsDzkO?hiHwci^>x5k=MvvkacCF;=~FdXp&$ne-2L|1F?>& zY8r<#y!hRV>FfY4&>M|zny~`Dhq!(>c#{IP=`6H5D;`Ur;SiEv6R5xw5xdSHO#N+E zHehNPVM-+TCQRKLE>nPsNxk}fXc$c87N`PLuVIS92j9aKJ~XAk9^~AwAuExiU>Nj@ zM40V;^AcegB6^Zeh={eLdr@hL!{UzSK^-Rmt;TZCGF5>=nq^RDK6EIkmd1Sz&b7c3 z$jnE80zHFr1=^4?Sc}VRLh!Wf9-=YsDs%UT$@8DVv}$?2IGNtZq~Oc(%;Y7ITiTT7 zM^Y9P;ZB7C<&MB6>Oa-y{I9WdMUD;c=lA0y5q)(nIpXrFN~{JTaCe2=OOQ<}ENK!| zR(~AA4;lJSZFq3k4KRJNBOHlqFeFSVz`~fM7jBwpY3dp3Fv|l!GzsV86a6d74++jw zKl1#`zidT+*frd&_^K5QKr$)HgYDyS6-mU74*cveu%_+&Y=fRl=O?88ob9rQFncXH z>P3Qb9Nyj#fUth>=i%J!U5mLbMf|wtMNk$QT+_i7e$f&#D0fE zhA?Y-U0kEJFr+}`f7KJS=S>M9|HN%L3KMg!9QF_Hz z^98&z0c>^<-FZo`2yHsnzVl&#P#C6I4OL5shSsSF4B13F_bQO=#1VR0Vh(HUgSY{H=~U<1*}(^sdSeK%D3C{%9ZU~INfE9yd4 zk4%1q0C3KjJ{!D8^jM;hkQM^SorVSB2a+PF>Q@(n%QNe7k2Zvd3JJW2EEu3qj!Yzn z=;$NSs{*z3?!jz91`q_Ou4rfMEr3fgqX4M&hJhQD?P=%)CV5L~6g--OcjtfI3dWfX z42}Q{4&gZevV)`cty}H`O@GE zbq93cD@3|d`XgrX{TZS=>yOfNV4S~tVifv^E*T{&pZomI!m0 zA`Fl^XD|e4Fu#F;I)m-}zImubXuJ}J>ae#l-8=R;)H_dW-wxrOPAZoV5~#rto}B2y zO3A$#UlwF=0?m%~Ge6Rft6dFpqmC4)nX!x~iPVyg0Fbg7# z$I~1e=CN{EH9qyfdaRs$RN6E&&XaX) z`hKF{p=R^-K<8gkDl8mudkMsI8;#iY)2-FNMviv0q3XQ0QTDd#lD0_Stk(2dZ40~j zt*e`67UvsNVn%mGh^O>z3kMZh{Z`^poYoxvDWDU+wgC~S1hpAms}JzgsNLxwxDq5@ z8+K~64(|*dLiz_tmC`i|z8+Jo9vMTMQGy6}Ctc}J@EpUSyTkKCvC>lNgq7Bov$US+ zXv#LS^Y#m6(=>H|UCXA$!R{MiXzr(O#&qOMi3m6nOn-kzBR-YkKNK3WXhN{Lmp`coMSTy8s#rYK6g?P4T*eI*Am4hcqd z!`omXFo?!GF^C?dBj`t9h5e$ zye|r}sW@Y2q1yi;=FCG#Gj@U`Ct)-;zugATAGvDc0`AsAbv~vQeu%c}{njx8lXE@$ z<1UmdSTD+u!e|*Ug+3by$%x3O1u@1pSdJXfmLq*^Z$#>-1B+><31$|IpdB!n?v%HeYag{C=sw0Ax1ifL^L)6yFU z(yJ^Uc>&k;B{IX|6CcH-XT>6ti9KNk{NPcTBGA_5Fj3Eo_kQW>gBS3`ad#(<-KCbk zi@BK-kMIKUwtF|qW*668+Up0gw9UJlcb!?v=lTk3W%Is@x58LqSo@K(5v)}ocz=Sk z@x4OsiqYEu7WwU3@$3_{;$7XT(3yAfAZBm zLGAX<;<^1q@{c%JAn@m=k+>+N|H69^+3X%s*`dMrDbJB}(`Bs1#XX;g- z^XPKrz6qDN-Y6emh07(QY3$~@h!`0uX2CyAGW?uUL@>f%V`02=I~0a8H>FV4AfAs= z*Ej-Qbxz~K7^&8DK^*9>$NR>f`dqZVPP%%Qk(nUrU0j2lGa;1fP(Fp_zv3x9m?$+D z@w)wf3mW!$`B%LJSpsCh$YY@GMnj+bw;k8x9+(WZ zhJrK$Cp8A{x0Ub4Fc~R*ILCjkjQ?Jj}xOl`EKqZK`o^u%j}+oY@BSANYMF^-v9**?P79b!f>7 z^VOBlnO1-TJZCsj!cUNIM0W6CD;rm#TbbHR%;v2@e}fZg^H%b%UfqEc4#DCtyfxRA z)gVP42*72@Dx+Iiay;2f0H*#n>UL~iCbxu5D#{}?BK~6DaH5Rm_dE5*sgaj2vWrzp}z}k6^5xo;GIua<& zjYX#OgV3fY)FcaF)d^%sU@v=d=F;fC;#UBGVtmVUf3XlYRQu zWC$CwQ$73M@zf3TWv6m?pM48qkv&w8qx}&2*!NWseFRq?b|ur23)OqQ#XD-a^FKsv z^Ff<2UNx~N*VUCGeK>F)`f!%sSCQ^S|J0G{uFFNo8s|&`!et6XG~EN=1S^LnJ~cG= zS7KVqYF@|R^qgQQ0>m}JApAez>;s$k1W%4tVvUH0!MIR2&HZs?Wjo}$$74e5NhTTs zz344Y`{x83bq|*0jb?Y2#L5turmbEL#SqLIpAD}uKlJTo|5xyJEeK2cxEYoxW;+?- z?I3lQd04taR;+7AlzWnM6m*mwutP3%Jth^%yBSKFKjN6xp};xq1(Hz!2OlkXh}auk z-Vm1q{-&(C6+jtA59u!No4t{~`QqLN_S?uyK+p-F_=EezADm}#`xdyK8fpHVL?bT= z_P~n)e|}NK_{8%V=+Eb_@@<`u=f17Cf=tO8YI@Cf9lHn{4sr zRoKd@L4c&FSi`{RvIxX9R_Q}L&f+)&_*ZvD*fOm_Dc9z z%(ot`!A50Fol}%Uo04Md6j_n)iy3Vz@6O(dYdg&HY+l+u`u#GUzxf2m{VQJx@MQDp zAv_gwG34B!!$!CtZ!E0n%#vI6_mAYrpvwOaKtS><1nzd;0cs4rdNGcG4N&V8MN{WD z?PVSV)~nBNK)pIwc35PBXZC3D8VUI!0(6pWGNLYZc+LV6eOA_^mJE@oK6Sh^@daTV zEbn*}Eb1EAM1eO$Vu{SrXE!sXu?F=a&X(-JEOa2O<&mM5^&*~fw!;?k8R+q_kmWI$ z&C@QVyYe&(gal1zQLjhajWZ=B)*mcpl4#czKzGUGNpgx0%Q{F>vrCNP`2PhckgE;^ zf5!kJR!xx?Re?QAGr77`j?Z(b#V^_)hhbCuM#1bLt&whI=Ay=fK`<9J>i4uASg(3q zA6iPfYgdsHO@+{-*0SZ|b<9B21EW*+$vASzK1MI5QW9^k1f`u8A(VE}a)H7Y6aqO& zcJ?P9gwhd~8r+u+2y3hT1gY@M2v9NW&VQ5KwKezi%yigI0O-mg7_i;uv9NgcZSJrypfD5j=5&(r;PsMnzIINiRA z4(%wWEYe8_`LX)_3wlu^+dCV!vvz(K+|xy4p_f>Kt*II=;t4kv^Dv_5lHkL4@etWo zy|%klCSiMcuVJd7nt~OI;fJ%4W@SBh*O z(ZjlBM^$8VMEn~?a=V$ClTHEau|_k@xa4mwP(RIA<*S0 z^i%MD4?@L*#dI)8e@kol0A;JMBecQ3cXdMmN~?Ocsu8QZ)`eL@T^g$lSpe= z=e?PAXD8LzH^WiB42E96!vhO=Y;gLR4fuX;fxfu{wFAg!Qj2=?gTO7jpltT+Z#5c_ zIO=Hif1z`ST7Z&zM$0koLgqpg^q%kVKftWsD!+0Ubga~Z1q0yf=c5e<7p*#SzlacR z-U&Q`M~5fjwRy+jS>svwQ)Bm7!lrHkwQ+Yq)6wo6G1s33J3H&5!a$NYHr0))PFz*z zHmqtdEULrVn{ygk!Cfw{;60V072J7^Ucn;|02*cCJSF9@qGO!X@Mdkx87^z4`uZE_ z^Juog38#?m7w+debtFL?7IKlafhc4XUpr%@?G%s;V$poG9VCtj>0ht5;Y6p;c$K)~ zQfHz!2KY8)uk_1`X3=6a(#?#lZ+;A5JYp%Wj0P)ivsa@^4J$ZLEDWo;4z?dBnUY!6 zp(!~7-D;%X&~pzUajdgz2e5lFys{P$z(MRL&6#(qIJ2MYt|p2mvq*ZA)-@E}8-}SR zo~#jgOp8Z!w5rUAfV#$}#eQGLI2I*}DOa#D)e1l8G3Du3S$aLoD;{4fJ8c(sh%5y*lFl|5)eVtS>a_c z)$PSD@N4@N1iES{-6}Yy#=gt~zni>``G~-C9cF_#MrsY*ove0VH5v3F!8~zb7yLVQ zA~yN5AP7K?)%w37o;4A`S0x)kto!Esbu4TDDnUFiWE=^Y*u{NDN6g}a(TvC9N|eK4 zOo)_!X4@00^zc1DT%j$adOf%#|LEJUXs(#u4a}>a=6?RFVk4MD9s&TUI z0YBsH!-|K7%H}1iH(J3F=&}I>h^w85BRg^~nfivarTt|KL163EAfO6RUI<7{0UM%O z)vNdTQh&k78s)>eA?nown*`ljJ-G>1L_Lp4O2~+FXE~oCGk$jlHwWUN9HWwkb|~DV zw?7lwt~cP4Xr*x$_6(2577UljrB_H3GFew8nh>+LzlPT~MAt^sl)h$dj|Xde73zAa zt+Zq_5}@1Oa4$m@&OftnTK};t$Dyu6b=oxXaLcJ2^k?1ySNmchZ+Q`venAOhRAuDVfFN!6UWHJmx*=!`qEEz|8ZqK|%r zNKjGlO9G65tB%Sf6Mj@Clp<#G3G*m(72sEnGE56n1l11?F|^)5!U^zPl7v%KOVQ?7 z9=H;6KE}OSs)=b$LO;JrDLfbj_TInuWU z6nM=i+l>8h_U+~wv~OO6%2)i-k2|+?HTpmn>P!G1Q3!&y;K`UT(`J|1*1juTUHjfx z3!aT?U~G;SL@?4uc=WmALg0K3y~@ewKC;u?=ZEH=c6@656PSBu*i|>Z9NIUP4!v*o zm1Exkn%q^5^v*Uj6S%JJ)VE`s(YL&f!Hui?M%~f%RPh821V33X+q3PZP%|^kX6|7# zXyXjx5!fe>(J(1%X0mcJS?#m2oGngZgLxaFH_!{nT`Q>~BohSWi4OJ6ZRkLQP=0Joo#X)AjK8dqTs%7b_$An7hGD5%!ed!e=E&N^O!U zkT2@goqUlu5*|zTWSo?JvnsK9vEfGLZSmN*L{;Ch1sfP~+ig=2gVr_LXkBeY$mcfs z`~vxWjWMfo60Bi#1?gY7zr=nn$TzvDUGQg$5)7Z4=-D6R?#@kNEB_aINF-t_|106@ zeMAF?J=PaMy$oFCULt#l1!Y<(rWGs5`%oAIdhVYYj98h5fR*#Dj9BSjgNT(Sm2j0r zxXLPMjioL?cODv%diC#v8Q5xM zQ9fZ^9INY6JU{CLU@NME;$d4g3J;#O$?hIp%6Gh`0nU0F30GlZQiJXh_hoahmPrqIRQf z$fMvo$hoKf&3l}HKLyq+3xQFIe7>1SjJn3iTV23jrL5D4w&4m;?Ufxr{`6&hJc$OW z!H=Km`0>v;V{pwL=f~6WF%}NNEhga#W&=qozr9~yap!O`C7 z>)39GPM^zm^VZBjui5E)&2~qy-7?nfuJqe$iFP#?Z(O3LJkL)maavhpLyL#ur4*9j?zyfV+G=poUgHJEn7p~Q&BhPF&~u)S6T$y1TK=qppGxAmJ9*?uvA(f z0X#9m5IO~sr3C6)jSj$GUu97yC?Xw;phg|)QT_UlfkYiYOTkS!J%$j&=|1A!8yG-LHEtrj#w-V>b?O1-817<#lK;!d$G=GK&_>m0)D;; zi$h|=cnI^bV(>r0)ph3D9lT7|ju!nAgNj=Q4jS+ub|FhFEukz;y(JKAzN+X7b3*$X zl%qGe_T=gt%*%tY0~9h6B{ zR`^1&!jyzvTzn2*d0MkvaM8%+*081Ri*>#9@FOcUQSYMeW>hGK!sq z8^*Ap5<4E~VXuTPSNGF>jydr^yZ{J%qs|an8El+9`+n$A?UTF4q0ra|IS@D>nR-T8 zMj>`@zPk7&Ml+IQZM{l}!;XStPmGH+K~$;f;Dhs4qRf1yzG*X=J{`E$q3$n(_o@Kn zbU6=SW^5vW5VZ0(I^%m_14H@CcuWqp0;-z=h+?*RLqeD3Q;08Cs<~_1^qzjih8_qL zj>p2>c?n{$tlXu#pJtFFh*xF+SIzrweZY)-2YWn61@{sOKIB8Cvl<50gs z0n*_hblbxK{_Zp`n~N*(4J1qjs!w}=zsNy3mzAfrMAj#j;(t_&S!CSwp%jdXI{3UXa~Jym{*xZI)L7{){0eiPw)4H&-x=Jrum zOa?6PRtnTj1}bQ0AulP6l6iB(uV5r+4R%DqEtLp+#pe(WOEXiwf^28Lsy09p1hF8S zWxZO4=tdaT?FM|B>t*J*tWk9r-G4Hr==gT=}%Oj@M70nTx05X)l_0=E0~Y7gmM^a3%&2xwcOA z8X_ircZc`sQr)M86j4!D{fDLuakIcN6U?5~QVMNJCh6s$C~Iua0 zRf3?#LC#eY+LQ-7atUQn#t=Gv*??V9CL7hptd-iE;t~+d^hvR<^N&==8XtswIx{&a zHTDp<(bJn`8zG{@Q5Xy0OC-xSHW9KB0R(>J8pR3N>{OF`KvW0YZrRMncJt&K7PWQE z_aMh`&@h8oe*RWa?-fLveSmmeqsYmT$+nExhJGvB$WwgMA{C%P_}?Z&OtZScFY2 z{OfJSUr75RK(^H{WaBd_vdwB5c2YmW)i{KT?lZh@HVjpfD?c7k>wp>fGyV_yTPKn8`#7Naj4I~ zLGl+F02q?uQd(#MySd}^GUlt|dTnia3{n|vm|NeKGaGFalOu%-9^^bsE|}Jl!7)vO zwx@9;b^GADtALhvLfvj_iI=uX5`RZTTOaWyFIo&c!w%7^t1BTCo(IM5)P*!~o1c{HwL zEvs0I4()@q+`(#ms3wGW=DZOC#CrAQa4~M|foXrXo3=SD>Y-r@k0RzVAgRr}x$VRy zeXkKjp*0d#5|8RF-VQh2(TT>z{036)g$TjijFI~`y^g;;y8~)mcl!N&sGhtYJiH7PDmBr zCBCDY%3p~KpPyEt*f|MCZY*Hdd@4xMe1|waZ=>ZgN9L`@!H*4+G?i2Vk>pj`dfT@% z-)aLMGXdA9ILkE`;OSnV7r&ov)mnyqzR;pJ{@4l%ADV23y6ejznh9BkUSWk*CZa7J z*IxpAZ$t&kjZY0fFVkZnVA{&1F-v$39ajZ-?MpMZlC~H!s+{y6ZOf)(MGb+JAT315 zI9R^WXdLGoc1_#1a!3wjW1*3%8kaB%(@KB>L&q87gzCal0E#fPyzC{1N;ohIv&?;k zVVon3t2c@klTzJxs4lc!E_f}tU1W$XpmC~t7sY@8t{Wm-C|htIt3)tN{8ig;6wux} zlCKd`k0>$h^`G%t?5}R0f(tp>h!ct6bA*;a6@_XwM9?txZJ!H@4hpISG&_BK}}2$&al(0vo7(Hg3dm zJk)oyX$*dx0v72D z_>CQ6T)~bUqQu3V8-g|lM!l+S`y|1bb@EzZ-sDv-UWKU>1V!x(0l}dn9tR4C@2{ju z+JQ&pBz8bY5-7GZY)Q#j&3mSZ(tI{?=-DREtFcIzo2wyv|C{X5f~N1(kiiRR;DF;7!C6S6)=M78Qg*h*!aQmuna zwf(lKvQ&dZCG`?E-#XR&vb@S#>k zC!XN=I@^N?awAFO7bQ%Q_EcSo>i5br{SS7lU>0xO@y8tXJsrd3xn=pf*=3cp%tq5IO}9g*MsxN3qFd ziBj5!b1O7R<|bReFnkv0pkV=4_iq`NMjTAJUbgZbm_`7Nxv-7b$--{CK%)qjHB39y2T+uBfP!&lohRZ`$Mvt<{o%7 zRWHpuPDq+)S@9g~Ud_Fi3?Ov&?!19!b#8QfY3D{4v^RPy8U+tzwl)f_Nh_Icm^986 zTKx16R81oaJ8!iwln&aV8ED2QGSx&Eqjb#&K{e5fJA;yq!60flCZGl4Xq#F)3?K!rJd z%f~a5&wZFefTxHqu_*Q)P(!pj3?I{zA)ZjNXv50o7*wyuLUKZq@|3{B-`5{_BtpIR z|7d#?_$aIEeS9Vv$OwTMBuH3f5ws|X2&h016T%yUI53Dww2DhroJOq(Gk{Apab_fw zm#Nf(#R^I-wpgh}1w{o-kS0+OP^n@?je>e(QjLfqEM;(w#a`YX97keq;WHtZIf2`)OZ*IOHo7WO9_%Q}(R8e?qzLm`F!#k~fZ?oU- zZHMp;-2OoH=7N``H+|x85VaDA_3{fG7Pu|1+H^JR9aLBtud6Ix*Lm@}tT^ED1$aGb zHmZ(PFxOMT%m|G?uV8La7sH~$ENT!1bG;hCyFfh^%!eTM1sG;o35S__SbcoI&aV9` zO@AXpm~PlgHXNCOaK*#Qt;E6{&3_AIG?=Ht-^2&>>KztvuBmPboUwYUjt0(zX5c)p zt1HZl*L7#St`70Kjsctjl>(d@Sas$I(Y`kjIQ2*eC&?mDsC};Z@VYnUU0c8Px8(Q?!bNIzi!+;ezjEjNBpQO!VH;#hlvOslRwsuK!vDz%VPJ zl>AyNB`=11(6O!8ipR8fg}=Z+j#Oh#Q8zy#(rGhufShW=ud@_FjNF}yy}@Cgfq?N@ zaEXOa7-6dmgnl)o);Ixtl9KZgJf4aY;ZzZUgy62hi zfGbcOY*N3$978e;%(*E}bEJ&cXKzuHP;}V)uWEG*Gbk4(ks5;zlIDXB;)Kv1!pG&)AqG#59bK=-d$8A zx{KGd;-iZ)P~BADScvgDXwqODX#DQQ(WKRQ(WH#r?|eMr?|dhr?|e9Q(WIAr?|dR zr?@`vDXwqwDXwqI$<}w0^mOaV(!Wc8p8mOB$#Di%(xq=>kDlFvO26BR47QAi(Sjak zoOJ!cCTGjqx5jJ#Khf7;o-901l3w3RWa~Rgd_)5K7MSz@eSd%C z6xa9fQ(WJ|ldbP0@vmJ=@STYNILY}~cC!6D$@-R`;`*LF#r3T`#r3^G@wD8@&ow1yKidX6*<_$>?f zM_Z*~2Y$=KXUlaP{F>oD_=Sjpzw4d&RdwB@XCZg(cLdQ^rl!5aw=5&A2Rju>(O zl&Y|s5Aknw60-8(+7)IdUs~rPj+HC)CSD;GV(WxuALy!aj-ucV$|OPy@OVaqXFT&$ zE`d;Wcsxbj^+XemF~rSjRwA<6=x;@o1#O5eYOEG`{^dcfJl*Q`QA>hn5JORGLZcy_>IiSrAMB}*d|A-eI{Xgrz&g{+4EaWNZ&{hU{q@D;LK@Nu-d6&T8H^={RzyVG^I9=`&rzVUM#@*Wyfggz%6m-01x_rPd#bMTuKGy4|HD-eCW zTYv@!NeesY5}Rh-VlE|yOLW)CMRb!S>X=a?aA~*!V2UHq54esaP(7}Pl?P)AR1*R#`OIJNVg`UX#;VP3+qvR%NMD|vNYR}GZV zMCw0fw6gY0d!5s||D1XY*pa-)5og`eVz|v?4L<-K??lTVRDkA_;m){24<7!U(1M)$ zv3Ag7-Po`sKGuW3YBAPc{+45%afTl2;>#0bwR3EkO*kfES(E5+cymXaSw2o@+#4LT z`RAhJj1ZQzoIBWGLzQvrM>r7U!E6qiwlqG%ZY@VRdREI3{8hPG>#BJ>#24Xv(e#N2LcF^p=4T zn!ve;y(;S#V6Lqy%cuX`q5sU#fBf>NgbFPFi^^W>jZW&Lj1_QRfDFzR+5=@qWDU0o zNaQ-T64Xkp`Wz%)KzQEhln;Ujl3err+=8~KK*4C*ARzcG?tOC?K4JHzE_wpt{7IB^ z+-KWvw88udKPcjaS%S78*!yc(5J-_NYS;;C*q7txx316+=rvkPIYC*yYLQJGBQPIu z`)A)^)CmC|U3ABVrE zZw_`7Y>;}R?>7(;0^bfEOse&8%5TFU6Yo+I?}S4UItnhz$1IVY0#1jfk<(x+cQpGX z6Y=vLlm&d&gfS$5&kxZV&0py$V8iN%>k=@Y?S_#Y{19P)?+Sf~zrm*QI_N~OeAny0 z!dMX2eNM{j997-0I3JREdE7N3<@H}P~=Li(iXc#gQ=;N>DqxriEVPXC0G zgRBUq02&fo1(I<r3`x;_yiSuVG@0dFKh1cMi*j7jE`3klLgwkhDVQ8 z!+)<$jQJtdU||&e1U1cciVl-sFY-jN8>nlCHEPO}wq;nl=aug|X7$qwgP}i6!`@^VY&}eTW(6kb>nk zaF1FWp<*Y^s-4U_&20b70X2u2gEwnm*TcW%L-6@n3_hTQiF&x&D!yxr3<{DkPOl3C zW_d@i3%%FIsS}SCNUdPeCmt+decpVs(3sCw)V^yHSa5#_P#2kO3m52`Nj5JU9f4mp zXkk5g^qrtzh^vJMG@e@gcn?IflP!TH{)Pno9#R;m-vSMw!I7sA4W*5#w8yo)h&Pb} z#i8d4t-~$IRYdr1GY7G#+-MdGukkBf$c?@X0P~Hw915%v6QRHYR`E5kYDLP4-ipT} zAzOC_4V(nXn7c6>5KmKXXi^V*N?AwNnE|)6QxO9Vw(}T%jP}eKwAn)TfB_X>bU@5_ z)Hf{GjkrHI+H4o*Vk1;VUTfbgKgPaiIXOSVIhT*M^JGw+PrvJ9udGLW$=H9R9HcqL zkuk+N^Nd0V67yx@6kD?h!J6Z*tX(K6nB{PoC9ssYjVzgu-#{PVU-73^!kjqFOo>wx z%RHpd93>Ooj54H8f5nr$NmJGOKa93TjlGd+dn1O58iyiA1MJ*jzY;YR9jaiyPQ2F` zQlNS@fZDwr<#82OWufv&lvrX`h~EbMA2rs%7C{m(&`{4cFO1$zRm=AxVPpdio3O{2 zjctaJYkq^Ree-78H~McrGDU)QRGfmnaDTFP*5oW{XHBB3DbAXAzQLvFM8YrateLOO zestDkSxJr~&YJn^C*+SUUeC_jEWg*_`zVJod-k^0tXk{BaU)p8W^cr<4{7Ztaxuv1 z#%rdl_pU+PyHYd)V`Rk#Qv$P^g$FvcCZ_S%cb(kYZn?6LUf2?E^ZC;fG`(3qU>#Ct zrxL$qFP}TaV)ZOE%pIgc?GVUs4bjZnONPKVp+NH;)*NF2d^Sb`$|0B^oGAJ}2`Ed2 zwHpwAGojB7)?a}L))5a-rhY1%AzTl)0aoP?Yb+QRiv*gu#lqFXCJ7xfirh21`JU!t zsWz~vb90#TQC@MUn3ihxeEq0YK9W+Q6%Mh2xYepFEFs0RVMy8VEKF5naLSsE4*1r7 z%?7?f1KPsC0J^0j&NPBdfBhnovmt3vx!)W0C~md4-2GK-pN*gU5&q+l6+pOa)Y$D+ zxp+4|GOa12sNNh>I~Zl6Mh)`S;c-580%NZUfWFjMGB}(z9;IsAp^O;EFwg=Bf1rIu z?dicUk|UmmI>aJqz#0d#HJKCpnD?cbnTYhQnmM&(bAsDMewZE6EC;g0AVrQe_jDDk zyFGh-Jz>4VNFX?aKGheN$H}ok0~0&dEB946R^QuvIfaq1L;IxE|^;|=nI~&zBN$jrQ-`xEEYU@2j zJZGj@w$Q`3j)oTzD26$0FJm>Ps-ZAC1D;@$aKnP<+A4qmKtN8IR4@QAlrTN1e2x&~ zPW=@0CY7O3U#*1?y4V5)tL+iHSs|HZQnjTJ^gku_D!#L7> z<%wEsNR1-q6^Jw!3Hx+`*1I9v;B&N*@J=~;6Og1-QI>;9Dp*kipLASXHL~NKAWQYt zEW-h7?w@eLYOd6r2nRW7_-+4$#)@NXo*$a>9vx_`IL7YT{2EaoBhg#XZe5qDQMup} zvA>SZQ|>gd;#(-8VP+1Q0vjakr0gzEh&X_J+~e(j)l;~SRt=*GHMUXaEaQ$d8A%AQ z{GHxv0^DklE4jsHqyBOeqk7-CMhv>)FS5h;kJEtlYuG1j((0U*lI!?P?n;Hpi0?B_ zPgH@LUki4ETao_^*yL|fD>sw;vs3Vdeu_88r13K0eSWEFyp=|9*!^*<^@R3P?8SBd zF(6X#&1y(zlLFn$$?&;HC&2l#lZdTL*u zxcXrc#?5rFp7Mn=3Z$ApaQRLeq*lC~foP{(w%Agpyg^utkctMU3t0{l35-&w?srw|=MepL)_(kXU`Umo9UaMib&6pW7V_-&7`@ z#5%s{m2Px@3SG{PB(PYYhB5+6koYae&1u1BOYFYtDoIEfSd0~8UJPqh>wMC59wPHJ z4P^Kn7nAFDM3{;#>Q@NULEmbSg&weR))J0fpT!|_FXq5>e45xA0wZ4yPSdgE-a>E5 zDHtK&&0yG(&cLh2-Ugy=grdoKlI%URu9TT_Ah?a)$!E;3F&;h-XHLho25)QrE z+OU|_s2Bw9+yl~dCF*UQ!kJJ-^1<}~rMW~qW6^W<3sm-!9WnGjVT$p` zpGDO$2D1V;)X$Y=^j3>S)Z$X`g+4jW_#(j=kRfBua15{@va~=^CmOO)>Ma;;!AU-j`VJB z@|~HA>0ls38oGJa`Q5RUZuDL7#H|3i4sILZ0XPaTe|13Ug^$!)^?Yu|bFQ&WeP zfp8`b0J+qGa5|~2lVL&5CG%b#&H;go6HsUUEuj7iG&P0Jn1*1r8UWpd1^K@p-eW;t z+rdV{+hJU(b7Dlqk`;-f0M*Lye`$0XS-KN{aMr}H`qN?%FtDrPb4dgw;(u&Lx_ak( zL^8p-q}+dl)gPn*co<|^I>bciUiBBK8Q_R4brA!~#PAjQ#^m}ZJTDD*<7A4tF;0%S zjx43YaaFhvepy}JeLx0@f<>K!H4)KgHPj!&qiB?4QLjCz{S1Oqih}_&FTJRlN`F5- zp-#z(zh1TS2Kf60Q9YQhA#tpo1Er4T@3%6;a$OU|{mp*?KK7y*!CH0BgH67Upk6J2 zKZ+V5jpvuKxLzo?)DU%D3&R7^EH1)pxv%RP+M*gC)l)yIT%+a_d}%Io*=%cXn?8N| zKywK$_tjP$aF`n^RPW>s8Nr>Ha@V|>EU2@W$Z9|yE7Xs@ADOY^>tf_;IU;tdl4at+ z7jKZMKq^4pwR^xk=N%#zj2XOx6KJxO9unm4f~(sP)L;o0rkPIo zrf33(l+kVIBNK@db#a7|xmK@H&jF%c9eaJw2kCA)^0-^(<3=f-TRX1_|SG3 z`Mo1Ksp=to7hKPw`K;@WCY#_r``rFzwufZ_`$Me zkkeU%%m-5o)73roWV307f#<-6>E=?Ffd7K#@a5N@UzlxH)184!K>c%36A+vqAo(JG zOZq~H8H;4Ob?&LiHO|OAsgW#XR#4ymmK->XBA-nzSW(%~86iaGDuGCab{)ab%u4r8 ziHhF^M40%DtJsUYV7P>k1HZUu=C#P0GqaLgj+x!Fl`KkMI?0ihMh(ha}EAp zuN^{z=iw3ZtN0Q8ke93-F%y9HkT}kN92~p_SyyNx(48so#UpR% zBR|1Cj!OgS=7m>IQKKZZ-3)Xbf-~KeuNq4Pp$!OZ9{DeUN-DAc(lP%p*;u18r}6cD zl_w!Cm~c_cEvEfG?iqg6G_28F#AeKjfg38CKm>^RWL(H~M1=B8Utqn=Xqef@w-C>@ z9McUCh8PGNt0D2y^~n4Ud?$HB#eUSr`OWy@Sf5F0p?NF=Hv)`Fqeg6aQhbm65$X|Z zo4dMkPb?^vyK^#RdHOq90r#Y;+5%K#@zLw%9gfv??CUY{R#1+NefH#ncULf5ji-lscQmHr;}*R{8JgvYR# zpxnZ87XF%rHF+V|EOC_o0#IV!uGf`w`_cY$Qad>dSMLyhQ3zWRp#(Z`{H=%uxD_o2 z?dBRf!B!+oOm9W70zCFsBz>*xsQV1hQUQHS^a9o*e*5JJHn9`zI6_TsvXIlOmUK+S z-FRV_RBE#-Sw>5rUObsB8?k0^SY5X37D%{!1zMkG@&I^$eHr0Kje+I6(Vh8Ge>wU zS`?13R!&YDPnY%5kx)4D5kktW5MG)yY-azn$^Jk6sb>H0jYdi9)cf6K-+6A41afPS z6Vi>(2%~n5g`_|HUKp#(^*rnTS{nlvpf>M1M`Et zAn;emCLJkSrt=C!0*hTQXXbjG;VMNMn;Wt<_5hm|69hj*lI%9yxg0QW{AIDbs7z2u?FZ0%Zf8rV@Ebtq6lU_?Yt%k z!NgJr5P;5L2`WGY{nhBnau9mNlkyg}g9Huwr1{;ED)%Z55_|O~gKC0h%u%w@>szD& zr2z;0fW8R%={;CAbC4$^b_w|3^SP>!a25xdz!J3?=R*sOQ@-C5i+VPyYu?!mWyUg$ zqAnML$=D0*e{7aRl{-l<0%rq#5f#@0xE`JkT#PVpsj##VnDg_~%sGS1mlxx6Aapp* z0T2Zi6G>lwoJfk)74i4A`yj^CY3*=;J1>qh{?jdVSu~aCQu`iD@f&uj_AT56%Lf2J zUPu>J-_T+7f4Ta#qr2Udlt-p#Ntv;lOm|@6s4Ta?m#-8+^?6@eYWJm2g``dtMJPgM z!LwuvzUDep^ZIqS*R@gZ{@v~1R~DCZm;Hj6{2(&3gR&sBT*O#_;3&t^JFzYnLR!Fe z%y0VDr5Gy8zLpUe60UkA-ZTkS(E^(}FB9W|O2?eXfkCll&dZgHz2>|t7d7U*8|7lRIqw#^P$%dS`oh3=MzL4Dy*vZK@)t0;%klazJ-=x$dyb$b(Y&2V zK8TIlvw&k7UGj5TGm)1?5`(hA%~)^J;5OTw-bfv06pu7E&*_4s69}lEiTYs66nJhJ zjHT+5tZbs?{;sC6*v!;KD$vf{hxx00A5#a6rR$|E(&Gp<7E(Hbua40v5y-I zh6~zIYLvz^THJtWufd|?%-IMvI2Q%f`03)IO&Fh`_nvi#!{7M_&Lt<3u$>CS3i1M& zj#ywZA)VZn>Xn{Qn-#6hoZUVaSgvYs)&AcwL$Fj-3vSYkM_M9m0_5qz`T-^~N^hG= zhfwOvcTu%oGnCw+tmf!G!ia+9EZsQ1kgly`d7KPTaU z2RIlz%8b3GMopRVQ>pQVX*56~Z5jwSt5_795OfYuP)7p0)uTA};Zk+41!E@FL9;Li zjQc&hE*3jhb@&$5jYTKa=V}ikwXU*@f;Y`pQP(YuKp~SS z-F3q;D&0U|RA6b&|H7vj>tJ-)oP%KS4cz@_OvaJV(_}Ukj>Ur6;Z-r{MXaEJ!_U#o zD?Zx)O{-BB@3JFTR$AzjK>rcb()_(|xPEB41%S{eez!TI~n_a3*8GZHNFUM8u2tmJqbt%R$Nd;wgxUK-H*ABO&30ai39RqKaVqyNZfmy z)LfixvmHV_Qrkk?%#KX5b||?7Myfk)v#&Obz}D3J{4#FD9)T%u4|;FFK1r|(S};SnXJAE@ zv6DqBnvx`!(~gXHjw(Kxv%~6lL_E6@ObEb;*S?#fMmC!V@yF8u3^0w&BaH?qe~oP; zjlHfA1qY4B-elwuH5%%mR&G#_|CEWt^f7_rdO0Pipc}pO*oF-S=0Plz$AN`_$jEFr zw5@+d{Vi-{>w4sp`49y-=ditRFi$flI4f$= zLwmp{mJ!g&Bc_{jnG!p^Gf!>m#pg!bbo^vbP2D)tQ*9;kJVwPakSCkvr$P(o%L_&g#q&6*&H!8 zGr+yEz0BBOYWz!f)@_k#JBY0)t@eJoM@M(Ar2-~|EZrvl?lV#wFqKfDAF=bxiZkRC zuc?1K9AZP=@JZB|kNh~efQ;C9vl2%pFXS!|UdIBfAg(s%tJ;gmv$!KNqDfYlCkpR_ zE`LIG!_Re@rBxQX46qPIz>=rdQfyXS^rp?9;`@sFyz8Q#`DzJh0nQ8)i;I@vq&B|= zdj#97HyV4X-wTl817yMv?>M*zywRS^gf{~0)JI>C8``ZtU$;3{*Tc6Nwd=Ax z;QbAyS?EO+A{qsY77BkbU%fre;ty&3 zjr#sT43i697+@fiR^nxv`fo@)U!V+Ec7n5*%%S&d}itHgu~(CzUyfZMNHN)MPqN%P!}WDN(H z2o6~Tq0wrwVBM-JsN^?>P@*nEJ*xv};y~qk_)*S*Uaf_)djj=q#vKa`Oy9inh$YKU z)C&W-b#7K8Kj%6ag4(Q1IDqJ)V^(!UEyCj+{0zbw(x=nWT@Jt%J_oB;q^_B+P2RRKZb>G=3WgwX(zn7?jY=rtq1-d z!Fw{1NspVw#({LOu^>6;FNEYtGzxJ8uye(?aqPSS!+7-q7rHzr4W1us`wD_qaG8)x z#M!r=>X0U;I@qdiJdgI8u|PGhufjEfyYo}Lhj~lUYJ4AHV!y3QJ%jFOe#BS~wCn3F zh`n@O8d}+;>c2x|+woe=?}vO5@k;N)6Vm8GI!_>7{|)N~j& zUVDaJINq&>!JG?n5!h5>##?xh3FXI$r%I=RdGacK;u&I{cw|2x1Wq-d;ZmIpL=M}u zhi_vba{p--TL*<7tzU7jiH?B+a?)_$g$w{Zgyw_l-&yRsLJ3%vl^G4C#?CV1hf?EH z%}~P{-Wv(!^LclRtKY8rVO$nJ8Mmdg`0JATjaYmwSq{dpOUs8q zXqlNg927M*GHr#K+tb&E+sx&aB3E~X{)y0XV257C$4Gx?WfNM(hZ9GGNiKd6E_KDd zK>_DIfrns}@q~tc@ zqQ1HsCG-`AoV<#7U~8arv_U(U=KBH9v=R4^zVyr>&4Ur-@Kq{Tb~2nGs!5Cf-3EN` z+&;FzglO)7DX_ous*jf8(MBh(qfvIntBg62;56+^A&-ZslScK5WPev5inVtB5FRL! zf_~>@1UA9}9>vXSn3+SCUR2KR(f=@`>A2l9N3T7Kah0BrC$%1Z+0hy*zKsP|6sVzt z$wr96Y$6(ojvs){1cPaJ)L`b$J`Ctqn?v?hay+h(2!pr0x4-xcNZzY4D2h0MZW~=8 zGM^b$u22*HLKj~$1?a6)^7!4+iK&tHk%^9AMQUWC6SfPVm=hh*S*aNloiklLW6+pj z)6F%tcBrkF^>oHU$J!mM)d#o-8d`34dLtWep#`b-B6A@4kYZHUXwj)RQ`3dk&8u<|QkVW!cH1^Iv9qQ*lH;!)&KTWx);3h^IKR=zdIY z-3Zg`)|aj~E=RD@v4<uR?^q9m;@ z0~4d)=m)K)XM!%uxuK3q=4L6cU_y^y-yg7t>$!;<3uR(nf?@>ev;j`2K4fl|#D>Z2 zES1?=Y-Q zn*651mn^*?Y7Z& zgaU;_OO_W&?QwigSG$JNS_eZwiA!c3q8j=`WhxfoHbtt1dI4VRkS9@?} zi7$|069WfQxu39IUZ>)n|A_Y1s4+Pz(`%uMobj9`*Q`>`TPAuR+O?5U?er!N^$GEMA*N@ftr+ zQLDl(tdL@l;f2{SClm?$-N&pbAy$q^E!h~L`sjV@jPTtbwJo)H35f^?_)=28426#5 zr&57JZm?7<%>59kM~X^mAr@E}nHGvnTcx@Tf*P^|`Jo677dFlN_C8X|@Sb&alY$Ja z6PGnZ+5pa=YybE*W1Ed_<~{BdI?Q#u;s<;<9ImxX(p_k{omDt3;$NjvY0Jogko|1p z4fLeN^T7@QSzY0;@EVAgaea4UPP%V6N@%}>{+};tPOK0dgV;XYj8N9~vt^TzA99QO z>#va)H`lF2M97m>t#0+jt%?p7ikJaS-UcM=P#`uL*P+MgCZxMZcs~elfR`L9-~pax z9VmMLwxg3~cf&4$!%2^k(tld0ugaqp`OHh9%d0f10O{4WH(*d)C#wMnJ8THRN#UD< zKMz8B9-F^2(u>1(NZA9Y@q^k62_z&eeh*-Uu=~9O#b4UFuzwwTUvd{eI9F0*y21_= zjLo7ir{rP1WZNiPG&fCceP}fFTgz;&&@KWDVUs-z%)BMx@<`r%Xe^gfeahH-3Bvpzl;s~c@KbcSvy&?djo4j-rj^-sXbV*aQyhKmdy_PK};-RL?G8*>0A zUILE(+s!Q;km}__CSMMIt*!NZ{A+rAK5qYYd_D-mqCC!re_){<2bsWX<+;ytfkN8R z_ij3$?YIca1bS6Lm42My>6Y8A#894-g4HmsyiRh+mIJ)-LI4b1;c1Xul5ft#-^Q#f zK`kPZF#his%+|dct4v9;pehTv!M_t%2RjFTr*}7snJF>s04P z2nMRv&LXIf8nn#_ohz>BTpKHn-i+PN9?j`#PD+n1qB#lr{2=;Vky2>8GMf6^fz`+_ zJO$|Jjm-w{wa%+HZl`?^cBplctaPBf|F1lOyTacR?>yzh8r6%BL+s<`-kP@@9cbK; z5}0akfaAJ}%91JD%{n27^Oh5Q_y9zzc&@Wk;B+7|q@h>BUUPC5jw-3Jw?OlG^MUtK zV;Q*k`D*EHKgLD|mO+e06CL2#44lH2BR}ccppS3?rn&pZ{3_cx$KrVSdJ$2t8OD$_ zY0$F)Xuel?>?c)U2>lDRSQ-x^PFE)0=ARH8lZK=wE%pB!%M(|H%j?bpv z`qx2-Emv!~NW_D~-%)ZnPdOnp#Z4eRIJ%oFT!2YG%3l6MOouKP{PMx#1Ko~30&3wi zIy%hyCG5DgH`_k0%cTkW+$15ovl`Ruq31@vN2C8OB-w zEZ0tUEv_ENcQq)YqAFpru_?Juz#%bs-e>acEFj?b!-sc#{W3~TLezqq^g!3Le4Wj zvefh@LW_2__i!4VWm`TO+ZWR>?NyKU?Q3^Qvc`%Rom1 zT~I#u0@F{$vt+GGMs6O@O4tWvWTm>oFA!@ssqS<15$|c-(z*{&zpW2UFrYpwS4H0e zJ*w3?uhCe>-<^*N^`njX;a3jbaA|K0*Z+7%W@ zNhZ`;6)9SQ^S`Qq(h7Yq3kXNySpn8S{r$GXu~MVb+=7kTt8Vy|nx6$otr3_%urgSl zT%nRO0t=Wx!&rrh?N>Ifa###@;+_?17QP%Go$YA1Bco_lpbm7PbXui3EkrWsKijvS zTXJHFJPZ|0A!fH)9qOd}9{T4V>?T#VKpGc!W>2RdCPgb5)??H|-7zbN%8aUE@8Z0v zMqet2^bKy2u*>;;T=QWIC%K4cT?DyBaLzXlL68lEyhtCc)X;KBvI>rh-yxe$vSlt& z;0k|0z}=U6lpt2hi6Ay8A#z;v?iO;rJHt>j-6B1NrB>8aqduHOVdQRz4~^Xp^TBk> z0P&b=W7?!JcZ65j-ou1&vv-*HQI7la+X&@^nPlRk@?-YqXY3iUdU_^9p|GQtt}MZ( zY*+YAjtxv@HgMeO3a`R#aZ#$x-=UZ`VJR=!YoB6?q8h~7Fax`zc>v@_2#X_mo3U|R zw!oZpC|G$&{R;%c^i%_!8J^8n2p|OKpgHcpJs7*E8ap*&VL--4;Y>Alrhl^8yp0*# zkZ<^IcgEdmVDj2!bex$!rvu&uH#oS7Yzusio2lxnC^}(mjC!`cWQU*z2J!JsBJ|>h zaU9G%Z)hC|hdA=q^~2u1R&~$N7(zXV;75N!g96KG3TX?)K933&=h3SCxbJmanUgE- zkMsFyzCAGf(PG@W_h4t0f<;cC?2+emamMSY%4dFx)0NYl;XaZ3oc8nH{XF^az-%U3 zntc-G9nVPl9E5K;iTd?e++}e)rkU99Fc`67+G`8k3?&lj+EX)8V6G#@bO$DwNv{sS z7a5$eZP_w#0OkZ$ID%VZWl5v#fxcy9?W3~nfo^4ElSXA>M+hE{`JH8BlSgGG%ZaE> zk8(sq0gXs0ndr4;Vm6u1j+PoXf~L+!`d+-tGXqe2HTeESZ5NUePa5u3budH|-SztNtmG_1EDhvWN;Mgh>kvM?G_d8Rg?jqZl|{OpWdM{%_6# zbv7pqkBDt$WX=630JdapM{JBt;7uVqwEtF&h=P1=m1)I_@Kzd|ZB<4MdWJu{!3seZ zvkm_%8!evJs$FLzvZql}<|#H8v8K}SukmYIZg&&~n_}OueKZiZL(YArA|8&cr<@te zkDk7f4&dzC{!k!XeYPkNq%!hSm5>p3#w57N3`NVX!=9mjy8-Zw@&KuRe3M+vTGeCk zM`%d^B#d^==0lBU5`!2t#d2z&B>0M6YN3E+JAh6c{zJp>L>r7_b1*~FXN z4^|1giNh;qd^BEp)hh_(>-!qI_Iwi&pE;XeJ$YvCaCM*`5MDb@3gi(E2nEWF;!<&& z0S=sa>h+jdySfbB@+Cp{(Tt~2@$JmF+Oyy+K{(=YMju*-G5I;noPZ9Og-5cJ;^}2B z8iMP1Cx_!YB1#JjKU?CZ_!H?4vzwTN?#IATRtF3PeqIxffk?b~BXBeN8Zk6uj&mmX zJ8Wz(MF6%rj`%2|li-_DjHS~SPq1Ub2iw?;+nm%$4usCzV1K)4GoY$UbA|-RJBC|W z-eJ9-$cui6Po%k?xZXIPq9)3H%vB5VYXQ{v22M3VYdwiaKvf7pyg&alRDbOIvj~0M z^{yexzWpE2`j2lU&^q?IhQ==%K8lsx=8eUm^j<@{XXYeq>TUq+_hsV6q~T>deEqZ( z-a=|MSO!sSiURQj_=`BSFTWKLbk}`nJ>J@9FamRqwLOP((eTlGEA`#nGWC}BcYpKt zT+(`bmV)b9$uV|l(W!S-y>18ZDvAIF${I)wO5d0wH%xIK@HD(iLnhtf#%+x-`rdO1goe1%wzR3 z)Vi0UzS2u=!htGb%t5k=3tL@J_U89l^&rnw)A5;p3$Vhqffg9%);KMlcpW%TSjap@ zo&n$$YO2=siWAY;8kRp9B5J`XB909j4Oyvr{EU{+s#^=5Xub5+5A))+s@;D+!UO3j zAB5EY`j525SWPhumoy%Mz2Z0!fC+JL+VG;|(Q-RMLS23UL58@bV9D_p%P zgbPjz@KB&-t29hO=ubdrjUG{N&&VR8X3DHGtL6n3f`RK^&$2;RnC#uYkpa@_$GLP)WAnC^TZ`ci9pF}s9koV{gj1(n* zpo1ppL(6MdV74=42XKWK;5sHSi$*zwW>TY0+X*QL^Z`@EJhL!11L4S6L^Z&f3@^^b z3$q$JoXMJ_fk^UhtB5%RzMaG(wGm|zm~jNZ8}PeN5zbMz6@=eJfVxYz2uPoM`W z7rb)I>r!=*GMPh)jh7QUHLDE*x0LIHk-ap9`=Hy&tP)~k%T-b(U!z{y;}ny;h!IH( zlE-G$Y#XIX1=a@T!<}{cpO>)yg(HGC#;y+EH`)fA)ekh<3r-?(xX_3V4!syOc4t(( z9_oomtT2KKOcx_ip8s0Vs^8Kmh$Nsf{pSYPa!^MPf)%MO_LZilXvM{VM`ROIPnVPC ztY*3+hfOwGl4$hAq_GfDM+h~&MeuVAP@4Ftk+F~B;Ckali{$+4UTg(%_xrN*j*>^v zp$YaR(+*ie35M(Ooi#EpUsw{gjxG&S8wZVvBOp)v*C-V^~4aAjn!|12KvY*UXY|55t z3sBkJr&uiZ2jlXe@5&HP+)bPTljyoYTS;5(Y9in!WuDBJY!&Sy9P=ji%ai#)2Is)e zpM@_5ob(rM8@CZ4VRQ}M1YcsSbK`>BBIEuxkuihOl9`Km*TsRm_GJwc8|~?h*5%+yh7SRKX9IUXiZ6fF%4s;Seu&_;J2reRsA_mTtmTOgnDONgM1C|cO z{BMN9*{e2uq+&zM6An;Z5Z61+w~%&ymrlFh<0wHb5!v-}a!~aG^D+C_!CE|rUfTj$ zGy8UJPjhyfnZ@vNYg4dnUB(7&=e`s1(V$&IGJ{;!UQ)iw#|`C7pTQFl<3xNH1T|KD?t*7Zc7F~5F_Ti5m07#%#htnESLBcPw-P=< zpo;JsQ{k|+8aClZPsq|uqYq_DIsGkiU>V1|Lh#nHnR)4=cR%i`%u6S80Ec(3%xfIM zU2vz-Dtbf;c}wi$q4_Pv6!@CWU_U~&T+E;g*{RQ#qa9aR77A7TCvJ+S_U+W^|DY7hfj2(x@k$H9U+ORPwD{Y!HCL0_@2UP%~o8hl>ohtw-Jskc69-II3THvE8C$ajPVq}$o4Gdn;>Gtr^;hyH_Ua=P3` zsjHI>e-^tsWx6RQSOEb+W}jfTbASli>r&OO&UbEH5$IE4`C-{x+8h% zFv!DffIT!quw!`S(os}U2Fjs*qu=goagT;M_Qn{D{OzB!l5xR}{mmV&mro1U_5v3? z8_`QPLf*oa#wmxQ1!kCQEx)I9SY)0no>y))_BCb&x1zs?{oGIfHz5D%(l4olCxrhi zbF@mVi{R2q35Ex@7#qFn&>dMagpD+PfGuGv{NNLr)vj6~i2zjMQ(qZH|0&XynOxs{1<5}X3Mnqa!^LOwm_&oPH z9%!r8jL$#9_NS)@L(77rJ&h96BiWD*r5_ik4Ou?oxH!dOzN1%;E5s0&!1R)PQ*GFk zTn`aTAs^V6m1Zl3Z{e^L*C%E#g6o%$w(J4|{oWRK|?hX1t-Y>%-PV?aC*z)k~B z11te9mR7g^%@T0mKT{YB(+XaD!C9KM=oxpg7kV?I1->e1he7m+z5{pU^z9o6(d$eu77zC-HU3uOF| zG@oz6mda*(K)gWO+5%^SZ@A-9sF>CCF+UPjQRcLfbCLY(EyCK^42PFU(GJUj7@;Jn z+>2}W7?fLj9Pw-mmTwO>oiXQbb9_2tYv8lZYT@6p_~xX;P3Gr&yY{i4AWB5poj+Gr z3!ScBBakRHKEwE+qEfeQ!1+&fQb(zzv{z7RADJc?7R&q$*ZL@=BrvaSz2(t{_)^hU zPGj8J)`uKf3^}xP3zmNXD*)HLRLsO`Tf2FE zDmL5T`?g5FBiqb}(=jZTDFv`aQ?JaZnAtY!INb{ixp&|UKFK|B6AX?ss^@gS5|#CS z0Tvk0#?ZQXH{u_$ZgFQ%_mMsH4MA8v-^Qsp1jnsdVmYb7%bNVjF@(B=eifcJsgd!H zW;0|9I@OZNV;hIFMO|~XR^V5#OF09mV%fK&M|r~6UGzR(1w=f#p02LojS6x z-x+#8&>Ml!?dr~b3ULQBjBPH1Aw_$kaNT^Enb&poC1GxTE82k-Ue%tgF!wcJ$E4QQ zN~%4Z-v)))SLAvOC!CG)n&LKwBZB*p(L|01i2g~dL;d8>fG%Tpy-LbPhH5CKIrHY@ z7X0LnjxbwNLkG&b#X2M7{u{o^1P|}Or7_c)s!1F6# z^+Pdg!mHKer6eX`G+5)0k$^J>wrq9DWav#dq#cgT>$nFz+k(Q!a?#cgk03 zkJ3&>Hp2#M@Q9e!a_~3fcB)EkD<4U0jbejl@UGAVHcSsqS7;0_8?&5{4$~YOy;zCV z0l}to;YZCb_Le$IFNT>fx(;)zO0ctEYj&1Gi!Mi-nPOV=YZXuvVe8f4-|j?`B*U%F z#)X`=oPfXj>s^Fl1-fRI&Ihy3%GZ|SBDyMs-;DjPhvuS&fgJ~q!R{5TNUDe>7uu$% z8$4TL6*b9TD4}Cra_L6Vkyv!S!`uc3akC<0lfS2Fk6!7FjBPTrpx?#Cp^Qzi-sosn zpjgHZ*SP9v4jnJrO-X3rx#rqNM>i!K&d37}(X_a^5*1b=+@+j})p*RoPF26Y=$PQa z#G0QW!(aGJar|g7^P0k+_`4_g{W&hz%SoE`cgHmjN`{jW$cLd#SZV!5 z6d|&80FMZP5)#B1?pUB6h3Vxg9}HK;PI4^U;hrK9Wd0?l{(uZ3$m}glk$C?I39}o{ z1(*}1rhE^UC21=C5psCh4vp|;ByRY(;%OcZ_CjSf)ubo$W?y$8bAeZ-qaEyKC?f%8 zw(Hg`4~1>0d#Cm-U~yFksXWcMSmWoo=HJ^`v-VaPD;9H`z3Q!$V^x|Mg068autJ@S zuM=}3`_GJK{=l+~C_**`Shn(bWajqtk(Q{N=39=Q&!84_yaWXFEEc8?UT@3H$zUaR zFeSnXlOY5E(CzA<H<4YgvXzH{ii|yX-!N zY!d})5IAuVp$@2QikGQjo@-*%jRoqh36RpoB`)dR;u04b@93%K$8cwz)}+NLuF&6s zBEi?^V^6cWLd%Ft9;f=@^Q^cVbJI~AlGy&lL#n`z=5~IB04Llnz3O6*sG;DvQ}Pyf zN*GfJcm2HME4aIDhw+00R%>Qwc;+)$TDCKiw>O#!vmU4aTr(xZ*bLks@4z;IoMFGj zVOj5ds~A-l=D*_Ikhd4Rc%PA-QPOA_neBjH;MzpV^fOr!Ydhm0o=;0WUl4z88rw4r zFjf>w&`4*^7uxBxxtU^mPN`h(vF>d{zMR-Q6nqGz+3V55f-#65|y907|ivhw%;v zvyH)em@bmdF5hulIlli==1^zOK6kM~+IRjb|TUat$?liC?*{FH- zGmo^>fj`Yo5=1E}9J@%!#M(H>2@Vbbc^w(-k6)ZOp9An(#DaNGzh(uQhl+DkVHx6N zYHC-QroQl9gcAfVXl=Ty(pVRd`;pJ6A1l?5Kah^QvG{?`(}iF(_$2BFWs_e)jUiSr zFtMr@E0}E(s02NRQekss+V(1AheZ9D_#~;$&J%jhMs65T`!sq|T(m0@4P-Xa;EjLE zaktD{efnJaNZZb$7v4wR*_(L*TBLS-liv$4Hyyz@oer?;%%ML~>ZP?|}}q^xwJ3a;tfBoaMh`qKep@ zG{{B8Gi=Th?Z4xi%pNw_kO>aar{MITS5M!aCh^@l#M5;uCUXi_$D(gxc#bY@QLjG( zznxK51J~;Y0&OdeRD0d&1yj}i{mE~@+Rxt|&uow@rQ&IhgHPRf>VPu=Jdx@B zxUO&Cu)*)n3PR?@r4^1#d-Y>|l+@2h_ggFx+Cak0Nn2n=idIrQJ{UH`Oz+jwCf;pc zXj#UA1ziydfL1L(L6|r(qC?z6r@ACZV(QX=WyyoG35T{gQ9n(-5Z>7@cDx(lniJ$9 z|M+3^P??Tc@%5mD=;CpV<#+;#Sy(Br+nE$;C3#2?t|hR?@^yv+4d!I9XM-Z642~oe zLaZ$_o+&k6H6ew7q{CPVhX~jR7kDF{RaHhgKT*q?zSWq!O8xXljhtt0g%q%8C45j| z>@j(e`p+Rq$>HKH(19T#tZg$z9suXYP3rq1u?x6_ODj7^HmZTX7kS#J}d{!4`u;~4|Xn$L+aQn}ZEN@cAwQSE7X4F~S zo+A~x!r%a=8jYmHHdZm7FF^U_AQLi}>LGY8M>xf4|vg?M| zAXTeLR^1=|0d;=~Hbbq`@1^Z(HQ0LpGT(2&d)9r;n}RMgBSIO%6LeBWW$@tmT=Z7TPgL-5JykN8gQafV+3`E|)XQrz6? zI|K8L4R@6{Fj)0r-w-u;g|IGh+U!ub}^Qj^*oz1(AP=o=&`o%PKHgNW&F2TRL~#vEZia&WVS-N%y_m6Ie52 z8YI_VbSEL*@J%QClvq7CqDSnb53O2~spHa4(avk`r9bwe%Yu|fU9UhT`F*N zv0BW#z~YR>v;T$BJ5Rbu6eTTbO4DiKhE!CfV0+I)tG@k7n2Uc?zf7^syLH^5(1u&REY zG{KOEpe%Da`5@abp9`{00ZRvLrIuyRX?`SIp~IxH4EfgTGTD_k4k}EZznw5bn25R_ zc=&NX&}||DePbeTBZJh&HywYhHKJaFP6*LYV*yn2-TSZ&f@92

$}86?P=F7tpU_rAO3Sm5pr)HUW>bW()>HlJNxZMV(>B zlnbt>Js2A3z`23%O{OfLGxY3n-UcHGfj0N5a}F&pl}o@Qv;-BKy`VHdj&u?G043N8 zarRDgJ31yFww9EM8ChG8>%MPojaYa1@;ghaI82sw6A@FtgC!)E^W4VvsH%a@GkL|h)0WioH#@U zT-XrJ!4-zD4pNFG~7@+LIG7z*;A z9qXma=nr_?3i7Qvj==AIJ0zBrBuSn?=rd1)!}?LM&H&IV) zW%t3<0eYwoRGK<*;V|8Z&Gmj{5!V6khw{bwxH#8zLZ;L&t^hhJYiN5l_(B-lR^#ip z%~|~$+h+QQGy`pLpdY@z-1=H^_UCkZGls@>H}>PIZXk;M0{Nn$dx&Q30tU`*7u??& zj@A2J0oR-7q362rIWh)Ljd~4Eb>t2x6g0C3MJ2^en;J0B5y_qw36DTAy}GN!jGBNm zho~3e>5t56k}IZoWV@NYe3S(H7C(UO3Aqm~QjDv} zLU|CAo92$zj>VVQRNhhVJ+cQg#tJ!r+Vk+-@)3d|A*We=zNH(MppzwBp{F=Xp=nWZ zI0_ccce}FX(u8^<75zvtM?!`VU0bf(^~OC2_LX(G;u~lCrpabrX~u!TjR+E!7yQ;S zvy*AhXd7_TpR3Y=2eZBp9ysJ5US=QFHt>t!f&co?Ez7cx%CQH!2M-+f_bkgw8kLh2 z=ny;*^SjEjl1Jqv`%}cf3z$(3^iQGPx(zptW|VVSB}UC06}Gi-I-Wqg5RKBYLfbc+ zI>Mi}bwrvynO(7))gv@Vs9j&_*&K(DPBfc*Z_TE)gIROR7o5}k^_=qduuUyNx;8V) z8?ydnC&lmHB~6 z2a5tp4C8d@+_$(82twdfrWwuU73c^SLGQ#O=yHrjP)BC!9rf{i;yu3?49T0%&}|oJ zpOF(pZ=*W|Vuf8`*RjHcD01^hU&wqQ0_C{sNIP>8bEjr3A~{4J*-=6Yl`~*MT|r$qNH*CEvV*5SEwdvBez4PL$CHB?~3Dix^E+DY!L!9uADaK zxJ_e8#djToUnjTUmtic6M<`ql$JoWH;&eI%FM)NOvBZIXKn-c*_VsZZ9Gpez55_m` z$T&;X`y%^EQeZI4-q{CdkrP@5G+p2dy~vuQsThvx`2cJiWS@venGaU)ri@s)p$Wt- zq13B=iMMQ`-R};9zh0n{+A$$DBvlB_ya4Gtgjq#Am1t)xyOL?EN+#i^xQG9TaN|)HFs-$%)4l1!IV?$cSJjTPM2_6j zu2dS0013u;>_OH&hDcICN19D2N8m24jDiKH*sV_wJ^&VPI23>2ls0+Qte~4G*nWuz zV;6N0bSZ?z3=pNA=44*5Bf_HvUSQ?1TdtK{zry*HNvt5QeKg;}dzeW6AjdM5zwf`;k3fXNh{pN?s@9w#PcfScl=?mm4+^N8-K6g80nBFtPl5_h zk?$;A6VpHmj^wfE9+=5FRx#aqIS^V^WI`K{Q|@(?%U5T?DK0*S@E|O8P18*+%UX%1q9@#|&Pc+H>z-qDoU6p>y=Y& zIZv{>uy$i|Tq&@QI8)WYIq`FVoTx}_uI|`m9lQBq1FVTvoA1(E&MItUf>jLk46D5#)waU-rg{KFW`^h9Ziv((Q#qCER`vK7mTeAu!bQN=WfAPHfrQV( zRX#i(PP?SBm^kM|MOp%48<%~=2mjGzM6{I3FkQ#p=9KqbYt!(zH9KL$I31F?xMAjF zO})ezyieRP)6!Z(KL?Qz?BgMTIFIgO67Ca$JdvmC z^oEM_)c9Qs4XEhD-H<22!WH&}QJ7=F!a(Ic1)sLS5Cm6<1qQ_e17d;xh+7>C^n^(> z3}IlR>{NHdfSY0Zznaz};HmVFZB4JTCEKbpNhR?|ubNy(B-a_qO>OZ3%1?o`D^22} zeiG=7FU_jyRVn|Ews(P#s=6BXCt)A~0uv-^P*ki`QLsjW0w!v>Oh7R(KuK&Bv902m z+E;`bz-lBo8Oh`@N-J2js94cbi!FT%3JRJ4k^l;LX+^~fin?Q{MvD-XI^VO_J~K%G zZNL9Te@xD0pM70>?R8%rJh3U6u_;-xahWj;MaFrjNamA`l@-~ZFt#xyUJjVNtwj)K z1a71}Hr}IbTcd1SqcH5lGNJX$g7M*Vm@Uet9aGjz+1MyrwyhBTM;n;3o(8r_+QuXJ z8*FK9jUlyfZC2KG?VC$ZvCKzFCYiyr;xS1EZl2$UMo_%L&X%Qvpv#U8^RBssS(*yT zOz`2Kz^{3}nR^AJDe_F-20?#tuNQD@8`+-hR6z1UvH^zT(UlYmRn(L7$8Ag zkeE4=xVp8{b}by!->%8}+x7R(Wc~kje^cY%dc5(!{eMxP2uI5#*LvL18NFF*#NsA& zGXu2Gh|hs(O5}YXbAoC=N6gE5V_vpKOfaU(N{z~_dq4a8GSlU0U3bQ2WtGOtGR^5! z6+IXmm3>|4bdF1)9J4tL2V_6h&mE^rGUXZ;CE?x(#I%8CU7uwCa^3!I+2Z!^dRE*% zqfc0FV2P8P>KOs3AdsYQb8k`zD5X;-F5i~qXrE%^a@ut3y#KCStY>6@o^*+00waeq zqC5sPoD{FPx{gTh)uad#dDdP!Ch=V`q-q1iRmMd z$&+3!4cJ~^Y>e?%iAonAeuMLdOm&Jwtp^2EKrne!ohj4_av4*4~{ zdZr!i1%LS`tk40>)xuixhsS*c&RkEX5w&&mA;Wpec1yziiIXhj?`cG)dU%% zfUKL&Q`?6^M>6T+r4}9tB{ShMDsC{&vk?3hnTLvU>4-0UYMCSnD1I6m-`{7mC#`iw zao}qIBsdP~d15Bhv?pLjqR){?TUXsK+P5RjpF97Y!zsARlap>{p3Il@dnYVzWYd5) z({%6CGEJSrv)fG3%qr5aZ{A;-Q>7>lEbkD$4ie+XW#*xCwQ(ydDI%=^JTr$eD9ez6J^*Uox)!P*)rMh&1y3T^vxZ1avQe}_-xyz0_P zf7xmvr=(9+?G$ITZ{ddPs(aYot6r|Ci#uVH_^JV5PH;xF#sT!*Lv$&3mD??Ea)M=X zAAeHuhC3(8<6HbK#6mFh;3z`MjRAq81eS=0KZN6gi$0gjEiHO^I+rilr#+ofeKj>1 zz6#%~n=-KOy2%@Pl)r`hzG?PelJjwLD1OGiX)^J>FA~R%ZwW6qA~SwRrtjH?SVaq7 zzjF_ZT|)?$%Om{t_@1p5enS#y06n-i5F}pgrcR(sW4eLncqGP}S>mLrdJ2SF}j>!s75pBhG`J~Z1z30>gPN#x&B*%!2i3ipwlH;l>fAW^#%35|Aj(%%dmVJ->EJ!LI92C@N&-*Gk5j zbk7tX6t#JtG@#q4>qme}^tC1A=sCtBu7fiJx*BW7<}&AwobfO<p-Uosrbp{{Uo^2JL_ac1Bzu}biL z6rcF(`r5RmS?w7T9Y68$k}hJJ;DD((#sFGe#01mS?#1(H)=wk#dqR_aXLt^d3Z#do zMC$t-<*Ovc%gkLJt*QS}HpbstxshySvpQ0F_{k(RY=9XYmm_&-h{n^wsl$txf$lBX z9)4Htj+=vjLDR&VXu8c6yCAsy9Mlp%jy#*B_}j;y!(weO0pzf@-xI5l0CMt`sd!OL z5O$l6GX%4xGP|bGhuzmUlH`;(SA{;Jrd#j#0C;*&OwcZ#xrKvypjo3ymO2BMxI zdHfff44J>n+;v}pC%@M9q8Q@8Z!I8@^rqlgcayUsw7`W5f;WwI6N=j$d;mp9NfpSb zaEN5JyAKj@fr$1)ouN1z`u4*8A4%eU7vN}tfNInciYrC{OC6(;kgbhIq9bp1>)Yu@pPms{;DF?+ zBF#`)V%h*BPO8>Iy42B^1qwOg&h`FEnK1P2o}!q)(uoVm6vX@RJH0ntr^f;mD%M;c znE{7$(`*@u>o^qNJEHR4OtE87DUr|G@l;edPKN)7@$YPI@*xatkt3Jxl=pFp2H1g_ zpMHeYN0Q4xWsG*?-xVX8sj6p-@?U*1=L0KNtcQ4gakg}|zS9CGFIJ2kG?e9JV19%H zW^wPP&RFR2N3^OM#U+2skdphX(SWE$$RJWKmIKa?Sf0(w4viol#|hnQ)_fokkKO`= z67Qff7h}4(>^3vnOV;-IQZCV&fBiF2Y=pRp$1C}5uN%QWuxctw9!I~#@|;UGzXKKf z{M#LNIXU=-=hY9#q7g8?vQKRIpcwZeb3Hm@e&ug8V!pFpcB>PY-RkK6KQ?@RtaxO> zVd9Ek?g^)ZckAjEaHP)u_4%*4k%$jVAYxS{av)Sp^_?+NNS|W_&I*;TW2go*9}Jzj z-6`sm*a>)_*ABKy1-AN$A*x#6cLTjua*Q4fW5nMlcHLfr@NU*Jh=Qs%Yax#l z=p*KPnC^i)J2(@vow!b6RHiVt=vsmBhR_fZ|L1dYfzufjggZ%uCnfi`YP5XdVAhJ3##<8<=m@)@mI>jsM=5 zs$i;h970Oo5B%G>{&!^&<=#$;L>4ASg07#2x)-mif{i$ccXy&PQk*r$Ti}i9n2rCJ zfRYBh-)<3=6Rx(30Y{^hl1TMl$);qE)Ne;TeHAlgwb{w%Z#=YzkOTL5)*b*uulb`M z5>iS)jNKJit#-_sBorqN6hyFWt|U^mn3+gvF-$n+Xfu=79et-Ko_?-t=lWKZ^mdU5Rb_hEl`KYi8~K#<4T@?%E=@is;m zM3Ez*uksiY2h^L}A&B&*T_`&>1ahNHYCO_pkSMXKu_ly`MrDj?*jF1nw>%>dQ(cXj zyIOqN+$p!A8UKez`L(tYyDCJ6VO`85UTAciSRR3GlF=0tPpY}E8!M|W2w;S(Hv8`d z@mVkZ?TCJ64RmJy7aXHZ~qt*eVp{>isdvQ zLPQT<-@J{0GGPs38msU>MK(BoNVQgLXxh-OE8TEe{b#ibt22zowJ4x3DIo$~76B?~W?LeEwY%Eu;|* zJ|4}YYM=rkT(yJ%J|r@Feb^qpb10UC?-TXf#(>V|T4Ew9O>GS){nhnaf#5GlR{2tn zoLl&74U5gM{}*uYgic(8fL7^UGUD4z?kd-d8I1>fKpTKKE-K%|>S_GA$rjbN%lt9| zm@9E;Cq7aO7Qd5H1-jRK(JAP_^Wmx%mK% zQ$QBNYau=!7h=EdQ(+3?@fLpDJZ(+4d%?S^X4`m4$-Ta+e+a;5#5FD*!JOdKgB@7` z(VKHH%eM7UJAPb)OjL9ZdfR@+k=&>Oi-08*%NM_@^r#$0s(Dc2Ot9orsCu)A71t240go_~U0CikXqi?9O z29jzwS+7{r?dA~erdV?fr>+_`J*=K9{Drfl)ckHPjhxGiHr$`Gn9!=bw1ErLj}(@M*HXH-fv&J1s90M3}$Ap!Fl2ABl(;v^(->jy{F0U_Nv zbz-Rre?id-qRELruw?or`h(NijsFlpgGrvi#BEv5Z8_*v132}W*BgW>#@`&zy%j9N z9&%gqXRju=gxOz-&G zq%UOOAmGzF_4QBuNqQxjMDPdZT6@wP-;twpoOYro(4VwQ)SGe1yyl!s>+4x>{Ao*I z3TxeF8n9ET4V_Tq-;`Y3^5JIF9L9o5ZDXda+T?w{=meJ9N=tFnO0BudgT!ARB~oPe zNX+M66hum9$7Z011bj0&ek{Hp{c%!g$ZO#V_cSAF#TX`2rI+Cw5X;6(vQ6iymr92w ziHOE^sGWK~4hoqx5i4ma7(H_4P=v{dp~v@Rw@%A)h`=easjk0+KD)^w-*}p->VSwH z6x_hIxNii0!uyI$^q>B${DZNQoVa(Mv$Ox3kqsT{K1nC1>!`oSCLIw12^k<^^(}u8 z3mAOZk{qykgF!cGQa zu1)4SZshOq>zNJh@G$rjW}{%MFWQYoa~C<4FJhn-a8|6TnsFTk8O zwSE|Klg-1rdg_P4Bfx zmVbq2ms(2QSnKG$WC)uwNoFr!SmCX^y88ve$X6+Ic<8ohB zj4?ziTCy!k9S`qwcKAkw*+h>oBOvgk149Ge@Qr{pG9Axki3=L6uH+z&x<)kmcMevXpZR zn1$Ws0s}s~=pQaht;181FWJBQ%&!L%B;kkJx-2q1S=(lv6N7E*$7?xYo}msoOWoS% zwbp(WZ=}vpzAS6^32m2kJd9tf8LXfQUD|hEPcE(Hf=%`N;$pv?t%N8mD-akj=ua7B z^U81jEw)>*xx^cCHYqTP=GtyY%g9F72Y`H!Z{%hKc=G|d<>2uw5n<6?rC#B$dLwdC z&K(v}cC_fCeN{h)l(e~Okf3ZAdr4~mIB4o3lA?^}C9eKkJmM^gzBm3BV z^w$?p%|?$*wiuC+CBlm(D&dCfi@03ETZ4mF@LF+$Bq9X5p|~H~C=vo)gt8R)*H8p-rc6nlF+wJ`EtI0KY%ZIY1z|rfOD4@IA+#3TNh}z??Ch7lq_T_ zIwme;E}EVY;*2@u`aQ18pca4g8y!;PVwwx#c?|&4uwN10v8_%*gS&@lm*8?oC z8sAPdh0jQgi5ywsUtMh-S=Y{&)yKMPA#);4R3^gJqFSFHFqej~{Y!0#)D|7GGr3&M z((Nay^I`OE#u7X%bp$ zgCuMnT_yTe4f-8_bB#aBG7YY#pkzVXADaxJ-(m(cP#MvSWwMq>tefn@R7=4%(y1ZW z;qIPEr_AUZd!;1_PSr2Xr{}Hoh^Up|Hmc3_O93?-vu!^$xC-`T;vH&eChO!_`)-*i z5WUXVBAgfh_5{f;5e@q9V>d6DyE$7>UYwW#SVKK_(z}Vu*|~u3d}>GMT2S22_1GvL z5D=3V-(Hjh#eGTRR@}Gs=zD&=3L=Vt$M#=)kSs_&e&f8!6+H}Z2Bd<(-EC}qJRK|eg#3c#xf`Jw>4P5_uxV(S54Qi-jJRn!vZ z#>{$5c&~L5n&znZvq{&UNJWDubakZSWlv~=Q?Y7py#$~o{ZMN@qO;D#kxKIs`5QDD z(N5+;lM%h4A@X)}>n0=G6EI&6kYq$H$z(+2ijDkGut9_QWA&S&hn17~8WVUq32JTj zi!f&rwlg=yY5fF)*UU&=pMW{75!NFQ?Ndo>VEJzgA{rn4E_C{=E`m|RM{vv_+4K7% zutcf5&D<~0GSeIRs3rV7*kiKGBr1P6!1>iuKw`~JQ>RYt|Encj9{L1MuI?+Z=*Q3K zu%Te?ZnPY}d2$>IbM~65is8}7_vVc_4gI%8>N?alrW0Ur)K<)vMKiE~vSkaL0vNpC zr>QB~w8)$sPpF&+Q{Pe(ohi;NI71VBi)B}#M~kxHYu2#TeiJVNEZ?Z{HxtOU#{ao6 zQtvv%?sKEf!GN>-(4xjF_MkzPI?P><3gUXhbeag_3LhzsZ1mE_g75)fbOz%Wtcm%x zjjUu>fbqM=0Ff7JWp`jl^BG9R;@n+7X@he~QM5*jgio9b^I0XO*^utT(3ei7ye$|t zk}3|Qsu=RqwpB=Y(~(nR_eja>q$kq8FldD9nE^FZGm}SJ6BQZ6*kGh(E_yHIEB1ov<@`H;LaxRF^=kf)i&cuRZZc?_|;Gb(h{aicBO>YOG{cK~HkjkH|t)G$PX?-?;Z~ zG=dn;FB_T`Iyv|RUk3N|7is+?h`5%13HR*xmcPrIfUHvEP0d2ORJzu$2*HeuDy0K)l9{wft;grug`=Rz?vNYhVc&4 zyzE%OYhL*+lqV+xK;~Z+8=W2MC8|)>(v3GaeGGQ?%LGDg)Xp89>G2dX`hfX(rb$%3 zxSY!A_n-KUyts^C`n`fbbR|Adu-$R{z3QlbtLn=5>4&Cpr|Xketd&#W_Ip+PexvVz z!O^atpj}_3U0-)}*H?(4f~I~ys_O%^>#`+NUEjntT^9mJyS`E`RD^NVlpnwAH4nAx z`a^vEpSoVgCqx1~e%C+$@LRfmTbM{YCCid(@1fzJ#D@(b-aHL@@?Rquqg+I59XQdg zb$ik!0NnVZNL^8fx|l)(Kp;obPTwe2zhoWkZXf6EL_SF9CQe5dI(`jmfB&ii|2hI= z>kgP$X5Nv^)1w9m_pO<+a3;H6_Tq}EBKeSsWIz10)6D> ztdY4v>O#aKEJ7cg0C%ixrg`&bFx5DOiz^9=8ZeoC@O9ehTblFVhI$kp0 zd^(1b=uRvhx6N$trmRNQN>D$;n$ujM!+MNc-!qw!#ykv5ee(#l>*c9(%f%a8>&o2 z@b9+R+t=*v{oCyAMs5?~b!NtM682M8w&QKQ%1bs6_v= z%d+dR%>D`ypj17~Q)p0MmDn5xH)rWu0ksl4G4L}Rp>2iQl5bcfkW16Bz|U|k@Os%5 zLdOx+4I|k<6ptXFh7#i1r6q>uMe~JA^1ss*^MuG_t7VXY&`s# z+0_lkTr-@E_rUj`=|WS78tp_G(=Cjy#KA0kq=*4JE#@D(hR=P;w66Uh_5l;+^Ka$2 ztH#RWbJQt`Szf$x%-Q#-z(uCCX_Pxv>Dj6Y@9Kvf4iS(GVeS-z@93uafnYbl9k zT{Me*l|tW$0S;$&Ds*YO(|Nr4YYT!Gk@$mpiM??&YS5Tw_Gl|KS47=XG zRa@9a&y6Sg-kO6M;4=RPiS8sJ)j*eTp;(cb*jsFY%QDjA1_iH$@kv}9FhkJ5BxNP@ z(VQr&xe!*f+P_HUBxp|-*ZY@9dGlLpk)0Xtt^l~AI~momEL#W6tlVQy3E{fAJ+n!$ zYiMi=v(6e3FulDlRt?ecxZO#NdM@QJ%(QZ#3O)}$ngU$!U2PbOrk}waTTVInFGk83 z17`Lgzoq}eD$599mE9r8H)iy&*?D-^GbfjFDSuz`yHK)Qyb-pU?{C7P9s3Vol~4;n zM_pr%WQ&eIX2%wO$1dwDnYyge8hM=R*+dD0$oSrS>f1V&Wjls7x7#uK#QgbJwl{<6 z&7l$59zZT6G2b$FbAC1x=45;@uVVpDu$v#8Ng^v99Tqc0_<>%_PkMB;3@wb28U@h&Hv^ z+w`&ovG&PelPEs>hdvU{nbWT}m(iGF2qkp&6GXrn4q=sjzAGQBO~ zCLfUjsJ)Uo?FFc8Sr0G#2J_c=3H!p1+4TFToY9oOvvoKR%5aE*Ha~G;9k$my0+A2W z%%j&>LQ_DsXR<@0f(e*Szi~TMX4cM0_2#Z&soqG`Nts1+|N7I@q#H_bOP4lFml~fE zC6KOx8NHUBSFz3+m+gCI&WT7zpgiW}lFCo%>tOSb-6yH0MH{n~3Ovy=`SZ7WoD?(`*Cc6F1jVF>HvgXc^?6k(Qz2iY9y>y4YF|!E4!b@1LMfM(wa^j zlOXbS&Iz}neV6Lv9u1;}PqtHF#vx^f~>h(}w^Eh6z+8f`(24{BOfyWA$ zl4eFHqXxTKclG?_sH7URy@ruYUT1CA5cfMB+KuGaJMBQPX5SoVpaEXH13gg&`t@f2 z_B7X&Px3?Tnx0+m#TvSM8#AD+)J(d6sE}2Y5!>t(jh_vZ z_XgF((%F6e{X6Sg(qqHDW_LaVDcQ-G5tFq|a)Y(oW~<2Bw#woO5zkqFuzvW>#!0Lu z>ejDMLkW%ZAZ(ZGq^bVN`{ePYOjj7ld;2oy;D!ueRB79{Bjjnc*%@8X`oc}%dW;u7 zXOtLNQJ;o+uAEH*qUbV##>rW+NzG{C#K`G>9vrO82w&p78hO73NqkEOW@mu&`JoNX zEE@9Jqina_YEyNFa>_3bE>3_|s>GBx*=hwc_dUpeHMU5_5p(z;4P$!LtX51-++is} zP*2%VMtr554ic9+!%8*rm2Ls?WtzMH3@uWDp2$WrEXn?V)7Ku~(brw-sNamN^nm&I zghN0TJ=aC~jJq~{&6B>0h&r1vg&7Wc5tFIJQk{-J@^35x_Ar2KGgq&hxo$B}Gzs%$ zxZYzPR=JMJdZdf`_S*C6Y2vSDk6pq z_u_P<&Z=?%asG&zUTw2L{yB-h(OU{<;vz74;~JqZ_ya1JKTvb>$E$yW2{;R@VC@$~ z!TRy2UTOGdj^)!){2R)@i}+W>Kk65ky~?|YT2-7G9>zI7>kPcqSwItrF%UQQ%yqF$ z`S(%AQzlBt{rLHe&54y5iF`Y6EK|mO?kSon8h@OrzdgM2SPcRpr~N+ZREa^& zxsRkYDSZ(0B~cdMyR66~f6GR)vK*>-&4z|)u$ddT9Rk&Q(OO=pR)I�(0vY=7Yk! z-YBeu)Le|1$x#0>m5bQ{{4Dd_S58E7*s9UU&VU&^0krKJjclk=vw>0*ySxZ-BKT*g zxon7>Uq|2?PgN@sJ#==8NIHivr9^Knkts7J^F(ML0U=T979|sRWy*fmUS}mcJu}$8 z)5Vbd`;`=c#yNHXM}IzRs$_rKmmD^h?~L5^xJ805bVhyE381znbS)FxFsm~6;r&NX zkIb*kzohpX`x2oO{i26aiUbY_L`TZPJF$EoP18wxy)A4#cVf$PMye#Tn}NEdr09>JIaiD`ss$tpEx{LdvGA~z(pqQP=> zs21&1{v5P3ZA7oM=%q6~Ph2+BGyL+Io_+j%n!lg(uZ(T?2>;~$X8yU`+n%RMedA%m z`V^3lr*ERI1kUSvs0d5y^rJh zS+@y;60+Jp81X=2bFrf{Y@}x-unauXlmo7rm8dPD!QNh|H|oe;*w` zDG`=_$x!ZkObzd%s7gUOa5I;_3d64F+|MXwe(=FNa?1{V150bZEs?-XYA5SV$qYU% zcCEAWblI+=ih!vQ1(R#y|2ce^SpHQaE%=aYnf5aC+goMAvl?pzJ!RGAPjU>4U0~$!>C-z$4xj0}=Ni6rClHpvUs-8AyF!KPM0Rn66vv@F z;u}wNU88Q^dPvRodfY}Wo6yPNhivEHEifC|A&WU)vT^lZe~N2jB}@QpU6r}{YFE0S z{Rt=|3`Yzd5I)zJtve;MKbtk$R0=s^=B&e|rxs|)a6El83Nd(vMixI6<+9j5v+~TT zy1c0_xV2z8o{Sja$J%s($|W`-q58Jy0a#~|GEQlu|CoKTfqaV!Wzo-M?`3ROWiMjA z$VVBGZ|LQV@_5WhlXyVVrC8IQ$T#UB^cz*Cyv!Ybk48n;3~+`NPA7VDIS6$@<&e?D zjZ|y+7uJKmLyoF3ojF;-pNkYJjU4tCW|DrJf@>1f@{)USv}k#n%R7td?7BMyP}EDU z)ZF?D3oF+hk)w2^`Rwln9$F)s5EC5PlTk?Y89SIXt5iekAV{hjdDI8Fo<>+1F=5rG z_^W=J3thih?nuzBhRQJw?umb$H5``cw-3l%Y{slbS~y}0#B?);Pd|=ivSf*%bGupH zaH6eo_s>RD*)lwQnV6nvOG8T*f1CA*t;kxR(7jIdakF+Sjb3T`g}8d~nJbrJda_=y zpV+q@WqqRJQhFrbdgISjfzKs!-4S~gcJXCr>!Wknkv}{9sVKB^95x;W_Pz9V0-e(~ zbLvGlEb-%a*s#%EpTo;n6+cq?=xElWK+|Z}S4bs~Qi+`_R52&Fo2|dQF6c~_ohHd& z;hm)`DO*L!bUj;)T{(UEnB%wo_ubD-et)rR2hE%$d4TWu?(g;b zoxd8*+8K7LCce>bs-Ap2IaQI{!KcNFTZnH(satRvFDXspgY} zWh?)9w7-*xW$LgV!^kZs7XKj|!zsxvjcIxUr-URucZ`hL3;`v5(B{R|%|7<9&>1ls z>>h`}2;FjKjJCcs!A$tHvhm`|J79s(AhKjm$$aZSCF(#u(?uf~y-i;EE8V0(arLkw z3!z&6)+<(&%FME$qB1MAG*i!OM`sNEot^C7p2!`&J(zrr>4U~)iv*=q=hv79E`cKK z?99lsHxniTxVJtdhm}axaUNh~>%|q=8Qu3_T2aU^1+M#nL;{>IzQs~1F(c3Xc7l)> z676(;#8E1w)EPa%SvztNL$)=TbKboqS+CW<>~MoD_C8wV^qP~zIL;1YEaulbS9l|P zTYzX1SBnk_OSNh%xXQ7n7mH6v)X?V)q};Cw=JZ#Kbh#+&4<1hS(9eQ@VX|QU=UYWe zz!^Kp{6RDgx&(IizGD?!2Wd@jWhY}JC`mU1q2U*NdfW;Hwyf6M=&rErzWY((rWfn!- z`H}j}s1SNq6{nk*&uN`1QruiCP?HY`nT@LeEfiJN2zFj2pxr0E>&$6gHsC>76_>qJ zGXKzPk@wR&ycWD%+(U--g@ku) z1v66JK9O!adOkvKpq%ay*^A8y3yhWHg9x|P%F*%?!CRz%nXabpw!-9O4yRXaZA+;f zyTLIe)EP>`pim4)_eyFuUrkT-YR=iBMaM9U5c4SeHFUR*GF36x8M&Egsa*C!=@yp)Z6Dh}aI7fJ08 zuICWngHDKj3e_}i)_R6Mo@Ry1FEs(Aw-)hQnQ%~_08qP?n;uBw)>L zLu|MOhiNV1kx-KvzJ;J8MWV=*s!OfMltrDK2JRBZGQWM*1h;HAnN)~~Z=A+`%z$pm zcJx>xTvuF-1$beDJYYM%fa&#wx*Z(l?F3IS&fAH%b&VN*izKwAO|VS( zO31-wHz0^W(1Gmp{0Ykeh0 zCYrf(fvhPx|4+W>s6PVzaDlAl9O7&p$L~Zf!=(qldrqU+(ZMmL7mX4HB0|!F)0lv> zppb?AZmOhLJIsOC`P0()zVMnY52JXY%b7 zfqW4uJGdrM%rKc^85Ai8J9RaiMPf5;Pb*8+nyu;@Sol4MqQ@MSga@*UGKZ1Bg z2%y^39p>zx$m$$-oKA9S%EA{qQ?iabo9@Ok=ZiDdNJh7LH63ec`hA&M_lz?99A*Qw z=Y{)IZW72aN{*D7x93QHYFDZxM0u~aMO41@GKzq<@}+E*--GL-3nj4sX2Ew4*K(-| z6XoJNwh(r)Q9>|FoS+>T#>PkIn44ZN@Chg%hhpdfk)CrbzB>WO9QdE)NiY@U25Cba7JX#q=CkIFJl{PlZExL$->6sdOzMK z3wuAa>&`19Uv-&2;kiNgJd*YT>jXbe#MiEpD~yP*pAzwvG-2uCGbKY9ab9~xzWFAU zEg8ay^O_~e!G?Ee=cZ3`uu5#Rn$E)R#Z5ttC)X*E5lz_#J!vmYJprS;RVa3dXQIPj z%s7zhFyVX9a5z!9Z#%9UU8m$!KgL^J62n=^*_Op@JK3?-GTCO~&r=iK>kKA()F4qP zIiq`*nwv8xfS|m-`SZb4@%VlsFPmu2mx-Yd3pDzw)-Va>Ip&@RK#p!mf!-2HK;rog z(|CTdA7#aUlwF_Jk2w=UT&#lZ|9A}NALL+=nqrxyLlvsO1DMH%fYKvgMe*_RxIl1B zf!kDFDscnkIkq*(7P-LR{6P)sr#+sr>fedyMJqToFXY=Ct*1a*Q#WU|z>dB39Nd^5 z>KBhs<4NR$f15PM=tM_y7mo+{CBRObtVjnpriCO}a;5~!<1optTrYKch@L!ZfU`sW z(CZaecc6TXDg3*ziv}YqeX3W`r%TB042PhkldyeTs zT)8l__Ua=@W=Dd131B!#Rwv_s@X#FvQ7m^IXXn#EJX*>3{JB&9u(ai!OrM{DdDXZE zvN$Jr$Au6h)-{%OQllB?m4N;T1;zmK~vu%@P55j`1M|1#<`LZRCkghG4eYm{JKF#CuT6ZAL3B1_^_lSAGUAC`0IEuoI= za07{F4Nqg^1nJM+Y;8D?IxN-LNMckA?Pc-^Ts`yTqfg7%F%J|XPn(^)#gk5*e6phy zZ#HvoqlBN-`5t>4-q7o>XF#5ik4!XNq%x8Ln%r{GWI1sivZ=ioWxR!nj%7y@ZP@>Q z_glgxOZ3~KaG8|VZt|TgbMf*?rZEX*Z!XF~uPsClfh`FHYS;g`ki>SV#JmkOP9Oaw}?0+1PzB$!xa zrIR}7a1jI%+ciGyK&0j3W2qkfq&P>8qu)}@ejRBX5IKC(vD5t~x@2jhWTkUOVddV8 z%ERf9rYppr9Q*e~cvB+0CK29g5+||qB`0a9%Syteyw^BFsvd#7zJJ%c!|6DXx$PV- zLeMw14}5RjJ2xOAntgS<6HTX~oSS}v+6dw22HElH7Rd>>r;(r;|izb4X1fQ|2L_pVC(eLfJ`q3V1KN$x(fLZ+w_z^e7ga7J1DR>mDoh7CEKZ zupAI)y2&l^tO*5m(>ukzCj^>KV9##oKQ_C6$pJc8&@k(i3G9wNd%<`3_Y%g`zmCK_ z*U=#1)!w1|X{>oLk9`~5G?C4#W>d6Q&=Ts9U_Wu7p}AWU!>bh)*9a^K*`lDJPBI!X z<{>(k^pj`}Ie4XDGO{k7RfK^PYOncmFV?#ALFp2m;AJrkS^`b$UkLd(%v<1J3~4Y4 z{9~IRg1AwecP1|(SXyO;q~5)j_R#Q)VWfHIS+2vo3&MMRRU>(Rd}ObtwS|{cwH&r> zk}Sx`B6sB##qa7j>rCQaZRk3Rl;wg0WP5In)FmQ26K8EbYm~QZLsJ({;h$gCD=pH3 zFlH5H5@Kw?E+zlTCP^mB7S3d=lP11DnB1CWu1Oxg8xzGSzcRP0#C zW`<4+c56Q$DBpJrg3%IEQ^r}H&MNgboq&768)nuI+I$}?Ste01CM}g> zR+ty;gBpKNmsQR}(6&SyGFz_b1$ZtC#U)vqKJry97XT^Flv#Q?HcS^(pdWY_>%pc@ zrDoz3nY2v-^U$+Gwn_M!v6%%Wt8n^0W-i8xO^FPz8}oT)C&$0?%wlg-ccxSPVQxO3 z*%*s9d;jwp(kz<{V>LFJA$&Oxz{vZHX0a3Zb@iL3t^z$LX_xo=s{W4Lf|>F(zRHD5 zU(MaWn2*|$Sn&JSo`g*`J}@yhd07nO>pCb;jE!t`G&%^aT&7?!y4%oXI98wLW2{8G z=BvsC8i~hM=2S0$12DtKma1XhG8-*joCxP#NtM|A?JS?^d11?x2h#ErP2YQA(~Xa$ zy(lAVI_ZU%S)a8X;a*afmP7ERlPw+-KQ%SjGuAT`Uf^CK%5uCfK3D8#KkCmx2 zMwPlCO&0eqDQ~i_#fX8!YngaOoiQ1vlfS>uZl}KaWwoVN(J073q8ABz88M)IYH}#E zN*GEJJK^L%2zZezF#LTf5KI;*O%^z~+%4d%QeA!PbmU8sF@u7uVXY+sLmop4n0WYj zLn((C#LuhESmY~ny^N(3RHTeyA~*8)9Ut6tYcnrjRq7#0qX!-T2w|ynVX3uE^S!Ue z!&avef2XzdBb3IUs0=}W@c?(-YIqiGgol)mw>z`5)J5fnb7`izJWX``yRMNrm2@WC zxspzlN+%{S1A46|!ijB+aC*;6&aN|Yfb*PkIpcB;y?1Kjtixojid8HVb=Ud0UcjZL z2Lfdi%uP+hu=J2roIB=@Rr-Vd^jjEiG0~J(to+lqb&MG`F2O5gKdINl%MBvZTVCy7 zN*HbS-k*S{HsX2$E-V*3Y{;5;$vS6x zF4+%1N+4&9m8^`d7R|~FwBW(R+DdC665?0(j@0%8tynEkYy6erx!;#B2?%|1Fbn0p zjb&Q-l^pwaaV+zmxX}Hp%0VLDnF}wM>F?_rr8Jb5d(1aKz;2YV8zpO!PCn~6kXD+% zKL7~{H>GOdVw<2`ayzb)7HYi+)95RmE6~nk@5m5@d#hNg+!GuZ`OZrJo!wSfus0JWBxr@LASX~#M! z`xzs#MDi~KUHw(L{t+X~%$=iw0rcwiQ(`kl=Dz~L`f?<>pMtl7HLbnpK5(U}?A0sn z_8VthB)efqtTX2ek>y)SpaoAXf`bdk^8z#Fub`cz``D_xEphJ> z@~!l|8y^VSSvcuCrQryAIK@Q;&B)ly;4(2+3zsHet7}zHP$I9hWX(^q1uhb&?k;*A zI@g)E2P$=L{ce7bX78phRQ3)&9Nun9n{Yl>z9Eu~ET>N527yP*#GKXJ1IQf_(7+QK zBw&ZBYX;E96veM7G!Gnkk7>jp;Gb)SV^a$?NlPMlhvubQkwui=<}{mMav`B^?qvt^ z{O8;v$@jM~k#|gG5zLRIz^>`J!K31@r}U1aMvC?RcE`I|NW}C0Q}N=FV!%CUu?UIH zohPTU+(-1f=+rdN2=I8prgBcF(`BbrZ5ESxGQlup($cF;QnyM01S8C zO+G6(F@ux-n~uWp9#BLd>MW;os6%X2?v#O=O^lCZKIiTi4z(?aYyL2CK@fe#!$puj zvGw!$b-Kq^50bm+5PnS_NqMo}i7(^^zCL;nu!!5mkCw_&Cl&%oktA%r@7XaY%-vfl zS5*S9Di#m$QSeeZ%*AEXs64|4fM3+Z{MJOT=9h@^di^84zL{TiqWogQCco=% z;g=}o{7QAEOD4@1_o0#CNyux&Wk4&&{`misMx;{nLmyMa8r5)6^gXhQ&WxPkI&>nsxCULte={9KIE%I}FDj;^ z*H>yZ4^0rwhk%DUqZ6y31J{rh*pR=%mTCO!nRIVB-D>K%W(0p?(Lzd-vWs81^HYyQ zHRwQvkg+OwGf>Fwd&GW{QLA9sKG`QvMg*|f!(;7DZp@gsH6m-(R(Z3{6yjLztkxaD zw26OoVpiW$vwDWu-V%z76_JAD`V!XaU>cz|LSus&5Q|9qWk>;2fHp@0*ff~Gj86^p z;*Nx}SS_Ql#Tc%RCSbBC?#@OJ3N>97^g#rqYWwHu$=ZI_TAT5HTWv2;yz%BfbWn%D zcy?FI(MFV}?dDaz3>UMuwim$>9BHhu986WxP=>@L`6`g=_8e)5_qH-(^8WxsA1WOj zf~6yTi>HX}3hA^~47f^y$TMi>JP1|mdsq9gz2tp(o0srE#I5UzIrHG zet|7dcfBjoTMeuoqQ!~VEJ#P%5a^Bmle?e?CW)>kr!!zSo+emJW`4UF%n*Ff=*Q@a z(us9lMGs7$){#BYfv6YjrC-UZ!XNkuD;tlBcM8!q3(e<*MM6a5aYkn%q|t4`Z4m~b zInZ2`vU@__34+7aO@5=Z`7O{VzN)7LRvwloHFed|Is9e7hv(?2-UW`T&YZ-og#qf^ z;5U>FF2~U^7(ASm7X#4;M--A;u@D)BrdA9Ms9Z1g;J_M8mx<6XR(8cdGI@UGzteQ` zW^F9ZO#bq{ME*Mkif_sJQSh+z)EAuzeHYVyIeI+6qVk**GA}q;I3K~e0?q;%<-LIn zOu%Id0grdaroiL+^wcDVdda~>umN*TmB{o}8b9qklV}>A416(^p?7}}q+|nMRCcg| zFS;&1q~&4sn=f<&Us!-kg}*@PEg_`zFbSAbMj^6^%W=jLDG>`~+BrN)qcfT-^HnkL z^Wsst31Dm}&z?c^7K`@dG9Hx&0kceWadCM9gvJyHC4ut_?5{ZQ5)hYDQGHURW|92H z;(hrA8d9&T7gg|tLe)|zD!&6aU^>a)I7T0nf^5R9eg!QHcwQ$u05;K zP7~0}_w1IKK9B6(6WMcyyG^?`)PB;j^8Ga5vvt*rE|AVPOm%injV+SVh0d%s9o=ih zygi*)-LE2B`?!y%Ivb{f45r4Scge@v0Qayx+>Sn^JJG{oW_#&dR5vxUUP^k%YjjCN z_&ndUgzQAZfMu(1WJ6@Vd`ACe{(Qw+i9~?^kU=FsbYE6g=s;yjEqDaq=D2aL&a@{? zUDGL%4>HIM=|qbtQuo;@k&iP{fKL4DUSA}liTF5Tj`>FJaGC{Uel~{m?eE0L=(BC| zxIC=lR{>-HqC z5Z59VYU*W&#G-HzRPr=nLhB@RX{Mt~$Z;LndxoXr$hks+@c}b|5_aHH4r!@u;NT+g zWGVT%a>3-pA#P3#W)z36P%{qcMdb6e@^l$l2S(;7T}U_rb)9~dQtnu1e#2PX42H2L zQ3U#9>TW#Hi{WbLpd?3<13(rm(vmU#^x(UQ`Yl&GL|l+99NYI8`j1X?K?sB`AXc|G zvnvqystZnlgT>x`t_Y2aiAL z7o5bTlZd*ZaU*J|xmzlkpPD)sU%FG=%{_*FRnuhlh%BbVb&u?)&r(z3iw6>nVYTA? z)dD2gRSz&fnLLy;2UCfwWwJ)>qNHRq<`ug}o}mvevS)$feD^GPYO+uzUW@ZBdUlEe zs<*NhrqGA>t}1HRGnWHfD8HF<87`Vr#Il)ikB#n?BOtuZjNsO-Vwbs?n}UtL=od2LxZq23 zR@?U{>3i&k@?~$U4a*RARtkz;s$!e@XOvn;jIn&->sLuqlfd@0YIj1N-{Xo=j8iwymyJ~?aq+cdO0m(>y={Jv`LSOs{5qZ z+s$fj?Z%LrWM<5-`{>qaT8<&abbF{-s0v;qNN<{^EpnNXCr?OH_r3ior2bfoAa(7v zr5>i`w&hWhr&+mtn~BL7jW&MOQ%0(1?6ho_V6`s6$=X>mwQVz5$9A+4H)#mR;nLAg zF1uHh?Goj7KZy&6d924C-DXPw$aq|5;ZO2uGJn&F)7jmAvNPrpqF)wUo zPD^ky7@*XiW!N90ws8X@o_LY#jw6S>dGp}sE_>-bEX!m+unTCb3J_||EaiKgTQxdd z4xJ(Up2+jsb!&IE+pRM5mqFHhu@`!zwy>F6|0FGa_0@_|3xEiP5?>Y0ws2B{$wYzI zFphQ`%-+)!4jx)6u_Ap{dw^`@@n`y?f9EP-?k;ulvaFyKcu_#V!Mx4Jm7`XLvwAi- z!)!(`?9%m2Kv3Cn@gT$nCty9t#{skXx_$0>LH@7pL{4N&%H|?o;lT@-U1`D|7Rjo* zq$*)4s&Q77x^xhKIGTzsjG*K>WtBQZ)jDNRBAYnqEGu|w_A(Nep8ReRspu*rnUJw0+5 z<)qLumFx9eUlch^vRJQy2+5T1sM%$*Wf#+m?_j5Gj;2d!Df zj(YBOiup!v2)Nj8N1JvxbxXCo>ijm<4>3+z;NOJym3rEdl$Mfj zB`bxX%#SH-5%HcFed^zEk(wYLO<(@q!k|lE<{wL6s+)zKd+k3}f-lL3)inhzzx|vwE-rF*1kcNE2g%c0%gmB8 z+l=QIB1N#P6Z$z#J~~5avhejTS+OHH4*+d#C65{;ogzr=iAz&JbzZ8$U|UfO`S)6j z&ulIJHQsua>xB{bILZwBqC%D?8Iz8(pdlW(hvS{Oie&vu`J?iR$QC$rMR-<(!{$*C z;&|&bp)CQO{>pCHJ;jWWBJ$Ua1FTPTM+FG^f871L8bqbw4fC(-KxtgbQJ6Z|o|f?iyk>cwjXsa}+QXD`m>lg2l|JT6i5)=9@9YBsfb*p{ei z!R5iOdn@MwB^r$*c10KO9!?xbW6AjAXZjSCF7N~H~^rSCtP1|g_Wk6mM*?czGEbB$7xRdnxs1v;K&&Me2!2yn^hQ5@Y?psQV^8wnz^0xL3lLc_QCr&+J?7 z4LEf+gh0S_nvH(Zx-;4$j+QT26ymE;kHCcS=EwK2bjc8laqnM9g3deZdrRV7t^?-L zfd*Dmec43S`!XtVH6HD+kHjc<7>XI)5}fzbvXgXs1_~5gpW~T3Cg5QzU_3D*#1I=r zx`giWuW>0l^AyC8qqGniylK`~C46LjL_g&op1(ppctF=?T;qD zS?rBhOIO78e7ngZ_@HYWlH~Bv^KY+z1(IH-j?6Iy4+{Yn#$IHlJp`LN(8c6H{j2)> zSGq&oW>#mhJXG+?=52tAxR#p@Tml<7><^(D(O4|x??iLS`)xMJl>v}4*es%6gO8$Lcifl7~oRwkPgU1>q!kweb?s6(F6w4A@@>|k&n`fXAw0jANinW=d z`I8dP6=GZ8#{!5QoSK9D{-swCSBn~<@lIgZHc*~6UZ~ocxn?#M$lkwN-YGP-Z~PW* zTr?oa*Ms~q7fbtbnQmv1Otfu_gs*qM%<%g!lI2+Q$ETh;@6adu=hd&AFX}!$qr(@@ ztM=ugPs%+!wAq^M*yF|N@K5)@0v0I3q8EN~Hnk*998I!7XOXle@~pU2&B`ftUa&QE z1}d7g_{=P{GQ|gA6e4w5vEm~ITf-mQqVcEz$WgI1?G|4oY;8>YN|W)dyDfp<0g1k} z7E=(Sde!YvKgdEy9G98EorC@3?mc~up2&r>BwEeel$`da%z?G8K1gw1aaFCOaA8rP zFZz+hGgTRB7vo|ZmJYR0NEy|N6lP0gSpE8Y20Kx^E9fD==r#M4}6 z>J1(TFN2wHr$d{ALdPDlU&8yjC+9B>C#Mw?>| z%_&JdVJIXEg-_~KH zg?zW>RNvh?Pd|R0+DWNXYjJi2zYuzVWCtP&yIMT_c|F4E*rTkRXxJo)Fel_E7b%k~ zcd_Fi37I5dt(~wlfGLd1nEP)#)M&|e=~`^H%!f^{)^O}pzGLTp9-Fnw8TV|odJ&8t_4nOb{!8}$>u-%#che2jj6amYp+f2j(RnfkX_oUf4-ihKeW)KxFA>v)=)+|PO({TbfG9eq*9mgp!B$C#VbPWIfP zBX0T03}18_uPSf%ay6B!xIbHT;17KCp2Wgr&E_@;LLEW6Ah8YmM{iDjWpIh#Dt4#A z9vwlfdzRu!H2X14Xr|FXovU;4w!iA&MjwpsQoubp&Z?QRw6voJM8NhV?tSyZSFp*z<10*2VXSCWKp8+3{0InbfTYt zd%UT*jwcC$&d58rN*a-seLFE9dgH!)u_i-cx1cRh1JYJW4c{SdH7 zHLu@-SddU!N5m4ZhK{M#{~j_-T0^W^SphSp7#*$nzrBnbRE^(MOM1yhNi6v{ydSXq z-x-^XOX6;|vl@6lyR+nF^V}Y`W;h#fje_E=Z;OF~D+ectM2xd2S)wkI(K67e<~=EE zw5xeM-Yh>&Gi0evrLXESpoG*h4d%8%Q0j=0NNXI_}Z7Ni%OY4Mvz8-d8|S?io%+c03|+Uz}YFO3g19Ym7?D3LMV=;(!&o`~swC zMJ`7$KTc`Zm=*d_dbYHL0>%pMoErPVVenkNcYC{b<&n+`lA14V9Sd_x5h_| z44Ah8dX?K+^_qr(o!Tok39kz1N?O#HgU^d-c$S(1eIH$uJ$Qb5o(0RZ{=um;i#S0N z2<7i+NP(dp=KLoMlEFH%Jcous&w6OTLfTIc-;PU%Q#2B~+D332l(Y#8PXQx~Pi(d1 zC^r56prHY;l!r8LANI5lFLL{K7$V8-TkKG>Z;5kl-{!rmeUng(N6aPkEroTh{c@4G z3z71a+^ns~+3N_1#ICt)qRF^Lth>=*@Q6VzE@WeD)6HNQiO0;k`MV<@MGC-NC(Fm% zOxG|ul`5J&fzS_4Vw_cx_zg>z$)N&DMEm{@!Q(ht&B{tbz?g@~yUzMh;_5`WIZ$eD zzf!)ExS^wTj<+l;@LWU4cg-YgPCW(Awj_%$oLy4M&$W_CsY-g5QN@#^-70+1_kl}E zv`HLT9Iu)^L`W+!$`_}Z&n}RRhirVtYE9ESptH&Q`2?bGJ9G{D zCCbaIoxIW!e*8H5AH#Bbu;P7Pg4I7&6@HaNl?O)*BIm(euISPdeG#4s@j{h?Z4U}p zB-r*gsRpf7oP8NRHwFC&l|YF|D?mty;JjoX(G-fr8MMa??QM_6hO zn)ns{%;WtHNN-=k#!!Drpw8Z}`&4XL$w^ZyDzWgsGIIeYZmj^^gFA{&r04@}i(;qV zsa-(>;f5z1S&PMyMlwLo{E@0B{tqz1 zDCl6JQdwG2Sz1w;sc3>aNEte6f^DI8v&m}Lat19Uv4Ld#G_BiOYu~T!y1TV&yS8ha znYC7+2AJigtZcQ7(yc?VyHqSflJkE*=X_=aFV*+A|9Z)MF6VQu&w0*se`MJMGa2GX ze-ixTpJq+UfYyU(vLe>SzdX=p391Z=?yRJBBmh2z2IB1d=0U0x&4(5L8bxhr0hTU5E7 zid6hop2a}ICCUQM{HMp7$fsM{pc8;G5ZVrK#c~J zQtd`pQn#FHdc1lJC3dS1Mq7P+b*C{<|82S{lps6RAKuVS&F1n_-IqY8RuiK$ml13A ze=^L>opW5P4!c!XwABG!THUF3u9cVq?iE$0!({IxD(g;lpv#j^ zU9wLlulgB^7&8$`c9(wo!Lbu@H)RCC0=&_S`3OD}G2}@zn{pa}ZU0^NuDf^;7_d(L zPCvz=hIq7ho6K@sG(7~9;Lq`8n{BP(*sHorKL{6Frxu@UrY4Eji1&f*@;G5?1y~NE z29l06z0a%d%3~V1nI4QZJt)!QP(5lEQ)!`H z>EGWwzS37HB{Q{|ca3*5>V}`teO$=)>Z8BPw=~+x<)Ra^gMB-xF>71!a6Ac*R#b~t z^sBQ?$L~Ku8-;coGkGVJKyee^Z=4Ew86x*C7rufT2Ht5r<`%9LC0Kl59&^_8ggydu zqX?%?-G7yapi7TF$#;k$3{K;%z4dh3aPrB&%)lD%72wcKbKcK5*JlAX;^E z$Xs=vGJaXp%Qf6dEXq)BP3wN}YpbWL1U79;e8)#N{)w@6t6_7RMo&_d?-qj5@F}fO0hFF_N z{poOeht4B^EA(HBHb2syI)34ciI){)mTr*;c^O4n5e*c-f_M7C2@eCMI-#l?r0};5 zdO^!imFhqWffg*xFmlAGMg6$xV}X=3IVPb^v z?X9-eg}Z#SK!{{=bxDbF(GnLOEwNfk(4;nMQ*pPCK#n9$i^Ja6b4G~s7+=0TLPuS% z*eOs?tRpdycM$=`UGb`Zl7exUP$a$26^aBuJa_riyubx^Jm9UzqMos9YgTva+5$hZ zJk7D10yiP;u3L|*debm+w zpbho6;W9iwvOSlc!5+6n?N&z1Xk~8FVD$N`KK??M!(F~Z#=R)LK@%E;H6e3Ai;73- zOb0uyPlvAWm78NLf>;m`!oE>AY1H4xwy{XJ;s3F$%fj@=IY(D;iOx8yE_zxUycJNO z)B2ltz0AAIVv9;lN0!v9ZmS*XXcPx@QE%NNYaD&E=xwoqGdbpr>A}$!-BK(3Wz<5C zNIQU23S^yXIm9dbx&JEm@;Ho*n8qyqwJx%|Q<1=M2`)jj)Vv{ZCS_vHg+^5eZA@_# zO)FGe=XISuT|6PQ=%_%_NjXu{BiJ5a(l6NF$A3z&J=6V=P`Vga zxtBsGJ8VI9D3{blNDmT*5yS2(#x02k_cA`~b*a`O3i7-(-)^B;gcMmt{$bPw1ivx4 zqum=kPgmmSzQOZMrRPP50^v!T*{BErEY?3e4?@mW%oK(ms>VLVEFd9YV&rSgc zd)C4~Y#2=3wXJFLK6!_na&;;zo>l^Dtm3U!X;ov7)^P-wbp|IAV7719EPwZ29-9*8 zXh8l3nasctU#F#DhL}lk1fPf#C+};R* zR1m9p^}_HtipAa5@c#=t!xz|dwdEPek&sGo1`#Vg!uew*6c%ZK2o+b_nK2~U?3&RI z5)AtLk9G{?r_X2yUH11H?I41XKZ%e@Bp;klA28%wKM-tp zF6cQ`-4Z%+1;Z)+kxwSgpUu+eu342ypi!!bGLwz3#!8G3oD0tO=^adu`Y=^5&!muxaI~wi}R}6O``_lV(rdNFfG&Ox=^XWnvSYHGF?vg zwQBQrnjGGTDIzZ*ymNTf zS7SYiU7(yF^=9P7BQC zF~f>Yrx}xcpjzMTT5a9fXtjh2mtbo}j6$l{nI&FWsRwY`52;>0P`@~)`a5FPOQzgV z5tB5IBtERxP=XVX{y^r@#HE!WDLdIQ9C52v{BuT&{A{>53R%cNd)2BxU%w0NHKRskh`){ux4rbw!nSRq{JJ& zPRqmKdG9#7rq}$G?glDlO$*kbvBD$dhW@?;fnmw>R;5GuJbr))ZJwJTBBJhnb#9-k zLiKu53|Pyzec3saQc-Sn!fQOW1XN_gO-5UF7M{int}ax;Z~vjqdYz%^RoH-D8N8oV zAD3CzjIvkgd@Dic2|3F+&O+e4seaW{9pzd}im4iLjAkJ!?iIv7VSJ3IbuXPQPZHK3 zx*|Cop4)!TE}BTSj~#EE!(B1TyqQ|4uFDp$2quB-y$!#WiJUxMeXQkkRUE_JEYH)p znNJvEqLoe&0&=Hb!$r>>Il6|kbE3l*9ssNLk6>-W1y7?0^E|Cmn>pj_)U$VMTD2FK zznqT`8cK|+#w`1TwVgls_}}`2x}O*e@MY4iI(3Kn$WsN7+^@&)^51J+Kgueo^u61Q zBDtB?eM4DHFOBNe``{B6XIt5Uq_V^DtfJxAcBq^*jus4_3RP>j*h2obR#-&hDppbh zVHsAd_Nq=Jd~i&3gnIUqV_9MK@%ogextGIS^+J(o>n$tgp}MYMiIgYNn}xN$*z4(y`ygs5;EiCjip>)z9=26}2a z4qoc7?Mz1)5DHujUS=Kyyur>FVMWSex&<|l&j0F+4ZW%cMv=rOwT|FlC*Z z$`c(E3n9+eubjdv6siN~%8`yy%vv>^e#ntN`-Bv~d%jFQ*sWOR&P*z&&2;_Dd z&;iz*0e$tc8PG*X2lVeZx}w4A(b2_YJzk!N;1*76V*(R`3!;@Q2QyJ≪?hL=5!t zeJVYkKU}7c<#>$x8?&k#x`96fSrQrQ65#t3jZx$@pb*ePdCnh-q89;HKk9Ap{B6<` zeP~Li27l%h_4TR8eK`vIrP!ChwZ9x3`?6naHBQ1>`WPTO6S+nTBlB;yd)I<`1b@Z; zy)kyGQ*-Q(|Fu<`eU>?o?^3$Pl-}CBN=gs6OIO88yL9P!cHJvY>0PFD54-eZvC>Ze zdGy3@m!4}%4|(z_se6B_nSfiR^n8LF3b}D#6#KG4gKek!PY<@8;_nk|OY^6a@7oWF zk{Xz9_&u-sLkRpVaOAYEvi8!5?{g7zNT9t4dKbW`n_%VnG&DCs0O}6A$uGC?R+4u= zZIukt4F{eVLe8_?M6!G#I|>apuP#5(bDHokwAz*T9*I;l9&^=Kol$bXepV;t8oX9$ z!T4FBbydtTQEOZ}zDlqu&9-0A3ZJF&5{%Ga^RG&xBk!OuDbIO45gwDlY! zABmZXJpflh;hFmI__N!ErcFgex1TGb_6+MH`jNm(Vp>JV;R%TM+b`HAJV6^g!80&0 z!8Uk;RU)52hSgKs>+d_pA9S~QF8qNBu~DUC2#Kiu*=Ztva#!3y1rcIPJS?hB%?74U zp>JR8MnhRlV1IXc0>_iY@$MEpaKs`uRA%<%AuvG`hBqdlFObl_VNVm9$RX;DFF%eT zJsP4mg+Io5kwl?#^JktC4kz2wCr=23Jw`@n&BXc942InuYNGL8#8{1 zdB?km4VaSJIIMLdkqM(PCOK1Qrs&eSRIdu`Y>71Xto0ydr3bo9c)<`vhp<9TA__ft z<_?ajCQ*HJSJO<7h+0cT>$Vhkg{WDq34^jHaNWdpgbc?8sX8CSBfA(Kr!j(Mce%)0 zj!sJFgrYk1);!6Y%Z9mnJW*qFyUc@?=gdwNel&%pm_%gSO1dG7p|a_U?82-^%tA=_ zF5p=sdF$)c#it1D2gb{k`_Gr@-Y(0nyJJ#I6{Ld8=e*t0NibEAnpH)LDWn9Gx;#gs zp-T_%@{~vF{Oz5-@3gyZek>)L5kyCE9AG6^H{c*YCY;--GcEf7JNJgNfiIUx@WnKK zm}Yw|L_+R*KtswDJU1k#X{g|IX*sieIT zi=)VV7rRDh_8rlVHIV?UyP{nHEtx$f8oX+|Q}bx*oLIwU+@<+`8*BLBk3gW>S%)aA z#KWCDW8>{}=FAy9`MRvuLk-p6bc-7GdQ#lwLM@=KK3b-82@EpRefPkRn65T=9?^Gw zBJA3+fwl!tO}H*NDxn+677GyEr6p|fs>vNG0EZTF)JkzXpeaiv0*V;i` z-cYg28+xIISqlBNnZIf)uJEWwttM_DeF8s`GbG>&1;wPMFl;2+b_OK?*whj@%w{fuVE?V~0#S`9UWg?*ZE-C@NNDQULDw)yP zJsNKM5Clb!);w1{c7I12Pe1-cE$6is&am>lmc(;*>Hvyjvh7?Vk<1AUOZ&;K6R4t_ zwRkqqBB9cj>^66Kl?>l4L?Ji7XTG571<6)P#5?!W$9Y2bH;8=`G)g}%>5bFdx;Q%S zrT1o92Vi&+=ySX?oQy~xkE2HEq$Az2Sg9tDP(9I)@Kz;+|1_)80iCMW4?0t{0f53c znd6vFLg-3}Vr#p5#b)G_oD9KjIskr-)4k!%5b>iWK;y>nPaj|i-cWIKD6n--t*4Hv zu78(tEG^@C_@&wWMV*Jm?oufj^6b|qsu(K$MLeHNn?!$F!BPbi3D%nuEOa_d)a-*2 zHM_Lq#8I;k5)dI8HT#<_Sju5EC+7pz-k_@`(>!is$3)H6mQ+khgm%W5$l2t`4GjP? z>;UFgLA^G$9Zaxf4atHJ;-eUY0Mw-|4QOK=hpOAysevE2Ry+N7Si~{eS?gI34d+ms zE*$b%(BLO*ZB z0FIzzD5B_^*CuI_C@+=n7H^KF^EUF+f%@oa5s_&jQbm1g&rd7T#ypG86ros4xS$?5 zMy%XX=~4WATj^NMU#dD3 zxU@YE7uoE+?uz^LA*4^97(FBU#Ug8BGy|KvLJJ*63vH>Lqeld;438V0^-cv+84GUr z&0tk3s}jB^2XqSkKhElXbCbo&p`>W;hXU<~b$AO`rwDTgrZs;5Kz93vP2{elL^& zZ7T5>#Ih-EYm^|VEvoGa?gB01nE7iqhjBKr@hC(?xjZwP?4t~la7hsU4#U*IX2zG0 ztGG`fQKIfQ3Ttz3ce#YMDM18+^K5nSlMZb+ilgcjb#UY%#1n{pC8B=d0ue!;C++M| z-^@oH4Kdx9ThUfu!|su3Oq6>`fp%Xr7J1^h?yhLyz|ha0xkgvVv+}>ov0`|nwo&f# zopPqMjl}ARi)m`@SO1WYStV)XSt*;J9)c1paH*>Oh{u}g!i2_b;V@G%OIL?Snk86D zQSJG6%^I;UCK`==n`a^+kn@5&_kbMag2$xCF^OATdY%x2_(>_(9RV&B1M}4*(6dl& zn+c8)gTX*XI1d%^g?aW^{G;j1;pL+c@H`VOL)_PSX(uBeqLGq^H3WcZKE7)1em$4f z0{+;y%tAaU13cdz)L(dBs8)_RWD;BokEnH^+tqb*w9T0Cm-m^%CK?amvMn9@L+lBD zY$e*m%E!E=#C5{4yEi1BER&yfw@_V^p#?Y0_gSqur^g}B&OvJq7Dy(-Su*XnkI)u+ z-DC7&jAAtScS=;jC|FnwxJ75!3=eF~cgKH$k-t6^VxA9&7`C=1I_nk#Tc64N>{M>u zk_k*{naIiXp&NkPm?T6?2eEJdT5LXfK|VPyy7E)@+sAoZq{jRkDI{c;Q^5NJ`Cx~# zuG3Z@{t~Vi>+5)lbFP9{Y9o@K=ooh}17e#=AOmyKRqYTV_hd@FeZO9o5msJ)a^AIp z8RFep=5PciQxY#4;a9T)r?4ezJrMFD8XT;0iQ}pEe3lE;`Y(vi9Y+H68)OBj_7qHa z#nQG4w^~Go6#I~-PPxw5J#3MFdpdN8n5&)~F0fzzXP$McsYp#fI#T~CySjT~)h&yD ze`KZpUdKPAiCJuQTBGM`JwgnKaCi9)26D%nSA%%(`lCA56vgf zpRTP{`r6HZCAv2qGPFEN3Xq|oW_KIX97Zg{oWxQ2{`}=wV+N}}mFYb*JgFWDcwfm^ zjcNDQ`Bt@{tH21B-#@faZ61rj2aGlE_<8~_13WihG1@U}RKiU6VYg1tU2SHebYER7PKL+`X0~3o<=r@FC`-c+gpK zv#cF6iyP*1Wz!>?8o4s~SyJ!_+sSty;ytq!>Llw@ltPGPyjWFJf^lZGB8WlY;#nI( zVMyJ!%-Tr1=0Zq3{e<0QE;xwvMOGEhiI?#bRmi_3{QEioR`Kr{{{4x6@*H{wy;HDh zps;M|7-R$=bmc5?*NR5hQJW_XI2y08Y7ydu=rtWZo9)(`zLL zt6Y*W?aX{ha*zT!Z-~~D#NmIJ0#fW4$pMB=9@oqpYNa6uM%Y`5@X77aG{~#c1jGu+x|L?)NBXar5+p=`hQ$9 z0{A?cgy82U;(uBfp2>bmwEynziksv-`>*RcKDxi%$jQzunOR|ZuM)!WBUzFOu-t73 zKvd>?oX29r0zK%ikTXn!XpN`YA-Rk^N^%+1Ta(dl+M1PO7NmZzSVU+1D^Kv<+%in$ z$qsd2MtwtdYkK%zNZLEFBr$eKS;4lW_Q3{A*>Kj9f4qXR|- zMtnaVu*oNa@Xq-k0D;Ee1*@39IQLQ!QbSi^A3!QWe|HfKR0QSO4)yvZq&<=uT0{am ze}pfZ9m-0uNs+1U3h`pHrXl2%{7E(v3AV?TxDmQdnTo@hs(CFvuCX`PKm`6OXy)-$ zl~ueqVoh%gev{*VxP|^nvB{qj=3;sq4pN&3S4+~Qar*Up_Up`JUXzHgJ9y1xM5^C_ zr0)Z%Q7~0A8BX$@MiK03ej$!}O1k5SdcFpa@_p`#)l|w5Z}c!k@_j*HooJL%f@>UR zDkmYhY?`5MOu*Yk2?5z1&aF4u9j7S&9!&>ldr|@yMo;oB($Br{P{G6OH>?hHRQk#M zUcRs48h)Y&T9o-U@B)-t`L68z6n|E5gu{P{TwQ2&=PW(fmgBTtBxLVkA$#3I_Vx-S zs{_|UMb;r3+D5^Fc0rv!a=|H6RJZB-4NXi`T47(asvy_RrGe|{Ux9B(_y25d5kmL) z61)#KrCZa%n@Ha8?Z4zm>IDwRf~%~t14rwtq1H7SOWO72g?DTd>i5p7A1Bn^S#xVb zo&CIbIG5<~ASF*UrVq%1(0E$iTY2D5ZhR7MH-E=03vz<0`OfM8u#}y9>b(0D% zyDa*VCK68vhW6$Q2jx$XI{6iJWasvWf-UF>-q+tjZKMFH@*Mej-9nywM% zfn{$EA-D&-JjaZeEr#Uk#do%be=W}n)z7BM5aEmbJ(f-AYs)e0%GH^$Q6*q|_`wm- zo|I!M7L+aS=kOawL7=8=abJi3=0f$-5EvXohx^g4Ft1y9Z^9`#1tUt#PjGaVY@vaEJe=dIK3Li-xzmI@_lW zLC8l6v1l^Go;B7E|8>5zlcfOOHqEc21Men&j>0qE z{MGw9`x9TPLawnz6g7Tw#~5TWP6>SCIQTxZm{Kbk9Q?UPz5Wb-1sfn4eFLL)uA)xX zf5Tj-D48d{eTFPVviYRJ5;2Eo6YSY+xao?S+=dIb+8GI_c*CBRHJ&|k_Cr_6*}qj4 zyxf;BRzlJzg%TQW;iQ_26YUYc!VA{3T3xIKCgMiPk!H zvp9;9GR>A0dTYqPsMek?%(x5OvZ6}zoK<=bl=PBJZz*S=6}QZD0H}eEXAEZ}$vV?F zi=&mf(^KhHe|}9S5YLi^Mf9w!l)hJp@qp!diylIb{Qd7jj=0N3g~Ai67^O?CsDdx? z&h4RHS4ZTY7U!GUrQ$*=jwuS% zCY~9IB0c-nJKG(OO3$ZE4F>EPHJ$@;l4lE9&;e#>6Qji{NIgd(N(?G1O?L#&!umK| zu)->vm&F{FRWd0d&kFV7&6-QJa}t!59$*$l>M25)Kkz%;^Qr%4>8V3{TBjP8X&2tf zG@(YHafqnmaMYO0tnttGEfiA+f$g+cWd@M~&g~`yRmHynZf%XWh%2B4-=74p`Y|^G z$gRJTp{_<4v3Bo2Aq3xoNccNVlL1yG4A5tI!w&9!L!3(q932Zy$M9}ySNwwA<;F6(bFaeRlbfwWW1C^v{v~a$H8Y2OvD6Sy#1}qqY zcG&x&)(&6GPq1xKz`Pw0Z0ot87jOOM?L2-gH(@#RM_1El_tI8S1h4DN>vDN5ZjJ2M z;|^G%rBk#$AGFBbC)OK?_xKK_nSgst1Db`KgS zFj~Hap2}EjUAs|JN}7%|-^1VoUuq&st^6N}HcpWI7^_yxM^Ez!iU{ zv{6zZ_<2XeZ=~`GX~DLL|88q>iuJ%!Y}`&T*_}H26Fxa%M+o zsXI6zIP1he8Nw?fc)GCjBYE&1^ByZB56WTOV-FauxT1<;{={TXZ}*1Hwp8%6<9a6K z38U>@_RXE{^8aBfM2WvbqQCSLf!lMwc+KaH~`TnU@Q_r_(t6CV0JS=1206B=j- z*^?!8G8%_BF)0!5a13i@m3GWoF6soEQ*hr4Df&Q3U*9+|ov&;f;J^1Nts0e(n(C{M za^SUy&%20Er%OD|v7za%?CEWRzs3eCBmYC^k)x(}JSg4)jzq9jwXD@**LSbai6K#H zUVeX6+r&c1gMW8!s_emD4tMz+nvhppeVxjRa~4PQy6t0h0u^Fqd74^1%?U8m2)@xH zd72uLcsHpB|1<{YlK;~M_F(SqzSN(vWDEJD691SU zH)r_^?~A>_cmFpC6w&p+Im>^;cT?U&hQ+Vc@dy5G<=e)%YTUuXHrs<--2Yd~8<{eaHvs!v25x?DG@_l$8QXIEx|FCwnri}XKB4=k&;~T=Gs1wv~dW; zyY*pI2#z#Sox58E;KoPC{Zd|fkr8RgFnsAOkio{Q3qb%zWz*lvJTVW>c~os9ufE43 zFO%g#3baiL46_PTtj#oz@PNQBZO%Xjnd#H!-s#J6f%*6H2MK{rz8kqr-Md=zASdPg z-5ctH?V|#H&JzrStBT7(RM#CU`w|2O&En~N6Iq4W9)h*y_BWvDuDajO^FwC3;Dae~ zfd{B!(BT|Hp%5VHCw$hJC;AQltz84d!J|+0?fLMjICXfwc5fTc*Nz40zJpLNzLgG! zqo*z^Tn5de8f)l{UrEGY=~R#Z$_x&y^a{EuyPG;0%IU*pVGwMBYyZWTvELbR6#8OH zC+jlN?^v^3$BBRhGAxPLeX@mlAG4~hDb)?Vu;p}D{6nDmzp19D7%h+cud0xqKnWDG z&&>p`Tn+5WK*|=wrDHiG%KpWoBj`#>{eVpZHvG zl}H`xjdzX+BT{iAn5)p54|Aq<-6s>;#uSa5iiK+U6fLZg@5xUF=YIQzQEhBRcODR5 z_{2M@vv#XDfOzS98WhkWC&x8*BSfP|^nce62Eyyq&F|+pmK7(Tbbr{VdQl)?&BWUE zm`T%n8kyiW2J z<@+#+Wc3ydfF1?L~oH3y+y749VfaduU%qUIg>_pfyAJv#o4&+ zkf#l?GMqq*KS}LgGsXcU9;aNt=i<58$$GSNTxofaP22|vlF-h+&KNMt8Ss`ZCd>0R zOu@66dVPMw`g{lFT{gTZ(7$YPPerf8KfvmI>S6 z5s3r_`#ng>*iojR9Zf*TJ4P0)YMN=wTv-omHxkX@{V9&XIaa)Njl@2)#yZ7}Z>%dc zU4@-UCb41?FlkJ;u5npo@u!>`c2;}IE3MQYs)S4Cuy&`$xqAzNn41c4<)j*dzsu^| z@HwNiJS!D0*2uHSZ;EBtTqkV1j=H>Ot`m6xZoRO!-cVp2=5YfV6Y?ALvx^(1bIV+jp36Wds(eoRoa#NX9WX4oi9ry2zIuLatF|%ds}j zO(g$T&FL`Mo5UEKK47o62Ai)cX-i!Y+DDiK{Xb4Xb6slKujM$xS9;SF;#yOSlosy% zOu7TEX{}_Ar26$%!NyvtL!@I~b;&Iu(x2 zB<%a&>`{)H;Kww+jret!k?Y&st~D`JL;z%u%8%@_pLN|3j3?MMNRyaLY94^}EW$eP z7~4FiQJZF#Reda;7ZMpFaHF=~*JkH;$YbogHLz!Unjr!{?aS8J;oCRfiHcqWP%LeQ z2$sO*Q!h9st66CZCSQnJzAv9yGDcn<>fD+`_zW;>DJq>y!Ul{e?Z6i|n!n7`!K5UK zRwJeHw65wklevsoiUlcimMnC=0dc~)-?;TS_MU|4qHLbCN1s;9zzg3R2(flpi}#ld1vd30=a1c$M?@`iPa7o#%{Y zxs2M^+2JF$t543;6Al+ZDmk&Si%xjtJ8kR^%{LSN>F@DxGZX#+m;c3t*ZzEjjJhiALGbi`;-3L!2{$JZs{Q;The@nc{lW6m`Jcz)s4RzX56?(Z#w zyEn~uD7K|i@3O6G3|RTb!g#}ZOd9G{kD|vo9=hhb417(C0hoNEZu$^`Ea^mmMKzsk z`Tgh-R+e~^GLC7fVmK{Qa_vLS<6qG~&I-viQ+|P#wZmC0{D0VTYkvp?Q0VOA`BA+i z>06^aYa1I_uDa}jf-WFH+*@b zDLZCEN_kanb%l?gofCtPfliZr_R+Ir@G<|d$HK=nwfJmKSmVWO8x2p?xrwUbgcGqs z|5{K9o&Mad7ai?{P75=f2uV!zYM^p~)#( z`n~u0j`>p>=6SaED_GisQtexJg(M3LmbN+E6_U707DM!PWu+LGSCC7@ zz@|>ueMGNW4Y4BCm^(GSGijQ7<_)bgr-{>{gBE;_T`+=jw2s@fi4~cD5u8s`4{q&T zZ1zRy?x*WwZ$^t%7PRU8u;)rGHcHnXZMD^hIcG&9kL7Csm0z2D_wrt$mANJqx>Me?8eSsn+!Cd?tcc_2xFkG-l-My58LLKZO1ulD< zll&UKl~+@FRmO}2PSvKpx8U<@!vr6|qDU`la0;mL96`BwRK>`sE6b5PVVwOSe4q=< zZtiM4?l|$?cVou8(9D9YP!%cG>(uWtu!xilp@Wq~;yMkJ1}b^Hy0W0TaZ-`GdP~ge zm$Za9Nfi#X-o(=Oyf{ea-R&@Evb<*mKkW#PboftYbo~Y}UwEJ;(bHwkjXn9fytOe= z?gB@|E2*Gu*>pE;Xn-m!{gy?(N0xn?|CDkf)JULkv7^U&R$q1Seu@BrSUl_8j5$)e z)m<@Me)-~gfMR%n)F*4W@a3EehLkvSdt^e}e+7=y@eqIVj+ymC6+Dsowo80K37PVb zc@CF7<3F5!lZFuSIb}(;j`;jLKGYJ$Y>@3VF`0EO!N%I{u)NNVIW##(TouP*PZ@C> z2_+{tho<3EgxjRr^xWsRm}Co%iaV#NKOTMH8`GtqQ|Lt$Xx`W@s9NG1?ocmtExpT? z-ieQ;ffcVBXm@*%ypUOS`5qHbl1z$tRlNPShrHdcf-MYcr+R>&C>VKK$~iNCj{-xM z;#d4Kl@-4bg~oO@&6K~EAKwwt0>|d_*8eEy9k=U}~)eGuUzIzFPrd zZ1JkgPg2+1c-xf-M%}JYzEbhKWZCM~GU}Zg}jSp?xiU;rZ-@|2@3 zj|phz5nX1vRm0q*VfGR#T@ebDg#s&y2Ze}V_OwZYo&R~%A7HZ6s*#eON)Z~Y%6211 zn;=5h3F2Xe1}$7Mk1gv}Fa70X)c=^fsOKgLAE%R4iH7Z$yf7)NvUO2+#f2a@SbF3c z*`SoIE~NhMrN5>Bcs{2dE^+wIN6ACT1fqOt52m&FJFk-6v{wD>Apy&Bpe9~X08fsH`V#_gh&&wDC)d|Iwb>4o%-XB z_alv~<*QGg-6yX61g63tezsAi=@!0eH!Vn1AQQLI@c*7=7}@FV!xVZTXFZrJPhBW8=&5slf3spP zkEF>;h%UsE!Q%bX*x&d&lpMz`+LN5^QPFnI8l9%wJqQTZdL*)yqgMVnf}Vp;^=-nw zNVwuI86PLd$Gd1@c&Kz$cIiqo+A*r-$B|CD6%$%PeTM_*f^@StU-VOVsNw9dsj{ftZ^biRX)SD^l0>-T_S(<~P;W8!Gv#*U65aH1z0>UhP!} z4hU*yBd-m4)-Lm`(LvFk4Fxt@fwH-YI%wI`kk$xYHwhw8FT5$}bgjyM5L+J&^MSIH zsdMz2>@f1Nec@4#WyBv`?t2MLrSZvXFS1bavYbU9Xxb`RZCW?2(kSmm5*+W|u*C#v zL-e{yzE?x&28c*{a<<*0XG_6zTBTrl9`T(mXQfG&?TIzi`ss-VYnl@mRB4dGO3XR= zUe#OrF2gIdpODii-<$f!=;xsvXbm9BUA`(a+VtY97XZk3gqM=aQ=uKAxYBjd#W zw)m025u9Pw_XelLaLq9o>~xoyfiXzPm`DUeTiqB|yP0>x$tC zPsCwZoahzBrc>umY3g)e&|!i=F8tb@Ky#Mg-csUd{<_2=zZdcEGX8ZUe}oE)8a`0nTEWiP2u>QoD$C#i6+mZv*!;_l;Ry5lat=vI`sS2uijF98P)Avt}cnMy& z*2)aucf5^)%x95WPqt4P(L$G4ZDE*&SyzHJ<|Ozo)~f%FU|YVs{8CV(m^@m=>oAp{ zzTOJ@Q3G4nJpK-@CM%@%STlf?y=#7QaMaHnuf4+qQGy)AVTAalp+KFAn{*wzjo`wx)O+JC7fBRR2W?b$ zzQKC-K*+ICmDR{nZd9)OSxRw*NWJ$G4rc*|i+=5sM;sKT6KKuKbx zPX->*Wcz&f%QNwFaTTdm$$DPG1Qd|yLy@UYI_yj3Yaz3%yy^_y=PIqA636noN)LK9 z&$hWeDm`Cv{Gw873KiqV-6kKYCc4+KiMg;!*S9Vmg-t`5yJ9`}a{jKB=f&%&*SDJ) z5-L^#QE&XaObcd@5HOuuF!fVCxl#12NF(x{`uy7CXGW{t1!*b0TjGcgUFq!}{`DJr$RKrIk-2Hq>14ZPd>wd=IJA|_3$Vw5J_lgJ-{<9=P_ z@ts0J>2tI&>^%_t#JJUYFXiGsdazrs-*3~>d|r*79p z2L!9c+rYgvpH^`)5bChs1*6G~iBQ24Q2GM`-SRg3Yj^oM(zosE4JyUIe;+RA#KPdj z8=NG$Oht*{E-t0fkJ%E^j?w781WfvTDmv@tM zyULlpIq(G>gRrtRcD}n@sJUQU-@ptex!`&s(ftLQ4_)h<2zP*cs#iU}9QqtvraG0p z#o*7Mmk4}-rq}w$05akNHZNA_v(2W^k15o6mtE{eIXNkIHN^x2Pl?q)+5%}L(|$2r zz8a=kMk8w1?j;id9_ zUg^(MPe(qB-5`>tB2_tSUxd@R3IFna5dA31nY`bE2*kqg@Nk4idtaBV54aU=%w-1L zA+aRMvJQ zd!&(dp<*F5#_>!w`e~!INz0fbqW}=V-_tRUd150-I0=mE#W>AoVD)*G0W*b(2S`V> ziyx{(sH*YHWP??lB6GY$o!8E0)Cxf{^J<9q_X;+|;rzy*J4VI%Z#(W(*D6BIGQ>jN z^y8o1 z&8m5{H#*eFHdLIxwy)8{*ZFPJxbN;un(xinC&L3#YdUf?>|8QwXqn7lcik~#pz`Xz zbTp{sKjt^;hDJmbjb@uo0xN;!&-Th%HFK&UJeGhSo`cIg?V_jo2jU7~uRc_)aO)5# zQ!l?R(6C?S&c|q<#is4;Me6HH?eo7wU6U<>LEAICYw#5#Z7S?!e0LJZp<}TJSIi-{G;5+PF3dx!~bu_xR1$E+BaVIT^Ft0v|D! zK64lPGW)ai%eO`CQNY-Cd+1)p>wd2t#KX@QfFx?y3zvF1k5g*Yrk;GP1Qb+q*gw@hsP zAWuK(C@kW@!v$0|_5)`%OY{RnKS=8_KE9 z-HCYLZ`%6_?~A`xx^TbZFqS^W+8RpdQ+!MQ#AhZd+OEfl*cdesjl8IZ1_h6({~4L? z$gcIDTc~EooixINyW%<-q-RyFr<{(0lb46XS~NiXZcYattPFdWi-}LIr;GxQS}ij$ zSHeA+EBR!|1uNqa5vbh4^tiIC^6hMoy0}$PCXT-G^Y5M;@2eX6RGeuiRMlWp*~-cdA4xAdO2G6 z4;|oGmV@faUGcii&A5!#92e2?B+`xOvkjy5bIoXN7Dg-7%$w}G`8|T8mN{%#m_H_0O??br29m+>Y6sdJ&UO$%Sa;KR;^MLOQ)n8^`XDhHe zhX`Z5OPV;!y5NI!!9pQVndKQ2!U9f5kPQ`=L$$yMi+NZmu(}A$e}%ENh~dai!SPP_ zEw~^mRn55{QD`SF11Hte)RXv`?lvB(#?N$2-%$=DtK*zX_dO7+F?|s=Mz?+t$%wn+ zVa5RBO!t+=O0Dc%O7bUrnthkMAaYUk6>q|ueW>~fC4nXc9s%2FLSTgu0^}Ha+zZmuU}T00f)9;Bi&HJ8dB&HMj0&~ znH4?j%ZC3XFu<$+^R`Z~$u2uZkZKN2-D{+jlx;Kniy@!Ug-2=|hAiaau9gNDks=6JvY-=bi;-&DYuv8Ijca^wtz(uNDrLtQDeQ(V!UgPgo zMBt3y2;R|Ba7%w95y|&RJlcXy)FXnvcwP^tV)(tWPA$myRI*jd3e~?iU%(LoZ~vBH zxg+348_Pl9G>G$(Ott?U2B|WdTSY&>gq~_9bZ|A3sd>mYq_&=?VI(z-Al%q^3388$ zeXnJ*sP6I2Vb4bFx7K6lT(GGyl1TtNZEd$1MaS`=VE{u?6A26qdmf1d`g_%7zt`@}4K)z-SWF|GEh)xYx<|Kfx!pL0SWt^!7~^1H zy>c=AoA&ahx_fUD#+Hsz3I4xmbck0L5!jJjyE_n^1=3WyX@^D%)my(ajod^da~$McZG-U<*+0c;!<1@$zNIbz>0S z5ZNq&`9zogLIYi*-M^=Obd*Z zX{a zM8a;oU_Zm#o9tAo#z|_cOm3JSx&LgUxbV8mWeXreWxDANGA?!IPZ6i?lS4EJedm?MVjHOLZ(aib&s2QHd!Vg%B(Rnbr>S{^FLgA0#6!J| zW50r~o5D%!=Czs#~hsA!sR2y3dr@#ZoCrXk-NVA@L%n#4l&_Fn*c(xMOv5&vP^ z6MtIcZA=0`=Bc{6k1$;81ejX1fmhJ#p4&89wTjDWR}C8@Vh?x4*9>;J=LL7g7kVm8lF>tYx}<)S z6eb)N`b>=t@52a&eShNB0=bdMjPy%F$pzal@}H;GTX(hA3my?*krM^aYPBs_BIeC+ z`_e`*_rT_!m)#Nx=ck(JCx>zYbH{@SXzJ9eDFSICpeeHe*p_fEaEA4Ki{4p(&&ZKA zXTn&CyF}g+0FL*fQUOsO2GRoq_1Yx_@<-J6TbT$w!cd}^ZxfG4(i}apUlT8z zGrCB#ZTVlPd`8m`A!R8RG?Wm#&mE{p(P1)ybKZXjqtJiLMeKIHORdwUXls z`Sc8zwFL&?fXJs`vCe4RU3JS)7)UZyydE8e+WKcvxvX;pPW!bOkNQS%+W0nRz`V{l59W23-~)tO{u#m2 zO%4L<6|Y&cDq#ucLy9X8e(6~U_1nXdbQ2T>snP%lf^&^@UccnGn23cN!vag=_}`!8E0V{3^yBs~qK^mr3hk~9pnep2)?)g12bv|l=31_}?>SDdX^l4! zALiTU2qwB!s*(#vCXz=!X~SM}rqegW)TEUlcy45LspJVNG1g{}=qm}5utSw`O%9$- zg=*NZY{a%k9iA=LIU+97wh}w`nthyVBA*7^*doFi>n-vhF6e?pM(HxqT!z(F#~`2I(IIWH}nh)aDgn zfHtSUH|5le`lg$^;&TcTAWg04%|Tj>u>%`;2uByobM{Rrz>%?~hCQ3SDr@;jvBaM^ zB$BC?-ly{_>S!CC=3?^)(YX-6{Gt>Ttf7KR6lx^lbmH_x0P(uUFZ6W+Xi0EW0-2(6 ziO%4^nUl9);6|^yv+q6|PfsR+7H4p!S~wHhu37rTqTD$!2f?H@Tz6{H0B#Dl`nq*D zyCze>Q03qEB^htLs_d!Q6nSPbMFky~R~hV^9_uOmlSsOoARD!nC}(_X5s9fJo9F6< zI-6&@Z%5B4D>UQwPK=9{mrk_bMd^}v1-rlMmXS!fx2x068STLDeIK%z-~s27Ew3O5 zn5Gry2femr`+QVM$VgC$f*F^2nkvPY;h&XcR`)28Z115QQcS|u*Q;;-AS5XYxn1ht z`jXI`a`P!S@;i4XLo0^mZ39+QZFefpyN|F}GjSp^t;s_RLxE-pC9fQ51cy;iqh>f+ z4`@GBiYrCE>P6k!obx=KCv3B~PRur!R&IWB?zMrGL%AmKXu{=HTh_&OmH&yCAguNT zXLj}cvwWm4z!Z&h!MAZmbTWA-$2o6d?t5GWBDr4cLgeW5z^ zvV8nAKBk~-fgOe&RIi!RokWn74>qMpi<|XFH<}jh)aw#Ud6|5JJYByY9qo{W7q&a} zBzXepp^#o3>P9Kepb9!>66KMwVfoHj-(;qxf4BsaZZ$63lgco1o!Oo==mMtA$$`2fj+PPPIz+TIeP{%@~n}rgs>hM|}(-%ok#<1=iMvHjI(BHS4$TiVt}~ z+3YU^pYXil4Y5hmaVZ57UF>_STKm3*-O{KVIuVp>~i<^D3rtQRL?HGIQ3fLe^9>X)h@Ls?h^r;BrC5!hr}>UsRiJh zZGdlK`lg>`oLFtl1?*{?6!N)@NJ2`UKe|97AQQ~IT(jpjKj6%LyA=!%yXjM?}R#{?dkJ| zBM}ChAvs)u9*87e#s~z#T`Kk^(!f74D6~t;@E}uBT#PsAW;IM2!IdhhLv1nyw%&9 z+~r}eJVfT~n(F0nRFB;wr(s~4)^zqkTl@SwNCv#w? z2pcW8BUs%LnwSzw!~{Q%K^kQzjS0_z?p!1+>d$X~0}=nNSV7$lZSGtCcLKcR)Y&ez zCp?cde5P8qv{LefjZKr7jMFdMk+b;YJh$3PsSS^+&Hm7z5o|x=zd6|65$FaRHU1DN zJYnvx4fhV& z9eHV1597s+8n0LAL7cUy+;fCJZ?L8}hYC}(3sM5zvOO+;AD^fkOsDIwrqk0~=yEi^ zY-dTa2EVtMnRpiN{K6>y%};xcu{m0+(d+DhR!g?>ueGW}J(#5fIGHn_;@pa7MUkq% z7aDQq46{_oYSWH2E7wZs1mmER=6eMG*qG%mzXNP0FU1=~V)#Gt1!ppjltkyJ?Gr1I zF~T5B3b|n36`*xmf5-4*U+|N~!Sy1A8u7#ppmKVTR-auxS zF81>Y_#1LVd(nR&R2cnSfBmO4Tng;Ufj*JU;vv@!*l9l@^DulSSbZ1spyr}GGHW4!0nm0rkq3|DEI4Cs zd}M)>(7o#MccEhN@~=v$8Qd%qgDq;0g@$B-YjCqH?NRdTEg=s29@;F&Y~Uom&V8k> zPn!iVVtw^yb-T_`o5&+;Yzj)zPPG|&19gLXT8WQ3hv%v2jiW*qSD>3lXrh#~wXzz2 ze!sp{dqtH*qkQ@=vcq<^rAuzYvn4m->HbvhQNHhMEvMlu=*CEkw`c`ur};t`uOo(A ziOD$YI&lk!-eiJaSe71_o#&cK%-7BXqJQSF(#8}gQCa{L5~|23Ek=e!Am0V{;U$bfj}oy&|BK-9m(d&kh)AQCDlm#bT9kqWUnEBr;$8 zf*a7J#JUnIaq!Id*-;UAM2p5ut%__-rp_!;K0V;TeaYOna@I%Z&!9~LOr2V zj-7Gl1ODI&kpUISdLHtm=)H2BU9CjX5!@g`V*I-g)tzbV!tr^;YeB3Z~mv)lg` zi4b7<>$DtQ2n}}Fc@=+ET(n3!MS@#L$@$GbggMoS-yq0B>z@86mD9R6VAkahw%-lI zD^uGk26~j6=!)&%dP^l^EoIw;rHVP2i$4JuEVnS;iQ?}{bdEqeGDM^SFl2(v4_!9` z=x`NpPLuc>QveiEJacp~6`LbWckvL({5^XBr1wcSXOynk1zo_wdau)Zzxtbm*3EIG1;-43Qp%xf zVy@r;;5#pg@zt;X-#DK`#uxoCkV-!X`Oc5Movq*cM)Q@~o(|cbrg(bwXNd^r$UDnN zr$V1$A8<hr)Qo;2-}jGFKVLjT>8dK$Td1GdC+~Ls zB-($We+pgJW}TYljAJ9E8sI6^hx?};*5;YAKV-U~x@>!~Jm(r0CUB2d(RUG5sxQ6~ zu{not9szX7go5-^Cl?PmtznJ3jy=_n)^}1ci_$vh1(IjkW@2oGASPto8yhlxpDy>< zA7DnN?@yO|z#)3yU+zVutKYL$NOKolf*+xO$O1UL4ES_MwMxXsO>^yb))uOowNZ?d z^jE&WUJf{EV)TJZh|!OV(&Ls7=X?2gwf%b?ztQ=%t{%^<^l@*93#wFUu*VctxnGlL z8i5M@5Db;zET=^24(3*{DY!?>zEWE^Cm=*Q#_UUu`N&I((E|-@((rtM;&NAri`Z}v z#+46pF*i+JUX4V#jx&xv^smiz#_?Zmu8WtB&^;-kds1uTR^Il@I5>lC8g&bXCf2b8 z`xctWv;bn~7)f1|z~(!)8yLvZ6HXTRLWFmSN1N3MAM!aQN%(tu)_K(zTl%3*U+3`u z$eJ(&qv3A#^m;D3!49Neh+ETovCFb-0iah+oY%r(fO)I=y8lDz2>V*p!JnXTELf** zycJb>vo@teWTLsQx=^wN*?#OQNz}WMs8d}d?}PQ`8xR_GYT%ASHS#|kW6d%rt^Uc@ zqS>m&!?`@hV7SS z4??6>ECYtV8<#_eK#d3~@=_|Kh^OP^#U(kh;U4Zv(y>O8we=7?5=wy2$bW9Gj9OG7MX^@{4hPesabp2N|RFxuf* z;c%D#k(u~ERP;s9XhrT$6}jU4b0n73BX+0Mch9J|XOLr`#(V(6GDJZ2OkH9nW9<;W1ybs}2? zf9bvy(Ew>8x$K)L)gy@G+SmGnXEg5xqGf;ZJ@HAq5|mDK$m-pxOiXqH8#kRGU3Sde zW7(-F4*|kFh8~nRBp6b6^@x$7f?_+=B3*BAYkv^Z3F&s>Nlsj!&}NgadObQ%O4;1aYWP4U7o(a;&byfdV1*jpqZc|J9bd9MB-F; ziiY4AS&>zRkYr`-T)IxqCC?OFNMhE*>T7N8l9D@mhnmPgH1^J<cju{_!hMB||xX5~IeqMe3 zxluE<#YlSLZ^%ABITFh4g5n=}Ctg*Jmvqx6ga2hcC>mvVaq>xoN}u%JIj|BXWz zkPF8ch;Px;x_071lJENmaxHb^kSUNdasEl{bmcxz8_$e|kvRC_H=I%@r->#> z;HGeH9qF7(dW3UD#wX$-*d17SmqQL8`IY_&y>{}7Y1&Yxrps1PW{ zLO$f5Q z=oY2m?4Yg&eg&UoKbQt0nF4`l!u!sf-WjB>eGT)H&WOYYNP#bpYYxP!uwo$Um@qEi zf2DW`Tn=f3t3Z6og~9edh@-1_5yz+mbH#JsIfl0p)}{*owM{YR*{r{zhf7n8{E6Jc zxWh>X!1G&^a{S$G=eR(6YqbkuV3bbosWxlO3M)OV@y(+^O@AT$RN$ZZ4GHTx!4v|={cc3Qw3q0##@xCetvf<87Z{!?DH z+t}c;-pLx~JH2}1V_S$AT@)d+&3k)Zqd)X#Nz-`t`B8t0veHcHa;PF-i*jN9iqk_C zIr=7z$;t>-jOS*Vr$3Z#rOu00SutF{9vXTzor};@8S=Mc6o0WAo{(`!2Y>hXFDo5{ zw^iAzl1q!EL1m=_9W@n&+>o!vT;Qj0t-Rzv5s!DHXEv>qenQhmIfQIa{oX_L?&~G7 zU;eS72bR}TlR0U!s)p;1zAO_lSHdl^I;o+G{*;(vh4tXJhFs92$J6R^^k9ClT+Ksj zWSL5L&Xo{Hp3nTG7!<@!E-2HM7wx+whn)~Rq_mEX^mkTRURyxGtAI(gJE7JIqm>e(4R7{KZ z-K+M`NM_Gj8WuwAPuuM0gZ0MLB@^fQA>oRl^6_@BI_sxU-cp;af3&v9ivk>x7o`yV z3885h41v^sN`sd!NvfhJVf4T+cXMKhBrp$=SD_4G$XYXiD?|pSdr?cjI|XYgINFow zbd%5LOR>L|b#PZKl`n;ZbrLR$YxEaxW)Y+zGg#r{k?yjriWzEYrX(j2q!==7g^AUU_|T==zk< z^)PO?7XLD?CO0jvGPiF{Zojz7>s`XeS$gYqVdkb8IEuU|z#4K%aHep@Cg~4gb?pX5 zs_$NwX|Z0c;>DVTP+0aMU>-7FL3$|Ra0f3#+89$jqdYhbREBi5YHRfu5|S;f0cf8; z1LkTVWy~jDFG)RzD8~Y#{hB&-x!|kP3qVPtY!MaoMVZ1tO16d}ce#hBMs(mG1(F^f zt~i(X^j*5%t!6F572<{@Ps~VJ_HKD@*52q*`P-tQ!ElfGHHX~g zuX8s?>?i6w%-o&Wy+ii8AmtqGT5a;u75v}68g;7wjIvkdSRi|%{?w~h9F%IsKcYWV zO;%{Sf!hf==jJC{XJOB4&?<3w>8sv#f-#e21o}uK#O_JG5_L$&aQ=Z{JBdAR7l_l~ zZSyGG{5e|sqZKk&Oi^Xh ztRARFtX7y~-%_Ow!Oc=JZ8Ni*{b#~Q?7;uZ3d<^CK8lZ43I+!&svsgp`>w%IPoqLP zUj(^CyqLdrGe}VzoBlY6EnYkp5IfW@T!zC^QmJ7S6Va1=Eivkfese0hz&RJB8J&Li zy(>SK3-MgaWP88=_Nk7>JA!Se1_pQe@GL$Qq99Pv_48p*jBqqw8HI_=X{zGWC^($! z4eQaUu`dpkMs+tbZ6u>!O-1sbX;Tn=j@u)&clmmGAD$ueF}$_|D^-m~=$w9ZTLFs3X>$|NXbR?yGgISb zD*osrOuH_GyQ2OE{Iy{##*2og+8)J`azKMoyz1qpf`;WZHF4LUJmqji@Uz|2NIfQf zxbE~8PE&uon^5XHj#D`7;~S)F7kE|i^V(CovA^`n^hQ?vOnSo#nS(A%Al&*$TaHGZ z4*$M3dhpL#{_MyFj{lFjvw@DPy88Z1GK2v}X2c*tqoQENf{F$aNYD_N5W!#oNvsOk zSBuls4+=BHR>Oyr)J(3a*hl-&)>hkEi!JXXtyH5TCV(VBzRx~;|M!2(-yg3nvCYXg|8AJjp*s~B6ZsPS#G&fD z=Fgw6LHyt+-WpMO)6sv_e$h+#fiFnjprJ+gpxHIgscr8?4+elOWGR_`lYV@}dq-PN zcqpMUX8KJ$RONVmUTu?OZt@8xQR8~;{ci$)9L7Y?Mx(alG-{pKO?!vLvlK^}4kCL~ zoo)gs7CA;NLT})tw^j}WD=^Jzgp>Q>OM0VYhPtOgS{D$Mw%KaMh$V2-9>LaBX%cj_ zM6Un@GZ(tdey1);5~ceFG7H&Tn}U- z0veivqk)TnAC}WVB-a&O>d7YfWQkKf`ag_HP1q5vOOrsZf}o=AGu2(Buy0suT?Zx( zxA#!XQ&w;2{+9m0zD0k`X$L;3(actVT)X$g{+QOKKYsk2*&mZ6$X@sTu}w`xhX#&O z+?2Dac9mmsRcdW$c9>IC=2nWH%|JAztrVGo?E zu_*qm@w)?_;I;NZzu*!F^h_+NlmEuJPOi@$D&F|cmKVC~?-se)`!7hAj5+OYPjB~` zR^LY^xui$GaF>6CNJQ(+P*1P|#rJ5eEA@q*Urzc{FBzhUG-f$QoJB*8=qGDVvbE+g z5cM4r@qyoh8>`)8p%GKc|7ndUW;qaQNJhniA0N|(=3jpAcjaV!sk5hf^3Eflj|HJr4U=xdE*)qniMAHGRzVZM~Gf+O70 zT1j!OCF#;y{MON0=QYN)R<^89^t07kZenMb=oWj+s0H%;4Z)ufWTk3mn)}Qgr30-5 zYt!%{$_ayd{yTpAwLE}4GP%BLii^M>eP_g1Ds(}WBfHA6F@%#9ql!;`9@Pqw*dWmT zFY7lDHDlQ$9L|o|vfX7vnOxKoZtjvH-RjZ`)hDl;I-_`)PLkGMCMLAdP$DfD-ia|x zHqZzE))oogF9%DJ;f$g@%QV{udSiFFL~pFR5&Yjz71UYm<)!m*^hB*(A6YcaI8)ub zU&I<`L6PPO8wvZ+Be~-(#{;y1^h*b7RpOVU2AaVU^kafCZP@Z3Xj}He zKImoPW^%O*#JCYNXXo{8>Gd*=VKb6u6d7BE*o|@&sbTT&iM1yF4e^0fh$T>iQn{}V zoZ>&x)j>bS#ui+1vn}9Of4&}Ek6gwuYH~xge>C5r?h&IT?aN5~QZTfbkpy%=E#pR@ zkx|O39q>z|dFH1$$|@8&c95Jq)Mb)3ii7nLrbNbW*51cAgk~R>Kp|mHtj9v7?Gn6V zgFm(SPG8=Qz-tx%!Fwv3i7WHaqJC)W!s^*x788BD`URIn&Kw7pyR1yw@mknd9L5JN zXLWM;dW%B|kw1b<=e4QI_%GetpVTU!? zUG^((gk?Ua-|e_L{#HoS(tL?TL|Kqe@<<{9Q68CclQG+6OimJ>5V!lKyfoIQEF*h3 zTlk?#!3_nW*{)1>qVju0j(D^c8H;KTK)x~S#|dB8?a)bD-ke0V7vwa-)?tQyR$*u& zt`3kT-t`yksriHvS97=$#J5YkExI!BoWV;#5hqL5gDffmKrur@uQCV|P zt$7lVzF-NA+{u#R=xTUyi2*KIjB7`_5Nv;})w z&NPwz?uTn7k*ULy0HmhX_x;`sK@=s|;{yGk%69<8v=VBiYq+Q4WbrQYw&N%%(L>}h z_2&1*DUx_R7ejIQJ?!CkA@_H|`tFhy1BZIIy5}3F21y8!#r2B=%n5wEu>+-BdH%t8 z4`VdMxm1MAypig!@3KBRL(|gCmI&5}L9--}Epc)Xqt11-!58bbtITL!yGHuLS7lbP zKs|LWiX+X+KF})nFNa0Fi?vu69R`@Z%;nUSA8-*m1bWD#F|+vBswPItYcV0~=+)YZ zWm$goK+Mg0k#ttMu6Gwf^BA_zcc0~Ln_K0oM<0UgmbcBs!w~^cFy^&^BbdwBM)i2Q z0SQWkWSen_na=45XHzDxQ2*0z=!qAfMK|>~3LWNR%?Lo~!q;YBXm%65BWTm+UrG

nf4FBM6Td04i&@ssas-DG3g6pu!I#wp z-!zAC1(r$)?KG11Rog>rz;IKKU)owjsB}eC_Z|=mf=%L-w$5@&BW9fM1gA84pI~6| zr1s~ED_g#6T<#FR%M7g;%uV;S^qqkROqyEzAwKH4=_7K}0N3W}BMN|o^m)N%&s;b} z?6{7Iy;7(TMcS|3??|4WHcyg(wpmFrd6M{ZS{xz3v8e8#Wf0B^-A9f1%fE|`HosAd z-eeX1K==N1%SziMjOVoUanpvd&G!z;%EiVVoRsct>030TYFe7=J(eYVQu>HVY53`} zO61Lxot-sfT6(bAc|!TU3fvBAze#E6U+THbtbJ~ApLp>|L-L*;s+=_^f(17 zf5rzAY<(_stgmFUAvD!dncrSP6ieMY=JOAB7;p8;ryFBYR`BEAq5PUUYx4{SYsgU6Hc0y}OG$UPUxJ?F?h1I1(9viW_q(p3GW+GcI` z*4fnepVc6GcGWY`Mc*-cqKGU{cs4|!`}GPE|QOt}1(sTd7icr%-of&0>ks@2;G)`AF_)d)4&OOd<_~^7kp*8@TudJI$hoP1qaBIFjjI z0fz}~Br2(EY3s`TH<}yJ-1w6C;#)=NQs0_>aRFGG2kQ=DlijAi{{U=h-gPa#FpSJu zXJkiP`3N(*P`!W~f>ivEe0B_!l^p|R=Gczb-CP_$P^$SB9Vn~iS`U=pa3wYU=J`A~ z2Tq%nWLxajEMh6-C29R74F>RceyI1b`;19aDC~<;hyZ(v!?-mIhK>9h9uI!hTemJ6 z;my~uu_Z%iOnuZid69PwTw)*mmE*($hqw*b7joO9<;@WckLy(K1JdxrXykW)bz1=ia(eBsKO&{5zb+W;|&>7Ejuf=}Ms3JTD*-+JCT#GdVsSH9>Vg zXUw_opLUktqV7saC{JdjW2Z&M2zIw48+&)3 zXlz8XA2-Q?l5~=(un^_PtvKjK-7y-1<81H_W7UoCq_{4nJaGTG@GS>C^!l~u0RP6; zc`Oo0CUU3YsF+)s-Ae<*tY_e7Do{lqp>)#5(E*(xsexqEFD5R3!7KJNr*9yU0>`k6 z0CxtclU28t5FZx}!N%fSe9La8A$Ibg`s464JLllXNc}N?@_FKQ-0K>2`CekPH_LZs zT=|-8rUs%zS;2#aRo^Fq`j27{oN+Xp({4M~=o_$T7pl8sDe*8~QHhV#={F=ycarYX z=_3=SyGU^`Wvg|1L&Eel(jU?3s}rWDlYX~Oe31hgA4d8}oqj{Ybiw<$bo$7I=_5%OT?6$`m_Ca12A$s8l&JorNnfqg8xp3E zCH)bdzB*w#Dyp)(b^0R-)3ZsxL8srHFnu!VBX#->3DfgPcj@$z3Da*Ny_KDa`X@{; zAiY7Sw|eF5nWI=xl&+j^;qAOC*RSL^hKgz5K_{)kRr9ZQc#&p&AM zFDO(i5~eM)`EM#z{)A~|HviZ{b#ubB3Y#B3$*fpfe0d*1D=l8r;yoR|TIus1{uoYU zXYD^O;FMXm+n;e{x45zOLf_SL1|k>8%WGE80$$cG4uh>fnT0?JJw3|OK4d9kxx+@j z=7lMrkH+46wRXW}Pa}||9Mw8$i{C*tA_vrXnu>v)=qQp2-(w6GGUJgP{fccUrIw$~ z*&q!)CIlJA)Hv!2eJ{XOQDgvYhef1|XZ$-nCND%qqHpuIa<~;GdtY|(63T%kF%X6c zz_-zbytvSnH4J5yM9FbKzER!vLu3pgXJxGA^iS6Jbk0Q1F zQeF;Uh+VzASByHQs-7cmOv?dKz}o-zMrYYj@ouk0#IxL07GAY{zkFGK%x2qXD;XxE zxKM3g74=Cui=)`8^_jN0N3*loIFp19Abyl1Utl;;Z@lmYE;s;!vhfY}pDmow9Ck@) z|22YC_)>Oe2{}JU`~~?L<@aO_g1Sn8_u~p@D2HFSmPQ5LAI&W9W^O$D$V8plcD2UL zYp#_UWCoIB=lLd@91FreRtV9?1&Bl)XXQ%9dzMTuQj=a0sZo1iFYYU7`SXI|fjCu! zM=j*Bs~7jTe8jT+C)%4RfAHmc@w$0$s47-p3D&3|yFwmYjB_!Q<4(4}xCoeHRXUQZ-?lidMa1%pk``Ya{9>SgNL7vmX<3Yu0QHnR0qFNLl@nSK5;vVX z4X`+QyNfI=H_G@s9sZDEqq2sG7#n@**N~qlK0oGP@q9T81aFuvt6qT`x=Qd5j3TD? z3C=qdLgp(mK+%VN3E_wK`-JVSsjUzXzwe}Ij*nE|A2Jyx8o#*aQE|6sm9X zw@)*cID?Vwk|DT3FLp%6sE=-pxk1;BAUeprXujK3y%+E4CC>O?qs?!gH>SK3T|VQ_ zL#g%z=OKMQ8I_U-wI1=Y;7j0VS9F&kxr8d4fQ6N-lE0xU9`rB6$4+e5}C< z8RwXZ!?aKGF#V0ihu`L}s3(0pfBX2eCGk)GGcWX&zT_9{Q|>VTb@?Hhz$a;Tdy+lw zm$*xtnSGM2oAkI_&C8R$smsmX|Bxt~xZmIbV!o&_VNO^Ny7f21>q_GKB8}dsGdhbQ0sseL_WB3sK4^M_?}2hy0W#clp@H;=Cuwg4;t<8~}dkIE*u zvIt#88oG)Y7!pXEu|2cRmjUjd+Pf#!@@-Piiz$7GUup?E_khY znS#B8pi7s$uqq^+&g$KM?^_K_fSDwb@vZ7v?E$& zm3US~w8M!NNmRq%)qk*iT0Q_*No_Q?+jNN#W=weYCRx#!&brEszO=1w(r8{zbQ&}C z(j*_3x3Rk0RMX|~GH8f<#|((*2{lXI2`j=25HDP{*O~-(tkHA15)6*;o4>eJ&*hEw zyGv{X_#4XK0oH~#{$iUI7a)*1Wd*|*VUr18BcPk~PMSeuM#0eyHdd0rIfh9!JAm)Y z*n;~i&!4n!w>_S4mi4q-d|OmPHW69Gp{i9t5ja4^6-ckIo?t6Py4tphkB;}SZXa*h z{LmIQF__>&P3I8+<*Pf6CMcWaQbW{}IvJ<9I;~{qgB5r~AaV zhv<3Rn3Gyq6np^m+1aSAFBu9HO}_NW(B>>GyC7}00sc}hlHlL5OsEM2Wie@5f^x2i z<=fRU4}vlj<%rl})o@X_BDOq9lgkMZGWVERepszM`7@p0X7Dy%1iHdqcBx)qk;-)- z2kd0nfcM@Y@R8Op!;bVQDk1lW8QCLpJ~=A*&vlLjJ%>t4E`OEe-nb)@37NI&>_AO#m*qj*YRXc{)cb1y*=K z2E}Y5gm$<`mCR+u67MP-1Ck8kp?$UGieM?R-M_&WfLTwISX~4@1|y%a2wcX0fxgj4 zICPe_12=$Y%o-@=?{cqpK440+AZd?pF`8?BykP4MvkEhgSd1+p326#BCxAX-oQ%RM zx2w;7Mm_l{4p!+gVU^p}JCbI>Dm^h+`(5w`7PED51f2^87|Tq*Lu1+HvU z*YEpJq{T%@>{fLxmjsg>S4!u+L4)9*@U_7!-7igIb?qKtdC`ReuymI{CxdiSyj86q z#x*uo$5mTelKx~b+d{m+ZSKk7JFwV;c3v=2z0*3?mg#L@45p%;$csSn=u%_$fo7r+ zF*{wcHB_WO-Kud79a`C?p<^Le?~ydCp<81Oy-)C~2Tc5`cyA?Y;?|BPKA=8+-)iDE zwUF8tt2kP>q9^_pp=%t>%+=iYm8(cwdBBsPq!` zbzPwo(7M44IXnh@eh>4J5XGv% z%BNAs-|(PS(;dWEyJ`#IQV7}?pBq^;5)tCXtENiDmgk|O^&p>Ld@%ASIFiHYyfS6@ z2CgnckqR0M#c$NMPgDh2g>(*EmA`WiPv{)x&8^f-<;(^d87&nSe$9z~Q!nsN<5=yd zp5Q?s&$Xda_{@d{?y1bZfn5d&T<)j}uP3s&pfWc*viPP7Z@VadN?oWk$qT}h+UBzv zPs{e(kq#>mYBm|$xIzRpHp!8|e2yx+qk) z5oQ7uBKf24DN>W3Qt9*VM^B zCH1d5^~S(;^KmZeo^sO4m?(b~PAXy*ai_fDXXG(KD5C;dJ<7$bBDv^VPWUZZ6zXE! z9+-C03@Y(<+isk1EOAsIXF6WSLtYC5_=}a|;GzquN`FCqDLTKwfxAzdUlHSO`oXCZ zZxKwv9vH5-`1@D=z+P#ei1Ovwh#i`KV2%@n8Ec0Ts>onS|C1`XOOR_jpF8lNZ}}f7iqyT zwvl!^y;A~{xgvuBb`)A#QdAH#qoV(Wj8p`$t!%j86(&5Lwd3+9J)3B}83#np_99jm-Xbo&4QiJbX5@rWv zHfB(D#~j&VcIq$=s?yt7;cct*zE|NrWDq^Z+lny>0b3qWTaL1=OlMo!$ri~5erZph z%%PI%QJ!p;=-NhLAHfpsYRT_4JxW;_zv%!#_gwjJwqIe0tZY;T3uz*v0X@=}C&n5J zfTY%gBG(2?!c_d}Hmk%>hrCbg5)(s=56)tir&ag}6{6EA)Hap5K>8(A+8_t1A4ywnSC`0dzyO~Vk*r02d)K(dV@$P`@ z)5@+fE;~I!?vZR}Hv~62Y1+&=Yu)94loN;9Il>DlX794Q*dWZwHVod*n!p$|2dF+yQB^D3U~*1njuu=j**JhC{>H*nKQd;>8*%U+_ACTx+Xx}37!|?AJIC6rIlUN~_U7H%{t$EH`#tWnK z;x4e$&VEty4DPww*EOil%&b2b8qI8Tvqs)^s*8?M=_y%8$yfmPXmE@ljx}h-Yqhyx0OS~X>cG<5AW~zmMJj`)4&NV^r zq*|Yv*Rg-fSuY>^EJ}e;{vM;g2)`b6%{{D_+KI#5;e-kR)eECohHyG7>UU^blkMZ& zN&#LV0GPp(eGjwO%XHhr0Z~u4tr!tl_@f)sPQ5Vg5^xS%Q-cuqTI-QKsh-3RAnVbv zLrlGR;05l*Gt~C~F<}hZ+1gnIh4ESL7sJa%wnLdJ^4Bsv8NomAQ~&j#<(+sb*`DZ~ z=-ub@aY7QeLkBqaJ#0yO@dKZJZcmFV8K{3|nZ*sXQQX-2HdWR)B4BCBLYBC7<`TD~ z(-L>#kE|sQkF+=b!ca}L#C6tzeZnIr=)m?xbzr+C&01CV#a5MSQO%$L6W8KR-Kb{p zw~MYPHR_Mst@UJ+dYVht&2gnj9p7aLoYHy%2&QlRYO?txtBF>Hsia`oxj3P_F%!H| z<=k&cnwG|dpnTgzAM?sL(Z@6<4jvO-r6lL>)+jn^Ig1!hDNv^Dh)RS0OV#pn8dRb< zo#;Ne>VEA$7)lf0!ItrCUZFXybgj8{;VHv5rY4nj^zOkI68G+A?>f6V&ty?UB{RFa z`3BatWu@zEEGhWSO$hR2bP40-Fv#p}NvTDH^3hUb%IMmbl;`x%ed@eoQ^hV_s{mvy4S5mp+SL@D zWw>I_A@_?m)(&Ma>XS4<9P9X%E|->SwLYZBfGixACxbq@ii0GCwT*1g9ZeJO!^kaC!ClQf*iDdGgV#`dmIZ_2QJF&$36# zVf3+urr>d=Pe;B5EIz*Q&wpX}4f)+K?dsWMgRB@vj0cSG%kKAC;4-ZZglsU|U1pG{ ztn)pv$HDK@+x=4R7_4z@sHhn|8uk|rP$nQah!|wmHL-7(3ifSS4EuIYrpptV~zgjoLsjjJz!=nnlgg30DWV?m&=N;Oa(!t1B5{?Amn<@(Nk@ zk|lr=+uezQXP^@*k1&q_y~NuRW!}&}){zmmq+^)~g0te)5H|To6{`FP6B2YtW`UOxLH>DfmTg`ZJ|#a943Y+gbuN;g zzXjl<1O@n>3_at4v7-GBt3$toFNy7WhdwZ|H8sf(Xj(Z(e?FMY(t7rPHtbgQv3#92 z9P^ejk^hxEhH+_YZSw_3c1cV1f@GpaOn=aV5CI}(8Gzy0hxPXZd>?ZT&*z7+Qawpd z9GB0)!4DTjiR8YorN0#+8U!sp&Oxt{IH;^~I06$A&|SWgA33vSdK=v3kI1#Wrj;|= z1-}qEPTq+UcmQ7_Fif$qZC7vqR+ty_n^Y_0VHMtp5!7L0f;w!B&`S~X1L9g@0H72bc-tu1a9kV<)a(Jb2t?;xUq8?+$mRGm$w}dFNrEO=qdrz`ETUi&v^IR&=;BGb z4L232tm!g$H*piLb(P+R3U76#_st6L%ZMnP199}K^VUqF66!bPkx+i3ajRyehdjoN zG@zMFX%N?A!P;~PySu{QO#3e!nc+hG&mD9!@ee``d19h7 zf_XI8k*cYhqkE7ZzfOu!1OiTq@vi%!-;>jbvo(Rwh-;7jV^#v*o==NyCouQiv7#XY zpN>h{6D2t64`t7i7-i26|Iih9?k42x*#TcqfB1Tq5ExSUdU6x+^_(w!J*gl8!^s=* zb%w<2R@!(TaWdU!CgEn8?Gf%Dsbg9cE-(GJymbW?iW8YJ%(5WPmLtRWCo})nWpKm` z&3+~%Mhj#uciGD#0GeLVHG%K3;C4O>i2X*WdTKQB;-ytfny`7nBC7u9Shj!@28#k5 zKRg^L)vF(9GblzF@VVK^0D&vz*^A~{6Qm(QniL?A|?{8Ca8dB zm2GQH1>TV_djBM@i0dl6fL>RJ@GuQLUgupY&neGUBHUJ}m46pm9Ba;+q5>Rvjbm!_ zgX7R6JRM^)?BdaH8RbC$C8)a5gC`?n1mjYq+TXoa_F-|ttu}Uu1!-MjaWD8cH?Sjm zQ>&^Lu&TfZix+)exm?RAE^?o#DO~HkqL{*-F@*C>pcVPO+^J&xj5QA@gNdm{#tItNe?~IGllAb^uaU?wcLZUq)&lz+^*@# zf~EMTKX;l+} z;V4Nx`W^v8ZRc(oDxTy7ZQ;Bs4$EvU?Mx<{Ttga$EDN8(JK3%fF}buyO5FO*JS;JZZi`=zLF>|Lc-}{}c1? zVd48H&V2dw(HuN%afm0%OGC1<95T_$A}AvowHawgHYRuP=^2_^U`FHPc`e@c(4sv3Qt^8II`?WirxzywQpv%IF!fn&Dsf%w;K zR};ByZqOME1*V@j`&R`93h2w>ABAl3U47k)1$Dccqpwpa{@U>hr|XmK9oQ z9SvjbtehiZ0wV84Xn~`3;(Lx9Q+oz2We??g@LG3+TiWeUJ(@#%CD~x;s+Sf^krq2z z_cWWgf2jPhOn%_@Gq`zxzPVH5BCfg6MCxp&Nh0H+xhOJMoYDuZeZIoc#a~)NM zK%h`Rw^vRYj--B@F=@C_zv~!MFm7j}&Ntouof38CUG9-FJX`EPR~d_j%aMS~)Dr`j znSKXObb}mm3)SKl*7vlQvBs^#gC89?Hp)YA2H;oHj;LMWY&l<|Yz^w-n8J(Xb?~6DdbB&Q7Su(|oVUlA#~=t&7_k^i<&a<*jl+>5$({WyyP@?Fa=P z(F&j5;*7VOX&GFaYD2%om2qSAtk;LLp1XXl{5Bm8T@3Olk_ce>p&zX(J;X8{hf-Z-P7>DHdxvnrk4U_YqQ|KHPH6SlY}Y zIXOPdR9ic3%a^h?*oL?t8X_g(=54+&SV81qqXi$%hZtW>5kvhQhdqR)l5}}F2cy4d za4;&}1+*MrNTdS+i#3qRX7A1+AKeW80(x{BMCuF;=v)fL_%q0aK zVobELcFl}7R)mh-p`NN2UOUSGur`)xEsfFrqbK`iXzuXX{>peXa&&0-#pyHE_j0te z$N&buipl*q>n$E4?6N1uoBuP-u1CXjT!@&-ApjJpCyD~? z);B`dckq$V43e|MeMX*y@>zE5y1<9h;!s@{S6K|CZZ6#A&_e=)`?74m#q(z`iSIVBs%BLmvbtS#P~m&DpH=u++RfJ zMEQR6oiFvOvD8Ck3A`iE$V)e48dYpW7ZQ*p5cBm66qX|FnzE;$g}2T!-pA0J!J$8VwAO~Q$Ul;`P(Ft}r$5f~y}(2> zgN!w;gx65darmiaRSX;3jJGoCkJOIxfAh%3Q3R~iGQ+A-{tJD7i9NRRXF`W)3^E^S zNwI7yTa7O=>aF;rR$J zZ+bCq1vSP%$d&1Jm3S8R2FBoZmh=|=ogUjA@`GsL@|~O_N2$LJl^H5=ucQBD{f3}i zIDiZWv{MrSsl@~JeY8v5t@;t}pTPsfoGY|I;OKVR3sl+ptVMzLFH>+!*Y;O+i|~D@ zSEC*hJh*y!6cV-u8%NvcB=M`3UAvSWMK-X+!G9B!R|a3V2Mnlc2AoQU)c>UUA!jqY zgUusBiJmk{u~krMf8sR5_c_rs3-fy+mQ8or2I{ANeK)oRJ!~_!5MjGKVvKS>4h#=% z5D0A47yx-|Ig@rGqNU3+k1py5=CWNaxbBDvly<4_aEUE*Txq-iyI%^C9^RRORx=TF zk!!@c-h@aG@7jKnh&p7iL`nE9b)g3^yZFvwVG@v_;9+Ksmm$_x1?L^`_ZPk43hx0v zj)}G-t-||v;hqC<5KwjAR(VccbRl3;*DM}TgSeE>r}l{A1I>S%ZxQ=_B%?sJk4v2G z2|3E`>UJKF`T?W+g?T4B3Zt__uV3BukNtb6**`WRBTlV7U!W$u?2{)bRLe^v}1ydz$^TbG2n^b*VSF>~a5$JhlEA z`IY+TtZPoOe?B}f)<5rZDg85VSC{@-HzskmiTY;2VB&+D>031z9dJYDWj?{2?{ zE>XfMt(U07otCIIK-gG@uyL>wReIYi1iJMfYXUSQWME?hDkc;~Xm8?RxatIkEA6kV_fw_igVo-WxI!XPaoekK*y3j`sxn`K~)pvwxbtB_?Pb zpIqu~E_>WRV^6Jr#(tW;mrTu*7;8_1m;Zpi%M?;tX8QD#?iTY;+kDo^WTzSW7 z_Ror&WBpUkWsm!3+^O}?xUbYdAB{T2{`vEuSpWQYt6nPqBY~g0|n% z$2`oX^pAUEm;SlCn`{&H&&~~})j!|=)@k<7nu1vW{Eo{W&!6H`>!0GU)IUQnImQ0@ z?2K6d9OP2^=f2u5{nPM`#Mvh5pHV!18uMpY(P{S2(@)3tpC`ENasS+RYW;KHSL&bO z#fclT+x2axE7m_#xRn0c@p_m38QD#?iTY;+kDo^WTv>R!{qs~u|8Uvk{wY1R{we)R z{qvDFeVl^6`Okf0{quV+rGKti-=%*Z=_cDm{nPeZkNPLrI@vUVZ!f}ybDQis8uEGA}RQ4e*P=FZ}hVkDn!R%UP@k=8v87}-`O8t-j)$x zk{vXqc4$oYwj{k^KiRD{+Xaj5#%}e0zsMF+l*hg97RP3<+g7&Me`cZj?+LvGNxPY# zF&Hl8QxeW7RCDJ!B*6#^cG8%WCMZGgCQ5IUa69WZdmC&=lWn(S?k@jObacR`w`t4k z0<8Ay3e?8xWcLPzoSY!WrSyW?y)=h8y36g~6R%SH8O> zWno@sJxm1w52!=TW4;486h_7rs7$yWi64S_YlnK?$q-1!%**v}xt5rX80&8yaGmK~ zRn+`Cr3%(YLj8lg0W`a9ywN{eN2I=7LaGveFZP14^@8``#`Nzp!i6o*MW5uU7wp;_ zQs1sXKKMS;x8wCxpoU}aAZQklL3|=Ay=@iVeU;ur#gJ3{6^J*S8;zmTraJEdc|`rY zw^e3tSD(li;&03Khg@3~`0q2V3Q%|Wn~uG0dg|^`(_d|iT(vh?x+!~cKZ!GO*ELq` z)XI&PZ3O*e=kYm0cHOUOe135A|MvJiBb;b_9v$D!_*{QmkH@D2Zo zD`UR9@mUl%KBqB0rwEWaIyiBE1Rg?%t$a%l(Oxn{T`3(y)W)^d!+(K#Si@I~n%_t; zM6c09^h!NMhgk2><1_Y-(Y&L$myFV9JCD)|T~CNUtRZSXq4YpqdVa!z+AHBeo!KjH zpnBztHBiTKZB^rw{_z8~=}2s#{;s<7KwUrj#DQv=@bq}4*}{TyD7Ha~0dPAFBP6Ih zr@CBoWTmqx_0ksTSwiV>Y!axHIbm~96G$@EcY=$ethv&F!v37T(hn{z>e$rciLFMp!HdhBVTJ$9GB(9;LjJew)2VfjPyKz^#W%cmz@$Fixr>!_?K(8|yn z2XuGs#7YtKld9D2SC!s>7SmntvD~n(?18NT=PP+o{Wh7Kli_Hafm>gJ!wO3SylCp@ zR;>~4ZscN92UMSClzIqe8*mk>WOjkz zrc_zoW%l5FDGZuR-9OsNw_=;#Db@_(8eI1(*)3LW_Ey_fE1p^6mX6QnV`^0VlG)1tuH4Jg3@c0>r2Xg5z13WWX=w zA--#aT5Q+Db%z`_;a?}sAWg8Ap1R#;+sqc~E`O6B z^hKI$f$$nYNQ8LU|sNdcF7>gM;-yB-}Hh#WN!vr%Mc)(dzt{= z0J1mX@h1!olk`Se00f{w*)a2H6NDLN07L=1r3Mr<=`IFPuroAA0uAV$a+j1Rxv*u7 z?;r!*%;GgH5oDo9hxNSqsEF~H0j=ld0V(v4%__0KHmHZVt|Af`HNB>9Y}ukYF8$1! zAPwr17tCdAogNWuRqs)HM1T~E@__!&2y;YO%a_cTljBV+*-vQTH{-RJA^v;Oht2tR z^5;{un_w_}UI2)0QeZN`$nokimOA=I}r|-||=KZGGS&Yt)GK31%4cEu4 z&dbxHR_8^gMR``y{0{!WlN+7~TZZR^c4rC9Jh9Tdh$p z%(o~d-iGR#yu^pGb^-qgb=}FqKVg+T?XU^{X;e+{{@@polx`~^;J{88%1 zgsMZz+ohxee2|iIN4Ge+P9rdGu{cTpq*CrgV6+~O$B(X!^-m+0J?@|1o>KpC_o?+y zcjIxG_cZGp>==*tpUQZwIi>n?_t#V3(UVWJzF)O}>rbh^+D4z67kNT1FTyy>eD(#{S58^ zu|`SeLE{fV{sEUdFP}b|eZZ)%7ML!houNK+zWANzXzHosp{wwy{2?q3ZMdNeCYMOU z`P$_i_*+h@x?$JH=$tKQm_tLN$C;Xp-80pw__Vj9X;6vHQN9o5Fly=!HX+Ivs7d`r z^2RR~|CeqmtC>LLL3K7~P85J5Yi~P#t*PnIzAmqQ96O9YvBwhr5oaH>XC&Q~g&PPwm^|#?!CQ z?=+s8;?v5bY2A#cfA#y)%65#W%^cCJ@$^7@{CK+OKx{l+^=#aD>TSLK1bNnf2cm3q z)_5C;edyewR20O1AdJvnY9aRP{R2B8_M@kQ%;Sst1MO>9f4EXhM=dZ&!`Abpd<%p# zkI$RyPg!FZDf+6YEG?3o$S+>}YeseJ;UILLgUy&~J-+|;Q@r1ID)%p6;(WyxeV_;B z=l=Cw@9&AH$(U{%MKjJaLgxmHk&oD#1btRO?-S_;oYwlEzrRpfU7{BQ#*dc z6cZ+=R^LxNqcNA3QA@HLq@B?r<1uH|=mgpx?MPJ;K1Wb5=;(&FGxk#2V4(LDxfv0B)sL-2p5 z3R7@?y6lxABwE`g+b2R|XrXJaY?K?c(PUo6?zz^bCC_v>KAsSb~TjC z9*>U=r!+pe`|BGY(=b}}bbLJjbl36GuV>He@o^u|$B&Qeu8ED0+jpDeBWp}-d|bG* zXXE2oYy9{S*R9hVA7bU4osO4a@I%6ZdTKxPK*E?JPIng_uFiI5MOLLfzuH>8Fpx{TV;4CkB;snIN=&!@*f59b2KJK_0CZ)ye4d(+4uG!a@@ zT@aoRwx%1kvrOeeVbuZ$WSZjpU6q@P1vl4Gm+NG1+v;*PWmqoSAbD2Yw2LK^);g!u~_%=-Pi)|I>fcd3qEu zkfP6b8b7;F@_g6vgFmSZ_*uq#j6jstX&GA>aG_)wjFTMIKhT*?f<4|kk<4lDw==ZJ z#TfAzn?tjl%j;xXyn>G)F6?PXKP>jRSJWPTuV4KPI^?$Ix8>}00sI|D{O8VJVG;dY z@2s0BQGjg0Pwasf>A}z>4-kY&u8=pK`wNZw`R)rQv&DK-joZQwBQ+d?6nC$GB+>JV z?X#4Fe4)LB_^41lkMU86A(&oyp3vxHq1%qh)yI~1$ZbXV>Eq!}y# ztOW(?3~eOsyaq(yKg3*bX!wjRac};w&TrNWO={em4R1PGCwl)!2j%@9^ZjX|T-Knf zjE*%Z-C97R?@x_iKg49+W&NU9n!>U9dErO;uLUG!(nF=6#`$LyWX)V%Jj8u#kjlq$!Y!gNz$K>y{$V5~mX zRy(uROuh@K+h)5Adq&c8Vv!7tfPF0^$6Xw3{!QRa4D>k`u!qePS4!thaj32zcOYJGMSLTqr;5qeJv(Q~p2g z_c{Fn?rJ~reTNqD^Z&;Clw{oXeY^g*-j|lRes=l!f1`fBq=fx9Lw^3>c;Cvz?_2)A z^}hP&5!<@<-=E~?g!L1?P3D4eC>m6-H{qR7?+K@^oGa9rAF;Uf7aB!vxq-NJptxgl z#vrVkw@CnI%}=uu7<1t@g61R~+-(c>XZBAr3RB_ktaAL4REQyGX4Wob$`2@LIn&r` zY#1@!Gh!PQGMV)y=gb5O@~e4b(+#sP>({l%CE@(JodMcZGD6o_Gh&!ts_3ks_ z$rS3#1H$If1e=Gq#;|94t5FtCgy~@&g7<8)GhaFOeCw5hZ8PS8l&F#y(O8X}iN?tB z$|8ZogXdd)$}wqY&M-2y?tJ{_ZvEwc_(Jmv4G3s-QSo9*UCs8uIM6~h-m9@ zQ7mw&*Uy|Kc*Xt_Exiv7RcGr3?_np3GQEGmp8(%uD#9{qdRF91kJjqX3y%_Fn(u>; zdeig;J>sOo5@`rc3Q{a_?SkPxMOF77bLSinMv~kQ?WCdL&kBkDN;ttHOE-HD+lgvc zzWWE?hfh@h(2m6)fgr3dTT7%=B9x6%L%9;>8K;qyQKyTMk)%IDNwCpm)EZNr8Qaa@ za~x*I8B?7Q1lg8pO15QCe(E!0#+G@ZsV+^0l1h8GsVy&@Jm+YpIxl$|?$8Zn)sYM3 zLh?wun8CWtWE@=*CXGQ1r3Bf{*?RAh9@=wBr zg7G0*=)OyZI4;S5YEM0@pGpq&?RfP(6P83FI#p2D?{)+MjzEZ?=$>K9wGJZ}a}GL= zL`3a5|194s$0GO>AM8mhX9Bp;7R%aF{V{7x-a(n@m<>e4yI-Et-@pap9CA6P}&Bp94ac<-+J>)Vmy z6v3!%R~cM0p{r)AnG%1~1e_JBecLUCY_V(yz1*+Hd>m6ESA*Z}DDyub z1sYYlD%<^|99EJ@;A!P>X$Vk9MLOx8ez{K{Uxo=Zjv$fykIxWhc!F@~5TDl(aaG!_ z?xl|-Evt}YIX}KC*H6;SqQNq*kD5GhGBZkJW;O7LOs&VbGxl2Z;U)1u`5t9O@h$rm zF!Fl-Q~RHU#9Yspo0%+38Rm-s)n#Rny^Yq{Dwa}C|HsjRm9_=9oE-`@wS-IgO!;waXr=*29Ef*;T^_`A5-D*=Fst-!*8Hte z`yV0xPM!>dDI;I84dJt5L59s%O?f@RA7t6xlQ&3ETb82DNBSMbeZrnKXXERMuekji5?0bb+4l$&Lz9~8a`dsvfi8fX z9%y7VIHgqE)qPxx0%3b`a)J6ke37y74+DeRO%#L)nrf+-UnGs3hv;d3Sf+WgJyOy! z(SOqmiMdQ4C%SFI|55i_hrcU%v4Q({y5TEduhohH(^3Y_y7Yi z3j*wRb@U1#_N-5vuvMqAGl+s-%iJv1vO*1#6$&P;#$f%RP=1;Q(H@|rwl6a(5q$`% zU*gh4H{KufP_dmwP`0cUXXu@yRJ#x>-#l}VD;D#CEGL^-JoIwXpqG<3^>R`#F<4nn z0z2!xd*lf<{++kk7+fF%K&Tg}mO3#_9-c)!w#yw+OE*OMZ}EF@(-0xGUKxt525f}g z({))(sv=H9udWJBfw*x><6S09UJ7O}m{p{{yG=~gfaJ|cjKccw^-!J*FB3-wk36w42v6uA1FyI`82OwUI79tq zVoZ0u%y>lKMKq=9nufS7f=;hrewv&T+{gKynR%p;nt$-TO!BoFJiJC=OJ_FL8| zZk^ri3YA?gc=y1aWNU1L!QZQ~;*_>X>`1dOvw-z^)s_KIJsJ}iH+X)BgO2VYrsNO9XscAs{K?wG*dbf~YIXTbxDEZ1VV*ZH?OZ;?rD#IfcfYka+8Ap3Mr(pJs<6tD38%GBiiD@y_(a)Q19`l(Ppp?9+Gr=W=e&|sfSI6y8+#&#^=i`4f zcP%|XQc(lQ6iG9LWjLLq4TmnG95XfKVC6l0@s)D&JLu_G2h(D({>oz83>{!RwE)0b zSY4vU9*=1%Si-D68y7qDQiZdWizE>xJp6iR=L+uHX;l!^p|hGdB&;As?bKCN ztC%iTR3H7ZYyEb_{}xxj0@{W8y+@20B3~7;)Au&|1~)iSaus;o>!(KC>vN9R?sxX9 zzn(D=n%&5*xlf%rilPSyHb!(^rwEFgiY-(M10(dZ;#P9pE}At$GGy~rM%1R@afkaM zFN2mN-#NZd`PsL!h!g9m3pugI0qneu%f=SE%e8T1H;R+sar}Y%xuMd)lXg?jAl@=Kzv&^(K~v{Z zLqaedap#~GXiToH%8%gxbDY1!GiDadQa`>z1#Zl3UbaVI@;?A;0 zwJ%57!|_b$dp8kJnXR<6A-jZ;yQ!bIUL0*Uso^gVLdVw-7+mEg=#KX|e}@b3Pivf| zE;C=C&+E79C3lbSNuUy(NC$|4g&0|)E+kUUJ{>9NuM)S9SUJRXk44Lo`_+Lr^=ek! zi?Xj#@9<4N=Tf@n{aDY$Ma&c&Y67X9&SUS8BwM^@Ev}mJR{|233^EqP(P;NF787O7 z7}GK)cco0_Zj6TfuTbk?Wb+ zybIl`xpp*f=2AQ@wscn_uP%{jRvP;p5$Qd}SitE4iz~5BubG9dQ;(XlZ ze&`u~T)tm^SbofA+h=n>EHkJ1IsTI&`NWHQNczjHF&DrD$(Z{Ua5%;s8(gO`hsU6d zIT>29Q72ERdpYfCS$2)y<}Y~7+Ah|p14|frcX1St1k%+tsnMEy7&(K#nQ1$koyCDT zDZttsR=#J^M2SkuZQi%pdx4z8@FTy#9xOdzJ4w5slQ6Yecjj8{5f~;}4kSxnwd7tA zE-Sqk1kPj~IK#J%snRS>!%xdfkK5ekBH+sd2Y&ayj#y>X`+uOO=*LjEHON%7W_;30 zbH?|jW+JExv3xrA{8U)wnT+Y+a#_{OA0|U{3R}-@{cqWRE%{@@*61{4&mF}VnWfdG zv{feOdbMPMl=p-ehsZ!~dyLzp(EjC8;0y{(4R0%lV|m(0c>HmFMR2D?Tb>$gYyK{U z(Po3NKb3Tr98xaGkuY{dXJ%~6Ds`1L0_$^PA7;Ckz_e(I%}H;1o!vG2Ei&oKE(UInf4uf6lyG5eTeQ6 zaN1Ve-uqLtX%;_73o_2-yi%xEy?j9C1_};F(YI-&cW?U_q8|JCJ~eW{cpC?EXH|vv z6gY2-U|aD$Qiod(b5aBfH!?rvj1G)(`4xzJCzM@>@+q!^Xy_S44irDlR^`R zx7<*uO8)t8^M#VpsNlgi!_8?4Du4g^C(k03R{-2kJ^VYpR)+3Rqt0>2w59c0Z7^7? z4N^O)2JieEST>i%GYxsu`~!tM!k9Ab)uH`3n49LIK(ALf4WJh}tcA_P8b`lb8aq><>`k&b zfzn5a;|y|`B?qiwWgOH{L~wxlp*c!DULBQO<&cx6HgVJwU)WTU$6w-$d|vm%_``?R zp|~uKjf3O2v6CX6&1ORs04Mtl(qoRJnwem0N#)l}!5Ac2ze3YavO$)3nWsU;js<+ASh$vSt)jkkRv?Fm6Upzl-k?QVif0B^(l#3`pT-7 z_B3ZjSKVLdp)Z=fl&4|?9SxRwc>C;EalaL*p*GFY5m%3-0`=pW3F}dUWvHVbTWWPZ zt5nONXug80BK6NMrLY$$XW~*E!q(GKib-ZE zq&07jm14S8igyADO7UwFr8V7U{{Wa=jXa8c#+7d}YC_X4bHmfvWv&knvin{l)i>n7 zvDNtaPhBm)4U65EF85u?Z!6AaP~2m?-*zxkV!MDp)_XDR0%__^Fo7|#g+=@cIv)hE zKT2>UaVO}9%WQ8XvJlS%_RPI?UPn}`uauwbYtHYCuQ|W|Uvqv}f6e&`!SmPIA3{j{ zb>^4#HRmUUykBSegh2M|%ufh4zs~%=`!(k$goQmS-!(m04{*&psFZ0XmOW19ZBEX~|sl>{-BU{BWg5<9AV{%;&n=t^nRonk~T^#V#p&IyMgLGz5&#y98p@! zkAOreZ4+*k4gS85hnlKYIdUzo$~JY(EAZmBaiy*9vN{o4ufTnc*yf(>#T3^LUzY&yo+zA(oE*-qHw$9S-sjG#2b(4l4fCDNpCBe; z%M~M$Ao$T~i@v5pF6SJ;yo;F>O#=9? zF@O2ew5M%g=VuhnQaAlPnS+;$R{qRi;S@(;} zRR8bvm`A2f4PXZ6h6*_ZU^Fp~|a@v}Ga-}8oxpE~s zfaaUHGA518*z$@#{4W!5OYr{DZujI}&10>!-7nKdHltHoI%#OmykW~%sDL=z#x`q) zs8|1xETg9E8=OZ33mEPdxJf{D3))|~z48}!(85W9ejp6jLv0rcZg5oE$0r3Y3?BcF zKdo}2eSD5RkXku0X?#vnz*RXhd3;VX_^O(gUgy>X>+LX%ey6ISPqS!@fyD+iT91sM zU#KV)>JG@DsidT4ybLuwn$uW zy@K)wox&?_`RMhEIDgUqGeaI)*2D{e4qUOCpHZ#dDd5ygjB6z8A9MJzvi6a6F>HzT z>Thdh1RhZHc?r6$&0Z%~t#*u8C_&M;4#Zh&dxh7ja<9m;Re0OcATdp_fva9#G^3nk z?Kt%iUfy2Y)Hh>F`o*ZvZG4_VOki7RN_yOI^u0q-%|n_^4qwj%2H9u2?zer5zos+p zw>`yY34ibM_X*z*^7jPScks8IzgPLYhd+bAm5fST{~rCbce*Rd`j*`3*RS}+(Z82G znbKQ7@9dIGpZWdZ8Oj!Wv|n(#tSR^sIcz%OVr(6Y)^CnR zMV7W3lhV!gD;2M?BK6u69dDnO?wkkTpJ-v7luhs*NfeUOqkwnL5Y_kb=SA@g+lYS` zAh|+wz^lA79E|or9xFYTLbyB%)Eln~>aHEsT`$%ium(-Uvt5e*!9?9X`&&!f*`&Vr z9omIgQ+l&q2>na^PrN5mc!l+bkBOx{E@koU9lz}17oUT?g`Olz{paQlaOEZo5oz#G zbdoL*{CAYbWFJ){JKlWg&Mt4B8*TJh99G?aH#5aId)L}QFUm>^riM$cSQTo+I&Y0E znver?SubnrX73&@cgmW)*}IR+Mp=qCdk=8gBy09&Z!4EdmUKb$Ggeq*xoqb$%#~1( z1;c&a<>DuS+V+*j-?_v8@_h>@EPB0Ul+Bju37nOg=LqzlpLxGilxX4R7H)jC6WB9aZG%}pIz(}-7&g=!AR4g$ z^+ePkS^=2_)q991K1I98!4+4$SBvozyQ6f&cq=mDH~g|vhX>J4Y-)GZbfgUq40kD6 z`X78fVCJV3%kSI&fFJI^@$*p_gK#Dtdwel88CT!gH7J0LZFT7{NANe`h(n%%eew1( zc4}hmj{RPY{CikigwwJWS9xeT2J>eyN>@Q? zY3fYuqGY%!ddJXfKh)e+KgZjn3*DCuZUp~y2;9&5HpWgE_C_!}$FYs?-!AedcF`A6 zk}Umc#fgVZcLc|<)(}RIX&g-PoA>WmjsBd1$(gA)dY;#@0=K?|C+XrA(@GC|S=HAu zmrgI%@^z&1;P}wFdY|@jWLvEIIv3|0ecf_B*UQ+aw?VI0I>Q%5orYLjqv{qJu3{+N zL#{ejl!iZEZ}bwZ)YqWWo!zcspCtE9yza|a>Tvj_-`&8w%--nLXa#{+u~d#;fsIfwZ!L0i^T>kPED_lW8G%ao@^Zqqwo#0 z8rMR0G{U;JHl8u}w82yFKF0!D5It8GXZ7}pZG*F2u`-z)rtWfO*(=`d)5>DsLHaG#1^P0)Y)0QNuN|2 z?MLYcM;{>kA{+@+iN!u_7<}QnRum-$7bQ06%Z^<_&TQISqSo=ji*vi&-B@F_%In3k zv?zYthR)&5q1qoA=&ya&1rlfL(kX{E=}6j4_+I&L5SySA%^i;SwsTnOhr94e_!Z_tT4wi)!OUr6pC#cV0E$Q7Jc%!HuLFa)J#8y`6a4Ah)7xVhOo5jP zd-^KsVEfs&bp<#DV^5>|MauLB=xWO6jqv}7ok^3M6rkDQs=a%h!Yec$m+R@Y0L7#@ z$}EcCBrB`16pnM%an47Gb9PO1!w}r9EIKH{NgC0>YORy}ULK^-&Or^zwF_`nM^+-{ zq=n&`Dcyo2^U9Er#pLyXH7}6?mxnk8uH(sf(xkAT?ZcH-%!oKOx}S~bcfkTW`VhMI zE>ChHj6G)*SB|~2xYcI~xd0nT3aJc{C9k3(m6>N6)je#41T%TiR zk!vsf9^m>BR+vSe$~NT~hA(A0ae!uOI3GvRoQ(!!BPtjFD>@>APued&!b5_w%IG3?oKT95KIqtPiQ&^xy$eo((E4>JPqS2p}m%JwBA z&uqMXp&FWY;M!^=?&sp>YWhh`wQahRQEoYEO>`69*1ktLDcVOdJedW3V%R62sJAff zY0LSg73iBYKoe4S6m29qpnf<;N_>%oC?;}k}?k&`FOe*UwR#+ ziRlAD=m(pO^WaKlWE*}EW{J7ml#WePx2?yQSYOnEFl;EBXH)Z9ON(1ydJ9U<4vojh zi3fPA1bfpX z`Hzrn`V_LoXGdW=_NI3Mk$L0DxRIi~M*5C;jq1*x_CZDH{&k|T?nyruDPPl1WfKKv zJ2LQpen@Rj#5EkDrNL?FEzizdC11{~h}j)!JlD(H)1F3rU&kA&L5<#?fk7>(2{)** z#%^0b_D~9>kDh}gNAP=TPiulG{a6(PG1Q(`9mG7k$C`S58#tHjyjXF}Y127`e`I;C zSH4TUpgig$p6kWD8N^3sYEr~6ED!4<#4CFjes%JnNxlBX-Q^3;e?0a2Hx#c<>h;V! z$KS)=+4rO^!Z8PSYgj-+yhErO(kG!4=a=>l$xuza$#cT57VD%)DW|${uVhb8f&$yP zGVEz%@FOBqwms7w-x<9FeG>y`WL?cAdwY1MuUBB3vi2^pAJ5M34m&$e+YEDdW0-xL z<O9Y|#fW%3xf|%By|#0PSB?^`^f7 z3G!F2;#+XXv820JDzOY5A$?cBY7$MHTL57{#IO4|Vkr<}z?@I(+!{*-< ztY+HLqN0tIo~VUd-hm)1K@oO)`Vx!~7*c)dV-ZKhjA4$Iv9K^}i$8C=6G5acM~b=# zq$OZ>`bdz`kZejwcKWmUjh~WvLnxw=FgraMzk)a|1i#1*l${=mUp7u7HxRVe$xe6U*R9$l12qb)K4I}L?RsqU z=$FY5f(7n=6nt|c=xsZevZrU^FCR}t4^ZGMBO@;pBr?B0y7|T7BVMK?3;am}adem` zp}h4ZKAt4dRXep!(u9{2?db_T4#}*?8O`IAbG6?*ad^@QVoUccHaodo9l^IH{V4=1 zYfo>)IgloF4i9k-_qf_`X^KMo+_#ic#D;E6k<~sc(DP?tV*ZR$%78g-K|c$+kLy?G z@Ecc0RagHl1CK8t4*vBzXSLSMDqbnYRYuG98J##^(wUDlrpnYA&*Y4&xLRx(>le*6 z(l6GZ;03wB&eg}q8;X`Tzn`bDnycNG1tOug9|3t>4GihkV!5h{4x^{82ChnUnvzNl z4a*LNj~mJ>4SYUoy9t5Lc}qVC@H*zO@?Gu?z`a0Bs9RQp^u;3l&)#J>8D~EDZ4V5d zII^hp4#r}!Fd(r?0v5Wn(eC%N1D)|+N@0G5Mf7(@Kv7gMMT`q>vJG<|9&@r|VVZ$> zD@D9}VKu5sq`vGWhDD_V^J8#;NMz(b`#a7(QR7a3bMD6VPjY{3E#bwLZuCrztq*;l zbm9s8vIarcAZI2DgTRJ@8?Cp?5D81}08dnKkS?(=2}*%s19DgCQ?!xB4kWwKi5Ia3 zM6a$=`?9s?NcuD(y)#FMn{;LmUvULDrWF^B9TDj?S|n8z`exhPf)yWkl$-<`8MY2- z>o**wg$b<_2Do|Jc-3$tJ~noQDupS@vuxO4Zi9~P+}r?D)WC-76a|O-NnxI;fi_$a zf2XlOR7j-43a_@JryND-pp;L4b@ z|I2R&sOp&05s3@(t1jZSjnpJj$y{-8e53S2b5pibokSE)s1m1E$UZhiB)bTz% zA6EM;eX|4yOu@^5A}KcWQ2XVbd#U#Kv4=#eFsgkbQSC1}gdZ6lgFIb>$<D);=!w^uX#}``TQzT{HDW*KynauI;up z#J`L2?|A(CE^rXPzsJ9}a^k-L_22(b|CB0M`oGR8kf$tDrd(Nr$%=nZ(=Lqvdzy^( zL0(@d6sGKp3ol}=Ps8@g4`6uHX+nodS=NUiuN0A6+;F8*x1{$eJM zoCmln;cFK+ziTOl+^N?$_hWG3=WTAG@rv~?Uqkr#ce~fu2)w<%2KYbSc=FK-2j)aC z{|1D!5if`^uEHhg#yS);db3#j=pWLNMCD5)d__0IALzbOwB-*s;a|n6pM#DKtb?zV z&GX`hKrn~JQhB0v>9+%5v@9D_1Ori^lFlXIG8w2^+ZmZ9+K#?8$+gV&yThbkxMWqL zn{ull-S>#W)`C|IJnmrc`&`zI)cU=?F8F^oAI9m^Ih(Iq!3w{|B1HV6F-rWR6&C$s zIcI6ple|QgB`ZdLIoKdxKwzveLb%8sS3maGU@T9B0b(wW1z=}|A7&?qE;yMnr?ngA z#%8uJ3h>pv`El46#5(i}{=}sbu~fZ`Kg1a8<)6;k{8L{@Lo)(c+1QM?sm0(k7k??O z^A!BU83)4fvUx$U#<(p0)ETctellY$vmgaArY!s~{Vc*??AM=QkAlgoSuESUmKN9W zl44Iwr-%>0k7xyDkN16AdFJ15x^5}#g=A0h`Y4#5^7&GI>}RKXMRS+yUQ?PQ3Xh63 z@u`z2wsic9+Y@;tg;yxq0Lkh^OH_Ci$zs*%g{&0*S12jRg`Yk?TY2B7y7lt)KsTSS z9sh%>7U#_D)1wg&wX+1Z}JA_ zbq{ZKdM~6V2(xz@*|P9W_}R5U*hxi`p@xF#UQ{l98<1%$EBs(;R#~)!v`jD81FT)) zyHdAR5Tv<-!4I)gvw}eI`bOf<{ALPYFL=fDul}YGjo#Dnn_5!%)t&q+!-fNGeAVSi z4ld>0NWID{K3~&m=CG$LkV-U3w)rhS23AqJg(;DtqTP6TG`}{w{HpcAP^DXcB{Ies zEx)Y7qoaqmqV1{%K3FcX3DNs~%tg4W+`!9sx5$5B#!km<`u@a{fp>a^3z=V8@ll&V z3{LeV*MZIHMbs|#lR9|#!o>#v={%Ph@g43tAFS*E8=JQqcGTy@u+(<>=q6#}gAAp! z@yp@)xRI5^zTKM#)rcUfoT81SZJbPluwMR|D!y-VA8;jBd0Yrzbc)xJGJ~r#!;vu~ zeG-ynIJ`Ls9Y~RghU(crds&$Z(uBFbNg}*jZZTTE9-yZmo=6>Ae zNnsCm!BK{-)IV)WAmlKI8{4^8>GvGg2EP?j!feNEV!^^7B^)1dGbKqAgunB=$j6i12>UVQLjtmN(bOJs2es$KunG~X z+DW70dzlvuTF%Gy+c~WJo;-~D6iSsM>Hr@{Hf3Ww&`>a3Rku{agcWzJ1g?9%bfR!x zSbaN~75?lZUEv!$nG`;U9hv}>>Q*k4sDbSu__gk#VFy~@<5#*9!p5+{gVCgqC6ps~ zD!H%w^@u;S@Tbp5(O6exCq~M=Hvd5*hBm)yqiU1pO48TY^cg^ncn-7e7LAyK>VPWR zmez=AqScy4%jI{}pRPK8Bc@iWHsb3(YPOsmHQO2sbuGT!k+jGq6HWDXm)2}^*fjiB z9F3@u-zh0Ofp&yJte@yDLF7)9qEltO9JnM;51nTFi_ zg^2?I7R0yAd^coUsVWVb>rba_N zDQ5uwrhk9zfEq~-h85;RYO&(u5)R1hX_FzKy|(tWcCp&P9ZotB!B2cgsRtuEc&=AV zYU}G*K*zuv!l97q>;k^q+xKCu4`BTaA0>g%#KQcho~%Ey^E9!qGNE;Tw6Ei3C^!Ex zQ4gkN2Co6W5>(VjJ1MGt`Z-7{pE#%3xH6iyixjQKCrKy9;b~Z#tB=yP9X$BOu*v7! z(s|^WF|7F?bXO9?BXvRaTn`PGR3$5DzeT$tUsItWdN$VUu9@tDSL?F*!%%~w`}h<7 zi5;LjRTg|@XtM!KLh2Ap*|Lo@P+vhfwVc9M;V1q3_>+)ATU?jh#244woj<^|DUNxb z$MF-kwFmClO~q;`q?y}x{t>s$@u=H2<1x2w39t<~30wuVPaeKMUq?Bh-T;VGX3$P5 z9Pi;UH|*?noR8GfK1Pl$;fMd>lMjYk5e?2r@yraa8BgQ;uQ=`T|?F19brtxs1)gY#$yKQ0!IEq<<9 z!;xL~}qYXDq6o`;>h zy7Mz66T8A|=Tj-vm^gKFM(I_{8_i&E@J65FaaR@}7v~TzBm7=*)sgQo3tkHMi%RR3 zf+9T9HX#uA|BGB_u<6?eUAhh(-z|HIR^UyQ0d!ys$6KJ6bVhbbC=dsFplO`O!{7Rm zNUeIrd8In^35o{?a1%bMDNaw|4rEvr*CX(MOveqdZ9^x0V*BAB7b63wGNBO`kLX-S zhYeK^mEw>k`Ix-yyor6dq6tAUtlx(;+^UCK@gUBv3y&x-28{evI8eZ?3)rt#i33WIC?J@D!V9Q|am(ztKpO~%W{hp2)Vc0>U>hmm^} zTl+I8jXiB9NN~D$PhmY*h2h>xQ);EWyC^lYROJ9Z;JM<_0BW zmlH34b?C%9kbY9<^g1z0P*~yybJ(|ruvRtAVJp?JqHunM2&Z+}jzns~^zLB#-;}98 zyhi>jaDW01EVVcP9{%wLPDUM5ayH}4XYp_Tp|rv^&OW^T$DG5( zc|LwNs*)-j{A zN{VM$5X^othE3PP{?AJ4NzqF>vz@i1Wz~|}(}ro)%MSjamKLXH%%$b7rr`8ID=kWz z_b}3NkAwN&x1obm<1k&6;0T#7p4wGQ>cyv!Oy~1-?u6DwA@9)?lIe?PUI&}u$jNXN z%y8^V2*_|;gySCP*pFyG>%2GlGWK*S5&Jn6tC~^?w!Bplbj1ku`N$}JXj}%GxfR#J zh6x`$>}i#68F~jhrnO=)RR@rgd&l9M*4~i=F;u>-jC^P7dja3G*NwxZ2+l%eFR$v5);>HJG`R?lpux z`MWu6tr{j)-{G0)zwnD^dAF9Y!%Ob7JQzN@a+Ez zpU>vwd3%F63-it5)K$X_!|7N4dC1iU3NMWrIT7dHkMXCIa@pP^$Zg0OST`M~SkW|m zlsXR4=ge!+wAz0Aq19kZt?#^ITW=Zoy%P;sZ@ZL$)t^esaK=7<9LsPNuXhXKE~Oc) z<~Tnlm>K(lg$cP!$=lKzQgp^zHV9vYwJ_Va-^H!8Ma@{^JnHXcq)lHyu}tH6b!1ML z7+@o%FdUs7aLU^;5Dw5c)9D1f5nz0-$lF|Z%lybQh5_y1N`I>eJ#SX^CN&IWZMK8# z^Yl?f{^a>j^i^fQI;OKP#)}((S6Y!MIZE^nPhn-(fGv@O<^|9*iY49AQ?LKs=ed15 zDdY}!0PShP0e;Sva0nmX>UOTcR-v9J|p*?La3FyG#{a{y5h)(ww*Dk;oA>CWF z)7b>|ULh_eHpI=vTL0kEBHlA5hPb{{o&*<6Gr^R;pSAmt8eef=@gM6VeG|#c8-wPk zw0trRUpR72f;He`v6{Ob{$gS%^07dxzOpTcx^S2PH(uH3%D7q#OP9w!W_AtU+r{L z>I{aM%@}00x6rbFRlQao^F9ry@B7&P0fr`#wA4Skw5(vBj|LjTo*HWoYo~@`c%g5; zc-V-Z<1^3ycI6m8QPV(LyKqed+RAa$B)y6oUN%(mlw7Tfu{bHViusCw7LnvWJ~%HA zANpqH4)U|!O@Uf(t*^6&G$peJ-@G|UM;)V1HM8bQEfE?wXs#Y#Eo1Kl&JOO`RoX^h zl5O-4w6spR%qPUtO8yl#3)I1+iBY_?{aVR8-$^`w$^XPd;-X0>JkHzmU)U9pSBI9S z40&v9U=y5f-aQO-;Ms?lX*qQF;kV z8VhlV-#i@R9md2Ewvf1Yh9w2>m?q-x6h_3(I1xccCVY&N!>HFSW)kMuDSLFz_P9AI~cQJ623-gpdh7#B*Rnc70B!W;TR zDUo8C7D|86CIVk5#ZefRg?K4RER>umTFDEgz&?hWT)9YSQ<;omRl(FaVXshEbZ!jZ zcwkZA(FJIG+NDR42lgqmV+@I3&=Q*j>kq+H9dG~BFbvcp&U_My)?2ChTSoup@F5*F zpf4;9=;lIIT2qFtn9xcOOcgwJrnqk-j<_0xG&5(pSX=!XP8NwokJy&m} zebq3-a(+mxHY%qtd&F9qb^JxBe8HeIwp%L#k`z018o!?o|A9|kzqu+O1`*XB(?ZH| zO`@)}1xTh3))Vv`(W>s6;|L^;Wu*>^8+DN}Su79^M51}W`pW63qE7e+u#|K$bq1DGJ_KCAS>*aQBXuuwW|ba|vE?OEfT^;tj@RWrbKW5L z*Sj=L_4x;Ke~hHuOTa{oJ{aW4ZW@BT@VHPMyX2?cYJzFnGr2~ zKjgNT;l;gYfkpGp$HY) z(H6|d#__w(&9D?wa&UR<6yD9?E2Cp9c{(;_v63khZRo+P7N`SxCOv5Ndrw2qEHwxY z4)6(S-;E-;XNydR~SnLhZhkkmi_$_GRwh2gl>t#{BQ!zgSx(L!jOaj z_USit2_5#8q+0#@V10^DFQcjWx%sM^1AGH^U@Yy6$8At0a1s)S_6#Q>EQa;O){^QZ zBy||SrIt7MA?S}M85c%Lu(LKcu&5a+ie{W=y3^oPhX$uaipkre*46)bQ7vUsV_ipI z?4ZV-t3;m?x8cV(1((2d6fF8sUWY>dZ+K?j6ZpmXcQBV?!8}n4(dBFHERA!LJJ9(* z`nELpPmqIkA(xHc^8BhBN!N^|JN%#~o!0$&>(X`5rK<_)L>qudnp4Vt=L#C% z&>Az2C3G`%7rQD5cZq6SON${I&2BHu@alvXn^OzuDVC-=C9R_z}cqi4O< z*aPNo)3O#dkkFc)ox;_h_YUG2*e{IH*A9gZtnA18*$*|cZ);`WpG{ZUw>Gm+>8G=w zPwYF>_HHTHaN5u0Ptz$K8+o!qJcSP=MdR3TQa4Xwt)$K{fsz6A6rTlN{1RUW)WygH zkMlOhEYZz=YgK^5M=y7!41(}}Be~^a%|_$g)l#~959KM1 z=Pxjsp%j?PU}V8urj!)}r;{FOBxmy&H$z(%U3^-~G@ zi2^^$ys(=&^WAUx1zQkp4qIagd$xx;>`gt4-zrXRPr)I2eI}~G+<24d(x&UD;J;d( zu7~q6;|CCUCBbh!SG;D6Xa>>MeVIS5LGgSl9~7kECFUz%V~k2Z#YYHbY9Lk>$MF5_ zOr=4h&Ezvh-YLO(Us4))=HH=22;cn9#uZ6lqCLg1(=Gh1Xu$JaOYj4bSGO){iI=G8 zNpp!ld{Zcj?sx2?1&6B~yLt3>QGPkrV*hRKqY{(fhvY}WRo!$}DVGz;P!N4cDX(2t z4#81@=tG_?mQ)6BOy>_W@?9+Wp4_MNb%mK&ij&#c3f&Q$(z+^KpTJmV^r>$M_jO}5 zS@*94?YwtA($YzG#p|79qp^LzvDMs3oJUBzCnkw5J`+*tihypWQTGIL5Xr`tJ|p%7 zPS@7Dq&6cD^5?c5uUG4%NqyvoSy|NRGnkUa?01y7JQH~uzDv|YpWwYIZ9zqFA=TR+mTF6u~{x+Z_AsY{(58?l^;qDf3b zJOlf69d-7{af8KN8~y$4BaQ59S=l#XqgD1bL_E)p=U{??1JXH}a4CX=PK<4V#`HzU z?)MCfjz3>ld#tG`937#TjcloU*%pG4anX@5hMk{)b}&vgxb|*j9su7^xznH;j+L=- zvFkE~Wsfn3J#7fff5FVNy&-I2nmMel8fI2yd4FkklF?PGsRLh_OXFNZ4XGv-Xc6L( z&_7uY`ege2GeN2T=FFEE!gdZZhh-STc3Y;s7t}D-oU590<8gWm0~!q=_=?5Y!N$jm zA!AKVt*vNA-A4F+RcGNbI^B;@+P0i(gwlxXb?IdxC_j9OkJZzSkFXAObqWClD zX3U_UH3K?E%HF38>QOxSZ9O9v>U@(fhy5~)tnPF)t`~pcg%;{$;Az{Gyv0IY@Xxl7 ztsV-4_7E&~@M;TNh(E~G@KBY4BK5HrI7y^LWsnH2jq?VFSrvN%X;g*GBO|J&ki{D{ z#j2~>WL7W^!nzR2FsQHgfAW-(cu)279%F3gQ95sR&Tz0f;EfO3JO|>@NVLSF?3P}k zZ1Ii%_B5&r|I#u{3k{&OZcFHmjN&Tlmmzw=7m_VkEBLAn=7Kx7Q$<}Ki?UBbJj&qS zbaP9XUu*`cS_bgJr7@2NbJf;R#O(|VT*x~5OblDx+VC0QO=B2+22W(M>Bg|8Y8VOf zL55k75JT9(*UVv;r~Ak9_?OIK$J8)$pUWJqYbcql##$jV)>|~>Aq^dT85)X1JQB>& z%ACPOL+0ML=CDDAuum+9m^v83#vSM1iTVnrz9G!KQbkqa8Sd7L+=LL=CBQmnQVb+zk*O>o5U~@Gtxu=Dkp^4_U+ESB~pAK@_Vg6E22IaLgE;D-8#q|IfUeA1jIvIj%1TpwN z#w?2i%5_mKv@1OX7l_CKOY_I!lecrTIHegovH{Du9?kG+8dDV8OdnyhQj1g0%2-`F zLyU&ZamdnGm(JDHLB1TV>gVbyQL?8ln8(4vY9>@WLt*+cel$g@VYr!s69G8j1lQK| zs5)N3rhY?7z6^)?2(M%BfRg~mJ#=C#g0Gug{4^CG8#QCYg#lU<9HrOkmeqVp2HSub zMK?4g)MWuAx#Ji-U`7RR2}D`0{gM!3pPhB>hl)9UgzbU74~FoylXbcjJmnmM{UL@$ z(QyhFor%MjIXA=SG=riY439ELWZBbx!o_{RS65xv15$*p?@-j-$Nz((mez`DPs8~h ze-qyGak0g%$ErB*UfebPrQ!~x;|#pGc_EaKX)c5^v9S!`|AT%a>mzYA6o)3foauys{oUA4{Kb@~)ho76&|u4fJ#qlTFU=;s%p zoKb+976B3_GpCmO;vebiH%>$G4IADadOk@#D1@};3f8oy8BqW1s~3`cz0wN#`ATSx z+CSWa_T_dq7D#zu#v;w3{m13ClJh#%UeBvM@}jc-@wr}USMjwcil}8j)}OuWwn4|O z{nk4}++W*D&Z4DiWhPkRS^Fd$%LXp-fP-V3uT zeD~tC}`yN9nU_PeON`T3}a4k~TJA zDCiub4+Y-I!P;m5KI-@7OnkvAJwn8Quos8JVpz-fwI0$h?*gh8=DNJI_}5UvLh1~L zQl5R()YJLrwd)=vpoc%-#~JEAd0VKF@Xn^G_a0=8_c-yv_`ZTu6UnT}e)yKgCC!@7 zInai|U$HO+Co}q-HyF{^E{8@sKom3t%;bAf`XTJ*2;P5C*nWAqR) zLz+93q?WlPR0+|?P!Ci`P4)3Y8=rf{s71g{I2=*cdtr5w48~x?7`+$XN{6x`Bpt7q zlE>)ly}>jpL?5Q{kkDc}IUokDLCD7-zp2O z(bi6BZEY`$UFL6V?=FOi%oxyN_FZE&Fz@l-0p`IdUMO+%`KY_ zFYvPU%bNh ztIQ-}mo6z**sAROvqIPz*wKW;568)wczXz&0GqKBLAzF-8%7@=ro5AAw^01%7Ct2raF?6umgQ-+^T4kJ4hy4d3g+A;b z4VAG&swx!A~FAmK$MS2tQ{CYthjh*3}Re)YBZ+*bvq<&Ky?R5Y`MQnlK9K<@;;A zzwA3KJ61;wVJoVbd2TU;HMNxe14CGfC2X1@EO4TkXS^DQPxXgG`91&E_<4c}LY4tIJ)Nw-LxaaoclWtqJ4)D1ST*q&3JGbqtNVl!=i*DP) zZny0*m)kZi$!)9is@wKKC%5egumw0D>$Y|8?6!>pHgv)3hf!|Z+R1L)&f#vG8~^T| z=(cqQkLEAAZEqrOZ-hrZ@3y@#+HL!AsM|JdnA`S)3LE~d(%o%q(c5hc1C{}lUv7-s zR_+xU$^TfGrk92d}rh?~FNIMVV8-QG38N#zr4uTVD(||{N zx^0I?BJLQstx^xS?d4u>TbptC8}wNKJfMk@oGZmZ$bMJ zzZ;?42Zp$9m!E+y2ceFD-+(posGH|R9!;P}%I6YjcKq&uxQl>kBiy!Q`1dOy2yy=y zj52~(G=AqHe@dg_5$IxxN-G0hX!IYWAvbjQJg^gSg3vxl*N=7=|7!8He<_Uc9m>!W z<BTCPH@|<^>N!8fcEd&7t8!LGJAM;-Sun{j3-O+V@RvpjS`D=OY~=w>037Ox?maV{oie5C?8`;kkwLgA+UW zW$42~w_qmaerGT`VDtH$c6$fzTj)~k9@cjzy#u4PPA|eSZM>4|bp_$dKr%UL!h5+n zN!1cYI=l5=5a49^pFSE!+)k{F_MclThJwoiYt3tz& zQJ(UzGODrfmLa2H`ip0jzJt~S;!zyo0W7T8BUl*1p)SRB%UPX{>y3pgW1KQC!1*(5 zJSg};i$3YaV>p`}g&B@B_~&{8-rD#Lu6X+4^TO+5*^cv+kbM?OBkoDo_VS-a*E)yT zP)vK;Ggxh-h-FbkY$fyx?BkqWCdt+Z@28ZWafQyK(2WIF|7RS8i@@79>5UOTbwo%J zKD}s~#G6tfW@UXf!>X)csuenCb@y5cVc#7hWrgrs31;8WU#?)(N;+<2kf4vi*&BI0 z!!gz5ThM~DE(}SyU5vXhF)SB0{^ArO)Ir)vCT&oXJRD&pep?-apKC4t$W)oT7Hjoy zPuowGvXfEvux)b}g|YnpZH3PloTzV6?jsHV8ja!Zyjl zNfYQkcUj>Z0nV+^4azAwcv3I_KGQ+Hqx?A<^g3^JNW8}#RFPgZ3(WtPUZ%E0jHZXQ z<2{oQNAj7<{V2FXu-dx{{lRR<^~aBZs`{Ia{fFZ8mk=y82)B)@3MmyE{v_XMdI*gw z?-s5|`<1p=C~YlXV@41CZtLcF0ko#(J+4K?Puxqf2E2EllAs920#B@`w9LB+6cajHtgyA zNp5wRw5O>x{`G7Bs+d2&q8IZJeyYX%Z)&{KKPY3RyOyy68S3`1uqW{k4LXmhO+X!V zV%SeXXaYG2!Lh7=gcw~)#y0jx#=uFI)AGav;%VQ|oz9!u>S%7<-N`S4wj zAIzJARN+@WH*cfu-Mj@WdIRXe*$fZAJ*!TFs{3A-oz^qe&rMqGW^m0Th zDK@DUJRL^{Dv_{8F}mu37hHqj%NRay-t&^-<2)yG^=Dd7{=ZAI&g)ExzURP_3q|PCijJDZ$UYI z*pOtrKe{6j=L4rGQ@g>Ny$vTYe;EeJy7 zLFAL$=LmrXcXkYXZ_j3BJE+gp<+t$^mU6X)V|e&JM2Tz)&bwcxAGnsw|K6942ix%< zo;bwL5`3QdYehVIL z&xd%E3-D@l@@4c?rNEnf3&k$rnbPs2n^W4@@_n%^y!0hFrl#(9BB>kZ!}_QluxU^8 zDOHreM--?%g1QFp6KYwMeL7+J{<{(+d-&zi+;dWv@_vQu$tY2 zW*N;A?qN@JR>~#vGuwKYcWfY^iG;ev_h}eb!LeF5yQp?E@)pl z+2$&X_eX6>-LE?E;#L`adF5kRyUdzjYmb+(n?Wb%8u91V9_JCtdK{Mn^Rurx3h59u zA|{n%vDe$%@;BfHtPg4OKOTn1?CIMo$cFdi)nDo~$=d_Tr;2A3E>^jy$>#Bk)y*Q- zyI0%OB__Nl`3RS)xk0KNlT?|75N0E!x`rhAt97A_GU@XCdwm5U7oo3-jqjqb2T3y0 z*ASBIF8V?}d(MYJIdKtX?P)3Kr%)g2u^0^&qdse`4!WXA*}TbJq)eg8Bq={fni8ZG z`qL&$SO(&h+n5K@w$0ym-y?`-%qaNWLJ2&DRg-FY3Pa&OnErIy`e2ojg8yM^6%p~d z=%N!)*LGt258Rv+Xf?9=EUiY)X-`a@h4p~p{XqxrcV5Q(w~O&OUm-}`z7Vh!e|1or z(e$tsnPB~p_CD8MA?9?ec#c96FH(r->voP@aN{-jLRMo|Tk?jRe2dPNzmL^K{!mY0 z6})WgC{)QsV?$UP1vor~jgsnl3Lkd0re9$tJ@`m$>wo?i4NG>NbtmEgSGc#J0Qy*V zlr-x3HFzIsQ2J1&6=czbP!_QANu09aTb|^MxsZii{DEvYc+}-zGRI17KjpB0dMVqm zw9KJ+Tbwy-j5be$#}=fa!9!mv8k|V0_P|=yMKkfrFqZvT zRyV_RRlM&|Ds72YGL#gP%S}GkYWy8G<6J<>n=(o^CEH#z|9I$6w^*E_L3G(3*ta$Xw5mfBLKBYr3O`CU4G;Mrm?kSoW#8#_C zrz-{2icrzX==;>7i>vP0CAaNqe~N*94;#pN-l1(Tr+TKc|AaIpmtFs!#e5yajorSn z_zvKUb~JZPe3H2FQJLoTl)sB-|4E2|VNJ9N(SV^lL zb$s~W=+}dE@ z$X6G_s(wpe2!Bp$rRHz}NvJuf?bWyt_OH*2)$fMa{x|wP`MajyzP0b7-vE-D^xK-G zE@6=@`ac%ON_3EN;M(!Hng@LygX-r-RJW(md1$3$Qw4K#U<~=^9QLj##A|9Jx#JpI z><=3BZ*AcBpeXA1(cOyDl3EBAp4I^$s>xMd@_73; zX_y+wcSv)$@d6(sXd;I3Hu%39Zx1qcye%(g17k-skGF-SG#YOoBkBIL@%CTnuQ>!1 zi^b)&?xMd~l92T0Lz=tkucYxd_}`7U)6Qw)4iqC-$<@7_^ho0Vgfw>)SFT2dob`#Ge! zbF~}w31yz6m*#=Po+a&DmDQ#`}oyhD^0V!i)-44lbsT&(w+{M^%i)~uQjSUs?Xd2lbj=EuN zOb!;t0Xlq}5X>%}QjG&)rHeN_q)dUTN;EdinP)II#IdCsH+sX@`rS|8KqYg7fOsY< zl#QP#85hthQNJ|#C>No=a#+X=*#=ja-Gbmz2zI2@>tv|6Pali3ef{E!8u&ssyWyW^ zbJ7oFa~(EFjUU6V3JO;4gE)s6_{-pN43zN_WvxWHAW@o5u<}WeC@Ta-afe{T%2#W8 z#7*&Ti5>f8u++4|O2t)``ZBgqVD$222S(g%?AxuSsU@B5IK21uJDN$}q zly+`wMz2Ve%@XCRL}@X}%4fVpSu0U`y<$x@Q&6;GZoS7^%rDgl#>yU#Z4!I!6tq>X zzS5BndwMSmUH@*V>pjJ!e_TrM5a}P2)1Oe&7jhBdII0GZYEKVA)eakkPXOvdF|71t zYtcGNl&KPBt3 z<G@zL6-=)2*o#iLy(g z#AR4hU6JC{_gdo&7ZgoTRZtxBh&)?LvQMG}&#LrP?TB7_eQ5wBrhSXe>e%?L8vkQc{6+_d=kqty64Oz|U?&h6B3 zx;AdE8P?BFsPSv6@y+Y!C`nc65@owY2@vWubm9&YC0U|;DN(LVlveLpE8Hbf)=QL& z66LXZRz6!L%1w#VX1+DmM2WIdqFjxrZk098T#53%M7if%6x*z4uuDW4Fz<(QTU#d<<*_rY*z$!WC{?vz53H_=(%r|5M!G`wVvh zm*AcwunEWkjsxd`+d#dgxMv6~2Ce{&z@shD6Br7N1?B+DfX%>e;3RMXurJ3wSzs3M zIj{>j0sH|J0rerv6F?O3G%yB824(>t0_%Yz00V9S!I1j_pcBv^hzH!j3}6AU2FL^s z0%w4$K+r1Ofd!fZ(ZDcZ9PlQv1h@v&gsvU|Iskou5r7Mr4$KF(0DFO-fC8Y@YPan{ z;3;4*@Dh*$ya}uaLZRCSf!4rNz+m7dAO(06SORPUa)9GN$QtMwXaRHu1_BAdtHA5P zBH%M%2XF*nzzrZ6_4feK4Cn;J18!jBTHHkj@`1mBy6bSC8E^n`z-VAH-~$!{>wxXR zb>M!qhsS`9KtEt2;04|TJ^{V~eg&=o<<`4x_W@0S_CRl7I4}*E11tkJ1LZa#9?%4E z0jhACpIVy>fI<&E=iQ;!>y@amMEV{ zlzfTu@N-r^&r6i05~cG9YpPUG@=n7GS`6DM0!=mc35?e9v$^8#wTVf5Ff=KY$Miaj zVLud;cr3Sgcfnm*+8sGs6u_-@wTexjM{<;cbvuSVI?^iS3le3OL}3!;!BJK|BPGg5 z66KUcc_7}(XRt(hSE3w~DAk|0^64*8-V_uChJQQ`!4}^ZI%9Oil^eO=0L5&k`cz`_ zheVm|v}XNQ9Hln9A3db~B&a!~T7 zoM?^ilqkz2${C4LFUiVhtwgyXQJT7}sS+g03W;)7qBNL*A})c;v=}xT zKQSAa2G6mu*!k=8=nZxJ!{&rMeoj);?<*P`%2p$)xs$IF!G`K)66L{()>4g>C?83b zQxfF?Y2S6QMEPB!G@4}1JzkMiPC7Yl~24xSt3z>ktlUu zwelG%Q5Hy);}Rt-*~%wYqRf#f2PI0#6f2)z5@n`D*)36mrds)Ql_+U~A_lGyR;^I9 z;AhCqoY@k6AD`kcUlS49AObaU7@*Ht4AA$Jy_ZMMRwD4d>rVjsL0||E9}0-tLkVSWZ%xL!x*jN|r<^k|^y{ ztW`5vqI@Ayu1S<9QmuRvCCWO9(qWo4RkB3+Qlea!D6KqJJ}!x}UZPx-D37IC`MfAm zK9(qX66K+EE1yvkWwAs#Em3N}X5}+PqI@h-@+8Vb)2)0)NtDGB<+MbponhrOM54SW zC|G~sR8OzV*4bsRl%Rsw%5gDK8nOJN0|v+$Av>G}W!4#{QHiv3qESHOo;F zWwD@`vaEnCc?X`LX85IUJ~U>ySz>loqO?$~B8-h8P-+9>9P0Pgl=x!yg5YyEdyFrjw6z8N28v3kajgTlGN|c`^%Kg&T^dN~cU!ok9 zD5Ip!>ctY}v_z>bZA}jm6isn2!5I!63t12Qyh(AVxV2gP9*t6?%|tX=drwQbydzN# zOO*A}cK1bzGE3UZzW*(2y$q5l^Cikd(iZe6iLzLtoR%oH=UQ_gB2nIxC_hM)d*8P5 z8DODUt<8rwRu7oHJq!N#_PA~3_rjJ6JOcQ(!k+gvd@*LiezpVt2fu}Va2ITSU&7W0 zoCOMj3SYTxwSY%~zQEhScR+Qd4+k7T955P~3@ilJ0o#GYz&YSL5Qw}w0;#}E-~(VS zunjl_6ap2#L0-V4KqSx?7zs=OGJr3E?|`3yi$H0}{t(ax=m87?UItQuw}7R<=fE!D z1n>t?1l$9C)B+v_B7q*j5MUi}7&r%92P$rZy%l&2=m_)!h5}=OX}}y{8L%6;0NA#} zuO!d_XbE%#76G3DJAfkq18xAp(D?&EGoTaDABYDQ0Be9u;2>}YxC#WJerfbw2}LOCO~^&IFJaW1MdJUfiHpYfS-ZeK*(;`&w&i2YvxA17*=R z!+^#>JD?ZvEHEBO1HK2Y0Ugk8`v4;V7cd?87}yHj^BwjpfG2<`;AvnCkPOTMJ_ObS z-vUR0Jm4l!36|a3Ky#ooFaU@|`wm2#Z3Jvay`BV8QD<({Lv`r1F7)L9d_X_wWE9{9 zeg(#%Jo6#Xe|8>w(Qjm5ZWP74x54BWFDQm@(j^k*7l~4*n{}8NDp3|ll;aX5tUKpp zS_%xq#ArBAvXqI5U{JB=sUIqa!2_IucD{F%n!aYS>01?(-h3Xrp_;z<^Vm@$y+M8H z5@oxZhk73S&^hbM?Jp@wv!|^3eMzFMmMFhVltw+QeBvd_5{dGQM5)u$%I9l|a!XLO z!x4X+wHC8Uv|QQpdF+iySNwVGh+@*q=doQPeKF^;d#LGQmc?E_46{%1sM2}tL=n$W zr|TrjpAzMfURD*2kti!A$~lSBu(y@Z2#NBcMEO~w+#h4*Gf1M$mncU;F`dVL@HcBU z2KKQs?j%uiB}(PK)>J(u$_$B;BT>rsv-0U8QKm_hOo?(^qO|L8<@}07*(_16N|Y7@ ztbE4DS}AKK$^}8ude5i7TGf7koR!HSi85bMG$siWlSTurOyUKFmfh$SFl;}8M0Y!n zeUBQa`19E7rA#hLl*gX73bIwA+>|J7p0TFNmMEhn%3Fi1sSXH=rl(H7Se0!XY)$f{ zM0r)BY>_C15~bx3E9V^&rPNSsoJff>MWTEqQEo_-*26ewt>E2HTMPcY8o_uj%zPfZ z8q!evDE>V5L}Lb_jGeM(uuMcS46bJ+O1)>T<$qS9d>~OyN|YMXhU-9ya#o@=c+Q&p za}s5dMEOag)EZ&s^Nd89CsB?_lm;WMe4djiizLcV5~bECE1zd1$~=j3M52VoTlw^r zD6=KXK8X_iyp_*W5+y^T?35^hPAi{I5+y}Yv{5dE_5Mk;;=7;6Zm7omr{}S+{3tm8 z)AQKhs`3BndF;7r{C|2Ldz2c#`19DGOX|ELQNks4j*}>#N|Zk&N|VvniW)6ZmP?f1 zBuf1RE1%&KWuZiQWQ;Y{7>Tk{qMVZ`4PUVG86iidRsy>Fkx`*4bvW zl;o;JNgHp?Xq%vzzDf<}v8y5*ngNSHk9}BTS2fX^K_7`SOHfQ%8qQ-c`axt_{CVt; zBzC7H$^%JOAqGp7cO}X(iBjEV<ZU z6RZMumMEzbN|8iqFE-izDx7&#sPHc5u}7)V zia(FtN^mtS$6OL+y+nCK+Nj?zQC^fb;s3k)$z`O?^Ue|_Rib<&QT~=F5mT%+GfAR+ zE>W&Xl<=u$K2{6)`VaVd?D@xVe)U(J69poGXrRg=*bNWE7JCHed{4j@dlL4}Q?O+o zge?>33Je4ifLDRnfzNBr20%-o8}JP90x$(w2>cAxMxIf? z)4&)Y8JGpE2fhW40(rnqpb})O4KxQj1Mz?xm;o#R)&K{AGr(0K=qT*SKvUpJAO?62 zNCI91<^ijKuYezcKY;+~rXJ7&m=1glYz6iMr-4gAnICZW7kC(W3K$H$1f&3O0-J#2 zz_|_%rO|z+*s1pda7` zJ^{V~4gkLb<u2aEzH0*lbb6VaaE0hXXXa{v$O>{Zl54d^r+I*S7q0;8ap ziNJfn6(AjD`U3L&$LFzi|0TJ%$X;If81LE!dwI)d=FT3&k|fG!5~V<*JlfpK=LLzf zN}@19F)b4;_VU9A#k5eoz5H4+49xcOxoZ02?d9bj=VF@#Fx$%qsOgKhm)|SW8|Iq< z66Gy557k~C2!_K<{!6w=No?U(Z9XYcUX>_YBub$~Y1zWcIZ2{?CQ%9`%Ii;9`Ro-G zZSi{l0c$aDsu7H~7};L_TQ1diasEpxwv_8iwwEsz>5H+K*HqK%_VQPFRLNf6S;RBc zX{to|Mxy*JQ6gGdRWwPWd@fP0NR;r_RzBk-%BK?L4~f#Gjg`-6iLx9Nlf684zqJ|< zNr|eowK85LQGSvrwIZyko{=c?B+3zq657tnr>{hrEm8JKl;HMOK2J%M42iN+q69u^ z<6kjK6Y4%8z@|~@5-jOIzNR$y>tf@W}6irX#_ga;mD zQD#V#9Eno4tCi0jiE>b)ghW|W^^zzvCCYAz64Z_J(F#6kkG0^f)Ck5g+H5a(AWg~k z@+e~lp)5?wV1kHXXdD|P%3l(tS$AvsUy>-RCCcv-rIECwyh);5mMD++u;xBiqO6f9 z=Os$xo>o3iiLy+hT$U)0OPjT0CCVC!a$ce|?j^}1QI<)RGZLj~sB}!>YogF30REe@xqTG}yZTea(YNABhC{Zp+l;-`cd|s9) ze@m2z{?=5JB+BO!<%&cJA7JG(PNIA&QT~u9O=7KlMoX0C66H6EQa{ehXShUJC{cct zC^ZLK`HYq*%O%Qh5~cprRzAZe%0h|qqeQ9sjFr#Rf}%}lt9DqYvkWQ8PKnZgkd^J5 zf@1n8G}y~KBb$=#MH_#ES5m*`R)>BxfTS0}}x+@E-69@D1=Q za0Ms_dF}(60PTU^z;GZDcpF#&YytKHKLMpKKz86kpf&ImFc^3VNCDmimH?Z89N;)` z9;gJJ)CQUZeSwj{=fDZz51c zBm#$kvp^wG0eY?lJPJeteSwj{1Rw)=7sv&E0WJe&FX5~;&=_b3^a7p*#sg`<+rSE7 z3$PdX2`B(cp)MZ;S_7^tIO7a_3~U8X1DAj@S7Cz&9tI+SXkZvH4)6e906zkM0s&|j zRe@GOcVH0kA}|$L3~U6lfggZ;;BUZQh_lx~C!jwN54eGB;0GWdXmlO^Z-Ab_P+%-D z4VVKg12zM@f%<5#QNS$VLts7dEpQaL2~@g?HVL?Z>A-y8V_++=A2#s2bc>i2XfKQ7o%Ng1BXzzg}{2$-)hv!Q_$%M=x;i(AD9dMEC==g4N>lm zC|4e2ve?VTdlTw=7}|?8c+$i0D9t~5e`xq?ny37GH`5?Y4AuMNOMO| z`KmvE(|Z^}^xl9`JndBk_(SqPj9`6iU|YKS*ueF#xO64Ihry;pD0*z5Hc9uNy@&BH z^j8-GiuW+y`Qk46>q-)m!~SHXxtsn@(^}l^zpk}!7eS!O1{7>E&X!*dudtV^7tLc4#iD9@dXL?^CguRt=_xA;A zmHfUyi`J(11soc;JG?JY0yph_fhzZMzlp}j3x&TVdh9~H?8aYx)84bJXMR7z{1<;s zA`Guv+Bf|_?!E&)s$%sF(ze?*DtH+EX5KB2kv_;s<5?5$kQ>e})gz5}~ zYZ=iKxDFb&0)$XoYR5P{X@Tdu0T&~(=zvQeqzI(h6brPrG|u#$QkuF;xyb6Ss88E$ zAMpvrmTHR|IyfNoBPZe)V|X;o^R3qVV;st@6ec_%Uf>=yXkQcOR_*Tko8|?8ORp&) zCSqx-SH8};*;w31ZA>+7c{L}>aLp8~H+a0qCW4;$kaH=b z>GA*Y8%=`$alD#vz2NYdQj}QCjfS)V_97xzWm1B|2&#CWUr2dQNwHxl2_%UClWL;qcqRC4_o=efl^`??&dlXGGkQ#F96h$tz*WP6+h2lvGs=Vnm*|lN8&>v)ikh9P z7X2~60;7EFV#fu<*P`&*x#~6Y3&c+MlSBCji;uD@l&v{x=0d~*62c3G14=ESr@j52 z@)b4ozmdZK5pO&M{7=g-%-}Dr*Wj;R5Dfkbzo!Iwr0{i@t()Svnf$^GzAid^d;B2b z_$~2!8V!6!yz&tEyGDLt2H)a34S&!3LBio%>GxE?hxw%B*ot>Kla*l!?uvzOwYR&z z`Mi_Hsxz;&K(FGm=0TWT9Yg;TzVUrpjI)h*mQC$6n?7*1;4k}>uurI3?LT}UWd9W^ zeqU@;?WB18zIVGBcT(?n*LPBlh~Ky8q{i*9Yy0`^uiLlu-(OqR)Y;+p*RjDjLKJQ9 zvtB;?>+ffY+CuEFO=^?->o?*e-(QCsUrW=D@4ha^@%^f+KE97Y{Gj-Z_uy}o@fmC5 zF}~v{K4V9e1O`}$Ms;SK*K62cMG>&E`T2anSyegeX}%R{vqi=ir{LX%Hf67p74ON9 zmqDgWm|G&}LQj^|`mxyZTGVzadg(ezf0^r?*)pd5!KcG4$>ZjVC3ywPn6Ghie&^Yg z;qkeix$zE#g=?o6-ir{)0^H$N&u|HE5IIo?)?b0Tc$N@w)~yPF)i+w}syP6W1e~u? zgbO$ml<$cd1#E!@yg~8%Bnt}F82oOZDe*hv*#MX~`vjf;jnGOW&lv=>smLSYMX**- zMA~3`(L+Sepo>WwU0lw>RojcOyj#N3MxI&x);0q6?W!6M_Wly~n^DFbb|PyIKSItD zNjC#U&#{%Nt=$zd%U$XaA)Chzi~r5OAVX#J>q%eAGZWgvQe$+?`cO5|)OaM}LRjGT`newzW_ zTtrLWs^0Qc82t7mfC;}7Q6>`nGLaaEJZb&yMgJmtZlUDb5P?{b#(14HGL59scL_)X zsMdLgKZDDjA@>~J!ZElxgj@ppMU*iGTF|eypOiaZcS*c~nMHJ7_40Bb}DH=XHfogr!@fP6MoafVF2zY0lo=k!r_+%8yE77Bj`RO zZWQkV_9s}tj9tjrx}d@Dk_(tWgB>$XFxcAz@$JiC^9jvFz^|c5Xa=jTzb=Slh+}P2 zAHKYa@cq ze&9e;dEwhB9Q-nMT{!ULB>02FfiKrH!EcqEWc%77Nz2EpVj?nv_ViuCpafx~k0IBC zK>(8LM1OlA434iMS|A)hgfgZ$*46_}p9~n4qXJ5U7!$Zw`P1uD*9(SQ&hcl?a5oX! zh+h9jk`V^?|O0OMB6s2x?+a$m;INw%J=}s7i*4;GOD=%b>@px7zPm2F$qY zTP*15u8(sS;;kpU0o1PcT0Fp#9 zojoWsmStKvlcvFU3nF{f;e50P|9IQcK_*m;N_I{07H2!pP-~9&JcxZ`gg>rIfKi*3 z(9C(2XSA(uZ^td&%9No4JYxnFmpCu7uNj)4%!%KrGLha^T49Y{@0k^sRx>wg+Kq6I zIPI3sXlHebp&hTw<~~%fY|T|?zQplB9ra}FP|6Sw0w$Lf&a9b)|M$B_~rzgKu+K7LQIj2OSWStg3{i>c*M9-{HfWaBrAkKcB`@tZHkuTYHN zEpch}p~vqq#?PVtTZ~_k7{Bc~>RB+ojcEM94SmM%p2=eM{zPNc+TeZSGk9;)n61U& z)u2e#Yas@Y&)>lL*FJ?~Ciwh2y(rB1y-+B|Z_;)#ej9OO%EzzT%?k7J`-Wx2`0Zku zD8{e#pB&2LH~)SPoPRT5xE;~>`Om-I6ZQF*bq_&K_ITP5`p&;v8abMOXHSZ3{waHz z?M_;%y$FjXmuU-;n94l@WpXn~zrQ=o2==9cqY=Cjr9yB} z#y^v=yU19{! zD1Vr4KXy%E46ICT$*JF5oU134kvMlQK^L8UKqK&X9suOB@G3AqK0i(HmrD?mfaF1$ zaQKt*9PKyaggloQ4>SUajo3dgxl)3A`N}Zht|B}VxL>18NN`D>ei zBN7hF#;GTA-f=GW8p`%@>Z6}=R2|_^B#raVBV2vYv!QV%_6JPA!R13GGf^Jav=tu4 zUII^6M)g*9D)VegX{l;md;m{MdO#M9-T8z2TT+C_?l5j|Q%llH8OP~ZQdb@eL6}sY zp7i@^bH37CeKXb})d@DNhasnT{uN@ryoNGi=S%SZJyS)E*o$6lvi`AnXnOzrx65;K zg@E`X9~+}}n6G;0!OPJr;;&^W5?a0Er%yAC-#zTG&0h3h8^629YvZ>f%=oRPVIzL` z6Usz9enKDgAq|*LrybcLoxSLVCK|_NqEmCN(JPlptO#=p|dfyGs^< z%^4kj_ixK-vxN02*|4iEQ*Zr@zk3$%YBPJqxK33@^>QEhTif`Ssh5jSxHz?6!M5gm z+*>AbYQK_kP;pf&dHk@7bWc!_VMAI^8&a&M*pMEf4e1ee{Wva8m0?3VuQ*^tArRN| z4e1eVNWZ5pk~ozN{DcsvIKA@zvi&IQ@1{1qPwxlxcdPp6VgBwZv;J;X%f%;5{faK4 zzrW*lx3Ry4dVg^s$NK9(KX;84^Rs2(z+wYu=xjapkv4GW0!3jqa6!k{A^KYq(BCq3 z-;ZI(cb)jeFuu+G`WwOcemh1V-`u5P#5q_O+orS zjs-8a7rl&kCUo6fd~!QJ@$hkO1#bYxan}27(EkP{@9%Q-?yn8k{T4LP)crv~TBz=G z`o>`~Ur%$@mmk~ahv7KQ||(WGNRjzG9bFuF%yMRNS_k%i|KcDc$HtI^!D+$ ztnvi_H3XbEPc?w*&k#$q8AIHz))%qL&NIE9cz84bq?N7{K?>Em0M7s?$(r;Z_@NFj z?H2@o58}E?Q{XoqK+_>$nYv_g82p|`P}8KIhB9ICn=91)4-)|l(QH>9ZQyXb1zi;4 z^v{$oeDUp18e=Zy#y8v5o=d`jK9BHBpudVTW}r)aOZk_uotYvLo(gwWgmAJVR7T;L zDl>_WFS7kksuuekUknLh4}bS1a=$yWkb!R$aD8ou))K;*{D(4;$bZC6eZfEY4F{jr zKmmRr>})>r{fBOH;ZNpYUd+h6Ol=*AbziyMLSU0z-k-n@uJ>T;eUg;t4ET=aVRf1g z-(3MWSBE^fAPl~ln;9)3J#TE!!e>*q?7HfCNP16IZ~4SamT!p5cU6RdyWTd(5n*gOC&QKIJBzU+<@C4B4}*(*8b-p!Ybaxm3&C$O|AW9QVFlP= zZ45{Ou!NQGXSMTl|9SItmRKJ4a`H1SWWMueGmRL{8!w8`ypejO;P?B2!`o>5{+cQA zJMGpm_-#)B6Mjb#z-C9mlE1<@kh55v2cL{XQJNTq@t$F})O}D94+QdSfaG9uf<*Y2 z=2VfcLEYxIFi>Aj#6VC#h%#nS3;KmUBW7)`GR$zP9Sjzh37%oWEU(O`@FN*=3XkEU znK|1pA#4(Wbtq#7Aj7Kuj|Q)%-v-RgpFsq$`jhO>BLu5IjpNdsWZMy_M6#C>sKHsi z9DkzMro-nYfRVHH(p$m|_$(S{!sjZKi5#DP^tznr6*$d{*ZmuK(oN_fg#PaC;T-Vo z>a>C|fUhN_65v0fOlZK__-pzCva(#ivmV>1lilAoc!uGmzmIx@aBF4Q4rjuBr*T^t zWc%;0?$|vHv?0#lmpKDE;47Nf62eLTI-5EW_WV6G{HJ_Dt=WqV>Wihr!ou%Q+ieMc zvUa^V5c|IBi-80@sV`=sNEr2npS~t2{!bUNbPV|4I5aH${`em^RLB1&R~Y=yBeXO5 z7o{S_KlmHTGfxw}2cx5%HGCWl{rG!`Z$EVPf~nd}8N&NPYO_gvGj8OFzI5~&jR5uI zdz1><56Kbz=0m1U%JbKj1VF#T5BdmZ!KWAMqp)~(m{F)9)*!^cfYl59-z{o(f`_6#=1USurn^7e63^2ua>X!ldo_wJ%wM2mLyumuY zcg_ie??r@W!uMK~iilc#@Ga<{ZD4i0OMN44U?XOK?!Q|E^1 z$r{2t_2fsC3fU8ef6aag$B}1VI|yfkTh-Y1+#FP4aPJ_M+9Dha5!WZ%D<;sgC4hdZ zr1LI>by@?R&ji&6?oQW7V%g1M;IE|tAo$OY8vYxv8DxRsStlhY!Ts$*_Yb|@e>9($ zKs_q$!h6Kko2*B#;Up;H9{JCQ80rzthXH}Z;X5CCQg>)ROhl0g=7VuO9=V#2$MCZP z#-j$uJP||hza9)v)5l}&%rN6Ig@%E~<1v(ql%9<1!FF}`Wa>wmdSd^8e)J06k32?K zX7l3K3-oz0dRCZzJWlwheteEnA^YL89vJLXbpH!R0}ynTO$eF*ngNLaW_;&BDS0lt zF#t|q1x_uYnFP4A3C>U(BsPBuK23i2%wqm4jNnPwLf-G_1Mrw)?*@)VbK(7Rf{uju zJ5eN*@D3zu@Co~#M&R$R0TO?4H-*998bTZ4??;pghd-__B@%xH>C&3*Y4%`5IN(kL0a2KQ9^o)oehiU-UO$&q1DKyZ8&&N=oOT@}N^pPMQ&BS<7oBY1HyP`pEiE`c~vbPs8^ZYD%a}TuX$xkG? z1Q!-+psCX-bVMlne4~%N8$Ip1Fw^OazJfkaN{xU%NqH!(=Z41{;I}ZR``8i<0uoB9}vF9ffDHh9tBrYGL8M%T*3RX1aCZ@yXaxRR13)hCEt?z$fBgtT!rx6O6Apip z9{u+pu#Y$JM!BHMMM>IUnQk|)Ia7i=AROmeMtCG}KR}s~;EMgnxLjP)gI&D(=||;W z?mJhhfqSw5J9&~WAa}$CmpjOaDo&5pbwo*Uhk|#^_*`8S*El9b3E3;(-9jqUHfJ%zHxt)4shwq zz8^5*&1I8kzd$VRI>HCn!;Dz{{nT>qBJG7V`Q4_T$azBu`5p8MS>Kamt^2a$u5LTL zb8PCGD``U5?+bMB#rdtz$1NE^;$!~azrNG*Le)3kme$&tLS=?o>&iQpbX$*|5sm|L zCbDVi13KqVhW!Sp))ACUl}uX?FC-FoeOu=#?)t>wBpb9SDBR@p=qOw#@E%_n3A|@{ zlMwij^@e@PhWCsFZrGQ+L@%Nt@QZ%%+m}qE8pOVY<~LkC``@3TSsfX|$zHqXer*~| z$01_9+ONBGSJueNVIW#YE&TpYki8Gh5k^1pQXZ#`;jj}R&yG%@yBaNDh_M&b_O16!~L(@@$Kx%BhSV00Z^b+O_L1pJP;hof4;%0UJ5V#8b|9u!p0S{B$L2h{w7S z7sb_yW6kdkQy^EnCJ10Tlo4^MM%w57RhuJ0-{@x^otwtsDIynuc2LoSX^ky|_AZc+tWni}N&PboX^rr%aim}{h}j_y+VE31~qoolYpC5w}7?fe9)o3rGN4wKB=4!!y+XsQQ5rn=%NEL z&R)t697sF6q?QzIQMTGg>=0+upE6%bu5RM$l+}XmQtB@DO~(2hbua_hUep)0In*4z zjSOl7ZphI_vTWm2-p0xPZQOu1s@nKg{QX~q2Yb;zGypJDYnNj^Bv$$fdu)IvvUWlsP8?9-s z2G?P5l1wy`=Bl6bROJ)+zys_6p|_rio?MC#z4>Q>;pg{KulN>EF2ED+)$vOD;7nwd ztaO5p9q7!8hd*`JILO3#D{FP}xoqHz;$*8f*I^G}MI$Fu9f#4Vk~IRfbh^j4{3)#b zP*HvpzGG0MJm~7-eweG94R^fr}C}8rjB{F+G$aDc&9Q;_4Qd2FCf){IVEJ<#2jBx;vU{qs^|{&|KwT zbnzlT1tXCMo5jkG^qo#8CvrNmD$T087Hx5MoJI#q(;n=Exts!L27E5#dlFnK8fen3 zVh5)7qE}I`L*0_3&4v$7N3ZY1Q=*Bja4(;uDu436EM`wN;*7r0KBCb9tkKK#MlYg9 zJNPtuvS>8Ev5mgZEDP*K8&IJ`{ieOv)6aUL(dY0~@99&2@SZ-vo;ISVBSoX5SfkVR zMki6Dy?q)zOElWGv5oF#HZ1m{y{OQk{(iF7(;s@G(RcAw@9Em3yr-|?Xk8 z%*u$=j`PuT#ik6gF3&y!7Fu=Eri>$)P%!+jr$3PQNshHbzFYJaKRTR3HI%7$oqr*O zwPyBWH(OnQZKn;vRDxsxYv&fut~6dt?2famt{4X54N3S;V^>+XL1gxfOrUEbzc96! zy{HZ!QpXp6$_pH(yz17QtM7s4wurA3OuNeWMCP0`komXBoc9v*p_Ql?sDPNK{=A`?TIT_SU29Woz_%(C@pbe+h2f>Eoa zIID!iPgf!HxX9EDMCLA$d6V80iOlnq$rqWo&j+B>MW&%05RxY{AGSs&M`VWGfHK2H z=DBA9PCt<;x1fU4MTYJ(Rwj$g-!XV&7n#{qrkTiGN15MiIn)lys3LRar6{vcWZq|{ z#P*`y$P=YP;oqSH$)-n?!g^dhN@D9%|AAuu<0~SyI+tp=bhPr6s|zgGAbpHfiA4GN z*YecwngYvJNF_+}IsF}aU4dlLusn{`>V^VK2c(`zeUXMDjY67$G!4mxv;^r+q(_lnL|TKi0ci)) zS4ck~)gf7@7g$;&bwWB5X#i3N(paQPNHdTMkd`9dgY+cQt4Qx4Z9@7C=>XDCNPi+3 z_N(kZ7C(<5dHh#MSw?yMTjZrY{vv)u9xs|l^7zolG^U-^d(@5|KNCvi!< zB8PFz;_vX-Ac-saiN&?fQ*zbS&o$#43>Peox2gvqx1rU~BazM9aUI)>4mB-7W1COH zK&I+nTr$6owe7s!p?1(eScnfQr<2qS>3!qQ`tBr{Z+9Oc!F(5Z>4;A>IqKP033k`H znqZDhSNEX?=c&1B{j(D81cLi?2DiQF6jba`U$$%TBv5mI;w^EG-{v9n6EZ^X{VfIg zuaVc}-UDCY$u>OUa_=ts;C*C;-0Pvm#8+-DoU)S5&-Oj|()0knmP>(wnB zlJ6JYd3lGSJjU_KGXo@F&nx`Pv+<>9;S6e_9kt*m`Ccu)jiGnCWqR};|$f1tZ z8+{cmR6fY6mjd`7r}9QuG`7(g(dbat=cuw$VG-@w>ff8Wywd3ze_=$ifMt(I*=#3%3`II#{EXCu%(%MU4*hY4nj~j@~oz)F=yYcv6#vA57-5 z@Q%y*WU(|BzI=8%YcE>M1lx;r_+A4rl@AH=clNc&+#xa_UBKHeVny!Pi`+^@riib; z-oU5YME2Dz{j2fx)et-lE(E9z2Q~%GBaBge<(4$-;+D(1u`ZM?kWMzREI}gyh_lVW*s0s-%1k@+ze znROzQ^9aPamqlhcWgZuqew4XOWKO3{k;u%LfkyL1X3}5COc$B4l*tpB=C7elj>y!% zip+44siI6jk@=c3r;E%^$|Q@-N0hOP%(Atpx|zsy*p1BZLM(0d7&5BJtUec+eIoPQ zqsVL*nM0H*6`32(1a{sMnXBN#zH*hwEJVnL%7;Z}*hG}^h)j=%0nQ?kQGdsqxgt|V zxSk?16YKEi3X%EcA(XjPWDZj1LXr7`GJQm5{!moVLu9^UmZ$cjQ;{d?hWz~HNhCju zi~C%D?wP@gR~y03~4`7B~mR?tgFD1fOIO-8A$z+Mj(wrnuv5G(k)2ENOvPWf%FQ}+ejOc zb|Y0F{fP7jQXItHM5HcA=OCpa`N+@F>a!D8sD~F`PXNug`86#y$+9&mMLem!iL9U)US3&pvPkYYO`8xaJyDsy^AM z&%T*M1AX>EtMCSbYAu`s_#Ap(j52 z?B(0=MAv7}rw=00XYV|PaA^;w&+bQcgwto=CCdBhvp?w^Ak{AuOO`>O{aGSf2&T`T zAiix{efIAcf~f}6XIDRu7rH*X6|UwsUZ2hFAEZ9}XpBbcU$;fCkCQ&T4L>$6;`;0& zz0n(}(c`4geryt_A+FE1>x~|1gGP^&KD(D_lGNR1vRefFE|@LcM%d+3dx zK#fMG&-UJ{$?%^+Yd|`VbZjnZ5;j_&-B!TI_1VQa!Di z^R~G@dzW6MKNXSs>=o;{a8beJ%~$lVTGLnN`s};KA(p>B`z7=|GJW>yOy07;|u*8nm&6$A~I5+{rXa5 zq(1vu%1C{7|DTbO`s@>Gk&*iB$Lf)h`s~RoAr?w~_BhH&eRd{gq&|BfWu!j)s;dE; z)MuajD>71_-IX#@pI!Vk%1C|oEtHY^>>DW~_1P0CBlX#1C?oaRBPb*F+5KNZ)l#3` zVKXvPpZ(We$Vh$m5IP5t`t0xMjnrrFp^VgLZ%F|Tq&|BF?N+2dyYpXoBlX$8jzt-% z&p!W7fFt$UFZ_TvQlEWe4a!J;_RZCJBlX!aR7UEvkNgW6sn0%48L7{{pdTub`s`P) z<1}K>XI~sk^0<#ayKXe6oL7U(Snfl58;SB4&*!N{L4oBgq?JhWIsI*Y zYk}oTd_%u)#b3%(`cVAtg5N8V)*-dOt-x{zQcPiiWgb!$lCq${@*vU&NC%N_UI=|O z(ho>=NY+KD52+Ka$+oz_ z(hjLB(z!_KNEadHB3+9#3#kxk1=0gZ&mz5!^a0XVq(;f(&w5B6pS{#i9-k~9gp$W^ zB{%V$b3Pd#OddajS@rwLh8@BvN_&)HkT#5z6B=^%@u%)JBBz_}j1lljZSSVcz5`j~A5U zi7t;{NgqTckDtVOOECKqsw1pCF3S7K;};|b$m3I2^Og+q_**!72`Z1LiEo=$9{-rm zEQ878+y0Fgx;&l@pDvA;$Fs)s{&M@08)`K&`~W9M$4egH1rr*Q?6^FBT4# zB#-BbM!7t`P;d0JI5c{kaR-~=W@d3@$_ zO&%Wsl?BP;`ADkA0a z>Cl7{U2%ClS^w&n=J?879-kwQ%lzf>4(NGg^7xbQ`N-qvwe^w5@7B9Gl^|)fJbu?j z9D`CGpZ$ta9`B|%S8qjgQXYR72AsM)-VzxpkI$yPy_CnVql}ct4}XV@l*d<8AtUAS z>>rVl^7yP`h=o!fzm_sm9?zwWl*cckjFiVO%>`^y9`_zXM#|&AQbx+-%^yG+DUa9R zkBpSZt0*Jo@vkW(5Y`f zH&RB*)4stQDUVluk1|poUvL0# zq&(i5%1C+KN*O7S*SV3A^7sj)u9xz7A=5ef*q6LhhbtGp^7sQ2LdxR>Zs?tndK5uM zMWXzd#XQ}Q{Ch|#$jj&S_o=0joyD^g@tg9LMvK3%<8R8c0?SCGRY=LV7g+8>YOx&h zJ5t9L1(se&qmZ0PeW3cm<%g5XDDi?m`^-?Hv%{wr&46;^RQ2o z;rq+mvmI-Dcm5hldlU}}_l1?=u;@O5kk!mHYAZI7C9V!W*Q$5In>*cPU~iQnd_>dj z#k+7=t2k^*mNjh$T)vM^z;%ex@rwqf|GlJ{#S^~*mr$H%;8j~CE5TiA^;nk-L>Te) z_Kec19(3o|_fZ>TC5SifNnA0O#dj;){|PP(9r28|s-Lai?-lhcJCxDXv@fC~Gy_dk%?SADF*j*+r&#q7| z!M_JR*@#q8ZcoT4Uk;aztuxBiuamGD4Hn9-93Jw4eKoHQ3>&CSHpWOyu+HkqjP! zsa$=E7p4$QWC*4TgKcV=x>Oj;#?uK($I_}ci@u9-W`hx=mLNj> zh#krablro(QkPb?bsvavm&AIkL*401EY6LJJxoqQBGDq!F`F!)}<<|wIar29qAd;!kxa<0xNgtxurj}K?IP}Z>_OAJagjG zel-ue27Xc1EVUNYpp@mR{nEH-kxr&V**3(^%Tbp=l9JwnC~{sNi=2n6cQpg^RPxzW z?Hpa3Q5{Pm3RDVFpsJmJOJ_d&2=BXvjZ-Bobl7Kzo2OcQQ!)66>^HhW>82o#> zrD`=U61q^bYL#Z>XfyIxcl7{%pN0;6_u|NRdEOEAqnyDQU!}JvqajCij2mppb#H<( zlef3GznXOW-&pZ%sh}$(`FWL%M)KRLR=m#TH<*Z$ebXqA;6Y^+CqY#i1rn@g5fUpv zf)y~Y00~y86HYcE!3soBggvtQrJa#rje6H)5e3W!J86mnR-ty{g^2_!)YdG+NU%b+ zvP?)4R1GA!Rhqki~{lfHyyp*>Xr6p6u1l&xa^oHumP9%xQvvX+Gr;pQCmuU|M3ZdTw$ ztgu|k`;6|h9>o1md7m}!AZW2rb;8wx%4qQ*(c(e%o*K|%Z&dq9PeK$0kHdQq;X!K^ zylttR2oHh?-~JV}N8Yw-P$aasEpflAuZSmr8)**D0^9Pu`m|Vk(NH3z7QQSmfaa?I z&1o)Cr#X-sr@3lIbGW*Sh2$V;4&9_Uo(I*#ZB1wnERsd=oYIQX+!6KEiGt>eaI#D^ zcTjza7bcoJs6NIrjOGriD_JHa%~ku*T-gdvbJ$WG51NB<&!!A01ArmoddEa_^W)O~ z2*LFZ6W60lv#gdp_RjFPE_omP zqxtZ@Za?X~kH=#rlEWvQ@4?Tcf$wD!rIBB;LX-;WSB%{!qwu&y&!Qn5E!Sl8b)bH7^SJ8H1v)|j8zL;n^2l6D6QcH z5##X931Wdg0rojO#^DfNn8!FwWf>9U@HCbQNomGdv1RJ#k8(=Gy?3xvwKF(_I|EG1xjw5o$TTRnuA<7@zjdDxKbzb&)L2BtGVz9|gU& zst!+Yg1I?7qpWIn=W;LpD)s7jov@9p!4-u>W&)k~F%yjw`1OQpA^h9q&O=+kN&XkX zSE#kf4$4p_4XeG~_08wS(|wwuJB&^24c>%b{f}w&r^@;{ynXi> zD+>=Vn{3YW3FeDLo#pB`r!pM;#&A%k&N`&m`I{?vooxQXeo8r?HUz2r=pF(tE-8)_ z<&&L9m*+L$wyN+^zMfq746&t^+uaL^2X1j%)5_;0PWuQmcv}5$xGq@!2d)e5p$$Y< z3Ry+E68-NIikGaWc*Xi4Oul=Io1^JVF?b!6yd!MtL1_k=Mj2)eVqJ<=8xk3=S}EHh@3nn__>D7N8J(h(5^zeX)5hSyegc01$(hQ| zokvk;ZE1`%RvDXsJGo%E@EF~n+1t8K(Y6nCeK-kg_eo6UGKa-R~+ zix9Az>Q!<%ehWE%p8!4;iQjs=n|#7E{MHBJmtQqE!LN8J@w*Pa8Y1wUyfp1M=NZc2 zVz0A)Ct&wWlaV>C z_^Tf`DmXupC`h^@9FV#TQe~N9!HqOHQG)8rGkXa0hygd1b` zGlCq}OBO_}HNnAfiG%LSa2*Hj(e9t;69&rEHM8uAD#Sr{ZAG1qg_<o83pdIFsE+y9P4#J@^33B)w}O$6_*eq3!rL!f)1oc@7_n z4=_=2%z!!X>$o*Y--d_l+wf3*tKDEnr=LV~(*|6OUB`e+#IB=u1NmhO@!cKxiV)@^8yLQa+4_`qbU z&~}MC3$~ukskn@&I0FjK`eI!0_L-LcB3DK|&C?;WakC+&&&WGbu&K(nYuWX+rFIOz zAK~s+vZ-WkX`Jahr8ISya*-93E$F&Ty_DbBF(qrZUJL2{|4)8&###T9{Al>di1?Al zn8c6&|Ht!U*pHAv`9HS43}+WbB3xgw^<~0S5ronR+$jwH9P6b9hBv~^hN=fq0d;KKI z*Qkc@o?GGXwtL_{iV0_Qho8K)!Kdn&m2g`mXqg9Am*a!;Pp$&;=Er;TZQg$BbI{<^ zqV*Qe2ki-22{_5bNjU;Y&`GAc_DKKWW|PgeP|R9z7N^6CXNy99U>_?3iB0j~(d{SEFu5{j*2yqydE#(L&|X{@KPv34#L0vcShpIMC}5!ufKj_>DpgqqKXYr>50 zlpntcr2(F;I;AZJp$}zrhRhaet0w#JE4mGEt0s)_gwhb}_I2Px<%?G44xrKK{ig zX5+5UZ~uXxyG0-PtZ)N=KaDpH{HG`ta^U%XMvM3G)in{tdpN;FI)Ks4F~xg0`4*#4 zl~m9qLe+WK8sa^?m1h*H=(rhSASm9$BlIE~_1p!DU%ZDasD@zi9%g-9F5*2by&As| z#bI!v=ICC;d$?5l<{EsX$9ouolTip)LE=5U^fygGvv?2M!YqD>@jd4A(-WIkdOmxe zaiGu5Z<2u?d9^`$-a5fJ(BkBa2Ko(p5zRo4S?(u2&!QSgdWQ6>y7yzaZh@ElQP^o< zW9X~o_tTB?=xiqjpEX{Xa+ImNVY~}w-UPKJqqgx(ee1$eoMzy!oyuvpUPK~{J}#9f zGVDAiyBK%iHH34UTC)cz8DMc8@mC66pNrLc{Y231)G!oQMQwIYcheG4}FBa&bT{}yS9K7ujl{v15srrwPXf&jY0;w#IY(U9cckN`N-3Ty1e zaL3>^44+|8`S^|Ww~wF^G}{mNXsQ|Az+x&+n4`^T1n$Y3tIy~aKsWYHMYQnYRtvU7 z{vc&E@S^}0m&G&ku={9C{t0v#H7{?VrD_-jRXhPD8KbW1=dSPN?CP#R-PMfb>MEU{h)wOWk>d8NMHI$jC zj21+iv6vGn6fhQ$dunX}!Lz!8P9auTmLyW#cC@5=m%AF47s8-aL9ieQu!1}-SB(`5|O!XvmhQ&?|tUR0Y=&(u;!NG)|leeWF( z^>+2{nlMlwAnX#>mM=^Wvjy z%sbZ#c?O0->NB@c_w7Y5k~EYTFXYb{{I#iBYq72u!YCstwmjMf@{?5cW^GqF-7-!+ zx<=HNtVCNIU>yfbel?d}dx>ECAm*pP{7GZtFYGbn9c&^xHkJIzLq+bJs>z=nrGXFa9B27F17-SzthA}Gz6Dxhw$!n~gZ!B{ zfo-iiYKDO_VectxOID(-4V3Ai8qd0fRy}jd{Ga6yZkJ&c{P;u9HygztHcvNyB z8;#}<^VmU|`6vispX(R?H~IBkr}=n1@Oq=hW55kQ<8hI!tr7hC+R(GYXFT}X>@O6f zF-6^fkhCax&N)I$I z&Gbz^?I$0WHQcS&kZ)cC=C@DzbXArgtCwFDvb?)G;C^3&;uy*A_tl5L-`4_e75V+X zUeNQ1`+Y3lnc4lmk@Egou={-t?8bsqVJO${_tpE|?^7lv74L(16}_>qtHJ$U{W#pt zo7I}_7$%^zSae))NWwxj$ZLZ~*tNl+0ou0n0BzsQWXSG75g|Y(70k1)!K6!EiXdYE zdGU|w7vss_iZHTt;Pwvg`;FuHF68)rf|h8r`+mXjJv#DAW+@25;4{9oD_{Fm@k-m6KH#1OQgA;8aQM`7>HKBMpnbMtF93IhLr z_tXCG>HV@NbbPb>e-hvFK5G-uy9H;9;BCiF??2zM7_ zxqBn=?VaI^@Bc)I?|}OVr2h_Wtj=Uw_))U2DRrv|2Ocvo$Zdqt?7o4^w&-YwrrNYX zX%02{X%mc_mR?uso0dn!rsW>CX^Bc{J~R_b^Kqm!?+B$iwlVyG^PM4o8+Ec#Xwh?S z=2~=CRgOB_w<0c6fWL740jczGS0n9vk*Sfkt8I8q=P?BcoQNE;R{0tk#}JUD z-xxqZLhB_U^8rzZ&w$UmubKj%=K)fV&sD6x5cte}S>V%yG7;hvV^8WM4~7_&!06zK zuNiU+BSx;j_GrNi66DKxRpun{3?Y?B;7gP-2bryh0sJDu`^578QoIwFTUv#@ztpO! z7zWpJ{GMxM7d1-d~ERtA0W8$nP(;3a%L8_m?h%%~ybNs@T6kq2b6?j;aa#mhfpx?pY*! z#=5%KttX!1OwNI{{Pe5k@Tgm+zJsun&^UA_Rzh-Z>K1o>EF6=;6f|KBdE6))tKQGP zaqiDmw>`@DL9o^=WsYv0o8&HvF-*`OyTwlJ*YNgxXzh0s?RP};-9+>6GTsLd<$=xH zMe7f8_V`tarC_4c1KX&=gNGP#EmHrF#NS*%L#65Mg)M;_o-5#292@QhT* zKkzx@bLRIWT09S)M67?%v-lC}z=QKAz-PE$lB^u{1uvreCBpz7JKrea$T70cEk3K~ zwC4a6oo_sWBGH|1GzNc9JuUIqo=+ch{B0z(5&r%{nQ-`%=NaS@D9&EAoE9XUXUs|l z62)j6hFZtvB7A7Luj9WK{rZ#ycXK#!+e>gqg#(xC&q*IaF3yfFhm*5;$st4UmZ_&B zpa&RI(9pYuXUlCZLhqKTuPvn+hG?OL19({6r(`C=S{$rvj_}8qHZc)*R;=)zKds#Q zP|UQN<`2bqHP;N8N$^Re`6Ghm3|tbOrEFpz2B0#sYpr1uUGGpYWX(CRhWN?-3+zFo z!_)GP%y|&*+j7+>x`}(`&fdA|-7;hDYamyBwJR&ZFPWFAU%x>8G3Xs>2evwfxiIA# z2R47YlfEH!7Zx$*pBEYjWiB)p@ZU6^>l+>=d~9S|8C%*8yZa90nSY@jbK3j+Z~8(R z&u**^=PriY`@3+`-%BmeO5nG@hBct9JM0YwzL~OTSpj2wy0XWHHaM)qD#u_2V$Pfn zHPHR#Y6O&q{St)=W#aRu44k8ph=rX*H92!4=bf1oi2>P*5Y55@*R0BL?v(W^a*%n+ zM{bX!}o4l~%*sl)Xz-)DIgIP@r`@a%U&|M$r>ZN4t7p_^?zsGEKYt({P zu+^njEbIi&UUVt7!o5#zRnP2wfd&2TRy)Mj!g;DPG6BxPPWH~Wd4?v?m4!PFame7k z0+2D+M~El=0y&hrh(2v6;)0f`-?H7hy$FZL7Df2ONVOMJZ*jG$?+1e|%G_DXR=76n zMZe2E*0msIc;718giq|9i|{W#O~u-|=|7~OZBRD*G_Y7Sz$Dbn#8R~xz({}^bRJy2 zsk?F08OnmW?hRHDtZQvmz9)OXdg^+HC1*d%B(O|#=joJ*MTR2*2y`Y-`wAVLHnI+e zUp4rLX$7I-;aJK(SiHqvR0e0QT5pe>N|V@L{0<&!_FPsPR*m?Z#*S}ep=u;x7{>|XutePn*!%T@cCvd_e^YsX)MDG$| zzD~D(FsciB(v&FBr^LVC7E@x%31Uio^&`U3j3#>c?L$r}=TPPl%QSa(q0C;EX#r_9 z2#qL28-`hMX>UdsMQsV}t?H*|g`8dIe9t?HKVfFqk#l*y@6wlYcDZJti7(&LXV!N5 zt<5ZF)|8cOKIO9$BR-#6Yb5*>tI|0GYYLxBC-Iro65g>vpO=Z5^gb8;!%_9_R7TZp ziK+!nm%uL!DhlUM#$EkS=l4@r=)}#GosH%9xmWOUkAmNidp``n-?c^%_wqPF+%;9a z6(4?|c1B2we3YFh*^9#S`#ya+MF!{hBi89uIe>m^R2hWdfAQ~N{C;ODZy-3oe+Dv9 zAiqBwiym&UaDJb{GJ@Z?MWzw_egp^RSor@0 z&MX38;kQqHccj7iz@cti3DTg$5HpjU$ZDqTAJu*;1#r! z4}Hx*>rF^sXZMJNzW!13d%DMf|7;l9_|ESMk2fv;_l@wufAt+rivPkh{^#)jgJQt{ zr!V;9e;-ulP03#;4EMqR47A>a^nVk)^o8fI{{{LtSq_8npXnCSFdbkD_k1$)?_b&!%+)edVKjQz)x#;YOQ+b!{uJ)DbIPm zu#b_9WF__R;wBP&g|ziL*Cu15 z{<_$XJq)oTGtE`+dPEtWq?9T^-~yGj_elTAYkG zh%w~pyY|eDv71Wkn*r&7HLb>(#B`G5SnbXs%w=x9tBTdlYNk4yyOI|lpazr?cP2yK zchYn?rQNDN{vHz&^&PqhD4-v?|F_nAGkQG6^}cwZalK!5L6fZaPj+wIdS7y>&w78L zQ_%JPkEMqB_SG}~^R4QErk!s$4)&REx1sf>;CK3bb$tx;cBh!PTiA6S*LqFOYqLZ-H_uGoEH9 z;S1^wMbih1Ti^e!{g2sv43tkVE;7*T+2E$W@=@A-O-rxuruoq8Hg^-#>jW0tMPDBj zTHnO_F!SEv>q8cRFkK(c&|dQOp~F0r^`Z6eT(xj~)`vHbFoKG1eHe@@_dXij;OoOb zN?v(qv4I{R1Gn*|$CvMJT6#PaD-CB#OkPPx>rKl)g%(uGD}O$y)8jW#Jp_|i)-DP` zj}L1v1wAe_p~o?Q98Y@u?dUPk<4NlxqQ@l7f1N9yt~sn_aWDCtM!e0`S~#u4igOz7 z=OgT=lGQzSJKQ^Z``!-5tB7yOhJt^#1)%ZREt5IwgT+XRR^GZ+O#mue&rYu+-^*g(8D&%uJv(sYT zsnD)B7;cP47#n@eL=X?tQuQW`Fm6Gqs+U$HdZ>sUYFOEXyvOfo>?P#=v6hnooH|;J z$P@jO_+!Z1F20396YpV#5qT6}i{lT-dq#YUn2`L_?+wW7$kB$+ZWEu8nug&FpGAi= ze}m5-7BahDngfzvz5EXYIW69`nwF1s#w6^YQQV?+C~Ll#^Nin|A!) zV$|o1aQwOVLqsMa2Z-Nb$gm8F+0e*&0RNl<54Uql$WL(2gI&4rB*6adbb$mkd=(~v zS>z!5n%D>?0qo)6@J_X}rU?o8At!-hP2%g3ZZDgp*~`KzEjoMI*Kd&qlv7_~lhG(@ z_+FLRGanp^>^)l*;77FfvPonwYXncX@if?X`mgJ403NfKy@+GU++KD7K}YNQOcaUI zUbYeVo1HK5clhNn_`9FbM)>;_Wy0al%w9GLNNj|??D}~U+y`F?1MXqMBZ1o~9Jt(` zErs1Dg}tnplXJ=IxY^>Qv=Aqw6YRyb@Y@qc*{0YRY__+~u0X26#W?Rm*C2bZ(kb@2 zvLxj?n3a*I$U}Xvb?;u zt8oC#f9<|P1vg{57RV01B14>US1febr^7i|rXI$u9YVQnSNm)k2%T}6I-LhL<{Su4$zevV zz8??u1hbt`YA|#diJ(49Y$nzZQEB5HdibW=E=F~HeOFx_{~RV9IT?J67U}4mytHm* z@DF=$obmdT!9VP+^dg$;PaV$p^A9_aY6#{ZHfN^v4?E>V?jN>OPfZyl{KKB5eKQQ- z=>B25!&@W{0)zO6UBT$f%s(vXiCs28Jd509arL}8?h#crQ}$r{Ggf_<3raneQOP_m zu&X%?w&C-Z$FF#lzqXOpy?<;5Vj5xV|1)&``x{$-8ehH5;7{hSj~)J7L)U**`1*sy zuZZxzGQ1~sYpQ#N+^*%ZPR5D#L}z_sHR2-jx|TsNBA;hH){DrS&hxp5tj79Oq^(tg z{(SKpfqj>i?7Nx=XIW+(&Kmr4sBWY1fUVmXwL8@~4((}FF2t7G%QuY2=tZ@+t#Rj# zIlX<(8)rAed83biD68th62jEgNns7sLSdQ0iF5^5Hz>kWWzFFY(?ZqE4bu|UBZz$w z%y0ty%3X~cuPnrmeeK9Z2b4G2HFRI&Q7kE>`Pi&3E4$F5)ZkWAY|V<3YIjmR^qDA< z>ltaQ+uLzVx6R6>ZzqG$@aY`~E~M3Upwa?S=$t1hLzqNVvKiM2=8@2}ItG`la+(=0 zS+!8M;#=IW&wwHw$`Y>&wg&2OtY~EZxd68>=ss0Rd=^x>Xq9;co(iEAtv$X2fQ|IK zRim5-6MbA6LR1Ji8(8kD&QT9ti(!JR5x7;}p=>Vwp$!i9<1M9?Z3od`S6{EIhJq7K zVm1Kwq7$f1S3K!0UP0ICJn=1H1K`|OqA7iA*T*<7#a$sB!ah(y=LpQlGQxD=5=*_$ zG3&Hxv~nR{xwmhes*E5Z#$NP1KFoA)vchkyYiA{H30Z(vdr<{`_!K^q7e+%ck30zn zw(L0Oh%}E(M$;H$gaD4+$j!6KO!5dp6U;3jcG_X=B*{gfH$OqW2fR=tN8m?&dMa8X zj}T-DL8OsU<34JqJIW^o^5i|xyrZHV)CACj^cNHD9LA z3prl~TyK~!XI>uNeEIV_R+!J1uW_2_J720@$7#M?o9s7V<^YgmoGRWL13ZL)|tnNnG`mN^RUh8DO&<&&y6Ol zO{aawJbSLa+BkcDXYf0nfh*08e5L98Nn|tUw!Dxtr;}J|p2Kl8@t2=~j6S|=N;Y3p zhR@aJ2rMdSO$oH`u_IcEwy@kineC2Wmy62hAr_TAR~shD+Y9_B$)-8SX_5>+#cz^i z1CV2!B-g;yo)*&g!L!Ap(wVKpO}VIa=IhCqeEk}Wro@_ZIOv+<>TX<5oF}uj+7 z=|q&qKA6iDmu=#F@;1B-CYMQ}o~<`Y%6Q0U4rNXfwynbwVu!^qcln-or!SS~-Kd|A zyiFYvpLtEXB^P?$t?Ge$*eYqRh0eK7s3n)7Oh_%NgjTGN65e46fOk$(NO*mK_18%+ zxLTYw|A*nw=Wx{btohk%0V3(7_n}CLv*sqp=f24jpJVO|gHH>=NNV2x1Y;^no6pkI>sodA}fqYU+jeiJ#bIJkA9ek8qcrKAXxfP+5~KFMiQk4gCP zvZl`tFcZ@VA}D@0oysAH|G6Oey<$li{FdJ;@O$Srf!`Jyev^4&j$b>=2>do;5MB7O5pj%NaMSvWlJA@mYo zXf+`Wo|3SjEshML)zGJ?O)2?BUHU-V%%I3io=k(&BhP|(=6(?? zB;+KyNSX^ve_t*a_qSlU0=<^Gu+)u4iq^<0ufPw}#hvjR-M%tEnZgak33wT2%re58 zufeMUs|6tO7na5VSSHxrerEuzzQR&IXpsp^uc1f?VF^?s;q}4q7www}zmGd4eiQEq zfZ5k1VgsR-@cReKgvT%775wHQ5P^3dql+g5+)D%KVxop;16`24v9w%WR91?b#lnme9A?$lH_Ct8iw&kcTui(sPzmjoKaaAjYs-y+jj}h%QALy!g z`kS^62YBqv3jC%Hl9eCv`uY!@LUcg<<}s8C$=8Fxcf;k8z~@h`&x{w;`eh*Yu#Ov? zn{FYb(K>D+;9d(YBn5$Qiz5>F{P7n{@X?tc@Rz?l4E|0d5D9;IC>0U@lwUBmjS->YT)Wb#s20g*|JwSlItA6#`W8vr>RkcwxSa5)y`d)y3#i*1;2dvIBv|f60dfC?uN!h8oD`Gs>A*B_~-02AxXG>*70yfyTsyGqx z9DbR`dPebcknQ$0V^VOaEXsI>oZwDhY=Lgxd2ZSe>2^!@(2h2PXTHT%r;p7Y|B> zA{WlD5G1cbUKt=0m$=slK^{}^80_oeHwVG~71Ibol-08j|K+XCG7wc3C#p>bqB@$u zhoypu3g&;K8BvXvL^V1%QO$LQA*x?*7DV;phk~e5o{>b=j~C`dbvnxkqDp3&D2Ph= zo7N{60O{c!2rn$iOVR_ z>O`f5;`ZN(9T+V*c#^ifXyoL(6N@7%A`U({2R}k`@aXu@C_C>+bo^)J+%TlFX@($` z1@8+|`Ti+MDkt*7oK*gvLp2Ff`GsYoAeG+YSnQw7f3^uyG4P+g*=D2?ivPTst@EFr z5X?jJpFJQg#(!FkiirQv;Q~o~bl<^_!`pD{*8QzG-F!zZCgOD~0n1Xz@a}g`7j%>P zuArO8o|JU6dloCq>1HF#2)cQjWul;)X$>5D_yYOIu3PsCx>>BRTTfkLMmHLZ@mEeP zxI`zKv8XB}(L4nTV?Y~ zVNP|r1Jo`v?*n}e>^SF5?Fi}Xp)!uadh<}_~nk8xr5r@g7HXb)G zQSI~z8zVhJNPr@f@%Nzq=lz4z$#{7!0<8;nW3I!xAWBOk?n(aT`g9B3pI2G*=2wp* zCoGK`VM@92y8#yAGCoJW=FQPG}EIW}IAlbF5fBFhF=$_<*+MWg(BJR#B z30GZTumhXmNtS5?E(TE#xCBJK8+N0><_mGAuV9`-M#>gwg-L8+r08P^WmAhXKs+p{ zh>0N-e1e%kM#fJ){xXoFL+vMPGc$fNuZ;)FOH^a`ha*Kz2WI^7KgS5GK_Vju=-QyBCUIs6}< ztHVEe1cU!_`~m#qFKz<(cd(^9IQ-dY=SXAW_nxD}pOV4gPr@I-f8Rw-0DlSYmYd+R~Xvg1?0;1YdJO89VaDbZL;Vxn6@NRMD?_YRad=zUuiQ(n!phXS zvj_xd3LVd_I-ehpL8f{%lQq$jX|*|z>r;Z8CGsK~@iPh@=^%JM9M4&=5uQN?c+NwM zXNH95N3=}PT<_AMIYozNK^SP*`GgM76S?8>^GIqa{N$l+j-R%3bcmLr58`6nj4%-S z;Af^IJUl0cgy&PV%;EXY08bst2zV|H4-d0<#1W1%3+7s}H86p9c+!_53`R%jN0>cX z`&jBL4>eErWOXhT422y8Y`c(ek^>KWxP7GQdC$0XeXAUIGsC6vu+sN9VBTP{Relwv z%(lvGO$C0#_opt7_Xj6A7Qg;9434lr{^vvPG@)I5hYy6YGrs3TFAhQ8`pPnU!;c>d- z4i5XY<((pt&To($gUkkLr769AH&E}-+Hn18A^S53SP0i2=x5-!0VWM}{Rg`n90J(f z_2<}^QO_V^UNv?;)E0D_(D_E*rRS}9fphe-bA;Ierm)%!FDr}Kn}n)^sk=O*6N|S{ zD4cKXBfeA|3GNMv9_u|g%1JACc0ql_%(qYH6^=(S7QVse`W~NRPg%TWT_T#dkJ#)< zzsr;SK-!Y?o^(Km!7Od zb{4qFb9o~5Cf%L(4Xy$3ny5R)qNaG!`ZqrKaHz$ZsOc~?wGQ=@3-NP5ex`2mOiCmy zO-IK{JtLD)^YUz)x9?(9*jH5eENls#go2(;0-*h?28A%JKqZJg1?KVi$w+T z_&%^{Lk%f9`nKY($x2Z^LzLf!y-i?wx}P(y;tOu#L$rP}!S*1&^<;II12aIcc{XYm z@s~vX-%sTooDsBsj)YS2%}9Jhv+KY&h8Ca2%gWR6hJSmX_%>NQ=?;V~rcZD~#0XS( z9jN^fr>4mMju+*jv2y=eGV;e;V!*(H{1J?D>`rNb)cJrgXum`IgQ2n}NS4j-GEh z8EHJyWTYFBzC`*SiN34BUs;Col-lO-zcMfXj>q%+4DbGp-@l7Q&t*LljxJ+(JtOe9 z80llA7%<~_=hu(pH~97KS72{|N%f21NT;>n^wi~a!L4)DJ$O~w zf;~^DIux2$cV-BGR#djPIVYGro9nPCr%qzrZMG=#JQZQwO*M|QIgdVtwb(}#pK554 z^XDY-CL3?U^5;&hvhM|J>R_lWD0jXRJe5KJrYNCmD~u6(hdPcp*ao~bFc$-FZi8xQ zy<)9T6?Hu-mbq_SzIF8k#a8Cyr9<7HhMzO=Q{&Eoyg5l!m(5$p95CU{9`Hy8z#+lj zItB#*O*s;achN$<7f4|XwOHNw;I9(J_v>rhVM08W63g_C<>PIhi%JhzV?XhvFTqlkcGO<)d4d0U`!}QM~zP}^z`+)v!0p}C_OA*D! zQ?Y>l(Ukw2u|<1PD!%aM(<)kxCzZ*_1}D=SQ9J9xN226WtRI}I8cEbp*sy?}BMUDR zh2INWm{!krd&OFoqh3i6t?*r@3~T3JaBT)rA5rO4lS<>&1n~vp%CH45YQ@Re>nU@+3}Dp7&HTKXbKlK~7XR%=#=nE#@@zFLMa zzw-}*ftT;e%FETV+Q>zNu9o+)vWu`B@bZVRW2>!LEsfdS-qYI!xvXnr-VmaK8} zEi;kiU;0hyYa}O9CDN+Ppvyt}4e4*BmgDgb>B?OG-31Q443(pF1)j;@#=rOD`EJ9z zD*WzsIZyOlwk_ev!8#ZW;BOUDEzqv4yB+u|%TS)u zZ{nTI%fIL6&9}IaWd2V4{#+z_F6)tS#7yMhcE{iAk)A_3fYb#HSn})$_;vMll3)K@ zjFRNn7bY9{_1$9DvX+6_Yeh-nO`5AzzHrGzuqj~Ma8f05rv}R*ONpUGk)Fq zEO51m^il0ZO=kT1Inr!#ebfbg@G~sG{^&}MpJ@2?N>Rp)U#EcI2!7p;e(L->SClmJ z>tT2nF~4pnDmYet{rMHVyXO3Q!>0y*{X9O8ieI}#{h|2v81aqd*JF$=_N5kee%(WS zYvk9h>5~Zg_4k+a{_eNP?MHZiYvk9@iSmy|QQpX}uV>|tonQCh<%9C;xBHv$>zdE&0+9qoU`54Z

    S{|mlKM-3Q`&|!9_dS@r*4{Oc@^nrq;jOwNYkc(?;=sYh4@v=&@-i%?UsJ=Mbq?$l~q+^|HP zIyr*FQ_z&NYwf*_eRz-XE8?rz_N%xLZv|WYko4ib00t;JynBS%L}BvbJ;G}72kygr zg#9^$stxMHTc$Zwx}8-#F9_^S5Qs8|RNc`hwbq)7U&xec%k?*@eV)c%?;xx-pDXr# zit~_?bAZl+;dD(o_Gf)_7@Y?zqw`>8(azd9MPG`5ON=GA_1SBVj-kfsFe9?maoL%* z6!yU~+CC$zqb|#6FYQlmlnQ0935xGSgG1nZLVt=mw$~5KsM}`8f2Fcj>&%6 zwhjIWdOAX$4-7)zcMb}H@6r^B?-w6X>D!C%%S2&;@Amvb;=3t-hydT${VN20mz&b} z*0$l`+n>JETlwg_C=`9qCQOrk^(~YNhrYQB2F|ayvE|+XHH|H9a3b**A77~$7y|FJ zu9SGcL;>FE6!;=|gb2R!fha8S{!jiO@%{{d2pjJ^*|nbwymKGjSqZr6KKg_^@&1$( zj#g@Xw4JQ;p91+0Nn$@C{SQFw*S66kf1;PUNdJS0Cj4b@OM!pt*=wQjUrA^u{C7_b zjemZ!10j@8d1m)y-BS5%>Z%Owqh7nnLU zczrS$OY+uC_t5yf0tMF9KU`Z9gtWO3_Pbs<$+>SNuVkFyeZRt$JA;)!4VvC;g``Nz zU_Yr3&V(!v=tgrYf=Bs=2YCiN`xGyMqhO(LHKY3Dz zzq><22zm(%zW7mr;~S@fL>P=#AA-TxS`XiVu;4>{28v&WP(>N;L3An~z7Pd;P8fu^ z+qE$P0gQN127apD-IKx>VWlSZ-M+h`NFO_3Npo-+iXHF? z%9zIvkn>r<3m+5!3V;Erm^9|F`hfKJV*2<(z6!woCxSlAFID&{0iaO;s}=+!zbr}I zB03o%JN)kx{X6j47@&%HP)n}~fzRFqE8+7llnDo)AW?bVUAmM{jCEffle|YDc3b|q zGFKr^`D*E)-y%T==D|5`YAOKU!FmhkWljM16HW=>k5MKlz$*XEfV*Y+CB(iQ1C^oO zR!2J%g%i98=AQ@64oQn=hH_LPnEYNIo}35sFHYp;3m&XQL@463)hK>f z%|nsWH@!ArzZ0I|4?=#1E$=smDeq_6RQc59>JYF#PQya5?m(F^#)sA?Vaa<5tGT@Y zqM?-cRzXAN^8N&&ktXdW1Y-@#`*88u9-s<&ziLnjd=4X637_*(CLDa8i@YxkCGYQP zpvwDUgF^tkl5k1@e}OVV0S3KtfA9oap$w17)F|n8u+eU6$Ci6PCKjMW@c$sQOze*} zbIpIj`fhALOC|zz!T;zg4!@Q-^#1u@5uUmKH^KkLWbbhy{bEq?M=ksSU%g0h2eZ7u zo5?r`)f?H)3Vr3(Y5pKWhb{lN9}ROXU&GYV%COV z5HDf)QHqyNe95(bumB{=6Pco{+Q{Vw~k{ZFb=^m530;hkV3oOtO z%VMCon8Q8%sOwbJoO(EN!e+eC2MS_WRbyvMl*BC`8JV6LajfL2Gw_VV{Zm3K;Hv84 zXpjCod(vMCDFw!epb8gkEvK`J^?6lk?0J1fd>AV_b9(Z(ACSn(2J!*QU=%Lz}vNGl#3_Q|Cg&Vtt$kEHl z_dt)FkhQ=e&icyW zcmP_miFXXw(WJ2^y>J15y{cn$zbHpX*b3Rkwqq<9&4jGZwLu;Q6P}LB+VJW#^3FpV z(ZR89)Q)BSnD|bp2jMr$9cftR=WWGl725{~HYDP$ZOAU#0=VZ{*}GSuh18fuIRsdo z=bi-HV}asL*ZSK>b#d#DH#4>;*KS zhiE`I(_gz3=RRfPF6>JBPCP_L$HNY6FAj5~;~_FS9%7$FOCJ2^mFj5XJ4W-6wG>9M z!@}Zt2o}d9G>BvbYiY$F=0>oH=yT_@0rdINW#>Vkzt{57=gpz$voZCEB=QI#Avk@C z`6l=uD-*)w(h&KQ!a{~ zaDP0)Kg@_TlfaaXOW+u#7rOy@as5*}&PGx8nhWSwN$_lsvx2!7h?(*M&6Ly_+|{Kt zqB+31_xE)Xwvc|aaHKlxJeAai-5Cf|` zSS2J`aJ?B-qPfT`o=vI75TxQN+yr;*yNWeRiNSgdj2UwI=zPu{n+{EJR@w4y$Ergk z-@Q)obp4dce5y8^Prm!Us3TY;HS;&#olh*S$!}@r)=h8w=GH56Zau^27O)*K-FeI@ zzg15&nhf(+X<})edBh}^))D#;Nh~c~K1^#LUo5Q`sRoLrMFiKhaZrNuF8PSyN*bvI z$9SNRuj>%OmBFU(Wb6TMjJ4(Z2(AULjMWlcPE5efY&<^Ku;2u@mrg+kBRHx=M{s|f zG9|cQmWNAlf6x4WH7+Q+b@O{3@@nVzwAz~aeQc%w{C)#=1}(b(WAl4)l_|Q1aVQ;O z&+i)Nr@d_9Od#9#e)_K>D`tj*2VG9hA!u=mj z;^8L~cye#~T2~c9lf7jIK}hRcH%f&b9}4!OkLSMPFAWWa7tj5XN&z6nbD!ER1c2)Z za|B=+N(BQ@tiOHws(7!y4^hm8y&dY|u=IU@{Fx#R2CsDv08g(DzL3BpeN`%f7pcB4 zp7ecM@VFv@Z(uAwb)>&3Yb?Oy`o4UDJgs(JukV{ngG&0ocTglkecyTD@7)R&f1NK5 zfxoW^ZG^uD1YrpLnd$rDfkZjlnxXdLav^wu2A}@w-CAC74}=1@vkLAclnDwhtzV`8 zoojv{i=&N_(S>ed#|`XIyVOz|<2Ek3i|fl-977{B*d4PqPH2N7(81kqPlOqe*G)Nc#%JV zPd^+|pU}Cc_B=wLaL4o7JUGct7)4N_@ksy7Q{#|7x zzqmh$f_nwYOprE~rOzOWS8u~RM2mtM6&j(YyNJeAqxj0N;M({`H^48|lJvxAW?TL`E`wNsPf}IvLeJ%g_*5>iA%H`}r0 zC%SRrwZwg&<9gitF1LaI6TjZZ;Qk`lG0_v!M`m^i(UVsR@6?lTQ7ULp#Cj+a{&7*w z@{g`hYxzg_XMFtQJoJ%6mzC1KkXZL(S?OC-`mce`{;Dq7*1}i=nWo*+ z>6g46i1KL3c0(!tFkP~F*W+IMHoTsKShy<*1PA6zfVe3{Pk=d0)Iad+6aFw2*_agQ`fu7AKU>WpZE_SXM@Xd`z^*O z`77EthDy(;*j5(|%r6T7yjcS(PeE7JQ-+a8PM)=KFi_eeW zRQ^-PZ<^)!^P3o!{Bvl2)5x6P>;s$C@SC5H$l8MN8PGrXEEp0zrh<;L;hb|Lk=7=)rW%ongUOsZnyqCK5 zrFVSS$o`)D_+Hvq0CZ7v-S`fhZ$7>U=ZGRFeB+xSvIiUA6_<)qAB$4xdGbMT&l7_5 z9Q?}L-?nGZm!7ZcBfwax?{8*~d4Ef1iy}AkBAlMPi0r}o`$~6Fs=FwK{to`e+uv1X z<|7?Bf9_hd{JG^LTK?SX(Hh~;y>iZvKWDt6|8R|rZ$|d{jqmK2bmRNDGjM$0hdc;1 zzO~H9_qr9j@x4{8Ey(zq)TWMa4~NP4jv?#VDuYb2sFaQtX)% z!>Z!Akh{xO6uTjY%PQNDawWQuHL|TQa9i)Ez{ypPAws95^bYV{;O5yno#@o7t7@7v zTA3X~mW0&m4EBtux(S6p%!zSs3~I}e>p>M>4r``Au-lt*V5bKMcCY|;>hkcw<*?o( zYF1(WEF`Rc@S5UxeB-|jzh`jL1xpbX=J4>V6moqQ&dXG%B-wHw!MJhKa8JU`ZOU0M zU08TTbcfT6>Vvi+2b4N0UGNCqxOZ2eTAm*Y58oph&+juS- z5;JbkGRaPAz;p6{RkU0#^MM-Sax-S1AD3JHtd7gQJ0p#Rx*Yw+jgIVy?EgdaCId|L1iN@ zvVp@*$^n}TUQrfYTx?A_0LP^|v9JkOoq)Z#%W1L~!zQc@9lpD2wTZzPA9+o&iggt{ zYLdu7e_*T#C(uHfSiw*1zx+O5bJZ2`1aP5swKP^cV+NN@;vP;D06`oKKT0i_m6bu{ zt6JKy$X*55aEz^*eiU3EZLjjoutEtqWfh$owXG;1w`cWw6fs|7xqq*?FDMhePxdJ3 zqW?Lf|IblfYX7TjF2V=ze^p@rzoPyRHtE0osP=yY`ae+ip9k5vM7b)@<7kn|DsG7q zu@jsP(1}de@e?0DPB_1Y+mXE9XkyH;l2PY^k3EkE!3VA3|EK8TmSSK3Pr`O^{`4@` zu>ZcDoA`^b@Batq$B{iXjgO5hP3ghVUe;cxp4h8@5C z{ww*2Jsr7!(X4$w%TDJyd{v}XM(Zs*E5CwXlI$U0pj2pkh#tNYNUqTE`KzP%?&a#} z?W|t?0O0i2vQu9ICbE_#5pd?N{v3gP{_5cy5f*&@ma$}lPxb$)8vvpne;EWK;m?gy zVd2lu|L2wc8XSh{|FcH`$o+q?P4Tlf=mA_us3QQ&P%0RJLcig&hd@-vBjAek3*iO_ z*c!sMhy1o%)#twqHKZSedV5F{f{^t2*ARrk^!apNTyx$}NyB+R0cAw?kg_f?0MIb>AtTP{Ly%{tBE9?Gx6d~sNO6t0HN@8cS3wel0{ zsny9}u+%GBM2Ulmu>R-Uce%$^=iB$?k2@f3?r5lme?xnfaR+GCZQn=jY@FGIH)B5p z_xfGzN@@o+^ifjxDdTpz3a$C6`%-p8GkkTmtFT(Bg7?@_@*b;=_oaO?V}^6%@;;o5 z>gwF3q<)^3S$MV}S zfnqKFwnwmQ(C-ip{n|za;@5sCWtXGgSWnYF(JQ0q(n=p8zjwLXHIO@Sz4vdW-^GIs z@!Q=CL=Dkz3u>nZ@OvEh(D~u_ooge)@7N?m{E~74zEXJy;e(1(+oZfumaGD+O^ZIfRl9=9d8{vh~sXWB_9DTiNB_^M{$3Pix;b&G+A>&tPwv-^7n6|^I>7^_ZBXQ zX;V`hxhfvnsQ(=8MsC1d-$w2{PKb@4qB$XU@WwNq(n)j_GakpYN%mLcBo>azZ=?^A zoDjQd8Q;$NPKYg}8t8-=cEix4w$X2q^-nm~2d!!wVZJ;)-^kRIZo~PEtp*+#IUiiHJW`L2-S7^cWIY?>F1Nd+7k8hIutBb*jz$nf4R|y0i?XN}?bf%%LIMI9I z1D8a6(DT9H7yu{&S{0oPfxp?GN&LNqGNJIN?ytz-RU1zw0Z2TL^A#^{RKcBF6$0EM z!Xxbk&!S9FaK(DGBjU{=l0*hYS6Touo5t2{(&!_MUAHs*;;Ys|TdKlj{Rs|X7ft*p zy*{E7K}h2W)ILZD9zoL=Fy zlm?j;PM@L(DV)rJGlEax&$%&T{B11o;jb4Dxb4t_sK?*Wgf_xoB7qnhfAYK;1uh}C z;gp7sY>vk-3N>)*^iG=ihqe3WR5|>IyNLvs)K5o4f!j+3cRET11DEe_AwDs8lsc}e zm^pXjLeS!(d2kJnA-DVnMc7J^i}$`ZV6Oapj{Nc{w&(oIGML!K7w+#i67MPUYKK4Q zlssQd?O+$dxhV~rgWurvLmw}+sby$mN|_4K=6EFfRntuTP3ZxomyjfVa{nh4-symM zZm}2Mi7HeT7pW~scz?pyoWr}#3oihA25$+VKY>v%v~xL>JJ>)8?FL*oEUp2MI-<0|xjX^Skm+;$Vs~6t4RH!OQcxmyQtbVBn6TA4r@msoCKrYdpwxgA} zNaQbQ!Lnw+BAYe*tj2%TGdmFonw`MLW)n}woWyxV#%m2kkeGuT|(sq(bjb}=gNDc7b3}2GIvcBN>TDB(uUng;;h&n_P zUz@@BIlk&&qW#A4m4&WEj<4hQ8sh78foy0G+y+!2IDOrO`oK((ZzO5IaeVcm zi=`r-kAsZywf$3xuSfjxb@}H4U-#KeamFiC|2&+$X?o$c;|ud^aW7+Ti>g{!<1sh;7@F zY4{GF_t-ArxJlj~N1QyU+pP~S)#^tdXO%GlYRPSirmiKW_UGD3ikYPV#OJ8~g3>e958S{8byDNjsk}H*LL`HvW$zQ?T*R!gm_~J$~c=^fegrE9oP~|NB;W z=#Gc~?D!WuG~@q*X8ZvxjX!?8;}7ys$Nz^B=RN-aRLB2In3YPCG5WD(hNJ(ASW%mf z{#=vM&j}p;smmScP?O!b+ZexU>V;=Y-SMs$(jWM{2r1n04|o3W^Bey=M{DN)Ly*<~ zjrl)IGyczM#vj1a_~XYr{vZ!^{NLqQqMXV;=Y-SMsu(jWM{2&tyW|0}=oKXj93{3l=hUm5@6do<(!jAr}+ER8>Y zyyFk@P{+R=KtE6Z|EfCv>tLdldd@@jux;7XDY=kjo-=UxDX)?xrjR9EYV0FjhOUG6RyuO zt#3^Y*B6H^KNOEO2H%WxtB*%kCh>21Jp~b9ZMiFeWMzic^-HxacMbhL)GF_CAwN+Z zsC#W10WPn;!FuH>PNTLZE@Z|!rRo5u({lV^De=uZEEun#Ad1R?%1t(Cq@PDNjai<2 zP%AgpHU8lGsY=M#6u5-GKFix4&^!bL0N*0}zvujQZR5wJ`fTOyA$EC-nV2@D1H9l(mA=2l2YG)B@Pq!=tBL;B#>ztUx8?i(ziR=+ z03=O+xv>WKv0zqo()zAr&ofY5hIcfV`x?bb=XLM=;4F|PijM(eevCnd*hpcTpvGQW zZ}5w8K1ce4AL*s>2d~a#@ymG=jj0LvgM0Zb%|@x7=FOn~(D2rMDiU}@*Ej6dNa}Ny zA-;AiVpu{=hWNgw@kn7|Zd-#E%JMXJaJ<(-iJNr3y}m{)l$C=u7Rr0CGO^L)S9#FCkgJ2YrLvBfjm2>-QrbV>!*^Pw_I@ zgMDOvPK7v`LVi`#;@JLI_Isl36pGdsXYB*&kBdwX8%8DN;}sv^`As|WVF{hEX%Vq+ zSKvIl*d}*D09+m+AI5lWXKisq>b6Dg8{o=0q%OjkZy;M^u`SMiI1R6NvCsLvyN>os zPQ_4{y(+;~6bEQioaMH>5&TqyH_p9xUhp`$>I|g$_X5$LIP#^O%Fn4rz(cHRMw9St z?k_xd@yuotbQeBI2|Aej2-|Z12_*6|%A}6&`5jMgqBw?*5fo0b?(Wm{(;wro?&|XUDSkSD;y6A#tjeDDBtg}9s=|WklVJRxI@cXyn>nEsBX^j&ezVe<5hOc4I_~Yw} zD|PtF5WNQm5%g??`Vb6Xw{+IwYsFjtZG7Dv9|^w3JsAvN%|Ly6`ucK!4qq3E-V1y+ zS094mtLH^JeEt09e;Z%XEhE8Krze8p>nO0P$5+#I9lk0%Y35^z`Vb6XR*^{!I@l=! ze3_h256@q#RZU4#5#7!`#w$%BTOS(hlcwi!@Md*C!-F^NdY|jTn-6Z$9lSZvOIMMG z+i`xEPX5ly*N|_Wb@G*~x&z-(fc9bW%J!4rxAb(V%4C17Ceoiw&RY7VA8!Zz^gQdY z_xj&k|0REO{a1#nAL~t588N-g6IQO!cL_opZP?}rYO@?UaLBv6EcP3W9I*EA z`{tk6VFYOtO{tSuGt$~<14=1F6KQS!do)!*=F%HP@w{*GMn~YgY2%DxPJqp;@iYrv z;d80Tn|n7Z;*J39X;JkG(&dPCAI*)GRP+Eqo)yRD$;MNt@sSDcS&2$vC(i=Rz=FDN zD}o$UBiegM)!v80+dJ7XStJHUXoKpkb{<7hrBK=338ZFQ^dpsrlY^y}!>Vj7g*LH} z**bZUJ$j?tng`{C1?{+duI#!cdQ)LlEgocp+DYW~ALSl|w%paor>mdWPW9Hd<$ZyX zS@Z)nqzq9w&OXE&fwPOg;0Voo9dC3Uf95@OoV)+JL>qpH$-#FRt9gzeJ~tY-2~-0g z?Kn0-)RA{L@S#~*6NY<=Y@^~aII%P|n=+_2#{oeTwGCVMyepuyvY*Ai%@4Zo@!g$z zWQ>uy>Aupo{-Z_)WT=X z_Ft(3PFxtPq0h=S0uk}-fpJFt`-;A+{S!HI$q=dxPUKo^nn7<7@ra&1{xz>8cRaF~ z^~@!zoTXkWli)8J)YDG5Sf+1lM`KJK;H>{CQS({Md))W}q82y4xcO=S?o*d@dTu6j z9Y8Lj&|!Xft&P?-8?vd(2SduuKI%&=@%M5Dg;|O3odrO zy!uPux8ps1qu*mP4}Fg>6Xoge5%~Ldq(_iSkuEKcpRnMhO*<@-#&SKFmuTJQ*c zl%G7`V<^u*67oEzQpodK@2F#LEYE*@o0HyuMxNUr4JFh%-268PHDh_s-tz1D-zv|q zc_dWVyWo69jW1=4<@vEU(RFU@s3CcNlB8U4d44ao=_k(%P)u;{k%m&it|@a$O2-GN zDIv{wLw1uaZzu}q75dBa+M+y{<#8k~j%*iDqT z*i4cO2|G?^WyB=^1_}PBkZ-w5{p;6CaFW+P30|@n+?k}qsehtNTmrviC?&u4e*biv zk#P7IeU}n?x~L)V8T8jrLO&w1`6ToYqp3DkLMI!xJyEu8Wlapf_s4fBp~rR<5_;QS zBOv3cA}PT(91&wZ!B9f4z-U5_N&jpT)N@6Rxm|+@>b0+PB_dLEV@`=_jaDDFfexy)??Go89TV?B*hoBiG?4sMiWXE$+vr{;k?0@G&xo zxZby#R~(_Zo+JhFABN)kQrI`SyzVWtZ8MeEvM1T8@g^RulvJtRHO1bjQ#i4mpQsk_upR^8gZsaHKl^? zzn>Jv1NYx!L=D>g_gx}y$o=<)R8&gs{}=b)QwuoC1NYypUP8x%?7z>v=-Yp{6P5Ta zcn%_mD&2$Zzt@UvKIy(`IDw=}cjNu{0xAUP%=X`t@m)%HN1~AKPa7@=dr?JF>}~s2 zNHb&UuGxQ&5mg1820sdZx zbW-!K$6xa-T~E)msO8mPs%IqL(>MB^F7wd$$M83Or@y!2?-HcO)$=TOAiax3@Au&M zIFg#rj(6I+>HWFM^VPMpxxReybLyBI%kwGp{XZqoKXZi=YA>b#4MNRWo@bGHUfc7( zRi1BK9IET9$NmjnHq;r^ZPzCBCe@ak(778ekEukq&&Y|R25X7 zHxS+0!K~mh=Pb{Q;LV`Un2{VjKY9KtW#IDszJW&lyPv+x{@oyQ1e52Pn*|Dj$@64U z<$p<@uUq9O&mV=9+j16XQDyoCzlS~ZEC(&V_oJh-EqO>qNNT=XwX!Xzk<{|)FMV$r zExyrjeX05@9PGlvTfGP_J&NOrB|pS<{1*L4n3cDa76QnnSIiiTO=nS631ISmAw^7q5T zP@3}LL_aXbRn^_LWc>y36Ry3XJCFuff|!H&A^ zfi!mG<9NMY90>de+L30e7?eA}%PEtQA<$QVqGZE4(^7Ihj-#u2zgP3>Lj~>EIhmkj z0&M;Lq8yj``&I78d(?|h0WO!+9{B`pXaD>TQ0k%wsm+()L7?(3Rs}dBNPrD4S)eb{ zJv0ixR<7NDSOb0UV87i<>TKR#q>q9dfFGw#Ua z6GL|-+89T=j{H7P(-D&b)REVE_;qAG3VJ&d9q3{uX-{^fi)lx8+!~@I7;xMAV%I6F zBhhuLwoyZZBCKKbHVQz)9R|aO!GqqN)UK$wIaO>%PwdUh{ks0)y|R`>Q3VDw7`%-+2W&i>R4pHD;C#_r;0eJRa_|N!<(aGlvQfCd?HQDL1y}bw>ua2* z$sv0?d{$<}u%mC7f!=D07P6g92(koeOC!5C=XMy9=hWL)R z`Q44F_a83sYyL@8O}&2)pQ-oL44R+qYhFP%U+>RU@s(BH-TLN*h-&L)do)Xor$`37 zqz$hSB*{Dv;?KDW7Do@m>6F3Fww8_4xF@jRUl;4TU%;?TN_?)C@XSbL0}hzc$(MHm zQ^ry;gN+}{TQzCnO7WE@NId%%IP_;3ViGl(gci8GPCe{SJ)Cbp!v2Bo8rY?!WNTo| z79r$0Df9wh-{QIxYW>3-p8=wSu|b=?$mP02O&fXc}mEv#nyqZZd9eKs1NT#?* zhLfT%XHF)wz53pAn(bcqINxlqMT0=J5Q-aOzV~ZwzIif;;Yl2iVt8(6(|4Oe9eq;- z&9^ac-XH`lHII{T6zZ#0EmA{mXFsnAgku+9Dra*zFxVOSv9SYH@xy&7&Lg%woE?U&^d9R&Y+T;&4x<5sehwB8SmlO< z1g6!_nAT}swB%e0!s&G~Ozo{>#o%oJss+`J=al%)#@)y1A zpNS0N5IH*7q2vsDY7Pbc^^@!&l%mrG0HSF%+L$$eh zlD)Dg2XF!=peNBcAOnrp7^qT+NZTJiPBR-!5krv127?^c3hMr5)=dBFk;_;BpeLPe zxj&!ucmmW2ph6u35xBic!$)t$_96h}frNZLiM0Yk(paTEDNYz-*S($G= zfV)UZ)mY_Dtx98m(BzY`$8H4^P|JkMa{P-1T{XbU_p~}i* z@&hWj6LrYXxBnSX`9(C_<>!B&4ygP#npyJm1b0B?S(?&`Z38}!&_MpoRRNX%lX#}A z{K3kA&!x1BlAkBvYO(lX?aox+=cMNYN`ImG{KpFcpBvI1PFB8WYCz==kxY`GHx&ew zo{{GJ9RFRw=iQppwZ97Z{0J$5WaV`bMa!>a9me@Sf3P3`sn<>LeLm1LptOCc@AJj8 z0>-Q2Dpl`byt~Gx2_vU!_4yt)BwWvOq)UH^T2FKat{FL!Kdx zMY;!RInp~wJCKec#kPUmLb?X&cBG|9uOV$g`WeaEHrvtxX%Ny)NDGmkL;3{iTcm2F zmXIY^B3+L(7wK`N^+??SAD3tUDf`**UOxL-6T-B24db<+CEkbEa^YZTKN~p&8BAAr zdi&XPYTj_RfahvI`xV~j#v9i)L~Au*Kb!jxjoB%P{VXZLyW=$D1LIZ@oR+ZW2FI;SdV?TSJ)?JZeV^UK;Y)nTjI{VqR zx2x)6bNg8WNh`@y?o7~a>_B&psh0?QK4eH~-CTeu()R3ot^=A16iguQv%q%sS+eh}nj0KEwpIpM8I|w)uxq zFpXs+R)>bE#IhS?^D|}hml!nP%h&u!UGqWhXNReI?<_I1pZyw5U9*y&=+jyFGnoDC z6OmWgO%vGNSdY><{vh_V2hp*M%nFsA*hEd6IH0t5l&z54_ptGMfg989;Olfg}6YEBvSEErcy;)_5=JvDO zXwzf7hRR^`W|`T~2KEW7myy}eKKv0H=OpH^dHW{TE-q|uboR4HkTI0~?ClglD2P;J zKkIXIFxyKA`&ml?-@b-^@co3{nGU|=KdA7T+s}UUu0PBz^3YQTv7cRgm(PBd1l5W0 zT&RN$n6RHca8o4qv)`@^LKyF!<&4{ejXWy8mQ02wO0}OY@PaYU01R{cSrJJ+F^sDH z%rPa{80zh3tNRBOzanUHz5T4DABsypaRw?Njow!}OA2=QrE0Kg?&u zlvpptdDjE+0RaK=43K#A5Ai|pKYW;2!|V@bNgBC#{=OIR)7?a2EF~P=wh;;72;p7{Vaa95amAm*+EL>H~9~eu%BfGyjQJG z&(chlQ+dk0x~VKi_Y4V)aEKfo)Z5QC`Ix}D+s`K5hUPW)vmK57d#LtgAJ%YcPhuW1 z=*gz5kb%ZawJiO(S!X|s205w~nA^|J5bHEv8ANP9Ye#iSM6<65!YV2p0^Dst+U07{=iEXWlJ45?f-wxT9Tak_+z11<>GP_f@W&TCkmODE`#fH?mOSa`zq)r!S zTV6&QeMz?EU8J#Hvn{ib9z)uJl+!KSvKA?$d$y$#Y0{-j1AyzOl7eNZ5@}P=u>t3rF8LhBg9F<>XL5A;8m;r z>j>$!(#QDewHBjkQmZ|Q&!n0e>x0d^ADG0!w+T>KhZ)5~OeZ{!=qL>14i6 z%wVhAQ}3;Y8-)zEOnjvY63=o>Te$gBjD=Vns`|z?WC|%atQL|jh`w>oxfB%o#zUW& zp2CFyOOy9VxLs-3xOy4+i2iLAxeSH&amnQxl zYmbbf^o>__284o0HTuTlQNeUoA@q%Je8J(nnJCZl^Rwg5r{qw0h8hksN48SPI9w z5RSg_5*Rymv%O?Hr?}%My%gt_;%5i=5#7hgD~QhAUq7ESCzCc0 z@O<=*4G>epSl^g_c?8X$v%Ycq9-(ivy8_`5N|Egx4!yoHvnlBt$KYSDzVWfg{Pm5E z!H7fX8!yB1%1Gb%0r>{jtiJK(`yl@RlYQY4~UElZ{6wX?G z<9BBPqu-$$0q89xdnHpEzrdg;>6ah_jhCv4o4H1(Z+vu=uL5&@qnlVK;X{8_l{|tO znZN$K8a`TkFow=w-?-c-tyQzqbRZ;+-S&=|zVTbNh}z580-e4wN7GAlePd@8S9*Qp z@)s&ez=iVHe}blg913%NV{%J59{M(_pAV~zTWQ9~HVpNRulLTje2H{jALs@9W?Ozi z`t8bW%b^tbIU+sY4?g()vn?x-;;(`aBvQKph*^U46Owfx{QHrPA$7bO{)fLHkIM{=KB)4-?+dle_e(NOHM`A(K^FFUz~hY*SPckidGI}q;OoywFt zaI13Laf6)lD{hE|!#*Q#e&#O4(*RIBZY_BQr*ZNsZMo0j7ZNuQ$2N3N*uQruNF41QAMu*TX9j)f<*Mr9Xz!}J*m*Jim5@>pc-)F#34>v` zRnz!5U!f}OAdFb`OzaMJ%NNFo=J@58<>$RuqEYWX08aA}VV`U0h7FN3jt(@_P*mOIqMaUwqadz)e=M zeN|LeQafDKw}&zec|T5tE47+U*dP`Hj}jJn*`X=U80X^(0I`=T&e$UR5qz=~*(tWT z1?T_lN9gPy9e##iwJWFG;;iG!sle>6v{ytsYb*Bh(ij|$X7Bb+v1DMmzn$I2Z|rm= z^9*%d_Ht`!(Mfv+!iV52W4WU)`>Jn>rF8AIDAu44{&+)kTu>9xf>Y&x9bZq$*q4t0 z8G-l;f-DgaTZ6CRe)w9{3%5%Xx;9LwAz*pgDng-bFp(Bb$$2Pajxx|!@c3hQ6mw!m z{IM6X$|4Oo;+fUy7bO1JdEJlKxTd5JPV!-OF#SiZ^tt;dpY%D8`|*~3(c4m*P6DST zU0soiH35m6sN!m@iM>Riu&T>U}P_JoRg3MjY1l zO?68e&i^4JZ0qZ|n9Wr+eRhKXVO%wf#~F**L+pW@X?Q1z+wyQzE9iml8$SQ~p~YbD zWa%qMPim}w6@Hw|^n;(m)L}uHlI+M(X4eFcmQLkUAcn?v;>H*YUHDADG%)Cot1O9M zW~+Risnp?D!a15jhoZz$JdLsJ-v}K*43q>8_OTRI;I=#ZaY4LGu^%8=TtQO#5dFmz zXPJ_NHE^}9%|aBg^v$Vo*6!=9a*V8m>4&6q1xe=$)+7nihQ<(zZEa_^owRE@ zbNl7!!w2AO&!b4`+nOmCAU(qwpBu!bCED>Rx;^s#_>a%5OMT;WbV`WvSxLh}%=!zI z3U_=ml~XCbZMkn?9E|Ah__u=Y6yG@go)xrT6N&EnPBbC77rToN?F7Ni=3IkTI3@)5 z84V3}s2Zh$b%@WOgh=*}2{k1l#Qt&QA+3Z+{njTT&SQTvwMer+DJeABpX{O!k?c?I z{@rwcvbiA0{-m4WPlX6ySB+~3ad8sc{3}UtTW(9-`2)?|XE3PJqYEpgh4Z^uKI}tO zlO01hR2SJ1$qHdQXD__!jtplLcB&R%2e=B7+{0sRL$;STV!fh$ui|V&cDnjnmJRLV zyg)6Q0v(Jsd28t6LJ_5o z3^a8IF8yvm@k-r8lTIG^_i%h`SK8Ra7@6r)pNbf6ZKzftqV2 zBUEY(E?&=Mjc1DanvaUy_I)HLCU@QMAkCY4XPzLePtQ#gN?MFsk zfv^_cuDgr z7(I2>w){xLXkQ*1u^}FB?bD_-ny#YV!c~r-bt{4;!Ik(@UKo6-QFXw`j?%me zhpu*<4ydBOUlnF@?$N-ayEL!0B%QOPhO&%#6BgJy-qg5*Z-M>G_yCH6 zf>Ohtt{_69_2``_6>>dlz@HxbLC2p~z&|V8_0m=xXolWI%OUFg<$Dzl9o-*T#U{?X6uXz;?J@wM$mqam3^C}oUov!qet}NQeujv1d zyo+qTw476vcfHguG*9whFU@Z)*Gud8CD^n<_Aa^g>!p`LZhXCT5Jk>my<|oFDk7Mc zLax>B8$Lhk`)9xi&epsNhkhz60;)*%tHMmKeHd7@O7rUfEDEhc!SOKM_0kW=1Bjya3E!)5=<3;LM zYw}6H^t|TP{}x?E#+RxPg^LRZ-+Czz-dtYF3U9siV{_knX}!2wS<9aE>!sR6NVHz+ z*8+b8G3XlW@2c`V&h|RX#9sXqclbzHxF9C3rnGs&-jh>|S>yEvS+EsP(i`MF>^-aA zH?;ROdRu3viNN0T+CiPYr}!;hMPyd+{s;U@`6E|8dlY12KU#|bwmmldZzq_Hge6R4!E8g-C`^wJ_zx;M@`7yrouLdg*d!oJz zF$m5G6iih{#VSMN^Ha-|QAzo!xQwi4eky_`&pBWw||jSr81gilyWwT5vU265GgUo%1HbrSdaj6;4L% zqbqr3jvn;z4u7ca=tK`M@`pN(gsg9|xy%}V5?aJ^{NqtAZc1u--d0B=_tn-k&*kvl zd0{1I>(6DdVGX<^(XTb{+cFwS(W;je_#a}v>G3i5%ZTuCs&5$ha3o87bj_9cc+n6a zZ;HwUKAz(b5+9H7hY0Wy^-mQay<@%jc)C^O_+W@m69Ijc^a%qWxAc(sXz7ypSZs)o zr$uD~9}n>diI2tnAp(39zN6x!bA2y9V$T5|<0Hez*S*8Q$90!WeAHho@iD~^9}kGi z1U?q<2Z@iF{2>B-wA-ZOqgg#KKJHA6h(6jvEyRj<2hc}H&Of>s@{g^(!obInB#DpH z3sw5yHZp(yai6G6;Nx!oAn`GUKSY3!n;uc|QTGBbKB}8Xj*mW(;p1Odgn^Hqmq~n- zE>P*i5FdAn$^B4$%=(zI41);^W|a ziH|{s__$G2Ch#$uKS+EG;tvtvV-aqR0vm*UIa`)hmg(JeGSyu!AlXLehre8CZj_1D9` zTJFD)zYMYd;^nt{%a8GuUmt$?`a9J28~MsthF^Z9xBPCa7Yi3P3j#m+b8&Av_#6$3 zbi%S6j50Vj!##_DhvS3_ zzxxH=X105<3V%@G{hd}GjOF^Co$Ry00kCh?!M?U3KwggxRVj*;zGVu#gx3t;Z@qTD z_&!))#rK$j0WjdoyaW7-?w-%IRER%0O#FYb%oIG#B$)@{8XTZ)u& zM{`dvIJeD2&~Mt6uR{l1Tdd@CeNcpk;~IWUWJ zoW!{fFK|`$bF^26^(`rSLJjE|WEJgR9bE7DrMhtD`aL~ zKAk#h%Y6a4(orf`Vu~=Q3|2AKRvGNWR13=#ker(CCvHqVl>qke7-c~YIDteX(!5r zoG*D3ME}3_^J2(aoF60u+Q(oKI8{A z9k(f?+A4*+t5!!j;#@yeD^WOppT8o;0H$DdF5>O(_isWIG1klp5b>}uc8}$`+4(>MIP7Ye)2-!o{w{XOlORGNR|$i z;Q(k1d$KPP4EMMv5hC2kRq-qQ$qoHs!_cQI!_=EKV{t!qRfC$+tqV`tcJFEjxx;%k zGRXa&)||BbbftEXX$_181P$`5^dXW#wr}PdcHc?MTc`%#NlSeU1V7^hqBrGpef!hs_Kauf0+5`5EUb|W{Eb9@iQO_|X2#dgk>K`LU%W5h1?3kH%1r0XFH&U%=fW=<@v@Qdi|@~oU&Ii9RyOfv%2p*k&ONJbUga3u zkV0jrtDqb9sBY_W@BckLm$QtE1yh&|cA<=n!ztKl7O*hy|2>YSI48_5liB(pTVADm zQtSp?P6+0DfM)awumiW%MO^=Ym+PPDA}X%q<3m5wu4E?|I0DIjCqExWHS~rU|2Fw< zFR`NxV#I*AC*WO4RhN60RxiqYbY4ysC@NGEAMt zc_zXCWnMbNB{6^0bf{YKB13o)heKvB4L(q!Oq?h)P+P`mkc7DSu`Bgg6~-pwLdf5U z=hGHRn<3`Yb23}_^GVRJE!Si|jgl2==hKz)U8wogSmujpK7HGnBQfIn^ol4K_Iz@R z{O2>Dg7LrEvhN|rYqZQ3{&=;LB}~TaEbo>rS36$6%6Fm0Yop8;(RjH99wQ#FaiUz< z%*B3myV60&cnnI^bzF&_KD}nD< zAMX2gKQSS%@7L0X(iS~nvb05Sxthq-IYp!BCl{|z<9Thu82ui9kjCg&_(KH7=$B{k ziSR6TL&g0fbfg{Sx8+WQU4rwg7~giNSbiIYZ;(HHJG555 zyOQh~kkGriRD^_nP}s0KOZ$zKS9vmfeNFYe7?uJ!#M=+}f&d?yXd7aOdtHpX=Pqam zpwPg!P1%M80_1EbTbm(VD${=A3Rxd+{1xC zMoB-jxj8C;ein$@1pUn950ZXv~ygI*HqNqX6NgQS;U0|@5<^fFr1Cg^1l ze~|QY1%HTuUK~rpqZf5M)l*I;BYu-0ziIi6RlW<8-+b9d5Lr#}n><$%wq##cc0kTK zW7(AxqAXYmuit4||gK$Ca)WiAq!^`Z| zOYLl#{miu5OYPW>Rv{M1k$h)ak-eNsuzel&z}A)EwjcI5%nPJ9%o!S8&Mlez0I+-TH-3ooLCY217}j2=}w{S7VnW)8OA+KST|SIg|p-R zLuOGJ5M@q+j7pl|AC=VW-@nCmxLmPd7z$a;>L}-}8R_gyeiUGd0dLQwaT?h(>(M3< zS~FslBtAwHQ-Yx_gT`ngjS-b%N$mwDHhc+8NEeh%3Zj}~)dT}@TxL3JMGMwhAq!FUze^~!0;}TqDHv(mGwhurft#RU^ErO@;udbh}^CvQ; zK83q%0I!Em$}nrnu$Y;Rr&*yZ8Wv0DciZG9QFxu7;2LJNmSjakH?+RcRpqqhk-|+$ zkA)vaF;*3og)^MPmBNm;eo>AVS@CtKF$=}j94?+nSkgm%7_^D z&xL(3-yIhqg95sloshvkm`4S&brE`{D~E%wUY}FW(H8?ZMEf+T9q(Jp%mFsc&Fvt%agZ)y&w#o z@|A1jfF@gQZ*HsOPTk=8D{6KuD12-Nd*_!XQKb#Rwr0?a4Av%ZFR-+MoxJ8a!ekdH z$48(6SAk~?ULx!-Yt!I3ErS}mata2{xm~eusBizsd6yippX+)j&dcxzC@b?Q7#9jN zm(T_ymzr?(v}p3VtB0p)(H>_x{yy7U49op{$~;u5?fx?uJ&$t(duCMgD4?+97@i5F zwHL%krPvD`kK|R(d2l9>Q{LBJF(=o9aBOg^SUIzjmse&a%&t$xCyC0PHW>b$=j;AcG|i4FX<7SCSHv1xTOh~!$xKEAjc7{QDSoMx*hXr`H%djb$oVW;KWbUV*n! zm`O`}QO~5{v90Hl2R{a)hf1;QTZsXSBQAd}9_V-9E-kl*qlDyPoPQa^Gg}K!Lk&Dt zSA+`>m10{HHSm0d2ZCovnl{!|xH6`1%(7e$L|YE1bSltCPQA z`|Zu6h^W0-0|rANjyUg0dmj~XaC8)iqkZ}UClEJ8AdU=L0&#uP*vB}59vpE8djv&X zEj{AiLiYsXTnQ>F`mkZAjSzPea;S)Nap!Xcs0fQfK0_6)~Z7myk-rnL29jGqtKsj|5}c=$F9Qm}WkVHT}y7 zW0xTZFcw947|ij}rDW?_ELl>kdlXEbl>Eg6_UvHMf6aQ%RhFii@2Rl}_a$6%^K*82 z=5$MA!%y_Hs7`@O!;^*OAQb0?{>#|CN<&O{*AL}b^rtBouv#nNerG@YI?vrKFt`0M zWygv)hJ7%-H`W9DXnjEP6c#dwiORw#$4yEx`}L+?7OWKd!A%Fr z8Jt>8vy%`v*ouvB&4y*|J57R8^*i>;ypwvyPXTeI;*+lF;I2LSI3oN*@trlm4qUhqM zo{cIRY;8*8^9=RMop&Gp&Ci>`|8>wCdv$&uEyVK2H)-syAIm(n zW-Mk$;xW2zddqGv#=_|t0!>**V8Q|CBKJ^=bM5KnmIc530Yo6OUy1ClEpc$o`=-ai z(pv8WKUCJk%d)Zyk9iahp4&}52lGuSbks}pH0=|;l2)9co@JW^z3dsFpUaY7TxId; za017I7;9``i?(-IC%f%sY1rgJ;L!rJ=W(JK`1mF$CGfHsIV4q=+45G>c+66F!vS}6 z(A6@yqeE%P7EL*Z+Z1ehwB)8WJObD|W3z@e=Cf0QEU19w#(pM^Wp<-kYQA8^3g$?D z4()@fH0#m?Y?2nghgmE76T-QK?l{2a-IlkCgV)yV3K1W8Ki)*(Ii~~xt!*0nsB1)^ zxf^>yTTFj~nU`Mc-G)M6O`};Y3pEYx1f-sZih&UxW?fJ- z{jT{;qX&>ohub&$`IwD2GWF2$=xhp365N0bGZp^SJ!?ioY^4jHd^Rd;_;b(7NCo(Y zAw=ee$lP7c?5M2_97sorl!5&USu{5E&9P*0d7>SSkgd+I!=Q_bw>X-o6git~xa9Bs zIEinJx1H3 zS0ZSe77e3WuSDR@Qw?mnO*G$!n#a;);B#9@G^^}C+S^w-7T)>X7W>3lC1|2moY|^%+eIXG|I!$>9so+C>R+$XYt}S*&FxMNlEuB2G*JqKJl?ziZ)d zdbey-85U4Hn1qP$?hCdY2SJ0)-_RD=`Blwos0{feiDZe>suY$cWFAnLAkF;MLVJ}|($sjIi8uk12|eQ&!V7V;sn~Sl z@h0Ey_!f<=xhSu&=_j+H5MEV{)l-OA(Y`;B;GJaft4OJLiG?ak?nxBE2u0lk-- z9#^}0w{W}xN1LYRk9%6#yv6=(6wK;}^T(CvkE>X^f@dFYRosNZBFl{D=2+O6{lkEF z2qjzY2LJ>IEG|f6SM=w476omjzNwdlmG;~yXD5&I0ai<7q8B)r5`}JLB_%?cc*|%g z6N#`~yf;y%m-z|q#b+F!P)aQZ5;)L=a;?MvaKf|Ed`q9RR~o4kUd)#jE|u3& zMpxUfh0J{bPVNRNMN6;gLUg*hEtMg)_FZ>%F0vPb3u!m6zNQ z+})f-{s{y+^%CqpbjtbTP3SJ(@lC7bXfnAakp+CXaBj{SzrwgJrZvf`zov0I_ys;y z8MD8{uaRI*n~w*zXQ~ce)@fR$97@&g4>*+me8B!lJ&ie>Fppo6#~E!iTMj18)iuww z#>`H4IER@hRH;@>u-(JQ$|2!964|lO)L>4PbvCWC{7S54*F4T&L!!5WBzmi$sW5JJ za85Gs3AAyJDGR@C{AsDm6=FTlBjz`c|L^4e8lOYbpN&yWv9ckkbubQrY7o{3KeIBk zbU3=$n?^={2aJp{cl%x}q~_`~ir3yt2NSjVdYv`cocHv2%u?*u!vBiEK7c-2LLVh* zAD#UYP0#blhQKLaUVJfo^71kKUBe#7U&Xdc0gG%V34H^lk$sn;yeY&<{<0*M4|j$* zWA%;l-cbO-jw6bpvk)Ahny;1rpU(cP4vUJjvkK;<5Ot z)&18yu{ZJV{x^oZ>&(q!@cE$w#z{zO0G34qi~Ef>9ngN+>P;kOKfF*|?^7aTT3>(J zPE^wC+(q))_k67~Pp^=A3lc?}#PX|QDxr6R!xNli$Nq?v6KD~**3;=~gZk-oYjnnJ zZiAIstGj*-*fD(c`X!S8&xUmuy!k0TEx*txgQ_A9Oma7>V(G%Ajw;B^2}xtJgqfzDbHuQ{T-Xon{yDOf=h$3fF{jU{tA!u)%`nFqF6o zs=@EhQVoWIXBx*}yQ`Z2<@MbKyLJdhjoEbLMMBb*=(b@-#|bOjyUrPss&(cTb11)2)6~G>mxpfIGc??XAp)$urFwdx_q z2}SorHK=kBfv;Zh27=SPHkK!`Fj>MrhP+SS2v^hgF5UmrP8SX)pA zOO$RBrM*OHB2j8%#F&4RD5Vl*pG4UrQC^cMt0c-|iSmR*c~qjrN|YWFrGrFiCQ)<} z<@ac@Hcm^FuOv#oM0r!9tdS^BNt8JfWr9R`M56SOD4o0%=$MTT(#`Vj)ea|Bjmv}Z z6Wz;v)YHB8ujbv@r+a-SQC^oQ&q$Od5@n`D87EPONR*xuluOTw<@&)( zfe*CUenlAg#^oR0!fPbQTO)f1ahJ7q{GVS3v*F-%;lNLjF0 zq_kQtQd+DLDW4wlPs=sWz<&CR?8e}$%|8>>>%@NHNU%X(D9@d~6HzlSK@(HC3c^m(pq`P1;A_6u_`LJ~YM7M6+T&uL?~}r;HH$f{FNHa4 z7t3{Kj~H{IB8K_!oEY<>55+LQ;jTviQshW6Uy(-KS!p^uE>SASi7`JQ#e8V77-ok= zd0V19FH!XC#CYaPVIGqx!z4;yiE^Jr36m)GB}!GMn4dEe<)}pYLZZAcQPxS69Embd zqD+-2BPGf}iSmF%X)940NtEhEV%g72loE-uOQLL+C>tco3W>5%qF5wKqC^=iQMyT# z_7bIuM5)aX%l?~0DU~SuB+3?v@|r|hB~hL}EY1mwB+4~ug&iY>nYT$SMRzI8Cm)Dm zLVgh`PfKZ4NL!xPg<_s#i^O;mGsStVq)epD16Z~{07 zTm>3_nW1X~+z$)@MgUU)8?YRB5qJ;y95@2}4EzbyE6mWf0wRETU?T7&U6|lmO>}YM}itd;<&y5&;Xa5Lf|h05$`= zfD+&$-~yWN&d}WjJPgDDV}Th!Ca@CN1Z)M0f$xC|AaGBHE)=*2=miV~#sjl}EZ|vS z6R;I12EGR>fPaCIy&1YYf$l&wFa}5k76DHK8-Y)NJ-|tT0oQ=weHpsjfv&(HU=)x7 z%m;FT^}vT3_T%q&KsoRaVBDXfy8{RZOh6LwIFJG40j~fb1G|B5fM0zyZ7fyaVh6z6O2*E(1Yd zW$0P}9f96J9FPpm29^S=fj59{zyaVCa1n3;O%I|Sfro(@U@R~L$OKjbuL7R}dx39( z3&7vNEr&96?SO}XC}1=&9asP;z{|i#KoM{PI0sw>8h(xO0Nf7@07d{)02{CzcoBFH z_#8L_{0#gF)H{sv0Ne{i0P(;?;7Py^JO{i5YzGbkKLD4200=Id19t;Gfg!*+U?#8x zcm{YK_zZx&{QpW`diJbGpmjdnGgD}?ixP>lOQLL+C>tco3W>5%qF5wKqC^=iQMyT# z_7bIuM5*m2mh?A?QYumQNt7)T5C{IX~MI!Kge5=AFbet$@; zjnfk4D~XctrQASXI`y2VdtF^DGTrAS$_a^5BvC$+C@)JCMWQT_DAOg%Xo(UfQ67>g z?Ig-AUW$*rbfqdUUGJ@tZypdA>)r7p<;i=+##xy!vI;Lpi(%dyEmCS87b$Pe6)6rc ztDsE)clo5n<$~SLUst5^w?m9;`)-laQDSkXNnLTZBnf+Un^@YF5+%Ms472k~Uy3Fy zjo#%;BpHET+F?E`Nhr+S#e(#gCvxM~|LQZ5vUaK%Pkl*ntCxhbXQXaD zu)i430}`dJL}?^Zs{4uYw2TlbdWrH!A2CdsL^&)`3M9(A5@n3kdzWny>u{=7O#O@` zkPh*QXCAboY~q>g4(VR`VqA&eiWL26kunnZ();f}x=Mrd=^`=TPw2#HFI5V&_EYhz zWfH|IQMyS}Y={(df9b2fy~X^rmcsNJA%=R{ZMS zwIXG{6wf`TqW#du;ji^WbE zl&w;j4t>QOJ}ZUM;dF(6>a(OUi_*m~eU6DScamhr^Wa;+Kju(x%!!yeY+c0wY0`u^ zNumsh6~FrYBe5zJNp-M5qD+@4qb16eWnx+nNnzSalv^aq-;ay&T#zW=N|e144uixTCOL^&W)wn>yXB+6=uvQ(nXmMF;* zB~GIBmM9%1N(+e+BvCF;7kk1_66I@&vQwhGBT-(EC=Q8|CQ&9yl;INPwjJX5YAjKl z5;O7ZcJZqgtHiSJmcm57D293Eut>R0N-IN(=biV&)W603Q2x`=Ig2=nO*te|0)7;~ z8Zg5X#v>5L9ce$EfQ$+VDuIj&=m_)%;(%meHn0>}4ZHzt0}cSEfQx_&X!;FgRKUYP z3@`)81XcpC0-pkVfp38ez%3^sqr%^@Kz}@&fysasSO%;G-USMP!$2AE2cZ8pL)Q}M z1ek%zfE8EhZEC-61!6L1*_`X2QNbOd?>aX>OK8(0dg2HpU+0SACnz(v3X zG(ClS1Re%rfU&>~AQM;#yb62@>;=Bna1no9K-1Is7I+wl0mcF|fJ|T|@G9^ruow6i zxB&bOltK`8%MXwh0uKREz-VAPumDhimw}IfBH#pY4!8<5{1LK3;C^5LFanqY*ns80 zi@3}?`PfG$9P zzzj?VtiUp0E$}W-02~I&fIk5JFX*d4C!i1T2rvPd13U$+0p0}ifvVA z0Q3N2fk%NSfW^Qn;5A?iun+JxDE>c`kG8+&5nwHA=b1P(p3*8&CQB5vMCmV4x=57P z62%}=d46IE>Q|4%7+qVy+p~CDDx#sibNSDQ3gqrt`g;Ti4rVPuH7b`9z{@lqgS2ltmIHRicdXQf?q0-RSLJJ#nj>|N3^fL}@Nj0wl_%$HjPlkSGTw z%65tJmPC0@qSz(MlM-d3M2YuOeB`5=J!z@8M*eCouH8}6#{6=q*b!W>i=0EhZeo}= zl3;6rBr#2zAbwTP%Q4jq;tgRu6!s`Hc3p+8E-Grk_?e#U`>Qf zB(mDq#42e0wn*vamzE|XJ@J7UY^it4r)9t>i9)`Xrly@f6fQSTbzaw=^q2d^Du|S_ z{-C73`5|8XsbfI)!y96BD|U&L9mOK0^gEIA=38P$^+G0K zPg*X1RrbF4)xR4=N`*xEUZNPJ$#$6(^Cs!5xgEqQI!g+3xU(4M{k|gQ-8aQN_ZlFE zIX_sWgi2`zN|Uy1U-sk6Vp@kJO0M7R$n8lTV(L9|M9L`Xt3eW_vXj_?4@leUU`Z-_ zpOnKeiE{E?v0Q^Uh&g;pvS~WHUi|9A86pF52&ZrTS(A02i>1hsC|lnaQ=ck@d2Ndr zW|d_3^njGZig(03H zCCXrl(oLeYmncmnO6@4IT)#<_Qi-xpqHK{UuSt|u5@oSOc|xK*Dp6u3N)L(BL83I1 zC_0JqyQHN$Em6LbDESiQO^LEbqC6#0=17zY66Fzz(nq3nk|-@Die94pF;eUaWfEoa z8{)k2ghcsGVlrZ-Fv}!M)ecga*RsX@=yr&d#Zp?QH;FmC_Pj{xC20(!M~QRPo^2v! z@&PgRjb1AOkNDKZAa}a}xf}2>5Ce<_W&oMMO5j!CQ(!OfEpP$&8@S~+$lQR3fGA)z zFda~Umw}IfBH#pY4!8<5EQhQOXag+3?+N%j2Y3ot1H1|31788Bf!_gL1>{LU2cQQK z3(NtY0@eU;0{OsKz-i!jKz9+}03CpSz;Iv^kOnw_7l3zwoxsR-ZlzNWiFc-)Mo(J9rb^wQfAAw3BuoCvF zz&$`OU??yim<413&jOo(tw1sGJx~GstD)6p$RL3TARd?qJPFu==YY3>?Z83c2jCJA z@CRg&z}-MkUa12nFJy(;h^5D6pz(|~lq3A_Y+0DK7?1AYPi0vh}U88*-v=m!i3CIM-H19$;= z2iOUG4g3UL27<0Yh7EKCdINDlGB6uh3akd+0JZ@KfK$Llzy&nDitzwE48#Cqff+z1 zuo8F`_!QU+d<$Fv{swNT#&`f80-}J?z;s{%pa3re9|1+c3E&)X6=+z4@c`Tp3;;#| zQve&V9C#6U5BMB70{jg83DkqU<^ND#YBnx%pSEw=Se#At66KFZVwf_Ca#*4iNR)Ra z%36uCOrlsN%4CURmMHxtN*9UJTA~;v%9Vy<+0ROp;}WG%qI@V()=QLJi85cJq)3!e z5@nD?=_*lfmngv!<(fe(JM&U*ATK@Y?OxMIi%j=ui4rAI9+D{SB+4xkbk=D%(dWn&YuuoG?-DFu0A>hDS#lKH*Gua-$)StZIJVd7U= z9YjhKNrKTuiYHeRiLRAmzOq6rh2CpZu63AQ4~wap%l;ilF?BgNod3^AF^5T%`Vyt8src0yiE>n;d?8UDk$P{cBG&4dI5DmI zlIU44#dBQxs!*c*_^cRn!3QE`;b$Uc%wCbwQW~n(wPGnIOE#-!Da@=~@vHF?WvE0c zttU>lSENZPRQl>Qqxe;&Q%wD^Bp2$^N&Kqyv*K58-zSDS|By(@meQIlP1DRGh^g;O6DfQArdE=&ej-sGlN5Z1rG50GV+{ktoqpT3eiAJk2E8 z>_91=!(&9|pkk6pY4ncRd#m3TDfg@qQ!kOi+__NS%+T+}+9+Kn<~dOsaf78icatbt?Zp~fEX7<9 zDTaAhqO6rD%Opz41Tmh;QW&#D=`T^bNR-wR#UN3x3=~s8D^ZS1ltPK}p+s3PQF0~9 ze2J1GQASCWK@z2_M7dp}1WS}_lD3FRl#>!=k3{)IqHL5XPfL_V5+zlljFBkO5~aID zxl^KqNR)s3i|t+^QNEWb#S&$!MA;-!o|PzB66N<*;>bNMQ681}jeIFgeaVn@jTEMt zw93qRL#&P8rB(P5DW24)#5})k7vtGFK%Aqxzb;aaZxO!=@ty?p$V(sm7xF700hk7) z15V&2-~-@G;27`=@E6d)1^E@w8R!QL2POe&fCG2|*a>_M`~+MEf^>^?Er5Ar}1|q@CmR7I0-P|8W0??NOwEX6&M7J0#bnaz((K`U=MH-V8AsXI1t|eU4cQs zC?Exx599*tfe(Q~;5cv=xB?i07U^yS9t0wR1YjDF4mg3AfDeE#fn&fgz+XTE{UY71 zKxd#IFdUc!qyY}#1>hZEC-61!6L1*_s)srOIs(0cI3O9A4J-v#18)G^fCIoO;3D7x zn$};Wy9;<2hylg|Gk{EBCGaZnDXwz!BhQ;7_1l!$rDQz`Z~O5D!cQo&@Z` zbHH1`cHkiJ18@llXtYSz9Jm|k2@Cz-PdI;5(ok_y;gHUZlGN2nS3+ z67V>X0ptO%03QRpfp36cff}H3Fxnq@5Qqd4fN4NF-~?U*J^;Q1jsd>_e*q0{LHh%p zfquYnU=ol9IDi*`cYvM1*T7G}Wgw^t+8^i$^akR9WMDS16j%+s0c-;f0H=V9fD32} z$N9HB&7RM)m!hmFO~_$ z=L?1FU+MnWMCCH>ABJCm=+20Yy;`{;s3?Y35ae>!dw|DVN=o3?Z4!dS0E%NxdTuLveD8^KA+ zun_Wg3E!XAW^glbxf-4+K*9~vreN~37>r1DnrEcO2ym1Fgu$uCsfgrYWA?ptjc2%e z^|jMhizcb_?(1j+zh>B8-NEQ6L!?S{u=_6VKHj^y7pi{Uel;|%9*#D~#r@9AYGv7q zdT@({j{sE0!k9s71eivVSGm6BO)uXb6RhabSF5yfo| z+*KS=V~ncdvG7~xbLe7SW%DZhA5mi)3+DpK_6z#CO_jii`nC}JEILeKt8{xkW(L@G#$xYD8dgoT(Y4u4BOMDOhSZ4M?Qr}L2>%T>Wz+f z@e2-#v}oWz+SZQ(&p{E9R^#nfgiJwP*6%6(Cn$n+ieUD1m2PxccnoEp7#bKIuV|H} z#nQqPi>=Z2t~}-X*4*t{t=zhO=4>@CTa)dx)VIcLy3Bn$ssM$uwc9>zt`-7?S3^*} zSGfy60|`;ie!#o!v#jo%9j2dZN$VROh4=+u7@m9@ZT*$ehP*ko+aKAmAwUU;2sAp@ zBaFRBPrdwieOh^n5|Bb<2gtdRfqe!A+A`sB#uG(DTR1A~3#$7as1IF4S6lM-DX4vF z<9dC}2J2vuhHkfNq=6unKWMLRZ0n&VJzh)NcDFa#OKP&VW?GUcX|i&N zz=Ldb*NF(6$i}ZM!)@YvcnzZ8>U^v@8m2`9KAHWUO>xJ<+#7RV>`{A7z4TreH>uxMoCWWiZq9lniidPj?e+5rF7Xbmue8bEc;3Ku5iN5-NXfox{sKh@cCOc=7m8-Z6t zFs|sZ;o5hq-yh~y><&P66pQ1olZDY5YGX`o0G*^0a} zIDdc}AH6cBSHzsYs2!nF`KS6%X`c3c=k0*J|2<58#%`|po1&IU+7^1Tr;ZvnnYXK( z`eB=X8kHCPIu)<>cT_jJ`zoxrSWOzkKOuq>AF}&D_@2HkZZIg|#&=j(9*ehl8b72Y z8tm5w&I@D7&%pI=qCqKEcELSL^}zJepr^wZPD-9#!4e8D8iwy(QTfi$`qJ9D~QwTsM;*W}`VP82hi4iV;)Ng*e0?UdZPr$|d-R+-2D)N#6!(^^98!C+xPoh}GV*Y8IL$ z{{^>`G~-qt2oX(ia}sJ9IsajxmJTty=IP;>@X@!fVFpAvrVIYtg*RyF7M_-Vd!#!` zgi%^fPy&^adY>p!U-pU+V$tDi;J-Z3!|xt37)M+^%j0KG zB)rh=@lR{Cl!&P7I0)gxInB*^ORnDObt?IE1nX^1?K(4iG@JF zfTJK^T{4aDOQcqD%y(-O&*9%m>cOd<0oz%wD$WVkni zPj|xW&5hlUWRm+4N|7y7Q-CAa(`=!ZM4&ebWq6lVLu%;KqP19}*#QLLtMCvd%>bw6 zFVUl^D+S!%uTa<6;!pIUIhKf}JrK`5{Tpm=Ja>^NhO; zcoFVOVqbbG|Npc=O zc|+etO__Zw_W@@5?r>|7Ya{>|`f(&Hmpg_pvcl#l08+~02q zImohC2h5wQ`k7P)ShyGTIpmc+&s1n;m-4C73gL;(X?j1`RGeell509ZE_6PFliVcu z#&z2A_nQj18}wbT@Jd4;exGf{GyUzK;Hk9mE8d+C%A~`NH3hBKaOZ)E&j*ATmctu3 znyuDMZc9^jNv!!A7o9cB{(%qIN+r2MvDLz@=|0oZfc>UJ#H;QzmEy64*rt7^GCcBK z*FF=&<5}8k?K9Qlu^KVpu@aAb>t(MFvJJ~0G7|jz2)s#&2(mTm6BlT!hos9h^P`9O z)2hoK&re9=G^67?e2|X-x;{~0-4Egcejm$YX&=-pKXTCUk%-KgKZ*wcmyZ5X-Z_8t zu)(H?Aaw(fAFaMKI-ceqmy|aqpQlUt4{{W~hiwo2)|Hi6th3GrD_igvdO{@@GfV&> zN^BQx4%oW^Eprskw0bMU4f$|3sk^Jvw|^9!4{2NpZ&ju}&Y^H28$8lE*Wer!%zjuP zc94TU6gW~FV3`buKinO1p&7}NpE9=fdfh%Lf|s;C&aTcmdbkiYv#~2Rhe7YN+edi%hc@Bx{yEj(xm!FrcQYh9ppfEv+_NHi-4;hveE*=}4VPW|Z> zbQdMQBqF|aZgbQr?b=Z5N7<*}Hwyq=F%?8R1JLQ6k$OAa+QHp(#8ulnO6Gc%1-Zcn zgq*239;WUZ)3>NP5F)gZ_!_>bEJNK@nr~(=eWooYru@A4jqs(IYbwk!y`5_+$}zoz z)c2bgY1b^|XybU(V@kcusxom|+)j?)> z2`v5-A{tW({6gV{a@1)$yO|%b*oWhLlvJe2Cq9X#aJ%QK>+j6huseYe8x8x~0pwA$W2LcbWoo` z{*osJ{%EtKs0;jL-*1Shwq+@$>IOI>`Dj`z%W=HY{7QX|djFP}B3QBQiTH6|E6WMb z+Z>;_5tVpV;(1l(^Q!Ycuuv#IOFJKi&bx(JLert3-SF$B4DnrHo?k}`4EhP2s!{Gt zN0sD~&ZY38OFgu>=G7Jr#|3B|NUU2`zyn7bfKxC5`urw*6mj5fe^5J?mN zbuQLp5t}akt6;ZTneo zQ5x8H8=OH(jNTcA<#mtRj7zDZb{j5qg-j97=%YizAtMY%AIFj%OSv0gtyhBK#}jym-t72DezLOk{`7qJd0@sDWrRxyRYP#yP%59}|&TXxpXO4nc5vMTuXZ z$og8(pl`!X{b{h5{{Bzl*AIT=zut|Qyk6D#eA$KgeTb~ctsi!-I$A(APjK2ki|tvV zPJfBi{2ni$k=?Nv8nfR35rQLQ_Im!%z?i+7KeRPw=kkZ!jM+=^phR}ESKnc+XRp2! z@-1Q#m}M|=%<15mcWtIsg24|Qx?iq|yvpUeoyx&?oYPi@RhdGwPH|w9+#cLL3$z z2VB096JYlJ^Pb(n5j>LLyQHBNu5oK~-QmkvSz^GP$}U{Q7(>!7 z8=Qz5uu!_@bb;UDLGS+U!g|H}%su0dEWA)TXlD0%30j>;x$At`M>kRD6q;=rLMyFL z$MIcn$)9^jA{Nys&JRvfdlR-pVHnET4k1}HJM$r>B{`Y~Gk5{}My&sulWF>fefFH2 z87yP(;F%mtKg6@Z_e{k3EmE19P%l$ciGV5_JdE#bl#F0jP=U(goN!B;6YAiE7wT0u zc;BGlfc=B`){*@&M`U%%yc9ToKFBtogN7guzFeJ|wU|>nUWo||uywc04hHMMxzRE+ zdtx#O2E<}r2 z*=(#^0}Wi`V;g`XLiTFL^ccIL5Bj1(skRJ5Qzhn^kZ#qa3YRNg?}97QdzWeaQW^U_ z#*+(sMkvalWEhmRVB>S95V-keE6b^88PKz8krDK%r}O`IZ}EKFy9>29CJO_msU$XJ zo@d4V0E0X=5VXBs+KZr(-)(mJ4?cbr$PB7zXkFe|f##}K3|EV|+~hXPJS^C%kTLdG zEN@&Kti)H-tk=-~bEVRdecs>-xG*qAv|nb}FHa!Wh&J5z_pjHLX|DmlmKAW?D4WRwBON)TA1=UVP8FhGGf?bID^`=8egz#smkTwG`9or?i-?Y5u$PyO2d}SI`TF zdph%_3)Gpbu&oQbVQ0p8@@(s9i#I5Qb(nR=T~gYtV`taQOVQev{_ypH#&fW8Fp*^T z2Y(?UrqR)b=5JLNe@c*{bAgFE)mFDKW(Oi9wuQ#*8p>p0iM_gI`eY?7Op_)_?p*0} zNRr@>^_4EJl$!G(oA`uh zN(w)&9307pc?rJbGmOtZj4$LE*P2UKZTre5u)GUiqoK zxu2Q93FUS~kYZnAsE7RAMsj`d-sQ(`&@(YO5m-`k@J?&0P!d9VM+MuSAoj8`b@6zn zRNF7<=eA1W{3SHY0jg#hnzu`&S$3(KN&LM_(=11lW*Mqqu33)s=kJZ# zZ&BG$3;XoS=*kOwxsI9k=03~Vz1ZI>rCan^sHLr(!`O`%O#FF(V3xlrUkQ;PowWeg<#iphbs-vXPKET{GM2TQb#4Q z2C3eDbqd4;_SfSciqGWWo*z2-%n$GVMDv5KBiOJyEIRni(6@!r(F*&|1lIaX%nEz- zG7#k}CnL#yE_8;$5@2Ey4Uww0yEtSi~vxVap8Sir}Ta z)XcU%3L*UgrPA)YJvGqyT+s;dZFlB*__kJf%!@B&uMG4Ich(#eKIaaD^I~1x3-4ic zCz21;B2PB%;~C?ewNdj_r9*RO8ZhT8PRb6lm!K@5ETzIrGczGJ3}Up7Z?@W9CtJ!2 zo~=OSFbj{AErT~(_642VebF9$E`K2YGY+n_X9fpCbY^srgab<*ud#1=-YIvP(|L_8 zGxsEB_zrh~t(2YNU637DS9W1tg)3s8O%F-HLM5gPcmSp#k(k>8rk`=~H9oxy`|K1g z{a6Fd?6(xpP@o*fSB?PNe&fx=;ETx%>Q*%L_~L+)_MJX&&qEEe%F` zvcW=&5oBiydSL~3LjJ+)v>H_)G#Hp%Q&oEjWuWzA*7#*LYWw*b5W_`dHD84EW;PZ83 z62@S@hMB}A7y$*??y&#+k2Q>pfG|~ulKl^6>0mPbi43yoAw90g&3`bDO>x;OFl6_c znu9|NHnV~m=pcRrW7uP#Ehx)!Thl#_v`i3bD~;V55l};%s!^SE<95A-|CK%A zO>I-3gXsA^Jk#Is2>*`k<#(1=kX0C2IfQ^=#a6?>PU7l63}5PB4WRl|xr6Y+l!)lM zG>#LxD!aMa;&nBS%3=F2wQSChXpuMw04kmFo0Sp4m;f6nja2)$5fE?=Rqfw?HZ(3C zGGZjUw3)r^Vw4edSe?ymnN7nxoc3o}$4N4N7nsO=onUetAJJy#mi zf*2GWSTW?a^fg@}@nCj)!I zkn%Q`&oDGC?Tf*f4O|O_@V8_PN%P&XFyppDW60oTU5!mmTmCdI9=vRzGI&{Rit!|b zPNqZtvF!M-SRO$vIXsr}h-E6pvKAt1|5(2KuUIU`rj93|S?3YWM?aVM)ftJ1NgK%m7u#_G)Aj! zww8I2jbhap)eBp815J|gRkX<+78ZWoIl9C-`ZUi{y`l>t<*ikTtzR{`M~IUk>;Z=0}*|2kQLhcjCvj`5mnI&CKsc$5mun zOMN{eM(QmPwGszDEC+lTd+$#SN!X|vv%f}2su)yQUc5`$gR0?L&4#c2?E-y;AAJqv z8L&gp8o=+>CNn#US7;tg()e%_u{ft)wh~o>$Iv!rd?2>W8h6VSrUoQkXiwR$ZfkV( z^j5k#^M6(82DQ>j?O8rwtMqzmRJ_u^!3%Gt|9`IVWr$9z@HuLQH}k9TK7XLXNn!Mu zyN0wrd^45g(|rR*p!=ey<5EqqC#XC&a4+w{1~YiB4#}Qn&~HPd%D?^jp(IqXqMD#| z07n#ypIGp3Xrv8A6vV=2za_yeED8IdN!BJANF$7nS5Xc5lNZdLMpm4(gypB;zdnOt z_)2vK;RF&ima(M}Q4XSYP*;I~+$ik;#4cOwpL|7d#% z?iV{m>>9b=r7?Dq70x(P`zJV~f?31yo~i*U{8R$FI?hWW#Q?*?&egiw!rls+36H4W zxRuN5@#nHz+J>cFlh<>7E?a`7y&l;5@-dvpr|5k7gyOX~8y)8qUZm&(NlaJ5^3-Q= z3MFhQp6PGHa34;Aw=dZr(NbB*1~o3k{_~Q&$P@PJrp9F(QEjw+%YK1B+%*@Xqq~jE zNNi`XX=%*P!h_20zyM!Umq6aR|8HUnrz+ZJ*E&h*iOrD8(5D-~_L(8FWIsZle=|ls zoSpx8F)wF5vL1N@&-C~HZl1Ei`XbC;c(xyHU#1J4)q)-TEFMUI7CP|>;5Rtl1x*nUUN}zri>+Kob1jQY{)f@kL(vW-N zkMP95`6lAetSkOdZ~V*r;y+d5&i~e%i2t^_;@^_#sh@lN;?MBJ-|;5m|9ngx^)t#F z|2{}Py!F$@6aVu!5r1-B@mDSK_4Dyf#Q#rH9r<75ji018-u#dA#9wq1 z@xNSG{N26rze$@tPyhM*xI6z7ZzBGFb;Vzj;i;c!zxZGB#Q(`n#Q#HL9ra`N#($oc z4^RFhJn_?f|6k)P(HrVXwvc}=qyl0KY0RGH zmw_F}r~+vp$!D}WHDIt!=VP4Ae6EbHqnLR-6$r77*~IaBi#dv?Let3Dn<(bDJ#nwUiMYQX<*6H02!Fs!uq=n}(2|97 z6BgaZ4FT+dKFtFxPkLxaUjeN(Xeq09m=@{Q4aV8T*hRWNF^hDqqZjEO#q+B}aNZBN z2HG{eUkLg-JU@!?-{ZLnW_DeZoB9{v7b;Nu734?#U;fZHsYhSdZ@|AdNU=0*(g?K1 zK(O%c7C-Jw(>Klc+G}yS6hGXiY8RcEr=7N9XL1=kGuE@GpNSdBaYZ$#6869RJO^x2 z28P(nme^T0NQ>u5vVRIhmK90t{)wJQ!w{))TU=`_+fed^V=yrYf}Exbk{c8m?cdO- zf@B1Y;W4KTRzoGUA2Dv*wcoS_-3G&x8$azgmC~<>>a=vFhh}0tQ`J;pQ-=eKw~7ZA zPbjvdw3pOE!+xCheLklFPv9+`G>pa>2(U5Ok~M}giPEFImog?q>0$gL4uXd$80wPX zq5Li-{xk`(^GsXJNeQemt}G@w$lWyS#pf%@TNGQVGyc#%(;jf6g`mQ=aU&kdb_0)_ z@%TQT!0j}!-IZ^fHDeZR5@+SlPKTZ|B1&(Yl0OS?`$W~Zjm74nJjz~Uu!ZGMnLR5F z;iB_xGp9|ZV14sU>&x%4*EF(qLnKpX1Dh8X;XQ0I59?hs=WA3EU<$3 z+|4>${c^)T)7z94T~;Rj-3aW_S(_-PO{n$F0ra*!uv;M&>pb!TRy4v?0V^>*iQ6j? z+gaA(Q&@?aSd5ZfMpk)fF9UQg)V_8T)AJU@*}|v#aRtn2e+A6jHku^LXp%ci(Z`=f zOpwcUE`mh?ECrQ=Fwa9y*u+Dal;X?mWkx0W^bS437L|p-=4o6P=R?Zn?cG60fprs( zTrBg{!~K)_5~uAn4p`EMYzi;$QC5DBhl2+DPGdXfIx<0?$0c2r{rp6V zG$QFWCI|bkwPb(sc1{HD8o1s>)WEnEXKkX44jg{Pi87dOG=-H1ERneB)ALjy8*GU7 zllFs5pHwj*OrIbIyv)Ub6_5ZrlS%wXq1pY&JuG&e@zst4wopIS=t<2|B9hO1+~#Rs zJ#@DCYFg=HU~R^fm=I-ND5f+eCe&#=3qdBt5oaNzD}iaFLr-~BbM_k~GCXJZyL0AW z#eq2{s^V0bX_h#XsgCIj=6Vu4mIl!09%WT{q`!;q_EfjMW`@zRmlA=#$9xjvOX%UP zZ7fi-p)_iCZDTE3CbjQ^@EwHjfvKbk zo5wQ(5euGEc}@!09~}??VxAa%#M1Q`n%HF{FQo9HB=-Dxk4`&~!RBx7N$N&xC#^Or z+_lk;6f6x8t=b|)zi=xR$P|p2U2`Cut1`2OZ*<3;0X-f&vga?%4|r1Mgt1-t0Z|Xk zDqM4dS=GE-NV*nnDOV%cO3@E0A)bO#javF>4$`Yn{v_YvPxSc__9C9ChVDRtv@9ca zOkr+TkRbpU3k>m9Ab+wSlNAXDdSY6tQ!r5NBN(WR^Kd$vVBkj|3KtBx8-b5U9kdv! z&@NJMrN%+I>+aO-_-wTpkKW}ehI{_#fP6!q&yVdX=QT1%xR;8J@gIxU>2%0IDxkQui=sY-ghVZG1*R5S<+y* z?+Q1w<=2f=h>rrZi+6Y`8`a2JBt8YVlFoplL?|_@(9;}jjnn4fDrAc0V4l92HMyCD z=^JMCNtho-@Ue{Pg_8098s*zx1NUnEwM*UoRqL!QdWhIlyL%~qixgjV%z z_nE5j$dBu52TD*No&8z^+k+~5h5a3^4;qUV3Hje;1W?(mNE{CT1;3#CEFWjTX0Wwa zSuK1+_S7o7MW1}Z167vyuwQFrbdan?WxEjYb^5_sFADe^{ZiSlNP}C{$iOs}u_b4S z1v`5^QRA8?v^L_RM#xxUy!6;^t%dp`$~tG1GM^b`LyXu?D|{&Z=?tCCpo$v9`IPcO zHVv24dGW>2fkDK0Hpg@nf6ftua}3-#7WqR?TM3wM&fqMbf#E`Wv+_q2ip}yX&8{R7 zhWriO(uA9ijy_}$Qgnf-kS-RpyYNhZ-@Dy2f~aHh{?y(*S=D{UcsR)z?KO889d=X} z>0~_Gl&l<3z-;DJf*H40H&{HCU+Qp%GwdOp?NK6wT`(AX2n!M>K)%YXwjXn$R}pVh zw^ePTGZ_rTS(cJYnTP%7ZJx|S|8KA9YJBP`ByO*HI6X5jlFX#*V8&w1MJx!cOA;o` zu%0&3Uvl#tw?>GUflPHOPIK+}gIqgKn&nZ%LtR+r1Wt$H;?(`h9AMV z7ak_-p5-M}MbMBA^oyRVh;%ZjBIDB^Q?}{ui=Ck4#dLz|USNlaMT_ZVW?y{>;~^X$ z$E>yQST*)hC`O>tqt27qxJTH|+S#iEac-7m92W1vc)oNXUM0F0*6xR{3^W8=wiVh6Hw8)28bBQY=ai7zQlxgBt`MLaSX&mo zwgK$gS@a04+c2|5ZHLk}WUhkQ%s_`Nu0?srXpFkjTEjqp_7is|=DRatJD{p0eCF~e z5GU8>diaPWYI9WzCP&*->(n4!kfX zial9wR`{Met8Hn9VJ51?m`!$62xZf64lHkJ*^6Jk6`UJHRU8L)Iizo(jY52N-4JPb zT}S(5V5+K2!n*7>eEA0AepwO5Io7Jw`rv_4&|-O@N+n9FwH z8O9c!7!fXOfW!e?bTA=UVKp9vzG1m7J%f!dJrE93`5$5?`@6Jo&GycAA2+aj^iwPp znFcH{w~;stJ3bu8N?=h*svIv6-LgCg0hGA5+|)hLI)Uun$0|`_IA3(M==YGK-$GKz z@;#U=-y_NLy{~eTUyG0uu`8{w64jksI)(Ft3gw@;=mLv-D6I-g3n$OMO;po*9wVVV zm>=?}8q5WyN=%2Vbdwi$&%|Q7^AKRYl@>LeU*#w7G=qDiV+Dmt(_^6YQ4&cxu2&j? zS&jy?9IKuN!oo1b7{pUj;TDRs_p5M=JH#@Mp4+u zXORS%t_d^I&*_M?Pb_vzs)0;CHZ&FN!*5jE31jvh2$Q(aKgmTd9W?Em zZ6bB0YU)aFAR}JgQs1ptAoU4WO4*q&PO2u|SW!akzZg+9OAk`1i+%~A)3yQ5`Fb@r zoP%(7%^yth*bXJqbsXwl99b@BdPw6^GV+{gz(pL)H36*~U!feuoaG!ImK*PKCWYn< zZ|jU{&rSW)ajL6$BwP8eyE`SZwtc+a3Eu`Mu|{4Bt~{X`AdsE>5OYv5n>Zc^%i_9Q zk{V**!6q5=VB7SY=ui}%J=N5+*YM2F+I~r}KVE=J@Ugc^#m^h=zqu-emgWDlx8YYd zAU5a^d`xfZ+wRDp^2F>kGQ0T*FSX4u+1+f!PfWSxVVF6Mj%V>}X`k71rpF4~_ZDrN9EW06DA`C8=kxasJ)MNR{XE)X+9{2})DIQO3U z5W9qDqNN)>U4gI9p_-PD&JQNChW$M{xCNM4l3;qC$g)9HnME)k=nbJ3hE8QE1j}bR zx?bb^!VAHVqf&L~3^%&!=Z3clVMl0vB&)y87L&+^?femQ90q6wmc*XQ9Gr&E`q`L; z<+ZgXv_8^bt9uc5xxJ2y;BfZ7g7_kYi8a{I8;u{$0f$tHvlW!93N=^N+N%4%yoJa& zYoG4WvPMS&|1)bW^5Ee-D<@q8P~{w>SCXroz4C`58|s;V-}RIX(`soL9N~-T z9Ta;MW+cp%xZ1%P70Q}`bafxytchjR_*|hqvsRZA)mB?jD``P}?G3)5(o*ZYq$(i0 zm(;L_J;O^|QtNvuK690}e^HN`+bbUNl^V`%Evj*kY2nZ(+{WbKhI3F-A64!#Y8Sd+ zs0uc^uqjV~!8(~MCb7Flc#cG@M=L?p50PIY^dXy3+H_q0SDnZPJdK5uFTra}w8T38 zMeKN)$nMUiH;{ZA9dvr`CNA#6amzV}NLFL*Lg(+Y!?8LQvs>OK?MpR3cU8@1tHjc4 zJuo2~9jg#CamT~ETMp8SFoz~0=sTcb@ytEmBLmo$(vbm6S6D;P?8A=@(08mf3DW`? zTWEXoCiPJ_EP19wX0~Jq#e^e3U_mO(Y#>%4zMJ7MC*!4kPY0S$IyUyqCkT$fILBqz z>ZxlY`Z;TnNA(dxx&GK)M*&Vx9gz(QmHO#!ywuYV@`}L0nQE4ylJsx+Rz!+QJW@jy zVVg{qaK!SpyAF_Z2Xrx6nJyi!xmdewL%{ZdD70}fZX}_TV=R%%OQ&Gi%a3X0O=Qo; zVxmMlgXMzgVblj&Sracb!xLVlcYy{Ux1rGbWlSn06*!Lfrx=@?wy^qfk=h9ox6Y>u zX>bO_YNFh^PYr(l!4%wS)n7&L5G3f5CEwPh;)J-)RpTC#t9@gC@7_V*Krqv8m zzzTacjwN9YUizL~`@ehVw49?J!Dvht$ zn?@mUd?j*aW@CnbgGMb-H~KRYXpJpk%?+M0!S{8|-%t;rvgW+DbPX55zfDx&?!Tx95`k=qz8M!$V@JRO5<) z0yBFCDjn^Lfqf?Jih%;AH1OmjmJUAP5Ea-;RLoqop}J-w?o4!Vx^ZBp!!ss-K(|!q z6}s4<0E+;75GkYvSS)l8EnS`Q3d*Wx%FGgwBVGfEEEcKLL5EBXC6;7nhIid#iQUgL zhDihZ-};`6q2RU$v>cRUhUPP;ZK9C+$L)FQR-|5@g_{`IV-N7zqW6B9EsWXyFfxfe zL?s`8jb;oS$$)}AgmqVmFaO1-&g`ZL3(fRFw&-;<3ls_=s2hGYz)NONv(zFG1~1n4 zUWx1%*np$QVSdI5j4F^L%kQ=vqA6z{ipi@d1R11~g?UScp!Up)K-+DIWGYn8?)JMI zoV?{QzP=CvIW%6zz`!F)!C9mN%UQ^PNOX+~|Dqi>fz>3XKf=0=R2exucEqC^8P3a& z)9O9x0-VmcXw5%}DZ z60byi(~5!C{&R^K|$P zjiu@{dckRS2+#C)l-`qHKMn-*>(YuX7#dy^IpVQK<4QAr`kgLHT?O?J41JVAIMIn2 z3VH+Q=d@i_78sn*S@7VD&!VH9qz6>KVh7fF6y~#1H7TJnI}NL^LW$2(cov~OcRz+-aX>yyR&>hCRE#`R zwp)P?EyqiwU@&FpCoro)n$D za=ttt|L^Aq)VRWZ5n`nElHa{FVxek1<$6f@j7sKulGJ)56WN>H+>?N#5$0ysXVhw} z@B{V26pZ2(G&&2%(S<3i6rFl8?XBW{DJK-uDymi;-DHcKH}qz9@jy97gq}Ebx`_$5 z$K0*c)duy`=~n5~%hDyoCEhZA>bR$#b2ZOB#azgcDp@_1@i2i_9Ma_xD8_`7_BJw-9uoEx&j(r$)K=oFR<(n{< zk*UlBD0v+_cG{=pQ8Oj5;!f(6#@l%2e6@J$OWM1?Y`K8wr7^GL`9 z4csG&gW|*lJt$Rgu{Og+c=6eA_@Equc^}R{nzHwqR=}`v1x`T*K(R*RI#zu3JQ_J{ zzlp@HkY5y&PE=RkG%tP)3(h&`3O|KcSluC(f+Ejp%Ayuz$6rIbe4el@p;qil910&s zX4YdGDuq9*EvWT-K7w)_yz4uXko4W-N|o>@2mDV84)j z7TGmuePf&pJv4KL&I*O{8kQN3o8C^*b1{1o&loqV;bF^kwOTp9N%v2vcNAkDY8`;< zbIBg10`s$W;S}!Qol4V0T?gkeIm4`&4$kx2recsmECQIEOIZY->F@4;%iY#hFcl6? zWP^Ho#1zX>nMzb!m8aEgk&=88KWFej~l3(Gh`i5Lc6SHzpsNLhf_N zYIM*VPVbWNPMM?suM2%h$9^64RlFg*uvfGJ+xL2xz>z=!j&6)gHzJ|ZNv#jA5V`pb zn>}iUe*bt{fs6skT5kk-521f#br)+OZ!@?soGbMkf>)&=FuglF?H6<&aIS5VDqLpl zu?^Z8#8BL+jYFSQa5RO+!EfDu%thNsn!(n6e$AzjM$kdG^;s&3<>EP{moG!P0}h2E zK`xD2E?=nitRHzck_~hq2or(FUi=8;ao<35^~~JvijcS!gUKY z%g`~sgkUzggNJd_go0)-#lti3@zH^Ft=Lu)H=rEh*8nB@A8%$=eN`bn89V(??$YCq zd1NCIF4u71uV-|$rDdNA5!xOS}$TSoE5 z(0w}XUFo<_2OIeNR&%+NaxjVI-|4-9&qcLlfzhrP8y5}J%4p20(fWD?7!e#H~>p^JQynAKsQ6YS1-@ z)Hw=Y>bDM4Z2FU`vd1lJ$-$;l6Y_h`5RF=|u?%C-d+J~rH0h>x?DpCA;&{&TrBu>% z)DDUy@HfNU_xqhkFTm#ew3&rAtDw!dQt9fM$YOf%?Kjko^%B^^!Mu}9!(>03KZ2n^ zhd#_E;TQFo3s=iAHHM&^_91Nz!j+DE{%BA0rT31Tft~Dyf7`2D8<$VUSjH*SMOplm zsfGU7u-(JzI2ddzmMeZkq??unov27F_>8ZjJREu{4s7FQnCZ`{cgzu^S@$tr_tDyk ze6_Dq&(@{|n^_Lj54^jTp>uJYT1GatZo8PNzIHMEWNi}miK@P$jK$%ZOyf>m!8qdC zBB5Le%A4H4M=V5KI-bk7fur?=%Z<96(?yobd6Z2%`5pKD2IDWALPAr-QRBJ z+1oKo@B~%6nWsFz-SxNXHE&(@U9w0Q3h01Nz$nzcPOsMo1nBjF`0MvCD9C?3=;D^o zsT|8q$j-1~6C~H90D$Zax7Xt0_5T*WT|WXY`u1_Fuwj6E-;+&x9D8O+bL%2LMbh1l znqUI+Kg9lAi(LYpwdZPB+G+dW?MNT6g^_4n)m)^6&BPBbF~SUeN1V2&=R&mR;4V=l zIxt>ZSk~eNs#Q9qIvMd? zXY9EB70|_&&Ou%Q^&@S(mv-q^L5*x;?do)ier5{){d^8j%9nSk(=q|yx!OJSL>bfl7naZ8-nDt)yvbR(4Ur8P(66% zM=EoG%aS0UbK0``B{=Znfc*QgZLaBK z8hS4(ruV@otZ^o<-*4K;T{yVxQt$^og&0_^hg}PHqjrtx3^jNfqZ_$I~`ej zA2%tL-<4r2WrB)gQI`p=IDDDtisE3Izy%DeF5HRCB(VvwIZ=05 zos-xdt7%w5wqm{AvW}z==@87WA}vpPBkU5O4_AsW{DwiAXUc+9`V9CENa?WibqjFn zxbT+3_z7`3<$HuUPtln77vjtY$<+f=VX$7{W_EUVPpOU!p7sh{Gn3=8ZDMyQ^oB0Q za*&xK8OU#eJ;VEK?eF_(_jAay>fqV{Gy5)v#7;QMjg1ab*xD0&VQOAQ4d}7*;c5(H zhz_T*&O$CRFof=Qs@gx0mOi*53&mj*-99S%D$Ws3YY4fE<__n(2=o$Mj+Mw}$6rNC z*zB)jqb`-B>zrldzuJqxhuA3ocME$2f2mJ%*-F#tnry}IxKj<{GdN6o=R{X5S zi=`qH&a^tNKv_Y1t0Vjdlm@MQ1UT=fsEI%|d?bNYwDfuPjP^=s?i{FIP+Jfnuz&jS z5x^Y36OX0IE*{lBqe02%ce+0rI$upEc7rRt;8Lywrg*FdIJp{TFZ$VD6JuPy2RbF= zR_9}R#D(RV@duiAAG6Wh64gmhsmbQ9IRQvLc znkA`GQ_7BsL3woL&II;vAL=q(eE1CMj0T25MT%*iZy`psI7uqwq1$@sv>t7Aj0C5R zDL8L*C2sjw`YX8IA8c&ENL-PKov~#P4HIlYN}#`ip2*!J_V?xkjZW?r;1Ti`D7)u& z_ROO_FM1|6GuvUMqQRh7uL)YpJK`sLQvhDLN#w8%qzP%9gmHjj%eCXX@CeZjmn7QW z!}XWAFSO$oDkLiEb}j4JhDX4R!JGBN7a~zGgbsI^*@b)D;TvksVajji5$V*3wqvTG z?X8JBE~Uy~FhJH~tWqn(vKKX>-WQ3wh=BsfT^Bohp)SC_Ko-G1qUS)m5A!g49nYwk zstaczmB3BwxclX2do_B)Ye)_}c_Hr&j<=~d__3?s<3sf#=_n5q^X5ugZs{WFC;lIM zZv)?Cb^Z@0Z72aE2~eR53MwjEbZC*cR%wB>C>Dy9))xwFB1V2r5fad0p_o>i-o&9} z8%|WFZgbOZsEAcjTc~XngreYzuc%B*SX#=E=`9qA!y>A?GRt}YfZiEj(QW*+ihlVyUpIln7v)lmEP{|sBM?gwzF6Y z-3^kg{sCh)zwAo;r*+i+`qBDIIg3vv92@Q5Www7|SK5EMZ)CM%)+Q&?{)<$d8SN*T z?c;jsd^fI-YCls!GO~-pCee!w&bgdY+4Ym&kYb#=f)Q-I@UMRO4>}{?Y);7EAn3|IccTi_`A0ypF%sW%nRQ zDRQ!}1Rurrt=)e5e{u1)f17; z+*(F(&pkMtijFDX3fu=CJmnC=b@)OlAHv@sp+cN5O+GzPh~(4o*lB@H9#oSz;)bML zFcOY^3-~`sfG8fyP^~~92p41cW|x*>BH2ywRR|^5BezX1p6n{g#yeLY3pey5#vNRY zNy^@FB|?$FF9>Q*nVEdVS<1^XOrq~QUy-!T-!mV9W%nZ(qj>Jr9EwMJZT8LeyvD8b z;a;s{UknZU0`w44ySyI7kt3_j4W&Aml=3q7o>KSA&@czw8&I~!UB~|B$+#nkB8r$E zY)s@{!fjnIj{Una+;A%Tg}5BlcTzjP&?+gdikMPSi--))`}d(qV*YPxrB+~d1q~i3 z7=?8~cewv$i&yrRJz{+wM1h6biG4lv6v5lWWme=qI;$*0rad}MPZQk7e?089mt`>H zQEVtk+j^^t<>6aEfxge>k+EnOARbE4U1hAspRVF+RAEALDYnUVct@^7EmMebB_QIi z!f?10+h`KXrI2B2Jy;4w$FCPN^<~+&4+NU8CH0uMA9yY#?13A{L>qJW6zpy6Pg7^< zbp6iJT`=U|hbSTds7!!UDuQg5bSL(P2FV?2c#75m*&j9bL9P`B%G~5Y1PvI_6*fbg z_p{_9@YMM#v?6Q)UA(Zrc4dpd<{Ttut!VLw1}{zspE{I@X{U<|XOcBEM2{x$D|!*q z2LJwatuJCCYZI`Ca5}aJk*m3nc1;_brBGl-2sTSCqG}a)9FFTYYX9m(*epcag$XO} zg1vT)-}b3*f*T2_h3o{sHK}jS{05O9G8)ea1sC;yxj7vMZG+S0W;;u0kPyiUZKk4r z6t9B?O$~pSmHVm6$YJfuVC5pbRlssrq^^-q`eq$a3W5cqae+V77va!hzH(Q~D??Ek zN!FR+J&AFhk!p)^Kj&$2^YE%$5c`$>$`}-Sy*Jxuynb0ukN+&oSy`^WG0D?{BA!t2 z5v!-@0T}U`4xK3){5T504$E9F9YzXNbhCa&-e7lI#oKR29g%17&L8d$@4|#&e#^^T zOpK=o2aWN(9WF~?H0mb~%ARSn%Xw=@>6fhRr)sa}_pzMAZ z(0z{hEff$y0m1AFn2D9SKPshD(#OQ`aLKF(hOY_~ZUbsi@PDy{e~3aV#7sQ%bKhr; zVdX|71v7@iMs&bAh_;p{Hhg1}N;y>1!$jpO<r*P6FHJpNWr>sGio#kMi)jS$+0Nk9 z5vavk)FKQM(o_#@ZIi2FJ!DsroxMa4#?)aPPkOX$fQU0EZz2foP5DR|CxYja0g{2r zX94Tyi{XBp_d;Y!v-u0lElX}#XhWo@Yf-i~=q`mlD}H8Yz~oO;U-4m15-KNZ;MBQWcAV#<65 zHrf>!gY1Ifsj8&-rV?R>tF*e*dgs00O5B9St4f6nK*=bsR3Q|N6=29J#o$AAv;;bX zZ_Cz!NiV-;-n@CqWoz+xxIxRVs61-ZHltkp=F}A*fjo2GPr+WkxONU|6x61Kb4%Sj z#CbAn4U8OXfsXDdbMK%~;RO~1&PMuz`?yLzE_-K+8m(FytC(qxoEQUzKvlmW59RH? z9^#oDjq&ILxz1{RzsIT+74EP=Zdq6Xv5_Z_I zlo8?>1qu_L#rLx$4G>%V(&HteS|<@chI730{=L|4ZMjX$kNEXvwejnV^W7cs>&thQ z-#Qof^Vm4wO~fvfheee4@xYJT*iJKOi?s)&3HCgYSHOjyi+brKuMJ8qvLTL-O*RA~ z017lxJ;PNYsEu;O%n5{%W~oO&@D+%Be~_YH7(JRnYgsdxASI&FcTu7Lpv}aZP{+|yXnD*VCPh!ZMzd0O z0*BNKIg1fe_a$<~YAQC`WXm&DBCv1K1MsqzxMi4e0qhbt;+YHe#fRoXMT3;&H%3T( zkqJ+Q1dBz|s+#b0JHJYE?)KnG*Ap={r}7LLkK$c*gJ}z%Y)*N6c>74Z=0{*$#IWk_ zL})CJfA21{lD8)t29j zDjf?{2znEctRYcKR$PGzE-Hm5B#Pp=7+?T5v@qrkC2H*h!#>3Sp)!J&5c_=^ZUMrC*=2AZ@<;+ETM`6CJu6w{YSeY;L*=- zyX}rttFy#IOmY*7j$<678)Ug%jko%b_VT5@vMTtf^>uPBb-)1ei8= zP>*wP+Ua9@r6SQ`(}T>r@7)bZr_Cz-20AuCX*LYX;H2K?_-BT?5VSq-pYRWnH@Kg1 zr|Hp{7;~{AtU@xKPIXHclDbQ`m2b`hs*wSiXi|bkw6V(36zWBu>UW?o=}KeLhJGCz zlV+OFiq+~FHuTSmQatn1wcA`Y^GY-2XI;^^1Sfy&KLXMwfF=B|@K^5&6@aPKmwg7k^LyR}6_I)|`TZ>Zko@Fnr%iSGU9UGBZ+J+pUx z7S&N`@3gM8!wO!^TdUXU#!>A4{{B-OpHik?9)lutHkvB0AD&bS+Q|y91xWoG&nxxp+X3pZBT?mmZn%g2h0qB7Hv&*R--hiEklW3|N-Ea3mD37PC^{-62*k_^dooh6N&5&an2pcdJt zQw)AU`cYqS!b0=wv&;hpyq)`pQGJmpe7;IJ1(7fOY<cE55^}pd zXX*x?#rP~7Oi@(%?luSz}Kzih0Yasn9@&@p!@-0T}34z|Jp9WDE>^-r@Y`Mj1BEKTpYplqVu1138NyPG2$B3 zQaGQg%p9pMul*bgs~e}KovJPYZF@sC^kcHlqQ@jzwh1csQ|ventdj^uiHy4s$@0@O z?mjfMGVcC!;AgNF&jtz+y`h{H#8-*3(YS^MXi{sP7YtkxG#t>{Rf*m{U|4C2bULKO z+O%O%46LYZ!r(=}65KXwa){vXZlU!rl$`a!f{y|-O0~BG1$9&fXvYxxY+h=u)4vK_ zy1F)k%SM74D=b#|Dk@X!7ACe6# zjRX2>0WzB771EujYcF!tR7r%CS6;gpoyt|e=${9GDz{-kPrSjcXnaIZmcCZyN{7D% zTh?=>uVt=urb_?qJ?Mc(^lOm7rP~Ym}{T6;wZ|u2@d`*Etdf`SA33cErA(p zq(y|pB%G(_h|I}LF z0d2+_macS`JWZeoTYcl9GDuZzc~i7pHbHHV<6dnuiWQ?*3z`{YG*e+qtwb}qiTv?R z{HX6aQmkjM)#QRVlu4~vTW#78Q>8YIfRbII%_#M|i)|AE$k(<@>eXs&I88V^GfGqI zoPN4SYK6rO<*>EVvT+DEL9-@Z(^YV0>Y!SnAm|ESkbdYpT)+#A?*6o>!XrPgu7bIS z3`l+{V>8U>ZIO}*m1`}HLLO_k^-?!+&ir^F9h3v^A>v_8al78?p)IiOSqf|2;>DZ; z$G#H!t>6-?XBnw--Pn7)Y%g&qWc)UD?V z)&PqcHCNUV=Q)YMK_WdZ2I4Vl+S`(%r~SIcoVI^6c+y_93MtAFfByP2bXEr@9S31q zB#5AC**tojZrM!!e73%JoC;P{d=Nf>YUTu;5T9ssNK1L_|4id7X@-PTKS<0%H07!#Oj=-eN(5c7n& z5QV|tK=*ng(T3rZzNLyi}VFU=?SC3~cJv`kG0?1zR&KoBC6UBd~M@K$$ z`VVjqBKZ2m%c(gx-vT?`eVU zP+_n*5iR`zXePR%rDrWsY3I7{5?5}Dth+SZ=qyjwv=OwU!0`b|JD|1SCelJtb}KEn z5GNsLIw*Fe)M*iCCy;2D@xX#OM+lf0@4SyNi3)IM&_?Ho*$HqwF0gy(c8p2M+)z2< zv=dGWR6;#$C}Cd6T4H~9x$Ce!+a>m@XF$L%u?x?#qh|Q;_A&3!T{+@cN9t%o#X{p> zHCG~6EIjZj1yS${*OC8ea^G6>4BR?Jp+C5k(kNf1h7Oyx@z^Kb3niXRobp0>2YMER z^~+GhW9X?-c;oJw zxxA16|9my==d0PVl$f{Od^P*JnY&{Kepo+K-<`jlXm_IX)g0K{dUrmGdect6njfe- z=z6}I?KYf_6XdJ;N0*zED0VrU)AQ9V!ZV}j9DB(GVd6{)PuE3+H>C8yXiz(=ZHMs2 zl>{i2zTJS zjP4*CS$J_w1JXV_(tu%~jb_SJGjhh;+M6+M|NPdoJqZ1PG26YEE$qc1DQY|0ZJ6!0 z=-I9T^TgSvZv+c543W1EUk_;+x`o3SYzGl=WQjdjJW;^FdR`FXKHbH5F5N|f>c_5zEU~|Ndp611cF;;%3UtHV7 zeH-Zby(!&!-%u$J+aMkt5##(_h!{vRb`=cCocGaQUdqE~O@}my{`#$!)FPJ@zWgPB z!2TG^n!N!Y{o;dvb77su3?x0rvf$$!UNLZ4>VggoXomubx&;<|c98zm?#0r*UI< zD7NE;ouJ@R##`vX{&X_)sA8@BN1RLv)7#fCM>Ni&w=(PjVU!7<0T`-MYjyK&@-1eZ z==o#-RKDe3uCaQq>-n%XEK_?Th}AEC&G=Z)Mpti@K}zZBi|(>J6{FypLlT>@ptdn^ z+k;RQ@z6c|yoq7k!rcA=KLY07I9^AXgFKlq zdL1WUdmT!}vTN#Pmd2a-^L+d)Ohj7??wR?$z&REtcqmv$6Sy@GLnh(*Xhva2AXo3M`k;u zU*(8%g7n^SCCNi8xF@gr;yC#UqDUWhoY7O5^zl7HOQwpR zQe2HM`49tb7im{BN<)h_*@g^<$jZ`P8|<&4uhrdq_$CU|UysN$F@sz9BHsDf2gg2(+3RUC^ERiI!* zRKbGe;q;sqS*ECBA4C-&iN_X@VBSknMe8_qFB}DqF*8@FNNLNb>jd*Z&}4_~%trw| zNF8hnU)vo67_cdPCh85=75B_2T~wi63F;7W|K93L6j>k42Jwfy$9qe8Ie%8_eg}j! zt@7bB!CX*vHSS$fR`DiLd@I)$3+K(F=TuB;1YuSC$2GWXM^?$u@PzcMi0Z{cHuz;vsi!$Q`0))5JEBUXwB zo>3biY3-ZN(P?dlYaL{F7RwNsTgAfHICh-FB%W_ZDd%VImmXYv9@y$Ug~a+i={%DN5H0FSg~4#_pQCyxRSS1!5pL)m4Z&llobT z3g58!W?_@1fPSixx#P`4ybsE8`Htb<8|eZb$mW$$4s&^2hPrruULY!j8N)CkNx)Th zW(c?joX57EIPjoNWOn#F&uYVQ$n!Exk3VK`9PNe=lXzWuEnx!f`Y9o7ALu*kpy8lr z7jyn&94wjM2`C?`;X4`bd%x#%9)H|)1>lbmHTq^KBusm=GQ(=fFa!ezfZsUn*jP=B z`5vbpVpY(1-y9!{6M=+!5>tKprA}?ti>IEBLOBlcr^81XwD+R13mo2IKyt)EDW15# zau7LU9+W{U_vuH?#3=P*F6y@tDg6u`OF}j(R_L)Q+!98{qSr&m8WSKQ^OhE)>SE9^ z?&qPAH-_j`eqw)sGX499Ayoy}^q%+4+wvQpPdFwaS2DdaTbwUVKRxA8K3(l$o(D%+ z$oZNe>Vvj+fp%2aKf_F51{QK3#%j4HXF8Tb_l+0#3MD$=)tCAS-LCfq5+EE!+C+b~ z9c|L>8c~6`I(e_b?YdyEMtA-ukl`3cI!2IM<9l2~w}m0KbW!g7&HvGt&RNV3P=ONU z>mB0Nt9XZ@yjr^XE{&;ZT4XAk7NnxVB%#y|B_FOl9v|bbwFnVEgZJur-ChBP0lo>r z(yIFK=gw7?hxhcV#q5wT1RZ1N&q31DL*BuwYS^A7c%{82LwXNES>kKN$t$XpkDngs|DL5Er_8E>gk?ckcMY9l)Aikq-f1Y^f3LGqDIXu|~ zrA}bvp1`C%wuz|)!uJ|}AYKH4mLo3T4n<=@69|`|C4UMNzb`^7j_JPV%Uk?g&PlF` z^*u+7hku+wmd@}!m*+K2LU0Ql&LItIHj})8sc`8L4Rqfq@%Jy)rrt?dftgmpemK=b zwFEX3bA+AldWPF|H$9CH=io^wl&Xxgb_K>^kcnDNa56$%x0Kn_i{J7cNmf%qAgI6u zn`qiCjkCOWc;124E(8Jf(D%yV2)~26qC=7a5%Ia-5M42bJi`I(<=*jvXFKBhgLNQ+ zw!y9eUY=#y5MS*oEhVj`!N}@1oK*i78>S6s+LEbI0s^h@zL^X#DxjJ(k>ueN1Cic? z#=fG=yyyg(Kq4+-2VKhv|{)&}xz$o7U{vJVitas#s+ z;xaVDfU+NY&oTna?n%R*OO`rc%-d$3=M->)NULydrIS6XJUhX zUdGI@gc*{Q# z!>0QOmhiAe`v-Q@?zT0?b;bX;Wj)pOh`jpWRS!<4XMz}YH9qPa`$AVJ6X|{~(~e&d z&+xOz6^T!6N}5(Vw0j!7zxwhkEXLq3;k&f5!3O&-c%ShlECCQP=@B3mgC#G7!ieit zvd-KP*y=GRp#R_~NE;kAZU-iB5yeBn-xoT@7Pk1#)7x1a)y`#lJC{eb1F68Ww-LP^ zj5uzL1xW!2QQoPMVuC;WrA>87U+@?BU2Mc_DU!%OCWS2IJr3ch;daKaYgDC-->6Ez zMkUN64>8NdDaRT?f$)0G3&3r1@^I0Z#RJ`hfqEC>zM^a*^wt5yFrZS6gJ>3$ReJ{? zQtgdrduV{QUpv|uPKAiGI{doB*?wjfBiMuPIWgexd&Gm8ioxXEbo9`#k_NN zhq*KlqGYUPiDN(Sc|<{R7ApmSVOjFt1RPcA>G=|R=$K9-k+fBuS`#^@43#})xag~f z>g$1F`fQh0G{&vB;(e*xna4l`;yZ+@ZtNyL%!I)cMNG}23BhqV>;;M9-+1&qj17d6 zkuDC9&MZXKM(4%?Co;`IMzceF{xyzOcV^b9=MzG_A+@jAhGzoIwU3b=1TALwglUnb zH*yggfqoJVY!`n-(V{{pq!hSaos-;6^W$^GO1*v}>g!Gt%0eWi+MFTx{HZr}h)6vm z4U!>wD?=vH{hmKas8d6J1L_qx*=*dZ!S;TK7{PJEAQ|x<^j`k)sM!mF7FGu`Tp0X# zV0N-s8Xg>js-`V6Gf)l84(b9vq8b@tb9;kCHB!jA8P8mat0H{>*GPH<{^+m>D0IzB z&4T1+0O2c3m)!Kk7s`2%Xg61Uy3M?*=mkl?6RALN!(YCSpU7dUfCfUc+q0y8d!II1 zMO$Iu?VriH=zi6vwL9lRuWF#=U4ep+KwiiwD{*Qrr_faUklmSxS4j$S-ijlLXVI;)!G-uVdvHiSLu%JrJr!%;QpuizH&X+2+ zN%xN+D*}h9p%+HdN+f!|>w{`CH>QPNO_G(8F*1|%fV;afAe?I+n`*91eiBSO(QS7I z`*1Z5^!&R`$64$c1)VQdpx==@#kp2cLqG+pW;bM+#(-)36FcC1Sx>6O5tXHE=KUkJ z<&L5+tm2aKJfTdh3>}1&HU>r@Ummk>Bi25`MKYlUQl@)#NC2ho9xpXNW4|(h zvQAv2o?$^yC(gn%KmYm%9s)gXx`a>K%h6^<&&VCghP@YaV-oHjNW$$bd6(ao+APkJ zT09{$TD7~M6)bB9fowD7-6Vn2c|X;udEyhlbjHypyZoOmFFKOuEWVd5waS74DS=;{ zi7Rc%EjXeo28KMR;D_mSdtDfmju9RXMnQ;!A@K170hHuwmtNgf_eWmH^`<|hnZIHVXEbG`=Lbr3aHN6%_9OlY6dGL-=&+W! z?3zSTt5ROuaL|0t zVUmaO2|R1^A=w;p79^X7+eA^?=!=x8VkXPoPoYT0Ac&9C;(ZyOOxzhtKrR<_B9t+0 z7c}CJDaB)~BmVkZ9LH=JG_*j(!XTiq)0;6C778#TK|Y84Jn@(D(ljBPg4$7aF0K+!Z5%Rg&xwcPUam@la;`T9&?j~P%epcE))D(2 zGM9kVd|`|Du0MK)-zl^4zW)XI!x5>z7H9EVoGpwdRtG7EqTkOK!7hDqyITlH2WRoS z^gLOX)KO$BwiI!;ee4^9T`T?r>lKE`Wo6p3$QME63Z`QUhY1%=j7_DGYt12j{RuXK zio6V-cX&J84Sw)4;AhG)-oR`+kYfat7Ec^~IdWi?1VcpL==8Ww?=X%wLmm8Fk{SCV z`PU?waS%F&t`J=^1zXj}5u&Rc&m^?cA2jz!xhd(wNA#HJVPJhlc+PnkBrkPibP^3O z!u`;aBW#0p`Zz>)<=YV^LD9z*kLraFyIYz-&*H~cPG?ff=4+uz%BY{>0(y$GcsEx2 z#QgvbeAcA(5a;R){FA5wW>|TjwG)Ry%77#39eZB~X{EHGa7JYXSZ(nRf|xYH{3wLL=&K)#(yTY z9(N-C42}&igjvIJQEB7Fi@SC)^A#^^Fe`t-x3MEsx*T|OOSOo)$@hUs%n>zEinQN7 z2%%kpLh@Lwl-KYv!>u9~av{Y6485oGH{XAV7AS^Q^q_e2QUH8*NUJNaAjD6jRfqp` zC#A6z#eS}fV(S8<^8-t4fqc7&e<=p+!};RiM)OVN(vkPgWWYa+(Lo7zK)O#MeICqU zG^{1FcnpEKN&aaWO!%pd#reR*q?lkU1pS(OTQIvE`nWPT5|1FB=WfzvmGBq>0^bzy z!636%x@kQ20Z&G`IPU@TWE2%9TD&uZ8DAjX^x|v%NBViE$zb&UzwRPvV9Up206}-T zVrymZ%!~KlU!-IKp2yoo7McaQ*B_5*dJk1Wvj+&kX%CJ{IAHn_WTFn8e>EgpPi$8d z(%X_kY60%5c7Fufe?71`M7+|m13z`-*nyA^mzK}HdEU=cVbCxf1Zxyn6s|m9B>hW4S%qf8fO!BU{L6Scj7JU*CRx7m;G1fMQiK4>JOQg8}$R+#qN7k@&pKoLw81PFY$= z{yTK4v*h>K>@LLkN|2NJ)iuUsZi=0ZOvDF7&}K5V)I4;3G7rD6uF8gsshyeuXH}Or zVd!DH-ZC!gv_S~vgIJ~BKJ)y`lTPuCqW}WdlHGhG{L5_?--X&}gjZ8cIixgiL;vuk zp`E@0O>>Q^13(UF`Ksu=XAj~>urvU_iJIy0F!LgEepF9aVUbSEb#E1qJ!gWf;{1Y< z7Yf8o{tq`w82U$TYqdL!cvz=jhTF?oLifKh?y&a;9WZ9-fT2fxSq61QTaJR6;27`4 zvmTc}RsAyaE31m^-JEc}*j*Y83>{!~r7Q^bcdBG%fQ;g=2pPBxGxfvnuXKr9N4-mv z=3x>I&#aTieH=TJ?#Oqc%I_6wc9#5w^#SACqXnt3iMk959m6l>ue;=aGds#-c;s-; ziww67gZ?$jNKqfQ$s_<@Oy)K*J|)F}oo&|(o_*A*8g~J~j z)s`-oC8ot@jTOJY7|6<^$4Z*)&Gd&(0rf0JXP!iI7`otWu$n})07Vzrz~W06*sy$l z!vq{n-LO7{1&4jTl=XUVlC6ehN>QB8T|T z1*B+Pa05WnV6xpRhVa#2LY!a7d}s(GyhB|64>}r4HFYFlY5luKbGfGR=TmG>O3P|G z0Ek~9@(z=pLSM2YaB0m1skf?`0ObVE&F;TPL&y%;e@0%!K!`lgUG*pSSL{N_q9vDf z?y?Jq-D?u08E=X7XxH_4D*Whw9lkFNbv#e%IlwY83Pu^7xYPKh3jcq7xo&#yEcp;i zrK=cK-rTu5+KSSeDCyjrP#$#Ucu0ZlnmXe)+bdS$na3lsIC4B%bA&H1%ZTha zHqh|MOru9@NChDzyZ26YYK)|U2X}Cqyq~hQf@WM%{w*+|a6$VZHX>z{x}~;uI$5Y! zZ*Yj_znK%(#lxRR-bBq9@J-*Tj-~hzpM17_RxktZ>wOj{@m}udKXT4OT*&7xhFYM% z7plgBE$gkiORL@!4aLJGEY+>H`OgiiJLq-|)oODo_byWSe* zD65Yd?E^nBm4u|(I%YH(;Dd~2XUWIoyywZ}@6-hQzjO6Lr?#}@KKgS>1o}ON#eT1LtEmp71E~G>8{t)d9VM28QDqC z<^A>LJHxQuSzQ5vVZoN!vo5W`hq+^FeIX^3)1SAhjc7-be*K*rH~T{qoyDN4EWycJ z{YSbl8Ox|^tp!0W?cA8)7fyfZmy4g5=`TH&>5#-0;U6iLXk6jX|&fuLq2}+hnD)1pd$0{9h}y~Hxui7@bvFNBQ%V|j~s4=z|Jq3D2t3o0u9i7 zp?zLVHfWI1b)jCPIUNV7nM`&i7%wY%pIY%$6WCTS5=h6Tl$wnH10qG!IjY z7!9B6&ydQ8VVyuFq86SI9(CVC0Q_t;D7p9xiVUs{5Q6!85O> z;to^jLhfVKc74dc5p7jctnMdI`WG@HCZ zKi9t2=X%Y3@?3+MvS<&K0tQ82gbGfr_nxI6{B`Q!J0k@Sj%5KKQbx3U^3^){@3yBe zIZx}OZO+r~wDqd?_SfD8)GgibXd$w(VNx*;(ZUuSx3AueTO64rc$Z#B~`K%{2hL7 zoX~k)yV!7=M4|{#;GmP>46eG{0pXt;q^i9uE&Sq~Q5M}~Kstri3d{MBicfYK0SIMe zms;_wzOBP6P`y&v+;-G?bz*uC?67qlWW$q{>X0`*e-M4-&RlzFhYNic4BCVVpqUboRoPE$XIZNC?;@Fz5 z?8^r;Wf-&tT`CS4Oou@XrRsrF?snG?~+^*U#uf8-+ZV|!J2NKB|R}`;<4r`xrWnoMfP|@SQf3oXtsDMLhWEX zV7#T{NUDUH4jEdgq0+5ipJ|5^gh~W+oQ`c=oet~~(gqyf%%y1?%ldt70H^tRQ%VK$ zxM*)z9*JjMKN&B3f@AjO6t>NBK2*UIVO|dEel^y+OUsS8t*wYcxffZ{WJVV5fyDj> znK2Lx_~&bQwKgHCGRX|;J-P+65*x>!c>dY2M5nT8O+R@z+=12L-7q#AcLPv;C+n@% zrM$&x;R|ir`;|xI4{e5*k+z*JUWtG!-L<-2+x?$+@3qrwC;7r<$q~z-uE7YEwN%%3 zGA=sJL1{K0V+g>v$CN# zVZNVMWB&MS{YM#sV9{^{QbmIIbY8ys71i!?D`Zd%1o5<(^d}jWpyWaP25~cesaEVp zoPjALm2I9<3~qXjDL#S0{+iXN9T44$KPq z-FA($c)ss}Cb!Zs6Fn}4F2}zt(FNpEy)aHo2rqVVSXHmd(GJ1k-SfH{I3Bm-k#otz z*qHr%R`#15Bh%Z-Fc90gv|Lay?fc;!i?zZ+$y6j<`DXlT$*Felf_>6gO@LiHbTDfw z{Ds@nOWj{A?u}?6V(5VZ)-v}OfNSjYb^2BudJn_Sh5+0gb`^9za^0mB#wZSv3k`z( zLXJ_b?WZ;R+UAK}|1=l&;X5I#o-$lpF=-^OX6A~as>}jyA@sI1pRnZAxEUhAB9=`a zDP#Ul$0^?i9nG2=_i7fXaj)Zt=>3kamcG5a%2fK^dA=Jfwacg`O~B*=XYkwT|U9A&Cz<Uh?0B^%IlvnGUi|ZMi<*#L=9yqUK^K;aWbGO-w zzDS~Oh`z(VA^P%xF?Me-O5qIYB^#Ht+Wp^|HP6BF4VO-;(KQXA;_w^Cv9bXiGtHXl z)14+$<3-n$dm*bq6tF=Xh2ZzT+qLXxgC%g!MKF?<=XW8JE*+jr_R1F@jzG};Y$91C zHI-4lJ&)292k~!8WQ-uKDLfjO>5GkZ2)pesoC~vI7+FrotEQKL4TB7+Eqwn2gjl$~ zfw~5?rZ==!H8dFw;o5O;K(u>Qdl}W_h~RjL5zUW`s7}7P5+mYpwkt$9A05+@CMb7M zBtJY29$x;t5?#1`5s|^gkz~p;xW9v(y6E0snX@^83Q)BA6e{5V5t+b-`O2|tllx71 zQ*Xd0ORAXw@U-o|Gdc2wGhJ_%6J+B(S=0|>=$zQMKua96cBnSsf zW@3;zP@9T>K&7F{ud1s<-hMwiEf4Y238zq5Rd}_E(x*YuUs2t0T76kMRpyTB&6ZkNu%SRvBS- z7wL)yL8{6~v%AQzRC}mj$F%9rcRMhQoOE^?daE^R`KD>v>CR!5Z94Of(y}M%KgemB zHO|noC+k1N&Pc}B(AQQivwLj>e;RnyE)gdPY+_7=R2Ada==joEG6+jK#$Dqq>Blvd zD(UNV1H0850Ev=Jq6STK&(sR9)fNxu)vslHNCqGgH7N`CoE2{|*bPlodfg( z0SZ&By8;t!(lkEG(LM|s1X|{$lW_S4COXR8SHm}YitZZ?8e*cWbYi-*&y*p~KDi^r zDHujz;$-DHUFN>7bmG;Tdp#WH0~5gyzrY`_1vlI$yl4_4V1*Y=77v9<4LU#`TD+%* z7eRks5ngnySgKw_Z~mbM!`Cg&jWd!ETrB)XxbpM(|`K9paUi zkt8X#5qaYAd6dS0rt~gShjZR4Y3gp%K5aZL#?F1Gb|z7|$bP zbhs;;4tH6M-PHN{AqM+mum*SFj{EMYF+k5;V}SXs`I&;ZxQ@-R7>G7vp@9?~zdZLm zK?5n>2TQKy@b!wL*>Dq>5)OAo$)eFD9 z%ir{L9Cjle$Bbs>Ig(OQawq^-mLt&hz!{*ubR3j9>ghN_Vn%w%a16N$kIFH`SCOu+=IqW zO!W2!1LjBGiy6%gLveTdQ!Tz;QMlIx*FgZ+CV*=ae7<$0^TI#$EkdYrNBJ~ki}dI} z;2x!KCaz&+Jccbo65|ONNYZRXghT(c0uvG?B9gr0plARd6aiqle+K+^tkq26c?P5Yt@z zM!yeyD`St%V2mbmY;G|2q$5^7=GY`6M~ZQ55?igm=`Y1wApj2(^G?{zg@t_i&`2f~ z`)^#PlE<4TV+bB~m#O)ko{BlKr$TBf+T13Tjq_B@X?rT9*u2n=YXq@XKh%7Kc#~L3 zh`cnhr++W(Gvb~1|BSrb(2~$;g@|L)*iZ6RjSk5qHFhfpi)Tr#b{5}+TAob^;f;*9 z1`}UEv`Uq;|5E`zV!ayyun87Tq19v48n>5OOelAi8?;SJ2jhYZ* zL9s02L}7u%$A4AJa&tkHj4O%#y|*Bh#!h;ad5_utGn-}mmd3{<9ko@Rntb8^JuN4F zuR!uhR}dYGeS`MpiAg0En}exzMmo6@XU{4H9wP}QF;`MF=1Q`7PKQj+v-eg6XB&CR zV^(qF{Jw}}WO;c&q2)FFRpDO9v9hQj8%&*?3|W z`NvW=G4$ykSeh2Jh}x&IWU!ra7E5%*)1y;@qjJO}6}5f8>f(TWa&Zk6k7CCSkh#k!ue$#(UH#L z`_japapEQ!KST8tRme*SHn6 z-Sf|CjUT#RNfxkIQs&JyJ^f$OD>$yGScYgaPt=Yo2z^a0G^f%SZO0 zK$Z=}bonz_H3&g;-$WGxWeF|s5h1RO5#q!EG{)#~hrFjFI$Um!cnwNDasg5?3yv(w z0{5}VmnaYf{Dpl~9}JnMB9e+$n@M zi|gT{Af4z#Vyg632#qal_WI_jcz_1F>j+L?|50#?(jCC5lrg|pik}KvzvBER%8hV0 zAuJ=jtC2|XG=#xK4Dlv00U0I`IH(78-*Sm1lHBikO%jGVqVFr6ftqwPVsWwfS{*m; z_dH@yf$zTDrTQ!{Mxnle9eD#KG@974LdTBrUz^xb_}kn-1r$ysf>zS$q&L^;;OPMa z2Xax%9S$I6#6pBOlo~<^>#}U+3_5K%%|_xEE`epf37vW3E;OdVbC3*PXwMOY_ID9L z+k?;RV&PK<&S^F{vN`Xg)CwU8ocG?x?Hl0S7?(EN2OI1OR(vwg#z{So zF-U`oQ07tBiIpzai82VO9+>)xhTdQIJka3*OrT5=}CY>9Lo;t6POvoyHATY$h zcB6No0iJKfGxH@nUyt)wZ1RT^m!zTgHdT8)K57zZ9@}_cO#)!V(s*V~!VrG;uSrPf zXYZPXIs8nhNhrc6To0CX(Af-{w-x=$n(6Ca-5rL01zX^G0sro41K$g$P4u0D8R31k z1%|c8Pb2x$mCoY(z$?`xpm|x1J5;g=uK-N1KMmql+ew7)9R&0aWG*p#qK?!Z3ZKXB z+3B!%iSnEc=Zqjk%6>KLE9=o>Y8+aNLu(n-pe!S9+=MuvqbwtS+=Td;)|@2* zC@1vuLtsx@?P2=F0-P8v-A#5(>v(nKOXkl z+wJ9E*^3-^5!2u}H%^8$J24=Q=KV){`R1~>at!`;D3Dcez4YD=;0pY4{rUR0ULzb` zeU0X=x?*UdrT4jomVe^!EWk(^{wy}D%@${~+2ZG|T8-a}@pljYR^sm|{H?{`-|%Ni zNJy~aPyQE|5O2dnx2U^>kMh2-=V}iZ<6_DKgP!D>JqRa71|J*pC&Mg*z?+Q>Znj{C zEfsmmi??Co`EX_%yVT|zm=m006Ayi`4{AOsX3ww%GVDaMHVX_y%Ws)CZyv00leZsk z(55&lkJ^%VP{=npelx5R<*$bu@D@gS4TIy~#%Stc}1?@t;%#9uuuwaNDh zE5dKv_E6AP6PRe9t;x}HiHVhIVcpg|Qx^C{rFlO3Gi6%+7c7MzM)Mt%?j@{W z<5Gn+8>y^;GQ8d$FzSR%U;#n_dRbeV$1qJF&CXW$1Bs}7$RQ%U_IcjEZ5Z!pf7F8g z*bvqd=RXV?M1m9$4#Fb^gil>f;t#$>Tvx+18it^9y@3B6xp|`QFpOC+z^3`#8Iwfb zzN>*B#Nm5JT7pxD=%M@q$46qKuz4MaYT^-Af;Cmsd^ix>S5&e>j(9Ut1L5rQWer5J zwd*$7Ta1xNeN)6T`Gg5~dW*sLUS^pEDjHesTqSRLdx(GhN!ph81(ea&`rA^f1_@;F zi741YM>Wh(DjyCfP&exvcsSE0ANn57w9AJchcg{~fD>M!<8XJqRF+XH%P5tlN}Z2z zQN!eYPgADT#<*SH-gxDETnBGog7QXEo=I|jiCAzk5@#dZkS%qBjV>E%c%1)qEyEt1 z?h4F+t*_PBP3w!NT$&J(uX~jzj(4*?<&ZYsA8r939S-@1c!u)69{~#@&*W>2`yPl^ z-ohJi_k*kkFS66gcSfmywFeImH~+Iz>NXO)e#sLDQRilikI7hum*6i3%H*O!h^RE!5}sT z3QLhdui9N<5&6GFNTd3|qcknjrX(>q^O>;JD}D-#SJ^NKM$5h)x)o|;Pk1jcId2a< zgV&%bF$h&*&CCC7_;YFXqTyP!R+tE*p{k_#BP{gQ&3FS5qYIX(IpSevLB+7v!ThcY ze|vG;t_e;Yq&>cjuFF_x<7slc4fd;N{bq%RJOT+g-HQGQVjIVY-ZqZ)YkC2wQ zsjkyy@u4JW?Xr^K3e?ymAMxL%w*(MBIzXQ#AEzK#$r_sFuL1Rqn0?4EH?0|-3Tsd% z=q}C?PgJMCj`DFU%J|uK&|L)kWS2PV!QiC{o>W((xv;M^M@;-7&Z3RceLBu8D#VbC zkvfa7!cYTpgbm~I$X~q)>V+m(IVdfD7PRR#)bCsbHrmUQG<+H%D5FeXmP<+_5O$418&B#Kk!M(^w!wsv+_a~Jz72Ib`CVq29Z<6Xnl zL=Ms>z*w|~{uonHVFjc90EV;ICA;^+BsE9;4MA2kg6z|Rj-Pc^^e!SHExaM9HC}AUw z7vqsTu74eDwC&={8d-*b*O;JJl(t`p-URb60Esjm^Ox_VqzohWWuz{3`O+}z;1sa` zNh>}NFURSDQEi>?oZz6}__qv7-3r_P8GDm=;;zM@P65l3y4Clcgbpw``;eg{7^KbE zbWK|MC2!%m;vyhD6G8OX(~*nESB(C3PpPOa{TI$^u*8en0pCgh?n>B*bM#_dYV0jk&(hQo6xD8C>6bYR&3m0gVd#ct4LD*=3^LEHWFZSh->NklfEBkbA9 zIKbkwaoBq|dFq#cnk0I`J7FR>1e6qFuIhAWJZ4YU< z)ItY*^g;3<&ng^I)Y@)PA2LvYp0}1kqFnCvHFEy^+39lD$m1cu^l`6py0Tm}%!5TP zO)0?!W|0k)hsxPULOG*|U91csHHqmURm}_9(u20joZRWTz>ROf5rn4Kf53!U>+H*7rjLgK}^q5k^?DhwR;=PnqilRG8}}nPdfQgIR=a+eMnH+ zVCRUJa{9B3MQ^9oJ-U}|8SS{D+8Kgp*^W4r+#gG}Hx+0g$@6C_I4kx%X7%KJ5XHZj zA)r|HN5vJT*te1pP@mJCT^m5aEtu~H*>#TiXMLJQi-$VA#=VXUS>t|+A6hAqOihtQ zH5{WmF(+6u3{N%gr&$30AkXqs%?CTPE|6UZEASdwh`-d73`cQ3>DJQXz5Nmimz;?; zggZ67L$qx<;vMVzxD)HK7;K*N-fGNz3|<&3I2q6S3Mw1o-LRZ@y6o6l(hyEpI=Fv# zDHb~&yS}UzWr@C>#RMtc#1|%F;|F|-$?QU&7$my21mrXU!(7QqZ_k|Ysf2idy38(< z&+TlSPTT@#772Oy;NItm1UVU>51~C%GwllI3(Q51iD2L^)o0*dBZu$L zv<>su3?tZ=B*SR<(hAcv>-!hgnSnZ2j}Rx-pq;Gb6PXZXDc{RRUf zc#RFhsY{YttSSHjeBe`OxR5Kso#?YY2W`xyZ^74~>H#XH~mm)ex5fR z#-Kbqku%16I&uU=J%wdA&Q?vy2>hm2zGM=M$u{tS^=nY)?NsBuRq?zP9N(>4S8o?)kt1%t#W-)Inf3FwGUmLk<$0sfC#dKaoVOkQ?fkuqbH~fBgY);ro|Ak2wp{rW&tKfRC*}OTy7T|c`TOGE?VZ1mkN$V( z@87U#Q}^AEIe*h!{|o1@r<_=;^Y^Fh|F!e?(LdTbe>LXI_Re2goBL0{{BYeli+@ID zG`k8oN5ARxM6a z*V!$p5TwG4D|IB_ERp<>OnF54rL!xNcam{g@Vb=kh}mcT$RoPH)fK76k+ePPh_05a zrd*PvuE;^?6j!8lPY#x_o=(H!id>Bi;O}a^Nj38cgy={-MqQEVpQ|I95_3h4J8T?L zwh?nh4#x{))@gXwSFcL0-h?^E5#>#+u1I-hMc2XziF z$;KO${RQqvb_W;rU^L&ZF`hsnhQ&4-Ag~ z4g}IPTk=-u52x989!=hAst-f5;NgayN6l9)sZERjXT|XuGiIFXyr0V|0|oAEDCe8x z%GA0gJ%hGBunV404Wq;ly{F}em)LT}Ip-Y!|Lq_l))F2qR@-bAX3EM}BxT zq=a^H3PGcarWCpvi37iea?#~QQmL389JwNIy2xXBq>V-Dij2tCL3C zAPpD##`ihmxw9clN`qc#jFxAIKlwSSZ!a7iyf^(KSV`9|IaRy2 z2v32P@K5-+ z2&J&VmJHU?1^uL!*%IhpW4naa0fEe(d4if*$p`e`Nqc=ya(n$wa(n$xZhOn@!+%VJov)ws$23QHIN^Rc zH}>{7Fl=YXX7d2;$S!x*UeOf;PwM!JuIP4>+e|jwkP*@1nibh+Wy*4 z{`f9~+0scHpX;QKujmT*Np3Ie%y`?9& zy=C?vb-_jOeK*Ep*ka_vOG`n(F$h;IdNl6?rcIcU53lG*S16^9+V>0Ti`hvZ$hgOJ zdmVag#*m(^_>0*2_=U_<*J*zjowWW2_(RS^!0#qMnS`x z|AY~#NbwwqyVfCZD&w1x4G#_X+0ghF8L<2)-^j#Z@Rpdh1$_T?$1j74={4U$T2*B; z0*~u+=vw>dMYTWwg%8*cR4hjOp&!`(*-z0yrA_;=4HJL)dtW_=6lx`UM)KIL`UDv{ zhklBToHP#hUlHf+#`qH)@0gdHrGIFvz^PGo$Q7T%-FtCd$|1@fVmNTMo_X2`-6G|L z7P5?t-2S#9I`VK8V?AoG`DnJ^an&nMkE+>uc^yJ#`9o(Qk96qF*n|XRuPR|YbZ&rb60zX5BN1-|m~4f_6)O%I)|6Hl2RX!} z$xmq85dWIq89Ey!g@C^#s_)j{2|3`w>8pIKpQ zI4YP2-wWR`t*zBOp}ey+zVA=4zQU(m ze;&+D3tD!5n}yH`XeeIGOAI=$(c_+`RxV5k+WO`+_CcbG&B;?8$vY}VJjC~>U4x7C zjuabgaa*84!qCJYcVJ)zEq`Q;RXBE?=CPs!5WtZ3l? z&sWfhs)BP0SP%txXMbi5+Q!3=8Q)S{yz$|wh!*4sBD4=}FPX{4>WkBQ$Z5b`lLL>M zf6(@znt7n0`9{p%imZLm&Fz~#3kGsfiMgApZ*nP}hjDsz{ZPz$m;J=`1~HYkC~7a z3M|RY4J!CC4S+WQ; zk6M-fDj$~@ewOcpQ^y2cHR(1&kht`_Ar^*#r#iMOKaiw-qW=<{=%SV~s5QeYLG(f~ z|FSU_?;!uHd|~nSTW>A(uRjCoJ2=iszotYB?4pc!#w&HEF<(rwI>BFbdAZdeXYrom z@w4}9)5nsF;SOfn%G{39Ogq^pI8;S&0iRG`n*smDeBjq3)cLxG0uU;4@c4D_O5rT} z+^Sw6g%*+;o3Rq+&lS_31BAeRPllp8w52<4hjr-MGv+E-f{&R3M8^mi{;jsaY&-Os z9hRW~#urBdvk?Pg2;AgrvJ%k>mO6D1N2v`DyIXB){4}-;0WK-UF-x}B;muB@~26wUNgCtAQ zT{Z-^c9hB=v>N!O%fc{QZACN5{k6}l$pHM;5H1a9*Wv=$=n3}H475L?M`=b6ZGx?a zS0=!I0!jxmY}y1zAj6?ea0N0DZ;tNAgqNa1+R)l-taNL~Ir75)9cF(hjv@}TefdSf z7mpgC)aicgHNIoApufh+u9F+8cv*><595!;fP&Ctn2cD;Q)fV1z| zFp5cA&X5#JYoc5xdQ!D1km&~YKO9(Qn^yxwZK=t05C@iooyCP!wznN;7-F`asJVdMJI6-8)*ldr}+rf)$+`yGyxJwdBAFZg=M~jLUD`09- z6QCpt@=&y~QX3R?heQpULa-@w|7-6vGa&@^yTALpeqYI%^VpBI*Is+Q*LD+lZ$j&D zY{;Wn2?xpieNN%Q76+w!|A6Hd$9DjOM74_mz@2aBS z{7J1Uf_RMYQ&rT5KYgo;`dZ^9oQ51uVG_rT&j=S~SmQIpMVZ$4tS}LQWkGg+-8xiQ%Mty=pxy*k;KisJW?sQ}g?SR!K zHd@{=@R4%you%Fq#E}o?n*{%KJ}X$8Vz&lDSQFC(CkkQ9*_{X@jC@*MQ&O0)o0wE_ zypbx>M|e7oSTR_{ip;_9laZa`K;9B{JIxcQ1CE1yN6Hhivm;7J7j}qzkWMg3@5m(a zN$OS4+A;mOI?*EJV59>Pr+4T1R+x+V%X|8p4Z02$NUevmj$tB`b zV#%xQs5+~6*u9h}d;M~-~g*s3g8T~+{;IO5XNtRI+-Zio5larnw1u; zb6VxggKs;+17M$vK>2X_@<@tC5U{>Gj--#UapYt{_p>qt-Is&zy1Q!Wu6+6T#d!D9 zmz;RKnaRfG-|}`gjc5VT2~142Mc+t@gs06Dcg=|Wi+mgtgxwXyXzI8j68@4CL5EO4 z@2AJ z6fk@UlW0eiBJ8A8#!v@{tkfuAcn1*S1l%wsux5G_5$K!UQAhKNE~wCPBr0@#UsO2t zctM2@jS6&or*vDMU|2G`lR!D?yOKXf-4zvfiz=vmuSNwTU!u+!I_yFdvP+`_x%EA3 z2%i^3*bCQ5jVNbNNEJAo7 ztD9;~%o@QGbR^G?6i368Q&^8#SJEXbA}qL&g;ulp&zwRT%kO&I(k&qGb#20&N8*2n z>u$j|2YT<| zzC;Qjssx?fb6o3aU=c}qeRd>8OV`pc{7>~nit+^Vd{rQXFJFeThJQ@CDW35Sk58C; zXZL43fTKTx8?oyN_p)xyMoW;NU~Y%O+y;gRJI?lJ71Xj%MU&R0ZglKu3}0YvmU_U3 zhmzKrZ?JVjg7|UR3-TW#Wx`xXxO_Jb&*WgUCZ$AgP9cEZB{^mqy`=e8Po$w*n38Ty z%CG`Noz~K$!#c@wSq?8ncdXlTBA!j^^K4z9OO(I-9|!GvgyNDib;7xD-i^Uc!^1Oo z2#DV#abCrqUj3z39js6VM(TnC8+rxKMx^G5J%eD_#edF|IIB$GVLA41UG|96SNK4e z@M+381)KgGY)Fy-?7(hG;%oJ?ienk-&X~4Cis}vf>juVYn1MOr;?zY~r{a!(xV}&y z4)ujvFCobw7Zt;z7gEs7tMY%ehh5lay~ox@29VqmkhWHeURlM|IjGx{6iFFb*PKKe zw@KS2Nu``85tz02A%kY-(J|()*Gh`c%Tc|~WBMKy+>}kqiULpT{1YX61btuy*{f>q z8AzddMRZzN(jc=#=yNQwwL^S=qGeN@D)aOh4#_K^N@3?DYx-`|U@j_77cde}R`B0I z1y8M+J6e)u0-n7i>Li?gD&QRS`#gu_U-;W648^?_(4@-GOLIua5ZGM;=n8YJs#^(F z57uR<>z0xraAJlvU{T#}ZbfrT)J2(60+=KOZAXTx#i{E{zd4G!YWgbs(;A?zxmN@x z=fZ2PF&uiAn_stNb{CCesB2Bs;?ca!?_>BIpw{d=7i{rUyjkyXsh_Mjy2kf$348}E zv6LY&x+uX|GXMoY3&B^VR&p5_8um0;h1vZ7GrIP}Abc7SA`hiV>WD@_?P%%E1(e27 zr~06Vj@;^$lEqtDT;O_^EWrY(XY2g*uFJf03Cql*0pZl3TXC{AjXod(WfBcZvf}4y z&+4a6{u9>eeu$~C{_b6{0YiKPSpr|v3UmRqo3HfkDwp(z4zV5943m5*4p zdsHoHv-rmy;hDR2{p8(J%5&Sx>~W703?0;U=qJk11w(g(TNV>_ni=dB<=xh3pg|+< z2=`vFjT1ofoLI?vFY0_%lSYwD7lEQ5b?2<7WVZg4;4f9mL`oMgaSA`;ZXzy{c=ATq zl2;`B=iBgX@@)ps(u9t)z6ac?q($9d->dykk2?MR=BAgblX(TvQ7cG}AooYSpa0xr z@_uTm+IQ>!;eFbF<=fr|CRhnOtwTr{8CoOt@;&6SK*HFRhThyoqF0`DDCe5dXmUFV z#1->fCil_-l1L@jkCN?d?2wsVPb*vgDkUjwdX1!`0)1z8&LJh;4{AiMDOZ`kN>J3- zu!?~Es?}Wr^5>>T7v#)MS7X11tAG}#fjQ@~dkv+6#M`9n#i4mLyk%~dx_5b7RChzW zqIxJ2MHTX^$^M)gKGo>-B*~}G*NFbF_yGPE@g2;ec%(Aitk!}CcU=G1Ohc~;QAbo9^56YK^%a>ZtI@Mq5?yX?g zOqI%$ko4n*^hYl)cYlpmE~43Aid^}@J%@8@u<5Xgi>s-9%*i^WnOI->@T#}Yv_Blr zhrAdj-|4)RaA4VY(IuU&&dO&4_v`{?n{9|5H3) zitpF=B~hKL@)dbiX${YwEFv(wG~04_wL}^h-aDl$C+S2gSz_nM8uFP z?$!*GUZBiNk`Yz?_$Xd_Sl$23Au^&!5}E)&Bwx^A)Y%Q{kxvOwYUF{=Gvsl@yOFWE zL!>2jQ}I~HM}_YKtOim6?kd3RRnH8jG-xl1ytP61vo0YOUUCUn$8%-rtWFUfo?qWf z2&%IFw=dfKF$1+rd#ba|U>CHA4$ME3#4xfh?VB`jdy}(WBK! z#yt+W=Psrj4;I);ubN#l)`3o8<@$ZVIn{KlPNqX^W<|3cwKDHlvVoTX?q}=bfNRG< zDbF6`88G;4pNz#7`j>tCZn>??NW;5aqkF3g>u|V;4!HA{F}$z`Of+@XHZ?v*z8xQ< z{bC?f_B}aBIGwXh=`=OgbaKt_T7-caM1S>v5;U0lCp{h!O&Q9d*f76|Xuqh++G_Wc zuFA)mg$(T>{ud-GBFiKu@XW zAF~28D>l2Iq>${B)RQ2g_2e9kC?+{!B*iU*B7RU(HF(v@Ij|n?WfG+L8TYF_>6LE; z&X$C-OQ%NH>U0iUWRI$!ePX7%lFu#oQeF(ZmkTRbQU0XEKfdw}e@1kzq{86k67}&v zk}>$CwG0EMXKLKNF9taO3DLmvNaSkXEK$!jN2Aq+lp%e>VyC?NTstcr7#j^N1D9Nn z4}@Y@(ZX;_hS99>Q_K2mURP{C{02U%cus%41}+B1jA^bb=unsUr8a2quYB9yLIeyKVl&PL>72Hl^0cG9)Lq|fGK$KIhck1?~V`ZyrabaSs_?Vig z>o!_5mm^oi&Z{hQUY)M~{Xko^`j_`sPk*xdt)w@?Bwj6F-uF$e7Nqr^oKf-7|2V#q zKJV*E@B1!7N7CEX?k8%Sl1DXE7iDB0uGo``5jXo#-yNggteTtw#N-S`)Q(9T2qvTw3~+s~5HsCAM8L z``7afLqo|ODu^z(it?D8?=ewR7iXz`A6+7Rvz^<*O>GK^?*tEbM?8%%O>h|a%Iuw^ zZ6=%D-#Dmdm5hP@jyV)-xnru>D6XoWlo6p+I1S#CzC&d@tMthylAUU4g=TgT?piP< zb^h^4QRqyGO2yxDF+AUt6wBn;8VOq$oRpH6RunLVE0@+m2skWVF{#lo9nFi6Pea;5qAVoW^eiqS^P>8N6JG~Z)eiLA02Bg!rp ziTyY`DA!fFnXRW&x-Ng~lV~tM$rV}?yHm{_q}Cl)pGA8dZOIO75G#nBt~|sGT-VC= z=jM8~TocahIB-$=Q2%giQogkXxLcFPX}It9`qKJ?AM;^&*OOl_or;wrtXdaANIPKl zdivsNIUDUS?v*dL$`_MnjGc6OV6g8Fu@hy!2rK1XDW+5&2%M%|UeLhP$5{6+(%^gC z=c#(Qfg`!>a%;+r@bsL5ooFjIf?wvv)fET~yr`R*o)fvqJECE#cbclZ2ab2rjMaP} zEbm~N%LF^8%+L@XG3D~n2gFnp11Qq3t8zYXgvk;x+q`6L;kB+W6||B6>*n|b+TM@x zf_z~nVH$t`U`wK9{gK4jcPYWF8AvlX%bgP(m&)>e#VfMywr*kdW@H3wp%v{?eq;*| z4kkOU#!?f~(bwSA`0RrY*D3A71PT?R$DWyu1@Q1b5 z5-9<#tyh&?BD`9zrHkFo7u24dXK>s11;YeIHIAdmz2OQdon+TsPeF`E(s}Xc{VMn0 zkwB^0DUF3^Hn0Qg-CN~L_|=ynf*7DY>k|}k&DZ-9K8rb2&jJa>xrPHXhr&$5c|RJ+ zjs}Jz4#k})qPL9WC@WPDoddN*nA74!juwq(U1^A@2pBnCL?q~i*n>G&7Utkj>iIMw z>kN}Bnf9R}f1@uhGY7{H)gSL|V~U72so!6;F}@<2K4se$CH2_H$&Q2W&NksWrrAYt zZWL$=yLI{ufnyu$Y~TzGJF47!`Ew{7P|QAF)P~wa@`-(N-2N4?+-!R-=+VPU2&b@3 zP4$CKdY4pfoF7x9XY{WP^lg6@Nm)cIDb~)G3`zmCxQ=+1wrDD88mVVO zgQO0Z+j$pXxlbwqXMX)QrDP^wP9h}qklAYRfF z`~z`=t>VfBVM|AtHXB2uOeRuG$5d<>_)w3!LzEC5P&loGxJ;A~ZR++XMF~L>?<^9j z#tOag0V&S+yXnu}jz}|s+_rlTV@fAuzDp$X(RKU!Qx`KZ0$qm~KP*x+;`kdzJ-V&l zarL2}$%ha_8p4dB?x7)wP3kPvM0K)b6G{!nzo=ELXbF7)$d_q!@%vTefp&zTz?FJ0 zRr)@O?WK1w-x00$L@ak@Rpd5+M)FFN)wJ5ZB&-wI7#Y7x+q6vbV3Nei_w~I&HHSLm zOIWf(2x{=PbaB*ig?=RDSDex69h(+wVF~7s(pJM4)rnO|?R*Z=RlBTBwa|dAOop*} zfd{_ggXs8o+#l1-0bx?TFI6M&hp22*Z!VK5pg*k5l)Z@mAkqgswHo=tK$d5z8v7Qe zxVvN!90DN`;H-(+2OKH>QPxBVmQl(^#%COSf5;nWKxmgv6~XK4=grsu-J1A1a9wve zJzpX;r_un!KnRkv#DImXNL5IK&kguQ8PXG^4t*|i+){P(gK#Ut#LACr`N1#`qDM~$ ze`neqJNntgF7N+s$I^nmL=|-0EH+dKw~;uZZR-S3UgiISt%zf#|3;H{re2HNyeopF z$Q>NZg}(vg^$(Wh8BLT^P17xxSX#8f-7{q-`?1MyKX9Yr0lzVO^lyNPShIUutX;GqX{% zNmKT^u52*~HFTLU%*;^`Y7jpRELe@OX9;Jm)4 zz7ZH0!=&MlX-x7gNuW`nvP@0A3>=~~f~K^H>1oJ|{{yeOAke&Px+9S0FQk5kK6OWb z0Lq|A>I~03#`$X(>dfa*UD#tKD{&SUz7<7tIvKOq2N-~xGC@)T`6T?4H-~4X%&wZ% zSG%=249f+l>Y*6IVZ%M~AtVfcIFmD43M$e?wnYZ*1AngZ!9VVvs}|I?LOvyB}uDjlFvr z{{~L(Zex4LJZ6L5kr{!sfBZ>xEVT@EXu(ynPM1l}d3LH;wTJ%w^EamvrGf!hZ!Z)Y&+kxgI z_~vQhsW{8Sci{?*GoOGos7|0>*DdGx)^e8l9(MfB=^Og$qZ&QhS$0X$r>@O95^$s6 z(6>F^ZpTq+NT9b>$Hs3VEE}T{gf9=p@C$Dv`M2pZddI*o9b3%4yXClWAdQcyQr~xKjksiG z-Jv8LXGAt#D*%02@5PsowHNhc`Fi3i>#~*FoITdvF@JD(hm3c4DzAaRd5gk<)`CF0 z-wmA+M$0!HsRgGRgfC5e_IlL=7jlct%WZ1J#Gg1=@K)>-P=@X3E}JK&Y4z zJ;qK~bj&W*+m8=* zAMv416(8!pf&S2wdv>9yMHL;$*3sa%vt#%Tb>~=9m(_})q9bCz<7Xfl%>jYiHg(Zm zJcDe%dG|m--+?s<=doNAC|>m^H#%i(xZAN0-&l^0dJ@hgJC4)JX!nlMqKU?{%-vD% z-UZ4yaPWdEsGaA-F`x|DRWY_N;7ModzK8Fi&T{dcX0r)+aNosCV)KMlXD`dMi(lc( z7l9?@;O;n#B1C!B+0r>I$d0L{sC2fgea~k=tag#Gj(SRs9A;;rQadfONawBFLEgGW zI&a-FeIu%WwDh5V^_wdF(|u%tG(+@Y5kvHOYl1W`|0ivisvlh@rh&l475Dy=HF0jf z`+fNXg&9v7^#V^5HYL&>iqr=^5#4DC|D*7+c-&G4E>)NHj31&RUsB$$l@#9Zb9|mJT394MII3G5M_8Jf=bp%U=Tnh$kyM-iY0ivT@+FrSO1PQ>T17oBpaZt2-O`G5^T z=@M7ypMZw7)9t~BvF*L;4etnc4}GpUmkqIC0v2i8<}^sT%OsA$#}Y2#^V`=UR*MA?_m<u$)590mRn zuSPXAeAK|=Bh2UBO>BQ;6=8E z2NKuD+9347v#8Pk$)~AK@$Bj3ru}t>>c`hHZ;3h9EjiXYF*kj;@!#4)5S7{b=svV@ z*aV8nz0$dUHR?C87C4p_rPdc|FSPn1Bxyv1q|qOgK!>KG$&CT-m==^Sl)!9R;1yHj zXjhWkQJn&__@>tK#H|Tsi}rzO$$t<;+fy*83VZL8Im?AcU?OLNLpbwxmA zmb8dxWvQBzKaTCNN>38WZ>6gY$X3Zf5eKOpu|$vpE+o^=D9ma^1FK8aYZCxE_TgE6 z7IRrVI!Bj6*@elik5^UB(4rA5K{%vX(sC}3twx;w55?uvB97txSdcB*HvE}T#|&T6 z$t;KV70P^D3{HAW=U~Z*zj0jr4c|NV8``glv1-_ZCL#~EdrQ>gSK2t@3ay7^SkuKj zxV#-Ef9yr60l!tR>o@K|pz6kvn2DpT<=+fzOhz4vq~DdvnmP)aHEa9~F`&^XsQ7R$*M5Q%BL5V8vWI3ihSz~V|C8PGCylF}bIy(O;+~gJR2S$rRw<;;&{^36rlU2mC zD>^TO@>%MC=#DKayTXoPKxu5b-ELYU`m6wga4TjP-%9p>bYX^99lj7XiJYal}$-gG(DIiLr$}AfKr1!=$bx#fH|aO{73sOZMx;kg3Ks`hZOnt%1RBdi(p0t{pp` zlB}Zp1aF<8w_Txy%x9Vy`S(WLIr;)CPFe!0q2CKsa|Eg*W$Nys@p;d~M-F>bvYtAo zWHa@>dg`C(SvN6jzL9x%pyzr}HA?$3<_>_eO8dWi_HVXGL!w8ohaV^yW-`rmt&Cfn{iiri5# zqf4`I>z72RPwRonsS)lS;`ZyQEU0q@r6_tu`6H5YTY~~}>5}vH`Y}Q|rM^0z>Ayu` z%4vt&q4v2l+H|jS+<_S#NXeQDN}MT_qA|Yc-DFk0s>!ywadhBpkuS!GRKLq=EATYN z9GG`Q)OM)pv&DgVS9oO5y(e;-$UZt2zrlM!|)eJOigrGqgS8(-Pn`YQz2# zb9cIyQO!+4%-F83;IhQh`_Ojr1oSCq8~>-@+J1o7jx>INW+Lm}5sm+H^9g%LAfcT|1x!zzrF&?(-*(>A5SmHDCF-Hodd~?}+aq&qP-o`; zM679*Z_Ceg`b=KGWD!^^5i4uI;>oF4BhI8JgdL-?N9SYcbdy? zJsz{Knik`@pJZCGO<*Iy( z6*iPcJ#>woV$cUl`LlSk}#R>(UsH{YK^0uNS5#CaQ7 z+k$)AC=hVrf^&rm_O%MfQT-WN8YTJ?-w-TgxWHs62lgd8FS8A8o~n{? zt}5syisC8}ceSwPDUPxC-3}>U=af?Yy1jo&;{8CC!4#1dY`44Uq*!aV#z)JCxrxIa z4mGUZ3}LC!NJuUZ;$$S%!^|C}W#p|~c*5KiqPioVCioLHUM*KhlnWl=Cb;D;U}uak zb96l|{Jk=K`?+a?^l~MtNmN?G145Rfd8-ln@JF60rncQYkVUoJjVL>!fn65I;hT$v zU)xP^Q-Mdt0;yU-)h2b5^zGRzibdzdpnGph!9o9V45lSa*oqk5U=2NuLKJs}lZY`H zp-ZlYFG|s^<0O2?1&r3y#6*rvhhU^D?Wp+HL<2F~#;f5qJOM9cZPqfKa1`UFiEE_x z%ydeyC@tgA;vt5r5r;B7H9x!)e^}-8kC%UX%RiHC2TO5#s<>6eDO4=tU^%Oshowe_ zLVGZ24&Pz1HSBnvppQI)7*zWQ1D!r6WX#-~C-<7T7gy|cU2o02WmxYcmSR}6wS3l? zIj%wOz2A!09En|+DsdlSl`;VUu)O9D8GQzU(k*?EdL+!sy%(L#0_5uUxw+~uwQB1^`FBDml*2@fFV(wv&&fPE=r8m zv?Oh1Yp%-;T*a4X(-(#*s+T(q$ZD?QvM+Q;eSg(Y(hvGD(WI74($7lB)h(Eerr!pa|@j(E{by z#dSPG1**{iU{6Mu8DGx6V!4y9Ci58Q-f@wLUHpOmq#xm+jI$176lH_ z5?ugNcSEqLlf~O4B{mgd5wr<70#^wrQtO&=Ge{=;ns@H;Qk8r`j(VwG5_qBI=Pj%e z?@QZ>7_|5_MekmwdTpY;1djC?Z`RE$u@HBjiSDee&^++X6M$%Hngu}AAK!~nPQ8DI zn$5Bwdr4V1(5bG!q1|R{t-=|?c5Yy$4iw_ITv@}FAZQ^YZ9m4EAYHY`*JR6K9GnZ$ z?0=89jV0{+yeQ7nJqUHuE!+7Q&H8uCr&$X^DSi1$4;4OpE<~r^WKY2_w zh2w!bSnG|&ku_V=Gpythvm&9t_nl^`=1=YM`V&Fb#lEh=up8_@lLeO3K*s+%ca9N#V;})uWhed@x+;q1DqeO(3e2V zxZVy|`~Dg~$NYW^f)D-w^ssfJxFC=$j^oVE7pGi_)N%cBPw199j=lEc3Urt3I^yMj zF2;cjIgl5mG8BR?NzOo^{LhEB)fZ&~AV+;smi&>UprSkzkBExNLkXnZrk)}E2+TD3 z08b;t3v0~-gsMSxFbx67h$jv2X#C@_$m&^GsdI7nO;e{a6)+;~PUqyLz!>LoJ4Pw5 z8kRB^fl2Ga(qvJZ|Mt9`tEESYdPq{}3uYHzSSacX` zkB6tQ$=WsrK6JB9ne=61pQ;&$z^2YPf3P!gtctzr{qUoi@CbYu4qeVgwL7CKwBt+e zc=9ZFemFEkKb;T`70ZP)9Lnc!gajI)adHvL=HGB6U9KbY$g5_B#yZTkl^+Rhr7dsx z)j}Sryh_MnIhxzt@T>B*xQVTmkNiIgmKQqwd6w=4B55ikGZms0C`pe`KA#zfY3*k_Xxj#1esve{N zRNqtaUJCz~n2Nk7ec=c}`Fh=UI3$f)dUD~wZs2edQpK6c4$%TN1sjsdk%NLhf{wm` zxG7;D8__@6PbGP*sP9StGj7p!jc^n&LQR&tP)kLW4~IUrV#jIaN`fltupjf&R<{l5 z&LbL#dvY105e$3%QUpU+rC42|$3Jj|Ca?k&uhtWGRsK;!O7KCV^l#0E2x2xEEWv5H zkx;wff!gpxbSwHAX#p9nI@HPiDtB9T=zmN6x zA{qs~YD^}Y4DB6p`y#00T0vi0O@woNQpat*IkX&7GghCQ8w!!IHJshKmInLOaHxqM zg~rm-5Tnw7HOMHu?z@lUw$5RP>DDrtK%>i?#9y zp!$A@Lb%Lpk&$nUT7ta>9r z=AXhXy6(CXQN)bhPz{8r6t$=CSch*IeZgLFP zHK#%}F?WG?^W%&^)^bQ-0rR+6njhY^`C6yY_hPJm&f)EN-d<~q3 zDsEA?y$kZ%*&9B`V4yL7i~2||oj&jS$HdoZ7r!`>)Kw%NuneDNQ?HiM9O5Y1yi>~} znvp{Pwwoiy+OpZ*gz(>Z75s>*3`<@Q3sZWd#Gz{_zIaFw?r?0Z0`WNNswY3vgI@ol z*(xF4HDI<~-R%ftiOyR9X)))UoPA)R13rFpNRBdx7p0nhsIF9Pd7(m|bB@4# zOCOh!h|GPE%)%Q z550_m{2Dwo6P8WQQVDnCRTn46;m}wb2@TgbHw}>W`v`MFbhN=|Ik7=>vG;h@e{Qku zYH25GyBhuy=0f(s43Z8+BGRWSZ{5yimR!!~vfe$M8G!UT^2dhJ!T~mXF3vNqLxEgs z$TJH4s-}K&Wh;Jz2tl87Rs& zq~~B^wgdjqpEgz>T?=EOD4`67_&p{k(ke;OL~+YGHPeJ9t5p}kduzG}WN1f z2fUaQX&6N2&4}&3sgM7q z=~q_!hf!-s#Jx(yc_3?4;5LN$sY}$nlfek{=sAgD)gZd#y|i;a|OOtNi{Y z?R!>P?$ww{`jeH|lO-Mi?xD;CZJsB~i;HL`42=F#HD>l_KMi%bLI=Q%idSU;_|eP{ zE24omKAl8rKzV#@kGxw%vba}e`0T>k_=~Z}>v$YpE03+o`KqSkGpMAi@?m*TV_<Wj`vsCG_CUo%^HFihQp>m--9OQ6S+42*8+DR~zAot}TB#_$`dJf1K$uYWC#0%vv_z8H<26Kf3 zne#O(&rAn!n&3upvk53<)wziRPB7I|j56)8uJY)2}0w z1FRgo$QIGmwA)94mF+H znt1*QHfHls9XUng z)0B)tl3(ij$C42(HUFdvX1Bot3nyxZ!|O&tr54eG&GOll#y`%p4z*^Zm&?*oc7Mw?UCO| z%Wvw#CAvM}t>NDW!S$-YPD2)C`(XnBTjZX4uki@%OFVd09^h}`5!TdId7t20gPL@e zgthFvQmZ6|wdysU%t;zZ4EiQKNhLYLiyz0Hb$iIa@izi9a z@Wxq0g5Cu4r?S4IPclJQ|2 znrd;o)XJ3TT9I0!Yl~?sx;Br0F*xOD-^QWh*tk{>-soB(#cC()#6UuRPFvxm3xm^S8);u?5#)e;C*$% zpZ7(}gq&YG3qzMA)xhy7Qw?|m-Tn@?W_WrB0YNtqnjDPExRWs|Z+55KQHAMFxq-5u zhr$9g*%&hnMlfEJQt{2X!_>IRY%dy%x|Y>dUzD1CIQ-MJz718E;B}rBz9=0fdibIY zp#CDl2EMN&Sd^Z!xFAOO3D_w5NqG!PbLy^c4p6b-cd^(yx&YhrepgzmGO0zU&| ztjqG%@gqE_15aUlm5)^3H!z~4sayX%r^&=@J8+1S6|Tzn=+&Ay0gk07lhhiZ?OI2m zs?^}P1+c6M);00snH>XBb3BlkURMqZN``2)RV#W#BxK{Rt1^Ud@s}Yt*QtRVMKMhJH|{AKlZFiZ{+J{m zseK0xCe43tUsQ6@M1&@@-E@x63VuWvq_8iES@EjNo*X3>LC}J}loyFXIEdfz(&#tx zJ+J%Irjk2hoBHhCzL0eZ$Z)R?y-@<@x*l+^WCw~D!BZT%;%mKz1eB=b1?%j}0QK$_ z{C21r@ArX%t$~6C#zUiwAuvPjc{ENeRzWOoXHaBV?R%g|LY8ZYH0ECtJ^0Vk)C1TI zB{-gNfl6#lwxhLHrr-DjqfAeysufA3U|Y@qMPJm3?%tf6qYl80SkqTom!yY(DgpSK zc(85UulH*RUy^R6=Aa0o0?4*6Z)t{%SuN%vd{89Y{vn|RV5VIGek{S7i*)ES$HU=+D5s4E5JpZJhF7kFyyx42FGh&Nk|+;+N6-Nhf^Zpbk&B z^zgcSF_pG^anCD^!Y~us;Z12dPX6wck1R902Rb?6tOsP?;ZO(H7%%vj(;aW^CawfC ztmDHE?2W%yA5!-H&7n5A3O~@w9~`0l<6;vb7eni!J=)HM1JfILiM6)$Uvyn7007kK zVab2gF197HFzv#mw5w%^HNBNbi#|%>o#30SKs)*Od54#IP2TxdXj3;*d=Y;;4dw1y zSu^%4WG?jwfvW*Jy~yUtK%ABNVabpw>k!C+PFT!*v%01SiXlPE;aAK%MDo6czyh@O zICKNl6)2QyRw0?XUbTt#-2La9<@@F;S-!l2*zyfCw?F2#xa@5cyK}nTM~Pa$`(#J+ zeXz0CL9KlVhuY=6W9Gp%FA){aiIT$j5QVg1$3Md!hNbb=e;!J8nXhlEs9@F#Mr*OJ zwN}KVg>$rcWa8dLy!+&jsL%S!FfK+K5u}8l_ZAC>AAD6tOC!g4 z90{e!+v?g&MIMoB@o8Gd<`B8V&=7TfFeZKUhr4dRFBxW9U}zxeRS$*qbI$J>v0InN zZ@C34bj#ocjfzuHia|lb-pkapgr2d)UMnQXT`KAKAL=uXTiKC_8QY9$P*2^0nOitn zJXd54vReIxEXsKn5U|J2GoSoekYcN+j8&VrkPlPgz*332?PqT!cB(!2?MxwuybY-IM79HV#E!%_ntwOD{pU1L|nj%8c z`pYy5gJ{-v-x*+)aQbS@WWg*~NMfIHBT);tB@3pFB~c?ss(&N{YLx+CmQdz$+bn4a?4(bbb0l>~?{6(y5oKPsq&1tcO|2 z#%stV7!kw>Kt4OL0FK_oR?4(ztf82g_fg&|0>^~@uP;kJpUiUD75K(?l~4$A+ViFg zD?={qO+=|yyPK-qTdUoB=Ju*`zlF~(^`aZX*4-K~Y8pG)47EfT*R{HK5`$G4`_Ll;-j1x^Q=K+Y9Zl&b9%7B zNp(~*(o2CV%74*krNp*b0+ckYkW=nL8i>`M0AIJbf&?NS+2 z;~cWkjMVVFwD7IM(bS5o&bOwMjk~(qzBx8O!~Toq|FHs6i;M(H?baCbEYfF8&3zOK zh*NqD>;H6t#`*!&z7X|v@vQ`3kr5DgcRXgnuTC$#p1N;=XswS`jh19o;umZjFYh9C z1wb6GcZ@8d_?Rh2v8Klo$SoA;~ zS8u^|AnwJU7_J_8{0Ll)alBvNZ)1dxUz9o)IMM~T3obzF#32lR+PEj;zTI%N`!+zy z5I7^|kuIJiXm=YHfWVanJ5JxPe2s2lwoEtm*Ca zNQNKF(-!=wO+2)djF!KPd$zL-480GQgz=H*ucypndfYTY{TV5hyO)eWqyYj?-w-?< zfb#R`W8#S19bM{QUM0bk#7!QG#o2mrq3#guw5~`wxKYpK7Z6P}ypg1OsZnA!zx%hN&0x=)ts?0R2kx10dTueGUMx|(VSEdY-C(HEoz4uNB`g8 z%`a&o#hd>-%4zgO-E4i2PnZjXLdixZXTtGPs%;F2eR!;@*Jwl}DX0*pxFydOI$hWU z&k9iFVH-srR!y~nBH+hr^egCH(6~@az>C3hW+(N5Rttu#))=xzV+j5}?%fFtIo&B3 zLM%&z#*hXugedPF{2|PHC$TyBa&zopk?(>bw?85n^02zx>KQ|>60ah9vGD|Zx8wWv zBA?i3bfVqM7u84fA|2m2wJRF6a|;1Z{hb$4<&&OS7gfnpdn0jNa#aqsDd9G%0zwIu zpj3PXG$s7@pc7dUp@yAZsi7TlqN(Axe$HoxA`*L&popC|MLY%_nJzeh83d9DKf#IA z15p%AzkSU2!E{}fONhEgb|P6&Y^v~YGHm4RhVni6TJ}*Zso#DsWf9_IC!-*(Zjm|*VeulM2OVllJOQV3v zP_m{gC47M{aWL!oea{+HDeAA{rQ-@!e%qVa=Tp@eugIH$StM{Fd|qacm_kJX}^_~&$Ey4Ced)TIw{LV8w+ z(^nD-Gs{Vq>#1HSwXSITls8NicJWoH0Qqo)J0A3FJ+aVBqBN1Sqn7#dE@MC~X~~yh z?d6wufu2`=zDV>cl7K)ZJwO}fHP*rJ#+Fod-FZ5)*H2YUu@8QlKTwNE2M``(v6dM^?R%7;R@$Vu-8v=^-8}=`uuh<1$_jEHMXH^9yD{dPdH! zs}Z>Lm^iF4Gy7$YnZv&Qt#fL$KU$IaI_a3at@VyICbz+15erO zN)+IxG~Y8o4JX6P#jb>tpcq~o{>=&_%hYhao@>3t4?`c8Qje$^7?!BD(=-gdYL&UL z*Z5SrWiJw}ftlpyiKC${aE>)!6lg#5;X3g{PV?)GQ2fl=E|H2@tF1QmDOdQw>1s>z zujRhBslF^4z7&H0@S0zT@x69}ce;8kV4S*Mv9{s_o_UOMb z7xw6{zQ4=pUvk@{|K{@}MsN0-HFK5dnzS?fXhQ^T9aGP!v$@;Ge*+MF+o`HkJ9XXr z+84*YsjO5WJ9wel`$3H(t0FT}v?78Pezgn$xmW3*!0QG1nSfWOUhQarC)Z;AiLH0z zzhu27q2M;Ix~}#epJ{m2du@2VW-e@a<=(e1I{E`)+g3rAj1Zfv&aQ-W6Yhr!s~3vl z*F&~vdc5dkT(bf>jmLuKd1R7eRT}v?Uay%JZ?|O-X+VyYSSRPpN?Mez!6WYP| zi&JA~lV~c;f7*VVPO4XwR%V?nZ%%31>$)c2;w2b14mb*HCgi~%Oy~%fr;W144Zibg z+q$tI_;!n{m$N<>-oqM0;@4ouDA(Oh>@wH7iV9VZKY27e^b0N|i`9mgH35EPl%{0; z$x)EqdmNQlZqvImbMyg8^pAW5l3!gA$eiC}7{7Fvvf9eDh1O%L<&DIu595T~dLcbg z`=mX9Z5gd!J1WD#DdMUSt4jc1g}kn2{7N*unN@D`^&+lG@q*YZJjYgmy0#MM1!2iH z4b{tW6pML;C@y6Z+Ev{;4S?T|G_g3;iH)}0`E9#|g8?790V?$j$(-zIQy1O{D&>+V zInZvOtViV{(p-kEOm!S+(tN{X;%CGF3e5n*x0~H^w}fPPI($EfX;quf)mqhMwZd%N zAWyp~iZUImoy{A0;M;(DMerC-{cHQa`H1p2z;{KkD;pmtMN5o>o24xQ=2tF%#p^`Ja9SX7jd!J!MbV} zXlkZ%7K*;1K@Ga@Ox&+_6k3jIln!YN(1h%NXE>-9J`6 zgv^=?eq`^Z2u(v(&8?>Q*}C^D zbnhj)caKc`sNT<0!%Xkz$YTlTp!Zh0_cD6#px)-Q^v>wg!?|(D8;q=rwWP;b`jOpxIH_ZYhsME^so!e81ppC6d*TKyBcn8ovv^BPiAC{lOdLq>XMsw*f&(kNJw3rxRwM$!JcIL6m3cXPmTKqUY&%$fA5M@37ipTka4k zlPOaFw{N&N9_Td6H>_#f3mOA%;3NkF0A+{zm$`K!f-D0Xqbp;kYX?HT-m`uwvyLxs zb9~W`Twadd#Go(Izl70K%`gVu9#@rrqlL;UaR$ShmY;LF6x4!^h z%m6@WY}BaeRSO?*$s7+PG2c{~uP5Vxlj}|}nDfxYoq16Ak#v~S5b0JDe|@h@G*DnD zbXODG(^n*j?E`OXVhh=|xUxLJpvkK)+%1ZRjOGeyc9dBfAU+KoP+u4JCrnqY{#oQo z!5;l2eEH~boxZcCMOGk%3WiF zQ`0c=cit#dOV?9#g{lDyQ_(9`TIN+x{}0r4n0eo94d4;gj`tjvO3osG4|~(3@ZSxP z3F2^Zo2LLK1{3R6V$QZ&HgTtqxu)iptu z%w~YW4x2xWja0G#^E5WnIL`{d%I#q5a6Dq|L{|ojj?!si7ZLKD;M%5+)2Q8E6b9F0XML0!Kiyp81(HF!H1Mm#T$$*LdMa{D9c>8dY#HCfC(Y zUB(UHXm{%O9p;<&=;{j$^HOaF?lR2BKl?uobKW*ROlR}uh(g~v0*MXAvCO(yvh{F= z1W2Mp+NDbJymv{B`g!yp05h$mI8%aJ%} z|IhG4>E!rNRe%5em*V&T+6@?caOg$8+KfXVa!0%Q}2Z zuGB}@Ym4NtV3I*I3VV`eW(-(q8q}7pW|AdzoalG!_&pU}tSsnIc_j1dQG_ZedSsFm|pTLw90dO=u=Q^Kw}!Gdh^;X)Q|nfEBK zB}3O-vYE8&p&FvSA2O}NjBxK!wQ*hj{DUVtITJS0F#Nan@7>PE?y77&B9m#RC>t|l z%EnQjiGDGII7@eptr5=jilV(ZPyKQ4cG9oZqSeOvz1m$@<$m6BuLn=g3wxf@mf@AW ziD8p8VWLb{fh`90MICqp*Jy+|!|vTJU0{BGO6|Qv?2-*C?IodH0BOBfT|LoGIqe^` z+8LkK@&jg8H77BbIbkvfbjqA1-P9ucQI|E+>yuegjw5Fo`ODKv*)4$9Awsi~w*0Gbw33ikU?)9YWk5_oW@ zykLLeHW|31h5S?JXyJhg`1F_Fw!^IH#PqB+M%uOm)-UcB( z4XW`ske*qqov}<>z;- z2jvSE7A@`ccGo&jx~PNpJComxq!ezRP?te|&kO^d8Q_Ude09BzGY<)tjo3gWYC*&N zQ;u$0KNp+<3G=Ftg*LL%AjPwByzYqMwe3Xt%8lqpD48v?6xD~)T$S4xGF}Xs!8ZIy zsHvqf_+>qs&Bq*#ey&H87DqE9QtxbC8^gz0s7yIVa{4uhldC7a-Jcy{EEx;&Y{oqxBw_EZNlTzF(C6)Up_MPx9nB3fvt-YJ*KlI<8=o6u9ic z^U9MhZ9OPB7TnX>4|O_ho(CM;8m|emOD0a*hen!wuu@iMvB;s;J%U^s6G!YkxNoi_ zfsK}a4e*cHX)u*)@&;3bwMoevyej(#o1>s$T~ji~R24m;nB2#vJt_g;r3WKXVmRTa z6BC^mr)REoXJlHYYv4r+Px$fa!MaSG;V0)aG=v${wOWqLtWrs7YX&z;pNnta4)~H&0H+MOkLv1z>tpLr%BzoP+1gHvpU6n#xm=7LwUUfm^Sn&)D zG@)0>RgQEL1(I5U$x5j;Qn|`Y6xzv!+oZ+_A39V&`GjE@-A(y0+(*clhVDiZn4YKB z7ZSnB8PL8QpIEz>#(&5sS|N}t;$Hq9BaKTIBCEWSF5${eLIRh#Q2*KKex%Mqwv~Vf4mdjBQK3ABV%ji~A_agzHpqq$07K%#H<>p=C*@ zAk%_OI~FGG*r6%f=UwlQYkw3IcIRs5q1AU2GFx;3!tNFCOJWfvzqQOuh*A&1wN~;} z5(Ag-je1iMa~i2XJ{rD3d^a0e!kGW(0`6^|HQSB=#-90YaWlR2$od`^3*i}RkL*{m zk-d%yfsx7Y=AQ}JrGk8#wIB^%M2lLd7TZDAPO<}##?r=8JZ0BBBI#t&wxj{RA>HFU zY|RXYDf9snaU!a0C&_t)k%lLFu&?AB%@7B#vn7l7>HHJ8K%`x^tHd&tsweLxXfQF= zxzxp#W3bB`f7sfu>l?naAsxns=a3wZN0I52e$+w(cBs^PH#-s=mRC*r=^5zWI*wwQ^t^kGEAs!C zM}v;gvHip9#UhR?W8{P#ksE9!%KMei#(+_hVkH;s2pnfk77lcBYQ_2E4lhn}MAE8> z%=4ekqd`_t8a`FlH<6UZQhC>Xs3qGfO6_)Qpl+l{8o}xJP$XmVG|DusRx^E@qhjp3 zZXD&yP22Dflj+r;1y67sjq6V$DT`=99N#m78&Xm3V_fq5bMcxyQAY?J0Z|>Qq03H>8yAoQFMX^@d3B17 z;shs4Ec=mvm^B3^mJ)<}ObNn11VINCf>`n`{ph4<$QZ%VGf1_*J?e!?PuKLH#Qx!8 zTz*su6=;L`jzE&s3~jf|Yzk%3Y@YTC+~pMoEC&G~u(p+{6-&}}s(|fk;ScjD)3XUl zE=Oj1t^`qW+#Tfxs^dXpbLovSU96{24%;u^%Q&CgDDD9PdDt%C@gT+G5O;Tc8?2X| z_a67bGvyg0vvP&%&8y1uDn~lSSp%(L<}rYoC<~q0ox9g`Ncf{$GUG;yZf=aRS2QWt zYBEV*bP1GNlqyma`2w>fwtx7zasIQYdBx23jFz!d`vYDRnzmtsb_CHP?0c)vmBq1B zC<(6lg%g_z7Rljkn~?1mRpWLLO0ck9n`>Ip%h`lh>MEzIR4ZLN`T+`1y4uDfw%RMF z3ooat&#KcMYy(!2C=yNG3Lz(ug#!0h^nm|`vd?Uam8Bdfgd9BAdaCjp;;8N)Drmk< zLb@4BI;x;Ft)E|wpSnY3kQ+ltlrD5RdsbMNy{um(&*VQjkT%Bo-6QHHN+e&Zpjg;l zC1-9g>d>!D4)oL2GF_D)^L50tL=`>2yTT-ZgskNPOw>3W; z$S{^}b{`95hp`0x#&l&{ZymDkV60j1}C(j zlq8tBI$VyHF-4QcuxFL620f})#SZ;~>|W0*tq2W!)*mG+@4%f+UKuYzoM|yflPu?g z>q%T;d=sP^)hc5RIEFL7dlgM+!v${E5UU=|Ou8GLX)-&}4gBsFapcxEZG|Iuyg;Ya z@wIwWJP!+-Y}u7wwK^n5IBc$`iSGaKL8k+l29C$+XQim(f9AzTn_68Lru>F0Bqc*- z3fp4VX&Sgm8eo&J38$0j#1;BCaF>2wOTn66bLsCMb-E^O4t|8;Zn-rdqPgn3h+ZsU zZ_HO;5@)|s&M--xEd6?FeHX(w2omK-Li2<>yf_bs5bAGX<}h`-DEAe1S5}9lNL`hC zNpO^o_&ZdW~gxyQY4k7KS$!pOR_bTO6Rmdg#T=4HduVJ?$SCdy24A-VB zdA{05eP~T!DAgHrP%m#XTPu?t9GwThxQ3tRW!`S(c@wNDH4lv+EQ&5SeYXF zb62I13hUMk9t))ltT4`&&t7WW#|qef$g)(xWVkh^MqVUzJ2NsB)+qlK)-#RhB6nWd zU-kNO7aOx)gQ!?$_{IPuI5EZ#Yi;8;D6=|#g$ zr#C)rjcC=yQFprxp{G@gCX;l7AI-ye?C=P5nhKb>#d?u1ZSP&P}%VzETal-e~VHdxWJgUtN#9i^$MS zmy$<8B9ZoL(NhWL;2g0D^tLd4*LVpaR+&#@q1++~*94m6Cx0=Y#fx~FbOrIi3Lt>~ zyu6lK_Mfp|JRgS93HB`nL(`QAuD_wTF4@$6p*yGOF6(?=#g|dSJH+Q?eJT7~YCF+W_56i72M?{1ahN6)e_82{u%MMBhQU zkUodq1ro&PzHtFi?{5X= zp~uurr#po~X?p|HrkdYeEVu0}-YPu7`Vq@g_^>%(YCmgK#zK>`Jv=WvYgRXecf^d# zieBc$DgbR~=$j@h?A#OxIK4Wp69l$6CAb91vpNqg|vl(^C2LA3f zU*j+9z|v^#J3CiFCqbn2P&*>_&h-HKqrqNPUK|nUATjj^6lhc@9)e39AKQZ9r+nj0 z;+eWn8zcGh)ELQg6HMVsQTJ#S(j3a5H3P1|g15Ti+6MaSIZAspzI19pSZzUra_V;+fZ^j-@^O}G0%w9RWU#j4|Xhd|>!yR#S z@%so_tyJ6K*W~^wE0A~seUVkgM13R0TJc8md2Wo1ma6%$u}H(pI@*`U$k0S`WLWZP zg!|;wKE^5-QoD*@SC}WRtS{$tEGEAVpLt!;UR0yr+DfD9C|M}x$i-xWNoGUjir`-3 zZ<=q1>0@zCiY3aTksGx}OQ!^RrsFZCQ=~bYd@IT33@!IqO3c4pY}<-gathWh^m6U&TO1NYjMIO^4PnrMx%PsQQaf^tt{c^{@I9#&IbNFey&tId} z++!X|R8w=jYIOW5v6zyt3aM~O^^x^ObiPAFa3d+BD{*VJ$;TOz&Le(0Wd(%q5Af?T zxwat7=<#gUTTB)kycj#Lhb@Pal9E@DD#fzN(YXv#n;Zo*p20|m@le8UE?gg)f_6Z5 zaA0!5u1zl3b(zw{KyeLul);9s=*|#c6JD{{3f~x8O+W3Qv~u0G=SUBw9-=MqD{6*% zh3%6p(23j<_r2O9_UleuoRv3;Xry-D3FrYlhgZY~v59>S_5}xav={>HB;N>d!Gn-D z;)zYU6vTLhaThIK6)o9;qd=%K3EL+3;K)ljl=F>maEP0^on!OJ@XE!zWy6k>P-)il zp>JVO_PRs}HiOMbPvJ&iWI8Ewp(WnlUgRT6p|+Y6`RYs_U$Bo5^RCb)mK~AZ9rK>p z@BzYb-^5p=CH2BmEtf;|0%uN+UX+MOd9*1f@eB7zUqnU+CG6xl>}$e}p~!%ilk83{4VcPd;wV1D$=SEw$7C+2J6)V22!nRt`t)OeaBYW~ z*bPBvb5xA;(mC_tjZl|R);77UPxZfL~ zLlaiw;c6qwH1?Z9e`_LibQ{F@UUSO3xc9_{zhpC!_%1{J9p*1$C|utaZxbn1$>zcm z=$VJOz(6%i#=TYv0pccdpG-sUkDccWH(@yv${O+?C#BHaEA%63DcltLk3&q;DPE@` zKkedfb1vD}kQN&1OhAYu5i8Gt3aRqCoclvEmU)YRg{JxaNTIZ|C3}gi5Z?2-Slbg~ z!QWQ6%~vy;jML(Yz>3LhX5W|Wei1)%}Z}WlzVwo z^-Vv2!9rvN9zhyoo15g(EV0lQY#Cc$@xlqJ^}88U8RhB z%2UGZOR4txpJn~}viR5AUn`R8b|lsQCC$&0o1&7%2IIlL?~vXY@Fefw4#Tuxus7S$ z1^}7&TLA+hv1R35o5RG8`oAx=@H-tXKJM;20&o{BKnD!V-+TD}(v zawxsR)9gAYugIv#T+pzDcFYeR+RB}#a^OF{CV=CgD2yQrp8@Li9D>4;6wpxp0=Z}x zapl|_Fz4cE0AXgAY6d5&IgjlBMK!w2-O{^A`H$m^g>8yTc5hRKSV;aFC z3l%;K6+RUNvEJvY4qb1`_kSWII3YGuyqfG2wy%4u&#Tj0JvLZ4q8hxQL713kJ`Q@7 zH(W{t5u|YU4i|Tic@GeoRqK!bLh3h-2S14~n3UxK(#}E;o#?U9%dao8UTT|&ilw^x z_tpGe-nW|9_8s1f6sSw+OSdOOZBKd}){}M|+}fT>z&7$K19v zT+W`iU{}it!olk=4yP24 zsZ8aV(PcuF1){5kW;3r~o?SgZ?+CW`M*lWawo@B_P|hLb2BBFx8QR=rNZF%I?a<)l zgau#(x(p$%fAQ5q{RGTQPwEw@<#zZ>v-4w04aH}Vt{_qZLh37*2OwF5mPDV41N<7x z;e&k_Ext#PPVGkatK(m!jQGWk{^hhyS00o<8~rPIe9ETO+g`0CbpvXcuc}jmCiBVo zcez6?Ha()Ski-W~ZSdE)r`E+BfvX2HJj`qYM&ZiOAbi96*Qvl@6U za(s3sn4i^1fnu^Kf<=Ik*jnEZCmASEdF9F9a&SHAQ&{ zplYNI^Ym|$V5>aUa&7Bk!p)6`YHDkhS6N(bnr40wpAc^J7JlMWx>sC+eU>%rd?=sG zoQ4ITd9pm7S$&;v91K4@Xh=i2{$RLc;GDF0pM0c-+}hVYFVwz}mG&0+B=5LLT%h`s?DNWx`-ie1xZ>Ejodi zY@6#QT!7;^y$2qyb?5GD9EuN_GGc%8i=R24HGDKM^|Q*07R0$G^zkhm&p?ocZ!;ew zE{J8`g&bDmM`yAzcaV(o|D4hBIU~$Td9ru2_~uk0sODOaC)3#DOt~<5vN;m*90_lg z@TeWln@A0(r9461qOOZQf2r5=;ztvswi#pA2FpI0ZxTqXI$O1w$I^k;C-X3*rReJ)KR98<*A=vNPoq;xwzJ=pZ zDO*M(015D!8N>dKK&PpozHqg0Ua=`eDLFg%aIy<++6C$7 zGRaW*iQZZJ?}stsdJnn3)4FHzdV5T&KMQFDy|^5c`N>Hh5eJ+P&IJ3uzK^mZE7;CM zsncPu*{9ZQh(@N_CoXD(zvV}-z*RlC#I05a8=s|v&3WGrw!?gA6Vgc_R5V(&ji7KD z=rjC!~9boIs~OYBss{rOmf6zUK1Ub?w0?@cK0sLRe5INo4%Sdt|(3_ z%Aja1^+SuQEj}$1F^6^2aglu7YHsR{I}$WgLtBP-LgdHKT8I!VOSehhjXRVGSANw^ z?nh!B(Fd+**=EmAxCX%gK!73O4w$WyaK%vQZ{nYuvB82)u$+}BPC0YCyF2eob!A7^ z5Ju|UocQ+lU5Pyu5hwZbZ57`D_kmGry`3izUS^ZtBPlrpPd3YE%F|uh*baeL~q{hmXLDwv%pEP=QFpLyW*(spM2g`F6}qB^lh4ZYxV7bc@)10C5ww`|h@ZuBy8BS3r^`YbQ=gcD zuab4x2HiDfp7}7(vrpF-fmq?|(t=Z+jVQEG1vYa<{Lw8b{8&IQ-5%YIeudkkUm;7N zN9`D7i&(_nl@C8-dnA*3%MWxJ{cWTyqtJPhRBDsrkBS4F&?)W?1Kct%2R^imXMi3q z+2$OZc~-J~w&`n=o;kd{yZHX$mfyuuAdNMDU)vw9<$aM2nw)K3vdIJ7(C)1>dq z(z>qVt>x}2mPHn@t9a7~XtH%FlWlHEmJxjat3;VDEB_aiu^M^I+_%%aF711UA9raJ zM(tXTce`OARAL$#BT#`WiX4lPQ1>%e4@HYvC3WgYLOC=?tt{WdM>uK3w5wyZtcX@K zqAj_izHy^6$zGucz`_IeY)A{%2`JMj~92TWtv$01P7MltYjzjdo z>Qsv0X!`Y9uB(OAH)t(KsYE zOwerej7^?YI8qN1k|p(zHuc#H4@>G)aub0%BiO>c| zkx9zkKW0z^`BFVU1B#b3HQC6?|6_G09A4dq3WdlQ6{%f^{-~t39b3PALWX;fN~=60 zHUUa{?2Q^@97_61D4B5s#X#xb8A`rL9axo2$vz%g{u8$eKoJM zTM{-|IwyT>cb`5tIe{`$@mq8dIfQoU0{CW|`cwRx38nQD>XOVa+2ltqm*miVoqwCu zG)9xY*QJh!_@c9Y`R6*IE}!ZWpQcVZ^3xA&eS^={mTN9@5&Bg&Ifc$khX#?HFdx;y zjh63iu_@lE=Crtcp+{e4H_IPwwr)3m)O9)kOj6ro^YM*7 z@1-Q^G=i~ko`0s0NDPji`BN@vS11SyYxFUL+*Ga*%}l@hS>JD+l6)6<{Q0{IxC!4# zrfRMU;}3to+h)7&qGYlZo@rCR@isI)8^BjHMubXJF2*<&t5jdjx$?Tj{O}sum~$1o zEIW83bak+)+XE@V8L1DrVlJGz5gXQ5^SLkpTr*=`Ct0@s=C?-Z?Q$32ok_{sH_L02 z`TQ0IR?WI2OTTop4($=Q^s>WC-)l>s`l%cWzM8v^EWOy4{_~l3qQq!YhFoQn({8Xz zOJ};tH%s#Wfctu)`aut*g#rI#RVmGXMt@#vdhsR&z@PS5@GTX!`X)1kpz>YT%SxN+ z75`x~`*WN6o6g0e%i?Rgleo;$SE0|b1KJWWW8TEZuE|_)%M{X_T@6E|!7ZlZBMahO z`+D_tc5(OQH96Z_`-@{Othe!{v-VwYXzgBG`|EEeYJcG~tv&bK4D#BmMC5*~#kF7g zZ7D?a+hQ7eS_{OV*^+O6>q|@S8|NjK;dgD`HD8`rT47=PBBO2gGPk8PJLGv%`uH1Q z-vnvt3j)p`4v&T+3y*p#mHAA$5v(FCou)}i^zxwl?cE!6uAhD*0iH*xjxqoF-xm14 zv9I5USQM}NK4^~+^rEv zXPP&^qeIP^M+|Tp5gyO(w}gcD)%=X$_-ZPW_oY;!i|mF8 z$pK&Leyg_CcZYmTKyuy3E+hw#r*qw$wMz$og)K06cVb#|WK>(scT2x?LmHpyq%?u;!monZAKV=uTlE<{RIL9?_;~d52j! znP6}JgGgBLm$Uv;A?^gw3xp^YLHpAFBK09HbUT_)^T{1B9p!IGnkfFa3e)_m+tk-e zK+StQaK4J{yTf#|!zm1PF7EgnC*#gZxO&gD%kti2{=G@}S>!LgQ~b>MUCdHPif`es zC4q20jaXakEv#zyMJ{8K>dJlBU0b(aNh}3>v94{zhJZ@<|FsI*zN77W8A-Cvtk}Gn zq8+**Z?SnU+nIp#aA|9+x!ok;d^65Wgv|I~0)|mO8UtK)k(~Vp5oKf>VkMVEki20t?!{>Xh zc(0Pm^~f-{+AobuH!JulRlk{~Wi>H^}oh(q~cTR?^bREB~aO#6RIFsJvn@ z#70+n1+iPNk*kA$XfzVkhhfpkXdcjIB>L?VJU6R3q6jnc5D+7DTy`;^qw9+J9i5KK zeo?A_aJVC5&Pf&ChCSU-CI{<27%*R~Lpg3T9ILCyh`;+6hJy;_e^|$0U4jN>^~?el z(vJ_AZSQUaZDOL=8bEJ87TW=JY<7*r@V=^Dgzt*jxz3h&C&cK3(1JD7HCiq{bC-t zzH|vK25d?z&M_mlV&W4K@HR&BrDFbTj0|?4stG!cGv1?t5PQl6f>aC;N|s_C9xYjl z=(J?1Q=ISk2cv-+5c}{YW?SVO$ZxO!n>=(u!(yf(=JmsS$1p82l;Xs5zg{9JihEmv zG-yifWl&a37E3Hr#72!qM(FQoer+HJSC3n3h{h@x^ zC#xtFRr@ltju_2w$obUhuhxA28v938JR1G?*tbR2)^)MR6kgTavtN4)@BDZZsNb!` z?SHs+^$$&}uFCd=F8|8*VgfxCESsxe7957caDAR=>WKxk0!9w5OWRPt)X|#ur_?4l z`$(HyWrM8~fSllr9F3D9U(LiGuu63v3RQ7G_q;AUl|b zsM_)f7d?g8P+D<2^1ZL_2)iUbSw1JB|ER*1)q+kiO4;cDDM4#xISW;3`y#4P(@h~f zm+*#sIppV~MCrDA<_;uso~g3i?J74ru0xU2UBuPoLIX>G=kXhhEZ65d`E|68XzVdb zkFDjGMSLrNbj@i-`}ANkZH4<3UAB^^Xk-bv7|SHp24%_{~qN;5dW2=K5C&*|L_KhZ7ON zIxzuqVH4&Z{Efy&@atP_vE{ie%D=xto@1_CsaV%-9$g7n4fe$R+njYW|0o@yafD*p z#>h*&Ley;bMZN&2j?bL@4=z?vZjpc6_vtvPkVPhrzG@@iB|EsEZ4^}%uV^H|GYd5u zxl$f9k>J(>wdv;JVp*dZ8qPy;cTAT7M_enW^tT|$5zUr=Ac{UxJHaXmkQp$) zbhgJ^COPY*0cZ8){1)!7{CdKlp_u*`qbwb{oR%E@wZ(7t&EDY+-0YhV=~_k=Sh5%H z#}9+nV7o36W<>R`G^x(rd@ip}y4@EWb(Dm7LvX2^!*iw1{+J4=w8`#K&k(xWv)c2} zi7paLLET+w%m+;0bUcaZmU~7H2xn3bp~3EwEOHbSZk-c~U6tn>IG#^MmS`^Qm~~n( zvnN<(?R)4YR)3aMbkZVn4&u9^pwMq-^{wzit%(8`%K4jDbAV|UzE2FV_o7hm-|MxF z7ao}P8%HS*i~F3CJ+XBiPzeRkZH#=*U(}&v@{amVUFaskpi{~ibyw35;SV&p@IbWyLC zMIF_nU1sBEP>r)rV3L?$=d|!U2OAZ101mqZHR0$ux6&8x7*cs+xWmU$(9tW@oh{Jz z0$RmfM~-7OnJC-8lHhA{Y568|A>_yR+Y^K&O7SjLX z^-C%_<5-ncj(00)87+}X4m!Bt!^Gz3`AIj^HZwa-Q%&7=c9A826=1p;1akNoOCh!l z=FZ$xYqp%DAvw^yxaBhO^N)B(vpZk6yV3DC;jIJ`HbWNwHWvQ|v-NL6y)`+y@uH*c zN{UYMhW$+$;f>zH)k1RmA}eIE%Hf!sQF*a5d%PuEk12%`UorLD#CyjH;f*^)^ z(0Zu}zruk+TcHg@AZI(E-SOum3u@hH8Oszr_evX{YG2KTBv-E!l1KOC zQKDQ*vq_1MVs}h8_x5GWRkf2%W*i!WGKGrpD=!rlicc-#RH8=^9@uk;p8q-Fbpffr zGN*domGS_`)&J?}ND0rrn!ib9#e=ae!pv9@Ys>jg71k9U0q64j4w@A=VIu0|Mxkgf zU@~U$Zim5<&`v-CoU1u0pmu6=#(Lp2XwH}>1cEhc+|8}p1WfK&QLg*Ld(E=QV#US` zIGeTSV_m3}A#`qVF?YxK?V0439l>~{lY0sBs0*6KgfmCHy%-Sku&3f3` zy3G9~xsRvFP^x616z)g;Nv2`~ksd|_y#k1t00K6`P5;N9xH|o)Xk-0zbho5x)0;k2 zyUSvbV@DU0Rb%f@uD*6m24nh+Lk_qxgC0h%B?FyhPYvHy*jCvey-%T&6>GbMOydh5 z#9Q)gx|{TvB=vNu&xd*WJ3Da+D$iX|ey3rtS*pqg&kpr)pI*E4VtPAnS>Key?$oXh zU^L?0AgeB4j3LSh&P6-~4ypA_*y=X6?6`mU-~*t=>j86XM|r5ykjh3*KilM-UMbj0;mi^Mc{ zceDI*;W~wizdUzDb93q~nvmJa^ZQpLx8FdxsNpX;n(~I_-XKq@O^#ub{oNxbis5WFo`s zhc=7ewtaJAGNGhla0`SyL%RcNmj9uM_lOnYW{=rsr2dt{#u>xA7ZeOEQj~42R zq0| zDyn`AxWc}XZ-2DkhVxCB|G$)#Felr76!$ysuGNO!U907OvicKntR$m`Rl^IOMY}uY zdxw!rE|c>1pC*^vB1#j{&ou{q3w4{1m$)H@xBE*!|KqUl!!3uXjvZpGLJ* zH_=|`s9W3Mqf{=hQfJH?$z^E_X-I99o72?z+$^V;U7o~4$mim8zkoEhPJw5aZA6YS z7*v<##J-uUB9^kwYQ#S~)y#rPBx^i?t;Zy(M&B@~i$)I8EY@>}lln}(T#1&`7l{wO zcZhTc|GdW`yQ=nZyzcWpo)QZFmziVU$D`VZ|1!VrFxaapCF*^g?oAMLvg?I7VWEcB z7B>27@>yi@nFp~T!`p{IN!Luk^xNAC1&$AYT(xIJSIZd?)w4qEv-H@)a%LvS$*qay zwL@T{r%h>G@eQ7bOyFt6B8nrN9{7riY$sE|d~+($>_Ik#BgB`?Ml7;TKc1>ZWX5cf z&6?VeA}!Y@+G;vhTYJ~RP}f#AXptM29**@{=0t{)7ENop%>pVG+fL10+k43ik$u0kcTq`AB|epM zJieNrQAN#5fSP36if??A`L1nfwyioAYidh0XD;s;2$srx8>}!^AG2TP@j`vPiXNCD zJmP38R$T9#Ds-%+M>!txGSJDA(09Vdx|G1ApC%7r?V%IdqaBilZ6|78^7-8%nx_59 zKCIJ6?Ze;nQTy;Pk6+P;9|weDg;Y)UVZ%=neXxXzYY%CexL2EplAjZ*uKE{x8hYrGa#JDq*>!GLB_$I%t0`?122}7_Tj}+ z9fK5SM|+?bah$K>Hl+O7YzcLu^08{PVLNGg@z2AYp;8SAj~nf(EEN0k0+lWOS@sm^ z(MYYR#-~d{M(eqb;uS;8wU-YP!Yi^tGLmGQnQk`T zHwflss&CVex%ok{#jqiLCrwDQ*lbSj51I?wE;W7u z_sf|UmN0rAllIJ_Q#jN0SsXA5GIC$lawJyU<5^_4?MpS8u}D4H zN{N4{HOPz9@HT)adYiWH2({a@B1J|8YispiGg;;W5A%He2k|bp3Cr%&WwPG!NzOFU z+y;ztwO(+IbqnuMEiT1+k<8bqw(Z7g%a%B8k)>2Cq1s|HEGb!b0c0BC#6+UM=?1yn ziqHE7o}8F;HWpdSFa9NOgHfQRfJwC`T|*L5iHBZQ1_1g7_8}INMoh1MOsgG6D#Kt& zCp@pedapZ-G-sgnUm=e@W$=%1z-44Jz1TN9cYwcb4;E>2=iN!4BJyloi0WYKB1=fA zjXcP2UE~3Meu!TuvY6kBGzbQLlQmEpjjZ5LV`L@2(wNzKy^h%J@+RKw-~=*Nx5|j6 z2aI@?{4o_I@gn03G^cVt1wYDWO{sJ|16PaYxk2cwpLp$jPc#2kT{qt|o7I@uw7Opm zGt_0jAo+ED*~*4-cA^=A5ZQ{5**@7wkY&$`Iqz;90_4)>vAx`ui{-ER#|XqH#W>X5 zOEcKrOKbdTwSU^|pH64D7hMcvYfEfG-u|5xo&nDdLO!ra#RqR~N0L#z$UN}dFL!qv zu3B_LDE;p#%{ZD99$rknUzOs(4PUvJuN1Ef)6L?MsfZDB=z2^=2i92?JQzvAYk&$6 z5JK^a7(w&-7b)Khvt{9X6`<1L#3VZoEu7Vo(PxOYY&_V!w+7{Ra86=sar0Y=F;@Ad@N4%!Yw`;9QF zwX;r4nwC&XT-!sZ9h*y~d7zlU$cjlqO>$urCe>4~o-AUPP|sx5QM?p> zYy->N4oj4%U^(}{!#e!XdCEo;TP*au`psYkBPN%X!D|Mu?r35sv+LFg)NB*Nk`f<> z$#^P9@TSzC8U8iq$u`TUn5_qnJZ8=p-ozM~i#Tq*LRebEa)xyWN+`HQeMLPm(FM1g; zzn%O4JCMHK+41$g1xQ{2l2`&KfYg#>g0W*CC8$Z-RTnMv-I7n6;$Zb%(*Jc<3!CGh08A;4&F{Gs@_}T?Of)%r!onXQY zvu-V87ft8{#spD<6)mm=PaYR9hPD&;#r*nf|0mQqa1^NVSTa@@Lq4-LOSg3v7>uDq zW>tf!qSL`tp&F5I?!(K$pOdbRJWs=?R5muKL8j&hYjtXb2o(2+&n~o6lhp+#3XjEy z!Gp7a6GFX+=HOmAs%}lpCr_XbcdGKpk2bJT?$87k)tG?{75+3?lm=^rP&D6PE!xJFz2mFz6xbq9 z`JHOZ3<4dnzIT$)RliHl4Q!3wG?zprI$a{qx3AmKAnUOT`s*khPp`f|lD zgRpj-RoEj+R2N_5JpsrLh&E?pK8jt~))(Pe6C%JDspV6oULCZDra7~ZYo)dg2zLg_ zxpbqeYm0jX3G`Btf}82*&+HQQH^ZZK@-=!I9zA?DH8gZ&bQ!5M;q&0x3<1!sHP8L9 z5FdBActTm$l)a*wqUTIE%jhk{0&^h)JSYP^cQEI^A2%nyh{Tk(19aQNr-v~9y4;o$ z+Zo>nYOqIpox{yJQe2S8-8tmTf15DKnkf9m$48)lelb*OH(VOvg?OuFHCObr-lpgx z2xcv39T-5_+R&q8--}ClqD1om4O}iG$vRs`(gAnvQb=qaJImQC5ID0yxp?0{0OO=Q zlP!KKy%xO9jNfwG7*8+{tW}DTYM6QAZzr*}Gp3uABN|GaA2cq}MJDl^*(lz`aD$3k zh5SKK$Q5T&)<$&dlkp!8&ktpDM1ILknZxr_bC;Yn=2kA58;cNsd29pV%W!KECq{g&`dak;rpP-aH2HSG_4zs-!C`@rdP)ySb7XM(}#v@R#BF( z_t-39>*c|}8=Gf?9b`x?E?FIr@ViG+*7U{HoW32wW`?;Zdo&9WT*-6R85#lPEH;?4 z*?O989IKE*1j@vKh5}By1dK^b<=T<1spwpae0)TA@re#*E3S{v^vbFFxBZ83_|dMN z#h3E2`dc|G9%@Z0yCixKg}5efd)$tA^S(pz=I$U5MmZsijqS_ob=)fh1M_8-7+~Qi zo<_+IoDT9g<7Qum_N-yNFE^{RWP(+M=P1V@mLyG}nxD9KswXKHPy%Y;`)*QRb`p zfu`IM>V;FI@ScGepWv&xhNM!neV*!dgDcL$Ff#nsrM?>Rs}Mc_j=4x521463nR_1j zByPR;B--KfAzUoy+H5pYj&_0RTZ0#Mlvi#$`pgxr!Rh7{fNxRIBpitzb4;BPY>qm& zrH)b~hKyQ=FA}3KYT8=99%UIk<%loG|2O?Q>0Y(M1S0+6gqYchCMti+0=j8!M?BE7 zkc|*9J5e;z#??YCU>-=k`)X!0Hl-cxX6`z%?lb#!YSPsZ6ke40Kk*~Fs~o9xcUmt7 zG2WGN%sjp|>Bj@LR)IawM3xR7DKm}&iDpQ6atiq({h4!i!*LE|d>YxG z?B%QZ(Fq<;b>RTZV-z^_0~M$1NMcx)4SDc8W}2lbKI^HU5d%p+5V^ z2^EmSs3vE$OelD+d6fdA+y;dk8SeOYC@p+PhNmSf+;Och@>5yw<1*Mlci}q%5~x;; z@?zh((=_C%mcl*GMK0eQE@e&LPX=~;rg#_ zT(DE#u-fp(Zy#z#pU3hnMs}40|8&$5uoO?QMWJ&9HGY*NZ@YPg%2n&cvC^k`-mkz$ zjf{-{oJ(N|jhDTcSgq;4AD<>TzvIL?%uIh@BuhZC70|Z~D>FAf^0Kasd0&d{fSe$_ zO99;<%+!^#(04sTuTcK=I#aS5n$s1>twBLAHYLye>kp!^S9LJ9P<{9}i8Wfy zfGMRpuS&~~5B|Hg$n@uhe}G1G1?^h}pP zDkkGQgkQma`aG=|eEmLFJtLhfY3{I={69zJ4x=dTcO?KMw zP-ae;>0VN$k}lv@e~QJKavzEI5`o&6f|bA*IzJiQN}LkBSZf&JEcZIarKbzvJL#uz z>oBGO5#YyV&dJWRR=f2~pm!+|?NMb7^$ottS_sxZ0xf>kO6KD==VS)H03mAp((q?q z-@-pKw0Qpg`FGBTXO|lr=M_$04lD*ZTQIS~`FjN*_S#>;Bg>_Et|U#KB#!d4Q8hg? z_>`!x>oH$XfYtbGhlR4i4?Z4QauN!|BSLxTGUEBpV}7`dGq>s>_naK@?raYH7U}k| zma?hlia~D(l8O3r_KnL=A^*wb4;6A8-BhblBeR3&a98dUO<2fbLSe*;bDW~_h{)y4 zM!^_E&Dk$<)g4AVb>s4D{R6lZU*HaPYegzMT-aG;I|!uE{FHtBV;&hNr=Bg+LS!dF ztb#ej&(Y~pBOwpL7kD^ZKVdYm%XHf6`~$WbF;Huo8lQc+aA}tOLD?FBldPGFOX3%n z1x)?dSm8oQ=1X%Y(;PiwrNkx=u1FOpcC^ktzSMk|Pe}$t4*H}+Y1c($C}l~&$lbpN z_>KNO00{ryQ%A$$+K~cNMy~tYk$mG^A6lgcyi(I#f~!Iz5!4Q*+Spo=V-{YKaBtkY z5vKMP>fU&p4C)O$rY>4 z#S(C({2md{g;v0k&Wu*A3Li>AU(>(T6F$@}V9F1J2b!%-F;OH_B!TDY#2T%3mZvvCuuBqbxYP&R9ry_$y0%Ps>ffx3Gmy!IawWh*PBHX7NBJAlFe0O1}U~ zpHu`I+UZf3zKoKA2oP5}qbr7&VeL!5jAxL<*v@g9nyteBs^&kla2cs&hf{)GFtP0+W^r zBIxz61dBaicL5f-vNTR?$xfy&o;%!4?SYr=O@LP5PsxBefKq_Q!IRnqAVn$Rj$Gfu z-E`i!rh4c-976e#y#NMGu0B|wwO_8ZUoMwFAzaUHGWSMpD8(UgD`nh=njavmAm{O? zv3ca0eaF)YMcC_z-kZ4BF7|}L;mggbiEKC4+WS|N`O|L^q!eA;VERJ^b*F>X^HS0( z`zzl$Set~5X9Gao23YLaPiaZF5B&wP>0kw{J-d$e5b_7#(-XRJEBDnrh73AvyuO+l z`oID3ZwApEW1rZH2Fe&)9>@Md{Xj1@x1Xv@nGR zG4pAzw*4p-Pzvn87G*xsSQ%i)+nhztid^?a)FSLCyfTXB59R8BU3@5KKl9^Z)SvPv zd??LV)2a{N%8__!#<#(hzM7XAg}~_rn>@!&eu`w-w402#M}Lpqp5rXD zBbzm_Tt43}$TO5>e%F=*V6EuH#a7`%-cWyY%hv(MV(uwPU_9It%-Ri9{&)IB^WM!)zQI{MfDrlXf3Py2)+3v5~&{mYq8 z8+Y_D<3}PKfIbA<%Vun79Haw~FhSv}<)?>O!9Z-OX&U?`E+L z0_L;nou3|+PoWjKba)IH96n^|MRXTpCG|4k#}Wgs?CB1c8s$=5wW9gw;sr~v#!Bf- zVSg79&iY3J5svMG2={nG!x@F_XZ_#6_^MkuR~68!0;X8hC14p^LU@()w0y)l!t9~( z&6t{z<`%WCK_#29aGkRVj zZyjtWSzP9cf41uM5e`=PB?TZUz&J{X&-hzyqK0sm)$D}!XiQ^LFlzMGJd01D&SlX2 zcV2b>W?}Z`U)k_sMj-rNs=1cB0T~toWm8MR7JOUUybSJxMP8^XfV?iC-$ItigfXlS z2v4b>9Zy9L$*kpo6zeI&0|h+aPcg%|d4i@_3N!K@`Xp-qp_S&(_T$asmb-XWt^Z-! z{*#B6n(^CP1(8@$LRUm{hb=LJ5)Ac%>Z*r5Yej?n9|QUE`5WxKb%px_S)J!=%Qp_g zTIbu!Chm~NLhhM15C_qQwX3JN&47#LME zHV!avWB~Qb2&kKC1E!oxlMA-E!`9N#M~BnuUvY z%#X!oiTb~gV+`?8cs?Fl?0K zrOG)Ib4Od7EVN%zAXt&?T~o4miX1YVe_dr(u_I<5-gtbhT(Qratcb8)DT;fJr)>l&bdg6_V+l5XZU3d4p_I)B} zYGT%$s#?oY_0<@C1u1|n9c!N;RdK2Hxox(iWk(Cnsqx417?xZhfk)(x_X;(?wouoZBA0JY8&G+2G zzq|PN0{`l{9(b$gdp7XzMgC1+fKMp?^{c^;Q)IrUj_2R-cjDdiJ!Slx&%af*_=w`) z=}~0Q{KH=e|8-0C^8XXk(lffB*dw!NFJD?#Z<6tE^*-(Vin{raZI+^ZJ(YJ2?aCa; zab6@mr7%GWMXBn#RlC`Yk>@BTqP+(GI^9YO_7&`MCJl8KT*;Y7N6a;e8)~-9?c$|eY*J?*=4%dUnlBosma`37@!I-!nf0q^Rdflr$ro2xO#;s zIS{w7)ug6<>fUi-(ur+(oY0NE;-SIxlKzQP^h7T^e$*cV^Ps0P6DeI%y@75^FdJ-) zyEHHS)UNX7oUfEG_q3dpx{2O>+hEJphYI^pf#H`DOP-s9)Y(ej=%@Q@pFBVmt?-?BoxlRR0Hcmlt3B`@F79pq_V&PPCXXLZ$5 zPiPL>+%DNazNfCKQ?o>7>Wk< zasj@2tIX3%I3hh7Q|Y#+`D_}FrZ(sCr?b^9nQ{!SM1!WGIYUU8d7WoFxr(pE;Pv_Wgr(WUs}O$NMK-~xA(aB1pb4o)0bHZ?w8drbY9q|VRx zLO-gWKTPcO-x#r4k{%(ca z=A1G_E@n?5^+|mm&wOunn+kQdig*)QDR?2m2t_mnpE`EBCUU{i$(MA!t*(zA-1yU?Q#L{Q~~ayw+CUC zi2mSrbdDLAd?rAg%yg|g(*s%tG1Ikh0GR9yJJ~Hmqp2+*;-$Jo`s)&bH@r$qcTQf> z=YwE^JOyQVgsrI_5vt<+=C>0BL09?J2!vg**mpYJoLSxm(~~H3I3baJIZ>8Z@nDt` zcXCiI5_vI^5GP$$aW-`3ms-ScQ73XO!$rn_!HK#ho|rFc80y$11%e`K z?rsx@-(~I7pVnPE*l8+*axK7c3w=D__ycn8b&rn<$VpswHb#iUL@tElsDt1(p+x`v zEK!RdiqDZ~@m@~40LQcGpHd(J`}UYN&jBu_xk9qJx^xK9NT zFwp$Du}SDDVf@SUL7Z$1b0*|FIf#YSYgcAr!Md`XP&?k z6Kn_%c|P<6f^J_;hzI!?4qFX1EqmiZ<#LBzz+E?wRFTDb```}mH-!Y&r zx$c%+-_~4^JuDhE)e4yT%dCmr#$V#ryZ(?0hQx6Z@{fy`iC}1v8Bp;hP6VqKaclmZ zen`&0hEUOpWZN$GJ3{!b>2hSLIYYSq9r5|Fu%4m`5DSSeJri)nS4%bK%_lnm0@ubF z!4X{F?r)A)oKVK;{;PA?$1zDYd9SmTwIOa7ezkkGx%cmDPUJbbo5v*d zz8?WDmjOwpHl~i$qzBSA`Zuq?MnA;Unp^|eR+(g)ZhCCHKu233Mbo9IE|KH}Z!R-C z)@+Y6i!m|NGN0dNCsJNI0e`|$@zSUnzWIO)`){QCb;lB z`s7xy#Z2SX1>|eH$RCqkWNWCnC_bBOK)^goMQ)zIOCH^LEjP+S6-WoqK#EDb0TUr( zMK`x@F%fJ(n`W7?E#?DxIx%T1xQo}AI;(^H$TquojzSmSyz)yc2e1=6k+v+f+*Q9O zEC=Qy^C*9tMNfi8yR0K_YJvvY5P9^9c-zl=IkNLTIIAYFqp2!Lb(O4DVmd9tt_6Qt zmua1PXlM8$LMX@QX5-r83pR?}QPiy-Oz!ZWRLq$wdy8^qW~1&;rqI*U9dE&QyE+%f zBAbC^a2#inbaTpxfO$_OADV2TiBktUTBp84Ya^n3SQkMOs~{BIRvQr&c_*@sXB<@V z99^BsZ(~HnUQ)C9*;#(X zt32CIeDJ+2x+|vR(leR+zafuti$6|rI}XNvm3M{|8C}4NHo1K>is>-Igq@+XC8fjAGc4ic`o`9 z=mHG{Ng^1`=S+2c(3g37pU+`oE&cFB4`Sj_2Ip@M-$Z+*)a=Xh9^*zY7hXAy@{*^K z)sO0~$4(Weu6xlfGku&BJ^Ruj7#GS8_UC@Nm>&Nvsz8jK*Ioca)72RPT7N?y<#mpEcv&fU5+?!y5<^)CH6I|jUx=zuRU9?IeXQDH`!bd58Hm6J9U3e~N zT|v37=V|72XJ=ipIB^(UtInVCn=wzOy(*)&_&x~8XmPDmJj|NbImIJ@8g_P-lA}i; zy6jFKqM;hI?GNxp<|9~){DuvK0MMn8Ip_Y6K~MEMl=CLnA+-mblk;VyvzREc-!|xd z4fjyV3YI4-AO<-0e(_MPqdkB)7s|=$5mP6b0h6*2Ss%n_wcZ-j>5`}UTM+MLtggC` z54Dx)LR@=T#4ab~d_!|q z^;_s!JvUXJeVxxA^lWJERsD8~o8nvZ{8ZS{c$$R0S!Pb0&4D1Ey=$G48cU!>$7MvP zX9~&~m*tGjjE>6&wM4PaLv>?ZZr!-N{6i=D@5}$Vc3hrwS$1Ix>V&oIc{}yh4+Bu4 zvKYolvA@JsmT2nwYJ@X!q`jDAY@W^smkFjmbr~M-Ik=%^CUKd}uOvY-UBja>|6yzS zs}pe3sP||&R~CL1H^Q;kAJgyWB9ILAXta|cQt2ZsXcr|dXq{9vh#Y_ZF)eAajXK<| z0Ia+17(fXvbPQw6H$Tr}T-+rWnd~?IqbEjYnb>D4*}i%vgJZeC2a2zj#caLw%K2rN zKSu~|cVu;!nZ394*JJVxa77d|=} zbcQivWj0E#=Co(QPI_4qyvQBDiTLnH|7A~cJEhc)Xz^}x5-+9x@T^qG0iS8ECh)xo zS5=MCd_h}Io4#RWc2|8j=4*rm1{sZnb&fZFq1(Mr@27hOvEm)(ds447FudXL2D*-B zqhz11^2CA}8}V19l?XBlIoKc6qGs=@ZpQ2PhA4jUuOpMTx8 zjq;eV9mM`DN5YB#lwc_ePxf$|1n41B==bwI@;C9Xzx%%OcQ(z%&vpL1 zW2}$7uUH>^Ki2xlmGzOM>mwU~PcC2fET&c2xm~YX(!4!y2eV{gRJ$HAOOF?VojZQQ z3dx>L@jAV*3&Zabp^T4fzjRc|cVBl;HD824t)BhKb z8ZaYgp(D)^n%Vr2K=*$I)#<*-c;@?mujja+`bts*MpEQCU(GrIy|2MXJzZ6DVTp;{yKG zK3xG18xO!=HWR>?bU4#8guKXrm}vOmB&dz>+o@9>-!x%vwUQ5i54T?6&P9LMZpFVN z_%E=s91K4AU+;4lLtRbm%WgY`I{;YpQ;h%ItL1s{Fs57s-HkzSGtkVO8(%&P* z{`G)WnyqSW^elPf*C~xfUL?oj=n0`>w6*{&T3yGj#%KAWu%qal^VfN>Nmir+vLiSh zV1R>w6I{GG5Sx;17T*P@(l0vV{et}ke=4!KiiTM1e$jIbS8exHo)8OdZy7)?49;YJ zn&gyJ(+wplLz|roF*-PkNv|JW?)NY_HFJ)#W7Qn#mio&v?}-TJ2$cd~y+#W*wa79r{mMyJ5^&RlR7L1N-j>}5C(#i)6AbV9bdp5QEU z5IsL&j7KyUgt_Pwq7c@DSXjS(Ia`Wtx7W5%F%orsE(DYR&FooQdp5F~XIEq!KOLld zQNLkpUkRNk?BH_P$L#1m_`^O^Wa0-oS^c{MX3~>#tmZf!@e9p0?{NGU8%WrI7y`6T zM}$eGp*G=g{@@vobal=kp-z}W&i#HzQjqSRW?qDRA~48_w~NMaHG( z{3nKVGD;Kv-1Pjjq!3Rjef4uqPAq> zOH*}ILP^zZ8^wChIGov;IDbdDC$IA&SF)^Vi7e=TK_9e--4^Z5x-Cj%2VutMG&C3) zL2oJ)Hn#jH6=$NFbC-^2N{#S5^35AYo=bH7=;?1zo1JTe93_zr; z>Dd=91Q+8hVXb?3k-xRi!ENA9st$*>UnnCG_b$#qC87v)zEiz8x%32xubz z(b2m+0^j)k*F}d}7aUCcfwM#3!VwY+qoW&^M*V`rllAV=dif}0d#fXgmLnQgH$hB~ z8O9x3$n|4(yq3QnUeuB&s6PKNK>8hrCS+u;3xkuHryv-?aw$$Cd17j`c>1@u1 zT7SIm?j`8y)cOyhRf~Vpd;59nicksIAXH%bM$HSqT^902%?ak+WVS`I{L>odo`%wj z00u0E73|=czlrFB`KnLvcv?eRl zxq6aw`{mKl?!q^GHFC_w{;`N(*Pb;M-kEsCo1NVodTFn-l{*rr-u8ewz3PzYTU^E| z(dg;m9tqFUX?yX*DGLr!yn0qn@O?<(;ILedxEbY;AP@sc-(*Rq#4;~*Lc4o3#3yD( zDOJ4J=^p-JCY+ZSWL1pK9zy(sjh=`Afn7*(Tl2Nj>P`#f z)Q#0%?Ar+cHqRM%XCWaBs$kN^o|LgTp^n0)(8!<&f`c;_(V?qwtbw`YrU=&q1}w0^Kx(VMhb@0Q=Wi1BL=|u&nxqK zUThv44Yfv#Wu8)=oEt=2W8_OH1CG%Pnv^b}Y_469xu+QXl2)fy_64x2tCgi%TYRXl zRyRm72zc#OaQtFNw@6L>M*mYBJgw}KYRM|QWMj4DMMp@*rGL7cN2)B|Ge&EjdxlfI zS#&8*;f5dcZ$JxraB{QMF@LQs-TsC~k^6fpQ|c1i2RHYta;)QvD%=j6+wG1-Mid|YN~Js@FDC^jzFxjLtC z2Rcy2dqrPuOpnTRmVV)m(5LjY@Ty!?5PwT^b`|f)VHLBj{DQ>`ugaO76MU8#vWs|h zH4?eRM`u!Q;ZD3$uTOqnb;M_^R);iA#TV&?SHt_!8o^!RqTGY58Yjb9AaftpEof0d zyJ$+}DhOm7>}Y9R*#sr*fM|({7H?lG8-&dO=RT7K+e*c{A82isH?^J( z(Zoj39kHG5kVkre)t2$P>4EB~^9BBP1C$ib73O6q8p1u5GY9z)gj?t!{%3dYh&yE&&K22C zc?T!RiLu=0eFLktQ{LyDp2AgSO<{K61&v=qjfJmrucOw@Wpc%Oe*v`=b62Ov zTB$KDyml|hE{ei0f}EG_A%s(grwo0JXY4>m7fu)&Du_+UpgHlE;H#-8+mTn8B;}jna%H&8 zZ?MAu!`i#RM_FC_-xD&x00T2flyFg^qN1Qhf&vaI5QeLfftbWw#GYDDq_qVy16Ue? zPI6>;n3h^;wPI@(E3LGpr=ZcIO(2CJ6arF>LMtljj-fS{90(Sf_q+Cf=9UEF|D0Dp zPnenK+56eowb$jh)*7|U?T9VPkyvfJ@o!tsOPEL*G{VA2^gH9sqCP20i+@L0Z+k4S z)PN}8l$_8ISR$GdQ1={X*!HQHD3ZD%`Dr~r#TE@iI<|Ugri*!);*Bj56CFlWY;co4 zJ(FY-6FZ{xD_@DP*T-Z%9(z4~z3TCsoHSXDTejIaVD ztR+Jug>_cp!QpR4LR+o*!)iY7GH+z0uv*>qJ1yxW=J#iH)me41P;D$!9SdzOR-gWQ ztf&&IBbi8lXOHZlJ)qADiQAKFOciFx^>_}p^ul4e%SP9{n}RyaiIe9pik5lF|L|W7 za5)3ymOOg0$!vc2CISe};0PlC1SEZ>pculZoQucAhDKdmA9mbW&!bKKZrm^bxNj7{ z#ip(|itN^&b{^2QQ~5aEye8*hGdi=Q>UO_C6cqs^O*Kt37`P+M|8>LOM9acBMlKNiqwm*O&27t zwO90%Eox_1qotgM%V3;l(p*giiMBIUkajJEmXZV9R3=hpMge-zkqixD1EYi6XtNYj z4{b2s>vB?Zd6jFY7#o1Tx8gM7p64VIq3EC){A0>*m zs*m^S>a$8C9TlYo0NR^juH-d$QI3D1F}JH(@mGE`QO=w4O5UV(^y-TEb7VfXo0jsN zn;ZaePjU5u*P)7adxA6MeKX^2TaqX{KJkunhN;!MSzR7~=(`;}1Q{Kh{(=;SL+=OS zCx|b9I?hs{!5Naq`n;L`O@a>Ok>0f~eCp!h;P9zS&{DSHyAVD_J{W&-`wb+l$BFG8 zZamHMNKx^d8{Ip;K`H=iJ9?1ZT|R-|8XqjuIflT176ZCs0XpW%xw2Q4R@i%IS5p_u zb+V=z8mPHOqu&sxFKuu_r6U{jyzndLc}uU@ zEb`E4qfiRI0Eq^v%xZ77-C0zxU#6{gry5w>ezmi~GpqG#Km43t?Q;=Om?!?YlItKr zuY^C*&;r4o!t7ady&d|aoFmp`lHVhM?9?T3e(#UWfHhYXk?D~u>Q- zi`}usQ2u`ubi&Z-^(Co&1V`$S5#v2+g0??O;Z)M^|ia(a*g*g>lIx2l+9Qt>H;{{YB7qXlS#{8{bd$cwS_e8uMMb8 zL0Jg3EQC9dIZk3h?BZCQRr-5@UTKus$f9_D9^NUDop>oWdMI&?ZSNUSI-H`m{QFOI zY%E4;MCvo`WMoYn{M8oR?OsN|3V-~or6pCgWS=ZatYU`~Jb6uHU)XXKK6G4|b=+TI z!@(y7v*r0^_2&L!X=?o-jIn6DG*!W zjxE4*VGj1J-*qEI5~4o{#a_kM^vUXsFBhLvg7;4)04ye{&;{%<;Ta(_+pzG{X^}5G z(xCK{ReN4O9w*}Cb@-g@Q}fMl zZ|mPe7gG$LSF9HL?i}t0WTl;&53q4Ps==tgLI~HdhGW-^y9y%q=C6~;AKKb<&sT-L zUl&k+UfKbB@2R+*T7;gUuYWA6aex7Jr&NbqSN=MjF~c=3T(u(ktJ$ZI2h>G7P@Ltj zwr0DmJF;kZSJ077ZfkoqYn!b<0|^mzHu&nfHOYygLEH=04@;%C|Evqk(yuI8nz9=5yZrK#DHoNDo4^&Rxnyy{YW8`)dTQ}GOyB)3_k&W%mb z7e}0OkMk{df-NJT%T$;6;XLaIU2c!q;;VexKjU$MxvWDpd2xyxrjGbd?|&F;T4&A5 z78C3FFk)88K>(%lE$gxj*t&=TL-M_!{axc``F@`LU4Vu1d|&+?%xI)i;|~4x!yAC0 zuBtJ=|GNvRG|);4pYWJI*jGm@B?Kk@?pM+}{

    wnkFL2D>h(O5Z6Kfdd|{y#n|vy zS|yKL#K`~07ZQ==7m|1`n9UeR3pe4@YKF@9dhmhSvHGUFW1-cSe|;?USS+;M;2Ukc zqeel-G%ix(?!dfCn6(YV{p&F#!f>sTP;35mMbJr?T5tl)gCC#HHtu%%?GVUl;bC6c zhgUMw9gw|(OOs?Tb$^AAY5gK9+hRdH+~q=RE82$=0E7s4C9R^nS-+i?w^*xe3tPnK z7tPu$`u?bMuVKAda^0*uos<#;ug3k`-qPd8BQCT%re=CMrm&YUKQ+E%kwL_0ID>>3 z-Pd=!3+c5Sd*}-#3sSCj=q+5Pb(@ny_ao}9si@-)eyQP-^9!3-}FTK~rwP~K% zVj|ZS7Zs?+<{PvYjS85`M5whk-DeTIJ2((@f4zc_!Xxi(V=7?HS&QZHPIrRZZ|-WA ztlQZF#f!ZFb%gFf&No<7ngb>05^Dy^Ot4dp=975p@cv>l(Ym0SF7;?N!&*Q*n!(`u z7}l=Q(XZdXMh3Q-ft{iU7P)WudwKCcab6>WY0@T@;wCm-Xc==`C{vIC1kFPVruHRxc)JBl-SjqV4I0ZuoL}hX`w5 z9B#u1l(<*T%A&1I-m02<1xjvcMgbwO1Ms8}$J4a12wGM6e429kEQ{ChM=OqPWU!Ox zHxHZj9Eq;OkPg?hn*@@4BJ&Y{)s-WB97vu@!DzA%2lCbIDo&}a((hmsE%kQ8M-K;`}Y zZ#q`6z8_wi?bulPO^LaI`%Lu`M!m(aPogjg<|Km1PIiM6e^MVUVj*noVql zyc2oeE+M?j;?vo5UNp~jvSCp5rQ59u6HG5mz0tg(Oz*wAL8AZ?gkP1<4)|%kU?JYN z@kyuBIxr}H0JCU@c3G*{ho@o?Go5&WJ>JvC3OF`H)<9r3NNFmCwozYh} z^ELA7di{3;f1~9skykhJ!Coo;mf-nxrLSeCZ^C3#Z&S~m`Ue>sw$AT<+l8Yl8kKr* zmDNM!jzryce397;s4u>%ffIeKEwTY^mHrI7^OaK0?!PwA>AAp}Lk5m6#8gs0)c%)cl}H`YsPsp|xQVqQg{iEOcIt(cJbk`lk;43puTnO2=pJ90 zJ9LMcQS&NguP)&`7Av_K7tSG_Jv0J@^V7Mt*G>Z*b9 zc`_wrh-6;rV|-w~Y#;woMISknu?LEqO8tO%&2a`ypJx-2#7}f3q%sn<-$83GDQ1G* zPULkFM9$o7wC3PdFb`=ST?z6uEJ@Bys-(#6PK4=iMzfF}j`;jX0bcxa1hh~CdjszP zywFA_&O0z%JN)&iPIs&5Nj7fbL2IBD7MTtcwz$N5+*kH7IX9>+Ju%d-bgY)d|Ps{j#Dpd5}13KtvU zb7~eI-`iwrr)GzGis$O`H$Mda2Ar2eCH%fPyv#w_fJ}l;0MHWgH>$*2rXiwRjRk^^ zOUKfUL@C2RJG<@h8~e~u4S_R<4oT3;ToJORpTO2X&uCUk1-(?SA7c2H-_*N3$13a! ze1wu?c-nOtXj2qK{5g^DcB_xSkLYMHQfj!qd5oJY&CPe7(l?u>WFLLAnVa9>Cfh}= zLtiWhw4kd{N0x3thlobj9Sx|Toa(6&>gX0cl@}+T%hJyU z)YzwG+hQ~N!7ZOc4YSpll$U^v&eku{@i>k`fy_(dh5!9?UAR@vp)h^(J)@g%_zwaH zobb2sQaRBJ#CEv#AloaU&0A!Jl(GH?f2CDHUk55?e%Kz>KimdZ-~6y`o&F&YttbN_ zdgV3i^;n=uz6O9C4VNF6CVnJ`T#G6C{4aD-R_al9OH+x3Lb$wDb1kRY#8zQ5C9V8p zEGn^U5}mI^8y-vCgtfCuj><}44<0F+L$DM!6odNaa7B&aV_o$5RpP^5& zGHm*XW%dHOqH&R3VKa3SzyxALGlKs?oTT^9_}%~~`hRT<+R}Jq`sl{M0p2WI&3=PH zROG$UhI7O2kE+Zpfg)A==afiM=TM5;@ z(aK;odVQ8yjdrV1^Ac=P(&Fl=;8$V%qchRe0YDLt3HIG{o8ehz4u)0XL;+CX2EdT# z&8$Jr(*KV0y9HAQ_)_!zl(=-U1|@5CpQj>AYE76*t`gPAWuh0!(MlG#+H#%EaIfCq zW<;iXtz|~cr9J!AJTXD27r&oSzj-PiVG$a^)BG)(H;D#BAf&GY{a^T4mQA`pBWwcZIaOTBMr@Vj zR74lh5U1U0`$c-8wur8JObJ!xx9E+kEn*40(pP*--Jz?5BA|i=Uw+N;7*lJ5l$!Uo znVb9;7-Jr`3bKgwmWN4|_=|(BQ=S(Gg}3ht|2uQ>!r0KKhW+hf$DG-c0RcVc>C!0E z)pSkD56k6;3sZhrEkC%EKg@d=s1s}fyi*U=RNsj;qx2+Q&XtXsh8q8=G01*36LxigL0>s#yd+*0sM;Y!q&k zrJIRJFfi@xK0p*O7M>~Nc`?J*1`zFo;wk7s`?;pB!rp8iMa;q~9*}@*=g-T45!xV~ z{S{_A%e!h@q_7IzeM-xUq-A;dpKR2Hs)JW@dgRcFM}|w7nv3@viN#NlU=k80Iy6KV zBjG@;U2M2rETD^hQjY?m4jv$qUrWbQ3VtL+C4RPA{yI;kXu5oPS)R(1RAq&#&2gAr zA;+Po@?H7SUnPfcqM_KND&^ri@OxTAaU~!7O%e^oQxhR{9y%XT2X64DH)e&r8}QcN0#&rQ&Q6 z3VV^4gNno|sV55O%KX~l|K^#RSQkKOu?543kyuw0TY&y(YivPwpqT7Xp<1m7E{c$a z1?$#&HvBvFC4Gc?N8F5>e&C{&DDL|oD_8Je!9!m`2K7OQ5Y z3o_AglUrpH3jaN_4j7(dRsILK&4kJ2*KF?;>G(<6|D5j{FD*Rj9tcZ1;oDDTLiqF} z=YTzk8Z;K#gJdW}(Z488&UL)$rCGfsP;jW9daYcK*Cu&r+X3`6ebo!*r;YN{yM;7J z+7aHn7Kh-MBGt%OFwSF_r}IH%a<%&B#6W&C@!Lw4s9GYwy_5KDtNeB!zcsL^ zH*pPmpE$_;>-d06LK-{2#D86!nUbkYpZB-e{F08gDdH|kSWmP;1PP;-G<&zh5Xf!l zB^)x&Hha~F1)?!|A1NsTYU_^E_gw-aI=h2bc&NyqOYk7y})c`FBYkn zK#a(A1o3=r(6xSPkwUM3{8Mzkdm}HLR#)6D@`7#oG8)^Y-7O&-j1t-4>coNfA7?%A zk}E-Sdbh|1!%tjC@6>bCaO+s%HC+0rw;X|;EG2YrCN(&NP%M1@9}s&}dX>VjGp)F^ z2qfa$0hWKdNYnv8PqIc0zlxM>h?H01f}o1;6J{PTk*DHoa)tn<$6{C~_HFe-FM%K6 z?z52%R14oUJ37myo_h}Ych+F5*c%st3pX}pX6^@DffO89&I3273#cngZOKUmIlxU42DNI_H``}#PR;$ zr(l8w#@obSE&dUsXoqi#D|D3x8nGd&gjnqFNzY(h;ksfYRo>+=K_1MJS3SZxHl4o9 zGtnMAlV1(D2G0h!Hqs)M?xrZwp(H`fCJ7ZBBahGp`5K;tU0x6j)mF&{&~*jmCpjyt zmML@0+{Q6TJ2K;kMSNz>zk2?#f4vQNRun+%Vf9igzsp|k#gc{I#?h8Td}U6~dJ+5q zS;xv;>U+J}=5d?s4EBw93JulSALNl@5aH?`c_zOVD{TfI`SZN$!H47aSz;~{u%ZZj zCYis50#Vn7jJeon&+g~|%*hz1lYOB5DR@7ZI=m)LfB9-Yqfl~MU_c#Nnd8DtXmV_k zODv*Knc_hHzCwFMpCP$QCw`f&S8{q4USe1(J%)gQ3N+DT2OREjXQhmP3ctxKAr{Ge zr%O=G*G5XJL>BHS`}6Xfd$d;$Yg4`kx8Z#CNpE4Uw!&-Mh?*n^@%xPUqOc0tfrqj8 zXdZLaAy&i65>P@7)+8b&ZIb=Mij)nk_!yn!WjmXEzGKhQtgh#1mZWtnc$=kBvXPnb zREme7-a3mmK=!p$v_3gOBXQ^3){Bh+Qg1CwA1JrVmsqpz5;=!-YMn7|&c$OTr z3O7Zv@yo6b`wu!fdn0^jCl_w^R7z}4uq~@f_Aw+DriC~|=&4*GJBpa$-@!qf25zQ# zZ2_5}2GQ3uB^}_^^}TWBn?vI(4iUG!yb7Wb0Yk^LZJ-Em3i?pYCWn1>!Kt&Gh{j!I zv+&s0zahSxdv*m!IB3wjhY%v_??tgWsmGuUf*fYt!3oWp@!&hSGXTi&T) z??($CTnHC(a4noS^zXZc990B5=n$ll*giRwc!m-QsO)vGrmL<*wd#=_LC`NYR*}m3 zC~Z>^W~R@h~;qdihurYANs@+%(kZrgor_>E~oT#`6nV-UPPDxp~f zCg!a_+e)+Gg-(p;1t}h-kOz568mLqDimz6s!EBAo46TH*pZPCJg zbE1Xy;p*%;Xo^I*zi%HwInoeX{Bv2nAvUt?`GDBXy&9t@a(LZAC8jPvSDy$cA za2pV?fHruAYKzqRLn%i~n`LAh7t6j#E~5lNKHGXa3VcM?(};pEyPp1=5{dQn;VW&| z6Tv+-?%G~Y>(x2d(-pw|SWjy}jB@7d^|XHKS=Q5`8`9>w-FliyC5iQPt2B!R@=FS} zTTismtf#E_qW_cV9e8|k`a2SX7hg~5{*K5!pBaI=*h2ayQ9Jl%!%wxBzBL&8%SqqW zVrYd2d18tj5Oo-)7DI9F|5%>>lVwae1D-;yH!gS|4bW}OFD`w zRJXWzMsFVm$BRG_DO@iJ<7=Z>k^I%Dj6_&`lp{{?i@wi26@pFl`H25f)d$(U^*Ekn z&WBRsyXKx?i~G^)1z#I$#iOVS(06MBZxgysfWBMtN1c_hDgm}RXRXyzE3E0=RcIYR zdj~Hp{U;qa4OrQN-9@X=xX0nMAu}$hqIJx*0&Z~PUaMz#8?xcLX#V4o!pEDgv;qV# zBIW3enCG=gXKLPa^{Sh0Za4Lgkhp?4-2OGY=KeTCxY`Pdc}h@J=#ak-hffq(Iye~m z%>V2q$8zm)&%-n zwXH@C$=nv1;neH%ypg_>g}mA4q4uFBS}YC7p@-ofUW!dlt`vu~qy>w-gPH)RWj;12qo3?A`UBU`tJ6WD$PU0T~OV152% z>G*B>{B+7mDki&Jfz(Na95LT6$|An=Bz85ba4nSkhZ>7LK2-+(M~-A0Ft94|+_8YV zP@c=C6QLk{ym}3@p|G{Yg%m~?<^vk+MO1P@Rs-sHJzP+d(;1=b5T0y|;0u@{b;5H( zY9UU5E%TrzL#RH`OFEqNOEljS2qx_iuTT0``=p=9%iEp8y8mtbu`s710CU>5WzUf3 zzl1XuA=b3Z{ECS}7h4%1ZQURm%m1xX?IkfnS1O?po?%IHAPyRET%xgRK&XeCjIGQ` zh1^XTaA$%)FfJ{p`)bdur0>>U^E5rxaSpW8%j?-GzFWWfL;AT%?ShNd+Hm9lW*Ep; z`G*kbMXD*g6A!r5(@OI{BJR@x0wQRatAJ|7&q#M8=+TFw(QrtB1LD{pIm2OsR*p!A zfCFUd&>Hx`ZyGbBJeB$e=GV5zey>ipY=`z(=3m?2@xLI1672cu0CT0PXV}OAPsLwk zIOlrJF$y<(cI0m6xsbaBGEp3K_uou)26?b3dC28r(-`M(0qeDo?V%?2*T{o`#+a&= zEY~cKr7BrO#D+-}m8LG?p#-L=(pTi*YZY0av|D)1$^aEC{!;V8cnOh0x$aV4>2#YB z)BEL?l*6vZh?~S*5n%_!bfly%5~@ZcuI3jqV-GvQ`HKm4FD%EwQM*Jk%-51(H_+yh z!uqK55riR}W-A)xePcxXkzZRx{#-9Rzobei;AJT2Iu3Rs;HIx_%2?^&+jNuWO?zA0 zg%f6-_;#FAmK)Vo%W{!y5#m<)_l9>medS1S-w_F}qz+ElZzyf!&!k-;_=>}@x`vpb zLFzdtsY@jt@$o)%R%_BUChy1pGPD*VT3Ej-e;=ocH8T8~apWCUu?t8LXS>8@7}QpL zGp8uLxe?*&gV)Vzx>90wBD(E0Y&K=*;46<>tw4PuXGw>g%T{%dG%BgY$w)LRu|@QJ z5>FUMW8#9Bv`SnIa0p<(1y~X#c%kG;AatQ<)n+}~POFyH)FpF&T&b2xdZZ$?YYPTo z8=5~*Z{SEaV84~O_q?BzG{d2FFoOC!jk;Wj_1x0O+&`hZSyZpvutGOBvzlpd@CL}o8rV*UsnIdkydn^3)mm$@b^ z9%XrY&2omu|B-=m$kRP#srC(*s|kyUqF`W*JMoVD%{9AGzJdNZVs< z%a`rWH}C)PDAMQKFK$Rb-$45OpAJoZzTKiLO*!9QSfPb3eZGB#o1L6*?(^E5Z%YU2 zACl+Wom7}`?*7ZhcIVq!4>#lC-79tEW#@J3e=Pn=l3-FI7^potSW&K%fKie?pyRZS z%a^(&$bfLEDOeA!lq=6Nt64{?KtEbRVlOB|vkFqL`x(c5nyF%T5wXj%rrY=!)wv9vJfjYz$xn03)1jmx~>*jWc#F(T6`d zzozlL@cZ4v?{z2CO>}1V>^UrC4YB;D#ZC>i*s%X+kzU~+A?^o@MLz%pp#@PC<~>Vr z?czL^W!>%qMLdZlUi%D3sy1Bj7XKuTZbNjsaxBI&%WKtQt&4c&MD0aQW8f;*D@p@~@xz0>%Dq&E&HD5uNW5A-kPinDf%>;*Rg2E@I1x2l|Evkt+M zBo}s#Z>l?VCESi-#TK|y7_G^_Zo3e1O%Vbo3Kj`8AWB2HUiWuXBI0(w{6xQ$&R;Xp{S90o^hbT4SbVNIuS`+aH5V;MWJbj|xvh?q9w!Gum&0_ntpQ~=b5rm3@ zfa@hm12lJFcuCL^%33w8_lX*B&>dc~#1ZNiUh-WB^6k3=*@7C2vHU1l4BjS%sE((X zzxV0NX}v979ZpR1-Ku%P0C=30qUCVAR{+qo9X4?)C7;4uZ;1a$ zFDoieoCXV|{W-&Vt_;)JaDkhG%aNz?;m~fQd4q}TXX(!-u3z5Zg_mbmQ#JVYrNn*l zFK6FX1o%Pa@&YTLG%PZ1s77?;znR&?b^aED|6PGoj4t@oHU&SIm_dnx-An@oq1HA$ z=3ADoo6(3N@{emJ*yYS@%a2Pa_9q6mn;|2({F-5l%yya~i3EbV2lO*^FIp)%GCY%C zkK|Xx7I+1aRfUf8g#MWW@CQy=tQ915hG13R%d_Ccc>pg7KFbmLpga+kT3EYsuInWc z(H#xakWf~s08vV-Hjr&I@GF@|y&&{dGTXs{r7tAzSLyqSdA4*d%kS;|X=K_G)8ELn z?^?QXyv@u@`!y-E#XAxJ7Gh-T<|c|n^(2x%W45+E;*OV9dNQ%tMt&4;r0F;-=WgBc zpLLav%V+6$kWEC5QM|29gY7&ev0Qc8tN~a=>K&eno9LR1--Kai<#)7&WJjbncTu~; zM@9@LC?ySwOw_FZr0&Yw?dBX5Hd(KE=_WZ`tAXWO6SB>Fb$}=qQCq04*+5jU11ZM= zc%F)1No|tnbEQ<_U#ZUf3G33v=W#mr8Wi7}n^HzAykxKgJnRy(r3_^ezcQLyDtARE zjzr}h9_t8s>`nRCuXYh|URG(JL^Y)!+k?({s_W(t&^~*w>d|WeYhd&J`21+xMuPWm zY_SKJaM`w!xM(@xu7y z&%_`1RL+z6l3J_m?p$81yA$u-$$RB1OX|u*@2XUMNg1lt0{AmvG9gKG|2k4;Qr3Yi zte*UvGL!4oFR75HH4)9BXp_M z0a_tNWXL_0)6MhR2)$Tjc30nOfG7n#Ie%8~Ha!RES$q z`%M_Bp1ETHTtoxN9js{Q%}z`>p6YFJjK4aXP^`5(Z{e?o-6u=Aqw`j)z!Ex)<-AdZ zg;X7e=2wvO5u1yO1JQ>_;?8FsfTpGbY0N|=4V{L9IC1E;{dwK^^Cl1>iL9BT8KFMn zPq1W@BD@IjM3NT`NM!BPj8W2)FzKUcbtgmt978^G;K{cK?YeYd_@QivH4(>3ahj8e z6yngcAUmpk)5N3dhY}#i_$!KoT}1mkiZ1)FUAUp&B#sM!c2d_j}%l0O$qXsMRu(fm672D=PylLF8`=cA;6@ZA`h1Q zZ0WyJwI&I=Kr$S_eU>Np0IDk>Tp?%fuBP6VC#-!Od)90+JPaPUR)#2a^EmC=85(2t z85fmyhpzTb%nA)dZhQmxD<=6ut5O;QJ_1{#}gzgA`cV#xG z$dBYPJv)LZe+!+V#=Pm;L}1RXZt8DcAPVokQu>pAz~iIN9oFPEfM7(OJoH->kxZ_> zP>K&{)cvCI-jqJ!-#tuwZ(f<|Woc`>p}Xs8L((4IxR$TBr)F_A3Vv$f7k-kFj7H^q z(y^8)`Yu1H8~>|Ca;@@zY>SL<UxC7lLfH^*l>^;C8&4BAC z1J!@=kdBD&;U~zYU&T=q$ACv2QFWhrknoO@GJGc(@uP$_)tL&8N*5|;LhzgV5I4n4 zbkjHG2{eX@sCQQZcetGU0(TI7*~||0Wi+hmTFZZAc%4;VC$TsKgjgU9inWaNIK*cv zIf1x&m}*24ua{6L-y?t(1sM9X8cg>8z3ucFd;MTrU2Ks%2}@V#ieH_k7oi*`6Fg^| z%wKYv=sX@ShrlQYJvoZNK0Q5;AR!6>e16|$l5g!k{_%Kqpv8MQmkhi@p0^$Y>ljBo5~@Bw6(FbXL9+D`s@Fr&3fom6J)yv z3MYBVS@bsktVE8Wop}86AH-khCOj%%#Hv;gQk$`0Nb4|piM#8_g*x#x9yDMwF zgX5|AHY**!VPev<7Mks&MqO9jCaPrZ0z0Z?vqT3oF;rDR{pLX(Rk9n8i>e1|1HEY> zt|Xb|`-IDnI)Ydp4kvi6gz7YraEkeh>ode!S2^>ugJ`k+PDQg4TKEx-92XIU#!ODlEMOp%=h zpo+wg<)Z!pm@8omRQ3#wQ4Fx{unNf-7Aa>zCvJAB=g(lR?~mj+7aPS)hhX~U54(o8 zZ=n{QOT0`Tr#c%aJuIi(MSFR+a(Kzg$vfW(Q?30HaGegQ2Sgo}e-sr%0%9qPT}WUS zrYKYj#07R?V2*{K_wr`8!yO)^6F2;=}d!b^14yf3@ZDw=2dqUdwR8z|209$8Vem&@7{P^XciWjMCLSf^~MQ7j{Hy}265=NwEg2&72mS= z4~a11`-j9R56;v3X9|z&{nJcN4Cs6}4T8t6t|I>I|L0k8i%K`E^rzjSq&hBfvjp(f zGwsh7^nyQYE|PbIf!Ce6=Pov^o*gYu=s7hOLufHeHr2+;{%R|4P#yHwU1Zq);_y<` zn0XQ?%P{^%P9PdY(UoxtzXi&khz1c4<{@mJesvjM@F>78c|hWs$gl9L7eertFD2WT z1gQ4p?jl}EWwmwOGx;-X(a3l#6pUInBY$}-^5v_-)KgZX&8?c56D@F6Agtg=>Zm-h zQ*(yH=w5VEj%Tv|hCablF`L`67PMG_Sx-3O?D+FM?y$Dok6UP9fYq-R4&4YPk+qsZ zU#l7P!j{NdVbFOkJF8+>uwU*jYkTDZ#N2VyhT+3KVYEg$6I)1_RP{CC!JpD%5y;1= ziEUyS*r;=P)LDaTAN_!tpoHvX8KDT3t<0{k zi=}5Rl;xY@40(Kc-cV2BYP$RgJmNKRwqDwSWd!P9G~0B*R9dWF55sVFYv=Ox;X%Xe zB~BVcF!lKWy)^clX65eA&P&>FA|=P#Z8te7Ac8&H6VHxJI8V-tn{a;L&6sc=xTLKK zXK~`0D9>2s%_$}v6V-ifzYLP1wg?SuPelom6^F-ypgOH?zYzO~SX@|X#GeawllVxu z+HmZMbhqmw<{Tgd?xvjBcR2*XgJoEZn+7_2+HfPPxo--fMqVPI9;{J?$Lvrk9POc= zzDZf3uD+7y;B{g&n$w}ts9>H$EJnxV^*1bFe}snb+-Al9y7f{Q&~unkb*x{PrYL5``c5`ymJH{6LztM>7MUtH{C|RRSQv0>bFF!)-DlP zV0Fx>$WtQiM>G|Q=x}MB@IjZgUkUnj%*P_3$vHKrD_d;7*jBXIs+Wmkb|+A-a84b$ zFT!!1qssHOJ`Lc2>%Fsb12*^O1b;_7Cda zAZLNr|II`DG=ZOu&IsJ2^kBSxTK-CLek7qfUm{y><8Q#yk-jLnC7_?v$`_tP8}sp% z$wV~um}6RMZ+w+M_9Gj<3LZ+&d}Vd~pzIMG6Vrjc zEIk5IeW+S`F|eEGu;{**cP&Sk?wh9~Ol|rdO$#LDJ8g(+btdr=2Rj+m$N0sFz{Fvb z^I6)^G{&w_zao65TL=^^{^$CErh$PuoRjjb-F4PBbY%DRYt5VNcjI}u`8y!Q*jxZo7s&6`D+*g;fP0`ZOIMtRBE@?Ez%U53Y;~f%JpZh zg)JhEvnhZDy+yuMt=&XvDmFMtcN<+!JEA&nUqIb>gCY7_4=c$w3`BsF%U}k)k%>?Q zjFbxS-Y(*!jTN$d$Lgjk!wD8TH6eRX+XJp$~+bSO`9V+;GbFh z!~d>pIoYHO=tq5Z3kQ}yCVkVn3%%r9#D<}(hbmf6t>itjz~`a0n0!&TWTKhpWpmui z?`rFRaA2>MwH)3)EK>&|Bs+!2tM3|?WMV{D;pyx2hPOeY*70ye7x8Jvhp2d_Px_UO zcd`~NJ*>8dJgQ?8Mzr2DsjydfcvzaFPhOt&xKsSpz|_zgXY zQLWLow*)eaUE@1Xz{tuJx^+fm&6bFy!3VF-j;v>QN|u@3sLZbTJ2{5yrGK(9IZ;M( zz(6NFxn_-XV?`!fpmN@FCNW79%p7IM=P3KDZ(tYFGm^PIy39L8W~lGvvCTdm2r%@= z#uua;zaOK!pL#D9wZS{$Ej95YP@eowV1|2b?Vo=val3 zOmjS->g*NJR7BI06l~y!yA1!Eod%yZ=jocZ=cyTK%a8R(rrVr?5o7Vl$9AISnz-S? zPG*#TB%-(A%-l#}E9F?k21V#oApq^@j81se;Q=XkIyxYQp2-1uM?ZZ)=A<2v$hzi$ ztl+2&G=}&a&CgclcX3pp)%H{zmqqk2$o&1MPV5(>P5;tE{8T#a-%nse_{ZWR@&^>FP5Z2V4C(FQ7@f)6qJf+FTQ!@PbuNi*E(9=(o5BnO( zq1uL?8q8~groL+C&ZenjlKXW&m8#MbD3m6Rd2CzxDYGWL6Y8qTY>k)g8__iw4n}m} zx@O-~(n_p@x;u?u6+&tZg?h;~eodyF%ue=1%y&gKO9I*Bgq9Y;ij2>aee1*Q~ z@paw(CB|2uQo7&g9$y(MOOG$|gYH?RyP+4p=3vjFgsN9ak?mi4=bw|LNb8T*)9X}z zUh)ln7V)ovv&YFjlD|HZzX3y2B!8pe&k0KJU#EVQuW_TxMV>n8VU7xyOH|KGtwV>V_j9>CPP1MXc}6W#mOWwB+Fwv1#1qG$;l5D;;&D#QAN;}%ku3uFvO*gp8blO%RbWWIH$C6`37s5XxL$h^ z4G*n9`HB8So6Lf4$I^HzD^IVW5uA;XIq905?qV;_-=bXHu)LCiEeXF&63Ouc#9^_WEen4l*HR z?ugJ}kP#e?(r7LIdHQytBAui_D)NT?8?wVbNzeD77y76Z!88=(j;8s)Jg49>cGEZE z@wW3X&uRnsfOgO02qmrVwIM^Fv7X7zAZoHomvvBWeuWK*iuxaqgdPt>r@PeezlNzZ zzrvb5xaNHuB_K#CER_?zcwzY;*Z+?5KThC(zRU-ze&%wc>TNz(2Q>dkFZ?x<%FvHy zk-5)k9M1+ohOq&KdHb}rJK$z=jQGwb| zL3*@WdbGtY_KekZ=mzOf{<;FS(A*|u6!En6?UmeCQmwB`sCyO9Ihrmg{b8cN%b(Hx z&6GJVb4zlQ0nz{x;w2t2Ln06OSJVH*s7PIAR2UD-zmgjforc058`2XPplGcpsNl%HgiC&z6y<0c`R+S<3(0o%UKeJYTE z03AR0r}%?m|4}UA>%!YHfmQgP5+s$UavN!np;8HdAWx;}X9eV3_?W7l*2OW-|Cp!p zBYu-P26x3Ls2TY-A`)bx!_bw+z-?V95C-;nw}7M@M4@l?J!!X@u0W$^n1wDL<9YLN zoI18Ia){Rk8tcu=zg&?Gy2w*szDV$)K+^&l3&!aEGqV{0>mYdqhGwiZ7_^Bllaa*A ze~cBno+L|s0tP!4P(Qt52q(1Q$X=Gs#0YK3FnwYNi`9kQee{=bBq8I^iXJ@$b{>U{-E{SliTY@(~W1gN_!BCObAelkZ)Al1cTI&BRi#L#|F=3 zuCtU6FUxWSgOci0tcu6}A4{VU6i!B46&nOIPgYJwxZf;BSfkG*ojfNAK~ZgA4SEny z6)HKKkD#dZs^drgMNB`<9HYL}ei0K+ljY3cstt?V#dhd$oX)(_;SfO78`QzaEI!up zkpzos!8c)>>eMISA;%SG-S6cs6S7c(!Z)bVfib`_j>(P3<;FCoZdv%$Ku={vzDiO@ zZP8ROTsT^?QPCu;6~#BpyFQ?bq;YlXX6IN(>D3%Af*05t5DzMsy5XM27-?mQOO5VW zZCtZAHm}P(P(bPz`lC3v|AbFbeAI?amVBwl=G_2VJz2r25+Ve0H$&gm+U0oAlF()H zdKsRfuv1of3sJp%V?*bS%Wn?##y0Ikv`$@rExS;~ z0R)SLArz(lks|N_2ejoBWjA;>F=AppJ))k^IZivzw5(3X zc+Ed^@y!yTJ&=O()3gHH?2~uF70h%==95qhHUMiT=KW^E-hzP21Tkq{C^~JE2IVTc z#I77SO<+*@&Euv?!uB>WD4nkLVbac+jM`uZB{ti#@fUKE4riCydqZ;Dy}?a6+a+nx zh3&VFt_iUbs0D+U2-`(iF{S?ek6dB~2Fm~_P8&g_dY$n*=-c4oEl;yxQnHf1AtrAe z?z^A$7FkJ~dK1wUYtG+JG8bYcwgEe`Cqzf%057C{#xUbZLan1fZ{UG<`jy-ZsKT*n z$|R>cI*Y}QB|HBp(pFN1kGbOYnOco>DJ9s?I&r8%W8XG$s7;16{kbiLxi1uHROk`G z6KV-u(M4ir7S`Ju`fzLaAhs-A1w(^MZ_A1^E)L_Jp?xN;E^@!Cr}CGyobfYpVK|ca zsJY-Jag~&e$gID^0rhvpeqdq3sNKliY4>6QjD%Q1)d3azDYh@Rt$sj)4C#>NR?nKo zK0>)K5d%&2JV$9pFNtV9hx+d5lPu6A@6WH-WyZ~R!*v$c?&y*syvsx;d5_w3qL+Aw z5*6W87f23&_?+JzVao_=7Y` zLc1L_>gqvlEj>mOC;X9($mdB+gxP7~iBq0gzQlET@Z#JULF?(!-~XqVV^c;VT;&g6 zirZAN&t5WkG`sVxtt6TC<$w;`954D!G)1=C#WDe`iBR1RM}`P!ecEQ1fcmRLSBX2M zolxT8#0p7EC_%zDBnx+RVr++hvjj|Qf-~OCVyPqmbd_hV|4`*FYo++=^7);e%eB|8 zu;fJhTbw1CE(n^mPX*inbV7ULgbgn`i82B=VeJX1uVox05-=eh2n!7ntoQ>PZzK{< zB(%qu=UUibCoD(x0sv-19sFaSb5;JKrp#6O?~t@2GE(9m=Q*8`HS+G<1D+TCn=5v~ zy?FfFR{A$<4u+I=vNsbFbfbWDK|k7SrF$fF*xJ#g)7tB}!Ye+z77OJ*)!0j0D7&(* zk&R?|+o}wJg+g|9m_O04yU@0a)3b+o@<-0o{t!d-BZuLMyWyn0BO}9_>GaKXEj&M^ zJ8$o#J3!8e|B@knAkK)!dv5jRSCimI3z3aiej)Fw68@3y>R#HN+RB}jPW?t6WRp-~ z=5RrFMkYBUGhCeK-F5=_r^orHM}fJNbR`#WiLbW=lLLK$m`FBPjK00-)7(h*T{@IN zrrs1q(P^KBPd(^)WHsYV4*J8lEJK*v(Ho5#K@MP*_u+KcpOAat^5^P;1**=QcK3Vt?INP^2DNnpPsK^AgX&&n8+BZax2;C8Bw)gkImLs>{;~^*?7J-LSn6 zr<5pAp7ddukU9+E)&ZT@_wZ{e^_iIuw+?K76lzt09huovacN)Zx~KqBvdifwl2hj=^Ae+ekX9n6^Ago- z(n?(1d5MRAm{#JF&PxpbQCf*hJ1_CcPtr;Z?YxBRsk9Q8bzY(y8DLVD|2Ynd_!isz zY+8vcI)BH3%Cr*0IxlhW^C=|?$S0V#CMOYaInm|+sIs_UOix`ogUv zIxmrvz9z5kyu>w|(%x}R=OxDfKCQ%8IxjKszf(#SD641MsEz+a%H445wVl`Zc|}@@ zQJt5#eO*e40yUsVS_^KFNMLbF6K);dd3_C+zy~BtT-SMtAA>KH*{X&@PDQC!`FF-vpDHxEpT0 zvGe*q0WO?U;-=0^G)UH>cniXyA$udlj3t-cIb+CF+8G-JxBP3gQoFX>hiB?{Cp((C&VgsjBf zaO?EW>symvVn*jB{tkdS#+TAw&z5a(Ocf+msb^f-;o=z+A_0CI7N*5CE@4SRJ zy~KZZUgEcC5K>01wDS_{(n~zhd5O=TPk9IYUiwa1_v^H~H=ZwQ#f0GfTHiFz>YJUv z?X-l8jGxs7>cRB4-SpeExBWc*ZhiXQ&wh|56F&31l(OO0`JK0A&F|AnEa<$%Z_`UG z?7YP4snlw!vAFXR*Qb|Q z(s_x=|4wOhxb>mVOB|5cD)E&QZv9T@C7OGtlqgUWyQZB1&-6~Y8*cq>=k?|EPbtAJ zh+HH-7w1Z65Z6e(dFl(GouaIgxQ$ERsugR|weuujaIeo(Z0C>>e#7-HSKk|#Ir6wdT+eg8&2^IN{F|0J zrgA;R^#a%5xI8!G_scbx>xW#w<9d&)-vr*rwV3NyT!*-NPh94>nX82B2V6B=$GI+> zw9HY=72$fG>us)+T+h*mEAx0K*F#({aQ%(TGkKX~B3BvLb6jt6{SVg_{$-8@T+ed- zmFqZHHFflzLVviv%Jn0zKXZM+l`(ahBbV#zTtDI3!u1AM*J;ZfW4IpRdXnoeTrsW- zr!RB(xE|!PxPHa8lj{`M@EP=r>jzvlT<>!AoymK-LR`;tz0Gx!E1@jq1Nu_&m%zSe z&6l`n9h(%AiI&c)vDc2NyNlG)Pc(VZs#8-x`eli?nv&rS6PVhrFosBMlUB?#ctWd5 zQV?5+8&gYqp0_1`>!qD|?PMNF)7ecXGjm>6N}ji~Z=ZeYD{U&;r!M3dow)}CjSeZ?6F2a9(6u02AH$WgVpUaF_?r~9}IRO>Nl`e zZN|FQi+QB2aYT?rM0u!CfC|mq>m&` zA!OGv7d8m&(PB0kpdt2Jk7A)a7LXD;+u9fOl-Lo3oXFhKO`FlMO-ywXM|0tM z+Wat8hsC+`cbFfh(#OMMb*v3f6$`|{h;CEvt_oaPwi_VGO5%5GB*@~VxuNMBG8-hJ zqYakx@gUw^n2|~Rc;8^qOg;I$5qr(Yv`Ku<3}yvvMmt$f<4eGW+Iw9b}@1i+B13qv6=;7swO_uU0}Y>>+^tpi($KAl)a4pkMzekZ#+s zN$^^N#R_oaNCY=-7wN_rTM!EdGE43x`9S&uKn~5~|5xq;I70fvGn=y=;qt>eiowBz zVJ_j4NB|~n?;hM9Z}VjXP`Cw0*c(%S8$;=vkSJO`zJpZndI* zl;9JvEe1Q%QWQ`b!f)9KgVwVl4D@&pll2Z7gj44fzT%N`7E1xJO`r~9`d=)hsJ}I1 zX!xNVC^5*yMG|Kmf<*>(_0z`(Ijl0LWR&D&P)`;U$G?c!Is!6!?UykCmq!5O5e0?Y z5>i!u|1UTt9lF6&IZ!GeLv<|0poc{@n}z$!@6mHYp5=lb;D3_UhMH~P&!smB7bywf z!%KlhaRz%T-ei?(?@&$Po*?-P%UoLiDmREB_Ob~pT_$H1i6v*cLZyVAV3Yl`Xbg^| z4UuwuW)Djgm8hq1+@a&Oscb`>cOU{RcpOhLO(X~d4qc3W;ybzZ0MQ9ZQ2@8 zwSN`t+16$jyb01p=3^cfb3J&)#{w!>O0j63mi>GEyAZ;?*4U_j9r=v^&dbP3vB!ce z5+LR6BQzFBw|}$b^xkTb7zD`f9|*i8wQbeL|KOdxR+>|*=5>*6wNc<$n+1+liysLI zf9H=-)r}|Rl^l2E;HU}q09gNo*`ejtuqfklV}{b{0O)JirW{+8p}@NVwZjx>I!K2L z)LbAkR&&#K-|^6(aJkz7L{F1?UBPY13g(VR%H`4Gtndfjty!)U+cG`CcxssY_hjz7 zSUun><~a(AV%J*^or7rc(Am=D@>!!D*5c7t10b2&p*5->E;RsaZWQVXf{lDa8}$SH zc5;Wqnx(Shy_kofAUkS~ zxFs$9=$b~seEIgGyR1$WXw?OHnhYM9`R)~`qzMaqN|1)qFGf2EUR6_bq+f2{=*t|A z*6#cp$s29j%gAMwju$bnSH2O;5Fk``JD)B=BM5=$SUU|gSFJxX zMkqV~!z;u>2h|^jiTCATt4_+%`1VIQz*s1RQtJZ!u}l{ z?mtq~ih~KEJ%=Vn)AbK~G|%25l2gLKyQVSPz@4CBPqWq6tJpiZQA0B1^9PbG$zMM& z!;lV0$>xCdk{m2MABp3i)b|eysj8PA)v2$3j(4bjB3gLN!u`hI;Cnqd%#M^vcsM9t z(*XUr)LBd1`W+LT4t1rJ^EU_-_P=D+k~)O^eu8PRu)pp=@&jhsj2^-X>G!*K-0ZJ(M*5g=|mY&02)T}0b=9l;^i z%|yJ_%POF5d50A=Yedw)rYNAky;_6f;tPQ2aUCpxo+T`R_ETT>i}a}<+QHP%l4tUq zJ820*vWBAVF_xu?5IljST?i#?%*OE|1+{qS`-Yh2I9O5NrhM*+;hC&O&ImTqJ+hX1 z4X@z`U-QBX+B!16B@C_Ga{rzMeYG_)jUaYauRS-~L0Xcm(!V8k@ACNWo#G2shn|6j zi=){J675LgiJIMDSY98Ai_OEsp zs~O*b5Sjio6ChzS?<1aC1Feh7X9&Hg@(i1Hm2QyH`0Vhkt%mdMSs#g_FJK_5Omlty ztqX^kMpg5+&FV(|Ho_*$W2T0PYiihE<@CKOJ@Zr!m-4#DR-TviY`Ou`;g9L?{cC`a z)8)*4LMJ-t^xu9K@3cHOG;^QnInTE5`S10!DLv20PwTm~C!l<9Nzdi8?z!`S+w(mA zwvKx)r6Lo){zcwZ}Mfs#o&De2?H2< z1j>^7om9ousoz&d^B+t3p3JHPkj^#YG{n`*v>cR0=R_q{4Lhc;PxIi@n$ z&Y`7m^M(|VqER2{dV~n*s$yk>tykqGB2gAr4L>=&aI=-adU*cInloJp>FjwiuLo|O zb7G;*61FrJT1n~{1WmM#a?cg8^kg7BnJ!Co+MPu?4ig4GYDQRxs5K*ow4XM@=6iC4 z&G+O8>+eZU^6!!O2pgiK`N=?%*oZz;lZNdX5>zMin`^P)#zX_*l5!z*^^w9oFd%TbI$ze=JCs@$r8{Zss5L<+lk~+y6H;&SW#tzAg0V3o5SqbNQeNo9Gvj%yc?e5mqPPQ%#(m?_zcDlBxP zuo04fcu)N8;)PSI9+tNg2RC~vIsf=TOSHFPoo}fZ6>>;5dRb{CLAKNV(&5bn`-L=G z*zRJDqFyLgo-B0mdUu*&ZK*4&mPF?%-&rxXxAw+I zQdf*#FT`7_5hu9f=n_=BEm|o;*kHJg)2R9bs{1f}a!lm%l2-h1dPWDoZp#}u;+Q0B zz6M14G8xfCR7gml9T-G>}5KQu0L=}Ob2Px3z<2^TYzj2DQl^2N< zRkwG%(GMLn`XMLk66EXk;M!!v9#hJ!Np`3BcAI@|LGn6FEZ4wB_G9>lZ)V9t2=&Mq&0V|AB(d9 zQQh3Ae+O7Iy*hMr-#bKvkU+cYa_oDeEt2?Ab?8s2cv8p2C)6SXu$O0=E`^GqqLB98 z|14e5UQ)O~QQA|PBh3u8Kr-`NmY09w2xd#f*=uMTA|Vl&^IK^m_d-{o)xsl5yP*w{ zYH+7RfeZHwCvjA&LQ{cb2VO-)rHUUJp)&l;Yz2}t^Z=@1>n^wYbh4Cd{h$m3c!s1V8mH&9c=|{qowVqY7yP zV#raPAw?-Ai=Ndzm}wEp8*gmC4);%|JiZMTgh$E0#VE1x3)+-|g#EImLQ` z+|eI($q#Xl#@q_$`;&c4Kbox6!2R|L}wXy93v-H8}dqk5QJ^|svXD4G{gGdBD)rfXus z9*Q@LjoJp#FLlku-riisDBNbP)C>$VW={JKu_Wx3i@0uDA5lX~>ZN8X*5FUtg59JY;_^0ydmLxMUn=y9*ocKNcdKUcmi6Z=p* zt=^QwLW;-h3qB`&dZ-o3-@4O}FDi<}zjR6S!*i>#&Luyr_eq%n3trKmFt{TS1z1@?;Uw5N;(E{r*<#Gh$G84S#gHsVn+c>)La_ zVNhtCwTOePgH|Ltp{;GtZP9Hs{W9D-UbkDgqe6G5ut8}hX-F)mk%tMgV-j9*1;L24C} z77JBN2Gy+vYHdRgN25gS2O28}kiHESgo+oaC35pJZpv#2#Ohc+?jlbG;2`p&z%uk> zXY`*l&!MWD8TI@ zN0?gwt}H#)oy2NzG?l^Cq13}^oXT&)^Phwd()jWfH((7#kEhiwvf~d9_t(pM6j#1# zu@(F}e1o(iHnKp?x|;AP!>n7q=p4~kjD|%XiRK88yy0&OhlpCozlYsaoSX~wKEG%)uS;MDrXA5?L})~<+XN+S+QA!(3e>mi*bPZxV?nuD`R*hH zMX!IaAwgoV6B;D3=GC)56@HA|(BHD|5(jS>hF09a1JPSu>ZJ?eCyTt+t%I>hX?}8i z3O|V-b*42})PuQ_d$0U-0gMFfs9HXXM5X!7vQT=EeHfoPNt8QqcN(WC=X#vznTQH0 z)W)Vass77&O~RM^*|4<$Kc43Ep{+s#zJ^}#G^_CM+=XtNF<+ktm!mPGhdcz5C zweo9Yqc>@H=H?xYetC5`ma(||e`l;L+}m`Q^{$8+p{j+0+7>smEKdtRz125(lc-oe zKI8I}%J!ho-w+o};N0@-)rV0LOb(K+cU9ru$XH3KYuY%)cidAs7onu$K#(jSb+*L* z0~#&qdg)7OqIuF{1t-|Yt9exHPm=JXf7`QRKc#3EdxxpLySOP}l^{|d9KH_$TI3mA z{mb05i^Ux4ydYLK7Jhv+wa+Pvl?@YNXDD)fEVNNeJp#hO-*aJ3a(TC*(zc1^&)-R* z(#a*D*XuNa__zh)gCKkw;RHT?+&%8#pn?KPKA=t8VM63sgjvOQahjz#!sDHi1q|T` zhXdR0E25s=$C_r2pLh~&jARwEZ))Z*DFy2w9too_yD2oncaJ-Ch3{5x=n}hDwq!lV zGzlBhG$x%-o(()=CyHC$<|0MQ4 zA&@*TPI1XFn@p7(KkE*HV2?&%)Fu!ZDU2pM%bMUahm)?jxh~^M&Sso{(DTV`+VM;X zCJ}x(8~fH^JDxE-LvW}z?&!SthXZPTPo~#|8^JnoOiqFy$pLT=vri;s=mEkFxwA;$ zrCb9bS8x}_UXiqBK_6f?2AkAYU9CdZWKt>{O*Q$g3f-iehNz!Ly0K$Z9Ff=*{oBT- zcuNAwuwUP3&#-^-y!g6iV8vvX5!-}S)-mrkb>>N2l(aM-nTAZ?93fCK5qy@o%-BTcdsp6` z6`3|zWMjQXSUv3|4e3S70ysB8*ZWx@ds^l|MZ)Z~T60NB+lHSJ@xt@sS+l)s=_9`t zT3!%Pi)&=qB&qQ$GHi3*|C`!46R8fg)oyhK^=Xzo^dRO28~t$uf`dscoBim&Vg$2F zraWH!NrptX5`s{y-pNfT2vj6FW;K7UGtB}I5>{K%O!q14;W+ouF<C=9N#z|iN8Ik_1(f@_c(d42tp;yB- zE|bKfP1d~iS}1D)jgmlUI)8{b<}B^DxV2bGXW9wRQ`rBuwIo=nwW$> zKBK1pfaTmuCRiC8J+AWVgs<;d%bYV_nFrC^4y_2k`2CE8qD%O zZ88OhZelmRJV0mG%e8cjPvLfppF|I;19ujv7e=yObYxKhA!-%$D+}YSfN8r-VpIo$ zZxi{}1h`Gd0(mMn(hu_A>Wn12MF7>&lRYm^%!$q(rl&iivjH;S;ql*d1eal)(}NLE zzx_9vae14l-&%C8k-;VzhNWXPdtRK7qbrc5GI<4(DOg91HGLp~_=8S%DHY{Q`Bn~;-tqoC>aa#$3`e%3z2#drYgi^J}0oVo~iva({3cey(GP zGi$hx)jePihIRvc zdB*>uZO*g1YN6}<+^npeCP=sTFd`dElmljE*OYj_75dCDltdSyGp0ZR#DW3$&$n%z z31mz+KMum;A&>59=5a=krVNwZr-OkLwQ!ZWvEVD1qfV2sf(hTE-Vr})W}QS`JG+}& z*U%+{iU&TcReLr{MyyD>ndK@%tfW*)dpjGhOlhBCugkCZkz zme#QuvZ7&lnk{`o8v1G&Dc`1y4AV|(xxD_8@jtTug3Ma>G1_v&!$C#HCvp(Dpm-`& zFl+W9m?B_&%27`#{v)}hR3e@a+Qfo|$-9zI!5b-1(x&ucEVj?0cKx1^#G-}fEwN~i z(7^z0)|C80Or-9sRHwGorsUSCUTdHPA1(lgwmNKCFikYdm+aXOtB5wNHrBldFQ!yc2Zr`8Su2HJr&@6DghN#H5-GB-r!>@wmPfPTubUZ)I+A4`AqiS6{`Jjp7=Gd$kB!1|j(yOr zE0$sY!G<&{ zv(eoOfT5th-ASgI@!@R>Ik#V8o6?AbJ1O{Du)oovztl#C1F{^$@gjc7flmQh#ww<( z&>IGbCp(`GRs9r1)Pe~{$)$J>q^S7HAO(9dn5p6E$kcGE>^Ja#Ly%6FCP=4-B3=@N zj)HlFH(_WE{@3#tDetfD>MH3FZk@^#;;jL-zwot~#g+OsmDM+ z4bWe;pfF0lhUaLWSEw;+77RW6fh zMZR0q?hB5NdIMn1>Fyh(c2sZacP6F)@)U~;d==o2A!c{O@l%DcRaQfUI0_fCRs%P* z{qWqqf=+?zr01@$M_#8+#)>L*>#<(FBtW-D2tYo_?9mGs2(Ng5NhLIYWFYa)!zMv8 z@D_2!Yfx2F^UAPZWAfiN44!Sk=fC{`*2*G{oy-(=uUX+>3T6?{x>uIF zi%7=KDR-|T_~~1T$G6^&e~|+T|5Bx5|5qZU1&Z@@3S0zjg> zok}mc3?MtBuRVZ^Q8zkI7STgEd4PlMG+qv>La3WOdBvVCZ72c(jbhrDB2*>nsKgdYQ8sE;{S7}&7h9^ZWFz7N`^G15SM_gH^EV*30u<)= z17BGeBgX9^Z<$Kk&2s`cHc zj%yP56N>C6+R#sXm8QWaa(|jZ!iC(Qwi~Am@-0j0EjSfOfLmU`y#==W%`X2&IL%^c zr#ku7+63!c31}M{5E@nl=XR?4ECHcqKTG)^D7@oZI<)l^!%+lBw5Tt%*q&S(8i7-? zX*lNXC`Qif0TBwPaG)Yb@BU1>)YiMDE@cgqn#mg3@8#2}GuyP3nYHR-3Z{-0q3_AN zkYbT@(MJ855N&pWx{-ozNHZb@m7&$TWkFmIi`j65KIlXs1Gb9&M#b=|r}U zj_1g!2QSE_zYsN^T3Bk^i|aQxXQm9ZJdY1@fAfwjV&UgQk<;iQjxcQS4MG?n;!3@9 zoucEkMB2B(%_m39CL@0*Zi7QSF))#BqtSX8FT6fb-%HmEH6Yzqm&Kkke29Fc1nEKSLo*{Nb-X^bf#(mcRTKF)e&+Lm&Oa z2R-!<>*1EqxBkg7DtP+8F_O(WPdShMUXSy06t}s4qG~WI_R0V$K zl<}d;_&{0&-}=D#Fbn$={v~L1XNPg?&&G$zP$c-7Azk$kn}9FHzYOlKe^~C&Kja&w zwsg^d`Kxj3b>kIx8qd@k^;{3-j4QmDs(-l2seh=s!D1QstEHCVxW?m}gewczk8s_C z>u0$9xR&604A&}Lzs2=?T(98Tf@>$PGF%67RpL5<>kC}p;<|vVEm)xwu5P%JaNU4w zC@vSSn{jz?<=~o)D-YLvTo2<4;97}m4X*XLUc^<5>o2%=;o64_{717Jk^sr%#m8T; zIOLO98|2@Mv`*V_sAQX+S~80`l+GC)I3A&#^232&uk=8eJKfMF4A1|&%-oAZ<%YKZNRmmd5M%{)V&E_)!xb$4A8rGL=6z=MgF`t1kb{q*9oQW zKS9WW%7Xxp10v^nL(p`Xm0H5aZipI$e2|AFJfK3UUh(P49u{c_4+|TqzmxnzJuJfd zc}0hCU5yB>BqR_TGB1Sp*8RHG8`qCdM3cwh` zQ8f@Di{l;3KcMy<6mRXN)CCSsxdXP}L>swIV$u>IbRf|O_L}0twszRxSVdueFWUbj zc^!&9hGK!AZ;nxGA9OWvOr;o{f^m&Fkkbt=m1$Ld%bgGXFH-Ai?hQG}N4@~9L3*|n z@xwfLA-jv&+cJmTEw?1Qiw$?n4PM9@94FT;K>MITZG<8LAGl|AAGlN0C)gzr_2em* z0j0=I*8>k=*yJ;`?I)(s;(S|yrPlU55!ozNj%a24N1K&ZepkWxqK0;0jy`fugaauW zUgXs{d6pN8NRb%kH=N9h5M2A_Fw_*N>*a4-F#fS>TcGYLe`3M-<&D><<|bmVM;qwR zv4Mtpe+&GwiqP!j(j0W%n>9^;5lPv_R%DfY5Lz&utAFwt1a1@CYTeCl)^sUu0hPo5 zLEf75vvDV)^t0aU4YApXsAK)?2Yb(G3CHVQE9f7m?~PjT5)J(<@$&VvI|&Y78a|rR z&z95M8eQowp`Vqa@6GCGUu8utZ_*yr3iLU0PZWLr6a976v(3_H4!!Mi=`*BP3+Qve z+X#JHzCLym`_fJFAG^x%`Zew9R#;!G;(k;8Zmqw+;9H8 zPeXZTs;^gceWA6@)u&ymz65dLqp0@1cB%THSN1bh%OtTnxn4tCd4KGi-D>>tAtf-m zwET^uw_PrO#0+Qwe>`w&1O5oqw8H$keO45Gl8pHyH)3RyZ?XO0FHbc~pU-Fh8}zwm zSPSTL+muG=W8SY~F9vl9;g!HQI;T#D>-`q;Udi9A%-lfMmGd~SAcc4hDNEt=ikqmx z)9JioN)mE??dDDD0L}VT3(hOl{LKUc2EFpRHDSu!4fbg4$YTGGBa|T}SDshQ+<=$k z)qzsGwlHb?05lCCN;g-iyGoB+V=HiM5gPVu3fvt_Z-|^++(>&ud2)eJ2Ao_h?1z(! z;n2ExlSs!G4)Ni*7SQ#~Ee2iniP_ZrWcnf!hwN8SdErbB(-k%x#V`*wX}vl+1HHzh z(t5S9U%7iTkw18bC=DR9c_YL2fcr0D4}gvhz|CCv)2t>!Z)Sr4&SIM~2+XF}My9D@ z!`k3~hO7ZIH-UO9G6p1n0Ai6TE42vfxqIU@M2ZZfxR8_(b`%TygQ#N7EiIto>yr!` zO4}BZkoC)!>jyUR%BYBb5c&q)G}iB-U7A?GP4a%w(J1-scoO9=xqjqNt|ykG?HLKJ zWY1U*cTU-mM(r8#WY4%8O=;4e!N!aPaogXb`ZqXSZ6o?V88yVaQyTWqM6ZiSxW3fG z*yQ$vFu2@zSFL1 zVtfNNE$5#Yalfhlx4$;kf9lFssK1BkXsUmVM8$|KZL}(C5Ek-&+I+_)E+Ow(srAZDKyOiav024n$+?oF}~WI68A_ed%a+lpt=| zdBPA7pxOQExQu9-i}?t`Hn4ARoz*jJ-(FTT0CvfUJ&nw_5?6}wJ`{G@#A2lc$G}WM z-j6%`(W%|K1p1e~Jn4w0cjSmh2c^=qk$6IUaXYVdP$i}(!S!Lcv|F)4F@{#T-~c=Y zTU#NSYgX}U7oA+2tTeeQzf|{PglciK1|qXhBc0kKm4HRnsC}>pE9|@J(#ZeR05iH7 zp8;mX4Z4#W#1E_dB(iYAU4naOb#0~AID)YL0Og8$sA=TBMrI}UW20pn7MmLURvx^7 zf9Z$NqW)0sh2>x0A}}#?0Pd5AU|=WxYw<1C_$zz!A3+JP_~35cxMY6LKQ;A?^o|Ma zFK7ye-{{XZ;nCh$RoZ`yDdq{FGBnz#qzHt=hXR$ zj+;+u@j>c_w#HY2+KJk4&kAAvFAfY>JkGn`9LI5NE#yqwa@y8d1Rn z#P`0+&tTlthk#aj47h3VQ-;>bPReRJHmQ#(!9-L8|D!@=hXZI9@f5i&ZzVs~>P}&N zD*mqa)`BOAbZ}%A%8er}S}-1uDeIE(FYI>ohn&3+9RC1OJye4_IbL00lQDxfbt^qx z9UJ@2Dvs@eb|0(47l~uon(%2S0G)ua2kM45bckes_I)DFJ`~Q!aF^eM9^^f^`k9zK z`x>BR^X-LB#QT=BCzundc-__hEZB& zkwCyrQZ@vM8y&%AfPYuB3zN^QJdahLv8ACl$)&l|v^5qyLmo=n8k(=u)HO7DLkp~- z1xcX=_RvtTBt;g?thN~>NHxzY_|UtEy)U3*b}Q5U&mO@KuKbk?urVSSbJ_ep)O<9X z+f?3;dP>dZE>um$yLg8Hd27odnv~pd==B-rSHplGbE!&F zLW>4SX=Ioh5<-jUP)mGPzvgiLm!nU`iJpTZ`p7Q`)!xv@f8V|dec^KIZ!7)^w;rM( z`4c(J^-pNJ{#LLD+%WJlf^^htu|Gj69h1~Hbv~ejrHpf#mH@+_ zpym20C$)NwQPMXGdSGy+0*TnB{RYdXoa~!gMDgO}9;)eWwIsDR2sL7G`enPPF z20vceRC_O{{&&pPqaq;sp6IEBJ>G;Y-<0|)~LU`m}08`IdlDoV_JbeZAA68 zk@k-_*T0}O>c2*)ruskmhlxH{wnqJZM6#*=rRMryw=_YY|MGtNX`sSjJKoCs>C^cj z-M_b=Zch#RZ|tXwKWO28`myQ%o&EGTLrlul|8Muxqk1;EpI-9b|K)zV_QH^VcRwAR zKniuM@279;(DMECsh9u5{q&!lm$#q(bvpI={{#E!guuVEpFW(1=C@=&eL4E{72=WJ zk@e;vVZ$5yfi~Y`s{usJ|0o{CE_#~k|Ao2!-=A-V`a6if_KLLMVXl8dYt(NIT&DVeWv+i$T`SOM zfcOY*K?Z#Wo9n;3srpUlEeWl3{us9igkwWg)8~&1ivFADEl0*+_DAe3|B3(7C>ZOT zvA4{jw_UEiWxmn^d&_|vOe%t5Z)pX4)D~B((Wg6thnt~KCcW))>GMrX=<{m-M(8ul zbl8M5rhK5g9D~U(^)QYJD6STm>^Lnbb036LaHTd8;cq}I(y|W%cKA@BGyzz#p_D8@ z1iYr`ps#T-z+0+Es8<;n%AE;3)88>SN8KyBzj85D-Ba}(f`Y(q#NI3dblVFj-5fDs zaW{BN9Fm|QW_XndDoFM9vJ32T%jesi;(-pw7=YiGujV8H${PT0n_|>mJ^(RaP=Nvx zi@&g|_r{I$_(%unNbl%Ge0@Gl$CUu}n4xy8?#c*>0Qc!bzuL~0*20wRO9$dCVd23b zzX`eAb`eY_j+o%SGF|-kwi<>pM)rr9b~3gjWh2N%NA>F|;)#+r`ogf=L>al{Nn}WX zd=i))Ts(5b*NdZ|T*)Gg{t?m*fbU(fzaOK$iz0^be$?lJ5XwXBSog^taTUQzI5`?ybc^FEQ?9*RA zBI^Nm!IP#O&l9;lXtw@Go z0P;HC$gokyFvU}Xr~-;YAe0(yAyA%n&^=_zi_fE62zht>_}Q4eTKq%lZtRp_5@=U( zWB%+L)DYMv4o~1tgSc-l>Dhy%j5)xsNk^+@7PI@)XT%VI{rK#nTH4WNJg%__Qn0cJ0t>F1~NeTK=pRfdNC||x9PXqQ}moK|7C0}$rTSmE} zz_nQo@l1&*m%uZX{D^q9I^dbU_%m8@>%fnV%3;XrFp%>YjK^meMQ|)Y0xJE_qiJO+#B=iC>DVm04XcrI;Bvx;DI!uc;wG zm9HUJk!3it2`yEE!|+F0NA4Xu!ih#+2+Gz&_{CB9H^ix{e2ks?4mq-xD(udn-I1WO z6N$2p-5G**lmS{%>9tg;t8PJ3-f%QEuVe-UX8#u;FeU1ECs0`B*Q@LY0m+g0y|Ru@ z>C1vc@UKO^xell2bOc@&97;cw1ykuy@STSys{C$MqgO`XMamL>vt}(-ht*LXkVD=6 z6f>zvqgsnJs;Wq%ngGh@KCQ6h1*JE=3G0G6YaXSE08VzGCPCd(ZlS|+-GvfWnd$+PK;Uo%mB83i2>Ad9xWqq4`8 zTr&V}!!8@s6@Em%$15J-D#(|Es`wUTuY0plMi4ACu6@c@g53HGFFfw|RE-*d7bxuX zf`=4#P0}P+vFj4tp2&+xoVpKSQ|v|LV$X>MiE{zBXTbDn#K2T;rT6_;y(7h}u zE8VK;TF{C&BbT_Ce;?70zES6oQRl<-+lP{74tHga7OX@gf&ao4&}XXP z8LFVdvF&|Or94Pf!}~0*17$(#k|jbydLu|!6iq_CqfEl433kPxMhVuCTn3?d)=qTo zBuU{Y{1aNFvW!q!0#t>NYE!zpN%~5{%4}m2Kvfc%QjZcrDQ6(ujo>mvVeYpv4{l_y<>O5uZP|l z+DZgK=swUFa>X312`aO+LMYM`vt89Atd)e92V?&uH$URzU%)B9#NR+c z?_?mh4n{Uz)1D`#{+eBX&m%WqlprlfT(caFte>HW*JnHHBgTdY;B95YNe{P!t7#yB zd7$t2#@%Zm9uX*XWUuoSo|g)UBlsllAR84nJllDsu<$||lzSel{|0@}WApb0@E7fa z?0RB^!$+f6VXV2BC74XK19DOxgwt@xyC`~ai0^5v#ZX#0&z4$gBykmQ&Zc{F#HsyJ zo6RQHY3~29R@TS5-2zW#^aT71r4qndqr4CV$jyX|eB#l!hOh%4d8`3W z7oRovejq9WMfd_X{gnPeh2ke39+H3%_2ZlYqO!3J5Ru6s^`$^fN`vueh|qsI`tf5w zi5d?;@S62CCWL{brH{woRsf;D(jPS*r9_o_S<@OB54Ro8yC8kJ`w$9HCJ$f?o}`Z} zkS$>zp!|@E(4irDf*)AY@m{DdV))JoErm|YL*5l`hfL>IkD~ok5-clbI?n8FkUl`>`hJ4*p+OL%GZ%`l+FXV|2>cy)(zZY&Xlpp|D9sT%3i$(2&c)lqOuzi%TR`o}0tt`K{Q zOD$Tu#KLoySHJetrK4hRXgMa};FSW-SM(W}W# z1%|HkEX+Dqei;aLG&GRNerz1+jy&wJ6P$(aG>ZLP{nr_za5YSiIpWS$pA8Gwt*)aDSoGki+(*ng43Dviqdf-Voj&?^$7-Gx zgSF%q3>LpudfqoZWcOoeXvpruU!Bt&g=6p~@QBUgC>)AUjq~aZv{21J+LlAIaIm7kyi@Pv3}$C6z?sLVZ&)5~ss#@Rlr$i8&_LXB*RoK^~Dj z)~V~>*zCOUcNF9up}L0Hp7=Y3=-fTTQ4sJlXAgaK@&L))rBznR_24BS_48zy=FNe_ zxUZAOtm74Fle$@|?Rw0Hcr+cfK12%sEM~kE@*04ppWBM$C@DA zRIsL>gz|>W1#Te&X~a+804OAT`76AeCo{}F0GpHeWq!g?Y8VisX4)LvDgx*F`w|1^ zZU6#ygAj~N8zce};02D8B_TfVV+fPHwIL`GDVE>HP*90odi;}<``maj^aaAEj1TNd z(CmLv?GThSh13{rJ}e2h;v+zbC#V$?k=Q@73E<`TRelzgll>9-1_~asUFYwB7?iD( zP)D^5J>N;6g4q5nMU%>yDltuEE}&+rrA>)q&OWc}FVa#tX-WIC`~P1X<7pdnqtT&u``{%|Ok5t=b>1xsz$ z$^JC{VxYN-0W-q+TxpKexQdaeB(Nt@7NtrWFRo66_@T|R9Abq{9WcznM&z7S#=9`s zNyy?--A;bhmjzfLsF*0u9)VwIpJx2>`0XQ*%7$j5IznAe+mmws7e8P}M}=ggB#^R9 zEHA;OlQ7if3_mYF-GyiI6L6yoFl$Zf+y9w1{v31xEeYeGOmx(w0lvA zv#N8;p+2$fK;o@OgI(;5orm5{yQ1dkw5cX zbQI=7Q*f2}fsJ+2<*t`ges>~z2!LCbI*P4&m{)Cwmk?Rr#a1 zf*t`gThe85CrKB!fJ~I~*2U_wBlvp)o8ftfG%QjkMa=S76zn8njg@;J))Lhn4*{;G z!9q-`wzxic6jVk;BuPkd!_$!Vete@|HzTC_Q-+iq8lPX`eb3|$AmZ( zPO58iX_wJma(R~m0g5Yeuw?5H%Wb3uqIoOVeqCHaR(-Y62@bd!HzWb26n6xl0>8-k zED2v$^%zE8{va7x{;Zl^H!!N^ighWvw?jMcP;I64!R!j@R&ic}76CSJve zfdi1=kDd_oWz|(}@J&ugWv3l&hBTl*~Q$8tK zL17)+QK(S=>Wp|yOc~E{iH=sgpj+N*+{|0m6YG>SaV=JP+@w0Jf0BKXb%-;s9!AJ5 zl!DKiQ3|eJN9zj>J=PbMqfZrkai;66f4R!bICYr~ZIrn)9fN}m+BPK}r^!xXdGsjc zH*p7+i211@2lB_z?_$|e1b*V}=fiK`v>tX1THWY=Xf)nVJko5s_$>yrvh)80TxJeK_ob zx$2YzWF1G^Cf-Kf38uo{>AiFO4e4ko^T!_^i6JbN3v|r?v{%~b8a)b(Gwd8lMhFaZ z93hLjD61zUoGv`Oqm6Lt3>zY-{dUam6%}U=AvvVF#0hJ6;X#ah;XA%WZfV}bXofsB zT1BTuhj5@tTyPU*#SMH`S5Kehc-0IFcpcNVp=gqKApmR8M3_>%Xry7@irBVvBh(MC zL<}bpBNW^&=2~*eZ-P8IaAtR=m$X4S3h5{=$1=S|1oRU*~xrCj7!S7u|$faD7J2!T2Ob(22)5R`WgJ{nN0`U26dVSkf#8#~5 zq_SaI(euAINZLs`qfD76!!|qYf9S=?%54)#%W1P7onVsftM&4CUiddNZerHJMve3C zH$24RWS-{ZH>s_*U^dVOOS@-Kv_!Dwr@jDejhgtPVU=86EJn4`sAD35x~?nu6YTL!aB$k9RD}m zcw&FhM31zI&a;(sEj>%-TKbmL?gaVY({N@melB1}YsBHFjQu63hP0eW-0Nk6UF+KP`&E#1E<(?{u=8B^t2Q@dKPU~#X#S|+{1*Z&7B^? zuNNqb9?q?yx!k-CnoB-#urBC2OW_?Px_KK8`?-=&w$fv|;aQM;;|tImgs4aQL`_jY^LsG-nrH+ zI6>f~fh_&vpFa@%qAyndGOnr$3YAJpPItkeXGb=L&E{(AVC?% ztMxRLBeO&;*&jNS)=T}j+rS7~Iz|@w>KHLB0*xCaE-`4CvUHi`244BUCqd1|i11o2 z+o!kgh1F=CpNtW)wV1r>FxZKXL7j?^O0x7mek6W*uql=VH=AA>YUZUW^iq#~Vys&y z3)0>w9=j{Q))8zA#R9^Pskx~kHNSf@OiiB+S`grUFU+2$*z~-N#$gv|$jEzgT!_!XNKhkvpCIbJn8&9pxcu)$PQrQ{sW_CYQ4?=rJJ2QcKF* zui^O(iuOy=y@1s5BJsi$8*eZ6DW28XUI45N&U>Csu8er7ja%WOk+&9hp}fj$C=5q| zh)aBzy)pK^GEP1eqqb2eTLGydGaIS!V3~)?)iT9X2&Wt*{agL*QcLMqZCncz79`~D z4%g>>&Tw0y3f-#-7dQbaFoytu4rZ%|bb_s4Gyf zTnBtse2k%$m*H}&6V<)4WfoES^$4V&dXV}G*8MHf7`|(8#oM)DNpf~^G7yK)BY#nw z(mG7uX*eVha|Ti-Mk~&G3iV8k*;{y?6%$lRk!!E7r>?7^r>;%z(H0Y{3Tp=EHL0KAR#*0aQcTcIZ~9~LHRzs(YcWIB7;B zXn$bExvhUK+@2RA$#wPv?LnmCMicnx$K$8Z$Hz!N*0;V{YPs>0ygtF-u(Bb~2U#yB zGq>-Wvl&*hm-rI$I`$ZhQLnr_0CX++$6YEdKmxhNi-_z5H)l|_{7(=Z(P zktiNnkQ2}T9rt=3?)zR~SAX28Zp%e9>!aoFN|rGdIxclNDON8yg(LTej!{D3+ zE9;Oj8S!4oBXOVuA4S3`c6T7dZY{TfRCrB4G7hh!k9q@c^bKL!($+TsO80eTjH>-Bojl)O@>Y27NpzR`0n)Ba!rMu~Rk@t?k&bo!2$mPEW0xeL9^`6mfW*ecI)z zbOblksha;JI7#Xfs#^q0zz&YpC4DN2JfW(Sgkm$(Sq}9L{loDivO;GJ!-fH7yrnNW z$XW?6@(f1ODUK=67)j5SW#n0SDY4Tg?_o>?IOP`P+b#YF)X|!|LhY{3x8+Sl8k*32 zI}*$xpWVrKAx{-Pz`rDE6Rpe*z4s z7zE2;!z9M$L`B^6g!m+*ZO7zY*n)efVTXm#njEnlEojQlq65{eIc+R24ciw#9j9jU zoKF1p574ZPRNzqH?Oss<|CqDx3$)VsiKXB@LjTcX1*JZgc4fw%u^VN0BMsO`)p#zr zY|`mYAM3MaTuFR`?3oZElsJ^~dPZ-7*uf;zNO+y>yH3l5f7W%K^yHezIe(`5N^D_o zzateBs@EsqQsOzawqQwuMa_;^JI+?GL@w_OzK-w|_lj|AotEnMv=0=i&!O!pdV@Nn zSL75E=@!;7>@?Ap8eOuBQxAssB=Rh1zCy=133vo4;OsD0A}<~mz8?j7d$1dilXVVE zQj6>pZkv)~WDPeD0Oo_54Ko*zw1vjAiZR)+;J?wnhR z!7t+Sc|1!jK2>}b4mb%D)HQve@MnMYn#Ou*it}xzDgBf(<0y+Z(P- zZCw-Ned93Eake^C&9#+&ab>}$F>u_T24=z}e_%BT5H1wSryiJV5%2CF zE+xW2uejy`Ln4sBtr1Gc0dYovAH-6Q81)P3NXl!uzJBXlX3c|@>jGAOgs_QgMoFur zf4+)M5U=fxit~bT?Hh6e%lUk=NahfddE4`3N~Pezep0DW9bQNl5P*so?~zx4d~AhhccY-&@AaO?9#hbgnq~Qaxib>yv6n3_Y2V z$%O3KHjx~~E@%7$HRkwd@PZ7bj5v3)XJTHX;%(a#tZ-aAv5bu~*to@-A z95`_zb1)0PWx+X<+{zD%4LBr*Z>CK;OjYMZy!)=_aOi8KVm+>@mAtwiTMG`s&JMNu zh|-39(cFii*(npOm{d7p&QizvMg{IjgahRu#i3!w&$bRIYh*~O=j7XkkFl`LTaBBP*h-oXmEd-i6;G#jgc68) z%Y#Yy4hDgvNI(4({C5kF!-q?qjx@}O%fd$--3AZgc8rG2*w+2{6f9BqY1V0un-55? z50oY;+78@M&ml5O32wnh$~;vACoPcumMcdSY|ZSET#bK79_>=|M!K=$Z^1td2V1a{ zUSWYpPeH?*YLMQVraz zPtU^-j?QV$Zyig51^A3KTWLvJuNx|lIq|lkI_G=2(2ro zM}N((Kg&2i0a`tPn(=FvrcrguniBc~fu7V0XPhODV1H;-XaYUM0cL0sHDeOKQ!|`e za05O@nz8+%t1JaOH{v&o?|x0An<9P-(x+=gcVsDRhcBunwk&D{{BUBTK|??kw^5^J zNQNj2a%D0UM<t+LfQW*nV=XHb_SJEj(QAES&*7yfn`+>#L=t; znzdXB5}63r`F-Nqb@Y&ieb+aRM-OA{li9_1`ztTMd}A{EjGnFHF9a_ripGE%_V3eyc4? zfbmvPa#TcDaBWo|Vnr+bNM$joCmdvA zkt{yVM8YSflZ1?xbVMW+3k4Is;0v@zj(u606)7^E5b2?X2`s&j{|?fd2UU}BZ5-5R z@~mM#kvv1*Gml{e^;o@M(qM8s<*=bC+@!N#8Lz`H#vsalYwTVGw$OZ6_n;{;3LR$1 z=9-%1xy&a0fcnrRRoe~%f_e36C4zk*^dnxmBTpKOkfeoqCdzqWOhl?jpTS05qoV7o z`OK(`MglQA^q<}}L#+QBGN0!s)wrK5S8@qZVj82-4I3_o^cVSbnS{lF8ZI8cCaT-% z;if_a^g5G~5DQEE1~fNs~0p?#hVu|!dGw4#$%8uw9kIWZ`02Y z26Bh-PgI|IICai~ZfR2y=ePVhaF%S+_ep3{B*^a7PYvoxg%bLJuKz<9??`$+>=3Nu zcUpFWmIp08G`19f9gi(>;@@orr>`!s;CN|6VgUkLV$dOa$^e`7+z0%1~;*=F3djXnqfQa5rD(fv7USX;GP{ zqspvpQJJ!+GUVaWeA`}s!Q7vxTU6%bs4~yAsLbCto8R+ni^|0P(OhO-i^>d*Dzm;t zWoAW{d9FoeezeNmwhb*R6Nkiek+tM^Eh;lKs?6_ORHoOH=J!0`qB1?6F_+ocqB5CL zWnO4enF;I6@A*TE$~+KN=EWA3c{-}hrWTbciz@R{i^`meD)VxS%Jf=qrok&MDl<8% z%;pxA8UCF4J%oMHygc|cO7_0mqB5O+XMWFXEh;nlMRS?r7L{2PRfbSun(xo=qsqMA zqA~|eWpYH?u&ABDH6~$^BNj&AJZZYQ?A+ECy)ErkGbOgQsLcMTGH zGQK~V%aC_d^Ax}9O>-H7!fC#Y{hyICIb!`yQ4}8^b@RRGn}da$2d++z0?Pzki*UV+>tkG3ItwhB zxE{v!Dy~m)b?uDuxR&609oOf$dR&S6a6O7^8!j9&TY6npV3~$%Ij%QxeTAz}e1Rng z*9u&3;W~xux-JElAK`i&*DhRVaNXFoz%mQh6S&H7oyRq(TY=?nTu{UuC6`N7hFqly^ia1Ts=S+ zOH7+sYumVXw)P!5+OO#JfBK)p+4;(=;=6S1me9RN&%~>H^-j8`Pv3smUUz-}8*WS< zFmTY|lp#Y?hut)M#K=*jU1P?M8=sawA>(Fu=EO<2OrCP9=eDWdtZCD4k9g4V`7XJ> zA<^`zWH`e3?HrONAtk#;xvwAMJ9J*^YUHGsB7Ek?z!Qp*eK!IjRGoQ2ZATu!-EkO_ zF_>Jer1L-wCWdr)F}yzpOBkbBcQb5GFEr*Vdfq`svK-NFnw*OIQ7`IcL?=YoOb3P( zKhh6vrq9Da*C0oh3-g&!`t3befuE#8@xLT9h>={<+Qqf!O zgu_gVqyDb_5PUcwX7*zMF7m3fstC20?j~VyWAs~h`)bN-g6l8C2?V131E06ck&Z>; ze`kLK=P~JE^ia`zI76?6lSg0=Wl9CS|74SXvM->b5mdcG0g z-4k}G2>V{azw6`K>>TkMJPzjwI$ICBUm>Og?kw!G7U7;Sed&CZ96QtxamEb%uP+Ro zFS4Jgi(xsO+XkL?V&F>nPr%QshK|&|#3P>5h@1Nf&LP}2ff~EI2jy`dVF@j^DwE*Y zWXI{XXg9bW!-@Gv!C?=*qr&ᯌJbj&S192UdF;m=iZx`kaLT{U36uzfdBm9(KZ#%TD5JKZBDvja9k3A_-m8+(!UJj4(s`q9Zqz zyHDc_zSYqma9opadvS_;M+4u44^;OKnrjc*k{m%Yb7=1E7*?BjC>x^#IN+Jv;qUiR zBmREi+@vNrH@{eOm%uyH9}ibVplrpf{w*+wdqqF2T$-muto+GvKC|qHIU4ep0PF!) zcmIy*UIY=qKd_y}Qbi82P4%V;4@3mpT;aD z&cxsKcTsQsqjS+ky{nt4tHoaNz6D333FHar--26+PegDm6X9HYu(UV|d*)xBf5$F{f4zJl1&0UH1LxQYE!-?51%%TzUT^-1;vG~@8{3pYZ zI>j-%?~k3<74;yz#HmX38Ey_3^ey<;B96_X7igX$s=FA?fw=UF&&L7j3^jr%AW40S zFg<*B^UF;B7ZEZNr-c`^TKOAEOy<{H&GM3*t>B4$j67t>5Ao^yB*u)Ra4$Lm+#kRRfqfC|44-`|Jy(5d zgxJ988ZwTuCXg2^`3qHg#rFHig*DL#DRm!0R7-}F0+fIthrgrTm56u2mozKE`XY96 zQ8Ealp9c2SbKOSH^!{EZXI!F1g#-Apz+c&K1Gp5KRs`LQnqc#{cX^HjaRfYv-`=as zQl|`%$a!!O&J~p(q*$t7qrMHg6FzAbisuN0rF=)-L%hp08}Q*eq@Gdyh_gQqEHiha zijVH&YOJB&bXC*oRX~Ze%Z1-j2rpiXnq__O{EA&?4#B_e>X1JvC zsN$&2VMGap!}`Wiiy?seo}gpdFK-ABgrjgFo{iAJ<~ragT#c%;P?vjuH%rx>dR^Ng zjhRVgFdPL2p!@OS5I~aY9ge~qsHPm`z>pf~iKPYS5`BsF(f1GG5zsHoqy(`A#!G=sO`$l^I)k!q zHGU)I+!GIw6@m^(CqG8+Auv+<9^7y;)^!mimH$BFL4^zg7h8`tHEdST*#l`6<<4JfkH%IDNMmp zxCRf)+g|Z4O;L?VfP>`15-nInrMA+;UPs}NKr!JRgh$q`#4nmgcS*p?_lqDxrO90v ziw@$C@WG;FKm;&&M~0I>*p-ZU_VrPB5=qI^5-uRrS@mG@fwNT+&mSeY3corE$)={P zqb4cq*3vJ%(=5psrN7YEk;h$?3wqVZDd9tWSvxV*PAV?F`W()i$0cx7FuZtz58`)G zbO%;b?s`USkh%w#8u)|JJ?t|SF6`)RMcQ|2Ey6bye%Q5+nhDHD?oZX-AeXw67(!(d zEA1pN!H>T~PIy%$u;3Z+XGncld{$~G8lsFS>yDQ+(WnVTNeO?#05CcVicZLMyNQtM zLD{axY4|eJkh(7^`ESyX2BALvprT0nP0A(u(K{Na9~G`gKYF+^`tgLSj??)<(lNGC zI%4_QJ$qK_yEDWyB?cXh^)G6_;DjSA_LnwgW-+F<9T_n&VU_$HfS=1Gu;My6ik*vv z$FqOL*)@)nOY$Pm4da8-b)>2T5nz5%NPD{+pk+YWp$mAb=n~!^Bzgwj>Vl z1bKVn6c3L)3^8^DO-6bkZWbbp_h4aHJXkqP6ksI6F<4B;WAv)Ot~$yiUs&=cwjdJb ze69r;`0x{+YZJF(v%^6`m1?c{6`pl$LzF<}*-v_g0{^ncUKEeuH?)ithq+eh@fD;- zh%Q;Yk^O1}`s^uI5sG_Ei2=jY7Uvd}fJ!-=K9A+M7nZyY`2%UQoti+x(BZC-@85sB z>HQAFz z)Kn$EQk3JCxbG%6?jR>YX>XCx=;)p#%WYAy8&gWXB7DXywtnBLLpW`2j%&fN$S zI>xW?SBm%;>`aW&-@>Cm1WTIg*&;JIISRXi1TtDTWFz2ASZal*URNjRlKJ~ljp7ee&Z0~t&IVpvMm@6io^A|QmJAbtYq(dmpUPA_ zHG!yRYVmN{fBZ(9DRdIcnOF3jK_M?kbTuuA7!Q37tct_)#$a~2sVPGD>{%Tlw47!Y z--FQZVresaJrYCO#URnYdZ0`N9&rIISM^YPhM+A>_xo=%x2JF(+Jj;s2N73iCb4{2 zJxX+$7N&$`AgFer*hLSMA{UQGks=v>%QS;XvWy;!o03yGqfCpHcdkQKb(|#_a>9+cQD8Na@%1L%n^?bo(ur`F08Ll&e;mZignCZ~rL;#)$c* z+XXZ)!cDspj$&2QOt()&-Tw2xa66T6ONrWtEE2q}g)!!gzdti*lvVIh)HmIaF9ACo z9nsT{ZED>WO`j3~KLse7%m#qCAntSM=EH5@rC=9-Q1pU<3G=QEEh{g7tomFFmRGqIv=kx`G()k zZ{Em^JYTLbx~ZZP6oot#Q@p@lbML_9p}8#f!w{;s9^_-W*u9RX>k)mNIKxF4`x|lW zJ6sc-z!Se^KDT>jNI@SGJ!9#IWNV|PV6)h(z65f%mN~m2<2kqo@*m; zsO(~FZWS~#E57v8SS+_~RreO`fHyv%P7wl1S6modLt&0yKKFXSfdf>kvfS?5S|@m5BM8+FA~Dk z)^(c`m=Cn7NIl9coIWT~ddRe+@DKDjD=t`0zstrV3HbN$4Eybw$morPR0O~30|;#j zt9l7cot5INY`BvetGeXg8Q+GE5az4h)pZPAUxc# z#T(HC(~95}@88nsxbARsC;Zgn>>W|#s!I6->od!r4`5m{IyeV?4s);{qL`RiIBzAy zGYAi)d*PTkh-jf+=zyL64&rJjH@^e?{V_m@v73gG;pq7-UU4!D`X@qBkI=?yl-kWe zAi6@$-$4QD7hMybzF{~ffM}i@gRs)jh%7IXs~&TknB3nL%9d_n__nr#rK&I5j56VA zIqPcDa*wGF9DQN;k}BS%r+zpU>DkYS5YiZ~uQ0lTn^0f34NHwO-s1rqpj1!_8W&AS z|1Hue4y_Ccfkamub_kvd(gKlgm6cQE-~16Z-Ox-6CA-(>ykpS6qQg(zgEZ}{e9akXSnru`-xYOx+PApGOK|&1)9p4=3P$grAO^92`d742vWl)y zSfV-&7yt;R&;;)Eb`nbA{nKF6JJyr364oF~aDGwcG~EtKjiRw8oWv~?-L2wDY|tBN z!Y^eLwh|%3P1uYbxIx2bs0l3ZJUGT7VTTDqv*lBgc%B_VG?nksPq&aCW>vX+19n!l zX+Ya?K)MnN2~t6r1Gq>MKKjBrL{>7k2g-rpeXVxaDuKI0~<2>%`iy zEvYKr)UM~RHO>ebjXOe^SD|igZa$5i=)&?<+*+r$ccp z3Tl(0(brDwla9WK`1hQ$^3 zkrarLs&S@P9lVhSEz<1Qj-c7SO%DtjU^JV~cjfxC!&ri@xf3Hi(&8ie&#S5vKhW6d z6><{P9}~0=4JYE1Iw~EjO20ySx_44b2;5AL0*0X5Kk(icamQeSvY{j|OAM7w+E1|J zmk4`qn9jgaVtw_eUy>E4f(Fk~=mon*l#r|BwyZ?_jZXAE6)u}^9^#{@>eHeWDR0y? zg2M+IQ6?hZ;($h!2{a z<PHpc6#YsJE%Kq2?_~AQBWu)V$a6CW8d; zMUmk7H_*o?O}G2>HLam65{O%<2M`_lXjDcCjJ7p2(9+jWU*{?%jC2ag_l>^)lL$WubjHMS?X5(6dYXh!~2`Gze-k^do${5Z|8K3AI-S&%=A$N+uwr9ah{E}lrlVH zJ^dOBjOs3la)pT1T_NuI;Y>YOh^PNp-xVVLC22gihRG$*m*dGF;+$OO)ZP$0%fE$E z=yx`M?$rneHrW*6E~fjX?SR$+Gz{onJ;}>wpG=S=zWcmG#C;6BuPd5xiBjLhtD$Ju z0jLE!=w8)9a9w&Tur6dUdxzwxr;boRD`38Z6BM%29KWc~CRDL$D$S-kIh%Y%FoY=n z(~u#jb=M&ABE-E(d9aHdXqBuyoQ6Qtp|OB5G=4PCqzCahozwsw5}*{u`HgX&!*KS< zY&Ak8p;PiaDB`vS{#jN-#(DGkB&-_1A7LzEBD})zp5#H6UjX3LH9o8?FxsS^0S(LC zL<~V-TRjxyb=Z0@-Q*lPv=bTH7F_nQjVu{`&j-qlJQW>qFd=#X!9OuC2HTcAXB?1Q zx3{CjG^$3`(;-^>(yAV=Zx+PoeS_xZRS+IU$~D-)Gmy}jH`Eat)YAh>&`ZysXa^uy zDE?)9;Ndrb$hy_nx{*+zkSdo-HzmjMTh%hcHAi!UF4(+rZc*;uoP>AgDDF-0y`Yc! z`MC~HX_#5x{#Kt9n|V@f66=#NDW+O6NCj|gqD&$PhQu-WQTRfuTj{eQLMd^9YlOcy z(B~SY5_xbt@KJ!_JhFPO>Ml?Tp&dZ4F8>xE!3S@DVO>n#q(7`9TDiF|`J2^>sx%(oyLG<|2joV#s++ zRUY+Soy^zTYs`}&Df$D)?Gt?M`8}z+T14lO=!pIQ#I?o+0(Uc2~XYuPKOWhuct8d;2wqWuh?a5!-y0Wcj+wn8Qvil=1M zo)tyfT_~e){-5fOW$qO~N}*qHI({=%t7%lb82=?DbcV(l{^jZ#$Z+sPisCP9kZ@>( z#54v2GvhK3Uy^@AND<9K-QeGkuco|0+#lxP&{poH#^A(W;rI*;%%7!l`3aHy9Qxmm9?CQ?a2hIrRX4QtLF%;l z>JCU}9UEDePO2A|N=KP@D(GtG3C4pH->otR8S|EAi%vH`Zc|J;$+7 z*26i8_;khnPO1)J;APzrhxMa7B8wZV42F`Vz}r+;i2U8_uM}bL_Q1bt)$t7w&Pa^_ z=zTw5&m1Tuewb&&jusDZFw_`0f-ZsnwOR9QCKFpeROuN4Gq~5;-Esz9g8`3dVbhz@ z!jzdifO#t>K`cb+V%PWRZ#lEOoxeL}62W=D-x*%7*xjqTuQGFslD|Fpkq=&@o1toK z5l?zq*=KWGI@(wwZ|o3zd*a5-O;GB{FSwXouTX;2yAA(~+2}9Pg*v&qPE)hDz}d~E z?oGuKTo>hT@DL7VOQgHOmX7DeJ^vaGI52kU#KI_6XQM7iu|p~;h&eP()4%0u>Va>- z5sY*DEb-v;^)@a8`nb({fsHS*@avY|H^0k6S{9IBZ5 zh!ZCnlwToBn`9F=jmJp_^s6kKWC%6Osop~Fh)Q-XpJV{Rx=rkR04Bxqlnt*w-?glZ ziBS*Pu&&fQEjX%X6Hul4u$3@0d(n&!V`%mb)U|1dp?TDVq1hLZAd4EL<>PjvdGK0; zx@m%Qe8lOS4ctuZDsTfk`$nNNfo#_lbf$jG1fBWFN7&9rpfi1U(eYh0N~VC}E^7V$ zO)6NbQIyR5!K}e(q=}T^U{j*!y+>druPI zy-E;uw?f%gY=Mkht;pr+2)^T^t(ZbFD+WBPJxlE<)-G@WcU8%+4UD(IEAxv)Qdc*_ z$2RGx;n#`*m-*@t$#U)&^tk2+pI4|K!rozFQv$R9Djxsxlb^} zk)AAC$1p8-*DxV-M<(YEJNw0Z=MA7Lcb)H+vDw+#T^x^n4y_I{;-u*PJ}pPs>71mq zS^F)Ty-4xY;0}~W%fm>~*gts-Ng)P@PDA4;%v`^;F$XegaHKaVI@D9tTcuBtlq; z(LV?KRx12O?I>xjPO&PyZ-d)*mL{n^As*D8o(RoZU6`c!SE*C_A#;bC0cKsRW`J2i z=L|3_=$tVmuzMIt4Fi^Iw~vD?DhTy675X9g3#Cvzdu3oJQ3c~qVH|;jp=IZt*IO)$ zlb2oOzkQdTnc+hdE8 zkk{sFLlCSo3j&oBYG5F-TUS!BFTbO!X*{Logi+O%FdC^5^neH9412IH#$`$6ECO{( zkHpg>JcXheLcRcS}!GuZ-))kXHwuRD7K|B4mA z@k1x-$gYSmANvJI@a-CEGQq$)78}ONL^7t}379hCBq%Q0r^`4rGd{07&dOvem`#+r zg#+j)=m5)Kz4SYXsN$8_CXu@W=N@nbU#7lPh!_6y4P`iPtcak++oHSpxc$F`gE)*} z6cHoHYhHZu7Brig#{=KTEQSy0=_)d`K{ZfqhLLD6l11P=(k&>F=mkurnWxe4pVU|7 zKLA)PUR6DbT1kyw%g$UkZEO;8(> zKfyQL!o){2iT)?a5{59#v>_m}r$&hPqeg-vI1$l+6VMuoMJLLmAE4e^41fB8Fl3&+ z`#3Q0*&yb>nuC&WnhvHw)f!651zulK(K0YL!I5UV^CKHXI zC6u}l-aMVCMptxOn4bwuH-cCUNAX9T{dxnoc#PHm(*}w?>rxKKw$gxb1nPdisB3*V zwWF{G?y=JYb#AoQ-vzo(3^uMD=UTG^r1sQRQvetLFyj;XgS*ieIkvUaU(={gN0rcs z<0R}Vss{($m%vKaBN)bFKl0CQ-=GLG8%W1o%<A75aVRmm3>jT9A=l1dYWN&^fppk*lP5h^n~ zU5xBzva5E%pk-Bjd&@3Xr`xGhr|fPwwK^84DN3o>jnvZ2bl#v7Ch1xf|IhQxyvy#g z3)cDm{@L)(yYF0|nR(`!=Qik;7*lw-SvJVMjw{s4>Ht?`K+TpLJp~UR-+F%V|d7}fojNmUL)(q_`)<4Q@H$_Cn5@y_WIp! zqbwsCj@MXlhj0n9pXS7sQ(8^I_2I@wI()c~jd zeN!r#?(L9ik&wZtcan(V@EyGJ~Z3?!A!!K(PFFBjGzHl4;+fSiAd5wqHeshT32h5Jsw zY$A2=UId5NW@8!2$=MMwv(*ijZ{TR5hCJ#y^%x=$*4Otv<2 zMAX9(a$CoiWLIPC?4rh(exn-qR6y4nYz<``I&^suTZ7L#4oukA>#dx}K(8(+e}|?e z?!tSL=8@R)F_5aodw7-OieAPQ&NvBkf%)(8&sp2$*tBv6H>N<~wenwr!-gUm z{n^4HF4}SBO4E7a<2r5RAsjXtZZ~ws)}F5cO{`9!nxu%OJb~eS88oL{I)r#c>A{mp z(!w9dejQNDtrQl#cgwI<_Ky%UMkuHT9iE5jyFd~$%? zW8;b*UL|!TEs;IK^5?Zr#iMEPOP#1bd!{iZ28$2Lve@*v?o%|mDe%VEdEBT2jXEV^ExTCB&L0#m-Y78efXiOGCM0fy4b zp0Y3xExpazO9@7}BpNReEqQna;^5_>g=a9pU}{KYx=r*xnHQi|#u7*VMxcno&sf;# z6jm)kI8S8tw|=@ujKi|U=LXRSJW&|zhFq#Yf#Zrv3}?|a;nhOpMoH+?xrT&Ce&?F~ zc$M{0BNoBPL4SukAmx>%&ZLM608 zSi*r_GlWu-gW80f!)1+amu}&~M6_$N62AGY=AOOL;Hd?~6M&=o&n_BN+zTJ)wHV zB)nGk77YsSi)ZmDkiZgz#m1s-MAEtz{|Y|f zA>W2UIIiRt_xuOWJkFsD0`yuyu9ZIrqE5lP4B>Bu>DFT0+`|9JZYW0dON4j@mgWs2 z4dp@?Ow@nr6NDM|QNU&5*Zx+TSgN}ihmH&q!I0vZm#>Y9-$DvSUdgd0MFjmky8HzH zI*9t6o#9J4Uik^Q`7^+C8!hT4@#bbC?I9!AJS0AVOoMKnZgOf6B$GG%yNfW_Y{UlQ zqHG}T>ArEul;Lk+C^7t-NSE_6j0@4DfKHP-Q-DM3>Wq6oT^-UV#ycmHG3+$lec04| zs~tl2tuTM6G`oZI452V2v5m0EB8_|$`{C(mp6~7&y7Y$+#%P`5EE3I5x6%r5sJkB_ zy8=kn>(L*GP}$g&Oe7uUx3Sk}W&*a{gz8&Q?t0c&D8>PL4(Wa^h=Ics@#%O!Pbae< zhD+??M$l+4qHZ`s!F(iq^whtB70A7l<{?_R<+hK%LH&|k8hC|{a&RXwNqHLx%;^{J zp(U2S$p!WIrgVS?r%K%1O{70A0wJvipp;*_{ee^tzuU=?NIF^J>!bnvMsm0EG5oB+ zyaJ|i4!ujh_~wW9oTl*kDjsdgR}4n|uwpS%=>lsFjL$E~y1a?+TXdt>u8!_vug!Vk z(QI!Nt`E*`tOHvM`e*%d(1V)tHnCT-kF*6&;! zZgvJH+PHwboO(1H3DD&RdtKGB>_*w;26Xud_4FNd`AmSR?iHW63kQ5fDE|&5`?AKv z!KW}|E+j#GKyp`r1wwZSfFpoYzJA;qm65K-Fyk@I*SJBx#$mwZc%X59csA$NzxGEw|d-#w5D4@3}T; zAOfQE=C?D6o*_WeB&tQ8aFZw)o@mxzh3B^k)?k0>vIaX0JUdd;Xs|P>X<-Lj!jphG zU5>XtCed9HshSAr8fkYM(86yScngBzM?Kxw%3Ovq%v~`!oO@%;o%}q>+{(|c=6Zf==6n2% zHQ(fCH}fStGe1U2=F|L3_cjccX2k-n8X4~Ny;@m0gcVwUY--J^z(D6Xd4yu!8|>+O zT|clpmYM7Aa;;Is?d@@b1*f23RqEa%F7>_OQr+IT6D;gI94Ay^4{%{x8C}aO3q0s+ zX67dZfPZ!&(DgJQ!83CkehFU*%EUIcO=P0bS!EShXe%mk!6|jKmw5>nbF!Jo&v0xifzsRDN4+(5s@0-8VF z8Vt=OvvX&H%4udKKTkJ*h5nn{JIEyS9k(~x{DGex&Hem5!`#KsGtHg+Jj>k5&%x$; zehx9;M7=A{Z=kxPCb2vXom}l~HqD#@xht#+o1SbDWt3n1dN>zQ*r4=JWgMC z{lfNPF>0=yRy|2|XI31pZ&ujh1^|cY7d2gas)Y407;ZiPE;5r)qo=~`%N0*Fd-C&Q z^CW)enjQE#$^1Q^gIe4+mGQaLf@VU~Yd(Pb6znh=%^D6Tr zeqL>^7Md&gdA(`ybB^i3Gjk_F=MMhGVHWZ82J;4f z-e_LU&zsB{{Jhzm#?M>KiTs>vj^*dAW;#FTnW_9NGSA|t(;Uc8m)VD(^UWUoTwr$L z=Rz}zpSPL6K|$8-z1=**&pXUIe%@(*$InjYZhjV9x*2Y6!=uB&Q$=P3f5qTro8(5&8zc zqz_Co3JJc%iT>;5`x|Bb{|QK+0;Pq}>EBW5?+HksrH{{03vw4` ztKa|46w9Dk8O4TE%tJA{-Ys)6#rjcf3B}?lwv=L>DOOG~8^u8O z+RURM5i)g()l=*qitVS^mlUg|SS`i2QOuy&Mv8q!vG*u;FU3|->^_P;Pcb?`nom&d zeu_Onv0W5fO0fqhwuoYMI5(XXdx&ClD7J!PS5k~*;buN!Zf|FE68-WB{W6YXk5cS> ziv5FPMCfEbMzPZ=_Bh27C`RfzW_OA`Nin)jG4m;k-3Zgu%zsj>5p+%F(-b4OQkl;X-7q?CRpIkgcsDBi1&T#eY$e5h2LY1#BE^nS>?Mj3p_BPC#r9I{6^eaMu~#Wp zO)(Pan3WWJ9kKA>q18`R-F4T?#*ISb0=Bh>uv}CJ#;P>ELv>&kRR~83m<16gO!RD- zZ_qEJ_?JlYTz*EGXYM|Jia99u4#ob!pG=ZcnT-@9`rrJ4 zVrwY2k78@_r~M8tE|eXd2`lM<4!(sMraE|)N;48^T8+@VsHSdS=6m$Gfp2B4yM`}q zt(%#-j(*H95Ca6$CO%3e^F#WOnOQ-PbNSM*x}llt=`A^P13d<0Zlp)=%#Y~NBXbiy zVlp?=qeEsD9$Hy9v@lr0Y?%i8swxoU00@P=_F_)geOw?8*9EqxKn$%9{H1W^N!S%8 zbb)cjqxd6U@1jM3hVC-A#I|>SiS01LafFBkCAMQXme{gyF0uWH@b;}Gwu|SL*uHX> z*m7?uu}w#qiEu5#O$aW8Vubq;1j0GUyBuLV!j}kp5e^~zgwTu-eN%}|LpT|sKf)k{ zp$Kk-&k*{e&eITvAe@7ciI9sh9bqQIwFoyMxDbjFJO~EDM+l!Fe2(xn!uJTjApDNd z;g%BHNeDd=`XZc$Fa+TogiM6V2!BVo9^qDm+Ym|-$`S5I_y1CJkc}`I;Z=k+2$cwNn2Y@ok`aa@WFX`qT z!n5dCI_k1GAi?}3Fc0g22W;Si`LStEh(C9KXN#Y-PIAq4LCCdPX!F$)PB+7PqQXL6McUaR=wDsJ3V{f@Z*rI=@BFP(d51V784KNO*Y2T{uG`yj z(IB@s+Et9NWIzKE<;nr@NpIwO#jJVI=z$54IQJS*z|-LOQ`8UQ%+BHTvX@^vkb3$K zv6EluKH0BPZQ+Dtu>WnqAD_=JJ+~Gn89j~B_B@DvtHrRnvXy5b`O%!%Nay9oB*(F@ z`fM4vO&>kNm@)#oE*EO6N5|^7$J7W~g2j%?eReniRrhi@;h_(|wyggI-~JTm zhe=Ot{YO}H_0VNj`@+yCy{LUOS97U-?Z~?%eWHZ8dQk$=C&3oMw8NB)Iw`a$7rR0M z6ilFPAaZ5P&W2^0s4N}{C4_Bar2MUSL32?eUeA=TT|xsb5Ff##qqP}5t2ksYVf6J$ zDS8d=wIHi^d+E3MrGmU|N7ek`-cK7r)DC}i0K1q<#s_^Wj@3qCm64p^$at8L*z)lE z!QD0seJ#AS9dN%uP$qDHgFJ15+qd6Z_%@!bsjs_$D$vR*xo-&ptMKI;ybRTnBsCjYHd!UHQ(QwL&f7B18VRjY;!sBP=SD@i2u|!(n`@8p4?2{ zWZA-Rb#MNDj?#@-na?c`Pkw(%V@mV6E492W^x>x;k-A&8Y~&>lBhQhqt=NElnKxwp zFzKxr2~RrE8E$P4`2ysrJMxa+iT@$tCb6pCmfK2$G?T%{?q)b z(xX<>7EEpjfX@@$c>IwkT+=Lkj>Ut6hLLAKwyV$1fji)uL-gVbpd`dP+Y0qt>7hqz z%@icX~13bRh!D{zYV!I5g%tgOU$n5nUHNTeZk8lnq_1-4uX{i-uJF#*2x~k5no>j=KoD|q?savpQkuJNE zV01Y?)jbKJzExIVSyr#$vc9_#m39xz+@E`+mGz{4jE|!$u7IVyWFL}=Pb7~|Ul0e+ zoOZyXu+|Q_Q$q(h^|Ityk!TyIjAAs<(;?E+=B!LK!83Fq|I_9Y+f)J=idd%;)~(U;;|PmU)-QysP`|^|#96ZK_cJ`W&GFRc+wiVWP76reU!}d4zAYF*+7kqIfWryx zj1mCE#_$-ARub@Woty+d;6ckp&q{3GK_4#0dJI@UJtv~dv+38#NvN{BZwkHw)|vSu z^?E@fhBXtUyV;S_Va8QSnL^F+l5Zn$jS=pmX@Vz+$hv-ITi_;TDOywbXg_dY62XFL z{sK7&0F6Ft+%@tii7|`>Nr|Bu^CJ zjk=YK(*DPWU9K7y$qoB&k*{GNfD2V1zV`j#nG&*LBLW)s0o13cVQ=%V{}aSEFbx3p zP!wfpz+4bfr!-*7U~1*lBTB~4<~pA97KF}G4LR$7Z^-$oA^T9I)sWRTUqc?ouv z6F-||LD@1?uRz6uAo4Hd{vU_x4c@S|vI4(`46z!54MS;F^`=I=j+G#V5btAgnhD54 zETRukgsG{QDLwEKsa_h#$z}N~+G~u*)Q9~d<=l^V%K02zu2MgCwS1?m49xX-*C!WZ z4fWAG1uWjHn5n0gt)vv=C-5064%p+eV_-b6#Uai(+1@%_YuZRFS)HC>E)JYH7q>cz ziXpO1v#Esb;?@o$z@ClNJd3bqR2#pJLK{YL8y2GWGmTqg#id8;VQWQ5qL0FtgP;NWEPR2eFia)WZry;rFbTKrp$9>f5GLEhlJJ zs+UhMz{}g}&vrGQ@I)yr0aJYCewI(qp7Djd}7RrGRLy*x`V z2h_{M^zx;8DW{jM>gD3oQ1m+Wav%8c<|_5FvmaibRWGFQXg;i7*3y@9_3|>k+^Jsf z&BDtq>ZRLlc)3cw*cajjmr8I$PmaaQ1ohGxCb4F^dif*`U+6{v>Q5}edVqR~ItMRt z>g5YK0yLx5%NBb16-p_T=RfrFqk5TzMPcq!FFPg8SXPU7nxwFrhdX%i&>CTn2Oe5q z=6Cac^yPLreO^UUns3Kk!gs{8+m?^KAG#6<-y?K-06GeI&U{dYi}8LL!t;K=)AySm zLO>dd--Rc?JcoO9Onyo#?o^g`2|?tlYr#%MD5ME z03rowwpfR?mp;s!EXd^sU>D6)4j~q?Nc#ulRg3FKMCNKZWjq>NX&5xaFRYL21$T=U~q>E zLdfcLpPm(`Pl_vtgE5jN)oQWir>P0jr&{sGN!V;d$(`U+0zRv}A|;yTPL1MF0pw1& zbwzw|A&6SYooa?SJ6(1mA6x1)y5qNW=jgx&u-CT2g_qe4UT|djhJAvO)se~v zvF99G`2$QLBP#dXqjnhcqSJp4FXzIL!W#1^Y*=CbDaPi=UX`Fq^3O;HS$nAd7J-)H z?cn-Ycd=lrKHSL+tG;^Xvk8(@2~l^*VnBbJMJ19|9}+-HC0I&TPqZQuLP{0;0}i9a z)fq1k32oI!^OuS5`EOGnX33htxm1h zYEk+HbcHdizohO4BN!%wje0?%zP08!yvl)g)ynQ8psXiWNETG6HTPY32N7$>)u3^O z8!?p&y+=UE*8WO_ET~wxYoq-enh?QMuKdU)#pw1&apXu*=cA0p=uB_8`QiRN2kTq( zCtCGKpV_3Wgo_5)L3wD!R7=1b~6*bu2TYz zyYXNSPP&K-J>-Y2TR>~^2Q215fw&K(9+3$(Xe4xldImTeX*o3Vr4QZ=cVpQB<+TiW&j`a}_wg*tBt5-4(Hhz0|lhOOiA_8JhV_jX5t@#7td* zNGnv7yECOg46YA+op`Hy)6NNM@eespH1ToqCVhitDPd&C^c3N37!)-l_M9 zRs7QCPJJL?r`9B^uIvxYm6An?Hs=DkeTSEh20bU)$WI2!o9%&A(27NzT&}}C z(&nLYWb(;M2{Rxupl7b+B0imY&R${XrF z#DSg<(1SSU`-sb5k9)n{#r3?QHt>cTp!o6FK5Ii=KGK>tVbnf8#0=vN^(gYRDJBV= z-xpgLO74E%kb0YNetcSJWCK6V7)*zV{Tb&zxL&#xtatYvc62DUB6UmM2q3*bSt9X1 zCz4xzFmHb7C#M=YWCDIkZ4T!nBTVby<_8oDaS7iA)KhoE#V~S}a_FW$*cu^`zgC0Ak>AA_nIE2DFsiY!L(SbCK)Cz2NbQDE4iP`?&ZN z+|WT|zYzrPo;>{gv3Nitg;PNRjCW@@#k)7eqMhl*4Vq^%_IuwJ8z}P%!cTdYcEzz> z1$}nv#|Q3!{#jS|`Z!C}&0-~pk)?PW`XyoA0i61cg|6byv*ukGb)NAw-3VPRLY_9! z70G9O`=Oj|p_Pp>+xmo_ZEeh^Fge_J#o6FC1b1c3j0rap!(@e5QfwC3=)~0tavHvf zNrZCL{2{k14)MY+(4xiIv*M#_|7-;d;>Cmqd_G#pYtyAxX$f%6(;Rg50d4MWz$O>| zXi#D=oO?hsL3!HeD#CC6_!d7R7!N+Yfx0^0JU>wkK8MG8TE6H$%SR#Qiw@RHcnT?B zBwpc1A%XuSNpc5y>)=Bpe0BI~!pK(e{B1>lH|YfvB>nAepZ@L`W6|HqSa*v4X8u_? z`g=lK^mh|ej7i`W1<>E#Ao?3tmGGN%;a?y|TyXE{od)VT_5z0W40IOz4US<_al#_& z8=0&R$?)4I8GhSO;R1RSa}V-(n>;hLkTf9_kN|Jc3(!9zhm|o$``nB_XNKArblv)q4i$@LYW|KB3-{nPUP`)e(Pykr=|H$45gn!rj3 z`A6hw6Cv~ZOCk%9)SZ|T>?jACG;rapZ^QX_x?F!x(8SoptHzPOLv!DQcRv5_n0IpU z`S(kGx|dG5W91RJm7u5PyR{0JV`$D(r{ILeaN<1(T6Qh+s_o(tcmuN*;}K|`VjYGLHqi}O^$_P`zo)}+Jz5EBtAQTmjy}8IIt)MDOHTMphzm6lZ3V|^pFZ(& z@SXIDS3)I+IZAtIbH?$ShyjuMTZ-g9xlx)=>-jcNyl_zj3QoM)$TV$(xIP;+EgiYD zuy58)CNlQuubkO=Hochq(!n`^UiR=yM{IRLTF<1>s^|LCv)jZ4V`a0SAyNqb{H{xd z(*fteqgjrQP@$R-3*xs|^Q{g8D$hU%w}Q7ztGb9%PvlcSJFgQjV3!?^MmxNN}qbU;T2PO)r`Y?|feI3F3f=VP6AXNc5Uy=vyh-D4iV6YMy)P zg?TA8zmc1@Mf|%fn%~e%xcLi^`cW^HtJ)B(61Z5?H%LiHC{Bv|yC!E}V=Q#cQi(xQ zE&8dBlu#>N-nx#Yv57C^<0?fYdLBz6cHH_Uvd^X-J7<6)Q10@kyBammNX#QlD8j=N z^Nv;8;%qi}(;7RW%h-!uJ@8%Q<1eN98^~;{eo@c7Z$xZTdb8rpkBrd zyxw38#NO-(v%%?IK`V7;a$5(tddlgv<~+si?b@0eqEsQX;#ML$A~ypHemWFfXtqVU z@J;048i^ljNLmvQ0-nbAzcsjwya6x7Zgd}Xh~4|aakDQ*OQSYpSw@ko^VYX9omgYx zDo@NP_ak-+#EqyOWz*G6|4YdruyH(%6@9Z>42%4{?zJH0|G(fLX1L&m&F|y^7DAJl zv%?SmxjzQOe+IU-|4aDqUJ?NR`tAQW@So|0!32%KNVhe+O*RBlspsBNGKt!hyP3{C~2oPqnS9; z+dUxfZD5!iX=~2f6t%h18_B8@UPwjbnIODc62@7~LiD=oxNI(&%Ix4ufKz!?ppUyR z0sT|jMBlKq!w)S49^QQPfyE*P69#$|;sws8l@Sc#lLmS>*$xzXI`muh$zU!gMQx*$ zX-m=TJ5*YMR-o68d0)eal9i+XawG=WDDf(hr;@I-lJ1vEJzRK_y02t>vM+t2N^kh3 zk43+ua5Z!*J#Ri(%2Q>_nKD=jciZ+BrO)-?x&V**6ET|toXj1r0qyb@h?wLZh`bcm z9>cN^Ij*0?el*9%;D}H1t{`W|HS#-0at6_-frkPwN2BpANa|7IcMl~$!dbEb* zGq)g1K5nXFd$%h6;&)*dQ-wc|mS`1`)5zd4}BI8DiikR`(txzj-q^=`ksY;9*hK5ZDA}#e{ z&<+C$4y!fD{mWgrxODMGW{?nDZ--t55hV(bu|ety+!e!TiL99qE@!O{XA29|E(I*q7B(E<)74G92iHEv| z5)a|)#u!}N6bs-*GXqa6dlNN-PesmG<9I7}=y~ywC;!YgYFg<*+QCYXBNgqDo3KZ& z_wA9Jpi`i>N%tmflW$;~thBbt2B~2PNf7Uq=Sk{1hxf_`?3LL6r^I7K_4O?~rp9jK z<+iMkyC1tI1|9-J+~Zy?{(UMBx92$Yviz7>K71$btLMc->@g-5_S7&6QRh8YM2Ate zwI88Y%-is0bm?0xo3deCXTXLOi1n_lR#@*5=F0K%u;%C7r!X! z$vl2JVd+V=s8Q#~rD%qclcdBJWXrlJnS~cpszHDz5r(86$bJ>RZ$rp2c5b!+U6n}P zCqVn;7yz`N`RXx(FKsVpSG5P|7W|wqQufKEU5W;`LiwpjRo!9eonO%{x=>2JX} z4A1^S0xiLKEAoV&%-r5AZZG_^H|hBfxe2Yrj@}D#EOKXg9IUbn1Ry z^^Kxas#^8?uqR6GriW!_sohl0FG{=VPJU@~)%$BVRg2vzvJ0o93(F=YmV9f6mZ+u3 zW#lDmtFsc>n%=NyRql&)XT;i^o%C_Bz_O0IXb4kjCV)3M)n|;at)7yINkbO+$YW%6 zc4w4ASE-bAl_Gt*O1DR+|JsI7^$_VQ!M8n_HwEI60kVy>UdXwB4!Aa`9|#n)Z67s& zCXuv6!!|jxSP)JMp{z7&gSB4LaQ>4x$)~IYoaCphbTv&CS}%_wPxv{5^>U)}En@mL zqpf}{8dlw49g08}3rl_O0GBUxjv4WPK@0)+`Vd11ok?k^pra+ha;@zjGTGLqTq{hQ zNMts5fgcGoO_W-twISCEQyMR9lsHNf7A+EvQ0Hlhtn}laqslrt$NnOV2~GmTIZx~& zesP6!4vrIhUpv5#YMyxvoZDBKMz{~R^L8Nq%aBX>NK2) zR+fNShm6_FhoGL%J}Lpw=>jXC`ldY3!5huZ`BnXpbI z8MQKD3CLLVP8j>v?>=Z@b$ofUgL+W{ByGOA^QpvpvXL?L(@7 z-BB$yQzyxj@Iv+NLwtkfp)nq3iT8+~r;S^$*I=lOgr$aEmt9FzT^Xw~E%Pgo%ob}P zFEH#E85y4%3GVdYv@*J^9(kx2n##leQCsx_`i)R|H;17>7_PDA^Je1`Kc~{2Wl03c zk9x`(7o%#o{MSl&6o_l5qNGESWK#4}9-?~?#XUo_;s{D}(6LGbI@RN$G3{uEkA-c* zsS11_2~j%+$5ZhxmKyO7wQ-~nZe)~_-+K>^SPBGLD$f$+@%NBvHKHOHHDASzc!#27 zdqpsh5gk>|T=h#DTJST*-%P^~p*v5ub69Vx>W`3^R$L6yx31c+ghZMQ(qn%$&VrV| zSC7j7F>q(={5bWBY1jJA^?YjEqeyFvPqGFE=5bcZx1wYvZ&d9&O_hIR$nqr+B2*gk zk4mfS+iU!4JkSF*5)CEOevVh_FZoBMUy=Z@N=g!iAN(4X)Y7Ouz_dR9%PUlVqO)7~ zH*^7HJ7>Xby2}5=pU6MMFMm(Y@4QmhE$>HAYqtfWevR*sy#D^6Kkv>MFtK(10&$x( z6!Fx-_RMcrn7#awsuJ4<1nWt03g>TuEd-v~cy`$e`v-*S2v;K9fUpbUdjv|?fTxv* z-YN8`mQU;5dQQjhEBwB_j`%Ms(C=0`RyziKEXx^(rw8F9ga{zt(Fg(Oy)=uz4^m!> z9iIS#A6Ld4pzU?fo-kxT3?SI3Va6AV?C(BEk^Lr?HIe-X#6M+bBKr@B2l$1_{sY3p zFKv?j^?oAYYH=V*PS95fWh@}n5_L@Ol2ZIp22(Ja!1vGu^4lUm&J!cwms{k=xLI3w z?a_*dj!Pgnclkz@XduTl+&=2bHm%63E$cclVIk4|x_ojFWonBbY zWY65FaUs(sY<>X8J74S==||FRuwL3CX}%fZN77V_p&t{_UC=RCOlhC8xi!5k{=f1U zgUeswIs$uX1@3L9hSs>(llM8IV3fN-OZ89TyB1kZ@byfmuC~Mh@v?8>#R21KROoE9 z2zkPvjnsMCr_WQejY-S-dd}dLQLY3@q)SGBHg18S3)`OT%3uYf-z`CdX#)CizV*@; zFz-Ll518A<{;gbF=wS|mr*+;}JVkBwq8K9V*J-jAzl09kLF6x7xC>icf8fyMaa|c z_%l5oPe+^y4l+_}(L>wyA6G`zrSVaqZPz3yu<6GEhaFN zCDJY1|9NhSf)8Lb6OUqTQLI8}=7 z?tOQqH$e0K8ysZ{ABEC;VTujnMJmKkkQOKIepL$6Vph?8h4u)`e;#acu9M8So}{&* zdFX;G-yuGj!Nc=G@}sc_^OWdE%!m}Iib;*L)4_XYcVT|KWiX;$fsE)gz=#gKSeN z?(@K$C*(hBG+HVV{CU2HhQU9xSE+_Ri9GG$AKu^fJxXS| zT4gDhS?n?k&H;W|oC%pWw9P4L&eC6ob7g06PA6zi?QFlf8EL(=H8=YX37DHVSF}fS z0$!}Yq*v0Fz%i*?h+S3W(0>E>dfain3hJujQFIYo>CNuVF>4*@4t;9SqhMjKt*&4- zHAlMFIZo=7>gToEmRRw#qf#cFXg6o8Z7t|FqzI( zCex52&V$?o`+$OE{{7YD~L~DJGTqoeq(%N72Jh<*6+pz%U ziW7HV{>=*(4*U%BHmHe#N1iBZBH@?wsfl4pTnoPdJ-{1n97}W-%CfJ zc+#1E3wX5k($)gL{EUDF{OW(&S-`v=(w-^Xb$4XyM_9X97Tn&q2JSU9P_%9K_aBaB6D|Q-oX`ps!zw|;xXXQP(ADC_26nC-XOp0zxGEx zC}D)2`L*u-^pmU}4c}e2*GK8d2*Wp|e&e6EpPBM+Ych^!KLl-P`pn0?<;nOe@`Rs^Xd<^y z(xXI-lFYF)RwG=SjGW|fodwmfkW^*^W&%u88tFmEp`q?7iA(3j&AFv8%K;_5TKsAL z5(Ux7LG7aQto2G+g0-&hhWggKv&DfDB1Src{i#>^@iAbp1cuoxmbBWf zj*YXL-zVDt8@m=4t8p>{v7AXD>EP@Oku;FSub4*Cl6b-&IF(w+0xCmvDS5ou$wpBw zTxqWu@e+b}yr|%`9yF2ljUn|dgtP>y3z^R@Gg12)M%%tAN0|ManfVLAuj0n^V8 z0;WAYJDucwgj|nY3X&qpbII{F0<bC=}^3NUIv*vtbj=D9y^t0Q6cMA=!_iXE1UcWxro>gV)DbZ$75lLU(k)Z zbFjgsie=!$*A3Cf)~6oT@4zXf5q#}l1>#xEe=N}pfLNi{8V{2u*AJ^A$i~yLU%*wR(PCY#s`>crf{BQDdgW}oP%MLAmH3z|&F2^_2baSrU= zw6YbbRG$l%R83mhDvDbQ9zBRogrBivP?MlO^Wbk2Fx@3J4{eDXi7{>y1dm%59supK z=dob^S5=Q}Aeg$|)X2x5A5KPjeW3h+&7TxbuIJW-QUk&HF%6CQ5c3HCF&u#(nfUq& z{<|u0F^cq^%IXSOGg(sDuw*5Vb&#_of45w;6!|}tX9=HRGQ-|5FXY^C)`vRv$;rpa zBVRLYF4-%P%Take5}MGilYuETfQGbjkFl>CIBTUGaO}B5S@^MY+Ah+etX+?QW6zy! zIrc<{&hm2xOCATMd!98faDT2~ePIXmg?Tt2PfxVSx4{MCZtJDBMkc986^Lj0`;l(d z;^#NH&~_a306tTmA+r&SML-(&SCDD>*y}psYr#Xb#XwC)xn12Z&gsO&Rvzre zNqJ_r>^jyzgd>+)FKyAe&VGKt+AcnNgMj7g;@h}sGO3N*cXtI%D4I{KeexCb+Xn?W zF=Eu-`WLb-BtO2#_V#HW=q(VJaaFUd8|URT_5GFe-(AmJ$nh76L#vhj4E-BMc*6rNe-ADu&VzSn$2v7 ziGu{!FMH%hH+Epq8OY#H$rHW+AaVT_l_ z>>hIE8ZgY2ughVM2MyDGj*Yx6ULn(#-GYLca1>9-qJw70V#->JCKttu+g0W1RQbes zqX>3QY-;JQh-S4ca^jt2(QgobL!Pd(&`rOL!^xTV#6M|!S(IR;Jq)9g4VF;})sw*G z9|FZnxO64vZ9w@@u(WBJ_|rl2e1eg&Y%q0(+57lK!YrRXV`!ci@k;>A3=+CvEMtXR z))54loA4dPGpFb#3kgawkxJmvjujWkGCa2c9)6gVuuqaqHVHa*&KMe+X;NLWRh4+`fsvtN#7^sq7yS zw($MLR47r6ucDu-XA9J_xCBYU^{hx1S!9U`z6v7e&EA4v3-~S2pyvlDq>HBW{PT%PHyGldflNw}xieHNOZ3zED_zhw7 zVOiEyc;1ab)E-Sym93SX3~EZUUsguD#*m|WufDbNcofmWsmIo{n79>b z@THzjeomM!fl&lhaEEA1J^_EeuEW|P=oCnkvW_rx$liyOp+g)g!4zdT-tZWbEy`i; zl3SZ6nusr;{C8i8g{G!Gc+1(fobRk6Bp_qvK-z;C<8bo;B~j=yS!wUG(gu2${4#(j zL(X^zsWT#+Lkok<55C0jC>Nhv*%?rML}OHo%dkLal~u5dK*`s!s$YH=H5CURk}`*B zaAfGBm83WVPrJC}zMAF;0&YBd7$yU4uCe3&1n96@75$MB_K~QbGoIYKe>`M)vLlDF z`a*Z)yj$DvNYn{*1)isX#2pFnS)F;LkgOrUrSp0rVQA14YH1&5nY;^OR}uFtSa@tL`Lsg!Wd^M^ws zw%ykyma2q1LR*SY*#b_>eP6E6n0Y=mlAo@$vRM9bn@T6RW2%YKu4uji&v z$o8pH|LPk~r|RE(I0!KBE|Y+%!Ds4g`Iy##S%EYPFfSol3t;Y4)&G~-Zb9Sn;avaf zZ{_M|JQ!5{`KtPBc@PLIOpY6^9L;kR#7}VB9D1I(Xg3YL zE9MKYRQ(TA!!BhQfCUmKjIcGlMSFm}c4MEBi+g(y2phT^;>fPH;xL!bBCpu|%wNbT zH>rBKmkSMo?(mRo_9hdNLhpg;ehzy-g-a&A;`*Ae2r|su2_~RG zB}q|0gLtzWP8liUhEcwLz^{zBb1`+-uM0Yo$y><({!6%_eqjzb1Q5qfm}mzBT?~7m zzK!V^7aI0f>*8eVKFRcJ9Y`pXPK6f98hg8Mpu^$=0Ig@3nt&i~ev*&Rn1r!nC!{E$ zXL2&?!9DCa=DxQ4hh{wo5>LC*4m1w{QTfJ$zz}Y}em8{CQpl;8FFulAB_fIyIbqxK zgs(00TD66aixzAeX`_n%W+tRpR`$A!@GdwPHc@PgdRP=H5w~6yMxx~VvXnaed)g0<0Ag)-fG!`h`E-^b6hL=J}vqM6nrel19;hQ>#y; z`u^do?;pB)BYQ2&zk3lIr&@d-VuJ2qQuYpR2e5B`IqlN$G_yxUUkWrRBJh_~EifLKIFCAf5 zi0l4=zV9fXUawyi55gY2qV&UX{J8?$G(TV0aO_zR{Ks@2yj@344^$!-SbnX#iR#-0y)`qYZ%zu7aA? z5OT!>Ee!|*XrQGfedMo4DO*- zT^#L=swZoo3DJ|Nn~{LVYYJE$G)Yfwtf!R?42b!aC&tn?Ki6(XfFQOCoqQAZA>4ot z(#mee6;!Pb^_X)3=t4rW$PY!X*&d>SQwh|86KW{BpC``1eQ3cbNS66eD~r{qZBfF% zPZy{@4FQ#H_31b2lRq5Z`}Al3Jo;l24#&|oE6;heg7U1+Vq(mK9nD{Y-ABj+8SJ6z0@`y zp%kG3p<9PiTQEF(9uJG9x`Hvw zacp;=-2?Z|Uao88x3M=Y4iX9@z_u%l?Fe0|wb2l)?bJ0wKg^e{Gt}mVS0@qCgGi~ABk1DSN62j~oC(u4NC)r<%36XRz-QS92$vBR z2H2CUBXTa%$QL(2&%ebZ&9{pzd#^9Qq&fl|(!ds`5$p=!<_6q^)Ugy=Q>34nc^4w> z*#EohGss`Fk=-S~AWx?|ij3^0JR^If4jc76v20pXa|s>F20(O_o|CAw{c@7>j7jk# z#(NU93KPoX-8l*Nb~`v5{=UQZFGBTiyEyhmJN-MoMD=eb^0e1K(tqIlOk#lvLOTg; zap2gND@AfCcR4pL=spvleUy$1%OFB^o(!77G7Q)S5`cE52Qb=LkOa~}Yumr*+_I+& zci;J^ced#3ZkDnie}l?E+o+=iCYldJira^myFO8|*p)k}weQOwcp%GB+H;T;Ov8MkZq3Dy?~lL__~PoMT=&#nP_ihQ?m*d6H?(Bb4f(DfV&OCc5N2QpbPCslM^5umZs&aaxAXV5T~pqT&V`jtL+$W^>ubYsyI-Dl==TZU2db6b{0gGHmZ0C~b#5wiT@ zVpcYRhZTt2)R@`dlVkQ<%b3+bG{R#xfPZTwsIJ3r){q%@I9f*SeBY>@sYY%6l%P@T zCYt?zf>(&`)__5P2Yq8%ohv%E*?gRUW?2l};5tuwPUWF^Zvwv2rG9cec16`1cSNWE zR#X@~9yN7S<)DWhVwCqTjk5pv9*^>t7kk~CqtlDMVaE6nk1>>O#eIxdwX#jr+-+jV ze@6gK@4yQlY`_Ji+m{W!KBgZDcYmxbyh!P`w(b;YCmT5kK0x;Dg8YvO#`Xv3-n#?h$U>jCtibLp(LGY&;=2R(I_SC! ziS7>o-JeYJgLK^|-G)e5UH3rwS@ZnC&GVDR?loLEH}|cY1<7-c2S9T1 zJyeudmPcn7!qz)?+UDS$1*PJ1m=H>3T2G3fbJ-_h=o^K3EO#>G2Zgp2#s6I@CQbM z>=*!8KD?RW`%Y=4UM=4Egq!0}6$F~d?3=I9#>uYs(1yQ0ov-mrR$?Q85+*LWkA>Nw zvK(trm)s9uB*)+#TBT4*01LOiKhn_czaOZ1UrK9vymfEmsk-02 zjbvN5T}-c%e2q`oqlNQt1>&uvzByAMp0{4Yk6wYO{Kaq1REzHA46gR|JN@+cbF$F= zQ}kFUnD;QGf_dFu*`+6`3zO8{n7CRKKAa;!;zJi4!xwzDCeb*gmjnLp#5cJaf5-l_ z%AN}R7U_aj>*unqaz#{GFX4NaFTTU|A%3_yZ7CPqxdofF;6dNuA_DxfwzjX$Ca&Jq zBcjC&2`1J!BP5i2Zp0$hvk3vk>f6da*WeYqWdW(_z(^^|@LY~x^2*;S#H0MlEAdxc z4+BrAx|e<%X#;O&OCY#7wUIgmMGoHl#1@B$XRP2afLGY)Y?ZRPJwKy0(; zV)ees^EZlZ_T*U!9EOo{7)i41XaHzl+(*YHbC1Sl&hjzgG6OEvr?zNDWcrf? z(L6L1`BqNKSjrhS&$UR*%XZ4lLB)mPY6X&1Rh;U5;U<@8Z=Z zG`3pVM${HGzTrymT|wh(K7<_ks&h+Vy8@8iBB7zCny8%iI~Y4^&Zxe(J#~IMpBhdx z*QR+2iAB!SSVYTKdTwv|X(Re5RSMY(F#3xg5g>{-4BxFf_8h*mP2H?3Qa_m?4t*}a z6MkTSfyZGj0*4lr#*{eE&hqI^+PF=|+&F!7tkg^!$Zm|biy@mOHhh)f!1}Ko$tosXE+tot558`T)gp=WJ+fnv;gbU^UR>$=X#>7PS za|q{v23*&Vg%7<({V@E|0^6roIs2&A4dkk{vhJAOR2}XU`5vE&NXtqTNi7AJ?>!7-jKA0*xJ~0*w)-Z#$!)c@XzuCDIYNg^nm23o(d5#)a#H=06z^bLWb_7$D^^?7D zSZR&oOqGLN5Lly#vkbW+CB>^z>hmEKL%+~Ko~eHO6u;^D1X#2;4efoHCP)L_PQyyc zkt*HGYA9%eP&;TWFa&xH8e^nY%S`=Mrcc;eh4XgR7Lzj2q&Muo8Be+4{F15~!2bV8 z!+M3xH^x674>~69{TR8ZBY_L$TA9B6k(1{W8ZR2H=Az{0q9n0EDpF3-V#f}~d5%tT zIH}=0Cx+Y$D#dHp?jdwYXSor4mRn4)@}1>YE>UNZS+(jcaxVMca$V)K@gnVEA@&+v znmml`c(Z@Tl5XQyfb)t<2DXn-VVRzJ#M{Rt|V<@pgLNX zce4663Ewboyu9PoZ|CDTnxQp3D=qoX|eg#jkkIhNS>TTL$2T z37nIljU!D|hmp1e*p8fZ+OgiTKv3domj6T^e^uW55J7Wun=sj?@v282zg3SnU|Cth zK=7wkd#0=Wq!jJT&)onc*}hEw*>4W@R(S@fJY+3Rd5#45Y*j=k<_|o1kwwsEnB!mz z&w-el9#DiuAHj_yx|N(Cmo`tIKE3CHgaWY^Da$(=F?W^c*k@slm*+Ut6`^9?$jWAa z@|N(4o*U<`hYNP)Z9)-0A@p&P4wTQgP?YoLfpmH!5oRX2v8lUt7fd3wvPq!LmS0$& z8=syV3+ZK$Xy8jdHy+tRI2&;WwH?Nwx;>WdD}yc)@+EDAJyKG1Mx^HXnK06Bt?UtG zbidz#nrzbikm_nBh9He0a)Jb&i5T$%`kV^XbH`AY+N zpU%~@F2N(`Xcm-)v*^R#?}h_OouNHc0c!2+eDNVJ&cGQxCSQBBC0Tf-s^hp#T3HI-xm_BY4pG~*vOX%&1%B<*$~xdz zz(1~V9S&NBRj)jSJEY%uNy&;6_t?=*6k$H4OA{CmzLVieZN@!~1@^H~xS zNeqd8^x^aUevrV#ix;WilbtGRTkoqa{!Obko#)l)WO=*L6!H9YOzVwyV5PXi4Ziew zZ>#kA;@a;eWG}(C56FHeA=@Y9bkbHwxdp7ZBj<p55I-(c?5UF5#j>(#j*!dv_~kg=Za zb#`=D(V;%ie1az7jR0w374AYRe6-^e?`fA{_e_{^sTOXx_}8ZN^U~FShsViZI-@?6?iuYtqLNX)iYtp9-+G$$vO;d zZ*5$ySbQU{=&TYNI;ySCMQ8b&mR(i0Tk|9`?UNW{Vdslizmww@gfj?T&PTJf)e&wn zobJzEavffcOKZXO8Tm8KJ*{jyeo<5VB1GlX&Y~Zy#kKq7eDkE>J!mqWuW_bxc;}w~?8& zq0R5$-qKv>z^zHKHru=*#^{0Wtw&YDdP9dJtB~Xeon2Rzd`lEOa+udzA}o|$J)!s;%Wfcs$Sd0!V?QWz)JiAsW5++ zjgH$Pk|LIlO_buDR-4Ng=m64bt8H$fxxF{FUWR-P1#DJczxQ0=99%sZv^}X3bl8ny z3c9@oxC8)%?82BZcV5Xm$UeoA*Ookr9NKC$t{Nxzr|<&ZHR`n6JJxjsau z_Vlq1XUwcCc&(`W8Bzl-f5Sj9eT?%Xi!VWfkl%fFX#vdniVyy4KLq@VZL=&pW@%1h z`6wN?%(l73P-32@{jj=Pj{plZH|+~rv&m1 z`Y%p7KT7LqPW$s-ArM@SBUK!@uH*~~MC3h2_H*UgkCtaY0X+>ZcFCQ<$>rHk>q{P@ zh-+ziaoOhVz#;6jKvfjnb*=U&V#!8CV3YLP#O`@r!GEx8 z1r_>zgHiZq&y7IAvaAw%Xx%(>2`N`NPi`(64CWkOaPEUq)L^k~$eYq9R)v`s=$WLeqZQ@ zv*ox=vLdXY_TE|AS*cr`X`ldUb_c&~nk1oP>_) z6A7&X$>D+&%$G=KCwy{}-U9Boc8CXm97gobsjx^2Acw_EC@fDT?O-J@Kq0C;yGqY4 z(@RoNXvxAZAl&Z*nB40aZqAe3>j+$6&~3x7=!ZD|1t84MJp!$aW86Hw0})i5NEwXVU;a&~Zg&vi}LU6?}4_1vYT zu9*k!2#-r%zUWim%T_nVN;F*S~jl zvcVsnuTZex!7`^FztD?GAG`ZUU)ZJQF!HYQ2LkD0za~17Cr(%^u15v%k-U30`a7r<@eoP(R9TI zE|JT#kL-x#FN92PM{ymlL?dMe;Oo-*MmP;>S&t>f34~g(AY-v0VcnFiTxF%Ec#3_yqPOAxECxRs5|x4wu{Y6!{DEPV)0a?3SSz9QxPn ziYFzMy}u2GHg9%(>Xv-KH_x-%7@G(#7&gAs79cx(vL%Bl0FBzc&CR7-Y-4~5a3-%7 zkKB_&GbX;Ug67u3haQh8j9Kw`iw`K>poUK~E=&}6ewJdJ<0zODD^5+{iOCa#8Ql#c z7grp7N4nz0l$`&y|IixyZx@4_}`6@JBGc4eCy6g?`w5@DCX5N*217-5~By!dF~d*(7J`XCDO4 zR5@XJe@|o)X^j4r`+_KV-kMEN=kr(9>(;ylWI=5Zo?GNzWVbmN03{(VlT zrP*KvdVwGhl+PrbPFcj84}1*mzgShpqRGmsR&Uq zt!qR)>b@0$y$MA`F#jamF}rl3V~Y*v;F)q&sl|#1_aCnRptiLmPkit<#QwWNkF%_n1YB1FWV!=7&|~n98jXHwv6PlXqpcV14jlb>rF=^ zBAi!&IRmvt=mHP=*M{bj%#1(oj>JNZg&~OUaP~_-3|-2s7+~`(hY`0}hr2s4>~SqA zFj`%A{yKra;^+ePowR%Np(b7>{*!^CiuYiy{~J@$fZ%dF>S)RnN60UltAWUsrTF5G zj=(+H?gG0lOD~ASfZ#4W&~--4)bz@E9SwW;yt?jS{jNW2a_m{T`zl3Ldews7Q?VDN zPx>4r6~w=?*eAGHGIx$Ii~z(6Q^3?H+&Im`XP7t5sArVd8P$y2g|eH#_{yi$3S-aam>D*pqYfe{8p@2Hfd zq?B3~Rw`=hsDU_08aikWmVvcvHc?xqGidn)4U-JlTejJ*?dIn0*UEO=)=J7&Ed~ro zOtIXeveIvW8>7gJB$y5r zCW2Tet_GK(4i1P5B8ORto{Iq@2>LrQ-RLlSOs;f;p~(a%m2;tQs2ub)8PIv) zM>fyrG{NI-J0l?%fWoy8kOpO<7A3vKY&jyie~Wx!*Afb|fLA{;j{OLhb;q=;&|Ooq znCq-wT5rR`aIV1(uC^i4`d@(##Wp=Q9lI4YFc5WX7H^CE6{;T$5wcnWrY!0UEP z0KBe*OA>y~4S?50nw)4&&S@yygunH5Y*&b=i?QFU*b1835K* z_{_eY8=2ETqAg#ckxARRREK-D3BeV$3nE|6yel&2W-!9So1A8e%sHm%#G}_nmRYUI z=^4>c8)IQPN+umvY`LZbeMd)D{){GPil&n(AvuK*q_T79HBO(%N%=p`X7gSX+1?=y zGE(M5mXS4YJ*dgKUenfa4P5k}6c9$k+z9uI_lQUYAbH8Rs=4oulN za<0_mT%^f~*5urw0sZ?^B4=ZZX0NBri!5_VL_HLdecZMVfq3v8kuPtsN9KI2$+6!X zS;nSW>`fZr`_nzy3XM82idl$ok2ljMqg z>sHMoZP%3fT}k9yo34t?snh_v?up1U`I@(G(&P-(ti`TPk@eV~jLbQy8O3{=oE_65 z-@5O2kvWr}ip=@zh{&AHnw%w?wpujx^!sCEJyuOU2kRos-1}~1PR~0dbJ`Y1<`in$ zI-)6a`IgAHwmuV?^U{@(Ijc1=R;DSFl^*%l5>1(HHIZd1Ya?@---*oWqZvi};m9&q z-xry~u87Q80=8NB0k8>zvGAOSH97T~-SnuY=8@|o>lvuYF=}#JHN@3oC9wL-a+YXvZr0>X)8vfOidsx`Z5r>0EhW0Cdj(BSZE zHErFispp}~BkN(Bb5P6A7`rI)t-m}SnREM%fgG+`OIMt?Qj2wmkxn4}fD}6xHrz-l zNK=sJAl-qq9LbIJd!!eTb|bxu^f}ULr08+Qx{HvmM4E+^hjc$uG13!A&mz5!^bXS3 zNS`20L>fH4ST_o38q&>3OORF~l_5Qi^b%49(tAiJky??A*W(?eX-GFCEkRm|REG34 z(o0AcNbez?MEVIyngE-0q*NpeQZCZnNUM+(q-T(JB2^s4-{B1<~5vlj&V%-p=(MTCc^O5dCdJsuQ z+Jf{CBrnqYNdHDUgA_NVST_ji8l)SLa*%$FNoiO|q*NpeQZCZnNUM+(q-T&`Myf*k7t&WqXOViP7waxXx(+EFX&%y@ zNGp&$NPk57JJMT7hmlSo{eToZ4f_Ep1!)S>9HcvtmLs{5evkA5(r%=8kv>N{jTD`M z{eW~O(nO?LNO?&2BNZb(f%GiW>qze)eS-8gk`Jjb7?(ql#v#o>x&`STq%}y7A^jQY zRiw9(z%M10#`rWyz@W0Cs;Tsot%&V2G^G-PHdot_6(+ed$I7-nONuB)&e`DlDSr6? zWM?1Akg>)}>q#69=2pv%0F4Y2>Ac8XI%spOk~5}*ukDbRwkuifP+yl1dXF0*J%IjG zX0$g~jW@Zn*~Lt=AwEEOq@l8;%!r3pZcGljW-t`ol*@*o6Qqp;M>f1-@OSILHeV!< z0VUmmK9HU(<$}z^pVw{)B%d^n>K)DZMDup&< zW4pHTu?od1*Q#MUM~iQH7Hi$kb#eUJBXo|>e9Myq0#FjXRBf!l;Qi^xEb)9aBrhmk zQROS#J|E(sT=_u*MR|jztd+g@cqihZ7;wggM2G}J&QqQ>&FtBgLKt+-ND>B-_$OYd z3Hjw$V1|>t>7!iKEwAFOSlRue33(P&YC$Ap8Er=4>&y7c z8z(8)HhiJKBRg!L6fH1(yAAe4=q;b$Wt}umRVD;_fW{$kqxV=kH4lv<%Q3jXsj(ab zr0YDh4KRiC#6V8RJTQ08ZZ0K{sg_31Y!kXuni;o*I|gB!u7+5=ny-v0RDny(kH3H0 zL;CmLV;xUUNByJs*q;l3M*mu_>bQS)TfAR}c(ejC#MRgL(MP~91lVvf5zxQxBvJz0 zA(Q^J2-C3C(3x!;SC9CzSsvV>YAD2vZ?1+kSzc(AXAG0)jBV8w?Rv8>c*vG!tS{`< zOjh>PqZc%BYfiyGA-mUk0K#D`Rnd^9<@}s3Zo48drP}>ILahI(T>D?u2|deE z(&sXD@f7@D!Q%w5NJ}Y4%Ri`F{y2{+dsKufrZ?G3%kaV+fKnU$bHITNa5Kc^+yDI~ z!2%tTMo%Bn)3lv&RI5=TW;UGA)aS0uv}C%07;4CHnyL4E+j!PqN3)SNQDz0)>dGc{^5?kNT;| z5)=t2=9vE&qL_pEDLzFC8bSRnvSs&JN}(BoZDs6IPs?Ibk02vUeI1&Hwe09yXbJkC z&VF2Ph8xfB|AS~yo;^~rY$z~Ti@lpLS?ucUjCSyNeqOvM(PyG9*)HTBTVEfr*^3vC_*5;Dp zwZ`{#`Kq!J%ID;gs>)d_HZQxh;YSDyow17u`xr2`c3X|E4Ly+OK(YGpH?xb+W9^HU z4YGelW+q&j=Jq_lG7Sn5%o@f+F{W27^lI`wb6`5AR_4bC#iv$Eq42|v8%Yz_b$-mc z3>UO*RwPDRfB7d*wj{_p-zb{9c`W%TdEGM+xy#|^x0}TzxXw>ncOS?dp#%zJj1?VN zlW}SYrfV{MDUOFCY6nHQy_(ONBVm9JSjXjd)!Bn4K?;c zQd`>fCDfL(zVaJni2^54K-Re`5YTGdS9BjB#U%;)Si^O?_UI`vr_(tyU3;k>T_+VO zypA|_7C0m6!?K{eN$t)?yRN;|P-ne|nHk2O*uXt$(JK_aQ&FfP zHa8Q>QMD|^%lEE?#~nwSNfPdEg?*!9sr6X)z{u5Osi1HlmVG#m;1~u<+t>}zpalG6 zSy|qWPkr+I#9i3RIv9TPN$@DB$7ilZ;B>4E!u1Z+3|*Zq?1iyzyor63AR9)38sO92 znR|#2W&Sha2<}@#mqqIPu-y=g1idp=3s&P;BK%D~pOvT&)md>|>MQ4~JZq%lE=AX^ z?27Gh?E!}mJev>7Y)M?!=@Q0|B1Q89cohNeJnnjWQ21BAnpSr4r*NJJWp(#Xs$Sv! zW$B-e7Rt7w^=7toETJ@mqHLp5zVW_tT3dFv_mmGlygcp(e3LEv%x%k7rdal*tl8sj zGq@_EfNoij>PnyYn8E6C??NHpMOjdImgiRxh-L4Qu~+sW8+Ka>l1cCKnv_D5)Hkyk z##-OvcV&Jpelq07A)pzs-RES;PcfO*=U};DIfYQsHBd1; zMY{;4&O1L4+Q`^y<35ek$*u(4_2fFWDff$Lr_9v={88%u7SE;b9Xw|KAP5E;_sl|d zR0;j-5~usUaTsNN@trS%A_1P*M7^}YHe-j!vQxGsd6cIq=YR*Em@TZvy#e2_+o9OJ z5l_@ajeE2DRPEkMPac}}6bnPdG7t1(EidADrPr+U6r~w|S)VgWz%cZva{_F6-Z|t6 zFaRj;Mx$2Qr|ZiLVl5Afh6kaTK}Enw<{ym7CC8MWGdCIr~oe$~dF|hWHz$90JM& ztZ*1$FCGG*ktcu_`BJhPFnb*_Rx*u(vr(YK+TeGb+x~-f;^XSUdUmp~1cJ^v>9($` zHGwV?J&`uKzouU7ZVhy(qUr)VG^q0qVdq+E1zV6hSjHO&bZXm1f2XEM?wOdG0QTYN z|B0^~3H?9)4&i*q73y?d8tmQW=$)eQJ#&3ryRY$8K#;7^asZRLj-O`_Y#k5u8$P;E ze+Z23i^{J+RB1if>D+cbl#d=0Ls2`qGT6u(G$PitvlT_V4exf^Zp4~`P9i5Y zC`QZTVHH75P;-Fu40juWxBG`!1WO*qbAXw z>Mz2)Hhx*6{Uiul`(_<%uz4#1I=l}QYQ2qpNdx{6d4FO32l2HPA>ISaDeluIFek-P zS3r*J6Xnw^VJN7xJVcU6l&8vd5JW_SD>9A({YoZ-9>#Rdovqn$tQnzuyDkSLaS=ZF znwb|RVN(7`7<%cC_+f-k{egS!SO|yrHE?*ZC)Wivqhv397Nnct1+y8(j(yV;1IB|G zzw1;)e@*D`;>-Wn{w8^{e*1is6F09hh*N`~U2 z;fb&682%`f?EN2(;}kk5Y~n|>v$aFe@f#5T1}vG5P-YOnbyYQ1L7szaxo3d^m`-pK z{L`eur-9A}Ic9Qi$9Q`REvwkf-vl@bWIBvryPY6DKcNRkVs{6I#A-9YfO##Bl$nIw z+P(+2XwYx*qyBCysFSZ}!=D2y>Y&`lR--O(y>e~D%!Ny^>~?lz{pf&C2!X`?gU8=) zcak4XcRO-XDaH?cMZTfr*N5SLbpeK6+~~?T-pYr0>GI6z(w|rcA_;vTOgFYy#52nO zEd-hm90;NBhB2wXhQ0$l6rW1K4iDuQ!xRm!Pn)@4kHmQ%_bGb%sLV19c-&U%#`O;} z!Q50b0LG(7f!3AJ^CYxoarrdRr+WfEOWkAnX9hkeMma8AlK}Tn}VDjA6KWNuW_7Y~Y?ilDu}snnn&z1mIv*1OiA zUv*N+>saPowib>n6(u-CrlbNPXMxf(79ZF1wrI?a(@>}Ermn$RDLg88c>Ru76eS*c zY{qYo!LcUIm&oufjrWyP57^&Fe1~7eC@>3D+RED2;hxW@RIc;qm8>V;TQYtJuYuZ> zO5Q~medURG4(MAnk|n#S&ng|J1+&_afFE>n3iP2Sz~|ENKKb#6-^9wxQKmPK$==a6c$KcPs;|Qk0?4Xjn07-^y(7^wu?v17}-u_r!ZedkK~xXZnfQ z4tzUNmEYo9;3c}R&v~;qW{D5s$desAJ)mK__EM1^Qb`N07;5=#-Ij-!H400hmLL0P zh<7?CfmDA86(?M6aVzeSi8DD0Z307D+1a>%(F4prFcIy~#OcI|E|pBic+^F9j=~~y z2p}HGP#X5Ek-5Hds)QMF^(Q`WJhDCIw76n3t6lqOQ+GqhP+p~7E2iph@RB_4cC0pu z3BpdV4`iNC$U`{3X-kycD`|5ow2-M4sjXyZJ5eBx9E@kfYW!H6T7jK0G>1)9!1}BO zjPQ(p)*PA%Iu?E~{)?hTRdZ>YH2sW+Z(nh^OC=Zc&hZU>?{ys7pWOBpc??+!z(4oO zXzXT=k}8~o!n!M1bo{qqmn)7D9Ida!+Q}S~vCU&AzzYEln3$1Nlic4oH=aBd^Dnis z311r@;j7Ji@#VF=7mKEFUi(9GT7tr>5^uBT`;9}F2<4)WN&c!ur3z)E>b|J5X}oxi zE$KUs_RwfZ%MYJzJq))2j^XNSwerFQW?TA^ueBJ>UkJ_iY_41YM+glCkf>Xl6~%xD%-0mLz=ExarKGs@UT>B&E+4)i4*nsgK4UpbN$6HEXQ>NzhX`pwI)zpMQ4C zR2v(Bwi?N~4xO$$PxYge3A79(uU5~GaShg<4M^&+xt!Sm1R^ujr&3_U#Yv(MY zE`g&%XN;=ALO&#zR-i^;ho#)N8#zf^ac2&*l-H}`y#)~6=O|eT?DCP&5P%DG%SqAz zkPk>1(2)S6xdp6l$eXMUX1jlFa|sRW#4k9=0) zUz~fQu{eBR2#29658fwTbV0Y`H8A9YEadmzE1e~$^v%)mIKLwbdjx;< zI_Df{jS;jNXwC|)R#sr=tAP-71Z0+zWtOw07I^B#z5AGF4TEr=iYnPhS$!1xK@DG3gp3oCJ}Y}@ zBWOT=3E{}raWgrqf@^pAMk2d_dYsdM13)OmvwwU^2a9uz*eZpn?P zP!IdVY@wV2{aW@Yo*Q8eMcoGDo;ZJ^*MV8XeT%|q{bKiF?vKZKxD6U5iS|c;R0NAK z>(&rvhw5?(MF!bRF_HGogMm$w5vfTP;!u!y$ROKgZ#Xjuy$-8?HZY~Azy6o1ANK_` z(VCeY<(!%;uf=+?t1POwoqe>#9eCRzza3bs-f+UvYj*r1kKh3zPnm7xf~|x3@{OYe zOBMB#z6$QAD-q95K7_!V5B@Y3lzPmH6zEMi6hhU021x2qk5v`WY@T5xN-8^^?LLa5 zjua4Zl-SsoSFfX!0a{gvWmYjk5*L5cenKtVDgMwLBX=p8o#03;ND~0M03Kn~nMPAU z+`)1MIzrB%=&c1YfL1HJ_tR^2O^+4aC^+tjd>$e@Huwr6o6B|&;F>O~oT3>cRU(4JaS1}{3m{s z&k;BInfxX{oqpK0A><}M#>O^3CY*w59dmZ9@nd64)HfpBh~~@Qg%KP~4ljuB=V#Z; zAK@th%trRBUI6@5Fb0Ut(iw+Y&WA2jm8)%pBbhjlgCaTgf&$Ga{DRYjUE6#Fr%D_A z1-VYFi>}IFNdC3Mn5w{!Nu9P)yVa3UGIY&Z(84en8+vJ`rX*lphbkbuYa1@_7ZuF0kFA&3WgdTG3n?a{VtO;08V zdH(&aWQ~wsOABl;7p#-uR(E=FynokYJ#uWMZ+6-U*zgmXXslTdQ4!;;Y|$ip{~c%Vn;W3#>$F}6j#jV{J^VRd&kPR>tM#lMJR=*2nR zvDez78+v!#^RgL+)_NQ#eG78!S&Vr5B$(!$qjiQ3R|LWe*YS0(#tE*oF@+tjv|O`D zrGzm5Tt1!pb9Z5DTEY#E;eIrWzXqm@!4l2_MUW`R!_39#7X$Oh;K>+r+8sC$#MG!F z0fNfiJy1zLuVj35L#Mrj_*QzY)^(N;_1R7lH9UFmi^u8gI<_t!Q7;y9`Q0x#{wu=A zPhA(|ze$ff%!Nzw{$<~BYV|*-%?!7t|&fEmq1uHii_H5qT&-@h6Hx$TnOC)8U>j~+G5?bAJ@e~ za>;dTx+%&rBXAzMR!-0+sTLP-z~ zN;Pmk<^>7TF_8RKL-_%*iRpMGQZh?Pi*ZeU7(sC!cBFd0>F4@VPZ2wsbCtER=JQ=N z^i>Z&iJAwxcC*zLN@gm5SCo#=)_w z=;R(}&s{`cD^^n{(T53@^N_|UqRbh^Z+M4jlS!6JOw7tya|e-WIbZv$wtUQX7=elX z-TD3;@^NSTQ@wkzY_)`Tf2t)=KW&K^I%qG&EfesoBbeiA3|Z&>S8k#~2@xd&5rtup z;C&mq*%Y`#+_$$Qs(Nti2p7sY^M1~K9`#QT+~-G8z;^#`2=EL3r~133SFh-9KX-%J z6EEQXAnhNn1I7t|^%#^KNv^Yf90MZBJj9%!BXF{$r8WF&Qz4gGY%%mV*xryZ?)!(~ z-{_bpvoNoVfeh0ZcF;DzM--hM*hS<2Z?t#GFV$YrTH}B&>LQHvU-cjL4gH1d>(@p_`_Y)*I4$5Zx!^1 z%9qwyo)%df#h*>$&t~ywtN61`{Mk-_*uOvj5scc>8XXQ#aI}q9_GIN+WysdGH#ux549n-d5PDq|~XlO)hUV5V|>Un>1s;C;KD`wA)Y%PI5?Z_q6?TXr~lS_6V|pYsSCiBcpE4&!eixL+2(eVo180rkujM^D#T36^GO`#59e z+Qv&C8>0(DFx}w8i@LyvnI_N}9G*u7UG#!Yf1V5>*0jL_D#Fs}eQ@!C{9u+N$50e3 zA7VUcitrc@ovYxI-V3SeYV~F57gE8M*R(nEQMX3ePX%yrl7)}$3_pm$dxxK;E=%6D zn#T=*)4?G7&?q1j(36jg7VvW}+K5-$ z;Q7G~#fXQoDdjm6T;8$lH+1{YG6}(fRN@7=p!AudQ94A0##q7vf;o3&xidK?)?6ow~8A;|D$*SqgjA2$~P9mGUoOWcAXOwG3 z5|~-U(x_4+QFFobiY$4?y^wUL87Lr=p&FJ~h+>tBrV#Q_ftYzC?hpU`O(BJET+s`^QJP z9R2p9l}3XzPMCe6$5@K?94zEZZ^5XbO^y}SY0R)hb+ObbQc>ZcyXwz}VX_NLC9Ve# zb0$uI!XLgs1AIS@3@S&FWCAg4K63dC%LXYkpa@}Q#>XptZ>3>^VJT{^k!Aqy;8Dd0 z&4-eMlBtyoq^N)JwA2FYHEP%qf7cg|Kq z{Y4`7xB=&aMSe1rgO5D_2%^4tdU~cAT$Q+yHn?hxsLoZ5IEv0!&@ehkK?gF7Xc;QC zm*GAvDr&gRUlFE2G5mziq5FIDIo|VR0D6vkRwc-Fz=l>b{8*=}@HStCDCyxO|0)=<`;__32*Zn2xP?|h zjXx=nx}J}cKKguV65TE=}cksr=9_5T|b<+8KCv^n>!I?Kc z+Ud*-_{Yo#;2)sFl=-JT^G|jG|J_Xa$uRh59R5#s2>)G9ydVA-1}FZMI`Jp1Y)lyZ zqf9vbv;SfV)P`=RO0rqV5(xOOy@wiA{>n{ZUZw)R(OA!8>FgXFR^dld@zy804|64kSf03juP#9ccXe_`R#1AV#G zWnB0_1a}_NVEh#HFsMLNS>|PnsxvRw`*o60ziM;eae!2c$<|S*G|mH9z7!2TVS-k9 zoicWZ$JxRj!53VI%+*rKANO}6qD<(Q-3_7(M>ry-;SNN)?=U!SGh13DH$2G0KbRV##sJ9Qp$`)?5j-Le zeL8n`0^oB@14njbuKWnOE0JE$TD%0hNe20B)5T@h1@p=l+y%iVM9+r`}mvw>dMRnF*Z1?T8 zW*CZ`lQFoIzjFiCk$9{>*X=l4GYyDS8Zt&czTeY}-OneiU3il#gH7gLP?O1FO$KlQ zJpeikD#NQgmtq~q@dY_g8+y3vu_8&oNO}UyaEeMzD+q9T18{&y??%X>YcgR64W(Y2 z(HRY?%`W=I{T`k(6SCZ1s2gO^R^&u&QMR8%q*p5JpIvab^+8;e|iMX*GJ%993>Knm=%UmtXZyYO<*&FbC8>!qK@M zcaVPiFFM#JIyeEZT!{|OMh8nNdSc2Um4VX+{tY%@>@Mom_kV*_lDFRUp}#}^{`?}{ z`6cFyW*}m|utuHD7yb1A@_bPf!TI9n6ZE5eD#?G^3h4!urB1%}qpxg1V#z0Pf|;3Q z&h%evXAjF!W+$>c7ZZj}k|pq&GU;MlRuzUu{mUWl6QHL^MeHL_UR(HH(Xd=TB-0$y zM@g+9enXBy-tRpdP5RG9xsooGY4NTvVqIUx_NtWYdNp%xd{i@xuG5@4%6jyv!hf;5`@JT1h=VNMpD$zSn226S2KMl56Gny^V3+|HPROgUxl$ z;LJiuP)CMbms;EE9p#8?ts3PpY#-$uO*v=06<8_fa166HwXW40>l_G{A~3Ge+Z0WQ zYp;;AE968A%)EG@^K8DcEIn@0v^Yo4Nfs0NJ%V%2vUKC5X-3M4S973HVxAT+J;Q$v z)I#r5Y{JCWs#xblxeC{3oZO?-Dd{|(+KFa48cc+K&K@|5=m=C5t*}3X@_`QJ5vm+4 z#&J0Uky+WSvyG$&1cugh91+=IRax1YEu0-j>PiT!J3B#TTy+3Vvw2{|D=9V=}1(MAOK2tTsp|0Hc*jz3{TpwB7y*XaCK7sPeM`fy5*}vSN|6kB0VT{sn`ZI-SEJrlj+@TlE0zPpf!?FrcelhD) z#TA}=1M*(o%O9iiQ8c7dlxKd#u2XiK`#q^- zC%|8Jj-bH68}aBmhcLNY>ES#c*76)M9i2P}4{n}gkV<~dbMUa7KlE@ScH~&lDGTYk z*$1FB7fRPqxnBzFrUOG*R+>LLQ>s${f0%InTEbH$mp*AJCx6+r;<{GZ#&7F2pbBJ{~ zqUkZ$d6>7YKtb0zqqP1!9;DYE&U%iA2c3*RWIB{+UkDbBs2%`wEBz1ab=#8xGt z819bDmChL1n`3Rd7`HzBkpe#(iXkF|bJLUT`gbZ3gtJ-afD&#Rm-jhetn_7qyJ-Gi zaw8fM>=j_je$rJz3gTw3qrV>4*7k}uWyo51IfRPS6q z%pV!|)BMdd5j&jEUq3w2{O!h1{4`f?5%ZT9n7^TQm_cQ18O@A3eSe`EJDNUTsJrRI z*{{R&g-_goPA1Op5EDbAi6dqVAESE+c2(rW-GDqXU6{Dvhfdsjnz*p}l4!nu9=u`y z!PMgar|@?F>7Na6gcbfj4{yoBw{N_?%x|mN0uRns_K#6yx_4nNsOeRllk0I~+K)4Z z#QANmvvGxeI4?_ipbeSGO8tZ=sU{!hrIZ#ZM z4V&c~$8u9%h_{}&mS*InlD!XZHOnlgN-YP*$5Ez%19zZt`{G8qWCBZ@CDDt=AEK&-8 zfu844%aeG|zc2D%0}MD=h?k)MxxFU~uB1FTLYhr+;+x_A2-;onf3$wI&YWk0TeD8! z#c8x#Rd|^#-~~?ee?5}mrNIv`$2hzkC(rxM9B7WJ%5{L1V+1R;9w&hdRm86B-vzi# zI!WI6+k`I1{FZ2t=q7W6^zh|S9}$Od=!Ki_7udh$%BO|%&V91YpsXFCJVR!5Uy6v^(*NQF*il*WJKdZS>Z2^p=HW zKz+$r49XOG^2^AzWBhC_(JS;P)Iax@Rpg&r(37Ci{d!y-`smh>Bkv3U-0;ior%2$Q zTb`37uSkTfoIDT8x`{E4SW+=K?fd~L!Tx6q)qeX%GNVZZWlpL=<`s#{6YP~lS8g1H zA0`yRJqp(unv-Ncy=;KJD)7?|{u7#@TT>>k3OP{6c#bO~#P85UC8#}rA?d^LYrOgp zMjjHq6A&J*HOMt`pA;{4{kX!3U{m0+YI*N@faNDYf*~P(@1qzlF}FD`PN^X$8)U>5 z_5I)E{jd!F{;&K;kh_@YAjbgp7oXaU1q!MlU>+1@2S@`noM`j7w{t2XiP%~m_tX4K zvd8V<55sV&U6JK+-^;&^@a)}&2ans%KTGh*R^1Jw^%X{WUA*~>R6?Kwl_v7ovz1=y zO!u!huE&?%H3nWYs2Kc?bm+)~ej~zM^*wTlb3ED8C~oS!6#=2h$5R1$!ObwFL<{du zzVWg`1M-#A%dB^5vaabaS4BPa(+e;8Gx=YPRDrHX3slp-0$rE^jA(`$^f%R2LyIp> z))8Etk+{bcxtu0SaWBQEyq7v8rW}>|3bS%qk4Y%r7A>tG1SSr}vw8z|*`o9znDj3- z$cetf2~Y)uAvRuMPPYl=!IG$eR+G#ZM^xxZWKZ4ml~3$0u4;7eB(7>vCG)i`ngHds z^#Jl}yq95+d!=}}QjUJbKs%}B3J^CX1%yexXu=;bK*DZ?)VTNEKlp6^3FpmPMZNe# zBb+C?Xw79$aBa0=qE}@NEE>HktD-&6d-cIYwO5(b6@`{YtUP=1yX$BooWG&)5k(t% zz)_jb;8+BZ|BD2!B;1B^U@Or3gCv;o0yvdAPv&%bg}ZrH(p3k~IX3VmFDXXQ0^V1# zczhnLYENyAIdlQxotNi~l?$ia?|{tBw=@gBhtMr6`{xxv)cjddN_j`=v&>zD&rSg!#h6f4@&JQ=$0(XIL*UPa*; zkLs<_RYcSXt?YcGS}B|>2A zIM|)o9OQ?Z92V~!@87qyu~gWc9S)m=hy6mZN%gY&p5d@rza|tmr@e`97dUi%qmJ(? zj_%;(+-Hraoi!h=$SYM;5!_<3IC8Save`o~Y&@Ym&HHW7f+(@u5L!pnl?!+31QUGU zQLC&a4mXcjo7lqaOMFw&tAL|}#BKx?zvhqe;MBTSCYY8%Zth!Z%2D6gWDK91ovTCV z=8Czo zY>h7gquO5w8&>f5ZrcOCUEY51?do1F)(zZ=_@S>OR_Cr_5r{}7D{$W9e0QCKV<)F6 z>^$S%MhcB|N`D7TGf$0&IM|bS%5|b05e%V1HL65E!)B#7HL`|%?h{Vnn4UXQZ zV4jtoxVsOi_BI?d@$5s=XUYRl5nO+`Jj!l^s9?Ek6@nIA0){?Vyr-nT(a2lGS>6wp zp71r@T$T|x$zoJ(6t9D7UTJ1B(X&Ps%F$oacgHG05{8B9i%Utq zALWD4HbNFU*e`+ZNLQ|Cm9Ya4+x$`rQ9wolF0!A-V(gpYU)$dN3;>S*2JhXL_(cmb zvpmM4zdJ;~^NzkAhhAaZypz0yEF6ux;^UvgrGok;IN>NyBHFH`%>%ozajDMN`ZMXS zzM;QleX3)_w%%auQ)kF=N9g?$7t6COcRIpKjU!?kpqdaFD2kh^-T*bPMPwBWf{o1q zrH6Q|&TxCe55o2!-bxI*DF{rc+*e6And=>~bJ;&r`|EEB?F$tm_{IdqBQmLLtx*Ss zyurXm_WG~?gp1wxe#izT;+hI^5e%<%juDV=MTaDsok5{arfjH zNN1Bm`j>|9q5bV6`Wuh_68^GJ3DmPSbeN*EG3cz=RcIesz6VAEi?RDppTMe#r||fAY*KHXF0V2vxL=D;C4t%u-am2e zBcwHpHJmJ}9Ep41bb7%(mVZvbr(!9A z3qd?k_!M$cIs$Rp6kfn)RV>L?cFm^-^b+10N1zm2w|gvzFaCJ)t+8NjdCE=5CvmVs z_bMQ-{i;7ksbm%9a0w4-CIK}VVLn@eOaVOXI{?pzc!j9l%EN8kC&vK$CphBlSwH>} zwodp66i{fCqGz}OLe;Mw4(q7nH;$Z39ux2U^R@7pNI4LyQm`f^nZGa+pEZ`+WE`L{ z!aP8KYb^En^eaiL8quC|DqrIshEMvHwY*Rd+Zz6#ha_OGN@!8JY3#I-+*C2(B;4KS zhaw*%f@;rjcw3Bc3KRStey&6pbKq|PJgsP6GeX(nvPe~1S^qb$AQ||*=m*^GAxo~4 z-82ir?H-BB)smOQK;mk|S?=LW18Q`Bq}&B6=iTWXoAV|} zGKly)P$`CFI}=R%BoA~b0YjMy+!eOGgdfIe3P91J-fR*d8Swd0sXox)NR| z@hFw-!nCU+P-p~#zDoIw*L9{T#G!UAB5Fn4y+0I<5G-w>m&MW{sKeky5mG|x>pls3 zknO3!d_KvSv1&v#UvI3ZWa7WdyjSTSUWL@xU~*NOL{H&e8nv1g>MCM8iIMSfHQq{; z`xaUmnS-PN5_oCz@X}^Wy<qBFfOWw`s%DL_HM?VJ;iyTz-VLN zp05KDazJj2&faIs$z{KriM^{BMPZ+l9N1Df2v;nJep3BuY}|cH_7Mc-fji-I*y+#& z8}muyC)j0t*HSy|o!4pC^2e!r$I=fne0S1!53i1G4;E1Nj0O6W+>Zm}Oyt9n+@!_P z>3J*8v&ol8CHW|(aJaFu4>DCNOK1ilJJ^>g)D%ZBFvlh0%bi36DyQBc-gTi~cZTPX z_77ZRV;qV?CD^tGtefi4*O{hfK1P|ftYOJv+KX4)8LS<6r7c)$viE%nA|Y}|N>!lX zke}*&jlZLQW^Z6o)39y$FN&MC2!brp&hwPhXAK8RjtTa^9EJ%@?7=q)6Ht#iCg9tv z69ydpCa^)WV{jxk5Hulgn_wX=F%%Tbp1d?^@XbX}<&qQ$7 zumjVv4@Y>?|Z7Ry_xnp7YB)=NW5s5TvLd{mk(-u`1?6Qzkg zgpg@s53Sr=?^Ab7bd|Eslu0|N@AL`HX1$rn=$C-azj==WSj>ogLE zeoGBJSR;O5{SFd1Z&0$I9`gxQO1KkaD;u7|fx6L%a{;Fujg!w9jgs$P#{hor^#x-B z4tfMw^Ab>k0&&X?I|eyp-^BYm7*4bXVe#diIKtp;)XnIkD8WPqeZn?^umI8Bkf$gF zM;9?|(y=W0Po)#l7?;c?VXvY%lau><>^!Q$N+~Ud5fAmIy9d@tKdkA7V!i zeh8R`#146Oxc}S_BbY$1xK7<0Bql(06FuR{-UAv1vD6$UPNwuEGDRxUW3R})0`7Wt zL?Q2M%%plj5WZC}wsSw9oFpt2r#feX3MW4{dAW6pjvW159_Hu=(jPkNgN}aqHG$$_ zRe%!nEr$z(=GQ?6J1bNHT?bloh`fi5Q_c03{m4Ob6Cii<4wau3JBEtMe5^=i=#Kcv7-AvAh?*^yLSMtx?0o zq=PBqtN1MBfm(&$CR^PM>y zC0MpYl(vt3Q_fLB4T{SMdpFA}=k0++$+F#t=Ck+Vl(4dohZA6%ls1HTNAc%$spV5BsX^{b#c;Gi zWzLg#jQ#Leh_C&&NSNJMDlkogx@@wCe(O-!N^v*TXdf$Zu(+xlq>}si!-x))Ep04! za%T=SwHn!>F+C#5JwT_c`j}J_g|_5Ogc5N~;a)qh=Tp&QzZ9fCZVy)Wh(uEXkH$0= z?P4l^;#1Lvsi0zw&DiV!yaUx(>dXa#%Q7I+I!aaLcdaz(B=M8A5|>XY6~JMaC%*sFdf&}lE2xI&i- zx&TcV!7VZV;#*TskkG_8MwiqTJ}p*Qal%pki+%VaVX3fW&X-xyeG9w*X(@h{1gu{(81-pr2+KJbNAV)qO90wZ;S9 zW96R8G9%_}Dduc8<}CBP_qefF?TxOpQOlM9KqgOiBEVXve)3RqLPRTHg7037j1#Z9mFG;Vqyh|;Ji2RHlIh5$6{W!@5Ef$*wb$J68NyErtq>XigG2Lu&^i8t)_fxdY-SGFD;}zHw+TZ&;pA_5Gw_Mei3s&hqIs8 zRaPtd&Fxxn0&WmrJqp!GmnzG~rWl!jt9CC(9x$9#vW526es*mRXJ`!amDA*ao++oM z*jKRWg%sZXAT}exx0aUE)jXO!c#s{R%oZ}wZorX0qbC2xKJcy-G4Q6>DmNEF^ zj$3;pFbefS-!xI?ph`>(5UzXykH7S-&;Rqll6RaJQ`1yYu!j3kgIfCg(OpHkpbDV@ zy^918ylXOd2v4fMzXo@&XfMr<&T*ft(7;JC=o+jycS%2(%Vh`SYYuzK#tl)#W^t`t zpmX*I8E(W?TITzQvMBs8RlI;>K6Wa+(+<)AjJ4Ya9VoiQEd=38_zZTnaY7u!`tGC0)fzzXA6bB z0kKPg4Me;GQGkL$h$jl(A)Y7|n^lTX1KG8#|Jn+=WKgF4D>_hC#3SlsEhq@Nj`~0~SgFDWR=Wp8 zS`W+|Jnjgzeu$0zmPj=cXJ3sc_z{BaK&UTp2H~z@;7%_Xj+2n9FRa-CRWjF_ojP0@ zB=VP4?7axH@^lE+Q^LQ9|5Sw3iMdcp~(otgoEnVqipwUyZjwV!9ppwV;Q55TqJ=;2S@+ zc^96j8{fh#Pi_84BS#R|*q_1V1zX>{8}%rn79S$lBfh!%?yJFfN6h@n*Z3)ceTFY1@ug_Z5qQY-Eg!ZEeFX`*O`P9~dnZ8*8+4*K zHVI^x3O^dzkG0o9(Xz*ceK=l7+|;L=6_a_lEqK8QNmeXA;f z$!$Y&HfdA5>w3gc=^331P#wK0BY5914U0?ja-?cr_+gx znA|;%fiJ`@JrMWg3hODK3`jM4`1uRUTCN5C&<{t@taDg#ky{HPebI!TaF=1il-oD2 zC63cN3S1}((D^yj03Xs)&MSP&qa4nPzmQ8{(U; z_0KbwqaSp<=yzHjb=uX{VcTaDH_J$nM?3tD4{?ZQH?!im;p{1UJ768EaYa^Z4iLAx z+?gK(eP?fDQxi#=5Imx%KL0JK&}~f#KvoLxEnB$qFh)-u=b%c585;mnOvU~;UESR= z9p$_(jCugqnO1+}XYdzRTfO7 zEkIs^Y^MllP;8)F%K%P+l{^h8jvNDg3WW-wS9$|7RSHiw#0?fmc{Y!qt`KPzF+<&6gvH~WM|95}HM&K((x9D`BebAeQ@mBT@6$X=& zC`uswNox5@Dz8qAeOlm@u(GF6p4RTqDA2en(2WDYowCBoP)>5;0`I;T&{)F>SHjvJ zo)35ivw8a4K*0L|#6+Xi@PbsN#=R8Z>8aYX73huF^g0$>*_+eBwERJ0^!OamC%i%R zbSe1`g$2z7t?3H5ZCFlv$nWs@E~-xJK{hbzQ?BCr78O3oc1M3E0?A#>kM}T{C!Otq z`?<7U!5cO<@FtZerM1Ce9>SbGS4{+`<9_=!G*1C2zkjEH8HoFH{7an2M)h`akiCbm zG>y0Z0qi<01y}WYfP&jKEsTQe)h|H7g-o|pau2qdy6bIMbSnVfOB0VkbdORZP~ zHw!s%IG2Lt#i~m^1{cF|D;DLlXJ6q~;~4&2dDbwwob~{Ak9>)MeV9Lco4^4(p=a_R zpq0=DkJg+v5qz?x1gBPJeU$^=^_(|W^>3n9pljRoAeK|E<0TO?lfNd2AD{YOBHoK6 zc1rl`#9Dg@Pc*MlPZ6=hN#L)Jbx7>gzk+(gh@GkGyVaWm@0!!U@{x*|%GP?+6rB7b z4BGV|WYso0fJ^ZWM-O`bgV>7#mGF@+K}&+dBtU35iJ|sX?|gtye1-ZQUWfAXfn2WV z)L4ksvG)zbnV0!1X`G86#a0GaWss^8z=l#Ruik;khL>L#ry_{&VKyiPS_EeZBy?AF z902+8&*@5Rz#5JVg+D9ZA1tp0pl?!I81yNUe*$c5(UFfkt-)0usG;qKuo`9sYT(Kz zw`RcLo!z`61TPXbW@R~>;ng+!MfMb8iYojj1bwk9KcE(|*M23d*W#5_7+Pca<0+@l z8je>1);jjhV-bANpSB4;C@(Hpp>9zD8alR>b3@<2OO2Ou)Gj)*;HnQW-SjM)z749X zf!5TfLmK_)$%sZvyK3|v(dah3)VLkUR6eiro`;C*MubPndVfa(UQavH+*UhF{!jZk zyXo%LPepY1qyOt-j`lpm=jeyc=Yyhe$4*yOmBTq)WV;*yk%*Sxh;%ecr-=Q5WNVX zL+Uua34}5YFOVB3ha@+H?)QInp2iXO?4v@?|8Gn)e1=hgx!F7rolrX?0-Zw5b;UP^ z&)bdc-LXWk!_oOh61Pj4bTit>et&5fmzFgfdqAgc89FG~!&#g?3>t;r%f?2cmk*-b zz2sPV4%~I_fe;h!tg?5BZ%XzqPxgzrvgSb4D8r5Xw$ed=(nGMhJqgqkyJ)<`t0d2( z1dkN+7>AX@`<#`vd8D#gR8s~W}*Aos*2vaMJ1o) zLlssf0p%D!P_S<%l7S|s;K>#QMYik&Ep@*LU#|*!h0;Ng=c&C zM+wmPqneF@Og~y7_|Jw+#Canryp!0A9EU@SnrNrV7xMY$QGUlbbd})hjLs;}1kX~# zqM9`D5pnNJ<9t1MjWOxS^vO3`&Q4&9{(9P{?vs%AXg|1aK)_emIw&mO-~w;fF%cIO z=<>m`#0L4cP>N#5K7u+FED)PLeU#Y--wG4(YYr=hVgq%fI)4$F>0ws~t@Zr-87iw> z5C%Wl&|}C2zWJIi*+H#UekWQr9XhkxyOQ);tc#hj1q*MLJ1J6h!$poMCBf3&}+3PfKnAWzZr<1?S87a9)8X5 zM-{gqkwgKmMf}qz@D;RUPorsbR=gwKHBsl7Oi$O#abQJ_hTyhiLxf9M^R+NTs3p8U zJAn;_9ECgi0RvX#^!4Wi8p8v}ZwcI)7F2-cLTFw~C4V3~_aIA?$I>P*IZnt3cRsG{ z*{Vy!be9wC@aax$COuDDu!BtEFW~3b0zVf8ex42E*l0*hDY!wja|u-Axscm&8|5MD zLA0X>WU-cZ1i2ny-%1q(gIud}Z$!B6>?hyy>5x-e*(r1#ygbrz8;ovq-Sd+DGyseT z1RAmQchlGIT>y-i4|-s%P*yRD__XxmIrK`-N`Rp=**PD6ax8v`ryuU78iNtwZ^c(o z2hKKf+g}FlHO?A>i8SJEA36l4A~<#2?auiZ;N)!9NZ^___VE7^;|SM9a*dOS!Qea) zK~w2+%T@RBBKRAB!8<_hQpxuK9au;Z-m>H*=!!`HxNpH~u`c#+{Ogiw7#1@*s&Fi+ zT(3FZ8%ydO0gQ)lkA1LqJ~lRrVnfW)+r?eUeIU#H11eQCCIC z=nk@_Zobo{^%PegMyJMavCR*%Mi-~0N=o<}iNX0e$oiB(%v{TU-*A*TO-o!AVZYWt z!wJqyri!x|DEAMjLM+cl;DVs3&cVjT#4^Z$iRVf%QW4%ea^(-QFVKy~X($G&5=R{e z2s?3y1ai5JkW2oPaAovtAde%QnaEqR@w0D=b!kWoksegji}+iE6oC(*MgjHnu1$ux zKcL7s*^|3}M^GoRQ%Et(5r?U}Y0PL{lY}OHE2bl!1WhsRUietU+H`>bL;Fh4oW3*K za(UBI$sbXHz*9nL>;iUqhZ;q|POAHdOPmPz#-1Hb4%n_6O)Cki24NOhztKdhIr<2X z$2UKbPTvME;#ME7wxQ1cHn#3v&XSO85yiDJ3RRFrN0>Rt0Xf}hPLGFQIamVnKR-Y7lmmW^NTH^UKpij$EPeeLdjV1kis!5c@JkR+!M7$_aaT>k%K`k za3^%ovhl2h4ZO#Q11ny~@jv%>0DteN$rBaya`S1c&gkTviG$4bkr6m)+T=^gghg}4 za#sNA+r6cdYf+i2?NaGsk`ubxu8`If|JYRlA~;SPZIiz|8*bv@ZZX%&zIKD;%{B&= zP&$fILs17rc$T1&AgMixxSmS-r(nEE>xoqjq)XKA^XpM-EgSVB_Gjl1LR}$6LM>9G zUpP9NuU2Ri6@LCVzTr#n6*o+BjG7j(+Ae}iUpg%u(U8Um9F`hEPJIE5ib9-#mpYl8 zIkM?sKoJgBR06(*T1y;z2{?c@MbPIVU%%C%_Y*88C_NnJ+~NZUWWMoa^9iz+Z0R|CR9 zy#enK9skOYz-ZYUZ?EQD0kZiguE4*~_Tv#B!nE5sKI6m~FfjZ?R2$@61MIYim_Kuj zz>q$>jg%&0U>ynJXD0ba%rMnt3Xywe0%RMy>KGkafdxEV06ubnW0ah5e`)jR2qeEg zyNSGqZs!_fYO8z$T&#gS^EEq@?ZZIB2)}Vzb8*fJ9-6=)^V`AqKcr;%;GT|qU`;&) zk7jUFH?;O{@9hAH=t|iHM{8Gt&V`FL$4u9`X1J+qm8LgG*JTXNHmaqtJy6Vf6u9dZ z;^2GqWtA$Sb4voa9d3RoX2-)`_L3k4?RxO4$9DVBO%g>lJODDwcEJ$fu#J(g{79f{kM zV%g(aQ{=I1ueMa^*nQ7o!$W~}qdY5-{M`xWp5(lZ zFg~No(2uM49mT$fOYKr?wdENdJ2!P4?)J}sk1#?}ZbG3PIXf8yW*pl(k9sVXe2UHn zs%}g~tsz~j1D}%X%aBESDUO6&(Xl|6`UKxQMl^UvqL(E>B{^*36Y~QTzZb0j(20l6 z0eZw9*$|lghUmNm_6Qs-2Pc05MxdE|p(W$0NV3}I(QSAGJH0{-=NoVhgWb9j-6~pB zp>wR1$s5+z6w5LATd=aBZx9Fqur}jJxXrbfU|k0v&rTFFr8tkVDD=U5J_?Q`u7hqR zepSXA%?F{tG=Fo-;WGUsLtp2`>E?sZmNLsTrIu%8xFY2n23il6&6s(Jyy&f_A^y5e zlv%?w2|Su&{4Z|6dEs$xhJ)~3C;Nf&MMs_K=2a%=WOP=Ul_bwgEdIi`4p7||Wv+J) zRg#`?RVA709Q_dsFy*kUH={4TU0#E^&iP%@nrCqJM-_73F_f1);C(2NhbaOjc8iE5rnK}KWrj7y9gGHHk{WZ@x_vWiIMY4;o1b=P7_FV z6aHH0!RW~_vR9w4r|T03=jZt|=gpe!kRc2Zm;r-Ch#EC0ny68t z#0D{3hM*XnfFxQ4)Owl58_EpeB^aCx=Hze`6I#&E`6%Fb)v!HI zekTMrt7^z)W~ZW^w+`;?$EMk6RRfliL?^5)Zl_)5h@wiL`p!V}rM0QA(d)(-;VB9) z4FBE)bgC8^!+|i+HJfJ@rv4%Yjv;9Q<~7G8!2MuT^8GfebVt&C>3*&WTy<{#Mz1sP5u?^Wt0DT{f813?#OFh2zd*y{S{5ZQTV{? z^EL@-$xT21La(m`%hlXwm|b20oWSx`!YHj`PT=il1@J7=?g^h}MlZ&tX5WoB>7-wZ~%#kN!oM0N~q z^sh%S5(JM$8Fs?kuh>T;q8YeGUy8G}4JqPt*GUhUGjlkL=_&b}6U zL;toS5K?CFcUYH$_3uOJANU|?(^m(LW9inK`dUCQ+76!K^_MmqrCW{Cddp(d0rge? zLdI#KpUE;#B($*nW7d*Po2rFa*++i{j8$l}3iT`tKu!A$|LXAoGRut8O%QXMq!8aU zMIFOd0HhdSs>jYqmAR#1FM@DD;cTuCs6Hb$0}NX*VXU6xZgED=qYh^V$K%?b!A%%R zKn-|eKLiyIAj>tz>nnzHnZFj3T@0wtZAMx0J#P(BN;7-rt+}i00}SRJ1o@+lsUgDz zCUYh`ctJ^MzzTx14Z#kOP!7Y_Yni|v{)zbly{MhAvy?aBY-OuXbGj*9!2K5jyAd&+VcQ6 z7dHX7znXslgGH+HDgbgdsmv1|2D?05nAYX^o$L@>MOg**c$1(mB(c#|6kRNas;l)H z6tgUTs~#JuY3@5sb3(N+tzCZr&25U)9G4>pV?wyLF~*I{fQsBBG{+m7=pKsZGLq`a zaq3ZPuR0u>+ho&Rvn6rJKy&Mb=HOAT`*DXCGZxdTSuPEiH8DjdhUTHahe+0uP+o zyAap*?7buO_QazOy%FR#y)EcKZ%asTPogv0*p~F>ohbAM5;LS@AT*kCcP2JKaB5cQ zXGDTVIJOZHE(dW)e9*~uZ5u&?!~w`>rwZ*&?Ld3im=5hp|Ah7yIJCDUPJ0fX{d+&T z+B?Y|>)5Fzi=QPsG+|~!UWgxr+!KH35T5<_|9|@X)%3%ozqdelhoHX`GX8hzFSX{s zq`%SA|5xbmyWaob(BGd<>5Bf2KI=cDzahW*Pw4Ny3;tiAzYk9Cg8n|Ef=brD|8@Gy zYVCsldc+@gMSmj>SpV$B56hjm=5#D_SOvjzx|B7W{PpCh9htMujBPdyj_&o9J`N86 zaHJ;Ty!?cVA~qu)aA*oF@~B_*aw)@-e2_43_4b3zUpg-ZX3c!*fj_%Qim*t;ZKuU@ z2p*AGpP*z)*Am^fs`6nUA0dsHQ(y*w zzyb97{uajwx$QV&$lZW2m(21}wZCZJtmATrA^Ig06lP26-b(kH?cK0ZpSU+&!fwjv z=DK0A+-5s*-CA$SM&yL0f+;1!364>t1n9}~{&hwGc`$@wuA{$T&+B5=^bGhhAq_+=w!{g~>K#*5Q- zoJApaHxF0til}VF&z&_mmhskv<9gqTK2g-)6=}_m>`OUB=B`8ZzhiqNvS5LC z$hNBYWgW)IFyBt*KI~cUO~<*^MjZEqZ&wd|b%qPE_NI9zS3pD4L;bM<%Kz@l#2;|# zMfLcpc@tD_UQ}$IKSCWb6%@G1OvU+kYS9=syrcR~f=jy^yae_|TAxnBSl=(#SZ_f;h%biYzKJ+j z+uR=c7}>6Y~jc&9oE!456)$i(Rx@~NK(Tg#)VgW{6M zIQ(e+XTQKWw-`%9_yEzU4iX8I;aHZTgn5}S_zkV+>EIIFfU`<@Y*}I`dmg1+ z-Wo6F!;13jCi%sT!o*I-+9Zwf0fMEnv|KH*uhgm4ZhT4o0eqhEt4&J{5e#q^XdftO zP9K|Hpe#f@k{C1`bPz$RZ9gN}lfLN;8b16|A8pp15z}?S8Sy+^J0qq~ixxw2*BGm7 za0lI_#V?!0LxC-*_CIpie5jUQM<*fOQ}(*!F3J+WJLSm&1jUa7T@7w$CugKAxa}ma=q0Zn#2~4kqE?@i_1SM(YpCV2d#n6ksW!m#HBNmrpo;m9H3+l$ieXMHfN;IgN119yvX;1W@nYd zDh+Ah0ehFqfH4?tYWJ(#XS-c(p~`f17AxICo7@jW{w8d)z~hi*8~==%2!(s>nlHOs zZaIkv#0HE9cSlhp)tCuu(a=CEUEY+z7FqrKyZ*G$grn()#?<}H#X6vJMsVnTa7S+6 zpQPb7OLyZ))tr3;{JH00b->OGp`X;xFUXOOJ(}qj1;<~|1DHxMnf4krxGfb2I_Nh{ z?$oRKZr92FcKW1F_aTD<7Oo(ZX;cItotm@mG{+-Ay;}`!1{85{%VED zA<4>z+1kdXVkF|wunJi#U|;fwmY8G)!N*1Z_R4O9>-QoV$-8(Ali+u7+-NRq0q=qF z`a3Fc684CUcpzr=2*g?&z;&@QeX`o~zRVIY;$(H>Er*2RnOi!;P~cabI4mO~;#hJDwqxsY z6hT5Q&NFa$l49UAXG%jXkZGGLZ#f`Frx+A>c(q&+<7JvvobPNn8vyX+m_^x>ev#~@z-;cl_ z=G1y>F3v+nm421C1h=>!P6=Ld+Y*!_V&D0Q?*QX2c_GGKBZeO+jLO?EY$moMnG;pz zw5Zs!w9b>u{$j^{hJ_ecXQ-w|2w(bC)fsJ z(TlBrx;owH=BS4QznuR& z;Fopy@Eh9R0e*je;V|L%{p}s#ck?|5z%Osq;lb~PcMb(VO?(8KKXWpycg&RX3eeyG z$;4M$uU6cF*|{j)+%gZr=|P0={|7{P{NV#Jry~)5{rq79@!{J#0P*+H1Autld4~tY zU2kb1>aD5#f*!St+gY?FtuTvhTceE5PMl;dj_YQ}{W0Ibk@mRo?f=c!n8$W<%7kgT zFtZ=*PY-UnY15}Oykk6v)KA&Y;Pu;}ZJFIgi1;7;KFzjE_IDj%{)fJ2xCAl1oeful zi`tM}sKK2arXJrzPJ^262<>PxVoBkCGFns!+e zun!V>u}I|cG5weAo%mzhgZ#2f{TVTow1qJ3XFKO75IfkB@%#iE)ObXP`T>ffP&{yEK zusLH-_jOBc#!d#^&s~fAqBS!IS#HKDfmj1aI1C`5j$)sWWUpc9j@?d1o!Np4rljL* zt02n422v=5_Zy`P)=-fE)4-oc-qyR$ry`_W`|;g|j47P*`Hy>fLP zZeT*Dy=7&DK(o}>Fz%waL&rM3z@99%WfBtesh%irmcqLMiJsHJ0Q%>?2m4*KhvEJS z5`#xtQ^Mb1h)AyI%cX=Fz}Ds6FGM^>5A-f4;ZI<`zv}7V|Na!RLi61UWL4X2-r?T+ z&o$q6GuP^<@Bl4x!TpXiQRN&QG?j1w}c6n!LNbdKxeV$lPyNBbx5UVtL?ClCY66xcoLaQjdpD`W zY=SD$?@2U{;z_fwVFR#iOjL7@--q*`-p(f-X5SZ3%Y*381kAq2TwC;BXlU-bMEr3t zBG>kFr|`^;=Idiqd^pM~YQp^E1HVsqpCFi;p8NKs+;1mWs99~q>h|)<>IPg9r6p~i zpmgd+1K&*rL0`6JTPn~PI+AoH7K^3nfC@I{$CzsXbgLL4%!`%49T4YPT6?4|CHxPK zAjjo?ug~i=evFLc$4Cc1kR51^oJ@5z*av?GS(Tglhgfy!4KQNhG&+^P_QU0?M`r1w z!Xe}3Z4=ppuQ0Z!O4q7Lc&p?j)oL?ey`KGW|8wpdQEY!5@6SQUTRn18QcFKv-j3lu zTz?cV|KE)l(Re)(g~Yol)4ab(mRe9h)*EmvxW}}c`{0uajTu=i42Rp*w6SsXaK`0M zS2s=*<6xSDdBCrMT;j!9{!@uIaXN})_9SsBe0BIQUjO8BHt;?yojbI!za-v*SpKWt zx&;KBGuzddwR{DJKQ8-SgZbWS`q(_jTfO_jv>BG~g zkPEAQYO3dt400_nAC~0JT~plJ@aH1Sp}fd5rE(->j6_Zmc=%BIf^a40Lj8?$k2#7C zsb$CoVj%^{MR`uL$v@n2I>N76B5U{#_5&5*;n3mDjvuqN4xbAeL2Ut4c3el_; zAV(vR;wSq7d<}O5{C!jRvu(P4Dmt&(dtL3T$ooa#4e!riIWV z!z1T=Qktl6MdV8n+|-9RA}UhJSfixSC>ar{cN-82=x((o-S8*1wj>pQ+_fc${y4gOZAo|hNvkbM!=E0t zB|Y%RQ(NM}pPscPJ@KbkZAmY4bh-hJ(`cW8PynMdjFJpqw@?TFddz5l;mTLTKg)ZC&2a)t5-hUAdZa8&G4Cx$V!+Nn}s!J z_Zf)Pi5)>>X5_1s@Q09=%&K;4K0`$Yto!&!?b_ECv*s_^q)KB&%A~FgMY?6+S(ZN z=urgkSYzH2T$pPd%+V;y_NRD^el|KHIx7mfIJ@W)W|#Rx=!DqQ7@du!&lsJ<8WL+7 z_cjx`|2xktXYBJ+iq_qFqIGxisR+f{JUh$0yBb%<0(lUVo2GHn#I)BcQ`Aipx5wi5 z(joMx%oLqCYObCeaCxKmutVcU^ONWbI_N@FOZK0(o$X`PJqWm%H2pfxMg!2 zXlnl$SPo&coNAV5Km@hiOHl^K#z}lwbfQqec zkk(E|Yp6#=ZII_tLFO;faA}wfxNMR)#0{7>yuZ0^%)IZ=LN!v7e~#lWUGR#jEQkVx z-^VGIdvNb&19#`Ohf-r$#UMnxj2>1ASd$0*s(Ue~pu}gDc$)6H1lRo6bkF7X)%45k zF>C6x*MFoJ*k|^T)Y3I5ZkBi^*G=`6o3q{3-=qY)^}zuYq{jXk(lDpAsNe zN&2+Q;9(5^?dgp!*9zOo6rK!vALDe?{tNg=c3hG;&%gl&L+hlQyHGiDsN_Md0RRt3 zGPurtRkV2Ecg(n6!T^P7h;rk>$sMM>rzHP18_JM?xDWiziroy7O=lcc{VYOx(v&E} zoRx0kSnuUvm~(N4OvF{sa3T=fC%tYe)cZKFTVCgXz1IJn>905Z&mieZpmypCLz1ZQ zGqtNm243?a_;jbB-wqKl49x%uLxT_lFIQN#67@Utd`A6VuByi|dIsOsHF;|KaqpR{yPn4ADm*~;00fc(9p~Zv8~5-BZIlmOfdF=Gnd+8nQV?61RiJ%Cax;0O zCaPy&?tvs}j#c@^>H+y$A?SyjuUmew`LSuh%RJj zU`See)o@oZwWeX4Ky%oW)*kq>T;+biXi$il&Gb_swOb(c zK3U+F-hYN-mh})`l;P>e4+C%(i@|j@ItPE@zjb97?ae`ZFl~#S9Z=8C)67G+eluD( zrJ<(ceCb03zvXK792@AYd~dNn4Z7a4-mzQ0=Q8YrnpN>u92CSmaHn+O2L0-F^!R{r z@4P(Tk0BlU@%iXPKZdd&reH$}AXT(lU?060HZP{&u|8f!1|)Sw))`c188~W}z9iL7%rwVkATi1ERIh)nMx}1RP-YkgwjzN4ei>nl`YiijV&6@^ zZ;s<;$SfWa+14YVKKv>l5@wV@2&j8^=EIaB6NDIBxdcyQEBQQrzM09BP4T!wKIEss z3?~$j83J0HP%KzLgSc>JKvg{10z05BcxGCBQ!DAp>Z0%Cnh}aQ07F2g(WW-q%Cb?y z!;lrxye5v z7`qWrulx@0rL+25Lu%ArP448OJLJdQt5md_Jd+w~=Hi#pkR_Qujg>9{*;whuueCCO z{uwJh1pDZG^MV3HyLpZ-G@_hoxH_`1_@-GGjIbeM2yxIWeQXd$2NtW+ne(J>svDaG z--!*043x08LY3Yc82`J5yD%cVBTs z9orXvkz(pUwr{rCA{O4tsPu_lOg;LfsWBo9Z)mY*0!4Q3KIMCtv~1M)%669V~HCM%-))ZAsoQkh&D5z zT!~zPm3Y{js__NA2qUene+eV#Er6#rBte>fEMhPd7&l3MSUUt^)muC0FBKY~n@lv* z+7oTm$r419-!D092vP!D-rYu;s4&gag}J2*w1U~zPLFfj2^NVlxfXE?Do`jokpo=x z*WeAL!V2~Dpp>qgeE|Dadr7_L0tQkG&(P3Ht{IqQS@)qLr{=QMwXm?AzmW;b((%m* zQ&w8DC0LDxt-_p<;j9{eL?r6U9_8S>L+fY`C-8dq-0g5$t(DQj!QUP=j9SqI297!7 zRR9wZI=ibWFfEQMq3OjISKW3o*g8@HlM31j4)?1_g?uHLYhz3(KeloeDyb;flQ&sy zfVVM_txK>?!YWz4n&qLQ7={g4Y~>2vAY7VWP9aZzc`8Av1@=_gjunyENmI`R`>ur4#zeNs44ieUF|}mPl(RIbht)^E?`B)EorHH<#IcE9 zL_63&KlTyDF=7VJGan`wa0t7mC{EZ<-OP@1E*KGKC<5G>{=D%>9mhNluFBNd%H4P; z?*6frlu?mQPK$6An%2s=WJ<(LUu@+v6sS;ss4!X=A`FQs2mraI%p4C(CvD_TefV*q zqdVLGzpV?CRgL#WKEA7Z-*M0Yc46JbO~Sxz#QB? zMT+jNu12l22!dG7`lU5y+C&&uImFo)3XZ+B&Uy zPhx^NCe#=)SQ6Iboc76T-8+2hX`M*Y^e-syieV)foQ)LFSXfYCpEayl26TTP~C@?f8PIXp4+=5Gt-S!Yv{#2SfI$d}%F_^fdWzK99O0QZCc z_O{bpZT*GK@(rSA1=O{LIMK^@XxUp6#@t5c%m8D)9#^!Zspt%K1n)^f&Nt0^T6 z1fph2ERYdL!}q};ZHDQBL;^G0tCu+3k}UWz#7gig0fA#3^8(>2k#?9h~+n_7S;ud`aY901Q zp+!l+yLb)AS#wUhVkPaTPFRBdlts-6namb@*yk4n-)7Wh`m^XQ%y$nT9_%W+X_`ph zXK8rC7YD5vk``Knk4>oGRy#W^*rB|BfAS7%U_pGb9T5bc+X4fn%5uuDwp^p``{*=B zp<&v{%_$2F2!O?$dA=JcUyXa*ygnW`l0BzoKRA!*ib!$MlL?*;%FlIY!q{@P|5dye zOfrT8i^vg?f%||6LLy3QF})}eSBQb+v^YNeX-6DSQ0`wu)KR~G$e~<~yiU)zp{ED# z3@bg!1cHRD|KMCE?N(W<3b$fP)%7vH zeO8_oPUJgJz~gA_bHLCB{jwuG4#rG7%AH+6g7vBO*bdtBS#}2JydF~voM1R9Jza8HN&cRGjTyE}3<^F?I4m4YS?M@v@)IS@c~@W^!(8?PSP{jrJtdsh=tnA5 zH-23(oH?`JJfA09ry~ncWLql8g{4vf=uwO~+Yjb>gTlQ7>Nez%#sWqb3I4OVzPbtw zF}ecnR##=>>UX#zC;Scm9$?c?<2dgNsS$N1s-8V}vdX=G7i)vK_}q<5LKUuz&C0X< znSsg57k~9a#o2I$%tI$}ECBt?-MgS3%|eKE+A6%`^)Z8D7^;G9B2GXkhl)Ov9-4XT zFAqReUy%jE^&oG#vJ41YhCo2Df1T z$M1m~07nxyF398oslYRotlZ8*Y(zUtMWzv6hNBOo>SZoJ!Qs$jYGK89dXlihqi6pL zvUbY7RNOu3fx~PwXUUJ?+N%IMZ_PUNL}Z9HxF}Phtq%42Lcgr8@t zna$&QEw%Z2gLM5lNVJYqcr=0%D(~CfF^F(za1|rTzIkn57hHpMOuB|foK{h*@c>!~ zs0)5CM~JO8xI+qh9AKCu;jR=MhmCD4oMWDk)1Mn31hM*;TcuEMEWokPidz37{CTd{ zzu08p$%Qz!K!`wy5LFp^w}+SttN{BtoLXR!3a`S)Y6xy{EVlsk|H1W|QR3+%r$U>I zlP?GmW85(A+fU0WhJgz{p{X^S=YR8du!jkd*7>t=gba{o)Uy3-(C$77oaqC88ddf1 zYB7)&5%A+VC$l9lz~9L2LqQvN^9sz=UYmL9Q@02Ub2|_T=QywQg`i`O&)Jhw{o)5m zzvA`p!fJ$gtv+lI3)J)nI2%jMQXcr!A?1Ys`8xj-wf>c+e;H5)K&l7;KaB9p>gqbZ zz#{X?i+N!AIL7(-3VdBvZ?6UT_k;&_ zNPDtbKNqeD%kz&x(zClq8n=PF?y0WIaUlz#f4OXRb|Di zN-mz!Uy8%Jgdey;79vPproMR8X*u{Vh#^?m{gIU5wj&-%QI8HsHXxzL94v+jdIUUh zM4xFybLjes;OxjD%d34fF^Q(*(u!`~M^VyPeL3!ol~>?bow@THs&(+fi2CpV(-?gl z{g9kN-e@x}_snO|)D&-YDN(GinKHz+Gu3sjYehGgx5nVJafRk>P@Jx;B~S-`TMQ#-`pjO2H3C?Md`DoX4#a4(hk3CHz(U=XDF=)ds3-d@+3_p-i zPVfmBzQmq;s6!V$_)1t)b8C)B{)D@_`=@ZeY43qRBhq5N` z4Ai+&>YF3&X|sAECNUmk%A9s*BX5EcB|dYpW%wu4uGL%f6pCSStl2KTtzkwDghxhE zb)_kpJ)(Dlr^TUo4`x*;l_-t;P9p)el`M`_38?0a8F4bZHD`M)_%c{B1s~#Y zZn3!sr)dcKVXh>^S|4L!0UpxWz`_q?aenY|R+jw1?h*K4C#Zs}^mRCau-ER(acK|e zI^CxF%`T=C-h_susIlRb)-j#=L?*!UY(7H zuFxqUqV>e=HkXTmAPM9!kKU zf5jPKt=HqaQGUr&_(oR-O_g*+*S|5g(v4TBUk!gy?}$IblorZ|;Tvt#mjtOpm#|4;MkXOa03U=J&e;ZPm_aRKk{Cjy&;JP~ z8!;mwbZ%6S-2fa0s5myVF^;ZI!grrfs6Gn^VpsP(WB^;uK7{zN4RXXnEZ+3(61qPd7<^ZckYn-Iw z1p+3??+pCn37SIq99)~Q@RnO0*QhaiCtg8PBe@o}duz(T&J+GaW)E<|>eWP1TblDm zmjk2$^~cBBxQ55qjT)1X7RE^`z|k!+8HX7sHw*y=5KbDo@y?81j$3nlo?72ca<@z} zMgCLI{twp_I1}_hgmoy5Ko9&-{p+n%SKFyr|8V2Nf!Tv6II522rzNX8q#4aK5ZN4s z1FF~Kc0YN`{U{Gfh|-)A%gUtc@&$xAq=5r(5VV_(aE!y=K$vgb6j~fV&OgOQ$UAn8 z9ws`+I+gn43Fx%mmg@?k!Iu%nX5?AX9oP~e|G+!hE)!};0tM_qyhKDG7uPJ^S=ggQ z3-Mm(Bh$jO8nii;p)AMpxj@{=haanM2gWQOd@mo-m?cx~cnigZ3fh9Ym*%LPJ;hm` z&`$sr;bCh0n|(0+45^TC&>&QguJ7YIM-{N4ElZ*r-}3m+ZNE6_=(aB>y`I zHYdzNgFLb3DFeucIU+@$n@B7G)t}oG{IV>CS>)2#7YTU+R0_IVQ<|SaK`_0iJeWYFb0ia6yBVPJ3;d_fSF@7&HpUUiWDKHlk271ydhb89IoKa}A z>{JH|~jEm=i zmrCmb-0xlLtx+=c-j^VBsJ&taY^<@Q3((g-?6m<{E32mJJBnZw*rnpqya<{y9Q)e* z4#`|)8%T|N>-Cg!^?JNP{o*fL^t~Sw0(t5l+}gy}uGitn&dJ<~0i{?quOE^R9Bt|C98dW} z9)T(3$2LKNhWi^n*Uw@B57VpUpn^`K3Dk$P^3_Et$J-*7y80>Drq0dk!AanlpoT=Z zVA&ky-*d*LhiLk?U4M zU55A+Jdhi@_wP8#s2@!EL%kE!1hhfj?ql{T92B8r78!gRn9D2Oa!GS8JGVlx5LT{yR? z#5oi6A9ks)`lFP88F)nJy)SqBNnsnO)=-ueKbbTezNYJlSgCUvNq zaVsiDM!3=~9k)l3sv1|g54wax`09<+FENS*Mk!N?dLl~O)cWD6@uKqiWsk@u}?cxft?{eUz zUjcKDy~#dAR4U}-TEJG-!(&k~{F2e`w)RTDEEsGipkAeW#KD`4HyCfv5BgC@q3Y!6 z(6HdTp}qVY-4QX+aTzOVqJ(vj^QWB-c5z*#$-}jgxtV9f+-ufQ95#O4N(D1I7!2SL z6;h?{UiOde9=}$%d(l0bV_T5!w)8!qyJtiH_+#sm-rj|}?744@euBAog=b0<<{85|GejMi(jNVD0ycrEz((U4#eb%0+C54-=E(gquovqM?t z`9s0YKdpHy)UQb_(ReJc8%@Ec9&8#;4$(~fg)R!eR+RD&v><%rhef1_Lw;EDQa6n4 zFrEi2e||t!o<$egYJN_Iu^ocizl}kI8S>eZ$FSwLKLV4gP){J}Dumg~wdI&qTCFX@ z5(i9L8IxoSCM{YPd&;fgiBRYw`DI5way5^L5bxjaR7gjkGm zvI<-&Yw&+H&XGM1GR`42&N$DkhYx%7dGw_=`l)o)Tk{5bWyu{~9%s!!XluN|-jNi} zwZuJF0B}hh07kwB0k%yTkEs3=hIpMO|0$e3bUFD8BTlDGiwz=Je+XykNCym$(C-nx zW7r-&osoU1;SBE!(nA_o68XLUHFO!_5cF`63Of3nOfS3B(U7_W;1cH442dAVmUIP9 z4ld7?8LI^>>$zIcOzy27fG+GpauU#kDfLFRZW-+49IN`rQ5gD=sW7G9sEu-Ze{%+O z`J8Q6cwl5Tal;kvt8Gio4Har|Dyp53r&m71;!=p!ZBXY>B=4H?ic%C@y`zF+uzy|d zg`B+%V@@*l1CsMKiZ1VQsJB=x^zz(xM1>{mbU^*>RhR+jH5<0o2@2Hif$BHUoC`g+vM3pGPzQNN}Qp~wPnIKc=Hn{aGkMdE2u#~!fKW)vO{B~1q#?vj$mRmUl*L<{ZEw+(^N z&bzn?bwE9{1pJx%Be4O3Mw0|?wurnKxT&A3tuV5hkKEzYZ2_@GE#LP=%$zj?Ut|W~ z2PtdMhT>*W_dAxsK z3sanP$x3G(*Vzr|fYS5U!EC@~Aa)UVupZ!E5yn`x6nKLcWdLRFqB75|M^@sj+!}=q z$g+iqo8!FFC}?zxjB>l%Mlb;(vf}x-nH%7AC|RL*A{K)>b;;?FxA-`qHn*T|B*>Li zt4Zg72vjy}S1LA_p6b2|wz&e%jtE zvZE03ToAL75jXagt8*6iMS2x(+!#R&T9X}5?WE8!uyb(Hw@v>JkV<6RPSc}K_(Q%N z`fNiZAhnv$^p;rvcL?T@EI0R=(JMAMX5p`V8kU zbOPpX{C3VAw$cbcwK2Bhp#tJ$yPB7pgUZ?w=EUD#&Hyeuc?jHgBPQ6tQ-jEdPiS*) zR*%I;21+0b;cZzi0JbdKn6kUAhi!&z8pzM!GH2(3%K$u)svR!#7jtmtR0bCp?+b6x zrE)iR|Bk(Oer!geH9BMO2ZP@_VH0$O15zj&M;f4Sn0Ku&_6WAE-Nw-v74uOKt{t4S z=+`O1^u>r-#rdd)345rg*jhaO2DugiJT$-tU><<*Kk8~9#7>%#`^weO)1djY?%Rs) zs0HabhR}{U+ldP3Xy|;=&TR``BgBe$1y8~j??6y?f+9<+J}H163}qzZRwg3s@f>UU zQ0?#@MFU{X{^llsGcK_(hqEkyIt;mahp0^EMr_(op%sHa9n3UC2J}HQ29&5WvhDl5 z<0RfZ0$>7L$8t6#uzlfuSYUyz3_b^!j;^qkuZ(f|Nha^2ugU79ugMg9chGA#biqsi z0rrHmH~bo_6B{^nW*Ss8(XrgW!MvjYe~oA%`J=xE2b_HDA1Vsr0>fX66Cpgo%90mQ z51$0zp0H2d|2~u^IMTuk6$V*?XX8AbHArJ>RIdUo_q)+957nyCM{_(v!)eKPbNil6 zm?DoU1=@}de#m(k{~fSG;fFgneu?qoBWp2RMvngnD5uc>(R4fpD zYB3dcb2gwsJLFQBB6B}@XiNJ+pL`4MoyW=`DPpth!zE1VO^f?n^#V^Dlfgr9>nYlAuq4T<+=ah9G- zP95V=A(hEe_6J9L__bq1a8^17dq7y2g9Un!Da3Tj_FXF{y}q$&nG`oF5qwl)c&IGc z5T!;r8zneI=fP@3J{SsHRs=@PjJ$>rC!Be2^cGB$DcGeKRve?_IS!|F&x^vFLX@CZ zJ;4*p-^EWX1w{zgs%En}w`x5?0hjzekJ}9Y`c!{I1%eLaoN4ecuq;`!UQ2KA0d}Ws zAfVdMI?$;h)Dw;|w~0f8X>q6;wTqg)HT%HH%3A-4UmG!3dFa#RtvQ0?qwUE($QyOz z7V)lz;XG6e%-)(^n0YdjDD5Kc#Xkq}Pp;xJtZgOf5UBmG>!hQ#Q8&ugMNh>qoyof6 zuLe6br4j>VwFi%yqUrb*S)k|naw^or62ENq?RehW_^cm&jz{*}8}@%DhY!+vD>q)3ncfN?)p+FQe8<#ip33sz&xoC2CN`D`D3QdPIkV>0)43yg_>RB-90Ry1h zhxwDJuV}bdQ$oWvvK;XD*h+q1j&gsy3K0q_)GscfA~ws0f%+Dc1cwga>6~{Nl3=Q> zi)CX0^(P#^*yUHDylx5(5KaDt*_;acIWDjy08W#C5g)-5h-y=K0==yN)bo$J;P2#5 z?3va*liQ?_H#1Zsm<`VL*;{q|QJaw72M4g28&3a|_?TRSbCqPD^xyLjR@j+;!1qg# zTW#$@{=wdoe-Pgz!mm5<4|Xw`f7oykMq|nv1wIefj^lNd)SNz`*6cVH6if!nm>53% z4HyDIVcwic~<~q?1!6P;EDSWJ9ww z!@x4b0!iz@nG-s$1O4BH$$&qx-y^W$;|3O;im0^5l+=TV*pcxFI&ELVLW+ZCg*F?Fra{z&AF^e*I$bP3Z4 z{}_lITFj6I+E~i5!xaO+p}~r0jgAD*sIDr&RROM8 z&|7l~t}0!V)voJV5wQ>GEv^nc!MkIoWHzpu2gsW<0XE`Z@Oz4W!zlme_Jc&%UfGjo ziI0o{!LAg(EekQV3=>8I?6&T1`e^c5R-oK_L9+-2Cxk7!!5oNF5cseI%`jzXm^C>$ zFIS&K<=%P;#8Fea2YZmYVnYWZb_T2rh4%@|E0TE#Uq)xH7cT(QTSb>48px5qW$Dfb z)NGu{RCb3sC&ntryW7z*+lJsneMz(AO^NPK*@I=l?iE6)aD`E2`-lCIfR`--9uC86 z;{qO*w^c_&W3TI|a#4n3Kgd!%l;HwybKT~Bdp5(7B79tDu}!NzrOY2p5ghi*XrhvPyN4eUj=qRd9^htL>98 zB@vmsp{cLgLKwIfL@os5Dq78+c}4SXE~Q{(%Uff>eE901%!e;KGN1SUdI0lz8rBCW zq&Y5Q<=C>;f;?>Y1+g^yNdx<79SuB4k`jQo6is6i{S5Z2z;`WWI#L42oAGR6Z*>&D zL?m-ZO4s6rQQClK4YruxwLk1wg4+^cASy7!7iV!5MA%?}F;7-Oa!QreU$24=7=LSn zF&{6z#}-3#|6j|`tg168x&8?#x4M!*$&vy}_PgXDpp>2gJEcnMc5Zc zYOjJbJ(X#)-Ffjdtb@ou&&?N0=}ivKE8#+IFJLWNBd;k#C?YhrBSl=i5v!MtM$#0~ zNUvcB5!>TySX^vh_%_jKJ=d@Xdkwo9b`XL_oPR+hRu21^Qxa%IZ)BiR0}uk<$Xvzh zZ#;}u3|nZr2ABT4!zzaLh&$#T*@%D&b~_TGT7z{*5XtDM{s$fq94dIN4qM9)RR3M% z_%@e^p@Oa2fEW5hJI}`EHcKMuW+yM6j=%X0OeNvZf|hKO8*x*^>1+PkgSs*7C;dAr z>}UdOQ=lRHS6mlV-2;N|dnkhG;`%!o(RXMb;ctg~@BSF#gV#~t!iPCt|4uAE)~JlV z@0SmLahs6F{5d?&zk};4EY$ov1F8)6d(bRF4OZuGuk~-K z^Y5$mBWmn!IPkuMRC@4*p1QTkzm4Chf1GL?CT&treTB6O{^c7GkbCu?p&XHD3)I|r zYaRo+Mkoo?G+@=|vA_QxwjO6_K>htLFN@^BDdmR_O?M6?-e{4gd47Z!^F${Lu8F`o|ry+uP5->{{VGZ{$7RU8EW)9U^5nJ?+&S`JuT#e-3M6VBDMG)=+9hKg#QyyE!e#kE%#f|fwP z$R7)QGpA%s)>>ul&%fI&%`(3>Aig4F!};zttvx7k3<~DNDQG!7lc6u0LJC3!5eC2T zhY_otIhtnYfsERr7GW$@9{xg;5-`%Cqw+JlrX#Jp zO{Sv?weGtF9o>6WLNodGUeXb$+FL`rq)63nM>DAs7~Kc7r-Mg&89e8*w6Vl1$Ug)DyYbhLn@Xm8D5@eCIC z5p^uXgWS`I+cGs|iNsdmH_TJ)YzoY(Y`rgNf{#0%>j(njoM9j8F`iSJ$=KuG#jmMP zalYUvdDyjs54W;=@_^xuFDfbtQ`;2f&VYLk_2AihOJVE8YUFmZeK!kt_T_i2;MM|B zTUor}M=6VM=tpHSG$*2?c;zebK7DxtSxY-iIBKQ>n_x9h5LF<2DSS4HAk_8Y0TW^{ zF3oXNL+WcV(#5dDr!xQ@v z;))u$2YX^se~-bogpX3!M4E=`EeX!hA;}t2gCT{uI}uS5p$%jhdIYUkVlvF7J`P6f zNho7-=WA-(Ak8B^;>K0cN*CV7vJctaVp^>rYZy;Z@Q zM1^KL+RzHVfSUUZrdyuqt;#uOk|HIc-0Y-Mk@Q|-vt2*U5k|3UJ9}6yj~k^6@N9vt z+v{4jcQdg_juJHBfgs%3bkgr7;fJ|VPi@zz@jpNwV<{&?BMA39{~>x%YVV95+~Wv( zw0}eNU^|CE57uBvp+lhu9BEO`6lAglH#EY4Twx?dI&InFX#EljKI;ESYT()YTn9{U69=mSRXn^S5ofQ(o=JB&fyoEa z_{A|fuJOC7@qkVD*;O_sv$S9`hXZ@EqZ61+ogX*diQUozR~-Is>DbF11hs9vMc$f` zym)8wa6bc?z>rl4r)H6nF6ilycL@^dT+!3P!qATJco|o5KWw>R{K3UMbO{&o@T8=8 z9*n3|IDuBtT)Y`aiHmk%6<2ZS{Aq0%hLpQ7pdR@5XBg^;QMQTmLUsSAdaZqNAXM=) z^AIA7RxE!xYZtaEj^M$Bik=RqA^{gzyRk<3UpfPWjo6diGU- zTq}#h4Q(X|>1C8YgHN6@rmRq#w%`*ab1o&~lwzYMpL~l?7^{d|3p`c7pNlG*)q~fz z#i%<&W!)gUyo|s-6q@q}1Jp?9BC!u4>>{Kgce&U7RKrbTnkAX%>-amWll+BzJBAK< zxeFUg0Mdt}T<}3Q7R|>+UZ}*j`J7EX5nAIfW=J(QZ^Lv3=>bUv6vQ3M#u4Cty_SU8Z52FvJR34Ee zD2$!Y9vA68Mj0GMe}^L@oE3EuT%PctEh47}@oL0ecaACXQK_m!h%oVeON5k6HkRhc z+P9v@(yw4DVPy!qX#EpsRaYXe_uA|%xe{;9eNx;Bir>n>?+lgYtpRXBh&s%*k$SM$ z^<$ja^@N=U8*Hm(k`gly&q)pp@guY)xc@&J**|*6NA^B0ZM^zr8@Jx!khzreU_)Pe z)53W7WAM=F3FF;QR==3x#Jevxb*>cYZc@zqtMLu|LE1mFW8N3!QiA4F_2Ng6pasJl z{W+W;I5FimYi!g|cM_FK)ihTAU`^Yx=J>4C56sQRQqsoeZ>v8^3H3JDKspY&k;~`| zSn8kBb@FMcg%msg&u5HFTj@{yMYGyd{|emLp8BkXp87NJ*U4W95%nPHYlHyI z^oP_WlY8(`d1N)~@_3_9qfc;(#|^yye!~u0LENYptA?YXx5kV=f+T?#0X01|9H9V^ z&@~$Gj?&KQ`r;^;a6hsHx1P$18mPmy65pIwvr6hl9UQK%YJl> zMB8Ue0o8C0*IgVH@m3wV6-%$Rh?hk^bnQRlB5-eTxX6vT1n$AvUcd>Laa0Y@dHixd z$~yR1*x4;iiv*uA)hA1Vxqis2)NY{Y7EK6kebmW&9O#i<=s}8dxGJ z8~#I<@f_qGn;HHNm&o2XU{B<6z_tf8N#7WEq!0VB6(+MKCv`sK4 zFpt1l;@E~f0wZC_m5Z-~t}?`gt^N}9@-B)1*&@s!FcP{#&WZgRWyImlSjx&Ug_f*J zT~1hHs?5cl0Qxp`3KEZKAgo4&fj}(Zj1ptv5tolYIQ2y$ff;$~jSsc{3$NKIv`E>p zl?0WBNV%%ri~{yMCuBc%a$HSOxGO7Zc}EtcL-vn6RLFi-v$uK$rYI?7zs#k1K9XIK zdmPLboA20)4%t8QpdtJ1a(m}Ft-$1DAeMszL-yMxBL+*laSFx>Q=iXbJD%u=-kQPS znUTLN!&|I(eQ`5c-G*2zSUM#b>>j)@Qz5AaGR!T&i;p#vur&4SSn?34)PRu=1Bk7> z5KSD60VI>ZCVop;MIf06NF@0O|2_=*3{CK)X#}8}aU}J<4vn9=1DdGD1V$Ews zSX@;$Al_03SD8g8U{Vk5sxqymH4&P$#o5DD6SCR0l$_cqB10UqGho}Q}klH zT$6+{;1^BN%k5{zY6h>yS_+WHi_v?J#jw6oUd4Lnyz*D`d6T~;1)Xd3*Sb{A{&W|# zi)=})`shonO1wmm%hmaXFgIDu0eD|%Uh}cryn7poY};48n~geN+Mn&Jf+fdNaylJH zV8jRnOY7vuC5l&BelzuKnHy*pW{#n^Z$KTh5@?@?aR>+Nf%l$^_&UwpU>18An!{T&k`MFqb<^BGOMtg5_iO7P;2RhIv#Ds_bj8=X_xO;^k60ycLMcA?za?4;#-NbF#P2c@y;3S)bI3zQbq1A|Ax;v2M$wLHFL%*T$;P z9r69$-C*MGHhY9lE7}?Ej?APua4Ydx8S~BWaSmIww%i);_WJiB-Fbz2Y~32>VwObA z$)%abxnO>I1q!LVlFB6XEi{ZW`$AhXR4-H!H4q1Wvj>%_n|ny!LO{EZIi60*Mqf$T zIjlaOw^RD>VgHf1w=`Xp%gb}963Mg=sGV5p$De~ExkRk=%+9gWMM~#t*(jsP&v0iTqYS6DubO>4;_RgU$tBN$~f*=2Tak zA7u}>ntgS4xX(~VQZ=cQPNQN3Y9EMQY2q-(u;mCRGcyl~??Vkb?ngS1{zOstXmurj zW6v#ucLUCsPf~B**am)@0b?HqbUvI;>1yDx^7W-{vAtW&mcjLVw?yjGskb5|5&r~+ z0&#TR^os28wy*ff`73UphD zT7{B({XX%_$>{8tBMp_Jnw@4(_3QTU85E(0S;EmVvk{Rxwj&KPnm)VBE=tUB_6MA% zljJHD0}aM)gZ52q1m4{AHs;^(1 zeUo4D%G`-l`YlE;D){{w<;G|?Ke?ng^t67&PuKzO3{hj%l>mAeuDew89b2xNZxaNA z5^h8K*{)%4y~tu1^VoItZW)(pmF^a&A1o06eoR3qc?W@SGN^9cK{uNH*gJjpb{aM` zoR+@8fu=Op(E3OGz?}nXyh=Ad5bWRaMh}-&>SL_)9XN-MZ2vxhnEGnSksDF3w+v&< zhoVf_KT+nC{&Cf~qU zpnzC@x%%kyx9J&_5&TUY9h;A}(UDvTu7YWiDh1K?6^tMj-WETUPeN#!ksYvHfo}`^ zhkh&OAU{mZ9(BdNI_B+Lm={JC^0#BSoXE-)Xgo2ykGz%U+T%y|1Uc-q2d>Wl7y93< zM*kAV+7l2AGhcoFoZ>JpwMx@fF5U{ad27DSCXgNy&yR4Pe>=_LLMMZ1n=P0eIO$5? z&)eR^WqN2gkPnwE!$~~h11M3D%yQfJ8g}JsSTo8xZaOUCX>t+Dwl5H$90o`8s5>fY z{T|AP+a;6ty2`LHF#GKhk7FL2)#cm&seuLP!ZabE%$uMdc44I_1>c*tlN4+t=&Se~ z&8A}svL~`4pjlA)<}_FQq~0;jl@&+Ui%T3!3VQ7srR~Vf&8i|J-QZO3#!+K=HVr6* zQ@O#Za?oAPspfod`(>H4eCGE$06CCq7Fa}Z)pl%S$A6A}su)8w(&k?;2WMPKZ&9Y( zX6k?=X6J(tc5~)K+*bWo%Z zN!-mILt?RAvEKgOMh^+z-{zq^<9={XaGZXTs%^!yddI?B)Gx>Bqo1k!^-6s(&e zpn)SI9L)|+zH})Q7@`z*^BEnNB-+-Ax6+_+F8Ue>1Tgk;1|l6(bsD_1N#c_$k3teQ zY7#c?D!{gh33QMi{g^$k{ZPi1^h3cHv#;^$=l6f6@yc8C90{V>GsNZEpL(v#wFpKe z%yN?ikIP?%T(E@@nYtgUn=1t(^~m4$Vk%f@I%04X&+cz}dXIO9yVsU_+XgoJy(w+| z0IaKAeUO4A9kvIs9P(;_*8LiC`!uW5_b`4MeJfHo$56{x|L1Sq7FyPC?us^((v z{GZ|qv9?+-kS7Pl;rJM%3+*w6`X`NVw+kLG^t%R%kB6WMq?=9QXZBz0L1Kg_(+jjE zxw{An5Ag@W&!(#>{PGFzznz$-efJoqd{SATV!{k-1zzBXV zMVG6bv4V1~Choyuz+dL=pnpp85h5(NrXpN9nT>1@nfd`10^B?rOE2N?N*yhRaXNrx zN1x;OA-2H9Pz-39X(94U#A6EpnLr?^BSb4AA9!m*lunw}$Xlrs_C~M4ErJ~4C5@Qc z&lVSe=tV3ffj@BehO9KS`}4!BcpRnTYbbnR=+(|CkMxHywEI(mqeByn(5?GpNKOF6ghUC%JN`Qw-C5bQ z0>^$QqHl<)%;(tk;g52E3HE__m?!LFr&%Y=fKzRKm2~><*Qt}{H|m~cucAqbFeH@+ z-#{ciiF?J8hzF0R;QYd(7vihVLtS-ahoSb44^=k|z#;G=cK8tRC#yR!SVAy@kJ_e) z{|_6sqEvt&kO}PD2V(mrUDn7}2HwYfRmi^dn_L(?!Z?Px7Hrse%2-9%C;8;uHNu(p z#C|cd!v}iGDAzjV3UiDHOL)y^&GXIu5LwB#FLj)_B7$%q6`*;5BO_ikwFfEt`EZ1&VU+?gSl!N zHTH+B1Sv_2OWYu5A}HO?LxpTph0LpP!1h79wNX8F4THtP8wr_nHo`3N90Yx*F=!YO zEs;eRD-Klt;q-DP@d8p(XJLvv7E_XTk#^&wF1LH~Nhv|lRad6`)F4Z`CM+80k zp1?XBk&a5CJ>Lp`YWl|-;$tgp!dO~>653{lVxA#x7myjUv_lm%2tD_XN(UOAH~XmI zCD4Cr=2_?gNH<9p1h`mWQE0j}USgA!z)RcFuBA~N2f#wqWjhr872u6oQLBDU z6aee_2l~jEe3`*3<8@upGl^9rT>vV8#`6{^lPxi)3|4_DV3y(Ea}rfLVq$6SKutO$ zWu2H?)ry-|U9=BAuZ{kTb0MaQhB!nTOWW}Tp{eo9>eQ??pT&~=#V)|POyoRQC@pfA z+ZFcdA*Y6I*$IJ%7%DfMQ)V_8i1LKMlSo5^hHwh;2MjSdelJAWO%FiEb#x+=N%8Zr zT%uNQ%_It*sM%XHUashbM#nS+$N@Q2o`uft)UK@9AXjM@F}n}uT^{5MxYYfk36}!h z>Z{rUTK6e=y5Hg#J)SsLw<>_!kotahBc z^=!D+KxNaS+F@KsdL4`hV75nHF9)ZSvFn1y)rIfW@1VbRKhfN_x7 zP!8J*RW#unnT)ageT5CAMt906vEL>3GcfkUxtnat-AM>~(VhmHx2&bv|Y?+hQs0t@$U4SQ20% zpf+5;g`zFsPy-t#L_50i=Z>o4gqdeh)TyCmAR5@+Z7UYKk8Z|Rd1tw9S`|xS59FeE zH=hM#T4S}e0VlBqNo~9|UJ^V)guG2}8oJc#*m`A^jpT+0a%S02Y*5Fx;ULg%rY+aj zgJ&YkJa|&MI%E6$9E?3ube&O(P3e<^xY4sH;fPNqbKr%4hO=`s9>ryRsBdInpHNQ> z=(B03yV^dpotgI_*V+d4bqa#Kim~MX!`r)nM_FA9*b@j4ATmLN1VliMN)6y5CQGJix1%FAK7n z$I0qw?dVokzQ+%cwM!gzxU69bR)=JMzRebH(GX#S#TzNUk9*1HOv+<577Y>Xw%LQ9 zkg5GBn+-6SWh7#gE};1XN*(}vma|cCLH*0No9{4oO@>mfZ$tZ|`qnuj=qTmfU3J0j z79F3Or(%=Hb;7Dm4C8|I_Kh?xt0#L>SOVfzG2LX3 z-K0lvM2y!X2`(MF5ayvDp3nVZyD9OoHVx)pe)4De5Lq2>q>{pcF`_v@WTP}sh{*$g z6=qEi1oQA;gtAG8&ep)m*agX~tiY|O5=s&kEsyPg1c?VR`xR9*boLx_}tbaRy%R3p`0uVrz=v`49IhzD;(r-tstb*^i=z_O!7 zppne0af8zZ=V*Vn}ck(wDtDrSs>A0g%^cDl$c#zy>fZJ(NeIwE*Yle z#^kZMe+ws_WJ~4r=7hH#@Sb#@)YgL5{b0ZeND{W1@AKF4PmXo_=`6O?@o!qN$C7N` zDUM92Q_GGtur-*UaV2%>$rsP_W;_r{!rE`PQ`mjGleh5)XtJ=@IYDv`1ko4~0bjmC zRQ zwcqp0bT0kvwQLQ&!P(1IMw=5Pa)UAonL`oht;ulK38PjS8OA5efY~8|uqKL$g22St zC`Yzt`;g5Gda|K0^p&k9>aLsbWeX?|H5CtVxm1`ZP*o6g9g`JUm=kRPByJi-Qhdup zWcEtUtrjxjFsPY=|sfO3&0{rU~fhh0B zrB#?%p+RyPVMV85wj&vW2#PE8C^(l;P;yyZG&T>nv!hJ*-gPv|kQ{NBiT<_xa2^_y z_SB!-%;9Y#J%`kojWJv;?wA_hEpVHgu$;c%p-4C@vwWjqIs{SXA3EE`m|%Z4NamsU zF^5UolHxyGfG)7qT=a|=E$IZi!sZvZ5vfz-&;E#S$wlt&zTLYLxrq`AkiuqAsNrcjO2i^``VR--Tt|bTyqM%16_8a8#jklhojqD~WfnyT$b)iukSaFN zEjCb|3WxakwX(lMq_32{Ywo%lMp#$XX%hM86EKh%6Uqr^{`|88uu561Nq2;f0<^r( zzD&sRzS$bRxN(#dA(Bc7VoY@o5Du_^U?sy%3;XO^T}uf;O9eW9D+`dDO_0s_);%JN z>?iSKW|Ob?F2FqnLo#Qq1SnR#W9fD0A!8e{5NovzmSr$s5=x#JnD<)5W-58GBZ=CR zbJJI?DI-+hI9yzavRvztD2lo3`#GE5Y|hWXUTG^gW-QkGH1>ze^*-8S{auPO`tV0B zi0&5egRoo@ozWaV(sw~Wf}^(7`&w8mkJ-1WBMdDM%y;?LI1e32m$PA2QS@Y@1Myi` zz54NB17eqXS>d_?wV!v2Wy*C0!EUd~_7skGjLyqs5qrn7^$qHH4)ICqgaze&ADxjX zt$NO$6Bu+aQR|vpT-SYPMl*H*eqtM7L?pt(>35xhvRZUw!ww#*m0^1;u4bsjYKhKh zYRpdY^UjPWK|O8+|C-x#_AQna%)B*83i>?$aM(s9pHVsA=&{@PXw|~ zt=^^zo4k=1!Ejmno=eiJyng#o;7npVT^fd*HVn!j#T ze*wEZq2A!&NnAG7C1!T^RpxQh+NyjE8bN>d8qS(Al!8MQjReB+Oq~X+VVR zB#0Hh1JR#kBa57J)LibJ%v{Q{Ac8GqMzXfVMPop)?P%G43@fC9nRrMrWRKbQdxA7vza~S*w5hx-7v8%h z*u~u4a-OHLld1kjAn1);#7?lGE{+k!sZB-aGlj7TH=hvd6uaICVR9zrgJMAum6h{K zS`H42y!Pk+qVx5APo%l+Uf(Nld^sArc+_T?*(?F2aI#Mw+@g7mwl&^LmHVa2DaTaF zY*S@^s>(#-F1*x7ieEW=eT=#ie}ND$3ZpB%?ZL=GNc*=?0#{5vEeeEIKLwlY%ciwd zs%SBM>GUlvr9iy_EtdHS4cu`3&>97?tB>Bri#GZfEXKmI6-_wlkaUDUF(1KEcBFE_ z#v*ID0I7~8@)+L;O3x=x;RDrsGFB;-VoUjqMpp9<0Z(*Yh5X!jwLX-hb(&PeGs}BY zL`s_SCm=s513rWsSnrwJ{NUUOjg}oLpcEH1lmw(n;k%@dbvgsvF1U5!=qRr>9%=Zn z?Bc_+ix0~#KHMX80@t`dPPqVvSBfDcIVQBMJePgvw$LZkP2`mF6e|VXQ?wqwUEQR| z$wzIComVovrt8dysWa3~U$OkQ`s`(c@EDnjPDFcM=jk37KQC!fl;^ z!#$3@u~>dd8KR$5@cKyx0!MXO2T*A#JNDE zbn*=e!#SvX*2~>4ItDIO+i@2A0eV!+JBz=k-=&64fI`?|z7s8tPZAU9XTCo9seT_M z-+gOH&8La}AP1{0D%VGHcqQG|sZTTG=;uCgit_6l2@ z>L@jlbjr~JNvJGk$+9d?&Ux`-+2a%QC5y7R;!U7{q*aM0*wunzj71r2LwGFHFrV_U zu+CfYIA!fb{rCd#X0{h*J2~#2|JQM6wL5Of37rE>Q^PON(VM?vC*x>3I_rBU4$?9S zt`Q>4Q$1*SqoB1Xc%i!v_NXw6zE9Prm{yjpbOW&qoS0(zJ%YK8N};3o2snKFX|)mY#*b*>4BX0$Z?70IOJfrZZBfQQU+6iC~n8wG6U*#fRKMagWuU6e7=)lrgYGx4%YS74W->th~4 z0YU<2>S8O#XEY+8Rf@Egx?ok2n|UHm*TwuLqqO{jhEL{ibe#YMFF8IRLo7u8O4w>7 z!nQFpo}cd5hKHDSvR^X#O6HdQ|FHA)u8-~bQWnJAO!IY-dl?5QzgO^wjAnd>Kg`$7Yi9j11QyhHefwHwW{= z%}v3Rh?X)jr?4T|&CO7Xv}JLfREkY(F02m`1w;Bc7?D9_gwC02;(gRu)P2HvmLc-F zf_`vSH(kl4KY8B_E5i)v^bA_IocbQ~$TtJoVDcmu6aM^YdS^2_r%|=ymMR54KfLBt)EGDI%dZu#&M5JMl(AY9r$Z5{Fti&z3mQ=W@a&5zv8~2PUNtQe-zw_7*!Lh9+8q7~FSK-p2)U(2R_`nBK5ZR>=0TzpY z>`w^P*HsHJl&dRsCgLLT?{Gs09H`6%|Mg`;R51G99?w~`v#oUCX!@_0lq&lFv|JQ2#0JVpD)^frXrbt!Mmm}#;%r57nIf2FYa zCT)N72q)%5^TJ>n)q=ize4Or`x1Z8TPdjYz~x7Ry%^U*s>3JgqHi-* zKNj_%YyztmXU-BKdg5?qfi=kco7EZwDQ^8l%&IwYCXSXrbrS;~^ZD;ScekP^J_qHW z-bcgxi&P#OEp`)RmvYT-%a^yN#!lMZs7qjOU`J|Qb_@bjH6`{8v1u&4Et{Jg%7mo< z*A6J8_ipj8b;gVPf!rnkAw+N#8g`HZg?tG_8?)+k%;h z(-381WmS}iqz%^|KkMB?1VViQ{ro%vm!d8fC!g7uaE@VXZxazoR-9`wP*(@5kBMLU z!8Y!TI5vrg6f(Kj`8}o}*jw0;vKDp*%uMon|4J4&V<)tq%P~=IeJ$qY1TI3`oMuzf zpYa2i9dWsZ#l|&YPr6_MqSOb^RMW0+vAZrrOZ|#KZL2A`0HYZ5z&r23w22@Y-Ows| zv(409V?CLEV++1JR&*6If(Mf$`1n*tup|B`m=GKHp@3)-E%skx&A@(O>uoQP4#xC{ z2}pJ@$-arCT73Fhw0Sb8x7P7xN8?o*)U(%H|AZk?!?0eq#wN!$E!Nxg6x60a=n8|G zY*c>qH%wistr@L{3#> zGVkXMm+-?o1Mi5jxfnvsY`3YST9MMG?$@nyK(ILS7LwB81Cxi4|2s(&T4(wJD6i8& zTmutx$&=ocB>ujv5=;3>fgro=Pb{3CD&oi7gucc-OG3*9rtiFEP4C2o2aytxC^4^$ zv&$$Vz>`O#18&X;6*?yqS6~`48TaHk2l2!_>A_HH%8Rh) zAYs_%%-J3M=9P1yv&DerJ0Z5hR`cvfpMxYVeB1R#yyc+9|>5 z@z0icdYzrohw3?3P~RU{K=f&o<279_(cEqW*m6HzDBB#TNm5pBb#uFoG*2u$L!tn7 z77~j?be8yfB9rx~E&7aCQqpfdf5c}?;-Rb9snj`agy$$wPEdX_!>ump${DjRv8n&MWv;m=@Y zgNgh_y`m!zyN@5Yk3ZO8AB)UKO5Y=olLiO#<;m@~;8#kmLqC*9H}govdH#IGVU~BO zJfE6;-aI8K=7Uu|LG=%ujS_+K=V+XqhWPK``b3%!3BGbL@px_=qAPDf%2QfnzrVLl z9eV83Btoh_a+okX*8ieM+`+TkKd_libGiHin4Rp*~UbfSNJ(EWp6Ma5m zAad^?jwj1lib%P_WU%wmp2e-9+1=sNQ7VTn7qL{#r!xLGJxtXZl-sVM7F%VtRKg8R=_7Br18Up(?Ksf5%V|C zS3+nu#EMrTpsn(4uJo;`^1WK=X}*hvM=Ox-VnGC@l+xNXZgy3 zEoA!JCBGX_l5tCu&)A3BnQucPWTJBXZ>B<}q%ENFH?{HC$@)d${GDd(8`h|+xWQ!5 zNt!aRp9ectUv}dOF(0AR{pQa1SW{Ie&d3Q&VpM)5oEw~Z_`Zyw-(#mTyR)4P2@+OE z%VaiE&t$zX6mylSzUPyKfF~B(O_%{mFuGe48|-Q9fi_w|Pc{YlV>=4`OBj=RoWS*1 zqR|`M)t%nR_GVXxd*d#tV@hA&0zEO3=}aIunV;-zNojThLrBe8Xo%HULpyLo!g&eL zsxIVP&Gg>AMM#J*H<2G((|9MMW`dzBL4d2=!II;q9ObvFUt(eat=+(;fC!A{(>7@Nj|(rlS7uQz|4#wmdzv0Rc8n>^o(C%>m6ev?kaY}mk4-ElrnD}e_Df9Gd6J}CL&4+d9@|3ry7 zCz6C$@cwjIeUjFtGd};t6>uB}J(=sHOeq;zSl|dgr1$vryB3VY=+Vxx#Bb{EwKM!R zBZ&9mU<*7W3#qK#AOs?2-SX^=z~!lDEobrU5uR1on>#)7|KI$-{vUUGHt~Nw|4)e9 zzt8bk{>wA@zs~*tbN9DAdz=5A0MtnSv%ePams7co{#sbbJlSp%%r`44>A7+kB~jmQ z=TCH_c*RD=Kc&L_dnaUQeEuP^UE^ebUbm$isp6EQPYJ72O@;BvGO^({EAt|$)?hxz zHcbwQIs6Ql^~(s|=-@i#9&dPqfgFwJ2^%0$9wu5(^=uEG__*PXBCM(P07h@X__{DD zv_Ee?itG=R_eGRf*f2ffIYRd3HPItxdNC72?XY@H_RKKJD;7K$hpH-33d{%0Bw5rG$zR&Jb8JW&s zg2nSm=w&~DtfRY)m?q7dp?^g_+_}^?W%Bh`Vx5e|ebkdjjMdJK^NXxAYV42lfI`Su z>RkI``Dx}=vW<#C1R1L({kLT64fnOrkh`gy{eLp}^r734+cE3G&_g;|C)j1Z#BD$n zbrAn+qGyJ%mU$k9;DI<0+zNG2Wvr5o#a{vv1V1kF4Hb}YwIk&^?oMjOBajh=u6g8c z6c$||PM-JztT~~XtGa}yI6J~0HalBt4|kNfEo1F1=FlrmjOo}6<6HuA5IzFXcGvh6&DLV*InW=AV1HtWL613-1d1Y6&J^~uC`d1EbU4B7Z zzd4oBU_!(9_?7UQLS2e09HnQiRKvzRaA}9PXGR*~7?%?zsXCgZT-Nj@KoJP+!XRw& zK}nq*AHq}OFw(kh(jw1s)+LEM)7!3#H}W{HyG{pP8*gMeKg5}8cBaS|CL)n+rL`-N zde82lAtsbDw)R)$a!IfDn+}%`0H@0l&v$pRT$WBy^@!88Hr_+-+9REY)@k#?ji69m zaoowrD`xyTFoP3#b*C_#c#iqKo0 zd2EFpV3+M*d^VyQJHqXmWjPx1Ovc$R5tGc5FYYDI$!1TGo9AZpoBijC@a2m!S)TYG zIQpgcknO$y9F=Cc;@GlO@4J${(@F-CC$Yp1%sGI9CR2<@lWHPPoYy6h6!G@W89i~& z7r+p1QZS+@Cq9dXmd>(lXKy~OQ_Tx3PW4mJCyn)V39StItb^w=%+2aWd8;vBF@fT0 z$rJ!YfB(iXPhb>mnI&(Q7Jsq=j3)kyL?-$Eb|LJt2HQ!aT*i);`sf02)YL?}clv$qsdtK0fUn-)G(0F;|<&jDj z-nqvWWQ5L@=ZBusq6Mp6fGkS^WMLbC=tkab%$Lkx)m|WLNbI%el#e+-)TtTcR-~a4g%yEF0`e#cI$cZ8aOH#8N`e@8bo!dhkNP8j)W`c{Yd$@rrqDcCT_l zw&_Gy7!&+KT2o~-WlIWfEI3}Mb7@M>9i08UkIM`V5S$vSgOivpIc7e+z)oE`PSJN9flc8@pmg1n&MKWxE>Sk_8g=g5ea#(P3jb+yeBceU9$Yg0>G&^Ha& z!66&5hl^#R(=$Grw!@rS~A20sB3E*Y9XT@(9$-QE=`Q0@yC%J(~Xfkj@JN0j% zzO7~{s=1!Zt%NAYC?UFe1cc~JZU+Lr{ZHshEc=NvwiUxT#Gv5LR?J$x71wcgL%@|s zt=IT6!i^{yS0t*l249eK3`+fC=PBH*$r=x3*8*w8{WEH|CGO`7ai2^D;e?gA3oU`Z z%ClDbs)yk!sSOm1%cG%kGm1g$N`G)tdPudJ??_0sC34^MeS`~g0f#_|dEh;O8q-G6 zpy~kcpG{aN_xn#y!u@}vpDv5$_eiXhzK#Fup5m04c8vHoZIe|Heok7@?0tXgel*3k zlZJnnV>rAqkZe>t{r6#Ql#{>=V*wr$HB6{F$v;*6hVXjIO98VJN!F`m&}@{Vw^CF? z8kUph0!S0s5GYt9JXsI{yqNaYMa19<`P1XNrnNU85ZVhdyh921zv>}C6OJN4gVE!V zHNa$#J{A|rmQl{z8u56{x@nJ7i~YjJxS0T{Z2-$>47kDj+p5Q zpHrt71M$U_Vb|-kkKsN2QyFM<-Dn=lWu>ONn|h!fVcMZ#wpe-HgBcb!;f?($r;8@7 z5U4W=-^!r?Z36qlQq6Kx&+35-PJ!Nq-diR?An}_3bg~8Fzf*9%^+N&>Ze^qAD?j6z zP52JB?Gj~HdOgT=a>5@TiB7MMhpEUr8ml&AJ4>L-P_Z<$(l&J2O%k0kc%htooFL9E znPz?+pdWV>=>N2gHk)U67SNyB;GUWBAjg?IfIfBrF2D3EIbz)*;OR2GT6i$P8suVG z5nXnZLQ*g-?P59Y7#?N2>GmfsmM_yw8hX#F5%ey1Mn}ua&3li!yQ`cu+x9AZCR^&p zvr@b3)Bk37NkmO$_P;}Attl{AL1hX@ZWI`JD{cTk!B|T?id~qB z(X6OHb65?rVWg4TOHQisuCDDI%Y37m-+o&rT!R`CrTK~K-~y0JO&`K9j8Ti(;7Cwj z=|?Q4INM{E5+eQnVGkihZD~gRSBldtjT!%l0(Nz|27g?tTRncd7(8gxHX2#DxoAOO zcd#yK^B9{2Z6j{c(o>T1O|8oYP(m_fn3YP)%};lJk|3W>+IWQ`Qbosj{f}D5J5lN9q)ZBb-XQ$WV}qkYlm!Zv(GnI>O3m?f*|D^=gjxPOtjGF9n%Ch#8(8IB*s_$k8 z>InvU>0;hI{XnAeWOu&7EK|$xBHUyK^E|h`&}1omqAmRXgTlRfD@3#|kN-`kRVoiZ@{hDJ?UVGY;!zPxw&AT76pfD_(|Nr%`va{IB{>&};lS;>GK(s|mR zF2dkP22u=`*|s7_XrI3iKq^+P^S6ULn=x~!O$ClW5)mdHB|?=~nE^x5UEL@JN7#Zr zMvzOcIEQjSOLlvTeUp1JGAi^n_Sdf$h-)N1axWrKwX&`?r--aeE-7@xFp_^M`2gah2%cxoRTZQ5udhQcyDVHhbCN##P@}E<5ZSJwfdMCTz zlIng=zhw7Efq1r4yd*i7#N`HFAf{IFQ-ODZvI1uG_mUvriKns4W|$LSY76fVKd|s# zLzy=4e(HVL^BpiUGV^Kij!aTO`r!jQrBf7N2<7FgKIHMtb3{oc_T}e~-+oopzR`1ujftJ*?N1vLUHWx5o_0-hTPAEu%y&?*4 zl45{23}7gw}i_K?GB z;Lzj9k>Z_X3@Ka|7VZq`^k^3DbCf1Y7VgHETE!kEe0K-){w)+~PtyA=b=@*ANEsC? zGjAJybo1HF`@y)3qQVZfRodVV+TRXyH{?l0)Vrunj)CNig(I{a;&J91?S1f-c7hSx z?UBkH@r6l>xC5KzDy-_DO7@X?;*RW$S=H0OKzGCcUn62m{y*zL+u!oM=*v4jd57*) zm(;7A-KZ_XAB&ORbmu3T(VymLippmYOP;3kA*iqly@(PCx=OBxDLFQ^qBEsmG$!nT zGll$(gZUCwUZvEzP2x45I(xQF9Tm6=`|7tawx@*bdaLSjeF0Ao!95Cx<7_MSn}$+E z?&mOo@ZnM3$XQ4+%NHWepOfco3r;9sIKmUW*wHQvCyyrE+X4z$zx9Dj5wqHcll{cz z6dd~Cl!Iq95g9_-57req+YZ$>@ttJtM@0-z%JoRfLhgZ#q$r#e(6RxP?L1zpCuK>Q zmQD54&s!nm$7re5WY$SzE4ra`RLkL1|r@NkhPKcl5>@`y_M4cKE2fG1)^FBOnt%~h5uXqNAM)HYdUA}d5Rq;*rtaNbuOqO>st5=U zqBF4dv@xlOPP4<`Xsy5<^|H-5u5+TBb*2keJ>I(?XQLn^9^500;Xr=Ox5qUoARvcp zCt{{V0FpZ>g1^Xo+@VeVhz|5S68MM_3eto?n7jqOsZ-b_!O3JSgl6F#7y5eND%qKS zVogUwuvkbBaiiIVnfvxC7xfCJl5HsTq;qbbaaV#L$|!kV)IMSX+Et zq15}c1(F=cTcO@m=qulOS9o{n)%BrbQp1s7B6eUF^~@%V4(-2Xn8k9##A9k7Lu*zei# z1jhz0mf@|FJ0bCBWpKK~ohJLN#LRd~M~U5MXX`#^oENqv;uEQ0r{>oEsv=p}){LK` zP4-ynhPc$_(Ck@6Ni}y1*3HXvmI*y@iB1PB0Cm-(ooyo2%QMdgZ{{xFM}=-4jWg zGnN71noC3CD>{FI9i!=0ei|6{PqJHDa-|7Y8lXCDX^=abQLUrd&|i>DW+iDu-~O77 ze@RB@5_rm?zhcK`3D=F(3w_wL!v%??B*zos&pp9D-W=q8LJfQ?U25Q4W2u29R|iG5 zoFDNExl(7x(y5r~UIyhCB0r1HEPfM@<3*(z)8)~`eEefTQNftn&%5};`!dWY*Q7A` z!ZsM39Y#Lbu>@B7&UM1mC`xv@8IA)XIVaALN0v3L-R2U`4gO(eU>ZFs^poN zyrh+zFV8MbJ=1bG%CqUIXLF?P74ob!^=y?qyHK8eKlN<4JUfeLv#OsxA?)eiJ?y!J zzsdjoyM{gT|JJOqr;g`;#ASEBo z*01CSt~R^nywp4|y?Y5#@hmh)e|P!PEyImyaH@O1BxaKCDI;cMZxWk}aN>bU79r&5 zIZ_T;;#BDTW5`!=GsjWjL+(rJ!S^BWW)tM7!Cd_um_n&NvnVwqi;L6zKjSlh+YqjK z+2o}22*fQ9PghVStVlr`{UxNCHIq-IK6eWm?}-1gtufUS8&&GpEe+J;-P_JM=cJ`kIC5Fjt`WG<_& z_7mH!3zMQ`~@xn{Xc@CWznMdzM&@Hi^*)i$aWy<}Cv0CRVA z#>ZrplH%s>KgojbGTtAhS6fWoek&(OpS?L5o?a#!VJ?%1ri%@Z{Gd+(W zH#G!6!1nXj%!3}X5R^xkErh5>%huHS>csV$A5?{<_&Yn@%zTv9)7VAMuAw!<4p#c= ztI2`dPL{Kdu37kPp}B;#3hx;Zov}XZTMN|*5iF=aqmk%EnG(IIQ)sF)597dg8qqvt zY7l5}V(GX1AYN=*g*1M8F z^0xcU=PTU>UtylRQB;*1GDBT~T}E6r)#Ed*g-X=7{`f{J>meD|%fWMoir%iJnNASq zCB2gSY{JQ|)Pcc>aCZTNfPdSHeYD^FZMA6WYg9Ea8V!ck8|9VDwtcsCggqId(_Kv6 zo5y=2KM{*SQcuj-5WiU@Li6VGyR1f5mUV57Z#F_g+Z?mXdb3Wh^3T1I{a}dz+Z%b5 zZ-g^?@voesp#1u77@4a1CP0Y!*5bd(coVD|al05T3lPT+P8I+kLTu6P64W2H3XTu_ zSuJZp(osQ4EY_DG6ewF|X1|cWBG)~vE20a3vQxaF%2!Eem5X1OVQn|h+<|o~2YviJ~ni>b8VLRMBElSlU2-TgKZd_8S2AX_4U`ElOaiv5R-BIh^>8O`|Vk5n2*PY z+$H|M8EHgETJPhCAz*$@a!0UZ*Nf%co@To>j!8eJfRqB9AC4rsT66q8w8q^-95ibX znzT)Fg&~-{$EdCYS(g6OE>)bo?JPF68pDp}AUe}cOLf2#`c5LWHW4aUp)1}qH755) zSEz^>aY&X56}=UI6r}4e{Ez54y%<>4`w$}Wg9%9c`gMAtxcl^7~q(A;aDd9x#5_8J8wmsOd z1@`GNq841?6t6Y;za7CL7rGP@CKRogJB86Mug0jRF)DH6TnnWm-ai*RckZ`7=Wh6t z_y8gIzO{I~YGl{28uc&8((_aYgJ5srf#;{CvvVAfcKEYIrbY6zmqaJ)->^>VpkTpMCOv|AqfKj_;~9xJY& z`sZEH(-*Uqm~NS>bY3{YA&iIf;LpMjOWeC{3NiERRRS%{bNyz@vq@-~qSg_2V#HN+ z7pif#LGEL|dOtu5>=9;Id~1RKTOnz>pKThEm3i}8ZcUHKh_{(nyJ+@`2zK@$<{I!} zDHabh19SNka%-q3lTS@xax3J*+T0s2B6BGNCEUT5n#LznLtXi&)KHiGCI#GU=vIbW zEa#F8)Q)n29pzwcc0SG0W_+ZOv5+pVw_+3wfJpOSLl*^C|L7@tx(+BWtMi1;fF?Ls z3{K3+Q%KK$pMX}Q<7-hz%WH4N@A)QmW1`0r#nShF%on|uRNTWms`DC=s#bsUe3QUs zQ=oapVAJ&y;Uz<30>fnX*0zc~6s*>wpct!&XurXH`GoMKE6i=z=$>@8>8^|iT9|>> z(TK6pf~aHxZ6H5+ErE24Yh*KVZ&{&@BNZH+YEpK|Lo`YZ`1%)!$BP9P&G(~uar~KZ zj~uexO=?o28d>De=E>_7=Bw|^DAr&?AOE8;2AtK!93FX~qKPhcVc?(T!T{F*i1*gy z^sj!*?i13ki0nw(T}Hb}#X?t^sYS+@{^+i7Y5XRUa1^gMPk*Vtu~)byR#3vSHf(^z z?`*@xtqqT*VRr-Ga(@a(M(Xg_>jsRUPRp`(ZL63v$Bax*#K;Pc4XZwOx?smbAMd*HK*-_>>ISnTPcYhB@r~@sGF`Drx?=D0Ua|J2_&*X(XRVj@QK zEuH2MW}7D)2MfBtNR)Hnlf0W2wBU3K%F=_VeP5EfqAK1H(+h+Up^?dUa7MQX5=3Rx3Z{L(6Nj}8CFX>6 zDL~y=Y5`T{v;#HJqXDaa?L72!kG?-pF8ydBqvBP3G7cPk6t1uUrB& zlmBHo`r>Z9)+BUk>TzadHRO!^_D4i3iHTF9z%+f<#bZSqdOrScTk?EdDs!AhN!eZ_ zT9NhMIq64O29tEL{CVMlMXp>DzYgOYI+Pa5*K?nlQKPCs?k95Jg+1Pa?HcScb4@bG zZSE)08FDufZK5eCVQ*Nyp&TDmf4dEb$>mThBny%WM~^jxamz*9K`y0XZy=xdt-7Ac z7UghxG;h9PXOt#DQvX1dsr_0-NI6kolU~qEaVtI6XX9<`9EBajtKnk2EnE-zW7s?O ze84;Yl6Jj;%NJ#J2;CAcYnH&UM`@X)CJqyK{)-*5F!z6Izl&~!P>&s!e24lGlRz@z ziHHTJtDm{%UjtN_bwuc1Su?{qUXSHph;7jU(NEl`JJE=$yzgMcQ$!V(J?(SMaK#Om z5n}=gC#$3R^aOV_-pJ)NoE*NQWDu9VSD$hb zUP;6Y|K(Ed26OvWLg&QMsr6i<)4#57uhXOYQV}2UlRg1+{_4L047M*+u~75^&|fRHpgwOvo7MLH$a3#xk6iu;nyWV&iqV&aE7_; zK?}x<+JLcRyEAGJj8f0+d?*FR*Z4{o@#i>+%>EU&ana(NEpROK3bPLE6-I|1aKe*cz?!BW^5tm>N+5j)xRW60?e!oqWdBiOwbh zaXPDOqb7EXZal!@5nZ>0&-%#gd;(q%4!yzb67u^{(^Px{V_4eH+2Y)#y1(beyYJ1z z1RDgkZTdt_a2j1!L-q2#8NpuR4_kuWoNm#WJZT)^=$neyf~OxHgnkDN%MR2AY#zlA zTWmwe5T6}Va8iy~DaT|=;XRAa)e#P3j;rYimz8krrwl4X#TBf33lV14|9IA{S%>0c z$$S&Y7)p)owK6)(}~Db5q+#CuR+4A;O6MPB5I1S9-A ze;tiAEx`zP@hke^9zN?e`;s(lUghdGy91j=S}`xkuPj_o_19DUa=)H;1=LiLLFaFa{0{oN>qS`{GX$ z&t=3Vu2Bl4;kN`yifgPMQ`Xq-F1xi_@xw(MyO~-yPGK|J7SRydNc1_x8*EiODE;ZE z5r`e7Hsn}HtP}LZz@3b!LVEm;<{D+ezPsDz(!2(ovSZM#YX>5zm)xxXbDvI3wpYgn z@_URFf&CcUiIZi{CLTNw^6i6gOeh}KZ^Q?cv6$r-iL5BATyp$n5;KDY;EtB5jC@G} zaU5iy9jS}l&M$CSs?%JqT}H=76Yfhoas)B9i%DUf{~$|o7{TNJ))CysmKf9Vcwzj< zOBjDlHB7k1czfy^vsEUOP@IUgHEfmGQhF}*ZJygt3>P+-D}TTy^VML4CHO#DEnqhs zyUkXDM)+#-8c$B`!{k2GeObOyrU=>SithN%|!<>>ku(;O`&EH z^M)@#vJ}gFxpogpUN=xRZPA={a&(-#?Wkqz-!7`y!a~~8$wt{sB^ypmnx5p%$-IDh zFtG_2$pMjcp6DWb)gtl4co&?7`eVAu!`q2TwY0Dm2l4{vLhG$cEw7DAO=leb^qZ*GuT$#b8KZQIfM_BrfQM-q~{pS7=j8PbNHF$9;RfT+g(g=%6XP{q`*SxHcgDO zlfu|aW@WyJi5X4>g*oW&7nz3IyRTz1zL#>X|CcjOrx45TVJ_Pz#~Jcdg^4i1|L5i= zK}kAp3)c;b#spx(uAQiarqi`9-Id4QoD54}#^t0aZj#oDC6mNV3J!Mk`e2ig`w^{u z_^z1m$@L&=uMCl^^}AdghQ1$*DS!RVVLeY`#jhU|ZP?9RF87$WF^4zZaQ(11t~HxC zs4#?p7%*D8ylXD{S}dLpcOsnW;m%}fjICw#A_J)VyKB7xUMh1K@UdB;_bVv?E9N(u zn9n)-(>9jmy9D!-{NPji-ExDn7m}N5A>aL_>1>y@ZcdZoG?>fjTV+X>Kl7XK->90#mFg-Fa?K=Xe zm|L|ge%-f}%KIo;N`$X=Cz;>`f z7I7gzZTIk4o+KfXPV!r9mq(qgArj)r3icW(6}h!4VTo=Zu80gDf!Ope)H}k#lVX9 z3CCRAjLfLSRlpZ#nR9OdAJrPI&PRarMLF%xC>0IRdlwSgWAyMc>G;1uh3a-|J4twm z{(X^{t+lmLk?N@)<{zVfm)GsqNwq8b_eHM$eYP_R{rlKVZ$vr0?dI0^QNUy0)O?It zi>_5?Q3)Q#0z*P-)ta6X?qm&LhtZ9bc{_2^Af7iRm_8@EZ3T=Jg)s^vi8> zjQMg!X9ltz@FOZSx8#~ctoVqSSc~o~3!1)7Tzjxh>MG~Y?_{DGa@>*dGrXsxf3|qE zQ+ukA|M4@yBZ`V=c{GEpaM=7rPNkceFINo2H$|+_e%*AoVZd2*onU3Rv z-O(Al2*xM1OwO`&r0!7W3N2qZ^%tkf9C5CZ8Hrxz;gdvz#7-#@Sz^W+R+cCZv&`K= z?99Y*#Tg_+E6!4H9NBy9m>-F{$MvOtuS!IJOci^TH~222()wo6Qg=Y5CU|>lG-DV| zQmYSTSNS$go~VkZ*G=CxgC+R6FBcZJt%(F!fFLuerZ+=~^E|&y0;RKLzFfa4+3(^) z=*MYK3wHd&Vn_%J;Qa#h5AI`TVpuMf##P#B+7-}g-hr~l)!sdKTWSIeFJc0rW~)A* zm=zx-0Bh~M&w_ut-4vxg-PD*I(m9x`n$4f8j*s(j%P+;U0Q;%^1f8;%s)b@dC7aJ8 zGC@em;za_{Y~qv8a+N`ZN+kMOS(A9~<=t>S9O$){wu@>+sXNiJHr4wYgbR7g-ELxiecrVr3yiRIx zR5lHasHf*zIA7l`<&h8>FdR32W4<#T>%A7NG$U_$E7aTU(#-tIv03EjJQ43l`5OAl zd7y?yBky}Fej|-jtXB3vSmZ|HL-!*FE!2kx4P@P+pH{PUALMs@0|y)8btBZ5~$%U z5?LNuaLg^!MT587+)A;e1fO8q)HwSit?_fohbOm(@ZrhcibwRz3Eqn3eDNc*P~@ZG zNi6!~hd<}S=&iUtIhEbg8)=7RDmssj^j5-r3R}nLIjUm|f*CD=8*Dw~dRld|=rN81 z0?9l#!!UWN)A&$Qgw8zdiGDo)u;oyyR*||hKDWe~hw<@Yvd{^KGbKB^v79f_$Pzxy zT|RM(37(3$Hx^r|&*hWL9G}>KV0z!!Rq_Pr1JZ6trAH>P|8|hrSxC1Ms zQxof?Ny6_W=4MSL-mv(C-*wgyPkd%Ki071Sb1R*3eyx)p#E|k25>v${3ux|xcL_hk z&8K)Pel1dF*NemE>_YO-)(a?wHmKG6t&=k@v#|q2Yd(kQ8lq|5Z(Q89NU#JbB)HoFL#)cW-2fG@te7O7FuNF9{`cG739{x+5(QzanWr=l!!P={B zIFYFcOg-KT;Sypofu#xEwlxtR&9i4(pZ$Pmj;E?9OK6ZpiFM0fCeI7X$wyB%(;0z5 zBvQ^A=$u~i}+#DH$rb+(n{I3}YL9Ne} z{uEK`ZH70@B(+dX*B0wiC>85er)7X`xlH2^R0juMxMn+de%~I*$?azdx5KWK+J3Wf z?GaFHk9qagm$|se)FBNtL}cG4`{#iD(=30?^}pOo@%>XdL$10)JXq|mUQWI6{_N=E zGH$=AgijBbEdgKV@Y}uX$sQwN9S<^OqT_X(c9>$gtc1XsG`Q0q?^*R z`NSQNXd?1ha%S}pNF0m6@;gY1Jb4kxR~6KbzGrr1$*T9Ql=^kPYLBGwlDsd}t?Cw= zI~Xxdje>%>E3gcJbFZPk82@>|E9oe&vjFYr{2! zG9NI%bD~#1Cd$*Mn#^Y;TtZe%q2f0^_x&T`!~}#)!Efe%%FmFunvAnYMU89Byu=QnBJ&LH8m~OloWr3ed>Qinv^Jhnek_3KSP{16j|Y0 zmg29_L%dvNj^@T!NfEzUHd92BaF&?b1~p!_s33>qgFJT8TajEA)DQi#w90C40`CeooQY@E#J;fhK4gN$hh-*l90<9_|1#ByBJmcJdm( z>Dc2mk6lUDuzMQl9W7_;P)p9QNe>b1>Pj3&m(l{X9Q%f02n1Yc*-aSJjR3##>Q2kO zdLy699?Qv2a-{|uoT6#*H+h*nWqW%gBUoR%uokNHD^A4HAyntC&pBQ;=Q*DEN~*P4 z!rO46BxrbQc=%WD!`jOon_YgtS-06`-ECTPXTgNl^Ioi{fcdZb+Uv_uewLWr7uZbP z6cJ>~7)Z!c(Sa9sMC4!HAO@J?q2=Y)a<*@TN+>Cg|YaQszr=m4%Ep@zztde#b z+a+>UF-`E0peNd%x$|nUdWXfl!b>xQKXMddfmGgGU}Tfa6mScb;8YgdZD~tFSP^%t zvOFc`4D9ZXrV$@7*fgGJJ3n1s?#y3q6Pwc9fFUfHz0_aSG8#2sJORng-8L*I9bvt$08${8?s}D`j#nP%+3c7hV!606LegJ>47W4S@~U<>R+@ zs56SSL~tI78A8qGlo8O5$@$=02WV0T9CSA%4x|d0oY~mL{Cy-y(SQ<(_%9e-_?B{{ zNzgR2^q*n{T`kg%O7!iY4};@FGH`$kx(Z76o4LanVyFpG2}G{51y8sv+Y>Azw*>nY z`B6L9bTuWj8sO7|rylK}B6nOddsptlDL!D{xK>ruXWBV=D<-2&4eW>Uvp7`U-Mtvc z&sPI}y7X2EnR1Hvi#F|wyG3&p9O8oHO!1jikvsJAyO8PP1LBB#wG!Dcri}E&H`r#v zHThf*4|xQT_T0f&j|85ii*Pz);)XAL-#43qWo|&ceQorKhI=H)udE6T)MLW{EJB?c zgq18HcJVZrR!x$}*lIb|$!cXyhq_3Qp>Y6uRmWiOz)BD)F#2-R6ONuDzO6i`eaUwx zV+fWWr$FPy9HPWnKf(B$}gLtlc@9;*hLHt`@)(CSP6`P6TtYHV8={tudoXfIn z_jZV7cB_qdDBR(lM4pgrQ36euQbXGpE-F5c1)assq{Q6w1NCQ@RlS=B$f)Xl@K6LF z0HsaAhes0e13XV+M;E@crYN<5Vx8|uhChB0-((9(HiM&OMs2nbkw!k`%qqWQxF{solb(8K~+wb;Z0Rwa17y8^aA zN3yD<@4KSR#!lu(f*$i>yC+jqG%z9%EH&nyy2r+gz>V& zkeDOGW_j%HD$17KMHwno zAefQ+5FyNtck&48+gRXFW_=CM6?Z5v3;siJeKzqTfZoQiZpcAykHG=5BgIPiu}QKW zn}pt!`^~TU6)%vh9@5N zIQ>7|i$6KeUUc`;?X0ukyfl${{ZaRLlUY2r&HkJQ#{BR0r)_h#w0SLUwyq*3^}=rJ zl}fh(hx~XcHk@L~1Latif;~;f_JgX)Wh;&CkfjAN_nXhaN@dcM8{l8qARL-Fs986_ zAZShSBHe*SJOIIo?_R{T!0%dD%a_FOVM7GJA!l-YfZt7N_>HI8E^M8OX6Wu0cc-c= zpuNqa65GtkS~~<^#kb7jYqQ1ID+UX`zJ~5*n<={u#=R)J*7S#5W)7`s?64+7uIoe8 zdt*0eULo0&D*DS$Uk)Ow9;9XncGbL5UDdpT{EmTHCy3NfbM^W*laEbZA2wrvkGW%& z@AXRG$|~O*mA*$DUxS;22+a~6n;5M}Lyr+JMH(EiX|^Pxe}deJaYKe@`cA*tBfua!(O+Sb6AkXRHNFi5NYh=om-wy@SIUhT$q zp@p^DLa!>{8n=aQTFqqBfKIZ~cOnrSw+3G z&3rVZb$hpawCnL3evNR?Vu2g&fl<5p`9-?o^(S{E2pi)|L;U_Wl4){#Pp~B)l#*9a zvb^jF2l7O|h0AjA-y6#}j_trqP=m-;c-@Pe93CW3qh0}%&2#yPREk;i<+_ku(*DbR z^Bdl{OWGJeBtZs4JDri=c7BfvonB&ob(MQ|2YanBxHW@(S>E%-pJF83m(Ny-jwaB!V2Q3P!KB6hCe6u&s6gGy-W*Rf2qt*`{iVNIxVd&K3QfTFc142`UgU zKA0^5>@%INji-Ti?84qhn|r@aB|)~mEu?%NcJNHF;S#E98noTsidRMYa%&DOO|)!B zHAS>QVbk26vv08+<;+`?9Oc*-Y}Au>XuVBj-VEDwF;u89ls7jwAYKE31|RHZ!D((N z6%=cQl7-Ij%HzGy_i=1aW=FaX9kBl6Za%(z7*5T{M@SER5%!z>Y7txESKy6wWx(+o zcD+*77i9Zi{O#)LpP@{ZYdCo+L&T5;2 z56ZYk645~(WxhX?e0)#6zfEKd94_SJTXRf4zSSo0KEyied`vz*Xc_uS!iYJ(&6s%D ze0-au#Wl%%d=l^G82%LfX(}1t`sj3AAC=_RH3>~SCe9tn_%?uH90|g&AtNA0Nfre7 zDm@ueQ?tqVu9g1ENbY!mWN$VfAG$N6DU8HUg+zT}UsK*h@Ut)keu`uo%y!Cl#BY$- zzCDtqZ)FsrDDqPQ&ME}I$$Widrnh+SypQ%J!B_E0VXZHVi27?KfqbLB z@+#k|N?&D_@2N^(6bWwBR}r1Dq~2GpY5V>-02(N6Yb)KfeKmg5o!Y#Yw0$&^2yM2F z;4^6GnmVz#SUnFg*GW&Ha-p8F~-+2m(+b(lDcn)EPwsY zGIOVFKRKk+QupoD)P29CHncN29TEmJoxe-u7$&p}eP%_pOlG91`-*>p{+$TMf9=oA zNZ1(KC7qGHuLeN_7=~I@lK1VB6>+7IB2@7$wcbpUysw+~w-mLv&U{6J5D{gb>Ie{0t%u94TF6ZW;+z`=J6GuLmO0tBp}eN`c}M zue^}g`#g!rW@I7hh(E*}Q0#?Hbf1OmI>_U@^>H8K1bp(Qo+o)S=M`p`J`Vfs5d$DCOAEmKJ}MG z;6Esr+<@2W__Dkedu3qGO7Pp7NjfX|+QuY3yqjoW3kC(Ak+?GxGsh~(G@yQSBrmp*#H=HPmUIb{Nr2<|S<4+64r*D+W8 z%pUdM5gK`=I2V;4M#U`3D8-8Fr@I*AjYwEoefGCCNzrxW3+AfN?rMD|GE}k5FdzOg ziHRcu3oInu(Kiog^c_fMueyoZKUQZNSj?Gxlf^fEiCrGjMrJ(e%C)@}*9cu6pI_qS znM2Q`P8I9wgPXF}FQjcS_r>=`4L6~IJ_yI0D=S>xrk@Vl4<=IdbZ}O(&;5LpK7;hh zDG_*=y943K+>u^E3-Y#vx5@3k$zHTh^P4>2`p zO9aC5;QgPR=iv?otha^N5Tf}7CXfWwIB)kkk`53 zR;Z93UHA3SHoZRfBY~)e?sENJ3Y_oZo51g6Mj&Uf-4`y5{pJ^Uw6`xTVMx&hDQ*6m zm%ad!U?y;@g@GKlJCb1t9~ufIG}>UU+w%%49<`{qQb-21Sle8aA#C=hz{3J+jYxbu zpf0FxST#mn@_9uE3>E5{%7gABvIhXQ8>_>0| zkrxa={=_$dIN?jWAXFI!7;L0M&o{8w5+Epn+wx`P+F~2nVY3ek_>nYzIek0K@waZ!F zJ8D*S^hP9RLU^OhjQb@K%Gnf1II8)AxMMjg1B4!=oP*tS8DxyXh-;y;mG-V*uA(hZewmHZ~j4p+vox1%W6fp1Uqr`mDzO>do$=qA-`KYYMuh;R4_4 z56HKd|KHqz1ir-a><}uHQXf6@`F{W{)l7tIJ_eXEbLFz1Pl z`CFy7NVZI6M3Ag1(udE=NGCoWjizdGE~YVpaby&{t5>9x=FNbsgx3OjT4>bl%@v+6 ziy@?3)3s0RZRo!~vY$f2vDuNtV!L%D@@Yp>8TnYh+cA8?_v9G%NXZ8cpXPQtNsGC3 zB-BY~<$>e2e7HGEg>zCWx`$ zZsHk_*d&$q&l34#?tKNh)kfLj7Mgau)(hK-wsSD{4nN|8M}Qp-TZ_c>p?_j$pr~WV zP!gS#MM3lY2VaWUkp{)aa)Sn)=K9Dk#tcS-078GGx~aW6%Va{)bpmm3PE5*pdoGg| z7y7C{ai7$uS>B#SI1coBi#Ps(j?NR~gRTV5yvI%aQElG;b84@6D+=lEsQnT@TQ*f{ z(~Nx@q4*`8IJuy7{UI)@Ft?0%~Zu9CZ zWjp4&+i_Y?K~x?2yZvmG@J%9)cO9LD=)2o<`TXSe6!+x#byAABUyJfYxWZfqJ#9U? zDzrMND9eWt$H0%R}Allhl|cwOC&gR z;(0`jk4Y>44{PTFA60ej|4A~yKmrprYAmTljf#Sb1QiS_5C%{j8Hh>nYQWak#%L?T z3|MJ2I2q01IF+_~OIvMewJmLF#VapcunABS9zsB_Mx`2+>W-lrHA2A1{J(4OGn2^! z_5bhRk7Q=f*=L{qTzfr!Ypw1lZoRM3JhR_?G`aNQdcdWYT_$8&jwCr)*UHq#O%4Bg zF&zhqdQG0?F;lS_cGdKAu~qba;DWB81q4R*K0F`6m+08)yCi(o6`72AQXK=ABMsF= zR9`T;3c6m%v@_f4BCmGF5R;9>Lp5RQMG>@3*P@-|>b2ECYB3op05(STpaC!BB{1Z! zBJ!8r!gosO4fxP8!5?u@N-NN}fI}11SuQo z6X_$(m|ojRS0DhS3dGh%nZ>OFK*oaU62s&Ts3jFw~A_{@OCpi3=j{6w@Otl1`+ zQj8*@-10Q4^!hNdD)w_N(I6`ZIEgmMq@^yQ+QfTys$71SloqL`>kJz~v!Be6X3LbS z`KzG@dNJD_z0|il*rlVDndFUBG3NHv;U*lr;fld>#sSsBc;KHiNFr06fGrrV=jGA) zumyUtEjCgxexVY`U~mo>SQqcEnoyn+I)8BlP|?9cNYP zOL~CSEDvL+@8^yDnsE>dxHv3`+VV#-F1yuxe>ch39^_~AhFo=e@Br_g_?Sl8nNdOx z_>Qd?Ye7SBsCM>j{hT=#=;HKJ<~X%NOi&Zd zS82gzd=;eAra^Esx;rFR1G_aZL+$uA;J`S8Lx3RRaSWHXA{{bM%xOvE2pQb_IU{Jv zu8gOg4hEdTT=*Lq%z5kJo1N&RsEu@Q0_sAG2qZ#JsTdYX4&;FP?LjbpT~#lXsxPK$ zQ=eJosdQB3P;=|4CedftW$~iwGy}&Lh}4=En~lIWUz(4QBIV4G?rX;0t0;&$c#=|wXkhHE+c2@loiq9D%>$1mr;xA%d>!!kdQ*8i=peZFUCc2_FiVw zfYG*1af4^}R&ViiLnW@^C*&RDKJjVz%N}$E%+o@Q+ASv^hR#efLeqW;_aaS9^2(p$ zRuj)gz5`bjyaHzk+M?#|#i9|B&YQJvjoLQB%@yg0G-OOyLt4(|yXm*RR_>cb5t1UK zQD6rX#3#gFfJPyU>YO-4+ame=aOqZ9Ycr%lIxN%L$q-Z=vU!kz1pFnvk2C_;9v@2M z{ZR?=)D(?O=AsoDtN)Id0ul4z1pR#kf8hdT2DU|}Q6s(sa?Pb0etHRU(*?`z;Ik{_ zsL>;Wy$ZZC><3CD9rkriK%H?B<3i}ih7tZXbw}Z^56~nH{DRu%A0FXbgIOPY<%vV$ z;K&jU&;lVn(nQ;h(@P$0QU81%i6|;-3Xm6fU?il&v|HbP;df_?pV4>C%dq^Ne- z0%J69<1kKr+z@04biBk!8xKo32JwH6xaAFtpHFqc$jS}VMT8uWGgIc=dVpsW+3>Y=?_(ih=-Ey4xL)~=) zhiz1sU-D7-mj{!-w~_YBtzf|o@1MF zi3$;lt(Csk)a>GMJ1V_bE5(>wygYm?bN+DKUp*<|T9nz{wP?`~a4LG{UhPyAuJ;sd zl2IYo0lVr1E8>M)yRV2|K}V9-1uQ?DaQAgFOGY*Ja*McN7`G;5TwZGAhQ8F)a#v^! z;c@hohnpV=cU&D>Xipih0oK{&vvKP*xR#YilJr0@vCWTP?5gloc%n7Su@$Jj3?auT z6`J|CJZ3XPtP#J@EMLJ0CLy-8G1=BDg$4+wddhgSO6-Xy)s4#&ywontLY0k&4W3{U z&5-@?e}Y)HaAd30Gn^IL4QzGN)^QjB*;a-DP~~&Gk7`okr18{FSDM{03=kBm|4i+0 zWow2?I5*>Z@czPt>p`;VJdSS?%?ZH>N_Dtk$BCe~#HNAjMq*PL;f~7}_6hndI365f z>r&BayTeD*NDs$O*`vO_VidOal+X|eQmXuZf0WBwlmX_d4A7L7zu&LG(qD*yYC*a-P-(out=b+XfNC2VZW~~( zcMX{9a#mTzN@IaM4+6(fm;q&(j?WJEIb>+8Iskg8xBm>Q;>XoYr&`ERXa9CES`%;N z4cQx^)j(Xtv-PfL!~ou4`*ztOmexTlq@r0%n0tb^Y5db+WDg99l0yRD;DHiU>j`Sm z`1^weJ3?>ZWk5DGIT(0zhW*e%jP)Wf)a!2yM@&6DDU(;O!snh~`N%ryI`PU!zf1>X zvJotZ?cZuu9ssErbw6zRn}M+l?NscSWs&WuQ@oSwZI7)n<>8JCgCG`02x7r28E}S# z2B`InzTI$SVrCU%L@+8IG!mM1YJP?{#+`tXwqGwGxYs6_Et-Zahn-% zsd?OH=vBi^+?NqC{fDd?8GQ$Ns9oq;UpN3El**>G`h$BoHGH)T4}*yrR(~0!EV}^| zf2&-~F8}1~ap~yRyts5E)N$J!iIpJ#NqxSI@S$7*(>?qQ%|OLg{(~@qy~PYmE~HA& z3tn_yxhgdWR76318Ur@&`CUbLWEUm_OA1Fq7tcLk*)K6UgK*K$SP

    c*A2T5DW_QjgG2#*4r1wH*vAbzL@+Glj92eqChSlv@dey;!gWwpj<4rFYXiC@!1!l(Og_^ zU)&@Y7ugr5vU|}gu`f=Li$eRNw_N1e7jC&2WM6zQ0jQ6)FTRqCH2Y%lAYR>s!=Y4r z;xI10u`f=_=HgTPLVUZeTKnQCxwF~6aLL6#?2F_HTs&uAtj2C_J#Jt8Sz70Q`y#C; z7q{CN1NMSWrG4?uDDKR)FYdjbi(lFogHPk4%)Y4GLz#2zix1^uoPDuFE>5*Cb{0|Q z1pA_#-WJm8%e9a?J98T#BUICDvCBV5%ubord$J=~o@x+}LMZm2-;5Kav8^w=Kj;eG zM_y)*Wq@28%Qfug{0rb_uASfI_yN}s+Q0pUqg)GoX&(=BT=_flNk4$U7jV&o_$xgW zbZr2xe;7X_;QxTX0dE17kKh;e`=F~3C;=`4E(d(TV&G2TL0|>23Rn+p19k%zZ~#bt zH0VkP`U9r`qk)OQG~g283g9{*2;2?)9(V?L3D^j{1?&aB1P%kKi2oVD@c`=wCuA(^ zp7R*BrDko#P)u0xuCtEd!ePhhjwJbd!f$-6g^@o9{mj_!X)H_$d=~K&*M@bCX!N7o zn)LcPTl5F)7)G8f3on2@vgPuSV+Hc}O^9%^L)8DQxRe>kC{)40BcuI8Q9uc@sKyo! zHp@>jz!7KMqagP|`u?=`}=5yT=TZ(ZF{!2`yt#1b$jvB@y2 zR8smaJXr|N_nOf~Ov%WFD1-JI6VTl5BV!}#2b6Fj_H1tOq3` zaSn-G-M(T%b{_CdtTnpJ(yJ$?M0*PHV~Irzws8{7`IRL)r5VjQ}&@DAos0#E9L5* zjE-14P@d4Ety~PBmtwxrdrK2XBVzuNGozltpP>eS3gM~gfOI|Z_uG_aZ?246C9Cx@ z)2*1mzDAu~E<1_u?~Hs9N%7o~LN^8?T|9S+gLxp5>Ir_s2~V^6mMoKI4@rJapjq=@ zQ+pA@heX;;#%9ItT$d5S5H^@~wpvJHN~PKC?F#bxs<&uBON>ZK#)H?90dc zTEavgF|&5%N{|pHU}D9p&=6<9*6ZeR+gxT2lY8@H_l}c$GbN4ehA+3U5#Cp}=w{aI zY>6GicGxDi!)i-h+uLEAnc@1(5S{HYN)_zyYLAihm;$1CH~>9fB}J-o=gZqAepAGG zFv_!y*LNHW&1z(o;;FhzT5UbmLBh$e^#pF=n&nCgsSGnJL=vfpe2dDa_OPR}Db5yA z2l;I&Pc~QD6lbe9r5P#9sd6rxlto+_w}j5`OV~Bt|3pcr|5NS$7fp-85cDQkmo#zn zHHhQmM)J5Yfsoyzr4VIEM&Jli6bYhp%>^f_5q+I8HQT5b^6R3EGTII_dcmh0y2G5uyyEYJ6ztwQ_Sd15IYY9W)}o zk-ZZbr=zQ2lbIw`h>SxeQaq~K>;?lt|8%Us7pnRPv_VcvHA|Ox~Npb+AE~ z*c{fShf@}Z=N0P3e{a?LO9(Yj>;FtzpM`&2xtVdP61n*?x746gf*gk9T^HtvL$ zoBNfDah9a`?m!HT|LP+XGGH;nU{Y&gFtxZp3^u037|ew1{M7k0AGh=)=Nma`q`+(B~N__2CawragVQo}At@=BDAs)cP3qtnOk*`)X4qseHl8%$o`X zHG6+G4WQ;f+yAC%VOsbSLIO7BnZay%%v05y2@nsubS?I55Ygs!R#|fEFdeh#=4_X5 z0fG&&m+HqB4GxzL_WdfjD?BB8&0ubeE)%~Uq^eygyDv;rrw8grl0?pjdgl7sp~^-gr0N() zI?u5A`P*BXl3$hZ=R}g3xKtFBGMd&|p?WalqS{8F)1vJo78-J;ABW|8ZO(I<-c} zgA6&b-{Dtc+gA_1U*7Lc8^+t=i6hBzxlt?>g)uGPVWTC7N4{ zh1$eib~9y;$R1?;PD`Y=);Ci?ZT(uOwj)qe8zlm_WVi@Rg@gR8w6+MbjiOBpQgG|Q z3}Oz<(q#B&8O^hZVXFR1STDEvx?Gec>1M+Y@AI_7815i&R&?<9Dx3iw>5RRAzQ| zF4~rW%FOKYI0M0BMM5FP7Sr7|UcF9QBt(omas9jji@R}_x;r?~VQBIem^D=Ol> z5b1B21^$P!V%<1wTPu0yr+g?1qP5nLP;iTLY6x%?QTXuwCLSMh>IHc8} zFr(+&j%U^9ZF`<7c}wQ0BgeB+^jT&cG7CvV#cKx{WkY3gmh8_txE_N`lMl=6RIMj;fM|Xj@)eEzPR@Unp}#hOF?5 z`qQ%h75`=1%zK44^Zv>)^Nv+!-iVla$8^ALHX>@SX6yCg%5C;?rK<5CADzflFU1*n z51>k=f_sdj48qQOBlKPQWy;?;|K<#`=%sXJ$k(Q@eYd_dNo}G_!=g+hWsSYQ&RUZH ztxuMBC5`5v^!x6T_1(ArIv8GYer06-^DMK=%#&xtkwBJnaU>ELJw1*DHk(Ur%fYbt zX*!m#DX>37)^~YtGUQYswou7_LtOFEH_X)fhKFR}ZB$&zoxj}^xPxn@Z`eNnnCAM1 zca529!`1|?a%f>fjoo*++%lSPbiCFf$C$O>_J>x??zRt`F*_0zHELYXwx&@lrF{6T z(dZ(|hoaV%5BuYk4+k~ys zYL&fPHA|`9{Z52Cw=t#kV6}_N`TH3YCUu{1uK#GR7p1%W-Fac|oN{ZN@KbL7jIZ-hu7JnLj!|L@wrjqW0J zW!y@HQPOB$^jci|7kt*d{iiU^{V&^p^P+_I-@WO7)Bdw$Z<+MK)3y&sHmpDvi4X1t zf1$0s1LiI7ZLzug74fZLmJ1SO8-NPao(qgi!uu)V{%G#2n=5I*rcp_Zy$$b?>FF3O z`6o7^tYvwAbd&GJEN+(l*W&cN z1L!h&@gQu3#?&-ie3G}ylcSbO{q1K(q@(`s`5zD?&M7fq84qK5mxouH>Gq>*oku@r z9qv4uqw8xF4~{;+cZfzq{JYhwc|M)GCzE!$#U>0TLF!d!Y_mY~O@M#h6myckRlPky z$k~_>gmcI1$Tojt)#-kXlc$cbpN%NCu_0ba!0AIM0mLHMOpzcQF{YYom0^;*0xjKV zr|6oCqMCQ-HI2P4-BYzjt_t0VAauqITl`DRj*DF8F1NdQXR6C7Y_+h@q)57EN z!$b^--vQQrdYL)8P?5@Id*SlT%_09N) zZ7+P!^Wvn8as=v<`rvDxDiJzm9BeXc1{2%A9;04z{p~#t>=1j`={1d+2L;M*o6HU=9}iiUJd_EbNR0k2d1AEZ};dXf4#Kx3*$7pX9>D~yaTqG&(UgP>3I*M zCS-SS%tSAFanHpt%M|y}n=-{I^<%kk>&i&NOm!XbK7^!p^oO>j(BMdF$Mb3AAgo=<8@2L6B(?^@rZugS3M&gq z1R`z8m!fASP^Y>4x;T-6_A#Ga$Csvx(55qA@rl48dCQ?z#2&4!WmEAj>An#xBZt{G z-xf(M<-z9bN8KIe=85^bJ63`)nl~|mpIs|0?KVm?aWD8rZ7KFF{!HfG#fNxG=J$=v z@9U%U`$l}*h z&vAg&0);X0x6JgOs<-)tobH>=RXGaZ;0At3nB{H#fR0}=Ka&6!XQvadf*sJdB3G$j zFcv%WCtqcpv>mqMifU~w*ldnh-%OZ56Vljy$4Rt_XM-Va!xq zw1n|KLOWx9k@cPvzu??Gnx+HX3K!+rm68oGHxE`-LnNR|QT z>P{j}C9|XbTWDr&EGk7wEorZLUdru5LoXz?#UO`aLRM1uJ1Nw5-KEb|{j+TnD?d<_-3hDMYj|yW*kOOLw%@ve z8;wbW2@a3n7V&nHbw~ahR!>L`r8jA0C?Qs6hzD0urg(4_iK!RWSb_)FClHW~!BZ%D z`+3=mK1%VO68%KDbg*Z2VYUho5>6?s-rFfKF5TtpYD`Rro4D&z?M&t9d8S9>i+EN~ z%ciqT<)Bp!I$Jh8 z7ZFhi2Z6T32^G59&Lwc`D_Y&W*}PytJN@;fbd&Vghm>izzdCB4>e5oBqNXh6YtX8N zvaJ#qXZ{2;0t*Jr2eU7%KhVgL_-+m9K`hjPv#=7 zbh-9&&+0|4H-ZudKe7dX*sbO&L?hc^Q~TrFmWDO9%`ja`w)S^bz8Ko=)Ar@LY}uE5 z=N^E6BnWh(``F_hU!Jd#5zs@H8{<>J+Sg0Ob@Y}WXyiw8*Sz#k8v8u3U#hWR!~r#` zvZjw*0YkD4J(qc<-2@Xm+eb73$hDN14mfzwenP*Dx9W28t2dh6QH;=BrN$+>;hPCR zqFS;kh;z$dnug{2^0k@fFvpfLNmuwPQh&P6;* zu4lxb2CIhUc`%c39TUhX{u*Gs14kfvh%ZJEDfxXSBIrd*GUw zD&k;YMYiz*N21@w|3};R07O+~|Ife(gO1KAa`=}%C!pHhj{>9R8687~IW8HgbiT%nv?sF+0 zS24h6^^>IKR_o}8{79mGos!{HBqOOd_gS59!Srttz8Rgr@_y!GBITO6|ha`D3kJ~97!XTF8%VmQkGE7jKa<`IbMNo!hCVB{GIO4@3LMnmrlWyLmFzu^-7vNN~38-KD!<^JM}lOWiHBcFAE)U*B+_KNvz{1iMM$0II&n-xn~Dn!G)GPJcb;Y-r!gVTcpY_*c% zM~H~hfg*Rs2M8nio_XA7G@M75(7hXO=twFkn60E)jx^$oLOAhOD=|A4CEvv>F_j+k z@klr~v8$An*-A(%YS0Z~^{EJGyYZb-F6Nt3^tU~g_9MQw=%5@DXfTKyL-t|sqxzeE zRY|`ev{Rd&HknV(3>xc2h+h8;F-4h)YRAAnQqB1xDT;@^wWdV59R3{vqjnBeimi!1~3{_`MyXS?2rEE?wkT9Xw&Dj%Y~(zy8)Jd zL94=?RrxjWkqc0N>6zd>pd8TQpj)>Oa1_w}5PZ-Ak^s*FUIkFRjrdj5&^y6l<(vAh z{&xQa_8$QC{Xsl$R)E6QeAIfJP~sX6!!I(x4e$c=AiyE}Ei67nv1wboOZv=g$&9BH z%ZCmMj{9#kOBc{=j%*eSlVZ;U%RgF`Jk)2Qt5VeF_Ex2K*P|!j39Lu=f>dLvY=1r4 z@}9CD{Trz+ss{*uAxQrxm6=4=Nm9lL^{AqTHDAWd>j8IXU6iOYv`n%bvh!V(qG+GkH|>kZUJ-k0g#kaTl7ZsLCnyC2)3e zOPB-0pWar*+tuAP-4iN!>G>{th4v#k8}ZQY-Db-EF`)la!#SiPDPz$3NN2oYiiP01 z`};!qC0i5?!S!T;8VnQgV;Snp#gKXD4ME7PVejtcrM2D7>huWK$A$kKMZ9C)vczP5 zKLZ{nVJ*}lvPI@QR*qDNd*snOI1hFyN!E*Rsltc_T`z&q-GoO%=r2ffQH1{f{@*DM ztuEdFZ~FTm%EDpOGpzsB>gHUkx`bcO|H8D3dl@;0S((fI{lRD^`M;BCcLgt9!@eFs zwKSKO5c&E)s3)J_AiAlB9W-m&9m*#6#T4OeavpGXQ8qbjd;tYQzcuK7zu$fSl#7ZA zefO)i6%Fm6BI*|!Pj4d4rN)!O&lBsNIgXBD75@@k0SU&)thR%|^fAITw(VRA>6A1v z%e}|hMVdI;3#TU}NhOagt!L8`u^mHqr4LR4bDSk{T_+LEc}2kn z@Z$vsBXQx%aN8dEMS;VuOL(IEL=rAx!aPxSgPYO= z?9KkXi(|RIBDu%Fp4PLQQ{8qP!1#MoJn;GF_qSENq>IjZuU||B^F`Fv?^0ug@Zs{` zIcV(4HO+pxQlLJ_i`VBzQ~rA|UY*|vtimTuml*EJG?Y!Kp-KbsF|0M6jaZ+Y$l zspLSlIsCkwQvSATkS55TGeg8l^Ik)(gr?8`C1);LLhk9QqNhoD0ZqZtn-^;$*BvyM zu0^1tztDzsjyEIS$Zeell0nrqT7#-jg+Ud+d3UL`37Y<2V(VA%43zu}l69DRlu6L( zTr7Ly)gUDm$)Lw&z7+;Yd7+N@mlQs7x|2SN*-aM`wyOlf=Zlb^gNNcnq7Mmgl2sp4 zxDp%Zprn%*BnyY&+!-o3zXpQyHtb=mY_&iQRExO)9xHTqZQG)A^6TEF-24KhSiBFC z*})ifLbM|{@B24}tmZ**cTuwHry9z7?Wg|%dnX94f1mzrE^4aKe}6^Wap+zI*_)vM zNORGOqJFAy-?ap`FLz6M1L=eVhZK;bMM&Mar=9TzY1IFPmEI@w%GmQ%k$ALgoHeHb#QJ;0uC z9t;(S8g^FUV78&B5d8k=>xjV}hy(+4AcHsRAO_+VxbPo8j8tf9Sf!GLcE3ncDw1Gd z8I;5kf1?g{bBH~R{@ykGw zA2RxsJtS^~Tk;F!`{0~Z4Ig)`1xyy2`zPG4v6akJ=~EMVO6Y3dQo$7hjn)>&IH5x- z4c9D_T+ud4xlX>&87UQ!Lp%`8JhoP3eHlq37aN^B+f%~|rH5p{?lh9|x}r~hM#@v{ zWqyPGdYHY8Sj5}0mr*{dn&j=q!k(>|u;Uc=U7^kO zRE3aJDH!1EK{9QL78>DNo$rZ0Q?{LofebX;z+_kW*9Xs3a=HsAyuJA?24~QNoB=!& zbh6x*Ctl&-ygh%ekuL-|!A~*#!!~@O8=tFQ!sI1Ra0XIcN*+V<31z*L>~Ix8wtFGU zAiw=Oi<#?G`a*);uquYqK-Y^3efbb++NXgkeIa`>96|FFxmwI&uE${ z^x2MkYzO73IKe&wO$0@U90m0XFX*r|wU$_A+Yu^f=e)~!F*u%*vk$UIs2t=lLdrfO zO+CnMY>rqDL4kBktIOLewSbv8Ma)D8Pxg_9kr+hfv{!T) zjx~Jcr!@ZcpRXr$9P7B=uN=D|F^`?j;1YW5*m@FE05>^s9ordRFcguIk-Mv|$z#)S zbTA9HSfrK6`^!JR<+%ZU(%)?lRkB7M-1*?3FFLqidtMpbUm#8UgBwle^%MLyG23(o z-4VlC$}x@1F*=i=PuC_F-9$ts$m4fY!(Dmg0_JZRNnsZg|GriL)}m*CW=hH1FuKIiAuuR@OiVFQD_+JG9IA=v{w z#W+O|l`r3efe>Ff%ON40_y-rxbVM+?hdEm)5a*Ztw}#E}r%}!Bicw}9fPPgNf@gwT z0e1svMDzZ|`8-TsLBOcW=H=g^?@;Zn|K_R#quxcus)KBZYS^g(R7K^yL{#6QR{t0{ zg1|R^?L^#Lm>Ad#+(`L%a9jZu1rVR}7)HV}JnL7Osj9@sR}>Ef;S!*oUs0c6@`M)j z_ZJjA?F0o^zi~`;#c42M>Na$n`T;l^g|h|1RRsU7VWWc5aWcjos=kHB)&M8;t3qcy z6BGd+1NiYJ?iVAg0r>N9!aV?VtZ7ofAWAf&GEVhRDy1`y(?Wa)PG9*EIK9mMiNgZr zEW2+ATa$=GGgx%!eDfRGIxyz-*W-oI)R)lID;!OqC?#MLbRwl?t`I_Hba3>h1U<9~ zI?;@o42QIho~clDcH9mT7|Ft*hGCgRn3?t^AN^3mXk^Drg%ZXHC}A8#Wl`s9{K&SG zAkK~K&9ZWfm zg*}U7qK3gzdSl92X;BmG<3Lb*MHIPrdPnVR3+Dcb6%y+1Vm)!=ebjuZh=^9 zc`V0*cUOxI^K(N&$#(0`Iyvl!-_f43yu3)!t!TGrwv%s$pr8|M> ziUIH@GtRWBfeoJr30f&0*C}h?gGPHPaAUb}zOw?T;#dy%?iC5=JL$l3I_+sdS`_!) z7}b8~J2yQRaJ~blxvh3~2h^`H39b%tzVrH;0G>s(p*))74U)w9Smw)qCHQI-rTE~0 zIwt9t@c+2=A)EC?8-6(I+VjKFUdz*A1LpHBwYES=_Y{awg_Z*S#eJo!o`$I~R343fYdW7@sPQohNAnD;k z`IC#eP{sgGQUr-ZIqiLR4;R^E|w;uEkw zPGcBn6H<8(6n;xa!@k-wb{ev?nPfIBE6G7525_2b}n4X#b#E8lr_h+7=K zG;2f1aFRTwH-FXJ*S{s7?cG2{%!2(2cWvn($>KrKLsuhRS$I1CZ)Cj&OB7HH)k;kf zYYZ|k*CQ0mXZ){NKC##hSr2qVe=(MAMI!W%-#`XDAij5_?=3JJfte1sZ`niL$L(-o z$HPm~UXykhpD_5SaJV37!+bAb#bR*$k+_8MxOT_RoGbZW1(XYdd#LslZ2b;``)M7) zl5^=y4V!$&U`{44kta@CI%sJ$&m+?ahn93h!HsCI&}`em`RwqP$Gslb^1c3+!yfa0 z-SkJKOErDk^#2b{uLS?D?er_?&_@WZ-~wP;+j`F=bZXOQ8hs$$+yj%@JtF(k0U+=a zvf=}6Vw+|D4F@q8Xa`88d9ae~2apWX?1}>~b~$&w8Qw|rgHknfMh6C-NCkRKmOZf$ zQqm<42iWJB6KJSA0wKz(CT(hHEfKf$L1g4x5RZ^GBI~fZarPBd zxfWHPZ()xpgz^@G(*4zqy`crjo>nBwVuC;yi_n#zK>Jxcp#$i3pfSpOAB*}GQtq^1-{efhhp3*G6{?E5#_*p+rn-ZdAJ`0 zKKxr)(K)L{G}4)Mn5b)9hp0`CS}`U%v|0KrB%*_Kv%5Pg4i0!nw?>~e%DgNJuOW_7 zLk7Y?f0Ybu1Gs%c-5)uPfGRKN|Fsk43~iiSNQD{eR`eAl89%@tQ-)7663ez-Rwh7yl#~dnMaPxihq#%p$~Y@ztf%~vZ_z(z zXnzeYeAa+j1hRd(lnG?n*#m+#3Th|0+dROgXu@eYy+yf*_P0>Im!J*2{XGIZj!t~X zVRp4r&25MVd0s0Uhkc=FZ7ZvOJiN7eTocP&`Z~x7__a)4N3;7O^ox{ksK1~32gP4c z#dFHE89ZOen27a%>L~IGY7r$pL)(6ZXt4tVw+t+9K+ki5ut|8HaNey`)2qLf*Zl~mZ}clGap?Od zJk$4j{3cv*>!tvnrQcTk0xti>txE+=0Z=?jvl7q2c~dy}9e%h%JGK9RC%JPlJ3wrv zr@l9je#y>u`pgUP~R^YUu&d<`A84n}*x`kA`H zgSX-gGSZ2G$ZvdrttZU1aYuCaNjo#GL$Gqy!)%lj*hg}Si;-FHMFcHxM_Uf;k9GBT zLb*;zXN>GIHSQ%n*=8C?>mAn@_)yOv4>(83@&aCR>9(!#PY5R-ZXY{;2DJ=vA)^-m z!hEVKgbTo}h8a~V9MN{x%C?u>2O3y`YrjuV$c;k_+etvoOM*2>fyU=-W!EDijIL2U zPuNq_2+?JB(U5-7qHMb%nSZ!+Ln41eL)I+|YDhZ?s3G~I!WuFM3H=R;)N0=-V^3+w zGz@{Z8?xk&muLt&oU8d5NX@51TLp;`VfYQLeWwJ4k=1(~I!_qByUrQN>b;E}0u2Xh z`W+*~nts2Ui{Ey>m2zpXdVCHlc(6l_F&q!V6YJ53R6Hy`iO~T~nKsAgZ^cGC?Fkvg zFBkt8*vJ_XhK(7>1p@)3LTVyII5rv^H(bSl6NJ0EXj@A{S|c+)fT9(eG8)Q=8k%zI zZUr6rKnA-!9#R(eUir7+B>8_d3r+0nrTcLcNfSHY8~1Qv*ZS^of88*RB6pL`)egjQ z?MjoH^4VcTBU`L}c@+5{orMS@7xWOZx&N=ZMz#a@orL$0sPmEgf~!=9%0AM3vmcX$A@RRO0m>(PtuF948%k1!`7=;pD&)fs^lg37kAX zOpB8@5J$nu$A}id$va#>((G;oW2NbmBliRsUxtKsHg|bg@e`He?^TNL+eYz8f#TCb ziXWmB|Hshc#RU16TD*rQNZYd`pM7-|Zx2Qz+w?RZ7vdhiA#Kj2eDjS>Vhs)_vbrJ66& zzz6G&<`SbECJj**wa#r*N5a$br~ZqCVtso2-|eB`>N&_%ncx%NZDTZ*Q45p^Z)|KM zf^8lmw1>p?S#4-eyd2Xi znPsJDXVnxQS0#i^cJ@t~N(gVGqtq~lgj5NPY}Q<*m6zg&P~mR%J#qR*8%#<$bUIQR zrG*9=7kPnK!v)pYGO{KAI6|1=VzV|FB-z%4)F)Y0hem2g@eqGI3Ss#8_#@O@wF#i* zFCbc;FBv@5(;$;=H(}dMUJ+ni8H==dv5c})7a5MRZR1|8-8G_iU*8Z^J8)0+(?J;3 z_7C_|a7VXI4}i4p?UV!@xE|+{2@FCDtNKzqk_Db`L^;5~Tm!2t{njVJ#RHZQp%`3G zCk<+Sh7uau8?P<>E;i{u7heS-vM_7Ab$Q2Mm*twekjjQyml&D^q2ytU`(piZdHpu1 zwW-O!pRGy0;G)TU)h`Z8oU<$C|<@pA(kdEB4@{vhJk_rfk+ZF|oBYTeq|A>^}8%lMsuq$cd_Csniibr30C z{AdodlNK#0nRU6Fi=l?|H0EWaAhnw1nUC9|X41(Xm#YPcnO9{wK-PZ)f#}mVwtNe~ z^RRDEiRJBO2n8@NE*kd(#BF=Bzgq+*fX8lLX+6a1=ON)w= zvBq;3Xhoq_;|3f|_=+%^h&$P}Exguh7H`nfr1U|~+BRzU*SmNbX`&3Q7F*dVUWTm^ z#o)deteo(dUcU??LN(KG?^IgUhM$(D#;eVxKVkrBw$s?d`9)rVc@;x>DHXgCMQH{J zBlLw1l7FlqhWF!ByrOO7IaDQ@9B*jTJuP1cx9ML>o8E%pPHofU;droD|2sHMzsCd~ z9tleG&&g`lNJ=A?eysaXf7U=L+h6yIaXiU<7_o%efymL^S9go9Oy>lg0c_Wo>B=I? zbdN@s>Hcge)2#(0cPP`n14xc4)4dJ2J-SS{4KTx4rdtA72RI6F$CT+l24r=_FW~A< zWx9!g_W;KLy-a1g+W?OMdUP(+y$l%I1!)1zfNkb7-4}qK7L);41b7>80TAC6c>!F2 z_W@l|*We>hI`5oHx?x>>0N34jCfdLCDDQc#ABdRkRok|*y zr05NY^Ug+$3wr1BxPhvQ090z=aXs40dMQ2vcVO;_Gf+8GxQD93g;nG(+f1Hmd%^Ok zM}Zy;V1XqHI)z)K=>StQqkM0DFY9S&Je(#GSGA4IlKMddiJwd&IW&a~8|hSA8Ue4Q zP>II9@ILq>75A;R?~n9MxCcJ-q$+@4@#kxpE_cd`MBJtx`Q^Hhsp_rHjalgS1mM7eAy4Gqw! zW)M9?uznH>ibovKOC*izPV@2b_aNRqXs?TorT&C6bsik+&9$^^1mV|fg>U&VK36EX z?J`kE!VhF4_fivf9}(;s#Th(xC60g{x6^VC>57z$yXb}C&sj(6@4pt^Aua|V{=Hb$ z$iEG=erfGmz2SySS}~G-O}qXC(jN-wulE$LciQ(SFo%##*j|fN7s0loUzwojS3Ja$R2n67ZGe&Vq)^Kz2l7Tv0$+V~8 z`r@1J&vRbJSSIIxT@}Et(L8QnLk~6}D-dManua{+E~hc%+zetQ%G@PNL`G*D?w6v( zBvX_Z?#JDm_AlhDe>U`UwLG9*p=lC*Xh){<_$E0cS-5R0UN}%^w(X6qmLH0?o}M3D za6jo9E$oY#w=qGPdAOgF^!=a%z3HgWH=T}8ijj>3=8fh^9iE{ze3E|1I=+tPNFz?n zT#Fm|9BJZnq>0awMw%myOnOi?x4!ceK1XoN1|ndNH1avpB<4sX=Ez3sEb6sWNP}MU zJB?B`>Y$L#>Cvs?$iqvbAf?YzH;X>I5a_cpvz0#U$HQ<73G`DCrgoXU$QbCgQT|@L zR_V1N8G$b1z1EdI7!(9AH#KU9HBr`|%;Lp4qf>B$F%TrF7Bu%ehl|@&c~^Xxg>U3W zPxQyya1s9}=m^me-#`F%jW9NfR>B3nF*TU=GqxG$oeK0d|!7|P29j-0habn3VQb-UQ`21khCkfA?AJxq%PmDP)f2;scpC%+WK!k^&?el{CIOrh-^ zL`;{{_~7<$NOV#4cp5MM$vw!2t7<#F$44QIJx=_X6z~9cM18r~QPz(?@D##Tat%u> z=UH9U;{+eCme4AcLnK5~s}wjTn-p=|L=AS=blXHmGA*AOsTkXV+a@-z;6+W%V@Ya7 z$xlWf_2pu<9vNEe70Y>69f^w*YO3n=A_c9m`X*p{vD$YoTHi!o-+>|Z?clHPB2hX< z66*UW_2pvq_53>o%b%BBqP~9QCenpaNxZUTji*-&qms{vOu-?xyJF@sb7;x4Mah@$ zU!iXfoifGAnRAtS~F>*gaqUfHJ>kBF!b|m!Fwfz8-`YN}Sh(DRGJm z?mt;5M$u+8L{a2CB`x28B!N5bZ&I`}h*6_k)_>(QO!4{Qzen{-Dd-+mvc;@nuWlFn z>0h`<9mkY>7TM^Z-TCZngYwdT@8`3wB9iI|{jO4urS=Z06(*d|7vk5jY~lz$BMt4J zArTh-mu?}x!^Q7JF}RzJ9OZ&s+^-9F8G4$1V+@#mbn#XT5C`JjN! z5c!YJ4TkwbgcDZTb>I6@l*bOMFYTi!kNr>|G&T3Jn_V15@TB2a@$_@Ef%}9oYJraE zlG%3OQlBrxyAh{19CsN;Ylg{@0#3?t9X(ycao8Uh>9|fTb)CD`VRoHMf}cmY>FxkG z-MGJ|npw^d)=_UE_bUqZc7!~SPPem`DHvh6T830Oxd{(^K2V+};?uCv;bF>cTj)Q< zSo|~;Ndn5DPhwoc#GejV3q$cW#LA4Yq<<1pSK%rlKWR*z#mzptW4d2U-(;XgQ{wkpV7^!(4U5 z;6^xy0Zy1BF_LkvOD7=d$^R6VYP63PhGzw9;S8-{LBr~wZ1$Zo`j?U6-vQJl zw2anw?*Hc;taso*#VhB=xmr^0QKi?&uZA4y9MES6X}H?pzmlA z!fjh=7WXF~pgeLyCRHN`Idz#xOU^rofhIr1(>k0Y-S_@ljKwvyktgt$w}sa9KtJG4eKJ3bW@UCgbu0Q#Obw(raZsj?3`37 zPe|Z?Na4Iw#?=k!@Nszt20w-p5LRoogB*fVYhM0`zywVbDh@aEe2Y)>WASad^6f0p zL1D0vWAl};uMvh!VG{vc@zfH5qAQh5bCgKiL(!YYqr)xeSofYC3HW9ncYrh^QxD1U zCDL9XK+T}DlEI%tGk_WPUYL-{hFj#+GTD$Dxf5MR`1T^L+CPVO@ew&L2;b;epxg^x z21B{`I|EWg{uG4nbt1*@K)2v0$r+YWs)W!1zU!pP7I}Vx`)n?pio)EvVi1-t*|5t0 zzb|za8^#MVm(BvRaRoO{Fkt3vfKyfFf1jfqw`()A5^V&cxzEZoO4vLdUr{XEp?p4tY$${}@(m^IFv6rfLM-Z=iuyiH1Ek5J zPL*X!yuT}5K?8*9L4AQPkPe|Ta_T;jsIM{rvUwuMBT8NBDFF?7+29}Xlp4-ysi=P3 zKPQdG?jqgT;B>sxF>oJ8&qe+xbfSE_llS$ddydlw^cMA%Z~j2v{6zNIs{&{9fHSit zeGs{otijdW7TfaxD!0z!ydN_#O7kyX5s)w?_^$5M{sR%boNElny!4VqMV0}&Gm z(ZDpSFtyJq5{v$!#JtWk5PgO8Qycwb6Y(Q?0R(LtI zHRbspGDs6s?d;UMRZuO4ZRc_G78@>rL2<3+wv%`{S8n@O>Lfuw(pCr2m|ePM5FNcc z8`*!(O5bM8+8gYbD%4K*l&7DLUr*x{p9! zbY>4dyi;|M4Mj!TT0Bb(o(!Wozrx%#+T0b}stiK{l8%gW_AYoGbt_oa8$!W2632@J z1743=u8KMm7*wiDDgVWI;zL^ln<{I7R4)to#p(?803=zTutDjCnXo82hGF& z>9jP>kS~pJEg3}qbru%rE=^e^#&0bM%&O@cz)7rCm$B|A!z`y2D?O zx9*&2UR_c7BH7KRoQ09wNNJX_xe_}!Ur~y6fdOY7FCnTp>&VIgau1?+Aubrb(dV3i zxEWHVmvyi<@f_y;Q~HnVyS|PQ-i8j=S?wk6DIFjiAKl@)tdWLiXH7>1W>(Ic4h9l` zvC*j%>u;ho6~;8!r_)jkZJsm>2HJ7Y)H?QNK@!a3Ep#PQB!o|LI%W#2IB-SP-D5~U zg#X8lU2$d8Tsk~nfH4WLx{*!nA)JQ$oVfQA^L(-|#ZD&v7eW)sUO7FT{#3B zu>|P%@AJ%PDVbm)zf1Xftoci9)3C`{ckOjL*+k5b4*uW`H>CKy^%3yqm$}!IZGxf8 z<#PH!BW@V(Hyf|D9wyz|I z7na8w23$uc8y=el<`HpP^FqmHK{uGU=v)jI{SgZ$mE3Ldt>b1A6)S-pZs5lc7AvUt z7Os9yUtoIbIdM`|GDpOPKXk-xFBX(;^O);Ml5Uo?dnQ+Mi1Tk7I6W^2_=6!~%4aDR zn4F#&N2Emt5Zk4uIUd_H<+kTm*q%-N)f7=~dsenRW5=FNwpEi8DA@n50W$Ej!8bqF z&Z?(&)JdK2r5fa!b-Zw`&I98caxsI`9oe?clYJ0di2bbiX7nfBI{*=W9a+nt#K8tB zYGBM~A6Epuv@#w{f}i0?+@fNwHfJ97Og-rS#9SH!bj(>L-5_+0o4Mu1ME&ri22qZr$E|pm!LyZhH@sGi z#&%9*SYD)NNYl)D66FVvXL3QaZVK$TZ50?Yp7@P8)w9}|>g$FMjO*B=2SEuSYr|3y z2S+!Ot(K1V(xe$jfFN>!VmoMdpM&m^G~YlMQCA;2hx^|hoybI?6&H9#G+YTMQoRex z(Sm|!`kx+6BEI-o2B@JOZkiyoJE)tfr4no&^fjJ+0&m*5-po4$fXUbV8T<0Rp z%ZWz->+<~rn6wZOEyVL%cj3z6F7iy{Wb!T$&6cc-f%yc>#}C9&t1Cz*wFKh;QTx+r z{y{0SP+u5nO*c5ZNnIvk;bjd)G3r*|)o7IVgQTV#k|JTG2fFH;XHufw^PoQ(RqtOg zNmi=o;+OR;$U_;v?}Y5iis!?7Fs_2C_RaIWYTNMRui7`%qKSj#TL!Yyr)qumcYqdC z?hBx5tK^=~I&S$l^k1+>lA92cIUw_4q9C*TMZCL~PQ!X*l)BjSfr3S%oGF2F980B% zBjj6BA&&qGw3;-54j6q!+h=vOt0%N&mCC0)VJGNfFcH3vEN~_mur*9c+ARcHE|%DEKQdDi{n)Jf^~@QVK<$VBm4hmZ+oy&GqK4u*&w) zJt!F#938m_;U$oXt3|({oqTYaTb%43f#`6G;9iMeSypozNI9)R5UU;njyJ!e%1v5> zX{gT}^JVTo<5}W=J#IUHF2-MvdkX%_Jj58LWxnICv%9Z_?1|_2HX?RVOwmaw>7u1={ zR)Wg=Hjh9^{lj>aWqM>4XPSJjmb9X-h1mu6_t)wR)=vWaNQf-no`ncHXQAY#+z@HO zK)Y}AXgrH-*b&&ON<2rxd#&dwnhNzYkfLOMw~~2mL3dhWHr|Gg^5-v7N_hsUk4V{& zr_>t^3eQ#gQgTyq4a3#^7Ql^~Otnd>cAZNriYa+CE@?J#MOzI$U}c z+!!`o0+r{ulugrJqpS6Dd^LO&HKG|}Xj#b1&!_&lA;<+?_C%Y@lCdP`)nAFf>a3)x zEarUhT)xOObS;S^6SeSS3A07<7jx_E+nh>`glbY3He}dfqU3H)lEuK(v+cv%8<>Yb z4Ih|eFx!F$X4hA$d@E!cdSZB%%X|Rxxe`1`Ju(eOF?hv*4IY@3E6ckH8%Iu1tAJX* zm|(LCZ+m^W@TIvj7(PfLjMA^D@~<>%ygYXyQq$7C_0>W5jhd<6K#?? z83Z1P8imj=0$_IOm3tltv-^I_qy;LbVuRO-74 zQ9SNf_}}&T3-iuGy~n))kBSRC<=~9X9NO%&%Q8h}5#5jaR;-;(@nyn>U><#&r_o2} z57oYMPOe7rD41lN$KzxtZZeUb75p>CyglWM30HNAj<|S@2Nc)-D?-(aqGQv=FGwHqDe_33%9`YrIq$BJqlJM7wzhrV<%D` zN2L5RnUD8eIS2L)N0cd(F<0V?K1iad0F{X$a~x+JcJ@JQKdcOdIH}1h6V|{agDi3^ zt;s#;6Cbg5o4e|<0$a>o$5?3XPQa)glOP)Ia#IEaS*txpFECTT69M5P?yC3sh?6!y zfRCIdppAH+qBu&3Z+9!4wS4+6+pw*Ee!5c|58vFwF z`H1mYk48)Yb*J>MeTIfn*m)?UGO+VF3ehg*Km8upH?8d^M*-iofYVIWJEy~c8lA+i zo=Rf{VQ?5zO7~1jW@vocC$syX%hxILQWEvrHbUPaCh$9sjqjcUTN1ocA=bqrDWT4HnuSF3TZAUwKlf<-!=}|+C zKha7~KE7SIlnV?nU(fx=Zzc?|R}5sQ+oUQvbK& z9Slfl|MNXop#L8W>3>`eD5c}@=u-WE6Q)R*jx3*I)c+e%y6FF<{{COZOLqBgAACy;0f`U}P9+Np#XD7CoePaP;+9yB6o^EL*;J5zI- z0r)XGhSEmPwjTmFc=ClCUy|2kSIgPelOT*>P4H79!NYI%@lc{ASd-E>15yJ;_!>ly zAUrV9`2~jkeU2M+Qq#qCkK>5@g9CP>tM2B}-JGLoSKaks16GT_gQX@1z6V%IZ39r( z@FqN=STj{$#hFkqx3gg%L#~o(fKVk9zKS7+@C%iB`v>LaLnx)J%@D*u^_0ekjy-yu zuJ&jY%qaP~rS%TA7~NZI8viNPZkGvCqSnY8bvl^Bjso@+7q+3gtcqi8IMX{mOE7d* z9N{{1*R(h;^A?w!HnO!hq5|AB0+LjyhvQ5)8^Y3IXgUelOx(GG1>2)+)8w<>XtR4C zO_f9BuwtjTC6c^tF{<+E_Pkbnij*{HNISoHp|QW&%{OKdtNVE3P zIMk&{%870Ew(S7}&U?A@u@gcvSwBaDNi)9qIbILNQr?K7F;x{ znCf*vBP$$G*N=^bFkzxygkWyQLkfNp7jdU$`#sFT{L1}Nv*P(^&RSJWgnwRJD_En0k?|@PxYhkGI9NJ$wou4PD z@ea*}7f>a4gRU7l5@#05fJEsM;8 z^`xZ;2RNP0%jt?!46o#T|L}Sp2UUE5^}Be7)qhwBT+@Vwz$Zyq2<+m*Lb5d>R!zt? znvkBFkPe!V|3H&9w9Y3qAvKzi?ST;32xZ;q1?4m^e+$AiV5A^`k*SXG-24AIJf!Q; z@Q}CrhKDR36&`Zz#_*8a#)XFr&kPS4Fg`paJ*+Go<+HvoaP1E6dMt=mWZfE`co=Nu zLy=dS5FYY`rg>?aO6=$po@#?8WK>v1^H^L+S#k#4!r9r&A%R5nO8SLoZoV=+MAlSt zQBVl98*11i6WT;dx`rH_z9KyL2Q>urm$dLWA8AtkO%w8IU_vSc{U4f~`&+|vzEhLW z^`pb%EY{?lq)B!8jp3;>Zw?RXuEG8{@!@gwW5Powjtvi4oE{#Mq=|F+u<$t1nvkD^ zdQmKa-)KS(X+l0u4bS;aO~`Ya5RWEgfhOb+nvltwkVBfGzpi(9eYR`n`UG2e98Xw2 zz9JLD0X8YPhtKSsso{xlof#hTtS01{JHz9YX*$~wR*5|J#2>;_)oF&>TfM^LtkHz5 z(1Z+}8=k66lk*f!swd`!r%KkuIiQKNa$$I?6`D?pdpJB!)Fa^`yDkq8`C2p3XTy>x zl*&G;N%dz<$O=tg#CgK=*`f)VqDeJY6Jk#Z&*!F<;URZC79R3>TzE*eCgi9Fhq0@| zQ!RTuJfv8Y&!bS+4aL|XXv&3#?7claWUD6RswcwZtk%T&syc0+iar!{eQdBfw()5MtzCDzckAGj?%WX<02klXJL4~f&{d=^f`LUT^l)cHzH z$ieyHsdn@T4~hSCct}T0NXw$|INxbPrYsAOvr`jiqbB5eO~^`3$RnDN0!>JsCS;r@ zWQZmtK@-wN6Vm!fc)PyWgw$$6c56a5X+mDogsjqpEYXBKpb5EM6OyF~8KwzI)P!`? zgy=LOKRg_cjpLe-y_%4%nvmBtA*(eZ%QPW#H6b%KA-8HmMrlF@YC?KwLJXRapEN5` zohD?7W_~@O3E3MPj>9ZXoU1gmDNz%L?D;}z!fXutOC3Q*aX-Os0HY5K^j0JU>G0^a68}uz!JbJz)OHlfPVtM0-Od!jxW=72V4yp z377zw0eBEl3V0f@9`GSxKj3S?89>y8GF=?tTEJ*P4q!H59-tKPG+;g8L%@E(mw+Zf z#I0qzSin_)5rFZ4I{<$I6a$_ByaLz)s0MrvXaxKUuw<9%t^}k4G62&6g@8W;9#!CV z{C)t~2lxW;BS4>1rn?L<05BYI3t&3nkAS6s#{n+`HUp{vp8*;GzW~e=%XIw!DF7QF zA8;RF5kLm41H1#M1pEtd3UCh4$zG#7xDU01O7)49ErC4R8XM1O5v5J77DY257 z0ayXqfLVZt04~5&0GwyQY{DcR%5zmfH&U8sv|Hyv&5zt{bo9+LuzlGvI<8tS)ckIc z#+s7GDr$a^HY3tplbs@t%}^o+4sXQyjjM44j+9Lh4dbeXszWV_q=1ThBuN2vBot69 z+EYMX#1&9awMx!dp;a);RPv3_=erpmByiS%llP=9&Gl6_vhve$O#|f|hASLEUEEq( zGz4}BWm6z=<5pbH$p){`8;d1n1GAjXNNH^NCPmQzI)=7bhzLl2|I=R~gNIod`O3{W z2JNc}sZvwHFcMWcq1k-g&Sn=^`G7o9zb%KN?H1d&VWboA-gw_@gQWZ8i>## z7sf+L<0jxU=!g&Y4<6elm~Yr{&_%~Ry1aZkDO!(1KhjgQt)Z}#JveExt(KaqY#Zs_ zlMVX~+Y7Gmer;Q=osN-;Z^}2jUqWQ~mXLCA9eWd9&uVLwGA!KH1fE-PoYRPmR-VmB zh;T-w?17o78S1XWsfd&{P)ZwQ&y};+u##a=ls!;otA_Yq$5P(Jk=H`QZ*bc$nc0?) z29Zg87pVx|3or&M>Yt)Y71900*%kGqI^(MQ)z11ndrIiy;wVC1V3hJr(k-|Pq7kHqGzbvet`lcH#h~T)J(%)tJhq*2VrCtKZstoQ3M#?!e&-K z$v1xx>)Zoh$<*C>g-9ZjQ`}V|q1nA052V{%gSx_=PqyuciW8N{d~nTLydC=&AFS>X zj?ss>I3nY|?RT-7o5`I1v$sB`6J5}ej{GxbK|@E$wl#oF?hI?vPaokfhCw(`bH31_ z4(Ekcwx*a)G@I9Oo029pTRGAteRn$>Q^hsU?2J93Jk;z~9=_wB;K0g{r&N0k4n3P# z>y6*SqtpT@5B+ zSJ0F%GQs|95l!|c+&qgz_7%34a$D^RGJM1Q#Chlu&kUGG)KP3UvB%e_Ofeg7!f_t& zH(8!dy>|tfT~Q~{6<>C8YG$b4k4K8!F)VV}Sv{|ewAccoT+orDZn^__os)MHt}-P{yQREX9HE1x*MYLaa*yHX zm%=C*^px9R4ch{v6d3hkC{aq5b0-n-SlL#GHNwt(la$8Qv0br5XUSwzDOg!0dHJ#2 zMG3Bed;Sd&EpE|+9>I!*dDFY#n*``jasBn#*RInmOPp{-hef*V&shGfWySalMH1$Z zJ1_|v+;rASst>z|G(fAck>vbI{b2;KxDl7`IUMjYC}mo3k&C3`qwez+Q{ev;lA;WWcs$hFhp z`oS>&N35tZqaqw*dsn!sq44RPDrIkDck_~WHB4}|bakdH$=9pNI|U_Qp&u3DtaSbQ ziz9Bu82zZRdgqoEV+F7sT zq!qNEbaI^49@{pUINvJuA&YnX2mbRDcoSJLNVZjiM6zG9heIvP5mmgnk}k-uVJoZP z@PgbOY;*2ypzB2@*n#XCsg}*d7xY?3DSHC_}eU~xyP?9^m_e=NQl z5y`e`fUd>oqv-364%6Rsx&+-;Xa?yV9kx63P87Tap)1UIH(>hpG1BpQt!@Iu{3a7z*G&f4 zzr_K~Le-zELHo5pphdgb2%9=wGzx2j1$32fkqKw2;Ov^%>)vV~QGzPZL{16JL~XZzM=VG?4~edX-_o_Mkk|LJF}&9YS5C_Ga6-+AT^(s;m#h# zONQzk7TPxDjF>fZcbY-(G0vz2w@YezE%6j#uo@vbD1r@^!-%b$QHk=TF{52|(RS8# z8{E=hpT?^3fILB(!&}4oc}b70Ti}9cehrB2b?kV67Nf@~a6omsB|&{tdvE`KP)5eC z#gf6>$JOrIRb*lbL<-A@4FwA4?IimM#{*|GQuT69s?#j#54C_9j%F=M`+eMt6}xE% za;_x?_Lw7`J1`(`O7(qV?+1OwBpNHaTqq6~|G>>cCUbqoua~;M@9R1rQ8XY-Z?eH$ z@D|yq)EeN*bzuj(9v(Q+mcP(n{*LV^zlq9+u3kUljB-?+N$6^{SqCh3TxU|$(p=W? ztJbkG6<|m<+h!RTKkz zgu4Mg%02M9pce@5VX;_|LWdkzkEPtsOol)C-<;P-jp-?6G;(n)sjW7G!vN1x6K`|wf&KeaY6Q*ZB0hD|k}W^)ZQJx0Ou z1SS`rXg=F4aQf^^2J=I+8EW}7n`i7a5r>NJC5^QOEoXRDFy8dntV% zCF*SDZJlQ>OjHt|x`5hs7aw=)5@o(M^YP~7fnTit0SFGk5BzJPg^>ko0xe8wMIL?U zyhuT4p~!4S=jZWSo)sY)94YZ#yl?J6Sh~yZRCI)$Jv$paBv}j}>RHSI>|*&h*-#{# zyv+DFEDpBV3~RI5eJhQBUbC70X3S8UkwDFe*{z!)sxI;2A@RY*r5jb5U^3uJ#9Nga z%Nea`9Rw9I_FT-9GmRg?fQ8CuBTu5aG7VHQp21v<%xxH~q!y6^Ik1itoey_err{s9 zKjoG#WQCr(G-RWv%sR}cT;=k3D2KXkj&NLC@GlHgvB7#F5}PKX3iP3C;q3+MTVOV9 zKL)Z+@ZYQQW_+m zv|WUpvXy;_{zS|GOVR~YGlWUw^e_%WgaAF{n>Tp3^sH?>gW>Em&g(5_g3Mw6{?>Ni z$7vXXU}ddU=1jOAHe!oKCPHt61|h0>nFW0(%dJQ$&$oEw7J7J8hXOou6P~T7&81|z zC+C@}-1Lz~wCAZa6m4zn&-lBY(n?-)-(vbCb#a|*F_-=WkFIk~kci=7YyC^ob5Ti0Jb*aG{E3*rj;LD(o7 zR(prqFf{8vUMoAhZ4tLi^Q2p3H{s8-2zxi*X37ixF}np>to{)(mGLkkR-!IadU=5n zyH%9eFdY1OT!G$S;5`%DD3CpZY(!E>R^UW$QS5zQYLv7ua<@H?m7>f%HWD<0nyw0q znkZGs9)ZTM7;xm>3L@a8CTlaifzB|A^-YQb`!Lz=duR~rirmp;Ox*6skT$8!&N{yb zCL>I06hBkJ@(FS@)Z^^VXlI&Ykl`Gzm||$|6cB@@2a0fg-6V}Q;O@~*+=jzxAO}0# zy$67~tJZHpaxxF}uNk^qczZGYzXr!bt z6J3HW6S8ndNYO}gm2@*QxNi^PFtTRWOpxJjkSA5q2G-YsLakos=}KOBL#;x6IX{Dg zAh=>uyyaf&xXjg(QCAHK%LG9s9$XUugex>*YO6#N?r6$11M{2oqC z$fdCH!$rS|7yC^?JDqdwHrc&owOlDdvqi+&c zv{j1he8t?T%GM|nG>M-x*2AH~;$oe{ z?AuIhd$4zz6_rAOd&dHGU8fY=q>JVr;e3r^<^2VMIIZUss)8~QD`+5@mpf5rKD+ww zaMVESp}CZJWNc15=aXdRtHoVmWa^20PhX#da2nL02d>66EV&lUFya#pQpbj_*wLGJ zWPvYCQ}{w$L27oN0Rj-C1NcaYMDr{qqZ|*<{e#(k9N{qaA={}#^ay`m0l%td_jZK2 z9yaQ5RWzPR9!~yM@BRh+Lv|ClV0w;Hg;+3oC`4@8FJ{Mtt*_sdE5YoZOsOCx$%a_F zm8vtA3dB9%M{&g`VPlB${u&99X>x{c%xI+tC6TjndWZYu`M!uwb}nE5(Jk|=&*?$n zn9T0)5g=s}i|zgjkCZi?L`ZW@U|bAR4`4707|aC*Z~4{xwXxHo@vieR!s{Mlbinx^ zx%jY@jQGQ!?!3$Fein&K78)M-!>s$vZW%9hq4MZCW_JmmWgFunvI^j>h2a8XlF5#H z8a(dQSP5s75QKO-k`Nr1@sS0})qzI7azksN&5z)@!Bw!P%Ws&;31hl`}6U7$e z3SqQWwn5r|=nYN?NIWSrP%en5RQ%U-{zo1Ihl4%0@T(hu2{>f)lScl)`J2^1a}d4A zj^ifTAe*tx(Yo1aojVh&9eC+PIK&0N4pP;NjeRl+N5a@gvVp&x!0^R^nAzPI@h~=J z?hAtUr?<|ed)LGbu)0?|^4`#+xl%egTQryc0EVPcpD&y!ki@l9cX;~cE*0p=w*n$i zoa@PQD#rhuD(*%FR74(#SBS_w@*q6O*_%9aGClBc;q67{u3&K5E}X?waepfu&7PY{ zrfV)OL(#?Ci?QKA10TkVwE53?0hdpE5b`iW5A0eRd)4gj0T)Ok+x;^5H;HG43G7Tz zS}M!s6t~YG2kM%2t*DCQN;OhPAzW8tv?2zEpZga=)d=O>h_RLDPk@@@q_N;MHd8qA=UL7{me5^bf5O-L z7cp8;xA}uG!3IBe1D{RbB21bJhoG(#Ev~PlVF!GoiSq`I4xMtr_D#wq@i2S-6VQD+ zOttMVNbRvsZ)bxh(a?;Os)x&Io>8WiK>?_mA0g`Q3 zRT|&wRi%lI9wyH>N3g-e9Yn|QTc{)Dkpt4MDqY%xPwQd4is}Ke4j>lix5JZ(IuN>e z58K)6xnJW}N7-G$zn`1+IjR&3{392fZMYU!TcrKwblWCudu_Ymrc37jhwNzoFX=!c zQl8-{KNcxTI8#SgpiG>OzR3yhn=39u-!zFHIlvyXRr%olZ)+YEXoUPmJP@W0=T2ZG zQnu`x!Bu#qy0JcZ)b>twH_TaYGu6RSP^5#0FD%<*^SHa4Ve6Rn#`Tj6_AU1mbO!Z2p%ES}B0j&1C z9mgk6Q3Ir%5}(sJGN@~!gQY~*!-gB3eIy(jDD(4;47G7+mdDLg6@jd>f}4SPtm|kQ z5tf&_2Bt-iaUoNoD%(F5whi@9g_34W1x{dKU-}ebPx2Hr0t~Qktr3A=c>R>dv;&yC_W*b7SZKjoIT;o za8+5Xo2g1Tq2fh}a_WhfpwTiRH87cL?dd>I6px8M?w4m^s#93;3mZwj3;zYqQ_Re!Uh%;Y9QD}B#8T* zFd->MW}?SgdRCX_>{aj@G7^%mjqr!(J0#+vBX&pWq)52bbL7IE9J*I0kFJChQeDF+&4;@Z`GK%Gk8Dzjs;D?RV{6I`xXdI$nycic|ydus~jMo^Lau(#{@>@^4*| zY1=SsX-u$#)vyf=*M*=BOn=(Ir0@;QjOQ>RAsA5hDjN$`yh&5nfOcj-ljMaz4;+&f z^`Df>5m|0$TkpA6CnZa~w?3kkk@E8-H@qdq&RdMb>Z3Th!X}+CZ3kZn^-XNX%Bci9yKm98I=btuob`PO`xh`JEA8yeVt$t; zX3=u~ex&pi);t5=r||bFPw-iR_i_CFo?j5OuWdLtoj3fqIL1dS9}K%kC(WF$F3Kb#M^ za9nx*N_5-#;pn#W@jL=H%NC|@Y4rshizr3%{Uql1XZg6vlHG(m<{?{yS7CGM1XLgQ zH|0tBXI$qYVkA=RIu8+JUpzqiCQpD4A{0>cxKk+xPqZG=CoX}JZ}Z{S+P&~{?5*#R zve#R0=)X^%roZnr7vF%q_ZXRf#*s8<70;TE`;fJ>1M(QRJ91xo|Lm5~sLoFd?nK@~ zQp6^!k|LVTnP=o#t&nh!{EcjdkD+E<*ZllybMQDJW@4}By~b0S2bKt_dZ-F)ifXMZ?ha`iTZ{+ z$Q8E5y3jZeE(|H>tpmxo)-}Kk7ieTdP6tQb(CD&`X~Qu$k7L6I#C4*t;v1ZFD|GJI za@e=hmg*ePPJBw5IM}nc%e#&xM83I$In(qw(S7zY$Z9Md;z70c}DZhN(4I|II+k0LpjV1g%b!CCSlw72!F&aShry> zUhs?$eZOiQ#DFRZf^%!3I)%R$cE@=fwFi8n&*%i^CEMsRm4W(sZY?v+EHJ5tQAx3XZfU`UG&K{xPrJfW6v-1Ghq{H7yJDZOlV*Q=Q0ch-> zJ2g>?u7!(&Mmk>~48us8A1#j7gLHDx{@+#~nnstZ4(ML*!{0R@g;urA=&kGZyK5ul z*AUU?6u9?5EA9Z>U!0_aYkrel{tUVU{y#BJtFZ!KS%m=s#)Xuw>4yaEm{dkjPJw3( z`RX@7VID6Oq`dP^Kzr#3fagCJ`9Bbv{|q(%en{9>5tP5UK+K=Lcnw}()cYQ-zruww z>M8Y{EYC7o4?C`d$Lb6d$mal$+0#RUiWS5zIJ<;)7BsIijMF`tMx0a{)f2iXvcaeZ z;z?US(}>;JIRkCTrs8IzqTYoTD7vBdYS?%4ab_DO^`w|nAzVBo%`!-pNjs%|6x-H> ztdnf5c!tqL(N!P<(g7r{GuTlZJ6kVOBgsCI1s3tCElHn~Kii$&3kH$YT5HaPreC0X&pk5@Qgo!P75IlcGI1g` ze=PKLlPYob2}Su2%J4XwtUqC|=C~YnOM;8{rb+f(cA^+rP2?`GZ7nD*(o0%!QIVB6 zkrrN~f~Fg-cXZi>a^{NzT^(lY#DamXI0rw7Kf-ZohQ*o@>+D%T`|Y6HIN;KZQ+`;@ zKuQh?w>7WLSb01ae1wk0QJldu-XKjdN@I;U%=3&lN)t@dSd%B+-AWQo@U93?P_Gl-i(4fQBG-P_dx`B+`IVS zYW$VmNBHx8{FPuqhw4#w7sArx_yH|&*YRI`=8(e&^SJ3!W}HKp4khBXo%f)kFGD>jG?9{OAQnW9p6z$gU-vZp6&_o8$2ZqY zHB~$U5$Zsx9m7E!?bOK?NR-@X}wkxU&fXKzD7*RJ?L?qd8^ z**4G+kh52MvWq?0rE>NLPj)$WKtrU>)B=HbnK~!wfXBI#toBF?EEw;$RkCe0oruab zN1==wIERgtZm~e^!QDu8z+Ixe|7DrKy6X^VXO2ejIh*Mj;-t8OMA8H0HWRu|(8y7F zBbf_btK9LxU;>Kwxa067VWhMGHC1kS;ZedH@s4uvSLShm0D86+qtobHl{*n}kp)z6 zH`90!(W?<0sye|~NSSq$0w@@JOGtsj_xV2%%Yzw?2@^p$E z4f&KZ2R2hJaC=-~!PZx?y~uhE+Y8=UXm6l!n$p{;u~K!?c4{1?+uv701Sr!>q)e^P z&&91P9yhfimu(`2hwYq5%C$-c(a_iO*$qm+EH#m6kLPY@H_e3rg7??|WA0txqpGe2 z?g<$nKwyGKoodvmRMA95g9?t1@R$U}zyOj^1+lHQ(^OjuGeB#B;AAwD<5Aj*#RqD8 zZEIgwTE)^_$@>gvi(7C7)=`GbGAA{LT@+HpCn|+v9)T+d`gzdgpVkP3CpjEN6GI51E2UH1WD$3DGbxCV9cCqp-g*XqohuZHQDW(oJ@R5Gzm)itK~k7nW8gIZi_)>MJBkZ zYV<;Q6`5NJ2Y}4Et;OI#zU^OE8NmHT9d13#6_EU{w{D?csMaB!RDHQQnbZ!(3p=^{ zIB3C`#i#cTsR%r#WJ7($L(~p>ux2-rRX;}EU03lCcBNJP|Fl)=ZBVC=$Qs%r0O!HPck(#K2@!jvGS-iY75Q6)iisI_v&A~k`3Mc3f3vBNT4aS^ zF_ziZm)MYeV@;%dyf*hzJ4kzLO>6zF+^ir5(*H(4y(9d}k4^gxz##`KL>r=vIM`~J zKDj_D$x$=VNjuM#Y6rhhsr4*Mf?bfo$tXcdh~CK9I8FB=SeD4<82w_Wo-ZPMGwSo*RVX3ZFn!b!+14_` z`mo@;iw0mU%q}bT)HVw&2GS8O(KaUm;ts`dc+x$n` z`NxV`6d=8ea!mx$iM{dYwgj7?L#jey>$HYpt^U=6LqS}eufrV7QOX^N=~j$cO7AZ* z`%x9FL(Scb?Y`6tKnG1~EGKwkV4Iu2tgw=%65)0=`^XRmbpTe1JgghCwzr*Z4H5%s zJ{9x`XBhjVp)zjq2MIlF4Z>X-ezzc3v*C)f*=!XZl@tjWB#ipb6{uz@*A)vNP{Z%l zEgBzZW{0$zc?l4uW=AIqG}M=`OFWkb`e% zMDRtx5)3xu1T*Pi((%}u+0N2)-xD1GJ(HmG@BsoOUb7~Qj{NsgG*rZUOb=8hE=Tvc zP5|rii@IwX^C4h1RnBb9FsShiqSP__Qpu{7qEii53y&fQYMc7XH}%~^8+B=`lWBcB z2aVZBiEM|WIohy>4|A>Us4TfNo;x~zp%alq-ex(Rdg7e6($1khxq=wY_1T`NL=DuJ z6{30=k!9VIPh@o+YyI51OB_T&-jQPNP_lSY6}*?hIK!0S}-4mAyCzrRfsch)xX z-dEo`Oa~s?cD(O9RKX8eE&OLUguW>DDu$7v_SJ0Utg%eprc#ZBXvUFr` z! zGZ8DmyrJ#nF0G2bRoc6Y2qi3A)n7AxZV<=r6nFCH+LNUuoW_hBi%?NlP-a%UWRQ^| zpt70{LgA%`qZkD>mn8G_mVu0fkVXcx1)*HV(yYbt*d(v>D9oN}c(5d#gkHFPuw-^- zJor$am{`D;AnGGeXie6A(3+j}KtL+(0>xyzb8n&Ln=_gwn>9lS{u`ce42(4t)mC{Q z-v^wx8@Cl9FO)K;+t#PNuj$dD#(v?#OaoV`DRv~dIlWh3Mo-J(zhfYejufJ*JDK2 zP(KVhCAP;qK$h_Qn#1DG`y{guj+~9wVa+8O0=!jOfCt?aYYH{7Ll^j7oqw*qy!1kR zO?NITu$I?w6?;(skkDV6$_i-5b;~9)n`~7zf7_i%{gPPdRkLPjDbRSP8;}7nuucRu zffqje{(QK*<;R$TQnMh29m8LU7Q*t6yj|o5AbDy)4WOY!c%&6ighy1VZ+{!s>mNzz ztteTi6xLT1$ClDS0b98aH~&nd5B=%Rti#KX)-cqCv)91_mT|bfq0wrmwqPPLaM4B4 zgG(=P{EMkA*gtrk_k?}{HT0`8d}vj8xYhVD+O+mpk46tJ+f}lm^A+e+eM6_TioE4SpaPrE5nuPs`XFk)=7M3kP!oKG!scN^3x7 zOat-OP32m}DPh;;%oUQ6>>`DWa*>+vlHB^TyerG|lF47vm1*>b16AW- zU65w#kW@jM@TuZX_3o8Yr2#5j=Jl0(=MT`O={JerT@uFh7ulO>l&%UR+g>4{Ry)Z7k1wfPwkJHzMvGLQnmG5uYh699KogpD?N#d{77RV`|3kz-keQ#Rm<%w zfF#l+HC@{ZCsB_f=J)!JgeFa&Vcy~q@ckWD3l{-N!j#K_{Y&S`lyh|(%p|!?c`St7 zt_B+^VykaYUiA$Q(OpNZk|XYMyw^{kp-RkKX2hf($sF-7 z&OPRc$3QnTN1T%}V!dCBGl#sG6-a{kn{u6o@bFF$793(k)AlpI{13{L0Ga0VCeG`KW1(fEWP1TGi?=9z_r!f!IT#6KQ_F?d@= z-^e*nsH<1)K3fkEU$d$>f>$_ShPqF7dvc7cuGc{5GRBRb2cAl+^cI3S60q@9of3dT6~s&eTi1k&g={70wXmTUj+j?JopX!%}}n!1@RP z)A7kE*j{Bi>fG%zo8l0u(r=ozvEYDmBd%a$ZM(g_Db0B%w!IoJ!kTvgIWHS4^-*!;KyXI{yi)v2j^YdXUc>wSv)>NPNW7-$HjZIi z687Z6q9&fpZg1-^+Koe?70n|LzM`8h+SCy54{14o{E9>npU!mwn>YX&6pAC|%GGv& z6WL7W33J4eLpTVOIiOrUAe5JJ1~e9a_U@}ktRoHo?4NzODv%t{KyfJ9-!@c+HMOv4 z6HjNii#8-V9?~)$zv&*pGt@Pm#v^nH{_uI|&*@M^mZuZ_86;7gne<0} zonJI0L4-b2pwr6xjFDX^knK<)*O_{7f`3nF3N$feZ@*C11HSZWE8cD1Jl+da@9^%^$}diRY2S$?w~$057WhAtGy z?i&Rva@y|$$H|~T6+(fuuX>6C#n2QB1^NzW(=-KIttn8Nw!bj3hxK>pPr0;U=ua_? zIP~Wd(Lft6A+C;H=+7NJwI{?!L_#E5h|kPiYd?GaQ}J2Y+MWDdqwB9_(jRpZT^^eR zY5GIM(gE%vok$QuPbLwXF<3`~Z#DU$|W*@*(F$Mz*h)Ef~p zBg%m&8Y1KjN)w?jBNDPWU7g=)M47_S=ch-u+47y}(RbUs(4!>l{XFuJJ^p`6jgs=v z{8LlZs3&=-*mTgDANGkJeLAjB8}qpI=+!SI=~1~966`@9sxv)x8DmfMsK23YJM;=1ICFf<14PH5QAvjg4 z%Sd1$ssD}?dhRcS8B|$Et=CzM6_JfC_5&`Q64xQPqF;{tc3N+HZrE6~Qz&bLE^|_yqx z1)!stEmOH~Ud}!^jrMYQ$7kNjKFB)z z8kg59s~sg%xIoS28ayI4T;-ob zz#OS*^ufrtby=A-v_y{A90LCU(W|nWX+@}@sA42|;|G#b1k@`~r=;4k+SOJ>;Z#f7 z+LKGB3=$TT#?U!-<@vUGYJUI{;|Uyx#`=ziPDf)=Lo#J+s%%O0QL%EbY@#V%-_h_c zQMl|k=hxKJ(|dm!!0fl;zD=Q#E7Gl>eXQq;=Hy1+Z^v8Yh-5=Y3(d*eee6Nf3X;WungDbGN3f(6zjc80^t^50+`uXWt!&+0s z$PlNVNs=gF=Xk@9fZlCi?UT4N!D&84y9_PsnSx345-)It=orw59jSzZjU3L@$+wAG zU`{^PcoZ!a2Y|_a;zDM~SbrYjem8LH^KFmtJh|`iR6oX(^7BA6Fy`|^6n~(;LUi91 zruokW(aSO+`X=eadW5K?=Q9v}mPdMkDEO%*6VcZn3VBzgELpS7pkx6L329H;FCu&M zIdN#0MalGYIJTtSI&pL+<8k^A3b|NOLq0`i%OAOGP zaX@&7#BNX|h?Sj-GUfp8_5>Y7;-!mntpNnlqx2rk1Bu(QQJEj*yynG-QsqDevpNJy6~*cejzoW{3KCz@RL#+%VKEfA0C_V_k>#&0B4Olag@{qC_A{M=Eg z1(%3Ad+|Auf40QRQwu)8+_&N^I42nLy0qB&*TB+BF?**gd`UZdTF#4xHvD}>wtvU{aU!QLbIO@W(-8mfx&s^deY{c$$X9!JmVAHv;8j;g1AiCh1k(7E8`)bZ_#@<{1)QkT^d(2=%TB&l zIs`@ufoahMW{)N??U@8dlHNdIX5vS~e*9lx$fXw2!$~-3VprL_%YAvqtEz}(T&iTmOjy!!Ks;u`HP&)7}fV^ z5~DPUX@|scUc+HW4sM*1;-2WGV29%ZkdiOtf%N*T&g8 zV;|@{r@5f`{}K;gDf*mvpnmsul2UxFPgJ7X>EZKWfx02tiBO5Y;X%LDO!|%o7j(sg zzc5}F|>)FIzapIl=y-Fb8`wgT0ssl z5Bxv@h(E$Sd#=LXERx9NxNjeIXnOJuFA$-PpNK7qQ?O-nhlCCfA!4|G za!wO^9^?_+lqYNFoGD&=vKMjlF;npdLz$t&`CWUG0P)nh?Wyw}JZYBw)ro~S`CD`k zNlqSF(o*WV=S_Y~gqzhj&5Ny#d{1$kJKsv;(AQJ)%CY+&;q>2UEJ7$!1Crf@pXkdR zH;hcq5iz>kG}Dqw1!pXc28TV-Y~eHhoLg?5t1~8(BAQ6;EUbE{z>>(sU+~G%(&YMZ z#JI!3obL4C*ibmb8DU>}0<{W$cC%=`It|8*hf#yvd8FnDRnM^AtF-6k6g5--%ojg~ zfO=JlIHX>oR-R`-RTjswwX8#jHpkp0^<_CGsz(Za;QNlR5sI^>LVHSFGCchRHCEGH z8B211p%1LGCK1|{V{sM?lS-wdeo`JArm57ZxhsZPlkh5utLr(-IX+;0lRG~>*I7*w z&g=a{VoP)M62@a^%thYptWisjC)b2nFd{Fi$UMenMifYm$HRCKDC6pURvxTklk|yA zeYNv&JjWbP5?>-m3zvxpsiR1*)P5PctR{{;R^zL2q?LlAcB~BIqK4NB3i|F!H2hEBbV_vbiJ0iV8)_lv6Ycu(T{|A*r}s2x&1$9O;cN9XbWgYW-W<0XC!5<)mV zUgP+an*;|PS`3Y6Xi5D;&`gi)O3Rbc7LjGz&+ZEK#yMtp43PaRnk1uMLW`7izobH$ ze^;MSyUuBg;7Z5aQoA*Byc;r?EvJ*YWza&oWWRy0pl_~_MO5OYAhA6urzmdtft6)b z7H6WT#Tq9JXPhvc`f;jhT#D69YmZfW?P+n*B)%Trp;h~7DyR3e%6t#8dKd+{JU{7CZMke6F+Ye3A=TzMY{loS$f0rwJI}g?s7tr?UfYSCLd0LU&H#9~FJG3knXIQy3B*Qs+fK6; zdaS;8`|`Ww>2A?%lAekrDVy{vnk0tEK%_qtNl5m4dcL8rGSxv$l}V0aj`Q3y$#9%W zF2UncCb@-hvCK&(37GHbf?;}gk1W%(Ys=NszE8e|kGAm(Nd97NZL$vGszu}yi|$%@qiDXnL^CnKiPJS1(x!bo+ClFm1>lps418jBORSYK$JWOAoS}ZE8NPSDon`*$^)kX(m1G=wgtqKk3Pm&X0GBIfRHB()VRxzvD&EhSPtf9&vZ|FPed;(Qa(YMa2Omg|y%O>Cx`CHb!K z`6S@6D)W6CLuVoDfwuB|8^gP`n4c_j3jAPv5?>~=LYX!j zdDG}CYAf1xV#TV|Z})<>oqp>ynx za6-SV(11pNeirfPlppVV8-t{ceA*an4QXig$T!;Yx}+U%R^Qtp3uQ(-!<=^Fx}ErO z+Cjv&C@}72X83_Slgp{uo#lD{Ws+QWXt{(lP>y=y%71dE?1;_Ei5%sv;2LU^1y{MK zt~atI8KX@4sSk!**^~fVE`=-o1(L>RnX94Ylp*c0l7^2@@r4VZ(T}EHjaR}dbfti8 z>gX?>3QEtWZa)I`^SX zxLV3Y7NRo=uKR%0d6WK`jDLQ=-8!uspOJCa+?CVs=CC_5#hrDq%$*e;Z5_8eiz-WQ z@{Rvemkz-iLK*triru}X>;148A^=%~)b+Ph&5;}ve3hK#N8UH`$pA1K0-KquOSXpW zFKb`pfIrn-y)G-#&lMUP{1e+j)izy>VFJZFn~qQRCPG!71hLA-(52<{&Js(e2&N0D zP7^91|L0Owx^PHhVTkwal+`RoZ8xI%-gQZ+dsHk)42^`XA2UryWaBvQ2F z6!Uu0zV0X?()6HDI=kmhD`|pZsEF0*XtcV;m>PHp#o+`Y;iX;>mc{N8UMgF=EXP-# zL-=W>P(2;z*VtDNU-#`d^ncG+H4(I6DQWil+n(|k8?W#ZIWF-f3ton{7 zQFP7WYmX@+W@>Aa>zgs3(@aLNF7pwiJ5$o(vU%#qJ94PwJJ+*{8eWW1owBpj_e_%7 z4PK`OCF62ecy(_73a9XiwW~3x&l^Du5kLClfG-gkUv#8`uQ-7LGPT#SUO9A$Mr9gm;(f z-SRL)uq7FcoNQG7!z7zGJ1*B{0nJdDj4xE=&2ojl*`PcWGW73@@%Ds%=e{?-l=snIKO`ks9|O*?1XjU!y93t?v=mnygRt z{yla6o%Q~I)cF|>2=Gd52?dp#;-Z3bkW*O(#vmyg4sdL5Py?mriWJ?E z`m`7DS4y|+Q0Kikgs^u{)XOgsgtO3j$T(CTrM^Zkxr3>%Av#N~O3PJ$qG*xW|32d< zPQ1cX-fCgPNfviSeV5TBp2I##154s$v>7*%v$(VrWUjO%P6XCT zYp$x4loeC1yMQ6#V2hJal}_rjpjdrlTd^y+iRjhklk!}w96|=}4umapZ20#}jCk{C zPU>^3vnXXm&MBP{IDFs7Kms3;0D{L}+g}(^{m!Lhe<2VC^+pPPAa5dzw+-^)okya$tJG;F?^z=f*>z@b~q&aKe~n|gEc@wlYq(I<;hd^p9La5~3^lYek=v_s0~F%Q(7%%h=jgd^SZTsim~4-fwA4 zIO)oQ4}wM{iqXgQgQW#I)Y4&q*3yaHD&C4I#q<0?rv_yINRzmSQJ+QF*moulas~Gp zsu_zuO-I&t+o{3gA59)Dw0k3wWv;W!^Xp6VS;Jz(i^fnqJ@_0SiPw389=J8UdRZ{z zcYb8O%k%Y&h-m#Hqi>s6Up_`WMeM1?>W%wIuCg<>@+s-|deSb0PatE*(T|v!`E851 zEoEIbc>bBeJSG=hwN&!mEhFFE>*fi%;Kh2R*bR*nbF#Ad;(0!+Y2xx+fuc3uebi;f z@7I4m=ivJ#)(S-Isrl*~?=kk%YnF{6m2~pgVs#=D2&mtVm$djfPI;J%F9d4$%qHUj zxUm%ep$j*MG7#jwB#+3C|G$VJ(yH3{ZVExle+U@w5zXS*dwSL>zHV*{4ACiq>FdRB z;h?L~6Kw&@Bg+a%>?4-6G;VK2WY@U;r9rhB+g_aL9i9v;-!J?x$>KB#rK-6O54pZz@r zoC~B+^1DO@_0T<>8hmq@L-B(7TGqV&XR2-a3_=8RqJBwZxq80g6#cqU$v4+6nitqa%2qT7jzNG$}eCvwy>P=QPxmxuL=fi+jH;G&9SyrQz zEgItrpVAq;sZJw53(?xq*xGsgfe3XwDhj|OAGDJ%g8Y9`>DmY%JxoO3mB*O|nMUPV z(5q|D$){=-=k&95AtTCPkP2O2!u&3dtQUB>dL9brTRCWc@JRBYS#s>hhuP6WS_`N> zRr-_}m3g91!zU?V+ww)#{}mPdC<6f}O=+)C7^c2Iigwz~s)&&CL%<(dI*Y8)aFl0$ z#jyC|scq~dpMv_qz%caIC<)?B%rD>bqIuq<7z0uhr<^&({66?4T($&_;)xtV#) z)|p$aowDC@`5s%F&u5cP?NWp zUyMYRQ4tENiMM@|1eUtWol~+-vb4(nvNdfmBoA2gO8{{zHnW9tA~W~IW~$iCy%Kme z^MJKdu!KSek7Z>w`XA4Vt(2#mqCzHR3hAnO)IYbjHn}$JyvLq|ivwSr5tc6KzM zQ3ws1&A4oP4c|yT`3wUd4c^g(%+T zngQ7EI?~fh6SmzV@URHk^5o@^tW8SeEq&QD+}_3A+dT{3CK1}wEue|cQ9Cv(JOpQK zUsQ1y!ag&ldmVE|l5Xh-CG$QhMh%Fgc|09Zw_gY}wJ_?ek*4xj>3ds0VQr%N+Tfv@ zwCn9e&H9Plb!Bo~S>4bm%a%v$qosT%*82IZTP_Zn>eC;L1K;E(-&~|G*9}0nX2f&>Err?C&yLv0e>aBl)OFNpwCr6|l_4{JRJY{q+x%?~ShAPmb)z{9; zkGvzJUB%r_qm|cWwDM@ZmY5T3ALiN_?L<9Vx#^5nH^6A!{3N6O>PekO`_x}kqdlL| zww}uxNAwC)T>duRiL9J0jg?v}?~oSs5}QS6Xz6F?PWLs;A7#5wNaD&H&u7uu7#{6{ zM0Y(aZ_ACg@zz#rW04)?x=3@a29@pGvZ!dfgKsNz8>73oafNO}ZeTUa4`vCA)A`3X zOL}E31K6Xun=m8aeUxKyNkdHk1`FvQxyBV5kkB2QLkN~^eZW9BXwbSkD}WzJ54cSN z_AP?e&*89PFwWBQOt}$jeCwa0U(elN#36)QcU;$8mx~KnZfqQ`9NL>>?MN9J0hkMm z)%_*g7eITm(k>t+w)mo5z5&~kc1{B&}2h0c;hk_8<1 zNVX{`myu2LbzO=p*Lr?0>r}IQU@W}1=5Rkx^dwM>GcIRgtL6Z=tV!KdocF5Bcs;Gl zz*v3&L85cf9p^q3hse;+cp`^~g}$t1gX^z#ip_#K?-HnJ^xm^1F|)>;iUaBwUnxFT zqlhNMdJ#Rfo}zaROvb2l)Fp@t5Oivbs)xSOF4Ef2Mt>r!Z3u1%vT6B38K_kQIHlbC zAfGJMF9fnHPD7aUYB|~57MW_@tsoUZ6?Rs$1o0>j(AKO|z!h=h5&^H2CJLQvR0ZH4 zL_n(=uKW*4+ot`p7j> zdU>x_ujgWViG7EJy+l;Go5tnRy(>1XHG#atZzV6w?P0C$e3empYPWMA`>=$k+%NcH zP=VyijzD}FP8zUKHR4@JXiiK&)4Qy!ZwolYNTqgOB(fO#v0-3f5)IA@ogDlN=RvK) z3f_7pdaQ$b;n9JiXwg~ZP>87+Bq6f4a~%HyYLm-v=&m-&MSFz4$oe}28zp!g-rKrK zW|IN;Kg#!tJgJRfb6GQXTIj~=ENac}6%t%ZmKzQE@PAlSCmO)3yDln1c)=xxD#}Er zAypH#B^~wKCUR)oG;2{YU0Bbr8VzLE2+Z29);Xwu^7h59V4XRI5@oqVCuzN5H6=0^ zx)YZN)bfT#&f?TX-=fMQ44QVHFQ5@K_Cqz&l(q*AFwN@20f}bWC!eGMwgG^deZm+f zJJLmUMWOD z6o@UsQ|MG5sB;wOGtm{IJ*3tZ+QU|@J=~Mh9?GLKuW#MWyt=5ja@qUY;ct2VP~(E| zMaZjqqE5nV^X3uh-t9!5ir|vzezH|mK!;FB~W=DZ3 z&#PZ=u1*B zg{w4jD~;SreZxHWd;MI<7yLKs1|aXu&3c3-ZLiJ>PDJ;>8S2O@jfv`h)&00^=TcUE zaShXdjX4Kf%%VB326$EO&*FZQA9=~;YHj92@5u1Q!LM;PPj_^-bR;H^EzbGZfTF=G&>!2So{|nGrEKFFEupP^cBj2Zo*Z@;~#j4>;ktIK6hSiD)NQFJy|6D-r zsK;^Q&mx;h?&4?LxquE;Rf=)o6*;mZ+3hJZB^JiHtyidVBR{Px@;^tt02rX>4-p|c z0n5K85&n%7kNM4$@JftTBPjnp!JP<2^3= znQ~{5b{^_P4UN|Sf(6iUB2E}T3!~6Ya z1XOeYbvx$lq1kUFtz=y^P3c;{Qb~(~vg$%a*oED^=ft!XD`8B6=bPM&Oa}Hv85nzF zs5qu#xqp(*2~*e4gGrtlvKsC$o` zPkAe-8kCLHh18KKR?q&5RVGi=W-r-7lz(86i^7Xgs$c(S7Q@kXG_X{~$qsTD9ERYW z$(V*kn)0n}{Px-NpCsB&BTiesDETss+t_3B#U2y8YoaEV{lUC#KAa7VX;5sWdj2=) z`Fq*7PRNUye{9ZPbswrOD+~?TMKw5j&9TdX!U2JTW|P*;{7YX(-CdHXt4PF_w4i{p z-KDnsZit9)=TBsL0iUP#CbqG?bR?EafnAhGm1knOInp>L7JlLO+i{Mrl^d=@<8wrY z@cmbVmJ^Dr2L%Q4);fVVU~)e`ILq=_&GzVrtzk&oXGRWp zgig7A1($=k^h6^xF3IL`0&Po7&86?ppo0I{dXz4F4qgN@-sUJFv z%eqN)_N(*X`CBxW;hm9%D_N&Dc(YE1H=|MWptazE{BD@?>x?{RPo!i&A$^#Glw5n?=n5 zx3vT*`#GxApadyae?J|(nyT@N%I_B+#`ZerfS^{hpwedHEF zTvyyKxLwQ>@%>E0{ax|8<-WiezSACCT+Ac+!56wbBKPO){aqGo-ufkx zOZrhN2$NV0o;{)1y2(8wxiD5gxbhq7YmdqDAb|pvp4X?o>-yLe1_cBNf7;wg0`;9S zFJAP{8c`kr4}uf1xW6$?P0N!QF^v`#uQa-c^lhCIVI)6w(P|l%jH&A~T@Jb8P<)wL zCNgJlwh%=&uu3pEZlu=eG=|3-O}v9O!g*kxl)JI0E;DDZwM16pJ2@DYbE;&E@BDdk zB{&~_H9NTyzA^Jp>Iz|vOZ64du@|hFdmEKl?PF1?TT6sW?Q*CT{Q7~@QdDYPK`YJ>jblP{WBaa&7Q6Vk-$ zj4M*a%2Cm1dNm6F0BR~Et4iW!mmgd%n^D{zh@KWTb8~psC*qo z(TjcKMmfGddx9||*#^{q{Y?%pd+dsxpdju(d+Yqo{Q0QPPl|E{X2-&?>=t=mT@n_) z)7ksN%ORJVTzP@u&K>u_*Je0gc$eiLN}!4oKg(Azk4APMjaB4HD925B)KUvqoKXrJ zJ{%_1ZShXv#H$@GUaT8{#mhV$`VonMAo4|!y@uo)t=e^yH>zy12jQA=pS&?9^3S8P zHeRvnbKZc`!-anE<|szg&^EB}OrXfkgp0J6rg6KDYh=lASc2k6HyfHB%qAunA z9r8L4Oz-XWs(?CIUiPw@?;vM+q91UyGTugo>a?#TT+1<*_K@p3BJUqX`feQflH&nH z1}A(DUjnIB-V@sSsELY9LL88Xp}*A3pd`27+f+`bQlwFs@?2t|^JC?C!s-wPTCdqd z#hzlde8qOWEOOM_%aB4Va;j9|mw%T9a=4#y0|lQ@T;LJ){tu;#oY=eqL>N2w+&HBS848g{>WQjq^mM*j~v&@hQ5NE9gDBU%T65H8Nt4bt7+6E2WF74cB0S zN6na_;lX93J9(jXKNIuq_tdt@-~Ua6A*aEgIt_}q`7s+Dy$0UY*;cGwR<9Y_U129T z>?v+F_IZi1=?LzGNpLitG8)kgkusoGyd|4wuU*kh-V$~VmAS=b?z1}oZs9E=Qc!DK z$$RR+cXm@RT>vR+&6*_zuFya#UXaJ-ykicyq9ZYSjXIa)W&*k<#u0f@N-McM(H(pq z+e_iCw3ospQczRzMTC&C%WL=ypWanl$U2c%4CRA7RI@nYBBpr)gVt*r`m%}dvTw;E zKUl9QV7u3#M2-0iWKySewc9&AP%I2&F*D2k@!2kGzb_mQ|BShrO_ZnJ{Ho|+<#>up zJWroa9ql+u@t5zp*d>Hibco{r*zMdX3zs@KcJhYS@}Tj5v`WPV5@b#KKfaoziGRe@ zf%dqY`ymQEx=cAjqJ@=LlKzkLAdX4@N76{hmMdMHc0zPBqYNj+!D%PN!7As`|D_XR zXMMixcd&dIyZsj9DktuOGm=h<-}{Ogi8v{q*O)ytJ(8hn=_7h1h-m5C-iAZm4nwNK5yAEecc$xxZGpM!h(#cGGA>P3jNT9e{=qvw@Mtr1Jc zGRgC5!M9KXJq~6Y9Lrbpznq4{=*H{~NjMA*Zr~}k;9*0YCB{Q2Ck~>31E7fK3DIvt z{QJE7=5<(8Mva})L)_t8+>lLoUB?WS_dN(XNUi-pkB!wSgAVYWCL&4!xXcy_#u=^= z6Y9nwCL~>KwZGatChrojL)%aNo+XXh!;smU+N~0~`%&wu?Z(e_0|3AaI}vm|f2V zb#zD`Eh2eHtsrTTYITwwAQiYN!7==!eU?$-5L@{s~^2TG%Ky3;B!1_@FLbks0xTUL(&LNPK+p5k62B^( z`$d;)sq1Q&>rxk`IrUhqW$xJeC+XS}ZM5udab!N0W0JPxmh272kprk4j@^M@_pEni3}=i233IL^|Tkaoz{v5gP z-29x?q`v~NV?&IrdSXDl_S?m-n)SN9x~O8vq1>iuoWIgQ+exNJ(qt5?ztl@ta?5JM z!V-(ta>=Q#OJJ48Q1igk@@$UU^(_vh8l_8KuG6byM_1uI5R2C7&-?ha{j02-aL8Q2 zb;*Xv`yEZub3E`}`NqMs zmndoD@PG9N=IMzJXKO^(OM}>h0Jkf+ORS6wa_s0{`U)60Sd&JpTd>Gj`bS$Y7RBRv zt3G;w$LgX%ef^of{s!07!s=uA}kIHDO zeUy47(?`Yt{=Q8lhUQMa`&*o@{k!X;x?d#s%ubC?4==Np&fWPKhdPb!8Z{iVC{(7w z+PWQO;MH=(!xAUBkm2l*WXQ4A6B(g(b3VmA&FR(?ZQ!*AeZuub*K%!8AHO@?WO*1U z<1}|-bT-$Gde#`zMpU~vR);EV{WFmT_-AoHp#J0h(_GeSxt1ep?T>glvR;}gbw(=@ zzS5Msd-qT>K)NlB2CcbtOf-uftpmKGp8wvTE_dOzqaVHHUwadg^((kjDzD2UYJ&5+ z-lsTH(IkBJjT(5Q{z+J#C0zFl2o6%^{YIV$sQ05Rlh=-7HB31CdEPS@I~2ooN4;`7 zm`1JHwX*ms5JFYFR`!{hZDOtLUHo%PfmKwHm?S5$S^1<~olHh+Pp$Ud8;M^BAFZV&Z>Y~-@v3-%AOISY|Ge{vSmV794{YeY`izJu`s4zjIET-*7_LB zH4RTC*@^1luLPU*#?zY+2S9!{o3nL3PxdgBOJyjw>~9&$O4;18=qyG?;jp`h@lMf7 zApu3Ud^Y^6e`I4nGN)F%rpN3tJf(i0yFNia&p<5d=4;}lNf>)9{V?!}I_<_*=W;V< z3m~urEsAW)v!~@)gYD^svB`1!=0fZG=Gf$&*7dt$li#SnUNwzx0g+sFlUuCo+hdcJ zeSMsaR6Cq@b*rhyF0f~{tk9|9^AaVh;60dv?gw0>)|@?|5O32K^QNI`n4ShtONC2X zdKy+#254}T$oK3mhVW(UNyRjH4B@j@3T&+LlBpMUtpqT@qU*=!HI0YUFk}++j`!kb z715(Cj4XLl0yo2})ZOoD{C9RoYFm8M{A}qhZQblPWReqnwE16fjOwn>`<&-j3$7;l z*cO&Kpw1Jco|cV*!*C)5qmf28#?FR$2m!{$OXMj}?I))v&y%e=6xJ1I&PTbaisNat%-KBfr}d0>~F zjN{kRZv7DMZAi~;-+_E%L zDcSJH7W#`ty|fpzg&Nhq76O#AL5eh!<$YiCe4-cW**I6_6<`iYg2l4sRRij5y}ttL z=bHhI9#qN8c*H*cnx)(K5Ywi+Fd!3c&@3FcOlS7wbbm2h=I`5bj9xY2%+>=m(oQTo zhIhIQe5@vmsB5|mUJDv};EA>Jni;tIc$4wqT?6wsI}>jJO|VVtF-_i`J{p=dIRYv! zKr~h_`}|Y8^<>%+8m5PAP0aCHlk(Mq)tremxD0_xHmaKvT7K-N1m?-6M$%Nw&I}TViKuN%5U}~CHhkqsu zC(v;gZk`)=`uFA6id7oL0@EC*Z|6tna=}eFILB0HKPxkN@OLGA_C9G~?)Keo5leW%}A2Zbot4q@Q3)s){2mwSSwwrMbF5~Ju&#^H#CDUdAa1Zm@S9NnB6X)nv}&> z$`R1eYvH9gqx-a0ON+RKtQNwKkZGuH%KyTe;6-+_RxakQ;TfDxCV8##BbuTk`AuXj zIb;=b-58Z6lJk|}$03di@_V3inmNT-TLa2hz&T5^NK6suMb=9r$s?BMo`>Z$wN_qI zrYEp28zraMs&=FfU9wNfU%MD25*O|ybwr$&U8g?#N&4s|BS;;+s?^``=1iWt z%qE*k&!ZaR-)EtM}r_*VbSC zggBWw zjp}^zfB(-yjGF7`w3sP7w7!=!f0a=y7-dsspl)@L={e3lMiF30lJuk|J*f3hweOJX zNegcEq&JW|Cf3FrgVhfg2nW#O#(KehYpp&i<3lh~@15MpGM!3hQHyGS)hw_%E>Vg= zzd&XgYyB+VTF~`8zqRBwxW0dDoh@Bj>t&;kT`zPx^d(Dg zE-8azHprqcT6!yy#4ZnU|8u~$y zCKDABE^6SNLWBNgk86*a9ib_MRSxTTg{O@AzZ#+>U8Ln_^;!QdAct@#YprHY??Q7M zwYZTLeP`+QY5KM4RnpDfz}r%*qp`|j2ghY4vi~Ted+20KD@~{*T%?~Ods=q0Fb8=h z`p&YKd~2l_Q!3M1EmDLe{+Un+TGaJ~7CKRmJvnch4t5x*zFDVn;sAe`?<&EG8zbxA zUSXa?F@4&!>pf>sBq%pXx2pZ`2UoTeYBA#deJ^^2cM z$m1w3;Xv|OrV>~rZ#;QyX{BC^SBbTkaP0&>PM#%UnsQUNEE2qKhO{s(dA9!*+{HW- z{I8gP0_y%p8|f%04~NbnfK{5bZ{stub{?N~b+6EdW#7TI`u&{}P4J33wdl{1X4Q@w zmis6sb)#w!Sy5ZCaUGetmO0@=;!NnxpD>{%2V6wlSM05q^ZS6=q} z+NNf;r@;3E5I<$UspX4o#_#hNpRvEh@y0B@iU3+Hg0){aKd#|NU`v)yBP4S;lxzF@ zeDXVNB4*d<>&^5lQFa%RLeyF--+XID?l;S1t#>hegAbLedcZc?laZq6wP%gAgzCwj zk?e3MQW8}Qypps@Lq?N95rNh2hcy{AvSyt&a2Vkjhr7Rwlo$()fAXYVfu{cT-vA2T z4RO#iZ2uaq1G#xw77LWr?f!g=M)|I~+6T;i z3t?}ZFNBB&I30;>=$Jjev|Q%y6^+VEYzl+#VwqX<+Z4WU?27LP)^x@9`Kx=xcX{&| zMMR9Mt(MvQ^dS_7L$T1z^O89P z@RTWF(>sVRuStQZp%aMg-}DZmSD)z$qN$JlPe62d+HpV>d?*c~qD->g0~fjD>$_6~ z!6N&J5N;e-7Zh99c?0U>$1hKv#pF)X0`~JSvdaM!_B8qVn6MhWOkg!a&`H9D4WANp z`tq-PfR*?;KK-8nD$T6Uf7CFmOsc7|s2lToFVKZ~rP1cbm1&q9kF(Cg#M+gY{nuu* zu^S7)4F_eSJBhqEsASN}uGnm?*Jg@#)NB&(wI{Y-_PgT*5UW^+U%yXtLF@$}+zQ`% zBObpDXrx|}7P&+)>`^$@BA2yehL*RcEz$DU-}sZ1j87Eas(Uo;hS#($Fjt{(IxY8} zZ<8<#E$mf_OIO!?o1CPG{?rt8pf5Xox>fG>O>l=#YORE{NRUR!Z8=%2akPx@KCNu= z)C$>g(VOVI?Ut_3?b@iHGY^HXmE&w#uj}Fn>_!g$<6U|bjii@bsfL*ap-L`WeQ5P@7#zg!txGlYe91|T>iM}a_ zR3_ZfMSqxN@BXyAGO+NI>Bj18%rsoU6KDl8;RI zfwZV)C0onxs^Oux9ZjlwexfKpUnn^!vx*lTW|)yg_QL-5((E>J?T5yRiGWN*^PK~n zPJxiN((x9%rFvju^zWRu|GGl7#p}ul0Hmbs3vDks$B9s3uae&h43}3N35x>M+AAk= zy|*7Y)7f-wBoejr7b4WHfFPH8?)eaRCC6i8_yt#9#@WgO>@oyS${G%@5{WNU6o z0-Z^Kc7~c-Ck;GD2e$SzV3I|f&}ox6GJp6ceiYiLu45Q@TT9l?lK;9{-SFq6cb0hk z;qMpOTY!5X?wsPZ2rh2`m+N;Pe2v%)PwlgOu_om;v<@Ve!xMdqua($0YyPTh`bebL z#rSPQScAg}IVVVUVJ`XSW*g}?FXSJ%)ZNxgPt#g-D@A(5C@U4@9;Aw*FJbzSwd z)oEkw@+qTTIj&S+&iu$vsl8swfgVtQ`UhUGb8^KubR3Q+;-o2gG}Tw00?9L-G?TF` zV{gSp)Wovn0jOj9h-!F_saaA85q>))&u6%hjwDwp@f8PMr6w0Cp0EP&q0E!$2v5|_ zML><+^nr-Za%Vr2w{a@muJZ3eF5Pa$)vu#m?7%0#Xp0k~NE)t^*CY{F6N$KD7472r zA~~(K{~)O+bTmhgVGmAZ>xM0n_<%*H)BI62+tnsoloROkJ0tcawE24CVeEX8WN(Tb zsK~r9P_hfiLf?<)oeo7csarcIUs%#|J5i950AY?~aFv(TN2Lx%xCe0{A%BHGK28D# zDh@CsUq!noI+<;PBeNAQP&>b`v*$`&-`WZED9KFKul1EzJ!@`?2~0me0v~AgI6o%B z#kiWQuTB&(C*N99Y=uWeIjNilaOFfKNlbJYP(UT>Ih)TIJ)M){^##ER&{y@s1)T5V zApWO7(DHbmZ-~SPd7^vx*3gC~+9aBvklNB5Us+CgQPm7Wiq$nwLO~Yi zxWZqzmg32_MUN543%>qP3_|VIl)Bii25`9aJYPZL1JraXZb3>bwy2tGg=!wKwgsgg zwvJla5>Pks9?u??XSb+VoM&&8XO|Q^kgvQ;Lmn4q(kbh;m}q`+0C)LM*efZ(Jq+Ve zk@Gd+LWRx?C-MTZlH`s6mnEaX9KwEYxrmMJA7P4=u;Q3ZPU#x;|E38S!aEW>1uk{| zxH|6^S$%e?I-RR3{+`6&ZmzLX$fV}l2&8$N+Wd_ySEDNnXa5Do)gx5&5*<*Y7c4ZE zA*u!66IAhv=X|@moiC&zwJOlOj3nYjT&cqVBd+77#jDyqvvbhN7j)=v*Rk(p1gXfA zk>W58J&;V>naM=Y=vtu2n6ULDyl+v0h+4`ulXCk>3aBHWUEqW)(*Uy@HcbSD7RiGC*1HG{(?_*CL?jUGGk zyTZ}n?H1zHqZrA>8Nj*WWDn{HsE(T?fPj^Bh!x981hW4CMie5^8~sPYhYm>v=#BZ4 zsMEYyW1kaBxb<;xttz=mHLjgNDR%t2hMd zMkldOj8ao>!{>^*$q>BKs|pQ=L}vyPjN}2LWsFaaAcI#;Vmu`O5t`gJcuf3gYOc8% zCfHX8_Rv${1p=y+B`=_v5c`1Co+=1nCV1geri9GP* z_G}l&f{T%EV8qa>fO`9}?u;0vHvP{6mo(8hK`&YcXU#Ktsq#B5LoXXmuawzn)j2GN z+hF)tE=+H(3mda*lACL2umU(3M?7Fq;35i9t^Y-ICx08;V(v84pUFvFinOKzyuTIR>_Eker^VI0#G_)W^%hS+W zF7I7-TPJ9FiSS7Vl9i7npw(BNOC6kLh3tN!UPp$rCFs=&|LHyTeF}!D@Fyd`j!fov zXchr)Y~o{5S`|Y?J$dluc)&BEA8Wzx=Do>3i}Bqn47;h?m%rkrfY5zw!)VVJ) zUpkTzev+&=kgJ}#AiW5L@1eU&!$HwhYEEjw`i~~ z6)rl#=YjJ(!RNX32%eJ>toU*Ud`!UO{{%kNchvZoCkKhc?5}CKzR!t^+kJEw!lq^P z_s~5kszi>^+L4vq`cgVW_mAd!W;0xCWQq7kniAf*@XSPm5;=pMR$mgSg4 zs?^B~AVHE#YZp^?B4}S5-6@?Gr!UyU>Y))uckk`C&b_hu-#?ncgJwRI{5KXfsivgCA4ka23dzrw)LBil_@quKI^nXZmC*3(_I)J!))9Np&> z{VC94IyybZpGNjh%!oDZB++%N?fQB;GL&P}4j7d{56>?xF}*Yvx)sioQ-3!4 zBBwTJGQU+EjmzL{4&h~{FwJa9_HaW8^~%)IL7RFrmN_%;MBjzAf*d@U5bFKSb^guu z{l#`FT#I5GtnPQ-xS|QFUChCcvE?>(? zX(B?&p%aAehEGZ=T5Pi9Km4%^Tpc16CbtTOcZCP^{qsl8QRE-%Ix$ls#=b{|QS zwot1NPH{?bIG+5$mM0(03NHT1qmukc@&o5u;}Cx2cyZ0s9!}s-vXH?s*OMV>%w!@P z$dDutJw343TRO{GybY(IiWZTu)L-||sXy+}$;3jkh;C5xUPqCo)9y){v+dUA#!@!| zSw5!;EcieD*C%*+>`2rVPbLiNKAD7{xfJQ-{ieKjU;m0)msP2+mj5qcG8>V zla9!{?(3x1vL1MnsOX{x9^+Fo^|>X%%$eC6efRF-=(nhh1}>*B^2$hNiZ}`^)J^10 z4XA5BM*p*ryl5(T2Re)d;Yfga>?Cwl11nLEJo7!-$4Xss5o<{dc5+nRsviO|GMkyo z1!;Eu0Lvn)_4G`=TGO%&TVCw^`~&%!cmsb+?>RnOlCAO-)UjI*W4TYd;cQRs*|Zwm zZ>Xk&FZ0To$N&-ENP46G`@7(91wzUj0rgPCVUCr``lj|vXuTGbMx|Q)&#j_+L`HT} z?%c3^w~IYOyf5vCu7STxKzk+cOQM~2@v&6v7IDn}l&;x;qv$)J4wj+XHd$qhoc7-% zos-zxi5LgNzqaQ?5m9P?N#-0)@!Ny@k`#aJ4`s8pvz7FIi|hS%SWiT6I#h+urju9H zVCLlv>!rJsP8TwW-&O0G(T-YJO!9}Tr7wT8$P&*mS#%PNgi~ilvnay8dViARCy`hZ z=H&@OjJf_`;-Ei|_ZIP<5pTWf(leoplKL3Om{UZPRqH9qOj6>hZO5Ia ztGY->;iPGVoCu-U(~LB!i-6K%EZkA0!XsR+g991CKDMfLk0gCI8j7*^^p^TrKP2em zq<*e_US7Q-^1;zA32=-K<4@hsHhOqd$b^=U#H!tYo)tZ))rhTy{7thYa6BHq@LxCs+|_G_u7_#gdr5PAov7fdZ~W z9lex0kSo$qYJtnqPf<_(GD%S+hh`ykiO>Kk>qR{E_*8y`C$A!OO*Dctthv1wvXuJ~ z3RwtwJ32_w`P^?~3Eh$kYOB(p)D3b-3SJW zfQt2$%3j|V$ddYNS;s-C;PkNIqt?Vcz?GA9#*}a3Nb-o?GXT@-6DL#Gtwdn+Cu#_qWsYr=f|21 zGtb{+Q|Jj%y3A9aS0~Fn%ZjbKc_sAz-O--#Q0uypk;7+%CPfaP8Jgg<{YkRz%D%NN z&#OP3tJ{XcvR#a#Gob!4nZ1%Of!S@Z7|LphM!uGjPRFbSoFc8GB8U5X?j6S0fI4H3 zW_Kb({TuGEd{RKnk*$|-)7f9GzrL+&J{C#dCAx7*urxQBV9Dz;lBh$Oddp<;W~RJq z#O!{eEh$j%d(&d}#lo{uJn#6j*eLQ<6MseVyR8zHY97z4e_YG_H4U_+BHcU3mXb4i z)%jC=WuxbxsJ$J^#suss#cJU*csrDhig_btquj{tfcAKz``kIY(6Bx!R?YTR-RiVh zej8aWXQ>g=V%2QxUa965>lZ1X?VfuJ8EN(Tk_y>g3N!B0_R)+aK3>-hbWM5Il6>{X zt=a}4I*{#E>iP4;+!MM?G%PUWKimUluIywIaC?#_fig@22ddDUP?X77op~9kEgBSDd*fLp3oi#AS^jN(M3|bWOUZt*csFk*Lx&gahCCk z9iSq|8VIYtJVj(jp%U#XeO8DM((QCo5gKAqBhek>o$wpC+zf8GouZMQ+qaCTU-VziZXIL-v)?lB8MXm+jH>Z4@T^j!d8iV)nrtq4Mk=fD>APj@>mc1^sC z3tDKPxpW=$7i3v?jgGC~zzwT>Hu-3{=v~`yNioyjZy)rJIOg4v$GA({BDzL;HFGgHz7rc?6dyriqoehV2SvSf5WPi?ha?Os-Mcx-rf$;*@? z<8j%ycG(!~O<2yvS1sye^owjHo%CSw-`MFXx8)&3?IJRL?i2q*F`-X)Ti17#TQ$0( z$2hO=DE{?pWo0b`N-`2}ORSN*cJwxWPAo*s*ncL;ndOY!x{KW+sU2HzG|)LLqcU*Y zmZ@2b@u_}{ivW4N_@k~m@IFq<@{1k4k54H-Kvvu8tV)77hv`X0xT!Kg{} zBX)EiclCq+4{v7zA7ya{{0#{qXkdc`j1nLSC;}=FKrlo>*nnanfFxSQqg71tD9A2& zMT47_EHB%l^{Q939>p6E4i9P~Gyy>lwTgl@DC(?18x>*EXukh5^S+zSu>srf``|Zu z=Y4n1XJ(#x=DEhw2@4BUU0+El-$^M~FW`w6KMA^&^w&{_*`n6^xk*PiK=$C*CC%6* zYg6$*p`Hsc!h4Lw!N9%zRmW9zL{jJu+#`v`PY}nyE2S)S&G{>?%IC)1z&qKwf%k%) zRkDYQ&lAA|h2o8=dOMzf#p`}LH}Pupz%{xnr5F+Qe>g+hB%OubX5Yz6h0SZb&eR5f zg?>4;eT_fe=Cz&QW^Gqe8|Ubd^ikZ`tdwC{G)3P8TphTR7nw8Ffl@oBe&f;HgwIgy zG+h_S-NObTtbQz$$$x9S{{BOT&r#-t8-&JGcX{Xb>>8Qi-8T3e=1TPsG>Y5LEQ} z=q5YTR!G=#G7nkKzvaUWa!A$eoZIF|lNu&M@x6_V*gKMGL0LOqa|X>+m!!ke7l z%(+*T#ey0@(wl`GTVnfxM$YOyrwe8GYkwO8%sC0+Gf1k{d!A-a+0BQ$QG6yP?to#X zXN)D+5=whb_1sr2KkMWc7ebNyC$Um=-X1q~xZ0k1^Vo#!GN(Mv3J*BHJ`w=%2* zYhEf2wr#TzS!4F>lV!tA)dlLgUlLd`@(Ue#jYz_a+F)P@fALDi*I;0X{yUt%p};x(wQ(Az zqWaT${B2liP>%eJp|JjYE`QDXm`2Yr+2>uVD42m`E<0WwC?>{{%N1NZmsoYc8~x=v zJEnTGe*Ei)h<;gMIOkFJ370!COV;jM0S_De;Z5XzVT3XG z>l;@`_7wahZiR!U8=+#_ioTqErX$y}*Uq=7DV$-+z;B@;r8IF-Y!o(nm84tbAgbe&+Wl|0r;nQQ0+ zck_R9NoY!zx;AA$ufA{1&t{(HaMMFyFi26EK<3+BZ(J(#GTTo7&c%_9%D+1x-uRkN4bjbGWpG(LPf zU+u|-X{^SksD6i*N)rU53O)(y$xvX;OHyAW5_iUt{kF+C_CcCepf;V+IF8AMYU%If zx+SxDGH@ll+Jn;WXr}Mpl&ZjDs&HBBLm`RGad8tXpQ~Nls?VV+S#8#O{bA$9cPCUM zA>g029#`@~t_9blIac&yU25F>JzQveS9pIL3ov`Ey}l^W&Khy}K(NNHj=xbh}SGt1c;n^90`$SOl3sP?C96^YV~=pW;t z!`0sfnmMqeM@9cq&`|roLm?IvISXs_DXgX)BEH|Gp1stpP+9A|KE$g%ynVaLx)d~R zC@3%^B-ISHbDT_Zv%$)~Jwt8e3zQUOqCq|OmcjjYcYXs09V)D#!0cEJLj_-qeq58C z1}o55yorbOPF$cm$L1JI-6lr|a@bRe)LCZT;eRG9w5+VQP~a;5wxngJ93vE}{02rg zE&*jiVwSs{hdPA(JJqPIzbDEEQ#%DR$$g09Rt5ln!AmCm({ zzXj@bghJA#eysj8xCf|_LX&nDs9jf6s{MO!^J_?xPzCA{(c?EixyzQxDp@JZ7{@-6 zv$$H08(*-b&*8NQf5)6l)zv4-nmu|<&`BQEarPrd+*qh5Muh++^fG@( zPrA^3TYvc&dY#vBSE4rLWdCjgx#zmaLeBSB8*05Y)Gi~n1GUfh0X2R2`xRX-7$jZ( zadd2#6V$7-oGz~*W_Ni+m*!pmK9?ToJ(rH#oi#momrc|&qgj`S$w$-WEQy*EtfNNe z%a%j4ceJx43e}lgxcVwDO&_bdM@XX@XJ#&-a)Gx#|4K&RNp=&QAz;vfy+}~-yD4CG zU?2V~-;5UH5OqyrBhwWE)855_uCQ5ssrrmKKxQ9G>*kRq57qrjmihW5KFhJXKqZ@Z zre%ZXGpWn}GR*J?HH3m#UB_o+*e&;_+ijeB;ew9V7H$=-`2f}ehCAzw;m)5I8^fI; zuHxykE3DxjnBr1)1vRlJH{qFo@W&7z(!Y6w=L}GPY)Ai^Yc~#Vl}}ZA`eAD~o_AV| zILFa!6jfNQ-ovsCwUYK8^jDs6;tt&4*(EL4d{u9gJOU2DLb6vz9 zfj#Wb)Pu${$FjZpB@>q4aC70kYR?Aq*es7=$u`ttvC9$RE5B)uGGa?|t{Y6rZv@T@6wQCrncJtA^s@X^GZg`D-#}ytX8VUyCj)^C z=C*)sE`P?G9W6crZ4fbn^_TQx z4-(0jl?M4bTUr8jb0i0JH!xdMH0@S`?x( z+%jbs_mz!&=&$?_C$qrTX(B0(j?$1Tw2WXy{L^D5L*!iKRYwxl@e|w7le8Xc}JNg){9gWFfz1m@Z=(GPb())goTDKTQ z&VaciLPFYjpbzk{6`-#?7vLMimMm0tZI$G1d8`6a45R()X+=kGM=BK7XcM{0KbB=ECkiH=3+CC1ZbuEg~18Qs~J+1$`= zn_N)2K2;~N=GC{LL&SUz&T?f<&&o(o;gXd-465VWRT$hlf}YzSiDd7u^6cfB*`RNq zIuggKX!Qwh|5y)Pjc~fUT_Q6wVvXXC4t1!qPA@3_l03*tRH&AMR-wyA(5LB_U|^_H6b z09~CaUA4{}T&cQ3eh%aFEvtu$i0%Yh34WZ%8^^l>EnrT%9R9Jnz!h%z8DyF3fDPItjz(Xqg3Gr-uis>%b+*rJLC)=qxhETh09$Q|(Q;Tp%^pktp5&AZi2~$f=Hm zv_PDVzsl2MZ^uJ*KR+eAqCoX%{&{>quCM^G?y@DnqAO+34TA2%9N5c!A1RA=3wh%| z*vEHP!~6+qb*0g&WU{5fEBDp0%cK^mGz^Zl`NT1x>+d%)WX*J3Q<*D_#-v${`6zR7 zh$qqpSoO^zo*J|_$BD^E{{%(>XI0X$mIfy_i6jWfN(qgF!#j3Ujht#^DalHf5wS0R zSq5ji3!g;9QpckB*TPsDf);gll090MI z!}zU0?Yq;?s(%ntL^K`v;mEu653f+0tRm01sBvHh$MPuNBaCG|8Pr{wQjciqZdDzp zveC5@`{1qW=P4{*QF3L8y>MO>-99lkx|ptP*Lc}`7a@LP?x+7i)|1>%Ujyx14^s?n zKK0d!dK<{D6KwA`T9ljAdxe5__JP?8)BvY1z5)7uQuI9oej7!}jrEw$uwdy__!_BY zle&WvM1i)ZAn2=6>EzM6*-4cOCr(!`?j`7?M$pNkdX`EPbTa*W8=bhz z?qHt8pp-Sg14uiG zHWQW1=aSh$r00Fdj5pShILM?&Rf(@U1V*P~aV?={4vb*|RF9`a9MZEoZDmsKc<`{Kk8w8m8&@zMt?~?Yd4L{-8WTxDn!s|AA*gs z2Jake-*c&N7$?{j6*AeU1wGrW%`6hm#mmJ&e47}EuTei{e=IT_s?)m=^+n!28roE5 z&16#@RnfCW)1ks;;)3D#k^}gssWCtFk!yoNPOWWe6t=TRbPoQEBkrbia7&%Dr5yz* z>>X|Nr85154ENv2HdcbsZw(Bxt!nPETNq2|pA>)PdFs|3ucKv?WMqb;J75bU?!L?g z78!jo^LU?M1^IK+*>xySyD8yhN?`X8f)URdDZ$>*=J6GgZ5udg7}{*~8Uw3md=1+2 z%Kpvh`=PJ>E!(Y7LRtwOQ!B7x;3?W;e|R&sDXE2y}zS>c0~tC&>bnoQNC*@w(05YR_Y`w5vVKrLby`oS3LAiJz+Ufj>dj zehq26R@ie;29N6v^*yW7D%m!un(I{f{3Mta_bVZO$~nl2>}}1@z=S|yLf{T~`Fc2~ zw!9=e!+5D-lls@kW;Y(rtG_xaXRXxad(_gPwlsj5Sq@W5SW|RyMldjdSe0h(xYP^Z zOUnoI1te4}h&vCKqMg!&zj*iVcU-J6iv#K=2 zFs$%Lk`{Ci>5-LV*3u_s*Gvh22jIC8i4rmE>KY2k$Sb#OGjJ;9bLr?KxX3`Xzl-m^ z`9VwuZgJcqnQW|d_o{?J2P%JQm;Fw5L)CYg9*B3m z6L9rLb^tRpXZy7$g%*uvE6Ulnu&=eKlo)r3-l;z|=vQ|3?6=kCKN#)^q`+IM=TEdH zzg|1$dddF5K`r{J&)*n#fMBOwIC{!?a;JD2x5dteI-i|0E@l2$TeseCj*-Z7E|k-2 zO9PK)di#=IU39>p$|m~1oI(&G*kXeZ!GZ%u!i%YEaaz~9tI4(+*m!TgKa%D<0ea-a z+rNUZwMk8@W6Ew(XWwUD|0Zz8KXJm34Yf}}eMa19aph&<2~RCHKe?9wr=j*wg(`!L z82o4@V%`69njlw*a`0=4@RNciJLI%-i5yK(HSl~QdItHQXe9${Yqjf=gO@_LzK3BS z_J(({(awC&|6_vtwo@d-r@sVe)>vp>3gO}H5bPT6#pgK*)A0i>T%1ZyJR)FxPY~75 zf@rumA%73mYpcCIYFkfzG6>!-M}f^Ko%w-HzCHJn`QI zyo)_$aD?48vh`t$s_zZ(&hkf2^qv;Vqor@$w#}T@+-2_xzCk~8J8rt-41G))$4D8i zDmRPmZMl>cO?@JIC=1fU<7LbjWI*v=W0mX>>UvL%L%5-#{B3H;_Dw?1AdXnS(Dyv$>I-HZX%ki?oJ&laUGakVfMLCs>}%Lh1HG6=PgyCnA^$6Zc@c9MEiijgcirEDb$WojeTx`H{0R&XhWYtF`=<0s&q%zFZqsCJ+u z;Mk)6u|XI%zJ=mYhxY>Y@mu=C>^XQ4Vv>?d&FPUQX=doT_j2*Q&_j)L@9IvCb8k1t zLVO^Km96?0ac3R|&x+2&n}^!xrkBS0UzU%*33N^BFizW8d3{Wf>_S)o&hgDoOYu&{w68KC11R4LT`Z}wT)EB6@nClWK zLam8?Yl7`{f8ex&+vZO&{`(AqU2p_k&;?`sk#62o{gENpqBu5U!AYS>pZX6bF6hrK z!&p^DI(d5(stf$c9oeGhrdUY|%i>wa|g0uFi z_SnZ`fnDv9C5s`yVEv`UN=Hp|2mC}>_M6lv;`g*94aFuHQ0a@lC>8|jUR0GuF3tzj z*~W|)Q#mfYGgJ1-U6vbu?h?5rh1O^(HUN&%-oj+9DWJ;NBw=UEetW`sMiM>^SA+pMC%_rNsN1A5Y5 z&SOLLHZup24@#CkrH6A@4oE<@qVQkIC%lWtB!99vewmdU8V->2u{Gvg{B5V{4SFqmL2N75W(Q#(EGA&wSM(*>CGv9+<`}hY|c+pJuy1r ze)Xw)W#5uXu|$3_1`)!vqKO>;ux8xz4PFIkW{U2NyX-k#0IU&yJFnjSUbqfP2rbx9qHH!=I<-+#q5wBLbG>M z<@Rv#%CMopedjurOHpu%+KC707s!uCM44G?1oh5ImYr4IXIHSb_7Vq5Xt+Y3P99vO zzCL?^D`q;g+@Pb2`aP_)i5bP<(sHGhi62KH%tolwIS z?~gU7?dzcf*>G%I&iK<`Fq)qJeo>H~2iKojh~f$5%Um2vF$OR~j!fUCkF0?nd_ABW zCbI^sZRVYyY9u6~_slt04Ezpsa9skIFd*!A=p`(WwyLjtj+RMOR>e0{mHJI* zWH)$EfX^U$@@imLJ#qj1-5`^zJPMSD1sv+WvEuhz02K*Jvv6x^78DlAgySp?O7LI~0=7>ea6xg}2Ho4Ak?Ehm^oxp20vJe}$nD*e8*| zHvV#64#^D_61UcB1Avv%jhqASve#q{JSZRu>8`0oQ>7I1VGW=C6$1*?O=mMGHZ2?(Is8VX5+3RDdjZuzypd3`&!q*4868~5gGD|pkNr3BU4 zd=`fo2F`K;g|t-NI0#5NjSfr`Dp}846b<;<3Q4bXP(yiP`4AQyPq?a3aPQQNV1BCY<;NfC>4i$_b2)lZeeC)Qu)1x>h;r??6rNZ&TjnuR&X}$;9e}O6r7*9ZWiY!u4ES8FMwQ5o}v6y zp=uWG9i$QX7c#K~(e359S9~IqTDw`iRzwq?y_`#6xh?VREBDka@%%6+rQEX{?1 z?+VTmQ(noSJRAUJlTMXm%qaa*DAALM%5&wHzz$nzwtydf^jWH_Dek0c{d)8dbzL=} zU@fu64>J<$u$EWvk)uK?=vJg_Ms6+H)Vp1=fn(cW4@$4jrl}p|bOnZY43tD@a7}-k z*jcZ#X~6~B`9veLz~Ep1-ciEu6gSP^Om@a&kD$p&prKRC$;-O>e> zT~r*^8#jE#RBCZT)yDe{W1$d>KPhVpE@_}=cMCn+&g!W89{A~yd9&SR{TW4nfF^o$Y#b0K09v+ z1Q1hWgL>n1r~_YJJf4G;rd4e8c6jTzV2fF7k=kU4+gu^w>p6EYcV(RnkadDJkC5UM z&u)z@Kpf>ujS}RBERb9(gHx*9Bm!a3Nk>^K8&o@@@?5e=(AXru_Gi1dKy6E7r!1ifbr5svZ`a!EYFDvaud6!r4Z!^^=@oJIBF6+YL2TdV zl0hvRV%9KAeuMJzf**pgNXv8`yXbfEK2cuA`3CYt84vlg`#A_nn?9jY{?z=tJ z;al}W&vpl1lFXCSxs=f#>Ed4e7_aVCrS*4lVN<_A9giwcHI_yEO|a&t;jlz%5ZM~u zcNL^%@x3l*rRjzqN!u#JUHrQf8ocF6>Y(j2YlCXYYS|hqzoO7OYn1XY9j|u_IbFC{ z&8k8k;a*izUA(m`&NK@wPla4{cltybqX$Cy&jdZsEb%;6?s<8M=kapSO3U-`oJ6j; zA{~=sO||EB$)`GV7@d=dtN3SBB2g=UdB}4o{xMFCo>-qLP*3)@hwK@3&F&iRnX6_m z(}(Ahe{$N?U=r3BN6ylcDwlUawQI#PZHfgA2Se4Un#$SNeb$E{h4g~ruQ~G99$)R+ zY|_!CCh5MMWT*QZ=>R~;^9)qw?jLI)lC0C^H}=qHR80+2m?@pot;#+}YX%Hrj|@r=ry*33225JCLr!tw9{gjP!QB{!}Fyqs{K8q#yxDk9W}t340f(TZx% zV|KK(+9Teov89Kl_khIIeK!x$B-JUjxAY9J4>vg#G)IoQnS27%7XRlbIHhY^Fbwdb zw?=l&nyYGUsdkl*(A?SX)D-fpDNw0HckA;;C7NnQs@G{k zki!V@b_70`Tnmnf6sZlPW52%o)3__}|bLJRYpm>I+1>Ab4t@P_u3tHc4C!$)khTf>V+v_vgCvf(qdia|HmldZm ztmsXxk?A#pYIF}@J=#&I8N_+pUvrDDqJ5kywyLKV4R+ObptxytJLp*kFp7#l23s`v zScuDoi(G`*XAWofW%^jR@kH@i@K}TI;X+l?L*frK`0g!K^N7poCV#ma`LRLudUYH* z(-7uKc*+-4k_R!OIRPmMO3GelWT<@4{DCmvtx*9)7fI;P2YpMk@!GcxTK&!nZp-O1 z=d$8SQ&}U5KbnBa`DK1*Hu7a^^cxudlq{=FWrts?2FaUmY0fX+-&pzF;I+JXi|I>& zTDD(U)Q?$py6JBo+t~C~#A&)%(G+hR_fUfRe1Pm{%hlDpVmfl>xlTu{k~NJz& z>bTZ>u;!3GSfh@9MS8Ht?m=JXc@MTA=4tGKE2angj%n;cCdvq^uib;EcgFOf zbcWLdGZe20r5tY(8=U8l{LUSaHEa1^$LE=I1J6WjVrr#223(O_yo_bqI9UdoHUeY# zH@a0EQkJW}vF(UVciM4aB0NqP^WbaHu{Blee0)k&tsBX)QQHl?%WJaG^L(R26H~-IwQn_i>{coB($kAy+s;Iw7i)I$L@6rF&5z*Bk?z2YQuo5vGaiB( zE>!o8h{YC5tH2hmA5ltA=MZrg%ar>W&W;ahDL zrK0L$waZzw3=XdE??KPYq5PLaXC{F;L!NT>ulL!8JxkdR(Ba~reJ^{JXP0L2t{{Wx zZ>^~Etie?t2zQ&XH;Zec725_*1xThKP$2(mw3Ups(IWW8BWyBdxf;F0kSUj@ zRyC3c$py}g2VJ5#0>*4FIyu2vD_GFFr9{{?1s}r6+*AGq7zr|br-^`uMdn$duKcMT z$Ey|U`(L2pVSQ+NXZcj8bm$pQK`2kD>1Z0vilMX(6O`Yl34sl1jWoPow2JiXH(rnb zE(^iX)w$xO#W&2BBF~rG77pjqfmGYg9Nw#14!&kpijUOdPMlN3!%J{{mJ0vUhp`{d zYmzl7Qy=uy<&|SunhCy==(^*l;PxG&7; zLzlqXNQcB1971z1omJ44I`IGM~5vS$5A*0GYZt<>w7luX!i3lou$j7`WNcbZDUlJA` zB~k-*$%6x3j(lq!$I75D4c`%H`;{PDw7FKp+%^`7bUwOO$##ODKmOD*HXr8bUX+-j*PJC`^;_ z88J!=-9&2g^s@qRZ$}NmUf5w6#o?_p)V$lj#@EhP^?N^V52j9-p&q_uAbKvtDnzQ` zENsSG2D=DHs?(5RfV|Hx&3Ofboo37@$CM&?V`_AY#lO#^`eL+cSjx;Xdx|-dSL)*{ zqO{;7{-y>er7g)%uNG$pu4>?{AF`vn$|t2uBlUc2qK{*r@3D#DpgTgl<;BfnmnJhp z5QTeHqQ7FBCZRoomNu!1Q=oSt30g^Paf2t6uB7Mm-%ZlfQIvUi=_Yw<4Bp=CQnkN> z)q(Qpdienjic2Z@XzyT7BwJMP<3E4}wZX9-si^*iy$0=`oGR@7HmJGJzKZs5GWx!o z*)Q_a1pn`<&J%TES9M;xt|A%ayhr7ck}7D1DDzUHkkT&;N2iKZMa-)Lbt@tZOSUQ% z^eApAc)c8j@Kv6*Vw#Xv?)g^lL|lU=o*gBZn%0ZMJ3peaq|^jnn%zO4uL@MBp2Aat zELQ3`QpoeE?Xn$hRxdvDYU75n@GQMytTX3d7sWT8f5l%Zd^h8B@vW-je8P&Azo9?|e+yK34-{SXuhtMQ6xH9n@-2U_D8FD_uonxOb}sU9 zbI5wEy!;#6VFnV+-x~@^LE;%^2v26H3<+x-n^oz+43+t8cVsZ~BUDI&&{v`1yrA63 z-(W~83+iU%Y;c$DmU)%nk975p@JCYIfmQN8FBO8bscWSVxD=F(Ok(3UaSTi)Eojzh zn@)AjAwt=Ndn&VA?wI=5E$Z$IWDkOody=r1^fi_%9>B8PWS(HTxXSs!y4K}`l16-1 z_h_+jbnfwv8C84lOe_=Q@oIG`arMIxvbT3@Q!WPmm8V6+cB{JdB{|)Cug9301Y)dEFh@H-Lv}LaN3kEkPpAA8(sKdd z4#I_sJGP-f8firy=R^HIB(oNQeu6zTmFZ@1b3!u5+yQayV_IXTib{N@yEEzZjNhM} z;2op&{-sXQ0BqGi0oYs5EK@s}ME&?E)ni8qvF2Q=zb}xu0>hcu-&6-uZN9J-fRwW9@4UrK*>EXhgnTYcNI@s+qF@5` zQ@!2^XRUMhcD1KV9SP1eM%-`k+nsd15x?PtgDo@7QOlCcQSZfH2deMZ;&k>dcpys_ z?|?up_dLI3@x9>2a?f*k1cK9s=~a1f)}88$KX-POUYF$Zb*R!Q5t%)JM@v#v=?tzp z?YS6|d+Xp|evbl3hPGKQ0bK|JAB+KV$g^|?rsJZLcdz5B8cysi^tAVTmZCsfAh^Y| z3{pR+TeZaVe7UY`iRZa;T?xJ`(A5um9+Sh%!*ddxZWhIKX}mg}i_x7?8hgYsFUSE`;IZ(kf&29%gS%t<+ zLH65m;VK!`Ogm5PWOC$}?2WcSx#x98#o<0daQSKKq>iiwExl}Iacb6}Bc~kiyVhEe zf)uS)b_M%}$ijrA(Uh3czVg^NO75wkF&K6?w(8`Oe+dPcA&mV}6}&RC?66`3UC zWU)`VpVJsMHA*y6CIsbq$7@OcF+yo(TAPa0ffv7NxVWt1BG?C-w&Vr}T&BoXr`b6} zy!pREQL^Nh4hgmGRdPcI^cPWIEUTa(oHJ*mH4vmQ-%Hk!IVs-GMe3!Kq!I3bFt8m} z9fw}bK;T_y`xvpl#mflL)pu~B-&c|b1V3zhs}whd=*_%X`*-4=ib}=iXP# z*=3*V^5MzaqbT>mTrakv-eEdHvfr~WskZunCsI$^ z*S#k+KTTHG9u6N6`Ff3^3_RLbCtcpBySz_#xlX!Vr+V!;*)>Bnp4Fb~beFUDdq_Z+ z>ym0W9Kc9bce#!(kN=3CuB6L1kf-(;=iDZJwvQM@ZTg+@&{TV2Xf7(1dNlkMDUhww zI3?N%) zhR%!~cn5;XwYUK)no3!#v^0e8?Mx+cpx&OvKN6N`ou6JqWfLMA<%HWm@ zQ8T1wr3zWce^I1QRZE~bCSvem<2-XWQ&RYT{pG0myansxG^7HdG5(xS z+-1Q;D(?*_8nU4gXL|JvP4lly%K60il}7ktuVaWf5u9?Uip#WUQt%K8wo7f8uS-d6ln_lBHGMcQMwJ^ccg%>Tlfy1xm)-WzY-d_5ao3> zi$a~Tlm7Z6-NWMe#UD93JXt?8!sGSxm~f7M9vhY`0byf=2kB>za9{n*4ENB_p5dStE?8fkc>Py9wT0b>~YvT=M?UMrAvmtDm%sCno8k>d`t%)5lZH3NQ` zU0{z^3+x-eKnHSt?E*eR#3SF*fTo*oO`+K@++O?S?jQac>d_xLKKz4zo)G?8KL>*tX0gZer2&<&q6 zPlGamj-{~w&8QCx&(is`!!z}BcsO4_M}$54IWnB9pB=&@^z+p4N%}b|++ROOhkNSh zY2j}AnG^1$pJT%9^)om8Gp8wkA^fN!~($6X32$D#DWNNrh zKMTS}8Dd(vM!!!FPo^FI$c*qd{eEtEgMQ8oSLkP9c#VD*g;(&*-70JT3H{}~@I&%t zn|!%be>p$AR6l<8N3ea({yjkN$r!fZHVw z1De4jSHxoRi2mFys!rS!o((nfT{B5{GKYtfqqo0?BSLo;E z;pO@{JN&SIUJ(}mKK@8?c$t3wK3uM!bHb%ObKeo@EYM$4!q@2MmEqa?c~$r#{k%F{ zsGrw_r|9P&!g=~RH+;H&&I^y!&uhac>*xIN@%rfv_tH;axVwHX2zS=ch2doVye|9; zvNV6>`tW}JydnIJe%=`VLO*W`|64yhhTqrElJFM&yg6LOGxyy?0#vZi?N^&InS|Q~ z>tY!B>7gV)79u%2yglq;yT(q^UpzA~Y_n1@Grl;>nwZ%l>3BQokCE7<0}u~HllE%F z&)w|Qo13H_!X=*3)LF6X>GP{hTOVkWeylZdjJ*KAVs^&Nx0QDKtL*fj_!`$=t_V%T z4?98fSQi&~+*dmE7l-R8jyINxJOYCA{k^GNJA ziRDOavBZW-tXyIzNGvF^o)QxeOJSjLaxIBPeju?QB(_6hwGs;s7pO zBC)$AHlLV3azyw_`ErkZxm04JLlG{L*k2@;FEL>ogvU$leu<5im}o_X#o##iL5cO3 z*h3QgBU5J-;{5m_p;4Y-5kHTu*Q|r^t{68=eeoA58f$Ar%bUlSS#U4X+e zgg%552}22^3F8Q75ndv^NqCF!4&fuhr-ZKv-w}Q!v|F>-bp+uk!m)(o2*U|^geinV z!bODHglh;t650XVBM3(kjwKvN7)TgKIE`>7;cUWm!c_z>;U+>EVJYEG!UKfI2+t5+ zCcI8qPuNU&kFbldhp?BhkC620Vpl35_qD~Ysf6+ zR}tY-!pnqz5H=9rA?zZ2L8v4ANJwIyb|&};iwRE>ULvd|R1>xnJ}3N#Q1}MzAzVhd zl5j2IdO|5-G2xGdy9f^uo+DHcstH>N{~{#7YDgg*OBliY9?5*2L>S2UjUlWf{06wD z1Ji6^;~`v4*h%=DaF8&F{*9;IJ84fNx2GjP5@zXM7Bq_2sC)f7e&n}rI-IH1zZ3N5 zg;^Shf7bnG0Z{GkR?xH|I}gMd6DRkzWVj+bbRT7MZ%^!*`W{RXBfNlc!D2 zU-R~5{P*qqw!&%O>Prtb{!aVy52Jmy;zV0gfkJiJcDigAxGjrjR> z2d3+09iolLIc+?@tu_MBS>XeN#FR+?)9@YB2;WRD*Hj;jGax<#dflCt*U!IKRAJU* z1*n#0nxFdd)Be1)cHRp^Q&J9m*kfbgE!MbEp=qN~Jw404Y8+0RQ@1Ob_a!NnHA#tY zhOX<76Pce;d?iPq;_G^2WV#{?!xD$y#kk-9B@Q2o)JGb*xyyvc<}A}==rC8cr$&Hh z!w?+Q6Tc0%uAD%0mn|zJp08?;vGVtX@?`pk@=`Rw(Rh@fb_vwCi8s0u@qL-U58;cf zxAvob5%1(?(pdj%CnIh~ClCAKi5IqjeN%bt69RG(rF~4U+Na|QC!_P(nIECKnRciA z73ndU>#)|_?pK|;@%IZ_w6CdrGFjRu^EX%87gu;{+9&$f;(bgj_*nBZMMTw_norz2 zd%?m*Xsd9uwd!PAcCvUzePQGOhrT7_+~KW{*SuctL-0RD_)lBC#4ZY2pz!0x-okY?jKTnu^38mG&i^A9n@9%C}< zF7G5y8(n5RMgEC9mC7Pikn7dXnWnEFOJDQGR4TcMqHMjqZBaL`N49zMc}7D8YBIg} zGC?03+Hu6aB=IlCuxkIr3~m~uq$6gqh$+hPBqSCj+YJQK5EmUq|(rsMO4*Q zQZG1%^WY^=gX_ zMIP#09q!;?M;}1jI5^XLf-c8hRw{t_AM^oUUuA}HtGcyFw=BL=$!-}rL1G!JiL|K? zphr-&7xJ>42LJggGmcB7!Bg1wa509H*!*TY-y%Ar7oR3~#=7EfeeGzuAtyEz>Xye} zZzo90WxZWQo;D_56a1UK(_R>(&r1mvq!haETE{-E_Y3P=(c1}SKA1vhbZZlL7&NhL z^sIRF+4Pl;`cB57+PhEyEbV=cJcrfZsD6V?G`ro7enTvw=72UnSf75`0qZ=y^4d5> zZWCxqGdmoznR+hEAC0ev*z^RxON*@T)|=ZS*xhyae_D@`Q$fQpb%o75eM9C-^7e?` zA=@=FY1!X#W1{%kP)y=t&&2ch)pi%BO?e!j_sL-G1Ha4WuB7X`a1v;h$Ud((cjOUq z_xDF%YTVziIJd@hi{7kOH*xyb6^HM?=0f4BE&s>}3D*XKH3cJ&Rom|8` zE7d(=1Dl(_5)UtC4(gE%4VU%OCWW~3MQ1!8nbD#bO{oBv^g_n-ROv-qR6uk%n~taW z$-8pL$?W2rlt?v%47cb^2&xLR+lnnG>)~Qc<$_R@-ei0<(WNZkUaJJdf%x=RSNh@5 zTOUks(UYd*F_KBF$Kz^pfvOzWSG|KZtY z3Wy9WG||zt6FOsIy1}DtT+Q?!<0Gb{Xue#izDeyUI7IVLb(((-dD;Z8O`<+|U0^Ff-awvst!zI2jpu=1&A;0IoYS;>rXB)-`vq=#{M%@n zMgp`C;IS}61xW`!>hVtBZ4K9^sFAt?^x8$|v=Lc2>&@sJr&u3~ir1}2faIs932oj{ zJPlvVyI-#Fp5$IUoOnaO(7B(%7*+{GZ5ETe?2!(l3{p45{(${sGmesTY%Eeonnc1s zDmW5JiPxGs3WB*ylwkhR@FOp?uo6ZzRFEmy%QrOYwacUPKCPc($rDzsGEZ6a#e%cc7RbqN=D#TB%`^`WiI} z&Z}RR-jad9Cxb(YHMQTGD`wB0Z7s|iwBtlJzDIBog1mz1+tJv#btFMiJ+U zRnmrh`V~fgZ*ANDW9g>}-of0CwY%QiKf9vr9X5_=SKYd+?!XE%i?a_+Y-Vp{$&$`f zDKNT_pK2dO!0(jR)0EY{d0FdzOQlCO&D>k}28Y7ZkBRBo`-2$Sn!BlT`AOvSISbPl zWE3X>i{c$gQ0aB;q0*hvf=0KJR-lw?jZFQdR_@dk0_JC&vQz6{Ye%1)KCPtqk#U>2O%v=qCs6Ycz+V)9#4Ct+LO z*_t}WUpY$MwT9Eg)JX>_MS+=?|&RL+k$n0u1Dds=P+NPVGmPM@6ULQmPDp zExlft1*CuG(4lo^WX5eUYOmW5mhMhK$9@|Gp*P8DSKA9GC`T8U)0*OYd%+mWf;%L) zcVr3#YU*W?wb!(byX<~SE>a(GE2z;SC|j5)n4&8BAs~t(&9TM%;q82t*~g_oxF{{+ zO}dp&Y5!xxuF?yZt1fiIPLH;u?B5(zi_}Tc4*_w<(z0Qrnl$VmXhcZEUe;g#Cy2eP zX#mtiDaz5k_!I8JY`C34^PJDu@j1L!&v^$zBkYC@`rjLJw%w2#igapBZfuCyBs!n} zgP*VP@Fop;29*ne$lu8QKMqx;-mu+eMKKL2p+*}bC&e^mwlw5vR)g@Zf(&u^STf1W zn6A8ZvR`_8%=&6CB~E0%7pTpw5Wu~Uivf9mM&8wR z4{FT^0q@mP+aK*zX)-X2?3b5vdGXpW3t&5judrW!FE78bUtYg~mwfx>lN)&%Yrouj z6EE5J%jbJgO*-Cw*-*e{#pCDnfUhrBep))S+ArVr zbS{4wzkFlAY`dP9-S&%LetFM+xlQs^+b`G4%d7UwRr2zz{c^?x@;q$6OtNo#Q-RY?R^Tu-e}sQ0sbwwmd4HA!W@9q_5>5i!ZNEW88#ix1HWAiP45_f9)a zsOSBNkI*R~IN#;ja~FX$5?A0{4}^A~E_S&I znS>JwBMIXP1%z3IIfR9TGQ#bIhX_v-))4+lc!%%_VK3nzAsKSqA?l(3@z)Qdl$%jE zdZ&Oc3Y0p2Ah&1Yi{Om5jDWR`IQnDWF5n+rhcG)n`Ci7w+Xa6D{x2fFYCR~z5RIBu znDbgzl)sp4oT(;fZ_KW!b;HcoUX!Y2i3K#=9HOb#WD^N+dB-Xh26v~VA-DVvjhZ_;{lAgpQvnJe%fo^^65u~&| ziIna1o=@@v|L(EBZyj8*x1jpNUAVl|6dy{O6dIc>#Y3ZcPpSOsC}bCvpC%=43tihG z=ezilGa$)bY5VcnVr?x{59FCXl|fC36`t6U?IDivEXq#XBg`4NN)dN&ZoI71_K2+* z=Pi2JVI5B#Cxr^9Flw9!KPJXF?}@*0p49R$@*IjkW-|wiLQ|4d&-XSq@U$Z8rFS=C zAkI2Y*Gu?itlX(G%`D%&_Dr$)J29tDeSYSSddwTY1>kbsad_Q{Y!ug}ec z#NTnClsD30cS_IIWou8w>mOE^Jvyf$FJR+*aUusETur8^<)#4dFnPIOzqI%EmzO{4 zmt+(aKW5GpPdWg#TF0Np6OO)#F~cT@x2O`$WA$~=Mww}No3SI#@-p*Xd{>MR&m!47 z#WadN-YUwn-r9bU8;PNn-DQ80w!bN?7q0Bs;r8FcJ4AC*&W>x-i`TQW8y^cheiXtP zs@a;DC8PtQjOJ9e`B9gYY9-yv5od^f9vgETz(3ZSwNJx;IL;Y>e+L`>BIeL7q{2mW2)851I&z1W~dSkUOyWZ1&*<%YR@*y6Rb*aif%_* zEf;jx(~?2f_U#8LQ=AnfTGP|u7QW3Y_%G33o6W4+hQ?wI@KHg0K z!Q(idHDkbVJd@i2#vB*NNU^2dWYEvgavWH-S+`sk3E&hmPH!OXMbJ-}D_k846{u}Ww zlAK+Uy|H!_Nak0TD7?+dNvsQ)Gr!?LBIB3L(6XMhxkR8}-lO%|*2Zj#lf!>Yy30FR z_WW6?@g`!Ntm4xVt{_(I?;dNW;ghnOo0#0EsH6YPx$_Vv_wg!Nn4#93-NfX6;~jQs zZJ6B0DUG&ba-X5PYdXk>vb6EGrzeelolsK&4dbC52|>*qY*>)R{Uv&=XB4VikB(9# zh05o=#HUCK)w1p}6v%y)A~fcSeRT;8@|rA#cCL(CCdMgnf{XRWf3{K^CY`3lW@( zVoSr^bhR+s%K9EQg;&U%vxyie$ly2yctJ^)L9^V%vQR#uD^-KWDljvci4Xgh~z+Y18C{ zvUR$;O{ekh;(VMQGt2+vytFmTpX%CVme(3m{&r`UI~%M0r2XQL#KF%o`klX8o}X~L zgOIC->T!=xuO0tq8zIjkPn!tYv`;iVv)^%aJW=qpL=}_s=1jBx9*~JqrB_W#&NjDy zDewBcx$WAco1Zs7ux4^)K&my~964JEavFbkR-w3TKh-{UX5N3pL84wyM>; z8yDmEXpR_7)R_@leP(!?bNKwC-b!YtM_h|4kQ_eiXeEcweez&=aqo$9_)P9*Cj5Is zQ;bj7Od^He&3KqYd#&*oN-^Uvp%~2^QoMolvsV6t{-5SH;M}Nka8Hg>V?FBS~yG3a<)x7;2iiPv%qHP^f zmBcw*hmuyq;G}IiT%h-sBsiG__qO@41rrDr9XIPqajZV zUq3Pk|G(fLXSnbS8$=g#V_oP2j(){QnO8XGO4;kP+xH z&Md=p7P}nE?thr}%iPM|uWn(B1cQKXFOP+SDxwh_eVB#*F)Li&zD<5SE&3z66~kAk zfxFNcIU3=4|At$*{Jm~|*9Pxu-0-PBqfE{BfdKMQ((v6ccM4Zp+xzpuz35X(o=dbH zLjE^vQ-w$F?%zN&IZ-DCGWiA0c4+wOK~;&>m63K@H6en`Fhdh$>&zi!tY(=-e6_l4 zU9yzf-j~U3lvH3%_){kR>uj`j9zp;ns3FP^Yl{0+q80Qy<=T%iN^^4bUPfZTCW%+5G&|{9C+Vj~ zX+{^`&%VEaOLd*}H76Q?hGNpE(eK2Gt>{tfgI#mw(B?)g|0r)%s=QT~-bCHEs)-Z3 z-AkYyUV@pB5hU_dTzd@1KIEX)NqE+>iI&uhJgAvh;qB&kkY*$Mrv;MS&d+mP!an&F zj*RRl7QN5jKYD(e_j-Z<_!KL31v{vt(6v>asClp6*;H)Zv?7TUUOc9gW3Sp4(+RQ| z5>Z{IYxj1^%bB0%The;pqxdX_zH7ASgbJ~>#}CuLV4uYfefOo7VKo_=rU&jk84=Of zDS!Z}5T3)o0)~nf^D!P@-mkMe0PT z1!~nCp(})7+MrJUiiS;UMqXM&5jR1>hHxJ)>hOCD)PfStQV_PL?0Nbs?Pu zcc!|0!yC9T5MX_xnXT@!Bcx6rBHFEL3|$xT!nvk7cU9PWgek85Zzg!pL1M>WTqm> zqlX@{x95EhdGw4hOY$L#7bRAi6S|N|=)}~u%IVR*1*yUxiAN`C)AfaEs_*ESeH!?v zVKjsbexQ`tX()m!{0H444(Z&QID}v2LU{bXpNg}tJot^1hx0bDrD~VHtDZon|y(7veMZm>x>2;6u90i?-`=Ey*#~F z*0EQz|4++cM6EX)cTBD)L;Pj7WoyFi?3xTbU$~rale%0>=iGsV=sd+RksSM5@vq5g z@!Aa7{AZ?Nzl_m^&3M#`-WV}E`w_J=Z{wTM4Z78_Df{*~-Rk(K+JZ70>n$cvn^;dU zv-zjjH~Tv@F5)f-B!mX4LkF|A9s<%x3*`Lg*t5Q_kDBIA`cPg!yHna$Za`Frz0sPu z4g0|9i=2*S9I9gr{dUKmBTw5MYs80zYMb5GMRcQWYyDM;4wfF*g2*?<_;)%f;F-zn zj&VU_61>!|3EJNGF%zQ=yd4kz+MalEdjtPlspx+)Nc`p&2gWaF9b)oyl{q6@=Gmof z!C23iv3kA~2_K{|#cVphk=Qk>UMF#Dg&17zqUA2WaMiKu$VaYnklC>V-I7Mdiu^sb zCs_G4>{j--;LIJ3R?7K1^c7EgB;Ou5%CcZKTfS{p$!4PYb?hh5JEKeL#2$H{_iU|f zfp=)zRr2>YpNz+D*u6v4n%+*|qv{xt3o+^#N6WO5zE1&Ohn!#jy++@L^|C)Ns~u9D z=E^n$a8|6X8~>4L2J&){IVRScj{+~CQQ0OVuCmRHf17<^AX%48$tvBQ=$_U7(Y)3O*Wg?yeop|MB! z$1Fm5W|1h*w2Law+|VKC$2MelUyAY!chteCC{h<2ELe6MRfz#0_a^)5rAMBIdTiHK(I(3mZIhFav5)`lD7$K|QQ#U0+AJMOM?$QC*PP%TA)6_l_*5c`kEt zZ0!Ch%2Ln>oT`efaY?k=dz6sR@G-&i()d&PRrRr3pH1sGnATVDkbBmJ(ePa{2+0;q z+^q=^X^HK9KI)KuH977eIPC!6Hnso$33yRsfpyW4(9J^*tkaOp7j~xMWBSHHmA?On zx41Rdn;5!oh}8l6P;_#B@wP`DTAO^|J5Qz&r#P4Z>V7S^^L36=FAleQqQ+$us+3T7ay9scH@(#$I|5g7?J-7@nvjBoGW>zK_N$*=*Lbx5 z`!NoJiTZl0O<$jR=-PZ4JdU)Z%Al3gwp zK1J8-E_))09}q)sy;=x=l(u9bj^f8~nf@iMc2D*@p{ePCjk3jl;-2u4RfKD8{E_}y zw4`=;`%s>^-Tt>0aJkE7k}c|wv`oP9DFo{KDBQ)mrQ06^3KY4LCs{PNNO2)_S zjG2;=L&i_GKTsnI3tgOL zb6IlakzRaqw3#P`lBY#4iqzKM1Ja@Vh#{1@J~VV*jFaLcOi2RByX=xu?b;pxs0JQI z>T#^~!(VdjD^g$0A-aob_Que~=>nxWbgVLjitR*vfu%HHgSr z^p2V9$4lGp6{2WjKWAVtw{l9JN6EH)%WmHfwm|BtR?9a)*lwqpL>gILyL-jd_%c6+ zkLMSY_HjFHrv0TK0J~k1B=RAqQT-YlwF^u;+v)G+c7CCATlTm00>l=}$=~13FFcgP z&3{2m{?A$5AlFMwUgK}yUb~GDjcI&u^2YiPe%$2GYMH-Cy~3&i`vz*UWs2DqW-q&^ zbGd6B!Fftt!fEbu*9M**o=2vYySfu*5-uTJN%)BHIYH9Z@pSUYyM(S?%+q;yo-_G= zSIlqE6aT>u^4%%NX-A)gpS)~hQH76c08#grfardJc*Ea4)M`H=YXvUuG zo9;&oy!L+dEViI1)B0h9>ZKh|GU~`7k)^~L7GvV?QO#j)tD!3a^8oJ&8rg#&RvC$4M_Tfv+2mx&T z5?{aT#kmf<`MNGGhNmgJ`2!ghIgfOnN2D$FPie0nAJNwsvRzY13%D+Ld7>}V5XFX( z{I7*ZS>tE)Dw!EDlDitv@B%%S?7XxE%s$`60CTJQ?c2Jx)`z(nJnbPbve`TCRX3;N zpazd)3I2-qiII>t579scn4vNMFwCq&aI!A_gTstC!SpJ2zBdKvZ30ID=vwl$2~glE z`Xjc#m%|zVHxGCGuZfO7=3C8{XVd0>z*I5gf2iil_-pz%Lyi=aQp8Be@l~}&-O^7g za+~usDi$ReqbRTqN*a6R(KwBx^llsaM&DlT=o_u>tUD0jl~H%;fY7`7box;GMosi} z94{9Cg@4v*w9oc`XxbNlJ}eNp%6xd1JcphSjz68E(wjTGeEp+r6Rw|*fj9Q1eGR-t zgl79>Ip;4!|9hV-w_MeT)5mveF=?9O^uGzH1?C@;EAAPC`Et1Yi-B>t5lxr~NovXO z56wh~QS|g)&>(HPH7GkA=sx4od~_YMgLLw)0kqk#m8+_@)#f*DJQms zhp=kpEdKs2z+i6LAudA|wSbZ8DbgZ7=!2|CpX2ZIz6Jja5tQ7(_jZ<kzoh?%^X^J1z92r4`6&wY|sy5s;kNQb6(n2}o9{jzZd)Q-|jCzd4!|-;2_8 z@emi{F)1WQ5R|T7yn;UEi;_Yp^#v;_!SS(%?ZgSXmELZmb>I%j1xV3Dd2@!1hPUDG zvd44$EHX+`Lr`}zT2sfv%hm3rVtBPMc7075yC=ffZN-wV+Oq?ofX_687<`t$qjlD9 zT)u9P-$(hnH65KL7Kg8U#+5eOSU{#W(MGfV4-{?m#pgEKkHA>{b@J+YFnkPtJ2l$S zD8HfU26FctyP^MwxNiZ7s!aQzfe}U>ol((HQ7N@ltW>P9QG@V+W#}LQwS`t&F4@g= zMlD0J0cAX%vdvnztGl(kR`zA(mX#T!26#!)+`?=V%km|tutMDez^xtg+bCHPzkLUeuw^=TkiWUTe^hd7hu=oYP35=! zaTGIK(HWvWWAL&cR3MM1ivOYmHWVzs-ulzsx2a<^K2D|8C?xPG4GoRaZlsAmMk@Z( z`nj27rmXqW33-k4L*+F{J#inK{#FWZ@AtFEl?%76gsl76pU$Mvf^P&83^#!7PBP$F zgljbJV?VK;>)s`)03@3eR7Gt5JZhfPYi`kj& zKIat0@9$;08{#m(zjIx&u&hhh135TFpCo79hfXI;%&zUx1*Mc3h|{0E-XY~?F3C;$ z%>|0SMhkae5 zR>wGCMlH+aKJkk^%RIj~DKz3Dp04ixTo-2~U5GSymdV6DLUUi@ld3F6c~-=I6FjF& z`MA+O1jz(NCLRS1&=&Nem|sV0df^b2vweOaUJS0Qq?}qdipoI_X=2VHF~8RBg-xPE z_5;p5@!mGKw@s`P&tUy_g4S1M>GHr6O_l}{iIfvXk&B)k(!1eO$MpW8f>+Cku-#0DxaU)$W<+QEZal`D?4`#7j z-dCH3=;MwweyE%8rFlX5%(K?NSze?fV>a#<+C|2H&Q_4|zep1u8P)p9`w`lV&>eC& zP@_2AGGV&el>*VWh`Wqtps1?aLd>DL@fMk1%}ft^f0TzH_vMuZp)0riGRsJLb+ z9kvmP8aMJAY#B>Kc5=i*K`+Yw01}oy^P*y0K$fM@Ewq`CK8Kc%`@wzJVoNfcs~aj` zKDslqt?Cb$N0 zBY^5kf1JK?zwY9Of2qpWm4`8QsP@LuxcZ--7;<8>pB3RKb~e8=H>pj!U#&QKISqdE zQF9059-K6;CsAi~aSnoT0ocS(KpJ484@SkWO#m&z3*;v&%vfa8APwO|JPH8n_>QK~ELp@ta^C z;6VWIpCo=?K~nQMZ5|iY&#h&DB_e=EkX-p4iPj-ygz}L8X1ovQ;ye0q?M3LrKII3U zWE_M{gCybTwP7NCT+qZG#>T1PV!Tl2457{$pzWN4N(n&v?j-cf1vsdTF3y3Jpr1ZL zccPFyaJeQ=J_LoGe}K#cwq<8wW8BPR__!JHK-cb`1v2@qqB=i9 zE}?M%Rr1KJ6jTz1|I$sE>`7qgg(I9iBZ%>U_q1GGVOR#hAMZ!d58uolhCQxI7$uTz zsd8}>&`i2~d9`Q*A8U>Aq);JY-vKNxr*@@hmspp?EHq(`gIAg?VFN_oVp;IesN0_~>F_5%(or698vo{hS z-@^(O6De;~3Ni&OkG^bNxVvl+*d!WZnDtcjPfEH@2SNHMc6JCC`vqogrImDan>+t=`clL4R!$n0&A1d)5EV) z1=faz3am{v!F|YncH(NVlp2VoDR#p4vwZnP)d9NzB&>GoKWazeaT85k|U|Y zYQiS!ELZoy!itDrF$kgcKa$6#y@c4`I?zAV2Y*ekP*JmG zi#=g^6VA%~%H71L{MHv>u>g~OZ_Lx~`eqUvHV-H1b2zlOu581R8m3F19n&Qkk#&M96_p4G<7zo6H{rS~yrFqUCADnwIYlw0zC)-}EQ0 z>8R<8ll~W)zJqTefK_3GK8Y@cI5)xCLA>r)$R#V}e5;&&*>KVEdMY-phT7rymS zjJDG-=gK+o9YgQAhFro2#VEl&$cQiR*;8`Xnr`YxN$b$41vb9lA;x8=!lxxl3!pd0 zRe9Z&@mvg&jIa+=*V_<&+0Rsa;ASM@Je-WNPdiK9-UUh0_{X8Nv_n-|qH>aW{wJ`# zpek)3(pQbWQ~tvdV1Zr>MP_t%I`rZhj3CFoXv}@DM zWP+Zv<_pY%r^W}N-z60W+oh04yet^D48Q*kI2{r;F0I0lGNHntrdOYo*EEFFH+tR$ zSPP)Guizj=#LZFb3cO><3VIGoCi3PV{~&fS#dsROWm2@FVg~?j0By`LMOu z2O*0blls!$B4^0nkQL#6cGJJ8Tb=DnfMNaNZW=@OZpc8ai}st=vb8ugkdM!>>T_j5 zANQCK<_UaoJ?Baje>m+0E%^0|hmVnqi~(XC)RiC7Xa3p(Ve2MR*Q3C2BcUIMt#eU)B8n$N zIT3Ute^X-rf&`qhurFn{9N>(&8xj~7$9ZWy7!j;nL!;XltzTjyS48AIB-LTrj?hY z?r7!E){s^XrdE#SF+*BuqgD~Lbc`T{wcVe|LMI5Od9Qfw3MW62S zJ6Nx)zQ9_T|3@st!qU@s`}4$Rb{#&`zT4&t>5|K+O9mr`duO`XoX1iT3DV}I=Uyg$d%0ZmU@ zxj&J*&yT67tFu>l{{T@)>#YbUPlY^}bEj$gC;5uqaB|Vi((svD+h>BnXL3r zA?t%k)IW&GyNJz)zYJOgehLIa$3SLdANy9;=nt6&2(`2|X5)B`yR}o}e|$piemGlG z^^_+q{#wL zq`n@Jn--Y8c95aTu(i)+!xw@B)VxEaDLMFIm#eCP{LT;(q*037KE!=m>rTIw6Ax=MjRgT_O(s>4ei4gRymICLkE=!?YFfT4hGe> zKE_S8cGT7(7xA%7h}2dM+HV%nkx|jUgPJXx7OdINC$+d7iN%&*$ZOU&Qq4Mn6@8=h z6fk0sgP%BoW^BxVq%(DC9nI^~FH&6~_29BN*jJff_~F?Gh^$D(H>~_oUY2OlYonam zIgv7pBFdk~PS@}9!=A!*hcKr!;x|o=oI~5##7;HgQn}Q`NTn)GSfFddPV9*yjZH%e z?~neGGYeyuONsoVVom?ZqeP~eU9v@F%|xQ@%-M2H26Un(Et%~tR0l+^N#Ib37%m(w z9i1ATm;)U2iNA+%P@e3%c9M~dMZ5DicwAEC+QFVK=W+e9K~(AfY0Vj`yt32w+XbWe z2oCB*zdd#3mq5CLbnccfq(34dM(s$R?ch#iD_ZsA55gRTa{;nR!VcK^I*i}ZML4#h>G@ll80sjtr^v_Fx1RtP<@>-I4?=SKKBy6{NNI#+Jic@dfw=$o8%9rVqo=kvZ98X*&H-{f9FUKr)R zxov{NNv!36!O=v+Qv4ICjwN#T!y;uLK7#aYtrB@hsWmFhm zxe_)8GAj(f06v~lVVEr7>>hA)7S8muD-7EKE2mZ%HUPc>OuMSW@Btv@>I%bKfV^oH zhNFPd*Hjq(4)_jmUrvR=2e^28h2d3zc?Qw|o^(_g>H%-&Rv6jSK7C~1k)cQD ztP!nbM|c1<2$PD95Sl2q#Xpzmb2^zmO^O-{wCrW2~wl9?vZ?kV02Lu@Cb0A>y!eQXvIP z^7c<7O;p|4pgaYHTi|cWhTTtOqpm@NyX~32B@>``@{380zome_u?YW*5J_;J165R2 z5$;7<&!Ozk=rBde_)m9S+@X@OYM-E_h3wn;oLW=GeZ~a!6F%mbdSME1;ra=ej#K*U zE~M(Hzc_xW`nI?=Cz046H*?lg)|;;X_p!$zkV9uPZrq2KE*)Vgd@qe!H``3dS&Hqs z#)YMm?QkI*8gRNvDOxQ%bK02~tY8mOV@O9H(sO?r=?#C1a$lF{kU^ znu>1&D~DEp;-wQ|pe zD%Cy0t!7hFVGq{>IhMuTN(bXlHzimb2gEyPWnf3Fk|t7!omI#BhD=}nHr%D(F~yy$a6F~U;Z3VZHp~iVo@<=-grCplcehEGefQlk>q~qvS*COM4}M_hMMdW8{)M z9^Zg}1h_Vk7C~CFO`ZH-{)|_CnUrl-RQzzEq$)1L5RGcQFuIz1$_Ujg>Pf7qWwMB( zLhTr(ki|-*X`d`;X~h3R<)c?_z;upPvh0+8=6zJWwd~)(T18O#gt&4ek_7$I zPvqgTlK zsV~t-5Ax41gp3~KpUZf6bu9nvZVKohWu>F}{Y4uTX8I@!GmW3h&3>AiFkSJ*3s=6d zp>HI_CsXn|SH9RWbICN^lfLs3ug1+-H6?FJf#hzC3sxBfxvny9rl~K{TUWsHHiWcp zKU?eO*>(%66NOT-I=Y;mL!9|QzFT+W&1GrjiA$Qw+^xn%5L1Jv;Vay}A&W*sy`%P4 zuHLa154Ud#39;cTw1s*s>WQx{^4DfOu!^2K$%}rnt{j8&b$pz98&7J&1F85P#gz~y zI`Sc@`a*amt%u$Qit>%b1}_2c=lqd&IT@m1Vh`uo;uPSXVu$-%F00J5;vaRl_tZ*K z{ek=_?i0m@*b7+8UPT6C+{7N%vab-R&o2&%=xYsq)f|yfh7GS!Ui;W(PmxmtYuU|| z-#%8{yA`4Z4S%MO?Y3Hk4H&PRS>3+77WUT_0ON8fL+t8p=t=V0(HvygQ=%r z=@eE;;VwLTH_UiK67?}F{HesE4c(~?uVMXxA%Q@o$$ruW7uvjz7+|%Lk5GgxIK`FQ z{2+g|sjmz0T9pk2T(Y4j$GAxjQfoZ-PsO%-o-!6M#y_lVNWAfrKXN@L3}^H|eVjRK zC~PC(uQyj1-ox{Az+S-oTPh4c;n@|m`Y?Wf1Na#*9PiT*{sce-%)>kWjAZqK%wHIA z8AyMyTM_t8Kh^L!gDKvOKORQ^;GBVf?50HNPVW{#5Bd@Ir(_)rLjYvhe)S)81o@xM z6f(c@&1}1tquS$t6XD(sa*AnqMBsln$zN~8BZU7w30ejJTQ7f{hX*LvwoYaf$5BJP zX7uEwdk1H25t$=I$2bdUk4=26WfR;O`#zRAfwPGol>0vRrInZE2b*v&P4GK!MOZEz z>VlCp66=US>a^_)A@!YzrezfrrQs!f&{FCi_B@n6f|QC4>!ZPd0!;K%fC|cYdVLII zt`aWUz@>F zT=V>&I;OQUU7R^mbxwuhbv(BN-oWn!JkJAs2DlUu=?}OP6GL>S{wcpr zhS)A~_)~)oPy^xw2}D18hjM9l3|iqcZC`C?CI6 zb>-~9!86y-@|vz187*^L=h8QT1|xQLt-37GtTHs^zYs0`n$D%aJz9E4=hBaimfqI6 z^bMHjBe$QH2pzLtG7K9r{hH3Dzdc%d2c?g^Lj4s}k83dyZSOcfshq-n8Q$)e@r>b( zPdfz&`(!+iafo8jGQ9n1ukgP)Yq}z=_4W!w z)?BR9kjIaJggbC=gy&d1?*+UHI0+bgC*A?C0!{+PQe0w*c>WbI6u)1_Q(umeR(SLm z8*5Tmb9hr0WnBy=nttNq&0V{7xAf>~;)^TjZ=k&t-P9WqO|V@Z;g4sL5c0tUi|4<~ zpKktfHzmmD%}~bY_Oc@4lyWv3d5gPs0iQ><;1OX8s+YfhiU%pORH~cY@tA}$35|C0 z#Le`1A4_>CY>{`PiF4Z9`K0o@FY;zx%xS4R<-U&@;&@rVfGYv)AHOdAbFf;nU5flO~>dFvcKRR$)iy9EDGP zutS3hCh;f9^xy=+jN6>XVPJuppk6$aEXo8Id96~ygEI^1kow!7-+`hN1h`qt{tx_0 z?l1>19pyTc>@_G^Nd&)2$ipNaXiRW#H#J(rzFC&%&Lk&y&mub!j;e(wYuRS>F!3z2 zQR%DBu_~R}4TV7a z5BM}Hqg0`IlD!-9&Ka}3AK)72@Q+3c0?TX>jiXrKP`%CS7SY_C1u$tn1cI>x78fV{ z+8kyf2W8e*rVZ3jcIM>2lr=xY8BsUcB+xAwQEm_`Y=Q}mUl|sEdx!DYgvB3+u8NpH znn)%}=0TnV79RKv2EFd3I-_C-y`W#aSk##W}mzzQ>s)8l{@Al$Hn|%+=sPu$)?O7(A=)nt8mc?Ga*8J8;acgnf=MWQs{1woAt^m%HdZCDU0-q<6!+H=RdslT25Z@7k7( zZ`LW8OVPszq@?BIZghZ}!5}4r2f{OO*x>cng$%Be#;=e}xv|?ZWYphYq*ce~*hYQ@ zG$o|JF|O!xFZ3%-72dB*ND=#eNO!*?r#Or5mg$|0p_|1W)ZeMQ#5|j{Ai4ZhE}UM$ zB3I>T+?Mglj(lMY+8V9~_>kqxcQKO_NPNtD{J#PjF>N=0^4@pHCng3Za2~TM7FRVPXMw zEb2QR^?jTWq}i#G%Ab{ZFDXMo2txIsvA__B2T&Pl{2n>c5Cs8>cp~ThN?jT#0U^C) z3Sc~?hVwKk>Rj$WifC)NobJldbbQc(xQ}4uVt)uHlpkN@W8Lw{fj$EM=KTvs_!kUg z6CRc^e?EHIYReoAc>@R=>?E;*Z?P|-i>pF>0v)9uEZ-&W;Dj`h6B7J{b3!tMkdjsZ zQB?oiczvv8gOQN8!5pNftCVjs_=axc)O3jw_ALzp5aIwI1YpBMI3PpMBrE;dLy1?V z4g&J!@quy>4x5NzAWBw}b&5cnDQSEyxC$5{tzCBm5s_7rlGXMXc$Y2X)oXJ#0B?z? z5H*CT@CGI(Cqx6&slwF0ayhX)K9rc(xd_o$iQh*UpL{vKIz9nGe8q-bkb!glMgFH? zs1@^l4zw1oAAS*+uF<WnY3;Y2Y3V0lJ_7@!-t5w@)%?ftSe6v1@2+TUvGeiP-_{V-uAHn;1zaqzP&HS zFfrEp;9f*307GDd){mr{?ea|s;EqfY)_>JV16c#JmOa7AF~R{J{6O#`|BE6Q6=Ug? zKY{XrF|eIr3dM`pK4~nrJocpQ#RQRu8*U;i`{}T%~EgrXe*ye#k#v)k%B5MunQBsIm z6fSi5Rc!YkJc|-Fi+vQy+XE3bG6{p}I9)RBzIhSXM$k4q)}2WwB1#tzGOli}@`OX2fDYp*B`% zYIqoUDE1LEP43TQ-9N=z%Sq&Ou3;uLw(8iTY$Zlfxf;j_NV&Fsb})hhe+Rc`rB zRc^uN1hz4hD*HSIe1Br}#E{I8UoY$k~nVM}Az0x4%RyJ%9p zaaESh?@Fu?c1pr#zbnDP`tLpCFI{RgSl3qKsLkPD2v5eF9V`aH+qdz>~4gM)5c4}+Ts;Bl!tzggLTV)AEzd3 zrJVKd5+AD4;t|%b5}v9MHmnk!t`J@jg>@d`dF;ZinJ}{KDcV>qY@)>M)yv=ayG!bA zDADiw6kqou4+nb!!T7`FY{C0o-McK5qBvz$9DinaM!sUO_H zPS4?{=6CS>VOg44nI?5-5jy!Z>&gO*G@njM2F<$i7Mzzs0K@QCoU_BP2E=|APE-yi z%xcK3x{#T=kaS(hMY@nAT}U@wh|jJq{VQF_AzjFJUC1U~$TPZ-)w+=Tbs@#NkOE!E z6kW(TT}ZMnq^B;V?Q(6~zt)A+=|ZY>A)9p}f7gYq(S4PSsYdtuGwfFj~%M5(%*C;7Z20Mc~@7-mqJ2t%(|bgLai~^Xgg)7 zj?{CLwYksGvBE)_+BgGssk-Vy-V73?G9>@dO%JDLf+Da{7V<|m@dSv3puG9cmE)5eJ<3|`a8Oi7c}``!^gh-OGG687E)cIOrU_R zzEKaJgS8>UG?ge|2mh#zW6;IvscUdsk~Y=Xx{#W?v~m8aL%z+rRNvpD zO|?cB=c0MqI1jkAAz$n2Y=*Ck@LoNo3mK*>Yo-p-9c9{lz8$Cy`BWG3qHZkAE3~Qp zsS9!HQr)5p8FQ&NpKZ{M3U6uCDs9N+x*Cqqg`Cp$;q#(4pY5x)A@u{aA$RZ8hCEfJ z4e55hHpF+GHst(=v>}IdaSpE0#&JBV4VkQ~p+(oy0lGLfaPtM=GBHA)Wun| zT^pyTt`&C%7c|P$^2E*BREu>v7u=zZlc1|}j4q^7M@@ruIa}`2=KRxQZ3xqae54DR zvP_%mHC>$bx{!x-ArI(6=ITPO(}iT|LdNSt&eMh1bRlOJXp~{#LPqIA5_KVQx{wy#yz{v(q*fR5Oro|Gt92ox&e6sx*2U?kqoygk zIK7u^^SMdVhHUGn4QbPr-mR}T&bo4K$cl;DknwrikeNFE+#F2BZK2Z^=jckvfC6GG zDhz!A7XT&zrU8lo_W+gy9tHdZ@Frjv;0WLwfFIDy1DR34C4g+e9e@(R!+^g5UI)An z_!!Ut=&=fVM0j2gn2g^Jz%2kLUFI2`~;Y1yBGe z2HX!=4R{8y39ub-2=Eoa2k7)NVEZ|kZ4#0l^CjhO0?rSlQfQtbc zfIPr$fJFcg;7P#CfcF3g0AB!p1jIj9VdxJ?0ZanS0Ne~%04N9i1@Hpk9l!^Gqkxlu z*vCN+fC~T<0Mh_PfO`PT0gnRy0eBOz3vdMR4ZsiR^%u|s;1WPK;CjFvfD*vNfWHA= z2fPpX7|;Ot8PH>0g<%L_EFcq*5BL+{K7a^#8t@9h3-}Q5C4k@W946OGQQeus4psDz zxZHAo;qxSNX>|Gi#@&>RvsVjDZWj-ygB=`ZPap4KpHHT9;uc)dz=DJI4WX?To20tc6f7=D_b|JzX$(Ao&X84v>l#m}fd1V>VZ0 zL0e5|@JzQM=ZdVZbGR2?W;%S-kDD^O2)6~CKcarckMdLfOP@6se_HvBk*)qJ&M4n> z$^W81Lh65BNd3<{i~3VKc5>MJerg;ncGt7xc=^?hxvVbGn1s;AsQo=c?(e3;;-N}~ zTX~n?Gl{yq30F*TE{a}iso*{TqtfNaU=Y9qr?W2dDoQEYWUA#13?0n1eGj7-aCYJ! zBMEg5cDygIKi!53buh%CnC{@?ah#7wJs%GykH;}S9(D3~VC0zd=Unm`0K9pDS*Wt^dj{;pBhA$A_#0^5^8+DxND)xKgozSW7>g)zrn9eS4 zUpH5e0`^)dH=PWnu3_9oRqtZeSfnYna@G!9QrEu*(|v4}9B&pbgYXxWbZmu`qt2`_ z7jf(!)Z*@^)m8b3-%xoQdXP`K%-@s+X@TSVwg6(p#p?{X5MQ_cDWjiiP`WJ1;OrtU zBYE{-CvGcNV{u3=E?~QtL8PD=K9#{H%+QYpmAhNdb;ZouLEQxW;9_^#!%i8}owLOp z3v2CrF;5U}RKOf++^w0eabDIJ4ntDtWY*RD5cezq4Rz-L;z;`o$hz@l++xEff|)Rr z?$l?a$l%>NjRy(ut{8y}p$RL7;a}I_Vv^S?UNaCjm=eiknS3qCqY!b-YZF({-R*=G zrT7=o{}nMhMM3nb%BWLG@*mnOc1=B~csp@I;*wm9I6!q~_p$iy2RycbXa-M!`YBo{ zkl%+oKD?qVfKs|VV2RIRz~FM2T&hLW(3f@Jdb%5|?$)~^OZQUm$k?ge&s#{O3$l;6 zg2zQD?2pBYSJ^~k9?Z(XV_pFSXQiBGNcez@jK1@8zbs=6kBX2l!enACCqoLM9!jj` z{VAk9$1dF8$yd!{9L#bjS<4&He-P>N2o~}eLly`^Ealr+zhk>pM-rCk22=eD5~NIM zOj=mgx`3tlxrPGvF}JCkBsND+3xN)CAX#Y472!aO9Meqggr^u(zL#rA0W7uVIhgTU zT#CC|Xl#m_Veb;ECk_8SVpG;5AY0@ByzDTc>zwEr-TLQWe@7d(L38>q+yHWWeF*|I(x zq$%o+F4KfKXC`v$;-2hxUJfg`xN<09R%lCu{1S@EkcFH*3uF&z<2VoZm=1To5aq}) z`?D?XDho-{zJOA5nLUTsbk^(;fn~YKqmj}rph?=yh zDiDzMDHN9^dP*#cKg9}^&RrU!9bRSzvfKyRq0?2(erWd$(0UdM%F@7>m3XP{0-FSA zN|&1ZTgyqfX;qG`Y?o`a1jbl-8n}_JlyDB@hYLy5;HuHAaP#L}>~gIfUlGvqr8#?* zLEUC4LfyWJ)^eBpgQG)NF>^esim@X(fgA7za#BZMlk>TTUNddHDd5R_*ups@4Up7L zEB8Zs-MZEbR8Fl#`ysTowh}@qedpdNn0HOKsrrfIZ5 z>8XvqKyR)#`x$Hb7wEXs5{NRC@53+nN0V}(C~aeL>l(QH!j7=e%2UDiTg#u~-{eYK z%O0Y)J?w+qv=y~bMaeo##}&1)=^L6*Q5&x){Bh8m%VIy{OchI7!0!AD5*^}<(d=XQ z2zYuOEjG_J9ny{yYGS^|>+VIIP$yy@Q?UFE4o$XvupLFTZ-pJLLm;y~w*IWJSj54f6Ph z;qhCXX0{)&KKMF@Hl=$?pMpYfYZp@E_^AujIG|y`E?!8oL|sBOIhK%YmzYZ8(Py03 zN)VmSGD{G^%cujh$spM;PsSlg)Kq6d+XnJ?8TDdTA|&rT8O(m#bx=$dmza=pfO{Du zL6k-HZ0A(YgxudH+t0X|m?~x3AQarKAgK5OA$h^){k%(TttS?GAG1C1Ri0^{Md}n8 zP#rPDu9G5SwJO6_ogo)|rA^F8^jw+f&NL;5us1H>LTeH(izjA{kYdH_VA7`hKxPNTSZXYf=~+6OJ4W8BiGm2Jm6$@OG?UfwDcjPNGdpE9qR1yf2+=HM zfbyET4BqEP$OS_xsk!{1wQMAK0VJiV*66*|T_h>m6U-1@Ofw4vhP%33O|A>T{D&3~ z3rr(ZX9id=*RDaw^E6_umvu?q?qw#7vA3~n>fypve|KMM<>^{+f2{BH0kOKzVR4Uj zV@*GAL%&pC>S3`Oug`mXcW}%&3CQLOsbEu)c+>1>HS9d-wLJx?#LommF zG&O5zZR2(^Hv!s-=(h4&n%4!(ERStmCGCmKm`E+NZPo^mH98c~2txiY90Vf&4ZwnVEZ1}SWhu+t;d zNEEnN5;j75i^R2ZY+%Teu+>vi;Sn}e36%zR>^rd6I?vM&P-f%})XN5w{N)wsAa6qw zZ8%_1mDsMKu^V`;@r4gy-})(J#r}z;$^y-Vr%kM53qD3}B?)k54R>E~4{u}lGK4ha zmn5u%zLp28BUEd>LlSlZ>K%U9Q&MJhK;8|x$Tp;IcB-4~!39|sI@nJqVdXXcMyE4g9 zn1|laDP_4A$<6tOP&qIJP=CghU1@OMC<4iH)~5*da4_p&kH$b*yl6cfeP_Dgy$Rg{ zr$b^1V%Snj>X{1_@cLuy)viIJL|>(eX8V3@2|r9Zu*!J3sh6uuhJ8O)#ZS}6#%|T+ zJPYc`{CY`BM<9yJooh(hKG#6y&BP+R%pnS;kkvN-Cmsv!GJO|*1k9Dn7bCI9wHBDM zwpv(6c*Ne=7T#^_{X=qxNfa5_`;U{m{MI*o5`QO8+wK!)w&}}VkW^fY@ve|eE9aVG zcQ^{<>>aGE7Ph@=SP?SD#4YBm0|PbEFE|p!`j&ps5*OXUu0r1O(i_MP1wI?Q3?W>a z{d$%9m7Rp{k z#MC36av~v24!Q7GE5OzI&Xj5lo4s!Sz~Z&2o4mocVZ)(puuFE*TsHC9u;yNj8pI0g zfXSYT>oV=1xi({%fr_5XL}9&@vr)Vx4eFbAuQSd;=N9N@h`QE>zSl#`KI9$D8V3_3 zQ2Nh_T%dIOF#UPk@+ML%4du5augjH>?Ijj#*=bOKC}2@UN(|`b&GKW5{MbqloVvl% z>ZWRrdlX=`S*v-M@Rwe~8mleaHpjZO#@dTxI#gn^lc5sBd6>1A6q z`6S~v&xg%l1>_>6sVaQ!OK6xg%TUaIR#kpfyB}qD$`@nOoLJp?a zPdz!6k|ft-$cSALM1T&dd<1?~3mYhcqgo(I zXz&91j*(gK$sy+&)jSe?sV*OlFZ2rol8&D&_H)kt%DF~b6E^6TA_S)=l|vrDRfo=? z?5W**)Rw1F)=Cf3w4n4LEd(4)`1VJXYsSbDgR$DuZPs2w1v)z&qrQ|(8Vl=4eTGm< zW+~*?;*}>pL}Lz#Iki>7PJ@Rx69`Q`>2-E<1eTzsC3_9dLK@D-Tq4FjXg-yL2aUah zU3!cf<8omIXU{Uv2UEfEWUsmp$fhFN!t2xvLo8G%EfCi6>O&`Bgu8kKp?!JEFRByn zoVL^t*liPJ0)h}ZuVM7sVW~v=YeaQp0*TaB4%Yk2n?{Gx8>0MejR>@(vA2xPbId(+(I0N%!J)EBDP03`CHO)uGDZF zqDc~^Wgp%o)7;N8&2g%=lCZs&=4t~pM@twLW1RS{V2lYr9qjd5PIL4kBA@nXE+HhJ zVQN0?`a#8Au7>L^af&-IPC;! zjM6F05g7G6x?QEM>hdx8Cii^#6pF_4zz;ur^fQ^>`lA1!k%mPf(c1^hReGa5h~D=F%Pd82(3z} zF=&YmBUqH={3Gx*y-KJ>7g!o@1aa{5uskKV{h&R<0S9~gznu1p!f5ZYLn`g@`f=J@ ztULq4_q5<#YDrLfZGZ3f}p7Q+vPk*~N zbdLVW)Lc9Cmsj-r(qHNazmfjtZ}?s4FD3u~hW`2-i9~-nOMe~x<)8R9^!MJQ{|oeY z`6m(RukV5XHTt_|Tm<^NED#up{wC_?KV|a6bZ0HYE*PY|6Fev4T2q$p^hbG?q%fM@+M6Y12FX{Z!fJ)dw{RxE zW)~+>dg*A2q&Z2QENHsq`LO-ZpCySlX{JcI9u>JEBucv*EKK=6Gh~WPLZO%<`RR#N zPU)02ET+h{7y$atQ!O_49&uaYR`5jI7RMu6JtiTJJb z9+}>Cu-Cp&Nt9+{d5YvyR_H8Qek;DwMEM>nCvnW7iL&3Cvmn%)Xp(IFgRBpY`H_ml z^^jCfqmT2Ik2rlU4VxcbAE@-nD@XGqubbK$s#fSM>8?z~JW1qI-aCAq`tC&ma%^t` z4Oyg$ffS%s%#T=%S_<6u1ZN7JcH@GAUz{fvZ$p<97uVs|W9q4pTMt~O-cYmy8lkH7 zz)I%~F>vvn={(2XT8Q)2d6q_-gB5kBdty38O@YBCTwV_&72^6c(AQbpg}&IEUA;h} zTQKCfMz{fI3SOQ$Ifc^J09OV!+C}G(!E-q#)t}CEqslmxPELUE522o7`94?Ol2cB& zH4nQDQ~LwP)455mLeYM@x*21EcJ?K3*hgE;~xeswl;8J{{B zk4c@ZsXUR$`1yN`2g!o`AB;yprsiDgx$`<|Y)9jPi_#t)!w8Q z!bj}}Rk$azY$@g~qpL?Ao9M%ueW!_5G_z7GgX@~kwl_pZ6^lyhum&3Us#q7e`LsA-)C5za?@89hR>eEO!0I^h=_q$9f(Tc;~vvzO} za5=7TWQM8AIs3|q+Gn1UF*$_TWO^eTsxYZ8_E&i`i7Wo>J`wM-hYE?hE50+un>viq>rDEC{-@5M7T3v0O>8;Z_l)64Y-+*KDS_l-t8Vc+46U4Em`hWkbc zhW3igNFh|p7Tp~pP73?oYy}d!cP3G)2HN>k4S;x-R zR(yob zUNViip$d23iMYvcxDq8H3dsde4J+;PPLxKti_JWwb{4}3FH~ws4hS~=1lq34_O+_h zA>e}E=O6eKP$1rGw%==UUgDl?aE_s0DI_xL9Ii6%QKXuXLaGT?YC}&~56r*kUzGw8 z`o@^lQ;2F+qh2mkF^S!)(+lwnvj0a%9FQhW5~q!ZLJNC*59Aqh5@8*UZ}XMLoui%V zK0+MY<{xW@^vf-@EXhf#5UlM)PYOg&Mf6oU)>XBa?{>{7_uqG0X-TrdTHb?@ufzuF zCAl^Z@iO;UXV{mwU!Y2Wk0y;33w#4OnE(BwxE8^IM-q%I^KOJ)t}kf{#O2^)m68e8 zGW>qK&v{iDB-yw$b4dcvIuQ+3vR)N2>*v+16T`Dc?;t75uf70^Pt;vvGnP!(J^8?=$lA>|lF#9)+>!WMtCjiC4vE{&yPGXCl zu!TfuFqGmRnF)(=bNgdhl|hBPkD6Ix_=qa_amo83_%Q-6z>hmPex$aO>BUhpjfN&O z?h7BP_R-|nJs2i!i{M@|blBhEv zE=}}7+@x7y3)|-Q}^Y`yo3&DNpuIs zoasM#2$KRs==BEhA&e-&J&uHMk7nm(WxJd&Q_qEE6vTzaYDN)o0nHz|L&gOX7-va% z0WMrpcEt5^T2Zo&_#qJZ)}ru!4vs1azw8Kll&GJ0i-YyJTOQM}ngz%7v&zsh9j5Dy zV9d>kNi2bSf+ST{eiM0qSO|=!5j~sv;mWeJqWC_Du2Osk<_Bd=e^$mcj4Xp=`ptV$ z$25FK5Xuf>O!c$D1AmOfIv!WEjXWD3i)v7nGm7_ZgIfVj7( z1b%orp_9?Z20TbSzK!c-_?U&>T#)XcJF= zwd3VMx^QKmvl_1#!|MA~2lb`#5^#JA`_IwzJ-O}YiKAx$TZ%|uw1fDilT+lV93eXs zf6`gT&pf;MxShw45C z$}kIi=Ryj(>oQDe`DW41%M=8jOUs33x)y`&x`>sG-+KI|s~wky$l@ZieEm`%`BvE=1Ku_ck@C$TNG%}rpRjKd59 zU7c(j5S_Get38Xb-hzRRM989Ze6T@zeHip0#gl$lG86>lr8IKDIEy=xDYm)$=8lE- zCk_mZ7+iJQHb0LN8mF0U%u3;#P}ej?vg%0ps>s+b}?fv&t%RFB&GYxfNhc%btK(T1~j z8apwLtH*YQaD+UHsTjwvdt#7R?H+E#QNZ$J^e+ySfYu5F)~V+rQ=9*Bq0$hbfD#KjdO*3~8Fwl>#^{2&EPjC?Tya%`&CrO> zv;{~a8PU3m@iJNTLCmfyjUcjxN0#Y_$YZb?nO=ISk@bWVh)2W|h!;jlpaKigQW7+~ zT#4wJx!1FYE~dUu_GBiA!Z1%}B8|fm%WTgA8)s?(EDP&jw7>iyL}jc~YPo8T#a(0c z^n!8@L~8Z?(`uKdJ?il)$5n9uVPbw)P^mK5n0!h?IBnNin8S zT1qY_VRL`B1taC&j-fM2nI_K=&ulmaGmG7b4d;_%sXY5n5EN=oIq5wUgUPrHA~a5P zpD`{RFxMoR{!IlzYATP7N&;icAkYBQxIn0v<38N97tPx`7XiwH?>l>M4Dze7lF}5OWth;LbmX}_9aa1*T z5ni3e4R zD$q#ar+-13f5CXxFuMh-PaCmkp$&{qKHX%mEqKe%`5m1Wn8DNI;TaH&Je#DU&V|mU z71>IS*mcy96&kub_AhVYRuPED<4Qyj3ow#672Q35wDe&5g_z`O7M&+PSc+e>J*#<$ zSmo#MN@Mu+0M9jD)*kgML9%TS)h!s&ALa%+ZN1RF6s|BX;I*Slxw=6MpzZ6Ue)KKO zeXRlGWj!8!-%lzUbpmVh)FGbTGf7n!-1Wa zRWNk4t7?kT7z>rxMX-YeX57zn&Epnv1}4Na@{F&~f9_f5Z)`t*D5nRNpFk%vXLgwj zp;(F`!pP7S?+*>=2n=b>D&s_I*MLavn$Fur98)2jD&e@HYKqxN?l4w$lkOi6Q#WV4 z72Qa!X<{`dn{Hchy#$eZUt>SN3))*SUF4&XJT}w$7HAzxjK}S*I0WC%dd+az{Hf~fbiV%pA67spWjcss?EK9C}^j$ z&FveqFwWn1nCWrj%v`n%sjyc<7MQHK(#jGgAI=g2{eKd-WAG0FdlLm9lj2R+L-5T; zu2ST~EG$iMFpky9V0e&?#~~CnZ?a7;Gd#y|9GpFlEYX+@L_6%oIEe4l8>a{G4?@Az zU4%#FP+jzq#RW22(czBy9GF{ZV`)3U6-!`XVK$Dj$Rg7Y*j@0kb19f_9o1m82<^#* zDkU6qfwh|1H(rw4b@re+uo61#{35~~XMEdC><5iPWAnti1C5!e94y1QV#NZi7iLPP zrx5{~67%CEQ*TFOFX&ruPnm8>+2dugpvwL;(auftyTIuWyxsDm9z;>d<8LPPJ8p0K z7nAd7*+|GvG7?hDzYsseOm`S1E~m4f()s5UpMXHL9Py?iibyhkbPHjWOarlI!P^xE zIIda->W%f25iwH1kEa!4wn>7`6c|i_rIAV-mS9r08A{o5Gx_+^;<6`Dd_eITlvca} zaw)~dttdqvR<6tLJ(WHYD!F3%!~;GoHAZ7cWpJKXO#aE_1e>};nuRAoy<}!e*QZrk zW~19Xk+G#8_)~Y;p?U?)$SP0Ikn5Ph{^1hp7TD8?Vjbcmup4SK?nKQjar;Pe+?6a& zg_xYA_@kU|c9224c*O?bSI*o-sPR&$Se=`(tGy zh`4@+zeqAl1l{ia{)MC2+nFPAcZy$F+b)H=fLMo$;ri?T9=nQG@!wAWwC{nk? z#rezgaIBd{==diyN4%GY~0L(-P_uCth5En`(krf|YM+oGHKS}+}FC$5a) z=-b#y2E%xx>k?XrKpL2zyUNRvyaF~O2NRE4kwimyR_K*d`#r96^RSMQu(sdtVAc!a zWU9!9hFQz+0rt4RIO8d@pTK;$7v0C#aqjklf@s3^Fqq{F6 z&80|9wjguSpxlgJ>zYJYZ0Y!)M69D%iBj<@xhpYMn+9^Rs>V3CFCPatxD`YX4j^kO z)bPil@du+wXt?WsrO_p@rvs0}rp`9IB~s0~u_ZoOlY&iNI2Oq2lW=5?Nh66$&PgQG zXT3o~{N@!s&#zn);o9g7HmZ$Xpk)S|64}GBv-mvSd4m}1WwaLUDjN9@=T$)XMTGFu zlHEXM^rCYFVFZr&OW>LkCJJ6%2do!s3iH^ilf>s>6vz|b@F6JO`Z=c3?G9L^Vpe${f}f2&ysT&G7e+b2`o<32&S8H- zb=XLC*fTeu%^5~ymE?inQ6ei^By+MV!JftF8G<``4Oyuob)2LU4OnH(2U=n)O4fPO zUcr5M4IAqsYeBBdf**#+A8P(kN1Pqs(lMY)qFDJ`o0AebFM#4WhMVN+eXut`S49a0 z?1~lrL+J-G6f#33L;!^q6&piiDD<5UV>+~1vca|uCNh|C zhl$l71!8wQai7EUXtoPGt>qrz8Wu5jp~hNXg5N6R6z&7#)F z#%^HvO(S9dF?_fZrB}F_;762<1T`bM4ltIb$%uA*$f!-tsEsm;w4di0 znf)%@B4C2>yBJQhAz`ELx?#O-Za?;ya|xa0St0?m1ld5z44WvdWwajAVl_93gjF5K z>I4HfhE!La4VUY{E(c5gdMC22lX5CO0$ghe^%WSVH-uwkP7|gzcZsm231cd*z12c3 zC1T&z?t}$UEUqfqas0%J9d58NzkPC{eDDsXaoB&{jxVtAmQ#t&uBIDn1IsE4v3?Y0 z@{`tM);D4Lsq#y3A{_czSCaiMAUGW8B(=aW?x_Y^2XU)44di@r8y(6toSr0O*+xpRC(l!YG8X7O%mPn6_xAmvTh;0MtaqhN(^cb)$i5`8n4Wfr-+hBTh z*){|Zu_#d{6>Jw0iq~MXS6nj%_FmWDiPg7k^(qOI!#Tx|1U{MXqEFy}gzqJ74saYB zZl>;e*NBTXTF1EHf*fHOC(OakMrY`~!vqa3A3B z-&Yu>;#rAj7YtJoe(zR()BCM>rze38zc=FB3_Rb!vjETU@jL`zfIILW2lx!X+W_5DM;afb~aA1G8S!|V8-Aj`U z9@iGv5ckq#gR_6}i(}MIHs6b$3@pvvOVe$bJYEWX-oQUoFYjl@{~U#4&}Oj?#yCAi zo7mram<@CL(Ar-dBkqSaBKF-2U7^zJycUxjgns{VH_qnTtc8`1IUcSXrf7)K`Vh)+ z^YFE*98O96M%XQa`Git=l7)QDO1cE!id@LJB+A-<&Ae;qZsmZWh#;igCmwEa^e^B zYh-huB*xgwWt*8R32Pkeu<;^bp`|g-le5N?zg7}9K$;H@VlMi$k_@hvOE9%3C?Ht zVk;xgv#Hi%d%AjJ_334U=wSCXvi@*T6e;Ib86$?B>9)NhV}zJJ+P;a_T+VakLOriH zAwua*BYv)OGyF2ROKQ+p;NY-`bqE_1GMUWX)k^5R|2(}5#nzCfBQ3pT3v_TF00ztEaaIW%D}=ID!pjvxxhQO?7M`b!Vc;6ZN<2a-Ec#Rnt0@E4 zZz)~AAF>N|^ZRgrl)|ULkyB9qe4Xw$g^O*Z#E-~kjN7!V~shi&~w4Mv&>CEzwC~Wc=;XhlhDynIBZFRkjr65*V z`L*_1XDXeY?)5-O@=%IU3xh#)K+8*HLuWyxQAQ_hy8QFT_~(sglZ%rvb#DO!f1S{Q z97m=+^qpUhmwHMy2I3eaP95$29G6*}B~vf&*D>}QYxYN;{7qQb7Kvl!5<=RtkKKk% zEryqmv@*ud!3F-;TTlv`I_HxnKNi@^YXLj8qqEIX4 zd>U@60Y^*n!P0px-MK9|)z>faXl$*S`CIH!_OXm{*d6X;f2eF!Y^&kr!Z(ikXTg}9 z%Fg-u4J{79R9pRvreIgXMs9$h&5U8hubNL8(_w}y%PiI$XvHxxZF^!w0}hFDX*1+^ z+UVe*7uZZqfqy105vE|n>&cpmEd-c$9-F)ccsFB80sAo?M+`@tLx3MW-Bp+|@zML{ zH~z+fsi*kMW_sy~&t34D1W!GSrl5ph_8pZgk1bVIDbb;kc_zk?Dk~kjn8_Zdem;Uc z>R}JJN`vhRj#C#5^Av%xY&}gU(xnF1&EmoYd2)cW(&9g15rbLV`>oaC{>sSyP!B?r z=Z~DHz=u|G!)6u2^Q+3?|HD5wwnF%atho+D#_K&rpu3Hf1v|HTC(L_2#a_4{jo!m% z9zIGtm3aJI)MPZ2zH=D0H^>69nDfSsRj0%nnj-jyX%CaeV9eayp0s-ymSZ?aA`>Ga z_M|_OKhx+eZu6AvjHu@XwW(q86QigWmA=RMnbTZ|s@-@O4Djq>muzc<&A!p%N@99^ zk1l%X+yy60Kt=Ik&W2UdkRtX^n^weQ3yI`(e85QdTr1h4+31LpN-h$!h22hXt}Ru< zej`j|;_PBSu7hES>r-N~u(Q+(PU|T-gmZZ!p4T40zciVF!MV2Bo2_Ldz;LCaHpO3d zKXJR____Qi>TewVD;|4CM)ue%)KXs}T0gOpv}99^ zxE-gcuxDLwbbs!{Oe_v~N2sv>JpcZbqRNz#O7G8b9PRbTN|~@{_u;v!pW;o5 zBWCcgI?ywf_5&z-kjxKl(n7PRz$ZFPI571TzymPcM@OQ1VUslRXY^C-4)lj8RG>>d zMYSYdT!wQ=RGjjzHlq>rMW}RFB~k~uO0DH5Aek=~)u311Z!ab+!~rhdLc$7}%rI#Z zNFjz93x?@mFj`zi1J0h!1J8sZoh>x;$~#tT*;O>Z@#96Vo=v0f*SK8g$Q;nzvpW9> zxpHSZSKn(Iqpp(TQ~gNWm<=jFod=HN>r77lDW}K^YK3O+*S*EvnDencDJ|I#B-!G$ zuJTs0F0^@c?@C4h2tzE{jJ9L4hQzz8>l{zc>V}nsC_?3g#Wq(GrF5DrzwUzjc$khv z>o-yB`OyoO0MSZ!RZ7BYx-Na`o&OLkm!>DpfptwOf3-Rt!kM>ZDyLmZiZ`~3Y!K!) zj#?$)q=@P>2X<&FLFsJ|wIL@sAjd*hUb({9TQ6Zfs1p|03SmR?VFNq$0IgVSsCK2C zG-0fgPiQ&kVItu%3mnYQAF;-Sv6Cp~={d(C#7u8nm2TN!b`@!6aV};{%eHrgg=#(2uBEV*v7Z2RO|gdFP?8JIp4kHY!;%$=@n2 zr)GN`iE^Te-C_;8L^))|%20DOtbE5xzCWxRy3Uh%tlOKwCJY%##@1|@l((Y8K8g9( zPp4fwan|$yn0xp5sH&^+dxnH0kjMmy5->{Cph2PrgMxw@E`xX(nHWj%67R({-cV)$ ztC8SjFo)x`*g|VtXsM+ZTdL6-8Wl9bl!S|jqAepDBHB28U$yOtTUp9#D9I(>HN^9Iu`5$6!}%v*mXk&jQu zNi-s#=WSQa-XWMSEx&To2-gO0gPf@#!wv3GWxeb0$PDI){JbMCO3Bg15Oo|;9`n3l zl}L4L-&zr|HE4NEOHX;sP?emHJO=h1;mCxPj=mBkcELjX`@I9(GID|#;?9l!ei zpV(gk4Kd#V@w`G8#y5qzxOJ@%P}r>?M&zZPe2$yeJN?cW~)~@KROf~7YGvq+SJoXE1NFmts#~lT|kng*f zRu!S3?K%mTXP2%04t)eM`#5Z%pYLB357XB}r+E6OhV?r{TM^U$kz3(_{WXWTOr2z5 zunS?Pma!RR70aO;n_aS|g^SAOghedj;6S8Uoc#RilHo`#+4vEk=3qgDbfZXw8;Chl zRLAwa#Ovlo;U5?5UQ9*3Ji-L?N{~vP-NzsA_+%C;X<2%9n+H z{~jU$60z8CU-82OYSJ@jy6ge=*oe2vubzB~ADe9>U;Q~hO6?s`S7_$-JN}OBxmK|D zb$|Kq<@8mcPuZ_7+C{LLySDyaR8MlgUO!9n&$p;gSHdrr5m|I)OafnjE5caW=Q$pX z1%6tvVDwn_CfRVCiks;q_8*1tqqG3iop{?>F4;cvo_sIbZXt9lXplfTC(2J8YIL~x zNr~eYh)6z|jUJ>*^dLVRBzll44a6%crF9|C+k=cbnJ4^|)UN#~)b@RHAV&}73IBw< zwn*b45>4t4Khx6q-#L9QI*utdw;0&hO8H}Y z40D<8_%1qLtR`LBmqRtXTq3c;IZQM)wx>u4$;NIF&)VyNI4~hLmOtI>=yyETBb^S2 zl*ve*O#h2TPte!t!kN;AMKJ!~u|-0;Uw0I2cLYyEgd$O`5v9mlH8aQNfs~TTdw19n zSNj;M?D^C@iYh>#C9UM^gMv-X@x-K>^A4ai_JH+WydifJt{aH*nK zwF55)LeV5weK4$waOcO_EtGMq+fv#^=TpXeyru=)Z@j6?gOSxjK-^tiE{&bYAH6w9v6v-pwFI_S=9J1j;%6f zpCqWdL0<}r5ceNlUahu}BN(){ZWoOC=~84~5Gqv9dC(t#-!WYG@yxG3HA20>AnD)1 z%s1tyL@TC9p8~}5n@IvILCQs_CwTT7sA^T^ORfMFtd{NSg1I(w7)X5SgE^Sw=T z#I|Wd!AM<`R`hIDPkbf*F-@dxdE`Xit#CuLS97*j)~F%Ce6=tOV(e*OnO@J7qpO@B zYCmUOqsaeG*o!ynKfhV9;Wm*L)vTe%(?*ww{;ArpE`38JPu0*o#9Eej@gnb|HQvV; zc_S4mHQt|d5+Se85&}nC!4>Mnddeo4u-Dl3M*WFS6m{g3jZZZJJc2wgRtxW73ujQi z+VVTo>C%i0dtN#rt$>kz>1gsy=!Un6PQ+U+IiL;7v_~z@4tUJ>E^Bu6yW|gK6e)00C5!aN*bbjV7~4V8;GHhFHi(Al3%5!2_KQc))Rb)5yd!#3mBmI zUT;~fcemq8b!M9IsRB5RCtB>%v5oD+tm&DO;buF_VecCVw~UFq<;`e+hFcJn3q$kL zT){CBUxrZWUD!O7U(NAS)-&vxU;XJ}VFGrlx^hA26vI(4{Z4oH0l1D(^(IMqRq+UoK!7%uS4r z@vGb?orSqmeRezJs5}7k_PTm@?f~?LT+Em`!1Y~oC(%k?FOHt4I#y-VAJcj1J4`5@ zU;0Z=x86OgTl{GFN95JL`A3KA_bSarBFq!Hdn;%R^~OUvSLdhrB_JR|Ym{&Gp0tv3vRbat*uVGtdY z&dd2k9=<&us&d6XJ^ zBvjU}AMHFU;!#@c5ljYQ$H&Se-;$2=%>gtpu&VM&$qh0o&t9CvvktN>aXFbwgeB9L zP(%M0>9)%=dB0V;m`L^&DgKIdb;&hwOmf<^d{ywh7uXlu!DS*mi2aWSmsDJ+R`ii$ zR+T+{apQ+LJz(nnMbzR<6|6y!bw7!$*wHrH)7fiQSvt=6$Zf$~9j(w)-9)R0s>5T7 zu=bTQn#=R9^4nHT0aW;rQ~ruJq=tINc~?X7UX+*pqp(@+NT;!a}L_Acq#Q!s)ZKEt zA(M3^s)Q-m!K#Gg#P z#(BbFUZ|)(%3smR#;lDB*$h1_I-Yc?pB^VV>jNMlNFZh}8QjJW;mR@=reoM>%tUm5 zvWpAeL#2-WlyEFK3y9+b9$cB$jKrDNjFg%g#)}IR7jI_4#&g~r*%&x2q}=4SQfy{o z>EP_Xf4cjiD492PWL2P5$MQ{3xl5Zuus1*R63wS9dV@}hG? zJ7!5^=oHmrKu7XFtz5cgKBqd&Hn|mO0XS}~_-k%R!8i#cI_&{cE1KK}a>ydDIt6Zi zE)vpKe>WW=wl zv5zOY^&4WJy-{B+dbMM{)|qMejYnf9oL-y5ZG=}*z2?56n)^a!#T4{nz}|xYjWQs~ z_B%Mvs2#$kZ9@R@OG@eIC+Mn9kgBqJRkg*h=15i3-wN%AmHQ!k3DP3y5Q((-jne_s zwuShjo`v^u9s2MfAY|QRbw*5=G#fiZII8IxR!~{fcfhVSdo$=iWJ!e6a##-ki*Nf~ zdy`d`rGD{nm*}xh;#7zwhF=X$5Shac%|;$8^^4JImcxx+YNyJ&6=TPXaO-K8)f^IC z3P#+)JoctsB${28uJJ_9FrS&rW218tIfF)LC#wI6a|uZqbe&W(g^B zATo9e-W}EWn6)bY1t71mW|9$5hYlh?s!q1o@(x7QyGMdsac*S)Col6Nk}U7;|BgMq ztN*(iHjl{tvNnlMA=CZg!J@0Ewpfi^$#jYAFM~%y8n7iOT{FxjTAs43@O!1`f=Wag z1VxN^vxuksRU&(3rVT;aV|&{wumaEXlL9V`<*TbAOTFudzIO_J-|MM%bC25X%1)`h zY&U5!MJNj&p01rE!GpmDB_QR&H0>Rhw85Ln>B>&!8?P|Smu2YoNp@rW`dIBC#!ud& ze1^9B%i;o0$pLnw_(~3g3YY@Auyak}Ea98H6wY$nEl#H6W2C-g*jHU*0wVjX(8{f> zQq5lPz*i(1+zANartbgRYzRJlt+W}rcptWu;45d{kYPQPscL@wo-q6IJrxzUFQr7? zd&upI9QE|HIIIHi*z9Sk0;bANj`BcCro}8vv(>S~;XNk zo(Kul!y3?YSciJ#MjHK#3vA`?G3nIWm*qq z*;BI5pONCJ_JD`w889FwiEv?I4?d^;-$=O(Y`W#k-Me8-J}oXm5pPsDAPg43-(aS{ zTu!PLvcAo6^~d|6ar(GA=NOxG*nrBfBDV|6lM;)5l_L6osAXKOVyw1&msI#5bEEbdxK2ue(ufNJ3@T*g++t)JwS-BhQRkpK{xJ;`-YZ_L1=l47fY>tNnZVT z?h7E%CQQ!?jepJ+D4^Kj!;A40$xh;*{n63SX_~e2lNg`Uk=&g4XCbCj#&zEJGc9?+ zNHRzKV>us!kK)(N{FJDwGB<+OpS<0hXYCpR_J0^-~#Op zG#aMD6+Ek1s2+Q64*OY>?MC#PZm*M8-J^;%Jn^_QbK4?tCOHRrw>~EWWIW ze2Q*$*ZglJBU2=j$BpQ$Ty@qB9Q|>!BP!dhtVp%qn?)w4>o?7lDdt%mxcECxo?hVjcfe);IXzY?O9Xk z9)GINH{ADxhER(ep7&}~X|fnnrr;-5lssy<)TRY)qhjo@H? zGpWG%*Gys}{k28Duq46AfV^mJ=BCm&y}NsySV8&?xGk$+JecGPt<$&>xFHfABVgGq z4kND8Xq_xPtuD*>{{CpyI(g^{4ivHL>|>E{!IOsfP_-Eyqlyi%*XX9^FuLEN_6w~O zY;pyT)9cOyy#DdWT>`vBhxK<_ufU~BSeTw2_(^&a0>H)Ujt`PVo1R%dn%OR2{66Ux za(4Adw-Bma><%VZxZ1^f*y%A-<&M@#+l&RCNe>I8Fe}IU7>-I`vmN)wrB2bowH^!% za_9m4>vfCJ=H{?8ohqT`IdRY1rUExC>#{#8B(Sl8ws5% zHV=t`f}V&5iXjKfD^_!E)Jhdv=`oVWEJiYb&Q?|CqOItKvioQRX|slkppI(0@Ld^c zUwf|XetU6sI&ZV4>sB}oxKi_QGstFF_Q}iLBC+A$%;rK)g&PX{BfUSSJE zBeFYdrl#Vj&%4);otlcJ$t^5hv)#F_jFWAzST0g#tf`-hIMPiw-GML6v8Sb2+xTX1U4v41H3wT*WlGc9TWs zvBfb&WU_Yt&h4r(XsYX2)h95_j!4y^)^AL;>>_FQKrjxfC(VFW>820e`-_8^p6UyQ z;a(?*NT}87Y<`8-$)<)bY|5ZNx6Q#UQz*du#jiP{d}~eN0_N_NJ&m#SFw=Djg_jF#Bqh zE|ppn)2xXpmV{!NX}f2hs>$h0?%LrkLZvQ4NMZF+_smUVFtT%+T1}Q-HSb_sR1OzU z0A*AtTV;c7Un)QJ1emfm2^+I$Oa7@Tyipp_9aWz$ggZCevCB&CSfgjv+~DW$S!uG& zGRv#u$kP%>9${iwrepr`oiwA5V?0mkjY>J31>4gJN3f03T!(B6g*pOr*V)0Fq?Mb0 z#nO!k>?+tPF$Fi9ED4&NB8?e-4y&P{is6 zu7r&A7mmmiew&{%n8{Q7YAW+r=l7oXm|89GqQQ(qiLV$4LU4ilTMGzc^&pz`Il(EH zF;SXZY~L=I;Y3P?#wL5hHb6rqBpTW(E<^M35`sUFaXtO+{{V`8f}^GE#DB)1_?<8a zbxAbj&2c2C5+u+@n|jc_#@dtZxY+tSDotIo_kS?lf9+w6nyj_Aap_o`oAV2zRoHdZ zI(snmE;|sXNC^eu%#A9dO% zptKy=3k~$^lQ4e?-aOoK!_IQgnf|R!VgEF`Rv#!&LvGJmR1T`Aa6tXGx2&w%DdU2B zJmK?XU6vg%V(}dH+lw7bkibw8J+#EnJ#4sYiVtDc4t-4Is5L9kUL(fWM(0MXiVa#e zuGNHFW{3+(B3o-lc@3~~&fr(W(Z~=jgkLdV_rpX{QlN*Vvs<1i@uJe~FCsW?mgGgB zlf$q5upEfB9FyZ2jQCW)>ip)ftQ1`Ke?M2uB~m0POA@=)QRP~p%C16D6LhMVo1H_Q zj+M~EYE7T#X26vR-=Ll!V9%)KL#4LMEqyLo-7Uq$S&zW!7XA zL$uiPFp;LLpmhhRtI)G>L7K4YQnC8xuc_|#yZLPlE|?GPB4KIGD{I6_9A9~!hU^ii zL`=?f2EjtVI*#Pw_O#qc_;MMU@x|Dnf4KalcvCd#S2ykVx~kSm2?>j>J8vvYjC)2i zf@ldD;;DWowOg&biRzJHC{1*QcnJeKF`xHJ3GYEE?SSOznmJ0*Tq zG!d?(LvJUrhUr&C-?-*B<^~%c7jTnfoq1@5ub_0aPEfH_o!ikS&)Ci2h9ePaS$JQL z07ms{GG&8+d3!lYbR~Kosb!7hf_&%smV<|;0cXTt{fiN|_KT0$6aFo8>x|kH{wY5& z{EH#E^vbRhx%D`x$DV$FxJLg>>&+o)UMBg$|kmHXH?Ie!OWoLa@IOP z*kP~90RsdekxA~*R=2+*TTSf(Ke6LQpd*NZJ+J3RHi5NuAHWc`OI+(lKjC1Nc!se7SWA-4GcH%rS@lSk4_o) zrAK?4IS3RMh%rTiKlbYygL<7i;hUvE9EbLPf~J368utoi!lk=vT!YzybzPB2y;OCs z7(*D#2iQNzv*4gA-_1;2gZ#z$J%itdY&!JF6F!sketdOi%i;f$9MmA`qL>-Cw=pGf zo}I9FePLkG-t|>4uufes`uM;qtf-?;MLr#kEy+8}cE#4=y_0rn=-!xTr18;bYk5a~ zx@3|wkAPYesPeC5xtkH2Y`^tT&7hKS7AqR8*~BnbSJs;^UmnQ|bq3!3$^V{N<467Cq`S)*%w zL+#r}AU7P%%-ifdsj-Fp^lhw?e6u7x;STn{z51QB;P-`M3rOO0aVi9UGB;GeRgJ>! zTw;p$37%~B0#h8e?)(SacusV>0(;G50MRk9YMqQj0zh%=dTtpG#PlcD`d#tXQ#@hO zmLArF>GVLzse0u1(gRQR8cN0X-#)?9ZT&Rfk7pm~?uS;nJQPDZ-J9U;;Fw_8g5dY; zg!nK^&)2n_uy=~!+p&8a6YI~VnHR3+1K;Y7zV*di`D2*TjTisER`8;Py`Vf2M~lx2 zK???blOD8mzUQEW4<0tg(ioI~`=o~QwJ|7+B)MaYYb02G=w9Jk>yQrF$D}!Vs|1ErEx$u=lIVl=N`hy61+<9P>1sE=q+e@a zEtt}n9w-xDVH&$%vuo|SkBiI?p39})IaOo~_}a0-v-YbV6foRc{yE%0&&_+{HSxh+ zaxsI`{Gh|UJxL4Z^}UVRpl#Ki8k8V|{16_g6jNYoc(?`+**3T?Kh_g+=7>v zM~RyfJ+GUlX3mI1>copQ8XVT5Z04~RzrG>XVv?)NmifL-hyKPZxZi>B6M89UD$Q`5nvysf{EeA_W-j778 z`0U<(9ItC_df4MGN;Seu7rb_z8dVoF$1DGoqlnRwE`7@9ir2;(eugt$rGR$)FQ zpBRNXq4f^>hG(BVXYNJp9;WRW4rICSyPp6-w8ne?h1!E@v6@G_1H;hlV?rWcLvwLi zp%Wq~yoS9QjRa#9?&gPrwv+x_txt-zjwEFa_BxMC+y8lA+J0Qx{s(&~ZF5&!9N%1u z1QYkJ$F;pmgFM7e#J5FcV=_ZF0T%xYV4+4<#gra>y8!1i4VN2r-!xn%^zPeVOXypQ z zFwO+jXi7QyH1kv=QHnbK#Ltndy#*1>(2yE@i#A$MPsF3c)iF{f^IJ=QKHuDCq(7c& z&Q&hnQ5`qyvVmKpSe0W^z7|_)nQHVXF0qE%jD7dAvk1DmRS369ng08q9m}pF*T?~` zp-Cy#hf?MLgd*#b;`p(x7{bsA@5C)NX(1w)&DtrZ>qm~0MTz=st~gax+d*NA9FyFq z&WC;clJ4PC=c{LqEAlnY)vJq5U+ecPAzUYjK)_dDaT>0wD#tupt{(-ibb5aGFX_`> ztk&aw8sD=|&xC26phNWjw(dS%L!amk-BKsf74eg<+#=eNR*+08<|KF=6%#rYka+9; z>SsR%9^QI@F-m~J^RIq!C@@~V$^nKOV4O$8_UrARBfz!0@T0?+ry}2~+@j+THmTB^ z^qg$_+8L(=v1^iXHmULEQJsDi5U)sSZlN?6AE%b7AV28YVpFvYb+Ht_|A%q#-#y0+ zH6lJwDt|0=A7_LeH#+Dt{|oxz6GM;c20^Sqh03BO+t*UQgNYV|kQe>xpGELOL@8Tq zcQU#ew8d+p$Wm$Djk$X@_Uahm;oXK2lw;_lW9I(o8AGA7T(~?B^!NhP$#P=xf zNNXjy|D#Pi2o{u&LR!Q&>hkxKML+wz;Ork|g23s)3;@0?eW+GGgoQY8ikp*H<6VvU zM8vzS*^5=1aCO=sdYL+&ZJpIqW)mRCw+x>4d-rN?>k1>US5qR`L39fG;oS)X~sry>R$Sx`_|nny10Q5Jh-}w zwe~V~|6J)Do?+Ax?_kp`>7b|jQEoc(`kP0^Ph$%RCB2;eIB6K&b|>Sh=&!@V4csn4 za9aH3?@Gtn@6FtuLC5`S@{&(u?i|+yr284h5l)>z_lbF|P969{R7Sv3jai9L;}jDO zE>kC);j~}O@9sgSn!7rn-A)XeWYgNI9xT&S<1OebvvxA7IoWk~3gsVF1P%4>6jJ#S z`?}e6U?GU?nx$6e#vLIgKP0Mu!n+~}N8mu9$#PhB33f?k>KDIZQTevve|U$O*$IYW zS5xqsD)>_jx5QN1Q+*4l3yswT)>Hi}0VKHd-t}})_tj9|qa+LS?sTXxTlh}4@FT`F zkTN*vCqr#n=~8>8)ZU_wKg(d|E+GI;7Xrhi!1WZ+q4nwDP``uK6YrB#j^IqYZ+|ozo0!zoV|od3_3k+-VmS{!7Rjv8!9FW6-w~79;5IGw zKcae}hqGMuA7dSMR6pJNh8#@pig7P5F{e1~)Kjwp#G)zg3nq}CAhiErAZyW-J{L^r6FergKT33vDG3)$NC+fr<02VcxB;WgK!4k} zC)Auht}BS$Oix4L-u5x{sjnwJxg(J%;yWcA>Fe0g>{Qo0vMXvtS)$PUBg3*E5st$C zi^TOAw;^!r$WCJPhdy`DyJoTdh}^V)Bn3t`5)}j^xuNB_dO0zF(zDP7Y&XxrMtl6T zhecb_@-B&MazJAK5T4+3_x-C18an3uZ|hEcwqqi;5>|K@_8Hg-bA2Xb!It7|Q`Px; z9KMR?n6^>mJ7p1p@k#vttz`C{yU^x15|u$GGJRMOTq z@P3cL(KC=(5qMrqz$YQonvlh;Y!sE&fFoL0%h-FVw6uQl!CuUMv6&2_HC4|F&=#G?U91iTl7M|IiHHqcF@>6WgeDl4*mkJ<+uG2G5y zYV#HNY?pm$Ohpj>tSM?GuS%furv+A1_o1BH_TyhVmE-l~TU@ICwOyp>(Z5`u5#I#z zJ{H0nxJlHkwQIE*!eQET=^xtjK6v<1>arH}zTQU}B+P?ByB@b%m>vkNSvE8Dgc_ z*>Mc^NHuwfJ8S_}ZRi2i=P1IL&cF!*1>^@>#Z~JD#*J3bgg}N^F zJn~CW(6gp0{W43GM|&={h>L--hBoHD`C?X_H$`%;Xd9o{{Y!h?mjxWVKdQ%lS*@}A zLwekY1B%~w_qfk#CVs#DqIkRIU$NVoq0B%ytZuj<$vty%5#5~0-v<63;_s*YJjyb2J)040ad`ectRS%|IHIwIDIEoFJz_y= zD~zpb46#%oa>?}J`sIYids&CZqw=zNf_(zi?!#3yxwCw#VafMaea$6N~!B9X1Yj}gRq(0wh)@s6gw(lr{h z4&(ADm5JA8+<(dwzKx#@XHaiD7F@$0KPqDCuO@J%HI~EodL6E?-srM zaD-)8E-Q#RvKU2RcHHVxr$&!MdZa~1;!eEpRaoz6U=mI>fS%3o9I+BfVGKZR_K@=1 zsH(iG82gR3i%gHxrAs(7C4xm32-A^Z%^=Eo6c5uq(9>C({-4lI|G)q3b4SpF)=smD zIbpPLTa^vLY-j;>&R>P@OSF8mlL=Epka1jUdS?wtcNM%>RS8xHQv%1q1mUhc=G3or zo+2k9h1vX$$ZyAapV&6Rs#Ph!06(|h&|dhy+sHr1LcV&kL}Gk}V+%1dXZ;6CKqr^4 zjlP&U_}lj*?6;?<abq-r*~0XQA}C67C%1X$$iDCT~8FwNW%-0Zl7I|HSpc=en6337h~ z_m7qPW8?Q_ixE}YaRM281Nx1>Tpe%F-e4E!*jxAZDGVm;}T0>a&BprNN+AH6|nx48>?A>B7q}jgK$n@O~rfmwO z6-BZ76huVwg)X0q9_oZc@Gp!-g1`L-d=_B&Ql18=nhkmkQ*@Z6h1jVW9PC zm4Yr{uaj;@!i)KgYMUbi(dg*M{A%Z^UYGcKu9KC`spWavl~B?eH7bsc*2!Cb6|@+c zzUP2AdmkWwhVnx>ne_gGnZ-7 zvNv2)}!r6e@I>6vdW5pez1y3xGb ztV0U}IJ|LInXlF6OEz{SQ}yb>3AwIFBtVV59d?{evf2BVd0~f3`{(R*sr^%v#4w9v zm8cCP(p7D5q#@W`m?(4%08%3cC9`;{YPLBxT0e$niH+7Z*k~Pr1le^mV5!-UoTyYS zo_xCa7ThFtytN&hBL|^DWxa;Y&GpHPO>uo48yPJp)B$Z`}2NLec5a zdw=_7d>VhCX01oj(`CHz97A@|t{DFgg8?PYTIeSQ1!bA30XyOxG5_F9ly zEDaI$VOb0lgLh(IJRRH#(=OMFhz;=9XX+{ zJ}kVm;%_(ns)uKmyz-aCdBPlOXsFui&&d%P7RWe@4+ABBNF?{R)%gMd`DqOP8I_+O zGUjx?Wz0JS7V$B+@@t%SxFIG!b0P3j7oPiC?EQ58{w1D)tOfB+;7wh@z`}HML#kF( zLe+)YAzdbS+&Y1uC;TxlupG|!w!%yOo_XpaEi>x?9t9nhZnY>n>wv*)N2DZ30*cEQ z#sO5=jpBM0tK-S_8(Npm6OHBq5p~@!%-*iC(71peN`##yP_to|vjlol;%>&R=iL^n zjxlS2>-`;9I|~qML+3PMQe)%w9opbgsJ`Y3BH_2Fn+T^#Y}ahmB03H~&aHyi5cw95xflfzSJ>mvph}C2KAbJG&Z_~#Vg^`?eP|H^y z7#V|?mal9a0c=jB@f`j}^5^029R7~y?|l9W`J2w)mHb`8-)#O|sj2SNJ_)IbseMzE zl2iYG^DiZ}UutT9Bm0QUE4uyv(Vutu)#*>gXA-#>&i^qe-91@Dski?>$YGP>F&VT! zFD5It^AQ*JHtX0?PNJ(@J{fp8?FN_dgOoo-`97-f4RP-|8jlv{>%0C z`_}qGyJz$~tcsaVmiYEtzMW`_QV7*g<_{BdrE-V1+1chK&p9kbSv=7YO101joi-WD zw&Bv%dt$fAL-@Q)bv)OnA#5TKIglXo5E33fyiD$JjiKi$gw2Ue+>K+$+`+bQXK@KJ zR=};dN>%m6r?}eJz!lijciIyroOs}Srh;G@rZG(ts;^bTAvqzB55R_r`HPboaEP{r z;JDkWh8AjO;LC|lkQ`|y<}CD9QK@=y1aCHFwO?u)BlcK7Pgvw6_M#OYm#hBvnKNgO zT(peKeeLwIaX$fT8`ZFc_2U-ogh}@-6c!V`Y7g7AYnPo>kbJd zcxUjT67}{w@5^BdyD4PNcf+GeK*Pe}IN^JffOaA8oX671OPY6JR)pwv@3Ur^@e1ESX<&(D-iq;npH$)>!gsF zHMOAD?_tn%G;Oam;TUY~U?(_YH?WgPBXF$*^}SQ3{DYoIaIG|0nUUcM%g*PZM))fY z%AE{U$B%zk15cX^1y74j?TI!K8DMIe+KVsJQ=2(Krq-wii%Tj@{EN4UKU1pyak`mY z>406fE%X3sSV_K}$(ez$x%Q+iY)BB8`BhT}%HRBs1bcQGe3GeO%N^~DIOh0v`pZjD zbr3^tm0zXg@8ZaJO5jtbkdU|)?(&T{{?x7Ry+v$yR;jO#+r@XAa(__|Td?C0i;i^> zvkzxVtUo^_m#a2LM=L}l$b{?Palf79|a6~fY} z8}1jefZW53SO%hldMpZy2&G1gG!}*1xvog62@jNB>WCqw#zo&+E<(U&9ehPAwds1Ib!GtdMYK|<{e5*Sbki{%yL%9}Hrb>IG-GYnkx*(*_?6qz&axQr=sV3} z7cJdI8+h6yf=qr0>`pqX&P;l<5H4lIhzry0J)>>^HD^+rIzUNE@)*IXD!(@cqZ z^EVUJ3vsReb>kc zFkw>O1CmmsTIhEyl4MfU)MMe_iCCtw%D6#BytR!VK%Q4x-c^ud!aa*9b=wAwaxQCn zTV(nHYr10lO4uY~)uj?az>4f)ZpOXgss08~ntTUUKS*(Ts!tR0LkiL^V?%Rf%pzS7 zMKFSmX)uC=O4ax$Pjktc@mAPZ>=7}wUZCwrmP>=SSsmtt5`K%uqqD)fsb|7O>z_i} zqr54kT`z-uF4s-yY(^20@@N@TwJ$kIIXud>{{u}|@0PZww~d_M%GQ9^Xg@;B1{$*> zYXuj5DPMK#pc6Py_TZ~yZjk1k;-g`wOpvuVTva0G%lz7`JsjnIL&(=xkOOM^lw6r zLw$(1mj~rGq-eqnBNnNC@BZOz#Y2s%rlk*w(r-#2?>VAdiGm?OBkX8e$En|42tp}@ zjcwS@T<}p9Q@dcZE0FAJ>`2CHB=}I3Lm`7s01014C?d2ODVaShQPp>l^FepHw1n9~ ztZ2xLwfq2u7GQ`ZvVI{sf;E0i$J|lRy&?u)pzozznAh1}QU3@04^~xlm=jNUPsNdGrFn6R#CZ-?DY6CWB!}g%YCY*;itFf}bVv zIncQs!LlS;CxAe}$){TUEFCkui5^|3AzOqgCU%ti@oRlK!0UpS{Nh^-P1Z?~J^{2K z5)eTk(1C-Te(&|)5y7IxibYE39e828iJ&0!IKd#ub`WGvig-myP0f0mr9L#dVQmL# zYJK77-`ShsRHp|%df-G+IW+LY_HI0yN?g(Tp|1;ZrEXEb@ROj)>2wEyRu1b+wM!P# zguGP=!PKWP$YaYk;f7=#T>>tsF;7dYdYjgRfG0kln)8d^hK?+{Uh5sq^NOpR!z&%I zHHTNluU0!(D!V$>9jR;Lr-(qdVmtbx;DF__uwm3MXh8s$q~Yf&WG!9GXLGp0c|Vd^ z7)e|}cEt=Q-(<505#XQG#&rh2jMR-5Ddf^TJ~6!w=kqO(wcMfLO&XJWbGS<-cFV}E zp~i&9c1+Mbmu$ka-BaHsFCP5zkIq(OkV^++w!%|+hEuS-?5zgt>oh#B%tJLG_cYId zXbeO0na$zJ+;Y1&gr~^2HND1~{-`xwvXx3^(&@`oIPEpCRv?8GH=0kNE7>oiV^rFw z|AeLoZVXi}aS=NT`f6*auuci=Gb?4>7lBEDm=z@hv)=*8&UGw*5A;6Nl3?k$HxXTu z_^H>t78MwM8QkR%@Oa#^u+Xmw;>>tywxuanv)-?y`bb7tfAz=#xpX(piNm09RGwiZ zR<*+0^!gSe7SZV8S0$6%Wq#p?Gs-W@7j{Du4&NjZqQ#giS|_jAa}#m1$7;Ys(eOqz zlic)7-b&mv6iHl1!jDVM5&2|P#Mhm{UQj2zrJ=1;BzdI%ZF)YgPI~7F-wr5k9q5E) zWRZy6w8HWk(Nccwzu*4=wF+(Nk#s23nJ zk%(ZYdRku!nyZiWr6v=Z&+T#yB5kuDu1_}%$hf7#fOx7u6_{&o+U#HLbM{g3+(gso zNaRsUm4FQM=ZGlOw^FSseJ$E9*z9bea9$N`c;uQel-sYC+}-4`qVmAjY-4YpHj!S& zc-p>Pck{GD=}Qd{X81BSWqNOp)nQj(Nr7FxT+ZPdQ6icf_NyHdbeoiPZHE|z;j zoXh{s!Awl=Q}}_u*D1SV7P>2@XfCf~sbP*yBkdi6^Tek%^JjL}$}G!7hSLF&$Yxo7 zXKeVU*5jzv-cgY(@xrXDo1#QU6Hphc@um#}3Ux4at~OV7k-zgA!B+5cEy>e(M!y9;b>Rd0S!A8jA42h-aAW0`RVb#I2lEA$>w z`5nE7Gv(y&;k;PfV>owtdospn>*3@AR|8!K;I|?RiAoOLXf|Cjq5cx%BR4yVGoyDs z!;Ic9ozq7pgH85D_MF7>uMokqwZrB6)p>UccQ5<+x8qcd#}|xp;+W|ftLWR4#n&~@ zN>i;@kq$n^5K^a`uW<{NhfHdzU(KJ~8x0{HPQTB^-_Y3-|L`a~A;>4^b%NT9Q(#tQ?0n~(*F{=pe_@2a>iU}``kf?lOohU&9 z3nYKHT-KKS=FrdQB0Z!U-S0)=letq9K1NE1WjvgmQ}~MLqH=PUF*Ju|Xi~SjVuCCg z0Y70JxY@mA`Xua%n#2g&yX5U37&IaRydH{Vjs2gE)*V0pmiHd&wi$YIx( zW2$5nL`3B?qQ{6#@+VGKzZ1(ih0&r-D_is9LA!n(+N;a2(O z-96l$D3I8}FVNL>j2mTBb9g5|`Q^e`Qq0o4_*U!@%QRwmH#LXboTnSYyXA^thLL>g zL>Eb;E*+FyS4d!&;`cL<(nwGJ^ue?(N0Xzz5eauur(d113PZk#Tx(xT5vSTyCX2hJ z?mromq=R!ZvUKnUV!{)g6o;pF?%cfA&N> z24R=I6)*EE-Vxk_=zkXd{Y)^*x|Ku)qocM;AI!7anG3;i)3hmB{?N8d%3bXD5M{y!D=X5e7C(RuzVDzSG)7-9R zZSeo6rcRrdP53m^;nZ**FKW-RjWb z8>f9LIYVY7b|eDW+A>V77r8f)wNvUZ#+f2d{cAWL4JDz< z9I-eKbJ8{Es0Jbc7^j^c4ecg=m^367zcjS5pg{l`t5)KUr?# zgg;WNmLQLuf{A3F%a!i(RQD4SWk#gN0vpdGh$Vr1x_bHf&j@Oq;0gazZjh~SvtPY< z7kp01=&RULFUu;wfY=Nw`IC#VF+=A33dNuRe?MI-fQ2LOQx<4ASarY?DxEO5R|mW<>^S2GB0 z%qx3eO*q_hhpIEB>dm2zeJo#&SbR@SxzB@OtVPZGNP_KWa*uqj*1%9cV)R;qsWMyVht0+(8JhB zEtEu?qs^zYdn6l!fa>*-PP!p5I1Np`HGL1(>GqTiKYO7XFf`X$nptGwz}ebhp;$|o zsAu7m#ok&n-^NoK==w6ml%$tVNYVg$!dg?dS*e9b7HDb7^*AEQ{#wvtvugPEa=|>x zT>oQ4Ze52hUp?eY((wV5N$DCAm}XB(88;~n^@f;P#O0D~{#Mb!MuKjpxr zm$=1Y(tE)2rGroY3d&`wQM>ilOkO1L??OX!OIY&^k+_^jP%9J_1%7759jeb&`L0DM zbt=0OY9{4tAGA@p23V6uLzg6d!*}?g^#GP^)XqPRAGzR$jx-XChdO;PcuM&uPLzg% z%_x#BxVNK+RaMvYjs&!vz2W0^Ak%;ROtf_s6AnwEBJD=I3xb{(Eh%j zM}8yd<%Kh!U+#zZWD_{RfMz9DeSHE^^u4<+U$$q-tM)Vwwq<3o%ii7MwC~-q$h)V; z+q%g6RYji~?+5sNkmz$KS&zs+CiSR%IgVClP`DzcRGq>vj$Z6(JN)YHbDM-M;*t8r zzV{^#D(#g2Go7==Tyuo}@_G)TUM08MpJ26z8r}+Z9q)N0lWQ|qrNpdIJ2~^nF+_?0 zjz*Qt!Lh#yMJ$<*iq*B3!`$GGl1R+sb9m!|cjf3obSeBnd|)^K6H1T_F@qYh`_CWH zjo4XWBFgn_E10c*bCT9BzdL%nxV*~C@Mp_@l_EuWPU{6kRo8gF zz&v9D01jt!q&Abf;wmQfI5}4fB(N5v9rfU5ByIUx&d)SxGc(zWz(QiX%L>H(V=7|T zI5uUm(PXQ>rf&y-vI|*CHr?wl1{lA7?Sp8?v)T}C<%I|i^9we1Jk{NqVe;k!Umg%} z43g_tPShhzX%jtJ@J(!`Nd3e*M=8M54>r*?*ob^J=47)!O@}2ZR@SZ-=8}|1ng^g{ zvp1V}0BjMY6JJ;ZWEW?*0fV6FzU+cG85^_a-DC`N0)6mO^JTOjLw$!ddMAw*(`4ca zlI=H@Jl6AanW5&L^^ff#~M!t$!ge0R7HEuDs*Y>-{)n4 z#!s>|tah*DtCFoNTRdg0l@vLDYC86;UleR?zfd~nq+!)l+Ac|+i`D6->3xNM@s0|f zAMs}U)f3lh89(%Jgp6bYo}$MNkD`{FX?ahHcu(<1?@gDfBpDv|!HHck!^~&rL6`qJQ>AmHp|s2yyu#cKcZ*u1$$oh@s> z`ZPe$zLAFzvGR>@oI=6uOpzO~3qZHjlQWJ)wj@DYWrk!a7UES3@q*yU`)ba`B3AQ? zQOd|saZ1(s?--@3xFANRuApY#x&T-mP8UtZLKMr|)N}IoAsbzmtGvI^18ux|J@i10 zcVWEhiQfyzywK> zZyA68n}6;;3HXpEB_}7R^y}Y0mH+*d`y_*n@-Mb|@vZl-J9{2BQ#9uU!2(SQH>5Uw z0jA>L_k5C@fC#Cj5#I{6aCMTq<9PLqzUK*lhSXQzzw)UhH`Z_~IQps|UpH0s%4I|d zN(^4Gio{ZhA{-`(^gMa3GtifUWMkmQ?fQl%{CzDwUWr`+{?+4QyWfO(VfDmbr5y>o zFl~@HGQVRCFXdqDrp`3IIz~+DeGTdc=~t#2?DT6o^*K*6{y=aQGJGHSvu>MnkCZ>_ zgk(1<-xC= zO6ur#yO;;RG+a7aBe%N(u};45N8QQ$^j&;BDeQFe9>6E{l$r*dPFg3%I(e~EKlT*7 zBF(>+b!aDFN;91tWa{WIrEY&(T9lf;$p|heMAGv zAV;@fog+FC?-C*#VUy-r<6Tzc-NM)M8t-c;6C|2Yx|rulK&ow4*;}g5c-9=V(4=-; zAckj6s_I{|VmNKL_0}uVLa4Hy(^@)Qn7CAe2+;1eV&}hm2&b#y3S6APxoPzFIxuCZ z;M@~`0yuE}>_-HPNxIz}f(3nY^`L?irBt3CkQjRvymo_XooPyypDrhM+&)XTnAq%~QX?Lcsa1JI^B zYuVB=@r1M_$NBRl))ZGD_dN`K`YPdc-V6+b2RK0jhaZnzoIQAT^j-|hNT5iV+Ig!8 zMjc#@O%Ut^+&m0MMu~d!D@^#jwGrRi-q4mU-w~z1@x30BgLr=z>=uboFA`8J!8Bm7 zGuKqv_uJP$3s zQE4=LYw0|uFNb(Yi>iVAs8tAv9KEba9ecQ{n*w*u*9BlAe*3drHX|LS(ykS&oA!gO z5oT-!1gONX{(KN&uXm5^oYSC-wS~>zCD~L-4;>*==paYEQ+UaKR{Tr}rN-P6vY8VH zE2UnWZL!kYJd=c?t;V~Pfm8E{di>vTBCaLt?kdkSjU+GjtGE7>NOSeJ@A;99hr428 ztNuJaAtsfDo){SySWpW}knvuf@ymWNq!}=P8Raj@rlWPyQzf>o(Z760rM7qFNYe+u z^Z`FT@1w$HOTyx1e)Zn-YzNbyw+Za#w)01B(o$w@(pLFPDCH(AC2^$}o^%#~0T&x= zK+u#8MwWK#l{+rC7l?0eWV)^x{r6Rjfx72Yw?GSuQQ`JX^0nFdx_VH3wXPnt*;6D9 z45tC{B=y!}IH03;J*qB%BnU$|y(_do{l2rvxH-{oT(BPzkL$kU?Mn}Y)}K1EG1PD% z)HQ5QQuMeS8277+)HAopTPdKGleQT?Smf!Fnpx5SW~hz-h>3s)0c8oov4V3@ntJw& zGoAPw)!(A->Rx@tv?Q_xCvr)T^*0uz>AC)dWTX(HgIwq+oKip&1Su8RvngRny;-GJ z-5##2PP+Ie+QmJtd~GtYYb8)LslFII^5Hc!bX^P~T&@YpwsNo~rVm*&|c%68_^vd?;s-OL+7Zg9eAqGXQKeL-k zn_c-g{z?K8qx^J5!fDbCRpk4-INq5K1SbEThOHNolR{+{p#`?hk(Ez{`GJG%28vpoS?|T#-cnxFIQ^rreB# z^*c`0w+5wZ4dcxsXOw=oQ76>TuV#+@lrBhd1Rv3SHRV+$nkcD6cT7m+htJaVQUP8> zD^d*ntUh*Fx^C>qBtS#0?&vo+YvS4d1iwrwslb^gMbxGiIY$SEi3~J2gxmpAqpVxD z1ihAi{s{S$2Fey;mNUz11HlSqVh%=_7$~3<-?ykNHZg|y@u~TxK)3z^SFLnps}lTW zFJpF03sruo3qe;KcZ$?gi{V*CAY=u*B#qeHQf{kyc>EbI`^t2Q{^9Ku)noN$^WdEa za$QIO#)f5LJWCphdV?IhayRcTX}~{mV8w0aQ>PJiK=GmX$Z-c}4=BOOT@Ba-G%9y@ zq`}wjQ7-uv+%xWA;7$aV5pTL*{b>q3TiJo~J2_dQ5WwPI;*IXRR9NSFESa#_UgT{c zuH_RmWF+|ZeB>oW>BVR>;4<@tqfpO&Bdcqrdf_AKBk7<6_XEJAMNJXjLh>~vX_ad5 zkJ_Jzw!A2QhC3OV^4!7mkn2ReJEQkz>b3NbTjK$y&y{A$K(0AMZz99gai&_@we%eE z@2te5*_3=+pL!-&nzl@f9stA$&DXpI_jO%&4^pKE+ngS}D&_+&9B>e<65|-jxwz$2 z9wgNPyEXAM>=ty|)$0+0Eov0I_H$VmXpQIQal0aez=mq^+ah8TitEj>d=ka$T4wD5 zkwulk{b%{@H4-6D&8YiQR!L;K5~L=o&ZT)sy->oH7R#(Q!Sq<^6{9!>q%o<|y87OB zxKVA>BiJ!Lt>X-8KAE?`1c+6w)Eg5%?jio{+Z5l1ocm2{I$`2O6&}2Yx;J<|ItxAe zpk68H6{n1USCOCDt3PprUU zRSeWc&h~Gc-EYYdG9|_Fa_i%%epqUn0&Lri9{Vua8o~6$Ut6oODRr1&&3TSstxvEJ zVl#XlM)Pv4=^d9z7D3fRDSZ%}9pShE!3m4n#jf0gE$IJsSPB2tVI}BcUAgw#h9x%X zM;Vq-W+C*YAVwRu)#Db6=+6^=5+yFlyIU<^8zPi8wGJy4n_%6Q2Sm)TWvavk?Z_a{ zkh92k<1YgBvwgd@`N%FD@MQ@~wC+8iij~qX4oWEWBF5)#bCN7Fb@g%YvME?WsCsaY zUA6}bR=x^$Mx+_9+q1E=`mhT!)>V-tOk2rF2sF`x*ZSe#oM_9X%5@@lgE-r*WEvd? zZSDKKr5Q9$nY-I9Htnwdp=?I93#DLM0Ret)g;_|uFg)Wh!;0WMp#!tC{-@B>Gj9A8 znoWXMA%t{b{|{+__d3ffwFM$B&Jf?x^p^O7b{9?oud9V4=$Vf}HML*H=50^mh?Il6 zRlU|%kN)^ATH+rRD&k!Ua+S|Fb@^3?sArsE-*|?uragf=oZc+EL3$I2_vX%cZ#uN0 znCZ=vRMOp>uH1NU)ybm;c{nv{@kDi*sV}^v3|Sacd?CP zP>+pbFx}{H!1#;{O^QE3ak=c!!?-_uTCfnSoWT_3XM( z)eAELgDccn}7eJ>0dtGg6bK!P#s>?q^NE0)KcYW+D|arv?l z;B719UM;_D7l2P!OTXL)0;Dyzrj&?+oQ-{yTebRN5n+TKgVy|mum;J)Y#k4a3N&WCiAv8m+{$!nS!mu5;V5X7_uF!fgCV! z2oD<7iO>R%^X`F}^6u>0xt zO{uJc_pqoF2z*oM{QVJXZ^kvxH50B0#`tOd}MF_xK1UYVA3IopAJB!tM z+sUQ6rUgk#QS>~`!MAF;sQpor!*K!bs`7}EJ#J3K^@Z{wz# z^@V`AP1D6@GK@kLMaYC6lU-6hmvbgla{x?}0PL3U`G{|IQ3*^b$X7d$O;t5iCBs^- z-t+tA81i_+)l@;lpjEN@>MQ7SFlW-ZvfZBWiQET~KpwUHY^~H{s?KAsrwtZ`O>iW1 zODtiwoqeXO{3%0dggMo7^T3yyR1jyq{f|Psed+A_nEGTHIb{)KqGmkyH)!&`T_Q)J z?(>Csym`$qL8S0!dw9#+$?am{zB(zQ6{m=}x=PgAQTSkV(_`vBNva&)A}Ra=h58Ty>c72mBUH8v&pZ z>UqLdAYhE4CgDf`$9^IgWQC#$^NCroq8QO~x(JL*RD+wC1sA|@graG|pckf$4%3P`Mxo1^rrS362Mg!xv;3mXH2d1+8&dhJ!P!Lt(u5ah>u zOw`tlsR>iK`L*nWpd zlOiofWIid!sB*2cZH5zg1`zEn%z-EPod(uqtXvM`Fj3u#aM`nleQ_J7-MJ6SjfNe8 z0OxF|S_tbLc=13##)sK#LhyPHph9L|%x2TYLFNjPs&jy;B|pqKD4>9-ZIQRW#=Cow z_k|koXNY1sTo7&@L8lbftWKN5=e+fH4?YL`9pj~MqGH>VoQ!Suf>jKlQT64#Q%$f7 z4wq3s)_tDpr}e<{@Vg^Gx_ST+F{yU;X!q-Zec4P}SD<>C_Z#A4{~gjS_&k9fL869V zbfi$!4ls@sirRUkLs7SO2&V7U=hy9vkfM8Ag-f{{3CWVrw+Jo`k?pTUomQqdaalf3 zBIsnU+%hP7yGJc@db{%|y_F;Zy0@+0(%V)F9i_MONcXl&_ZB9O2sXoYZ@VNeD89Qa z%cGo29EH94kO4O8oW-qJO z*00zLd7qNKY=`boPP{)Ir`TIm-o2zN^!VbMdh^;`>hg6Y+OlFL~R@`{=;O!x+>gKzi> zPF9Q7gtJwjq-)lpeUsQIaG*%SF8Js$d`nMw55IX%eKHiWq#~cC6>LJR6S*W&{Pewo zf)VdqepT>e*}j|Dt8=jRw0ua9YW4QL8Cg+>7&W->H@ssT=wgr273|U4S@?>#{M1R! zYWHJO4NLq;)ksn;_2Mq^xb%bx%nXIhv-gqKLXSx0|4n%5V5NOgM9#_$vC8-Ot;)4l z2BKM<893{4>iuOB)w7UN;E7kV6an!K@BwN@qoq7{#}7 zwjz}ehrqR}K8UnZUto3eHu@5t?U`EGrhw?H|<;rv! zR65gUc|p`Iel>pa2-H;EsK`{=ufn!!p%8V`dm+px3bObz?BEvMl)T&YND0gh+NF04 zJCqgSe3T*GLK(RYQ%g;CIF&W3RQBrrdoStZ-r#L@i3xbC+X=~Z1W5`nLh*1DGLAF- zc=s4PxlwsGc+*|5`n;a*{x<1{oP9R1P18PSJP{Bzs-D4@k-;K;eo)ok0U&)D)yJf}(&TpaMk!A%J2rSZRF~d`yV-g^&P>#bTS; zGKZ#VHVryD9NDooH8kQPCx%CrbVov62K-EcA}+R^{#ocm3h@=*8t&y^(id%yR2 z?z!iEXnIv-TndyuXH%u3_T@uGGWv34oSW)}2c-2QS6GlDPmd_kfuld-usv_Kbpnnb z@wGDVl5lVdgjuDx9I%7HSQa_gN&|u`!ro0s;pDAAV5uVzc%tt=V|?h-v1M5{)!{>n z3O2zb?GT$2Ib;}4)EuSRtfhztR_Ac~cm?~5qf~>Eb(@E&hTmhv=O#*+1cu6RRs5r? zL_UIV3#H2$@|KGvH1q`XDk@ld1f#mB0KBuApsg*B2y3ijI}x5(Gsw5uMHy{X~`jG~v>$equ5Cw6Td()1E^7iAu$?2h$4- zd%|c#G5iSUiAjUJVpea|5zr64SyE9tyj?rIRyu;$9Tkl>%_4b=BF@O*xmGJo``I!MDPw?&@W!wknpM6)pFaU`Aeu{1E`L=+)*;23xcBz za}Q!_7evUvOi9)G?+Mdf4UD6j>M*&vt9WI@+Qe}p9WHF)M3n!)KXqFqQV3<6Q}+7Z zeB@?!4z>YTaJ!9jOY8?p(YVKFUOupitH+IJk9qc?O=v$cx`%~$M2gA5D-9nT_xdx5-mS!IsWglr#1hT)Dl_vVQOBl((h%(dzaLw%`Y;=|B^_>F1 zw%Mn`UTHZ>^c$COANQ^-1u*gCM80T=SdXF((;HeBtR22jUs!#gq+ATNUGMGU zs=t|=yrsq(TjS=(KNZGcqWTa*1#uO_z7e4h@oK91y{$ASz8S=Oam~!PHF|3^p5hGP zn9jfg)M?bgG@4vn$M>Q_Z@T}ilcU%7vR`peMSTKf2-0(-*tDNw-x=|WuvMPobpS11 zoG?8s+kJy&g>a?u6jxGSSkT24=xQG|044TOXep04C^!X+@!*zhv#d)`-Lk+_5(ENqa)jHkzNjujgR zv7*wOlM5}!;d-oiX%!M-ej3~&Nh2r%kuj`~Sv-JN>6Mbr&x6@K@s3deFB@u5S(Z%`VL|hNA_VdF=K$kYn&hAmRSX=O!4-zc@RwfOa2iERv zu7tZ6Hw&nT$!0;w2`jqzNNXr_E*yGG@FGF~A_9Kp&)vBhg2SAdxa}}lJMzEMv;RsO z6@V34vonB{&mD1d-R&{~j6(~bMDrLUMRS}BoEYb(MVFhg>t6@A;6>x($9`% z8tWR3M*Z(NMT_OyN}Wzkx2-ENxe@|hoY_TM+Hf;GM}~nwX-LJYCgcG;>G92@1B9L||nul<(BpfW>KRV4-$aOqhRp8EWj&{w& z0AH_}6Xr)PCeD>bfmV3?6zoL$AxPln2fk$Au`k$;sfdMvNJR_=Zgf*ij13Y3r{|bs zkBh1jGB`LzU-T?I&_)AxoqmnMe?OV68Nv%WX4tbT>J57rapo_K*x+7u1B(u{nLEU1 z{&I_sh-KwzZ);I3<9fX#(jSH-5~{`KM$hp=NEF|Ou2__7o6Xwf;Sg<$iy9HbdPS#) z@mui-zKHL+`P*qaIH5hB#V$wAKYqZW*SM4Pd7D$C&x@zgWR6)kniS|rzh=74={IlS z>mo5CwI|RW`A`tV-w$S12fT4Gyrdg2ynv-U1coP|jzVrJsc8!iuH~E)H(t-v$nu@d zb!62BZI~OLOXh5NLKEd@)*|PGnx)sWcva?&nH;ov$*$m7`#@IYZ0W9_NQGM;nQhx* z-F0r&UG=+kCv=vyFD@6GV6z|*mD4KpnNhZ{i|ES<0#@c@d7;pW044~xO_I-cU#T&~ z%7^?u!DlX>`5sjYWkgSPWskB-1TS5#aPu1}C=+BHX^ajv3R8n*n8b*xX+AI8-1y(M zYJ@jW`+L-S)64zP2OGX@^Ja!v@AY+-&CNW@vK}=9zh4VV+k}(iAr|q9{v&z!le;h? zP>qv;K-JB-9~6$|C0`ijYCBXYhvsAW>fq&&U*)DC94Ek2I9-CMW%5o zdxj;U1zz;M??Qf8nS`&onJI?uf=3(kJwo*H{U!N!;mpD8Nnr^)1IU?hfzm+O>;UPa z?M*db-`GxImLv2X)ISH~F1)q_LC!mgnXynefBXtwMD^`+odfL&T|iX@?vkhUauMKv zU3Py?vfTs!R%epn!sk9^4vrZ?dIzqOtdb}QZs_7%3b}O+=){OFEe_o0!#cZy?VUIi z^}jmb#o^Z90I-WZ1G4a*;+0$%KJ&>BAIbH`z)y*c8Y0d=Z9Jhr@JP|eC{O6Oe5Wb7 zTk5;>s$;|2crJ2G%6P;{1?S;na5o_0f5ML3XKpz;dhL~!jo?W*B>(EwH&(xdh`SiP zza-@4m)?J)q}J*Q{9CEf@1!Zyr@ff3N(cvm<4=!`U4zn^&#eE!*>Cx2N>;^C;Ps3c zcWpxZurd+{!t~o`WU8QalA!Z@dp_4ft(dt&rCGhFL>&~s*0l%>5^2Bs(1Kc9^i6f+Nxy|n1*4TwI;2~cL*p`1qw zywU9Bn{!BSc$*5|`_*rptz$^y)^pZi%i5;UVzKGjQD?JnlrJ&RJCau{@%J{G_Psx$ z>1>nG@-&DXzgP}589DXMuR5?(ki_efW2Y=}m7cOE{vLnIJ|~IRkx$tvcgZP3W!I$U zztNL+_w~_}hOEZrfCT5G_q{~LK=-tz^a@Uo01EU2Wh;LV_`G`zw$z27=Q0hH=i1=Eq7uAD4v#a9}XbOK0jTXwHO@~Yi33TSSwX|A9^Ue?jMrgJ0YKdxM=Cq}~ zUq9# ztmi;em`|qf#zNqJd@mB?G2^=)Fypbz^^hB9#>X+t_~ichuBXzqj5BMoB~9>0b0BT` z#hdN12y_;e-lhGs&FCJdx$1GV-(o5gdlK-?mOe2|xR#iS@jnMf0m%Q25J~Ep+4~ku zZ=P8%K3eeO7(5g;^o0Xoc7WTb5gA5RMO`OVO{sNW6~sIU48l+_*nD^+AqLkT4^0(x z`+t=CdthYJ5Ve}=bRr9VRDb$>MD9Dn!QIFqZS@n z5LQw`G^Cho#93S}l2g`2QNc01nxBwsCI^Tpq2r!5s9ZlSe}?!5?%7F6X!)^N-cid? zA59rxvuGkOfD;+DEf;KYq|i)ude-;cfopc+LH>i!>F zy*}D%Bl^s^R{8lSX>}mHCy{kB*L#Xj7Si6)q8^QomLMEz(Se}pi0KHVLg78`{vMlU z;1@RMacm2+8bw{5pKm?d{Mq80%>adD$!aXT)7_s?Fk(a==kXSO{!4obOCN!&Md=hI zD`aj?GtnG3nlnHXLWuSS?GwuMKyu);q29E>$&t3g#)&yoRwI0sR)&*G!(Z_ePPr>g z6fEc%68t(cv{aX!%TbtcXSl+IyUkaZsk7k_$>zgd_Urr6k%{gP`zF(#+*pFC7bxML zsy7NZ7#)e!fnL1sU(&_BFD8pDYMO|r=Ir1MRhiqh2#FUhOYt;Yoc?>2ot&cyhI+6# z2A=p3bwAGbTte%tcwU7jKQ zc4wObyJF&?2ZVQ_vG;j_u@+%8$nd8~8*ka7nYQRcM}<#_2)B9CKJq@PW;dtF6gc*NwlW>zTIl$|bgP z2WN+_w8hW-L5eXs6MZzBezM3uF-{mL`J}pT67vL4=o7AxC=>|YyMo^;3`^C`?rfVn zZ=ygq5!t17Z06r>)42|}-4{RA>f!RdZ{cyU8aD6SYTsii8kvCKfh?SPh{u_GY#0)6 zs;N-qtyty$Ow+QH&c2YzBdWBnd2YVj*p8jTbe8zf*)tutabt1gOwMf-BhEC^wsa> zr6BmB$*i*7?8c7VcDEK%>J?L7N> z+hP$i2PW{Uo=a;`YaSRRAkbToaO3{b{ar2+kaY+Dccs!^Q0G}Mb>fV!gd%i##vTx7 zb|(X{G@WRh?qS!x_4EauS!AZr+RpA8Z!w5G22ttiMGf;V8Yhm$yb3`Do=~wsH{17u zE&fh{9=(eLuy-tS05-==-(bP@GTxXrRe{tQnYr1%ocxF^u&1~?HLy02W+&Sxe|=PY zE0#D^iV-`2MVRc#%W2+0fG07!mZjyWdoPV1^$`pQ44t`9Tvh^?NW+bv=roRb)OPti z4M!WoFxe)9k6Vq?M@7%>$?yb7Ms>X%)%+zQ^!F5}YH^d9Xp4X4tPj$}*kFgn_e%@CsH$lHt@aMu4_qcY?~ax~ z6)PXkICK>KPdZiiQiwi9(K+TZ@Z@Bi_No!YhNm=!r!+WX zSmGV=QhrDOs&gJqD7(~c!du#*WW>O?=s z%+nfyOB~H^J#r+tQYP{W&vi|vkBFj()BGbl%1MeY!lrfB(z_{AWk$i9%4Dnl4DS=% zV_ave?1baeo~OUPz=+F+sL{vcX)BI>c(&ow<|%HFT^h|9>50@h(7vd#os+T6n?`1~ zebr(vTcvg2p&DXEZ%~wg6XY zo9pnEr^iZ||WH zQ1E!SDSwOZ1_56}HvIK@u%kIJ$p8ArVN0vc@)vnrV1RPj-h#crW|Uxf>^cdOnHW5i zA)H_aAkLd{fns+SPIP3(Jzu+@yq66CWLd(fXlK3F28I>^VcY&oU};eP>R=|x(U`2nebGfi{r znrLn#!C6=Un5)iV#Y=Q7SmMyoa@0a1IH(OeHmR5=i(mlb{e2+8s3BM9NkcMDJ7!o*s zF;7h={3;l~iN93re@MkxDp7))I#h{RW0DL5oOb@@2&TYFn`Ix&S^V1XP2I!FTYoaF z0L$6n(Jy}W>r#F7 zEQnor%TdXyFqcS4au=t_GKqglj=AkNurVP^9egaMk&S|RbIiwsvC8s~G9Dwlz>PM?-bOKG$eyoOeU$H0h|qyEoLx>w_?kiTpJG5Gv@ zAf8zQMUAQGd7?Ur;_u}C!u`u9Cu{>hmA#Fi_dE!7LlDKW+cnqT72`NEeCwm%#y1lan508mLKvMXOFT_vGg@( zuYZv0_n>Ku&`?CQ7=j8!RvNmWDka`MrJ*vuVC$x1E%AOA36)U5MHJ54OQZp5!Fcze zUu#Fq17n8sRX*1|ixw^PC{+=m%hbwV9|-**7tNpC7|cB+kAw#Li|jqIxyGdw5k+QH zIJB4tk#T8Ztr31mmZ&UcR7A@wY7;XncsMILsT>pMstS|TZ>%GI=MnO57lckht0W zZ7DG}Lh>g17TZ1Y0qs^-T${!L{X~BPG>3m+1_27!i4aT$4t8uTRWoB6-WW(~o|GCM zUU{Jqqv9)Lm(PEnNUCQc%N+0i$+bIt&E!q<^fNn~twEToE&|6#CC}%(7?UUD65eu) z89wd|?uFd^Hj#~XY0L{ZB*^UpHN;U;L(l2gpgr)e$n>rvow%H(IHy%RBku~PBNq&i zT~;O=NERjN=4|tsY40jrEt^fB1L(7GwQRU6aB-R436AQxfoBj%n%!%DLl(L$bP4~; zS@{4hOg<;O%8dCZ+g>K+rs`=56BzogoBF!yK4UVG&1K{IMqV#Q0%F`vPj;R|C#2? z8r20-)+9Po1wix1i#oV$edKBilqNB!5rCK8pfd)B$BZp{TL%R5AQo}9@2&fyebZ}L zClJ=r?$buVTtCVQ)dO4>x|YV8=cebv;F2$}A965-OLU4nh|EoaibbDY53P~aAlrv9 zoAeCcy$iocgd&7>A;>m4&Z*4xgI{~to|`g74C3`6=@XvhaitC8Ae5Z#6&?29?@kl? zL2@lP^^aZ|%`vUue>|?M2pV;KVt#oFlWEy?-&fd#X+CYJxdn zk?#rBv--{r`r~{&Za13CapPoN-2`&4%5A=Eh#j{%A9P?G#4B8weI{C6B2Chwbt^%ilp zf64*hUNic-;tuG?-J%E7naoU9+?hTDT}pY3X{%&*gfNiCXrgQSm#JW z!(*^$TVJ#d2uyHCvHZV7ir(}uR9YCBpv46NsuzH#POQsV! zU#eV zHj3Im+Yl$fZGON5MFb+k&E!PhQvdt6j^<9Uk2#8k?^x&i$-{oOYGl&V%t_0foSozF zAe!`o8F!la-7iJLAb$5tlhHR#i%A^__`p$=XI_NHdm+c&aE9W3&uwqs9@EY>wYYp5 zriRWNXscSTeb!T{sBV({h&;uCcIe_H{d>hfI`3PP5bO#DzC-MZzTbSVuqtizA(~%D z+jMmKII(d$n-5C9ZPqv9=nI4ssY+68&b8`RrEq^Yl07I$!vPMXHKjf+UEy|W zid(^&%lTa?8|ycQ}sKf$(}jiI5m zi?_~g6t~#b=C8H%a#$s-$2qV0dm)k)Dl3?7+$?Ei+z=L;Tml*X$AELQH)PqbR2dcz zXwql?^*MbAAuaq2hM>ali-jK<#VKyINu=o5wpMD!WG82hDLM! zHZ-mto`SW^l$IZ6vc5y0YeY*YbWeu76@ppjH!@e4xZOqTdP}gOJ!CF{JeVVwTT2dF zhdiK?OpR_il8+SVkyL7+sG!D$Kr-MjmBm>G?U%lIr zCdfMNkVl^AqfzmXD&)~d(=PLD(Vob1YE>B>~p1Uj2hXGolI4nF6$uQ11rodR8o8aoPmoDyh1c*Eq$bwbRl z+GKLRtL_idAAy`^lsj^yNoS};NYLGT`mE7Rj6NIG^6W*PY2e!$HK3_6r$#G%`y4G< zm@C#w)d-xlQng8lR;r3t3f>^2G%`v9CK8g$Ro`BRCyr~AA=1Y5Z=>mJy;YBM?9^Vb z%2(-ytK$%E885?yIaqJMKvt=Mz|6sUyDY299DL^sxTXf5={nCb0V6gTqPLt+#KWZl zc`Wg1=EglTCQ~07eXIH4K|7mZs{TGJ`a3|hC&Njd-QP^?f2P>1{?0dHof=cjtjoMHLa7T_#c*mVxWWu{KKV-tSI^hexbyz>O zVOT=5HoWi->^H{AT43z(nXUyI3TG|yiQbHVllk}RFCad1A<4xl)2#iYks*Aok7+H8fWU!e2+>;EmyF%0$M40o8T@x;7j3m2(A35;7 z->GVr;}xk23^2!81@dfM158IAKz=9NqH95hEI~{Zk?u0@->I^I3^9XG5Ze_nDPNS5 z15cPUQhF+ou34=O&0nC^kCV1vu|<9@@`Sd^KuP%{`w~$@;g`>lIIX+6E8_|uqp+x8 zw*V6!y`l1wtY*%P48FvBFnHtes=##!Y&v-sduu=%r}DDMrX)mD1R+hW4-VeE0gjUPpuW0$oK_B1`5|!km`AJRI=u&R}9|6r@||zN++t6j*>g3 z_(`{{e#=!S0tkuo*=XFh^)D_rFy4DTZ`PQ7Z|l^zP(s)kydRP_vNpi-sLU$Qy-S6$ z#K}tX7bUv_XUYiI**9*TA;NMr?NpJbU$VtHPVp>?QMyWO@j2s)=1f!|wJ&kUWO@w*ysVRem3j+!iZ?K1PF$!$K5^(2B2%{bO1fw8e;=?* zHZ)RWCfI@xDe!TAHx!9}5*Vbuv+i{&wL9{N~UPY)E~3`^id2 z(b8`?DHbiwV!;Ka{njq9`Z~%2H@>9{eD+`W3z`~ad(W4AKuS;MNcRGcy<`B8?1$YM za?W12jWn#ZjkMP2$|aI(XR&>modpeHujIz+$8q_RMsBl>{K+<=h~{crlzf9lG}Dln z$e734;?L&@M0?agRf-4L;_0yl8qM*xXzlg3fg7}eMw4WVpL80y#A&zTOv_&s! zEn@i5k;1<%9;7ur#d9e}9EQkMsjq7CLw9#VsRcSg2AM1Oi=nltM|WtB=4)U8RSo?k z#I5H(k>gOisJvD#;bO_*!--4Hlo0ivVr1|L0|fE-)_eb(U{+kf7D^sG(WG`_Jqpi*LAm$o+fj&o1}Y*!nE2g2{w9D2x4XCMUzc!4@~ow#D1Ec(1v{7I*zz?z=|4?=sAJw$MePjqoEr3W8cZq2I|` zY1ERL5){o`@@Kiqg7-Lxaz!gdnbGQkI_dcsqD(Q1YY^CDQ%{KaE#^LcI0VOtzdIN( z*PQ*n;!^OY-cKjDJUNah4sP5LVQnG13LGStpHTP6kM>C4@w%>M2c5B{mZsXG^Dc=V zlD%f4E$XdButmV8EY}cQ{J|`{TrX2>7a&Q$HA^MX1V2oBTlMb~rO^O-;6}6WHSK!W z4q4Rq%7C&oW?<+-b*`g(_UVp|G*3XmIf6;<3LuKULOeyA+ zPvaK68$X-{-&h-4@baow3;t@$ljnKjEcnf(cEO3?lC{?!gUC?$2$N{XxBX&S28}Vi z@?@E!H-+12GQrWgTF(?S4AE4At<^<0t09K3ffc8@f#UD^`m4Hx_aD|=sx(Jr8k*aM zp#vPn5u1~Byxq2uo+qfZ|ArXIAGDX_?=oMY0`k4yP-DMVmbETz~_Q6N`AaIH$kk`r@j_JMfG$>#(4r$vP z--PrP{{Y|ApJYjsK*yDD^OG(U>W`7PR;E*VMPL5$NTMIf#g+yEbVTa8Sae2F>Usai zF)FTsuMXw*^yl%E+wb0MMY$F8(4pM!jcN zUHEnRkHsD)QGVFEqCE+Su9DwFAK>zV@HsuXlLgfG{^=;Ys0^IL_YCR&D%<_{x5~N)lp+~#i>_rvLi|kRt4o|<&`Y+c zn=N|9wn1Vj{V%2N9xgxLWIq60&C(pjg#;R4?-3b|=}U$%J0-TA4?*-L-ku1q&}AH_w!|Wx zGB?@BukpA(aZq_-K~Gn(FJtJf_ZX+LRKXpbIkP8n14pwroIm-b*gQxq(n0Sc*;>mnLFG(${Mkj=8Z#Mity&ica1 z7_0Ubmq#sf!g<)PSUP5}&y=6W*(0cq_7M}4R+GaqQ5x& zZ5TF0D;Sp6t2#`IR9 zb-Ke*Y9Q2Te4xXlF;#QsZTK9w={84&ST~4<(7W5eTB)L5td9X{Ao9y9Cj?fhx1q#a zRqFj#;`wcWTt*+bE}XZi(pxPrm^+j=#8hM}_Cnhn^g_T~{NE}-N?GM~zX6;G(xC&B zpbUpf$#qDZC6rlv~(;tuFB{FZF&XLwW<>V}`Vh z6nI1lk{8U*&4Tn867r7U*2IRi)MtvzWk^d|19Q>6!1N)umTWGvQb<{WCf&Xi^Wlrm z_W3`LsUQ+X#Mh3BE!F-Utv0%)+IH>}E9+E?nNJs~tTPx!&KWF@jEtNMK>`thNE5*( znusuFSOw|km8Ei~HBL#HEFFOtvzq+x+NE%=g*2gLIb=&!sB-HQ_F6zOk&4o6=LeRE z+HAJ+&AAuCpE?VXV-~zC>w|5k@IyXxd&`qw@q{v#$eh0Li0jh=>gUK1EF?lfTd4yI z_Upb&f^5hrMIhN^F6RfLuMRby&>~?INnlI3?FBC=l0EMx1-}I%G`QIo^|nPf3tn-! z7tH)3=j95m^++bssrac#39t0~PSJ3xdC@;xGaSD-Qe0;;>rG<%yytFPr0G9`h5kMP=eq4%1@TwI9dO8QPXN z-gb`b4s%z*k&f#jJM!K?1-e@Ah&wz~^u&nC2gZJ}k-DAG^G!MCzyUqVal2`6 zcj;oIb5(o2aaVOlT*NNDuX}Ny6JwFA+BW~R==|w-Eg7|Qiw>MJt8dYPK66hYa2nHTkhyAp4mL_{Ysk+4t8;TWl8M%>-v4qSAgQ}Aq@Z4vy)C^Bs8KI48Ebc1(nm094t z)i&;}IA>hc>N?+nfIDI1qfsk!k8bFZ#*tTz`7g-)bM6r>NJ)p%iFidP9v3x!slEn7 z49x^lkWQuwCq5)WM)n?l0mmhb5Vk}7j^}?8z3hs=2i^q~h~&Q|$DI6Ll90hO)OK7& z*wETo>kGZTe&lv_BIIV->oY6lmpjuFBpp%)faDm25-Lo{m|{80{G@2|mpZGxDP z*?~9!NN6j%loPbuf2o*3NG{8yT8A{LMh>N<3Hj9_O&DMa7WN_?B!Dg%ifiQ+vvs}P zgcw{_n+<#gr_!|2>tZ4gOs<-SuKO?-FlFJdy9tTei0JM2_gRAoq%f87+J!9$=X67h&^(p zOMGB+%nA1#XMe1jDccJNmPf@S#Ihw%(*bKftN({@0#7)q`f_C;Gy94IF5B$D9c(sw_h- zb3p&|rn5D*=DB%H)(HW)R$ROfr5)A!fH67){M9JO*vf`9jPuM{M2rEZ%}_O3=-!22 zy9zP0+}UH_!ms;sQ7&Ac$WXY18UG(dC-Mu%kEx-VwXW6JPiYyunHx9uX;YUa2$FRS zZ*)I~fNlvkp@qfNjW8{-tX?=wrTKgJjh^p4H#z59FeKCx0czaF z`$;`FK9~!}CB-K}G`p-D#!W~vPBN8$EU;bRJ}e}op1O7;a;@x|$6Z=E7k>=rv@T^t zF6c!>BXO?o`r>$82S{3SNQ!jK;2LFHY!XBpHDNX~)Ym&0(Q0KRV7f>=r8h9vX*|k+ zoG5KK1T*)K7ePZppbg$zSY(t7<18XvnOS`*eIr}5)@4{ZH4Sbaw1Jeqp8MJeVP$_e z_YO@+Dg}j*-XS&DJMUa|%~phvFD_(Yg=hOgN4)grzO+E5Ebc=EddW zbMt)%^|_&AF|0|EXA@ZOMjvkcW?aXZ-HOPw>01I=Jl`mSMvT(i@r%%SostyR^R5`XZRq^N?y~jU@_LUQMXK=H0LDm+W_U$T%;4ccXla;fUZB8qPA@(u6!n zMR)~nm((k?S?S&V5w*;u9_<`&xwY?B$!jU^z5&EA*&o^2K`^aUZDM_hVALodnd<`* zWP;3wfYUxykHs5APge_e@R21EC?OQfquT@v)G|pzbd`EdiFa$Mw@z5jzk%FgImyRe z!(C%;hpE&hY#?68`!V{Ap|kI>6uQ ziKVW8^I7lw9`7o3z03D){0*X>JUfp%1D$$O9<>+*e~H|v0VgQ4=v5B!IpS<_grlr6 z^V&H_dA=vKiPaY$%-Wt3drGcsfw*CyLA33YNaG{upCqUkg#P9 z<_cWGrNNDksaHb-7lJn0fZfSlKuDA9nk7#CzSO@Op}rt>#ph`vk0Kw<`HtgB>!fuW zWu>jIL>Nck#@s-=N-sEvS>&aJwjYw>PHQJQ>z0dM*T>iQ0pmrqX~0|3xgE-hdhC zt8iJBU3hS{kjM?D`yJd(cKk(+*9YX>M8_w;wi5?uHmvjQI6`KQaYGbrHs|J{gv9=0 z;Q! z0(XQ^E$an=TD#H4;BkK3^d0l_Q4%wf6ykah=7~&J?WH8lIoH6^DVg;xwzChN7b9oB z5I||61{RA9nxevjUNED3e5}_N^Za}LUH)$9iIKlZ5Ggh5nH*LWE}5d9K_4XeeSU8< zpQ;g0q=q0&+>%rjhm(b0WWmZVthg00KnsB_TnhQI*3Qx>((ZhV=e`hh7*f;Ra3DixkVyf@K}92POE#QO!F#c<#7g1wXmm7r1b zlKJyr9ZsRfJjK_#1uVp%Ha7HH zRcMU!uT>5=10WDt|4Ar=qV9eVt(2P$o@tNIT(s7~ptDNk_X-S`N`0c0Rz)iXPL}dcc3|E1eMtyZp{O$moaiF( zdFTS$gd;l-jFsBEe&=*GC)Nt;@+MPBIq0nVKVLFivSi|Tzt_BG3pZYFWoZ9o4*n0I zL717dpw&d@jV|a|xK7WTS-_s8Q#+Sm(dGR|MQnL@y%<~G=WgcRL*Rj9#AsN;91A1n zU$2Se(OEQmL+kyVTGTKw8Z);m=<2OawGi`>&2ky$8!^koJ#r|LzK@*y*NsG>6xb#i;@Noo2S zq-W34cWou0Oz^g01wU1v^>1(XadS|0j80-Nsnp(M;bGha(#{3a1T7!T+!*K!j732% z4Y4EA+U=Z;I7!&r$hE_ygp>E7)<`3b46L zJ%XmK;3l$PR}ha&2Q__Bd8bm>tNd-??=Ajb;BN{YyW0H!{V$+l4S4&}x7`O7qg$*T4r^SDo1CRC&lGH`k3dOfV4uyj&MBYH6DetWD|3eE_z&ZR(hqMaByX8Sv70-}%QSPmaD)-iz56bi)em%+d?A01PmMlbAd34sR zO@||qNQ4qNS$^T)Inw&+bdjG~>pZ#TXg6l}FY!J}22xm+#d1KVd%6%i__5~)3k^~H zsUR-2Y&>wgaCU4xk}-B9{j+2wD4*~WS_hH?KUH#uBpeC!L0{2|5t7(UX{w`|r?`kV zMOrUqqn$EIE+el$r?21qHl$-%$^SGZ9YYcW+Go1l1N9db0E~N9(aFjZLYm;4aO{d= zzIeQ(6u`aB_~A~=%H%ck?XOr|Dy(!r_;A9CT3bu>D8&9)hn6O>?2d%egwf34K)=l> zF-gvIakA?CeWqd+Jq|=|qO!oEO`j;9ZgfJBZ}c}Q5=2ZmZvhMe_slxRyV?9>+1h59 zxh`v@J}$jFjvE<=IN+2$%D@>Nwr9Axwh%AdyN-Oa{DAS< zC}ViRX9h7G!XGjo;)iaO#>ITX|6emcZ<}9hB&?D{M)e!}^qY`8^%RRws?JLdrJp# zP7-(1cj~_+#1nd%qeNv?-AwC_p7@rI;7MgK=w7s!5KcMf^=}v*)E$as@j(9dwhjpp zVXb1(2!*He244%ZkGUlmAS>H}KsC)j4GEa_gPxZiRRzHdgR25*>Wi!46#6(FxN$0u zYKgp!ygmnv73cqGH8V=a)xz-XxX5Bcv7b|h=g2Q0QM1@~Q{SUu+p#~}g4?`vsb#N( zb&lli0E;4vi)<|MA~oNup0(@n#p9vN2hUL}_;ek}b?@@o2)-5uu(}|Vo+tEcfeHy! zzitBf@^LjZ=|?qqoWvdX#E|_Z1dw1%VN`5hqV$Y0RZhFDHJ zBrMDEYeY%Bd$NBK>n!+Tnb2grQO@|x!PRwwgd$b>i8*HSQqW@7GP7-(po87!i{UGp zUk80|QdF?c{A0VKf~nI=*Iv!e6P^3PPwl3=WdP>8hub7%dN+BBCGa!_@5nsO_72>~ zjXgd0NreAF+v{Hu=_SJ|s^A*P+u?seN2OdbyxRvTDWFmr28J@F-o_H|ic;?ZAzoKP zE3>6Z% zKBNfjxp4w%fj;QB`0#)0enrA9v;;5`r!tZDMdJW%tamiuHjPh<|C#&mjkO$}2iT-&!)x~@HN9r7z!*cX08FqhX@ z^dokEr$XezxZ(^V996OvPhDnjI-yk3*r%8$9{kL)RTA3FT48crw~p!#yagv|op0Q` zsUyleo^&{%PliaYn=Ot++T6t2OCrNPm~JWFLnz$^@MEHf7eS^vQ3H5!l&4WXgdqY$^ zDKZL6G3$+iKj#Cd;R(|wI21r1-`^SWj%$%dqVkn&$>?olsAfqAb(dza*yC+D$f$Ri z9k|9Tfhumu5FE%I>plSe0Q^j(vrKFyRpeS!Qx&F!{3HiK3&bB*39DY=TNbvOgBLML zb^nxW)6Grq&gNe4uP&GvKE~dcrnew;`giE0mQ455-)MS0CW^ie|B8uTmosWnk~b%&YGIdU)Tr5ogtcR{SWB}dM{{4}vo z`wY*?Xg0)=yemM_{Hi)Vzb};XI!C&L!I7+*=yFfXV&}5lJ~QcoLnfI;ykX*DA5tuk z#GT}N4$}TM_E<)1`4gtvbHcHL^#k>#~ee*D(HW;_q1gZsBYwva|TE zs39F>M`HKRkq=4g6B!<A|knh9eXLo06C;PJfHNxQaM_ArV7<+u=$*`2Xjby3N)0)d4UT zKS?Tlc|wd-NNYuaT>NF+1ABi;K1_+nixTWRojjVVT)?X5JM3!G|CLI+Zdq(s)nW2~ zT_(#A^k`{C)L6LuZsy`;#X21evF{7FT27(dQuB~{WtgP96)qZv>Q3SRoniLO*P?B<=z<(`>144E5%;FE zbIpaZAHC7Ti>d;8NrUUoL*Axfls-)qSaxVUtiM8H|Dcob6fe`MF#v_5UzmB+ZEpKq z5mCQZx(c*xdL1@N#>yOX)fdiw+kRUFa=*A2x9!E#s+Yjys**_qPUtPie7RfHNiD7k zE&dk^8zkaU3kzC`vS$kMv9^V$)DSbY#Jj7+yQw7W(~_*JXjVvk=1&AI9`B!hVw5-a zUk7jcNokhqyQkDd63aw1xvF>r2f^e0AzVf z85(e!y_IHTQOvdO?_+f%$KmiK1i*#KnG2spLKGY)M6u{51&O&YGb7KI{FR>KuORXx z!lTu2-A-mCpR7n%2^Dn8HkKjIuvF-j{a!br-Z(sm$~KgU;XV*XR1c~Xnd(SvLM*nG zxLO`+Yyq1f&kN_d69d=%ba(8H`n#NRiaLD`{)Ldb`&@gUJuSQJLHaqnKXW%(y9els zz(8RUu*(%}TUhX^D{vD)h#m{?CvUA1;TX`MBdWzEiv{&X+OeF1GR^0wr1KtcoFd@Q zbHXyovVyn}jJc`JF-XVSLL`7{6V=c<8X?juqPyu%e!M=q>%VAD_Bt4GH7Zv{x#Jmg zi{P<__zyFfs<(!lpq;9d>U-$0bOz?~d?${S23Yh~hg z^Q_L1_Dqax3y0q535BTOGqq11l(9r+Vj@<9Rmv=+%d5^83=y0`6cY*X_R_)65sg$6 zDO~)VJj=+(brEr)tk4*?=JOd=YF^cRt~vWLOL%R|V)=qK5N`gb5FS%^4qVRb)U=U7 zPk-FjdzE_4!75~xmELv0YqJEsk#m;*FldBaqg6!*J9~;hPzYd-5SW=+WZPUt0pK7T zD|r-3J3)tfIIvV93|REgYRnSsv(X^3&;SD4EZD&ezp4|9Bkqm6T#oT96I49}tV3WV zNfmXnuRVfx5wOato@~#5^FVXrC4vEhg!u;CXqiUcrmh!ZH_C(O%Q^+C6uL5`CxNVW zG)2eiGFpKJfq<2@X;u(gv@Qxl3e4%PQN^s-Q$ij=*)BVP^p*FVppDtF$5G}Y%3t&s zdI*U^xL|K+J4s6gN>sSu30=>391xX^CNUA44F8rz@2TtRfGk+II7U^jvm2ZsTvixFsbSww~kQQSkzdGTzm)<2X=kHVaCXg-2j)x-de)g-dt{-XS9X z!+i6Z%4@eBzb$+>2(YGr;)D_)T$!Bj;yJ9)En z38xK>>b?>VL^8GSgVNB@Wg-~b?`@P@M)I#WnuqRC(sI%ur8bdeG}aB2F(s90fE&GR z_L$pkEq{OOlP>Y+q{d#sbE4P8tPvURMYh(3T{zdRo|?1llbQ@Q4m#dRCMZN=*EgcZ zK%vRfD#*R1RkMGljxKeO+$n*p;@-<6?mLSr%9`%_USuY%0Nr_nsIu?J3g5%sk9#oz&7;q_c(w;7)KJ?af^zH~2&=v1QG9j#VG#n>A*S9=?36A86 z@)zo%0mE`Jd~zMgy>0Wk9IK7yqQ#sGE2Ka8`e&C2uiL6uY-w(@s(a#p^DXLhz4e1R{D1;MO`IMw)EQ_r@01ihzt!i!y|YW zR}hJCa5;epxhWQxXI2G{$^Vsq!ligM8U9hPrp$x0JL87bXpY6PDpJr`pMr(YUXv`p zf_pO$dWzlBbk-h|K#x>(EY&fVE#FWH;25Dh{`fG5e_&>?(Nnw)s6L`6SY%vkQSCiN z>T)qB?NECe)#EKlcLZXGk;3v=Q_SI${IhkA=(k~0&>fTmRL~HqRE^tQa@d1*g4opx$ncuGoCQR(o-D&t?|3fv_zfV@rl2@y~8OeMN& zYV^YI9%*OEn*0=`z=D9-tol2px@6PagPcB>2WU=&m@}8%uaVTpMkHx8$XGn`%;(}e z3>dJnq0=~WF@nd+uqEM${6|j-u|86W>+kf;VWwZ6&^31XP2}su@PRWB77CwH=Q3oU zX-D{7q&~4cQSO-d)yj+dav!^q7peWaSo&oh)gW5g_4O^6?%kI<^gFCqBNlL0@qEP; zn0u*ORFES1bf64_XBpRHSX(rTb+X%MK7Nh_ttg%`JU*{^V9sPS2x|xi8IwlCzs6O6 zPO3vx%uQ}S563&+$Tht-h$&yXTvns>swV5o#^Ci#K-~}@l=nf+jnH>)AGptK`4Xyb zqo6{r)yrrR1x>hMH|?pP$qoqHfoPVzJJRM$;H}ypkh+?Gn6{9!fss+C3v>(2$f+c{ z4XxFi&cwqFY7grxc�H#CyJxSIJT+hk`6tvToSw|Ex764n7K#JtsvMH{IVAj2O4L zQTMl^0{2fDOB1KtHnseRXj9w{Fcr-IS(ujt%n%PURs@Et*VWuwiLA0JI(}Ow*OqLZ z884(ip}hv?m=X6lms5>N7~SHDA_^B#pIN`aQBZ@~#|u#tJV$9{Zo#BG2gow^aeCkS z488lgGGo0zbCu{OYRsSUVcLPp96wlGktk0$;-Dw^+pni$t* z6L*M6`^ZHE>eqWSG>*;q`S%2$VBfbxJ=m~JZ4wv!gl_2lI8<(l?8h3U7ahP8kPPa< zu23pqJkZ^LcX6U6>I&704kQMThXzCv3!IQTs+J80qlg9uT2!Jd#U6bHgYBS>=ct9f zI(kq!^XyA3a&4^*B+{xwNa%xX5`* z*Yk8?si?_i2;}FQ@0=oI-abF7BWH{;IkNz|NMXO-<%~19-D=RO)Ur8I`lpx3Y*QjT z9SmOdH8dc%kq(^A4|60%(OMn#u@qM3x1pY;)2lAFlfbmpCP%X>oGq2s{tYNL0 zJE8>>t^Jw#WF|-FbI3hE?5HnxMoJPmOF6kT|6gL4+zXdGmt6GVh|#p37wqq`-%uQL z^n4LunpD}4m=#RIBhkf5^Ve}>TWnu_waCc@C3(~AK{{+}X(<**KvBc?OfKsUUIaZN^LO`DG(zO^=r?)&!RHi6>81J{LnMOw$ap& z^J3dpKAdf{_8|)Usp89=W>ywUpaGBaX+Jx3#+~h4aTO0iQeQd*G&p#BaXBP_=b^P_ z8F{`AxEgBL zLpdVqII;1ETaL>%CNeQtMv~d3!f;B8S2!`pLQ&i?VhSdhsF5Pm`{p1Drc?;$fH!KI zsPdZ@=aytw@Qg@y|CM49Da6#hj+yBSF)=_ZEVwk~7#oE)&GmB%a)*#_1U)~UVUfmb z0#cDBh%#5qm_B`azsQq(-CtMnL$c)b=$W)8vuFp>FVB5wTS3k#8d=_~oh$d$OW1bk zJtZE^w@y!tIS>dN%P>R#b1S4`D6h z!;P>oVp&HuL%i@<1BXi2X=C4Ihe+2o{#Z|G2#HQZbR`h4{E_lb6%P2I?w+_-_VBmq72S!#>)8pbU{gm-(HjTH zNrzXy*6&A&_8E2ahzc&esihhbq-EK zzDLV5XzB)-E}kKn`RIi{LhxRy%*K=_4hr1!dmv8dLeB|Tm&Cs!TN4-bbe~z414W1K zn-d!K!yz<}jnCKz)KI6)bylOeetL>~QzFvg4EZE9zv|@2xCf7Rzlf;1*%OjTuo8&? zSJl~RGNMI`gf~RMT@#*?A;O+}D9Bt(*hd>8B6CWHC-goiByNSkCKDoKK;#(`$?%

    R4ffFya-T9@v z;9j~LtirIk#d8h>i#K~pZ1G}9Q=+=<6)RhsHBH zahBlxH<_hQi>C`>R2LXmTt36%3s@%lhE~Pjy``tqWc8-tEFM`O+2Zj|A;xT_$BW@a zFTzjk2xn#B&es&4vfF&#R~6dD73`v}_23BnZLpU@oFg@mUM0pki*~`~x@Zy@EpE}o zHe%~ly3-$=rs^-kqGgy0ij=&#;x|!3g@BzI=0#gIF-KhhE@skzrFX5R7NZ%k*}0>E z{mN_x5$rWB3i^&oMTWI6CphO`GtPD~a+qS|p0poQvK_Oge)dssedGzDNpYzl0tC#_ zW!{Q=0bW7F>EZ|=`7_SBL||P6UreA zzs_2=9(%i%C;fRsnc8cg%{=04iG%=<$XZR2Q8BNA9D&Awg_zNgL?LDr$YX@!i2<>) z{tTVb`g_2IFcF`*7hREf{pG^+?JKb3#s80Q^$WGtRE5KOgkBcYq|xei+Ulp#GC2T& zPFlO2-Ypsh!*;Zv1EL*umyR0qlQbWxcGQgL#}>1Y?*d9&SSb_WM_pTm)`mKX@aJ$P zdVl!}&mVE{-b8F=u`q8eTjmzk$2e?u_5_a2Y#VG7nUn%gH_1&R?xON0xsOD~dB?Sz znj@2vGdojZoKzS`g@uvL*;J_JK9R?HCNmF(?s|Be+-N6CX9rHq%xjoS94wHYzqTJH z#!r6xge9EI<~P;%;OVS1|H-kZE22*$KSoA|3z`lSX)4Lxj_e>s2gVRV;hw{z=V*=b zR^~bs+uu2d$y~Jt_;yZ8{S9=`I=ap$VlPin`f?&dctT@D2z*bFXiO@bz)3B~j=Y|n4CSh`;*_Qr z-Ce~6lpGFJC5z<=*;|`rj10NS$$d_OV7cA6MH?fVbInxpd^FF&PTLIm`ZSjVkQiHX z#_E%CoHnadH#XOIELy8SmW;&m*Ftb;q`034_e_iABwwA`EieR#?>7#%*sTd%XCG5^ zpx2xfxZ&#J_!g@9mEc| zQ)Zh4=VaOsJ)cO1Q&j~UaY0;)&qlsGJHNLmgGV4#rDcB}H4=iUjm8tgwK$%p4)n8OX071y>S0mwNSYtJIhX%Y*JBC(QJ1405h+6$ zv1p!Txd$-~jEw6Qsrv8$86E?@i)xz!JqLe8VwACKGS?zqz85aTzFa=aA+q>Y}0pZcpfI z>Pd~H@4&sYQWst@DLXsh32mWx;ezB@H{CYF6I#QMNJq2pCLmx>j(O)*;k+bZS!Y}% zAb;DL?areyg$J31Jj941!fX4+rOvc@EeZ=#xdRovB)aAcRgX$^O@S`VjYOGYx;_SA1h8)rr(HV10s+?HBpZoJ zjY|eUV~tBvgno}^`aCgK7&{*e8{CYgWlJF(*i}p=mLrV_=RJv)Vx@N(qXi9o7sh)~ ztmF&U0l;Iqny+3cxEC4hr2hG2)eA2g43hg~`h^&n!J*DsBPUmcv|X*#NJsYA({^ON zpcYm|W~MLvy7?YtkHICh2?(2ZAn>qvMSYSuaWf1}aIL&(l@$q{aHzDeCE0bvTcskV z`09sAkUo@Jjw~wdt-@9+y;ZO>%SUM)Y)z7a?JK=ivS0P7gUeTPxog-LjIbn(eMaVb zPti+UXCQP>(Sv*`D;o--V6Hn62rVdQPUlFBj8G#~1E&tz%yMKOH=M2ZrnWBrG4Iqh zYyP03p{{_tBx_4OX1>eTd$+hy$D&0j>n}~-CQXLO4cuH-mcqZSZPN-1w#eCIc#*6X znVW+c6t4oySC|uCNLcYQ)E zI8FP^V@jj3nTw)d?u&leStI8`+<3}DGH0LZe_b0y5YL&tc#zi#`4J)0G@%pkVHxJb z0&X-Ns=jG1nul5CP5Sf4%5NCRx}t*#L~&!h6Nr~{0&`yZk`8#K$R8O^uQG3mfch;c zVZ;EZN@dJDXG0glxUK^se8l%i*77oMA@aL|r~=2v}$;*XyFZ^CFE#S0>Qr zoj=P@iNEj|9pGCsxf8ZAyvp(Rf|DG{&93 z1@zQ(*$Q%xUj^g>^)7+j z_CRbx9Ox#-K=*Z;{5jAqqm^O76|DhxIhzCEzQ)JlfGgH@8I@jz*&IA)01O4=DC~Z| zShxdVcWd;^#^{%mKlu`PDF=LGzU zq7|e^2AT?al2t6l=Tba)Ls7ws1Z*zKQnFrU@)$HTTm_&RBxtgSKG=X35>hQ8#*awr|T|jdbU(3oa;osI+)#}0Z-umM4*u528h44`#BYL+&Ekl<_##uz` zDPFAb66h5fBfQdx!NG3X#(U964&fkI2?xzpPlSf$u+e%?tuvQjtn!C%+pCFM?7q2- zS)Y_`rq5F*muvKF&UgB?XCi3}o=Qt{?&=39P2XQ`%2Ak-FG23DHYStmjHJUv}Dh-<%!ipIpuJ+qGY%jErwdO)0}WX}csx%!YU@l{~~tWXH*QUi3vm(&lmDYf7+}sLuTNY&>7K)-N8k zoi)eksKeyuu0xZE%z^E4R#WL(8$n>~W6{ltX8@pAJ#V2aE&r;h@eI#>!h_+hdQDEL z1nyaD!}hGzpgH`Kec?k^i4UZ|^3m3Qw6hq)#ess4V$J>t{_9Mf7;3y?E@idW- zp8DaxtRG9Pe9_oj;EVn<0RP15DW$Hj`0K~)gM9wLUnzg%`R(EFLFc>t?#7>d%HJBw z@8&Oo??rsN`Fx4bNBMi6zZ3ZVHlI)Nx17J;{Qi{BL45Ayvw^>1e2=y#pWjoqfxl6Q zl;=}+8-LL~wEUZ(H+O!j`OUG)$-uaY<=S7Es!*!PpC=B%V43Y(ctEsK1j?G7{!4}G zpAq+jgLS;4g`dB#7Ua`Z-vM0n?w#NjQjcsjZ^*Zek)aj;>QMAeJM%n09jPy$xfKTQ zf+U~ilJk3-8E=2t9G(i-nGzlsbH!Z?mqnDZ=){~)ouA(_r{5vAW%TfG>Ig%_n8^`avCppg$bgBa^m~R%P58do%EQCiuG~cjm%FL zPRZMd1+F^Q?fF@ijTrZd$Bdhe7PpHVSjV3QFKaZ`@)A@NS1|c+$10}(euaV^65B?x z$AWdANeun8x(uh<7+bCBt(}m^y8+O#R6`6y%`kG_OM9Ei$E&RRBo)wz@&<7d3gz@1 z^Cx$wctu+zxSRO?b!*ro?08Jw7#+Z@)&oF1&j9k$>Yi|_t+CbSGXQ!IO794_v>Lrr z6I)R80r}-+VQ=Cke+DQIVSbtSQMq8&oWphN*!rC7m%AT35y;1X+z}Hq@4C_0rF zhBXiN$XOr9;DV7?H~7SRV$t8uv(Z6e2dRkk7@OX=vYC=B8QP>nRt7Mu56B^QP~FO~ zxXHhGg(9=lYX|DlHmIrb(OwcCtt^?l$ggUHXX zODyh0#;b?Bmo$Bh_x-=N9xp-!?67>QFC%7SbuMqTj7SgJZ!!JyHmH}!=n;=LBd)s} zq?oBkBevjQCwAVawhh-yW}GL!%a@I3xF%=h7tpoZur6PHDqkex|C3z(cEtZ@dtx9F zkNA%TfC2a*V3}qSP~a5_XbaTEao0hE1$(s>2H4#DK^it@9zBw@*yuiuxU{c*@K>7O z+wK3#jNGRlMG;~lH4;D~@6ukKcj;d`>(U+wdfA6aktAM{8tT0GL?p77>JgvIisrez zlhJxEHopCVV>YtH2WmdDsm7MJI~9(=HUGyYFwJEpnwtk&LIJEzexGy@!dNi6S(xkf z!mRc`2ywz;_K|Nz7G||xm?z7;>r1`Qm3cRmdY^~0hoTb^ccf?;Jebr_X)p?UhxPF} zJ~IJ>n|c6)#vnBPdksPlBF&QI9AE5?3sdjX=mVhd1^dDf{b$L>an@FoANPJeLIh(7 zWb_D0n6W{E{vhXBi%Mokq-YO$Wu=Px%PkbPQPE9zCI(xL{wqG%>e@SrTM#NrKdq%{ ze2gD_Y;O{|f2FYy)9dwcR^s?>x;C+N zrQJp9cSzNAYZC4I0b>>Gu=gj&WL@eVfsj%2 zi3dwKAdC|&-gO2Bmzr|nMko;hliv@$YYat}5TZegs%xk40a7TK8o|f{f%88ZPzwiE zEpTqe0nkSa>vw~YTgoR9=Km`az79KcY$2h#Qn3^g!G0uqGw&dkB1?bHLnK-v|E{@O z{@pN}f88aSU|O-9IElDVm*xN$kDBHVH_8I*=Az+ZYWma*H_49Gi$VnGtWO0gF5K@# z7Kg$ow3T&hv?jVD;gJ-!Hb-*nqq=rgIExp;JXD28@Wca8qwS|H;qmfR70$6=L{g*C zB|InO!}SO!qy?<2yL{P=TZW!Z%XD(;!qKoy-KYNh574Ndn1~U(5@1F*uil_7ebbB6 zq?xAqu!0X(Sk}t684j27e6o$w%D%8HcqF{|bY*a*K1^8MHP=ef4SxA|jgNmd@I+Y; zrnDt|6K^EuQB)rCVrygw68LDl9r(!Jg%vLm`zWfn-VxDbi|8-W@cmTq`5hIdi z=Wu`rTgh?u$*&+?R&F7!=WwPNT4|K@qHCM`>lBrBiNqDQxt*yj3Od9VbglYbrf=kJ zN9w@}?(hrxiwsJ&H(yrTUrL+n{1@#MbVrIy8>`QWMs@l3&D(}#{q_dC{Yvxpf{vQZ zoM4yzi+P)F-e%clA2V-<9<31!b(UTB0rNIPzjc>KH~^@Zygc-d=#&Y;7^~B!A5{oXMz$){)WhB>nE#^+Oz?4FVzQR#xy4i3}IM zo4@=qn0C4&e%3s$0R0ZtCB$NxhM-b!Ls@ts1q+i(y zp}x-}|HU;nepX6(kh6{jtr@@!9VJ>_Ino37D+`~#t4!n#SM$r#6OKmZtcchJ+T{2& zmO*ABr05H`NCN_%)<}Sm(-FwFDuq?iz-oCU?k_C=<%IKgAYIaLEB})kI*=TBOwN|v z;2lCW?IU41U52R%Tp^5sUUN=5jrpdb&%BF;*5eT4cs(rhk+RxT`H86rcJxqqPlZDiyWMs%f2zc!B= zElM?mOT6Vv*6MOYb-BWJdLS}_6H9KNpi8>Guf-Wy$kX#a*e{|2oTkCD*K|Q#cahxI zkvigZg`;zI;fE-kXfnP^Gt{n!lUZj0RW{;u&CDW_D1*C_W=>b^lRxTWBJvL%?cTiJ zu*z)I$#$sE->H!mStD54aI`qwf%VGFG1V~8p;CC>O}vE`u-gGHeAAj?_cOFejPF^> z2w!d&I&m`=ymDf9g(vOq+S7G6-*lHnnP^ysPEUnItU1LbtH(>P@#!4{{hm0zgSLwZ(Sv#FFM6^oubK+_`UX`9&Z=P63o;bUd z)Ae`0>F)s8na&JiNMHr+Xgovx;Z8vrKLAqK3l?iLCb@swjwv|rl&k&JjWYkbnTeUl z4~&5~IO`t2k`t4jz>^o4K||sM`vRGg3P1}5G;Wf=n$e=zcQ@*L7q0p!*|ARm^m}+K zXb+0v?>FK3Z3^i4!0H)!5l4)wc(Ryym))dg^ASxniC9vCav0&@G(zGCbnb(~5zYUS z3AowixI`q3HLVpX6SC9}0f zg3liLW+GeLG^rto*qqpGk5;yBy~`9$H2R#Grii?46cJxC;w@YY%VpTMesp0kCVMHN zZQ@t>pKiYp!LGd){tuCsOBLl)zeI&Ye3sj^K?Lzg;twh2LBhUWe}*tit5xW7(fSmt z`{cJ)>!{g0*4<*dY_UY6=uLN$h-%WFZloqQ!VLA!w?cVA&qXxNB^Jz665DFc&E#&j9upL8u6yDFMIO_r zEyLPWsmLi3>~wf+l5fY>kxk#Wc|#(`0-;6MAsjr);0lkDW)&HeP9e&N6p881nD6zkfxa?2 zq09|Spx^0?q#0vBSDe=_@~LkZR~a>V$T{hbCVeCm8$G#bzI6s#4dQml4PTizDay}$ir za!QvoaHU|;dj@Ns^FWgfBRE7}%`&fI|IzGXPnJLy4FAB!PVPl}7$-c_9rwaB6*P!( zy3Wb#KZH0+2$U%!Bq+%|#DkxRTEV*)EjkuNW!@U%@RfP@i{S4~%exQ3Uv;Elca?XK z)Ko9Qut};KR1>%TI3f4j>{CA;Ln|VQ7A3STi9R#Ah4j{gbRa2k24=qj*RZX1NvoXl zw-~kA*m9a?W4-ktZJ!vW6QngA7V+la2$_-znZo?McFrAl$s9Dwhc`k}|AL25qbtC) z+XXsGB)FZ^Rd)W_a%apFf!?#0eww zbq2WI#Ve=yrh(Ai;fJ9lv{ze84c0xp9JaMKz%L=Qu-UhjW=*4GF+8zGs!iMFDod@+ z;jrV_B7s=br;A7Uz37|8|F}sS|D)XiE=QW1)${ffzYFrLHkqm|Dz54Vw-c{;Cl#p@ z%}v+wD$~`B^O>)jFH|3XAey*h|W28_4nx4%G_}hsl z$EQ9Ool1kaC+t-Dxdyc0;?weN(8^QJD^G;04UX1u)x4~ac5Sgb*9gbla&<0|Q6*Mq zg-%13uKJp>mNuBxDdynF6jIIW{r{8K!8_&EHv{!5e0Oq{Gr@)vVR4=yl?2HTdepTGh-< ztkt`aX23aTQ2jPW$hlxcZB6l%}-&G^(5G;h{|A=c|sDpG{*E?vDkpylchWnl95 zd3j5Gg?=X4hoIMd)%2|x$Km+q4nM<-=3xM3!vQ2~mH4TO{@Nk`=c{#??NLFD2f%gd zGvtUp(UH>&tlJ41_V4(HGY!foe$HUgSpey3RC=&Yg+=r6Xxa0 z&tya}Kr9eaGOe255yFq}n5YdJJG77*5zD~f$oge^sG6J8NKtISIgK3x69shuXJfhM z($xsl#hnfM5*cL9EkaLP7FEPf_ETCUzZ<49dhKc>@{Lv4D0}UAQH&qlB>`T(C}K3w zFON2(=xwaMUP^D%+#_+c6Ymp5ptrtuBt`U~JbF+b^=$uUxWI?wA4B8Xj@fs{X&ZnV zwKi0W1liW1b3J4M208zyGgN)?0cSi*Lc05vjXu~20+67r$uGQ5^?M3P#KDnkv8M0E z<21E34hI4c2Kyh1{^V>33U|q0*~qp;h1P&d*YPm$9!Fc{y2r8P@wsJ=mOpa>Wsb-A z*=_%P5rhVsPoCVn%}>!i&_(>TG-1*DnLPsO-pqK4QHeb0-At6IZ0{fxJflGMMhP_J zDwaheFB#y+jpV=Ujl>8`cKp(OYH7N(lmR26Ejc7YKIZZH7(;1Gj!fH6Vcwg~^Z2mbSBP&yWWxithDE%WXxMR@G}NQVT#KjdIUhXj!FYR|EcV#CPZ z(#uM*s@dt`htG3@T`Oxlp)}%wjAf-_J&vYmeI&SBxcud4iI!vs2jRE%B@61W_F_es z)laPGG!*rZj$Xrihc**O7j3!PAI?c~V*H0w75uaxt60-f1{-4YPg;IFs4TUV}oX57ab=mH)1PTz3SNBWytKhxz=aPz(kstpjO-Kv zjQ&&G*rI<~I|Ln;yb(Cdh=xb==u-<{MVT{__D|b-?plkmS9BoKD&2ukccA~Yoe+LR zON8UZ@Pu<4zC${iJOY378#ulCPgLV_fVJvc&Tu$L89Bz`**r*GE6l@)1%-Q^w*h^9 zzOPExljAq5N>}5IXI^3xEj8jHI(;034e>udI4tzb?k(P4&gcRsMrPSXo86(Ma{Khn zaby>rdgY=cHb@89{e?!Sa8L=mdD`-pDV|A45Ga_j$v{;k~1QMtRZ@NJ90_@HsvS_@D7(H<7ox-z?R zPM=d1q!dL)JP4>&o~*f)Xj(L2^TBSh!9eqWaJ92%d=#`-%XYys?2TOTSKE z1F!*oi|Oa|@J1gR-cTZ#J|@XSRR0+sq8qDPO%T~F93#0Vp7iO38KK7fL@tXbZCLX@ z7Yi=d_r>%2zQC=@hBC1Ssq#K)V9WcQ;I;;7OjQhP31463VA`KTFvS}6Igj%DSBC(# znVDA6?(AbHT_wHf_;I^5U|AzlSALqipK!@4n4&~Op!nB zHT=1LxBKP)(}BHT)=kLp`t$5k6&y|!1aIiTifdWHVr zTzdEEwUee)$;B<#?iE-uS+Fas5W<~gI z@}-KLcNBzfq-b$=C(#(lx?h!2D^qE^95sx>{90q@ow@)Eti+IcRf@AQv zgzK>NnR`y3InPjgwU@|!ICiw8=y{Sf5*Cf+mdAq6m6q-RT&>)v)yz(CxHGHai^hg3 zU6GjtwQ0(pS>X;pEi#1MWg?IBt~A29>}q$(5SG4$*GKc=2puKzizKGvFc@RI+#PCQ zmH?Zu4kSCB?^2(SV$lj3{k0mvbgn>%`RB2)W45P&E)0rf6Cwo?)Z=l zg4WDz15F=&A(wxu8F<~TA|kYg;a-eijg2j~?~h}PL1;j~2VGq8-&W}2L~A+28Q`h7 zvW?SH+=8xuD{jq}PxmL^oEH0~Sx0^9o?o-%1!ktmlH8~Dj`U}&r08f2b}+z78>=z8KFtI&_A6?ERPJVj)lPv{}?zB zfsNk4bk(6oZy+Q+yE|0e7ntOkeRXaHc|#0Gm}SrQ^z9Xi~4Co|e2 z{W!~>uz&XGozwaR=p~(RrhrgOg7gmwQXOeRl@&pvHl9XEe?+F3AOeHE8H`96_>IAY zCtr2^t1Os1{2Xmcpp?@zWms?_-$2{Wx( zi~j-|mM&|(EcFoIGVtsMcgZ{Q<;JGa7GfftDqzPr;zabRZ0y6G66hS4#+!pbL#@5^ zcyscA2Wf4FT61MwN880JmF0?#8Fb`dy|$iPT{m)uy6uVIc)YZ?B>P<&BHZb&4MQoVaNY8Lpp#wlX?5dTdtEL(O zmMzXKyjK-I^eLy>gS~iYe{y788u9A4y2!V4G*-F4OUG*DSK=4dF)}W-r5p?KSsO#( z6AlE43EChFay04lkugJJ5?KEVUD+NKHqnJFH4SgztjI$?S?`H1D`!OHAst;}qANOS zw3RcGsuD70ut#Rs?i)}EjH8RmH5+=uk2`ZkmM%L-A-W52+ArZ zwvZo!mBhnd-E|DCWaFgkm=`!HRMd2u1FKKIR+C)1QcD&z&T^MLF2kCnQ+zZfgJ>N! zgdC9H2OR|dCyIxi68f6Lj{fRPo^(d9NmU~{ws#U^cOp?|W5HzWnlxe=StR0U=LilG zNX|+46Vy0@BMB&A00MFQN)e>9)^+Kv-pt9aX4PR+tHM+Pv>+F>=!Q0@DC5Q|+Z znnV#OHu+S_1}sSnn&issBKI8u=!j&g_frBpw{}Bn86Mcco6fI-YByg775CLUb<$P5 z@^mO#QPQ0(>8kymHDsa#&r76Rozsi0C+-gU6(WLC8ufKF*lc|>=%k_leUX<2bUYZ} z#OxL&2T)ryBKGyRAI2eDeOvmhErxQJG_jC+I}<=~n?x^hmx$z%sKIht&X~lNU(nix*Vf)?_zpoV>tD(ba=pLp%3Nx*}w z{uiEZeTqkp3yzcYq>cTwGqqmI06yS{WK?sp&Ed+8WyzfzOj9op*J))FN%dGDeHO_! zgBF#k_)w3izuub2VcOB!S$DHU)IP{wQ__=i<5ES51}e#E52l!J|(I=uo4pU z%(zYqryYO@vP?9@9RO!k4+R@pVxCO2R{6_F@oBGZemja8f7DA{uE(AENCQArxONs5 zBQ80GP?(UsivcXHhlY0$z-#4U!S^KscpAhnYysl^W*9MmAh?Eyn95S&eKeqJv;0qw z8(a_^Xcd*{+^p`BpPhtf7H@>w$$Uthi{KK53sxPNz^Z%YXvD7-@SJFVhYQs<&Q8D< z_(e2#iQ3wsS*sI7-m*l!DsQUQ%H3MyHa=9e_%v9zWiY6J{y8quy{rX>T;d20Zk|m! znC?_}U+sK8He+PN?qiY%MizU*^&n@g^01t8s7+h6#Rf6im#Fq;yv0?Tti3Tx=oC)K zwDHi;8F3og<|lhMaTpslA-zjI0s{x@2G$MpWb){#4hQ78mNe(i)n-@k{n*&!ke@hT zz5h$i7;uE|%oGc``4D8B5Y}I)RY^Z(ZUdq=7F$iWN#W{~8ABF5BgT-s)Vu3g@uFf_ zhF7&EWO#+Kg#1e2x@fW8L`&;MZ+UD!A{JnO)Z{kyh?|@35xKx@ge_xh1EgS00b=(n zj*xPP8tGXmZ@F0m={Bb;uO1#qZZ|VzKE(La45OR#eV-&nG7SpD}Xx0z^cScxF+G=E_p=59gFo zU+S!Vq8@c{aV^dO4j!eOzCrI!axFVWn^++T}@Y+Vem?k$$XDOpx6 z5%?8`r-Px0fz^jwDPBXgxR)pm%H;T;t>Gx!18Wpw;k>- z-h;M$3<6Bv*aVnbG)TDLL4}?DIg_4sT3HJ#8~CbLlITyCd>V#WbSi27q!zE7k>EaZ z4jKv>+Zy6mixk`(c0I1~CC6ijy=icJ32{p8^QN*4Q%>0Pz36p&EXzg)(lp3WehJmY z-6+||>jzRu3m!aqrg@*b`*!$6xiSMC6OGqRl-m;mlb8Z9@N1|hd^^EEb3|&<6tBDE zI;kt!sHh&7^K>*fuX?uY2e?Nbas=R$>YHPf#HCfR5Bkyx_T!S0S#nO-U%`RCJ5^$< z$${xqqBAZ?DD(tHdNSR8LIrR531KA`J&9U$)S`0!CG+Z^SOyb^B||jGhI!OQQUGA(#?)Wb-@zR&_ZJX5S2@qP4YnvQ4$ zHGzJTo#Wa|KNd%M$-CF2s&;(EBGrgXqzDcrxODUp5fcdK7d(jBqAG9PhLQims&d9@ z<-4q#QnTN2KlnO-4envWtoJ?gpF&6Fv1B{QI?S|$q5A~KA1lS`)QMthgNJ#cB%hgKsxJv}n^poIcrtitvDJab1mv^0vO(SJ@NX4Lrmi;fvAH)(cI<$6g#r2 z4}b7cEK!0Gex_(*^Lfzwp9L!N#1k+eL}`s>gfw!$k{qf~db@R)>~Y%m8nZ*J8dKci z|FH~kMgabhYayeH5WeC)pDNZ5L%MKz%>`4;5pyHGCXi5?Hqh>mEmbh2E4BuB|tU;SQg zKCXs?D&MhR8;}!@Mbp14nSQf>v4A|ngh)Ygl~#T|!*uMBEGJ-aO%SAp^YxY_{4yn`@gcJ%bdY}Wn-O}jd2EhhQ2)>@RW^Bx@=5RFs*EC z@?~R^gRbFQ>)Q3&iqCX->snddf5;dJdm7Qp&B*HdhZ={w!w(3?n2;W7bjvdKbce-_ z&bkqE*`BhFu{EO0h@Sj(V$&C(Vv3=WcPkF@b1tztC;fjmB$cDp^0$ zBN`~8;p=$spN-NJzVc1<5M|+?@}}%D!SNXI^RGR5J<5olMCoIqtTSs7StAQkrI$dO zDS111mVXow>tEX+3#9ALlOVIEAwjCTSBdr46^P)f^DV3tC7+tJ7k$qL=~OuAw)Lf^ zw^*uW=xSX}gYn9jP#ITZDy!eV%W0o^D0Iv-XONX!GuEnHc+9~upX0G6H-$EyJGhb< z+M&k2^T$q~rpDyz_@dTK$Q7YEKn91H0>YpghqN%%%3aaiLig4!%u9)#*&kYtc8*@H z+bJ%3)DbBti4>H6?Oxz5+2UP{nsaesQXt!3%vOZz)2tn{-0y+Fz>wAWAMe;Jn*j_$ ztorAeJ(zsiCVMsIMcpX>{U@t>ORK7PnW~)=RpkX>Tb8@nDky0NUcFUj+e)K)3zy2G zk#GK_OCFN&(PxH=b~plV8F19nTUGU5Vzr0tF$~AGshgU8YK~4Z^sWn}byu)kbOH&~ zB(~1ETSWY_RV*dNpixNUor$6?k;NFp<6_MQMpw^SO zaHPGd!#~{O-NLTD!SZ9YzoWEZccfrXq+oAp!9EgX*t=RNtJ!slF#UGD#E)^97~4-lsm~h5Y5I6_Kf|qK>e!E|cbKzvN)9J6E1Q=SkN; zT4gNf-yspIkz!%3Ks>1-y0s0rBCaxRqv@x8sk4?k%xKl`$Piks{#vqZOt9fk*<3Kl- znni3>l zJzYI!icO^$J-lBu2z_(_eHk3=vUP><|FyH2^}5^T=>~Z!2VS&`FXZ(PQ&PS(O#sSW z@-2tUDp+m8b7)Sk;?zR93h=HL%4s#gvyp_LSLC^{AAQ^+a;-Q)6oR}?suJc+NSjdO zICnTCHQ3o4sQ*(}$kF)$Dt6=2GXGitNXQTWS%wD_*YFB;*4ZMM#TJ|$8irWVAOWX+ zBzL@Sj^yTKIg%@#wwK>+6XQp+`82MpWb1)l;wh`gM)ecy;oRb_a$331>3}1_m64(f zPUrk{2*l6`4geK2@Jn(76{XjuXtyE{Wg>)5^{$8%l-pKVR?ZMjW>S}cr8>sZT3@iU z$~w=c3-J5zq|S-|g<%6KpmK!0zj{E<6hfU@@rR`g>^H0R8}fseIB-?bfnf|lQdyPyeO%& zQ^$Z(XYdyXb4fuDi9cPz4uT)Ht0(@Q1}MfM$C~*hVc{;rtOP;Hx!G^c=^I^`b0KC?yXT*2 zEiC3KQm$Xb^dEI+6gsVKYVPij@U+ubcQ)uvLw+Q;!DOe*r>V^QhVdz^8y|-~{~w1z z73rv&C3A_Y`RoTSCw_+4{l3icFh76cXZo@-$4mU4#P1{g+`v!oKa@E>;%5LqS^Qka z&*%Jn$jBg_|-Y?8^h#arW0?~Kuq3g2J8DO9vK zXI{rxaJRa2lF&u2k`Dtn2nTkl&3+w1v;w<`i{e!nyW_HAH>EnAV;>P%L!G1-{`@}s z2&}qa9z*518(5w}uWFCX6LeD zCC%vS(Wrcx#QL_=Ie%ufT#NO3EuJHM*3aW>v6e+Ae$U&!oN zs~unBICYWqgi>{g$dNRiuh|E+>%5O+(|vi-s7H?O^Y?Ft?~q5>G8vHid(7nwSKOTk zTBiG-(LGVSq;D&W5i%~lU9dym^-=G0;HS)%BkI?BL@)ii2^RX@WWCV0vaMFm)#ov#n~{n-G6Q<)hudJ-y!5xUUiydnww&n5ds_kC z)_OD1X$>+_h$egEF``nPhT+$w2cfza)iYKIpp|O=0Wo)6YxW^RcuP{cc$W|q52HBD z;e2YqaoGrWWFW19j?CR0I+inUvX)Of+BxOzw!tLV$(et-e1KG3qGIe{^M`po{Aa*c z`&a%LuB+x1oZ#Q%qg>#}a^@2!ln%@5F2nS*in#s!S9h_ru}<2^eNs1#!lG>pa^M(h zst)$LjF2s}sR{hZI;*}{eu_c7+(L%+4mIY?Kg+g(H^KwWJ{v}}u4|&QFnKEJ%y!QB z%0=~?%uij;&<1HPXI^Jw2S}-J#_97+@GSm{M&+H&fondJC|bP1UtGVJs^BKX!}!H` ztHCf5fN2K;;zIN~Z~dGOS#8;oTeFUfXqm|AD^<@{yAvKH4YEPuO#QGr67Da}>OZj@ zFlX}*Be`HVNYR|Ky)sxStR|Vkg6-}RN@tgU7GNdRafanxE_MQ067EsN%Kt{sB0;Si zt=#It+onxNYC5c|D9g`JJoaYj6Li!-k0;NFL7BD>~Z6R%Tt#zI2~MlEn~;OuK7!* z3_B|Q@kJeYgC+5j`e1i!Q^d9q@#z>15uu_dHOgP2-nL)pGzc1UG;pqqzs`_dl0EXs z9xaQ%_QhXMlGjo5I>DD-dbz%|MZSlAfGb1ty%(iLCw_^xV?KNa)^B2_O*-gW4lUx8 zP^=5tmSY|?%@7$|kS@cf^`exdjGhUDVOz}2P?PurzwS`18{XAm!{+ktuy7|(m&WOz z1XMj*DSVpKl(=7M9~a2JAP5`78iHXocExIuWB}%Z4|d0bEb4V*ui_L;8AvHEaytmc zyGwa*`aC9Pmz_n$pCQF^-NM^^MEL{NeIYhL z1a&Ar+BJ9%Rp&^F8EWuonH)N)Kqu@A2+Y6jGI;?OA#0HbM&YEHQZgtZdQ)4*+(TA{ z3OO>X(OunP2|#4E*OvsQhk90`of>L}+d<~#F4->&QG_3$`fOH<>FM%jddFkKWF1WT zut+T>b-*AqLYrm?#o9CDaYLA-gf*T0y*8js)0lzY{15Fg9nW_ZilqiefP)~byI(H3 z*wOj`GNd>RdS@GNBYy zUC$GU!Si4_0J*u;yOLjTlzLZj?-7w%6lq1PxxRH90((*Ka{PtA+sN(6l`0__XOEJx zvh&Lga6Z>TT11;<|Gk92`9qC-9nhO-czgmn3vkK&AUaqhx3?f2*0;)Ap@D7mnKrP| zkWI`ZbenLI0XMlo)Kd`~;MS|-|3y4C7DyFH)UJ`y<3B|1xL>@F8(2xcm@ z`PI-CZF-yA{4;Gf12Oj*(ThX%S=QuCtMaYJ(0<}@1d^@E#Ki3xDQL`#-bLO?EF0Sg z^9eH4n2cfA)FYc31X-Or^2;VIBO=vRdaxhjR$^=;66hgzeG)J}rKjcxpJr>C`9b=&Rd(Fjk%GnfavplfJ^VwG zc7GwrGju~b|N2Pi9jeI~ok5bD(1Gs7$GW>8t0>`cZj&h)*-xYre#{%(}a17-R6~lc0Q-bOx8lvb1=YBSRwh)X zK6Ujm&i0f+vAfb@clCx<Rf*DcY^}sk2Q()?Qn|$=B^&z!ez1 z>dsVy<*DBt-AKS1{NCr)XNtiVhX#c%8@k5bZg~7fQL1LAJ*o9o> z&>F-SGN0TfyV+IA9EHuCJS1Tco!g{dIw}}BRj9P8-XJQLNo-;qhq~y{dhoyq|5AOb z1Flgb!;yGX;7LiY{2~4{U^#z<7I=D)(CF|-HGSn^)r+}-cW;^ZP^oyyeN#yIqy41P z;B@Va6k)NWq?&p;1!6yGhFBFW=TV11=N#YQNnECTeQIi>efsvQZvW7x2gWEm&0*9d z+ET$ji3$3JD?~^bRO~lxYZT<)c!XW6R@3CKK4L7TSFE*Bf_7Z$tif2!66TMx7Nmwg zm&~-GSUZ9p0mh+Nin~N>)+ZhpI_IIUWjSN*-6j9g52=P?lr}_L{9{ghXhB+%JA93t z{i*5EG1#}9>t2*2ACC5Sm;6XSoaZhX%EL5u*N@n+#(cU|TP9LOh+d*2@U76v8GPaQ zhnWmlrk)QMRWm7hf>CwC*;E*i)5C2XEM{Bzc+?qZ<9)*+m7 zWS!O9cbnia7gGgXjVG4>EPWqKL@oRm`Uo)X6J7>+5n=QXLJ*dDo9RKh?a|3e9DS;( zb2}#hhl70PVa}IVK`Pf>Y+u4Qh1d&0zDQL!y~;_%6o@0Pz5&PVv_@(|Wl9q5Kw4)( zvTL!9P43|yE%#5H=quOFrsk8yPT&3ee5!I_{K8C|q0%3e9n@6cJs)!k=Mqr_nL&|s zg_8&92BPQ_CxAI+NZ!KA8j-k($qN_HzQsaaf-mj9W<)R%*}O2(-ubkbxPUc&7_Cpw zUO=9F1f2v$r49SAv>;Yma7YavL(A1_^EbTa3}T5sxg2Y#BJ!QWcQuM#)ivyZyRX0k zI^Ic{*4=4jfXy$>Jx=@(b^Yj1o1K{iVh@iSgs8V2PdMMi=4PnL-Z-#^x6#5#Z!Gvz z(yvM`w7D7nWd=w1)K~=ElE}I-7TlY!0*Ca;#-1&yFiHI}Nss}~bGy{<}#F0#N;FQZ{K9Yd_yZ9=m!%0-WwzU6&!#A2n>v@s|o>?>9ayCQK zV_zm9=_k@%Fs=5p@5m#dhD`cc7D2$`Z4QeyJ2et)loY*U^(b&KFGDqQWDWM$;v5zu zkCCw$iIrdjzTVMtAEq;7`7$VYs$GTL-&ZBZn!}SUK=n&9qDB^gGUQ2~m!ZKz z)5k!?Q?#rXKo&AhYHP6Cr5uTt4j(_+tZRkP(AKhfJp>g>)UlEsGRs|RJfUl4(&C2> z{nt)^=Ms~5FG`VWb@4~rH30mUKTiVuN%n*d@Q-LPJ1@YWtY$GD8Ra41_$NHeEDx;G zz|TFotJU=WL2yV7^vM*yP$oj&Ee-UU@&{Z-4Ho~g=>{p}scn#GNRy<=M`)6fK|Tp~ zi|+>XCrvh=%co2QeJ)*UI~<|Zok86M)@~+QH2+Y|j9c;#>Bs}p^2jK{p~9yt6@((| zbSX5Mgt^mN)aA+U@OiwD4}IjrY?EHPJL#n-kzRTl>7^$huRM_2@vW;u$0*zgPJwf8 z7uu4FNNBca*1{`(G1nd5&+Fm^Nk4Um-{%Qs=CP*_#}1Fna0-8=bw7b#w%u4XDl$$r zYA@_pwHkIW<`;Gp^HZ~OMv^t)YP0(R>7rU437I6>xALcng+i2Dnr0dBs$V0DVM_h9 zWT?Z^ky6MYARSlC8!FQcOXf05+o@SoCy_j*vo&>ebn-~`+?xz+>ZBu;O_UD&2v*cO z0~PF06G@u%^FH<0@dN2mcR;!ht%1Jk6|!yWJ|UxfipZpuh&17!GeKw1ya?0(He6D? zM7CZnclZ&oqL`VByWb(mYLY+5+@P&ZsBL%2Rh)GbeH$H{9d^6h9pY)SQ{9eDgfZ^s z)SP{f`vsyXL`8_dD=!!X8S~>goe>e5%!W{kvR^=69_~Z*|kPH9$<2 zLtJ;7S8{8iS;>B-Emm?5wt;d~{!9gX`mI>a>eyT}eaoy-%jvi9*NHFxV^KYQZ#ntn zx+Uf=t1Rs8e5_dVTDZlG)QdExO6FeI!Jhj8^I%VT#9xImELS(|H}k!g-*x?rtIk}H zSw6XUo3_Z(NQ25r6{8OZ!+m25IP7(Px4GB{D<~E>kNbOnqlQQzAdP=UQn@Am5&eWG z5+3v=)A33|qqImkUH?H^qoXLWi7EZlwi84?M~G8@D#ej5$GV+ z|L*X|bYsmQFIVWBJZjMgyhzggv64BKGgNpxP6Fdnv&W^m!vi>)RbUTBh9mg65ojIG z@Tn&WYtL;}H4YmPzKG6=z7Dja~En-eR9;3e8Tnwjdw-Oypx{!y(o6%u}6D@-0ambKK$K0!w;PqtR-_ zW$K0JU?U!rJ(1Wig`oV<2H6M)1g8E&b_jRFNnj{1)?9`VE4{h}A!bEolMHSubcX5& zS)1jbrmCF&GG!~Qchb93!oRE*&jfVLV^Wd1tykqw!MNz%w4$Q|`6& z78i~rVv(@wMgPM zj#?z48Uvj|ckfNI%SkkQDG7j#=WgN&$yjggTh;3B*v;|eV_X-tQy?P8epj&FKYpSsMA!S*#`ux&L&!#Ok)({=U7KApv0dlE0L zsC?2%h$ia?QV@;jp|E{yjU3QOF22?HS=5`YCwi5LCO(3#gV{j%ot&caoJ7~YZn@yL zm8y6jRGM6jxYp4dXLINUU&rcZid0DtBu|gwDRelbzork}0nzYeJc*IS2TpLpz&Tn zi1>Qazo<0=8D)A6N*8LXcDrsw^+eGe+Ty}8?gdNZKYP0Zw+rcpD5XhVdhPjA{U`nx zJ3!?#bv-0AX&(bpe@Hv+oLkLRr+<=$RP2vJ;?}NWdxw2k`)7WkVU*Q1tK8xkOpneT z&mq82Lk80e%88}8Ba2F}A~#(WnU z-p`*FBi0p|w6@l^+iT%2xdgNuo8Ld`T^#Rr6-v3{4UOP7N8sX+?kP!sMo4d80tv;fwJPjkNT6OhFdfWavO$OSAtL~~Fp^EhuL3-RFs{UgSEN!{0iQxVR}j^duc?u#HBqqk#JKDoks` z(uMVyG-6Uc?!M!B%z`RCvlUi})0>v2NO3+1o+JBh#$|0GW^ZPwIvLV1*n5UAPZg&3 zaMayMJjnfT!S{fPVFIo}N0MPpaT(9HjxB@G28Tl)*==n$kTgx?#tdZ_m_$EpF`_B9`2MR!mEF2JJ} zuG4(WPbP>lbg&17u2k;`qjC3?fk4?gGqFTRCN^$ld|@vLpcWYnp@G9sI}G@PXHaK5 zf)6b}KE_t(LQt9g^mu80^Q;<{9%^E0w&<_ z@DYCF1+0cH0Gjp1W~derN=w4!lO3lZT%eEKC2oivO(T_vuui)`tK1$(I2b|&VB;GW zV$J^zn8fNCn>~pz(;`zfRDifIdGNtNa1Xgjxky<4E%P>(YRp*XJz5$bBkgz(#W8Xu zJX&5DDncVlgF2-Lwdo6xe+O&_r5Uw`zw)7KdB#iVwi?Z1*S^9TvvHEE={pXV9%!|M zLRz?A_>P5@<;X@umodBLEKvyd$Xz0F&GAN(u5DFk1W!m2e~{yZw=${N9GC4s92;g( z`w_v!YXqZI>7mjHYcyRA?tVma%g7aH<7ZVp&9)f*RUi8yFaGAv>2XuOs75;Id)^Vy zl*>aESJ!YIHPqe7xXb{JouK||lTmtv4A$<;?%3PVJSZQtvB$2iF#STt#JgK8-Q_l@ zbm_}Pk;-90j^drpiaH=_o$h$sN9uKf&)h@b>)6J{P>OV2}f*iY0EEgnI(L|kTHz`mYkF6%Nc`)~L)3Km@iT_2OnJv} zmB-&^IKuq%PnBawizHf`BUup%7RMkW@vhQ+{uf$yRjj+Zpj8j|>mI7rGFnb>nUlMl zJ#^Xeu!iV+M#sd`Am*g(h+UZA?P#mF8E@!|rVH82 zA>_N;O4gSG9EWN(SXT+&s9o;&_zSek3s*4Y^Jt`yyJ}hWW3_rY1$C*(Uk^5R+xhB> z59KvdYbAi7E^7YLpD(;4+>xq%`lHy5*Nbm<++KYN!)tkdv=UV84^tz?0=8(eHPJ(k z0STqIRpzowg@zAw4BtvJlrRxE+~t)Vwc&WCl(V4a6&&R*g+KRCy5?!8U-6HQ2%mjq zZb!n?l&g%hK8e+(<%ufyiZD}x0T1~M8HLh>pBvc#Z({up@73dq34b=^R&c$^7j*&MZUy@V>N#V>u)^E8pKu6u)cA)ARF zQm!4U%GJP4dc#-#NPN1=+4FOCHj;AH*?f57t-V_K{WGfD&DLe9FE{F1XN@qjQLhY7 zLWPuL#jW<3j~7m<#=Lq7_cs*E?lf&JN&6kGyE7Jk9(w>~tJs3gAU8)jJ}13H$DDy4 ze#!r3xc|GoaQ|3sm$SIm^=a&9)!>cU@4F{dN5{a6rzdZM@C|LJb!+KtaF^T+MT`BF zU^DcOFecV~B!a1EKJ*=NH${w_vd{tEVu*mk_NCs1&;U?o_siFUk}7Yh)K_nRCf9;g zQTe|GvL!B8gZ~}wZ>_C+8D+vL8%@Hj!?fG7S*fe;Yi`y-vm#R00f64^VsH-8DUJ^Q z_L}UYb52NGpaBDw?})X672Xx3l4AP_RLdWF3Gz_Ls>eeEU^3j{RlGJ<=AtLAcwft0 z3Gorf^bbq0-ry4ZdL~g8=n}uLgJNzG9HcRAmBaPeQsKebUa@2$K7>SVBCx-_k4{ah zn}o#*Il=>JYwr#(b-sq^#!)xIuG_*GL+ajW>ZYxg_pb>tUPn7fKVL&+;UIf29MA>O zjG+y36FGue{uj+w+Ci<5O|C=vQ<#(oCc60Fi4A(?$&X^S57UIiJ%Ri3?(lEk@wgNJ zt@~aRP$yc=p3vRto;gWYYNUge;~|s;k;P+c%!T*)ak+icCESqgx3%4LYk!@rdt^r; zId`gc2ci7()WL7`g=GWCrSu=oeNx@HL++^^>e9K;y;LaTwv`q&*r2HuHSaMLDP{t* zY07Tknkq~#D@SyeQBP6KE4+yEC?KyIeGNI(h=Ff5bN$inO<5?0cpqD!=aTtVjLBHhxE^)wo>d#Gb5NgEAVFxCL zs?@uOU$v#)ca4#nSPI~Hj9q}#QrQUpZJUD~K6T-{av`K+l%p?%vs-=i@KN6hJBC*f znei+TcVQCtZ=ae)u6!Ke9XI5)*^mL&JddVLr5NE*u+YT#zyz~62w2c#@7U~&wRcdI zBn<#a4e=jSM2VN`!{T|sPr;F5?NFnv4P0|Fq9&huWRF-oc*NSF(O2kHpA?G;i&8bb zZf*8ZLwCzKJjU!ncZu19Qg7azXm}V6Uw_k$=2}baBm1ZA4@uwXnZXT~moInN0*0(A zhYXaJva;~sZLf#QvAfNRUqG!b;Y~oA_$9R7A$l@b-P^{>?u6?{Vq(bkL%FltUO)1! z&W`G3E}r#_#{KFzlD@h_3Wi0z;X=v@TqrCl{=i>=1%g{R{S0gFcz(6EO==O;Bh=^# zc8N|<+yNb|*&|`)e-_%3!LRG{ROJ9IXy(&YG=P=05^fJJzgn#wtQP_W{xfFFke>|J zR;u;>e{1>!Cq~Qzp+8Z)6t)-SkgoL*_3G*Jgxb>Y=*zuQ^NXcU|A>p9ajJ`7a5+u9 z7vBu)UlODQU1fheoLPaw1kYXa5I5J!=VOEyDhnGU_oAC9hGcFhM3`kY0Orw075_>& z)T`17nuC=9dcF?BW2L#V+7cFQ_|{NkqcG(S!Jhv9)b?lf#%giWbR8SQiz+R_1MOOP!-iE+nX{=BhYljGC{4VaZGffj?DhrpGpd8GGwLc=pqF3ABh>4W(WgZnN@q7B=3@RLjs4l!H!;9S zm2`Kx2eXd`23cRa`#Pcor`_(0{YY~H7oj>5<=Yd#LBd(($vz&ekx(?=#!(^Jo?u7p zqeq46c|_+hGcnSUXUBV`ORK0MHlI+{F4b>8_+}!3kWwWq(FBiylu*qBAq@rdP9Wqo z-0xIRP0_;BD>MbM&tHwe8{!1~b3_oQ_zgr(W*=s3!=$u&|JU^VXfXqfTH-&L-6hzL zC`+ipiJRei5Oh{gJfX_%u{`r#%__huNRXWUcOKus(b?X5cZpC-rvd5FLxT25IZ^%s zB5CQtZpI)@)EFm>w6HyR-;7lX=heaGynip0A!2GS-g)FB#PnmIe|Ws5dreDirY&^X zTMQ8^OS?6xpmO0qb&`&1HI_%&%xz2LM2jao)|2U{n~KqSVX!DSnteKRd}OZ{6uV1~ zku8B79-M1Un5{V~LRQLMM!doIkgZK}sk*GsaleK&J0K6a3T8P6VueM~AU1@Elvrbc zI`IDz{Q$a0{KI&Xv7XIX1>y?u=*UwQmylbldE_=cTxnYKsh@uH1K>eQtExxD8Ew1z zRhtIK^@n9-vVl=z`@|%M*3y5qn)s@w)E$@UFbchSbL(6k-BN@X(8-LgoNR!g)m1{v z<@8PsxN)-KgIYhV9q$8A#h2>LV7EfC<}A5PY#9Rh=cW1TT>LBJx#>`bCOiE?M2#B{ z@;I5rHIcBI10jr&bAK>YSpy@mmCi$VXL7?lA~1?Dd68_=l<|2gc&-i*ey_IZ&FC*e zD+w4|NTN<$?k{1w#m7x%t2Slf->V(EMl~{B{q*`RV#J?8 zU@>Fno37;t)3Bx|wDCjxRRZFJ}eEX z-*4Cvn^pCYM0zB;|CUtYzVckz-2;~*92g9Cno5ZGr0mMM-9kq*=XGYwzI@WF&`dw zHcDs1v#B6Fn>I%l)7OPlJq|g@BQAm`ElMqv__vKJB`gb-TIz+92=>cY0~W@;A37Te z)|%;pGlMBxyxkmiV(V3Kc#n;ci=yhpgUc&?U z)Rtc7J48()-1fFlJ`yoWFUw<9=f$QEsq12<@YS^Q9f$XxRgvlKX4hI`*AhoSXa&SR z|GfKrTxGgB0)BBJqTxF!!tE{7rp=zw+-{+YNz;6)U7ta+VDNN0&c`Uz#UpgVDd=X@ z9Lz*)`?meMC&9{?OZ1Td#1YhoTn~|8z4CZ=lR*S+)jgr2bVs0oM)FiPSwMBmfm{sf zzR&C#I|3K+&z{h#1~#ZGCqj%fqmKvxss+EOj~j`Ri&LKyqPo(4+)b}lRK>H}Mpb;r zeAXZ@)-zgWA?%6!mEx=aTP6WV#`6o%7JCI!u2lxxp$n~(e=NtSiQ@wg^5H0d3F(+* zVUn!lt;|COk~FVJsPRmKY&B-NAG}UCeu;b0HG-*jsz2UoGHvGYC+KaLTEnK=)_p^y zNM5S7jfM}{4R-K~keGlRevYx~{DjLnYss9t zGRGc%I-(=po5>^!B`S1KOG6tUkb&A>m)*a;%%cz zu}&KXvC(J3AWALO^l^fH+>QU^7OC7e4B}qi0z(q&aA_&1zJ*uh(jQ)8_JXVPLt4L=xnSnh*Y4Cyem&+_!m&Az$;*Ggx>rePI2-eRaeNBp(YtbZX9 z_25%xU5ZP+b*0JbZDP}7S^5AG$8oHwIkl~$9mf8kl?r{Jg*;cm=IRtP|Gq6*Sl(Dx zzWU%fF>?)EL|-`UAaTKruYF-A?(%t%ocIWw&sB=|Bbg0TZz8ROoz=l)SMk=Lru!slPto1yo9_QC#uJW63f)IW+7~ey$BW3LaB7FW z+=JE`D#uKEI1{xNZsydOI8a@*wBYyGLuT;7TT_?JDiZqnt!K5pZ}@8tYpAIHw9W6M z`Tb^6CvSdyo96S>9J_g)L|V3ibvT=K$j(CeE+gF0W`s_&NG(Qqk#3^xRymuuY5@iq zC)p~yx0SQ#ZR9C>dz6nY*8~3j85=NK?Tqwh?~KRv)@EmHsM~j%-Pxi6qXxjZ@Hz?M z<}P^vvWFbg>dqCKvh8la_Vb!Su~vAJytQ=;NVGA}68^)QJjAD7=gp`L0^VcFE?IRh zGPSFpVQcZ(Z6f-v>Sf-o<{e@I95lsmW-mrAL)4Nw($%F#a_dcA7_zlAIUDsGCfD7jsiu}Ou z?Q;wnnG!$h!mrerB4C==rAThgP4;oW@%l)rFolTFZ3zA%pPiK*qx}S~a89EE#;<$1 zUz&(xG7DS=;%ILL>nS4Pvou1x&WxlDLJJk`JMEFL;mAMysE*fD(qC^;llte2dUJ1^ zX`r|hui<%)zQ2y4mHSSuoM)yEg z2^fdW>(Re4EBZ5`%9@uh{02x^#&&}#cBUQ)X>^dj?NbxY%iZ?yW<#XU*X)}3+qeFKE_!l%a>t&2|2g$fM~q(hsWSy zke69SnUR?XMUs}i%^m6jHW&HT?A|El&Xa=K)ucpB!~M);p)Ed!RO%g?VaMdCj(8Xj zAq$4}7aidla?^G33jrH{gD1TfIwRvOlzDHjsobduDHUXpg`jVMWrG zzzdH>TIq|-B<^*`{PPz`-C-0BF^{+Rw#SZO?X4yi3) zrip7=-7qRhD>?Bq5y+%=Z}r)JUAvoIJKxlXFFfw#)j3c0rGWc`6cG1S!CaLdetP*MjGB-m9@QvljzPWzk^6E z*_&SGs8BA+?scxPrRPfWn?vG@W(Pv5@~+SaXzCC(Y~}#gXr(?nOl~zwk#lw6uoZ3( zaR!e&Uc;3Q{5#0qCAXaLxH&AwkXh~p)da-#E<;P9#joYltj!TE2~TgE)I_)d(RYJZd+ z*$bBeRah}-z(siME)ly%w&&mwVTIi#5&1K>w^a$458j9$dGf~W%6Vt`SIZo92Kdz1 z%{kH;dS^BO|54WxYi1g}Su}k~WM(EtjV0gFjM4Wa^-%*iNcaG{J9)4k_zx4ThX4X7 z*_YE5l@2^}SRg*bzkmopW+NK!X}J-cVVM-NFt%@yodFa;67d6&vx6ZxRQ+^=BByc3 zaqE)vVYm6bPku!*WQR_f%!4gJ6{^7l<;YK`33#N}4O(f7fi@0ukk+EVFoSD;!$uYK zUn_mezDk0r^s-ItY=38}SH#}g6I<`$E$!IDiLMBe1_{IO601qCC)=Cp4p)PVYuD0J z%Z>2-fQ`Uwqw>?FDsLur9c)IGSIeRzGt;B4Zk2UO*}L5n3o;`GgE;gz&eHn>AV``h3bWnNoE z!t!hWSs2**L85}PRk)`JKWir;lh7imswDYSF@cn@OpU~JN1}M@T1|q?avP~A_b`a! z^Q-~*%%yhH)tlVmXXMb7_UCAE2N>d(kmd6@b}bU1(|x?5{S7f<<#8!gtEXv-P?*Et z=1!+_ws&uEK=#aiq~svTb&yPoXZm8Rq~$zySMWSXA{%F_!&;al9mWTKlKvR7Ty;(M zz`3%An%?M3IvRv`fwxUp(q^7YY28(9)p%a3-S2Q`PZ=`GtAYcmy0P^jrAVII5ok5Y z*s4iV^YPQxlp=ZRH*ITPEj4eTrgWGh9U>?F&44&ED4hi|&?+KU3VtrWSW+!djc?tW zRVuIl&%1Mc=n1T>CWDs^Ue00<7){DX02wm z?#tevthW>UBU`&M*t)9Opuugc%8sjV-a2hn0~HP6(iQ+{;8OjAsx5cu_lX_4`L?z@ zL;{r-0R3F+_B06y{WlG^5${(h<3zsPUTqJPQP=0nfznweMM)%iM^Q}$&ySofSpED{ z-MjHr#H0$#Q&)3#n_ukMk*EIgG}Z|cQsv|Z-rB)Ths!yoBPi`5`8WT`d_Yi4iG(P{ ziwX0PZ?h|bJFIcW<}UCvuDfn&+TLztSj^tV-Y(dLybX&D6kGmBdjxOcPQm;G(L-uJUMA{^5+b)0pb2$Z9p&#u@;8C>s<0|P zT^K15h{2tU$i4qAZL^2QmE-|(C8xN;*9;xe7V z`agsM7OlkO5n5WJMF4N@72)d1_0xse4eWq^lhC3P!bIw;=U^voW$k17k)5qpWju-k z1cAYoTNA?DYWS~J!j}p=QyZ2M6?o7z)g@V*tX|yR40t?Z3fzy5tNak_HP@9G<=q%> z?Ze2pQLOwg_#wj-;we7NqyLm)>al&H9|5^)^(l`!JRbg()h&lvw$f&jtJO7gz%q6= zQ$}pF#4Weq$iqi45p7a}tpV;7$MgN~+3V}TNx`hT;0Npz#by~!_}2Gjt>LtGw6>y> z;6q|Zg<5>KF`|-|)TQxp?@)tf+;)(ZF<}0Y9%G)FmaZ0pn)QF=;2eRat?Noa% z(W*N_2R3Q?d$U%}cVoZQ)|W)Y5op^}VtuvYvo$}it2?Do+gvPitH}Jug5#>Z8gUXH zLXD?G!a%@XpRY3hIY?whs^WaDkg|hMYdv?q>LqHe&4_^tHr>ReIKE5({N1R4PYr^9bAJm93m z$jplD32E+<&q3{^&l$slo%^keRe`S^!8`wwkKso9f6{^*4PB8G>@M=jl+VTF;o5Ek z(V&9!C~f6#w#E#pR4%dm_?oe*$1{hr?VAC+8!#op<7_QeR*jXH>v=hm{MP;3leh`> z=E_)b^Z&=%xd290U3-5*1_)$e0!EDz6%`c)Es76lP=PQ!q@xp%#Hs;XEsa!Llo_DK zNN^I#aF|M4tkhylE3Mp0due@P3pT-&M4*7mRkYNiMZ05Y8 zCYd>BpMCao?e+XG(+ky&HIl-oZ34orVhPf9SxDSlwws|CnXK2@kA5q@11rq=U#EwW z^>m7EM7~OxFty%RRaxK(-|XQ0Rd4#7m%tkh$IAG^cm3m!;y5)9brwEn;gevW%ADAW zk+k#rnd+u-eq#RQWfSjkw$}#gBy2dc4%_NRlXq*2?3^5dU1*q3_*md+8|fxi4|OW8 zdbdxOb(5jU+eeQ(g8rH*qF38#B0Y5!`w!Gnw87jv%`C2B-`OHoFol4T#ex3M*dGS|2$&ISYI!|O7vd=`gkKRma&2LdZS?z9_c%fXl7XTi#Qjc@lnP?|+l1}7$ zbM<0(A|qG0+CxtA$c48OmYNsh|1&)HGA=4(1CK-bJ0KBv%J zJ5%zZph;n8`KwpbOIqv%H%Sxcb6Idhldk8Fj|3ehxCy(=;ri@|A5EFCaTfa|f@_CW zoCVi81DtL3&3Pbt`Ja8MgwOByuW$BOy_4l$@jtr_fZeh&f+2qk1D7v**c{ zGGkrUl!9#1OT|ijv2W(Z?#XWcRbDvd6_JXBWkc|n?* zTxho4c(rEJazN7>r-9+#T>S8%!=1*(P!#CofRW&Lr@&z~6zO2zR+^%ZE zu+b{QpzYpe-Qu^0D!wY@PPcbaRN}SX-D=(6p>?0X(>hsx`LQi9vkfdxUi|Kl-avV` zTr+o8r(q7#d;h)tslCr3VLjfh&EXcaEp<=zBa$#ZW#GPA*oyGz&v0P0u`UZvAz&2! z*L3swKgj_m4k(fqvik>J-y#d(7k!Nd4oyX7wkn1EE zDcHU>&_=S%92BtKOJ9gg>M(klKq=e-6ONyz4ICJ|wWmXT1D_^cqSEJ=OHieS7m z9#y|ThyxPwP%@sorkhaHKsu1;hD4EKtwRXaYl3^pHX&~)F0~r4wBV%aoB_TvGyjd$ z9KMLaBp2af_G5SH;@Yl3GRbt0Ws!TGVhB%O7e7Q;P<@-5UrC`YCMsB?dFc{O!90p+ zf42MfuZtxYCuKk@w%ai_7ySD@#X34`(Zw(s;r`+qxJ!pVNRwo}q@+R}U-6H@K~h;_ z0idaDquKct>(N|T#qdJ$nUj_;nX2w`vgDDNv&ziAa`lv>1^B|XXSLi~#vk+@Uraj8 z(Lp<4+65Oh`*88Jtnf`j?+b*@jGT{${gh5Fu;5;1_{91+ST1n3i>IBL+*=|+@Q&VY zg6}I|IzTJ~jQI7R`#7QQc;K|05dSGTnvby)Cg!*fO#Q>>#3v%+esG4HO)ET>)qeZ9 zp`MW0yh1VeM4!PFOe7j$$=fU`zrgc)dWC)G$rs6F(mNuaeA31_zTV=Jvfcb7UwuY< zjtaC#PP2}H`#G`grYq!xs(D$y+Tjz#)7PjcF>kCf%Uq-Z=lW26vkwc9zxoH{coes!$NO$V!}}2NM2Hyii&qnPC0eLkx6Jxp?E6*U-2=&`W7i@>I`rkMjkYfmKIqo#Z9O1-;$y>fuN1O7cyndGo;n+| zVH53SY`*c`M7((D=t&d&)i}q>w48p5wbXco6=BARZ}!^ABh92cne^QLnh#}UiBX-L z-(0{MINj{|+dIk7=kTw1@!Ah`VJ_g~5BLbgLF8+R`D4wPek57P(Cy8byG6pKcI=?P zX0}}1X$l|dF!;f@82qXB)(1MR{^~J&b$dPYU))xQK=le8b2(54u%y(}&_fyK%E1~? zTm3dyr8$4Eb=NONUj8BUdzaM2V(Dw{Wdxh|Q_hU~kWa7i>G0T`UM*)ZBCoxty&H@J zI&mX-NHY@NmH~%7y&^u@+k`q)pUt>9Q!|j8dN_SpSg|0E5vOEH7_oRr-$-o*KYx`Y zyT?gZx&u%6EJf%U?PxHw#n9*y(M$?@aB0d9;@VjY6^}()&F*)1C7ORBGcz^h)Yluy z_|1&Vf1J;|%x%}5=4lo;L5@mhmxrZ_sUfORPgJUiQ-yN_^pJSv!7X2kOX94lW6W%F z0|AvJNkVtyu!`16jG$(8V0ZXxCt{qvx~_KT>4rXyvHYKtRD6c=w%Z{!-y@5rVCQ`N zD%?`U6nzxg4$-ZuY-c|-OPe`sov|YlyM=e#$%W}=14c?6C4Y@zHab(s#;1%ieWw#E zAzK`%cVI2$2Cy7s^Yi>QkEBZ-m`15ol+sMZ$AL%Amw@981*q?TqX7Nr>i1I$P@j2M zzLA3BQzCdG=em3XKtb_`CL^P8{JL(v3d1}3>Vw4V4`-(Taq0!au87FzOW_Yh59Xna zlG8&J72+R=oBb%yeJ3BDIJigHAHP0F04mPi8U5x^Ph_&S$Re%#$hOikj!WH6C*|S7 zqbIZ;IHx+3LeDcSFdrg|JsW7pat-q^3u4U~(hseJkfs?gu(+kU$FpCfXh z=i8Lzhku=yU{+ng!Zm)OGovxCymXF|mL_f=X|BcfUIv}|(S&V^5k%4~pd0fI#d z?xwIpqQaVd610F^5m{oS$^nNAD;1`nP60+@`l+fk=soun@K%Yo+?mma|AmBN-B39C zhQZ;}$?F{(5S>(*<4h_XHmQK@1LP@-P4%{%jY2h462GCq?3jnzyVKolXDU|Bc2TH~ zEr{ON1j2@|DT3Rbj|yk0$2RAW_=kz*8AlJbvJ&7ZJ6TvO;z1g4O=IjCgGW!kAQcUu z{J55Zij|nZ>{7O@d`p@`)cF(qPY6*PT%b-<7bZ>3UP&hH8~&O@G$p#o=UI?n@eyKI z#VXGavMM~|ljfJ=9Af`|^JS%9FmsTdQ#%_+uudvJH`Vt7s|0e@9wP*8XLvTMuh~WO zeD@x+=F2yjGFvrxVpdPR;00D|6E&71xrXM9O_wrRML$KTV`eP(C^Ttg)wybBByjM!}BzorSU>%)Bo75T4Re=5ry32sk}e5q)wKhVT+w8QnJ=}o@95@4D_UMoV5 za2iS*J!9Ti`2F5IsY0YvpNy>zY^wMs9*6AfwIPx`n|ta+KfQ^(kg?#pWr*;|6l-dO z8%QaVN>f6DV?1l*F*E*&E$DtWbdwBQ=u-4rNzA;M1loQlxUMW7)5Oe|lnZ3?I`jRT zt&IA@w^b!>ky>tl#fqT7>8Te=MGsa^#k#&My$!iPunzRir*Mv^2A>bQz6XmqO32qy z0>gTV0H@C<`9i4Xt(L7134DQ4O&df~rzG>MNlN1Kk>OHhwuA%!f-1H8ux1BUylq31 zBpeNJjfQ#BgZ*a57bWy-m$|$^6czybe~*Edog0#?->!Z)>0Cgs>`U85Mg}>_=(Yh; zYSpaFQj!wkP{l0!Hu4{fJ%O0f;C{TEg`U?2z%37aGKXlLW=t+vA`XD7PJ&8##H{}r z#uPBCrEP2YEPsd6M)wrTB<(tkI(|4ilna%SsC9hdU7t?^uK#fl%v7LVZGH@g*J*4y zC8^(P4VfPkuJ3p_W&(||UZVLE&>P7PMygY%x9n97+g@jDp@QD((9$v}qmEmsL&4%~ zMfEXNAs%KFonDY}N|vC~6GfFE+{Yh-yf&GM;dkiSA-MyvzPt&3NXxW^%$>H(Ih1im zS#M@>v~N4EL-Qd_5Ie?NZ(Xr~Nr=*CJOqS$A2VjA=F}oV3@*IBicM-)DiEXHUNzdS z7GsVJ!jiX^`9L(l^7e;cx|X3b^V^4A%gfG zA#(#MBdA>#mi3q`OfD>L_PCdu;*X_kPCTg8jPIu}aw^C__%d;+a!O6oHSZYqE4PfbwavUnR$F9|WbR{OU{c+z z3#d>-arR@qa84lqi9BPT`iV@S=Dn(TGG%teN9X46rPkM3Gu-uMyDxmHOoKX{J2!dV zG)mp}KKj>ICtEGw7j1C4^vEpnRaJfWi9Y*}|4u%8t|XGI^dWtbc8`N59|!u|m=eM@ z(<`K$QOSb|f}Bcml;M)qFl3%6WNIt(?AGvCU&t!uzNE^#`alnfZd1FXzeYkek})S~ zd+3sbBF$$U*)!N4dDf{ShXxgrnP?i=Cl-K4Gtq`(4=|#Ei0e9td{GtLhxK64ll7lmB4;Y z8IBA0lQ)pjo(!mChsOfdAb{!OTYl`tr!@tud8xq8jG`;x<@Lp#qDJIuu~BNCN-B#h zN_yf-fK%WPhMRGeD%u>PROA~@pt?vQ)+2W~nc2+Fgc`<1(3vIJQ>Dpf6npfO3{eVLtPjXqcX#y~3 zi|}>5qwln~^mDe!Cn(~8+;P6pG)>U8>LLNM@LBthaHH|SnzRW>a@;C5IEimL+$AIH zYMgkb(T$q7RVKGlv$@(&5(zo{f>l{Ix2t)76z+>!(9sN3!${YYJ1>7uZbd$m=faME zCE(3!84c^#Q!c{#@rc-(h^5*oYSh)PLEYp+vou-z4vwtFAXUBR($N742e&sO$q%rUpOQN#<6DYLX zxh}`K*Eeiu^k^TR?^7|D_YwZ~A~#zKq=j;U7WP^*R9Zr=yz#z1jzZB@`~r=;?8H&x zC!q@l>b`=Ut@wRh_AJy&uK~77*TCxLxBuCi3H+(m#ln|>ewo2e_p*MQCemzG#h>hiPO5xj1cUX&YInPX3uc?#!Lp+bc6*I5T8-Q6vW4I z5dlALw2Laq|13EumazG&=eQj7O`OyVV2;nA%E+LR>Ne&@6M(R~i-bZIrOsK~6=J#TB}_%51!_32u0mX$|WrG=E;1ih_z9 zd;qNAGYU&$%BG1ao5C;J!UsX5pprFa9+e>PIlbI~ek)_yEWD@ZfbJ2c(GViJ#xj{+fsPGAk38n`y))yZZ1>k-mV0m4~M zxP$5Oz#DK&`*~-xjiZr|9f^Sx7f`ybfi)hpas_ZAY`(o_8J~*w`m05Dv1fkBJp0rq zZfZBxM`9Zqo*K&yGL|YtYHdu!WNHYR%RbpE+DneT)W-V#7X;>IHT~7e_h^ItH9Htn z83T8y@4Qfkns&1u`OMOp6Yez9~zS}^t-V_yF=f=3uWjT zWz-@!3=bvy`R(m8{7!i_8D&T>k}>$g;~@WuKSAXxNwmrgG%y1U=t-fJ0hyu9Y9TXb zwSLIv1M46zdE?iS)0DQN@{l~Homwo`NLea>DZ*$GS)Ofc7tk_5` zg2SEC2r_>MpXTLr(l2kB$+MQJzp=CWN&Q({J`cPq`L7qt!dNa6u)4W?TyOOZL|-JI z?^fMIX<7WaNzLLIg%v=xAnlZN9(nYfar6RX^@l_(W+X{3jzSb`qP4-nWn zW3N-*8hw$Rr>#YAM%FbyM(tudl^6GsAUIwgA*3piB@h+Q$5@*}qX_1>cX;5AJYyrzlZH7!9QE)>nwE!du@ zx_Zo~5A^Va&#=XEDHb0~D9MtR{!-X}eri}M1!WoC1lu$;`{iXXCOeob5ih809 zy|@KvAhWOKliH!hoq}ytrODBL4X_QaMyC5Re`|HF?bc9JwK(UZNdH+gRU4reAvA)O z?Ue1dBBwuigL=N5CYD<=2lluwo8E6co7Lq${u$5y0nb1^Q$9I4$pehJ**&+YWN^BY z%)#L^;{!gDc#Al1i0R=fRBVD?G2ctBNBnOt)HX>!yvaIpPKYV$Z+@MJnW#1TX^wyC zHrSuUkY_wsvA%;obJbnSxU8T6u5bROf79DFL*zENj{qKAh{-D*}U$CXPxsQB{l^&*8$Xq7P>JC)Dd0=6EE1ZHHOO5tk(2toX#i z))KA9kT4qXkEVBDyjo~CbPPHTix9&KS{>u1F@g)_!$7|DG?{had$v45u!In{IECq@Q}_AKWZQTh>_RH`4yxB;Getb2+cgBV>9ozg|~h$)y%V6 z5XyY!MtkFz=^KU3MM8qOH_G1oPVx=4_6;lS8!kw{f%gqff0JeL$(`D>QmU2JiaL01 zeyM4^MUgLLUd18B9aL}x+~Dy!=b@hvFaaV{a&NbzMp+zylV$mKe)^ld>3jA~2fzDC zg85Tj$DH#RMMj@BsuNK64TzFHRTcy~ESr1)2}OZEc<5m@S=`AeCtc89s*O9 ztg7M(c7jDI8hQ&TMHSb3vnu?lYZVY4bE90lBz3J?u8oyzBU0Da$hF~eEttBd&lbqF z8&cP_oL8>RPF-t|XIq0@t4LkbXZOjqIjL*>9bYG<8j% zT`t$wq^^0TzYFEsPgB?Q**oOg+SE0DHpI07mpPu~kGaC}yvuj_`PE3r^Wo)=Cy$>I zd|$}V3Vzxt^AdkwcR$N_`SDUd`7`87$8$d47jb|XZRr$#&b14pW~;2>&c(Je2(#si}`tkpR@QGz)$iR;rzh4 z!TFvr0vsd1Q^w*cIk|`ZPMD4QM317|8}D5f$g3US zD?WZmtZ(dFIgR77=)+}?2O>H@K7Lf=_yUT08pq2H8pg3plOw3)w zv2T8b6VlAC^<9c-cK+}=1!m?5b?}DGM(K((9?S%fLnj0^;O+6lB~Y&pCP%Du#|}#; zzEF@mbqbX~8X|)TyrJcij-g9_l|rKMNQK0meb~iM^ViH|Jh*+LPxhXYdQv>Mj|B4T zAdsbH2oEPxNsf8&YPED-EvL!*w?oE~Q8vStd?o){2GJ>RXBeDZF(jlQBdbb#rsGfZ z^wj?3BMsr$E%-N|y1JfIyD)>?m7cr2UPrgtSM5#My)*qae`ewQ-|NA6}9n3OrwI6fgBNRTk@Wakh%8(^oiv-1dTw(l)ODt zhMTwcy_axuxiV!qml6Wrf6JdmWdQm@vjl&fXbU>|7N-a4Y=6zi|33!l>|+j+JB!_N z*`loz{O(04Bi=bfGd#@|BN_(&kAAufdzucAd1SgfUacA9HGWCvcpcL5`qiHpuQIR+ zLCYo{qW=AX1W82SK?2U5CXukM3}nc(y*|Vp!U_&`#vIAG;?3To6v}gQL#ARnHWNW| zb;##egU&m+&)hNk&k1)eH(w@C;l~y9r2v+ae|V;bQ2d5` z<86^h_9it~od$`nsCxsT!wtNM#TjUl?NPY{)bn`dj+Q}`%CGo=RH%p_1!v0=rifG7 z;9M)-*T?W|Q`dY!^zN!W*2jB62j>bMEFEUOOeJM;8G0LkS)FTi>f`>M0+h>1f!&E; zuR~76SXFF(x(9>X{dg!tW0stsNYp1t9qFKNo0zA$BJ<7eKawpD+xV!ZN=OeU7GTzA zqH*QQk=+r3yL36hD=@NP@<*U-47?Ic+9oF%em70dj~VO(`hp$)J3Rm zs}sr-?SeoJoq6N}j$w$z9_$NXC5ypzgqeIjF#DCn#uK=*4@csI4w^Xw&>8?t^vv9J z5#xhnpF{MrxGHsV24h9Y;(;X?W9Lo^2lU8 zhJRfM4I`fXsq-XdwqWyp|0`m9z<1vzM@p6$`Z)u@2juJuw8s|Z#OC>8#d!)jmUMGG zCQ?z#)iLc!YDZA`dlnerrpJyX0Ugi{B?&|b`y$kl6$#!<8EbB<@W(mgbjXz-FHB!? zCn!BXsXa~0gQ6$v==?0(+W&0ts8Q^UE`zMQUV`m?Wg&AF?>QXs;h^?yS@(;&ClV)8 zTN|}CFOa0eO_J+X`kW791S0}a6=+hi024)jyd>ouHGe%%&)KSPWJ#P; zPl~kkl(u5^+P5{Zi%(d=_Mm1##qLZRj0$D`$#cBGsbiR8&+Y@S;kVhKUk#22cZuJ3 z2^Gi52?3SZ7gys#PNM{~cv|klE+Ver3x+z2he&j0V9&66(rMJU5v#cg6PKLYa$1it zJcBl?BuJc{! zsEL5ZB!o&FJjLdEh!Pt2(?&tm#%v6$ipq<7IL=Q-El9gUBr;(Z(M-s z_7hKdp7``0GCs1(LR!f`N*4zilMoZD6F4n8NiR6F8PVMG;%Mzs(_Q7 zI!TU7;#y11U6&C(%}KFS1dKzb@|$wp?lnCx7XF|!xG2j=2w1%t$S#AimCB^;&utxo zv@AZy^v~mrlHtGy*?g|BF{z!F*o8dv!skV>C#buPm~h`5ZwTfFJJu6do*`O%55;LJ z11T}HV}0=7X7vP7Y{E1!x~;{k5_Xq$N~`Dm=WM`?kVPR20w@tOfV$6rj7H<_Ncj{J(dQqSdOyplI5 zZ8d*R)<3tqa=y+e*ruQD;&t-AtmLx`Q_qe`y#rW(u~V6S<8^%UEAH#25CoEgCKG1c zu6N;g(me7}7?!g-hWd8=CO(+O04p^`kDg5qz@z8D(RbouUZVh`J?8AL`$JCN!!P=| zv4+Kw5gKoA^zQzKGu`XFh!KRahTZ-NFCW<=8z?+lRPEDb$u*#M5S)}-?{s&|OCS^F zxY&5Yel^NcOqxAF94^LdXCO=}XBKormoL>+HX(XP+O41!=6oU4TedPmH|_GgIe1!! zCG0gHU)5;|m+BdRV5BbL%@k(|&thLN`25OABdqI*XwPpU<7s||P@Ml8Kl9aZSbiol z-&s`Hg>;<&X9V4YHG1~rVf^~3rIM)AObMtAnFq$5f>>HNdL?Lm6=)n!2oHD%^RGuwtdFP z*dby)EIGK5aZ9sEvS@HA6i~M}@c1eviB>F#(X6(N;I-Ie>UjK>8X};I5+f1|CJOF|61t2jQUnY#w}7q^Z9_{&N*6e!#Te0O6LCzqmu-(`L& z)~_2#=yS(Y=VSPkEOkJBjXX@Q>je|cL*GJ;A+khIXV=y$gW^5Q3^FL6a!r_9c(qBQ zv1;d$R&Fi3Zs=v#4@K)W;<};ELwaT0(90$c#eH~)cf`1%)|E-p60+^~1FMzkRtAG( zzVluBIAf*5?e$v&b#Q%aVu7`B36fgppy9_SbNmR`8*?0@Yhf(73MRZyV?b7grzOYy zzUOxQYH*pX71r<4>fxMHYhVZ)_z~B#)xsSo)PFk>S&nAoh2_c}_H{<$S=}r&&cQEh zex6Go&Ju-jsgR$*8$y1zn?K)?I;?weSO-_dYsCARbS|q+{hU`V7>>j^o~-=Inqh(c zu$IJo+=dDzfOp;g_`~wRw3zi64jh={8CDOBA%(Poxp76Q0bgchPmiOYV@un_Iud9o z3N(e!6s;Z^p3$)l3p5DZI?iiH+m!T@Ts12Xj~(ib^xL{rrppt1?w~wdiBp~V$^E3Q zPCFf*Gd#<4Se*{DoRR+OCDQp_3?2H(2bc)rqrcBg?=*eE>)_A1cQz*-xp$hwGnxJJ zs(5g{bm|K60I>`<{1{FfP$16H{nr03^}PYkJmWrGu> zzF41HXYv?l>{y&_mY)w?=mdedRo-9NG%R)?RdIp#}aPytLWBpYu1+u7oy<~%H3aV{ZD6okJOz1KOx_v0jd?QvDB5A&HqQARN2jV(caOkrLmyB| zfYV^K9{RAlC|K*S`BYT!f$HeSg)-R;nE&DWWn+i#Hbb&LU(Z21BvsAOOOw@T7FFAG z7CpWl^nVExE=wIbHBwb-o_pdGS*F;G&!rO!+{Ub zKh+s~WczYd38~6!0JRAgMsCAjVgbI&mAi=}KzfesQTeQ4*bx!s z5up3jf7&B4HxKGmT9&v>j!v)$%-?<`>&X>{2WEJ1_OdVFluZi7Ggoz7HLMpo8B4J# z&qcd`4DgZ@08tfi7kzNYHHQSk% zH_aTF$wDRCHarb2FJRu`CO<_%2i0*7qP?pby9#;hog zihbwwGz+d9hET`m^u-7!Kwnnu`%l$;j5m^^*q$FC3Z1>xX-g^pvWlhEX-g$lJOo6n za3+y3fx}eXS5KKgg^;~nrXfdD^ecAG%TwocTB!C{50Jx< zjkimJeq7@Js8q*MLo9~`015qH6`z7<(3h@+{s&h(C3(&l3u7~CX?IU&#&Z0fUySE( z@t;-2DDY%$+`E^fprf5~o{k4LYz;gPL-IIGO$jUw z$YKb^Fe~V`*888ER4^wilvq$`E?T5}?_3AoC%7Sbtoo~Op_260Y5oFVof}A=KtLEm zj#G}ub(MU}KTi=GHF{0HpX7cQK2p99bia$ArFXC9;P+kzN>Qy-zT5%zEBtkFP5+6UCgcz< zUlE_N4?UdQyKUh+OA@Ozv7u;NxIeFCidwqTpf|slra`QC!Q-k|8WFz< zPW=!%48klS6|9tY?5pUPFK4AJ0yR7z$OyC-edGDN-1QOn?y^iwidzWZ@3`=0ppTx~ znclz7O$a`5KvhS_bQP|Z5de@Ph&t#(!keXs(qAFD zWoS|2_t0Y%6{W91jGsHrl#%q71bku|k>2_+ji7w2mhIq%?qemvKGG9)uWSiM=;6a` z32cBIc-V+=B*ogyb9{@Md^u4y(>*762kd_e74t2J1AHp_THPk}qG< z!M~+T$3-8M(Q#!6bUpNrfWPK9 zG6wVH6j?yWB}N^elvu=95}%x7{FezuX?IF;Vlxg3U71n{Yl-32l9oftS_WFP>ti!~ zte5koY~37t4A6WUeNz+T?iI} zJ&AS}MG*PqPW$l01bU_SPeW_c^qxb(j$bUk8vc`0b9=0&noqIK_wn0|{?R4MWGiOW zc5@M5t$CJS=2v`6oCWfF0qRh&HpvPt!W!F&hd%)&hVzWP9)X76%KL<7GWL?2#b4ut z&@U^_`>lAh4#{e)Sx6aKp7EL=@@cF77GX%Phc=2^BC#CVtl3*LX#C|})f!h?N zFLI=P;4>oc+|ctMKZV#u3Z)u-TX8`=UcqY-CFSMCg|V8u_z4A%Hz&iW6%UTb ztF+8YDN`dOR)V8kJTBiwzfiNB4<_MDXx~PDVS*cD2y|HG6`zd_6I{=AiqzlNp{7%d(Ow7YZ zJ?_UcedH>NX+vWA6dYIa;o`g=5yE%nMN(hOz<9C7z?}P{$c1{{)*CM#!ld3vxsZ8f zBpk?Q`RqZ4&;^Rb>6**buKZyF9uu?Uu5ox_YP_5rT)${vgO>csVQ#vYveh1 z1h7UDcO|pIMo2ufk`F_&63@s~Ko1hn$n3DxL#4JR;_q9BeZ&%xD&leJ4r1T+>C>}i zJZzaZ!X05-ImoZP$=2^D1Xy3tUG3kM+SB4;WO;J%t)S-qR{A_PO>C6XK+MXVMftJd zJ{am=hbQ&Oiex*B3OXr}B!-8?$mHblAa{9Up!@eRK0rcIMHB@Nu)UBkU8y?sCXPy} zIGjM81W1WC^x`>e8nP3PavnJV#A@SG`OP??2*@W^iwQghg3fF-nRmX(j1fhJ(sv)+ z_Diwg9?4DB-%d$PpKl2{(+fyQdeSseLh;Zq<)PpnM-Q$HtJqo4WvGcrSR`U)N5C5H z6V)qS=rgQ0ZQ2{tw$K;UD$-nLCxf@i7}-Hi#>nb;4*7{3bnc<|0h~%KvLA|jN(Z(7 zZY{)_Qgv;=u8aq)5~&~pMx;Y?8k(bkffNoAetNrkE(=zj*^ryt_2xlt_O>^Fk*7CX z<>s&SW-B+}XN$4=%v}ZQ`pHdE(VO^9R47uBzov;2|0Qb_b9H~l1_?7U4=o~r>|ebL zjt7BV%dJV3%hz%tlXKEX64TmlX8ryhmUw~bo$(U5jG_7xJ+5!>^6>V7`f!^$hllA~ z?#bGGl5~a4KMSPeqK6hKeY)5}mro+Nu>265kc6j3+9k>Bj8=)52_B5TLkc#-oW{!4 zj#=XpagoQBN7q3ja6c0h*U4=m%vJZ$*;L?v<$Z)dH^ zjrBq;W*l%$se{9}1ABl`b$jII|8rZ=z9idno3thG@RqE|wX!GNSDcK$({!_Pq6Afn z!O$82gaPF=^wa0iv{G~O==KxlFRc9SDug!OL?=ZdR1By2`;}>h(7aMv8KMxnFagTD zI44N53plWL2II_1^rVRrP*&ed>tL6d@(x5D^ju zp}yQ_*Xw=Fw~3~Zi95F`Hr3T{V?pf{<|bTihY0rYnH4wU5o#H>Py?QZQlurv)=Bchq$g1q z=3B~TFyEP4x=fQ1^Wo|nz6_=9R^JdkX!&*VAZdd-nwx^I3yi;djf~!Q^Lu!{K4#_roK<-XeP@w4uu0E%@Kyq~D`JWvWeeoq$T=e7Y1@|O|JXUb03lB!j_e+Q+m_aMhFU*06v>tQ*%@R`FaPhIBv4 z94i*S^P?;?YLGYUj}?yRNq#o*^C&;bLs8f3O`Xm|h)0g|0pv3l*%Yf>A1mKzs%OZU zJS{8g%a-oGa`az9lpBO_T{&H}f(;BwKyFSSVFh*$ErM7-WDC_3HyYTx@8hv{-bP=sUxgw z$dP)fW`2ljUT$VtI=TGs)%gJ$jSzTkGiOM~k z$sjYANZ2@y*%#&QFmtgPO&qVuHjS1x6^j6QE);h#q-E`oA@k;%fGasgk|ia1FDoRY ze#(=!kW&-W|E6kUg@ zQ5~Ot{Im1WT#?dZM0{dF2(MaP0B^Z!xF8t8FMzMMk*z&HzvWz~vJRT#I@R@!oCLxo zl|g%g4dz=?XaNvL8>3%o`V=Q6XGX)aDI?_YDISaf=#=kvD)-a|>xO+y8RBoCEQx!D zPD@0dE=}B1n7F4P#Clpk9apb9Rj!o9vP7FgE`UC!-$Z1eq$;JO=2mB0*p5aUBfs{6 z47MY=d_~`{@uY89!sQgfWbNG!Kb5HqeIz79DZ0=>>>+2D>zlTs4)AW#)!Ka|WIvaY zcFBFIS#dLs+hy+TSSc9 z*01Bdy~vj}ub|>Nc7ip<G|(&P1;|3Ri4Ulw9prv3_Z;D4mQg7m;X5$UtjoE&6GXS6cz{+hWQ5zD5ckn@KaQx}*PMc3AV z-xGqMsJg`I|9jD`fc$7xCV8;`(_qof_DfV-5@?kJ_&hmn(27=qaa@3h7_|Bf94COv z1x1sYy#67XNko2;t=nXE61m~hb&<1Nj0pdLzz*}kxh8SAcxYB+firceQ_t*%?`91= zPb+9febN~yd{TTy69z3B!+YpjU%)k3*B42CaHxx=E&l4oye$#glY%lyqRwGagsd9# z_?J*yp{0wM*o;HXYk7%{`wx#m{xUTefmwN(Y2Up$hYcb0Q64^w6ib{fo_dP|olhMC2rgi*hv~Gy8iu z188=y@|$bOi|k#(bs3&VF{I54j`uc=Z9vCQ?83ZIJR zJ3TZANdEvVL%d4W%F7^OqH+glG{CetBy19X&)YI7TG^n$J$$Eysy4R|iGOpDps{)4 zAk5JU$I%p8R_wD%N2FT(>0~38nk`qhk%DBOC!8b0F4bnx_G7V!)_*OTzp4z&nYp#4b8j+x{0eX%NtW$!5?tMrg?h0Ii65iqdeqk9OsokPHw3= z{KXD(L&g!peuKFNy+ll6|C~bcjwUhPk2iMU&ywESvGNVE%8mG7o4-w!VcsMYD}p0H zBH{*v&31jrv@DV7Ylz=Kqs7Ro18CkIggkLWp;PAi9w1LVZRLqc*7G1KPrxPI`IgEP zQu`n24~I(^pXrGO{^#)K%b9;#+$+qj2UkqWv3_=&i{g0mPQ*uZ7dzQy?Kol!Iaz;v zn{sxA_5?|qqQZ02XGqH(bV7Erw~B7SGF0w?-+P>^s?CYz-S+kYnEJ zWwkN8SRHJf#6(%|5-}jCsk3HU<*8VNmtm#a|0#!oCV}#cC7cabYVMw9H&V)Ktn-s0 zzfc{A7h7a5R+qY1`O~bABr17#CYY*g`gB!BiEPPHPaZCeFK^=c3}Y+0w_LkKo2RhJ z;t`Vn5IPXqE2c(54-g52-)anOk_{k4BC?KTsMQDMTd*Nok6UKb3g^;pEkRY+^!$uw zY@iuW{RN6$zCn_8*StlQRh7FukqHj$IBu<&^4B|(d!=Ixi}d4|HB0M9N7jeIVA>_N zP66Kv?7jCS>xpmo?$=}DiN6QwiPYKkUicio6+_}<<#^5Qp+iOG>-;qr$Y~PX=*-yd zls^q}|$e)nfZEY#0WZa(USz0-WFT{%bMt-uqUkX+Cb0+SLnE_m7%G*XR`BP*jl=W{+l z4--#il*^z$qcZ5f95ncnK!Fkqa?Ibs?t`v#wB}mIqgmqXoE!432w?etORo1GgFY`? z${h0mVa1I#ul$zBLEzdFpRsFNe8%o*UBNVjUm4pEZ&qTRL{d95u^>+-oYj##Y>UkI zw8R2<^rljiGo9WXW2Rlev)9APneIBjF1^T{--)?0zq`x}MXCACq!x+!1$Y%Bzoq8) zwltZ@3|e|&vrgFsAG=eA)^pML4pX+>l?}tcapRWklu^H(veYZSCrfC%`9fwnyFQ}_ zCuGc*<)o1Zi(#W1Tv=!YTlLfq8j6?g9Tr&H*QkpxmPkR24hMUaFx7SAtTR|j4e?!> zdxGoJ&JqZE=v_oHQk)~ppo>4&JoU#q1+#%z;#}cxwEAOhQt@(83F2jBw=)AO&@k*Z zIUR)S>Qn#k9@B(XBo>>sEZ)jrie-3Vbut~eGW`B~J5M|NdC9?A+MOOUjslTCV!=%W zP;Q6^);LqWWuaL4dglvHp1CDJd$ybWOZhW-=t%r=H^zcbJE7t6n}){9*Tn-nVl&oC zhP4JLG%P|af;xyC$j}0buPpkv<&lbtfJNKbpN-!35%C?~Z)T(x9eKFsPyPT-ci|UC zIrH7TR}x*bDP?PY_?O}cv?*kUqxxa@xrWxythG*RB|qY=8%H_C`2@kAQSlEtZW~a0 zD3#o=SW+af%T5X&C}KuBAs<$rJg0AT3#(`~_?od9t6DB3vYNmC7p_bAUl{*s{o6UY zO;hacmVWBuy`nL&;-y*mAiykDlbA$sN!8DnfGa2&g9VFLXO>2V%r{8ph-w^toZ!>o z^9t7(o14=znZFpgA@MX8TdVk}$|t;qIV>`287H+c6n@+! z6dqF2QoyOlV%sp?y!cIuz)=QwbTxdr0d?oh?Yw&3c!VK}*QgpOFBnNp5*0L^=xS9$ z9iVaZi6I_%4Gr^y1}Ac^0QgJWB7;H|w;lZwn~H`Yq)i8Z_7Mn6`9WdnKF*q-tH(S1 zueXOs&;D(UB=n9=E;gIZS4*Yw83|w+!BSM%2ZGfq12P%u9OZx}9Pp`&bBd96&td9!?IqvcAzQQ?|4jV1gg%#o zY}k&{8=FtaoJW>s)|JSJBL7LmvN}I?%aVS^38$R5#18pN<-C9E^KQ=~pU3Hm!9wJg zr0s`@UwBA^p!Z!i44TmH_=#PKvw}FDD)Nn>fgM*e3KBY^BA`7vnWtU=J8rJEM)>qRNfoGoA8=<^^neBnhD@_)KcphFmj;}6f8BrTP(Z2J2t=0d~PZC(k>dW%(3*;OAM?ZnRwIp&hwE@}(HiHMhQwH6XDQEJv*qE?q%IF|=AU&1NMzs9kukD1MJ zl;znvwlAVVK2tB-k_7+*S!&+uo#YzWuClraHMU4u5d*Z5&^ez8CsV#%Pm1%u0efySW zo|V2`!wr|d9h10;oKk8ocZVox&R5fZCbob(AUYleoTscX=!$Agb0hFEIYed03Csn3O z-VFjn!l`(t=#w?fH zAZS3ijdwTTqo_fb2Ze6_{0im;w!m-M07v)>h$sHF*kV=BZXW+O`~aXkfBO`*Qr7%F zPVi8f`O(L83^ri?&y@C~?U~gz-c*f8ULrkjEn>4^k|F$#oYgsD`0Gxv7GB>L;wjRFYtVo* z4(~nTv!P%eNA`6`udA470gbxBuF^x)maE%qvxtO;*z_L^>gmyiVNWD~+2nqQ>+{0C z=)#4bNU!L^`@p2G_{-^RAq@+wI)E*bw+RX|Z=-b8+yAVc+|NxTkW2i(x$U5jGp<$+ z{Wp3t#BuSTHy2^EMB2cC#r5MStOEXZTBG=S<~nil?Qeda5wuB7qQyC6I+4ysr%QEJ z$VT{FYBWJ{Vca*?(a(T!6xBP$h4-GHT}Ra+Q+#+EcFrmmbajXe=J66Vt--38LiDs; z>ok$jbJ)~^VR5OcsA<6kJgg7)?eyTB4iEOS4HOT8iY%;46(b4}4;!Wp#=|db+R7w=jT-<~OOB?@h3OM>%j9!vq*ojLm>}h0lJ9;tgXqblJcJm9E zY@2O9^j|WMvdHXIGTY(PE1pc<->COf^Nimy^;X^1@1L>B3vGX6lkao1aY8|KF1oHs zc__Ii#j|3;Ikvf}N8AKE=IR}4OTeo?zv4)0v5j~y*+|=QR?e;3@wYyZj>~81c$iH@ zjq%{}kZmyjrxIn77-=4U$%jUCx5r<74PBG*8#~ml{O-1pJe1ko?jtDS3*A`8n&=J{undeP+ld#=n>*-?r}^3YJ`_Oyn$0?Td+|JU*}!^#H4^EHwiaS(t(Bp< z9H`YleswXF6S-s=*F4Sux{m1SEFEM(AHPGp0d=pI>E7CfbI|VfrW8Vc=-yJCl4iEJUK?H1I(JugA z6F1a^BbP74CqgRyc^>}&jX;TR*7y{H@ToaoBfj^^q{ixwAFI)b0uZ2TG@^j99O(LG zu)3(k)mmDSwjVc3quk&DJU?n~qw8GZl1w=nzGNsg07I@aTz7E6EXXo07J&^kNDZzO z=j@RI7n9aQEx6uo4)cu&Bn>^xO+16|c)}tSbPRRqZ*dE{u{m$MCAFQbzAGa>0dbPB z1YAN0vSv?BkCCS}cmU_~()e6&ENDP_M9pA&4nq1fTaZ(^gA>|I+}#QrX?F?H z0)z;R9+!i@F3>c3oDWp8P7z~jS{6oQ0gwd}DR!VJV3OvL!D$<>z@&%{;QqF zsWJioq0agQsArD#AQX7$AD(hPfysUSOUJX$#l;4Al>>t1JAcZ(FU6_ zU3x}8%wH3v+_0UwWft9W8&`2}fA}8tWe&fM+uL3L$j(~55+66l^Oy3Me|Wn=u`}?+ zM{r~ihUlt{|9|39opTI5Lm)o|3EW8R4F8;6^bBu+1M)@2ayO2Gj0HoQ(<93x;UgRV zevw$+`Xe(o_L5@FZ}RIuz_ud&yJB0t0(8lQZ6oU}Y*qMVn6pDdi?1RQY3_8t*j|{w|211r%|S z*F<*_G8Z=&3i8^66c=p;)B<{O2;eH9()vd$4|u|8TKAFb*TW()A^b-Hp^En@et+hFX1EFq5VG>R zt*h$VuN`BpsFsd8zJ!v)nqDpyEfa1RwynK zsLw#3J+>CU>i(P|U0bN4VtF2uC+hspW)ZoIw(VHY1=@tm(mdG*SnVVL6V~>nuP}kZ z1BlcqBnnyVLISP+RnP=UI6#U4Q-Vbq@3rl)3=&kV+a)%jEpa5!u7GVXFeV~66?EG) zjNGmd`=IbS@nXWA?%wRmo8b!7N{NjZK$O1tYrUpXK+_z6?*a!2;v(cdgwu}s7=(U4 zi^h#ji!p=^`_-=*UCylK))?4*Ts4Wv0W<6Q_k?D_8PA#-%h9Pp0W40hg6n=T7D+-F znt$!;uz!5U`@Xw>4yN}HR*k>EtNUjw#dZI*S{-07PECm~VP6Ki@A_xWim#|RpP7EN zH4izr_7EgK6*ie@$7*=&7Vv<~BeGIk+zMjL|FW?}Mp_;DV# z5vR*a23M0Y^($Pc`BS6vutVu;ym+vGf__7m_E%4o@~jK(Q1vUy(J~vhye{c_x438@ z0*7prs|{d|X~=CXu8el@P%N&DwuZa1(W(jI9Qle%3^>Ao*2;jUS>P(ZcE~AMA}{e+IAO8A%+3AOW&@9ERjD#Td3_}g%wwEgVl=@09UBq&Y*~WZ+A1{6^(&V3;+nxhlRV4CRrZ=e zKVY-S(b>k9M4dn`z(VMtp5wdDknMK}bH6wesKKAbgKX8++}|)i!`u%t25Nq6{(Z{K z@BXT%4$Ctc4ui{+G{!86^Je_Bl#bCR8gV`O55S&9;%hz`l8gm|?AIYI&$w>45`n7G zvdss1Rpfw+O7KgFC!PVNAye|awPL`#dt&hYYQ?|@<(trVAq7_%zq}FGAoq>JgX??_ z>BzsuD)%#q$Ac7QN^_4frSl5i#)0)EE1{5pgR&GCw; z8hM17oQD@itMXTcGB2&}ycluB(DCg&F9-1#ipabm;6TX_WzNgF@5sCy!kELn6bk1A zXsDeS<8+u92`~faF91xLBul>TZ4&)O+}sY~t?D-HjDjaQh6Q;Pd}QPpBajCmXuV^*-kMe>U2=#?OsIWWQzjt}>TM z%R5Z4o)--e(zJd@#9DRPg=L9XLkqy9l;5iGut&vl_?Yv$&byv&K{V*1>=0(CqoTv* zYh5LWtM(WN7|bDOoN_+hy3*dCbBs4(*3LZ9DJT_IyG z6#8_g*rm|TxqP+<7vven#FE}oO3W>A6z|0%tAxxa z&)9vhyn{e&k5el(%%mmwd9iWO11NufY@Bc7S7*@H?-NsYtgko>@BV3NQ*w8MT?s5J-tF4xvbB29tJyf?pnR5qaG9H zL@75~hY4pEh=2Q>JT}K|TsQZ<#ew~>EZyjfL$j47Lag=Y>0Qelj*Dp({sG>+=oU!S zY6{2nks{rJV6NCc=_{LW=47ywUp}N^LgsZTmh^fGN<+w zw6d2I1m8)vUP|fjCM)Q8B&q_zS_3kUMHS&T%fjqJtu&!Qw+E!$>F$6OdL{?tf92`{ zIk>|CiL7c5$m(p4qUH#{`a2miOZS{zLRd3*o-6}@^)D$AdrS_)m`aheR}A~q z($jyY3m5IZ_sq`pRF(T_n!4G}oschR>Q(9eI+v==&^Mq^Is(OPTe*~7A8mxXDw(YZ zf3P5?HCPTtbk|Bciyo6!Vk6V;G=E75sWq4Bl54(Qrks2Z7QIR`zAH;238?H|f)#0h zNRE5qCG@!WR}Ynkv@r;;GQRlB+WD~KWkJbK=;YF7VW3K#Taq!&=c6{RG$u!vst^+70uvUo6YtZ})I9#f!T8*~xX`F834W{|AdBk5~su|x_R3CYl z@{CN!=!Cd;aV)Ynp1&1v((J7?xqf%P0J@pUhK}G7DCKcsH1M3Q+MUsr??mVca zVn**RBltzR!D6p?6Ktm)!tuSxU&^BAda32KF6GhaN%M2pW$B5F-VJMXe#PQ$sudV} zb?Au)R)b_80{+(A{ud07!BtL4Vf{O<JjO^k#e4v zQ!2ib>TlIgwZGXi&GUSMwtSjxK<6Qm0)gf9KQ$^+mmL*B%nQ_VBc|}W?${6vXFVMo z+@V1mnH;OmgLL$;J4hEfk>$xjT3Ilh0g`d6OTw(3Q>Nm6}q1eJK zu(h$ioIT>{6LP>f&M{?c2O{~&h394YK=O3KiphY*zMm~lQUj(Hkesy;QT%awmAK#A zMMF38kGGhIi!2calt3uvL7sEY5OSELn^Fg?7xI`(Hoy~qwdJ=bT6(3FUVeh50fmy@ zC0=bV<8RWI?&|YO^w6BoYc{fE1u-g+yWioiG3=;IvHR^ecRxnM8TL+I z@#z(>`fK7B;C_O6Wn}L(Z|)Kcj+y>7Qs1_US2Rjq$q6O4_nAOdIa6~;0YY4$GZn-1 zK|%Q|KZN^D&v@as*(>ZRE?zi$!vsgRV=#8Ta1M$WPJU-E96iS8;eq3d*-0qyGd>#% z{EV(UL2F`0nA_pbL|jta@hK@<=cl4IOmRlyEsjKz_xjfLKISbFZ?*KpLjVQ%@4`gR z25@JxE+ygHSWT=cH0kbUgFkpnK6rK=~h>1Fg z?l~jqQ0y3;cS(A-Tzf+%egp}duwRP*2*?qDc=aHF7-R=m108Ma9mWtq)|JShiW~Ej z=dj0m%M&lpN!UZ~_w?6@wGB7El+|E|xppxN3_mV1`ib5=WIjc##cxUY4sa=f@#36R z?+jMSdi;$~wK$|&;3_GwTVU7v);ISTN_n}{ABYOdBSn*pZ!5?Xp~k?*x_Lj&Y9vJm zN4)vv%VJdkZ(pl8BrPI@OKKTi;)AoA(Xh2gmK@IGILUUH`{&U>g8KWy`uJZhc2f~vFEYH9}^1H6PdAdUo0 zYP%N$SwV+5dMl_B@{WyfVb1yCvqvUc%B5?M-R`C6)#nS;R zn3M~!(Z2Y##dP@fifz&h4Z4OogB{0|3SuX)L-71Urpzt&il#1F=+k5`BjAKAoq znScZnMt0b_@mF6)`*4FH)X>>MJk0%gmV*v z2PCt*18_>k-etkpTe6o0UjvU=n5GTUVy`#0Lf$>{75}q=y6TtUKtMRJm5itGFaGK$ zn9K~zvz!su|FE*jT`;{dKsj5%9!#3##(mwI&S~KHYcJgP|882=F>y&(qOFKPw>SsQtUEbUAnd#<<7z(&_ zQ#N)UlGBb~=YcJq+Hv~vpP9R&!!y&(H#)YX3L|odsVO{uoy)yM45p`Zy7^iGd`h}+ zn^twI^UUMdxeC~sj5?!jXC42U2|w)g%;4ic<5}J5nX`}o%=*sHoOAqV);-qgJ?9?( znFBxR^vsasKa=-5ZLoGi<<~P4XD&GYd+zAbVVy+Vh93VJ&#yYX zXS(_Cr5*Oo?hT#p|E1&o5x?$mKiW3z|8e&=;87K4|Nn+WSR}BkMht=w6%`FA3L-SV zfUtnl=t3l@6lklpDcFjT6|9W}H_ z8WkaE>i$0W%-QVOys+UZ&vX5+KU}jpyXVZDnS0*uxnI6_;&(0uKPPVN^-r8%?!10f@(S!S@|(!_agk6#0W4MP&=8T&-Dx?Pqy&&uC6%QG}_ zo|(<_3`?Bn^5%KImpG5Rd7iAqc^*a_9M^v%9d<^s{tq@> znfRTHUT#Lis}koq@b_kUh9}OmzN}fE5sCApG=I<4iSzt$OWb>M)bfjgvKANt1pep& zTj%yg_Ox$aPz^xV>3Lw0aBv>A7>7XdkDM=G#lZIfQ7-bPo(L}ng4Phfb=_d~>r-Ea zWjsK*bB-_zd`xf}Vp6)L3y^nF&B>31+V1I>ANiKD3V_5_dfbiHoIs##0LcG@y z|M0Ui=|@W8Y++=1s^U519I?)f?hDnGaqSB>j7m(C1J!YPa@5noxOE|QXWac@!|23i zHhdJ9Cr6DbiYv2*lc=Nm!G>!Rmzg3G`B;;K4c8{lQ!i>HXP$A1^IZOIvw8CU#ChD! z^JFK^v-6u~@3}5<9#`*X?YTa2p4*$h$DcUQ+%x0elcUay9~1r1H^k9(LgF&_ABk(P zIaLK4a@vqH*K*>3!B}aed7-2`Z_rNez4)D#P3{lRa}|DhMN=TshZm?&*a2;@*3i3A8hzR z;yi=n^WZ-hKL&0sXjYG@iOVd!w^^QPiSsNCHp}zF#Chg2W*p-)M;&g68y{nv@1+&- zeVtd_Jb$zM_s882Hr$%HPCFlt%af!27GJ0GL(Tf=w!~#FYM$q(iSzXD-Hd0;OPr_V zcX4$OHvBAco}$O%@-TklX_$6yTs@%2B9ZAfi3e_Ih|3>rxIOVZ7kwL-Cr9m_A2)~n z%bMNy#Mfy>^ZV1f#GR!x9*@f(Y?zt2PL2JWwezvVabvM+d9yNSB`(wb=Vp0kC(iS5 z^E~;9^9(PGdrywqkrTJ(c@H)lvv(yfbI(`J^2|w`XI1k&a}(zotm5h(Y`8mdp5e{k z^UK6}E*B^k=U()5A!APSl;hlm@AoM@k`lPsnr%l9Zad_nL_zANez9HH%D}iNM|UL> zdPnKOhF>MF(Z3qw@=#Q$w}8l{H{V910&B+$a#Ul!v8mXBOQ>5tK4HD+swRE(Wh6&k z9B|$Wnp;26w{DBOm1l0f@rmSm`fg{gY;)_}sb6tx<~`0^mzZ0BU;kBvI2H#sSgwqX zmg@%6g~&FqA(e2wigYX2d-;3HKP=ZE(oac`k^WBloaA}Ma*ZU-Aw5mnOFE_0a*ZL~ zLwb(%A?Y+=H^z}>kSx+Gq_0Tl0o*Z}^bqMe(ubteHd(IANHa*wNpF!lm0PYX(jBBf zlHMU5CY|;g<&x%+{zm$Q)N`}t`j&K2h2^@QG*9HU{QV>89TMTPTvw51lb$5)CV95d z4$>{8M@S!%lDAS1(j?OFDPstcqzYmd>>J&etip1X{!PWcMiJhTFJJ6shjAVt+Oz6%;S#v0(8W;dS0*Lh%@3c9@288P(%w?P23#pTAH;0N)>ZB#XV z&~9vDMc+bHn^2%SG^KLblvGbq8ip^01zuuVSgA|Ya;(YZ)OZ*@0D*3-!Ars^OMq)= z`|R1#_Fw&Zeg{y9QQ`t)N`e4Y#0c5>y$2LE&(uepSVO;9Dy>{-e**)qq7L zZ|U+@b-pHII8vGfE(ViY#wx ziLu~`H|}G6ipEkjM^83oYSJ8;3#~sIYMXG2p^a7};Q}j@G2Wj2}Dz*YI=L6|~Rs>$y%R#4#y!~qr!{SPCmAWk3-OoXfy%%+2^ z4|d2MiL+ye+_7eQ#X4W$HLx0ZRt|h)4}-K;{Tpq$jnPkeDt0W`n(RYrqCVOvc-!@8 zQl}$-A>M}7S?j$~>IoJ)HXyD^$WWNTy9cJabQlhYrf zB;Mj4t^SM;-Q2=+o&Ft2=*CZOiqYAKWZ?7r5UAt8R7&O`s?+Z2t>jaPYmxL zStEDH`_<$v0H=2$0vz;{?#3SLsT3$yKm4vPxV5XI9-Wg!LKbMWYgnvJVk8WCy|6mI zv}s~y(P*1lIDI#Tu$rFYj|-%MfIIF2{ge1&D`f!$5z12xqMOS)#k#g{@a_zjN%2Y* zs|QvSKu}aT4Qy<{PEJBS^ zIEO9}ZuGEg$oDX(Bqr{o-_c?n5La7NC&B4piKJsW{^DghFdUSCN@BAmz%@4j)GThD z6#T)Z35X>I^Il_$8GY z)R|47!dE3%Ho8f?vxpkn)Q%cCsFIC_(n_`QK>p3VR;p93{(Y~E;#D$;*NRbBIer*{ zQVESX{5GH;0HxW!hXfBIvH4#6jtPV{q4P{qFeRjcBNWp;L)2C3{gtOjhd9nuNRr*-&2cD^& z^|GrNkur$}mq@$@_@0+wq^!|{o44iN^Jt5P=ugW#?UX2Uv;Kf>25oKM>|5_rkL30f zzN@HOM)!3Y&6uYcO_Qx_yjGGJe_$e&y>nHk!1u6J13L6bve;J*Fm_0-I$K(S8e`n# z(q=~8>yr6p`VfP!QFP*?#w^>oaM+MJC;fSIB#AgX<>@W9X0f#ckLBFfrK2#oYVDLJ z&;c0(JJqH?iML=ct5Wh&`IdVS=(4;F|EIL@#C;RShwwSbuEqypC0ydVpm2%%GkyEY z8t{bxIGeen$*EBc8raq+-8^VMW+&F^Q2>%xkS6$XGXd0fgY zXW!fmq_=uW^7$|Y^Az1Lqb57uDkv9hN_a5O3n@6#V;MRoC9{)&m8+g0VN#ZbCu>Vy z^WF^2Yla32J4cY{v$1^=lPJTF8uOu><(ZMfbBEkwK2%t+o<;dfhMJ7M+FBWNzBQYD zd-=Z5#fY{8dDTGVR>C3McX!HKC2@Sx;>_7Ft*n%>fhk)c5G<&1wNVIBcoOAjY$0QF z+B(aqJ9?Qz!61nMIQ=u&;byZ4Rt&r^F>BjW$XFVa#`@fwMRo}-Px4!T*F7DKny0C? z7#ItWJ20g0Xj`hd`0~U6DX6YHi4T^44AXX~`DDQ^ZL@9t^%p8%Sg_ZX-^aQNL{UAg z{OSjj7(v(f5BnCupv>#6E!m<20JO4J2Egh6VgR)4`e5()uJ7AQ*H4pYMy42xYhyZA zWi%TjSn#s4K`&(`tWEzm&eX83i&^J0z?R9sgZzUIWhOHg*_)U|Q)Mi5(MbAP^|QJ+ zcf5N?c(qh3^?3&L0Bc0tf_Q@3epWvhxc_N+?>5ce!szTBofRkzJmIiDyQQffQRc&} z@AD4`z@u}C$2r5##!N>5L>t1hgPqd1h<%&6uJ>o=<_70@z~4)Si}T1MN03nX`&5IEr+AQ~rD@Vq)06q5tkM1G z!7L3>J*$`QK|M13;qVX0qfVFNG>Jkz#+VD)f%PwjjKpmmonZ=u@#&if7v)q38WUgr zyi5)KVu>fYOp2%ftcmM0w`ERTYZa7;Ic8WY7Fj2sR`$XizvqR~oile>%VdO05UWUF ztzb%m8@Uh35L}f!;r3g_GGuT&5unc(cAnxgIMiW{Uv8j|jGqqYIc!PyvA8+E1H@bE z{9Y2ye%SFn=GXmtC$lxR-Umw&$omANb=Yrx=T}c0`Y?BlVGA#{!i-fGD8N z_K>&X8zIzDqASahlxUeua}l`wjKIm*#ELg2TWD!4Vvpu~&uFSIT*V;Pi0aV9DmHAm zLLG1mWBGldiJ;4hP;(?K}p0(~0f&}{25$3w_;bwtnyWXFb-3%x6a5_VT zKt&hVosso+blRC!V2|9IxW9tQDg~$N`EiCmyXUXx{C4az59*{tu&6tC(rz7qC2)mo zyAltvD*ExGqqv|Z+Ig%p>mDy6zksUs$}lS^wF9Zq;I+hS!ZZfHB86a$=S0JvrmAxb*_G=VRUD{$ zTGxBEz~~S7?jwr;SX8|*hcj4>0Gx@u_M%p2IJxUiMF?OY#^3rawH6^=;GV*Qt}g4V z{BD9(y64cY$e=Al-GOvi5g?P;m56^L&%S3ucxRiVJ3Zi2bm{oW906C#i9fxADTvuT zK*hvP)lU6*OwCEp6@T*U+If(V%~vFFh)mRvz5TI(7b|Syc|cA?08OZr_QR&Xm4;3^{&dTpx~3UwTG2!Do-a7EwQd=bG+9I^#@L9`d#YK7SOiy4uY z6~KIqwdDmZ7*P=jh^T-l>WmDDJ59J*A%uN^As{UHBjk0r<{AVIy_IhZTJ*%tbn&PjGW zm)|!%vxaAy#dDF6zW9@^WxV(fn&Vz;qPC;NbHVq>O15toCkSiyheJ#tc(R%{Z>0QjSwt3oSHzFWMOCB0rDY51MIjf zMsSozEHkjV_)X@&45z5OWvXBOeuoUcw$a$tumxXoev$`zwmK2XOqWK3!2#5Xa1cb& zH?x~Tt?EIo`@3&!ziJ8=6L1fDvt;642|8_L8hyo42Dn-zyyDv;4*VY95n&`J?j`i- zKI?in_~#Qc%kZd|C{u_=??6yrRLTlTq)LrRUw57$CvRh}%5h+4s6+HjD_$5Z2)U~2 zIng)RyK^%bXxo!^oXfF*>iWmW@6_?OMWDg%(kV2kRtcln(eVAYx@K&kGsDQ$>tj~E z7JHC(q>CzcPSH=^KbJE|f+urvZobYf#In9X1bIU6$(w-?UPR!MVJ%KM%^gPv>vp zu--Vc$!nz&r!f9cn?P9KU(Td&va9?#sviAKEsj*kGzfXV%@v-w4HWhXDDa4ki^m;+ z6E&U}N2E_@2fecwdDQj~Wq>j|1>(q6_e=JEL?ya~`ByS=!jOPQU6ynq`Vyog`VcEq zduOJvT8@O`&{Qf*(yhr7@4PB9Fh_NM1{BPTPy!;!;S`t!BXt=}gwDJZZ^$Yc_I3d| zjC(Z{4xRfZ(()A!W!T01n&lHw(WPCZva_-KMA{?8VQz|NAJyJWnYlUYN85x6XaXSW z`yY3bco{pRwb}fJS6EW$fz|q5vTAjVn@Ed_&Sd+!)l|`}vUc?{1&aHmB47b-@ zuXSB7t3X^`PXuY+mJf=jE0J}qX(E0ZBpYKvV-Dz*Y>sN+U#qDQY(FmZcms00HXo%NNcSip8bp}oXHkS>CNJi3C*1P(5|#WB zh8Xq%9KKOJ4x5^q-#aHq@WEjs{c5<_A=9fwFK-Zc=H2-hc)X+2&`Q>b7%cxnoM_p9 zHIVtiGdIBzD|`Q@>A;m{Kvng2PUObuJ~_B(cc2qr zLmlhRCtg5}+0BCoyjHn1gTOGHdC`kOE3>A=kS@Q&LsGM_E4L4kqC>zu&r^ISaF32VgnDnyBhbL`btk6NP1BYF2eV z%WWfP%3)(AghlqgVPjKS2AhSjc*mNkS)H31AqT-?F7nFmFwSe0;Sq585He))gN+vP znbus4^U`HN9~2%L(voGBO;wQTB~UC;9JZ-$FsUZ+>bPb9%wZ#0lAQ3bn|)p|f1v48QruvI(8L(}O=ku|FayIj+6 zP`!KM@W8MDaC$7C^&u8DKt|@e4Q)a*y(KrMg~s-RqepMX=wK6U!O%-993AgGZ?s%s zb^kZR+sA$Uzrfp{MEtXIAsgWV1Hd)4&}PcP!1F?-bOs_mT8n9~5ZLbqd8#4!fzi~Rj8Ms~&eU&mf~A}J(LBBp z#moMgi&KgLmo%Z^4Ltg!@I7M55g!Hc7=p!XIJ&Swd4;VAZ-SEg8-jotZ1;yoW^|~~ zcxke9#n8X=Co&?o;oCl{GI%#Sw-NmT?19J2zv88SJQyC6QOr?BVp45qvC`fvcIcsh zq3km=*?{?K&^6(?8sVFHU5dtP?(qGDuvgSxcEFJ3#8PyvKiG;lO3qZ51!S^HM zF<_1c(=b@(HV~Eu&Cnl(c}-i)ny^@4>8xwhnqn~to*X{pSGy$^lfEgJ!}O)ZV$wgE zSWE(nNBoMLw27j5Smd^2sI+;ZSOi>m54<5bKaE-AQUl#gep9cya}nhLjw-Ng>Pe3T za(RATwPt%YlBtwMa7|5sum&Y=hQeqth~xF@o}#7DXV4aFlMsX^XfVgQ{X8!W&(L&& zM8i@a$iF+R`$lSb;8$NqgvcTaJg5=syPG&u&OFwr2RJnej`e^-8nn%7P&*&sqB5+J zAz7BgDX$oWdDEcZz0fFp?MapaG1X_UTCv|k=r1Ja#mOEHKb7kHZ(P6<#DEBE_-4Ni z;OADSyoF&9eMwZSkrEy)o zj0%RZKn0qDBkKesFS1UEA6Zw(=Op6UKEb(CQ!5-6a9>1o4wl6%mzq)f^ouCVVri&H zInHC!Wu&T;)%K>_hNIEzC-FPrq%~Sjwij+%ojZ@-0W}0Hc34mi<}(}P6gw(Lt8nGM zv_ZQ=Qxx0|Tgpjtq?nIUfrY)Ig7Mid=tNo!)9P}HaY)CO+nJWYj7b;B`BqS15HmNh z61Ro|W8VUX2lYB{N8ts$vbev&ul)W+Suae;8jvcWF_I335G}0-W}eXAe${aS80Q7` zMttQd>M9Rav>pdUSF$M%NXPthbsUhdAKfc+QH%mMGi=$4zq&zUfh@aH1TZNQ3&emo zS|hP+s2_$bqDXjoBN95Tx#E@vaSVx~kkq#(a+mu^(rf|2DFU4)K{&Ra6g_wi|B!>1 zuI+3rnVJU-8GIW-l#peL?SK*J9F#tMeZIlF;jUO5z#JV66^LZKDbk2_XPk`5t$tr@ z%a{&`jA;@%gqk zEI}9_rE)gT=2+kbIfr8s!joL<%TQqFBq8&Y&=pnZ?95j)zr^|=SlXfNyJXfJ<;_?h zF))ecQJBP?*tF=QX{exxDb{0=x{*+)T7mXkz*0p+SAOyv%u zyj&{MJ9HiV?att4coOV(cQP1HwI*ZPDW`!hViz#6x^|ijuPLcq4kAt-a&s|zT4Mgl zg3PxS@+VZVGE}e%SjeJ#J2IvWvgFi;@O2zPR$D|m;8?^eyGC`IeF5T$j-CgG@EqKK zje8+0r|2T-xz#F<+x!LN5Da$tQRVW>p^+)cmMd@qk)&bI-o&^R=w2f|L?B{NEyYqw zpmk@GixpJr-Gv`Ojh7$R{fbZZa+P*nEqa-KIasjDg*M0rio=Cr)D`z z>}t(#K8e)c0ujT-y`njn@*Jf2=#D5UH1MO78q*hQYItom@&5@yx*eS$-CC~oh9GIt zX1zw&Mu%vsCdl9Tr8zT5SqBY?tGc(Vx<^Jn?OwYZEEp@kgrm>>Ia38 z#)hpbl)WAc4PiA;X=Ev=Hzl+ZgV?v0@y;u>7m{_2yR6oYy4O?u2iAjjXS*}%KfMWTVoU z>2(ES?fnL0rbjsIZr!4rs*xGCo=Le*QoH7$m)7q zg%1b;V^0%WcO&;Iv{j50sy@F1q{8C;(Gl>&pUWhB7&gyJ#>^AL1mUFntI7wFB?Yj> zEtL{0d};D$SfJWd{NNF@Qx&YtQD@!GCW8%bgQqwwv zT^RanRN!!jB%T>`C_E{x_)V+AGiq~qW_mc~LCi-1SNo}TCFh3L@iX8sSIL3!tiQ?F zTqPR&$ui%?oML^{oWi`tBX40&rw2Eu1bu69pjn+2Sc%aZ0~ezKd3E^elz*gCH!2Vr zT!L|_6kQ>pK@*oAdNm1i=0kPoh!QY+4WNc%1K?YWIYVYybDD#(@$EN^O-dX&4L$XFtN-1>@X#wzobEZVwZi@+?&@m?mve4P`#+6FFMs-P)nhWJnX!jV(?)kAhpk$#QS zQpx=ofzUJ9D_HZ=@aKwrBx~*iPq7tcH;8^k!|-MwoFsplP1*H`b~~%?7yhT60x~@w ziNz{M6~a+QCBj;8eo(56d=w`Nj)M3Q`KNo;w{Lmmz=PRDuDXa>2PURQ0#^4u=W)ro zI$q{@jOBMxk2%WUAwuV9`DY!E@=sA&j`HttmjCLr$D#hc)$TWA^zk^$|8ZO8BVXiz znlj~8&d`2$@S6+g9E|i`ytCUv#*lkT?X~Pg`r-}LBl=?fY4*iMXWAFt``Q-+;92xD zDGz*w(E!;WJKg@}gJ|}LTiv4d>Or{jb7}FUc3{%xDw`F=lThUBYm+Udh2h| ziwoFp^{tb-+ZTD4*cYB2_Qh=;`=TJ4>)})FUmlCz`c3o|H$|UW6D_9`{EL3YKL*(s zrvk#Re_4IL%Qc|uLe~(|Riv?`@uZtcw~%fp1xWXj9w03uJxY3l^fYNLX(MSfX$Pr> z^gij|q_0Sgq!Snl-AJdAGDzo>E+J)+Mv<~fxuj{NJkp({Uy_2Pg`~x#$4O6;){tHz zy-M0fVt&eOX69pDsouNYh+9O-hFe%~j~uu8LD8G2Z*fc2Vwbk=L7FcweZDQQhvsg1qwXOC@T zR4)3oEvl~wJgP_K(iWpKGP73%*BRd`tT<=h+>Q?T^j~ou0KLW|DsW-lRf_&eO*M_S z-~74dXglWe&s9%vjg`Mw#zJ&7UvfOkKTnNwlt0f|{+oX~4)yP+>bAt{-^W@0thUOZ ze?U&&u`NRMtJ)u#pfa3qnvOxRzScBv@?jj~M3T$lbIOw7x88U|9&=E+?cW`e!YPj< zg{>U4J9B%mEV-<<1My|XY{gzkq%aRj%?eiCwg{l^()?^|1NZw{m(K$tfyp zm#6q{ImH&Nw6s+`OURrw&;8urjoA=`&Dvq>ZbBsI9&r&&)H7(8U|;E zBlgP3Ng_=E@||o?k}df2)k#+U+^iOcg@PMUcx5XFyK+P48l7V0-|xNqHKHDceJgVP zs?%-M24~-a>Wr_xfdg2h?cj375N>UzZ%xz?4%c7t(^ctTv(CT{t%OnNW=&aYtm|sO zlr|ydz-u9Ujd7szEy+Kf2k2$<=oFEQKEL<6SWU2vBsplJXnfv=p8tr@Tv#u+`)!Z0=){a zy1(@jtx5QZV~w!}w{yJXsXrDuB~&}JELU5)POx7jtL&TWa_hDkrg;8q>Me2n*StSQm(5m|I?aEb@ldlB?s)NEX`jUHcfF$gSFdB|zg`l! z*rW3ofBv|wo$e_7*ZU8)V|(kiGj4k`@`B^Qe;xcNjz0elfBL9ETOXZ1_siRkmH!&Q zq8;@4?9Eo_)BgRjo2uL7SpV_#ZQ8$PEk6$XONz1_<-a0Q#pwQc^6@DD43+69f10!W zzdqh({g1==S^Ht!_~{#+Uww~#e%-V@;rJOXZ#&lU^P@kuWBfc@-D3PW&XW&Lja$#2 zdz_jc^*k9~*>XK|ly_x(dD9Y>_sr4COIM#wiL0OIXyw6I_KmWZ8EWk_%_@4l&%f^< zxA8Gd;P#KczMLy>JJ#`W=Ckb>9}jMCF+PF^j>G)P-xo)pjOhF^2QiU>w_85YV`)PA zbds3WEAplkQ4C|&J|+1C8j^u;qm~cKh86Q6qtw^i#j5LvF+(%W~lxJvRM!NdNq`3Ay)KqLM{Jsb^)Tghv zY@dT(y-j(8-sF(mQ)IX@$A(F%UQxz1m5K=WgYOJNQA%WpnzW;-)MM;lkE(kq*1vt~ z9sN6NaU1=MR|8dUpS~$cS&s5w`P@h})+x7!Lsw>I-zJg$5?`_lNN@<3i})p8x_liY{N)o#A>UeSggL} zhsa(1VBXd6pM8RP`sn`Lcabx=Q9fPybHe&7OJ%rtCpo}l`I#*|ay}Qh9(*}%4-(v{ z3(oHnStllB#*RjJLpUrAY14*b{w7D~z78hR%a>C-t0Cko3SXBIDkuT1Lwv0lisj{< zy*#7745t-K1H!2UOTQ$H{YPqvFmYioud#cEV15FtW&3AZ_^1eZMd-PUp9_c0zyM3A z;0U7omZhIT{%75tfkBH^FLt9d!g*Cr{TUCx5X> z`+~r|CtKJm83Xv;%{--z1-S_VgD3NlmNtL-iEXOz!E=C_1Cgto7Ua!+__3tC)WyJ; z8l!G6ZkA=Abq#);+~unlZkVU;lnK7mrc*@J?&0?XMwkQf0@6iM6y~jQwcCPWh(eyRXgup1#Zidt~|yHR6c@t_8X#n@0~!Dj9uo z#b^LyuXox^~|&F)9&Gitb&EJIQU>)?K9Q?@tahi zYU?^xbdr`zb#)VJujgI*1i*Ug;Fmtjj^n>P5Avd;@|RtSVH2lOvdfF=rw04gR_))} zhSGdszQ1>ux5W-x?c3jzL=95kmi*tg&%bx0 zV+)Ad1GJwXPFD9|Miiz0bNe0r+hIW){p%R--(4Fw-uqaI#(Vfk%kh3Jg#>v)u(t}I9Sue|S|&&kK5{PR_&qx@;k z^8b4OaiGryYTI98^oi_q)PKV9DE}fg!%_ZnXZc?iABXx6R9zh9U*#x#W11e~B9BD1V-_{5Ok^1APXmx>d3I_i>g#>v)vkLs^dUUwO|#pOcSA z`5jcIqx@;k^8Xq<4)i%wZF@3CpUAt8`cF6><)5WyILcq{EdR^<+Nl5k@_G7SgcU#j z=jr?)r2C(pr>~I;{coJ7>u+l3d3wyv|2yaDi`P1sssG=er|(|Y=6U)bIscdE>4Ee9 z$LHzS%7vjm?&s+T7q;Z;tIe{l+F~^Zy6V(>I=g{n#;|r%#sZx92>4 zEc|*`_4hx-_JhygaqI_I7qqcnA4~bEYOM=+8JKlEC=d9yVex}NDlz)e_{8#Te4)nQD?Zzx8%FlV6<^TA2ls`b-<0$_*K|+q6 zmpUAe^82fvj`FW}mjA>r+n|p_pK`qPi}z!_cocn#)-V3`L{IDb#p9w+NqdFaACtHI zH}**{{gTEUUEcENf5=j491Yv;fAM@5S=JKBTe_`wun19k%W;rL9o%@_=<_HB!3pSd zzr5{O>2q;vJLvP-Us|EhV283vTV{)nKmcM<6W}qyKE4BOfks;N)r803z6MTDc;XIV zVXK2>=@SGUW;|Z-(-zrqn+6QFCx{)w1a!%KRqSXd-~oxDZLTUgaw2B4)dmmKfzspf z{v2ahGio+#griY=1cT3oGK|2UcqJEDxfviJ1NgNn$$B*(1hGa7NQ-3tB1iATjc>RV zg?KW*`<44nM8zP?iv0y}9{vd8x-?gb#n^~D?| zN7YvE)nKupu}?`A;d*2?CObM#+dqaEHazT;D83z9cU1r;O!BK?3C+x!FL9MksStI5;iac$OEH@MxxWQD4GH8Kc zZKn*0C8qBU)i{kB6X@g1q+Q~sdbY_xZZvyP#h??u&}bTBH&h@$oh@(by{7gJDwW>L zbr-*x-v{JYV3C7&Q70FaBUE2gc8#Ac?q^MJ`u=(GD95^e-*=8*!6+>g9MG_!FO=iv z7An|4+%W)zBWl0Ht<(N!Fj8p@Acp@coO) zVqc!i${=pez~sJ~BWnXt0~4g10hnP-O+qP@%#dnpk+9K6&-$}j%bbfu%lUJGR7B%% z9(`oZvd3_X`6K&%D$An569Npn*6(@kk%gOhSv>8hZkBb`hRP4C@h+KWBWj)Bir_21c7l<<^Blwq(R^-4dz-$ zkPQ{r@VKYwYW#_h= zvitV=i8yPOn?SP?boNB$IgQ9qVNtg?-Ig0+p!OsT4^h`3sR8vYaN_wel$3hd47C2tZfSPnI)rEd7&^;tBnj<|V&EWLA-lR}*kB`NL+8~3rl`ulmhJo? z6@bM%X_^Ta5eovW^W+dNc=L65iXlbhl#!}ftb-DuEYT3W5eoS0ke(0aSeHaoOB zJcH4gohlKRS_!zkU`(3$N6ztLgl5eHZ2G$r8b&}?@!}M;@n}rt3Rl|R$CC(-fYUll zE)a~MI)Y|zg-XDcP(S*h49ty&HUcgSb|<`;4!B&fU*(TFN1&wnFH5`mTgeW55ade{ zzkpK!^VBFIa(?z=7kpaxXsGan5tnuU57hmyV-uNB75{UaX*met@xE?46r9q?zyPGy z=Wcco@})vLMv5K07Loy`wO^>W06=VsL``%f!Ufld0tc+&X@2%QHG8BGKt~iJf--hc zR%fi|^wk2N$3(~BY$fNBoLu#j7rM9>Oz|Ar)FHpO)lq^PpC+SGO=+wbBp+UL$+p7x zI}99~9xT|eDYd5wR6RB-4SzNNfJBRl<5!F!6bA=k4V^~^5Os}lm*>UG&@$P5Y*rw5 zQt*g79@)vT+K)ZMdO9+7&=${&rQz9b>sxW0I1<*o#CUjd)^u4MX)qYi#NQ~?N9+ts z8%D;52JjTsFw*?BTlicsvYSM@muMLhVM&*vJU@mn)OKj_9UC#E5;)8vVhT#sFbOMI z*(JL;=xBfA0Tu9WCW!Bg~47z2K*-OAs~J9vtwviV(}>?sm3wab(8&&s>>!YIpA zxd+78XvBxYd%6jFRVfS@4#t{Z{;=jQiU06Z*>r`CWH-H!wcc3NLOs2|$1HL6Iv>_Q z`qlVb{yR$QVytDC^V)cNTDmHXXDDjA)26U`_Q%IcURgGp=sT?%`s&vj!`8N`do~l`c=w#ay&Lx~`yt;7v2YOvU8{SZ2&y9m7nICJW?W%?ATd+))7W zLz?%qwuOt`ki@TkG)?GRWb=?iQN3uVb2H``|CcA{yD#sc5y_H)wlEl&vN)Ceh>XSr zbFoZO8IUrLtsaqe!X;tCX)G+S?Qh0rS#63Ltn3H?Vd~L4!JmsYCPB}19f_~9<3v{- zn5Dvv`PEM7i|4b-rckXXS7V4edCJrmYU<7k>T!3@Sjea7mq<77iNz`XL-e@yJ}8zoA%uGV(-lOyLM zYj3q;tw*8O`3$owdr3I~d|*^S2bB;@onZsh)WvQ&c$O2C9uw`H^yn(A51x+R0$_W3 zipsxWb0k?uYo)`0KR?&Br={#naw39IXMb>k>1|^nEgh;Zq7Y(oo2*hu>)8pGY|9aJ z--gU#ONZ3R0&x+z3`OKiJ4J4_#`XRsZ6ELGi=8p!;P&e!|=%P9gF;c@i ztg0H&wHJ$*EMj4efNJe9Z(}PP$d7(iHA*J9T-TF4MI9NUaI?mK->PE&f0t?EG1$uy zZF=svuIaDVKGc_j`;*7gM=pEztNxT@>3+h>T`$Zbx2cQO$viKJsds(+Z|2^9tD!|` z(WNV4e+Vr)%pi;E@S(cq?CqWX>VB3Rec1E!X1Jk{rXr)r?gu&f{TsU2_Ug5}xejM9 z1>`kDehp=V`}(k4HUWlj;0xbM<&WyN*HF>7=&sJJWDC`&UBGkK{T2py)LJL6#qt^Q z_2tU1!Xuf8`dZIIPtn=18CjbHz{lta$)^|#brT!4^pCX7x8H0vA$Q#XLR#_?A;?cY zG6bn_K@dwaNvu^N1x*3})R5wy#fB7mO&w#F)~Ij73*S&pUm9z#H9XZUvT8!=Rw#y> zkSufRhBI001ALQqv^uX@aqR`CpMc|^-}+n$U*|o%tLK)pwz`bF`c;qq04?e@*^XCG{5$&I(s=I%t*7=^ z^rHE}3`6s?31w`k|DWH+4@6s586A#>6J;%e6J-k|^suKWi$am*)DDal&d8K;$1+H# zdWuevC)5+B=-R`=HR(+?v{4ot=Cu5&&p$5Q1u!zTvA=scpn@4yVi)kjR0K-7Cw6;0O@3OfKk8Zzb$@Y6j%k5W}V4gIC zz+f+Xitdy45hY+hBOn?^{j}y`)ZgN!WKMbBG{R(77Y^ARArwJc-iItpN88LN_Lc2H zI-BjmL=z9Ct{I(mIB>t|YH6z(cy^3Vf_1t>BTx!?)zHpcS$<`Ra18o6F_ZbNFTZIv z;+v*7uX-HcA=zH!ep>G+y{*CP)gib2^mna1t$Rg%c*fU}(BSomzvM-DZ0ix|s8(ud z1j3?G+zi3HnnB}?St9(NzCGx56p8B6aFp?ilK|=S`(Ul1Fz!>6guOlzD!|E11Jd?n zjB!*D-KeLyn+(Nm>YWZ>GrEk*vdd%<>om5mv7GG2Kd>N`X}X~DP&J{gta)C_DUwlK zv;{}AUs9kEkS`JeIdM32z^)tJ!4Dgnadj~_uFJc(TwBatR4&&xWEmh$Y4VXw& zsw;f^ShOY3E3c@j85`o8A>w!@1IkXJr?m-6paeZVZ(ds&XtyKq!Kp2A{@=z{lrg14 zl%3iJ9kl2SC9Jf_&FMkh#Clmeh?tt(QJb|fa=R0E#;Tk&J$ZUkE`p#OHSoLoh#Zt8 z1|q23`6KfF0nPIAYS3SdJrvbn$h3K=C2Zb7^~L!Za}s`clGnIJ z5-P9J4waW&MufbMmc+dyJ`bT;S!NhFChpzYM;}yYw^46aj-N4MdYbEq;oI(fFA6P@Bo4ONjVX29h5MMYScLrk?3GFBGFHn zpNQu|1^Z#^_E-3ntRBjf+7ydN&V(tdn{LA%*+VospD0bY1k$EYH_o$pIm8rXtKxxF z&Uxpxb_~@w!*_ZQzt{87*wj)<+bnrzo8gXbs`7-TV?BLH~lXTgGnP#wnb$UMqt`?}?*L=FMhE4D+S3 zYkw=N;*tnw$)>#%GRuEM?&ZCxVnB}I$@K`Ut-%OH_P~WSC%8`&d~RFs=DY^&%qt@a zUfG{lCi{dctTqsaNDHj!!&$LdU$cDm9xd!(60m3`JBYfd`RayK;< z=3nmIPe#J-FD3Y0I3;N1ujv)`Ey*R`-UL~Rmk8f+5w$EVcn)N2t5WKZ&LnGlehQbo z2-WPbcy-+w;cI)Dx4YCo=VT(OmY-$ZE)e2QA-cqR>~3z)^sUL90w^T`r#c`OS3g_# zB4Mgh&=M@N!&FU_a3kOfiJ$w!SzGhdJYFKQc*A#jJtvK>&)ORJoSWf^8@Scg7O)Yy z0_HvVAvxA0*ChKEg{BA`5Jq^YdS?n{rj(%H1@g#ifwB`=IXt)-$^R;-o#iX?6o-%s zTfiV?uMsRsU^C08AS}sJLZ%f8sw6SF*BokuAZuEUdSJsvULTA~_9)DbT3z+p&lbA+ zPdDi;{yG^z#+T9E8GA9WUwv=9*-W(|m9fGS4`w$4q*RUT3G2{#?B)?ENui{=6#fF2 z;1(`thuJJq!u@o}m)b5Z-V{c^miINYhau?ee`^o(00&2E(1zJu%pN9H@7?F`Zq&82 z88|03Y<*x~$7IvOP;EOQmW=zgk`pDNSWxU`L*BR9w-<>~61_$*sbxs|<0IM=@gdFH zCWLDd&K`r8DcCf$#k|`dz`vRw?NX_!=AY7Xkd_*`ta^G7i;FFVwL=N^LpvA^CCF%V zV?iVT%<@8eytXaU;m!37OoVB7$s(v_cw;}2D7cJ%i6kU}e&Qvo+C;7CoS#WBzR_rV zhdyRU+tHCgPsWn#wvWzbVhy~Vs3@Fh>kB1V@WeF20!bv*#{4c4K39!r%dJBRSMOJ& z<%m7du8*ipwdrH5(!%%zL@08=#$Q$`9h&sn!<&>Ao_xk3giQ3KYfJ*G0#ekTlLbktK+* zjPNwVqp5%G*e$JQmR!t{@f??{G5HFYt8Y@^ESV$%U`>%cH)~KIHdFUheWWh4Eg!RG zCQSu6*Z#rucRC{ZU2NNv2!*Y-o(3ONsowglNLa(;*!`gmaoB~V@AZKt9Onj1EtK70 zjf1g1V2#7fRD!af5bm`VJY#KzCQ;dI2*<_|(bq6+gpSB|VAzOMSij~Wlw~CpD_Kv` ziL#+!;$0TpH!rAq6Z*Qf_*&Q5r;}i9@8FT-mRK8l2(fo-MfT`)iQ8S8pVe9bN}@V7 z^7hsOP};XRRn>K+pAY!e;0=9|ieTc@s0C~JKa?4o%_N0?IUobcul~Rou-OSSWc+Eu zPBiiu11C0W7>`4|deq!uMvV-b1NNY?&wXBA)_jmg*SFw-UYMfE4r=DwkrvZP7@(NA zEJeg+C$!|cHJe1+gkO8D3!T2h=vwSqe)UCkhuvHqF|^s7(a{A7E_NN!z)p_Fnf91* za_CIvTcE*Axcp7lcfn8ULCV|v1TkF+9Wy*lWD8fdV8*3JFyq+z9tZ^vhO-aaVQTz= zA?lXzUW=#hmq?HFggh7{EgiMHnt_WRYJOs=UsE+UZZhG|9; z)nXdk`2=jv&ogIH^ePM=3s7cr3TYj#oRc{3$feN+=?=^Y(>%t*bg z$1GT7{fd+3+|y>X?!v2Dsh6DE&1pDQV40rjM!jN|EP9B=UTSrcSUwm{h)DW_^H5n7 zh*C`p4~|V9U>}aHU0UNful1ndZC6-A&!U)(5J=X9WB;`fhUIo{>xWjWlNME9A;SDX zHzHhVqmxp2u)6cEkl;-%J4_SCe()1Pt`Rf+K!3Zpy1=S&AQJ=RRKVg1&ddg+F4~o_ z*Yx;`^PiwZ4s=HI8fO|ZCQUpjf(`DwPMw}owyy)~3}*8lzgl7;@*jijYlk-YfT!g| zfSArZ%`hX?`EFw`RVU%69L&hhOkcH#(63H`cga=t6~c^EAI-1g^SMrD#PB2Y54aI8 zI9MiQ?u-!a3oE%ybqlSlgkGU#tK@TIIiC=&pOzYVik_DfK^tPG+K0I*K=x+U4i&E_ zui9EhEv4Lw;tamiS?Ig^+E>`|6zxOjY~>JZ3}X&1kzE&8b2}-Fy~(;Nu8K=B0!W$Q z8MWPrWP)WGq3{N7SVyp|4Hd8DQjq2kpkrnZ+`VFez(P$Ms*4F+oEPGic|(01Q`hpL z;h_pQ$}3#(QiUyVTE+6#;r25j{moPSH1o)=S?zM!TEjvnLSyqu+;%CBe-*_Go30i$ zT|I1Hakh{L{gWzmHk0Aj=uLp;xl}J5`~ny={Q!~A`K6+Gwf%@ctS>hgFO?rK2<~T< zb4rmT3qN>H8t(ndb8m4W*TCuz&j=ScH1am9SZazr%|jkEvii&Pq>AF9QiiVb<@S{r z=&q4Rn;GaLv**|G;jk1JT3jk$SWvyakqVc3iu+-8O%>!BZK6z#q#9%SF4gdci&t7bIt`0lUB|Fg!wiVc z#kw$KIBFBe3d^tvR-|Vg@f3f|WnCXiZ*g(s|EJb2J%BPv) zq856N_t^?f7}44l^7@VPh|w`yVJVigtu~_06xXbfR@546EN!QHxOQ`~RK->HO^R)% z8crz;r&NTBg-inT_Lhvj9!l3=ZO6W zC-d-K=^V=yLu3SU#B_$p=myT{A4Sc(FDE~?vrbbO{Z=b11%-5tMfNbb%+l{g5a}R? z$J@!;;W??J!4~8tW4wA02DK7AT}@sptApo--Rosv^!RFm75%a{3X!l})EY7_f8UGFeI-Z@b54PTc z62o4!nPH>4(pKdT)uJ9JX3WSqd4L+*#^S${&eW|o-9}Y(l@5OveI36Wmi4pvvU)X@B|U*Zg#5Fc7G2i=2W!5bpHgC#h)T>B5K3x|MmJsfWyF3_ zzP%=~8A!#|Kc0(g_MLY|n@ud`-iJn}C+DZ+-TdMzc({l zC4KyH*ptHx6M)@4jf1w99(9}lzHATS5s@p(`0IJ#PA{J?6s~`0p~O(X^+5vA9Z8}= z@{|L7GTI;!#0ZGo=|71y373fAoH)ZSyrsndNov87G;xMimESosq$JKzF)AkS%2iKo z!K4MD6OxY|Fo9d&ahBFGacOtsITNdIr^Fd555+R%s+YIMy?zEBCehMz)qp>4ch+q? zpp?;@!6PRoe$~4pV=WCH>5@3ZI<*c9zyHacSB3Ma3Fe zkT^r?P0kGWCeD!cv6CY65@)y|FZPD{M+zD2iSr!7p&;6fTs0ORz#d>@-TvH)5!k}9 z4DV1^A!v?1Hvh){t>Y&OWcG_A?JIF+m+|@xIFi_D^Je_ z&i6dft~_Jn@`!<4;`Rg|a=u571c~$PSmMkhT8YGY?)kMdkJYX`PsZh0*seTp#pMaN zD^DaY&x7sClNm@FJM;XZ zU3spL%kxCL@?SDr`W z@~moCo=tIio@!T~&*Sp^rCoV?{>4dyr`wfhOkAGT?aDKVsKPN?Khv%}d*jyLXWNyh z%QMdRJlC!~WB%sMBaX<4*U{N=d7f`qp5<|Q{@SiQ+Z=gvRl%!q%zrn>Vv(!X#NT|w zadZBWb?tiFr*U~+Xjh(VUUpLN#dhWSNnD=w?aDJ^gY!KvwJXmRo1A$Bu_tlQKKfBC zPp;a%DURY*aW}h_$K9L;{&{SSZ*14wW;kpq<{uGBdEy#A8TX!7+Lb5yi`Y4F{*lsl z<>_;xvpsUEPh7V;WJWO>yxOijr(GS(ldE<;@tTN+I9!X(m0EBi!pzq3Sr8a_IDuE* zW7IHO43UkZqf_r1vY@|}Uv69UX~9BQ?|T=zt|t|eo+oW5MMwkZEp%m*rjs5cRgwNf zI=yhA>m)=L3!0v#S2~6kP1l8lRhH#xSu+a=9AWuYDs52u+TN0R7`q_^eO4g zl7+5`q!4K%=?l_1p@puSNMTYL>1)#Y3l_SjkbX^ijdX-Gz*^|Kmh@B7W27CVw!8SiFU4=h2cH0*(g`NWW0Hu$_nJ(0eppDDT^ za~pBB=&T}ZeuyxZgL(HS5t`vjInUifr!IQMHWi!GlcKuGQA|&*a?C%=8ia+-t&{k^ zT`hY|em0f}h;VIXFdAF2Nx`fCPOm?5XR6gDSKabbt5#21|Cna%lfMXI6KgB7cL(~! zS+Two{|&`{;XUr&E!Cu2uRSuw7-96Wx}l5|_peKr^yOl^di`t-Fagj_T?!^3_4>Ki ztQU@En`CW9OWj{XLRpVpOt9Q7hQ285)2M`B?YJK! z5eyeFmBCI3i=wDCQOA#(882M=rK~aW)uZ~bb_#&3-M`!I~nY+d+lUJ-9mAUbM;x;6)kg0JR$ z6EPBX>Wpz;i$T;h{(}edW6E92C&oxDtnY=gF>qXCj~5Id(S5#&MAx7JE%^}Fco_?z zT4d0~FkoOlATFxpiw)aQ;XB9|zBR}nEaKZVMC%yxZD?WUiw)2QnLBgc86FlzdB=LX z)vaFoklqPwu%@iXf~|QlAZ?Iwk2|A{kz23^5H+m%0%?(e7dVJCE3g&;xL@^U+X`ow zs;bY=*E-6+%(h6NRJ>ESM*TQof)71 z+tpNi%f&|I+10o$*5iH|&faPK;y(I;@ry&FVB0$`ywPYB(zKnbo_X+r3f~%8G}R}s!=`1YPMhlSx+Z&0O7eJzW9d6Wl;6WME-7WcjmVIx zO;jyky}aXhDPlPWya<-7`2+M)FUv~3wJq1Lo?$jZn)1d$Y0XplwwZ8G@DPz_71|`m=&O zOvPoKT>h!_Q2rUgf&;GnC6U1XCLg6WNw%$;yc5j{*2q#MZN{vDS+|x?m+Hmaz=X*z zk+RoN9hOVKIv0XSi4X;nG^dEBM}DgFWz(i!QffEQ^8)=aC|EBxb}r0R#CWp%3Rbcm z>Xi<ltZtH3mIlAepM;@@POCCER>d=9z?qB4NcS$D8-ocrHA269Rz%pCUm0i zY;n|^z?5Juf&s~x+_6pfV_Q|Gte@+$n(CV8_ON2@s{y~Pj-wxJS%tMAIL<*X_zb5s!gDIu)$zZ25XwT=ME`Q{FhTpzKgJ z=GeU>fegxG<@Qff?vuZa)Xt>Ofx`&&&J#z4ys_Ut27*8%9+O(%M^UWp z*2Fz*v*7rQCu2B!tvzTN!*U{I3|E>zRq_W{6^(U7_|^W8=#MU7h{z)M$(+8f+CID|uTn;l9?xEOVAZX*Lz3CY zqo0h=`3Fj%cx;Hm6~O<2#ls|xgo~w#Vz?SAUddIcc$NGLVT)ID5x-}LmNA_G2|0qT zDgNBz;Wz>V$p+mDMs@c%rm@;IjxGD%*7jfBy3y(3u)KDCs<#?9=UQ= zbuVrEl40qZg~L+Qie%|mv1a&p2l}^mH=ii zPtjr?Hn+hWeVMf*EF|D;SyUP>E|Fa8B(L97bTbrF-itsR-$1rRQ3X%i}5#IK$r z5om>$NtHs&mdG!ChPyJqGxj;3#~#P0rFV1xXfug)=`v_GN_MI4bPQ%jU74=^sj!+U zp3CoQ>?iD)y6Gd6i=}y(uwZ{B_uzp;IS@roR<~Hq0#&tBianS4PkN)UJukIJh`qB(d!cqmH#u>``RYt zh*Sq5@jKD&Y@LQ88skPdcGF{a_Ic{oEf5{e;A=(@!!tqn|w78vXQys_STv z3q!}`R_Vx6Zu|U9zCKFF=>F4}W#J3;JYL%7G^c}FrVM6js2sICDX(GnavN>}6crryf*28A!8!tw;dOe)7lVy+>R%(~sRlxg< zwyJ|4G+@YfBw4nu%MK$@rTCuB9caw#BOWGxH2c8p!yMQhY#88q;K@@6r+LEq0Srp` z*F|fQ!*Fbnjc4%A*CK@3WSa<0tO>r~Amg81885J8=+aT3g6_nU-=k-R(2)J6bp8; z*z?$fsav)gOyDzt!YnmAar0{|`_)t#cynDXj&h|iqM_{aQ1*sUc2zjL%CA0r?KO7L z8a1x>Ry|XSN?+#4v>Qx_}^}K+;Zq4DnJtM(SQj)(@ zUHFZf38Onbg>wg})|CFI_w>R0US48l@3cTT*%L})fsjMWt~0jcbCo|$u3zVRIt=kE z=C$jk3bJ{4e3jI^5aX&nr3A*3Q4MMlKiwQHO`hcU5r#%gazu3J<_K2 z(Kh*bf>BQcWYXA;Pz!irTxa%()!lTaFqrt4o61j?`Z;O2oLcB(8*}N(ZQL}ymYbuh zw?!hgg^t_vq~T4spO@P|a@;PA%l*V8ZeQ)V{i99J+?4W+!Y>v6*NkRX4&Qn# z5zmTa5Z{jf1{A!^zY$Sbp;VyU8oIXhp?_OHm}-qrGwZRZ=vQ6nYR`1n1YwR}4vGX| zhnm2#jwd+{r3`wru7l-`K7E}$eGM+v8i%G+S?#HQ7)Qqa1TDJ!q0ypdxQ?w0^CMF+{FEVwaJXI@N4P1d&!Eq__T z?dniLHBv$(f=!^_)`{9FwL0WmLP<;t4q_qSQmb5Khf8Dxhd4WA?<0n?79d`N{1AJ} z9M$6l4%|(sL-j{sc$?U@+V}Yy_N~@CL7`MkuSR+i67OZ-9(D732kpsOqu%?Xsp`;= zDY&e`IR*E3#vNnJZJ}%yj?K_m&qC>=+&9mbiD>4yV+B!Nd8Ix11OmXTmhQ3Xy1}YZ z^Nze`_Kyu_|8T4Dr+OEXRhF3K(^HZ+i8K|-+^sd5@Ec{EPF%(IVNKa-b->Z`YRzX} zE!aNR)q<(R@^^q*M;krkO>#JgF1sH=*Aoq0**XAl@U}W!xtVH>@FEn$VP`#4VSM;{ zw>tAdEd_KA-HOS!scH#YD}N(hAFTpP<6x(J`s{z1Q0N%#9ha`u_j= zTAXv{oPAq+@3q%nx4mB*XDvZJ$HkU?7m3BKIY>LU`j^`xH$skz>-30mksA>VEH_u2 z1{Pd}n=Ot+khkGEk$$m`S4qgd?lsds%EbIR92_Y+-{ zYb1?F^tQPmBpt0XCz2eE_LKgjF^`H+E5R+_1*`-qctsfnPVyL(73>%O6y?&HlD~iGrN(4X`Z-7dGw$LDXk36tw4-ck==)`VFbNy)X zQ+VC5n}#D(zix^V1(hMYY21G9rdCvkiR*|Yc)LlH^Z*2o>A~STUyIJH_f?s=oea$1 z!{XJiAV!UV*fxqvhU-qoe$ib6Cr9DSF~-3k+Zo$n=G$SiD6zpe4`QL5kKAR#&eRAt8Adyq>q8M(RrCx(m^J@F=|&74&PqRoo6$0;mxxtC&yO zY2!cV<`1Cuc$Xqntt44wQMHc$=4+Na?cp5fxA}Zw9$QV%s4kJV( z@7l+W>`nDA+)uoGR7o=}%c_CMg7RN!)3TyVK=zXj_piR@&Y>mNJ1y@k#RU7(@AceI z{9k_+h1VbXz2^DnO`Xylub=gMeaQ#@sh|57Q2l`4>vY{1#Pu3Tu^uD zIhW)TT@WP#RmY)27w%_Oh)vF|>b4#yEiO)McvphUiL8b+t8j(IUepHF@Hm(Ic$`15 zVKxa?{91q1{QPh9&NqIq3yC6oF*o%Gy#Cbh^*1y!{5d2d4qB2pZ~)_eyZCel!eU?_ zF7mE1rNevCAT2Y7Ln?H2xm(UwGs=VC{hVNUMiEa6lFO9vsjWMpfda==NzKgOo~vCf zV!p;Q3AsTMsJhYHuUc8CHK>xe-mf1=y`%g-cg=rrTf$dbow(+6AU7=zTU>;t$%H3b z3xuV~v|>97^gM?euh%XULnyCGC@M)AIJCGw!Whz`RtkMn5gxKv=I0UpIgFa-ift!O zcv%r=8*qxMLHkj@mnoUKk~Yojh>!I0CGX(_S!Rs*?o)5=(d@c+Fv*_sdz~Ec+W87z zJN;hA(n!MDJ2)3FdwZT}zqX47L~4TH7c;$Mjrnk()9kRgV7ztwiPs*r5xySFlHW>y zWiMJ&y_?`PdTTOX=f6&ETzo>@-#S&lPe}NXy~nrYiJg8+p1tTlEDcx{#GFk-aekC3TFk^|I)FIJWpDB> zrc6Vqb`vpk8m#(2a}DZKFo=v9Sd}uQ3aXS%70n{--7NRNxWw|rOG_*#0WDuyV%ZA# z0bqS~iKQoCB;ZEC0>BG^PXN`gEwQwEeTk(AaNkPUj=j0Wasco@z<{@wSUvz80Fmss`!Y5{HE zTVi<<@GhWgg)in4^gr6f=sfL&l3lifZut6=7&ZZcu@3K;7dxb}P6B8Uw##kklWn-S zSokxHb|kUUeQ13r6!nOdu}*{8#ySKDg7F3mNZwh1iFTe%UeK}1PiU3=3*l-S2!auevM5YgiSM6Xywp1#zGCKWk9x! za5q8m>Japl;@rTHg~ELX5q|X&X9FqofM>x^uw9R%3klB4WrTh4lvA2-vJxKAY3R5T z6jm~^PMd30G2}Z3^Jyw`ZDJkAe}NFB%xFcY*3hn~mX3@1FEptXF^NNyJVxQ~Ay&Fj z%NFzjj!+Q;5jG!|5T*$2c93R{4igYJu@6Xmz}!3levIelQIIzktf>a_zwJCX-9%WR z`Nqr!0^*M)YTUi(2R9j?c$Kc*XpvfW>ph?D?!t*<= z+ExnaiWU^hGd0$2%UG3wlJl^^f*A$fDy90ij7mJXE%QnY&;^DT#> zOfJASg(8|?jaKK1k6~-9t)Y8!4158OJ!Pn~8$vjzWC-(MNQz@rC4S1}kme=Bs&CaY z7I0|Vl8mAh=lc$d;kfSA=Mic4wdV;}8Qhk_RoeCeg{$-P#Hj!Dkf--XW~|K5<+x)V z$%Y~0DB9ehoMKf@l8l0mID9Lmy^#}BoQ#JH7iiqYnX;!-`1A#P(JiRE>}O*z7D6yH zgH62mQ(K+}R%+aJKBPO&oqn+lVp(J!h~PK&t>P0 z9fUASbgI1l8H-7CN9+{t}L1Ols<9E z_;Dr0Fj<0KL&ky<{Z8CLo`3V}Eno{Bt`-^}ZV*c+4`yqNb<*gS6kmtG)vdQ?Xb5XU zzd*H~jtjz&Q|@BpJUZkc&F_~L_hUi8C`c-C7Bx8JV5kf%2?l|ODv#PmN9;on294Mo zS9QUW1Kb`Svz|5FN}a<(LSBCqLzeG}pR^YlP#IxoC~Iq;t}ueCE260C+zM@&c{g3xa?Z%_Ff#@Wy>>wUdq+yeD zs=LZRy9%VA0_T+AmEXZLOrlxkzdA`Su&_5>!^CuAmBz$ZYh#d`UAPiH9TKVqs3~eK zBkB7^xiDj)w~(D;En3#vaWRe9gZE?SZ17ym`ON|dN#s5 zm4T6-Aa3h}o;8aNI*?lFRo7l%w%pV_%PaF2lYEO6%TuI9VX1Iqx&-iQ2Um8noZJ-U>_h?3q0e^4co!Wu3AFtk0YW}w4KQwQmXr_)9-_7vQ(1Fpd34V5e#Db$IZpH)9Lzyh3<}~Pxqr!ITB;BzzF7>SIHJ1(?dyYd zUsxT`d2Jy{59SAHg?|vtU>(}*MwtFw*aeDXpY04A_c0Q2AI*4=h;x?h9zL2S^)-aJ?5D49(%gn%^JpgJfP*ophm7E54wz=h{n+{-lG)#t9XxDam)aR zj`ygz(NOUo)hmwo2zDQ=V)}IKS`mh@k$8{qK+qPj^4>tI*^u!bGe2R*^Fb2Lf$_u+ z=dZ?lzzD53^o9^tl-1c?M$SChZewm;Z!jG24T&L}yWD8m0@-iR#bjY!vq-YD`o1^x(o zk$YEAEH$y1_-3l9GMzzfV+%SVq_>RoyplpQbGIR2TKN5nW|IM3T&M4LPKR)7WA+ae zEez44hMlK8V{L&`^^Uz1CIewm2?ti0fIlU|b`LIdJ{#mOmhUh!&#?{5DiJ zI#?d|t@+fo78MP=8ZHTjU*$xyf2Cd$8-qeUS@?6zQ=g0N30 za?fo6Me+gx`axbBbVN5DZ26^@W=rg*oGwOKoi{dMAK7B64OS*~Fn5Pw3UUxJXg5dG z(pBzqX8>K!7|fCg&^*fl>W2F2vA7>{O5TqQSwJHPp;Gyfv~WDeUl5o^Bh-Z&{icsn zF0`4hs&3LxiOf7(R)+Lc@~)Q)Yw9qGd`l*Fb`WSdZ8*8ah6sMyuas;U0^YqOdwB_h zij$Gj3e8@EBPl5!E+ox|b4%7l;{zP>gt>?v&t`cEG$!6JF0V+03Jg-`qw>9wml}Dg zm6tk8M1*B4Owh!}1I;Xtj7rif78fTWcbs2{aBg%rL1Yd3jVzQ}%b{Zw!R*vEFU~^e zzmAIERvd$mC^y&>#!|hC6V(rh(1tt5U}p6Z&pEow zdHAkl9&OYRyvV{~6^P3%j*lcW=Dm-Y=HLU-EYahSqbg>cYXcW(FRBJ!adr}Nk&K^l z5I@jKY}_I;)z{ZU+0V72r^i-9^16ZA2>GzRnB0M}a1@i>DwU9w5=q`8aRqdIO2N`^ zaEwUew|-&YU4=`VIWMFyw`Tr8E*w`%bHxBNkcN(D_O-yWPF;)*5FHbVqqi7`aP|D} zd-WcJ*l7@?%P03C*N8pxTYSi9#5ClO^YQg%xv=8?6B+rM6uk~jBGE86IajQD8x7V+ z;~P*DeHgAdkBU-cFQ#)(85Jcu3r%rmxpRq_hXf=o&ji<1@h)dpD_;AEy(~EWI6Zo; z9=&~>tX8gQWt^eG(Sh*r=$WI~O!MGu0i0Q?2g)aGI#6aVwVYZEk(X>R&Uwb~bhPPF z0b@`8O4T;#fK%1Sj@GJwF->7Sw^Xd32=g$X^Nqb%5Sz;K6dML?!}(UieV~=+m#m>- ziGvHDr*S0S7|apzib)CsB>WqXrWq>MnaMD+l0uQVS1=ZsT#XunQ@oHALm=?9!GqWY z;diE27Ddn+utb!FoM||D4PWcUG=g(6?(g{(^oL1o@z$7?M~Nqxms zuqKQf*!w^tiB{Q4c$QR?G)uM!)1T))WshW0>XzFdtSWGy=X}NfyQ*(I+W-P`rWcWd6gykwlq4@nRo`CiumN4@> zLdEy^850|g!mK3>!#?nR^QR>u5z`j0YsHzh;iu|USj1tfBKRf^cs0?uQoi7uB-iuX zH-CpmSsqp5daA@4nkBkk&!dmJ59`3TVtS-TYH^QbCdpB$%^pF6l|IMPV8O+=R*09k z9#h-(mtP8%8`E)}^Tk3$nJ8+Z<_fn#vq7{r=~A3?wIK#ysDoyS zO4#ryk4E;RD%fSm$^(X_Xcno z&}jq(xAvaB}43 zWwv-Yu}88tl%k>Ie{-P~pku*GfHMUjk^K{pv|Ec4S5NuVgJZm$o3x=gSlt0tGrJ%U zYB>Njkz~lS(z!T!!c881)-8}!O>t9_rPwkd4Lp@;<8p-!j+bRHq9kj|BT=rZsN4zg z=3(dTIx6y!^$?ag>r82J4lUMna*+Vn`SW7ZH$w7XGZiz{U+!-!xu!v^cj_VDUq`cl zC{8M#PC99XxSnGb?|t2mJ*n$x-pzjRPtStFdW$m?PS)f!jo-%q7X|b9xR5L)>xjrZ zZM5wmKkHp^u!fl=Y|L%sJ>P5LS$RvV`ow|n&r|eLJE15h6(T6CH?k!^wR(HEbnt4z}EDkie zj+~&oKt@ zwT;n}uXdvgUt^4Rd_C7_jce*II8z%gzyYWl-LXanxk=-I2nNBS#z23g8bh2z_2jfE| zcey(n@9;Iwc!RHuuYHUOeC=zD;cE+H6kq!pDSYj3B=dEEF@UcF zjh=iRWOU){`9?dwUSPE5YmyPk*9)7j__e4cZCbL>9bgG%uMajhL7DGzCmSF0b%^mE zUoSG=;_Jo6%Y2P8p5^OM<4L{_Gc>*qH(Y$Z#F)p|6k`@&M;LeTHPx8L*GrAbe7($= zfNQ?EYXWI@t=@s0FW!>B@OmffHqz+BX+{~{_?m7c0_TwJ8FqfoG@|&LWkmDuqm5HG zYReT(<6`W+a#*z|?cdZ`Eh|P*hdY2A=3mrs>7_obfzwaJ@pq+Bj1r4W4a5vU!DEcs ze7(xJo3Gi%t$ZD8T+i1WBag4S##p|NGcx%)-WY>=xZD$ri~0F#<9xnOG$S#@e4T83$JgtOulPE}_?DXDzCJvX z0;c1&m?z|)t?m1`wToLx8q|lZtYAy9N*lF^$#z-~t_?!C-a!qi#?>Ex;I?ou!*9VLwT+OsceQ7H& zNQ}<>O`#FZ*ZGFk@7v{bAt9i0Aes!~Y}<2;1~%Mcij{r0?8jKRL1|Ot=#(9+t0cpQ z)6)_H#=rWGJcp>ir`T}*#MA^WD?ar1|GP`(yFTFizFJmd=_n*6CY3O%z}L>t|;7+=VsA{*lxx_g-Ja_DXm-DS|- zV!BJAyAry)knSF#yFPTM(Op-%1M6%th?7b^NOvvij*OcO4_J>>o$mfecVE(7HQhZ* zcSq>%F}gcQccdIJKBK$G>24FW&S$d4Wql2bay`8y+L=0boVCR zb*8(w=q`rtR?%Gx+~tb}b9gcJE}g0WNAG?F)06r(?!u!9b!2YvGF8bITP9MUwq z)t?@;S6`CnP=n^IrebHISZF(qJE-_~=$9M$muAK_e2p~5@zrWvL0`N}UtC6a@6p{w zboV~p4WPRT|&KcvbmpaLnzYW015$XfNxd=Xz5)F&J0{WYl+=(Ku#>Zf!W zlUhobbUrtvIyH48Jzbo-i7pqUZl+7$)Gc)Bp1PGTom02brCsWFx-#z&OA) zfK7mXfUf}G0e%Gh3iut+>?_#E1KI*Q19|}Z0|o=q0eOJy0k;C~2FwP`2ebli+X6ZR zdI0(Z1_Leuj09W>7!SA>a1-DGKoMXG;3>d!fL8#k0Ph3V12zM80rmq91C9bL=sz1E z1`r1r0Z0eD@HJwx0zL+80elJg9`F<36d(e9-Wt#z&<)TJkPH|HxCL+z;68v0@C@KZ zz*~SdfKLH?0fzuT0Db|S21I^~{seRcbO#IoTm-lb@I2skz&ijd#$g*k9H0kaAmCy^ z8sJL6b%0v|p96jXL>)o=SwI&+FTe$WQGls{t$;m%gMe=UwSZHAKLO1lmWT$l19S#- z2lNG80Js>C3P=Zx0n7npV0>p{yiNjKfQ@O%|;>H^+g2UGx3(cUb;WPlEM z673p}GJVn$pS;zS??L!jgK2Jo6wOb}b5`=b$5)t=p8T7M+&Lh83?q+P`;wCM{Dd@( zN_rqKqw_c+ZB-5g^Pol`^RK{zl}Tq{UmF!p#YwNp7znaj@zFG{+<0wX>_5q7mdvKL zH?m%k;8Ypr{+j&s!WT^Zp1P?C{N}x=@T((DQ}`u$pI5#c_xJ1f_H7(3nyQ~^&Dn@nD^FOv_mazvV?s#1SDyGTL4AQZsX@CIlE>$X2>Ai& zHZDFdaPOF0O1~xq{i@`Tz@In1Cd7Z>bd(Hwg%tWd2xkX{RcJ5#dcA4k>7~z06-K$R z-q=K!PothDl>QrO!lP7;N62>}EpG;UsG0CDKG#(hQQ{P7s+N%>qkZCWeZ<33e$E;f z%kaW*;{7L{lalgsG3kaT>iPloI@R@OqzPYFAAWt~)2Dy%$K+YjrxVYbRjRdn@%h zA@q5qX%wM>^hnE%w||fpS29tkuIGM-l%H!S6+7tn@Y4O~|83%Q+VxG~bR(gX>UbJy z!qyS>n_?UsXfYQluJ33ce&gZjF0#@kiYvgK+hZ~l5y%yW7JJ~f3(!iw3qfWe(WPS75?$$0JrjHv2ZT%JYwU@_e_ebv)GzAN7WmQ&$C7BzQ;+_>(a0hl>1#`Pm z^pOO=au6!mbsYAA`Qjd?v-Tq5)*r~!wYMi&7pvFj5(Q6 z%c{p3Qa#p)CztnwJt{QAKxh7S=2*Zd(C^i-zO_~=A8Vj|TuVcMRAoOQRrOopl#d_) zf#X%55$|1}V*M!T+0FlF%(42xWV3!@_>&G)KN_pqRKKvwQCUC9pC~1;HY=X^lhCT* zb3&_vu`1-l0J9!l*j3i-d|1+pvUYLy0WW9$y=qr0qpqY;v`;EPGrPz-xGn+i|nkGir z`xuPefu!d>1`CzlL^sFD#Nm=bd7)+7bn60r z#6lF+lfIrk2_rppA(>pr>^MX=-Yq&%A+;%|9Nn}j^$6FX*+@%24ukxGI~h@JU0Y*Q zPC1WyxoM>uB};!lZ(^ngroKPgU*A83^RX8#AVmBFegCc}WfxY6C-S*w;f+R4P|pz& z>-!XL8rAo64}wT(nF;26bSVkpBUItBScWs>VB!HMTK}o14_S!D@Z>|^le{_nQrs3b zm*xPKc})zyp;U94Z+9b2BZDu1{w5z%H5)$3rsvx7?8`QRZ(xQ&J3)3idi?V?G=^&% zSt-fH(&1CW@ryS-VVdXkZK}SD2*Fg}Pmt!U>g%;%pn<094g9nHfq4G+jqGZx2%A*Rj!jmRSX=(b^g2n=GuKua;djtB?sdcFzk}<$dVM5#iNPXYi3UlU zr?uGYRt@sGpJ0)%SN1L3Au4<;t>ksp9q2F*3L{WQ@9IF`>32a*Mv-&Z!Ki`?qpcR2uNHNq3 z>d!2+z42jZcBfpQ%>K*=>6^EvA6D^lLHZPGjE2TgNGsR??s=;p^JG|3E4ljA5b6xr zR5@$3LOAr))A|~+KYF4aCckxje1nz*_D3dl1NBECQh`*NrvWsSSp@T22@375(!b1a zEqv6(bXLRq1!DR&LNH*k#ZVpnZv+W$t8&&zKX-W0)4MAp6Gf1GxvPPv(u~LgY44{VeKrLhpQ} zX%xLd{I-^hQ-%JI@EFJwow8td(n$gq@S~xKZMuI=Zh}qa4M2# z!F$J2?a*?Dfnh$^yKViEHx5_M%k0B7QDqPVDTs0xNJ)P-z91 zUfUd8x@koL9$mAphS9B-7Oh(!#&Uqe06Ni0HexdjJSgjrkdJGtHN{!)JPz~gOq7t~ zbkAIA9L5JaP=GcNri~JO=$SJR`|~+{MT=zoG6%oFpn+=hJyE0?(QuCBVz_H7@Y}6R zxv*z47*9pnW??qxaUFF--qDozAkHZrqo7}4E~>KmD*ZWr>9w5EaJy-v<&1EZ4HK^} z!)_vH^r=gO0T5zg zd}N`Pg#1)|$H)ghXu4==37$Rlf~NJHOsx)tXhGSF{5WN*1Fw18RyK0` zhZU=5R={4=j4L+QTaTh|uu;tysoo!o$Azreuz-qv0`oAc*!%qJKf>5FRk7QVm8tQ6 z;puOb#=qz?RL}f*F@82S@R&C-bdjpafPY?*ub3IJ7gcf0YH8Wk!B>&B5x$CemZ2i# zvghlnRWJ!5jJ$-@|FEmZsfy(LRYXULQmbDy$gd)^sUmM-Hjv!vcBC^pBN06;X@`e% z)WZde4m776voPLs#V*Wc<0n*_KDHyQAyxhdJgfIK*NxBctmPD7;&jnk2F%!0mNX*J zEq#$Snm10dAQ@YhfS%YWm?Jhe8SZMF)mBH-S8bWd*Ss9wHjq`G86@e$y_7?RIQ;Jc zkQq0#7w_=v@Yf$?BMU4{@KTpO@|5{g__bEG;780jqcw7uN~A;dSPy#_EoUy8(pSGX zM$B1U1@A2)Gm^L;hgAsS;cK!cBjQf)*hCMnsE4)m@QiwRgB~7H4q7PLAoL8z4E3-P+C78paj0%< zK!S}t^{|rOT%jJGr3W$`qtE82;o$=H5OE(KdZ>pw!cKej5CxTxVN(zNzejb>z$At; z*f0cdepU|_!u1jL@Eg6^uO3c*hcw&NgFz1;sfWY#@L%xL^oAuaDa%V5by}#8Ne%mcL1LN$^n&t9{|4sJb>ut zx}_7KHy|012FM0n3%Cv704xMN3V0T<60ioa5l{g*3@`vE0VYe2{Rxh{g`hMqAG3Qb z$OYn=NA|L4NjT~7vPM+cDu}H+!f`I>j{^}I%Eh-Z1q0DJSDS5h9dkPo2MWg^l0cOC zW|oZdeyFbu-*8%M0bMQ}Hd|2C*lIgu*&JkVt2P?$QSp$sR*2|+l5%tcdDF&5;}Z}b z_zEJ9=U7-)RB36k+Sph`_G4XHr9B2mAwcqYZbqfp`%)Oa8e&4YL1ablbF5dZ6H!04 zB1gg`ao&|uuU09Zl8H&LRw)+o1MAf)#r^!ys9vqgkLFj1D_C4;FUrFLG(kJBth()j z?;{*zlS_wZ*zD=GS{rhoY)4w{BN5Q5xyoAT*2`TZ9=6D%k`BJJ+lkYi5W`AP5~S6wqxG~F zls}k7#|33SwuKU<>^p1Z9(`t1%CF(|c<53%hMt6HCwx)G%bBuc7NAJP$zq4K!&JUc zVW(t69F#?{*CWoXgbQE|%jpE^;e=>iXbQ0RrcsXM^@tCkg%hlWt07(!A3_V4^dR=x zBo(?1X~GDwX*|>DqL8Fxt>V9{H+yi^++q~&Sfn4zBxDGJLZh%4Nj_@SNLBJBzg;hn zSL}BsYnyxsf@8Q))@k_(+RnYF5!ng6uD$3nLc&H8out83-0pf1&tQ73II1nSU^9kp zf%`WwzLmcd;|s1=%Sxc7AF7C8u2{b0oT4@Ba%@qO)P8Ej!ytm4wJCL6e+OKDQU54a ze^OJh!4axA%D5gVL-8?Sz!Bpf4!j6`jzI#Z!i|cdhj^gKlaa}XcQ=Oq%UEcT;Rr1! zK`W!mX=M%@*CVDn5?9n@fVOwb+92uT*cEQ;;T{=#lG)`jIhG9@h97(NKPd zo>RW~PGLP{SazQ$26EMue@GX~6|8x%c!`k~FF4)x zFs7Xt`fQk$8Rr$T#mm~Kl*P+kKd6bJPObdp0ki;ngaE zhGG*#*z+ScID|(EpalAo>gzF?0glp$b6VpPz_-4S zeov1}LIic{`^{iz59i|NU830t?%f{X0J2;e^>MCE2rOBbQdny*rkEPuB{on;7DS(N zO>2=;U*&h%r=9M(2ljMrTpMFe)i~?*pmvt(aM;U)4UaH>mPxMSu>HkS7oJ?r!4PFl z$^RiuqvVR{iFZAeqb;=YG)7yO#+J5_<1b*%?)*( z;6aXSub|30VGOR0MyElej;yCB8oqz%58kYSyE^TeogfBY#C<&>PmHYda!7gNBJ&|U zhm|R@4lFKivMQO zTR8rEbYuK?J#&n8kPKnW`}l8n5dRJDQG~a>;%_h`&U)AP?g`+Y7w`(&`s04S5k+ZjOkhtkwxHFML<(xg1qQL#&39n ze2maas_U+IH$jlOeu?DKlDrQ?f&+EI@24A5aBS0M9WW|<=W@vc~spN6UipV&hK6FfmK%m6wPI1=R zi-%(zVL%Zb9+P{j%o1y{IJ;=0Mz9ejV)qn{08RPd;~=%!UmxoF1Ov$$>na-kQ<_}LMFvQ541(5 z)P84VHX zJ7kI4SydLNCkpL6KV~OiJa;Rp0KhuMYyTu?>=dv)jS(Bte2!9Ns~gDdpa+=V{r>^~ zVY&+e>LjPfI}eBu>czir@xy=NL&5mhu&n*R#DD9q0r-zc>HjbAKgA6P5bA*xW@_w3 zv6$$zDLnK59X^P$m3&fs>coMf92N2we=LY+ZpQwLLYv3AMy$3tdIr3_-}@3O(jlwG zwTEB<(-9ixUY-YWVnyw&b{@wE@tBwwUMwg7zcK7HVRYhrR?CUg%Cx#d<&n07=#v(+w zvzqhfoGH)d&Ui#mM*&*;WAUKL%KGRV)^7Nbg}}|5IUc?KdJw|E?n1n-lp=&fn7PAF zC&PwJd&3@9%Ykq?F>*J3Ib<d z2wD#LO%JZ0G>}a`Ieb=(<37SaVvFeKX7A0 zII!hlQN=5L7(3@?rp$_QJ`%d^w4em@mp*@4a6!r%{w(7m-Z;(VFZ;;C{kta6{`6t$ z5#ld5AWfqie$T^H%@$ZkB4~_BfZyxpI-^;}zD6BCIZKf)dcFcaeRA2qIym+-iYmQw64xB%L zX*FJ)k+|vup9!f~aW*HbuM>EwmFJ1W^0ms|W|7(ZmL=}LSS7->e=s^WA91&{Ym0Z- zi-_r_k-S~xZ-K#CEh3pl);`kaf8#UiYoV;FA`XDCV(?Q?-Ez^B^+oog`NSe4hH7ba z7FH{i$`YyDh*{b$?%s-ujSgZhwF_ZQ1{NG%c+m5gIB~ki+G|)qLSnr=+IFZUk$JQQ zT29c;Xp3_Q4vrvXd4@>}-ipd}Lgic`9zfGc-2#Cz+69YMWfy6)oZJ}UxC*>C)|J~J zF;OzU1R|M*?tm3!*!8@^(((}{x_luA;cNIX)3pu8EVa(P#xdZUj&3Nb!c9QpGgH*^ zTnF~(8(6Y1dsJt#M>Th&W!Yee7e;QCd@r#{*bvl)6a+!z(gagSLPkW_6VuxF_X&l7 zA2AaZ(Q=4WlIL`w2-j&lsfXHxQV-$n=IC6C(^oEDX91qQ=v_1paw-Z&o6bwIP0Njg z{`gn+xw9`kMl0CD)A)+k$gNl-H+t8|t*{|b%cN^7mdSUpOyc+*xlGndi$rLGc&&V0 za@U!>R@P#z#QHxj4n3-E^sSh74(l$LWi9=2teQBY1`0w1doCBR_TcU=J`Ec#KOvTv z-bsJ)nQ>5ijEsSQIGjk-evb{;;UsRZM<^BJHoRNl9oL&aau;%$0Si(f)mwUlqI%nq zrctU#lv)1c`7QM)(13zLf)Yh^w8?RPKE@!lC$ZpO5 zGIyTRo?NgCJ56$M&BRJg{=$dFdYM>iPu}JSr9F9xAI@5PQZDXgj>lfK7}d}-6P4P6 zd~@gbW#xs`Y7nAHg(3L|^2ZIW$7nXiMD+FqYCa*_tH%JM{oHZ;OjU@!9%&j!w2waL ziKHqywHKnojm1FD6SsbAt{Rs&*v`n{3+d(;kRf`IpWi-8elYEufMw*V!x*TItRn&A zfzFR&69&(0_8*Uebr&s+4>6`q5&qwB`25dg6UR4qGjSZorFavemX`3}ktRHjdHkkv zee+2!lxLHRpz~rlkBi;5G7men9Y)P9_@xAPIUnLjMEs^90$ZJ?*9D z>bH`KmFj#-e2k-9$c*7Ar8^1JB-5uJRiBKi2nP~1;ipcq4W<9K#SZDgs9A(Wke7lnp|9LQX8L znLgwPWzDpT9~zzY{?<&`Pq1v!Uep^+cw}tCf+JQ(f3M+|p4->HHZ6gp1L)SYvZ`jT z5iu4=OD#PHRMu7<1!XFY1jq)*dxHzu*N#iTpb>1Fl%}V(a*bFB+oXkLo7Bu}n{S-%Sq&l1Fe?p{bzm)6ujRR#*|tXYT4Cx$Dzg>Qek{xc@s62WBYLecxkqVz#8wPUT<6t?PTYRxv@WU>4fhaxgKitN}AO8MiL|BMJ7P0Q|#wD?XJR z(;GyWIsu*uyUcu?m55q9+R}CcGTpCb<%i;}7&lVZJ{h%NE^EIO7aZuo+V~#nAc#s) z^cssNsV3_50PleUi;&_bfLRYUelgFKfB&IMMpv$OeUd&u>C`61WHyO*rA*g(Ik@x| zW43r8porAxCTUTSv%+TUPe*f@yR%FG_N!Vf<8`m1ll}D39@cje3pNAnVq`70MET$kVQkk0>xtx7 z(Rx~c$;^*1AY0fncFuxX6CQ~r?`SwL`;vPeI;4mFK2Sm6OQ@LDw(Q8j#8X0Sy3VM0 zv@)K8J~cjh2OO!lK~1Mmil?yDRuz@Eiz@jkl>xacm?cvqDYEih_3l%=gQudNg}uZ_ zpy#N~Mr|*;N{?TxTQ%8~1eM_^mFN+_49U%LFZ2bv^-6uj=X$&=<&3@PYD_t#p;p*c znmkI=pcVPz1#F*;3-J<;Zt^&BeUe|0?N%};LgbeAa>PZe(#`n15+C`(30BZJ-i%z3 zK3ag=!??w{KvQE0OViP?G95P5S+J0{c@UFfw{WNoKgNeB9VjX;{SZ@)^DOhP=A{PqhxQhVdo zFNr`{8GRCoAN(qn=&RIWP}*C~_AXQDiO+7>-q0D4ubr8GqDueVUr0aMFMWGX@3=vh zEzgTkbJvGazsh$*TL1XDU$kWkn9wkNz9_-00d9(`;j8AiD%`sCwq)J%B*47VJwdA> zx@9@8?QuN>I0oo-k#0!>qyXLotO3w>rMQ}D=$YVq_0D`Yue~nTEw=#7=Ld1WMFIV8 z=4005g!(pisBW1ESO(Y&I2QysV81uS^uGryZ;#1}2g8pebdG{DiRhVO*nT)XuoHuJ zhhqCju2*dTHL&_1w*RQ8xYx_}9~B$~G2b0>)cTm6-SqnCXU{Z5Tqm<0pk-2cGgiw~h%EVI2ZU<^^K!Zi zmmbP}*y3ZVoR~{;%T8;4mD7n!s9GT9REu72WIFNYV6& zgOQAj*Yr=(JD;v5__(U^V@!2GoNQZob-*0z71|s9AJT;18>#&?_Yc|gEMPY;oDi2e zaAl-3UNY%Y(C@^tY;@w|^KBTd5cI$InIAG=Ganj5X4x)IA(2@je%;B8Z0K$d!l$|4 zS29KW+WFB4h=eeA5w6nak=Sth8-ME~K4G4)DM@3*mF8x1+d1ZV_ws{*lE&Vc9E{K@ zNYf}ndB5O2AL(rRf1^~=HQoPLc>BMp>dv8V=l(~UMypHXmHF{F+Tx71kyDz_4#kr| zc(E5fOhhPyVvjUpiYEE*M(oiZA8p#Bf9B9y(C{2*KG@zb4}UxoW)eeiqDcV{!KKif^>hfwAZwV z1OI*upl)ap>%Aa^`@U6!HU;i^M$%XzoZp93VfQ>dzRACVEM*!!+0JKz(wFRI`Zbi5 zkl>a~66Q|Eeso5RJh2e+-PvG53)UTj&GzWyFd(JRT*t@;M!Q&Cg>T8o=|dWlQ#kqU z!*J*)%wZ}+ijL2&8e}Q4@Jv5&hx9*}%zmF3g<45Vn17Npi%O9DdtK#R+JK6qDbSJ~ zf&7K7FYHCn<42|M4S#|^8}?#4@XNc24;Jw7c#!gF ztie1a&Ld$&5=_OU#aVC2o;kdjpKKX|XlI}xx*r75fhU2p+}Rthlo)NA2-%gPMbTm9 z&|OIEBIVFkQRWl~BZs~WdK;eBvyrILX&tmafrP?j6X&we@cAP_0Q=YU{r5upB?I&g z^;R?t{dqb=RrE8YX|$r~A70nCr=S|Ec*-U%iKto&}FH+w^k=zjKQ3b<(va_5YWGzG!n?m8L z`d`bnAr#NwkA`*kf9d-V3V_aJxA z-D2!AviGPEPeW`(jKO;9tli?auX@vZ*%t|VSwMDDEui4+A-Y?f`CKNMrjnG%Btv8p z>;wFgIO0<+sGCFbobNm$Q}*MO4)C0pZSotNgUyG=#%A`$fU!Bhv?-nw_+tAdt&EN& zj!xb|;wqe&dw`*JUI#RFDt6D7*uHyE!rEI2VOL05WrA?_e zw865(hMz5z-NAHcBqHt7DxD3fYpTq;9Z9naZO)D14UH59;`v1W(oP#WODlWvIxSE6 zYn+9@bdbLWuQr)s{58}|(^5RVzjXS0jA@_0M!m8UcPf8rh~Uq{WjebK;&bU-F;np9 zT~;dP9RBT3A{KV8&4RF_w6izqhH}4l!~wOimoe#a$wUftiNKd#5ctv;2{WV4Pcs@i z`enMMk@%OXK3;1M25}Jo7|3fKxD0cac&&3T#m!rd^s=Ov=K7-L#vlO0-={BaP)SJx z_hZ}!RWWeOlT1}4`Z679nx-!x51{6;tkIb(^PYySIB)0+W9 z`7C=q-ZQPPB^=Y1$7QC=yPo%4mXd6e1^)|II|rW1N8>Qk?&9CActXE_I_>R9#zJV3Tkk5X*S2bZV*Nf&>vwa!sUGUu-3$RkOD@!$`v*WhpS>$LzwFOuV*EDl z;dI2c_c-_K*44S<(@#*>?ES9IHe{T#*ZJS~B2ej+J&so6J?)1@J{>{Ii0t}DHcg(I z{Mq&5rkBj7;q$?Vsz1k^3mlL744-}DU-q9_c!@a}vp5bxBbGj|jZlN}YorN37|r@g zew3I|(mA%mY(yxN;bU#i0Wb{<$z`%nijNj#*H+&o>DA2G>Gu?**&G037~+;A@^+W`V{T5!W!R5()< z!d4+s^(xkQ%2Dda$rB0X{){22d75_zR;?SPXIqUwXzv4~MRzl22W+7rt2H z&Tggm6vWQ^-rHa+o#*=G!t|n->Cs+yC2q3(e{}?~e|2jGFFg3=$h>R1_puV}R zn%&Xtyu~QyC}R*I{E!lMvoK zvKgD=?A?lhMf^5OFixlAJ#ZR39yo1Ryw5?wPAJsL0}wbGBk1L<8u2ZdV&eil5SlOm zTY$6%p=qBg0h6vZ8SS#c0hQ6*(S;IpXqcci&Cm&;vNa_WVd(3)7CL@-9g&(pW;_im z_qROTpyaO+clMA<{$Wt^r=hZ_^DtcWjH4jlH6k_9r{phVF`b`g-9}z-++c4fN24*a zlW(Z^@8nq|?hy6?#8aSK#s7e+>Wi?TCX3FH{8tasM%5&r)aGH=Q-`_PAzvh8PJkp_ z2Ko&%+BmpSIe%OoK|ZBUH?iuov5Ut$iJnZ?roQB7b;|zGJkVb66tP(bmsXdb90%PB z`kAgKti?0IfAQNoz`cMh0R9ErOA!AIZ;m{2dH@AJgdjSFm_6IYQYe&A#SSoE<|_W? zH2g~Ts+xSp*m68EaUyigIKLnK>+D6#Xxz*|$g6ssHc0oTK}kE}OA*Ix5zI2E&D{CB z#X2}npzrOAT=*FMws->f+X7sG+AC8qVg9LUNd_oRb!V#N

    %S>;hv8FdJmxa{4gU zCY0F;=#hi!f&qkoj7Q8LX7;{Be6Ug+EF)vPvUvpNOqx_~9Dkh=85B%Oxw!cm%lq&L z^Mo(qqQlWT-{92tB67#na{8VsL-0Khd^|Y{k<(Uox*065ogG0(D=s05Q7%q#Y#juX zr4$tER(TY1@Z8oi;H_1QK;Y4RjRhV>g9i8otEG5`G8|Ax*`Dj!KG_EQWbTf9k+a5R z7YF8xk>*1~3s5rC$`?1j@5d^ZiznV?BsCEb2>2fNBDtyX77D8%S@>U1uH-pnXVfW} zb=$)qqr8y8ZT8@WGB!%a%%(9&Mj)I>E`063=`5_DWy~AU)wU<$# z!K4Bd1fQ=lfvsH-i`vJZ5K~ZcfR<2H5D}#t^@vl9kh1PKRNzg zHN1qJeghu#SUi4(J+7;&Rjb`@y#Kwh7a&`=sJ%3Jn8j6}*%MMI|R)B$Cp;pITw8~rw zS!b@;GJq|6Fzq3Tg^`XFXHRMc7Lrr#7B8Pc(7)QyvH`F2rj;b;%^OP2Rmq4kM-jkN z(Ow*LgMso1Gt$8=FUSmP`A%=km;S$R`p*7MHGSpp|37H@CT59)n|@aYn$FY&YmqkT zZ`ft3>3p-yzNi@EmjOt$$kbkFt@|ka2$@{nr`w-b&A(= zd(k?i(lXf-;}pCm|KrR!*o#(T+y>+iBMFN=6@QxBi$6opm_DBx`umM+r=yE zd-3QP$T2yB2iL8X5%+JbcoRWfXxbD_jF{uk|3EsIhun}koowJcd?Im=W_ z#sx18awo&8$>Hb0Ab3^`aF(jfa{k1;hei&QM{4ABj-xS%IwcYu`Z5bqX1zrTd*Mu7QUdzIEKm#%6(H#g6rHBZl?TfnzK zIC$e*CbtJB=4$hyF(&4oHv^cM6)Sm4HDOW0Y{pst;r;9ku;kciA#g8o<@TbE;J&1I zXl0ahBn94gYdgzMM-tzhd}<>xEe%?Cc%)gD6{+9bH(9M&^L3EXkAD`Edkas(Bc{05YxrU^+OD>>cAQTTwItpj-# z65JyUg~d1pTPyQhyG?x?7$Ndt027ClagYFwh;Up`5ab?l5Wgc|ylUVFLFExoQZD*q zLQgF!9-c+s9p&D;shGvo&->wl#0MA(3a%kZ%4B36p>ta`3C5h8*kR*O16i z)&c$v=^M5of1cAsL(t)DhF~Q#gyx|Nk|V-;7OlMyl?FSGZbRouA6nOG;&_p9xbY+o ze;L&D>h3BRuN!V1G7}wQ?RVjz()0P1yyjyaqJoHY+|D zhKZUFWQc#Q-|Wd1$^E_oXT<+$7DkJkP;|alEAGc@VvYy<>ITXexs`kzF6HW_X|?%c z0zM;kLwO#3yo~vRfB<<&!~uO~*hC)$DhOTm>{k9Y^L$J-8y;Mc$TYk`s zHE+#c!8fkWT(b}HnXhJNrd6yM8N{3QX! zKcI^LnZ&+XTH||0of3k z#o~Jci~I zAa9#KZ#b+g_}h5(E#h8Wk8dS4ObpAFd=*304OzuJ@zcdWQY*dOy04Y*ok6^N8^qG% z5H6$y%*9Q29ivY{g`pzL71LhBU``V8zG@<@jTmIsu$Eeb8jiqcvW5@+FI-Pf@^Ddf zc#WIA60ktki|=|@H8R>_L!(yeE!<+ut6aPJ`@Bemv;vLLI}^73F!&rkl=b_ru3`No zU0B`*7^JBHR1jehw_SIJQ2`PVKbSVu*l>e0%td^F&|~!ga=_7r*!W)8>l=@j37xCe zv`;J-1tCh7E7>Q10yE+IZsA5I6=8aIntW?a1)Vqf;~cwLjb0(Dapbp#)t3l(hE^p> z3y5nc6r?xWJDrRhpxQE7|G5zjk~eQOd1s?LCznY0(1PS@qIboXsKIg`2a0xf6EZ&Z zsPUVSF=BdL(1h&w3Xi41d%R=GyUJe5-}()wKVCM6(~}TfgdPk#n0|!mwk19Iz^M=u z@(Jn$8VhH$xj8TV=H|T6IDpa{Lpa+ASL-KR{)OVZg)hEa=;HN^b)-7}@0%p{DHj)o zm`Zz?m2J&vz+}uTp;a2jDTl=~KW+BpiO2DmOhI^IdrB>}^FS9dWMQ5>9<&mx80~la zfI9<8lm4UJ`5diK+(YaSY^yfM*<-8-V^ax7s#0-!5PscLGOn~6|@kX%@D`h+SB+0LIyMIWj+#sK>^RV z(A*o+C5A^#5|kWT_EFEhmh9>`LNgsRB^*Cdz!6qN0Fo1l>yngeeqEQtgs=Uv)3Y$ah z?f%f0iZ>Q<)kEajjq>zw<=Ewi{9E~{Un^ZWvMrb%%9`CCjH|u{iqnv|I!)tM;VLz3 zE>HfZW{9~+xBY?{I4nYp@$YFCt6Wai1lMKhj;Xrke*nh~kR9HrTUy+tTiQ(1E%kt| zH|v%U02ki^zfZuBTXoB~fXi=#91##%pj#3FlL4)6$M1kufUBnCEG@uRK>Isz))rt1 zpd3&Gc=k@+vJWusF5U7apyF=b^3**j1Mmyr`Wd?ALBJNkx%cXp!GK!;ZvjpK9!Gsy zo+s^7pc030cuKt%RVF&ih>nHQJVKvpJ9Vhbp`PE~x>U1MT*}VysE99!fY`4frUh)l z))w@13x`abY{t zpY7BEDkC7^4(w0sAnpKduf@qudF^2pM)s#V(uDQ(QSw`|N8s~JVz8Ko4ie}K;MiCw zMG7f*9ak;rJQJ^f6dh0om8PR3BrB$4!2Lf;ggpUlfS%B*m!I9gNv9~&pDx__=#g!G z_PX0-s0x3F%0PSF-mwZ_Q;@1De7R~8l*n6!lUnz&Y(X(}E6M_HO|v>O`LY+$fSI5y z-&Wwqj}dauf;Y~VDs)fvWeeu_r87`=R9~>*(mV2;?ZisKjI66P2>}P~>E+cO#1DQy z#jHz19*F#)T^@~L4FhVz*(g~epP+Jw)kwxV`AheuMp=-4H~=%y9C*D1RMk&}-fxE99CYB`MNg zjm}#^HOnC0s#kqx{YduN8DF18M5sRN&cD?WR)4bix=f#E^Yz*#-d^jkdhOR^LA`da zxZt?&Cq#v)FgvW4vVHbD?57aq92L2?NT0IWRYK4-3ivodgd^g((0K*=rx#=UG!>~vXw2> zoSU`6QV_)KqcGURc`1cQ$)86}%g`YT?);H=B`sGiweg-Nmsx573V<{ac{J~jzL2yN^ToSX+;5*#1EN+SROMK%+n z--RfZBInZ*1iQHTLt)BmFD}LtCZ>vR_DX*h({S>s#G&H{fo_fz=ma=*ggV4fVo_6Y z^(phAu~Oe&5>RT@Bb?P)jDNN-W|PKfeGaU%>P==LTSgClP|q@>Ho^kdbo>FQ#DM`o z<-@xPR=1R1>gD2{&$v4NTtT3VObiZ7WwMdgswuMJ)i-1Oc`LtYB^DAGMfM9aij;>u zH=8f}U=7Vu^N{C7tB}NZ&hw-D~9@8ydVkNEXox#&^CSv75M>8kPC(`Tlk`JJ>F7<{+W zrNOtRw))Rg6UM5uF>$meVmL>D1%_=lx-a->P2zFLP6h(jG4FCUZp8Xi^{?KbZ_S+W zYHe;dh$xC%Rvdftu-s~%Xy@O$3X#5;vu)+0CO$go?OfcTe;3xQfYG|o1xfPH(g>}1 zHB3+7Zw(X5n3Cen{197GydF29;}b`zML*wZ)xL!n)FF*OCNHq!Qc86Qrx1^ctL~r| zucO>xV{pznn-Bf{d^K=;HSW4vp6 z0UosCJMk9>Mi$Y@EI1d?UbG)K^aDkm(mItqFA)N_R6Gx$V8||ag#F=;c$#j>*Y)j4 zFIqo)$fK>{40X=%1P+zD)Z%Q0_!ni#`vz=HKIAHeFK4rq6ZWi)CERWdQpB2HK#0>W z4I58hO}NrMFxi|l6r)_0sBM-Q8mH-mS$JjP-?lV3w;;D|9%sC3d!)x1mzytc$ceR# zqN)Bo^^5ZYg?R6Y@d* z^8GG%huO_tr#m^X($>(>R(*)c_cCH5>iSdoP4xZoYme+hz1V>tQnou^1JA7F&ybgRQ)Q#}udW*SH}RR< z`Pl7?`-k+m=pWl)Jqcwt8B|{L>2?J2wrZ6rcI>9JqG3~=Ws~?pR8&OUON5YeIGJO- ziY_at8h{b)Y)moA zIU3tuY#(Unt7o~Tr8J2p&P9w??SXA^h;DybX!;WMZ6;#w`Ix3f8UsPej4WH~*uKZF9o? zwsu0U{%9^+t$`v)Zs8P`%qM)1uC`JY%!Bv4(R~+#|$$+Sl;AAvIJ1i>R=ei!a z>dLNy@jw$m5)QdU1VsU5wIbOy0zyD!{@+*KGd-D3kp1m`{^(2BR998k`RdiXYC!HD zSATEWUnGoW3RnM3&%_8tUkGaXzv#l;jf~AQuJp)FL;TQw3OX_kn`S*2>3uuv>H5$U zxh`BREvO8sF5ECSWq?5`*5yg37Wb9;eXcQ_Qy!(puU*1uL3hIxW`5cf*1$2c2726n ze5m1^smEAuo-%O;a@{FrcV3>;d_}A^p_hM7p<48`$VHe|ETxx+X`>J?^{G;==eoJ! znKkpAto6O#ut%s=(-moEBjYo3KVklsmSoeVFo%py!R~UEz(GF)<5#OVa^udpC4F=x z+swEtP3$6P+bjrz5~OTKt3>MO&D1yq^@eYea7(yByd7x_&tvnHaaA9j16#001v9q_ zt4Q7;DUu>0LFSN|=5aI4NYWU+IUQP#Tbk97G**SS)f=r<)~X-HjA1EMzsI;O+gM7O zeX6}>yFt*V{{8XIDOt*8XZ40hjosKyTUESC7DS&adMsSZ8a2d<)-DCb=B!>#Hs9p^ zEE$TuGz2b7kzc(QJjq3q3Nj5hac1A__N(n1PjbN`)Ak0wAh#qO;39(JQ>EjBtbgu~ zFtNDdns^+Uip>5Wmjx!JC|ATS)A%%MHKwRg4dqrXxF4c8A-)zkQmO4CDydNgTXg-y za{iV2e_}@WvZ967lhg~$=v#H=gVQDDU(Beh%&40r)oe5BhOebe9DtLm#EdF3qfUwi zv&R(0f>|6F@h||5enEjqVmlcc=jvJFNOJr}cGp8EnY!sWlay^pO~U*HIVVq0iHY<8 z`Rj_9RFpoSc?!o&bW`Cd{l3qy8d_pU>dWN*_V#o=Bo6U@^^exXqR{UyZvQ@=>?-@R z_y}EM2TM!Fx?bkngGC0nhROue3J96O&Vj!OtEy)3b6mYK^f`BIEu{;mR^L~{rs{A( zB)8C*C7}B6!nc%P70&-cmN%q9f3Zq&xelbGh`!YoJj)oGyQhCAHw$%W9+#j8J?6}r z*floqrk-&7iq!AgF>RKP8*f!KRKlGb&95Fdx7KROw|e4~%@))-g1MYo=vQZMU@rSI z_1Y=!ZhhuBKm0_(zP#6!1)wjGRkOrDp_lhLAjS)AysJ{+J;@xhJWBf1UX^i%S?#yr%cQVrE zrWa{_bFXjdxIP1NgRLW@J!5NoZ+ByNXxgor<3AC*^oFIr11>+47dH-XPiB<3G%3ja zXVL+f5i@55S(1K6T`uF_nBIn61iFMq&IPv`zN|5kaJGc@MZ-BfBhO^<7r|*{es=<@ zS1(9rhRs##ExUliW{MVjxkk*$d72ZbvL6_S8J~opzn`HM-nSr-c?u54ehZ>6g*)W*P$3t-k2j!(~L} zonL)89ZAx{?Y!wfrCn^kBvF5v&`SFSSSVc?(YFeg{ZVKI8OcCk;buPGiMKrvdn)p@M{tQ!8-s!WRIV59Z?c-ey zcA@d&?g_^XFJ2w*Zu%k`zMD)Fs>3~aK>39y@nrbJ#XOnik?@tb6KN0iwN~sMdnNGBD%h%3#BR?m}+T9X-Nk{Tcn?KH$x)yh=x0m zfbqv2NfRAh#IeF|H)c8K7#pqg5Y}#>npm%B_<$aw&F(KD`z5Rf;MzU3Gz;s7FATlj z5FE_P)2V9BvUHyGh`|PZ8*pjX{hqSP$x|PgHmEMct z(eo=BmAS|u^=WjTG5f?-+}4^Ni$yRC zj;|JC%oYEVcR~8F3#z1E_b()#Hsn68+weBEiwV%`O?7#_q;*{8=JJ{oOCR|I34?%C)EUK8g+;xgL`RZ{M){Z05#OniDx3Ur4 z!5=m4C%3y$iyhUa9ig|(;2=AA$1#c6o9*B=c5sXxyu=O;u!Ftq;AwU+#||E22iw@e zSa#yWyX|1D9sJr3ergA6?BGH>_zydH{qc!%ud;(9?cfkQ*vAg`u!Ey>5+z)02m9H< zo_6pQJJ`hz9&HCbcJNnLfi(a-?cn!zaI+m;YX_Iw!T0UpJUjT39emOb{>cuO*}-Xc z@IqX5Th+<8gWc_5XFGV59c*O>58%V!D&Z$P_?;d6(hjb%gCE<$_w3-CcJM_z_=Fvt zWd}oc5Dofx9d5RRFW}PMs@Y?9@BuqG!wycdgE!j2KiI+1cJN|5*v}63w1cPEK{0i= z>hP%@^wUF;*aG|j z{0z9}L|tux_P_~19&j!&5GVjH2d)Kf0j2?Ez@LC8ftP@J!27^bU@fp2_#W5^{0ev; ziMoykx&WsDJ%N6}#lUFb55SGU6krDM0Pq;_0`LY<0W1bq0h@sBz>mOwpamOU7SItm z88{2*3k(HD0b_vx;Bu#>XS8V9%G0_{+sq@{>3?4H(bV58`DeX2(tIA(M7pDs;Ydb?(wN=Y$ha%I$XY@4BCI>S=kWpK)f7v(C=%c}}l$d!KiHpS~Ad z*suS9frAG7h728c(Z$0rDY$fmf8?mb%SIQCx%~H6TxpX`|24hyg-I(6dtTEDgL!Cr zXED)9^v>I6s$w%$fCsF<{{>;wH$m8h+rz{#cWJ|`S#z1jMR|U8@mOJSSzC5~@|NAB zw(*wT$-2Y6(Uu+GuZ{G`Dr(|N}6i3V8(g{5xjmme|4w2E)WQlO^tjM$Um?en9 zY32|j))v#;GKR1zqOgu#IEng8BJ;kfPkECd^J*Hu`5$%Ji5N-!7xdiG=prR|;eSHU z<)=r|^=yEkTb!6GO%QbJ4u_z7A(fz;`+b6-i?V-M8_d0SQ2e!9v9H^~Kik1a?Vw=? zOYLCL4oe}b}-8hwy=ZyZF=}e zJGk8rZnA@`?BHTMSYZcC@U&+&^L9IUy&b&D4vw^gL+oH5JJ`bxcC&-W+d;1#%&>#| zkoH@3__rPW)(&p8gP+*JMRxEVJNUXC+~!G?yTJ~wu!EI$aK0V+rfYx>}*%(C_6aRPSBU&gHQi9Jtt{ycmjItNhduwmv?Ug9|FsO^}rV32jFMG z^$au?&>lDe$OFy=q|CghqOK9Z4L}GONPGcsIdCm-3os2R1O5a&3A_Z%1KtOg0&9WI z!1usT;8(!&EOZyp1vmxh3G@Rl21Wya0B!`P05gCGfX9FrfH!~&U@@=?*aU0`egyUd zEuMq!0y+XG17`t!fuX=CU@Q;-CIj~X5nvAR9Pn3QK2Qm)05$;IfI46=kj6fB1keFE z2{;2d5BLvhxW+`7{uL+bl3!WmU2>F!Q^>uevyb^7kZ~prr|CC~S;Ym;couA0E^g}0 zSp2Hvht*3&z<2Z4$qkAM%sqG`pt-@re~TgwI=IF$tEMqd!JBrsWvIX%&I*} zNWBpr_3G*9VKmfc%g@#7mn-B#d2d-qAz@alytTVxyxc4F(rR_ar}|f|{2GxR+K2D7 zT^yQFYB26D&-ksH{6lu<80nKPSJpLoLdqMSF-EPrT^iPOmnSvphUN_~sFLs2&wzD>^(w&AaheJP@o< z4Qw`c+M(jSww)dvxqe;EB$dS_9Dh-sj2gKwLZZenwwrvS2$!011_u*T+?|+0m_fIE zDOYU%2`Sp#ySt%Fa-b=uCAM*yTyPoMIz6PAVQEeCEvbVsHA_UE2h?dnx65BtnEgqQc=v)|Ry9q5iEAZnhO;)B~GEmq9agGqg(Lj#f$EEWOL)D(=h5(dITz z9GYwb#F)0ThcFIT4P2nn%$L$l~4kcloA$sc&fPxRlhE{J5N!ION9>-#qTbii};tu|9sWLhu7r zJ$x08m5y(x3Re0d#1oor-O?zi;A(Q?A}se;_9=h9C%0r=kkG_BTQsrqIYM2N;E7kn zdE&8PMO17hYNXHos;JAU=xBI$++b9RT7$2qDR)x^D+O6?ySxL@^C1=a%r5R|uMSXMq>T3f}lW|_i zX~`Ue+>P4w2I*}x2i=u$3Q#BB{LQXd)mHFQhEsNNcVe89j=Ggi8mh-V1-0{rFO`jZ zNQdY>owQfQ=;+PSu?Hff*BHwqW4YXDNi-u2U&V!M|I@0|mm2l>@)v83&{`Rfv6Z;& zBT<#=EV8YI5;q71_a!*dp3-?@1~FcYPyK7piLMR8T$l#1hYx;ww>aa z%d|d~Z+#!%#>N*JTrCygB7+`7<<0@~8iSH0!5LHsUEBSq?WAQ!L1k2n-u>z*?^--V z_)**VAnIEJWw+93$1T6Y(t2f$Y|Bfc1)C$S4Br~$roC)E&>g3egVZ?M>lOnI8to=T ze2b#KMSh)IDyxbVfrHY!n_7c} zeN`;j|6qdu{$6x-3YIVhXKvK3X*d;)(q2YM%@`<`OM6CrPy5y2Gb-W!JRL14kNC=G z`d%#e&7SFdsoeLV;d?&fdthRkcfn$RBseEh^0?}7jHF#j+KDZh;;s2fSUp(t1<~`6 zIg7;ERHe95jqM+AMqJ)(;p?-JCnw|Y#Bc7yjti4ZpSQGLN~d>nal86-(Hx$h zb!aNP8PZ9t=S~oRB5~3w&au|={XCZ30l9)6wYOio%issjpc>ZbE590&CnL%w>7au3 z-UYt;a^GeiKb8Bw!l+ox>Cg&@1m%V`$*4AT!uVCpC8ECdepQoEi8=yz>8)4Mr7{OR z<19rQl&l(gW7p#ys!OiVjb?rF8r5gPX@^}O$*6`js!wmbKEHl^IQ20vUqg4nNH=Og zR*)%&2J?J;ymwQgj_SMjcydK43$b(cKl8+TOmI!8&I|G++Jh<`XbrCVu; z+O@{*W)YkG3Z^EvHK0IQ6&;x!UKbgCz&m&;mjxOFvP{pgC!v%lo|G?mOfBW_<<;t0Gs{s{mV~pf z3@CA~L>8sYM&9C+_lHGzvTO2ps4kNmBRu)*cS&3);=Z-wzR^2(7Izq6 z8{2b+*@Y)sg??xy61vK4qwfCxIyv1kFud%;9Nu{cucC(0o@=9>W*E!qpm+f#RsnZ6 zE`V#hmV*eQ85c!+-WSannZAf2mGP(|Z+!d)=)A>)lg5K_XGp5>4VF<}^<4%z(sw2e zhu6&U9}I`gM=X=1zm3Jx-}%do!mQ}zobaBJ-oaJeSW%fLN@N+c6aUA0&Q>qaF*|g; zV1eOTh?%fT$|z6#A1f|L4Ny(DlJzE8cu#a(W(CS!bk;_hi@TV@+JAThCN=R$O@wb~N{f}_(jtk>UDjKs)59&g2cN}N$79ZP+CQr|~qg47qsm(tFM%{sqk4TVe) zsfUaOLtw0>GSQwZ%uHRa39wLSD!$XIORZ#(MUk{3BzMTnb;5+%R=%*AZ(wphJ?Ko_ z2N}8aU5yvgXfyq9kDMN_4l-UcTCvI9W0P~$_0#mq9qG*)l!tw{Saq}e!&6ZOyH0|q ziEZ~BX*IUpy|r!kebQG6+wPjWlU#U7YEaWJXk*%TKl-E;7`!HF6^lK0Y^N^GG)~^B ze^|!J|I|PJ1LNekU)EKAmerlVF1*ZGte1CRy}Ti9^z!y3E$^NWnWHz6ZBuuu$6nqY ztaq0R56oKL8CKl+#K{arrJq^B44p-{Fe`p%>8o1f_1S}F@okfe*V$MKINs<>e=&iF zbn*@s&(EG{&oy8}5IFVZoaPhP^xd?6Xng#w^4^CiV%D%}_E&g$vJ@N| zQ3xYy4u?XBovT_3pIq*C=D_Sp9PF7gbdyJ2zMwvqw6h;}o97kFL5=F_gBr$EBRWH? z7aR!4u@7SXEb;KjflWP@Bjj-%ewHB3XZm)R`?k*X{ao(brmwNx96zkdWpR>KUEiuQ z#!>BDGN>yF%k$g!G-aGZxS04Ie>!8tRn8`6tY4j?y8ouPob%#taxU8A<5FCl3hfp* z8oSlz<=r_3!!w25zCxj?9@7c%qOm(;$FjY?h6Ai165>U}{YiJ%js|Wg&*CrWrvy)~!5EjZcX4y{^*Bvm ze_L;K#Q4*34%O_gLGepv(lEszgl*6Dzqja9Z<*flR;ZsJ!Ox!RSD@o%{a_dCEgLA? zA$MIht@C10>joaPp@o^R%+=66a0tX7e!_aWv;;{=+ljr4)W6RV z`x=kMnkIehww~yo$8PHpyDcwvTld&)xv|@F{CL?D(c(%vIJ6`;L1*jowKEvA=DN-q za)eB+`9EGt)O@KiA~$krE|-5rF71x(SLD(>V?>Y0r9F%hJ;z5b?U}?Tuc)ZKH*K-q zVS4>>e>ayS=Ng+J5@Nv|Y}heCz>pBT1B*FyUCu8YwT!!A7^-(y)y9nXO9={3|1F7& z8h_xgU!5@*i_ndy9jtimuYWyt?~miF_NQ@?LT%Ud<>Ml4^>HG{HdWA-(BJRGIhe~B zB4c-3oTg@Y#g^582<*(=>|mC5-wUa8F_c~Nx#D6zGgnO_S9aiIWQ(Td;G`?#$JN6r z$)g5t+#<$8`P9An56fO>$`{{yRo@>L{!tdx;bqzSdHf59(KL@5X?;P2OYoPfF}LF% z2W0l01|5_Mr^#orWi1YHbmnax<|Ua*)0aA0Y=oH&2h@XJF%sNuY{YQT*e_hw>BL|# z9t+lu!d^4K6#`CW)MN7(3vM4%sGcWge4nL3Z=cbgV4L`LV;)!hC@HKb77y%`@UmdX zz;o2e^sU!HeCz2mKktOK&~h9{kx=D<#j@Vm91!??ZS4=CZ|j?4yU6B`d$M}?w!gn% zt4MOMmdo4G1{|AJ^}{idBdZ6P9vX&aN7`E48wauUxn@$D#?9Amkj@WY8JL%tA^l~B z2(p{!W-}bSnBB)=S*kancIxAIyNRf(g-*wC8wFV=KO*iZ0y30B@N+sgX)&@Q%=I8m zhJS}!k(Mxc#MQQNS`PTt>H8PQI6DY_ZRZ_RInf2jy4qLAzQyK}H^F-}cLXf;?RKf+ zU1x%~4=|QuFI?{Ps@pfhIWbK)db2+cyvIb>!(O`Tdp~7CE2`BFAkN|^`FvKKJonN+5~d^IBrIU$B{e&y8kb0w*TK~ zu=;;Va{r6Jl6e0wq5s#r)b5|?|GV;p_amyrQsLFg`*((*UU`bs+#ERC7DWqQS1WEz zbK~%D_hgClhK~S`>iCBPX*61{hwd!b8EUa$gLA&=o8!cY5HA&wx>4vFqvZ8+{D;3F zB{mcvJrQptSdlH^g!sCOKE&5fAcYF)*WPeBwQH2*;s?{*p^}CsWQqD)AcWTHWcf@1 zjwgz|a~2C`_<7xl9DU?JKC@Z%x~2-93~%|^I&lc&+q~50l^3t8PhL!O&-AS~IgjW2 z>L4Z_7c}61=NWgPLt)%cg>Pja-*yfUMXcGtyx-%XBkOFz&X!=Zq5srDM#1Lu3YG*f zMFiBxw>3B?9azYWNQ%3WID7jR zd@-Z$MY=Fm-klo>Uqz9IuM@bWgBBv?l>17JmXYAwk+E~CePv|A5cO^niED|>NXfj& z!awlK+|8PH-2gsHK25IbXPqXC3&gX6x2%ZSWDG}y^+8|>$3v#QUrjq&PDdX^3!aYn zo}TGjQto?krtjl&-%EzCGJ-T~?A&VK>ylb+dE<*%Z8g<0F5FwK4*<>7;zFs#_w_hj zp3c?oFo4a=nz;0|x~d@^#{zMVau=pf4lXPchN$F%`s-FnJ++9`8(zTo%*sC@Up6a0 z3BjYT{0B!hRr!f&X7wi`MYkFtIn=CuAA#wfR_$pBf<&`0V`_F_4k{Xu!qA&dm)FWH zuP9NRWKjLA;;LW&B6fDA9Kf_C^pm+-gtypeXX5kbx3hK$1ib`DHX<+HCId7nI})ro z)D{r;@bTeLGnY6vixyO<3;$Rf6LwViF(N=yPpJc4e-Q?E_&y?f`?9@dCGvridC_n{ zCiIoezD9&YtJM=zYjssyOGzG_Gemr| zqfC{82ciWJ_|+9@C@_>%GT9X4h2L~&mGu;C~Hv3Ln9re{jF6JCS4GWL_6bf7S8vYqPpK|2EuYQgCP@6;4A90Q;#6slj6)kKBP>|QuV!rDPNOp*6WFBZh}Ph(lfGd@_^$<@O+(Lbq6aEx zVh6QU`{EI8x>NXUbadq?CK>dQ(R!jgw9GAZQ02&2u+*p-qpmmxDcl-dt*sNa$#zoS z$Vl`iK548RRUQ5#fwoMfYTfk&2u&hRLZ&-`rCOoErQBOKK>cP#br$h&=9}kN2ktqN zc`*-^b2gNkUu|x!eRtzR#OUv@Qf+yGd zZ8Vp^P%TB<44Q&Ti{lmaD#T$)Exu+nuq~79{q(j8xEfeP*WY^>7GUn}O`=Sve zCC`wYh%a0H{z}-@B+g$J-UAoSmj%(_=Nrzis^KcO zLrpfDwd1dw8myA}vU}nn_2ZzevB)?Yk_CGJmRV#-7UI^(kZi-3gJ&D)IIo%Ov~RhV|bPewGiB_(~ME$@n7ZZ0GWh3t2K~0kYW>YKXo6Q zTb#F>OnqAPfA`XoJopQSFPEXge_Ps)HuPwy;&S>jty3(fO4IdY?F1YFO%*^^6YQ1>rL^9-R?F;okfMS~gm&%ot^-j*%7yi)uvC*||)bJaG8g zR6<0!ERMBz3KHo=eciQ_h?crHdsN$ybX2>15C>IpjCPqN4BmV9S0ETX`%AMz^1Y(AcQncu^Q) znUr9X7?U#D-1Wsn=}nghp&{i#XjsK*LSsX{S==~^i_44_o7H`givLCjl=LtbX`T#N zuS((dF375ewa>xy@s7{Bt9|wN$*MpTLflz!W65r*p`dKF@Zxk?%_kE<>XjRxb^Arr znJi(lNQ$Ta{*4eAW#^&no2Z&KW1hQ%Au5p>gC>}#w88_nas|(anW~A$CI(FG9CcOo zp#S)$waW$5Ltb>-Jkn&@%c(<6EZAKmU)F4%ER#&Nrp~!)!MC(ERM(#)qn`I;%x^n1 zBrV>RQKJvc#zkCP-bR#|jtwk@Cu*{wW{)-xIa)$eBAQ3X2C5TpYm(j`&PR?zFf-#D z*~misxn6w;OUk=o=GF~jED?R0M}B4P8AKMU`_sOQ)pjNr+TX;zQl_#8M+n?U3B!n8 zuBf7$tlFi%7zdkEe%dem+1f2k>_WBUoG)XwYjvP!8L9DH~YF2aaY2dBf}ZJx2Zd zv(zO6wCOQQ1;On&c8sdnZAE&^{zfXJRQ4pABgH%;5e0R^c~+Cs5%1tSA5VNB^=tZo z$~aV)G{iRxSYM&)96^d>iqx*v-Jt%ua|iUQ8JA|cC~;z%x^U|DSRr}uyX$0E5tX~; zblC$a16$!5mK|JgAswTC5~gXjuab}RSR&K5+P6}EO{j)@;8LUCg_PCv$rzMfTh5C@ z_24C@1H%4UJMM&&$4HLn89Ooy)yI?cWg>bFo9xcw_Ni0Z z8=j!osAj1I#9q#n`zYqEdixExyPP>UeSOq56LXCYQ2<6yo=w_b z%EjZ5O-JdzCu-{Te)Z^p0~|u?#W`QAd2ae}$0WR+9V&CAQ^k&pX8MFf?&ILI)OXN@ zKjDId)viD6yV?~QmT{=e&`e-l`8G3rf8Y8T1r6;}Qs)hiL^f^;A{PfHV=!ROu*)uI zhK+j7?Vd0@x)Fa7!2jx>n}4n(hKr`J`$Au5#qqsySBAx`aBx%gUA#Zekp%nKrzJl{jHJEIsOQ7}$Ar~@@J2EJkb_l~$O~B)I&dYH-(Puhnpl?=qOgNU)^E9xtTY_3D@xK zr;=zT+D`SPt;NHw;q918b?Ore0u{j+(2H(Of^5F#3v0tVI_`FIsqa@e)?2e(#Tf+Y zz=N*hVTZwbgf}OSEN41P)TITv<#I>b*_EXwzk-eOz;@DwX*_%TV#V+p>Xmm9TZELc zpipl$QWK`1T@6wxRa<4Hnr)_H3MLgD43J}>6e;X@hNMsli`g&UyBUSfh^@~rs%2s&RW?wa+{T}wTvG$*c9_mkZoIBzdnAg zC7ug^d1ceZi#-Sj^IkF4! zfAodvD8;5oi>&i{Uo9^hW3)pWr`l}5blB`#r?Yk4r5*YBjBhnz{!0Ol{bELI$+-5j zQ=m#AZd0fTbV>vd8J_r^>IIR4&15?m`lTSq!H3z5KXEN6oWz~Hb=>U8o8s1?eFfg| z=@6P)=^A>s=}w`~BSF+P5*qQ%CNp|9X$!?weCgh@C9;m26dUO_^M!V5`iHwTvsm0Z zA0n-Z$Ic#+&^QZ_zPGP~H!K|bP|4t93yeQ!I`FH3Z+?M{Cc~(Yom-@WpUTS3 z(n={s>Uw_ZJByd7yhmgg(D;b$`h4F(Z`pfNEL&F#K}FWE1iv|g~Kjh~ZfOe20Gw@5(m z#1Y11OPl`?^W?voOQ*7^l{dbqdly-Yn!YeD$~6YujTWr;{*UM|DA}5CH6>fgWAA`G zmn(;R))GttyhI;L#$n=`58eX#5T^}~Ko_S^HonI+Na+ns#p!DaU+v>fRl-+hCUouv(A2H_e z1kn9pISyW7Y++j?3R?$NFsY4*onc8dgj3?`6N0_TBLLVyHi?sPe>Kjnn1E zv$n&br;jw_@?u`IA`4;63nQBoU*XP~VS(I!4n?o%^;zn1$jVQ7#WeuFSf z>m`eNbygBqNnk%~2I}_rEHq~wcqAK&Bl@(i$Fx28tt4zg7I29 zf+CxF<%225lKslut_~suLCbFn1Zbe*J9fEY-^cYZ*vpAi18%aVX~hK-vQA(n=yk%9HkDBvM;4i4BI?o{A!r>xq4$twz>3!pp@NCdQKN>u6~4Rnlq3$%G#5;rAwBFeO1P6mpA=yn zObBce)aBYp#R`*{hNV2zYTnOt^!(RP0;j- zC{P?o%*>}m1!9$+nq#x=xt&M?Wq*ex5vzD>0$-_b(pY?`ZcnybJ!NE~3!Zj%L4+u| z&bgW16se@{$ijhE^MhAtu?p;$*)P!a5^1_@e7lRF-%mB0Zb@|ewU(x15!po3Y1i|w z(yrBJ)3a(_T4Nvub%J~vp-z)Nx!lqhFgFLT2uj``ir65=L`t?sf}7Q1|!|JQZM_>8DA4~YoAzrnY!Sa;J0Jg?V>L?-^HY2Il>SUzq-4EGtu}+m^vRsI zV+}kE*BhF`f?oPb%9%np)rYpVYWq`YYpb^P77}T;l|rxyUvOjwD)al&O~OmdRr_bQ z-H%4r_pPdGTeoeBj&*8*#kIIZUrr^R&R4klwX?( z&y{f6#597>5JZVd&YGh(C(fEfmsn@bHA3HL@VHcC~FK`=IDY(`2^WQNP=cNPWF@0Kb-)FY(BsnZxJslCFW*4y@aIU%;=|x_{KXt8!Zg(<08*`zba`#7P-btN;0^KOC-y??Tz=V zmy$N#6$l(fvYlO|DGf?xYkr>;GH&9=QYa(2C?W!X-~;G6hVP=DP<4LQ;s>Ed(7Bu& z@y*pbm-DpF<=@e{)PoxFy^h>E;(NQ=S0P2IPuExjOdhqAA2O_1=iT*1g6x>%~# z(#q<42&}77elTA^^jLjgLf=ag`W^(^PqZyeWrO%dS8+Nbe&EyecAmvADakfE%AjaU zJHd@;76S;3Do5wC0=qR(mJTq`m@+uj11;zGTUPC0G zdVXVKXz9;~DlLj~y&7{b?TkBZXdb8A^=;o=eQ%Wd3cqP(Q}rD$;uq?R(e`h6Innj4 z|2(4L|v|&@4c0rN5)Z-^61fx78(c-6;vy@WJ9jsk8E zqrY_NUS#~#ysScSE5~Kg&0~ln1r0_AR+hTp!vwQEeyvHat+#d=X#BldX3%124 zS7=d2=-(NWf1K$)KP`B|%mME62cm#Fb3oep1Ji;>h7QJxJu?TSpFc1?n2}$(qeaI` z6n4Xv?{1@B-ocwVX0zMj`#4*hsaAd~%X2#wZ^l})-Vae28M{>#txv4XHJmR#u!eVy zI^v$j!>jq3oO?6X;%czDttt3kg4b342T_93(<4hgLn_S+dq45MA^x8E&bl+#s{xTlT4*by>}SMIU21(RkEl=2ybcA9j{n5eP7y52y4!x0`La z|M0Us95CD9)fGCdo|!|few1`-YlqNkPyu;#F`IY*uG_mtv zbQ2#nv%;s%Qfhq+y4}{79KgaqDHzhGIl+ZH_55~v{bf)F=Dn*Mi9iI z`MbT>B(Ot`U!7VZZ?Z&oC)+~DMlX-xrC$0qYTY#U8j*o%{X3&2q*-?CENah2q$%OQ zvl(fQ&OEodfu!<2Wkb>9mBUcW{ybtaILGF{w@KiXM*R0vNTqR3+r;~1{<|eE^sBRK z_KUaRMM}6ncYB|;#iw$fEbb=9$Q-0XP>+XKeFQL^t_^mR_`=&ac|)LW+B`Woy34YyFxbjk|FURL@+e=@!_8+xcSt z-WlIjvTXK#-Eq&}uR}{)ijsc3plcEZjcr6@i%H>b{i%69;vA|n?ZecHej*VaE|t+8 zkeDW&WNVTkt`LpRIDf>-w)4Vx#ed)Udzh}9P3xa1xNNM5?XBoj;?Ynx7bm{uZ~9vh zCUtYYm`*+~RqK5*eAnK?;k&|p7bSwZt(tum+Dcx|UAzC!CBT@a5cFd?x5C1r9QEtN zf^xm#YXy11-Rq3f7$~@{T%}uj88r2d&Jw-h3LOoHUovWb`nQ8PH*>tJmtp3rw;>Vrpx_jtqEd^kEp?68G!7fzdcb+cYavcdmAC&6j+ zt4Hj(4a9MpR42AJnX;3zo5Sof(sFv2V;lQ`s`ngD4xJpo8=^3}CwOF|YZ0YH)G5+} zCmO-#-+Ifgg15)?=mXRC)CvgX#9Wg*Z~F&N1nr8eWjGP^sA|}gEuEgJH#4gz;{H04 z&oT*oDgLQM-oFphw&Q$ATTQ2-PT>&hKxqjLBpwVaS7^z+sA!OF{iCvXg8=X8%RJQj zISmPafQU{wCG}@B!cHN9<}k>#mHNPBlkre1KVWaC%j*$fiBh_H?L<*xA@I!!I>2rXr=^#A_>lw9 zb#PDMipy?r+ZnfDs+pj)*UpKqz z->r-WN)CO;1=n@31mD;yxP>ph7%%tBoTP3zS3NMt?1t>eztVSkYmcn>d{YlUZfR9s zoVHw(6{}f3S5cXG=ikjbPigQ7vle#epArA+b;)1trP^CxefF`WuNqx7I&4EBP-+3W zJI3O64xRZ$3`c_XrN4~Cch#J#k#J7l`oQE5itF`PB#gg?Ou|nQ7H;ZElfJMUG-38j z8M9n|U|gVIl5cQN-}i%pT-}EV2HWiEpOND& zJ1E_SPKH)V6yGHc&75)3_`#Ae2}_=_Oxvyq#qfdd^K65S9=(%;fju0-4BFR0Slk=} z?viq~qPN2SSgYsJ&I-Kw&y;3X&J=ISRfex_B75@(%p}e#>>@Q%j{5Fh>!4Dhz9a~H zS-4xX7bngs7-Zl3+DDvIK)#!)BK{m2y}XW>M2k)QsW)>@Nfl%Svr0=kxwwj^rLn?f zAHx@^zX$w{1R4XmRiamb8{5RY_41BQksXoOZ^k9hk%ZHUCdE~8JN*fJwm^7efC6jl zj%>6+4~kTvWNZAe7zxIO%FQyL<3)AUMTx>ry7m*W=C|cm=BnFynI^r9V6Thz;qab; zWqM=lpxNKt`;eh-MHNo#KbymZ{xie0O%9U`)Mf_g1FmOaj3lEP$Wc%RW_9iKgRz*k z@PD)VH<`5Cx(SNAQ8vQY~o%ta2CEU{R zi%i4w3L0R7pLS9ljWqlbGGA-+GX-RvAwR(m1@+^{MLe3$>~paAq=c9UK~JlR$1&1H zP^e6UeFonbDFTDkAOa(?nmopjhd-uS-|HcJ#bJUaiD)?yM_jBBkwB1lq2w*_=wmN) zdYlj@`im4L{75mLqrCh97IK>+{eZlQuK1ZwMX=G8vNTyyFOrEnFqEj!y;6wCM*0LH zsi5^G3-k&h^d2E=f!tbYby1P}<6MTafL-5Q9itO(YPTMs^Ab40bl0u%g1-3?eI_;c zL2Ikqa+W5Fz&32x55;4b5i1tP8GZJ8%YG3wFq|X7dUn^YCxA)uPK6Xl(8?MunrlO3 zpB};}Skq@%hPO=b;fYqi2$_)F>NSm9JvP*+)vM;mTfKyk#q^%`QKHqiydtgUyKs^C2-l13c7R#u?x5WWDS<8E0@n)8qVEM9&c}7=f@$E=TB3 zb^wo2Q-l-I+SXP7Zr$gn;x?g!8NtDFGVg~ua?PHq9>uNqEb395F}FwXbcxwpCFkJa z3C8laHTlc;RJ97WuTnTlDfU$TkiKV;HtW(};?Rys_@Wbpukk&CY+S@qUA=+fmFfa< zNz^=2w|DJ@7n{nVPx1BU_HHeyAKMA4lA}?fm==BBy_;(S?fwu#)K#`!Oz&AK8@#@? zkpC0Y2e$Y17Nu&8&zZsZ}z5q5NEKke%-?p(Ux zUEBe_PmA)=4Lgp;Old)-vC2ERrkpfbz%<~EDf3WGpz<_9*Z)}S%lf+&(g@@$=lk%D z^{`CmX8G2Z_ef3+@iu(&JB+OQyTuL&aA*NLvgAyA{Q%mn%hOoHhWXm}Fe z3OO%5<5qhoCwva+`2ar2iqmgnjPuyHM3wL?amE90GOjQ*CBrF-vG`v`E7S0+nX!b3 z(pFNUE2Ouz6pIM!J*tFh-m-_JWujL^%BDXUw|`(x9C7k?;q6^5F2R~f>{T11n(y5A z5NbTgpIWPVX1eUas>Ifib)Cfl;&jQ{MNiGt5rpnzZwK{KNf|()y!BYt`&Df}oPrc& zF^01Db7bB`ivod-Popxohbt+h&xAC9Gt>NgU%l>2(+>KOt!snaoG$2g$V8t#ppWmD z7+Q{Kbik%CnVC4Ru$4To zW#Xdbsa@>}>n2&Q>-KArE>1ddt0;awU?ti5ieb{2`d+46`vlvA z`5d3g)Bu)8lROzqE@xgp=)J#4xN}2bcJ&K2boJhU4ctDC%g^V|(nsOdMXJ}Q2l*U# zS$X0yxsI5l95F6O%)hx{w{ba}9Wl!tF%^!OmmM*495MGgVkS9a#yMgxam1YOi0ST# zY43>1aK!9fo7(oRj+j-Bm=7E=e|5w>?ufb15mW4lxyBLWcf?%ih{k4%kmuTGs%)89>v>AXHQ zrtQYmn8;VDF?+Y9#=P`RYRu6o--=D~sIK`jP_g$BaqX5gm~+2P%{*aeYRqNtrN-Rr zXkMkG60<5&bKUKTX_HdXBBdI|M2BeiIFlU}I1*?1jT`cuBc{Yr$s3bmrr>l+eL=08 z=#+2mMZ(5ufMl!QN&TMJfk1EmA~lWS$TiIoGu82}>l`H)ewJGDS&nkXZ%9qk*-`Q@ z3sTdx{ya5iuVW6r)M!YgH{NoTbC#p+)4xnD`R2{3F;_a$yqh#aX3xLkhm4zp9WjF(F;_dL{;l&<>r>)b>utYIO>$^? zrKY+2^3<5)>r?CFam3u`_}2CxQ*)i&J+4gI?eD3%?sm+vnT|B&D^hb!aHN@2 znEI`Ojx;WO_%_}EyEs~rX%jToHg^8L)UT^~sWDU1Q%hdIJT=WCN6c2oYMSLJx$jY_ zC7EMWI>4+)rkXp_+4gzeABj!U#%fq;J4eg`2d4eO z5wp<|v(ypuwj<^RN6c(T%sq~nn;bD$IAVr5VtP4Zavd>8IbvLnn0Ai!b>Pj^b^7Gr zQe!qc(rj?7rnenw)*YWZ>na_4!5NNk-Q+0e&ev1x)8N<#H+-6!X7CTGG5`2oYJK{z zPo&X;L^B~_U^TD}*afucFw1o;a0<`|C;-L-#lU^Q78b|jsboL zoCgdC#saqjGk}MImwRScmwzdSPOg${0y{$iFq7w8gKzH0=OEO41@vrr3iu$0hM_A>@B`Hv=k;V zilFBjMH%RXp44ag?Omhy_CFm%#G0wc826SEiaekrV*1C9RukRoTr6m-MN8Wi`geA8 zNLHWf;Jf3;X}cONU&s+*6P)7R#-=e?A|UJMLK=i-XTF8_E$$NmJqB@#z{B>6!2Rfm z`*DF(Qjf0)*OMe4hs(`q(1e=a5OvQe&&X9E_7Jn+gI-Ur*P|iTMb-#?KTEvpvr~lOth@TYhOv7`sWd+ zh>svKHpHa4I`b41t_Y)W-8Npw&1N0@=sIpzi!W)ij)&~8*xwJMztR%@wdV1Z{+d3s zaeuu@0_m@Fo32YjUf3N0DJmlRic1s$5dFhdzd0~XE2uDz*Xw$r-@B3f^5`(zwGN|_ zxHc~`R@@y+Ce=%7Hi8*}`sNRRw#2b$8Q^a{VpVaY`t$Il9zszkFg5L{V{ z_Y$9yg3ZrK9(8}CPfSaEVq&Wz_1a?zU73yQS$>Ec=9Bp}nslP{@EoGEnC*u7Zu8U5 zrY1XL)(w@6s=zAnGYslDN{AX?;~8m=w=6-HN8qQ{d`!Hb^yGdK{Uys`2%Q>V95Rh? zJlV)^h~!h-9;H{fS&3;{Ku>R#^~f!0MnPSqCHYn4Qp8U6??>%Mu-rMyznFFW@tw-ZYs|amIMM!+_$(8DIk;g`DPqX^x$VC5CT!X05v~tfjZaWNDS7*h`I4V(wE78Zu=6s$Q-e891 z#n6$NpNE#_l#KjkaAN0FMGCThL-LKD(_}O<;y2_tM1f{K^*{~CH7+y<>Y~O2WjRT_ z_zfATR40j+i^MdnP^hT5N?ap;5XA)z$#IMT3k^#fT?OMxYTBDaY@=_~$EWtmNbAa{y?~d+tiO2K= z$-FctWWpI_ojD<|d0pDs1QLw9d}m6Ek9INr=%t&GW#Yf56Ll5*S7zhCAyOTYl_ssn zz6_ zXb+x3odH}Y66}Z%)hf2uIif8WcYh<;1OGRIH%#|8qJy^vC6Xe1;Ls{H;UTSOqy66y z)Sb=fcS#kT{2viajQ^9#L+qvn$>aY-^2_Zr?C~Ge?D+3W9)HnTJIwKy ze5&eCWca`CkJ(hJnfV( zjs411Dw^qhOnO1wHO%&_l~2ew9>`xeN^UXcW+?CAVNB_?&|&-Qp>1s zj?VDQE9=15*%%?{WYw-Uvy;+r%L5<(oHTq$e2O(#O*<%L+~iEZ>T@L;f@$UjJmTzM z{Wbbg4FCV1J}c#-ezM#QSk3B0v&8;!a8MT99MzYnF<%BV>MKRJO@`uegLdH&u}rt} z_~}+FC6TnU%&)!^=e-4`iB^``tt?GxB`qMsF^6m=JyGgcKfN4pr9Tien`br_e_vO8 z!T7o2P1^g6ZkyGli~38G=BV3>rAg?s^JHC`_YbwJXsP`Q$G03CpMk!{7}Gp*a?|wb z?Jw!|cQ`nVg)c2+IWgTNgmK4adC-$G z)aRVJs23O%yvqJxlK6B%(x>hHGAB-d?@q!m551_{=lo_9^ta?wSM$~XGk$sdLS{(Q z^!JRqjm&@hK0tPMyqJgwQ7jOi(WYZE4I}gOm~iUKl2fpf!F=mwluf2`RY2+BzOZF- z!+m*h*%Nmk7+)K0aksGTAiA?^#oecH(*@4gz#g%6r?3dU;b%~Q0;go@qCBCh@5J@+ z{f`stT@blR7Z<%uio;ML+?THg{w(hZ^7qs( zq>nxnL{a+|e*)L##?KuY6L6}4y^|}U;$17Q16V)Vrf1X|b?jP=JYDzTuvypE$nq}O z8NGCSXkY)S*U;t~v&|py&^oL;MuiTZb9;->!M;;+Qm-{J-NHX2jTS|}ql`t}T&{b# zozT_ORa`aW8~HI~zsq&D3sYGzGuoUV(z9k~_8?c_t9WO6Uy#m}xTtP$yhD2v6YtRT z2y^NQn_b$IUqxo0CU>TksH)0Y@4C~4M4tRmO4nXl$eSDf|_u)L%TlNP@(k`m|Q6t1@_sLeE=c&g;P&#_&wC8= z(JwYPo%PY%+>tgDyj=&oT=A>_R#{j7&6jbNd%g#oyCqf|{>; z+}drfiU$hKfH~0WCCm#2H-B=A;OIH(V|hlUZR$OO33NUFA11mETrcxo9}D_ZRdviT zw|n-by=S>b0WPk*0L*``3A4{V51u#hd*F278PfcYsqJd<-~Ds9Xpxp4FCt^Y><20P zap0eTEA7z#+>H}hzwF33nXUH=jLrTd|JChOi%!;g`{xtlcp*!yKJ+=3v-08iU#RM6 zm9ZyL#vc-8aF&`ZUKavCL0M}vjP0^fa;Q=lJ!*q*c zy`cDfXsQX4{x?%{QHe2MR)sh@dLA5zfp?kgGUCNnYk+I4;Z#JHFA9&SojUz^853`r zsO*Lo3XW+)4O~|cjC47#xqrrmsy%rR=a$tAyNaEC9Yo`~K)4gF1{G#5jAvmjI9zDv_yS#>>R4~kwwP0*+pR4XVG|6TvWTt$b?azYLL zCl4MLYUnqmL*RO_Mc@uD*$tFl$P$SgM!nmgs)TA{r)hdWv^=Kffqe3p^;tf3!0n#% zbOooLYeZ!dMK#I|OvPA7Qw2*$d=V=$HjXJ&2PQLhbu*|Ktju}RmK|p&XJaARIUgWr zO!uVDzL4xXqnJF@b7qW2WqVY?bJ(t)k-0>?^8E~5A-x|T^C?dzTm&3V>!N0FvJ2ik zS;kGO%*I3Sm{a83sBA>m`J##4#Y}bEQyRycyGpf7_6qB)!r6}-Fnw$!3!jEY*Yl#$ znPsb;)~pNn1#)ZrM>nE|Uq{@Byp zKpqItM{FQv@-#P)X#|BAt?wT0^18W!Bo9FRi`ZB5EvvwzDKN3^sMq4B1dUG`m>G@m zi6&9anI(o3f=6VHz2U@{mTzy2I$ss?ohyILmn&ds4 zT*fozx6QoXvW^+Dq*#f4Da>3zj%%quH)&YGGumwZpQo6JV2dDv^eWYEuG<@4r?G-8 zc6|q_v7$Ph#SbQ!iyKJ89>UzP8P$QM;ST(Q>U?eTnHr_+B9)=jN28Jw_oBo6LsZ>O z;`GS8U1H`lk|!F?r}eh949TgdRL2+MRdisll)QeXA@# z86GS>tQ9N65Jn+%__S;A$0I6v9TJuOnYU5W2?@S<-#gCE+ zXXg;5^%i=z5Q|^Eg7{;mCV~x(P7mF0@xC&NgovJ0X1_^+YG%~JOf%wvJIsL9cgxQ- zG1Ja#=}s`y5ArlI(-wj_4$__1xQ?2Ta*32i54Bm;;SaT=l0GUCS}3bY&sSN1>I#q= z^EH9w(qD-qxi~X~r^&C-^rtb|V=P^ZOWOm?{xmM!8I)z1o8{K&eftJ;!BfXJ@&>cc zdX16sg~PmM)0sBdIT-`AkC*PofWd}KQ&Cgea7FNxV?zzc6dx68=;6J0G$}(3=XmeG zM6wLR;xWW0^2Q*_`3M}u{R~+SGpBVdW}}^VK~+edja#Ovy^B;% ztas~?>Xj{v*;O-){+DAWe#D;sp0wgtAL*lMM=4@ibO2W=w3sR^!!{ZN^r`UL2(U+p4l9 z*ao*#TUBd<@_g`g7M)fjFom*{O+M5Q4>kSGi5~N-e9htwX^HIn)6CKaQJN`{O%|`1 zOI%aiynLPlJ79E#!QtNrZ2?_iGvDzC&qvEt=ttV7Z8%xEF= zBzilyfw){9(0i!BSCy-HKzN<^9UKXH2iGHP^M{sZs5>Y)Ho3zLyrgqU=a?d4I76xzTG9#SiXF#>*L}pue^7ok4T{{n_^I}JzGmPwhXFj&F+ja7cT8CjgY^p?Q3K(86okic9i*6Xlfrq{M{ zT70w-=(!7Pz8ai31>!aNlRB>W&MfE)`)D(3GX4Sze_Klyd?jw)A-}?L-x=v)*d2C_ zY-~we?^MCzJ+=r%iIrI_p#8D<2xv~jTPe((Whnn^2rAuahWREu>F>iho&Y;t<~A>T z6%49O^jQJiEZj-I5mi-eJX=4{HJdlu&;5btW}ao-wdSu}MxQl{20H+nmU-7-FGcuM z{{uVD3j_euZQhSNg3v-|8eo3{9KtR>h$`&T)2z~+Y{{~%NqN6}?()U%?GA>syZezN zx3vrR?0i6FNn|ZKkZWIx`JaOf9g&+IY*ou#B)PAFc($8gd-BtS0KZ3W!pywU)9`7=pH=`x_R(#y=3Fa;jqv786yl(=AaCMH@MQ@yu#nQ(!Z@HlMbx#qmkIc zmZ4RH3m=!K%;R#3oW7CbHNB>qCci*oFslOK1=?%HH1E8^V({vibNy5HF(;glwLT|c zKKIahy%1V6HL4f*!+sqr{NRUHg^30E0;U15@11u!9d%1bI6~KOfpKAF2zxpdFv_yc zFHIQ=BfR7EV$ww?``AOA>If`0V>*kAst zZb{msN^`lYw$<#Zs%U!#}p7_UcBd(+nW1N2+kBAbU6L?exD1Y9r7 zNL-i?2bo%K-oHjfFrZg#Yg8S-&!TV6mF@ma_pW8!Y;TuffaXFt*O1e(G*!yM=ZQQ=yl-^M{OcQI(mh%1l;Ock{j6 z5FqF-*`D=fk`w;y+C9I`jF_HC{2L3qe{7dIou-iw_XE`f>0PbluCurL z+nhklStyBB_;|IkY627&ytyr|cELx?Hb zz7U_PqvFCMK99!3a}XHK>T%mRzJji!^DDSXQnZ!LHl*AHVp;RVNNdPo?RbqvnwG&A$EfhX)^((OWebrIa@}m3HW1dCG9j zl-s?9Jv9LQ!z5`o;Hrv>PG(WD!hvjPVO~o>^%;kjwcS=`7 zSux&DJJnb~oC-DG8WzUGVuwmV>{irE=`f1P?pfj%$Jj{x&Tz)@lAN^gN2$A2o`(B* zNrgVkea@6-=O7BD;QR+4+iu?S+?9@*@FW@sWJq<>Z19v*`+(iQhU1|Tsg@RpGw6rv zMwNWc;%lYZf05F$vAiUmE0~>H~tOP#An@h6g&08}_xZ<6^w^N-jb*^*aI*W-Z zBJ1!+jo(o*)%uoZ&Cdyb3hrR=2?w0UF}}mPU_8l>Za(}4kd$P3rpT7(88TQNPT7|z zf3e>!M8B|GmS!*L@KzVO*X?$L`$*IMqK#wFSn-f-mohtar%?_()dlP|1B~(U6K@WF zZRl=2Eo%0Q9CYdvHs>_yX&nzlz+y&j0!SzL3bh629b-Ye{`SLmG0T7uI+mxs<;RP1 z(n4ONh>Wf@(^@PpN2UJlEY`<`orJ`sa=HCDl+%?_CX2`^hHbW>W*Erb9V_lI+G>51 zUsIq?zthao*i!O)8XlIh*k$gVf!g~^BCf)`IQk3>_LHN}!KZ)V3@-lB58(V9kVImg zk%K_$Ki=elaX&3RZ%5u0_J6!7v-=xD+V7E?Q6r(D^7e%tA&T!}dwgUs?@mIOa#@M- z$-znWLB@~MXB3ZyHuGgY*<7^^WuMhrY3gigYVkkNRKGM;%jwk6vNl{{%-7qYgu1X# z;h)NRzDmtlb|n6$&M zuYwmd!_`gbEGW={amm&3au4BW zPS_a?2VBIAQH}7fCZouGV*lXAp;5gsM}DVP!;T&BpSq=&IA9xI-wC=EbP%>;H{kviC4Um+2*PBpo*@oKtDOP_$E~fc>QR zECuupc1M;Rff3F^m+PfOdk89*86B@|c3)0YM8sC9RAH(xRZ`LJdC48{N@no>8CM}b zv`8fv=^)+KJv|!e!BSUPouV z6*=vmKiDY7KoBsWYTA%^v5=~fp?yuB()}7~07~4_d0BcC_1rHme@3O(SeeHcZ8ah3 z3C#eHB4KO-J0jt;kL{j%aXQjB$$evu+|f5ksZp4L}D)G|Dcx&A9at-^wckx z7smw!p3~r>jbk5vZ_J4gqo>ksF)k8!&(997gDD3`Ai@P_%tnseBOI)>%~<5p(v3-O zJ+o3Pc9}n04l_`%F-pDo*lo^_H04|G<-G4LPh2=A{V}IiLKcr|nXPV!OEhbl9XWS zeezvZQjPWK78h^iU50C$zSD3$h<}ZrH&&Uyc(k*I`YWkdr)UQHm-CVAfH>Ebx(YI* zah&YIg?6j2kw*HpD7qox^SeFc{ch*Z2 ze!NSu+z!QZIYLv+Y#MYKst97XIQ&0f1AVm`{#*sa{d0b?U^q6jjC<%yv)LPJb6^KO z08EuMR8j@f2NVD2w=QMl2AOk7g}T;SiN7e<>T2@@tIXdP{yJ>KIz=cqU4fhn^{BZb z(2`y=q_UjjwJ0WI*T0E25|4bz1}CGT#DJ!y*K|UVgh(T`t&UJ;%@t(3lnO*c*@{1- zJPz)x$bfQEwueN~fZ~5S_&6m|&_tPJ89BSdCC*{4Eeq$T8}m6i<#FtUNLmt>GQ^`NMckgv-ENui;cXBM*rn7^;l_jUJ z>i6EluAzYUs`GeN1#QHGQW08qC2d?Cw%^GC!g}YYZ(QoAe=D5V`Mq%_g-PJO>GIy> zB*asb!1$L-V1y-Qo@3yVGVOt{(B0;hgKW(^V(BEQj2PXiJ{uQriRr$qrtg>e|6%*H-$ahS8$_4G6@b@EvvfrxtS2%i*uRlJ@nL3yb~S z8CFxKoCnsPJ|JS}^>wxRj!?eLilw1dIdBH2rUf^zUybT8k~u7FYanyaJ&^5hNlSw; zq@RD2Eml!|AlXl00<1}1r8LR||0pbr#xScLN#yF(!lEsg*=>>Omx3LqKfhzalOsDc zTCpQ(wY?)Lek36TpF3X3{0eTf*(p8oG>G3n&S>ZEeETEs540ZH!;Fpb=Z1P%`J&F_ zVL~*_%u{NDCaBHfs_IjcwHIR4J+>ZwFxji{Srx9vh88e0>9Nh^9W{(aj%MeSY-_nm zw7rjyQIg_3Jk8XM{Os%*;SF{TnKcZ%y)wn78Zg(2cL96DNO0t2D9MME8d2n7y<{RH zS6_YdxJY!2S#S;SDw+86HpHD-K+h!y-X4EdzOY02(^pIR!gG~Z^CkL*_Wfh=XXZOR zpM2R@h3tIUPj9nMKRE2k-0m`OJd%&x`WKQj%6Ow|_0&(4JHV$d$|lg7?dTlS4`ysz zYV+Fn?rY*TQ=g@twbdZ&P&}drk!(b|mP2^Dv3vseEq^V|Yx`;`^yUG}uK{9I;`m?( zoZhaxuBYtg4BKrq(*6E{gfY>3;*G)EhBlulBBI!_G&}?mf0?zg$)(Q!SZL(=o#yuw ze@e9Usd1`E3F1qVb%nkiSv-#Pgkumok5Wgl*^d}J;!=b`wKI`WEazNdne70rE$>KI zIhXj`ux{yvBWS1jh3gc-ExT5nheAD5AggC*(BklZ^abfbm0szNyz7jWh%MHkRl39J z$ge8-3`PV}X=YDsh=v9Siy1OYJgzHCimmeKmaI{48B1XbR1!|p@rGiLxS7WcS0gg3 z$myeAo4ZOIq?NlO(R^QX_!xptlX^kRTQ+qn`A?Cky~@v#K%~T8>7CLtlg_FYof1+I zx!tor57r(!<*-?0C1ai~*_bmT@3!jWvm}KTpxdpX!2-IiQdsq~jxlFQW@Y1Nvji=b z99pboXzn?&>%}!ya=Le~>LMSIa~7sHYoY#A>Kop%zN31EwPen6YEzmt{Pr!8&)Ry2 z?@by-F6yxFu5#dHu+v=DGcNRW!+)v9TmPVRm@vMyS;D$HGbH$noWb=6o?tJOqPSv?&rvIuo|k0&{(~0j_@|J5iJ@Z;VfTQ>ZNgftany7jl^add;qB+sJ!2U zVZ7f54strtcU(%5i}~k(gmHmaH1|&#?>_D0t@tI(k_1MX;VF8Pl?SfmL{lqm{)|++ z?}27418$`U%?x4f=?Ttv+#P}fdxd+Dr$hS2pVU%OUo8HdvVEOA2X{omWCv5Cy*1Cz ze9g|p5hgvE``k|@Gxb?I@&UNR?%8UwxD^}3 zO6@j3t`L2c=+sl4;9z>xeEhiVx1NTdGVPGr#=luVACsS-VMi%R4p&;}GNS~!arV#E zz5$8ePBlm0m%YTd#@b8dFjov}#JM=C=oDq4S_zsj-;-Ph9c_c+i6Wh9nw_F!Yrd`V zI|sAk;B1Y&yZZ2}y)JL>y9|Q$ypFc-jJdwFYp7P%Hx+HW_(;+=bbRs~V8`&Ua~y{? zq%hBOavD@WHho=X57?~l+Z%A`CI+nWkPKMO584N87*{X)^Vz!{7Sm=k`l*tVTrw6i zD5?SUr>-_j>D5B`V@)t${EcLYgUbHPD_jAR zr^FeCO8#qK-$%`j-*ZY6a)P2a3$FSzt|9qvcW@1f+?1YLz_efXpUNDpEBesSns2)8NgkeZ*=D}i*gjRs`RXLx)w<8JKr3M+Q~Z8T7UR0h;3{RUr~Uw6 zM>QIY(4gY}7g?5rf+^Qi{|7GX*XcVoR{Y;hQ&x8UuenA$JFD?k#Y*uSF|WqO(euFf zD5i3ied)PRZOO2KNx(?(%u1!b<~(>8q<3BMRgT&9jWP@>J4)o_*Tdz~fY2m;Q65+! z#<&N7FS=>&D*ckkdu`{~dGRU|KP1Z^vOiubZ;uxhZODrgo9{$;OG;YmkS56}g3n~W zn&b}sJ8Y6(XE=Smlkx4yqM@hqr0A@0l`<}OApPGcdrpA;?y zC8143%OAY>p5oP)%hg@xxW5P!pkWWB8s@kw*)US?*=EOi6C{>ri%`ayZeJ-b4vosI zbdoV;Kc^w=n-eTYF??qwnRQRSbaWJh_dzF9bfvlAsmsOW+rtP96OAO;Kb@RdNoRVy z=njEUE*sUCf?^W>wLq(&(qoYZkvhzx~46b9)ghPQCQCAC!OOm+09F$3@M7a2RN< z8+jm7>n?2<2x_x~83U8tt8R$x&2rWpC?}RuT#>^4qb5xl8^CE$zKj@A5`l@ zBtTp{lL^N@KNJg9c2D!@v3ypmr+%eSl`Z2A=ofca?+G@7Q3@ zyPAeak|)=OI13>;$D;JdeROAH!Ekf@U!{5EsV&Cuvd&XKQx?p5G?Qj2Uq?^FmGZ<+ z^Y&rtFgNli%sg(!p89@reY^SXi@9Dr1I0Y&(t*LR(*9s`8lD7m(!Y<>E@B<~(}_Zt z47W!m{pO)@=kpNBTcT!~FbZ)O=BbSHc}iYI8^U28_~~xp5}|AO`bzG3G*bk|&^Ssz zDWzx5z~d$RtRB%Fy_l9|9N!Jg?3*;Wv9@H~v1t_MpD2V7aXTD&e(`)@_6Z3!j1zm% zdCZN{PHL-?LX$KBC88r~*_TXCGiimy+aGjAnwiKnt96!e#$V|DN8)b~Ig+pJc2)Fr zKqnW7-PV2jIuo#vtmu0eM^9fIIi2Qd_&%?SEX!sxMZsQI%eVU8Y$kdbjGorua`Do$ z!NT4rasuaSqwD~1JS!D&-O3KQbzlyW^HLr#C!ImpI(ak|)ZCC*M8y6t&gan^Xn^VE z(bOKPFFL2PVmA|~L~BLby@amTNmowe0`QYmPl{yy)vBJniVi}0GG#RR!#}4vwbB!L zz+C=!dO~uuDWikp0+|G9!$9)KJG&c=8X(#P#}CJ~gPN*F9y5P&i@0|lFh^2dH@*AJ zQ+{9b0QeTAIK&44!(ErU^W z1tZo(V!!1Qm~_;0q1~u8ZS-*w){z5N9~X(MrMW0o?ynQA#)m1_-uPYS-^isdyi$Z? zXerc3Y(<6GJu}Cphwro6)+kLbV*(CHBkE8JF$V$jA}S}H9?jTgK1}rlo19L=1$s4U zLwA|?*)McS!x;RsoKAy}ult)9COZ+Z%kDqjv2oZaN?5nqjyj?VCNenTVkK>0fODJG zLly5k{;oP|TqO-f2j#TJOj?Qu&=OuC6Sll#wH-vZ)Y_9TtUu+iB1n(wXqn8!_<83- zv~fvAPq*l2NhMEbnLuaQT&D5!FaK$@5(@OR2Z(Z?dqQTO)7C2mHy>TO|jD z@rWD&9PEuMt@?=hQH#hoZeMMdr+&VWYAmZ#FFj@~BK2gr=h#v*oJnw-sKa_imc`*e zZN09?~z^nZ;i1BJImA zZM<8*9@{^*`g-AX#*{YS9*bg)DQ;ghG*C;^Gqv$9tk{&*rnoeZHl?j)p1!l7IeIcp zD{Cb-qz5&%%pm#v!t8SW74z>0=@4pBsaPLG;>=e#m5h4rO7=#-J3aahcbac2!iT5y z6VwAaoUK78nu#@gQkzle^6kT#&BKF)le!|bm0B>-Rv#f8ML)Xdqmt#43bl>{;$N6Q ztH*PylRc)8Fur%3hU>cCn8Mu}PtmDP2JwjaCy?(o%hT{ZHlbOw)n3xBAYpzmc|?u? znfkeD`I6=jbjqJgs+V-@Q!2r^=&WbDgKuH$5)LXm1J=#e)xtr~23NB}s)(o>)mV4> zBH+m+HUi)DR(YQIuL%T52tJNMY(zOfMAhd%_z&PwK63(|f%Q%ePX|OwH9okHx+7y8 z_vIZg%1aAf1c@m>#yt_j9kCLI+#|)U2q9s;?U|9Je#H-X7|wbKEy1Ud4}pX1bv z>?&F3#Sy_e13k9MmfAh_56Q#r7U4%7;o8q)-O04KqfMme+BVozsc0!}%XQ5qiS-ju zBoVAt5ikp7r>pjElw68HAzAh~(#%7%yDBQpOSzpQK^(Mj!Ev;_sa1QK6L@cT^HB>b zrMEJ`K6&Uri3YNYKEvJ%AGWg63te_ZfQ6pRF%)@`{4g&PE0V<_-8?=3Hs+W3%)at) z>d~eeC%Xaeq@rD2-ba$&cL@NZzU41{V8Ump za>Zw{aVKG^o(B!tP$usuH*fv@d^LTK;?$@Nfug@)B!4kPlr*0DugcFbNAM>IBnn;) zzhQ^21V4C&u&O7FvS&2^Gb{a1Yt`%Z>c$oRbu0Zps>w`@TH*ht?tfDAuO%i&o-$v! zSw(U2fcY!F>i#XMp5JSuK2*jWb+;*eAnX%R3sHEH+h0rI`SA?-2?G+~oGbBo*Ie;3 zTKv$cW?*96i|55pxSd^pJz9iPgD)Za#UqK~6pw?AZ;u3cMHSZ^?EG#|9rq2A$g!iQ_ zq!i6ov4d6Sh}-3@Ik=_PK1yU3(0G>P9NGoxd{O6iWZUgv2ONbuW7MlNO{aaSoqdWt zCC)|4!@AUMO!2};QPG5Z=shJ^6XPQe=;A!z(pN79-BM*S4#?D1yRqI4j+~CeDo?kD z^Md)pr<5z;#Hp!0R2^bv6VAa6A9IS?ucw)*leNlk)ya)(x-J$#+$7X~wMSXZQ{5Sq(2Y*CUf^$}(3E7{6 zo4jb`e2W4LvV)sxxn<%SQ-?}fsp_Uo^BtW(FxZs3wO-xgJv_$lQP5nDQIq zcScI5sRO6l+LF>fyIhCqk@-PIEb#_NTY9rTpx_nX$@$kW^y!n`eBHI+0u0ke3HwgK zoO6#uWHNn#k#z&|R)5csLQ%1$Z*@2deNmzs2Nm==7&84XrT`EZ}vKGd=Y1 zqn-!9j;Ix>UDspbS+P*cc{HX~KdCmiwdc0B*(q$FVNZHUm-AX^vR;TQCu`+t`e*pp z1nbbFqLI6~w%z=GL}DZVswJQ04Q(gU7|3|NU3VrWfw7XRw-BOhAea z*IyP7a{LhsC9r#=T=n?^k=(}!`I4mJO8V*w|?cSR;r{)n_J4>QdEV_NQ zAG~gwCcLx)ty%E9Ram+<)ZGdH;j2S$b#ct>3?X2LcU$;Hvkf7SRx(t zuc**0Xy6SZZNS^rC`yH zc6XG8d-sWS;SCxfc`E*jatBc=S_g{}i#b>*iv&ttqJv6nsf`m3ir-iZ~#y zE3Qy>yS_T8bAL}H`iRDxMA5*Z4(V1lS5>Q->>_=u@mYSP4I=5ZpDBNIHC&3Kl!jJY z6OtKQlw+YdYih#mqsXAHhpv=Tw|g~_Xh=~L^$icQSt1ph4n>A~Ii?-kzZ->;Wg{4&y*X}BJ+R<;lE>If6(8B)(6QQP&} z264yny+JVJj~RE%i)~^_Qi2mg0u0fRm52m9`U#^!_I>!PgX4<&jxzr;tAKJLR**{p z^Zs=1g90U`Ir#KY(KW>=j~nim9gt&BA;Tl<$sY7`YG#vXz}BBB(`CIl+ZhV-EnpbZ zc=Nd9?F33V6fmBK*X6ESr{>#z)lRw5e(nYJoCMql3=4nOF891uZvA>rM$P8W+bgSo zKs_QDQCs~HCyy1Xr>*MitjCsEkIm;Xt2tziu^0v5oUp@5qL<|lJ618<;gw|N)Q9W7Vr{=Gi`{`nWwxFp#5fV%Uoc?f*K zO^%58_YyTD^h_L&ZCC>5M|LhOome)UHd1%0!+IbBtcOu5W@|(u`9Cqr`V82u z$;5j(vL)Z@xZYfez_d5xFgw}`U)e*+DO|-A)|>0T$rP5Yu%OjTG-srV7#n^{Qx58P=T+qVHd3T8CBb1@{W{(`K_IS+Y1T*9msYoPV(IGCG6B?mc?Qzt}R>|`c z9elkx_1~RNygmgZ#l}?OgzPq3MyH`Qmn=Axxki-^cAKy^TDIiT_~v%r@%QP|iB-*-YW4|P-VcG!l~SGV&)4srAe+k{ zrBzH$T>rr^*}}`rf+zC%5rN*M7y(SKE561UH88y z2ambBf)|^u;Kgp28&A)J?BiFWKo&J!m07o-TUQMHhz6(~xTeO!&j^ZCjT*Y-tG?nLrMgz zOQbV{APl6x1jN!64g~-MeGcuxzM!@&&>hU)@n*4PHe@ln?SwVmShODt&SZMmt4@(u zF+1^h1}eF53|EgWQ&+FHi0%uD=<>Ke{F@zU&cg*AB4ivIa%3E8V{jMUkSN;ZdIFBWW^Wf-JE1#~#ND zzZxa!h39!)Zk3Ax_iAp*==I=w)n4K7)L*5#)S4h`UG2fG{wo}2AqR1N z7aGdz#&Bi_yRTET2ccIr`4U z(UTWPPC7%E6F-mE;AA>h<1Q3t)k)MZPMk@K#0bYIpawdUiYK)uztUWAjdUsRaEt=d zS5Lh-D^{3azgaClV$dQR)p&Xu8o0sX19iIecYClw+4Hlos*~U3_#3uKfBcnVs^4P1 za=s=r5xt<ovy!)hC4q%Xsh|C8|Vo* znL~3P9;<{xru$L+sd;~@g8=j&`CGDocXBk9Hhn0;e6Yb?og4#bbTn1;db{Y$6s<4^ z-K0h|vQhfTI2XX3E6jB3D)d+<*VQoC-9Ow$gB0(Dr#j8Mo`*Iq+dgKBJty}ZwvO}S zU}8ZKJtq)E$__ReduOip`3`5;Fg5SW&{rPMU8G3CV(6nK9rIu+P z`E4SBGgEqaB&#$(b6i@uXWff#Xxl;PXmZ_NP+{)9T%GUcMmDMi97>OPoPuG!j_391 zxIMoTIqKXx!JX|q9BX6d;_2Z_x~0pOYZYC#jI1;dj(b1ht2HZwUM;SWSWW(LOEu~A&lYF3&Bf|+$6cxYIC_7>wyhv;&p~tnCqD%5KCSDHy z){%@~;6R%HB6q?^EM3dFEOeq$5$4#}tpAs{(cX0HBFw?K4;rUm4q^I~-Lds6OrO%m z5Vd8QCp8J9QoLHZ_w~?v`WS?&X z-5Ej|yIbBA`bwlW-i<{yRr;7!y0=w&6icM4lI(ouFV0-b1_UHUty`FBmAUP5nJvks z(eM#;^x`1?9M1im=17+h{@LpCg{thi8zbF(&Mv!}%FWClIGu#W<#4RicOb5Q;_2tg zH~X!2LI8Ws+xbK^MlBmHR6t?D#80X%jJhK||x>YkBTP z=Fef?wui&$ohqFB0#w13Tm2W1pNIHUPBVMW$-j0w>uN7>gm%fVJjy2dRg*B(vR2s< zZ%IH|&E{)6)iD3r8l?O$*n<>)^+mDY(!ivVS9erEnw79JyqWHZ!;R!*p}9HOPzb{a z;<);sjsA!V>-4Il(X~>v40H}*dW7B}i8qPgjlC`D{}i(6*?l%$Dt?7s933lfb(?8_QnTCeF_qx* z+YPCyCorA$G_QMEZPEk8uq^Ng+2({cp)$`3am+v0>a^cTn?-r-Hs`!*(UT}OUQkr{ zJN54FC`&!t*Q`FECaH=p()-Wu6cb@yZI!>CQArL7@wCZCd-hACm-N^DxiQC;IDsYi zx~3O|xLU4(e{}EfQ0A7A?`f{tq1qFBLD5JUXra)JmRD7cLl6pthi!*ah`JpqJFp@Q zRFKdHEIT}ek4HweLMNG^bfn;)H4ODj`dVkpNT zWLrEpo(vtQcjr@U{vGghc7^z7fEcL$DD;TqGv7{#RzzQ>z&5hre@U9-6wf5tCgQ|LAkD+0sym5ap=a({@wzLR0MuQlv?*4dIa@-2W6-B@8=zm{Ly zdTkF~6u>9!E~%^4yzDV`-p^Dt1j^kk6143%%Tuh?Y=rKPLzmvNxyLT8uT z`J2QO_d$NMGj2EEoBLkEPWe)E0nGuL-p|f!rF^Lz^D^7y5puMkRt4}knGm^~1jX{O z`N6QHo?mhx@Atke8vuucnhfxshKNrU;I;eB#3dqP?KdBMO~gLMpcH>n##ixMi8Oi9 z5xCESuhV^crMFa@9{2sx^I!{I&}U`)-uBf0iLagr_Fm-vjmT8X3SKGL?2CHt7bZh! z?>5i!lX7`s<_q%Ca*6)BDz@iCitSHc1#a;o5W&Yc8%0j+3!3yIPtD$RrJIgy_?I;p2tk^c(*)mm5LNQkU&( z>#b{9>RKe~wJ$fy<&Ncc`?fFqxvtvp+rG%HWqqfJEAbblE!rBvb{e}zI_kOq&oT_+ zGXW5{(JFmx5ICsFCh5D=s7Po-^d@c1LAkTKQT;u{U(fwZc~EbVQUEA#kY`?$0nv=O z6jD%1Nqd4Etqhk>YcRP5gKgNtCkVm!`PzIj&-i$$Z+h1Ji@L_k@6%OPvd!Yw*=zuq7eqL0-lq_?S;mFladx7t{}LB`M*w|eCnAJbN=#wn62 z($(0a=#BhRK&YIWDs2s>r{P7Z(*nR!bEK;&)Tie*ycTl#HZSrQi&|J+v?kGK&F%wV zk_Xi!>Ej+`U+h_F&bT#+FD0s8@c>HrEj_PskJAd;7k)#$CxK9~XU~Kvyl{jCrWT1` zB~i=;62M|}5{c|#$)Ike?7TGA7K@Le=L-5fcTuerL-JY zY5sOm($x4;FQrntPFg8Of9BmAen{eh1-9-zJfjzW5_}?)ZFALqghmG+w@;cP$Fj+& z*wu~-Va2b>`QR3zu88dc2dQvB#Lkh8FpK-1ru>y6r_O{%L{7C?zEZ8}+lz-X zIUUM{|3qVcBaY*mbLD2yMuUi2hTt^YSkDW^9^xfd62%Mq+U-zr44 zD50Y-qVJatvsS#nZjL0x`z!G|-e1$(NR<^cCMEFxvU(I_;Kc(hs%PDAWZ&;QDZQzq zX7T?D`8)c4wWT)=^}CBLudkEgw`sdNQ)vC{zTBQoOjW~O>}P7!wLx}olAYYgoN4`% zUHshsiLcu~vwxe7?9J!ZzbHO%|CIj8`R42ytU@Nc7Gh^3zd?0-mUL8W+$Q__8hfaY#IKxp|7hMHpcDNGl{(p z8lGd6 z?C{0Hzm%nJzf!I5EPc8KV{Q3KUSF_JpW-_4VZqMmDVL3g$nsACUAy!*qb)pB>feAj}pO}NtD;rg8bDBxX1BLMpj|; zogN5UH_8JGdqlP+THMP|DhcZfqi85e+Ys(bHV4eZH!DsrtMmgpX3QHJ`QRX!ek~W! zzdq&WHtRl)2&CO&5)f<+SD|o|tpNp1TMuOrm?6_T-OYZtJM7Z;wd7P)0<9dx461O( zy}~s&&!Jq^)Ihlzkn0}w#Jpo_6=?J2X0>cWc31Tw)K;)vpudx&WOc~yL4UoXEfO7C z@TO6$WW*8ro8=Ye6k3YfRZ!zW#L1e;0Hp8Kt|weXFFVG!DM_?Ja48hby!pb2=ILj?06l*Lbv&l&Eg z4QlBlu3a8q5imO1?POkY>7Uju&f>tZM`#Ks%YcjZ8V&pOTita_czBF&o;%!&ZE;tn zS+y2vnKHY!7G^1r%t9C6u!y+HrjE2<_?dzcRij{{6GYckIvp z%j28DBMiv@`|&MnOpfmZRmt%so=cC~u-^j8A6ZOvEZcEw7;HIU4$&2Or-E)}dPVn} z%rQ;e4~(58(mvnF@C4sdujl@?(3s>p`eeOR3v*;`)hD~^mh^#$B{G>i5-)`<>!^=p z6URJ{_**@Zgpha7!>9T1eGK?nqyWj=u#TB?wN;Ko+qGO(!dNnUwFk8|LkX)nf z$Bd+7>|*Z%aB1SeAj=CwmsroEVyzIRp;_6v0>zNB^=1{>Cq28a%l+xCw010giU_sZ zuew%VHNAB#XVN%px7O=hOo6^a&XXCV>89YbFG_UTUT<|-(Gm1c97%eSaT zd+J4qU&*M|9wRUcjqpg{4dJ2E6P(cf*%eha&Vc!l_3Q}FE!qfyb;H)NqP`UKqm@O@RV1P1o>OLc?=zeF)75GfJI zbWD#H#DK_(#D^{YS|MM=cFU=%&B*0wkXyZuA)Xe_*Z+*QkKL zwVtWWp)-dvCk%Nsk%y58jWy*d9A%IjP8(;7*UYvXfQ z`A#huZw=i1s}_CHATzK3nD1>w;@;$bssP1WMv>jW`j`ykbg$+ShmuIl?K?F;hGQhv zQ4d0^FS>A|u{e%n&lHz$vTJ_cq5^5j31rVqW~9=UoDg|P<|JaeBOmj+Z1SOOR~6u{ zAm|g*z2Ql|Q=a;l7(kkm4X~K~JTZ4nXm728%{|iOPF_~?9NCJ%l$~rO4Wwm<2gxus zlK&;!cPd;e?b!-=d2Kcp6y%o-VqvKd9Ov4&)>o@^>BaE~R+Wx#lR9}F9jBwc55Fq% zod?)Gszkd3+;O(JaUwXz)a$90qVB^_OF38>oJ^bHQkqRmLW5o@VX4^3{rBa>9;O2F zjr*EvhqE6U**ELA?aTJvwl8Zi&Wvg4r}V5dTGm$mwlgm6wyiEb<~x1gn^fUD9UcgB z6E5|)?Tf1d``V;{F&-r$W+8^PHh=CaBaqm0iXtu`uc3yleO6JcuFbwT@B6dvkxNrt zv*l?))=!F(>XY_jNMmQs(wk%(5f_K_sz^L<>9_Rh*$PwM^RW2tPpu$h71X?4nDF!? zI?EzW-@ZqvG(BGM3O3rvJMn_8gr@nTj9Q?o76@z;Z;yWy>JA@i=~FS)d|19$n;LJU z@+OLJ@v7yOx9o8NSbAs=8@KOMPyIGNA%0&qf!>?=t{@;ej;%s7{JIe2y)NHUmnTxq zy>fDT(6E=M!9U6ntkJP$G2KgDhrh*L>B=+ucFr;<)Acu4x_eG@o__dcx?~h3_CPxv zNB*n_;?V0P$=Zc0*=cbFd0i%+W$Sk{(%0+z=PG@Kk#(~^VQ02)!cKesPU@~Rnrojv zf%%)T&!zuS%^%NW*y2$PZdmu3#R)s(s@TppDQ1+j;^V$IYlj%OCia{hd*4o(J=adF zh*i@b-y8S6LufZO$z_^$-#!;@|IQQ{#p&6&j(8q=ntllHh{dh;aq+&Z;dFje7B(vV z)FNQ|rUvwwnqVcQlp|hAdR1!r7}qlz|BIjt4h)vRVr5NC8|8MP~T%WM8XgiW>`AVTuLS-w_l41cz^5XaMmg*1@)ymeziOgdnGk1vofhhAw?Y)+(U4kDCM66dYq@55%Rs?6`ST3S|dwYS%WS`XvM=0h8a zYXk=4z^9(2{+zj-&J5yzIE|#(q?MX=9eyaIu>eecC zORk6adg`x$%DcXDdaCT0OYB$bH|hQ{k(Uq2Q0f9_#Ni8ktOtO2g;bw9B9|XL$Y0U% zy%kzGDj~Y69-^xn+`W>-io%GZSWhXwqHKVWf{K1rDy^}|rCdIIncytwA`!iuEjqXeDhDnq zGfED2(zl4PF+Ho&m@kn%X;sD&w?)&jlHpW95~peM!Ol8B&y1m|WnTJf86Bv-l$>Of z-R7?^hJ}@m;QI*kr+iP!GoRVsR8p)9!Wl-1Ny9p3&$9iWKcm04?!57^q{i%lG~T5G zwSL6Dj4Tvxt5QK8LZ6nuQ?*yeqlw6EQ0=lJ@#_{2>^f+FqyS^4wA=5%h!%+^{P{m! z>1fHfv--+~0W&Ulv|L~mS)pH-$P0FwMO>6kMBH;d^_ykfN?iFFCLOSsa<&uT;Q^cJTfG#0*zZc+x8c_WQk63hTT_RSK;Ah)zZkwO=S*JH%o zV;jbs=ApmSOx6sU9$fcxk>vAJMTv6g#H;L-UZmNbiGUXoLSbkvh7nq?jz30x0o+0C z5BIpXb-a7&$<6$vi5H+XFP;+z@KV^pUW_3S9szLS)m2!q~&+o6IOiFRV0Z-s2 zW{16!n9X>k)J2HCJvB#B5=c<@E>YAmIaAR9nztQiUaUz`IhAvQUFIaY>X{UT7yqX+ zDZlP^Qj+_jicjybUIup@|MM8?B#{dTS46&IKxz&tk^*>orY8{#KBSc>*mPk0)BFLPAw z75?$8eC?h-|8qLS8*fR{XWh*12Ul^BrNTkL%X9gPlk_Pu%HZAl7+g+9V<5{&v5Tzd z!(j*d#yi*$^%VjBvX^7maE;v7GH=vdku$PspJ^q$J6{-87r+A8g}&98B0Ki)Xt-n4 zR#an_sfttWxF|Z|qhd9Qhsv!D`z_A|Y*KCMo7u3(+XcdJ{~Csd%a~VRKT(>oN}8e9 zNt2=n)9bf!@)?KrZ34Ja*r~&wQ3(Jt7c*M^)3kC6&yKYoR9;BPHeKWuWtX19q04n5 zDpN?}Evex;;VDGpT`F6M02TGCskAfQO-9O*r&JVPOCOTOBc$qM<@BB=!PMIWRfz>I z)A$71v-cugpUta(i$jrOobQRUQRWz<@Ox)Mz4TGCa$n_Y%7rS$PLsj|pPlJ#SX|ND zI0oL92eIB5ONU`fsy(Kf?j}w_4g~EqCob@c=JxbY(VRVF(Gga#%bfgNlH3jnxm~Ysl^KTOK4^pDz~J{ZZ2xSE z>r8L?-SD@3qa^=x`PLs0DLJ$<)ggz-Gm#0}!*`xC`E)h)L} zALu*l-wNI9yFPrCSY*qx_*+@yRPhOE+fZU)>_k_$dFyzWQ|o2>Fw`yO$sX7^S^yLj zqaVVZ81s0YcNJ#7-g+~t8Fk~RGWYnSdUMMFt`@mfDJfum4gHOimY9I>e@a_GS~Ag7 z;0rVrhD%ndkDc2RTT5L|nh?`GmYM>W04@PY(cwa8e$PH!sSChb_xUo^iBK>AW_cbv z3;x*JF9?chBa4?b=cxJ07v4_jONl=Lwg)53btF3kCvceFU()kshzbWCCR!i~c|T^j zR>~y!-CGND9EVS`fxjRw4=wv58P4A+=Z8oojjwLo^KmH}O)5&)E3=KPsfKG4=nDHkfz~kNYl(~rD4@=%A<~0xj{i^N}kxF zA{x~l5hxJ$Px8X$asaLaAgBx4;BE>~Od$>43^EbFeDP3vVzOxJ3=V`6%0r+NuuN%s zPt^@hJJRqD{Wo0SwR(t%%Rz{0I(7@%rVq3gG{z&U^*%KCP_k9 z`mR#rUE8*&rC6)&MBi)ZMmO}my#sxJ+-bb`yh+1qZTe1p4t>AD3-SH^T>2ht(f7?= z=o>?VkU6G^&!_V}Hl5cVo85uVXU*)E&XqhM^qm^-H>F$u-x%*Na{O!OCq@60iDW;8k&%*0TbhOQ_}G5o9%Gldi1jb#JY*ff4&K7~Bq?$W zN-)uOJXM+P+l-peozk@S0>PW=e4E1`3W!ao(0a8CG2j0q?{5=LZyeOzMsNr|`~9L{ z1d;%rn*qzsG^PNM>?TVp7fSHv-iKPHBwH)ZHcCicdgPvG6DvzbtSB8JF1nqueWgS6 zXC+Hx4@!E`LB$XR_;1DdoY;7`oKIup38Rq@+1wnlv}5-^<<#brYHflx9@wmGZG0ZW z18yD)gXhA?8E4qL-nn(W+p%JNroLH?;K)Y4uK>Q+`q^POx6f}>Br33@xG#v-(g6G| zqsr`uyF#pFguK_7H6~Uvn!r|vQJl54B##XXqiLiOcPqD1GDjt zGLOG}gyh347$n|nS(-z`q*Umh8^a}vOuO?)Qivn-Y<;2Rc%H!y4-!mcUd(??dTw!n z9*aj&kH1ywA+qNXVB+d)%r81K?i_mJ-|$}g=})e}2GAC1oQB111rZY{FO0H7=AUX2 zuBrEC3))VfCl=dT7?UGg5ho;$rBrv=nz=qWd!bKkG|{aUX1^fSD|{1u67oluZ<2fd zg-UH^sU=>&ikc_6gz%k8EupaUNK5i#T!Hn7fTpmibivMJ5bVCR0H}#KachNn>k~A+ z8bBvk%&(>#F~1o$BicJkM4Oqw@0Rti-y=~|jGo@G2<0GoR>(&4GvcyLX#Feg^X zwuQ_}6sa*e+Z_E-3`Kz6q-4|%0tWP}ym|nruF2CzVPp}ro7)^CO~BKzc_S*TOlibe zoYG<{8J{CoWD#{yt_*Ul$fE6{Z0lE!d=!+pKp>dkFM(%66Kw}zq?dxm4o*Y%GRKTm z-c&aIPGlA&)Xkw>18vu;n&Gj`06yNj%;JRISk7amvei3O=b_5g1C&o?7pep#vou#L z^|F9_2u@XmfCsHKM+WP`e15a$Vh>7mr>g3~Jo}sW;4r?0Zmh{MZ=~L2YI$s7IT)Mz zitc-|%b4gc7t6&W;|iRJ;?`Lvd(?5h8zs(`UgVYnNb=>wX?;}tz+VjJydTmcv0N^TECp-bomiM9Nx5A$7V=XBUo9SW5bH zjqi-1e(k{#{ME(4M^7aalTnmyH3RQMt%!w@r*V?-XT^#}tG*YFu|CGhhxYA44-hPV zZ_KYI)zhzNLab<-RbqxJQFKSFXpVK^tCIg|Yf;c)j@u#;ayiC#p5cv&g%c7BhnvCE z_<%h)jFE`>H>yV;%;ksnU><)XW*rm3mzDnf6%VfEi{am~^}(O>#j*9lA5sgxxU8&3 z&A$bhpqO9WEMO+hG5=oq7W417J`PwP2d$4o@-bI&6`RG_3l(l8w|rA_=Jx>>W{TJB z$pv0v_%{a3KHoi%h?Hg*ic8pcACZXjMx$&;7r?->+;-!Yg~@}Eo|nq6BL3V_auBJx z7I#3mBUA>#REcbKFvx3ZXAX&a{QDN-SjBU1rf%+5u6Kp^5bI&7q8P3A%Pw zCahGOn4*csIT>!6H9Ijv-Ra<_k=g^4{N&Z06~MFWIhq5L9F8D`*eha1?A~;Izo%YA z%gQRnfAr#9eH7k?aL$?fyNUBQ=8YF9O2oqipO2Seg?ji{Vu9DZ8x|5Nb~|hGA{AL6Ib29N+yUgk^=Eb| z-QmN+DcDJ~XVv5d%;Wu4HC;L>sHT(es4|w0VIVKm`}uZt@E|YEmmUg;=Th-;KG$sy z>FpEP*?nXONI$quEtm&al{u*;C!StBPqASQqiXRyZG`-p=Z+PJ&Zc0rb3S5}<7^8TCHJ#S)(UFth`NQ<$yrPt2bwD{*Z;mu7$Lf*#=5qSqPxU`m zZ0*>^-dM5Pv9}iI0WON`yby@g$T`2sa;=66)c8zed`5i601P*ly3c)^EGy?6o*gk~ z&Ue;0+XoGL6E`!^eAPxgIp3~#XNPGiv8H8;-1GT%g|F60^%_7f%-7YmE4rUXAeu$K z(kAD}tckTG$ZqgIAKNUwZ5I9J_6#g(3QB({KnTlQi!uDL680}KjMNbwZ|ta z=MM(JhK$Bp#X^+yuL3I@8D~|%%y_>!q1?1kh+F_-QFLt0+5t-H6DT^=>mEPE>uR6Ch?3J) z$&r-V6D3)Zo7?1&;nh`hpLOD-f}%)TgO;XF#<6wtyZKAYTfxN5`1a+rRVd|mX!k4{4Q2#hUbTNx08&i+jiKCT6&jc?Qyi-Gg z+y!C^P)=GDQ|N)}n}4_U5x1^O=%;nz8Tl~pM%`>Q2n3x1IH(r2^yJ*Jlk-SXNySUt z0u1$x<%SR|9j+cNohBbJJ*0wXVt!Q-US^r?t3VKnp)Iqo)DHB5F=d3A#`j1`?wpoB zf+LI^kYg@;Rh*rlG^=F8Go)#zzCy3Ip@S--4KAqWQfJY^v(Eml55Qxv_cmV z7r;OgM8UxYKTHc*bf$Tt4=jdVrZe$d=MDUgD@D@RPl`u??{{fVeIRjKXxfa?_tS@~ zBPZKJmnZ#sw#mV$4G*2kE<8zEKGrj4b4F91&_rlVL4}2Ov^oo+1jUq5JRP9ii3lz5 z88!y8Fl#wPENByPi7M14W*HNwVQ<5|<^sS{+R9DWHNw-C(^}cFt*${1EhACt)=RU} zOWiZ^cEzjYF&0nI+Yd~^Rs2aEBEf>dpztSYy~l7Z*M&i;mNF8qme$z>;o6N%?RD~n z^@whi-U}WLjmkDZWY{GT$|@%O$vWR5$m*Vgs30D-&L7%6;t_&v)@;MIUNIiN{Q9gD zUc|{(s(T6U>>*KnB++we&X$k#sLc|kJ$OR6J->}c;uAwT_y&Y7P(ONydgEgf${>dv z(@1(zHJOx`WH5hn$+l8|Rz%It0;4=G(&b~l)&7!LkS&|@7SyTwB(G7N+vz>}0?rpoI(hv& z6exDr3|HGA&hz|G+n^Ht6ARp?->NW{E<40=&OWn3eS_<0e}#FKb!#@~jV?4y|Cb-B zWBGO9r`Ta_%);YM>2Qr-al0!DrAQ4ZTg$-jt*(PbnHT)#G6(w8I$7NoWHV^!z$*$n z@o&-mPsjXQs0Vqm+4|TaA6j@fZf|=zc3KzhL+BAAr6{RRsUk3nbnA~h%vqcwNd*9t zMYJU8o`l-pP|7@&tun_`p?rRL0~3*4w>S5))@|y9MSqbGCF)xFs8of<+plE?^Q~+1k`>iAF1ai9zy#}NMf(HpV8FU| zbNjWP!8+?&LHjj#a8*zBvVrZ_vVsp;<X4Gdvps#hkR`O7Sm9t|(VspVF*A7`PKZ`?ZYV0ju1$ z_G_8JjnsEo>>#5O*7@@B{pU*$%c)1vL!RPCvH+3;(j(}y2DQ5VUFpFwxoVJZ;hJ*% z4~>p2%k9W4k68?9m{hzBq{sF-%I~MBy01K{FiOWNjMDHW!T(@7tUMw)mnOv*tB7n# zx8SBT+*dRr)iPJG&3Z}Glc~|l434m>|4**jQ#&HHpte|}_Pyl2x>U3J1fQ_(E#jWN z19TFGEO}`85m7|7@24;kfW;z)U|l$sMonv2$9KbciND&W=lDCqjbwjGg&2+U?JL-7B9&N*;G$OJ&T{E8GOZ3AupP^n^`nu&|r>%a7>kY4w zKGr2ZN$8r~dQYPv$W`!UZp44Xknd!CkiVxBz<|6c|}c;x`nYHI`yy)V+|GRg5Z;zyT|)#fPYuu#Vz8-y^=nwM@zS=_A!NkmdxFYFmPIS4>0d7I@_x^Nh= zXk(KN317so7e(ua5{l!kOg1h{^&xqH4D*SpSvr}py33;e`Q10v5^K1RIs>5B^Pz20 zKVl7a{GeYBbM}p3SQ&Cpj>`c)?c?$^zMkzxD1N_no94*V`kEP1WTC!6UIRYRrVyW+ zv6#Q8JjRyfg+^&(IH_?$b+?SsJ5F6DaNB`wJ+3tf@#0O};NvKJcquJ145_9Z3qg+g zn>CxIs)CXnYpRHvF(xLoNiN)Bu#+ej0?@KCu9;vg&KzS{N~^&JS{))k|hzjp~bB^45>>h>~BSA(6#}j?f@ua-R9y z5z2F|k6uFNa@Xpmwrh-*PE|D87W^wgDcIu z2A&NI-mG7T+iOP32VP}goK(eg_g)17&_LXhJa{yqkP`nJfs;1Z=WI*VEe6LHXVGcC zk{LF#e#srsTfm&^!2pNhaZIFS8ahq19de{r=ff-(WXJssofJ_u7zH-6w_yqZ7uM2Q zytL9kjHBZUf1_aM`iFD8)2jDkIUx6(tT;54Uagj7cZ2|y^p}lXK!f5)AeJ72r-W?| zkPYU0lqZ3lo|XtVl0y!(!e+xb21SwNt*U}#r-@bTC=yX1QI62fdhG#2AxsIp{~s0~ zV9%6%2R#*{yOyZm!)@W)04)U3Gqm6o>QycLGXxzR|#*id!h5CnI34sCGSs!_mhMxVEzn_ zsD}ac4twYY&A)ERfyCjNvc*+q0bc(_4B!QrB@Q-%uO|51BZ%+9{g~lA06!f9KI#`J zOi2ZKf_|0sZ2Cm+@{`^x91aTy#S@8++&HA6rToM@f}zqwpPhx;$fXa)b*t3t`TdN9 z=l6wYqVKtT@1F!W`2s*;O(%{*m$4jrT7+;4vQ7a&D9 z+rWD68cPL0(vNa;eZLJV=(_CC%KhehcRZUw&)V=5grYadn|K&>L~0`6**WXDyJH>8q+|@l}FE1ilDfBiRBPWIhz0QA@4; zN{h{yzy2$fOKu>=bfkUe6k2BUm_&HDxmz7IBstF&cuc`@e z@wHPEfK%#6d-|iZN}|qbC#-E}xWnSVYo(2nxfIcDMmZ*(RN0g1EY=9-knsFq!<-YM}SEjD;Gx9ic(k@m03|G znl^_?Gx{3-=k%~S>MgRvanRtvp;eP}^chYZTJ=j>b)#0jMXPSss&~xQsulOI-mg_3 zVENr6vYlAK(NqJiy?O?dW4$c#ThW_Z?@NRaRZX>6JIm{7b9?sttdxh$2m`AtJBB5* zcd-dqKMgm_i5w|3{7>sU0_L$6#fi#R&}8oM<}zNPPtKAd>Bvq!^j?UE-TGixssYWiVYPfM$HHA`5xxN<^i0vfhN;8-Il!1&(bdi8o zx6BtS{aT~!xz00!(wk)O$)%RV8*JDxy-Z#w_+$P~uZ#KBo2*Xt)33EVwb}FA*QO>a zy(vR~C?$)@*;~mcqGazNpO8W6Hbzi^5ESMs^C-#+b$R(KsE<*(@8uc}TqmS}a_p#k$GNrPUdlMM4M9GX z>(3m0wTz&MX{&le4JtL9rB7PfD7C6IV@&g)_Bc&XeXmS<`G1*v7w{;nJMn*#3}k@7 z1dI{|B^A5|w{kE!2=E9&dMnwVkCC<0g%jcuWn#V@i!dLlzi8V%?%FIG!S+Dy$Mh){=O7*5fTK z@NPZ5s73fYA@6vrFW|8y_H3U5rntYZn;l|&vD9`6c|A40RRkx*?)WtRuw1E4vPAx8 zibstvy75;DC@ONE@C`~U@%UX9s!S{^(D(jLmI-g)$fZ+@Zi!qpwdf|!%^tn_*aUL3 zv_?D9N%7K=hDR#@c&85z6JCn^=9p5!?U@#Buf&6L8ns8a%AWG!{>Pj(>{Q#CYz9vU z5gSTcqiFY;ev!O0ZI}A%)|-p5{yJ1ap4zRlo}S2Ub)u&;^JVsCw0Yv^Ox#$?lTYSX zcH%OEX5uFBP$urs2AMdy3&f;g^Q84zo1HrStg}Q=JG{B5I<2$XE+;XQ z^<`Vnl;^qCI~bvLF3wtqbMd-ssaB4bVb|=LP)o9#-X9))H)B{A8B_y>*)B^`m_zUd zpZ-%iEJv02(03cPh3%-M9$qBj4m-El|oqWZA6jwgf< zFdzhZ8;Ir%$hvi7;qoL^%>!Iuw^Mhw6f%wT_R@2BYtj^oV|rYsZ3H?{b_%g+)0d5o zcAp#`744qnzwgIpOI_?=y;io=(UT*KoH?3vy8tmNoGaAY9A)zBZODj_3@coq$DDV* zfUirHfr^&CA=OT+zG$|2k?R62XdxLdlMwqF$6dW?JH&Z7kKAQ;nflMxHda`f{B<2U zvRP2z!Ws_;iWm?`?6ERE<`N6nJhl2u#u&>^<1(bp07XHLz0$clia*BL1a`CMeH|5p1 zp>@@hruxHVAng?ZfQg2O7g2#(;gPb!SQv^F&c9mnKdNXe|3aDkafjTs=I_D7vMHmf zgZxAO;^*VebZH-YSU?dGm|Ei|b)(+(!}DY$Go2;5omVoWSrjvq_cF;U5}V}KiR}gY znuou6OlCBjho11t)Qr|UEY9_zS%^Ny&MXKf_Pk(+@>;b`nI+C|N^F`!K_qIW zgzLOY^5>Y-0t&XcF3oOYH#w;?_f_fHm%Zw!p>UMi+dJ zil;E;%~IT8^p01$+1&>CXZY*p@Z80_w;fHn=9}xSeQR*-(e!1-xL6nHp|2RI2}-$eYT+%BiBk(L(j9dqg>-X|L%KsN5q$3W z9qo48mVueo#1=KL%$wOx6tz(0_l>L%1Y$v|RNXfyC1}Y+ z%uN%7Q!3x3(9%q~J0_`g4S0d<5JqdBd*t+2H(G?0t3HlDEGNuGNP;i@v&=V^DC_Qqi$Iq>0{%KN9Ovzmc>;y~F%GDw;b9piygs@Vp&OGOjLb`A z`YQ<&^kz85CgV9@7T|3VVmwJT9Cs8eIf@BGv6bq(8IXG(g+3Ayi{LV=w3)i#rm&yR zoNYT(_m1t`e~zT*-N`{gG?>A6$kw(GnR9!T%_5=3;!W*cH+jP2*h^!m@Gs-c=xiK} zK84)zK~@|3xDjWZwvPH9hU`ck`ftEua&_FOX8Hm%v;6C}cV3^wm%52}?o!J(KxZ7j z$igLfsdH26tL3K?00@wLO1yX~Rh=vnlKWS@o#5wQTRWLRY?sy5H>xHpZa3$D)pG(2 zTl%$X$sgQD1V4(vFERcuQOGtJZ;D>qShs)DH#sEVW~bmXte^WCESgyQ zdi|>x@T@X1A=Wr#4e?HI|M(4}Hy~$};?sErHL>#y4PN%wUBGRH{_H)WVWHamb>g$Y z`+U(M)xZ;kaX8weZ+N*~B%pu(yAe&9N9XP0Q85N1wf?&IWCQNj%dW7QnT5lWuMWT6 zj@5P5_6mLQqdr{_DFdZT+%7zBZ>Q0sbl@lQvA(UhM-B2GzbAd^K3koPHvbXBkVckN z=(W9dhrdp}U8l>?!W9+z>|`b3t9ahZA@4J!JGUqM55=)te==Q~59dk0zx$ePh)`G3 zmj5S`G!M()vu{6S#&h%9+k9(0@ALNuCis{9UCy7ZOY%R%zsrH`<=^4kNi7%JqIQzY zgA)CH3YR4-7(=lQAT@*BVullP|m$Aa%zqb$3ZT z_?RkOfZR&|$kYjs(yzLtL2Q)Ta;t?!vu%}B^-Zmdrxv1})el2~vUN&Ft?{Vqrw~#_ z`JAiR&#PsdZJwum`u5T9B&vn_MI5&Ud4H*zJ4Iji;^ui*fu5=XTK&e_%5)bW-hn}*kKE!&l=i-r#{#ngx zDp=PmvwylRX2?pPfCKyegSI`AXlo*ro|0NAnB%;$f5s2CVVK6_M}s-F>Hc<$0+o{`l5c6YB0Mi*sC6m%jh4L88Fy=MELzsP6Tu zO9Myzb#vKX#1AS(et71zh1akfg&VW^xhJR9|jJ&%G`!Oly?0n{F;c5(BwuZHU-?k)&DbX zLAEH2Y*UHIUMIK#(te}f+i2QKzo?Pbo?})uaR(89?6H_VMUUV8`OE5xqOkdF7uTb{ zYkW^N(|!rl8T%asmb7$PRi9PAvOTrx3;V75?_LI%~&8(3|N8+AjAvD63SVn2Tm&$&RtRx3a8^1XqNT)NGTI!FW}6snQY$DJc0 zvTc?fP`=j{2sKK|mF3G+4Kuv460MCPD~fi&j72t@qi>%~__vls^{bqM#Bxw=3ixc@ zHPE2#;W=TJ4H%L-^eHmTayg;&I(D^;u`COAiZPp!y2DY7j3rf9kaRkdd)z<_WR)s< zfryE6SjgGtSXaMhyIQKp&_kdinx5nO!>&2GA-KPO)h=mcrzx+;)%A8O5?57E*xn@j z7Dw|C*>87^%=S+C^c5SfiG&TORYwpSSODMJ`mlt*GlP*XHail*QI;fv1oa7f03P2- z4W>W_lSE~fMG2UV>96acv0lZu*svMknESWXF}b1NF;UMCv|~;@Ci0zL_}f0mTaVc*{4S$>r+cfrD&roi9>jKf{_}sw!5NXCO~VuK8~v<239>Z1t;K9^pgy`X}20~wc|BDC9UE7 zpPvg8$K(w_c_j14-wm@|?3*xdx;JvEx;J~k!je>-K#<+v8JI>H@S7CddRt_!TAl}W z?@Yg+tvz$C8eu}kS>gQ&3BfXT)*zB_wd(TjGa+bL1IBe;HREa~l?;aif6Wlt0<&i@ zYv|%)FM-sor6~zUgl1+v#QunQ3DyK@6cqV_m97brzwRt%Sa^r$js|#R#y)7X*c9ikyP*?%&ps zADJ!i-?zMN6Czh_SE}7scdlFAO}09~bh5g6raCD`b*8S-inPrCe%_g;vTyXMj5LT% z9Ya>VB~r)e(J{_-fA`OPjkR822NM}`gy0FafSw7ec;e!l%T)bZ>9GGNmm^$*zy0sS z0#jvkpG`}NWhD(2H>o}KV9+dawmapla-(_i-)y~Z+CoHQy7FXqd~C)#r&s>V0AaVYla zVq2LB$T8s2H57(O3EiVB-`@8}zAX|l1p=`>`sE9HtF3&ASH)QR$)>(ygP*wKkJ2eO zROW00zlrp*BWpwE=e{D4KXxftQ_q>m?naP)-zbCy7$?q|Xwl)@KiviaMer})cbBee zdQfJ3Ydvr>(hbC81}gNkBgTWLnoa6g>tZPT6?aLDV2*76go%c2e+`Ya6*&2R&`01T zXHIQbyPI@+?K}AGkn4)XXa1+R_%D=Fp&j*8&AJoYQlcMi-e~wd)wWF>*dNBhM#-Wc9b_%XZ zJfHp!sm#Z!gZ=CwLdK)CLd}@KuFH-alOzlx;zmo*91AdQ9#qxXBP8yaMeehMBIC;D z+A;nHB5nu{2Z9)X1Z5loY`W*TaS)Ej@~A->Wn0{t$aUNig@D-lTa7aI{eq5E+s$jE zThEo|9P^DB`A;=U_rj#o-Dm(@rMoNt=MiV^MEU=lUnu|ociJPNsB{OJ?NWC1PmzRC zOHO~qw1jz8%d=59i(uWVqmPiu%+*EDfKx%ARNo&z6OpvcJdT20{6xm~$0V;P z^IqlxzK2ja0Jl35edsnNPrhz*S@9vf|GCq9~J%rgh-ja43XbEw_k z_*}#`KzEGwu5@RJMQ!OB6I^Q*YpTmoZ6&(<0W$-UJCqqNFzQxt;7jQfKm>7T62nEK zU2(X{A3m)=+`|4`-qXzCrpzyTEfIpdNeG0Qzzla@>Lv)P*`r?#8_;c+18`1eh2v=@ zv%&UYPYA#>ibwEM(IgY8bqIdz=jze7pXX7_&ZRD=UtOP1)a=n;m->teEAYID6 zZuu_t-8)f)Oto~y(4=ukCOQ?i?QkjkYV^Ui;f@?DUl!kYYDEm zKX_Hi-J|x$7>v6CYg&TB_VbM_mRzYBxvU574|dk=o<5`hp0?DHIVKEGb~XO_55C}@ z9G2>g>IT-()vu?t6V^PJFC0fS+Y(*$}R; zsbyBdHYc?Ic#A%(nRYGK_Wm3~)9A$=W3U3eI=-~w!TqsXQI4ZRGC*SF--S@_#rBgVN(hSua|EU>#28`g`BwoZYd&%5Si?IN_X$dB)+Q+%&u&7UssQ z>N{cI_4SK53m96%Ro3b^ZiiJicEu8gXT5CYJF?X!gh_j=D;|0PT4@>2syDxj!&Aw7 z&^2Uden3t}Gn;`1{YDAUI6r z9^URpP4Ot>?L$17es9kl_{EX!UDUx~`}a(C^gCTDg9r%d<6n70h!u9~ACG~li9p_u zEtWQ1H!nR-jDSuM$eR*Xm<&Fqwu-dU`0lT_?)(01fNk(mRd|Ez+dr@~f6V~S{1`0{ z;K;x3PQ*TuTIh4fNTy2l#~oi00&NdbErYw9qCAK~0=HZMyP%Nd)I21>O!kR7Lxt+& zOz}Gzde4L01L9ZEU5xxAXI8gjUu(J4_1lv|FcP>hc2fxPc<_Pfr|FT*KXUFdiwNxW z&wUj!->~hfs!kSoHi7A~m!4t+(^)IDY5PI`vyn|aKx8`jbZpVo_7)Etg`_I}*ljd! zy11h`cv$SSa)IN2{`8GRwS+sX)W3O-?H*ar@-wxF@P<|-PPXwR$dXoXcXM<*iP7o< zMv?4~Rm+*Fs^did=4A#*EEqC26;37KL!dBg5ggm(7dS>YNxg(5>8p)(`HND+!l@>X zI>E<+T^0Id=7q!X2nLLn!7zkSKkb(&ZK78UVy|7Am4u32LP8sDP7zthR{F%Fr)DoQ z)qOznV1mD4{2k-(C=p!zb&HtShEQI8=(C2<*!s};hEQ&OXq;+MlbjV^qE_)SGNFE( z)7GDqnHV3$@n7nL7&!!uOy+Jezza{up(^?T5p(up;yrE70CLrrc_I72%2nrN#WS0O z`_ejo#xh3Vy0{4(m{)oP5>y#O%BR58(fs=6c_XG5L!>`Fidvn5Xx#@NfUu) ze@r;+$%p9-!HEw}i{ucGLi!Urq%W2dT}yMS2kHc2owGKvJ4xiARlzJZg^(}@)iPoj zpnG7s*1*{))$Y8J?${n7Ja)1Pp9{4})I){OClr`6WTu0NXA9302*c>X@~M6zmYhIt}` zYio{q!gJY+_DIOl0CsR{YW8*pYHP-kGr6|r6HgeKej=^&?An^~_>!U8;C@(I=P9){ zpCP%skmHYwbDh|gQ4hca$eqREifzJ>q;ph5Ft0xNSwnDaeQwt)nB)lTj`#^u8}L)TUFDgmd&c3!y!*BDM2SqfR)VLzcgaXBuTQ+D_ zml`alUJ!nHNuu%uS!kB_bP0tn(XR4@gwX}>h@^&3cCr|ydd4X^A{Rv{`dbULI!>qZ zX9ezdh*_D8iO~um?-*q6nf#&8!gqK&hz-O0@t(+VnNtFRa_=F01nZj(D!f)Csl=+jydL>iz4QN14oJBi_i%FyR z6y=ypnMnCqPh5|J9~Z}5nay!>GdOXnT%TmGBYAQ&m>d7ovd|kBrI{Q_8_-kuk^(+E{_tOR$;N;3p#`ZP9fc}ae%yUgH4q+$3xf{CBW;G-5xs@4Y zAuaI7e#}fm0mOp`#NlDQ^=CL-?DZipTGJ@g_FQ-0@#YDZ&)7BK)egBHXQa?M_J%#zgy??hmg3 z|E|QOh87S&NsLf`-4CSZ(1GYtU!=IU#_x&b(I0EDFJ@S`SM3+eoYZ{GnNS)LleEfQ^br@r`kR`7EtFqycA z1Jb8iHAMVI1}T{@NXc>-#y4M$ZXN2_j48Kiu@S3(>rQuvQ+KMXrOE8=H^>kdrb!D0U@OkhC+iM}WwKduB z?!<&Uq|eu`G|6umZxuXbV!P$wMpmY3YpEd7CZCEva7pRV+mb(#_c zqC^M_FfySpKo!8tta+$O)Q-6Ca8m}1({JS4k|W^swja8*m~Ed^dEH1k#H_^0s&5uK zmMAcHR=DK25nRp))Eeoy*a2p%8Ms@Dn16Kjwh^?jR-DA1_@R)*R{upxbFqV4b|0et z{w!B7RXaV4E{f2gj}%wl8d3HD`6a@=%rKA{E#U(aFhC3;)lqE7Cc47$>}6-7Pd+Z( z+Wu6yHQ1HX&*RdN%D8HDeZx)E5n6jf05-v*1MqEsyG@*ktq}27v}UdF6`oiq01X~LaSIdcfj!zm-fnN6J0d64M%VwM-V$#T|TvryH zgB1j`xl`Zsfl;tlpC`My?1!H#C1=0J+#maUh*M7x<3lxXgA7FZ3CX@(d)5-w5K;sxM-k~(K* ze6rZ8CbzlhW{;bmmgt{FS!&@Fpxw#z}8pr`$waSk|dx;+(le@227~HSa0OOj9$Ok%zvYJ;j88=o_)zUUTOSfVoAz!E1#%AC73;Psl?nhBVNIl*&F z=ds_5MjKzBlSD~3^cs-JZW%{MVu!fjqj;pq_7{xfh$-^k>{OBc6yfA9Cj6c*g_M); zwsV$bF@Hpd`!41ppLi*_izzqZ<&3@IO1qFJasB-(i1m)aX@!33pOD7iN)Y5Ev*q-WZWTRKAMu{m;7 zYlVK{Fo>1-lCAn**RxGAKfsd@z{#O(>hO|?&0lxE-0smIe=Ori@gcWGzCck{cqUbk z-7VIvD69MN-ew)-pj?sekG&`8d$->BD$~}guX-0e0)T!|p6=2APQ^~>T;gF67D;b8 zSysYd_Y^N>HSW3k?F3w^tj71YdyM}$+qJ@;PPE*7wRorjpF85&hqny?JI$dqI!qcn z9U9dbSqzq7z<}VnHr?v<92lv5=F5d>@54yF!b=%}kR>@M0z4xHH#r;nA{UEKI9^9# zAb`=5cXPw#c7-u7(N9cwkLn)%Vy7Gz>4hu@N>e#Q^p8E%3qz@I)j_f9?ggR7bl6b1 zoU8c52bih&rbhmy(fC%8qXN25t!~Op!lt!xU{kMU@!hjLk&`cKWTyg_uq5q##=@j5 zuzNpdw~g_eh%RE=wp?tfpZJH_d{+l4jBqC>t{`svA zL)o9o%TsPMR=Xo;TD{=$T=aU!9aKUHHU4*O;N71ik%U{2&`9E(OH0eY>VLZShUsg> zXnGbuzc0OgyQlNC-#5z7Nx$zpWsRpZ>-RT)m%Bl~&->1HQD()B|E^<1>j<*Z{l^{Q z`PB}`{1RbF?P>9BeD?bu{nKlwn4@JoaMA0!K+^@Y(j9w+cQIo5_}x>91HZM6O5$60 zNmY|tV(t7=0@?6BuEd`*6WApFgpyuh#dUnVPnlBFie~w*DVn8*#m()J79*XV=ETea z)HNM%ClZq!6WOU$83lo4?7aDU$?dWSvLW8;{B&1s6}5v}SQ39&Q%n3|Gf`J6EVU}p z*R;wr69x`jt+4C*P2wr>_>fd&^cntHJ9+s!FJbbtC72g;xS!X_ThnM@yE5G+$j#hq zqT9TxxFovW+qXk@ICQ~|h|XD8_PN(kR(i$*VPE=oHFk`yDl^%g`N~W;c~D8;(0>jm zem6CTmr5O%1UAVQ@W(QwqXt;meS=&NSqWzI1=qwk$;`$b8B5#@*zw+<+&W=GH8|Gm zTrBB1Ea%l45O9J+bn6Psis>h24fX0!$57}W=_rcZxAamZHOw;rJp4#qzXY@w=tUXT}>pxDi-yTnJhVSJ!5`=GPw8OLCqvVPgPSK}d zHwAOdDOCNWG`v$!q=l9YIC8h07Rf;*K1}-U1Igw(@3d___`4I^dgvv$txW=Vd)q3S zqJO)9ww6r+NES<5yLIE1R4ap}#g-y3OCoJ8>uqaz1xUPt$3VY^eGPNG4cjkr1TxmX zl{aaQS0yROAe|BMc$R1F>zA(ayv^U_scSq(`0e7agFg=m=+ZONIXdYc?;uNp8T=tu zUcLAOd`~tBQTIcIXIsUmG2gMSPS&wse3efX54N1@Nhuia6GS3}zE!}9G3i5t#E?Q1 zZUN(09XZMJTn4lJ;J2pF+a04TY%vNykzB=%1G(cE)D@G%?HFFJf)MSp6)A$!QBIy* z>8U>w*Id!EIwr&gM#%D|&b}2k*XX;Q^8IS-RDl-TQW{#T^|V@C8-poc-WE5G*Kwn( zCDlXSI_h`KGo4-oPur@0U4eeBRX-TyN0_WZq-m1PReF5ekFAqFiC4Alda_UVREx*( z0-j4)vf$o8aGz^;LBukVYyNQ?64c;cVgLm967^1aU5WW^E&?t780Qz$^fqO}D~NaN zH+WDV`#S$R#!lP1;`y_SK_*M&sc5Lf@>MZ`eIJtmAHhadd?WV74aGOrpXL-e0~)yMeTu#AM-Is^YS(%f)WRBaT8VFKkLZkmz+C^r=nW?v$mBI zK|~xkwRgY3G3Wte4p1kjX(`@g{QMd!&?=b*;?0D=hUA2&A>aKTAoUk(4h>l|q}j}I zT4!dnndY>>!=hIXhpkJdGI3MfD1I-@qjfW0QIQ#^$Ud_wNS4hlt76#m-P&n)8Jh~d z>^Fw7*+_&U(fhFm#y&tMx86){$3JACrt*zx?js4eW8Zs46i>^*FP5R%V-{w>+qC6xS} zjs5nYj@#IBG|a}93)$EaejCg{-3csjV-s0GB-<+Xl;{Z>!{^p+l`ZcH=hkkOUGE9| zTQUv!EcOab(@DHZ{jFzYT(XVy^M4bOy{PxyK#WZ(S5HSkOTYk&WO5VWsqKW--GA_e zg;0I@)#$+`y};5KCkrQi6kZ;t34Q}wy;9HG_Xd^+Nx{MW9h^gW{Si%Hx;bmsriZ1o_Z|&w1iICV9yjhAxg2aBbt3t2}Os~VaVs`!18wTm4 zxk(ypa@w;};*UlVe^>z#pTnE();~;EhQ_L(fUv(b-Z`|z{IZO=?MinLE@X?gDbHw| z;K|R39?Jmp9P@&CvQzc1cij3-Zb0->M14G6pmX$?$YD-O6A$k8Z?j2_botS4I&2!c~O22iy+Ka1uc!qk|tV+EI2;6?+9wXh6fWo!l z@OizOc3hZU_HE+hmN3ZkEcTi#6waDmQthaFpJmYPGU!roi_EykxjHL8G=8-=+EE+7 z+NaDc1Pm?=kFaP=JzuJSHQ^6H6Z4_zi%s&C*d$$tJd_Ge$B~!a=1pS({IPB-C-Ny1 zu75IzJ!CG`_ZGlVp4Q)b>}C5FKn*f5hU^HAeIkV^eF(E$Tg%CUezAn`P$im!)2c5_ zt#IucSz%>fNhMpQN9xi6?cI8dMc>UF_F?=|m6j;YB6GZ%>gZcXRY7T!9(uTqh{;Xu z>BE|A)T?+V33u)6G#wW%vv<~?-jJMif`-sZ^`>K{tW?dOsQ>yGu~(WXj8hMtE7h+= z;FpkSnOoHbCB$P{5h9cr+cZi;V918u|7tI`GjO>rG3~YzKE;X2EBi!f(75S=96Pm1x){!g?oKl@F)qCR zr`?_X5U*#T}%r|yc}m2@5P+#{+p(_opoYknGFJan}2iomnTHuipO%z z^(1pGPn@gru(XwnSe<#e!u)%WdGesSt~J+>nrr)Hy}5pfe_=*xJRaL@$~?h!CDh{t z?y?ylseZVU8E%P9OkFKWU4>IuPo%CkawT)q65En`*63d8oVQqx*hZQW(bYYan-~(x*Hrp+!&9>kt?TO9>CvMTM>-yCE^Zqrb zKai?XF>dClmt zWyw+Zx~_KC+4^DaJk}qNNXB%s!;nGTb#;}%n>{0qy zd-T-Ei1@?Onz}wW`cAi?{AAmBH4U5-UKNV5RQ%z`s3F=tIm|b5Dg70TQK=ZI0!74Z zbh9aRzObkH;T(b!hVgbA5gv*&pL2kBof07>j2;{W5|am(ngNX*?~4p_khgMJt)Xz^ zZW9NgnO0H6Vt^N368+R0zD=#$BIU&GXR*g(QXGGzbB=*?z~D4w9Rh7}F*?I>4staw zu}M0r9HFn~>qB*;JRK4_-dQJa35z5vI?uk=ugKfgyrmIaK$=>dHb7%;LsYPf3V{5A zeU7iK{%&fMU=McA#PaNfxoU}THFGtbxhi=tTccZLg1|(J3Grg*#OIKvng^1oBiyLN4ocr=I7 z5<&LN7KqD(ImZ^*1h)BOH(|a+WaU_^^e~Bn1!5;Q$)fAF{}_ctI%E0w5D-t8OH>V0 zGBHV?^D;D&K@bAuk)phE9kM5|#Ane~QY&{7pjhgpB^<8H=y zrA`h&5*_`|Xp4?)K}!UX0B>-m#bbt+vb0ri^RQydFd~)}yXilY6je`XjpzC~_%ri& zHh(GRh6^Lls%LK-1xTeR)YjuO2fUiU3v3h_i*-jE@!x$qy$(h;(njo1bNfyO{40?- z{B_k*ei;60_{+%%j+Xdij|o6sRA4Y+0j?)|!9p8JbXHknd4awdQ92@C&eN2s#bSdPPhJaeQn0M7^Cq8_3tx63lV z&Z3G|vW9r@K7v`7sVnsxK?;O&OUn|KJ{26R?k0)lK_u4;yx3o|(g&m4jd{ttr#2xp z+aE9Q5zCJs$f{;YjDcvG7r!tJJ_~a&|8&TO7}U`DfhHa-^=347jv^C_&d8sgogdPH zRy?1H)JeCS?*J+hm}aN6QL0y)>JLyoA?e2qm;zIkiy>2jCNG1SPR!1ZU)D0y;0X6e z-Q_*f0>DT_@>Ny4B%&MB-)`P4pRFkVHE+lB3`4b;6c=}Z>cih%JXWVY#39)yS}lT) zk!!tAo^^zjuiN}~kMdz3bNuA4keYX^8``P7E2l=rr!P-7tk51P;Yv4n>$Ou>P2jBEs&9vzU=vM~{wMdQtS~SC(Jk z%n*026OI3^;E@0V?U0sp3rh8aO`w*LPfu(GN^~7A@)Fus^sW1!!q*BQ+^XN+d?rR@ z^&8~GbJRs~`yYfw773!iu9eR93cZiqw-bFf`K(D5!mM0tB%8=h~ zq$yKTu#tzRp^-6B4RV)F)g3a979%f|>25IrR(TF*D6%y9kCGxzY>8F#uPyX#_lgGU zTa0v5o>NeY*q|_6aCMLT@ShtLrX^@_L`vTIsD1aC{P?rW*S7>Wn2Kx{TY^ux)vhpA zY?M3X(e|S)_NUQ4+#x^8jLf?0__M1vTTO;PJG8+nDw$hRKUraqT|5#x)-&f1%iQ}% zuFEq&4_N91v7ldQJTWWN* zuqV~oK7xWZ@(;p}@-BeOvlBahnr4{(&XR_v32B>U68yoYUm2(}x?19=*{`yP$X5+> ziNSy$AQqb(MA2c0P52~GQhqa8OHH$)=!+Z>Cy4UBc(sY9Sp0IVfE^3JwXv7TPb)F8 za6oDoL@<6v5(`|^2MdI-AudZSDbN!cokawf@u+siEuP4QwJUByS_fGD>SHNvF!ng( zRBTzY%5?i8T27*a-7Y!^rqID8z2`~_7<5o!(7_!!*v-4>fWRLqbnw@c1RZp{=)hrK z20#Zm75tx~gJ-@Y=-^Ni9jq|bAF}9Rbboa4*Ar2}Mg360Qty#wvuNkIsNe+ubGH&f z1Ka4nO_LtEUDBj41`T|&?n}|YfL>W&f&#{ENTGm91_dm26SO0MtC!u?>t#S7Cu6z0 zM4Vtmt5cK&|JZdw(eC|Esw#59e-Yq6a)33Kjf~pY?6^Q=pFj4nF!LNHn*=PfeywuP zQ~6`lD!ka_+{$UQS(2vW;UGuhF=0kRPmm5iUb7)^l!%ljr93p$G1BLfB>rgRpS;2B zBhOYgNNUQd{(7pWjbo)Is)^P#dWd2qB;4j{KA}3cOe>LAzmY1Nd%9^gxRK&GJK>|3 zdbQTPlIJyz1jYYyK;Q&-mFiFDS%l-6mg%n>A@C*J^*0wdZK0WkWGN^nFsUCD+aQ=j zz%O50U}kiK0^gGGDt)wpSFx{sDpM>DF?EeZEWjTDZytZ0D4%efc0%2H0dO1KNYwpO zz3V+t9)4q?dR4v_&ovc%5Hc1q3j&M4^Mq3**F_ay;g7tClCApgX~r&&tjb1BN`?)r zbUCx+kS^784pDQkHM(Q0sDgs6XhS0|4p*UW5+5(|R;UUuE)(e_NFzh|OmE^Uug=V6 z%h!&SoFOvGGEW^=O8(Nlh0_1FZRsu zBn3oUMX9d-KmuxG6Nmtq={@xb-N58t>O)u2&+pOf!*}r^O8Q}kZ?CO6$UrIqfEbex z(46=b>1gSAV<;!C1gap%2_1?D59t@qI>$UcO`aN#z4mCXKPJI)N_Fkb7sQB4_<>IZ zs4U4PUPEWe=QrYf&s(7zo@kY?1oiFUs|tPI!^SsLs(DhXY1O0uj9#(}0)25F79xah z3Tl1FZRCtE$7>0ao6qCZ;xoLP+2NTjGkkpIX_+CWZv2e3KO(i|4ohYEVFP$P`7;Sj zndZOm*+H^Z4mI#RB~eukH;_YZ*bqhgB@d4sdv7* z8YiiEni|R)(mDoqgogU{$#glmKiZhXrU(Sv{jq-<7=)E&JL*R1YVeSZ?dP&nTD7_t zTF=mcopfm}n{rvu0gwDUSJrDz^F&njJfNUh5Bd=nhz>&)u^W6B>d0NDkUpxVii!r!#K5XJGo;V(3$05954{j{N zP3zGwz0N_}t7_VWM(DOKScm{-$yAP2moj7zBR0%#x4!dM88n=1J%kZoRCjXT~1|t^bhQ_B%}kT zq5!57i_=Iaq`xUGhFIvap9|I|(H?C8i}84j?zZ-{ugNwOI82<|J%FZf+Hd3MZ8UuQRruxACg(KA-%@@t>f+<&y^aWQ8~IslVF=#$ibCtL#~);fN(jJP`q>FA%?^8Z_4$EL0#h%=iVlWL;mv)Q!_aI75s@^0B^ zp5$ilyVd`3kfDFsR^J48O>T9u??yz(@s{0AAR?{b-Dx)5JhR=e3PXqR@J0JDx!+Tp zoe3}1VQKY?xBCp*bZ5Ex+OqX&`scqKl-5_4C)Y-vC$vbfy#kbqfR7NdFoY=;=f-t( z2@(i81uajlIFH0P32!C|dyWDd)qRarfxo+J*cLbGMJi<_SMefxnFquFJH^W(;1^#o z$-qoX)H!xFN!5-k0|M87xY+ej)C1Q*xc%kgwR_R0_SQnnGR!eh4{r|*u z1Y2gZRE&`<6(qSJ56NNnPqdpnB>&{X6s$PWb?^b#bui^ND7lCzH;})V>4Nc2JB=RI zUOxTUed!oWxMhdo-sTiYgrd$7;^by88RH}~JaG_vX9feQsZ*p@3f2d<8rrc=Ohl7) zogV03o>P4WPpaGVaXfnHpRVJPv#6)@v_Ln`*=MF+Zce@=56YMm)H)`53~9zVxTkPxm(N)cz2Nj{ z$A3|~M5fS4O*Uv)eO9aCHL006dsLW-gr-4qJzWrq+0K_r_m zFm3LZD%EPP86!!tWWTOO&^3--w{8=}bm#%qr4?7gh8yc$(@onbRN4TJ=t<~xawOAP zq*;iNix2FMB=hmf;jh@dDa%e3Xi}TlB&SH`h-AgT(L(Wzr2{wpmJS&A4->H}_&|pk zVIc!IS#wA!$#7KBEGP6>JhVO@ddLawh=(3ka|+P9syRg77CkHuT5BnX)MkhMX|+GQ zqKl?8OduM^&`KZg5KI9>vdvmbcqp!S#MtABJO$IvU*_8wxnt{xdF<=)puT;PH zo*9N1No{!sBPl!W-={idY{cwwCWPH13uNtO@7t7QfsfJdZ8cIJSD(>ujw%zE=(yD0 zESNp;F}ZGzbY2mi>WNGPTbjbEfZPpsPSyGqkgCkAQ}`_&R$Zui%Wdm@$xuage>yBq<+t0R-n`X zxt~U%4S91u)@)LmiqfQjRGq}htc z!Huf^dvL}1|C>GdiQoW}*h$oOeRra9{9qPZj6a1;hyLk({db}ia*Vxt+{l};Bjibo zajdaBQLJR`T#C3^t|FI<^041dG=hHFj3VdJH{Bv;wmxRai8b;d`F#3ivLB^Up2&*p zKL9!0CnTJbsRpO7Mc*vbtG9>)pG_N%qw?ngi>D=Aj`iNTSYq`A%utecvW_F|>5;%A z*_n6#j-6>V0|B#}lEsv1+%d5btriy-xLyZ^$5z>GoZVkvE94qRoskIxMl*s;m=^K* z=OTS0{^R!OvGm9XPLbpnH>4ux0Wxz{GVyb3f+DHJ&rSarq_(*QUBZ&`(StBc5VrBq zLAA&iScEIKNlq9LQS_Z&k3V)k=d1S4L0sjTtHE4JBpS(r?T=-dt0A5a&=4xDtczZ% zz+}&2r~HrO<=xTdjQa9pP4A}%_SKhTuoL0!AzAmhl?Ob+rInx~514#{Q(do@c(nV} z$Y285Acpy(QpPT2`N@zv$1sb;4sfu9QIRk)2{N2REO!fyrB5fbXtaBX(Gd8H+i;98 zkj~_P9$C9jBo^;Y&#^lmJi{d^Xf zB}?d!ZII1%eV)*V_EOT9k8($1Es^ejhBA|1=cB{F#7^8golz=ReAlXZC#vdUIpQVg zkBN^c;t?Zf^#zC_5__9Nz3BRj8cpzXFDZidM!Qd0{<^v&mwkGqxeM@dqBzn_OS1`> z$+kh!{$=sng!(_8FqJB5@AjpKzlP3NUH^Yy!}*w=qbxr40%W@q6s~ff9sg-g; zSrY!qVN-K*kah-I!$W&*z^mKYbrt%IdyHQRKErZAIiFJAnUkZNZh_99NRFqw`xM|k z*)6HCi7R9c{;hsnVY_p&R{38>%WVGs6*c-M+y?)P`i%C+S9|Yp zk2(_GdHo`Hc1-&wo`H|x`bXq_BR8A zGM;%tz^cNr5FwS7>h5gE+k$D)Y_+dK{5g&CXEMqkf|M_J)m7o~q9{9q+}^~QI&RJu zkFC)EyvxjosER%%K7EyM;iAMH+4}T*d0gmATbvgy%kq@zW>YMy7xX39BYF^JiV1nW z1dJ=ebi^E`2doURHRdRlM;c)qjV;P*)~Jv2QI#QfK7D12pu&S){fX>zo?QyEcfbf-z7x0 z+dEepMtG<2Db*sDXrY=+X3x^N3L4$3VDfb1uDrU;f~FJ5i5B)_6W*hLeAL zxR*b<{|}#cZ;L5dLo5r<5874om%&VJ_JE&zoCnha1Tc|9ppn@N1 zs8oM&t)#Hb71bLDkv)BFpeWf&5v|NA)!&v@2*{EfEusla&os7+7j$osdoB$=D9-A}qW9UJo^znu@43x;-~w zBr}mMZo*qr%6i?Ffz62rtRHz0$C?p{T_z=#W$8TZsfG0UB_t*R!{QH%5XG@lViO+K z3DsI}Oq;)oYz!xOs2Y05xX+4FRk8tD%z4e#DNKwzku1^R3Y+-3ClYS(miex z?P7AiTQ_BjXQewg*w3TGw89G!=k2EsV=uHUrF%AWhh;@Sg)mv0WKw0agbuSSlnm5+ zo(#%>b-_q&_=)3X0*}&U&QJi19PD!e;IuxnWP7x5Lfz$%l$Z@ zrcD2JWlE#`V;*q8{`^bPC=d8ylC~DZfD;Y>?0U-nvYAiS0{4KqXG?IYd%AuwFLk=c zORI&~1`3m>tI(d|5ivnY*9uDFboGn2We>+ZIUI*k4VV+G9~#ZRG5K2t-ZzDWa~`A$ zbMa!`sn-l*$LzMyM}Omg^JTgFN=#*H?1BTL5` z%T051kUK1qT1V9}c2kDon_sV+Rk}IH?)rf7eHg6%@zMGxM19I(fU-3e|XXeZGnL2gNvPH;1F$BN3&k3%craD{Q1q?SSG49wmn ztu3zbKP~B{j>T)9fNflU4Ut?H)S5^x6Zomre||u6eRX#M=?gwJEx6HNH(VIn6+OTe2GaTcO1<&QkK7O6 z{W;saA51=BvrAul@zkk;NP-(cQhv!nsPObJ@#+66rwwGgvI)Pp)NH~Ifr6F#qzT5@ zLzUz@OU7d94nGrZ%5<{o4SX2+jjDM9-I^P4%P*cMBcO{!F4iwv962gFglnqQ z&ukU<$ft~Hk6M`<2=!}ewQ1?8_%vxlEz9XR-F)VWCl{$Biw92dQ38w%+iTaVRsUc& zRtsI~3OAP=-%0#E$^9)W*LeQUUlZ4#@b?p*ck=fdfA4Tl?2q&euh*N!e}e|g zzvjP8U-HWQ4jD3J=&&TI)yvP6^f`Y`m}%iIUf``%C0SthOf@aqBsrf-$oX_9IiF@6 zYkJQ&ta~mx+Rd_q2)gCR$ZBa87A0PF1|?@wased^jy1jG8@6w@Q$!@JNCwY|NfAwC z_@nY+;7xx_yr?kLTd0l@)cAex(ot(wIvF~%quadr+wkO$52D9 z_`HUhX_w7Ni<}lcb}T%$VP^VeGtwi&qsJ0qf5Xg-%VuPRGsiSWThqkc6_!5shKQdc z6ILC|KF8x(K2?>UyXq5jd4UQ}yxd%kzqM6FI=5~6Zbs{E%{OJVT503*Ve|A#LUaKJ zI&ra)7zV4?N^Pj8Yp`U?318v_eWh*=tp{<{5Gtky31Z!?LXenuVx6UPuQl(4jGKF0 zcP96C=iF3x&gkDA+O|FN7q`-r=MqrtV*N-);aB1{o8fd!_S91i{WYy5`;I}RI_dPX z^*!<;d@%4)cu-(Y_8m7Yo~RpdW1IPzZ45JpDnAAV@{iBCI{W69nOJ0zk`O=DVB`FG z6)iI?_t?)~3#~pZ<%}E#MR@yC{k03(*^x#pGIog6;g40^?o)Sor%eu@uZmg&MY|$r zMw=VscX*vSQ}hEJ9LhNu?2rzwuP}pIl_{NyNF+R2uKq=`_J+@u7;NHpCZaw36^Dwy z;voDLO-#NuKSBhD&@P+RCMyn+Nd%7vTQR0lwIU)+ESZ2CN2&hN#XK*AR*9E4G8+V) z@<|Bl*6_uMEyI(zm?+Xp3_(9nQaM7ODUFpks#Y3%F0dzjWwf~<@KNL`5x;(t?Z3|} zZHErbR86Zs@i0mL`?So^RXx#d>7^>PE7kJS zQ;u(S* z*@#Mf_}?u$nt;tOP*ttbyR!x@yNm>|)}Aa=G|Ryq`pLH6A)nlVYWmjcVu2@nOZXv? zXyx0M+sopbX+{myCQjDex1))DgyhP|c1glrTP9yNI zkgdtahzyF)%~DN);%pc36_Y?=u1|O01>!5t62F!#F99AG3PqO_&s;Qs0L#?>YK7<{ zhGFpDdK+P=G1_IHy+XP(4oMK;d|95vBOSKSPqzGcdnxc0)N z6lS@pqexuezspDNv|XNrp@c{RC4&Sl)*NuNNYos{l%~d~=qS?ED{Wt6@XU#YsH~H! zgkJn}jfuajD!poE7I-(6W^jJLG=n5YQ`_^K;^l{a45Jn5p8Qe%M`8cumsHacyoECS z_g%ypj5ei%}q6#eZL~^rnTso4gz#IPPP&un>41_SDOW`e5+~n}v z|7)UV1ba4!d)9B5+&)2g`*=M;(3zO)oAE9r_&J9V+irF(dobQ#UD*=cPd#Yb+vSH$ z69?o*U;{rQYU0OOJ}~kjAYW5cqls|B(Ig*itCXRM=HLM!b8e}#M#2y1`Ck!}kzBP} zB7?vWrsME^u)tb6OS*C3$)B!2Du#=>-4I71t+NlvDcOSY_VK6074`M%pZnWmiLkTO znqLtIN1{a4N}ozwg7xyNGqFWbRnS9is{9EQHlbEv0@LAy+T)>Jf!D&hWxAjcBD3Td3e*$J-JER&B122fTDbmG=>0JG^$cD(-SXp!( zI2)YpjR$L!1xXt)ObRlD`i|erCRt|Ur2mFXLyB8FrvKo!LjQE7vE&!Ufs&#NB*&(j zyTDLIW%L|6dcH=)F_2oyxqW8LBcbv3ydrraPOi&i5Av4}gP8^@h8j zveqft^}*Hj{di37Rs_|;Y6@yx`Y(Oa;uj#NYrkobNo~z)4`GexPRFQ?je5~>lNTP( z!d?2#01G$Y#|UNNuu{!Lkf;sxRBQ3%C@@J|O|D6!de$OuxVYlSL^w9`9P zd2Rk~(p8GRN7K>t{B84akg6!1ueY8GQfzg~52_#tH;>u_+rq=$jMFqDJmT^tB;mGF zCzJ5TS+vB>n~p<+kwg6-(r0DW?W~_Z{TuA|VXE7y%$D8hCpITG@BD)r<>r=RL!{Nm z)18^wmH11VJV_I50UG#(TAII(cy-AOunbM%!B^5m~zeb z6$|;W*^+tqBGRs)lp>r3fT#gh=$;Mj_ zYrk|wzCZucrlT2P*rsC{i#_x7v9(Vnnh5j>#!Q@Cf(B6;rNSbwY9qNSq|?qY_EOG# zUwme_ENK%LJ%OE(PFRp8wTM`NWN>hb`zh&=^N<#NN>>JFb-CmLhx~~T#^gVaZ!q~e zTzq8`MVa~fb|3x~KSXdK=N+2sC}-Y`%^dq0P&Ft2A?yWzCk8~1s?bBYlf}VWfZfop zcsYoCGr275e#XK%2!+NKAXna{wb&a;NR%~RyBbW8@RtmGuiEVdp8%c~if!2wPVhk? zrI()~u?9B62^LWkA6B>@y33e|>}Te`KGm$^ELF4r3sy0(V!&0D47Yiv0#>mGPD0OD z^l~R7&^n{fI_{Ho+;`kMt~_BKFIkgZ$Ho)aafeyQGp&68|7JCJxU1QiT+My5nw#C# zRKWv*piYXG4nhjF>mS_?^1%N-w3lT-hZj5mow>`{HtY%nxA|Ke8O!nPrIE3uRatP>C&d{1hwX+e1CaKi+El=I;?O^6IiP z@~=RT+>}UHyE8sr>}`549e0mI-<2N9hk>^6D1Z+ce&&l-XMT+!u`I{?u*`W{ktkC8 zBsG&(ioCcCkLe#P(*h@UI5MfmLkq3>lhJ?6PS%BK2$q+NLL#@nLc)B>XGSS8ND;3z zll^ef2jr9A!^zaXFaH!UW@NKgL@b)kUj8VGB@p98)twG-6YvZJ-h;0tE`8~p?_+`0 z2Zk}9uD}))kyS}|bEp z4$DRggHugNg5CN%briJDr=o4RUlGv#`qbc=0}GD@-A!(+RD^9J0 z!$k#LmXxP1?1?t_(64W&k`4@yoaq$eRT3Tp_%2OMPF$p4*?YDpj=M@0+!G{wPbczd z5+A+|u3J9IncdDDpO^Svu736hbgv32a3ccWZa$r)1AnofW+y+*;6j-`KyFF6gge14 zu0@8=WBT7G|Ay>zYIF$QUA3!1O#+4Q1p=bB3lliigH!q)cs@cx-JJz8pRiW^60OJE zNFsF43A&OjFm(A|#J-^Ozcm+LX#70P5qso1bHuju@p}qNz zP>c}D511L;=VaZdTBZrFalpTBdwz4YF@t>QIz4bCUcO)AX_5CHB3&dJYgsxs8}nKC z(CyXt%yLH*@h2{k2cMo{9w1gCrf}$h$e`+8hu8_VKbb}YflxnC)w!6yg$~50bxx$* z6x>+xT5KOYeQ@|JDSNU}tYD5LVC_#*_7o{Sl7A$k5Ts}M{+S{_FW(<1-{&_5m+Epc z#$iBiYNgOFMBDHMVkjE~Utzi}xlkUE$x2z=Z?Jby*q@E|=PCPRI1)Hd?83>@WuNV^ zKdthkFIjc~4zW?c{}xX<*6r%1QtVj`u&g>F^h(>|{PbsFY1;(ZW($D8q5 z=U@^zsp~+W-GS}?y3sNYs>6saTfNxyk8E*4k{wSbnW2Y+hpPRtci0eW+pyrF4FzHU zs<&k+0_BJNv7J13MX@;|ibWpl7kTUm!biOg2?uQW*G$m!hrtd|?XmNnVKss+%_KoX9*e z|0JGs{ud;ehoHU(f|?bLoXLckHIiwGbqF~TM0E(*%Auu>bw*v&<5HSl;M?TJev&J@ zkHP2B!D&J;ycn(UdS3hoVHoci8eN$M@h4Wtm45>HF>h(;KUU_rkq67rB}C=GO8C#m zWWE>XL_aO?-~S-jNU~po8`_ot_sz)b9PHn^E!s8i_g~@FpQzB2-}>@}6vK^u(p(74uef znLjNP>V*_P+3}S**GuA+j(;FS03T&KkO-|}g_|u`D}B-T(vUf!zA+=T!yCI9ihmp$ zqeM4y<(Y|=G(=B{XrhbI-UzmvywLt{F}#x(uW%3BbIG1bw{G^OUEfj!gDZ}MmIC?z z)BJu~@&9^$XUsogexF~kQ!Hrym-E}>&M%5~=C}L*dVURkFjX~`k;Jjv*|=VuP}a8;{>waqlyO*^MeJ0mh^+Db16cp%Vfa6M2)+-_C;DLRVn zSyTIrXD&xc6^}|ZMwbaTR8Y*s51rrpsTvNwj@-#*h!~LrT zuq7sJ-TTNI&!6(RCaJ2w?xjCn#^vTeaN_&`-Du}l z0tY5>#%2!(uX6>}jI4WUv-lPKo(CTPtftOyZU&KgI&ZL1e9G&d+k8Ivf1qk!Z|j`3 zna+DUFW)RMqw|uwm!S0}bc1cgv$Ag^j}N2BNt+9#WY%U;(sT~myprnUMK@v$g|8k^ zUVr90(^Dc;B^Ja5dR*=M*dEW?kP!(&j?PdXA(MujB_KZ9J;o{dyMN~MY{hfMwe9A4 zq6)8Hi`-DZmvcE_9ktEsB}PJri@3MB=$15N_Pc%UBM-0f{DZ&2%;0eTTDU%g-?R9e z$e+BIzq#&p1;17N2?Uk(5v6I0Y51@*9_fK;7{*lCap(Praf>m;Vqap}#Kk^c{XDFY z;8}>XZ>nVz$Jsn8^DautGpWFTb17D_)cKf5J3iFJkISitL%>Ov}z*W2*$n4hS~ zHe8D6QLaV#13&3H^^d9k3%04%Z5fPU<4WxAEJ;#SAh5N)$3Rr(TbLQREb%9K|K3!3 zg1?5$(kA_Gl2n>4FX`J5-GwK!OeWWN^AwlgiN0SzJx}ixt?ph-RA9SZYjLM&SD+>G zCY(q=e(L`r?`^=Ns;>S288UkOZV^$rFN7!lXLjDZ;&b8X8%i0@?rNkP0 z0maMT6ICuuwCtVu=Ui+?t|y}+Q~75_H@Vdh0^sTwSZ@KvR8UW%d2ICgHzyPoTaf5C zSbtrBMDO2-DbT;sl`jXP?Ze3+*uiMT-K?5uFdfAo0eJli+MP`t9jVF=AXO^1Mb1;Y6wUzlmlV#{wD9@-ldQ7YRND5EctEn zP(4$5f|WL4D#5O1OdpSZWuh>LrpZlHXw@J?f!&)gaEWK|Q5hMnf1pq&KyYQ`NMct@XWNVVMb@URV0!uVboujp%-?lA6nZi-#t5+3SKfaid!Ros;>D2}y zV^9`(#h%>7B7eWYFS=Re|ATAVKF+c>?5r@!3?!zHgnhV9dl5>FXNpq`5>`!8SL(gb>|p$f z9R_}=_!$KvYk@>m^@4TfZ=QnYDU}`b81#O5iu13vHc$2lLJFlT^H8e8cvx^>(%D%W zK-vKZNb6eV71QZ!Yntk7WA1uQ;HNTEMhumoDvZN6-jsJ_)ibi-$2voq%*iw9dX<;I z+ySw`ao$i`=Lb|jb|f;NtmmBv6U|)udZ+Pp?7DyFc#@p0A6(RRJXP=;7ZLv}Fz8zc zx12SF^nmgW?`hPHY+YU*XweV(cILk<=+|2GR%^LN;WbxXbCXuOF8(ukk0$zJQ! zWKUfC?`$&3*;+sqJ5RwG{7yF6FMicSlesTUHq3wROE%14S%VsvAh1gP^Yu~_cdhsW zvRBTd4>?|(!U$=)^u=8HxbVd_v`AC>i`(VnycbuCd;_hqEUv6KdI5q6C#}f(!}zY% z?s?hiyy$dZbD~d=C0ol$Sye=YYek_Kxbob+p!_ua>BM*)E0}_Bf91pYiHO>lf?4sW z3nZggZ{Yg9u zQ4~oi%QWFjKM1dz|6mrXBX&Qy-IjakGq-gTYH59Iq;kz4+$Xi*Jrzd~@{T%S8G0)+bq`;e+*8DYjSPWv#32 zp3Js~k4A;mv7~liou@E8Zk}qd&fCt00oaT3=8hbCUX*+3d_vocXp%J3l$J5_M|*SC zx2PYa?ihg9!W#Qnjei@Mv~AtD18IjEmhf8tdie^OD=o*BF#k59lzUAf5VY4sr%+gG z15qgz5rSwC2F0HimjrxjfN{mG12h@bE7nhb^JKhy)iuH=E7xhlFy&D=1!=|g-mnXK zNqce!2BAp~oQF?$z^!;^hKp^W^zX?*yj5hy#6gV887oH5(Zj-;O`jPm*rS>SbF5!v za9C1tBiZ;bKIcp@)NQ7#m=s~nAi{*GINO;FbF|++CtBu8k#$U{x=r!q*UxmG7!%Ix zm>7$N;{U99u?&m4b+ol(R(Qj$$Q2!nLF4=URFN`n*O+{W^?8>x)VFCg9iYDR7$GW<6!(%sxPuiPuJyfNJ{ez&4*6-hT^Vt4^LZNB(e$-iB?3z?n~Ir$SWVoN z-_P@QLcoc52joPAHo01>Bs=+5qeL1m$U>@bjpv*0e~|)7A>umB{A$)J!T~U8@fD+^ zn_i(DMb_Z=8rb(#s+Rw)bKhNFwD`IM);ti^#cq0n0EZ?3F(MQVXh zY+MS>LI>o&Z>JpAHRW-BT8s8gaD-|+_zV8rn7ct%IM&E;#|qbdjl7pN^75PP zHS!fZeO1rt3rK(BMxFj)Sqp7cU9JBWy_!`iS@#-4t&1J`^t`e@YUh^Nq<_P2Igxi| zzp(8a1Q;2^j@bK1Z&^TF*Rv9#oPkjow-JxM*T}x;Jw@NoZ9_o{p0}MP^9tYorK8M> zoG+q-uU~P#QBlsf=z4V_u71cn2_Wq>_E;4RZT+*8K*0VPY97%^9xw!qN+4p?Z#hqJ zcx^$aXB2w`J~MdPpv8kr-Qk}*8BtF?CpVi$c++~z74N`ai++*8mqpPjX`3(LOXZY7 zp*+uE!B>lIYt%<09dZK2umE`3F-wAX-z|C68-yBL>fr>AW;|_iuhO!8v!vv1wx#{s)N&AIf_2p*-8a_EZ%~S)cL~H^B3h(3_<|ZVRC6c%3ZdAYp`DU3nfVIagO3~Y zn~fj=4~8ovPrG?<1LFt{6VV`(>Lu(owfULqZ3PF-d$)diibuI^E465E!j>h~ZrnnR-Ug0idy7;~WWR1?R!WsvH6MkXS zU)6MlV7PMAC8C%sMl|TcD(hM{4KQ$X&=|KWBVHR%YXPes8d7#O2=`rkL_jzKgpaza zI7o}uq1a;SXqf2blwNpf;!IcI{O-)p9g)z>+8u#WtW?^p*CuAY^wO`&-ZB=rSgGQE z7O!;-EPyVO*SlB8FM59Cv)G)CRZ}lIVm@hi)S;_Q@xjHG7h+}#SNYD|bVyi73 z`|!`u*6}BytyAbUNwM5j07RyHw%_a_TkOd-Zq*3BWpacd$_LGK2b4luKUYwR%%%J; z|GsD)L%9eb#o7Lz380(@CcqxtHf<`}`Ra`DUZ(x7V4(t$1eqPB_pbk`v$XUSTfTZ9 zAywiCwzb>{IIqJyi}@jA@gz}G(#XfltGWhK+S*8oDvWw zRn^jqSVYl{XC(K#O1TQWdN8K0>R^jBS2Uw0$K@as;|(;>e`UFD#OSX=a|I3?{g^K2 z1Depky||Rs@!&@Zd`N<^uOI+q@Vvljby%0Z)}pCNLdI@H{>6ef zr^V3vf(nwx?!0>1`(c{KkG`Q{E4Vb!!(HP}?bo;HLwnp%eIg|xXzdp6l^@87z*!=( z9H-|1)u^aL{1zj5#XRDYdJ1H@;nt{|R(DJWQ8?$<6 z^T#zR#`0>W$Bcf^%V&m8wFSNqI@J>FjZ8Q7WAyhaJE!G#P6L{6im+-&M8_o_4>rPN z6erUh>w-%YZ8%u{{z*IC(;xu(`E5JXqw@%={IsGqO){Eh7Ys?9JCBS$*Fo5FCL767!m;~A}!`K%x=u zv7;_^tN(s(`FC9=8-D+Kk+aXMaxnN$?sSlGptrKhfi?p~fx@HwuDUb*IX}J-or`fn zLII?`bh#sbz4|)jZHNv0GAi!y`RfA+@2^<19_73QJbkZKyIzjUuUJ<A<$vd4E3|l^eB3j{3j2LmMjs3=krbIi5&~(eP0{~* zOnmGi13;q-lefD8cWK+`M|&SZPiWArMqUAl8tp{yy)KCgn%+<=`%Zy!%y0Z?XeJX% z*~v$JGt-g1J6yfc>j#??!$?P~yfgDshY0Sghh^&Osr_-*aNB2gsxf(l_L;rGn3id~ z$zJ`<-O7EoTHI%MbhytBE61!Gz=?L^R#hLP&WOogfMZCfEkVuy5dyxg`o^L~i;SPm zW5LV%*{%F7F@Cg})0z3A{K)#zM!v&5^N(Ii&?NAS;-3+$0RSNg(PlYG>-s5hbfnCV z^Xh|=hsrzaL6t>ghoI_fSel_iCU^G{kbP&hq((T52b>U$e;KvBy=o)3s});{;QCufMIyaW-86SvazH zMhiXm=G$(Lj~N4eZv-w~C%fU_6KA){*#lk8}yRbf080UZ_JReV|o=j8Doo%2Z!)f z_KAhryQ5oG~U(SgOT+6)p zgqthfS#=~x+24e7olze-uT*-gBv;N;-@2c@G`DH!*%VSS0#Oq zb6(RFE+0Poa+WHE@;m~Zm=b{LL2<=nBa~1Og+E{l)>(_@!{31cg%Cq|XN5j`<3=VG zu3u0xxm*hVfL`Jj%6kX@*7ENc_P-WBZM^YE0?2somr?oOGDMwP+$~UpZpfU2*hJ~)#i*=0sjYn zCkT={Gw+}-Pe%^o4C=27{zrM)Umd|xS(>8ASuKVzIVVw#W<4x#pue+T~#_hvs|0vb-Q~1&m zIIrg;a!V-BteEjrX?L<_JLw^7@rsJQmugPxF9oiAlmZv-!tb?HEyeNRZ1t3^w;~dA z3W`}?4u*pWU6>m95_|O0;!7RsaHXzfaV3Y4@ia3%uvsI&6AA0}Wxvfk#ks|W0( zo*H&)yiJ&6#ERjAY%{Am0RZ>0^{}nEi>xbt1^#cQ;Q#Q&x*or+DD5cOK}_@Vc! zG(i9oJwwI;o;{+5;n}6*^5Gk4he= z&u}iSmH>To+fw$>9aBaXwg`s2*lni{9w_|^x#`2N)uqTO_+b&XMU+hKwYh3rjOURDK5GusWtrA6(g2bKIla^>$|z?y2TNN4@F zp1HMqKg>+@gC};h_bjWgdYSkFerg}=LpJhQ4G^(2n?%Z#5%c%rIo2na2+!CJx>WYP zj`4p>$N5ufb|EhX9KG~HGoL^SMOFr-dnrd+n^98h&6jR9a={FGRa{V#dhfqPI(%80 zDFG3xOgstaZi8iMHZH12G9tv>fDjY779~SluTWds(u+zT6MdD^Gv2x|F^<$4WX#0)aJZz{HSUa5+~`!t~8d&yVY^5mFvwZA*r{u_!vqy62T+JA&#j3pHC z!B1&__oui2L5|{f`ycG7{oS9V{pVzMwErQy{SV6i(W(8vLz=Gb-w=ws|HbzI%P47o z)Cb+#{|v*v*vi!lShD?3OKR2Ss{JdPA7E^ss|z}&z>v8;c7d#HY6^(2t4x6h%ekT* z-%SNd)8TvQj<0k~hiNh$rpk0c)=FE7GQ7v>po0I1K-CWjiTLg)gSIdrsXL;~ZVCSG zUzi;NcVt>WeQC0HwD-Q6AWsKa!|?B<DdvLwk)l`t-)P zu;S!|YICreeg7Yw{loF3=sj}xfeW_r{ zAcL!MaScAWxbVR_Z%Bm?E-rja;9xZIuAQ86Lta-txIh|= zrM~&@z+fb$#ygqmTXABr>%VY8GWbDawyE{eR!Or0Wr}5F02If0fFo&OgxHMIyOV~n zYB7W*{Jewv)kxstn@)p{g!~V5`IK-69{(e@RCqWAuHZk<2 z!E`b#nPUw(B^h#DQNHD&w(Ao&hPQUTF&tA}oObTSy(k&#To#__oLE(w^31C7w^MWp ztVacAS=0We3NHg&`4cNX_F@VD(2Z{y_0PGvD1$G1KEq3GJHX~g*<`DHJ1u~F=NUXE>}$gX?LYVw$I(=4r_~9;)e6k{yqI1QotF|Kvgpxap{Lr#c){ zv`e8m&FyUjd=U?SsbgBHZi_6jX8d_!3*G~aMFLTLYGI3?EZ?7V6xtFO(maMe1PEVdGqAjdmU-6*@iAlr=WiDPli)qGWuf5bqi_&HOHJ=xLa zK}~1_P0zB-?o11>W>I1&7*b$AN2}cU39s|*_lDn*)>)WtWSf)Q;ji?!<5nMRt%P{+ zW>@)li5GDRUby$*ob3JKPOfqm?TZ3#8X;?-vi!gZwi-KVq*C9|;2d>0^~STiDc|U)p13lR?GQbFU>EJrk!+fJSKzoXGkKvBi#1`bf_q4nKoaP$ zfluTGlr|^L=Ug^ewPy1ym>An6^h$jjgi14Ap;)^RG!3J65paBHj+1Tv4mgZt(>Xgg zU82Vr4`NVKDo|%}9262nN<@Lotccr;rFpi=$1qO=eI53g{IF903)!rmgX~QIDFeRv*h6zMMIGq%IsILafPi*UAZ0oxs z$=QUrcwe9>_sX`RbV!a6J5r|tTcmI;^!})t_HZunu8)n=%0X?tTS0x>i>;e)R#9mb zCgZBn6nQVyM^+}^Ci*>rehU|Pf2dr?cT!m%5Vol5MvQ;nHGOz-v32{auZX!%_>%Tn z7k#`}^vlbMc!<{CXtO-}!d+bOwFRFv3e&7p$4Qgpk)d`IlBCc;3Ne))-@-|=WVnPu z$aDt!8+)-ifKa`rX(Y1B1>GZQyh>`>9hVGOfi!fMMEV@K_#VyPf9H2mAF2i^lyK&O z7t^fin6gna-Y6xxTS|fj)dOP#g@JPG)1Dlto`kNS!sh$R+6cJIQ#6UhB~$~!ET|)j zhIfrgiehWz8k==H<1?H%5v&JTzgjm6<)=5iiD!)!pX-q&>XG1opvP5`T^fuaZes2x zWV^Ww7wFJeJM9RXz(7)$UuG1h1Mg8!WaIlleCWgz!BNR4B{HQm(ll(9+&(K z9#4pwdfut|2A)uhfCzxddMa=Hf8I}uN~LQUm`V_w4+&g}^+6*I$I5e5juK>=ql1rp zlziYw@_~GX_l9FKeA=$}hQ&4&Y6DpLxcV~58OXk$h!JtHCI>kD3}*phqBJ57n5oc2|8}A>MhR){&TJ0t4~Qg zi>>}Tdm`CD04KZP16cza^cnkLQlvUT7vJ=hjnCCnPvsTOoY zS1hXh{PgI2m|dEgZ1(~BO4yxy0(~{Jj5MRut} zrt6w$S$%XqW|AXO|FPf&+&AY|31h0 zqRX~AMH38K{_7gY)d{JgB^K5zrOYrwqtAoaG?d9-;Ke!8_yfgIHGRxtCwho2_m6b2 zF>_(BRq01gQuvs&qyuFy*V2L76jv-#ToC(DLC(PTRSy9y+gGoqiy1bVUx1bM0G&l2P&KSoC zF~QE@clq-!+>%&8CiCNj!xi|VF@37JY^wFm$zrApTv%-F!-t2d%8vm?u%Q-3g2U06 zB6-a{h^Sv!bt0DHjeLcLTR@Mu$>#wyKzpp!Uw&66W~ZnA#KUOdJI}1nxBpvi`_*=I z5+R;5UGQ=RXgzK`pGh&zr_%V#FjwzTzjJaEH?)qG?eyh_i`hX|_BxXSOv=!;3FGfDeeWe@tpulp5 z)MIr6-ItR_1#vN3hmPqBgq)Z-fDu}_b>a*mboxrt%CWVBE!1B}4H(>{2CVP%Z{UH+ zE}wrRs-LeWA5c*7gzCo^T*u9x@Zx24-teWee&M^ngwxozi6LowjwSxB6GQ2I<>79I z&_vFmRao+`k=3NcEvk$~>k=om9l=kG9q`ic@ID-Ce1e8#Q}Umo58oC8czy<2#3Glm zN1bm*OuR>e1Wa=`rAdUoKq}`g@03%Vdits}(-9T7ua_}Qj#I&O-_o>Ysf4;8gvdVI zt&UjDys0)&nElo|4obP|p^FR_emTFT`6jzNpRro(!&REf&13ZAu(@A7(h5JsOVRmT zjrsNT0cwy=lq5uwxVlgHZdI16*dxhHHkh-sOnU<}%-T3GZ#wQ0ud z=1e%4>Q26C=C@sVVATHSM5{w@#{P1C=-rzT;HI+o?J}65gF;7ErPQ-mNx`hQzwuUF z(bJd(X_4LLWJNS&r!rj;Nn;kZr0i#Xnp$t>wWQR7Zk6n6FdfuopUB!{E4u2v`THnx zw6L0f{({j@7+cWvrNI!aBX!SW_rD3ftuc33p0a%I@&&7dudx!YEj(=Gi_8v+E6SlqSN3bgK}<3rd%*?5~eeLO8HMBUCbh z5$!V#$&CNwW6c8hEEylaz(EeQ?ntmFDh>E>vMHBrjDmU8-)}hOq~8J*2IoB^HO|!Z zS2G+l*Xg_%1;AXa!<*%8I#nV~@NM3|S1Q72;SsO+A@)<`$u1hC*Ek4df_01{qB9)+ zr|d83WZn2{s!X?CY!nh@6;V-<=`;K?-T|y$&Fx8yyF(A$4aSb-ZAde6X0Gr!f> z5Ln@RJuo6V*Z`1#IVZoJRMA!K(N%5HRjp08)6@RrO-~v%iga3^6MK_a(+v_hZ74*x zM|u^h@tT3AZbh5Cpg)-p%K8{>Kru4l8my5KQE0$8hUae8eoxEr99xuD%y zCBD^Lo8}x*0#xL<7uDu?oS+9p@{NL{;xD+NIT;c&BNv!yd$a`SIFEJb{Vb$2TZyI8 z$xIch9bx9T`1~GkEv-JFz*DIQ#(xDK1%OOb|A-a4o-t zb}sxPU$C{AbJE}{2gMIwa1h^QrF@=SO51MU7SFB*Y%{-Az%~kM^RjuX(;UB6p>2S* zljAQX$J62kqR}?(DKC#IY|XV31>e#FZudS_@-4beK$s4|HsJA&6Of|f44IWL9aj1w zdyNKg+&LeM#p@)XxlPw~I7;+~UxDU>joT%5HEEDbSk1K@k0l1U23;JviEH}Z4Avjp zVzvO=o7RZL-le@B|L}j^Ub1ie|E9gX(q1q;&t-i5m5R&wx~N|2i3FJKRxSRpr&+eVB>&esY+t?>x*Z5~^(Vsm5Cx!D>$7 z!espiKwkWc#0yV_Y%gAC^p_n-NbN*X9quJ-ZN8gO2fREvJpp+IhACRf>=SGP83H~S zY!I2Oy(!CBmCotp!^Q~BbxvTpUa?|gpRBimbg{qmotX_up`iXoy>3pbH~LKUw+Frm zE>}A0htl$G@NJ5N*GU$;l=@L~TXR@4Nv~3K^m(oO)K19cSUCD%eTT=|C~J|key16J zVfUt250Qvjo@{%5fu5s@B8NLKcuIh8`bC%4RrX11!mn}dSpKP0;25i8*7+yuGo1+{ zaXTOEn^xPF&-eVWb39M~c8|}i^a0WNbrRt~#qa6ITBk5NO~Z)!)>T&5xFF+s(W)7t z5h5U$?TSW(H%AoNSIOb`sdO$wM;r}STaPVzG9G$9gA1tF5R!Bx*QjEGGp426;awHw z3jzt$5Q7*|rIoukIZNjO3$>kURgSW<7QPS-zF?Jf$`m~D5~8@?LID7Gp6h9~0ap8J zyy1K06paNfgAHAR|*kLRN8SR#ANUg!uCDR^^xfij=egzyi0MayckcE19;J(n!|g z(GoSo8y+GnLU5OgiD49^8>uQVhG;DOd$8JuKjLuQ$Qecw8HK1(r24h~&6LSO`$bT3 zm1B+aKJ0&tD%<9+(b~Oeq_%M-L-7p^#l}@#5^0)s@~E+gOoZu4V)f0PT8jiIr)@w z+XzW%O!NDcH4#Q{W{psP5R&SU)HbRpOmw z1C1hbsXfGWWRha{<&k#J}ZbkD=(;LTK3l7T`ddiv9x&Hcq^L%Ckj>M= z`v0pk@0w7J=C9FnxHgYTEpt+2RgR3?vI@5_pglET$$NoJ}tV2fX| z7}u|LZ4cqMhq90Wfbp8#vChWtNP`QR$A!Ag5fl$-s>+}sYL_w4C@oq3;_oPuBXEWB zptM^>jkJ|-hIa7TYt4C$_M73FW36p&i{rVKldzNsGX6z1N1xGiG*F^QW?&`>xnqk2U576uu@aC{F4uhFtk(_AlqA6~~_u`b_1>1_Kn z#|(VV#L)ez-e!j95efXzQ#ji`)|^XdyE1Q1@gP zo&`4w+ToC;I9x_{$Cc`{O{dhczx0WkTgmvu4hF#^G%)TteWicH;&A|gVFu7MFl2h* z2uI|@lHAv_^vZL)=tX3hNl}LBl-T{U_Cz0+!mC(KOD{k7bA&+j7%J~*L=x*d8LlUz zu16aG!a7hB*~n$&QZ?GD6;4RvQs^ks;e!-cJU}B4kgCW~#V`tT2pej>bzex_JF^yH*DOa_VTC-JA{eWbVhIlg3G zd`XT4J)vHO1DDU?V9@&B89G)k`@)OFS&fgi-r;I=tfAJy|BnoByNd&M%Ob*7 zQD}nT-v0z9enTxZ#=~k}F)>%~W-^q2?=FWo{DgelF6$FNp5zA`P~`V~PEgBL5PMM2 zGr^SQ3Ka_1app&j`t&+3L{8`xMa)W&t=7JKCXUyFk%7Ew{ed5b_`+N3M!gGjrA!)o zVp&)9wqY*bu0pq2j@k;WCC^J2xIh;y(%%q}hc~{W&`f`2cQJB%+$&zTzIFlY zT|;z}bS}%#xq<4&^bVqq<EZVFtlv3|?14xKtb@C8$iDdLH5eOF4tfQ86WaxAi* z>i>?u!u3HgkGTRP&ZS8 z=hZ}{iJiHPQ}_tU(&Spf8CQBy(F`Q|=$UGfwKqxg>m4Sy(v;q7Oyf_Yly5r|IHL3# z)s4>FnuzQ>&c;K$Jdy0g<97W5yk0gZUjKqB+OWYlQTI$!a6k6GibU`)Dw6hRO zz^z5w;xphI*2}vUJ0d-~k0yAQZ_%-d)k@D6RUvQqYrMr?j2lbTcd4jTw@Pj_BJXd! zMv9`wEbI@PMCgc`lC0?hLw)LNO%ROBJ^LCgA^u|o^V%KE6bjZ?;!jInm|gwHvIs`T z<}=w9Us_p4x7g4=sJ1L8-YyCjD3tc`DpxXuD(t_sApY00TqH zw@ZULf)}n;9mg0M*p#Zjmv5I+I?ybrm8#YOUQhTa$kowwg93EeH$)nN!{#5(6~oH6 zOaC~qV%zsrYL+({LbVQ&YYaQ?R_DXW33Xm}3MsYtxmY*0i24Fj>Rb5*&1rX^PC*xj zA|kdpLl29B!f_%}#~V}*^?b3~|7Pc)E}uIGL^*Aa`%#mYu#g||7r99MTa-??T}+U{ z%P<9H@6O71|E`@k1%{SR?hpxDm6TAL>n4{s za=)}cpuklUFYh+uNwCI!>O%D95Lt+NUV_vjHfc&=ls*;ww{E;r@vhYGpHObUpIuxv zEc6^kp9MgQgE#BOvTJ`O_;>(;_V0mzMcLS=*{o9a6FkS3=Ft= z5b>{k6=#$D(b1AI%B_I+dR0)#zDgIB5}nEMMEe>^#vDi`EFlC4ZeN}U(dSuJ5Yciu zzE43C$B5cgt~(a&W-6x|Q z3n!&4@cy4_iQ$UoFPR_Mmi+u?RsUd?NjaTWNRBS{@~flx;cS^Q1iV{#Q>TQi!j#_I&PkmC!U& zu#EEag`d|z=-ccF%r6nJ@TN*u)!EPo71Es{r-Y#QKI4qetB|>NMll}V(TU>h-&~(w)Mxh}daBRe-{@MOpF{urFV?5mXV<5q zS&%Uu`T&&pw02afeMOz|@VDuIZI}^<#^`p@wW6;)e_VB~>|L~xI`A)hUu_X$%EsAb zp{qFigr<>)tTgC?Tn7T4mf#hvl%vjV=u@XU$VeihaI-!>{379iTD8VnlcWn^L)`?i zQ6v-yPv1*QIos$D^~*Z{0i<{3m2Eq%7rroO7KwCPr2w}+F@!$+1xzF=i>@~do{5LyW`rOn9FB3-dg*2Ix{FI-HHWUm=Fq(8+@0W)$%dtr6&~b7?}F@opcP;% z(THjY6Q`N!_ZtK~4~!PRDf%{Wwe+jarU^C%9ECf#BOPcdzc{u=)3z#SYKDj36FC7- z-D?Y?X|{`QS3C%a%zt-%I#@x0+{if6#Gs}p2lmGlY|8^N++V(E9oP`+qs;agkB_J9 z%mwMwB~`LM?(X&33nSM#>ZARQ%S4{I8FB-qOTQihFzg+pe0!E&V&1R#!0T2FG45A< z;18$^arL9A&tj*w;yVp-tqTv;5UsHdoaJ+N7%sJcrHjc{7FolWbrNGrR;^%P+FV~^ z6nVYjr7U|WHq8PjoMVM8@a0v>4de9wzh%|>>X(aRgpiTLV9c2kGwNs%K=kTaqJ8d; zH@PcL!KCR}dWAW8RA^6}WO+M^th}R2d=$l?nE%atM}~3+%71{X`kayy>ql%kNKG*i{{56t#z9qhL|5MoztC#TaA9tRgFP z#5NhiiqsrC;sPD%OW6mG3SL|w7YXm?_>fG*W9#_MDCbrGU<)B2gjzhcf0qagdLR5W zKRoM;A}*Ze@2v#c&-92gt~(2yuO(o&E!6Y@YS`9SL=v}1iv5D;6h+|va!y)J?r29%?gRn$ zKPcKolC1nTNxYF7`Bj$g0F5w-?Xt9ilV)kgPddrESYOQPV~mw!Dr%2#f@F$Vktqxi zf0|j?N~S>X#?Im}1#d3y)A-0rYvF@wZpz4(H>amAMzm1K{~;F#gKB2=rj_#@rFn z`!cOBU)kO5*&^y zcD4Z?7o5<`(vm6$b=Ip4)w!*r&iNV7g;JcDeL{0waQOLK#Nax&75pJP1pFHyFnuwu zEp??-Hw|JXwNkRC!vWgjt6MRG>*8MZ7Auf&fWEA=f8~H=&zjiEX^I%XQaME;wW~v6 zKev^I4S;3n2H|U-o+h!dd(}=+^{Abq*38-|9#t!1VBhSTIN2Q-Y0R~vW1|3(=N^+- z2!Mc#JfX=hLQytIN{Aij*2DMl0@g?g_Vo3PkK@vWo*ZdtI#PAii(k_nC599oYC*4O zaw5#$Eel#C4rwKxv<%wpYQ&fI)fldaEdF|F!Ay>H7JrgQI^UUP!$7RGTh@*5tJ!}> zc{5AKC1zopwO=j=+k73D8D(ldx|&*ISSehOUcW$DFrPSyXxPAbpr^>SW(bERdM`)EuOJW)*YzYv*uY=mu|n z9xrV%2AqtwkO$O=%Vk7WeZU#3;6u(>+NdMch-`L7U+dd0wQdimp!WnRg|~=>nq_-D zQKI#^-Q_?rpic0%e-%e~BTt+yCL1$G$fnuW!=^c1ZJIOQP@86LUWSaj+PvZVV}yLf zm%FXt+e(gr|6BrYpYXeJ6k9yH*cz&zvl-|0o@(P?GZ_rW75m>9V?#RgfHTEcSpadZ zEFB2&T*Z-FT0;}?YCye~5h!f1W?p5=PEa-j4VZRpvtUXjMudb%nC7^E7 zR3i>(LwHFB%9CqTQtKkHgwwR$W&yS{S$-1U9g5}$~W)hkdOvYZgn zo@kn_vZucC!*6`<>>xmFrR~@vJGDx0)hb5rIa}m)X@H(vWKOb0+D~+C5&Hj}-G4KB zYAwoibiZizY#~j=#jmuEbSMWZtCmehspq^A0qJ*1~iv~AD=Wp(qIs?vbJDHuO-sJVl zjfp8G1H9^7jUbMg$wu(5Ddt&YepP5^gEuUFgSXIrEk#xOAD2ChjjNc8-n{!qQoP?e6fnLTRm!|aE%ZR6}36(BFa=@5mYp~ zli6|b?-NO>nf?p)aiYBrl^`kMGz~lz>FDf07Bdl#wk9dk_gTZ)9!#LDcAkF~Ix7+p%hW^;}`r#3HB-y5wz#^?_%M&&6nD!EB< z>XlrmXQ#|Y=wF?4A%rz;05p#P;a~UyJyEvJ2yQGE!}4@Nn^=y(I3~R}B93cfDk#lL z_H~BzwW>^Z^#uRpNKnEdhnrv@pun=wp*i!2vzu!6EpmB_lz`qapG~7^(kFXO|29gn zrO3)^7SX{Q5&MRUDS`yJEmTh!c^C0Ta-!mvz74vo=-d~S(7H_vt$AI9)*1B5HYK#? zA+!=dfOe#h6>&Z9sBNNGgcG$2q4g~8`nj8pxiUH>!pIGx_4=N`lvJFNE#l%RF+?Ao z!`a_@oVJm@Z6nS){`J;oe$v^36bHuaUr&WL@NZjD$(+(Z(lIiGtvldAD6)coQ7a1a z4jy1EEk)MX^c5bqO5v4|M}ZphlZPchTYL$d=EdsaQvHl1{Srw5uy6oA(nxh69=>D_}eDto+HwiSU`#NmEPTRTk)>=Jrn&$yy5?5 zmUMkzdUs!Ko&1QLKJfY~7*82P&(+ahaZGT}vOVa)mG@qrl&(pDYeL0iq=`PUi@&uM zlKw8)vOyQyVPqw$9=ZXeqJ=Uf5|=gemm(rJ)cB7(JB2zsXA5v1rb~GkF|o*6 zEq<5N)5Fz<4{e>qe@mYhEvrV87KQV|^Mh#ND`O%a?79zv? ztMJ*EsBiu{74pp+J|++V6><{!Tm_x9M$Vr=6Ik+;jyc)*5{WvFqKWg5G)nWBuH#X( zp`6cgOckX_i}^D-*vs*I-cHWjgt7CfSacGFE@e0R7k0?rMp-iu1LShlF_Q>qhmYhQ zR43xba#RhI)*64@F)<}M;(B!JH}HU3$UCC*k462KWN?B?D1TBT59P@9s7FLM^3sc}cxeS3wBm<9ZiSFC?OuAaZ{F19EB*CBawGoX1hx_a)=MO7#lcea`QDgg5ylqqwlG=^g&?eWJO*?K>Q}TG9*e z9_hCy)1QZ*o6Q!_lj5;w-4t|h@Vr9spG`cQR;9i*c4sn;t(na z+oWA6vEfR8u<{FL8Oh^UR7ameTI3L_-oh(Hrr^|V&7=_Wo!!W2u>_N1)P>Ht(5sws z5%Bkv6LO1|fD7qz=z?sG5fIc#-v#F6xIzp-EHz9d1C+haz+U82&zgtdsNO3DCBdFUB31GcG>vt#RT#S>kXQpXu67W*Y$>~e$;1O{eTKPP1h$L|1UCMTXMrn{8O z<#>=BSMzTz|9;57MBB?J<RlG$+lrX4_Wh(nV4&12B2pL@zBznv$VFM3OWl8v=SQ6ZhzS#&(UlmT*E&oCasy7#z#q2@!CnBZztG_fRZ-7Z-f{^?z+Nlew#skkS;s(+`H+ZsqA4Yx zBJ2Aw1xnB{XelZ0&V}RjXL86eUMiZ~DPIS^fW0|QRL4XpDJ!?KSe9uqN`eDyw=?Gk z^C5M{jEG&G_iZS$4ypG+nZjA2^v|@Dp8g|#+G+Zuw^TCxyStPOzmpo8$|N6E4s6(^ zw5ywm;}J&$iEgq*zCT^cYtYa7H+RS@$S6*8wg)L?N-MU?Pz*z5yQvC!FKeb>C?CHyalT zvxc}~zAqlN3PNN4Sb8ElH*Ee`S}Cfq36wXdHB?Q&wAXZHw@al;kY3}#a%yHhj|`>T zJH7P7Wc!s$`ziaNYABYOe#$fw^{M z0|fb9sPZc!zozR9f7sZQRe;+<*30M&cudZyvw80Qe)62S1tp$)?;R{_*ZY+l|@oIjjw}jtmXXAg<6v#=6)5*LQ zd3uB5R)Vq4VceePdjoQ(+3qHO;!Ro1W-_7UX zcX|tcr>TffNJhn}zV-j;z7{A#y^l8U$1d3t0atZnr(BG2xUw|!<0Vj zattsw30y};DP=0)t1i<9%7ox=WQ#-vF2XYn4IRe-RWlYMx3NhQH+i^h4&S4%%VA*C zm$@vA_~MbM-I6DcCDzfs5+Aw;iZ781mW|MmAs+-2J6P$Bi;b1^@&nQBw~`_Ho&L6d z$Ef@4F=KOr{g*vv8q6ZX%2ev%5F9a)&R3%)t^7Vk1$Hx3U~eXe%MrP1%&qiJebs)# z9xiWorvuv=m@fF9$P)tBI`hO?mC$~)Gd%<`YRbI9@T@G$4YREX&lLO#{33jCvm|kB-RdsJUb?)>G>54 ze$pf%pdu$_lE$)j3Lsp0Zwl-UTFIR^+;bBtE*M zUS}vW?n@JIpFkz>E`3@mLlKIsiTeGNnxQzqA=HRTe?4tN6GR}yVwIO!q=$%$Z$)B3 z9siRvoIW2gBC;q%Bg6SCOU0%UeCf2Jd`C{bdPR{Wi52BuwW7#r)JS*39xAn(&dA_W?HbosnAG(DtFutaUzlrT#G-Qm%$fPzB zs?A<%F<_zqHX3jVZUZ+g{J{40=3?f8k-@xgPa& zkvpqSjmIf%=Ik^Md{df5BR!=hI(1-+F{Krj26IYV?UWXoO5nSIxE-8RTx`A2pr;(H zV4O`n4mtldk5(2sfot35xs1{~SXR$by2MG)kDiyph{n;z_Itx4m_F+il-yeM#z@rY zA_wP)73pPbh@@{oVd2|JuyEo=dPDz65v-J`ivQsZ4yDnRiAcrNuzo|BayE{^z@oLu z{!y(=K$LX*geNu$uGH@I)!mF6MJ~` z;wkZEi0OBI`pfidrqJ}(%aeH&4Ybob+V@iBLEGgRuFiiNaBv)>p~t%K&(gB)wGGkh zjR8^Ua^UQo33l3zrymCmD8gufymYZOst3HfJzkJXRSnKi!KGBq6`BnbHQ}QShW|Sf=UyKI{?RkK-k%lrk>i5L>W!IHtvD`@Dt9QTCs2fa!!T}GyZ)du zvTt`Pn|$pk-zil-9S`w0A9gQaa$FJ*(KX9D^>m_B7>zy0q}1^ctv|*RX6o1nE)@^) z&lu?DSYJ51WR$0(c?%P}y!YZ}K-z7s9m94&m{!V@+A4Gwei=us_V zf!Bw~HDSRes#9LA`Yx-qv8I_;ibiCkW(GZnJXTuyq&V`Nw4)3NM1RFpBe+gtC~Q?m zz4lu5lsu1N+xpV&3F<1$G?GDGuScAvccwg|PopRDGKAr8Wk!?G1B@*Ipwy$3kAFI|=ZxY#m15Me@EC!svC*Y8j~tJLZklOEd1XuK)DpC-O$9Rv4jL z;U|kaTH(yCpIR^0-OjC0|LLji*DTks$(Gj$Chck{jeY*^_5UOF_iu}irP_Q7c8F9b zgRdc_VO}nzv$sSGD@9>(FWpMi;w5Rub;fIf*tHa_ZwV0<&}TRP!p zz;6?#v!4(jL*DXeAJ*gUx8&{I6@2o>--(oVu0pEELq{ZP@(R~yM6u`rfL*@QeZDuM z6sP~2EU3Y8shndLl`H3u*4}(}mIK6@>;R8i*St?Ga$(!($xqUb@pTq*QuZzpezX9D zK=T+&CKBIfQ7cX-#(?2}?03kq@xXUzPsnXKRqeuJSYEb)7Y6%AgX>vioJ})1B!zHD zO)qVeswiOeqv*f2GbW1m^wLww8%L5i;sgmNi>5U6?g6*&j5pGcAr|GpRamL!Vx_Ne zi#Jk9^Zc_1aN%Pz?)nNA z)2SxW78$&c^*jJ2y$nD}C4x&AjWy$2?w8*yL#$Hf9k88$Pkud&x6hqF;gG%IPmqD& z3t-sQMGLo}lq!Y$GqnzTa)m^(+St3>4>>b>FVWOyQPG_5bjovqHsNqm%-WpGPi z_cGvuSC!r`gQ%-Jp}Lb^T7LE&86)b@Xq0U(J&gPpzlW$p$m^GGMABAwOyvuv^#f~_ zD!5X4pskJE!=PWB!fdFFl<`&5i)rpebltW7uw-a8+%MvLJh)zGWYwwP#rCg1@XP*s z6R|m1P|G%>oEL~mMNC0V+@bB_vwz)lg4)o2UW=jy?ut9zf-Er#AE?bij)oGcfOA6* zlkbWJd*e0!|8zFKP4jR+ySm7}XL%C0c5rK4bz)kJXwQjymQlF5$hy}lQ@T=5>G51* zR?D1jd0)?Ih9Z;NuP1f7S-2jzy5M?i}X*2`(&?Vi!I@GZb0B zn5TQ8>2}F)8Tr}u3r)aFbIhz@x^?C)Rm-L;JJtLr`kG7(me+Y?l4z59?%0?8I&WG7 z_|yw12RhRtDjALeGa;HkHT05*at@~RZ&)9+yms(JA}W+Adi&@@k^~YM^<88<=^|{2 zl-gW@zND~yt^YqY6WOZ&R62(p=?NpDKA&N6G4>~fO!zoMAGBd-D~V!>wGpCTO&PS; z^6gRPJ7a9IRrHgD{q8$rj>9`+U$m^PX=t}KPQdF}#21BDxv%0hUgK(luKw($MBv$r zLf<9LIX5s)T3|FeeKooDCuU3Rl!PUTFCAkIdFmQLld4&g=CD4voxoVhl1F9O?X@a) zCrkdpUg-%jVtw9{U;Q~se)Xr895ZQe<%U6-FW__v<)Zb`lU<5^b(dn7>tgSzOBVa? z4T%Q-hH7w^aky!4x7NN`HRCGx7g18Hc!-U|BICO;wP?QJ#y>Sh<09in*!i=vV02Czr>i)JwoW@c+b%~XV?)!i5xTjPt@6w z{Z{q?(~~OECu2mP#O`(h;DfN-BL1X9B$eo`E;C0$Q2vc$UDElC^PK3v{zq@esvw@F zbqkn`!#eDV`gNh|u^{awSgD#Xw=iGiNbA6>K|oUgO4=}0Gz0vSG8S3aiDT0Md`5K_ zFwTZ>AV&uZ5g9&Sf=g-?gPO6x6N)*FvbN9xM|426*p*8VPUcV-b6cv|+ThsSgBfi` znzE!}M!R4(Lwdo)8WgFBZ1Q&G>Giy}tj$)F$RV$rf09Uo0`pWRG{hwej|oj}J`yXSx@h6^#=mXV#mse-KZ)E%Xm;7Qd7Z&UcH=Vhvwa7y#R5 zk@vc7v+y_D1`Ds)v0KDLLNGU3G3*p#pn%*UzlN>gBBOyRFqI6kZoBftrj32#@7O22 z1mO~>Q_NRSfDtp_)6GhOa}9Jed{$i0k*pc2 zK#*?C9B$QAU~TZb?@*oCB`zrAWtMU)3t==CghX;A=`VV}B!#HVJ;ob?w!W353MN8) z65Po|v8?5?c)|m%cu0o_TA-gD)e!Bdu%F)EpdMMo*TDzJ^~pD$Z!;`$xqb zJB=&7=5fF;#t)70WlrK?gc`NoYQDoh_Ft&mNBq&+tmSn|qj#1+nj0lqSC4m9A92=` z%Alby5xT?MMC`Hc7bE#~UuMY|( zI8#KORKcqv$(J-7TG#95{espZ zvHAieY)QAj7;tcO~^s7?T@`oI&d#G7D-l0BD?vA(=t1X}@T7Fl(( zkd8V%dV#el`KV`I(y1p*J0%|fV|~ZtQ65jY&KnYxK68XOTtZ^*J!r%?>k*W%>Q%`>5N!~f! zNVA|9Bhc+|Tu9H7X%by++%bYNG4dsFAP_+XZi99%*60>j^BG*fjqADt;}0g}t?QCt zvi7SE8lUZ3`3Ta`fAOQ1+$%%D8052vI#u#e7Q$#?UHNN>$-#WrT^PX~qOA zzU2nyzwoZ$hwhTe1APlf)|vm8xwnsxs<6BZ`V+WCfVK9eVH;b<$;TvHbNJ{ve&*ba+D6?DrB|PXMR-9-uU>4?OHRo72d(0*G zn!92M_2QNH;A`3D-z#dcn>boF3Xeg`mrGGMiE--Ic!63rQ;u4VYTW6f_1t6a@XwR; zH>WypBj;~Q%F{D>%0_KAXB2K4rDhFM8{xqd7KJi+3udB>a)*O}N}Irjwva1OG+1Q`e$g7!5WB4borj&(t`(Dx^C&JJxZ6+>3}2@y zW$%OaJ!He+0M}XELje=XN#7Wmd7$rh-ALmZJJKUy4~@)p){R6#%;lskN8LyS{9KM{ z#7lOU!@7hd$|^e26P=)}OJJ*ZM@MEyC+xN^$+5LXr$upLfK4+432n)bjcE`&4GD^uoSJqUY_mVgAplCIzFY}E zXXks;Ia%w7+jZq0QiQt0r!Whl@0gAg1kr8%&)(+Qv66TlPQ{D}LO-=tQUcW!Y$Ku# z8CwW)^R=i@B6Hwm7`;HE4234(2PNDqPeSOa=&{6Ksjh&g=ms~Vvhqj7&evE8Wl746-AivBwd1pc=$T8I96~0D?FR}R)AYXAC zo;DNE>p}-OPY~lP@Dt+JoEb~Rt;y>kZjC+eEe!aIO(>IBpGF890}FG{ZlC$(;4?2% z7W zfj@^tNRnuEI_+$sqFzK10^2A# z=%%*~3uevwDZL>9MR9g~cAHvPBY+~d!0a};bFO;S+~^$I(pLEX%s1I#3qP23rYT>b z7MiEW0VG{|Zld%iSK$XUbqK}ptT(_kyr{(9r*NKUR#E&sQ+T2&+{ZL_p1R0x4A+w+ zLWVZELUknd^~`(`M5M?DyJnHvm5`{^LijBhrV>dT8m|c8xaTy zo)v0#k;=Sq)6C7Hoy@Z4?cvBn zYG|VbucCagK;H5O;f^wB99&O}V!s&8knVPCLJW_zh6nuAce^$HTkO>IqLAj&n%E}!xJ6r9mW5jLZo7d+c`bQ+-FHa-9ncnw$WkIwo(Z}VyvD-MDh;%KndnmKtpmxW zx{Daog58^l9a~mdJCDBXA{qIg1=`aU`5c?Omrhca{0tKIh?h~_Sa!DN-F^>#4eo{F z&ScHYCR}z{$bAgwMW90}D2b9PfCaDfCB!k&J092|fCPFRKzKTElaJzbaE!Lq$ch#; zNnkY@%JPBVu>ONtLWo~R((&@Q#KF8{8^gkp2>F(Pv(<+0+`HN?LG%XU+$f=g=Iw?w zOCP4T&MUOOt&Ru2bH#?wlgR|`L)NJibuR+WiE_ent&6%Wq~c_aoYy+{Rg6E$qBgG$ z&&5J-D@}S^h)C1j8XaP4E!-)k;LG!d&a^)PbGJu_TMXj&Vn8nwSKNZ9l6#>}t+qdH?rGNO0uCDRB2g~z1Yu%)u`zATnU5Su z>KsjTvRNgT#O}rIsx@t%*zk!6BtC;+9E2AH%1RZ|4|;GaQ>g6&i}%px^gXhAoY>J9 zl&a%(iQp%AN=mwovzZaCDs9tD%=jeVs7WI0N0vB5KQo%i#&7>F_N2dvc(rJ#HF_&f zyr}xkV|mU-iht5!&Vs1xbB}QF+j0PN0n#5udp-Zd_QcrD>a%xK=U|bA8FM;QeBQoI z+C(AeV2yH;Bl@_79lj_L>#c8q0Ji;z%XF@Pah&5`xGM%WiL$`LC=qS7A(T&|pk5gr zXMD#JOIiPAeE$#n@R<0JbCR^=}%}kiYw#@TA&tnmd0+(M75L|^m_4%EiX z$XZ;5V=`yH!1^J{TR?5q5PSN^664u_HV?0M=1a8 zQoDVZl+V@WGmcRHr9}A*DZiWT7mpe&y`Z1|P-|{*NSS&Vm8y6u6y*quaOjX0B${wa z6ORZlyi>jMRX+z&g@1u%iO9sC`U+wG4$*AFnBc(a#YgP<3a6v#7K#(n0a;tiSGD>z zTh;8(-@#LGI#%ZAI#Q2p1k&gw=OO{G5Zm#GJy!ddmyF=Fvkj!>Yl*$VqJfU)4I(g zp$XDJ-NLPhro?%b=h7T!bBscF>Y|199hK8YZBj1lPHXfZi5?`T8_^L13a9P~E~4_V zF&=vRu#B?$M0kmuzFKrVMvIP%+Ukn5aPcy00wHActqY9bY9OOT5?B&~$P?O zS>(5tJ|)hw0%PE-{mYT3mii`>+;;qzTA)g<*tRQR`}CZ+Ok|@h2^d&}hMQ9o%qU@G zCSl=@w|QahOrzxPl~8gQljJ=eE%$MvF%dD`OuzA+*2E!bu+S2H z6i5v9FyoZ7P_RW^qPr||Fb}}g{ms_!Lu}+kmWCc*qAD@)tFDxBx$`h4E4D0-Wb}5w`8X3ee>&a>&omZ(i_%Dbgs)KBwxM`(KTJF z+%iOd-@kf7dz+I%F0$2(RHICdE9)db=UQ#*k~!%#lO0}*fqMCJZ?VK zy322hog~FF{ekvk7wBU0*s8b2dW^f$IPwgd|D~mq=GX4xFsK$C@6`H350Pyr3?L`f z#H@;84suiw`0QdA_SF^3>0KzZh{*&_Obj~S7tPAp90H4A zyOyse{v0DV30xo#<2Pli-x8KYV-DxT?ou=tCxq)qfz(&Vo@Ns|PCx8opWIsErz358q+h0J?!sZ(`1F&XV5v41my zJo~&nE@wV2{|s$^p2Y3w6XCC&k{l4U`bO`#;P5i?i4A$Dy-0iym*3 zbt95x^mxa1pvMb++d0^er`XhGA}PDkGylTb|8wQ_!5-Jnzs>clS;35o+cE+HuNVlC z1ndugqX+GgW{*Ai!0;*}FnX(_%sxHB^cG_sZ(Gx4@EA$0wX5BPK;QyA=I?%&E~ogb zOcj5h_{=PvRqh@~U3J}M_QDVJ9;{JMhkN+ucg7Ym(_y87Ant;9bX1L@WMcO=H1~!} z33iH2`@Xpw)0Y*?^=cUl8R17zwVjs-jupJ_uIYh9Wn4vUl~rlY zX@hGjBSYzd)!F|~7FGPl%*wlm$?tsQHR}U&)czYl7vn^`MhYY4sM21&mEM-Bh-g?U zyI8c5_}?ixzw zVZOxVVg4|)+t!QiRM9Evq0t6)Etw<fpIqX^BxX0b=uxy~a0Au)AUd`50eM+1QLNe+PhS6;}1%{Jj9;%fxMd}_!I z^>|QXJ4If#(cE#?c^8_VRLdXh;!L0Isx3L-D}2$|a7xAWw3ux65~V=y`L^I6Uguq5 zYOmCz^DZVD%qpa~Z+I)z{$JLMbp`g+<|0;Hp@PH3oLHE5RW6t0nI8G^6Z~DR&ewmp ztHJzbP!O&nQqxPX*Isw+wbxn`rVX4hWnYs;#tR}2f7{90SgZP^ZzNhtXGtHP-Q2AN z9%%IYuSiZ~+*oi@teef|GAb(;6QrUmQ8Lxf%2G9*!IAdphj-ncSYQ6pISC5huz`3* zV|ynlxTe2ZR;}#V(*}uY%^sz$&9h?w3dMp&?umV|zj4{UPXC+-?j`M-kleAH6-3W` zVMmTTZ@>vr2*;g6e0uCh+P1u{*{wriZ^PeYJ@14T&f6o*2jXG8q_Nfmp7dlDgm$m$i z2WjN2OV~*XPFTFzYKaDG)LHmB?_JOcDRf%r21{j;oa$&vcU<6DmF6HFGVkL($Anss z#l)laxIh=Hczv0=>C$EpW4$$^|6WH?pi7zB+vNkf!7F%oDe-kLq_3ILZd-8Z#r{KU zp}9u+-)4z)gIJp0c?O##=yJ+G;4k7%_GO7*eO_``Jbe7>`L|_OI07jFtY1wHV6FEP zAwlg^3iCLbh#=&55GHoHomH;bpwp8b8FiCHQ~nLXI$>YWUR#2wS!MG7cs2VE?GM!geL` zRvJH&N^jKmAMu8vXFlSEsQd75VL}n7n=JK2arBf3z4+xsHi-=3T1;&wD@0KszYT%#upN{U&+uoE@H%s*x5imO(ZRr=_NbhimH_2d+7F3z4 zwtR;+;1arO08|(81M}?-_c_J?#M)M;9s3@l>%>1-&Yq3B{MnSTMh(Ip!K#>1z$+^% zX+Z+W-mp>I1BTy{7D)j2_?evOw<=}5hrbM=SEPSMIrLgb4|7MJ;D+XZt!<_1FOQN~ z{C+8toUiZ9d=2o+hAv$Ls)tULhI{I4F;h&hR90V1FjEms!~EgkDHwT6VhTDMz8Spk zg35Trq-#A_q!&jEVS|j9t;nBu z3_mFEy(E`F{+c_`ub!2BH6&-Rqrx4LVCMpjm_Wl>tGchipRK}xCT2WxwCA;IJYA#n z{=NOsm<9g_=e}6+vJz`6Jb+q#$!QM%-@q^&EAoXQQU5v~IJcH(NNDeCF9m~(m&Y{I z=~Ks*p5{P)cGdH;lHoNg)a&s#>P@+~RaN{;1L7FDwb|VI0wE%( zE`jwEe48F~{on3)?gONbv|#srh~FxRM@qnx=CoB#pMeTf6*DoS$`XTa?Dc(ouLFs~ z!&Ef0#qp6mMyZoB-n{slf9t+n0YfE&1m^uNK6pm1%4wgG*Dg6=Mj})6jO^HuoRLvK z95f>nGX!FJz!reYTmZc!On=z`_|63NDs(U$;P<)oSw~Vc(?oQP{Gsm&0S)hzN8bJ` z(t~9>UuzI^veHXmc!Ugq`qYN?Nq`LIMY5Zn-vHm6imK=G zLd0@-R~9iaGH;le1$Hd4xw2bm;tl0aW(pME*brE%IAGBiI@J7`lI)6%0}_ILUbv_- zaucOyXUEq_8|s}oE@zd#WfKT7TS(%LI%RVwT=}c;BQnA8RKKwRvv|4HYTVQD|C_|< z!|$x!4?L~u%bq>Mt*vVTYzYQ3P>P~s1-37(OAh&>Hel;r48P}&WXlPSB`hnbZp=YV zkCCSR4`Rt3KhK`1Z+c5(^V%Ex*LQD{&l|?4=|$-{Yo_{?_NC>Htg`RklDOMd=#WSe z%%b~++~2CY=@sUV%(sh=H@7$M`4rp={?=YYto1mywk2BUFt5s#M>IdiIDQulR z-bPV_mcSYjoUgpA#)%$_5%=4J{K#tt*^+?Y|CBIDDdv9y;?yK&O?ojbVKF4uZi2>~ zv$>C>`J}@xmrwD`Hu{25u+5qr1kMnU%PR(E9%oT5qBbxx?2o zCsJ#ysnz(6z`z}zC{s0lwDCiT7B4%*JMm5Np_TLv&XCGSaY9~{T1igwV!17tshK8nisQPfhydKdpB|h=l~f<%MQxrQm`GJSGKio2 z^76DYRWfEnyy;%1v0@IQ((s*JRTT~GxJm7ET{S|UcF^S1<)Mv(@V;T7NZeKHWa!+~ z<#4GR2NCAKVps>cSKp+7?CQE6fFKmWmeHBcG+L4Lt8+=eI+FCOM7mOcy32qZN*t-O zvF`OeJx{;=mq46A$0i9aYiLOg%Wzv&5nDJ5A<)zRD`7``YF95NZ~3Vm7Q!!{#js3}#xNoek7E0<68ATExX=RSGNPQx8%an1TN%dJP-%*H$4%S!%rL z$*!+;PmcHRVG$fJx}VUSCd%QUm}gSTZF4U=16 z_t9hg`Pbjet<&Vz`{vfZCcW6$_?D<`=2qZ6{r-ObycCT6s;A*tmeB93M>E@hCG4J| zov?b*jL-%jl&xrX4y=a5{Wm07RQrs^d5Wr`-JF)rv6FxwMqJ6k zT#iLxfrtPRm>8D`cjRWhYTD|&+SXZAt;H?kG48Q;qT#4M@jhfNdm32c%1y>K7F47_ z7F2>aJtTIB{URL|K{IhHDic`?yXu@c#x?Tj>kn9!V3|8V$LY_}e3eY}FHW|3#52;{ zAG6~+nn%dvQ9K6B+nZ#z0-c|OeQ`9OE>GV2=HKQP`;?ma6i9nJFs#LfukQS=}InK%fUPiSEuE&ni2k|*%Q{N`~AKQdE(;F)*N-)*1-C+NZK z@gD>0tOwJCmci(_=y#RYZ&jtJw@~{q?NVAz{I}_Jd!Ie}eCA=nl&QY0BD)axr*~ul zO@sr=RBeBRk~7YO^hJg-LShX6y%@fKde+`ePP8SIyezf#(8oVWBnjl=3zk3^3KuNn zJ9rLme(Ax4L`Jn{h(-W|yI_ zKNVrx#6h5bJYPHSytv(TQL8RRr#hhAaQsdJ0}~b&6PEkt2Ay96P;x{NHNi&i1Ldrgel5_9@!dc}AxT zQb-l`=tY9jjcV{W8aYtgCoviwFM1WsG^eKK>te-QRkU2h4Z(hPokyjP|9D|?#l}^?t(3RZbZIW)qo4JH@k9r9gL&MP%aj6m^O7V`nkej z_RMVmUx2%Rt0ZzCHzpB^2t#3(=#W)fczMq6SOdj15>Kb~F!)M7x*FjK>`*v9b@sCY zWx=RvDHv7lz$iC8oQKB-oH@KTQP&e=3WJN?zuN-uUNyarY+<3>kfjeo1{<5V7AFBw z?o7qNV6C;ev?MymMZ1&A>KxUVRdYW3MCgA`RYr}__A= zLmNaJt%aP8*BbUE*I}HRz(_*m>lLy(kpr;m--4P+j_0vt6-}n~dMRpOFQSR$y#(9; zTKRtCl-=QCZOpORe+6PRnkHY$WYDqrpO$xXWid&Fw_-a{<=sv;S`w{R5-C3TF8VVm zt*-d;O;=mjt`UEt+a z-hWnlk$lss*R)hwcSdTc5vO%1T&`D{!;%a}y*lxH!IXOS*DuU*{BK(m!sRAm><+(U z5S;2jmZ4-#VtwC`vXEHcSJ~rmCdTpbq@x^%)KE9G0dtN&SV&&4iiW}h>mbWs&*32~ zW>T7$q*Gc>92^-d_Nc3~HGg;c+h!y6KVv#ak}EONi)0v1+XD-@pVtV4=I>5SZu2i< z#X0KhyuNq~xB@-p$1Z+s@z!voQ_#hQQ+UGoF*b|&(1QsU^BBEpi1SdeMq)0_eMOF( z9`zbUtqFQdC{xGv&C@7Mm{eifKfl^wy#(da{6($~nLB;Bc;&;_K~aapnLz5Z*;0sD zHk>8lfpxj^by;Ekt$bF~3ATYIt^sh7DVr|(Y40G}3KoHJA{w};gk?oT1GLSSI$>fT z0tQ{=z>i`};2PviP-|3smUpQCY7H}%Hy#5pPxa_2j%ZiGX}^KsAwCq?QdK?vsJ-tt zsQ%4w%9=l>U~fSUf4k}Vi`Ldm`vfmbPLS1I0EJjwkw;F_@G{ zfwo>p5{;pBJkn#FZ`jjBe*36_$5i*E5}`1_1c3Nd*9ig-x1(zM05s67ySBj9;zc7+ z*#meqQ~(f)K$+lmXmZf;vpg|VXsOhxYrn4azGnahBSovPMdvjFlwBGqe}2RU%4^E~ zxduvK99&-nD7kjrxojX}6Gjb`{>&iGUa-O_$7_Xi?w;!k!ekyo1K#_0l7M{*__Ri@hTRR>0tm)0_F(vzBtL%?Iv5I%K z?~lhGxIfO$FdGg# z46?(~nNdk;wfi%OlIhA~`cv*S+hCd6^tpYyA~>a9M29;l95RPpZnkwM0iqnk&>Efi z;ztw4uhQ>9S~Hz1$~F%SAt(m9$ zu$Owv&~O-w%oOsJ?PwPS-2RP?UEoz9J=FMlQfSc{^=5}Y`)q~B9p+Sdgc(T@E@Y~& z-jc(;JMw~5DbBK&*CALgu67U(VRi}BXcf6ubPf(SjynUbmqQ;WZ6p+`xkumx zLOHcH_pwH1b=zw7vVWr3B?^>k{s*R0U>qA-Fh`8Dtl2XFRuEf3tZuTEwQ*y-)F^%6 zgr{RIi{d@mH_T>*dYf2A*<@xUtROp==FJ0Ink?bf3zym!8D5f2 z=U_G)YIN2%rgy7@#1p=Vyjsj&sp1seZa|7P|Zkq;fs{Cx0r%KT)68oy;$tgSCM zm5Qb;yxJ@kI}@{+>_cFUv@^j~WUA-uv|Q}^!!NLu;^x?Td7=wJ0^K10&CxS3Liws2{vJy5S}9L3~#&`B+Zn*`dbonLBAL`^wbA>Te>1>amS%G?E;! zzkG0W9$jI7X*UAV`^z9Zevm!&hYPf8MoD}k1{(Ubb15s0eN_EvcOysgR@^@uv2lUk zw+5KVJ*sw4txRgR|F^K({%K!uT5aV^?9j8YF9IMZ>N*&(9^~PqON<&+xN6A|q(j;M zxk)OQgS0?5P%+QL3Ggux;;VTP zcZ^g{<6r;DDe}Xv;ls)g#SpqbB1AL>!E3DaQysYuET=eg2hjjXJQx)ldAe{U{_g}Z z`Qo;s-bR6tTw?Het(EW|Pq#~V<$!OCccqqkbdXtTgBt-9LEO5R;s83;nw5w@eMFD2 z9_l*@9Y~bt0AeQHrEf=^4*8e=xFPIN11(Skb@k-&m?>!C@Z?hU=|e2cEp`O{_QeT^ zG<*hxz;?0lBLj;hGl!lTW!K@+Rd0xgr~<^T<>>0%m>BM1cL3Y}?U02aZ^r%Ygn&WP z-Tv>jU>YR#p%O7{b=4v1H%Q&esY8m2?e^2}Yb3RqXmhkc_}FrEeQ#HNY+?7X^&UsA z3h832F2T_I-j_ub>ki)~dyPm^cl&ctPRZF#{eF}l06oNzFgXTWl4|D>F$0k*>Z&sZ zlNywIPe#*5YvsdrbS2JWqdRU2+d=$M4rppP9Z|h$s_7%~#9~Vt*U3J%el@c}BzByE zU$10)0_z}_yG}~5gf%rbv9!^TLlSmZZ;u1<#`vsy!|%HaYMO6@3D{rpp))uNSASv< z1PVJc3WdnYS-m5pQ2P-Fv*y9!7jajrq|^SzCqwe{`UuIlN_|2pI^5u4+GD$xfJQy&o;!91SkB_ruV~EevV4>|$#_6`AX2dPt<+Wk@Uo ztb8$L`U~8Hu~djG1MP^_+A*78N)Lfd*rg?^!H<-_=dVdQXocWqsvIBR0^MwjKv&uFPad2ndY~3t{Ql_a8{%c9>eZpzN?MXH40uOGPg|AG z4HAln&yV!he|^%ZYd*a_QkO1}E=|{6YKb9H9zVqYD@`uwRo^0!GOt8?Ug=$1<$Vl7 zUA&6^RC=Gayer6SPd+8HVQbT=nnmImVUbRYn$`7`LRlX)k?3m)SaM2`lxXFZV zSk|#)sbL#3+nKrOT~PEOeRNedNFQ-lc}t5P>Ek?f6{&qReWPdPX*iLY{^D*Ry_7nt zIJK8W{E*&meGBln+kM|#lIWwM|MPc;fnqy~vKpc~{<+vnTOPPDGJ8&~v1a6R67jAC zb)f^eljK{s3_`VFtby@ZYOVbW*PDwF_D1K0L-B#Oy~Mm#2z}iPekp9~)Ns82-BbQv zO|Fq#Sg&Y$(*$mx>R?|ao%DkK+-o|IJ7&}6&TzSNs=k9BCD7a7Boc7#jajsu1w3^X zYs6YGMT-4EE6Jt?$erEXF-?`k7R)KYFsM9TeS7-HKm*kT0Z+he{}!RXGcMKHNbf-V zQ|=VA0N1GkyTxi@1F)O7KIUC5o9f9kS>TSQMY>%&L@tx!waq8^_Z{3T8kUY_n%CAg zW%)uMUR0uPJHoqrCEs1y-@My%z`I92rr({zyB`sN0SpHkXakJ;6krUIp??j|CW>|H zu-H&3_7cS`=C*jHHL^bjbu2z>L=j1nTYCmiWYA(o_G|!wI;OM~<+eM#fI{(S7E`@s zl6tp6*g2vuxg$47WiM?BwEzpWeO{(J{8z9`4e9@}DA9i76O8~Gltz!%pulWUXLEc8 zywp~58C}3~ovN2>agEO!No131Yb1iTMKN!+&;L)RieD|~%>57x#A;!{(QTv>a zI5SVoK#xVoaoiyd*3e+{W69gJofz!S+TXM9^*7^9eMG9WK&GL|CB0fO zS}ylP1*`={a`~mc94D6_>&r{IBpMRY0ikVc#Tx9Na(_e-NW8bU$XKlIt*yXKp_pzz z%YwmZrg&|MkMUYB0dG1Yi{d7E|DDtYblHH;T5!3%WuAV^G`XCqFRzlz>-6O{hrGK) z?kCRkC*9@bCPt z+u8i^f5%t+MxQ}RpW307IE&RAuSy+32nlkQK**-|Ip?bKM_$45Y(0m*_pBn1g$ai)j|*Q<<+;OT&@V?|A{^CJ$#wNRgXlVrvJV1g8j97>3# z(2f6j?FDh-rvp^1RUDKr@~PqTVI+k|;55A6O4nR-;GEFSIS$r-p4Vq&Bl671Uag7}HZQB$Dx6hC#%);m&a-b&5XYQf(AHOaTmc{l+Gj7^*< z^Adul;7_>GvY#7U)v!vD_?RgFn{6o1@Tr;e1Tr-~^`{FkYb&sUckTQr~t*gq)N@hod+pmRY@(;k*G0Ms_}>xG%)g!?PYnR3Ft zOxwjhR)9rJ;&8jrzcdndE7P9`Z8mRIvs`M_a^4?wPeZcZo%kg#zP0QcqxW(x+ z?v|4b?oN1F7TJ2+3O;y+b`A)eqtYSg+^MT9ZyBP#dx>XuAxb96e_ zdK8xomQmDbyCcCyDAaN2d4#z2sTXh|O{Zi<3I1N}$GlnNEH@Kl8@EC)0lfq0Cd(Ek z5VQh$#PmZD^tI%O7Ml^ta5SORG;$GrCDh^9U$LQJhs!C@fLI(YSjSDjG5bGzHTTm{ z5t{oioBIpQeXMls`_G#DH*nutu-p)<>-eF&y3$JN>Q4{t>etDx<~)*IODSEIj*fd% zcQlWV#&674$EORFTp`^4&md3@LHth`!#+`?2qg`>Fjo%%*JX#BHj4F+ENSBcefh4mG1zY7 zg2T0OtS(z*+R%xU7kH$N{X*y#G)fy^aw+iGuUAnA_<`!3vZGBKFX$iH(#9Hnxl7u3 z)NW%euUjX$gb=L+B&lmdxqcTVJcVYxT&}Q zI5tFc^r=jx6N0~Zs#>+R>X`7xK<9rjC`WVm+NNwBJ0Sd$+gm@W;FYzE&#^C933=0f z#9!&*JnZvkeg13Xb+?!d%C18Yd9Yd&>}|etL9pkeX`zOVD&!usKDZpohS` z#`(m1rmQcCoJ&tR83d0dwg!O~?Z{H&xRpZ%Mr@zy zHoS~<|LjmgNkmr58fye>fBzz!Gxjx{Skvh*$H-~8lZ<}7udGD%e*?IQ`C1MyL+`^O z|HZ%*n?XB@m+gApR{aI~`2R}V<-P5uv2#&%uhY0!Hx4OhgBAv4ggX+E$=aq`r=wKj zg|&fOgkKrTt-CA4^D}TJ9cPF1R|_KEbd67a@sZ)>d)^}~@|C>}oAKFJ**7=ut##?j zYwzr!^7ZITOy$j3A5giUUHMT{xs2RsylZu->@e37qJ%Bppe9>of`e{Oi>B{O*K(cS z{u`1g=n>tx5k<5+L=V9}5L=8**H(XXU$x`9rPYoApXd2J$nWiZ>hG_1Jn}%bBj+#G zj#K#z<}-=U1AP9T^7)YKgFjFH6%XCz)sB1l?0vA>vFf2}N5;d|j&u2(%x40h%lJIb z=Nmrft*Ca~%IA4L>5o)9#`3ZF?BsLIqt%WQK9zhvpsi<@RXaBG*~#Z^KIhQKB0l5! zl=3l}l@$Go#PccllxNSc-7ccCq1mhtgrW^b0%R0--nPTYE45k=dm>U*V4u~kzcVzi z%~9#y6FelnB5pPkH2~)WDcLnqvZbSvI=+D2W|u_C-A5>iB?--nGQ0&Vv3PKIf2TMy zm6o5S=KK{_lrTx7Jl3ep;b#T1%Ln?mE=3&dCn^}S=TRc4bwAy5RBB)%6p@&!1z>o4 zCrH@PbdB2Qhkz%`K9(0i7G$Bd+xRn5BIocHH0Nswvkk;=EH?e|s>;vmY zSD7`;2<_^GIueX7mzcAJYC?r4zc~!L7cAz&{dC1u&sNJJ-^U-gYb;Z?H|vNJLMr$E zuNHFzXIRG)jJq}^&cGG5O`PYQfl_v!@BaJ>!iyL7ZxeAe(XT?|hUc-(jU8lFL9HLj~>*M>{cOl1Y9@%q4;@^(AUZJ)tR@I~BYVovK3H;sks- z#u_P(|5-2rNX7!LC!B=FdC?kEG_JCkz!b;27c601phLw!G&+ptPr*A)3j~^218K3L zJ1iE`gcuGt@ps=y1QQZZ?_GY7*?p(FOPpm%6N+hF@I?P-Y>j4u7O!N2jCr0}-SZ{! z>cIKgd|PFMBre`_b2y?otg1N-#eFv^v4XqhfWmg%8eiq1Tx>-4zPIADhn|ST-6>m< zN|tUSI}cF->*v=>JJG4T#SD@pWPm-l+{IBvz+QhTV5ij7-KLnFPCWvDiKpd=&&*Lj z+{em?`#_;Bhp<+kYFpi#I+Bvu*(8F{bsoCbG>AsMGSnOS0kNIq_vq>dfnh19v9CMwrSVC3w>=c<8p7D>b-O5Jo8YjrV` zgBH~NbVKMH=cr~<3EJ18P3g^9>wux7xzjrKF6nWR>t!X}*m{1h%a)-$DOZS998D|u z(qmrnHy!>_n8$T&?T#kR^y-Nhw20g;RhVx_^PF`^<{Zs8u48%~&E@M5Q#+ckPU1+w zh4OC7I%IPWSur-|=(`uLV~ck*vL%x8+-7 zhR82AobL!P^1RHmSD{oyY%x-ce|m)))8%kFP-0M>#8=Q$=gk6gj^;5>I$43uE5I+Y znLCgB)OR%hgbV%>YYt6!KVs9AGdiNDLFf{3hMq*4huBSC9e0&lY zyj#VmapT&@s%IDLNb`zO+~G8@_9Op5=2yZp>bN`}?0AX6Geo_Qrs7aLMUyc%VTx&t z6{Ws<9GQH18lkT?tL6GK9whkHX7xvr)niClyqWL@D#|Zo7rWV~7T#t{*EcIC;SIz$ zEBex@k_G8PvBUV3<)>BN4L()UVP}#ip{5^FK|S*v{33e{>MiJNg^`nn?l4mO%fhb& zOZ?A+Tr%FoNcWtgN7|t|rrlXyfD!L&Qd7M?FWK!&co__}rs5h25wzbWlUBS-tc)w= za>Q`#@?;&#z9V!OqI=Vg5Zuj%;I8BkNpGrIInBp&akpH6MVWWWMQ1MVGr?mMdC)se-A8{_?7sp>!kijz2>1aJx#tk{>O<}9?;G7v^4$4 zE=L{tXP!$L`7j{9l%0F;*Q>cPKG8J#<4_UO{JTUPh()mv!eGd{2IY2KN`d*O46OAlEo;KO?xhzL%H0I|==$2eZ zG&YVa1n(>c)WWaH543x+m2%NtJcjEc^<2w4qZHQX+V^ zH8PL2duCMMS|Lfx{?2{>xP90?)c=9tVK19jg>*y2N+pImoB7$)lJm}^a1fQ^w@_;p*1TaHM%KJ`NsI( zqAYjtj2|iZ*{^iL{6Lp2k%xJOvzd;`g(RXs{2NZh&Y|P*-W(}T)%;p(Ux^3SFL>N! z^@ogB%|b^iXc*2evJk*oB)o_$=7u?{o_w$siD9gC3C5&t4orEtjuQ{a418cou>eVQ zfOK>H+>!T$+1sYt?iS0#jDz|Tex9dC9IFBS(T(`D*eL8>Uipj7bp%}n?=<(~-4*)X z<;P1b5f`UR4T&Ug8;z|Hz`TPW9MH45S={2fg!a?@lcoC+!O1#ZO|a1#H*Mg!DLS~@ zzNYrbdeO+G6my50*@{COq|tuQI^k>naU5Un(Jw_~)!Zw1(d1jD8`A2)x5m?4G$wP= zQKN+oGf(l~$R_B|d18sv-|`kIx^0k4bwRjs)0(p^-GFJ*Dw;BItC_7s`ly>*Br8Y9 zZ1&`0F=U$4i$mnHXm9f_1`aH~Z~j zyTk7YJM)ryqnA@W<1Vyf(%D#K8Q;hQquK^~z_6wAn@~0}K}}18Z$wo8AaH5qEp9g9 z`49XBI&~2NUmCD1cqhI_uC17m6{4#WWQhwOzLP4P%YLhW#$v0v8I8y{aX0y{jI7t! zUVXiRZ=!GV9gVEj*V0;fdNfj_f5{srMD-|{7f%k3GaS_ zqJ!g=chBN)<=r#&_tkt`BL-L%>wyRqte3Ck8K?S5f2X5Lm*-4Zu|d2ja3%lT;b&;Tl;Pqi77eGTZYnZPJ8=Kzh-=JH=WZn8jz#A1KJ>w}`#ILhYobf* zxlvW*SC+0cxJF#Y;YJmqCaXm5{ zO%Jz+Dc##!cNhFJ-0O=`iCN8`|P4+@QN1nZjIIdPA}FuGaL15RjPck%Qln z2+bpk%t8vaX1fI4<+P&0Pl|k3yjwHF@3_N%;6`mzXAzAI2*(5c z4S>V1$ey-}mYq#v1bA(o`QdEx^DCywl|dMO5^rfu14RuL6O1a0uMvb-BiA|{;}AHA z{9?fXiqexQ^d!tAh{C91gWxrbP!=gsWBHc-O5W>e?qa``u#sl7AW9^3A0^uRpwE_w zECpxND_qMsUXs5wyOF<%W;L$3!xzz`#9$t=i{Hy%Gh=4$GYX--*0d=Dw;e*+qMEpv zSUl~d8t3$|RI}T$il!k;&^=8yVQI3Qf(Kh?4)XtrDu<9rv+5y{x(3~_e1cPV%gh__ zgodYQ1pAH%)er|(=toootuVHXYxnOYkYv*qS|0eS>Hg;jy!DKud}{)YW7*N#k6h`m z24=@siTo%Q+sSLx#^n+yKR75pGt0iS%G^1@z|!2bIR0d-d-RjQIrd}(JoXf9i3s&_ zHs>aBDsiW4J4P8SG~|!KJ9@ZR;m{q^xDkz9qpyVkMk9WGE!Yr^T+g+oxyEQ@hQ2R2 z6^+c%*YaY_2=%oPL_jFzwT|5E4bfPDJB3fn53>+24KXs;KEo;$bx$Q_}AlQW$vdlOH}w1)}H42;k|ss zUE{e=O}H4-fT5uYxt>(sKeRz69NO_RuhXpg5tv|M%u!s4g>y|&!ooTHM{0&*^)%x; z;vhBYGrOJDEk2uL?>jdnruFi~)cN5gSxJ{#ONDY;qc}z!5^(pY)_6P2?|8!ewy$SW zN_1f}XM3lGu1`6eGcEnj!SC$V=N?xeyJEx5G)u_ZSZod#Dw^{;uFU3TfgCFx8;kPv zQZ@J?X(o$RZ@SU`zJk4}Z)DNXN_34-BX@XlK4fN#wPuOj)0|Um8s_yb`z+J(-dos! zys!ok8j;Z)$y=hgK;a8D^^0DSY0a2s?dWh1{&7}y#sPcq*MENCC z4fB4@?@mduqy;ZVH83qt=-UkU)B5P-9=)|PCTA$3*xz&pX2X8=va(oY38?C`46B1V z*xb|d9M%T8Y0jNCa5d^!k(JapunT?GYG;2sCS++rk1h9!$Z0i>wz>FF3_=~HcCi^21z>C&)1-0mxaWv)O9D&Yh1?6b^BmI~GJUkAfq`=!oCAVFxC zN#8@CI@Loxg}arX2XeP7xRc;+AK|(@y)t6>+vWT!t(*%| zSKg_-t?T0z8`g8vfnd|{&at)pjIR+!xUzD)^fo57)Wt8t32T6fR6Ks8#KV+#JJrM` zjM89h9fCh=R{mj>^-1KS7%sAUH9vVx(gR@uFVpd(O3mU)@c9JSU*h@C`TRP4F0jEM z2ZAIR*0h5`2cX(PfPuQm6kP;1G~SF^mfZ(j5SBeAD-sP&pvM7)jwKL7OxG&I-@F(S zw?UdPFtY9zk%o;Jsv>!O$Jd<7w+XAGZhGQ8jwtfb2C{Aj#$+|O z)Xm~GXx31Yn00_Y4&@=np}j~%uLOXiGCDyegGYxru;|F~JB=FaqtOzPI564lIh&GH_Kh~7XED7(YmDFCbm%KAVVi?o?4i)&Nh{o!}XPMJWF?(o&ZpNa(O z$F`|%>b;ouNIvp8%v8coTjHGCPgGQiO5W(j>RL*uhhqP1yw3G@~U^a!F8 zX=9Zo7LQMzo+S{IdkKg=*eVcn$=FjNmRKiJv?}7@aePfDzHNw2{JTI*9@-Go4J6h{ z$wTcRus8if247X=saM9*fW2)TBg4LQV>=x7j_^1Qio3&S5$sV6FiC77VEB6yku?BT z$WS$ep)o3gU_t=!2f1qw%eWQkh(@?tM0U&2Rh}qX%(Xqk_w5rf?2!R=1O};A6=~r+ zzUJS2+h7>?n1DeZ+F;NPB*1XVgR;Fe0JV@l5tDkw{Iu2xe}}rt9QjBkwxY-oKpmw~ zJ%Jq~V~9Mg$DqsV@%jIbdJ@FZ6T6bP`c$c?Ga~xh9?5HaWhASmPpKo3sF0YAlNDpT1{{Mdy71fBNrUE z8L0XUE5>k*nFn`d7lkng!^+@ox%$DmcFE)SJJ+rK11VIzh!bU`{#9m-vBB2H_J!;gE%H?qURI=jRFKKxi8PmFat z9Z4B$MW&2Z-?Y2)!yXyyYtr9C$12UpSfxT$q@M5in%DWZ$NHB?Wvueh9;(TN|y=#sh814Jr;Z*_lo_EKk{SYp?!;jNNoc;T{BM)-rQ?t|XS+ga(>?m#>t0{C# zQ7?D6iUMYT(dHWnynkz`3|PV}`PBJfnb{DT37H#>Uu|#zn)nK3_o=%j+T(569;E6! zW~Ny^;(LmNakb}*BqH4W0D9P%G_G!&`vfM9P4oA#j!pN>(GSa3{TfuW zs_JXO0T;)oi@=Y-`G}L>B(fe{*H0%KN(%r+8klF5RWaRXR(M68d(azu%#qOP7MVyBK8YF-(Q3}U%h zqlWwMK)oEFHIx)o+(`7|DtduiFZi)Tz19qV=;BTJP{Yuzxm|+SnSK>MC#GEP@cF`K zjT#z@4WSJLkf!NqWT;%EmzY=j2WZ4(k1``|BSItoeOCxCm1z&T^}giB+Jsnwmlffb zh>aA0nl zHa??>1B&Jrng{CDAt)Z8fMFKwqweXJMh0t*RP6vIqHFv-z(h#5jdV|bCAc-+94o); zuMGB+O7Q5oWW)Y`^AlT`6C8X*363cpDNP&}!`o%G7=GdA+%#jFWG|Yv;^Q2Rte~60 zUZIz zx&|{QiY3lY4{p?Fr{{2d;%?&X^m}u+^)4OOE8I^o);>F}XOWq~&dN_=F-~#_iy;pa zCxLr+3yZOtI~}kX0xe-Nq(W7shVS^A7x=bWjEnvvEQUN}-b6;Dn@KrA{ryu7Qm2hW z_w(~;IgYnYZ@b1XSNMZ zSN0aUSaF}xc?dW=*As$&qp;X;hXoa5u^ea)8EVvnjWzMm99M?r2~M}to?Y_MJ_$q~b+Vp9wXUkP^PR!IRU@6}k8lQ$4}JGTz*99c?femG!K|v0>F19~N4HR`|}0AnR4~ilgTY}?cyXTkBD`e(Ad(fJ!d3iPQ1-PEo~r!i^P?dGxjrVFmjpn zSWJIM7IPh4n#Z?K4Vp&Q3r$#Kv25-jSCnt4nEZ-G7D=h-(j5LM&(BW7tTnzy?!_Y0 z7Qw$%`e z)Kgyv!LS8kI>%-2?`0>FM~QWCSJO@gBzIEJPrt&(OU>D42!oAQZ+)!Eqy1|ezYOf* z|G$J^XWvfX__>xABvfgcrIAF|X~F~MILsO{GD()sdJutktz4a)HYcx*6<4b+GbLe+ zP~KRihW?fLpwW9;``D9m;7%wecDc}jm^WOfVUfqHqLBbliH&gi>U5wBxmV|{;F~|o z%^x{WJK|@@Vp3FfiXI2Qlqt~IkR?+Vi^-q5h=*?}sV3i9E2ne$k1J%kOZ{TGc*Nwy zV!NqTQttA>dw95{s%~=Rvg0Jv)``@!A}u_y^!!CL3+Gh?#4Knn$#nhW9wK~SQoOoU zW)rFX(z*PdT&C{3>10MNKhkxhlVdZ$ML(b^DOLWT;DBOKkHFJwRrZC44saN8NDX=p3A=Gj5CeIwgipvfpNtpV8?hHW%62 z4rlj-c59G3vIBTpT7XW3FoYX{0-LXUd_AyAhVFZqV)lc3AyStQo}WG+v% zIQpr}?OhdStz8^PbmC(3lAzas!Kx7LK>w`au3&*VDp=e6Zy$JCy6*2{NLk7o-)l@# z*Iz8c&hyy#8e#8^j=prVI*XGWBIY9kM_bPnya*_D{K!DJ*m#!;)B%HWgrwv=0q-o> zX!kEw<#VXcd)5^&(y}|N!R4>S-JT+k+mq?;sq?Aui!98u-pb;);0(X>uXW$HgXF6V zxh~@G610E0qzBIVUksU zeY|O^Op=aKuHkV|6hi?PaybbSVcZb1{X*^hjuOl@EBMmjw8rEh&SD0`jS}n zSTUJ7j;H{8n>%TdpsC6L{kJ7fwT&`F_0Yd%xcb_DZU2vCxN;|TxKd4Zk>RG5+6908 z?teAX%O6XQ^odQ3G{N?{EKS-2$CbvlShj4kx-lJ5x_%A?Gjz?z?SG)?G)gcr!Cb@~ z@c7#3(m7mNOaqaw@bN(!}>EZ!65`EpA_9T0pbRztUJ93Xy zFq+pH8sKPkSMV~8VuSYx%;jeS#a1;6%;ioh%%!Hfdt*D4&rao9{POq^re#|@!}8tV zk^uJ6$hDRMjP9c~CtEVS%K)vSp`kgMV9%!ZKJU|g#tL#tqR+RXaWOv=eQx_e`YZ)f z`z$rphqZ_6vphahpU1ZMc?pdq&P;kn_1yVNZRr8Y@C1OW_nk6%whHr(#&{eA7!E5$ zb{1=?Oh;X0w9OgSMaCtsF14?$$u8@q+NSQ-#+Maw0sA}CUhKNHDsmx@`?q!7Dk-jA z{oR!@xuH)YJtICYD29n7kW6!90pIhv2D_=v;6M)7G5)ucuB1GKFW^=M=d{fI_d z`8H|&qLDVPLvhdSKII&UH%J4B)TA)rmC|a%vABfYnoTsiXz^+SsSxi>oYq!Jr7WT? zuT+;kKvWy=%2?J=Zo@`pZgDt@3TuO{gKG-*Rz}2h%Nms(U9*)7Y^V5^)6*r)fUy@I zH8g#%O>pP7WJa}pG26?5(PK5;9V>Kq_;4ITJEFPd*VdLy#waAAPaV#NVT?Xjp;OS* zIi@Yx)U2m$M(EMWN%6u6*#=XYA$Q~_a?7mhIoU*rS_h2uvNUHwuy%M0^lxZq-gB#* ztpY8Oj@KAwEK)6~fmTMWpIZa!H!_Z=ATWR{69`x7N8-+C*pR7BoukDU5c~?3rcTzhl zHPw9HkvPdz`sG&BBv8kO?=er>@V#VG6231U2;WAQ`_ppEsOcobw=FLD3@F>Oo7jX* zHTE$rycvUywn%R#WF@6H?#NzgKvbG@=%fF5nSz_Ld}@j)YV^GXrFi8X8Htoi9f?#> z&ulOo=t7w`qub4XqkVAy2ezWq!^x@mIgMM|M%CI`?zFwC)HNl29ZezuHlhpIGc$_S zG76n2M@DhSmof^uml#Es9);XV9fi(|^Ywb!7xCpZBbfC1e>H+pXlw137Sr$nXQHP0 z%#T?WtOaK~?!(6zb9*d7Ryw&$VlO@wkm8{e6k!$bgg; zxXTed-WDoWNC>g{6Nflla$c30vP~&W?0t7wJZr77_$X$If?aA2*a>0DvU%o7ea^m>&-!aWwRtjg^%@a2kap2C04 zJn`UC`h-XsN>=9f*rLg&)6zt-eQckav3+<_UprM5Bb?)6i1{+Y4bnkIs9g!n2x~hU z;l5ct7>yob*|DE7HpZ*Rb}_#!-O4aM>cA}P!bm*evOZ`&<^UI&SFMv}L}PJ{fg)oa zJrmy?*X(YFoQJl!nzzKX^>S1n>3r(`8NwW)cfhdZAR3-L8tbuQRjB_Kyo2L+Sd5n4 z&k$9BP%+1f(`a|T+>u_;b_@_Ro=R&@dn!F;4$cubtYKQQap*j}k(>uhml*hRl`FG< zOV>@-QrV)+j#c<}N0xeeTB`J%RC3I>Cnt$=!VrUUm*l2QOA6wxFw>#|`=f}bC!*-O zUG_w1#FGZpAi1aI^MyYcWDEG)hyEjo=K}Gv^6Vl0>(C*RqD(L^F~kJ^VW6PV+KLJ9 zP#6=g!FC%zfLW;S0kfdX7^C7bQD;cA8!of`7p{@*-yLogKxwY1>HB@Mj%78IL*h&f zp-jq%JR31@TTMxwU!q6ynaiZLHhis|oW(ZQ-q$!;{MKx0u}Bz}2zt{b6jWc^)a<3# z^^V5VRE|-qsmGsbCz%Iwx$^js9XEx`?X7jds~LwXrxCFO6CR*qgYZ8N61>47#bor+ z$mP6Qf_`eI!f-^$D#y9%9LvZ8hAE)*+tSRM6x%+TBsLm~1NA)u07OT))Rdb=kdkA- zDEf@ZrJBbp;+sQ1hq7p7wCu)_%k_Op2puEa5P7=1^9KZ8BzEsE0;l5(jRmFj zm4Ao}^g-@q*_1BJ34NC~`*>jxm&!vQt@vWa+tpvPm~F2b=xt=q3OCK_f**6Ey53qV zK4;e##7+J@GfZm+In(P4y|2ym=x76W6Ibdc>aDB`N#J3aEN{IFM_|eq7OR=v+01A& zhc@Nr=nGxIV)TWXp}H(!5c2NI3^hB0OKc$M{>Ng%XP3lc0*DfyVc7`vGfuM_l#EKhIe(Q|zh#r7I%3Uz9cx}pWjZLwb zaQlU|?(kc$@ zOGo|qcZtVG*gSN#P)(yd@;6Y`@GQe-f}rM zsxFerZ%!t5SEG9KvhbW6BvUiW<(G%?0<`{ml4QC2RJmx8IQa|7CS1-8S3F-m{gO}} zsfE4#TNeszlTg-=zn$U-z-x`X@G?T}@CJzouLq${nR_Z*YKD73HIH#!S^>K49py?V zpuwn29ne6t_hR6ww}V(Dz|hJweCp=Q$qjy))>GbbPpxo{GkBs#UWQ6p@2Uv!0vDjg zoWaurVSL}O>Y}lx*;HlR5qR{@%IIZvR z863-&Vgk$r&tJ>bCQAO)P)5AGK{EB|S1n@a-A%{3IXTptepC0?kVzm_mR$aBrUFzGI_IWUwHGs7LK7X5;@q7fUK)$&7IiapAe zwNx<8SSX?OcYy2{jo5F|{WqX(9$pXb|TEO;_|`tECV{?=p4v8j1e%XZDX7HV^_aa-YP2QZb(%kT2h~4 z4ap0{8uBAyi=L8p4`hudR>SMGie`AH+Jx}mW{JwwmUB{BqM@_#O48k;7XV1MLpvv0 zj(=N{#`sfdjM-f2l2*dPs<(&RGfpCLZOaEdC#wcJ)+B;kdrWhdwvP#KFpbA@O4wYw z1$~xT+vFGcTsWPk-!PL#()8?vWbgJmD%PIMFSoZ=LZ<4WC)WMXf1ljXt_%{Kf3P&5 z$7JpF-w31-u^S4J-(K<@O16Wb=?4L<&EJ)(IRo;NZsjcj+$vYe#18&IXjC$<^Xt3Q zb$CtxGxW=!_s9DP$H%FO7L7~DqD;0lbv5_geH_<6 zU+rkEsdl8*5oG? z)F{X;sNu2!#K0mX!D>KT#WnSUunXRTp_|2Qj%%T!MT?59wzS2H3Q83<0VGinLK`tw zT7#mUn6!;bVbSP*zjw~r&E^8~{r}(deDF-p**SB4XXc%E-gz&}ZIcOC5t_DPW0PRR z*pAI^?_qEMmz+c$e<6*0_iSBmJIf0Goy%>%+l`&iy5+V{-d}DT@-FT8?{eEy?_d`+ z!f)P(6QoQjmVf4(^*4NYx$Q$NcS!g%?-F9a^N2eVU2c2Nwt`%e)%+)$bu7ZP-f7u~ zOz{6I?uj%C!Rc$rUmL<4ZsF`9g|iNSfnV~vB%8)7c$<-uxHM1R!U@|vUgNR~m$xDJ zKFncpyvFvJK4-Uzzj!e}C5C3z?awpNdATrMy3xVSG}>K@x+J+|Q(wHJHwWy<@>8s! zt5L7Y#+HWtDx+29+(3zXS`2${j(Y10Ju9|2Vn#}}{mX>@X-jLhg~pd=cRHAW3Hi7E zFT3~fI_Vw;9@7qMjW=JGIER`xR0SU%01oo?(@@ae+PYu5m6p)08(&H2)=hJ*Zb`42 zn&Q3E{c(unXA5JTj_o!|PLaz}kcrzd$9ls|m$BX0g+eC!bTiqS^4p4#BD-9eg{IlT zQ#)`sKLCm}2&0N<9$e^O!u4tw(PwRORHT16Bx=irUA(i2)k4Y7tyP5fBuENKUNP-@ zlv0!F1UkufW44PU)kkKpdW16Q5q^!c=ZM)c)1K+lmNH5fcXicB%lXs9?egTI>KE6X ziP_6W@s_$NJlT#1U~DFP-~p(}jKARo3R`cMS34sh8xs@sSdJ*g@zw~$UpijQNhdJL zH^@KMFp;3Uj4BSO&u&A<(66HY1MFj=Y|Qt2R8sCB8R4+IBAn091=5NPddMNquZ-dY zG8O%8HEw~^QEd^qm9u;?JeQdLi$hyeoxw>$-0leMk6>LSB6j0~V!kEj9lEm(C_QLf zwPG$KgM8J)Bo;pNGM+R->=xy>bw_=Sc1IRucD7pd0a@slm@7(=g+~F}P?5XMBt4pp z{73@zQM+J3XQqFw1Wa${&T7U#NSkE>qYkr$CvbdN+>gC^Q<@l439sXU(Xa&3y0lPA zO&(huq(H)8cPPQti{Ds%4)#jH<{!9dlIuZAN@xGo8UpNgpa+8}hG{ z;Y9^7KD@2}!{KdhAKq4Lc-zO;oE|F~fdmsPvB8}zBb!hD2f|am zB`7~2o!R|38P{?DzE++1YnkK*E??U^Kzv}RcumOvED-M>cGt1`)~E*`6^Pdx#dRcZ zdI4(Thk#DP`le+u0SY!6PL#LT$%R~N^<}|CN)63N_R!XOL8pX9uV<5SHsK>P- z|IVgpAu0QQ{FO51#87Z0+{gz{L*lT&L>E5kYLWEMdy=D@vm zufZA6=*I6*b4bDr6HnWPs-Xw+xbWwle^2Gev)F;;fk&xboZzM9jqJCTZXAlLO80ja z?k1qe^-9R!QsZuw3~Jh~oO`Bc;tg1~?_)PawEmN{sP5foTPHkULId_CG~kxwX@F!< z?|Bm&fC2P0j{nYAYXe74K$V6*Rx1o{6Y%vqk+Bv0k;D_9kPsX}h~BDGDUrEz& z#T9rrI;1vG8&y9#keqbxVb~#|0V1ejUeBw@uxHGC3K#Tz;B$Eu9TU%) zzEm}T_4n9sR!4YnK7YE3j?R-dXMDU5lHO&sdOwyyUr5*Kv=CT12srI zs{b43+F&dEWRQ8pW@sAbnL`sO-IVKG_9*R$`q!)GPm+b9)fD76ZBQ@$V_#HKgy%aJ z^_B$hnh64>b>!NrbJePiR<4)%ZOxHk-hZ0S@~Amxn|ex{{_>JFM|P_kUSrL>57&b< zZ`--?=8cXwuP%3yFY3qfsac6NmBLFA8;AxXJr|$DJxGgdh0WA2AEwpfn}@y$^@nBX zH)T|s&s=&$?t?)=TjD5a?PgGrn9>+_s4$8}Z3m;|5)wIj5Oo1tDAlUyHx&H`!lQ&2 zt+1MB>})7cjZY@a!YM487r3u~lJ6&CsTnqDe5q)hP|pnzmd3f5;~a?l>w^{UMjrny z>1nzf#w7l}kY9W-%K}r+y=Vf9^y+cm<$2c4A4E-*w-tUUTYsr*Po%^Kd0W0wpufnh#;!*wp1cnzdHO49Ie0w>atACdvdOT$&yRK zA(V`eVuUpI5FoCp5g=j#-5jA-JwjhvBh=D9LXtr(qzX~#6X4y#yGBOX%0GP*_(i6z zy74Rv#nh|4H=4s3DBYGT$ZfOw*WWevOPp%$^KEjXF=&@w?4~U*j6Os1RQ(VQVH)hI z&J$%!XRsVN9AA#3WKdt+KwsI2 zrEB?Z!`@S`H<+Bk<7-3nV`s5;ajJ;s>`2Z)*Mht?iZuY zBT7#2mX9+dS|<{5E)i?2h>s;A-Mg%RjF_GLrnQrZ$IYq3z0+I_ZLTXiA7>0$-2Yf~ zB{Vn!r4bh%bh?EKoEYZ>_W@5xLr02G%l;r(V4J#Vt}MC(YQ&fqHR{*n_wC;QoAK*C zTjmfldpneE(I;%1J+M2lTa_>49MFKGSx5ejhGhISHpFL|n*L|&cI$p2W@`H695HkK zaWw^MQ`0g*H^D$aym_cBI(e9U*K@5>p5`S$qb#!>VGW4yNRjiJMD;}8Y$ENpNn@ZU?JwdxlWO=Z7k zT2JgFX6!n*z7INun5AaSn4gGruCrVyIvNbNhZ6cP+SDet|6~0=N*nf<>ix+^_2EN! z!x;pn!A>pyzTbSwqP35Jf}yp+vOneWrm2mxE{_toC?WBRSmHExR5S4vl34Z_&Y=k@ zZ;7QmEuJ!6Qa&e5^b0i&^}+68k!{{lS$Yp?dP2U-L8ac@*5o+w5jQE;j^IfXmMY(w4OzYB3 z>$~n|DczjOk~#e+baNryq;DQo{Q4la)YcjFl5esHcIqeNGqVu(h%o0rZ9A7o|#kfZV(d}W>b&eh9z>~*TH=T~TZFJCft9}x*d+Fq{ zQ~+U}ZDgzOlZl#|?THp<&Yg2?cpvnmW4W93hUfq9CjxuJ6RR;JyXmkEZ3LaBHM+TWzi0+G}u zzCZ-5xKZNVM;k)uir5f3)C-OKOb61w(ME0to)eJ#6zB{QjKjg(IeZJJC4~C$SmsbS z3bT;wlTaFa;Y{__R3WMzlxMLBjxuT5YYgXan1P|?-(Llg3pP}^cYs_ojjLRN{STBK zIm6cv&)!G@s`JnKFTP1PRJwOSurFcDp|dy=^UZPvkz$*in)c^>bC|P!A)ZR_U&qJ7;*3MI1i0%e+cUVTYJyd&S8+oNbvI@s*1)JCj`iPgbpV3KUd`5F` zbx#uT;cLMrNULgrc z-{uVVBX97KvBUXjm3Uy3!Q3oexa9R7IBXWMF;yp8C9gkb$@|5G{ez!DnTn3FFO7(0CUKuz$@B<@1>_5;*rQi=S(7ZMSV;%Ge&znx#~m&_I*p zRup#cgg)ro6A@K7$vXhPLyi4o58AskT+qP$M^dYgC0fO7hq7d3q3V(HqXFgs?z~SA zpnsAcz+Qz-WAr7(Hc?f7g;X-2DGazAbzMfO%=x+Cw#%X@VOX=rKaGfiM3i7JIe)!@ z4Ym=;%*YhOlF?Wx__aKW`m-QHysJ9h@6IUnun?Euu1N{;57l#x5a_E^7-d0l026Pp zF(m^rQ$0U%;I{)@E>@G>t7I`2l2ek;k>tHa@>tr*z&WDJ*Ha72Y<-eRE1$6=Hut`fwP5)q|$u~7Ye+zRG2>u@p z7hBDZE*vW5I8+tZ{;2kZxq^ty`+$5-QL=FuNiw`YR1(D$BAmSFm>YeJxbAom5)uHy zx)-wwGWNJS?of08{ejkI4M>(+Rn>MDhor08n6a%j?tPx>r-i{9680c_L}LagJ+1?c z9bvw4%PNrW1JhV0{5UCLmwLDrVXa-V1jR>$dO&_o8_UfX0wjSZn=dQSl;k@x(1b1d z{^Vc}1}|#QX9r2IJ)i0GwKtQxuq6<7*UEIPDPbZfi$_- zR0wr@S=heR%y7=JGg$R3%4+UKJg>A!?A* zqULMWucq_5Jw4~Jf90IHkYMJ-R5u~uVC2naT%dhU^>&67XA35jc(>HsmzFHpr7k|6 zOkz_ZS5A~OWY5^8t~yhkb6F-&xNrICaa630u=lX}78`kE@c_wmv73cGe>}OR+3B+D z?glut;O^tiq#c>-L)k7h;dnCXcIMjry{YBLXJ{v67x9{UJb6V6+n?<{t;0gJOeVr?SwD;C2s z#`;ihhAfQS3>HSMx_LGeb{8iTmGc9&;Y2zAptUe`h7*pR;m`zK&vh9rj2-H`BI;?# zDL&}C(pnD_T;Y5r*QN?S6Z&r}t5^jQm`d;@)Dj=Ps#QgLH?<6#ZA~Y;zb2f2&|=Q1 z+PW$ZxCg{t>+?@Suw>`>4?4@AqW|-jAB((D7eZbv>Q>goSd!66Qoj@HL!UJ98T!vw z+KE}54SBK`ILlv@DVUc*`&rlO-|2cSXpsU|JU!*^o35&pX|hNW=|iA2S9=Ri9QR~h zL@PQrA|D0R1sB5^@Tl`2A#Z*JeBeDrCKC!2k8$-P=&-fKF;nK_Dlle>i7~(ZrJVj- z5w}k29Y+$2rgofU^tJ}+U1K-yQb(D}3BI0qMQ!fiSs3ZB#cjpGK?UF&?bdTDiknmPmKcSL61NmzZ9A*f{t z)UwCS#`UFfM(F|Qx#8r6qECa{rf;Nu_kEnW%)MW0f>k60)8U=g&G{L|;l|M~g# z_CuY{uaqaekCqImoz!EH&^H|cOdWV%WAveE6??Y@29W%2B5Uwt~M`K?&G+2h;O zCHXdZ--@Tp`ZMW%IWv~<=h7a%WU%_HTa^T@_;!cn_;c4S!iaYdK5mbH^ifvqqck_! zyhTlDuSeP;ChcMAl%FoF4%s~0`;$F}??}tBBJnG$@P!@D=LYAUKYkL2QV*c?ZoJAh zQe|f-(L7)unj{@Ca??YTOz8?;kJ50PoSRrrYx85W>;<4dzq-SRrh7Tz$G)93w&S-s z3Evi9+2LEP;Z+xMthM@UKP|DpW_49pR7aa@Vik;^NFml_NTHkmh7k;H`mffC_XAZgPv;q&9#8)0*n2RRjcAEqHqH}e*2X+}az zQ=R3a8shyl-r8IwaGJ#aOvy!F*S~%Rt;iphKI{AVv~Q677F-?zFT|EZ_Q>}5XCb>{ z@v9QzAJXw=uWUK(>3s?Dlc%=FU!M?PCqrn}yX_Py-z+ENs`mJy3F&Q9+T+s`;vJ*f z<9DKt5G$unmXB5b0Tjez@uMcU$L~yt&rK+2LqfbGq2ARA@$(blwi0QESowD+z~TOc z_(oYzR(ob8l(ROkJ$`IL{Bn1D{J@0xNJ7173Gs~y=@0g4Z;y9)dpU{YRhKZ1iQ_fu z^7i!W63WR+fR7k9i}klc@SfGL`xD~JWL;bFHzmX?S)Nw>)d}&r3Gu@d;s>)XcP0QS3yqh-G{H>{64Al^8FS3==hzE?g^vtw6WV>YA>R%M9bp{rB6PZ;gyy|J;J$XGVl#(s@RSV4aPlXc3vIALNL zT|dkEYq}?4Ke#2K#Y0#yorLMeidpJS(-I<9PoOuG zWv`xNIIcy5xQ);qzrI^G;p+HHA0* zCSlvVOPXp;(~Vuz|0Mxy41#j)RNP+^hAp-0=iv#TXLp?wk0t=(&s_nrmkHW*7{&S6 zpuf#zZ~8nTVz@-SpAd0Q!kj*j&9GB*pG~MR(zU{#36K|~^PO_fV_G!bl2BVgLi#`V z?vnnMgaw0aZRg^C$41takx<+z5|Nq^;ZImn@1UvPsXc` zG+{lVn$Spy63!g8!geuX8sT=r62i|3eda*fccOw}ZGr z_rtGjNB6DW)AL7eYKIf*ZqZI-b-{)0pWkc;V{B#{^0@=L|NV*Gq5H3y5$)){fU#*u z_mdJ9+v{ByTSWrhB=lFO28IN~CZhYh6IwhLiG@z-KTMe1XLSACKVcz$-?hKLy0{%2 zBJSI%@HReoK=)GKzr`KRvj;ae?G6ZC{?Sz|y;dVnzaa-?QuTd@12`Uf0hrQ+Nk-|FZH(e<-C;q$Fs=frOl0P${DK>SnCUn08S%Vh6>?%fiRi0+3c%;`~G zx1Ws(753^nYfedk{1;u@vzSTM0o~6_NdInEimoPM!5DDwJI&EeoF6)%`|~6s5#29K zSWzy!Uu#ygp0KlShZ{+jl71tG zl-+6OeX}vc6LQJNg0!LQYyaruwOt~R69?Mo~p~+Gi-#u#SSD(S5Y?~3yMx+G$ z+1seNRE{Is8u{!vL*i54T!jt> znT16Huu450r-A?sh9$$GjS$Q9jf;xvZASRZJUR5Dqx#R6STL1p}uMYk5zSW_BljHf1)xY0# z>ff+KX8(rpjP*~%V~^55o4?*D*3q`7L^=X2-iS+pd24U+G6g{e-9VBLe2V zuj4qyBn68YtTa_!+p#BsXbOf9gtza(5JHuRnIQ+)g4{CAug<_<-_Jf_Ul5mv+%shM z*{^LIn9`t~#oe`($9;~|nJc2B+{qdPs*sdJchsPpMN}i+p&A#a3M@`Qvx#cWgJd`R z;YX(c9V_i_q&vFe$3P3ZOl%v*5q$~q2gxwqZnzK($3loFR1i_0-@@&IsL5DFMtdP$ z@Ws>w=Ih*})R&0QPnYx^@WZt||8MZiN9i=TL;ll#FhBdj8DeHbV-ZGebTVk8F1{?Z z@h~nz^~D!*vQzAs17*M`%Z3}8oQ6P;ys$4%OUFFJnfcXt+~i6Z$)h`l zy~9|>6A7Kag$bv2BU&g)&O zr(pxBm6*6Y6UMf4ZK`TNw`0Sp8BlQd7LvI7Y3z#T`DFvWPlj@E}!Tz{;RJ7E&3 zGv_|BY4AiG&9%z#YgiOFAcuf>SqLvVqCT;CFd7vMfh~kp&pVD*&FPZXf15P++brE! zN-^6DqV}jkKLKOs*PAHtG{=7Ug2I8XSMP0aa=VdSBHb6jDK3jJjkLyshUkU(p-TOSogI8DhU>%67q5ub)f% zE&TYx*WKesK>^Y)i-1rMe%`*nLisy3G3E6|gtkNA(S+Kkp8-hS@^)kytKVgevx|y= z2RUIR@$?}hgj8OHdXWF5TF zTdB0u*+z0l{amlN;;-g_9Bi~81}8f2J@G-Et?9oJ-Ozs-AZ`n6vcZF?)xiVpLxQlK zA6rf4kRbhWE(zG7J!-&>EX{1|BsoI0elH|I?4HKR2C^YPORdEsEq_3wdZuw^m-V5E z#kl_3>Ao49EPkMvqgydL-7iwV7oZk_zGYjpsp^I?jWOnGQtE*-s!fi&mgi_ycWy;K zvsTr@OcA3l&>()L?!DAz>m&-H)N>?}@0v!LO^R5N4+$g2+|zQ?a>k`Gc1dwe71>}> zvGMYDdR2V9D#Y}~y5U{MtJ7h7K1BNI-jsNuYc^7-d70O~<9b;C`V2m&)8V_@^GaH$ zDsIqK^p02Ic;#4CbgBWGhpIj5*PnbAMJxtIlD_eRZi^Sh1lF^v9VsjzeF8h+>zA2< zTE{@J>$o(Fa?<#xb9X4d*2#JH_DDC}ff2_S3@q&)k-Yuk0Xzzq$ zw09uLO2o0#jW1C(L>mZ80op*}Jm+4UiS{i%ga+Qw=!+YM!wFDVRt_K+;2bL4bJe;G z3x?B%g2ZedaEdBRk&RTvHd2--d#T<5e=9p+J_oIR9$DZuB6h}J(W3J6_)x1-WYZ~b zlts-Rw0(jLZ*fD_niE?&8|yh;s80I!Tw4vNU@c}+GeJ(`wqf9eG&VNFofVn@RMWvw zBHXMM5Hv-&Jf}2sLAv)#5_@aiPzKp&K^bUL%?~lY&lvuunsVyf(VPgWzNdJToLc)- zS8^&{+2HRbi$R$T5Vhgn2P*2KhPF?JHy0O4m^>Nm8xS~hzOR306pgl;l}t=`sS|NK zlw1P|xHPA<)fv2sD-00@%s&8-fj0Zm^`H%b%la zQ+^b=b!kV=m)(zw%n-w!86Cb}8|_=NUYqDU?B3Q2P<(}f(tTpj?x&2tY5ix@ufYVS zZ07-t2rW3tH2*Kts8QXp?mL=(z{ua1C*;Qg*$>UMG2M?+6o=4f^&xasIRDv@d#xB*RCS*~@Mu>9&#Ddk zMRRoDcw$a+9fD_XP8;F%bx*)7Vb?oGa14fkO0PvHF{!dNSgvfN|Q{t3Gu(hB@rmx;*c zLm_RX8%rQ7E8Jx~9<6XMHQdXwgiLQyCtmI z#jJ-0T6?8)+1bp!qve^DP9E4FIqq!sStCA69lx<=sY#IO6QEtaD7O}+FdPOaMu*Zy zsb9*M{IP*;*`cdPA**Y+v+=4SnC)3mR8Hxr?iY{YA8vVBGlpk_V}R~?T?s^UwX8>! zQCcc^FAB(yj`!@!L36@sf>fEh8Oha?P;CnN95~Lca|Z8_Rpj5)bOJ3iPXe3O$o{n7 zUEdvkte3I)Vf<(%`@PN9mgHP^hD@&F0~|Pp6gO6X+d~cFVlZc`iDT&D6LCo25QDUl z-(a{i!~w@Zxt0eDu$mi(AcfQ;R8TkUFRb;^1$Cw=U!%0%@Hd$FNn7*Isq5<3hZzCp zPcsVkh3$_DC|G-j9d1q)79oBB-D{H(AIf2@%=NZb7s8Ju;L4V$+lfj5)NkW}YUlu{ z!J%=i_OXyPda7xa!aekHSoD~aEx%s&&t6i;@$8>f7s#|`Xfu+c3? z1xn2X?wtXMrU!rtC-LpMuB6eW_5RUDDNYBU^%z&G;V0lS#9cLd6u6+%;fC$Hijj}{ zR~fZM>Z1?NwKZo6g1#Fn=vj~YrWc6E@6u#Sk-F_GeFi}v))2c}4TT;xWftRvoq^TD zb56m|+;*&K;wa?=Pu#Q-hbz&h7uy!MKN8z@^*Iyzl7l7s`|z9kd&S_SckuPtUasSh zMP-kaX*tc2Gc8R!wBhh{>eqXaX#i@DxlR|ho07C&;(p^?UptqGOX9ubvI2RI!CHI2 z!)aEZr$ryyVSIVG25w&zZmLTv-Sj!c)AEO&Y`@3qb%m+^-?0GNOSK979~dorhSeD# z9^PVOOnie6SL3`E@xB&hpCy4P)2I zGt{Wmdh#J5JlRMq#`6U`vd)JCLWF) z=$6p|C$k@?B6k%?YvmG#$`9VdW^zN*Ug`zYWsIs9A@usWtnxsdYF&8|6vp1xon*kl(PqR3P6IY>X- zmyl*GrdwA4A@_2lx)7}`ZG5D(>?r!h?B?mL5z}0NdXbri9=fx92cm}p&!!LcM!MPj zxt5=Jr44!*Y}NZ8C?N%h^9nr{+%6C=ULFq4mWi-YQh2Y2#Ful@)ZvT;_9O3uFxTJ1 z;hXr5MMGHegFOSfZ^Z8p7^zm29Rr_va(#pAF zUDTiDQSaT4XO6Hgk@NTh%Rh%ypvIppI^ye8$rPN8I7&d~bNIYvGmk}|x-W>>I3cac_AhhrcbzC|4yF*d!+m;|+lfCql7B&#~%V z_yM8(1H%qMB;hPrQn)j>yUT5%jidMxvb@R-$baLT!h0CUlU}L zmNNh(kGgx^2hq`QOeDf|X>SB4^N!~?{u;SyMkJ(Dhu)ALt8a#g+=1U|epgfVPv1D} z=RWi6Io8h$&7bMsV4VK*#;$IRuvBB*gOg$@I2^o!zqC)PRrMF{6Gln+t+Q;Exk=lD zR}!fe7zG7eY1Wg*d^N0{uy)R_)TRt=%n7bMOFS>H( z*G2&e{<7|6bc@s@^Aji6XD6DItIs4Rw{GtGq~_#Gw;{^rQ0+iCU2>byRgWwNW|2X)%>nznS2CwvW_}q)HE5{r{oLj(^xy+`r@I#PFkp7NjE#~> z{M|fTyg6EAHd#)&YQsG;C)MBYOlzeA z__yf!U%C=|sa&788t!s%(<@bC%T_#sgxuv~#J#*mpXrHX9>5dVt7~*{6wP*`!OtRx zGY}rmPh+AZ&13)=hp|oo1LbH9#v-)g(DUD%;<6?u$d0Ke1)Uj4y)wjJ%J){v9M(pd zZ-}vBny!|Lrwul$_e28w+c0<5le-bT(;!y^Z$d^(tWInB>00Gvp&4PBW+vN0U2&Uq z###PHI%Sv+g@%|>!LOwmkIG^<7e2Vv!2kI55;5K$GS|NQA@FTo;#`}hF&NS3TtHn7 z;u2|x`sMXnM^#TAepblORFQL9!kdYuRkDlp8p2Fm?`4QMMo}u2b#)U}demRfXX2(7 zHhm}UaxXWhUQ}Zp;gk#yovC{=g~UxGNh4%hw{QoU^-`Z5`cMlm$g~qu$9f}_h1l6u?A-I2VI|K`^Ga)EG zAc0$+{L~N}%bNwk>b}Q@;0nqU2%4UA^g6#nS}fjxw2$RN4cc-;Zxwmwj*+u*AXPfc zUlu^QGn;lDp#gf|H3x>lGKw?3bM&yg^agysv^yf6tI_LS{UfubyVWn`Em=%xRq%#* zS8{ZtY*6YRep+4lz7JWS^bi{_-Mdnz!ooC<+H)T5M}NCkO={1vlN_?!a@I5aWzKR3 zeW+nqL*=mtuQCp2>TYF<$5D1jySGh%t0J)+n%Lk!cOziA(F+nly4p+rvt*k+8(aPFeg%3&K-@GzTnR&0X=7T7= zKYkZ*I39uwE%x+8nyf2HCdH~Lv+27#i!IB<3{!Sk{8ag=UPp_+>3-C@>Al>crVe{g zQ(vk)V0Km?3*&$EebT4|;x<2x!!!p{Y$vPfa+%j)Om&%d#4r@RL*@KBtD^^Ue?2|} zOB-S?pieGI^gXW6zHCqUAMcC0euLWl#iuZl8k*Bk(yv#4l3)J%obR2%b7hwL>x{fv z;v#S$5)k#b;TdFydiUZ>F zv_Y1e+i2?_WA~auLC7u6shoGYVR2_{cc02Jd>@AKLZ$WM#6+whI?GRzQJR$He8rv; zXmm1C&IeP8VzhjBtiUK{ex16Y?R#-VU;YnZNz%%RDbaz>u^9P&j|eU$FfH5Wi56sV zUZGZR7Lw^A0o~$J^Y36-#KO&HE)p+5(x6L$cgAH)W)qIz(@3n8g zk2d@C>kGUxs(sq4P4@lBtTK{NrXHWMpwNTY0!#9iMDw4@yXhc!_|PM`1TdH2Eu!UF5`nd znE=0yrn+ETjJg8IS@NXLa((0r%!bYh8}c`Vsf$N)<)t8k(Ma4==gtgQ`ze`^4I2{63`{t z{L`_grT+NMnPTq@`|_E?ssg2H$#BK$qoCn^U0+)9?^B zr9W+^nskA1^3zNpCHCHur@1=;{}i~4>PnCh?JX?2hI`(Xp@MC=TdByeuE@uKh>t!F z6ONANuNvQn{L7C;7mF2=E4zrZXsUQpj4Fn&@>e_1oQ>VEJ!i)l|CEOE7roV)AgKR>9TW^x<52)yo{h zY>7O!a~Fw?Pc!Bqx&_2E5+dAH?sa27 zul9sW*Vee#T|-uNcJGlixfay1+M{m%iJUuJ;r!L=wVrZRs#TwirnK+r|54~b_ez|H z?MK39n^>snrS1DJ*&ge=v;2MfJIakG?VY?Z@zshuanM(~vLusUR@&%Zg?m+{yP8Eq z-_34&w!0s9q9wEjeXc`r1HL1XuJ_uIBg8?e`Kd*uxHnSR(}eRTaulCD-SC3mPl zcwel3RztTC#r$DO5->gTs7b#I$veuO;k)Rl8B)06_NXTF;3%YK8CjST0NI=s-obG? z$eJL^@E#{@C9AsJF%oe?F2Pp=Bh37aR8yxz{m{L?_UO>P-`*SRURi0n%~}2%ChZTj z`x3L=_*z2HwXeEVZi{NwPoF)@)_khwF=m-Dr|pC_S*uQzU&4**_1R~_fa%ZcpWffC zc`>|hy+C`0FTa3_O%Qm`Gdr&bX}vkQ-cC}Lw;U$`B)b}$+8F>>O)~-Tmn4n@%wnce zg-6Z0aEzc>eJcby)C-x& zf9uSo@L{`k{#OS8v6*MPw%0`Cg<`@%JH z*Fl>h<03g!_SG^ocB)O$y-*~UZ9mKtO?D0YOAt}=R-@H9@hj+u!`iRj68vn}s@^Rh zMr8|PMsqO}Nir5;Xxqp?htcygvbGm9J%Bh@+s zGC?RfB!?cpX@D(I+G6wFFJfC$Vbwd(XSfluEvLwov>i=Q!@MFBcU59MbAPM$Y12#n z2kv88X)l}aLJ>pncWXV)+o3xehBGvxuwkDebu(ii9)Gh+^Zwm!+ToxF)8V@Mk^vr7 zVSY-zw92H@OwGUe{0X!S6qgu9I2Ly~gUJ5bjGRzu8+UHDXtK>2oJP!AkXxR7nL1m$ z$s01YgZpO;Sw^rMCLZ}X_3u#g-Vs^4WM}ZiSZRe=+8y?h(8Z5~BaOVwYK412|3WZF zDB}~5h|jA%3bh(nc<+;IDu!VShsW!=odU-CrVjrukqY;LO81cp_h&c@5X0_`j0k#$ zny7#}=57ZLIMlL~p$1$f6JnqG-FJJrpB*fI)I#i#|1cH}rX|5eax&-U>WXHr_}fC0 z)0;n+pQ+ya$y}{YEs=ZXK;wXrJ59XhXnVK&pm2>8uGE*pTYI2&&fJ>Zo9GZuq`c+> z_L=;eZ$6;b_*J%A9{e-s?kx&1 zN_R5xDjV3mA%VQla2(Xg^JVTRD!HZ4uc~l2RJz~6Rk}YNnJ$h*748qYs^Xj)D&5Da zLb9mx$uLTKIA7VycaK^mzc~J*I#H)?*EVGe%;CnrG{b;w&2)TLb;(Zk12N!67On4u~{RBwM^gi0v zJ*CdRl6n%nQ^vE;if1o4Xr$qEwCCcB@HRTR46TZ&{~WI4LZh2AdClOpMmu0`?lTD} z1fp1!?#r^x3v5Am>0pk(&8eB(a5>y<%Pnvn6IMUOh3{cm2iMAgN4+p~Bav@{UQ3yF zx^$^2GxzkW!wqwC^-*r_oK12#)bIZzr>okbpoFc-e@gqoa+R&Zgr>(fZF_NfWZ;5XD&WGr!jm^#|?HaQmT#t#IlY6FoJ=YtxD28Xcz?H(9tOq~~+)4z9Z zXj*1XUKT~+uzIlhV4<@r#c8ztNqL2XmKn~=_NbQ;e_$RXQbF_R)zDtzf+`KBbB1t= z^M)GRLyJX?t$52oVHE25l%-knaPN!{ix9px?z2n((2tNCmYAbfn5E*Wl}Ed)RvZ(T zqzKQsv^AQoT)8Hd;Syo>WPZrg_*xDNGOe`_6Y5*qvYZwtkYxEtp^AvzxSPVo`|w^R zROdLaXkLuFjag!hn_mT4$I$>o;Paepr+M0jaay}|7+U|}f zp;L}zb8Yn(7?ZAUav728f4i#x<8r>r9Z=-LrF7bNMnLuS^|6d^lgHMa&JURp#;)dG zyviIg-Zh3XJ0UlW!ZeIa*o`sG{csrKeDm(8^UYjtUL3t6)3Nj|C3F56?{L2Q4t6e* zNh8`Y)j0VbRy8lj-Ma8vV_~+jUHdwlCQ;Q!AK?frIK%sEYVu~);y7tdA?Ruk30Z6A zXEO(MTm`L3@Q${J6oJp%(9xFbp0d&?7}H@YO+Yy?E7@Yp%g6)qbia4C^GR_UoU%js zK)#EG?XttbmFMb;RpQDMN}nSHEA`RwA4r0!oY3UcTk@g#a<6)4wPZi_U7h{Hc=q{b zcDcvZ*$d6==z2!v(_8XE^9l}lpFBwpAXIT_flN~b-|93sx?OUX0z+m;hZ>Ps8e6?L(Ucp{u4tCa!!l=Gx3q!5Q2`pm$6!?Tq}gUG)p5R zkVAKv2zQyB(;LA>EWlRDr&j#Qytf1irBIhvaC3FI9HCN;j|8hE;G=@HP&k)K3&Te| z?fe61$W?D}n@nVc@Pl>wB{LM%@`_002bGS=3Iz}H5)Q7CpNIfGq3|% zmJ|xEN8XcCw@r}s|%Wy0>TQru z!;tEn$fEOy=%USfN|KUy&xlo4-d>q5G;BXLr_R@}=$aX-QKSfTje=ZsQ<8UEO}HCM z&b;{yy)ltmLT^mwuk2Fti))_=YJ2c%UfHMQQ4_q0zkmq9daXA}EwP~qt=ogQNu;44 zlKWt2LR&aEpU9eEnU%gKSk9XOc)R|BK(cQj)YyyL*GHW$9c4Dx*)LhjmV8o{Yx{%@ z!D{^x?IH>iY4Rv_^+TgAAcMYo7>CXNMfKVUY#okmq(D_#_ziQ3$T;TIID;d3BGZq6 zhP*r}r3DWaIVbutoFx(w4|+fq=0^>077Ix#H3TYx!}WVUe=CBQ@fUGO{vvp(-(_kI zsSZ6kiYJ=#VaXYKV=RA_YlIZ*;nj>TN%pABk!-YYNRc*^mkY-4wBw30c|iBTW;`jy z`4$G=kkxMUl^8F}&1hI(h~_MIEJ)KrJ+Hn(MT_kMJn49NT85z!15iwnNR1w#a5Ziq zGA|8^F>Fd0s(ZJrr>i0aT9GG$0mIF9S&cke^8}mNe76VQ5QJj$-PC=<&TMa(WY7&0 z+!Je<2kJ?`?4HE%3t6{Mw9i2vb;|5X#robCF>6aV3Z`Okw;UcV$HgZcik)@;o6%eB3k$#l4iM=A9tHdSK55D1Es5MzH7Q~&5;eU*0@(nQ{1bq zc7Q{HjeBjp1tQqFqe`mZW>s%aELEuXM&FXtde}eMn6@*#Xy^365h26!TE;CsqKU8* z4G+du&Ka^LP}LTQ3|KtP*fPVTzMQMcu$sI!y~b1YD$Q#Vp46*`xgCX9F{L_-e^}I6 z71@PS&$4x(&+y-lS3zz9jHv^S34_ssMsy>m76O~eYxFaal!4NU;Es+H4%f^)pT(`Hg7A1**lCO-}wkXRrdZ z)7_ost@DHnN}3}D(sRg_?8322MBVf{DrC8Eq52@hi$Dq5K@JYsmZmDVD$zyR9`6_- zU7P-kK|;-kF{YWfF>p*~O&GE}RNN+q$DY>V5qgK?P5Co)ENuUk$%UzIbY%tKMEoPHlIpn@eU%HW9u#XxPW#%hUPb zKAM4;)ci+Q*v1KG8PPnL%lWXQM58sZB(sO_0wX0l-xr-fKRVwVoqt<&{!NB-o0}Le zVSq=h{|95h-3om)(3m*J#WRbLNys3im)M$j25ycVRrEvn%5rjdsGWP;;ErWGUx|p~ zap0dWJbjDGdv_As?pAX+uvpjI%}$8GWMgV!@0un->fWWo8)_BVC*L{@d3@UXoee(O zu3xOMebG%Qx8n49LiF$C_BPiJxsCaZ$+L~S0kvidB#sb6=Pc($4Y}Vo>?7O<&Rb4e zlXuWzD7hNQ=sc1!%s}3wRzSWi?@B62xKgn24%dxov`XJD2FB(j`-b4hC@-)Tx91V< zplJa>;L1lBPdLImkO@03W}j~>H$>d56{@~7X#2z*7|@PT-r)5~AzzMV!Y_8lvfv@y zNf#`ayBx-~%-9I0Kv<-}rby7%TA9*gUkT?$tN+PYN8mpm=YVn|DZTp(%F%AeF(8td zhk4dvcAwroJjBFTnlWKkI6c+q!31BN%H&@E=nC5u8WZB{zhO7u2}DdctZ)=cY}W`^ zc*pzSTd0AU!kMb~l^Rg6C*Lng;;!wW`h9zfdCTvm$h!zP5*{MRZwc~S;!Sv&BCEy{ zJGa*YAgvLSsR8sU0BQ>~1E4YupXt_oncm?7SJwW~XG~(A&a3}u@X_;S(yZjIf^Xo= znh@IXOMy_cEPo9lt$t#hHN zMslDky}7rDc~@=R6NTD`7lgau3DcNtd3q*8am#3!5-sR;46}t_@qOkW8xDlN0*Yxbd^lk)}lyoWm9>h(KHO(94$*i_-L1NHSBX zHy0Ef=OSvvBdN>J(aVfO+)x-!gRTbFBf}52K+`dni{)otx?m+4%XDk{G0+A+taPft zk*M#288Go*f0>QCHJ){>WSyp`!PJClK%r;L7e8nMY3ji_c|$E*DKNpq(*~;Hw{UpR z8yw0AE0KR$u)aD|Aknu9m4fU zPsE{Los^NYg`2(y2Ghp(jl;Ay-TO+srL$j-w^VEhU<^|vd(QiM8{AP-VAJ_(UjJc# zF>2@K)Gh2|vP+{qv&kLGzi=QgG@OkAkb;Iga zYroRf2gU!gcYZQ|Rz+dQyHJ#DlG__;;(;&CCjOG&iB0SkYobdZTRJ!S&3Kb1i|w<& zCN_EDNmgFp38GQBVDT5x=5(eAx>Y4MmCR4>dfRfi!ONBw{8+aDXx<-h;n=t;CzxL+ z`n#D(L-i8zvziq~6$@^)sf1D*J`Vq29&>p#dOe?IHwn3WRG%Q!fl{?r6?L0 ze8_RTkd)xXm^MlbXXai#nw@O9e7=p?%0A2AdkoXL4ftK>Y=dl6euD@^R>1KbA9j~x zcLn=Lb}bi)Se$9AuI2R2QO;BRmIIX(0Gpn|Z0aw35p6DXP>OdB`MR>7^OY^mSMBaq z1urJ8P4x{5e4n&1-TQMergv2l(<5Uxw>2VY#5T*V@`To=rzxg#O0?|Ab^i0qzA5%y zDOobS%erRaB4nOcuWX*XR{2ZHz8UDd+4)NKA+t8+pIvrjpl{|6)@UZ^rhHv?&X>;d zyU@Si1-~p1i8{x(CVwa-SJb}}x85F=bOkD_B6&IZG7;F!6bIkW_ZBqAL9yW|9EdBX zoA*P4i{&5tEl4L2$#Oo}NcY*vX05^cKW713@zzbxn-4i|^Xpdg;WZyi&4=t?d|O~X zpqk~^1oI&hSp2FrAM4D=Q|6<}d^DJkHRc2IS~6T~KDL>U-98+c-4Fe zAArc6=0k4Q`SqUp2$+v~`r&_y`wtU{x_#q(p2=@_wMhFp>6ZTr+ zmpq>$JV#hZc$x4Tp_))j*iHC5;Q*nT@D-2{1YpJJ7OQR`NLr+kXM88G=zf7dy-UMUL>eXdu$Z`QU!u$*at~ zjXcc#;~8VZ!0p&8J!H#umW#Bc;ZMI*OGR#y-1b*EpO=5+49e{(lvqG{hD@I|jSbVH zP7_Wh$2#E^nKYa+eb$gYhrj5M=_nN0bWM?Q+xW^yfw7Jhy?zk&ffUvEFXbQk`WFJr zH~%28?1?^ETeFv~x>~a#0uSW&^QX|Sq-I=^Mns8Z<8S3g5BAh`ahMN}Qz*ckEUEsp zk%}E>-=o;zPBoJ7Yn|kCQpx!je1b%7TN1RIU4R9UMVdC3lmoTB6rtmhj(%o660ddo z$H2qm(rslBf)`Tclyvw=1FiE80y7yfL|w*|!7#DDq|IA&n_mMjgWRoO^Olc&W`*r; zf-UK|{&h?i`xSd0R}n``WJ}V;SS{&Vr1@RqJAV^?gY;qQujz;UGn4QVTOG0W5jPi& z;h{;UC@wNZ&t$~bN81~$54jf*dM36UoDV+7jAdGn`mJ6PZO^T+&DEGrt}eIE-PD_! ztXD=o_9}q3V*9qg3gg#`l`AvrwO{O2Uo$igWfkmZ8r%#$@bw+g1CcIrLE4V)mHw_0 zQS!l3m^&T62a-3{lY+Qqg3)`gI1T z2~hjO9vrrEg&3%DJH(oY5PD~By79*OKgsFgAHQiKQDes2QBnbzrjOsPfg`>AgJVes zY+88XqIo$aIeF83o!H^;9Tov=li2mP5$TPDe}&72hjr7$o{{-&?k1?|7<53ru~($F zVy`E+zv2eYjP*XNhf>gV)|;T|!hd{+ADijVuCV=x@B#z(8etjlzaxCadmZ6E-ft$X zAiT}*`8-z>KIh%m_qhHgbx762`jy-v_J8=p-nXaZOi9)G9bHQ4)%OJAdK1z*ee2Uc z{dbC`+Z0pgw2Qe!lhcK8x3CB2m{cDuD7!|!MHmW!5jtdA2fj&81c|Jaxv&W4Y%PL_ zee$_IQGTUax%GPE(Bc9uRhztBB&X8m8o5J_idDmz-eO_2cq_Ee%)&qf0XQvoIUR<( zGx%#p)4Ut&ATYSM<1evT$2oNeGuJgxgxQ?sb6KWkSKi?aYK8vY>Tc&CsK=j)s97r~ z8{sd=aTyVN)hA8Mx=F6{brdB*jk>Vk@W(bexoJ>2%hUMCi4vUxm{f&oJ4%tp_Bq$h zE#4~lcS^>b>p~8G1R_QL%Z&Ei0`i=toNXnRh2s^2ZaeF0+AoH9Z!;< z#$<^%BX9CAHWqUWfWm%d^`SbPl$WOnPeY3q9;%iFey@<3RoB6|UjCex&08!iy1?g= z?j#9yBgUT66>XUO?ySTH&36W$5Oxe5oo=@}%6Q`2y$R%z9B4{H{h=ud{*%_l0Cpb~ z!AQxc4=8;k8Px(M4LA+h$|Itvp+C=+uN{sTCOw%h;&~eKz7a-&uucPGY`#8$d+j!k zmRHGjOlsi!6yIsX-to*ZrVo|Fexd4DbtXFtrTOi!LdcB)$-+Npkr)PMK!)qnc2>d#OocC7!L?(1hf5ub7d6ihvtD`_%U zPTq7TFy%;chWR*MKfLoHBD@hy40^MkdooGg^}%;G^L%b{zNSxv4)oxpOa^4piGpvI ziL!nma;=67k;|ORWbgx#$=Jn=^zofB1N$mjng@g>%(!8l9!4+L-FjqV z1(gpFB;A6UmR5zmZ1UaO4dzMw%ejM<`q_kx_vf#W~c6_-S;8hq*jI z%we;xd8AxC8xL2I%y_JvzhalfPF-htALmz>s~DYzMMm)=o;SyTnQ;Q_ghP7-51y}) z#5sq?r=|M(p`e57D$sLvlbw$Us(}^+D+s*?KAT%Z`P9lUb2aJxO5o2jks+8PLvXPS z!4hNHd~?;@DXXTR_o2|L*s2*ElvN|2wS`M#*==S@x1{Xl-O!%$`*KMspRJT$Go@aM z4zI60WxY-*pLI&_WBMGS2^tye;QNfV{4>|Ttm?i%4BM9m;>#|CyUhxw*s+SFZQ;kF zVjZ=fI)7T>+GPJlzel(^Dze_}Gc>zFWV-T%I7O^ET?;Ct*wpHE>!X5Ww~`DTSE&B@ zA8@@ym<3XvH0Bgzi{%>+a^1%P_#+-Dyl5smGd(@kEz7+j)E5!paAThM8ScZ0McI}-*_!^{M6U8eJjET&Sy zK@myZNs(dub>Xz1;asQ4_$FtMv;0rQabGzg_>r@GrBwMXl3@lfv`H>x^3o}v3()49 zu>CMucv`LJ{1uX$6^p@@u>G3w@MT5{vRvnb?H93-{5_$PChnpq$#v%xwC0kHyTJB@ z{tvu2lG$vm>d;tR|DD>~svW#0zDckzN^8(K6lS2y$dHXQIwIt+=Ze2BRJvJRu^yF>=@|%x1R@Lk^TamR zjyb|ga0aii1Bv`bpr3l_M@^T?uW{NEr#OwB7pTobT7}IXixk%m(ndI$rtW=BJxM4` zKcpKQ#XRIfbWUOW`NxspUDxzEEY3h=o>QBuMAAj*%6j5Zss-9oQ!T&5vfGa6Vu!lJ z_JwZDi#kc2F#`D=f+Ms3XN%Q#G||s&3p#{uu&?lZs6^jF771aJWEzjdQ$K#v~B4qz_2F zz2Qq*u*mOF?VVKH^d%GY^5;qK4E~M3GzpRxdwN#+d-;qVC`75H_wUNDs~i|R=AbxW zY!Ck|$V`;qOPKgymYpT*!r=0Gt+B(~pCe$QM@{|v-e`0&X5#1*^nPCiLXx~KyaP?xV(S9fR_4;lG)fJWHrjM2dh$bfQ&qa7Ulf^u{1$M$f*qxt=#@6j-T5PxaejN2zX=v=k9_0hw z!Qx78ciLgGqR(dVXT3HZu+d6yIR;w9CjrcvTiOAWFYU{(nxU?}MDPzPaL(X^3>dvu zuM88d5IgO;+sGBuxd_GFfs8-$Ilp8Ww!1${62mJ!+0*^KiCh8WfJht7<@7>(FYC}= zTE)n%_{ePS|6%Q1;G3-O|DUv>1Sljxl>$|&prYW0)C*diKuG~vA;8+=1<f(`+Lrl^g_$r z@ArpSnkUb5&Uw!Le6OExJtzu)&omW^)$G9!VV}czyC%o%X{uorSBJky3tcD3)4Kb9 z?_ll)r|NmYTG5jN`8tIH%9WY|Pe@CBugm=T6OgVlf9yV3WWRC{uMAJmamS}$Uc4L4 zPHp@ft?Np|?rsKkR|a3N_FK&h+02llQp?Pb@pjp_3N%{jPgxHwp&G_!hL_Nos=rcp-AdD2E z=5m?VTFqfCbk}^`uSESziR#{!zr|B7;=}NX0in!QUy7XBQ~niy!zZ%khRB~i<%ji+ zfpTM)z9C54;S+=8hRCEn;f8w)GxL!|(^481snsL7)sWbfr3Y%%N%#r9U2` zIiAQWN&|!UB)cB%DE;rU!zDITr#3XbWb3*(+`#N!>dkAL_G#uZ6NS8)I}70>FV+EF zRt^(w1D0jGQQ1_Ac{(oc5dIaucX7@OJc1Ms)Ai``Mm&mS`%%+SPcYZk@SsU__K<*` z6g&LX#XfsdvB!JrV%PH^KHe@f9l=wAs*a+j)Yq@x8mcSXwx*_@;)ZWmQZnKDxLf@f zCCc}Oue3rjY@uI76rx=x{OVtGY|mF>`5%>R%+G9e-%ilJGixpTP#0r?oby=D+G0LN7GL@z*lXNV?6xj@TG;G z=fXF?pkrcxvN-X>zmwO>(QZODT z!EU^5U1m@GOL5cb3Vm868J**N$P?`peN)!}9dBELMq!{m>hIOU{7b%G>dM~=v}Oq5 zrm<1KDC17ePY(dF`5$)nbH*Avm%^iRrUK5kb( zoBdJ3I6EzLSv#U3uNwBCc6sWqy=&vAB^{|YncIch*&J@ox{P?xQ=sXPD&2NEoCXwC z_)a(bqwJ&pk_Fx55z|K$BI~|mW^8M7#SOO6$`5>(^O2_bRcv?bdT~lMyNQL&j(Ab3 z)gMYv+pYfFkgwNj$)ldm(5+5mT-1MaE#KdGkpY;RgDlEMzA)#_SPmOpAubUud8yS) znB%S{$sVg0^U#haqYq+n(~gMf>C{=w)P479!7B1Z8tE;o*VoDMQnBq3yex|$?Fw2= zvsb(kGOb-^L1pyh4m9S875?ofFcoqiAo>wLt`*0yrS%p)ueZjSN zn#5;KwV;ybr&%%c$=N z8z@EV-V*zJ(_1BCo1%LQlYP@+1ZeEgXQsQf(SC+Axfg9!gVM-52cg?m5N7gJFMdit zKCp3*vl=f3PoHfC(!(ix>ei9GHh9{>ZM$eSb8N7MAK zovs}h!po0>n&g**sc;xtB6fMNBQ#3ne4z^xd2n&DqW;Hsh8xp*-^aZ0mzJo%K8{QQ zozmRvgx}nty_Y$1ZrZQ+q8vY3p9Yb+$N|TFt5U;!Osp_4AAgs-_3FP?oyRWbDc{4- zz`Zg{VdKOk>G~alu(MU&{458@c2#6@XOKJa0|r)@8>RusdwF)kd=jR%dp$>p%+st- zpi*nFU-crLP;9fll&Hx^peK{o#l=E(eZJn*TC7W71DQwz1ki~M)?Eqx-z>!YqAsqk*gR(c#_Zq9m z;SiyTWWM+Q9fQ<@yeF%j3Ihg7jI<4dB!alEIU3}1r^@~xGDt{jgJ&YuIfrOt39O#8 zA!jzrJiILnjm#;#aE&aBOL-Y3$LP-qR-#u5&F-Z@1}QB(cd3?kMr5zv*r!*abE{Fy3C+ zB9aacyi#o2g8i<1L%w<$qoDnxQ4wx%8VNr6Ww~Z*KNAsN2w|-4vh4EaiB*>9Lbqd@ zWt(M9>tJH_Lk_VvK2*l8fQ(|1V)BgGdpzDDQ>VHf+b%29av^u;yS8l9R@ga0faR_LR>R3LNmmMp-*cqF4F@59I*diI_ z`$A_v<5a(-J$c87)IuxSnI226#7sv(LM{Z>_r%C*LocE%CRN`_5ef)9G_}bs0lCAq zuZp-ZeqD*GP}_`T5zGDH*-#_zOgfvo^2@`V5!UzEwP(|55GcNoH$KAjy1{{3dIlwS zzuN9Rt{)zs>k#E?K@ZB13T6fR+kLa-Dlu(b++VsSlxI!CG-rJt zr{QbC!IrZm;UAk!H$c)&HR*b_X?Akg7XTsIf5bmyWRkr#wnitN_j@E2JfwzUoAiY2 zp`P-sGDfz|4M%+kA4EHgwKMNE5s}>CvfiorBK_EA5t+b>PR}&)_&_0+VwPvhB$Z$? zr>=oj54~}0yo`4))ZEmxKWC1c@s$lTEF~ReZc~dOyO6{yYUsfSH5O>o|}`6 zwWoxjZV=KM$v2Vw#DO=B?P&i`SRK(hjq1XmCK3j?FFr0HH!%wqfhH!ZccG*a%t?TJ zm@Y>@dkN}Mh|-U^g5Ob#e!nM~wVRgGpnYkvw^8N0S4jRAb`B{33mla8V-R=IBI&G2EdYnoLeo>^je;IQL0sJz$MjK#qX|IgXDY1yYsY3o6u*S1qwR3mza z!^eefN*69$Cpq&9-M}`{q5Rh3@z~1g=2 z|HHQ(5|ISHmK1E{VG}Y`1H=}H3gjwL8~MrQN*AIxePC>!kQcAVjpgrM(O zr%ScA8G88|z}!;u!w-&F1(}*&M%l@nK6MeYmU^n)z+RVEYhCz@sO-_ExjnvJR*{;C zc5KQ>znV3r5k5bfVT(1x%L$YlSwc$dz4#=tEs1Cq= zmWg6yzm=lpG;2No@j@B<0hSiyTw)#E`kuGH3;S23{HtmXG7r>5iJ@M6*t$A1I(c|> zLekxG&CDJ5IpkB%Oq9>$H_i84`<@tMOv|b(%+&8R<{Vh*M{2NNlg-gs2b2{hO&Lfm z)2h%N%bYSdmRW%^t+%N#R-O4Zp-)qmGKRp=`@NXUT%JLR8+nUyp4!@~+ocl(@DAP% zeEJ*D5rYh*FRwN6KI8C}0X+(73uW4Yz_n)NAkGPY;S8QmzHIE3 zLOsJ@xPtER7u|v&ghR--tD)tz9NMyepf!G6xOu?REDX3WeoHGuM)E~+G6lX8igkl{ z{WswCug-m1?1jBN@6X4!GnXE0XS6Oopz`n7n*d?^_};;<4Xr;uUc@&mpnK}o(`!Tz z5JX@iZ!o=O>l-g_^`A15V9_&vEvsC6>D1l|U(dGW!XCW8If;u}h;6xUu+eZ@1tZ17 zX@f*f4cB^0RJWgCwu5I!v&i|HT|w9A*Wzh^auUy@Tj<+ZfSdy>nqK}|a0Kk=BP^F! zX$F^1a4Clnm(Ox3GIuVk98E&3bG4P5V#~ti>yD;!uH+4n>G%U$)7>CyOvi#u7fuok zsuqBu$eX}OA#d<{`F_L^{EmFT?g)NczMpUeC(8FuM{ulsZ@?-@zIQu#nVs+V^sh+9_r=SCs;K$INs^j6b+77V{loPWEdnB zaGZ(<2_+5aV@pzDJcBzO&M!TSoI$MV(lJPFPGjOV_iHop%zC&`b6fpH8rVamftkWy zZAhELOdv|k#FTM*gXqy-c*?frk~upQd2 z%JAT^vRI8kUWhO)G3>#GdpIOvX{$GgdD2`R9OxMyS@ugh_~=VTV=LV0U*O`}{%?2a#xz0~iX?UA zhXB702yb16zA0MVBGJpelf53VKiA`(J<8*~VH|AyK~G;DfYsBtXt$@Y4yx$}5R}yD<`cCtD z`j+H+`pzBY={tWMaA1Cn?9n(hWiy-5fo+Qq4Y+8%VHv6?rp{?hLRfMhs~D)t+48=N zt;+~1=um$M^2VYTJqROq09WH_9n@G>89J+)_g(3`XsxwywpE+I13TN_F(cYAC1yB$ z`VAx-H=B6w8>G74an+u_fOLAt?c|$28rR4-{WR_f-{Yj}H6UIozklY4`Wfo=OV~e` zx?&H0N0t_l7q!@a0&h#r^Xr%PhGfp)Lri;5!Defx$D2m8b?kW5Uc`>~cqh;=<9W%1 zQGD}~3FG)4$BczXFwOG_8czzZWODlE%g4KeX9VDZ>}|1u)oErw*?6tc@GbTXWm_ft zbmQJ4ee|!IkB6lH%bGEJ#EkE>cN<)i9jKNr(!ocU{VG`|1xA;`=d?K^^m-McQ0ozI z6=jWntD^V;kv&D{tY%9`epFG4DPp;p^Toyk*i~ljjhdLw1bY_i4QpzSm{}v6@I-v1 zvOVqx&JW+2jS^5)_u_RAjoi(kMuWN`yyF30Z7s_bb(l54)>yVdv?3LtR;XBBARURi zh3f=vYMFQbs;j<-$INfIUA8hUgUU78h|dO z#wLViGTO9^crw~FGG7$!$;gI&ewEhgEEEgolpPA$j&`_lAk?nBs7z2;Qo zFZU#xE`iZb)@vl!)E=9fS=p=J7mKafgkx9kqg2m5H^3!}uigj7SMPltOYjw-qh!nc zl!v-yA8}z7SHyHEMQk2k?r*gJJ<-3Q$XU>hNWrS%P^t=ZqzX@y39e}Q>RF}g2T1Fm zhHS`0&F^K9n;w=Dm#;1bb7S2htqeh`l9{-S-~Jc$Z%Ns7n=S*<-)gltzxDRDt+&5> zaqH~@ZZ7~XTBm>E5_#a&#ati{y2bx)Kk754HIGM%3a#e7*?UEC`2dxq?U65#|LMH{ zDJ%erwi{( z_HeyBT5v?(JfxFxfi?gmQH}4V5XtNt(bcuh#o&a55X?wA8+uzB#`>)ZOZC0|C9Mp8uf+0s`da zN_oSBvl#=SoHbHRG%flo!If$HDSu8~&W}wwG}O;D{pT}MidW{*EV6KM}1|{2d}4sVwW$05Moy+qDAGg%=>E&xWY~T zs1EyVEt_q<**Z~MPt41GhXMxhhStjXUQ@wp*`j?3sj@0-@s?c;9 z&#h2}u0?7{Pdx(vxHUPFi)A;^eIX;MhtwLM$zWcS*|e2Kz_C>^3&8sLZ*@;MZQ!0@ zzzhg~!Flu>{VRDMY4-*>I7F)|2gf+6Sw48v%mi>pd+6D`|%L+C@1E?-;0OeRMSaVh* z_#Zb6$gFy@dF~Q25d)8i@V{t(PFy8M;hu;z7AdQk8)0%CL^)V$T^885Z)E5{`i=hUDjxl?- zdKoTu&E);}IrhGHpX0ZDhxxqC=S4oZ@X6x-JA8l4$MY^&YkYro;6BHf`|fiT@tyL2 zPI)+|E;@J{xBZC&bo*qwgi? z^?q=g8PiVVxh|1sUBz=f&yMF>8C(J|qIEEh0PTqC4v zm`l9m{DQ37g5FMI$mAAe&NEJ*A}_&>44YrKby5ED;AOV-1N|<##^EudmH~rd9f=PN zh!3`*z#D}Ef178r0h24V>pE-Fa6J23?M{--kn(Z$;@Df-PxjM8WvC-^LGXKJ%a1yOHzEK)=OorixCn|7=yiqxlXe6PB!sd&%WD4& zK^;(gPK5Q7pzzHsawk#K$U?S*Y83TqEpPrB&xh=V_Gc)a^;fRt`#k$w<{0xsWOS(x z=mJ!sRl76zKIsJfjFP&bQ|IW^Hr&`kT|m8Y!L0LX*}i&OB4tq%F}A_$PM-yjebXpy zTGxf1&u-?km;{W`N)w7<%+>ohiQc5y=uHME@kEpQlO8gQZT*QaGw+xf1DwSqy5S?@ zjt8%O$QkediUh-mXTBmqE#lo?5$y?@!8WQE$6q^FwY(n1zZ|#V66gFil^KOF7N3v! zmqg!)-UeNoRJ?4S(n0Z(-BIzP$tng=%YFVg%9qr;N_ZE0ZBqGC2Nlk~+fn%vaOk-t zQb0vx)sbI(<@h%J@tvmo9M|#rE}!r7N$y4Vd|7pPIGx!>KA^*uh;)FNBoKe@=q5K~ zd92XuiawgjRdl0E#&%Gk9=^g%-Z6sUw9AAtp~+TpmbE!0Upq;4zKiFi5>;QCUR9A< z5JlR-tUpZNIU!`}?2O+spApbqS&CyK`Qu-6jy_gI` zOh*yHALemk;`UFGj&sLi`$?^)RicM^AV~SbT^x};=gu4l{FlDUr8^~bi4~D@q7TXo ztjS|=xrj!NaBbQajmi6>v7>S)CinenPtz3+t05MX95Ee#!>=~WJ$HVu&@gBaolbpn z_zDvwl^11h!m{r10#4Ut+bJct%ns2ln>g$iNOg zq`7me9+!}fx}Og079K*6^ZW{U^q5zA&w5$zN^8~5QP>u1QF3@0V}19#Qh{+3V|t)x zg4k<06aLgJk}@ql$!P9IJ;&6UjmVfxTk0I+ew=Cskuykb>fu+jKbERxp-0xOE~#_u zY;AF}nRz5?)66SrW=XPzKmWC~aQxqG`NJ4beOdP&+QuU3z9DXM<0R-BSZ z(|WL2QI_iUl;%nfo{ycPwyQoUqjBeKN2o76%NdWehWTN;0c=;9+^`B}n*qck?99N; ztlU6-8a7flq$h2p%uJJg3{Qd{*kg^NtX;n)>vglS&dcsJlO!*2)u_{Oj{R<_=`t)R zFVGz!tDOY?z%OLHJFexs*GY$rI;cCu?uWbXmVVHU|J{pi8vpGRrt#LJdcqQzRiO3Q zkk0yWAi}Prj?fvP+8uM01@8dFWq8@cPKn4GymdoD9tLk=%!uX+th(2F-BaK@SPB3I zW`{CC`Z{X>S%)R-Ciu&J>bJb6*WucWqjebBbHyCbREe*OZZ#w&N-fQ~oG^!@BB zQ)|xq84?{L>1? zWR2h+Eg{39+jTj%Ap|RYhQ$fBF!57J&LVHAdhkYV=1S`zSxS`9msV}6KqwN`e*r9w z7{X%NQkqzptq^t&cWvlYJl!Anue`QcbbOP2k}x)uaI8 zMS}Fw;gv7mpz}t3S=e964te=?dlOIzSl~+3ZE5X2vhmExVx_bX8Y#m_kTvT~UNF`b zIs^9!gCMBirx7 zlh2cU7V%-eL2Kw4SCBcP0IQDBN+c(z)cYAoSlg^`k;~d+oAsg66pN@SxN&wz+RO^n43^q`c?>pRC+D*M)1UBe1dk525J|4n(*{-g3@ zc)Gy=h!0SJ$_ipafgF#-4ppQnThnnCF0uHwc({$1Q}b( zZ=WIVhM{kg>FXqaqld)!4UV_QVfgs9ay^I|XnR$0 zeR7HDCzK%uN7*UGF;OH55Y0?uy)Z`@$QddhGp+E}k&-M$&p$-oHuSuJ382oaV9Xf{ z;+PiUq== zU$;g`baa~Bhr5jFy7^om^PD zBPl@A`^66t`4uw~yG%v}-ND+(13ba>?+RoeSPc%%-?eB+Y}L36!IR#(^fYT#8CTJ@ z`bI+ki1(nv+tlV&dmv!-E3F5m4wP{z;$pe_4~n^yV#+p29Uy}KMEwnM;3;3jwLSEn z@~}M6v!O(NehJr`q^BzzN>!X+Fc?>Cfu>RK=^qkpUPpWjJj19bh-JJ{W|J6vZ2CC_ zBw^&Y%fT>en~-lm;E~$69L8jl_{Zifm_TpIO-Uaky`AKKk{H8uP2=72nI;%8%`4la z=Tc~3rJg`3DzG4x!rCPB*er5u5&;)wvY6$2k~CwFrJtr2{KF$_=pQ{pqY;^qo^qj^ zMR)xd>68ccl$$BWo9AN2Hq)x8U;^PE@HT8gsK1$#%D4M0o#i)@MbA?8uaRdXSn-tK z%PnGG!~&G9&ge~?*p2d&W@6#NH?F;Xfyx<&y@8Ir z2cD32id)I1fhUKAb(2XEb44)m){$WwM%1JOC79-)kyzpdk|d@Z>Q_y7arWrz=%nnX zUy#YtdjUu;|4~ofHlils!QsS&^Xsd}uud-|DuDQQ;b6cBqZ_52;S<>3)^ax%dzPOv z84B))de(wUJtK%9DHYL6((Veiruy}S^`P#YIn@iWDF-)EFR$3uIbCwNrMlYSSrtNw|X}!za20&#Tk3;IGVVdlQRa&3&9e87>y)o2o}aF5!%{HO-F8 zWsE__BV&J)aYvhsea)>c?1`oXeQ-7jNYk(7k@*eBpldVV>b;Pg z^Cfn-zERnG5x*-YXN2|7?oE%9vEz#}77tpG5eT-vXtum)qtqjQ-mm3;oAQ?>%h%7t zwHZ-;Vd=9e7LnQIHwTPUHQvh<+a$NlbdS02F%vw$*;6hn6Fg>nsRw)5r&9bPQ@s(j z7*8(Ff@9kHIw1b02VVWbSB|)M{;%cM{HWb1l!n7&diDbDgNu!-gYBf7JT*n&x8yV< z=x!40m5!zLprd*Oe$qOEKclqx*;0tyl~@&Z?xCsH7UQTtp(~O@vo#uyz=88_-_Ssq ze-vN|RBdybhp~sr59%GyjOxqiCZS3w+Y?zXZ`uwsfN_<8zy(K+;iiI#2TWb~x=yqflDz0=)A za)JQWs57O$FUf2(yR<%IU@{;GkP^K01_L)rG>k%yT6$a32LRDh^{HUira2)rNSHtP zG$fQZBnU_(48Qv68^UX5;uFPUVkNmPzc;!uNb8~-<@A$NP=3{#W6089b-ps%2f0=* zU$wppE*~*>B(ytsR`YpW&P)@)SnI!AeI`ws_2O{WbLI?Nh`yG;$|2ktMO7WznnNH7`kE zTfGBtw7mD~ONp|T=+y_ACDM6l*dQB)gf-Vj8d#fK9>`B2CRWwxnCuNp#M@q}aX}%j zW`>{6l7ZYWG8=&0Ym=?IYR0$W8w9UnO-V9#^Qgcb~c=mD-ofU!N{6WwvcNMvB( zndpxE^lvh1X4~J=#(EX811==N(VVOn0jPd8>MYFGxWt<+OWnsWG(lqIgU>arC>=2n zOR(O&wr|pY9>w9@KJHW2b3kbD&g14mXCth z`iLuvq}6GtJc^FQvouxQi@J$P+;$$*MmcUa$>oe}ftoE#;JZ==r4m`sO>9V^Y;i&& z77h@0E$YmNpm6Hd@qTB~-9SKi%2!F=$yvv0(yO>~;Gj#d{8)fs)NRkdng}m*^{~95 zxi92aKIVLd$?UMw@|~exg2V$J4`4i>RHj|w44oA|@l`Opa)R@U@y<|I<%F~=#;1ic zD<`C1F`hmGezx1->Ttb;P{Nb4Mb+ly3U3p+o8@YSR3-f)6#q9lZt_ofBIn7sbn*#g zJ4O63Lp^+Jo1u;sJyPpCWbVG!m>cBWh|=@O0KoOL%X1#ZyS5*vFrb{Ll=@fjfD zeZw`{BC@cbKKrWl$0TbXTiPQcer$l>`Oe-%xYmUk##?l|F0D2~Y0GtK(1bo@&7Shl z=nVW(?D8%XKL+(JQ{M4PFob;Ttk8OE&LdXw9MRe`P+bvtdIAlN8_3LflD5^)({UI6sqsff10KYr-CKwhgWP(*kxD^!E>zQ zb@|1QAZ;yLA9Ga_j@b8j%yn0O0~6-2GvnFeEv}jIepb;s%eOwi=#e0XeLPeL;Z8|&tDWX; z(%|Bx!_!!o$hMuYP2qwWexd4+Kd#I7J(Bz-9!&<0&NqzWMk6jcJ|SBsFkE)=5&Jqc zsMdjULiVB}7TOekrLfeftA>(gV*+$QbR|@DT2~e2*x78SxqviD5AiL=K57&@pS1m- z09&Z5MH6d$*=&%WH`SqO#!^H!d?bT}?ovY~Spy9dI%~Jw->zP@ll@tKf)@l%15@%S z_1g>?ScIdG^Hn)f-P#SH@0psx6d*ytYjh% zWrDOn!3l*in5Lf57-*r1$SeG6$WyPfS2uHA8#&HjvFp_K5Grz?KA2W?*I<38$Fx*I z#6CIWfw!_#nXKv>llJ{?I;~ek=eiJ6CJd^)K;@ZKBTM&Uf%^$}%>9^_TKLs&S7Tzq zcL2`Y)WEYkZAT$Jrn8 zhA7{y(qU-I^RC^|HuN>eWUwI1J=kQp!Nix~g>`%QorJ4-U1*>K>EH z>yi=mls`i!q((IsStIYVQ=XCD2vZo{C_@aTP+m!$$~MXHI)W?hG?$ywMi*;;_tknK8Gc?;i@18tI?q0jOJ-StnNkS0koF#0}Od=Xn;=v+&WF)?|Z zVlazRqS_5o8@_2jx`44%aIr_E%DT%q#7*Dj$E4#tk!}2~j7TSoG`CR_YD%| z)69u)U95;hG}zOhVpxv(%AKL}#bx3z>>|uNxxpfJGDD1y`_0pnzH@N6VLe%x`(l+5 zE-rJZaG(7&L?*MU;?mOVR98+GY`)f0cp`I92I{RWu~9Y^(GKaIvE8QT=AEfct@nG$ zO-&kJ{saS{FYe`HgR@B{d}5>Q3hG5tQ1B~xHI+9Ef53RUMP%t`5Cf@CX*uX zXic|S(j|N9y#uH2sSBm2{zxKYm746YoR0k^&cKjK+9lTRGwH2k5m~Oz(1^rFS;y)| z^E&%B5|0kuF2#iPLZ{26kHZg&F^xkN_1Aqy(DjI>;J-s zN419Nb(ac&$%^c*fKzo(XyDZQ`=hlUmwgTs+;b&=+~ECcgeEa1nPD(~#$FPd#2LGk z%{MkVS3T87*nrUa+`5@t);NR36dVc-5W6><(@9ip5J2J{yl8VZZMQj3H;ah)zu8?Y zP2Yyjl2OutJjeQVs9Wd?>z*9SUsWe>$)6;)@NR^HlZY_sSKs>wQ3@v^Gyqfx*)(3P z?j(PRKFOLi?1dsx(XGftQweKa^$BdhXJQSN=?XGUcax25E;R>rR4Sj@g^rlYi|;Tf z5>kIcZeVRD#2vB~ADA^eXQ8aN$u^s216$H)CfV9S@AjoAINuQ!SZ6C7=W)SI5z?E_ zejx$LmQ{BLK8)8mR6D|K3ClFuOUZgLyokTcugAxE7D7l3-z85f`-=C97rMd4sxrW4M5_a zz?5LypHhd*@1d>onH)ka%s@a z`X-CaDkhMdH#Q;Ln#xEYwj6mizZZ5qI7Dlv14XhBwFu(|7Gh#2$@GwCuR0*fY-A$L z@;&A6L7Bx0az?x@ctXY5f*X^hui($b5|Mx5J6)KH3Vc!l0;NVzxrh=7e5;xOZN@N4 z#$^AiZ~{>JM?BBmlqNnG%sm_Y4os|V?6%*1b3(_klq*oTWDkiup3%XTI=vG;f zQ86K-vY>m#gzl9E?urTS%7Pvh6M9q@^sJcB6I33MTX2MkPVkD0#Dpxwx=|WjkQ1Gd zBW8{ha_Rl(gkct8*eBpRF)}(~q?n6N7-el9u?4Z$npkE={*K`3;T0%5YLU=ppnLSI z3?G70O!;fG!=E@q`>fEBSXjcV`eQ$pFO|VI8w;;7cjQaCWHxZj?36v?#P&$N?~(+WZ`8L|SIy&1HsLqOw{ zeZldoCHKB;5e-~ChB+zwp9~&p2bxjtkU{3XHAf{bYd_iPndHn?J=u^t%<1DC!2gRm z-N2l_{&2fFjS<0rG^dx}C;~*iAg$v463X_c^o)^265HnMFOG|KL3*OH1BHFfuJIf! z`ONOfD$tH^ig-s8>Jdhb`PRRxqt6qTcVu zV9YLiz24LDC^^ahZPe+9Y|0aGlosnqPPU(&EKI?AmyB zYHKKBHTQ~CTeTQK(W%iQadJWr+5uZI)$2&r5gE;Pb)|chgcv$mgHJNHv=w**LwVXL zxbs(F@zg^#ACt{i^(`<$uCY-0vTXupM~@)Q5iCE%&q_!RBrSE4;|CpR}ZngEmJ}CeL7yVi!wO=FKziVtCsI)rcO{N?Dqf)OXKs(HE3r$@DIj8?|-?*?C*1{L@ODR1b*mhVrf902UbFwLJ|7aicPW%>`)$r zziO!fR`j{H!8~+S4N0%wFJ-cuS_o0SO^~!49zncvWFTa2`y1WQJZwWnWYESxJ>fMZ*#C4WGyWQ(DP>HsCy(bdo zH3aYDy(Qpo@ygI?>Q7GHn=lNtT|JQVULxL8=;Alk&#&w!MvV5B*mV`eGErSi6$p*n zrupvB8Obh{a33%v|GiM;(~auMl0At$_&n1SvP|^&AXL}(yuzv>@5_LmY9?Hy^87*1 zN;h!>>Pr$cb7F;K1#b3ug8i~cJb7zd*x9G% zU1ztdBj~IYl6q*`i#@95;F*?QfSrSPTGI&P8E#w|R--^uUV1B$d?obEO)!?%9Uels zL5rn=hTXHahNBxuvE?mDR@YXeB<{Q5=D_6X0OcwEXvDGn6N~#0MxjNOUGf21pO$!L zX{@MOEs|fMW^_`7=*ZIwP=ZE!S*T*WPEEyHu_ma*EEDYohYwriT7EMz z=RR-_v}LEYv$|_5kJw}-aWn4G8tqAJsaGW(O>0y9N-mqXLET-Nb<*T8EzJlkPq_Jq zOHQ&C(XA+S5m+JW^QxcTiL_8aecMkklPI}mX9Ta06|!ZY6+$nkW#?Ie_XZ^C@Y$df zo677^9?|f2UL5f1EbESzEBZxCvf}v!y6)oX(#-fEk-|r$2Q@r&xO#WE`E<`ci{;Le zY=%q^3xjgTNv-jlH`f3F8;~l!|Dh>EnMah)Qh#1TeZFFt*rWOO zLwA{dLN>RfbUyZbMEJNIf+-UMg(2{iucrHs`7lQB#<>-T3OlNPeB_H92)N(yrMtz&ZZl9 zB$kxK$iDD?qzBDH^J1!5 zKk|O)`5|4*?&)sT^N%c==BDjT%JAp8U8E~b;_O*hkCdG@UGz*7p}El7Iawn{ZqF<~UzZ*%y=bd+qKiJylXTaN#2aAIh4(>1*D_-4lqv?KC6 znBKB4zSYIsiRju1O>Rs0EVt*m8hg7Lc+vugYmr^CM@>_2iI^LaI1R-gpp zJn)c%7C*GkK0L}+<~UeMD>LI$td-vQ#8P#|8^VFRut38!{8jp>RGr5y&Ei|rF-J+z zcZ*TZnv$}AtApM1fNCR-{7D5CEuBt9PLosYvF)Zwh}U*HGpz1o#{^G5x!1b$_8Qe2 zPsE;Lpyz1%9e<=c!X0%%&$f}c8s4|;TJ7nDgx8g~FCO^+)Acfpp2+uPsdUfV#~HUm z&|1McoH&Q&9B0-OL+8+!(&z5{2G4ZcPypE7va2raVt%cJOcqRhPvk-lx$uWAR(IWa zPsGD-j^%&54XdL~vS$+rlM1kH6*uRy6aMYE?Iy?G`1beN{+7(vWYWzfYU47hPoaz& z)sq^O|4|Acd@|67_*!Xk!Ln5s5ixkVJFU$&NP9}vuZF}E64%eg>}Gq@JyRsySG@|3 zg`%ieMX_@_?|S)C_mDa0nZ^Y+Phf)oNV#L&9Dx5Cvq z7Hp&&tm&BRUbfXq+X#b(;OSg@ztd5B-}wTKRzqy1i{Z8!pvcCNC7%=a0Hm^set~S% zBLIX18BJ)funp#Z1qBu=zZP%^P~k8`#xj zMQ-)VA_mz8ne#+8bGKA|RL@-1eK(FW0R$r<&g~CK(t7pshx)9)kjt}<$(;G)XJ*dS zs~hK@i%&?fp9F>Krn6@12~D-W#8~PyDh18gre_Ct-XPXpViaZ69BtF2T~fCawFyNs z3nf(uC}X~s(wdKZ`@@Hv>R09|YUk-mzex!TpYN&b{AJ#OM1X?sqKW z-YV{0!1W0}BhJ6y@g<+DhTrdal{D+lyWg>a=g*L?!#`)5)0vhI5Kel!)8*{eEu*`; zM~|Mp1pYeBnc2ICfmTXSPxFu}-RVu^pEJFO{3WNeuO#c&zkfP6Go8*%K51$4*C`+Q zq074% zX*Dy{_E2zTUHg9~^?*U5en1(@VXW3K6W_qJV0P=R2lXvbx5ck zg5c_nr}GUH1gMf1#&7H;b7AL5S+h$h3^|_DNo9@tdOUbxWLsjc?NO=Av8gYczXt!R zCMkWgmQ57)tK*R@QYK;Wst<^@&^-&71F?CHV%s%OHuQq57i3DTPxtt0Tvkue$0wZ>K+)xioM1VUqFZ>gK%bU+ zS6#7q>5U5wXb123q7tvD&MR#5e1J)LBC@E%b>KTa#YJp-wtDO65J!bi1ay&2RNX4g z(iWn}Hq!=_eV+2WNoZXyR3vl|)~yN%EXM3P+OUG=Sb z^KQN+)X(#Lp=-aYmfPvm2%?VIYm{~CgF*;D>E`N@Q5*Bv)9aoZT%0dI>}9Pm8l z)$({MK}3%FF@ml2^>QW+Vb#LbuNs##WC|gF)s2f5-H7e$X;rtA1Uwwucr`vE;BA%FA$Lnb%(lg%Lcx09>*Ris@ zlKJ)t1+7aZOm_>S;b5-FLR>$6mF|Mc{1Hb%j~d=4fHI`YQ~XIF@hD62UV4Lr!ZaP7|_Ggx^oME{jfbg%7n*Y_ESs5qa#O z?CdDCE@fY4%ASP29hK}PQ|P2@6_G+=)$CGJ+l7=b&H)<#t$SVuwZ16B8jwfLT^F5> zO@Y)L7KEBl%8Y`%H;J}*?b?d#DKQOJW;ueV#in`Hs7KLj6lPiViKSWUw|Q|Lj|Nl# zR~rerjJG)*uE~vFREp0LLO?NN*b(h6?W*?Dq!^0Ybb@@yuL8Fk^AGsoqLzyBV=XNW zg(e-)P9OA^xzCnn^)VWu*m&93mKIorjj?Hs1eOA|KxnL~?nS39aA7zB4hI&P-*_Fv ziK+CTJL(JKt}6;c$Dx)cF{hI$acR?Eg*f(s zJZaNAvbLsWu^(N9Fq~cYg8XfZ&W+ur^_2BXb1bcxjIP!b*h<~ zb4>^hU0!aiaAXI6m1(Y6p?5Af-L@0UH6}gdt+Qa>5FBHbxT(TWsxTx~h0{8zLcBZg ze!4*34e7!cP6*@Sax%56TJ4r-fbRAKwWut^}M_{=BiJhGp`T4AT;lqowyXOdk32L_up<~Vx{|Y zl!dJjR1AhGSq|(<@rI#e#OB8cR?2_EPoWFMyV2;LwZ~&AlwVhdSVDkE*f2;C!zO>{K$WpBl+~(ErRv$lUyu~bO5LHdH=PGgatj9gS_OeK zXJY9{bv8_(NEGoYc>aN5Xn}WPW}g@pxB!D7_249oN7Ou&@nZXghheEY8~!Q0HJfzS z5p@o8MN~|BmAf6F6lz_QP5%v-C0Cdnt>Ddg5wZN{a7?UE4`K)EpFtItj1!o*p*3S_}N%LG45mUz)>y4$aw^vN)1 zAC^u=9qBO_Wy^C}VsDcZJ1;w^Wz<(q7-EFR62?+uXL5nE8d(F%>eVthY#X91W9!If z23c2%OA2;!G6|uo_G7M#X9`3NM^rU-Z>_(>9~1e9I4i;Pbg-35c`weNo0%E&VufkU zF+CJppH2>iJbhfACOK>U{PA|r%k^{Nwe`b$S|6I)mZ+J`e?65}GnI--PD+785}VN3 zspNqRX^h#N7B;XsWlnChIT`v$+kfsYiOy-pcq_F-EtMTAS_?M>Vy1K5RBTeCytNyD ztUBVBV;j!;*1$>Q@xAKB3S-0A1Ko(|+j8{U#mtc{q+n!to6F2yj2jQNM3*;cgO5f= zpXqy0z9gF4x5tU9Ty`DxYo@T?jY95OYONNvFp*_9`uXuTyHS=SDPj=^%jP+i&kM$OxsXj)4l)^smuRIJUO zRyMZsEHol_j7Q_Q)$_`1!y$g)?$t0gc9*;#tC%rTx|q*Mf%Xgh%4?U~Fc*~-9kWze zNo`|#`u)bdZztw`*q9EYz9-q37RgK!b3TKCQ_C2Lkso%MJ1en!tT|Cr(KF^67jymj zV#X$YGYF8DZ!2U<&nofYhRKg-&GO?Zhb~2KsM~VHD6!d^^D;N{_XfqY=)!&*5;_)6 z-*ll%jzX6dc&$0rO+V0G=v_3*DmobRBe?jt;ky3&NilJEOXhEqnU0{pc|SW=!wCAv z?iTe0qCn~G&2vzPUS&g5v5p>M;fp;~ERCQse>u?tX$AY5ihWqk0Tx!n`j?H8@e2O$vy5XhknH)<1 zwW?=0PJBv*+2l+7s(-SESDQL>7Y+q_P}(O38~r$Kc?HXDnG{hwcb>hsj`$z5F=q*r zq-neB)PU5z6lH8K^m-gA_;3P?mD(-kuo1HW;>+GHVhCK8w@PO(Tl=sxkon-lts$(e zrC!9XdRu+W^x-vsu{Tu$z>3`y9@O?Ggoo+NmuwYebO3FAyL%mngJqJ485l8ZFSh zCE%qUjz_%(6zJnojYeV1iT79Z#ilp2IsMHh@uvFS61yWi%u!vyoT}6mZ9Bu?WIBso zL>=E$#JBk-b^t)|xWM=k zS@k1P-y>Eb=8WsC!t0?yt->3`&CXZlSEt`BmIYPVWfrfqw&6rSV`kto_ADDcV*pFd zuMS}1rx(`CiNzCDf%vT(*bOvJ!lTYoPibyI^Qbql7=okt6Ivl`=wEP6unW6`%ajd- zCI;_VZ#FC!bmq(I53Nb3o1}~o>KdJNdb^}6Tayms(rkB{U_39CF7TO5nb!Ha@5+wz zli=7L_*qT&g$4#Lp$p7xTPL$EMfho!wlsX_7_nNBz1?2mdnFNFBrA8ZJO8++ytmA* z48-Q;%{0PdPuj`Irs$~#k>3@JVSw4?U>^#`vTZ>~Fm({xM2oSw)!SjpJBEF4+oepc zy#+}v6g0awqZ{?@mgPHXB(hnX9zZ~AV{nVP zb*Mf?kT$B1A?4sZX?%ZCZK)^2V#=c}zcb_A0N@vC&=HYTuH}hl95IY+6%+jEGFhl& z-qQ=!ufEBJ*l2Suma2bgPYNjadOGW~xbCd$=82rZOLy59hCUx9(&g3;3x1!I54|1L zn#Y;Un9R1vWGO_>P8A?hm@T>Z>aLEGi+xO2zxuCt+ej_~$(jhSa4R(t$%PSEv>Md5 zogWv=`fP41Z~9PHlbB|=$lBV=FS90(6^wFPi^l}>zMkG}Zas83c*D9R=&z5TKr#bO z#ZlWL!?qJz1Di=BXlGbqmzM9=`?~Q2DNGT0(PHS_M(P2XdQhF4Cj`k+8L0Rw>5p-!ipZC8Cq1e9t5Ior39-=-VFaQ$j=dlL_!KASO1z?m&8qpNH^xuV$YIJV z^(P%`RR+mVFWF><*X+jnWX+4(Hefls`{bgg?%VYWHD*Q2;9^4Jz=7R5?eaoYd}0gdsrW zGf^+?w7~fS5IM8#^UP3>T_0m`kbW$lQS)&c#Bl!c6@3iUf_1_`I?O7a*{=2dwLDk% z-RWTkK*Ni|z0zsZjW>L}kMu-dBJVX*SxeV2U%MuIA`*U;*Np)zuS)>lMoqz^RSMl>Q0>n5MUk~D)~ zq5ZZEo@8|6>!gWp+R5KqjgsLke~sb3Sejim46WeobI=N=hI^x+2&}3-BFFeN9dpXa z_Cpe-ewquOSp!;Hx+s`u0v)*Xs*&ku#8S8PBV!vj_+WmuYqj)?w8!L3_RDVWRA}7H%E({z zwdo^iv+1Mg#;sh}X@pHFSDnr~?d2BVxli_v(R%L~<{VX!16gIHaBn@P>9j3@UrBFi zl4>oBLseXiQOuV1_k!HB_bZXd3CW*@@ZB0`G z^V+8XN=CJN#ea^d9|lf;&e3=#@I^<(=J@%2_^M$iKY65RZHw@h>g=^}XS@~(>+Ju_ zYn$UekpOV^Pmq^lHa5x2`OUEppXXO!eG3PQ*O1{ZKd2{Fjo_`<-^N5hgt=oucdTSy zL^9#JcKXQ>ScS*fxi$&7l=oc}nW%<;;Q;rr_@O)MU! zit_|XB1sqjft}iHvdw6TTIphFARDa>_%N(OpGu`$xJ%M$8Yz=iFVIX0>oTE`Z)R!9 zS>+?d(L_$o5(3m)(=ug<`{C#-fpq?wU&Kz`lZ5lvgqt#>MMuM5rsHGsN~-u~DPAvH z@UvvI>LDg(GVndUQf~X88hi` z=BBk5x{1+N0dvmCF~vCDsE%{hp$J6bRn7xvW<&G@`e&KX@a7;W;X$vMV=a7*64q%EO6(uTl- zo?vD()<%I0-Ku5Jm!8UXCd0x~nx+Ik)cPmqLN_wUy9wDu_^1x7yckPpf37;{|6c6~vTW1Au2Ea{9X zuBNaw`_RhpiBXHb5k7Ir((_}5V*GHj>OtyjZI2ZUKfZVHYeVbfMd8{eK%tlVti{>k zL(QGc28l1LO&7FPj(F{MKx8dZUX#G8XCHo9z4b1K`<$w>d{F|glk}ST-Ea}BMP45( z022&N)D@(Y@86s!G&riT#V(OfBtp-kPm>MLI}g~YPzh`d~aa6Ify_Mevng zBKC!||JE0-LR@dkxA9VwXnSI5c8R)DKf;>|yEm!N^epx=u^zlu822IDsu91U6KqkB zZ-+&lo{NAUPRht-gF_ZLWUk}lI>Qg8-gh_31-Jd|W`u^leC`?aTMMTK?_4}mt=tDh z^>EgP6u$X2ZRksaX7!x8CZQ;^N!g8*;<70R&h60oq9-burGE6D&9LuOiy0sYS`L%?GxAc2VC}2nh3&U7r7?r+gSMD7$?uQelw+6N}uNO-fM|yD7Z9TC$Yy;t_A)<&LI5^G7O^ z9r!F&nc;GvCdp6A5RexN(2Uh;NiQ6hRL~My`dDEOBIkU53S0MEN`WXT$g&-fqsdNrx;QCq%_?V`F{gUOMX!x z$1@SiG!id3izfatX6_or&I}7JBz|wQ#^swmRI-hspoIxcTC1I@7S^N7Q9QftXpoQYc=#M`3zV50L_q>8^{b%FE*U3= ze=vpWaoWc-nE;BNM*7JUc}wVSd-!YRsjoa*v^F*^H|kpxo%4{IQ>*!LZ)|F=n!$A~ zh6DI`yZCm3k5=n@l$~H*4D$lSgP|w1{B{G&SWF6jeTD!XA_KO3>w^8-!*PLN`i-*X zk0LZ|e_tyD;{7|^r2aI(5iF+W!Lj@a&5aMCA*SzMFsfcjaIqv9ED2_`7wP`)e#0tQ zzA{bT}NvP3`ZU%{^QGA;1gm_6M;b^kOoo znSG==rA7v#rsXn+&NTDT$VbqSK)avMs`fTj&O zgEW}7riIRL-`1DzGi^0Qnr`ZP`&MOPQV1ifRo3WF=~`>rFzmvjn&n0lq}Pi2U{2?f z7=5yC5`(@H9I}isrqo6|vymHhCAVnv30=wFQpr9LDNR+p4Ux+HoD-&nmmBoQth{|# zXFs^5=^?3&X0-DXmlqCW?%$Z|nQ?zi}7C4^N=^#7DKqihE_rUf}b`GtF*Q&p&W(pEiqu`I{`yVY5oqP)#l3yc|5e{q%SwnZ>ssBpO*-2oezsYfK4DNOM(yg2+ci zaUHd9hx*>d9IgEDlxrZS9jb&I*4)`>$g(h~1Ndv>S;XPrw^>LtRZm`2<2lgFWv zec4vlqgfg`_f@>kt85SBm#KdzNFN%-AIUmKO;!^4p!0;MM*5hY2vw_J{z41q5hqN6 zbzfbR+nGzXURAadUsw{)-J%KTj0$i1h!G1fe_2#Lom8FZ$p6=R5A{Uem34^m%i#Yt z%*jw@_dhA60}+jF*T3)4UQoYtRa&+5lyy4i?95Cqe9ww}RCbWE6*gOSIat*G+zeGPWlae-xn=sWlr=Fh&}(NSUFZdZK#sX8#}a7G7ToLZmm z*X{MmnqhKLR(-e{L#_IJ-v&?QXJ5(D2@|}VlWT}|TT5&_8noR_PojY2{!5Z0-jgdf zmULv%8TU)S}CN? z83GB~qAqxvrbo`MAmAMvxs~epWCT%Iv+T@QU0QshN?zc_l5XPpe?%?(;wADOs)XFc zzt)TF@I_|e7)vL1|QzpT>++nCg1dE26u$;%lsDDe_xSSazur0-ESz%eF$i-kd4!hYnacX6V> zH$M}?q_$GFU=lb?!}IHf8lLOj?BKKk`VBipueTU+q$v02i|4EkY|fTfSfzSGlOKSK zU}iZn&hyqWuo(S!7$>>~>=70#4$_SN$gd+GX=d)BX|gf*sK3Bd_PrqD@PQmEDf0m> zpX{oj>f8|eS$jqKUj@FOPtzW#oxr!L>p{Ev>U^HQN-#qiuRlpG_%r|QU`v5ILG@kzw^$Dldj(_Z?aH;`92|_*6KBZ+0}1p`w%f;x38<^L zs}H3C7_#`zq{tcB2YF~VCdj=jty%~xH1*MS6g>;&TmE~}Tv(-@#sNx?!kr78QD9UA z+qL~`2c;BJ6;MlG96x z=QV6CLW2}r2qp)3!_SF&b_0ry!wsc-CSV_;m0$1!!<|? zhopJR4l^DFs>7ucL<0dBvXW%Y_~9_fJ{3s?n@1f$**WjvQfiF5Q$_!V?d-ZkGI}Se zl5DiMwbh-}W;hesI{FH%4tm=N#K1}n-jhpE6XN@lo0>f=)qklqPRqxbTx>W6ln02O=ZhE75S=x&i=@yhU5Gv4ud8{=rSRR3e@4j zL@%9;O*%_Rifo7>BuUvb-M%|@#LI^4THnn}2zavh4?;D?RFs?R?=Uxn2-JE<-I2>m zFpDS3>{V$5Y{UY69L8SAVccp;la|(t<%Pe&{~W$vb}J=9hq=_P{MkRYm{$7I3)Gjd zuM>MoE&UYXfym0D-mT3&WZq?^zL=j4Cp}2^;4;buYV7L9^4;lQV|ne6AWN*4R}Nwz z-VgwYUWmhX?n2C7UtU~?!=41iP7p+9KR2;q+7jyuQ4-YivW%Rk6d4t998$A$Q$1z> zlItcTW)(IW(aG*{<0q(3*h}gm^puuUO3wI|gD(!`tI^}uvbYdr4y}_ImZ*C-Gpe)Y zcR9S^oqTm(%p1En|C={B@TjulINrk|Z0m0wL}lchla*E^@~fg{z0f9R^p4UdN}M|U z%qlUzKHQNrbvspLZAIKl&@}s8U9rpV*lBn6E>GDZs-Rir{#qpmAIN2KEt;iyA4_~r zHIZkGy&bI6Q}%M>>zDBpOKs3w!}%aNYlT!%lnPXa^NT`W!7pKdP1vslZ$34%oK46t z%ty2KtN(Uw`~)URz7bm9H30%oqu}vq&=FP4O9HsOBmA%>U)?E%@@hF}cYxIUYh5oh z$Jc#$_T)qU3WoI!Mi*1;dcs&U#(DJ&Gw5Iy*NOb7xGwu!Tw~euA?mKsCW>bF7ii z77?>ub5|($3gg~9m1Bda4AuD2$m`kso{UwtKiTJn4d{#t0qjdF%4gOadbLn?7LJ4! z!LkayqTlIiIeM*8vhsKK8{hqv2{9TZO}~;gKA<1P|J9J9hfbUn{hZ;Uqp~hY1R;kM zvGT6_nUEqKqXwZo#?oJ|=iLY?;*CEvedFJ}5krcI1S6w9^aRPw`22`Cp-7*V+I zCQ}P!#)|p`v&eS^gruGiKw)T0it5Sl1R5s@7eCbHt4{KMUa~`B`s*r%!g!!C4gLzp zr=8uMiM1Z1{*(EPf4M=BsV8D2Cde3%|1b!N7F62D2DCwaPwOBl?KMXL>NIXFZ8YWk zc(2M1q|h2BxC0Y;RV>q?mi?6-1A6d!bao##>^?3_j4&tL)C2O%mh9vH4pTK=Mgky= zl8}j=eO;{tTQ_UtaMe^DfTD4ZX#C9-DH(p&oOib0KSI1|y(txkI%f?tJID)%rKoGJ zl1bqylLIP>*2$mdrvH(c@`QTD$w`}LNRX^jyi_DQM2fBhW}zjs?BOu5o!Qa|zgNW| zViGQy{yXxKcM{)|Z^PApzV{%D*UAKKz6WHs zEBC0DH+b6o3g8bpb#FXrb4V<&VPeqp@KLYS#)k4q~YxF?X zxk$$M5X=@4hIQQGcZfT@(EG0CJtBHeCe<$CQ_CldTa}bo_a<%>`<4MB5!g9KBn3NE zLA%Dl!y8~c=*!pG*Re{oD)%fpJJMrU#F!8LCIICN`D!)xtGX}Pvx(?DjYez6xz3}{ z$Z(*(!Jv4vjjJBV(I$fDkStGWDSZ`DZH(98d)8=C_y^y!OUT_$)y5tdOqj|9<=!#>OTLT4f<*OO(HinC`MIu*kZRY^A9r@~to*Yrx zfsj&LLSh^T>izq12nHL{CJK1nVnQ4Psq0dT2FtJ*(=v&rbI&wACV`LVHXjp)BWqpB zcNb$9t1Z_U6e*n_`X%49*WW-*-{|Ffw+J=7iEB`d37qS4Q4_sZa?ErH`5W@j87**76L zwy&q`DSkHrT|H%wajoj|cZ92F2S@D+9B)56?dV8?zK$K@FE;P^{p!*GZU|Qw21k8B zY;pNLgWoft-8v|&f1*k%`ggec(!jcpkxtCcwVgWGeI!cMPGIB2SG8{OCr3vPq~Jh* zrd=>y?LUJpG`l^a-56cl9Vi>Y$`4!$)pZ9LNSq3i$|u%itk6C6j8`^|*u>|H2BuFtIH@pTe=TiTH0an~vtD%(cy#XAuLX-oHnmZ3Vy|y|Pt&%GzHf_N%hY6uWJ) zX$Jfcn}z7kT6%Doz! zyLJTKty0-sO1|OycUcBBhnjUXG@aqp6kD&q*w^ia1t1W`a5v<&>`yXU_oZ5!`=OCR z;HtS(4sFk_opDBygkmz}dWGz?_wXV;H}CYjFQp>fjxEh3A~Zo@`f-Y~lsc_QT&{|i z^kfT~lFk-%kD)%{fiGhY6V6iK?9+1xl_u(H*&CzBJ&8a5q)o#+Cz#4}IYDxTL;H{l zmfV-jDWRwV2I1EVy@cn|ZzKB^S?>ByAo9c`*%Os-o2~g@pTYrMvbnojm?Lp&YRT@7 z8HK20cq*Nz^`qp?c0|^a9l5Xs`AQ96iw>zaew12g<6v|#9C$%Vy$!+!v8m1mfxeJo zcw~92rA?dst~YHrvO!j(F?wP4A$S~*95LtF3>dKTJn`g>#Yo}>NI?X1B9c-@sg%jW z+f43nUJMD76n`IN>yGYtk+@& zy9zxIZ1ycYZ>YY!H7G_YmmZ5uq=<4!Bm2aqm#>xAV<$G(y3Phg|#a-3*dIF2Jr z@GkCFonX~*&P~^TEzvtN;(ip`9D=XMvD{=4UZ9Y|9OtIL$dc(xdRY$Z+=?Yd<`0{5 zGw7)6c%l%Oo6KQuza!@Btl>4NWc2&788qW<`+icAY-DNSh2E zh{XSXpyk-K_VTSKadWYTERXhAu8Vxe84+=u>S*R`vt#Qu{0VSlrYu^8cpJ-+va!re zmLb@cG!KdfbdYrlo1Y?=g!9Nr!tm!O zk!PzV{?K{y?5B}u2jtl)JX`X?+@-Gnkh=4!b4fA=G9Rq3z!o^po<-uuZr08rV$h)n zfZrH_73~na=4R+BayKrP+XJvYEJtKY2eRI8)7|1iOh{#Q%3@7jg)n+ zH*1@ygzp|J;oAuJmc-9fr?6U14t?;+=V6*T+(hpBDUrL*4?4laGEC&IsZFAX!SuUa zc4O5S$0AJ?nxo_W3I0MtTNbiFN_r!{Yoa@MC>dUIj^f^)fQ$#H&P`Z!ZBog-L~$Wz zE=QW3xrx|dI`Ev;t~{Z1KU~hRqy%|^fSgI2uC#x&@h4E@E+ApU@3J;pUj_5R(_Ncg zHyppw#aVh7ZdqN}e2Rxg$|IbA;Jn!MHFxB-(9-H~L=Z&#B;MUuAe>`TFr|O?-q|Tq z@u~gRSJWpaZphxkQaGl_^_>J76Q|<$tttIMT8uNsB#rL34aI|1(a-Bn++givYGzkJ z>qXuh#qhmPut5s!6N!g6IeWymBzC(F#M9Ev z*;PH7SE%2IB^$T_=~4ESq!~63u*C}xFyKsw2j~z?z7EDWn6yQvc(iSA1im7#5Mjyj zLUl(nTsUVVtDCvtkYskbkRcRDL2r6_@gc-6P%%;D{)7IBG3ZM2MMK+Nlq-^svhkV{ z9a3H)Ti%qnekHYx9e8wTyM)yhNHaX5)H%eCF)d#`RcK@l63%~zXO$ds^bVOVZP0=S zPHL36H=GAO3in#^tJVAJa|ci|PsoPWs-(sIc(VLRxFyKz#^lW%Xpl>7`if{@PRQYO z35CW%phuCtbeAo#Yd_>}%Lh?pAQp=R%_G`UJmyYJPOYmO- z2==(;GLd<>y|qH zF^oR(wNub@53|M+U&vSo%E5%;mzRkP^Y-a|)cD|jh9tS1Ko*3fMDOLzC}(?v1J%s* za`-x=ycn#t%i?rAcX_X)8^jL!EkWX z-gI;%z5b>6#(C@PUIVn16Q$R62pGIo3^a%N93uN(@8A%!9FV~*_sb?udaj1$M#da9 zVAfCn3He8^Tg7={j3(!Bxnyk3o{qH);LPejJym`FkpV|C;JD5riW;?Y-iozKAffJf zghF&fzW?HRNNhF|J_xod{|AF5XYfHL;hH@Rk@Od+Udm-^X=wbu#OXx%zQ{ zij@!I--ABEIxf0hO}Wk~{y}h-{ss81KXo&!E5o*FQ*II#2WDvoCt;*EZW@{d4yB02 ze=SgAeb|#P(}ExK)i2Ne0R^~=l|zcU?2(=kRY4X{3!$($LT zGOoM>p+a$Ul$C~q9|(@qz?>wP&l8yAcKJ>M{&RSa zmpySuy;Y6a^It+r7b4_6zkdV~zWf42$aAY_KiDM*5owUnGU2Bm`t<9@X`hTJv|WN= zsDD~h%sh2MBW5nrh`A^}UOqQG8ZUp>FVdVFXwKggw8SIyFi>zXa?+vJFmm5ZZDZtb z%1;m@zm|D>X1saJkDjvanl!Up_yN#`@5(3$4^XEbhy|cIOs=6YUoF1(2bp%l@S^8*2GxGc|?rlibfq{-P^Skms9rsB9p;pj#y-b z4JFVDk*YA%hw@?ahTZQH3gGu4Vo9Rbs4xCGR@)WzMthbuwqyF|9br!8+l=Cma1sQUfv?@gFvZArQ0LnvwHK`5zKpkg6b z-`=y}Y~~3Jdf#6QgT6#fZ>30}cu709`p21TMY=NAib&++W!3<85016e`My~5MNiq4 z6oQNVE{Fk3ZAjV!u^e|3)=gVPp0d@KPQ+G;IKO$Ah(cWDcPE$Mow7M0m4%UIVJnLY z3yRRqan?pw7Cj2(NQB-&EJLq@Wqlcze0ABa4dKDB$+f5SIqK1ow@S?JMMuJ!hm^DY zwYzwsT*s@y|KbNIS-HQo+`CX&BTOi^QVGS@?2J`Lwv>@23>zLC(-St0a3{3q5%=ZS z%){di|BWA9K@)H%=q-sfYGV5Lj7W+4AcY-LP~!2ZJ^E7GsXER*h&5U;c)i>#I#?C9 z$_8*53=ZLMtf4AG&^bWSiyWWL@SW4eI}z&#Ra#Q7r^ZI+$7aC}*JcPc|D35p{LVCa zSG=)iPrxwBzc{clv%CXblRhG?>6{e|slMMvsNDM-!qwAI(3q|jeGj}eBQY6;i>138 z3`+1K;}o?>!*!vzWKo%)htu1`KrHmmv&sz6@0S-Rml6y~>QOx|MnbAft3N0Rs(-QJ zngkg;Kg?*rvf6PUZ@9r2!=<@utfe|VK>lRVq=(2^Uxb}Dq%T8F-rq?2MsQrIv+N2Y zMe!!9O5^b+xVy_L40{5Ta)RuM#Oj#5KHZ@w`13(NFc)FR9#GvprA45(UaBVPi)0MG zgg-k{v*@cB_qWaQKmV zH7j_hIlV9UmU0-Mr}QYJWWeC*-CQ}MDXC*AGQ>aFnkAdp*z@1y9WBw*=NqkQx_i}A z?U_J*mcJ8I`?tS1S4;+aHHIozm^04m5;&fMNdCCTQ+6v2n(nd}!p*LszxquAlbwf9 z9$A|5)q{Ot5n#$5%~$^%y^{qr)v5}X-6C^Qm)nuQIbqilia~KH##c8I985}JvsG?N zlzU5pW%>v&R?|~P5>7d zR!cqU#jmYQ2t=@KlC*GhnGgY~P3^nPVP_24R9nx|98F2_67jJZEIXveNE{m6-V)2d zP&l`4nsdW8{U?lbykdcDDZr`XzT^pZfww4NljA-|-i1PMQKQpDU-PIM zP7dWU_O|LeO?MpmTVHrrq^n;=wi5td)%FNAHZ$$fX9P3%r6IsQQpj@BIsyA`>XV|bjq=tQDZ`;6lmzFoC%Va>XV4*92`)Tow z7Q!cnir*CI2p{%ak>1$y*ZUiZ#Uf&tOk7>M4kPG^DMpKj$K^urn!JW}){{vNsocAHxv*80wE8cpWzv3N)@7z~G#BpRAI}*Jc3-k3UkT1@mL(=+pz)AS8lQm%#UkiFM*l3np!V(a*+V3WJ(VsGQXkHNKe) z8+K#zhWT^NChrd}vE>(#S=&W=pU06lpUU0cPJp^*3-TVBNho7XaJt_X{R=a5C5<1N zsttr?HIIb1>+zJtxM(^jF))a#qL3=2{C3alLr;}htIsUTV94sUG%lTpl2%H;ZPujz z$RUGCJkF^XWa-hJ^U)~X!nsJL;OiA6RLZ%x=qMerxPnqlw1RV zu#Tixv&j2{HNhNcq)!9dT|QBX(MSeM6yLHsi4TD24-BXl0{tj!?p^xib}=71%vsqB zT^PEn2Nxs~I>8h(K?V8Ix;Cj_kBaZwVcuZn^<6YfTmj1VP+55oz9JH6f(4c59YH7( z*x=5dT!q9rA@qTEZA-T%AF%QcW&dnnl6^d8;IEX#ba9J%L(G*1u{~bK6WI&p!Ryzl zKk*nZjLRi3@;E?Qbk}$6Pp|(TxvVy#p%qh-tVPn^GR_mZozBWsQ@>rDsJGJ-d63V{ zN8kR5ffyEW?`Vka%Fe6vlnoT{Osvo5kma&|a_!9o-$Mem>>fC@FiN@`q0^-cz|osw z_Y1LN2cAhR8*C@6s|ON{4W}Yc>F)%zMg;86SFS6CoUIAwLC#h{$2Km+*Kd{gUkkl2 zLx&{9sl>N`RZPR$ql;QC1=aSxm|n2qP!v;daRaQ?IT>rh(-V1utl_WnLgEDZ`Hx&8 z30r}j;hNL`8HS*&fX-dTrKU0~RF?x{v|-!sWx9&))cYQqcI&X#nx?-WX&)_;MmMbzh5dF{(LexzeV+H5#LJGy?21Vm5mFUeI`fz$d__1hhg-Y z79B6zA1aag+zC-9Gd{3^1@DMZ(nqX5u(fbX`?^g)BJ#YtWjPf< zExboi)1?Z!YN_~gMB|2N^P@~?!ha(GV#}Xg-j0Fq=RJgmq@euDB-IX?anGtcOzXa9|rjq#dc3zdhoiWr`}yn&e+Lo zSY-RK4vKVQ){{$Jzxv%$px{DS#1~yQ;@FFpk;gW{A5mJ1`q5MR2i{licltnxJ*9dp zH4BD`W$6GwIi!uDqDQ()ExtW!9QE-yEsmq~u(IheGKx52Tqa9l-XZB=O>76HceZb0 zVSZ$k8ofQQj67^yk>mESi=3XB(q!;mks2C18H>v(4l2w!wX@kFU%pi9gb{*w5EYY* z^#PZ!lStyw6RazZg2h=aj<(>m9&H(F8=DzwFz zL&rK`aUh`k-#==6Me>d%v*j3b#GmBCK}4oVDt6;G?Dvl`AHkM6-i&`|leen%8UK!& zLDbO`n(+th8J`k0;{{b<)4K?p(IT#BplDyo{*mSiOj^JPG`h*^$j2JTwIQh7`wm9o zyl6>U!Fi0R8hav}^Ok9sbYrLBdi2j6MYEGP;%e4!#s|q?2#& zyc5Br3m1GZQKJTknEq$9s;!Ps|C#A{f8KODUJ!ZaV7kfa|Gb*zRN9F0fnrWRK#je| z-|eDx)WFGFX?E!pfz8UkOs#$^Gx=NbL%WCZ+dz6=NYyo>OS z-Xj?LIq@n)TYE?iyk7LLN6OOz-Xplo#)n?u{#qnT!&`eLm=5ntpo$$cQnW!MvCm}N zy8Al$#1@N_2i*bhmZaQl|EpLqptgc6TK*&OAN^{Jdff6qvCtc|yicOYD4&e-=us)HR-a*8BbTZdxI`AG%dSBzvBSJ5+JJotV6f!X{tG)yUrN z$=$2@FtIdFZ8k4tpoLX<8m@TYO4W}RMcZ$uqHlD6Ury9VXjSF13<6< z;6oevkd46eL5Sch5_5Oj63q>@%dTqqLnXx<0O`g}-sK5a5^6Wmydgtu63ti35Tm2_ zzWzI)qNDeEmkmc?VF&J&u)W!nUzMhAseVxE_F;ayW|4PA*#E-9c{^y9+VTFyE=x;R z?WliRWEu&8ARVuX3Wy*=gRe*9hkAkezQZL)^ zhCp$h%ilo^UwxyFdg~L3{^PByMg>r({>n;*$d>a5i)BCUyHNk$A>ge`s@`(UTi*Zy z;XPkRwd-&nSM_Tgt=RDp7tb4aH7s^mYouk`bVsi*=tSI{g9Pp5q^1T-%>Uz9Yh6A) zzOhz#mK(*@clS%HJf$T-Q-aoF{DHmCrWB+Hc9*5EN2H^Wl={K`TIpw1SP-JL-F(Y#a^ONkYR@Ww5Ex6MMAXS~mON`(;wgezUam$$H zbcp!6@eykr78x3`2Hn>NV$Bvf3u3)UkvNEDFXJu2JNf?v?^h1!=2faE?$yl$AL78f zO291m;F0FF32y=R#72CuuFR13wF?fMAG{LeZH5)`QNrUi@#sBmH1T4miFZ(>wI%|; zamKnPN^&Z`oof7E_W8xw_@o)PwZtl{ZesOR;s#bS*WDk9Q4<48`9)6c{bEU`t)xR+ zH$nYSW!IUG1mVZk217AHY8?G%gz=^8rr^MB&q5m$BKWP1yWFB}@sx&z5gX|~J52j> z4nQ(I3yvXML7Fk*jim@VI)xT-8>mkX&DVM7(7ihE5}KiNPiVT%Q$jcCyld#^w7>O~fme$BcpuYPF zR@;keb)6s2)^)CFT4$g>^#rSWo6XS@UDxBfE>Ec_=}dhp(#9O|)(l+PYro=C8vct>O3tJ#xN&P-y?KP=ck9h)Oq{RXFBg0I;ivX z(EB<+BUGvLUZKr8?;TpJ^Nf&K4Fu}XjNhb~fjI!5pnLt)EPbQT;{(_RPa&pN^C zf=+eg?dmXbYoWS6@vAcc>uwiU2tLD@_wG~)Jc$KiW@yJr0o* zH3-W_(`IBZW}q($ouf-(F zXmq>CexoCAG)K3qLtk|iGqup?WP$q8p^tR_v(P@B=Y{s@d`xJY&c}w<>pVa751o$- zy`uB+p_`@p`U#;w>HBL!zt#D~&{CZjgcj+%Ff^Y$r&8wj9Q|Zc=q`C8D!9-z{p8xv z6rKM(RG{iid>D|CKG=u(~E8M;8{zYLwL^IwH}>-?_JX*$0< z$2SR@&&k>iF_yc4p&Et2Q@wh`y(Vdz`kdk0hKrarp*0peHW zv?J#I&+anqT@&;EP~yYdldc}bjB3y8_WO(N_YeA`*0*2md;Ty>MH1#;zbG*WM6Q;|)x&ZnCnx3XldJpXN~Hgx8FKZATouXHqjEJxuEgCvbd6m7My{^r z3T08~N_q0QJQ*ZcqFW68RIbFaBqTzvoZrgT>2f84tWb(vJtXiw_^2F1YmR|=+Mi$J*XzGD__COggiT3r&VH%i zC-whXuEc#h=V`gRL9YIC;@=GLO+(*C+TTlW>3h#e-APjSvvTz<{6o$Pxe@_J&U140 zsa*Y4u7p|1`I}trk*nwBYKvUGAXj3_o%5nxy((8PaTOmvhRt~XP6LX0-!xgL{>9vI z_|*mWOV{&KGkC3(?~UMlSe=E2$ai0sC!)(CFm6aR_xSXMM4v%ygOJ2X&Ur=NNRg|* z%au62~9sUIT za{BkI{nGus)U1DR@RjP@a>ReA`i7i;N_K6|8p+1zyeZk}oVO$!k+W8^oSb!%U6NBF z*#$Z4CF`5BL9#P*HcEDS&c7tVx|MV%X)ftK(wUUKkF=V! zjOty9${~44d8CP?$)sCJcar?1 z_eh_Rz94-=`kvJO<)yC9q*F*|kj^Ikgmf_}hvX#{l5Qv6O}d9Pk5o>2m~<+z?L|6= z^i$F$q{~UUq%oud(iGA((l1F1NlQq}NXtnpNGnOJN$W^kNV`Z?q(dY{swLHvT#TWc zltRiN^(9^RD*YqPCe0%~M*1V^Inv)rZ<02Xc9Zs#J|TTc>I^QNN$N+sm~;hc0%X& zHPRZ=2GTatQPN3>40@9M;P~C(Z-A7?7)~V}Cd~rI1Ayr`;Bzy{A{{3s(y!A|EuPbAkV6fM$_Hgo`75_pejL&;~(g z3zFD~JV?vK8|81oyR`f*<;TKz=@uKl_n7a;hwo|utH=kxq)2PRHv`{h?MsvK|IzLH z?`CKGZ*6P*o%W4Aq4qf@LdK@OMPu~>b<5Q{SOs`DAhjM)7g;a_o6s_h;7R7M#5M4oNsyYYcP*}77Krwke5>riqJlIt$x)d$@L7XBpB zMyyO|?oMp<`)T51kKbTHa3*2(jw2F}oMY62P<*Z}6t7eV@6(XJFF4$7OZ!_us`xW@ z=q7u_&b>v~lNEQyPLqKWjQTxA3`W_)&!(7f(-U0Su{m#t3)&3aE4p%eCUNeD+Ko)S zGFfXPwA4O0DF#n_uSk@YgdDb2LCD2YHMx#ik9>x$t{4g zb^5o_!T+0d`{K{fG^c%IBkeOm zkwX)zf-_T^YJ8T&$A*iX_V+ODkB<$L1PKHi9-_#PhOd>MP9%`mho)h*8ifV}=NmML z-@u1A*Z`h$V;cZ|UEnGW{0~K1CxGDV8BUWY_e}_0ECp;^i_@?UI5%NJ#sq8L1 zDY=<}8eG_{jh?P9RnyD-bS6I$&8wa7`rsJ1K16P(HEd9D+#qbNuJWuJmSWwTyjxC@ zEiZOg97;-DADq)MyMAU`(J$C}70n^ca?#2ROkEvT8x?xsGn|eJ)z39K^^^*CkErQy zm!6AB`XL!&d!(UxXAu0+K89OBil>!qT3lS`sp=jUmKeE$&%s=`hB!ve^3wsCfV(XJ zJ67>7F7xVGS!MpUAMCGhrk3r#-kyHnPSwzlMvrYV>cGK*6|V#RyC_oqqTUbK_}zS& zwCP2Rz7qVhP!88|bY_2twU*pHdoPP%`ouN z_$l-tH?<87s?dk7XizKFD@Hb6Dtmit%m8aQo?l{9m^AM&Pu8KL3McOVJn)fF>cm|( zZfSJMT9;j+X?4$a$Ep%{nRyya|Ba4UJvkn|{%EZ|9$P0jLzr0ov0Ly&#^Z{0&UnOG zT^xGt^q)$Rk$!3PD3hG zqIlDODp1?0UfH(RKBFnE=^0H9QHnjM>8aKD*b$M#t!B4f6wd}++k;8wtS04^68fN~ z_#ZQeHO)%X=ZFrJkJVy_la0sr2@I}S4OFVPW@u0n4KKWM#Y7aHHvc9p@K9#y ziQ6OGVru?h>=7!~=mFoUR{UJIGQOe9XP}0*N9gq?7cCpQnC*tmPl{2!CJz}W04hTs z9=Y4##zMh{G3lPybJMWhizWlXf%7yLoB40c%i}NCAN|vr|JUm7#iz$^>7JhdK%{MY zZ1yV?vi94J8$1ak61T%maG;B0XB14Au*$B)DyPLP{$Yc3)}%H-`kFvenpi`T)Kb z=EPm!AYyl0CkNKIVxA+use(P*)x=*J>=7xY)nRwNJv6q<9Kq}0P>9s#a3vCqx{g;h zhf-I4D(s7PJFJuS20t=c`SX-u+X2ge$SM|2MYAVM;_@dm-_Wqxu70kGoG(6q@`Q|< z@F%+{a$@|6W72^sM{ugUjX5PoO9GXh>Iz%#E{c?_bv8`O_FI*n5nE7d1uA5U=_OWA ztl$tVLS-uye-jj3ZPN^2fyRL7UdAq}f0uz54EUTP@fQha{BaP*WCfDh@54SW7SK*s zeoEk@xh3DqW>$KXA_o3l+M8h(B7q68gwXi~&KA-I*n%qE3%SvprLu}^aOATWz4n8P zn=_Sfy>55sFB6+}Czh!^B4Z_k)>FFkVqDpa;g4eN-?Y317u+AmPo8DkhW(pqTYUO8 zO4=r%o=cI|CR-eNORDg@Em>lxMY!GJL}%r= z?N*KS8s!mVf1z9QKyY}9jqG|CnyOJenhA<)bojz+cBdYl&>b(umX}gb#o^5ctaKtz#mI*33RH;o~26f2W^4DbM6*|H%RSA)6t6 zBx&POLRt_jFY%KQktn}Z{gXDpZ}~TD?_vHrp&yH9FWQOI7c{Lp4byCY!vrD0Yl`$x zouQvVbM*-WSP{&YkfRrjlOO#^a?Md2+62z_p0tBdGCmL!!T)_d_w?Bnp5a!<^Q9E_ zf3h{x8O~47=TWBaly9^(dx$l1XfSD$m|NiJJq^<+LOW7@vb^^FSPjlhIE8G#+y6-@ zSAMTl?;guwN4s5ppnvz2UBKfgs9LjA2?W#~7oBoH-l!c995l*9Onh~Givo(if;kSN zjIAYe(@;Zxz@0TVbMD^%~q^+fT$(vZC;LQ)XROsbg5 z*Q=`wxhhKsG&6ZFH_Oi8W*Rrak-U|!`Z5Zk0`4U`Am`BcRk;`OL_*eMvLT_lIwH*p za-zUcb}SFtkoX!vPg@ecgbF))H3pPQtU-Oy0_G>dk!e!57{rCXmBx=80npBitp&uB z@|$gW(mvjE%3EVc;eXS`8apIVF-U#$Ci|nYqmEUG6}YE#whS_ks0~MlW+otKu2cg# zUOe&w&Y90AfiJrf(X19FJ>j^Zjva;UK|HyK$pE&sCvN2C7T6-E%V?k7uR1sVI!pI! z;E$>++pgFLfV7^l_*byLiEnBH6?O;8+JmclZ!B(f(;>6fqX0rgaLQ@82lsYYojXCnmhf6pF&^yn`#6U>!zJy4OXjH4cGbN~w-Q*bDNVy7NrvE1gG`PA8e=`B zAJdmY^~!~j>3gMoz@Mh?;iFe)hj^5xLD*%lGMVhgULlRWQ-5I&&Fn9(Fhi3alI}}~{%Csq z8TMa-u~+kIgdUH)KYW)vI4VUJ%=e%s^1^w%ARv3D#!#ak+}q!Jn>s=X_V4d8(?fMw zFv-h%FX!enZmh9=jpHIm{6UmYsy>;sT-0A5{RaoA1cxQ%hcD#q>KW!!Z%JwO`={0l zP6_12ATG4ru5+S~n@8-MzNi61585}Q@8{+o`{qA#bBBHN@<-utXsUhlwA_rhZyuK$ zBK7L#E|Qx;_RSaFsi2>IbLbLodf7K`%S~7NX4R*ZNwROAlbd501xe?hl$+1(n}_7) z1N&ya-0ZS%{BpCwzENjW^(y&=pp;&Y58ToeM7K8SIBSQ zOdrZkk$sbgj5c(geUnkl%^3UU&nestvu_?eOmha>H`fm2mvil#A@_1~x_$GI{Lq3$8391(W)f5mJEIe+bB}fyV&uNP3ljYNh%=) zNxvmMOL~=5LE1^$Pg10BNbNpY>hh4%N#~I+Aq^+xlO~g8bLHR)fZ zJ*0!A8q#r62iWWGqzuweNSBdp@u-&fPHd_~6=nTN8jo zj!f}QgPs!qsvmrd9Pd+TV%sz`IMDHG>|>Y{eCI)ye3?Rth4<~W`=HJHwjVSy$){CA zuYavs->!r*kwbu9YC%pN)qaALMdVRqMIObzOdT1n18iPyC0er)D!NxB`g#^Ehixnx zbTzugL8BerBD)#kNVc>qhY-v8WOZ^f0w?v}w17CC9kaHguEz&DDQjJIXGB$-JtHct zQAo$r^JP1A#<_+%m9qX?iJ}MHNt7nMy>T?c4-z*6cKmF!2)cxRG{t*JbfjV+D%5kV z6yl7xZkY)%eZH%+))B>JM7@NUt_XD(Gl9biXh;JU9fC>20z($KeCJwk2Zz_2t(SGO zY^lVQfR}lbcdQZfGwG|G1Ot6oLvG&%6`yxQ-&OHZQsS=Qy&bc^jjxVH7fVD(0>2jy;*Z$tFI*u1m$)L@!!@$U za^lo$d^OVlAcv4lu6ip>ZdIwT-+znnN+?jyv$}xEC!2$Qw5^H=aFRt`a=}*`5B1@3 zU;E#;(J)34srS3uUIKZ59Bf#tdTi+>mbIS6uL1NrEvD*!tPuEAo zJ=b;|PN7L|)oqNjBn_IK$$`yi zemKshoXnPJ4Q)#uC;Q5C^uFo>Et>cDh+u6JCz!FHQSTXP_Gb~XZZ!QB|4^)7CZNE4 z5jI*V$yZ>6K9gj+k&zTlaLAkBg$|+?s2}3Xw1y8PU_BEbDbHzqXXiH}rl?exTwx~g zbJPfzx}u04#@` z)!d*#3+iymF>|cn@9fz-(t&%re~6yFm&oi*Z902(>0&UhR!`kJKI>xY)>@A>|P}z`X`uv?D$Il9ZwWW>@8IKHbBfYgH>iF|( zeZh~G508h;;{IN#1`p9>FTTED&T?Bm{1QdlmJh>GfPZ_fyOLpqT8^vG7)&^>WK%?d zf6SJaY1eAU?1lc1Bi5>|pcGkAyl-&QPG)>>3<=esH;$N#OzIW+j9En^&~CIZF%oZl zRN$`&$A7ji;wkM43*$-QOis=DXbZ5<+4cw$9t8&lZQ~|E24O;;ph#RMMB{5d{ArNT-+2wJ_HI@G z0$UnQpCktIwM6uisK)*dS?jX4Ru6(?wP=csWB=K4i4W6i9P1qCEg=u3!yNI+J& z#j|2d?u%R3@N_s6k@-GP4O#oki|gSd>{tXz9p�ukiKc8s;s6=9b#TvBJldk3I9~_A zGBH)XD+Bdz&jQ7m6GULi7g+h{ZGoTbZVM2glh5764s(ON;C~euse6!$hyKpJ#J5V9 z_*SPCiIzgif^IS+wzoQJtxJ#aY!`<`L{7HQ{GmvY03Dvjn%)s-Jv0tw7nH!|R@ zPYY~FVQ8|8YdmGw!v{ps%m_c>cHIm_=GWl=K<=dHxtBD8XX8jw)7`e0frK^2OUcJR z!)!UQQthJ8R*Y8CJ9Z{SH@v@FAIvU_F!RiDyMd`!s%u zx!_PEmN?rg=r4PeM1P-S>(LN|eLY!y{`~v3VPRCOv!nz5J`TQQZN=LXp#eOzNA?|+ zgXm`(L_0=l5M5zQNRk9M9Uu{-9KG41H=6?~MYzuk4;e=8BW5`wEcWSsqzJXb z8LDuPp=={-Srf6j@Ym zT9g_!gSM-F)$*OVHV>M=@_ zdJ%gJzX7p_mPgizJaUlUu6s(gx%hTfe%6^H80vF$sJjDpilb6sr%nyu?GEC!fk1wr zCI_CIZum&yIYAYR$}2%sjmE~eBIZn)#XX(sWbTDnJFsA)&L&TolgtSOt&g@ zO#Z;Sj&>}JT3@e)Tn8jVRGZr&$%&ZuB`W&%BSqb8(vIvKWB#Fg_i~55Df75SM;s#DqkLc;rbp5ZOIHCR5+I3f3Qn#*I>TK`7blze4faSCB z&=4u7L_S{kRiOUP*@U)EF`=!s(1viww094RCF+AXvG+E_2`iwcERUWK1cVe5pQv2{ zM`wuW^2Nn#5$30{$zk9ger|2pvkH-@``Cv)j|M(W`MQQwj`O>GItk^W*%;kJgZtP(-YO z>e+4OtK+Xb1lhI*5_0(TK8^6hm;}Tbt@A%_jcpl~&Igq)g79jrM1;CK?0Y?(3IbQk z@cP$B?G0K&xEURpYarZa2jS`<*@AG})i7Oy?=6jRb^dDIf+&PL-A1?(52XVPZ65XE z`5LFJsJ)59INQ0#r!y0&*RV6cVXL#U3n)HDE z?g54du()T4-o+`=Tl{f&nNft6POx8n*?IL7v!?0Fds-v=n%DZOB7;FI8%OY^HC!gJA70;wMGPrz|WQkqm%0_F5yDyS)?SW z=V>uw&fVsB=1rscshR8VZhjVOkf|H%DV69YSw{!YOfkn(EU`HLHEAW|(Ux_cP!{8K za@A1X@7rjYb^ppF=6gJ$nB%V=S11No1P84aAUuLposyePyUK2d5r`1+roQI}zhd^Y zcWHm_AMMY7)*_o9KFNGNK0iE4hELl+Q{+VWVeM>Cpbnw*m!;Yj=N!;D#Ft^^ zHcIomvjuT|Xp9bvv{KT?E_h0EggYuw*IG%2?e)dK> z2l!Z9RIeY-5yTnI(K?6feO=Ji;GZ5?w*?8!EJ4bZ39zvF?V?%OE`h`KG1@^<-=vGI zr|Y}Kc{y3z@2GE}gEDl>Vf{q3n&%!FSO>?|kX>BsDZ3U7RcC!cGe>C_u#sP~E<{eH z^@cUV5c_NL)$|g*enFkAUDg&VW)(4u(if$A0k@I|HPMMmueIq<&vy)xuA+2q zU^AA7wf;3BA=UuiQ`(M;m>Pd)YUJy%1P@@oqgjGFhb3727`@G_N5_=7sgWPnVVyKK#lSW^774^J=p?8-Jf$wWOZ$ zmx_yZ+~)Pa6G#&ZAq}njf3;JoXWpm6lFd8LTf+2hg6YG4*Jk=Qfi*VY7uduy{4&e1 zM61_)UoFdUFULOXbt9X;M6blPti5}uW;7PL3B@iBo%O0H~z9RKv6=}oQgfnaWC zluO0~eVe&t#ErXfy3>b*w)!yiLAwvLDPq=v7W)uc%niM>JH!07H{kQ=M&ww7CSrCI zs$*6Mht3aU;fM_dW8S#Nd84_g!n`oEeGK7GWrGDev_kn!s~z|oc|~}3ItpynG0DLH z0U9108SMZ(ySW2!T!Hb+^KE2VmeB^Xyf5&T1-DC}EkNt`M&cP*1#Yuu`7a?%fjW2r z=QgcNvcn1Rguno58xQfv69hScF;64f6H4G*LJ6?gIhZt2j&!BZ+Kul(P^=3YCFM;5 z3poCw@!|{oeV*O>-}Y|S`&d`7z0zrM1xo>7C*;3}y_7MDIhvc%4!zS>jGH`oY9FiW zxvtM9YgAu?kz?LesV-;nkY()_s5&7Nv@ih%OpbqI6+UF)6N`~kt~PSYKk|uSeqYb3p&2>=L@;S+#i4eAAt~6LStC-!SSw<{gyds_P$o^mOd7{rTyAWVS@5#is&gVW5~3l zx~P#j7_Wg|$#@^Zm`UhbE#eYqyyC{MZ&zaThoLi^0gIR~!RJSrFZGpi5_FwPkv8Z8 z`05OnoMkK965LOoYk;Hhb=FFMHip8YO@{&OeMcWLIGTN%XH|*I{fKD9>N`Fn&g`!} z$l|9}j#kx=SK0?YuD2>DsG(Y-?mtN@>SM&0)0TX}cOE72Pfn?dkTgBth*tF#YZNR+ zA+8s++J_edQK<9P2d43t@~gV>7pC=Dw0@y!eF+)cVy!j3=uQkPb{Zkqds=cNEwSV2 zN6tE!O^NX&ryYEMoFS+cg#{v_xNpA(*BEQcfZziIj&0D894&5I9kt_@{|fN_RG&6_ zN({~!V0A>ag~`kh93wF_sTvmxRpl2Bjd_r-zSsIbf0xLvI*H}Kp@0+j9D+QcKvg+6 ztufwThp`&lnB>^IJo=t)=ChHVbBzC0peB<}v60!ESPK(d$oh+QY)^+jc$VJFv|UUt zJOcKy!dq}Cm3k8HQj;={@30V@6>G0z_^qgTLoLQT=~Haeqmzw_GkO~vOOLLaYty3= zinQXIs&T}OkFhQgZ!ux&#nh($r=A6W;2IQOmI5ZvPF4?}ZhCbNZVR%?be$o*D#mO1 zY8F3*I_T#q)t_eV364!I+bU*d2R$S9S%n04Ct~g+P!=NQ_SPXsN7$9^g;fwCqK=qb zNKA%?vaPF;B8qK7aLB{K^vAQmL;i6obEvCb?xe z#l+~{)5A3Xwx}u#Ji1pTPh9;Q4FqmYS=J(RgFSCoB z9#xq*+3gnNwWOVFvrdvP3E}>YPo43AD{TauJ&<1|QDNL^en}d_0 z!en=&8j+{yuXnWTdQ$4rG4oBlUSo_^s778xU9c9sBS}bGp z+~I-qr2krPNT^Nob!seI_Xf{I{NouRJ3l3Guyp*yBpUr_gn7&AZy#cH_CpsQ-N4xx!PWcAHEdzZivMo}i zPXu1?pJs;sj^^(tT~%>7DREnH$b7(&ecV&}98M|LUOi;X?P3>8v1SO@W-o8FiyvhX zkDz$#z09!Vf7>P3I3?TY-?39|dei*O!+_9Z)EXCc=kYW zWid}e>D;!AroRw!E=M}tVwV&?ZRtXEG#nN_Gd+C&$p-0 zqD8zJ9GU4%9NhYxO84RsrCYRz_k<|l7N^o=wbFh=4wDlCxBSe=M;?=poUNZHtA+M^ zXXyJ(dOJ&gmZ-f^ZOCkF!$jH;jlU!93Pfz$5^y5@h^nKjuEU=HcKIiNMETv{N*hf1 z%@9~vmK)5s&3PM!cC_67$8^~ezGliVFy%9vmoHS?ZI9aZzJZ{Kk}$YYW` zcfRek;|6|{@^i^IkP=z+t{}}NMVKirG(W}SFDs^OYd2bZvA;_fHQwF3jb!E-z+_=Y zJTfKmm|+Zz{QhCvFz-QrZ^9KkI42%g5I4R^cfZXKe5)0Xt;81@Jlp06?xM&E>`x;0 zJOkAqOx@>Mxr2;Kp;8(BCJM<}X|Q517@2x}D;?lv*uTA5TML7^sTel1tbP^Plx9Ga zs#P18nD0z9V5wnqRG`i}rWrEu6c+9j=cY9lZottf77ls;4jGSDwf&BLrJP5EQw=1Y z6NvIKzmrDp4y^ytF#(Hb+MAGDy6PzwUr7CD84THk?4wA0AvN%8w13&9c~YO1+kZu( z|8%nn5yA7b_Zr)mFR|JLUI?B)`6dc@RnARo!27x`3V4<3(e3(M%?4KEKl&mqGB30@ z-kwztBom;C2!RQKb?p=DgL+3QY_38g6&&)GWB55u$IEH?oV6=w*a&@|=|wby8>^=& z^4XyKBSqTYzZv@`92(dKoq*z`@r7Zr!Dws=%WMCcZ7yV}b-?%({aj z@ob@l4jK5z>QnT2Y7ton5O=^0y^pUK+jEzVs&8~@16At<%z~;HNaIf6d@mEfi3wHm zKo^(a8xcF;wZ#Cm<@c`*6!6ceR1cjkE%THvgknl~A9fngKY32v@IGRPpkUV}rdEr4 zsDr<rUCFBJXbVys-0IHY=9X zz23}>lA=#gJMXaTY~{SLIJL2}(&vTsytG9*v$Mu&{1W2=!v1OvyZUQ@Z=Rtwn|Gxc zhiYV)vtR*>R)2~=(5TOB`^mtkVryVsqUKNnarv2ORJ7!vh}BKhG?ih0o%-D+W=vm~ zG0nsKNIh39g8F)~YkFLk&KB&iwF9H=A<|bA2InBPNm{rhMB+Lkj5hJy;y0sBOu2E~={Y(w6(FN*>|3s~&i=CU+*3xIch*?WVZPbj2 z+c8Ov7>h>exn?Jk(T!}&cdap&+sq6zkCuTK!Lg2vUq||_w1y#W85&HUhaF0w0^Mt) z6ud4H)XlaRkE>^SWxBn1J>k}nh(A76GAuGa9wdluk53$W`QO`4lwO__pI!!g$I#0^ zICZu{FXPna(97xz+oqQ>@w$n&n~h#p%3`ZNR%oz%20oBSqSVcZ7d* zZ4x~6l)Bico`8KrX0(07X|S0YZyImKg$Vkjp4Ffpj|aCqQ@GA^c>Qb_Bsa&!+JJlG zPF4AxDNtw^SYQgcO#yZlQ3ZUb=SaJJ!p|;v#gvl+!VEuqN_Es6bUQb#&A~pO$IQWv z>*DgWaq#h`TTc`p`^Cq{@6%)Ov5Qk@EBF|vHU}TCyPz$6)b>bLMM2h9c%j1JOtGZ#@uw}ZE^VgJ)QfQk z+dOc(KT+Z~=OJ^y+tl1$L`lVN|G(ne1UbBhZ*I{sOfbKie_=^q8NmhVvp+cyW+|RzP`m?_xCXy8SwbLZjalbBEswD-^#_0 zj*m`YPN8?HKbGE&Hw|R{Hw}!xzRa0s)4P`_a)R`ZCSi9VPPzM_D)j$GBe2+E?${!) z|1^rEyyo1rMpAZt5<^n%Uehv3iAHaO-vgg2-8a8o*1wpK5Mz$i5U=PR*qn~Sarkf| z=D`!t&BYHaked|v?ECCo_l$1SaREdTEIXk+2fhxBt>O18Vt85=BK6H9>FQti9Vr%1lN4~RuMtA)g)Kwg|uBOX(s9}(m_l`Aj z7p@`YdGBQJ_D!&cH3TXeta`Ys&xE^b&-3cR;L)51pq&19*s=A4N6p)jUs&-&JN3~p zJr3EHcUPDnlUC-d@F%o2@14L#Hx*~^_P_A=1o>iG|Civ)8y0Q2Zfe%Qr>MVeb$WEs z{_2A<(AD(A=J$YNuZUsg?Cu5Xa3?LkWyjg!=+Jfvc&-R{mtw4~Z_yrmT8Rqi8cph2 z;%~LR;*a*2Rq-eMJ{1WfV3twQZ@q0yp-rIXV~UZzyV>gn z;@uXp&X^cuogurFCPo)V{-gKi6ZGLO?JaLzwKmrpeuGV~&Szu*SKp|^Ut;&>x8DSm zgkCMDNcD@YyR9>xHhy4pSnr;FrzkYf6|FXrQ}Q`~2~@2N4^T%CX;0O7VE?jVn*Gak zmNoMWoJlcH#d)C&Em7p*r2FI{{E^Npm4XQ}KRTTLv?aghn|(==JLyWUC0$RtnBAt)AsB8M%q5lX<=X8c3Xgt@gx0e@BH?>Zj1SiCcX&+BJKYd zs+Or*caOq+r}~W+AnsICY(e5VQKd9#(Se=D^X((FQ*tM{xR#Vo$|C9cg9WpR_r6oz z@gM1dr|ffK{bU3@3l4HgPnMjgEhDa*1)RlW_!Qe?xKhnIN8so5M~~BE!Z^t|4e1{J zTb=ZEu;`)L>*YxO?R{s6yKh=kk7CCOh!a$(hci?@{!q}&?{55%2HcKY><`UkRdRka zOUJ`#V4Nqw?52CnsGqO%O7&mnq4RSi%pRndF9H|Iom9iUq=`JcjTBAN4EzGc$u2E} zvF9viww?z?Erp{^U_)APv{KzMXBEJv%hTaXLsm|Z1hPZ>0ohJ~v|9wEXCp}qeIbCK zi8GQqiga3^9@#d)tV9UtW!7jFINsjZJ8--M%SRJ$ZR0(a2qg&5Bos!zT7X%JY!Ln= zgD!20j7k$H?8vCh6w#6TavU^3M=<$@lGQ`e+f^zF?pJ-WHM}M(Y|X?HsE+oW3H-ZZ zcFX{FhUTFk0G}Zm14bf*$!1G?aAg8^AUrvX*d2ileF>jZpY2Wd%&*XNKN8*IqIK1T z6|$r4x{0US71+7Yf5auZlP=(1(!WVnq$cBK?;oLa4@ooZ%vRP$zmIy9!c zZr*qPLve&jX8s3i+{9B5@tc}bU1R_nGl=XZdeuFWdGMrP(UPZ)b$Y^;Z zhAFol9Hz@e8=gNRIE)5kjexOyvLcEE^0$1eliF~Z4h}Qf1c$+Zr%o-O-~@-MBc7x{ z&ZmRJ5FZs-ys}sN>?v&zVQDooM7&-M$EPS9o{N>Ar}Q;udJDlJQq=PW&@V01Ox!M^ zAySeOS_==+#<#NTi4yS`4UQKjA}tanBCSc3h?&aJC)v(OG>51t5vwnNJ~fRJ5y*ff zZQx})O2h<2^r63VFVy4zag>P9sx9xQ{b{qoYJro2lMX zl!ytjv?qq{lmn9$KYhd{xs&#AFKIf@W|M^OFdwwA83JKVNy9MEM6sSsFsNbkoXKW$ zx)Y$DHGei(w^fE=Oy6S__23Y3?2IFTvr}W=+P=COhk{Ns;(>7SVBg$a$26}qyXvbhNvjv02bMu&#tsPp>iN#9qP9#!% zaf4QVEj42CeEp4SDAW)2QKd{~3W5pPPU)maw*zx{z zWBk|jV%_|Ss81x0`LTmN!+q*GA5MQ~s^_sLo=Rrbq<$g#HT^Yv^PI#O@Ra%yL^;kh zwp^*dXTemS!p#iHhT~-|oFUp8oUBvTpp#@L$p<1%_4508`MuT}gL7?n?Fyq&-YBke zQ}vhpr!~`CiIhO_wN^Xq#aixbL07Kh2%Ch=3{rG8x}1FV+E~4}1fHoyAD-r@!X}+; ztC^TikMz#KE2?GTSyY`k*S2rIYS~{VPNYQa&jCmrD+Zcf4oI5!eA4tLJ>MpiUH5zm z{ri91^?!_MtLw{p{r}MQ;aV!*bkHZ?PS-CM<)nDjPfGhg+g2a3Mbv#|b*3tfXqDz+ z6GRIYX>hZPNL4S`#l8|Qd{!DVh*Mf}^gdZ8H};cQiyHC6CtqkHTXr8$Vz78|ROR`0 z<&Wyh@gnz>j^_PVKF~k%fl~VeVxSuHfqwFVDr=^+^(WS;o>kid6<-C8i&OgNDLAUx zVv=sAojIl&9cL_zvwfxdClxkF!FSn53&qbv%pUW(HD-f-SBje7V!32!pL zeM>k;SSTaBu^~8`&A4gVpH0Z?vcYgqT(?m6CKjmO#Qni|L1HGZZyzfm>T z%VxS(wv8!jjTUly%I<&%h)5oUS$3=4=Cv`HKAZ5R>ni_0;=Tqh$}0PRfKf*seMTiC zMJ1(T!^(hsY0N+zuoN9d!7{bo%2;~W8MTb0hEX1_Pgz*mZf{#{xz(@jMO#ZP5CVKj z(cHo^#d7NsY>}~v$~yn=x%Zi2ULLf4`ThQWyubN4FI$GGEHh5 zo}8`6PJoA==JR|@unOeA0Xm!eh-cpt3;*Ppq<9r&hET}wXldU{cezZ9#YQ%{M!oeK zeVRUnO|g0Cu9A3nI{9#vL)~?G*Pa}KoE9--ZzbFSO)dPq%dqf4@c}1}?b-f$dI!IM zcIP}@I&ti^TL4-z6tguPu(<%dcZE~S!i|_t-d8pvtPdMVXFw?2gRupXa30jMlzI)C z8ahCYWE0ULsSR>&k_*m{+|i_sLzpOq;} z-o|KxW~S+J;GA%=lF~Gw^L2t)f_HlrPOU7qfwIPe9|Er>_ahh1!^263H2TouSK5Da zB@6Eyv3eSstJ4zmCpQlpBg0W<(5e%*QWt{GKTYWjKjXPIwcOO4))}|pigMEygdw9l z;}+w2HG)6C|1XvGy8i7n{yN9VH1vHbp2c_kjUHQW8jkP=!rkM_P46O5ng^~dH$96$ z>F9kMo`cJ#_)8H#2l?o)Kir9T3MB|@5ai4&c>X1(1aLi!+d^7l6EPFKzqjQ5&y_HZYNk}KPB zO{hDzaJ01TDWOT1zZ?h5P}+}I(X=wsNQn+wQVDQp1r>;qySC5B+mW%mHvN;h>f|Ed z2>pLelYj%*D5?vv`RIR!b+`lNp~G2g*ZD{|W4S4xfcmpi>3>4d|w7okLd%>i=Chm9HdFG=-jZ72AhQ^P1Jj>k;o3j zbSv~9=(W}p0YqTiFQ$f2(ScGikhC0;7VbCfNZa%fc*K9wZ*YEXh=h<)V&yAPc`j?^ zPk#AJ?OzDE&j+*wV^>J}3cvqdkB@&74a3+oGq~j}##Q zrs@FZ6M(P*+RgVi{t^IROA`S0{AB=MrB^>&2e3~BfP?iEso?-h{g&cg0QmF?q-2fZ zC_7I=)a#c)^xD-DWmR8Dlr29VgtDQ8GF4CU2c!r=nMtbrydMK)XM|`~s=!fiBZ%f< zhouqz*~DNw%B^!i-^=1mu2F_!Czto;Vp&QjtK;~khea2ayntD27wNzFHjqA^Uy5m3 zq%6Illja5y%{8P{(Y05)X3gpv=xOg`40;!Jju}jY6eoRYkh~9tcVwO6opv+o1f3h! zLz__GL;_1-M&t5nvTs;5q-&opr7}qR(g;|@wFpa{pA)>`QIQiQaqu0RjQs64&(h0( zxLhn6R<1fAKeq^3&lGfuhbutWx=+l@f1P#I4pr& z?h0V2OM}rR>ROov=`8BH!C%)gpdzTQuklKC9ULVZ(Z8vlBB-ujknI0TUDrc4$+}u` znG|v5@V;Iq>xlh@i0T?}&bN8o?8zIY$ zgYyqC$S`R}-rqxkon!>8;ynn3OrT)J`!Qar@R~~n7S3yW9}$97-w93llAiDxnQ&0k zqZC2pvwZ4V$OqSK(^&w`(deW(=#(qI7uFd==$@UvD9*Q3XC%MgDw*9zPyw#rfUz0p zAJ-nziOu7u*Y~HKrNT~DBF4t6Sc^$|O-B(%^jdd`X#Eg_E|Y@|s|T^50znlBzaqId!By?ASRB?yGk5Nrprn zKKiD~$`TAJ3-IM$n5LXj`u3ECoNrJ_1h2$|5_aV#0P1RMf}o zl!H`hPX$5YPjK1r4?8ujWMC=t#SQ7qckuTH`IZjtOmN#X1_>5k(3#+K=pO^^_gC>z zqG8QL5iMvP5Kr7;knf+y5HB3jneWQ&2KoLP1kizcg9M4^c9u|gLr?a?>S~@QyIU0sFD6a+3?elwEEbgHVd_7D5}s zkjdqy8xh_@uwGMcnuo9vq1UyrH$%7q;bR2blycLf2t%fpo5~ROAf)BM#tPwf1P$R0 zggpq~AoPGrX(+ z^?)umeAI}cMn(K3L3uK!!%{0v(c&K0e;vgR9*P}L!K6#uNCz5 zBas%ih+%e>Z8@WXfxIA&d?n(%&UaL*Qt~i*o=(+bN8;1F61zNATcn?=)z6EGv$aL- zbk49n#@%VZ>q!&+zMB{B6X@>xyuqKSyUBjH5n0Z3wl<(|j?+m1TLfgfnY2+hU>NpM z(4L-9vrv0zo3!|WBvbC@v1pmQZ%T!J4P#R=-is&PmggS8$M^n_q?e~+6x@?4lXf-_ zibTVdA#Ah^pK)=#MEi`^sxW9 zI5xa!%0@-wiU(o6na4-})#sZ_ExsQ`{M%QFj7kwCwTGVz2?SOWY(XD-7gQcm60s5u zS-?sH?#O7Ml7UNrK@0voNtjTv1NpFv)M;w}+mfcPlQgw)s-!8ePE&%UwB;63dihCW ziQbh>mM~K2$1m*J83h+gd%~&7u2a*+dJ!*27V&jZ6crIdNS^|&de+;5(g}j@$JYl% z>9s2*FH%qZVj5cB!+vVy&T4B_n-H zlK7N2Me#VGbpG2x(kj;fawchY*;^sfs(zIyD#C|{tXckw@qp__guT8FLfxM!pS)#+ z?4#%k3vAf3EU>aRmNg3MVjSJX7Mi%iqLqB#xXVOUv-9|E5(a6fHsAkpCaCXyGX&~E z66#)rH))&ZAH?K>FAUxU3|}61W_S|?yh$POex&;0-7IUD@V?=HITO6w{~Q8u;Yv|d z*YF0An@Cq=-S&n^j{eQ?S4I|nY5tcp)jU14=2ovL>g@d+NBgyK|DLBUCeuu^9X*pZ zqBI|s&f~3Li8_{Rnf@c@2Iu^{b~19uNS%ex+9Apbo)v^Tbt%6TgM|(???4uL2uj}_ z4H-3}|HY|FnqRY3>%pL5Bs4w94xKK!x!P}sF0XXBFz>Lg^9o#YGk|V&*u9LPQcB(j z`=G5~VT)c(Q}m#ErSknj%82V1;l&*HyTX@Qut)ek z{QDJjka;K1+b&w4m(QoZ5g63@{A&M8*PTxGltJXSlb`a4qPn_>RpQ4#WzI?mZtRRO z^vk`joQDNCwe=Zl+cf>o99-H9ukpgljvS^NUPGqefTO-9ApA90_N7}AOt@{_jk$NO zY=#_XS^k%<8=l91{d!Qt_wZ=h@Lqo54)axAxCdR|MEn8%3R#B5o?&&R(y^dR>FHMj z2P1HqjxZ;>7@nki9xw$cL1ZfQKwZimsWmbM*5gzNKa0^_V8cJ^!@epf%P5P9qT7< z%<{Y#j+1~tRS`Z@x3gTEwm5-~rB~u~Y{f_rn`T}U`0q_?DDi^tPVr3IJI}}U zk4NwkA_v8L^q4(}VR?i-K#>MGpP+tkbzLOq69N@4qUUn07XmNDKicc zSrSDSmrGCHOh5zGNI6qW^T5SuOeKS>OL#b?%4D9_YSFFf!Ffc#f*K!1_r&}}PD%aU zvrVQxbNA4A68;3JZ+wfBe2WwLpI(uOy#Y?&i5KfvTb+&z2eL-NzL_=ItRd#ty! zDlss|i-CcAC&a+8U|_(T{v;riC}oTQMJXA8YyxAdznmbv3;WaFdd#PG0-*CbK*Q)hIN9J?oFW7g1EPyjw&d9_!*d=VFk>xED}>GpPm^UFnhWUeoXr<%}8mv6Zbuqnp={gcNH6`A= z9X_P-%m?%tK?V}u)7VT$uBOK+!K4(7K4F=QStRL0Nr0v9Q)jm*!%FaoBv@5U8a0Wz zqAd|;CnT0>vNe8ur1C<1g;UByFpq=X9C@NCFn#eH)E|F-PWBMCm}4Uh5QXjnMsL_4 z7i6P&rxL_Dt!#En23qXd27%rR2<oG@o;o301lKQi()Pink1DDx3PyARUU>sgf=SgwUnpy_rgy*OuwoM%Lsi z0GoHz6%SHuT1Q_drNn|xkH`|oBBuGTL2`TMO|VTxco#vqoR7voIleqC@P{V#-%?S9 zlSEzJgvELYs|3x-Jtw1-RZo!i1>VOSulBSLQ&xR|K7{#a#c~Wrx~?dn7v%+QHRy4_ zHHe#S5SL*PcZosVc?NOa4B~#A9SO^q265XB;x-z@{lOqkGl;v_Anq1}xETggSaSzxWCVe#K8fBxQ`6t-ZF@L#vo2Lh;tjn{n{Wd#~^N;LEHrfas7hhJnhRB zFHI!{c@BdGjk0POUO}Ge_Xo)H^tX}d_|72iQ-io|261l~#Qn}7ZlyuoB7?a3265LK z#EmwH8*UKS*C6iXH$gaH3U0led{rfQgtBTfj&K2A%R2G(z#~Cv_2Jy>$;h~GW<W|-Al+*Qefgw8oW~&U zE`zwa260ObhWkwhanlXr>;`cc8N>}Ri1RrkaqyY}{k<|KGTl1{EamE7N2Z$_Qr=R` zYWUcVU9gYm?vBhq_}<94&kW+;DT+*Y*VxFoodz`X?TW~BFB+tKZggZiW)Qd3Ag&5K z2I1rSYJ)oL26=mEk$DFMr<3<9DzFDMl4Gu}sX9nNnPa(Gb z4KB0nj^jh96~02Mv7dw0{vbLknA7Ij9u2o1FkgeKR@U3e7ykSi`D*dhSnaKf7ed5W zDAdk(uJ-xL97<`XIiMa0$eLr1Mk3{bV5I2G^S;L-(=9BIjN6tL8MoVjnY{meWV)3G zc^4VPO$#1K{!Tle)>zXmxVR1%MGA)}Z68qAz%f6Tp-M>*)MRWb%EYv&CLenh>g;OO zU00e@4}X&9la*j=)@EOE(NPl}H{0bRD_;I3qL861N5P3_bIJDRfwVm^<}I`U#|n1x zOYl@&q?jo6F8*gqO(! z_ucD}aVsy6jQfoN{m(Z@cXCQ(-q8l>9y<`3uCGD59bZJI8@(tpZr|6DahEQSjC*xd zWZb}&k#Q*o?HFnh_dbivn`KbPLytwKyVD@uwNtY)vE%4jIJlFo=8CAnpZ& zxQ7km?lXv6Xb?BkAZ~&|+{FfQ0}bM$4dT8xSigR55LaUm_qIXYvj%Zx260Oa;(lWg zH_agKN`try4dVJ6#GQuyWB8=)JA=3-mqn)gjX~U@OCr-BmAFs2I) zWXeK=dbeE~S;q&-k#Q%Vjf@*OD>821?U8ZM{wXrEM5G=oi-%f-{ z2%`}0N8D2UWeCq9yn|4S@CCvT2r-4_rgIUJ5w1qaMYt7VIl?Oln-TUPe2s7%q4#a& zreO%F2-yg85$-}*h46cXKOZlpI}i>b z97E`SN4aSb!leik5%LfU5gtHz4B=&j_Yrm@e1-5cLa#ev`;Cx-kcDtP!kq{YAv}Tb zD#8Z{`w+fCIEm2rF8F9b7>#f(!hD292rChOhwz3TYVh}Sgzpie?=CkDM7S7X0>Vs$ zg$VZ{JdE%H!n+7N5Dp<6L+E}_x#=f_9*fFNgAp!6$VA9TxD8x& zgu4(t2u~ushJgLWPG6N)?0kf}6#JBxBD%fMaQ9H`egA%-z9OAS4>^_vY80zf?=jDx zSLJCRcaKaxdz+Buw}SF zv31AN6<$OeQFWG0)XUed74B_ElfPXUGkqbUm=RV1Q9CYkaKOv*T-j)80}zNY$@hh8 zUIvL>R}6lQzy9#{gYx;Gdc1Bg>uH(O=}#XekukTG9a3{Pu^iY0K&ex&Z|uvR;IONz z2sL6)6$$|Owv7$-U_w6d;SFS&g|3Am|5{;AOuE`bX5F>fEo?`Pqe9%xo^up^31tot zr_OFvbGFDW*r5?d6jltXE&Q7|eArfQ#BKH|70EkF9f#pNhin1%t2q_4qy7W!i$cTT zfbr7Nc+1C8bww&vcjAiqf`0IoPkYZqwE(!s+m7m9o0I#@!{@7KV$A{Y7tN~ z8f}T_EZN>HX%e7#UqFBT5(HU4*MKAG0(D?yoqefF$0is&&S0gc0WfCx`FGJK2A}wZ zRXOy_9EZsu@*Z>Y<+$8{OpPp{{c-LFrNm5w;6?P9G(UL$An{g8Uu|t7D?iP#KF`TN zIYG?K!bYjELZ4&C1qkZAH(4~h*34#(OeW_^z>8+?1qGmo&W+fQDG!mEd-A7RhL21_ zHrOi{4K8>JQ6Ux^xS;{iM>lt8KyQv5We4BUaheX~DkUos<8!~s za&RBRF8&UpS*vFPF%yGf4ER9|&{&?2HiDJBZP-3GZ+|nKSnPi@3N(yf%VfI+5jWW9 z!Eb5P)&B&U&#QxrHr#dweXI#)U}I)9CsSMw>~dsWrE7$<`COJ$foNztQD?N;8+q*Y zu3j^J=ZuYcB8sE{_)67+`KcezTe;KJoTnjEa7<*q>c;4Mo$xJ zTYw;Jc3R5F*KwkEyL*`Cs1Oo#d-o50un#MG8rQN-AIYzMVF)zQ||P8w|CkN)%TaO)5UePpl6;5*2>rP(YP zP|ourZ~Dp8P%ExyZWOgYPs^zWMb$d$642UO$1eG&9xr%nlYfZenRr8EtSQg8bR=@{ zk?())t96huG^Eph)%~VobG)wfi=opLTObNx?wT0~QnOdW9*k!fMuqjw_qWKtNfW|( zLboo3bMb^bKzU(@;ly+Tgpg%n57;m<%CdId+LMovck1uJua%9`9P6C?i++S{D~n^x%$lRv$*&iA)=PssA&h~B z44Zmg96O*ck5^$}n3+g;WH5d12HuTMzz%{^@(mse>H-pS@@dFv|7pLb?f6*h*g*Me z9h>BzE%HwV{Q=rH)PmaZ8RLc``env7l~a)~6A>nX%M{E35%OzKo`N6yEo!-G?JD@H z!{6X=KHh&lpu6RueX$^1u>xkr5YeYvs=* zq^}Sg6Wo4@Q^}RYD3q1Uo=QS{^4MF6_>&K7)nqc|@8TRKl=O)`#z(vQ&;;uzw=_@! zSAe^EeVmiMUyjwD6YIj3$-F8|7xJ_;i@gTU?`GSQ>(`W7uCzwGd!^fJ+--EIvx-i1 z2Jr~P{H4erEAump9r>+j4N5o`SpxEteQXBIE?aReAGUtTHXrj2Ozf@mYpEwqDdH+A z3*F{}JG;Qw`eMe0{fK-Q_r>yIKXx)uh$Jst*>kv zn0kP1!|O|xeJUIK9N&Aq9x09?#VO_W)0WB~EUCv*Pq7+ooy}`QqL|9Yn3z^pGvEZ< zgCdm5CMC5s^#t3^YL%Dj23H;#EGpUk0r3sCcR($UR4A`+8#X0%?}$$rPImzrR+!w@ z+Yh+A*_WAJBdMX?Jct1Y%`Qn2u6@a3Xzmsv=kE(kOXhC(XWsW%2i(?>Q4DqV>ZahHL zU~>mHm+)>X99h(ZZ(?4Fv-p@2X^z(+2#8PT*x=~`Y((99KXQR*6Yu3yz@1rxIkoIShCMMK`?*f)9f3#a@7pT;TY?r&s4Y z`EURh04b=!4lFnPDR!4xm}3nqvSHe$7OjKu+H@4RvSU~rbx*V} zw&B!q9ndIN2FW|L+<06afWB+g%-(pEk-ROYilCp#cbxP?(rv8cIT*TP^6oean$$ER zg&DMbiN;X^)*FWjoHO$@M~RdFL=rCw?at$EEl^27<7gj=W$)!l=5Y^%dFcV8lEwu3~egdK7td6P5CLfa!FhwQq zR~gXgUaL-Ej_0+U*V$DxbHzNVyOWmZ0Ja*Jodv%)ViFwm4xU#dC%AvQK~AC)O=Q3R zf6LF7(>Mb^TOG{L7I(qVo~;Uus7&PRM3&%ZwqxP^tZxhom;4MwQ1PO{XbRS^cgMes&KHT|Yl7@$<80$C>!q-#-CAs{se$U*ie%*2&LOl6GRNzQRPzOeskL zMnZ>i%20h6ulC}KgZ}vLAAY|I8Opt)#ZU$d(}(gk$Mpf^!ff6@c;(8mlR3XcGig8j z0~_EY&<-Q^*RxCZ_hV(Cv!1Yoc9zcm7PN-5zj;xpRe!ew? z{oNgek-nh}>A%B>GJgJ784+aa?LQDBT5ZUP$O^^Jh>C%7)1#e?sH7`KRO;k$j}Rj& zmW=4OHk}a_>x`(Ei5SspFrph$eVCN|hn(m&*dVc-k|0jB`oGADhRuPf-c@Fxf5p;Fqx@!h;tsbj#6TtwT{*D&l>uJHBN~>J5p>o zZv3=}?B~E@F5RZ|(-I*9lzv{=QTS-xm9S8GfKKmwCm{lBZudy$O~ND7M&dU=Pbe`f zow+!_wv+FNECUUCF9sM*^;kh^qBy>5h46Y`LYLPnHZN7dplqP&6nqJg!o}qDv?SFy z>P+H@8`4nyO22d)U=URUg!BZ>3;hYEN3Z{Yk2di_<%G>78>uXRIo6sDX2IAWrp)}zcK?UXr?a`m4Re(c9m3=;<8U~8=z1eIn~K0 zal@#l37~2mhofp7hfI~e7`}Sxg`mY5Ifkt)rM;fD|#a ztQDy!rq=7!6QWaZ#$&B02@gL0(IwHMyK(>o&ZB8iMecI)yPp3LQ-l2|ifSTM?(`$` z21NKf<#s&low7@G%F>?A=oE|6FK3-3CCB<;0&;93h5J`DzjUml4TWzv)?rG}0CB7e zkVrG-s5e12_i_dlP{ld`&LMTa0i>B^d1O`CH?=JA#!%%`Etiv`Vq zevHY+HIwM2d1^k<+fKBR*p8FeUo2ZlidnsWt3d3z{`wt2EV0S3P9(%K$68NC61XmL zTkl(#gv;wm#HGLmGbP)$VUE%uX}Y<$j_oS}aaX`%WlhG0q-4DyP(+9V)sX*Vvyr)> z4%4?`)OlO5u?Y@=of&(M&E3=Ph;>69(;S^rL7e6~tW5n=#k0u=q>HO{tObT3Jj6m8 z8&j|Ijqr*KZ8s+0ET^IJh&kq3kfAw>^}?ORNYDcPYxqVF-8*b8zSnXAwAo?WEu7V( zkHD2ZBYx4Kg5P6c2i<^&W0B&zbtI;C1;kWE@@#Bz)k!&3 zc`^o?0V%4~+4cO$-6X2&LPeF&O}9tu!m5FPd|V2vCcm&sC1Di<)B>bVX~jy3XVwVg~+Q7B(Lal9u4{{$g44bCV90VJ2|RoC>RegU*p&nA+oB$YS$qnkynkQ8e-ep zbYlmUKR(_5y|`%C8KoD#oAWH%a>sjJ|Mj+2yrXd z>4-!7a<&9Xub2GNYeR_idLrtq2qWoLuS>7ZQhKcoVe)S``-c5Ei87?zGNK)6JL0-Nn0kgo(gZbEO0w>vx$Zkdq}U8UAPyjy zq?iE+ezvy@yQ9Gr9gtS5&+i&UX%{a9-qI;j;KgBkr-K9`iLl=UB0ELc{|EVHGmu~Z zX#BV3S3=kFD?{F1HO@iC0%6ydc0+{NTp`33uKB-`Ux{!&Dpy}?`KFt~ ztQxxy4*6xqzpb%LK-ck=lE3I0J29G|u``MGD&A0y-K%ARb_UZ!xK2y+%4Tl<>8#B( z(AfR$%ixA-8bN8SH{(~HBQaa|)68mjHfao9z6^g}ZW~m)8x#HttABNxnc|)N!oM{6n#bdwg6DsczfQ)2CV70*kE(x%wF6|B-7&7xvpHBScbKc`!w zv}HE-86wZ6`xMM6FjSb7VrH;^YEvhg;WabY;`u6yGI_?2GQrI2{!zH1VG67C?$aa9 z{>afHswcr&X^GkW^F#~fgTp$jmS<6;Vm?zd;L_fvW>{FXeWKabeI~yt4oIHe4sV@_ zO&K6o{n%cxuT&xn;1{$&zSfM*|ClhY_O!>t)qf2v<5I~+E|i{rQU2jw=O>#yHmXYq ziYMGPUs+qB*DC121~oxGPA9MvxHqU4&J6JnCQI%7`>GH8MhEiV&u8|M&xSZS@pM}X z&9IMx!B#8uOCQIYaERqYBuDKFq#2oL)tSrhTOC&ZRmSCCD9b>=v@nOE)`bustwS zj2={fY06yqw^MM?zad492Ek9J;I3AagdaoHdc+)sKwC+Mva^uP!dt? zyJ%uy<2PXw9UvW)Ahi)l3j|EMlW?6TMgP(Mv+zJy8#DExXQE&wnwklxay>53v?%Xp zT2r#EiBY36t!2}#DO0S)N22jtI>lO+ZB406G^bRS%1?F0M=U9Ife$wMA>W!(U;I@< zN_}arC}2nNk@S=uNTs|h@~=SYC;;{JNy+X*_4Fy5-X~>BA5l-A(kXq)vitb!=~I^9 zhl;aMaUvaxvr%zXQ)ifo9b}JWOGklakx$ba*DNi2By8?;n4=@P73UT(=(-_c^LWo` z%aQ?wX3e~jItEr;u4_+$t)Zq-EPo^{@B1ZhgXeJPOyA|a9yS1iU5?buZ>pK2w54;j z<#XVmLYr>YUzgj>GcOs`Ss%!TN25kCEC$xt zKe)m%e1TqJ52`QQ40fe~a=~_=pkJ2dQZrpFYnht4jAh-gX5J6Bs748nC{W<%h)1xG zt})s=5(%^?=usqd1~blH{g7ZKIjPhb{W`UbSSL@b0X{xRg5aq2&@cVd-k~S8$U>WR zx?JP8d0~gMo6jo1pDYXH&?UYlHlARIIM0HVF~c$G;DRW~KqUI|QaN^qWoeI;il%pfcs4Cfa~v(W zy$@+BY)*dei1)z|OR1xw%<=a^Yy(+J9S0cP>Ns$8;b5(!k+N{!^L;Ez zI&k+5?z6>tic{}FMp%)X&)>S=$Ho*Kw~2xYylH7{8C8b;=i$bc$QmGy^eQMb_o50a zun!ej)Q0mg**M6ecwwUo9NOr>S`N0Ts+l8!j#)Vp0XTDD`*uHbjKoeU@T@ux5^mjF zut7!~5jM$Xo(5o|M*NysIbjZ)n`=uQ>+Iz((aS@PgdNc}qDPYV9{;Y;)QL(ak^#xd zdu5M(C%$>MMGHT(POjbZrcW~$!@S$6I!5}=nGBOfSsr!QJ5(bBlHnBIzT1_i3OBEJpwMC~fsL3-RkV~4<`J#5K>=gS*`@T0R{C8_W;i(qvCmq83a?G@cnHQM z`0-U%aUcV}d}FuZSaG7)N`C}NvM8U^3VZwqtCE0D4R+t|Hf*A{l9j>KdaUPj>CjRC zl!`QTTQ^oa-%tIXm?+$$z})ekeI_;6oQ@f$>WIfs)2uUb8mqfz?(b~w4_DyZlBd{` zbK)y`45q__X2Sj`5oXA!iME7j0`j*#sKy-+{u@^i1)7k|pgK2b5c@K%o(W_W{{W2Q zV|?%(jpLp;)rDy@_Rdo(0NVV{fmyH%jV&l{#30*`A3mw>lqqpD&bcGVe^I8WC^_GQ zc8~q&bH~BNgs!i*`P_*Yq=YIe)w;!dlpa^55yt9~Yb-=1B?AUWLJ&B*3=fqlJ$~K94WP zHN@jHfZ?DFk*!`sg8L^%C=thMfz{)HPAAp&l@uLs8 zLo=*}(UkmEe{x|XcjofDQ-*u}8FYNpdPiQcL#s5pO(K%L)cjW7iFZp-}=Zd-8q49CWA`pJKyLHqt#!?6l|GcEwu?n!r-AWV`$R&H`Om zL8Elo1o03h2FP<)DY0a@l?O-dHQKm=k$FI6dJU>CtoinE!gQrBRpx#m5UCAlMld(`VmaY=d z*IL=i7EuKK*7mr8Cfh4pMGXD2m2Kjge%Z=)@l3yLWrujCU$&Awb*roBm#s95XZl5b z7W^q)MZb9IDPHJzAzRst{-~?y4?fX(lhRf6%U0U(tFEG7nu_*PuQjU^E$mqWnyrkZ zkF(ow>lbc)_^l>l?Vq?7u!iJ$xTQTBhr7EWNAon#Df5yGX?psM!0HSfo4x63nx3|? zhl7gBX=lC0Ioe%un78Wl;~D&|9Q42RIoC@wKSfLZm7@rrC)23#Q0>WG&-C!a(O?3?>VYbrX+fTqkdc^G1088bW;2y^egAR<2Pg8 z`$!4J(yUs0f*!@BIU$%r{`ks9A6xk*eOpDp5KQy+8D_|E75XPq7+|)k81&vY%E;9>ZU4niWQu7pOh3l%Sb^mIVt7bsGMg)xIoiq>AMY)kJr* zu$}VMbdCjhqC#1BNXoE8gt>DIaRY-GF1Y$|CNH}Rn46E(_A0D$8gN^3uG2S$e+Od$ zLQN0sZfNE@s@KQ_0 zyo$+E1#p?DWz14DCaW1!#jBH5LRMMHp9mK7YQNeHA#ZCl#0s8GOhg~BiAmH44l7ph zJ=KYcRLR67Rw-{fka*8ym*=y4;eEn2Mciir<=(%nwkzEjP}@OK2S*m~F9@9a6#O>{ zb3aQSCSupb(L^jClhOvv#&TK#*nBn)IP@zToKn%ypA-#~bVY+uDpau*P$_Vz6s})D z3w>DFiEBl0JidcD&8&K69#*lsN}v^mLnYwEl?XC(Cyhbv0jongX~P~CRJ(Ew$Pq)T z`wV&NX5}n;7jzyti6h2}wlY05r5Nej%7n03!6#Rif^~J4>U)>?Jiqc1dHi{|XC+CR zD9;l@%q*DS)a|i8QgQ)4Hf^$&H7jiLJ1t(zN(zr7f}gKGNc7~_xe-0k{S`ET>~MzJ z1}cIN%*kfq!y|bI-1r}FV$|MDkS8S9 zs`IcW?66lY8s`1N)hBmGJ~!zNKczlk#<{Dxx>^bP?c~qwpD3P(fM{)EG`<#^u-hqg zj(q-{H+}XhoSV(8n*sNv`g#fHZ&6d~7ht*7Ry%a&pDEc@z)BozT~mhTQdDN?M4xs| zl>LyqmE3#wWqD8s+v{mzlw}Pg0!K?sEh<$fKnc*?52f^R0@|6`!080Ry5Vo3L%)(z z5JJo+tTN_s@-`@^v&H2$$TJk`>pC(1%c8ZpQCX##K7e8WQPz(GYCNWP0l4K{%yUT@ z+NmWL_>6@<4Q$YUKq)y*$c$pwn3L=DH9wnT7EdtW1fAtGd-5Kg*s!cZq`rz53aCY6 zKyQ$i;HdBBGl<6roiq4v;Y6NV(#|r?&V2s61t;-pQJ0&^zk@DB*c7Q3NZv#A=P%P< zqj+fDBQyRQ8Ch=u3smdLd(|msx%x$Ny~D7|#acIJo0Gqkhn}lZCe~n`NxBjY2fg=l z&48r0r#hA$SKY1l9j;Mu%g~*{D+8nn&T(g1bY4t1a$*MqUVtNSs|q*mX9XaxzMj2>;6|C4V*gP5;MQ$8JuRr zB|5m$F&k_y_*Uw`MJ7F}Pui4q5tDM_rA#3?dO*E*qK; zmkBiFP9|63%qo^GYLOUqwTp)1WUH<6+vxn6xqKC@8qlzq!wXbM;hMm}n`TMgiFuEG zkK&=#ik1+$My} z3oFd}*!6UedY>o&1mMXtn{rvh-e&BZb!6fKRKebe)2faq}FB(#(T0x)Tas!8hqDCys7Tmug6ngt~A7%Q(ueX@G+Uv=>U6 zHcYsk+9RYP;$uD#S94*9xTDt8ict;i2ln-SzDLsV*|%yeeiy*ymv2$DsV2)DMg7p} zf8xQGshA7|+vmj6`3M`%$a&k~5eHp^Avi~U#zeLPTd8C$EBgZbfBp#jJ6Usx>9h27 z)!UBL_+&|~kk6#Hz|K~jGmme8UITlOJC(;Ply@tfLMvi=`v)S9bAs%O79@aV!Qf#R zyNAE|QKCuS&_gcOT>VL_v77f=3e7c+YfLjY&qgPAd2^5SVpq}VX^&bulCtjMclEdc z2li<*F|ObM4s{eXm~oYTdXe81H}I@3y<4c0G_3)RA(c`-9sLMXDnX;3%YTjY3B_9v zBALn6`(XDZ zrTI3}Z!TwZzQ;ND4Z;P`de!kd&U2}bH#N`wST{KNRgWF=F+m4xC)MKHNaf+=FcA`8 zaUTx&$QsffPw+qfc2<>MFMFIQNG4_(<5MS&r%kbp@wgU#C*PJSG!=bh0obj-=gy%h zp97jdXj(~japr;`k?3vj630`Yr0el>9h1|BuUvy7jNQkaOJAy)*d zILId(gk=vb3*;UDVz{iI7 z2;TA}r2L5~pka9OQ%V{To6ED3KgXQHta>|;5yNRDJgwnAuSMq-LZYBS*gS6J4_=0a zV9rq{5~)!h$5C?=@snI$JFt4&< zJYL}}gnuCccOHLzHMoo*@;tizdT|FYT+q+N7Q>N_4fDX=xZ1PwI}7#iuXqAcWh-VE zbmXzWARWyAaQ-Iy5>O5_6k~CU!rXi%HkQ;P?2=T&B@1?UaFSSc)bX#z4uwtyTRzCJ zvH&Id{XYbqDP@D%Ryx{>Mac#7{!sg2Tr;tFDmv>3{i4O5pS!K^?nH_d7jZwurC(w&bu&-cR0SVN4X@8yF}r&Khq zgzCX%s%AN6eWS6Sw}C6VdU|RsaOU*4=1yw==C{C?a6rT66?d6`)C*nZf0^>j5hB<) zR3H=8DU&=xCYV66F9#U;{-1*wIon8#UKPpIccf?_F+h;R!=Cuc9w!#eCdwh|KA%k) zHIsIj;($1_yFdBb5eaa9+QOfC>>vgdy=xkAOg6_R$5&-@kK(V%J4i4!h@&`RapH&? z+?s?(6Mi-A2EuP>Azm`BWZHQA`cH>#V2<^nsiY|46K2Dsfkq>mFU})rMU4fr#xt*& zoJ^kN*(AiLYp5a0WHJ)-BANOop-dOa+XngYNK&6?!!rXm49ax>eLK$ePfB!uwTak| zj+F~|njAqJ>$=2qD#n%MITZz`PIZ`5aGF&{fpIm)q=Qo_CFCUm_xa8AK}Wcod;@_V{%)fwn&OSa zx3Lb4RRs@dFDy54hA)bxkMh;ydr3PD6}pT#m%mzux_iJAm;46bPSbFaDG1Kev=6B$ z^FYb|X%dJD-FvHSrl!A$PY{!D;DO96+?EHom4azQ9}e1O*IHvLORC(1@$9LH-pj{L zv@GqL3%z&q_cbtZZbJe#5zBT5$jCRMQk`gJ*Vt~#?1 zfI&a9!YuZzGC-EPLI6r4XPxI{cV*QPYS)n!S_Zr&M=ja!IWgX~2g<6D`GWFpl!p)X zw8t#nfWEtLcyQk(_3{(Y8T)P-S{>eZmn*XGXv~Se%f$n(tVRc<^XeGX(hBT1r-1F_ zZ~4h#U~WnYJj!G0D0=cu6=~4E-PB!T#(w$^k(3#+3LA3O>rxp`^NTl_ryR| zN+u((=D@_1Xx-=LlG=TJB*rerSAntfC4|Q}CK4Hl5q)a_zOl#rgNcCK!|$2;H4XZS z7+U-m`J6zNdA|Tp$;CDYpI%5ymo_<_YN|$bVHAcL3|I*S8gF+T!#$=KQWu?%5)Wh1 z1hR0SlZ%(PPbR`Knm%U!u^N1O4?jJHs#Hqur5Z#*VjY~1?dGOi5a($hqIktU?bGM@ z5zGP&2&SlD1Pkn5i0t7Mb=WHL(+l4OexmRIFrGY4?yoQ3xK++V6>n3Ai2vaVVoZd$ z!39qTs_n!Z^a(&6we~X1H)n`anm71MDR~j4gretr5LnY{if(!xUE`_vgkW8DA61t< zGIcw68SsUh*$F8(BNhx<@zU8VxZdN=4-(C3;qP!Dk!dgCaRzwKYZ0Ir~Lc8LjRZ^ym*FY3C?BU^2A!^ zh%I$g=P~Sz&#Qn*hdkcXl~?j42V{(b^DxA5LocDx=01jEo8gMQ@RNJ>;ei@W!;(+R> zHYxKkHR|-SP#K5}XgNgt(>mJ^#Q{uMsd^hb5dh%bnb9UERSsf#9|m3wv(B7`1@l9N zysY^Ky%KrvH_CsogW4-}wi?!}i|1e>Z<8vACl>;LSOaBYHAbhSwKysq zx`AA3VWe&#pF0kaZXh1Xq;9~078GwCBHvTKXu1OLnnni^_?7*k3cw_nUTCSWZf(aC zCdv4%^_nOP{?&TTc-n&H3Lodddif`Hs|69q4{4bRgMS{;%CaY^;_@xFiY7p+*M_gP z;+e9uRW#F4y|IWrt6pG_x^z;l$Us^7ujU*FpUT&?BxL4nGN$=xb*^utK=B^mM(P0m zVxbKaYkI`w55D|8xUNYi!Fw*Bg{40xag=gg#^*jZ*M?|0spO@9Lnc}JyeXLA?cq;M zJ&qWWx;Ikmm`dnJGc>|I|6>a}pmTAx&bb-)|p>RQJdDuQo3@*eE9;Ha~>(2~br!5bd= zWsk$Uue&CW#m#__!9L~mw1T5hH^M;$oE18G5h`SkQcb%Zm0(eY-!jLVQsD}z%<*Wc z*NqtFSS>w|s#|HEAc}? z_oc;Ksm&%=c0qp~KaOIIT0Z>^REM3iI{s0kY+()ncqdA>kgxeJgeV3CfY7Ahp8CFW zq|qWzjxsJzI{BoTvHS4ne%{{SQ9FydP*8iUN>F((IA@u?U7=Na2d55QA|N>Q(Y9pe|pl zZl#gqT&N82jugGL4Q?jFAIoBf0s3pVuX za(y$$vMD1|_tDZsir;Neh0(1O-b&eYWo;GD^uXC6khDBoAZf#7jBwy`TS?9P$@$41uscx4C5QM^uK zwku|sq>-9ZLgse<^*mcKm6lskh=S3&w$!3Qtm3!~)OOyAO|&b4lQUVd3_HY?(6vLs zLVJ|0LI;O6!)%VdP^UWkDEAbLoec#B3-CKUkj@w6v@{RW@9p^Ok64wE$CCzfoKGii z>ac@{dmXV@O&DiGTXH(aO*X>@?t0WIcOKq^vt%FHzto=Z;d!*W zVC=Q9&>K62N=7^}vz$h(W}uvtK8&H@OpJ0}1^4y1vtcx>33~E1K4zODo{u; zbx3XbntG#EfVZ<5QgPN-HiIl>qGU_v zZL|2NegY6dpXubXxd>ZISobbY6z=ucfWTnX`!uJUX)x_^@Xm-8VeL(SabD+~eRPNy@y=Zc{Ymw<@cw+AWU9# z)=%G*o6_*tAI5!KZlW+$kJI^)-~JUg94-0mH0=cR1Loo1fkszJ^uNqrpbsMUa#XUH zMxJdH{Kf?J}y5yf*DOb zYvn0s$R~J3Gpn=dn5Ip;)+%fwJ(V^UM;*K2Xya@sw+)$;JQKOiQx^^E2X_n08gI`^ zUvz;~drxv|)5h}Y14-{ap3$vU7EjiAv)^1}focnW4Pq%`{x}CpgW&n&0b#U}m#;p< zL5}iZ1KUj7w#lCz7e^GZ*)l9<2QJ3)wjhNny!qjv3UkJ)kCUzejT>U$yZAh|4M!^X z@|b${aZ1ScCgW)rJ&D5ywcew6rXfuiHML@kk_i@-x}AxF7p}3_DG!mKSGz{J6wllA zT&H;7rnKU00n-GKzbEhtj?r9iNh7-^4LeuJpn138*U7!DnD>eGhbp#bl6U&8Wi;BY z={%8<>?QCEW1M{EXYXN#R*g3hcrsO|QCVf;9CYb}War}B_z_}cJb&!5G|Z(a3BH&X z)_O%&Q&TIJCoHQ$oPhWl&)||rPvR1itfNlV+lb`6UD0>L2o$iUTQvdW=4PB+aq`b& z8&L(dQA}Yr9Yw4{-aTnE0S(PXdtpEG!+V%2`ZiJ#tN~N8@=xFM`IdC}mbB;c>^ga( zM(i2!o*%sDYr38w*(j>Nx2BGYmIy=jb1>h$VsHZXYtv{_bHU$GWVaTA1vP16LlEb$ z^!fW*GKz;{Hd*|?>h)>y}q8cq4ixy^-Vd1wds4OP|K!v(ZD*m>O$@r z)SFY%oV@CL*}y=BZ~wKkfeZZ=QWl;>72exf;kuKDLmHTk0yVD%kQX$eE`h(B!;8-i zD!zxmc*?`KZ$a^cI*Y%zuikwG8t^BJkEP;&@E6}Ly!f{LozSnZ(a}YDcp(+P8LAj2 zsDqSAkr#o;Z!~LxOonCF5-omSI3FhB#2aOss8l$0&R-%dg zvjaPDMFh^R;lR}ImmdQ^CN|(%7HeBXM}cK?aiSM3{=na2>U+)mG=81@*5Uta zGN`jP?^yi8-ub(*!Ep^*uG51b83XGH8Liv&aZ4Hb+nZ>KzKg%V;070*6dstg(DyvXq8PXL)g+Xy~O&}Q6f@CB%+&PDEnIe z^Ku+ZhBj;W^^|J^uMvNb@(;w{r}?}1OB03<>P`~%Vp7x-?Hu*V4qtO$iXRQ%f<)En z%ZPc0jK!y&yusDwSo9P%+SoHhGOD)$zZknf%P!ShPyOpSs7sSCx-uvb^JvX`Kc${) zD|klEh%k$G^4}bN&xh;2#I~*H>lMYP;#ossw6eC6jPV>hi4Nts_HCrfc>f&~ML+}w zvTr*LrW6_a=xfG7?(%)`f>T)%V)yn>cxahLRjZ?fZo7nX*$3q0(4{wBO@oD^L3zQor7+K zXxl$A9TaVI5xg|@xg8H>!m7~UHa8V7;`sw!Y8xfd+a|J6+nV;b%h7f!=|dkN0X6u6 zxB_k=4|6jSkPwi^AcVinIlPlibP4?cwlT40s>~mf*NLAByMVt+S|brQ|s7jbR$) zF7rC^>j!2wo@G3rFMy#WIxr%usc8$c5-XY?r7tar;%L6}Cwy?CqK#L6t&ae4mEmJl z70vS#kglMYA9s&nUxWly0Cx{yA;>f;jF-ogK_N|3z>X%-AJWtHIe&<$usaBP6#sv; zoeg+Y#nt#XB)|fZjT$vd(5O(OphZCig9?TP)UIy8B>F09TdOHri?9o{7zy2^a=EV3 zihXGXOO>|RVoO_4w4e!464dfxsiLByQadrJjW&g#k^TS9nY)|K2kP5Ce|^aA-aB{h z%$b?<{V|2MBWl{#)ojlxKaLp)q5-{O{YxRq97u=vz5XH!7ciw)m>1bU)n&R zq-zj=Bey>a$@zYn>#pVbzM?il5Q5Z2E!~5^zFWDMX0cEDME5jhxsl~y-2&`rdlJ#T zZXeMM{^l2_qmHM}+-?^keOsCo9=80%~!e#+bt8&#x%G7Nt@Fivz@@g-X zI@x}zsiZwDAdxka5V<7PJf)#gc+KsAm%xc31Sm-`<(t(<9@m%cf!w!!o&Z45YEN`l;@n_bkynq0TIztYZ zK+XN~^6ln>TVGLkt@-xn17Ed2XUNaWmF}Em>B|!}M51f`OQx-rr_=hCeBku^Bd^~x z?9U6me#I+HCKOsB#YmTg&5fH+!<>mfOL<~MBDxIu=(+=m#w{F@SfUUY{NO4Hrq6Nx z`r7S2SZ8_13iPkRwWLN`iC4uvy4G{W z%+z*P^g=f|`C_bHDEhC?ZDQe;h|OeR9p*>s=uz%Bx~xRNEHJK!4)itMNPWpxU25iM zZ|j0D^cMVIl>>S8LJASH=6<{8O~akcCa}~}-6qPkpW^aJ&eO6 zm#QjrebF;NuP&{-J@$5s+pp<7>iwF`<$6BuJNmB>!pLyB)Ur%3eTPd@5qKQQU$V{X z_F~pC(k@VaksjGXx1k)IGcvI%BaU5V!Xd%A{Sp@{%{%j%jrcmZ#=T=^466;Mu19@pw?gk$05nAudLQm?8-xnN2b>l{tLS*PKS89C1#7}wUs zD4K`<{tsD)liiKdi#t#p-g03AAlg&S!f?K?F-O$&azd#L{XOWN){6cPU&6-!l~cS_ z)yk!c8xXL=)2g7v^<1MIkY^@_+}|*eipd8tE${r{!<3l^cO))|hZdWx<8dTN8&DPl za%%GFieVi~i+WzgB$`k9Yof6ldUw#*7!NcOkbFbtd#^&Jbw}eB!*j#`36G85|6|x8wi{B(xY6xCfI@DO@V%$_E zMo?OQ*zZk-m}`gFIqd8eSFa0ZwCbALcVlf?fqQFtGznrLTp%M8a3$7BH|CTuM`j>z zzqw)*7D>ThsyYsvZ@756^e%_^ypHlduF6nz^Ihz4eUUqGdN45~JK6d|T6=BA(xwA? zzc~@OOaziFElO{;ii|+sO+DI~o09U{Kus!?O{1yi%3JbvwzK5X0rIGBk<@EEf-#qU9s_OB|AD#4Okw>X#>@ z9<_-;bC89XJ23Vx!T;YLD)4gKD$YJik6UW~ixe^78ASd#q|NEQ1V#Kzzj+;OH$UX3 z2c#2b&|bB`wuk8#C1z#2)QA7TNdfX--=>Woyrv4-sG^RpI1PIz%NRC)qM=9E%1VQ7A z&HH>deor7SG;8{!MpTt!<~uRe~aC+N7C3$cAIP|o{L zqr;iJ_S>5{lryn1>?j^^}4(22^)Vi|o+{Uq94 zf4Udg5-=6TplccCRp<{+!-nFjA=J*$Q4lUteZs;T@$Fkw^HdGiRn;p*pTJLbj<9dWPT=86DIxcRqJP2t|(82@gd3UmalfaqMxt)yp z&3DA_A##RY{EGKPFiajJUH^MK*8f{16;T}2B|QjwXT&fDgOm4v1kpK zNB)+Sa4Pb_N7l(;-@7;&OqnOLVLWSz?|r}h_a(k7{$B_<)A2tZM=PYfmRu%{{O=bG_^cn@|?t15M!yp*r#5v@wFfyejxM47gx zyS9)O%T7cW!(@cbvJ%m-HJDo_{YDaI?^nbLv0fF|`T(f)8p87CR(GKEw#N+mzF<+RCbVekl_*MiyxO5P*8^&?Ha=qLpjNND!-B>x&#MN%z-;7u4MV{LPFz zNt&q6l;*Fu3z}VHKK&^j0+A#>p3ANXn_t$*Hj?jVH4U$qIB1a&a^2_()~XCdYu>#v zA3#e9<&l5B(cJd#XYrGTZfOp4%ohLE(pF)dCg#F?wU|2>!I1^<9I;%CFfFhStVyci zS{V=_v7|Z;nfWvSjbl!;Pr$i9wR?rX5%xwMu9bf!Q;(EraHh4hwX`OM-G?W1-G>xV z6IU@oE=W`Y_9PFqkdq5K7zs zv578N0*^=Uv6I+)EiU1oU1CP1`>K2VCwqYy|4kP#R1#>FX4KZPe}0#JaAo8aU5mLl z9zqI*)h4lM?e|{AX&7Y?i3CFJ3*NgFoMvucvoYnS#>T?mqW_y*Kug4#fSW8U5dO@gD=`WQoCk5||#?9H5gG0^JTzNP+Hw&3${m;ckxY zYa3IX747d9+kF<90Vu`h{M62^XyVD)Ny_i*7YL9^+R!3DJs|h_EkF*ni!)$96|_JI zGhr{u3qzKRY3(Q21!&x;N*j!Vn`C^)IIja{Ex5lE>lS{qSWs5h8IwRi#We*(DJtVg~S zJ9MVIH4xn71eIJ3k&_iJh)>S1d5OxPv~p*34XN&OrnKvmt3DYV?FWnHABYhx&&9WS zcf};-qqCI*S%HxPC)}rniaSB_P6YQZ3^wrb#=_t>YGe`t9e8pxp?6O7#iEA#;7)mX zdapsXcpr`no3H*JZUbR1N1PF_;fH+g{RUixCuP#DN}1U{l(B@NI%LC)l0J58-8;SF zlM5+#nz@OntGf4l;h{C@Wt@kZVD-st_Qbi^x6lW%0%7yGtV^)nW7giKQ^BW_aK3Z! zxlVdwl4Z+@+#n&{!R8|%SiE?flc-sPL%V2ly!%yi{W*w%+f8h|gwOo>Qd~DteoDR# za^1EwrKa+O^@=!qlUk*T3Qd$(-_Nb`5_ALOh6`bBHvfKHHZ-aF^WwpMVe=k8$K+Wj zNlwq%sf|(aesW_VWV4?`t>a>K%z|jl)}o*Z)V!m>@Y`1gCLDG~ds{Qx7dv!Dpyob- z`BlT&RBgS;6>~zxd8xklY2VzGX}^uLH4B$xem#vDjV4`m#rdh0i<^?8m`IFAn>(Z6 z2*6e&zQMJ&-|UOJ`V+}=G!2Oz`Vw7_Np;D|E3?Mnq7M! z*^D;qPG{mZP+sSr8_1b;t)}Tqonot>A`AgO0k8|9m+GM*GMdOv&#EE>0cX0bI*(@v zQ{HqZc3!{^)3)D!c%I0u_Lq<(pLy_mLR|MP+GBRVNoG0Hi`qO)Ii1|4E&jN>3$wdY zG6M$JoL4)QW9q&t89b(~hV>xt3>y4>sVpAmlKD{eN!KQ|s%xF-D%1rhRNMjzsc7g$ zGMAe(e=G$v&`5&1$B`MJw>vJcsV~^@v~Lk+N_Xo`+dbL~3eV4YSPX)p^#Ftmj$Ltt!|bVDg+U?aI;r$OPRM3jch%H8knW<@9+z@lS5~JK#$HwY1I=TZ z>h_(>JQY7j`eVExKgFOkL8ey@pYETYyP$3rg-NzM5*w5FoA1W57G3G| z;(=i{0mx-p=4p~T@F1MvliQwQiij-FJ9I?0fzsxpO@Zpwtadn2ieypCJ`?<)#--Eu zSRPu?@t8T}9z2G2lIwy*7NuJV$pke?GV{JuT)!}@V#f{o_kt`%y?y_ z38pI}Wtfd(Wv;4x4whEdZR7!)KSNdFBf3^&*LBic$5m9(U0R`by;T%l5~yCo4O_w1 z=Gt-opyh+-v^c@VGWJQWi3{0g=1d9*vC+Y|izjXk)@IluvrRSb)u=piloC$E^g_xH zOK{{1;e?%Bbfr1v&}&#jR)CpCl6XcE(sShTKxX)bks^Z^tsV;^7yWw9^ zGovyE*&f2&4C@y*hko`v#`6MVQT$0S8K`=5IwJPc7pU(H=9NtM@*I*764Xl;!r)H) zW{^O`X2oC(ER}2fVlhVAeoPW>X_bY2&7H^X_WUKeOm=-FADT$tu}k`X)=UU34~Y3d0>)U%pa|n- zWZe!>gk$FyS;qRHC8qB&K}$^UeZ?cDDGt43E#({Ib4#;h%_FG5M9vDolVe4BC@L?< zYRxWULB7b_sZ`X7qW_HK(z2hj7y>=ZaY||lI>x~J7c{p3{B)9@=g9|7&CPn|^Bqm$ z<1Ubx1i~mZ-mhqZWWR%!R;D&aOA{MI*<6CDE1kY?}LQBA)gAqLv7C6MWQY*qT+;5^c4asFi?yZI|73 zB)`KbS6=I07^}~+If)#bB?mUCW-LRI@*7&k5|O9OSuQplwwLOB>otEF)5EK$kn8rF zsNC(h5#BebB2IAy(k}R-{n)83I&A`Hoy^?X80N2Ok@LJIt0>qoyI(jS+G2KGk?Tvs zq7$TU{qSWm-rw{Q0NW_gh3c)McXyo()kYh~G{QN9d2X$_Mw&S5Zs9}baR;B~w7FuR zkUMd7XX_^O1;+{-P?}gL8%uep)d__(2*f7&O01LjNlH46=)JW*xYn0ZA6zeUv+2Fa zaTSj1&J3H-EE$fx*SwQWV5(kjI*DqZ9gV#3-LJumxIW9EWsN-0G>~NWm|eG+$4^IJ z-U97mG03OTuf*&FeE_J$I#~d-MUaV<86Z$}U$mGll(pa+}1xCrwWrnE$KkNN#e=@cq`cpf~! zw;#IS7i>}VeZ>-a6<G+QN4mSSN#&kQHM$FkL7(g60Y<4(% zh?H8+&XK5m-O-8|;|TJKb>f=BA#8s1=|4C)**wp|sfUeqNn4^e5qExeJT5oLw=x?v zBM}@Hfw?h(mlKzhQKXSzSl7<$j9ab4yfy)e9;|DjZJ@eDUVs3C64wp;B_A?KH5#pZ zzdw29qTjM73O`+v4HU4VNQCz}qSRj^zq~@bomKqi{7JdkX=Erg=A4-70y!i&I!ZDD zy&(+Xg#a>aez#M%L!;WHl2P%F;xUd?iL+cRJ%ShV`K;H%uDlrhCN@X=tvjZ3Hjd`5 zvrf?E7sGWX=fp1f?VmxJh2Rs=fj1pBJApq0FM>aw1S#luix^Z62J=fK-j!2w}e+7d<_wI&X7SboxXF5`RAi= z6JI7O=QrgYlSU2op_{ze$N3|p<_>eIq_AncQLk|_h=`GsNf@b;!J!GHilfB0Wx>`w z#^G>ddt5=reiRBFHWxn$PIyRQCV0uX7uE) z$(QZ=>8M!01f#h~Q!3{;7u8>eC5{7aKirwPDYnyBbQnfUGWo6GUYb_Eb4L^$X&fnF z0?P_#hX~*!m_Jaxm@m`w%?`YQwA_uwjN%Hal|qo?ZAH>1KVI&N62)cZ2yaWGOxKQo zTQAD6kgdQzhmE{wynklCszJuH%U*dEK~NvD?P-8MWPDZ@Q?uiYp4xLN0%a@#k2`~m z9qovLT~m49EnPz{@+2KWqk41gFb5w$g_uIw0b>3g$_`;O{r*AXzD#qr&1%)c(v52$ z>|;YzOF9}3T<_S{Leb((&mh~V@>y{)Z}&>hGLj~&XGeTGH6_^yS`hf8s# zQ2x|IPuuaQqtr~}%)LpTZeS+Kigi|IGk%Rt$J)Vz& zvUt?cDn@Z`@hH7n?qJ8V+vtfo&tgz4od503m8VTxVt-c+!sbV4dC{RIvf9R?+q^ zEaPjU$#kQ%l2LA5@OC25M*YU@0n{HJRcAoO^NY4xl`N|8+SH?M@~HZ)s`z9FG_${` z-DaO%;KO=VSGVt20l3fCCV!f=;77g8!;l&Kiw}d#`fg_jPwHPsI~&rPLd1j<`|&biWCPXjP*I6-#DPa zlF3JIs;bPxA@4;jgiKoW*WxSN%)wRjO|ERA-Kn%F>4KLhlp)!aMf#e}uV?t0dYiB4 z%=eOe$=Xr>AXS{)%@7e9onRH>#S}*we4$*zztn5$GoFGXRq)$>yCd~&hWG6Y ziWD2OyNDFa#>mK-?iLxps)x{XVhGCo6_P}7VJH20?Zgn*c|>2 zVB2BJd88Bcc9;oVB0>%1Nv1K_L@Ix=+Y>|1*Gn+N2_y-4c>|ZKoi!JEM^JpXnp8Kbf%?h!X;i1CbNh91SFfh=O@)6VVOjX6L!5Yid6y z6TLv*5!X%(I(xfWNs=7b6VF&|8hC1A|Jc4j%=jYtF_S@Dpy7~irqv&P$l*=>_<&IM zBDfN#ISNp*%54%H;-8);#EV!MHHxpj-!qEi5W@k$D~9Z_>t)!tQijRSvn4@s^8uTg zaX?C>OWX`;uPDKR zsbb$Z$x}S)TwIRdx=Qn!<&Rq8`x5`A0^_s!H;R8r236Oq(A~9_yz?L#0%GvNz%yzu z{ABz(;70DKY{JNhH^s(S9?v>)WTLLISJ9rpr0q7HVbC4vK3`@s5gm(K1i}y1`9sj- zy+xsYNqg~r%msT)?epyV&|YyQENz>F&3JQGEVwtTsIn#cM-aNK=<^gL3!CyeLJOPO zl><1Q77sL`V*>LPU6~alGalMigph>Shb)@?dX;#l_`mX}8T!=4XwEJ{F= zQxdcMZoe{f^)EgGPwc^;sq^+u@kD;{&yF<@PjP~{-$>oQ)@}qs*u1Lw{(J-%;Th6g zG?haPQi@ssCokx9pxSO83q702peojuJZ0sYLAaem?K&K^^2yQIwNvZeg*T?TsQ2j} zQVokB&~7fLXWkIog3~dt`VV^sKWkHc?yh7m87c|~XVmQqiC7x$)Wve?*%Ga5O(oNtZ z$+nnd^7VUUmV94huR{iMOqTtgTTz4duVQHe(YxZOL`-?RhXR@?HzAL_R{ZUvsYhGP zwrjNe+zO|sM;SpDo5h&~x13`x<~cqgG1r=NldrrZ^;}NcD|wT8nVNpdb~Acvmre0o z*a~Mv(u35D(eXsCkoTRP9Gm!b+i8tWy`vH^wYZlWf3nftJv0Joj_&+|BE$)PLuqa=wPIu$Z-=(O$!>}48oq{p7x{Xh%r*rU6!z0rfa zurixcFA^uOk=rPXI^mF2+DFcWYsUc?9(3d%IVyf@lA*dr&~MFh9(@qU+;%x`IZ0+< zV9|~=&*LEsm)%UZWq6qq_ln^hwXk{MRrYkW-8+82hSkD9mCc8Ha&z6CT>wZqltFckeMW}-WM${CJFCFCvOrjM#2kPLR0X{K!XWP0zDotT zWZR`AiFxzne<$2}XI4jQS3wn>g_cg}LgbwV&1=|29W1>k{HO(YyEAPe%$pNjDtU=; zLUN*ujd_T)5aKmI!n}dR>kcrpT}VsiQimw@#ZpLq(G`W~U0sMH-H0m+-B;X&dTo5+ zd6yLq$r>@f&^jTy+YuP74NX_zcQ%#7F-rN&4bLBi&x+011clsf~Af33PA zHH6K+s9^sF5Opbg_8<;4y?k?WD}IOIS+UfIv;2s%q+x}3;zuGcjZAjojOt=$1QG1B zPplZmqnbAQ?n@n{E=1vOB?AH!8IRyaPI~+98O+{vMjojBF99hmhOhONSx~&)S(T-UZy5J7p9a+h|U%y zD(T^jTG_dt8swOcWTZ`fY+eyjy?V9c9(lam{uGr_8S2*=*+*1~O1(&{s61lYTG5EQ zFO-=95di3ENg-{z|3w>GP9@3@;R1;ZV-deeK$W|R;%@IqRmx0vO3oBhLh4j^Cz+_f zCfdaDxvMe*!FnoSWhd?$;trfb9=*i9xHqFpjf`^#mb;fvFjs9P%5Nai=Gm?z21oO) zN3by`A_ed#8Z{6-p2&G&Hdvvb-A4bRc2VF7|JsENyT>Ov*V7T6PqDhY;%raf8N9X2 zQKP`++lN)Xh0rrS$3!H&nG#3YlsFo)HM4is#p^R-y?l}W(|en_*OQ-Kut>HuE6YJ0 zT%4^6oTPr>h^nnLIX}rI08eHsCbaW%1^4+oRNLBw`wN;^u!+--uvMN4|DfDMo~pQ< zN-*zI@`y%`pM4!QQns7A6QPI==B&EYMa35sYHOab*N)d~(R1C2Q1@e??q}%T2e=z9 zhhaT_CSw5udXWxeewo~49^HC*HHD354RPlcx;|FFzf(MCZAR5m&8G`)Pa_j1RBD zt)0&I#!DYV>p4Z#o~1jduo<=n9|M8y2|P7EkCG{gyYiXAZuGm%nyMDd;-!0CVv6*= zMb8JS8yG-|wNW<0UZCN1OP40`b1CC3x-2Uif*=)L=8p!eDj)MjFO_+tUwHG^%zJ>O z9$5mxENGCdT1yejmzmbD%Z9Q?HccownQKthkUnGy?+W znTq&*toJ)26p`P@c)!I8B)^Z=-*t_+<%)@j7Y;*rwscXQz5YorDh|u_=SgD;hvr@e z174lio^7|~GIOh_8pB=9ZW%ex`tyYv7qI4s$haT_4%1z(D1wC4_DI^`jiIfmoEtAR{`3>t7tiu5CB5DXO$vU9XjZ z&IGX?{W6s#&BK4?`ZQTZ7mCW+44a1SA0sqjVwo?m5fQNL<}T=dTK1x=a~Up6vZ!vS zL6Q=2eMkn*AR3i4K!#anesfkQ8%=jAW97T`9PtkPOe=54Q7mpDYHC#38<+7(0rYi? z`84heXZD7Zv9`GlY>0$>>Of8n1bnXSV8Jk!0@XS6H)75l0QBB;OQ1 zrT7R}aHE8EWhKU!aGdZ9lPQX4oM!LP9IGNt>&zX^4D8O$YPw43xUHnUP9_#+JFFm0 zv^)Cq+)H7-2uti|di@ERn4DvpN!TsUi^nD7D88-yb&ClBxrHxrEhiB+$DIKSrg_py z6gaEE^v2Q~o0rFEm(Z$SbHf4xjPTX`mT!?!wmr4v@6(R%;BR79eqvT0^{W3Y5OiT- z<5gUC^eJ5ZiVqa$^uqHymEE}Mn0T>YsyLj!8M)0HtBxaHJOsFgc{*(7K05%PyIBB*jTM0y%yFyM&m%WWK~JMz}A+J)sBXqaM$(MYztJYC>h2Bt7@Y> zg5Nb}6+*`2>(=tqS+`REuHtVz+Ul%Z%@=Q}f~}F`n9|YiL)zPA*>+`{a_ohAU1xz5 zjV^O_cLkmtm$S=I-l}e2R_3Po}tpHECONc5Y`n~=I0Z|x0Kqx>*PRr7Md&UP477iOc4WJT~u%3fLCIjEb0&n zPs?I)#M!ywa-0yQuQKz^i{HoLP~IJn3sA&STr7hfe0O6VKV8kCPu>yFw0^t0m3>`Q zBfB?xW6`|q=yi5`*w@*Yne04aU_=34RIK(NN40_i48?X_uz8ugtoB2 zeGZK8l@aaZUY*D9F4`oCz>hWOxm)Ueh3fMf4@Q7>UdcH54`AfBFk#GOGg! zzeYIxaYD&xA;O(Da_3|ZgTvF9R|q|6aFEV2wg%tCAXDozne$GA4s1Y3dy{`VN;t)2 z35gPi(ctB`+BHE#V+RucXE#XWZRqz!HVf1ok_ANdvc+8})}#6=wIOk!-Ew9qLdx-Q zl52&kpL82diKat5+X7opMW6;LcTX-IuUlI+ysyOZ*uYsZSvDUZG-9wns>uAk?& ziCl6L57CXVpXyxTJ-S1f-$AiIT0_&ls7&`leAL;(wemo1Be2+m|JM=P)7qo7`PINkbMYpRLC8LNxF5qfwTOr2vkJ z1A#!z5AnOV%RNyh@$@&INfeEMMFZN}=gqPfk^j*($iK;31Kqnf-Xd$TRwg1yTOe+| zPta)uck^O~U?Gl@ex(9{O89XA(MBbJdt(#8dGDBpv>HE1! zDq^WhO-?FmwEi8aGY#qdYiSalC7E+R75@y;^uS4`$%Rd?+=uSs_)b=|o!SU=QFX~t z-Hl|DOIQq}!a^=AN8K7U0O9Adn_n>Z29RsT@XF2G^=30S7uuWOJy~zI$jz(tW(zlk zTtOzx*e_Xs_8mMAH~Q(<1iY8g7s^uzC@!7_Ol&3Km4$LxXpa@;;T~R;&pUT zj7@px2gs>*fZ{;JVDKFKW52nf6avEm zw)+LPf8yLj2v7>h>Mcg?i0g$iw!h|%r}HUb80esO^0uPCM6dg=2ZMGuIhfy^FM~mP zxl~*}yf;{nx_75`5jn8gfwAotC^NTA{8u7P-0MNIu!ls?hxM29G|to4BsI?SQRrkp z+M#j2`DW&9HO{wmta%rW^XPz!b&#yUY_=(uTanaM;moq3e0HX_;eR>n^TZ*0 zo*A#mt0HE;nwW!w&DLeCOfqelEnO&B6S|dcPJ%B8o7^@dQB|rR?(cS z=ujj{5}Jzqi2VMfC)ia^=>p|RIYca?$GdAdrpH}oItq|>^UJ_`AB}n zHNBJKT9{hxsY+P?XN_RbTY&ZV^n;g?R)aR(^@FiyTc2Dt9N8!b%qtK}x6P?+m&}{$ zV)}x4_oup1s4xqDx{{)UmQQ5v=F8S>ni7~;X(ln=}3$Sr* zDbAy@J2jUGzG7S=sCJg`9tu1;D7JZ9?32tnGZRCW`)^p{n^IDa3k-VB_6ku3G@X-n zp-L_cPP=fQT*&UYF#R5UsF2jdWr%$PrhJa|qvEN4EQl7{oJ%Hib48)#!F=ZWCBCKn zdz^pw@-In(^nBgW!T%}|;$7w7JgMHjf!zMiv^Ay`jEXr`;+@1}2H3pQM-eaS9>_m+ zgK$!{V5ADUIdz0JI1uOsCH)A>QTG8`d(VRRAQzeLCNVn?;4DZM)t-_$qZ8 zGoQD%2>4rkG&4vIvcqK0QavUd+6IrQ6&s{`Y6`A;@n9#8Wf^V(4ea~s{9N2rK~7a{;0H$8)T0;^=QkN<=L zZdhMpjJR^J;n(h0mE_?*b-qA*x~Y15-R5(rP%1w8u`-$8x;lIXpJZ zd(5Yg_2)4gP$!Z|`h)KYua=~3u%3Y$(eV})=Xw>;qqUYCjqWX!EKu_nqk=<&(r9iV zk@3i-SyY@IsM#Xlqg#q**8?ENu=(hZ9}{kuHkhCNj(6jIyM3yeO+0$zD>|PB(MQ%Y$LI_QJam>`EVbYWAy1spj$ zw`mY1Dx#FAz-*XLkJ<1swdOXtNiN^en%FniLoKj!)h@bxgpl{*0(5Kcw4IdfSQy$e z>=WA5C3=CL6L%GoEu^7L)b-H~iM#T`mmW!}EBn85M}k_^gNHqpBfhK`-pUkrn4Hed6h$e1y0!~`64Q?u z-$*&o;8bpjwVfTf_g}1j;K{0eUtc2G#$V(kHZMD4R$j$ZU>YlT=e(YjyTJt*d|ogE zeTu_g6ryn2wE!XXq7sE7jwCV)s6A{JO+|Hvf=?1cZb2VQo??sLz*3+$peTxhVmidL zVloE>T!f7kWCS+D%3bRZn~7+et7}RjF^O6{5q&X^ z6&X;RP@Y8R=kbczyxale(Goq@ym`1;nC&&v=zD)g7CqX$U@xtfOK(Y}i;RP;Z^E96 zo_u8O$OEiIFDJMmdJcBE7tD`&0tt$KR)x)K?-7;R6bli0)k0%OLa-V-)J-?Km4eRx ze%L&n2|8jyxEQb17fSGD*rF8Kud;dR%e=c3A(dnk9i1JU>ddaO98AxP zqHR&~Jr#eD?WojwH)-%39B zeRT=W^Zb|f1^(-mm6-+A*YgziL`_XKEaGNJ;s(0Ay>yt#yZIc53k&!XXUZ0d!1>!X ztbAz;ilRWx6b{d#D?u-TFc{Fw@&QLJd6~jsLsg@@1D_L}I~H-PO3y(&#UxIB!ZE5v z54Ok#>MNx2%3Ope7%iu=6+%21KQxjg2KUK^JNzW~MGq~i-q+-G5VPk6cEUxFV^jn5 z2;zLv{QjJ`5(kP4Gbn~}Wub~jk(=V^w(2r?@6(Kh!PKF1!hZ6@49FgAVC7zjqUR4E zsQxznC!)Jk(VeL*u6`^8A!FXY12aZxGa@EQqZ?P!q33iuA|7frn@4w$!^p`p5O?Zu z8sc(4tB{Qv+n&)hi=)EF9deg+pv8r3J^1Kaa0M=gp$0WHNHJREFGSw3d4!{YYp8H# zSHoJlvxWmgAW1#uN3^h$oc(^1_LhXVA8yWCoz&e7dB>Q8l9GGCM+^BbLH$29&M(JL{7Df`V&OK9I&#IfhK z6aDk6a7nO{Gi^g+PJy|OPyvrMKbJSVqEK8fyt6MpRK^8L$5{V|!NP++(ddbputS0B zUNnc62|L~?j%rd~;3<5y{j*PuXNkDt!|R@QY@VIw_N4@sOu`+12M5>V)R9RcW#(oy z$0+)f!BqFl>{HOb2n<^^sUUiuI2a!HP729}&@YJREiPcja3*f*^{V!oq29{4X zzwzTrbh&7kX>+to8*ntm&!+8!lNuo@@YZMwytQm!s56{Z*!*NW^g2{qRz8(&4_2SH z0Z-PcCie9svQe3`UV^PXpQ0<^qrGrF!Ix?NZhkZT*bY?{`mldo&6CsGB`T&T3wn|{ zk4{L;_KS7+AIIq9xV(LtjVB&7#PUVPf03;>t$h*RjF@Z#_T=CdCyvnAZ*J^yXQk;+ z()cG{$zdTSzUKlr7k}|B&b0NifqDw*th%&ccV(kGoQWM|1K9HUql8)50PpBIXLV4- zjOrvHu?oPzVtiAc>ActBniftY%j+KZGHmYRAIuJ1D|^!LH7?#8wSiM60Nl|>7*_Ak z7}jcrHT5;{;k4DPOrR#81=j60L6``l0w@``%Dwde*0Y?FF_o(#sNZ*xe_%IDQ54*h zOvY*t$5jt;I1qVD*Eo5X3C|GRP1chvhu^{4qSCd2n&E<`Lpv8u+aZP$EE`FCn&+0v zariD79vI+ShSxbliLA7u=9MMs7NF$a8&kP9I=1?C%BWSYXY)IK*HodtvU~n=AR)=- zh@-dUjET$yR}9I6^9Dx^Uj(WqMNf|oD5>L9z!M*-V}<7`T61Y_(R!Ad}A*vu<0fM2$ooqd)2*BGfGUr8Ng9NWwF}4DQG@~T{jE9s^~o#A2?o+t3MgdL1w!xMVZkYJ!bu-F3&p`?@To1 ziwUN5r-(P3#Q7ZK4|2wqGSf<$@FQ&_=&e+v+&sTy8>K*!j*rv#)2QR^e%gEQ7u`?2 zcp~L`d_IFsU$DgNJl#*Z$^Fzi{WJE{9C3u(ZuX&Pfllgv+I{&E_S3M9pS_FA>0>)O@;PH0F2*KXfC{j&^6~@xTe) z9|&#WiIKI^u+F_}7}R-u4e@xSZQfN7V=K+ji5BGUC(jb3%(H4}5T0 z8S!*64)X}{Tc~o2VYjOV$pjmqxoBG`y$wTJYhH^B&D|nJh^ip?C*T<68@f6BYkXZUcbMKhbeC(w}bOl&q(LxC5g?y>o%a`IT ztZ9*04im;-cntI1?&g`}|Cd_<;VK82U)At^8vEu&xLV6%LAHmKH08JSGy2V8bxyte311*y6JpyP5(ahxiiA zMr47TKIOiT5|S4rdVXRyJ_2gf{UgO{5OJ|F7NBn6Q1Tc)PG#n@`(@G{k+3~Qf+!_# z^Cdu;$n62Q5W*hBwS zry5~+w{|M2Qy!I0cNq8KH-zY@L+(x71h%p!)p9pwLA(-swGG+0V~IuvcEk?8(5(1U z^P*@l;YD=lbz7wKKxdeh=BErZx5ALN)UGuJ=-IT4thwx8@j;SQMq2~;$s zC~PJ#@TL(7C{4C**P51PAn$=#phcos0mfw6I*g{wRDY1Eg+sfT2c>_{e%Na(oOfs8 zI!O;x{>9>1JPG!@JQVoD&*LY@)19?c&+Z^%RB31*6KusN zZU@K1{O-qUsXoaX|5S^7BYH2&AJL6gRLKX?quHGZ>qpHw)5GmNdjtZgfwDp1ohaNGKN1S24 zz9wT~aC_4w%6lH=ZWd0LeNwdbGi9|$?^Rii%#H|Yi-Oz9{asXvg!WyL(55xOX9O*_ zZG1$=rP*d+7c4R<+8OCTr9%^lm(tgNz+_cZq`r%Nq88s~3yZNRv;#8Yj)*;LJ>Jfv zBnNH@wT>i$8Prugvz~$Q-di{pdwJ9OQ<~1yjCQ--?Us$^*(oGuKy5VD{Es7euqT0R zgW0~AdmW06yCTU!r4AwM$pYpG{wLDs4iNX8g2Y`DrkbxGLkzs+i49;zo9cxlz4=XX z7`=A18ZtqUr|S76XOa9@KTZ{1w?a5Gd|Su$_et(JDX5FukAS8CIQ#yiz5T0c<$}3z z3+IBo2y|VE3oz+3K=Z5ZBP^gC?Vn^!mg|KM{Qi6v0*1|d zRcv(PddZCKjMvq$G9d zVw+c`Q)PNymu$1W@3VMd=D00p|6>~ylAUGQbEm0ii|E0#E)j#muTpJlX+u`8*p{*G zjci{Zs+i5k!DXR#7#c6K*FCWxe<+Z+3OWHf0IsU1g{7h#Lf*S&vSUE?va zclyTO?n`c|_?3AjQ`ptYzT8&{Hi@=+DIp$1I)i@#xlMT8aB49bx57rDPNFVQmY96` za;=|}c$s^tyTfv1ChwU82@WZWdCjKq9fEgCaL?U>b;ZdM(vSD$kmWF1J6z!jO~Y?s z-RPKf5!ZF_M>g#{=Uwf=MAN+L84l<8!LFU_EAO(ml-o&0N_JZiu^HlWs5|p-M9CZo zW|QCn0UvRubgoA_Bhxy#kaLPAWk=71+FMrSZ8we4SbKKYjo2>LaX}s8!-)z?lwx3z zyA#KC6bSE$6w5p1BL{e?jv~P*EC5 z6csDpcn-G+$uC^N!Z2NZgep zek66nC2N3$&%w`rSNc@(46iwAVrsF8uvtzUSHBC>TPls>8gQpx)=qGt6PKX72=5^b zU+m`<>sLLJQ4xMzCMAGYV93-XCsq79b$`9yPfgm@UaD?B>YvW!xo&8oGx=^;N5*d9 zC0zss7G+^_Q6w88#t|K&ZLHZRgD|MUpDMgdksy`bUx6fjHy<)`w9Ksr!! zwQVm7HkNVgL0!gbeDxEwxL^I0HzqYbEh#u3l_W+q#B z5AN0|SdQ^Rq}7sbH-T`{o^JY#Z}zNC=~14YE79a4mUp8!ssc&Luq|(Nr!p#UjZUV_ zflv>yg&u5{QW6_pSwITeSX+Le=2JO55H zZ?MjQH0K3L%6Vl0sX@(i?Vl#9?imh@e1K(g4t^7ce+_^q)FyxSM5f#txTls3n~;d@ z;2>KeX7t}AEeQ}ctTIoA+B6<2F%o$5*kqWLec+2nBzHS?&V14*&Bo<$lS2kuBPGU< zexsRVpKTuh^i&xlsn@d2w>~*lc2sV~?$pa_^<}(B?uWSV@oAFkw4}@oS_Zlpz^WlT z_)X<+10DB;H2|LE6X57}(CZ{{(R_CV^|?r=N7rj09iYR-Ju-qSIWS{SV1_bAqIADl>1@97vR*qk83Z z+%vx=FTV!Qu4RN%qe=dl2SA2Zi!Plg$hx3q* zsek;kJf~(U4-%d9kbJUW5_;Kqth(N9ij7?e4XohdxQ$%IfN=i@kfr0P^IY{#hNv%F zorfegSo0~J>DtL^Uv585H;~?+t4-Yr3&roF`X$N%E2QkZS#3#A(7nBkB69A?ZRDG+ zsdZltOxWcTPSv^Tcz440hS=^M?X#(W$13oq|M4CVO!$yeh0mi}ZakV?2~3ms#j_^I z$MuPg{XU6Yz90EAbHkIm?wzd6o$;A{i$1~uvZu&Xjt?1=@GUx!j5}rf*a^k6h&^#+;s+9vf;cI1(W$N|7{b_y9i>>ttt$2bKmQ%N|N-*s~2yMitL(xyr`8g|Ft6 zes6JB?e;GWH6)G2B;LWMAdL>!O0`QOd` zdJfB_8*|c=x#ie+o`@~WukIW0mhN| zJy~P=1SYgKO_Z8VCrrPoVzPmaAJGUK-yuD@mq@rzUohCQ)6cRk_R)+MeOUq9VSMbp zsGb%b&-*H0Jg}4Q`;DxXzFV3`OW#L#?pvOta>Ze4+RZtxQ>Usol7*$v-NDEl8xQEB zd?T^$PPczzrYLssXZ4}j!8s~W{UA$0+zz7oPWHP^IMZIvfue>t$HrGwxswPGj6f*v z@E7Y=diLgsXwddMqj{rLpDl{M7=6Gc7Aci9acouPZXcf30Q9qS9*6c}J%H+lOPVHF ztsCVkGr+%wF}TP6{Qd))byY!90y`}Q%;y`opx)Hv6UeNu zCO1KvjHvseP((y=PykZcvZ7}^-p&rg;Gh*HZ|YpJ4VpF1Zi zmN+0!ct9PHNAnTLAuJGG6;!aJ{jd`Tb8hfb*kKCVgaG`{pOgTA$QSbf{9YUG=TOK! zn*4alNWwlR9XA*%CJ2k@LqBwOPpV6B?id|GR%8U<&(`m~5%RX1Q}w%~+mPtfipdAr zpDp}Jh3G(Krt;b%@xxdNqEtVO6YZp(Jm=c1>u=J@-sq`%@Rx5-j8u2|=-H@Ja+>Z& zKZon%$k&-rxw-j##o`e2Y;#Q>nT&RbwFtXTy<{r#Dy~Nh?F-yegP)*%jlRXXVu%}R zxyiYrF!erwfodDq#Xj;nPGF8?RvnK+Z;La&kirGoW^6v-v@q*{*HgS)fsfPVo~Z&$ zAZLEihrIq4eAnLu0KL~#%oKyEdgMml#?$tse}7E8%-wPPYxx)FpZtfHE%eK)S0VYf ztqx1_N9GV4hOf@&Wk4lc@d-!JY7N4@T9V!R%-O3jkfHI=jFRG5d*7Ly(GJ)A7wRd8 z!H)RbvNT&3=UMC`fC0bOu7IFy#f6xu_}qDeUsRJXZ!P2+OM8nu;# z-RI5CAAW+as?F0?Ef#_tmCC~uKxxspUi#`ruK6jxQ1bkao)#q{R_*ZqR&WluZ8 z3TSjoeq@F7&GoIpSn@=XWALijoL1bSSe|1q0 ze{TH=QK5?excS>Hp1yLnJ1?ilzN#+0{Rn$SJfz#`BLg1{&KGk2xp-r7tZ)p5+@oK7 zUSOLQ=G(M#C>K^})?juy4)->=W)`+%l z+I6{$cKt}t5%mfZ!q*QGSmPWBg$|n^-z#jwew@EkF0QiKg(z72jwA{9;{cF|ni6b| zWZr)P4qj3T>2Y!HOe78l+eHr)c@~(6&L^+Op>c}6@T@_k2rVY)YvU$QPZp^_k9hU7 z5)=0LlX^|4Rb+}w4W?i-vDo0Bushptt~~S(qyoW-5^!=S%7J}q27D%n$YLR|6(dbV z_nY57`-V^iv_Df>E;9onPAL!dZd&GPfH|hB~p62pGV#%j9 zL$~1r_QP5b?Ck`5p8994O179Baw~q)7doYx%3CC*x2`l*b?`8e6wzcWmy!oEnH#U? z!0PI#ysK+!ExJ%TwrqL~E&FXj^HTVObe7o0(^~1OJT{N*S}YlW9nD2!rCG{ymqD7W zintZJ*}+xV^gf!!MqfRPsCKmOQ)*CIZWI|3u}spVR?RDrOtuG_0?0STA|CxqB%IkJ zytFpOImiK3A_tfm-nka?R#58f?N)yvWUBH!;m?pnFl3*dG ziKu1fe)6V@X#$Ppl9YM6hH`Vo@gJ}@k|2vDUJ@!IBAQ5SJ&9;{c_P|3?HarNJhPgs zN(Dl-blVj5a&_UOxkXoGMFT~}Inn-8VNxGB7MId<66-|Tw_5|_9|WYV#LAhr({fXu zg|}aKDR5?~6#!Di%Ibq+&EQ*WpKLM9?&aim*e9K7&D}7SP#TVF|L(}QCllqcCJd8m zq8v}xVxm0sXjc0LCfC33zPMW^&=6rDQVCl*mnK=NH|7#%e#?pKTG{<5$+?^(|x zYJ_1-H;Q7#1gpV1{__XjSVyIodBQJJqbV8H@C6t~7H~k%3n*ck60+1T?DtV(8m?^j zaPQ2uN0G&hjF%jy=ihUMPCig#^d|o~& z7Bv%6ab9FJfl`=vAw*N)H0Hb~jJan-j*b(SB9vUD*B5tMB+I;$KS^Wzx>;S=x)PVA zxu;0qbtFP8(1}h$p6F7XE85~g{Q2Ml`3w`oJSYVM<2kI;r{imZS!_j1apTjo|?Y{C#O+(lf75&q5 zXU(Liuk^H%o}O~NxRH?9S2(Sn!YAR-j_{_W(hb%(pRye#?k-nn!Z9(=SbYAaPHH!F z!s53Ys6Gin!^7u|1Nd&UvY~T>5pqlOoQDMSx|8!b{BT2#CRcMq`S4>Uj#b>oucZad z*%U|BqV+ZMTe=6`-@w;;Mf!5V%>OrtU$xrgNv#>j&A6(m@nw}6jMdiiS6Xv1u6;S{ zuHjPH)ueztxGt>iM6oCBh#|T6SN|X}s$7Vxa@+KI^Hd~lp&{nie-okVXG%x{9cs|V zjXdf#nf%VFn0c-CJFe>#cKbyxOlUqkS0NC$x>?-}2uf4feWz_11pgrf4YnXgZ~Bg= zyQsu1FOJ)!dFF*>Qhs*{SFGidWQIa^W#mm4y0$}oMeJ~&D1Od_4_ck=N#Q9FMQQ6z z9d;Ad#qG}zvTyR<9U&c`C_fYUcV+1i4(daS+6&yc5LwHF)Z0ZTWA9Mx+9i!AiFI4s z%E29Rq%AinP%{D!$z3Ny@z6oHDw(p~$@k)3aKv6XB5lk$EjflBkuTJ1A2BwFF+DLO z&(#c(Hv4ASyzz`h0dd`?lT9+(P{d>l2vuxVEKkQBI_ok&~~U z7ur2gahEUTeX_x)qeGf-a-LL~o{lL@Rnq2$cOlSf^oVUP%v6mw3XnjKO}nY%8SiKp zfupl>Vw*rw%jnP1M~d_Wl2X#nNnhFcKkNm&SaIb#!|}KpjZ|~qVSzH6kSgu4RQcjJ zyWX+5SDTkuIBR(%+l~3%n~H=N@tlCvZ+ErhxBVxg`8e8{)ucmeBs&pjSGTTdTFVOQ znz28tYweg4y6oXVwRlFE$xrDb#^b_=c}D^n$LsOCCrL~)OPHWXA;j?d4TC@XaIgwZWUYM_Yzu~GbPOv!qkhQ8cmN59a9)FB^fw2|wQBenYX# z^CdTxH{R5q@_*iVT_tdyc}8<|I+>O{;O{>mtXM?x2?RA6#9DKOWp=w%99DX|xGO!i zkfvm^m6I$LbgVs$g1?<2ELFhIks{svo2N- zc9r?Z>T)=~j`mMU9=qeS%9=`?;-5UDlw>XvK#x-2=h;S^((s4tZ;4WKyK3(jfUi<1o%d(MS3u<|d=VscW=>y=FN#_s{mW9S zVL?S+c-+Uq4pgN0hoY;U^i7iA??Wl>6vUdehV=ZJoPQsw`6Zqpx|EVZX5@BFJwrwv zFX^vZqQtsWMQm6x%fJ`0QO~Xkxxp zJ$wucI;QVfM`@wH!f|E7%+x$CyJ8-mt&;pfJ+RDWqfciLs~k=6??zYK(gV&$agr)} zIq<#zWs<{6S88n7u;|Kz@9Q_powy&@{qvN}j}Lw@-6y{`#WwX)zJ&Ov*}p}%B za(G21j+-orH$tn(Ef-uV$LM9y{mD3X#HT>dE;H&vLxe8ov&-6w>Y{(68L;Ra0~XJk z??hL|bGN#|s?4np1IF(uN2g#R5;(dS9VH{*F3X7pSLMZueDHtY0?f8>&7N{136=jV z&Ju5{A22uJ@f<#Bi)L$E(}~^M6Wk`F9eWY%`*4fe zmgAEK&v7~C@=sqPZ|!3~ykepY*^3zOrefub}Vk~At7YWB7S~k^u#ooS8Zin^uecU$EZBegi z-}SWfH635^gVcPh9@Y73km#&zsh@J941mIzsU{XAvXsHa%s&Mc>B~Yz+`WSLal_Hl z7anXVj$<7Nw|JnbS7%#=RaYPlY4?D1mK!Ai)B@?b!KVWtfg2UB?4>)n)ERDzfg2$0 z=AE!jA{Bg3O_%O(OHlw&-nk>%M{t5W5bYUt=%lg@g>wW1`^T@Vl z@c*iU=eaTt(5bCsX&cyPj8^w&vJzu z)t^tWTQiOgws8{2b${fqyf)nUynXo>d*o4lM9`Gt(9eHMWLCK8c7X*jdgpKn0C0CN z8lOERW1)589PhU-!qkL8*|*Z^?+)a%3Vgk)A1AL$ol1Dusth|D&aPNlBzJNe6hbRW zK!htupArj|4yViCU)tS)1A0=DZg9lV;2idBdl3wa=F zGeJp3vXiayZK5AVisW)Q?b97lecU&!_k-kxCI1R3Y{Qb)%H1&~nHu27*IApT=OrPJ zc!grrNwc$ooAJh)$69@5di~VS$+tWe^B}g5XdcppaI0b_S!4^>eV#t5X9MPZ{}G;# z&Cm5kB2rpetc1<~$ER_@5KiO&QTHzJQB~LC|Aa({5}AlmqadW3DjHA}L^P-%44@bt zhy+_jZEJ1BS`{+jD-xWHW;jem1#53b(fZ(CX+Qr$6BQ4xY7 z^ZTx~&txVq25s)=^Z)DTkTd73v!83Pz4m&lmT-&sXq4&*&$yNm)|3#EF}E3QAqfiO zj#@G}NJ~r6t!+WKmTA8J#d|ocDD#SxQ-$0&ze~Mf5X<)na{pETKA%7c#PZta}@So%;JAZiKuzY_SP`(}ch=zy3cj*f}jbr_&V2%{>U=Uq{-@ zK%e4^vtlfXM|^@d5am>uf^PEu0B`6CI>WHpI6G{%tIZWbQAAZqVsntM-fvzKhT2yz zESNf{h}n`_v*5(MjQAdXY}|MSz-)x{c|vLrs&4EhC-!3;G%3rbd5Tkd5|Rv!l6n81 z%^HS4KWLQt3##;+GbUz~bay5%ujz)3>|SJvxD=aZvuMubDpIKL?&b|`LPX%4pGE*G zIc=oP!OH;ioAM{+@hP3jP4)1viW8{IX0c3fh4kc*-z-BiK7G!ILb!vwk3$eD?Lr0Z z+t`UO3}0e1;CoEVy`c+e*l^#w-q8QZxMJDL{B5>*EowEd1zbAxbtxNm zc=AS4>zVN=PdT8)sNoJ_hPQ!nl@2JGcgITz6@8CMjaFiR-cXk6V2AjAfu%&Mo8DU_ zz>#ryE&7Sa3R6jf_kxY#!7|t5($Z|E3Tt~RT@fu!fiQ3_N8!e^`8i~##xpA`UFiv& zR4kiN@o*ocWI6w6)_HxCRb1BoO@5%Vx|r!Ua*%cAggZ$0au;6& zn=_Mu_NxZ;G6g*(3Fxl^fS#hDSxG?CX9C(?K@aO3G%{MO35v{#vw+@oh&1M&N;s0Bl#QQqIxaMO`+OjlemV}597<^5aj>~xk`j(z3h3j2+6Yd;=KeUJwn2&Y z?mNgQa@_IwmylidLy6Jd%{h>mNg#Xcy@%NK4?t`+y1lvr_i0s zC&|bSiZF85D(Fv=fW9K2BNgPr^||p?@z4?;@8JMc zXi}Z{<8lAZpgJ(1A%n@A)4}y<0&CB>{cnFMwX9peH2({o7vw zJwriHP6E34X+V1cT4;WqFbJFp^=O8C7HmwE*~H3{gkf*p@2=#V6!&5Hq@ zsh~rXfUbJ9DcU$eK~GBpda97u90eVg1aua$&Ktjh=?*rZo&}ZrU>Z6 z3VKEo(6>T>mMG|%NkE?x(DM{DKMClT$1&OO2WX-BCSkr`IF-jew1l&gl+ddiD{M2e zrC{^fNkH%WU)uGIf}WEEw0H%ecPi+}B%p(2@T5gKO$CYhP}Y}9I6bv?g>&0~^upk^JQ zV*o8Q@7@)sTVEhSXdI*^j7?I)#s31do0br+h?j5{Xwle2V8CGWc}Yr`E}&HkdVUhn zUGN=^3l(%i63_>ujnT$w3VJ~j(3B%6^&AB)NCG-mO3hNx3zLAZIgwHuQMU)1FG>Qs zeJ`cHq@eyJpn;Pq^*%rg&5H>WcDpRa+q8s9NlFMxWfK*&uyat{olcLCuKcuL{X42G z>AYbgOnlH>eD%NK|Mc^VJO5liIdTGx`V`x{VDsc8ptoND=t@8f&5(p{{h@%zkL%-s zQ)^l{$Yt{Q_ge7Jk`x@e63|~M=+BdYPWvOE!xi+>B%tSf&ln!8pqC{9%@WX$U>t+Z zQW18UjThgL9a>z>ZtG7Hs})k`lH}0QBct!k2f(>GZGPpy1K^_{4;H+$)a6rv5K;@L9y8 zVDpVhnsadj&6%#C)02Q6NgTz-aSA#k3F!L*+E+nKl7Jq%6VNXat^}I{NkE&M!N3{? zotXsm4FUZVpe~QmJgfalIDx%r3BDd1=qvfO?LbRhvc_?|h{u+>Gv}wGp1%#rm5oet zy4BMA=85ZZW-OXi^k)*G1fdx=7WltmKOg2pwlgO7=6U<=Lqo8!xE=9H&JUv~0mjb!pZ@RsZ%2vlem7yRnGM^*FU)qcxi!W zFxNP)%elf_%eg+_I_TvEp3}H4;F`ttDAyZY&0NP;E%02(bu-svT{LW35?5zUk-7FWWWhC;U+Q`ctA0!KuO?)? zlbk>sic$VZ(mPypSljp;$%p6;G9cWo^WIfVO>n8f`LRVqc((PPADxwu_b$6F`DqcK ztuyDeDQKM;#1l<u8^=`EiC*Fa1n?CM%9>QK9ja$jtt3RXI+Ydx@Cp78iIr>EI@ z4{9QeSPHfhhyhErpA?I2k~MEqO_7x#`nE9l7RV{esPVm@Qsa9M@6M7#Bj-jX>p6yi zHNMsSscK3;wW`ARL4}Wy>zg7rt;$R}Y)am^f|Y)=;X7PP3M50(dtC2N#Gy)(pw|;G zM2!xL%p-rd`iOJs%5dNNHk-1ON(w89v!QB&+A`I#FfkF|15z^X(BFP4N{$Cahe=dO z6ib@YeH*gUjgmgE9=996`Nwb2Dn$c4Ss>rs-yqp8FnsZb{-WPB5Lh?0rh5u14AD>e zHi{M|Q2~;6va5yJC<>fSRtHjVl@}=F7)%C2bxnt`eJ5xvy73cL7J}W>8c)iQon_?Z z3JhzjaEc+RzRfO{Z6-k-6?>Z>KoR&f@7z(Tx1$nXCZmEXHe9etdS^)M>P%gR10m*5 zQoUr@**TK@@n_F1_&~H!t1HH*;WB#wmP6w8h5Bk4AkiDSU*aeJ4+HEsH?Cul@IGl@Edb|+S&SwQ8-S}Sxmq%-=wok-OfscE(z@DH=(uk75(f|K?y># ziN;M4p}s95d^gZV1TG_kC~&2Q-nU0e}~aXH1HVIGO*Y@{@3q?bE*wp z%tIMJ+{WBH!h~r=w{qo)oYj0IoKhY9mH_j$YY}-BKX`*h~C5K=YV51M>uX-#diwE=bw-n$vw`>)<4bk?77Sj-v{FW-GJ?jJ-N_xZ= z7N{dxoa+U95*OA}c`o+Uhtp*w8{edQ_ao66x|t!z9%(rp;sHPm3fz^~M06a;%O+Qe z*wapk>G8!rCZk}F=;$S(%~#p6GUGH|_p9Mng?O4AGp0DVG9f=Iz6Hb|>mR}(tTU58 zW{~XGW&;|71Mxt3ElGm|=jb32&e{|Xl~mWwB*epIqra@>@{N4cc6U?zGwixGSVB5P zKtn_v&d2b7SK!7c;Yq|?3WJov&0_wPA1 z6F%(yQ&K&eQ7{8q+@g87^nm=pvrlzIv8AciD+IyWR~UGC?{)2afjtkS&Ck38IO{(2hobYTwr z)Bk)gFYL5(A3sgxX0{bLTV<4d)y#zWxMX>y6}6;7c+T! zyqf5qt|Vq8rzQSGJL~kzypfP3HZE@34o++~e9q5Q9HFHGS8sVp>pA z7%50MWq-%Asm{Ds_>zP@#Qe+jI>R%0EsrPv_0R%^n0pT|zGdm&KipH*TIvc=3_ zv>}=hJrkFIvI?31LK*8fS#RqMw;*OI;WJ`#)g$N@y8xNX?*5*S%qTi8oTPRV-TG+DnE90;o!AQ2r-5cVN4?IAHYs zlz3PMwn>DzTQT#5$M%-X*;L)q)rRF7Y$-J$k2kc67sMcaLAjj34B<&hq&p!!P)t}H zh(bRa%gPCtZY2yGtItf`R2y~qJP9&XieLLd6XlGS!HzeGCeu)&m0+qxv=hwpC@h-{ z00l&7TmPnOPwSEnfhgS}+kh}o3{?(BEyC3Yw`Dl>U=As;v0mHb#z>vfm%%JDD>1fB zh+WExV9Gi-x3%%-$H$pvCxy8r{h_ijY!Bh7V&|42S)})}_~$Snk#XtHx?P+4R2^IE zlq_RP;3j|ly`0!LdS1J>uUoCeko`( zh1A_{uluyMzqE9FirQd)G`sBEeGCkCIPKCX_K;R$bu>KqDuD$zrsYqq^Q!lS&7CG1^4>ZAUWD5;opqL#NJN(X%X&t7{XbJRt_93xZp)hNH z-xQ+_^4Fd>ood-ZFbd9uI6F3y;`(!$J++u}n!}|MAug-y zvze5h1v%WXUm6p{t^${Wk$0qr z3=)M%dhu~-c|B})aiK70z#90?J>MR~PEDJOqO%5?!W0=VwhA3DZ~1dn*LL%_){pTT zFog4JaK`-Y(+@93Fp%g{y@7?x_AvCBrX2D&Lmmzk0L2zZ4Jp+&8&+>^Xe_1u7~=ZHi!DS+;eG5oE@ABWDmp-J^-U2er6a}d)=<|L;F zCfnGKa_*LZuoZGXHl^L6`GMs_s-$_&NtR25n$?2;kD|47h^x@my9~%Q3%QAu93K+50$d;TQ91Elz3oGqGke-cf z{HGpc*CKfMU%Edf5*bem&20^PqsRrOiN&!Kmkd0BWPsj~hK9aeA_w#4vEjfUS@Gi8DW4lb+rFt@KPwU2UaCw)hj{0;{Hec5ILvtgIQC z#w3z#I7dPzrXXUm{KmO$h9phAV*NV7I=NHc?rca__1Ui>xnICyLt;BT1X`#aK2eCG zuYy&{@5ellTqR`iSYUeFtQJB%gv?3AWyCwH+u8EtS-Kh^A%cNGuym6wmyQbAkME&; z&9cxu6WJKb_(w^4k}~DYK-1+U>xhKyCivTJFqv(nxOnbOF`nC?cm-P`lNUqx$Oc?r z<9oxy-#2P}^&Z^ca+DAvH{v*KZS*f(W@*axoE3-r-td-Bm7|fRACEB}4S_S-l8yL| z`@6%`zHhO&d^;V6o=tHM2~Vzco>kIuhm}Sy@P`AN%w=9-ix$Le{ojy2 z+I@$J2-OB(D)LuVWqUCPGqXLhDN|~#6B!+FF2|vO* zE8;5>0oDS(;*%OTD#NMT)ek%+$2jLie2bNs;{WV_De7D_kWhq>+9LABc2m!dee`qC zh7RZJ{v-BlzOEOr#Q7>KeT;~>k%Gl0>&+L?P(U7VKvMU(QSfs41rK`5|BK;+VtttVb^2M8Cz0g{feEbI8V*lChTyWf97Zv){)|{f9m?M z%HYwfz*C2P^CG_GVZ74Gr6@O*NPr}Na)MS0$&Cms?D27XICL4PLJA%m#9;_LK}L9m zWL2tIcq#veRc0;J@qOBWp4k~a&>4zUTBF}*s)q`}{6w1c%fmnh+$RS+qjS}BT)^h# z`{t8eSR96Y3jnJy`3g1bbNBc~!miT<*2!X+O5-8xHNf=Q6I|&`;t$56Qx7@w)Yf9;WZ*>%Ad$hF@_3 zFV&D|A5sI0N17JQIVD%ArB$6Xo%kPRv!GeU}@vNa3`J}jR^+spOY{~SqL@)97FQ?5=meB*8v`UM%`75sC?et?5Ar#?>B_{Z8p6kuv*hyCe z4|gADf0DVuqJRD>DLJsr8J%MbW24M17Li18@umk;ipTFHOoSEdXgNXwtbT`ZnX9A{ zk$6t7%-fZRLZ)C|UO`3m-fl%x{NCqAA4r&!NzuS^$*vv^R73+?5QL)jmUroXM<)Z} zo}*nZq_0jiyT1BZ?G2Ex)uxx! zP8YMsp-<+9mT26Ly8K%+OAd7crZE#tb4sghhLky!SderL;s2d zLIh*L7gZKX`pj|U zm?HV%&lb=m##=n}9iCMA$ql$fvoX7voK1?3K}5R|JYUUsNf zp#iKY_?|U>Yx%!RW|93E-`)z}o*LixDdvx#H$=-wn0KYqgE$8_44g)O$5}91NV_v& z7mjo$z!(xF;ls5*f$c{>JlO2~or&6$#SXH^7ofN(Ik#it5s(z>D4GkJn~sGFxO$Mc zUZe}8j3Az>e(epZ3u|BpB(GpcS?Twl5|T{pF?;{r5JhBGfE1>gCh{(DJX#Y{gRoBE z|D>1#DMD5%oWNGmph##GroDX_BsvuGcp4?1pm*!HOp0Zd|cT^ z-7%RaY-82o(Jo34L0Yi0FViBFGmt(>^d1}iPAYSgn}YtMn}&qAKY|pq%7sL{{lY|K_WPfVA**`!yeDbb#5JCdgDop z`o+rhviUrG>wqi5GjiSFCNV9}p}`l0r$@R?rTL@M5R3vU`uUO@nhHUn=>w;wo1X?i zpauplJeioOC7cEJ$mpZ2CG*gE>D7$~x=B}E2_VsAB_ql2`r&=z%MjE;hZIf$ul6Cx zZ)u_1HtC_#ck;E^_}+WW$~<(4r)m6SB#WKqA5MpXZ6h0GBSB%+I{)y6cN5Z^b-&$Q zMY$5(yYILbp`)9B_{0{Nky3Z7{KGcx$xR=FpuQb;q&tc+-7f#|uzlqpwz0M~C`+#c znE1dRdm1izT=?QZGnBTu*0)Cpy!rP{t-?!WnA?7DgNhb3$74&N-$e6)Ydcl;K@=nR6X0b6Z zlr^&G1fWmHG=yBhOvT|b#2f0a}h zu_Lstckw4T&L6Z8|3LbX^%avpa4zcW%Exn47+%R?>)R4~4bsC>^7?km*<>U_$IVUY>`d6O6#vI0v|qKK0R+_bQ`oY4goiYKBQg#*D7b6s zH$HG6C-;%P-?JNA>)=Ex&W+gw9!m0)nPSM<9;WQ)i%D&fE8> zrHv;Bh@X=Q=_YSYp^+$*jZZUw!RDh$qm27^580$vH}xtqo8Nn1EIZ)d9Jrax^7Vnk zB@v{W42)vG?#&KWevRzOu@OB%f&i@)k#i>6cj~ahwJPU8B&3Dr)(i0&K($C^e%WgD zwUE(iI8j_KFMrBQspC-omYvbhTYiufFO?n2nmU4j8s>?s5rY)e`wPuxf-y9H4eGJS zNpz0LPkcC4!9xGs{R`MYzaf6>8(=CnUIMw|o5foXH#W-V$C8 znUJr3qMQwGEg+13OlNymTv|fDIFS)ug5x8e82Of-b;FCDO|(}8X2Jp%&DB%cK!-GFSQGf+ z1kAllYHcFYDUzWAdQ)Uh9+kk~wIP0Pt<*PX+a<`m<4YDmJ(7gBB25=oTFxUFUvipQ zBNMc$FZzSS7}cCf>B+=mUM{R6fDmp2hB2#J-O?1NY%G_uR33$zpDPcf9hA^ z&;Zdr93}_Y@QMs6VWEeA38{F;e=}O%JLO*(>bzI^B)?|HtYB3)x?=*zJ{`@k@t#|w zu_{Bkd=m>-x!l<#=ABUJui>Y&oy-Vv=!=>ie_F7Ln?0ESHUSVRSjlTBm{urL z)I(aH`IkJ>V@x=dV>?(bvfcR>uE;Ei=Bf(xS3(S9*)$FahcczWKb(o}cz0Btql3 z9(j(i)1+?U-iHf}{t|Y!Q1lV9Q`*VnL#)?FX{*d|S~ct7iKgh6>P*E^wSy-1;uE)h z?LItuUmtddy=KtqpyayQqOH>QkI&j!o$8Ft_WE8AYmdT_G}>+%nxoq4H#Rs51BS#6 z-~#0^7T61~94huR>o{#6>n0>R^ONC3j_ zNR{+$%ROvxR>+VFwI_6~z`9tnN{TeUXcDxMMUYo#*GnVTsBeDjyk6bdKlOEI^0GW4 z&dX=A7V4%S-QMD1vf{nMgonN!zU}oiC!!d1+8{7U7pkKO8LUC=3*3~>)Q$6J0FzjR)2EZ&p`>Rov=f*D0UVym}_)qzpktekK} z$7Z1sRl;1=m@M2T_o_DuhcF}tyA(#>Mj`?k4(;IINJ!4xjH~{e&cBh+V7<@Kdo*;s zwNHlX6OjakL&N#kVyr*BqM3qfLwopF(5E)!;icS}8}9QWl@fXrQFCfLbB>mma1__t zBN1sy;#2KIL|X4EVeR6dAhS3=r>)UKIJ8X=Y808EWU?a>{TbTGz26+~-AKoNO9f=E z<=-4y=SqqT7NBmhL16W%Zvn?N{NTm<-S=QbiAgxLOp4UP!lC8dJ7VFePj&NNv59A# z=!o_$6^6&BM^t{u8kfe@s;rJWJ!n2^ee>k5);C}NgjWfAn6VBjf)xVm8iU>DEYjTo z%WXUibPVl&oH#-<7mC)7c-kKI2%&X}uebbi3`|JK)L6)0TcAZ(Ta+m~5u`0x z#+D<2(M|zqV&gFaijDk0JC6A)iYdP22nb>2lZ{=Ls%ba?PXi~>+tMpwwfMEHW_#f<%RnvA_AAZ9q5h43eX z$8rK*XLg%hPb9LL!Jj*Fk_0;y(&OmPz#%9kFKmY`O^k$=@WgL=U)yrD(hL&p$o=O) zuD*N3_GEhW^yU7@p;!U~fpI&rWwTu1_Q4pF3_h3;|#4D*XGWtU{hE_SSvB zuZjf3(TdE&^}6o~o(l^(e|crFELgvy)?P^m*M`XHs*4kU73!40EiVh2=aTGJXKEhS!{7F40`ETADI;OgL00 zH+Po9n1w_2+}G;8EK%pqZN$w9hZ=ZFP^P1bUtoZWE1pGY?%5@@*--+_poT9T$RH@Ivc6iu`v zG$pD;!o_XN`n-50sIfwq#M+wB$&}`)3H6ab=K8HvfInP#m5_f^#ZQYV`OSfW7Vn%@ zvP+S>!2I%>G*6>umgg9Db&LK%OD?2%G(l- zvlTdRNm_}|?K8(-9VTbEdF@}h9Bxubz-rkcM?cxwFwK*jGEMtmWLA8M6i!>+cs2Zx z=4W&In_`ctrc{yg;|}v@e~KFWEO_ zjD!LEoK+CBFZhUi_!fAuUf9M-h}r78;O_1-g&-zyhIW6Ib#(+t9Q>%+A6_WMiJ>4t zD2F&;I2j;FWcoBsLGU*1WC%2);1l^>NyTf z8S)x&!o3TtN7=P9Wak;P(s4FY{<(e89q^$&)aU8jU|qMcB6&EpQWn`bvQ|}bQxobb zRn~->_`x6HG==jyy7(@dVMjN+yDqSCnsq}9u~-{f*bMZf$U^y+KT?tytV9+{71L5C zO=J)7n};J}u2Pccj$zpB%O#vqzE(O8T9(L?nZH~D_f^>_kyin=j zrdx&QvY1hFz8mVeak${&QEe@=*_#EBrr@7bLwlt}63aA|{6D}pN(S_QvLpGlsXNZKNyT7IV%{hr_akVA893o&Pm#P#Y_22_u1K*C|*X9SRT3vD~wixh<^cs8YC^4g|L zoexBf8K|7zr|sufR}Qq6lHYfkm~ec$H{G`mYteQd4~I#+u#cTuId}3}EHiO>ux%Wh z|Ft)C1?#MQJzLDwI(NeFrqOD&TiOs9Wg#)IimSH<0m|VuoGKE(wzBXy83CGw#4o?O zK8X|^18{Pfk&B%`G_X{) zs%cbIXm-Ah!agRHYa^9*C2Ze((9!f;{mgh3u?=}w743V_nxY3hK81yn99;b! z4n?Tvkk$}U>K+n55A=Q%L@!B`b};{C$KN zw1jq4*1&E05w-UD7Wb&;)LBK*+|b3D3&kAV6F4ufTJ8DsmxLPAha*|sGt=PNm*7!_ zyin-Dq6gPSo37`_5V*dz=J)dRN-3hGd(+>jA|*OAR~!+M5}nIQ3@s89-V=CNpD?tn z)awcK;6b>1)A6|MZK3C|(ZOw*;;Fj_M?LRzW7B1rv3;hyn~T1R2F0cjkIB_79+L@~ z%dv^N$Ggz8k!v&8H(c%3v*s^HUOFW_b*mf6Ja~IHLX5t(zHKsGxO|r63VEd7Y)wNu zv?tR$T&A}a<5_YNc*{>_hh_Frhs?}0J4zt+q!r)@bA;@?e!P#Yp`H354I^w!9?xB4 zSQ`T#-7JgGpBWSvq+uQFA`sw{_d3e7J-QvFM3*fcO7!xJ z&All?GWVd#4v#13!S*moJBhS?Q@ZU|_=e1iOR~b_`>OI&=8u`}Fq=rivKfMooBH5Z^S+M6*qUu{7XHGOZ9Mf_(2cey#bGnhNyjE+IMOUk7&g8D-67=b7 zBsFv^T9sbikcK~Z=r-Q_O$28Vo8?2((uK81 zQ8v|cq@Xq`O(PrB&ZYrUQuYfuloXjhfWlrFEQLPjdDCE_B2|A$rYmRYo#=!eO*Dv^ zgXwjnR8o1iM*RtE`ZZbc*Gu8rLRqNqT#5239gSfAgp5Eho1fO^>T4Q+MFkm07t>br z$_-N1h(Do)sS^#HCT^3a{zOhcHvgN)O=L}24qE4Ec6#hI(cX;t2Apg5hGe6)otLUV zpSI2B+l#KyOmdou+zcp`_GWUDxXQLBe{@FRXYmFPkOqT;d(O~|c7d}&`Q@{>ar6ib zu?-Q$)}$1Xo(O^znkViDr!|$GINPaR*osZD{nJq_l97&Rw&FJF8Etan*4Y_3(tx5v z)<;IChnRWMQrlE-&yC8_31KeIxOmP0Z@Dl*@s|Jf7u%w9C*(K_B_E#H)a)qxQ0BL) zDbxGhxhc(!t4^yf?OiQhcOzaU}DA<|*=8S&D*NSlECcFoWm*uc%ESIIPSrZ(r zp_c0{0z@=xC0mTmdm2e2x7#cJN#^IX)w{i?H6d%<)oOwZzTOPFnEO|VX_L5GY6d-u z5R_t)rs7nNRh%WomcZ8qtutW^kvy6~n*8 z?cVZleIa>SMd&&07RSGYurOxuZ;@}3Lj-ZB?mnrTI!iUwz5V7a<~CS7m^H_?7}SV{ zdoxm1EweAFV4`hw^zu#F?DS4bE7W8~Sc+{I?@c%+iNCnZw|zT<<1N<=YQC%?I7M%R z4Pmc8O#Be$y$4;uq-~o}j>AQ`F*UQp-Hw#$ozyFsLZE;SGRR;#D)AaR${^#uf+OIt zE4;^RM5ZC`dvj9`+@(a`H#ZUnN&;9l@2a+4P@@7kipfTDI~^2@%Mcm{V!>eKPrz^o zl6E3L5$K1G;jf$6zMT(}8avgBelEMi-mN;l&4gq0JZ}^Ch>f{38h2Q8hL5a$oA_y!gzZ9P(0?NkNN1lRZ+>6B!_CN;ol)F_N~8G zOQ+SmZ91Fr!rUo3eSkzXF&HmzcMkHKir;<*4jMal-q1!C5u8M=lp2dhK{Ok&8Q4MO z1gSPw=iZB3bOO|hUEIOf$mn3(xOF0_n{nOQA$$3*tF#RbK&!QtallEnw@MFB#BtB{ zz|OS(&2zS8FyL|igSJE_Z&s55j)XptuR@N*1$9nAW_WS~1|1mx6ggiJ$!m%nfS;t< z$UkS~y^<$}0ciNE_oj-He}3xIQJaghGN#<$D29}Bcnp`8Lo$w>k9vQ0dU#4qy+6fO z?>9sWHe20|+7_tRsT|7-Y)c|Tx2O6lsazV;FMJ{Aj*Y<@@VH(=i@l31>e95}$8yH& zDef|p8ye;K3s1%E5RP6C$S@Cit=9LT+=P9L!{iI~Eg_Z?SvSkqiXW&t;2@$N!~NyW zkqetK-*!;_5sL}ymgVNIqMsmP?(V&7BJzCBWjk^gvgut+HB8nrV|Xn&MTPudAP>!3 zJlQ!qE!FV^4sZ(7b(1M@O#!iJw;4kT5eAcKBRqxGzYOM+Y)IjSH&IA9P{#go)-u`l z!F(9BVChni9NIMvVC_hrz@y1OMD2(M9uqxGTFapt-vRxNu}$34>yZXale4IGOsw@M z(pEN*!RC~Uxhbe4qTKVpVF1aTRdNotyW&wYd&I$r1=<~$CP1q*^gMNNdx9)hQjw5o ze07jsog5#ep*l#<@T4eG@PJtT)D_w&42x#IA8l+>_HAJ7%P?@-z=pzD0}pTCz+U@q zV6V;^m>a9+n1lxQ)dpsE(7@XQH1K?FU{>r)qhH#7*lx_c7pPp}8`qehyRGJIf5p}A zxQ>mDYtZyZDo(DmPRBOb*q`)M?GIRXcr#*cxGJIbY1;Zp9kl*JY1cfFR;zwpC+5F^ zBQ;%j=R!m!^|-k!g)O;4?QJ=)PQ>C7ds`8C_N)HvAd=_?4o8TCkSCW&eSN zRW=Rgso*pS&KVqwx0z|tVaEA0qfjTi;V9V+Z8U&--1)JXE~rxf2v}^fX4u||{Rb|v z;x9qtf}d>1k5J5iZ9K0>!2SLH?8Y=#7v9dmq;&klkLVWAY%Cp{56U~)0*IWJz-V^oUU>VD18}$IeLof7yR%v2fdo#Cx zo$PJYUoQ(y_BM!&+l_X6uwaCYkaVEEEh0@nDsWxISI(rbGz+ti@i;?@YuNi(eisgn z_~v0h_+lkka}~PJK}Q3Cpp+ zI+VdJt+Sz}28#pgJil|%P_wMk9bZnGF#Yncj<1k=#&=rxiqOs6GQve+jr$i~bsN8l zKqx_~%#9CMMoEcKX`N>M<|p@5iX<=+k%G*}lQu*f-`O3F4%tcF`L818ZHaz7Ot%iU z0z#4Wv-?MQY+A{IWK3o7*)~M9+u$vKlg}sVzR_62ZK3IP5gXs?G|c;~s~b}>^)YDi zbEM|C^%+-`vj2~bm#K6g~=ndhbkMzu6di%bQRpyI*hN_Uid39KF!Qaa-(maz+tt5gl!hbYuR#F)^bAL8H~K zP{TagqQA@Ksd>QuhFH3f!Chk zODEM85C!}#(#R7(R%zrpQgc7P$Ki-2g*OkTs3%gDIZz)Wdv+gMG3AExHe$-D1Tfs{ zVCnzyUU5H~o#i*{K2qsJc0~B1X0aI-Cm|}BqRv8OcioO8_dxUHAv=iYty+CB_bVh=g4On>S0`M*p--<2>J8jzhQ&VXrL4UYLv02CwOTUw4m)np^Ae zeqi}MOkdpP|Ji%Hp!`G4n&;x}zdo`2NnKHXKXYwD`QF6xzq+TB_H!QN_?kBL z6;_!)J^1ZOvv!aRa7^Ap4ln6b8_#EZ)tfg_f#^*oiCgsMgBox)tIT8En?Lk%Z*IpYUtfL0W~Vm;V+BgG1buSU9Jl0WVzu8C zYtPeHxv!px-7JdTlxMh~JFzEs#BOem-P{nn`AzIbX5_To4Qln8}E_s&DCD_=HS>@3l4Li{3-V8-dGilgqGI=Gf#D4dWZp+)ZTB1dvjQ( zdvnO&xs2?2Xgi1>cf@GHHd2%*Ew9{ zxh8V`oa$o;?eaQ70*VkNoxDEi7dT|}W zmBV!c*Qs3jT&z!7&8&RUqW#Wqg)yQjP4}CVNs$M3qF745Vo25Hf}x@Z6b&JYx9Bjx zIqQowL>ltKr6{`IuT0!ODII!^0)AyUu$W!6beXtuyv-&Wo-835WC!gR-$6wYzszrP zH?p+>hqHL;vdGvhjkmZxScA&h-9xXn=lA3r={56OHqu)=*+`$;5Z_3p%Bf3XZ)l$E zri*BR<6E5fw$l?&6F6EitQvX2 zMrY%5|N0*>K978}ALFz4iM&E7@d?rr8HClRX2bw>xJ%v?# zY{kzd;^Tw+jgJf7Y(3r*r>_Q^w!ji)?Q#??7sJ|3+c#?mH|;lXlS~xGS_7ir$sXGY zR^~{ZE_>G+D;Ed;s95=6JFJY}&^LNRw&PoZ*R|*D1CsM?r7yLb0LBY9Dk7i~W16VU z94$NMQsXSzzA`Yt!Vth=t@)%PMo132d`OkL-$F_V=^%b8X!xQ-{N~>C5Aayu&=z81 z^`}CgC`UiJH04*vxh#>25LUfSIg9flHz zyzdz1ASyP4D!LL2=dngiCLO&xs}+; z>1;HowETCx_RL@Um~}T3v)C-}oo`F~)|uZ8-lkUgb^HYFm&n1amudc(bu4D|zQ@ec zzF&z6rWyKix}4OJYV+CYd=|WJX^OM`ru=roAT=vJy90-Hd7)ns&8g(h%$xsC(7cFm zagpEr=4M)h3}&$T%UfT<0W8yaT1Dc}y*$siOx%qnVfbR?*GmvuFWE%whbtLUM;F{;eDeeO zW#?41m*`3lyqV*0JEh?jemB4+n?!{fb4kp|tAaQjFAkOBoBIV0C_Cq_ru1O*p@F_- z=iJ$GiO!V1oZaL={0Rr*blQ(yR0Yk>t1hAw{)v;^iiFC}N+S!D2y{e6fA@I|M1qxL z;xXAZbL;hjCAWl@*Z*4cU!RX{#eY3by4Zd5Uw@h2hQf6f|Ml4Gt@gXVG5)LX59hxc zNhF(uzZfR9b-2^*ga5jbz9$t+JoJ34?aj&~x`6*Gf34N{{3rbBYjcv0&*4(r4;`Nm zgZnW)w?Egx`0W4w*vs7dWPE?=FB06?{?#qm1^ZW;>61|Y%Od=XmH+4+T~Pkf=5J5L z+kZu3`R8_Ceiz`+nA%qOlN(!Kxj%e;g=Z(lpSNm$1pa(^=YHVN*~{DEPr`Y!-?^>m z*$21N(tVyMkFID>&l1X8JE~QAcPB0HtbLW2ZEkN}-Z}d!556)t##-i>G554-Xjh+q z|K4TzaZPDb{CIBlkHC*-7=onqx8Jkv@FTdb3)WAXv^akL&55ladk_;D`+my@&O_;v zWPiH<)gLiFZ~k#V#%J%c4#p?(yvkV&c8L&|1oz(U6k_@=ym7d6X?W^lk)C{u{y`XG zL`%3a#2Dg#y+VTvMgK4%C-j>0svc4YM$+!z5B-Bvx)c?J7&o1KYs<*|lI^D>6~t{) zQGyD>>K~>qrgEwdR%b+JVB4*^Gi5LdgrH4dOM|e&6vHcj=C!UUttGh5eTc0|5Z)e~o@gH)H$vN4Ipce<#rU_w!rP`-fq)_q~4% zTGoavx0YvQcac2f@Ro*jD9^|ec}8!V(y2T{g&Emq@0qRo_wuZL^iPBuru3Qi{Yx0H zzuNMKtmly1M`XCN#;%c4Gez0gA}~RO`_Wz;9?63sHXENl+fwQeoL{fGby0kN`=f(z zncr?VcQU`hZTpWuDfrjK%YXTcgz_J~sSCAXaOHl`+|QS^rn#)gIok#xcZ|!+L_BNl`83j#4W=>yBl8i6 zAu#yC`;?pTq8#}*G?ITs#nL~nVu=|8Muzjwy!fK-Wv~i`IhZQEYUNVOFpQ90EF>0l z$kNJ195Y{cv)0x|B89fvEfCR!u)Bq;RHIvG6o=5e+<9-tWLAnjJra_zKYpU^nVaTg?-Y^wmV9To zoW)eA{l1uxwy{K0>*~=q_!N=vhPAhARERa^s_A`+uZ7?HYEY&4rUidWDb83(un}vX zor&*j_2&l%KS}NRbvxhK-OtNn-01eHmP{>bF`Pzk@>f}Op@~>zH(1neO2rv??x<5N z=2V1EmzN>wjv8}DLZ~D_f>&n0ADxzNotbnESQtCJ80L)}=$|$`9O}z==IR{l0~pHY z7klsd*42Ud4D!I@mxOu42u=|g@B9@q1JM=o`Lt`zPw&k2%+;3Ej2)a(G4_<&u_CgR z6n;BNE|Tw?7qk4Ck9|?OIY9ed5gv>kwNqLlHrI5#v;x#S*mcw3F#=+{gd|9^U3DSB z9Ae&z0p{fLyl)*{bB?aA>S(vT>M4XnkaYpi&7CZ%NzOu9Xwm6u(djwS=^4>e{dOoO zBJvzqEkrF+FyHZE@a--C=N<~yRpOdlt>Zy{>AdM2QY7fTZT{Hjm@=BJZK~}dJ(cEa z7aA|3t`?>p`j^1ptUaX_zjQY-5cbUv{(D0UXJdo040~{~`QMcay&$zJGu43H^!j$FE%91^mGQ=3UHkWCX=tXLe%wzwEsH zE;yfGwVWC5n*I2{f6J&?L%7cL(>woHNPsnjYpp5Why3_MQCn>9OkVE>OTGM&1d<)o z-|s*Fnrbe^tSC1A(X9#d`_Xls%x?m|zkgCIe1G`bWcYsFdu_1t2lDeh%u|>t#oBvO zVtY^Rti3-3-?Pkwgz~?TEW|N}c-mWPBMDx_|_bMfoS22?^zYu_dAX>#ym8@fmEIBJuX$oml?#t|pn;rpJ$7^V0?y{HS^-*bA4j@le(h(Bh9r5<$Dv$|LQkg z(Ee_wXF~Z;zn?HZ_jX13KQT`^@$tDRvHVlJqWojbgoN_HcrT&->#y!)eEzS`zfZwC zOb}6dm!5xrMc01h`BxhBe{%jkYk$wb9Eq$4x|{^ub8=Ule;-I-rv86?{+-k6{Cg5J z{hyzIfA!P+5Vn?e+d73 zuxSd#>G$2666ovnUvxrWe@OWm#z`n&@>8_%@4dUC{DVwhLiy|7PALD`E4!fmz0I2P z`1o9(SpKB0C_m3!n^3+tvHY*D=z{j2WO^o)|MXi4<8yCUlt0Kkh1pKa`7g2jQ@f)4 zfo4KN`CpJKq6L4}U*5_1BqryS5UkE7LrZk9 zYKH5dC;`x3$H=wFJosJ; zn9plC}{oL5THiDu=D%xp^K zFY@sIy!e(|Q9_dlBGYd!zMl^y}+!*|4Q{&WFF5?&{zq$P6} z8U{DgsJb%w3vqptK!OtA@PhZhOmv+Tdk2Y>LLfTLPep;}Yk?i+r)rmSDm@|P)TwR5 zY-(&O(ZRG$IhE$TUSwv_kl33RX}D{DL9#c^IHOhsH0iD>Le6NCH*}ZuO+z@M+6Rg7 zmym+c?a2GUwe-^s4|K-_85pK3P~@D0hiUL-o2PAn^Crdt`96e6#B(4rSoabCTXItSFd^MR7~Zt=if9+QlMWNRAu-(TXf{7L3tVR4jIz>750UlOnAuX?T96pm>>NpQ z-;W_9Gv!MZk&xC_#nlmZ_?fP^eNxl| z!z~oGJ$?CXoJ`pNIej_ygMH8!rSDVRK%?vgm$#1xDuc3*c%T*^@&9Tj9_Xi&WCw1R z!R?3$zi_GCr|Y)(qs$) zAq#qR78+GT77)}ygUG%&QAQ$zkqBJvls3mhcAP|8^T%co#MJixQSHACFME;<5{-}EC~%9vL1`bRU?u9 zgco`Em%!PYAczp2ZuXv|B$c|VjUnU(>8DoBK^YRA9bO?Kqwu2DEMTh#CRn*VSv6Gt zRrPatVHIy-8c_T?YD+=5QBA%jaX*{GtG3GOk6QoU-p(tM*=RPINRBR+NOi?kmqIQF zJg$-bHCd35J_53av%1zJ>hAD(aqNmVe@{qHX-kK%x5#VXmVDpVK;Pm^2T9l8d5C0U|0HbP zhPhg^P^Rv4wX@Db2{cz;H8&zD+`Ybq5>TuBH3GQn&sQoUIo#Oltl2^&w309UHK7xE zL09_lhiGI{j9Gp@F(!1doWYS0f!wi($ebc^C$>ZuNr|LhE{rUaPx9X6MvAEZHnq@M zB=b*{@JSOf4spJoLN_lNC}|YDp^4)$Kk6g%KHO>%5=S#+zJSn_`BgM4+7Py>xFv=c6$|587f zhw}L)^7%rkUH1hxt^76NRXcdAvG={cH=T&sfr!1*LapUP441^LD53)zR)RLP0#;aehX+o$32nT`%bP=T@> z?YNt}N;7)agk%OiZOn^w;WSZ<@{r#rh;1eI@2X{oMEI0kfFL$6HF+cM?#xvefS}HVkccZo4>z6q72I$#&{2H zimp)f4%PEW05${Q=r5UtJB58(B;btmTt!eJYYSyi%U=sGQqwNqLczD4qr0Wp38>XD zQ?%Gqp(7Yp@Id#SBfF)Pbhne3Y%>0SUx$<7=!hjwi8~piT~jn20CL08pvL=Yf)ASYv;K6+`SzRM+XDptP(S@abf+Fze>oww|t2#W+m#4 z7l;d(T3uOWwpeU;0vj{dVsxZn8>B6c(Xsf2Az3RCwG9+=qK7HjH6&Ufm2_RnzIe%J zwv;TbQtWQkU_0si(b_M;Nw>A1aBExpAC@WUDcmyeZB?dki*2MkhIVkF4IPeT$lKIQfp zU+Z>V=h1%L(!O;GVT50`=4X|^x%%p>^VaQZbk?$m;3Q)Dr@n%bnKS{*QsE!q=7_s7 z#q9YId4&>GOI^i-7$1@-q0O*%YrLM@w)~A8>FnX%ypJ^{v3A-WFnh&<%AcG+I`Pat zxGm2aBb~96IR`|TE@C4hN~vz7X>Bt^D}PD)^n?RD!En1{_i1wp{GB<~90Qt<`=xQQ zh*lDBJbqSxD<5o92HG3CPq3he9M~&$zF-_V%-Az~THplt%$^?T?`&{S@0N?4er9Vf z5}pxq;hx|#B`?Jezp&mfZV-9F4!Q-?eaIE|R3-g#PxT^PC?sg;y@TCkwF#&FOWPjz zt-r|7E^Ej^aT zV@eg?{D#ue>fEzl-g*;a+T96{+OxLeeFu1-Ze)rN$g{OkW!>8&;Ai#N0=G^#t48 zA*UMglcFmeT+C4myAiTri)Q55)KNx`w(B9dZE(B!XrH0shn(+v_*%_JoAZVaL@Z94 zJ0F41o8)}gYCfuER600%w>#ru?9I^E`Xpw6WL6=T{HE%iPbGvk z)ttJf?89z@$7csix9YfW?sVMse6@$hwLV{2X_1u`iLePt9->|%$9tcz3$GG>GpxK< zSoy9RwG8$Icc-_GHMkjcX)wFzvU!ir&|D4!`BH|0gVgg?k%g!8Q^NTxD=E_Buo`|N zK=wyQVKvpRWRp~b1_Y}&^fmXD@w*|s zP>6GAeaXw5Mcu?4`DM5ELiX$ekJJPu`3-^GvQ^R?PoNJ-`wdxdVq#}+`CitGzwrzH z#Xwj>Fqdmg>IN*~C4i}Ua#St{50NQ3GqUrlom;c8PTn;-gN~+z)ezmDy@&`sn)B&k zs*zLz@>d1}(`09A1*yUKowtchX#9<+skXoRyKd%4N*BXy89U3ek?4zithbfvJ+LsU zo(3dOloC1Bs5!U@;UR;4V1B4TETGSl5SDfaX7#khX7-l%lm12DZakE~Bf5FZpJFUW zq~dbeZeU`LT0#LmHFS?=MW2R%<;qI-jy@ znHrh0EBWhUnzwueKZ3WWd+@m6u47#N?ra8SG^u(TY|B;Y5{`%;KmyX*g+!!#ot2UU zz+1`VW6$NJZC3$>-}D2%k%2>Pilp*g`fFf|hTa z5o01--7|>?84W0}@lKy#tjqHr@LisX+&n^bPJlf!O9kx!i136FHJ^ z06^qiD@IbDq;}mho0$Ar#qZOB;s>Iz5`#T%j(O{QBJLK`vP^wCO)1Ed90D27I2n*j zVXB>!2zdfRes04Hhx0EnmB%}EZaC$$ZCvV{wy~7S4JltpGxQ@lmTq?rB&PClfrIcN z(!HQ5eaKF7lS|2pPof=^F#0t*Kq;LCvlb^Zr$$0v5AJMy+(Zt?dCMP_IUDPCz&5sB z;OBT_ZH@?SI=p{t0d5?Mc+kh8R(YRTmc^ByFrJqj9X+T(2Ruwlg6mhak5 zmvje~nk{TK`3e#5p{I!WRwJd&GId);uD3ehSBJk-A<=mg<$8SRPM~CfNHaZqFoEh^ z#~h~W&SNKzL?)e7ENM}eza$xIq49iN6GD6@ z0#)6^5kDgg%|sX~dns}m*;*wbsQhF*T_KhYa=*nOoF&TbJaT7N7r-e-G`u(HL|$m=j%+vp8l z3b}Ajx5BDgJ-ka1(G_F($8C-8L3j&tsONx5gf+K+G;>7jfa7M~N*fW|H-F}V(1Lm9 z+Q#0{P8kxyd_!KeRCZ^?d%`Ft=Q%wru!K~9@s$r*;alxaonK&L zo>tpv?iRDT4CauWbao$4i4;5-^lgPTnFo<3<$KL^n;+eh0$0$n8m`ivN?`>b5U#*d z>c%klLw3gGi@LxAr?izX%36-e7PH#Q7UgBWy1kVwbj}G|5yD+6SA1U2vp;H@{`F#; zX?vF~GQ+Ehl~cq@x061j@!wV_M+SMb*#j$Et{E^{B$YNUSNfZ^r#j|NsVl`KFu z=Y0KiCTC9l(A@Kh44HJz(WPcHo)m%GY4Qw?^NS)GAo-<47sefQ$gc?yEN^SOKK}A{ z?W3a`PB^{kbU$(1wI;#Zv?|3~XS-nRq1HFhj?Ibk9r%2TyJHBx+P*rPg2f{4!8f=A zCHvt>>*j3bo8Hg^%{13?Sf#K80ufg*9$dCcc4~OI>uJ2>%VGm}Mv`D%Hfpo#ld7of z=qh?LFMr3rAK;gCxkKvDuIz4010=uD2_5eQkqa|-z0>ElW7j&P(u37~?e-l>o1->3~SI$~ylPEF9$dib)(iSBWjt8(*g&8y}U*vPQbj~FLb`7E?PCAva-V5MSKdKXnW zwUxkI>Io5*`E`khk{`)xtdE34LgqG@Kj=)$yOYDnDggE0STZA(l`212D=6h@%+W<7 z3>dg4u7l?|LI)-CpriI3|2ozP#AvEWG<_3vn;|7@{t*(9P2f3x|`f!WB zTS$o1b!4^WWkt4#xEkS%G)@wmNaKdZKeua9M&HpB z*2DL%jHc?qNOCy!g$QRX8=Jo?aHmB|>8o~~RBXhel%FHh!=u<6GtKUgs@UdbF~Fl- zH$>L6`4`X7AZHbS+fwtAhY-EVZY1yju`4#-&d^Hpd<nH6NHWBuLa!hl(%$eWny>6lA?#$ z4Lh7y84m2|`V>>F+iwN5f?e%9y)N-N6UeURjsiKh4r`yn>McMRDb2BUSSMpaPC%5> z*ptw!bT<$|Uq{mhoA*BWf4sd5d{o61KfXy8SRk^C28@CbASxQLXi&lB5eOTixVnHz ztO{7QG);ZNF8B%rHw#?HYq2F3D=M{UX{CxSK~$m%U=jf#AcZKX(V|XBict|3i0tos z&fL3?Y$EaZ|9$@Ox!L=e=b1BS&YU?9V(}?jbYBW$SX)q(RFsepq49M2ul-+#NX7sF zus+R%wz5`J>J$Y6O3OM?ae;*?##>Zi;V{ZFzLGu-kF|;?-1>hR0T@C7sLeos=x>)1 z3RCE1R>zsueuTxJ&_-e$@+oa3Z08D4o;pA9-3I}$I!Ezcjo`sJ|F~r_9~DHR3BSKT zJRu6?ut9Am#Ef7Feu`P~h@z*sX>b5GM9hZk*zWmK?Eg9HIO@D49pP|jssLFXB;P0w zw#$5A>v?fJju1)1{tWyY4$S1i6Q@IPFjCw?dMWE^tuBD-FXPvcc=Y=aUkUvvAoh?B zibilrFi1G`3+rrkcP>Z;FNg^lc)v{;#t#V~*bO{{mYy5G%J4^hg5!97k)>Z{k!45~ z?Rks9edBCue32DOSh7bD%N$EE01bbYEvX7q?q|Y7pXoS$0Cc|JfgzvzxAd3${s+b` zh!-4NJoh^ge{g{#uub>KYrbs?@tkSJv?-Vl;gPEufgL@VZs3a^J$(|bX-5CesG75g z*1R6xJ&r3LYJCMzR$Oj6cL4Z+DUIef~@a8G9B19!3iYL>Fl6?I;W+VQ5 z2wVr2z|GA~ET~#Qd@#8_CP<2MY! znpPJu2_{fK`X&yj7jb3=s@Dc?2HwS6XU)`XeCCQ+p@t40t$B3X8pR~=`4VwoG4fGT zVFvAm&p!w!SIVzvlRo1LfWVAud=nw<6huAUqzHA`={j6WW>!|aUPJm-n*Jy;QSc=6 zH^PZ2Hr~W+*WAmoiGj03C_B5?II~m0|CK|!S-1ic$in(OEcpB2k(=-@Z*|h{Y7T9d zAQHuORxt<1Gk2phk6}3o`Q7Wx(V4NyIx#tO|lOO@rV_KKgxX5D7q=W$+MH2$G2KrfZx58Ynx*q8148NI>2x9cD(De7MfZ51g zTY(Jh`X10;hd6lHAhqFY4P}t@+Z0D@vpl)1%yQDWUVEx6hQkH^8hkAstazu0Y%9wa zyb}!Ra&$b(K1MvsvqUclQq$${AN?WJlv>zx2ytDc8oBC|sME7B^OD*zr!(``8JkU4 z?99V3|1wGJu6BhIpw>!(2_8s;M=UK5ak-oIF^je0gU;hhC}tm+1sz71wRl1gB#Uhz zf%2a3u-uXxtZT)L7W}jyJVPjtSiwuZ-TlD~PzTJ$$K4@Pf%i32=_6=*x^0Nm-1NMW zShD-94ufrIGY%n0Fw(vS}Y|L>O$Pzq?Cn7yX23GYpZklMUBi$APMbEGRq019~F|+znY!b~20vw)nG?tu+?F z1=XYzGee3|!f3#y-pd(~WQODiScf>t=7?F)woC`LyKy#=ApYD4<2lH-|HqLDKk zV!lH)60PYO-_CizYpX$=7DeEwE5sUS4SN&4g*2i5REp@$z zgG$X+nORwK>Ta#LwkQz|!#0budgNEbHinA2A$ad5c>uTcduPL*(5#v35{%lx6Uy7~ zIEhzRsQ50)YMLAK8*3kC(h00b9{JH=bd(JoK+X^rn-CUTV48>#C4x*)YNA|Z0id=Z zH+DRW&D`0fsv~v~%yO$ISQE5_CM$kH&JoWYbPHvnSeyf2)U#1pd9|7SrhQeMeoXw1 zx z=%3=0L=x?y%st+@D2R*MOUG*NR;SHg`a04Ywk{o=PSRj^9BMZr1kOOP`yA-^ExvCv z%~vQ=Qhd#`vE^L<<^`BX3$hTb6r#kIk_D+2k(VNR&Jt%&15fVl2}>D|eE!7AP*Zo^ z)#8zVv_Jqm!e~%$^lD~IwUBI0Hq z^~kp%=7;of2$GZ73`o*~Xf`gJHbSZRMKPBOKcL7DQNp)SO@#nPHI)?!Id@C~MENdcfxB+_l})|b}2nJmMs zGL#Cj2D*}GLa1rHF!2F|5>Z5<)d@+MF?LvO2gbw`-5>izn}I11dsg`+B=ykgYP&M* z$7hUl$%*sgcfN!GkgL7380Wxl*xFot@ZX&!Z$cP=Y6%mae)6sQhO1;ryE;q z|KS1tlS%QOFu4w#HeiS53r55e*u}L-7bQfZ zkiCwY0@*8~N7I&jO}7p|L2A`>7N!)iY{s&FppM{KTh%doAEwACkSMY-fyjQP8CV4D zF>uWz%Rg#^Yw5I3Vib;2k>py84!-?QGc+6Bx1mlF_z>Yac)H! zRN3ayiKng#>v@m(cLceg>PbG|aDS4#w& zKp|T{XKczt@}`mU)qQPpeFA|C)4Zr$5Oq|mTnmw$XrBA%EOk;6PxOF)ST9JcNbD@K z$mfO+QWS5ONAAAaqL;#D{TpLV^ zz$Qx}dRx^X!kChA-8;bTVv=a)le^_#!}0q!FnCo|_93PQ;nkW*ilh0q9_y%x529 zL=YX-Jzg4Ve51vP43*A7%a6HQAx@y94FsZ#LucLrCGqj^*iA^|>kYsi<&JNc>%r$Y zT{`w{ypJC|${Cfmo;ZIt&;O0+X-?own!CH`K<2!D+i@U+1W@UR#?@)(jSlST+}MS` z(4&non)zGN6GKm8Xc9r&H%unQ$DcF){^n@^6u{iJ%F3*%oI>s?FireH+q^zS)~bd? z9J>N|2R*WIChdlBVzX;1-c5xH5}8TtlD7|!VHWcv+Nu|`yNW@I(I3|lqu-Ry(ug{M z1#JFaEs=C9U3GLGKGBLv1^v#xM*zvXpYmp*Pl@3(fj^6y`$H}s#R4Nvxtq2t#Ws;p zC3|Vlc`-nmUP*r|*5fax*-*_+2X3VoBLsFw?QQHq@v)Octy+P!z#8P0MazGHb^;Zq zaJD9J8}5N87AR~OcfwJ1xEE-(H$&v6z(+#5?y=PbHW^<7d$h9ExVKN@SN_Vh#_O;# zF2$bxs_v+f)ZmlFK24_#$EuRN7q{gR`p~MX8Ua)koKSd@{qHAg<;#&t)0g3|Ue15@ z6}YbsY{y^AR9%0YpXe_=(c9|4N`8XXC-Aq@2I={d^vQDc_#6P8)pVc;3|&S$Hd#>Cppg@!cbC7$%SGf!f3k z!$`q%6}^-H%;^U(K8SnTRSHWZsosamxxfkG0;6$8$Ajv z#iPPMo!=qMV&HDPW3xhy@rne$UqP)-1gise_>`bqudNB}z#UZsyJ*!FCrNyeY_=)y z`TPCp?dmpM(c{?<@y!C2$k&0nMy5J#eU%aN_;Xehdk?n^>u;za~{-lJkT;(2Ar@=b2e}khLdC7_E@ksK*}IO-GST1@*E+)RwvF z;*p^+KBs%AW0j%hA)PgfwX%b_SK9O%E1zTb^w6@?YqEzDEQ=EK0A=$`g`vhK%D;WO zOi4IRROd<&SWgA%REH8ZX>-%HM}`W{LfSmL(2|HrVq+y9kwjOn4O%E^1vg5k7AbxG z406w;u|mDZmXU10c)YQi;bp;Tfnmd_TT5c*$pPT4c#g(ZcenCGwg z7G!{oY|4z3B4qR8M5@GuA09cNY^v~#} zN$0Ot6r!!B@EMl^Dscyia^W)o4S^u&OyK(6X$g|YgvV>pG2jeyUUduOAh2*k7y^p_ z*bY}@sbskk6 zF_gB2tBve8q0-Qk_GOU6@t(5RqR(lm&?kh(R^ivaWPt;JHA^Gu*u^x`yO4XLvR$L%tlF3(hbC%gf+LE7IOxXD;o7)6p4<&zzwZ z$L^6D7MwZ50jOg~GAulEhVxcdHxWS=gCgxd8ahGKk!o43Ai1O z$wSda&kXAgPe#}CRHyQM5tD~}m7KYrS64*WL!K?poM+p!(RoPq>CAbK#pIz-xo6Jv z*vja7i1j>ko>yb?{HarUK90#lHfU$Ar|WakZ6l4PGw1m(CeNQcm1n^7(e*srsXW_O zN9S4DsXWJG@{nf7nfo*NrRaK|?^K=}V)DGusXRTj=z3OlD$j<;qx1ZwQ+d9K$@5~T z^6V7R_58I{d2ab*be`3n%Ck5o&r6-k^H^DQJui1E&#N(c{?@5HAIIcb)2TdNpN?+Z z-#eA(ikLkA=v1DWF?n9;RG!CU@~rJto_T+Y?$19vm1poX(Rp6&RGu4R^1RlmJlDJs zUC+8s<(VCmhZHo3D|-ciINUw#<-@le#qMJLKTRa@4} z(U92CsXRMk^1RWhJVXB$UC+i&QtVU2nl9#e);nBA7da+ z@y;S2FJB(>@ecSGH9syoQPHW|p6nXUYroT}JpYKP=iN@_*|#CGZCZ4qvQv4!gP+Yv ze`t$;W{BSlM+%WVn>&?f+l)w_eAzmO4#;VzO$U|IeTvSFO=rU~XWEb+*s&dNni4t9 z#-U@ry!6OUWWo72?cSGF{Ikq*1lPb<%PbyTi*P-UYZordYh{)Ta9xAzceqyK`T*Bq zTt_O(EdAD%S+2)bjO$fgU*PKddYR=qTnljh3)fe;&i_}Lkqi9ah=3<*&Ah+ zJ8(UXYa6c9xUSe(W|@ua&$xEtN_?}-auu#3T+id$gRARX=pU|oalMFZAFdv6msu{x zH3`>)xYpuoz?HJ8%#w@iQC!d9+JNgYt^t6>G+c{uy@kt?keFoc(zTnddyk&UXZ8C3 z^`G6*`|NX4`t&_F^}O@@^}k@iz_dYwhooP4(ZxeAxin+g@XLNN;_@ppM_zf=)uTpV z;~X<~-1w{s6SF6|awg|qd)<`l-8bCmnL2IyO%WA7$hW4F67>mTmn|B!0DZ}9BB)$S z_l;4}s^c$oI^=9ev!D(iiV~o<#Gdk&zX8OZ(JH!;M*DftrueH)Du!)+9h-W8zff-A z-l=4_V*}8bxs={cLb81Mn{|?>qM=%Va><#p9oAq74WQxzl%nl4^J29R4E@Qh>Ea{O zGAs~D+Kg7S&fArq3v~2MMHjiCyp6uf@GbHBD$sK2`z~v_+=%3cj^0t$(Id+%>Y}0Z zW9p2YN$(BDH3Q?d5JC{rCLxuiNva#ea{mph?Yy*175 zu-SXN>mkt3ff*)4qeyn>b_p9_grktORuw z?(R}VcMmzrxI4d}1pp;mt)K^5M1~5HT)n;xWIwEG7qXiw7_vSjH?`3eXxmqRH1!Qh z8vwv+6(2#T!XtAIE1Oz-faEt~KImytA~ap)S%=dsq-WVoDkPOy6`*SbJJMePVy>0}$`7H!J&;5zgNqgag~0`lwZFI$R%6g0-&*6UO#@J%JFb4}@PMbI z>L*A)?JJFuf^AnQrN?RQK%;RJs(__dnms^*65X{Cv&tra@o&<$+azEpb5(n}HX6Cw z$9*U<`vC1qXcPM=qVGo5wOj9zwr;4xT`9BPP2=;{ixS92xDxJrDCs76#Bgo$$UpRi z_k%=yqOP~!BZ{cd#@3k?x)#_jvyU>r){w~3iw?SBS_`h2US`2?-gws0Zna}LwDE9x+`~(hB|KZ z<)j^-glMLt>=T<{jEY)VCv(_J(>O466|ijt2sGLck~0^lhJ-4wY@!kJUf?fows=>B ze22n5)Yc^!)F2s}qB#12{TLOAK7(t-ps&YYixj90u0-8SsqA%V4z$lbvTP+>TcSh& zg#$mvLWJSrO^&WC%Fe^S0RxfgZy^O+3-rKfK?&T4^R8X;vOPRhI1H9^-`hkk2^>V* z_LI{mXsbf$9X->gVI_8Gc@ByWM7r`r@A@Iev}7~7fGG*9rqgIQoZ5nPO+({7a@?~# zjvX}_WgWbe$_m@06x!?{T@CfH6_h@TezN1GP#^{#RRTtqRp3VI#Lo;*#uMuO~GSzQ0D9x z@}-4*4WKG1RPpv{1@g|%WvG#YCmeItC-?>weuX@Rxu>3m zB7se?W+YSvlaeM3bJp4Y{qO-6o73dM`&fsm^g{Ili9_?! zC4~`p(EA|R%t|Z*@KN(iP{6_mKYamq4qv_i*DXi|`*uX3akyl}aI8OiMOOWavmXw9 zz%ZB8AFkNI-%bU4i^6jqu#fY|jGGP4)~uO0+kLK}?n=XoA?34AlXHMHnF*W#-AyT+ z9d5?buc#Sl0e!!->H=DC&c*=i?*1};Xd(wEN^3%BkTlv!>zF&&4)e%|C!tAfaAR`v z{Xvc$a?biR6kso?eXk?rxD9870Z6L!LkR@cBp?*$EFoTvFrrW z2+JN+<`PznfnwQ*{tX0(dICoW*yPKnU&S!jr$D z{|I;g;cZcWAWQ^biXFr(4--?;Li2~pL-)|Q!%;bwbp-T*hPS=+T&kahGEuRXSTmK- z*wpk+2CHlqGJbulQp_|^L}aHimiQk8>Xd#+fCDP9COA;W_ZzHe3BGe^6w5!v`duq~ z<+5sGO5qFPK@8F$k{*h`SlTeWWIV2ba@&vC$FM%4yM-aT3{F)e7@FlkWsEBRU^j&7 z`fIqzhOZ+JA_)x5olta7wv;R!iO&5GoinGxpu)e0>*A@vK#Q3UrW(0D zK!>a3n8XExK(KBODCxpsiAVnRR?r`x!!R%-i;}P&6=1=b#}J;;ktd5VtK8+s4xeVqdp2|6aMN&HOWFKJ9fdTY+^u&~Wf* z1%UOnU?1|O&8H+&Cn+Dx9YLiYaRp!8?adsFg-k!z-_)DuHmx54;r24!P=`bxl@)t$_ z3mxZ2vW2vl!ZW-@efG%A02VKuKmb;vv{DZ&rCjBd*JCfe1rU?VXnlL`3B1vD`bzwq zs$af$7(6OD*|L&ZGHxtdHZYjIZe?R4;3iqiPGLPrQ9&Rj%Lk~%QBTCKjGf0DBU+JK zU>V-pONp)5o}(sd&#j<01G6j{r|8n#iweq4%`L(Noir|$ zeU(7LG4LSX%i7m5`MK-aNdf8}v<;y@OW(*4j5FJNTWzYfaMz%5V&`+zO!yS%{xseJ zaES^+2*DuMx+z?8ws?Ewhna9iw^+MwNI!FHBfBmIWL+r=COS2NAgTP8S;%FZ;l9iO zoXK#ExIOssglg() z;Dv%?QoC>jiwhOQ%nxpr2hKC$X!0YuG4?*N1SMBGu|lSOF_J}4@l<%qxgdU4GJT&+ z#;R%ydv06vH<$&HIVC$0_E*BT_pM9WwpaJ0VEGZb)(jimCMUrvGx5UELb$`Mvik?o zB>h>1{#q4keBXb2B`0&TL+BFQttZdHj(c`PwJYLP?HT4!}j0+)6OV3{Ob~i1N3~+XzWj~K1i)VywSC-nDJ_ztTWh-eXa(1 zHZ)A3^UGYazqpRp+J9qX8pYA^SePr9&&iBjod==wut7aE77lV@5oPq`La2nd=}Bvp zWE6~1U3jfQ8(a+rU$hbaooC$%=@+e@3+U;)b} z>n2be;T}st`||^FZ45@WQS8b*Al=uqlw!JJRO}AQj90NPQ()Zj>@5zSJjM)$v04W4 z5Egg>FDyAiY)O=#xWPYx)tw&ALl>*j%u1<}h>EckqRyX%4Xcq~EQHr1tAWGHVQ9Qu zjKJpqx&@LQnoRdlHXpcnE6t~zGzwAIKIy+QSm_6MIp7 zG(X`Gy#6RxMlj^FY0uq`)d5^ZvR3ZJ9asjf;(pw~ulh_f+6!trtVctJgY_xL+4U|h z(xSyTq%FzWgAE&?6kQ3)Mtj*eTx;{67;axu)sL1|s;H^Uo5Rt#P`bYChcXLl8^pC4 z^`sPCrMzU7k}q?!Snx84>x&ja2`>b_{#n0}|7&Z~Y55Lbs}AT4MR-_)i(RT-58Q>n9(nysjBFR8W}#EBMS@_!YYABY zb#A1bk7B_1!9s`HEDP~igx%7+nDgLhHc|tLLqy0p)w<(rVq15$k%3b(69kgP{rCVW zRlQgNMH!EH^5t4`q6knc8#N4_F}?)f)4~K$4ZD;=#TJB}xZi4YN2?$J%l$~ExCO(i zes*+&;IWp5RC%mbP{>)$PgTZeT7-Q5~s4~D_F3hG_wKa+<>lm zkSv>_9jGHFD!N+%VIF_eJ>P8rB8MrEi>~|-Cw|zYPf$Zd>x;rt`SPjrEe0Y2MX8E> z#8)W>)26(Y*;K31=FG;MAuKVBbnO8WJsC|i5bJk0p=sO#_!eOyzp=$Sk9Q4i=Q@jQ zs&$=k8a&2SSlGXL2Ly%{1VUA$#(j<&5Q{cB*~G7dPq!J012{?`3wXxdsqFQGQIRCg z@4m>xum*YB>Da|$c})H0+}NSr@iCRJcMwxZKfDRz}br}%smQhXen;)9qnem@E+HX;QUg6#NZXGF}h z6UX5h>jN(}aM;<+t1vcZ4XIO06G=tkUzF+pbU6x}$i@k=4O{-J{)KI2B9u1G#Zz6@AQ}EhKwD*obBL$x#G1f!8 zFqA1q%todz=83rwBJ5#@CCNA#3ZB)mA`y-_)r25&;7I{>=LMOk7~IYg1qjFS>f+2v z@m_%gNwE*463#>XUv#TF(q|e)1RyE^dU8Klv1p1=dW2D&h<-XB#K%&ALX{OLK> z<9VJ_*~q8nc+8yIcAUT*24V%ktVo{%C6i8*MR*j=lBeF<1fkE}xTQmwcyKDh2lflc z&1ZQBv~?1s1P`2_`2YK(z?pCkz*)icv8Dy(+e;gO@ew*eb(-ECx;r0Cv6uR3dCjr` zy0nf~$v&RY>yt);mEBiIBHzhw zCVP7op$o?tq%c8@Mn1SIS`e{|L+EUqBJb1XjWFw@Y;WW=hfMck_R=?g0B(i_GL38S zsB=6Urn>#Kb}@w3U&U$2XEqRq(1O(whR`>KA@+`^nu(PR6q!y6Cnm>2IAU@v&wfuh zLT`*o_(~8j&NV%F_B42j2@dZ?neWfm^m~y~=f6|Mb;B?fsWBeuT@DV$;5=zIbTs|? zV_`N}H~23oa>!SnH>Mxu67^ENy-9Jp^sG2toCmyS0?lCVbnB8LYtj~+Y8ab?yZ+3x zw1QT?G6JUJas_XUL?UEd6ItLjk-YSaiR2w0yj1d0rp?zHYZc`)wk}s4XV#475w=Jd zv}K!&wMtE7bH#Fa2P@%!%#sBG4(+B?Qiz_eWZxI=6ph(&3~_8ksC{7q;E^{LVJ7fi zg@h}+G;R`^5W`>5^Vqu7(oyLt%!`O8lb(VTIdd^yQ$trN29t>G^r6TQ_UC4BP02L) zN1gUg?V*>z*#AT%=hWg0(^LIdcR?2lkyG?#V3x2QV8W!X!I zQ*Xjc05~l!#^7zoQ!x=vYY?+nG-w`Kx|-N4x;GDj|I71^vUh}wX|dY~n;f{Zqosgb zAwz#+B$Kq3mQh~~BnzV#Q0h(eC~CSVKNX&LV6vVZ42IxOu_;bIf)r{eNehJPu_9%v z+a9^(pV5UhegkG^T5KWjEi@;HF%prY%rTf4DMV+8n-t&~lovAwf5)uoa12hZMOz|c zkP;aK5{~@uHjsf4Mjv?bi|1<3LtCTK4c;8-bljN8&pypCKDq!zFthP@n1E5xd?$vh zOT&qALJWC(GGx`y7ynRbO$e=p-6-$8wA7psIKTHJC)w{F6aMS*29 zfED57Py7|k-4(GZx)4|tb4T>r*b=6;C2IylXGFpy-k?fS80Or3`PbFh<+KnTVv0}I zCCgsWL5u8l$aEcJuO{RtH&WTOoB9g;If_Ih%7QgQs9?w9= zzfmIuIAT{dpkszX(EyzpBj}fnD3HI{2MKa`xFLj5L%V|9CGkD8489>Min?HzC2D2S zCZr1vRjExF+W2xa%`~tIoSn$Tz7O8U8}fcZ*oZgG$P$O;kv%df6dm0wj*!&3`o2dE ziDd}|`*l}ULvqKJ$5i_ZR2wx(9s}nQ0rJ*80P8tM4rq5lY>H(M zN2eJ47o<1^#bRvUQ{kc$$}`Zv?L}L|$y#Ly+mRtqbZ71*mcIdW6J~3mUkA=cQ7Yzn zl`s@s&V?~}+2(jmjV)m))pCB@O%He?f*LAPEGE{UtK_uH;n5aCUHMQMI2+bvYQdxt zIjjvNu@CJ&uS4e)6aw*X6p4k0h58pRfgqKUF%-oP(MmRnhpX&4@Iw&x0%Iv#<8Ek2 zN5Q%pQylxE@D$$nB4GJiY?{H5b)K=y5Jp{(;*@Yc8s9uJiA0*CEZ)(^!f3ES&3{v? zi%}PxXQ}pGik=hd!cj<1t!HB<>dt&0DiBi@{tz}1!vZ|I?iIA{oY=NKy@=QcYD(0~ z87SpSJrJ0flC174crRbEM{2xDw zSp#<_M*TLcIT7OZVqv6W?lCy16r7;{qbg^bh&Z@z7H)R0mq%^_X%B_I*KGkglfA;K|%H|Jsu z#Pm}!;0vh)NI}zM3I2PBXnRO_Z?fl;sIb_L|Ek&TZv21qRScXD$3XG6)qtWaHpQq1 zI@$GwuXND$#fRE-{b|gX4!b^ziivdn5_RBVNPl_FlU*Kf%MDEm&%lnhClA~o!$>B} z5-@Q;#SPsqm>U|6e4>mOOPz+h?d})2l7gWv9PYr8E-PG)Y=FY$<|j{BW-t5e$Ivl8 z2wOK?*MC}Ox&JfRso`3WYacFmLz(41Twmdu@p+kLA+D`oz<%uz-r;)eE7;9_U1s@@ zEVCTPHKwu5GURZX#f9sdrZUTIxaKsMS(fA4fU6$YNnHK^S7w=Y1onHlZv3Xq@&K+s z;(EKK%<>toN4_nyy!&05<#Sv~-@_gc*TqN6EZ5@t;G;-P51f}ma|@2SnKkiVN=JyeV>63(G7NoL`{1D{=BRcc|uCt51NM!$#e`7C~>= zlH6>ibv9M4C#jbiMK1f%V~3m3ST7-s@#?4SrQo{iz-$H5gr?PVj~loRHHu* zc(P3wJ>`jWe+V^_zZKZS7{)MD*)C>B8eZ18SWh`t(M(;Rvr1oPo) zB^`6p72ICa6)?8QFEdpGO-nhuax)Lpx<|U9YG`CbHyycr+k_nrF~zcdh}(MeDXf3c zEQY7uT1b?j34!Qi4W|`7Aus(aR)U!Lf{K!Qm%`c$&cq>HgnM*0Z<2okiHzEUCd(Xb zFo<%vk47{RnxU_^gb79=QB%|&w`T^fX&9yk= zjG#Q`66r?~TPjj9uvJaxV+t4oS42_VtvyHf7h2vSJ+BpUZ8G-+4rmp_h*Gg;w+b#> z9hi2XYeI$VG_mRgLF6ch5P$@LP;gVXX_=EF%U%o8?3Gof2A~RBTwuCFUg3NQATBIj;48{8wZ`HMcwIJA0Kp@K2ZN)?1iAy>!5!7``gZg zodV)8CArqXN{b>-+(~K^?FXISZB-TWP-`R904H#GWj7*Ctx+ag>p>cbYAF0sD=6vF8>nJBoT`!8)hho)s`0IZjlwOq$6A%>-T>b+hYxwIIwUkxiTl@|P zsBD5i2c{@1w7e&@yk&ac8ZB?Rp7+GGsT!Znfa%hB`zcF*{Ucy99z&K;9TGSA zWX0$~7WINS@QoNLk9=kny~{-+_-m%7;AcGjC|8;x#J6JT76`_S>0r}C4_IL$y=nz{ zZng)O0hdQ{U+jU`Kx)K5OeFDdvNWpkv%L{Y!-O&<4jjO}#>Ml@m}8+4?a#8y#7w8caL9B({G7DBRMz}i-rXXuXH&qB(ME1&7i*$Un^pOcXIVmFiMw*i0 z`I!E_nvaa~x_gD1m>Rrs9+fjz_PpBP;+?sPWQt0wq(}Xe4MK1u~p%P@qR)`zX*K zWqRb@^+aju-lVi+F%G8PGRaGOl4;2i(D283uJBMVonSR!;I#=Jba0xAmN`FOrvt3MGEXfDy{qwl>yJO z_^Am<{N)Aauh=BTkh#HrV|TFzNesoEEY1q#>avhIg?o|7#Id#b#yFjpp>4_!c!6Q*@EsPIybzlfid8Ae>tx>|ns z{1tJu?$#@b)~SqJkthnU%T=A1tWva&o(x*&heju8-6|^7X!?iw5pu^y9!&1ITSW0F zGf}+$<2s^v6I)G$VjWE;dJF``hYUNyXa&tUR4U(lmmHZhf)Hj9A(B<)9U{%k{3!}) z6tWQNTmpp=18D}}R?JV+1EWv{G$|YdNi*Cgz$;r&0i=1JsbZ%Vuu^S9t|oPQSeXHj zL*?{J>g*orw6ABV}@^JKw`6E2Rx1BM+|5x0M z>1mKzFFq;yYEBhzS2ax{iZ!QDm8Y=6!=~_bXw!UemZxcyc+NrCf?XGboWj~BBBl&nRzP+G-l4bHX5UchDUd%L1a)&a zU~3N%k=XBa}9*Y>P8?CprGA;!l= zSRye8OqSBU{qi9&xezBSWU0W0W!ny!(i_oLcOzc#IugK;Y-0;v{RZNuRT1Y1g?bw*Dw6wcVUUglhGFnOkU>%y7f zXWW&?s=E2kgZzMxx*Rnw^4^HGbS?cf4bt3eG~Zf;zd_VSa`>`FKDiwH51$ZHx6xI4 zy-wE50xtz`E~d*8yd@7UbxR=|@@+DoEbsKkeTcMlpYl8x>juX0_^Ivn= zqAXSo`50U!86m95bfh>K=QOF!fgK&yJz_gMey2<3H6%+yxKl@Hg#6?oG#l1&_R;|~ zbOmON!XfYkA0MM|9}*zH|BHqG!$bTh6XRnPa`BK;!J`1=Vo}lN9&vbQiOH!rO2!A^ zTDzeMp^DW}XhP!?hbDx@7o=>P2SWFQ#dJ!Pd^^lpWV}jhyIk#Tqz3S zQ2;1L)V6glGtfWYjReX94z^ej9%~~ErzssoS?BRdrwN^m;9`h5DY{n4b0BV9C>9_B zmrmyraGD_@_&6KIp)h4eO-4kJV~5>joaa2jLA&5@{`qK|Xrvj3pjog_LJXj)Z+d(D zUnj|{;dlrxZSJ>12>>1_BqW>p@{UK3vdoo5npAW+u9T};UYG&VU{@7H4(+RP9il0O zW~LOL2W`t_e&f|P$vK%%_R6ABFQpFpyA=8SQMJ&(hH)5%Qg#npo3c!7*jT@ zFu3wJu?eWR7V{`}I1V%Zw00YU)UbfrcL5zw$p5SaQlRMJ$f?lCKp-Fo85Bk#$N6Yo zK|UY==V8-53`zO)gVeHQj;4Z^P-HS!EyALp!~^|f8XHA=_?GdTg3;m3hII=H1Pr?$ zaikAK*uODW-*4jGtU<#m%2=$YKFdJ@m>Pmh zAa>UV(lDm9MLO=R>52lA4kM9mLoNW>-!PEOV!%F-?f&{FI`j{?sQD;pZ-hlqz@{@7 zKpI|ER%;a_!Psl=6`Fe`TxV(SRl=^h>%^2~&0UXJb~yY`MuM>SuB|k;ak8X-$OH-J z8GGfoesYbs%$WN%E~&mZs~=+9km;x;A;D6Oa|$^J;kX~q9wBxu4U9nPa1{oF4!WBz zkC$+uzMcx58%x0?`yWZQK-)%S_eba|B%;!wYLi0k3Zxq^5FH73-YZD10l=i{fuVRN z0lBX`e)$P&!{|^srPFmP$RkHD`XrS?Gjr;LJbJgnHBbw=BAAt83ZWTR^|20l_DyWap?63zmpbuCY z1FzzjYH0Z81mvB*)IxG&Q@HHYl?jFEpMhkW=l=fUWr@DaDdoIV2S_>mIz@0}G;89c z4%;^X$~p}(paL+%lcCNqgzmtM!tX?`#05zG4Wt&0 zh|m$$rA>FEORR1|-SWuW?m~z4T-<}}(`jR?>0>B|d#UDHsz9OXS@eCoNAo=)GmwGw zTyiig7XF3{Ymxc)v6C>)KUGiOpeNTtT1;Jl{q$q(rJ^svVcfa{5S1`;b_L8VO~cfa z+ERO{=hS1eOW?5<0V*ROMsCZWgUUW{yp7h5rSmGa6~q!{HOAQ6(->cRM>XEv14ewX z5;fe%z59{Lh#Q0r^lVYH4G0@Q-yovrZWn0fgqE4`Izf0OfBE$g+Sv!Tp#uQIb$C?c z%I5a2?CC6EW4`>;-$G(U=%giN*ru!u2l*jYFzD5G&Ivy2WLv`MxfY=*O;g16eb}-*dr5u zYrc9ycEK#f=N5VJcOB2X$^|_0ejyltjd{a!NI{>(TXeD-W&H9*Oe4lqBgzTsbv?*( zEE;u?^_l=ZBCSQFKAtl|A(@yrhH#IPgVMJm0pb_pfs)D6M?Nvc*O~9D*&aAxpHzid zmOSC1_Lf4`aJg7ls1RfFKnmhJdoW>%;;I+}X2ytil*J92E1r6?C#wsOqi@CmDK9ft)^UKdVt zJJnqbCVmW^tU)E$73A3FE8c;S+Z9w2Zc^?MS5xq9{O=;ifFUMM0!~rDMm$eeH#=z- zwaUb^iB*OUhduB|&Vx+^-h1tagS0&r5P@(sR4&Q_R=E|r%pCUq<%dYT(?Z%vw_sd| zp96GE&&}9%`g$OKy043KN~(7XIe(gN1E+~oQ7D0It2*4Ls*#K#p`U;~=22MMQ$TfK z(YqAs)7NSU9Qv3;g4UT)+QIXZcaTGnDBLj?Z6K`=iT)@TKuYDqrai<_;0)ar197AA zm-T6iu_0xh*ZIkCKrDy+AuZy0IA`YRP)YGo@Hl@*-Ed4yj)p;no_q>3kKDcEP?s7N zcD8a8RP@PXXiy$_3Y#BaGpQA{5SYc&)x?E4t9`=(Kqo+hT^hW95$lXV)TDKTIqbSk zB9$%dY7eZkD;WZBI6ZD4W*NXgO4fWk;P)7!ZTLR0!J)9c?8-AaF~)ihFba=@gc2un z?Mse-Z;#g zZsyHtvm9Tgk$sE_mJbgbZ%#gM+`PWsxVhP^>)oTqo37s(Hy@aTGP1&W^Q@WcUtbt+ z{=Ub!$ui3+FmIkTZ+xHivJ?$3^gIckd=>u4<-a~*+0_4O%X`MPGwOc7ao>R7#;Et- z;rjjZ~X8yLnXCX~rTmx|p#dSHZYj9=bx*k^^u9>)ggX?}=l>Z_8K88!+T8`^E zTrcB#4cA6oRk*g{`q212h~F=99l>=RmjyW89oN~o`r%5)HQe~U3curV<>H!(>lR#h z;<_7`57z=*)P^PaU54u!Trc7hyJ5ZLZ%FWU89gz@d$WEWDQeG$wy<{%R7+XvH>A zP#c+=ygjL!e4(5TY1XGAPl5#Dyc2|}=>pwVO9^^x*b3UcSLD@;8IZg|I#LJHEplx7 z4R9jNeN7bI1C{Iy#g`;gsZL+eWCIu@~v841H8mSHPziZx+jTkf}^Kcz5NP* zWd)}{qCb?<*5QxZ^??XtK?K)$F%AtzcSUMf!{{6ead}5Lb?OCXY9w`jif?y?zb%XY z214d^wb%nEi1f0mUAydsm>jmCu+AT*-#GI4NB!O(vddpJ@>oKGueV6p9R$1IT@IRy zsn&!FFW8#N%MIvghoBv-|$L97SBQ!?Qt36kw6`!&WMc#1$hAM4WY zp#Lk<5>0H!C%fY5y80{Y;1_lNuk@UHP*;q3ftWlJ!c_Z)mPMzD>-BXtcqF+a@MV8a-wmq{0ay4}@#Aa_WthbcQoy3+r&s z*us6nY!rRrjS1?j6VwuSUyvg z5(du>=sO?VLRRUk(BQ&R*P&6PrkHRAP>*e)0I3~(BtdL&bhg!J#c*vA*(tYf0ldS4 z!Q$jNa5Gb=@HIHtHvsTC^#Jx&yRegak#5}JWT4ZnJz$+VV~am{H8e77NFx(00RY@v zqkzYQ#iKxV_sPJRHh1BMk z=KR##IB?kSwXt`$&2-r#lX3lvv4E;HHKX4 zjLkq)Nb{AZd5wzLOfMCEON|1F|6S63vJ|HjuE+Vh!utmgg+0eP$j{wW5WBWMWtUJk zrz_>rl*00G#@aR++jB}pF9tPRzCZ=5vKjr_+tmN=O$kjzmyje>?hA!f|+c4M@Z{jZ|#-jX1 z&7}Z9L|%gm9HOeidS*lJaYUNw;J#b9zy0o(O zc(Rv%g)XzdQ#yi%^7I95J)G`Cr9@~sy-0ov0qeQ42K>dgn(v$WZwtR6g%FJul9i2> zX)(!$oUWD1%bU*1O&$>-U~2j%{H@_vG_ciyLnsL+A9qL8)FAaE_}8#U4oXzRcAn}k z3stH+Qf5+jH;3=;Htyta_uCGfQ#DYBQuRvl0)^ZT833p{9&78i)*?{#Kpr;@_NDb)pOQVVb@gZ{)FK{|r?% zbb&JNIy{E@Wwf%%gg?2ZWze-+)fIJfz}R!Q|T z8ha#!g$G-E3eHLF3|A)@Q>s4il2oe@B#EolxJL>-AY*|GV+1irLH6EI1L8Y>WtzgI z(TrEV^9%omz7;O(2O5@2it#YKG#U*(Ap(ZrG1DGwKp|4gJp|w|Tu5Cg*mwyb4AzL` z^m+BO?dOC+MjPaeyt)i`UDe4X238USi=ZRl|ABy&1Yi+73}EH$CFH{)1i(ZfMeq9) zz6wCfrcDk);nrV;n^u6S3F$DSz#8^207RhSY(l3h6o4?}AV*H(S`cOcvks1Q@f8b1 zU={t6Kis|kN}NsZ9qp>~of{7gd`7Dj403~lQCE#Iaz-%ur*l(_wA@x@ZVI}AK0~n7 zBO)~mmD7|8v2wed^5;E}T+vK}%nX0A%Z*K~W+=4dX<|FeXtKj+FsOiged7Q;h`haG zn{d@-)WWriN~Hyev>Od!#L?T+5qgy;#>Q`N!aS*+?l6f=xTT! zxgp_fi?geJ(rK{G&T^{I2PSzhN;jwrmlIuybF=qqXN~uw=yFELu2fDpd*B>G7;cQ} z1p%KQotu5{i}Ch>@CiFg3lNia8a@vpBqL(zWeGMKofec>!tXs1?aDR17r5mz!U1>FZe04 zEe+`SRmfkU@x0c`m*G`SU^)I$vC>=ihEb9{kqZoT?G?p!T7a<28MK%7!N4(oh;D_Y z4m9KbWO4t4s$B+g6}cnjWsz37S5nBS4qFx7rhL^VMWYdGpoaSe_*iDwaDV8OAkto{ zU#=e8f-@}tgDH+ViNXdSIarYi0#f|(4Xnu2e~WjB;QAleiIj!Psk2L$?m)Rhr{d&m zzeZ2<*7;95<_s0?l@mqPqLUVsKF1-hZS`*+l2PTaY{dp;e%iFDa>Ki%X=C%(*qjvv z7JGnZZDy$Pw}4HkPdc^;icZ6yEF^3UI& zV+H3$OxO3KtMN*N>k&~4gfpy_SBHabMMwc}EA3*9S$E4y%sOo7Yi4DBFjIb7!E$_) z{a5^Vlzk^yS41vDlq5P;*PsxK2zjm@wA7I55Dt&nA}_xHoG5nA;#!Cj!0f>v88d)m zX(JgY1E&MJ>2gnfKT_ES8+~mDDb|@OU@y^z@Tnqp?S~2z1PE5zh9fA9Ma+%eii&LB z^HpMNlwe=-2vKAIYWz*_HYO3auKab(ID4QseVH;wR58Z(@PFP4c6x#pu|={cfx+J) z-#hUQ&X44{IdsGYk-kT5MAAOPMugfTvd4(p-6u*uPw@VNOmbVjLt&Qes$J8~dv05_ zMYu5pxk>id0#>z6V@jcaS4an7g)6W@FH9Q zX|&^S`%PE9YY1XXzH?S&n%q?~F4wN&`KeI}_V+y`=BD|p;eRLdfPG*IU|<YT2TRQnj0{epj8%e0O3m^K#y zIXsQG;xEJ$)vgp+K(hi(Eglg+0RF@)>k-iO znGHCYD}4#cM7B2uuLjuzyBV+UY7ejO_7|i5O4qU$=F6Sz_1!zT*TP*3;s{+9(BAFT zdwJ)525LU4P;*5XHMh&j_$F!_e}y5lZ!qLA_9c1fuRas5(CwupLo6vyvEaC2yL|t@ z7ohKnK0EGvg_*UIIelZJ`Cv{pU#d1x@{D3nrQ=IQcp!#~HW0@7qJU4s{TPkAA?PKB6?;MluQ z5GmaOjBLZ3M-(U)Y*go@z_{)5z85%#Q2}h@Da26auZH|zLUH!CwooJ-*jR#LnH|VJ z+g?f$TErBX4iiBWRS+>Zv^LQnfo03kCCv49C%g}k2WJR7ATJuufhi%%`Qtm%Vs zngjx6Fa44r>)u3wm=7|++QsW}j4 z%k{_wU;i`oW)=X)yCnPMTJ44uXvRXE*yPZyAK(KHgg+=}6=^L8B0z}k)?;ofv3vb= zbUQ5G+$kG=38z4=qcj*4s!AV&!vouNQSYp=mo}m(Q8Rm)aQZ{whnWn9THsZV-rtZS z@*%N8y~mo0^ar58LE-PfbRl4DRb!XT%FJC=jn*MM^^w~|U*}2hW&V>WgQk-IWQ(s0 zDx6d;@`6d*aF{!Bh`UA03!*?HwQo=1uTYw5vW#hRlGasZTS;i?YOTqJU>l5RROdMU{Z1e~ZmoZx0M0J`4Jd((xw43@0t57iuLU z=W1zs(ulWZn+};M&VnanBoMa&91%3MX*`a6*>*f`j31A&T(MP~Z0bA^m1{F9hRlBf zC^XJXz)TgRi@*XLtDq;dMP941K0+!T4EnnI7g$4Hmp|CTx2L_=(CN-DXxj9j$~r75 zZDD8%&AXx~2n2BCGr=0dnKb+`;DpG!+u7neZlL?KWdr6dGC%p|>?T?XVgFe@x-;hQ+mw5-Z zyuHqEy*Fou1Y%G4PXxVL{u3=;r>KFg0?x!BuUiXPC?vRfmWj9Ihc}rvF;1yYYfvN&S?8w~4g#VW6W}(pAX*}7=&l>vt7s$@ zf{a@cB7YbFmbBR! zoReB~v*Ma|e2it2r#Zf&qt26a@^H8~T@1+B4iSl{%Baar+KeL@XBAvUJOdagiI^jD zDmQ?@j3X9TvUAdQ>#cM9cnZJ{E72w_DLyVRrQ+vKp|4{;kQG2lNFFu?r>n5)p%7kMB}39@%jE3QxM2K`EJgX7het zJ5QSm$y&Oz)_0T+i!j&K(du5+3$z_o8_lW7!R8ovJ0a9@^*5vtta5Cbd-Rb^fD5qG zO72>9BniCo5)u-kvB{vn z(4YSZL8xRX9}8BV&6$_10`}z>EECu8`lRR#)~ELXIFJC48myjtE-$X4sKQv|HsjNq zv}ov4LpUMZrR5!^#fp|H{pN%r+e8W$tese{E^K$XYE9Zc#C1$H{hp^bZKI~L+CU59m1Y?f%u2&Gqq+i zA(DN`KFm2F)5eL6OzZF?79Rw95;7H%mVtoPGF(I>xxAr7e zo$(}9E#A2eua7s1nvBIayV4q`Nf;~hB1hoPQkG4 zRM6YSf2su`hH1;F2vY8}FhSxu1rutqrAl_m-10X10pIi1Ayrsx^^`@T$7uIa?=WM& z($aSYmOgMrA^W70p#Di)uFZ}~>pM`BNKA0($@OSTXz@n;^>edZ<3JG|2GF^<0V#bw zYWNq8KrR}9dWB0{3W=#JEWswLa4-JIzf3?}=F?fwpTVX6CBT{?2A!0A$VL?YaUR%e z{)^#UO@sP0mA@3L#(w)_yHJGSu~tL1JLAOh!_y-J1cJmLj(-E!{22YsbZ#OCCT;e} zKOOvMNVk^op$T*t)$x)-oB9ZXekiJ(yS$gv;nK9B_TCfg>2L|Z6pM92n!jo&4s9j| zox6OWsAhoEVBCj%cT%mscnz8w%O!#uYR?mLqHa9}r?$bQEgE-8TTI=%6^FPu*GfOZnSy*MFAdB15XW4(Vq1pW z24_KFBsR}EFTOxd?*d!D1)@XeOe-`wcncQsOU1;ptDa1Nbs$)LZ)@$X1XPMTivxEe zcxi^;ITH&R9*77AkPulvfDMk9CLxQL*F79%O(L$Ea(oMRqako+eC)@{8kNx4i0pyf zt-7_J|Em){tKk|i%=4Oc(J#|aoaaL&lxs8w0U>F98Q3&~LV)!eJ{M#S&co>zmi8N=I+0VLSzGmFgnE^Y-&}NDRrTFAm*lsTT@A8270o=jwJv| z$R95QB7InBTEj_M`#XP`I3<+)TmoLa_@g3>KV~=6S_}Xy?tp! zFD)eLw;HUNVN}(Z6DWr8?y-hQRFofP<*juRFd1)L?b`cke%GkROdVv$!5N#ot zt*Vne>9`xzy|(7F^^LA>lmZz?^wJq&CAv;1EqsTVj5&o7!M2W~@r1F~*LcnX{LOK^-1ZGr=5 z6YoP`N$W-7@!~85sSDu<*y(6rtPOB_JbfVh13s(>nrcLGbA^wf5LcHriVICCAql7; zqZM5Y)unl^yKYrzgX@glrea<>iZT8vF_pfS$4oy^;GHlmy1m!ve-6J?6lsJzn z@W_cblMq}U@Zcx!Q06gm8uGC+h{^b<>Qo|;$$ZczU|7a()k zpHo@~oc}iS0=q@54^wk@ot=L8+Q;KFXYaR=2bMx*I^h*|1W*WLiJwqU#`j~$hr8XH zAd*oDuL^-AIzWaUx%T{e`>0fwR=8Dcmx(cpvJwWWD|qN|AU%j%%)r)Tc@jL-9r#8t zb~rG)e^$N>L&gkiCngivh0@r;a=bMXZ` zZKOP_&Yd%$J~GdFOjBfGMlFTJS$xjMk#Vvg=Lcn}duLi7E0O|>7e*tvi}A18#UwH0?NV>v5P7Z5%T-6Rx&Fr4~0WJaGm>ucsg8 zJfKbIXR3Rs8^}ZZ5cUbzsjb;JC(Ec~v~sBc{vH6I8k?GFrAE?4XkDHbEf;b>$VhXz zv5)i^y(ayK4&8f2WEf_jqbsyM*u<=tgc7Vsb-A|))wCvFVeP`;a}Qw?8s=`Y8hX}- zy?%miw=+fA;*#dHMlesFtcKR~ntw?4>gn-r~!pF%?x35HI)-~<2-#g9aDyj z|3viN*C3lU?~NTQ?+zH@0njP1HXfUXe6D7{{B=#*$mSUSfC{YgTnQ)J-dS>m!;$Uq z&qO(J1jnL9&^rq2B^bnN;GdXS2bLhj)4 zDTqI73Bpl6iEQ3SaGtMO_+*I>BmT*mw0tBNZA9^H!3G6Y>7%HBO$73g9IPZ^Ou900 zYn+hv0zlCS0K5ZJW4Hu(vWfmtVWl*vbd!x-SUU-%;daJuAxC*m>=vYivjs~muUOs-J7ylY1;qT4RiZU5{7-Bk3Nv=W*J&iG6=w``$gKj@V6?Yp0Urwbm^{up`b z$b^=AWQBFxBoh?5&Yc@sCYI;5+9utWd>pYJy(9 z+&N)bj7zALj~>f>uX#z))*J zQAFo?ks0@WgXg~ap8<*6zla}p*Nm51h#cwVR~>%pbZz}RpBu>D3~S2RDA5t2$sTAu zl+mlc9}*UGk;(F5toZBPOKRQKb?yf%(`(%|mU}Sm zkqmhY2VbN>1=Us0IFJdPb*!%1q=XT#;M$@+vC4s_OJK>NO1|BF5)x~0_c2FcwlKWg zgoOHTLYU%h9cqOIcs}1SDw>~RD)OocRAVP2DLZvf%=Z|?Dz?ymE$!s=6c|kbYnrzI zFvc9X>`hl66}>JJ7Mi-2m1-{uf<>@mc{bU%!~mtI=Q}Q<=jpM)BXoNr-L{)=Jf*+p zAE$83A(nNW`x!YFpTpUeAyz{OLs?L19NBcXHCJem-0f7?tsddv=nq9hQ07|F5D6?V ztdDHCNha$cXKRiN$5-Cun>-DtRK=f!+^+cWZCMp2Orx42lc2w8&A_l`xw=>$1eO;c zc7>KgoPt#u4p;boAyYarssyi43s^+Vs})#c(yB#tn(E>${%M+CS8IAbY$s>gs*uA! z8ly8$wYp``n=#HLC$HXP1M%3-k~{~Dge!c3P)QxFQ58#qN4vVfv%c@i941fFofiU9 zjv~aP@g)GdU?fv3K|GcV(tBeINBYJ-yeuVlTfVx6Z5whY02PUPWx9BD$T%lH{sM?g z7(8~bMG?R(dArJ?PD)uxc$;Rm|KQWOjYv+9Ca}#nmja9o|EOkzFw%OxS1M{( z4_>f`2ppIG_!U6qw6W%ABN!wGGV7*2A8Q?C=dKC!gTJp6wZ^h8)__9G|JzWYSvc7z?sq zK{0D;kx5SlMH=C2BosT1^sIpGQZ84@l_l|EUX}J+D2qN93(N|W)p{#6SEh^OqPiJ^P=7pa=n=OLHoq*RMia4di~Bdo5^i89DFTaZ24kXZ zn`Cz3`suDonxeC*8``aI`nT-)D-2Rv?TLRS4;y0LyJcN7h=n(W%ZxQ>1yxq3E8H!sYZ?5-5e8R#=$ky@}y8}1|r%(y4(p7 zB7A&#o@Sx9gl_~ENL&OYPsvMHNY1o+5c*VOdGlSNpUOBk%9v0q{DBJ12IT!8ELG#C zRWdZcbH4z}?fYOb#vMKQbl3R_Fx6!DM@6scDR3PHS}v46Ou>(9i5!=gdevWVBh{2l zM#R0mC7ZX>olLe7AaQxazlNK(I`?1~`d&)SD|sLbDaBQ4Prc558-DM+M9)4r(M({A zY!Qscz$QiAbE%%MqCfA^wv(KUMWXi9hagjvx}kNiekzm8?WO}_QR%`9GEJlxLZIYSUMwHkvT#Jk|T3FspiB@T&7#WyvfN{!otG)>ZbRwRF&J z-;bc=!12WbdLQ4+yV%9P!4L|!j`OUj9KaqXC+KXRNRi31xOS?++#cMNx|TYLxZ=Vs zYv)YW(bMlApFqDgt+3HVGhNoU_!=XB0&Utv^a?5LUc%e|2>tEh4$kN)lSi3g)e6ui z*A<>FyYK|P3bE|ippo1ax{tmHntt(WGm{p$Q?4JsM9=QOvh`~88Jad*{oaxd$Qi0P zsR3PKp|?-TT5^TO)xvil6P$$MzdAS3*+-A>55s@lQ{Zk2SQ4>1M{?xKKLQ&G*u2Cv z5*|o)z^zLV_HND-YUWV>{)_`&PjCea8?}ADXCZ26-Xc$t;PfPgRaC1cOHhtG*Vah5?Eg1ve5pCJ#@j&B2?7 z^zEs>=Mx{6{OZULXDtOb$61~w-Whg!NOfZdWY45*F_3IT7*}2O8&30d4fnAbZ*#nk zYNQFQh+dYhY95sb!b8N&14k1NrsPI1yG#AEvsq(^IOzGB*xZs3_^te;72c#SpO>I8 zJCB1PHv{xw!(D0*uI++kySO*WCr!dqb@k{sh3ny6cs1_`uqAW8&7}79-60%?p;9GT zFa{tBLFTR7ZDQk9-==wMpKu1-)Q-7Ol61l(tIhf<2E)2dt>xM#2ba(zt7=6b!tpb6 zGVrRQQdhgMn>*A`akre2Bm}FPGAB`4`!GstLPU=u<&)TUV)L_EbY3-Z zHVJK~U`r!9g{V2F<% z(S&;X8wqN%ijplKN|*G0Em0Y-;2W=MoCWlnRCPY$0f1O!Kd%5@kt(43qRF;Pi!_k7c8z2wb%hpx&B2~TkK%)kUfVO+8oAbkU1*-h2kYb3#-|TmUpm;A z&Q1(=6D9GF0x;&>^IFWTD0T~uLb421y?zw9tA~a1&$lxoZ^NqHHy;kqUJ8;wSm5hb z*U&_~_dBnN_xLYd*yG=cPwM!r4GgZ{AO{RCDpSDKv^SuYW#ieEgdh3? z?69G6FkO6J@f-)7(%gfN5?4qPFvwZU6%v{*b-BWS;EHw0Fsu^nJC-Q-1sd$%`h2gZ znNj_Ic{DnbCWH0a-kIvgKeIU8%PXDKZD<_-2Y11W=9z8}Jf&lZ*Up)(Umd^m#@`zJ~k z)>DP3jUQ3JUrwxN-L{0nfKF7V(t?aSha@w)e~hSdq}m-5*DwM#3`7(Fdcw@M1E?K2v6`fuRQ z*;ZBt7aUIR;>y+=N2)?w2%M=to3JAWrSbEIW2HILc~!@LLd0p_gjhx=U=A+=`fciO z8RVWZGPnu32K?%>wLpG{`qSC3%Nm$&L5_c?uLEu-1WvO6vw$Q{bKU3!{9YOoXYdvz zotc;R6j(-q9whhsw215mY2r735f%O*zcX0h$pLMl$F%ihVc~kXS`SsRfeipBcc}W= zi0VAc^@bGsU~df5`Bx=rctXN(uC!(#T2>O#LNvkNrasua^v`kZ<%ms2WL^t>UCysT z-(PXn3w`fBU!(6mT?Ty@%6naXG6p}s3OMSgM~t^ z!%J0W%{EyCz3LwyeG=;|%M*t(SLiJkgTZcb^w6SfS7@_5j61g#+RT?uE2z$_JS~2- z`?Zvs>}_Zn0@LjZ%X!`^%Zci8rY5ztfHBmQ>~Y@lG8p7f{_k50a%?*CCK#&e$g`)* zIaUNXXU$6NPAi?DU|@-zI~t^IedrX2?`Aox>C|1O5-tCc&#_}f{&QvG^B>CRdVTf` zZ$h5EP#;^3o*a3-7KKZYw@!c|nEN<`u#cNN)VCjEhILAcIvLxvk#@g*&_A&SyE@Ap zXuYcav?NBioxaYaBfU?mJIJTb!^CNJhbr#rY<)VN)f<{=qSB2#P=@vkDzo$87Zk$2yUq`AdDj6t*pp*#nyj-7^uAZl9Te&2*}&oES@{H0MyR|hJl8?jPH58B3OUwt~N&*a}g7mk>G4-bm&C3XGv}OHe~Xvqc6H zfB6NK_l8}^U2)hMEs*aDEsKSP_o3N9u_O1bBkY%3&`^ODCD#~aY3>&P6tayow-lUA_+qxYI5`>v(YFW2No1R3>NUL zBrW28rxgprcNnXqp+&-&V-2!Hoh${4*fe0D-YMKOrm^sCTc29>j;kC$uU&%4yZK1l zlUxMLC;{)ZBdjmkbOk3S+*w>@(G8m%PXa;vk&s3Ts57f1DWem38SD)GK@G485|u zaSq-1`LF0kJ67q%WzJiVt0Wp+v@AoE%r8XoRmNDIh!D~!>#T3TcT|uBf z>((rkIit}ZlLjSW2Q@_Opfa@`)G@*OjL5`HG|2BJIbWIi5z{6#)#+HfU6^p3DG-fg zFR)>0AYMB+2k&-PFcInO7!ke+?45hfJRQnT)UPt%|9yS4zixdOeU1Lr-0i&2kzCX*Aj}**Gy8d5$#pI{HSA{Z^WW{oqMBGvenRsBt^$&;ZZiLkJH~^E8c8X)f)q* z;!aoSW_rd<_IBsi1{7NHJpKf1ZiUrOim_zg#(We{nVARAA0i z#NLMwm(z<^VG)45Z!^1ecpLQw^^nlcg@O+XFYhQJx{A=1S!;F3!Fue{iW_)v>$$1* zrXjD&3$XiW20vb{O=v!PgUTNi&cF2{LV>8%F`n8ngn?;Vh;M?e()OwrzieKM`+WOn z`F7S~8pf3D#J=WiuUWI!g4{9sd9hft-Jz}7Jhc|19)SEA-`mKoWZ$i4WlM-1cfI<_ zAOUwhP!9h}&R#}mGyZ0x$!cyyw&9x>BZ{~6&PM5+ZryVQnt3HDwDwSfoQsWaEh<;% zQDJ;;r)8`2mn6;Y@w&0i#euc1&=3C?=X7&KXAn)AQ)XF&83Zr{fLG}`y`7|?)|~pI zWBYCT`k4AF+*Pc#D;odU5kv}bPCZ8D{T`SDuq7bB%^y(C)4X?w(|OfU0lOcF=W zu*+ph1$t6-pX{eF;`D4W_UaX6k@EIa+iXkIlz8-6j!*^puX%4M0h5NPMDW7z-sa zkSK2FZJ#K{^0v5&t@`^MF#794mak7NUrm`7It#ZJz8wjyjm%ksjseVt_F-;Y>v=R1 zzK(%DRl@pkg~fk}fH78CKIXXa4wfduGyOwndew<*;FfR|TGD!KWr|lh%`JlIsd-je zL2~&@ho7CjmGih)?O!eWvZY(xj}qd^73u=fk=X0CYt7AqmGu1!l^Oajb54xif(~K5 z*Sc)1>b#DFycU}v`$fc5r*m!Ax>wePXVK$Y_a7{+&aNCNn8MD{qqHMJ+LaU$W_=Y2 zucZaGq8ui5fEZ~kSC4RAUA5BTKM{FCoo7WXu-XoRMjpdwP<&c*)<<>5S)&+QkO9Nz zRo|gUbvpaFg|E7(b>y$CT^h{Lmz)B#>%va1YiqX4SdD^CeOoGZFBK;1Kk|64A#i%| znjw}jo=h>u@{R(kxG=?lg`iHoH1$76xg9WCJMHU2U^{uDia zu8%%`(U8jcCD3B;@zbNau!A-&9fgsEB^0s8FOTJ*DdX?vai8%^rS8qSlgB$<;WNQ_ zP*9V2Yng2G+9~KTGJD0B7*VW9jjfSOQM|(IKXR`=e}z6oeGt4o$KeY7gRAPQM;!r= zM!z_^Zc9eJoBssDPR#=|*>nY&%L*(haI6RdFXJV6*_tUxI^Mn!0ta>?L_AiGdpgj@ zgpAf9GHtieqD35$_{>cPsj#CE!ppoxwJ}=K?2SW_Lar6w#%FIl*LwCY(HG2K5f@3b zCxvZbO4&H}N<->jlh7a6Q`I=6iUY7M_Nq5~9xb&WZRXKY=k-ldqn3@7vE0XE@6_vF zBqdBXQ5(4cE=Cz6FwgexAs@(QM|JGdb<17LQr5O3HpV#5YBv-kIyI$kP#NO!Lqy{l z^Dzs=cTHT`oJaS)>O#~bq#NV9Zdn0;4Y2e|K9Ac{7$5^$OFhEat(Lab-Z^4Alx4Mt5_{P=p{8qdvGl!aG?u=ymr3CKY+|91 z&fL-)WkpTHwGcYB<`8E_$iXR{yZI%*;utzSXMM|g0u+n@wXcpD)f$;+ueuQ>h;iYG z&uT8u^{h&eA3dNPE*kZx_GC&CnamZDIYNze&wqb#cdSJdh^e_&3IS_D_UME(0@2Dv zRNoqoRn2=Yhnc}&&Dz}P=w=cK3jrI<#@=KE8eX;iT2dL#S+7AMv5}JJB9qp=>i1|E z>a+`x6_qEt%O~jz<{*m;`iG{e!i)ZyZR&`Xuw>IkccGdDYPBJ8HWN(sj)^PAuZ^-@ab0ZDA?)zS1_tcT= zWw*m@OtT_ZR6;2S8&QNWEq|fWQ7|3#p!+AoMSO;}U=D4&WncuNdGAE7$HD@_C5`|Zk4pz`1uf47kN zW*$*R3re8mDy}wFTxlwtVps9nCsM^n)(~tZKurIHJ{|c@pIU~SS{{ME(vg97Em3Nz zIU`2QFUD3LH;?m|Qz>N2e`%jer}nAzrElrc352P16?cL>MW#}5PU@L$SLhQVgx$6O zS2KReN69mOuH4x(?g~9X{l3XqEQ`S;;vi<@*C=45N5A_R8h9)385irr6%wcKerE4S zqOg(0QER~T?j^~yw~ITe?J8gk~IUHM_{t)uGKDGSB)M5|GZ`acOQDR6^5mV+0O*wJ^e;KR?ARTJG-D((} zNx@6xPoVFDe3+7YO6~3rG0oa2`$e(oe3)kGeCu>zXx7tZ_7dp3uBMolb+<)F@gg+< zO1r*4*!5jth9OHJF^rG^IMDu8G&8m^-`atPA8u)0Yp`m4W+d$AV26K-P`qQW-WjVd zI&ze2L{HO2KQdlqDehFGlX|sNooM&!(SPsOHWKZ`6xj8YFl7F+6(!_EChmm$oj8to z)pz5yt&(N1Q@wey9;5JP+->DfCVV=zK|9#^EZp#G_KSC()nFX*-ZKt)nDM*9;w1W2 zgEkvQteuG4fo@SDiSpuLD*IWG3#%+anOuZ$sF|!yXIp%{l57{ZqZWg5pVlBY6t2*8 z`| zCjEr@0xnl*565{DF4cdv1&=r3iqZ1u5(lIXlemBOP(^pX`A5u)LYPt`mo)*ZbJ*y4%r93-cVu#6W&C$iDNO6K^Nv6E6XxdMu5GnJrQFZI= zdq(Eq&WKLU)^R!xke_#%=na%O*|qgJ*=fG*Ck!%J)#lKWG5^45Ra>U- zj3-ma;rR6UH`%T`#P_bfFxKOH*P;E-aKHASD*Bq4u?wj{Si=Wc_~o|i9Sqm|#)Y%D z_pd!4B?POvK!U3)V&y)^6AQ&a2Z0Q}}0Ib#tf!ql@u*VERTZ)E6G@Br^XhMq$eQu--fx;_upXOe{HQ!>Fz5uP6~!gHjoQBQ{!o_8qsM*`Un5uX2E2t45( zcPhs;WapwG|4}cnV6Q!xk8=l&AFv>uG-OP{-zjvNRh517V$e-IerHywPh>M(a0Mqv zUY;F~KX}xdw%9e%bafRj+?OHo7M5Hr?ej6|biJdIhVE4*KC7+rQWBX!xod(h2um!MmRpj(G3-~~V--K(J6ReW{x z|LgdMW-=MyAUxn(hryHT4T5hS{o-3!625iy#kcQXBlvb8jzLAbo&(AF)|G^B<8)~i zFMW(It^SYjtxfQ)Jqh2sG`@AI*W2_;j^mrmxGQv{$iX~BvP6}9ONn*aq`qFU#Qb%I zE}>NNjMs6PNzAx2aKNTZ!LBUg>Qgp}u*{>?IAOW*j-;6`)7@dFHDOr-Ir?9uD`!(( zFSLgQ>-aEDNrdGcvKp9)Zh}8~F)`8N;UHm(W_1M}Dc0nSpf}Ai0q04g5@_1eZsyvP z3E{u>lvIRwcU&z{gvcKNYpCpUUD<)wu~rpMahkx)#& z%Fs?<$WptWPD~0qVO=hH#!j^^Gp=j^QS4aX^^#&Cr7|_%wL8=-30>qPUGT0x!AdqU4B_VXX7YT0HOQI_oOg$v{%By5a z?9)h2J)?C!`;wPLd(x6PQy+l}* zT2G_RTbm%`AxMqbpd8$k<_iBw+VT{MG^p#TcIn9xfgj%Fy-0)!E;3j>beDLj`R|5z zAM(8RPTRbCFLKa&9)3>@5HoF|tD{Q`T``SApO9}wY760inwC8ule8Drk9J8dXdOca8u?8*tUaQZH;Xvy>-IQBn;SOYk_doz z9GjguMqyO2UWCV_VDYRMeXlBhTx7PYS~YgMiLw}gv|%zC6&G;@zd z0xKHbE2VU3D=_aPf`3zz2??)UPf%$8aah(k{5VF{X%YPS?-@w^>hDI9ym9#R%v%v) z){E%p6Y%F@g!H*24VswqBC(1BAa%#fqHj#DR=9 zJd5B+7%CIZw8U;H@WvM8tLAwum2Fnn5YJfG3;Tz@A{EC_u5+YjP7+d+~N?E((18y z!2ulArj9jIbFAY8-iJ!RMg`*BujWw!M~ayEFrMmBMFNfDbFWQraLG2 z3Q6(CT7;%3FOb+XKeieKr zGdI(IUb9t%XQSm$;zN;wjg~)&Z*y{Udfr0rMvGK4@wOzlq~|TmZnRdtmFLl?n)e+g zD2N!xCpA0dGFV0A%SoSz%W-|f`>rAF#9{QO26vZ&cXZJ&cl;jQlp|$wtWCOakaPWpZr06e4DFG34By&ztn@9oqojI& z2~v5n&4?__BL>rsG=3>JnCke58_Qi1>^eR$wB~*2?WH_+I7(WF1-niNxRM@KQ<9#5 zt@=}b&4V2K0l!jLBV|hLNBqj8xb5DxGmWmLBp$DX0Bhnh;BZJC9;@UoN!WWiF?Cly ztYhjf=f_TxdX9+~LX?oe8MCdsi;x|i%yMb`gD8~)F3{52CQ$>NYOF(_z~^kta8!QV zSA7*)#9jPRD^-_cHWl8_KLHK@n~mB2tM|)3_G|0?wYS9_u!c*S&1>!hWI3aMVSuRSLGJ$Xe{q!U)gy|?h-7&meZCqcK3D_@W0uw;a> z<5N?RVw52h^ASOV<0pCJA7BM`S!3^IMr_U47xY9__*ko}#mhNZmPcKW^Gf#Q*a8&)YPNpo3R^tw zsn4$M^6z2}pv{hiqVJI+bF-paMeh5P?Bke#aL)Y)N))vH!o_MY?YFF^nQH22XjD`b z*y^=?5OZA(rUGA68F1AK+Lw%p}EE@=S;j5go)ahQcax!}lIvSO!HxVp*_;#&o zkA_8K?NwV=(dWAf@@fEMHInn^1Czd6gk8ON*u*RoYYgD%gWU;`oM^c+afAe}19?z4 zH_zH|6%ADXgH3CTHlT2*%YSVwJfeJy{ohVCjtA8nMC(rTSMn41rkP6QFKW?Z_Gqoj zC&N5wNbLEoE&`6|f)V`!i+~aFxo=X}@Btlo?rl@rz0a=N?+m@|3J;Pa?M}628MTVD z{st~69S+cJaKr7=2PVoDZlU{@PE~4S#`iJJh~36^zYR4Dl71XDcB)IyKrZjJ1NrP! z1>D**zUB=|=@oB(FZ;KRSrKZmi``E#U-uUer9`8mAy@bBAkewin+q$KdEaiPEt^h7 zqhgd6b+5%PB8U5dDIl7B!H>N6`kJv8P}BIFCwt|EdLVBNdphiwwm2YviMa=+OE3D2 z#RA7mg~6)rnbvk!se3J1V2JoKAuZ|-!7O>z4dac)#ZIqpyjXi+m8WsrtC~=*5U-@r z4(6hl!{*n8s|%^N!Lp05Rhw5m9cvjPhor<(b1{9aR;T}tgC%(>et&$soVqz^|d&u30cOu$(BW15chS}oUi)0-n|{Gm*& zIPQLeI^~EO=k(P0-rl}7_N?{i_|~4%7p2&oYJ1v8Q9FV61aThdDf0`;wEP=63Cj_N zM)!&FB}}8PU`maT6g`VA%vTF)Pj`5=B^^B^Bq-?@Ie!onVKN0(-fBq~i+RIjlcsV~ zV2D?}Hc01n7w0iqk5#nhTW+A&Qp#7R)t2u_FLVc5=5Q(J&ziQqth1i;Ai`r}?IE~} zc-FIJRaHk|$NVf>V|&3wW%;(iBN&&{q8M=zv?U_`L%)L5$|1`YItdQN*vlH*J<1~q zB7d{kwV6G$QQP?OoPAEnfWC4!$&U)WC6c0*S_D1LCz7J=a#Gl?uH}Ul*ltxdiA-=S zWxvdv`}m`nbMH{O!sinSMntPrE>+)>PQ0hC6#rPs=5>?489<76Zf5HnGLW)*98@Wo z?VH>wF$aH6@B$fqEP(iE1?IgnKDFT7KSI`47-P@)!|4OaULr!@CM{lQQj7P=SY#mK zi)4m8^?i=|TFU*e`+$7aE(EZiy<>LThVOQyzN)=i3cFI|a@CM9=xe$jO_PYI7}K&r zNn={9Z|pGz_05-#$s&mb-2&Qrri%60{DW-E&9oXwjZo0|_-;w5j}eti1K>N$UKYwE z8&UlA3|W)EXzZSRjG>S3eE0zQ^5S2`q_c$12KSNf7l$br_>I(MT;x#U>ggEHSr?(BKV zoz49kopo1Z5DR#H`(&MxVfZpRP`Osiz2 z+^ntTIjJ|gmrFJ3;gMn}_=q-uT~g;+8Vf9s8^AuM{`eupirqA@-d7+S6m7~OuGXt= zqRl$w2cB9yq3ntmYYVR9>)eZM^Q|5FE9H|~0`+*}ltnQ353F>B!$SG1$dX+|CU~&8 zxXV9iwq*KEGtP9ydfg|o)5dxK>&guW<4iE!{qWmx+B)8FWSN+mMK;I=Xc2HWSu^Si zO~hKtaN3QUvz9TabKZcA7@kMmLq56@N)pYJ?_oXUS7lJbS|gW{HDcRZyvD(`EA%No z^(HS8^rd%V?%n1&i{6|*#!otu%IJJZb4Ny&3BM)Q(KkqarM4l~LU`62zthJsXN_$1 z68}y*^OXi!68}yQ;By}X(BHHkH#-`YO4JAPOxH&gyzmEdwlz>I&9iy&*W{Tt+tcd> z=l0={8R3l9$(z#g20TK^SIC1V^(pU#Iu4h_2SW+b2{nUh$lHeEwV-`#qxstOp&A#DdBe5 zLEr659!~LfJrs{R!#ozgU93^S<$jmBGEDv&L9?}g1dF^kN05lkS!*rGi>#3@sOKj! zW^IV5g(##xy~5YDk|>4khwRO8Ez#WKPD=9qdKKgwO4o+Zr3Uo&C-(lPPCutFjb;a2 zCl%Zr@oc8(k=0io=ga%YBPr4Q+Xc(BBP{t1Qm!G~>joWU;{Dy2GXC1Ag! zgkv@A@7c6%ZH{_YznB5HF!~+c1 zCjuDQbYm|c(Wm&x206Ezv%NH`2AxO)8)R*o24>GxuN^OK%4&$WxsMi%4??Z>OsUgt z)rR-;+%ols-_h4ndn7C-u*Sf*A8&<-wzpTOyuw1$3qkzF_h@L%=W9ZUYX`N*7QYI; z_N=N6%hQR`v{82OzpluGKAw#E+?*rFyi$B)BgdY4c{O%P17 zJ53LJk^J!R&wxvOXWCL?cBbCZ*|mKIDw1GZ0a7Zmolfy|Nd*0r6-PNNVBQ=GD+B(Ar_R|-rxi4&JAR0unBK7PtN z8h8eWzHS6&h|QG$WF2fN)F`7P{QZ=%zK4vU*OH7lSlXPArbDb`JgBC2)w$bh-TUg? zA4qS1@#w#wntd2=O22!=~$a1xlQ9sh+4 zJDio=&6ZU50p=}7o;Ins-g_ffT;K}H`ob1LMgFZHPsA`#K=!IEI|GqCIZGmAv>}qy zZ_kc|h*#ls7msEkMz_{DX1V4}6l z1nb8vaI2`}MjLa$R|pAthV=EQuU+9XVQ9g;S0U=AE<1GCi<{UimM^q$nVep!aR}{ zk-QTPg&SAoAlXecb8ftucg5S_YcwMtsAq@Kj4}0Yy%`=MaCc`zCftbY!G_L_=A!=M z2EVVLb{70M?ObNs5kqzv$i;FSAKf>(k%wzGGrB-VrGxyqs;Ll=mKI2i^fK`1DOo~C zj#cy@Uwf>7$<$-5$0AgkdrofSeRzr+d3c`bgG}8tTjL~hj=Fx^F%y@VH?3}J-^3tF z^NY)fb9$6cU(#=7N8*8=piI;0wRWddk~`huGM&Cl+7w#QyVI}d^#`2(I$bOkEXXlR zWZUfZh}09JBqTw_`|ZSHv`Aqm(H9B3IHX|+qI%~H@cTamQ@$++arpmH63sM29OR zEGMg*-uT9vbs-5}ZqE^$3kacl;jI2ZQ#mMUDbA6lC?BinP!L53>OS=oxs2mXfE#)E zMFY^IG03}?Sc;0W&8sT#4xrKD245rdRnoOLVSPo>rWW)#o%Z00FEy8g0{Urv~ZmZ$lT>r*UPFB@iuNYzJDQf$D;#Hkr>w$tK3n=AAIP!jt{+sM>^ zN^$$bEZ?aRGhg!<1T&9(XbWbdW!yY3UeRIhkY$UJ)47B+n@m(#aupL;_(u!Sxv0T7d4j60VV2pkA za!jBRzEOy{M?$2bw#y+^2U=s=rr}+=1XY!sY_h4l9yDjXu@nzt^3}(xRZH>aWLp6& zA2W0B8BdPMyudJOdHFhUX+_G~8xSzGy5zw;^Wb_OU=`z%eCQI)ayB9i@p*MCuR0Fh z35-D0vzJ}D&fQ+?ey7g;ajpAr5IvD%>|B+o*YIp$aDWn_NZa)X)AB31_ftcp%L>EYV*c7tsq1OAEs2 z#yu*fHaRVsdgZunu0%GcThPM2a4b+BSEgnLt}wb(w~fR?T1l4cmlUw`I@{V7Y&YWVkC(9(N1sSLG{Q&F*mIx zKt{x~8hIc|v_m^YiGwtHW!#g^6{_Wt%DEB|${y=>vPXpRVq5E4LbRLpr2KL>QSXw5 z;@$qN%H;e3)7}MphYAt0Xl45~2buUE;E)m>J5XeL*j59aUHP1>r z;99UDTjfp{q4;_cimzAc^15n$F(3&22r)2|+1p-SuWW6vKK^JCPLks|AoX{zwuGI*!c;R;JI;9l`b%xPC(0eU6_!dot2sKdda|JG$T(a?n5SiJMXAaY;#c0pLeAF*8Bt6gDlw+Jx7`~^<+`~{%;Ai;ccuT`k)&(oM6)B#XocIF_j zVujgx4v0M>%Zwo3b`r$LG^uhgH$R)@M}1p*Akl3^Yo-%*WKT^}5EaX7Q4nnw1<~3A9)(UG5 znxxeR>ya4tNiFADKE|`!Ox?&CRINVR^fJq7t*%z?UDRyNS$p*9az7SCvYs0AEVoRz zQVE8s!(V$X5IRS3io6j%Sfgj3miiF0Ha*_1d%RtJ{A*oNacAHKV%orx1Wh`pbo@f*tRe*? zxgGJkZ<0=l0_;A1v88@N?zKfT8~Xz5>Y~V;Cg|`Fkh#Zxq__C%QCv$b%vF#TD-g1( zYKuGlR~Y~C3U%?3{e5zHKmGm5`+fR5p{Kug%m{mVI?s>|4s&p`S|i^;V3_d7*f0q+ zwsf8nwvux!orQDUP>DTL!W)S_a}xOL>l=Os@}?0xSk=LC;Q%a*r)``Q3tdn9xXBW) zrf={W3d!Dg)W|a(uF!HJfI8We34Rmrz|kVlz%bahKEeUPEsh5C^_TFc+7%imk0iC) zW{D>5UM;gx7z-Zm@(&CiZpWB3mz~N4)R{a(XKr(^ri0dwM)!6;CB)sp$%Sl0t6`zf zXd=Q0;ejm4&lP%}x52J1|5?GV_P{{4`bnQbgHoH$@T@L@2K5vTywxHmL0ScP7r^8i zIdboSV$xo%yg>ISWkmOfyb6p)^XH#tRjrEZb>Xd$Z5sPT%#mUN;xmZKS{?hTurb;w zDR9OS1q*r#9{5BTG;u@hNp>>HI%1_vSXO`W4uV>3mJu~U4RfB2#agy$8w)WHDc1dx z;COM)i@1}jtUxGinh++TN-?9cD3GU`EhHH059oPNr;Bx{6M3O+ik!x#XvY{M_l*1b z!QW~pxM15@E%78f7^L)s%H#loyG)7A8P(s)JW>^=edS6gMekOUvX!KsRc*oBM>;sr zOwNH%+G@=%ip=W3%i%ID=4i@Q4oTS9LAXIK4E@YVf+d(l(S6CAp5lc23%U}r=ne%n}t1W}?{S(I$^R+&9i(T=1 zq9gdK(dt9ZWWG)s?ZI*^;zDZ}Lv>Xid+O6Nn(}-OwZ-mi|4j$o1q1vueT5=R5JAg! zyeQOvwqbP3fvcO4jXTtL4?m~xvbny7Yq5Fw$FrC!*`2dLs^=ql)x;~^KsN9VItM_9 z-1%0fH4R(8(b_Ayy=I3lG|bjk|J$20sZ_bvwxH>7Q?8mDWaET8Y!0r`!MS zSfD_ia3-r(pUf`toztu1If+P%6|0( zuVMi(9_z(eU_4gPvA|dcC&9n-bjD3NsFO+-(LE<$?d91frm9!(U_&70M}ZuUo`4jR zFdm_OY+;UicdMuhT;Y4Sm^NU~0qJt6LX&9}UDChkW?-REj2oAHo4m2+uaE_E(wHBi%Y%q@KniSqzi#HI4> z_(!66F>#PbbsOAy@)?-{Quf3T?z&tJ#&rOF;kPh`(Z?}F)JqhZf*W127 z_UB2qTx>@sxOKgG(bOb9}Bi+TP0&>!uwSa*OjcAvP3|?s-CIi@H@vTp{yhqj-W(=`gTx^sxUcqg$m>|l2x`0LYU+VoyIMq z7Fo})v-4V2%E-uys}PXYfDSsI-G6@+^w66QYhk`uol1v_3;e_BE1D8(VFCW2`VlkY z&Ky@hiDVUm7IH%9)@)n1s=J9n;M`W#7Wj$wm_lGP=q%km-LdcU!OaQ&C&@c-IvJf5b2I{YYH!o0cX*V_uPBwbiS#iZp|!fz$Zud>K#z^8Nw zBWMt^p=DIXY#g$}-w_0Su@+1h5oGu(;pkQ5yX#lBFpY1vE()Vbz7457 zaJ)5GOw>mm+(rB*XAKDjV)qDN0*A+YLYC>j(y5u#;o$jIoljnbj3z_NpEoSvi38h` zho!NipVL?qe|nO^g~w7rcz^lwlIJdR+-z+q;rixaY>+GbXTIWeGTi!z;cwYT3W~+P75peV_L8)V?5*56j5v7JEG`+nvyV?+*_|9X1;Zp zl~Ozar?-Z*;Kno_-1brMaJPSKUCPA+0%rvef8js7ZbHh%6H@{w2M-_ikF1+8;Npn` z2(1awU3C*uFP@m{PajbqY{F$v%uD@K>HG<aUN~QC}fD3-%3ul z280pVFQ$jdNMi9Y8bL5xF2LlAA)r0 zz;v&AXp#n<{~oeac<=bJtOqM?euAb1<$U}3vg zSTv%Meh+;M=V#_2;$Bs z7~74t@F}OuW9IVrzl9yVnCT^MgKh-_t3hAVgoszGq;hSu@dLhQZ4>B^4G~65Ok7;y z!-7|3Y`CBV_@4t}=((Hg8R?LuAUUx0rTSFZAr?3qQzpJR64s1h7GF5Tio07)a7iqu z0ay#d-Av2(dMnAs4HCWeEpm;qz7EKF;Q$^>(V5EjQ)&Tj)tzruI!0^_HVl|v=V{lR z8N6Bb$0^}G_@-!S6E=r97EYfbUZ$wLFx1C}|Mbz~Nm|6Z6$Y)NV1xrlw2s;8vqwb| zfSf~>Y}65aCeoQoXJtlB!&3G?b@|87iK))XmPbXLk;!T6en=;7j!bseT<2t`5nWHc z<>{!I3~4HX5LIq(L~dp*OI@Mg$V?M&u2@@_&QA*;w2E|U{^D0ZA zzi##ZNZ!ckJzv6x>l_w`Rm{&4l>{gfEZ&J4>?zU5Hl&<-?wcdB=z)(@s@2Nrb^2LWQiV zwn*7{Lcu^m7-sk{LP@~zS%hwcW=+nwCK~zFH}$0MV?V1O;6*V>f||;d*<(|pcPbR6 z;h6Vj3OKAyu1SrkW;6kd-C9slFXpl}?s7XN zH*^kYIgQb2bZs_h`SjWzv@8@@|31T@<(aHkaPkzXORvm)b?JD6nTo8nlk-bjj)xzi zI^=`{qqDO?1bhOVqD8875YvHJ4#sCh{H5Go(<>@wNWzB7z2eBa5LTR4Lh?F@5Dd*TlXhO@ zmNay}vH6)a%DnM?dhXvr@ob?G+qW`p5|uF5j+KX9xN4lJXAL}v++Cvgn?P6KRI1F7 zV~-exy?)W_By9J8qcWv+WN=!3N$VT>Ed!Oe&zrYefhMU9pXA<{&apjW^VEkBvf5d_T_}Oq|Pl0z@ucTye%kDQQLrGbkrer21Z_8=@#*uZ(4l1^I_XO)d!Yq2B zE(gmdv}H~gogGp+pu)?saN9gR61kN;j_bL#Fu}~I~TvX>wZ`5i8jR!l| zLQou%@>n!7kq57(jlw;mO%_R~SRFKt*=hTobm4Y_u|fLUE?#~5G=T{uR#OPCd9;Hl zy5oL^JFaGb)^_Tk>V{mY@$Ez<+Gt(;SE8agrn)QPf31tGvJ%{d z5=)nPs+)rT(U^o=5@q8Att!*q!!=3(q`tV66{^eXL?Lelp0RX}Ikovayl9VT2P)x^ zUuB#+A4=I|S{rJ&_UrZ1+GO2MAg%E2Rw76Q_jezhkefo9(H-jD0%|FnY>wHc)QP^8 ztRvs9)L*9fd}+VL8;AmeLGoen#~4`*<->nEx02P6H?8?!<1=e|HtRV$@@Gk1OYPmY zSnF-QyH;vx2QshPqldI~Rl5uld#n!>ZBItRs16;(`B+eeW3SL1k-D*9G@5+~qe zVp=QS5qQ$lvqzUZZ`6~iBcU^y;fpvmNT3DD!y~vWPee*19LhAkxtcc(oF8XYd1UwRTUM)hJeLABfdj zm(>~BAgXUn+DNn(l}nZK{tIG9oaGY}0N+&~a!%~xk9JSv2t7i+ZzoVkpCgHGMU$84 ztZo6}gOdeVTC=W=h+H~9I*CFIaHBAU?ZohA#F4;i<0m2j-<;0Izt|dKmF5xVsKv!e z`W}w+TB#k;YK~&PFkPV&S$me&S=gqaH(MKxb5DaBcyL#vwyu{@qnI5S!+P1NN+QNW zU%SgpS17dC#^H zg&jJ#^RJO*?|?-{A*xM1wRUC19-|4x&dCwnI3V(%C|+7?jBd`1p>U(6<8GVyo)^kc zwo`}{PBN6eTuM|=J(PXi;HD%)5$A-c4hh~;K-Vk{^wt4ZlbutmB)_;6Gt5<#jx1YG z;l^-1e;E@RSvhZSokx@x?dr=TNAV}O&L1;t)tJDlhR-onqK;cSVMCfk?ci} z7dw73_Cc0sHDt)WN(j_z3_Ob@8NvF@=!{I)u!-$tFZxJ_Hd){M$Zm!UuBCp8<~4Pb z%)5In3Nz`LYZ$!x>fn}4p0>>Aff<3UFPJd;CbG(~`0`^VUtEeotQnMpJ{iXanOzh9 zzziybH$3WhPf*;O5;9hrfIwsmTCI=nqp1E1A||>0NoA}wt+AG7QuvZ5Q=KYp$d%OF{Z{o7|n)d ze2F}(BHFLDPCF3RYKPIf@Y&Q?8@_#8+8SOWO!H^)5VDP?u;zsEDZS&QX!40<#gN9)y8K>s*TT%)EJ)~S>E>S*iKb4 zAC|5vqKzL=X9yI(1r)o1qLmID=jXJZflR{yAhyt{hBpJJ5xh(1#M7E?F5<8{f!Ubc*#BYXao##+X5yJ)&(xmcH#y05 z8|rS11s)$_DT{4H7y{$Rw2$ zS)K6l;Y6k7!+BzL+hd$k0%~%Q%EE-mHdpzka3G~vSa#2rT01Xq#!5KP>O#|Mvn^E} z(^Ux_LxLnG=NN=`frZFbv&D(!asoN$I~-7z@O~b*h@v4FBTK<+`hxu~Bo|!+0{2*@ zV{_9*vMEvpF@Bdb|Gh$Is@gjn>t)r1mdh(1k9t9Cq1XOYN65?ewF)CQ|FcI^e0g$g zOY95cTb5b#fuKvx&T2m9q~11NsQ)Dv5(9VUyhv&GHFE*UCVC4lFPMTB2f>2T$07|u zBK67BB75DZKKmJ{pfTHzYp?H<5Q048!{yM9B}~s+hfMRN#+v;yWkVX~MauHD%iSg-Zk-?z zz=j>%R1(M_NS31-d>Bn}_M;QTWnkFB26;n;@<#F~h^2}V1Q-c`(KZ~R6xFJRL3YTV zOe{ajkXZW%S|vrTgDcb$vJYcnVO=GOy6{%f!A6KP0`mC8d52w3q63JaxI^p*G!%_U zo}}{KwMdnpbAKU@KP`xT5Dy=~t_PQ2?f7%zJ4{!KPxxLwQBJuXh*@H@`r>Vw{bm*Z zsYbelqmuXx(9XLZ{kLOUNi?Fh@)N1TNK%pw^7VY>>ZvM^ul5=NT6vzO*H4AD5b<$_ z&CH$LH(cHxQ%X*H@3+q^eA}9en7*M)a=Q!?SIVn18d?Vh|B=oiYKmE!PS7Z}M;PjI zD#r68-=CKAq)_F?>;ql8y4&P4b;n=LVnmw$j{2d#VQSt{H*hJx|BCL8T{Cx{5Rc&J0|KsV)c&r2AA|K1&Q*v4Lq(Bc*IH7S{W|o>gf>b8xJ`iUV;Qq!mGA> z#k#%hbW#7?QOCb0?}!0ih5G*@nM&=!YsV*pBKMZzB}Hd22Jc6S&JesOhxN1>;93hu z+ByVRXtmszjfdomy~Xe3Zf=RhZxHRSm_R@{2Y(NtmX^Dwp!Rs%EjFcryR~Yo&8u2{ z$!|B9x7S(a8M@BEFd5~n<{4IsL@8j7yC7vELWWkY(w}x%`+VCtZz6ovW;2)nPMc~K zT1^yI>-RC$p03LD3iT|PVox(}5o<{-Fyg_Ti+-*FX5b`X3%>!`NtQY$)c>+y8oNFm z)(Ce#(-|3MO-W#57Mpb{-G z&_RUhDoaBzVwE`~6P&T~jNq1xV#MXYqv7f5szJK5bLVLjk2wF6Bhj0ncuzSTC#U<< zSEcCHJhMVH+9}fKzB`C^RXSn^(UPIW4&n-L5x{Lhow$LEUUBwBN4G*hEP}en@Pu)9 zXw&>x(Lh^U|Ia#iSQqf z9e;v|^c9nAP0ea7gMmY6Q3fv!U6>FHH~2^R zN)uC9?TN1l3d)Y0f*X-Xsu{>Dg3jR>agi2aN}lONlG zGFas*?@}?8Ld`ifTa7$LC?&#F;bUFA0MUWlT$DO+&*+#9TbvjL>*HpMth=1P-Ym{l zS8=gUGXCg0dA#n5_}zH9^ThAYk-Mq!yBxWj7Qd5t#p}HBJJBVrn;ySA$S~K zn;F0RtK3}~zuPW%v*LFz$(`5(=$@^TJ4rdA@1Br5>AJp?W9_=D<9GMU-M7u1|E_h{ z*jKl%ldzVQ_xsk(v9IQ?n`>WPxo)0)b@{sM?5mP>vMA+?3)kIXU*)e8UrTv*`nsF! ztL$~(v9E@%lLXW9Htl=}*QykoY9+ug^j774xJmS9r)d4dWaF@40Ln~5oq!5Q}6YXu+ z1L9Q7b6L_GWJHoH(z7(;c|`nYJdeRYVT!w$4+#FV+59w_AHi)$q)I#~?RY%uvEQ7` z+FgvVswpB%gYVkRPrLc)a6qxQxVs$cw5Pl9PKZ6Puo4iBo7i6zb%{N2=sdP3YEs`C z`8LO|$ecyOvYaXp-HW`cYn%4Kk%GtYY^G`~z|Y823$Or$by*q#-lLvH>anNw);sR3 zk#IDw(7SX%^x2}rYf{14!qxvK?1BHO+hp6FwS4x4Lm!REb<%y=^ z%*lP|TVa4w^pMHm`QM?JJDPga%a^#fp-@V9Z7B4im%r4i z5TTu>=+Wr)SJBJ;cYZa!`~#XGyF-7XIQtFsGB39m{O$RQ7UCg1wyZ%m0d8ZhY(ra{1^vhFp$<7ZUdJ@53~?TqY0}4)Z>FuDxcx>gNp! zqB)<(Gu8h?-kZQjSzV9clLZJ8nV?YvM2H$I3TgyYFsMNtz$GvNNwf;M)sCrF#0=mP z4Nj)b@Gy!BKd}`>t1YfYMT%8y0+a+nKtYQdH7e?jp*B$XTf9j7_V{_(XiSA0Fvap+RO&My&WxjlqGQ^D^^?sOtfhwQZ4Gz- z%;LhEwVUvcuzK*0X1>LRa$Z&5@g?OQTZfU=*)S$N&^C-(?QDgNVf%o#G0a`nh994l zBDTjT(qjQo4du{|lZv5paSNqNA&}!t#u#TNWfxJtmGRruR{Y%=@maVyr`;?(`j56* zxau*T$J=n%!Vc-CwuN$TNi{=OvR0?T1X^~>uGKF^3FLCepUG&tOaRw!<;v~mB--tK zEJNBlH_Ubp%=1G3cAZOdJD0$zee;d&Zvy7|(0$Ya^VnPE*Z$vuf38M)|G&jQH;wzh z5C7E6`;YL?d5`RefBK))9{)@^^uYM%@D&~K&u7OZ;-A%zC~Qv3YKMQmxk&NPAI5Zw ze>N@n0sJ%NFP-3@-`v{<(>-f|IJZR_#Vw^F22{Bt*Tx*NMv3jF~7@wXM9NO60ZUDvnWEc9z?n}vqo=q&7+(i#4F zc||Aq=NnO-xcKK98I9tf%VcdVF8yfQfyVMOpSp#XQ^;~Yr?l_ftgmh767bJ2-A4)d z=L+{x{CpVNj?6m)!C5VFHv2xBgv=b_E+Sw|c(MXpkp2X!ULx3Z%PVo~R9FV&!Nf*_ z;D`tL?yT=(qWvdZGx$s7Z^-r!U^+G`E>O$H)_u+7Nvnob^Q#pX{?PZ{WnDwnYYCNs z1^oVBt9CXLs7X$V-3R_t*a~zyJ9Gzb`^2Dgh0#F&RUI15EHg6>q~XP&EuT zPqTcevk##qilXW8DuLx+VtYI0D_2p3Al2!r(y+7xMD|6bn8q54R~T~qG|@PfCI;AW z-&f2`OZJAxz(t@d>9i@QCwe9F8xQB;NVtP$2zuuQrB6N0C+QOI08?4ZjTQ9evpRF) zdv*Hs6L~r&qoy%Uz0Jjxlef>3H)6TWcNla(KE8g|-Dwq`vL1Gp zQQtI?WI*yo5+td;Yo&xczJAsnQo4UYWW)(6r!^F^`kkWl8S>$j$qu4GE)mtJb96g+ z|Nq{4e|6@MTkn4y(r&%|y>-2ZZ#md{zn1!6uXi;u?A`T#h07nk-n0Ir^``Xy-`0Eg z=|670V`=Ty`>LaKy)S&{VC%gu`M+N89279_dLO~%k6!P4{-gD#^#5+Xi6V*T8us}h z@oO=Eem_Y^i~<@Fg8E9fSYJuSXmvm2D|wcjKV4tR7Bfihf-U*`rc5sDx+F=E%;0MI z?NU_eS;zJ-|KGKLNW1p;BGmn%_KCad^xl!V)((bnQ-#bjO!_08)HKI5zy@Q9E?kRwpN6 zPJvJ8pBOyqtg(&`QM~%ugxxI+*!6eg zAhC4+O3|e|$dY7*KL4I|s~w##bF3?qtt*pr@b>=?tW5erS0?>GUYVlSm8p%A5^5y2m-Z{RaEGCwr{Ju4;`f#hgB#EIZ5H4vV{?+3pCFaW?dO zF@Ev^zwx=P9SuH5H~j+ueGq8=KRsuo4lrkvR%W%EG3EyL8@V1u8m!2ciraPuYAasV<|jNT+{ zSr+n5zd7nCa(UPB1y)^xgb9$?F2b2S%fxjXfhbmQW(;5@HQKsdMDG64^%}-76|3`^ z1bopf5I8~O6sHqLAk{gfsh2Yo>eKnt^ z^{Bfrw1*s3kIIqh9pX-|Oe4laamK8(ZVgWTnK%3^o>$zSI?WrtlPemdbA9WnbE`=1ES7Bs%WOhf#1fa)sl zN;?S((&11g-$`t5L=FN8Mb3JOG2fK`I#w#BlA)QkE;b+D&MdBJ8_PQLFt&J1Ztnp)+1n-~eDU5N1+DHk=z zA>BP|>gXvG+evHR8jmH}w=ZH{s9#+Rq7b9HRwNeaw<_iu9 z%w>0s5yKv`*$Y(#w#g4sM}(K1~YxY>DbfUHIyAdSc(jXfl9~% zT;9Y1zS%r~xSfEU>Lt~RqtMaqt9@pjt#+w~W=;>4(%5=+DCjU8#j}?F<*$MK%zw}0F!rY@Z$&ptQWUQg3@S|lx|TdQ zR5lPW)?zYti3u5Od!%cl>@}{3RO_9XAIg@MeWSJ5X?AGKBh@&|q?%%g;3MC^C#bD6 z^7l83@sE`sH>Z+q?e%IGka>X;NBXg4#fCBv*b37(X4fNt zI3-#MhO*L%Z?kNei5&#GFOg|XrrwJDn}gXCn0Ym_eaf>FR(d$$PZq9n{&Ih2t6dyo^U8Ui3p@AD_JRb{9--F~}{@Q5-s$q}t^ zxG&Qi7JJlC`5+G|JtP2Tpib!Mm{HJCoeJLoC(XR`+nmnul@^E#6|eV(6(mN9H7rqJ zX4O;y!)zNhpCyG-VTRwFxDISunBm-(>hy}>;&U6RTQX}tO{uKLc>)JCtd)Z)(Nu5B zMzJH;@q$Mr-3IXs^4FI23H&sbKB{&25{WYhBGDKkg={_v&YV$}Gn_~wHZ1cMt!1;0 z*0MT$ws3yoPDGIY?55M5iOrNxb0($__oq_*#MV!S^=tPDaj~%8i)KQ4GZrX;@ zP`+|~NhqHU7Xv$E`ZvPI1ob>d0O~x09UbnxEZ?$R>`AkP8K%poJt`FUn zb|U;tw@`Izgl~ddCSNh7)ja&atM8;ATi=;KqJOjQN>c%DYX>(ccCh_;e`I|sAUt4w zv$oFzgc9w8IPW>ZZ0CJ&G@dXVA*yEkhDFpKA`)C((i9Rwf9GT;BhVfmf9PhEPnC_GkULL|%QtR0=mxvrTj+S!z zy;cxd=i;GcxglDLHCYM#6@V!5n_aIhBinL#c44J6Urbr5e2+W6ipazTRfUT%^@&V+ zl8hKqwsLK-zeacp3>PA>JQq56+3^s8P4+_oLZW#L^OPMHnwjb;<1jk=N~pJ4dYL3q zT41t^MK@VzE||S67AemO5h1*+yHlR4_VqY^65KDt9`X(lJJFJ-1SyZz2HnfhLm*YB za45l$<5Y18)T$ISsX#M=j6h4uA|Zw@fm;%LMT||LL`B820qqGfE2hRA{1%h~5xKvWtn;k755S-GvH8)aNf%=cI+%oKWVh|;uHF&8U<|>Ndl4gA> zzT^^^X4a=;cjDAtGXfXfB4iar4u9PkV$xPtmoaM=aq%z*0%e*d_#J`5R}9+q!MA{Xs=pK`!eWMd$09juE-)#Vf|7!(n+7|D^Qc%4F;Z!h9LtFB zL#4qZc?Uht;`@R6RGT`=of-*xefD4MVPgR>C*TmBKb0jO4^%`aE*T&1urJR$-?yAz zM+)c0f@C#X0`$-(^mss9(ku89?DyzH5#%?6%IA(0H)wA-pUNd>m&Oemm1hH0nt$G| z+W!2Js_pL+=pu-Dx=vY+ng87$JzIJB6xw>mp_07%P;YpP3%0=#Jgs=B7JIP|e!E*v z#`(T^-ta5D4t$RYooSEy7Kp*ax*KH!EijwMGhfWBZ*@~CeY^DOw}G1F0yPzU#KgV> z{icnwvcSLFRWRGF-~p+CWEks&t{h~LIVTmtRx=F9kavbn%#b1FdVOy*VMQSQD11p`@I*bhNEH;z(;CCx_ z5pa%Hz(sqrw(kXE+S4mHz8{%$iIFSrNkXs|igOFdqbhtW7gZWYgnBbekiGS1dma-Q z&R8w3otX-*Jwg=YPGNJ`z{Gm%#$ zK!_8pXzIZ);l&RBeSdZ|rvRd+6NBwK>57KZi-a@fS|hWRk?0aq5>ZQ42}_C1A2s0o zv&TNObn-pM>(a@h4s>#^-!#6`N+<0aYv>#$m9gL)zgfE!Vi_Jzqq8+)iZeft>#FcX ze%pL1k@=U%6PspFBeg{qid##qT4B3%v|mROYG+F;6Edo8cS1=^i=d>MY|3mLtA;*i z_dUY;&58JO1TA@mYT!ep6<8|NucI8E^ zaYasc(zJ1s-eFW~{;VfCF$Md_BP~`Q2kX2}Y&Q$|vY7bPC+?0lc?rcnfP29m*X-cX zrNlcN!Gp-y?8m5$qCadeo}3TsN&i5(-NWx5RdP#9GE%xsy4dD)XSN;YLgjS%IVEQH6cv>0}7p*E;(WM>)d@RtnFwfRk6`6@kGY<}%q9Q4JPa1S1He)=VVbDurj^ z0yIp}k6~6Vmv`%6YYTZERPD3uEA>HiJ$`~WCtKWD(YasRRxeM>bPh(ZyxQ62Bt7GPy++Rj*jn|pIyryut>J_!nb2h$2of7 zV%Wl%LU*&w_ND)?yP0&CD6T6JWIa?CN8CQ3oziQ+c~O)#uJP#c^HD;OPl=ev zrZ?B|1aKM_l~kxlr0I_Ln{<2Oj`glFRH3mq+f+V^_(oU95ub(K3^|7sAj*@S@D1o& zx-uryRa+i_-1s;}5%@Y&HS}h1Jzc2I_%j>Q6CKk+!1CR!m*+0jW7LQEM$*m@shTJ| z2-D=!5W(L9tNGWF95s9mgq)X{0blXmz`B|}$uJ@Z2y*IckhbB*t>}gvHwyof6Tkwx zn+%D?dwOU(x(Pz46TybpvaEw5!AeL6+-jD&XxkRaCV6XU#Z^qZCs-;V_U^N?#=;*3 z{s-2xM6_$}vh=x{Ic-KLWkppRO1mJPnqWc?##d;AnZdQ2kha*|-Zc>!Zy&|i%6Ngm z7%^e9k;{-{Egm6FDE>`sZ`qNtSENhCU0i2|zN81C%0=wM#uL%#1jaJa?36YbpLJCt zW%%|1moj84Fg^K*P=>~Ols2-#kNBl-@Kbyi&B%ny<9#>j<3D}fm)0#7vAfo!{*npd zEU3HVI6A>JCLokAZfbj7`2w#wCw#h0SaSFayqeh*mgyGOZvf;la68iq30qeZpVyTr za{%!(P?xVWr_*~2@9WHoT)Xi60?aY)@$Lk!i=SQ+HqD({iyTD%d4KC?Gvu>iW#hH7 zH`ke#-^u~K>^chFwELJg%sIhD2TW@g??(2~ZLR3DxAnBLhtM+>#_ZE%GqM#K z9=%1D(fAjJ7gG{WxIR&HuGVa*pawL9IyVA|=AFZ2PF6dGbuuTv{tz;NB{d64(%!4FvnAm z6Ur4T>I~qwj6nj4D4Gj3CPfOXX5L1OI42};od>1lz?Bl`xo+AqohKU7GBQL$9;D8W z)Bj+5An5nf$V$icChDcdx57LnMZ(aCJ!D!egUWJwWQM=hsXpT zG&4?!Wr^?e>a&X=J{4CT`tQcgQq_MuA&nBMG8z^fUaP;U3=U(R*@Fu&{aKlzjdc%c zpbg2ebTj%Xd)lqP2MabmDapK%dVZZSDqa2t&hob+tX@~N@)Spoq)KfB-Zsyby}0z^ z>z}q3`$qxAd{sPc=Er{W#F@KEpd|||UGHWulVk)@ZQdW% z*#F-7iVN6Na;%4)dPR=J0>t@Sw z9xTSFM1uB}AGr1rxXDV;2FWDIgvhwt=0P^oAkYAHDVM}_jggYd6cm|jf>w~GlifIy zf`OSZl?mW76|ImZqJqCaLqgxmlzj2;O$jH&l5-S)Hx^O5@E;fQmkx9A^4{~9&`jVf z%_I@g4teEznOqJ!GRxA%6Q#gZ4x7Sgh+FM&*l=O1S!;2HEjEi!0du!Rbf2LRIn7aN zPt>L(H-}KXgeabF;X7<$-At15Nt%J_-2$O@#$}AbTLddmLXLWWEmEJ#wa~eZX8M*s z;xy7`Vy%D$R$C#6oFU;lau7r7%wjiUcF(OyIrN*R!%Cv+Ty4Jl8_%>p!Vrhwh4peB zr*(e^s$|Xutt6MU?(=SEC!hmY6q~@KY(-~c1+rr!tvt%+5q1qW!=aH1ukuD|Xrp;# zbH|a%h-754b$-;yq@bykQRp{1GO5H&)se|1sdrSw=B?E5r8=fIv@<|-JofN(vh*^J z==LAkzKQXXl~uKlY)`%&*`B>{t;3LKB!K8!eBf674#iwiqJ_7&7v^{Z8I%V$kS|<9 zKmF#BwhtcXgT_ax)b_pc5iUWeidPahO5|26QPz!8u|i~>9p%dJl?$tiT-jTBKTtJW z(V9I`SO)G|S>c@L6-(o5lwr19qeL(Ip0bh`0QSkfnBh9}+D`qX4$w%=wK?!IPmv4T}p9HDYo8pFj%9<4oE0)AH_45+@_*>& zZndA4%pv2_%*#7LPFc2E3Eh-(CpmWV%%I5@Q?;Z7uTbjJ(^8yEpVP67j@^2J3A`Og zkHZ*1DHXx8V9*i0fEH(sLzC`FE;0YS`7QS>DaLksicESbeu|VRyuF?|y!GUp;VBEm zr+Nwq@d|9DHkebtVEE14UgC@$P}A6*oeXp7%gRj|krW&jjb252=FJ_S#4zMJ(K%l- zv*tKsvIA!U1m@V>)96=HSq8SY>&&)Po$ZeX9KzvjojIcSVfcq$DNre^N?HvPjTHUhhL3j~qNbyo=OLB9gyg zQ?wkZM2=rov5{e}7B*2JPZk{!$d{WA0(t5SZTGhq#yjuB;7S7}q1R?2_wfY#U=J|C zG+!l)ogN9vLqV;F$Uz)2qGZ8M>B)d!yHnnfd`e})P8N4^hK9tg{_XK_mhvHeE+JlX zgP8?~1==mImk+|QZ7xZJJ@Hls<$l5-DeTOiNjvgYbY$l4_e=V&J+7{Z8rD-uNy&Kg z>hfdY^LC19MWK<5V}+QB?2QyQ1KVlQnOTwYZB5;W#0WDc_G#K*EMVk6>hPP}m-hw` zUF)r?g$qT84bGH;uJzV(qVlSTMu{kB`;=lQD#@gBotFH<=4ppxe90&YM_6dgTQ$4o zWn}mekqL)<+f#>^*OOA+SH4XfTyhnXV7IN7WVIB7FebEhNxQaQxZxmeT^(DGdUGj_M@MqC?s~~uo+o_9aLDF1W$!fR95!P>d_$`ys0P46Ky#*&a)9nl}{(g1$qV7@xHg7>}GkTb9mElOU zyWXyk1qK6{$aAbtc`5R*an#aMnykTzbE(=!IqM@=NrAnruCuZ61BMaNZSljC*VUQ& zgOg_+SHJw#4)90j5VT|U5Ny4eOs%1ug~_qFI-?lm2ZXP zW3`t@CRG#OMV8ULRbf|b;!x(=SMQXs4{b~e%>)d`u+O*6=-VkIBBm2KOQLaIHA%%l zWMy-=Hr^a>oH)@mzNa)&Pd_bA4n{^m9E*{{Otz2n+4znhF;7C)5(VZ?nt|#H-c0{ zuLS@kPq3gg73{L;r-EIeC-P9}Ns6>@*$)JvCgTACzy_W8O@4E=K&K}Xx{=aOXez%! z`Fs|>k|tf8Ix|UeYNp`5R{Y)ajjkTTu?D{rnKOj7{nueotMUfNk*2}SYW`7TzUc~7 z*RiR>Bzyi$DzT?5B}wndec}iDQFLUMO^^vulAR>IQ-3_!CH-E4p_nj8RuFKlckYo% z!3vtyOe4;Bq;N}9w_4v8Dpq107H~r>|7ZZrmfK5u2Ac6^lI*viPZi8E-snE5O z<`8*p!-3Nr7S_i(13q{M1A6cQl=Nkp1lFShp^%I1Z{rF3Euz!xye5Nc{1S5F6mI94C078DlD>O?%G!gRdGDIOaei_GjEZ@-lK2mVGqoAiQ^&1 zfn*&bbIG}!bT7T+Ay#jYQz26h4sSYH?*_Sd{q=6Bd)G_vhPijB?_37K&#cUbm33ar zWd=y;*!VGIP%IkDN?t>o0AthlugaV%{`FS&5$LZoyFTda*cf@LAtI90DxdX^7Tp#sS`^^(!)r~fNV^6+?&zY-EeLGg$jT$}bsAzfGlm8Ik zzz%r?qBKOH&~g6VHF~<}Hl(_7BwVUfv@{5&XFCCyt zfnF<0TUj#DZJQOUYuttO!ZtUs-!J#T*h^*?xd_NB;Nw6>TUdD@a2+PaVo4vNgYY z{s0_pbPPB{2z{!vr>TpO{{|peK0};QF&Fp+x!6-ct>-yAtoCSQdt)LmJ9dgBW6g~~ zkcB22;%jw#UWPry)wesdT#N-9>xYYFO~J&YpHIL}Qy)<5B)n$Z1c%!-^VQ^z&4g)2 zXJ3B(0KW=$15cS_<+#uZ!>VjS9Y?V(v6p2{0HHrUB_O11>k^rIL1Y3M)FdDnI7?tJ zcu3%EHfG~BazfYF&TFy`b`2|!=0iKNQ0RIQmK8nptwQi^6BL5~d7{)(b~(s`Ev)L1 z27(_ima{{xkK?QSSt@_l_+IBy)p6#LXpUBkx0urm*K6{xek&F`1Jw%HL80rcq%??d zJ$_oF;C`zCQxY-=Z?f9lTw9M~j+a^= z=bNv|F96x}Z4wIqINgc!7QOnl@fODlZ{gbnZvpWyhRGRP!>k1Bl(}1c{8y50GgvpI z+An&A1#*9_1G^&3U2|Zl;5WZH1_g{};dl<6k!In5!P}$AuFCg{_>zztbrRN(ugeGK zpVQlL-|s8HePT4)xc574*E&$i5g7w?IU=9&L>%p1Kev1osGT4A`!GL$;3v*tseM@` zqikcbuqhKR3!nV*EaVz@f*vD<)&2;ksO1ar*V~1{Qy!{w&mgvobFR4eSVN?Za5v=q ziNZcU8@(FrYI<6Gm26uurjy5j+dY{ajFx!f-$+oU89w|?GuZF$2V2n9{C#zx_{ zxDhAP{c4da3SZ}d4iB=1YO0KmSi3jmy7V#(u=}4@~g1^N=Ps~rayU{qJ@j9e6?ntt@LCnrRFPq+6mL}s;wH#PUmz%C40!h{q zOO)qab{FeC!Nk5&TIbYBJ?7Ig;q@!b4TShh#0~y=ieMBy<7>uQHj`7Vnwa;Si|O2? zYW6yS8W@eYFI|)lnoN2}KKbxk6(dvY;nXUI;Q3dQnykFmvwTq3MMF)$Hu&qlKC)h46zG4~DiN&mdr*Sou3jj-Me2oj%!t@xYtGnee zyXa!GAh57=tUf+D*FJ9GF$>SCv%R=xr4gct->*1R=jyuOK#hLCUkkxZ=u5GVcA0>rD$z{2tyPhQvt5SIfGacEd~AYk|nXD|Uk zJb*A94UCDy!UN|53(W%i8%$S55{HEirsbApu?fYEJH$aX#k;I7v}c4jypGWvk2#8m zcokQ{!n`JsvTCA{t#T-|UsWop27_F82o)jc%n95sg0jJE=zwpXERcNk^qm%!$lGoc`eg?Cwk679M{{&QP!}yE1976Qm4zE5vh}f-1w<6)K2T2rWo`>$ zR#dDg;>x-iM|Bj25sXJ5;5spB=Bp)Vuh2$S! z%O7A(#_{4(4oH4;d03^Kj>jL-#+B<%y~iFSr8fzEsuV}6*vs-%YM}E2ZRaZ|3CUzv zF$c*iF5ZNYnsc^!^EEpeGU@CtbJ1v>jBC?m(7_pTQE1e+2rO%E91c=O`dN?Epy3xn z?-rRrf96fZ)0>!F5q&31z0;_-y$pJh-<-_nDuYf&7rTh>tql5qH$-CGvzbn%Ud zC^~8dnTAe5ra?f)LFj8byj4ubDh`N6eX->4XH!A(l;2v23T+id-rkV{3f2 z5e-<8&`}+EUjSB$SqtVQseEGQ8ehGKrryJJccd#svZ#kB4=IrUUVN@Rco=%{E~_+cYYmLOb+8J_B$62 zGS@9+OzRpyVE5=LZ+#qY{bsm&f2;>mBjSX#rOLN>w(ng9;wsCnJ-d!^=%Y z_=mWieIVO*wtTCI@NYweFWqf8kO*G^0WeGy;Ugt`eHQ)nRmU5z)5h0|2%nZ$%Q4w) zTSfTy26RWrrV4Rs7mm~IuO1QK!$ojId8U*XQsAF`=^y8{_O4QIJQ!aOMHBzN9R8|& zxo}(cju-lPJ@@N46bh$>+v8Gy;AZsE1WaOolS}V(VLG!uRQ9Rq;kf+&(suj>$6{D_ zj;OF1_26nzkCntdO1A{}+a!N;3PoC{InkLwC&M|zK$%OA^orn9j?0*`y@g^D^Pe_EFZ+s>r>BLY8PmFqah}=8C*uM40 z;5{J@q07}F^mS()4xgYhLC~;%>87Mc?3l{3aoufm30L*RxCi3Ld|j)pNVpMY5C~Y% zxWAYraIn|x$888yw#qZpbX9N9Zr@g+AZ5i0s!IbmVwOfb%>Ug2ElaH!Ww!72Dv77F zf+aF->Px$oRFx{a|!m0UnlklLGzU%H^-|OZZj_>rZ|V== z?Ic2xI`^iRm`m;wq6En!CX%;OOu}64rAv?tGdiQeg&K${NhN(V>}lfL#}g!dt0P%* zzS(aIgfh#H*&2@{^7rlCJkF%O6b??}Fg9Zlk}cGVM;@Z#heTs6S*h!USOr^Re-bUn z1T*Y;k-^#goX_=&lPAJ|;PE6OhY$j8G!J%o(IHq$y65`2D<(hWspCifZszA>esul| z67e6&@+J|$#E;A5B(%Q`=IQTxiD0#FZ3-K}<7n7oMGk}SwJSsNQXYXyJFAb!5)4y zZY4^i)kMu6Qq9z#L<@fN>?yd|N<@$P*o!h2zqxIO5T|WUp1HaCnOLKwodjb$8w1~g zRsjjs77ax=gmi&;?HkPEtHE+YyE(93`3pU4rdFPJf8Kd&wGRpOl-akCbH$LfPlsDA0j?yU^#6S-hEV$}q9j6^+Q;~De z&iKLwN4ge1+PvEMaK!Jsw$y`4b-cOgLC&z_2Ei|>dbFPSW4FSausWW|EUAP>P?<7; z_=ivDO`ZaJX@<$`){0Hba%E`o|B6e0&I#iFC4yrbT5*iUE?a)Q=->$_4v%dZM&VoH zZ|o>>#^yRB?+mqc_5NA}aTwvQz7CwCa%B+A>)dF>f*kCt0-wWXTHEgBsBL0xX}Fz9 z8HDg~rN+VTPB&{IkQp$oUu0lvq8Yd~j3EvzGnV1%O2iwuT!{<@a|`M40pgjk!5^H0 zz8_MgufJu3FkRCJQKmFI;>#rdZ0n?XE77CC?qoUyvO+&_RL$2!juXy!RC3Z9A2xKU z{7!O?(&)A*8xIxx1@9VPrUz>T-eo4qo1XDEJtd8!ebYkX_(P>G{RHRRVCvxNrsO4{ ze>i7s*;@RVRVBqIXPt0~)t!b0W9JbWWW z$B-jDT!rH+D2b>_!DeQP_~znJU!H}dczGoT#$BEAL2`u)&Kc}INp`T(CaZS69MS|_ z`d843C;y+*j_w!(>}@wtpXLE)PMp*wqWu;Z=I|f*#uXNE^esE9);GtkX1`EkZ-cMM zkI5;7I$}eYSldjvv;4 zTB7iA;haeN5{57;KUh_kV+YDHsY0x4V5 zQ5EI6p5-&)-2OZd?FE6iBI@o=QAX|!Kge&1w~2#frg{k!QIP*f;z zcW&Sisa_O8uYzZ7^>5rp^{>v?>UTuc$U2@fsLmv9N4`hA0zFw{xo}kAF{avD#bt?A z9H-fA=GZCBijJ721<r20sCgDFBSK{RKTa7YYmQ@{g0(TEy6HF?~l52pR% z8(p#bCi84h5vvm~GiNcJ2F56Hx7_`X0PpdRdTr?^7E!v+3~XQ*sgUq9SuP2F5@29~zo34KP3H{v zCMt=8fJg`E;Djh&np_DnP(BnTm_xOp@?l)f;tCePm9l5TIqhpW2C;qFFT{d5IyTdc z9ok2B8n>bHh79Eg*9$*buL{QnvEVS=c8N!Dt5x}+bF7wb22q2vM2n7>)BZ&_xO>5v z$9mYkP^B&IbEr-up6XQQ&wh#{l6$`J%{j2BZH}ykhJ^Y(E5|%c!p15!*loGA z*)%??ZZP68bLMB8F_)R+xb9l}NfbbIQWru3fj5;Dq^^DqjaN0?u6U+}s*{E3WjqmV zgEGyUGls%}%#{c-;W7c^sUyrwJj-vk_tVpO5(&=5=^!|l*pwt_&fnk-Rno6E2zmNY z@oX{A+woJUE|A9-L&SuY|9wu@jD=)Bz`40cgZG`Qo-=d<18bfB6V%-oZ2` z7;m$B6;ktv$092PxhbU@4P#>Y(W@kiS-gxy7paQ+s{H2VO|B>iHM1;Bo8MX<6ihZ9 zc_VF-iBir(Wsi066AD&|laNHI`B6?nQqcV4?>iuKa@mxQmrIrTSRMqc#63uQ9z05% zN0dynxp&-7A28;u;GE93u#a&8F3HND`y^~-u*@m1l(7`y@FToTt*?r1BeU6H!Vm5O z>BvJ?xI2rJ)F^5<;c&vzzAVu}nH)_k9Z6r{XdW#bh9V=gR3cZQelniOe5ocfeNM0kV}D{YnK2@EqopB#=xguMLRBQqodWA5G(iG-zbCIeyYY4r z&h2i#b6KB5Pf_K`@BhA81coGBKbc<(tI;Ap%8aF6H?5LfWg+}Tknc92-`ZcyUhcp}FKB{pQ~*7GudLuX@9_>eJ7 zN{>c`Z7OmuS+dvs;XDE2IYkJ+eRG}kkm))OvHGOB5%t9tkQdLZgYUUQ&N5YgC;efw zb}S$3ZV&tsG*1-4vCwB^BNd|KAX2O4G<`T6G|%>ZY6%3v*OfX1g*wP*X1rgh18`%^ zXuXWRBKSb=&*a{QJ+wZ={^)%1Gam0G#r&yABH#sbS1G#&KWH!Hv$+H%XzFUaCiZq4 z5WAJw7;|Rc^{gQA*J1O)*X!NKk)%jbD(L8puX?fh_a5SVXvka8BQxNRI4M$jgHQ!E zaYM}LY7Pz-WZPMTe-xxT^d%7yWe@E&;q(tcpTtJri+<Uk+`nlG_ zv))wJ+o4vw2f)F!l(`H;r zYqh16KB~M!R2gmZ4uU@m^dc5|KeBKbOBh)pTiNXJOUvm_v-*!q%llG;hvE_$Osmoj z+|+xG{`G|R!6Gbx!w^5|@O@mM9*rtttyPpmdv0(UXPrIr%M)mgQ2AOd=su7w$#ZcM z_PbhF5N+)8#l*W`HEm>-NRy%&|6-WXK^g}4l4?jqSKalG+QLT9sRh{D9xSZ0Cv z&p33Ks$c+l_SVGUy9;7^N=5(mGd-xFMLXcBMtdZx%m*$+cR}UW@Ap#srPBg7bBGzy zL!k=&YnC-4v*F!NxfmRY%1rWS9Lu$(K~WoD!8ClZnL{~fF3)t4g30uMgZb{FWrPee z$6cw%B=S|;3qg=K@7ol!rw%i3u<+mu%pCqY8tx>j?!HCN2B#}nw)8BW3PH6e(k1!& zG`@BeHV_z|6`M*Fbl&!G-ySY+QQT`3Fsugf-(rBM9Q^kgadn~F3Y0Q@g*h`haE?sJDY4LIAhqkxSRxEbTcV(9q+>vCz1<6@-)92(@-hzjgO2YM^5-{L z$Y1d{ApgL?<^wWqZ+2c|kI)_A>&hb&;cLT~Huze}wdJPc@Kv$36~3O5g5rs}!Tg3x z;A_?8t;g`Jy?_<4RFEgIB%8-kj1?-chub`v#Yot!13zustU9@-H_fnFKkGXb48;C? z|3f?0x8KuUE;~;iKk&&xhpzi7KKfl(C+tg6Me3{j*pFQo301Bj!%~?Ao${Mt5o6Jx}*iOy5|nSLEoXEAdaTdmZ`b)3Tjp4?D_q z$|+8l%=_*$i9+XhZn0cdrtn&F@E6B}6|E23JWXnT<2_RQZC3+aVzVchnS5vwk)ijL(ZND{K|Pn=C#;-{%AK2iSn_jqn?D2=sl+DGOlvpJ|k~+ zegFs=Ok`m*zvYy_@owlJ>u(1!WnCME6?e(zuAR5HLeWpuyw*G+EiLj zSm!P(%?XFCB~3wpJ*d9_u}*w=0u$0Xi<>{5*a~nf(XjT^%(!xg=#8cJZ~3Sq|6*_D z*IdNkpAc0yNO`|G;c>=OU&lWap8zMt->zV-tdQ9SuSFoAfm-}3&iG< z;?yqPM;|@Xq9I(~&zTg*+S)T=Ca>Ua;0B}&Lg$s@KAZueX?Cf7`uU)jXn3nk1f^G8 zqU!0c%iPn^(U-Pj>1n$J+blJ|ISFi|P0I&+3jn&PY@!LmoY?vJ(wP46W;C z>7!(OoM84QSNE)chUO*2K3^z09L?OR70V zMzc^x15dTE7d#bXS}kwQwO+yG5*YCPk%DgJshRw*O|eGF!$E=?=U!3N+o|MydDZcr z*#!a;mAw;|yzr+kq=+s{Mkx!~bXI)g_C4W3MDXbNqo&z9MYc3dg_vF(V(*xW9{`QX z=eB~zaaXj0h74EMu7I~~py7`54)jCFE?$w&sUyPI1p*;9SJ)b`vx--Whg zh=={5qzWN~Cgsj`?oM?D2nWlGVRZ+kbM^3hXtc0JbOk-$gofvpn9t9{DbU$!KIE^{ z%xN(HV{f>L{_5fHIR=LwKYvYGcMU)I2=~Lwk*7V#g~Tt)>;tZZt!c5_FcQq!PerA9 z`$ng^NUayiqh@3_^$E2cDOVXy86_rmx4ZqzB(w%~pqs`RU7N@;NzZ(uNFay%3Uv71 z$``mobinz&XQ(_K?F_z7eV-KUS8O(4#Zn4QD(fY!m-UDzm0u|nl+7v!dqdrhAOt#T zCE-xb{j2{8fec>4+lulWkIX}oj3gBUECz9yd~zsS-B3%cC^|0yf`caaici;-q7ClUaURm=El z4zqv*CI|?`8cAD{Bp)fKZGX|e2=fT)a1u6CbE+Ql=mwj#YB{``hd@kHRDm)4GPU3D#-7GAp06+G=PG`F$s zL*7BfH*aNR;&yaj!JXk<*gTfENbtXvWtpYd1;&gcQK8|NNYwWt!OY)rYY${XJ585$ zAEEO?RoP;`d-Eegm$VEo-|4N~BKH z1-4AB65rtMrfOi0hE?leVxagto+0k%-mpZvaHgk$`P!QzNV$r0g8O$&D=612t6$_F zrkiRN>&F=dcEWE?8%wj}h6dijhDT6!gWud$#PL;vq~Nc=ezwn4`L@jVHI`zw{I28M z7T7u+7a9B)%C{m>k7{Ezedo!5?TA(o4iah1Oa#+t8f1^X9tQ z<}g2Zo04zLXJ^_fOQ}+rj4w0;y~1aKB~NDqdUDc~$aAHhzzcMc=yT@jck?9hoVPNY z_t6KZ;(su>I&^!whX(dWCT0hZcaoipGM#C_Wu0?gszfa&qe<$oA``2n3%)H_lr{}; zE=qIGgC2~Jrs88W%MaXDn?vWo%R7}+>AXBseoxFMt&#<&5^paIjmx)w>%FTW1KAlY zoK)UyE5`{7S`;*5`MgU!Hyeg`1M&K{4IiCac2q!|&=XQdZl+?ES(3Gu9f$qx@MJ05 zJp4SoaRS%0merJzvh4Zg*}S-}^~GGtC8;lhE#Asr3V?|XW(GPWk(9EM7+6V)2DK6s z=rnUBsvq5ZS>W0B-~bh-?^j_DDukS}Tkaa>+Z(*C<3!xtItEQ{ zN!me;T~*jH+)K(#<|;FALx&=C9T+FY1(TM)!&~_X2-WEtYKdWG$TYSP1~ei#c1>pf zj^LL(YP_A>Hke94uht%(boavc6+&0*PsnLa3%(zcP@{tQDe_uxcs;vq_xXT@2k85Y zY`r^(VwHx|YUPV^HyUZ<;UaDPo!;evz9fo*51}9X^OhBGilTtX6NjVC>*Z7&ywjP% zR^17=wHLELQ-}_O_mY>AyFY4~vdf?deCXUgh}r^gv3WGW7aOi$^4qbRf24|kQ|K$4 z3rftKq3rlVQDzYjZM6!(;EYX>$JR~%7hFY&r1LGY2<#NCOids_y8m+GY5&A!V8#WV zVkjq$$;fpnUQ?Ru@@*Nn$Xs<61UX5Du5p6|(mq>f#Q@Js8L`hs*EZQN!!0)N!QF_z zbQ0o%Rs@{`O)i|mWfBp@|CzVpqTVHmVCFW<=_H7IyK^_)& zW}0X752i&HPK7!|%Bu*wVVnoCcqzakVzEZ8Td)|;_br(M;+&`@WoH43Fh8jV>N^Wi zn*z~EXjSH~Uu@bxG}8ltP0?dNXp>eXiSUH0Q~QhFVwCBy(y&6vo0gOB6~7nS|QwRd)U+TmPqb9^{q z&8@d4l~Tb^ox%kUu}$Xgs!1v9+cAN;8X03jAj1kS#yyKE&>v)dd}A_Rb?XdXN{j^Q zLvSwf@1zs5Oi$+f7D0T{aNRNCKesl&NEklflUTLcBEgTSJnEZE7$-Ky_ISav-tDG5 zcbuK_zljXuVsg$ch;~S%K8Jj-NfP`PLx6ZkF+ek=%h{S_vUn0SLyjZBPuS);=2%p4 zk}XG`V{t|o=FkQ63p(Hy_f{SO;Y;X7u~|rPKUsM{-H^lPPT6Uru*>Q$X!%RMi>rjh zpN@L%{I9-AEF-;P!C9(SIs9Ikk=F&j{>Zak1p_L)Vet=$s)dsr{rwMaimBO>*gcEy zyO>U9$78ijyQoz_#A!$bU?(50o0a(IC}?yqszB&{bPNKz)#8=8{*BkzgQ`QU5#2)} zc?l6je(?Z&*9L9OL{3%>#yjV_vLdP7wE=ij$&v*)%XZnKla?|3U$)Aqr(+HJ(RZhV|VQurY)e1LuRkJ~9ZLxvJu z+*r;MW9|^F27YDwUYGn>h@v=d3#KK|O5svJk(tbio<45BZA`kTP10lDz5+uiy>{`) zFd!fF96pAj=ld3T!&$;tX$Gu(O{<3RM(k?EliG$?H_!j{Yb-?-3w=jnvSav7_r4#3 zX;f7CCC>z#eEG82gWwB3K;1*20K5o1BDQKIueMfJ;H`0}i7Z@5+UlA?LfDoH;&|@@ zI#OponF|zbv``Ql$XnHnOMzExfj6W;;XKUY#WTC$45XFQQ)6f77aBn5qtRnz|){`CfOv!Jbj+0u&PhfM1m5dY4=g1Z)SNWFVuYx2USU@z~oBxmC5D5=+6ke1ZVDO}2f z$fdK=*$~jFeIB#yHAF%LebF7cHi+zPiFrao0sIHGCrRa9+bV|;N!^<5*M*2vvs&0h zOU!PfKR6_vUk7)aYv}{4h+qedUtD5ZNPpn2{|e{5SYu<0-1}u4Mz?@m6=I^%JRWq2 zZvhsw_69=1UVKR~nP4eVKR9E7+1I1&$?jcM{`JHx$=^{nBw9ERl9&!jWG179lv*Aw ze6EO4qu7f0mMmoE0V4Blr6rQZbViU-JQ~MRYbXK8f&khF58C9ziy|t#3K9~@b-LAp zV&FE*Rp9@;I}srB&{VV{s^k8wh-xFuWtKe0v}&X2$<>4sb7p=bYKnYh!Ry6d3SQ0{ zc-bi==j_U;vB5DHPmIG<;88o6wjFVHYX_PkK7Twhp#x968po84<5`e6ogcU<5dob5 zogRH)0dWom1`XpK6H{S3yW2Z}t~_z^EVoHu4|mmooj{9@W* zLZ`v<%z<2p9QraM&sJ1Td=LX`Z{>s(Rw_UARZIRJZ>3~*a%QACYp}ll(pq1i0X^(2 zXsD)V^e*cfA}lDU<6nutoHH^L%TX~Jt<1oVfoSc+#Ef``-Xxa|l$%n$Nh#|WDzEZj z|LT=(I%YSHVPhWrZ9=H)(Nt9ldWiTc%^7XARhkpqYO6HaZM9V%q_*L~N^f|S^ssP_ z#H3Ag959sOqENF}n?;77`AO0)~Y z&lf%JZMKZ~2#GC*$`KIGapaogj2UWviuPl+O`)Ix@2f1^97b?R($OHlt(mXQ70yR- zgJiJ>h-lt9?1=qs*2AUP!Cu%> zX8Z?s+uYuhvW4@^H2z|_9v8T1{)$VfAwG@=aJsOTJeIqjt;8Wdnn{$jqiM4^v-S$M zxzcW}<11zWVyYmDLu9nrpTP^qRAzIE^jimEUVa}^GXo{M7>(FY&A{nzj^7zK)O6Lp z$QxTa-Xp=0@g7NXlhSVS85Wa`;bI7x-%KJdNpL9sn1e8DQ)HL(qjgXzK zm?2*C9H_n=Llne4$6JP0gy^8D1uUE2EQI6UK%Pn z*7G_%59iqyPzm`+MIVLvYWd#$-DSPSo3`f!so{4CHSBh45aE0~>9fv<6%LzejX-`m zcBQF~x=iEmb53U-(^&!G8!g7z^gsf}X!Q-RdP2RXv)g>bd-=_fN~j!qvQ*I7aFrKZ z%@L>bvJ-J}wwz|%Q<_w8>L{%dWXGGI6q6H!fHKWiLjp}M8zgGj@Y%{&sVF>hStfWOYKFnYVtcOu6jEROVv>s#gP>Af@&9t4-z~EQ`Rv9 zoEq@-r-G-`G|y^U)BO?`B&~^zUb14Vto#XQ4#Yis;4ZRQHqHar?O|(+0Gyio^Egvv zARIR*p8~KUKFPyD*gPKT4ga$jV$UlOn5^o;KeI?U_sU9YL^p+pTrrMLC(62>h>Oi1 z=E3Q2qFh^miDAvvc+hMH}pH&$4?ttn&h~(daXYNH6Dl$5RR!O*d!M z0Zhn`B;MYs7INYz6_hZgKQr@h!OP(eM64MaTmx6?43SoxpGnIf66E2>x>9E+h{}}A zt30T(BYkHJ$w^$6>V2CCj-_VF%*lU+vs5rt&M$ng(l}d^Q?HikE@gx-3{T~)tTfnW z%OW`6G`sK&2l7dG^QZdVr*Kf zs!6)7vy$SK8=Z-A4jVUfhEHfVtPef4gjhr=}3_PnxTL3D3 zxB%3XQ9R##bAhDisyIk3^F1%en)E8)!yG~*zIl;JkJS1W$w%hH{=z(}C)!-Ifg3~( z5XGH&mW3>wYcAX@gm8(urJDfXHgn+%7-{Mp+Axd)(oY6Rc4I+$HmZsr+XMN?TrQ2$ z&ZqBeiZxvsXZN#2`#Qng_?2+SS>X8d5Nsarfk8c6^sHq=kRdu34>Qk>8zO9a7f~?x z2Uep_m7awV_ho1<$;H5I75+>GFgrG?p(m9?hE;QCT0S+m^pnYz?jQv! zyWf?S&NYp1vzd`&)yZLb?>X!^fDhaMUL5TL4U2x86qxxqXx-vK;aVB)Ih{!@0XcDt z>`ZFuzCvV)S6vMf&txv3uSy04`#p|&>*jp{h{qY7)5$ndc9eF z(|e5mxyY?)5)#1;m7`8DKd_ZWknYAhYGh6#z-(WBeSF9q0S(gvOA|QovQrwlfq0f)vA0N#@Jd+ zN7Vj5qKSm@-Hj*@MnI6bc55&3{{{Tix;vU)713O9;@32mk^IN)PtMr23d=dQC|i~5 z9g&1SD-%7mH4n@CodAb3IfJEliqk@$d%b_0obFhwUbSH#SQD8)f*DEq!1;dQclj;T zj~i%BYSj$8G$~~xA*A$)DZiYcl3F-_b6G~o_}DALWt)$FF7cz%lQf}JbaIw6DpP`j zRd+?JN8C_r>+0J&@cV%^HL+yL(%CY-&p;ggef2n$q--ort@$*WMsVWqOAGl6r8{Mr z(Ns~K6Pa1!+23Z{Aa;K=b-Beas0tmOLlK7RMZQW3yy4{tbsb%71T4@cGxS=bY_M;T zf{#rD*-~w2Pd980E(kQo9!m;T5PxULF1v|})0{VL7U+SxkTs2m6@)(RR`c}{MN}2~ z3|2gc{zdioc#(-m!&yA2RUuT4^te`K3|x84Pah)O)`|hVFPPpl_KJLI&b>(EZ8^a$ z&csav|5>vynH_ypU>@ZIbNfOfGP0FKOxz@krc-Y_RLqP^Qv+*c&-o=WyIJeW@i=D> zOA)j0dSTgeh{!MFcAuLB>{6fIeW+Jg z$gYX%kOGoGJ~lmzQ-t6AMVuk@F#>JPb?;pk9z@xya5}%aIazNG<+r1g6A6o~J{sQ3 z`uHO&GPtP?XYyOBHK!hjxm{E%@|$UMEC!6G^4e@8+<@(?43aREr^|qCHVQi`l!2+P zDY(Kd&X1MSd{Io^G#<-k{5+B7j7iHMlU_C?G~82mid>!ObjQZ>IA>%A%zmilq%v=) zWgr$oEncAHs)HR_OTlbgaKw?p!-~w)kE!qw>Oa4F63RLWrsQ5Kzb>)f zId!c3YBL-{aI!NhEq_#c**HX%!Hb+DmkW^WTAAWyOw&lAhUrAlre4l@8QwR>#Jq15 z?5p`Stw-I3p*>xK*}Ux%S|b_Tr)A7K=hooVp9Ryr%SNS+m{!(paP?$qd`Xi2QQk*> zDZe>X*v%5*Scui?VK-%(p&zj%ll1hU;eY++n!!Z=otcjDMmOioP;DBWm`NvQ(23Fe zYQ9YC(L7eU)185I(b~cF z=5u;078SpE6Tlm%jjZzu=%@QlEe;5p`a#S#I%~zYAmzCXDqhkz|X2xZJP^baBx&Gc?i^c;(q$NvWMy6+W`mxHKfaja0?`KM* zb#E{whk!wvn<_&scLYnc^8VPn&A5b$^InvSGycnp_jQ+w8wL3}J-y3n#++S4f4#rX zL~I5pwTQ}TBfy_odw7w2YtJET&071>x1b1);L%ZO60za9HO?hfY36zR?r(zL4`7<( z^sLy^z3j+sY$aHs@d=+I2x?7 z3Xl;7yJOn867d44W^L%Zq$${|O?GPZL3C8h?vMNKIIk%}ekMsqcb;NF6s9vqM(d@^FUjpparh%ghI4KJid9iXYR>=e8}_v)X#^{{pW2DecpbP0z#60_kQ6a z&nNtJPde|1@pB753;5>h1Cm^1YL!@j%ZV6KXkT#%UnW^p_QRdibO8^nda8KHyPR*Z%h;8OQ(w6EI?c zC{a;SP@_Q&hH4;862!njB*D^v_F6mUR*NzNSQ`zUL^C-|r7c$4qEe+Tw$x&a78Sh- zq$COgDpeFzRMZ_qYfvOXBlCXN-e)F%NU-<*p6Atv%$Ygo?6c3_Yp=cjewV&etuCcL zLzAj@3h&sd9y%6{>JwQ;JXrDWUmtY*lYi~}b3k~B=D!5{v+D{Nd$0K-J*DJ#e2S&mwV$^Evp2|c=Sj7fo1&hxK8gCU4CFt9vB_WiTZK-(=E zD`u8G5h=WJvu89;+<5s7fVt(e)%_3!igqB8j;q(eEq;1{;+%Sc`0j4v3pN;^I%hD_ zgpRLK*BpHc;b8~3D5CJ)=7eKJPZeR7H--%utN0reZL7G()Wb4(TDM*46@yYI%0aT7 zZ*W;~0F39MIZVGerzgDH!UM(sVDP{s9%A=tl8qt1NqHx2p^3!Pol{&O3R3KB zM0<~@-*{fPIr-V3_?$d_ggMc1BPR6>)a35&EbZ+uS)Jgklfo@|Ix^MZtDoDg)tt^& zZ;)20cT%*jc_=~wqFeCWrhT%mMHP*dB-HlL*YE!sd-c)q?M~CGw*B7Nz2Wx<#=DzL z!*Nnse}y3xy?*|{N}R3UC_Ee?~ zy>;<7as^%7`m1hTtm0>u#p%0FTo%uyg7%^(7=Iim;4%_ACHhrfrW+Ekp}FR2 z2C(xb)LA^C?|bZd)vFJ@_c7gQCV4=7YR7-}zoEo;NVo2!#LVukKIw|L`ugFg7?gwR ziB*h(0hFJo7F}itr`v|5`T2NArYk=u-K7j8wV@3O1$CNFfkcp zpeFbO#)N%UEVb1cT;Pj7Eoq10=jBT=78gF42a?ss+eh1~GdTkGy;A?~72`i4FyiCq zL!ee1(Ff!OU?(`Esw9dXqY6I=E>Cqk-8V1cQ}3P$Gt$3+sb777Gqu$YF083m`Zz%! zH_HoGckq|YU41N#k<`g?L=P2v(ILL5N4`GOAzo%_2`_V{Oi=Y+xrN}OONVLWhnxc+ z8oiY5sJ75$rPV}6%X1=b{(7D+98eP(%#mrOQQpdNb7QWHAnSt(G7vefCQ>i7ZOjTQe}81g{*YAb65E?p>zb{rbqS(F zX{36O?%wbZFJmnC$g^$Sd#Q>+;Jx6k>7BXBPF{iE7)EmdX4CGFDEy|Dduq>!=pn>Y zaTiTlGnBPE9Fd_9M`R#rNe}xrJ=}CzMxA!4ETCK9Jn{Ye37I=A4nzHtm5vW)g z=MHjJbn$`cV!$_soN2-lA`uxObw8W81m*qx-%k;pJ~ooSKS$4(r}_&SB0ZRu&&%jL z0wZdxWjqBXLx#U5w1byd7jDVK-BYRhy~(oG1dXAT(>>#gI*e!AacR#b$9jX!NEStj z2{$ga?jnS!{hJUnJ!)9%cCja=`g53jfBWYsx_c9d+tNYtcl`&&QeOFVJH=8`zWGUN ztz`OnsuG2Ia9v}4KxrEyYMjZIY-T9%fo0B!>flZp8NU8je+>-Js*|Fsj_iE*g83eA zz0O5+$_14v>5gxmPou#hF`Y>Kq@2q$NPQ;tkSn*%?1|RbLBkWZFRjTvRNQ+?NFcCtSNp6$Z;Gfddu)_rJ{`H1 zed%EXIs7)8IfvsVSOFz<)XLX{cU0}maum{W$wW)WhSL6mor$(U25^(Sgg)Yp zabEuIw?E}r7{8`JQs`2^){;=CT&y4+>SzmICM_V!Oi$pP`hcIv)C`;_UtZT= zk^&<`6&;R1YR{M?k<>u%Qt!Tn?@anQ#8aI|mvEPfOrI@>Ky40C@3bM2?gaw#gwzi0 zSc#=}-0Z1#a!;fvT`hm-S;{45;An3T-i}N=Y4$5H23^cRln8#gW|Zhwo~l>nt0Z{1 z)D`@MyWT(NMkR!J^XN!-Jwt0VTM&9co{3uAf6 zy+UuvJWBZ2iNOh#ce~E_R9`J!VgW7we`tl#K1@%#Shn;~fu!{x_03cDtgPZ0Y4&)K z$?sD4)yBsoDA`V&F77fEtCs82UKy^cyX5w~Oj2hUcJ=jsk-^l_M_Z=y6eFKY*fsSqh*Ao zH=b+GUEMGW6C13L`lUrsNQ#aI`PB;i`Y7ak{hvxEU(l_g{1g#&+!CA(~m z%WPU+TSv#c%4=x?MUK)fN}Ba1u399w)VMb8@p@C>SsA5>C8ENR2%{(nCGv)>o7J*9 z3*DBF1X94bmxt$6;S-kl^Ph0WBsx4H6sThmJ0psS6lB?p+*Y(F>|Lb`JvNZEM;)FO zT+WJJ)97uGBfAz2g=+NgWxHdwb4I@^l_pj+dJme*l=(PhK3dJk5l2FTmL=4hH`^rM z^=}Fr0ZwxfqAI@MCd~3X+1|09s=qOz{)-4aA`-_$^T{Q(c#_Kd5zwG#s^j=mI;V!D z2i0mH3wqc=j_pXgTmH(#C2It)<^r0OScLCg^A;Lb_<2$AMalXdtHKT)RwKS_Fgk>% zO2S7wL|}aI6?4CNT$`8h^E2YJeQ;aNy|I90>~AE_H-M z`+e_xQV6vM5G4w}q&HtDeS`q$?iyymbhk3r-SmbX@$Oc}yGzDOmhP@L*3jLcUw2g^ z_fPCs3Je{oOBSSbC7Q^xxprXNBXuiM8$882~ckJQZ0$0HX4@MeSHo<~FW zCF8jSm)bZBv41YaGK>5GL5mZu?FX_vp~&_Z=S_xNY93LpF51i}ztVC+fpCof9~DX_3aw7!LmvW6^8(z80m81c~W) zwGf%*()KTG0u-PwI?`JiuvlYk3|3n2J9=J>wI>GdB3bfesGuj^OcM<@0;1t`i~Kz@ z2YcB_faXkOyX@fzlI>D9vVTAWl@(DoGjaTQss-Q(@A*fq-}Gt*P&{w3XlU3d1E;W6 zp5t(IBz?=_Si$;!2_i=b=v6|H-T(6cm;HZ)r)sfYkTSsu&9|a!=psUWKJAQNhsKIe zM6$TL2Z#&CB~F=v!NJAq52dz88>utT=~Ky9zaHagf=I!r|1&%a%ile*>pWHe64tOV z^&2NN93=g^m$~ZP^iS+ii5ebzQ1CaBB&`--Wp@a;!=0*7cjmK_m>a&DlmQHH?R~^R zVHoQx21-up7$`Hk9#l~yN}K$5jqxCcH+*#kh(0?p1k-3fAbsGAc#pWXum9Y zDjKce5eTbkZ}dt9Wk*Y1sBXKi#-!l^rn}|6TXls(A}UZq=<_?}0z^#>18x(jI`#Z5 zqYEz@30DxPBI&3&qMV?{h@V~3)-lDm zz#*N%)5U&IJopjv^YSsf8gaS0R2uP)iQS7jUVu8janFNH+#&V$F0CIu?SG40$e1G0 za*mwZVouGw|25;HmZ}se)7c{yFGgHoifF#@~XubMvBVq>Bt!)=!1{uDphte%v^BxY5mS@Rj6sxk+1>oH&gBs58qJUOGI6N@p%1=RljyvZLgf28;4syAzLz`v8AAQR42GMSb4Eqe{aA?0rJj9XXlaZz78NU^ zR}tS;b`V<&scbBC=~(b$*=~Xt`>&O5Xx_gW_ikvrQ$6=TB0QH$bnp>%k$4X(jDL?mvmAshUvP7FIg{cs$^WVi=v*X^*;aj-ru%F?Ig2@z-<$XuEP2NIs(P_9!&%s&JXsEQqWeGOl($vj5ho~QTf34G)Q=^8{Z zv1n|0l4oVTu)cx36*&4<8937F>sC#^9DOcFiPX;Cu9W_fS>kv<$1&1f@uf|=#p<8` zWz+2rbHHq?$!nooBGe=WbT9W<0)K{XE1*b*Ha|UR(`J9r?c=oh-zTL_i<>oV?&_pX zsIcLAs8B|uB~F`A>=W{92ES_B-0+1=TZTPt@2WMA$+V@&cWCufwSw<`(`Kp4I1rz$ z@4eB3GH>9eG-aNxDf4XqbbEndqYQ1&Rb%Lhhz{f*v;Y@`tQ4ol^ZRLPEHpQ)cvOpwQ>zLZsrTr zDC82O#_M{g#?t0n5$|+J;~xJq!xw$(5J?Pu@j^IZR^3GJSZaJdP!}$10_S>%+^GEr z!ui;@H>*G5Ot3lPBl^&0fmq_BToGF0^(HoUwG*~ z+$3Qd@Qv^Ck`T}w&>u*>CV82p4d&h z_0=NDQ(cvqUT~5;a&`N}nZ2MlNrZLIyX4jO0B?$I5jo)LYotU0N=l*~5To*(TtACF z+8{=0prqLK5?WZ)no}Rl@UMrc{h1FuoZ#QUAG7Ijng{AD7CQ^WT->ACTl#2L0G3?( z%>-ge{8L6B*EmZE0LRT3RqqpxaGMLHrGw4?;F!JJmZ@C0E(jA8pGId*1x-I=JB^3p z%&=x=<`lW9OWU}B!OMDCO*_rFt?*@ZPj$9KS5MIBVgZhIpR)Zf`7f}C0>nL=*y^D{ z!J%``!kX2}PPaH4K56Z$S5B$cyk8eax#BLeagkH@Yn+V%b0xPjaJp7;B)|vBYu zlrsg&DR>HbM@R)FYVdb?;cX_Enz*Y-S!(?!PGYblWhpG$Qfn!NK95l6G%!S9iD8-E zj%IP|37}h`kloP@rY(d0Ee@B>)Z>0Bfizquz9-MuBvF7Upv~aljq(L8wCIo^M2*P? z(Q97((J6gcoIppCJQRb}dc$Ompl}YIr$u?dkZx`6zT$u1=H?plL2Gc5}t=z)O6Clk%P)wfAQ0m|Rr|JWG>KR=n9fsR{1LhI&-HNOKNCw~{dhUYjo~%@HqBtaIuZ#|87l zF1?4OcKVM6uatcQekiNRq@$~0&U2WIR!8u*N)qz05X$^YBEJHG8gYqS~PvS0VJ(+1iAKR?B9&`M&XJ z=8nLrD!d<&&S6#QA7U5%U80E8ZJfgWp^@S-xBRd_DKPh?i$=d-e7FpC8{{xDR@|kk zs!j;i9oA>X7jg!#({`T}sBdLFgBRFb5_5iYTN-;8l&N9za=wI3I>P!&({|kRiZB5_ z^{uiIN^Z_yg?!>k_MWOo<@^28n-YOgN+>CbOa>gPMCaI-ME@?&Mu99TDOUMu(nzQw z8}XN8i%%cy}3r0@dA8f?Cys|iNamxuuI9`dfn4ez&WUI9tCW9*NdYtDs|xD z2Yg5))HHG_4!c}7AnpN1h_bT<46DXu!SWdW{*K;F@<9vIgeI^xg1 zhR~Pn>F_l}aX}3Cx6l#XIaeW8P)g(c=T&9Er-M z7@?d8A0*4htKV45amxl9Cz9;q>a0VktCA5(TEBXrK=yh-Guc*59l~g^M%}}&km$Nw z^vUW+ImwO9EvRWo`^(kmZrX$FoRDu-lB{p<^2U4vP?oO&${KZwg`+WFR8>b~e+BQ9 z=V)xVCUu7W*cUm8|5yz%5B$SC{lEw6YVrp(|Cw{!yhk0)Qpr#kQ>Y#xy<{BT9gi3G zMBA($hCCx}o)SF85-`i4=@cam$~?0M>~$srL6rI=#4D#gywr`F6*difxm)xh9w10e5N-1 zNU0ITB*OcS4rz;qo|j`7i&WaaI3bGq?m z^%^fM{>0cb!bMf;Ra)x)m^C}%kNF-aV*^=2eZ9|w1m}F0e0aI`OiBotM49aBAwfBnMdpiQLX6uNoL5{^a)_bUe+! z|FJ*iSpLb1FR^YH#OG7H*}r45x}<=o_4FskP9pmvw28b_Qds>eFdHU|ao=AMLQ4wU zwsbHZfgf610Ms~|JBFkumfaa+SYWY}!BPJ8BIxfTs+A?lN%DCiDwv3Y9 zP%KG&j6^iw9lAOiNQ#1RPUn*w3(V%!pMX&9?l};ykRB!=x8hX{2lseVBxk${^TI~p z<F^V}KZ z4SO>CzcxVMa_!TEB>;}OE(z-HEwqPG$M&{D?YdNUqv+GIfEy5C+*9?IRJ&Jgxk4|u z+O4`w)$sTu&3nZD(qDO>L#d%nB7sSWf~V?3AtexH7IwET7;oJP#s%$bilG~)daC~* zl$Ng$AY^Be&<=KXq&i)nMp<8s!GDJcg5-?(*Gh@bc4`ivDcf(_(XG8~zw!k0me6SV z^%@;%Y9~6PYR@j>YO=S zf}fe{-FS~D*kCCO{Y4jv#-M7?vsc)F21pnybn z9w1rGVp5VU=dPwD{RB;)b35tNcxI)}z-GNzH)vesqt_veoGyZ&2oqwv%#DXsWQreg zE%Jl0fK(>qNfAB}f7jbQ)j9zA?i9M+J@nGpp^{IUx?8qcaJeNbN<$W5;gHV5!STaST=i;T=>4S7 zfn*=3(X(-pmfxm+H}-X?r7oP8Vr?}TDI%6?A#Hz>S*&FD?(0&7?H}=<$

    zPZOa* z(!fVgax*@EjE_%ie0+AQd(M3e__;~PL@qPev zY`wf=uugh=AXy-7>WNdaUZ<=CWoknQlEQOv53ZLw6CNy1SF**8=vjh{RNOk58JG1s z_k`zc0_Z=N_XpfJ*ngXMgQH~_IHEM9&+|iqTtkb4x!}@J#b!q^y{|U8&}BC#*}%?A zUu{YJYl2m_QSMI}lThDGf_WWN15evvre}6ExGox8Us8UTy6im0JCETy1RPDM2}BwU zxib9CzY=?C`wZ9!TTSS0Jaei34e`;;bj7HxB!&0~4BZhlQu>0stsz|06#CM+cvQJF z;(P$M5k*c$C{n1qB-`y|%w6OP=vPaKK1Z-*z`D( zs0j5lzF<1ATGjUtzZ{KT5xpG3@u>@*k6V?tV^sPoqtmFgl`2SbD=g~Br?fpMB_{=s zA@bO+5;cY9V%Ddv$P5d@nL0M)1bLRuzo|C9ZM50G_N|z_aBA=j@kVHHbc`p2Z7%ky zKRk9ciukTG@+G^Ydwz51&{%Z+Gy+Zb1sBpeL{rUg0Fn)nHDi(VRYIHtW&M` zNR9VEt@jIo`AV(vzK0hM!89Bs^HRxOs`gd!12WnG3qEnVgnRBa@FTNckr=DJ>R9#e zXk1XR7JXy(2yp;9#OF*Z%!++)jVuLijq_irLtNdM-F#};f6~ng>89MJKCpZ9-}FYC z?GE{~Ah_rv%yx~R^!mpA&Fg|mxE~RmhU5nIYrCPdy1rId`DfXo2725nB1keyWD<*= zQFlwQL#cu2BYVUb24AcUeA_!of?1SCaAI^(Dw3%$nx!5U7O&&ZS>SfeIa?cM;hHDV zwpkMzoyyX+l}-88?(yi7pC*O|9G5xA0?DDP9l=EEYt%P-m(xGTxW=qkiO{K6@GMWk z7Sa@H{Z?x<3**725m;97@if4l{YzH@$>x5b3(}^w2vucu{l5o?K1v$&d5(9@9jBBd zgc2(cqhF=Q4w3C*bvTnUjaG1Z$h+E^&kKlIAsk$u6RZjT$|?iew^C&AmVRi@#l&^2 zumyRo=VN`8uaUg5KF`y6V|>v?8PPkOvrE*DG@}fU8BZPD$U;U{g&90c1Am#U*AsnM zw#GdBE6s4aEjZ*kp?f4ni9IS4`BkQ2|Y+Mwv$Ik&q5mxZo! z1Ty7loTShM&WX7TPk>??j7&cKT)>!GC1sjRJ+VtK4mw2%@22x=`BU;&$*((1jVoEi zX?_Xn^lw^+XLkHuk939u6^o_v${Pn@J|MfLW7e{5W0_D1Klt6#t)iLA@_L(T3H48S z7OS2}U`UB2PRA=Pc?cy*Xus&Zw)Wdo^>xQo-w~qvF8cmaTlJMpDX(dt{UxoZ&KtKc z%y3z6@|?@^<5Oc%GnKBztWN#+Tv{SbUWu> zHfy$|MlGd1%riOO)&-

    XLqOE4F^W!cOL@^{=dbVz(}92v=+h2RBbV!&5bq#Y`s! zm@Iu_8bnyf5B{-$+WRxzT>|E^=Vt~kx00=$&p~{YIT~Z)%j(;rNDe!Ek(o~Q>px)a zQ)`DmA=W}teMDe|ITF<U#ugv=D- z&7I{9-e9;{DpWF%x&s6GCPfXtvrMp|jw4D^aYMJYZ*QzEiX@z*6>Cn@Htzx5Sfbq+ z6%tHiyv*GQ*kC?3us5>ErISCg8*aDm7cR4`aSVTRW}3ycONFLA&A#gtQx*3ez*?0M zo{Sv4DOBKe;|!vp27b!Z{|<8SoFk$GY-Ml>asl3ILe499WJZ?dUPybpmz--YtKA=d3FT%kY08Ub`h@w9NC5_eBE0tb*A^ z)p`%qcw1||?;-Onan^VbTLN`S$Ai7raM==SG)|^{FeL zBl()dG0sGPjI0q8S@#@?b*;zx4jmdVE*RLz*m%w~_Jj^kwYa&z(E)2>5B7lJA$mi* zjM~gGZ3!AQ_7ZDp>Nn>@yUKO8W7RXa0>Qm$XLMm-V zI>|1~d!lt*`>d7!z+e#|1wGcMmcA#0sfcbv^r#igy8X4@!#eQ3#``v+C8QHBJ3!2{ z+@+>9i2$huXZ7_fXRr#L5|Xip{K01=VAH#&#HS8&h+|zM<{k%20QtGmK_6|$+m^Aq z7VI~9k!7ePqhFVn3}#tLk)p9-?^yN51}*QLrJ=6XEp5%l8zo`wW)Lz4*@M75>zKDA z;0wOI53V=fladrV1fT{*A3Q@PCRTS}Lo1_uOIUz-7Qc8K!?=K(XNQxCuSo4#&q2F* zv}(j2Gd3O#r}_D^Ljv;9$?~9xm?RmlUZq2#(zV}ijXoZ06^%i_l;eUi;fE?Y2uD`( z_o%}axHUA<8T9+#5OM!@si#Pd0!|Ts`7V>7k3rUyTdL(Rbqe@fQ+=I2zC|C;;V%^m z_zMz`{C$2de}VAlue7TM{D}F{PmEM=lv9Sag{#-{#Zy`ru3pChdQ!N0y&P1p;4i+O zAMjz9x96K&+^BzJmVv&pb~RQnS^QaDRtS(yd8GVr(Z>C5tuU*BVRV@SISy{bY zzT`^yzbjn5nlCLLUopDb(vO?zyZjJ+O2#izT_acS!l8D0`sd&z$XDUx8CFEPVZTOy zp*KO{6wW)VnXF9*5z$s2P_5F631B#*r@hCBG5QJ?QFjWwClZkktI{Vl{Vj|>rKb?Q zwIiAY7notRs?8)$04%F>#+2+L?SY+CqP2P98)cy8b&up$XM^!H$ktd zvD`f?k3jb$go7_S&7Vg%4AjF9mg*>@yfF-tH7`Ry{m;aPT!dG+v$R)41h1ucvt5bgo*DN~1wqvxMV#JHp{KH9f<=uy2XNRa4R{c6x zhYlPU#Vzbj7uy36C`7bPh14vn?rFr-8JID{!H#e4eEl$;A~TG%XPTl>@^LzvWrL6h z@KduSB3otjszb~nXMVpq+UD)h;U8sEUv~Ng|951M#5BH;aHsv)NA?M4-wz%U7P(sQ z!5Yc0_^_OUtIxBiqbP3*moeB4a+|t+i|GFw)v+M_Am}pncbd2JE_w_!UVRGBeX;FB zyP8gldfTs!U}&PL;=t{&q@;>EZT^Rt+0rGGB%Lm^C+gSfBV>r|9w}{L_QmwZRyuKr zG0<*7tu&Hq&CRfK$3&bVLaKt-qjSHLiNkIVH8w=Oou08nlhB zh~Iy;XDWFsG8w#rPG*@Qy|v#$`djUTXYexN{=IElW)*C31n?KGiwBLyY+PG(?E=02 zGl~h4%X(2eX4nlFDhIi2*+pU;>;JfeISrmCc6p5Q-XkDhB3=}XUzZddsj+f(_8>K4 zxuwMgObSjZF1RPnI9U1;Z?q+Mm$4+BH&m~L(^!>~G0}9*YfShnV!NOF1M_*xh1m5cO%lBFV-<;*d({e0Hs#d$iW!`G# zx(9t0`Y3r&E7Vb1ODT_Sp#!@@AMM2AkI3km+A0CRQn>Y#zvF{V(YI&Sb!!0R?m=4s z8uGR;d*2~Dz?{~=NdMU67^|8z3|58BTe@M*X??t1HUOU3{G?1XiOC006SH;h{bz{9$_U+RXs8ZINLQod3A~IIFE*e~$G3E&d`0 zR$(^l92L3m=$6dD*^K1qqxG3g*HiIpSN-aQYumQyp*i0SBoEMENBaLBzbW_E-EX>j zP(67BKBVRYK6U>sga=g|u!2V*GN_7pa``|ecLbU>ml4>m}^r;;SWK&Jmn`)}R zBz|pO{Ms^iR$aC?Jy00RAzZRB;0oP^T`SQ_qLtW2iT$DVLw4Q{T)H@mQq)s7#`Z~% z?31ZhQ;9lUVyea&hMvJVh(bn0pbSzUfpJj(uur9mmKVz&{!lsC&7yYe< zr-i+hmN!$>qF7lm!H7?{V;Lz;F=u%=SS3NdCl%9mFuyftxe00>U`=xYunh|do*KH_ z1t%-Prf^NO$mW47AxNr&SVc8pb_QgdELx8ChaCg8FU?0)!ZVq4AzZuuz@CFfEY9Rz zYcw3-DuXE#_O9`y;G0{HIo!7McQ@q6fMvY93Hc#8^dQ55aH-74A?Af|t>#-Nn#}B9 z5a&T0x@h%y!@^}XVO_5zyDTkmsvS)?WF_(r_)#vlvpCqn2%UM;bNkyZ1pg7cQcb9$ z(%~axOc2oPkcO(vM5@EIf;1uJUZOY{M9a>J)jgWR|8w-J1GJwE1J0rls8t zr;4lWSHInXh_*t_l5OK50BHA zsKnl{2q&w*okH&}l-{B6G4)R^K;wB-o&4{zAOun+)XEu0!DoNC=k z;vfZ+VN>CX)hhK1z3-&;42h1jT?S%eKTp+Z1Pk)0ex#>{Dl*w@*LbRiv(!Qrbq=s{ zIg-(n2=|D0jZgjgOOzkkgwavFYph%eDxQ?(ss2EQH&}P`ioP9RF^}`4;AB&(p!bNX z&N=`a`-&`W`8A6%EVaRR?tpTFtU?hBzH1d_=1fZsd>b#$HIHOs4hd=KwDkQuu?2X)*-X;XJ$dxhNt>5j;xA0LE3sk4nwJK{%&XXYD0U8 zI;rtmwV_oWIrvM&yUM4$7afmQLh!-lZTbRAr!{WVS0o5$v$qXjIh!jSZ}m2BBSlXC z_8pRrWX0Y0Q-p_#HCATmc*5cZ6Q7f(5m6u9XljeA2R{_U-S1lOUutx>>51oF z;qV$3LH_J$beyDi@XD8)AY7FA6=uS%?f#?MHj#=y{2nH^qRQG^o?OZt9(z(7=i!Xo z)xS8723HiT)U9&A%O;1LzbA1DP3ot=5_`smaArIx<)XLEELqz?=_jxt9S^#jSX9E|U;QemOyWHklpp@+42y>1+ZF?;TU*W>57X`AP%BXyBx` zCXxtv2kg%XrF&(sBI#^1tXl$ao2<*#u1~*#iE?#zVqld27>m&4ojBITONE=Ja$RB& zL3P?>LRmw{#DjlKiYXoQfG~AzNN^y%zpj5e%y*L=*^vw0D|UWQ^-=@|&5El<{;?`H zA@98CN!KqbwTnU(YaNtDwinid_850g^WPVLGl!>(xE;H6LhRDOxhzs07`V1n?fkWd z>hl$=jaTtF6#rD=F`prG2!~rsO=k^zy@AC~DB;EuwfPpTkHkmVFVzBC@xqM3YKyVlZZ=O? z_P1aDjCuA{7tu*MQz*%#ky)>WzD!(l3EeauMx@-RMeE9Funzn6zqq)w+e_b!bvtzI za!>U}o@45BXDI7B-6t&^c&aSv0kNRPxN$blwwAJhM2@rmx_$yq2KCdw?TcDzwnTxK z6JbFIV~RA%Ve=4zMKRErU|0#tELx4k%m3uFU8mN3E!)y+^aU7)72F{HO-N$0yVl!S zGntjLB7A2``1-W)Z4>r?3u>lxRtM^1WSnjw&I(F!C^pStxj$vl@1Ml%^p1me}2Tsp^+%*tZbpQIqG zXajn)PYwJf2#DSdags=nKh4aJRgcUN@$C$KnY1L=Q1ss)%7CJ+yzwlB6>AvDtQT8c zR%zNZ(7Zg{F-t;MMQw*tJ0I<9sSefcmh7%G{9EGW-X14+o+pc06GZ6P)xqKXpkD?T zA+q(l5?}MhOkU{Ns9;`v5k!NViq+FOU8w)am%Q9evDwB(rF25~Q7P3b32`8ejALZ7 zsNqJJB>UfotF`p=f4~RiI_gfd*|f@Lvr{eqlb~ZrDfgYKQjSTlT+MNSW1CeU zn=iZ=lJ^VTOLU>zwCq#6mm;jtN|Va(yn4I7dh@p2n;p$pO3y_=bi>Y;l2viDLw)th zH}W({8zS~@!c;(V7xkbw?2F3auMK_0j?TI_K1yOMpfyMv)rG|h$zcJKo78Pa3t$g;jZ_Cv z8&-YN^=zbIs-$}jOdtrID~i=Z@J+FdQ3iU!e6!Qq9rO>8{Uig=x&H_JQGY0JBca-H zHZOQ2ZIxpe|GwhifAigu;GifF8j{ng2Tt2xuIs7{x^$ogCaSV@JV|&h>>z=#cLT2# zF56hzhaaR1HbHi{V$TV&zIqQXhyhp*Ci9~JD8jGmZ80F2oCTEbo|aSDvYyTsctpw3 zM&`z;PmFAyTa@m|T&dnSFQqog`aB%mfmL?WqJVQ!ad2QIz{&yV(+Mq!mmb9fR}*a6 z=H2ahW+mf+72}Y#)x>w#rd&BRII`;1z_40h!j-cUKq{+C4Am!Ay&622RoBuF6tO0q zVd;cHJhO_st*!s@J-bn`o>~3ByGP)HpINK#k$l(x_*pk`Ulj`Ld9u$350$7GpaG#RMxV9OxNL&|4Txa^=Ms9&4> zEfPV%I%Po&2(ao{v=%y9$)I@q_BZu=jD^@wdwz43yG{jGS#5ZP*_2zgyCHOT2hJt!)*>% z5OUijH>ldRg4E>Qgne_tgYowm!+Q`gq^;r%8xpGk%e3y+TyU$5;PviEo(orX5`)M4 zMiwSO9#dOu`!mGXSQUGu^7&}`BLk4E#?becek#J|87WMFM$k%!V27SoPi|I|=jU~- zqq=-my)Jl$!`U5D0+FXo_WKiU}T$V3G-oI4s z@YFH0`>iF;aaUNsnal6vR$a$msy|cLw(XtzuM%@U5B$u=o2ou~XFtN)V1hGKE%%ew ztg+ThuN))06{!xJR|!B?A08C!izf!rc6Qqc*p@%?nZ#3~%G2A?f% z=J>9P=(7u(CCoR zdmXAhQ7bf6Z_9;egg)r7=DDn`ue5W7+c?o0g__XNPi$s^Z?PbHw;L6!-+pXNbaPL* z`96JfaI0kiO3$G7`I1=zMQZxrr>bh@9f(XnATh9eaq^jDNq5dxPgR!mw5YvUoqp3e z(Z#CH;)l>SCvR6Rg>{W<8IXAsLy9+09H2%+Y-&V9e2o(#n>r#hrZN>Mh%z7&Mv#t| zy#x6mWtQ@d6Kb0NSyl5|)4h3+Nek+0~X{~!z`x+5`_NvP3B>Hhff|g2B9DPNM zXva1o(A|RLQvDY~Mn<(hB++l$bw z)3NpKRQF?WwU7uQOqt`wL(Aux9@J@nv=0?SxOd@sKK#R9fWjLmVpGEGP=ki`z5J!R#1<1565b2uRz0L4SO zjtT@g2aiNep_h6I=Qc+b_?XG?6N|M7~# z>e%WN@Vk~L*2hD>iy9~d7`Qm6s4kF1`dK7(8M`cb!b7ZjDTc1p!_(GBTgJ~KU6611 zr{(ME@yngdSU2p-N-dTXOiMJuUX+cpH2{z5-C>sIxO&9Xqs@=Vcm`crQS07Sgx^oR zcO`!bOZWo=W(tp|ovB^?`n1qbrPPq9u3LIG+s561geL_@M3yGCq*hiO7f8qaF-IMh zn_S%P@wV%HvC$grai9jpXqMV4)zKH&DmmZQoS`3oA^>=d@alF7;hh?pu~&9;ReAVL z%*2wh?QR)RqGly(fN$YVZmCizK*fO|e&6lFv5H*K_)sp*X${;!c45w(y1=Ep|2Quo zu}$>{5_9SoVTa0CJWyugi+OF1mNO&H2t6ZpCOTVXH+R5%+_vwq5!svn$E|j2)Y1T#56gbHlz6mVc>)vw4){ZvZ89*6!Lk% zmG`=Hf*pYz>kNivNO^*UsQvV<4E!0vGsQzF79^}1>RFe7s{{uNrEvWq?rYhuQ@$@Z z&H7Z^WZj~iJ_{GIwj-q!Q>XL{8568zl4_qMuO^TuEe<}T+Ph--1(21n?pNq}}lwg;PB*xeC z0y=8lBcb-8OWZvf@iq5Q zQ4wNvRI+UV^@_t1YyC!|OT={Q9b*j#VaM7ME?XTA*4YkATz|pg{xjjHhRv@?5r3mK zTo!84Mj}1JbJkZ<(td_yy?EF5q37b`Tgx4K|AMpll|_U@nw*|@LM|xp|trPpqYt`Fx0@*Vf$=lbl770 znk|VC46_jqQ13DN)@}mq7GVx<^sZ+FfzLqkV3!*!hV}Q3W2}^%Vg_n9!2{x5D^^$X zNWv1tB%Ufy53;n@>u{#N?Qorz@Y}W+jX@j>C!rAC!OV|vv)l0#o~mScxHwfOLX{!9 z8oCqzdIbgGcwczmB7yU-!8PmOAOh?qlFLL9Nh!Ew1{Zn|r_)|QrxRe+i++hbI)F*$ z`1>43gAG!+Fj(VLbDwOA;-XmghpzMb+B7q-UsVWwY*PRA=a*TWmCwkitxKXLJaA+N zpGwU=9d-^M@ixeE5RfXUxGi_Q!$FVFwJ%D#ToZZqcFcqJPZ=1)Wmq?L{`9u_sp<=v z8(z=nX1<)(z?M{ea%6YH(JBX9kn9_ibI?W z^`8(|^J3-u31~Pkp-imTCU17S@*CAvAO4fUSwAa$yDNMr!I3P*l$z^Vej8Nr-QCUh z->Wl(ko6*MY)}(=oX)pTWA!ao$wa7NlNCj1wV0@bV+r7aHla&xudlOd6Iv`$U+Q`Y zW4d@>zWg8aD0#i@#%I~E_u+&_?fiU&^=5|@ua&4LO>YtH*!1C!NC#h9z~3;O;rF&6 z5=~Mpi5j5!^fANfP)A0c3ESKx6E47-0Dk1lQ^i7rY&E8FvO#H^>=H)RI2jU^4_=0k zgi3g^#0IhGbkRJinmu`7BtOlkG0pS}1yes@}F+1KW2{dZ-ifrIe7qy8)&*f9+m;<+wdiMBALr;6j)(&L`J;9Og5Jgs zPBrY#eJAWLxWSB`Ns&-{53|ZUS^94_cP=mbKyJW0vZm5ZA4>I3RxMtmc2ipH*b1Hu zT0YG9mw0;)!$cX(Bw=B<7?4Cp+Y$> zYhgCy+A@kzMYtngKtxKwulZ(9kiKp+ViW+@DPwNtZ%p!}gy6;O047vKJy@cb1&YKe z=9dyx75gc8i~j*ewMC#mFTQyNq5|mdb4(_4t2o1q0)C$QxOH$j8;0_b2Xh5Ctq zqggY^Kl*8WkfW0sH7(6rtGBlHd-SA5bH%xEB~%K z`nK$&H3OOhrCY62s zO`(+^!{oKF$l4Hjag|7r>!DK#bc+iDhARId?i3LnC73aLxe*;9JvE+Vgh(wqt|vbe znGw-3|Dmp; zOZ3XA5uGP*JaJz1Q7x`|M%ISqvXgsG?^WElidMIXA3Mw{Lsn{8Z+>?ukYH7H*yay0L|O1*x8 z(Fi|hUlrPzK2}C-S-p=Hrv}X00XPkz1gk_U6J}6=KOVCKBPFyjlbbAC zZZ3@BuE))8UWidG#t7OnL8FuC?eLriN%hAG4mH(Tpq^_T{Ar2CkqP<6_?wp`{3c1l zZ*Ed&z9ox#y)h6TtxqOAY>lj>PCR8&vewItc^g9SeZ`D~3tf@Iw8mU^4W73&r7<^E zj?{UZqtTOD%ZaDP_>$151u+O5)NZaR=4HAW;!LS z$+5=)T9kAii($K{Ko<(p@A;X%J9?_#Bsj`m6j}m~t&77&yc>6(|E~;k07OPM%;U`w z5R;yza^%ba%ALfNuoM>lUS=pTvUw5$aTjjj8isD8Z|HO0KAf8+cd+OnTeU=)#oocnOJ2$o_ee^BmwC@t%)hQ;$vX_b!Z2u%~K)7~A`v zWTZH0MV)!hhtcNC>}!J?6^%D;i9#{QN1xlWONLOYptQn-q!-!m$wIp zL?*l1_KvDMyBCRwzhSYR~s+~K=Y)Y99!FQVEFoh)M?_OTwP|2uZt)_t}KpUBnrzZ>*E zzUr9l&o*B6bYTWQb)DGBn$*_|^cDB+(F(w|mZVLuGIrNKie>2Cr_=V@5#1$Rss~ea zBn0w^cV`O`r@M897(d=e-#3&hLK&SPn_8vyg4#uqKo7t|he#&86p_WA?YVI2kFbR3H5}uI6^qCtj4R zF~y15ljXB2t_*eyMelC*9Po%1K4gDl=C^B8r?+sPX*9hirOM^>So&$qGTR&oa<7X`Cm}iV-!sFcn=QlY~b?U*#MSxlX=<%&( z4Aef9z+m0c{>Vr_m+|S(xU-^he#ivEa?hJ7Ao87)L^z2|Qc3e33Cm?ru(KLKnDm&M zsz|tN{1$9w7fuY-(aWOH;S*Gsd%ia80SkP8O~=BeaxUMQ7I0 zmMi`*Po#lJ(J9118iWHkFYt$gmM#d6-XjcYzsSN2!K<^%G616p-Q{waY$K`zaKpXp z2uW!L^|F|gYSm*pWAaujhve)gv;6%uHZ^|I&wO|M}YN)+Xu@&vHpcZUv*C2m<1tNmf`8a6u5 zP?L93v^HFJL=d+Q_yirkO5Jwm8IJO)jd^1rW`}bAkwwEU=4?#5;S|C$Q}kV)p?Mmm ztBPClkS~^pr&D7OTj7duUIy77;k+@m-c>bu@T1k?yz!QIO*l{3H}Rpg9;(;?Lp>6n zJEl7-1bwHQ1Z_wkHxtl;tRnhg6Wu00f==U%-i>Qey_CT^WzUx(*i=3tTyX%(k9B$0 z<8&E8)Y;g-kS=3~2?N|vR0k#?mZInYW$9HK4D(F@#p9k4}|l1{=slQ zT~^`z%uvOCM|hF$=AL-+QhA#C_d5F#$hucjyR7k~1wh6?QR@5qM>=>ISIW3<%Xc|s zX<&EHup0OaczZY#s){cB4u~PxH=zbnHwgi32kk9+?0-_*L4ACXpuw_sI?{46Pi`7%Iww{l z>D-L*)~}j6JBKda?o-8B8@R{raPLm#?FOzS`z0-X4P(>#vr|-bb#vltxPAi{;QY6C z8llNbCPL%DaRCxSWqW{~6~A(Foc;AiTeklmf>d+-LXX=Y&_Mw^U(oj;f0 zrd0n;!tk3CDLZllwMVqW{%BrW0x*<$nDY?BZqCktyd-#X(#db5&N-4s#90|hU&ak( zN7Nv>VewqHm)@U~ub-1I&)KPtUy&g+DItgdf;fn?uok9RmurM$m_C%+!;MVtal0*9 z;Ad_pLNL#{E;)EE*oP6Z5=Z^r0jZf*;pF;n}MAY8`vrKz)ndI=cij!^r%kJqdG;8>NUFAYcgpya?J$F z%S=%3rt#SB2)3KXe)5yVE*s*e*5+>C_5Q>TF7fN^?XX4t_U;xNU1j3i4 zuy(bN>I4o&a*tZOLt-q$Tm?5QsDyhCmRwcV92>~UZW7`v=9DZ;Z@YMIOjzG(f*Vw~ z7cGGjI!)@a7vIEW+%EdX5tcf!pY8JTzY4z89BoOz(AER6&V3?A0d^MgNs!GPJgBn{*C6}x%|73e-rqZ!@nu~o5nvM|4R8cpMT%u z-w*h=h<`ug9~p2-&VK!qT?10ge**`(2M_VsUwZj4=k=g49-Z|TJqwV_jNevD{`~({ zZ*lKioh2YTcOo-qrhl+w>;4@g5|UkqF|k_9vAfjqpT#=dhvZ5`2imFINUq*qH*|3r z_bRz+PqLO=;p=DEIS8gqsVVFObL*KZ@8EpaH|(-QQW6s|y;Vv(U~yZk<=6g&I$397B8%bF!+?F*~_w-Tx7BDN(X`Wo<|Lc#?Te{3&va zI(*jd=)47>`3tfYOw$)#jA7vjW*phr)ukg_qLpF?a>cHR29Ky8xV1*7eH*(Q1YZO| zVd@y|Do;>103;y6$_6Q`%lNrsSgXcz+l!Pb(u0ne%|wvxUSmotJaMfpF>sdF+ETY@ z?F{$D6y)09A0LUv*7{UjV*?j(acW;KGiec**#c|G{IcfXcqoG+m9@+!&-#G!Vz}3R z^p{l->#u{9nZ6(&h2TXOzPi^`*UEcbBQ&0Tm*{9+-%zdl^T|`HLsvQHlPn#JS4aN> zyHt!aE_M3R3`aK=%Dj)@H;M9Olo(SPz_t!FVjbYW9)(2nwd1idpFli0M~HxYWS9?a zt!d03Yrc&)ADQL@#~YTk{A_45oIfdClDjQ`Y69Sr;rzl#{@if>wc&i9ltIY9&iZx$ z?e{WkUYf0g_CgkOQe+54_{U3PP_mtuzSxrZBw@d)H8cE;`9ILl>tFR^u)vxUfG?d) zp_P^fsqhxDj{E@1P4(x&1O1u9NsPYXbWCxE)^e>G*$n5xK*WoU?Se<%jz$+3@*97} zF_7X@=Wh5nt1m_3v>&De*8E&lUxeDDd4p4e14DN$#rjw+C+00h0X&hOb!Lkv)PC#Y zK7dto!}DF%+#mm6Zl>the0NR$RLx68AitC{ubtn_vW)-L`vIxk8ePxIvQ85xk(B%T z#6#W_?jawUtv>3ot623l4rA5Vw$=ZeSs6&x6%5Z9fU%_>7AidNxqk|C68WBRd!%nK zIujPKwD8^hm`cyW^V3WYS`WBCktblDI1L z7)qQ4FbdjryZdquX?p6GSeE9$0%qt>>5q0^i3u+rp};6w+hT=vyR8SYQpNNf=`Uk< z45cQTi46p@8L!^(phqkb7D0sG5Ibh0_YiF|7P%@JLre4$Y}Io2#1v6}sJ{;C9Dyp9 z$0t4tkXKiv*!y~y70&ZRhccuG{&!i(bi=xWj?9>#OGe#|PXnO5*yh@VB z#Qo!{@iwC}VAl)>r8249u8MBqh63_z4ru3xI^8eA=>heRbheuU_k#KOdM>RK*aLe{ z*3Zv{ABtHQ@4{h>;z;mV84ihwceho7{RwbI`tMWk?qZ9-oLz{r4V`68p1Je|DQkk| zSb2tGixybH+!Splrit7Ps-29D7v0d$8!yThk&?$Oif+q)Bm~F@8zr4*_hJMX2(yGc z1dS+omZ%GeE*Y|BtLPyM)+ZNpC6{9olgoZe0*<5)h>=7toX3Th$M~A`#oBaMgG_3T zwlc-h@X>Mbm~hM>4Ln(aIYlh3b;cqlj$5<|@Sr9VeNfgOF6$6%zp6BOdPRySI2V=X z*_x4S5?&DL_GZuMskEDrlNcO?${pI`4E@`==+oMSD-(lf)=o~ia!NvQMD66nE2ks| zhlY+v1FqW1NmouuB6+71mq2Io^m|Tbfc{!n_trWf(WVRd&5C- z>BxQR>hBxXq;aIoehSU~q+4^N`)DpMZHTc%H>d9tcbeLc@*{%HB5AWn)daTy*!Pi- z%e4#UhtqVrXBQJO^nkqGNe%A%bqRLa(~N~e{fNQ9{(LzEQ{(km4Ur;`?3JmKMz*Wb zal^42MV!O``3$qvqeEoKmZfU=N&G~%IB`N%#@+e?*{D8hmD)-@`2B8K;Q0iz2hTpo z;pj;Emcx;raK~xX98VRu>vNkie3zv{8Np?|y_WUJsB-^*)V&RKRMpk^Js|-C1SU$< zD5ycBqM$}Wi3V#h42fc70131RXlv=1+7=}PSQ`zU8O?B+M_RGP7AkFNi!D{GpkTog z;UN($pn}kfEmW)r6K%8zK`Hb8_C9xJ@@aYh>%ZQ$URx&jo_oH}KKtymKOy)0=dy}i zlDFtVBZh(kwC1=6jvsV1BFUZpi4>?X|KzeH9HDl`uwZ$apVaJ3Dbd-HtCc%DckoEp zhX1$OIr3ub*%1Vgtq7ShXib^shurXFk?gm`0i*jB`*3yoii2v~Y=t2(v+Ohu;XX;m z9JBq1C=XgH<+?}mdG4q}xYuTqSuN&reIhik$^+x_D9db5@+Iu31dDw^S>K~|+1~J< z8D`DFf7O=tjn5fvUfi=jjw5wIeV>pfAV`t_AlEyh9*Hx-iEyzI^KjUM$OOyCHU-Pb zRa0?5710Nd;=(>Shnb@)$+OGmk;|!iFZWA?f@#gNw0>dE5S#&wAuidQt1^@^EY?;w zPL}^^+*K=K`p`TPz5XuwWnJP6wyQNW`~E9BW?ppq_mV8k#6jdvxXw59D*%+lkOgOG z-`zb?VFKvL@DUG5TY^_@^?6Z2@ak?LM1Z>=TG$|d6JOhU(G>@03$CSal*x(0mq%T_ z-qUOcE?CTYR95i1M|JJaYp?!k6$CYlT|WT_p|ef^?yo~-CUA7HRzRJvtOHh<=2HmK z)`)qg@M72lHj{)iypU#P3$z74f&Wkw#4lVB@uci_xXnJmv*wS$`yzSFfuk<$so4U{ z@Z$9DE(x1uXb&bR{SK7sTVxgl;1c`otswLx_?V4W-3kZX_kX3vtW=Fv=ZkOv!&Sez zd!3+_7Ih~3E7l9(6Xqf(RdJOt6&X{MG1U}}uljPT8y&Is!7A2K`v}lkjsW)L4cBUiAsJ zT;(?72RR-A|6MKMcZBk~X|h!rrph)J#Y0~|auNpNTnXd5AKT4@X4N$~px&C^r{;!rX`yZ~E-U+( zcfN#(8AJ@WD9Kn*lAV9DHy0CxG@z0PMPEu8r`4I!^XUfL`epjj%44vyL=s_k#2rIh zx903^;8z4{@%x6FAN*_(ZJ{a`?3+BNroA#!MX3MH9uL0xNaf7yekf3UEbH>I%wQY* zfETLT0lL|g_v{US59pD-aD(up5&yvI=;B(8STjjqTZTy6jo^LwGV|JKsl|97k0lP_HN|4kpgjpLnJHZn* z^Dxrj|EKv51*a$4TdiiEoEz}$tIiV!GmSLiBOa$ZQVGq)#IYS*c>oXerK{EfDD)Dl z3W}VvSsj3)74c)w_fV6pC-@CHkj2Msh#(g9Mf5WTxk<+`bol>pLEm{kwV+r0pDyUw z!~~B^Z@r*m;V290>~ohC!;q}XQD*(eGRHWQYv5jZ@U)BK@&Cm8G(`Ix4pX4RG7kuJ zw#<9rMYmh#`xCu*wVT@uS>~%)<~ECrlwlMigca~rJL`nv16KaLPVqsTrSA$K%x_xB zKw8_o3v&lK|6g#*QcI(i;>6Zf;N22kHjA^;x>~RIw1td`W|>%-3uM#?WZbJHT&=s+ z#gFyEt~cJo#Kt3+@KV~ysMzZA-EQ?Et+x94q6dzJ7N=;Yq<<1ng4~4h(2P1IYo@9Br{=NPJ*F?b-lHjSBq*FOtb3Qb0EzgMS(ZVA2`6#h)yNsz$C5` z8m?}U`7T`2n(9a4P%Wo^ASH(3k=PuzIiICyg5K2@1PKNgQq^Umnd>&nZ5mrR!Usge zJuv>Wzj~g>A9zqMiG*QL56-gEbCDeRP15!M3pI7`?rnJUct_^E7MsT48i-TWrl z{B8D2rZ}_rg*mkoj9%xDLbd{b*Zr~cTgO{AhXCEfCnE7GqP=E&f;oX)irH&N!vNM> z4|KZhVMi2-59rc_QE43@9vG0!J$Rs-JL%VSbjXf9(-V4_8_l^+c^IDhy>FhazJ1h% z*q~&Vn!+q^_}j8;9?tPp&2u|5G+BK^qWZwQkXYhhOf8&cF+Rvgxi%(9!ThT?k7`38 zq|a$s_uC8pTp~`1!%@jZ{A~&di@yOIlfD()-fiJOP}pHJ6K3LC{E>twPc)Am#&iw$ zX5R1%7PLC2*c$Q_wy;p+aCOlFVN>J<@q!AHF++S=PNGO=d+{+aYYKEFxNk! zWL30BV_)$IiL-#6=IHAp*dhGpp$<{yETH~)eqyl_7v0wPuX(MIbGf)7K>#uyEoi59 z5yLR^#^B968>J;wlVbO!El3*$J#>7?4sgP&mXVKw@YtafoM^3NzjP~18@-8)cV3I8 ztxSiGe1^FTlpP~x(5@e%P$po9!<~K78JE7rJ_ptoOE!1VZN1geN-pCZ!~P z^`dUU%OzLSa(n`bu(B=FTH(4>^%vAbE>7IU_mGABS!cPhJPhByvP%WO(~G&e(BTjE z11LVP!aKJhBGGA;5(aA12qs)TXaBz$*h=}g>sP{A3ZPl~?`%J<{7 z$5!7a56WHTTX>L)I`F67#DGKkV*8Nk_Cd$0yN z;EnB!|EEo?9W+C%da*`A+$C%SKt`$}pzZG0_&n?=u?mHcQt#WppLbNw<)#Q+r>X{45nLHD`4Wa9m)IA*ujfm4z*uip)*R6~eir+l9qWf(v+cs;Wfp;6Kl)taP? z89JUe%Ny`Niht9uaN4Wb`Qk11XvbCBPcvxBw@Dy?iA6sgLyG^SsU*<3Z-b?JI`CTn zX;!f9y$>xvV1ez6ZLZuUzdxPH^KC$lyTQyEOUyc7L)W!6Bx(zZ+VbRV6>@`>&qMo+ zwuOh+FQ4cB><$%)W8L z5;x|~bX}!;?(S@ro<|aM%B%E{+6Q&#lSdN_2lfd4bVWER9u8iw!8&=7BEK`!@+in9BxD#bRc$fpi zGT(g*$2-E=AoCCls?vs6BH33cqBZE(BDbLPdW6zfxVR+oo-~Xm*%B_Lit4~H(CNj z1f4TRcaTa8b)X_`Fk^Qxf>M@kDRHG=kj>-rTTa}j}O7bg?7h`02PMm_y*KJtx0Z$PmwRFA407D za#K^)EG}&K9o_r|I0SA<48ObRwIT&F@qt42i?yEYEW$*{55gTca5As#DNcNX2SVM78QyaayRy1T6tRPclKU|s z#&Zc*#y1|`AtyDg?QDo^(WeIwMptIvk+giQKGL90=*CZ#lzNyX6f|MZPl!4c>JG27rQ& zWj!Ht7M-*b>*>j{kynL2%bs&aWyW}WMz1#Cf8;2WzXlWNqGMJ4#=~oUe=&FnV_0a{ zNzkS^tXLk)SR{4%R{Jaa%0Xmq%@Lw$HB?fEn_A)~&^SAV&V-*nziBZYX*~q^0n=aw z1hXe|?Xv8a`E`rAdsRYAgo#v$J@U}Ap(gNBut-ONTdnf_5}d=gMaLY*#nu-2f{R`I z=QYhYZ5L{`F8G+`=TL{lRBTPf*87?=w49uJO3C8xQUYR|K^Gk3XoEV`Yh3zjdyR7* zC61BaOu%>@;utBFS-nW&fQmx3-JgXE6Fwh^byE*LHe_pEOE;{Oh2m!N+YeQs9xZp-gd$6F@t^L2 zmJ-$=obv9WO}QfX;Fd2S&4tIaPHD9~z1M^Ty-=%B1lKTaZM@!BBkzZQNt;sD;&A8O z3m4$K1@Sb#$Xv0A5jJ;v-EdqZt%gubkGYrX028b)mS9dU_+}Te=AC8YI0M8QybB!K zI2~^`bZ@Kgs3-6%QTu^jIH6>I*l+S|KQ$eaPPc*$_qxEhuvQ&tEbzr@BM(p`8^VT& zjVhFys$)Cj!`_xYfAExrNSAMM!*|+1B=wyc@p9(}bwPoH=+A2kiQ%U$VyuYX{BUrlr z+Z4LKEHijR%olIG4R2q;VQ$X5$mv}__pW=YBxm=S?_}c@Qo{q9e$UtMz1vOyPve;Z zWu~{pu(YiCAF;Hg=fgHF@N7EJ{pvA&^Y1Je(>L@`m1joqG-i@3$+@3`F~(E@o|%c$ z&ZT=&=PxKB^bpM6+`tnu_H`?NmKG>Rr6Ni4cwZQUFOBYmi=Q4c9<0?25n}lXj#N2q zEAgsOQ<~OF4wFo4rIa9PfuBlivxYyF7I=-;%qQKBA;DFAg3L>|u^@oSPHR`=9o%`n zX+JX!NoVB0W2RfV^GfANxbyOcg)~$Thuif*I1)TK4~_1?7?l0zeF60V>_57DAH7rZ z*JGa}rnFE-TYY^%8QJg<+@QB+|Yz4DEzqIl|7{00@|hjUw%pZ*t@c)Bn}|4rn-*@g>QFKx>^QR`fM8Z zcFm1vc%RrjfAaw@sv>qq{xStrJ?#*l5=AexDR5Y?#C({}2gnh5$9M>}Jg|(~1s#F7 z!bo9(?^D&~YqolUrr(#W^4<%d>|}{LT8k@u&TksXnbL~BQWiKY-WH+K6E4hP6#$27 zFW|=dE2*@Yk8OGMj~K5-vd~lFjLHp&jzK9Sii;;|jjQ*^{|uL?kU1%jGv3k>3T8 z;r!M{^7L8U5(#%<5PzLW0l$IabT%3p$YXR_KEL&m!Td_C+-HTmAhnoVKi&y(Pbzi53nXM{NH!nf_pSYa;mWhU z^1~&OX=}_67{HrrHMz~Vek}e;goC2rGHroqPe%t6i^;&+UL<73OPAOq+U1Y@?$&7OXmfqP zvq`^Q($Q}%ogxqQr9!Xr=T7@}HxBhZTT25Tv*8S`6EZcGywCK+D)Nr~ZNSkBKOsui zUC)SLh=H|f%FavK$INf4X}iCzr+xS48I5dV0iEL9=(4b^b)A*|DarCiFaC6sZ84oev@F@;*gdbto4vTr8frmD!qzH zN6h!OVf>+OeL?M5nfL4BqHIUEoe+r8wY5^=*cSy=E#wgyQ6xr}6h*8dA%!B2PLQoA zX|dQ+exnijT@cy8Z*63SK5yh#P{gnJ>qOS^8))I&k4BdB7+toK-}=ZZeicQmxK2=n z)Plda1d3?IcRhNyg;Bwg72}{d4v( z?=^g5%cGDU{6^lzbQ%fv#Z5wy;L1nN$NcOb!v}A_ETYWnXG6u@*2Of zm^2ZM?2_lmK=MQ*yLlGYiTj$T1toLT&Xs%;XtDbwJ}cXNe+O?d-E5<*U{<5M%rfhh zHVS?N;kNxAi!7$3-)uTP5Awx4eYz4eS3e3;(@i1KXNz;3o3m;T7StTibG8M&@Skm& zdxN>2MwH@6kf!`*$XNuuEU-f`C;v zXV;L|L$9RQeb9~Yaivd4Wl{Y_4t|w$9M4UEmH3A75pLDLr0OxThb4$eqoZ5RQG{Z_ zG`?0AG8U6gn#_CTQ6?*OCM@9%dxvK^6JqkLRF_3Qr?r8QBDw#{31Q2cu|LogqHU%# z$<(2q4oGaT%_2zbU^4+1@)owjHK$e1wj|8Top{-mEtMo+5}R|A-JBxnOdT0Rh*|jG zHz$YG4;RYLl(n#zZE=T{xNNg6A75$tM`MGXU!e02v%)qTATA{bb9c%3BdrRO&bVyNNHi_=v_*6Oau56q*+D zpu#-xSc{7k7!^nJC`Y@8!p98(FV(nJ2=3Z}EC=FwRPNCx}0DJAKknV%=?nldQS%-E6e zqx|Np#dI9w<`$&Z!LID-lq3{Ay=xA<`AuIY8I!viR&gzqvF+)x<@Q@Tb6^NS#aala7Z%)y<-()!Bq# z*nA2fg%Jn(*%+l%r7Z!mB7 zGSju%h0#M*cdb@FUm3O;?^=OTBM{r23=Pi0`*}OmY8z0Rb&Cu{UuZ zN$m&}8Moj3Y90o#BF&PIXxPSyWfjB$jvPcIM{;HRr$9iE>KN_RaIhnYoys{pw$z# zkby-fgc!OjlbwO-KM#Lmy&E?-KGg4n7Gj!TS&xZhB~jxc{q16ZJXu=dbISnV4&jhaZ}wpZ^=*` z(BWJ$>RXAr8|oEEO=7+pX8Sc4y8J)|Tv1se=e4cAHvz>p68>n_5Z_AJ`5FZ2O~eg+pUZ7S%Y`xbpP*ld{!=iJF2q+2a-!t zAn1|M1Tr4m{k~jCRk3)JB?UT@>~50WmeXYqh?ZcqinR97O!HSPGhdT+ZQA z9yXN+Iay`{^h>N(4gi1KaKG6+=2UA_y`05vZ3CsYYYNkUly)@^dsfEE*KjKJ@XHkl zzl0|ixLoGFQxb4jNVq;{cA2=wDI02~UO=LY3e2?A&i1(O4J@p*N2I%$EoY~tcM7n% z!Gj{y!hk^c zQT+}+nJ?I868rZ^G>F+XF8Njtiw}7V{VZtTXn7OlFNbRp!Q6b!-qO9%Nez&{MNSW< zyr{hS{u1?B~RyKF%bkY;h!?$NnLXnf&A}o zC_J@NkCyLd${ByOd_O5VTr{Z~%qQKICLA)5OY0= zH>x6I2R;v~+D(V;=3~=k+fCP)nc9wM)g39S^M=26g3F0+$-`546gn{RAN1h-rWMRs ztMdlZ@OaI`s#Y;ANm#W#Z^jimqw<|8;Md2{2`Q^V^9GEU=rmZZ{#=)uYVux6n^{V-=m-H^?huYt%6EH5W~&Tn?Oq{ z(u=8DzBM!PzM#`q>#N}@NL97I`HrfOgZ}2;>jq)eM!=0xqJA72ETpw8g}Dc-LZ|dz zXKrC2Dr$)qqiP%2Ta7xU_OzK~qqev@qMb{<=&kxS~IKoYG=uM)cQJjXpjXgwX3Bz?Z%XF*Z(io_ik8E#n$3 zGwnB3$JtPTlu8>R(dIgn3!R&YeV7N2xwJSmZ=k1YPT)iCg7H}c?bdR(`OW2@?o3SE z)eOWLR~(Dnp%qSik5TPT&QWh~NPy2*BrDW@nt``&<9ZbCiy z&5Iw%{qDj<1|XNOVj-$upXBQ>PUV6^t-~Ash~^75yHhgKHBjU@e%Btyu}BUT=^6U) zjRHLK8jGC(Gs9fw7Z4SmOKl{BUtZ4T5AZYl-r7ia9-T-oztM=CB+<2*{MJXZ_?7C- zUb2m7B;#vdY@e-qKH`*umXJzNMVZ?Yifl%uBwwf7j5z%AV17 z%~Tvdi?M<%731Q9D$>Ht_|2oQFpXmiMOe;#A#y|$y9va562}K$q9r-cLklc2rbaAM zl)d;4kFCg*0>1@GyV@LiB_oCKde5%35MJ*5J%PmJ6zA{1ue4NeO7fF4*szxwEV)-& zZjGP>uKZ>IEi3f2h84+nYTaqQn077As~09)zKxcze*5rVCeS?~lwVM&SCHtmCTI3Y zwB+`Em8;)vqmfI-GUg+xgTWSlgM|@(n)tMCcIM?ed&OE|QcLi>_7t2208HZn&`B-M zG4WynJ<`HWSf!KR$Xx1zOzG~Fw={NOdfDRQ#l{poU`gcB0u;3B-f*FnX5~WNi~o_g z(e@N~^#Veapmvu;MA?H#hgCrD@IVzNt9^cC^CHA3y5Fg%wy#9)RvO zKI)XaD9VECD96Ev*8zSPPE3? zR(T*nRpbO>DPmoiO(N5WD5$(7kjY7x;yWz=0h_ELab~4gozq^1^`@ienHDdLL0wKJ zK;M#RaA_>K1-cHG8~YOqbiw7FE6hzoVQ!z9^Y2_?L3YrTqo1hAi5Rktrrfd5kW`Jk z7t(oD-m$+7c=f^tsGsqA^euf{<+eSaPdoevVLXgunHCAU0xu0`1J~=XR7iplsP&OD zekB1#Ptmhknz0KTTE#2dMkhl%F#+xKuL;KA5B1af9&Mvi*JdO>wHm4uz|ee`pB!X7`AElLf< z?;gX=MJhgQ_@H=qu9E(!X~}wx^;?kA<3siwK%nSY5eJB4A3w>;2Wi+kvJR#tq`w7DFIe zQ0|cNIcS6UuU!j01jn=dNWxE8X0-eOmm2FT3{xO*vlv}TDKqF?hJbIdr*|=J;;BWP z;ie|68?}M!#jW{k*45N*{(M~P+XMQAnJQ|K(P`*b@7D=>{I5(95v+7}emy{{e$CuQ z)or6=R~B!)z*TtVFM;wNotG;?*DsL$gP+Q-t&@cMR4k7imVO`?083q3s^ z1v96IWk_XPrBB((R`(uG)Wk&KgWL{=7eZOrJcvv5DxA3gP5hC)+gz20Lbf@SyB@X* zjPGyDpr?Gupj-G+!4pcj*QzwY>AFT_1GADP7yZl?S<$;0Q=NiXNN8Gh%nO*Ohq>*Jtv@{!5czr3{3D^Ur z1EZyR;wQ2+pSrf9?EqGAwH@k9izQEe>1g|>O#V2t68^b5@cLCn6r!f1Yc4(L)HPRD zLdY;MZ8o7YQ06!TpIvq4bQ};yOLMIT1kO0>OLMg~@!6uGDp)@u##9kcmfUtBW{C#^yuiGZo_F!82}f7CIVBhRiH5f}olcg<@)N`n8G zOhAawx$VsYl&+J#v32@pe8eV<0A#$37L(cIM;|!=gos6J565$nr#anogJ*R&(Ubf; zqYtdk$E)V*ixSK~scKq2-oj>QRG43Xxh3uvkNR?hw>tftUh@x174wfv9RxZl5FM8#K>fkrFf;q5@(?t20msWx-ChWt0a+97vujC~3QD>#*GgO@; zE09u9%>q&oYM{CltzI4_#%1{`nDpOAGGZZQ%9TQKV)X%l$keOxOb4GhvQtq>q>Gcy zlj2s5SznBCsm}TmNILxYG0!B*tS|MOBT=~%ta2dtmLkxC9ou3GGKn^Xfj_md9Mv2` z&1UF8clP=@(^l3?;5Lu-yAfOiW3-(OjpBut-mP$s~9`8aH!7bkJlW`$n)K9P?cCa@a$ZWFr@wtcj^CG?rs z`{=7+H}4BS-1MCI7k^?Ee`>0q^>`!V#2{3?2{2#7&SFO0P;~6|^WOb9-gsuHy1~Qw zp+vIWtvE`nFy!^*Qg$|x4gsTdlptEX_KJjP1NS>5ht?Y*QiRvnW{6*{>^VR+^ zE_z@#5jK<*h(w(g9pGk=C5epwhxRUdc91ep?|{t@KR zjQt2x>++R;^G46p*nxwYS(#s4l}}nTxk7+*xk&ej)tZ9N7YB#ur~jA!S9;pE^NY&{c^bc}jmY_6{%}bWFDqJUK@T~&fy7u z^XDV$xGOG2S0EZ(7!BeaBK!ZiuKBjEm=8ltxJJ7Xtin4&n}x#%iUW3>YEmo$lP!h^ z1?9EK^u0^)tC~)o2GKZk5&p(vzU5B!Vua2&4|N$J^}gi*m#1DiDDq??i{Uv27g-h& zj-A!D6}YBGn1=yAb`=9aW<=e7gha9FqX~bqbbRpIFB-P8V70);WP$D+=@^pxmUG-d zXgVrQ9d>kBobyw5WVAYrC(mZ*c<7%!L+|$#zFTz|OIlxOV}OIfQ#CTQQTRp#PD{7~ zxXcPJaN`g?(^)GYok>f1-0P^XfMai9{dwVA(X(*wq1 z$@zeQ3_P&pJopiL=O=HWK(%g@!xCJ@W<^r#;Y!WTK`;p ztWN))7kHljSR;S~OE3krf(mVkDCtu6=qm+Pm#i$Py6|XSLDhMIwaNTTp6oRLu~#;c zg@*JG4e8(W0xu>D7XPGU!5jP3i9*X_xrlI?bzV3Ns&1*@^^S*b#o-%7p0UU&bb1}D z(`oH1leir-nZuV*wX<1fxz5=xbNX&#PPd=hoW9$9%5zF^jIsYenbQGGNBLrL6TA?A z2y25`J6Z+Po3@5h;XpY>>J-z7jssV!RBM$+%5Zx0e8~>Eva&Tun zFA8pGORa#aN~&)pbf&-r<@?*|P)(mY?9VgIFrt-;g4|M*^V8m{UiT2SF?_BG`xx+e!nOSNg5EIw$7bNaXAiDTGD4q;C%OBQ zbJwhMCm%qrGB?B_{m04J?2HMV_zlL{qgSsU($zs!PFF-rXI@6MdOxvz%})=mN1JRP zT;$v~dXO%<5T^x93Sg3-ViDe-8<>}DKUWwS3D%H9pc=GDay)J&8bAPKO!#K~g$;ThC$=A5Kd)ee4PLd$#2b^ZpazKmEC&9Tb$4NL_>Ov>`wj5d9 zgUv9%Z_aS)G*Tz-DzQko58stJrx3gs-^7zMoNX@3?t$RgxhV_pb#)*0Dr)wIA7!OO zC$Yrl%nw%M3yr6f>A~5!5$9U#^daDUU^F8E1;`nMmr}7T-QHI<(1&E1{ zE6+Gt=5a5NI6)KixUe5S#VX96x$eDlg}G%N=1nEy4LSv1xdkqeSMO(`S@n|4z*=dt zfP;v3O=O0RL!M7)Iaz_Vf7dDO_x5hRJ8XmYljNU~tXtrk{(rZG8EVDux9{5`zq@^x zg%5A|f9ZqM2UXt8*n^oswec<$qPl9T^QGj#bKu75z(YuN>`-OkpQh^wMV0QieRYKY zo|7D5;6)i>4zyBggx6l_j*vLwOTLQPaq-Cfo+Gi&D3MN(7$PxNPB`ZVQ$(={rI11?+44bYvfzm(4%$f!PAe` zK?}qsE@O@-=xYBm%5w;*LRO5Ik(ry_*HeG>0Z6J9jp(wo@@SEc6dYw<&4TsT#~(O@ zsla>53ha*&*LHXC(@OzKYa*gGybY^`=NqBpF{3@NOb2^zUda;GC6cKQ)9 z0gqg?!N_NN`}=CP;vfcv0a4vHvySF-zIemUd{?hQD~oxOZ0iUmE`$-@BRO?^%R#F( z^}bDf_24^kwa0WHBGTbZct4BLyk1#c>)Sb}AFLDe^{YIKK z?w{A7Z&rTD?0M|z#4LxZYm2>)yv4?f2W!k8b|RfgV*ZDQ+NqaZa{#s)^SsT`YLC2} zSmqhDo7y9oiNN-){owJi28BIspFZ1bcTLQql-_{L&`ChxhYnT;D-bk`;@Y}ua z1`h_D^Ef0B-TScz{?8dGyq50@Y*Xan^iptb_%qPiT-jqX8+W93YKi3i7_L3AcYUf; z&puB^Uqij<45py$!69}E1i{=O-Aan4x{jFcil@5Z{Xdl1H+YQ_1v!2IjqY1QKn+Yl zvLi<58P|#mICfd859|M`Q}fEmJz}D&j>qgVKM;Y9C&Lq*A~W^4&9zFALa@Ii)!3vb ze{~LETy-@R0LUF0KoB4*;w3pko8Uk4kL_uY2NJE98TGnM-*4JIOs@{-5((>fS=jaGnUulYcU7y-Dg)@UUI{jp=1uON>VWs;7 z7G}yRq04-5yTJAebND$xOPzHkp?KY;sp*w|~KFpDG)h^FS97jJs5u}9fdLJ=Y8kM3+a_D?zpV-ZrfeqIzNizd?w_p>Bv&zu% zcre{56JjTpfdlKBdEMc4|5Nr6a2(v{F375RNzAC05Gl-ffb1`lT{ij_P?4PGSA2f1 zOnM(MjXUZ0Zfm{e|8_zLe7GCe9&;LPaGGsfA~WZj9HrB^O!TLF_1iYRx}RylNNW4Oj4m$#%+em?YJ3 zM>#C_)!nkP+%ufw9F0RH`frjbONTD}KH4##yrom{;A)+Mu;}1wAwn2YXrFn*exK@o zZ(=Fp!2^&8CcqeEM*kwK(+c@5I?nWf{C2iRe%l*T@Ob0rYv|ZgJOTHJ7nrMfa|yPK zc|_Ar0QKz*1=Rd+Cjs@zXT&*(t6crW9J zfL8)(mIHjN+)9)kTAB+#=lW2~E#C0oSb$JVsW8PeG^`xwKE`zG{EEIyxlRRpx*7&Y zOEUnvkDx_~8&naS3%|74-sjG2ufX{xF5FsQ=Xxn|q?%9QQ}kopts!tcWP&n9fwdD_tbmw>0AU$GiIo( zNOWB$XT(amxt3Mfy{TJf-IL1uzDR~mh@|vHL_aaKG2g7$$xoO2;X_jC z4pVE3{ooooFstrwdsu$W!L85{@GQ4kMEYi`&0Muu+c>Y?*Bk8D3LFP<8eHPG?MH)v zNOPs`0h+t!)A;lm%wxJci*T~*eJ8ARFfD%V#P|qvB;TU*hNJ1oSC0^eSa8hb94zaC zJ?gv3-2rhQT2Yx8!QF+VUzTBl81lyF79)_4&mCDzvr^TQ+`vOy20O{B9;GTu4T+WJ z0FYXO>|D(?`(H1U?1)E?(6rOwjZ6{DBQSrgSg~c*2g32ZSv zv5^u;NAXSG#0Ar`*JWdH5`LSJz4Qm3yu{WVHJmnbqLYp=)(PeZk6#IPVXCJC#ubyp zg!o!4GswDJBbMb|u!G(rgNr|iAMD$uMB>@96S|a^QKXeTZnQ1(PXS1R5cbL-dcip(I?`&q#8Kx_9-H8M?s?J1iO-Xr3#`1H{QuK z8}8%oJdMDlg=mjYj#i&AUs)(S)f>51`irLAPj+fw(-&FN;(RwbWRqWe!sZrlns{(D z_uAw=kJ;QGGr^KP$tM5I&HYz5`AatW(P=NqtVT9#@(FW^O`hc@uX1x|+vKy?DYAeB zKVkl}LpygdQC&DTFP5f0uu1(jscM+y+G~>zyr>29WTa+dHwcumL!Fk2=%j4prZ*Q_!?M!9Rl>b{!T7l&qW)#mcUk+EE(wXkze!y(_wLRR? zY!vk$>%ZU*Se(&mEujbTl6Pj}njk(yL_5FtE9gYzh8{#1d{*L{{j%w1_u6t4_D)RV ze1X?q<6>FiK<7J!5RuNq3AMg1?@mrv^2XiB8>j6Pc_S8um_EbsL`sNyT036=3ErJZ z-TIjUHwm$ZlB;1=1li!XGN-X9RJ~g?+qx)9xrrrG&ItMUOQhYg@&;keeE2>1Dh0Of z;1@UVc5pvHJAyt)gXr6SL7Tq)F8?<7TP{srb!D5wKA0!&g@Y3VM5}Yjk^`5vVpcX@ z7pgwwiA@~s^ue$uT8`PsQye7GNtf)6D{xTZH(W4uKDR{^n~*;&b2%GWw1{f7)BQ*hYY}O+E*a z@Q68MdZTFwDZ_bu7utsG>#EyjI4c4prCniK)^DVeebBn;(1h31oDiSeO#x5R#qI2n zS(#>#eGP3Ii9%I=stZs4QcentOinbO&#`(2Ol&koPMGID?`|2{EB!FCMOe-Mcc1E9 zUC3NH{hfvwD>Z4qlg)*K-NYG$hBo5L$gAG)_XTN-TjE_R``#o$8fchh+_LXyX%iCb z`0CAe9ly*ZD1e+7sx|`Lo04Esc3CSh5g>s$C~r33*=FgfMM~@B23|=PXl`AAHYN9c z4XU9~Y$vxUF}al+bSY(WcbIoRN>KK1>JyYXsr5WFPJhMWU&)Yshl+d$g8gPpcbTMW z@B-Y7l8}*oh)V!xA){t5SiR~B;RO$bUP#;lM&ih9%HwY-#t%@LRsxFgXeF51nCr{M zsiS%Ry%zBK_OV?8bLdxCXFJa|Fiz2qpD4`Eu~Y9l7Vu0Gegy$Bg~m(W37Po0nL zG+%p}xqEmDHRc5FmKqzn5pn#^^n`n|p2U=a{{IHRiz%~{%iRvZm!lIL`hr;(50o&2 zP78oqf#N|6Xd>^Ain>QA=6?J`*%hzJt|&XEyW$6TCU-@TpEKteP)%!by^^O3+uX81 zGdw8s2ML?hY#wXS_1*VBy1s+$!hO=)-4)NhWcelQmvaQzdaQ1~&MBR9=QOwUfG}MX*56^ti~mY6fxW1U&nT1=R=$Q zsfi6IqWXP)GyCYdp2I&7Bysa_t(-Gto!=}?R1R|Oq;h6a9ck>Ntd;zXXXjNdFv(jWNf^GKm>sLCHC5w;J^tzW#-@HX3}e;6%^`8 zIy=J~5i({nEVINtLQ2>@Ay)f(9Zo~P4!TrHM$vQ@O57WMk0)h#?3cOj)sm&@Kr`Y7f;FiJ*1QDKdZ1XVI{ z|9G?hG%1}UEDFjc2yOST(%bp0kDd3cI+^!gqdK2=_x@Od&iWVA+wH`!U;esG3HSA? z_TGmCIKX-CJ-rWmHgLO6b*3v9cBe(}=~tsutqXUIrB479unDC6<}rIuFUim$E9Bwo zKH-YB6E7%Z^-7>#%)YxovB4z@se=*~Cm?mG#2HSAf~y7SFf}U~m;}4AIXL)N(4+UP zLS?!Oef=+{mkr!QxdnQ|?c_l=)`Fk>YnQGdTVjt`U{g1MK&QF47hyjwVz!_>L_ztC8?Ar=fE8XZk=T zdI|}r;u+pYzeILHr8pKsvYzcnBN;;^ll~7V?|n|XrEfYgb@pC%(fyKq{cZAVPw5@*ENRhWlh$jJH?qggd3ci!?uS&s;56r3HtAta@L7;%30Ya5*H(Ndv`-)5j z9bxUmvHrmybf@(Y9!vN4bf;k(w9_0vBs=YhP$tiO#73KJj!kwCfdl5=C5ii_#l*nt z{HEcoLP~!|Vya+KQsG=hkmGEiEE>xdMt|8*Ttv&m94v~~JhxG4Jh`b@)`IgljNu@* z+FjXH%SLZ{gU&uAMZ*20NSAuLa1>Iiz8~eWmq@i!GwT{p550T7@=Q+;9XLN4$z!&PaLzuE z?mKo8dkI3=yNAW>7&bw7SHdji!Qj~#lI5R2GJ{3kVZvAaMT9lWPN5_w&%cA>cIISS z7YQBAU$h<9=-IlFe^Bz<#f^z)3kMO<1tpl^>zhco&9G?$;COBluSG5QqX4#62Zwsf zjg)1OkrDijMRvnX4AHkpj}A>Nh1C87z6!=sBv6 zMXW!Sdi7VrzCmkQ+p6BX*_f0&n0PQG%Xg93PajxH+O~_+!?y@2l!*s zW-xUt&KOeXA8*0VbL-v1eLmxraxSEIswoQ*U7To~4PN?s}A-mf>o=yCmXfJk8N=I(=92 z9xY?6GF3C3zN_SW6yc{PEa>|T@3m$9T8|C8Y+e1t*uJ)ivF&nh$#lMwHDr6}c(>Wv z%+uYwP+Z<-Dx~GUGk-3xGo$IDo3gsCdxnnJ>lT!C@VmV?Q~Pvn+G(8wL!zuSyTfn9 z*CER4tcqN!Sb(BhM)++a8??6%ZB@x*RFdj~R_Au(zm=RsNp}JiZ`cKPm$8;;gBuVm53cJaevH$z`opvQ8UITLcX4#jnWjpWUS;_ZhlA6BRQD-(zi^aG@ zKDQo#hSWu4vU!VI<_xGzn{0Qr-*tQw9>6xVpLI&APMbV&ym?Qg`x@UV4 zF!TvzPpBym)+busVwCFKXc^U$&6Q7EB4jD}%M}rSkzI)TO{~CC^lyg1+vEK8hVP^# z$E<5&+O6th3|#%@k}Kf{i}^RFn`GEw)_zmCRq+cn-4?w_zRc;8=ukrx=$;;`SMy$l zOKzj;&+4`!xjo21MSKC-1A|foI%ee+Zu3>SG466g9De-;r9r1p;UpEluQ+oMDz@)i zQ2jL01=ZhPR6RY>jVf=eE-dn(Qi-64*0NkZtx3(6+*}}sv?Vt$SjjQ#YH9uGuL*K< zhgrb0OK#qHNEuhi>^-87P!ZfYv$=Q6YsExU(jbIQp1_PSci=aNcE%U%s`-aR7HgB;OCkD-lg$>Hev~`@Ph!&7_!!nOby<@7re!9s#glljm-tdG`uWQpGK)Dy+N-|A_Rq z)%_r4ZZ11A8d(fJLvSRv$j#A>3weu1R`A=AUe`_WezW5>D{cppg#^C*x-ZB}#<5q} zjNWj$kaD+;tUD~0E#B~#QkBc7$ogbS0mr!6A=;QH+Cn# z;?J^BIvT6dG?{28rnzEadG;(QBd|bPZS42Fc_TBV!s6^$Y^8pTM&vJcb^PLg{dLgC zT6zAW9cS-OuM8FM`cfL*{hYu}NHeVJ%>m)k>vmf!-DLYZW2TU&A3*iaufbdLhBvda zVm#!(np(2^sX@djmHc%^jjS`G6B52d-V~%N#MbZDb1wu=9BnrmSuXY8HWVq(xdGvq z1~y%Qf$g0aN(V?6?u46j5jjJ31+j?Ck{@^X^2c1UJ`Td5_rmqEh4*P;DLH3oOubi= zTiOY2E$}mf&)3o9vRV?@+L4zi7wVDbjL8aBWO$053c^H4)mYNSvL+PO-9I>%K_FH9 zy%xxAD8MJ)Y=wUFtkxxojU$|G&MQN1%N`Qb;wHVQVeW+!q`fPp;N5Kt&e4LB$SpWG zkj9!?$2wakCTzMGL7ZL{wN$0YZ_9S4A-!IN7{Fgimi%#^5C}=1nCYxt!9)MqOqVX1 zIw%Wm%8F`+sD8CTR}{IEoL-HR(&sI2SV9diP|$iIt#+-r1aIuIK>yZk6qxqltNPWd zj6aBp&l}E-wNFT5(Z)Npk_)j53cnG|4NG71MTcA}O-D2L5s@S{n5SOiyTxUr z3y_JHyP9{`o%~$f9|=cD`Ik91#FFLfbcGpQUSQ|8$4Afw7{5+*0njVSM93U1&z6XU z68+R_awV*4zL*8`tqY;lre!+2P`Zh{;SIkaP<%@=7Ewm9zpW8}IDpd)B3%w%6gu8L zc%7!BrABgas4$%`_`Q-)17<6G{dC8dt3qoLLSuj<5{*em=we#3!hupDm=+fpZr;LV zUew9NJ?ukwaBsm&Vu7l*E$U9F7S33-K%mjG$%8!(Y4X-`%$MB^Dctc))Oi#>8y=Is zfb@}Unx|8CPR&D^-Ky^T;x-b*(BV}oCzf!JmTc@~30fVOKbhR1Y&)UTPOX8$?#i`` zC~z^omUsjqDs)^J*qBHy8QfKyyf40I{$KWxX&#tn#8iK6a=oSxF4pnmuRAfj?2xjv(qs zINY2d2HU=&vX{a(0Ch<@X`gepq-W=t~&ZRQ)zrj zVj;V8!7AZ`HReop#wf({cj+6*`u6Fvm^(5w-PspGnNGmxSWnr&-tg^`Yc6a6Lq9MM zi7LO)oSgCoF11nayDX-+YHs)Y$Y74Lkd~W;K;M2b|B%HkZ0zA|lscT4j41K#==O6x zvDm*!86S&%V*h+Df1KDM{-E+uV1DtPUa0$Zs~RT_dLyr}*rI$S6oI2Ich^r~0bVNA zRS*YV354V*({rkK^tNcG()!jN$Ceh0bZa(BOVlAN;SK+R`Vv&<2~z4k@Ky0Yl?%Ss zX7Ft_i-~CBo8SCrG6+bAf~JDDLwptn<1CYY$CSx9K0boDJ&Yi4hUjbr&$G#9)MWxn z5_MkPgA8~3V_C2<%hW)I@ZDFTdaY|?uaDC*eBI$9ep#R6ZxTg;Tvl0r|DnBA99t+NwFUp^v* zH46sz;j=elFPr4F>03ol=u)|mBjnf&Sg@*VsUciFyO0Y77-1;6?EyP}S@D<%=< z*DdhvtMzSK;QI?9^n7(Vi@;gshG;c`EE=SMsoLgVPRVY*!3(%g?c)aQ7TK>)92BEY zGVKPXx`_8_A0+py)lf8U2kA1M#n~kLKXFW#H|a8Un*`{O)3ew3P0mSV661zeq)y&$ zq(~rSr=T$%9oGLN5X%I_7C^NthRak<*p@D^V4ExE(eA{)gG8`8kex`y6tL~rCNzt- zl0Q_P$-!W}VPP-`W@(bKH<$$%32bE|?X2PH`pw?R2YT0aqcZu2r-^(=3lCknhyn)Zw`gp1goh-Uvw4l<`)?d4 z-)s2O9VS$b;T6S7iFmNzZyq77r~sMzl#Jl8n(C7hq5Yo-xhy?j1Ms9Qw0-&Y9yk#k zO{r5WvAovvJmOJR^}?Z=L&D%R*ltZ{$Zj6a}+`U#B~^3EMzSg$Wn+9ca@n|7=N=Zc(t~W^e!O_`={N> zh5bYz|5@IPKJk9PfU|LKuj_nS-bXIt5zYO`x%^E)<@nZ6DZ_eyxlY2OuPeK8tc-we zl_k5?lI#|^ciIsVn_FM}Y^RClfdL9VssdGywVMk+F8M~J>9A=3%UH2w6K>74BMUa$ zqiSO7&3*8BcXQ+G&P9)+%tjzX?2b)Kjx= zem`Nz;#CK<3R9eO>Y^Wr#rCt;x{U30CLf0ht*cTXCZ62Sbb7{oThYtt1=BFe2CY_@ zjJhL&bc+&bL?$7LM#vU^JGjT)2oKmgx@jH3KP5?evLqM&#?}ijptJ4bHNVxqx#zr_O}7D224J%=gM{E0xyK+e|4xg4SK;7~H; zC144^p4pQt%}r!W|y(ILKJ7@3JLam6Ul5$_Kq!&VU-n#q~MCjDPh#ARcvS^&S8uJ zQ%vdEU%++1hoE@e(MorE*zP=rlnbhItR(&Wr`p3+-&IIH9qK+EJZ525i%O;)Hq%@? zj9Zuw^GBO>_nnF>wcOe5%H^0J*-YbFRSvhMRpkJgcnC&|N#QISY;x(hE=@udc5a3}m`uzSXqO?Rv*JxrOHT)O3M$6%vX9BCD7&Bw2_k zTg-2r-O6I69rH7u<$hA0bCDMyoPSV$IhkR$d=DXZmg(E;Q<@KcM|ZTGZtMwqZ#CU( zL}5B27i9HTo#74tTH2wFF^P_Rc$wP~Z+L zM5J3BHMiwN%d=!wFR`EeebxL2YiJe_ji)Tr&wdzTKfp!;kA8_+AGXQG55fy{fG zRiRoevWgn;Z?T*cxxxJ67b0o$hI?wxtj=;?X>-nVbG`#oPq0qbP?fo{rwHui5oJjF z$XrSva&J>UNFI@|`84dP8F4num8~*lWolgZzRQ^r-rAQaC)3;i38k8^v=S3r^ko6f zdXK=V`L{4=Qg!_EpDtqrXz!b{20gdEdgSYD2M#!!NA4!LLib{;x}2H=g}30guW&3P zp4Z89baPLxS?xX~jp^Qn|FfFmpnSJ)ITm7~q9MbJua#7j|DXsfz2Rz(w3>~RNXHc2 z<}g$4z0BjpWclo5$y9BPNFEV!%Z&Z=*1hpcY#UVejWpcKD-I#oTudpt>M<|A$AHl< z&xppBlNRk2y*VR#bLPzYQCVpSN!Cf4%DSSu%ua#0wmOFibRNpO?xD=!C4t|_kQWVL z$hm_OQY}Y|$OJu&BoSQmDO_CBUE zX!wE8LzPI(SCyoh>9EHtGXgawORyw2ek#PY+MAt;6stJ9z8HBD@LMcCv{WdyKU95y z_1?c#ULR`ko<`=92GuUgv1QH3QmJE&8O~q2Wn%v(TVR0$0{9&9y~q1qt8?MO^($z4A)@gQyOW&0@jFmDHNPjMsv$ z(-N2j2LcC6yZmNOq?M)C;TMs5>B=UiW$z!v<_X2p0`nRlL)9(t=nrw)dP~roLVEk7 z7etVj3(dIUGWVd^Wv==rd?}Te+Vv7z4#58aLnK+Q3m8)?v|#>`(*_~z`9}gFtPrgB zLyE$NwBs{lM1k1uKsau_`|5GUeIsnuHu6+$V-Q^xC60Uul{4(KP8P2{WQf||tWSR#NqRnI0l=-# zr+gIEKNk1_TC(*aPfjfKef1@qm|!igxrOECb-0eG{0Xs!y24NTlj<~E=eHKAfLqJi z!KndJkq3|3^Y4yqITnK#s^qBoHS9#ewtNG(P6T`f**-Z(O)D=TFe2TxP^Lss@_>pS zaOYAYO=QWKct0rz`@pxakn(6&e z>S|q!Hye_0Kl1DSJUO~9vDiSm!;vlVYL#PxiZLn97ReUn1k2;CzF3_R3geO3h71d7 z{WYVzdl*7hFSBJOXwHkE2b^NA`!9tk`bs?bd{LQYuUf~t~r?jEZj`?z!Bn$no3HJ11 zUnkIS1$u*tVYx|@A>K5EPBgNGcQ{(@ROsv`AjSoOZKA4}|6k>_L-k@c_fc0)>kU6h z*FaFgo8)43{!pD{SJbF?tEuw+3GL?Cp<5&G(h-kyy4XOb{E~d8s}YMdNUyhR0Ee6j zX2O`>fVqhK1fRY|9^ye{gGZYoLPA>ycOp@)FgF~-QLWlhwhztTHmZmWJr$C@gN?Dy z43gn72Ly*lHqZ&b88mYvjXV8Z33MkWSQ53-(JrHw7{3ZJF|HwFs?JROh9||UVmDRU zX-HF12GmQJJmxm0GNBK-T0!>*&$sf%de20?J|*RQx9@k62Eyt2DTx4+S6jxO4Yl-q z=(12trZ;juZ%K-Mpy{1ur2{#Fzy_Mn{~zAo2foSbY#&eCPyz%Jq+-zuRm+BgiWIdN zltM{c#Xz9a;xES$lbZ_RCZ!EW~f6jJ=D$O*^{%Ot9t{s;U&YVXcSW!uK$;(6ge1`zOWNbEXD+ zzM?-Am57UEvghLc&W7l|gNw=QYpC#LdhF?0^E9vfG3JE6DFe4%WYLAyyF-X!&VrzI z9-xa#^=$zi(<0`Kc;$szza3Ck0orlim(5Y%O^Qk*L@*g1)LHhWx{BZhgfA=oW6b(! zfx4na(p|U;yVF!21@c(Udt}bN@`vYZ&O&icaxeVx^uU3a&@^8*T}_UHjZ%a}F12^- zhv0i=Ke+dHt%IMU&Aw{7kO$)GIOjoCM`afE-XB;+R;-Cv;7d75;cyc^<(6wOR>>IY z(elrD%4!$L>ht1jdQn$RyXt1v`15|_4hRsW1 zRhrBguGk6x)Uqv#2KfDA1F1qd%vE1vnU3ydy#frm>Z*&8n>v@33R{-zz zjXt!vNv7@=%n6BJTql|pb$735mRZs0hB}oS`3BD$L$lu>{s8iUg?W?BKx(awJiuQ`3hqsYh2TnpRhJswcr%s$> z6nC676rJcatVr~aQic_GTTGEwppR*q+%^a!eP}$%Z}vfsqZQ`ka4!5No}xszg0*Bf z00s~p`YPjmQ~n`Y3wYuLdcnK3?IN|09*C+ku#Z|Z-$dCSo4j8YzU@o(fR8i+ZZ3$(`?g4Y}8q{l}-E zc&Kd51NPFs4T(VX zJ_R>$pH1}f%BOZXEb;bF!2>B}(5*A%90cf&3R*)IiR17hfGKScmM11o0V`af99jW} z2~6~bFd3)xw{0N=_$hKsg_2&j-F>zt z^G&g%q6VD2WBJzdtq%Z}5db-M;0Z3opqt(V+t%pQWeN-eUcz*Q(T*kRlN%Rk^JInqZ+Vx-dJsaJ+2s!4(hQ z^+}bvS;XhbwcdglSE)YYX8L^12;!K3Xl0xw0Wh%4sEe`M==hfj@C!r`(a(}=TLGTl z8^Ii0d;CKYD#br2cqGX`0L$KquVfDhx!*T7o}^a;?17PIN)YSHX#= zQ9_T-2n@qn-mBv(D&>>>7x}QdG>Up9`C=O2NNkUG0W1fChYhV+4|ZNEXqUZJ?)FOe zzAA=zMGVvfB>?My#-y32-qIF8S;_Y2)J~7o@)LCl%>sWk;|CN<+~C6Nlr;`<2q7Ea zJ%sZXyh**jU}Dz~Fh@$$GiwgJd89NE^+0z|JTEB4JOYxmL+dyB&~EVM{=Q-{#D>I9 zg>EkGH0G`9T@zWrrr+(O6esq4)#qSSLsa#hPUDCb4Tq5uyv=Q)UTv!<9BN{U#sP97 z5|SX zGv6yePWXLvQ#N`40|XzCyhdYM3j83fnKf;8#LS&8uV^~PqYWazf`F&`)16P>TxKKux(D?z={WgrF z&Qo^F(_=#fdpJedjEOe5Mi>+A(L8&w-s$=>@JE#7l>_&xx|wK;@r$?+Mta{!wRcLr z9;7VRTVTJZI}rUh2OTyC#~FVvK5hPNeD?8Qh0nhJvH0xgzXYFl{|J2c_n(i?0sb_6 zI{kz3IneLK=NbOK_;gURP`nMKqLcjXWbEKhBjZybuEh+EZxMZ3?E~M9c2TPnuhjWH zt%v*y;XI2?(G_;BRAU1r3`Mkw{TD_xcr4+eKEY#2j>kWw_}r5QY4buWWF4BLJhj9l zt&<-bJehk;VDzaLi8|k!tMRiOwI5aZS(rOb%b0Kof-s2$0T(!iQ_j>ST&h=s4J1%P zC(hYp*1&~Yc$D5HZF0s$O~?T%pJC z%dxyRZ1>y(mz}o3o2K!r*QP>zH7J1~X(<%GPAw|J36=Gh6~KeWR-RaZ1s++YPk6iK z=jw`Q-QDsdTnp6&p#5I?=K_yaBfl*y=;WP$vufj~9q% znQz7I21`@J^*CO$Peq-&@y6_*CqP)o86oPT8`xCcpOl`lnRv+B%SD6w;!R5HguEL1OyxR^@H}ci_Pg!ctd&<&+ zzfbYkx&PYLi7R}gJ)Gk-hJZ+AzG>WOEfNn|5e^j_VLh;mU^;-42?DrXia;*eRxqeo zQMu%;ZhVLI(&lOie2TijZWop)g!2KdyV1(c>EOt1wUIC62`UmcZV~^H|IG34p6b81^<%VH%sTP(Yq}LML<^LqBtmfkdrbtu+qMBJYq$Jm?|;Kb z07$9CM}A@X`%&>?J4x9tfc8H$WC-jB_BFs&3;*Q3f2H=Ui5j3Aeyzd}PzJYGFybK$ zHL&-;pwv>3`td)7);kNa@wxYpbhls%u&Z}R7uriKa&rIoVc@Y_&W-#PONRgP!-1#5 z-2&G7gjmmdg0E{-(;tD)V>^Y~AL`IUU0sOYj_XAuG@ha4U~wMG=EeV?omvnMPevJX z(TbxG;Hlzv7e+T^VV%n-FM2;3)>T0FUH&+H5H_%8`jzQu`Die*g%VMtvG!Fq*}p?K#)B$7Jqpz@wh)EEP=GJ8iP)rSwizK} ziBOi|8-u>|NyL!yjmQGMR&zxq7t?0dE7>gEaw#;j1Q(C6IF{FpoOVN{@{I`-B4#DR z$iT%8kcHJhnloq4;nv!ty~Ng9IV@?bBlH3$5sqZ^64*Nu(%dPd;KvIH40?7{g+9V( z#&J`)Yfr3HH$+Z`W1y0P;_Dz%z-0}@%|9q67H(@Bto@0gBQ0Nnvk36smNP?~Pn7VP zs4`wTd8R6l;yeX2vp)guMhX@~qul7GK@UVw2#dJi+WJd$swp?ak$Z1Cja<+_Kj`eA z%2@w&rTRlGRXt8KzSKYAi01q=j%e(~utL+p9>oIi&x;BF5YnSxRac=O<9lnIN;p5o zw+v~u+TWQ5wZ9$^W+JBD5Vn@pwpf#DHS$bwaTWq31@oOw6R%=Nkv#D3VGK8utI@r) zv-YXuVxt>QV`h0-;^FZ|$d8^A)14f${uv3C8bf7bI#mdx(eFHt<{sLb7?>y~P7b2D zaWEdh`CyD!&M(_W=^1t=W|s|(G%w^1zdB~8xb&&LjZ;9E=w3Y%u^gtSlQ1lIBCTud zg5f3BuywiW9!w|L?W~kX-^LCRQg!sE>xA@l{53OrnzzX|uqe%+=S&up6QIoDD5J^U zHgZnOa<886EWrUiR*(6thkKO>GiPd|SZ2_@${MV7247(P z6U=&q7U73b>kWD?UV{T1QlbfSdM)e=!Q;a5!6Ro94uACgUcn=mFT6NB@gp!-3*iBp z?@tdN>F+;hhP>_rt@82O#MV8L;71)exo;9@v~2)M-l6+jJ_jdS-2}08G^SAK%|NcG zOvTl>$`pM1uMkW5J#srG0v%X6h^0DxMs!^Sms&jY;&tg5c-_u4NIA=OKG6+oWS?gL zIhLz_h$`qT?Pdk)sXA~2iB|!vG3AachEWD!)&@uPv){o=ep-RcU^?}K@AHM1D@ZQfjl$~bN3GO*?D2kJEuW;T7`103y3-Hnp9{nIH9!}Lr`(JlF zp8)AucTJl*_~*qO1Regnc^0Oi!dMQ8N|gs&Dg$f4iUP!3;{ z=Md(30-L}*s`7wmc&I5u`_OD4aWwl&X+;1#jZ?qbckCyP$s}{fag}G_ckq5Y#Cjmw z7NJ10f(_{>sZ5cqdr!|ofMC^P7JkTCm?-*)1O+{_@C@*Kjz@_B7L1(fsCZUgjGo^o z7`fc>DD6*88jP*=C*veG2{7nU|CySz;5i2aQNEpSw+MlxH^r%AedV+~0A#Gv?|Nm+ z3pfF&YmL)mC@8Ti1+7%6;Ek$6f5EJ%3?1PLRQgs!ZA!+54&2e0XUtR%&&Sr<*#Ur7 z!ecB|^_i}cX5bSkacCKVD_r1elzA1fig93^?*{|zggD*U!Zl#1HDV}jC_(f7hC}h3 zr6P%>*#dSQc>ecZ48uvf6GoYt_aIqbM8-K&rt5%0YR*V38qQp{!_4D-Z zD7;~blOT7kB}{_d>w62wYYe?mbXddC(cAhG*ml95^4BJqLOZg7d|rbo%(#DjwDn3< zhYl02&XQ>nWtN&6SE@Cx)LF4oKR~CnRYHr$Q8G<2I4WzB{Ac^9D)8kWM!z=w3{j5X z5ekWrwGD@zoKYbgKR4J}sSUTMS{zPwC)S3^$jAs~;ZuWf;h@0l&>i?}PzZ-80CO~3 z{pMZ%ZV350ujZOp#)f&g0)I-JFB7rMjHulJm@>YFD2(cBnI$0sUY9E@@~x6XO1aF< zL_@FfSoK2WE3-OsOw%FFaT0yhxAbq|B{TjGUQ&x!M&q?!aGh89Ve*OtyQ8f;xRO%^f|jY!0c12xv?kzR!$bxcvA{T0 zrJSfOArn%;@)D#5`etSGqq+$O9xMXY*V9t^e$J?R{t>|~T+7j>taN!B zDm@s*d`-FwcYj?+U^a7yG4nmL>ub|vvpdq+tClrbmP(?hI*%Az9j2Tia*^K=jEqF= zQ3yK`Uv>bX1Q3tu6B2<_*!qyI49cuvBze)CLiv}G;C^Xv6QdXY8%;{PTklO+RE2WU z3#!8=n+@=N1|oPEfk=bf(&A~q>uK5`I4bso$m`9e^*={w0irY48Jl@zAP)dIn?Ob| z)8ZtU{j1+c%dQ@O9Dy0YigC=;=HnmXQqTR#Sf#idPAL}(0LisAkSuDad)tOVZHKSa z9_g&*81lJ%Bg}Jy{CgJi-!c!E7HA{T!Gw@|65o)kVf+i_LlZT8*u&}`DQ-AKy(Zd9 zqQ-5`D~|wzH>|+<05-to4!>H(|LfgABaRAnVx1nYq_cLv!C)l=5NV2k$cM@#QVZ1!{^9GT~PJ!pMU-$9?TNWW9&F} zCYt}fo(D6v!Rl)9d{N1)Xt%3cpx*HXLC-MYVQaRST#FL~JHQCdLVsz9E0eIwcc?FE zh7BN|m-K?!2BLf9Jhnbs1fpE%m07>lR2d=L@hS{Zu8i)|da0>T$5Y}}6Er1mT!8Ib zaSxjIwLXh3k5wi{4oSO7(r-f9CA~0ppugEIpuf?Og*PCt*1PZ?rhRYUBP7gQu}ErV zZw4wOh8NzQeZCT#U*)SX8>$#6YOH(3<$8ZtuE($09rY~(ae+{%bv}ne9StF2e84XM zbRgAI)d+Ta8W59ui3Rqy*+hFcd(EqQ?FM{?L%jC-?p1pf&e^Id@@G&TLB4ogb&c7I z$5CF}5Phbqcmt;@#c1GYrTGbRL<@(SM-sKw5nPv3L{1)Iv9#XRfz?(MbR`w)UV~O8 zn`95#N5u}vsW*KUZOuU{a#YyAfpURaaJc!Ln&BI9(aQ>+jmcxExs|NA^!@L8h(DI% zT7-G0LBVX1@Pbw1Z5145NR_hD)_h52`A$4WmlGde(*kqqRWC+CV7Zg9^J3c!hb$^z zPBm`t+D=g}Cnm6({Pm#-f24Eaxs_Ea!++hBbTf2 zIv%+V8JvD7dF;eczO)WpsTxNNXzRZYkX zqE|Y9#WlT*byxE&cAj5}JFzwWG_Fe^Yu2lJ1%F`?^BuEqnYi<)8h6ZRDe?~$olDtK zF$HxLT4bOQhs+6GsVKFc(0>3hd+P;Ahsh{*#R8)%r##F%`S(rxqpemvj-Hu;0Eyyh z5;Vnt2%&fqL6R2Fj2J;H>AX4(R|f68e%i`j+979bgJBb9Q4<;f3GLl;w0v}j9ES(4 z$oy2_#h^y|WV&u8PEaukfykM>iH#R&)i{c;Ny7Gs_lFjkht6Gc#PWUUrPxo{zb=4; zOBI{v+QQ=IKc$%4UfiD|P%?$maZ{X|mGtujmlA^blf4vCSrIxHVB%2r#D2#R_Zt2X zQ}p;gL!*4FGNF*z2LdY}n5=Y}wK&}$zw{|f-_cK52IH@rKBxk<@1YNYF2ub~z#rY6 zT4WUOG(77WqjK9S>P0)(sh^Tse=XpDB*m8bHW&kW6$cT zpnFG5C1M!l0T>|ziFeV!ZQ$prIQsMGg)q$UxFBHeSw2Fv#TkRaaRbQfb_j%N3=AjM zWmJ8ko86Cj!|ocKM|q+{^eOW|x&ps&AYEmVllmn?zFh-tXO=QX+vj&6STn5gZZMjw$r;i7uGTc3gWKj!%W@ ztmSsmyypl+&PMTGwkAo;KwFK1EcwZ?vn^FqMwEScyl*4y6Ush3Rykz^9=U0_1=L}~ zE#-YRnBealh+AE}k3z85(GmbH1#4gwRE?=O9nW3O(4h2~=V}CUCySI7V$xV~T{-}u z5Za(i?3g63b&C0^VfSY7gB0--I|30B%kbA*&!*%hu=dclq-yqBG|=dvIoZy_0+`Eh zjs~h38T^4cXq{(&ur32;LmoMQkk%m_fG(p&Uh*on-TOuHK0TdsjLU-V{ZSEipdQ#OcJ@%70^cs>95k|76z?pXI>Ltf08MMkD0$|m5L!W{1T`$Znm6+{ zwSHdjbawgo?qa2CAh#m&7bAUFujvgL$|^J?&WjdPw~oW&sfMVa<%r>dLT`20vs#G_ zpz_#d8YnQ!BnJdhHe8iBW#0F+TM0Lm%j%Q+lwDn&fEbVdz9oI+lv~clmTYav1-rrV zaVqY>S^hl|SR>btX>|yrR$?>ejb(0jd1N@n+L*e{995+-3LpeU>gkMe=wvoP{>!%= zp*fr;tkh00IX%o*)zH^N%R**W>sb0=!aId$vz!Dy2r)?^xd6P!zJy@uPNLYHEC;+y z^9F=|&QQrJ-RlEGPDm--P3%mjVew=HYe}5e^_c6F_jj@7+KrxOU`y^sPffX*dmZKnB7=a%E8r4(7X%iowR4pgia%+0 zHz~?zp<>3<*JFAcVIMw=f)NC3YU+n|lo47vowC{+aGR5avRYoFR3)qBHQu&}@`Ly) z+a%SGO|(+bu>X!_T0dA$b(5jjPW%qOo`;yb*ckhpKhMC=w&6l; z894Qv)6Ig#6b`6N>i`!6;lfL&diC-RJ>@re+(ReEr>28jy!BCV#G;yYNu?g;(XI@W~)N$#O68UsaWJCYETXm;$q%U`x{Y zq`*18T(mmK~Isz`&Fr)4023mpr8B#Rq#pe&Iv{r@&GL@2rLWhHE_B4*}Ow9Rc z$G5R11)o~`&oZE(^!I+5N5;0K;75^)H+V9!Y{GsIfFeYiu_3j0hV=Y|7|l6n>Ki4A zUg^Re{Y%zd48D4h*ou}?WtOx@5<+JxGRmw8K}K6*0f!k@yeQ;!>}Rx0zV}Ev_JTEH z=2}BX?eUbkwmTjna`4ERtF^f6GxfFSs5n~tuVG0?#U4C4{8@04RCnfc)Im_ICsS7QK-Efk%D#XC>&pExjC!Vd$v{q4Mi!fPX@c2Ng# zT|Y%?KuPzo`*D|v<$T?kxf-Q}?T-jmNYYldHLVq@0n8HlCBWrIzyu}V7Id$%`*2AvU@Tu%jqZ}PttUA

    !J(nkdA#6 z3B94CpUi-DP_QO3ZtmSu);af3Sa=>wGE z32GBaDE!cOakhQ2LtHda7FL3GOd zP`Yya35WTq_|&Jl>jc$ql9~f6P+C~3dyrz|iJbaEb=38AHZJ`$^lsJq7&H_@nZUuU z5A26N2I^3$7?#e1-|Db?ovYEGJY63QyUgA;uhKjToZ=PxfTbX|a3giO*8t0W3%LVJ zAPv?Xi*Xg*z#TujVKP1nB(ZvceFr15!`a|J%K(H7MGK;f7WhzPP!|@o@L$1p*BycQk)BpQ#Qry3H4Kz00z?*BrAw+ z)&gk*r*x~T9xX7Ls6!X8_kYi7*w?WC3CW07+;FZXTL616K|{P88dt-ZZ5*J2?PZ z*)?|PwlJM_&yWDcn}Wz^_h=rW7D=jt&G6C!)booeIL}rpi>s>O3W(P$Lkm$2h`sUY zl^1{B0qh$b(|gyeHxjCXR_wkw8*gB3>(whj=v`8;?kC6tZGWZiGD9HAQk5CqpxB}v zvftKy5J60q+nRLiLhOJSS6~W`dvO^)A;bGEmv~R$AC-jU;89X1Fw={sf{|VaM*17R zm%G%JyUaYE=C1IDr#>d1_#@92OO32x?o#Obvyida0nESer+|8lL^yMM>|m#mN6 zdm?0${1fQB0|CbMXUcB?N&ufNhB|`ZR>wc#!$id7g*axa@I;P~ih*_d=$^S&GcDQJ zQ%35%;uJdNnDtk0YNPv58*QUDx^JL=p=|pL!K~<%nxU{Irfk^D-O#>6 z)(RJhiAvpmqME*+{P=Yom>RiAkucp%sP*z^OqZA2719O-49k_fBN*n`W&CV2{S)VP zL4BqcokkKti@B4--6(s!&NylV%s6V%_hO(b*33g~h>IidK0buw74L~iQv z=)*L@oDsH$2q8JLHmM$40K`I=z(lY{=!Fp@&O%lP)K560U0a77kv**Df^)NbJ@K=+uK{`yh>i8`mlC{i8mh)0`~$zwtU6RykYK@wcFG)Vozq5X*(%M7 zq*oSsaKcr&!g;d;QJmcEvS2R^v}a0VX0s94Cp+n=)A&dK#YQu(ce{5#VVS1FC)!ROL3%om&u%Q*KPPVDHEZL0DyVEUSf>IJ3qm z-3M!lWi?1Yu;dP3{xsP8NPMUYx{faxP{`2V|4hJcQM#|qUKI8;$-nbgpviUI5qh^b zNE}4JwN{ku^6Z6+dg)FP*!&G<>j3#90G(p8DMcl10Dg4G>j;skBOK(WYMp$oJQo&D zWUDe@=X?jgk%A{%j7JFotM^6&dy#_nZTD$NWZR$^}&(ZS7tc!9q zDErO%$WKjTCFs%mBsGUt{rG_Cx0IrJ%eUj^$pXbd_9uJEruM zxGB9F`orrmrByLSg$zqZR!%;=N7V$1F|NgpJtU%_q&?$lvVjcAt5`I{gFXvYtlV+Q|Wlm8eGy6UOJ3`?pPff_{kJeL@X zm~JQRAl)gC!+&a9Ur+>D{PDS1+5C@w!HCMaG+>$vM2j?SSB@frN0`fzQ&Lz9n-|KPoRP|VVJ7pwx9`x_~>^Ko@X`lI?(!8lQ(1tMy%_n<4AT#ba0diK+nA zIeC-A_6;D70P0#N>=2_uJG4yPm<~^Ov2-!`mhhyM!|$E*<^@e+;#evRX0D*q(>BOl zKBk#+lDLUhy5hc6aX+NiO=0&+uk=3;V&HC4iZs=eYmy2Ip-F>?ekbO`%4lE(wFRE3 zNOmf1f#o@M6ziH8T3dkW@%DwAqDdNCuymaWEbB^A;xxu)$&GyOek@ow+MF0;vmk8F zMd!EzP%?Z@0S{n2bJ4mCqhNr91kS9!jo!QtF= z^rB2G7)CZuhqMAA+a=fG%q1E#-yAoy8eQv{3@K2fxE46ubv!6!B>4M@Jy0h3t)g$+ zd0>Ff_EnN|UNID^x%6SMp?FJpVCQJZJ75MMB?vLL_(^Nt%7W4oJ+aFxlJ$t~ zDdLEQRU%A~1Ogy5gHD=LP-(0BA2de`nh2Tx8@-4cA=SP?lr}qtWdqH_ZwnWVFlMfA z>)qg9&t(F^7&Q1JYr#ffO`X+KT8vI^LB&as?SGQ{{+?>dbp;v&8#&=TEqpo9tX@X& zZRoT9kP5XG;2MIij6qOLP)F1o8e3L;8X)cE{F_f*_3~+Iro)Luy1qKwQq-1E$eA*2 zHD=1mH8iIG;}c32(&cX7omtiABL)LTR1>!o3Z|4Iav_0(aJcbwjND@eY7K5p%8b^2 zmgs79{B{G!@hkPuk^AZpQBCX)l7W z04;ldjGyC1BQPgs#$h+%2c!C+bqd{?Cq)BbywzV}si*iDfK#&ow~hr1pw0ygVweXf z)xT+F-_K$h+}fEzV`m0QX2jxrSe}0=ZnB*e9?G#XDJXHGx_jXXVl>u5YbK$)E3p)m z3?XNUF<&`R;hf-D)QkGMWC5RiI64Cg-P4gR0tXcX2K96V@=_S4fY5dah{1U#cz}3= zc8m_3ijIgW>Eh>9WrZiDo4ZV>)I({ab08n$e<*Sh#>nfPK?XN8850~+Z-h~bqd?c} zn-rUU2X9ofFSRGT8fAXejU(+Qmhh{3_c*+&QoWXO1A?N ztHA)O2NH)-93cqvIX(5tT7iU!zc?O!d<3fQ%=fd39ggMOK=@9V*eKl}Z0W$Ur{6Xp z+=pMHx{Bw5Tx)|{V!lDi;%?U}Qgjli$U~oiNyxP#y!XEF6Py>0fs~ND4?sVF7_aUK zG^VNI7Pz&0< z@C6G?iox)u8Y#hfTcBQ1paa);U|lLx6m`glFVz*k6;W((6?FUJw52b%PzVKB%fOfp z)uBv+-at3>5^{z4NQyQeNdg1j(~Ck;ZhKf2Mi+2hWv{f3J`6i-Lp8vhCTIKhqK8fH z{Yoxfp&la(cvP_m0tdmmp>ZlYwEW@-Js#A5u;wLJ=~Pn)Ozy$yaJVVdFX4^#@(>U| zz;nEYH`LOy!}uV??$jlK7U}MA1pt!JxLd(NS>*x@~%^6`x{)w)#B5>rZ+4_BM&w zz5c{Zxaeb*s!Wa0dgRM!XrayO0uh$i;$i@&OlTdhSP=ZJ%qzf|;>v$7w(@I4n2pfG zOL5i<(=eUDBQ)Z!SE%WW=uf?G#$9Y7mhw9fK&=xsJnevgXgd?cuKdFU-f*`E-vBos zVHCLy%n~pW;K>z+?P^E@R<~WI?_{Y(Ss3wvBA5?eSF6jMz1hTW?hLOb!3P4~je7nj~5=;-h* zNBq-@vEfsQa#j1?kaRO6ouDgysELVW@0S3pp{~K+56}arleSG{d1UC}t9u-Zc_W!E zl$T$!-^`2}0p@}?ZTii&{0V6!;G|5V1{f^KUHC zDvwl)mUm*eP@)E;*kL?FBM5oJy5^{{gftu$ZS=~v8B1tl(bkXdR>}HDS!o6yrx{CV zg+bGsB{Y!W%vnO~h$?q_#A$J4CuAj=}hUX@|3qR=Iu06{M z@~@2vn-j1O)yWFLT&FhM>B=JudE6rMoyHRfP%9I!@B}aEw}g7kwFM z*S|uZLjxH<@HQO+ATLF5rtHq>XiF`?HbgK8ce+<@T8X{Y)8ShJr^@I{tP*g+YlfwM2~AKEVn5@y2aZ>Pco&kP2PW(Dr(VQx#|B`@csQ@Z9XmpI>6{|@$}`##cCk$~;Dq@pPna)@32hs(!R?Ue-j3sMyLePNPuB#l5I?8e zwRoJa*Z_6=o;SLYBRg`t_P^f9@rJ{}C^@!2&o*g>dK1J;i92;*JYcKAFv(fOWOqYw zhGZxLzJ)bUK@LV-+2XA!F#}7s4^lRpc$ctiusr*p8tpELUv6gOMRCf^@6UiVR<4o| zNt|5a1AZSykf(K$#8&ln9+If_;W~!kO9caPbsGweud(8{^7a0FIb|e8Wv^)ap(93V z2YA$Z=pns_WnYdxOc7quH4pvgYj(Awmx|Yu;+x-@esO2|99sr}R)8#=mjU%6RuDE; z!a?bLBVFlcL0IO>xj8WWaF9iS9>99}=eQE(X@IUU)LoPHuv)qjp`K55<|nU+)l(%u zC8&UU%7q%gSRA46vp9x_%SONyP)ng|PkXUvI*aggJ6Bz?V3x?ac_c-~VnEpXDDiae zy6s%pJvl0VMN%u<&|Kv`Xm}1XT0M{4!FsDJ5b<9G%puVJaVovPpI5$yv{-v!tZNXz z305Ds=#+tXgZCqph*M0@Ck6qQw43MnY}&d~Ms0)rQ@<_n)AH&bq9QYAme^SY6*X#? zGfOKqWmE;Qa&~s0m@-Qg+-!Iv5IVWGYGg~X)eO@yvNrQjuqFw58JHmC)q}5Oqx!Hp z>I}4BmfgyRLaIQxBbW@fw>ebA$OEEGjh6d>l4k#IdUZ7VBF9rzb|2*T>mhRlu`ZSB zl+-M)9R>Vz+~h$?u+Mo4?!dXkw;yKYG}eUmI)h0T-wUfF_s&=h(Y-2$=wC~cRSeOl zq6YU)yiK-uFS*CfMt}iDnTNcfkZ;=XCSoA0V{N1pw=!#Rr|je2Wycar5+Ppp%A+$0 z%2zEP=>t*%C_fwyJ&{~d+M$jv5io78KnolyadheI$Sw+}*1u+2xFs#cLATF!5VjLp zySt%tHx?!bfqT)j;d~i9lCUTbn|ZKh!uVm1(EqYG9!@#w+m4OB&GXq)JdlkA3kripHZ>Y(V`7=DA|IQ`#lM4-G2a>d@ZsQ*@qt-l zmaR+5n<&mXVT5?xDv*6voCsZkle<*_mHG|;Pt?R3N>qY-Rrt_0A5O|p*LFvyc?XqY zl>ld{?R#n(=|T)pzz%V3cS8tdxC!mI1m#dyBlQ9QN&2E~&5=snQ70x|?%rnFDQcjw*Q2xX$Y97K1gMs=7 z8K~chE82boZlzG(e8pL&ZVzXBN~6)#*}4vyHA?4)``zp>PBMXFwim&NR$0VNqp&;Q z4&tVFdkIe!?W1468vPd-gE((AG`Qfg!B9c?2MedRm;*-KU`&r>0p$NE4AAZB$3Xlz zLnNDo*JfFI#eGj%F2{)Q?_B(;`3~&m;uJ(kDJ%jyE+T{<;CTf8PN)P7yvj-sf|2K# zfaQmzF5mR#^mMoy5&Y4UDt`;VI?TWn-xeg&)wYd^?f9h~u2LsdC13EFa%&mQa8q2T z#P%IueNyrQicTKrM!bR(M|0**=Qax z*p}eWSNyrF_;hVuajLdL4FtpEUdSh~<-g2Ab=Sa>>vjJx9&Psj|0TDR5?ApW4~#%0 zI{f!@q8CIUqdRR8Rw%bfp1PyjzYW5~36Oo-Q3l{H46}QXD;(a_9 z)0*Yg&octx1BEnDx2up;IVoPqYE_gYQ{s8_TuhxXi_&5%B|x+k zKxo4k8Z?wHIte#2)D0Eo2se;7mH7&=_N!j)(HJHz;7Ano>Y4OM#D)p?dAvvU+K`6c zm{u0iKysr(9Zp!N6)qGK!gDG-0x89mltZ;iz<1*{aqbB7t31LG=uQWlqA1RkodN6+ z#}y-NW$L=F2vl9MrvP$+XT}B_KLe1o9VFH&AYn)2hUsxdJDqSWxYMlnte}<1Rlli_ zSWcC=NM5zNmqq6#hrJKU6Br7#kAaeY7&uXzr0C`KXl?-*sx0v?fFp}LH}_Z#TBlH24L2WMsBu>dCU<`VwZbl$^(bChI63pp%xKsi!cw(_t(O5b5c^WzcEgi_Eoc}Rtl+j0 z(1#8vkg2t)mb~yntE)64@GsrL(5#Z~P3z8?hus-aYI{25oG+En_3gqb8VjQ{;DDPV z@@9eDqK?U=_;4GZ3j(ZdCs!oX%nMYRJFF+g$iG26JPTctd?*hoQ%*>!II)bU4CGjJ zvkv?O^x||SqEqyG4Vo0MpR$7#Du`z|BW7D&jYURa73Avsw95{zAbwxtsK|jamKZ0L z&I63k*-)%lrbD&lBbfc0un=d#S|dV0LLB6--h+}Hp+i{z0*LlFu#AEcaz*)5ux~Rw ztJ}`gGJRZ~rH&=M*Iyl8c$FkPtI;8_NCMvo3uaokCga?2^Iuww2mjL2X2aD!T~8(&33XpavTg4VXtJ!h$p-!CsSCQ%PUv6$F|eP!z}tHy>WO?`G;j_Uq3So**CLx zxCMP=W^$<3=I?*F)?!JwY_g<6=+|o#!70k_TzPzW^f2#07Oi9R%u%d z-{UY@M`ZGA$I5$(>0~w!tqCiiLergbqcR_>bXPbwhVIA1N_R*oaIq3JxlFiM5u<=_ zp>}jMqdf?B^GdjPGjln3GGsjH90um9^U6=rb&%1;2OHHcjJqc3bi0vmE#z~jO7|Sn zm6cXl5a~zxH&%JdqJhUMHMD`JQofyn{b6Ra3Di+{8laAM(Gx&-c=sL+)G@QB3pN7> zR9LUpS8S_zbEOmFr+)3NuUA^QK-9S+m-G?5!@9xw0^LXKj>*t<1 zT#6hnMGk7|V~e)B!gMxh-Gw;Y=tSP`y!SHhnXnZx5Qjv*ir6@dOP{jv?_u-Lz&HP% z#Gm3f{PD!f23O*BbR~v1W*_!A5YHyqNYUxP7%LIRYRyGt41R_2e0c+$IY>u#I$p|6 z4c5GR_5Wf}983Pg&y8i1E1sfv@hE(W+_cv=)APgAn9*Ad9iIq|p=0tIEpRF<=|xBZcVj_=d$k^Q_gW4)taj_<@3JvAP+DJh z5Cc=(NW0sGBUH^$P35oH`W0S+f&v?C;q(H@kl$^Wbp2ifPt>-dUB4x$2(8Cr>8t7L zf^8B~Qvb6s3v;=fW3U4Ipe}Ec@07w&5ayOyLHAy3>jM}FF$MDE72+CS2h?(^fk~=? zD>@svN;mM?l3uEbDMHb4quH-OIe#kz22ZM?XE9pz2Hj zq`R`gz2h>(35FyO{cz!zyP~ZMPlc~E0iWzg^a1n08{S6CWRECb2N|~k(GaXZdf->+ z?S*MM{NN`0PVdAGq{;SS{9JJQ`mZNMZ31S*st%=#yW zwF#!v-Ce23dzs-vZ|=;h>XD}`zr^43_x6~J_J6Mf#d~f1t=DW2QjO!zvUh1Y*XpUlFW`JOrri3!pgC**~T1h zEx}^+t!AMucfm$wACk)I|9oW`ha$4^mxsTp_?wBpoAGx${$gXvZ$%%+#*b$)&g}c? zdSDk{lmPs6Df@ZniT#YA4IGXJcQd=PbDM3_zjm(pCGEvqr0ZkQ4k%(_H82>FdoY@S ziNona&OdvErImyfZUvABjpy2`1%tLAr6k!m0v*84{?A8WSz1}Zv%EvJlIA(0|0rC~ zLGX*9yE(a){`Fw)0+*N>SdoF%H}?lCR0f-w!7rEr?-&Vq#oD?=y@JRgdjpeLX8#2P zOZxk=%rXtU()J_Fie9{7UIC&;`7?s{dqMSLWN1S^u`HnL}^n(AziK%ps3C z41bnCV^toDYgSpkeua8H8L#(N6r~vk7N~WCFZ*8A*)ka!ASGOOSQ_tEvfym&O)htn zo`;F=eFd7|0;T=p`Zd@fcFLCRcxz^a{LLjW`tI7f2Y27O7bfeC6ua-A?$rA?$dzdu z@&fKqM5Du}aekB^s9^t9y!S|A=Ic5h7UiArPchu9D6(AuJHrQX;#(=F{`6g}jf!B4 zqqYS`gLv&Yc+}D|QM%G_S3IkH2$ZuU*#E)Z*#9Q=5Hq@LLeNn`JT;RY`F+0&;rL(| z?Y`e(8-qW*C|-rV6)p~5Y(ny}8RouP3HDU)t4q1BmcZ%qr`TCh$H$D~W!QZ9x-1?? zerP2TFCMwF=QdO6mH)ZO+-54})&tmXwROeSuc0OWeplDv%Mlug%JDD@ne!@Arr%8l zbLw6NbODW4LW987B?086enEQ>UF? zoqoE`A{Xr8AY(l>tbu0?I2i80t9@IMAgWGVEnXH}!z|jFm%MK}AmH3DRC(5lz-rwa z;2i(Oqs4zFfog!&1ia?(<2U0_DYHH&LsBVMwe7-pqih^T zJ#gpV`QzKw4BAG6>|dx5Gr!2d0S+N%evkf(b2M$zk5Q1A(P7M7DJG3_O&T4zQRLVG z5bh(}g7F4&02&H>B=5;b+H4tyxs=1qw`4ME7FVNpe`wZ7*-xMef$PN-*y#6$ve-Xx zPVj-${(-B4N33vqJkl#LI`{w_dM^^0a1ZfSfwXecVZuCXC2}d_&Yg9o?to`LBdff! z>^gfoy_9Sv_VU^lIOE7UNI-?(KOkwvsHigy1_q?Af+Qryz)m#l6-SU2JszJ~!xa`& zInHtAoDGG^uQBg@>DVrOs|rn=X0c#2l~B-urSvo{r(R28en3NYnhb6lOBLj)GJpe0 zHM$Ejx`U|C>9WcCx@<55kWKs7WHVl812qrrJmOp{l$s90-;cqi)BIV?BN$X~F*rQc z);17IRmZE-qmEZ695GsrZtgmx=40ZJco;`x3b8J|G_8fMrXwax0CD^C=FR4dH$uaIiP$7du-sG z>cBno?{xtzy?X9kobg=~t$~bJnXc`8c>e}ctM9ota1Wk4s^{N3ckZjq2x2rYcVk@-uI_NJeT=?s7AEo2{^#z+Yn$&yQ3wxRw51TNL2Sv1&lb9M-Tbdpd!Ak zYasduoE@=NUZJKJVqz>nPS^(b0Tu)!XHGqsJaZZ}xLdG_@TCGyA;<}sw%)=S&gUdL zaXkA3MprMq^L9U=JrxLK^}X}&`U(2M5n6>@s_(?dRTFKF(9dv@`F`tkT;jTzTCobgRV+wHm=ZM5PxOIEgq{OQxCI)VLh4pDYOTF3G5h80+eb+tyJCWwx z>iKi;yp2OM2(?h7WDD5BKZvwSrn=*<1*lkHNcH@?ei&dXN44Kf<){GjN-(AX9jyB! z&>A+}bF~43_NP(3=bfN>?;(X$GYuMI(>`fnE8WP!M+8Q^Opf$bj4$@4VUx}FJQvrV zSJ=C4KXAPj7#5pTOFHM2Ly3;mfVW*4JZg6+`G%R!5xNPB5ou@NuDaC2Uzl}%7rS%< ze!aq>M7Tx&7=&B&UyQhf{t=YCKsFc+9!qpoq^S$U6dt55k{zLcq2jHGSP1z+2L$#h zzQ>S-o-0jiu5hYVbQSbsP-;4J$|@|}Uc$_k_PO_U2kuT>1h%sMfj{(;N8 z@_ChvCc?C0>*9n-21UYzska92wp$l`UX^%Na-jFCs-GV|O_tUGqTlJN z#cNyxZTY8p4V^~%ffT)hwKfPl;O;T*&Uwu@0E z`6uHe*#3qNJv@=D&t6||vva`uJa=rD$@-)rFE)1dhcI(4t;=56573nIwPIyruB_PD z`mQIx(N8pc}(_-3JXg+-2+rk`!h>i=e!*VPE0{Isd$mNOCG@2jlu1g4??# zjQF7{0hdz`2-udk!L(3OZuz-~UV`WkHk~X4>|>terCPMv6$w0}9BTnaWy7jW=~{;S zN73^Wh8DU2Bv#>m?DF?P9MKx74EoSf`=PVMDZHbw_ZmRkQS9Oz1TcoN4Hl;5xG@_> zW|4l4;YY~T8q;hezr@6?J)Q(~fqG++{bh8N@$O1q>ZG}b9q`QLA4r~Ho$+Tp(}cr+5|1!4B&_M{y-7r-(rJ{_H$?SE#7S|g!q ztF8|2gbvMixa-Hfc?<87K4^)>f6<-@+tdEvwCAo`TH*I-PlWAh@7A7f>Hf?16o?x! zI*i0RK#h(u#B4N0b=Yf!1ADGLcq9sb7HUCT+pv?553Q4t03pMhrqq7cClkoPpdK9; zyrsq}JibZv9_P0Czi;CIVaksRMxweohmkPptqW#Ga#T8)`?a7h>k^D{Jp8L6P$T1T zA0JZ_cQbAcV0_9C)L^!E$&+Xa@`Vv715HwJ(y(}WkPI9gi?r%84)GOO3=sJfhr!(l z_h680C>9}xQaHj+g`=@qJFEjXw%%Q1ks}jerqpZ{SBfdAqPA8JC5GiBP^H?|G(y$& zG4&E{5bw*WFK-4df)c|izqD+Mc@rwg4B%wcNJ1gOpU^2HNu?>W<_H#GJANvtiTS?- zH;GEE^70@=-(_GhgmZv2Qsylzie857UxQ}|EHefGQ9+x8w$2AvM<+}P9Uhp3jhDa@H>s}h&K&O1K^t_&A2`jV|5ep_hs55u@%=V9?tqv3+ zm*YwlSDNT@sLKAKfc)`fu;%sdXDo94Q|DU3o@d~HJ|Y|@hzh7V5X#}gS5nJLJ1RcF zpmk>5N_Bf&?Lr->-L6>eio9}tT@oDsOmmgE2AAVKk&{|0(;#!`*7t8#clQ0FXmz)~ z*Aqf!f7;pq%}K>6GCP7oBeDMf_llGBzg8y)YtpLHWNAxnG*NCkTum#r z$|89G@wto~ID&cNgay!mD)%#$?q>}3UfW3Ybb@(3ES4ASMxTMUU1f|OZcEm$0PqjA zUCeATN>@M+=B^A@?}wTWt73m(l52r8a5XmZ9F4v-a(lQSjSg852ghKTwk9zqHV|Ha z-&vVnS?*{2dB~DY3}>UJBe!Cd6^5Wn3lCW?Jm5in0>4;=fr!#g)qx zF6SSr#@ed{!MO>i48Yg~>Xcs)LJ6GH69YnTHGw+NGHtG>0Ibv0E-J=C@g!3|!QAjH zP1=@+6>E&Oxk@Vo&kOWrV3~1^lGd&jSF3;l3TqDHB~-Q!%1(_LseiWskuL6cmrk#8 zsuq%GP`_M$fRStC=^2#DgpVslsel|j%qdT3d@8jpCddUmwDqse`~m|>nQqL|f|@Bu zgBlDzg#pb{hcgd4s)rh3aLB0wp<-S-B#MeaItGTlxJS9oB|;%22?eQ14JBc1t+n2Q z=>=Hy|ANOMPq_>|+Jl>({glAh-E8W2U}QJ~=M#&lgUdV8 zuo8}e*-lC~NxV>(?DQBa;#vPVLi8q!na=^}fs7ceJ_#f8isj>s%O^dSk1VV`f+^7A z!emeNJqIbZujXCE-15GM=ss%fG4NH;3wridz$~XOtb%7c++gfI`wT$;gjuv#I_^og zh$I~68r-Yck*0QCRB|abl&J;9I=WL}{5S$v4em8e2hrJDe(UyNWL6oTCW!hGOB0Fs zqzi``1CouKG81M;?AxK}Lz+$kplGL8Ui^zqU|XBf8GMuN-Vtkg7H-6PkObH4LB_X$ zzpv#J^q>tROWPZVGuw$tP>IgY#;8Ap%i{Of;7GJr5FowlJ$nQ zMdLHNFsE|-p{y&m!3I6h#}!Bk#36IP$jw&&x1Me_aw#HRYS(h?z82+6E!^!uSZY7C zCIN!?9Ea1IKr=URXD4?>EqlN=oY6BeTyefhv8n7@kcMz6|APhTn|BNbaU%e@&^gb; z)`bq|_1n_TRgO6@dE038wqAlxVoxZt;Nt`X3CQYB0>FRl14v686=;Q=lr!}S(xreM zs7?0P?U;2YF}P^HCI*M%h(R&qae$}6LV{x;7KrGl)-b2gH=qZ-Kl(q?gWN6OkRCLj zKo6SZ=t1-@(1T0{E=lV_5gsKiAhwoTr&#}r4(Ro75(AQf(@}s1l?MhPD!;!$(*or% z(@6`?dy=$Z@3*D}7k2FbMzrA9U9**jJAw6(*-uy1;!E4`+9ym`)4}QDvzn}-{r=|yrv5Q6@2K-g3Z~6ZtvhXI# zAz4@!M;5kqk%d9nOYykk*mp-3+CTU|l7&k*eJ5l=-ueHAEI9w9$-9oB|&}xNV`W|?i5GGr62<^bQQ(e6xMTh>&}~Z+G4EM&(zLf z?g=Ir0j|U0^sEktX{y_xKunnyJH~n(ux!{h$l$4416A;mu7D|BcGix8o(kznOGLP0 zW@8JC(w5u$q*V~(k!A26|S*5S~4Hj!FjWTrE^6nD7O25*plo<(_ZtTR~-JO$f z>g41fM4A{E_n66qGU}vPdf!v)lRucr>DYK{S0*Y-rpiY?vEiGn&nA8r;kDD6HU@2)lPzz-s+$ftd*`?iGHgSN;+jb}Y_^y7BUt|1HMLtIDY(-3@WAp(IMRh8#T>Ot1#9 zm3A(d&>7wN`qBxpWe2`KzQWyi_Bf_~O6MDTeNwjUD#k(i*OShjtY8A8~Qlk_(`;A;_OxZ7{9uPUw z$UR_8kz#7Q$bovL-I#JfOg$)a+Kt?U#+3Hx74i$vj)q*j%B9YxWplyY2ntbJs9<3S z9@}&w2T@1_xFaH`!$>x!zzxcZGiI*U=m#8IgewAUpMf*MR6DF;5r52>Vhc}o%DvOA zu#--eOH@f2%&H+bRpprLL^)~dvM>dA)752;9p&J#1X%8z6eBm)n35s@Tbz?>MC~xiW#de3rC@tEL{vD zj1`PPF{4G!C?j{YF=Z5VWg=&^kvrCyGFnW{5;|tSirQ4oGc@EyfGy!Jk=+1 z#v8fWA}8C(os5u z`A{jpuGCySU#u&2M*?R-fzMLjz!R>RI#1-xHFD<}Q|5}PevvcJ$n_gj=836`MULOd zU2IJ8i>VKaoW(}&gT@rxe9(Bb3@aBQIPY9A*QU^vZ1$nq9Y3LrJJ@2Kx(iG0~aut+G-jiQmCeyA6K8T0yCQ z_ly5cU?Y!B{ux7FyiL6iYa&7$QKmns z{jx3rqW@Ttsy%i&T$iTWhyLgT@FZdd*n|ZZD*(uKLhQgdi?@w2JIbuG?yuhQ{YB&o z7~m7(9KpbGzV+C!f6q@92}RNStYX$E6*^&uoM@|#LeVa=l%hKmzs6>-*Jg)rYFSx@EEY#S(VaPsb9~8}fTqls`RKnv(8M9;2#^-$m=K!&qGk89*7^Y6rPThJ45Q zm43(h-T0m67ktRp>)T}bb^V9@(!R_592*Cew~|x`k6dyhjBY0}>Ky2AP(RyuSwFP* z``>YXeZJ%T?B8*IXMD%`4f~GsOZtxU8~9!3S9Z<+ew*yLAD@=~Vg6aaO@`kfzoFk{ zej)~~loIHrcEBDR;Mdis^Zm^KwVC0gMwgCMP&H$z(XLSo<)CUG4#jW@LZ#CQ~x^1CI50w!Zup(d& zK*u|ihC{9>6DydDyJ+7dhQegO2WPTJr=uZCjzW2pFfkdt@C0%4HU-05~X`57}8nK#j)fA}EP9Je>9@~c?P6rrF8UCQR z7Z%Akru7Vu6JdB9mzZ}BeDn@RrDs9)TDI@ z;K1W}q?7d5Q+N*se_37OguYdOJ)ihmTz{?PuhZ0*<>O=lnUKA(C_J{x^|pT?4I%oD zyWi&j9?YU$ZwLPEs`sBMW~Qk5Wg9mgFbTmLtE)cnZ*ZSvvg6J`I=@0O`ZOHmk8kNb zZg4$89-$msDT#1>=|7_oTzsz=;BHxeeX!wr*O!6M&66O9I4(WXp3Qeg9xn{ruauLZ zW-G5(C&(`Y|HMH=ts^r%(%D?cz+&T6^v=kpLQLQAJUi?k!@1eU!h_+d2aSahBez5J zc1<1}@%Jf`!L^&4c0&s;B;*b ze5MXCTb*5|)oO;DMuN2s6OlJ$8WU6WmlBpVOjIJ3hKWvnQ^`9TCMsD+!^CvnjGKBY zKixkByAK!I5wgG-Y!p(YBKkqJg2h>gUY=0|T>T@ph){#G!)!dKCo$0)gHh|kvr1q- z_#b8sjra_iHUU17FhuExcL%~#vn2w+pey8q9-4aE1&l4x%~rNe<)HeLGzBx@i?H<( z6b}`6lmDvDL)ld)Jud|x1{-Y`gE2vk!LCAU;2j)(z?8x$(fm@aQ}ad9tZ$$H8Q(O2 zkme&YWziwf1sf0n&tN3@-7@E1+yF2Wt0WICJOq@qfcYpgx9gE_3xsgKl>d*ocY%+p zy4r^)WC#OBCu)RnQKF!tprS+t2Q>sHATl`I609KFDvt3|&>5gA7?>H%$>As}ShS$D zMNMmJQHjQuXadMYLF85iwG|cZPJ=coVo>UQ&$ITK$>f6C_x-=W&!0^8IcMMZ+H0@9 zu1kLdZ43OUTkBGk=`n^_8d*pt*ZX`VVk0_O=+rf}MocwEj59{~!?jt)h{@K7pfMs~ zjJQ=EXITrEq7q{v34CKAxiEackc=2>VWqrWEx&8Coc}*XB}*t02?pWaWvL71W&hvcP4H zyukp!Z{#$|bDb5I71i9euwKzzBP=T#mIVv1MYBeD9e!CPT#bYkR`T+F`Q3+Ku4s5a z5>}Ye@r-b@d^(c&1RF8zYuCVZXs&r;ce+cQMd+_z4f1^LK<~{0*T7Et({cP%kZHaF zeIR@^M_y-LIdx!~{+P*+BT(+(CHSPfX-3dUy9~P|gLKy92-;H5IpIzndbN`aMXa>jj>rU%Qp+aW6n0lX4_0@n;{)5)F5N?qziM< zkbqRUs1F(vunHICprt-&Dc1zP21j~qE;-T#{mGFY+us~Nz$_SG6b>-P4uH!r82K87 zgN(6*Y`(P3la3XR!jz!Sq5Kmr9E_HROR^{rZ}TNtFc>Z6p{1c_!B8@##||Y^x&Vym z;l|kE=JMlM1veOlH<$$hqcGskD!3Iq@mtM;d%&AE7nP!V&6|!1@0qQ|7IS;>zu4lHI)N1T z5&sKIzO>llW%}6>enhgz7OzOWSj2sn7Jf+HoA6cNi->jB5{B^&$Xbt|9E#@yCo|Fgvnu{v%Yb@rk zxu{ao{1qgbgl@q%6U;jESgK-9f(_FVIH#NCggwkz#nysM_(v;T7yf))_}}9^v0$b@ zj;n+1RS|U9#~}S@m~hLJ>Dd#^m=wo-!6|y^DQ5ui8B`zl+Qsg6If7S!94MyA35;Wc zo+9W2<-G!1m4V^!kAT2jkdr^>ct$EbFaUC`L}Nv0nC2!<{bn=_Z(`TZfR_#%nFE$1jKv1RfWq()(A-Th2x5+laj7I;FfFAFv98sn6rA!l^CK zGp^m(s=a2ZgXpp)k9q(5@>aF3`Tn)?mOV_(+i@?ZT7@^H3|{l82~B(VPDgIb1fHy zZX00aG%3B#KS6!;5kyV|x~!Y)`O(b4YqJZwg1;&P4}dp&UHp)q!CIw<$Jss1Mh_Ea zOf6>#mxcQwWi>A6G0N4*Y*~$)SqT^Qf3q52^?Ku$4p+ne(0(;8#%dgIy7e-IB+^1= zVj14P5XAi^7ghq4?B2mnN6O%E!d0`nYZbM~dOG^RT+Rdo`s`$6*vRa4TkU zKmcPVzg1ME=D&{d9XI1z!xhVS0d`<#nW_J1a=z6|6xXFWF#A8!hh#_=_ohqCTtz~<>H@xD25iT2%^o(dnBoQSuL6@r%|tPn1B7X+%$N{HA7{8B`0 z^XW1lpLztIz!6DIT|v(AF9P2=}m<3BiXKYM-H-2 z=znpub#1dT<$!sDFwG|>h^Wl+Z_d>C3PFR-8V5z>KhlRRA=m$4noQC#}Y zIcjvsmY7mOYX>%?qDJIr9P1pHIAt)e71tZEwRkuKZf$+dfoI_b0(MlhGhq<`8ZuA4 z+m%+xwTQIktt|J}mwDHfdtWc}R+%(vTT5LnBUFumeJrSM`?gQQT)Ptfdp~*shZCIO zRjU4L;Ckj>-Pl{|47;(cYfZ?Qkt%S8&BgFx;BuY)954?ZR4f!(XIBROUO6X&TZL{lzZq0m=}_RD zPdQo`Z^IEyZs;^~bhbG+Gw>%3>I^l6I6z-!tb-2TdcJJDEZlrH{qPQiW1miEC$Q|& zS;VrOR$acjRr%+2dA`JU=@5R+(K&!y+v*Ve~+#^(j} z29f?vME%@{KG-I8xHon;e1O?7NB4mWgEnN*&<|SlI5Qvma0-s{{OXULQ2S3@YgoCr z$Iu5j1Mq)fBQIw#054QQFHT>-s;Q*OBUCGbw;;TsdiI{4uu?dBE%~t9$I8&xaX*Ag zX#^wJ$yn;0+sDn2dG{S4(M4xLYRFt5H18gaitGOqK-Z=Gi|A+N?6H1I>?sm$_PyDW7&3qN38Kt*9)%&qNFB+M6Wzo3;wmFkMW zCs+NrCt6nhgfv0Gz`PBesKJT@)7NAcxXK-6UQ$RGd%l3FwD%zHa_5=fCV(00z)?=yPo^SGRU@u?T;?v9F2 zFbn!Tm*#S%f=@x83*gq|8onfT)y5(p^cDHH)=OpFVcXQWv#37jQdji?!#X3444(L0 zzsl$1CYN>9;P7a$DvHO!p9FKx9jZ>}r_tb)6zAbNSDhr!;L#N0D4FY0ouz0dR4A!C zdC2QR2+9EO5yk5FCrPcEO{_2JxX+fpasZBP9Z&^xpOe_S`E#&!6QZ%rizS0x{Lue} z2N*W8mAEw#Wi{j-2g&2MNf#9F4aj zfs@YBcmonyOk9Hm?0y`L6OrH;8?P{>wTkr6<>U?o>RrD^ur@VwPK+P}d*w2iP&yh< zGi5-5P57*?kdJ?1w_fgwAGddhF{RA3I6CkdM4Q`$7qQ^+l)_{}kmW`|DE-=^(ybNU zFB-%Cw=hIs9wb|anCHTjR@+c|hi;DEi;QW;a)q1>xh)FK@UTxAg%qa@7A6`zLB+`u zFirnJpkHFa9JeMGO#7H7&XGn+Ygn@*biBvvgG8_^998M&jc9+ou%a|ngbNPKyH@u? zB4OZNOdGU9(U_*dG0BJFBXmYAIvj79R!2th=9W`hBR<64k?~j)(_3NMQ3+b5-w)Hk{lk2V8jo<~JEGY$I>(gB)NZ&uJ3{^1IvNx} zHK(lLpvNL0K`Bt&lojT}0ocx-g@f=L{MoRvxuH`7tTx3%p)Lrg@5In7XiDy3Qu3(T zOPRft)tdQR8H_L?+Q_X%Ps4X+?j zGEeIdmNyPFi(+$Wp zRaHr*X^BkJoC`OTm()S4rsQ-ca-z-9IxQycAoI04v*}xgcqP6A(nXjB*9E)zTf8=l zD+FAvBj5Bvi!vJ9fJELx_J;X*aqqpexyEB@ULr zz3hx%UHsh(D9JY(Nr5OVkFJwP;;AxkQ+c!sk7bAf7+s45Xj1yBLY#0sa99W$!TbPI zI$~^Qz3R8SY&uP;nakllOgqzXNAr6EuhejJIo#19c+k-j0756Aw}AY4Q+qk^F|bvy?hcX?<skEKR_1XL|GKNY~6yBE2Edfq6;_CR-D%4N{ab&$Z5#>26zd_c9 z`907p-wNc1V`SSk&6k%uVFBl$cP{TT7+X!oF2SEH{F&*#bB_~d>$Mm|xcL}<NLv z>&K*aJz9pfKn#VzOL_p0H@^@sk1pj)i=SjgACv?jaS0M7X@(Cj^04U8BU(KvCN~gFuDTR|l>HxPgnqjj{~2z#kcU zVoF*X!~R$)-N4RRB?|LhrJkQqncSqhs7eErJ(sL58qU4_N z)o14>Usd6i4O8e+5MA=CZRaLoN~XpJt0X*yo4dIq_n=@&H?<*S2&R&|q#7yN4V*&k zhTR&NcKoqrH+XS}#K=RH*cro+=BVqIwv1Z*q+m!#8~JNr>X8St0XuZz4G)jCxL3nd zRV%9238_yfgqHWM06o1P9-^vKX+rh*>6onqVK@szw)ZB;!b$I>V{Qi>5^pPM!IMqz zdblL?)VU)LwAn%qHGIJ+Bv+17J1-Hcu~=J?0)O@i@B1FpA(41K*+a62e1(f`E7Q+T0B{lIE`NDA6m!O279a zZ0+k+-t)WUsQiRbGLq58gFX0pz5X1U+mq-rx>fI3GPNN!KuOI?{xRKi!`^xI#DDs2`FHInG-Stk?wmzGh8*lslxoPrUtAK2k#Hhf(S1yDw3m$skyNkl z`y1Rt)^LmPu2c1g+K>hp`GF}i3+ ze|Pj=G?P3og+(f7HBLX6r=l)>2BN;7gI1|m-><{sQi#(HBA-HiuH$$UZd;`leV^l2 zJ(<^60X^0~pW2;-!JX|g?vad5*YAioPR3y$s(?qRPNh(wYzD;$PhO`9-L_kD{p*Y# zwpSP+__sdt;V>A422XN=cC zzdGsCmia2iq<`{pIvOoPwE#wqaBbt|Nvh|rmT#r;P-K$of;XnceHPx7Z$zguaX4+x zT_g~(rB`Cg&?v4rIUU>xy~}tnk)Y4RNBn?lKl05ZYj;`~LdHsSdIVAoUkO6ljm!)0 zdo^4S6|g+hyRxA-GGOfuBEymGM3x!!$bNG3wW@1V;pXyhA?P^{|PE?bIYU=H3vXj;P3Lio6 zYi~A&oMq}Ml>f0AYT>}91y2=%Z1u?!h8;+7IP>%hmFuY!k3wR+`~ZP=*MJb{4+A3B7IU8^7Q6+9I{ruudr#SghyM$2MG)e!z; zydjK@!`JK1 z?g^e4uVOy?`q!iaB`)(mpn@NR7cDW1|!D}}$8|uzM-O0gj#Y+tKcmIRI zvS|J{JHFXDH~UnnTsLv*@_Kwo88F*D)gJJvGGM;pfU_*C)E;nnC$WDDqQ2B+&*r0oehv>`W`8~*5na1E=>$7iUtRk04$y%V(B zrmVr{KC~f=nf@KFDMKF;nb;roMOsTH7c+emuGyMW6Gx-Aretz5(|6&TQ7M_YM(XL5 zOr4nNKjE5rDa~=c)uNP4AZ)`QeQ(1RI}VgY_)*i53B3jj^&UK0GIYUW->pqxG46B9 z%YbSg@pAhIC-WQwE|wjrCJgQ2KqPqhwL%R7$myG2lzd%2}0cwK^NV;M4^2>uJ-lp}s&TkZ#}#t-c!ZUL5h9rmx0{ zj>l0w@tDp}zKBo}Fl~27&qO=w@Og68k3K^oe_q)WVt zeJoZDe zX@!P25RC{FJcV0U^agy1ztkrW_cOJ2$lq~`C>Wy=l5zfV?E1BjYw@cLJ%OMKM!vP(?{#9NZ#HZz5?~j@$S$Mq*g} zN8V6gcY~99AHw;5@7MJdmt?b!-nxzo)X`9c0-C_-qc+}&rGX7%rap3` zJKd3NNJN?%~F^5!NO?wu;O60wGN>%4-U9X zjd=(#oulthD_T!&ZMH1WdV(3??~5C;JlKSK<5lvly7WZE)6`3bF1w@MK@(w$6H=YE zfEI^peia+8<_7eSw^MgClQ;t$k9}v6;{jFy*2TVbh6W}s>8Fu1*&k&zFKLpxV}2Y+MH!T4qSv1tEfYCtkI$W9s2Jft8EwV%~k z^cFz5mg9po2d~xKl1}Ulk}`U_X*4aoJeT$8K4Z>qLwsWpPX7i4$7bs&C{8O-UGMz8P)$lb=c)U~gn z3)5HgY8FFzA;U}AE$p6$9t94J@<}$&5>Bdch&YKQ*_R8s@NY11 z_=Np-HTTChb@PeHqQ2^tjjXZkf`2ktzy>^4Lnd~-yKpN`T*%5{pqFSE4Gl~$3R4Wod!YjG~ zG(ePuXZe1tLhxEGLncWk1!e&R_z=wUbTHgKR?!6#RKv6&3CYr8* zznb@NK~SFl1_Jf;!){KoEzIJ(wfz(M?g3{?9Vz?Tv3>8OjvVk59>m|r@UII0evf~Z z`1cC_#qiIOhW|QsN>593cFthB-G5zNEw5%S%}0G#H6rFN{)Ik!)bR-ZGSHZV2T(ft z<#0GVbz&Hemj9^oEcz_fc$ccrl4VVSo8i^w2Dp}n^C8%mP~{H}c3?JIY)r4Fg2t5X z24X!6>i5*+28R2F){quekj?jQ>!&p=<}Y(V`O3H3<7*SWxu=szU^i+-^wZsNbH0>Udc|AytQ=Dq zL*d$bM1`A+0W8IZiTu7boCaH1-JvqK)^*H*$K%%8msG|!N4DspT@5|7;6>I*2)LS} z31zmaKxH3I0j;>_N6SNNumkNiwu0y`S#Us4Ts6lJmSAW}W4aMqA`*1Nw-#F4ZFSI1 zA8)hLbD&yS8jW;TbP1gW(RN)kqD6=LLb`uW`%=@TRPV+UH2DeAv&bg`R5Rz$Mt3k< z2cQ}{7B}aiSK7MnhcD6R-hn5zZrUI8=je{p}%oQQ# zD?kJ#VBXTeET9PRuKem)$Vx!U02x8#QSL2+Gxl`U*I98>7b^+iPbMGXAnhb0M`hcn!SLOvS z7kQl4Jo2mi-ls5*yjQy;;yRywiO$DM#)5qf7d<44Vv=r9k9(0Sib>keM zxQ(3T`D+}ZzKr12w1bCl@I(<5fr&f#uR=k9@7j%rY*#horISG`;jkxDhH$yy0i2AEJ>fl;f_KwWi`HjK~|%5 z{w7DT2X0g4zS?+bYgyS=RE2QX%1Z&UcMZS=6LLcQ&Ox|z?-=?cVtVgVEu*KX->-H; z(qW1>)Wldw(aBhDM1pkpQdu_&+hdZ^9tZO!pveerRb_QA#E;t3-%z&eTSu)n-#U++ zw1`UhE!Jnsc1VcP{gc5iJr+0>w{*Xn_Am$pB&Tc#KEQ47d(V{Jhy{A6aj;yzwi?G{ z$p-2e@FQT$l?#Ws2*3o37fgbB<@#K(S8z+n1;`@2{PtkCi7kpsE%7799FS9TLmwSK zVjs?*)bqu~6D2z62s-J@Hdd7)VOW*;Eh?sf`Xg|-ONY7iaRMyE^-b|AFBo`A=F8`E zt-M*W=n9nN)EU+iq+-#P_A_+{m#@Kt*%XV8vtJJUGQ2sx?(v(Oc8?h!mO+?*3UF5KLc^0{7+^zh?l;lmJO-zxMtMCG}xdyX^kD*zkfgzVeH z73a(HRRdVF^b8k9zKNcN-?He<_%);b<*T?0k8<=y;BVoNC0UF8Wvc>sib+)*7_?1T zA4&6B_{-+hkmm$~VQ3=r7d*wZIGS>)TY6NsP@oy{vmxj;Wo{;@B??IA$~+tC3`dE; zP~w^@PMTkxEJNUH%VM_^ogamCS(Lphk9zS7lw%JiA5YkZEMj++d9fH#4$oM{ap`We z9ku=yz;X>M;%Tm@#$ryy2*R(u11*+PwGf$_dI6>PrYs^Tz(xhp#?jGaR4w7_wl*UiuGFmFxCmJ*jp3AdD`mPU5kEx8a?=zVdVg5a3N}Mcpk1%w`oM6)hAbNt$XKH_j^DwsTebsp zU~yK+Sz;-_TAeIn5hRW168tuF=8Wpm_gMIm1E_G}w@r5QybOP%uj`uJqhw*--VF^s(3{kz(K4FercQbpvxQjQ02P6C z^LxV*kd@7;0hhFu;EBLIATUswYoRcwQ3GF?@=YV6RI~%mKKhc1d{R-5Ml%|5`Zcyu zIhC5!5)7u^y$x6-+4L{~2vGHfXj(V;BY3V;Tn>r$O{QWtR;oV2^)W8HPxl70M)cdS z%AZN?%{cZ(j=mX)1j?1O<3XJCi9RxOVBeSHj_w9f9(@;!!?tco4B<*e2bb}5s#m+7 z!E*i&(7|kiYZ4v&f=}Dj%r4mYEqLG^Hy+*Q_PPeQv7Bg*?6=clsBQ?L=v}RjUncvx zws1*j--d$sWnVA{`Fhj#H@X!_m+^6f^ zcYgu{Fz1hAfE{%|hyfmYvpoiQJXs_a1MKHeyU1R@luPc8T!wAbveO$QZ8mt{HoJ^q z!VTV+O{Q${^IDqw2^;*wtv_Ld4{g&lT9yr-SM}d)@VoT}f9tKp2Iq^0UYPap;hyfu z$uKezN-7%(gb_Xr`sx`Z<8oGm6N!vCAsw(T(fA`elnW;KR1;OI|DRFUCLm{GMxKH- zgw%TVeg(LZs_5Olq6>qt;O@v`)C9XeIp9L~U>a9A0lshPV_F?^EFS9B8kB=VfgiP* z+tnE_fiAiPyE-rj9iOP4I-ou07w~g*8h@*%;unGY~44T1HM|t0cey;rt$DCSfnj2IDFiz2_Uo&*GgoEhEHc}bY|mmmYhwb>zynI zqHCr8?7~$ZsYaLiofRc6m-B&jS)?~*SVdqE%yZhPQ~iDs7-3bcJuYMi^mU&~MO+UD zNJO%*E)lpG(~}?@XQD6^Z#zjGt-b4Bh!;;PYUuPG=#)b|s?R)8Z`2sXe>|#X`^kZA zRB_T8p2Y{f`0AKH$-;6;Pp8xkc7s%=LvUN*HFtC)wO{g`axzaatRPAo(Pj8WJjnxu z2wZrwv7Vd0dxy*V=2J9~U@p7*X{~ZSu5&#txmb%00_t?Al!$0ZAW}W`FRs6)$KdRs z%z6QNp#zi$wkzBI^qsw}p>Z0aaSUP*UtUUUZ66*tM_DMX(G|fJhY>qCGsm7FGZXF0 zXIWu&S2qF36VWGxxkC}^#Zpe8?VyaPlH;G3T|=14I;x?LC5o})J$QD2ZY03pMg_Rf z&l;34!fHJIRKOu$L(Hf@uqxbF@xc=9OR(|DTUBdU9CnmRuR+0$vAcIo+8(q^Vhb`H z{A!w4Z;Bt@4x0ry)3iROW!=O6o!k&*Tn$dcN{B2k0a(jht$&p;DIx9L=)@(Q4YcVF6rSgWNLcJPVme^{Ms5a(Th5g$t63Zgq9zN)ru}I9Tj`?*5 zi}Ygro&VJ$0YcawBCq1N{UWhp%i@TSx=53-TkXy9t3P0+WgppBg8*J=XoA)^DAB&y zv%Sr(pe95nmO}zYiv-=#V_NE2xVy~~E@8%&O*UV$%4!!SvJygwNZ z-;r*$z^uTpZafVOEEjiOjcF~zd+f(M2l>?)eAKV8$jq-Oyd`N4Yt4|`!T8&2-U+E*4w+@&zt3B0;Ge^!{ zOHM6AC>q_WUrk|yxF2px&Kl+Gs0{i6on=BFPF7-HJ67N;bj3M07H6xCm7C10WpS2U ze+kzJIpB`oWADhlnff&OCDyyc)8smQFsfJzfYlj(M;m+T`L&N(byFn<*aVI$yL6HH zJ+ft47B6u$MBDpPA4lT}Mirm+1;~(d5!PCI4#t4a9m=9|J(S@!?8V%*Zu2QUSBW;i zdPcX&)pL4aO=zO8JZ6Z%Wf}3s66g-iNvoj6!)oot{Go?JDjr2>%b6 z;Q`n#n%^`m+#l&sueN5n@90cmy=XcK@hS9WHZD|8>6lDtC2)_%g%*PDmyll)D8**G zg6H~JIM-oT4MMi?rol!AxFOkrSFlilz@C+GK6GfMc0L3lCH-|Wir^b>C$5qr--8dH zAvJDu&%R0KcJAI?gCrP}k=CgK2QUSmG+lTv)dP@<{dSA92gyKI59`&R|b^ z4DLkp`~s)BAy(kRz#KBxAv+U;ZdEocWl{2jwk2VXqD!`JY+|Covuz8&TBxG}r`iSJ z28g6koBqM#tfN8){=gwoJ7-h}g$S0pCF(?OxW9T$2wStz4}LZ>GR1)f8rTDb2DKxjYu z=C9$L%JFrt#~lCY@tETf{x#-2=IGP&F^3QT7UADZ_;&#RPDP#~{4?>d7XRA+m)0rW z>FAu%#nsi}=mtcE|G=_n`7hy#O#h|749IVwL5`5ia4`sZIGjd_SBowTH2{az8Vs{- znBVfWo|oVNxEROQH@ZQ{Lov%(C!ij?0`e_vf-DI4$7V`-djn|C*P;)=+ewSO27(?# zbOjkd)(34O>I6U`0CXsz3H(0!_2XBERMl=S5D{J9L3D6?%e#iQp>>A00zPZR#Tt|V z09D0?Z;hc{1vnRL8(vQn{BZH^r@8s3K&Cq|P@PmI$h}Qe2~NS5?^xRF@w%g8UFY3R zp=6e*3whs%MbUP3;Nyc38tpcZgE|V81w@qT5$UU~S0tkX;l*L88fKR~)E@%ZLeeO9 z559W5rFZnyl}Av37cR9#3h-;90Mk%PsPK3zZJz?(wdl$kb-i?@!p`Tda5k(Xg@a2y zZCw58{J(;@;@~?_KuEXE@JG6%CsFePq1eQ^1Z1_X-G{xS&GU$twI+lb3QY+2eIJ0o zV%`avM;_YhkkM#IW{~{tV;6}01OcG7!9HEP)4=)HP9H%$aIkI4^>q(n9B6yUb4Q=X zu?dxgj`c5OJa%q)$a6=kFu5Mr}EI zc!JeazxOY2lpF`*zWhx{z_jiwY)+f4=q8{7v6<9XbbhsBws14jioyBJTtmZ28WeXz zN-M;x`-+i41E)Z)xk^+Td#YUM10+&7v=9#1c!c@7fNNjPkgMfH>R4(>Bbm9k_ z%?+<%%C*ZAKS((zs`A?k#A61j^O{d04{gOjXq%+k*vK z!gL^Mzxv0jmq^y(wnSx1zq&nkvIEYz2FI&7LFz38poAtdC%u{Y7ewT^Y5;kYt`s&T zQfdWifi@$`6`M6ISgbx-2{jFY2-uaF;>f`qlLdo5+!%vh(dXRbJ z_|*rS(U`UdN8KvFr8^1zz8Y#cP$Afq9z)Ii7PQPZ(PuJV*yk0<6tBwXG;E_*EvW3l zcz`;S`i}=XpYlYA$Z3m&vW?qzVl-!O={OctYSG~ z=zhXC@*g(|lq0gKLrc;z=PY5Yl5#|CU!3bAYs2vZ$AU{wOvRTuDa*6F)CN7f7qbK1#G<~9{;;$La;uCIN ztc@oDWb)aP)UJw*RsHbKPi<@%c0M7m|KnjqO5SRx|0180J z0-GYBSAN0mmh(PCJXg?H=1$D2cB*N1!7C= zHMRI_!V98;n0)6l;ssGr!kvf6B?o*bXsWb^NDOPU7Wq0-JY4-AKpKjNU2Mg}AE6~? zGy8wD1M;Q7Puc+|F)MT_IV49Iw1ip1VNv|i2s#tk+?<=ks1I5Z5~jz*0hWMTXJQwl z#)%g=OecWNAxK0W|DSYh8N#QU^Lg?(od=eKxtv(0vAemPwZ!BYVZ#eIuqtzdt~XJc zp#DuqXcNQAMDUXdhzcKeyCdmL)DXTg(T7k+iCd}HF0dOmo7H=GpmT^OjXlLVg!UkS zgNx0ZWAfBYDA$#14QpXtm&tZ5kA8+ZD2pD?T!OvfJ;QS0$&z1KpU4;10u>hWyg3T& zY#s;XGH{2-WXFpCi1=?v3>53q>I*#C$vIbvD+Q7s5bp9II0PY~GTf5e6{nGpJGHH+W$sF4XQN1 z5C5~-j0r8d9?$J5NAdcoiA{oC;v_Yx#zDH}C@!9MfzO4nz#rOasXVo#rCV~*b*VdY z2DgHC^2hplh913ser>6rPaV~7=b|@LcVshQ;G0+zvL0oiLL9+1$Mz`Tjy#4EdUKlH z)DAGb{A%D1(7kTZy$@~B8wrHWR?J=COF0qS0K&=76A*TDt}W(DY^1+QT5qK7NFRM8 z700A{8xUAi>y5-_)r%_t2pL88?y2BY8boj0n(8q;*~z}+KxYefF@?+lpVrpJ^txN= zV#;oVqt`3*S~*Sv(;n>?#pgnwXC(CHOnFWKF9EqcS}!9b0xFNb&XKti0MB~?M#C!X z(J(JZLo{ZrB5)hpAJM13PJ;0*SEA1+iyE42^@dwW`O8X$YY4QCqb#Od?Ni&xv4)c` z(!pd!FE|a9xR@%@As63*FeSPImlzLlkTXc#bpS+rv+1_|h;?s!3)^M7c>{whg(lvn zs1bf%QX~BIA1+1bV`+^i#xJ(S*$?!S`)b8-Oak{;g*(`*t#&we2|uCDiVjr7WrNCc zg`Z?Lc-&2K=5gGInu^z6)e1|R>BOa>-{N?I^9w{I zUU*fOgW}{lgH+#6@L3@@G%`9NU6K4S)5E=jvnX%jG<1-fatB2{8V3wA_3fn9{UW$8 z<$i(N#lF-&t&z3Rw-T4?n$ojk_1@}4&-7`P?BA?G>fW>*_Ui|G_Sf0Cv&eZ1?>M$S z=LyDg?pqVS9_5BTY;3MOvI^5f4s8LnhiDIvm+d`8?lPq$0U}X2l}{VIMwfaT0?oqIjYdqGzQo7VVWti?}+@;&8vp>IsB-Uf{ zQHtEdb=BN9ms!J6hJ_#Cq)Ar?Or$>2s|xn2!U@+)-)OE#IOfzOw5O&TLxnEYLDXyW zBBF$p{~ve}*pYv_FgMAIfPakt!;8#oHLWi)Hd|HhGZmPC7XBuq98Ad+Bd2AiFUOct zX~=zv%IKk0;9_^?+b`&9`i;3u?|{Ya;c5bY71=7`EUa`a9g-8y{@4XxSylnGJGqj3I89i z)J39^ex^HGi>L43pf8jm}kZdx^t`;H+|!9pqkM6*hF^@vV8k_ zN>xAF5BDfh=uj*7LP$UVK>nO#;2&GvS1ZPz=4Fk}&E6N%V5kTfhG(~Y6H^3sS!gvb ze(>=XrCw?2{O28r>k(QOqce6#Lth@8FYrbIKjgH!H{eZX59+F znqb{8W9fI(H~3&K=0o^!Jd|PHzZyyStG4pW!rx}yajxmxUtrcj`4$Js9o@|<5LUI{ zz`Ahl5%~FTcqV{7rgmK1cmn928!%qwUkU>mYZ{W}h)o%) zEEDA&uKNg78omrSqM=BX&VK<~FXti!JrZOFHYDgkf3|uTaI%Z~4O#daScqOhZV0q=)RsH7Vig@Fxfy+=2+JZkG)Fg^u^=jY!pn{M!fUM?nj>{aIgD7n2Z{UV+ z%LI9H1oN|6a;L0;mh7??i2?@W%=VqzLM+;CB z;a8YjWO8h~&}G-y6O;zlZx;+qPtZDON^8)^T&Y(d=|_I)(0|BeEqo$5Su;m)vev2F z`&3{z?9QJv3)V&ISHK-$(=`4?prF4J~3K>5lu?mY&GIsHX8k;EojY zAoq#b4Db-Ify%350&3ha8oV}Z12BM-`Cp2tr*gsakBC?r<~|e))B2}~Jme<>x#)Ty z?AC<6xgYQuyppgP^1>7@d?3d>hyYfEd0ce`w`IU`4xyW*Ui)hNtk+*KDS z8GzBOE;$bU*dpV@d4%|F49F|s4cGYX1U>@b5=a_->JXHn(;8fWM(?9e!m#@~)<$?+ zf97t{i~L_?4{yu`SY+X(#Hfy$L}k*AcfAh>FUE{f*cgtI&Uo`&9CP8zR0Hc1$&Vg?YdCxwMo86;|Wdg>QrY82BFZu<7k%)R4<%teTA9 zaIjZ&F@kS1==!?RXTkD;IzVX{O+_wF8%)1)P z>M-V$!)yD&QGsiEIP?){`!Pot73PY0Ybgnjc{k~&`ZSDdvv;dQefsmS`l1OX+0-DE` zaJ}b_Sm+C^2EJ>C5BBexAb0Lh>PO;!kC{mObba$e#kfete(cEZ=tfx+O9z?&&)(o<#vema@ZjL^;igb$ScH!HQhNzXuj?mF;1Py)@0VIE^d=1S zBo>D5vXx!WdXn&y`pH=jtJCP;(HBdcm4lMwh(UDq!5=mF@oFrH3rWhY87>N5Qt$+o zX-+(RrQp|*Z!YK3Xo;1f{X=E)N(YK`qNn~2g#13i-YVK zwA&h0Sqm`X@Y{6anN{orKLEXD2k0?EPwl2jw&{Od_vW(ZU`AZ3wm{mR0)&>n8DLom zzq(u0-!3{8^auw>>hxn7aaQ}rE|bRifg`3HivPP2PkiPmBYt`1e?4Ly^1#Tz$Xmvp zX5N`&-kqrt($QQ?2r}3f{zd`kyOd)w|h!%$qZes{f*WQiJ zdMM>18TJ=dcG}HaI=scL>X3Cy?HqJ!@1#_M$$_>N1gpSed#bKkJ;GJHNIndi{ ztv*O()i7c3ZHR)7;Mv2Z3n2tpAa)%l4TB2&d9q;6$vlCG>|`bov?)7qL-Om=#8;1; z3^4cQoC||_m^-yExq%7ELPJlHLrvJAs90w&UEp*Cr=d`1c0D_AbDQjv(SbgOH@i$3 z2ID%W;RS+|Ha7>|`enEoE8K|bL^jVCh;b}g8}@R7aaGPle(lFf4PUEie2oKb?AJh9 zG>!F1^AxE!f3X4Jg_||Y86x$g)0cUf|NH$%$kpz3VNX^}Sm28M$o}IR8Ow=1|BL;{ zLIY)2wBLW3|4i9`>{4Q5ZY*M#^!^iUy|csp$4^+9AJ~5qQ3U%>oq9fTb`}Z%XG{DG zbAAp8M9Ueo_3|Kv2M{<+Z!X*f*6lmi@aFymxxuo@ov>&M?8YM+>v2`byEW6Xmz2$B651>I^jVD@su8+U~3<$ z(sol?1EO5y-DR?c%cBkWS{6NwUu|Ipcl8$=f{;vG#?A6X#}Ix~&57KEBlsH=o;;gV zo#xYXLo+|pa|1c(<$_1FxBG;u3QMUB$Z|WLzbPGH4N=C>p?^w7!bc$j8CoKP^ebyQ z<&p2BPE%a)#^k--QNDK2F6N|i5kA`vFSeD8R8ikH*u2aDfTaD;A(VT^uf`rAgmUi# zLgkfxG>({rUI|tuQlP?VSZ*Y34rOyW&r@4Xwu&3pK9oBk*IF<^3%Qnu5~}mZDQF#DUxMH~d#M}6=Zxd(d>LEL7?APUD^o*Gic?&$rb47}T+bThEN?rYMrRN zp44olT(FUF-~NBXKkEO4Fpj2wEPv+APT?P2aZ?KaXlM%mXz10@c{6VHndBd} z_5C3v=TZ3)^7Sp1ck7Swk9MWd!E^IXN~%2;87-%?*Nd z7H3Fid=?l&>%$3#5Z<)#gmN`ch&d(Oa%Ah6A#^vIO)`XT$3v3mqZvY;>I6gRe58^e z6AU5Y2lXdM2U8b9yv!_!4SNUt0|CL}xNc7yk0&8P(=9pOo$^s zY}RsgcZ6o667$9DW7m-g2h#s;gKHNpYR@cvUwHc zJ57Nd#PT8NF5I^i{AaL+8~)7f-XmJeq<33MzZO18pG4R%)n0RPqT1ex3IXeM`0*U1 zKd7~nS>Jds!?IsL5jokDG3zN;fbultTXrApA`5hpbQBpUY^ftN5?raaecnZ(0u92w zP0%$oyziHLo6EfW%e{xoyq_S(sNvmb%vUk*0k)u?oI{TH`|6yt3Hz=YF$@$#Jqo{T zB_=tQ-vwr#K123`17&kk4ex5x+n*uoja9RN4UC#~Knfo3ARM?0;cLJa+D%GG5WIOF z@9O%VgZ`&_wrF@yguu++*B$!z+1u)Ni==!xp# zNE@7K_@oMTHLu74)JfBABJRFTufKpwows&7{0qA8`wMK4Oz&!j>kOg`xU}|$Rf!WP z+6_EgAubv@8ar&L{tPGL)-1eN_kZ&yn$H>X9{GgRmmw;tF?}h#KbqSI?g(#4ulrXg z_%m7E>I0!&ls-n;=NvV@$8?n4g_u!0<1w^ffMH`kIcj3hOA`Jlq|v zVa}0xb?QX-i%ko^C&7Z5*rIy81Xqhq7`IyWLQe-cdW#=U$ys};WbA^BpT9`|-7Da~ zyB_wddmsdd$S^BDG1EK|O5;sPcs7TA2C=l67WZeum8_lz_)%FUWT&^x5ETZ@+fYoS zU(H`qEmwlSp*=WhwqJt+mFYXLoMAc2jKRiKJN)Cef1f-9%6NT8p=Z;V z!D*)HtH{>^3h^^nVR)B%ysO>OYyyuC%;U=i_YgbISTzkz3=#fp89u`u8-Ce3;3g)q z&G=w$Z;2c>a0h&$*qH!TG3}gFfD7J#0be#V*_aX`nAPwKB47raEI?Yr4I0uaItHH< zNDGs(2uNFX54zZK?iOI91-qFJN3j5eEA#3aPK463`$ZTqE!FVU4e<2%I)=Q%^sG?* zo&)50m%11CW;q*3Yq9z*xo1i4GUonzEdj9%?7AL-b8yN9n!f@wdF@J2OW40<+`kBd zmp{tPEYqMEDg{_aU&RiC^qBLie*WilsJOTz^qi0Nu^~o%w-_#N>3|YyHiMxa?pLoP zmXXMMDT5k58*szi8h$^!%hpSWeeBP*@h(>X>Hatwj#bw^21}VH-5f-Dyk~n?!;hd} zb>CJKx2#(+i&RZ5W0Q0)nQXEMP2x~C>l^l9Hc$kTUccS%ci*gG4;b)twK)<39#pvm z8;Xiu_*2V2>ZHTl#lHL&ieuD2)f;qws_*o{bCX^|gZ;$s>WV7+ymCirfrNFLv;Q60 zmN)TnbbmBQhXNTA8*8<#JEwL;(QW#POm_PTL@`3VnG8C^JaHB_1)^iYYoh9cv`iXr zhJMIv>`9xX{&anE((dSo!c~MU%zA)k~qLYJ> z1WsZ$A_Cwf=1Rdy;-+-j?HUpFK__rBG^`RRZ-*@_Y;4&FRS32`5^jwxbNN9PO3#>1 z^o$I3>DgIG*w~UhLG+B-?4B`KO3wsaetTOITmBnKV#~RwV(Aea!&jM#B`cx4;9-!k zsbaH{s}UvrnNJ@88%TuCLj+xK{g6WzNFka)Y(>y;%NfSuy30OX_qa#DZA@7SE96@= z##?Hp4>@F?-tg%utTEDZ(aUjq+?Zypi)^r4gp)nnCTat-Ii2qNE(S9~BM-)*Of$oJT3 zjKJ`f2@$m;tV43bRa#OR!B!*%&vxaiLq)PzN(%xu!JHFC;jl_SbcbBRCOgC z#nYCsq(tj^1SqZmE)`WQn{EOL;bvwz+;RF>>XQH#1VHcZ7hgAgD;FN-sNnFnUe!HI z9n7s$GW2%pW-LaLR9JazNOk#J> zMtAgf)U4yeK$>?!ZNt6jMv9Otr>&4nh<(;%33mhntBCSDP1cE|?Z--+`{nM36f!Nbv|h#Uz703(SIyLl!WJo!`uFy}*}z|_>21*Wf7S>Prl5_Uxb=FE~Z04^^mCPMh5 zH|bO5RP?RkX`!DY#&lYk3;aE{$)=yaNptK=bGV}s5;=&qY?DrBR}lGB@UX5x8-CSr z4~=j^jD(iN2TxL$oS)`s@UzVHibg~*gW}Z+GkrKn5($AZe;G)UtFWH7qSwoVG2_+L z%W!+^{DwE8u2^cXay}9*t4wnV@ZZoF$(IB!AYU2qe=nzp>BK54q-BQ4nzmPYKayBw zX0unBxl$%caKT+OldJqoBxRK+%PQy2N?qj>rv5N4`1!>QSs77xJ-|^cv+0{#(IVm} z-Q9YT^QC@=jDl%dh0j`y_L zz!o(ItwFtM3F%N+sy})j7DzZfg;_7l?QjmShNN`rWwgUlYw!2`BbD3kX5wmi9X|Ng z)eAV;OeZEgfVA|K><63JxdBN`HnZ82&0HyyEyT{THztXlPDmaVv7U4hC?L?vzOq77 zPI0*>mVxZ|h=vK=6f~1{JJ=?Iyk!s~(cIIQZ%sJ>hb-RJ?1kaoPjcvp0bM|-ta?Wo zQG6hBv0yH45M1ANsDzXaSF5o@{cW=dkIk-I3Gqf**R}Z>eXb zfp^i_0QyPlUn_QTfAi`@M^WY&mnJq0-;$2#hb25?Tj+;#SVZUtNYdv4SV$pgJdE%x zqUQ)~%mduOc<9@bS}M>dIkjVitmzXe2i=mGmwV8`FiD+<0MD-EVZK4o@-SazFmL8k z)aQ=SdvYpvUXor1?7YMj6>LG!D-&fx+YnLSS4j!Q29(nFu)JsNnx{eh0sGJkXjACv0{8 zt*Kk|my=tzC?t(Mt^;hrKCs_XuM8nrEo&<YAuqpyF@R^)9*>4M4}xmhxT5;xcHV?c`7hS0$W!8~~NQPc3&94B`q1gxu43J^_lhGbr4`V=>CGJH> z+Js3Yo=5_3)=>?hy`?v(>t;Bix#MFOWRv_1>R!Je`pn~Ls5jUXs$SZU1@8iT2YiK~ z49J8}b{B0ID7uRck4qPg!Ht85)MAf#H*0;qj`G&%yr$gs=`v+MT$wCIXnZLAd!ZuS zJ8;P04l}UM5O}7O3-4-jmax;nhJ+UxFSrIvP4Ae5*5No}l97Yp`Dql$BCAZCKW)HG z7B{7Wzn>R_EPk`3`6k{T4I(conH}b;AP? zCwVtP!xCsH_3Ki8EyP!Jm`M+kAhe-v|0n=6J{z&L*AjM`2T{9xt#X{WEgqxVEY7c_ z0soujT39tk>pY8oC{LVJez}VxtV~ArSz`Gxk=bCAXC)>xC!y52#+}v0fNCeAxOz9i z-8JUGsNqb;yi3_AR;5K%lP?f3Qfd12@{~SbsBj|QEJ5;w} zUsFGk3cgDa_=f}h^_vGVz@_S!kADq62UPnPv0@&uKw#-Vp!nba19&|X_5S%wI|CmA z$s_+}?;*rDL75-O4YS?5QB6sXnrUF7>Uk2p9y}BJ$Bd?g0Hegeu@R(q@CQU0{-ljT zm?z`vZ1{b99b9wUWN(7G37{2PQsMwBOV}C3e(;K}TyhYa1cNY5prgVl4#4cZ54TQ) zia7yM$zg?fF}Q-fYQ($|)~^C}Jds=&dBXM2oUvbH0!r0oLwA7mWM%5kr{0Of^Z+ef zaR+3ObM1xt*r0Xu2a*`-k^hBN(u0PQEpQ@{2h`15Xe&Z_#dYs3HJNITdaBRU;%M zC0)R3RM)pO_Ng03v`Q6SF3$);}!Fk#_jXXDMfKbW~dm^)PZg@sjb2mco{ z$Ewt_Ymzh96N5=u$?7a36L!ckpSkdE=F92G#0DGY zJsr1b*vQP_czuclA{bx81w@!)s>1!`r;W+%3G|1M1wqbRMQZXzK&w{{GL6b1^br;8 zVjd4Atcha~uoGLL@R!&EfTIO3VrmebOT_w5@tkt~tKHXGict6DGukIiYjR!=4?Xo^5?R?m{jS#BIGh_CkGH zqAK1UcbN;AZP*JN9ayDdE*ImcJGqb~OA6KmRX#oc({W4#qE^In~}wbN)U+tubPqc@=4#9NW|1hs8iLa0SVzcv%KQbmeFt ze>Aochku#I&$3Y5DB#JplQhBxy;J_MC;=e>2p4Tnhl5FEPS5$e#a4GzB z!Da3(4u9V%G%q|q(-FD@+Z4UZwR?4CqE{pBUghduoz>E-JJ72f^eR?Bf0dwx`WOX$ z*f$%1yV>3A^c{0n%D^WzkEK*2>O-!MB6%5=o`8ikHfm+&EL_ z2eMEWRWmVLcCxX{Hbh5C0?jM;>hb0}Y-_{6uF?aE9FhKa23CxxBgPj-5^a!?XeVAE zDRGr0>BR#;O`fk0h~|>cI(9e6zBJ2QUDC&oBZ3$T@e*)E5CnKcw3&d{Zq=v6(Iz2v z*m}e`IAm;XN1ixAYX(;}{HDV~v66((1&``Wq48^O}wb=3?%E-jL6>>K#QnTaE648RITLUQFJhD9(zWNjll zdPgMQnWaO$p#io#h*pk7fByh)(Md<54F_=%qrbQQ=!##3sQq%B`g|lKIdcO+c2;FRe-oU=^bKV`RPN}Ir}rT1fsrtH>i zDKpLJB!M8e;CzB2!lZ#<1KTI%| z^G*s!@S>lut_ji#8x{e)vjYG|fWe0_923+c%B*?i)?_EzmV$J6f8XQK2C7%93y{NN zIRJ$E5*Mz9-(gnBB)$;%EVb4%Oh2NGn6t8g2BaF5{`se@V_LF~lC;JdxEh%b+g0lY zp&KzUbVvzX@KUdu zN5~5_jc%HsNv8dHr;SZOzluQCzFp#i6KRpq;;FPnM(fw8Y!dt-g1iOdD%BTP*lNfQ zo4{k|vA_QT7uo^nCrHWT0Kxjw!?3jjaYqZDVVkOiXbLqla325#%qU^yYyp1igPWL0 zO|>OVZ7>%{Z6CCp#VJ6JH*(?6Sf1edMC;9vWOv|&y+}w_WL`vK%d?1tSMXBgZAY8FgZhXO%9*9Q;dkb_ z1ItkJN zPQGzC9$lJ&hsVqC*l;OQBSQ`XYu9Pgeq#aEyJDP#XH~%@N<`_^#;-WQq!7@ zk(sj94VU3}hP_K&4Shg2wNtm2iOX=mSZ{<%!-q!(5p22?!*}pa6;W0AaCWd;OxU0L zeQmh;>L6nZ$fkovTaU}I!5t|9!=nF0&ag1w(3{fGF*vS{i5_a8D-7(q+~oQsA_iZ$ zjFXHh)O4EW8^a9kHcY~=9wh&Wt0~qvOlX&Ie)ae+QM)QW1I&_oHTYF(QH6$~jJKmQ z^#DKEpXf6EP)4+eyDhbw#$8hTeQ>G5ONp^|n@#P4cTX$B{Q7nq=gZk3QZF89K)3P0 z!zo8v6J& zv#`>%!mzS*lq_nL1h>>|E1Re-Ek^Bu!iFh^>y(w2`OsR~W)E9tVpLLSB$!%MuG!;S zSslU((-d7-{_pqa+@k z9x;_}GnY~087`yw*P?cvGQ^|WJ}qgU$g~|#+0(2S{G&in!X@3K?(7^fy?)N*^rD~a zt++Fxa>G7AMR(m@LthZwe)K`1e|(br2m7$NWH=%1jPQrXL>2Xw%50`+Hl2O)bd zN3}T{+fzB^!{Y8k2*|YQLNfZrORFT4L{-T;*&u6su5oTSz7*yqWEVBiGS@tJdB&O8 z44N_LHj6Mu?eM^Z&T^!R(s5%t&XUu>fL*n>B1xZ~toRymDMzQa&b%IQ(vM@`iqXQ# z!sLnVq`xY@9?N8={P-20fvK4hzDeC(q!&njfmI_#pK`%>mdR-}O$M&ri7k90{VQFloRS4*$3N*T8=ib?DZ4 za87b>RY_^RNh{x8Sb%h~;sz5!{rI+yOY=HD^1dwl8Y(Db1uh79u$9Gm`@$Rslk6UV zOKg=kd(?o-%%v$u^*LKFN`T%^4I9M$mg~NsF&XHBE5Rqzr1mR38xNA>r^+6nW6+1o zN%C=*z0kO9nDRd@##?7GGC|v+SZ1N}lnpgSIEyO&0HjC?6VOBSOTBifP>V3?VD5Hv z%OhNV&CZwlG^?tQ$rL(^4X?-ka}!a!Ba{t;mnKvVclJS_bE<}GY0L1Wfp}CS6H?hO z>~KftUFoeD4{^^#ID68r)kvJVlY_&PVI&e94w-REaCmnzkcOwi)md;tui)^+DqRpr zm0jd{ne)5!77Hb;sVl$2|Dczx@RWjPf-xp38#0ZFgc_o<<>ov(=lo$XH;hSr2nv zs*+;9ji~@kjQ4`&9yE^!`#EFT?lH^hQ9G;5Xn?m`B&5mvRgJB9j!!`X7#_Hyuh=(J z?Ymy)T_~Ykzv^QqtO?}u&fn;qdOVCt;P^Rfxkm*HdF(?~lH15C)3w8G1u_qs!zLNh zp8W1G;^pHgwf+J0Zp?BHua*Bv%KbuvVI{+12o{vlF1)3+sYP_1&Vb6L1d})=38rPvmY{R4xwVS>ku_QxuPIB;+XYqbrP6I}mQdwh zqMykBg4=AiU#$_hMo#e8HDITYxBPzu%s>&be4+&SZDG0-#5Z9c;h&5&;5EN+wCvFEi^Y{b$+*aM`1bXcLx=OlaL=0>)_ccj_aQ|2Ge0lFrVV+L5;hi zf6O9Bq|}+?tZF9X12^oCDv;GLxDe-`(;csn*Hx6y^9cp63AH!i7GA;m(R}%6DN=)i zH{_wfIWArW1H>8lf5x>gZ`GD~kJ^1BYM4XxLVg^+L(G>kW@-M3GSJ>Bz<2ElA!!0M zcWbP?P;g~V!@WcoO08WfHr05C|=5QK#9OJ z3WB5Yy)lm)z|%yL5P+Qtg%I3<(qFEYz5g5nO)MCw8XMVmR#DG<3?)GA|4roQ2MSTPNoOMHOs8O)dpBlT zJPs@sn4fF|v>~{DH2V6GXal)6^(?N@-Sr9?DkNI)?3u@4df}v zy5b7VKMuVP5i{Uc1J}GbG0^9FB*y&JToY#>3$5D#Z);~sezq$lhzbl~yGChJvyE{}FsD#Ijba<~XG za4Bd4!4;y3dgfj0QFX-|rh&k>&}H|zL>H_Lgni5CQu`f-xC!Qegd||TUj4B2Z;0*$ zd#vASWH!6fTMMn5N-)D1Z+;Dll`j`GGr6 zYjtyc{Q;&jk@#8{J=BMZuelt@Fd9zoN8l#aayM%}@1PMzKs8xEID}k3DxU?U?DeDe zd~s29m}^k#6wKg$@a2gz^@7N|+8_6#Xj$tIV>v3ijb-WeEnH&l6DX^B*P3>U)v{AB z`(hUIC%Zw1x%qr>f^0s0HvDIs&*m3e+5C8XC~oq(MNhc71Z-L#!c<&{n~D1>Q(HfK0TnR zxue4a@^Q~pN9|)6-a|+KS>C7}^+vGl4*lbvzNiJ^H1hkR3AS!XIyk{L|2Ua5JJ%lW zoM{>IMJD8nG1Q0NsY{<~x*&AI+^Nmn)vR-ik$&*by>+Z~?wCKgb0f|Zv^o@eB65Xf zUxfUuTKydMLM{jq%kVY7S)DwLW%%DDEBnRM>hJfNwwtWUG3vc`o4>sHSS)>{?fSd+W4(hG%t?l{do#?%8$?eTr zQfakh|HXe)OIW0O`3$=y1MQY<-2sdh!YVwu|8@iiJgN2#j8S+U`OOCAtkJR75$TSs zBkDT{4=D_}4=4}=!o7cAzo?u7Fh&wr0^v{k+x;5%9e6o{YFNaqU8sQ}s5P(?vDY(XgxRhT$mrA&igoKr}o5<#dRifL-(%{w;JdA}qBW zMdT0|ISUDg+FjeN$!3!nTam6;lq(SXIC4|6*ZaJ_d8xUhRT;E$fDK@IU7eS#MtU`O ztsxXJxob-;bp3$x8S+opPZa*?`Tay$2AtG0ac6Sd-uTv>1A3T}!^1R+ja;WbeW?Zr zN!lRh9`~7?g`qXi95~z@3>M9*`LUj-eB(Ww^Fsq)&v-xo*h!NnS^Og-&OhCm>MEjS z%)crj<9**xc}J_9>!Wn7P_ftU^c9dT=pzAit?(xDU?93yNYm3la<%X(fT%e-vsC3g zU32O6nz8pZ8@ccKCJJ=$F=JtPXY?s@cRurMB24%McrYMEA`FYIefO6pK8X-mK^ppiXR{DZdjQj=6mh)HH{==wQnR3)Xp{c zOU{SkJ?Y*tMCnwpVhJ!c;OO@->;lxyXAr1NZU%_`+wkge&w5M1agILg5wx|-?6T}N zbP1C5kmuUKl(;lpip|!IOe5ng#$f9;Eqf5#M*2lt}1k8QUMZr93xzz{rFyL$32;l7nH`&`{ z-(lHiBeKvyjo-C1>mq4~6x)?oI^BFVJ%i+>rR~i-1uHVPn~Qo|+s!>fI&jPP=39GA z-G!L$LI%Jx-SZ+Zay;#r;1v{ zspFqLbex*wJanAebDD)yk-HQdUwa&z9eoNs0!!a0^~_6Qa6Z>bz}af04bIn23YQpT zVn(dOM~Ji!tMEzcsh!dAJl=%o6=(t_BqJV#(MRcJMlJ+9{v&&vYACaAji)b?_zy3orD8G!P zQR@7^hoL+)Nua#o4I9d%Fpm#yuY2|{Cf4>*gLgzj`Dhc$JNufQuN}zNVEMbSCp zVw#$^J$ewW?dx=Gg|+!?2gdK-d!v?``2JB#%}6Yl`b;wS&*s5BV*6V0RMhyixP3jJ zD}!`M+t&l9plw2))o$2ofy*M%4ngYm(sMFw5B;8Rzxi9!VUs0p@b4+B4cJA|6pWNr z|E<+069w{b9Hs7fE;Oov9X`3{W%&Nt&Q->KGsGU(WVXGXzbj2PZV}ucUly7 zcI;|l=a6fgV`s{uL&wg(0z}aE=4rMi;;KGk+X_>=GPygm*@wHxESf9WdJ*Z#!~J%r zEHbr6*x%ZV%F)~|j-=~@kR$(#t@t1GL$MnK4S^`F>29LUw zjl4rC&7x-TdtE8~^dl2w%S|F@Ae0c>#C#!^KPbeux{5Bs`W368$xWkZ=qmV;;iS5? zoEAeN3SMCm1^W-&s1XC89t|<Xr%@E!;7VQU|FE~M{LFKWM^$t*m7nF9b8ihL$Ojs+ zX7ND?2*03#GZf-i>g(4)F*g#rS`)-~L}9t;lfjwU+PYS+z`OXC;t*3ZU@KV^MB{C3 z;;m`!En39`5egf9DbVuDRugeLzy^Th=9TH9qJv1OP}~%~D7xe5LG`EL*;@Gte$V0H zo~W%pzPLr@r)itX5Mln>n{bOF>k^9A=0Dq{V6Cy&tnjHU9G;!s6)2#IW>q!(6QRUW zx^Ne6y)~(0n+~-$wc(4M4sV{FHkN6xBW>0#P!PJ)KhMz+oacC~Xr5y;{w4_i@QQM=t|u_*;X&ku&Exmf`Og{8fhLIr`%7;aT$>S3W$?as4Cn z95ZLnbF_P4p5tfyy+3!JqZ`V<9)GXmuRF><>A`sp*3G{c=gf0tKQ_%2Hg3A?*J+!VpDy|P=NV}bQ zJCaeOKY*pX$8e5 zMB5QS+ZNVc+9Ckn%`bsW1pZpYf&s2u@syLR&Aog_`Qg0YcZ9zn1u^072Z0`!4-GZm zm7(Y;m$11sUtw93c!{7|>&4kM(;R`bXre|;XWY!jz zkHs5D{_Rj7Z)PQOR*qPSpu#wbz8xbF_EF4&7=x_F!C=_hFeAfVcxxB!29+N4rUPJw9ODV3$<1(gn_GxdtJk36--~E_XS>Xbce->=krRG7UkQ_z9x2<5~xs z9{#d^?_4a&Frr?k*5A4dHZ(9~Ly`1b+@O8;AJAWw@xK4-dYAxh^uCX#m^5g1Y&pqapQUa}B4CNZ?D2=^4uiF%!qIov!a% zT^~+H!|;OjwL*P$=%JK`QkiZ7MUQZQbhIi^jAVA%75IdPog&qO?|Y=u@e;w~QB_l+ z(2*pG(5gfdRGmO348$Foik9-}`XDE_2w0DUOuPH(N5gcxhhKc$aat~}X6evCm0O+2phHI_Vz(e8G zKU;Zy_e6~vI;%(Rf=L`TP%Ur`B^~Xv${qt(rw}`hw&Y)cF{wra1VSOJDjyWym@?3J zd|rFi`8>FcgbAVKX@>_6!A8uH+UeMU&1SxGoz={ub4gyAsPrI82?jO-F+za{iaN4VLPE}N;#FOHNz?L)QRx6xl%Q@qiagcegu0i-jm0VOK0fY3s`n zII15l24e3dd#IUIiX`*)oYlZzp`1YP90|$* zw8x}C7aFP3sdX#(FD>VWR8#@9DPvrPw}K$1TyCIGD$;Wrr@_D5wI>02X5y@ILDDLPV@Uo{>b$XV>>$Y+c}OD)DxgLjvsr-pY{~}gfJ_yCZaKNx>e&<_ zi8U@A%)_aUhM{9fJusRE!Lt7|6sxWp-dClfDX0kXjM+wjZZ^|EXs$b<2kc`SrzXHf zv`}F=bP|1{)dKd;sGgCTBopg4XoDSi>*=UPHkhuw@1`=$KKvo_f{Ml z-X(RP_yx{paFaM0PyVm>BZf4})wHHZEou9jkWWs)t}-Z%sB#RvQ6k4f{~M6Xm&OL9 z?M{_~CQB>tIVK)^`ZyHD5ya6S*3#w!?JhIH3%-f%mjly@tsGoaxM%vS5hR0n&(GG# z)`{Jerz*0lZo+Sscst;08g_#15G-dhnkRv0beJS~W<(kA{ur8t->M-An3rfQ%khAv zj5JTSs+%7Vc%cNH8zr=uA4*IDu*&NYM_KOSrv@b%?*pNZfiO1heg;oxg=*GkQ^9N&_-uSK`MAdPHzI)sbuzm}Xg65y&)4MzTkZ>&bP1_tEP> zccfVBKo7aslvWDvVWNa9>LYE%jM0mLrma|wdY~M${|PR?7Z1x(TP|Ynb#oBw6Q^{1 z8w$*lKHhd59sDxINDl>OO4{2ASS0{Q8PLc{HPy$Gn5^N*sTBdo*S>=*H1nv0*)^y< z6FGeoD79LDy)cwV`{j_@4!+rh?5?{2kttc6x!vVtt3StaQAvUm&4wJ+IwcMZtgo9f z0@z6Ag4K9782&;YdkzD{p5^8_;m2swzrisV3dW=gRsPOa*w)w%2MjFHkfG9${C3El z&fE>A)1;&H;rk0H-qxs_hx3rWF_?a!Q+$?WSfWo>^f%nnIX;z{wTp=mF&6pFlf0~Q zP?yt;j*QS2fZr8J#Z{Z~`w|8;*5#WqBZ;Zc97*6ffnDSf2%C|U9-%z%!gHFWYJMY} zM7kI2ckU%=?#1EMnx<|Jz?DpH^d+(U)_*R~qOf@;>Vl`= z$mbf{fdSN95@_IDr9HcCJOhkIar+p_oB}@z3?B@20v$ra(#R>?Qfb$ezUoV9R|?II{&q^|+E#7nF$C@Z!|9stp%FV~yp7Xb;3FF&_(*UB#aSBgF%_7YGNH;rR5blbzHz!$Y!n_& zwntx7%YcAM9J3-5s96#5Yfci77&pDj){o; zG+PmSO++Nu3Cs=Thu>hd)I>xUfN6xueOYtL>coT>; zcn8T^nzjmCPsWB#&7xzX1 z(nJ_=XGklt8}6!`j_@U@fLq^AZf|YMc65F3MzAW8h~V_N?yfb~<4xETT5vcV>MZ51 zw>-_g)ZPen|FLxv0%`K3--UOcX?@j>XSrbX0h`sm6kTrWsmJVYId%lyTC5mogWd@- zOJwI;bJc(i6V&Hv5gVWEcg`F*{}O*Zy|h1`-W^)@$MdKIR3lyKHuuNVix}OaKOR(; zcM>*MRAp@UsJ$Pya_n+DA%%hHh$1B8Qu@cWWKU^URedbiKNMDBTOFBDb)oa5mTMFF z*obyg7=8rbIiZ-_et$i!g3^Z$mr#SN$qJV5s!=U@{H z2MVZ#I72#47yob1La(7ZgTh?H_U1NDNx+%Rqy7O&i6N;WacT!v26B`L42s=FC4s-- z5dj3;0ev{n3Azh|{$3g;i=*H>AS~Wb=w26^%4Cohr(pWf7 zg5w{P0C@c*y+S|+i4GE#`eB47 z0@*cuy9OvdPK`uK#`_YO;@*eR>h~#{IUDd(1Ezd}$x^ael?(vCu6!c;%T=vj9|9Oc zYaSpAmXHQ6&iBdW+zA&#up|sdI8Y|IG|-|!T2PFTLM%uP{ns-10oHknKF@3Anhm!N zry<+oFSMVAfSy}8>i-GUk4Gnm9>IqDckMt%Ox=-A2q57MzEl(m>0>)xbeiQ$et^rF?Vs$1Bx*V(Z*bjRKs zReJ&}mX$;YA7fyxNQq|Qpd)-9fL?o6G6w*>-XCYzkWpSV8sGaRmNbKU4;`lS>HexY z_3vOsWZw|q=--{iWD=^ENFzAZ_kSVW@=w+NO=W$w$2iY13I`{F+B&uHLE*|5eFu1p zgV2>%lF-f{rMVk9Y5|O1u?gm0E)Cf`A6_koGJS8%4 zishJda3R+&BADj%XxF5e=1^pj6k(jL`B)fd^a1zzmbHyoi-gZ-VkVegTy^mgb!xfv zg8vOc#_w2gu{y9Qbt0N?;_vg%L$rj&Z`p-d{4O4tcTVGEpscQCzv~cciJI}_xd5F5 zbXKEvxmrz1RgT6C4>K>0Il-FYVNzS}K+pNN^~`?cPGs&+GZDa1XhO?9-Z8s?JamsYCE7h68r;l1URo*X=7YJ%3*HUi zc<_n`-+1tomuk>YUN36?3{S+q7@UxVtx-ZL4A^y*Fl^)j5SQ~!b=3KWz~2)rSNnj} zDD9AsIx&wqIHDkUB1vD+=W@Ua@!Vq_b4HnT|A}Do2z?A+PCQxQoC7VMrstgF&Hw`t zMX^;|QA#MWI2bC#4T+YAKt!7MWt1g3jfKoo*WG*OX_ijY;D&e($_Viccx!jzhRQh+ zq9Yy@)fN5G3CV-{ zGZ-l`WAqq9ou(7=g#16zarapgH+{&fLJDH}n}7}f41WsH`k>!;;rGoLR%}7wbEqo? zs?kEq^4}@ILbs4lbxz}-LAgUb8cP8xW*_|D)*JE0*o58hfSY@OelkzDn5`_l(}_dD zU=UaSa>B`R06=}9HJ)xAYH3(iA~Q9flGx;OK0(7uehE}lV=H!pf2cRwir3@hvn|P6 zKsIlgE}_6u6z08^i*+fH2m}@6W9VtS6zZc!WzQT#a@f75}epI$#uh%p=L8 ze*I<{`H#8{YWZSFHinW~HCyiCcMFMyd5&!DIMk!|1Gk}KgG9As2*_6PCyLdG`!^&C z@b`2M<I;AZVIXM68}Hw3B=V?fP6CL@dXy~;T7(n}Ku_{* zI}3vr;7J1r(LHewzta5N1Q5RifFjU{wW*qhCMfgvmPnMD@f66P5IY9)fMu$C5+IVp z$t9^15FVt-Oi5kamaXNz&TX}JHd3tC&XIdPoU?FmwKX00Rr0ObRDKlQR905oofKF3 zO1y-QC$8DK>Kk~#%{vtgE1hCgW(S?7j8-FwQ7qnYyKZR(hS)xQlo2@48oeTok|ySX z=t{59F@x6?o6izF>1kL|^X+YEi)>4H zF`xnkx`w@@O8}cK!(C>D8`Ye?9&DIjMd<}fnASnc;$#xXpqOcvM_2fNv{O_?HZ<>85Y{%ih z?l+qno9!r}l&(2O)2x>0%%WFkY@>JgFn^Bp)2B_9zs2FZ*6X&kx_KzjI^D5#!NF>c z)E5^XjSe6Zlvpo1xNR`d9p!|?dpwxPp?*^8K&ELea!BmN=RB!F;ggGSYZeYf6mBhp zt$~)*nev4;K-|vWDaTthQzrB>5Im<1@IuSBpn}Z96p5oG)Dn);js)`ktK>bWFA|g_ zEW(uu(EeUI!lafcPI9=4mLfTp2Kc}}B=t7h8sGsB>dKIqA{J3K7Ae%n!H;Uq?2@O7 z6*>HJ--1r~#*_HLUF?AQ0q?=zUXtN{(VBBh!Chaho@3T1P4iNAi|ighlw_d7U|gC) zc2EUaM^2OyEKR@_tf8q;|KTlbfb|IOyo<2Vj-sOY)5El)_&F>hz|U;bncQoJT- zo<2v&neN!I&=`_47v%G($)}){2ML_~V*N#$rI5H0_c(ic)Cm`1MF?!hqo`K50}fOD zu!xd0(Xrl5I5xC}sX_S{$c4fB4k>x;~5~MO^7H+|l4yi^ZUv-M^ z0NY~-UYj^-N}@q)W`o#N1OBDavps0`#!{{qVh%DBpLx`zb7%)5&^nkMh=r7<9mu$| ztW(iGl*DCZ?=4(L_(W?EDHCP$*{p#oTU2*!hk?jC{TK%%4;3DvyCgI8&X#LkKCnO` zDkzo~F8}8W=;k+;F2GZ^TJei!kOe1C#{Lj zl)s|82?FZf$i`!2CatPsHeF2;~fV?;1OD9yp zO7n43H^q>3jmnx0c!mHz_j7_9W*q|5bvbI+cE%C%9k1aTGQ*Q$GI9cizv<#{fg$~f6MPfhP&FCaYvuLGn3LDe zaH%DmBDB}I#H$q>sJ$jzvDRJ-3=uXkbKk+-^|7?qmLA8Ae`BzpXs;cF0`W7ma~(Sp3w9 zz~3h40eFVOm_R26Q4QEc3Beh*4HYF~E3_JA7a?~s?0w{BHp0gvI%mkeTmp1ffR76H zDcH@7{2}cQN;Ed`UztBJ4p*2c;%W@-W%#-q>8pNexyOJC<*+8w|Vi!fle%2mRK02a?uYiB;0jiNtUSI z{fZkjky?#>cthjTxVlznR18=Poql(sYuNjmPaBl|8YZeb_LbPDa>b&3>dm0SBJEQL zqbTrlA3o7Kmn^zTc)6u~L8=F~seN%93RJR@TwI9WRdU4=#RR^ulJ{mpcS)$m2TZ`} zF*E(y#w{us}ehcVn7)(4cT1I_iD!8WQ~qM99FMMcR;d zhTy}a&Oeu=O&R;=DryC!%u7^vwjuGp9BD>_x)~2)!d(!8RCQx1VdqhezbylqvyFK} zd>MrYkV12O^(aT;1gLjrCP+d1@N3dOP0>WC_b0v}S%>f@EJ@A6Q=!mm4k$cm{FAk` zu`~tmi;LHzNcb#Z-r114g0f{-4WTwos;RM*Akz#wi?VOP21d$$55ycsIlE@8gU*Tr zH*j~w{Oahx!Bi8w+a_i?471%HrwaL$6cTkrl230=f*CCgcDay;gz^I>@Ik$@36xE} z(a|*2?b?*9uTKpfiOk#m-`5*c6FR^+xUK*Dh7Q|}5St0b1IyB6cx=qT!D>5icG8_tPIhFGO|`$ z7T^__R?AiGF`TeqU`Zi!q)nat?y>}YrTYFulQ9$)HkLAnbr$iciO-Ri*@*56Rq_TK z96`&lp`>MAKS5}j8ssAd^y6)$W%wjt72zw3mRW*C$g}SuEi;6z)wB#-q*o`8>h1+C zW42W0w7|<>PGoK6I|73LBby(zZ>%8I79#{&h$Xr~Z#;!qQbi@KOazg}lCF3!+lGGJj3lR*5^rW*n zq$EfQ&^p=(B=f8KSX9=?&Rq3uDvPV*fmhQW%q**^);cAX#V=y6r}an6dP?g9tfiVm zb|#}tiKW0`RutlX;|e?qKk^o(v=#)nR>K+~0=f2h1}kJs98BK#V=y(VP2@+Lz%Q2& z%$oB>1ZAlnwM(H4DO*CyQGAz+2?I+g*aL+~08}}WIBkX`P{0i>D*a`)TJQ}fkmSJ9 z#KQ0nRz?4Sk|E9)AyKtOyupgKm?JDlpVW+X9Phkj{fTA_HoiJ88QY$^VhZt*n4oi6 zu|Ja3L~a=9$xR;AB~TERQh zqvltB#B)JlC0?0Y-wlu=F-dqQ1sehAvOFK+>{;C)-%RRG`6jYp8PplP zzd~i&>X@weK=kh*pV7+;IZm4~h&sw~Th!{wG1>(~Um#6QNFn#vS;jtOR2lDgtH^7$ zd$ULN-bC_*g{c>U8yaC80%;CGgeg0nJy$Qb)^YBH)C$wk!|*Om z(o7oK_=+P18rr>F26R0U-%K8j%_iRI`aq z$`FU9ihJ1#{i4q?B*)lp+JhLwd-0dXltm=Jt%}cp{L2a%Kruv8BL>+$5O36+?g?tS_h z$o>Qjpsx~tG0sSP8W>YHq5t=Y&H{xcCGMnR5d=|Rqea~cV?1U+Sd$#44ly+>v?6)S zTI6d$2p&|6d{q*bODzwTcI9LvMwKTo)e>;VHK6laX}l6ssi)+g^xJZ({*+`p|au)|hiKOR+9x%c5Sa_Ps}HMg@p z6KV8=$n&3=4x$^C@y@inT`LM3ex2uN>=jV>LA=%~H+CT`hgwzL42+7kzRJCY={cS^ zJK={R50P~%lMu>O|J3WBo%~U^UkT(%M}d}l(~{4)q(QxDUnpy%+S{|du`b>yaB3Z= z?xxSB0UrV+)N#5B8aoUDnyf>B9*-iMh5#Lb5N~=i9w-E8l7s-=2Q?=uGl^EymA1#G zT~|V-NxN_IzSIq?iulti^ul*m!9(z;wbV`%e_A&nZPwd>QT2BC%ffFu{v7d`vyuPe zBmOa6-s7T^`2)xAb@&sA8b7r; za{SIYA?Enq_Cf6N11ZyN{O*6?4;#N*?6JCp<5&J5#&3$9Cgb-U(q`QQ7!~iB=XeCa z4ft(7elk)rPBOCL@nc^3XO16iC=gM3J9Ng5r`xXlZm{n-68m>D_yLQsQAqXF%3$&+V=}l*01x++i@=&M0 zp}Q*}9t4Ia2gmP(8zNVLtYvyunuT`fbyq`o^>^gCz%zI+0X%~&1)2t=m%9?mJb67D z2Y|o*9he0Ol$=#r>|Rvj-cam*(r{NpPbX_GB6A1b3k(W+>Y3TiqIxEp z&3lh<@TGXv1u@$vV1QC1n&)!WIUF~ZaafUT^0>x@?A*I@IoNL$)pjz$Kd@4W~ zYa#i8P}g8(Z*2^B){Qrt)AJ<8ly?PQK%b5AJ45alsTuSJ8-qb9{Wcb?nzV(PRX5$1 z(}=l4ogTGrM}L-w?E&Qx<6iUz%t9xk&=M%aWW8vD-o!OsEKE$yJ~F==@SX z_t8vrqdjN5ORMndVA)sFUJm<~_Av$>#{?rD+nc+F-FY1)VP$yHqqahuuKD2G9U4#( z_#B7@vx_;H&r9SxwREj+LOPlN_AMifZ>Z`f8dPqGo}fX+l1o}HS)(iStNOcyvl?IG zZUlr3Uox;Gfh~rH=aC>OU=O41V!1a$*|P`Fz8JU6!t)pzqWUx)c%mCt}&8 z&)(RI2a;s(a3~t+Q5ZYHJO+`4vK9P2o|!jrIyJXRUy9@d+XF`#rcbjB)5(Nvrj-UO zcBW%oXb&6%Sk`N}4`Tmc5%cs{$XXa>N;x54e21NeBi0y}=~v<-%}O*x9BH%|e)bdn zI*ekP;igIl#YbDFhXLcyXIRat(bLSpm$zZzuZu|2vV4I>_Mg^9< z-)VpT*Y~23uGKHikxuw0u!q6w4myzAQYt8LEZ}-I#}Yf!UO>dH0hd^2TgpLgW10at zVPOU1?fmb~X6M`WjmuelQ3Qpwx(nM9jrH)M1a)YbLvO`?){`YABL@zao80xr5GP2{LF4OvZAd=k zPu}I;8SiUtxM7GI%BokP`+(Q|*rbb4aN&7Ry8<;FQoR?yeP+BP2PTu#pgINupm=O| z`MjOqU7ui#-&gnSZud?wAV4D4=eJi66{9SqK7{%5F3ZJzKyO(ZSckl?nbi+L^%4|a zyLE}&=-jK#jjsEFH#%*QDqAlO6Ws0p`8HYwGGY}880_`{*n-cNHR3?dl)BzHB!_6K z^qQHkBAhQ@=VOY2DDqhl{??SZw-viLm$-i_c7F=u8q(xo!58YYd=RhAHvfqAOPCD~ zZ7<(b^EY;_R(s}VGNX2BJWcXSli3r{)8FnwKaxX%&DHGic!tG@tg?-Ot zym25Hcnp8V_x*bZfDqPJjiE()4YNdRk+LeHz5}xEC@s>g1;Nt0@X}NvZPkR&q8E}E}PK}Oq=RQd9v8qmxT*MM-AC%ySH zuxLKsg+w9?o|HNkB(k`s@$ZLSJWg^B|NgeFB2WQvLZP~-{*D~jessdGJ|&9svsMW; z3g&t+1=QkCfKj2bD7GZP!$mNws6=c#p%t1n6S^72?vNquXNZ%TjR1f+nZh2PreHcg ztI9oFq{w66;^8qHAE_+d^7kL~eK&rtAzs`dCwAg9L$sz%IdQHg>n!cMe|*dd(5vI1(E{pa5Nni(j z##4Ba1ym0b091Z%0`+pawSg)w9plRZ)HaPixRoeUyH?r|uEQ;pZkr4UYs=<;VhWm$ z92X9VcH~GDFRFlwK@&%gL)Zp!NCS=$oyw&31i$3k;i1<{?FQ8vy4f2!ADCVeI2Tu$4})ev-fNeFR}pmJ#`7bK}^t*KnVT(>^3Ve%for2nTg`J4GvM%Ubl%od4L*9HTR4?0#@UuG**nn$$ZK)1ahc60N zZmAj0D;0%L_o682^yN4%Y5hnlBcQslX!`L-;T><6E`&OlzD0v%NPMS|hd@ zYBI)b%pcj3@?CSOV1ygG{gbdmj)5#S)$lEbJP=)243VG&#(*axI1Ff))A+IENPtRO zMooU3(Gr{@!c_aFt(q#;W-mgI4i0bTq)ZvS0cvHgz-Az2UXn`rroUqp{N`}fbgd(?xF8Tju`PI9d<`G}iw2Sy^On`#mZ zYl5JA3cdin#7}N*1@913lRyi3)S0iDC|{#SmT`fqQ6Jri1!_!#e{a&Qrx{sWFEm!o z*y{k>x~Qe%8C#LvT_zaZ7v9tw#D>p+me+MEVV2g<~M;WX5Ooh+6l3&ZC-3!v( zb8ShqcqP#<#H~!4B!pjcndZkEsq)FCJ5oY!e4w>7gRS(2oF+O2_&7UwVL~WC?Rd1q zqeidXto4?(rlB;3<&m+HCd!Ap!YDAH1ADLK`QHQ7(vW+;JnE3O@M}GyrsPlHzY*|> zg1=Kt;1_b8)xML~1g7EMI+t8e`~HGNn4oemoi+}^W~$R0V=1({|0uzwx@nnqV~hxVqv;|Hp?uCCGlbKLDaYj?FHHYJIw zXC;>!0G{RXM%IFitVNc>FqK%Y^=u>KcT4gh`NVgm#{NNa%5W9E0J!Xu`*`R^NtU_}a9fLV zRM9kj5YE5E=;&Ip%CF$&=`T||d+B@0bQJkBG-EzCs2>>4(2Rk?<3B7D(9hA0zcgC4 zArcd7NvIu<>uzZRXaT6eFcnAVoZGuOYA?V&j?N`$N$r`q*RWYrNWg&JAIqfS5EXTz z4^R>mbr<*>j`SrNn+%P0bBLC8XZRZuVOij=&Ty}{hN}j{RjDS{bMvdF=6W@Ti$xgn z4T6O5Ua)ouw?TQZQi#Wo;+OVn5KHs| z$9{MpLo{%WbBtRPyqnMoh^jmYK7gt`suv_MdI+>$Vu_4wv5a0x;0EL=4iF&P$4XH2 z%+2$NrDvUv*SRpPCMC+^)vTvYb7{U&qpyQ(N0tpNxRr*?*$g+%uR}4U>`4ZGv45#{ zH;P*ZVyWmvj;X{JomHI%&tja$=oKQt#|P&SMyqODWsJcj{varx$pUL#MF>mhFj^Vs zL0{DSG@3y}Z0VzJu8}!VoekNC?rh0IBCutL%61-BXNwmO!6()!Ob%o$k8xoL1y-+0 zo)Rb&eV%`UK82JBzDe73>|;GH>cbg4L9mO4^lgZSk$-i9?yI(q%@7*g73jizBEhhL zT0V|RdY$*IP7;z05J~0BK&dyif^z7AVgs5&+e7azW4#_ zH)$1d)kOsNz8MK*^?5bVT!e!5O%#bjICg~ykuMMHXc_IVkJ7X$p&mvH3er1cieNe4h*I~)F3NC`-GnxOSwaZ+}ncKHo!Nc zgGq%g#G`K85PM^4qeGuzQ=0A~f8_)9r|-=DNLO#uM%ka~os=#I6Jf8Q;if&m!TDFn zJ=fZ(iqx6V9m3orQ4M>#^{86zu^}1-g<9z_qrp}59?osXh<*O5eL*?&YZMNabE`6D zX`4)0DrizU9f^ZzlSw;F%O>+7+#}J~v$^m}kc*FYU%qtJ@RfzTRE81eRN+Z%1 zGqrg&g0K8Q+hGoY9cI};w8~?i2e0@ykAd6@`|ER=TC(3tInGR3VW+_OmX%^-oQ~xJ zL>c!xse(Rlu4USsv20a?v0dyXT<}buv6}Hd@Xhgj4>E;);QG>u&yK-Ix=;8#mY4M6i{A&6~dGTb-A)*=8X&>s^KyQSXFHjx>KFh{et1ga+JWL5E3B?KigW4|k~g7O1du?>xTvXf{XZJ1?&2exrbow*zt{WO|ql=ox* z0)uINs~ICgK!&o4g9DmtUP38iv7V=*Lm4q|EuG4D^nqd9CTp7Uz##N0wY0+YD)_nC z&=n-f%0a)s9B-ivHv8E5R3^&D56&)#oq^UtvnAD|Qf3?t5{u9Bq8DyFs^>qCc7(Dv zYv#h`@S90rV*~NZ|9(8ejiuvGy?qZ4AxzZSu0=NN>|4#(i|`s`dX>8#EpQl>rXov~ zyMfOrTpV)5^IkZvdcp9hvR_-l4l>*Lps}A?@NHeAy~1q&hwi$Q)&^B#BTB zl_GFe(x5WQ?A~0M^;ukKj*I~O{Kt)Me5E^bBCs>EdDP}>P=e{kfsfA zh#GP?8Z9Oe5#x5_mmIeuoozD54eVNumifJEkFTVCvvi)jn8$1>mWIfz|14kyY*a)A z?WKYR`r~4$z+c_u!@uD}sbh)GHv7PJ+=;A$B+JdA)ap1oR9}^QB~xV(!4z+TC$s9q zc#{8h9aMYqzZINVsx_bi!P=q!ybkmsT8x|yuix@4XljJz2i<+!=_2+bv4IIH52V> ztl@6*?Q8fJHR(E1bk6fhx36G9NAc%X$dn8mP{NM z_$-W(X(=-uBbhiwL)S zmawcH!EJzOW#SOl-9>kD-Q{xx$Y1!B^S44bj0nJWm+jH(F59j~pnjdGvzhDedW41K z>ptuWtI~s5`>VNW^h!r6M2CCuqsQj->{;j&`Eiv*}BfoV20PA{%^c`|2tM5G# zTFaXWF`d@L6|K!3*FlqWxSf{H$hQAP8feV%*rNV%%zQ`BF7qARQsz4z!{4`E=R2}` z%y(RbcaFGLrp6|!5DnZo{5TTg9dU68astQ8t#NJBrcHc2E^QKcX=@5Rv0u_(cf3}D zroZlyu*PY@U-zAhP0n6Sf8DID1!Kwd|FfGs**HPY5=b z2gfW`dp42dmQ3xLf1~(DOCAi!Sv^|@awNwyL+*bwLD`LEO{GR`>uwF&^Ow@ zr)_?&F(%2sx3w$qC(wBQf>h`^?nHL{G{9}EV+}OCU4dn|^B45O9nU}*Q`B$Z#IO`@ zIV@*cwNLUD&e1RV_q6dn=gI4&a=!(^jsP#q`7n|XboP=&?(Gt9EssNJt@;qMh7$UE zTq08GS15FPPyjy;t7UPsi%TF+BAIB|!kI#W6PMGz&bAw*6`--Vy zWnSwlv0g?N-}^m8a_z51cwvyEu!taUPLa?Q@=>sgu6ColO7mD->6&FqbRVJ%OcqhtpRRd zZ~xvn=nL;{l}}a#O8*4Ca=CY-Do}^RDTE?9ViYV57L--Fm$K`1A%Fr1sgAD=;I?S7+YZi4qg5=7-UFr zsl>lkExPYS5k&csqmas)flqZ_HMN_zz*>uE@5?e^s0u)Vz1GdxFYEK-ydKER(e(~b z0tl_dSFQuMP)TI_N}o4f!{w;wAJ$wBjMy!g6Oh}6xb7QOy9;HU>X7+L*- z7bjE=b<+GHyJ~16ejHUplR%L<)XJ+4rpn$uI5e4d{6kZ!hW6p7hPzL2XkWwKH#oE( z`VbsC5N0XCp^2EOW~srU@XNY9I5gFGCwOPC;B9?u3fHyHLUIr)13rf>(K`b+T&Wt~ zvy!oXi9g%}>;KF>($aeP{rW%q-==;IPl*4i{!b%IIt=}vKWnz<0rY=5nfgC-umK%h z|L0niW$FL0-2Yhr2h|@y|7Xr$!5X2W>*4AD%tx!B|ML}RAn=>|KPyE4hba;IKW4r! z!};=cKBgQ@|Hp#~-ID&#jBUlh+VB$%y@hVf(&92$3ZZk1b(H!w25fhOpN!qH+;Rr&jTQ%*TsJ%w9* zpia3A<5f@%C6(!{++A#WGVm=i-58jWT>3)+(+?e$N6>Vb)4SIXa##9J$FW(R^gK3~ ziu_dLGRVL8$jX`wMFn34Y{ag7gzIJ!vQvwFz0uKw&ffPRB-p~{1cCAReaKNz>F^z8 zj9(A+arl26rmmG@;5ezH`V%t)A2w#VH(Lz-FL3OyQ4ek=Lw{p1h2m}o0P-z$1wJF; zs|DAmfx2Rk88n!Cml*IDvuoZHU37}JRIX-I-0C*7rG(CtSz9!>8qnDP{yBCZ41 z#I5h@H8INlVr>2KCi=KkU~MU0REb$~l-_u<_r&Ohm8z+xj`;4!NslLBxIAIqTk4#e z`rx_XHUM`l_3+HE^ zLyPB)4s%;NZ;;kK*m(ns{eX|)!*NpR)YsrT7&XRf+JZEFcj8xk z$2Zlo0ArJ8Dr&)7KZ}YrOkKzfIt0@bg2G^ZQ&sQ%)^-GU)t?G9_`(Es$-l--{tM|)^s7nkN8u~jN`~SDG$^nrC8=MkV&-;U z8Z-HV%9zP-9E%}qUZsCy%-n za*-zrGAPw}Xw>v~-Otk{2G`kdz5|*py#hN=pN}mjDV|#3z2fszyw4NKiia%1vEv3T zYZe!uR)47~ed}f%d2knWJ5?GVaNtSBwtO7#kp-T_)lp_9$Sa^>t`f{_iAF!w@a<-- z#C@SzOxyAPn6dEiaCQXBHz1m@8eLBigW_H-p%MD9fpOA6s5N+BwHsI;*+4e$_D6oj z#tl6_bqnrT(K^<1R=9$G>db|WU}GCKX3_lYLi@Ay1Af*Kg06_q1PJP6bjN}~58eYb zti6+&o@k`2)>fCD?A@Nv`AfI3z~5H{6O7$7l`F* zwXSy;)6YZ5y%Y5ER_qPwAlu@x>PWtln~<-8R+PzTUANma28F7=>BpA86uu#Ii8TGzW z=mxrwgqE15c5pr!N+`jrWbZGXEqtGQ74TgecAnvDC@g4n)OF2OtqnQhfQUN^dX;Jg zH0Y!zS0IJd?xnDBRo-uS9H3?A_0MC^fE+h#BbX{B?)qZ)7bWiP#qKX*lmXH`=-UE= ze&$vihJm;gFBxLbJmFhV!

    94uzf?4=QA~?HbE-mHZ2e>AL9PXh#VcvDsB4T(Z>CB-J_pHn z=>Cb{tV6L^Jn~J8emIC7m}xNu<(%6#y+2-4St zrRek^nBFDh4nUAz^HUT-x^=!ukPbM;!sG^GvKVZEp)*jj|Bu)!K3ifFq)&2D(Dsr# zlI|a4uh<%VX|fJ%OVaRQG&LYQW$y2>SG;z16e(I&W}#AeYnD5#$1}DywXcmnABmYE z8Pv@q=}xwbJqU&p_c6IwV3{5`X#?ZAhZ43>cmiU2*oF{)5g`8bs8Oy^{-pT6a zKQ%#4GZed8^J5fpj(FTe&Yw~&u+B&z;r_*qkGm37GY*)3o2 zGyhl{KTj@c89#$?$rf>%ze8NH0Y6VsuG|CQXKxjSpU*yO;%B!m7Jk-T9f6;_e_;0i zN&FlaI8^++xBS0|pTGSFr}{3~K_gD}cfD%i6c^B#`1w2c`xESv4}z`X{r)fTeS`ge z4G_oVJ>7Y~jjb{Edz#9KOM;E>o2zJlb;IRNu#_$-DTFEfE(%NIW?MWb9xdf?mU>+T zmX4C_uE2ZYRTQjY**nP{{yUN<#kLRsf9;Q;>RuZuA7*3!!2SIYHuO&yaYH{yEOPE8 zQ4RX#j7JNLbi;a(UMTdls!{AX*cJ(vVr=t#l zkM-X~;p3EtOnjVR<73LC2z*>6+5Z>t@$AC?OMG1W)bGK^cdMsVH>?zOQkOiQwSd*SDGyWTC4%=WR8-SkWlCLcM4Nj|>Kg)fqRG>O4x^rN|~oBk@I=tojsvFJyWu0D`& z7V~v%`jOSCl?68Hm2oMI^pz1!Ki)gn+@D>62ar?mBiU;Ht7h`=cb>uV(Zw|-D^G*T z{_kbR{}~%$1cJW%LQDje_3{wx>o(3HV$syDCHuP5Ec?3eL?V4C_H}m_3;ZDYtQ7mY zv=WV<|L68~zZQW@Iys@S-(lL|JkD`BBSAC&~W5uwUJOyS-@qAJ9*?FaJIJRklA04OcvC;Yyfx zIv_nCys&cxpS%#y>4E z7S4-idW<8}Lxw2K`Z(!jS!2=j|AK?3ycNHHk9rF+og((AGeI zj4uO*yh$}m(;szlmI(K!#+utY=Ou&^O4<&?}*Lwp1OnYzIw$ z+MUH@NoRv)3-_HA$CP#=1bqQ3hMe$Aci-xH2VZ7n(!O~)YSB7dXZV-70 z*I;0gTp1hP3O>F>?irO?N13*Ub}aT)L>)vrtQ53gG}8umkB&=5XA_|X^4&z_^*1`F z9z7}~fvD9axIn^Z+QvLhOm{hWRkt0-!7JB;CuZRAJj9yRG$PlB?MwzK2&ST+M__Bw?7D08ReH4`gjAEN3Wqs2$vcj7Eq6%?J^c zR>&`c8+{|Z)%2IqH_2nP4aWH;G(9Y{n@1MDj2WYR!o^UsJVi2XtYQlt;#a7gt)wwQ z4wQ2c5^VPxsIp+rH+4@YS_W(2nT!TN45Z$S!|*YJE+U;mtxV^PuL%YJo`n1<{ynYp zFZEX>p#S~FHXe>-?l3~ktM)ol4xzXqPSf>dLViyes?@=CNJ4%WmK)o&SjrBp%})*m z@=*)y)Bp7WOmKP6Xj=R=Hu=A)56+p1TWBCph5m=P?0bZa$^1baW5^5kggp-G`16Pg z#WuqvdP!T~q1`-Wh-vrGq6!7AO z_a`c*losL^+8-WOeLuEZc@qj#IJuvKYhJ73zvjzN&kW}YUaTCQ* zrLdeeV(Oj-WlH#)z(YxhrNT8Bu2xhz)}YQq#I)Kr%s0Y}wB~|Zi?^&Z8bS~-${K&! z#$6+l<1vaqQVTmW6O+k4ukg1rpE~3Y(`Ai1d=R$5*1gwX6uZ7#JF@A;w}FjR6(eS-^YbQQjUc= zuscMuNA0+tuHuTB1so$*G9y!mj+@dK5~{_UJ9A5hN)~pba%RIhR!~Ax9kkNjk_kof zQr04&a;M`a6zC&aMNu4X!X{3WSaLMUf#&&f_jX4ivyr2*U#^-l4Vw(y-=yfVfMq3K z7`J1Q+C2jW+ihd>quS;~+YA{u-9od0@J{9lH*P2zC(UAYFnNN(JZ?Pd$_xpq#@JnO zc+GwTBX)i9DWXctL<}Q@ueVWp3Eqo~K>X(9s;{m=lLb$yg0E5ND4hU|bxb5Y_=(;v z^rCg(eI@lddtZ^|t;M}%#}e6Fj1a+WdYX%|yR4UN8}-_*QHYs00$1~#YQj|(U=dU+ zNIsdmF^BZkI1EXKxS6pwz-y6WZSK=psN@OuE8Efay&K^?9IZ$bV!W+F{k+ z*2d}!SE=LTS9{dWu-istLbh0XI7lKT`BJ@P14MbEmrR&zIv?EpaVtk0NnF+DJP=i- z937)3IEVc=E-lNrbR~=z9HC2>tFqoNF~!iYTEVHW-h;x{6HHxfrbfr$U4#a*oW=M}llIy67J6!knsZX)l)fsx z2TqW*x4<+wc3MN$$P#o;h>ooHOTPd{L}|$WHQ2q5Bw($_lrCbtu2oJA{Ch#-q_S{BF-6 z1ZAw?BM4^ zelEJ^QP+?8iSY9nKdNuMezy)|4D_CTdhw|u5i}22c*W7wJA;u?Ze$^zflOq zV$Vs-*%mxO{6Rs;w}}aKE3s2*vaRvHoNb|h&fF3&(p~;m$=@vbJzerMpU4DI)wlbA zI?i*{!VASGd?>Ah6#6YPf$(p_ZQs0Le;B+Pw?&!I-kI0TD&FjN)<~}p*0veq5{EFq zmLGhRStQ{xagP{4gn-WTFV!bl52uS`1b?RYf#I+c;ff5x)t@3y61P5`2fH9E{1wls z@?0@O=(HlJ0BV?uVc`v*3Qgs+v31{YfPEqNd$Kg+u8m1&Zj_0qXQpr{t4r7u8w?En)y3)detcZzAU?Jo4gH-_5Yp z;}^b+!zFdk#UJ5fIpo)%q{t&fmK;jWH#x2}IZgwvq6BVgIP4@}XOhS2WN(!XP}zB- z7v=ZfmfM?Cr-hu=1#%zSELH9xyr>LH=^?pgNMd;*5i>8bx0%?YWW{6auy9Q}r4o7f zwUKvBIF>T^RJ)+nuA^QiDloNlsLs?PX6Q>@#M+hmqz47D>ipjHR!8HcoCLR{){hR` z6~1syFT&2y9jAq&fVxZSkN4$zJJc*gyktadu3L2JuRiCG;)2@W8p_m;Am+Lyd527S zK>h8rJ~+g3hH-{TD0BvTfT~Z@RReigY;(HSq6NN1%gov%>m)#5ZvhQ|qo>z<+KbjHb*@#6mE3uxol1P5RX zA}-t~G{G)cq+;{T!rAq9ncF@wP6QJYwAbr#^1KML7q15n;Y-q#A8Nu^Oww_5>me9z zmfctFy+ic%TkO03qs|OUbOuKX_3GtD=}fak%1pOsBl@66Nu9ZCr^p~p7gD4@aWb6V zY#ay0i51aS%y-09wpcTeGgg*GJZr?uvC#XfWNq9IgYZoaE^kCb?!Cisb7vQO^wRFM zDp~_psLiSnB+9J1)Ug)r}3C*LF?2&^pbQn|4ewIyo}*_>2|^UcBlpELO!Hh zBEpf!WzLHU*ayS`!Nvgqi!}c~n%6(!%!ozyNsG+utbfY9wi5rWLT@AXWlLAFkA{*j zi6Cx;6in132vWcg=S%#JP~#a`s)MpDKK8!&Y}gkY#YScB52#!c#Pzg}a_vV3jjvf& zLfi~ICxG5RP>6^5GCWW3)d%9*R`zkWV9ABrm*>$tT%Z8cikAk9Qz$sCaxwH9m`oM0sCZoq%t34UBPU-KOh~c-_muWxVh}5>kmBY{5=W3Go1QZd zzXNLL{zQ6_r0Y{ccvWT>uQz&fsb)sJ7v2Z5CEGS2iUv6(^jRQ)#Ij#G!YcNt$z$}n zGVUWW62j-RO_jG{7fpquDvZb+ZUUiI$iB45Q2=?^w{jQ>8h4jqzwWC4|v57OpE&d z`Fd(@Zo$WVu}5w$h4U+7epZz_z1c%wy!SuB=W-A3mhWHA)2QtS1)y<>nywL4kqVK$ zvf_9Q*N}J?v^E|mvn;qvT_Y87PPeGq^K@fhe=%50NkD5wzy|TW&&7`z7-S3I()w@q5Hw5CqR5#WAOM)&u8q%W#le2S%Fu3UlcKmHBODc%8#>wcvZwSB8uCG`Jkeg~-(dUz-2~oCZ6}!Zd6*7F zOBl;SyN{h4CorIe5eh+I#Lf?>f!Kf$4}v|~EU&$J1?Pf1GzBIujck9jrp&~rGq$FS zW{n+FG$uFz&|11Vnl?j-_{P-uo6z!rx27_r+pW`L<#2fr-Ium}!pMcP@IJ7QTp02} z4NM-v9Ez9J0vw+|pUD-b+A>Sp^w$w?KSC-Jzh)+S2X8}t0ASH zTBscyE!u)9q7Z|6zI1%9|8~M=>j|6p|7Q-oksxD}dHCZCN%Js^kF#d3O_8%}OUZ)n zmLyeKzLz-?eb`se=Sl7`n(+d1vzfP2m%YQ8I6Y-%_GI1yDsV|+;vhqn%BAW4n}Zq2 z^A&nP&)2M(%$RhdeI~ClDMA%!&D8${7CdV4YeJ-WBbc4Iq6I#+g8Qj}+E&c2hHrAi zQ{A5E_^vwtK3Q?;_#WNyJ=^>Zbo`f75*_NY}62LKGgjFZ-pnly0O0N{c4!%eUN?-YUyifo9arjpe{fq+isdgNKT zyzn>Ss0^npi~KFsV#E9IQqJ?NYX4urbAh4$ZwJ-+;CA?^_76X3wJSB z5KyI0zRiqYaU~dZt2-wzD|D@st+j8k?>0ZaSX=vruyXdKU{x(&+W696zO<#-KXqC71+krU=v@4{`o;=CX@ zTT3Qys`$AJWZniEf7c;ln-&A9QTcJ#u?vkLOdI_e|bv8hflwiIw|eZJJ>Jx z%NYCHlP9P}&uht4Pyn;R0A{FF1E%j*0n7$_w}wll;qssc$pe6-ENl{3J_%{9R~J8g z0kv#`Loe^taI9XPW`MS!w-C<;0Rgq~&B7zHq=9!l>Uy1@&dvt9$lJ1oB8Gn8Bq*}a zrz0iL%6`I@U-r{gw@9~}*}ys`UaR&#_!a#qXFm}-rUh*RVi?!?8>EyvOLuLLdZ8Cx zONhK|bE4&kxc57jE8@Pm!khi@+Z@)@Ayg!I-wW5Uy*$?C8TKxrnI~nc+==k2dc%pI zx$d@HPe(9#uQw8w1t8LP!_aZ;wXX%jcc{aU3FxaU%(_nk^!H1G&c>c3OjT=2aDa%6 zIK5DMfX3+;-bKJbk6OFO7fJp+I-2n{>YdN&S-WjN}(F&qd=-@Gh+p>t^+*XJmKn zRv-PupVx-c~zp$P$9J)Z|`!3iyrSWl7j*NyCkXqy6hL9NPkXh zFFS;ty-U3>pDA#F&LsxS`(89CWnYS0H0U|@<-fRtg$$V|orM~Iu>f#8-vD~Hmh>X7 zy1hg|{Q!Zsx{LlO4l{yz4kbd;7rD+3-J^GgIt>n2e0V+A~7{kF@$hT%j`0y`F|A6}f;BH9(mcb!TLWje|| z;g2o~AMPaxueUeSLqKP@dUJ*Bm5thXOrJ}Hbn9jBX00_Sj(W-<`fF}ZLayZSMm9^G z;BU#G?n{*SMxG@>;6as3)j;Ra4rS$#ctH0jO*+$y&V=rk6C+fnOQkf)iVsgz7|KfS z5Wv#VC~Ln%)!)>yOQBI3>DNlKY78WheufC;=+0`V+>+#S)U$Fz63l2^{-@{KVFn6d z{w2W7sAQOF3aATi(&UCkO=!FiUJzLgab7iYe7!IMGy4MS&lfr{ zv(I4l&n^|1As(yiNLby-yI6l5zgzvF?|+h3~Forc+Wt zd6Jv+xL_hR($y?T62jiC{`_+gcAOmQ!BD{0m*D!tZRPp8crFo|$h)3vgwKhzQ{I<( zpPdV^{zqV%A|R;=lyPa^$YVV;fSvmYt=Frws3m|dsycTmoV*}43#Q~yuv9`S{S8N{ zg63+1XYy97uwtMr;<1nBsDu#%@X280)g!)RN)&EK*SWx_0Zp3 zlMK2jR5vCk3$-?dj zdD8N|2lIL9U-HiZPy^XW2?Z+^P?LZ5W*kaa_GIDb0zn(CP;;SpUK;tHdIw_S;Ar+_ zk-F?1XEJ36tYJ-=$47pu=kdu4Xl0*NXcaf9W!J@LvKKWq_OQRPC#J?5%>Th(;|`PsnaEqyIr_vHwaUyL#Jv{-q7V*obRQKyT9HB zk!JyNTo^|SUXtDy()}UQ{Scpv)EyTkwont3Fo)i+i6R-RS09d*Il>LJJxMyDmYD_~ z{M&mX!atR-+C}sMbsq_OW8JVgF>4=4o8@k<(L8G0XR+9*?cVk8feo$D-l`g_fJxcw z^}loQbLOi^HPQz?(k7AHyJd*=s_;QQhqFvCAUj|s;7I3RCRa%wGMxVB?F_s{eS3=2 z{MO#iz77tNO9M&UPa0X@-GVSRn_C|IlZLnrZ&CFoq4xdvhy(jAFXp}O2`r(A2veM#kpNI6&;1fPYf;C#KQ>|Mk|QI&o*N<~L(O9l!jw?$Rn^gE0l5q6hLsP4#Q#E%5bS$9Wxy(893mZYQ zx~JRtWJdT*pY{>XPEB>8$IdPybE&5d)dj5|``r$MSEaE0*{<<}!XONX_!sUdVj)a#L>b-q0JBSTIVv-rWCBSO7x>oof=Pq!o= zn!Tc2ZNf=)(M8vSvI1F7^mB?bTnjGOI<5$^xSOsKE!j!w_8!qg$7*55&aQgsw7ymV zZN^T~LMIvmH_aX#4vHqn3!GNmbalByh?g;0`%2b@WG(qn;GjHRlt@;qvK9ZPfl@Auea(W7N!(^qPxYt^%~GR)&p_~E*B5iZ)&h(;GU}m z?3QyTS^k$6`Bzr^H!ku&UhUsRNCNy^W1Zt)Gri8goXXJD_OBF8ff^ieO9g5Nd}e9y zLJF%I9_4R-3!qp`908fcdtXkM@DX3`I}vZsix+(KZwR9W+m`wSk(YA`YhNXeFOE09 zR5!j%!hqBK5*%v_$1KePWOT(Ut^rQf45z8TeX%ok@OC+*cB_;J)8%gXG#(G-9A@%@ z6YM+_wlqiXvD?Fzj<6?<4mb1}2eWt#2Lc6_T_6R#RflPd*I&F~q|Tq2*Jq;67)m}f zb0%Y{3`|tJu9VJK#yelFJ8wCiucGsnR3M#4{9-!Kv`HOm=|vKDK~I~-qfFbejD;Da z`AO^B=S;`W?mBH(NXsU!wpljq^IY1GR3Ha2UCr`D32 z^>Rc@u7P0=UO7>FPl3>>XX9E0JL^);kqYm0ukINP*J^R6uWeLaD<&w6bnpf1o7|9Dd^<*{1^8+L#ubjMMy@C%5)6xRXIA=oHugO zH&72V_Kb>26z?L@I_=~P-OkGgxAnC1(8t7GINKxR6Ljpj$w;$zFSywkdkl5vtA3zK z^|X>2mZRjZrH`hRq%M2ZoR8Grt^M^>5{c z72e2~;M_v>^*OA?J|X#v_lmpy{d^7In=ZN|bKtYgy}IYhq8jxmJZg$0m8@ZNf`IuBIe!ONFr_^Uh5pWwJ*w1gpY4oo^Ltb5 z&@hpMb9xIn7hUnPpc^lkxQ=MU{JShQHqnQ3P^u}FyPKyTg^Wist9IIPU8X^zg80Y2 zjAuhCzq}Lnp(oUcDnuJ380+!`IqhN;M&Qqbso`(V4fa7Na~XDqY^LeU9}An=Cp zjA$mwocA-R}JI3wWp1Mn20Vo_7#2KL~ ze8<1;Qnx+Dx=0M8G|`f43lyn)Pe(IBy;>cg;PjF$iCr)(c^BBldu11t`S3r@Sjy5o zelH)?1t^E}$Oe$N_p^-*Z@!!}kec}u)K|Y8=&28vAGhkA3B3z746S%qEju%A5Y?aas3;5}6c5-S$g}saIN>W6 zgHrbDJ0USau2y^U1kI->42~e;Tt$UY$knRXC`n4Q>%qd?!#PaFQakjLJ!7K|m9yN+ z%Y@dj*pvR1R^Bj<5DU}{jh&ah$iEqxo>k_vrl(csrF*OVV3P2?TqsrL=qC?P=kg@6 zky%*{`wm1vZ;aFp@KeHV0 zAA4mUPdpDO5BW-7)KIPk^N5}P5|D#`A1DDfV3EI}+TXm$zaIlP|L3;lPBRhP%l&JQC{o{I9!FYj*7}#2(+kBY}zJ%kiVq%aw*Ug;y|fed6d5`|754c zP-2-VfK-vijs4xMVMs$gWYmpFDr7U}Kv=bJ#^1Re9RBsX^Ko!e3wNi!6=~T#l6K)=ObEm>$z^e0tW4qTLavrxaSqnI9>p zs$n4Q9gPJ*+DTGfaiY3Q;E$M(n~z={Bx)0?w@kOLZmd*?ypT(fPcKUFF`)B??>T%7 zY8?mLC0HF4dNsd_zoKFfBJHmj4uI!v9k({L+Ye;pyez6ts6roQp|Y^iL)^T z&`Nx2T8B9;`BJwG0OVaJVQSjYqB3>`Xj+EStbzv24cbi%w05i%QE70F*zS>fa3K&S znr6|0G*z)_H^PY#Tp(KhH1*j&ZR5)MGoPl_VEZj5l46;#`NOiH+0VF2~3L zqn0ZL)T1zyw2D6D&X|xJg9M%nJhFS=VSdDJF#kCrJiS%hc^|p`popAx|6pyUk5`?u zUgStGtl1tz-d~VrbgP16wVt$9;DeYuJI;g==Ya~p{2x(mL5RSfp&8C_4#kIaX7X@QtQW%*{(M{7(~PElfuxA~dZZc7{U6Z<=e`^n zuVapah_}N(O5^Ej=aS0y2x673lav!&EjO9J0cos(h1_LNfIO$o_43~Ld1;1k4{#LOp6XP^;7z-Xw){=MFGl>C|i2Yt0@3!rxG()688+0Pz{X??f}zywJ=JX-1OO zB;5=FvZR=9N`KC#DNdb**?gXpnxh-_hEL@!8d*xya?Lw#k`c|c%IZKgrSd(X9+(2e z>1VEbBV43lJ)Oqy>d2+~d7yqS;I|#|@f%+o{EkNU(Hnv_2Y4a+Hov7>)e0eNR5f%} z$Tv?lh%YKNt7i}Fq^Rx?82>p@YCu+WJ5br)p?^ac>msZ81H@o% zzC7`?BJs2`@w7Vev?lSi)_Jlb;-p*6e2G&wDsauUPD;NMU6J?dwEnHsZ?s2k{8ju@ zw-zLu{vMTXZMeK?>t(~EZXUlpSo^ix-mGmx$Liv9(n>^zW-MNP7$+FJa%XHZj-C;z zZYplVW$(n+$(D(&lkF2*C$kY-Cu+d4b+XNb8uO?g#45q8LUZhJ6kUX4V!2*u{PjfB(#{us9GilRwz>dB|)9Tt%X6UjBDlIBZtT*z| zX-rJ}1lXHo0*3ESo&tnwod<8S39Hcu<9F&^oq}fu@!MWfvJdY(`G@e%^HzJV_6Gio zs^`1qb`GWaa<>}zuaB{2Hk$&XZ~Y(pAg|VHBe+JP{nE^UnmR~mSYLaghR-_`T9905 zoD|9ps0>pmyh&<-e7pZtsMk%B%1ekBn{G@TK?HF=Id(wZxowbSp$tB5jz&E^$Icf6 zkqeg(q&C4JuJW`weZ!k1DYLBaw#aTCQX2c12UbAf0!uDNut~rr#m3o0Jr4$aHL80c z6H#MbWHDbyGt-Uzv^-YlvZJyHS~q(MN%pb?MBD51g1-IbKfAzmX4hranPpjZeYS23 zrESZ+js_ntr5)t|<1?6leIg(x(hv|RJuY@Gf&NIhcfnDYZTm!wz;xPo0GPAKjs|AB zC-!|~+|kGe=>ggkn`Dcr#iG!{otr+g4CU6{@~k4S9+zIHhGxN}vKGW!{YCo{dE1xB zy;f`}YBKdgC7|OuncQ-@9qFjgskda@>U3OatUbT0uv_woeuMI&-!OM$XEC`XH$E-! z?o4bnQbPxe0?;XS8_**6*c#HsmPAzKcZpHsI+=`Uq>|sUbpkE{_03i@?*h-Z24tL7 z@T{2=iRNzWiDMMrp%adPb`l1(|KEn7f`L z7dCsK6RP_cm*$PB$wPJ~OiT+NX9vlwp?dPahLk&(3Z&>A?2QDZLbJ2Ikvv{1H_4WE zc_U}(6upVPRVVRcNAzH^?uiJ;ff+-A<&spV zDGypT6j(s|6p+JK64ihKrwi7v^0s$4I4By`X(N}s7qge;lMR!f#tF8r2>YG#Qv}c^ z@cmD@R2y3-xraBaX(#<&w$$)#js2Y(a*uBT^+*l&Yr`=|$n^fgY@e?+iJ)8gcabI$ zoY^9_rAEAFjX4#yF{-8aIEISWx+*He+l>A_o8PMGuDCR1ydB-c7lV?})XEKram>zd z(_}(&ksKOaWk)2JsmabCp`Igy;3cVzJyHI>QSTl6d4?>ebR5NUu~jgGRQaZ}2XEj@ zr`EKgS?oaoG%9-#|92Yo1;QU6R;^+)sXJF>b||a~-Kim89JFWD8qmJh=|vxUaSXk% z>*}<3Hd#P>lOA7m0_26PG4Q)Ba)l5)a4%3%29h~uWO*f%Iww^xZ{+8cj%xDCp+~qh zpdqmG51;4w*Dsuu_z{z??=}b|ZasIF3~H0)XDp6#rfDh~aq%^v(ixwjbDU9P9LMR|9OzL(0IY;kx z$&$EnvU3!5?lp0`R=J#B3psMcUK;@01>_>}HQlo!Ybc>6&`J9;*v4!bK#I_B$9~P$ zHT|x0tv3A?$$M;_a-u`nW&g*0qaLU8)sA2atC}A~NSlSO*uO}g(ezy@AOHOV$jB6h$8YrTf1u6(a1`E zOW9>#pg5-A*rH~WtDntIY}Cu;5?&t`U6x^MJ0PjuBRVaEAcdsudIwBV*X=5q+PCX- z-#VZpDCS7Z5I-!Ew(DEfUAL>$tS)${o9((csn;ibN3UO5+#T>F^_uPa?>48`D~{4@ z!A%-0c9~;KJ@&J9NRfik$VPsf!F7U^sy_%2Bqeu*6xksG6`LcOZXR@z%<+W!>q_^Qlqnn;Rvzpq>^7F z`7>9kim8Wp)yaZ+^M~1Qgum)hKB#1aTr_Fda_+k|e>;fuQ8ip>_;qeOKiAUKK=|vP zSRPF=^1mpCfU^Y1!8Ww%`!e)HqEUcVzM+8Src!JF^r4AITbgo^v z>@j545zA<*YgA2ugT#sqqe~qQ!K>O2!MnNDabQAx!O6yrJD1R|=uYT%7?RD|Rlw(r zubp8u9Ay}CIxjXld`OGWlh?o99zVOWi}$GS-x_~KJR<+Kiwvem1g7wqpwC%5Dh&w~ z!h{&oZE6Apt*F@r;6E%>Isu|kaRP|Pk2(S%3N#DK`ry<3sNg|Q+>$_3;&@d))g^kZ z2a%q5)r0s+yg(>12!Vd7^TDe4AO!o^8cWL{%)T`wCc`k4qrDpg=ce^tMiAdhQ%4?Q z1RCigddy@52I(3AX!O{JO`9@^9*JI0me=XG#i#xPd0kZ+e;saXDiA*@Ngb6wl=emM zJD{dW5A{LRc$WDK(YY--vrKtuf5A@XR7%%lq7_Ti+@qj`uOo}9jJJtD2rUKc*kIFlmlqQhai=q#M23yYVwAACa$ed-TBBU=Vsu>39L%pj=!# z{l3m=P!~x)1|_4w)St7zV?`cpYG08=!!LD6(&<}# zQY6`7HIgRf63Oh$w5bSt;OiST<1Yi!a*H>_pkUo4cVWEzH!mc{{wO8m zW0%!$pM2VWOY(IZ`%r0{u}fw>_N%1rkVp8gHV34vh)lIgyEy?SbF_>@C`sz;gp!<7 zRxg)qVH&=ghQni0%F{|tMwQi^xhpwN9Fcm4u1AK~VH>f?ls#EGEq*g7eQKg~`qfTp zR=|wWAyN?qCqdf&=ev&h>{({EWppA9NGmy`Yqho`X45ccW*;)yS(DwR{n~fmbcuB4c6HsscjQb;(~=%9qQMzlbnUjpGaI(_EALxlP4sPa6sowz-e1L2Qyu zeK!7%g=jNU04utjXK!^qYHGLCj<)nz67jaIs30?anPS-e_?3#Si?s`(bL!`GBk(2H!0OK(WA>VX5Ce0iJp=54YgtG3|L>V&U6pOhjtT97*7Rjh%yByu&&P+0O5M`( z2HkRnv@EXGybmlVpS@1HE~ZH>li!4<^Qik?;Bx#jG^9AZgj$Y9c2W@SO8f_$mBA?# z%LcME9j*DOLRIR8ywbynM)#6eQ*KpK?Hr%_;o*7!PTr!?JtV3Td~ifRc0^}qCq*@R z%Ko_!(>PlrF7b0D?(hDE!X-nIdcmfKsTP61?g0+l?sVI^BcjoIGH^oSqFx#~{}=|L znKv$B@anF|v6U3=Q*@GivGpj%BDNL)4}Ra7Fhl`zr!&`0uWEFWgO6(;DTd&dlXRx( z6QyMHfH-B@jeMyzjoGQ^6@L78vXR_8J8&UIPm`i%vW)!8yMBCnU@DqwbFlyTw%%FN zBK^gu4!6}ates{CRWon#^TkEIPE*KQ&ig&%(b6wM2$+S_$J=PLl?U(eS3VBSLr^T%r{S?7*dVZeaLk2})2u z=d`XDQ94)qJ|w%IH}p&`_afV=qr}d=^}nd2#MBXfO2CP$fYkP?mI%JIE35e(ukeiT z?35{FaMDwc6W{7t&}U{FE$pa)pAe?aG?}u0mZXqM_!uf>1}(!^z=I zf}&jx9{=f-uK_W0m>6-LmI1JokX5)nHX>XW_FU^?j{ydu@mh*FicBe?F|3PI%{8EY z_9cYRnY5%lLxe$;lS$Ctf_*X)O}XpLX~aB`B&h^BYF7L?!*FW)dzNz*DS3w3T56}i zXBzTUKaa4r>{mZS|7+S&@{hJPIjp~P4hWyDpU2tynn6G3+M2%6&l7N!AMZmxD*Vp# zg7jC{bEdHwW>vi$hCjGiH{@Scxx5i&vcr`OyC{ug)|9r~SUP-FM zdS1(8G;*EZsB5n6;qv@Pon+yLR zCCa6rBsvi$H`_L+nObj5q%P5^dOJ&Ra-vca0|B+@tc*o|=Z_#anf%uJ?Vu439__+(3>s%07`klH@-y+}{A| z$&G*g911r4wTx(Ef*{DfMvH-T#nP~mf-aM_u$IZf)@hX~mW~rpzyOW7YPn{ldV8HT z9K-ACz>fX~t`I4N( z2YP>zAMZW~7Wuyt<;#p}|A*SUPXmrl>-ra+kH(v?wf+M5$EPJea%KBsaW)ZPkx^S8%X06-mq8Kd@=n`U2r|hJuZFX z)-ISFuXelL{*pWd;~6~*jg=8&=Zy&U8#^yM)NAa#(Rk%lTumAFyXp#Xoz`z=DnyfX zOS?bZBOCsF+$`=Rjo}Yw4HHLT>e1JB)v5t38q1fR{O+?Sj^_OdCq4MEsID^Eh4%9j z#)9Ra5`A!mXh;5L0K0H*R%~vjx@Z!F!)2M#iP;bi9e056RF9s|cIll`vVmgZLN{h1 z<44H`N^N(4zSCYH)z?)nA4J zH5&5P5`AI5r?1!lwN>$w*kTd9%N3oJS?3q>&GjXo=T^%@H1z(77+3B&tu;CWuhK7t z>oVx1m&Y2!<$r8_4P&?>1M(c25+661O8QI|~ zWWb$VF#5OZy9w=Sn`X>Kh1~Z9_Ok{Bd%2jlo4c4ezBpc+I9lhjgpHSo9VdS;B^C*8 zvk9c)MtZINIP6iDAd&X)a{f);)*_wg% z{Dz#j@iRSR-@(^8n(P@b*`Yo5cpqnzzn-_@yK29JcMF|ltSHaz5ESJ#b^2dHtf4(( z3)vj(SC}}sv@KVSZm)*D5jh}dWW`qdWm!hMFw1^zY+)uA+0W3i4)J9Qvt+NlX5T-I z-sIdrg5P)*SS8uCW8w6RHMw?~WE*=~CTU%&&}j=6NYMa9hHc3cTC@k#At3Qbb>?UC z=aSp_Q_yBkRM$DiUNaueK%WN-nuLRC#~1bt&@vZa_erHVG?;>7&1{}cAUzXBZ#u3E z?03<$=RD=$++zaj6-DpKBp?oXN4<#=ek5jvmU<_=8{UH7=M_;zOzvv)zn#W|ZOw3A z`Djn5c4NCfbXsZ3G-E+0_d~arLNTS|EZ8cpwu@IZo&d@nh`rLn_~qwGQ{U$FqM`_9 zl25v#m#1zRAuw=}cS1eXJ3X-qs;o^VGL&3jG;M)3V@Wja{-`@_&8W1rrJkU)@tlN? zIyJ^U%VAC^ppE)g)cIFXq1g8=uhXB+n~qsS#4z&72V_y>XNfFIf)BE-2nr@C_(g=Y z5(}|=`0LOEtvR8KQG%Q^1f%PEb#Dus1mES|Xkb=eSabwLh2tb`0vwIV%G3BVG;QsI zN;|Y%oCL2pLUl*Ld*N6Qd!8pWv3oVpqxv(@$ZxlL`UJ*OvGm{*Oa=5bGE}-{RV@Br z))DK9-6J++qhCVU)A^ zeI`1z9Bc#+Nkw4M#ooxv^jPvtwF|24t(FJm$DDW8{ALr9A@#d5tT<{0+zZ&AsYlOJ zP!)|#kWu1$e!)P{HY`Lg@5GfXYt_9u^fethVgs1l1A82pK1{ zzt`%~e#nk@t5aXs8DOPM%&_E0U#mEKpqG136{kIJjb8H#OYnQ%mnWrj77gX&ZlxanP~1Qqr(fRV1+>2EQ-jvMRpR}( z^1?jh?L0KMP`#4)>^)@x!bamhw<{f1LH%cK>qT`5|{FQ(043@UX&4sWLf53L{aI43=&<18=S&{2r zlQ82RK^srM3VrS6o-|u@w1-_k(8ZNmL5;fo(fu(m2A&0}_z>{=a(&)oFZLnO%*{la zd2yz3iSNN1fRa{`DVRSZKjls2ra)z{;7KBhN-q)TVI{M_fknBl4HhNN&}xTt9`&Oa zhq$5z9`)MGL$F>IV{ebT>{T7E*|j zcJBXmiu(MOFI-D5VUhk^|ETMm?d?Ckc$S|Joo~tV1ijwb*pH@(UFLXUZS#zr#v2*U zn?M57Q#3t*cCR`)j}R6+)XViOf8Ld5OG~7!8tC&If$x&~9uKoxJs(bq{T0y>I|sIu z`S(T&g<0L9Don|vmkHmMMu{v+AgsdKR|>&^GS&E8crAhz7;`@i#*MuT?>hjSxU6Xx zCb{L}3*#*%n95uAI}%IQ0r}z&z*ysZUd8?q0aq)V{=P4tk416Q>wa!$tmINQAG_Si zwtp*jn*k4_T6mhG@fLv@b=GCMa}S z3ya77@#he$q2{B-QWlRh1MKtFv6l`;sXXLEJm^t3!pk8TJhX2}O}H-YR6m{yW3&}| z%yEgZ$dA3Yc8;KZARLGY_gEFL>v%0OSQ!SEPy}DZL$DK$8PCN*`&Gh~n!~O!F_Wv@))gYVU zeqd5Nj{9{#NZe7FXrreg0$BtZC(7k(L7NVFCx!#~XxV=l=ZWA#(3904KP$#uWSf7V zwgmFmt3K~$0qen&Dl7K6LW3(S(m;&$q3=O%#W}7E2?s z(-WvR;LwX4|HH)l)E`gMia;VdX|Q*f{9f-I5Bf#5B4EMf0jQtU@_fv@eg^&*N_$LG zV|kN!I5^b%^xGjWjXaCgKR$FM!wqWnGvak-Pwq?!@lmffpJtlx5Z57&lk|LL+81Zx zKgoD}x+~LFWEHf6Vb+0bo@dDM~T~> zBa|vQATST>^1#zWH0!?DX4`|sLMAkGXGi;nM%sGq=4%&&^~mtqY-eyU&@z+jvI zFsETd?n^i|ycT;_dkcN36rY;sfoZ$%@D3wkd;KPjkNSy6PC^;H*LXIuqt5)UQiHb( zhXRa5z#LqF4LwCe}EiWEC?SM%0POV_Dp#%7K{qjHYF*QIvUN5Z% zvyH13|6v)nR#|F**=c1Sm;)cagB+RQkFL|Jr#l&`luj0aV%Vk6204@pTHuMqw?qFs zd1G=3ds)#U8|v%Xe8_j_T;`rX{=VL}E2nq)1(cJdJEY`pr{J`!2eQFr7a|g*d_b+_ z95N;EJAQs|+mkb3E^aK$t|5?LJmw0Iap-mYZ|25<*SL)c1Hvp@9tUAE_yW7MMm#T8 zSp0!?p@j8hCsV@3_73|CWi8Y`xTe`Z)w0qHE`aE5JvQXE7s`8hgQgFIXPD%uzdzoU zIl+Y{8qYgPWs*(kb|@GGX)0qT~? zPU65sB9KhHs^d7B!W9biCg%7M*g{(W?E&d)FvF?&L24$RTM0R}8|=uRWgT_DD>rCr z)*I2>U~;352YTW};45k8<;<3UU%2($;4#EUxG1ibe05^DGD>s$;Q3g5P&s`UnhR+1 zF7vlRc#1bFaX>}i1Jqm-P;Xu>H}Q~p{=GMO%l5f%^3JP~W+XlmWLtx1dp)>VqXD}) z5sHg&41RnE&+_`W#Y3(ng4v0b5qvfk8j9dWMArxsDhrQX(9dqp&Sd+TLJk0d$cmc% zoFn>P3$$-}B!pBlc$xb!U$_Y`=B&6}iLneW$(HJh&S=5)VXG^JpbUac+60;*t35wi znWDn8(aM5)*Eu`E>+E*nCnuG0AX2az;($Hmu|g}<+y+=9anQO7#?Tl3DoY~Ho*wGG z&A&3Gk;pVFg{Q=V%=JSF?iE3yE^NG!B~+%Kd{7{lxFWpZ%Twi9=Dkeb z^ZvJ0|3IqFcd8!dRIRE_)#7bghK934aM>E-)i!dR0(`rsOOT%xMe278K8+nLD(-vSOtxRK^@|CBihQy+RAttKYu%p&r$5WrD<& zwoZK6Brb6hmq?;u)^ko4qd@m`@hRq$9+`>HUnGmQ2I*4&x<2&TbxsK_FbluUbk7DRAhDskD>KVSJG);NBeIxbU-Dd;}Hfg(qDjfsy}2oU4(b|kFF z+`hVwo0tjVr+&ud$V%XF*32o;8Oo1^R;l2q*Bv3qVEnh)xoJ!?!=5UGuKrbTSL1zv zfd+zp2Zx9=N$wHhpAJ>3+hZ2OcCS>GG-aU(Z7om3~<AM!n~} z5nKy`C%mQS!B_Y!x(Ev{a1N8;5Q0~Ga4#0h!o`S4CQSJyJmVl~0u=D8Gc}zx;Ew|S zPI_Y*3HO-3P`K}#kvYr?w2wU1WIQ<&-k9Oivx z6}-QwpcS`yP^ty^q!#@SuCkn|mO|dyq9?+T%nW0^M>IZH9U`Pd|Y_mXjdq;a^4v6H$RU^vFRmlP8>s4 ztxZ;YV1h*ix?JX{*e9DY$|L?kFx|B#a;=D%I@OvujN_$)FmzVYboKH#e@$@tml21A z_#KECClC)$2wm$9Ef6JWv4`8nYj$-b5q-NVNg}$P7m7Xfj))g$Su;nVka3Ni*Fs9l z-}ckkp&utmJcqBs^O^9}@ca?3VDIq!(K6Po#8|641YRvhjOwl80?uXk)cP9UNHH() zWFls$KL7?%|N4QZx}Y2SX{fb|TN}TJ01T3$$(1sd08WIhhEUu_JZCs3rKyI35~zma zR(;00r20NMDiG5u{3;9hapvN!z`xPnvCY2|)^CIk0$jc$%SD9jYJdO#j1wrIHy96{ zsZ}-A1zzt`|F@MD{awM6D=T)g?p&{fjo@RSc(?~$YjcV4OFT^uwj(=;&@edQ8pX~|`=773$%%m~FYsdIw zp_|9}zYV&pwufepxqM70%aMv7z`)V=PA}~v+ym(Bz|T1o)0vLSke6_lTQ#e_QN5j} zdEG_$<()OUdeQ}P=a>+6I%oon8bK4DruHX-mX5Mus)f!)B6v@jWCQ zSD&0o?%=4n+D|tDPUY4%JkRqz+?5cY$Zbi1&|ha>Gi!^cuPx!D=!UgGn4V%-qj>FR zeBycXa}HaPI6NqMg^m09^*yxsxU?5jdZ_5L7~R5=AoM@@jEwKVMhxsquL%9n+uq^e zAb)6(Tuut+E>w5Uq8D%#!U32scii9p#p#lkm-sjhQ{&G5?Rz0ux{tEd?yjhd{*UH0 zC7eMUD83Kv9O8WOM&1?ld2ec$du+-6UA0Nvj?^OYcl7cCYAHz7GOcQ^!^7CyWxY zj6Xh%%RrSuH6Yu+{2lRrK`Roi7UmMFqc1)$3e|=EK8Yn*H)_!}wzE)hT6#XYKhsNw zA4K)uFH>MA+d!Mgl6~ei$+?T{obaE`K*r=u91$87o#>%CtG5Jes$rm=FVf>z81}Zr zNc7dKobj7y;Ldw)CKydv{%L!MN(4DW7#1L(lkJo@v*@H|0#s z3=L(@=nC?NubKERZ|o%^;;kspZ1eBt z$x)z@$Q2VaxpbO4u+)w28$#TGs6na7Nn9~c%#0T7hQ8i2Ra8@$Y8d8Q3H%Lp)xS>S zpSun+YZ7w$6|*S)D=T)pkc^`)hGtbg3QXWpY}f-M?7On88R$Lj9safz+Gx)nR{M32 z(rjx+jq3k^M00?>4h{x->g{@BuEat$vCzgM_1JChkMA{c>E9FkUyzEd`tfH`k|2NtGxz%klqW;(_f>eC+w_x*e!p_(gi=Eb*o5Mp-UP^9GAo6Atw4}w zIW)L7PC_4d|KXfV+@Vvflc6Jm=N)O@8i^fqKr}WA)bQ5=sG~uXOpBF)37`4$pTI99 zYjek0O#;u^2Of2m^RtqldHh895frKCcUb%^K%RjvXG<4!rqv?ndosGtiB|9t$J$0k zg5N%+e!V`{lMD59i%k>qb+2qR??|=9=BB9!h@EGuBvzV4C0j<7R2ANuA-JYnWvC-p zNH0Vb+CNwB?SGrP}+(e&zCK6kyrdEQC0lLl3owEAHy!DQA z3ZY$D!qa~xf;{|yw~Ahqw)hk(ZotEYZm(B2lbxA`&Sd$3F=2Lf(m%sGjN_A_z+^vanzN98;Nf2!+_uabtX(h9}%a>{q>%cS1 z$~M^E=TgC^^bn^=dnNiA3HDuyvf~nMR4`4g_C+c$p6R}BGGT>0regzfic0TKp~mxPr7RLPhr zEYp}vP%tnFeY#Ju?{&*POzWuaIj!CaUm4e-M41e=A$#Ng66nj!m2+;FTK!XJ;}Esl z_852Bq2n08Q6qAWexP`Upbz`F@E^=^H6Ukqs2>B4eGN*zSM@i8LBq{1PS~p z^pL)c1AnGMT-vi>s5`0c7>cl`;|}vE^d(mX&y>gMOHs75XJ!0vY6E73z!ajdi29&p zFjKf4YR18FnzY<4q-E>r?WCptFlpR-aniC#y;jqSv;<8F4RqM<4`N|;c?=Lb3Ertt z9dp)q5Re+4Q{(exzoTcYxP@zR%ijv|(+U1=)R{!gXS1U-4a(B^u+Ue4+?foGhpKL~AJq^v)8n!w9F_KCFzdygvc zg!lL4w_TQLU6LuJCS*F3DFINJ-o63QIN`2ka=B*^5%z%D=sVY0W$3s#WT#+_jzo7H zbC|!(_kyMk^t*eK^jBKdZkJV2sRLXtCnOee*Osb*9}D{~3QVfsF|_F=J}d`K@p8*w zZ7-4FIg6$Y8+pmF%Ka(XQ-;}Z+12{n#luF9AC~3LzIYfK9MG?#Tw2eyqmH!HBqFZ3 z%LTPX>osrl*C2&iV}+Jj{*|I+flL=E_G&Jz9R>4?vn@0`C#Kh`4B)q~qi)^U4?NO* z^B)kPuRz~Zx~;DN=tKmwD7p9s4-Ft6TE7k|p zFP61nl2DCNJNc~pTcuu)L1I!3_iv@7*f1}W#ZcFmpma?k|MEk*!`z`` zw%xDz?6O{HlHvtR)!K#=;S;oyyRZtMUyo{)ZcB%CfO!UzgWka!iS|2>1 z9ye`kHgb7;oTOSE0HbHZ{5(A%s3w%gX!}kzccbmI&8OsB!z^l z>F)5T`A-gy8cdha8VacF*>ZZ+gXm`f&R=r1(E~T;CC__=SaqSemtBY(JUPgvOgz?aPahJgC$OzFu6da^@+ z3Hc=V10dAB&^WaRk3|d+-k(AzL^vQ8GX=X5(;3b`MNSK@(90gsjK9a=vc}o%GNsdP z*miwx4K33mq%oaTDfVISAS}WfsvdJGL;{>m$QNSe zKEXL}BN*Vrw8GfAl!sfB8U`OLK&-z3guX)n z@*|1_z3Y2B1VMUdL%p~NNhE?2;QE@|nLtNMNDI_&;2+Xs6!?w13z219X$Lax&2O}Z zKWKwD?`co-O;afm*hH~>6&A?8IBj)LufHx3yE8R*XO`W68h0C??R%4Z5Cjb8*!_#_ z$rIFt0|vxjJ=76Zr8+xn;>(?O z7AlbY4q@`oEz!aZEUex<$C-6-xl*EwZw3+ZQG zsu*K4KStniL_tlG_#i=4Fn=(lBG7%|SV421uKE`Xn&eWc)0P!F&;Fc~(JEd-bT2K9 z!Av;6pF#nLIe!fsSlAFkXUYa--=*s z6<9Y4p#b7K`0YvJwB9+kPs6}O&h5T(a{qdi@a`+b-(BM9Zs*;-RaeT%$ll&<`4flI zBT^kklm#m=lmYEW{nb{%V)iL&88er2E@7WC)ni|k#<|ps^A?}%TcT;3y+bRR1s7Tq zQTIO1r(X7WcVkZ~;{3lFvytK@tO+&BCER{+h8Fcw(7%8qBdi#-8R z4P)gQ>XG~P#y-v2O3pU(Ry{!_?OW~O&w0gM1^qk+bC1m_cZWuEFy&10gho_WJn0IZ z;mp{}Z6}GzPiQ%UV2W_wrhgVIf^pdOQhls(g?)LtU0bUL!e|j>&hl5vTiWRv&ahv5YJtzJ}XzJG%qFRQ2dfTfynUmVp`Q9zv_ zy%X|mOtOU`niFEmN`H%{6VVOQ)J6_|_MW#mwI3I62ElaZI67l3dIDyua$XDmWNK_r zvqAO=#2MiasW-T(v4kF-_QTu5%tCKU%1I<;?;u#kCAwz+?3npf($zvRKHNHa2lp8yj2ME6Ff2zX5Lh#$0O@Lz#l44A<$N+@;sWoWMZmjT<; zeL{AHTA+k_MMuAO(~_wBH7s0Frq;lWNa)1%XnZ5=gZT1RiG>0!KqJ^5htKpzo|BKe zgTbWB2D?heJi(GYDb)ZuO565CX>a$FSkAkc(P& z_C+mh#r^>4WSD*0{_G^t56^_m%tDJ!)3w z7rZ08A0%xEZ}!Raoe*nr>Y~fj=quQ9QSBZDf0LCm-MhXfz!?v)wb4U#O_cw>4#NMg z_&kmoiPfhBCl#>zJdn2tfIXhH8UX64C z1d~>BkK79SdP9w*uZmM6;Pg#FiguCP8lgix21gg*(4>qG)B~eId3_mm*3C34`bgdg zy0xxFdA>hn(UYu{I_<-VM^`lRb8>IfzlDRii?@LG20;`t4kqu*HN+B2i)tSsQ|$qe z3+k;WKzcZIks*p2+aCk~qf%0MT|IIudLOUEL1?@Ky%jSg2aBI;>$yrG^1qx7BG;d| z|E);ia@a6afMBtm)RyCP0d(vBW@wbML9b)-i&J3TW?p(UdLxZnI_8L-mtmX^MzuQ> z;$htd1(cT=jf&eA%LHf9&MBvcYdq2DV!opJU}?`&YVt#DoM@E{g>zwY8Z3*oY&oxn zagiz-Jw4xW?kBV(am~T#69Rv|Qd>Zcda*_npe*BPocOnO+Nq38zln(>Pr=d7B!I>! zWx^iB$}-TK38*)4zl+!kIyI@=INHcNl;`UaO0Cnqm0B8)i{^OUFibIgZc(nyenxktfOQttw%q6Ad_lC~C$y z6R!j9=@^m$LS0sFk|Hj<)|!D3u`aslC0?yftMu>H{Ek+%Sew@H;6RMOB{+~F9Sc7w zAIGN}0BiJ_4|N*cWQ=4QZ+yae*XR1)P~nD@+6H&e&C&cmmi8K#Q(ty+$t?hU$z4Mc zc&^QiTU235P1T^$@P3qpquMW0z&K8fy0HzZMfj*8QRP1Vt*r3?d!6iNa~;_@#hFP{ z&P=Ahi#6WljVnIpE2donXQdd|Kwum;koW?Ws)z*;eDDK&+Q~#jwP&%MT5pwHT_v6P zwY)lhfD?!QEjqwRj`r#mnwe9U8oJ7WhiT3JYD^14d^ny^boTw`s<&@7u}R#ilPD}jM14F9Gl8!`0g<-i84l511^8Xy-!)9 z<~TCtFZeXvl-rI>g_p&2M8vLp?OAD%zr7FT^++M6^{jNRe3C^@qW&IkO1HPxxkPKt zy3!3ANd3{59O4Z*{sW+lr$?~-n$-`y8`ptk;Zc9y=HG+pdWSlDCx~FiUVDfg7MXON z{w<_~eL1qmeL&fusqm8aYxu*yp5-7bGUI*F+uPCclDle;0~hx|&T{Y`&w0C5vcD+V zv2FE{_sv6_+cRREyH^<8_v3`zDTXwX+VzF%?~4yH*nO7nHJ4HhTn5(h(lBWSK5vSzZDIxV{AWEbWQjS%&?hOw zX-os;$)FCm5PNhcrmynCV>q`&i7d&V3N(?>B}$IHlrQ@$;rim#(WKRlf`GMOCD0*A5S z2}mUj4_h`2d!~Roe;52JQ>^nztX`8ZP3MDN4}L&*xUf6t6r7r(lK9uV+Z$;Os8&%# z@wZAN2f%e53qNWKx2k`kFU#28o2$F8>6!T#%fMSGw}x`lQ#l z+C0sw|JWw>wb2Lpk^XQ6#$)EgkM7hT@{me15hB;mHr+%?%4P76kZ<{!^=q6E3)AoQ34fkJiTBaQ!&&`R$Q zqaWi)*xrRa(F!ub`RviuLn3oE61JLR;KoSUZfsxkP7=0TdL>ENF6`V%R$wk*3e7Iu zp%$>QY}}Zmy;!I&s{2kVHQry%pTE=2HV=g!H`4CXERlBaQ2#=+9~oQ6>uzsVDUb^z z0mr}~<-SSpJHMp`wnkcuf=Mb0Eh4Bz+M@rC^`|1lZ|?#hRdw}$PsjiP0yAoaa8Xb}QBcvKfbKoD;)*-voT;m&eTyVXT+9^;vSUCgEQhDER_f8u?O=W z!?X>y0QRYmvYt&MZ7zMW4guJgHib44~lyHV99#b^c`9C4KkO-*nz(J<}I4=*9hg?cC*NLYoL3j^0IK85%9t! zu-AVsLf%hU3HzV;knJkf+A3n+Q8W?=DU{wrx9|P<=-&hHr=;#MvR_;9i-QFA^~kU_ z59;4+7>#Dp1z9u48PlYrwNlJNFU9O_78!Cn!mJH=ZwyJ;yI;5RHZbu_9$?^XVe6Tl zcX2x%VaH)_He6a$?-5m_Fx#ikOMwwuD~&z>dsM)^WNWaf8rkXqD_S%0#le89-m^|; zs_~uA?lFQ!oagv}6Hx85<^<$f2ib|sHe6?OV_|J)8)Ii{3$stFC1ewfLm<9DvWw67 zp%9hG-iq+rRVmJ4**O`mO5E@fao3pbu=*z14qcV+%0o}JuvnfAu1aCIaqG#>Nq1Gs zr;*oZFL1jmrO6^ecU6inJv?21G=)&(1tZiSdVU(#!VMl2%Y#)suyV%jRrJIH=^vEV zFWsm`p9Mceh!KGo1n*71TP5#Yw!~vSc#`QN@mQ}$N#X`ID@{v0&gb@pfgoY4S0~1v6 z9Ruwbx}N%i(RXbszumo3uuHDzPhfF+%7V<&7ojxf5ad1(cL+lMx>J3xP}8tovMKZ^ zq7(9V=}jSX~&R1uhuIYl0JYLIwi$QRV@L6Ug&ceiR*i6GlDmfc!IA z|LpHts46_^E(l8^;oD1LLilu&lbD@|ST*e5#mP{*;%H%noQp?rU~xu2Yv(+N|1>qH zK=;>rNp$L7H6!uuer&%>wM;Hmj;hX&zp&Hq#29pDA9E{ak zuUcwn*&yjP70TOXwUIc;Uk;wplm8s6OvoAGIVaABoVEM&^a$?Cm%?^2Qh*s=DIdb$ zRKD^8FW~Yy28^T}7=${JasSUZV3;w?z11A{54{svF!HUu25SNf)>&?;s;pnT<7i2o>-FY8pay8cXg`@PX z=(8%OsLGUQ|A;=@EYF-go4}-Yb1m+_(lL_1w+{fSFNOb{U*o?X&Q#k!InaulN#wP* z^#jM&`xx$4DT$p#9Ai)g6#9F&ja=|E=y3BIK4O~?juY$I%Wy1@Y>vJ&rCL_uSQ7gBSqnxpZ3DYgS{ATy z_;atk<#3TRni+^NrAADEKt65If@lt`%*v7Uo>#e97~-7{k9LEIa28Y(CZ-aM9PWnhWs_6Z}(p$J~r zlA5{~UAHk$il~1Zz=NM;pLF%eM<54A*ra0$HmV=D zd`_jX&fWttu(^Lu|HI%39=%iZ{}F!=Snn9ii#L&{M*Lqcr2*N~)BG1`!w(iiwGf9V z-lb(Qs&HA@!F};14tuWRLiLYZF$cL8U8|(I>K)SL)xe#>qrshx6FAZJL?;lp^St#~ zjKHmNzBvmMro3wOq@q!-u}aor%~+`ZxaowfnRZW+9l-ViS-3y4(?mwr{AK*&?3dEi z^>@WYaYzyFyPo!zbci2CcSaTw=HEXJkTlUq_BYuvVY-+JC+B~BlYCRY&eSdGSb|L( znnIUZdssP%VQjGq{;AuU8LfYyHI6^ylPor-pl#ChFoNv5U`e%{9mAdM=tNyteoddQ z!c?ut6CC@U~SYSUv2wrhUolCt)p6jgHYI#b=p&Q7;|1vy=lUvU^Nb!#aio{ z|6R#)D4tlhRy{Y=Yy%RElG>M5kEs=#P%4uzw4H(gk)pB!hLGJLzCVrK zdQ{om)CF%whCR;yNgP3^r|m^*?VHc8J?$PiRp>|h?U4HY*qfhp`2fVOP9;aw^zYdp zB#L@O6zP%`LEtOBC@Nk~SQH@XH<%NaIA0t+lLHp^yhcKTQMFgC$&D^#&U{l3%=U^JnN>ROlUFN<{B^}D1EO`JX=Ll;K6pJgjiOx=Pmkm0(~X#V z$b8yd@^$Ca+1fb7Hh3#q)_Fc<>iLurnNJz7oMb-zc&MIFj+^!AOV6hpr=MUx&2*o9 zKD{i$pvZiBVCK1C~eF_T{A(?_m^Z$vwf8$F*A{Y5z^d}a=yvn@`m zf-nSG()>u*)2cQu{d%X>8c|HLhhOWF4Wc0>icYgtCMN)O2fMK`&FS98bb+=pb=_vq zK#g+K^6i+7>1eSr)q1LzbLl@|74BimaMa`x4`%N6}8xjzMVh0qqA@@s7ADjOKj+-(ZQ0nAL&eQe`<8$A6+^|% z;CX{l3>^`z3&t%cEwx5Ug_XOlno~K}s=hNyKcV3!f_K&7s69hY2AkH})W|^&sa%%j zO~=mFZS@Uo<#4+)l(!;Sw4&vF%j@Q^>y_)mu2-fK-6gGG!?oshOaCBd`+3XiJlGmMI6AW zEVeCT*e`cd%4zYX{8CC`D0D$OgI!AfWGu9iyLjr-X8>80ea!WwA4RV)o@JZm5W&zM z4)&`4{d3P_k60z@~ZyH-EdB zux~j|G>E={Tf+_QJO_fd+sagDe@q&eaGFEarv2QPFqd}09NX504Ze~2ErNK#WLsaT z&Ust*>6%d9uCD5Ko9BJ$Rl$4G;F!~7cW?rF zXK%N6_F8m$aYt0s1-kv6{KZf=a$satbY{miqV7qgcETqc5EqfVPnj%qkSLl)`adK6 zzbsT+dAD98g$gvpub7f-fIs`>O|fOr2AF$zN#DwtRLI+?f^#PNd1I3Q=tpk~xs3Ui z9k@o*PmTMajrOmjKvEdrvI~QW`y{0URYJGQKxqFwA)9D4<&Q=%x#yGC_+B=oqILK8O{8{*rt|+%zvWiFy>I&nzgo-f!OaKVw8xje45BC9hr1#(mIm3I~aQ_w`9UC!^~@}t*N($DOMi?AAI2TK}){u(64s_g=Z+hb1bltsn3o4(w4>2^5@=IN7QFI3mTqQ;Q( zDGon4^;Ybc?_D9%g1ow7^mE|ES|!y&0Y{zCQ$vh@?pP0M+3uFBH4D(+dQCWA=1KOp zlb+rF{11J03uelpZHZ@hpx&8X#)<6_5!ID6pyc!zO56N%sh7V21_t)Q5EBgU`xeAx zjbIrqXo4JR$&)r)8`xlIEl$2gjZ5vHe zkt189@3MlH^MSjOquOr6R+F~?M}EXmg=*eGp@ZEW&^D`gKHyzU=;GPF~iEp-y7xMFpar4^~SLNQ0!3zi;p)K7NGpS##T zQykkS_XWu(gQ+Fdg9!%SRk8ZsorcSnH#q#mDvZbar%e=s>1PmPepu3xO` zTMdmd*))ad^g%EW><>m;8lB&OcP9D=Yo~z!p5EtQnMm)k4Ee7L)%3mttJnm3Ka}%A zgxi$deMXqp<*05B1#n`G@NCNVk@CZ<=dy+T-yc8#~uEpC8Iph9dn_nzqYeG|ZH zwF<$uapI=7qxR#|Ynx9Eyx%+UUT>gsLNhb-3m7tOl6O!PUjDU&kn`8VE;8^^}cxZhz-czAnv3kEpi zm^w{<5-_3?r=PSpk>5ZYtk4GQWz>b=STYM+tmEaN@l+!&;RBI4c6K7dOz z{JmF%Hapc7nAn&CkU!~u2;0WH zO1egOhBTe%#lMffuh#FQjka_t<+u0$G?@Fal~)zaebmx5<2!t$)4_p3sfrAWE6{%5 zqG6_rCNchgUgbGo>uj_`_|a%rkNYrMEA8e+OVdnjIIsFO_}`We2q!JQhxtQsAsh!y zB{7PZgKjuW{q)=pkOCSVu8M4$LjZ1`T9Zec(We^{Sy={F^2JxT`#A)csJ{@ZyiE#Z ze12If#mg_L(Qc-)__0fetW%fGLKQkWlfE%jbx;?RM$<=vZ10FDVqFztxMe^ILWD=t z`PGv9<5aa7rTvCRCg%FY-U>WC%;7&T@NlLB*Ur51zl^7>%I%>kK7#CkV(7>e=XD8;L! zUyhw7+esC?%og1nt0Q9|_W6U^7<8&PqN#qYQvo}XSZ514jqi*|@->mspzsxq_<^#$N=`2VYLTvjT%W&B-J#F zq~Fp><(DLVU!);<<+>7UE4Tk;EL|O%GMbK-O8ZBbj*ou7yji|)l?j!q48NpP&LCy2 zz_DA$_=HS9sm<0?WrE8u`NZRVg7RM)N6|>tD#M`}V|A|hPI+3gNKd;eZ!qb#+Hk4b zcAXx^iitcWq|Z|JpwAHB(` zv1rlwT6VVdI&X7V(Td)Ay6iXb7Y~0+CKJc>F8hrZiHJCaouXK^jqAG0P#*rzOtskl zqTv=a(oI@$l{mavoUBfXcjpr4F!~L{bl;57thA$lAG-aV-GT39;ysKb+A`kyE*9Pb z=kv^v@jhb!KEse%8*@bbyQCPAMGDjvvUoAc)=p|69ebUjTS)@qLEIW=o1JFqml5-9 z{lgMV?TPvp`wH_2J8fLkOaTqUjRIT0kqzWOVs^p@iwT*HNq0stbT41BX1R@Pl{E`D zyHcL8T}Txsi}d zhE~2_ue(S((Aw>q7Lxw5@-wY#hfREDIrn7uPnsB#-ogH^@5In*xw{~HN``+FBEFyA zE|BjiOvK<_9sK(zVF}@~ZxI%f=bMj*D#Z=W#!3rnC#+zl_C^D8tWtZUF`}p1mOISu zif;(5*%6xBu7|S0IC_StQy*NRn@?l-F?YkPJmlOOm{bMnA4i6eZiYzce>@dxe5Un` zba!pbsUpZbT>e3d#*!Ii_0{gw;=tB?nzowTYE7%c?xelqfX~y-+rXn$nGWBWtnENT zR@PW=xu)&ynrezQ?a7g5y0rAI*8?pbDn;5EUDH0Z1`?5WE8UN~cccNip~<}hlfDZK z#dm!}YCndpPN{w0nF^9*feJq_IJ>wWiT@K2DKy9U&oPzFWC}TL54xSI$2{#lcYeH= zo6&-bubZ6lYkc5C&Aoa1f%!%HtlsSWfX z&?*rlB*KN&OC++X{_}pJg?02AkCr zw87>&{&|;t8N(?*q_=l*TurC$;uu3 zMD6k{ux@^Q&*>QS$TVxBKqzffv`7|6aDmjo=^Mv=nZEA{Q@UF{r0*pV-TzRv(%hrC zO}6n*G!Pvmp^(pBBznLNxH@UQ@?iPG?3!RE{&%;|6+)gS(B=pa!&%6lTBdRk%Q}GC zAYIkmj}kr{jhQcp}zISCo#b!$a*5Dr9<$cZz<$pD;AAHQZXTI7sx$##Bv#0L(1$K zZr@oPbz#vl4;n{D=6kIj>d*|VfAN02}a;*fG(O-S_;!aq5yRWmc_F4r~ z#lT8pZujDJjkULo^>XyrwnMlR!8d*s?;Bd733n5IXrnB+2Ym_jgehZ#8# zJO>2IngHkz`wvD1u~A7tbR6UOFVQZziN}UC@+91sG)Bxy3=4MO&X4uHj;a;(d@%S5 zk@>I~RWF`R-566PL+H*E5suiks&CzD%S#qoi{0IpResGqCzvZzN;_q|H&Ysh!HxeC ztVLK>7(R+8xGFtM+pu|Aw`dWh4~x}}7bJ08ve$swUxdX(T-RosC?g*_CBafjPR`|z zrH$-bLw%+uR0wiqpb|TSR_c6Yhjw&c?0yGT>^0)ixy=R z3-*e77zL)Yp+XQeY8v)8sf$m4OZEnK`nhw0X__F(T4H>GP04G8`b8+;U&kb@pLDg) z(=FxOGDWYSACX+IpEj$cm3^3foy`b2kP3RbZ#pv96OASi*oZtcN`H!%y8+p46Es>q z(h?XzgqCwT!xJ39G-l4NELc4{T0W-7)M%L4^O&;nIyvTB=kpE4L4VVW4OGSKz+&`( zIf7Ve*xsPVt-!m!n61e;mKS9DDh8J^H2qa(m;t>L; zc%;PzN17w7>=(k5E*uxZsz4{A89neij&K^?BA5m6)+5QgWafxaVOj-;qZi;+FBpK8xHe75vPWJrn)+YOJsDd{Wlxur)GD7{+*|3|bUOG_2zTstfC=$1hX(MVNvJ%lI`I zMh39o2?lU6z0hGhtDGmEZ$JT#RayVc;E=mpy*%DF-~z4GnqZQ3J0!hqi&%!_uzC}w zmrV)|UCRT`kP#pXuy$K%ev=WvFiX6L{FCI^Ngqd{>s{H4hk=rPHEqXQvrvv>{!@!OUrKNf8_nYukx;Xz4cp3?@?0 zuh=3bzLn4q_3WsG{n4p5Ty5`j@?nLCfk2;c?KOZ?EE{#fZJNHHn;=I)B8WvD za+Dz)JZ$>j+>d)BhT$*+V`LR&2A>g1Y~^M`4B(D}ArXEMtq%Sy--sDQp__OFvj%Fh z>?rk>@>`0B{NJV@$R;2U)TcAq2s8u}k(nze^Vmo)v9psFOwy_4UrEiwkS;5@@kSnb zEiD-&<3_Jex71FD&HGUYj`12V$%uN?!tunq*HRxfbdnsh3<97lwzD>G;S+X}>IvB2 z=#j6ivHQ{L3hF8x)tNM@A7O=L(=|*!71t0ci(l_UDhgL#|R9(QF>;~?xQ-Mp`-Ror?u5EsKy9X51Fgt z&(t}n0o}~pAM=hbbB3!39-GQx;C|PAeoh4gy zJ)oVLHt7~M-@;rlgB3E6Vj(R74{8=Ire#o_K-(z2s8HHE53j1QeW-}JK<$(Ul) zS(jZ)7&F+v(H4B2P}>q~^Rww%>f zA(Bp2&4G+T3TctNy(BpE*d>1aAi{4MLZT0H0@7@WoK(1R2dB$PRYrGuh8f+EjP5Ix z>KLP^{?X>xK$(+=t3rIs4EviEE)MBrD&w5@qJuQqj8SG}j7Cq`gceGVNa|~$$KBIq zgie_@p)Gr(^nm~6X0ZcMwF7iB^v7-X^lME>UF8$i)^~HHrgv$7t4MwCJiAMMqjT!v zE0WaLh~CZGH}G-6RI@!`i`>tvsfea0!c5r4$p2n#nBQ3FxHzd>>{jou5)e3He>FWX z0qFGbn_V%e6)!M-o%TjM_)y{&sds0iTZ!8y1;`+%&vjksjt)`uSXwt5ro8EH!xU00 z8|JYa^@cejVZ-F?Y&OgasHnHu&%dF(OjUL%TSuEfoqi#c>M_LZdygI2E3(r;r3ZLa zn){!hrIafE3BSQ>Aqdlv@(7P+a3i~|IB6!0>gq)HhUBFLO*GBK<>Vs7gZ zBG$9@a&4y}Uol&jCKMsP^?FrqUqdukNlweGItMeLm&Bvg2Pm()^E+>Io)glAI43+# z-FaVh6>^q0s}N@tvkG$}t1!o2gHfQx zjX7@U>!-2A+56|8*_pl?n@dgbq(iotv9oFH6|wdEAcd;Z@lY(?134^Xd6ZfksE68W zvRmtBIR|wKhNBT(hb}pLmDG}>xo%GLH-xb2uC?@(Yu3KNLbqfm$=9|X72H7v*|DWY zuqKmQWc!!Ldi!@(jFx$#E5lJ(`WOFZGajbD^j`Dzb~0TpjK-onS**{@Ix_|tkq(x9 z|u8Q3cb<&o0j!8`d9B-y4@%5U+F5-znmv@%YwZPy~u9!^(~Hyj)gSY z>a|-|#z>Qc#5A#PhMQN`l=Qu7RQPd; z=>?d#6YXZe7=(d)TrovBuvD0v$`52#fGM_9oZq#Tkowj4@R=@J8{DX4f%w+}Ma$d@ zZV`j3?6+J`{+LFNDO#hwSjPC*9Q|0|0l#m3S^Mem)Gv>ILgWyBZ4GSgq4^ZAdVJS! zk^fAtB|s8L5w^KCRwmeE^~|1;6LhYHx=rYcM;CcE)4L@775J-gQbPm<9W ziT)}f=i@>Dno!0zki=8B1*tH08ElraSagrLPU%5G+7d+yatAzXGXvQYPVYXt*#uJ9 zKO5*`%@5`{#TsNMZ4;jFHU5$o$=CLl!Clhhh$FS`w>CxZxvpt#nDJzkKHg2S*s5tu zCxi$qg8miW(6!)oUy0pAUWJuEtoD5qL_{aS^kIq{FCe0u$lr;c6+XnTD}W&`R>!|O zB%pNQTc4x>+L4M@cxol|pawr2G&rIScUqtO=B>po`QaFmjn5d!Uq7+$TJ*j7mA<3uG>h4=8C zIxPz?ZX_nV)dPh)F*W{Ebb$pd2hL^@kP4VV4V{>25t!jfm!#iiUAClw^=jLLKj;}ZxTnSW7jMP_^emQlGmj4>ttE0v#c`p z{W@RqeaGAKkn{z8^#1XDI>6euWJ>zTlq%c!HZ80X{fRBa3|$lKYYp()QH9h`kE4du zc55%mVxp33Q%sv!!J@@s^&g7si@Y_29l*e>SH9^R_95FL`t@g`W*$+7nEfap-c>tH zi9!=a#!p&o-JuV~C4xASss6Q(tP-trpM&LiQFvQ86GelSe>I0oLXpG zT-(+X;C_NX0Ys@+V1ukZ1rgWim;PvUq9z^cn}~;&c@V9tzM;N>)@fbkp^2gaTZBE7 zNhAa&?oe+;*nsf~b`??2+vHF83ev~ZPLMzFc!tC0BlIZjCFnT+%iQ4O2&ba8ko(03 zosg9D@Ef<&!y5e@*&t%=?Rd=Dz7JAG=?moG5+nH#i`1=7t9}!Me9inKuGB*G$=LNA z^|Wh6=_I>>0GfWZ_XZ_mk#88W|`8rI`*AgXMp1(aJtnF;|@pfkwc&0Veglb}6Nm0VH~OYZf{I37U~g&lm?VsU|2{e0YK+O1n>U|V4iY1DZp=BLB87S(O*fm!Ks zWS?OCsR#c?bpTZ83uo!794~db&S_1>*lTmh`Gg?g5VQP_y!ILK_t4IoBXg1mu1ADIRewK2SF}4E+JQkfH2>}BLn8e8>Jv1e}&9gxOvRdG*H!xW$0r;(U zJ>xl0x!tM~UsLY?QD3gTPKBih$#PMKL^8lAg7Zy0EW$@!#5yW4KOo5T3dh zPR83(QmmQI?3rov33m@aZJP6wpVJ&n;J_1rW*nO_2CZ5K&Ju=j=5TMm|*NJDM=w$a4 z7OP)BMZLDonX3y6w7Zk%s0Cp&F2^a!a||y)wI2CKp_*KRVj1WF4gh;_-K)j7Bltv3+1!}x4lOlEKA5V=%kr+Lw7tDm!nX<{K294O6-d7hC&s}|0@3NE3d}o4YUtQ z{${i}o= zC)p4p%dqv?gdFE3|HgB-CG_s-ezb;D`4KbgtuefPk5XDeB9eW`R8@~_n$`yhT4E=!(cYCPo%v|pY) z$AdphsMQt8bDX&}A;*N|Ia;lR921l0_)B7rE0gD_O3aa+Jjdm~X5Ws?@j_LfI5#Go zANMxUepT}F-nuDaO<$cn$Fvs{`sJGBIZk~kA;;w8ISwW6ep8a?xTree8&i|#IJhk? zN1-}n>E8JLZGd3*MEW_8G)C{+J?Ct)2u_D0;>K>PIM<#qfsE(iR;eJG{wre1ZrqIv$1U@x;-eoVYFvl9zXNVhswD=U94STnz&4Hzv>V$mE0^MagsI zPL0b^sG9#LVNTwXlkoPy3$GXz6LPx8f2PHJRnyS~o?*0$=^Ty|Vb0z_t0@QL31j>@ z){GGo5fx|Sx#|sHfxVp^7-8Vu!5Je(={BDTt*v{Lm-kx{3`KGjso4AIazs1 z+}l9=qshxVZAe@W_9zonBD3>e77^gaeY$y%G1}OJ*K3-xp8u_=&ZbR%pZK+BHpaht z(7d`#xcYxV*LmMw>A0E8;@ZOXDc4!^ zRyqo~9^(2n*PC3u@8Nq~_i(M^dYS8AT>b7{>G%O{xQf5Ga)r2F<@${4ocs7D*Hc_C zakX&uxt}(2-N*F{uDx8Jay?HO-+f@EV-43^Txk!kbX>`GFW1kx8o7Erw9+x2tAMM5 zYZI5^8Zv*S<9e>gxYl#M&*fOK(s3!5m+OA6)m*Q0IejY~mvfbJ{gi7L*Kw|K{*{hz zaxLfD#?{1yJXicfia}d@P;l0|S0=;){hUyvp!uqu#p*z_KA>nZE>dHykHS7JA;K7H zI`zRTC~G9hSi1xn1JCzYk`Y}^I;x<=IAbebi1XAz(i~OqU2VMeb28%MjGcJJ>`^y# zDrk?oiYF3e4Bu12-{7K56h%Uwq1v_jj6y^4ICA0O9SP9uQBkBRZ$A=WBxV%=EjE7Zl9zzLeuQLTyDWsP4Ea;^{s(TT>v z>Sb%5?(_8kRU5Nht!A6$Mt##+c_WrmguJK==Atp!Z(=}$MBYywiRp8^=+=$KFHxT} z9X8z8_r;XlCGP^9+Ty%4eCYuq$YNUJttzQeg9@+;F4~W$JL*IM>0{|agy!8F=H{7W>5>E}U+Jv!RgSE7vYH-ZD2 zx~-R1^PxML;Up~T{8P1hWClQeUiC;N>X8|=@t|l%>jE=GL$WWZ>y)*<0@t0_jG;>v z_}JRgWl>BW(sGZC20_rMgXLV|!%f(U_0mM!rY=Tf`7% zsfyFPK}5FI-mK7Q+?i_x<&NN_JJk@)`a1k-f!14uOY&*i29o-9eGYRkoK>X0s zKgcIFa!cb6Fj=>iv+W!ZvHC!je<+CC`{+yoqZdmVV-id(AGwjpQ^0hHzhhY%hBNr~ zo@xEZ#GC^4AuiNcto{-I+5ffwB@~FDyn$osVkg-jbA(Qc+_y+TttWL8YFu~W;tbnE z6RW-ssqz5Pntt#1#z}MFf5iS2v(scwnpoW6Y?&4V7hRm;yI-i|wPVGrrdFNq4gYD{ zc)UY?jk_3q*rY!G-Jc=sV$A@6cB(abY;H3raVhR)o)-ewftZiowV>@$}uvoSgMEi-XAT&KLmHEyGWY@vBp6$k~QvV7y z$!lkGvHiWSwq}eBJUjw}Cf+!(NOgUeqk_X);M8-r4G;baf`L;td38$Z`q``FJoukh zC^yw-Re~X^O`HOf(L8;5X$m$TJ%2DxngVF^J;k#LFQ9zWzQVv9yB~Gkk>i5DMcneu zEdEKwYVi0Pk%%xJXNyL0N4`LY`3J(y)fCTG{Xj{?^j@8FXd|gI%vaczabF@-&dnI!p00l2J&P8s{YP-x)nU6nAP zz+JPBXq3;z_~oN0 z^V6?UqQQUXOvTcT%%cU21ig%=+g}R62;||$u|w#ceZjIOtBgJKkow^zHN>J&+FT8z zmoltjCO;?4XF8pFAypRg%g%qc?A;BzuuQO=^FW|Z8`Bx96?BFU0n*z?CieFc=+cE> z0eRWlh0!*_RM|T4_%^SH5y-t*eg5YNfVM_!5>@w{u1KzWzTF$Mx6#P$5ZLNqS&cQ9 z@Q-_mD=(2#Q>|MGPJ?fw$hlk<;zDL+*`@`9I~$EO>QuBv;7!g2QB;aa z6{CM5dteMfR5FR0xvdRXdf=tN=V=&0&$CI_dv?j4jouTrUlgB3hdTGAAu?SFL9wt8 zi?~kp{IDPNZaw#F)!#E@i>|g!1?$)oH+xmay96xsY!+KVSH)i_gGj+77V`(}N0);K zD!JN1p4H+M{+kWV#@*J0kY}Y=1z+G}M5)+iLB;{VxptEv0FY~g#K7Kc5hw%`>T}M5 z5umiq+L*$33!jzh)Tw{GEo5Mw*g|a(^SL_wdWakN;8->8)qlt**`A5XQS0mDRd+vN zC`wrkEY-v;8&^pKqW8QfZkr_!8Q%4(%T0!seKfdGefn?O)zjLWLMGKfa9-#_JXJ-UH=xyDQc4TX+3$v(N#{NAS`ySxnd8+3*3X8*+TMiwAXwgU< zYR0O6jU42#7LB*|V{}wE5|}w$oG?_nN~k>+hkMk@Cv*ay9o^oDHqNQm zwQeg#jB`Bu;eglnCgSX&b_*+;RIzWn(3psI>s)O4WeSLan6>~Lh>@v(|Gdi$o=rvH zpP2d>enk7TI@LqRH-=NhXe_gfkDb(A2t@aWl7vrD8JnUY8?r6!Q|C}xpl+DeAo-|# zSC#`u2(eJJre}nT4i)6%V}vyxjy4j6`t*Zxs%RSHIaJ$@!w(RzBcr{U_Ak3PPh2B{ zJ96Mi%cZw5AA^RiW~r}H53I+{9g-pUg@1&EcpB%W7}5bL+2FNa6l<>fry}-b>iD08 zR5ePA8q_zw#GOc|2oYx$cPP*P>>a+*Hf}2Dxlp{8!8*B=S%*?#+hnIhoiF)3`^BdD zyE1F?G70C6ecLd2cGo5+)~r|(&v1_EEivlU;_>1*xZlEayX)EHorewkKTgKWs{ai6LmL@JCIBdm-AsT-E@c9A9r_OzCJz0`ZifCNwTHco@EhdCR}Oqs?<=OY$+C`I|H7jPU5jmh7g(dv;kl-jqiEY zKi{HxA-UHF3|wv;OLT>dgle1XnHpHszKy|5?UwKIE*w9HjGM)K>xEQ>_AYmBV9)hyO|0dLLP5kewP~P&m z-?1n=>u)zp0ujh6sf8V|N1TKRQ75A%!_O+c$u+!!hw^x|<*YW-Hhbfpyq$lxo)CJ% zdqbhyc%*(bpUyFZt|xe~*9`MBu+3?vfA$tB*}vY(8DR>8?HpP9cfL?sx_>46!x6YL zBks`U2ocalg%=F7w#Y{~`&dQQV~&m~+F<1^9g|m8d%Q>SY_DrmP9NNC3&Q>l5}h#Y zuL}DQal%AOD(}*~mL3d_Os2_&xaeFlHq~K}_km2KXoD?mdJO4ALJynYu^u+RV?C^Y z$2iGZb0a-$h>qqby)j}V@>fkVY9bJ{Iby6FELl&iYki*RvM0VpoLRafX&g1k(gqPY z9($b@6@*L5g3vVvi*~_)z~$-yia1{!3Klhi4>fVI+f{K~ z&w(`N0JGv!P90wLoo1$m#$0$qUgkAr=XG+heCk1_Ltazxl9n^F--?hc<9m6pyeev{ zhcS@Jm9E#fwym&y)y^)AqL@a+g!^5*-L&OI9#nZVyJ3p7yJRz>JO5R}Mo9eOU6HSg z*HoSQ|MBaYY?3U?JR%3_zrNJ8riV117$_|a$#wIrA zZDefK#WLd%v(@CwVV$_|9LY0htH+!1A2A-B8m&5hM%580JnlC$#`c~cRuUNynK634 zOfvGJR^&s+n7F|*ym>wV3FnBX6*b=t&N2q99i1R?G{D>%-Vh=mVw9dQ~%o@6y@_J0DgV0QNtEAhs90>2aGojREE{Y&O_=4D#;s>>MYUy0(tkRq-roI?K^x zdg7>5p2_#n*m-Gc;+sr94nOHy$OI3WYoqjaIZue3Dew^zc&24<5YlQ@9~1lCK8HGr z=Ye1R*xs-%i3xikQYlzS!7PZ|d!($nXszwIT#+8r>rvu;+VQtGTiA+RCNi><#@|Zg z10tY^JAJTGAm&SqzcuSqR+>hn1ULiTM6sFZ&R;+;tGhw^Z>Zc$gLJ~MG5m=o5H^fk) zFw35U^e}#BWx5RffmS)3GWL~6h6<};*y;cVc~wjxg8M+c>F6gc$uF(XYd;yD z`ngrKe9YG1#tO0^j}2C?<_55yC;!TfaD7+)1tmp7x29%qa|Pri8mQ?(i_}$t--dZK z61qCAzdhMH7Vi= z;4_lT(p9l^%|I~;rEdjgk>`R(v@+!U9NdwSLPqY2oR5XQM#L*fQdF`wExQ5W2QoT8 z*Zrfe&!ZFIP)uXhD*0(l$tzb%EkP)H2KpH-&k9LD7OQD<&(I?MJA}AK(4l(*UBz29 zoX>wtbc?Xt1*z0fc3v}#WW+jZimsKKK&=+_&sV*+ z3RfU16Y+DDHIqR{ta)G z_fRkRlh=rXrW1m3#6vSnp`61yb0cq98>JIv_W){5(wfn?wn&lcl$p$xkgSn04Q2^7 zgM-By+ELp)JavazL%LzIP8#N)(OH)I21zKKh>nyI9KR#@=nkh9(lh9vOPN7>mRoxH z2DY(mu_ed30#=b}0$WLDn-$;?YN`g$ICM_4=d9t*rLm^sj+0=LySG~Wq2 zDk+ZC_V!OeAJe?b}3_v883suQ#=c`7>~2P{W%(3@s($nu%aQd0xsHG*k` z1ioJ5c*zft^%+fW&_^#df0oIgpc$D#UoynHqihBFqt+@-91S3oKKq;PE$+l`OZ4ug zV4kA)} z1_s_s%@>Szf*O#D;J4vL;7R|r1JLC?X8ovUXr^rUmk@rG!|ij|p5X|E9whaW$pwNi zC3Dh{BhD0+^1?LOEd5aBXr6f0YdfPS6`%{|$(gJ1Jr=oOf@WH~Q`^|_h(M=y- z<)C0!rEHN_uX&FAc>ti;{dU%J=8IXv3v*eqJl7-oos)h@l9&%E?}eJ|KPpe)$bR{X z^sN4+t03newGP#@Au#IuRiA`sWN(qCxhl`2XY7$j9x(%6&QO~@>SKP$aDHQW^ zv(__|JDT(PcI$FbX(<5Aarx@>X~D{y{K&76s6egXkKDdubZZ@dn{4uQr>`Y22uN5+(XaDYPl|SQ=V_W49<&V0| z!w0Y|2KQ7_ewUx-)7kA<44LJ#MG65`R*l}#5pG@qhavooF0XuxF2+CnNbeNi5L0>c zQ8?UV+dIPMJ1JIgGv>c*r)vId*E$JEXj;lKQFo3tLH%U<8Js*)2$*HId$W3uprsy} zGA~6spjcHFAPCTPZGMkgr{m>eO~tL?S^c=!Fe|vhARkmWO`~yp;x{eG))>S6wWn$Z z5Y^wHuG>|f-maXVS-#JR_#!fk$q`Mhu9svRWbyaz%CBXVuDgI4t09fbkN(1} zbs17X>U|U=le}dhH17yKnzbGDMb|U6Qw*<^b!6hAG@>eXQ*1Xp)*@sFbg3``oPaMa zeTtGzhh_HCD`k;bYw~K)30|2_@4}y5SbY-ytT*`ne2{jV!8E;TCSX3?cu21>=&RXv z)anm8_Jm{~n3rOc)%*FVnBhJDG@ihbM-lI=(BruSX~7 zF+=qw1D`hC2a~9$Ddh5Io9)*O_QH(LU}Tcn%u2O%lRZF)cyryg&AnmQ{6mP5AoI%* z8bn53=KJf-pApl;p5Eq7pg!FYsO&A}BzILl#=kc0aaG(ZCD=qt3tW4uKZHKvy{2^F z?(^Q)TZ1~bWFoEl#uNy@VY_5IIrXP33L;v__z4erUMO@Uw`#{iT-pbSI1$rWHS7^+ zsAjHgdBMWj;5|#af((G4%$Y<^A0l8d$2R>;1%4v{+PcJtr9?ya^w+@n#neyJee}b9 z5Rw?~O_!T55iU94=lryT{Q67ngO5gvx=@Ph?(`TF1zevKCq6U!oOrx5P?pd;c@Uu0 z;fRqt&bo=)bs)b5^VVOA+;2lw-X2TheYjKiZ}aR%=dn3hQaw9Vb}(4hXw{2gMGI8| z|4Ca2&UVPTN~na_sz<-%RsD-laFMRRNT~6^0J*M?*V$jdS9G#M+bgpYK~Y{^c>H<| ze^!H?BRZ`>IAu}qKc`d`?QXf%dRNqF{_6QdJ7+h#T2kv$vWKk~6M~P9r+M}usmb>2 zk0{>Iq~tX!|BciO-A_sNlA_(g2?5VOr>W!g>@QrEbJ?9LUWcTYG?-Ctews>`m+g_Z z_@|hZ7IGnn9k>W9{SrEHLy!Xo0-H{v{JrF&T1cc2mE1PF#cP$IGTt|44+>(@*A=?K zv(29^M#j#8;RO@WpN*&Vg5vOk(W1;7iJm&_U#GQt;uKM+iYKBljtGt7g$A)`@7@mY?Q|%T2nt+@R>~045Z@*TgyLzM+MM5gzzXGuGvvo`GAy zA$V^V{KaB^v}UH6djt`eyNo)F)gpL29B6ABct+<&7PC)KQDWh+kduQDuS*? zj70^;bn)?eX0+H28#vN@+!g9E?Bc(|P+m1=xpGTQHmmhmkqE@uA?i`R&Et{~F>3Lx zMDuG;T~r(%S$X&mD;*foIsDhgREhVzEKx1QUuQ5YnmD)(D(wYSYAC880$+VqA8vU- zgyA*96MiB;Z*lzc5Nc;t&YGe(y&R@A7jzKOUJ>ii-MWQDSqIwE}Vjt}z_zT{Tbz7NXoFj-5J9!PoD3&HwY7VJ#$9mNm$lGFHSI?(+9w zIJf6>|1n|3UFGkm*iT%Wc4&nXeF}51ejOeg^KMk%`=*d%*<6FU{M#0UaDo{8aGL3x z;Dhd}n=*pA!$eoD=LoZ>i{?+n_i+=zEC#clx+3)I^(-!QS_g;;0Hf1x%}whz%A9Lc zYCyRH?f0=occ%@^YloH>descznM4-ss??V1bJPDXr6FUcIJ}>Bs-x>=sh|P#-xmwi zekF=LYY*CMwf3er5j^_O73r~l(ECqK@<0f}Y&Gx8M1nv;I-;@YyR3d*rrA7XZpT^s z#p>r1Tf-;sI{Hfn$eU(u#oGLRV{Lva);eh_U)M4|n59`?PqeOPTE^thB0NXtOmHz= zWlYQxy}bpuh~h+eR+xWBK1Qacg|K9M&33_{##A<4x?eUwxP1u{5z=8Og!#%6 zVkCY7CwC-gL=WOc*6a8YLI&$~#0a_b-NcOADbXPt0^b>pdISkfIi>j~SH2#aI^w0# zq#?AVwOgowaZNBm&DDWwex(`O*kV3e6u)VK0r7 zLN__~DvUnl)1MJcz#9Ku%xE~w@$sMz9)c7aE=zt!!dxulhgVHG09koPf_=a%8)}lq zafRQ&LQYMCkeJ{aaywDqLTSyT$wXB*p&h;ImS1QWYx6CUVLZT@%tUh(aLdKDsD{$e zw`I>v_YW|cOu;RfHWTMn*HrBTDF!^&|GbK1Nc3Aes*?1=S#rWN(K{l$y{qzh8jhe+ zs=gDtp*}2P2DiH^g-w8w)6enW+Sz2HrPwjzH%crEwS(OTpDt+UopyA}oOJ)qu?p{~ zp~B4Q4%24;)hwXmLrvlXm1Qa-YNNy75Mhc;xI%?J0{o=h%dV-ds%B4&?EaRXl`@DS z9eb`*a2*qBF44WkRWX zrt3zavysV01wxbi1|~g82#qIw*|p6*0`H~NzUNGB2<7(DR0` zj^WVZ*Ubb7>3Df;kg)LN4mpX;vDI6kmNs{YcCeo@z-m64Fun;|gDm3LCGl|!7LQhk#V4BgHRr(pgSC1Io{@|1&#PyVO_kK5dp zjyDz9A}<~A8(@!f7@xN!X9UVEJr$9TIFLT_UZ&(Z?=*!OLLG~yq9&wsGm^vyk`-n? zWulyVIeqECK6-v4R^)wnqeOC`gEoL3mo$3YQEYak^}E ztu;Ju7mf-)uliUsw(VCU+kjsW`<&LGmLc#VuyPpd z^^#h-k8W*aWD&UuXLeZd^!w255g$VrHf`B6GyG1NxAF4cgKd!Z9A^!Il_1e4A5uJ5FR3r45bhMWfO+RJDE=jnduAcdm}oecn5}MLj1jMBAhbcdAi8 z8Hl!Z&y!ksAd$LFC?kx7<>-RLa)lf_jY4fuXN4MlBUXP}r$h4Y3|i$q23xkd$Y~N; zL_%cmI3*$uoBRQqcU@a?1#J_V4zABOM!CA{xs71~;}da4YY(sAHaV7TG6g+NYHhBhjI~lLwg-$ua6)tp zb-xFJ&yRf71lP(I}BM*OCPIv7=nRNdZYCi zQq0C+S)KJ5qip-z2%2_-n4i{7BmhYo#w_5>b$7r6dz+PYvsi~*6Fu39fBs2McHQ{s z%b6%tIX2Rufix&GA|vIYa`L1YHv=)zX(+VVjmN6Cw}?G?hj6i#!y-8kZq!{dD%uq~ z5>k9`JlCju!)=AMa`OL|4jFLr4jIsOyE7e<5ouOWnic7gblo9e(8A6gGWSh7MC>C% zmCi`cojRxKH`8r5e@-eq5@gC;^+I&Yl*e~c<(|ltDgXa+%1n<;nSdIOwt<)&C!98c z=HY}f=z6d<9n}HTqL;!!x+T(4hvlK#(M?Bf`;0C)A1z6!vNe+PRGB#}@&+r#%10`; z%j`BigGJRX=gUGDuWElrLHH8-?R1Ed)gb4Gk44vFd|Y>lo4aR&oKa5efE2WyzyJiN z!wo`GJ-fu69mP^wZF3qTX;OELe7(b)n#+!IoudN8AP<8Q!ogBxT zA~Rt1pJeVV7gc*|*k6r@k8u5CRoWZKAqf%S2R=Yt`7qMRkU#7{l}p7oiM`6d#>!ib z5n1!6ybxbpHUB`9-KI+|KM@tGgW8?RL?pw{VR%RzLZ~n6I1f&C^Z#1aTl9}_OOcWT zqp=NE$%>$--0l=LXMtE)Hk7Kqx=SWXk61U1S8rw7opP`46!}+oiflu4%Di4xm40sN zmSQXxB+ZtG`L|w&!IHw%^6>g_Vc5@?B(qmd`)ob6PY;FUr|R{>&T#WJ)T^E_7W`)m zY@5gODC-C@A+ldXY#v3qxm@pa>{}jp@JzGW1*bcGeTbk%Kf?KmsJzitF_P>Bdedtj z%q{qAe`KQuccIO8U87e^R&)L-atA(f&d(5ibPB=a+_;nnwmNyX;M2hI4&Q}KQm*Xb zFAW_3%6ImXDJfS@P4V9vIDXuB`jRO`PlRCH2awss1U^%B_@8U&Iu4 z`UVh#RzjfZx*&ScKOzEnSH+{KvrS~Q=7+eodNWHbe+_e^SdDRFFe}@-&J(wd=QTO0xMy5i-gjq=xik0~Vqp7sI2r8= z-XYx04enqWY*2OJn0w*ikTWEs0z)ZS6rf)ye>VD$8{Akn&CaNN-Kuv@+ZK8-Gvxdp zoKtq2?{4er69!6wCtWM2p|e-X%w8+*O}7fc68EO+h?d2C#U)>XCS>Av7w~LAcd;(p zzXqq+vekTCe>ybP`AQ~rqXOaaRUywxDY||oMHj7LdFydpkrSC`16Da> zYQtAxds~3nc|X-~8CbM!7Kk2jC5c9qF~-O<+Av1W1o3$UZ%E{MVg+vmc_nSuBC!Ea zq>5i(kOzA$&2Z2RBSsad7;0^cS=5X0@l0dRj3arf)|#JW!KBQqw*QRQi}XYm`yu)U zac8}!og0TLi_hs+_s8YrnD?}u6aObW{7`B{LFJ7~Td&N~($;I_%NLQKqaJm^8wgX; z3;2{8tRI5$WIr@w*bkaIiD5;^-eh6f|G{x_UwS+P|L>`9%9b$tU+k25?PBgLPDXrS zwstleheRAnbszQOL&?OnQK^BR?{4FzAcvv9+bRyN6*??^f*~CzbPNizIHO=k^*s$X zH0?VnM!L|GbJ%YmKv)Ksx)T$#Yyt4b#FKjUQv<#@9xpGB$S3|6-|J_8Z{Ndl-@792 zdpkwZ68YZGKmTvPcbfgZJLA7se}Alfx5j_(qW}7PXWHL8jD^3J)<}QOj{9B5dm-3>;jOHGKo#?(C_8P5tNV7AHgA! zAL{;3J7nR=kvL~$^l5He^y%~GMW4=ZjXpgOW;R;f1v}mkM}LIQh`dpk{wtbZ;;)({ zYIE%AXYn=MFe;LS>fU{3Kk*6e?21rKqt25&3a|;KQ=$rcvMJlIW|0G(U z-m$jsij`kGI4)z;Ymtn6?Ctm;JK}%zhZBo_Y<>KjU&sIWQT&f!{EtVYKh!r`q7@v- z*)>}1L=MsBhdLf>LryH?O|dpy7=22${~vq*0v=U$HU8rh5?~;a88m1R1XM&6)NqlD zK?Gp}iopRS*eYPHmlUf-$bh#XbTX3RIEpP)S`E?`6)SDA1;iFCQJO?Rh>D6z6%}>I zP(`E=5Sia+?R{qEOfDoA-|zE(|IZ80narGX_HFI8*Is*Fy{EiG?Ua5SwVIw)oi6IQnQ4>A zT0JcVu_7D5w3ZZbTODODEJTcP(C1D;oiPTd%4wPN%9emMYUO`cv1K6r?tzfbB>lP@ z#{byV@SSN>!ox{$h$9{^y6kqQ_IqWDRc8N)(d!$W{1AkmZepOaJ{(vES5&l0+;HC3 zagjKlXpX2$f+G?`l~u&A>HdpPqKt%~Gk9@^Py9nbI}J z=D;|;Vf*`h5AYc&J^p^+Q~ir3;qzAZe*vElCo}^-L%TEpALo9rISG$~(Csr}O(JK)4y6FY9Th)QBR{QA$6cfk7mx)VPiZ#I5zx+od`h&QcrY%T*UH0$0? zqv8f#o_v>jSK^BRnQ{ObI8UGAyVTbXI4=g+&L5p^f^0 zDyQl<{%d~rY@7coyu*QgZ{L)_zS}rj#IbLvO2)ppzn?zeG>3ogVYip&Z0}Y_dqhG_ zw72cE6K(HYyS+uXJH~hD$BFS-&i1C9aC<%N_PRUUo9}23<{~k^FFtKxeDn4$;+@2n z17eACg?zDdBfe#m2!mnW>rMUIxFm{0V&1~=WMVfxj<*iNl3>(3>r^q6+(0cDp!$|^ zB44CF?zJCf_KWDFEBi%zZ3~vAqSZ#wF=}%-??DkHJ|P{OywEx|^m^e`;%$`3IR`t5 z@Vte>@^6U_P!Asf%`2_cFoOKK^0;EIJnKVAcGz?9*2?icK7+<3IIn5;r!>obME^vH z&3mxsJo)HpziDTwH*a1pZ{|J7BcqWB`j(`P;$WY1*b};yaaof~jG_gqG&9rlK)N92 z7B%LfJ=(KG^rft%g?iPgH-{g?V^9Ka6szz(pA%CYna^I#)Dm7)nDwbU(zEFuX@2S3 zZXKhGC|JCR?xC$6mrjlYThu2Jgk_5f1K%Y=9DO$`NE|v>E&A#^ZhOMTfT*uWQ-fYm^inW zKxQxura(iEzrY?R^^At-{w_p8vL5z$yKzcJEx+<@#4#m~` z@Atv~^i0}+JIDCL&flFstj1o}7MwN4AHH>NV>|D0_`~*$y-EIXXosZj*2urU2l#ZC z9)Cal;VUI^_*~HlXR@|O6YxogF?k7`3?50F>4pX=g z4*SK}`Q|&cmu9y&(%IhA*C*P`akkg)gxfpAZg0oUj`0n2w6{eB;xX=c=?4vt?|Z<% z<=vC;uX}8LcK`0{^NI)J_}AF_93ZVV$Qd7JeU97HjP<#+eGJv&=QjsEobyByJ$xcW zPc>WH7(Fcdq#=4(=X~GOuGK!@U!iMl&iVdaAB&8J?{5aYxX{3HQHPm^s#u(Ug7Cl@3o3ecYICp;xSz^`X9Z zB<)wt(8pOtDUzxIkJ+Xy(orPS0rOa8*JxH?upMxdCjv`cN(EIgbjbz!&dpLOu6X zMhvd;qq6=|Z+&X`61hg?dwI*nJ_OO;3Z#69&l;8PJsNwM$G3buo?!jO?<+eR;FX>LRrxZS0mB>9V=y#(hX7E+?>q1hZhJpZ zo8s8dZ@nhLKYX)~p~v>~ZErWQpU3I7S8ZF8M6bV`L)qi*S7)3=g-(eH{ddTNBy#)r zArHDG-VuigTX5OPgEB=P)Pk-wDi6}uN7(2N5{tFs)yu>bN}0(c&*=czCHGQXI}4^@7d!M^PT>s zW4_;ivw``>x2^g5*%Z6I<<~jdYwc+7F%pc$@#~HgZtrxvz5dSj9vzn$UoU5S$9A0P z_&V9`ZTg{OeCIma`}@Bg<9q0Y+v{w%ca5{X=lzNCjd8ZurJ?p5>+AcHx3;>MK{g?8 zJ^A!T*4OvKZ!F4!^d|U?6Vc}kzK6jWLzl+R13jd*1fg%9K4)IXX3+G9S|-zU*7v-< zy%8xT_IlZg?hJ4mb8htKb|AfD8X*{6xQUxU35zS z65EuML?#xI{vkCdQW9TsBGR*1Fz=C4EMhwJ%BgfnzijC@!zp4;q(_&Qv!*w1dW`kj z8W~|Ef($&Wg=g|bwt1vqV#Qez5-U)-5uMeO!-1Oq%v(4v=l15gi;}?&^64s^9nn9< zy*b2s!PsrmRWY%dmvwR@!M4eRqU~w^b@NF1m3KSfnUr66N55si#nhnIK&WnY{W{4_QF>w575e3`Pqci3>MNFyPD zcqya-p_~n!>8vNzLPkNT107ATCY1mQ3x@YG*jN%8C=WvdGi_rX3GLE|)o#~Y(P?hu zhppjj-U&xEfLz4U@=qHS*2_ly=q zib}-KgMk;7fX*k`&R^UX`MV|w61d#ZhLB*RCp1q&woNSVb;Q!^n9w8KE{nG4RW@mS zWU)(rV8ItzEX#DfwOAH!bVgcqMz`pUjA&oK0mV23>vx?Ygff!1(DLDA0(u{%V!iTg zqsx1_kyG^G3=USJ*)ZMz#mRJ^ZtFf(w3d-dcl8jeucocU`J#?IBDcuv@W}H1t=p(bEvw9n97ZZhK z86~Cq`l2|`r~zSrd{_RlmCb+b80X-3298efAL0WW=jWDgIZ^(qrQP05&h{!sCEB~r z+1`Z>xA#5BGx~eMuJ4Dxc;`+abbS7z+#^fT7}6$d;*TS5e6D{p_=^j_J*4BMr@7+t z#_z<>r^e?0YUljtCgx*{ButE*7ni=$;QZHFe@hl5t-lwh3xYRC9x3+CwmdTJ_YJSV zA+I%K{b7-Job~se;M3ZM&+4%b_?+fTz~|Wy9q^e`*&uwr!}%)HZf~Tsy{AVe+RJga z*Y1SdYag5cJjeJ3I@;T^+cCbS6(>5r4t9GtIoqokkr>}~&h{=m;r33o+dFWTV|X zC){4P-QG3M_MRV>7~dFYdtFYry*_q(d#-SdZOD8(Mj&^&CMmyknXlP=5mb1MnC){2OyS?tt z_U1d<>*Q?ji?S0P-MQ=%1@+2{}b{R?~-Q9R}NkBKO{vw;cveeVv(elhm%C%Qjn*zILH+neoZFWuSR`+qyp z_S)L*Eg$9>Uu#EukGO!A>t(mM=`zRo&ULi+ zcgczvlLtI>!tGsXw|9-Rz2`4ZjBkvyy)Gx*-UW7hdxkp3H_Fl8d#^dh_osCy3eVnl zdxg&S-tM0m-)+wJhBnlmL%;WZ>CbyiWsr^Q_q6_e{OJEl{od-MUpeJ(Ct~mSgDDK= z`0}@0Y3;kp-^N|h4Efui2q`B~J(J{b--CQ|(Kp{4dF-c}+MX@DFdFaoI%+G4gFsGCv{&W6?O5aQjEr&7&TX??x&}0+Oysv0f@9u<22vebl7# z7d=l`9vtDT7=VyO$m>@nGf-s^1Fi5nE4}7a9nqKgY-h<`w@GeOIGns=Ivde6*NRk+ z?A3~h#2jQPE!YeE%ZP#lJX`;x{Qbi!GG*I8C7zir}Y}fI63+5Ko_e@f6EAD>QL6Jes70NFkyRv z9$^PS9=ydQEh_LEY~W{}1D&Z;>c;uC;n{B^;IziLapO6293v6s>2H6)C|u}${zu{3 z>!u{QYW#J?kC(}|%EW|;U^E!6Vehy}GAINp!;`nF7cUVh{OT0qXSNbVsyl7Ly8^L;D`LHMDMk9nRS z<{s?Z*hs5^^(WBq#C19ETY**U1SX!fuS>=c-wwQLh$U4|^}P8%LR)uOc^j?CTZfC{ zdA)?I7v(dM3arn`Tj>eChYl4j?v`+1tNOuTUdH2!s7+hcSiV|$n^23aBwzAiMg~RP zs{NA!mG+d(l>rB~CWW&f0Wr6;ka`1y=N7GV5qoxviatkm+dyJMg>)m5oJksgdEJF7 zu&wDWRRpR)dXgRz>95yYl*7t#99c~Qm42GT-cFJVPt)t|xD+(}QJjL-r!POmA^-mY zefhm~vyptN5`Q}Yb)mW1)xx zLzs_`kExr#-4V^%8R#X1h1l(_nBq$tnidHYsGa8_=aUKDm?6Y&>hz&Wqt#USy1HaI4gm0P-rhm1+XM?j3F|eXgJEsp5z!`Akib$ggUF9a zkZ>`qvbsd_c25dxL0i8lsWldh>C(K9`M5uO0L#oWkPHiRQ$6%$@l#T`%an`k60 zZC26m6*0^vG`2(~i(H#!X``laX{Nj#%HWfLab@R7r6lj_Rxp6B7Hqr@g4y#)2&T!B z(GCb(x_L|6R&5$K!;9yE@gB{L~1RGNL3{fsfl=~#Cy<&Kn$q(V)lgw96*D6v#d=O zE-~H+Uz=vNRYl_u61!O2dEp@>N7Z(jA*%r5NieYoV|V6>~M?K+Tbmn@@^MbLzEm6x4Tw zF?m3CN{s}N(43daLSShNKC@@|Dvb%z1cN809lv@=S0T1VQpMNIy=`43ndaGOa>)C+ zkEc2bj>q?!6_F0mKv)}L@lsfu%0&!TX;V7P@WiT3y?*Xmx+j>Nqb+%6be=}IQ-kfi z(_eAMjef}Bcgf)6@Y9WH&{^6_(6ja( z12d0rXMQBKlTH%fR#zb3rGm$#f=bWYH-Jh-NT5c0t{gI_$&g$L5K4=Hup}9T_CPfV z8wc3G|J@+K>Vqo=D7|XQYA2M!Q~Vq~vNVmbGzF-Regh1&>7{|M0jy;*KZ*pPWfdTV`&ozQGp_8=YVLN??3+ zjnGVc0NW<1Ig=&scyib7k*aED*aoJ$$L19i5*_Qb>&$p*uO`pfp7p9UudloHmRoK) zRBdf5JCcfTi|U&ClHbtP=o)E-JrL*6Nh+5;!O|#g@Ed>gRwhKBc!gF>ozm~s>(tlp z#JQ6A_7FS&n8S~H|0bMFHU{c3=W;XLzX*WI)0o_WmSiv&TOzEX1OWL=I# z^XD0wABi1!$N@XxBH_a`z-pNYQl!}Dy(xLI2z7td_c^!K%2}rs?;8fh6Z)l0S!+4) ztkW~a#tSoO&OB*>^XxN^JJ8j7!#@3(UHC7*O5TOpb6F)UCOH9lC2!9GzpySxE|T-s z0rp~;miAK(S1RMOPepP#n?TCH*B?weY&Nn_>+$#hp82tXSAmoXeynb8BPTyL%d%##7=z3y0=qe&Zap|7g&?Pd~OKx@J9OzTdsb$3Py5MyV| z{9tKH#jrFn7-U{7f~)nm!X^C(tTdtXb3{VOSdm)Tso+mME*O1?j3iaRz~0p`0q}mC zGW-w%LN0`hl)7S|y< zd>I&%1NsVI6$K>o6k%TX$kzpA_kn31<}S(eL`e2SrtM*welh^7Q;QO?R5mQD{0n>@ zJ8Ne$MBV$2L>El<9DKP&VHeV9*QU&pERn>Y7@#wo&`jSgb3bg6Jvu8`v`52zSEF#( z{Hes+Nbsjd9wVo1bJmu_I+74XW7dca&-0bx4Vh3r!~TUe0WQ~8!mi+9cXI5|U7$;q z8vGf1)`$$9h(`D>0R`D#p5GW*tj(NB7^2x8k+vD*a|CYw$nb7LS&mNCBDd3x%*-ry z*>G-y!}V8R&*y>>?Ffe+8Y$bawsj@}-t^Aums9y&6<*w(7KwoJ4|w?(%+8TB_uh8M z>g<Euc|Re|nvH%NC}fleUp#go`bY%!gu_!#TOU;QPY7z;}X_+lMa1o%9Nzl2|X zR@#}sA95xqm`krR>)uQ(l@E;|a-=K8X3Vu!F%juUxQ+XQBrD0bfq|K_1Vf1kKizAm zVR9pynf8}`(?b1#+Qmp)U}v~!W1@{Ex8D8QOfZJqq;QoQ32m&;6(Y2R3|^Ne0>@&p zhQ3rn(z4&Nhl96d0x*YYPjMF+U-a$jQ}{cig{SygU^yh!Q~Z1Rn^JgI!NnKGnBvM^ zF{T)503ape>PDi!8^{mq?2nj31yk2&l=N3PVjYY65;%~=d2Fcgj(XaW6TFQP?qCg} zK#$lgoPp>uU;S~Sa~@{FQX~8~AHunx}XOKZ5tV zU7q5;d}|n2bLgQpf;3}QrsrBn9o9!A2hy79BwL2T+m_%hlHZN?v1E&V5K&W>2!xC6 zL&YGp(|Ein&NVF!y_90R?rT|O5LIn4bA`13P zgl0)RQD+Ghb_JF-rvVhij5d);4jGgX&-bo!vT>SzrU7jS{S<;3(I+AkB^WB`4VMn1 z^WimuOyLc3DpF_W5`$=q#23jn9xgZvpD}{z)X>| zASX(xTfOb0CVeEzfm4&PNZj=-4o#58e0yNtNITI%)Q&)BhVI~s5PUxU*l%v8|0hh*SViAm20S^G?siu=dIPrXR;fEgPruH zho|^=GB>$)cbn{>$tR<`3y+^H=t>M@?p^L4h@aml8fn40Pl4XGZEffgmu_s|Q;Fx_ zV8@8OFXie^3xL5X3?VyNTP3!bZ>wbSur!^7!$x{{`f!ncY|8Of;^{PjD5?(Whd{%g zG)Xs;rY8S*O*Azm@MPXdh1A1LRl^NSdZmm`j`T{=H8NK!i%NoGFc?uQxq>MSZ+C)Kh7(|LvJx@4`X<<~@ZTe!hHt$O!f~j5KWeM)F zYIE{b%$I8~6lJ#x{R^IrltqJ0Qh}gv4@Z6(3beD0U;PX!q@@5dpYV8L4MniXo(JL3 z4gnY2?WLeUICW&>k*{_xo_IEdjofpouTC?t^evp#hE6@Gsz#C? zNzYz{!~>Q_Ce&g8QMM4j+AZ2h{avp`Pw^x;g`DyLf$a9=`09-C_q!M&0m(Jh3A=0h z`y~wjg94V(T?|9sg zYnw>*l+0A;HN3teW4(vo>GaCk+pOX4U|DBFx+7`xbW1X^>fw7`Q$;D5g2yOZ0*L|&}{F9Ai%f^1{<`FYPwB| zx&Hc=NIGqD1+Ch46FJ2;jO3mHprPWP(67K3<1bhtsN<@h&&-<}27%3OCkn6JnvBA> z7(Ir_hDU(@!6vht?iGyArBY;x)j5gE!Dii{#sKos${T8&sk*uazs!ORZ^)2wL^L;C zp-Gn%Q+JFZ515t=tKj%Od=(yOoLR~`otN3;)u%rI^DEV5yl%uy{SKB7_Yzky69pZA zKn7tc8roLmzU+>}V*B@5vVWgZZ=*15r+L$$LRjK`Ttb$4xK=-(D~Ki%h-5S<~Lo;fz(eIfnud zSb7_mA!|V!IrMZkvrI-79*#EIt9B260s1Z2!4`36zo@6{Fqhn~KDEu@t$6 z>~8XWU49JoR{wSCH?g#W+Dvc4HrEb?U!oxER`h{VN4gM6? z$-AwE;{9Gl7@^+zXN;*c_8$FzD+$Qt9FAOYk~Joaz}ke!*2kzHfK;5FUOTLRjS*Db zq8`ZE19lJYbVd0pe_g|3*oHm+<5c{GFaUU zDi2nX%-EXaMcQ4wop~q8W@p{gf_vzO(Hbojtx**UO~HbTWf;MaYwPfn+J9O*U=KO9 zK4~&fA%J`7BBB&Oos5aM60$8@2=%Yq5`vS25DK%4X|73PHzAfB=^eFX+@JiS5tQk%Ginki5<;lVhQjXq zhjgf)wd*Zj0aC#a@1J|PLnE*tha(CX^qY*z%|S+-ygOSug|vEgXe>MVsgiWEa?-Ta zX({;#;U=ixAq|o<8vxMy-Qjg*R|#2hLdVOyT||vsFUhpz>}yD7r{$-0@<|`H{<{p& z$jXsHqt8AxKu}o3&sse^wc(7I$I*^!910liIBfIN)Mw6eCzscEcgAH_m_nu_X#Z|lEc#? z4jALs+x?a>0a?pB6ATMun!FV`BQhc5YfzaMEa9A1uyY~{_$@1Mg)HES%Tr$~*WqJR ztQOXlX@p!L{VbJQXq2bR-*RFHqa-H@;>e3iU1eXi$eEcnBdg%$czymSVrpcm(6@+~ zSV%o3A#d6|3)ZRsD&!RTewBJLwfPo`ChbysJGbc1E=da}LxJ4oY%5ITYl^Id&|NfK z)7jc=dgf9+SD#KsF1ag5*9gt92f*<9Gk-tRnKatE)!-BPQp#pi+CcmUj0&O8|KW0)!CKf1$G#)nZ&t)y5&xxlwLy-K#fsZU|Pi+*7gb_x!C&++sNw*AeUyHC{qCL=l> z(;aPpv*gsI^hou`+r6%EO3R4E@>OI*BBVk(6!Cok3$eT0_W?0MQZQD9ps6Aleuu?t zCu`zvIW(pBl3=<1@lZfaTl3YY^q?_5$4)f*pY<_xs^7oN2}rH1ceE_4)6d{>ZK;^= zD4UvJxw9pY@=+}j6O=-GBmYF-=XF`BZ1LV0O+QT{N()c71CA5ooZ~i1Z`;=DP`R!o zvu?&;nQY0OD5(vTWnWss6F*M%BH?f@`q2m8`Wp-?35Ru}`;*yXR(F$x!*iZ~OYU3y z=FZ7-Srap@^r_a#q(eShn2x5@ua@5Mb+o1parOP`m$!11$+kPxo>7TXDlsgyo#=-c z%3eEQuo^!+DfMp}_8%ffA@%QGQf6gvT*wy{srp-%uI9B>M=}PS)RSqayVt zEeO`bIQWGOtVP=?&u`jEh)HcNI`bmuDo(O9l^qZ6+sFQj{pCEvF21=$>o3I=tN9?Kpxh1|BDVwr2r9wIIcsxHCW)Z-^B?GikkT0c;c zt`JcGynLWG!P&5pDYbuZ2UpI{!kL84N6AY*c`>*v%xNf3IQcUh%M)%tg7K|6iB+on zs_mguAh?R^jKs5pCh~&0HXF&B6m#f30Tl!gWlsFSE($QRO35{)09_#C%#dMDiTURu#K zbI19@1?@Fc6gLV@&==mOU8_w@DcTY~u<$%c7Mhs8q^K_Y{N%YGrCNpf^QOiqsMzzwO!aLx2&!o8 z`t#Kb1B{`H=2dL|#8}BsisZ2~ABD5QL|%P(o;ei-?zCX)wC!+%7&CWhn?`WENKQog z5?-$*0q%@*LU+S7Ssp)>SctWlS*tZCH^+F!@KfS1hM+opg6GNfzd3@&RiUfUf0$m6^1uyakM;=Y!hR*Lc~_WRDQ@&A*b!$t3R- z(TLT^nbk_wg4s*g^G={WfIFZEzD2Eu^{+Yq(!X=R{^ZF}9PjRwKxx|D% z!p>Lby^KJI7cj9BJI+n#iWvX3xO(hc)E+v^0V(LwNA}i{t&u%cIaxkug zsj>c6FXEwOxiKoYaA+N6)#=~-JF4rg2zBGPknoC7cl#UmLB+e#5nB^T%ZuGNUl9$5 z$m|hKiC}B8W-H%98?7yowDF#i+hXU=ZsEv!9$1I5ybgy}^HuW6>_rI-*k5_4vxGgI zI!IR&=u;p9;DSLuxR}*^=NTj(-)Q2jkxs#=kAHzj2tB7yXkebTL!lrr5*wp}Y91o>_2=FrE5^NN5Rn zDncvmSNswEwLC~9i0bCtaMh*mAm)AmM)B?wH)-EonKR2N>nQGP(smvu&l zis@2MxJ0@j?`R8kdL-Q#&2Q<3HxgRLSHEeQZVWn-6_4jY?bCm4M@;s_zF+MG=FQ?N0TZC1^{c z7K;uDf^Y22rQ3qNh@{RDeFpNV$gC`cQ3@0pPU7+`P$ah&$wzhlPw=x!8G&0Jokua!Dg0j@JZwhtrtbNaREZ7;W=$W%Y zfK=Gt*39VIs^4KpD}K+?WYAOmFu*b$6k2>h1Bq|pb|yrsfg_gInkYEng|2avnfvl# zX)g8!NP2W;mZsh}{6wt1d+P-@gioWwb7<}~o*0}F{oQxYmpAw{l2n$e;cLiXw7}R|0NZ9(sWuFds={*3)TY7QCg~!jGU8U9`J& zuL61;mTal$h4C&WiLv5866XPU^K{|+k-KP~zumkKWxI$Bk6v2FU(fsrUOv~(y*9s; zyw;(#iKQ6OrZ7Nx%MoljHbBv2i4*Vr#F%In&ywBCN)0> z|D43b+jnhn_U+jFiHE_%ZJTcDjH1LygNM_bE^yx`&K5G7F7T|QK)%X*uFBcp3oD$> zw`;n#4eb+ipRc~W)CO4_fFPc@R#Z%69#Otf+ z@f>@`Sw?J!nl5w6ADm?*4OY`-K20hk)?rPTIqO+xJC8Q2%#@@uOPW>YH%VngTitZu z)~6gY*v}czjwCt zRI|$bI;qUl%_{R|QkfOaD${8@TbWS|Lu4<@9>6Zwf4%-oJ_UI#+&Zp z#h)g6IPdU3npGy{)x=S3-r$R87o>r2flbMeqbnS3=6tTxAI z(GDqfQq<^sbmXoiMIs^rkJvk{sg5JM4kdQ;BwN!XXW~DOEOoul4=^$^!T zxb|_Klw0aLpX)lV2e~$Iz0392Yf4?|qe@*pxqiU4fa^uB{aigpm%4t)^$^!fTnD+% zzoOJNh3gkwzFLnKx>rt*PTv4um z<4Rq(ay`bioog>woAITtOS$gkdXnoMu9GH|x`uO2;kuXW&s-mKod!I{aNW=4N@o` zCh=H>3brX< zZQ5U>S3t71*S7b|jOCj=YQ2Mw)35UP8XI{}NY3!qY$R3FT42ehE|`e^9y_YNqSCF} zCd%jo*oFTHIk<0caBqgSiSo$9UD4TT;nA20WuQG(t!t~by>ehM25}M+gTla)@k;o= zn1)@{tVY8=8x8wk|56=w7@yY%O?-ZWdkYiFM$4Ba!4cfn`{6wD*RHZHUW_%y>qr!h z_ui6^anlwXiV9z4H-;GT?Z5{RGkW=9M<%c>Dk^-n+;cT%o*`y&t-`+b^>pJ{2CWxd zxXazm6OyBL#J3K6HMhFEi`cZRwhQY6P-=)&13v(7S9@51!vq>&&{Rh#mh%oEee&2G&nNlf2%q#ATye3{D#xO(Pb5 zI8UDA2??ttnUQ4>JKD=2Rubpcn$>V{Hmp<5X=D_*R~M~9@#R~{Xe7Z}z>CLPII!Fw z4lH9tI44YVS?wx(0yd^&qx?~Kez6BAP$Q6Z9B!~$3rEpi$u05oMpMC``|86uB`B_Vy;~3X*VL=S_%F4?Y3&j9tXxg25>XcO}nlfZy6m@``k-VMi%-?PT-tskHEgtw*R2D9EU)dA) zI$F_YPerZw;G3=+7=Tr3cEq=n{zE|)Z5DiVtE1=23>BUcEZXZTToMiJiAUO4m15hT zNSjFRF$b3_88d2jCVe%ZF171iX&{nUB6Y8#I~a@l)u*kAI}kS+Isi)f0JW50l=3SLTmbt#R&Z-h7Shs<26n`+)B@5V_l}M3v^xa zz81JWP^{fMm!=eye7H14E$y-2RnR+rZ@JuCz`a`*E(O{MhRHuB$+y2SU9u{jbtPwmNrmOT;`VZEgV`QcO|ymO1>o1#Bk{%?#bqumx+_4 z7_|)-J0ZOfqTgw3dz|BLfWFE8i1%_NBF#>7jXMXR-yfOi^^dpqv;CkrsT!?y-Q6tR zvq(gGS^-7Fi52bT=a}00tKZ`jvouo+;dv!?z~j6Z4P^P1=U<;h59y!#xZ^2a%**Dn zU!7757atK2z*!b=jD$+0)EX)4_Y{*2*rlc);g!+{xf6-VQ$ZlpzIt*pivnvn7S#wG z3dHSj1Xh{a`EG<)f5`}s$ke)YYlDDPESXTT%3!VSy|x{yPH5J{p@rP_6w7foTq<1( zmoAYzU5B}P9W(m)FB7ll?3~f1uAiY+ikaF4tQ(}bS*ITF$e~#}!~k0I&|TbDE4o81 z^w3A7hGclCtg*L{XJXi?3wzq9x$XMOykY%vPN{U0m@Rrd)i(kzYl9$!r9m8SZEy+O z-?sVjRWEwN>(CeWdsU@A6eFbSQ-Q26)4(JmT}ZeuY6ni+i_r$;@C*kat?i~?4Z~1G z90qy@lK&$ojDM z5$>^$0qg7d(h5Swsub?0ooDS8?%?4IJoB;fC-iMqP0JT90PNB3k&?SgU9@nfZo#fT zbJ_soHCilz8)6kgKnV6sFLqg*v4`W`eh0EE8!HaD4t1Ea-ntJZ~7c`C( zZ~R*tMRY*JX&fpyW3e~Qtu8;)Hp1O$?NcG%^{lO>*r5+PMT4KEr5;mva*v+L7CJ2r zj%J52M=JdcZKS&=l`-dSwNk9SUEvfwdkGJ%E~5mS>s0yPPq$vY@gKr5OmnT1E(qE5 z_$p2NFLiUY-_m|tzb1(7@zug}(apzrjfTWqVB#(-qfarp)nB!u=3WMSnZzTQvrdFb)p{n;}#A{@KqPV zAi{15R;U+dVxSKOfD$`lhyL&%p*=gqh<+E{=vS?%&9)l#ghWg%Ez1Ni+)B%N>+zWh ziQ35aP3dS{eCsR}y_=Q8R$}ZeId}KGi|0g971e|TamcyCqc8>q9H)BffUQH<*kp|} zjw>65^@^UZp{Cji)Eqq?V8+iqVJle^Yg>Cbw* zKgHAO55)k70M|w)b)TyaB+@x8fsDLjBM_%gAayuQSy>IW)dO zbdD1ndfVo;mi{h7znRuz^YD2K=g?OYnZ24oojf+gsMjex)~6ZH;0FUe^=eEO%Ow4> z&4scOF+egnoz$MxxZIM|57=sJoc9#}4Fs}0m|)A{?H?QE@U~rzLaqRjX~CuvfAJCh zV$AxyWlnA;5#;mT)=L!B@grK7eck~NK_T;OONG@CrTAhko}lrx?&7%YMj=ZyfvIJOzyUvNi$MLN+zR0~T#X)`MJ!kXgnV(rT++ zA=wC*FhSwGop?Qmamn2z5}+kQ`q{#XkVEEiEe7g~6bP%V3F_r+6nODaA;mQ1Fi8#Q zmRIWCd#jk6W_@Fb|an zg{rNvXLu*bWt|rDFveGHN6v6>;pzQexh0(UVkGayal~AMpzR=@q(|nA`CDCwh&>O= z+Pk2{^75+Oj`lpQwsxxX2COlA|7x@MyVbz+H4PR57fG8xEiLtBk+H$)wCkWJ@>W>_ z6F0H-ld`~Sfji*kI=IK>64}GLT%u{PZ)G3SOLUk`oi^FjDf^Iblg-YZ-UxMqH;fS| zZ(&zs^PEJX@Z}J;kN4nBFP5kkocO|dcpBGt2oa%|UuAysfowinO3xHZAm9P&AElTL zR*J*@OfWIwuE5s2DQC2|@a%EX0V2j>tLy%I*tD4YXFGe}8Y>gUMy{D8w(k4Se3yya znn3UictLVA2$%9wE9b_xLURzS5ispkcb$pRSd4=(8{0n*P_w=N#)?y{Ln^JZ>w zu;#$8mq7Z-8YDOI3=mx9=xv|2&cXaXon7hz$Kzk<$M#rO5G;yl2AkC5Z8;D6KwMAp zmx4|4sHZJ+e47f-&_X%QCB9rGi#tBAFKNuG+v5vq!!fU3HMv8B^P1aU4Vs&-zvWcz*&8qgy&B`Unc!>XDAeR~&VM zX$&56)#o@K|KS_wD~3hc7aO4{k(O8&(}(H1Oamxf&L z9ldy-gbSPhc~WhHVz^_;z~O=`uLq3Y$hlGpZk8H;SS7?dI&<5O~M)D5;&4y6qV7 zetwc}=WJnE;^6J>XrqnvzyNlWA%rjzYzNAJ9uM+%5JSndW9u7;NWHMaw~P~>99~!% z0OUcS1(){XUq!0DRrP4ErP^+@FV&okWPuk0JEDP2P~#<^bAT*bMzFflFFE7{mc*rB z)emwbHum;kJ25X90P}8lJf3mT`M8+O^wnc|3=^J(w|QA@Dyp+~veBK_@`Wf`rn6Ba zY9vbDxxs_@o{c!0Z5vYKTZssR&HMNmM%E@UOlqzdD*%Rohv-&zK;Q?c+&^|eEeI$4 zuf^=}1mN@(KLUbVxnAwQ4}aZeR-Mj2!{l+W(HcGG^PBHBwX(O!zsg+0!yU2R>a9+!eUMQewW>4`F2g0~1%*ZI}YH}WHI z)1-VM^t(V_zq;r`W)BY2=DR$_TS2%uxAozk511OqapE6z+_dCX*CY|)+*$A=%N&oN zOd`UcVYO8~kH__q`T7-hRym?vojT^k<3=?*Teo4vj3 zVW@qrlD75_3gvPw1lNmPy$i65;d+7V ztDls*ywk9|;o5#1b}>IKb*;Lc?_4eKz&?lTb*@D}<2%>m(@R}{=X#gxFjv-{rLOz9 zX3r>fy~j0kCbl_T&vC6O#HNO8Yyg{}S=i5T&EYEN`pN84R|(gRHc)-&(QPNMRLJ(?(ywv)p@>_)+x8e&C6sf< znBg5F9jp^GgLQ=0;S{F%in8@A;GuSi&*Bi(K~ZdbhDl9WGpN;&0(d{78tdS(o76AA zXzQYK^qp+0lHm>^+n+y^6|zyY4LXt!s`6A@RX(B;Vdy@Xinyx$p1bO*%Fiq`BK5RH zNFA*&*Y+ld4OUrQAxyWti2gO;ZCY>GKny^Uv|{dJ+tuvCAPsMQSlmux1+v8i2v=`H zoyF!%>wpQsqBB&Y(Dtj_LNv{hfWU>63T(DKbR;IW=^*>-GeT$cY9&%YB|=T?cZkZp z`2(P*sL`?cwq?=6M~^YJr3BWBWga|LDCu;00XSo&;ic;c4(r#e$}<5UPIUN zx@fxcYQJJ$ zDO@y{Ky`}?L0qIe{SE@da-RT0SuM)c>0#p9uDMAb+CjOAn~!cja*taC7iS*{R>b1; zwzbN5p9rR%3sN{l6nI+^DQ{hC3CwLpqM*^3^v8uP>FG^Nj=t52RV;64#Ly%!jQ;H!ojp^MVTBPJZx9YckXmFWQS@rCt;()SMa?#nov{(p(E+1e}pyVBP38py^ziOes0>y zW)f3O=w%}8tuTfxyI6~I*kj7|oLYL?bIkh zm{~7Qjh@296cn~k+Pvkd1O3y~KoQMcoyH1~D1gQFqO?eX#^be1prAK5bc9ip|Jr=0 zSnYwyCrXf2Ddj+&`YdYbg!6+6{Bu z`F1Td9Gu7w2a4+jTpws+NP@r`aWxJf7k@wadma3JQMD!fxgL+k;OH7X%7_jI=~vr7 z1cCK;*}FW&U$I;`jho(vbv$$9F7H=2Jx|y5D6B!T{2{~WytoX*Fh=yy{p#Cwn1`>q zhT2S+Yr=laMf@9GbC(QSZ95wV(~d=HA4bonP1aR!4V1hU>fU!@o-_@B?bbf^L}t%h zAz|624zbdzEHhhA{h;Mv+;6V{wo4t8J%;`7-)XR)Ofr$_)MDJh`@J$KZ-Hm6o+^)z zDBVj+^mjX2^&1G`9YX3&BGKP)AEjk8hLq_1Z)SDPiPgUwvMSanePmeGX9+;_c3T7O ztZbgp`;eQtMV8AG5+ZG?3!g?VYESXMxluRtiL8X`*Wz#1Z@6WwVS8Y9m~Nf`7k5_#C>r?l^@!D;b_$=G6()^Wh8Hb4|mR((%#|VSWA$N-Kqz^NZ7CkL4VcGLs;9;braR^w)y(;Ueq?r(ldBRJgncHh(d#FQCCcPk| zb;S_j0uEm1UQC|tEt-K3oMHSw&H*W?dIKflk8Mj-W|`g*rqYQVfAE3m`9J_;_6aZu zKvMNck)CCk1gHVGgqrtN603z8Z%gir#%HmwOhkagFz{Y)_pXG28b%+-3Am+iY(bwcH+&5? z4Y#vCs+b0P?xKz@XqQcQ1f zcULiEA!LczeqPg|;TXR9ymJ5wkk}Fouq7uSkUkvATOQufA7(b3w~nPdtrteyf@2*Ale$y zne-RDB(-5*m?`}Vb+>O2p^0yWeKp@pKo`>8@LQ&RVjuqMUx)(-lPQGzk%&};y?dLt zqSlE1JQyX=WG)BJl@KszR(=4>OkmnTZ-%92T(To-IuzWX8}t1cI3yV(a@D|(z_`g$bI<;JFsm-?4P86w*Qbg(_?bjP z;w>VZPnzVn+C=n_Cn3{2>7gUhYGJWFYXO~pNpc;MRj>_Aq8?Aa>iJbow0e^8VeyvN z{D+oBvZ;FpJm^UzGFtlOB3(FtNfa(E=9NflLR~H#879xSAYFS7s*%~$*3gxi1ggAUe46U$fwEx2Mz|?4Gy)E&8Vig`30ja@5)$Y z3`kbY5Xi5~eMt=;>G28kCU4ojt&@Y$o{GYBdm7kHu>4!7ZvG{PZ3&-*bvMSiCA}Wp zAXNSJ5Y|1nwoD4I5ws!kSEM*7DePHljaC z8Yv3uB&X?m8;+g(nmoB0%SSIeqFD)+UYMjOqKwd(u5SsA(TO|$1sGX9kb>?hC3?CD zHiy}oL2V%ns{IQ`^kG7T>34_9m<*O0V750na)p)Co zi02MJjwsij)gpw+jLIF>SX?907c(N3r(T;fiaOJcR^@Qf@?S-O6; z9#bu&e2Pd>l2`I6x&(XeOJ)!Q09il}9sHQkd?VOpm)q1x>}>KDVqpXS7WOSOnA0GM z61h#4Bb%xnSh&L17=gOevp;G&Ex0+&H93@f0tOQ3hFa6+Ssw06IZzNkXZYp06Yvk`+hlPCos%woUz^TCY5h zkznd)0*YU9n-$HVSgyK&s`@H+>p`_+uf0Z}J<#|X?b<#T98VD5USYaZ2KsVP6JeC& zkoOTkO?%RbcG8J8vPvS6qZ<2U`k>PlA^9nTw6YfDW*e-uW(^T!mDeHNF8(BFxtfsn zmMsJ9_lltlgt;DB7W_=Ye=kIxr0Hx#*ULsBmDps$UMqUhT5hC5?)%8rvcbz6cGgBA z4{m;%w51Mm!r?U2Br~nauyh4x;6g&qdN_%M1g6ADh?XP9J~aO#`Adl58%7{0IbLwU znOF@j3rp)M{;L3id{P54x zGM8oE};uFk3wg<-8Zaf%{=WPJoz=6_3-0k15a z0UnyL1>35C=QdeHN7d`U5mpx&x1EA~AXJk3g``?m5^eK$x#a$HiR4sQ<$~3fd`UVO z|11evmbVYe9QYygBK(;Id$)OP+&BYmiH{vo10Vt;^;d^2{AWz{Eh zazv<$B=rDx<`Og;Ec)Ou)dr5*2T%!=4kKg&@To~*4F9gEH_I^gnzo&lUV zx{Bi}>woNXtU`$->vR12}rJg96s`qg+5HMfY^&i4jkyh^l0GI=4 zIAxJ}NLXP44U1NSCEVc?Nk#2Wa&XNsPP95*4!}Pk?zCI+qs5LAgMYV`p0AE=Xv!&; z@d6R;usq$JGd-j5;^0tJ-14oLICmDFV=Lur&oAV7(W|g+u+~%9GFaP=Y%<%_t076C z2@)LS)v+=C{h(lNtJ%ZyRoAWB@18xO9|-fvKVN0H2=uhB#`$YByJo62d?e@4=dRC$ zq~@#kz=wQh0t?puBm-D>c2@7bb|do!_i+3LeBIDah35{FX^Kq!z&pCYNFv) z#I~R1j&-K7&R_G-cMt$cx0AYSi#2}qgE{mvf#zO?!5{ooD>~+even5 z@Jmj{tcl+YuutogYKDs~%n!5nyT~WuDVC5>_B*q9hZV6U;>*PTN!s}e!C}0e(`bk2 z?$H5$byb&D!Y-2JK(*h!8MB!k!&o6^m-0MdQ6;uDs_XSea8y2Js=dmYMCjJ+DW#_Lw{b_?*7!Tyb6=@C zybtE}6T#eMcR?5jSE}c%>Q_J2)nid!sq5dP>;Gh$Teq+q0qa&%y_8Xxoljp-P?PXw zOVm#keC;8I70;)g;w?SU5HZ5F*waN?bZVC&mK=HxQh?fzve5~f=96}_`l0l z`M(qfpZqWF_y6JC_p|PVMnj)tmJh;tv1iv!A|po-tCf>Dcf>cyCeFPHK)j<=2OzHE zkC0^ZRFh;pU+31Erw91sS=-7`=Giy%pz~5)%*~(3SSNAbu1?F)WL~%n*=kD&NCDN4 z{X7o~3dhgSu~>Kfd=ENm|4brS!B4*uJE}j@kEZ_Bf9IBka_?rYxm*u(E#+$HA3M%> z_=j+#-aqZIU+-=sH`2b_zq+-=cIm`ly9=)to&m1;WG8uAMiS5^d zI`RFwlK0|R;hA4f|0wPHZGDtj?yN~dsx*kE#-3L1)U!K_-Rv&0n^mKNY?!{?!P>Tg z_Q9e(u7KCEtp#iQ6sE`HQ=r47SUM*aST!wL-B<2Q*D-x|VXjm~DorFa`&@tdHG=R1 z-cw$6sVj)z8Z6q~hwvkdO%RPbd!>8NSFTH*ARg8KU9P+Sm%?E2|I&W{AI^P0>n=ti zHGRBF8&t4aTJ6NJ?|6`X zJjKK0?Ja8fBRk|Q+TOZ4V}dIDHj6W^r?|U3gCddBhs4Hn<_M{&LJpI`eGy_2oTp8H zjvXHL(XH}qYafIzp3r_MsVMOdSmU}`cXrQt%Tp{Sd={BLhG%&~ReaBR%S5Rlh{dz~ zG)dUA#NhCCgix~S>th|Itp|D{%*}bAH=my3MZ7%t&TfIz>lX{?VzVe9uMXD50$u99 zXR6h&&`R*GRVjfH(Lk+AA3fXReE0a4C>Q0}HRJ{lin*7)S52F+{ch+W5+`QOms2_hwF_N$rwYebGGI69J-IEE0OTo}=$uGqY6o&GLqxDK=chE@ILFQtMgUqqkjVM$g+`$Gq*)^ELrl z4?(+<=k1Q4#=v&`dCT|9w5dNUGi%Rpt2=9g5oXo~%Dk1M9!r`x-7Og%+(pNq#(JWs z?(^GXeHf~zZjhcj-utca2~6F&GIf*9)Lr_FW9k6(NjL7$n!cN{xYI1dk50ePD(F*bHLo1E{9IF>98-TL_+u6wKVHcC* z20VA!@a$;!cbAwcY5;1e0!7YGjrQ-2_niG}iJthl{W~CFlm7M6{p-6i4#5Wcmx(-C zGHi=yNJ5tUGTM%OYi61@7x&sql1_Ea8qIE_-ShF`NA?vRAljVnKS!zU%NXq2JLCMg zU~|NA1e{L;t<*O%_w{+P~6fZmJ@AU~|1Nw~7 zqvjuQcY}op)()G^xFmJ}@@(u9YtZLpU_`iHWuLa+wZPXI3muO)w{wX|3-|b;G0WAj zzNYt>`RxwgmFb<)QtXa)Ti1FgjEg+{xX2L)eDO8%UHOV(PNe@lt6hu)1P>qe6t4iy z?fmp$eoO8#kg;jO^0b;SVQGA;BX@eysNi;(voDZU@F~1T!KxqNkFawbVL>%SW#^vb z9yY5jVGDliGooVO`fw}UVZwOHpp4ITFA(9rHWn($^|HEyN4%b&iye@ax94)JY~B%< zmwxxH2Bily~=_ck0SH+Jg||sq8+*uNFn<03WgCGaUM$O(WwMh*n-cO>@ryq zf6t0xZeAq&R2G{Gf2dFXpkEZac4OK;Bc$x zd=a}^^QDPY{XJ*?GQQ)C`73HH@U~~r3;Bo-TH=uy8263CIFdF`laMw7+|ULT&B2Xn zHG9X8Q+J0YAae_L~H2t4!(Sx+*iR* zQ`5f=&rYitrNL=0ML44TZr0fD#@Hq2wZe<7;k7xrSt#z_$$1R};%BMa!8X3ly8_&I zta+MWoF_~m5r38n`jiY?M#3%MG7LVgDe~IjDcyL6CMUTH{mim7|7b}y@R{{q(vPWw z(atOLvqiu^b&(N!WlHQy=h3U}1{`BeNX zmdV%>iN@ZhCh7}*{B8Q=+VBt3tjU?-9}pVWQ!G9<*y4qSG`OwY?qTRst}xj32A(UB z(Z; zcEiqfvGon!5+L#V5$op~VSg?_Exe4kJJtnh?Cm4g0(og&_3x|;do7Ss5}2~3ot+US z+w9W{wg~0W_+EQCNc4s^N8|gP2Jqc}W<4*JM%TLeQ0L!h^N%D)eKlUy4I`u~=`j3v zUR5-JzGtiYQ@f)~YvsK1p0Wr~rt0(Hr%YtNaONR6PFJv13icsZQDyLTS2#ayn3XR( z5P@C8MU|0^@i}EPT1C=M_Sc+@qV%O+W4*odHkGN=oXXj!k4NF%`EFqiE2&pI`2X<} z>Mp88gO^#5B8x>Qr{6Tec2kRD{&LyT!qn(kFB~K;Oa!^~5kV+-{u)w|3V&m=<+6e> zy=j}UD`IUB@v?nRJsTU%pJc`5kzkIdNl>FcHZ?jAT69|d*)_DtNr^HGZjUc-O^F1Y zkODO*pMJ?CK}U}cZgQRmKi@E2dc#bko};7I*yX|UC7fr5>%E=B4Gcf0+PnkdJbh~a z|CoCh_$Z5W@qd$D!UB;E8ZZ`wRMA?KYBXqxOEnNSL@}_KlF%YxZ=M+2Q-odc7ERo& z^76V?Tj|lNJ@y>!v90HnQ$exyk^p8AC`6@#)(ci^CnmMQMpz_e|KDfk-OVNhr0w~9 z{y+VYeJ?Zf&OGzX%yWO9kl+etmR4oVk~edf5_*=rL(ftoW0ubR*Imx?);h;JX^|;IeFre-GbkKG!lLe4&_GZ)UF&97zwBFcCPyJGG4mQymu5!L|Kz2ELYUMy9 z4ZDgrP)YIIzs<#Y^pPkpk+^5WUq7?;TB|WpG%P;c9>7rj-~)^^B^!-{{;im^pLqF=eU%|pBL z>n*=XBGRC=|D#Yr(GJ|GJ)>n4o;ezdkcZ(vi^RhNvz5?jlD}lJ)hvA;%AiQ&3-&~^ z$LkdH$G2Wnw8Oylx`>aMopg(Af7&pX^}6Z`z#xPI>(zTqI^qd^Og=I6dfjd7*8(Z% zh<5S(lL*Z_5d4Eey+M_?n^+s8S)?R05VB%UzBRvBADxR5T{*D{+u(=9>AVN!hc&+& z>t`$g@j04^VN+QS6u?(KsU33d1a?R$0LcaqMS42MP-Qt#aDnc!N)Lp`!gR@kQ>7%u z{EHIdQius1ivH_qNR-cXAmJS6qt?C+hiny;8r1_X8uD>zy4N&4Ki%}yiB8jzn>;Qy z@T=2}wx$|Aj>>igC$pY<*(8`~aD@+!AADpQ#;Z~=ahOcNV$BjASNTZmI#b%=Poa11 zaDJUV5o#&gCMyNomPKTXz!XOuEJ;Fp=VcFPk%V@%yqsNZTdPW8gPy-(Z8BJ+7BJ4p zW=_36`}zVC4)Z_5GM<0idSf{>yvlc3!&ZjXpf_MuOj%N3%pK;YT3^Vpd zkX^fdV(j1(_2%rqg>ANIYi#PxAJM?>G~)C?$8vz{lq9 zN7w)|S%yM;{$zm@(pY=Z1hL(=*4)e%WzR3RVyn2Y*54_AqfPR6O$&cRlOxxAT%n1P z>%FdU!QwbxOzbpmPN?<;C7N*E6w}!OOilok5Fi#c0V38S6>v^OVfkjWDH|{IxGo^j zv!ddN9*da@OXWInpA`*pVMnEV@xXmjE*^N${5&i_2*61U5)Wv{SA;`EaCpYNZWZn= z!xch1UTt@&``_9}|*ucZ5xu#*K9o6q$8mT{w;LHsf_T3wmkMrUHOrX zo-W^jce%~;u8761lx8bv){e?0u;8z+Wvon$GgN!c<4mx~P}j>$W5bHGiOAjpePYXs zH2Nfw@SYUtmOs5ja7QI~n`r5Z);vZ9!%(i5%L5;fcH6j5B1~7Mq-a> zaZAv4}@R0bt|R`ThApn+1JewY>+OR)Dj4`1~PHiu8~PACjA6I zW)ZkM+`4m?hL05$;KT@Em`ymtNNb@r0|9D>zj_zPEb{!VLDl^jtP8$}I-5pp{u`0j zVzZFoIP&HhH#_qZ^3Q%&u+r869LjXh&^8Vdniw)fHz!c3+7k=zvg6ho>0=SmQ?jk7 z;3_egppO&TW%_Q#8AT)MX4}DRcTCd%zLZK@Y*cZ5-N-_ruz^Dal z=c!@U>;w9(eCslgc?pU!T(eS4$O=1fU;nyi6CFW*4OXQL$q>zY{~5U6+XLH4OXQ1Q zh7!VT66)3~w@|L!k$-jb$fkQB=j=U~Kj-)jEy2uGoV#s$!4Fj!B;pk^9%{ttooGpkBsoajvP07v+oA zKDvYh(hi(u0z(}UlLx={v*fGzJoJc*owu#iIQ5-Hwd1cdLR%E{a*`Z>ol&|@D|Ku= z)n?ynkN$wM;Rvc1?ixKgTaA{`KF_{E@I2(`3+#!Jcl(a!NuVjah$@aG#vMJJVN8FF zQ|6`aLtwmD;B_t?63`w9|GTX_Ve3vr+BlD;PyVgG=rVzK;4IrYnx&Jm=)L?UT$8@O zp1;AE-Uh7o@*)_I%CoDUK+Qk-fc_Y3t=fK8j(G71f|L+?;w(tZN7fT$ZoQyPQg56p z@+Dw2c(?Pl{1;Q?U|pw>LG*|vE$yMaiH5j{MZe8ovnQJlraL7s=#=!WM>_Sr{m3X_ z2(%RVyAUZ2Uyer~OZn)qLl_FObQe~mpW4vEGY)ZQ7_UbxZ~odu)x zWxgg2pG6s3LCw6=Q8Ooev$n$34&RUfe1H9gnId9ANn_E=`K!ZLNj04{h{!qmT1JY; zbph%{lT9dm*46Q774Ncy%3HPOGA{8Hyptbm&4c>y!~9iG#a`C*$%pjKt{^3nAVUh` zf(*pl*#88SW-*Q%`Tz|ockdHyoASwIiCXcSGxR$BZ)re-&2bPzdmU-@l4Rg4`b8g9 z_jSEV?Y+Ui1EJJHeNc?QB58g8KnMQZtMpwzHr3Rr+9wDAp|jJN&HdK1jfPAEBNh|D zn20fKpHA?ZSWMumifcRQrp%rCtiBW^P_L%SZX=?&kNZQcS`X|wQF=EI-XLR?(@j?j$1$ z;{B-0E*f&-h)Gmx;Vj{LsQQ4|rA7{2|D25aleo6^&K_%ggTuVB!y!Bmq>nB`BN&_@ zvk|?<7^3B{%y-=0ZO(k5hmdC2rSMwqkP8ZVsuoPqLA^ zyI+A2_(S#;LG|c`91YdGY+Z`@v1XTIUBx^P$tZ*vNTA50jDRioep~l}sIvNln(&BS zpY$h|ojP=Cs!};1C_Ux5$PTx^dXIB51>Qh2+@a1ipSR9~UX!rIjU8wl?H&gTuUhMc zCIJ@C$RCpRfuEG@pby>2be#dW1DBcHK~ ztIn-0-H+_fYV4Jbt)u9r$VPYD2ig8DzFDtY^Hua^UyF#hF+=d$S@>ev%Zm{xh(PJd z2@Fczo-2$uv0{Xem*{mpI@HW}d5mQMo}tN7OYE9z)#Hoc*J)*25ZRxOEE`l)-@;M9 zB=Y`Y=$6xoXe(RG6siK_(EEQ6}&TWbvHu|$KXEMWL7}khV@o{@)fq&%$U(4-`)V>w7gJ-PjwXykqlFDiR z2510(&DD3?DEAk5{aaJ`_zd{CR{gM4mcu&h6a>cnO24YtQDc}re?!-HJMj2IO3e$Z zi>2x6wKm`(4T5)IbSsHJY4kuNK5M2+?pl|W{&ulCQ0Ppckq_XIAbiX9bqz=>ybXD3 z*n{9Eq+c!|{HpYEw5H~9>5{Nb=B`H|wkB!ka7pNVr7V zeEdDjM=?oz)OF3flU=#B5bf$}E-~dQYh+Ip2Y>rw;3h(;lLokmz5=zkIrr+wt=@5@ zvC|(F8-1Z?_5}vpiy#!caPMz;CPrtwr5rTY<6G#)9}1zo&Lj%a8z#6y?zLH)&TrN7tLARStYxCaYw>81j|ydm*h%)9 zha_S{9XTP1BewSvD<(vewO&(S>m?Y3r6b{3>m?4#w0vLmbvgT|=h-KS9M#ZI;P$Bl zX6q&MmPxQRf#rMhs3AsPN*A(-0c1$D^89qW;|H|saL_`tQLVq#qX#UHNm(^dB;Fm? z8o7zS93HAs{Z2QU9cfiUXWen9ob8tpKzQ@QL&#Y5w+*~;8*F+;5BSg?j`H?lZU2F~_cIxHl_675+IrF$jUvFLmH z$yNHgM_-#KN9gFt`+p&EzYbdG__WY6Av>4yhpEjF}2L3J{P9s_Tbw8qW42lr~eN?x2F15`^PU zRULfB(kzA@lOe>S0xkcRpG?KdD>Q0evO`}9pQ8!p*qU$3`>mlIUddApxL8c0Aq`yW zk!SU4^F_7rag=@OO!a8BFy^7L@d{%iRv~NA6|c}cyHnor-_e!`cYH=~24oDj_1ZLJ zB%Tv7>6xV;dKjU8A<;esG(r1-YBewKPozc*f5>P}d?g)lN5JJoyD8z)48Q9Vi5=*G z>dJIwSmI15JJV;NyfoKr4Q89*01;B=L;!&mn9J89b|m(A38z#pADlfUsAdkw^;h2} z%?6``3a!>tm(&}N3CyxOdMQ;_MbD6mx=$t~k5~sdVTLB~Drh~V*_Ho(+u;l3q5AGm z@KSzOwl?R>i}KLiT@tkCPEngs7nlyjVp7=3=)k9ZT5p~W*+J`B`KI+yv3zU!pMMFF zDf^=d4`iai1l9NfJ$mzDdQ{yfxs-(tTw9Qu*3=%a^*7j;EGiHI+EsGgYAHr7^kJ;( z-N-?Y?~b|hbesCx-#DD15ev}s46_e$kv_~Opv$@9i}@x>pW0(&4I z(g7yysyrhyBF^6y_1cB04=?He@VzujeB|@;g_^OK5=rBwMC5&m`<<mdAkk7khG1IPH^!;7InD%NZnu%5d@D`Ig)*LPirh0Rvp2 z#h>cMczKjf%2je#?!=SctZ4#<2YM-XqNwI6=IUghBonq529dlyJe=j6;F9&ji6_t` zvwxSwX+YXaV)vlB|1tsnE|oPc& zct+GEpOm&q0bXlO&r^R(${eK}P%swI1O@%lJ=%rf4#M|<#5b|RO45|<-lJD@IpeTmID_|bKG$n=W7niw0s0E=!hSDsqQc#GiCe|;{$QjN>Wv# z*Um7jNTH|U*Ji@9mcGa)C48zlFV*4ZAYjdfwVaJd%Qs3bO!#rS zO-z<3HfM%MuzP*RK1`+6f#h^?wt#)y8s6K_oaghPD;`oqQkPBsp>#=tY=kS7wwW`6#-D)0j2cmr{FTValC zolx>u>nM@fYsLfHr4jYWpMD8FLmG!?)cst_?`IzXyBm9xE4}K~JiQczZ|tbQlp{R( zMfhjTo2IC1^>@x1vJo)mhOu^uDyV0g;L!aO8RY zF1lgG9+Y=6DZx>?i=Xx=nLCleNB8oh0+V5Z^y^r&uAm>oFP{+S+X&0sJSZyvDy9si z7;3k)IcVw2AR7X68i0Mo(;%)>)=PO2Yb1&eM&jCzj4i9(7b0zLxRAVQ5`s zX{&vnrKNka0sMj84@-ZSFSUDCg=MNTS2|H-(l96fmL6wZ6 z=QZkqQ_p3GBF$sA55&^iQgAEEQ#&SbkV-v9dIyFzka12&*lIcaOVFz)7HgH!MddHp zl~@(sVy+IZijx10BE3v`bhBJWr8y9;M*zUYCxCl&JI~_L4*s6XQ}u;E8nn~Rs!80H zwwiB5bXxZ*4cRz#lRsORt1++Cf%kryY32gTywIJCx^41La z1N>uy-I{VAAMv$F9CkZUa6W#W6JoimAeMdp0{GTe4=T8iyRv_k)$+10`VM_I^Pvum zKNne7Lj8qbTVtnL^jeDwIa&X)tox;tjk!Zm{i%=1(WVar=O_A%K*O0L?HJKO{69TU z(G9$+jq6H$nEBC#Wr_rl)+VtyhP^ zc{4X!pr)UiRpj63i}s*ywZmI75g))u5>v4B79z_yK;#+wzVH@7U%hT4PwNfG*Ro3% zmZJ;swX}2R4@~ey@1w5MsOX)g!DFl-0s60igWV*pvL-a(g6cbmju-Noa6b~p(zaT= zW^1zZhph63?E1~ye~6%S?U7z9@jxp*5W5l|Kkb3FF16vtM_70hO7{~hJ9;0GEqX|{ zH|wFb{1wjRFO-Ze&g$|aKhzpie|Q4>g-D(<@|@`XB2ZvYTRRBYNXZKZ!&(a^GB%hE zuJ8>F`08xCPvo=eh3g+l)~Rz(0e>~GxHWb|mbQ0Uoi!aI<6zNF3_B?I5alwe-NmhK zj1+Fl@+ZP08a(w6V#d{V63!$i-xE*Uioknjc?Z?2Z*fGMJ@cj?u)odUjBnSn zvk>j3{koRr*#msKR+iuob=oNH4`qD8mYtL72exe7!160{jQVTho9ft8DWW+{yuUrAzp?(7zs~idofNU zRaan_Vq}Z+wYw6IEpwA?YFKH2To|6y+whgRCJ~~1JkZBCT<*q%?JKMHhR&ruU(4$} zk~W9IxX*kW@VeVh5A;qqRWR316%W4zQ8&{5D*2duG073K`7(?S!rp5RN#pK=*KE?i zZT_OJl>1}8fdcEXRV(c%92RGCy)=En~ zwo7DHd3^37a!f@wUG87h7yd=_himD4^9S-5xcS39zUcEHQ`!qQS1f%3hXCLVK%Vx9 z&2<@m0De{M>ube3&;OFIWr<9<_RaG}Yvfvs>W|Ye#@A9PRVoW128QsiFn%`=e6)`N+mYeZgg|HZ#fVi1k^1kX5@ z;g@mw7W?|)#t43v*w+u5Htk4-ySex|6tyLPCG$4qteq5TzuX_r4gWG@YBHxo=A*g0 zgAonj2cXMM^b9NTFejsg)(_kZ|CVnpx>L+st?=V@k%NU8l^#4hG%0ehDD;{7@1M=e z&~9VFWf%^>Y#NXw&JS)`jgOJ~97!|y;0ODEhH%@cMr|MAvd7gwkgi_7TvwMQ2ogD2 zb^Zm(uuq-#+fy79Qw+NIW_`qLs%lB>>Zo{7tkQDv)zNG8^$qggv49mjRwpx3Tvw!FA^W5j z^S)l>xbZ-fd_mQ|TVP~qDd~7%nKC6|OWP!DCh!W3whBn{<0X&^w6#Jb;>x^-F*`l@K()wr9P`po|_$sdf zqr5v}n{?jU3;V1^tB@(=*KbN!J}V@ZW$xS(X))Ko2^?%szh0GkU8A0P5u3H18Y}#u z+BZgI9z?eCMTKIg+XeO8(siy1(`0J9Vcd+!4nMBbONkBBBNFm=T~S~yzRnMW%1C=W z>fbTzLYF8~j&F*ERpWhyBr6N7Z74MLfZvey{-wWOv6zZsVnddQz$2+FRx7W^V%Y|40Dy=3l}p4EkIPX@7bLA%{kth_ zZGQwoC1G2)sA;=}a*?;HZM8)G(6}op#=?)M1ZQIiC!A-KA{Lka?cINawiVvFiJy=`RKY z_XZmZ)v%MD&f~M~bpFS>^N5N^(0SjJ)rEFXL-srxzu{HQ3UT#aeO1HNx43eK^??OJ zmeFI_y;Ody#>YC#rMHQ35_FkfW&2trBa=whTEvAulJNLieA2&hoeP0cBrzsLa^iDC z1(8Ha=p=Eg9vw-X5AT>L^+n&;gL_aYe2Ic8VOtC|5mD~CfLU2DYhJy0h9k%HwXBmG zJJc5^0X=ok2}lA83Ei&_96rY>j9lOYZuC4N2XH{KFEx*c|AVnP0eF}FPQXxuB(Gjy zCBqMLeI?fpAl_Lu^!z5ns}P4W#h_)a>iS@a3C@Jr7{Gya_|Di|ue$3S7=fqPPfcpg zvEC%o_71h99sHcTK)di2&HeI$&e+^95Afi7=&OS8>v(L3*|b)vZUpOg<0@>^qRr$GoF5 zKNy>Xy~G&A5p!}$MxPa_%=O5=6PFXo|EwHGp+a+1buK$d3(iIx8Wq&)JEN*g#WE;K z?oU&`MyRIg-<14)r)tE}N$_cs98Ejb{}l7H=loVAa;pM|OIvH8IYk8h)6-clq#@PO zqOOb__J!&qhus^tf+w7=&-bF#@CESIdJie<1WqsXE!~_~5D?W66GY(cUKQB0I`HRJ zKmw;+45h+vSdDwt|J*Jimh;@{P=1>thw{Rg(I#!xZ_#LI+Uvz2?%3_c1AC={`YLUv zNQO<3!#UxrB8OORU*hnI9KzgY3Kuo1Wu$BX2vWklp|AL|@B?viuL9QDdF*T|nNvXZKy3Rr>qRhq;Ix9^s3M-w9$x+-A&*N5z0YoFgNENV9j+b@FNy zV%&Cpz6cs8w%HN)5f`tMY|IV~~3?eJm#AnBWkd5#Ltdy@A6jSitkTLi^Uq zc8PztuSFKdOqw8`sM;zt9q-siIB%4}1Rp~-1HDn`H zLRq|1Jtoz3Q2ifs1*=-$0=BbyV+* zCD~oCy~0!9A^k2z2OLBWs}7&kI^yPci+@|B{f22Fu&rC)dbBAf|wAW;7CQcBW?|IC1teOzD7=NOw%fl3oSrkL5 z5x8?okO{dP9zKmi1o$vsEfP!-cKL%5qFd;WyEtN9U1wle6`njqu}!IBVzLtnbbA`c zsJS1X<03*v#ssa)Jm4F<$lNJV_@b^`Td(w_V?*AC z)+BOEejec3fTYmq>7Lelx^n+ShrZEifNF*p(AG>>($S*h<2k`S2I?zY=~^&Zhu{#d1J`9wwLO;VFTD zoNMvK2s|UMTjbbI-9OSESm#owwX92$Nd>FzaGx5>jp$hR9LO=e`QNB(GG+LpA}8m# zgwsWFwj;R`d+k3yHwk*1OEO`Jslo5KC*0OWfpwwr^@8d3!KX-@T~L#X*TqY=UdX@d zXQ&b+f?f6#`&?bal+6z#`1e-CDOa&Mh<(9sj9`J5%wHm?e)je$uKI&aiSZZT6;vz# z4XSkoluGi#I`#A482rXkgpNE&RpegDk~(#d^P+l}s%_kwL}vPhNaN!=%GD$4I|uj6 zW+;)dOdPB$&4cu+KL7Xqh06yQJ~vf(^`=1zT1`(*Lq2wa_Bhx1Cagv8Awm?3FQk%V z2G}+Vk50k}duOB-gTn9l?%2X1tNx8V(PHV-Z4+Z7;5~|a)vIWrsUF!Y882J@eJ2M` z_#At9oAQy7_6%%5_^2Gc;xPYlI}j!PYl4`aDCDhhZ)X!<;!Tl!3ynK52#-iVA^UBv zouy;1M-rzP9i4rHH}a=TBFX#}!y?IvD^9MTn9FqQgsPVlWDA*vt`_KSO~zgw$ERtRh^Kum7eEc9C~mRf+o{^0 zCYh01+VKHL6t=x${3nO(4rxky01h z6|`WKE_Gc8IB{z(mKYMhFChkkOiW{U*R>83`J&fS)gY4W9fC*`-Vn%ji^G3U&_1k+ zrIG&X8HPw*lTA%3GWO7BK|nhHDxbn6i6}$_GZ9Y$JwMre$k+}hAbzkNtQ9{5F&rF) zJsp8Hk=znBYIR^QmODfuTpf64Rp7VSdtgc-rh($=yqQz4Lp|`6bKGrKSKR<<5avMK zLu595{Vxo{im6|tJEB1nje<+2P19gQwrR4CHWB<;D&u*)MQ0OD##!`>}t-|sc8NH$+K(44_b1pYde(_47APMKDK^3or zo07YH^8+s+cktixQ)qrBo1e4HPqFzaF+Wqx&s6hc>}e~fnY(iHGt>N3$qxvp=6>^q zWNc17fouCzgT_LetAaFzO9LlS=%Zw66zR z;&Fqu#IM++Wd{xP#XUNvh+ZDrGlbHo99ddN=))y9kT~87;&UPudXKk4uT!Dtcq_1B z@dc;!EPtcdciV7bcfx8({PsOSNdAl8{)V~WYH#}Lz4VnzUv;OideT>#;^!`vsbQeK z(>&Z1YV5D%gR&6GBb-1(q~<^><}KYHNs4kWDS<+TgC4BhlitT;vqiC|xt`KEyPVeV zfzPr0HhZN1Aifo72+ua!y#2nJAMwh)>GXiN!YL4bd&y$W9tpyeN&+fQ$1>qEqpxyl zPtRw;Us4Oz2Jv6s_9u_~FmkeDBAAI?`Q7-RC;IT;NF+jegglK^<{1^OCHTL+SR;)9o46qHb@Zw3C3rPxOSmu{j=DyL>eYNw$nSFg(LX2!5LQkmdkpG%4PcyfhO zztJW4^6)+S*`a=+@3(Njo%;>y0bMmWR=GA(xt6EvT>eeryV#>LdYL)?!=Xve`0Y8e z%f%{l`v(iyI)@lwX8i-9BBy?&eOJmK9jIlr68W$=R#^ohOI z#B;EnzelrivFg18IXU+9FmZ8&or9Z$Sc8$1dMfLADu_;TuU!p6xff8o2!+XMY~{ey zC<_T`byNY4 z8@KKofYJl|e{V+rm!ZjE-#M=SOFcCmMpOoeGH0)v!p%QCm^-dZ4<>&=Z=Lfe4ey6C z`nwSo#qsu6>ZyC4{U^Hk-qLgz2f%wEJlAFP@3g<8e^O8Fd*+|$-^^q6FVA*-xrFnd zk#FBfcsY#NMf44C59^sznmqsaUCS^CX8%1T`|qJ1G?at(UvkXJ@f52{>L3C3CNZwy z54IJt-16A8@7X^8Yk0S@_g)vQL_FQ^;+l>BV;n$wPG`0_vvBufige|mZ zcr3z-axqQ<(n1qsj|)*#o=+ux;f;A#S(W+rNQsa)!_)Hn&}i$Hye=Q4ci=GHUu)0r zv1;@D)wv`_4R}Li>nl8|^JDL&7>CT4vr@c5^{#J1QtJ83(UI%@MLrQ@6ON}ItP9*bt7Z)<8vfm{vV>~}M5FBy)*LKh`s_7SK}PHsG5{kG zZD+{M+qVnG=opg1;mC1bfy*?SsX z^YBqo!@0M;Wur)$I?D7DcjCbbw4{9uy@!Eq5`V-A9z+Bo{bfXPYUy>_E|Crh|B<4> zGJs+FGYADG2C+dwUsR)`F-|&8G^{abI4G!73SsZkXn2>P?NGK$`ZdE6SAk1Ah*jv- zN#wX?3~~D9atSr50qOi1)cJpU{T!v^nF(@+FuF=5$Fa+|)6;?L=l`wsy}|TvgK&eg z#5F!5e?##~2JD1-1BHnriz9S|$I^Km2CjK+Co_A%5*dzr-J;&EVWmlNZh7Zc)V|JI zAE=j&x;ERWd2U!&tA6NCsU4$D zyr@;f(EKpnNJN*{sy&|6+m`?2Es`I#<_S6s%s3<w5ey|1;2}MELn?)Zcl{-^r7~ z)-Zaq(mW=-l9QilS4J+Tk;KOh&f_+8kW4= zOY1TW5nBvZMs$gs--+ho!amiY0Y05hq>tQO*9HLqbGzK}ol8uG2uqZOzk~yo-G;B_ zJK}5U=4e-^j3y$1OAB#VkWD;$1xL*~v}wA1 zY#3~E)Kpz6hnaaYGXahgxdD?=p?FfWw?qcHG%q#A{vA!P#}e2k5r?N}gMTJ|_si*1 zY03+%JvM1+_Wn{oweOZR@+5N^%It%;cb zuxWj`w27$x4SCSmAyyuX*aqP2-s?J<+yb5}+V*|A2gmEx~)VL_lsK z8H1+h5r(Qf4`fijG35o4Lnt9n&N31QdsaSKH0+a++(X}5^Lwxqma=W{cra5X0FnNf z=?pE4J<0q%GAoPIElJxQ3sa5n&1k%Tx@7vpM)sT)V;ZWBw(GGg95Sit7IuqDZ+NC8*EuO@ zWGtusYL6%+>@5gq_{^qpuVDvJ4(T@*0l!IalWxGyS+W>eA&$Lmo1_gdA(v|jdo2}T zzh8`@yhU3g2c`CibnU%QNH9^V4TS$1fg|Y|AlE}sAQZ`9BPIws)Pl zB47JNxe;~?$BqDUH32Xq4*(c@qknhkgsbl^D+ztwm>GQR_#I)wdh*OilC?6Yhr6+T z><~rp*4T8+dh+g0`72fD&AWnD&(m$Pxt7jc|4W#mCfksF#^pta&eimy_79EMYmAMkMr~`o?dUB*7rZ%!qZms zbS*#ig=yJacm2az>Z)(=Lwr4+-9XFZ3gy}5^6dQdvjsSVsj2epyXj|_OS#GN?7H+b zT`o_a{ZIN?la%YbmS=0z&vZE@&;Fc#woc0Jl4pNOKhxz}dG@a-|Jd~g|9-^3wft-6 zpDQan>zMz!J%e6feRmJ_TKMMyzCV;U+$e7||8w)i?aq=v`i=g}ANkb}-R^AYwF2tj zL;d1^vYm3Loi87?9p|G*_D7!ReoBApopx^iXWAKf9?xUd=juIdd4UskzhJQBA!V3v z?=Z;&#(uI@qBN2`Ku4Z`vJ`{)Ffjx~`iit{C+1E>Kt11pnrL8VI1x;-hR=3C$4&%$ggoI9lQqGrx&#aV!(xN2G zgXp!qvK8x?_T0tAsY6U~d7?+D9f^!MhU8M$7fN1;i$x5lJyG(IOPeE2N0GqYsBBJQ z=tARbgt5a*+#Wp<*h`rw7g8s2T{rD&(s8%Rz*JT%XV;*;+IcrbwxuO0uc9jVM)Wj# zzZxw6Soza|@{fPv{&?jdCmuuoan+~GKQuh&m=sh-Y$%R=m7MkZ+|!UA%8@TM;0#B; z(2`?pqR%dm!tM``qL}#Tx`I-88>9RT*49&bp zaY~W?r>xc!x}4I(Oz*B4R8*JimPo<-d@Wx9e@s3vtp~*)q{kO6;GupW?(EFvTBvBv zbRR=uJ8->7?9|kH(XKOp*LwN-r{n$+>*btJuOsV4JerWIY+6F(#{mLQy`S#F49>SG=#igtSo2gAQKP0bH~J*XBv`~ge})`X!N z4By{Y0BwsZSOW)S_GCgp4Iv><^IQ2?KkZPDnQHIcdy1>;w+ zf3D<%o$?ML)I3gbc?1RgK;Yfv0hj0xLf=Au^ELRI`;>;mPktaqXQt|!r}exbW-HgB zo6OU>ckMC_hR)_wC$Yh>I|v)mUhZ*ep*XqQQ^&46SYI6b7Og zZ@m{(=l$!}WY;-b9G63Z>M{qGv_iHDk`_pFg&tuD(i1 zme-%AtVU(cS9&rrUgP@|E#KAgvJ&c(_d!~8SBX^kNj!sc<8Gnw;}xFs^pA+yQqlGt zW(hsr$pcI=Gs0Io;i$Gm5;?v*#M8mviE>Ys|9PzBmi|0bb^*A`Ld8b9It@$yU3{NvJHSnmDrp{kr`kD2q_Do|lk#>JR7AJf z#dda4tJZ(4#V zhnbPDFScfTQ)1ED!WdrO7$F9_#i#rh5kWgX<;%E6KrwzWm1a75M5aYw%XFz6=wY(1 zWGg8+NejCPy_-jlcZ9DU@yl6h?+Hluig^Ui2n<2R1KoKi{nka?!oc>R`Up@*8avMO zwfqYh5NX_nh3O)$QtYZ&cFLTw+z~>Epqxp2^9&|!i+XZwJZayqr;QL}ON(pO%;^M_ zt7a~6$6+&i&$i?(4y2bBtEnH2(KeJ4Q`v6TwaO*^R;W@kgkN^O4tI9?U!kETBHsn5 z^F(*oSqPQA@^iK7h8v!9Hr3DY=?6%aL^}-KXD=;?yr1YAP6T2%kD3}sF@(ou(g%Em zHfKa`S>Otvz{1Y`4m2h=p>w%Oew$CPSil)jQ2$LpTE8Xx{;c||-1ql;0^2!lY7C2a zff&My>>M*%MEtmOgT;FdR5iRcRNDhS7xt$r4~VOKP&EKxZ+N5zZuCxiwq!AwA);*~ z5)c?;w|DaQL1Y%kQjdvTpmKPiMMfk2C7~Si5FE4`^Y|i1Qcz94^%Gg3e&Kewz2Lt< z`yGyI!ZDKltn*Bak+s!qo;<+D)?-(G6Whs*iSB2}^!_8daZw~!vFd{MEna(ZJ`|m7 z5vL{|O+H;t|Cwm~bZ2d`=Hz2o?I|U#Hfv&@TH3Dd&M{!n{?+RQsyc`19?4`+NOcw^h$N^zr7*FY37pEXfAh86C!b7`?Bsh~kYSa0w-R`o zICGa_T~OLux)W<#u`WPx)MxLDEy!wn-{W3}@r3`A(3zMRgl;zG1+BiB?G$luJH5KM z!rs?kD*Sr=*T8<$Sv8=u7#1MX$+B`pjO{_Lj7=og-dJZ4VvdB9ZD``W{%yYKTuwbK zJL=RsFKQ^H$uk@P0zF+%rs#jts_z4|7TO&ljm7d0h*t&GbNi19UY{|W2&&O994CbD z$puu^eG=wcLW5ls7qg2R`!x(95UH~ZZSl1z0jFPsSe%zMh+E~E-sOO)p4|Oi*T%j= zn@o>ygD1L~;^&;vVaVtRGP)=78b<0G03fwrqntt=lEM1gbLTLUsR`7lH0( z9dm?{l9eDjUZw>>fx2vq1|6nr!l8S_FN0~hvmg6Y`u^1X^rq$qlN6bsi60+ze)3|T z-!g1W!N0TVI45Z7%fF&uJu*Rv8PK8}MEb`B$;61csg94LNz7L6A_rM5PjLalXd;Xl zFlJ$Bf(^+}|thZ~@U|Sq>kU-$&QUF}WiByMtY5QQr+|mwl#0Vr#-yNIQVGl3E zQt0#Su1h0CkksZl2jGR=9jDLlF4uU9iIi8DBtYKoA*WF&N!CWM<&(e~vpmcTE<}+{ zdNRa8ltIr^&zhYgJsGSqZMoF-!l3!kn-OY>D%p&%=efnJe)!j;&Vw)JxfEqoP`%%F zeA57-l&gk~kiA)3FT^|xsqc=Hv}O{r&^ncGI_kX6>>Sr-zhu&MU>3>OVAptxPQn+X zXw-oZtVMk(af*8*T&l@4W-?m$=Na4b(W6NWw0tuH-fLP#$`FL|aMF#HLibfjj!zWz zh?-Bc_lTz8Oz5oUb}8B%m%o^=D~z8gX_p3T)vVtE<54lp;|J#exF(R0@{l}`)uY%3 zsDZH+zlKg3XsnSMANfJCiqKy7>{?`atn(C|jLMJ{x*rT2pXAncd`iHRMfxQJwjHR_!ElX+sBif*2BGw|^#P`{YCDx7W`NCLvoGMzo5d1w%tR&4v-9zB|27CGBvgJc4j&}1xTG8qf6VOMS z*bH{k{roX&Ya13Vnd&;@)4rt3vU;V#Bg|n^-Qf^=QY?K)JhY?vAe^?#cc*ZgL2cwJ?2y5&M+znXEQAMO@h=M3MT! zn|u%MohY@L?UK}+%&+Ng#B`jSfOqi{1gx6zDL0HyxnX?DIqBek%Jbw$W?GA5MSTp( zwpi=#tMW7o7&+~6x1#X{WC8tW7uq*X_V4ty{7$}s3%6j4oSFWehA|7DI+%Qai5fD` zCI)bZ|F*B?ZfT^V5JT!CrXy7gHz}RA-cWy(96xmGJ^hWQMkvYWW%fcNv4fxDR5}nk z8$xwy!bUjZA8yLtP0G~6OP&$MNNUm$%Lm4RamlCiO zqn0d8!*0pK^IOw~>zpUXgfks{?0G>Ihf#b&u8*-h4FS$3sWNo%u~brU*wXt2bqG*) z1oTp6GJ=n7J0kelEfWp&k_2!Ae*G}eXQm+3`K_F-f>8RrEEf8zKfKz441~E{uK&If zoj50x+8bR(4rdI z;dYoEZnmKDpdBt&y$jwAq9`GI6bxn8XvfG-hiwJ|Py=HEyB15b)HDz-XX76YJ@uTJ~N z#PvFfw3dKee?=zt54V5Ki^6Fvc5k8mQ!?AfXd*dG-tmQfoBpruOMk)g8L*i+mfYGf z_I5!DcBLZz`hjxHv&P8|4w{CjpnIk5IWD%`h9+=oic^D8H5Ll#4w{a znwzPjxe?nKA!fI{49YELXBASUZ1Ip3h`i3VpU}g2!WqV(jdQnoZ5rjYjEs z9kia45l0Z&fQ}+)G%^y7Myq7@_JuG_z07M>X-7=<5B=D&ERG}pmA#GQ-ncG+y&3c!RA6l#^tYWwd^mG@Lx9Tx z-YK=51N=>{|Dgk1SlqIkh5&8q`2MsAELY<)B@G;kcnhbM+ZR@Vr+XtB!w+O*ZF~>{&XK^y`vII?zYFE7HniX-jhHj7KJi^eky)))f0S z$st`M0W!Wag#^;!L~L%cTI|it9z9pS>|~F2s-YA-GJACDoz5PO`MsA0;bNe4$kP@c zX33YZwO6|XL;CHlHcB2>ea|m?pi(vR3 zohT-%;dAMUZJT5k2?UJ^5$(duw<6Y6ZJ35}tc*&#Z950=fE7aj#Qw2XRqRgT&uQ2f z?@8T^tyMou-w>E%O31x<(I#jWN1>rl?*G^I@2i_60O6)3&{YGJiROH(OR3z6g(wK` z*bjVPt_|feL?Gay><7N_>AKA$^r7c|dL1@Ctq*-EF*)mqG2odM**htO85h>iBt#=E zn%?(Pe>7%`s4B8t2h2DDmy`09qwJhfm7Z{(0E8`k<aU)OrOt!R@(Ce(2>hS5;hMK~I)7}wx!+v|q> zyF$H9YC_tT*2mHKiACEY?*_Rl5_qO6=BK47FM~usC zzPQY0aU)&<|Cs;pg~Y2!xiV&WqzZnT5NkE|{jzZyqF}j}{p<@h3egqthQt1S@b7~N zpqCwKkCC2ckY122|I2P+4voI)92zgnTrQt%{LZcAlZ{FA^KC4Mez)_H^O9p7>6Ph{ z{Toq+#VZPE%w<1y7M5oA^OO0@Q9awye=P2cv`buofro_tUImDDYFmN;qFLhZkS!LR zZv4~_ghre8yV{VWSPKdU%D>2;2;JCkf~w^k)3zocLF3kSEo`DpT*R&l`(TG0ZEI)YDn(j#XllF#*;IZcGFh_vSs6zld@3R^3B zVsm<|6}?tv!YBrE>eS9vq7~@ib#q)=v~S5>V z>Ui@b`ZC`97{3CZc=O}V%jQbYS}s3L&N|ROe$aNZ+X#I1uAgsBUkCYZqNUyVGi|@E z0~cue3>MrYGiQ>vqCEj|e()R45}7}*1c~*a!!4=vS58Rdu6rG+ zETPnu{>rOTg}zCl1?o~==t@&4_FM~vBb8Tj%pH*^c9N8w89VRbcg`-WFH%4Q;7aIpiLgZ&-3| zW4l)NXJIRsSj!8vA|R9G0p5}BeAxoUf4qhj=JmhoyY1HirRXFhn=d`^L0#J??$mx3 z=rLNH4;x(iY5!K{dhOBVwXMY{IJ%up%rASGNA|FAFSdjiV!g)(R$0it6`Rv*t$@7f zOYdIuPA8;Nyg1TcOcspSi8+Z1O*A@wHmUi~uzJzx5Z}|ggrFW7N6EGGdy3I`TBYt+ z-R)M52UQNdZ)`@cm5seuq_xnRf%4iv-4pUkc;l|q_)3MRxL+lbA|3UwhKE-EZvl^<+$Pa*RYj8AZMXTig)U6RZ$cs#yJCuO z%nb7HO=laJ@dm$z{C3;ZOCoJktQmd&ZQ<9*JkUl1Xn$vJF#$|6A-1S*3bHrrV)xtb zxKMwrsl^_K0x1{EpGr`Is#wKY=KL*vF;+h1YOCtmRaMVhRgYLzk6BfZTUBeVs&!V? zhE-M1SXHf7)n=<|i&eGVs_L++cEzgpV1e9jUrf8wK7LJU^^>8mg+J8VG=~`R*st3D zG>C^eAO^lO(3b%ecN{0oGf;;S&pbmPHZqu|Cv^NOgdKjy#e^(IujhPo#UgZ(CSbPC z8o?Y6b5NNNSb6iPMs~`3V21a$ouY5J?yDHqBhTze~7Nwo?A%F z3yF}ijmoL;1ft4tu)}|R@d+S6sq^VE3XY*gz5JN9e<)*JeOmy!6Zy)xsqg}07M}m& z$hIY`^h3@ukL!Q4Mz)z-B<}+mVDM!gvHZ{#T?fOgtps1ZYn{kpFc-tBCl@4>aB@H> zl9PqyQl!=c3>N2B#B#5|v=OVSzL-bsvXNge%ZYhT40eqnarVZdIeA6f+LYVBW#wnC zfPQnAZV;MVs};OK^-VrPZKOv9^;uAlMlQcO({4#jlP*bw+)2V?u)__H%@V`p9CMD- zGZf@Y77mnNIr3BdnHS|Vjd*F#ovB`Y|w6{S`{eYFnG|h z&?F4ci$qKoByNGSt3A~ zWdsOG-^_zdlH@h&na+WRvN%;PyoXpb48I~DUcTjJyT%(H7R$}M`fm3|%wF>B3K9c% zjl}>bu#+DCP9n^Z#KW`2o;?Bm#CQ~hIBgQOq*gu9AT)fQ-EK~SO<3YN!4xG1WKUgC z-C#Bc$E6n7K~-LAcB99f<%rr33$H%3%_#YJax)DPly=_UrNE7Sd%5kg6LvoD$X3} z`T3OcXa9ZWZ}ATAuW&r=2m6Z~eEF3AjQ#t{-{Kw7UqR%ZIamaqLHO9F$d+MNj(Twu zaYEZ2!KUdi>3Fo1Lwp5xTJF_>f>jm6RtF}ms>s1nB0eBneZ0ajx~WX|hBG!YnqWJD zqEx|+I8}u6?QMujB^0xmrYA4NMqT}wIMoeVvh;IF(p`(JK#jkMj@{&Og{O)ZIeb3R z5(4Af1LH|=gAi&P@#En!n=on)ove$E(FIulyslOM%}eCL+JAUsfzhASdLBnCoM3zz1?yAuzt4yn#}DbK$(A5=#1?!tkv)vCFZH%{ zj%a!(%lG7q^Nbxo#DBvAPJ%ByzcVSzDlJr&Xw1pvB`gJU1+;lOC$tQ69l@{Z$rOGK zR%f{fdF@PlkA!4I+CbdM){hW~tvnMuLHti9*~9xAjLr3^ZINNF1~{q%_ltQTwlVq8 z&M(4kEwOEZO5|YPvLZVoFquw{t~`AHPPBu4k+#!|Hbz?eB8f>WFSR$$3#ung1Mx@- zu(8?o@kk1=?Yae*dS)yBBC|c%;w@e{kZ*%1*kn>L_U|Un`HPjNh;um$`_!T9z-G>- z>m-I5;VAqEd@b|X_fqj0Cq~}I?(ZmD4Opmd+$@&)eXtHSc|!Q>oa-K1i2MOT`YGX2 z0?360k#`eaCq*`58LAJU$R{KNe@n0j3u5BJz9N^-XU_9QH_PpGZ`0K5@Jwu>BU4>r z&Yd7&pYDwj>-kd86=+RR4Q}6qf6r16kgOR_$Oh{RFDFeS z=eG`Q%&aHmu?Rr=<*`DnMX$oVXmuceRdgm7q_2oR!EY?u%3mwGPXFDYpNQw26@5lu z-z?X$$GOJq*&(z|@;EChsiL4CYso#WQ^;-j#m|3!Ho^ToR_tb}u(N1KJlet)bLA3C z#B7I4B;FDsIO5SJ=bgP%S1sBBYaf#e{YCv-mYq?*iTd>&|4MXx*HQv@ykbYCec2Cm zY5RJQT~c&dw{hSv1L{twmt=Ux+CnG%eZ^j%s(YdRtaQMA*d9*MBwx#)JRqA*={oB-sOBsBn*sjH$PO6!oe@#wd?1m7iBK=hkjThSnY<*tg~_UHosy6lte^P2zQ zx(eCx`|{U%=rJi8TP1(jJi=dm4oK4{4FqeF>jlbWXOlZME0<5}l0xYf*t-45yN691 zoZRQc^rwRJQuT^;JsrwEMN&6bsYWav~pZdR7C?yn*`gJ=q#;7@5jUcgNHFC?PZ8ipAtB z86_5ghe7o%N|3COSCZ5qzKjEP4>otvvv?9zCts9BMZxTOF%*Q7q*r5g{R6Bg-1ee( z>taE4K0(!RBmLhDOY}7^FmAMalBKmO^i?QRJteVd0i`3G^YM@5J9^isRbS>kI2nsc zQ)=7DX|iL4QTiG_kZqp9j@pKO`%#=%JFJ3&+`{Y+QWJMq3It7)p?|F=o%g6k&>-oEELW2idA$l{{pon~5 zRX&QeR+q7(k5QLIYkGr#Z!tTCU+)n^RUIW&bzuWu%Nx;m9s{Y)J+hUqlx2A2!fV&7 z(nSsq78uD>%wnodEsAn_5>%gf&7vrYynmRblk32~Q`_AV$}LMW=4FRYYFK8#y!5+z zml+PAd5QVQl3cy+y9(_k`BJjL%*r(x#qo1+iVq{slo+V6JL&n+@FCfXfv+V25*4UD6MZ~K3yz(?|V1GvbuvXH^7&(mshy{s4YKWhwT zjgy6r&ug8>UcZ4Ck*!&D*ow)Q?btK?HT}`OSfdd{BZesDAm3a?8i_Xi%hgw3U9?{C z=|HEx5y`a?NfRP+?&if zX6t8Uj+CWo#{{&*`7%$fs=SDPoo|j6`=J(INA%%TP+{piIbm2!MLWzHlW~;!_ZVAb z-)&zcm0r`ca;CDYN+uedeT8z-u8?~V2b1e(%ExuOMLhp>I#2o2n_4MF`W1=gMZ9AU zQIr|#bgEUcky*O{@6pg4XSrnQDn}P z`tL!A%9b}pKYjCNwl#fi>uQz;((33m-mcO!zdHIQeSJTFZN0--gH(b(lbQJ8H8)Pro*F%_^4a91rHVh%@?3x=OTa`Gdt_ z!ta>&@@gZkqj5X#Mz|TsZ4eh76^ZfX9(u!>Y_grq_u3;%M>oF%2rfBqw4Gg=a|VMc zFU_$CDyR7x&&mdZG2QpI9}^dm5YOa&A5%#`X2=T4@A~Qx4|z11my`KL@liPiFT@!$ z#S3w!J>zn#^75`TVlzBw_Q*%Od>BrJy?MD*;X4{Re||J>YVCvXndZ=9b%!(bfQKC5OK< z_|cOUX`Og<6j^qxRx{<@0HeQug+ui3tYft_WdFc0#)?lGq^&FTnKYOMx;iqbKo=$I z(V+We^cWCH_uZM#^m_3e9T?v_-UbKH*VrN8QE;rrj)X^Z_Z~K?e*Q@GGw?T(@!o6w`P;7_zSyYb>C_UHq54VyOru`Cim~)XGVUy|BtqJfsdj(8~-;Xzyg7d5+y*8 z2vJdDjRp~nmw*nSxUc~Uwu-l^-NqZ2U7)s+;AS<;ur;-4u_B_P#Y>U5ilTxNKoS%Q zC@Lx{D%BH{YEXorDf|CE=ge+40o3>Re*XPbGCOnT%(*=0xnF<;o&4ktv_6?KWwOOl z@W-c8^?147DVeUU6TYGMoveo^{1zjT42_PIj(u|r{(v*aia(&I;-Ah_drK=*E|L9j z|C6+fLHb+eUnE?1aEGqqaMMf(4rRZ+8%Ui)oYvlmR4JlhEG3Gnbv>cg5v!Jff6oQ< zf+u*5wO!s3^-OEysEibXNo!a?vwCBkXL`NnHqK{G==Uf)BnH)Hv;!2{%2QjH!Zx6ZYqlrl zQ(kv4IX91nwJY2<<0cyiJ@OVzo}ixkRSJgaNzV$?nT~d%c-RFUgCnU%xP{fuhxQYm zc$aQ-`Uu0AZsAUlJ9cmwIYr8b_{c@`eJ;OK(XD9>LGo z?GzuQ`s*FCGk@&p3jW@nlNGh{q#RYh-vE^b{>wBIpq=fO_|%So?8y=|nbyM8nY&qMET*>n{hsOv^GwQqfp&m#UTHYVJYN^_zgVt>4sX7HW$lUTO~_x^4L3 zOQaWXrh4E}#J#eux~g5Rx|1HDzw@l7N-LMKQKUWHo|9>hNw+VveDQAY; z$_7$>Y@FV!^hSS?n`{v~_=h*NNfc9nO)0G*DeAGFnCA><(9UyDb4u|Hv!gs=VfxF< z@=$3UU~H^A#pZ{hjwIh)EI34JujTth=S4*=QPE0dTqWlV4Oti2y80U+yS9~$=ljf? z%gdTvY+m4WLXQ^tRQ_s~oI2G~fn`4R)+1I0U_(`Gy<7{ZR9#~&l}R;>Wv4l;Rr(byL~6K|J>w+4RiSsLI)vUq_Nw_|*`oP+iz;Ab^%j+v#i*bt z+vExVi#bcF#7s${L8-*|M(9$BSC34TO7v9xnKrBeJ?~PTA9*KMFFD4f6N#rI@dlva znx+*J;V@6|dl361b#vVIm^{Ea65L#4ZIz)SEL%I&`Xxu9d<=MMtXiO){Nb7P5&1jQ zeI!>{*{Kk&uszfZ_tr_aL1=QV&fQUz+2DiZ+f#qRyA6M>0}>EqGyRu9u?-zseJ6BC z`lrY4GKx`b_Au;^Y&p5nqE;>2PKx(*>cd^aIxyLZ$D>nW`oY=rtlYD$ChYQp_LAyQ zzRd%=OkUXAi}b>FW_{x|D2InQezT4zv#Olf-uMH`k+aCQ%0Xk-cdOoG*2WqL(lu*; z`AK`&x7kbiO45ni%%4erRem2X@bmFdR$p;lYw!N|7U7abwWOV#) z8kWvrvyiC!c(45Sj`ScioHwN@>aC3w$!^V%d2oMCw0Pj}M3{3&9 z$nxlA_<24RBU6yw!+$cz8xhI^|MkliTJy9zp)1I*2Y@8~N|GAdV~RcR?V}`ROA(X= zs7aaWi3MxbfIBq+H;@{t{B{gEm&(`z<1{R0#9{HmTV)s!8-_7R4~v)O5PSDzY$Ht+t@ow>uvvm`}dozF5JG_V5@E8jS zSQ8Ho0*dK(?KSd6l+^Mm>d~GAO}t=;^f)FPiCS*^x06yq_4@8)Z5XJypLbaj{U{o( zrGaYrCmnB5+n>#ZEMNJo&Il>i@NflBsek%pQw#w}|B8m67O=nHj5Iav|EC|u>-xkq1! z29mZu_1%k~qhgXzsAa!;6OV^f&t2Dn*kZXWpPstdg(gaxp=#hyY^5x;)?}&=Pu1Cx z#9*kGQT?#_yIB1xf<5&si3ic}66ry`lq0%MxmNuer>dK92uKMLXJ;JxoYyI}4o&HbXPC4Y; zpS_mmYB=)UVZACwtRbkMDf zU6=FUd;I5PPZH-(0+^HK6Rfk5vPz*4lQN9`g)4QhOHA^@nV}e>XAO#j-AhX_2L;7|aejdNKJIBkWuGuFD4Om#lD+R2( z6pL1Wn+~1wE|PlCRn&uK;YrlsT}Drkjm{!bJa$lA4i@1uvX&vDd|GDM<@ob6*GUh{ z)JKD4Hy1LNX!r`*cXi{hvs{>GO=7f=(B+Cpiphh1SmSHecqT&JtB!l<4wK>C#%lj%50$C$`cZcDN>1B6OY$4KOqGghxRA zZ1;Y{V`R7IF~t5zGl3kuC7ZD8c6o@-d%)SUjp6TD3!HE={kJh$Y>*MkN>GIfB-YJi*tSU+11~43VoTPUhbs)ikkv2Fz(XNA@@;H5Gj9t0P!#Biwcd1H2$H(S z_AYJsmuyDhXiyG9xyvUk6$fzvLYuX~4z94Z1+1jl$J2G-P@o>3E2i0W-b_Zi_k@dO#Xv6)>w~i>z86Kuu@@fy(}00!=zUDer(W*O z)=sLjYfC#$P`|o_{l>ixit=o16GG80SD+&-V?)1C*-l9Xt_|KA$7LNaI8NqGtsv=k zy>P8l(NCFve@nkkSAM!`4?RO?wL(vYy6?$M5q3I8r{;h%_OW>?#I4e-h_zI`Ig_R` zRe<0WX|CzF*+j?l)@X(_7iN!~20km?-^Wwh$xGV*tbFxWPl&mbG^ z!?X5NzOF;Gl}m$?bej2T%9_yD3M}Sw~M;al;NSv57>dj1HE&iobA&#H%13PlYH1=uzE$ z;+ukbI0>f!k&;&LMtScjMhLMaHb<_&OEOBbH#&WeN*_FmAZuK`(x3~UB*;&Bocw4y zHlvSV5Bm00r05qH**!pI9r4m?7)a()oPZDD5#YBINOpTfvh*Sx6(iJXoomEXyTk>41Ep^H^kH+pP@g3F}%y- zFV|S@sC3w^Aw8C_Gm6X{l+yrQ>M zI0t0eq80zI;O1RYqV7H;#RV!4uFzP1?Ehm|p65q*vOO@y8Tk#O0$;GU!Ecu>3Z0KC z$v-Et(5+;D&Y|TjlTPSQoDq%DTFs`L`x5Ok!ZC_lS;6@fj}hndK1bpZ~}xAp^#Lv)7^QlC_jC znJ{rOhX105v=UaWjl(x8QR%3Bw%ct#I2%BTj)kFqPm|RJ8?9%^yO6$3X~{+orYIE+ zv3-)O=mjbE>poR?i~#upLgoy0QMde#36jTK^O|$Bc>0FJtOn!<=iy>ajA2$Ckj^{W zoQLa%I_E*d?1{~r;KNp^TLyr=y(>VP*Ks9`>uZMU3XL*nqT#65W2HDS*Q#qS6k@L5 z|6;$uJOy@TCMjCV2{#J7zpe&1e}<0)0o#Z7CoeA~SNZ}^MYXhkL;ZLEXJDwMdOmxu zbaJA5!jJM4kYT+jLS;^%7*gtJ%|I3klifsVUCo&K)GBj(4}rSy4XYh?#0)==;p<>@ z{G-lHUV?#4L6+dgFhYV@G-3u z84>!3sXTx})qr<~&{9Qy+Z~0_( z3%#?;Ml9Vxmu3bM?WqaW3QeF^s1t7!I<(NfS7h`NxSb;Au84GSOcd@U5%!gv<9wH% zKO^C32BXw{H8zXk&g(ikq#)7wJ?}xrg6wDlI*61do}wE@7YBka$Nt*5O3-9Attk&=p}dWl>?(ij1~M z3t=(rY2^ki)QmxL;6)r2zbms31j5AX>%SF{kBeM8@iqh~|JeqpC-(p*JHmo;3bv?C z$c=5JtX14_4(hpkHLGmcvY1Pq`*2+>Y4==-IoKY=RcwZfDk=1+bphAv16a~#G`IKE zqj^var0|F4h;8Z))ifemC&aH>HLUgfYrfOpZzJg0H^vuRJIS5Hq+uYmcj^$XH-;s7 z4Lojc(t~XMAWt6P;f|XdkiMWqy)p`X=s~t-2X@D%P>me#SOGVI8trC{qD_+7Y> zvgVVP27YC}gU5BATK=s@kh4zd4Z;az3PG`hRly$i=$yImaUC=_Q3bSOKYvrJXgEX_ z|6ut=YqQIZ-gN_qX?tjGmQU^Z%~yz7+p#}m6+tQ^Ide3e#uzY4Hk#4+HsV{O27N5H zNweZDcQT_jQk_M6(@JyoDL8_D=W){Ynv?AmziytG?tJRYk8}rmNnSoo2TR&@P#G3T zz|g~fU_M)TqPFrJkEI57^nPJxD^|0khMxX~D~E&t9aoHoNHkL!z@Z(h3x$?oe#d)P z^nBUGREZ}q6#^Up>B=3@sn5Sypnhm8Y2Ahm#its^F=27P{fr9|`o_-ksr|naN|WiF z!55o^(ri}MZ{S($eNMf|UoE~0WP0v=1QU5IxLduh8hO2AL+l1Tgj!!CR8tWCms7>P`rm;DNDI4`l zL*WIGmQZ@eXhcTY0$`pBtsv2iFG4E11U01xi&d-c%a>9o70Aazgrxd zbhWDY_n88n9$0@cKO zlL6K-SsLZ4fov1K9w&g@EAdR7^Se3`Mq$J=l;skoC^>I>>K;pbVh%nWCg+<7)kx_WsOBMcqlhpA>8b+tC*UYev-m=?Hsk>fLj!w?LmYooOrf}yS&!bX$*T6VBXO-oDO!76nPt^n~JoRoN` zZo6J~u&Q+jtKvJj_7Ss#%Z9V06_4|s8>+-h2RJWvi9e3#m9!KV_x=gaLaT8PwXX6R zyN#|0~XX|4g=;N>ARvVMLe$4KIZ1rcN zVZj-Kbq8ROZ|JC=;tyDN@mj$Lum^1LLSPjC0?h)>CxfLPj$`l9qX;#33>+6~?uxYE z+#RC3nb-WwHa(Q$UwE6N;ub#4)+VAzxS4?m`Z!;9W=n#52tXihMM^`5GuCpHqGr;B zR2xn*iH$7c44_e#`D^BJ%)bruh^-*Lc;CDB5M^=>4T@&C3I%#Ws^8bv>Jg9apLgc7Erx4hEaPI9X|?b^ys1+yzFkeuC9&@mF)S6E)H~t3qyohOkOC(<%6zhNmzRNO! z9yL}uUAxFo;4QDwKGymtA*z#OEA^7Uq2}S0BK>>9J9)_4a%Scm^}vzBJLhvEw2B}^ zpu3uVTb=MtX!`n6y8{~pE)I_F^dnJt=0}3_MU6Axc-l~UXJhNjeZSYy&cJe(zmfqM znp1RXQc{5kMF9@~^2d9B_GKd(h}xt{$Jb6I)?@H!!7;!rZ zsr!pEUF8)097OIT2_+3mXH1}mMl{msfW392kf|fA!=13U;(7+$BvrA zSa7b^0n|AQEl)l*Prf=GMV*1_ZX%>y!8oWFgvH6|0qS*3iMNV@)b-E|$?Ok=A@PJo zXRd`wfNZ|{7Z3Gh@1N~#Z$QfYOkji6eeq|fj*Krv=T*GzYABG$vrNBRyNJtapz|u$ z*wxTmo=h=MX70;$5i+)aN8h!4!tVLX{mh(?+85{UODPJZ%amW4%iOuKpWI}!8{LKF zaO=C37jUXC)8|&N$(J~EfJvJ2S(9!ht&={@g`C&{e5mEbhtEJPbmVIN+6wd9Mdu_m zo9E>^DiT>V<@#b%%$$tAATb09yN6?C?9*OtW>N%-YS-8p-*Fpn+s`DEiUv5NQ1*nk zatFFpr_SK(#v8zi%~JV)a2DDVev($kN+LPu{~=6z-^ha+Rpk@kVj@lKCGZx5?M3`6 zktS*Jv_7GoC|o>u-5}pKh&5$QsQD<*U6*o)63vV5(dC@y^QXqDx*d;}hCVhKEUNdv z-*?m8Pvr(ok!ZFD@`4uTBf}!I)1uY_pSt{#b%1`lxYXcGlh47@?o1bQJMPLUIj*b< z5zj9g0(*P%#m^AR8ikLm3|}vsW>p%qjdL^||A(r{hC~{OHMX32-uWfI%II~n8;=Z- z?URkc-?`&R8AYZ~wTzGp+)(t6joU4vMy;BeMO*IzbqjwJZX7+Yh#yY>%dqkO=0D*P zzPp@a&^3FSV18Y5{<7E=WKk;l``Vu+H!PV|sC}H`;{OyucBMG}*||<^tx1uxhuT<& zc=u{zNa#78gqn*<7NCJZTTgMMFTV_|Hxx;^0G{d}I0v{TrG)b{ zS6xd=I^?rAHO2$l@7cJS)1|w5QQja6vvHb}YI}I^3E+HuDu6R|BB~9^)7j)x4~}6$ zaOJ~wc;`H;xzgG_&pJ?P{Tr?nZw{#v7741zlt#6bH)V@AiyvHM1e?6mr}`gnj)!-r z+WnbmKq=eUL{0^*Gqi`sW~KZ1kQ!z_5*5L@^(&=RhLi6QL$iyI5WpasM%C>!*{YrD zuXK3T+#h9SuJqh%a#oYaQ`5(_%%}~0j62WZNKvId80X_!GtqIic^~f@9QbfrwW~`| z=>1$?RBwiJY>5W}w?9eZT!Y*35`P77nV(T71*e;jpqGD- z86~hwuR7WKKo1$%8>%;Wo4TDraa#OkJ(!73JIBG@o{C#Vto_BWcTta{f5H2;`s-sP z8u{~d6WZ7A`Hmzl%PhrLztxa6yb%Fp?vzm0~+ z(4#ZTWe4>r|L2q}gg4l&Dsc=0OUXa;4Ob{}0QuZ2(5fYHc+UAHqlPU|h z&d8U%Pu&pl|{X9HrQRGK81L{*R61FWOJjA4jrO`Oz zoauxvRws2~Rr*vRGQYI0^{HJKn%2!QzM|>O5p_U;|6yYS1;c3(2zv;I3L{If(1vxJ zr#%khFg1x?h{Ke4R~VRbSS15m(y2Oah{G8~H8W2Aw``$7!Z_pKI=9fFL9_J*G)Nwh zzrxUaL^+B-ng>8S@uvNMZNs{)8Yb8 zWyrYIW$_XTWijRr9%+o`?m#x_X9y@LE|Gi~a5`gjJt@J**Z*W6{4AharjgLS%yM4yHkS8TbCxzULIzbTUpE74sH?Tf4p=p z{n8^*M>kPDA&7LUrx z)vDX8MbbcW9-IIq_uM4O8O&D58??M`7U;27y&2AQ6?{k@9A9KghWh3zjjTY2JtdPF z&%O1SyRroTNr|0Y)>@Xu+hW$m7q!siUo=>9&49lR%Q}YW@JQ>DH4uN1STemFPuv)1 z00QE`n4xRfrUg*lIX0p}XChWWDn#poGv5Jw1yCdV%vU#ByU@OYj$jki7Qm%!rT~;O;}@o4bsB^QbhuJWozO$!msc`FT^y>v}3aH%t2kip(SVWyNE)`USd#nve5@1$0Z)(qU+= znuP6R$XVRFA#{5dsI$8aYMk51nbZR9(MLqH@*$IC}CxXY8lq6hD zvvrEML;b=$&vyzb)a^IJKMKE@tat|Z9^NM=KIU`qN1EwwcpNZE)l)R8qr<)=A6mN= zO}^)@F^o2JdpgrOk1Jm8G)(LnS|rSqJGE*J6&RxEnID8hBnA6Z5=Mbg=qUceh#|T@*TyhSG`cqEW}tTFJvPGGp$rn{SDrPkRTY|)?Hzs`K2 zTppHHIPB6j7Mv6uVx6#JVh&&NtYO{ThV|Ru*|2`!@K>UluPS)+O0{6DX8n?r*~R(2K~BC^vXQ2fhpII? z!E*;nLW6gwqf7RwQ`tlNEdOwWc15Uf^r_lm!Y1JugNb?vR_01;*F5WcFmW)W()tu} zA2B=<+)Z6_c~9NnpXP$Zn|;cAa)M{t;Zx_ssxoJZ=15~I$kBqkW2vz?;mC4LP`B-2 z`;5LzJXw2{mKv1gm)x^&nJ08oeqJ$(O~dS!2mPA5EZ3i98aK%Dd;CN7G;}z7MWd!2 z$VTGQvG2InAwD@Mp`LpvBQd_~-a7pF>@A=K`B>mQyp$vP+Rx=aS31ndZ;06&p3 zrTU$e3@;u}Vn4QT6&^biO?OeQ?IO$IzOA__=xJr5o!h|A+21fIQxdf)63jdVgedVV zAwcX=BKK;sCoDUp=k->3CY{J#m7;Q7uC2Elc!VE zBQc$hOo#1|@art%a5G@w+^QU5H?d>$#*)l+RPg$WO+hcKDxfg651`P^e-W!L@W6pu zUY`urIY^JT1U+-`wx5uI>P_7fpZ#;4fojy>ZC0%UPkq8JO4O+x!E}IbH}&~y1G*sr zUEMx0G?OM;ecC$?#X4RiQ#GaW@=(eMh*b(WXj-a4wO}8>+DZCoI0lyHi-U#1%s@AR zFQO*S!B!!5lQ_tBPJD$WG3%q6KWDv@uJnU1`nRf{wpH^L8Aeu1E%vAb{9%NF0izawEH=qsDaye^pIjp-cHZ47u*oLT;iO zrY+I$ByVb|w07|4zm*os+-8J-p>vVoPW9k`#DOIk?e4D5$=Rwd-7F_3T|5lk>Mrms z%WXilEy30Bcm>Lkgo*|A{gITeNlFv9ddsgR(!yDp;8bS~kFu@Ym`mGpb)Ha|6YJ+S zFl2UBfe-1X3|Y%l@s@CDt>ytwxLR)ff_~`cTr;T0XVP2q;f)Zcl%VP_aV0lRR^4W5 z;Sn~n_>Vf#>Se}i@OP9nQEyI-mBYTnFOP?l4CV|EW(UrSdb8Dq-*1*eZAE#ZU8z)= z@?2QWT~yv-6p;)z8y-~q&StBx#yuP3wcw_t-rnV&Gz#VvZuC@~#;5dX5Ahh!7OX!$ zgY4a*`csL7n0Yv78`CInUv+BmwEfjBaDIW4LUXX39IqMSY-b$Tns4GJ_*VyKu{-3| z@Ma4g35-$G_M)ViSsLXhWDCrdxxLFgyZ4!3>^t(lc6=~5!z-FPY&R(mS6fz`?dGsJDsg|##KN;K{X zpblA*0Fv}BvE1Zl;&RiYz%Xi;X_;7}70>p6x-3+6xyl$Ri84B?iY`;{nG38>02{Hf}O~cuTz?-+b@wR5iBI(g}eGQdfFXL zJBqrs)BBVjF73;t-L#7h>8h4vopYiH8xNr;ZO+%gb_5LiA^=a0`!G z+2S;k$Ktc@qFe&?;!P&HBX+{AswgLiNTmHoWHXqstNusCz~N=to{HXpu+B+Q@C%o8 z&%4I#zl$F1VD?YRzCRVRGBfMv6stpjBBO-ZNhQh3(8GQnTJQE$od16t;3x@PJJ|%T z4UoV!_!cW0JkW}>hF;9R1)J-aix3}d)(Jj-O(W9%9YSFt3VIuhaD)8GU>0n1CKe@hNn+QC*eaC;&Nt39+1#MJj1c zKO6IGOwND3lmfNA**Hxf@kk_9KsX%AH|NH|bQ)FLBf!%e_@0CBBHqn{rvFd-CD@Ne z=BUZ}BZx#J!gQai#v%x3AlPhm z>3=q(z|GN-EII1&uLQ5D@u#d6Fb==28)c}w&Fy7x8AS4|z&44byedNd0mBWe4@dE8 znUd&Jajv9K)!Ycd9HR+1)&xz!JB4NwP})bHe!$bVoCa)bAMKZvqe**?x=Z?mm)IX% z(Qux;^SJcLk!sR<=-F9WF8^a<6%^-`wLZxW0!PGr`-I$sg~ zZxwh@n??Aupn+e;fIYp<%sswt*)o!;KZ_E3sMM3qT8g)Z!QXM*LrhF~iC(H~^=88n zmg)-Gq-S{AeyM^Z<;lJB9^AAS*1#MXVy84?6Y*|frI3JId7EK)s{{6ix9Lk1b9+GR zWx>)xW5QR#Y_)PY!ED*pYgo0zBJW=iiTM9J?Fg@DA%*`SrAnOV8lLJ2iN~doT$ZZz ztIaq96u^Wn`B>l=wg;T;R!8sD)YfyAAhB4gDFl$G564-&!s?>bk+|!n!aM5Nw5KJ~ zdj-EhM9*!sR=JdyE+bZsFqEozBGQqBmtQ_@(V9&4^2__7m+dO1&nI-el%+AQH|Yg^e5s(#=FOxu&qH{JSz+Qro=r z5u-)u)p;+I97c}d>zQynF-{{lK~}VuI&eDf4brV$N9-Co734#)mGWtIQiB<>&dIrG zXx!vY0aczx!nynlS?$|Kb7(Y*`k63E?(zd@eNN|0(6Zmpwfu=fKT-LbQIf@7@QBe6 zGqj}CL!gO--7@A!@qQ(7lU(CU8_tk>cTX@LKik-k5`5_O%~P)7ZQU#56ba}>p8C{p zdEZ%6$HMKYSRqF`DwB@t4$-%|p`qSJTd$KzFeaT>U5(JN{7FV>UZNw zM{zL7r>mOQT%)3(X}F&Ohvk8c)i%7nt2v&j8)he=8*PaCcAYcFq3C&U->YfCwz&>BIY!BWOld;qr&;?J1;=%FjbeaR>sM@HrZ6I zCzKgmDZ6XeIcGurXDh?fx?4S{B?Ya6k}c9N1+}k>*;~m+cDQYg!%M$w*(eP=35BxW zFwrR|&Yzm4zv^u82Md!9U;o4aSP89=j-@*7{*~Nr{~3va#_8S>@Ik_j#I2e>5>EtA zSh6lfy&0gM;vd=|7M3dXa{FB= zu_exaHy;!CfeVwiL_d3pX9g!kr>2#thPmWz5tCuy7=*mJpSoNvsdEpwTxsN-_)74C z+LUO~lNg{Aq`|o^7k)Gq!YA2Lw@ftip&fcr#MQ4v-FMhmFt}Fyt@V{_o-^xMp+q`RlOpe5C_h8hk!ZaADUv>u$ z8t?MNY(`Y0KDG4g*EBTS9?1&hq!Nxghd-F1p1Zz*D3Kn4vkXEYqfibxRCXOC^dJt~ z$8T@Yg)9U?$Dv!`y1tJbNR2==UUJ;=iD_WxvUfQ<_iRsR=YsfxWT-Umv(fz?(!4jx z<%QNI&gCH#>M>#!W1WPm>T}wBS{(fK2_0yRKbsx!TlJsU2#hzw#x&_uFJO%@UvTVW ztvxMI^z?H>IO7Wj7*8=bEAd(z?YY*U+g1iC9svTZJ|$)sCm%r$d6%~Altfp!Rmunn z9D|m$@GcCB+n$|?y_>Rt=&U1UWIusNh)}qw)!sP$e9`TAD()t-M-qUlekY3eot+9p zWFmmISEf%LGg{8AI5{eKp*VX2ZR=@|%yl-*6aE~;K+0$}n%W(QQ&uxvQC61^EA~|U zAY+^w&pg>%*X(Ey&s$|~0?YdB{?AeIvs)pjN^7MCV^%Z~~h2kyhZ zAuc*`#)`30c@w=DjNc2cBumL;RolSJNp_N2o1t0m0)f(gx*v(i!6riXBr)UZ-6v~4 zT{eflJXl!P68K2$Oynq!4OKrhq8{Ih5y`QZybe}Ke&tNDcCo&8YMT|7{CwK$Oz$3H zeJ;H|I*N3uj@b!4W3*_3F<(>H#l-?fC*m-x)9r6o?Sk* zfT+5nqDre5YlcsSgPeYPM|-G==hfl2(F@=^TKdw6G}{Ft&2R;}@dt0jaI+|a#BvQ} z4g@lB{#=o8{v;`|dZoA6|8@}qfVbT|OI2E1=UMfY);8PPjrbD@Zm+R+$SW%MIb^?7 zCt~t0JY5W z)ap{kK~}$6)L<*Bu`-X&aJgnu9U!wO7kaHQ^zD~@E1;%pJQ9GV`m2OS9I{lUDQ2;7 z(wEhWOxdAIW6NU{ZVi$Yx>il$hy4Bbzwp*KA`u1|33OWo^iI$7sUJu3U8`Axu2#~D zU;K;E)*DQHK4y!%D8a(wFe+MFuUm?OFQ7%JY*9zMIxv{OT>~fZZ}&j|Lm}A8bT)); z(5*i$-lJc@0D(MoTp3##{Apk_=wo{KI03=OgzVRgw6RwXg7(k+D~TUoVNkC6UHlWG zJ{`PZyS!b$D|9O>w4U7blzuN_<#M2}{lh>O5U5eHT>;srTJ%$fKFp_JC%lweDd z!y{m=Aa3~%pU`1+CuJ?vU6~^X9j^lC_$?ivkKZ+|);wV9{9_%MdJg$lAHUW5_^pxS z7hH>MU3f5Jt?DcG3VE}%!+wn9UH&ToMu_5b>R^jpPL|8>xRk$tT!9B6xH|!D{vSHR zn&{x27Mze(*H^UTv_m(weQ!vTa14});t-oo<3!I3zaj7AuCb9xJF$@)yGUfpR@9^= zlS4nI&Fo#8=G0>L31x_qdOZ8=CdmURCnbF$mK^HRbguy*0Ex9})H(XDV4qZLTgDAz z-j4ppz5m0$9}fJ0vqMag=Y^3yqT^B`-t82}%k=N&R60@hm*M)SBS5ZrHj8vYhZ?#) z&!-;A+e*J@?H+9H;sg~o(eVNXkW@L(G}y(+BiSqL;C6e;j=~`BAveSJkkG>Zb-KOY z{zJyx&r{^aG`Ew93C9Ul`V6^ynD4|A9sffi2x=b1zeOaFZEc>6YqUD!edt|N6k*od z721%~w#E~TO}sqMq7yZ5<(Of${z8gmCT$U+J5(NzJXi@JqQ%I>Ns%iZ@499_S5lbC zh9ePE^{#`IGZKJpjdVGJppsBrbWy#=zAn;n#Rbwyt(yI7$t~UC*V+&o(W#{6=?U`G z$`TgTWD$nb`|oC^)MkVXBI%OhMaiwId zCLTdXS_gg_Z?aa)?`XK3f7@iOzLXnnvsOz_5@HvP>d7W&t(NakR)M=^V8f^kYnK6E_b#MuHrqk9}g=JIh9#Ace=b$`%EnxQA@fY)(|t z7L6TXw#Yt@AYg`J7RQdtfc^P$Oby7)M7}?D18m-o(hidWyNCBdTsjE={*5cM)cBS1 z7WH$G0JNHGqB>hG7u68?J$a&9o}dGLQp^Wf*!#yf#_C@cP(R!NPHQ`Wr`NX*ASW?^ zV-Fd?hFGuo0ABnuc>sT80PN4k@B<7-=V+IU_Bq-OmY`jYt8I?<6tj_{WfGhc2i%qZ zG$dF#LIzx&!_Z?wo0a}F$EhQPEt_FYROp)PTe1ySH$+Nk}}ePj;qdK+RjFZ zrcNIkvpcd4kBgdn6s$w8O^e)@sgP`Pv}6IEBMj9hAAW0>O7 zlenz!UafkNcHG?XJYS6=0w*Z6)S;%7BC$!7mZ+8s>SFuWr=sv)A{2kv#ke{T8;j>{ zoEME;>9#jszVWX2K|U}|Qp>GiU;L*owVj?^L4xt(14BV{7`qN@D@Uf->o#^ss~HJq zCVAV)bompxSbND`>=wPj#pzC^dBbpNdhP}WlIeM-&R^jZSiy_XQCZk2QoZWIOSv0a zQzZXJGvwd!82&Z-j6=feQA^2F*3YOkKK5loPUP0%G+0hkksY<~Tl0XxasCH#SSFpL zBmaRVDK+|KnUq#(neL;}OXyKDwrGN_7XDAK#8*5O#|c|tjQ!17p0J0XFw$_*YRRdR z{>BXf$gs!e*^z}qSSwHcL3u&X%}z0vm*|MJNI08sM59^queLb&R26lx>@_lKUY~5| z&#hj7>>Ss=f4l8yboMTJDk}D7!doIMTliO1ZaA9af%*=XBZ32DJ|wM^*aK@()Y=fS zmN*_k33nj)7}`wP>N(0n2Hq{d91AVJjOJI9`LkD|-F05Yt#33*jX=q;OJ-e^A06y2 z_@j^YTya2q8I|;FD%T zb+4dxBzzA4s@O%Ko2Xn8d#P{d$Tb;Gv?4L8TSdZo`X-cah;DhIwA6~>$b=?N4!~)N!gOff^1bz`>wP%4aKkS zu0Oz}P$07Ly~W^DSy^MwvGu{R-|%ONcd_8q32SgsUMY|ZzIw8kK%%iJs4@+(zhG81k&wzBk`rY^@r2TpiDpyUkPh|NYlT9{IjsSn0ZYAcsu5Ni zI8)d0H;E>{&_|;{QGw|b<_uR)K&)(8Ksd&GxEHv9bUo&OJ^F%hH2Bn&s2eW+7T$9q z+(KBU{8DdmTrXSnVm5z07rstL&onzKm?Li6nzTATdAq4Z{p|@o{en$}pLp)AF6|%@ z($9X4{HX0`YS<(HtM!0?(4W#1Zo4SAUlU&xXUX)^sQ1X)CW|tjze$VoNblA~k!hJJ z`1{BXN(lNOy$wk%8D$MT06cUZvPyvcFuH@XpEkzHvsfD&f_TjW5sGPB3G z4&XrQ#j$XhySD*4;~zA|d6YrE{(uzzOg zbuYz-F1v7)8GQ9OUG~367{-?=uw5$eKZ$MlpCxUl<9`vdLB%e~ac}yYLw~}n)vE6s z6R+JSuN^w&-!fHM^AE?gnewl2Jd_Hi0*I|E=P!95`zFE4+{3H(YQ|fRc|#c zcfK57zN*KQp=abn65A#CLDhgBKvmZ=HvboBAoP-(G0jgyWuxu4=CBwOwi#ve_>xC- z=zyeCwQcdHSWRca6(app$WiKCEk7RZZw zThtG)IToVoC%MpJvYGxK{o-7}puaihtjTOTJe9h*uShE5i5;Fr@BX6_O>5&#>#yX2 z6k+?i{%e2^&8u7W+}TTR*~8Qmv1V>I$<14E-9T6D-wxkIm>Mz3;(>&^_^}r@>9Q#w zeW&!d~26{>z?l%Ub#fw z<@EXtK|W5ekFpVbyq+^?Am-_v8cwS%B`fO>^ zvlr!AZtF9SiN<#_!3X7;n`dS^uSgUv;w11g42_$R2YXJMnl%k6cE^j4@FM!hmmcD8 zX!g}^p#-cL13)t~QAXG)R#3lHICAMD6KaBVTuPtL65aZ(-VVE27tkcOj}i3cJts}6 z?*p?Lvw>dmT@dJLnY!65wcVt0=t;)OetX@x<_-mWEcz1_uEz6%nZSR~!jPD+_GQED zOm(YqqeZ7g9>`3|$*Vr$DaJ|JtxLbqLm~fHN{Q>)wN>sR!vnfMl^qm0(|Oe2`gQx)O}E!-%uB2#f$q!>Q^Pr+F>#*QWUiPIHli z@7K*m4!&EiG+dpjN2=lK>^%ud^tAVl4CY;>_Ws?7p%(Q!HblL!FQ!NsH49ChFz#OD zZ$mAOSxM)?Q`T>oaTc>QpW8Up*>~A9*)>!PD9qJz?mK(;Y!eHHx4yQ~sq1eABBrpg zO%ZQx)VsPEqvRX7wq^hEp_GyuYpr5^B4ry?zY#_+7ZogI5y>bY7^X_-*Z(DLBwxIo zkeO-mli3YJ5I%G}La`2|9Xt!Fi&>Xh$ew0tZCrDNTM%W zkY8^BdO8VDqY8L4%EG;TKN~g0Edp!n+LkH;D&iR~<;vv#hDs@tzwxsMsT z8OHoGSvhbXFi|7(5rAN)eF76j&+@5e8F-y~?%#Y~>#$qYATuiBe$|8AHXU6+N6u1@ z`6eNCpZi{7$2-Wtz0G8J!e%eP#PVO{pQyTKq>|Dq)f2u}zEA!qnQizybRxqNqx@pX zJJ7qU^Bf1HfTK=tQ4ikCK2o;z8Z?03jCni!3&DOeg=vVGSgOjfE3pmFzhQ$y8HRu zg!soY5+7@p7>v0|AN&3$y^*qHrQ9}adbM0>VCcj*oW<+*bz<>c?;3nEh|_11%G2?&YE1?Is`*XhCS$6gVxnhZG zL=W?({Ln+1!Ka)d&HhhfNH@Qe*v~Wm#(r8&qUpX{0&sw!-wN7+{Sv&G%J=GT;em|m zi>uP;hg8Tc>I|g1&{k5VA1O@VAo9JO*G~soO?O+ z#G~xhsmbo3F=}S^x=9UPv4tjkg(xVW8pJO}q>YLCxGR&W9+Ruoh*a$J%3WEU0-d(TKMy>kzf_<}d=EOuT34{?1c~N9mke*%#55AxqQ3o91|j5M$(3H` zKl2@DlmFV_Y;uXJd^@qp-h1g?H~lS5#Y;b3c$`kpXdb6tvb&qd7xLIlAzx6(nTek+ z(y2)G`R)1a8rE{n&&edkn(tI%BA#5OwhqP3Q09IvGtgMEVC~!=WhNzf1(9bo*r=Vd zLlPUffg^r4k%szWTKvwS_?G=Jxnr)Jn*u?{MK5^&Vif%*bNcPg50kK zQ|s;9jD6*w5_rE^jav|({&o4z^e3t=%k|{N<9i&P)&B+EmRW@JbtAQ~5Bh7AbZIE* zPBVqVi4me2&-CMgKZ)!;HWh29u9Da2gYuO%sldO0quPcG;X+epW%+j{n8vDwN%?H# zY`pZz*NjaG6Y$A4hi8-?rhhMNqvj=RxDR@@-w6Gzj+10Edl8EB`}En*GL~ zy7_NqN?aGIICr7QAD zxcyzcWk9V=t~C4%JS_oggX$BY*3aqHl3roD4A&$OwElMn)|>rX6R`fw(;C*#(y%@t z(RJ;w5?#Lu!>oa(M6KIu2K*H=wcwyLUV2tY#bB{$Xi_nxEvc9woeQZbu0IRJfSsXW zAJM1+uMx`B2X}*Mhsy>G|2VM$S8g>MkWUM>=exuPJP$LEpds<$fch@60v_la9EqX^ zMQf+y;N~Jxq;D*1p{QIPi%34u_g-ax zc9CbHtGZR{58)(3NCoaFZcq3VHiJXeg(@cW;%boK&g%Luq-c;pm8q-(tKnbA#>Nrx zpPrOm71S$;`0JhEM{f(PblT}qq_KH`e1=cW`U|R~PLjw(ZKj2W<2qF>mzw!`L9U2# z-%A%yaV>mUL6saRXdUnGe~OvbsuhLwS*td^paJdMJQNAF>heOwPCjG{UF0D4J@aUn ze}VAo%~UnjCvFEO8OXy~^}{f{GQG~P>dAGn=VYM#K=C14{6?E;Jtk%(N?-~)@6CwJ zq)y9En$#mzdQ!w;sQt)uS`6Hx8oAWNW+<)|ATFv6(Bd6wp=U__6Ru^3#dqr&s^L!q zuc4~LFCxv~x<=BL6MlZ+7^6nH#e!%)&Iln9b)+wb%pcR7BwO9 zR*CA=I*m7?v}S;WhvchU3Sf(m2RcH-NMX%^_?%M^z4F3|D%YPlV0GN1^3l2*%mLdW z5x^{2hwZP%LKFi_K-V9Wplgf2zj)p_+{ZQX={c2)X#52?(3P0|A*I=QE!=wfhOyy)F&~Gilcj3f4ak6m;fL zPu!F38-wb8Ky`<82}_w5F!xrdupoa)3W>v5~QIr znKUqTHh;vwj81inR&>UX;scKff@6njRR+SNEb&6V!RYyn@M?d*NrHb?r09eKnJ)h< zVJ)<~(u>t3NIg3oRHzOck zrGC3%!%iW)vgXJBaxnx(lozX1Cr0ESCzEUa@FNTP@U@A1`on+b-VIe}?^x{mk^hR{ zU+lV$|0?)zDgUkIzn%Qo?EF{x!D81z{@eP|V%Lt37rXBHWU=ck{;uWkfB5g2U5j1Q zKV9r{qurbJ*<#oApD%X3%zwx3Ht$`;U-|D#wb<3?tHrKS^fipX(*8xRr*M5H*G(TT zb{)lkr|_NS{GR&n#jbC8uP5(md*u>9G}&IM{f`oMO496ypBAN($F4pB&f{@<37Srp4QX&7ZPrn!C6|3iq4x1<4V|Oo2T8$HdyVuH4OjB7 z&!nHK(MidGO&6^3jJz8COn$0ITGAlKWMAte1UHw`UhoPRkW6QpJ4iP874)%&Q&6#X zc31Ojx+o>XeiaS$x?MAY?%}Az+HZyAGs>kz396`VRm;vdVc!}wb zd}`cb2UUrEhCxO293_ju3meVAtld$aCoHy7R**CVTd1Z&eEsaqjOiV0cWf%EwWv%{ zJ%$JrHHBn_<$Hc0xKBTUFy*U%Z0BiIRzT%d3MJgFhWz$X!k}39b`yK0&BSK3S>ha- zkzQh17N07A>u^i_5>}hU694D5_DkHCp*c&OA;U7;C4)|BeX>ucV+Q=kyFfr%!ySjF zy?neTyoi6<7Yx;kt7vpS|3<=%a;+28BBq3!^e=fX29TQYLaqeXYQhT=S5=8C=^^i= zh1jf@aHR&^0#eZp?WnvsxH{CFJ|nX<-9O~mhcI?ZbM@eDO|FIk6o&68Hz^K}TbVSr zyPw1F$QXA>{{**XCVA`~Qgsr)bn)snSsFL3?kU(c(;kx%y;r_6L5j-`s{gO-)-UeI zge#spPH>t7TB7>+lEY53LacaGm65F1j@-KeGYivFm#Q8wN)# zW3izRBrq0?@tpp3V?#AZNg#rJ`{sxmn6-!7P;!012k$4}Zk>owL;PQhP6<-eMEu}a z@D{K_x(&(M=|ghPhi7wvW6Occ@E^Eht;o^L1u6FU*GHKH{?vra`ByqqPki9Wh;byg za2@?R=;kI`0XaVP-4>Zg30cje)(Yyae8sT!v0>QdL{HewxZe+lVfU}f#b@TS6Y!Z4 zU;WVeunA3pqeGIHEq!v-z5)nQ_ulyo(Fo11!@px|OeM_O(c*g_NcTCfUCC?Cxm_RP z+)mmV`XOWbAlq9z(ypHSgY5it!r@v%>jrY1)>2})|Ew_+idE^4-;4d;zIT^Q-6&mZ ztewmrPmEfZbaJ{K-OR(*evWP1&&*D-V{(Zkp|@<)n{z~8ze>)rK@x&G+B)hwrFjC~ z45n3^8^EyfsH9JS_+E^u>+##%hUEG#|1E$j#s4ek`ndlrb}i$-xnD1K$#3XusFD11 zI=2g~RmNodpu|ZWa^&CUnJj-IoagAf9dn(h!e-uw3zyJE6?&+w9C7Cjz}ul3tyM4n z8Vy0P8L@*f0Vu(=t89ki!XLzHC{H*xNNS!EN^+rdkb0ZHZv*`eXATK&puf|36q8qhy^$EdmoP@_y~Vw6HXEqRL2gTNv7yNiT0- zb>$hla>IJjBd`xySo&li#kV zsAT@lO-M<^DI*e3>=m&VM6IVwBG!`0b~7pZ#o@nfsjkTdWy!IN$dyqM9Ws|RqJ>*L z6=RSq#ZAj9Cqq?uHk6eJ6?=My;}}2OS}?tr{}FEcYb{AFJW6L5En5l*+k7dloXjk# zs6OV0aDnP|NLgvywDeZlGt=!6h~A5cy8A_a&rh`$(Oi&CAOCG25EDLNs#QDP(wlb~ zZf`Z=n;>ZdMyA*k!-Wfwtn`tUv-!9101*J(99*`<09N=a7AZkdX5^^ zX!|lkYcnGyEksGw(=6(Jx-IIVrZrtg&$-LC=Ce(y*24PN88A~h+&pUZJj~o=E^;OF zd62(t=A$Pd!~dcBoBpXk?5}qw*gBcZPD+~0qSnbkw)JFi8he+a9xwT#WIhv^&&Wo5 zs-DmE_a#fhXjsFeza6;g zNZ%fN4M~fK*=l-~O@2zlV!tmbRU=bcT9buX?&+ES@8#fYC(@!hj{68QK1@3?MCdxv zcsg~Oajis0FaDx}F*CKw?Bw4xH`Qg6xDS=G?E3%vZ z9g9Fs`v@%3QHa5ohEwKU-bu2xqrsW*6-z_K9`Ejnl2i;fDN|&vzL$!=B+Jf{e!A;q zC-Jzx(C2vV6FTiyL$P)w0w^$^=XqPIQm|h)X>T-N=i-Y}ic-?MTOo=mv zRoelsZP(ig^mdp8hI$(DDoUe+S>jBP#mDzOq^%$HNxkFb-s1H$B#a1hHJLoQTgc7X zq%N&z_M_4Vli`}^*_mltJ>SB%M6A^$ld7>+!5T6l2~FdIz{1*%)@Ii)iLCFTUN{yV zSD720%w#n1RE(sB zS<_ne$YNtrk~JNg{3e4FANjzjRyf^vqv%@Me5qoa9-EfMv_G4K->c*r-Qt@p6T9OH z4h@mxoXWqQ)w^{dyntomh8Ag)3y^@$V6Z>Ed);KFug1&O;K|)8I9z!91 zt0$jHnw32*o@(hQ!zfL}=ZcC1hxwi?dRY^xTxIFK={lpfeZGw1%4|B-oa0msF+{#m z?UAybn4EN0?F%-*Iaf#{_B#Usit&?>^+x`fvEVk0=@)8@nS-JpC|-cpy- z%T-rOgrrs&W>Hs9@-m9173{c|q=K;mpE}dW2P`sYN{r4{T?p|aR+fF5(G!{4H(5Xmh_oj~ z6zvIlg?D5RaY+cR0Hrw!gD88GI0_u<(=&BZ<*#6sYE|bGwIO1LfD?Ru?bmO? zLlg0uUKmuER4}^<@=jSowywAAF?pd+Q$q(xq53-c@CImxobU!HV7gj<08*h}3%;2c z1|yX-ouLPbDXe$$7|~cW>|@bn?HlDw38WN}3v=*zx8%62ozdM#h&$G}60QI6xugyxyd4O?rLrPmE#jA!C@t7#IL4 zIs>N(bbG=FfrmCLSE4e|$e?W)C2VPs^_J$rZTOow#9N)#%*HB%=(RXU01&X}nNL0FngT%_!(buu~@qB1# z?Fd}FD31j}$WwpsEJ?2d6LC`VsgE|+8(M*aU`&?!`l~GjfD#cd9KZ;OFtIPGGNRPU zCV7RFkUs$2V1Y^gmi|OT=`TLiqgu9zgg;d3FcrD^96|N+-Q>^QbEMCt@|gni)irx6 z4nQ!>>U|@`$l5IVG05BAHJA$O1{MmNXN&^Hsr6=|)|K++XFQaeUGR+wc5?i6aWYL5R;?-;r+LQ0f)5+c(tII?!PnKfpuf!wB!TA-4B0=$_p91y#Fzl|HQK*La z(@B0sMx{l@WgyU0hiX$IqtMu8$P|PP&lFAlCBmM7D6bNQ6@_65iXnLk&qQnP&~9IpQXeN1}Rbizmq z&zTv4y_N6}`nue`fBoSrBI#85pEprMVEq0q2odZ?rvH*|ak9MnPRO#fsp-^Rdc7d2 zSG|678%eM3n&{-HlS&j>t+q2aDW^rDJ{okQ3f6LH1^y+`sKK9wR@R}46l4YxhNMT+ z!+emvAx-pdJ53i6x0;Te>PSeDECiTeC|28S;`AxcK_750!4sUUT-hlzf6vEc6q)VS zIa=6|>^hP^mpU+FRr4N2jw-8Gn9(S6fc@cHKi2{2pz%{q&!Alq3s7h^dctX<0>Iy9 zwv$MvY&RKdSod}rMf4aX(~NjWg7v5);tBs5t&id9)v4c8mQ_Ly(NS?1kEc}7pdg=M zlenTqye*#a<7N@1009|5A?dlOB!O$9;KU(=!@cnZl;tU69u^Qq^uS1V#!bx;+fn@F#IM zR95>_nOe-+qPZX+`s{=_a2|UL7~}F6I5yF(^q%Ne(k`7VVjD@=_q78xsx)LVHK};h z`ZhhbzAcH5+pnKV(UB?8n=O!$$dq&lQ0N2u1;PqG8a-5>F4|9N{YbRlqU~<7gNJFFW~L<(9mHp~aK1SV5>zVwOwCAb ziJ|dAG~5iql0(W)msf4%|~HQCw?O4m=nS`pARe_WEnZIKaR_P@{79xr#jDI@U~}riQ=j zj3?0OXssOw=y2#CX_wS;=X=8U(3~lgc-Iz>^KA8=n3@CyyaEArR#NohvhZe6?rmXF zYBm0Zgh0zO_Eme(>n~w!NkR8cKDB+-QoH5w&maQ!p3oP~%RGU;?VD&6N&^PEtn*Jk zhFO8dC+w-ET+)(y!gCo2lA`oZY0H_Jv8kDAmwpE4o~W?%ld`j<+&=;vMu{EmkEEt- zc~yu)D_RrwC;?j{R^XkPA`)imLs=pXw6^S$+_E%90P`we5@058ZQx?S0w1~HNGQR1 zTHGG^gR?b(UkM%f|CoCh@TjV*;eRF>V1&Q~i4Y}9tWi<0B0(+&HGo4v3=G61TIJ%6 zj#Mqe4B#aaoQz~Rj$&W%(pQVGwifG+s!+6|3D6`8Z$P991r;sT9g_+og`ko7|JL4T zCX+z0{ht5#JRdrlGw1BHuWPTp?n{FD<&V@y12B~iRF|lHjRcV0Z9Sc~fTe~DMf!}Q z3fc@}h>TnRjKbB{sghzHU9Giqa&#mO1H&u!LWY_Kfabny_P9A_msdyA3gw86Oqh}M z0`=z*RO)d4Kq7%kawPcsp1;!kkZTo`>fkD?aC49 zy3u-d-(zR8NWp@C6GDvGtYKih<}=#X>|y55vS)rZJc#U68HeoG#5f-O565v&qP60r z)?mKi(RTYsf+N}PItu!Pm#`BlbeBqqqJ{bI z%d>3W<0z3mF8(6qZ@NvIYNhmK=tZSGV*e1oPIkW(TRL8f^-uIj%=Vj|bIaQuw{M2~Qa;RB60?as}jw{3$Sr##O2L^ljlxMI;aGFdC4q!p`&W_~kyG(Ei z0yFj1r4qet??tUe1DAojnC%kvvR6-b4oZDw3QReEff;JY3wp{S-^5P3>*X@(fv(_5 z`sd`_XYSd$GX2agOXh~Q!zQ>CH1!e$O=x3|KD{NiZF$*Qoa3oNz!kWGpfm>Bu;!3p zT~;NVg)Lv;ba|etlJGXNY#@H>jfT_Ve|+k)Qk-|9a*d;wKD!eJmZu$SV5ti-J%`DA z6XP8J8;#+s&X2Pl$U-i4K*faJHSa^UXXlpObv3>S6RP(J1z?F;x+hp30@QJe$7+e&(-djjo|vU1a%e ze$H}CF?m5Fx+LyNk>y(3zFaias%m_q=Cd#52Iz59sk$3ENK_9^dAOSZDf`}^!7H2! z731a5;2bM%i4>}g2$Q31p_*0cmQQpg42pxl`n@NbI z!qtgLL;aJ*Nz9PcF&a(=eQTQP^?*&oz1c^L;bq7NWj@MU3}hXX4b3PMM~?A?H&c$s zz1lFTA6i|QhLK}Xrna92?gQ>8(stU(fCfo$m^-b7?&CLZr(%;*^N!z&9C1vD`o{|{ zfr4dKGP!0_5}e1GGBMjPNt&2;1xOX_P_HEyV27J62msTZg@W(M-86H zEgJNM1&PPzW>{rN`I<#lKJ0&9#R^O(n7{4tHZg`2W!R{PkopPd1Q@5G+(Cg+tz5XF zYO8I5DOk)G`>p`Q_lZ^n#&x=`fu^ntbzOmz2*qK{vZT_# z-LHE#Mpqhmfog=j)zxqfX1A+cU~KLVoL}txx1YAcF`4nncPGBb@?m{}5vwp= z-MBAZws03+#ncTPB|wi`eUH~H3l*1=QXY{L3C$p8;BnVTPu1cDddwrO2Ofm2KI9l3 z>@>Iv!Ky9;o>?Pvqi!&zh%Y6Wl)ExuH9_AEY+2>hl2|Q&73$n3%{>*O{gX_&>FjU( z`KE-Ldj<+c^%Z`LC)WIUfa(sZY%x*np}xId!;jYe#pa6@fpQ?TAi~-P+uBiTKUHea z@IS^{`&YiZ0&9%BAwa~o=1@VpGjLUFbH{+H6f#X!>ZXtwm3NQRF;6eHtFfC7dtB?nt%wLY?OPf4K( zIftMHDjt#RarphYCDnSx{qnO;h4!5ct7Q!jlP<}H%X4Hk9#JtQ#$}cGp)IS*s|)nj zLEvZI>>oD?yB5Wt*j6Sf@95kfL<_D|Re2vG0;_C1xilJ;m(?qBL)VjcbglHq(t~^B zLHcZW*;{QJ3eJnK`!Nfl1#_g4-cJngj}M}w*RvL`BF(|_@J+NM(vIz+cO;5!di3F^ z`I^(&(%+G;)?%5U2*;FnY3xsHxdz|9jV*F9*~Bxjb;Rc=oI@os-Otz@SU2~&mx&8B zkbC50;csPF%z&4KFVNSYi5Mi@pX*tjBhelFit4|S@NWG?MqUzmYA-*GFMwM6?8`!_ zNLNkKSt&mCEH|TJd7TrW=JjeerQ1AJnWf?ru~g+-7#%DZ5U~u1=-IQyo+*u;%`?E< z6W%Y#Y@L9W!&4zyHAo#F3183e4kGz|Wa*~@<86i8Er5fBk@JKPa21>97GJfQDLWX9 zkLpBTxRVD$ooA~0ZbF^A(L&l%8!>x=uN^y=FUc+vuqNv4q17LRj`W;A)0&rU)eybz z3yEHrYRyZh$YiTWBq}{cY7@MI5RA>KDC_bLSMTRu@R$&UA6dFE9Tx`%f?qC{n z3fNqiHP7AX%B@21yWhdNObiRvh!x5>5O!vrB39>xi1I)vx6$rkUy;7? zt6JzXZBzH=W^Gfqo*n7IrO$sqT*O(HUDM8Q^GfO;ukkD3Gq1KyO_Nk`d;M=!V%xSdO(-7MCsdMkZ zqhY=)Hq584|JBQK97Ut@M4fT9Y;Qq;;1f;aRT7C%zw_Gd=*A30JJ>XVUT4c!P575Q zbzbTK;|7SSE5BsawjjWB|9gx`a8uwOeaikYR_Ac3c#YfT>vU}g)QV-hl^&bo(!(Z%%?Iu+>}CT>ZngXo@pfQKScB9X`iY2mCB{JGQ%pci z1g%LEaL(BeM= zO#BW#L+XLM?X|sqZ(?g|VRk`V7??&maR0DghDB*)R>VAL3#^*Q=m#0~C`{9Whb?EQ z`DD-H^XP?VO?mm)6+≫LG%5V;A7Stv!3cr%A;g=2juq-CSFO&=+SR##L~n|D7zsVXt!L55MCn@wC)M=!RY5H2(|j zhZZkkl?x-!gy&yGg4&mzZzxD!-1 zl8ghEp5iG?xo5G1LO}9Hnf5vOFK$xLr+-WH<-|fLu8=alf`>+6A5sFTcwF+%+<~g+-J+|`G!WxcpMMX)csF8A+0HJz zxZI%N(E1EkAx|Hq4Uf{75}BRrJ~I)$b`qw~(q0ULsxi>;Rw~atjZXY-V}8eRaQefU z5M1Z}T}xOa+Se9fxR$k~JjlT$25H0hqv)&Dn*t5X!jOsY+TYS^7!41k8$Q+L9e7aC zsTki>s_{>1-n^oK9tp4h#4lL(ji!M>j;}Qny7#s?3Z9<@5eQob%Dn@0C1hZ| z8uDOVdxh1JZVbUpd(@@xOW&Mli%25We2*u*4)qxE8$x^fjqKzJzrruVWiZ=kscnK< zcU#n3r%w4i6BI(ECn-H!8{<7fi--1}j)gdm;a~B^EpE6!j#* zm@lO}hC1;HYBBn+_$c*q-}b3l?yo>Xf-egzWuear=!Jgx;1ON_CIbi}V=Q5#sKvh( zSsXcQDix?oFGhUn&w~lARK3gND{`t?S(R~XVo`QR%%b1~HBkpU7D@UTNsaz+jFh_L71ltD~>J1La*syzZz=Y`z?g=S@+!UaaXIdME4i zQ!Sw-H&UgQKO`rU(ua5StqN6P4DG~Jo=7@JMrJSs4#7Z=a_evGEoV(gNAoT*TS-0M z%uZ@I%`-6yWh$ak!C|UofF!;0g!?m#rRtgr86f&%)c0lwh5J)VOvnD|{ZvBnYg|p0 zuqHeJ`)J%!N`*x};9X9Q%!a&7V9gl~XH%r{W9#m;C8OPVNL6av76e|$*Ckq7=ruAo z*sWAuc&CntAXegfJ9;VzHEp9KB3a{mBKaol2-eYX3k~_yY0HJw;RNzN9$B|l`dwBT zjmiZeC`D#DCyR3NCr=s_)tPQu-p4hz7i?NwE|;;@E+$Agx6P%JNu`7_O$--s#{FXbqHH|?5 zyh~TJISL7E>II4-F6%A+T zqCWN0@=uO4z5}Q_qS|Ahv*GQN>7fcs2<1BUo7s9FJ~nhSOsb3m9M{k6C=Nae_hR7h z!~O>TR#H>qvE{^`39El_;p7s^3fB7P+%{*#+vr`)VNj}`(O49y4V-Rh32PJGr}IzK zd7sK1^J%PMB^sRabQoSu?sK&ZF6&hrW&v3%T!^UT&YGj<7}7lic@vJ z)T8=l@4K4ayiV$YKK!;9N6GF3dh^O&>Dja|20piTM78rh{{O$yF2|%Qqyq#Q&Be|m zs(E*@0{?vcr*!iw_9}-1H;PEs`q0VWf-Cnh0JVXjjMNs@{_#FFMCx)DX`#CRGmOsU z(K0>KQ*|>MtOgZXp8)D#zG{|!y!7rlE7<_28NQFA}d0 z`mbZKzWw@SQjE>fAn~_5+knIi-yVzX?$QdUiY4QmSR5g7)R^|v@*|zNmf;9pg1yii zA|Le>R*Q-u%0^1Rf$1tMm*rr)&v!?|qSJxUF(;W%O&|AZ?2x|6#yOcGln~8BJ%9Ua zBt+VzE?V5x5xU%C=>i5Dc*2)4(OS@z@2MCp*BUPfpvJJ@30Bffky`v`9u(7X#&IZ} z7ym^c5}5l*6k>ucc7Z7jvR32!vPtD_m$l!z(lwbXBbqxANlDYRKiQ(BCBWq%sv^J2 zC7%k+k>{146}t#2z_+EPeID-?fe4=`-AOE~I*h^Vd{~2z!k6vIBC*omq22?U%gdg2 zK+g(uV>2e63NiXLp-cq2x1S35)~V=idg}~*@g3=P#a<>H;%2_N`*bHwm;J;S69O+MIu?mq z?;ZL#CmzC?MzMT&JzKP<3?8(S^crnlrbm`x}3=;K{Q z0;anRBNlv%+4HHR_v(|i1SFMCIz`?VMDh4#pT-)+p`PE!^GO~Gf_~9JjH-DDVToDI zWHRZwZ)rIJ1&^L(px}EEWW=c;;(Ab_PhFe2S*s*y|DoZZYOb;n3RVbE^#e?;RvK@d zr16%)(wec$^j`wOYN)T3iG2tyXPCRWAS&3p-I-diEK-LZQ zHq+r>-%iA`@%jYgd!+njArWm6%b!P!>;;D^cXYYPKVtJU@I2tq98hgG1Muja!i;bl z+o*hsj~o+qo-1nQsJe|dAwsSeSd?iSlprnRbW6jm1NtOZ*>>OS)Q2;m?rdsl*1lsA z$Z+1U=D2aYoI5a5SUD@lJ_*jaIBqb1Hs15m;z~_0M0(baatV&H>crBDV{6T5QA$C_ z95Qe~;-e&Rr zdh)ODoml)whPGRL$F26_*A}vC3I$`B^*1zrBwR-op%FjvEDLYs3Ielxbh+Hq2L#Yv zoJkIOOFy)iLL&=SK~~PEX&qK(ioG;9^J>Ek{zOM-%J-9#>mqTN*ZJ8)l z^KDND;I7wiR=WCmu3olC_-48(Y|lSrv4A)oQG^Av?n{eAtE8v;ujG5mkO1wFe)|n| zcY<7vrqElwjYah+jIz7sIPI_*mEpDA4raGE<2H;=HuGO_X> z*#xB1=)=xa*}DM^NKh?eiQMNl`=cZ>HckDm=~$?lyAOTIp*T|zI!=knlrVGTR$~UY znWMm8m{4oZk2=}uDT0bN=I9-Eo_J!r>SGN8CPwFC-Q_a!5%St!*3)pfXmuh{H$`B2 zz>~sD$SqvU;9b86Uj z_^X((QfIR7^nF3sGPhDoI<=Ui+2(b;70`dt@FaO320|UYMliV$24=I!367ULnGVTv z2O*y^%aB~Fv3MD-U&DKr={0L)1amO>AB$XwiA{q1hE4yZ*k}RWBJ%i1kJQj@n3rl5 zK=@sDm)ygl$Y!Zk9Rw|vh>31;Jt3)wWZO{Dg!BYpu5RcW`Z5)L1tGPhKiWX+j?Vx)Egu)2&7e!! zcJ?s#UD%r4s=q$pucif``sl-+Hh3E#$FHb<*2yY=XT5j`AA*@d*p=_{k>FhzmqGfa z&rcUtX-^!hn_2Oxd-@RgsNIa-)x=DA_vCr^28S9^sDEqXZ0o;FgqA#J=ShiUA{`h% zkG+K7(F3yFv(g3Pyn9tY#=~2!c;qRB7ZU5h2+ZKSfGtje>ITe#ox$#h3R0Xk+O$b4 z1Jao`c$^-nlTbEuQKPMeV8cXJkReZh%%42AS}M_-uI-kKt(N!O*H1ql!%>*IZ&$|~k$YGzD21{q*rEhgNGj+(lND_g=A-i^4( z$7Z_#Jp*sY29>Ix+?9N+@4bY2SQY~uoy~g*jbL9ljm{B}SO5LRN3hNUQG%E~teipP z>R0D}u5Yz8(p$0vRb|TP*nUzLgSKe+Dh(HZNbPCwl>``A4kKKOI2-Qx%8XS;*dm=) zcP~XQe-EQ(m;`LK$DM)@pUL zVAkP0k35yn-`emM{FRo}ys#*X4>F%Z0QP@4Ap|r))MtM34DK9GL`#i&($vQT%nlM^ ztBK=e^|9Uq+}JY2SF;9@*3M_Ghr4afe7C;(tL~Ed?(;z52Lr2e8>p=Ae0YdaOIHezAk-Obk<8`%(tNZ>TC66ah9;-Mkx0zy7R7r>B&Y+yY z;pACAZTJObSv1_Fp(^L0WV!hjERM{~*H1tSZ)!&hzk#X;7#AJT*TLk8S~ZM`LZ+i# zwm*27D&j&UA>F4G124F&xzPe$pwFBcMzE|UAoc3Tt3_go9lhRioHb_#<;cq5nA3OS zOYpPv+aa<45@HA>X3$qU%dwu-VE$Q<>aTj_IGOp%=<5urQag%NE*}RR{5YnPH>{f2 z>Sn&7qhhP&H5+TWTdAB@3g>)v*$1qTw-O{J=Rllvsr!398Es$vr7fjI;Sa&wR_2pW z8|0V12$|38JdARj*4c+p*J+vsJ*)o?7)Qvs!Kf(APTe6VfhNU-2s1cb&o~ak5SD7j zjmFgSLMTqr*;Y-}HSIiC*L0oSddb|XIYUcr$LW*H|0Og)5=wn{63Yq(ty7oZ&$cm| z<&767;m0;;<*k26{@#lBY$I?_#RoJmrjw)k8Bx=I@a}4OJk~wmU_$}OQUoM}1h2d~ zqm6vT`n)5MFQOr;I_=jPS{1PD3;nYjKXs&)K6)NosYmiL>MegXA z;Uusi=9j}$T2({PJ529pdU|>5)X#%wpp4v_KkpRDHUI9XA0f-ipXUzM#X|4J8j)4h zsheM{r@1M{=?|EL_>hio;@06$_UuZ+GVaVwNgUyPSfW4DetPfEkXF2`1Eq~g{ zszu;e?N#eBgjG4}ns@xy_7v*Z7MRzjw7&LHF0V;{aU-Zx2VT*3_o!VYpuhfaL~Pa7 z7mN60Byfy)_PK=JL4#&hgdp;(wqP|!TGL>q7A87)J1rd_!QJwA=AR?CULE3Qph(5IJluT?NRG#VaG4;#msnqDzA?YKaU7}#15Bx*{3^hatMh9Dhu z5F0vKL}zQnxPZgvUcnIUh`AR(=U%emf!J1<8|Vtr7+RM~#%4RMa&@4yPrQ@y(s&r6 zi@NVt;-b3;FEmLYycc+)K*LVH5xgf?tY)V@i)71wZ49qLZmR3J+3+%@hFb2 ztSW1I6$%;MxP%+Lz=W|l$41p#@G26vNv+jIr`Sa|p%Hzq@+4?DS$)(5fsD}QBstM8 z0+Wl>SEYtY)-z(NigZrQ$&+8Su5O@fYielm9>ddJQq1M8jGG_%$pdMJtX{bkv(U1tZ-b#=M6sBUD*10lIvZ3Mhr5a&KIq4j2p7TaW|inE?(hC z%U$943*Xy@t#Eufe1+q}5!AzH#3d^nwRtNX*YLSwVnp-;zf?k#(MQ^GiC9ObK?y(he~&lGn|E*~rx3b-?7l`facfAf|L#_ew04 z{ry?@Ruor2I?FWJuK^TJnW;0XXIpZ!8#jA{`L?LOpJ?0TlS(BgK#w=Jf}iT}-76oF z5*VpX(}r53u?%RzxS;}l>3D|&dAac&ejFQ599IX5+@8H)3%N4q3}()o)O(MMqypEMME%BFbwt?;&>M-FG9KIZNbks84_7`hXC9`7I`Xju z_GYWN3dElvRni)OqF3N8t1G>1e1C8iLuMu__@FPwL|9 z=4l1FOje*<0^%BPB4&mVKe1pHLE2gHP6rMk_N_BuN;RU(ZK1i-AJxE`^lE?JQP15Z zdkNhyA$xFXBm~?h_TSU2*V&&6ixGSs9gKHtv~YJjTcXxe;p}Jhsjwk|>CA<;m*0Rh=zi@(Tx0^Mp;S#n219pI^Ly>fUE zJi~uOb{qqZ`*j=xVa?4$*#SWekAr=1!Qr=0jSGl1p**t&MM$D#-@Zt07dCm;6lW2e z9MvS&njG8GGC@aJlIqX#vL{G*xAzHO6?!ivs_TdpH$_C(N3mL>-q1Pms*0_aewV7v zooGcTrWS)rr#RR2^n_m(uw5-_vq!9!w6Y$;iZY)2ntFM{kIFL=#H?_O%(Td5b*l+q zNEv6|dx5m2BamfFIX`M9M+Z+(*A&~Mne@n2_RZsqR>j5EkT4S$3 z6EH9H1QAXaW?IW-xgr`2lJY{NuzHioR~o_E!ei;Di#~HX995xrT@epL-`WBiM$A%> z7MY(ODaE`)fXZHwF)r&)citHHoXlBb<~v5Ls?-aA+=o&G;km3|WKd{~%VlYhY($1A z>j16?7NWXCfJ1uHqE9Zxw1Xn3z62c9r~iv8cb$HTRa-2})q)Qsk4%9`s(R5yci1%> z3@x?qH-?tVj8h1Dzl`)G?-%?4qtT7%aU$V^{3W6bdne;;7vc29&nB(Ai@iZy2odzA z`{*msYhsJh-F4D>G5j>~ zn)9#5dnGQ5h>%BSwXVh6wB#x2-Py9=Lv<+;GbfU55Aw^NHlmR<)oLUmn+ctL6Fvur z2Jf1MG5~=wue0M3v&f{Hr1Cxzz-@C<<2r#NRQaD_`B$;aQ;{QRYh5`vf8q)Eks}tS zR51w7iv7`OB@aqf|0h$#{y5YB2ih}aRr-B#q$V3yzk#xN`UK3Db_hSP3A0&hQB(iI z671(^P^pVv)_XGin5^L@H3!;3Bm%-kN#HwA#eH1G<`SiSxcb+=zi4s6FQjb!;9bgf z>pNh|he!x6E98=>ACq{tv|?AVAbMwJ?zZr|WPaS@xq{%-{`a=UBs$$7@;B4MnqAr; z#H#mT&5#wXqMos>^#s?+JO~oU8Fh_w$ z&)c(Op11RlR(~PMB1WZ6<( zC-lKCf?gHE2T2*l()TmAy&dIQfQrv z8?|9Kf2Ah1`woc?kK|BZZjgp0J5SNtn{T-@$VhvvMQ!Z3WE5^^&&dqk8N5Yq_l(~T zc3JXK!-Mi)l7Z18RhHGj}BSl3J!c;pHHMyd{&#~y85Mb#qy!of9|_vY=v+X8tU#`C4v zt+(GWTNX%aY2p=mFik(0dy6csM;m_ga0?GZ%{_vH-n_n=G%T}QtQ2W$Fl9sQT^!A! zuU&H+XId$`3w^mwqrcWKbr0V0=7VhH=z4BSGd{cy>mm&oju{lxxIGYEjI}+-7&DD24{my1YU_uQLi#CWkdHwa-S$H^8BMC62(&~-tc(~ z<7~#xdM6jAcrd+ji@sIPbXXI?Oo4PY6v7;Y-{sH1qp%OVq@hlMpI~7ZI6c(d9bEbs z*4?;-J}xey@uR?s>f=~<*Sas=Y!_T-)m*wF83Qp1RA2rApih+u&L4ASkLSjI6j&`M zuwf$`FOlg8h{03;q;sL&wvFnE!oTbK`AwiFEonG%oK$RZ62FU^_bg~2{ot@$D zVO|0K=#&*JLxOe=@*=rCNj%e1=~aCFQ0XNv0dZjWM#`E9oF;FPVp-iai#etdXHp{x zE<%q#pMY;gz~J;dp!d2QK=Zl5t_a0*cQri01csW=hv{z~0Q=wU5emKs2g%{albG12s*vW3 z!r-?zXfZ~Hf1|+Jf@S~h^rtO{($$qtOc$TT?wGG59`9BQ*I0h!RD=MZK=u-vN&~F% z&2OK5MEk<($hMK-)=+b90B@G9bV-CD-p$%z&??(4-&K*Rbzv9@!EdZawdx{v7a}ez zFB?QW9XdOEtfm0Mg5S!^hHwD81LTLPS0C-%rceJ5^n;O(;Dqur$o|ViWf>9`hrmdK zIyM2kY%=u(dqurfJ_!!gcQg|w5fX!)YrHKE@$qSK5>Eeg;YNvTmxzjqX=7pxRV z<5cNm;H>hpfsWwmy461M`ZkTy_0@QrZLv->OP(R5VsW~}JR^0x{L{53sK(66Q>a`* zx~CD~k*F;O1i;P~z@Y&puW-L7{I#I2LKNSzAbhV5YV!hdZB4`r&AMuM1Hv*13PTJ+ zpbln5uhoe{9$58wl4HwZmAJ^_L4<c#ID2o*>WJpy5-dyp%UI-|gyVU5X*5L~hu`^+1q3ljT~;Nf=4n8RK<(h2a> z-k3_mAQ2X|Lw1&1YvSHT?#L{~iFF+;WR+85DI|7kg5M7{Wf*+*jR|>-ju<1iofd0xapNwo+Qk$A}@l`TpL19v1u(#fy zbUPy#iO6ofDfTo@)8R>v@o(0M??)PHCxkW#*ewy%>!_a?>XE`d$e1jlzAf?QgCP^n zOm+ui@4cuL*+^>TJ9<7j6>>xzu2;{jXzi#Oxck{`q9?q9^=ZGL(x|=PSr1FcYURub zERc{oLMaCB2sNJ+xD~2DaC4|^zcV;Z40e@TzZuP^F9mU=uDGY?R8I^7{UQx+Kbuh2JkFFL|2dUgu4%r^YXYeJoXlr#Ke z605Z`Vy_kzW~}eU!9;iTfUL zvB<1VAXV>CBvjEy-wR3&42}Cnjug0yQE;9w9At}j8VP5O zF$k-ejMNC@MfPj-bAKCHmT)&F0vARvy%=&sJ;RyI%E20%4842Eqo}SD*HA z{6B!b0_Ff5N4_KQb6#w|=-(-iM5G+_(v27T?3IQC130pDytZNb%uR#$)-hGgsA>yl zpe~M|Wke)nDAv^e6}tjC<-=3J0`+S8WtwcxNWAcqq!%XLw)TZT{Neloll)fj;Nb?e zKGolGnpI0eDkPbn$Ev$d9T)&7#2jlgc<)Vl+2dW0Bwc)NNg^rJm93Rn5P5Z+NR@>f zla8rJ9*7@PZ?&FL_9`S0w8qa!hB8@#c$T12!BOCS8%ITfdTmoUm82Ohkf22QmQcGY zf3=CMO5BKM6Bgr`EO;Lxdt))|&=UHXN$VhjM!YDozeLt#qEWTgw6zu?NX4m8P9jCi z4_qV+l|;^)>z=G-T!^*I$yrotlPv0r?*u;WSb7`8y77EFBE|{(d^U0+m zWO4s|A(=Edhybh>uWtU1O$LV_sT(AdTZQkX^7g8lCoh6=xM`0Wb$2 z!{Mt??J^Nf9JNV@?;92I!&gDxx1PQ2msYQ_KCk?($^csvfR;)UL5X+0LNu06TQUe$ zxLqJWm`;ii9s1&(h+&Z|cBFR?zJSW7cH+|}hTS*}tLPj0Xt>Jqs>otF)f1pD=Yn2o zOq>~1`(q(aj1bl+-d0h(Ey${IX#>W&qu%Z2j6#R!Q#ZbVo#X`E8FpKPY#iRVJt<}6 zR)xD+9SB6+wZ%y7t~y=}Dy$`J)*D#a6RHO#Zd9jlctwmeeW2VO$Z!5eQk1f%wVli3 zs%zBPxp;Sw?8K^%cvsOOB2cdsq=wQA8ZoBDlTe?b^7+n^j5m zV`22_tnuLB?d&ZLCBe;}ivOmHj(~cbRk&SdTobT=9$YWD^A_&OuD20GmJW5)ez~?L zzj$Mcw!#^h$lC!DoOebdDx7Qufp86${TIiqB<0gcw`{%EzJ zF>zR<&=HAXx;#p77H=U}npQJA>Ea9)(vF1cR1$-F?$m z3Z*w*McX3bM`w#2RFO|>Qp&cXLvh8Jd&)Yq^@LIE(2il?a9m zYfV1^TphnqPmsI9Oc2vT6vXW)sEI7VtY^rYo))+HJ+D362f`^(-74Yu^4w*TQNMR zD5>BCx;2~-^P6jlMsSzhdr$pw4a3bJS*=bLONERa0g3JF@L9{NE~M1@cru>?lrdg?)>o?@?nvyWSC!l}pZ-|R1sYNkko z%wHFoCD*GrufMEbd_pUQey&rC4(kc8hzO|aB@6axyR}zLH(R@F>&BE_iM&DfqspdM zAX3ms;a0s@WwWlMPeAB7c6X_dQ<4vDj!BY zs%{d}B$91%XbXfxg&*{(*W@PYdL(k^M^mt@AlF6VmsXjY94-8U&p#%^OG>(M6*;8U zof-ZED3}aQKWIsulP$~+Rr}SvYedkSj!_t4gx`WGz02vW@p>F$=H+o}HAKZc*?_f) z6a5%5mS$|X7$V?--@YqEkDMTv%WH**6iTte5oyBDUXh~@mo@!hzk2Ugi9>MptH78D z?OYH?OMPnD^Ae0;DY=KO;>RO}RguE2anbX3kvnf=imh)j^hVyi-E&2a#4ufjKIAMx zgl^k}P2{%NaXpQZohVor%R8ft=r&k}F_C)c5^Xbgr&UOSz(ClkXmN(%#!!`C&LeB1 z;OQqL#4#$2pGxZ5c}P?*(2y{N$fbdVl8(M5e_}D5Q`%ODZ#Q zQDOO5JM!wNH~%PTFD_t~bb==W93-Kd?86=Tbm&}ZxEa;jD z+t<(n@f%iYDu}I!%beOch%{7WtI$2F_y=oaN8k2#kT!uX0hyzt_5dQ*7#)@f4Zt~Q0D?K93&_e7<$OEgRh(h4uFLK)y;i)k zQ-kM6rlwohWrqIV+<|AkDLQgUqZ_xI<{^xz<0i|?*a@eQYH(A`#}>rAvXjXEUjdwC zYXtow`1Lj!zP1B0!b_$x&DgrtyO(T?vB3Yq8}nb3paFqVum`ima^ZALSlPDNz+o2$ zbP?fvzi>MH?gTQ)WSPxffnZIRnTJK{ICvDYwnP>p@173KnI+Ppw8 zE#hX4V(NSlJdt@P|ln*ia7t+Ak#U_?IF?(@}`i5KjqcqTtncY)omVn)2_|uP=O(0GR%Zhty^kGlXB#+7s*Acmzow%sZFHH?NhuMk!6>P) zg+wG8;m;K5V{i|=C=)HACL~7Qi?Z;zkdM1*+ z&XqULJ?CT&=sI;%fWyz5ZEnM8u9Wld&h${ei!$K};jFw--4 zhij(izA9f-w?KSVtRO5MGnjd^^iAE84VBU$(JiEJs!SRz+i0i1=-|x5Iu<}plIFNY zDYf6iM)vbA)|PJT(NuM-hO?3h(>&0;XAor;wsgc$f50;!!m1{Q4fXhB4JC>zG4~D# zu+K}gyt}Ep+X1Qh8v|Cy+Z`eZv9^NYkS_hqWqm;I@k8sSnoZK<@oAyIcd@p1+ay)J zmscO~Xt_nUPn9$Y$+#QUomHHDcqiU6fLGslL)D!kg)1=%$eZY%;{j~y)xbF-j6&^~ zEihww*T&^hE|MyL?+BcRB09@@kBDLUWL*2rS4RnfY@?R)vhN%LcPW(q;pE$G$SFfl zJ*Z(S3tWVVlGx<7ZbU>PQrw%gyRiQSmcLVE+> z!3;EPv)Fb-X2q)7mX!Mt+N&DxQQ|0jchq>lb*O2%IdG`oYU^G?J9)(n4NE-IeC$yN zFzz|*-7RV`YX^!p>UDIW93)Dqh(v{{Q7`-nLaA&JXeU(G?5gx02%ro0RNN#dcBt&2 z!%hd>`D_Q$=}R5pWlu$o^toPTzp7o?!hhmt==&6+_mQ4X(pfzCJAH>UP1~1xv-7+I z$+J0>-u4IIRDVrwNG}<)QbpnN=8A1Gqh}k$vWa+_%-JHkB2m#sxEp4rE=hFNZFXFA zg?0LNHmS}zrlW9+&Qx7TB?*8yiY=_b;1;!49mRs)Tn}$8!qI;(+JzGzwf${u>Q?n% z3Cn_%G%#LNqFrQ$oO2}812{{e!bUxkj+Ec0uFxWeEDmKMp*AsXVojW$5NCFiffd|L zRa8XqB&Hi|DOTatDneltVIJ1_vKST zoY3r9R;R8q9*zHGu_S=EE^u{g0Y)LOjBdTNR&>R3@25%kU?%jv(^~J9mmL89gi&Y< zUc$SFz6ZRn<3g`N@Kh2MBsz*|eZ9K>6`f#foIFqQ+&{?7XF_2Zyf9kWU;XeC&59mU zvaTe3;MP~%(mUh*2kq0?Q}M0z&3iC+*GyK?4&S+RW?uE2TjY(krjkGEN&-_LmaI_( zc3D{&yjTNr4uC8&{kDKS`u1c%w$U6A+}N|C>aOkpQrcuS@f(qhr4ca&xfEMnwvFtW z2c87qn{Cw%flLzs{w;EX@GdxG<0!^W<%1vB`zb583Tq;^w`X}(KASL8-SUq%yTns* z9wd|59dEWi`VV%->tD(Y2JU1-<;q@|<+QhgP<6wwjSFqmaht1IhDbkjUG@gBfr#}D zo+&*H^wr>*1mD6}+oci!E%0OC(==@RBsvUbFX5j+g(8d=lIh?+>@ti9quM3|I^l-! zA>Hv;z3>~S|C$$n6Sq^<#pI-mmvjYx34_JfI>+8xXDs@Rx-U=kM+QS+*GTEj4PukS z(aerz>-sFSX?tJxYK-9hj=UQ4ibv9<{jcoY$fOyjTc$=TX?TR&f~xEh$Ub@Qb1^i_ z=5z+^CDYMBj8wW+rD zd#GqYUQ;tM79JqcU&VyQqjMk4a;Ps6{>xcA4heFT1kY0BqLxbRV^bY^wV{apCTecrt@0GAcBt zpek{T+9;}{BKS7cJau~Lr3i*>lQVG)CCOmZR+sv+#QCnR9U5Zp;qbCL=@Vxn!Pi_oP`?Og%KCaI{8?X)emFcOnv>_zk(+R_{W zLgYD_coK;OZME#oLe!)y2_SdVqarYa0)NpeUPV^qNa1EJFsq6bBUIifGPAIh54uHU zwpC0tGZB)Us7F|7da%;0^$OZ?G)S0p5zlzURFnAQ9tnfiBX|;UcIZ*eGni} z2JaCi%O>@EvZn)|wHaJuYyeu`Wj-2be8mo8Xr-=dPb?`F)=Rnm-i~kBo`42jqdrWEKNjtbeDaFWMxs zx5%{gj>SMoe|m-fzOelJTu*o(Rbl#2>)p*;2zJQ&^s`|o7N%x~Hh`>^MGkY0-aSja zy};g;SZ3%WZcZA^|0Z?ejgZ7+TyXxojfIi8Q^F{&&xmjlH}%8hB#4vnZaMoJi&u6D zUWw(`7jVwT_J!0m+RN-%Ip9aUDP*0N1CDn|KASZ24wQ(X)gl+wirWS~%qw!+y?WvX zdR3%*h3}rHXG#PI_c1OzyW0kA!cTNShyb96I{WO6;(5=B#=IEEs2xsnHR!!GwZ)qI zqjhYuhN^`XWGSz=n$?Fn8)K#9h=TTs6z+%?Vr%lOD03l&$}l9Ew{H1n!ob|#emKD`m%VE6|EXDrv1^JF3!i-T4lvfKzBlD2c$_V*P zmY!BI<26DSS3D?^M7d0G4O+~2y*ykzG4as5--sE-Al4Koe^{C=X_UeuX^d)Nq6i#s zlh;>%7?&?51enMZb&@&}S`a!lHQF>VunB*XuKknKA9LnUOp zfkEsfK{T`7n0RRM`s-0_@#1z-$H*y@50kGd4HSGV6I7=rJl2ctlPSR7#*&rICkbVZ z95+<;89aq&@$m5_nm z#kO;csG!&G5b2`8ALbA!)=7M|94bsG$OK)0yP zCmQV%@kL07`cOVq9B%~#fC|C@a2-MU7ye*9~2e`#rxL$K910EV6l;V zp#?6kK9jB#f(P6_b>_t|BSZc37&?YH6Nd=%qIORbUmg^JP)FO5o$jv$x32MiQ|bK} z&_|I;-M)y3{`bm@>NeVdCKUDOcFvprCLS9$BWHb8hXR>E1jMTuLPNn8|6|Zrv@}#2 zqCGX+w1tI9+qUpi)UAntbBAe5URC)+aU3#3``6{k&3<`qqS+T4>SD1j)34Kx0BH`9 z-(tEi0Q2ew1Rhm^(bmF@=%nn!pZ1NNbwt}_kcQ&@X84#C^3h%J$jOdyEO5F+8@ux% zu;&(BE&W{N?VlFxvdTGK`~n77>96?uP`UX2_n3c!r=NqU_$sQS;&1268ZZ89Z^9DZm z@mb2Jo{z)jaye7@qyMG0<)>$}za{uW8K^L)7GrOL0!g^qa>xmX{Ruy#h0QvW)aE}J zdmv%eg!z~-&{~i-U;#w_L0@$&MO}ZtZ3UT@*zFx?91WW$R*>6;6q&n1tRP7pzZc3? z{|5kX#|%=P`s;)ZBv9G+k75Jaq-`Mgs?ImtHjtooAhIgzUF$2t(oxRxT8tj`*GBoO zA=rn_)T%CEL2yR`J=+;;J2<00H0r)q5x4r*K2o4}shP(=`lili>Q2Ho5`2UAAD3`sVuOt(fx7udy(Vprkz{zA95+4D0JqS6V&#?A zv8vyN`WTMMS7Zw;TpjN}}i>N~C%<<%h%ZNlna#w#U&TMf_FCoAC_b1ctc&R~kc% zN#=$$~WoZt*Yu=!^B$MKv&gCHAB5am#v<~v^e}EIq$myCMKu+gAu+K4& zzCQiP3P%>-IefNr?QlW_YyTMe;sTc`PO8vlZfqHzq8;N`<$G^MtMiveZAYgi+{pC# zMsS$ZCBT&c%#XNj_F)Gg6PSJ-JU3A!glo`}q>>Xjaqf5k>3}$KetPclr32b@=olx? zgT{&TXu^q;{BiBXC;CO(eG|oucHcDE)hjkY-hY|M@CoE!xw&(8t~w*Qv~ zf;zr1RoI}-6^?Gmt=i!KAH>5+(;wNt&$0A(6nmb}Dn876iX$cIpR-kr%6uZid|wIB zogG_<1Cn)Ddfxsynf_;FLF&9>Mk~a!u$mUG%49zL%hI_95xW4i<6Vv2^zXo_*82p> z))UdYUHSD>nE@d12ogdw1v=2&1N-(72QEyFukyK%PlV4yd|u`wq2*FiolaLL6M)Ux zc0TlY9Dt;FI-6)AJ4%zHg$Pcam}U=&@$179f~zFWT0dZ{o8VS?JLdHDUj_y>Z}8%{F%>oJ_0}SnQ}UrxMSu^-0PjoNi}KTA4uG-Ztxr(0sn*m(Dvd)n_?dIqFN#<}9VJ^p^1^_ufR!?X@_}G5$#6@ zilOfkFUk}AN+61kXp#sQnC;>cfd&bxNZwP=_qDl)t?G`Cg=xtV3M{ohdnz~1vj}&z z*QeedEp_7@xK-EPq$~cX@GDSTO8AxSree*nEIrTgE7a!AP4FvQeQH>1i!HnBVpb{< zlV(fAq@!B^maXg#bccBVWs3>u=D4e?oX*&#Td9mlc)mwIriXamH8*y`U$;#B|Dfm% zsoDWe?iI71RzkPm9k#|AmO3?V-j(B1i=RX`MCh~@2+m-Op}^V(Vfu@*Nn{|dl5QEq z*ft2$d{-{{Gito&Iz|LDf}Mc=#&cx*6sIMv_}uI%suJHg@&VnbJHzsJw`QjenC<3G zXZ6t(3q@BtVg_}?Y;g<0yCZNhd>i^t+9jf+CoJYA5}#;QQ9Y#VxlD?u;#KbD9rZl$ z2flM-4bSq${G51l#46NCs?NEkUdU0mwZL7y@03P=6eOFHs#RbE7HCSf7?Nx010wIX zCXOustV{V3BGkMiv{mCJ(ZZZaS&kYt{Z)V|O{CiA41@v+=Hz05m{-I3myfA^4vL(D zh&M-_N;%?y=G6qhM8b<7XFXztfhuLGumBnGkEdFxh}$#e=1T-bm$@^=o}@x+2<4G@CKn~vooSFc$LCASFPqGI%e*Ir z7EMqFHA2;akH{7Xqe+~Ct+(jta9!Y+h5EsEipcEs>J4ridQVF@FGxr@b?7)lQkjr( zC!+o1inL$M*Xz*((Xnt2X@3;XA&uB6BpqDfwrVjO{!+4&r&yOCm$dY(>0%oTAEWxx zT|vK9um@hN#iy2%u}WfGVArmG3x_i8Iz6to^H*wpqq-boMenbx#Em|E|b zvh%KCF*_`aJBTA2&u?jTaFuSD^|OTqM_8@APlAK;=DX*R$4;%k5@{6+=tcU76;)?3 zAs(B~I!8xkL`X6%`N}0of%de^>o+&cpDIVu(!Nlf`By-3Zsl!un0fxmygq(c;(1ll zb7}89YnVkMH8qho2Yj;j=QC%{>?7GqW4~*P$9u zBI(!c6}l`$p?mlw{SySz`cEh`^Doh)z(a3qeZnN=wBwtk^k(FXFpR<$<2#p#k>Wr_ zfNOH|GU&#@%UTOT;hw!a_O6sl?p9dQNHLPt6UcoJ;l6<#!N zm8kQ-2QEbGcYK^-%d&D$fH=mAMSG3`{5brXv@;r$Y*D}O4c2Rp9EUm7e&JoTQ6$-W zp#TcpIsHbuJmHs^IcrOeH{GdjoxKfWqVZ4Baho_U=ASRAV~BZ*l}egtvFM~(wvEr| zWqX}3v;qaU>Nmon<}sd%t*k((Io%U}f(vVU#xc5K>4RrYYDl4&zWvyM3-VYi-O^=a z6{*v-aEfqBo^W^Rbj{Lv{|+X4=H00 z-gWvk&E4}vvR-acH{Y7+IJ{$e->PZ(+_R>4Xy70fhyE_^;i%Bsxrd)E?%|hKF%JZa z_GZ*LaLq|~1gLW%Ey=I~V_H69!HdRntAos;61ibSZB1 zKXt>>!T+0T_pG^K~QaSKr}nRf=~vn3?}^xH4RC2zNW7_o=q9l;%*$j zNntBsxJBI{>9%yBalM_}hCWCNGH$E#hqIQ)Lc0z$PQ2J*CN|}JjLYgAE!>P{Lkv6e zd>8R0#CGJ5@?dNxsz|L<0pxK z*5EY6#0MRLiKOd96}eY%|g8SM!R*|*kpB0#MrEEoS& z_0>Xu9@O@LXF_t7wOE7l4hL@g5mX&g7tq|ij_JIylAEBrQ4V&NNTUJg80|dT0!7Ov zP~&JAz9H{$kO1dc&Bf{CQ}iCs+cDiUX~#5+nb(j?EN>sNyr&OHx)N!v2xA~oAo0H&h)h0Lj$I}tG`bX z6Q3beV?0i+EhVangknB5kAr3`4d;Cu+?#0pEW7c4qs<=bx3h&;0*6&>7i?3n{{9s} zLJ*y>=%rxdA0rtt7HVO&+>flD!QZ^qKK>f5>(XdcZmC;1nTdO4?HGWk!g3ihkwx;}_k@IZ zwZ_Pf>S=aV*U&u@yI0J}rm*90qdSC!i|D)}QT;a()>Y0qXpdvW&iFWbnQ_E)H`F4k zXdFh4PFf?McYMJKokePQr1JxbZxdJM9;P0M~COP4&TMy@|n(#<(+S|4J};y_rg^i)9Bw<&p7FY$0YYjjYq~aNO99@m)4Kc$rm- z{0WPV0oZklscvxK;V#;>JtyzIIT>xlupdwiAc|e2X1}i|irl+6@N7YXqh&#OuI(@g zq#gc$EEcJWMUHILuzFU(%56-A3>;o+*PvTfL0P5XFa8DbT-At zq!CJ6U5Z__gj4y)MH zzZsv<%}z23v?F?F3@EVG7Jd9<+Nv!+bhBakulp2)YYxmhby1AUL%l8}UQ+NO5fAF5A@%+0c9XGy<) ztn{~`FMf#3&Pvh|nf4@5;mPwwS>{-!8P(=jR$zu=%t`#eYpe9Rc02mQT@?6~kGO^L z&-|4Or?Zu~GV{Ht=}8{6;^*TMS0})Y5>5)_IC>Gtaeq7Hn4D26PERG@lYAn%|2s{6 zbg6x2Fy8XJkT1o(l3<

    aiR5YyB3|C7y?xj6DnXRi)UchDAs z2aV_MqQWdIf5`J<*Q(RqcP8f%<~g~$#6@Honsr(arV)YHn?cY&bP`7TYWgo^k%?{m=bX}A#w99T&A8lN8h&Hi3{Z|bqhsx#olFs)6Y%;vrF;<@3N>jqcrZ+ zHOkx5(Rhvy;u0ldE^%BWp-_g7(IILm$|WTCn1RRuez4qx@S#XODI@sDAY%uH*J3U zoGw=9Jg<8$CRpgM+`zv6GW>Ufnn3Pb1B0dM32%$eZ^G&gNX{OSwlz*HWwcjZ$SD*- zz!}H>K~IG+QlaMQ#-T6Nd`EDMwJ`m-XGVg&_dM_pFCBYUYkt4sc3DXTRhR#0J@fAA zsE+e=9TS7MT9YzDN5}@|pNl1)(ZFOri)tE*M=~c68Ogf0vSUJ|19_D`tGz7^*a5}u zS^SU4keZ2)>%X2PVCwLeeQ_m#V z>7n6nd_v?pc(5_$HA0%2R-QSFRtSb3G_8zBqldj?(>b>N)OOQQTYE<`aT9$HZ(TM8 zP0Fk4&F;J*bvFCd9eomNz3o0VBlZ#~16kk(q!_bOeClC}&PtKcvD;OMYx(Y0jlwVJ zuGq!$T!+FkFv|ZI6zptGdNb{Wy-8R@$_r|JRb9-uefc*gDmdL#&~_|wdrC$iC3SyH zUFx4{rdPp4Wo=Fey}v{W=|yU^v!r}McSi*4^ISrv2Ja}Hm7zWx2Hr-e*KDPNEF)d4 zR8a-+$33&Q0GT)XrAR?KIsp&;s``&b7Ex zv5N{kSD@0YHF$Y_8d@)nX1Hq8LmD7oyEs5U42+hj2TM-Y!FdOjs6Sq_UDy~j<8zHz ztEhD5QtL9zJ6+bNjizg_L)-Yc{Nz#>V1{n8 z;40Xsai-4&L*lix@AEia!%OiRu8oZF!;}a-)^r)xaBB7r+VuxQK*jbFsvmUKzehUu0B zY|A@565hzG(ePUWvf)+w@9X@HY7tZL`hihqU;aVDPxRyW=t|f?sYY9NGMj_~L-aU-tItqiprzenIa94l!Oj*>@7{mq| z4|YVV+7D0h8}V{w<9|;!6_t& z$cY530b&e=k>W4VT$=9CS5YSItvUEVQN^2@A{sKZ@d;4P2vU2kXM0nLyj^X9V&IrR zQOpqaff_4x1U}ZZ7opk*dYfA|T(9V^XW;Gz2HWMSx>1NKLax=+jgae6z#E#u>rDOe zh`#%+V|qf}i0sTY!lX%+ZsuJBJ$Vd73)fQ3xS4@{#+t_gIvR&*5DzvoO zH}nT7S1s)lcrp&To=|nJrJrfSoh_IE;5##Gh^$nC$j>=@IF5N%DZ$ls{VFeq96@l_bZ zfTMv=-93YF<7DvqZ-b`>R4?+f#cG-}BMA3ysKY6*ef3p1zyM=RuJsFU2=4;zbd^GO zm~&~NQoQZdCM-~U(D^MkD!?gt*Qq_&QUw{Z;Q5IR_^+1XAcS!dXi)3k4KU$=)sX7H z{B$SvK0IVkSgaugq6R=GRT3a;k?+qBmI_fv; zE`&`coC`~>jO>#kM&deERWy(*Fr$4iQ{SjR#a{p6K%IINUPF z&(y;Hk%m0pH)#}CL`E@+NAau=6n>AR&@hUYMcBd$ONLmzgF5sS^`aAI)T)kRs1bT$ zIldFU(6S$iT?_xbhr+KTALBoTU)_=Nzo+tymcV*=*HiCjrx`&jl0CBd3~)C5Y#2F6 z2~;%W{`7zzq?ekY9e=BX3J(!EXu;IpK>voS`n}@ehkeuFA8}d$Y zMxDCN^~>?MidUD;UU@LY!o%vaeOUWf*A5({m2=Ri*!SPK$b#Ux}m`&8u zS>W`a;`rDZ&RK_hEM$ZHpqP#idM5ll02T1@K_fj?9maUYeK6Y6?YXDQ8|H&gjL*eU zQiyuxo^zr{$pu*9HLlgfgAM>1EJp|?oF}S;T>qo!p|TDqfSK=8EGgkyy<1X;_tA?c z8Wcw7Q^p6K$(DZu@j)nv(-0&*^7tun9}?BkvaAhgXcr;hjYt#y;RYE9!FAX+9{Ityk@~jt`z>5w z=R=AR2pv)m5%~6Y{NZUjP!Zp4N-45Zm^ritML7-mf5nmWX&6T^nb+abX* zXqyDL{LmOAJPQ9ruYP$pQ&r2c7}O__WUJ+umyy*n+{Izp1vU@{&eN7JK~3RWsz){{ zEYNz-sg|}nGvUdJHq?zM=8>Oop$$dP)Z?4bx6|5CiU82<>&&I?^PGlifKo^J)F1Ja zJ{XiRu7*02Ky$66dw|x&%j$_H(`f8WlQD?%;oMHqj84}n@Pt9QU04ye@Ou>_2I?yF z1e=m5aX=tr0(>48M0+>1Q}6uAL_+!}HXbF3WE_ve^*67gI47SVp3F|;A0UA3aGc`W1=gVor@7F-;s`3 zEuFPu15HDWh5H0wSfs(}rfLnJ(U5N>mnxN-E+oz;MCr3Y+Zs28)7~1HD zc@tFL51;^iJhG;+Ee=E6b~J*07#8vXk<3hCLZZ4IyO#@j-Jq*ublUvC6B_z;UzQI7 zA4ML%EbonSEB-U>eyU5}vi$LI>rZ1i>VyAu?!hgcd*FSAa95N>?AT0A4~w)|(QAvJ zJck_-+0$zPYI9E?xqwghmKvIa`Bv2rx{{tw{ZO>^TPC_>-azVTQnZ&R!)d1c?kGgm zAnS0-gR;}|i5}l6L;oT2jLtQM{5*0Mh-vss{pja3Y^tUunc6e+@Y22kMl>iJ(2Q_sJ-iIdhy>#>v1)$!j~VqnpOc%new#~vv|uQq;+j|T=!PbhO%=N z@MdH=4*M^fABLtP^!j_ynqqqO1gbRY?Ws9lGQf?aw`ULhe?@QehEeo3wIPpw(<8n8 zt7p_nbtSsj1@32=@ru=U9A@@kZSvFE%n^NYRsKC_Eve}v{y8SkSq-yJg$h~>JPH;! zjjfN!(`W^fiWo^dBJq=r%~*Y6{8Fe8i?(NG`_Ax^%62Du9QR8QrL>XI#W%b=X+2+w zbqE6oK7+7jK50KF1^_&8$uv`P@#Al^`7m9|Q$}4;-OJO1^x|yPg7*;X#$<0qj8^nJ zQ;eon9Ynb}QCi7=BSl;M)-X#8jb0rCiZS#4otDk~G#LJSB?QCGFIW1@vs( zkH3oU(Tz%eeg;!E4N^gabC6k1Z37`mnp=+8Q%gC-nsmy|#2)-K?v%Gr><su&$9w#Tm_v1}x8Lnc`m{;r0rS;ws+S|gof!ef!W+GpZDIzo#d~m8e z&~S&&pPVdb^gr6_5bvpenJH&_Uy5$z+m!&8WvR566>FKZ3Oxk+Jb=Zb*Jg4%$rJ&4Q{}elPNijl?NdsPC zVk#DT$O=B>={o{kA`8JnxNj_FiZ56L;z=>Wz0<@+7?z?q3tPuF-1SZASqFZ(`nRqhFBuRev{H_c*|8UW!GLixf0tI+)1~lP1ftkE;EwOrfkT$*%bP#Oh z<>;3Ate7(S@;CK}xs!&k7Paveild5rV}wD)YJ#cw8?HSAe^pmy*|V9LKKf`5i7Nmz zMKkJ9(*jPOrZ=DGR<#EG@x#O^GCENNlDv#NFrKOs8wlt4MhbN< zfVf!&8c5+uM2;M;CPb`}`X8Qv!5QpAU`l%t&Xz6r(YTTk;;EUIkb^R|h1?1pZU#qV zvc>H6qsUyj;V|kW4>#km(YAbW%>8@bb1mbgldoqqRh$)~ z;RT1WFkHRi``DwMC1+4CM{1n>j8UOh^%7d73o$|q{}n1v;%m3S5;zE)pMym=KSwN? zH1;23w?LLTsB-+J*~Y{KM1GwBannx!mx`A(=D_lb?%J96ZM6}7#4*yilY%?r4utMd zomQQ5GQQG+rGQHh9W`9lG`O!-RI!FHMuFW=`WivS@BuN#NNM1VsL}w~yK1bA`w7H* zFNE#@KN{ATkP~;msV4mxq8MjkctLeG`M(hcajxb$N9^m^qjYv>bb)FIrc8bV{} zi*zj#JE*!&>m4 zm|+Fz79ul+K?l8w$Dy>37a8~(NW4kj@Hu|g_>kfyXV19DnG9U6kftTEE7Dy2MGR@i z(S=kJL4JBenwd{zq6@S_%af*===TZv0^Ul@w@2{S15K$tO1okKbvNT+l)8HVBT!d& zL$TVqLks>AS2s{|Q0pZ?^N@zl2zB$$GnLe+$evSO`Uz{DBEbaT(bH*oW>*I|xP{F| zPYB!Eg8(W7vf1k57}Si~pu$y|6{HnL&MDeKk9{4bSZsfYT()=3(-Y0cYcnwZbxft3 zhJ!K`CwZXmmqu z83p?ymDWgvL+t?yxEKniqZCEpvG$qWJ;;7*O-(X@%(Ix?yRJE`_>e>gv(4(Fh)QRw=hGD@ku`^G3KoEAW;FQo) zVl~oDCEiBu#vgMX^gJ#|_4>~jOrMNn3d=uSFsPi&eER#sBo9{`IIb?M$3;tZ@MkC? z4hUujlxl{a#C(ZjQ51I)&rj(2Ryk_~hR=bctJrrpx98;cvZ(gF`4 zt&!VGXbIq15uEbri#bZAf*i5Hh;vNfoj6l5}a$V;mLj}pN*6X!mKReI)P?_$R24#9VVz_;oqY%G?TYJsfd$p&v6 zFMlmKj=#{!!6QHI6@NE;RjU;rJW42D?O7J2lXY>nv^S=+)Q9fXBA9`(;b~0pm@>vh zAd{eW9CtDBFs>~cl#fee0`>wS8oCf9n$KWz*dwh_&4Al%bp(BOvUh&Xm94H-AkZN? zMbELR(_aowg`}IiDp)}caw^K;WW5EgYAo@BZ7t*JYMsX$X?gU)VHWQuoI-?(Ucss1 zF`-hJBR@J$Tn#6hC;4rk)tkqPVNg1vq@fYTTTvy_*@S~XIdbr?X{NVQv+%F*7HQmu zVjg+*zd)X_S_t?abze9dNqAvaO5Qz#Knk~qcc=%mqW2yGv{*4O#HK7Q!)bIT6-4|6 z6y2t8X98&QNBH5}TJNhoNZcPrP;R)LhR5jFWZEh|jS)b#ZKx;|Jc7Se@)QKng}=|V zlqX@7#3smR529A}_#^5kqT%v+A35UB>?X!h-?1*uISJ>yZceJPjR&#(L;T?0^Cqxl zu@fV&Tle2O)MNLl*eSa2{at+b|MgL{`}aH;k%TE3Sj&3aGx1HmAiTH0DgKQ zHXk|`2Wy&KIVi5Pr%!CY`P=Tq=9TDjjM%&gZ#@v3kN=w13{h`JQ8l!yLNoaSe-({ z@|0tK{+;NU|A!x0!L0<3P{UU(k9`~JP|{_KXhN+_sQ;toZTw&Ow?A6OHT)4aP6XJVI*Tb_Zx2%Yq2tfg))dN>Om+<6`4 zw#q_#0(2Y7$IGM3BHF2N>OKkDss7xsKL-xc$n}{&FYF&5X80pyQY4^VD#aq|fU7W4 zNS&80^Pe>pQo*7oLo%7xRU0+pi3x@Ur16!f>ZZ&~ z&dtg8wSHHiy^r?5Pe5%NGxzCbuaGr;F_EYg4uowK3g~T{{QP`2QhCO;jr|Pal(C>z?HrJsZ`-LcHMD!wJidHoU zXDB?{_%9GMZQbk|xH67~JAS-YMf=`xttZ!I+uj_;K~B~qcr{ z;Sv9dajrf7KI6*v`R+dI+LuJG-uAS@s%(#3{0AV2F~Ot0YzEL*aA!0B9D(t;eN93Ahefxsv37Ymc?{@nf!i9lVA2_)_GOwV2ail_$toQE%&V z6c9ztSq;xp4lTGB^yOvyTmHsS$UAuf(kK5({&Zm6M zL__XDSdRs%jyZ{l8Qf27BX4FCt#ZR%sTRt3xfdCW+XLS^=KM$$9hxW_mVV1-6~n}J z9f6JK!8V1>D&{3C(}L;KWO5Q4I*@G}@LzsLf`Anzd?M)ic38N=CP;prs8FgS&V&i` zwe;`^z%Vvt2z&sOgb;zyBHq`7ZCKZEKuCIJhxIibcmqhW;ejm5@hE9Dn?sfZ5Fm$C z@F2)WJ@V@|AXL=J zo6HQuuwi4#Ef?>g)$;OfsXz)rN+PHJN!NY}-CC`xKd`%*v2s`&l7OgkFdpy9k09L7 zI0$=0sw}X93WA5-PiRh6>^K*WGl~wucnsqSw$s221bz)Wp_B3?vT398ECTLUt-4`B zVLf;RAG=v!QtisWlu-yH)8zSZ9+1{L+9>=G!SUw1DDXROe7DKJrnkZcM`p}qzmHgG zg@^HRz4<5SZhzh;Qd%zy)PDjsZ`53n)_Q)aOwmkNm0FdZFnV4Zj&trI{gwOH!9PZm zOt=6l*Bq1KbHL;1CJkU-OJI(frBf3}H>LFaL2RJ87Mr}az(4T50hKfyfAXp^D(KRK zs1%n}nBOGKPA$R4oZ?!7mR#og3uG0im|xJZEYokv+JPCB8^;bIZT~)j`t;Vsu~1C| z1w-FS6YjGDHQ7VZrdjHt)Kg716~ttJg5jF^&r8Q-BP!mu0Sr4mNS&l>NW#}>J|E2s zUfmw7TIoA$1Sn56?F`g+{)O+g^k}619YsKOG00a@9#NQXSO+{Lj^VfA3w0Fq#wTC@b%~Ioh18Q*NQz_o-j>p7TYKd9_JJWfrYI}6!8Z3 z$g3`HftS<~7TnctlWWFfQy|>j@dR!8X4D(__@v<)!I2>TdJ&WW5l>xxd|G{kkBbkE zlF*cb{svz_BE@L_D)1S+q$6I_2vZ8yi~CvBg*hMz5A4zN)b*<$=l=-#2=>Nx6y3z(D2@E&-#zzVzzKgVpB2ZLW2 z`W2?PK+!_Bqig9$pzwl8TF)G)Ks}vv`VZi~1^E?T8Y7*3yo0wx2?;*mq zUR13-*$~g67q93^q*zom^@gS(fQ0c8^jjxM3|THj(h4+CZV4R5-SaPy8y9}`BR2Cw;e{~*ft!S@nq#hV5_IJ;z^8Sa`^Dp0{>Q{CVJ6SAr<#g697(a3zrgMBxK zJ+#+G7_Q0^_${fXlkvK=cJpGC$f;VIv#1FhgadG7b&jZ|HG*|pq9>EJ4Hk4h&QW~D z$Q#|(1U;oSS?zrqKxr0m3D`4OLlfS3?%NpN!1|rW28^UZj!1vvW~=z7auG~bFJk+T z@I1s5k#|0XE7L2=Q)kHAQ5L&bd{ns@_N^b2Rd5F!f{PTm22aroZ6WeY8x4JA(vz8t zj$lF@3z-a082iDI?v#_S;IPRl?82}$6)D$UuHrjCg?iq^@dzRxftNh;B@)oU%)bH0 znQ7*K*dy=yoXF$D$`N3V>qs>Pd;1TWtbYtY6EnbI=>9_?m!wkinjJ4d@xhgf++<&W z30^^E@y%Kx-K-VnglA8hhOhF-c5vNrK8JR<>?Hw{3o*~M2`pWr?^R2i!pcn#ynf7@ zc^UgngyAj2Q;F5ce_Uxdu8NHqBV5&Z|2PDI?=erz8`Aooj67SPBIlw(qLg~8L3vJ9 zPBXO!`cY1I4&wNZ@1q4f09JfA*~&V4+aXsDA8Z-B1-EBGh!!D&gu_&Lr$^AJqfny7 zDKx134sYR9P-PN-SeeLqY;J!TbacqtTiy+~(w?)+=kN#z&f_XNd_TecXR>m+ZG{Kb zVVz9o-x1efv4Wt#GqAumDq=6+ljANjs2|ncUY;NcN&^&~Zw!%WW#p4(zC$j2hZOPP zbOjca+rZV&hk>c1L_WAR+cL}a0ze@U7?E$8#Y8X0&rv|k^$P!h?c_xW;c;mWOFZ(Y zlY#RpV5p$2p zYqA-c5w2ZwRzs=CR3|#KtES^#(}1YOjRX zACEi;fu~ROP2Tz^ z?iOOtGX4{AnSiy4=0Vt6TiXQOR}?$)0cPh1+Oo$%#*Gb+s~DmE5`h&c{sIvlxN(g_ z`K+!`X0ee8>6sBQgVXSz10TTSe}dS2ujVJ<*E+Vowa;1gaLa@9@U|9m9t`HhKV7^7 z|D1#s-)gV*Ugb{o z+iNB!UFA;dRJU&;QGG?}m_J0}y*reRNof+rn^jP@oEm~j=#PL2c%v}<7Zhz4t|mYS z%gVJG{vhCXKBK@12&^DY3G6u(2!Xf)ww-&~cUm<$RSEx`$pBWQ#&|Soux!7ytQxf2_rPwy^#*`60 z4QeCV@HC0j4rrOM^ST85s1{H^_+9qDMNT#HZEAA_7TfZEi&d!?cg#B%sPM^4_QKCj z-aLvKB6bvddGiN*!t<=*D`aRZ*~lZ%XX}M1`*X8ws&^>h zpxhEYGab?1dCMeYr+ci<;tp-a?@-s0zRsd{ZP~BzNPR%yMAZ%3Jc{Qu(yVG|q#H%( z2KhY(c5W@{(u)b5dhyAR)Cf-93)}qzm-Imo=B034C!o_UaFA9-y6DuMc{HAummtfC z_*zQs>T8Jybwyy&7>l^ZKN_M+F*y}y#b8q&GcFgqx!&q*@c&0NjNK2`eAT9wXE0i_ zLTN)pbg`SgXJkh7wQq4a4_5RM(`~I9lNf!RC$t;BhO@@Ol+SmN68(u{Ap6=Fy3)DO zQIQOXQGF3=;yN28`VOO+Mqh!cFI#BK=hU;&7MF22C)lu#8xT;4KeUO4)?s*ca6jy# zAKKc@UyfjH{|%DP{*m*2Be_V%Vj_93=^~leQz}zX6hdQ`6+RiAA8E^odd(W8RE4fQ z)>>|f-E0Emar&_@I4!Ud>KUVwHp2hUxle@es=ou+@vw>GG+I?~heC4P4(Iz?)!Tra zac`lqpfCcj1Y>HGUQj38>-B>5!d1!y$s9Cpwr%BEV(08K%9!j zn0JTfa94wJBQ4va4sB3DHEF)B24PyTI^-q=a!bhlC}fIo?okb9aUG`=yh1-Hx)vqY zQi*j`VqM6szPn#hCDvM;+qB@12^|0=8V!JY?;9e%S{Z1)11I3oH^Bsd1b+=0Ttaph zRo+#0Nuye z;@xN+sg)J)Me9fz`wwb(Bib9v9dz!lDSEf2_&x16^)0_fC8B6oy69c>^yd_3+_l{q@=Y;jgIlUZKS5N#Y|J~LyH6NXl4{)htKH!m z_krr<8uy3Q?gYbq&?A3$*UMO)dz~TwJ7|EKDf_4zQ81?3s!RK{=)fB_WqV@@3y@&k zdLVx4w#256X0g-M)#N9}CT(=3GYapKm9S-s%-JABy#~nhZOD!}1LSG8boBoR&eq__ zY!$y-il!G(Pqv^ZSaz75X!<2$atGZYRevsD zGhS+nB8wbzQ(d$d6C)~`06`3WqR8(s=E5UbO;R;{hUF(z7xcj>s|%8ie3)X6C|7$V zGP}CJ2{Rj=)|Ov`iX!-zTB{+hb?vL3m8_?*Jp7+ONBo{11#%!T?STf~)=gS48#FM{ zJnUfm+E!+@>9$2|9Q(Gs#C(q;Af|Whfy0HwZ)9z2INpcYaQp6dh&F#&jk&*0FFL&Y zxL(vQ;0?7;Nz%4b%`pLJ!4YUlFVu@9)RybWxl=omabM6bb|Iw+=d7^+)49?}r5i-J zQqqf$G&J{t@qN;!X*f?rVY9q_1Kq(izQWS&2Nc;_YVfio?!O#XX{^&L{})h9CGN%u%dgPklTh_JLzVMM(`{zPbN4 z`4~Q#-Fo7< zCQ(SYj}in;H7eIG)ho=xuU245L^(3d7vhtafkQ;F29M}3&!P?@UQrwQ$`qRHPrbSV zftLWqYgM<#;AF|hIhdrU=>0VZ*1BUVb*VJX>|4I-n>J{&4b9F-!?8%AJL_?E3SyY5 zw$uEq!+WIaLxX6GE^;kkQA*J zLb{`Mv2l)8%`c>$BCf`Md=mYsqquY25tlDfMJJDN!9^u^}4F$~Gv|trrP9v$BgmVI50$j$xTOy&FM4*~}nqy)&R5LMx zYOW_lFg?wj*B^?YAT$l71CTA>(c;HjV>9)0pMMdJ_85ZwrHFw#LRp6W~#8hQ0}oZc{67N89E;3G7hEc$~_K+%EVRRDp>)Zz>@ zmQN3Ef5(f~LbNDdDKe#<-b+*vdAo2*I%$N1$Jo#=V^PpcdE%TIEFaUgLd z?3T6TSW78PFO5Y9aM1eez|V=Da0paZ51o*#ZM$LTl4@A%jhy8*uGDJRdM+NXTuqqi zj=YBUB*R|c@NtqczP{n}L>P=7$QXH{&U0sI63o2)|48Mx~5H_3%usE+YdX~_)vbG#FNT8t=zyTGdk@afQ}C7zuEEay z1O#xPH*e*(?97;`lw#rrqXJfYR5;?zhEHn z(oj6$>8&R>m``4W5g;rk<}*+!<5N@`_D39#_*9hd+LmvK86mkHNxuP;@MbQX5?U>UU;s2u* zbvjLTTTwT6TTunwR@CKPS5yX_rJHF%9a$FvOB4J9(M$Y-0$IKb98@4gYl^T^MZLDH zA-b%@d*UF_pI)|kC4^vsleEI%-`GX?Dhf!ozRu_AGvyR%JaeX;qJP|^)#OJOm=cGa zU%7}Dm=cJjao}N-ukH^KG4ZFEYVfDN`%I~YiRKuRN+!~4TMCjUpG+95j2p9?k_<|j z%q`kY83v_{>(nfzTnNcKEwPbA89w!51e(u#-=3i~xq>I7cS|;Dq3Tc1}0I+@iK#9AFC7){6rSncZVPXzO7<2rwD6^_~%D z!Qa+jB2an4BLno(2`ZaGE@7QPo?Nw-9&vTO9nv=K)dDMfhcD<;?fMXJfE%Q3hoeez zP?3Y!4M8vMEM@!PX2=1sc)`u#s>TW-1Ah8I%7C9_5;H8amC9Pm1g*oJdJ^uN4^-zP z6I4F)k;(N@b$&8ayDK?UcNL$2Yga~VGHnLz3fK0Gz@`i=eP&T=E^g@KFqI5r9PRS2fh+qfp$e zXH+htLTdhoS1zJLO4tXgo2CziATjbSh~EunOOZm{Qlt>c_o$`rbB@h`rn+nfwAXnv zB+(Y6o~kL&q$yu3X5qT;(dQ#`{wVzA(@Pnj-U8522RH>)<^gs(g-&CD3`&NI+CirU zO5lhtP&tj3y6uEAp0&66}pYZDQ*;i z(ZK534t}DF+-1;xJ+?%?3Yd`p9d8L*9^JM?5@y8LcLoWbLnT=41)!nyWbB`g>iiD; zd{>?S9ez%hR_C9TPf`xv4+ZVKAqtQM8=?SNuptVdH3s%?3Fqp*A+X{DUqUOlF7U4m zItMD&Lz=#95cUEwqiQ!`uWLas=9>0NmB7x3-|NW+oZ-{J+-k48)n2E=quapZ_WBpa zkkw8h%@!J%wc3qs3^d`!HZH&hwUt)8ljRmvi-t5q8d5rS) zBtQh|WcCkx{`9&?XJiy36`H*S{{dSCMoQFCASLQ(elqv+JZ}AaFw)5zd+lPNF@vUI zQwGSqmN{_k7T95++EQ`6LG#ZQ-_?5`|ieh@?>cGQXWlDgY3& zmKgU!fk5{k+1(E5p^3L>H_O0NzW!0dw?V>f$EUyHlPTdoa$+<|xG#cGy{m*9 z60S}X?)Gu6j{AQD33TU-opVJ5wG8hO1aHz9wi^?mf!QXGK>%L?3g`%&=o@q;WmvC( z_6A@NF-FY|%coQqg{!uJC}2AHqRRW1-w>r2&ca(!lwcSjZdmTY>3_rW8*%)j=;-RA zlT=i3c2qPInH6hCMK7W^CQztoHki8`mXBfXPODmm1B#+r#h0drW2LF#SZNQJM#B&r zoFo>Gx~q8IAFGDr`MjyB^>{{aJa>V5k1m+3UZ%Kzd7)7xr{P(u5PNLNyj)s@-YFe4ANB_y>O)}uyh0DAt0JplO}jtcBOIx4XD=%@g8#8ENP=E23U z^iQRobp+SJ6(pKmaX*QmiyXMND6=`+{8!QPyWFsDiPbpq09VP#B&M-#3>XIr*PSR5Sta$rdn{>qR3Wx|4Y=YA~(_OOR=J8_9ZGi=_SQxV8Phq z_^+GMVmxVe9XA_KT3v}S@I)KOn2hsD5nK}^)*&vOM_%|i=9xuCke{DPFE*#f#}Ph-Mo%e7N}==W=K(eu?SE zTo>7A-a1PZLw2|YBR1?yzjxhSO*NUSgN#rypLAc9CU)a8B5)#cF2c+~rQLoj^mU=d zk_v@2J9hpF(YE_bu@gG|S6mm|vgCMh%fbQ2-Y0#wdDcKng1;R%9jRg~h3ZT5$frqi zUeu9wa0aD9f7t>h~O^!LnIIIw{s~W`)afLQ1 zM7BE}PJ);(8(Kq|P~6E7)2#Ysa9joPzQ+pNs++9zg5cj1tnm1)LqQqhdcUK!AGKj| zHll5x6=oClZ4iF zpcFSd&wYx)6*r4UI9P$0boWV!a@(@D3IsdeZ>s5pRq3kM{d9g*giJVG8gRvbf9xTJC(MA#8Rt25H+j%cq|^%34kUZyz` z>0aTG2e-J}=}Kde>v_oWf#Y54<%@qDh77Ll6oIzcbEmer0so;&`5UB%ujGr{?f)Sd zYgN06mgg&h4B!+|xX;LI)(g{&LfjKW4?Qm(lJGoob(J^9xy^qNwZ4LDTim25AvxP> z=BKsfqFVr#_RDK9N(>%Ije(F zKYyP3&sU#=CXFO1JYUXC8cDbal5A81J@^^&B#0g$B;0!78o_X3o;Vr@NjGPa#!YoPO7&)&A_dZgwLDc0E zoSw;(nFw|#FcIvA-hVeDIMM00`Rvn)Q$4#7__1gYLu(&mgO$n?Or8?YiG|nI)M`&~ z|B{s$KlF386|@EF!1#pU9D%N6g#wL-5GOC|Ab(tgB;m#hNj#=vp52OhcK5_QCp+C> zo}n+_ENcqTr4+G4cY`w~9+Q}7ux`XWCs(^qLedHSb7VrN(RDIJV89#pOXIY!>g0Ggc?a zW&b=9XL=VoZv%%jA%Cry+t!fwaum7nT*x@-7#aN0MT6!SHor?1|Bx ziy*WGln2t49jB5up39kNp<^3%UFaRqO?s#?Htmt=Qu>S_7@)=IpaYbStDU}aCE{yi zf-UQ-m7=iSfa!BTQFvHKn7hI@{f1;H7ah^Bx8tk{<+TxD0~;N1{I>^XXF~l!FK(AX z$Y*8|p@Q`Ql=l@OJ7Xrt{~M{##QYGoRca-zG%|94a$psSZIY?3?3W!bs35QxJ;y4~sXbwpeo%D9aM)ItJm12Wt{e|M4=`-YV)P`me>j(i4 z7gE(Jz-sY@uo&j0qutvg?b3#|k~Q>waI`K)qO(Gq0W_IrfJo`& zv-G*)6Km2(q>3@i>iotxn%KCh)`&i0$}~iz)|2Jf@W-$YaNrA6<68t6X@9!`eF*;% z*-pzo5-HQxc|~J>FdCX60M=~{G=D{bg5B1To3{)?B+>+j+=LSG<4`}a^rp8o`Vq+? zcRD?U+!^X8Q~hMCpE2quNB!igpYiG^kAB30oYHcOck>Y1oFn9YS7d@DNkAywsUs-; z??{(FH4}eiCN@!`$4orKObk(?(@cccVQU{|Q+Qb4mG+0rC0aLAM|dr8$|46NBg{_< zkL@dk8OFya0?pRAEdQjszPvn=Wfo;Q7HGEhZ=gCF5nWg*hy#9PUyl%%#?3H>?I?ld zWsa>E?yuBX1YaT04|3>EeG&AWZDP6|@i;g721Bu7p!hngt>I)6aPdHVoi$T5n40Lg z5t}y@fw$xrGoA$+ZztsEL>S8H_N-mg;fCM$33fIDtb#3RgFgX6X9|&7;dkZIQrNLW zWn;3kcbP&4FS(+`j-YktIk(OkWh~3P7(1|O{!p>35>NUHP6+c$YYMz+)D<;_&Gmp4 z2EXlZ%!gH((r>Ypr=%I~4BFJ4 zyjO@42Rd_=n39UFo#)(*J}u=w?LwcHa-SaNgfPFf_AO5kTjjajD_)T0xh3-H1_c9~ zIOc5kSI;WX^~i^ihSuUEW>WBJw;guu6GTaB)~>)mJ50w7gGFJyRR;!@GN z!&Eehrjp`0luhijSY&i7s-PM~U+8p-Yr!J7{2E*fi;V0Zd4OIZFPb?E@&j(F6Zi;z zM_slAtd~&oq(81rfWVw^p7I!f?i7jjdx|l3xR+WC4Xuc``aQLkcsx18+4GbKPaAh1mK3D);kb7 zMUF2;{}G}gGw_`^B7V0Es_FhdOuUIaP%h+2X7;FtFZviGI35}z|B`(s5#D5b-3)sg z`wZB?%j6Gf7VQv=l71!3=9+5vj$ge#X!uxP=5(b0g*{i=@%C%V(d;!H>tyRvpe zbu+LrDdcKHx~1V?iOwdiV6R?$m;$&`v*J>*IL%pcXiln^1S{UUOxSnkUK9y>aIm4Z zkF%_KPFhzlzEM^M;+@Y&y@8?#srAl3gQ=_i*9!Ltr#sz$rC97Z7Q*fb`?3R{cl5>x zU7O+`Km#k0HjIl%w&FJE@=jF7;P4<#+NZ^B&f>#ba0;e@n^6_U8)EulS`D6868fb*I z&~~SPm;b}citj9Sgz?y!LdS<3>0Mx365@A_(_-KAkg0F9*E1b|mu|dQTvB(OA^|RSO5159;z{g1qA14Ny zllnLLT+kwR?)85z7MVcTssJ}lG5{*CP0@l+AQ!hmelSq|TjDC>^Z?FN z6@^cNF!Eph2LAXi2(7D*A18xR_V=SyOiltKsJExkmvBPs zr6jwZoDFHE$j>C_Lw-!JNq>)X_^`2TWdG=FXeq%5a%~r#E#Fz;=!EWmIyRyH4>3P# zSc=Mu4p0i`@Dse(4xk=sB8n_Uw>2BVZ*!=+l z?ldnk3U>vL!{6PRv?TnF9-SaW-Ot(m=Nh1^calTi^BMySMp(2}^`t?+{@Wphl3H%S zm64dAb}BE*fzR5+K-quZrZ5m#s@Dky#@qf4(8RukHD+v-)2U#qe^Xe@j<^8m(Ty;* zq~g*QrLc=vAlP%^utw}WKRz-Y^}pk|>i-Hr0YKYHY0^w1)2~4LP%XF#3sTG<^L>L; zO@5FZX|l&qcxV9LuGsN|?+)Pf-@gm@16xEcd_K&!lG6vjgwuzLcIEV;sVAooC+7}? ziH&S-&ru)Wm|L4}k*rZ>NIp7af- z3BfU6+fv}S2@`j$0Re=<{$btRHj9C@NIxdQ?Ik`;O&boJYhYjx+bHUm_$fQn+LN^n zQhFFPL4S-*owZl@Yp(YjcRjd|$2CTn*?ebV{(FA>Z{wEzw5j&yt+r7XM9E z`~7DUCkbxF`w(%6Z5J{pss)LFudINc^svbHx9IyW_1*uADmZea2+xtP0b(Bis=l@& zihYv*YE+&b`OK9+q&~;0e2}WFFsnR+n)44Kfhur0F0{y>QdK#%QN(x4GVlP&#_^0R zs+2{LjFXcYT<$j0Es5)pJdad3Hd_NSQL9R(g(l&=XA1^G55aV#P_NVQn+w4wUMsBpM$FD(Ht*H)fbPF_W}R>RpUEbe#6dOVSH zyu$GjhGSEy?Een(5+wo;A@E3o3ns1u4jrlmAs#m`Bgjno! zzuV|)#{YJT=;CUUACBGxFg3~l{O=3E&1%BQA-`4+OKz4IL85mGhfW74<@cQZ&6!Wq4@N6vJ*p$#^AfJRvpt+_Hc%`N!S>KR` z2fa2Gf2)H9_{%oZ%sQTz3vqo!i89ySCvw5fI>n|oDqRCCBj>Hy&)V`Q0eTSZT5uX2 zOxGAe2Pzb`)C2%3=B3Ji1^|o6Io>yc49G`w20lTb@eddWKdTr!hyaCj?bTp5eyW2v zs+WuLQ=U>CEXJ=0X5w!N;#J^BUvm@ws=z!{vAiK@dOYHYJ>>N0Dx?_fJ+I|@xC}-t zyO>Ku_)vhe#9UMn8@s6j9MO$t<$HC#A3u6AKUEFEdk>8V?szs3T*vMQSUh0J#nha@ zCiur(^M4!OhS>0^9eH;Z4X+|q0joT*RNjh|@3Lv5LmSOsM?RfhRq8Y?oMkaCZ zqo+N}#P~@p?LLWAw|pQFnKH4XKxbmfXONOd5FF#gg%^2iaSnG<;#M=g0i`&*mgBB^dY z{^g&l9skKkt0DKL|09FM2EL2wZj%)=9QvPHfrh9L?G zfs3+;TyifO9D`TG^)L>vCJzD-;Eninkf*(6IBbd-w-@1{|J*@p+?ce^3$IYX@c_+zb&_dGnl4OWDMXQ`Pd8a2F-{Q z%)QQQ1Lw5zBFgK-2sY6IlDRu}lmFIV>xAH`t)2nO>jcXOJ@FRv>qXutngJx}hr=SJ`u zR87lF-*5&+0{h2u^go8)S}1VF4AmkbLN#}}QCKl@9NA1e&T1HIQP(t4XqPKcOXpeH zLj%JpldBs%E0;y5WSTw)Q!)wzGut8ft9CjZku^f}n7s3#+0JU!PO8l4+}qY-)zerF zW1>Ax>3voad9=sF0ebZtsIzJZiC`L@nb0W}@Z!gQrGfYP*euME`yQs_pBySH3L;9w zk&Ct{4fh?tC`C2X8{VinwFy=blAfhnWhv6( zHMN!wGLwjzgrsn7UNj+GOIuG4xDQ>eO^+s{6hh7q=gfSlF-3&Mx%n4N5>;*>3e@5| zPwY*{osNTVb&zso4IkrW*zk@k_%W#YL!F@9N; zhPVQAuvD<~vY@u*O$&RR>vI&74n&!^UA_^$^O^cPj_6EJi>^G`2KE zVJs0g-Z|ek#}4*>r`(UAGDsknw272!*mDZGUx3^iS{$weU_3#px}jbP3!fLPkB4hq z?bYrvaLSeQJ*_`%q1IPhe7(0`7Hj=sZv9a-$E~mB)}M*B4ok^Pxb@9u>n0f9$ifsB z*EcfDmp~r-Geyz!F^~O@&K~>c{}@UhxBN+6NEIJ3^EdaN|1#tsZRWq4$ScIH1}FoY zY>Iw&u5sYiH%PG12MMo`_S`~b*Srk3k z$Y(XM-17wX9XeAS2K$&V$AS3@QbEGvsSZzgz|(s3Nnb;YMrRlGIwQ^yJEJGXg%F2| zQ28T=k31`P0K6X?L>$P2UdTB&&?ERvvP{ydHUMo@RzU2J$bZyY7Po}>3rGi-yauIJ z-1di&fGA&F&(C(@<6_8w(@3$4B0z|l9f8IUc)wIW%E_<)XM|}i>UQRD=#;Pj)%Ez% zf^X9YCb%2}t5%hdT0xCaL*dz(2FGvq$RT@a ztaMNtW$j|s?eyTPOWKV%L-6CXihz*yzV3P+lsg=p1Wx45JF7fl23U*dW!<_jU?#9m zl@^>8_80?aO!LUpzhMs}JIH-IaQ`b=a9*|!7iDwPvWlKZ{fI#b_p)5e9IB;g-JOqR zr>su6Q%}INKywX=-Zn7!h^vSmpl}wVj?#ImKyJc;C&44b*EWIJpstI3is*pO)Aje_ zSVMU=jSKKmiF;Iy(1%`8ABLL#+yGJ6Bh11NMykjp~oJ1Y#Fs}Guyr{*7pCRZCp2S z9oP!N|8(G{@9Oar#Y|K|#f8L;`_x9{JpjuY$-q zMNyBrBn*}RKFVKv2SDLuI!>$l1S3^)q&rtedUKAmmUhVeRPRVEFK=@egeQ;w8Le=(hgf76b5lLC^&yI3W%IsHVp$eal5?xeafJff3_Q9{ z!Ke;ZyLQ#MJ_QZn+6{wF=yYt?%l05D6P1#-dvJ!+UeI&(1y+)A$=cgdp4vHrL3!j; zAnp|zO&?d|BdrQZCCbi?bCZwWms?tZ`z_)OI9uyQKzC*@JQyG~x7Yh!T7~L<*V%U) zS(kYM*4gz;S= z90b)HOoKw?I0sA#R>JZEYQuO+=6I>Nlk=CNS#q_9?mYG)ZZg62pzSl5MR0%~UVeHF zQvq3NHf%$~5kJJHTkGg0l)CSyYku-IKP6Z0Uo)D*@*n_kk`}DT*2MLPLrhNZB=mO# z;q>`&e57EPt|Q*n3>!@B0PdfuPFTa*gf&nmv?={RL{~VZ`w!#7i3-SO@QAn{liqYt zd2Wc0am0N?v#sL7T@Kace1u-;ARYbGX@el1PV^0rB_(hYu1x5(7jx4^srXB~*W zmn3k#c*XZQ-BpuR8lGyq_LmFVSjxa%atw}YhY&U@O}q!Cp;UPj@x1H zHLeLRwMARi{_;fJe@_F|G8_Y0`Z+4l#ExSJ%M;HE7vR1ViF~2j?vYn48KTyEiTrb! zx!AYM*`qKow^B5~O$ zeF%m|1?0ZPX6@X+>thXQXh78;Ki^9auS8d4^d#)_8kY?#;PTlaKtlslQpYxD?HT}kQQGWE`WV@{P7QYlQgDV?QfEbb!(qDNvRsF zo(k&((?6^)?45t%a>ArG=yJ0XcUAWTyTZ=2+EtC03c}qk9igW2pu4IN>I8#bp_i?c z_uK|X)t`YBgl2^QYrFvnb^Y9tVTB~{! zU)4#y-2>rpC?W5jM-n`t3092FBBxZ*!J7)(7{*^EAKG_Yq{ZSZ z4k(ciV5YEFfW9u}0*Iy9W^H}_nCl4W6ZE|eu@uK%f)I*NLHoNLb+oRD9#LHo6W_ny zfyszppX7gEXUR59IB|1HG7;G7yKp_wj)S*U+?#`78)mG!4aABF_avQV`ywx`L0W+m z(&&!yx?Fi;bsT;ZAi$t<)U&BlsT}npkPeS4t*e+Xq6b(iulfsT!tp!1aS*Wy!OKx= zuKQ-+d5B(%o`%QDI~yTf-^_73*q-gCht%vLu1AX48TO3O`BE05_cZSnV8zt+o8<{y zzeO8D@Jhu=96tvkxfOIQ-rRf9kKXoKBrclw7%BAw|UcK5AG!@Ek9t`#$j!UH*~7nK5+Y?1R<^(2^ZY<|On--ghyyCmT~?rSh4I z=Vqo)A3cC~d@EJatva2#PpWi3z8j0}5&M^^q+%J&N6o;03#OTsJ$bkYu zJ+OfUGhnM9#b|tPbZVlR{k@9@fWx4#!k~|EBawf%9g71|X8Id^ky;YI68_#UBeueZ z4Du&u5amOW%}rOr9`#Bz>9P7F8@N_Ex}3$3vvO7OaGbwtu z1uY~~n7cxJEj1kXzahSldJ4CpA?}t+v!e@7fow)JFAE;^U@HC^!L?{D#Mj4w8AYd3 z2@$CQgn0ZBXoLykmRG^S2I_YZDe(X)1eMAGn-F&m1ap&|@$?WJ=oe`mC%sf2*$A~O zS{s4J%wG0miPWA`TMahi(X&2LT!DMco_8?cWsU;b01Yf!{Bd`a1xtKTq(L7tC z?;Zt~G=L>CRx8H+Fa%i&IP@jNmzSfEW&$S$kPw3jV?GVg_-QFCL^dBPlMskpsahw< zs!1UQF4e9|qe(fN(`Ytm!?qm6A2qG2a5_E%;Ho^Sg{ktCtol6?PmR370Q{u+GZp%Q z6ou9*(9c<&ZfY4w=KVARN9K9z{pVxq7MuYcC4*OYyUaQ}&EjlVt4~|SRkx<7CKAxK z%eDlXm#9$1^ZP>loBjR}OHEVd23q76|3C%2Dqsru_~_Ralr(M=%4$M%wcypl>$=?7 zP@UH+zT`Q8`E|Z{Q8%-+C>>~2<=Tgp9Lq(Q07@oFxg_l=GJ5Z^F2XtBh-q6ys`P|w z=@<&vX5vpN(EV$B=sZj_#XY_S=Fa1Q&GY*M3K#4f0%YKyC5%E8F;?Z`uNbQ|OF)DJ zU8KIj7U@?T%v6T>ZxawDBFI2QL!HoTiRpy;0ij@mR7`v)pISm1<#xem<};A-yveep zSYv2PEVKhx!whydtgIS?d#IKW-|lxnfT6R9HpG`PRJr`w3KC)CE`a)~TVR`|*Ak=z zM*`J@2k;D9Sl>WbyRhM7DIt|?R8m4Z7dDJQ*-~(ou$g;=PKS?9UI_7-L2a`ty>p{T z)?8bwIYl*vI;kk>QI7Hch6+8a3eltinX&Gu1}~&ZeP-ipHHXy11nt6S{P1*1w+E`y zJR-vwk3JA=@^ZtqO14QULJa_i3Jrwxt7u9+^6+|m+dygh21*fEk_hs8>|Qfoj6qAu zaN994kW*x%Ec|_33}M5D96VcmKNbch*09cpl1Zq$G{KMzaS?(OL>OGcBHPEril5h0 z@yk)6N|*MtU{dHFA!cH+(>O@4hnaf#6B;#%PCo7*LK%d|M!Hv>9jpJp=-$mgpnG?p ziQ|70LiA|CIn-$d!z)O3wUMC70az8xWkM4GY0$jE|5ATk{vDwlY6;u4D##;Y6Ih-b zVn`nN6RlAKSWH<$UHuX)?|p zt#u|`K|z6zVr@V9+KCHEH_Ly0myC+e;;Y?<%`6x8n1%0R?p0Z|DvBv;5-JyimL#_5 zKNza$Pk=I-012}@hOwE!LVw8s%A|(w)P@ANBWaok*Ne1;6rdP`Fvw`hsWjR+>WR>T zdLpc$p6E7~o~S~G%Z|pEh&=GfPeXtTEKpM`7mSBBfnW>?*7W>v{+NUrIf8d_!sPKH zKNqh3CT`U8b47k0Y$+x-==phF`z_~z?K2GOvlK7BhT+kOKmsr8G+T z=}!~k=YY6ZaX_6Hmm1-0&;jyxRgYHn1m>Vr{?BCdN<^!A2nk@Y96G~UG=*VS3^{uT zL2dL)92?ak41PTeuVm@+6SFh>N79P&-AIZw*N<>spYFR3=Obrb3+5AC5UAiQgh6Lz z1j(k{47QS+@>0hL``Yl?Bd^Jf(#QD&!NT`66c#0|YFEIox`fHhN3Q3gD3nO+oAlB# zAi77%)2jN>+w6#Nu-B-JBp~XYxU5`k8|WWWB5TH(ZPAE8LR|yH6OVkjkqKR_f;8_( z!|AI0Gf2R1>i63iM+d>t7cGM=9$6S)gJ4Aqe7o#VxXoiQ!4&TC!2qhi7{2_N=}`ld z_nghJz9t6iu~=Kwj}ZT*y@mL&;BXY!heGp;zM9G$mcwfCb%tvE!e$n3+%dJ>`kOO+ zd<5-H-k4)5>AHP%I6vL|_94Du_J=~1Ct-3X{*IfRt>sV7)+cATCWZ4e1Yh?dM_=I( zO%Q}mkKA%3rJ~k|%sjU$!XHB(Fb)2uj?1~na2?cEp5e8FD;6cB&kA$vZ!_lh1*|>` ze_?4I05S6ug!b(Lw>?A5PZv98WKGTB$gzDzLFU+h9Q#V_lcP~l38>g}zea^kFuoPj z>{%OOH#65!KGd6o+U0LhooH$usX6-4yEZ8Cu}S!a3FX>C{8mp)4NR~P4bRVzAAZ%j z5<4ofdvBmhrmITQKxX!#1W=2KkKM@C*ihUaYdH~x61}UpKawENR)q%K`53+4sV5?5 zVt9V0^mS=y2+9oc-bM|zoaEl7qqp>q-ro7xFQ`H4@BiYVdg5SIGo;4`pI3!DH#kG~ zq2}7k&-Knmd6>Y6DRy#ja_-#zfc63^)7Cm*nsl+A0>S&-Sf<3egU#U}?+s?&$bb@% z7X!-1r^nj3jgj7msSSA8#Ec?n;RFtC`{REf(YDP!Gq6wT{%Gmt~rrA0~6y#t+ zk0O%TK2b3K*ijM^PyLUY+5%PcrQTOM_5M=s{Tts!djCMQ?n`^={V&bDU3#B`-hc8X zs_C|TBpQ@AQ7N^2=$)2NJAP?8I`C^QpB|^6O5y_6o zh-x2;K5LIM;h zP^3yxRzQ&=4+Bbpv>+P@U|UuN)b-J2b!8y|T`UyRNW=9itf08US`-x(cVPvr2-pWp z%R?v+r3h*fl&P&)1R+2r-~Y_qo7YWR(EYyO??b0a=FZGLbLPyMGv}N+<9kQf2=AB_ z{vAW`j`vRoW6cOMHs*}P3)u}+tD^R1nlF^W=gaT$#Xa2c=qelKxQE9VPQaIf;jKZ? z#;_PXdYLy9j6tuXf%T(T69c&iE%+f%;oWMJma3rV_L!$al%F^Vq+HS~jY)J{R=BNe zmE&z4Lyxz?Zb&A1=?pDivk+ONWr_1U4{mX8Ss&^A9NEJ7{qV54VpnHb`%XQU2uGNv zxwW5PRE$zskAe?~A13qs_V~P~46q!%M-s$t*7Z#?sTp0gCGi=^Jwm5WE+;q;#O)oQ zJr1?{%mh-a!}hj1=V7vp!vlHp3LDNzuubr?TZAJ)*3|`;#fvQO!}rlzAX^IxEK4NI z8kiqp9$1Rg0aT5-CqQ3rDS+nt-+xq;=><%WQ;xEA9qWC^`^r7sToJo3moGGB0JU@) z$u&k-0tp8(vUSaP+_?-PW|&@4onNLd1w62>fOTOy?3;yHcqUf>WrdP;1&$%Y67a~Q zEp<+`?dXad)cPG|%c@s-7vW}EC7#(N<+U6osNu}@n4~?%5ipP8c+)v|8d_b4_H1m+ zpM8j#yh7ln3uHig*BBU6R!+M*#84eJoeT*aF)uyjLrkq+Ag0}5vND|f0PD%uL9niU zMnRFaft2=iA^a;!mTJ$2Cr5o2?o0=QbO<~FTQmM)9$Oei9Kl3JmvFHf?MFFMV$oln zee`*YhZ`5pk#XT1D@o{}Bjvze_BIMaO6Wu29q95o-sK>B%HDPzbQ96# zeQd)B-sRK)`$&)N zLKq3#1a{9o)PG}s9w-L@!o5wwY9KYKFgHR(&$OlU1%%OuhBrY(s|b-qL{+F0iHJD; z1mF{3aq9jR_&nZ59qjTnb+9AgGnPQ3!5&JWMI3DZ{6oAbeq3~Tva=W#Ar2z2EB9X@ zBW|64;8hGp9(A)1%Ilkg@&Oubg7Rh5X%tFjG75MpzAP5BX;={OUlbB9|7l<|TEha6 z3!8hQI8_u=r3nT=hl29v8G37HC_RC*5o@)hgJ@RAnm2drzj;vPQ--@3^w zXW#~Q4`>}HbkE7Nc@)rd2(zWIOXjxJ3;o?-2czj($9YE`XP1oFC1Za#3U;}hJ$08# zPAGus$@I0Do^^sc-uURGq z!7}PJir`TA5`R5>OIoS$%^s=}Km_S^r}H8g!J18@PUw9ebs9yl@XrWXPyFk1ASSPB zeO}ViH~!`(khzI)$j2Xb8U-+zJ|$a{@k7|rGMR!(jz_F29F;ED1XTdX$1k z=hIEm_WKdQ>%x&PJG<|d(gw-n$@)9mxGBvf{Vje!Bf81uu{cZRr{c_>nTa`nhUF~h zscul-txLw)U)64mXm`$22_UR}*Vja0W@XE8}(E~O0eABFdjZOScB_e`S~qEF^N83qE_vDk%URVeBqNPlax+5ixH0E+W6^lgGvkK zgEa63%agGLAJOYjg0BhrN32)s26<)@tykei`&L@Pfp2~ho&?@f4H&&X0Tv*uK(!2{GyPPf!zGvc;m57njkLRCy9W*w%SJme+F$d4|L%)e&Dsr+lw zz$VcBGGUp}y%%*FMYqDg)c#@ec@di8!u6tWCA@D*aGYr`r@`WQ8?ZQMlz8?go}Ewc z8Rh6IjqT|?ekGvDB&Em#6u}fw`cCsumY zo~+W}*>nN$A_90U*m`;*#Bc;X3M4hT|9o^tMKr}*i_F^F0&=l;_4IE7*#il3qOZT8 zP9w+;;y0;B703opGRQVV7J`Cc9pVcRkN+GmC#@tE5{EXXN=%EzgC|E?&mYpO>V;8F z!Ml(UOz>_)ovVV^xBoI=JFCF0?!N*Tb``ae(fVrro zYn%04Z3irNuz_J?LxY8g(KKjQMqNK9IpAta>l$CojNQ2W6?Q%QAlkp4z1&ZOiQx6@ zb3y=3jaINot{@XOY2wwF})C(HV4D`KmveS;|5%{ZTBixA^&>3)QvtUsPju8m9*qAiLObDKMlGL}#a0PN&M`tH+nx%y*L?0WO5%mN3q>jb@rz!BWY19e5 z&!bMG=ndKbkl`Ah>4smw!FcY9isTu$G=b#xgj<4=p-vtDErvd;=vXJ;z3ER zAr9BHquu-QC~U->C9$$T%{k;*I2h1ThR>|OGW zKBiKh5oi7>^3D(DwA$#@^Drq&`?6RAXFbOJe7upg{-n1)Nv{uB9)0I3u--Xy>k%t9 ztTCYEa(hK}{dO;vUSKT{hbh2s0}fMs2h!sFwrc~vG_il9vBjMZ?7>^t<8o3xyLiib zn80x3fX`kK50XMuY#a`;pd+qr$Bj72->v9I&4crYH1Kbfj=gZ>4Kaj@gC0sz}L4^4VE_+`pQ^L1ff483NwpCEumSwRQX0962)g~26B@2Npy#JYmp~PHbCY%UnW@FN25V&f z;PjqyR!{rGuA}mpm#|J-qYiWaP|tUi*hh5J>Li zf}=72A0W(hv!lVWMjDqWl}P(xAki7;e?!G#E7V2X^-^hVJc-f99$r8OrmuG;;R%Fa zT$$KwM@%_xf&{h!9(Qqp-ZiC zhX*PhP3Dy%*=+^As{2_i!rs}*>}_7hn9p6YGE6uZN_Vf>Z-o3Tjl<}s#O$S#{R`0k z9HlG+2}gnQeF-ykN6LX zF}Ng7qc`P@N^mJZj|w%?eDz~{pHii?n}$p62y&{4`U!LC15Bzx_4x8`M0TB! zwFg(o4Wp|!oW;2HGj>*Q?4s61y%LpUiw-!(P}?4R3W~GfVLyU{knnRG#0tDB!&wYv zfWe##q2Or<1!Q8|%{os2B%?y&iAaM%PIy0dlq9I-p0lxsz6B>9fy;al5bOK4U^DSL zZ1=%w;&G7)-iFu)>^kUtYCZw~I$s)P|0AxdWJ4~aRy_`AbrbVBh;F9LnI?w|%A(vF(b_#nLfH>k~zYm`N+ z4vW@5W0gg#PF=LtUIIM0CAce1O~he}*#X^aOgS;MP#Yx=mYd$x%0;DcdjjjeDrn_0 zuzmmpF2{&j1vX3&BLo;Ne;30nfBaRGF&fxom{=7TxA5Ha1;DFU{p{9N3Pg}Q-{ibp@G4g71>63-}hp- zv74pw7dN7n%d1mn`G=^}=qy)v8!A6iraWO6n>cn@FXqKRfiUde5(4}ao;fXcZ%#bI zU4{WV+qpe`I$Ice$^MIeHDd2wP@{G%rxWL$k=fVVwMxgnLY>AtrmoM}6+ykC_*=v& z{rSxX+r3PMc>`A~HZmAzX$*+v-rOk69NuAK{|rX}Iw-`=TaE#AaoZJKVaN@1$B1^3 zgZr0R4KgKb9bvl)x=X*}&U&);Cdpb2Zms0GGb!c{RYhTI6|7|_PxVe>GebkP2UlH7 zxqI-{T94f(*2}@U6iUT$&VD!d>}>`KL4;B{c&a^}cY=V;if}$msE2*(KI~Tl)O{DI z%hdN9I0euRY6^mwk!1y}GZb8*@rf-<+P zRuJyZsJduua^7*h{brxOShn>vZW@-%9cpC#u#)O%=MbE1Y%Yy7(TY$TS8g#78gb}< zg3lkvxCs}Um8x~*VJ)0P=0iC?#C(M_Bpkdn?#>Yz$YSL%(C62G^6j4zwrr>FmdFb3yg0Lb|!23Lkj#Ssj=^_t=!Gu3bs! zJmHb{O=LPQYbfF4=te)zhw00si$BGC>`3?*g%S5LJU-t@c?@O`sW4kg(*tTd?thP` z7(-tQ;0NLG%iUA{oAIw1S#6R6dceU#r%4uRwhUARLxVv#D^ zbBl2yxej5-d#@>kk2As&P{d!A}2eT8Iw~AyDy|kCEPkaauYx4OMQ|-yr1M)ar zhf6H+Yvaf-q->M3EJ4=4Nb*^g{d%;Q3NpGyX)qJjaQ%vTvcd5!ih@tMb`~Yz_0S;7 zLzc)%FPkshuOt5uR2+zkKP&plB&t}hH(z#q=Uc?}I(ceR>P{Ha%Z(#T}%@H*ZiHI2z-BGj%cnjW1W8eS&AwIFp(YM z3Dlb*PDD7!Zy{PDM1I>wj7+@p_OFBRkeY4rU>G*mKUsHF=QxgbF)6lUJ z874Q}>ufc6;ghqMEma!)7zOcm434Y#BdnPe{>3UuGMs{f2b4MsQHMq| z6o}~~@aBg&5RcH;YP+odB$Q$`Y*yH|Z9B&2tAn5DC6Hpg5L3zJZ%wYemoyYW0^ zRXSfCX;q5s|NEtXJ$kGaAC15bK=69>*4N5<^d)LFWk06FT8e)g4imxk1-!i2ZLO2Q zruI8a$vd1@Q10M$4!+?+38u_9zb-8FxZi&;V8*vW>6#P3;`72f*S$KwMJ*r>g+xqE4d# zbNaa^{FYuNerFt2@jIzy6Zn0Z&`S8-i#m;h8(7h zQ6r`iAzw9OA6fr}Y9D#I1@Ay)`^e{nX72w-9k>?zi0UPUUE#Ir3)=ubVIR5Bya@yk zAovKuPoPet2@=ip_*|13Tj1^Y0)3;c|Tm|*uWNijxEboo%g#rlKm!ub$vcS3pSD6 zqPE${dA|s)@x3_C`|XDEWNIYqyrSQMI{-QNS`ARNvlc&~A6&iH^ew++_!+>euvvpq z<$6R;=Jx1{ zCwa8|PV3QfPpXE~|7H4i zBXlp^T{u9u0!54?SP}C(C}P5RRw2eVPy%Nw5}brqCcG*pq8?_<=RQ45-&l1TN6^DO zS*1+lw@|6kX{?F|8vBIbe+G(>YqL+R`b_0F3!ABc`u3Z_3+9f)3ZTEBPNRT|^+#1f zz;91=CN1Mi4q-|JO1YLsSx&{_DeNAH$?@~0^h9R~&fEma0Cb7~`!dphMYPu+IHY!m zE}s|ruL#|_K6zqv6ozj@ys#Ba9kSK4fZ-$ZCl$5 z2)-k@B^B6H1|8gKXk|L0%v0sOhCLB|=cYI@N8OopFarlQy6{tp>d6huIloRc!fB0> zxYIk5J}d^>J#Nu~Li-eu5<*?lC}rZ}b$Iz6qW6@}Xvbdz^`~sDWG(1DXaSd!9Fj6Coh6XY z4w?7cCrW7z&XNYngIg6&(X9&2kY76(gO*r}ne8|PiL)2X9o9Xz?2;?d?DaH0=w{sL z=EXz(Ivaa!0${ZsLhv~>jB5nm{~(IqShRc<&nJZ2aJ{21hTr(uI{;>Ol#RTGY8`t*?DZcqGn9nD%7OFawP2RrupQjKFI& zaxi0+^eR=v9PXL30H!PReogT#av%0tvoeE(s3s(%%n%FJZJ+uiqYhA@0b4zJ3E_|q zYz0`TGWRLidJdIp*M_&{(uiU_eP<1v9>eS$D705^E(9^-vH~0HLn7xsun;?Bv8nJ; zhw@lF`QV`PLTL-WD|dieprR|R|( zq&ELE_%9&-``1un!UuII+$}uK>|KR#{3R>`!Ygysl>py(7+)#;P$DZp&`?;+ah(7K zJ@R2_2?;oayCSSl>NCPoBFo~cH&Ghcxd}T8!qSi5(dRxkFrb1OOG&R=T!Ie%2wc#o znr^~(N{f+RN8}pbu9{wJxm6{>+aAqBQ5`tmPt@uI6K^*s3u(lB798lf>qHjr;(r^PBy`vefF+qh6 z+6pachD-#Pt8-`8WAyHY%?frwGFzD@5L$YE%c&hkt2(x4lQ3EhB9j|{1Kttfr&Ll@i_T(qDhGHVHpFv`^x07;} z{R0<(*Y=S{)TN%6=0K`G2j7Vf+3W+5J*MPcV5I5J@B8eOC>n?db3uZjt;@(X{fx-^&s=@-Z_mbfPfEt>-6v+>-GD)V{k9)8x0BN-goH#7@WU&1mhbEjE6}%?_K)klC5P${aQAGitPoot5B|NGdja4?+ zkgOG*$s--73}D?~$JaPxz6roK>Wdzs6a9-)>RIl_R$bH-^y@;0l3OZj#Ug?!=ELW-HD!j=azgN14d!>(x ztfNqIPoKa)w=*9gMR*ma z;Id+I3mb80Jnu)(>*1jVFE+T58S{4nqsks3Jt0EO#e;O{7y)go>$yW`aJ)LM_3=53 z>FrMt*Sj0K6dPMs!mVRiC7|Ykdr3g}VP0!5o4KSd90J4dO#<44`*brcjVW)&VY)R@ zM%PgEmnd!@+a@S3r00Wq6q>YFIwOdQQK)cIxPCtPyAK+Pog0% zzOWUd=@1I(Kvk>IshK7&&(Q*Ark9UNlxM;(mixIoi{Xt3w*hiU5A;9W$1)UnDX_ib zoPG*bug&p&W|G|hB{;s91v(*RUP0ZjAtJi<aN~`6OsbBa*mOL^J4pA|BDR3(B;Zgd&l879*ORX}XGQ z3WiLMfu>vkn%5R~HN^ zK3R=y^<`M)&KLVrhmt~_skBhnvdo`158pQ;T?okQx4lr;>%WCMwZ8gEZH+-bJ)_Sj zlrr>uDZbNl`o0t2YmnORDAfHKX+09SJ7ZJIJ=S zSy3My7YUyG0)V0AWZrU#Ck9^q3DX7$TT4FO0dN@d7;Qr=umX54l<|Pe37VHt2^`+7 zmk=egVT}BCNAP5c=6*tVO%aPWHv;_BuD+&k7?U)oKNQYyG#Iz_xMIw8BBYH!}gji3$ z+y;}pYS09LD^$=5aI3NWif8NY@Lm@MA@1JSV(`% zxFL8$)8mHtEqM7vsh&MH9`Hf_@8$A-!enCYG14PJ6NhD`IVNjU2K&PFfB$q({r$BR-v{Re0bdyff+r z1xi9`O4xUXBIy>q6SN-oJrw!|=;3$*l45`)1Qn04Hb;mwN+JdP*?$O~cd&8TSlaeI zgjH-lv|WLV)}uH8C{dkV^^T^ z0HbR(ei9#OD;hS{44@1Gcvx9vfT2VSL>GUTZ8O$r{;n+bU3Czy0^ao{e$u<%TFpDr zwq_S)(7O(mT-&=+utJG zMvNr`pc=!1+SNCJjj$aT6rOU_F6FS%x;5q|r9-RCD7Tu5e-O z(5j7I?`*ImqG3fC{#cT@C3T zDdfO*y9!vwHVR9(@UY0Z{B^gD{d5;;p!TwVgeB6@**{VMl^g~rAFrJb;iJ)2-uoKw z+4W%>3BfYm{lHA?fAUHd?CIFeG|YY3VvYPoq(|esW3fUBDAoCc04US~Jzk<1Za(1D z?AA;C^@f9BH3gpdyT8EkO<@Y$|BAoBx~eb*K3*R7%?ZfnvymW&kCr8DekNjXt);m$F|!k45d z4mzg;l96~Xx5$^&bT*%X3-B3IdsJA+1^9ZXJq}QTksp}U#RTe)k8w#PX%t^XNyV6q zC@YSaag6Ra#yi~qu6my0L#{HV!{0u~Tlk9wxR;z?3$GIL7whvLzBCbE7E=%QQ^bQa z!MYVG6iKXdbxC8PNGSeB5(h0P9-Onz=btYjUM5Un_KtK_oN`OXBIRK8-+?g2DgVOB zrX%sH=Vc=K*S+zM-@k4l=0S+_Qm}vB4nh;*>lf5&3SXSQ`1yVimvX|t$96I5ZKE;j zd)bY!@e&a@q2|n++f$eQ$sp?8R0D0Qm9yNnv-0lzbC#nW`$Ha=yPd^-JfbHW~GS^0p*n@CI)0t6H*$TBu6U**8xDIR6ROR z^Y+A$s(8CG|23j#)d};@j-kR5E2sCpQ1#I$JnK^2eMjC?J#|LQMI0EK9cR8Ub6V(S z5M&0WaG;ZvXmXy%Bdk#AeLu3HO%Y60w0b0_N}d^KK07lZv{h2?`GSmMgN+0ES#0Ss za5m~{9@=Sg;x!Uw^uD*%S(kR0QxQ(pM3{AXL_9=AAEHj}d;Xx#0T+&Oe}$34U!f!$ zYHEdmPL>D)x=#?$w~(F#3Fu=^KXby;Pp7#-Be)y%lNFGK!Qa;u{d}IQX`)?76G8Oz zIgqN*&#T(1RRLMb+l~2e&^QFr4-dY?>1T5={d|Fuo)c%jJo7K1BTd1UaEnOo{et+M z;pm5G46SPD2UO|K^*GDp%()&d4ROl!$3mccm?kK8DeiW#mwnKg?kTB4FYs}aKEP2B z*B!34hv*l%)*dRiR4d=D)pSqEF*$t@w!m_Fe|ik@^$u>>Te zJ;%?74$iHk_!spQ|Dry|f%q476#t@*9bE16E-Zq)AlMm7z`L-H-(OV^Z32YdI^17% z;VsY~_y2zrU#{x>ANk;74dC||k(ZFdoPQ9mUBBT9qb`73gvE~XfgR!4!Y~!=*{IVv z*uEv7&!-f{mzSR^r8oc~1_17U5yu_KOI^0uzm($a2_I2<{Ir(j&&gq%s z5ZUmYYc)F#*$;nL2!E)!QA0~Gs>X#kU~a-asuH<)xB?%rAl8B|Xr__}8XDzS10>`; zi=sl57n6V2n1;|q}0Z4|t7y~h~CGDF?hm9}-8FYmEqT`gWy=jl- zn4Vk_mGcz-uqXa`TDN$^$wJ-#k7=_4_v`p9McQ_vP`4YO$B=4~8jxCl3tKZj7vS?D zd`0Q8CS8@z3`pj=mY9qM9qkThQ;8Nb&R~=wD!S`~fn8-~DTU z`B)480{$X`wRi`x>3ujU8waK99W8|4Y1cTNj=M>#wNTy{Ut64OXpp8-r0ZZ;G#+)c zrEybfe zZ+Zp3X?ek#PM_kl3ssqr1QH&SK;qTIL+e3XD}9Kx3>&;s4{$-O)% zmQUVYGZR-A{7Cx49819XU1DwD?~^SCq!<{~33;0VM# zIVYV#+$UK1%oTPD5JSCrk-y5A-xkw?Ugz*QzQrRb)c3L3%Cqx82j#&}p8ZkD`-Vtu zgb85;5n8bSe1W1Hlt%AV3T+KW?=W5*VPb~6c5X|?Gvmm;aBY|S@0XM2OS^yowSiw0 zP2e-Z4d9s4F4)~<{b;%Wv$B4COeuzp@Lhts>iCrKy7rL)_{O*bI+J~)1yYr zPXXwDLDaYgbPIgb;TeNeM)*$MDNQuVGm~BC$0NuLJeG@lV7ALvUfCe9JOem0nnv`dFe6Ir_dEY7 z9%bVZ=27Ya*G{R7PoyDyA|Z|_pGXEwq+~T-3&C&U@EG&2Q^x^;o`4cQn|`M}i^em` zqd{n|c~kaz9K{We8qh6GDijTvRQLrZCMu$X!w6vN-y@>3 z7$2(4VTPSkzexHi%=p|c%BwTWr&^^LXo$Efq&ec@ihNG-7(6J1OxsioNc1lOwJ?9S3WG{9?xs+0tA{(DrVe9^fxIPSO{V5ID_bW9zS+#r4G` zV1I`vQ;~f$d8{9gMl4j5PB){iWW%Ar?!8K##SOICKuFv1Ha17pDo;1iJId2>YzJaQ znYVokf}RFKw`UK*7mH@cW#R0WjlJI*LMH_+jhAA3RUq(fg!kOQ-_uTcPi(+zl$VBo z8y_!zo)^bb{wl>NXKrI0k04kvSRvPiX5rR$iWuic;D0Y7IvAIh;0A^B#-+G-5t{vn zb4HDW_{;Ez>qnsoYMo6=`jTOQ-C?Lj7<=eRKcHW^4dx3|r`Y49G9sC>R8Bc%ff(TQ zbH9`}%D2VC!qO}4_wdu74z%SM3Jc+awyIFsMp@#gAws@~_t!!@C|x=Ifd&ZKYv^0K zWv%#FM<3GkWa+6Sw*&DFH_&gkuHmfCZCNc_SHrX{>Xr}V<0DyCyA9?m;ud=;bDd<} zAnRMKiE(sBC|=3BwuD8SD`uOf;mGD{*5klOUS4Lc!(t1poHFLpk$A&PW}yyvwsUduW< ze(A-Q3{!xPb2ZN!RAS6OO&N3JLGoiIv1uOq2_UuKIJ6iaj=|zrqPbYByyF|~eQaR^ z=_(B7w0K8Lyxkm&^KHIHQ`AQ1Q){^V&H$}LV9~!&(cA`S`4DNG-fYCKFM}k@49@iS z*7-k zk5}mZ9NRyX==~h0_j*=FzjEsl@3)P!%wV3(jIQY*ikdt?nwM)rkLw&0u}b7z-xfZx z@Hd)1NVe>;Nn`snc4{p;wnw%Wxh+M;O_oCimSTK-R$wW?;o)-29w1WpDAz-|EnD1< z?d6sVYK7gkpq!live~1VK!+vXtE*{4h?#3be~m7Z;&9Q^T)p`)9T3Q)W~96IQgi@* zjQOOkaF!a(haD$4RY0pv<-$`y?xyjP3B!sr?D#c=2a$_~Kv5w6) z!;jm5v0yX}JWk9dF{_NOe?g7r%=O?1(rVnG$&SJGdm6$GtY$kroYgNXQ`VDs)n9sk z9WfgJk#;(HEnBx_fvlvNu-zxRUH4<8WeZ5GNGfq#*SReloL5Y<5~t~9{YKP<9kxWa z;sE%+THtKCb)B5B-krI@yvv@jxE$jJ{Fms>yBuew%nf)d#q`==aw%H9z;}A0`KK8j zbC#l5&f+dmDw&eVAr}R)N|fu@gYtDUr!{1`T@Q0m@a1uQkz(BZiR`lDm)n&?dAx|3 ze|L1udE3`+B3ZnYb|wB8i<;C|sb$&Ft3=95#9te$QcZyBfS2y0?KV{tU*FTqdg zDTMt15P-n!nb9Tm-F$iqqzq2_DEFbOEbC7CNc2^@)67veBZ&tC;ApeSGNF@QFksj? zMi6~~e_}ycM-;Y^05-a^@K@M80!}_K-hpOsh{4*+MmbTf;AQ~1GWY%uzY>( zsVGjf*$;ph)u6C@0-l}3ReK@qj5G_a*5xd0N1Q1hEXl_1IYB(B4p)HST>T=;Ie3m1 zSgIFUelD;a=fP}_5uX-OiKres@$p*RPh!E$pwJ4_qQS3st%bh2ioKFs4s9HXjJRMe z1fIzncwR*)3|0HL-p814LtLA3V51_z@thYkX^9J2!8@l7&e4**|;!^ zRxqrv|K6WXt1nw(vloFYxmTbi7unw$lioavgJDVm($YjW<;QGSH zYjR>VIcL5Ot@X7g=TlA2$C{jXG&wJ8a$K66nVOsjH96xnIYa$9xTHlj)V$k@V`RG@ zBmZ3<+P8yH1z;r)n1T;J9hx%^t734OCp0AgUS4RKPOi|Lg$qM-dMpafIWaRh$2-fw z_7!pM0C)8Z0JNtRTr`WNV}lV4Xo@2=r|sWDbB1Yvm=Xd+7W=&>=L=0vQ4pGNhbXNZ zBQyXU*W^4oD-@(w8XzxgMy19-9TevI_KeVW9??wCb_+tw{8dwHswO8_^RD+aEjOPV z+HyxtJMHI%mg%l(`S@Q$%Y34#wNgWEQV{ZKDS1WH&f)o?E%$JS=CsQX&56>K`9w1o z?`v{i)#SJ}IkPo68=ne&`x}~^C7PUhnw%#zIrnLDMr(31G$fq~=_+_awbRV%Rhk@c z$hgy8CN1Gs2n}E89A2tn39oB%Y|n)P(ONUlkG&9D=4Q?C=Y)Wj#j+NM)*7iPGvUe5 zGQ%`Ew`g)!EDf#oy#^l7UqZ{oz7(2sNKyIVUx&^QSeTEw6hoG-vJ;p*fFha_-Q) zD`#zJt@E0k6iqt^szPh&j)vy!EeOroqRF}WU!i4|Ys$>}cW9Y&>q2uDJRX{3(@^ge zO_^sji`E^QG6kQ7w%kEe=G^C@We#ZO`}AX>Wu|E6`<6e4mbv-wp*axXGayDpkUf1L- z*5u69v|455>kYP0lV&PLU?(Elti+P0lydLf=)X z$@$BlLd&exl)1Ywv`m4fOuA;q={0LXwB}vIH0_LiEc9LXYu3Sg=Y*E=XhiKt-w!Rb z-Cv7)LD2T*$BTu!s7r;qc1S&t1|p3{x)13IqygTkK0`W%bP=g*17dO@{R!X4;`0Hd8A$m^FCnc#+KjXZ=_{mq zr08D?bqPo}A`L=%0BHtNKGI7_Ymhc0?LqnqsU9i%3hE&BLAncRJklSL97qe1UO{>f zX)Dq`q?1VJkqq8KU1y{i>}7l7^G+li(nCmgq-T+qBfX2X1!*r*HPTN=dfh5r2c(`z zcOd;9X$sPGqytqmyufOSLwPT-G(#*DHG{2q^FT2q?JhjMk+x%i1aPe1*GQ9 zR_VGR^+CD|X*|*&ksL@1kzPT14{0mXKBVJFXOWu4uF`cx`W=!P$%-@;>90smq-98N zBYlLl8|h1=ACaQsR_WRy^*|bkG#cqXq$iN(AuU0A18E~tInoiNTBKi)jD}UZ>yc8C zEJ)c%e?pprBqP0sv>vGp=`*BLNEeY>HeaRdigYVd8q!3hN04SCxshH)dLQW%r2R-I zkbXvrYq3h#38@#-P^5844A*=5oh(_aP{08P%U($Dq;j+f&HLBoi@O6Wp$oq%R-V z+wCgC7unT-zZ2cAI()cY^^|34$ddol6V=_WbNCG{nR{6UJ(ejTOSaP!J<}w+66q1b ziM{||w%U8-u_o!FvpUKVEe+mG7I_%`n@L#-QgbQR?XvS`^lsNv_#*2MxaDW~mxZ$Y zIKH?y^1rS;d}ps+Pf$??E}5718r!(?>3bX39(=&%0S-R=sSPgQu47cA6(CT8D{iF> zX(bhf>GgM#d%FTrh>`bk}yvyi1L>hK}i3FltIy&b}X{P!DZRfFJ#;|JP#yeOjQK~XE%7eT5c?mTo;&RKNMqm{in!ayDeiWR zG+NK}E!)6dNbz48C61qvwwzz}E~*b1f+(bc6{Dr*#!XR9b{%a0vmEC~^iOm=Sv%Ev zv6XSGmY?C1#G zq{I!;&uFb?8C^y~*)p05MiXZol6;P+VkL1l80D)Q+^%8tw2f;NKEO{n4fxs%Qw6w)y-^fS26Ov?MHztOUtNbpk3lsqAL?up5hkG6nsQ+lqgQ#H|?`=<S37$CTA7X7p13U?_jU@*i&+NdbPSD(=d9x_p1n;cdXRhf&nV`r`Z`E=-eM1@u#)t5NX( zDT8gBXUcLV9=TogcM2RAi|j4??z$wc3DFw$t?lG*z;(hF8}T zN6Fht%Z|?8T@tWzVaCf}Q&2$uN|H=3W<%$|Ly0e@5^iyrWpKOJA=?ZO4?S^1E*D65 zO66dFM7dv}rtEqEMc}|h;WK~1Nz0sxMwt5mK_T)3(6+vm&_Tg~$i;jciIz>DnaiyT|QO6p8GZ%V-)wMJw`c%#=d{Rbh4IQtKdi2S37t}N4Q z7je0O16wd(px`93*&Tla3V27!bC(l`(PaRSmc;zzv)WmfET*eGg26Qh^^C6J4Fqi+ zzRPk0{=)mRg-vi_@Lza-Oy!OrNr!~vN6sZ$!Sk?q=TzbkJMgE|h*N26yGr->HrPub z>7vEIDCP72(TDolU-LR&UG>xi_aDLef9|Z28;?Cmwjw8%<9hL7xDQt^9fn7x-vbaw zK^(nt)c<$`!mv3y1o75`xQ~K3-eD<95hZ%tP0k+;=Fc6QR7dAB$ud$J9q%?s*1nRZ zKZW$S)YB3{CjuAq`<-L#&B4zhwG!b+@oUd8cJO&BLk0=3388PLD3wy|5Qt8NC<4ac zE~G>(3JgIQG!c=&ABd4WFmZp%H0*p*aSIv+zn>ycF-fTr&-Ult*$h{$5Kj$==cqa} z!XeAUp6UfC$s5b)iUZjE#9QvU8Se?ig3z2LxWA>rY^^uC;!!|7)Ps>NjT;x1}Bi+c2JWoyEP!i5xF4*eT| zi0h(@uC5$o-2Yj{7u^q@jSY)hE8uU2|KkW2GX>J0YNbwl+`4lvQT5+D8JO}yCMC=oW zegc5(Er%B4!{~Yqf5+oB)NJ_&%1f&0*E`Q5icM~v&OT4FR!NRyQsyC9e;XXZyCRf4 zd4X5XZbx3=dsw&CcsmN97?oLuk@j}4h&kg%#t!*zukZucD}LaW0NRPGJRFH|1@F0+ zT)`pR>2a5=Ti-@1#V_0`NdDm9F!AfWmSgr{ca6O#Ck8x-4D)duFUa(ct^q!Yrf-%zS4PXSNLNIcXFjB5!M6y&mhZN`(2YK!p-|15o9po8r0VWci zr+^8NcD*~kh>!tqOS)Te43Ht^?&0`wou$PQ1JPlx@Z#OWbZ7{?47Po7MuqdI1X?fR zrGG9*H>FMFNsB{dk7mnr;}_!+`H4JnK62Q%1_;4Du-9O*&d|cJ=@hrM zz&$zNy%i=}FR@2Djs%R4CG`~by99F5e%$huH~)APe!IDQs$|n6AhPQjssoh_UC*75 z^UTAjZUr`b{pGZH-+nLesY@XKj(C>$ln38h@oyLLEe7A5B`MD06m0*h`W4f$B|1O| zH4|E99~9w|fC_g1-#g&^#0JEeB3E=vF}y(GST9=;7Q-f43cTd#;RTv7?{-)=M^UWw zPJIEnWs7XBz&0sFh_U2x>5{!!OJ(vfaujNZl!q;p4JQ|M@}}K0p7q#`q1}PAF>vh0 zky#AAWG!%}8KUH;4bu1oXSQDFI^bwNcswGljlf<&`U8%5FQZ{Iml>U;JaJwgW_y|wbpRoJD615b)}Qc2PEW3R44>JVi1+?Je0LA<^NaBoqs#mY2Rcv^=L0VB@x|v0BBs!WF*hsLXMy;S>YPYJEc;+=s4fwiDKEdjvj%F`0*LrP0_r=|F|8tcn} zYWSE#E>Qn*{yN>y%y2k^3+Haj(jvHp>#}W+x-BcpErs~5V{^-~TOLYkj79Jg*JJb4 zX4>y_D%RpWS^dS=M3`~q92c*Rx~sz$k}OM`)uY8}Epymi|BS+cZ_9FKihmy>@w$(& z57HG;Hy(9c*V6kpaDIgMU)k}qcM&9heZDvBn~PCNt!mj4p-=@cM4dy^+W}q&O&?U? z_b6ge_&!*dPivO*IF59%td<0Mm4G~*w`@H`kRMYb&ajbyoZv1F1Gj{R1Rhu`-Voyr zq4y^hG+1!{jnJh-m%>0Ra77nhdXz%iVUco|;b>JXn{-r)xKBOpjEOt!pbe!lhx)$I$ud>2dg@#V8GG0@~ zF){zBqfaAmxsIwB+^wZidiPl9Y#le`AKlC#pcd({B{q(%#Np+qqZUP_L2-Yv*FJX# zlmc~2JH%Fc|8@<1OZ)Tw7OS(z(w)4zvb?|P={pt|`reGbW698!Np~Aki_Le(!woQS za$u71`7tD5eq{3bVUmvU=n#~EhC^TGp_!m%ic+m5JYK1w<>^rpNy$&ed~WTi2i$-K-iTQf}GaV1h0QN7O9a zZ8&^}CUmUrmQ!A|3BF5F!mDjkl-HI73E}RSpyiSg1PK)?S;H^YkkGcX4LFXDt5MjB z8*$fVw%(kr!aipWI-0E~na_I29qq>XG;5XnZtS*?x$nkll1l1@vVUM-dC`B27d9?* z=H>b_K3=8bs1|2Q8hjH!62Xsb)1rXb-M?J%Hj0$HXI>>zDg;t0u~-8seAmN%*&K+J z?LMU3zKkQKijZ=MooXPYRIu0nDv+|UM+j0LeOp1wAwq^g3eW+hRCA;p5=ardshva= zex$^g3Z&q$O&I#aPMxDepkS4sE?x?ti;NjpiGnJDf@(Sor0mVvrH=wpaL9*(eoHwD zDhLJJ*~!a9W=*??tuICuT6(Zfn&dI@?w0N`m`VgRieZPvsXHz-?IzD3)(0YNBHKrWcJ4QC|mXI^Bl`FQ%W8>L%9{h4tdmYEviI+f95ZbH^0`!z% zxkt*Zz)PWT*@KtfhL`s7y|jCnmtqJ~KV_>wQ70b<;q2XLpFfa%4+Q;r9f>flU=;vr zfS4Q|9bN6;MW>rwnjr4Wv<2ZWf$&F#fkHy0AB)eTW(XFa`|uR$qixKIFOoHpqjMdE zOzh__{#tb2guVb|{(cU~u-*Vf;f0l#pbrj#B36asmrVo(F-3JyFMED16stzlpcZ3L zxvuJl%Y0zh@qx9R_YG`|Wlaq%sEG#ls;Q|bUMyu636j`y4J5H-t00L)9VdzEQD}#g z#8bWprAewLm$PfJJ_gU9BpQDrnF#nFqNRdoH!4(+tA4TLi)2j>7>F4ce(gXcq94la zdLJf3-|Q+T^R1X&t{0mcgln8#>01OUlLRW4WvHm^<9omn$k)37{5f-zby8*$k7T@Bd@8{csgQFwriM1Hg5%F`#OYY1{cjloTmZ~U~XSppEti?*aqh5NRyq4r`Dfo*M{C?T3 zW$X7zq@#c-m6D|j*8V7W8pLRldvG6?iA!C@Huk}}YM3f%WvJkD`HXL6sQ0Z58$wrx zz3hIAKr-~2XAqqow7bWKb&u&Obf7@;&cy*p4qX^%H5w^aqyAVJ`uY}z8^bINr0nAJ zz2Kvuwc+qcj%FdWJ??u(I1a@x*3YKq|IOO9^x5_5{8zu&@g-#bpZ&Fjnh5aK`F}ou zP>bt*ICQ-bfW!aA>Y82@M5xO~a13JE?c;mENtEL+VEvRVhFzZS(teD!`Xm=K786Y z&@1GCfexK4v}8UhS!v0n<=Ta}QyYWG zYXE={Gk34=0b*eeSf$HH`a9AqNWS^{lwV#0y&)b(0xUzo-9^dLlj8UxWZhaQWXS%) z9sMrrXZQ4`tjxc2m2TUQSaoVUZ>yz`cH8dcB)Kh}ljODm$duC(APhriL$_#dd&Gn# zY8^HPU<(imu=RK5R*9YJcG{^PqMd3+2(h>wMO-so1X+6vm$e^#Um@Aa>X&=eFT3k# zMN7fz#+8$WHa7Z4qMK&4``0B<|h~YopRqj<@3B!!@l4-^*l6CuVsbu~o9xbYa zG`hiA+Pznah!!;~Rz!rFFrJOxz|9uuil5?(KIIfoYDc9};fY}>!hObTiShw8KX5aFPk#x(Dl;jju-ySElbBo`vP3=p*7;W!w-D3Ekl`rCLYavM_SY9VH=0l8g+n05U+ z!NpSq@l7`aO4Ti>neW-+j)Pa}Oi0%u^+4*4)N;rwogS$zQYWNjBp-hd*iT%AJoY=S zJa+zVh4y|>znsLEV0rADnqRwA7u?~K$GVCE6WWfxr+fqUvnyc0{ulDtrhf%3n9Tr! zSTI-m9{A<4QGx5DiR>ZRh3%o}uGU01%%E4I?A;*Ccgg7p6}j-D81#nfMS)0QV3(;! zp)Ezh@rVc{k4lh}R@Q)fu=l4BbEsgSwQ8w@7RyGu@UYrjKVx=J4i(@gy`_xKzHf;S zKwE*euLvQnY|P5kK>;7QCKc4#LBt2RYD>!WC~M!zt6BT3?{hvtA`qs}7+8X_1{875 zKZUHkVwciAKVU>d1+QW;eYRiQ^!aA37*j=EaT|Kzn?5^y&-k$V{y^S_Sjv_GN~a-O zQ3Cp&^8HMxzH1u|+(>xz`1D;M32MYfM(;%Di3YmF2G=`I)SEvyE+D0DuXfzt+$;6M z_t}1vGaQ+O8T#}z9nW=^Mhjasd*sX4ad@S;q&nIL?=;2z+l*}|Lf=6~aKJalJ^@|{ zxRg6i9(&H6UMFW8jGHp_1?lzpXjYJZ1|P8n=|9QoCiiXbSsr(KgA{Gfh_}a1U^m_T zA99^`?np6Tc5I^?IN(c#=x1hIHmlu@PPCLq;2tx>)DXKp3<;^^v6S#ELPo{xa8J~` zN06)rjb#cLqjQ8lMfhn5T{WSR?`Pnz0hN8cg!{$rA~y&ZHqF8rP0sSbpHCCS&NYEb zwBSB|@s5turU_TKoQW`Q9+a$rEgk`f$@#yylH9@<-hlF~`h^ZS3nW4)qY$gaZ`i0z z-U;z$i^1r+L`#tc5#9`>v-ZFbE7XqL@x8U>btdiEa7c58dwVi4o#LQS3>y&fh*55J%F zrmjB<F|4}+Vb0SA z=l4)+kgJ|+A*Q0wC(`Evi1C_Vw-#>;WO-0uY~e09Zr3E}-r?$|M`*!Fk@CDsq&%`r z`6A`zfBXZ)FGR}wNJPr(teh_^$H1X$LGkipd+it0fv9~OEp3<&AT;8C-aCx&STpq5T(nRl5t04{`kCo@V6zzCG;(_wO0`eb4 zC%qd9bw*R1lrhLzHw4DHHc>`XhRN6_&4f>!(@0B((kP=ZG)8HC-D!i^@k5x2qPgwE z&|hD4y-M*CDWkVE4>9)cLA&HCN94U&f?cIr^-njev1NA9L zDL0t6Qs0G_tH5?}xIPm|+y_vY_=f7R@quyEjU_h~}xnREw#17`S0cnXolXlEZ>7+1k2Aci*7%18oirY?DWaa)>ss=+UM}GB(~OUBf2YJlz~^(iPP| z|G=408Vt7Ii?0L71r*R;K94h473|zS9O$i7p%1*Eh~J1t-rR>; zdnFHBfiF0I*%^Me9f&z@x#I?ev?iyPsq3P|XTM_pDHiqev?S29PB_Dg^@)PVL-YGr z{X_uzjAsJ^HtQvixit=zrc)qW`1R`NW4-M?xEoA~Z=!ZibuXOgob*qeTvQ!p%i}<6 zUT?aIM?@}{7Qm?MV}N{48a$}`6iq+rNVx8d%x%)B-f-oek5gfa zp1(4{{0J8@W?P}iff@J`tjM!`rOJV+*C+?p-r^I^^Kjn^L^&axzj)Lq%1xpZ5&uh5 zWT!WR1i2i5AcS+B?}3UyKHmcH2SLn4_9hq`^?ub$<#X7hhp0Voc$JU@_d}m)FZs(~ zi=-WW{ttC;10Gd%Eq+gu0R{+6zz9*JM2#&PY*T|69MnLV1jWDrlAtzVTkB1!ttc~q z)kttM$l-7lTW!@!i>drA+JB2Bz|Ej21htCFRaB}wP1L9qf~3s*TYI0Gd?UBF z|L1*QeVCk&efG!Nd#}B|mjFp&-{Z`{NFM!pySCihtHGuI@(H)vE zzVWX@bJ@6KLh~f?nlenpn@j)A(ERCo15H;=_hCU2nk!Q;xZU29HzXgt&xPaz4eR0XYAs27uXSIsWFHBmje{ z7u^8Z$9n8*|IX|Uxv&4IC%~?G?Oz4hK)QJhfc^576u_>J{F?!G?oYby-&@a40xUcA zqAS4qfLH(PEz}!o<9_I_w==ouzTQsX^RI$0KK7X4tNCjReCLM$&EWg+!EWpAB6?!b z-(OQNx`MAS{MSW4$$sr^AM#FbD86@368|MHUgn~^JnY3+{#9@;`{FUdd6Kw2y7&*r zg@5bG`_mtH$A4c)f^%i+MK^Hv1%R)X z3+VPSw)37BQvh6d`r< z9FjfbnvXzMz9O8>yd2yNBGu7%kM2GqS99PrMq)1AM_zde@lqF9*gMyTyhtoIZf-02 z)_`G&BL$_L;-=;d2 zU1Q4!dWxpW6iKV8CV;VwSNI+K<6~MzO5}H3EiyLKjLejdyDU?rXZDKQ*QGftSBXaL z&RhBIE+$MoCAv1{fH8oey)(M<8t&7gKfIPdp83sJ^6SpFTi?9nsqdox>KojnzA8uC z=EMhHPPM9F`+>y4m4&d&h&~ceNh&Y(344*QxsPG$(u7&lVS28e*~Nb%x>AgM((H?L zOr#%<YrI_D`2Zj=4GxjE)x{ter_C!+`Hnk?~JMZCvvvNJZ%ro#IzQ2^T z@2t}=*6`cq>5O?!*|lBo$B~G(^M1kn)Q$)KtILKplI8ueOgCSX+t<$Vu|8+bVfRM|rP(vda4TM5yIZ1%(-#kkF3&`# zUC$)ws87+i(;^vmRkq_@M;|Q zRmgnLO)Sk)kKG5VCoSzZF9P0E`dmZ$b!K#X8ivkN#VOH!N4a#o2Su{4KK+4ShvMtI zRPy|NH0*=K`~}*z7yoJZWXak%wqBcbS44C@% zCyM@uFD+i4Dc`u=6nsMJIg#&A@i{lS?$419+@FWjt3QEDB|O*p_Ep*T5xl6ur9-S~ zK5-YDmg!_BoXk6|EF{y`v@9p{jRo_a%+=PkY}eQGFYU9b^m>&uZ`O7TkIn&eeYK zKhD)enK`##=W2XPOwJ1`6u&L;DqH|+G!K)VL`;6Z_(RD7wm_d6Lz2juBjIG$S(i-0 z8aeAyyj#U!d%oN1rYG*>9crdNa+La?8X9f(M-P9e@4TH1Ve8c?T;jqLX(RKeX3s;X zq5E#P7rn8n+Hd=f-ocr?Dcb%e{~hPjc_MO!=j(`E*YKxG{pJBQj`KLwGDB8%rrP;i zZCBcC)D=~IAAg@-c>fTNR zaRut1h0ORKBdytdHGX?*A0ZFitEeyOXY{@H9&qLiL$W3`;iOS5q55Y@IJ7+V>7RRi zI!Lz1)zw>V0`}qQOrRrL5-GMzu6@W+`zkM`rMH*Y9VYZvPijuub8G1~tkg|%e4V@Q zN5$eRyrtld@%$Bi&7PZ1u4x6zhAP^wsUlmKlELU=1x=`$0eks_QmgyDqUJ6dS z&#un00(~w$dyxOB?a{-fk!cO;1hT&Y*U_mw-1Z=JfM6#3)_6`!x`^+409B&_LuhZ- zVUwn}Ot<@M$c<}K6}g-QzMosw60&YVk6V&@JG(|AoERuv^QcQ3YT`4~QzNH&P17%- z>~nafzIo<{hDMuXU#YR!@FW(CcsHb7y_KAi28{rJY!*@}cRsFyX79c=b&k2RRNSm| zu;){4teF<*_Y8kb2n_ovF)I}9$4c&qJVL|_E<9?+{TpE9P#}a<(RFABYRO+kcCc^s z(}>|!&Xq`Ry;hR$#*A^Y5HluaM11I$0~J039+i1%FuD(cZHIdEz6}I`Ks_2+msE{H znJ1N_!r|!gUXjG|uGb$5^j&J?oPIG=3Pao&!TZT5g5z*rEzEY7@tfqJ>NDxI|EY}r zl+m(mpyfMAuX!D3k-a>p&*hN9ss5Ff6zjReq?YE3coA*)C%cmMzvzmn1?=UypVyVX zQrPRR=oI#t3_7;Z-s(Y&+^f_pXuv?qoZhgKm4;LD$4Xf=njiDWin)X*yAAi~q!Rrd z^9`P%Baw5dZ}3Wh)!rPUhcJ9j#Q}BnWBsssFioW<>FbfJ@Ql@M^-%7++}AM-1Y`(O zckn<+JtQp(eTYT?z5apbpR=T+?WK`#@s#SditoW+%87{|u)qEhUh{^K6vBs6pf4K* zw+rMR2BAg`U!L8QFPC1>AR*VfPf2I%8@*ts?PL=VcMPhLYRR z&{gcU(*nW$?DfgsKv03$uS&64sYs}?H|*+d?7)mb@Oes>QnHDXSEovv*ryC;V)b5L zRHt5~!k&`S4AYMAB!>t=4{d%bu`o?im)eUm<L$3H=VLct)gLStJ zPh)SFnZ4a;m*nDpxY?>`dxk#aAkqq?M*>)u#cDvxnjjHh1W0!9u+{mKtaX`)+Nnsv zsyiff(|_|JT#)8mV%j?1r;3) ziU0yjPo7Ps)Be#476nI1TjcXKZLr5-eAzdK@!cl2HA!uzuwD(jRS7upBDzs`Q-00+ zoTjGaHPy+I*sU;jx?x+wV8baPFxYO*^hE=>Aw+M%xjG{;lLDDmDPfwjts?A&EKG~= z{46C)H_>2x{y&tm*D^&KaY|2GNq2{@X{0EjEj?nJ!Pow&hmlPTJrXE0PRBdd4-dkt zmU+qMSLXG)^O^FO)yjDL@QR}z=3>eGr`i3>37K4vN+))NCrMc)ui^s6f$<4lIw6Cy^hw=8=yo4w7Rj9K9UEe;f<70jF;2lyV(d7E9v zV>n9+U?Wp&!iGpN)Uy%d{X_<|2)c?MPDIWQ?2epOlb@Q^X|q#vRVJ2W_VDDV_Lic9 z4Qg=FmZ5}jJ=BB~6hQ!rUbA;*v>n=QH=gjCy~F?5_EA+0&7+Fic;3kU!wth4_6<9< z`%qIxoBaw!j`$z@%-8UdujrMcBSbvfWmg}dP{uPX22aDjjEp9G%L#|=T~y>RYHDcq z7aeAS#{Ca(Kc(UAQw}v9+MV&7z59eXfw26KZ5cDYX!n^f5oinJGAFYM1hOYGAaJuc ze6|d6;$&~QFxrlQo+~072jO!e-~}GR0~xPOD?78Pr4g7dxO%?j+mPl$OiC^A2esQ zR^uK)0uae6IHX;$t5h!c&{-LW=2WUIuA|%XB@_W9aNs#=2xd`9L7eYHRdcLhwrYJ? zzV{Uz#WWMfeoQWw^qBB7-eC4sZK;aSv5xu zmp_$i5Pu4e5aYKYk?xFtrYixh$D1W28|y4v9O(<<5XrWG7J|C=vHm;1&)k(Xv}ZWk z|0Qb=?2;H??Bo^`%#1arI>u|3$Y&3=2U!`G-xlgDQA8Q_wt00X=Aw3noq3_nNybH_d=G6JL?Ge6V~MP?~yR?S>2T8iF`FT`EHekVSjvQ6$?` zSR_wqu{Mh>OqZn85Yyx*MO0FosVkubapHy$e>~k9o+#48Vnn+r!h0XX$zV7vS~HwN zwb8t}(TrvYpZOC-GLQ$&i+Sdg1@o<;S{%gGCyLbaWPK^%OLvRt?l;Yw({X16_EMh< z`OABJVvu8}2*9lWXsb|?S@sS=J_S1)4wJ2R)a>YC*252250jZ90z5n37i39*qg;Vr zVtk=9sSub#L95%(PYre;g9Wl2wH-2fh3Y!HuJ`#$q_Yzo-SEAW_tkKVx zKt6GSsj{g~ul)d0^@uO*j+TfEzn(CZ$>Xg}P<@;%#D!WbH#$RZiKpO_e{_k&Y`3g4Cn061a zXJ3nwbY?XK~4Sak6GqHbgB^^1gUYy>o7ps4%dqF~j z4!}$P+_aX}a*fG!t|leMzbRKShWYlRyWw@cYe%JUHaq{`-&A_XI{E} z`3eTC2nhEzJ@i)RdouJvGW06t)kAM(=%4+~3_UIr@Ff%ad;s2Cfc#kkiglfUXTzho z9Uhux&nQ;k|Aij6*REEjbY8Hs_kPQJxBZfIs=Cd;W)Z}bU3-9C#w~_w)lhM198Od3 z@1UGB2P#LbyPc~NyN@89cYews9O@vDnI{nU*NYOwp5`N%TG31&VyM$+s|q@c!C>$J zGP;nu#O*qeK46y5Gzr|E>OF0j_ZYzWodekYh#mmv5hQ|=A$WB6>DBbzM`RFN{A(oq zSj%83!h527A`t|iQ4w{4Lk7?@8shY^{|sSxM9mjL1!&iEBhc}J*nmbxFlkKl36 ze1f%gOpIhM{<2{22_(cwEa^~xI#6!Zue?<;wKs2Vr6R6EvTmr(;g=d<=V@zcis7u_+AR1B! zcyy~*$ED1==~)mf^-&RPI?%LaE~J=q3)odEyFjHUD|0LVWSkzzX|nweQJ;&>WIwcc zqaS$#TW{Ki^(4eE%NU|=ZhN4K!9~uYi{Zt(3&S}U2XZV9rxStsu%JunXzNNcEn|1Kz;k*!N=o*{Gr0poO}*yMr{F;5#vk1;>vps~vxB{Nt=@ZW z&P}rS2Fl*6RIA<*w9_W|k1Ihtjk0>r|D3&dl2{3gJed7gku3<&|8rTvk+59_MMPuQ z^wHQUsm4ZhZR{(b)7XjZliXB8zxbJMXlOJp1H65VY-|XcU=}DpDuE;!?r=H~cF^)% z3EFA1Gm54NvOkr9svo_b#-Y%r?&7Z=E*~Gyh|iD_Kh$-^r|OQ-us=XbVc}M_2W04%)rbg)D_teWV<{-|g; zG`>DTcdoBxuwq|w87$@Mf3^(n>!us`k z6`aoOIh9^Pke}*(t+y0gG*F%8zkR5z4Gjj3CHyOeB5-c%up;LCG7II~dZjAoD%loO zd{%X)hT)Atd?ReIT-W{?gQr-Rdr@Fhhxa;HEuuob?GiUgH;A0H3$^N%Cm+7VlYhe0|b?f8q8On6*)(md^J1-?qZOz31|@f zR7A6s6?#uT9o}5SM}|}tT*{*%%`@c@90%cti(w?Dbwzt!&$C%N1`0MI1enxrTDx|) z+lQtXs>@ji(e@Z~N9A|t48G|P={`czdU(j@a+6>$Kd&~PL8)lY` zbL%UdkyIRLi}=ag0M|P82T%ona=r&<$qDSLEjIENFr8DL*e$%Jz5QjcpLsCCPfLV5=HGuX_D5^|*>I1-T zHS8-NL~J*pe^vKzy5AsvK=f$i%9Z3MF^!h;VOh# z#n3xTz4wM}L!l1$awUUtsl(ab$n);R)r;Ya7|aN0!_aIMevpyq3dhoQ;klTl)%Fg0 zII+6Jzeb|s(l?nT{Q`9KH5dEk)7dh-iD>Z8ty{U$+*e(4Bu_G;$&b z)tsu3(bvvx)oM)0tldZL9T{x}&q3m$(h+J*l223y8fsZP3WvrAq$jnlR;{mP*qqtQ z*5FlWtL?3Po@{RU4<+LNnjLc1MY01&{Pmj!ua%>7XeZoo{qMMw^^&-NHG=1fC&cbh zAD$^|-;K>2Y==kT3;K8hh8=7JVN(V*i}#ld=qCkl*;{E>#4Ql`9lJjxF2S7=n!%Zt zuqs*!1YOZ?U;d+x%k0}-?3YCNEw7VXEt`*hGXAIP+qw(k zwCO^?dVgwp?~+OI1*+R`eM#7DHe)sG2$AtHd+Hr5qq_)dEd_She#t*Z=oHqEy>s^w zsq8c=)3p8pR*JuCbuZoeS6QNbjY#c9|6SsE#iVJVNvJ_CZvBEibxa4cTo4r(*aR>e zA*Zy10f!c%l3z>2v*@;Lq2MHK6(HcN+W&GlvIzdz+#S)a9f>01U!0-Q%ITu>t2h8z zSA9SzyfhJbRH=x58~K~ChP*{mP@O69L)s--nVzxO>^^CDz23C&E7NXFiN9oezR9Lz zy}fZ;M6b2>O6KuR)EmMZNOxte9YH+0N7kC8u1c=8Ijl92gR$0rqSsnS%aF?1iZs8V zx^}y<>nd9>a2m#!7+l<~6;zq-@TCjym>1j8TNE4;X|1U0<%>7$sTU+6dqE1aWhuxG z6v%#vfHyn&N$m^$;zzNvZOsvro!UHSav~64z7%N-+<0v+vG|Ei?jA@IRyw*hqoE}o zgjxPNRzasgBlgph#l*cl$3%s)6#+6!OB=%xpDM%t#^&!N$tn>BH6 zNB9KRuiKxi=|VYi&fDZ~B9g~+;L}pDwMqhBcOW1AyG*3d$s7~imW!}&3kTw5=0Jql z&&Azrj=+9aNNG-idbZ_qbTjuYck1ehUzb~e$g&-)Bf&(oDY`+J42i#(n^D`^V(BxL z^)(A@?_200lI!GbRD~hpJtN;w+?c7uy&&@t51YXlFLBIOBV_F&EztN-HsIvEM4>%7 zSAKHj=W{C(X{`tyXdh&XeWz=M6foX{k?fxCf1)FFy$K^@x;a?)P8CuQpXIDgucF@|mO70J1^lfdb;SvYd(F?Dw znKl#i9>otX^tuA(FYxi=;jQud4SBUXm~~-kZsc_0K?Q<) zZaQJ1S0cG%6Hw8l0=2jV6DKMs8hqL7jst|FVbFX?@5q-YRy6tRhYw@`)lE>@g0Kb) z|MFVoer>{Z7BSh%tt&Zrnh{TXT@YX&{%a3i}0$gp98(5Z2;P` z0ln>D1irRz($*6Vc8N`*LL`C)Kj}^-^cqSm8s`M>3#qF4IyGiiwDvwvc$!mjpPGBs zFi*?H+^0oGMQa}|@!v5>D5v21p}~hqD#UeT>@I30A|0QgAGlAQ!6$W_^h1A45>aqY zFzVRJa!vxChPYnsGRlIjMK4A-XGm_A*Zk#M41`2haG?Mz-ste#(~Uwt|7Si)4MUjC>t zVK2^e`*2HU%}#=SA!J-9Uxw`I&b_gY?CtA=@2>oq3?`9EYeZj_DV z#HR9VFVC*|jJQSu;w4!j+u&w$^-a1$pe#kYL-}%^B%xfPugw^zaorutas9O{Te9@Y zXK2W}0A5;EPfdI*QMXCvOsCk>6Y0oIB{s_BBvb4O%+%{caT(Hk-pom%y(rIKmT6|H zOV4kg^FLo73pr9c7f5AXFE6+2*GliYbzM)~DHqDb74lLh?uF75*~EGvjj<9QrfJg# z%PHpC(ugE-vcX|B@oC00LjtF2 z3}ox-L6Q^sxK+bjqW~=UaoJa@>~c2eg3bNhPs^p zo8{h||Mzj(*ZD8sGa>HzFCVD8zwVy@@{NjeXK#|riJRp0|7XtsNVoG}k3-IXfq^;y zYnuqV9{9{(ud}_r0%iAaL7&d;~RW74o} zWRA{*?$PW;>qqqUMt<$sdVWEs z8}yCT$&vLmf8wz}^Q(`nTgS_hCDo|Yo82Qz_o2&?C12_z>xScOUyiI^J+RhwHmxz= z>E{dPTSMi7`ChtMA6e3qkQ()z+N9c z(&5#PKs>QgfSf#fPK?DQomLCbaI@rmt6Vy`oXNX5F!!CoAG| zEiB41Iw0anG~-0cD?+Xn38s6JQS!R`)qN|{CZA!LYy~n7WyGz;5+pBP<`a)2hw%La z@ricIO1e8hT4m#{vf}9GJgaPyQx>+$aL2sX_>acRYUI;++4cPLXOaA|v}306$CR&D zKFC97<;(ijX8kLJa#niiOMImaM^~~^2qpP1zOu<&P}Kphtd$}m(N&4-g|l+Jz+t68 z)mkY*?wys_=&Hn0*;F--EBP<3y=&#lT6qP}td;Zl)m43!3&eld#r1SRwXYQ5Q$pZQ zV3Y;cN)7c=ufVLU9d>dLuzqLZ^J)+L71B}>oCSTZRjgQedOgv7ZMchSrrFNvQ_fI# zi!TEe`ULw;6lT$P+roKbb@uSM4fqWr787QoX5I%-sqOq|DiulR1jM%c+Ky2pf{R6| zFW3HLolDC&u!)u;sdC~uVJOg`==jDR`)p!Q}zdD}u-sAE9@5Yn< zzZj1_S?pttSneCh>8+(b(#=QOvBR$I_}oPE!%3Ufp;m8s3Dn=wl8I+RySi2GFr_=X zV19U@HdDrzN_Y-;!L#03Hph-1=Omfx8( z-egF#)9uA#T#Sv3HU$yFU7YZo=_P>%N{7!v#a&t~ff!0BiSKl2$pVY3(&G8rXxH`K zu-}w4lj&f9(bOv<^mIi0lZ#Oexh0}U@V{Q@b=}2L$>MKaBfJFeBE@#e_&{TLL_r(b zy(>dlJ567ztqieNC84bMJ{3U#wFvnTy zTNO-j&woAzGVNf{ugO3>dAJc~=J$)_mWpvaBUT@jg;{rjU;NAc!ZYGv0z;U!s^#y0D3( za)m_4SRKqJYh9Jkb?{zQo@GxSXO(B$Cm-6XaqmgJR0wFygsDFTtZJXq3;Ak^T4_=e zKQR0SheX|K$I)kDJaKp;=J`g`#g5W&=XdW45T_n@)ZN@NQllS%8Z zkL0OOzm@~z7a7guh%O1im8#pCCeHNU#`2R1j*zbw4SGU+-!r*(%EyLO*8R`Is;Fi< zDNX6f>!sd;3@qBB?P>m%kI**nFP)aI<(HziwRaVlpJd!F)o$25ZBwg8n~HxdYoB4$ z`qF%rPU~1{2rs#nFGK3?YqaYcHUT-f-ko{UXzA~;#`2uB;_}n|^*@p7A(zmmm-=oR zxsYKnFOraZ**DpCykXfDVwPgZ2^=gLo~yTHdDQfC0Wo{BB>!MZt}lEw1(PFKGK1|{ zG8NAWpwJV7L4lxn=1D~00ZVhlOvE4Eya#T4?5YnFZVVLAm%nH;&$7EdOA;G~-UfdW zMKE8YxaFC^cmN;LV_}i(ts^g-NdGdi#UO!uaBRF==nbnZPY3W_`BegU`m7l_=yEKQ z)|)5+`E0{D%L}+P#3v&iV{w|itZr0FqYpz*$>#jnPOmB&cosy@C0`k64=EbH;%&;8 z6b-kylBdzb#6A9iXNi1g&ANwh!JFd6)5AXk2dS(n+5F8Gkb2FFu8(=0&wW0B$MbhQ zBDX11VR*`>+EXsK$}TtYUN{b>c%Au~Lau%O#9JT zNWFBU!Mivcw6j}{ql-HT83Pr&qZ;FR;K7GHzvo{o|LTCiGX8q!pLdwR zfKtVJNFqQ6S#z^6=O)!_2?Ms~?s4<5HU^bP4V|GwB(RO{*&40gS0WgDkNWNv8m+J1 zst>C!QIRyh#>OFYPSG3s8&~KTc>U_|DczKM##zq9#t!<3!IF*tfKUB++Mg2ar$8`M z2Z2I|mZ|RO{;bRLH~iwqVi>WyEbGGZEP~^R;;AO|hjqAy&*^d`5tlSj?!#%XQslh) z$jUm8oWG_YWuo(swwEkD!yXtIgg0B6H&E`44B3#jfOxF3EYI7#V0@asssgqLKK;Ox zyzkK;(Ui0CB*7JG0x(-Dm=y(+p67CmVKd;d&x2L&shb>4U#{Z_EyoFTi`N?6@|rHz zT`esR;-*k9ous_d3va8yC)%o00N@`g)^c#g64JbpeO-53v1j$n;&6$iYah&MB8a=H zl2zS!RXSEyasb3Wrl340=v0yVZRhhC&sUcf^L@(@L`Vd&SYU_(W^M`zer)aWeP~eo1}sngmduMPvx@iaGJk9AkWGJavI#scV>61>VsGUKhPl zJpaPT;Nk@ra;hg<2K*b;~Du!jGjQ2>3h;>Ng8H?lwr{4<@fMn5rb-=kzpm-9C(u(zs&d0}v*p z{+l9$(EjhggLWM%)`V^0vx!a69b>RQvF9`fPFOxxVKl!)aQF9oSTZ{E#h7tSm3r^@ z#+30*{%Rlqf>cce=jrNX(bJ;wiyXc~y9`K-8$0a5(xC-iJJbb^T{g7dKhwncsKL## zOXeU}24*_h{wk91ZDyXBqAYv+b^a5APcvC@laLP_;HD~elW@D)DU!K_N0xs8fO745 zUfUPgA+7*gBZ5txzkU>(5l%qx!(aiXRu7WjIJ1wCE;>+z8}<$iHleo)U6%;rii_dd z^GLCvfNn(UPLB2gq-G~1NafW4gh2`@9Yo*8T{b&EvavdJJ?@jNao`md9{-SKV@ zG=)!*913W+xCy=-9u~qx2~_{Idh8MeRhShHR_A?Vq|T1eCS3r$WJNF#`gg(LhJOnT zPXG5oV84dIe_jj(Fc8$MK|IzQu3=4J(iUse2GTEMlEEa3-0=kg&23(LzBjrn1AeBT zn24o1_JW}^i*=H_*d2Tc-DqR8xlM@mJi|xJWiFZ1dCQd$k@%DR>KycJSJKGmv@q!; z4qp+Gcd@xj$+IikbTgVhm3j#jPStl_LN^+Hfk>-ARs_P374W?qo^pMeBv-56f5NOv z_zBTRR@u|XEldOPoYyg24yH5-IS!RZcMUg7iM+Ii-l>?onCsd;mGIq zU>M*qh{_e1=4R5D|j_B{@|M4k2XmOg1DVSAs&?=v#J%#k1_t)nNR?*8U5XtpN zpP>#}XqY*djI-pY;)k_n_QE+?Li<|csdZ&n5Cja z#v``t23o#JcNhD?q%F zqJ#0+Hk3qiKv=QoMP2lowQe(it&L6mx-xFzzQrRq5XtVndbEWF9u%yS*q`|(v3Oia z-SVi=RGD_pp{@9_p~l}W%XBNdaVvaq2> z4sG2`@o=!AWnlE(L418t@2?N(W^}pi8c|T2eq|(5TCu(SEjoxT=Bj&N<$GD{lI=+21-deO{05^gYqpnoGj@0C z(I&>E2Tb%m%vqPHWE!OUQ%8d)!;zt4iXdGO44zr3-VMM5Y|;a^^*|z(rcI->(_bHI z?%EoOZTfCW!^_rf)crZF4q$j9eixW6!^{hFn^w0;0O^U$`uDUYdOJ_Vd)|vJ>Ay=W zGqbd!L3BlCaxC4cz($!aI2mTz9Wrt=LVO(^9v&GzdPaCy^yrykU-O4z5eg@dOOYeX z#q2XoB)HbIF3`4O5Ay5iF@A@ON$DfA7;WqI(5%;EF%b)(hU=BtWs#>>Y9>K^quE z;phshIJ9p8tJu0y+mWV9u)w$UJ%%*g2Q(^*Y;tvU%!&rfWz3FI8xZy<13S@dY;O~3hH zKwkqpH3h%Bf=+keGsgmb(X(BET{n+!5s)2?#xoi|B8im0{IKNlk+4{VtLTKTfIm4B z0X_Cc{Nhr?cnqAKC0?uxWGM#Xk*&=+)PT{pEKqe?3nJVOP8R{PdFGFO!o7NOXu7BQ z1Fn)qPw0TpG+*ucCtvO6oqMlfkKD^s2@uu%>n@+QHdFQy9_VST|1nn!hq{HEdSlOZJac=2xEbjg?J>8LsKy2E;{S%^JL)%g2oQvf zQWuNUbI*rozs@wI^JQupgxzguPB&OUm=S}?uo`30Ok-EAZqT!opSDULk^RnAbd%tS z6CvAeui1{?G%NNb&&Y|^bJJ2v2oK!|$#iiRO*0ESq#8fcl)m1^!fUv@cmowVG5Jld z`cn_2P0jJT>1>J=-tOCh~0UM^8TF$>7i{ z`0YcUDUTDscEdxSpYyDpzk{D3Pc8qlxxeXm4|x>NYWe$p{yoOO|K`4ocMbft`Fk7x z?&IHY`R7UFzw`|6fPn)C4fG8jGIVHW=CEPI`ETIB;lus@p+mE>MvORd-Vl{_PstKQ*JaBy5 zIdGcvb6LGha$Ih=m#(jg*OIkuxY~ZOAz?4d`dqenr%8%7czztJGCbU=Xp@}i|M?@d zc5pCA7N_TiRKX0bovZ(tGZ8K2As_&Ke1q7dv>UBs|9rRGz}P?jRrG=Zdpe$K?IG2E zI*~~Uwzmt?u&`1c{)$)Y|L&p%6I@m21^@b2SRUKeukWEdh4yqGXMRa$qRB1^A**^6 z$+2GQx8%4EW&QVJml@_6)!l}<^@r43+XhcmRcT*3PW}Gp&x!#~kOxliL-7x-R6o61 zG?$UD6qn}t>)Sw7tAZan!H*Cg93UztJIxb9|LU~&;r*v)+D$+k4GsSEmwB&?Pl4@^etl{OS0$)@r%XZfRU$l~H$G*a zv?@}EJZnmcb<;GvG{<#6K~**-WKFrkF3oP7Qk)i_GKqSra(=8U?(e{Y?bn=)Q7a24JtzJefFXpUBz1iPsDj>9}amTfqo%!Irc5O zBK40izK=<`F6DOO2b28J!KUP_g+rP5LfqpPPE!Aw`?mzrUx}G~*STzIjRfq73aL7( zr!r<#hgf*%8y^XpFt8b@Ve{sV-C#qc4mI?pw@4%DR4CeIooOeiy{v~@NWkdgm$A}q zMdXrp*7`3aG-%2O+|7if$iOF~D@H!UR4Zjhw7WR2{s-CWcB!^0N z-Pq%gdbfK2^ z?zFeDUAm)~mgQj8iaI)FNe`%FuvI=)z5FBHgWB%ZutF$+K?m#d>)l_~cuz^5ysaEb z>ZSMxqPW)bP9i?S$Lh!yWnP=8a{FY-MIg5AV4h*LwCpxd_UdV53b2jHy8RqH9NG)Q zLx}Z^uA+T-WH9zOgR6{SewNr{+Ky4Qb{e@ObM>hluHESlX0zPgV{IZ+L^csjFs^r7z+&{JE+&% zLA-{eI>slMgpu**$yC+8zjPHlQ}y&L9RQ$J$D5C;^XTQ0Q~DI5OHokq+smWP=S2@^ z^q)vb+`o~A6E_1nJK3&Vky}=&{41LfF?WO#6XvKrgMorJL2dpU5Rm?(5$mc4=&1z| zl{O##l&qA^5?LbJep0xX*4a!zjt))k>tXNmsurWCTs>u+{yV12Y?L1N2fY%!=;+6N&8QJ&i}{0W!!a_cV2WjCQiZx1*DBMhD92jVli2$Cljzfv zxStTj5@!MDD6*aqvVvaZbn{eqvAviYNG@A+t@EKV>quy_W5J$Af#Q*DcTixf1+Q}Y5^V4#QwNf zEc7laM!k{9i@r<3@v$#XRIh(J%5z~^PGm$E1!~=GxG;ZYyEy{1fz#UrT$^lcq`sKA zajJT0dR*-1n1vjBT2@2zV7$f%`7yjIq@KR^Lm@aH$GZ+~%j)@AArO5d;_uhI$>^WuO>nc}l`rV!UwyFGa_G8K@i+ ztzAjQYCrljR0em}u~s3&F{X2Ko@Zn~kyy}Jc2XK?d%LK#wY=O*;jZ#>u`NAp#R{dl zMLG5`A>yq~I$|6dE4uqd?>4W6eke0~J3(FKMK~z=2AX7r?^M@)0?f;E{PoXq4?_Bb z*#9}sBpQgv#`DW#k6Khi7Lkq8suPn}wtrz7Jf^%4C6=OB8H;DYpDy*X75w!g(K9v7 z;w6qi9k7cb)v*vd>b4vJZacce@3*6bBYe7Ji7lc%!9OCFO@+y5>#=-p)WQGQPZ)On zqA?cW2@%;zX;vuCl2X80=EZ)iB&Yd(TCH222phkt>=jGu87P0+ZuH4JYwHF0ed3XP_Ud}%ON%M zBFw~i;Yeq-tzfj=>oX7_*h`Z`nECT1Hy4!Tz>wrR^CmWiD4W=LIX~(zY2ue7myR=! zU&HabB>~K8-LE1-rKn$=lLSx~V+FIHSG2AIs$JKg5uN(nPQ>gayrt zhI@#wYSq@Ow0Hd?C397TOZ!&#A&V}AO7D-!)R@9$>(XY%IRn?o;<^v$LCJxVAhTb) z@*^0?HEduBB5~w_5qd911i(Ahq-yB2?P}xjk+2Ild_9$oT%Y9?tDNA&R`5P6_#iR= zt>Ah)SVtmhz#57N#f}Ek z7q9a-UuMU}Ny0M{KJ8lNuyG zm>m79gYTcTt$bGqRbgdwrcCsvn;ja&U9nZN19Re|Y~+yEG*B_RjD z{0lE+Q%o<00B|Y2v}kE@zYEAc(hW<#tN3|nd1BR~=*_NqA*GgX61B80xr6{hu&12W z6zHMe*9FYmqX7tgO=WE z$A>l`%>FL0gD8aGv@P)qQZw?>0emaG7dl?eey!5aN9`ZZ!Epe(4Bl%G`tYGYPt+~L z)bng0(+gt0i7vzraNKBU5z`h+kaF5yQlBzq@_Ocz)+Xtw<4%~KuWQi`>8LtMPou>- z*jAya?r+-)sElmrvHi$~&X)s9Y!3QPT!n?X8?I(J=9I%Qd^gy&_`lYtxu&BgkE5o> zClvu%f2z<13YoXH`Sz|kswH5~;={rXlp?#ygnr7iGk_K5P9n@1qP@*`sIMtQXui@D%IyR&=mKJ-Y?9^^$D||dpQ;+{$Mi9B>P_V6y9T>g|TNQ0e0GUp} zrtHKYgz?sv1qXgDr%^5}AEG9;GLc;T=A6rOolV`(70 zc{PlDW9fxybTmndjTKUC+LR_8cM~o1Rf=uQvd43@c0k^-hxx7t)vu92FgJq; zlN?>a{6J|RCMc#*t9?r^vyUv%PLHjWZEGw(Ze7RXil8XS%Qz%8>QtL{%EUb#L%^gx zwwpqeIp!F7xvBfq(HGa+gX5j{F^0=G`>xL(>fzsly~ns?+k3py-QL4rp8*xua#cTb zGY7gZQ)Y!~Ge@W7ROyjZ?eJ)^yUExRXbWdm8i_kjIMUC|(JS6&2X2l&n_=-0Gh3S< z-5g>mFe{6Pnn5%xF)d+}0=_)Wy!h0L8zi@4cqnUXuvI!$b_ylb$=7t*RY`j<&51NeJTid*YL&fuDTYOz6|{qLs*C^2epI^3NXOrH5&|MtnxXnXQ(`!!r5kZ+H* z93jzhP_x$Mabam{T#cMy5c^C}2Hnu8%`h11)vNbG(aT5iSTVn{r7bOZbsS+koM2u& zCZxT2;pK|KJNi*va{}f?CNCUNP%KL>bhDObIvj~&mZRV1TCrR%kbFf7t#wknwMhbS zizCmDxaXR>hdhQmf-{o75HByES*bL9f!ceXm#zuVB6RFSv}>sQSqaU1h*#dtyUcmh zX3c=~mr>c5=0x9azb;-@j19LnT>WyErene2zuB)(fWe1?IdTF-(l?~7D!Y)qj~}(I zn~Am$1MQZ9u3w=s12Aqg;K~+{b7IoZF5vT7p(hUzqv9B>kRe&upK3_faVZ}eP5*=;HX&GF zgW1Ne+9iTMpZ3}C2DA_4=7C#^S?((W8ue&9T_@AjfDi$3!h1VtJG?g$})#qM^F$h50Y*ULx9_NPQ`=So|P zA{QD83?C6_uJJvIurrcfV!mvBgx;GRP(T3{y=vzVS_=%f=B#Qx7Fu z&3-;bmia8SN9_=1kY&ZNTcsCr5@bV~$sVKo;0yN3jZ+a>&KL*3gw(jWw5frsw6d<)ynULt`bx8|>Q~%46*~%|V&1OmIWY%7y!P%D?`Yb7 z?p{OK=V`)zi=pfDT)Li`AwyVsC^GKvRu2Jscd1v-5z0P$@o9Cnc^*0@g*9ofuJ2a3 z%m_3uPAr+K(l1C-(O>QqXy#Xi*bDE^)YSB7U5^iLLY>vMnxceNn>VpG+rN^Ngm~Kr zByC!bb6KucvCpLmZ|Re^4hsDyL6fJ8by+82{cWlV)b901#rV{ol5=dT8hzgQr;{Y~ z{y=T^O~=rNkcj$e$>KtX`d54k`T!a4X%OvjtYq`Yq{^KI1 z_XE#6{!7k~H7PAE#Poem#luFbritm=ykqyUA}0eT>GAEFJGw+~ex^8GuLo;xmvtr8 zjPA|VOc%&!ROF~u@mC4vlnVu1o5!>PKTH?q9%!BdsUa1!pmquwCfK)1-FmGif=|&) zAxQ?SQC*v~%kmGEWP9o`qafkgPGx!Gf|Ot(1JKS8%{$e5S9IxOS8`40XE^^%=x43q z>78|3@6VKa?Q=+AUHIy}UW7ttB}rY|ufPI0`4h9Lt~TG}uYX;z!sX+VXJ7GuyJsKg z6_M2!_iLphH5*C9886Fe+$XNWl`|=Th=jHJ3dade>KfgqTz0y#7{WSpj@k$5q1#7& z6*)tb-rB4mRaqzTJx3kR)I@jnRv8Iw!PirxxUbtNG~6|Pd_CK&tGqSacsYvKSgo&a zd7;NyT4*`#r}8O}aD>;~8htN|7Uuk_Q8c3Qw}3ZaO8cG&&7+ zz|xazR-}5B^Cqx;(KIReV7UF7OnY~y(icfu!@JbP&lJ7tWgKMorQO?bo%)xcb4_0| zEZTk|u8qcZDA#aaHPKYd*GS94$dElkE0Ab}8i_|juGikm+d*o^C8%z*Z`)ai zp5g^#u@A6iLwWs}U;o1DKOL&HFkaeOY z39o&pmScYxFY&tCgvZ<>>5dH5^6aN_{GOJqHbSG)ZHc2K(})*d86^M44$rk zY~&O9BAJMEs1;`!#^@sWl@y!u=XuQ{TOgrHch5WI!ibW8@|RAY1y?;J$)(wGgkR!( z2j>Dw2?t|9JHa<>5} zgI;0Hbn)LpeoDbk2d>CGp#X$biQaZ8y|w6Nk1?7vnElRGrZu% z{_BH~>vS?pkBqXbv`=1BICHiu8N|uVy8_#8kqV}f60QHbN^`Jy=8-0H|5m31Yvr^i@KrL4Q`c zm+_3{FTqSoijUc3^lRfV-<&)af&Aoi@SGegw5&HixkT2MG2fg#Rx_J<@OpMrlBa16 zJh$Y;26ZaVsASgZU?F&#CxfvA&n1|b&)p&Vq1^61zkIKuPZ^7aF=F-6?2 zML${-GGwJN31|`ihZ6U%|51)fQKqN(gi!>N=iYIy<+m%h(B8>r^}VG^b25<8(dDkz zoG10MTea%8izVlOm|041mKc%c0+GHOn46y=3X*oxW}%xB?@?mAjIpN>ts={rk~48i zW_W~<04Iw10C~FDaQ2W+LHv*?(;KL5BbfoIhJxA6Cqo!$w#HcgZ37W?xBL6Fs<$-$ z^HfW49@kGxaUOZD{m_cmR>szi{?*Dy1Jf#I+0v3*f*lx1v9X|tzE7H;Zst)Md1;aM zr16~1xnfYLovI3-h0fG(Hx&XKQ5!xv#vpUVM?Iy>HwQ6$(Q?>sg56G0GxD>XIqLQT zk?cx+Z0sB540wK_$Amj_gB>9VSocSB0JOPP850mA0TppCeBj&dTF&bs1#Y}d+f<9q zsTM*J8WGQ=-9i#r$oh zBIXw%aHmm{E30>m=svrvm_M6>eTw--eveAPiir?e1o`>aI{Dt(m?OVNke}C8kS{`b znPs@{Dpw4B!YMM{BAOPY_!1-RA;{mUHvGYzY?r(halZ84zBz}*YQ*{0#XT0SCIP$X zVV0gHDM$J(G^r@;-H_Ijj#63V{yAFiFTLuN`^V^8SGm8@3+P29qYkN>U_Xm$hFP90 zs?%ybCntB0UR1{PQ0rV|VQCS*I5Lf+Mq!upS!-y8TwWP_X?0xdYuJAu&-yw%z^pGY zhUP!;9~Zw?vca|=hj5-m@9(u?e_>a8?Jf9$N8f25+Ay>UH|W_RmAP50*s=7+3&7Wp z8-r_nYTOtC1=@{aB%vA5 zuFm?@u!vY!g+v+*J^U09o|Drw>Gy;u-x3ko3CsbCiD`trcl9FKx>UI-)wWo=7#@RBX`_ZlTF9|C15`B- z?A7gy6U`Std3;CjFY;(xy^IxVw=drPo$g8QM%|OF1@jxDw^J}p8|Wa-LpJ8GKZ_?~ z#(64#&BBqr2aAxYww@>64gQ$eq;t-WpCJA+&z!FnhpzL+`i=NS5%Gbnok)pZqvO}D zB`pi)V()gq#%HM;K6%e@#9{v&_5CgXM{ewSdAy=fNQFkd=rYVx=BPPOnAdyiM2tVu zJ^^e%gq>-jhUNic`2v(WB>3TxBNBlMiV;5M$J(U?62MJNKyv2rJ&@ zDchh`>iNcdE+d$4qzm1R#7@jk8i^T$r&I;t3*rw)lFn+U^vTciUdYs)MVrNLY?jx4 zuHkToWT7Cyx9s|o%;-CV?43imfJHFe3TBhulaR1F?(tUkXtvsz*D4b|ngava0^78zv7j%nfyP|asQ{C-6#;g)6!8!JoUMslP39he1Z5h0$%ASbY z#j2>cB4Q#*3WP7OB}jssj%qyvy+=JZ5N7ma?TS^dF?g<&qoTs* z6XmMtfzZ-uE>qZ41>mvxJI7yzbrAE z_ZI~BN&e3%UOOXED9HL3e}_^G?jsgUMQab)Yb}sj-z#N;#04#S;cE3!$0w4phrqF} zzzTfvbbb~GO6fm8>AuHPr~|c;cn@S_FoM$nzxYL18#Cpid|Y7F`tc}=as#U#l)u?E zpA;tPzT$UW={(2DH~)($umrO4@m1gARU}4?-=vmpC=?9=n9E5 zA4!I9?oUYk*@9yUi6zjy0H#Y!Gtm>KI{AEHZOoFH zE6c*FhzpFG_{Cqobc83dBuicXz+0$?|eANw6zhvv@fJ_1nt78D%RCKS@LaIM|wm1J0>)t}{tb51vOCZkJUxC7* zE!=P%^gM-MvUOpZn|IpmbSoww_0=7DE=R{SAI`2+7(JXGUZ~9-UOHW?&-<0;JMyWj zm_Gt8?sIC#vRdNl_cd*LH1_Q5u7h(2^@ZMp(hW&>4Jgd*J8c|spn|4`&oamqZtE(c zG`0)vacL$*#y*IQLyheMsey-HIkT~)7#8O3L5Fsqxt$EMyQA;y$}jW>ciUU+=gztW zB)j76&CIPoxW(RHwDVAdheweCI&9ThVh~`(S|O?Y_2S)zTs`DCa<6`OWfmIOy;)9# zlW~u~G_sv@h2YnDm8$Y2jn%pL7BseGM7I+vb$rnq(RP;GUcRk~W$O5T{(HBEN>%gU zevP0^o;!{#X)AVs>(#OS{H}_1=wofV$M*4S#oGCGVtJGgS(`lkiO0PBO3ms= z@y8Pj2Re?_19D&W{I3(br@`&S4)&J@x0_cXHDkxG6AROcQ6(kSHI#EN|F*mlo0#qD zgR9oNnZg$O*hCAn)f+cqPS(bx!2L^m2g7HJm}F;Sqih-&TKN_4M+7Ecj_NE zo#<&964%=SFyhLicg`Yqv3&L~At}9)4G3(#wQ)?!Qahf__Soz6M%uMdeAX&e`@Z)f zE+gf(+4?-D$EJ^!Tx+B}M{T)6NvYE-=OA}F|GGhPIAO)VE}Q;|#Or4_?@cs6IaK;C zkK!JdhGs#uw(o}r&B2n3f^%%-rX;j}bE7a2nXCk1@WJS`_e3ryMOP3BAM6zX;oo9! zlFF??5w*w8o^GHS~ZL+z+jcfe3^s2fj>0 zmAVhhFYU4CkL}02t%#)}>rCdM?&7LSe{3&T>Wp*#s3(@QO%RWLTc)*1iXB6k;yTRs zxz$&f8v=v*=CcETs(a7K@sCk$c~o26)@J#8#jE|wz`PI+WhT&T*fJ{JTe}Wvq2jG>Z_Kom%v{@lL>y7nf)&Dwau463II!z}f^bAg4% z<^m7X^;ucbca}##I|nzb&k7y8Mg{P+c+leue^)fBJq|jz!c1Em zAK-IxsXdpp;qYm>Vj6;ESC*S6UV^F%G#V2C;md`V$w_`UOTF}qZlf9hBEy28*eL7MAG?Z4Coj2~%DMaOiv9K?Utl+U z$!lmJrg)=Ud{!Dc(m!$SI!wXsYM4i7c{tV4OM$-YwLo&Xm$!lT%%TmL>b7NkCGk+ubLfv5rADQ*2o5MSVOFv_$fb4}e;GobaCP$r z{*1k7K%_3s=R~*-y9&g$@(og6egUEMO`THFmK-PYTwN(PDgsZo%A(9!5XbHNHRe6f z))ObuU^@u6TmM~=Wa$BREB%}@xJ%Cx=2QaqF03O`da{!m^)C2gz1ziU);D0y(NCfG-8Aoyep$qyP zz^|@M4d5qv3}6{s-d?9s81Eool`gse2}L9sazd1 z`Z-2FkAH>ZTq_7SCmBxYo+UyhZY0o<(1zZsASlyLh2FUMUzp06u_FKN!>xx1-5%z zJ7KFEuzsg~M5dU@#0iS!pb3Rd8rkkrkNWTda0ySWIKCBP8|Yp_w8d^?{-XPil6eZF zJoAOdhmIqdUkt|$iBk0cu=Y0aQ5DzY_lATJAhJP%1Vu$fMZt=MDiB{lSfJI&0+OH@ z(EhAVQ*BXp1;r@1*_zFDTUw!F3yM@*RIE{nq7|D6CP9!FODhU03fhT@H7a7z=sw?b z=I&+_UZnreQ_JSwnYr_FX6DR!n{$?O4A+|*pLtRBKTyy%!@>phD}AA58KF7j$ATff z;Zvxb00S4812z7YXULA=G0w21z7s8;CIf z^qgcOzgG$cz?N-eJ}fO|W`EWPTMn+vD(SwaE#qp**kYk+Zc5)Ovwqyuy@9VRh(j^y zlCI5hf#FwD(YOJj;hsBA-9Ns6r$E2x#Eh@rI$^_UTSB*SAA*ouT8}r3Qj$rQg=+ru zJ3y(&vmDBsEv7XOA4}UVC7bQc#h6kW@|zKRkxeP2ix>2y4vatKkn@|Z4#3(9_FnS_s#;6 z6fP>p!Lr4y|DZRXwOq7?(W=fChsh9k3a`xE#V(e;>~f%+rCo92aMbes@9B9p3i(icGZ!!GE<>_ZgZC;wC@BGv>7XLWUPas`l~} zS+;{;Q;(pTu`!bFb{92FV_jhKN~Wut53k~xJ4)Pc137fyPY=tA7MNqSYH=QOhNF$y z2HK9l|1yKFhslQbcy`uGOQHXK7g^gZ%@aT>yqgEB%RPi3OmpddNS)@revQ5HQrv53 z{Hz+jH!d9gAM1L$d!0JV&gPONJ&1%2zvhH&PSq<06X}|_lC%8QpNARt5Y8^NFOjv< zUwlXNi_5+6dj8_Oo!|949!$a4OIlsHp0^Xbv37~tHnO+6S?g!vW7~3R+lhT3r?v_u zftQQ$HQ@P3*ss4=@*53{(kG%OR#-PvWh8$gIwyZ!cmf&B6W*Mqh(7t|+drZT@9H073Kh-?&HyK`mBJ-j!JSgETC7$Q9hay ztCCM*RZ`A+*~nYRauJL5;3F>YWV`o&IfoT9yN-UWJE%hnGos-#8jz7Jy&oO$+H!fT zk~Gl-&x8~4o~(eh_Xgnnr9g+<1Cglo@=)BYq_bq(d{P~Mknq&ek0~VnsG?FmVnS&o zVeCIpZc`5yv;UL0O?{{u zv$^JL%yMeX$*HfP27 z$s(3JzZHrE%foB*`E`EF!!PjbC<3hcv|9AxK7rWpAU3tRV}=;7#d;mSf(cQb=EECS);W}otgz-dpMqMInMb}Yv`5J2uN7n z8frQD*7R8K0XT1&JjvX;`*TiF5r9RPeM7}2rP=53FGtBYCVa1b^XTmIc{pcp3Bt3Zw3M}{|YukV>)tYe!L2TdJ zB#2#bW-`Pc`xy|MniH+kQCk5V!jXeU?FvUy8YU{f5X7DrmSt`inE0aAvHF9*GG9Jz z2RXCdAfG~EaWt#!dj~1in(LkwWk^X%;|%j_x4ECTYi?AcxuaRmCFutPQ|gN^-Or!t zxC)oQlmyc~rzgX7>J9%BOcMep0cv4(uIWIPCVulx|$ogb;%PPs$s-<-Ic1nY~U&%rdw z6=L>P)6fM|FK@U~j;X`DKW|gW-zIYYiSVrgKT9r`oE5(YVaJV{lsx=Z-^T^|{A{c@ zqYFvEQ@tcd!uRsWTz9wJu7?_zH>b3}sl1;{@hzgO|B|&>JmD+CWR*(@QfWIHmTx0f z^6TiJfss^d&pA7}k+n-miB&x!>7&xz)y=#-o3XY$; zTeLY-Um6|pt&T*c`_9(L)HR_48MmGkO%q*&rzFkqyh4a6zxfL$`;Kq5qvfKR<&pd~ z$fu5jud`~BP&FdF;1^E*8cGeSuQ||3Xtj<}U+`47T9$!g$p|M6ra1kasjG=u8cka; zsK!5OvU%ZaIfWSgO6d^+)x2g4bk?BXq@UW;qbf`%qhvrt z^UViWBIe&pT?BjivF*9E|9&gfjJRu&N<`PPNi2ZY4DziOlN|!~zUC;XbdjGWD}2MR z=}B`$$^6C)qNFMBX=$qX#DDps^iq~4&f7(>I>ZcJr=q={$vCS);%3aW3&XZgiK=)2N74`GqPbrV;nH60{f_E$y1>a4=6~<<> z|Bj|uh34h%AEAVrjf-W=6U}XQ35<+vLnpIxlCwUNA=ZzFWRC4P(IJ{`9&sfy2QFs_ zYYut}HLOhM7AO(B{LelATL=~HUCn@$3_U^{&$TranBVF53Z$s=*9TUk{4iDhe0HHMxf z`38+w!q^YKQKJYS#tvLv(n-UM+41~#zDXJn9kWBSq+Ue39K9kX5*3aiZ$c*S%>IkM znt;L&q!ceN5bd`uDp0}?eulGHCaR{PXXyQu)Xk3af{`oBGxC%o^xi!)F~YJ9fgZ^V zr!ikhaCdSOGEE8~{^)E2f-xC>Xhp)ZZ1&F9b>;fvT+7)9XMDwc; zmhTHIZTiASxF_mwc#O+B;vPtyHqqpyf5%0W@#~bkb~oZFuNVeG*f zA`lmGhC`fTVio5TgS!RIXjYVKw$c23rer##rszb+WeO1cPeRX22nq8!&j0W)A+~nK z>V>qwpCFR7O6%HiB*Sen>J!i31!7wwK?={RmVG@O(4=y0@N@|P%FQz0j%fbg_DYG| zYS-+#pGOTU8#}ATXIzrKmv7pCpfRS!oUzSisLKE52AT2E0zZ1;gW3PP#?a})1y_MBZ#c!3n-GxrI@}XiYc_HbJSSH zljZaXKV$ee!26h>xs4nKGC;pMbqI%nKC{8X%CnRmQY|uB}d!MJYG-!*@HRxb0V5<%;oIQdU|7_%Vrr4 z_Qa+|K2q@8s+oO600MZ$3d5+-v|f&IUI!VOn=KY#(l5a6vBMIIq$_=cevk}jV<9K~ zguly4?+q_yAv$Yqy2g9i@|M+Sg(Ra&SM)~0z+_yBTzsCSY3!`Ufsmoi@RQ&(aWvSTQ{YawAUH+fD?7g{^+Gqb1^Xo_3G$?usHsrGZ zA%1lLlkF;|G zu46bFPvAvc#S{2n1OJmJ@PT)rJ=kI%_8g>O;EDrRo9eUMdjbzY@I=D`I=>#w2N|Eq zasWBG;w7^tatgapmm4=SHB%jSH$ToYQdPoJj!Hz_GfZkuoMG~ke1^&AoP*gMVyk(a zVqV-xEpm#La`foKy>g1Jm4f=Z5X^-ZNMbs+Nj3(YLG}galkY0wmDRS2E0{&j{l#J;TI7%DEJj^O{RTIod5fM+V9{vWPoBP7CxNhnmzOecHN;g9Ew`%`m6N zu~qiecsvd0j?2L}55=qq&eYxx80*b%J3S43A?ob#KkZ3UDuornaP$vQFhHQLYF#kW%ws1lr}{Z9IlPas}EP zD4XPyW!w3!3-91p8ZdhwMEICeyn3OSiAiliZ{BD_YW{RvtPYwJfD}r!A(R zDGj$Nre0(05#=AyZ}5YN9@FYA^Ozlz5qJ9{(1It2{9t+Ruv6!iaUw@ z2)M7OR&IeNy_FjMG~+8X^L{SoJEuSSGB`vS3Oa7)OcVf#KHDq}JrQg81Ff?V?TReE z!7fL?sTM87QS7@8YjNrQ%Q);h?mDT}{PIs7w@$xDlUCo%9?7e3+ZF$htB)xbOc!Ce zvH-;Zl-c!|tR6x`?IOvgq4F1+ru_m6DQ2$wij~$zOAV{FwA4ZV#1=I9JMep%N&H^6 zP*j%KcYFhJh?gbCNJ8&Nm0I>kly!)#T`y$aw@*p5HA~EaQ!oC4-e|El!W}dy6d=>B zWNd$tIV%$YCKr0pyoG-ys0IRk3+W!|(NM`?=a&xgAU0gPNj|NT3ef-mAXGbi{>9v$ zvn+n>*7_-C-UC89Wpnu=y*#~kTxz#a?X}Ty^+bF4m!o}jT$WQ97ZJO^eSfxgS^BTq zO{si}8MB_{6vTUNSTfvBBl1;Fr=7cG;e*`1Bk!3^>z;0`8!_F z)XH=w@!R=X+-_DckocpDL~xaE)Z5ZD3t(NXl~* zq^am$gge~t;h9RfVUWWP%ixXc5pJ59^7Cy>RexUPXngdl_jsEiMSSJ*O(Z;Avm)UO z`5X0>N5Z3c$gQpe0cieUUQPa-`1J!@+;18)eNr@kmm2{lGIjZ(gTM&sx5KO|`JYI?b8h)0R^fwE6KEmh#}QF^_yV4>7vz`o z=}CztC@EZ1uaXWDSEUfq3(8)B7b{|ld2^A>=>Wm2Z!p&3T7$PtLXhD4JG>up4l-;U zmGgmju?`c4RGKu`4BQ!$wd=HE)=olj1lFy;ctwQj5<6?^4RxcqrBgeqJK`oVirjEO zEzBR!Ucw5x{9f&-3{T_Wk^yFD;zRa~4hfrB>2$10+MZ&*{cBT9t^q~5I2(y`!?Kk@ zuxtnL$NYAg>a}`u)r41phn_k!Um5{`(Wo7V?Mj zN%6vWxl=UYJ*2AY^Rske=U{JJvBcAHD}R=uNaY#OY-aahjT1Z2_C~_+Y%HK_vgX`= z#%JX(jbFwZCtx#57P_TV;HOUXBXAUQJyBFLIZv;fSAd1%mxm*PvLS9&4O5XfP)__^@8CzEuE($=tw%%W`0X-C=r0zbEtv(@3txM~_8qFX)cVf&~ZwiOmUJ3Sz z61xvFD9{sgDtwC%!PlqXe01+qY>h0@K;dYGxTqNLzCoHqN+k$sCf+gjnbFs6WGf*9 z4rT_@7knf)FP)9K)vl|EA2=Iv<>b^v@-u5%L{QqNSP)n7l9P~`^*>oWTZ`v!Yfv*f z6L*c>cW@8=lCON(9G0=*4M<)6=As={oSC?TOOx&(gcZ@fIrFg|p17=Zor%;Xy-DXp z>U;eMTfi@SVEKUB$S(5k*`a5Jsd^vUDT|5AL4h`{d>Wmps;QA8V@0pKB-N@QaB!frp&5n0&+RL;j z9>Rq4mU<9^ELap5g7mc}_(?|hKU-_JRj9Ndf?NAva0p?}H7t5%f28|daiX4BmDC1% zdfy1CZD2GisbXI3X=KYom{+5BPLwK=D=CO7`>Wc4GvHcEN5WhAHQP!UOH>{m_2Ra_ zrc=O&^o{RB?|-XK--vThwzz&nF0+FSY-Xi=coWZg`W!gckF#G}j=kg7l!860_BY`> z4qtbI(z(*huf;mJw8f-FdX(@n*O|NA2f3WoBET{ckJx)p6XT5yh|U_h!V|5!o*EkD z&Stc#TpqVcrgFgwEVHA+YB}yB-H8hPP$=??Z`(BU#BZ?LS_fAnOf&KXNjD!AwJ|kU zFBF>CepRWt8Glr!W>TtB!%lrkI<1+ZQm#r?LNqG1Sj=pm7$XF%4ANwsLJV6Zf$m+^ z*?+flZWn`Frl~(=+U~PXbj#%K_r5$XCDd|)_nsX%H1j?;e&c)jp~ zV25VnGp%IszGgdesB1b?;cF=mSL?$8F*vH>(edqr;eScGx@(k__0$l5n!FRhI=h-HYA{usX*-m(YzBac}ykCNVT6wk0*i(l<9 z@t;g@oA~Pv>XBD^RA{EP@5=}&ckskNGdeNxeNJvS@wdNVC!TGd8V&3E7v_PzyB%oQ zz3Vrxj6sj8DV*~^f&kKz@%@BNB3sZ2-^dq)r zWuREy&VYc#Q)7BC6Q?=q?>at!c$X7V}= zt(7%~TcqQ@k>x5cW->K3r1PF!U7fZkJ9^M-SPF*@WCbq@-JW()@Pgup;45N7Eru3~ z>r#|9c8%4W=PD8lCGTQ-qtQwmloLqa_U7esmWfo9yjTwu#w(J=`U|RxFE5Mk`z~VF z7nq-X`>GYu2tqR3FOoqE98jHVbAxJXT3~^^We?E%+!$KUlR6qGS*M3?DAmkp+KBjZ zD)s31-~ScXIkX=lB1>%8h&E_!FA!{_T^o_;+Bn;@P+eBMawk5oim&Vu73k^CZS|uv zx3U&uRnntL=4H7tlr*(=PVEH4HVBGwr#8^toz{6$Njp@9gXVTXQlkTZrBRXIG(TO-?Ocs(NloSdscC7Q`L+M!JxUUOfHHR3&elZZS1;cskGJDwM6bX9<$q^6=G~BDP-Er!(GSF671Bm$DDX@M)f4 zmsbBxDFEUGciY=c;>$uLz-nLSES8hQqRc_t9Qb|_@B3Dg zj{>0P>rSyM0azp>;wM=7O3dk;%V0kL_2>y==;MlbR${b+YK%`prE5mb>EZY)yZcsK zlBuyzG{4gLW_{wx^R2O-@j|65bq%aE4?di!A$zN2#9YSYH+QF<5sM6?Q30AI?_qz^ z96KjELlt&56uK359u&CDtKRiKgaMep(k`+rCVwU3rA5*Fm8LJ9Xsn2D$PRyXJxP?S zw)LdKM|X?PLixP|{HZ<>vm((YJR^jRtX29rDhU7kJZOEtr>`?q!f@(UuBR_=*^Q9w z94-B`MauBnw@<~T4BoQIl9QkLRgLoO2gySI*~a2`HIu40qG`eXOm^}8xZSY=mEF&| z*h2lc2w}C-i;eVh=C*kFj}a9NzYI|Uc7l?{;#%3|NV#0#vCN?}9)klp`VUi^B}xug zo15z>p{I39ij9n{EHp#t7=S_+zDBMH3kyXoh*JlMkcE=V5`$gxe0;ELrNXc36l#aA zYm2>TwCgmtmIo8HWUPrJ*elWSQxC90I~1qF>cUNKnz`@E&&iNORb)R1P-SODg>hkN zBZ7WW2$hH@A|@3|TWMKQDet39WN|CMbs9%fnuw;2ie@fAxkf5G>v2R|3 zrj=#_vbhSYBYK=i7T?ILvsik86*D&_d64RydTB@q%|Wl#S&bH{czF~bk6XRtwV&7~ zdDpZ^1z&&hgriV%i5uS{f`W6&kpo72c51bvk>a@7B-Q(GKtD!A3E!_%u#~K?^X-t- zI-l^_9uvF^PqtA39;URichEZzF~901vD28cM-#xF8wYl1?P}@xVP<}@PCE171z&Ft zq@Q|Ku8-n9qO^7y0OvIU1;wv^v2bc<-eVoKqdU87D>#Aj(i z>1kBw9O3I;{C(lJygjj(`G?+~;^`Q6NVP9XBbMNjOI-d3APqG!8eK|OL__9ODCo*H z08T~tRnp7DkMfHog7AkGY z5?(2|4@YHtZ3g;`JKLz#dOq}<*%9TIHF66VP&^{_wt>R8L_i^l(R_n@E$qg4F84K8grC%h&#)Kc zflEKQ+f|aafFKM6Wt0j{x;xB#W4>V|V!k2$uG3olQZY+vSJFTQo_>WO{qofue?ho9dHQqR1EK2j7D%p~DZPq1IB^_r*i{fvvBfDA*cY7}A}M!b>noXtA8C9y9Z;jlf8T zWft*Rp>vtw@K1XzPLbK+LO){q{|%ltAvm&&7bf$btl2j-RL9HwGlwnkZOp&O}nOc0S=^2Vnf?w$is69eACHRjj>DcHI8n!Ox{gCMaGBvFO*Bd2O_1d){MeiR-yBlkl2AB-k7+$c02@x*y>N{ON&x4&2tv0U>7}WRixFwD+euAD9FFXOn zso{a!N;va{vt}(%$FpCcK<>4$lq6gL{=OVYp%)nnTF)UGVQxKY9nt$_iW@d_{;iNh zQWo9s$B@P-333};;$(+ec@|Q%($>aK&VkTRn-3eEQ0%jXS`v-1oY?JFJZBR7qrIcz zfg%MoXKzrgwd~p!owFA6d}m=aQ`TyR*5)nS^*!@%gPdOUYOPX(5vge|Ct6FSw28oj zkzn)Da9h7TP8H*2e+9@#v)C@Cyi?T5>Y0b>cR`_fCsWzAn-rK3=*#Z3ONK?#f`7LP zjYCSK7toNbsjkGby=U?6Vdx} zWFyvjSTS;~si;+UlebKiM1t(R;RsJiB+T-Ot{{H=`|${bH%IfEO*!dU0c`87>wbnq zgaS_*p$#ucP*}xPNt;^7($8<6jzD^{{F{~aSVx!(fAL#%GbAiXXXnHTrSpw|S0W zZ`nP3X?bm5&Y}4+yBMzJ6WTh1vGzVu;!y;D3#n$h>a(}(r)-yY9f0aSG%w!6e0hva zbe5_q7T1Jo`bWAq4CMPG^jhO|uH`#f*#|fZj-)$!*rqom{@d!M+cJG|aMm&ts@?k(@i&=L^ilt&=mYpR;k>fm+|56z;|n zBV!#FkUhcvS?AWW-DPeZ; z7pKKf(yg1=bYks8TcCpY_nGeZp_VSBcu6@0&OTZ)k&28>Cxz#T~2YAYM&h+|fpdMAQ zevO-Hm#nVW0c|RV46#_P6Ht1byV8z?lSBV$b}l)Lv+B5oRyx*D<2gfa9qY;}11E5r z&5dPoe4N@~<&;Pqaf4i!(|9^q)0z9dZF!Dh-93&+2_k*h?R&u7A9Ou22d7dgfcq0=f>fP82Q4bVOkGG!zf9Y6l}pgj1Zvu z_8nedCZUO?D^N!J4ppnvf-LQxKb>y?@NKGV# zlSoe*VbkG9*wi+{rbCTT^67XwZp0bko8Nrj2oDz~L`T?}5jMiH^-6JSiS5iX7;-er zz!oJwjd*gE#gOK3#W?-K^uTfROM9^)SHihSte#Ti4VSfY1P3z?G6__CHUvqBX!#1} zkLZNMHi_HAx$E2p=y7Afy9s*bDxhy`q2F|S<`|DNoC5QQcZw$$_{|qjlRU&lfQJt& zy#+ML7IF$Z#Om9QNcmd7#Og!kmf@6ckCg7P({q@RUQ#ZT?YLX3^LMDOiRyZ4b<7mZ z*j^W)hws?of(S~->LyCZjC3rxJrdl0_*pUM| zKYRXd@)7`j9R(~Er~Le#ElQJJB;VAk3g$?|)Ng+1e$$n2#Ei!`R!QiS+~m*Uk%hVY zflcn>Chyeb9j1>>UcN@;*v1)!p51`?k^ldn*wpSd`^RW?cWHrrT40}wh?i-B?dD&$ zz>M|!1F(GK)4HU z_$%1nSkNHvXgt-KYVxM;=&T9_greTxHik#;Da^*&gJ{N8Hiw>F`^({Iir7Fg|suf^n{!yi}8SneDv$aZTN= zrSU1T)jVL+e^0tI6{iu|PX2C?Pu^4$9KlRpG|8RG_rJ0;IiB%}MHqJUyO}4m!Apz7P#sEA-!RYe(P>UkMJuX zINg`~!Je(* zCbX3MTFrJ%Xwigy<-V9%M*^F&-1nVnnXMjT`?E8-|00*Iyy3e+9rFIt9bZaY;alAI zO^LECroUVELd|P23*EAV-FJ`X2VlPUnSh&jwp-8MReGt5ycRRf&D*CKwZ+uqUmX!3HCr*aO}((gnAPB1cv$E@TWAE zTTT5ly^E`7Opm6C5l&2UW5H&f*e3JN*Y(=b|9*`PPyV+f^IN@TAMl)8UAAE+HMjeW zO>9rIp5Cxn``WSoQL6}yY^$_fQ-T8}h0WL`n{nS4ve|=Ud6l$gN!xAHer)TRY`>b& zR?jF~^ZA8ng9NQtYWYC7wqeTcYsvY8%@IzNIe_hBka3xA;_8etc+f+lT+@4q5=~}) zVEFz~X`O;Y3(eE_OQh56iXG;!JaKxD+z~jT(EL$f(p*u>OyHO=a4cFUH*jCS2fa#B zHfFaQO%2c34&D8zfM$z%MzS_CO^-=>t@rM(vOF$uY8{n6yK1b?!G0YTB5ybs2!&yd z7rQU`h{i5Ck^sqjCf=uPt1obnNYoP{cGq5$R4fcKCj)LlLUJIr({ zhxpbbB1M<0P5n^V!O`@VhFQkiR`;qc8vU6TTK(q9Ajnufl37|W{~_HqrTZZwdXUi)$2hkT2o*M*x)Ab< zW>S=Nk6Ih~d((+=(R6lkF``1NRH}Rdxs!@bK5C8x&0)l{XrqLwRxLtVQawLU)HCfx zw;quPis4zu?#LEWDFHrxYP#3v;x@EPu1G3Snxu?jRhJ4sBo5V(v7$=&U#ehzzkDfG z1X+x5_!$hu-4b=aW`V39tVwvc7C+uIP3j)D!bEmQGd?_IX@C9!38IwGsZICPvLSu_ z^tUC?*BY26v?Mpb1r@yYym)o-hPi!CVvD)zF+mONA8*+=w8FwM0C;e@^(h2UmtzuHbI3*MIth8o{7^!`_&-CtpN!9_p6`SD*G8NOn_KxY--ibaX) z6xbJ*>^syt6m^s(`Epui*90yn?)~A5i{!@^Z}>)wp9laMuR#3y-wVn>pw3+3XhKZg zj;b!ZbRVmWZ-Kr5P8Ei*Sgq#ag;wP(dWQJMLs61I?Mdfvs7c%cAc82(;s~Ebd`4&| zIxLi96_mR7~J$zn2EFZhWCoC-j~OxIGLJ~_ZlyqyjQ&D^t118d0$TVUh!7P z55^^bFit;6vmexWuc*n};k|d9H1*qI!WwX2S`ImHZ#%DOUB2Qpfwi2x!<2Fu{^>focrJK^iu3T+l@n1!B&$&V~4#4)Hm2MiR{`jw5iANw}T2z7h!P zS}CVhJrKBmHb|bKJmfCg$vo4*U0h=ZkqNSyP6`foZfZ-ph?LlzYy}vw<)-a&5h&3! zXSl!?t-kqu?@)++=pMuHj82Q9RMmR*se`T8A~Oi)A!9&V5X-@ZIwlQ+zk;5o|y zUHh`PHE@cne3w(52y!_qhc<7h$|9VZJAs(@MRSAm&^(;uDklH{_@ZDpG@ zcd3*eLN^O#Hh%D$9L>S&3S@duu`d$@NdrvPq6W^Je^*M^;Gp?;rep?Bx8QJCeUJW> z>4IcxDTqwXF!%F@1B}jjQ!@g+r$b)qnw@S*IDHmE(yrw8+uiyP9WupvtDq3qp-xE5 zBJx6I{9={y`q}XVbl6S~K0WlAS?96=vMimOGfe4~=%e$B^EmX0vNds-l1amVh4vrY z%>1ngK`MMr<-Q#izE4WJl>6{6X|Q`lxQL!>w|r%~7l^%QY&Mskx0>&!@}<-c9)4z~ z+BI(Vo0fW41H9GT)Rl3EgdxleRr1SSn(ioqXJ^J{4=|(F#XX6xqY~%l{?6zD(F=bq z)Rv=VAQ(xFG?=}4HuAn#8+-|}+wWlw{b}f@K7|J_oL*mR+U@E1v4=OE1$LFNh zBC5epZ%w>(uy03J3wwW+=5}o}Kl4f>zUI-PT7QEdC_!@w?U6}HdX;o6sxJ3=aggC_ z9X@`9x2#b%I9TLp9FO}i`hHcED=A$3i0YAgAbu4+()sTq83@MZPKPE7-7gzg=$EPJ z9F8QCvQmcLQZs6KLBtSc0|FZXl4|f9?zi7sp9rKl5bvMDv%MjHb?+)2lVYN zTPjaSGvXdn{{_;5KiSrM@U?byI&5{Ce4SP|T2_S`E%y&ym(hx6^~lYc zk(;w3H)ls~&S{Vhi(rKaz34o?r}xpcg>-@e9KQGHO{O*h+>VB=d(}U~P%#Qy$j-z* z_)Cu`Rn)WnMc2|JzK=U`#$Aya9hU>s+-*|AuQU>7sJaPf3B9{80Tp6xKwa2?Sxj-BkzCMGM)X6A8V{HZMq-e<8_hc=`}GLIA9n>7S6 zGdkpJO1qS8E$cqN*&FT!ErMi5h}+~N9Q{*&kV8I-i)cS zuy;%rEUVs{%)nXp(CK|V6~2Du>+tEw*cTkHL&A zONJ~RIk3cNbPHjIq1GNJ({{9^J2cA{7@dp)lYMG!o4*z|3Ot{+8SMaY;IW|T5vor% znaY8F;vx%v!qDMF!*h9%S_`>P$73Y=h~!*0xa4ftiECupa!IcecfscD^9WO+j)&z+ z{V`&Oz6CPb`WH?ly+o4uPLZnco#LCQ{FuQ1em6&&CudMwPO0Qzahyq9BWY>jqu6L_ zE%GY9PouVL#3R7FD`HlrlHw(2o2iJgT<_3FDt2cs1B;4RH`n#4RGe^qDlf^dPZvt7 z)Q{^^@r*ph{Nq+Qg%)g(Rzj5Eyko+hD{y=&#hfl&6XLJ1VLzf<>i?7&5+o6QLw-5& z`)`x0DN@XQ_?Ys%)*CangRb{dma3MxQxxSfcgK}cmj_}&L*x5+u8|y zDD}NM>=gzkRZ9Ug?x8L89QO<&1$^sv5x64O_H*G?tNrVC{8{L;RGUe)LM`Ea+pY;+ z5RvGOl#NDb$rq7uF@MZIPV@rrEG~)iCL{Xp!4&3Li^Qs=JmZK}39y{C(ix!{t7J{V z?1b;&FOF}n#-Loh?zV%x})2dxdsv;@caE_7L;)nbuM3dO5Pxy>?Xh5t>okchl!| zWny=)sss>3X`x4u;M-X5vLWu}J9Xlk)v^}QRx6dZ1}}~Z8B_`?rqj+xhDM|Ntj`;`n&Q{e)DJh5RFRXrgtmJ z;-vg3-qdrdJh)NHC!|?CLBl%B{M32;4=fY+b%HW*pz4_--YW&vZkn0$cNwiLFE?HN zT$@!8&JDw5hpe?7*0H-#DV}17hb152z`nURK-huXTWO3Les8?q4dm%x`Xu36H}cee z@V8AmXz(|X1a5rlMR)Lju@COxbG|v$;Bm`thi##7gu&yDTQ+A$2uynMkPvwM&p_aO zSqsZ_;dXZe=t&i>GvQ2iCM=L4{%v-xI0|MhbP^}QoM&&10}3uowwR5)br`?@;PI2B z5zwU(L1F;z(jATL9y4f~x|qS=_zNy@BKE-r&Nl~MjfpKp>c1Ysp%6rfJ(xsVEKYie zdi4l(7MRm^{wKcK>S1vju4L`IP6B_#qi}659xRhSM0Hh0G)91VK1U)oaZJr83)zQB z|ACFvl+!U%Q=I>ftW~5qZ*WOQA)!L5q&9PHQycv=RPc8Ezo<5YBL|yM2=y~;@*zTn zDE`9@V;?F4>sf3A!EwEeR$Q^mP#yL4&&l%i5-xm{bn+LJc=ra$YO5Vewr=v5R?VuDYbxLqyiD4bBCMk)sOxv4ICsGWT)?paUgy8%aXR z$o6MX&KsAYWUkc03S-ad9sqWc2YkRqf-BFB3o}N&pCpG$qKAIiR!a|R3B|I5*Tq94 z=us$F(&fSIJW0-uh#q`I$kB^`!2+{>uWGvT9nCO5eNSI6ws<{$ILHB2V6J-qKe2|l z0Vx`w6Ax8jxDYr>_C1+1#z>C;^^~wTxZB?J!Ii{DcycD5$4e` z9Llk536JA`p^h*PP2XA4!qjjkA7%A_5RUAq={!Ay=v#u$dy^~sO6UCuLviT5RlkAG z(-Auys4^`Pr5A+SyGhQ5mO9)aHz_3VR1Nj(eB>e#a}$vvB>G=K6Cvu#Bj z5axm8iUucDWIOxy1|e4Co$V}RR6-YTT9#9x@8WGiH>gXeF`14c2}_KMqXi+5Vj5fq z1SUX%A`OrRMOx1vrAXx+fIJL!PlRM%gd!c8FBGY~nOL{?EJZ5F+|sPksN^U``tY-H zid2Kl=@+FRwNa$wVzc{Oa#Z($)M4xGNQz1~7!W1dP9yZIhk?^IU|2%sky`) zef-1akfruiXX=$I{pXdID%}ndX%7OsMuh;f2-H&KMAH`7N`2`VmYW=Mlu`D zV!ec7Cwt3|7g@C)x;B>1KLk#4UTX6utFN*FT@_b*%fxH3qa;LhbW^CMoA;hmNg>oz zIhEoc?H3X_Q?8qZr;*@nbREY7$1dGjlH3&C5j&rQ{HhDvC@NXyeskvdB#LUTCS{Yv z=~Yze5=~dyhiFvlHnq*KGCF~m?YM}^;=R5)M|+*RHw$hhaEs*#+&<~zFTUEVM81;1 zH+EAJ80UN&&F-X**)jcQTvEquU+0lT$JRgPcI@x=!R^>N(lI^cD^na@7LC){E^X(8 zd;aK-lJz*nd_77~5f0b6MGg4v!ffMvWRULClO=iK+XNQ`f!iq>K-33eB!VXu_ZSjC z!e1Eh~apprnW+%W!WiI1!9Q8Xo8M0z_*x8A5Cw}v02J2T50JU0SRo_9 zVqKWPoe1i5c^M0qIGD_nPXY{G2kp4D^!ovnSa3UvPQU`^n-wcXSLrR2+n~J8UZN5g zv8;=zgrWd@%YX3E+|<}r z?sVqa2X`b-Hd$_}s_vnqnpS#PaYM%$^-O8_ftZ9?650|zR(eukUix=}4I90fNgT>? z<+5RC@))PO@LiSduY`*nZx7ia?kp{Y{_u+*39Z6&xUj%NGc8wc@OK zgPqy^?NMQIobwOigq&qE({|rGSt9q#;wH^8`^R)542fiU0$uDwie!4p%yLqBsMTY@ zgViJXaw2FxzC~?*4fY=qr5W0NN%!W+&6sIqMn*&H$XbhV6Xz<4 zqDf}tww#dZ9l5O^V7m3B;u~4THtguiOCE9+<8Ji`26aDScSLB52LN&IhDZ-No@lxr3A2vQVQ9)D_6j8!P|HYET|Pv93_xlZrFK^0bccMfwhdy!aDSy zOWMHQ{i`ED84v^CIVTlY!NXbj_Fs$J0_A<<__!T>ar$jV3pdhSBzi5sR&Ifa^%`Ex zH5tN_F5;1^n$8fXZcr^A2XSUF=c3?Hb+=)G96aG*J-=NB%#>rJj`t08bx){9Kqco| zig+Z?@FRh+6v?|gUBQ9O34()5h1!?Ugsvn^`$RMeo9v>r&4?o&9gQ+ZtE?q_DcYE% z0H$%N!~!ah2Us2s?aN}}NQ?_2EPmHxkk}Nm1`z5?v@AIWh338G7%PIc%X4K)B>kv_ z4DZaeLWUgA!UOYHcyhukJh$Gn!t+qMl`*J%;ibdK7p!nWCAY^$A zGfmGdj#I(7-1a-E_!mEj6ARV5;|#x*t;lSMag_?mUHOCgPah^(1WdD}(&z+!qtVOx zWfhF&k10qeXdYy{ke8gbU9kPKR7X5?U9k`anr&yYPInQI!{40{&nz?8{Xo}{@H0>I z!o)|EDskqI1^HQK!YYza>ZnMz%UA1>?yKkvoia*N-EV&L)v~xs%A&1k^h)XV@+GTq zu0Pnml@O8XdQv^HN@;MC-;6$14hEz*iq_W3avx=TD^q@J4?JH=E&ulu>xj!DZ&$@s zwp+%qSf{3&b7>kT9~anlmTmgJrHfcN?cY&~H3r0G#afA%Qx9h(fHal&Zj3d~mMG#M zl?siRCeDq-?We#zzQ$R3)AqoQ!Mil{j2tMI zZJ9)CvM!wZ$>ynUt`TN;eIlc#V?C0I*4Cv?Y6~9@iWwXa(1%VMY$@O zeoO9Jai?^~{BWq0v(ghvi9n!ZIa!OQsHc2f$>ZVc8UZtU^uiUHGFOQl$KtcF4}?B}i!MHmNQf0b1ar~pNJFMwwT%%-YOUCu># zP$}%P_fkk^-BM1(Tlk0U7%3nOTrQ2kz&Z7eI`3_wmpl352te)lk`!ad|2ZLsuoyxj-dpS?KrsS@U%Pb`7_)0=ou+QlKUB9L42r?7N&e2X6=2HdD-#LuJ~9nJjyg z>2N92_jq*N)pZBu3jOfDX2A?gnzy*j@kTfBAY5hv8XNVM6uSU6YvtfL>-F+EZRC5I zcJ;;!l)I{0uH?8&g`fF8T(GN~l4CrX!76A|dMPpLHwTI=0nU08t|~4KSuXX1Vw6L& z+>@EHTn2I@Iqt|h%gB}~7~^^#SsV#|WfmvdG^xmhzJ9d>xAGaoiqj1O6?lPP+OA;m zCOt7v4eB`D((@TE9O*J?#Z~lN^|G=imtO3$CXYRo42u(XTaM(kzdzIt4$-JU=3rL&Cke< zIirU;{!EOTB2%-RS((nXth_G*cP$LX(r)P-`Z^_GBSzhtHXh#guPa%lwHXwcAr6YB zW;O2Md9w2(>|2|QOS5FB40_jJ^G&L`d@NId?PNZlHgV^l))b?&e zG_2EQSq?W&?h2V9*rndur}**H<8;)JH=v{5ba39rwS)KX3N;J~9q5b&o?w|ISCLxF z?3}|{CQ7zgCLZkbS#svznb9L)ojt$$2SJM5840H4?r%I6c0Tt-aiS9K`l6(Z)WG!o z878v@Ty@?x!k0b!Jm)oQ;p#ME7psk^X89|f>k^YMFPQ)0nNY{3zxLBp)C_3b4-<@0hR0L|5*(p?-0uaZYk z>WU?DFn4h}L}6EGj2X+7ApGlFSDBQ4;Co7MbcUNp^Ll!Ur!n1P;#;&{d|a*ZJC_YJ z{VsiiNHEn-{+e>Jjjkz4jRjXn^6R7dcmUnz_+Er2DG+B6vCLbGpv`xy_=Jtb{EKY86y8E(A+P{Jq4Ci?) zN%fmiyh&>PPOx*Za*8>5G2j(rH!-LBU%WJ3Jw?4VfhlrdH`94ZSYau@v4m+$-XfXo z(zr_?%(twUG%|3zF+elZO+LeA6Ho(%5-#PH+4Pzaege06{Dj!L(I+Tg#)TU4-|~);$5pT zZ6brA9u)DDCcEp~(q--fha%jhD}3;3$b~yG)y{HeU_>EHT|yfaJrXIcj;x&v1>%ev z90@Lr1efQnSqhcy4dcPpW8-&$RI-b!65X$t?n}@vR@eIDk%+b&PxAXn{8rw%=dAp zN1N5@(GvVw^Sx8FM1<2{fRDXpn3{OR{aQ1ZE9AaWCFm^Y5E2bvrA+6jxWB73x%1FD zcvqyTl50N!iFB~@l&28$qICZy=(c#;Cpd;|;U{tVgL0QUH1b1n1}9D74z9z3{x|s@ zn!)dC=RkJxtVEp)A4INW*A}J^8|2usck2Qr7P@lx^}NFvmA7@@t+&G|Ch!waSVZnv z`nP)Vi0<3&Hw(H7(C8UnWEMq=mNfo?zfoT$cdNvyj9KvIcPy^TL`N>C3Q)0Ro1aQv z=`N=(kvoW@_SDzPhfT$D4OghQ}I=H-`dUP zH-Gu`Roy_VRmPuls=Fccts8go#kJXd(Eo`T@pZc|w%d@{Lr`+2=@h&5m`to;?)tShv_&b>U)X!24}^)f9MtVv-aH|i;AdiE}lC%(f!NLbLZlj-?!`jeH4lM_AtP! zYzg8P0`^@EvqA7*{qwYU*(_ke)C2|XPmZrSzjTi$I>v5{>cAY^Yp$w&J22ks9kOns zMakzG`(kGMUjGJlP+PA(ZM|MR#O-zK@7neHos;b9sBQ@BvXt{wHYPAz zhKpqh1Rvo5xqbe{lY&9nfW%tz?SdBYn{{Ubx%^Gy0(5=xPuh3%XN}2Vdh5hQM}K*) z3#NZ9YzL<2D58froqJrKb!H=-nGwPFQK5rO&%bbK%U5ZS8&F*wwL=3P>RNw(rF9{A z_Dy<$E5n&UsMcz(aO79EonD9XP>^5Eam2S60dzH)>xG^1mKmA8qIze{5Kxh&i?&;g zvacvcRuC(g+B2%fbV$(O)L(6W5# z3>5Mx@Dm8=F}%s(0#iBJ>6-1j80qlonGRlCN?<} z-!+S><@m3YEcoZeIQgW;;Op!vB`eRp0)j(nQ|N6$3>_&myk6EWELIx5cIi==Ow0`XDZJ1ZGTLhEO^U0%Q399e%qS%miYvn zzNNCL|9x7vr(qoL^qd(0;C$z4_&q;nWMUPFqXI5^VI4F*Zr8!Xl%QL5(H)6w zOR%hVzYpDSqkVjF+DA6zM%j|n+i%I0A0=@$a5WckR_>N;gLlVmPtwKC_itVcyp1-JsUwLu+&V;XtgbzVz!rA zd~$#>)%jL2Ell7lcc<$7x#;lf_MIBsu2T>8NrL@(@op`tXoEc@=WP^A+Rl+JPFaYL_~5nNi-x8 zC8Z#Cy*2d-`89ZOS0F@d*mV31_3K1=;El+ zNunVY8LNC~Ic>L-4~e}y(Pph96*Q(V!TX?Y7Ev`fgIP>LY#eLLP%N#LxLg zZfWDwD-spA>%q%#jDA6}1pP<~T))-POeRIYrbu>2-|1p6qM4yREsoYM7X~8Bq*7-i zXAo+6+?l))yxM_q?a*q#hX=9q58o=eIUO5JTsP3hXtjNN!Sl=B2n^h>Lr&rA4kJo@ zEuBgJ(or}&>1c`pvG<;bG4w!Z*#vyU(u+?M4gA2@gyPvg^mQH8H1&TTUN*=UEB)0AQO)qXZ(E5eax~^Xfjd^is*g$6&q0Ql{ zkV>tdK34IVb`>Gk3inmp-(v3L)eWnbQyYht4fJJxc2|3ly>(F%$a*GvJ1e=jcC>!; zr@LIqf52O(01&`5fcQM|5|O}r0$Ra>Tn;B$z$XA+j*%Hde1VI}wyY$cfNvfWA0aUT zJM3Hd#5BJv0Q83cOfAVU3ABgFS)u}RVX~|zM~;p3Je1bB|MbL^K7x}~=x3|Ft*y+1 zW3|jZ$z=q7W-4V|=)JwZ1N6?ivpw|wbfJZw1qXoeh=y0HQR*UTGH18%_$)L;aM*Um zAeJ=mWig{VxBueF9Y+bqER16h7n*DeqcIPfp=K4JltIdsr z<9=5z2zGX64{pSst{>P=c2ANPO23{xAkmp$weQR{=}f2S6)EC+W1~0GpU(70?tCjm z(R$nc|M*_j`Lyl-JUbnU+UK;d{p($F9LaWSSS``HH8eSVYWPZOcSD!^cH02B<{03t zRQ-)&d9|r7W#Q|8NWnRS%rbU6d||rvsEkcz} zWY#BThUQMlicTALOR6(%m@{{*J0lu(w)m#@vvNH;C8xPi$i^2kle*pXjP3R|_EPTt zy6_^#O1D8ETX~9TEXqi@o@X1D*amp4)3aa7iMtf>l?wQy8X;7o*l(K2B)SIVmt|r| zkuJ9b?iwaBm8AhoI$#sQGuC`&{29_CdGklFNHZDISADIBmPzrol2sR$XKAy%d=tM> z?HeSy%@pE6GR=z{PWRN^Q_mx-hkM_ZWN>MaU*<6Wk)5^T+XYCtPSPp%n@iq)l@sx; zrxhf`gN#2sf0q)tF2XviI*zakP3didI@e1RQ305ZUCcVb*#;5h*obM4wiS&^G$_10 zm;ILoVsjE(>V*sJmOAoYd7rz~-?LZV?UuAxu7gIld!ov zdZeU^a_Gn16R7yTA&PaUa zeEj)$V-z;*>D-rPJ;|qSvrx=>Z;Pmzn2B@Gcahs>Gnvjfo4r{cZ_n@@R7}*`y~NQO zC2@3o`^-B0tA*A|MrT{*S{~#1;aT!QnA49kl7SOfj!V|;YF=RaxexpVDgr&lSi(}o zeD*jg_H3=)&C0B&yK4FFEOJ1ILw_lFSL(-1cNz@Ly;8<> zx4GHmIvFFTrCGEja+FYG+ATeul)Us{R;VTo$5|xI{xtMWYhYMK%E6A*APUx~DCiFfYA{p+VFQAJ#YloLfNhng(OQLF&}t;O zSC*h9V875;v4E#)V)CW=$${QOt3&lph}3FO+-$o| zE9(c+aNU?jRmp>;u@b^Ty}6X!aU^!CeVf*`B8dk*UCMNpB97j!MswFJ3?=Q9mbt3kFKYe&iTM}B!aU)pq{2M6f8>R*t*c^d-j^I&qmE>F1oB}{4ApqR0-q*Ld4&1EX;#PjI{W}vB*Za|dW zK1uW_D<0%tx8KT|(whVklrm7|N74W;GrPnLS z82PZ)*W^%t^of2<;1U?Fud7QbDO%8I;f;g9VE6CUjI}U+JjgMK7ebVs{WHx+nsD0= zVjwpWn{XJd*4)W3&Ta=`eH(p{X%}|U2bs=;=z}aTfB6YV1%DQQ5ApXa{`C3( zD1CITj~x2_73i~doP`XaJXGInL0xz%&!V|Kncv#*G~nsVLeW8(k@Y;Fm3QtuqiP%tO9ETARAh9AC3~T2Tp$MoNMCrW zYh{#mF{V(wD!SA;$#8zAk1hFaKR`!z9VtNVMUY_(cjIQHt4XiYx}ud@$G9r|ds0eM zD#Oq6YiW&hn!JXG$fM75C3rhmDOUa5rB8>VbS=fG5YO?3i1HxzQ~l8;v~}iHV2LIn zn!ljEI`XCPye-|sobWdCdn!1G*j<5Z2akossBVH^ebSE(>0W|CsZwkDL$4%B)O5*6 z0C27ucRmKAM4A|l%JVED_&jl<<*K&ueH)#tQr3#SX_`*?Pw8Ho&7E zn2&rx1Ehf91Rx|h#0vZQBpSVr>ya+dz{^$QMjuAlB^T&5vC-YBNoX`ESr6;A7EFj7 zUC^d4BktA94S?WB$?}begsZt(|HB0f7FZ8H&XzFp!AH0rY=$Ssi<&P9@)LRVNx4!41G2s z2dq4IPF`xz4??*kc?WFI9vp2JscBR21!B~PV6_pw41INAcfkz z1<>?86y|v$C8UNis!L|n36?`jmhjQzg4vvxEkCt+ zC4vH@^XK7_S%OUJTB}EyS~+zxgN%ki%(>SviFc-2i`+0wFS8z%v0LC723weaVn+dD zAPJ0+i4U{bIvM@g#f56`Ahr#tn9VR+gYTdxX5N5pt#y>juqHQm?YV4TxG-D1gVO`J| zHYQN#6+B1Rt>GF8`?-oyrw}=HI@rDRmt!-}e;05!!z!)?Rz68u)|*ne5FAn0GOK>% z_E1f7O>+`bt|?oQXnWSTGc4BO|NbdH2JK{(6WD%!BjHy0Fq}=ENVrYkYuY8Mn;Rcn zW@D(IIgN^~D7_lbkKHS|Rr4;SSH6cMzWbs3=vBlATfH&jTVdr*HmgCsjvw`@VqbCZ zV!>}a)R%Jr*J>1}s?&vNw4%D>>tra*Cs+qiRL&Qk3Zb8^M`e}p!2pcQ>(yN@Sqh#o zl%B)73@W7u|FXR`TRPO1Da^6U%Cuq@Er0?Z-zq`F2xYl9YEd z_ww8J7siTZQt+^05&YHJ$ssrp*2^oH6VBMVfoalOJrD|1P5bgf0OhBG)4jLD5EqZVDhPKJrtP5B{>Uu<+1 zTKPENIn;|!$mvEcc~Ae{&7YR*W{b!O`T8JJNyVA$Pp=P5Vfvgqx#Dm zd|$BKjt`C-T$5|Rkm9yGb2)lAokX>7cc{_-*w3aQdyj8){GiL}?hAtSqs`P0ndw zm{GEVBol?)3xLFST3JAc`N(n|M)!@ghLmf6a7qs!1P;6U2GJneM+BIKUW0P*u3ylk zuDS%2Z51?d8wo5+C88X?r76y; ztGygwEdsLTj^Sw$i=l!oV7H~~>fr*vA8^cc7rKk*S9I)XS#p}2AdY3icc5=>?XcN3;YydmA#x(w$D@1ETvc#%y9It z0@v0lR?Wz=rjZ*BH@qg61n5R)Hv+xiIT{#kEgS0;-dmMY#>lN$sMH)vMow}JtiNTu znTG5js^T8Y^`*%0U$(MCpLQFl*A5M=Eqsn)U}(*8!sPZJSws7}gR-}*{s2aVutM8Q zo$55CiY+Nsd0uzkP(pvQmN}UpbIQO7pZz&<#Kf4EUp&j2;U2kFD%i1T5C+afRLV~kndPTr zKsNFjB_(fVIEN+Zf6?7y9p?&4CtM4Bc07=uf>~Pf#z?*^=L1jp4K^v^=Nd=PjQ1=o zzgTtdxan6U+1QyMqo%0Mm57Ig(ZJ|qH0Slpe78+jCK2d59}k;fPpP$ekwZDBJy;<& zTJPrQG@^kV2=ub@(^`IV(3h&6H+Nqnu5QsiKS?d~X&#V=z!t&-`p!~#Kn|R}`%-&| zg7Xfqm@#RuTZKlyuE}cAi%Yh$dNPgB-RLP+tefDjzj^l=;jrWCnRfWqnn^pf{y(?N zcmofImk~nMn;|~tz^vihT{vcU1W=gUk$rV~AT|5yGlIS4%qM|mCT5!8SIow(!>!zS zfQgToPS3DhhjqHBUzq3+1k*k$xP*t}?!PXFb~jKj%6msz@x3V!Y=1pCI0$$wDpXUy zI1IldQ1VwNEo!+zyo%>$mft?Y5xBTK`zC*IkUHf7F(q(?sz*nsy4TBrwPm21)g{rp zK35tzxjr<`ftPt*?C(CureSUer;!(S>u^UNjy_b7ECDKv1_vbhK~Grp@G5o(&*C%C zH)}g*nXG(Bu7?r@IwXmGGdzC+b}IgBmFExC|sX%L<8aMVfDh`nQ6l7K62+JRw}aT~fp z_-<$^38ROY?VF(+mJ@66la9zb%~YC!4|_NudkqKVq=@F6v85cz=zh!6>2#AV->^Ft z4>?-G-kB*nvB~!3b7TbgvqOMydQSDR(s|v##luabj@SG4!NLEFtgEIw1fvLj(r&)! zakR#dZRrPdf$V@POvbU@S6yC~>0o7~phJdoY_7jX^%4&R_rbj`FB|UgRJ_d{yavjF z*bM&%OncDh?H+&WuGnGU&{yaD&Q}Io9TR5nEmNidmH?m0D^l?z6dyWsp=68HOuV>S z`8cjV;ga2|zOfoBJ=D~`#W(xT)9CX`)Q#wZ;NK_is27F=PnN@UDdQNu_C%L3ag|Pm zs@W5MbgiwynjPmgjt*?M4wn?EZ66?fC+7PGS;e04cTq{P zqQW1y9pnoJz(GDvQX~T`RgPt8)|Un~#MTLayXNy@$zQ5fr^4D1-}wIo4WJ^I{vLu3 z0VF{MJ%gyc?F3PI>JCKhT-H=KHrKM)4tW9vp+o%x=V=J|;nkhi+tn?X8aBDQ?Jl7X zUYf4owPeaSgXNpjV-H=H~(jUQdOeC6BP1B-M)MLg?-c$CBBCG%^KH$S(0Z&IIn5=QXgubh@yzV|Rs+3^1+O@&U5OuE9FGy;*bBb}Gum0wTA z)BKd2F(AG}U;mQm6fp$N;*-c!Z1w33wh|b!Y%h4fIyxymv?VFhCo(BDGRYgN9v+#L zW^IsFXK682PJ5tGhsesedPf(gTJxD<>Az5I(BJv)h3TbkM$ZuPr=Md8dEHM-OQs^} zBJRm|p~E4|I#hRkPJ8gr_SU`~5_tZ+wN6_+@Vhi~XtLj~Qnm)a*lbDiVL&S}rJyt~Ea)R^`A1|1$ zHJN?eEFb1YL|fZzm5EvKT=)fzIa6F#+2%-ab!2t}EW6-%k3KC(HB?RSx|S6wl*B2oI)hx_2#%&jl^UMkZxT3gV! zVhM8)kd4FV2yhJS8z;%!=nWsS+g?{d0N`Tfp$HfaHC^wz7j7oT|}V>VheT^sxems z3Bk=)t#Or;0JED1*kHDpLmd4dLO)7o&>St)l?KfDE4A7Rz1u$SY-0K6G_hE1nUiSW zWzxRc!=u5Etb*>_cdN_Vj7xrB+N}+8AJ=>_FJh+vz>cu|A?Xv%5BD%X4_{ z`MeK4Xp%yo5~iY9T|%QoPxp0oewXI${fr3-Hdtl#DDt6FI9fD#)Ju!;&QqwKJkY>$ zW7_(5w!Zvf7}cm+RW5prX~>MuWt4|^JIZsU7mVta_!>N-FT{Ug;8H|+t;k+(RX~ki zZi&?+@$)jk8kuz8(#(RZaqoSI2jCK#_ z8A+EdGQQAm@q}-Xy=)2uXt{jT4XG~aeB*h+5h5U5`;U)xh$CB0Y@L+Nc|&^~<5uMZ zAGn{8)c^m*;|808a&#j-6(^-IJ?_}zQKf0>!3esijkG|F49jI)SIQVzOH-|dZfm8k zpFI%gpqWne8~t+Y>AdaVdD|~>+f2xVK3I}t9PghMTj;|2@fP)mF|V^fN_mkyFAf40 zxg&RSlD856d;K&JY)o}v@S+(fdOz5dNDj4+C$J>#vqwtDV|?OV+`Yk68X_%5Y+E6} zx4Kjn>G;ExDFq_MG4P1LXhVp!l1q@dn*(|FC-!!~Yy!tR$HKId?8Lj=PwjUIW4}vb z)=DWl2W#>-IO|y+83lZ{B1|6OFLhiQ+B;zuzQPz$wX`}7+?k%}n6pa{W&keiO`)Y} zFfc19sB2%|uKrl}Wrom8^hMxC)sQ&Op0z@$d8QX`bDA}UfNw6sJ&}hvPh4Bl>hv!I zggZ$|mpd%9xU;cNql^hKzf&Tt0XQ@r1v49Mhg`!Io+4~Nn{izV) zGey6x0V&DInuz{{dUF~Uo^~|vl&G9dQh)(KJp!ffi0fwpw3+I?du2}~c#5=7=+O`9 zY}FL(7zDn=Be--Er_|DXUsG(!@Ys?J!D`!t@4auNuSvQ)(Pf77Gy*G|vBVCHFU*KW zw9<6Ta5IM8jjov^=0Z;DQgL_7U(#vnH!Odn%56oZKY~L?o1S3jBQRzCj6Gk6o?}#q z<$Pp7LkZPluc8%w;;Sgsey1n=kPt#s+?m71yEsA3O+feBICLBMQ+J*!R(epWGF~#A zn*^!VtK^13T9M#+9=n3-(DTi*TlJ*@RRJ57LgF|*-=2!qd_asklJO^Z@M9?)-JG|V%kd~n4sGb|^)^zptdejjgy+Pg= zVPD9vc#BmR*Xl^t*0Ni(7`$>3jWU##U$bgM?Y-}&YPTo+IZtei8cd-zmZYj3*`MjS zeePKx^f&Z9BJn4 zb5vf~svA`i2`C~A>O#EEPJ9{P9c~NR3(Y`A;9)B&9VZ$OSKQNEOOQ=pK1#jlCEm53 zjUwIV(WS0J)pjv+8rSPR)H~i(Ya)tFQl5b~_2<87_0CV;c+pOw`=^;2#G>T0FQ84$ zO5Tp<>m&DIdV2EvBM`6Fa0t-)V zZD%iDJ-5uNrH%SH->~t?Ic*|b5RLpMW|(H01`!YAk@rC?0&E!E$XJv*i;87R1xRGw zO3!eyD_2}@R{u@5gHhs)PJ&48JX^7s2*m4CtkpkfQs&S%C1UC4F$uitb@bgC!E?6s zhlq4s#T;S?93FpjU#_9{n?2!Qu&nJa-!|c>E_?rebeEr*epHutsOf2^%DS!y$THUr zFH*h7$xMsYP`_=m>I1|>PjCL17KE0j6W%x#uL0u!vlBrQ;TcO@X=wO5u736W{Scp{ z4TK03h@;OU)!!?QJoQL%ej8QlRT;}{pfWhqQ}G^?Wi8DX&qu9h*n41(n+!6-(9IH9 z>7-0&XoHNkqf#rVBl=v-=#;Gg1Qn2}pX#vD8rEblIZ1!w?(&JWzPnE}B9u?07VA;H z#+kp^y6gFXouBAN+!%UCdRkmMQq`XOdaQhUs?#zwr2!mQ-%^&n zBLUNQy(lm}Szx++#&80g{$>=R5~e`6l|Bx*E8s zS4fLf_U2df8#2Ye9s)0r!_^sQ=|I$TJEEz}LNytYg8f3A24y$HQMA$Ksm+K4+YxzA zMpX2!r(%x0?0>LE^WaZ88VKGo!e1PKiAX2cwYqn36p~&}?`IwV6Jb0%TfA7f$vG++ zQwI)EZ1=v@)gDaF9+$3VPXpGnr;ECg5jL*w&2D@2E1)TKV`{tAx91A`3dDW8Hp(Z` z#=*2POLXJZeBA#?8`BSL@^s&f1DkqiAFVe`-&2nrzl0POa=KQQX%J3On^lX9w;)yZ z+4YQQOS4JK;_GzirX{Jhp|UmyY+PK`Wjl_N%t!`1YVR>@5P2sNd#`mFuXDnCYPB{6 zMo?p9Zkt;9mag=a?ka8R1*d^yO<5~P`oL+r0IB^*3sT*@*K@WLz!-5P5u`V{tb+Y0 z2_m8dy2RxDaiDswQ}))6=W;mVqzL`pA6fcHpF5;7gpA~^5!~`#12pi=P+D$s_CW$^ zU7i|o&)rmh`#49SAEIY#DjG6wN#e)I>f@1+yQ~KTCf!sC~a1&n#n`#Vwh8K5Z&r`P(PZ5F(=!;nQ3l1XDAPMJ*n2^c=hojW{_C&JN%vp^4K@rRfA~?a}{^OK*72iBNb`>k^Do_M$=7ci;ujjMQmrynb-kjDs2U$L zcJX)dhHXQYoa5xz%Y@D2P7qL|n7vA{7s1_lDMT|Z-I|fEQM>Jhw?1&*EWh}7LmqjN zJ)cYeC&vYtREy0`Vq)nqO) zpHJIVe&MgYnM*-Q2EUTq&6f z^u2Z4DD~e568Tn>kC9(dgRawx>Pu?^r--SDTRlEjk5i&LRt%|CN2MOKziPuZgC-U% zKSrLe@gV*(>O+Ud2e07#MKl`N00DQX`qNN*%93&LCcFJe8#`#G)}M}+{!5uHE9dK2 z??*Pr*w>+$G1tp}p9f~a(@&~Zem`bY2XjX`95{Zt83h#`HdFhxdTEG<2sc)CSeQGE zNhH{T&;Bwm5VoS4!|J(HcpKNC|J+q z2u2(!YsKaX9xz;qIW8Kt8=lGB4puF@z_Bjh-Ue*sYfTX|fL?2oi8D$_N$Rovw6+BX z={q5M;;*;z8ikI*NAK~pN0;bDPjbku5}MQ#)>iAXd!H&J=XzT25MTeqyj&*rK#wJa z?&(JtIY{g#X{Bh%^jE#AUz9~UBi*e2&>^Si9`Ujawo^|%rHj6@REiEj$+V*5hKNj- z^M>&(?s`>QgqPJ|t4N)opGPdvIbk4*Butd1NX|FdMT`?B8LA?1sWg1LDZTAS`kQm? z(w(~W`KI&|Q@XXIP`z=ZWDDAsKNPL$(+prVQqUS_90M_CV?K6jP|b|1oB^>%5jidD;(*}YTaW*Zt?aPi70%!6?RCddW7%O!&mpT2b*x<6Yf^<&Wl2?YTZuz79e%*C z%=U1TBnI2qIGA_*>ldeIZG1|Idr$aUUez?8h8y-VTXi&!X_9v)v&a^8a*aAUtNvh3 z425J*7%OuLB3A1oGR+dNAnmK|^6wQG1pM#zM#}c1)nVmjMuO^qBR4P*o~OF16T_4Hp4iSTckMw<@zYzEOxt4W~7;6+pqz50?4CC)aeLAd45L~5x-ruRu z&5u)Sd0C8>{X*)eb96C3J!`i)xA^u2t|^2~C+(HpsbkzO@p`F*o6*WWvN0>Dtg`(@ z*3?nODr#yPY89}bX%+h7A~ix+6&NSg1hXhVk7{z}?hF2b?)oV~zEvAf>L*9_fr3N; zPbg8d8lXhG5T(E``kn4bK}P~1S!F%Z3!nkVKEewv1uTD4wigg5Lh)C%2%mdEc;Mpcm zz%9SZ5j+K$Ky=@cjNE>|BOv1YR!88p0~0fx!S6_(CI>c*op~s}Z(=CiokL+;F6#As zJN=aNW?5=6%Nib*AM+ly^Lqj*M210LEV%77!C*agSg$xa3~{3D+nUviTjVUJu&v0i z?)VFk6cjzsgFbbf1$FG#?R=f1ziyMSYrpB^?oo{Ag(+?ThAthi@giiN&@GD6-xnx6 z8iz&I4HXwp}_+0kqJAs8GK407UZXNHe?3O_25KaSgX%$OMSAX5F_+B@q zUHRpnWqx~y6r_Y-`(ti%ZcX=uQ{@}pT}J{QG39gB@MoE*{bXgdrM(m4FBSfQb9@#7p;u;4DhH)KR^Cr0PW|$Ce}QrJ>{*5>*4~mL zm@sgKJ{Rs+(nOx`2} z>rvak#*sz^qy3y9_`_k-x{;orI+}q`N=yRhYFiKtO(oRS!eeE1;iFtRn9Ah|JY8l;TdDuf_ zL4xtr*;ed7`t)$D=i2TZ?uDifof}2Lh2@`7>J&>P$irJcJ1lgPR!_Q) zi9kK6!LbS|Afp>x+Bx6jv*5;wQ1&PvWC#hs6G9rS`z>19bJIgVaCIyY)A8E8B!`u3 z{6yrXOCS63H$0MT6yUHy%^N;sOXSYUnO|$=H_Mk%IUREWS0rz0=m#SxBrj7+Ih&Jr zrd`bV&SLU1p(J`>0@!B(+1h%7;W&0lvPsxePq9f@qVdFt#lK~K9eQU+Ck=NR)HZjU9nPqSzQVMPGsO(qGWWZ$i6jIaEg@?^0kZ%aHrKWr zMi!f&KA*rtxJX+Bk- z4(74SNgXb!x#MfpU}VHI@i#2CP<bWC{e~)LXBjCiP%(eW!fZl_>gzz`?Bs;MQ51c;G}K$gSQd$O4~)H|dG@s(HWG9asWu zP)b^3!^0Gld@CSoV4>3Yk=pnM6#Al3n9uqe#E|d-3Hxc?dj(e%M63s{(>Ka`V5+{^ zZ#{6m+`wAD_XcjF!F{s*`P$KE2e<;1Hg0yK=N>{bv1S^UxS@;g5kWYiKht@`F1#K2 zk8aCeQWp&+|#853jdgiU1 z+a}c6P1_h&Z0@!aA&R5Z;oK!>&UkSGZ4P}hAygm34aL@&dg0$+IL_R3=Im`~#zbbT zmj6RBMJxW|?*So1&4hu~o;5WoQP&&dqyqA2AEtb$Ca8N((w-Koe48)zwIPI(0WR_X z4f$Gn;cpQ_@dAugQ5`M7&~~3c&|B^P{eHYHsT=;VUr4=&tAX6>1V>~&tf%5Se18G! zP+@Wmeja@aeMBB7S-d98;AJ`sr(u(2u+9=VSsYGv#TPAUV|F8{JR()_!=_N#{@lfV zW5Ipu5^x0QHB|PpPIz9OZ4$b83VGwx_;hsUa+q8vw2ll~U3p0yt)A7TjVt6hd35_K z{*4z-5M5kt`ievYgfP_mi-heiM0d5_-c>qIcvl(S1F03?K~wB_b~i4smwiVT?S7_| zrSgO6vV-=!NE;WJW$-3%JTDZaO`HXcLLsRKlLs-W!U9NVBkMxnrXekA@BZ|t`Mq(I z%3BU@H9-S@DsYb!rd{oxCIXn)Vjj}eb{^ztjtNOwdlBG`KiexcX1!dK$eeL@uOH~( zB;8@{z?qWjcZImO4~)d!tNwl^KsIxfxbA>?>Rr_j+i0r85fl|u$ObTdcyg9BVLvXT_4^?vR~c%+%qwT zgcK{=c1jr8Ag>}DUgoM6@ZR<&AckA=BHYB)K7b!%>$THlW~pi>Za0LMc#11u>gL2P zN{7*?l%|%h_zML$a2wTEzba^Nu;C{Bd&y^9)2g>${8$d2x($9+FHg1$aJ(@|QRAZ0 z`oILspKfhMw?p&W z4Kk7rO4FlgkfYit2gRtoA)Xlbe$sbm|}sdj1jr0!v6 z7_{G7nj{_?AO4&8OA!x^4{(QBnDk@dO=QsEWC|*s)aC0>D#T@o&eu{ZVLKBh9`Uay7HjTquY}rH?3A!w`gkSL8pVx1~U#!xzZUpC8`_9`ME^u3WQywLB1G2WDmW{;Sb2I_KWTX2 z=yHvI5}=fW%w0TLr)4J-yKS8;DQkn|Tad6%kFAr@D^j~2(oSS)+^Mm3@^P`M`I(*M z38&GWc+RIglmD!fP41s}CX0kJsvR~(!uu#Hs=+W4R&pP{l};O{P9`8g#7+^PC0KEz z_{xpCf%aJIWIUr$DFc!7;!(4#sj0-POpmX>31reQqERVTzrI#p>msoRlrPn|-?Rdc zCgK44gJkqnyamu1S2HjUanEC#*-G{VtIgH))m`Yoc9kCjs(1<_eUC4!htk ztYlFeUW)n)yp*^QC+G0|c|-@bl?=~oio;}=#&_GLE`a>M58@wn*=w5;iE$+&$si=j_aBN*V0jOr2Gm96Kp zP^gx4lk~kp-SJ$On=P6Sj%D?5JU|?bOh~ofuRndtQHvK&Upo3%8KUoP}PA zW=)0#dY3wzn`90^2@Y4_|K!W7<6k=BUy2AfO-(dkR_QN2;XlSd%Z0j|K8n+Av6^>} za2Y*eEAftVHbthGPh+$6h>Vxg{%h&Z?>9;3>VBvPrb>n&;w<>55QnckGmv8SsrkPX zg)$6|mE!(pzRj)ND(h#u6!)Y_I^QH^o8or7ohl3TJTvM(JfL{71j-=3=@9T)LAn|1 z`3bgex?|paTOBLi)-%-fdzwu`qB&+$?mfv?G}2MWCpBVh*)^=Jql^Q zv7kaJNb^9^BhtmCftK{B&3T$vt+*G_dLq;0$(@4`CMp{@M5!+oaB~ay->*{F$q;!e zZsVQy4-$+wsT+2c2&JH*v#NzvU1-|UdYMwk5FL6ac3i%u8TeXuQKV~PFIq7HZG1gUkGiuv*xptYW{T+)%OW~ z=?Y#&8v--qU*WoWbilQGG>TM|b8w@yDR`l^)B2)sL%i9+Gw8^_k~ssQ$+*+L>&Kkt z)CLA<(ewa0GHZnD)gtl0Ndl81v~qC+KfBEaRX36F>kQ*uj_oru zZI{|em;*oRd6N|-7y(ANO4GZZCp-W${{*+8z1SBB@_fIqe9}&vIr`=-dt|H}t9CKM zqSGSrI6!AX@0IFVxI)MpWHb1ad@?m1Q5bK;GthMOT-Z-ukfEaaqc~cR$4Hu`XlB5 z6_rOetL(?pXxM(ewywBah;n1WGX>K@LmaLbL7SFuko_dGBQMQ1;kk3;CP&i}xo>|q zkz2uv{ng>^nkgWHKb1NkBb$2l`!LOgQ9w6zwI4s!&(U(DH0DpgmB!HAV}n2=%Op0) zoxw?xFGN1SI{)Za%<62#b9O7ti0ax8{}a0%ibwn;BGDib&QcXI!lW(QoV8uGEVhjY zuSt|t{?~YanB@X&3(#fYzzEmWQ&GbhelvU-YUuh??42F&GBWfhB9bv*F8C~dw3|gs zHQ1mS@~nWGdhd77AoL83ftgdA>{Qb$G#~^neGgs-h(t(4##mT+?dr2t>@Cv&X05EF zg=OEO86W)HZbkt1w-j2NoFucTYClgE7#A&y9T?(MfjV>cZh(`*JrxpMaTx&Va3ZF1 zI(jWT6EOc8N68q6M)K0)s9@8#Xvv^K@u92`=k%enePCBP{V+eZ$;s-hUkenm){ccD zt&8li<>h(7%S9HQ>pos)T;PiDr3PY-FTv-u5lXfet6WGb+jRcD-m>0g<;qa2U+lKw z42Pu1?UO~nL{>V!p&2egmUTWM$sOv72?mLr3AD)w0+j7V>XeUVWrJVyoGHzNIHSd1 zsf;~|H@%y`61D}kmc>2X4AwE-j#kZU5G%0Au8RQm639wfaiLoVx8w=C1ZT|7|+P2$V9t7}bC+9Y9G2d|K%sU~S6+I}R# z+HO}DnWXKx8mFQh)~>!|l3JFDYJ3nCvUcS$NmE0T6c|M99&5@dt9&@?Ocu>O%!K6o zv|KmCfzCGhh7pWS8n@G=USm>a?oMjHTG%RlvCh2vYjl4S4OENXv} z{a*9#Rr8LvdDSA5G-{&mCq3}0>rK+H5{0&_0+W=Yb7}ZVYyJnzPYS)zy!#hXn`y&c zQo`vb=^c~wBLl&zWKKT~a5FJwQ`hp4(;Ap;6(i3D{dsflxt-xa)8M%Pzd73x44Avx z;IN!3{qEEv^h&?OhkU<#$iMmC6JF2Q(Z@c`c!<=^d19#^#A{96r`Usdzeyc5Gv3X1 zb%#lMXohaL9=io5X_)y|#xAw_GnSK)uCrL^iMsIZ#8Mg5T*t_YmO|k4Bl7&2RmfmS z38yx%A`i|_L<!{`ejKxZ-?u`WWDSk{B0b) ziiuLZA~*%oo+9=5r-=sjZ@yUP*v}3qFN@WGL6F2+p$d1EZ+~T;vt_t7g+pF$@B(m# zkPxDeuhs? zBAN?aWMknaql{@KQNN)*>;3AVPY)3aC#CGLOjdvWw$^vp$@`Yx=pbdngqsA%H<#Oaf;SVkq9nBS#|UT2VCCZ>s{_vt2{ z6Dnv+qD_gG3Mch4)4U(vbvP!i0`EXM<2={bwmK;=Kw4y)6Km*fPO6!=!8E7E#RLl7 z000`$WQ>{rcQjn3phV(o$&UICLo6~)_A>Yvav{bd1He68(=?b&y$saq$?)36CJBJW zx3Bwth4_Qb2m~-%09$n77LkS|6nO}$bdj=s>WR-G>l#tt(x=uH^5o9x8~mYFm$k*5 z4@X%aga|LX$sF-|3<)ZBU(*qcSZ{OKsQEIvZ+%v^oI+5#w@;~W>q9EcM@+1|)p%QZTirz-jb(ad(L5->_>I8;cJgzUfkAGm*D0H-)2q`@B^8FRY)9AS{zM` ziJu%J#MIian(G=;=Zg!Vy=)pZZ+~hHhSQEneU?dP?P8~s)5uk z?K>F!Sz>rawK*Sm8gT|se7vVhz^nL}7YB!EM4ndi7-uzeJ{gXmEA7oo)(Q)%2Z|hR z{Z4M~m7l!^Z%!Y_gqb3QJ^t5k!%qa)mPc06c!x@mv~^NdOtLtZn}{E7cQj6aazN8r}hfz~?+l zudvHxXn&xd`~IlWKJ}*3A&v7G;W5>fzL-jV2g-|Mt_#h(i5e-$^uSeP*U|Iy6}zMk z9)#%cPwdgK+0;9a^NV)=lvF%-6ts%rqtQOqe7**>mT&w|3$WH;R3sy1d$fy@`y%)n z@hR~&I*1l&dtK3wZ1PO56MLHV_y@kJgWBAv8H$yPRt~j-^&CEho4Z}0GT&QOfZ28L z0}Yu@A{P%6X4g7i2nethZdX6OLsSesVcO_u86vMmF`usS?t+j$*;Z7LLNQgo!(*M5 zC{CQExix_^YVmfDEsB6BEMlXd`0L%WL#C2VlwN5GxKbdw4M+ybq9uzaMhs_0s^JwB z6GwGXOl+&89;rLME|;NmIPCo7E>hor3JDXQQ4s5t?a3)q9xbtw9mW%WQf3(O_CY2$ zt+dpr36>OU6ZSF@6qH{!%TuvTaxKBc3~<_^zW*!K6QwNzP2mFuRK&32L?QHhEdrsQ z3T*ZS(`-ECfs)_^o3TENIGl6K`uekcy2nB%VsJiGV81cX*4Z zVh??`E)z80VZp-a>P>c*S{7r4PiMioLVK5j`$C7#Bg)C4k-^kL^>NsQL!L7nm&HAV zEJ?U69)RJPV2!!0*!u-ujJ5R5swPB0t6Iu~h}Rl5a15}L;XHTxa2026!{u~W03%su zTtj>t23i5PUuC_-WTq6Vo9<_tX161Nn-rPdo-=!&Cwv~qQ-k1Tj)Lh%b99DlWPdbA zcXTR_O5CbnvdV^4`q%_fFn{%zXpQ0cf1jw2;@-)v&PNhQOSJ;2(BUYMJ~9#oQoQ6# zu$Cj8HS2|KD-36O!lHT)kjk-$Q)Pxv3djsY7~hJ-sZD|n7IH|=;jrJ{2h zNp6|QemEmtrTU=l>eb4(4IRw4<ND?2Dq-BbGNq)!L6=}?B-yfm5dOgazT{Ktg=imvUIFVK^P8gpj?GNX!a$Lvk zm+&X|!uEuo5MhPadf%2*Kn)#hX7&y_WIVKO-Jx4VjDn%ii7AV2)!A_@BH%|wvKp|N zMnCid!+Ie62X?!`Zf){0<@@q7eP%5>!RlVu+1X2&1(AfkberKvjnSt!urB+rX4o(fWN z`I#M!Jd9qEYFYU-&W>RCpC(68%uFZgouY1%*7B~Klp%>|>%Yl~%Hy4QJs`^NIPq5Y z#z|fhZU+F5w(H9R z&%A{dQcpcwXe?`hdYqJ+EA^m{iBeCw)MM33@`%Wc&NAcu85-|T=5hK{H)*uA z(C(Hs@j7X1?TK~IbOgqJn$^1wwi^A*ccB{P@KjXuaFo$*zE^V8<)_Jy`Q0vT+ z5gosEmNalNv>~cTQ_@&mV(Dsv!=#IG?pxv~6FC|6xUFJuPI0$+iglhDsfZ*Z`Kgg< zc$yPC+(^DRGRi2E3S1nEgiPImR`mBI}VT|_2F-0Jhm zaNsx9#wW*+k6Kb`X!-V$LD64w-!RBg5@aA_;$9WiD=~+#W{g#@{^{u$$Hoq;pp7k# zyRY%fR?x($s?yiY0jyZmS%dotB_v;~w>#JM9(s z9${SL%<-1YI04`A1_Zpu{LDm=${*gMH}+dGafnAmc!OChTz>p`2q&TR@}A-(Baslk ziLCGlQpl5Y3dDuKrRbZBUV1`B8%D9HqEmDs4l;0j(bR!IDxwxZW=I5ti=i;C)kB1m z{ju|x4GJo>=A>J>8JLAfUF9`RuH;RSP-1t~02IYTMl4uv^-cIJ?uB=ww|QAo{U^YF z&Kkh}O-uWkFI3NaJ6-bF`gVXx4a&cNw%a+h%FuTNp4pUbW)hqzidG+Rz9 zv6(2Qzzu`)2J7;%I-FApx_-0??wAq{>aSLVf1%F`IAzoW!mX7)Vi)?RXP2J%)@VYSuv&VlJS@Q63TNMQzUaj zbxagty|y{jmUA8xZVoSH1HAU^$IxjjX;}UX$*!*8(JImk0qvSkV{Jrhpb1HKE556? z${nKj0evT?`mdCOi24)$8Cav-hsxTeP*0u@F&eh}PALjX`b+P^3pn^pvT88bWds+V zVqM-5+IZ&38qIDQwm2m=C=(hF?~xl{6h4=m&Pii}qi9&}Pk!N4FPueD1nKitm&~RF z;bp2Ze|(xzY?tTeztOkSq>|0s$Xg|Oi&90U;lz5-Jh-PGOpv0!T@M_l2X@0{M8C{T zwEe1h+ZX>qw_TnsUo||lP+1e$fnaWeRqHE#t^90}_<|DJZ9mSa8P#pD+1k|5`vv@z z+LWuo&mP@vCo;M>tkZFbmWb`Mk zFYq}A{y>A0SSq4I2?098Wug#pF6w$J8ooHa)P=WDqc!O_W%<<^TU#8~-7f25VKKph z7!kwA^JX`^$!p5*#$VGJQgLvGaF5XYDO9&zBAf|t=rTtzrTlIjDrMn`l!|k7^$Rm} zIJWRzq@al@YM1KOE!3d%L`H}7FJauT7Z#IHXi@ptS}8dr;TyQ(%Z@8vZX=J%%}659 zUe7Os;eZg*FSXI?l@LSvNqv?F6_q!ZR@tR(kkV?yKatNsWU%U1Ud4SRTEaEwkO^Hy z%$0W6!jr&eo{GmPJeMv-!gI(G7$B^LG&;LN^Xa`U*Xy39lCrRm@Fms{OzQV)g+9g#<6@(mE%TDw`+&SL9MmsK~i7KhNht!eKSSt;-m zY9GG%EDg=Ti4D-IxDGhWk`Htqd_|KJsGhc9dFXCD+FX>gQdUTJAetec>aQYW%x`F; z%dV#T% z<%HT(J@<_O8*?|!;_$KXr zVLP_>2@aHUw*4nj&L+kLM`$^xtt#f`FytHilv7 z0ZhvdzAsiCqS!RB@HKj0#8ErKILMAYU|g53-=M`H?nJ3?ueB$9dPY`tcHX4~(m>&! zITatUZ=y06O)an4O9YIjoV<*MLrb1uCXGX>srj5)4MnfrW+zWiS8sn$o81qgMX+si zLp6R%l5c&D!B?9@S_6+=RpM~;Wi@pjtpd9tylQ1HWqJ~A920M2-egKGxtUH|bJDEa zz1FP=CHFvZ>&|aO-{nyOplt$_s>-(udZxyI!$rf=v6i5e$IZK@Y%mm%KG{&t$ zL{Q)Z8*AaZ?+CQ@iAVR4g)ex++GVwR@(T79MUdyVMbPn_5XjW%0M|KCht-i`Rz7G!NkBXdYR>ut4(5fVmL6HQ|mCq$;?R5mL z&37Gks2a+ZlT5)bzk2P{_o4i^nINwX-{x?4Q}%26bcJ>L4ooVESFwi0D^LE|B2Ys$ z_ER$??nbq8TqIeWidFGvVDZ_Fbjh41_k5cQzXY5)n`%7%?anG!tx22*H1%{P&tj9= zRRvei|0rQe#~DZxH8|n+ty?CsVM~9%v|5xJICDY@mtF6gBkFwxCpdnU{lc;JR_JwYI=d3(GX&D_+MR3nCJ@4=6;XhGx0xH}ie@(Nvq@znSko*!cT+D%Qo5!2cXl|frf>3?t*b@9zAO=p0Z=wEQ z$}R${W*6+2D&f@Zsq%eMno{ZeC#)Lmu^S<`2xcyysWb1E&0?4O(}iZU(A-Abp12WC zTPMjDr~mJlpj`#R+fOUDocPY+AV5+iTA{CZ$#q>NR}_RGuq8WmRiuCOJ#LzLhfC{L z+PaR%cvNiAZyBxb{cJVJI8NcL8=Q(Bly+{G;aoT#FWuA<4VQBj=)GVU(Q@JtU z?Jh@T-BmmV(B;JbE>*q#&c9<>Ti7R7*0cYQSjm#Q|r{cp}05>@*wD=H&iq<(#4 z4Pzkp2^!$3KgJQ26_qw2Y>fy_0pGEM-5;kN(5=v@s2ae_Q|dkRT%vQxIE#3w@1eP+ zecjKx2Jvb1I+Fh`WU;kQau9`^Bj5Ghu^UHL-YPe6NFNIaxZ^ml#~|kmPlX8ovSKH| zf4=5T;XfCulMQy_z(Yw$VP@lDojbKR*`@Y7iUsg^;7>ZkIhE;{jXRF4t?D5p}AmghfCP4((0$(RvGW$uV- zAZ>9PfC=^sZID(XVtHCdCMqp3v8wENsDabtIl}r>*I#^>C*w53Pu%v+Eeq|p!D}!~ zLz9V)1!mf?c1konnd0ElNR{fQAX)+0EffauqPXHWRg8VF=G zqQ1?3oaD=$UR=c-2t-R^CYmKiwK2!6CETM~_{aLL*gG44vBn~nJBP@ z^T#Bu`Fq^rQ(soBDM89DQU@Mklzp3}I9(QeneGZYv$LRdZY$ml7TWFbHL-p)vNB8E z6#JJ4jxIK%yJEL-fU?_H!>zEOQcav!wP7d3sg0DD(`Ybv6GI~d3QOw2yJbAmqG7=` z<_lQtdZ;F^;#{Qwpm!P7ka7mT&&3li0urPMyRq=2QcVvS1ShR!bnTiy+C|M>hNQcO z5A1BXo7-ci&5Vd?(9c)cbLXjeT~D-N6jPV&>G!r1sPT7zi#=4o;FcIilwuLEac^>8 zw;6{cASV))40dl#LrPz>8xqL3Cr^jewHvYjt#9sjMrR`iNFy{j*~7Mm@0(`|B8i7O z(zCG3o`vJX%hLN#2woncczY0j#x49HgnWf7(Ex*usX;+sj~Iv}hTw;r6LXN zv9&b3vu@ETJMNS}{!o0RztwWxz*yPc69aoQyatqxfY*s|OS?j7w~IEg&=l2DS`H^L zNUU44!;c3n*x#3O?zK{)(GeO-zy+KPV}5A88Xt15wZ*gV$CkU+8IeXPVl?V z_r;T6@KK|LJ*EGPW2CiW z_Yn0}uxN{MMTDk;RZtPyJfe%lap=(kM4K@|Ht3yEMvz!!X$uO8l$*gZGFnhU70I(? zd7vAq#+|o2*8Fol36h{9w}`@W5OWibPaRs5a=}7$-yj%&kN8hC31J+Z89gy#Q9e-z z7Li$sLrnE_ndUuk=xhCCvuF)NMRF3e*W-2Pye3hmgZ8uKt2m3@5~*ntR@1)a(Sk=n zOnv;F+{4;=^W_W`XBz79p3`N#TY^20w^$2_57cj$#-g4~ns}VekXR5?R1UsU> z)kVy~;UO{yt7Q%@(rQvQcI$ef)^L<47q8)DOck?I=>hUF9PbVRD+kXjFWcEKn7JS# zB2Z*dLP@m@DlhwUzaT~e>yd!6HAaN%R~`DY=aS=6Vi(3C;!}OK%qo+LgF|MvNPTYv z!GL_LyNsVWsS+RVeP(qten8_qz)}8n8BoTPc#e|hTNAqR`Hr*DsVNWD_o9(&rIBlD zeb4c3t<-{i8dj_AIuR>--&*SsCk^banGZH9?A-$tbdl`dW(o99Omy>yQpc1`cpYhR z$MoLNS58=mU-b&6)cVq#Xy5yAwB&F=jR!__fzJA$7`4CDS>OvX;To+j%51|IrBtK^ zJVuZr^NA*+T)bvYT`*YsfNS^>bT2Vb=xD76(J@ddv&8C>sJ3YYSXJfIkN{}bcp@v| zqclHV%eKsxDIe(hSX1gKWID7>8PoCR*}G%ccC7|@7MAak@GR;nGW^;(6F5YV|8mBr z5Rcvk=`yNqS|4#6>t{Ly^>;NKHd z(Q<}l%yX4W^(=15$|3K?;^8_=EujrW<#-W&Xkfl01@-d!r#}`w-*mhXUB8LF0e~^? zW)M2G!Sew- z52tb8pkg^&S;1)s8_q=KqN%s1qD>YFc=UFX)A2Pg8P%4XrNM0_e?ef0-s|P?X+f@` z`vgDlii%2jQ z*IG6HMVDyQ-Q-sn?KRsa8J<2vD5!L-&r4Ro7=W3e8-`!VvFMv4hB&qr5}p|SC45ey zzcg2xAYZD69}7#NNzIWG%iMLnWovAf!O;z1lHb3{>_e%#tGb`R>AnVfvdvT?b(BdR z@{zikIuhNS&qKU#0~39_x`}N`>>ZnAThfhCuMLOHlReUi`d9#GIS^ET*D(M=&q#q0 zMgX)cqVq!hmoDzoGAard(u)A`iPLa9b(|H$fc4l)rQVzqBX6hQYOf$pWuVC z-K0{Aem0<#rQA0=YJNVo$zd*o3sFC!aLCCe0-aSFibT`)3! zm@nVWVO~a$31hVV#f8!6cyg<+as|m(BeFrdyYgjzC0=WC_FQiuHT%(GvIJevI>ikI zoSCpF`&6Kae=Y-){peM^g;POV_M>yr|WbWKs>!kRSOJU#05}7eJ8g`K2SMMR0 zu=G8|Cn=GzToJoU|0=_y&BICh;X+&9iwH75fKT?M{BouegUw zD{&^q@v8VZ#_N(+Lo>S7m=f0N2Hoj#(&^D6_0-+*t55EcK1HI`C4Ch)G&g3d(t6%)+=*~`Fq&q9c`qh1V?9R%gI+Ve( z(vyvEv2{~PBG#b1XuuSwdA=ZKdaaMn)-^<8fQdaJ(ch*-fA38HX1nXVuYosYpb$Hv z!0>3eov9FC5*2r+VRf`lz?2inXqCD7GvO(k1Ot9=T2T#taC+J$ps8;w{GzCgZ^W5B z+iN`QWv?tE!RWQbr$Fi;UeyA|-vHg!W@iwXlQH+J1do7_jQF74T}S-Bp+eN-O@F((f6r$OzN}Grjvli#Lbns$5kn4VG^$u{s^m^t zG;$k_wsAFtTo>vpEaMW5)^qKedINonMgv^Cq;fVR#C6si*Q$>mGH0_mX%)wRq5auf z(aQRwShP8X(F>9;8ihx+9HS{aq@+Co0F8SRTtE{L@bD~k>i_;FJWkvb5upK1O3ZX6 z7D=n@T+y)#1jW5+i3t~B-qC}V*ptp}Pk7BEK;s->yH1x&a& zIO61X?yXD|{^Q@ZxA1!P>0sgE*CkUP%J|yDOa|`IX&Z`#jE7&Hbq`R7m8>%`v_v>e zUA7=|;>5gYb80yXWPwvloqU2#qo7rldJ#JzCcnYQSX7Jq&5tD8md6`2j8{nQR1d_B z7!|*m))GSajfJOdP06szhEqT8GxqCXi_al&;J9QINvnMO&?Bw#eXP|;n}nc2hqMEN zVppWBQQdo^+2t{nu2*;PAU3k16Hs=l0I85yVy*m>Mm+?q2XiC2cc(LK$+U(}$P_^@ zzA3EmqedrgGf6k>lfL=U`_=tN?N=D7vNJ`u0rim$>*X4LnQQsd5isn2DkrK5Hx&m5 zsbLO1&wtMrL|Z*NI@R4WP+emu=Ef7f_(%?oox zN~(*FzgO&ke?W&9XnR8|MfmvPdfsDPi{Y7Aoq4c2!!6PwkJz8}5B7r<{`}v)v{kZk zE*N@*37!Ec{Z6PG?fnC1gXu?m^w;?`{UeRF%hyb^fEz~=YPISdBQRA4f`4^BQJCfjma_aj zZhoFOKSB$TxJ`ak6WmM@=PYEMvC&e%EI%$vDOFB%;Q%-2OK+3D$RvoC(Mp*CgpQs8 z;pMy*ixID-hemWF*OG*Sgh&U&k8_VR-FsG3)5w)Fl_R5at@*N7Xk${%pJfsT`B7m8Qy6OMev!uh!)ShIzcsXzp;&fZQg`N4%jLxoyqa z8vN8`G_Z3NPeE5>=^|?O_DZfdpp~qvi|D=?(89quW-wM*s-{@4-S3*=Cet|Gl;G(l zf22=c3`Puq*khDxrFgu0a3T|%EIkZZ(x}M9eWF7uBP6CY?JbvEdTxQX(@S z*j&E`oI)EkaC^c}P%B$7CE#M1D;t)}N|B)U4VY;jNnFR)`5DRBI#GgCB|iX#Xni=O zU?gyiI5M|wh0wrGW$D^vk2piHc~r0iUWK{()%A;s#*LNmXqdSICF;SO!3*M}!c*~I z8rQs^i{M;Og>I`xE%wK_tzF_)r&B_Sp}wNwHBzX7H*4xx_5C}929U&P^nR|9uw1Lc z&vUH|uh94F^!-Y%mL5v*tR8Ap3e?!cys8U7!d25@{jUer>eAHD2MU$7jW>cti`Akx zC`6Ck(cAeEV>jyi-Hly}U-MzIC|qD#l*vtJe}q$KvyH##vM{(lMYR_?T;CiZ;o{A(7K_?^bXh-mPbAOZE*s z7}HhHF!>65YM0et>yVH{-WHU4O`d`(=P;JN1i~q3D^eeZU;(yTv)d31TGOEB(sPzQITkZQ9YxQYmI+~W z`6vQEmG4DIY0E6(`1*@5vM9&D6302KpggpBco$y#F&tionJk2nw$I)e_WYZ<6~mq$ z^V-~CqBFqRHY|jp(k9t2LSJeo_x;g=hmXV;R@oja*f@n*6;t-Zo_kV6*gA1kjq1h3 z8n<#~-kgJrfQMjD(}#Zr*RwV-1n-o5-NB6*zq4SIVq>3W6g7us%ji#I2YkDn!TkK3 zgA0F4E3llZ(NtoZW6Ya|sZ}{UhP_hoRLf^Kzh5VhzG^lrzj2(;8+0K;%>dLf^={3X z-QWpD1?dIToBshS9P?&NBk1`to;%mrE+HH5&k_Otz1rVqVm%Q><&+-QlIun5)*khM z1XR1{h8iG_b3@PbRNP}0Fa$#nEY7#UXi}VEaW)*o;pmTXU=cX5VpNu%~+Z z%UTg1`i%FKzU2=dq(g_T0{f4(uA12-)`u#llqti&(={6*=vPg-?hba5?NLu8-J50V>aSpR5iuM>H zHxG(gvhhQz$WHhOO07NP{wC>i(yh^ycIsegwBkowzcmX!dON_L?1_5Z*lekLxE)0Z9!c987DkmfOkf{A!YH zx^MXj=+-;BNh@viiY*_O8oGe=v}V=9H%&Rwh+@DOUa4l@QKbJlqxx`gOJp2 z8$`Yawg;<_F%NZR8^SUa@vdX=d2AwntPlKFm?TMIb*JT9i=jh1Wh6A3(8`UG>03RU z13fYB(jsADk)oE4>M+j$90!J?xoa`wxGNtP;$qua+!Yo4GPYsaeu42VmPzn+HltwT z(`GwVUEGl@I$dntr^qI#Mkl6c|7fu4Z-M2 zN>;8R>K28A8;vy)FD=_dr>--7XKB-2?^x^<(PYa5q9j<0zvp+Pw&Pkg>Z32|Tl=K5 zV6os3R!2g|1PR$al3WRbO{0qH!#GN{Go%4gom;r{>c{aT&jg}8=EnBtjkV#yPwQdPIu*LX7{@wS#P(HESH*cRJJQn z0$;IH4ZMI8P46Swi;C1g8sb|Sm94ytK_s^F>JRl+eoNCW$&z3%D&Y9H^V!*;%g^%8 z{Zeow@9=pt&`V8@j;<(at6`b^rB6K?_ujom-jaq%Xl(16ip3$KR`#O;jzrhn-5(-DTIbT$g;M^~W&5}QVUb9qNXaUP6gm@9tG1*;8 zSe_M;A8l!4XU00ysug*xcn$Eed{qfXuM_?bYk!q2V}ch9T!_v|_WGIy*^Y>>O1uGi zJ(+2!|3M)Nd_w3z)i`ym^1d{s{a^)bBU z;>(~p!nKj<8zJ6tj!>@@?s}^Y_0}}YMqf>~LbtBLt8_Ks#X$l|3VYXwy&DP8B^5Wl zzgn}ue|illemLXgadX3G8aKyD>iegM=vb1?^=?t6UJQO|sF6PjjzI`o4HOZ=BkO+I zL8xHj)aa6fX@z$#^5e{RknZ(qYVhSXu@?OL>k+}Pz@_ri(Z5Db#Z?#4baKJHl0BLb52!2g7Sg zg2kJ%G}Fa3!ffv2Y6TU5a=<-G$BQfLe?NhMPQ1>0aHBJ_tkOoa_h|hzy?h!}(FE|^ zb0A%md>~EWU8K-jiL6!Rw;q+u6Y4h;NST}yJWJbNS0Z-l^}+V6PC2A~byKJ%Oz%7< zi0ujr2KB|$HO9YRPJzf1gi;Lke*6fC6ixccNZ}8`wZ8=CeS6+)AxEaF)z; zfEi(WozC`N7P`&ZjAyI#Uj2Y(yk6sUyHrOk=IO1tdr)F4p8DIDvHEinw+6^u)?g?U zM5(H>F#~o7k^$jZtJxX0@wM}XovBiH@?Z-)6X$1dMpGgp0NGB40I)5>&S@pRd$9QX zt0@1w;0enA#(h?15ruB_pmuN*FQGmJ*I`N$dPZ=mXNIks`8)vK)d< z7rjVK#*Ex9f?*`@^{7jOY1+_E{?wg{_zQ7Kfj+_&=J`d#LmlVwcgw`9gm4;`T>EFO z7KW~BoA)X1t(HBEGfA4t9`j}s_Qs~H?n2N(7(=Wb+PTO_{dbX6amyo4M|_4Ve)$?l zniJ?7&UW{EUp#hh{+YfeDHH=|-xeyR3=A21yxA;GBmvW9F9XveS=j^Xb~FSwIZqUA z)47)u;`QmgcUj`So8s?j@^0;<=bb2C-^IwZ-6qk==AsR%wNn~K{g4agd6c<7bul3fje0OiLo0>7rClXOYC;cM*b9>KG4f%h)A zb{M_^`}ljBYe*%^@-$%D??bd`)1R(?%=<#d< zFeM1{YutQLTVZd%`a5|@oTzKQ2J8H!hvr|5+~BY&>aWzyv+5)Y7ma z=>pGm4k)3t=!8}ECBjmz0xKZgI_xiPBfILTKPA5!b1Jy)J?{2y=A=f4P_y5aUKb9+ zWYhTX;ozE3X;Tj|N9O!dT82y4(llJUjz+#!-EEQRN>ep!nD@eS@C4Jp7UV?QIhaKJ zQLR@)P0AbTdxc%_uBtiEU(T8<>36!3Y>x8+jR-JvyOd{uAk#{ld&2o~0XPXhMttie zc4s!fS~SNA7F8!0y|cSv0!I+no@(cZn$yQ|l&wGonWNsV5)nT*Ly6~pBPzLlLR&{jvLuS+P}@e7eGRLR(?>xDePNmAnGL>qPB0; z5ak1+*w#j2`&@wdTD;kTF3}WuGinaF(sux3Ko@!9*yf{-vS5E1X!2Z&CN!uk86;fJ z@PFt%apu2K-$S4;D}TE{VxEAc?tYbk!|wDtdOKNQ{MovWz=+N?u!7)o?GpgMN5|I7Pk)+q{dB34ul+ zS#x2YFf>x4)+={K15s!Wj z^Q$Z0p!}Htb+urRp7&PfUEM-!cc0#d)*_kNbT+=89T^Vvt5ZypJbY|LdbY;qdKyXb z&@KVW8(bHb*7#yf%qfnHda>psQf)U|KN(3L!8vDid}3mbJTaCSq-HCSnK9Dq>MF5{ zZV9yD(goB6T+YbEJazXB7q*u4Sm!~utXEkU-;&4OmE&{ajlMcl~DvnV|*(=0DDCkvyPxeqow1TBb71&^Au`} zS{+U-kAyeK3)N{k*d6AG&ZTlIzl8_A?mE$I;Pc3D6dx=8=QZ?fLn4*>HzgV)dZ-W| zDG4&ZN>D6UXT27+DXDxM4?M}!@>+Emu#Ih4D_>tp2SDI-oZ*)xidWoF4hjjFmr1pXY)VyBN^8GWsn=wK9y-$LOWX&Mxg`>B z{nA}L9)I@bbG593Lm9Va1xz2JY94dJshVg`kpaCduOh?Og?PyDjd&jZ`qeHEKCXI1 zfXPr5+ht^#{_@C%b<)sGdC`Sv2qJoI?}ZkdPQp6QmOL=+cE`k2nlOJHRO!WzLVsCi zG4~t^EFheKOOjzO zFjaE%WrjX#4oBoYWZC2IoO4Jg%%c2+??iA56sa42ObRpooTXcaM}#Lh;}_&Tp=#XV zrQZwWqBuQ+W6Z} zyWHYg8~%ZIr`h5j;8<1hq~noAPdbwMC*QTbu)wNG$S%}ig;Cy^vf;j8BOX}p!AFjL zlJa)Vm!!a~Q3Fyo2lF}_^>IRlaJa4evaR9u$y9tKap`0yj-i8h>5h&aPTAY4hfdrA zhD!&9Bdk4^uOa{F;JvoSG_*OT=Hp~foqPP-;pzJzs1;v;uHt9l9#FwvvV|AxprV8! zuY*xoPGeYP@suE0w{If`eiwxu34M~no)mKYk}&;7?8$KWQs2EoG^Ezm#0BQ>p|-=Z z%??iBz=coik8_UI=+84sUI2uR>3RQ3^iBvI5=%u@ig-!Mb16hQK*~yg_BK4XZ68Z)bUE>|3~*S^#pC0d@@bv)gDD7sV;8-nhYA*Ej)?;MJz;ZE!R@ zoZAryrXP}(>O=dZo829g;JhgbVYg-+-JDkc9R%lU>aD*j`D2M$I^j$@=w>zRjHG=a z>iHsY7QSIqimfp@R#a;P7JYlbYhdRK_K+`Xsd#J!^9=)AT_Z}87zQo!lFdHoHZvX63OitbMA~=#J z6v$Sp=3w{Wzy1@*P9{F>n&GDQ&pa0?n8zXujsN6PMlKdy)Z!8R$k=^`oRM(nIgDz^O{^JAgd zsW=cmaaLU2w3NFVNb!|9)#_(uye#dlF+(gTWx*6qTaG;0ihy{>=%At$& z$TDW)=9CY`B4`F)lX|y(+wcDSgoVU+|5P~U#O@Cxej}5O)rqf^emdCg)9;*y8Ig>< zrO{xeU3dolk04Exht$xOwH(p2Zqjkt&bHwm#vkeq8zm%50EwEt%ZtOoCap+aB~E&^ z-YWj`vD$nzn~$h`=oM{DfK5XuU^CL&Jg2+;Xq5eEkaJ~IT9b5%-$9!_X=uAA(qCtL zBC0G)15X1SfK`zs0|Y~5UwQyQCca~Mw`3}AEFoV!Danc}bS$8PfBPTY2uBP;EfAnTvMUxhe# zNVto@sZuvh6O`C+vfY20Eq)r=8Z?x68CR@pI=kYFYlTD<>(XsXU_Y=}-lFCBY97Hu#>s=~n9rjj) zy^F2+*|lC|O2Kd0P5jK7U^|8B1l&6TkIqhk@%j|FOe_eT0*!JCfHc-;ams4V8>Wwd zVDyAXfMzu`7E@Mvga@2!z~D^|IhpwYhjp1KB0puE|0W(24;aVeCj3MGL%660E-KXU zD_gI%Nat+^mLQ67xV&xy@<#pc8AxqEX8lBUhDm~(BxtCI=nh?Bii zvH>8mInr?i`Wf!&a(UlA!Z>%3aV3^CRSznkLD}zx`Vk>k~d3+7PMwH zMh1IUR=q}?3_7|;o6?*TY%2pW?MrFT801GF5ZX@h*0*LSO|jg1;_K79dwoA%ugw>u zKs|S;4jvEWlLyI7=vVW*efV8BmFP@XOcxu98Q&9xdb|OV5M23E*qr%fJ8^Z3*23v@ z!rvt@+tmeTzbNv!LGCvEU00kFzOeQw-Ds6<&n|O5KXpNO zcsgn#$7{~#R(Sn>C-mOFtudHj-;L_aw}jsB7kclmm?`)Ibk-%1<*}Xs z2AeLP@fs`*P8hH}eoAYEm~#SXY=;nI69_Ri8!hhKdodVNP=Caas2W8${P=WFRf(rY{_ubvIyE8aH1p}Hq zLD=4P+WC61J|-*L9g~}FMp(;-2_{d!A&-HV7QvW*cDPny?%+tRX^ zemcSH|7654jMU$p(Z@%%g+dlK zHZUQ}QeQeSAR)PQUH}d0#c;!;FKtB~JCR;aiW`1^x8a5Zc`Qu2y$%Gdu@pMUoi8lN zQ5UG7g9hTV3|fDXqa$y;)T5EUbKV%F*Y>nBaJY3o9*U*CiwQG4V<~O~u*xP@jGXyc z46;iuhx0Tw(W1}TzJ9ZBj(Ar|ZiRF1!g4TIpJ~&aI5`um?Ok8%-Q#%sw+_$S?uFI7 zX>eatF7^ZbZOW=*5odvpaQBwk;qCW2WrI*Cz_Ty& z91o1J_Gx)ms-!Kr7eB>qH;1-JsiIG;8B29-85;Gap3J8=M<(Z~&$qoB^BfNzvGOBh zGpKgfx_${VfUm;LIh-EJF0j01H3xg7>`kc&Poo|ymfcmjDycs5ma)#8Bfd@QDY_$| zXkdPY6epW2FQaqio(>&Q9M;|~8kLu-IVxcWpc+y5Bgh*jkc+w_N z!=yQB_QhkHMTF7&C4yl>MX^<@DAu8(XuwUj*1OTDD8#`G5vJOFh#moUqQK}UI#X-m zQrKd0@zl*ZyGxA`Ezyh#;cC8pyB5TJ%KAwXm3pUTJK!)Q{* zC5^D^2Ja5lq)3_MsIHRSC;=jpK`ddxB@sRSF{Cb*8?Q{pf_lZLh)XDf@~N z6Tc_+dDBR(;;^-u!soV@V87`W8y!c7UDma*B~t6QWeIBkP4~C4Wq%vhQ@Q`){#NPz zo%NmW_qXZ<`&(t#RXes__IGtB`@2~0@6w2uFYIq-O56QCWbbb(?pgR|xhtF^%*bxb zIcnGtc01aMn&L#e-7NAXD!1*2-zX%ZlxES>zjh~EY1IEe| z0LDt383ghFRx5z9suRE{(|}PyHUkY9pJP_mM?VnptUmgi3SgDREpg%LL>5}!^_tCJ z*N)BKqR$V}%5!SqXf0<2(pNaBOjMRtNZrnAE^>5il@B}w?SMeZbaNX=zkTpfkET%? zw1d8`K(9N6ce9)&8ss*mY3c$9wo!OTPmap8fxE_*gQN>8(;#Pw&gAv)g3`Jc8naG~ z$@vdKX*HmK+ZreXLb^Se_V@aAz08%d6WJM7={5eJ3%g(ARVP^ERi@0L z`p#Ba<|;?vTvE~oq1sEs!DXzuKCG=wmRc|Jgs;EW3Mqv^QSNONmPwG+<6Y~nd|9im zH_k$Hy}mWB+U1^&Jt{XLkB^4l+XzTv6)lTvYi)kaw%2woiuV&7BX5dWN!i>kL~(7Z zO_+2OqIikEmFn%|LtQ`Z=8TZkd+PppM@&Cqn`jw$ti377U zlGTN_&bFBvdR3+krsB5*Ki!p$SUSq-oR!ubv{fe7QmWNQZTtJ+QrNkanopBQ66QPp zOF(**H6tpjfjAc^#&U$gLskkqp)>Rx@~cB%>ivk^q^;PV+TfpU!)Iv|=LBjBPbth{ zkA$LxQsVkQt?$Xj8d7$@_yhbN*v#J^Ds>HR3Z6NR%idWg|BTV>-Q4DpGa z$wVsNqc*J@xm(+OwWT#N zxBvD{tr%XdA2hmak+38eNH-m@>qgTZ{Gl0ZvM8yeqFmSR4R18Ho@~3}UdnKpyl}c6z{jB=Hd_YdpT{VLeO1Rd{0bAlxJ zMk}SA7oG*+Q635t!cMtQLOsZ#4k+yF_FWy;NTOufSEj3O+-Khj!#_sxWs>O$U2 zQWkY#Swc_M&%X53gI#H=n&kKzZoBkcVe8^MxV~x7rz|n2pTJcdFis(sdaojWC<%Wc zbjQa5Ok>Nr>g0Pe4`k96-^6}n`ob=QrVOhNQP>!gZutyoi|dO7wY2Iij#{`@pewFE zDmX%opnMYEv_>w1ng+Ic-l5e^`*=#Ln;y^)9tXMpE?Z_$r>Ps3FFBT=8u*M&{1-$c-I!C+}#(B?ar`Bti8nqE-{{)Xt4~lgXLXRc9T}B-5GcN&Ly0 zJxh~C596+w3zAr4bFAx~ggRR}c>9y%-SanhMKL#|Y%l&u(j;B@=}Y;hPMe%1p~UXW z3-opM8w#~c@E5rV0i-1QFZ@N;t-@tUf@_^p`WCykar!aEjNXxuXhw!)3;hPUYF&}sN|L-;+!ffzKFAr z7GIBz(Ndsvqkk9EjWwgL{vvA!1+#sJ2K%aOREno=e(qFJbJgkQWMi?L57Nz>2zt*c zNn(pjhLQ)dWa~5>fZ{wsjDdKlJ0H52a^5L1Uv)S?Ou6qF4H7$|kp^w80jtWVMPn^2 zPh+`P*~~J|j&Hdu-xg+hEWFQKwK^xhmR@~}!@61rrJ~?ZYQ1GL!CJ3AURojBFEz4h zS1m9`4%;}s8Rzx(B4%SpAFTww@w6Zc-lPP+q>AEG!c^OctW6#J>u^BElMmPjB$+GQ z={|Say3a=7+yYT|Ul2~Zy|;5J|2-3B!ZQxnBfIa-w1qR4D=S4!|DJ9WZs>SS59&$l6qO=4nd zMHZDIi(Tz`H)K(I%0C)cP8+3`#2=`^d)tH^?2)ho(NG!xI%3D0U_@;6Rk@)W36}w9 z)lVCrB^eavZORI{%yz&de|5%5ZbpkTxx39krL1$XSW8%nAur(#Qj(r9Bl#dq zN&f)1zx$j}5YmE?vOB>}=<~JmyR>1y!j(7kX)5qwfBuBMgX{Gvs$`2O6!s~PcaOU= zg+>~Mo7p8w+k!<3~zOU1#FR)%_-kozExfiS!_YR9IUk0$ zMb+6hXYlj}#&khxSHd^09#@$H%2Jyz~ETW(zOB?UUR&EMQ+a%5!d%;TE9~UD% zr>-`sLaLt~g_$_BD;C#y&1eg3R9M`$5NcA;W^IF) z$;3y#Ns|bPc(e33qazRQF*ECo;b<0kjc)3csYwZF(D+JWLi5x zw|0L^ILWj&9&{mdw{?Ox9x{5-cd+Qo^h7iVJjNqSEg?AF`Y5%m_T3fVbhX{JZB~2# z+%~KIy@lUowe#y+R(m+BZ9}|<_Z*4Uw9T#}z|A1w+xQWvU|!W&Ka0+LZA(c=)yW;$K*#Zk-cf`rIO=%Hj)ubsI3JTHwiaZ)^>H z<2|}74#^pNGEbhU@N{NiKGxq8tVS1QykI3WgJZB}|9m;iL`m*;j?=Q1W%s%=G001x zWvc)pxkEOi)T3iFt_q%M&1e)AgP{6coGXl6=vV8NoVjo?(b3`|#2JN~oDZjH4;qC8 z_0{%fA-*J7JhHKj(k#}4>xit0WWQQ-&^fp!JUzp+XI`J#&Z&_HZN)*T7IKRqMj>>XYt{i5xLx!zSCG{E!_OvmbQ+;6Bf}s)-oEP@JWdg%P3vwuiQL^G9=5q7e zs-%+rf0sZQlQG!x=V6kIWGsw~ae8WkS6j(aHo^OT#}K&pWy-n+La3UA<2~k+HSK-% z>r+G^3iPHR1~*AXD?x965;>v}Ltg=sQdQ!;H}AItaM)LPDJ>-NE+vjiCT9Wo;Y0wC z%<_Ru%lB5TYR0q)f{%=&OziFrOkG#rE+g5*N>7h@kj4*Ms20ax{)ZYQ*@fr{ty?Z^;P}p zZK6B(S~@~fH@PizuWLO1T-%)Wdn;q@2-jY=__omfH0ZJd2wFO8a)xBpQL8>Z9bgQU zXuZ{c5fnqGjO>5^0{PPKGUKbbO&Au+7(y?vq+a;F<08Wzz~iTnL+Emw1mX_Wl)xjO22hvA@=PNFGqre!msEdWlZPy~XaS z0D=l^>z{UoI0KB2H z>R;1aF@qXUtkn#$SBDzlhcx$Z4x-^LYMM^Xh;bE7$3P>j+XBm%LJiMzIGR(ga5!?4 z+zZd+x4S~ppmAX+L`gI;B#Dr!3?ItZG!(jU+vIKbt9uv3nT^&w^-!TeH_9=mkA}SG zY!Yova#=H-7Uhf@JnzoAZ*b<|{zT7`yr$->l-Z6c>dqUabV~}ne538ymWfPRC>~?s z=}nZn7(l>tQe>(tJSIwJgHR1$nmxON_2`6UzDdNxN2Gbka{u4W4Qr4Hwic&Ar{^p1Z;{*$FVZa+ zl}O7)cktI;;a~@97p>yE{AaFG-Q{t9bf^}iA7qu#6Fx3ahZhO|(Sy3Ce7%LQmTn=t zwt&|L2HEz}mhrI0_IP9rb}y!RbZ$<`8w|#->hb4RiY(7p^KwewOx#=C`kwWQjKuTz zdHqY?O0?LYXkl(M=D}YTL!FyLTb$F>yM;&4#to4D)~isf`5>9U)t>|sjJ&t)vN+~( zTo%8=WwAe7S-vep23_Rz^usY+@^fYZYBl?lJvDRthQ7#~mkDYYyi^Zi)0-P{Mx;;w z?ATOwAFt$nvuX?F@Nm=?vSxOUl`Y2JoJCHHVkt}##RXun&d%)9o_9ZHT5(*o<=vs+ z#^7xv2c;fC2jPKW91{s;4SU5pF1ax9m%iU+)$Wb*0{~05uIg|=$jR+~F)gG9phKS5 zfxVU6k@5Sf-pc0MmDQr(3Y-&)4i1td@LPDPN|x1jOtEGM?$7J=W${i<4;E9hOsX$Y z0iZ+f0&QF}#jA#O(Z5e;9wuuPex8uaW>UB062@GAaVYu?9=Q<7P@+G*+2h#(ZMS_S zVdjh5ZQ~fI>90#LuwWonKg&>wULk+nm6{9lWr$=Z>R_t0NcPcT?#dPXnxcO8#zxKn za6qV>aAA@>@|D+kHI_dol>BZW=-b!sq9E1vaAe;WcSfxmQ%ryeZ=J za(KstzC!BSWUw!Wa`L?y#uZsC* zmDWi?FD%@<2m7`TCKZD&PfaFs!G)T+z5awI+;O;3mOi*OQn`__3hNk=)LG%mwfqcM zuH$b+*I)}*u9pTiVO^k1suxE_=!OOSrKbIl)#NDr#^y-yvMejhs;uyhCTS$Iz`%YV-^{g8Xb z7Bf4O_^YJ?lNn7UB9k*&y(qy-rq8Ve;xRMOW^UQN$&O&ZCF7H<>8{J`0{L9a3+;*>{uP_WRrrw) zM~qJn9+)+ABfIY~&%rqC;>Rm;rT$((2^N}sV3I6MYR~!5Y3xuhf0-`qDy4lmN~172 zFbyJF`&Hk2QBV1FmJ6=QEgo$|-}~dl^>|-?HBWaFe2GRpBdWZ>Qjrk?lNs@niOEaG zCtqF{JS#Ro8^4^n*=kYE?_>GfE2?L?y}RsMJ~GkFNyq*+>&&C^ETqiKonIX~4j&5Q z=~#-z;r2D0haeqdW}?pF3V->*v@L7{=VJwz!Zvx}u_OmLg{!|m$J(Kj z9lFcEU^h|&nIt`g=9PcR-?ZRqEG|{rRn??Vq#B`1geTehS(jAD-Kyf`)0}q&Mp#Oe z#R->c-tSR*>s0Te1uCd%NLTcncUt?y<{cWa0-*!{JIn z$QD@1E;%J}J8Mh)w!lx*G)kC2ce?I{x|e&*d{$yZ+0YO18a!}06#gD zP8qH#)TeNX%-Nwng?>Wv!K=MPvmBD!petjqsIM|Gak?-$SpFf_Xzay};pq+5!lgZM zG%OfGLSaYX2Z{1zGt_gQ_T|Z%q&!(PUY@Ma>|07EOr{pM;!kY4?4jrQ+)UCsN7eVQ ztdmn&*C%UI)8!Xob;ko~h9Dp?b4u9NSTLeC+C?JqrWJyrw$@|p@imC)=Y78_f*7O+ zv9iN3NCuiZNrZz@&h{wqhf&RZcF$M3(yF_17EmwzHzt{}PS04^929OSQ^q3g`qi1= zuE#p>6jP*66^31eq!94e>astw!i(2uK~bMk;WlIBPX$q>4rfFf?gkh^h(l3-xJRU|=)r1n2>VL+ya!4~GR9lno45 z-y^_)|3+J20D`neQv<_4<^v2mckOfy35Pm?gx*71AmLDaM|NfayHhdoZ!$QU4U=&^_AZ zmtmzvoQ>h}&Y9+Un?f_5P=m|rjqpn{8q9W{J?;we;DqIk+&FHTHFlph_pQjNGLluM z9EVZ*mPPq8JKJ5hH7O%fnA27=4sG+p*t|iObvA>;p^xVe4bgRfkBG56s5^{U4 zXYZVWk@5mGfSx_`&#=nN_!eHSFU0hZ`pnQ5u|QA!BzLI!Pi~FX7K%56yq}Sw(q^~9 z6PrVuC5(-kd#0nQax*b|!+J6#`PbY2jQ=jOE-tq2fpv3NJVtlZkP2JP=Os`Gz;K$G(Zp{)qhJ4u8I3hFn&h&lGl_8gJVsXe z1LkqlteKKu@Lk3){|?%p@!#cp=}%L%k=_2440gnJf=aXZoG!D0N0EYdu9T_AOe zPFia%a_W|jRxQgv5i56O(NY%Jv&CI`EBDwbN|H@+MMh_%Eq2-3;v3pZa2mdIVF-&b zXj@k!F5TGF$DtXRR0xNyc0*t9=hj0rME4{m<&^XBtudXz$kxNPTCY&UAeJkq>^@FE z;;&sZYh_;@x1x zW!vflBuT+ET*6QRY!R`iv7-v$9cxCO913Szxi5r1z;!HY872iu-Hpsn9qFjlk&b3^ z=7#=RLbsZi)tx!ec#odQtmq8fAj!-xgZQA2Tw|L> zwKDk51zj2oah%er?J4U+AqbxDbb#pgv+VkGNps1>8zeXfF2M5TM5gZ};d4|(lBB6I ze~#pEASJGE-xBZpi_2dZ$|4*MXWc%&JE$1AAHJt~<5v7mXn9)OmIwH$20S?s&Z7ws zD~#tT!2JX{joch$RZT@w@0353G{?3_rp6xxrz|mHdZS2VT2b2s2IU~~ipu)xr$h~q z%>$dWCEj_8Ev_*W(QDJ@MO*Ee28EZ;bqV%K-a;968 zhEbVrl}uf|6GNx&t)|`{;ZsYzb&I|0mw30&b}ja9u)JHRN!g3wMm$61Y4yy9qIO@a zF8TS^m?-4`_)$GNnAu_r1zBI0)VUwsc>!Q2=0HdN1tr^OJ%Upa>ny&Wc)CR~FHoT1 zkVAdv{>NjH;2|wcTi!L6Z*>VV{b)lntgD9!i>a>YbYx~+ItTn}N^_Bl8b7*C^62bj z3inb!mobL!%g(a4%}FLp;k+yc>{ojZnUODebZhMBmSnQ)liKlvuR~vE%^3tBjInAE z$WSiM$+E8IBs-TQU(VG5^RJmYMV;1Lw2(xbwV%b&ElGiqXi7pK9G9NHZTVhr>8W4a zp5~>-P95lcB#HiNvvhyNSqtd+)?nNTdsmSPw&FF`&AM3Yh}=L_@1upzRNk;l?H`4$ zD_TEPUl_!N=f;TT6EDWS(6y2U%c&By>|rEe_NJN+%-(=zaGCz_41p)v zF?A!mLh3Yp{}yCtv0bj%U0IabTC2|f;Av2Cy`Umc>01{IZd$xp@YW(L%XJ%s)UUMm zt#Jje*86x&R)0vFeavpV`tAqrgG*uUC%U`bODFY%WG}z6duz3q9eNvTdiy%l-pMuM zQRZ9Y@vSm$38;aLjrA}s1f8?AJ+!D~{s=Ikf6xC+yb-Q4z}F`gZ7Glzhw46k-E<$sv*!I@nn6=8rfTr&(i2$eLag ziAaaQ!s}Du#y9^6=(kHKV&D@lduy$u;75-n)l&R|7a1L))zhzP-xTXTr7VX=w0hF7 zR{V3T&iXCBh0v$3HsSRFLLkGgFB#VFmq~t=zo3etmI-eYwd*0$g=D$MfWM`0{Os?293oJa`PKC@9Ia=KtZ>oD(tFPl;J1=YRfmjeoM0$OXMVPcLBd&0H(w$V zX|H~>d@CfmOzo}{0(VIL=0~6|v6;V=PvcLyo?EToQ54&tw?9dG&a(TNCH+(mlp!Fg zAGqnW*pdR+30u-Iz{!%DiD0ie+SgI6%b3CleQ@h1c<1I?8z%60q;d#{r+F-r8L{;T zJz|p-`+6s7+xufn_3R5|`KO`XSVG-f#&DhXNOqBL{U9z>GJ(E>1;bD%p3y#B%4j|N z3MTrRk?4}b$;hh|uo~l3H+{R6cR@nTPAsYBFAC5EBhSLKWLRIQ3y(>JE1nwO##)D@ zTZ>K3h@o!AyWvf1er{x<%d;ymz_w?0G!E~=I6OZWZ9=3l8Xlh;KHam=U9p)x8ayip zt8?i73w0^Tuj|64)e+|oGS1-8z?oEkfi>A>ji*#~al~2U zhj>&g*DDx#+&nCvg~UG+Up6@#Tn3HzSu^%&Jf;spWkobB+x~<&j%a^qO2@$)>>rs9 zi|0Euaw5EF$@kD{nwWug1P;XZ=+?rp6C)Hjmn9wPme$dclb!H`|CMN+bC$HGq37@T zlH8KGzD%yi&uovR8T$id1m~WSDZ*GD8adWU`zeX`Bl@>$FJ^ULBR*VtC2M)AWax^= z2~OdU?Y5?E^SZ@6=Y%kg+jV<;7v1_ALfc$=W}YMNiqARfjDL7)C>oW6rO~WWr4)9h zC2)7>@N0ZWfHNZhW*5d>t47rJe2oK;hM!yxJL*JOr6}?6(8gcE5!(YJGknB&C;6!7 zI>q1sO^N*jsSiDi?+}=i1+-0}y&oasvdIa-^0yChu*h;#K~eqiw;#sZ))e7=2$z`r ziq*wuBC5?B7a6q(wae*oc+6B!!%g$@Q;Y@a6VbY(dlv^LL|nSAJVayn7nu&8gwk--q z1+FT|0wqjF{$)#l(E=~wAk3|-je26kn^52^neA?Wk^0pG84g?U!1*QgA0o@?;+ToF1ISq^V*5Pgk zMow{1y!yzWVipD2B!bEPNVDu_alaZ^89hSf7GIP4>;-Kq|Lwz4wiqQp zqms+-nafQ$M{~L2G#;`8E*r5V%@e_7)7Q?O{ zYT%(8c&OOgMS0@bvqW{WY%Wjj{L_~Z(crv%OAsekcSRQ7E?DI&U3`L@L|mdBXM99m z^!0Ai9Pw1Dvk4ncEhtyb;Y_iXRZNB$zrsJq;l}}j?$^mHzfJ!-b7^8H?K z(%a?wYNiHGn;a8~*yU>QG-k^x{S-NGc(-)sFrB?bAhXPA6qn<3c|Sgvx3nO?s0V~! zoHN2f(Kcn5_!4_@*R$~rO|4Ox$g{o71Xt5SyA_gTb+%)gl;*4YQ?7oIuxZ7R|NUW> zw^6-&Z39-GKssivO={J+21k8A^_srsu6&Qh(${Yp-GB$AWYON_UQX4k)#jnT+7nQU zqsYS#{WlMvO%qjVKmP#Fw`p?i>;|}ZX}(&O9X^NzobI2U67fp1lT9k~KDjI3-%@j) zmt!MvZ>V8}_%b%(_Gi8BR}*=Nxl}wO{_0sOgCv%r(zONPmI!l*`mTBDvEXWz+e4&A z>|mQzbfTVMA9=&I;~N~W2r)Sv;*Z?@i@xiwtb@2ni@)6STuis9zePGWz3p-)dV9w7 z)=SzRFJ!_*z;05@?Oqnzy)37fQ0e;x?nSq9B^G>3S*DA8+rJKB^%d>_H1F$oyrpK_ z@38BT(?H|@a~k57KWO8>?mw!wn#-m3Wih4|8%$HTF9FTOm%5&L%E2{(*sHdf5XjW} zi3H@z7G+s=Me5Jb8xYA6=;0FFNOIsiCF190NaP+3ZYD!Ax3Wvb0leg{CXR!<*4U63 znd!3f)xv8GSWT0K+AvlxRKB`HUv*bL!r1g33&0ZQ)Y}&krC43dsj5L?%gtO5Zd&6E z_~AX+SOQhTE;YpT+D|$y^ENp2!H}4T>_jj74N=A{t$HnZF4ne{`sivsG)fq5A~>yq zW2Q|Hb^5lu@F2N9?^jB?^)eH908++KpD%}e9d_sI6iYetY zUBwHAf*f*RkaLr|*xZZzu5hnpyPS*J%TU<)`J*0rxZY7R99q=s+CsVZa@%%4lxzRn z_S%hHyKPy;$4@%${Nzc;W1QBn*PBoIUc~hlZp-F3TxIu+bhs-9%7%|dI5sH+ime4X zT`?14wI-zz-s$)L@zt1heU|kVKRce1y4?qjR*LaJ?m9QC#Cl2Q2@YG_GTM1Bk{Uzq zmo31B?_0P)cHkrAHCBoQ6{^9@;`W5DTatJJkEV-#*cx&Uk72{Q>@!_Wtl6k-mIXQI z#qMW)@WZi^V4BjwpHDN9Amqa6QSy=C-v+f(=86A(L+daXldf^E}^)wa{I?Z1)#o;8AX>yTdXeGIg>nCJoW3v#}m)-IC44lE!Q0VWe1Nkh@` z!Lva*59MvLwC{zt0qohY9?!s{jZSK4$a~0XdK@cZ1~c9dK4k?ltYN_0uS)s}-U0u5 zoU>orPO@S!*7(HrYE>NG5l--oWAHXah}O2Ec-vAgNLi^ZQ1>< z6lixlpIEsgE@UFZIM?gIaKSetc-TO$<(ErEe3yy|T_x^2iTBId(arlSUg-S&B0SlV zklh*1PR6#E85pX~dfP|F&3c*nM`z(YU89_6%w}$Z&A4cW8;$M*Yqds~;9z}omcDBi zMC2RNRAB}?vt(``2+T@{$gNMttpsv&YetJm)Jh&Z6?yEgqgo!jg%9MhP<4)oWZ&c0 zjr@~O`LDG+Ci0&b^LM<&SeMx(;w#X3VhZG9gI}%2b2{U39n<59n(<#0YvM3aPAiiUGWub9r>DX?|6rT2k%(< zEOLCtZR0#d4PX~mYX@#|1;I_NH3V8-#NWmG0tNSYRFt@sqcapCgj0Lh1y!+^3YakH zOToACb>Yd`r15p;SJ!7noPU<3Ag997M&UfgEk;MF=)@-LyU+e8lx9sXX3eWT7)KPJm2*yIg#%MFsKdk2H&%UGhEpF}@UI8ORD8eAcu*4G8p_b`*n15UUD!!e>=|YD|EBSXxFiQXI7tEV@(*8xF}E1p7<2& zNU=3DyKTTjWNfT*OW@3sv5B=T^TqXmG-m90^yF99e2|jAJwFy1*0-iUg%sA~3B?VZ zGCrIfzQ##h4iOpuGQ6RIDm^}qtR`{E*I|Cc{pvRqEm?BC3%=-FidK3GN6qQ0PmxIl zQzDawsq0fYMJQ(J#$l^)1mUVnaF4dPi2lTqC2BL`cZm%oW>Ed$X01LywIyJ1ZjSn| ziLKQX;`FLQqq9uniG+L@R9R#sVn*TIY6z6 zk9r-^VXwI@3k|;Q*+!`miFw-Q4!J;{$gr}S4@Lg1Pc`j4({k}Q{FUsM_Ai}K$Zkn6 zA<{$&q0Lthw35~onDW+AH05N#`54JKVpj!wmEG6lOv-sPYJvnv=`cQbPEPw*#TCj> z25Wv!N)Y)|zcCp6hHp!iw*`tWsU{5KI#FskL8a%D7W-oL6IjylJ&ft-Xea5De#EyT zbptFh^hH*CCKp~vI(!2k71j5=EUkinC{n}YEdtLFz_4bCk4OVTyBo)_ZMeI!s;r}D zdV_o6^JtVSw!160vcj_J!3J6Hl}y~M_pqaw^g#gPq>wD;lGZe;IAntu$Mk)0iWR(3GrBr4P++<;Q z2}}=NLV{n3n#p=OiI|w;2lJK>lE0$lRK7L&TG-NawY=I1-NNt|2hd@84 zFbv!pY_zpJcv_^#V}LFWVBi-E@=z=l={OCDKXp{DN_1l$7jwC2O(u|}XU*ZBm(+<9 zbI*ZsKT1i06*xt`*fR@{j2L{bqqyJUJS(;b?f`vD zWH?=%ld*ZDtm3Tv>e$>-p@a8Nv0e{-IgELPadXK=-87o6t#rQ{DW5)!n$<&{sM8pB zUn^am%T=OXTc$nH37JKAY2tzg2Tz%z+)o(3Cn{bJWD%o&^a^iGnw^?xmOe$PD&34m z)p&rfs2SnIk#R|ly`EBZx(tAl4JbL~+&Idw6_iilP>MCdCDfk2QDG%pJ*TK&4MOq3 zk%0!U0k1i0$KEeO2b*PildV2eRY-1QL_x(9Emp5p41oLuS{ztoIMD7^ztfjZNUsK& zfqL2dPXPp6YTZs7G6VvWS}g@f=jee)3vyk7E6Gw7@Q1E+1ct@#9;beoK?P-rX5gi< z{9-lpyaxFVW9ZF_4J}ra_>E)qFB7mNVA|WS-u}==*+4wapl-$6lSQlHvfvV5NEn%80@eWEfwT1y4Wp{B?;?*Qp7x~eB z25n_KR1dzf5tXTO!`ED_0-N!oLY``zrf%meRIWm&&f2MN{KD-RmEsP)$I<{Y6YZbc z5ysmr=O%{nXCB1oUf&-xkKVol{icGVNM4oi!9~&r7cSxE6foEz`SYJyxi_Yxp-Q< zH?m$MdMA(>@nNQ{Q**BoZ$vrl#dfJ~DHawekZSCT#>QyRk9e>m{>Af?Z*A*z0{r{% zI%{U|4tJKfaW-aahx*^1nal+r@Sn*B&KuXItWuM_}InZeB_a0y-=ZrN~z8vnB3 z#l8^uND?m=V5GcO!h!vO*`{6O`LauB5&@JJ=nwPXgVIyP=!|zovKLv$Ic$j;pWt+R zzo_ri`Yz!ukztGQtM@gk>u!f-_2O?8XGCq9#QQ~FC>EZ_*dONB96m+7PyU;5KGy%Yfi|W~2bb7>S?+$yjRh9ghIPhpvLE!w5WW&e?B_^WhWF^-P8hiPFhUE|J^jm8>(@+Id}!=jYLI(R9j;i$`Pzq<7w;&D3& zb!A#S1_d=PBhuq)QY(~>qdXl2@@yQyB(9adO}C7`{@0z`-t;;W0Mt_rWJ%yaN=AA+ z(W;u|mWBRBnglc|S+1MlNa6jN;!vRFty?}8`f?t`25Bx^4|?4p8FZF~4@nlxPS~Y| zQ^qaH@?HAMWQEjvTT&rrJzfra3K=7AxkS(QYMS5VUb_`@AJ=Mh7c@~1gpxg zwsK+QP`hB^^hRrP4j4Zs=V>|8+?5mL*)cgahtH}}XK9(hT{%o&%g7&}vBvGLJfB}N z9HI3K@HN1TGv-h~q*pE#+b@|VKT8`&4h@_mi-CNmH)nnpF1%_g1>FVD#2r**3(%D~ zOxWJhMzc;xX5a_Qs7A(Ux1IlHjBntvU;UBqpfuJad6Qp#xlX30?5UA7_AnQC<>~SD zFXk@!e ziTGS9_ORaYK~4<={g@!w<_6nt`<`H%yYfNyJnkb0UUBBA^wAyZIc#N}`h8Jn^jy7H z&_(;HhGXcA{-fV`*KkD;e-k(Au2^f}fmyo9S8RyqO1Wl^gKgrO*A=8oRXu?Hmp0Z4 z!)x7@&AG~+Ac_-z6WSi@4pimj$W*ib+Zch*mgm{cy7B|nd?o0azwXLj{C)Z=BzkwH zs5)6;n+Z{m{8TUW0Q>z1xC_<52LTMhoI?I=-Y+f*cbbMrXPXyol!ol~wi=ZxPQ+Mz zad(C-`Xx8YKfH=5W1}wLCGRg%)egOD6$|C%+9DEF?*mNCQ|wUYO*^>&tf5^U0boUy z=Ydm1a_fPAO#K<8c)~MQm|T7DN4REj?^2MHN9YotNYyKSmvkVs$L@0RVLY+OYa(Nc5l)t?#kcD zl(l}lE1RaCwYF)Vc8w1CpMT=@DNWI&zz24msIl3X=5O2k5;#4c>v0xB?=pu7skYWM zK26bai+$oG{n?If2E4CoE$l*nfS<$>eP(<2E3M9GeX1XKxj9QnWL1EEDDCK;fymt= zd)v%2AKzd+#=kD~Wm4-QF`lw}Tu=j7V5s3UPCTj+Q{Rk1Yhpcg2`X9*xV89`kGa!hGk& zE(RL4PrTZD*(c-^Y29S zmdz>RrizUNH}@;?!}qxmf05J3X%mbF%hAM={5c~$qLo8+!keUnz9iHDE9Rn#F?OUJ zqSA;oEY@MHPS3(s!yFEL$?qE+S97ZOTB$jwsXveUSdNkKbo2vSG0X zI3zvI+AW|VjPNegU2Nzy)$`9E#^ksLNgq7tlh`!-`y1P(P&FQg`vNz#WWDXyUTsMF zqi5Kfqrll<0va%JUsUJ*m?U&QeBXtel$4!XmBmJcb0k7Ar+vQ9xN5nTx-M}JwAxZ4 zfC#iEC_LNFUnW`mf%9-L&$i%a_yF`yI6o%`&L}^Kyj2|;ofF!T9PS++O&Wx(P<38- zbatGihrZ_|8!gMdjnZ6VT#v<^wWD)bK?h##j=XSEyrnq<48FFq7$sx*EYevD_5?EQ z7;&uzCogXK0no5IwA~pdi>u2T;|v#~Cddj;a)k@C!bMJ8H9GY-KXOw2dx^_W^skcy zW|;nKwQbkIJ379=j9>LwehT_B7u)bTb1#{243Ff+)8g*oTARTbVbG*YdP(d++w)H* zA5YPcF~wvGwEBTCedy($lBlo2jO{Bv>|Z>g=HEey_do?oHZ(A``ir2A^*{q*(P&aw z`ka!NK){m4zb7Y;<5=9s2Ji~cA6Ki}=_gKhrpRk@obT4@;WT;sMUO_TeT}nbqATjn zVf{jqx+ZN$%oyOehz7uyMf~Gf@y*?T$$RRemYWHDPOP`>zwrNPy$`1T|FhmFIn$2o zeUY=ndjF+IhxPtJV!dB(xtUmR(LZ;opHEn9QF;r;*=S)N=C7t-Cw{(~QmU8D@1%>9 zd_H#E!QaBkw^m@}^i*ot_;~LY?Gs7AXL2dL_ohqhs@uA`|n9gY&E;?E~~fHMIsC zm{_lGEfNy)jfeB?4kSy$9orAbWrl;fyOz8|I{#^Tg9QGyxS-1T#NZOTcc3F&x|XOC zXp(R`?n*D;bYyC42UYw${bmq~#wyTnXteD}6z@({J~JhH4tUEWH(tE-U>#8R4v}EZ^GM zNz<%99KxNk_5u0J=@?U=p;!v*ixShj_ORAxwmt>0+N)<@`J=q>I}u-%n)28)vCxR5 zdFROFDoV(ufGJ=g@$q*{G^LI>CB`y_-~q?!*ze zC+-h7+}bUpTO{LR7^Jlb>+fnR;}iAFdV2AzTT)07=-Vi~ws*P5w`op4a19wv20Rmi)M(2=#KBP+Ou>?3Q`!#{r}<{27%(DJU=3qDO&eB)s6dJ@~P z;<#!T{9^|hIvQ0Sp8dQ?WDLt)G|dV-`r>P!yp_F{*;FG=wf5@Op1!i3co0?;vMv6@ z!}*&S0OrzK+32x(V&!lHH%uX-t1kIf^Kp9B-#MYkjcMo2{OHe(4#N@0f@Km7rR(^} zf|Aqo7PhZe*VvH@?%tIpdOzpv1{O1{v1G?s#Uh|iTdDpUIEBiTS+ZkPvaY<2hU6cJ z^3JgXS#7wGK2}<2qXr7`>=Mk-o?ScD8;^=2k0W|3lQGFMGFDK-EzXF$vvhZ)LX?n+ zSa2o11Z*4Os)|>#h2DO_r+UT0@dGrJ-!-3-~TV-Z)Sn41okt@&|!@oO7aeC?69zRwZYz%tfb{8 zpZZmT!b>}%@Um`ExT-T0o)}1=@WTHTg+FbF!WRqJwMXHP{}@N%rRu@|X@$beTTpn> zor1#4)q~SC3Lgdt+M)2$78Jf(cj5@la}Owx+L^8KcXe0zyE=yQ(#GGl9q{+EzuNe_ zR`7SJ!Qa(w@%N2KPK3W@2MqqYFxPa%-!awfbvO9COyloeETR9fR_J@}0SNxabs6Ue z)2+FA;Tdb8D8grJe6dNL!847^=6E2V>Q}t8BX;-P5r^lK#_sGN?G{MY?+AM<@LGaZH1ScZM(H6gNs)j*f>a9=8gT&3l6q|#am=afQipe564@&sj%aqOdt?7A* z@pLwl@oh%pINr%fo?K-{!mC@}>uvSkT>W0&x5S$xQa8l|G8Y%hsh0^~uZ_kT>gBAD zVtSO>_9$tu`6WEABd;uD7_(jB{t>hlIHec5LaL1Qs3oQuR%1NM2l)^e4L&l=htB+> zwr^|1t_+g4(MOW3Vgx=Qix&x$GLW+(p#Vp(SUKM!LN*d=gy--_COOp#j%Z<@<7Izr zXwmCujD4=+aDL=o=WN$WjK-r!Q@(96FY9bfWd59h^SwKqhN317oN|UoXvf3k@Wqm5 zgSn4)h9{8&MPP$K0W>%iI3c_am}f&BvW3iS6i}>v$$zg zc1sPrEpelChKE{iRJh6Ek-WoVWm#WVnKfl)Szk$5f)Bi?p2DnhQ5H4}QJ58H&9ZjQ zJbe4m=VGnlp}b)!^K9YwS>I_zuwcMEUPg7r!Y5T)s6n;$OGJ`(Dj{vUNIOq#u%YN! zcV)V4$^EX*+i3$xC_2hrd5HF+fhR%aAmgqShO4K7U70m{oY3%cqZ?UVtH03NVU-)* z$WpvM+G$4Kw0vb+@3t&FdR(n;Cr?Ctt6;t^Qx#wTHD-+;R-^j5U))#zm5eng7Mu6~ zA_)U!9eb*q-*Jsqqu7dK zUr^eYTCB9iN)Rup2_T7r;UZP6XhEs&7^P)AS!}cJRh1mb^sgaGRV-USi>mT z9mC)5n91KhB@>N3YF;i7DKfcwi&?Du{TT?nM956Vm2*=?+hQ*WtL$VNCe9$`UnFE7uiH zDf6dC*yl_0l7~Lyoq|5;X(3e&FNEM2)mr{g>TP>%6^P)6i@bqGG zG~Ni>rsZU$`3=~lg?R_#bbB#dbRkgfn5&NluRLzJQ#srVGXDNY_08#=h&*31w&^wT zN+xMK9*5NLxX=rz!EJo(&`Xfiyvd_7$;S=Pe=WM}n*7(|6NX#Sv#>DIvmqc0nXjd% zQ$D=@<6iMe^Q^I!d&hiFS~8*BzW@`7q_R(Q!G$9PF1z2x>$+!p_m&Tb-R z$EVsx7f9Bfp4qbC@XvJ6LgGtO@LJ@&!#w_r zuP0hAu(Qfr2hX5?X6_aE6wZB}oEe-5S>^S4%>Y+H&5g4!vG z=K?$f;^l5LpkVGN6wJe>^^LZkJ+rs-fGD#n%T4|>tezIFQ5YW5IgixPotdLm=p{P3 zP3Edoa}X1TmYbR|hT!o-spS<{QXIK-&%4P>jaO;i+V+w{&EuTZvLpVrJvp}48&Irl ziCzSw4d#>Wy+OHeFvXw)ME57_T^l6ic)NUb;z$yLI18sM`X|e8BMT0~Qy zWgd!@fjeucbK@PM1B#>r3Y-*)^*5W&*=cMnqn^y|N^||kTM)VCn_E7HzAedXVU{w#&yo3rSVA_H32}~P7AW@O-{^yD^3)X~t zSVp%`$-rDs(yI%mW@scCaV}DAzRF`|=*p|^4*DXuJ0*ofN=6{p5Ss_XBh!e$XC;Ns z)gzL0;a!5aTS(Q_BV?Bw@GQoNlbkGfbT*rNFYge6pfF`Xxp`}~9Fa4N3nGUiPhSBY zVaX*|#plT2U0)JRyIO3RQeioddTvV2+ae2gk;-L_mT+U%^mlpTtd*tUP{IPC-QxDr*$#h*&T)N@mA{v{^n=Ia}3oXE#j^5>cVqpiE%0QNQ zx7EMlczXEvaXuE&v#`)#{o8C!)G<68d%4J-Hqp8M>Z)%|^c?{I-;f9?w(8&jfAzVf zvCU)F{8sg($9O->o27yLv3{g*W753>ljJ=v5&L9 zrG9ox@!$6#LxqMoY#qNrzLv(vUUsP)yN}|m*H6?TC1Zo;s7?4cX(ZQbBGUU3H8O5k zu+O{a1rBqps4L6SoS2h7_N;@RnW3u2E+9D!_P%Sy%M6<1c|0nM@2l*L?%08G_ew69 z(MH>&npNKC)Jht%e=nHpi^m?;2O@p#u!**w0=9jVnKp$(4 zYJG!!gkoujRLS~*y z<$B1gTrI|{;l9B#^9TkQ+Z?eFxs)erq`>Baw##K)KI~Z3r9uKX`|taLY3W{##nfMI z#1P2-wC#18hBXWR-l`WQ5?;1e2aCoAbK6_5Cz{uju-u%pOZ`Ko75^wtj?KZBSQ+b{ zke@)c-ODIYJSLxJ#1v`{{%3m`htZ{Seen{xzVn|n+6MF3gS^Sr4xN=f2QJ*i1?KGC zWV1cKI7~WcTn2c+9^f+X&S)ud>W4JMV{*Nqar%j&wX!OyKYiY1y7l1}%tX=z&cPwA z1qV6DiHXf7%6wT8Ns9h%#@+G7cao2ru{Iu?Dj7mF+Yf0_^#1;nt9gj;IazK^5jT}B z3ToKVP(0t&=s(((i%`VIg8T(a6giFKA77oCv3$B2MQ-+bJ*f_9I?ya<(%0&nPfmZ$ z&A74ezZr>8C=8vpK^Twf?n)+L$&xGi+o+6;coO;frj zYNX;g1UH$xVo!lCjV8KDT!MNcmY7?(;<}RDd^Q5nr$asb)lZ{pZmUZ>MbDEfl7({Y zzNvelnf-xX#Wtao_7+L#wilAUhyZ`$&Kh>#RjkC(2LI8hB}U?otxoEJ1+kC}@F6qf?C3;i# zSEp9KJGx{#?xpg*d}!RA#}_x_zIbhjFSgg?y3WKG$od28L-kgv`pILM^RK$GTe#>S z(}4Q5W)WW}no3l8G#Tyi9Y=G6!_3iVZJq_SGOi+Pn;o)=>gJBj<7MNp*lE|mVsHla zo-)NsxgnT|nnPT$Yo5UCfA|`8$a7+{@Y#nXK)nt}Hu)j4Z5$A2d(xgqIc=y(>4y064)OW?Y0t_KlU4WboB75S(o{2%-gD3Sx0>S>W}13Osei| z2>n_5on;62EN|6$Y&`2o>y#c9Ozz%up3-?K)7$tyR97a1AbLe=A2jaSe`bY3T{FzQ zUzJ*kZW=Btk@tdrIlN$Mb~5(@a`zUjB26Z3ms%_R%ahAe7f6@xx|U>tV{z*_UG=Lf z|Gg7gZX2iBNCoZU<{2F>AcUBVtWD-0O|L7ss*@!{a;UoC#KX(=vOZOjr(3eqI}%;} zg|xw|lX0gMygy#UI#A4a|LVsQB8+cerlx06rc6(nn43()OqR^9b`-fQ;*~iu+S>E* z)vGk`tkW|W+eET~f8LWSCA*KV44Sttq5Zc@4{k8y?v@^`^g7IrJz-IJBVT)tm=nMNwexDo;&Wob?jxq~R z2pyej)N8uiHBV=Uu6fIUMrUkChqn=7uz0y3oO7~GD zYjOPi`KKae11MCW-3l?+E=!j28}cg5W*!uzx@@<08SUSppl4IixSk@}uTKb_pGuzT?P{|aQPOE% zWz55ir5bYe8(;0OE=6={*4Q_gLUhUyNBOEN%x`~}EPJS1E*oiRFBtAdCaL-Hc`a=w z67(n0J=Z9i8Ttlh_~b)Q50ukjaGj!Hz3GL5p~sx@LDf`?#tW@B+Vr0J#c0Pl%bW>W zQdXs4xqfpE`oAoqMe@CPEE_?VwTnskh&eK&@Mj-6XAxfrz3@ARMQDD1goZo`Bl`xf z!czMxFP$@Xd-PyBQR5C~5VO5#H{M0GTgTCud`9V_qOHeA&Jc&{B8l%_&_I`*i?+dv z&7pr|c~;|;gr3>Xt9|jQyW8}NM|3qizf0R|E+xr8Yr>6E0;g)_M>?(9Uo-L(EyuC~ zzS2v;xF=t3MRQpSb3+%T3Y7P?SD*tW;z{C1?^}YBq;H)$O7tYp$fg=tC$NWqPh%w| zJX?3CXwZINmB0E^(qkNxC1y8Ym1|3wZixD3CnO|7=A*w^-NhQYF?(Z=7rM(+rP=;5 zMCO>Zk-jC0>hp-VKL424=pTH3o#H(D$DB7wPaiXGmL*?HU70HNtYoR(z!E9jwUo`B zFo46ur-$cTL@VAK569&zqfr9=QNjy}X*ZiauJdo**9V~HQu}|%D%EsV*<~*df^GU`H4sK^Ye@4vb zv8{-EU99KI&4B-rGigt}tepX!mnUw^ae5+`Ox?tsQ=j#-aHx-$jETN1Z}Bmho@A(7 zH-&BcaZ|8^$;7R9!*lXhK?;@bMGAs;z*M}0WD42P)I15#B@Ai8z<`r~Z?fy)wxsj# zN>rFo-@J|6*)}!9TFtMY^Usbo%p@$cvohouSKo|l#UA0z%Hm#~+{@wmR$8RsEr0bY z`WaRS=d2_#-ysf=9Zv`CNck!mZztyhUhqk@ciFawv$f%1k)yZ5h2 ziwu;kqwjxhbD!8TWAmtHe63`BG#N)*kBeOE+%eQC&Q6^3nDgNE!(}l9W4g2~SP6!( zi1)@PEi-#3iTh^`vQ~tHxkXukoq7o_Q$HpiWDaBSLSgm ziHWC_ZTn^7U!`BLb1NIl43QIY+s~YmH>X|zZf4pHB3^AK#O?65w+UWt2E*3?Xl(b^ z*UTh99YROsmc5W@{yuqO%412mOMdp(!i;Gv%<64j3iFB%l4N0;MboE+8RQk_ACafv zZ4ryYlm6!_dfh*M0N}idPWQ^Wr8}XeAV|~^iiV5o_qN-zeHNrJ50Ewde*V}TS|-)C zA2xekyVvX5!0R&g_cC;X3>_vEv?Dsg1|&z=M*3e8<>2cnBVaJS-_}qtt(eX|vqi=i zvvGr|e2$@ z(eB0*a$|trpt9|5+$%TIxgqY~=CU_M)POZ3heV5F zck-bKFDes4#{cs~X4yA5ZaZ`O*W$&@e-eW$1Z#I?Q#GXI!H+_pQK!GsU4bVt08C`)taIDzfy^*DusfFsjD9a(mZ-wvZ}Mt1Wu-c)IP z%72(a$&jK)PeJo<{=FQ%dFgi1>j#7uy|;0;sx8|Kq*f+|@Ey2Nl$))6nA0raO!W%0 zU>AKrfRY@R`D3vh{`LduvP>i#u(+GdBc*Kp_+5P6@9jj(8UE+)>P5%mUPQO zIx4z;Cr|CC{(ZJskX-2=f@4sKLlx$V-hzQ^b%5oKvTXF{2?Nl~TVd}WT)tEy3Ju^- znc3PX4C-(IRG8-`o#<;hy39;?Cw1xi6(?F8*YPYFIp$w#fRO&ee4JBZ{xMEEY>z3; zeLEop_EaD?ij#vVCUCr_-QQrl4rPj?XNV6o{LB_#%fzL=7x}-8|Nr;@X!ie~{F6ni z!@o9jti>B%LyGqH*i1ZdqNU4$Kwy#GOax;U_Lkx_mLHF8NCFitHUA!kL7`SI zDVmQlufV?D%s%H{(HF3>xPe7Pb=@QAoV`+vxZX(2oMrC5fM2mjp60aE%fjdIKDfoH zywk0LoQ$ZUInKoyPPe$?|6F&Qyt~GJZkLxTI zAbh)o`<4LfPD~zjUCFo&Y$y26<913Fx4ES|+pg~qEKiGkFA-U3su!zFA{P)3)7b4T zRr&Q3ILRf&L&WMNFt7h(_9P0cNtTT-8rN`_@z^j*Mr#1HkI4xZZ3~~w3|C7g@SH@A zG`Bf+(|fvoy~H4LG?ii=lUPT^4i3>cnbww+!Z)tI>BbvxbX;khA=+98nw_lrFNMTU z5RgHezuqz44(|yIh z7BG2-lDqCpU2@s+_!kK$3vSShup-oPJ80f+%tlkE!*FIcCLJ!C8j>Yy!&iQ5Lic$Ju*9dyzY zQ-_+hC-lR8F~?3;2V%%XzVX8l6kS&&g2_bs&ADqtyjEx9krkKX7OFJx*#lvVK1c*e9^icGp9!^sh3Q&1>e6>7kF3l&ZPF95(@a210qoniM zK+FTV{d~<&p(IMJV4Nq3hluWGs8cmHpMI{I%j2jE=8AVgk`p1?+T$)_#Ao_rsN#V+ zL$+zIo0Kb-lH&!#mK~bQk=Dvwz63ItGAcHilfX2qSnjWGAzPNga zBH%LF3pn5Jh({VtL$4e>18DU4=xj6}?VXDo0vmaS&up6|3Zz@l(G9*Kph_!n(Pq(P zY!pqVMsH8Bw}F7t!DH5!iRtm_6}^2fP*D15v$<7LM>adNw-+4nS2s&v_ZGm}b z620((u5GJa{No3nRmbtDbUVW22!y(c6Q^W2{Sj?`xkH+ZJ!2hujzna88T?6~zRZDX zgDpz=7P-F}QF-!?L21uRB`G1{R8TVtAB3T#V6HkOmeJA(y9xmjpu zj-x+&5`K4s>5hFB(RfOlIRscl0UG4TLvq67sS44x{F(sEBr-j(7H!y(9a#ynCBW{S z6ySGsj`=GPMt!Ce;J0mi+fnXbG|<#ONkMGjARF>QY4UcO8G8myTc2kaKIlsQOpy8ozfVxU~VfXUa{v~-YtG1A*07g`%W)nHKc_fTfa$CA1+*x zMb=;bP;vwJ{4pA7><&X*f=3+u50Q<1%(BKmVkr@)WoK+2SZ~yjP#*exJ^ZnONM2Ix zM2+0Wu*xUM=gdm;!Byg)QOIv!WOh~UdGf`EbO7h=s%JrHc2BkS5$_fwP14)oQc}j% zRr&tdC48S7yOPiQW1={pk~udvnZGv5csY0+e#C39;nR9tOOD1|FT0`SV}6<^5x>QO zp&=%zC^hht_Ws$xWPzhd3bUmCpNVD(KjM55uPx%rf%o9^?!W)ky+V$nMfUhnG*oyO ziWDvGkvUSt>gC=-w(<64DdzT9-(_#mAdz^Ch*qX?%V)rDw7theYkHbA_<7RaVWINw zMF^L>DP#D7f#P9;EsQLK6`)+}YD8lsTw6c_WX{hM8ZRb}dGb~iQib8G|eyTP1voA~hf zt9Ot}j9&L_SwZ8mIkPskFGW zDYOymlG@_sR?z&32fSn}C0U8Jq4bvAKa-^GbH68*d+Rl++-LJxs_YZzwY81DPz+># zR8+mAFT*9stg7C_dpUo*?mE6ynx=Jpy6*M-FxS08Yu4%r@W&Ri&N(%jNwLj@unAmC zWpt?|C}zY;{>Q=Ja9@x&1f8Q3zgWhbyl3ybjEnKuO7eH^yI#M`sA5?5%zyQ)y5>hn zn!h#rbt?kZ*Lx$USOEPX^0r5|u@gD6ZFXYv5Cb-Ut2>s3Z3Vv=BE-{;>j0Y*Pp7{j*9Eg_D@D$gEaWj zODV4NoYX45Kr8U5RG|L-^y)fCYZP~-vEns?T#MI85#w4k*xnzMdZ&Z*kre5V$}ewP zE?CADWRn2}nwC*}dFp_w(dPw(5UrI|K8V0|xQ^7eC0i}WNG%x;UXglG1JNtCK__H^ z0s@(C_uayaTgFrCz-zSjVEW$C7907X)QcRo?js+Rx)LC1QYuFcNzY0l<)=V!)H(Ns zNaSWTa!TW3f#%KXaws+F2I{0sbrz~#=RO&BiRY^1bF<^hc;b|(d2-;-3CVgUuV6rY zuibFVMy@#7j)iolftB-DNcQ4PVG~Ac7xG|wB;d#ZP3H-gDCr7`U$K7*vx)c|BXvn{ zd{J;y{^}=0jbD^Bj-CSDvs`E!t|$8xzexVAi2-rCi>&eCBJPC1hs= zoh)5eX*f(X7;rr!4Rk5j{&X|NMq)Vd_LMY~6?NL%v>;VV<#wvV^PN%a^y9gk{^TDdL*#YSq%?|M{_ zxngT++o;^gmh6-awYb~%M^n3Fm@o~CpwW+hdb?N-qTyat=#0k+7(dm`!1oRuj7W7Ca>;t%7U%_k^*gd$=+Fa1I6Al9bQ3hh<8oEjpX2FM}24{Nv!HI@kuK%=-~=B zSGuy@U1!n?MuJ#**N{f}4Ue4Y5Cdzg)62au!<|$IJd-NMC#{T6S`B+}e9}wqq?Hpv zI&1<-FO|Qc^%Gfg+`!6UbWfhMF3tw9slkU};xo+$K4ErOuMa$pb4TEb^?@hk@6+o8 zbD6w2;(Pp6ZS+-27^deb$f4xLX4S^N-jHxcxR!{?{9*%S#>2El`Xw6(*DzYLyR;-j z`8Pbfz7?Br+F?590qeSk3T(Y#0b%9b3(o+C<_{JN^yb5RJ)i<}vXOE-)N&`B%#(A#p8 z2dlc?aRT!S0@eQNYj}zCfMDpvr)#054sruk39K`vD`e05&aTb&?((b-FUvB)FcVhY+&P8ekp`Y0CbjE9h(fM6{@IE@-wwqN@R@e^Eon_HyuWYxMLIl9i#0t|Cz&v(w0Ueqb%GfyuAsayK6^yLay^$!(6 zQ+zRP;cNat2kLxh!kFlXUz;scU!*iwJa27&#EaD@L@g0ClP-TP(flV#p5<(zOj^m_ z{7zM}S`MB9T$sM)OIhx2p=&8#cU@5rzcMn^C8MrG9S2%n8SPNll@SJlF3YEvNLI#I z#m>C2Ocs(&CbNOHF|a~JM%loeAUIj@qS59bL=SeGaY7eYOS=v`6LW})82$JM(J#9l z9z5(s=36~Q(Agjjw)6B{I7k54(?rep+Ui@1axIN4?3*T1Br|h;szCY40#ylswFsfT z6Ai|jsnS%ve|OcFhtWanK|zW#R=UO(Ws+AEA;6G+ljH2QcS|QT4iI4aiU6a_>5wKy z&mWjBj2jGaw38cH5j6XDK9OjCgv-f|+53yWLn;GC2c>JaobtsBak34rLK?-F(P8ph0i~EP@o>U;QYvSK=2v zD6@JjaEHAtG@V6pt&mf?w`ydLKX!x6_d4*XC6)wMgrYKe8hApcS@V?oE}~=>q^BSp z_Aw=V?u3Enz!E$z1N;23Qzdm}u1v>tXU)rU-ydj@(ul{4AZq;R>~9w@R0uPv_JukA zzl=@z|5EgI{jSWc#*3l{v;47lHCy3FN_Q^KdExrcmZZHbl8y2OrWFwQ_CoWj> zL_f`#-g2XpcB5Qg%H{h0+qioTyNys^aNm5Y6yi9^FD zMrZHC(2t2#nsRn_B@{l9y%SCDxqe?u|0CQi;bwGQp3_=28!d&HJT{qQ#J2{+-q^uy z@ifzELm~doKJtXf_9g^UP&VVI^Mojs`~Fn`lMMF2v>D%ZM=^dLUGXl*E&*s&tE>d1 zc;CA+xNrTF0-c>kaeK&SNSNiz@lyEZlYOXbSh`pS;2$5WaUDqT=cg5fv}%^_b^=vcZg{th$bLj2z!7w=T9r zxzF+QZ%@n9(L0D)eza4rH4{nVcyZy#4NVl?naZwH8P@9XBJS1wK0#+Y8T4!R@8rZP zS62%wivqLY|!0ob+WnQ;2}JBpHrFsN7&K=txzgtn$tesnkbj4`qFm9 zg~_s@iYlSf0k4IrYtA(Vj;hzjnn4y(O%+CCN6CTAu14HP-dH_ zfZcFZzaF9y+Mfs8@G%-j{GbKNz)}-e;6Z$`*yI%;X1K!^0_K3sM zFrD+qLMbWp`lHAFdN7m|$jltGtYIs4#~vaSK6~Q|m652)Vl2f+!j%fU`e}Z8DhsxV z1i3Yyi%K{^hBwx-iumu}?pSonIU(`#XxBJ1`q7%*{Hr!Nt-@>eQ3*bF0E0G}clp-* zipa?J$t#9C=R`l~;mkrAILJcRTnpaflxOi=4z|C0ulyrsTrFsY2VJTWNKv9j<}k!` z+DF|n{0lT^^&#Z;899zF8=%n{DtO_kIuScutr{K~T_ejQCm*xv(&Ni6Dr74rgJ$h1I^AXOdUpY6$m543jX;D(7l40H zroB^coiZOiyN+p;_y8PC9gt_t!*cKJU&}qo0X2IbF5_PQy=!DCl`@!Le4a|(gVf&p zvY(O!s&qZ`X+bP#+KOdzRqONBR8_#sOR6qmy^cx4u*x+*%^*NCFE?)DMsp^mu>#>Y za|z~#-bl@p*5o{)!uJr>PZ>jULvN-MOwCBnGYjhymck=-G!p1rsRvtA4>p<09ARZ^ zGQM)&umOXOlsWn+KPC~W7#k|T<2odnfupOpqVqbK;g7A9QO=1)n;Z%tQn@jyFTeo# z_;s1ggA;!HF0qH* zLV5fF(mSs9|6*xf)4N8^c;B}doitQN0lo0j39G@rpFJhAMN($e4a4NRx00C^(%H2I_SQh@UQY&s!jiWq6L+= zp-{g-@}jJQ$}sm3#KBQav%o#YPs$xN7O=T3lSv=gj~&Yd_HvlRYeeFD z*rzc-Qef~*xcJ+#jT?!s>(!z?j_zuWyJ1pTUI6cnWrY%%27Mb&gNF#5bzuhDh*4ue zoJsA?{_krAdA{?@RCm^p5%>XX<0g1Eun1faK~gNsZ^HHJR1puQm91#BAAOwA~8L;!t8mNg|Sxp z)?TbMw|}{jd8{^zCJd}C$81e>?A)J72WSrFFOSJM*XGYB)JF5|6e5|MUOkbkEjKx} z+TB+Vbk;gEbJ0&~Q>8msn z0jJ>4NLE>4#Fxf-FZoU#&KLbR;n&^?pJwy6D}^ZZkFH`d5T=i1zW{s7>QMBqtPV2J z*%Z>5o8Am)B?hJI%8W6yQF3^5q1*q+Rh=T={jKZ-`m!CrlC471j{1!x$d<=GoFbdT zE%No|Vi}gQW`W(}Q!Kv2tvMKO^$y55MQB}NHr&+CNUQo?wiuv`nj)=#<*%P_89WC%?#?YMc!+paLXeUKGiibUI5uY%|+0ZU{ z-RR+it|=TydMb0{6niiOOz0KgIJI;*BTf(QTt6Bo}j z*@2s?lP;bsKUvGt_zB^yD4AYF}S^{itAKyeA>0SPr||LEb@crd^+Im3PL zX>cW*%$ooCFzNo4jnQ$Fx$Pdk{`>aV5v7{U!WvYMo6JM)Z%FeG@7#iItg*+#SkUAx z{^1|u+iN~ps6oXLDPr?D>X5YwTI4snXOwN>McC0h>y0 zXazmm4!ohVe3RM!5Q!AH@gob|$d@A#6mnx2OQna(D@^y-6}^$$8NHzy2y$b)1^gdY z{}tUcNQ@~5ZGMkRqys1it{X84o#!#^Pa_|dzzY8A9(?Dw zcxPj`G@sfC`!aih11w^|UMIXaBYK}aizTPwK1nYBS}sfI_m-e@pM*?so_JU@q5=1} zbi<-gK#~nMvk%gMh6{to7n?~WtID7bT zgPWsY9tCIZ26L$^ls{PSrlk2FMt2@*g%P;IxZ7BKBIrYVt6+mkQ?}4%+t!uJOSs*>Um3*qK(Ipu$`EM-ho;EeZ z7dlr8u3Rhwh^J{@Kk%_{{?8~v9{-E(xBrjgyVbUO_Pbf_m95#%LjrS<02Uq)X9Z*e z@xU@z5D4kz26pItkssR>le1lykREW_Lya7tG`}IRNXAt|V2S*prH_wmj>Hkv9mY(# zHfdI1BXpq}BV^;D&Lwq+NqL!f7PhxPl43BbOkHS!iud14Er?xZkij$b5#E ze$r|Qb(@BPw2wdbkx2W2Duy1`Y{o5k+3GjsT4{AblZ6Y36>AZ;C$K7LRW)wnpYNtr zrE_8FhU#ET^!-*;S*?Po80vg>U=1@2p5v~CD4k0QgbuvBygQsb<($yM1ook7u@4bL zMQ(#`L6M~)NTAfFDH&_#*`shu2`rSBdWW)E4VT0ioRVYi+lP;hpc(Q6l;sRy!KIbs zlb2vWtg>FctIfovRyXpb3@c`Z=1(^yrss(-)b!6kN!&j+qZ%K4+3+8JCT%^+z?Ss; zOP^kEWBGCGr%vhWax?g{Pw|wr`&B{YVSlw`*`YxDzmNj06dU2B<$&r&IRoH=phH&{ zlw?lptDzAIk%NG-<7WVUN-`v0z(Vo7Xh}wfshsp_qPS&ghb;d`vs_M=ZpMmYCz}{M ztf3;Iq@ zX}3S8iw@U)j2rrgk*6m7C88GWutP!mBp@r>x1FgcWl}NI4ol}ms7Lyme7&{685WN$ zF@H&yPJdWB{X;pm6vIfeyhF3h`#jn8GzkmP%`)TnM(YM2cuyU90!yHrQdXmpfz>z| zX3H9+7RjnF0k7#i4=k5ixf1<4;{sPM)36gsi-<;h3nnCcYeKdt+RwO^-kOjRKeKs` zcDX>M)=lxrNa0ZilZ>RE4vY+ahAq-PQJGWT7G_X7)9$78pG4{7k9Xs-hRL4$cQ4)tnaeVh6p>6<9q?h7> zI*oX#Wv2Cb2{stcjLoavOVGsnzjlciU~ z7^eyX+u=NBDU)(hKGSeBMZ@$uEE?FBQTMb_biM+%v6s!9=fl8>qGv;1lpyFghps2uR8L%4#Ot@`GU^7~gI7~}{bxIrK zU|kspPnBXDR6kdJJ~R~9dYnQQ2jJTv7~P7A1ca?lA}1PYJE9em~Ww{sT5WWFIk z(5hiz8qynU7pI*`Hq&#>szLg;0ijN|^Q0U~i@d`yD|ar+HeV9s)Dk0OPw!kE8^1te z4LNVCTNlw?mZhr`ENH28=7KcZbI(~~s7Ci+8Jk^7toP+^^sK|& z_54GtS(nfFDoV>1OjF4r;q>vwCh%ChH1CeTyt)8{Bos8HMdu#vcCu zCg)2TgED+*^HH`umQ?k#X(x6jReg&Rk%t{_@r*wg7ic~GvB_lCEGHV622NC7l_ZFn z?TH;W!*!)m&6-~^GA-qaD?k#vK}mxBG40;SkVH)mH_WN5eQlT7wmWgGXl>Wa*-FFa zy;yFS%4~W}nqFGb(Fvv}!gY9D1R9l&W}_Qehst)==Th&DT5o^#DbkUBg5_?kkt>PY zhQen#n@iGUY(%PxJyx0y#Lae6I7sQS9eioYZO{wyz6QM_-&~t0(+Ot8)f+0lKwJ3L z@KCJR_U^7Pc|APH}HImOHkmZT~iBap8zhI^O#tqg!6+tlywPfJA3IeazX9NtZ~; zTDGyEbXhXw4x>-a90C^YiWbvBp*aY2qEEDLr*j9040+HYB)DZ{Cu*>gb33E2^kQ<1 zzQ%eyqYNh{4RWXaG5@-QzG-s}`+!Du#s!^vixjRmIj5yDR_dD>3NP`%{q_1=tZzH` zY0mljH&kacU%ONW_c6IHQ|TMs$80j)i`31|DNyxOFB|%UfrGH`XS1~}&V1oIr2-+D#;FuY?F!3LF8|aI8KRP|iq@kT{B0v&>NJIs1 zl?Z=Nu;q>B?@u5b>9&sq*LVL``b$!wNBP&Y7%4mTtH;U9JTW5-KQ6>TLVrm<`7fjMq1H{N`Ed+^KE4e67r3xM zBPRJt>vSJuSH0T#+ASV@;P3qtr?$pxrN|)N7Rz6l!;cW1YtlL?VD<~;=KMu8XrQr# z44uX#-}pZq731s#8?we}Le39PG-r9`|Jy1*_GJ#Uzy2+!2IQ?(vUq?`IG()PRQKzs zS-VJzx_og?YD%%N6z7-;JfeF3PGYtu9v!qLs5jjiVUrnQMJ<)dhKn^&Ly1|}WPU|- z9YHU2Tggys>wSOq7Lpuh1Yqx2j0?uInt?n|8xRNmPJX+}jnSZ9I#dc_O3a`b{rHTl zo1Gh&=P{druNR>JHS2u)=VAGSh6#G)MXA8?V!$AYKqdI2TFQpNOKG&t`aqq}G=2Fo zJBtpyaNnfp*)uunf0CRjI!&hdWR_SLqB4O8mi_W$uWaVVO&U*ogrfzvMMVqNRug7r z&!G9)zj+-oxjU3x3L*p$L}LU3D^+F8RxrVS?b{+Nl4{urfaI3}U13^|+K`%-Kigki zm=^hoQ(P!gMC2NGe4*L!$}_V2UaGf_N#5!uw^ndV&XRalsZ?er9QUn5Mia7=z(?LP zgi$u&+aD=TG5t7A(3hL$V~;$_l8s-%K&U6(w+vuiJ)BWe8XG%wRF1j-8?v_}xWe(9 zF<;>fBs*-q>CJHN!=mT-E5K)Lkjn?^eH`1u$M6?>Xe7(K`?F6sB!@?2X6pRj$M$l8 z4#>#W$e>86P;|kjanY>_~^aUqg-t@-f|HKY0yJdw7u~GP5Xry#tn}a{c*ieW7DbS7k1n3pG~5^ZZsw3S53Ir^y;OItsB1Wi4sBYCr1^p7@mBf)6$sK zK#=FP)oO7ibf>Jw|1%`lw_47+H^z$l;!`3P-A_N+n%G|)>=w?bnh@;9BVPlhp%wj5 z`d4_$gsk(B1hbUYzs{!&|H}4%y^-&F`LW++$)PnH@_)Vclhd-2w{HFK><+h@zR#_3 z1Wt@y!CWea;tJ`2NN=ouyuC`_?ytU=pNV|8)R;4>SfaB)rKHgrQ1sEM@0>u?IUTX3nc1UqSkClZ(Ywi&z=v8T=p%8SZG^VMuuo#y2I?0C{XzN#L4Pn` zU>#>SlSJ%AVsr_t!|37=`q$g1*3tUxMUD2)M)?C#n~?f@ae}=d!EL5co3brXaNa&P zp4eDk(SS#|JRch&?~4`c`{%}EMSO8IUQ%+e(O5~6wrWKL;Y#jRnoCa={9u?KXWTbD z+}qbuOlz4xT#p;IIc}CN4>p1m3*rf(KM3%uO4x9(IUsI6wy@I5S&16y$)I?Hy}Xl2 zpha+9sct8{j=bQdFpFnHl3gihOj4^U7LhvTTsSm3dCk+m&Dk@w!+6r*9Owt*i}&%4 zcx^UYu>ZLUePQyF`HbyUwKgrsRP91zRqtu6>_sQvbqA0>>JH-5YLIgICK@EUZZ2tg zhQ6`_jQGjMmAcHjK3mo_kGIx}Ix&6Na-%UylypFQST#gW$pHBMv~#w6S@nJzQ3@K- z9N?ap)^bwy*26gxmkf|)eCHv-TU8l(zoC+H82G7lbV;7O;1CxS87;~YXYANcItjV0 zItkH;iB3W;NSPW`M<(B#UVtp(x;fhuF@o_>*(IP!bu~Ts^64x9nKqG}*X*$!eS_#7 z9BtuzR19)(kt`V{H+brr$EGHCpAsjgWgLgr7WWNN#(L@u#{kA0mz$vEZN@dctEk~W!ol+}T}NeS%PQxqYA-BO}5 zw{&*{ak}}(WHsjf4^e(FCw7bGlF-f>;&UXwRhW~Yn> zD*<#=((hM~sWj164VBapSd6KIce$&!O4lY-^=qxRs`semaF5Pz^@T@vC_>Bkodw#0 z7k31s(^qAQX-qzoP1$TkytY2ZojjLljFcokxyqfqOtkw&x$)AM+|s&WgHj<#lf)-i zHw2c+w~n&6aC8J#o0^ZZ5qHAm(sAW$2yC{`Y_os1ThSZ~R{p0fF*+kH0|R15jkGVj zpn2;)k-Q~0Gw;$C)*Wn;!x_$@`R^@C3k?EIqK<>nT1nC^@)IxZHQ$~V8%&~Ql$U<* z)vxPj(g|B&H-j9pAhqU2HnksE5)ev^hN;8sCsfOEWkm^n2fuM=RGyP1X8&1*wt1nV z6|*IyIbee3>Rn)!w@>LN9*=JvgHMn~;CfZQ_3~;@JPm$&lgfjBu72fcU)3F%D7bep z`qR+)F~4*sSdAjoBg4fiv3ig=a-N1hHzmd7&so1$)`9UE1>-ZPW$Q8b=f42yIz9su ze4SyA<_a5rT6|O{8@CYRn^)FTQeB9=wi^Dkb&2K^fa1vBdlGV*#x#h>L`gJP7Yc7Y z1#=MzRYpWE6ce2|72@fOg!2tv#yx@Tk&Z;|JdLj|y>==Q6u3TTR>sxWT|3<$yP6*u zuW#_jCP}tBBdbRA_QwQYOnlz4N;YLJK}FUQB=deScWnckuSztD)1jQ-T0Wp@vPeiJ z((5tPizD>aS6@##Ugt8!3t#(_Tl}#)9S$;#&3~QoA`>lxuUbCQoeP2PbE|&d?aauTUbY$IpA``wCC_WOA;zf=KYuIg zg;ltuLjtp~Dz>@6nVUuh7v2S(@s@W*b{-jE8|4agfc zU*EzCtt%3eqAIQ0Z7LTRIv2_*LhN-qf`YO{r6;BhuwA7GiNYt)h3U?Nb}+8n1Dj8- zUA%=F@`~l60n1gm;yy2JX zyixrmulHJZ>CMc?`-%MEWp#ZIJu)5Mby=&Y9KD>5qdU`ycg-6qNbf|A6ofbDzAUB( z>1+Z1uYcb%e@KVgT^g;TRz6eYwnw*TrE2s;M~!Rc=AN01t6EL80mYj61zsozk5{wm^0sUm!J=)#~?*jv?ZYP|!N< zxXw1LH%TutY{v7@9<){A2FZ(@zU{FZZJdnfcU(+&b=K zj&%baorv)~d=H|<12gSH%o|DyYNeczp#^p~SMZI>Nl@Kt?AT?AeqwE5jyFg6nN%Ps z9z*c$#2xtz`$FW9IsOyj5>pW?us3LWO~;4|$wGL72o!Fh)juY%*BJ&7=m_9eg#^mh zc#^0G`@bnxVOUBO82s{Yn{MGYbEBi;=c`qrScoTYn?R6^4Pn#i=JfTi>So)-os$CE2B zCHtW1JB@nRUdDHn(%^0=55dwY3F#)M zeyL8LJ1Zkzdp*zM4;wkxS=$Z`7#VCqfL)MQnky+mZ?Ve_3?JPAerE*}jP&B|fC4F> z#de!4398GtrXwo=iyC!7HL2nY=JM$-kYskVc1I74FA&$2xY}{zwcZO6fA>Ea>kevKE8EIG;hw<~< zGR0E8KrGc$zhb!_3=YvQ*XkN(Ey?~I$!iRGAAvWUi{F>*@$N3-n6U9M|xM;GPT3nDZPCJpZ?BCxrn862(8 zi)${;FZ0t;w1thEp(dyyO-`*0>jTaBo1F*GX7xtDWxQrkD1iV!AL zrZb!t%QPUohXY!5UOX@#`~X^!z{7N|#`utIgc*ZCnS8^3U_JcOdDe}ExWw_2PdW|# zePEtIi}ocWew5B1QaVqfJ;GkPzb-}d1rjsT`-*s&gd{ZHp;%K zIB!$@3Z>?F^bGszx%8D&d>P9@AJLz^P4~;M@D0&fMLtX^qpiX!JV`X+MPwIxF&n{0 z_y@+kxfX6>iJkF6ra1q}U30-pNTE%}+#>$^Q%18v+sA^YAIZH$Cy=PQkGwfBui|i( z>`*;N8;g=a%E!5xfEEMTq%aK0mjA?R+42W*rqm?}0$O;~rPg>(oVt=`sgaJvKCCYF zr(7-P)*La>D8~?na%rk{c+)1~5+tP82y~ zlkq=o!kH!E3UlV>U1S~t%XSn|s4yh#*A-2@@)rObZ|9YN zZ;x;D$`8e{fsU31@hDtLI%YPuV`d}&lg#kFmWoxfahbWrhy}^9bUY6JqTdwHe!A3r zm7`I5lm`lU_98p4+Q1_AxMNRN?XSvg!m7+?yQ`|URP5~|XC{x`R`aCDkvXZ0sU0qq z&4{-6u*(3^o1qO|@L|zC*SBqc@lrevULszGvstOi@U9Wi&T4nmhOiY!B8&#Aa@=r^!I z1XdP+p(e00J`6MH%II2Qt)f;1vzPi~6PQh&bQ4%H1aWM+0N4Xd z1ga2OB!bzbrRMpIncLgpLuGF|3Vd26Mc8t!n){Yj$S_peHi z8s$$ry@OdmgluPGC!xIHwaDpWsAMMt!zkv2J7=&ADhi#~ zoU3x{n~xVtE5Hxzcpo2EZ}QM<4ocg_5>A#vbi=t@=9{2eB4zTRrOUSOB(=Rhcnk?Gbt@+RLqI74I zQ#3TOLizQsdt+;&`Ef22d{v+s*PVa@053(KmGw@tId<~;@NyLD3S>SU{;aQJUg#@! zaVx~;FicVk9WU?h3#~#cU;J`N-;5w3F{iD@;;7H~)YwG&TKg6_U&0N>Lp0a>FI`YTW4oJgID-I%Gcb7SHM&hXvIUR zr)Oelxrosaz{|H$k4&sod(Hf5MAa4WA;)?K9QbDZjGVw8`mFbQ*gTVuc302lRtJ~o z^KQZqdy~2GU*9rcOLClpzO~V5j#>PDp`Ac>Y6yC zmtal(5}b-}!=~kekeun~*i`NbR{tD850A!8q74TjAO+^QAZs4{;#<14GvMp0Iai2>}%s};YNX{i$X4msTbi_kvw3;FAseV1tTqo20ZMK>o zfZrnnbLBL-A+8K2meTe><9+#e`ZQc7ouTmCowOT!>ls*hq6N3yQ)1hh2<<8!^EJe1?MvZ`9?X|%XvpO$Br@Ykb4&Z0r29NI;F8T{raA?X<@P|}0o%t(gwg{+M<;2i>fAI41&{5~#Mt-)g@ z`M7NCUNXkx?j?MJA=0Z?CTgTt<8DxYUK3ZMHfMYgwO4)fQJl}_dIUPsqlxK*ETxlZ z#C~v(!t$NgX5l<=YIHeha;^wE-2vH)7+owTJOE0PwK$s;>K9N`MfwHQ)EN1)7A(9K zlKI*KGQMZk2b=@#A#knp9<cghc&H_dYmoiDE3r##5Il^jt$keY_A-wM=L$Bsvxc3ZX`hLK=9q;q(5 z@+m}=4d(lMo)->`^7-rKyqFi7hv~qc)EfWQZo49-Pg3rUYf%J3STz;Fpma9?-N;U7 z%aAwiU`NX#=l0*xz6EQh4eD%jvhpkP6e}i=>HLTm-s^L7V?06ZFX`{_<<47f$>0Nj z>%VnK)2W;54`R`hz8tC3ZrUk_&orXOENe~Bb!?)O-N)SjQ!QocWzLqOc15L#bA~kW z0;R&atI!@BPoFDBSlI$Z7Z9ghl|-M;wM26w$7>&24OFkCqGZj(gLP9}IqE9RqfxN< zmVBzoT#i#;YDVuRD~sRF1*vtiGkR>+=u0BUf#a7At z$#2YWd_Fy-6RV73`NAPf-l+bN(lmB|I+Evsq|iOedLDF_;a9dy3XZKwC3fq1AbFcv z2vl--o=P=ZMtNl?=#k=%rQH3!atr=g%AG|))3w|ZxIpx=XM0&J26Jl1B0Qx_BH{qx z@t2oNw+KXWt}~r2RslPuRc`6Bcxkmq!M9#V8q2W2VrUMZ(-TGmP9%p%?gUl?m6v4Z zz}jqI{U`mcX&Fi#55rUcA*jZUk|G}2+z{vj;hDMt2+sy{up4E@U?B5MR^JEMOT0#4 zdTdHfkG%curUxS6CiADYaGxpFtfeP*aaPqJ-L4vay^!C<0QA&K4S9zWa9S9EtBl5+ zmx6Xu&{Md@nHCt)L?tf=N`mH5CXQYzR5(Z5NkO#8Sp{j+P719;u(0fK!+r^*$j&r< zM7nuY2IqS`?lP*}34TN#tApw~XG!XBy_rtddb!GwYkM?JyygTV(iVHH<<9oWI&Vty z27uyKWleY0E-2?exT_aPoC2|x1i(mL_Wadw>;PN%!tL2aU@Ox_QIg7ywivpsE= zj+XeJk^kcO1H6+LT2qynij)Tv9*Kuu#AF46tI_oM1Tou{RA%0h%o(^DHf{y`O?#NIehs;ddax_J%1aFOBDUmX&uZLwUL z8A*d? zy-#pXz3^nkYZsBFDL8Ev4$UgTdhqwreZ!}c=RJkO3HmT;$gZz7od_W3R}&OAUnvTk z(AN|tv<&W;Q0QPgTw2nVBGX1J4Cf@*i#yh9MbgafUp$k@e+M57saAkHp2}{BFEIXY;({VW^E9Vq zY*xu7krTbGpdVe*I<_~9woD*U1kz8v>@QYMmaxOVX;SJKqbCY5+*V)G^s~Y2Aki0lkt|W zS;ee_=j}`KeMk4)(stO5mM%|o>IEM|xP=O5749$O5cAR zZowH1l>0vealb`c+5zn+%uhk{!V66IMi`F7S$mtz@ae)f-HFJDKxhw3<5@6HT@#F4 zgls5XC_3qfD@;u-bA=XyI;nIa$djNsX0NP2C%&n>mGtJ%CF@4>;#XK$#7O*|U8?5j zf*`Zbg5p`2be};p^)Hb7NWZzA2|OgR|GDD6mK8$4wn_uhDh`y<262)3Z*1(!)EzW? zegBKOZ-H;B$o@}hfIuS&QlUzPB30`aU9_lRK!I{8ih-2c79T~|b=}JP+vSk}J_^OO z(#voa6+XU?2C=X>-?;u#1JZX27N1n^h>_Z7QI>j6f|4!&?DHgt$?V#-RKPFndx zX%P1^l!`Q$NRwRtIII?Iw=J(cu|J_UTYE_0@2~n|9h?GE5cE1ZRaFjZ)`x)L=tIewUtt^LUujgNges^zbljjbw^M+ee495+UrTN7j zhUrT{)g-d{<)pIh%yZDCUMkKH)og@bOLxy&)QUFK!Bg-4+rZ=iW%S`#xGGtmv0aEY z?7iWnKG#5ELfGDXrrourdU_f^A?=Ha>1QLq&xlhhO zi5(a#CgSWJHFbFE;IE6dlzFxTW0VZ#0E(=rZ0IGj+dw^{5WK{XVG%!91{q?SM?@P- z;46E0NZqFgJC+H8SgFsa3H$+of9R-O&(|^59_Zx&%fcRs6BvRAm2M2eP1~mInnq*U zleUuBiCwuB!%22IJ8Q|~_n=I&XA7(yVP74l+plr-CGxbjJ2wg)f3?cf*)EU2TEh;r zU=Fwf-u#76!O?>($5TeQc#j`3OK^PX#QLyzsRGmN!KKPKWy;4my_t#8u2($`2s5Ea z@*BxRnNFPVfLHZ6-y@29IlQBz}gz`H^mhkKn~XQ(&YCU!$@E4|H`HGWxu5Q@!9HtLmgi z5EqS0W3yA)jl(4f@iA2c%*rmVFAOl3VB6`}JrX@P9f4(BzTiJY6}rzp)sZG<7+O zp>xo+BQr1e^e^n744B3y!|!PssXk=c)g})=u^(ai+u#eO;|~kCGDqe}?B6MEyR1aY zis1fTSxa-rxeBrLIBHx$o+|Fj35XCscCDTY)>bkX4`Og&1%|5;q8{N7?}r6fSq@D} z$OBu63nZ}BQQ}wKnMt-``?-+H5V^`4HIDMVGC;gJw+CoscdZjNScH}nlG|FZQfnTI z8lmA1WtpvX6v^JX0{IDtUSiEQo*Y)&VVf0?UNLHp}?`5=?#1`C_FX+I1S(wg{e-?kueAb$m{PD^vLL&j{ zt+KYG+S6!?vN~|&5<`thLEdxvnY!n(a2#94`=expPT~|#SqpX&1++`hgT9fxvJ3%l z$Sqnp=fr)mrYlY1z`shGP*u<916Cl1?jYtCgpbxp|3fVrSI?swK9?y(d*G z%P=L&n#}lMB3xE%IWhh`@rIZE*pT8Q7;p)$r(rO)!xN7*8-W10J{@j(K9QRm4!_8D zL64m~jS^GSMLD-%*>r1G>(GALh}ah&hm`+|Se za9ha-;Dmtw))Q>Q1l+K?fpC!_pn)YUW(Uokjbv!V=>@%fLl(^-I3>z334I2wk~3(_ z4-qqH30~6C3|e}QK7&?uK7;NQG&F-I(iB=lQwS)R5*AtS!ER`bW4NvKD(Z~jbb?Te z3!7535kLuex{;#57}~pBwzsBOw3pgPZC=x1o8Lit0lm$ip(I0_m$~@P@6qNfeH zbMevBUdHJXQq->Ei(mQ*j}}vR(ZLi>x$tHn!b)ss;7vPUua>4-X#WYW&{V0BQ)?ZDHbpK8;UD*2Ni5(JpmLIq~`rR4$C<2}6AWK(t^BR16G zVSoxtx3eCV-^ZtaPrkBr(nGGH!}y09nYKqX)>A#ZsO1<#Ei(=@ip*WXRY+fgprYt& zJkVBc{Jsg)f#?O~89dOq5RKCNuo!%UK4d4+hr@L}#m0JKMT(>C$Q$HThc+$E91(0& znX=69fuvZGXJ{GP*>&Tt6^%<oJKMz;7d>eLsHbxU`G4j@ z1IZi?DW!WW{TclPx2E0#yRTHhFBm*|*6`{npZl?P@%J8kiL7IYX&l}ZuVoHrVh_<9 zNu}WyJkG~|neq?|Aa4D2JWf@8zCER?Lqq%q-Jb1!Hu2S%5oq$f1>)yzR zvF`0-Btxx;mM8O@BNP1zVLmhy>R2Bb0|Krl4}1^lRRGX)!eMKdpf9jr&>>+B?yRfK zMjgHI%!GixvH{UG{Q9Tb=_}smLaBcP8et~9JK#h@`X10g5}@U|_+8_^_6x2?mf<*H z+E$M<3q=}Em=E3d9V%Z>&b#p7tO|4Upd(=C2FiK)I)7qme{7m?8k)|gU_V8!yq*+- z(~$1UZ(dGrBHZ=hI+#4RzAa21bl$|Tu8Uz;1D|Ec(>6U+j%te7!J4sV^g1N?K|0qW zco{l7{?ioH7rK7!@m1%rN^9Qi*sOz30F<-g6mU7oO%?$`P!h9J7-i>ZV102ulE^;NCdZNg^V0ZC%#f4m z`^9#*N6s`jyt1;g4A_T}via!C%}8R^itR4zt&LdB`XDy*T<^&?_gVPR3m8I@Wu)!o~p5x*1(jDZM$$@^v@bW`v!j5#SmohA1m@<^NxN@i|>|3xc4(_JiOpN;u&LmR=<5txu6^T0Iwzgwj=F|5B#I9%Q>^cGI zue;#aW`6a0;#cg8T27x|AKgp*TGt`JwhDf|FopP)n9snk%`x+93;6X%s$j?b+T0<( zwsyp?%>jNrv`6r3&-?!)eg%VmH8RAnuuUJrSLmoAeq9yf*EI%yT_5DvAKLNjI>E0{ z$W}>yUDGMQ3QEsPZ_#?euj{+w*R_%S`q;Nder*l%Yb)_n6#V+YFTk&0);=uB z``IZRzh62XoC+J6Lg7mXyhT+e_W&$8{fKqlNNVQpg&9(y zWEVKQvauV*{_G@i`M&!e{~SBGS=sK-aPfC9LL-J_vUTD{TYPmUj!QNL2c?eCd4d)c zrNN;b3G8J#w*CkC!9LK|u`1-&X94aU!8=NW*-^CDvlNzBv52de;&!@nP}fUoC4i}p zr#^HXzAqss%Bou3defOP##s+fTq|F1Ck}%rBM&!;lR~1~xf9yHHc@VEfhAS=V^AMS zqf=i%zzZB(K^P}2c`n{`Ax6|G^v1Jb zn8Pma+EGY674qL@nef0mMIO3kN*f$TDWVZ6GlZ7SH4}Vpojx4z^b3E=U~gUAd8b$7BTstg>#7skBpLuRvvlgk)ul%fHVa3lI{YcY@^=)qVOhhCDFI%` z>RI99Q?0N=O}#h+WLURO1kFDo84wR-%N)u+JT5sh@37mq(qXZSk zivaL+3)E__b_f2K08cmI69GKY@BDYq!Yh-IzLtp)Tv%~d=!j0r8m&~2)+lQU7Kb)@ zCRGAC$$E%Rb1Z=0cj2jEWml4|O2ke}_?2z`5u5lw|3s(y+tC9gTOXy0IX5|+?;vIw zZYb1v>=yad1WZQfCMF1>J8SfMud>O^%depY81arP<+Kr<37zq{@Cc0~u%WxDHI^U0 z#zrsjbNeGDsuxfOMC`MSj~2tFFzK&lNNzEBPR@kKa#qRGMjrU^II+xcDFUz)}kw!l@U+0tTiOsKc6o&8;r| z8l4_jU3vh2;I&&ze_WdQia&G{Zix24Mm)3&C&LWoY)HVl7Xn*ee?}T!PGaaripOjv zl(1LRs!&9Y;0NLlK6%RvelO`h&*R&j%ZdMJ6d?p26ltk+Odi5xQN=H)_ZP!Ih7E?W zC1D4DY89~xjSw{2c^$DyS}&bVh$xIrc4T04C@}*>z2qAt*!e`6RDi#@S=v=@N3CQ} z$r&1_iW)SMaad=CMZx0qg2XOT@5FFM#7Nh~V|*RK=DtbItyvPZ!DMigv6-(uO)k6C zHL8FT<7eV!-gl`JOsaU+yE4D z>nm8MolT`c#v92(55orrlQ2H`6~8nL zSmRUZ$QF4=_935m*~jE6CnQYc-@vy^vxeyd9C&w`nB+Lr2vt|FPB!c~5=c7Tjw-SE z$VyETl}ce#(`473s011c+=VEio(y~QSmD8m?W(QxTN1WA`S~zHFd?pV1T~BIWOw&q z@5vrWefm9UBm~2xQ$n;0?!!cqd-_?){#i+yK#_9sy9r)W0#wmd!ekVz&#P9vq;oAZ z7EO^Z9Tv@IA%28E6nx4%vb%dwA??9+Fo?fkd;K`!5wT!xW?A4hN8LZ*fxfUZ!QP+= zUe{r_{Q}cp$2aF0!@mZ95iSN_srIEq5D|`sm!6H62Kqv@q3a402?>?4sIcrjz7J*} zRfv+X#U%0CBMjHGqRX z{%1SjFs8JUpV)f(@$pUgKa|3QOnvEpO%%R8G?DZO7wkLE|3}B_ndo6^T_`)sRh+Eg zR)GbaP)q=mCIK)>bwsIqmX1$hHzlUVF+fS(n_PxKnQ?YRA;8pxBfYKI`0=Oy z0tXZ*R5Ah?$8^EyW4`D~am&Ro5Fc98oh?Y;mR{+?DIX3pvE3Kv_-Xfo4BPrt=<6O| zAWZ1+yH?|gd4!%T4#AP7CM#8&nu?P|-H=E*^g@P2;aWC7kuO>Fl3$yYirslUs2Lfw zk>itWhGWf5-T9=&U@z<&c2ZCfzv+*O5IrJsU7K{ofOgycmzahgAE>ZM+<0PQY8xa# zd($C|0u<0JEEj7~6+^6Z;8q-->iCvAF%?~oQ?>v~K+5Mwjf$yIF$-I1$_jnDg7oR+ z2ixiAa6pNpozqGF@Enqq*kdK&bU%-;F=HrYxk=bUe(uZT>4QjIz_8?20MM@~#bBMRH&(nDi$q1y0OP;luRB=8&fQ|#7Ej~>ds36P6E#V&V@1kT{=fJ zc@jm0pMWd*qB+nI0Hz>DM-|%}HYHWn5M2cL$23)=4FSRl@+AsC4k`K67a+pKsR&Zl z+Dd)IM)7Ry1bKcFezJ^HhhmHnMFdxT3Rf-LlJ|)mKUOr@L?(9x`fDOHqX4jZEdgZ* z&UxC&e8C($;EjS{B7o1ZYJk#Ux+GL4w6JQ`Q%2_jBJ(DzcAtkz^VWCQZ(cWz8qf)8r2X@f==2VYd7o(%o|Rl96HcKt)>0#sN-CMsU3rRutW1xH z0-!5USfMP1$1UFh)}fAypMM=8-7W`b&b3x6-@$fu!)2%nB1^`FYJ=lu|7l0%n0%*>q+NV@_9TH-XL&Aco9i|GZgVVDk8z}DG`C$ zXDr32I7@ix8(j&Nl6FERH$dNkP=PN_9-nXu1?x4nl_ryBED@TK%IWtzJ zggl;B0wYQ$7JnHyYA44;xILfc=~1mb9M^Ovg^%{4j}$_RgZ_sx4N7o^2?n;6yhqX> zaoP)0gv?GykrUIfEI>0MTnRu~;4Fz>ekq2x7BFJyTe4bEwe_*7QG}&peu}1)zznh+ zk#accP2k56PEA^C21px^W4w<~Op4Q{B-u(Ei4o%D+2qIg%zM@Y&$CX=Eu%oQZFF~G zdw3}MUSeJw) z5@fVC5&Z5iaGK;x?;LJOEh+)0fL(-x0{R69U`zeTJea_IP)x2J#@Clwk$vM~6VA;- znEdkrBM(^!B-gif|f}YNjz_`7DZ91`FyD%RS)#_=7b{JpahhV#0ETTibr*&(w+z zBGRU)j`CbzmwaNsp6q&j3LLJsdMkQs=Ed6VG~kgm}BKjE|EiOD>+8Y z1czW}M25_AUnBj_a<`KQ@F>cY>G0Hg-eN^E#pN`06jtr@V2;ZK9{(eT4c2xaQs5Eb zfOL)OhC`1&Ko5cqNI)q}rq)jkwtlp?;xKu>D!t!V)X?> z`0+w{WPHZ~+SSx`m{L=BR(!IAYh?Fs1zWWgnia$od?QB@Tb7=Lf`urQZB7=2+B z73eeMvImDr)#)P`*s(yX0lHEgba`^U@%Z@FL&9I;X(ypKBHfBG~}?g&!ZhN>lS_Jv^F4>tSkB8aj^& zPnc;geS0VJUkRTVLFs;$Vu@3j4TlutQcsK>hL{p0h{@x>Q$+ZIT+a?=;P`949nPIs z^37+E;x6F+t|1XX=pn*u72d4Cs15oAw64MHy6Av6)vR0Up&)tImp{JFS!4My7_A{3lY?3Zc|qAn;XLtRaJ zN4~6?6q#V9fnm`Oh+z-LUm(NABrrw$|tTROM^qLlYt((Fxu{=^@^ z*OKCjBnb%zq2&RRO?a9?R3Y403?}5wZ9h;*(3fi^W}8s2sY_CbhbCJEkhauF*c38| zLJOr{>k>_yh8c@KX{yveG$%j03;RV8uS`+j^*Q{cLebu&&}u-+P9KMD;|{)deHRKI z)TeF1yk?npK0iR*fp#a80wAjg;l*5i2b$7@v_qM(?uxL8A&SodiUQ{pf?-7ekvBx0 z`8K*K`d(xswzfhs6nO_sa)U%C4!~=PIB~fAAv9V!0tiiK1FO?9rUl1@VNAEQ$CyT7 zR|7hcnP0))q!WzkE*=wGK|CxuoMm0_$a3LC*MdW&tQ%a~)JeSeH&~jpt_LtLMnGar zXI*d6r?#^Jd0DBRA&hA~k2oPsyWwdE8=Sex0=vWI1UIcYi}^)B0EPt}j^Z!~>i%QL zmF00BL@=%7PaM{_-^;s*VA6A2TzV+5!s@H5z>D@aN7xVT>?GDQwWv+VAY&Ak#D>=M z6D1aw24&F5R>&Z6=(dgD_!!1!D)vvXzQBIgI|&1(~K76kF7py^^$9Qe_9a`xibGEPf=QA~O7|sMfshwGbtSr*Iiw~5%j{Id%Dp zBVaxdK^Rv;F@rqv&r8*J%%kt51DiCcnLGWSME=qWnx}SHFG(I_$$j%H;fsgcitkW0m^ zSK$Y2V38;p1;QMxi7Zhrfk%C!5%ALjc$!eBnaJz}$E&yeM@jGKi6gpw7%L!7FKobmyIog4y8W}>^o9@3j9b4p?AeB6fqY!N5ntK{)S02N!!i|Cj_XlWZ(kqs2TlW?CnfsH7m(}OmC^I!^>x0RCF2<(fc@MLozlcOF!18<)Z z81>uQ0xHxF{!!re#Svxe1*0`1R#KqS#6)m5;t+6_Bm*|iiHrh+4X>G=a<++>4XlzP zG}3dCuuOBBIG!Xj^I&T5SI>e7QMf3|R&ooJ1a%^8zzAASgquq0j-&oebWY<1q&?s# z{@iZlYQto7THxaglNJ1-?mmjRu7faC7VZl+Z9}kW^OAI_)S-2dBGs88F9K_@0!&IDG050P%BE6{pjs@hV-W@EP#WCl zV0txH(%cO^eCv!2akN{3W^kE+dE63Q|G?GWW2&0Ly{5lpX)uZBq!hCG0M!tjHYoSW}R2pVzp zrium&`Ex(S53ENgu^c*1d3w{TBOTya&zzaJv0_s{68cB@YkP&Rh1KjVfD&eB`>(_v z^Tj^!`KU+OVpI2w1MtPK$-EwQfCh9u`Do{HcqjPP%*bu~8zJ9CN5U5`r?o!Q^S?eJ*5DE8+3# zOGuvp5MCrx+m2J|u~1B2cj07OImnlw9O*O7V1x2(hjDNy%t51ipfi;EQ4`IWLBFE? z?eJvGj}7?GPv@uPf{Bx7B;s+tGs;38S21dm8K+yf2WgYeC0Y=H9A>M;!aIVumWx~T zdr_6GB$cFg#4B@yv?JliCSD0>Mo$~WgtyuPR%JU#V-y&`H(d877ES0cFyh%t$;#^O z5hr>B(;MB!>b-ep)2^mW7{cSxIhqxtznVJUQ90*4&3vW{l77+PZ?O0Ep=(8%CX`7t z4GyRM0iL}%eTp?5z@YJt+WGO*ns$Qi(9=nUageaGXR2~g&7k)tb};+#!o@$}CB+Dj z`~ppsbhi}*=pYkF;8WZ|oMs-FfDkK-I>q80>2t^XaZ==Lmg6D<9;mjuXFgfxa`%qv zPn}*rYKj?NA(6d>8&q`eUY2Dh^6o^N*p8M6ry@tXFoL!79o&O^q9_Z2Ghb(J zOomd^bz$>yWF%hNL1FW$u$jp)DDp>lVSPt6$$R%6ZL(DxXIB%{$!0av!updhKf>#C zTOD=o8ID81RI5wRZ51H&KJsk_UDHJG_vU#65yW7opdS+wAa3JteTEGc0`>c|gr;}| z3*hlH(>If~VOlotN3IYF)EdPHgQ}WIi4_jO`2a@kH7LPw;vO8xT%fm;`Kz{@I^N7C zj&@8Ot2^aRoPabzBYBp1<7hR>J8?8{0k(%TarWtA($r)Nz0?xOPP>@edvF2$&fEa7l z%nzyx<{ff_qiH$vUHMQkkBjV7w$k5pWaw|Fg%?i1g3@&<$({-1tQsQ%%O2^hiWky5$d-#OEvzP17_S{3s|?w__2wA` zTeedcr5=bpL5|bsX!w>7goF|S7V_+(2cDW?5a8&a9CGx%bu`-};b2BkDxfw%VkIFl zP#0VP&x~#6Th*kS$)=3tp93RZY~>4Y9ZmIw;VDXCfs*7h8vI|ZFUIo$C#G;Bwk+7< z!26eFLM1#)bt3&jt(v6VYPk&vS%)c?@GuyDBBROWz5>8TYpIVY?pqFXYXRt5$T z<3|H!r$dP1MOG64%pjw8Ai8>d|IhvO3s#J0XvMg#J91~X;=kaEft@x?(rgEe*Dj!R zqu+Dw$2Y@ngY3Ayy@yYc_TJO`sVy5Fo5*&^ZY7z-=lv5Id3L}vr}3TM@K(PPvl4}& z9KNjg*W{Nv)b{3lcy1)I0p8DTxQjeNoui90YnJe$_hKU373H6WkcYr+6tyc=* z0B^xeWJ)qPGBJ<9G|8;#tw>W>liBmcA!5>j$A`A4@6yRO%bFlDbJ>y-*ji))-Wu^4 zy=Y=fuy?|*(?LqRYU-Ai7e3@vtq!^@CddujB#$7tgg+Rf`r*e~9PEp%^`3Kc z081+hbMe=HaSBD#Hx%r76HjTvLaU0PacRz_6FXstX2Q*znJRf7@`Qev+KMviOX&mn zBE3goz@^^H;q#Xc1an(44}gkE9ju8H`NI8}l$a@3xcEjK(af|G+(-H|Ft!LE0={7y zPAgUmPXytI;P}>kfrf<-INu0@7H9fA84v2@i$U(KwmZJ{e3WrO8hmxngDV9{9vvxY zx?$MTZej(pshqo2cAL)df?rA?dqVaVs4&DGKo7*mLNLz;d{9@f!~c3H1I-ZiU2=wO zXP6h(J3W!x+1P*IOlJY|;jU;o;uE^#m?Oe-ib_*gFQ zPJy5fQ~>c0PssF(s>rh_vrlUxucaz7ENdd)w1mD?1==(0Ea*YCG)WBLNbyV-*OeWK;PO zGm}kC(lKspM1DIeLlx=UYD()tO5Zhe-^wq$Aq8UA zs}MP{`KJ#7DuL{2;k$Oh06ldJLZ+?sZ7>&GWa*erH|CCp=bgxeOIW8&BR5`k^$Prt zoL%GeSQC~BS+tUV^GaDnZn`z%GgX~=g)GvOYOldPs1y+r3Gm|7EaIuj6DU))ct$kb zxt81>)dC%+?w`M>Q?!OKfI6?-7IKUlPSKi!9!ILU!Lo2N*$==^(m{I+^{3|yEWlrW z4AYj3U(sEd`ENghxk3CiZ?@sN7St{D+^ga_`i;rw5X_;9k>eNQc_zYtU=%y2Fv4ho zR?<^wB@^VZUie3p0Us@&?|2(Fq>bBgSCi2w+hj&m7vFpAC~Uy1cw4uRAw;O_`76F! zf7A8)%aPyb`#wl+RiSCcxaneoEpbpkJcp-US>H*i3#nA`0RQ#X^=Jr1P(bNHl2Wo- zP(Z$@qC;!L*E#2j;2fE|R{Hnz_4}|H5X7=Ez_<{(&&^CQEfWkZf)T}c$ETpTEQI4tSrEzYpSZ9=9we{(c+_BMcSNRh>>f z!pvX5Wu!LKV2I#!@5#|_3rQ&Ym8NDMJuV0MHR5Y#F><_tzu%VpO)Zm7?4Ci9{4F(D zjYwkP@lSsTCteYdahjYyF39O5Hzda<@NNf)&*_&S%PiVQd`>^jTO{AaLeFx;v(;c| zDOHTTPVL|hl)*G22Col_0r2Enc19a96Q0KDI;tc?SXFjXdZ9SP{+YUTv*+cc~u>`a~y z>PLHz8}uVpjJqnvSE}huMCg#R@j6L1EfK4Sm@8DYL!$*MFjtcC8RFlLKfHJ^%@rb+ zl~8dc#)O#hiUkh&Q$_Q|(gApQ>MIfEfMsN@=#L#op?{6k$x3P2^L}y4A=bP($#Qbi zx`-Fj!pLp(LP4gE^oqY`uXvwX7qp0J7ZTSY0z+)2f1(|*J|V}lsl)X#&l)D@t(cIa zjhK+{VnQOGORP7AX?4fx`WMS*gk+A2+i|6P!;~b>=^EdIlOmW`HdP7f% z`A6i2^=8J#_A`&h(#7v+mNRd34?NJ>%sZcEUip^L%xeePNy-MzI=N)gtmEH*Q|oUe z%V4niX|0{DT)!V4TDig{Lse67<$3|jTjO2Cxq&MTJpaHOjg2Y(gnyZ#XMXu9|z zbbA(B{-%q)h@_DsSIS>D&+6jc zs*tx!h-0*SxF#6E#qU3d;5~|QO58s2Dh-e(Txqb|gQEz{eo%{uPh_B{@mFe$rjhVA z{z`3-S#*rQQq?uh6i(}Glct%E-)_Huq-an&m51dd6K97|ea8^St8K}m%i-ymT3T3G z4o}F0&i#(b`EMI9o}G*=Wa1FW>$66qK5V2uBO3LDIfkKuOS7b5W@u*p4EKHhD3>zSRG15f*m_r*!diNiDPIvg>!_1y`N7zkH5 zU*SC-hVO_I2Xw+#gY*=wJSQG_SCg&m6w+e=i5FNI=1U1Eqs5lB74e4HeqWq%;Lhb_ z$#U9pj6+tAhY_$wE+~u45M{{knyF^BISSf5AAvVO#XmXmZvhFi6aG_){E>(7Qi@Ky zoBZ}Nt&0zXWnkP_`>0dQZy}f&$9*`1nL<#D{$js6(VDPTw1W`Ki{o%F<9$Pu;84M@ zrXr_UQCm3mx2h9ihvRTTAn~DlYi@xHS>U7B*YBrvTN~f0MRZ#WPwv*P+xmpM&4+GF zhw(=5v{vf0oBmCm)*8`izF?=lc$_+|4QW!S({7tTHIf&ouuf`AX(3lTE(RstAPh^C?MA58c z*jx*{&%XF`G5c~5n#}4qC5djqDV~()r__Xm7CP4h=@vD|s@`YU1vMNO;ZmT>?6W(6 zyX>b!#=4#pje4w6!gY^E{hX0{U^MCx9)t8ujz;~2k^0 zBXvsW)Nla7sRdcy;a~mZzp*=kcV-*TCgwub_@V)m2qI+%lqY`OG0Ygj8+M&Hd}V=I zv-5i~Yc{2T9Rh;pPL%-TXqksh?vqdlVXe!Tg;o{*9UJjsuqe%@Y8V%#HvV24 z>KeW%8Ki53yf{MgqU{rs7e_jk7uSD7@&ewALb{$>5@`9qkmjeOWod|*7^k@`{e_AR zEK6--S<2oMDP7O|DZSOoGwB`1-tzI~KXlbwN5Z9R1NGL9L)2Rh5xsRJC|w7&P;a&B zy;TQ1NGVo=Q7S58!-e#n}I2!fEZyIWHNi^z*jnu!4M*WSEdU!PIoK3-+M_x% zGu|`QbFDGIebu)LHWJ3!cY#uDt5_1@s&a9 z96k@_K;t3%#}4Mx)t*OMb+rfnq(GQLex!X^-3suHTn2I)v6OkB66eiK7@Ir4qvk&Mt=`;vy}5Csx%fuSy@Lmvo5Zuue;M)Xn2dC^OZFmi zP?4@F@HvTW;#Pj*(_jm|zDd!ldUmL)Uf;EyQyW#(e?tisD(YTcMV;^=X(ISWMp31n zul)k`&$JsX84x6a+)8|2Dh1V85rwitEdo}kPmy$MkQvFXU@zd9*e2|JL?qW^Z^UHrQY+K{AFoS9bQyYq709 zx|}>v>#^<5lG|>8Z_Kxc87-VvUF&|J2x`e@XfjMUC()aPstPHeAlN;K;Gjnq@4QU896 zp=?()>J7%Sv!hXOHkLiDb7~{oAN^Wq`#PQNoqNE6MfgTLvkgZA>}KaHhJf9GqF^P{ z&&aQ6%1-Xh`oWuw_$_`H~s3ukg?0_%jvu#l1rX8R{Mr%)IS=jbE8q; zT4m_&ylB*wM(X@%)I@yD?hnJ!^uc zdwn-WqrS^XeRDMGZAR)_qETO5Yp6*<=hQ}~9rcyYv`BX*%n2*&h-vYSnD&QHLrnV# zVjY7_>;2Nmv5IU!W?BTo%-9Bt z!S?Vya4jtYTX&*0N^QgbWxO~JEKt#*lH;Ix6!EYF;W*s zqds7yzAGB_m~Dod%#23;Oo%#%AO6~)i=VaKP>v;9IrELwzl%n_-$;FTG-}5OhMN3O zH0sqx>fcAB_8Y1H5RLj*I}A0M6^(j}k$QGC>hpIR%AOOAdWn&GZZzsfBegpk_2fE3 zO+3-4Uouk9i$-nRWhi@oH0s$#>IKoL_ZX?~iAH_-ZbMD(jYgfn$3T5wH0rmE)b~fD z9=O*~cCTpEMMmnPXw<*_m!a&1(WoB@QRnc)Zw=C*=ZC>^#_Ww@{aF&C_xct^dv9Zi zdd$CKDE-=fq1qJ3K>vb)esK)+z3M~dKM(``T?YCOW1w#|(0gN`zjlA9J|!{GzhIy* zje)+`N1^f`jDh|x1O1X1=-)Tcm&HJT(ScBXD5^Ue|ELD~r7_Sq8t7RJ^w%B?)n{1@ z^e-6b2>>Em{d;{JD!)Dk`X>$aDS0`aBc^{aXflij;{~{@I^| z$|s!nX!Q3O=pTuJe!qeKqZsH%HH7N(XbkjE8t5O3f&Qd{enkxQFMJxR4>`<5>z`hS zL-YjK5RLw>5WUyeI~w)25cL>Jq!o=m{j*SQR>nZj4D^&@D_Z#jkA%v9DhB$$8t4gd zCtCTAe}~E^zqV-f+YI#NbsCL6{qs=yf9jGRdv18Ii`=d-Xy)-xDQ<&~@d1z}_T4F! z*r^sZW7l0=w8jL4DfqhIzdN-3zRiZ+X~1S=K49E_OPf(4RRBBitoy@v;A5WYvSMADX8GVFZSaYr*n?P-#F9{v+v2BP4?9?#O z9BCisWE%L}Kgcw|BTNI$!Zc7^v{DSg3VyOKFa(MGV?w?N7zoA)3rNsX954`wz-QP9 zD({WOMsV|Q4K{*WVI%1NTDX~b%z-YuOAcR-p?m)v1O00TdJ5)^#^)J4G<@Y<(sw?5 z&sg>0TSmjzY#hG5?{_tP9K&}>#sS3h1YGT^X#Bo@m&UIuV*I#1e#^!9E#sqhhQ{w) z)F3#1MZ7};51d;ui+1w3dtw>Cr+;G@zh*Ih$}17$N2zS0^>3!3fBzB#{htl=>tdjf zZw!s!3o+3D+Ccwe4D?$J^nZ`Vj0vwElU`K>tz<^!=Jb<-Z&Q{age6-@2q1 za=awKym|cW8eNW8=yH5IqVkwR8AOYV$^bl5MWVcfzp}lnBQI|+IX6VWFY^J)CiI3k zt7&p{eDYO+sgXfbgSHZs5m@@~B0nY0zy3}Y*%UE9D)jkLY(gFh3F6ovRSO)1eQz;L zk(*!|HrPM|hhc@(Lzp6mJaisb71MdxoZAiOVO*StCBGaoQ8u91XpC@OXrL(NXOwfW z^&#ppuf$OL_U0hl0NE#6>6d(EpeD$YE|0jE8>!9FsE>uH$GjRt&8Hm=)@96VG0?wi zpr^33X!RNYb*TJ}G0^We(7zD_{beno@+sONT74ch(7zc2{V@amrY`Aef@^LZqlaeT z zf4phnmlWroH?iDQ@T+pu+qfEW4Y(cGsB+T8UHqO_f)cn|h5bHx0!#2G`rT8gVHocP_4H zaqYzQBd+wT%1v8w`5buXm~zutT))S)3fER#K3q4TE)U?^fa?%0>ow)3t8f+KdIDD! zu0y!2sP9#{3UNJw>lm(-apk5dxbDaGBCdK|J;s-tM&P;~*K%C%;cCX!BNM;ls=@Ug zuAvjkO>1!Nz?Fu6^5S|0*C)8n$SOBEaNULLkGTGcYsw_N2iJ?Z>T&hBw%l|FuFbew za1FYy+;lyzdvV22E;qTZFE=g3wI0_;xGc_c(-pYx!1XAu3S38VC1VV(!&QOnD6ZtG z_>OA#nsJKZW@kj2Cike{*H^|>W{ITfNKt}HMn-*`o*+z({x;QxGu@TGq@hY zbrjd28_*713vs=S>kzI!x#gy-as3|GpKx802YOuZ;W~vdcg|Ek=?a4EN!n>@J6as3Nd_g|NreuL|ATtj|?x?()D@pmzX*r?uM&LE`a>f-RTfl7K!aACZ^@ zWi23d+d=M#yaAH|lL^E^B#ybjR!Sz`4xv|(Wk(>$UEt~MU6^XJJ+9cA26}xLd3v!a z$<>N2t|`guyUwM&NcUkUhj!Ld%>0DMe#Xj`v*BWtGO;O6Nki2v(~^*40t#xzFnxJZF^G zH)Q?@nMbQVrVw>OUJgI=b%7V;;%@PWlsY#a5x&(H{!;^J!gzalFkJ2VdwWu5^!{LbN`EiV2+w@_d4 z7OfUum%s+L!oN_-;r0<>Ee1lZbvZ+dB00<@gXF8e912)!lefX=;@8~0g9-p>O1<89 z0iGLTEB%ssTPFV);%)~FCHPoxPkqN+-u1J{VnBV-G3v0a#^_Go>o{a9$tGx-c_X{v z($1b{ZxACoVEn>;EoF_mzzbA;TS1VbogjoJtA}HF#C)%J6L{MtL%_Sk zF?Q~8n2f9v@^N%hN9iDGrdq{_B)Q*dHzK&#^t?Xsdang)mB(fe15=$91|k%QozU5` z3vYk+;08!zAPl6&Nz_c>Yx0%Lza)&tq{0!nSGfET0QyotF#ynbukPj<0ckUQ)pilj z)#cm094W-iv?|TOvSWni6ivYUir*vqunGO&hkv{tsowe^2Jwagem@b@`b2d)GC0w6 z!i2CfKXlnrNZ`VH^OHaYzu!~QpUBU)vSylkdp0D;-ZET7eSi34PYILnf*`0#m@(mD@7%_5$zvLW7uy14k?<)e6HPw@FHbNYUIoxO!Jmc8x9)vv9h?MN6_C%Vq-V7k1V?|FDSqN6QPo@L4DMiLvKO3Ot zwy`|wOje&>(1vQO1wQss`hI+J6!_*{gBZf}0$=49@$oxVgcBB799!M}(sy|e`=({P z_%ELV#6%XM3~T0k6@~POS6Xkr6$29(2dB@mjY_ekZ({|mm7k&fR^)q&FQC+4j(T_h zbYQ~zTshPDXHTN6JOO{~1Yq!16vBF1J;}Ps5=Nd zVYyr^5mwe4tmGYS!Rm26M3BRiI`=BV`*?|R6xmA1NrEXUgod^qAIWnUvi8iswfG%d zY^7xHVa^o(>M{Jqdwb)xQC{j4FYSe7XUIrr2Q;b8ZU%a))!UrHs%(9c>U%=S*DpK1S*`|@oXE2$C|n!2~C#Sk!6`3v6ctZ+xbocq1~Q*Rp~X`9`Ha_(Jb}HxT-55v?MoAN~|qIOz;% zmVw2oCi4aqhE4Qz`R5k;(^!fBD2IAIjfDO}42Z}=MyC(f8imFjL*lH(@Kh@sOstAf z?bo3e>uh~3jW>|m=tLS-ze!In$p-){)V74`!Q!;sifKrsqB;G9WsS^_vuM5`yRu6Y z$gVDaGW$>|cgRSH& zdMBn25_9Y$%?Tf)&J|#zjMxCKa`9Umz*J7jRO7m4D*xPJe7GMuE1gN;4K*%|sZQ^$ zjh~z@E5CV)(*9Z1_~N28lP9&f$Zy(&CED~BakfpV)R|lSrhf)FkTI=9P^5-=9nk|#1OF=$Ax@C0SMW% zmAt6SubZU&Y6V3=e)SELU%RNB)0bVX?PXWhx~^nb-izU~>-bk-o70qCt+B|i)p^0gfLFKm`*~$ou1%L+t)0lOn`t6#;};`CcEl18A-fWg2_+WU^;w^vU3Sqa z(a$EkXw$VMMv0Z>G)OG6Z^taLRxc3}Yp_>o)g_id)D=^Qa(_Z@eIn#m3~PKyZvExJ zY00ex-*+arPV23g(pyh!3HF~f$SqqbIp=jIyJRkfuwB-kuD-ozM`7NoRMvy`d_&xq zgcIXuY(a46YHWKK^}+%%b)KRkW-K6)kXnAAR{b zeR0=;s`jrxx0|O1RqeOs;o`1mIGhINMpJ-&;4V%SrX431Ye+y>O=#{i+2#+d}!nrgVKdB-|g$hJl@(e*vXOU=_ zkFaCDYt;8};!u^f@E(C%iK?t;IxPJr*)ky0!-1hjp~+*C$n<={x!9S?AuOd5Y7`&c zWn=GW*f>qHtD^P*9xt6h6(}7c{vS#2DlHK`H<~^p4Y@{NnI`I~Y)7gs0?2>7jDCzm z@?QWo2q^J7P1){Jod=Ok5)aC1yV$tF(hRGprW#d75G_sCea|VX(3#55W+{2JCF%W+DayyblfZWBO-wo!}N6f+=rv}uB4y6qdECkrh ziI-~TV(7b@ZGFexMw|7`v{@fFt8q4#bggt1bra^vGSQ{W@xNrhnQ?0A3h|BZxR4A~ zbeoHb!NN{fvLkiqgXGXqs?t>igV5ynsZ5rjeisCt{^i()f@KMGG*hlllcfeSQ9F0tjV_^J72|nn| z5+`mlF@yc?#o$=#Jr{4?366bS${2W)VwBYJU{ad?j&bHWsT~iixKA@cJgHg7%8rIU z3#$jpz%bXs_9&RUmWFoxESPDI;HL$&QEJ664^W6#<8RQb!Uph@)|Z{@Pj`L!>ebHH zm)DTA>A!Y;IsWa>xxV1||K$?1SiI4&%3S3^p99*o^nK6Xr2dgV4?XxT3?Hg=zsu@f-Km5pXfV`Umz ztC`=|5+7jQ96om%IOVmBIJY zR28xqi@yPGqKR@Gm4y$7yRW|j?_$c9< zjQ81|6T43Aj^EF=^*hEsw5{LOKR;uC<(K_4j=^8+L)+S|XH-c3R?3T$?rYo2Ckuov7woa6{%JQmivn`(+h+?<-cM z9#t(H;sW2>N-HoLNZo6t-ve}VK!pBMfm(+4$2ssO_(t7GPW(9fQku|pPF z-I|T5IyD6j163*zg(#mGHcjhQWes+48o+vsteWzUT2zMJTs5|Ae1`>IH8|TZW|Nax zWhEa(*$2m=lPVjNk-OE?t43Lgx|o`J!*>2nrm?`fBS*f;L%`4K;cBiQ** ztm&Zhnb_%jE0SG#Ip}4To4wP@FA8W*q#3D^S^ao`sO^;pm zl#uu;_HGh+SW#uqILCc<&uCOzo1DyYk`^DPjP7WHqs}u_OMc9|B^lm1{a9{8`Ysmd zK#k5oq8Z0F&#~g7XH4!a6u}A_G>td}gI}D!g}9%(ASYiF-RR=CfAyuGZ6qTK-mho0 zHw^AR%ql$tsAoA?c6p6LJ~JlXd*Ax7xx~-@N)Dxrw5#VQdm$718$Ow8^Ta0ukwC}7 z&8OD;Q3xtirkR(_G{K&5;v+){m%@c?lAF6_v3C zX0>Q#Q=b}z_Gef@gd9PQ`7gu^=w-|Kpjcnl9WN8?y`1^D1@EC&<)Z0})x?otCiRAq zW+d;%kJLJ=I?hVPf6}(zpK$=30Pf6XEyQm?T4P03=`}R=^>YSx>>g26MT_$2XTsY1 z06SD6-m0PC$)7_+|}U7evp#F8^$j ze<+*?%zqI3V5ilO_*h)R%m3@Re(fVzxL(PU~yzNGmpn2f|1DkoyO zqrB85}d=};K>YA@G6&f6n1W1bq`)^^ze)yA!jMM>tlBMubaULwGD8smk z>`6AoSqr10>a38-iClb<8{UENsM}kktf5BKC~N5tDJbf|f+M zt%O)glX7$i{J~y(1C80soORVol}Q!N1P@bBhMB&Ki?*BG`81qO*)##Sq4{D}*TmSn z_;H0AI0SuN{nDqz=DVxdoR|97V9ABpQFE9@?U#!0zeg z@FaTRh}zWcvI=7R*RU!EL_}A!k)|T(l0wrld@k|}0pAWZ%c`WxPtEa@&1@j-UU3+p zW;mL6?3r79pQVdT0*<-KbCL?5rtQY8A0WWfAjN}zQ<{06&3^qBxLb+I3LcoSWjK0U zPC>iUtcwK-rX&$CGF${C1JOD^ObRr@C{5k*Fv%s4b)xFAHf|MGP9Y4QS|EkNaf2`@ zI4Gq7CemJFdKbWqX$}($2}bBz9?a)IQ69XpB}REr-%cLX8|1+sW24~k{^CPv2fdw zpC}fd`Nz*97N+0*el-qjdxbD0xSw0=;r!axvo3vD}%l!=voA{4)`apmFI>vr4ulBX_dr^@j5nq z7OWbi;EA95mfnJoHKlaINI%pF?OEOerpvk2_3%Zen-Eaa)Vt&#W zDx@nlo}48D%4{M&i*mUC?O5h#ovy~$Y9a+O)cEZ}jjxg^-d%iCA?D{`wo@$IViT@! zPnlOP+k0^ikC$TEUPV2ri8QME3XefpfdQcVbg!nAb{X^uiu(wBtPy44gP)rma(-q6 z=4TbD@E<)AP~oWzQhRm=RQO@|A<*j4_^kI{mFT_0-v{O=@q<+1#pcYY#fv<&q{#mR zHG+QyC=nmTC;mk!^0au1>WRg>w%y{5K`cmi-&U>EnVN2r@uN9Yc)9AbSFRl`k zb77b+Uw$N@%ZtiU$b+a`pfz^{T00l2zOoyX z`nQ8m$oYvG;%&A%oY*R-qvu(!9TrsW-sx&l8|C-bZk(ic)3RD@b~57oRA;NLZ`KBU zLzGKa1^%YtZyo-Q#NP&Wq_(6OeW@-&2#=4=HM4j}wXK9)J+=H6#~xb=**CNtI|7!@ zRzKOZkm6#*<15yl8<4))jGpKD@Tjl#QK8 zG5!ngMA#L&nJlSr9z;&zrq4k!=?epe_wyFkBP@s#<&(2mo=jYy&m6jCH!-pZk*WKO z7IqDKylHs!Z?wWSn12@16Xj zwP%=^ufyUX7O2`(qCsAX=U}QO!Kll(E<&aQ73z&c)N07C34!<8!>u4@XB#MYKyeaU;@V`If`_G{FFN^a2pYeSc(EGNxb=_XPFB{Rc ztOvq)V0f_O#B>HZ+h762v9}pG5G^@6RtZb$1jivTf;Kk-|N6MkL>V~2HI~AzV24ys zoAgZ&E39Ka{O2dsh|&Y@@vIu}jp2R3G3W#Sn-wf&`JYzn zSQ=CZb+{go92(Oc?M8DR`{~SduE(0gKXJY)nMv@HVA>pZ5L-*{5n#%ibJ_3A>fNbk z3h_+|-vUA3DQzLWJ~K(5v8qrli_0 z1^a9q97^*5pXZ-zhle(`hA+I6gh?unkIuNPqO9};erq(L<^GMN3u~GWKlnFNUHD_0 z(Ry)iKqg_4vadBi5XCEev(p9niAGIpz+(n4ZG`lSn)v6L_4ht#fg4$-Rr2t_NYzGq z4`&j}2Cbn#zz9(FpuN*iu9i44!h8Q0CcZHwPqOXZ(~F z$xm`v0&Sod)(QmGOR1#H@8XaV`{zccDjnNMrfn~wj7qkedI zC!^k&_|r%I$}7S~J+wYyJ;w5x$ACrlus^LC$(9FE01=UZb>y1 zABnwmmPIoY*sKY00Fxj=mKH!No7MSdR;$`dkGls1Zrk42a-!aq%|Fc*@S-IL+`RI0dq+3V=dOUoh z$0w=dle<@d$yM0A#-}jV)DNF?52^*Vs^|6K8RaH=0(MAn5{{_fp+EUR8o5YQHo>q5 z%+?-vw?Htslkjbwi~H_sfxNH)js*@R&I(m|ht0K0ytl=lRjHn}I`l*u8Qko=@GoR$Jd$w$*>+i7`YwR(sJT_-3^@R;BWMi* zvKbKRJF*YtRKF4XS@kX;4cJP(Xe2x3{h|$iQ}fNS%zz%=3hZI>C%o!sivS{Hw!Jy4 zzi#2^+(-f|M^EwGU_3|N=2_3iCZ10&PH^;Vx=h$$BGjpX*Ms--HjHr|{PPN1ke_%x zjkB_j743yjm+D#J$g+BRVPseFOzf)wxl`rtOU_W}7%>cuN3n#UlVP(e+6$OI=}R35i0Wj-?VV$dOHhCC_7B5DynXd)^0r;@_EtD1pskXt>&2Ue-;L04ZFS^+A{Q*JI%3kZmR8_<4tx{0^T0{&Oj|> z=l(z5-UU9Y>T2AckdOoj%pehhMvWR3CE93Eps^YZ6R;Q<>nI>;>t*okLa$H;yUG_DLB+Z6=Rf}_S@pNno*#~bgSSk zih*t6xAl!kUFU9hCOUU&t1Glk@WUWlIJG~1uw?t(?E=%96GfBQ#g7+Xh8Xr;=`;YI z;g1@9T@Pn+(}nvQ#< z)O8{A)2|CxbOmqm39*F9}p)|^}(t0HZ;F6*dIvsk4zik z50nO+d7Jzrr;cFT?pofun*kRu-Rh5)2rg+62QPYK|N6N~Q>+^YNN=K|j_oWfjD_CZ zwHe&>48{E>y%8Y^|emHSXjPt?U$aF+&{EV$+ihO@)etsw;~v*pOWu1&s&$3 zP>t7$^*rYEeYw&>SNUe(udBGTrV4%|%NZ?7;CJiFf3s)hw;pZfHIK{+rS1|)T;8%< z8c+LHakwk|YwBNs_x2p~na{CuGjiP0aUkRQ*8qJ(JwsJ+`#|#fApQgqdE^{epMeg* zYU=FovW`{{tQY_PM|l}L8BvvbvSYlcaAnF}Cfn=@>T>)}pu$;zlwpy0h5KjodxM+b z2OheMUs-$xhw~_wwsOvF^Y#@iS9v#0rEbRd0GD>H3#`mV{LiV^u9lnqq!;b1clySZ#vf-Qa6gO+FlR{eyP}E&-S3JyU}f!YyeFkVf?~B+=dC(XWLHkBBu!z}&h)&M64Vt>{nQ3}lyO7ww#s zQwE-Df%+T)N@0T^?dH}JWv?P@DrU5i|gvuY%dA~xf!8X0gPb>`Z8Q$Z458ilzeB+c+vz9RVK4@hBuG zkCS34*a<|;GK>Tq1%=|M2oYTX?FCGF~g8Qw{2uoHiFUyr4c=`LN2PY5hk!RWy zy_dsOIj_rclqfE7&5veo^2l@blbl^Waxj}~_v#;}RNwMrY!H-uosZbQ=2HjO`w^6{ zro~=ooxGPraKIOl*Sli#y16^<@blpYyDP=k=i1NVp*Wm{>(@WK&tl$`^$U@zA$}HJ zOM4@I?>!=ehiIU7jF#Y+x`gJPGmFmF=7^<9x5wHYaS1IQk~?g<$LV_stwSkG+%$}+ zInynJ@f&f2`Ur<%ODj6iaU8w+dTcnX?~6O0Qn6|$h|JlTUwCmI{{6zk=uF6bZQ?Lr z$1pLG;>V|69?Eb6+9~i>@ytx@_%YFPDTf}&=8K?eL1)2k4jNQ3O zBXK7)HsaXjBd>L0SM}88>*F}q5L>&N<7B>{XTBrP#)WjE3ZW2|<~St>}m=(~%1!!1% zy|&Aw{G`^P(yzyCUoW056pXws0R;$0Sv138mRo6tp8ao~kH^7(5PK|0m$|5^6)@=J zIoF)SGx;63hCaMn(>&01exU zwl3czsYUCGoBeg-cMj9p`c|Xk`eVYuC!>RtdH+YaT2i6tV3_s9Z zSd;m1p+73(WJx`^PHOT;<A zCjOdq*-EF_WjieMD$6Mb)huT*&aFg~cMs_w2D)~ZaMTjfqUI)9>`!faRKjz#kjS8c z_G<(j&a$bGX(}VD30mOjGQ;hg^sk~)(`MouwRG3FWQWzT3->x~CG}Due1Wv}2V2LJwvHF7%rBQGFlvizWP&ds_I!5v^U}nVN$i?H zP>K6S!Vve-R}e102Wv%c3uGcBb!MQpkOjTxloncg+$o)qxI2~fn3DglQrMN=U3BRr zgg+PK7*5{n?YX^bj;WTgKYAtRP;T&EtWMn-+||@!xfcu8yXyZfWD4#9u_;&LG^9xl zO7W{bRZC3MiBMB_FTF)%Hx-Z%j95`RPGxoVL8GQwXS+=xe>j@pZn4igrTSe?1j~Zf zk4dng{&AX10P+%_zwR%B?8@s@mN>qAnSWex_rZ4m+3vl<-JBg=EvJc&sF!>(x=B(? zCkP)Nm5j>9x1m3cfNI%olYBL!i<%}yAC@XsHkHJp&q)4GWY`BBSC|`jrCc!M_nLhZ z-)hsa^KX!PmAP+I=3d)H<3c9fTyehmg7HVifhla<=q znhYb5D{f{9=W_6v!8&F~$6p+*UyK()w|tqo;AvEpgLVFKiM*P@(fQ~8hgS$g?Q&3h zdLR<4%PDRU{?Q+;m5~LP6;nL=E^Fg7$m+Z9I6fn8A)o3{uR(Od#f6@vn|CnUw+zz_ z39bBC^eW!Olqt5i^D(t_bMDfMI;$L`8s#xfv9jNZ;st(lEWF7oy`n)r9MK zSBz^pSWKkp$ZgBp9Q7|I=4WE6s?rUPX3IlIp9_!agO^@(lo_4Y@+^d`J)08Tq1e; z7Uuf%F*BHjuqfbk7SBrfynp0Lz;G5OZs{%2Q^=3qK#Fc}fNqNV*{3m#*ZZs8NM0n6 zDj9!nv=Tp}R^wRwrSMoiVL0jyiwFfV!HsTbRzl|7G=kddvqftwqPs}1SKX`?(ZA~R zKlpUiafyfSN{QU53M4VrF2UMCOg5x)^Y4OeVK!V>^h=1;X*X@_n?GkWNRqkY!F6#v zu$1;9x@;%8eS|EIg-V6C4+Dj{{^;ka@!Vrx?y=!+&+J{vnQW(++?y=K&MVKVYBp*rn zuD(5f;T_dSzQVd&Sk_GORSJ!lDeT2;#3;vu0~R10&+c=1!l8^jVfnrZV1b^)mpUpe z)s0AgX#n3g(R>yt)-XXn8w+KzGKAEMUd*GVwoW*LJaY7HlHk%`&|H0S+Y8BDNVWY> zwLxTj;tZd!JM~jOUv5gRFj-nqPNCXpaVqjZ_rxv`8D@af^qy661SZpP@m z?@`-Fc8H9EL-C&^_wlsXY%-CTjB^qrvcl=`7^&+q>T1=-c<{CVk`I|rSEj&rsWRqv z%c@s3giK4mALa=oXPXdX`~rsSW@Y=g`-`<72=+H~_2 zxCCT(Fujvx$k3nlm1heLToi9_$YAW^c1Y&uSPX~AKt`DF4Bsq@Wp$U!wlB$K%Citj zz&QA$f2HHjMDC3c@pg>rbG*FZh!9}eC9~b=B$^3@k2k9juiIIvPDNU^j-*j`2)S0@rC^>rjBu% zz2opmA3;T|iwd*!)4L$k?EiR!EEeu>`IMCSk^*z?_i@z-ZJh6vv6wP^gij|_uV$8d z$x+!h@`}Yk{&bADprhSgv4;IRYf=IWJDDTfwS_6OL$G0wnOkC`6uKL176EG}9bdu# zH?B6MbfYAO{!B!tZ_8)}u+3|u>;h@!9$>$e1ngVnqDBB4@(8*J350sf z+K*%0;3o4m_zgRC`1_$UJAtNjhIrQ#KyX}HTD;uyiL3&SXo~*=rPW zz~#!OwD&349rVXhS|8nUGCW&`+5YHZ**QTDT3JI2k_qU2`O65Z708`TPokN7Bzn|> zQt1#YMMxbgTQWStX}FFtxwoXW$CSh-2>AGEnW!wpyryJuvUdeVVJ}ye<*c(AirWaf zbcr}m`JRu^Y2$v3citCxFO6tf?s=PE836B<~JB$gAm+eOhLG zLW=P{;CVjcLP|PC_@E85?WE5R!R5unkH+;-Ftwi%8Ezrnie4?f*5;T{5;C9|y2;z)M?E5bs{~U-!QItRWTXNV%v0GhLTXY;n zxJOa^F%=dHxh^^kp8|*a!V{`b1Zmi6E!vO+toheT#L;s9I_5&=)Yd6N5sMUDU>w4VOPmi7YGDA$w*uUU9)nJOs-VubhU@54fF{=Oficz+0S-x zu?E4RZ0y#k;eoOFbX#xdM{86ts3f&UcPF3rdQV*G@swhI&>>Cr!MN!r5P+uPej&}y zy$AMz-eded^+w}0pA-*I-r5U2aFjJnEX9qFAhN()xvZMKyRvm!m34t95=>>*?C!PP*R$#g@ru7?z~cB z&HC%UE10gl+gsA37(1w5iM?AAfz0q?9TQ!qCH-qAc7jm|C^i&^98&!!3WWvypc`La8<;3&3KWiXUlGL3Y{rgOEfA?$MIHfx!sI;g=@OGyPR?&QF1~($`Mi-;`ol0 zKPHFO+$URt&!m`dot({>a@oo)!Cfg8!?SyIa_;iKl2EIkk* zyH1EK-KU9r&2u)v{7V`=&_UE%7F~{C55GDw$Ie{Fm>BWQ^Aqn8DhY{1riF zJFlKNjzQk!$U4)bN;BH_sJ9}7SEb(n=3)hpf^#5g>{mLjcuE$VY?i>bZn8W-u&su8 zOY_{)0&eqy*f4kZ(kN(KJhuN{f6*Bun7F)~UUHbCN09nFG65E92lt5+WeEe3r8}TX zSJS}(Z;qwO$i_6$o;u=IS-T@L%s}j_Yn`#u7r#|>+Oc@_k$n;37LjN3>w_1}M{!{o zjGH<(9~J;!;QmV%UE>en_NhdCo2w)HW%YDxttd&WxD?-xNd*dLNUS`-iG0*CbK#HU zDjl@dWC$9o#!!-f(C6cntNGHh+b;BlKZnT{bLj>HAv3E@5Ea1A<&}tR18gu*$BL4i z`d}VAH)Q60j*Ev*`~-3-OMZT_-oSdMT(ZP3iWjonoCPL$zJOr9=<)$RsO%+zwdwux zBoX8Wvw;xqWVpqExnO4@6A2ppLbU{UqfQ?d4`pps$7BS7>r7@SxWmZlBCwqRO0934 z;3GufT~z`S9EFvC=loOMS%SF^^H9qX*JLl@b&A#13!1b^!{tVB7$pCfZrUcYd( zwlN`(r_`4Zn-mP#KnjH7Z8jNo&Hm_*1svv~g|M&sG@$}u8)r-inbLp$oKs>SYR@<< zTM^t}AKbkn_^*YT^}*MiU?-Pf7y;~MuBD6_{W1cZ@*U>Ed+6$n2~yV$5O#410($rz zt%w_nz7^p^gCdpGXDgBd=6`qCisn+$ir_H2-l$M6n7^V~^|a*i0$qHoSgGqZ)h*99 zcNU0ik(yK7;4W}twz+^f-Rh#QJewsC;hpfsx%nMKc%GY&Ho8kna=e{ki=~2zq?k8^Kh5B>ATfmB@*|F(1A1`Ih^ndV-^d|``y`DDE|Hnq`f2R8GMz~xUs_avUcG;*+*oFzV8e#{ z1Vcy1Uk}#H3+!Uj_~Z9a02JC5o@K5-6K(ZicWe==76EP{n!G&X$WLyx^>}{tm)L2B z3tNM`1nE>rVEFf2a6*R%Wzf$qy_R@JM*;eIrb>_x4)I=uFPx(z%Jr5xawsEwx=aCp zX}-If*-DK31ht4xfJ5XEps-#CDOao6=0pa`w^L}Y$IB7pn&Cwd_tZtjFugB>xXr$i z(_?c&giVz z(!DZpnFH2M2Hk7S^HGKZ+j?V8Zbe{etw4)^WT~8B3QjW=oJtolS@#Jz=@M5z%`8_p z5w^AZs=xjy#k{hz-B(?eOv@kr;}r9}qM&2l)HqYC2$kR z3tmuSu21-Zaw0H^ASSjlQ$F1^KC4itzYIERtef^&q=_T(lVjEB2GQafj^-0G@;(l2 zw-j%ZOOl@XH0asyrpA5+WdOn>w|si#4@ zo%FBr5$fUidq-fY$7_q;hHKwHRR8>SKNB1smEo0$qn|s=q+_+&mc?)yh3C}ZJ=`+z z7;lg%Z}ma(!P&}8$HXvJ7Np9&0b$~-lKCp0m+Oy|u%29^^3zSjS+uaBf`$r&?$@HW zvUnjDueO4Qag@M@Js+Mt`XlX_$T^(G0%<5JJgDfqKSS%zDv{wtTCdRiS1+2fv*byu zwR(gU!QMs+Az=$TRozw<9hdFG0pnqMh+e^7s&%UXscro8VzROE=Fi>R8r?u9#tcu~ z<~_AoK3UYdL3i$~Zu25Y!^uEHQ!>L+@+1tki2lX&D-W4`8x4a+Ro~!P`Q(=u!0dk4(32uF3*-ZkM<2W}@6_PZsNn z`J?k?4HbMWbT|qNrE%qGxtp+17E{Qva3b(?=N7tP!O(0fVrId){%B0rC#q1`$H+CPr+Jr~E=6pI7l@3_h zABS&Ww%<{_;bDrEvb`)uxs36~^tVM?#dEV!kl`=_%b~IyX=Uoxj^IPExn3jQdH5}5 zEQ*)r-uySapPUJ6KS;WNq%Nyq1~eSctXXX<8E`L7SZlipi=cbb3Y|= z@jz?2$xh)Wm7Wi0A8owydSF~DZy0Z0_oe1?+%L2t_;ob3jUie_wZ31Q6IUt zWBpMHVJeopCga%TFE>-HL39XitC0`U;f1|S` z+nn>OQ6eE1oe+O9hf%I{`S6qbWHPSP!TjD@h1 zf}nzsE^>&P8PgLCNAyQ%)AznJlmnFZe6Aj)(8q`X3OE-${$vr^od(HdkqzFj7kgBJ z8Zi~BkuH;h0K~nxw)yX=Zq{V;2$CRSVLP;9IkKrZCuCl@JX!HhrBLKmaX9yARpz+4 zwau?n4hn28e+ zqPCRRGR49p1xygovr_TsHT0q^uFb^swyFIY9mz2!Cn{%NNM@%zTbNw^?P&ED(J39| zb!VhU{?G?K8EvPu8>bKI5j%?tMm?{ zvb(qoGOO6S&6!1E0sprviLzK(Gkbhekq}RwvN2HQN}-bvVMin zlm>?(9Dd&Ty!KMv%5H70)RJN8c^ySdjzUb#>?SkQ0@ULF5lYN2dLd9^{(zJ295)~# zc0VKb2r>I;2{9qcgb+(ijjK;bOpp>{sg@AKa<|uVSo>AC4022s-XA@MaasVh6j%?W zmWC`5W;PKCz(T&oGSL~7^iKPdb9mP&ko6KP)tfFtw~}noV)LE<2AHrOqm#y=`&P3THWwX~yN>Db* z^B}VCIs~v4m1a>LdJvqY-hQ*kXIHL2`gPd@<3G1tGKG z9Ij`U<~lR-QG*8CV;|y-;lOfB^O3nAZ1xN#$FJj{BI3{B7J_#W`wJ;S6X+?}DUy+` z$C5&G5zquP5JIGr5WTMsnU_wHvjEZiY9E?5w0jKkdQN2HAQ7+AAHS1BpFU8+o&$d9 zFJTw-DW`4IHSA_RZnu)uPrj~A6egSKTzo=*v}6f-5#&?XY7CCKAz=?<(;j?`Jvbs@ zC0jDT$my`dLQuEx+F=}s;d!zkNEST$K&RWAUYXn;GC|)+L|^Z1VxpB=*gc;CSb9Mw zU+D#rr6t6OR^Lk8Q}mX1WFhJB9JE0=1)NfmC8M{&cE!*e?fD$FQ%%C^m)=rnL}F`2 zXy&Pje~UYJYvAoIRtY8gDVRhjnR zi@u+s3SUjeA31e>9p}S%@_VvQQEkQ_AxeE6c*N0RqS`FIUg)c+GXK6)=!hJyP^`M- zS2m&qc#N39cACCU-}*6u+Mcr|rY)|B$}-gJM6Za-GSurln^(?Z-MA9Lse*(%_}0F} zx+akd^rg_p+~S4NF7&vLR)l+=E}zn$7en&&g{N3Fmup`%!sOxwN>hIzOe>HFy{d@0 z<9LoWOyaZZNDxc+x{~j6=I3CVi4I|N9M%AX$}UH@S*&paMI&!?^%IBw*}fLi0J%V0 z@Om^<%DM+pynX+v6E7n$4RIf;!7LDk z_RI5%J8#addoG-_b{KDxTcWbVP96OXW+Sy7jE};UlHyiNY5Bj~#8t*s_=or){%nLf z;csB%45y)r)oe~eRWN7m(B4hH{${et2ANCL0r?tU^UbU!MX6x)m`tRr25zc*Z?PJeW!FP!U_jp zMYTD_!ABR5QZrYaSGna6nK#}utkc7>!fBD)9Y2!*tFDM|ZU& zF|~1k>RI#|f|C|9K`%Dvkq|12$S8az3xgTo?kjdF(7p^shlY`6G2APD|O{l=H<^e?` zKF#${kTELbE-BUp_eWR20Tj>6_D6mO8npC17JI=RiPeysy{+b|!?GINokpn!>??p9 zD~trUgG{sZ7CsC3yq1cN&a`oKx~?o7Xq1D%E*}h=fLnaR_o!7iv+a15DJv3i6E+2^ zbf^qD`V6m~#(i0)Uuh&E|4pYje-$x3(LHZd;J0I5!_HpX@l!$I8S(uN+=rK4T<%l^@=3|g$J}!g#=$Y+a zvS3+GfAlhdgL@C29o>xasPv`O?o0vFJFin#Lm=AxFl@zFk68Vel_7CNK~SdGtF zcy4@DYW%Ord!=IGHxv}LG332pK9Qb8rDaSd_&ieHtD~_P0+mPEf5omK8GqfUr0*c0 z@I&qQGkXXWMVDYK`(Rn)ljQIbw$C3O!f%wK`CSyh7fEnk7c(U{GLg4s$_Ci5KR=)w zHdbi&zwA_VUxoBjYMF+qmwb0Tp<90~ucIQ_D`1!_N$ zUj7#`z|>FBtFBT|fCT{XWN%Y*P0?`IETVm7G z9HnDgeR;q985mVC5a>~`jzyt}Qh3JLgHK*e;>(P?P} z8fdIYO_lJxj~$s;t>|3w+tHKPk^yG@DbN6rc3ud{r}iX>g(PXG4@$pH08aYTZ+m6! zUxt{m6x?q4DGL5Z9xMgdu!H9TXtz&$ZJ|1Nd#=-pN59CPu5DehmAl9fDKgB#a=9A? z|H&QWKN=Ex+RP{KRU_Vak5h%H z^Bl}KmQw z%&vx$83FSD?FMo|X{L2sVnO-wu`5yfx zhT9q8lR}Bc;b+a}5&J|*Khs?_qCLWUXX1*v*iGlu{W*NH_-_^<(wzzr-I+DWCvOFg z@Y@k^=44WXPydKoX6gpQ#1s>}a;#MdRTCZSdYH|T!_2+0^XWr-9;6`YZ=#O!onm1Y^@DS-+RZCEkE0I2JmUK6O6{T{lTxZSDVJq9dL;<$%?Q#sj{RKD$UlLZ`7&v#XyFs}$7} zo_?aI1FwA2v3etpc{{zjF8WuiS67aspk*Tf;~@$G-q?dfd>s`Zrc1xc^*n6Y;^>HK zWwx5%zCP5~kri?^7J#|`m#hHjQKsJW&2N@TnwHR0VbVgMT^chnpUq{%AJ@wn5z|Nl zE9&)xaMJ;a74>>TxPy7Nq9vKpS?Aa@!j=tZv@DYnDJ{z+Gt``HOs8a^5DfW`8G04Z=Jx;b1)&_F7BGyFW zZpFGRx&5oU#=irtgQkSi^dVD6O-nl7qTnVdZD4ToGAKclX-ZEMbAy_K57;)U3_M2j zhOdq^O6^B;&Y^&de~y=9>YrochpG8jHt#Si^NX|%>PWYbvf`nnyigAMDtKDi?M{P; zCM(T9h0;i7lR)u#TqUH0V6AR{MdOm~m#%Fim!O{q=J(9Ma%Q>qPBC0mn4 zH8-C_^;*!dXp=&4nPqG1cQ~(nEl6sio5_xe!PEw(QW+@S`H<*d#}VrNWBe zBVeaQhk3%c3COq#dh2TkN^pr%WA}pj!`*sH-=8PT#log1&Gy<7TicT{dj(e50+F-T z1=@2!Z+eyhJrcG8Nd?6>;6WILI~$FoU$2=X&tvZq;~_i5(oBYs@@{Btkb zx|8zx(RsA}AIaw@oS7sa|3mqFM1m;v>}k<2Ko)ll5&aWVpvqkEDwFsDQu>+m$n)Qk z(wF}9qf6S!#wOMi=89#xR-`UAQAZXT+RdBh7gbwCo$!&-{i^BG0Wprd^h3z@cWa4t1S zi$a1lN@A>W6Q3Wo!X;Xv)Z?l!Bou3Sh973jNTj%0_y}|zNrwiI*)v;f@Ums+*mZRR{z!`BN`>b1)OY2) z@;k1yWwPzhsYD9mr|U{RmFAD1*DHkc9Ie-BTmD)Ttw#=(`0r9wyE&NmSV^H$^Z8GJ77_9_hlt<`nv7Gum8Y7<75su+67y zp<&I`2gfN@TL?>RkIUcN$S9t&Q#4r4?tEe)6+3MMSpM+)u#>6X(GuNB18g3Fm)I)ZLMGClAlWONRd&^-8xTdhqk5o1_+b-12RLBg+Md>& zAcy46C@!Db(*sph!ldt_>2E9ITdZ!uWSC}-Ung1u}p59ClP-Nqbv9a_Fr z_r}mF!HNFp(>-s#C~rKgVSn^NUc?&|;&mC#!~c?19ON8p74KjD|HCT2v&mb<1_5ZN zEZ=jtSX1N;@xia_5YMWVA#&xb@T{&E*d!L-;?!#I?^iEx_q(6m%CC*5(~htZff%!{3v0oyNl32@1)Ju?I<1PmF`9v z9_e?ynC^KN~uT@w7#pi8}9=Y-V_y|AB zSz)OR;7cH6AcQaJ;1qmZp5m{&1l|ZH^GVWRy%eIS7no}hW`TL_37t$0iipc%1kP!E zkqC+*96fW2R>vqX@XdIHh5Q8UC$<0JAT^uE#|amQ04RK>cRK#)jg3$hn<(n+FyH1! z@p^ysD`d6^&?CD(b8ByGu$d-o%MWLAq0Jt8IIrepd(K-jF5VzRFyBTy5xjDLQ^(-q z_tjCbzwR2cw`b9Sw=Bn=w*(3b&r9x2tvT~6f=P9rxO9-V4&2xpw?|N3%~;!hqAxPV zCY`?E#$4B-SWD6`L3+<~#ra|T;)(SO{C97Hm-RojtaI`j9~QOseA&jCkXyAvSq)#! zxMa6wip@6GtRD?$8f6^|i=I;ou=st{@TOu1tPq^tW+B*Hs~48A3S6NKD0NL-Iiz@g z(O=x-9rpNl{TIu**?hi0{G$JQtEQ{)zphT+U|$xM-i6G%AMQa}K<*F(>%|)ckJ)WQ zluz6PHtf=5flKopJYz*Rj7w_!RJZo&>scSBuLWLTuRiZ3p#y|e_~(A@>so9cz^A8Z zy6x)@dDGL^Gb6y!EPClp&QrCD=P&J8C)?}aV+B>R6N<@1IxgVSF-H z8Fl2f^x5qq0P@OyUdnReJ1SIaqVW%?dJ7^{?<6Za1J10=+3am3bGrOiMn|SYz(4?Cc6_23 zAoW`MA0moGbuhW~UwO9A(ih-^2>$UeFGAYruupzhs5=W{e|pUWOU6Gy=ReFw)Dg&@ z4w;+s6C?(67X+71) zmA3OHsb_ywnA`f*UVdcl(#y5`6@^_3 zK`6E{uJz=(R;{IUVJb{Uzcyc9?~O>$i%Ri`UbA}$=a5X4Y=syVd(5A3eO0`K{~yaa zG&DR4edEun6Bm1KIc*)8C~{dkRco+RL;sHHB;4fT3C^Flbe3r?`bDgwE$+n~Or`k@ z!U?%X@lHj59quaP&h&A`GsT6;3lROD(b=fP)x;|4cZKo&XpdkD8NdUaLXoB%*S&`~ zA#>mf_Od0lW);Mu50U679TijV!HM2WiY3ZC_-|3JAjRz3JJbX9N=%^G9S=x_NJ9Ct za9?F6{a%KWhcK>DYA&fA5pR%eW^Kz`a-v!beMQ;}*4de_FsYy@ud^qzWw-&5eg{O5 zuR9C(GkqEv^^D|KGkC4(c&{dV)<$+Ce2`i21VG3)JT4d`Tvk7keC~Id2+>`Osn|*I z&MJLvH{b|)y(Ej!(d1C}!nrKVX)D@%pxN(_-b~J-7I7o~C7v(}b1utiZa)cS%M04X zS9o-eBrE*&#u1hAB>^i)h%XK#=B#F4a`~%8-FT%;s1?-+Zjqr-yPXQ>a>6j*0pA#M zFB8)~9wC4PQ_hYwAH11iH|+`HouKxx45JL!xerx8(S3IQp}9M zX89t<$MGT{X;Nw?^5L&rDZd(}Dr8Har`dRe))ECBF!{YG)q*B(vu-qg?LIQCB!o!E z6XSp9cM2f_hF-l9hz+mab8Wr7OeD7d$=1tK;V(`bzw}qzJm_<#6$rdPmZzEt@{(!p z-PqKpr7?whud&fRjWvN^7(}nezUVcU!1Na`WsY!(qliC|xGW}hifkjh`l96Iugy*} z&6}hj<`=h1HgqYU;iuCTQ`Ic<0#{ocEZwiK^Hv_ofppkkmjlMoy~VfV%Bkhf+sZbF z){L!c<1-=ZZIb8NsM*968pjiT2;OOfqQ50CZJmy0Db{UO zQ-HJaI#yWZe;KZg59klzZK74&%XZpa;n%(Lje@af%l(wltON_RE1J44u6(QQf?2#l zm$yfpv=Aw_Xu=R2*YdZU&0GI?Qx1k`s;Fq%p+=>*Aye}$K?2uOe`_?vXC{4%MW^$G zMrka1g*>QEu0+E{A2+zeLxio-D|shFX^mdxJ(;KS9*jHXOrnoPM>~jgw1cD$wU$Id zh-Z}8JV{e=o4>ADuG^+}y!WaSHd>eC71Zm$n?3U8@b;&!>6(V(M=cpkX&|5&@_- zU#u*GzfKqzP|p$oOJpbJCtW)^T+x`(8a7A`pE&hb-u|$8W((~jYi1X$(rm^VidxTx zubZR-FyaQ#klnB7?vT|JjG5Q5ONaBlP5>x+EuXPz*AgpArNWE&2@5<;SmRrGCS6(M zdYgW?u*Q9tcjY%_9<|?Z9)eV`=x)K=Sx}knZ?QADDB{90rbmi-={izsuTo<0^V|ef zw++InKD zpZp+3klFb9yWi1`;{kv9R#BR4^GCl6NO~d|f8DdpRPWh0Hx}Y9Mi;`olaFQ*KHUk0 zdSQ=JAx_A+p%m~d*6mS4#CA#Zw*4~{vQCEd6#nM#EfV$S{;R-@SNnY*rS|z+yPCmy zT;6%f1_XG_r#?!pnNmol&`GNNrQg|p+qtncql6NWlhk4zGpI>nIa%Z(uSf!054r`& z1xv_=!WvPQ$&A2(nPPB%UD@9S8|X{((h{;JH0ICcg?KO2D;In5Vn%-ny#!H0X*>+H zBt*Y~3h1lO#I!7XbzNe%a)|q#NPdn?bYG6F6q0+BQXX*+w_Tgv9_>}}+%P>z zR{X_VrSF-L>_yJ>%%YjNwe|USBma5)ZwZE>jV||IeBt1!^L(w-uG)`TV6Pvy9-|zg z^|IR!!7wBSIk~1+UvSz&OXe?H7c{+KOBtE?g|wuiB@OMG^z=%&1xw?>6WBGWGMDa2 zu1OK}W8!^Ir8#52N6ATRQvXPKKMh)6*JjyN=opJitg6gFcU1zxg8g(kxla;m{~ppp z=BxulIT~yiCB=0g;L~jFlwbfdBAc)fz0F7YWj$&hA2M(Mv_Cy1{Ydf<(%1HDr8=2bL}2U0PV^6z3_ncIC1-`$eN%H6()@^8(i4| z6bSkEi+6iPtWpi3-E`kqn&13}ba4%uQ}n;=d-HgM#S+y)jEtzOm+*HJf3x_z z<`Zjtr|@?j&nHu-FJ(|_+TiqzOy7{9zF}Fu;n=Q@9L_(V@3>Lf$7hcoK70(nayW;E zkG1*-k$vJRD@)w(;q)^b;eQOz0l`8vh;Zy6E>O@*tq^A%f8tcfT^NXLh&^+#Ozm-M z9X<;uWauoYqo#c8n^nA5R3P8~g~Ea0ZYi=9N223mgbu>X=&Vd)57!6xIl%%VFvY_A zi(g)R(|G^*Q<@K@MVbd;3uH3?wu)Yi0qpr^XF`%GnG}iKFR5GPinQ{=ZaDPvf|n3 zwECmVgkB=3{Y^P2UpcpCUwkp~Ae%adI8!Dx8-HYXN?lWHFtY$_!9Sb_VeI1CGdM4^ zf@nI2X|;H8G;TRM@@@X7f}Qojt$e*xA0*`PzJ(chImev33c5BnZ-*Ir_s`=C z(<{ks;&s|Ckw7>@J#dzt3*yury_vyuNe zy=qqmBcAeo@J<`BCu9y0`qwjUwwm{qp6b2%(?393Gp2$PohRzp=B*L=lz+}2_MuE3 zi+-J&t*Rt)-IJ?-C&X<1Zy!jh_8r8Vx&;Nz1T@e;^s0gnNPq8%1@DE;k;nVp;5{%3 z((TrW)GGht;W{>9JX~L44qvQb$QXqd5MSL+u-=)T>olvK=rCs+ww@Sg4DC3Bje7FH z#u>qSIa#LXV#k3G<1=XM(wHlqZw(4D&qx;WgSb*Ww+5AUwDGE(@_W4?Q}^_ak29G# zOgRIZ(n&kPdz|t*2Y*$8H2mL2LsTu7ZYcqJ4qu@z%Zo2dTYO^m+q74`BMs_*bw+Z+ z%Ima}YeN^W;G%<%qinuOcef_(}{7^4~XEA!A8~H&XiRmOs#6Nl;V_pk2oH()z)NGgbUF0A?m|u=gewrqtWS(I4uwHKO?e&u(-ApCNPJzu)e=m6Jv^kMbVg zIzG|-eu6-Q{1((vxiC!~2PFLlJjRRhuDm8LmpcFN>o>q!6*t^Z257{z3Ul>sqL^61 zZy(m$%E|qK@%!4v-y&qX*du7b5rRD*eC5Ogr+1=W8Pkv&j^Y!n>?zy}wTj=o2OP0%cG(P+nDdL zMa1POKbX2Z#xu9hnz{+Lb1)@rUJ2#W#;>dWCyWoig)<6{2A& zvxu0C&z`(aRMy#XWjSN2{l3DL<*Zlj_Z6-zXT55_!@R%MZnuhfoW|e5j~~&UvJRtt zHj-GX42n8;-M8y z!Rqav+2T5EOJ&ITFMl7PoO~mS46XpW(AFu!9f&N}nI33v&rrE_RDQOZ!VM^Tb$MNC za{}=>SJ)aEW^_{+#kpcE;=xHBmcTX~OETbkw! z6W1?k#amG$5hbi%X7n$rCvUDuBxi$6og5|32o94h`7u%*yP5@!!@*UqCXH*p!GH6P zOdKe$kFBa96RKyCwQNMceUrwUChIFel-HaQ6{cw$(w;>*?O}2`8nMQW)=@I#s?;mC zN@QPHygw6b{5nr&^%ZJIHqy~tT;q_~egdEo!F|7V>)s&cBXgT@_rEpPAQ_zShHY<^ z9SCkn@gwU=YmnJ@v*r{xFD`V`j+5F=&c9N81QsN-*RrNwKx;&>Al0_iQR+NT=$7)f z@tX;eTHLne+&NNsC!8liK>8K_*9<8vsa|1(m(m-kl$`1m##>#OiwA}c6}`fQ*`6+c zpAIhLaQ{03Q=99$dA)NH#W(Gu$ZILX+H93EqORZoK0R_vny)4`4tbapyCto)1QL>I zU6g4x4l!F6%0;(R(N1O^w8*vpDsYQaJ5@qGL~o>j_lmc%a)>OPU$qfektFlnKU6zv zrsK+17i!50EHxP51d>ALjbd=Hw4a8{zrpJK#&HD*QrEX==p$co^O959`7OxSq@9lM z7AugTBBj4edD9Vbn#Zs2NR8ljTAOmdzZXS{*mC)_8^y_VH9AnpxhdP6`sd+DzYC>9 z+*NAdqPfx??$?js3;wg~?~9dX#(t!A5Zgjq#YjZ+bEpdJRz@VgNEMd*X87HLB?v7N zKHt&36VW{oxXkXP;+3+K{B=z-wHHcAce@+gf7Q);YxGa+Ft0T_m5j`|FV-+!iUc$v z_I(LhQnYi@s(ML83E01KeNSG|^16~2k@Xn@upIDH79phXDW6aemQ1`=^|8&*}w3?ce96WDB1y zH%yvn z6WR1nc7j=N3B(!&e$|hHE-ArS&b3D9lhec4AxRaJiD;8keRXp3A7ig49j!!>=m>C7 zETcGj1y2;4mR1}MNn%d5_(Qa7mUB|CV#Nn}H!u0_-ahYEX`iC5Zt;hy$H}y-q9Ex} zc~i2TTLatyC`7wD!{9r~jXrM~W%OWy=ujoyNP3D>mKCW?^OZQ2T-4Q*uX*>N*eXF| z7J(io2(;r=W;^&QEBhO1S5V~4z<8ZfizZK>1D-kKZNZXKl&MTKirYsTl|*6UkA@cG z^rE;6%r-M%Aug8cmIh*_X|YnmCGwEvlxDdz(wtTINcA_RjeiyQFz=gocPUe4U5lMk!uX=)5}q6(_?58q(d;wA7Z6Is30W z@n;f{07IH5yxY+lZ8_JKQ!3UVpXQZU4}tcj-sacSQm#rX+Sz_y7yEDzM%q?JRS(Hv z&YIMouwsJ0o~_a#i%zOAEq9h?duHXgz@p-4-@FvzA|#lV3{N(;zcuKK@bj`;yx3%S zZ_g5ajmgk7`-ZDY_Ict{G?*2_yl&_{65vj(m8;B%2lPY@Ac}$Kx1@N2QXYkIRf`b$6oFA@<){b%-c@=M%T&2lICC~dDoyJzdgV@VI`*6Sqlgvi z9wpXMFq5fK`vCt_C4kJKNY_bA#-X3Lw_Nq}cJTFB%DnY%Fq3!^*MdtIWt)eDyxovF zZ~X;L^VTCz`~#Vu=5HH+@^6s*OVN)M{jxtuJEDKHC7KFB6XxeS>phXdM(fXEY{zMc z3{D(aWH4X+IYeIX#_;GsdP;b#a|tGdqtLffJGzC$B}!W@_#Tc9OT=_Rk>(p0?}n>l zzx}ItHzXc*7YltVY{0+4C>T^?ncn)6A4(A>2I;W5D92S>fM$0?1xdqVl^;nGh%4ogOFbga7XR zv>VTNCxq63zEeSSLIT;S3wiJNa#59ZtcKe-5s&WXq)$L5?e~;1FtN8lS*aOO8y=!SEZ`5PcZnC(kXj*7yn-{H5OaH~5yn zC;9saf4!zp_3EgZ|)@u+zEIy)8D91+h-*SE^L>N-LrRb5=C zd&;t33B$z&j-BV?@MNNr4VcIORC)vfZr4|8pQ#odg(ls$W6~sOH_HnF8IpX{-)Msk3lLT{d$#2Z4PcUYj%9jH3H2nFWfT6<7S071=jVQJlYS9^zp! zz3Oy^IG1NOw`U3iTQ`kVE0e7P>Fy7i;Flgr1Z+aY>Dh-Lp;W3%5$wT@(<5Eu{dadE zgaSK`o3{q?IzQTW?HXj!AoAwLd*baE@KS%B{#AbECw`q#=v}!Usky0*gtLxj_$04! z*C4$n&~4-44e|ERO0DHt#y5j7Fy?FRSXwZt^Rn^sw=_^uCAy7(`5sPLNOiY-KX(Y= zp>M}^lk;9T_#$jT<$O|xsP$uWsMi*R+v}e z5?Et9f0gL0wZFl|8aXv(q^4|_l#kk5sBdp$Wz~$0bPfMVJ(qp{MyK89^nDQld1{e6 z&~a}vwYL@Y78D1}b3j#~ytF7+?u%HM%SA{L?9w!FZl)1GY&eeUUHWH05AA3P!H*b~ zSD1h;$fEv{&47R=$13~9%JeJr>+AbW>J0WL|Hu(9L)eGwPJ@Cr%(M0AL_5Z$>pqfTKgKJ^F%H&Rj`K6aBzo zmIB*T02?dhc&876AS%p1MM_bQ&x9O&YiRI?S$RV1+!2~>))-X>5MJhNn+;!X3RIed zzM^W&iyQ8>>pr^@a`v@9r}$X?tLYH+meDBzlvljDUAB|}Dp7H@uRVHlp#m_w1neVQ zqyqod^rcVkUnO#XXO8y2C-)fx^0d}{`BI-!K-)BYaxL;So?t_r{ z(Q)V*AG>dt=%WAo0E;sX$~e2|0IMi6&FOSaU}KBUZl(D@BB!#9_n}jpSi{|YR%Oh` z9LwmBJr?FUP+?AmGwgwUJI}X47knHTIR3xXw+or){(XBDa_{5xZOnhEZ{KHS`}eK% zWA-iQztK0aKzW~eQ%tdNc4F`AIY*{(nkj)QKE#v?a#gbKl{Ud^Tnv45GOJ6-tOIvG z*_$D%Ff04aDLl!`Rcm}N&ROHz%illwn_jWTS9IkX-*@@m%Xg5!)8?W}b2WN1pIPJk z3*R?gv&Q#l(w0`P@y(|E1yGKc@_pe|@Xh=U=XVC*f8<;AW>B0NJO6+v?o#Vy7&RBQw0PhX&6N znJ?a;CuPYOI4Ona65=xTd?ept9DLS{bxP7i>7*A6W$o99)tY5yoE}iymm@RXgsz;x zq12e{BJ}#~WlOVs5+e~(qh_SN^gJFlV8jV5+?B}sDg}9odR|#Y(az!}X-NAAx`>DT zq+1S}9f8#Kq7nm-NgzkFw$q}v$oib(aAx?A*UVo)AJ(a7oCLp+U*T}wtIm?GaO4Q* zP=wj(>l|vzHjjq)N53p6GQl={aLKdslO-jF$-!W@xXq~a*A4ox^<B6Rl&1eXd+RFfXr(~0eh+H(8rzVdF4-i$alpRJt5e@Z^t#VT2Tv-4Co>1q2dUi9iw(-_yMQ2`uOkIB2ZT?&WWYF~9l7 zJlMWrT#Dc*MQOx;Lqa;k_#NC&634ryF2OOn_&LmKzy4$5%~So+&W|}Ur+(y#5rJ43 z!Y%XAR;(Us7JAasv9~|TEtNzE?KX|)$t;09JLRW0OV!u*o+Y^Dm!4vls(Tit-(~L0UKd~fg=|?CB%TftYJgrj0VIC+8|S@=zcovhuy2uIBEVf>#h!K_ClCtz zIkK-rV)ecwx9uB{+qL?>_sWAQttDw=WaiVc-g9F0MM(dA+t3gj;aRgFnYz5d`5kgu z-@~c68~ZhxtEV4?SK9h*WNI%6L$m?+dBLWTJ1g5{x8TqtxPfb$G1X(`g1hPE2k{V3 zLy~oaFzHL%d^LmJrEMK2k}KO@8Eed_oMhmtrA^MIN63!Vq`-@`S{UgXTsyGy$Ml67 zr8dWWDIIln>=h8&)KtN{aknj+BG9Kpyzk4guNf8G6o33-)M=4%mYRm&w8mq%6O|UM zwfs!P@9|g}vgA!MOd0S%T$XKKe|Q*HW1G#4&yMsF%=Q2}+$wWGY?sMQna|xfR2!j* z3*!PYI}lQK%VGIk5v!Z2k!^`;D@1a^!fdmCuo&275eHg`(Alz&5MytN5qci)nG$$= zd&r!8Blir2M-zR>#K;C8VMaeDCdf6{U|^XR9?}}@qB?veV)h`;mL6{3z=SyI7Lgwj zcKZb7>EBppD=mO^FrMiQIBC0d6LdHx~xFW3JWj}w8mIBAR>~ChXOU% za6ra_`;J2H02TWZ+k{*L)hO@Tfr0P|PI;G^(;>!F5469?HpdvFW-!9Xj*Gm#JQz6W zIGZVla14kjw!mC4PCfl*SD%}Ni@Y}lE~u4=@rXZ493Z4QjR`^Xx)>$n==(b2go?)0 zg9~DXR`nK8Idqmk>Ig8*EC8Uo1`*I?O!WoHx_4{cyp%z`))nJ^uRLH@WxN!hJc$$a z!eqvKI})8JD-gw~MR`XE!?lZ6j%`kgbPcKfWPe$>6l4G+%2PidJ*^4m0I@T-b*pvqhy&3Y^%# zfL1iZr1ncsoW1g0$+>&`l|HVgmjbWVzV|p4rxSlWd7a-{cBOW->?-?pt$fW-G6alw z`M#-0c6#eiXL|TVOaQoAPZJp>6QOZ59Lza!$Q<2=$Sl?v;ME5mAB57wa%$9eQQ;Oq z^+P(Jk@OA5g6%<`UL8nB$#>E61Qy?7)?G1D*{6ONBMJ+N>zUj9(T5ohV&(i(E*6&( zCRvq9RJH7q+j!CM_C;$M;9^J8lh-Z-BW4iVS#%Bk|Nm`H*sA-O2JXy;NAAeM#^w-H zgQlQ;;CGk&emsQ$Q8%>e4``w6zJ)J%&e1pccO)~)`?+|^YTV6pNJ*a8Q@J_?b*{=};UklLHN`^tRpHqG z0n8wQ@$rtvi3s78oh1tqyzhxugc}d^vN?ZunbqsY9W;4}6A;&ECg#?k{adJ;Mn^YZ zkKThCbpA0}D4(WVqo3zaLUuG^oA?cVr-7W%79`yU?Xq1CwMMJGtY#ctmrj4aXEeuq zNwb&TG0una$$^gZmtFehs_^k9EZ8pDIg*t6iHb)VPlzC1`zAExbv>Vam8!e*mlSPHV3uSmt4R@vEYlcR;{Agcw zjevUCXwG>AL5M^U9ytC{qU_l4PzTM zzphPW+NGej61aCadKI6JD~pQBInOawYIlPKoxf5t^s+z~(+sRjFD98)7ChLhpUepA z1^|kzN2|WqB!a@xcuRCD1u#{gE?@j>4SvsliANBAt+roJ+OM_tYm{lLh^jow`j9>QC96{yI^kkoXn;=&MYF zhsP|HcBH(e7dFGp5mQAOrA3(o*;LBg1lF{9*?C9!we)g9dkqTD@9El6TGy`kusbXM z=%Kip)8h?UI#f9jLMUSLLwwuRM^)UR<#05@OWaaJc@aWUcClN-r_!GhqhL*^|OC{~5ijed__T75kmP0dD}um&8~rhrMM ze>SL`-7Q{dIqeKPM+VxepE5LXpiEJVs!a+L)~bqq@@kF+lvWLDAqlM-deT1arWX6O zKl#*^e9EE=^42`KMwUBYSXlxNlj^D^z>#}NNd0(&Xxy1k&XK(&kFG1@)x9KE_kfyc z3p0Z(mz~E+q;?eA)${zpE^!)VMCRSKoELp__wqT8dU0`s;6;D*O|IVT=@GlcQ7q!x zAW(gsl=sBZc;suIeUKhGt)imu>v+~yVSkz0evS7ZaKCnbBE$HBl9?i}EzgYXn}CSN zy!{j8P%5((giPF@jpoKrs*YWDb%`G$PD3(GIsx)i<(?bOs@&sHm4Kh<5<$Ulu3;*} z`;SH%NEs_{xZzRAWf7f^aAqbss8eesJPDl7+Uth<5H__0v1H!l$qn4OYOaF}t2IR; z#>8eLjHJ=>91(26yhS$ZaS+u|)o^SFYN}!OrB`F=6(Y=|YcFzdzn`upv=^UyM70;s zr098n6UkoqM0%xy%dg(cSw)k0VuF7+vux?_OmLQy~Hzj(H|;&=9hm%m7Q*IlMocIOkEpq32yPZWx3AG z9Cz*}tAHWFC$rpKMmD}Jb#wEfL40~}LHKA1UQuq4qr}QZ zy2Li{utElmUu<;8>F~#N-rVq8k0(5LMS>?pzqcdJ$&8JFH#8}?B^?%7UNXr7YX3$5 ziq6}fA5F_tE>low_|JN--G*637EkBRH)1I)qH#LS|A2G^|FtM{E0(zSAN>Iy#duut z#L)o$qHK@!w0@-xwx{2TZ@9`0s&LiN+9X~ z|42I*_$I5n@uxIEfJlN=tx^>yC|ah~qJlvMN&sciKyC4|s@v3cI5)Hj=&({vs|^pC zY{SiMI&Vx+c@;O%x}j^aFD)0LFa#7ft1>;cb*qzMag6-GzjL14+G72`gU{0>&vVXs z&h>Y{0AgE=_ijH@t8F}5YPE;G8ZWu6DS0RfA${e2rZ+R3`L4R}-g@h;;_XIqpaykn z_IeW&ne%jME%55zsS+MflB36RYUK4X=LroT_akBE^zBjIbj=RZYZW;?r%ob66*jfL zBG;X#=-hvp@B&D_`vCa^aoEz0Sh`BIU~;6$>5Mcvd0<-iZ3;J-RPa_zW~62#GOKC1 z(X6y!V((TM558Pm){XY$?AP$|OXa$tVj>rHHlt4DqVC6c2uhxkKk1F6m#4{fVQCjI zLjO=GT2rV0uG1C9u*~9STCaay!(Rdn7?&0}0DV)6&&`Gt;8Ro_2ke~Ia0}c?`h`m2 z{MZcsieKnXI?~NA)XgLERq|K-Lg%O{lf^G|4+R~h9%Dy2+Uil*2^OaUELO+sX3tUEeulP6`)eAXZ{2v|!HnjO173AK<003q45WL7 z^x~Mw9oDinQ6s={$ z60=C4VJxspO?VDzfIZpUU?FIb5KjCpRX=``Sq`jrKQUZ{h+(MYveSBD{kG3!nux&)~M5>{x#;np=XehNpci;{5mv{QU7W)1<}AdE2cMvBpH%1 z1l7gAI>v!bZ_K|6-;uQf$Pwts6FPOys!y1LI>{EXDwEYVbbzP&WMRe4an|XEJP!`x zj_IR%=p(wQcR+HLYMzp=nW@;S?!8~uN-xng)=Dp0A8R#YSC6&Q>9*_zi^dMqcUiXk zS0T-`5A*D{XI2OIi@ zjwhcvMPSSLoAO+@M-fKPUl%m*#-JfS&uwK3VBUfgsJspUTjbP3h)#Cen+P;FJR6m} z#*6H_EDdWyXQTsqe3x{-MPB%I<8IwP+O(LskEn#rVY^~Wqz?PB0f!F@hPP%wBnU@^ z%pkuXk@0;E6*w_%Qa9tnXtqB*mdH(HQ^88yLyj;yUAWiwzxh&YAkt=P5?}+WlE}nd zSJ>O+-$y@?YqiQp`*7T}b3McS`y|{)u0)RTcOX;?sR0SrgR#_AziEoM|DXo~vK|ux>GL)Of8c2C ze`Ni$;qRwr{}Wu17n_H0@@Oa{^!wzw|K~1d%*LRu*D*;DZh~mi z`e5zOWxb6o|0ojE0oG=l&i03oN3N44>abF^{RW1x;fCuau#UO&?xNJ46n&33vbgw^ zCOiTcVo26A(ztl!d0rl9yT9~Mz-Wg(;hGQ6!T*W(928Ef<{g>Fh3+0U8egR~F*b6~ z5wLrv^gH0zu@h>g#Q~8zaj=euFNSTfHb*`@qAF@IUhfQ_fz6b;vEwiA$c^J5+Kbf% zXTA=_F0OvUZ@Hv3s}lWnr&WO|-w{~5$VW#+l024Xz<_`AVI>pjg1bE+`o98e5P^qE z)s?rtpHeQ;itWY-U~`yu#a{~GU@sXCIV%4ifog}L8xrdIROvaEFY+fdknz50W5b29 zX)a+T2MGGEr_t_a2nkBVXdU!OM2?54$~Lv*rTv8A9*KdLknjg8=@JVmlNK65qt-Ut zXK(Q{`!mLnotVqBB!VZWEZ++tNWVtErB8^2?0w4~W8*_pp98eV738-uC? z&@#6mS_1J4V1S$ZR|edXX{0;KJKkjixc0!w2R-Z|)HU|K7&-gAp)Mh=Y~ z-${(vuCOF!0Q6q0Rw&cRA?JdNaEKfqea3M~3q{+9Um|&V+TEA@Sw8w-vXhUVO4l92 zYWS7U-*Km%IbN*Z_Ny^>u^N6Q!54HtqvIof<@AN!;rlpr5?hl!%HljRg;nNj*u_k_ z%=T=bF5YHGd^4Tl)1s#wd?PD#;nAkBJa~4>EKa(2A=V`F5c)&?>UUn#w5X*x zcIw$Lo=4tE%X$Az%bee>+Flc%7sRW}ZqRF^=@w7*)AYs)bcirzP~!9q@=Yf&gJ`rQ zJZTubk9cmYYM-BlPUk=;`zrK9(19%U36HqZ`25Eang9M?Dak8vz^)B;)jLTzcow%_&_S*zRXELC50o+hTvnBido*`Syg}?=#)Xv1}ChJsq=)E^BCmBKis^L`*BE)nHm#!1*CaAzM~8`L*?jdi|Z}wb+?O z(+j5pheTV7(;t%MfP1c!q+@;+R2LG#1uXFp#pxu5FjnOOQKL+EtNd&u1s3a=Mg8P^ zs6xIEH}`>2UiDplADLJUyg~URaf~F(9~UD@eV}rLQ<)^No7Zxt)gDuvs-0?VqH46a zs`S8#-4Ou~#dwSI#A{~VKwA+s7JH( z5U-H;E!E!{)?LZE6O-?#WSTmy%hYX&LihAi2$3$VRr(8(`1Asaej)+IAWp0sy(lX) z9c&Fnk=-|aLb%G^^Aq&RA7x|TnD>8a4bUqDiVzJC(jJ%)i>V)g4Q=eANt10tnlz)U zNRTG_#tFY_NsuOU)UQtIMw+nk1&1E7h9K_7xJjee1@8C)AlqLa?1KQ&^W}#A(DNlW z`OH`uhX9z<)2wZmvC7q^i`uQZSGtblBL^9(;y2;M#O;@fo1XJuHmaqKm+MB|P>T;q zqe*(?BBAZ{d_8!7w+TGBSlj0tOl0Gv{6M+)t_A#ud1vU`<43k<1|8l zBH!Ptg$0cxVfXz{Sb^5q!(xIl+sM%eFxMf4h%+qhTArB6AFURB)&>)&Wp593 z>GwDK{LP_LG&>I;?{CicH&PQu-psZNY(SvyUv_ZP7-x9+h6fatV5_Co=mQklKIoSA18dmG-%250oQN~+uYWpBqIC%eJd zLioEoojvTy(%z}YN4f^|G_jKsyduU@>y0h1490$Z6O*T|;*}5pdF5X_7d)sv09pzj zH_B#WW|@N!SQ2UA{4DVWsysDLSxFOy0Lwvj(`0i9@n0!c!&wbB6p}I{7&1&eSOtXI8Vhu!|89iINc){4 z+dHr8PPPLd67g6L#pkHS)m`6`K#>+oPGXKVqiW;SxD0q} zpO=zRjE0jncnlRX_Rq3eME1XfJX+>`2 z0ed-%hM_&GOdyRtO&&?s2fjy?)&Ol#k;{b1PJe!1hu9jX=nr#bB?8o;XxY+eD502AWS5i=S7q9iS{~ zIfakn|8WouG{*})9xbUh7^t?rzx75eXT9aGjyd;$h5B1loWvCZhp2`+M95`JfzUJ} zmZ2X4ML4+|{7*xqJRSA7%#zeU$b&Q+$|3f=G7VcEY)SIef&27vJ>5Pa_TlkVucVFC z0c!gtKU2VX0t53+a}ul3|EO=8D|}W}<GnK4c^!lDU@H`U6jJAd`TOIg@CJW8 z_VsxC<5;(dm(FpB#;mfPCXTq=$QhjlS~5Y*<@a#=w+qje`pDqxjCe#172Jyn;cufF{mySvyc zBv$wUR8RldxJ|b%jX5{@I>l~6?`kZs{yqF<_y9&J#$5*l8-dluY0%~?O|(St3Dm$p zHh@p|cxrx5G2a50rzWP$<1Q9D1`p6I$%Ln_3n9GSrrw~eIcCX?$vfhIgqQHO` zd(+bmaF)3jUzI~&fqsh{S`@6zsH|eV1%u%5AmgHkrL6zxcXoX>8U=WGUx#QYQ}7O; z$aWGFCCqfH(5kQquPx=1nCxq7`Bb0ZFkI8Y|B>n0tQ0>DNdu6{DgP0=9^ehFk$?RX+2p`RqgU%Ml{lx*&4HA6O)=Wimq5}i5>+}f2;YTiaNzQ zLcUtFaFES`35h=ZC_h;vm-X-?eAC>B4kxY|5{(Lob1dxyRpGFgSrrtWQYW%77jt5% zBlFs%i^#XoI1^SD^930Id?A116?yTBT>O7l$qEUbsqKPIhcRj@I#}fGCpHq&IccT+ z*jSNEd|gj}LwGZN-?SSm8pXN=DF;12QFPz(-2r`}H>UReV1a}#DST6{zcK-|*bSrl z)z&;sVNW#()RBAvi5j>WsUL4oxz49EO%^$bS4Y)rQpI64L`%9nQ#ZucuHmPNLmky& zv}54|(Y33%X>SGpfzWXbX_)n}Ucf0>e#;4I_nI3i>ud^5vGltMV(HzkNLoUQmhAPh z83VC0r;4w+;*|2+!0qLCor?T&^~gk6KNISmJ%g8^7(XqiaL`1ojXA4eV}rBIWT}>} zBeJ?ft+jG$ZTbHd_Dq_3W-^6aGjZfuI9Ube%UE-d%8IX*Wd@>fGJ#5N&!pJOuCF1b*FV>4&>{AgGK$a2#a`QZa3MHm{CY3j>aYjteGQv zjT2VGUEcwsZuR;1V+Zxj*aX`id6GZ8zz^ zLMm8SL7ePimmLpv)@*I!ynKu0ps368?}1+47!B+b+C8Bc`VkSeK&->Tr;Sp4xD>~C z#!J~95}rR%@JjOX34^*Xv8JaP;(mG#u}z5bf5bOEH#~R_^zO((kY=Zn;|3%YdH)Cy zb~emhd_mqUWUW?nse1S0b_TmAs(XzLfPu@vGD(!Q75Mau#M&lTK=ae1o)oepfuyVo zSG2Mf^5ggn7vmOPi0P}kRO0A$QvgBt2;HFsm6V@}gvqaf_P-U{8u@brq`BxecsNr( z?BHRodH5rkP9Ap3!*le*P9Dn1<;19odyEI&Hi{f3AKr~L=!Yls)Lc%9XW5u>0@jeT zNb{f-V`BdO_zRBxK#-0pcUrPsjxHBedv@&RjVN`_UDO10%~iX1r(V((RM+U2;Aiit z*$*T$FG*DXwW-{t{&_FPiJR5lox1y)Uisk}GVlY`TSYy>73^2v9LNbvN=xQj7&B{g zfSi4r)xHJAl)3SpdVS++D~zqYNaer1P2VU&%FIN_odVNMMD^zo>4c8U%@N6)cmf|V zRj1P@O0iS-BWZ0fvkRo26{FCM29-}~gzn!j)APTayLiP&m>OBVd80wq`c&9Npw`zHjiei)Z;N5^ z5#OJ~*Z$X?0of-y^TJ2c87RifGNUi zC7|C#LUz*42?^OE&Zzt9l!R<#8Jp8c$Zk%pc{d5!ZQn_gkX_onldQmeb{aIf<^x4Q z#?=am@M>^8rbj@d5M5fVJqK8xkAXLp!)1u(R&^iy{D%dno76<#Hxrp zGy@<3O>g=r$pMsg!2x8)@-_+mzX$riNYnomYJXM-0MKF*Pqk#5Kx-kIkfh@EY;3l| zqkYp|;gK?k1#Y#V+$O)Tbaq>m>0WD*8@UDc4F0a|YA!(cfV!&zGTsO;jQ@zOtJZ4e z(z&BJb#Kk(@FBn`Vvis2yxc5$BC)!x&)x_n5MAgt(&-`1NQW^|AJQD1>HRYEeH~W_ zrDlT?UH>WNSNBiQ+`&d%#6?Kl?lNtrNlJ3MtNx{2nv|rM1xm?Fo;prISugUENJowh zia&)Oj-o?;@EQ(Q7v>U@pIn6V#^X#o=UKThdeKjh`g~e^6%^gcg9COcFl9o zIA%+FW|8|GE*GAz{hYKLRdVCxv>T$VX?Le?%)J-WC3ZIUtAo@Zv-^<#mcKHHwP@W# zpn<#I|4o+q;%!BojKOq5J^PH~5Z7+51VYp2^_yw*gm7L$QUF8YzryRHmCK`LtJKv5 zYep$0Vj0m?GdDl2(}28QAX(|PB5$n+!ihTCDlRYrSCBrq`=6YvhQA}!*>m5AoThAR zy@*{$Gst=$`^`0C?JiRyLP&BkuF7{s?<%~tcgoMnr$Pw9@2?Go+%g-}_2etnZ)`}RW6 z3@6u84CNZb{2?nNc(RT?Kh#S0=-bkxB6pL24PBC8Z)br8M$-8kZ`cFla46ewGX6Di zpJ~CVcxo`MMbunx z&|2rqg4T>%E}~~4mHewcH9|I9{x!ZLx2Hy4jojQ<;q}zWfJKsRV#qLzV?_ETeNrEO zXMbD^A-GX0H{RlgRaCHDF%uOsJ1CPs{hby;F8&lF3L7$niEyr;y(P~)wq#;eP+f4F zNG4XPGAZ1w9=KIYCeGq(dq^Y`;SeCr!{CGJx!aW(x~4jFt-Kp6uC2xDocL?;wh#1p zno0JAzM}O=_#T4tAOTVDl?`I8nDo%xpc-|uPKt|amERW%##n74FA$QUXe441s|;(jowb3+{C`uXA>I!d9=~JEY|PC{<98rKS{J_~ zH#nyl%ezJ`U@MJgi9{{1oJ0RiHh8;tg@6v+pGLD@GAV;*<$NQrC;FGc3D%`-%e$gX zV3|gDTY;FwA1jd^A(HzH%fftXI zJDrmukB`VgcUDDi`71ygql@(JO=D`1nr>FFzocQ<7C{O>y_!h~Y|%);$I)bm0NU{% z=nu;?R5ZNWlyS(Z>*EHxA&C}wv`%)<@y9XA8Zv_e14Kf{1TX@cq2;T00Ur^uSJ$(G za5V!ttB&@s(_lp&kFh-88SMv;lkaa4RrM5vs9R(YKz7YhC;xk2a^XGI&rvmv;r+G1 z0l=RYf(l&P0)ROwg9+JAV*ox=3rtB0V)C?kub?JjhBQ$X*vd2UW#pbvZTAj=`X; z45~c4${Hb$H8curu{tRnJMLQ4(jUtymrkhesfxesjz<@aOl$0oiHXL{8q1+*vgNg7x)z zLhYmFtHxCv_B9|8$ujM)gfvU3348Fb@))2gCf8ymSTc*1FX@DD_tebe@GPDQc<}^* zehL3?f7b@T#}Nb)Y6++{^iLu#MI&gWpkCNrRDwbEd^=ho_Hw6eh|z)~XXe0+L1;xQ zJ3z-LW7iV|A-Bqg`@thT7ZIOirS6i`ftyy7znPXDP!WVA)9wv;G;C4dZru_;STrUp zyug|{MvD+aw{zIFD=>b*3HS2Q@K{MR+F&}vdl=dkW3#~N5QUZdK$W&s!c)D7x5dLd zjWZO8D$Rr&e4te16ok?xm{_W4$$_@zbjZkLLj?#P)GZ&UkYwl->6TTDiSmKa5UXMg z+cvT_tG$AQ!^ijKDI(LNG3-DwL>BuTeAb(1X{b~&mR&iD*+bvP!N6KjXtb+DBvT>r ztVCs@rUh|ck;L3M$(!h&>Sy7>JPfp|cTT3GL>&yb!b=p^PbkVG@JwK}`rV8_g5vYU z2$}rv!Uu&;Kx>qm8UzC8 zg2;o2w=8M7Q5b<<>+bVvhYgL^El03PUg&6=?352ikCbze`q}XrylNVK4&N4^$Dm#6 z9|6i|vOs!#ne@AzJq2a)%4lUBE(GcqSIaVCY+-Y+<{m#X{GHpUYUj&3s}eEK2!+q1PH28W?efWu3dFfy&bZAO24`n3=}9s(T<{sZP2mos)LbNfWf1nQy8 zpwFPp3al)g31hgd`qyv>u;74F3#x;Q#C@c$lyvt(Wm;t`u{IQp9o{875q|4X{Hif(yg5z-g*OgCDxcdBiWh(AEjksiYHXA3_1CNVtpq|;q&jgbGY{7w-3s1rimxU zPOD^fGtUF0CJSyoP?4!o|>@&_yaAA%eFBk7NYe80p+Q=Pj;k#o%JJ}py}Wm z2A&xd6CPN^(y}By92V?n6Drq)CsywbkGCr8ICRm0?5-ZcRqe8zZeMd~`mA;zg>ABT zwDi8RE?)vtLR76I)vgd%&3FsZ**Q>Xx1Axr9xcZ9Da~>~&XP?{U00Y`c1_PD&kt59 z+a=oTonY(7Fh(DWH78~q z3Op;D4TpuGPn`)PLyIF{)zq?fnHV=Cd641tBwVxYzO{K?25*!CZs!;a!M%uC=+?=o z<4e`0(k%j<|C~zc-2+7E9?PT>x#sb;Td>iSs8w%M_g z7UBiWM!q8KfI1KVMo|viio?lli=>rA_yo3xFFWkj$4qN`&i}`2@%B71qbq3<_G!Ir zDXs7cH%=eX}|v{`)T11zI;Emznr$8{{D&CPt&N>V?WVDv!9Zkypc^W z`{{(tcO)l|FM2;sP1{dep7^O@K*>(&lDq~OYO+cpJT-4Q>&TUpJDzw!zr83 z;yF-nYhQw>m>?FYDYMV4V?$J~4|2TypIV{U2{M{Xg%f&K2&|(2Uf(UN6EQx1B$!B@}gSHwN9 zPdU=?o@+?+IO#o#4&EQ<5 zITF%J1bb&+COEedk9bOzt->c>enttg9bVZ!8EYRfE*-}zMThU;8@a(VT2PlJTF`~< z77`h@{f*Nj^=`nc???rBp}DOFB`v~3(4;U7EaL$k%_Vv~2EzG)di>%yZ~wxM6cnB2 zv@TM+KZdgww(tqC&N~x8pcnCF*pDTLrxWd8DB@+nK^1o~-mO-yx^)JRJVI5DP+wfg z_cHd)76@V6Ah0fkhZ#U#8w`e*zFz_HpB#?(R zesl_^gfUW|i5Z*3bQ1OC{G6aVb~0NG5wS=VRR3!@6u=04u#7nz8TxF6_{WnHf8d_CH%e11nzY)L0alRojvqlHL9(wm*_^t)&D7WG6dA#Z)_HG z18pGrLmo1>vL@B?H0c{R6aBg|iC^c}o?IzkuMxk|@KXEnYv-@UGzb7SzFxO~l!+H< zU3;IpWFfS_oPbHuR`NjxuTu5=H~R3H%h-Oh|Db4Oo8j=U71BYq@=kjggu0d`H7lya z2n^*tAPb~a5|PI8$kx&H-pUU++|IN{5~9H ztyHT|$g0D_mcJ>}d85~0KD-w*jTF-@S&!-wDI(lrStwBAhD&J9Xx8VakXRuy{t5mA zm@{c>)2x|Vvo68v8KM?K{QbF1Dg;wih(K`!)-|?Wv01b=WBv{<33LfBJP3`ZP>iK& z`14y*7+9x%KZU_+Nt3oUEIq@(TjFq*v@8ygx1`Z3h`erG zAkMGeh{+3aktAfnh+dh0YO!C0MQaINFuVOMNkaf@w$+f))SZp1He#n@_1wh*2YX}4 z)~QpZQz;=w!{|h(l84ZoKMA>q{_r05CpsH1@PrF7(?m8G!`2cRBpZygTdKCMH)hE41jlZOhXVa> z_1lYO>v@6tFPIvvr=0dMh`&?~oN4y5siq-Bw-@5oZoe=&Qu9Uc-yZPZ`(J`)4evjl zkO}X__T#@nA{yR5svAv%_t(Q8B;frb9`*(Ar*(t(`B&*1DR@6v7>)$IuY9iuyl1&& z@_Pb%<01XWE4~t3Ni2h&fAJ4sL!;JE_mm)LH@?$Y$T)j-46j<~8h8|GPi2nb>UH=4 zw;KAYAO7w<(^ODgUV$MrNf$?!&qKre{U5V6vqP2~ff^f?w7K7_#Avugc zjV*$f?PW`mA=f2pr-(K)k{#T_)$+EfUH8ilp}W0;;@lpUE{)Pbc%JEc>eO= zsjj(ge;lZbZby5=-+d9v6w7NhqRokV1;Y#ps++Hb@Y-exji_8VLCVoESzWG8(Mvj= zoZv^Te@=O8fKmQ?SB<}2C}+WqgTA=yZB`HC9Hvoes4PX5oa3AB4xc3fgf!uC+9hd( z$AQ0g--x&_h+0|%3bGePNCpI1w>mAkPj4h(V&mDL2HvI78)$#W&$W+H4|-!Ui3eMc zq*EJ4y7a(Ld#5%ue|=xaN_I;ciWHIS+ZdLESOgc(v4$ASt7xFsx^D~yITP+1#ozF$ z<GeCY`6yLHYjqP*6E1xz7oO(Hg_c0-yx)wnbPUNR|>-IjI(r;;X9dr!wDxYUOk^+|59Yq`4tJ}u)x$M{8=Q=4 z@&&tBiEa82D<=2ab~6!{ejF)s5fx9|og&3<_7I$44n6?d(Yz=x=AMLu2oH%)eVk|2T-M3=Z5-V2o@`WDx5PY-F}(X+@P}aXXfU|q_(el!I@On6|d-4 z@wtqO155`o_&KRO3+-olK_08sD0!)NTe@v#BMwtMp(~UfpGokU>Sz}F3MO_y6N6${ zCAGFsJn0PelthD}!X3H{!!!P4o~fInf$I1jUNPKJUvQYTTN#A?Lm*WewKfaD(h)6# zs)+)Y{w}2d?NTCkv&>kl7+IUyi|T=f=m-Hr#89EUZY3sY!DnS1^@h+($!dpADt|ut zyiPw)uCt|Esk-Tye?({8WyTwwagU`t$J@-h^xTs&$GjuSIxYB`>29)0A|gTM16o&w zv1U&B=gG}h@L{5pX5j3cZ_;8=Z9OCdm+vz05Qm5sV}T_>(_t+8WjDqP)mxEI32o5g zu%jZ<%%m}9=l6Dmq*8i!d-t-3PS(xaX)jo)f7~M7xyJ6!PFZZdz%oq#DmCwU^uLpc zhAQnpD;iri(R|rNI>-5pkMt(ePkFn}fRHfM@>D-7tx43rT4};xtJZH$Q&H!X4;hg- znyb@hD{@z!1J(Flxem-M0#$z)M=LcOW0MOI@sh%Xs0HRw*8Kb(Ir}-~LzB&ve`HTO z^Qr!}{8Nsnr{*=0Gm*C=u-~SGar4M#1Zh?;2Xv8YYepW{0C`vf)XE+n)up=+K_`Y9 zQU4RNhbM`L!HFDET_h`6Xa1x_i z@v!`4OP!S*U7bp7DKi1fsS(5ljFzOkqYG$U|C06x%iYvUE?1>ANNL&DQu=d3AQ&(t zrT2+^C{U$4w6bR7A8^`m#3qkn#$^EEG3Dcuy{MAJa=Wd{D%QIu{;DoHosta}AFvSKKWQEUiagrI&!j)iv?h^s%~D`UJfsRm=okZpw@Jk;Uvl)(MEuX#rJi99em*LxEBIW+=SY#NtwSI-sX)#C@uv)H4-N@vjgGaW%!={A z0J9Z@&#)!;*Pdwj45F#^z_;kzo4+j`Lrl>F-)fOilBX}=jUuo~=jmzhzK%!OVk!J8 zE;jg@iqTp0vAbmQ;Vg$W)hy#H^ONS7#v7-{u5^9=_K1zAZ;jlYOYmM?=$2A0bgs}= zIKSt{wDX!w`Afvf(Z(y$m^2mD{%vB&qHSoWX=`)sgcPfJg6AxjxWWZhTOCZ(%siu* zcUk%&Zq*XjBdUMsuM_lF5T3a;Nh~hx23(a!VXvPE_WU;|4CPs@)MZ`i7I(my_|cJx z(71+?Y>7z5(nalv$Q~#FwMvQ2bV~fUIDa5u4;k)H2nlkOS?%?(GQ8-)iw;n zoA7|b9fcc72D+n3PmxTewbe5e5ScaZuULLCvk1;!OLsUDFMQc_{%fzRu(cW~d z=&`n?68pber?uS_o6@D1vN;-)nUB$@K{#!<4QKf=@569D=3F0{SPRrIV8_Ia?-}Bk z-H!u^PqDPSV?+C~BFH>Y^+A@7dvk&{SUY};176#3Z6&zgnp%sUO;`2akiVCwk$Y-$ z9ijZfjl@8#ske4{rf%<9YO*!;{!zwRvVCxqUTB$6Y0|Dp1}N)zYZHRwwqZD?Ck8Mh zHfca);sXSge;{-cnQO7bZg}6B-7?oTTU|C}1$YYADe>R3^xilAe{5y5nPN`c18}q2 zQLnxK&Pw;vGYT2;)e{*<8W4YopSGtT23yJWGV!%~!L@^HYFDtSs+fQE#2>cco@}bJyDCoO_Hc)d)%7@5Kuno>|H9PPsJKGd$r6h%LgoC`cMTIfv zQqlkW_bont@%n@EoOJH8IfgHo(7 zqo<0{?x=A$B#4y111vH)g+;`6z&83EF+8!l1Z6R}rF|TA#0aje(U>O8vhb`%y||F1 z&Yb6;Y=wE=0v>2Vu7Fk=f2e$sinW?RLfy1>HkSJRv5EJj@rdA;NJpMv6hvZ@nj76# z_{?VygLt)Y3;RV8NXx&3d<*R8GU|pHy4Qbi9Zba3!JY>RsVWA~&41Ab&+GW`cn4_l z7sNWHxOGt7k||2Zxm9%Wv48O7b44Tp8}9B+{-p`tJNC^qmd8|5xSgWX~2Kj zkhw>1gz+6fuqSr@cl`A^!Y8^hz*8^3$)uQ(r$&9=romcVwk&bw4B1EY5!(B;Z(_$ zX}T&TPNMf<81K!c(@09saFD}jq$LUnB|JDx2sgu%}aGaQ{u6UBQZB|tj7XcN< z{+P0LMqLDexJdmffV4@UX5u9qAyel0lEWqX9?|xAgKBVx%)n8pL7~dTtjDN%P99_2 z9FruWUM~}mB4N_D5LG*#W!>zhMK{-HJZ%xFiCwW8eT^-@nr|)i_SzQd9gniwlBcWnPvIf~JSGRh}YkJz71yIK@(8o)acO+u7sV8&pvdp9S_K z5=q){$!-!5XXO17R@Q}rn9N7B&`Dw4x*2j#?1wd^IJ90Lma< z=SBnxQ6^pw=7#Gzs(N*_yi%{J(f9!~*|O%Fjp-c zX;P_rppc7%wEj$Jx6|7 zLUatni%l8nnW}#w|L{~Vk*68bVXQJ&%s>kYfONQ^KWe^_`GOBatmEU`AC z4{KJXO^u=PrRHnEA=zift)yfwP-LE5$*h^As*Z^q$ zA8jO8>}$dRq|y8#e)dN5-(l1I-!p5Rbi%eY3yus+ZyR4f6XYYDty(J--737!=mpxsD1fyO#a{8=Z9=S-LQ zV5*=RF-|OaAc2IWH>Rw!bu}zI}(SAyYzdq$|nLY5}4lJx--V-AIqb z`lZuzUyYa>();=mu0%*y@ZKFKe)*hd+a||)&X->$gda9iT2;IO37||dMv#znb>}n1 zUP1~t>lx+FtTY zq4|ir-f2(h6Z-bU+m0YPZ~_;mgUh>-fh+INKxR($%CCDOv;E`~_=QGhcT=2a~d!^;jDrX*7Om1PG_(c@TrPO$qWXkzN_8o{2RUT`OR%54vY`&!yAY zFo4EHgKvnZOfi!!e6mGMw$N#^m<13RQz)h0-0z^Uj`Ajyz9ycM*s%q?v#jkV)RyF` z{KM}wJSI1hz)KS?sR_-6*d-ExVn7lew+-RD5#s=iA!Mu)QrHXRv}WXTc%f#Zv0C{V z$b+7mWyF*wT@J(*5t?PHnsk~yX&!L>O?^Xvw%kzvSP9_P0jVU1-z07u=_j^|GJ=V^ zwEUIQ+_Y2nt-YFCK}$;(skk<%%Pq0X;Un;Q*6Is4x0y$4Q0O8fDYEno7?G=`Hv_!mZ1&wx7Yu@a&|~vdM`%sI zqy3K3MC`F;(re`l;<2k`!-h2_&R7B)w_jv8s9zB|G9Zi{EAC~wK>JC-*&sD3YY!c! z2d;H*)Th_DxZlc#z#8oOC-CyCxpmlX=Q z;AmTJgr}we3dho-wZ3A2TzJ%0I3nm<(sN$uBl4A69Uzip(GkYy<(kl2ChlHP1%6Bj_Oc$X7A_!)nw;vPi5!yHQ#ws`7#-s)}(t;(4u3}%?tj0Opc63z(^CO zo{}s6J9E7pj+?lzw)`9f`>^cg$Qxs_bx1&Xd(wN$Q$v(Yj_M{n!<^p8dO(z%vZ$`& z(^Lx4-prWvE8DJPFPO!OX{s?8(-QQkrbtp+3UxkQq3M>U3|wk5U6EWEy7(+J&zc1{ z&8X9Us=@CUm4=r<(;z!M>M|AL;XEv-RNgI{<86#d)jMm4df;)`d<)xvmbOczr*RlAalG|8+HiOXO3N1+;S)5Fj&x5>$`v>|nukJj7JwTYgZ{62~P-n^(sf0KLau4R4n*NE=T z**6Fwnr+YnV(=kB4Mj9ONwekq*MC0IEOu@W`PF?LOS|J!Gt;EdHGGc2f>Eugfhg;S z3+-e)nJ7^U9E>g|4J~S&o94TEz!{yer&k0iPkKX;0$K$@{_=T^AV+2(NO)U=Age)@ z!L~4eV}V>1dk9oPqH|C6XR?XzMU1-r(828@8#|$VFSp8P{QK8g<%&P?Kl4}sz%-;V zhedv(HGREyoH7$f_jI!Rv(%*p4J6G*g|iS~0sggy&JmFYI3b}3blfor&Pl+7VP9ez z)e?{GyLw|(cxq2A=*SRoJ)Z&QrR> zQ{zsOgsHEYwG;3KOuZ;|Ugy!My6Y!EC=D8mIJR;tyCKp9bk$(C!OQWD>J|(IBeHDW zvhOhwFu*$N;k12A0I8;FEWPF0bkr}>0cnUa3mKD9b^`Xm(9$DFk#EcpbYIO6jqW|w zV`QJ`&LBOI`3U4Tu;>~?Z z3SB6BoVKHZ<n40MoPqSt`-k}D;r{_ z<^$OkL|NM`!2z@-mHJ&fEN#ik=vpyIv%;%P!jtH0VkYI=<+=YC3^KoDxyj@lUj8|D zrO!Qgwj{0oqTwH>W`FVd-^q%?ul14j{WJ*^R1cl?81k7(4dm-1UU>Yt8AN5U0xKmA z&2oV&y8!p6prwz^2A@q)7+*~C;(>|MWlEQ?A^bOrF&CLWJ~8K_Xn1)nX9F?Xvo}QP zFqRu2N9nYl5znxGG^DK$r6F&`zcM%Clk{@8BWN;-ANI__Q%uu;MNY9V+0594#(RTL z$|9NC*nVP<@;EO^uZOJ6(l{2SCKf+A<@nM2NBA5PIRqmfIn)mnP?H?Z6Hm${QI0_) z&2Q3k%)Wtj5@Wj#<6E+JSLIxXNTn zDOSJQ?$w)>1 z86x_NB@F0d;S~Zzn7`jVCgc(FQvJA=$4Z*@^$QQIqnxAt`0}45$6NK39R#^%X8Y-}i z9lAU^*cuu%wr#|ZyZ&=9v{<%jD+Fd}WtJHeCs?#Boc>l|USeQ@NfVb?H4BJe^bBj^amnxzRqj!buBG*ysM;7HcLLn6Skjq3v z`v0s=JS3sKwAOQv_#jm38U9&-8P?J30|!Kmz7dZ}TWKp@H0!2w9=8T1Sz~d|W*jm! zF^>>f3+><>L(3xBH9wyxf6Q@cjGhhx&7u2RE&WtDFDnuBBs^MPFVj<91%E?Q&lyhN z`0%k40-fPw(4G5=azllrpQ%L4L5MMX5Oe6XGQATC+_iH_E*e(mRC}uD3jr&_=+;v5 z5f9Ls-FO&PIo#5Iq$Aif4ZND+vRJ9Sn#oP8_v_VZ#A}IgTe5#~-mfR9VLzfHkgM2+ zCXudzA#^KbVhfKbzd9#@m>tGDfpBx=xuL2`>NoVmO!5e_I6}*))_l4{RGPt1KAxIv>B|*P0`w5M zAm+Rek50*kw?pWO^S%s(N=W}s9k=Hw`O_sCGJT13oq>8*IwhgFwit2ji0%gQhSSth z617FViK3XBVSbZVhIGDXgib4r6C|7w4P`{Dvyzr&4IKtSK-h0nvpEPl$XM^a#GL00 zOr^SkBmE{8RSf7(kOg2*gc~G&T=$ZMk~94N z5rHNx0!^^Vr*A|jkhDWvh#z|4D#8hnkun}`(WX`}D~`-er|hK`-%Qt?BXkfW1PiFO z-ucf*j>Z1nJg)V>i(_dtt8ina$O%QUWqjb>sOibe{xt?W*Ak~yqvwSwEpq!0=@`a{ zIzaGD-K{;QTf(k#@N}RxkqEnx4^t2WFqM6LyY?^$=puWd;sy}!U_(|G9g!}QfgGWc z>EcCnQMym6fGpj$KwYE(d(S#wU|r}ugXi1k{72rUO+a;@bvHfLpKv?X)waJ%DfT?A zW#=~&|APRZ(JRRM5gyPaq0$74o{!02;hWd1`#(->pCq^t{goI)i2v-~@DL4Da<3Qb zBr98Q^3vFhPa}tJ_dIynaKP%QSV8UzHooWRJ4@_=wiTDEids6h;f5P^W05Xz-!)GA z-;5f=`mXV()u>ui@5t%9#wCj~-f`TQ)`%5#5fXcwx~3|l(g|N$Ne_P7ed#so70k!{ zqn^dYjNOqrV<-0gns@({{+h0n`mRwKO{-C?j!Z_9hkq>e_BNamPhFb!G}4vVcY7zl zmbL=4*MdSW)!sut$!PDCzT1nvm{H@@zH8jpnAU?x*T}wW9Qxmk8mIMLQvU-chWso0PF9f4wT>>5|N+m;6uK(@0l--*4Od1p?I+%oy8ujaOgDc*ocKuF>>T zMvZg&uJP9IGHRULca7iwKCMQvYP>9C*4|o^_B7IUUf=B%F3zZNe&013ev?t7uBgifz4@8BVAMbZtri~(`po} zGcL(E-2>lBdm8DQ)^~fOKT4}nO#GgV_IAT>C3_#~y1ei9`isOlv2!9_SM*(@*ppFX zX5Td$)@1CaZ}eT`q0AbAzH5|a*0{3o8orSkE{2*R_4WZL>eEy-3$}eb=}gZCrA7B3;+_UE_12 zH>TD2X5TgbH?u}r-!+PAGJ17G-!-xx%&2i=-!=ZRB%{Vneb=aD52cO#TYc9U^5e7` z#cE>a>Q_FL_B7J8H}_rR#3wRp+|qZA6EgYGTl=o@w-+;Z#CQ9y5!t;b zeGirQT_fwMjB$Lg?;4(`GiuE3yGGf&X}yB~yBra38vlnDA#L@)-*^+`sb@9w+CqRe;vsP7v8^RKjb6sx~a$k=~3N`#LT_PeL=_D;@1F_x&oe3?`a zNB1mF6fIVfbBw9LHj$pI(eB4Y!SUDM>?TWWUB;uq=FtcG(I**?{xL+?y5>o#b$(%b zgFDTm|2bg~k3Jul{^(WnXv&>?u&0{pT;Z6{wUTSa2`e1yx!&QsyZ;KuU-&+m&kC-U zT<>tX2dr?M&Gk*LA91bX`YV@r;0nhSt`OHVTzj|%yH+?Ra{Yko39i?<_Hhjzw8Alo z>rSraT)VgqaGf!Dh2t8o#a!#S{?0XW$O^}7u4=BAxfIt)?iG&lTywb|<=V>SIA(?8 ze6E|h?&n&=wS%jRF*t{=aD0vHYOV*k>bO4U%JZynT*+0%^*gQ>u72JXj&E??%e9(o zE7x#jq8)smGHit-$aO#08msZLVcp8@Rf-&dy=p zxPHX7ifa>>;yUR#-pO?@*J`f!xpIzQ;h4sCGuO|#nz_E<8q0XD;7Uk%k?)E>LMgfI z=Sf_&-jxNZL_9~8Qff!f&82E{o8~06SeKV*eG~Rk85zK$;lrxpWRx+I1gs175UG~c zPo*Nd7&oe(%sgOYj!knCLGqk1NC;nQyn%~y((-^E{p@U0?+(jsXq$SIJ4D823Xp@N zDdGr{^u>)T&Kfj29*-|V>Up9a#L;$LP0XD6)ZE{0pjOsP0JQ*+#@mPBg7~;>N;2hY|YZ`p?*ZV z#w=8;(XRBOp6RZf5lbCXQZz>1%@MLXD|SroLvH8$bEMuVl?w z{4Q#-cIWx=^Y@am71M@bZCSlqu^Ow?l0EV8KGcN-{;buxn5(qI4wFWN(`aC)1TJ`8 z*h)!P=&3nZ#z>M7LUwiFmqlCaM0K+-57muC-C09^%6&ogXboWBud{K9wFwaqh})UH zVSrZS5s_lLlSHL=9;=ll(+RAHfAxNpCDR$>KD<8tjgjf7asoS}x=)20t4ZbkMnaWS zZ&W!8Qu>kh+hjFRqtFM-`ACR7Ybak=2bB{KruM;nUlmkcq>a=;o^53_V|#;+F%(}` zXrSFcx`2CF_s-q^f$khZSfyKK%|&bkUzuA118r&h4Bd=fTU0Q1c!>TiEzO3YCer|9lE zjFNd_E|d6d#P{8-PVd-+!B7_ojc}xu_!*w+oh)#722#5aCcNui4zW8yXZK49hwSL_;4k4>4iDCEl8E*j?M55ftA-7oS9n;fTdlv=h_rzY3d&?vO zQ*D38XW!!-Rd$*5U%h%yVh4fIf-4pBb74;C2Lb~xA1l5Z4eGdH{H3YmF!%}FJ%|H> ziNP}0O2GGFz7p0t+nO{szFG>*B46SC9H=2AujD9^ev@@l-)du))TH@C;^9{HogJTu zfkrY&sHa-On`w&%2^6|nNGfsY<}e?S6Ya{dV$kq*tn6njfh4LszSYr6Uh?#FjM8Kf zUm&371nY`Xk-J9%X+^mv@g)FAWW-i;-~5c!WKPK_2;^6{E%D$$8zV3buw?6sI0lRR zFlH;Hjnot#d|%)gp$G{;s8d5F|8i;X$|6~;_RGf9rdf0CAlJ4IuTDdNlu zArU(y=*>dRbilEm>Rs$YT=pfDDKBk%R(ei=2*S_tfEZz~8rR1P!AZD1&UADdwK zdfoEiSGhAW`qoN*qaR!V$F@g>DTG904ea}*95~g>&9}4 zP#hqx@|}yjM+O=w8cO$+A_1Sq6CrRtD7>L0ppw_p%en zF_Nx>)SCQTaF82&OH|{#UFQ))_N_KhTEdUqxZDP{7`A8TJ8Ei%s){L`@lx!+zRojgLvzgtlXO z8JQTiSb#lmP(6FxDuVS;YmMY|UT2Z&m3IO!o8n|&>olK)OCnxg3Kjan>G;a2iJuMhuq}?3OMO zGZrkWwyDFdx&Ze+-{5dL93f}n!S(?Se|JYdTx880XM~&NZk9(Ul&|X#I_UZgW4zU2 zZ45kf97pHA_u`%|geeWJZb?KwuA$A1v6*ix0@3t)Q?B1e$xh3m&7g+Oz0kx1sUG}G(-#eWP2>S5`In!MX93I_dqy0QmWViV1|yPX z>t>G$+*j4dC4&@zC&D|`&uA^um}fOhJ;>YM5ORQ*!8_!{N?K>nB8@jDS~x~rp9AXIm zJ#E(r1;L>>SzKf`_}``0GKV#8X*9g&XqJ59rDrVp0Gc~xNit0C{!HjN*(8|Tg}plP z+_&)@k{Q_pn%_&r^6$d}blc}pj2M2)_W9R%)_W*h0Wkc8Fhjr8D{)_9C4ks;GfN$_ zM{Hj^NCHHrhDYS7VNuc}x|OxG4~G;77-jRwe##NIiykOm45<`0w<)H+A{T;qQ# zo5GXdU{;ogzRo+3@9wPkXGjtj)BO^I`+7I<)n9%5j@v=1jGXenBu`wGoH*G4(|qB^ zFmZU3CUA@1Nc733TY$g!b*y7tDG&_F5{=E!JI;0fj%dv{G|Rh;n8i`NL_o6srR1>& zM(dNxv09hDO`u$bVAHX`Ni?lpf(Q_7yh*^gMegWYac-)8_KZg`s;`1*}#5%+^AyBLK?v!FnD7HD` zU*aTw%@Y!hK#!-B002{YANh~=aG+xH9f0hqIl}o{tUF{RE*m@#*F#JWZi&W%lmS_r z?)v=e?mX3Ws-Cy4QMc>25w=*0nHHk1=@EaO)AyQ;%u|yu_4SAe8%tI&-2oZ!M-2GZ zrPfRU>e%dU*0|c<27QcfUj{AZMrCg^Bd2W7k-zunZX*xgpD}XjPf!inEhCrjdgRXk z>&Pqg+j<|l%&Vv7wA9FJ^zq{_f_K^-QZxS0rW#CbQ zJ{B|5RzOVpZ=xjEr~fAE_Oi6!sVpz^>dkS0uzyT?VJD0cCk0@etd^`RsOcKdsny(+ z+hZ(eo!Pd&wKwzh&adeWp*K9S0mKDPmF{3E%%bZJ9vv{<{3HOU+5W!Qq~-8xt7xQY z46<-k`P;mqynN52S>-bhLNyuoUAH3uKsO~>?O&6Z2*+1am;ZTw$r>xLBtKBwaHL=9 zoS^6BqCvPV&W?xINH)B9xE7`qMi8l=JaYvty%;bzX2_DY{c{U)Fnxw~Y*#a5kP;a) zY<{O^*!)h-u>PH*^oIT^F~e!{#9#{8h&)k)jQT{##v(Dsjh3w@x3Z@9d!Vjek~%&u z82$X-iJUNCX^rroC+=j&2iAz#73^N0lI3W!{r1-r9fYbWM7Brx*ewtYKsCaCHvkw(Bf%-X53}#5JiPA zvB-xg`EIu)-Y#Anjp~JM0y3JTxznw()qJ5R+MBM~x6q3SH>}#c>@dMs=mK;~>cEX9-(Po^hDx+&Sv9%Rc~i%IP%Gg41_YBZ;ZgezRj> zr9{-XZ(U+RWXEX!V4{(SbQpPvGg?VptDpT+yrwz;-v1KfDO+5BbIC|W+-E2hx5~c9 z$UU&I52{^1mo2b`cycvOx-8{~AKu{qPnLT2h1cU%#MZyb z8i?P_ys-rNntu`G22s1*h%-;LW_mTj^y!a12t$zW7pMW}?uv_aMB)v>o*+mGP3iqG zhY!d}-b$JF(>ay4TxP=~41tiG)Yr8=H6x{);RAr6z=5jD|2RVUoE=s}>004NLLrkL zj4tvld?w_W6+l9Q3&A3326rX|k`R4h=KUgcc}sRy7qJP6Vw3>E;R^hGY=Mb0{5_;o z*7a_+?MEVhA)Rz9loT>-b?+h(zjTtuDu|>qT811dzw0g0YcL8VFlUPd=EEaai?6~P z9!YRa-@+VQ{PNjd-NY{?bOADaKh9_(gpp0eZpmX=1d@eavqcWGGiYVAHlwnT$MnxmLJKDNN{YrC-Fgfv$-UHJ;F9( zQeOL}OugGCti9Dx6`-1Fn&mr}{}Iy1TqL;c%i;i%E5}rCjRt3)oV| zqY*~L4Z-a{8Yyp#j-Y2+5zewrCgDdl$RrWB8A3_a-_7N%*?-D1}d? zp&L=hCX`o+^CkHs?R-wF+Mi30k9RarKNpSn!dZ3?j(6!*iQsrw)2;-^a}P}NopwH_ zlagf$&Jli0VDgKIiT* z9@w@9{(|mXBehS>?x3WRk`ka>3qrG4O z%=iK%+XUhhK5%EWA2f5m$Q;D&2ZyRsb@&$1uh|4)I+vMpGhX;|8iLXN&&;O`s399- zV9Ok^@4#qb+rLCOFuChi~k@NoMeM0|zP#>;@C0jq@9n3k zign#jw)Cm}nMl_}J?iHgIB|W9`s{Fyq;U&uA?|ark|;23FM`k_T_=-}s_T@{KtW=S z?L$k|mdCb;)IqeYP#@lE;_-{1POCU3gU^ozgH?Y|kYQp*&l0E8bs`dW{0#mkuti{C zJX|liGS?NW+lIa$Z=0fD78F#Z9|JZAA#PPy%EQq-ly?m0vueUAp6bEUyu55UXX=F6 zg!%sY83+pkTY|-EA3Dso&p5c?zzzP*j#$ZNeC}o=QX#wgZ1ynX8P6+|b44d|hafYx zsZ};DJ63%79PJg7w0fEuN$661uwx9B&KJLOEP6g9T3VtZuwrMvzeRSkxYQwh+N!Ev zJyymSFDO={zeB{+F=Pz+f84zdd{o8t|Gyy-7KrR(qeewQL`6YGf(QnAbOEu^g-D`R zKy9ljwu+ENtp$?@A)bi*P; zjDt?ZIPmo-gj_(pY$nb@vOSehf<&SwFigSWYy=B?R*DMdt)@3zFOkTva_+XHbn=nlo6n=7pMAy(xPb69UWdxDw(vc=34s`5#vK^XPnY7x!Ei7 zwaz88+e%Skd~w7ZAav=@%s^F4@JEv4VD0LSBKYqlJnQ^P+lUK62vt+ZF`3``!c!6Y zi{H)ff)wcNi0MqUaNDIVp^@fGn{iw(PM*uBVt!%>w04|=Fz(3J947E!>fklyfxeF30)T7%Di~a3NfG3hLd2M#I2}Q<9cZ?KjBK3 zP&&tdS-dp|I!}IHFInWbuX%$alA^PE3w$nns)y!@oI+r40KP)rSe%c-0-q<;fd^Lm znzM*(vB#KG;Su&Gu-ZX~@vR|Dg^rjZv-h5}_Fy~T>dD8$U{gIfl@?MB90fYTuZJ!3 z45TSTxh8SNd(-L9-nu{OO$T2B2ZW;8M28yFts<~b$c4<2-&@uR%EfYkAI>9k%qga3{0W-74%G%%?=@St;wmX>I&Eu(n&5D7<=t2;SUHaPJF0i>`AJoUGh8j zSig}F2og0Zm7u?{_QULUhK%z{4D&rh#-%bbCSj{G5eEl%*Qk~NdoW*rl0s?Wk9@^` zslw%cQ9{lcI*0^)dEi)YzSIdW_mco?UE!fYO$!eaX+c7Z5_M#Y>b?;*pAKOzph0U*Ts-&J*97 z%^Cqky8}d5uD~~9+Er@XJDmFwU$gzzIR4gJ0NsKBbEntP#+vRgxjM}n*G=}ydW@5U2~@i(y{(Y2L-+M2CUJa8Ef=$XbZjS>r$zuJ9q$u z=KHz(mM{ukB0h_~_G%EUHG@H^mp5y@2zm&hi6KqnVVB|}W~0rcEPgpLlvRNh6#3_R zDs(`D4AK*iGj$G(?%57}{tAr;DD%2PBLK=>{?&}AErP~hS#(z)#JPS3Z#sWO_+3H< zyxxazB*NY{EiFz5k`eqODM!thBO00$7_e%crSOBZD3Q`AGz9>)12uglr}Wo*l2c@c z1o_k9`-qA8jzZ}qMSl%AoIUV9)Ofb0i-}EFROU5^k_H|z7=wtMJ07;8Be2=y)9Rzm z3C^QK!F2>T720UJO3^zm{?MRbIx)gl3pSzZbh^~nkBIy;CmO)$)X+8Y3U`tU zGolZhHsb`lMLl|@jzO1UDk5U;z;{qBYUs^uRdN$EM1$(qI~hK{$));+l~?bzjrXL#~?J$5$*a2l1LOxZuMmfh(Lo zWzpGR_^Aw?(i*>S&8YgMM3U=gLQM2nD_o`=*o}VVF zL=c2=4b-Z~XLNNTUq)98)Jd)xJh^JtF9d~Dz%&iKFN*8qTwANgp(sv#E;jz$iqK$NLrO-DI9?=< zUm~g6bsDA1S6n6EO!haqdg2VyOt~^vaCGz`{wyJbyussf=^1>vcIhFy(5BSo9h!ZG zn~lip(fkzq#F~?lLlEUK7Tot574aY3P)pAe15zZj{emaf5wgd;5q&KGnU|-9QV`w- z%KHF;KC~w;t0NnNXD%TUL&1K>&GbB0O5+e9JVz_^oHtFo^=vQtv=%>^V^^1>yW1~p zdZ`fS>a-z~>wLwFxIeg2YKP}cgNVY?u|=QP+NU&0Mr=`zPU=Sj?S^K${N+h6V)5D=6faoW63Is_yz?&9+RPoi1-wf?#wF90 zTm{ZZ(2IK2RYM%T=-vrnoZ}Z;E8B@-CZiMiTB}8s(TeWVu<~AOa6RqnXNi_K#P|`H zH=uN6(r!^PXm2nE2bR6VR#v5*MbM2MC}2?5<=Ed?p`9Sp`HGj(KHMl~_TA9;8@!Q< zO52qkNoG2z9q&C!oN>W!Wv5}VTX%|KL^h{ZK{1p1qy@G=GRJG>*4e?7qEc=SgWFou z}2P7ynQX6^RkBoUZ~2Rw4-_| z{Y-1P&0uTyi1bIs+Z6#B1RmxS_>x&mtb(OhU^zIo#SuK|jQA}2J$p)BW z@Vh}9wNh1_=|i{H-ZyUu-?H!f<)meB=@Aq|pRG`R&LVmPIt^jagXN(*fhPw>rzG2+ z&@pzlS1$u>;Io|2HYn0e&~fqH6sYffQW2b1>fM=(toNnyuBdI&=+1^OX4hx*E*>v$% zXB(0Q5}MeqHVpwi(TnD6$e1Q~XIWxrwyzOY)bRRknYgMSWn0#SySnI4BjG-=20ea8 zygPczLp6^lIru1uKCm*|W-0BbW{%k!t^S3GpyBjb%Bg$@DVCoeBZaovyQy*R2u%&Y zt^E-GZwS)m=mhD~c&#!7@yD7~Lf6K|r&kkX7Ec-yidsPmi<4@-+&J=Pc2|^oZz3^lYtdjNX*uxO6))?hZZn$Uxv%E^UD!6}mtaq_5 z^OjY6wZqZx;0moyc6*9r6K$aYafwgdb;c`z_Ufek^X$&{WxWq16~a$hT=0Eh5m3W_ z%(_&m0L9cyY$k6+iOE@-4mewLoS@El?B<`G*QHBrQB{u4+-aX7z==%|K)jE&GcPU` zLG_0}tQ12BtZI5h<4x0-tJFU}r$;jK%2~3R{8tRbQ!c3TtmjxROCs87&C>2V^8*V? zv@g>9z=I{>2{L8__g4f;gvZ`g5#Wr!@zb+bU&T9O2Ju%iRVz*hyfeHfHUdsPO{Ur- z$m(`-G_)2cArajBsqiRNiIaA)bXDMw%6}DsH2H@GC~V<`D$7;DQafu2=*O8Gec?<^ zs>*r=urGWzPxJ}^M-TX|?q(SvdSQM?fPTrF#)}4c2lf^mb0_NMpgKz4xakDd((xZU zshy;F1bRB~)PY3?p4uU_ zn)ex0&dgJtG?lM3RBl(|PF^|H7ke^+O zc4(bT$W6+LT*bSucB8Kg3p&eeUmy=g)9 zk2y1)#o6I2mU+Gjnrq{g%RJRwF@aCpV}2GF_RM)1G4Sm|vVqlzsE4$3rQa%8g2QRi zA^)tCA}J9eC4#1$J>j&A`rj9@XI$yeI1tHA3%_eu_%1DvOiz!bJizgj%-Z~$?O|+w znm+rBth!uwH{S@9+T`WpE_JPNFL9Sz8?&02Qszi0Fo<*=M|%~vh!vTkrJ-k}>#p?c zq9dbH-b|-%R3JLA1fOQf`Z39R(vuPoK@>@6h!Hz$C5|w%!wRg5-jUk3EP4^PzloT= zJFCIJ{|3%#bAks!r7XXJeZz@rN;f}Ag2g|m9w(XjBVj7=h4(-k)R#`6 zHuaC*u9SZDvH7V}vTd8{q|^t~z^Xul?O?Tsg7w16>MqThO%B&2X zLs81o4><$rJUpJ`VYw>%ss?IRQJU|y@hl(+BJNOg(t_$rvSxi)bRFy?t4_>~;&&Giky{U>@EVPklKP|*0|F=H>&g#Yc;`wjy=*oXUTjc*Eb-645+uZrT zdqW%4zq_gl$LsHN=Rc#l{Mk?9Q<^e)Ly8AIc+q#~-LXH~d*P;QmoY}YldH$GZ0ehL zFcImSwI@0^=bz@>oY333ITry-f0K4`6+1VQKXJ12mCz7`r(K!9c(2dV+J42k4Z3;ycN?xyk3;L}IBPIo^5l zMC{c=u_AsE`(|YR?JoEuInnI|jG_IOVH30N3h=W`9_8p$=DE1T;&uAg(= z%5?`K6`2(ewR!_xefh@M|0t)>)w?tfB=g z#ckvR7Ex=G9NCZ+w0nF76-R}Y$Y0O0wDBFzGOh_Y8KMFn^{N)NomePDn(9Sfp|mpWHnt(1?<3*z8~0~@obS(rqffS{U_$C z3ut?b%i>cDV#^{6?R$=WxDDu2{7jqC$NGJX^f^IF`=RtX?N6Y zc!3ul%gOte>YF z{LfO?y7Hgn&i}Kk+o1k^)c5zq>)*qj|GmxSKX;#~3F1oxooV(5XqwqS)o-(qeeJ3K zIKYtdS%D?$rQH4ODwlZj&tOhA+Hd(NhUcgq z0LsW(QFFHZ>C@Dg|NA6gqT&v$G8*Tiz^atd?9wuK`OGdJ<%K>~0}Ht$&3E4iQorr$ z%jhnB_^^_n42tElG3%o4`~<Kp*TKRlj|o5UC+Wt$OuGARGbkq}3tC1=Kpj)C%V)L;elvy~uq_N&sTHy1K#m$w9mjoj^I8=~D zqC^$XiaEiRaHRE*1IYQ*@XzNT}ubGxy3lMV6T*bt+RUxnXT z3DxdfmO~?g6DB$Z375Sig{X;lqF)gw0N+UvqM2>7;|BOZiD9>~gC7ombL6jEPe_oz zzQU8QSyrdzuX9H=;Bb1qYXkYB_iq!{yKXW0tJ@EkzX(#;lKi#i@#a>#qsU)hk8H*A z)_q>W@@DqCZ9tzCsd3xLryZYckv@+u`ZwrvLv}0Zb0pjZeOkXhc2VEYa`At5jrHr- zy%XDDeMwPIxblBXbgQxTu~%EW-sq_iI@zu%tIit+PiQKRwW+D|^!HG!Y?keW6px@ms4IJYrBbLDqMVt(5fwUpob zqve;bj`$PmH|J>iAy@W}iIzRprt2G2w5|8QkF?qNc>b{#$HyQk?T3z!3vOt|_;_k= zqw!I+uMOr;@xux9=^2|pW+Ns#_Ezf$EIEvObp5~yQrZut&xBvJf@EFisf}a*h3A@)8QC=%TXJ$jqK=`%yJ;*ezkQ=^@l*}EdJLdYLJAe07ZZ2I7O zeZVb8(FY)719+J$cs@et61 ziK;521o1qubRs8N2FkgW{!w-mGy6bP^{3gbpy6i)F&Y}(l@L(Vul4eQSABGATt0|? zO*3Qb_l@J5SzlfJeoE&A{`|>9q(AEV@zR_IY?=DH^cm@Gq|eByuSk>nj5N__JVaHR z)n{mVKV8l4l+eEDgGXtfC^gi-3LCf2MX&Qrei`qw$vp*TfRzUPI?2^9#=d$jE-Kv5 zju3z~6?JZOkh=Na`doit|N7MTzl`^9k6Ks%-aD?D{^jfqRTkeqsL+D`B}qNu%Kxpe zT>1BEi~LVknXde&y7S*Kwhiikiu&l5IDMjDy6S&pTjbwO-R;W%X?OnZn#^^Px@TfqWa**f#sIyB?r1N0$fMOKCq;9=HJlw5X1~_0B|| z%Y2->uOE8HxV}u(vj#UxAR;X7Ldjxeg@>Ys5O2iwy}7X#r^{dMbtxv69&ry%WXSx*XcoiZ#42(cT z?PDlb_G3kH8j<>;@3piqWoAVDL1SP=mvRqSk*?7578TMT+xkmla+aqQ>DHxWu9n*P z!Xf_JtEGjJh`5u9+DQAA$uf*aW*^Tg!iV`Q52CaBAiS$!x2+tE9Mg~Y;;~n>UjBOW z?}+H1V)P2{6vrer_Ggar$o*aD%8UcX*`#Q_&N#nwboG9|H-0O+8zLIQt63k32WPoD z_s^im{c$L@6ZiDu$Q3=Uf)dVe3Kqfr;w*Z5H{Ye-MAE|2fJiFp%>fboOHxZjh>M7? zqSG^FzT*2Z(#HIAI0Dt5m!kCC#pA*ux8N-%RB(YVzGv%i(4N_M^~75STr~WKact2} z!}drvq4TV8H?qMWsJNGO-fHPyaU)(Wexo&A>hY)aZ@Wh%yjMtvW3k#b6_mtq8lPE< zd-4~u%0J?N-TeePVk9}(qPsOJ@-!N1jN^OI-*GwSFxi^gGMGJhtd>$(_G#bRPMP zc{0IwI&`W4Oi_DLr$C|1^+Fh5xSh0uqtsfBTa(NI?D-=vFr%>~e385i3(d5 zVQ#h52;iU9l1)_i$h2G3gh|JF=Iff2kLjOOGUkGcF`@<)*yIDa^JNC^k9iXl~B7W#Jyr6{Pe5`Z0gvThIZOsw{n91;lu#84ucrMTc_N3yz-`RQ| z+j_>9Mcef)%bgfm=;0gWc`tq54Y7ipl>jdFhBJ zLH?RkLP1BBFHe28UQ*K8i99U%#q3i9!Q(z!CjFzc`WbE%QzfKFXNl2DWi-sWKK~yg zFSS><{4_3a5Uo2dZ+|na4dj_)RA*QI=ezTNsQLWcV88!J5xv_s>-*#PL6xJg?`KMB zKXiTXDrS({=JfxLo7@A_T}wdBAE5Q}aI&&-Ba#s({#UQ;b@lIYmo(GAuJPXG$O~dM zlBEvAtolv3rSZOaMdR`QL&jqV_0je5`bNReiSPf0HdEgpl7E`I+m-**?)=-eMgCpY zDX#p7yYqi0vkmHhyn175oIalj?0sy1JgP17KS5pV%72bK|IaRNgZiJSzMm4We-C&5 z_qIj;>FNnr{%?KiqED~3$p37W>B@hqJO2$s+JHXisE;Pc=@Z@Ks{f5`k^lMXZdd+K zyYp|?7WwyAr?~PT?#}<2!EHdF3)CCe#p(0OCocMoYK!~_sB2yM&vEDf*+p$o{|xp0 zwekA*aOZz-TjYO|dcu|eTOYgV)2l7=Z>KU{`A>D{zhO`t(C0Mu(NE&^iT>49{~OyP z|6b~DSN>1C^KaK&{{Q9u^xuDt>~OiL-rI6Ny|)0;{d@cAYotQ|js3Le*jDbR4_@`( z*-wwW*(FT<|8_rZ1)JSZZ)^X5xt|^};NRX)|K$!5sM~x${nYT*@25xY`49KgNn?K4 ze)`i{(&qmU?5FeA{yY2WUQ+$m?5BT-ynd|Oa#egi_)4(fWAg6A{%x?{q^et7`Txe9 z|2OBiLH?aoXIK8`yYqjjE%HB3y_g-R&-V9S^cm0=`S(?qyYj!yo&US%wE=z3Q#H8d z#P+8?cm6ZlBL8!h?aKd^zqsggTwCPdPxW=>f2BMBSI=#RJ}!GoTiF*6px-`64pcBM<;(%mi`{me_q*3(5oAar&)_ zjOF+mNJf!K+ks8qQB;-=Vr{hl1di-qIp2YvZI1%pQ*)91qZkHsR{`$~b+Rl z0j&NMn_yZ%&Wf9GaDo8JZN>=~JjNAYF%xzekdCHLo@P2t&@Q#weyu||h;fX#gPhea zuyc9>Lk_^)@+5mhK0tMcZBRLq`4_!<4_+rV)HZ0WsmPsvu*MVrtAQf@a+sf)6mkco0) z6;u4JL&!sdCg#_}h6`mJU_m)o1^5$|i4fizG=BI?pXei%4wS5DglV53&j93?Blz4X z@lMuxHi^&O2y)x&g4`a^5Eivr$n6w+bB_8cb!iT7TO(9cCGFKfl`gtn*q4s5I8U0V z8>XR#4})(f83{x!??bm3cvGRx#KA%vx+s)m59h>d(OWurQ>c&q4$cahIo?ordxySD z4W)5pHb?b5$vHA>=m+&Uipt>Oh?>!l4u8ea&!MlxN;EjA@iVFpJu^xnr+v8>*ss$j z&=N6L-9DXGc<3vF$9fZR&)br&PwYyds~*2DJYeZ;yG)xHvR2{9ga6kiB4An}0?%z# z-7gYQ<5fxdoekb;^;www45$oKme~rfbqo;L_u6Q0Il!$}Rw<_j1TjNUVq=S6@fKmsW)Fw zYVu0$-t@T)2w*rqKjM3Bgm*}ww3$)~wD|8AJZWv_$98DtTA5tFHSbEWL&A&w?Fhgk zjZA$P-y*zqCjr*%$y-N?p>LhQ4@+bmC>2_lnYF?f{^$ttDi45e6xyoZKI?S}!E+uA z?oDp(tW9XsR|M6A7t%5~;#PeOB2?*gNue}2v^4>qcr=ThgM#l54Jj;G>j`C$-EETH zHU=?A#d`uSWP%WlYB*7awl)1Ei;x6G26P+br@rr#4zI5X6B#U(L5jm0OoCK=sOQ^J zIq0EWvk1UJ8}k=AJE14@e|H}I=;efYV60z`znKp44R_JuDdb?}%wpv$UN56* zw$}hDfFaR5ghGcRzm+2{B55wf~KVOtk(Yd;7$N4M{-#bTu|4`0Avk9}z!)^jm| zmxl+)gYs~O{1blruCcZ*+m1+)iEoLtqDzjXl-UF8BoFw|iT{%{t|TJ4mP910l8EF4 zP9Cv)wBvEVc=iz?WqnBd zO8F?TCo`}&)HCnebA;lgRuQ zsE?7bm;6aC#i`%rkx)O;I6bmb>OlYt1wv@e+qU+YGHV84GumY%+tQzya)N4#&O&@S zB#Uq9d&iqaLOrw4WNxum3k25ddf^GYV@IR{6kutm7e2DIYf{9FD($+2+mm<^sZoo; z3ejFfnc8z=Mz?9e-^F0_A~Jy013zP}(%<;}+TF>H2n-kJ9<_S}Xy)dvHO_Bq|B@p8 zahk0iOso#1q4-*S4}WpIENZ!3kR1u9P%^Q+)eScb{p6Q4 zez!Efo_@M8O*-S1_v44#k-Dt&9-gDMqap&I3RGPjk7 zrAeMR38h3xSdvIWr=gmJ%@b_$Pn#rIV{*j^rDyHf%=N-4e8vAmjcm;$Y|R0xqr}uS zu5O0DhOj1@n1O&bM3xX^LQshbh`SLkGtz$%?eivNKAy(&rdo&k(5`d;S$=<_qLQD+ z2iIkpzOe@sy=lbgoZ`1b6QiqzXF3homaD#e7o`0LRr|GMRWrkJ=+iYepP2U1rfW@m zDX%8W`1{huQf73u5P&rh^n_fshBd*~L)wgQ z;1Amys3t*QbONva^vZgvq<(pb$tPy>qaL^sr~A@SBLTfj3`F&Og5$dOJpCK4*$wwR zX7eQh+j7+HZ&1mG5r(vUo~rTvV;dg8)E@0Ca(F7ES~>#E0%yN>-p^tPMK9^+?Az*O zuX7XM8v(=@ewa6Q2ifqf)jh?+i!f;RJSm~Gojs2?)B_+c*$1UMff;(GCa%J)xy%wK zlk9-}wohW5i0Cry_n*M6_p=rwv~-FjfJhqE#?xI0V@DFq?k8 zXGQQ+n{TS+2>Ko!fugFZ2o&+jz@6@o{*C&hafE;$A|KyzLqdNvkk>RJVz^gMf1FXe zOXTB({wNcwG!gNwk&KM>zM08R2 zeG{jp!UIxhxg$6~;4@L^8c_7kpVvm`Pxc+y*e<`j-M*+UY1WC1`JkHq;$OrYied(A zDg3lu|8eO>1$#B!cQ;FS=skCzU`@y6Q=^ZO-L~0lJN{Ov#=si)y;fn?pa#pcCyi#naM5-&Mio|!RqVyJAZT+5OTwp%JQrItL^Q8hN#h#`Mtwh*qai= z@8-XSEdRP$IWi0H?t-q)`FMm5mXWz5)VpxKRL2uKg+crKtt=#tnvS5P%$H#GSNz2} zQy_th3D!&x>3Ge>L6!R>2_z+Za$;l>Z2Imrw0;Lir_#_QBXAkdQV@zqdyNCEfY0}L zh=E(EJ-Nh=h&K?bO@H9mjx(t`^!EDcZQi;yJ5VzmD0)Q8qWKJ!!$Y z)cXoiTEYgm+$9RfV(~t`M34o|8qVxViMOx2v@iNW^^f>>XggwpL(8GbzT#))-=zFr zc^94+6N)Q$19=@=Wgw&=?v(-vY$!jXTQFia6?9$F6sfOB#2T3NVkD6Ger%Y?j=I~? z6O4UlS9FN>a}Avt>xENMJ?5xWx48R3kh_D`H}luH{L>X$9*iFq(8mK}D9oi@|Fdq< zdE1L+1D4o1wr(SHj_!$V;$)8zRHstpzt>mOQ|PR1v*|2dtns{WzRPZ*YoyDr=U-=} z`HF|~qv&q0$5%XnyQatLi++eQny@iDOwF~D+R|Gj*Pu1sIXcZ5x5qGU(fpP=+mbEL zMnr8pRw!KTY$^t09o7nOGlZF#LzDBpL)&Rk#$?cU9NC-A&Od!5)H_0Zp$vPWnM?=! zq^LdxftR`V(6`6;GlRRVI>n57#u5Pv^<Y% zc2n<&3`!(i&~GgsLG!HDGMKFOvcFdkzOjpqp8#<6Hzx`>IQi0Wx>N6RYxyK}N(F%9 z@UeJA?e0$L;zA)iO37P|m7MgJC=*GI1$qxpeG9|cQkaeeDX{0t9HddN?;{MT_VTy% zZeG+dKLsq#;E#pm3{~R;G4>d*Z%t*$`1y5h|!ywiIo>gSKaAk16)H>h`Y zCx?3APQAITv!{vJkWy)2m?d4qZsCnysK8^cLe7C=I!&Tzq^Lhvy%0^-h{^ODp)Jld?P$&JF&P7tlEDwQwwKp@+AZGlJq=f*|YOZ5>YX%1G z4iq9}S^KadOKl^vd_2LBZ5il7&?}&_I zcv4&~e{A7;Vb-kNTUbl%KpG6(9)X59ji>64KfWB5HAE{|)m_`+_91>rt6N}FeI#hf z*-g){$QAyByH0ug^lkP?Z&6t{!@46Wb9G6=fK~MMmnjM3`AN~$(gGu{nWf#F?lQ}}VF(DWGJ?&pj%vP5$e@Axk!U&{ zb_K5*_Mt-Cb1BaZ0Sy=Tg&$?SnDbc%o~(KvJ#QYE0c;-It|8oQRN@eJ)abE+Y{X>v zA7V1A={_0JW5^U;Vs&Obb4Ig_ReFpOKzu>@LY0lwSy#8?mzj{(dSO#=1No;yvo1-c zJ}!L$C7P_`>f4H4+=>h|!AxZx=Ebb>DrY-IRH|3_+^Cr{4wR4d>-g6?3^s#7M2e=C z6?rae+KAZt-AmT*QyVQ5M(i|SnxSBYh0wlYOWIc#JCDhf$=YMk&uV9!nD+=T^A?=K zI_2+11flnMDS4#)k7yOOz&k`qWBYIVSU9=ssI7 z<4g@h0b(NQC^u=e%o^!s1ghX`FT=m3(kv0TXGA5Qi##99b1jm5S6}+_r_gK2>L%~| zY>koL9=KL@ihV7+J|n=yzt$b34sO{MwFa(5tty3qR?)C(sn*C;GyE)sVl#dk;*4vh zc*dVmMySg&jY#R&_R6At1AiyM7G)ofUNG0bJe{cNL{ie*sB0Kh?48~@q<>v5Lvf2b zuyPlp3xy75{`o*gmG`AQ&Q;Ttb zl*;U$UwL2$!71(8eze`i3`hx@)=k$m@7GkrSdA8l)o2F>O&J9jN;8T+uWKMr>hr3j z<-qIE6B@H7^A-lUk1C={2~x?JdMmEma+FY6pT-p@gjsTwP`F)8^W=)(gm`jbvm0}j z(Lwo&#S|9}#r04wm8 zcXeNz_@IaFe=njZn=EwD*t09LWC)A;S(}HaHXY&YDAsX3hC;?Vj@Wz$`5Ap|=r$B) zMlT(@i0Gi`lmGY=t$K||2R(a5{e;L>_y4oOgusFgj;A(+OLT!O=^V&L#9g2jJLagG zL}R#_OwF2yMc+AhpD#hh(DL`IGjEniWhv-hi=9Yipbt^Ktd#;CP?EVh{}gAv^Z5zPr>HZ6vJ|^JSuc!`=$F>o~4_ zWJ;2iRFlHLbayH{s+nH$B3txmkACsK@ko(m?&=!*LSz4%#vJB{*cVQ`j26f3Jx8-I zIQ}<*9L;q81OJ;;!TdG;H{Sab!ecaUZ*LcK(aI^UBNEToy$B7OX$Mp!@ChQsp7Ova zU@#=%tO`R@lcy$lyq;oD+9R8$&V4tq1O_L<0dZ~3Q90D0IXTBUDE{*SvEkIXerefg zt?XS|mt`X=#~j#M)P^-LpeEJ-GrE|O6{1E-=Mx<%9R0DFNYyzTAx))vn9oI6W{}i^ z?i}!1{f$tEkm>r5^=AU|LMq;(UDO<3ia_pZZ_&|X+_N~r&s0`Cr0)RhEB>#)EtIHC z;<LYWe$R_ug#?q7iD&)jmln|UKuu{v}VAMi33qxfSy3WM@K3dLb z&(u=|ZtYfRzk2CUP@Un3c8e&aM;}Z_&79haG_;RW^c;BPY+2RzX~hPDC0+$+0Qjh5 zjG-RGLY_a2F^4LB05K=a{(cBTne|V4a7GhBCcgCDVSk;^=KIo1%J;aYw zBCOtW6)}hL;T@4?VbhbG?;2k&1HcN^787oBzhuW?$G{oPzfc{1rNOARH#wuWRsxwa zWb4HFDO9Ql?KZxy$xvslZjdOaVWPc~XoN|0Xq6f1S^KBzv6V2?8Q<^+@#L1!=5f>gQi7^#~$kM}l|Y?Pw=FVb)_t| zW@g2vxXf>}k#q#~yNR4i0N(~|PDF^p;Z4*_Ua&w=u~ezozf!1IRw{eXCbyRz5Y-5J zPDqh{>fT*lIBzHWK#M?fjdv7UYC+a;9R{G%n!e(XqN|I`C~>x|$@}fG5V{TlIBnWA z1N@YiZ2}e(cPh1TaL2|LiT9x&?}YitU>Qx#4+IV)Udq-LApS;7MOP?UbNWjpMqj8a zgxjwhzD2Do;wPim| zj=wNXit4U5K|ksMJs~;Ikv&K7nTwFwTox(RMW=H$gbaiCcHi(#K&= zGlJc)<^;Q%-dZ}{!9EPJZl~2wY>|N-qDdT;!lcSkM;0G}k~@xeTISeu666ZT&)j|D z-;&s5k$Q6NWcyH=>SC?mL!WMwD=x;=)?7`iZ{{UVO_gQ=w!-U3t7>O_ z9<`Inu_D}?-wX{*1bv)4JU5E}fK`oMn(V-qbDM$t>keKg5%}I(zm>aisr_CgfcW|PN2VjK3HeK)>TiBJW}?g{1ua%Ma~@?9r-kvTcHz5l8SI%>}A*RJ>06l{{DR+>+}aUcH1W*xM74UDOR5MDm6ZHv zYxmF!m-no^p*TrqMOMiVY19bkd$r^gbXvHQ3}X0DsCEC%2y>Ml2ez)Wt*cTV*4Y?$ z%UJUxG7O3;(lZbF!UrTr-7_^k5)!YR!cUMy+?mg$9iNjwc}S#M-$qqmQQ zck(QV@V9y;H`YS=X>YR@3ipa=x0xJk;ckAYtN;2hoSXB{xAl~XL?km?Cy)E%tf3^w z+Jh`my-W&TEm=mip3{zKrdVf81bw%`l&$rm>^7e4j-O?@9`+t~>yEQ!B&9HtQf`H% zh635>Wprk)7xgeuZ=Q(uA5qV5#7dzv^ZDD`+k9O+7;hAMY>Z!bSCMvSNLN#@5U&HF zDc!v0?U-wHQF$LrKh4yn$oHDuY8K*DY$B~_%bYN&{rs`ouYK`_7tS$QdVO^ra1o7c zB3sU@I5j6QtG&q(tejBYFidz|bY{9{YbSmtZmRugM#SJ)H1y2T#5IH#v%)nr8wUj; z>=iOUbz}Rkmkgv*x?6Oe4t`~C;)zsab6Ir{v!O`djK`mz5Syq6eIR*m6(xb;c~(+Wt$u)`nodsn_c-;cnaNo1eqeNZa(;T=5~`FpcsvYt@Z~Vr zSmt!3C>&DNCBr{}4UGNYRm8EBP0-sRuW513xw=vONobcXUEquc1SO4n){#osk#!JG z&Ax#Z1=-%&Ghc9e!rCS>9qXGT&mvnA@ZLL>eVvwByUhJm*j{90^pZ0E_05~@=kJ=r z{J$=fnDsq(FT+7Ei8jesF7V7)n`DU;5VrACqxIr0;j&v!&=EyoOg=6;BvfmmgvvLL zxDuqaoZ!TRMx7(=%u$E##)f0EvK3Bin|=~NNG9EQweDvYgL-f327F!D$Rj}G-4rZxo)4WbhqcXtxD77 zf81%FXjPg{Yu#y{Y*m^;327F$D$R`vX`X6Tngr?J>o^4f{@z1%_ENxYqSqW)=->Nh-mb=S&u2pHCN=UP;RcSUSq*>mo zGzSvWJm0D`y`Fcs=Y>|KxgsIWi>*rY>x48bT9xLe7uB zB~bjfgqIT%U$*-qo^tLXaU^PaOuVezvbLP{YdOvMgmT_$Rhs9%i0=#M9x82Bn$MEm z?U5~h%XNDIO=euq+|a5t^M}XN1)}eZk@_%RJk-qFnvAF7w>LHJj@du034;;yU@y%RHBJ-NW?~*JiG5A1(8I z&%gb)E%Qv~dVp&K*8#3`wlDKc;d+Rxoa;NT^L8xr+{pDP*JiFGTm#-&=DCUMw_Mw} z+P%BXGl**%*Hc{Ya zuH)Wc<{88FYp$2MKI1y!gJquaT(h}e<@y`f$yLidS8(0SwTA2OTpe~T^YrGrn(Kb9 zQm*}6eLh^~xsK~Du1C2xa~} zF>=)CO9NxZj=OC998jswmXOi)k#=uH{K>LD-E$*Vtyp&n`7A@KckNU zcc(HB%lAG}lI5s*4;eNQbCR75Kny3;@g~d$-bR12^p>W5aCtg}2;6Lq zgs^RBYVF4|_) zJ4yVCOF3Lc+?vq3Y%Hhif=XP-tHlAXxz;q}al~P+Gkjr@mn3qfG-B0!X~YU}C+%5H zgGJGbGn#1y$2|*HV*Uv%pfwU;C*wZP2wYP#r2%DspZ^IBx|QRK@;|yV;ONJc)wJm1W(g`OM3j>sppT^ z-i5`v&g+{e0xT+SwRf4=O09J-$VrHkA_0ulLG|H_P_8qL?k@+Xt{dCY6U1Y_cMn0@ z$e(3=b)V#Tf8Cj`Qr}+GyYkggleEt#me~uLMUy<(##_jr=I;h zjAT`*q?3`u=$Wjl92Hu*B`On_ywCX^$9*V8``Sz{+~qidMF-&}*FO@dqW*A@{LwNV zy=wOo>7o2niwgF6@)t!zd+U#|u1s=#Eu>5|{kW$}mb4kuG;?qje?4m55-A{(RU&z> zq&hgS1yy+=$O7aDQ6Nb}ifDS|r@9N9I%Pnq(?H)E`XQsJR{XC#xE075g*DmOIku~* z_^8oS9k^Zk{0nk|!7qHSvImAOJpJ&Qqh)^_1mpEvlXS#KakaZ<+~-j@0XNWu4%8hF z3F-}|2oAUt^_aYEj_$|is!U$T>b&afn&&D?z@j4C(F6lW0}sh8kW5($fE2^^FoJWIK= z!pr5UU|p@?CXpvviyz^cERI=e9NLnj2qVQWMz4d|gPL0&XE(*)WPRi`C01+loaUKe zkhmuKgA?szh<-begs++v|m-;<*mD=KdZt0IR z7fUt4kkIX^z7cZS>t#ULn#5KIGnNQ8*D0rd)(iO1wU`t${;WQ4A7iAdTqqkzGc<`v z6@-!_IqN2r)aT0dsVaw%BU4?3w6~jjHBCd&a~SFwO8%SllTK(zKUlD#-?%4*enR4= z=_iRB&`&;Yihg=R)wFlUg`s0|lXPT3+BkJe#-FcMPaG4Yqp`;p?Msk{{I(tph$woN zPu|MpPPIZin6_5ICJwbv6t6GNbM17FwvRd(*eUbFt_6NhATG?g?{QyXaDLYg;7poY zpQSh{ck!*c%v*HmT;IH591;gJv*wuB&xP#K-jPk7)uZN>rd>T6&0S*<+-v5>>CRh?@ifmK13hdZW#st8a)U~4qABdBms zj2;YZHPiYSc!HcNmqqNJANxExe9V{2qahA1-;ysv>kfw1$kgg~UFFNAeCby=7Q6s^ z+eF2IA(r76*s7PLDkvkeWEPS~X;5YInPmLzUtZQDqPX;rDJ0QwYSTPm?ct9$&8r6f z)^RJXvTM~HeCu0-3u@KDPfm#zeUXxUME#U!8sDKRI4uSFWv7Tj>R;&g*$ljY4=v2v zYA4xQyR9T9LL_UIx_}h;i4>1Vik07|=^7N5z9llkG|yV8hA>KBpwiS~<>Rh8e7jTX zTU@F?lcDSj)FEY2Rg2FkOb$3s+HI#^V5PRJ{u^tI&{_!dHkG036@lFp;IRkW(^I6b zRza0|nOA07IPT1s)E9{l_zrz!RGM|BY1SNR7Esq+EU%SWJ2J#yFwPta?Sz z_ySvvllQCf!!pOmNVIJ#X)5_76I32MOX_n0b-CL7 z#`@R2<@GVH*FQ~29ry{a|CZ_z?sbX7AGbOT>|BS@z#mU+hCgby2=YgVd^21USl$l9 zL)pX8$qeXh_1Nws(ds)XE!LErLU&!qjiEBv{Ku8)*t*J$KZiYHP3Ql#>780v+K&&= z^a4tYHT|Qz-A(_;L0(VMuMIQmc0aH6=7lZyflwbk8xyrK3BMd~qV)KgnN&6-b;mZZ ztK@_OQ%dIF2v&#K@b?wJf|q7|3LKL;CM~}odtdu~7!8LTiazU5_T}*tL4OGB465*r z9a#x?#s>dP(l#FaLA$}=k3QVw;8(xVga0%>N2d_yTw^-L$+lEjYyIfXIgb%@mVRx> z7G~7~eXL+BsvFcaAo7^AR(25aRK z87^9oJH5W%QaHiLnEWUYJzoNPqsx8E@ZY zWxW~6dUFDhPNvVgmatIBI=rd@ld5D$I!sESg8VA?A*Y{K*;VRd&WPy6eU(|!!?c{`}J?Lo zfz%Z{UDm}}m+oViEQ&Bexss)M!Eae`nR@k0^UwJpHjdt#<6gLyYYAZ$`l2dj{q|3> zp&t_m5A2sAU=}W4@jvVMRe#cx#Y^Tym6{;woW<)Dy=oyXJh@0#txd6s`$v*C9uQ-x zi)+>Lsxb>1Ph9%@eAIrdTIqalPg*YhUEkSs@I3TTvDO8`^~0FS_1aIWqSbk>*Mp|> z+6bixM#!R7G$5$9|IVE%iAGlsaHaC+yGbSqHN75>r;5?5{98A@{&cWOdfg!D9C~$i z=p`zwYbG#n`ZuQ1gERSF_bul)*}qHqs++Az65<^sC`Q#2Bf+R5cVqUm+*SYF_4--; z+F||6!J^@?^d|KWmIefMfeiB{)cTmrz^43DwT?|ofjch~hFssTpTQ#<*LXN(xcb$v zZhfH1e$Ab)8{wBKHRxC3tIH&2@1Q5~vk2v}1||tT>RI$?Om5Z1uGbqRH?y)i>qaQO z;RJV9vsAlWgLiShu}lf<>`>x|JdP+)stPX-(XP3shGvauX>p4b+=pHudjFzBKL5;o-BeD zn*pKP(>ah(BY{H|uSHg<*e&R0(&PEE+uX|G` zz~p6W^mg`7TEO@O79VF*R|wM*;d!}+(mHPA^Zc~IrQ&1y^s;^gIna{zxSleWQFv=U z7T;i~IZ)O$epA%ThzwK*X5nnd%p`nlp6<7xbOij_@LNQS>TlRe#hU-B+2|&2``{pK z`yS&}LOEj^mP7ml;eV!_JP|(XNxZ;S#uZWnL)=YXlN6h^$1N?z{#ZgW}OsZ)A4{)deTV zmImGNn$={tFA3{zzl+b2kLtU9r&>s!?7`Xqad7;iJB8WY1; z{1rN^hV7RnqNVmD*!5~^a_Hvkw$o_3HrDRTCNXJEb*F}WX@_Sy6Qmxam#Om57N=x)vy_|$a08vSV*cHtPOq;a8R9q&Y zXj)*ZvfiDvR>kiCw3H)L{$2U^6KTxADKPl zD)pEoL$LSePv?M(WW8S%&7%WG2sk6y9Ah|U)E;b(F<^5Pz&M{|2CcG(t0|JON^{&T z>V_eJF>Vo(t_`Y72lFFqQ*Mr|o4cWQP<_o=K@r#;G1gbS_)BUN6JDRaPV`Ey-Pv-z z=aZ8B>V$+v%lqXA(Q3=}`sM`5U27pCf2gK$^&<4E|KOKfgqEeeN_~mmDkc)* zln@jVLk8)fT{30srLBBP9V67q*9xIx?1w7OLCa*i#IJspK&ac+L5b^KuiyN+y9Gu~ zXj+iA#5HnE3%*wF7S!U>&_oM%KOJvDPe)qP%}}q-PLPyVlAZzFU~70T6>_nlR5i4? zNfvZQp=Loxenx2$PRg|tFcKqlxPzT)-nrtUpbdTl_h8(M6n)`Y(ChEZJef7iJWq3Z z|FO*TIaj+cmw8U(8o~84*PppEzgp&bo~x2;Pc1%8Tz7qqJ@6ZlkiI4Te(t&Ub3OA< zo^cf&;GWAqh~E&`+gysPL)|h@2G@W?`1x?1_Z|6vzs!?%c$w#0uC#yQ7sNID$TH7j zu60}~(Pf@xT;*K%RvTO%?Bn(%fsH%3K^97oa6uNa{N{uh=tnYIuI?i?@NKFm3o2XC zF7k;it{#v64Do~{Ub%P94>o zJJ9!)J-N$;g&)n^L*>H^5T-$))nK2SRQ64z=Md$VAhL}_Btt9t8~pw3Kxu+2L9*jY zkURpOoZw1uaqT`0QW|$9__W5XwJC83l(;|6Av3P*9(V_wISBi7$ltPEwF%5NQBC6x zp zPsBk@I$oIDFND)()d_MyC0bydh(J-^bHvdElf}4)WG2;_J#~HwDkxAt;2--P*BUjJ z1tDP;9Y9Ri3;F&yl*~S0UhmPfC|!04u)3@|@Eq#xgE4!dF%)jGE>fj^pjr&k!GW29 zzH|5OWCX;Aka!8A`Fs1&5F7hBLJ+zP2K;LMBCy6=K z&ZJnOC&h9#?58yM$`m@OkVRCGZ?C3uK{e}hM%ik)k10|FXfyL75GI;{zD@uBZ)}71 zT7zq**?~fhC7~`aHSM%uc#o_o=PBeT?bg%+)`p zExzI)tuWx4)qN18Bp)Q70kK{<+qAZ^qnPf(co*b%O<2C=t!wzFsDrZgx-x|sAgFD{ zjZj-8LG$?90tB@1!UQ0oVzrbkK>@NWB^^Vju>c+$DPz(ilNMQ%?zbi_h)h~;O?o6U z>HdimtT0|f;1dK2t;jFA!^SoDTEGUHMfoK zV}N)8qLtj$C+7=5_6TlcPu8CY4`)pDw?f5@0J1MKn19G?df@6YeAMy#bVh^mJNtSz zfva_U^azfw)~$?a@V=mWWe)>b-^<$NEB>14f_lT$)}V14IDw$*Emha8um{KDJ$R_R zKK6}Fshb{D>-%$JZ1q*-W?+edlPP3J8C`v+G+I6I1R|z`9q8z6Z^WGl1n%V`#@l|5Mdw^b`3bGM!w^ z0r`x#2WQRqth7Hu2M5e-Ei;F@}|Npz65h2tfC+SpG4K z!3EN+>Rv+7tUdNcP82O)_+ye37T6wNSeUfQ&N`9U!M@^u@Sq_eip+%Scj~`vT=1V% zV#6F*Wevqadvr@A`T`lbkd@^mpCBvCY0&1Hbc>U-rk9iL0|MdRT(W6Gn-HCWCa)`C5o=0=xhnS~`Z#M33uOabM??n)4e`0pjp)z-PSD^LT^(QC zw8#(>k}SM69f2rxQbXNhz4vm_7q#~AMuict;!QBsTG&ATlIy^3gWw#)OS(DdU1*J+cw-RKrit7jmwy{I# zBtgEFO}xK;y;@6;d1_9#CaR4)CtW(pb@M7|E zggWu7U5OWCh!i5;jo69NB2?-yb#WD)Nbq!m_hj0eGgyM_Sk8BU!X(~Z{chb)tC#dwlHIxwF`m}+BsO7`n z(xIt3erc`UzD)gyI?MqBJy-ozbcmH!mSS0IDg<_N%%S|G%tKC`vx}c@0P-}94KI$B z_N>&huet_{zDQQ{-U2$Svv#;)LmX1tqx{u-K8uTtZ13RH!eaS9=3GM*W$`=mR(AbC~G#sEx0+Zz*V&$l-sz9Kyc zQ2$}OijS!H4Gme(2Y_)=RLwZ4rFhy;7YI!4729D5E~1n7*PI*coF-eX!`LZtFunPo zRLKO#8f7;ozxT~99!-3zDfHhfk~?ny{qIIJ&)TP|PIU?IUS>uTq0#vStVSIeUcHw1 zfwa~W8wlsJ@%m!LS}-oP03SM4ACfs^F@u7v3rLB4T#t$-wUZEUuE8;FeHTw|4iv!I zKN|r7N~*uzDK$$q0V_jZfd&s$T3sZ^zKM0w<5~Pq*&}MzTP~q}?7RKFdjJbJG$r(l zMvO?qqWOrf>BQeXp|K*>N59AibpdJ{Iv&|7NigHY5V`wZNS#$zgPd<3)PR>E4+2dV zjxstT3L&%tS4bkR@M^R zXQ5oYJXI?LcL%N2seC}33}LR0j~p9m^J}a8gW6tADDKGGhkkyqd7;cd`^-PJ=AZqZ zq$E!{M=I32_7~ClqtU0Ag!^ly%|ylitbMLU=6TGcOzT@ zA4zWbU#3aD!o8gbpgD1uKR|?O2$N2D5`Ig!FC4r4s7YTQ1m7j7J{_*Z*TG}@(JVFK)wiQ&J{7Ik1^S9>pex}c$io9!KWC@BUfPIe)fbi%l!O5ai=VHQFrxMgnvK0$|EN5Hs_$dkJ1Ick00r_pMW zE#avX{Hfxqzr%dXhnkFbNAqzmI>jrGsf|`2A)|Pcy8VhKiPBUzIjGkCOkx*|;~V7I z$YA~@Vzi{lDgnsaq_ZL;st^W}R8BT63HB`q$|vL{is8QY(o< zAx*&lKCHdKPY^mhweoHDnR;+)PDj*s{R;_PzLl0si&5E_1`}wN=Mp1)|KblB5b~8% z+Xj$VP9NuYcKVlP3Mb43YHKH44C5M{9v?Ok!?b?E%Ybb>-z?n#drPjhT81TopcczG zQm=o}6}tPvn;8ZW;RSx0ex)UfJia?2>j0{(aF{me0pu`HxJR;fpdEzkH-JZ_x9}XB3|L zosgn8kC~@5ib<#ws2hF}dvw40IkS-0wQA@uo1b|j?v3H@$@q2Vjh;h>`f>_GbXTrD z;b;6b=s9S6Q6fG5?N`yF z^*U!0lusso3g2jiJ2#VHFPmmS=4w(+2BzV{82->cfibjyzX4-#j+AP7$H9BIP+&?7 z4-Pb)fwe`8z<_iL6^Lh~)sc;a64~$`MJSQi2qkq6JZ=|EZ-`b%grTW%yV(V%)FA{y zKGU2l&H4Im2`?)#S8~+Z4>#BlOh$j4hDsRwVdyX?O8r{?f9AdfiNi>VjRH&P_IBfZ z90#Zf8KZ`FV7H|OJ-Z5)+UWeFNL8F1Y~uW^mir3QT#B+(wQU-Dk>N89jMb-)|K1D#8_u`sA6~^7#rZs{O=g`B;u+_ z5}bHNjCfN{yl#_ObXeVZoQTHg#GMe+7qMyJc|M_ZmB23#c$1BMUb%814i4~J8D zLDl}(vca!~(}sRRzlc01_~MRC&av1~C*ZR~$7Eifo`1O2$^T6bv_KYd;<5uM$!zc}ZG?Ooa$d`Bt=gjLZ)u9LwzFCB>%7VJmHd7iR4I4lQ& z;X>QM{n5wuePNL$<7mWJ;VC4Zg>@>Ee4<1mu4N}7WUhI173*0FVbjiqfSHhnU6~H9 zsDX;bioqQI{dMp2l{ewQaH=_!tiz!|e4sK@?X8?k#*vjH6<)h@j(Xt2Pg*!+tj8~@ z5ryj*#g0;LjBs=!qG?cVa}J@gFZc(1!Du!|6CUYEygb^Js&i=SV;#?0+`7E#gU7&c zWDf6?Mft<0)Zo`QgYRYy{lAj{H~`b+_*J3*rJhIZ>IuSoVwTy4~xZVDjn!=X?B(!!oPc7syST_o965T zSHvC>JCvEGGct^lGO82nBq#$YN{AY7p-B4vG|#2|KiH@x1DP*}%ecdRuR|W#Q%ueSR{ zvjy|k8odG|iB!cRKU#bnZ1vRQyCE2g>w6)NxhoNIOk9$FJU2BV)Egf5+!|xo+@`{> z$LE2j?}FXvJ6ge!iUx*Kio!neF&@<8g7gv5XfN+cQB#TgRoT)cD>3la|4E*PWNM{=lJAF%9#B*3AeAv3Q| zVut)X0E-b;dL{4^LN|1lT6jM_fHkmHgMiBA83SHjY;3eTu|P@;4K{QODsob9%uV%_ zi90aJ8UNcJZz4`@A*{SjX@HQB-^syI;kI7EtHN#0&_Z!hyla-4k@q(4U{j49vs5m( z>axq|hi#*wY6H>>-3vO1CS>^L-k~pdRx)8C)Pk<0Y{uwcN)E&W}dyL7=SyL2z5m*=HYv<6`V z=qP-6N8!oA;RS{8ZVy4HgtvLS*g2m5vsD4pY^5Dh^N9Xc{F<6~95q|?y>QMkinrg1 zRM5IWM+bXcg71r(`J3 zU)p<2q_axfvD4}=sUHRa;;x`LyZ_G;iW~Xqn4uc$JY@@{yFt2#WlDL<9-}~ejG0#7 zy9lJ%g$7Tgg=7Ks>cqDZSZvgNW{NXtbe5#mP3KD zjgnnGxX0qocDDO6yQZMNC$fYz@Y3#e(Im#{>vC14qXg$&O$G8%=8325Pl!pVv8U`U z8WwINtob_LG>s!g_-1U)MqA|!6irp3$oq2RtMx?0>dn;Dup9w|x+VUm9(|1*L6V2CCSj5Ic;3`wToAQ-Vw*2}`dF?5yVbxhWj=*}0I_7+B14#-u-5l}*E34f^zI+V{#HFPf1OqY(U4rX+obGpp- z3$|O>i|=o}NakWDoQFH-kk3u3FE&%?GqN042=yX~*fCaCZ7 z?w*xTv4AHJuXMb8S*63cywdS??$`0(H?7j~4gR0woqfFM^v7K4@|_7@hgO5k?r`m- zc)ZN-rpdyxN&n`0kvk;K(84b>ceAf9)Og3dxpS%5Mya23*DrXEfk8W~31Q=T?`Qvd?sXKRU@9os=?X zYljAmrnf8?J8>b0Y^ZaN`OcK|_APQPzPMP#eZ`wciVtiz3qpt7%6Gs+cwRV`ws>gqZmG?Z;nc=EBECFXrRl6>%-Br}_Nx&M z9Cp$W3*>5<9I$+!cpm!}qcLwTsWeICa(K4XRKMSQUSe&JI3!)hcX`WNU>bXcRGN@# zOdb}UjUNw8r;o`3eMnZoB~y*BxX`c6aS|E}A(hZVmz>*2KtE~s>~@bgZwr7iQ}561 zPS1de{k`D_y>NTC0E|nOTx$IX9KmTuUb`BUD^e@@Y@pf{Fu}j2$nN^wl#9u-* z!Mrs!I-@1roDljahq2?vU=DBq+!{=m?@V(N;7mp7H7Q(`MlHv;`L>4MBV}H@u|0#3 z@4XSHou~f>OaJAyXY7fFj#Ol)R-Xdz8tKq-|Ay|3ri0iL063erqtgGP@M}B+W@E+} zOu^+pBw}cyXTTsjXlK(gzR3`V+UzkjuKzrv$OtALW#thw0bAw3=*5zJCs^k3%2K3* z{~>)ewT@FjjluxL(Dy>L%s~j}Df=0~WpIP@@B$%Ji4yzuwxSsl(uxR4s4mX{@Xo)2sD@sSzsu_yr2}TS z_m(Tj?eib==ujq^RhBHOhE&EwPH;TWEuKPd0mCnv|3GnrQ%L#mbm5xEf-iFXJcj=K zXo{S|JQtm@@pl?I_>R#%gI}Ei*>^Eox;2b{_5%IUzXfMI*-K;?ck*_baN#T~`}aE5 zNY*O|e`F~qeI>&PH2E~sp?JY*mV=S8E)M$5++L+Spz<86DTesI(luC6*6~D{j!b078+0qX3 zo^C#8P0_d-fmq-ioz6aOOiP)Esw}ZB;~OgQmbWx8LY?vm(ouz|)*TW(0xN6@EGy&^ zG*R8okENX?2hb@ziSXQOg$7YWKNX2q7HwW=xbnq{ zonD|CANw>`VaoULwvjj16RYr0v&VQwfD+ln|BNKIqAOVkiOzFFY-50LR&;jtlOI>H zWKHGSG)2Xb3Ei1ew(uJ57Nx98(^)vhitn9r)%_tmRcC*QTNDO_xL&4&qk-jeFvOu- zXzyLz_-dJ5Ul_;$=|f0)T6~w6g@1?oElD_K>7Mh{eJuQKshN%$ZpD!g7}G|n11Hf` z%$dk7ovA&S=>E652LA@F2zT?keU?s*f3D?o*FpHv>5f4lSiO}}ceT2&=NJ@NgJ7j9 zR8#rheGFpFy`}e0e~z9X{-e+6d6qZvNYm%lj;`1EF8zxGCc4--ira&t0??^YU7Nzu zDm1LzKa_U`!XPeGm+-EF$R(pI{6lZ74)zy*!)Z-j&)J&F2{z;;$oEwR>a{PR!%a@L zg`0}}q2R!c^(3buf15Ygs9^>O3m~&f-*iC$>Jx6cvvcreGN3((>o$Lykv~kBIB1a@ z{&bBH{DnEtHiyOv8zCR*L4~UhT5+b zj#dYk;N&Y-e~fgPB~FPOG=b$EzOQipA37?EnNCja;}7C92nV)n!Sdf4#n!sGBp}aXv%+MYLs8EUV5V+ zTW&o|cWSZG0Y9}X-U~+?zTOszl0#D%Mm+7+7pVT6jKm(K-d7*$V>J9Bfp#=!MqUq& z4@J@^!B_CmM6A%3e2WJrnD~wN9hWYHDP# z%*~KnTAj!#DSn337rMW}cfwQlBrT$ay+G3{-Lfqz zGQfJpn{t00A879ubw6)yY^?)Z`<7K<4dC%NG+%FH>K90_F22g)C?J>ea#Jz8PH=UP zw7IHmpHc7e?=aqM?#)x?AzwpqIK=BMbe4~U$PT-^syezWlunQMLS9eADZK&SiYKk; zSTIekdO40{f~lUeAm`~=XfvY(zEa_UN}FRLYmtp+Pg5tXi& zyYM6E^ChFq2S*hTcJMKIiDI96=^3&YIc31sGrrN;^`1?A%?HPn_w#I;oKQX`p<+U> z@|<236B5gF5-TP+%X6F+6MC2D^sbnYRGyPmF(J7;C%IyRt31b5F`-X+PM?YieamzD zisOSEw=uyR#bMe6qIsrpx{2Z{a>B4^&M;#_S~Mrkn2;XLNjD~pjOL6qCX9;aj4~#S zj-uXBld<(>%$>p8&8B;-Z+CD|_>mNta0`2(7+c~Er~_9$MSpE3cA1<64jHBOV43;2 zxXBEdhFsL%k6(+KkBfOKZ{(tOx8fn-W*fmiXpffG_wd%KaVM|K#5y;2?NK<0t#ZO)e<(S545@q+&&4QVa3=4mN(57B} z?OpIQe~Xx(90{nD8{S4>SQTE9;$7HV^p2_|Sa`Mb$kZ~HYnsGuGaQ(7zeF>@V zrA5V0E)`|^N3=41{(8#yY)UX@*Vj&TB_K6e&r@{Paxi248DOoCmsIz3w~~gOuO#~n zSnJ>EkP;!_*H;K;po?{;y1cIhSjZpQ5rUDDV*2qeXDmqVkx!N25{GE$Aa z@|_IMGNz}5PkI+-7|G+8pLBQ~j)jAaKzq1)M8?)|ReQK?xaaY^sgALAMnIKq76zS5 z4p4P@B<0wemm-B)j2!=Ai1<8jb7r{ByYP!f{!TN%BE9^SE){Fj_VCsb8P)Mp`%~)7 z8EUjurZKxMe9F6Ul#zdA!uj*O1uXKkzo_eB_(y4;eQ=-*8%t4a0b2*=nyD|If*HsV zfdI0KqB+PE4X9khL7igyV`Fq>-V- z9jo`oN{7fHA!-W?;rbyfnm!6?$D2o?z4Be?Hw_;pB2ffVwzSmm)dL9aYh}Ad7G01Q zC#2%L31fP9Kn=MMO(Jpj2?j&P^ZAIBrgcr1X8ijC|0Mfm&jMe+mjd%qX>Nqqj{lt_ zy7cDX02F{oZkIgpR;+mi_cl^U)JT5|X<^f}S{LCTIMl0GLnh|C)!<3}#jwsT_fOC6 zCt4_Y>q-&ZgagsO+(jp&+@!GM1tT#zAElnSzQ2fLlf-TFpiCHh_G)UqMk zrR{f=qqrSHkx8!fxjoe?y7+aND_uCJvnIn${b9$uy9UEy&E{SExJrj-Y^5WMf0O?m z{J&-Yn|%8<|6NfWd=(Or^TE+cXcHK7Q_#&&i{E=X_EI)otj`{vy!z-gqN;MBscQC^ z&e!oOi;vnDw74Le>(Z3e2077>9>((CAd!MQ&gZ*O@o=jzQ&To^L2uJ}2(Lj%lD?V- zjjN99#l&fUwDkM4JLy-c8AfnNqoJyB%(-x=nI~F)>Muv0j=dVMV4WwgElQ$XT!nbb zK9Xw3oSsMXm=@t$uQ_L@Ic;<_zutE=_z?SI=Ihb?Z8CFWp``Fqrz1Ek+;&Fa#)7w6 zQ5~E1p0dMABFI=cw0IqeYPIdQdGWSkJT2Q-63zuM$%GM!jyI~SHSTaVvh;1?TDR{+ z=tgv$wXhm;W@MZ`L(*c-O!Eww(CG1w_lB$G zw$-;g^nuZzAofe0zBbRqdQ&s@`_AZ`f__){-NwX*Xi}oTeO`1f&2d=_<~W}qj`J42 zgH$IiAv&rZiN_H?<-l9zJn&yK(wg_aKo}KqEH<4IK?G6W4Y7-|Mc%N@6~&8kv;==y z>dh-;RBV=nF5fFFk3O?l>+2;wZBaP0i0XuW+CeA6Vc4#2LP^(EF{(9MI8bCP9cI++ zZA%w&>R|ZqLQdV-d?|dZ!9B^Ty(FbXp`}XP%dy*y-4Z@Cq-0p3ncs#PDpSFs8mGR^ znkXg8-JIQqXU?6sgMrXIPgPxx%%>t3T@9(RMv_f+~s8MNXKygH5;Y z6$wzSUf04yHyr3g(K&6RqJPo+1;r!32RYW(jxYL-p0u27KT!x*frUp*QoLd;QZ`UD zx!S_pQj8svdk`Xn>ZYOl8;$*YKRmG~veom1Ki1q&ZF!p=WlmeUKPF0FgE>tMMAP&l z5dzJ37pSlPUhvgj;n&tX^rPUXFM>$U zQ-O6Hi1O0{>hbM6*w^=DFYd=FUoHHDUh^turxsMq8C`Zr&hYy@tExBw`{QAmo z0d?2?uZbE-Dk;nMp;B${Ar;|!;kH6dT0$2;QppRjkdVd#2Ftr zDjFo6G{U8xV`4K`!=)qji!`;`dQnlM2d4umzz0DFZJ#1+ejmFT+@L-kV{ExXMx-d3 zuU)LR_gNnV)ssy3BjK!imzjl?SI4kZ(4=vRuyS_@^H=j0*AHS%-A5J>N7N1fh91>C z4tM>I3#?2e8*wLaEMvf>$Ro$n{q2zLPEWafn-WIhEjy-zIC4IHs;>p+Z!CPvaT0ZiA5(k z!&}|Hy`k0`4ZHcR_<%4T%Ujkn&pSyVhFwV5$X!BA`@L~Pew@D;4~UW{l0 z<(R8g7t!R)O~v*vGD~3Aw$i@yz{HvM^%$I!>@3#5hMe08`8sXv{-+P)ko#sHw{kL% zcd08i{AF`A{Aff(E!s6qOgW{`r^ zwj&%>a10T5Oe#JW{Hb9DBkKnsUsxps1N?X*Y0%O56AV}!b}o`VVCa$MfNkhr#!Z(- z2M$Y5@Bfr)ri)zjJ+%f;K=5dBDCj5$kcZ9Cyn13Zl_gPl;~pe|-l2 z;!201*XgTU+y}2K+tgDR(-|C6tBu)>8C$I{9=XW_9XJquqQxGVcF%vf=t0@06!ZR3fbjYAonN?2arn&HE_4 zE+W6+utWW0ye4_|YZc(3sf^bUzAlOrS~en>48NeDj`!>^*%tA;;GD!Sbe3ogN|vZM zx)KPz?TOoz3qPixW#0GRDhV_c1XMZqXX8uij=I;Z(HNBDg>-F5! z*|DFUBGj^;E!aW|%FlM4p$}78LUt@&XbUkIS2x9C~*CxxR``hRAd&|e( zFZfa*o{!-9eUeavuQy|$?TBhn&ok#iW1s-q&Y^?@&Fy%4vOF#`VAzApp`_n_IpOTN zBQ)JE@>wa802sCfz&VPPgS=$`kojMq$~;Oz&{w$?Ya73NVaExj%Tc6*-gFgmh{9M< z^({ge-72AnXyc!69RLrrO?1Ye|C=nQZZQZKJs~db>WcsY;n=aSDJqZ;^75PCh`$^` z_%${-RkVcF2C)UF^t_bXJaqEo;gRIl4h7}Xd@xOK32(6*y(JtCv`;|;5tDXk4m``L z6?b}itH(5t&z6<}-DMF4#*|^A3Zl>Jd#&?&-{#Ay?$DkDhCUCIT=yU3g%pM<0h06^ zC%PC@y_l+>{x<^mX)tk7jFklHTW=v|*NNwA*DJ@ONt$J4m?9p}Fr}CiO@_j2|o&0;*syT;Yw<IwGodFv& z?hDjUzaH=UOvXvSw2~F5nvPMq)gG1V#XUv^lMme#OY?%Aqi+|DQ&#_Y{Fi6-%8z?A z4m^L36Uz3L@#`RnIlr7Wx%5&y%`4Uyo@^jjy8Ph*sIlEP^l+%WTh+QJ$983tGR>Z;ce64diN8Zt)Ttyr7 zeBfl~*5`3F!5|WgqWP_O55s);m}3zQT#Lnb`_~x_gND724T(siK2;Q1sweGbS?enc-?|&~ofb-kt&GotNpl5`g>2ml&ypVpf z9=i{?p05*WYUg|vad2G6B|Uh92m#)IO*j{rqV86Q^ld23jBH`)=dA2jd&h!I)d?_v$j-g`(Ng(b9LHwpwaNS}8GV8CvAKqY=fUWxf%O zwCMYXX@=$ODjErL5Bgv!qCHbt_8~C8Ke>?x)Tur_l`Db&&lKil{tPL9gDV-HrE-2?{f>(j+GryHfI+quJBZy`_Wl8(1O zgl_;xSfh$c;+btAmztsr=jeinML8k)47ukJvLleT~TC zJWpsYw#CctI)nB6-2<1sbN=d;4`)9tyBP4av*$)PuH+JZWfi~bsWt3@Q}iCVg6Dwx z=6*02qr7U1rMnmA$7(*X>3Xa)eV^v54gHE9J?mtD&@iP~A%$)oMtTm|biY*uoCLX# z6!XimS!3;e`d;3%Jx>{>p3ZVXp{<#lJ!a_@vdVjBpCWAB~h#az(fSrK0l4FZBJB z$mh!=Kj$8&Yy1Y(gX$mnxOF1$t<@iHTGI+?un?qEBQ=Me#ook<&AE9lACCxOg^CxZsf1j z1Vcvt3JJ*@$ zliP%l$1v~WMt!YH)?nB%OFDE5H(v%jMv4u;A_ci%4&EfYmewb}^HX*$4KpJ7Ekhj} zo?fFhD63%*tGW}Y_JD3m(N=zGEc%Vk^`dzYkunfb;K73%{A)DwQG4D%{Pe^!-ubi# zkA)Y*E72}2)Q`U`Mmf^IhECw|_6kRyBxPzYu{bS@d5?Dj>gJ;FE$Qf!38Gn_ofg*5 zBYhk7VCZmzIAJq(*x_JT;5orUE%rxmY@iL_l5sBxLU|q^r^iwT zo#V08r-vJl3XNvv8j&hAn$35VYdjJWl!eZ^D5H~76ztA01*5xSfTj_HR3WxerWr_y z{H{(k2Uci=iPM`nIa=8Rd34qV-LoF6C99r<>epGEB55o!D@mjNxL0&L@ z1y)KZP*ZM4fwO_uQa}2ZUkHAStH9toV;eW?EF1V$_unU61-UiNDt;}l!bIDJL6+qZ z;q!J}RQHqBc~GYQ6=weGPPkTI!px&WUEX$5ssCDKQK{Y4afQBPITbGRZK>gRIoPPD zDz$>bLs+LSh^ZAkX^r@6WX*2-C*<4u)m@cK(5ZE=R~z5zCj?C{90#Ad6y#O~lCcd{ z`hS;kvwB!(3|%li{82)vULSr$G(!YdiwdQF7W4nh!jCFCr@sOtM>G1`E)Pvam~Gjd z;hv7!yM{HXc6Gnmjs?RPcyu;c2e1SR?fG>v# zU4)cz&>~eh2k7vQUL8Qai)F*KP)NeHVD&uA)bW&XnbL#)6{!XCX0Vtb(1r5--vqDA2{h*GN-wbSfi&5579NF@8*I|-(9XutX>Pbh?dc9DBo@Wcp_gO1>+#?M*C zUNPpIj238W6t~QNZRz$0@PdWITrkym&}F1b+!>E$?ACxdt_Rc1qRhlG9OAgb_UdXZ^!7%c*N`5z3A&g7If&x;xwFAp^vmjF17w6 z4qvWwAuia=Y3<7MHl3U#`iC6apkcYgFp51e3A?grlJOlcn!JVW8QUowqdnj5h3kzu ztyCut5k-zGr98re!_%+&t5sYgDRgN$dPfZ>r8SQ&Ig4R!wJ^7x#IzE98b3yTiPay7 zO`kT_$EGjYYutz`qmcyny{)$~**o4>z4)r?cY33j=lN870l0t?!X2QA+n8TVC5p@AQ@*87zN`M~jO%H^e4*Mfe?Geq?-wnS{p6Nf%16 za&qlL?pSTo+Az$9LXpRt!?sG&p*<-hD`}zDQV6*+-qM?LbkK=rG!-D@wpSAeXgf37 zQnKoR4{XHwum{csS+E5{)13|bajxmCr`j@~MC9u9O>@bx!xXvrFvBzr@3Cl}(qkRb z*~7Wcw7A+!2Rxl$+lvXl)*FL0GWd=z>Myo?pP(^gsmd(QW`p_0>9J^kBU)NXqQxJGs!m z_*Q6V>uL9*A@iN4Q~0Pf2tV4WHHM$XRWMlwneIOVYmmKOSYiM?e2J`>kIp}`PIYMa z=>C~uZJ0-Gpd5NoZt}G)o>ruODs7;v!2RuuE-k)SMq9h_*t{w(?dP*}`|Ng*bi0|d z5;Yp9DHX$;Tg{1vz)ZFDIn8WlOenNp0V7Z%^A`QGr7rXj5YI2_qX*_LUdvHcb4~0K zpg-^fqqn^u=RaWBqD{^^n4gxp&z4k)PBXT7JUWkHX=Q7N{Q-!l|-&OuN;;{<#(PZ5J_) zlM}Q#aMbU{Zey{ zG14@b-e1MpF}RvhFQ(T7zRz7)-NTs&kl25baqm`d(J+F;!!qL zXTKQ2skg7kJF74Ig_E0!L%5kJPwpX}0kej9!&}p$WYERqy2%p}b9Xv~CQOHtIwtld z?Z#H)%?$ssj5+Ppl2-W|7EjA)K+lO~gN{REk@aVUz5cMocIZE1(NtyWKUSmvSm=~Z z{VkLmjpRgs+Z}odl=g!m^jk6; z*HbH_0p|a?T{vJ`6JRDNv^~($2jIqNMXfv{uhfY({TxsbwwBT+9LI@D2pbJz21@~=S>hf zV>>AMw?xcdz)}Lts>#11g)Cp3L0G}?Ccd3KB9Hg8F*;HDbw!hU5I-~#_{&>b@SxC@ z--s_Jf!ZRhIKiJ}Lawdv_tbz>sB&Rc9<=h+eyQDT|3V$bB;9!xb7 z%*C!~ZX0ge!`0kCD}98CqqB=Ar?f}1gKoQ|HXeApnQik=8&?jr9DMT~J zBOk?S-Ca-Qr`&dnMDj*cIj(B_b(&=dc!#>FT?9HC)Guerid9zilC@N6 zH9%Rh>QQ!P#k&4ty<$m_wN~{V(sm7y>`XkP{)=~F3pL*f=5Isx1a}JO;k#8k@R4Ht z<+Q+Ar~Zn|Ab4X0^jhDf;FFq~n-!h27MTr(ij}%jBdL_VVp!|Si>VfPa~s9ZnC}cA z4iP6y(h*Nv0FD8mTb?j^#G<{Pbn4Te%hXA4D%Bu`7Z;tg8j!2&{A)BwzpGosBBz=d z2e}#sm<@8Z4RWLfazM{KUK`{ZvZx9hWM2(Z_fg>LNMGtV>Rkybt_AP3tZe+)k!Owk}$0CI)xELZLB)uWYj;~>Smlif<; z<4VU)us}ZDGtbpF$dv+e?a!=^P1hiWuNj?F2FNno$F16ef6#8@(mcp+WmzZ4`)rWA zDTP*+_ssJmd8C!)0`giL-TU?K^>(R+alj9E0>0A* zTxbFQQqMd$+klq|;LU5SwvN?+XKBD9yaTXY>a_Sy!~Wo8x1n{b;}_YD7Iv!L&r@yK zZ&4hLexYZct>lqLiytzTWy9WrLNL0S8uon_Y`N5F7jPPObF2sK2jj3svSY)}vSH7) zV87TiPp%DHys@b&^but8WNX-CH0--A*m9}Uk%Tnt-Tk@^wp*P^vD+=&cN_L78}{ER zj&?uYGtYMNNV|n?uO`~Cw;?G)Cq%=((}FFRIvu`7!~SRYso_?S#$n&t3453g`yLDS zt3C5fvtgqq5L5L(wc0&N!%oq#XIZf2Qm12MY1k*am*Z4PaoDpuVY_YEA5t9cuIZU) z-$1L~w+Za2Hte1KrQJ>qd#VLnE_FI!kcNGzZ?`^ostU@1JT%Rzov_>OUE|vp?EmhW zr_hES5ZHU3vDzKbu#b^7`piTNwp{8WllaxJV?7t${&CnM&9KM2#fJR}#nJ8^J@dSE zq1En50(+JX`@jX#?lAz0K9gm^mP?%uCZ%DAJ2wd-jlJpzl%v}%xu9Jaeo51=mfmul zek~mV{i?NwsGTNc*{)Yl|)M@P@ zU9)d?w$Q3s+W@;}l8c%(Ktw}To2ER+YxeHtQnM7^^r+ckyJpV=nEvZW>9)31c1O)b zt*PlrBxq~%Km$rkKz&pg-Ju*ILFT8BD zy;j3MX2F&V{?GZ2_{lw;Mm-DbL=OVdq+~hxg3$MH_aiz^;7KYB$kNfjv>f-f6*>OI>6SzZ&+7J=^g91$MjLov^cP z*xMk_WB=N?H;XRr)$_-EZB0Xi&Vv7&-+&o*dMv=cDJ{8><`0i*!w7sc4zd= z^GEVXyBz|1j17AOHdZ+O)UY>Lu;o%0*&K)cb>>T#@rM43!#>st+ik-xv|xX!XP%pF z*llD{n}1}rd#r}-)UelCu;o%0Ss#b}jem55?N!Gia`fKR(h0lWn#u|dS7~=<&pcbn zBkgV#*jYC0ElJYuV`Pm!v(|zwm%2!09QKs%Yo=2@7>B)@B=J4jhCSDUJ(xVEDc{v7 zl-dO98XlT*HMAod+A3bKD#@iT@+7|+v;X>Ox0X7UI}U9HNo;6`ZD_3&M@xTA9@CWX z>Q4lc7HBJZXlj6K!TzP8mGJ^-a;b}y^Q)nK+_~pl2g9F2$mo83m?So|6dT&37POc3 zPA=b7z=pPrho<=&+7UW8s*P5F7UVrtJii*+a$QeJp=!x#sn^>;w%I@~v49lnr1uGs zr)?k$1W0cUWQ%Un-Mj#ZTp*eG)j+m1_vpYKee5RPNfH~{1{>P%DUJ>-Cy!~$cU9VA zb>Lk*H2oM`4i3f|+ALlGO)e0s{Ay^sKI#E&P8`})lGxDJ+R(;Z(4Ha>#3bL9$A%W* zq3H`6+G-7LA}@d@7sx|?HMGW_%jd_OnDuaFk;I0!%7(U|;%M7C@}M8hcl9#@%m{L1 z^U(A%GG{hO4XuTh0BCYygXC93TiCsAZnZoPZB!?;G8@`|S8K9v>adTCOvEeaacfZ*Gc8O`l1aajfW@}=WFhU<3_W4Z&~B($O3XG8k|b*2MPvwlMO@m<|zL-X=rN76Z< zo8;sL(BuMz#;=ApUgwk)DpxnDovyWk+-(E7#sV@(CzbDNs13v+KrYfv+NpsY<10Yq z(isj$O%*c6loaZ#ryICk+X>`O8%Vu~aO%}%I;nhD*OOFGp^}Ftu@+^o*Zp>c7XXn9 zG!DPIB_Dj!t>5tPL8K7fZ-+@@H)*O3?JE|v7s$ha@?Eu|H6zd(d1#uTp-t4#4)6kK za)GkoS3^759hy_Q;?Q=I#D3D$uzww{{V5Q@E{?i_+bbOcpcK+u-Or7|@skGAZbN-W;RysobzsvtL z*t&n2Un%~PwDSR^EMgpssn1F5?_Yy=?Z^3p+cN0#<+-t#%dsQ{3q(>NW*p(t6qx<) zXr6oVfcbgWN7t2c1K%QyguK2_7GI+E4l=eURweF2OqrBe<*P3_C9Ky6MET2~BEIP( z&oiLmN5(jeqS2v#rt`XJ-sq<9$%t*mdqOBj!inR`zD!cJISJGKH49w121h2TYI0(p zYi0m{S^@Qf$!O-eL@_0yWOS3Ck|f`N`NdYg^&Qoef`ebOK7Olfp}NFa$!H3tObo#0 zNtv`d&*hXdkLtR(Jdr(i)$z!P(6&0G7N&RE?|CVn;6^7_H{U@0taePc+wpz79fOOd zMO~qu-4wN=OH;^)j^o%Q{D9p9~7act}I?1V3Caj1j;G?()F?vN4HcxNaHqBV*%((8vM{}!BA%(71!xOiP-dDBl z-9^ijz(M@QHy7 z;t5xR;&CWNE3+Km{*zcmZhAQZ?ed&ssD|iP)Q&Ny9rM+DwAbf(2m^7@i?Hl0|M!S! zOI?IMc1UE#bJSS|@rLEKtuj4u4v`zz3;M$=)DZD|zF5&DP$dU$@1v8%$4Rc!jn0gS z7`6OuHJ#Hbf73ykQmugNMz!v=#Nw|Bx5d5G6o^y(y%r*k-F5WHPldFzu^vF4PXgOw?v-L)C`xg3JD4qPpQ9g>r`B zPZxi8x#^%cGGXUtTu`CX5zMmmN43kk`hfbC3(uqe!}LE7zlN9-hwS=cC&ywW)+P=v zkAC!OtVtGX+{&a9TexiWjoC`7x}Y3D1k^RZ zdzIo`Qryoe&hQ^DJ7i2B? zlEJQMwDbT$6&oa%I!-M+s(f*0m2U>d9Z16G&Bc8D2AuYxrF9kF7Dse=TfF!j-WEkE zWh6#gsCeFVluGJHOWi=$1N;|iwKJdiH4<5SqxRnVwPfkTG+NLYQ2ys$;_x_YYlO4P7{_kUsQMC+($h?R4ox>A_U}3dcl$$e|1M2sK*%`>@|jl1^0X>`rV{ zbEG_f8l5;zIx#igiMZ2$ex`IHrjm{H9^noYmru+6O%N)egk95UsD(~!)t&f#itVWL z0US!&bw1hhDynm~$_4G$>n+Yo?iT+tpo8Ohbs~~wx^|}V08Y{IN;0Tc6}C?U@`tl^D8~uf4;y;!W-Wn(p?zm~@XXAvDCZDYw^+<9p$keYcwblRjc9 zkRpK;^ zN)(O5r`m$IhEIuZ{Bh63*2En-BhawcsnC=nS?I5{>-hu-;Ald{R>2(%Np4R;|10ue zvRvf5ud9k)taorRPNBc%dHl84?VBsf?bkN0+3gLtcxkaHqm55tVzW#SV0)~io(_jL zPy>P>h&TppFG9hd;FN_D4=;T33@c*Yh^?rQi?wij=<0CnOz4X6so42C#ByxsBJ;g< zS7h!(b+Ed*cjlY@_Eb0HJki*GV$X@aiF=H#1K%`uc-GYqs%{#TxhL~YRK#|8)>dCo z-FU%?y(jjN;uBJw_N+VOs{YuO`AOz!11(HqtB@!W^^(L^qjum)V>d;hKIzG9%{+cs~pN;S(J)M7x+y0S5b^A!mWu9>G(Y zAB@F$Rk=DsC3wZ|+4FC-kZLvFQ=Zm#wNy&*Z*@MWNV3VE+bNQKfjp9pS#KSdjWveW zdSm|V5|hE@jw$&6u0BJkPa7!QB{YR5O+K@Q|DWn}@&Bv(e7^DjGAox1u^o3JKIK0P ze79Xv**`rn9gpSm9<}K`-w|2I78PAMc+hXao>ERrj^Zr1IuFBmNvf+ zsXXa}__ic7`Q26{aoG}Aa%doHjnSWwT;igcqo17Q

    y=wE@@;f4ZIT@OjnZs#e;Y z?0#k#I-x4%;XV$FIe~+nCC*69z&5@bn=+jIgxc84R#l-ts-+M_d71e`;S* z(9g|#ZOyntJ^ZxG#J?x}5Q)!n&@P{J#0Vikbi@d`VK1^&K$$O48u9i9zfM!X@K7HI zjT}oG7dWMnp*9*>+HN(n9><A*Kcb#Tu0{D`<~@riCW4 z@QD^!U76U)p8*Uk9>@6&c&TbJ`unS#s7B{FY+!+bFZ1gf` zE3|q2?dGJh>P~c6j5$i|z{T7YJ0WcN!V|_O7!$IM`tZyw$KIy#l?ixF-z=0mjwvTh z#ehp6SdUP1Uo~fzh0eq({4~~AtHg}S6EpIUzyiID_W^VASatQIy`Y=h#o;Qh_sv_! zD)mo+*~*b0htVBm{gtzG+f6p1`nxOsv8H za&mUq*A`5SO`gd4377DRwwvL)97N4!mqk&85n3mT2EvQ79ArO0XSFo@2P4V}7tDtSyy_$E7hu;1ef^T!hsLPHA;If!)|dR1r*{W;br zeVT$R&B3ED=d-VjgKw4RG}oug_;zKe-SrzzoS(r^1E0h`4?Dn9*^9@ke_Zr|)|)4a zU-)EpNv^!jz{ch;@*eXyc}p~$K8R&4x3Z0!FujVe*~axo68^by*+4Zg&`OpgBc~xb zGj_F4g+Cf{XTC0c!bptmAinc`=8iB}?+BGI>m7kT0Jk98C$ZidzAvx!))0RkpD+JI zc=a`nvcL9(_Xm0X{{!A_qAhVYyz%n-9PnlkSE1cF%ItHgZ$ZXzSib=74@`gC@G6{? z@JE>k&`Mz(0v8w!dz|-W+X}dPagRgmU&)MD)YE(knbun=s+;gVyA%Rd?ar0)L zZjsqNjn!MC4<_R`)($0Ihx;}DY`?mlaZ9Y1)&$QR=9qVf-T2O}Mc>7pd$H~sgT>zK zI`*iZw9;Tr{w#G(4HWdtPqYRBlH zIaYofL250bNEgd5YanF5p6z1k^i6O+(*NNkBf-~e5rmu&%!I+^xBGzU_OL&*;KFi& zdv@6LHxvYBL}#}W@FSZFM`t(KUc77l%At(u;?EGD1Ddr?E)qqP_fVxc@mgJG!)0bIP%3Bw3nuH{!ONtp>G(4USZdS zt8W=t$29mta-PGjbwaOsvlczEae&ve`TUgdrQ*3}ca z?m#qjSY4Gac{W4;NI0loh70G#Oo~0~qs#d~Wmm;Y+y-H=fcWw?nsL4-pb~zp*}MVO z_M=zPFNQVen%_%!>kT7*iSf-Ib=SdHDb_{(ioQP6#YCY-&LQ6hXZkOk! zJn4sq7w88opb}x2x&%}j)IA8(;v_5N5Uw(QJx%bP$!N#f_-~$tlh$*3S^SBkLdJ%M z5guYRr^kU3mBI>uP^9kC1+kj#QeS<#x8pcYOM?C8Pb^eBp zM6-Su-r7qGSOY5gk*Beu%(m?2+HAWyT@nsWb@_sf`*oy{FX#v%L^Pft5sf*zR*P(O zLL06n-m{?N7|g1Z4i)lPrBtt*LlHLH=uf4d;%*^JBJE=QsJ0PFM4A?jY<4WFaDRe*z~u8?VN8bJYaI>Ux>Y@m8y3g6>4xL^p0xs^}ZEMnmhO z{`F_OfR`L$PMI*^P;c1(w9HO9a1A8($rTPqdm_h*Rme)$QC7Hgz2n>^82y!N%T_Jk zTthSdO+pLKA? zm;J(1R8{L=;lL~JJ)VL3gYpc#h(neqGMZBoM+WQ#qyE+Ebu6{?kS_Q}l{KWEGSO%N z+_X}Yp{Y~B#W*OU;zayO-&0n{;A161@=A9VWHIJbDGI6Yfcp)O; z)2lyB_H5eftMf$O<7x9Z#R@OKQp@%1A&54!jJM7wh{Z1T=_S96%}1oLp8KQR+at1g zFG+T&FFmtMd=!7laLHuzuVs^p=C5JN4ycJg=+D-@27j3TRgCBNQ8?k0xh5J~+uXm- zzXs6koNMJGsS=|8C!vX?8&~TLy@LqN^DB$z>wP4S93OuuHOs8>`Pa?wHT3lpZ_c1v zUy*A0pTtwdT`TnlW!G`v9unuTV<3N;4x^S5E_Yjfxu9@Rb`Y|ur3rWv9- zaOZU(2n|V-QbxxcawUb#PmG1u;T(6DdXk)0f!~!f{A(m*&Xw%Dg=)q3y0+=e?pI^i z9cmJ_ie;rMz`U~1Kr>g=0v?u$GQ6(@P+>ggtS?XtuV}Ovgv(hF!i~dW(u3-_7QE0- zz8*&!Mk}(L0YU8hXnM1$Ji3iKt%o7^h?mXBRlr_x&@HlrJ@vPD& za`->aeNE~i@73dXOZ=A>O{yJH3#Vw>GhVDl{eXIRVw_Gb+d-Fy@pL$7KESP(M2@$~ zk`$4ZRa$DjhUIZzL=kY>hEOH|F-Vi9B z+I_8Aqhzi5<0!q>P@Z*zpW)r}lL}R@p$u+5=m<7%N@p;NRLtx;7!T}{WohRN3997R zKjChJx}R%vuj>xsj*;qQFYa%}p;ikf>mCS~mg#qTtnRel&6_JUx%Nt$m}{w8@D%q- z+UmDnb)E^>Z^A9J;@cLdSfSI-qS@s@)EVIXoaZwFuo#P(v?9Olxsm#h>HI{|K%eDX zi_e`Om5w82e~kN<^9vwii$+k(_YQB zUNrldCZZ>H9SpU(3E!l##REEMmXYJ3SvvS$oTKxP zH4jn!t@L?1y{GIN4eJ=a9AIqFlcDH@XqZA9;F0(pxOh-+KJ-?x5O#L+5^tsjgU;*Ed*h(-C8?Eu|A}UM~F5Y)=O-yU+@%L zei!M_a;+%K8yc!wS09K`K`$NXQkhV<_&wCl3v1LB zzd8UCL;pg2v)y}1MS$ODr^rCdsbE}*Gw2l+X&6EQb#SWATTrAf`Fkv8i35#Rp`MRh zYJKAK5B(MKwX}q>sETA(yk}(2uci>VAB(w?{~=uVP2g*@Zwg9!WV%Th(en^7&9- zcZ2TZf!#`5c1zGxwwFHEA^rv*5lBuUa9+{xs0{wZz0t7f=NO7(r?0*4`!CXZ;|R=Y~FW~g@`VOy}~MDQ9k1BXDU z-tW}oBAShA|0qpf%DyDCO3*5elPw*n%TEgXm9sf~!Y>wyEORQ@SG69zz|r(A9_J^h zbf7kUm3t%9jtfnhcxAHYz@mo%+jgN)sslqofW9?P57Ivq1$H|%83+R&db0yQfdbp% z9I|N>X0?S7c+^3NT8S`xiA8&CBJ;9RU4WfEr6W6{QOQo;^;X^@b;FQ2>3o?niJl+6 z>|~$NAezZOIfd%z8TY7_+MY!51zE3ecf-#?|Le`@9A&S|%g>xbWE3o3e&)1X?^=GQ zU9MTn&wMJ^G0V^VPOhVtpZUF9)0dxFFV|tq&-_8IDaHNRkt}Y3>l&L|V3(C*=XKZm z`#G%qA;^z@3CNh}PC=;FbL|FCl-DOLf2%Loja$MaNHd7y_>+XDr3V?Zr>`yH5#jdC>qrR*|<0*01c;QTD^K!0^|ZWX82P${f`R9%HQ zfn%v&$Ydv)GDb&NW6)p zZ)3x|oy$u5IijU4!KCo+1g=Q@TI&2q*aRKwZyz-1Q_*snDIsd#BDLo$iwHbKUfC_u~_HF|=}F+WL?s*CtEzZWXTJ5*nt zio!WV{b?{QDNxCs&3L$)@2de1dgfce|?XopH2w*sNejKIp`hTg{DLiK*+)c_zr{4yH}v@?h18W7pTv< zJE4Bnf_jjRLYjB^l3lQU&R_viauen0!Y-A6eb8{><$hn zRA2gH6*z})a$&8y86=he8w?#K&_?iIFJn4UsLArx0d>Wczk{e=9f(235;9PmKhU7B zJaL>+lzDcOY-x>WKyga?;i30pLM`u(t)Dms+^o5#8>}wt;qsPp(6f_2D#C9Oed9DO zTDl>+aS50aeuQuckrAwQMsCVWBzIIM7NG75cS+b#iwE^{-1G`>OD?(TWiE?Ghm|wj zmQr%PXVbC+uT+Yovz=V7*$JQQCSe+s4CBi&>q`q43b~d-j0R>c8pH%u-ducV*3S|O z@t-fdmaE)f2c7GZQzg86jM>}{qKd2T%TxRqVR#VTR5uMkV5?WB+-=tCRIjFfiUU0I zf)4O)KYs~My9ACPn&%6{_xz_qE5!;9!q4pz%=eT@T!Uq$b&g=4I{)U;w5xfr;jbz% zvPT)^D>E6MZKp-;OE1of9btRG2n?oAy}HX~>1E5ZufA_2%| z0FR*U#k;)%Qp>N(@UJE!Cx01+Dn$RN@UJNMKUv{7C64vxa{o^Ze>vemq9JjlCi&ET zQnVk2EB;N^HOQ(lWFQAI>kP)4JvDtZ2<~4QPz#4_W?WfiSE{-#!l|iOAGfa6?#?y4 zWz`tXTR|AAdEV#m?fey-!Ba|K*Gum<5KP!%=|?OkEuunI9}){$P0sz2&#}-J^{;$6 z_UTtY;MG_^{ML!ELkg9V-^)=1w^%*OjT~7}(^?yISdyoH~p=lNM)Ge(w~(=N~BQi5kwc>SOB{I2A(`62qS$&h5H^>Q$5`Dwi#Tp%U7 z%$z2i>6hHM88;)2=5JUO4?6_nkOzleSmAp$mOT^ab1)Vu4!9- zdLy|@t|I-iS2g4%T(rkRtf<0|36aYhoxEAr8Z9;`t-=hsWR$8x+evr+IY@2kLH{e>v1JtQDH_pVqAz42@*}F#>x=q2wE;1UJ$iwGvXV7M zJ$I?Ky4bUwb%ojf-26m6)hn47t8kpiT$fyGS#OP+()19wa{Y9(7*HYA&HVFRwQqF1 zHN|%ifsCvig)l9J#ZNs}`@Z9zl?^XeI^O5sk&wVx$Zy9Vh&9~N@%>yWI+FfxyP+l2 z{iiQiIcFzk}Y-qD#@c>?xznk>zkHP zswOSr5@~t1F)WNJRPf$&vImVs+bkg~G#UBJXP?S`SgU!=L&)fGEOo%$>*e48yF-0A ziSs`$%hA(nugLFbJmln5RQ7uC2HW!J{2TXf%dmNzF4+^QXAzJB{0Ay~1w)pUc87ZC zR*%G2i~NSKVjs%lS~Hu&+n&vxoQ`?Kz|`fhzDdDP>lD_O0G zmgVGV^;B#vtM=ihL9!o&_Mq-b<%hC{LE#tbb6DjVm#)}os>Wx|y<#L8$&w8Ic94SI zf7PF#6Z&ISb$Pyrfu1tf-_KK~*@BF+7zX_CkUm4L5D9SuXGYGV0kzb6S;9*g)uYw4 z$$}|Df zWReUpWCBKr%BEmNK}Df}1_XowT!Mp0Vyhr-bV}7CWWX(wI2p+BIF>57qT(xBQ2UBi z6h%z}NPcBOhs8-`1$d_0Uwa5~1gG(CbXe1WYjgH9i%Y z0|v5*bzEXRlI!qajm*nm7D=q(-_4tdu0#E=mb8{qjS?8jibZOW`+s; z6@fB3LI=VW^uy>4FqDd=UQhIWxf9AHNYsL+sEX)Y#OVFrlK(@qm|^dB+DgdW`P>53 zu&*8r$Fi7G10h8P8Pf*0M{jH!C+T`hdB{j0|(zV0qPT|aGM=7P6@Gef3Zup(e84 z23@V+g5=2x19m=D{XLY|+~@M(=2I{2<}oND#i?`N+W_=9piZxjH^4Fsgi}i_6a%E%?D&ZHf%%E|vHd#1rXb=$3|a*HBicitsWYCBUsB3lfQ8 ziCG2p*1I%^D=?P13T93AT}r9ye435r=w&yMo?9qXB$BRx*YCGy)Y9TLfiXFztaBh= ztd&%eh_o&iSOGOkeKzB1p?uV;hu`|bfo(-1^pHprwc|84IC_S``}yMt2bRHAk1%e!L5wMFSSo6^NXuU*8v&%R)fWjPAc*|?9D z*QE0EV7Y+h^MEQ4NS>3#dFnqWG*V4Z)_^FJ&9eY*O>5Hdh!^;n%bduNPa3Yyzx8!i zLjjmR8(zAPecO5#*refd;ed(ZM43PDbBu>DCtW_=PQ?*>%HN)bE@o}bvw1XBHwkd% zfJ^)*moaPF-S&wO!-|(Cyf%yt_v&bNqG4$9jC(uGEjgE4&D|-&_fxBP5rm|e8Zc#d zO!SFro(&nQ?=NU$OPO(DV`0|udF=eXrhv>y zI1Vz2ajQx37*!OcHvu-r;dJDy!h;{P zlQ`sfKKw5|e$HzbRhG^RyJv=~x>qRR1*y~lq?|9p{mr@W%_C*n(H<$=%p;NsJ3_lK z%<#Bow93y@BSx@RrRT?d*Q}%cqIHY_?`G=4=Y{qu0tY2!tUd`EMi6DmS-;Ekcm?IX zyahuKus*6DBe$6HHXceSFZli7c4oV~DCL^q9vrLqs!QWlm z5p@9|Zh~mjDRc$iYMe{%)6Q+^Uc=4%>ng`DaHU(hZ?iTXsi~<+xTE|_K1y6uR7#V# z9iNl^#MMza1p@BL>Ym*YpEhL*G2gy&60hGH$M+NFPION70V0BT3JE_mwx*Ae=GT1z zYMrM(8Nia?l+|1!T<8B9g*?r&yCl2Y&VH-O{vYw|iQ*%Me|-Spj(qbU;|fD3e)O&@$Fz? z^=L|&*CiIHQne?6K1|J$t(kjdj4nCwbaBH!Da*4c11!r^@=stwWMK+BdgRyC;92w% zD$03A$ofQsrKyQU=K=XllFt|9^Bq3r zZF$F(Jhf(Nk|Uv7YbC~Z+WKR-%w96YzlOdDBEZvW|4wq3<1)4l z?L~{ds?@t@u{SEh81EqNIg9&5b+{0rqJ5G_eg8H0wd7eTat8iG{9NQR<>M1Rg!EYJ zgP*&zs7l%fz2Q22VT<170z;5N3g@~7UHmQbsG_e1CK?!1mX$}GqSQ~MVK^>!sL%D> zc|u}+oz=_yxN~wd13RNAT zz5*I%4_}lg2!=0l?99k9ZW_l!2B&Z@&$9a@lY0AFGa|Ej#-pwI>YVo*k-F>TX^%E; zwI9*$>{=d+YNhD*6nFk@vni&($uL&A^VQNKDI_b}g|5tU&Pp+%ciN#ppkJJ{NhZ{9 zhki~d^Yd@@N4im@hkA5>PS}DDL3M&Bw2O=~BTublMvmh{kHE0KdIX{_0!#~%XhHGB zW-Txg$wc_uibx^ilC~n8L=0^!B9(}qZAGLJ;cP1+oroGx@Pu(OtwLZ&?P@Ec0}-#b z715E16>UXyB4SZn5pE)GYAd2M5mVcW$RJ`wTM-^2`nDC3NkqrCBDxUq_4qb=-j#^G zZABbIL|I!ASwuYDR>ZMHMB0kzMnpkd5#5QnqOFK*BF=9s;y5BsZ7bq(Tj-Znn%p)<99eR9X08*PQ=qkw&ODq*$i-{c}m6!IPeO` zYo$Y=qd89WmT|tLw~RoqGiBGv39m+t2AM+h;p}Y9EwKNAbfiNBBm=loGChtdv7z$Z zq~1H_9U-EGzU45o!Oapu3_Ka!3j&$ZZF2tPtD+eOF#L(4*y)5XgURMQTK9Lthg{!$@;HbH=NhLSNre>U4OHZL=wms z1v^1k&=n6R@pV35GD&YQFXOmwxv5ydFN}L97TrldI`$8g0H!0LN=%Li?`0mv* zT`0S4OCZ27;UX$URU>jUyqX)*;=s|j$ zP)*<8rpoYw5wSYq_}mqeC+leSx5EF)fSnB*uZPbQng(K_0Y-L9e!#|yLyKMU&WfKs zW-hh=zRwv00fhIlSXBi;#B2sPd^#<u9`qhuGj`@Jls%mt6sb9w;yX||(Ik|43YJ)-_ z`OE;_l&0}`wW00tFoOXXk$u~cEb8vh^&Y+(xmea!bSSOV`0mPo+x;szsg3@#o9Eu9 zkE2i*auhdY17SROePN$>alCY5u)ddPQ8l5QXGhF=wx1uvo$D##j)7k|bUh{c+AmzX zo|22SUpRF=C8Mx1{9F`CsPbP9D9Z@v&-{=r)Y?+P}| z_AL6A#(7>|IOu>rs(bLG?_leClh@jrvcY$$zHQCFfp%4pR!8V0jd52<9E-{1v?>}S z&X+hYrFi4QY zw_#xRlzgjuD-6({lBo6z6SSw~BkdPPXn5$ge>48T)TZHo`gdmdvrrVlT~**SjaXub zHZVjwZHk26W{0YHs8d3(BQz>{qKg}mvK9A3YYZGD#!7-!MKZY*W>QQJ%C$-+k*QP z_X95LT{u^9<8c$2qpSG!8=j_`t|GB$=x}F@#uO?*0J5X zXCHU`2|aoeocOPoeDvvcJ%sI=8UYR#!|t_4GdFeDWpb~v&efy?xLl-KoGK&eamAq%9XK?A1=N|a^6)UGrl zUt2S1iu&j0AKS(BgfXK?w|s<9(pGb`{H~iGLp@-1=$H3O>lbuyva}dO5Es z;k8%t_nhET!UH4xWk^W*OaHNtv)d`qvkOjQ5f}9QF3mB6a*q{Wl3?~L-sHgVP|;{jM?AJ}zz0@t?SP7kACfETlf%no%yah6>pMUM zn+{eSPEOf6%USVBGMpO-H~zgFs-tpiEuAdld^o4N;8g&YKqK0z*ASgr0N-^3yN=mc_M8<#=m7+S+X-_aGzL(P#8T$!Km>bKYd6;yg9O zoQ9{S@trPVKXF;&QrA~XHhh#kB)53LZPxirEqaIw5-ntz!(c%!6mu{H!7oZ#f7&1z zU?$x-XFOJtj4F5^5&r;D2Q1mPW26o2XRZLKCQ1|-2WYz667Um&ycxOzQqDZ^3*m^X=^N2YG7nI@;_7LtwL?slqK?@1vgsb zhe&mDWd0gW0LmTEM`qwMPLmvOR>8%QT#s~UvLphAZaW>4Yn8fwi+)nQ2LX4xsK80I zoD|Y_`0|!6)eQP0O}d#Toq1etrqY!8koU^-vny23L)EZ;2Fp`;6qEN?v`^@PfYJ*C zluMnsA<5B7Ll*giwS%VQ@u11N%2(T}B4f%g;*jyo@5$iwb(Tlg&g2I#sAF0m-kBN7MzBSEF@$K7*t- zf1070ZXcDMA8WDrrE1U1=3KjSCvchoE2QA3|I>K$oE- zAah!4RLlKcE4)+ayAx6P=bbPeu`|V$Fk4Y!~YJKInr_ltEG5r*2tP22U8BEx3R=U?lxjna~mE(ty9# z%5>C`3Qd)Zz4fKu1B<laLlQDT2|^*p^v> za2ap4D0LUSH4V`-JhfD~xbs;S2lP>?giGP>$}uiUV0rHjCt2Pl7(-j^U0ymSQwBI+ zHhdq)^mNjLs@~J*GugF0lTIjZLQ0m|%J{8s# z4*pak8JH!iR4U9}rPi!l32{cP{y-Wzv{@sk>O3EhZEWOaT)E$sFu9;^(sd-?qYf(PQJxycypzFVt0ZqLJSol|2Z2e0J;*a@8c;E_-Ymbawire zApaNv`LPCDR|v?lHlNG_U68Wz)-3-b!u|WZumnoG+IVBizbd`z9J<6ckL{^*jjS6pU z3}|yd&xoXg`=XUoCA%j|P&JNz`8a?k6(8A5Hf>y@WfoHW;2d=TVp;k9dSk2jK zZSb7WyJY=D>ub>Mv5aQ+0L-8TK%eV#c6t`Q&uDwbzYXKsiSVOw+D}$*9WR?3oQ$UB zx(8HXFv$}V!tj4@f=>h}{P!n#HEKKhT(TccTFkSLkkFQvja zSqncp7N!ce$P*!8Wu-cCBL@Y)hskV@*3YOi#Z(z=NTbTkbDu~uj83)=JVaI|Q#B20 ztbNywQhRp1_9r*UTG#`-UZ6WC`7ubq*h+8FLG@jYEI(=74dYTBiD;{aN3cTJnC1II zEou{kvphwI2M5k%mciP)HM<19YkAD6124CjeNOTA<~yTG;CdxRJN z0yLQ%NkZ6OII`+m;s5V~Yf#itt`veyioS`h`aE^1i?8Jk@Djj4EexchsZP|4*!r{O zMj$+;m%u_$2OX`TikDdXw=!Q*;O^hyh9E6E|aF#3)?DU zT&=HFH2FuaRi?>Mgg6`zh!$owY>yzVb$ZjW=#GGt>3xI>wXpDpqQ?S-Y`&QV0#hoKrHjDq5<*C9ZOvCt&2zAf z8Z}YGZ^MoHk3lE%2eXA3d2V^gGO_>cHI{RG8+u~&U^l%9r|i&b7|QO#pmY+ulliSz zXLS**Ni){Ss}Y)=CqyR1a>o9o;)ax}o24|dc!+*3Smr5;i(nG_hc(HgulLBrocg&F zBNLK-Vvz-xJ%cXdq}n_>I}}_tAcWvwB1? zYUi*P5|Z26j!r0vwdK?{;zyhur6>_^iBCOWzDh2?{ZH8f@hy|kuopzSRL9+C;@rep zb>X!IQo-6g_7XU-s$hvk-dO4gd}%72}{m_~9-;JPBc>iz`uax>+6L8$R9Q+x~CMDt~lr%p6O z$oTc397>a-wzW#A`+vR09%UuWi}(G~cu-^C%datg?@T-C`=n-l7iK5=uB^kGWF(s! z|7&W5386^c+%jf#LR%#3jO6DfWvR-?V^pJXLqJ7|K&)&aB75V86Gca*r=){?>RFOV z(W^`3C3fU-@~Jlm>a8kNSLh{_qF+w%WBAOou!>oR1c{{JOmwWkC~fVi^e!O~DW9eC zqjs$qdCh`6Ar+O{t8da}*h;=)U?d{DoJ9rWPYyw`VX*$xsp|RQyL!|6U<|xypeiH4 zr}ZsQ)xb!2na;E{aIlxtjaSQ%299SqFHIay6jFW)1sy2Fjg)QtF!!oR?o!ng&6#o< z=sWY-|J2u;jh^7`MB62vpiA_G`~*>|FR|3<1q2!k(rQW{t?aX}o$bI3Gq-1%k^llU z;rYh1Dm2~bpY2L?d}DuoZyYL=2unx4D!;%;^-Of547=n@!Y&Z=1?OBXq&n#NjG4N7 ztx!;m#H>&CGD}n@bREe>M|VVnPLsIzWBQTGWmmq8By`CD?Kqs8M<9JL4ekX)ha9e3 zk*t}+wM~G`_jc}lsbIURu|FqDVFDP>9cDDo3?m?4mV_X!R<{W30gsY}XZVIA0vxdT< z5%?nd+gBMH&WGM5J@gYC_k&~No(oSFu|J-^#>71jY7c4tU_3Ja0?g&PZTY(y8gYV) zw#$Pe6DSp``yVkPx_4e8GJ)Hoi`ngJ%yctO*aPE^(I;@6IXTsF52SNXA06lbZ(<%z zh56Uv&re+UEajyu^=^uKHQbQeJs~Mo&NR8?4%hOHo{~=`o>jBwcBA-dI^V6Pmsx9? zUI87A)BEU4M#wvpZ1&DtJk2y41}kPN6SKI1ECbxsg1-nw5by>qdX}+^>Tk4S2E-C9 z-eJ>-FAW?oFzlk?z@ypO>ZLDEbS!p^800B=oN~EiPcqQZP$qk|q)cjdJClM!g+l34 zXI-N;LL95h%v0Bx5^wjE z7IqHNTCP*SW>OoNQqzUArgM>&Y(_mZXTlZnk4tm52PWBzY2+1VF)fzGq)(xBzhb3B z+i$bP zkF85{wX7c%2tZ#nII|kHb}jF@vYwl3Jm*d(Yq@B6&w}oLfg6c7fbDgD(ZFE&e$k0% z%T@<({1Vc*RobXC|&oPnKNe&u$JTfE?V)u z)7qfz&g2C5QMqT)86*@92SCs1J2_3UpwU~vSU18^jhE~Rx$*g{Tn|8Q9&wi((y&c? zN)E}I*{+_+lxrvFGoQg*oZLvjgDE9A9Pcjijs|ko$laIom-nJC z9m&G?yaSwPA6|5g+{*;0OfW{lm2&Sb_1>qF`5NxM&r>2A%WQxTxq0g*xoek3LNZgx zfALvVcpnMm+n`z4>E>>)r$CHWpvtm{{vwZ14afQ)83XRfgW|_@4zEa_mvisKq6Ws2 zwyS4f$mwO~c)HhkY$S$~f+jote3?5EL1lmVIB@S zx&A^?2}kr?j zlt^kR_9g|ADcd#eB4v)@Xs=Qoo@LX_=O7M;deEszsE%5F>g;`herv4+q1Z;;m`s7SMk?i&*4xle#A_U-hJKqw439dcR!Qi zC@yr%tRSoqIHNtqQBBhDr==SXvhTU^4n7oKE853%<_nSM=oQ=JZq1HY{m0e9wjx4~ z?PpJqMAp%DLpGcoaSyU482!ZK8jD$6&Ng~Oim?_rtx9m2@EbCN;ZPP~fmUjM^yKJd zp(>JT)$y&x`MD_Ch*omJFCybPS$1{MN1{N^Q(4l0mKozaA{F(_zXgCewR(aQkHpN& z3a>4f7Oa&P9Bo7sC4BBWOP9m-Jkg-k5(mm4rBJ;D1WunS;4^ZB^5rshgRr&e&4^UV zWRWfD;lF`r2le6v2It20ggMJ*E!;z}?CDqzrKp6CT5FCk^^>n59?X@*S`z6+= zoR54Zw;c&tCdHJ7I`J2EF`1JM9ec43U?4b1ds-pcCsst3E$;)omg^#UuRf(K#mHnC zm~3u=VFO}$Gtz2?Ol~`$z*6Wj%-v3t=KbnTRPUpjajCW6Cl@|yQ(P_rrMA5gf6BMyYXn2*Hxp3 z2Y#WDOA{#uHpW{Kfh(1vZ4A&&Ojl*78XuF?^ehwFLkNB5uTMSo28&#eTUdjqNNAG| zkLYkI3ngSBSrk6?D|le6h-}MnNS2|cbC?$-U7162|Vrykaxw1`PEI6`sN_`eVP0735p@VP8*tKB|O>acA z2aW2>LG_wcBs*-GjKp_>23dOLcBBZ=&(pwl0(BpPD1~x)aFq>IZ|1P=jlLZL_)qFE zMjHGQou3tlQ=o?y^tCE0>QgX9o8>R1c>jaFc+l+An+Ht|=3vI1;6AyW$>JJ0uQT9L zjwMg%9NC8&-i^1x-dZ`JP-Gw?iTWIjf-^EaPMRAD)e|}RLtpq&nIHA(bE_cQ$v~+I z>t%RFknGsSqh0#hvS05JPS3daOmex+Yvb;>R^exjM z%~Nvm$c|DkWt^m!^a0A2hcCU@O_y0$rWVI5Cu{197$!GiW*?b_8ji@| z2|iSx!c*c}C0}c$H6W7gI4L8(q~9fl6_JYbEc7Tzr+unIXOp2eQPx^%xMY<=?5yE8 zq+GSEc>#j5_`+{UIqEiv((u}fNB{-Ap$oN75h=8$pQSgKnOV~dOV2N-uH?~UW=$E$ zQ>E@mBy^DAO8r;BaZGotc!Lv1fR@W?sLr|kFP;X*-Y_zg8)2JJDqhxi2bAffeofjJ%{jGpzUDV)1ScVB}yf3sR;41$98d@J1QT+YY^6NHR ziqwvp{>9&4n-GQ<1{jlm9iYPD8OOtnhRu3|nqIrOue9#9$raWx-}7=vgFDla$e3iF z6}bjW=aBcSwmY@E)b7-2UFZw1vaax2L3^x8PMYloJ$Ye$SuBh>_Nv86BRbAGuB95P z-K3=Vi<6*$ixw*Q`<$YM>W*T}STL+IQ4MnF>Ut0O^hET0rEwx4+L?)nZeSwjIj#EG z(3nA&bwkwTcvDwN3lm0rm;oz1ik?x@cwW4?Xaj&oKeJXk?pXVPuoOXDrUCt!&e+;@ zx)~pBennFO>WeGPR@zVS)rRY~Qa6<>j&MXaeQ*>{$H4_oM?ud>MAE6pUn`5{+u)&e z33I6ad<}Yz&DQ2F+MAx3q?7YNrM9Yjg3>;n_ZZq2iAY;i_EN4;dYxMut%*eH2sW(V zvfdl7S5LfWu2)U$jOKo|f;J}JuQ2^ME!%#6)vt!$C2hX(Yc5SCJlu;Ok+Uel($Ku@ z;Ni{%#{>^&6l4SscSRk@;bT0Z0I7`1IDxY>)-rjbfU(5?kdQ5~xN`w4o#9QwLs()^ zF<3h9F4b5VzDQ~4R>mFzh{4c=flgngO_?l8+4z;-A}J306TQl0pT(v2&w7>{XGBt{ zm#3F8xtQZjk_mF(98&^VUfbf!A(#D8s%>`lI{rDS(P&68ckWrKJRHtWF#)|Y~ zu%JlifYbQb^#dKb{AAD(X{s#aJ=NC1^%oIDM3`1$EM{C{@3y)u}cWH3#HJ)TJ$R$}@fvUsW)(N-%@k7emH;X*a5 zkRg;(N_GXhw;DJmMaC}2QP4GbJ0QS4rMNO!xf`En(OXP1a?^u)trnKcx}K{Yn#3`lNVMGM7W9+}uX zdXw!-iHZQ1gr#d6qvG>KeRkNWD2iB!eN_(n=(+e)`+&BNtk%_H)Ih48(OXyR4LTJ3_h!fqsO|u*2#JJ0cI3gk5Zh(a=}L z(!7KXZz{g#q;-yX5jEY`IpSGsI<9lXvy`#+9GU_p?4pygx@5hr?mi<4&KFO~XT%8+ zRx=xlk<2|b8hCY#7hTr-a^||{{1iO^Hq9jeDorziw+Qy38BC91yWoKZ((w^%`xJFO zS4(aP(?qW9)TG@2+x$y?Dz>-A(P=}$wYG+j8C(qg4>ACT!Ta>vHsPM%KUkH>jheiG;ApQO?ME~qJ^|)JcC*TI+WE|pSCF3OHDB~pKCF9tIG!fiGxTkP0;LLd0 zGR!Vlw>JKD;Gc+oCq}gumKfjU@6@eR(?_>%4tK}S;*kB7V3C%VUkQ?5HzMtc-|_Io zUoBlNiCX+?Y-6XUrxfke@bq#GPmM%vsse&e!QjwT6dtaTO=rXby{k4O>j&o{ASG5h z4W_)2O9j#`$^rZWUma(zc9f;3r8@?H7_BB^z4)V>@RfO>Vi5Y8go;1v+HK7?!kX7M{r&ex1zr~gm<>m_~kKg1`gqYsKt(njwwK9?g}V$uXb63!m?AgAYG4$KBzw2jL}~m5}sBc9T|^i2Jwz;o%pq&P!TY!;t{MqlSondBn=FXB&6 z*0cY#r0~c*KP;hwo04LQ4&_g@#Dq$(Y6{nTnBT5E~hUpg8q_5W= zII`g{UNzZz+Zykl=!30FsX>gMoKf3Y9*Dq=CSKLn@8W%{HdsH(vuJ{>odRsA<3FnYi+dd-NtAK_hV?gqi4|+-Z0qvmz}fPVQqYM1e$;< zlygt95n%JYem#q^hr|i`}9DUk}d0I z5b@eX9lN0>pMdKm;9@&qJONVKYf`so+=iN85+IelCUr_cKM0uLr)v$KAt|fon00r^ zk9*w>@{_u5Ha|s}nzp7Mv@RTIIb8)Q!74G@Scg5qop7Lu(LDx>85UOEI(1ybex_I< zB%s+(^>AQhj#<|nM9(}T7ovkkCbAax=Q^Ih5WeqP_=!A{cX%-=>Hw?9n3Yy=0O%bY zOTAgpRsl1fMV|l+z#ktxSL2UGGPEo`#6Y-U|E(OlgDdp;7 zUs;S6PNxwX!?POJjiQIqVex>$<=|Mt6!(tF2QXT_yZ9XSS1AtVR`lifx^8rAgUmB*ilRy4VX%Vh*+z#Y!m@dohVAtaW_8iND3f3tVd6 ztYId8Wqa}6O?)-+@zL*1A<P@h5u>0tr<9VTJ(bWXJmY@=!m9|jOdy2p-a6pCI$D7M{0^) zG?ULZXKy4CjNB1=#v;)r=w))U3GaU%J(gnW;5Nq9Zg?zO#)q|0e^w~HzQo#$OXrOe zN12zAcijT%#k~ah|G*p@Ny5ufwinw8PA*G;+w8>X&642W)(Py@r_+el%=T)WZ)z-} zM*rPy6eG*at}2bBy4lu7)9}chvA&h@rk`O7dQJ*zqdiuoT}nA6wqJ@OmI2sHDQymV zm5FzbYA1e`i63O*WqmbYuB9ga%J$;@Ccf0f^U)&zL=*o~d-45E{C*S9khI9}GV$)w z?QAzilj;9(6EDlBdHbtO{B`ZcuQKsVOne*tH}S8x7w7%oaTs2!c@yXgjI%-=*LG4WEpG}HA?WYhFjWQhLT9px>iuu1IejxF>4OT;qtBejf zBJ+)!K~;T#{lN2D?!lBwA8&O5xB7FBB*)^t$jyC-5mQYJS*4OU*<7BBH`+$B{I9d| zjd{d6V7U6t)Gr+VWzEB;5Qg5kNT1b?ij%pw+rLlRzt7vh68CC?U%vlOxwoh{(e2>- zL)_6vF$!4ru&~x(}g;Fwoz|eb;^94LfW%%BXJXOQ*hI8 zzr_V`3v9pqTDS*rPvV~c3E%N?SWnuwa654C?)c>4Cr``=Fg8EyYNF8C>3{CC2o-2zvnkJ6{aemvA-uO-I)6#xHLxdGZK5#Df4LM#@pEPSH>@K4CC>MFj>OlXTi^H zQ@p&Ezln9mVf=sfSK1WMdyG9NJ?!7M*0Z!l^2qrThfyhvLwql{_nVj|ajc~;iQiJT zg#B1s67xv;R-p8Of*9qk?CJ>NUlJC3{AO4juYxHoZCxcImD z#kGw4mavmp^YOIu9Z%abPSRbRkT#xA(zg}&Q`1U4iD_H5p=Dgl@5J`DjBEM*Kb1D# zcNyQ7?TyEcVIL2|g>gSHZt-vNi%X0Xzr^n+{2I!Pe~Ukz{eLU23+`-OJnnxo?S`LG zuB46kJKop$cjEZAjBELQw6y;l^CtBtmK$%6w4<%KpPKf6bN$BK`2Y0rjj!!O#E=R-sVt9-^A zYX9o?4ni*kD&M5dTGwc}@E|g#*&;{pU(VaRc^+Ici047kefY%0l>3v`3+XyMtrlh( z^q`95)Gv7|wI*eXx+z!5#sUvKei>D07$Ru2vnF|PIohG%11Q;A(21yjRT4FvV0xtn zmt#nHDU2k0u?t&RXH|v^4}{9CZ&0G>Sz3{kySJeGtn2&}FG1D3;!h0LgQ-der!r^5 z+>A?wVKAlp{+LyGpa#{y*!=yr8()DVISrnYvv?D-D0A9Du}^9ZLsvyQPyc}J-QoZPzn{x01LGtpYmM8siobN({3* ztjU?-srw>B?g|GEr&;r*L##};!NrW!m3OfgiAvc1zI_kgMdqVl> z8W(nR$GR9I5mp<|(3flpU}Q#ACE5!AQhG)Bin|oLMBQ@e&E5W|l)cqF5-caXQ z8_qU^{VqJdM~-sJ9$eR%ygtYHbeZqDi~A@Nd+^ z$FWha;soPPxtQ87Ym(_lO)=rU`zzyBYwiC%x?F|&*@ zgD1v}M+Lv{GcU`3i&U!<%=mXa!EP*w(+_Lw&aZawN6O;6>b@I1&%)TwkPbdy4{6QC z@O-mPmNoWl-M8`VQ;%5RFp@cQopZXk>K3)j0!|5j+B@Q2Vtrm472V_l5-51>8 zWVPf}dqSTeNW$`Er^%A9bVfgbPZ$+0ut|Bd2gf4Lg)MAki|(VnvK8Og>phM4d`xb5 z-3Vl=UN7txo*FdBqk~wK537q|q@f+!KK2g*S?|$DBr_5{<3)L6WMXyjaOynxnvV5^ zOtw%c6DGKnl2`dtLa0=f_73(8g7jrfkMV`?g4x8 z002;-TCxNt2T$)JS%219v;%;`3}#d88ynGQCb~&g$|cfp;A-Gf;l@M*?kxjt(dT1Z zYM;@K!g>jMnqlF}P!IgQ11wDcc6dszW50>c$IV{8%ZDkrdUX3O~C{G=_s>DcT$3E<(u?YzH&67-ulH=z%Rf8 zTDMDcJ%|O*Gi$Yq6)lPn_A%;k@V-*+!nzqhL# z1&bSO91hjA;ifjL=&@U%BKy6uRY$r1v))kw=hlcTMWxUE!&2 zYh!S`h6PyW+o^Vc@!h+9>%swn3b%WDkCTOVFy}TG`=bSDc-NGI;H-d#>YVf2*hBF& zxz*NpR&wx*-U1(-rNUZPZNmit3f~A&_y(XbA)HC6IX?szQ>*m>aN*DfrfeKM{>^}c z%v1CXLfhQhdKL?7EB=|9b9)=`N=K&v)qESf8s#%D*w5Gs6b)jqYZp@Q{St%dsu z0~*a^4g1%90i2!qWgLbgxm+g$<5GK35yIJi1M0ckNlP*T8G-;bQw;TW`jN;Y;BtVjp;2g`eebK%lEplyyzGH@4{H5yHo)pq&aTlJo)rwX420Em#Y|D&@1 zJG1}0P()FooBhw1+5Zhp!;c=p7s)o)Fu*>AvyNdte`#-Ba|%B(!kog#x$INeL4cgX z86;!7t$qA|?i9YQy!9#kM0&GR_)fFm%u(EGzcI7543f1Sjv$WLoQcjk$G1MSOd9rE z8%OcJ#-n)O&pwLvIcx<`=G_L^)LWo!uvzC*&z@_};S1Z`tU7O?&OU|PMlRT_b$YX| ziEmafo3)N*E$ht7W_^Iox_Im07yuaP3;GC)+6m}@8Vf$VkJWuc$(F=Gfob(%GH)@@ z22Af4FfEWFUr>jt>M}WnPtPfALk+fuA71ol^@t5wCnxkX|B{1FpgRg-_XU==snPkN zNA>(0MZJkQzQ*q{W+4aq_I&l{i($6ax^*xb($X-8C?gP&&vxV(B^s3{-&KmRRcpYZ zqv6B)5X=lo8jboH(5#&l{{AZcWA_I`D_vimlr^Kj$0I zT_Oh|8mlG_r2L{=209|eBDGvFQp`DxPr4ND<^7f3{r!=}=h6wc5u(MpVNE-t<*-HmQ~udySW{3; z4DM>3kJVhGZrvT5(=RrM?z;v|>5<|?Q&qOr0l~BJ_lq{GEQC(AB5VCQ@lxw#F+xf8&_E z_cG1aFYo&k?~+>TGnEvcbFTqGe7a9SVNoExnFjVH8+ak8#*wK7N}8H#cO?Wivw z3ras*gcSOCLVutHfxB(m92YUaNdv9oelYtR?tYX&?1z1vYXcD=(k!4&da}G#=I3=5 zpF>?-pDwZ;7(YeoPjl114qiz5N^iNOBbx|BIMio{zSUas5zlsoT}E(^g+NM?l3w;Z z;M7G!{1c&`7Z(uKmcuLQf>gBWxjVvYQKUF!WvuBKjud=L7<(^%gJB$N7Vp61qv z-T&16Z?e5vZF^Yfm1(+}%lbeMu{NX0R!a;v5k>U;jF=+C8|!_hXYqs#ELXTjqS)`EK}Pv|ths3a+RBA&*2Q`PEe zrp}v9otM~kp5Lm@x`lR~1EtQpOr7P2q`Kp!77R1URCq$={M9vSOC#|frmInQP3hDm zD`Lki*W$g_%hD;;*N&^XkDh-R5X^6)-I8@PGLgDqD)%!6J~IevW5jOE2#ls+%;qe_ zW$ruyahbp=VgjI1Wa@yUrWcuOjgI^A0U_t z_I+$Kd^et@@l2Q%=!lwg_3jyxT-HWP;Kn?4%8O-jks?nC>Rm)f;qG-ABJ5Nm@^4zq zb-%R$D0^`M3wwt(NQ=unzx~aae>a3cM2xoPMZBA^PdTg%rD|yRLZ|a~b>43=`k3k; zvVJ)h@1x5pYD7{X9r~Zu0m|7HHHmg$vfHIXE92))XOMF>lyHJYO(k`f{zaqV^i_~+ zk!;RW1%z2ua(~M`A`}DBxr#zwKqdKd#<)BovE0lQ%5r{Su88Qk>{cKCYpYfdZPw~i zKRdM$AiEdUwCZh=%ULIv_M3=_kdQv-Ny8nDd4^l|@Z=<4vNf4gn=E#Wz^5v4| zzNDL*YQiMoNdlxX7jWpfawgK!KN3P^($c@rX>2K*?vmCmy?bcl`2OuTc1!D|rF{}w zx``NR=?y(->3r^4x-Sje==zyR=rv7Pj$L3?Y?%6kooN`EY)hNYMootX#%TEB!nl|Q zFkpj|Sq&2ga?91$;UYssL9oM0kNKPs_w=X%a?uu{RjLYP%~$nPlA4SyWHzsW@{4Ol zp0P>ahdFFq`QbT|_(Ae}b7OE_rgnWyggGMZv z?^f8&nL*)Cj!IQLp*%kLfegL97(Ih23i-h*_SETj|jz^vA+I(`mBmbq*e-Ge|_$-w8F!Pd$vi6{*~irE*ZRQ zW*8$P$vG8(dtHP{W-XJN2UP7m99||P5a{DyD*e{RP&0eTrQ9Tx@zN=bhQ)|;ww#wn zeO<)a4XZa>h?seAINN9~t^pD^39g%7F`R_yBQEVuR z+jPv*!DSTE>-{$c*^5LZP%Sx*wQV{Tk)dd=$}VA8FZg5Auu9=}0}!zL`?XZaIsKqW zuMLWX*6GUrbSK+N`@sQp1JE&4PE=`V8-Mwz&>w&0uN8Wozu{07f9-CBAFbx2GPH-k zQn2byw-^Z1lV9&m?87!x1^`J!CC1>tUZEae5^rhZ`$i^UkX>MqtoMO&AYS!yacIXf zVLKNfeSs4M2&Jp)vm*xt$YIY!Ou-x%p4K)lCUy~zQk>Nt1(PTP<+5pA1wj@gkFJWZ zx&%K>ii}vI&xjLl5{Oo>Apy1kY($w>goi`cz1*q3x+DP_G$~e1?0i0Y1+h}A9KY==8tJ%N6*o+mbUlh2uCnv% za>%dCah_dXle{LW1 zrBq)Mu#Z;6OBI(0&=iN2WEIKAi&c~GEYn|%f40a_+I9w%sEUyuy0UDc=}M`MkJ6P5 zx9hG*NOTZahT_d3$oka^|mG4kx7_w-rZ03@AGvE`YH*5I)3YU)mulzoRL+9-O9siP&Fy)@& zOu>YETBf`la3ZW)LbWN+f_PHE?NuoqCoLq2|H6iO&dhJ-1g1R&a zrPFjF9VldqHNM{=$LPRC+IZ$3{~fYs=5v2qaw}jFi>0|QVF_9b9>1;ykKaJ>*w#RW zF%XRVguUy+fpRWbl2t{IDT^T~E$B_JCpt<|vA}^mb=ML|3gi26eo&dG$&tD1P!htFm!B6cD8>4g9{B|vt3f08WX2-4(qOqqWB=uCO zm2Y-{z*=S*8Yiei%TWE!fTzXV zo|3nuNjuaNt2I4nQ0Nde384oS3Oy)LhkBg$=t1Aj?F0p=PCb2aYpli%Y3QJO1TT-W z=M>fz+z3yebsnSuxpp7Z>|(In>O~)B1{b(G@|vv)YQfF&UaZfUHgDxKgSV47tL1~4 zzTp?v)^y_4$mAaUp`c3}q*D{Jd81{F1{js2tw`G_wil``l>I~KG7H4vaJeTWPzbcA zaL{q0FTtwwr^pE{h-?+-HTTi^vKFi2Yq7f2%UawyE2-4WYTTArX>Ro_$7-`2r^#}Z zGSu7CxRWH$N+PRz6Ms?R>yCo%7ArazdgZ3l(rr?8Zn@fdh8)cbZTRfIoZS5dE_5bD zLp)zDo*KLAip3kWx*oT~FVMqZw28ObYW}Fzy}oF|Y4v{AR`|lXb#aw-ZH})c#0}mn zv0R)sk8AaAF>JahOIG_>UQ4jX$c+@5tj5YU1~eb6UGCZG>`!}IzU z2Ryov#eP|>?7zpJ)L}x)Ef``g$ZC%^tNR3D6{E|PR9~glJF(veT7^g2ZCEF@U`rM7 z&r>4TGwzawNAyco!7r`RV$PZ;*#Sq%eAl6h*x)T>Usk~#Q}_dp2x(AMc7XC^hsD5f zoA}qyMVQH6oHeH3ccTZ2{+mGGwx&VT<1^F`2P>Gv0AQ^3`qN3$ z^qO!UZ?6eYNrY)aBQP(EvA{}Y2`qZysT?C$ky5xN>lDk}#nV*@jgRJc+`Sp_Ic}c=+ zBKv;1P4WrnJ{YVYi;W(Z#CP5mM|=99UjPF=nlEQ_0?u=BFfN8JxdsjG{#4k} zz=+ktn+5u=iR8W>7Pz~v)Vpc1_tjGGTYyoNlFUl>yu1+%xC&ya%iWhK4y1yXUqbt8pmwX z5dX!}1E0ElwkT>`XXUPGYn;LiVn9YpQbQPgUG>k0c4KYYs#!aKYF2(1uA)t##GH*d0$WJhBAG zJKa)vLDph#c`UHa%B?D0w2fw{<-cH#0xQNdCpm%Tp3v{PlQ7=cFXtlCoIt^~fAC+` zpNsU3KmJIj@dfU?`S46?5*s%e4CS2sy%dv;nKB3{T?{eutN}40h5#IU6cu8tG9;)i z$+4xTmcibr;|k`I`;|}alm*v=JaLiryv#6cgK$eN@L$|0<6IjN#)PKZ?5t#SpGEc6 zzVI|SoRnlx)@8Cd(G8FN`swlO?ZV2&>+KKeG5|eo4muoBjkq)0m zlDhteHir~rxIG%F1ZGerw;DPH_?QCzzE=&vE59$M3CF8`-^orm;`RBS$rv`B?>22D zymkop-tZd(`D=}L$F+HRLKSjdv~m3Uq;?FRWI*(+h;~7n6H3Nh>R2}xGv^QVDfhFo zkT7~7B!b|b?&P16->u&1War<8)(uM=rK1#UUZ&_H&!i}yN}i|f#Yl5SVU`<{gPx~l zY{jx)s1uED8#blec4GQ~c4H^zIBg^*&=o3{`u(^Jv5-Q6oWPT`_UCF|XgrJF5G;C! z`sefv$4JqO;t4&=U#!DmvPn$2#O4izzTr@l9!LT!&8E$4o_I-EV3O=_$OyF4BpcP` zoSh=2t(7LIoe!}Sx{AxDb1#06mSgw7QIqcU4i;*!<-_cKKG)^=kYFs$qGsf__J zggR?SB;+O`_QQY8X7k_18G&ugwK8hPu#LRl&F>||(WFg!6B>2WZuO~;g`_FE>Nn0Z zG@Npsx=E_4QWM6C2J(SuAfNA47ed(9pu$r^tixER3~R$pSXH1Nqv)DFZ<`&l4UFx2 zb`!+U9@2|QAO4CJ`1HA1v(o)Vs4_NL)t|rn+);DJ6A}Vwv|b z7xG;?F)gS+(_{1cM?y|g(nO!?bY&T9!firik{~5TLeegudi;!RsM^h&kVF%b{GuM) zZo+BOgw87@q%wd-Qq$$&q$fq{tcE-A; z-eO`oWH^D^nmhRVEL5y(Q*ta_pZ|RhpV(k~Zq!FTWM&r4(59yB*?2!0dPqb{Pz^(6 zj-)ec%Ev;XzX5L~atnW(pA}-U^s2#sov!Y@%@By=gi;L;vYNpI`|+36o#MIc$yC-_ zlMcZ=twL~^OM^>R!bhVs^foXzcg$5$bL$aEF=r?GLI!Jjc+oXv8Kt#TJ?Pj=2O0)pw7e zMX^e)8AY4esNpwc9jmKX>d=QJv@SoqRu+o7Qre`Og01oAU(vvmEAOokbu?+E#rdO0 zR<}}Y#Fq=Sntzt1i=y7Lt1}>i@mN%)oC`Y|&=u&a@sgGI>Ydz^%0)DR%Ffr7iJ%5H z7o;uH?;0#w=*Dh(49I2%0Q!{OEKf-gFl$l+lK|9a3IsG^58^_$fF06bhg_0J$nC>r z7n-eLkHmYcPlWna@GBFD1p-nFf^Z3g5!0~BS}P^+R0w>Q(oGtlI$efKgAZ+}MCJ$h zD}f}GEcSV}RwkF@m_4T+`jehuYimilZLBq-AAtfBgBo`7!t5^uPS&LQ?+|dQH?2=y z%4-p(oZd8;ihdVUlVWe`hfa-&^_?HzT21BL-nyKQx}2rW%1NV~=77^BZ8vs4S_008 zo)*BFNdil6{g!}JvZ{h_ngLD$5zPRn1S9}X`Am<^1#pUK1qO=yVxA2+CB)ip15PR2 zr)HiifU|iMoO6$#<@A?o*sYuJ_18co-NKq~Pe?crTz?8hOnXcbP3>ROl=&qx1NbFG z0KeV-rFiZ+C z1q0rDpC#bk%;)<@1Mkxfc<24EAif4|s*b)73_)SK3p5Y;ro+WQoB&YrgwSm603UPA zZ(lEZGn~$;#w2Tq4POFU&!N}%p#(9q?A@27^{mVL4mh6>77m@>oek|NDJF@iNKae2 zD;C;yM_>UqnCARmLJmGDAq%d(BYh-d`;NK4=A8nir9Sn@c)8ZOFbXTg%AS`B)^eIW zN({B%0Ny@U#_Y27_Ko3y+VTV5Mpfwt*oELsjf`iBs?w`WTqL-km#UGx`Z(rah3Ztt z9r~ea|Lv$q(7=8RgwgEB$zwYJxxzp_0S6i2bE*E zkAGtAy-FfSvwBxIOC@ktr->J`I5B!jZ#q$qI~DgZZX)h> z+!MIjIFufzrzhe5>;KU6p8Q|W9nYEA22t`5{}+#M`!^-wA1RzVRVshel1zb4`!_vZ zKZlw3uzuR2tK4&}dsZ;M1MX>M+jXI_?doKBAuGA9bdc=|mBB$SN_#~(V@mLF2T!Pk z5oFSzT3#jg(R%T;YU93DBq74RlnC|o-4d>eU;C`>{)pW0T-#`F4si|Q&sS=J0NuM9;PA7?rUtw zDASPOebSJg?KC9R6^uT~?-=z&QuGBk}FS*Zz`_NboeDu7@yjXlD~w0 zO_k$O`Zbi|biZ5_NKc*~*VwO`>A}ODJRwhg8b@^Z1+t}PCCgL(({!Q(a|85uE zT(^{7NBQGT`J2qR4VSO@xDDU~#sNVe90u)rAJiMFUcIn5-AMfm6a_0Jzs+;BU;b5AdBxQ$=WqS-p`3JE*2xFPHRqV8Ydqbkk@eteTGAwXaQ1dSR6 z6%`FC0xB4gKv*tfU=c~QifCIk;*HBLP&JUaS;=x(#TG4AR8;y3N^4pHBO)e%AzTDh zs#s8Ci#Ty<8x=8Nn*DvBnX}2}g17hm|3AMUx;eKwb7r2IdFHu4XzE=L-l*@L&H3!p zYA|YWya{ndhO5v+?|cj8TIX^t7%X@BzTn;16c>`QC-eRvnd4%&rr~GRuY@mh;^h*} zaUlXuNg~et$JB9>D%xiHQN(>Tk0`u$s<%(C6OBk9Xzs>@~OOQ&Gb|1kMYt({SD|=l*B)c_AR3)8Ax4ENU3U zl`HTim|(pOz<_PnOw`)~Q)-e*-|lcUCgCV*_&w~AYr*prD{6R5&ixPM z7y902xmW3B(@2DLUiL7G1^YrCVRJj5foxh>KYk_D^c-WgoL$LG|4(mmP z`dT6TNo-pdGeC`PX;wt0h;HuPu|Br>LVpro@Ad+S}IOrkW!E_FK!^4?j z&ovW0lUS!~nT$q=GLVj$KqK0`Lqzy0V7Tz!C z{?GKeq|=>qeo@2c99{l*c4G`?VpUUe%{#RwXx5ODvOTFmza8vIXBV@Wxldkz9LnI z`>q#bm+(1FUjkU>OLxZBq@Q0iV4DsEY#==@_IXSa8Fc?c9waW5f0ZMh<1~(EFijnj zSmpm?|KgfAIzB;6l<9-SgZ;3G{5bS)9mfx%eRODI1PHe5ZhTzJuE!aIWU;^~3a^i; zXHR2Y?Y{S4T#Kg!s`}~wT2|6V4G9Tt+-!Esx%l_=VIx0*gY@BJ&e!nM;|?sM22OF& zlM@`F4^QwUkw*y$CwlmE?nlQXu~}bYE*N8(yV9R%KjPzMe1(i{`HwJU_P^*8x%Bd` z)UhO{4w)MX32}P(&acVF?GF=BZR1Y&&BjY9Tmz8)hL_Xy$g>pl51ZORXCg)iF)-FN>>Hr-eKN}T$4cw@u_ z|K5`|b#|wS4?$+WCh=}+4E}vn|8m=lsWeC&C4NuxTf*;M#+!d;N}b?@r!D^HhJGdb zVsu9S{9~NnHDoPI9ZhT6Oz<}A<&l~HvJO}q&IIt7^iTSB3qR>+Odr8p($%;hu@l7L z#{Ykv#_L_p{B76HAT;SV8!??*Ed7yw<@0-vUx=Ud)gC|T7(F}jrt9BN1I^P<9_7(q| zW7vn1>-2%nn4@Kkb{eyzwEQ)xsK2W(cou8b!Nfai^Z?6A5jUwfm}cVqsE+j43)rea zvRI*dTC)a$I4(ZA2ctOr=TpM2i6J*;VIFnoyfazpDHGw^d)<1bs3VLXe-<@a6P#p! z&P%eg`)0i3-;{uF?iq*_bcm>mFX9L6x1Dq|Ct!i5T%+F)POc*W)HLgu_*WlBemb-> zE^!CqY@?-p#E-!f7v(L!w$-ZFh&S;9J7|@N%|NKMH-DQ9GtPbm4ZAVS*qbc@M7BC( zj59K))cKyo3|6}vKq2!FgL*lLw?ltoDY2%mIX z+XbiUf?afXE~Y!$HUqyiWU0P-Ph@}?WZ)Eb1P2vs@p}=)o2k^@=Aart&^km=%TRA1>zBO-ln6#Y`c!Wi+iDKX8&b<&4zr?KX}9*XMjQ7`Ty}3jhM&${SLL_icdrwBX(GOWtNReD*Uu(;W4KxP$>(A-QFLk zUY?KiYJA@T?+%*$J4|pExgOgDprWa{rOmubHg4%v(WVP=fHGNhgO3Raq&aV2(b+*b zwKRspOf(xfzQ=U1HIKS0dXl|F?%*or;Z^k4kMBbjA=Rkgbi!p_Pm54MKaBWFa@FP= zAc@ek>+%ctsY#S7-tP*um*yLzGvLyXpJ#Q! zl;XmQ_o84ChMXRRvC$AH3BzrTNg<}%(F$zfA2v^)x=+VPvijw!YZ9eFqR+hd`;FL( z<|nOm#9FcM`93T5qWh(EE2B28h}A#|CmG;~8N0XVq)- zi^4p)xl4WdCk(wyjsTd<5|QGDO69Mw9mYKvGmlEbAp`^+3S0}&Ju17~pCXc$HuKM` ziJ7J+yrA#C+_v;prY`6T^pe_b-vjTtH0%7|7?>wb4CWN8JJGZnuy+h`d4N$61v7X* z(NpsuQ6=tHqmQrTi=WbOtvC<*ip9i5&@2sj@$QZoc#R~mS7xoZ)8H$;?Zrs8*7pqw zqE$#9<`i3Fd0xcL)cl*zjqX=lMzCLLW4tNFSYZ5;q8YPBnyz4yQPB{uE~;H=_r`k4 zOSdQCJY1~G5~58Wy;$1Zhc;WDWJ2;4kEIZ^ER_0a=5}v4Xt2STxQYjI6CGyecHfue zamV1*R5K%5jc+}U3sfX^9}rUsF*@HoQ+p_LdtsfbjNZNb4_c?Ta9?48-{I{j3+8=- zt%Q?tDNiaUuW=PuQ0I1Lc26kOhmYeVBci%WoD|gS12G%5S7R2>uzt~YFWmCL6P?oVv;Uo=>?Sl5uWjcKPCU|tphoWA4qM&De83S-hsKu+#@rEhNrQ?& z+T7qT8eoA$W}q*By`4vQaQkF%}E3 zF!l~!y|^*oz1_5&68v}2EQ)8|68uZunBnAH%r?j@y5kw~O2Ajhjgg)3#U6DB7B{*1 z?*R?-hJnX`I)TSWnX&M=_+tZ)ylxDwyP9|?&8?E`DYI|=XK0D5RLW~h8G?G_$@;g+ zQ5-q#9QAlR-E$W`uaOy?zeHC3N^(8rJF-dmG&}s6ZR4o*HT}fjQ^))H*B#&sz59p- zX2&NHW@t9GupJ+10g1*Zhz8C-A#UjWD>6QAmb z{H-R$?o{s>GuT#+Bw~Cj{#FxOZ&dPVl5$_F6?p)~n`*W8^dFy$T@m3WaM2PG z$JoB=t$P!7UkGD5zA;u@d+$m4e>x?)U6o`$8#myn-mv_YX~bO3ntdL#ZCtlQVnLRH z8&?*#^Bv$z^GmPC8o7F%ggTV3US=h}M*DDVOCk*1h>Fk{NyrC5;M3$a_2#*vcoogy9`#Dh`3s!Oy^H@&=nKR@eC8QJp0;T| zp9-}7srKemn2g(>k=N99c6HTw?;DOLYVB_OyY{gv;As724k&*+wgaQV=zi8W3hnff z5C<~%0a}~O#Y(V^a0`4cYgR9O<_O8sfnJ7t58Xtyu0V#&iE(%k!gvNQ?#wP&=i)iR zx2)_Gyz5%|z!6hU$2fK9nuiJ^b_GP&B!Na)Ygq$5kr~d2ug)5iu4ZjML#*6g#ak!< z>jwrq5}7?nz4R|xsmU^WqPGK_ZGA@~PFjPCJ{JbSAL-y72d)u%Kj-YupjOvJYy2R> zkKB9bnd~Yqwxc7yn`IuLj?K^|I@u+1bcs$5-|)fiBXinOmG5$CphUCT$KE{)N@na= zg4Oq_i3B3ZUn=7|i$GL7Wk0naUB;tE!|9-6W? zA)ss!ifj`9hNQ@>L2A)q8$8}QIG9NQo^bwao}S~$2Sej3E7;|~OV zi$#nZELd&4Sx;-}B4;EAZow=~u2lP<7Lo_X(A%BB4d*x<^+aA;7l(_{5&{=+>M%Af z+QcPl*kU~_<}4M*oz|vc&LVj9giV>kQ(L=Tzjv3Z1wB~%`&b4ii1rg*3itb12TA_w zo>*oR5V|fApOPKw{2AJYVuYzAa)L?&-6wM0F*;Exb>ua-<% z;hB~ol#$)KQ@0<2A@yB2$o;Cf4-|4Bh3~f2u1C2q?W#qNR2;#|)?Ic3O|Q|~aO^oW z8=S?|!J1B!gN7(HVhAfBWT?$EYr%wvHf(hlQXUb4=FlAKo~ty|4u8C4v;U2J-pHEW zC8F7CwZo$Y=MeNg?UwH;G5P3;Bn(SYcC9of2_#oou)^V;Y`K>a{9;be*RuEmk#pIR zsv;_RV%Ra*y~KCQ;K@sCgi00AoZR`4Bh$UiRlJ!S&AZNc$QI_`l2%g(jblw-78()p zAJ3X|-hgcb_Pbuf=$}0I9}d_dfi|)~^jAdu??ndZEb(Owp0d<;ZrH0~e{Pp8Lh`1{ z$6ickgQS|P#Ke6voNQy2XH(_7(JJ2=uw7UA4wbnAx6?&h9PX*B`=GN_=PI7aU8(W| zsWNBTSa#FEPy>ufGO59QdS@zU}zn@f8AzlCW zQ|s>);Y2n1ao|zwJqe4*gh}`lMyJXry+3z^&oeKpvveU>;6}jGvS1Vap z4-wL=C;Y|$c#&K-pr96HMFv=IobXE`zS4+qQDm)rOPCt@6poY^Kd6_7N1Yoz`Dpkj z!W?_l-ss7l`Vn`2$%&P-Se_cOVZ^tZJv4lzIug=tSJUe%A~p58tEti~&1##5MB6u% z_R(3(w|HW-9Y`giA8_0-OF9(#HH|Y1d!f6yM7wY-bO%ZTcXQuz7fwqw0y27rlfZOc zSa@qS{B)=+?McFjrl|gDDL%M3i9`SK3AMx5237r!IanF5kl+b<;kk zM5MuCmOEXdixQ#7on#05WTx8F^oX`h_MamPkYxPP+`T+%@+Ep661Wb3=fe?bCfScX z>W%sKj9U{u=~O6pm|yXnz%9tR$oL1SN53LxgJifc?7yY6T=YT4-@8%9e`++##SP8G z{Dk~6X)YSxiP9sR@%AJxgAV#Y`_}ej9v0B4q&y+^tMw#w3}oPiE#Db*?P<~+y~ez6Li=b9kj+fK#Tdj zDON}SCc^2}BB2OQJ{&&Z@{p|JuxsO05!c2M4Hcgzb*dU`9)~+iC>;sde{dU!*Z&*B z52RY7i8(vQs(6P)3%*4Er}ZxPm!hFU(Y^CzttZPT6eVmH{>h?hR}b|U$P;~JC6N_? zJmE)5IlNQi{tMAZrX@w@pzvA^`_Li|$r`q4sY$s{VKkC(_*|*3;8Z@gmw2vcb!OWr zMKHLETuxD83TQ6iP4Hl-Qu#mnmyjiSySQ{ zV@6ejTFI6nY)#8V3=)_lV&0s3#N9=D!1U-%m04=+u^(t6j>R(}B zTMD+c#-``r$S$m|UuSbh2So~@y`b7;610S&pZIG&w4RbsjJV(KR`=bEQ>U9K22NY^ z_>@#LImO!U|FrJgidqmH(H2@nt01(#Cd2e;_) z0b4+_o5<}izv8yUPFQ*3Xf?R^M`Na}Y{kbBGew>gGbPbg{4HZ5wLU4eR;eTZ+N?>ua%+%a@b8g<6g|daf6WYp%}TttG%txHu9!%gnn3= z3%SU>QM!olANmGsUR`S5>Ajc>Zt{vp&1ihXffzkibu}-2eF_oiPF?@M1eJno7Sc-Su-9)HD% zcwh3u;R#oaNbor&HtcET#Nh>GF8%oxR5oKGn&o~m4az!B_|tKNtU9QiiVn-NYg$4eQ&v%$ z*r*GO=SCK>Oml}eS_}8pw@4ys+Y_{f04>WKa}(zy(G^pmD}F#p_~=!n}6$DUGyzqTK)xRMg>p% z@L6cIqL8B7P0_D+b#NGEX^H!#O81Mzb2ktE&I4gi{y>8Z3zi^c_su9Qc*)`Iu0FZ% z?Z{yFVwb-cEvb=6&MJN8+mS4NFPVF#c-RT8OO^g(on6IeQN(|&i>o-Dlfr@*9mt=c zh6)SP!4E>Df-*4WIWCDhVPN51w7bhP@IVHPJHa-TF{w8A3Wte;Y z%WDn^ZGrnv@u>hu{85U#8YtCVU_)pL9Y2F}xL%M<+O%mVU`hTYC*V^Prt7(KeMZyuQn~KZbX~?ZP-w?&2#b!%6?mCB!4=RUq^)m-4F)0u`TBED z0^sY&I46)Nnfxtv!@TYE+aY(^R;?Zc-hgqn;U(6OAN*7XFlG?}h?~*?NK+3JX>_ zy!`~(Jo$ya(Z9Pey3xC$fDSl%^Bg zn%VObbo_FoK}0+Y`z@bkeZwF0x7qA}&9M2Q63QV?Vzzzwh{U`s*sk zY5ZcgS3{rnMLtdJdn+3OJ>D>qeKY#c{75teh0u#%t1-I*x0h~n5K+|?S9;@UU{wkFGFYy4tkw4OqgXy>n# znCUZ9imtr--r2Xh0+NdkWVT!Ru3=NJn-nZaQddlV6GM?&)t@6ud3tcvdnpzwm!P#0 z8?k$Mhq#a+y-eay%j%cN7 zHWyO&KI!J^l$VH*Jvc7Lre*?47;9d#srh7L0@O;ym9Bu8x>)3wSvraNNkn;SR*U3( zAMuWp)tOW}iTd4j>ZGRneSgYRw_p1vmMG9s9(5z9(Oz9duP(5AwUoL|ue7C6%U=2J z5BJjiUfBl^CLPiI*b7PdZHj(@^zbwI?b$$(15Mk{CRUIt}FhlD6 zyqHM@If`fV%}G)hykP7KE|<~uF|k^Nq|i#XsJ`}oh%6~LDyetRAxyM*E^^iHmul-K zaLY&6X;kul1I?@o<|MaDGx>o?XW)qj=eYuJ$@uz35@5X|d?k~q_%GZW+(m4J(!@qc zZauB1L6R!^A8DvBQyP8gJQKo5K5hL7vT~s-xNc;;hb2=i`WLXZ6eTp2Q;GyR0Je?H1GX zQd2DbxQyJPXrRk`uBrwR&c0peI~?UC_tNPtQ&+uXjna0ex>oCq%(_`lYe)E`*2TKe zO3V5Bw|j!l*G9`err+QjMChmDJphj?iw}Z&IXni%echiQRb{P{1sLKH)CR)(#*v8{$%ThEMk(96tb?tdpG0R2l^^A zJ9%dJX-=Z{WT$vSeov_+~oLmlKh~*ahrT4}ZrxsYYh5tuP4PPkRc~BH(3-WGvJWGx zsJ95))k91uH8&KQo}`X_`&VO^C&*W)JJ_Wjd&(^OFw@f-Pu?Xwdy`b;Q=2xatkjMr zvJ2@1ki<*7RcsYq#j>+#Nnt(l_#XQM_FwAQ86DZcYQ%IgPxZClGpR$^BmAEZBd4bD zBZST=k{5TY4cCGokjo`8fr&h!7V$~&#;x~h8>kMHI8~^TS{_qKN=!2)vULeppfC00 zf7b}DJwt71)pXb2e;{N~5drDco*ShmwzGbSzw9oi+uzej&v!B?8)0p(`Wt3>tQ4kv z;P0{&cPszq4O>Gi-zJ36iLdbJ z+UNB;>OKhtcfLp$3^I617CKohcBxr!#^Qs&9nf!`Vcwd{^GQ4p56)GYxBP`~0EMHY zdd2x}g8j6{M)B)2yrqS_w^i6Z@(tzHvN6&uPM-OujT!KeQ{*6BBn`QQmrwq-LWa~; zEKZ1x>$!2kWFl1-yCn}+Yt zy6m^3j!?FuSy=(hCtv@^9`<%LnRt86O601G7e+rVx)by!SYyUp9VX>XRH=;!)?FJ- zRJIxW>oY3w;gtCd)(e)yB=fVleuVpXa7^L%Ip+=*qrJpWuq>Ny$D31)2<)|PKWvxS z;fI%aQtS%V^mmGm7b4r|xibGW@g3Dq?NS}S5@J_9_oW^@Ln(*GeCa=SmutaM28q48 z`YpXzS8?#y-QOBzY8o5TPb_n^TBDsS@VZRB*(u@s{BUTyd`<$zP;WQxCBAq1M;3UN2KV%U(LzF`D;Zj%>i z#1w5;0F(lsGh?UrFPCs0n~^EC-Egr#9Z#&4U=mVJUGSO{6wFN_HpF&+#jx(>uGJNZ z{$p{oU6I*I6R(j}2bpgngz1WR)$C+0xqXdVDVgDXb(8!JS!BMLf)Jm)ZIe{RSIb#_ z<*e+4%5WEX_hkj;Db{ec*5o7BE^VVZCs$revD~TFj!Ji@xL{Jy;|#l{c%fa~6r6o> zOJmLts7sJ8)wxsUU8@s0A58^Vc6A~RcGm0;lT_CWwaR>Yssvmlc zP4pr0PR3x%_3|7r9@6$CwRj{lU(oT>U z<8%%SEb@X~m|Ud1n@EgApI-gB3JII&x=6Apvo%@;?-w0j&ZAiU4b~%);vv~UaLNh{ zT-4_O2znqa^#*j@*br@Xm-CjxW9_mNPpZFsr5Em5A-8D5o=1O!T2{E(EuKkvYErU% zKD}lU$low=tj^}%bnn>Ao$ULrb$k5Bhp^}KjdSc6<|4yc!8Kw=31=>3tNGUD@-05J zdJ^`dZ01%Xnz86x{mF*G8$%q33*4)N?IqUwXlIR6+CdQWU4z}LT_fD9@%J9io48H@@~ZeUaT_ph|?3rj^&^)#>0h2?bNZ1aeT!2Q|0!hL~HC+=%=B$VbWkdNl6CvK7W zlf7%cVsFS*_n$6F>4gf)St;VPPXtax2(KRIuj}br@Ea~6;cnceNw|R=wu(ocqjIz} zu13NY$mdR$X3*?s^ro3ov(&yHkv%-5CFZoGh^GWhmpNH0Z{0FlH(nZf8;^82S}n@W zQR#@YMf4rK1Qe0fgwyMnKrtEqUe;St{c_Z)YqZ>=|#w0NJqB1 zF<}Hi5`}QF4vSDIQ3&agldjW}yFWS!Hk8~T?vhYW;TYm~ex@1dv$;}>&ldUeYC_L< z9K*lI2j^$`j{PKVX#XXj< z#NOx%we!^^wJ+R!qbpREpUOs8VofO&AiSTk2S8kfB~k~S&}2zPxI@PF!8v8F5!mrz z_@+VBkmY))C&N5R-EyvmQH|)>BB)n)so6B4X(HB1psOt@+L|P-@D0(?IPk)8ul`G1 zuzkq{XHAGT!)5<%=5ijF1}YL8BMO!0b^;YLfz%>T9H~Jfm}D7sn@OGv{n7}j0Jm9% zELE}M^DT?`mU@)uCYfu?S&M_+^o68TAgdLEtn#D*)a@%H9xrm;NKF09VbJN- zT&m{DS@H>^@>nakB5TD;FQP5>^3;kcX3_tbm6og488RB}`3P$aa*v)!;b)$X@Wb^` zrL5s&9el2sbuLbTECc4(pR)NRlW8q6P5@!epLr6KoV5p~AZaMD#4Zq$0=v}Y3&aQp zlM`3*t#T&|rfHeXrXjG?)Eg-4z(QL=pD}z+YUtnq@>88P6DWJz;yZT`2Z3MN&Q*@F z9Q$uy<@hVVP1{yEYWTgw@4~l*_UI4?KkaO1q830oCnge0Oa8TEr_^*Z`=7Q~Fcbs6 z6Pjqa+!jio)Y9hQJ?nDl1xXsyI+VZmg&7qM<=>ZBB%?6i-|>*fD~5;&&@U2N`CHfuJhX>&I8j1cd+=$mD#ImK-ZAD$E%Jyw&RQ#M1WHoZcB z{D*s^$ykpr8kdlI=`fxl=5U0K(qUzx$*pb288&64K>#68;vfs0gV^(MIKW@T&&j#C z^|!Y!@mD0Fsu_c-W(KO7;SCjsk~-CnM*-~XT{i1ix7?G7xbA)4EW3@@t{9GBy^5;= z?^-&i)MkG}qHj#u^qF^1(06i~mr}Q74tM&JMH&aYq$!fJduL6(ODYOUMfcur%D4ja zxLhyIZ>+4n**~Kd_GqfGV_84lfJE;f%Vv3J-p1!nDZBe#`*U5&?lDh|Awt=mw1^Tt z%I@*nB|6$2Nc3J%_N%+^nJUd`;GMEtXGWXzAGzd;ZXy-@l#}%W%ErbexdIYGvTXdM zN#6DJ_;$X~HFKhLRv;YhZ1$*0UY@k$iT6;nttXXv@3{L`0~r~WXyMtkW&PA!XU>ei zv8e1mZgJIt_g%&Ju^a__QsXscGjI8ou47DdsJVQXufO`~r{gwulA7ZwdY*ri6Te~q zzn!!GbDI?}&`Mo6BL0fum^!W3GsPa64!mJgje35ii+vC3rQAG-iu%d~O=U9ID8{Ny zRtvt=*g$qwF?wWE5lZ4T2GSZHO%k_-2WnoXP7ycP8IU~Dk|M5N92imIiSJ^Cx5ub!SbXP}jHTHl46lb8B+>q^$|Z8*)p<`DIw zGyJX*rMI%+lhsV->ZGA!p4pnQ(~Esd8eW)^o4%7pifcF7!z&X=d};y!ZN@3xnw(DH zZ$g2NP8~49>93BvWQ4Oc&b4krkA!Ulu5wQGe;R+uRZd$0;DcZFR)`Xk>{SPG71H*; zn9SCO+-U&%phx}tRkRo5Q>}SP*5tHM@>oRg38B>8A?NPQJ>G|`oOINwaHMh8h}7V4 zzNB>#QBq$Y_4xGxrKA+jOL6$l6P3y?=#Xna(&E;W!BHLZ-e$8&l4>d{hm*P&b^(TP z@TjEOqiF_$9_)8VVpTxa6k1wsNsdrVWoYk#g`+Uk#i4i~M)Tq$>`>v$@s%#9*4Ebh z)ca@XtvHV!_#;_!&Ji~nXXG;V**_b%{H+;vz#uqiYGsyFN7N+zta?krP0vee^~mVQ z)1^NU{dIA^)3M_X(I;OLoDYKWWR?aSlg;%^%EM{M6*!fdNI9X6Q_%?x8X>XdMGkSq zqh8_#BOwvu=*mPA&*<^*%rSrZk*DMG3;Q6lH?oFgk0K2R0?fV6QGIaX2=+$pAkhdqkG4fH6ru%HeH{lbD;ysrKd zM^LJ5$N(}YA1=vJt`UNmT`#q4&$+h1OxfnWKDEfm9#;B{!&pY`s><>e5ez^DeFnSI@r&20uqbmelj!f z#OAAFKrOCmN$T2Cl&6#FP1@8ON-&n(6zr%!q38RrW0_k*;>v9KP;c}yZ&QQ5y>RaF zOkY>vPLQ@52>|G-> zdPimqvaUh`5W=frTzUd7j~%f$?T)QPHmc5u??7(U$_1P1bhPi7wu@^H`JSX&HQ-8M zbvW7DNvbBc?4)UN5nr{~K65iTJjuf9AGO9l@^y6ign?ldlP_)JJ|Y9Cs+ZA);=g`# zWrdx(R{Jk>KUov>n^G{1AJC{2KDh4%!06@t(?0wb|iv5q9ei9SZb%r_BP&( zMc8`&8h=ea`>YRJ&c8`cYg|&staPT}h^W)`@FWCBR)>Vj$jm`3NT9MNg@_k|;xORA ztOfgm%+{cld6n&ynN|-l^z73=|_HG`)hXVcKC+M!f7SSxX{DW#DrLwI2ADF#`{lFUw;)y|sfq z;5V8R8Ssj6X23th^yTLb_|#=TcfemuX+GeuaxDX%+6)d;_;oFfkwi&+t)nz}W zt!KAv>yZ~uh;NHp`ClYSJOhw!PD(H&PL$wUkS=6TvWdk8m6R9Mfzgb2DBE`n+#B8f z2?G-6yV8PUmC|$UM^D^Z``f!6>=uBMlkD2_$7!uAN}d!eRbo8r#Ti5@5j4D{Bth`iwcfW z=WKso_&m;+s8cu>)T71BLJu}=9<6D?QO#(>ZP#y-1fOlOZ~Ge|6d@ zr9(S?A}Hma(VBc&@JBGpW7kob{$FP4h;ct>!s|I{Vv?*+gzlZjMua z#dRy3qSxnjvGfJ|$%oJnvYqISBnecLhKFdS`=4=8?z6gRYS)S3k5zCWj2`o!Ospe% z$O)LjvC@6e;o8{Vqn0~rM8t;JA|NI~R?Y!vY;u1le2G75<}PohYh9d2O>0o{$l80k-Sp&5gCFXl}KOPr8*K${dUmq&|26MXbq+XuX@ke|!_9j7h z=R5g>{}y@T75CxG)$xZUn$;eOzA|ABT(o;brhARdCEmx;c?QAbIZ-AAv@25<=#gECftFsB0gFj}@ec2&8=N7vEIpA%C zu<9_kWZIc5rOdaY!!kIrQ%?NbNT(_81e%KRrQn<;l#4`EIR+~`rx!Z1Wi?tywupny zZxBw=StY_9#C=d_@F1LO)Q4eYzc`0+RS=3ccZ$FyakiPM|jS(9V zhIxQZD5RnJgM?9C!yhdqu)Q#L(@ni02nVcc+pYR58m zA=%r;{-9k%?*J4?@Z8pX(I2 zIsH*jD0m}NO+E1_aUAp=)$p)*gD$Dr3f3Y3LGxX@^%i~N{h2H_pb1yt0md#0RU#o7 zr~**;68QsuTuuS-pe7_J=w1$i06Qn-1m4IeCM5PEy-`!|SjzS;zBfyRvvYNIS4$lm zr0!aE%OOFi>&T0pukn49$+MSc z*g_ob=0$_zWrrSt97nx&w^>SE?~N{{IsX-_HkkB#%!w?e_lD`Eboi;CyOd@wma(i- zzo=lMMH#h-GrGrO!*k@|D#syy|KeB2&p|c`olqh^AwJ6Ex7>dP6IvBmpkTeUl5jMW zWS^On5htVUUdi_?U#Ui3&55}a&lEimg1$XXM3vjH-AF7wE!l42xpTH;3{ST??=|S# z#KR#jcG6DV1VXVJp8QCBEiH!Bcgy{aHb@CoAWp8R^SEBOoJb^KOHCwD>Eq94LCzeR9 zghQYxFp`Lf*d>q;EfJ3w!bUK+lVc>4wU_AK9ckP_wg^o%sV9h6DU&)@GFcA2 z%#36{;;*9TAOeK?!u!)5L^f}Wo3Vr6&FXF4-wQ>HGviybS!j`uhiDl-I8gV5+t71I(I3&F^9hh9$iu5eiZ8%_Q0SI z8NgCag$#TTDx_fX_mUvXgaqlKNe~wfy;1t(l%PcGEKx-d$%eH?ty=%QUR_#=F}~po zjRBLJ=Fl?Yi5&aUb7+6>)^liCt2uPeZP7Ut{>Gj|n=WmfL!$@jIdn5-eP#}gv~pw) z4FsF@Ys6;fwu#N`kn0cqH`)&^di@)rI2t$QX^qdc{H*A3A(OxPk`!4^RE1R*ELbWc zahvTpa742mJ2{+??YJD?7s$$Dtt$HLjc+@RN?2#BW zuyG{bxQvn5q26C2BT;Tv^Om2onr~bHgCS8Zv{8KPg(!O7P|hOdr5REVQ`i$1nn0l+ zT&;zAwU#trtyLa1;(k`^B+W|9f|V$>S&3{EJB^G)&QilkB*a;WH3Z%VjskCqce=q| zuWR&rU8`ih67x)qs#vI7O57_ryd~?kti=6C%Uw>qh@cOOdbM7!#k*y_u5i$~7A%9- zbh}HNt<`1GwR(3z*6K3#w+9Vz`QLRhYxTL~(K#NSAf?#nN`rsg1nGBX>j_fYYJ&Xz zSJ4TQ^_4wAPVV10L6!~F6J+ggqZ5RsDih=SNX%@l|d+LPg<~x4VkJW|3GEP}!mM|KkUwBe5yDX)P6fhL%e} zG~R(p0Wr7r2ry<7MvXVzM2W+&tCyyImE}H+$GNuINU}!vwKLiffj4t>pP8q%sRgDg zA%!PH*j4MvC`$c0f;W1s(Y+%B*$75oMqKAlHH;6MlrYeDk`m^}(sxemcF72{%O9oh zqDJnT9=SFa`HB7>ZDLYJ1%kemEMf@~nGA{~zNcY2;QnAb*8DG-4qK87tfP8;Te^~M zEBb^WEWZ$(-5XBR@ZMs0jWQeQQH}{5?LT4e?q5Y|!$Z33j^owRHywA86R-*+$tH34SeJ7t#9=di^xlV0s2`!$T$v4DioHQfRG67;3p2IRPbIeFZGC){R)!}r zs`{y|4Da9kD78Ljyd(V9mkKUk53 zMx#W_MP98wJ`lml)>SNJ<-vmGoX9ie+?(uY;-_cj_2FX@zGHe4!pP$%xr%SsCw%cG zp7TXlU@~`3^i?r(uqmHKN1_v}@cv7&v#!j()Uj}M-;(TsH6rljbWrv{SFtFVtRGl~ zIR_G8??ujez@y&9L4`ihdaO#6I34!a-olz}Jh}0s*64mja}QWt8c z&(K<*DJ@8#4Fv7#9of^^>EC}H?X-TI7bS3#|M)51UA*n<=s(`wyTyO}H1C^*Z!QC% zh<(L%Q>Lvplc{b_kzv--glWnyW%wgo?`sJ`aDuC|*uD zJqyBV?Mw>^|&7*nd(Sq1VSDQz_GLMpDE4@2Q3Juf;-EH&K5qH2ON48UL|7pR1pbi9XlwhDJ~4`9D6Q8xVrKfr9aP zQx{(?EpP?IvnyW&#x1Xl6o;FA77;(^vEAbbs8Y)23Tu9 zvpXA^-dhbarCdz~RN&tLO9xzWffulb3ytPY3dn#jon)|dU)*bW#5B6BYn+(U75@X~ z%M)$IL@bpX5ze_y?RD?Xk}?R$b0_BU@>sjNkF*cU0gJ>Khb{sty5<8Z0C0YvbcuVk z2Ppt5NtySR?ltTw;Nz|Cm3-4-jqPg%M-Bw<;F*LfawT{XvAq`4xKdE<&nrjzUaW0n zJBji@%m9nU))zy-F*z*9f_-8O_!Y06a7C>qIuK)eK5M4snCc~kd&nNy#p=o-j&t@1 zBHKX0;H`T-%DYpn0E?qmfYZn_XWIc@HKLJ8Yl^bjh7sVF3mHQczv91WD?Zefhcv0? zQND9Ehv8AH&#_N7bH~cr%eIVvM<0!avK|sFv_!r~mV1^)aN{c2#|FhX%y6;e zu*21EbuSTXdqgMv<)Al!O80Vnf>9|Rh|K6KW(VC^90D@2sQ)359VM6u+U~ZY2FRGI zo8JUzyPIIf4w|(?V78@+uMfOBiunZu3`4| zxf*840RyuYPa2plny^#^BT*yC35TQ0&=#mdZxtP0#0+c6A|MR^uy9_w?Q5DBnwK67 zqzO$yJkqrePJ)4S`TIr+e~CfSg1(CJMI9|9)_Fo=oux^vyZKt-FyWNnWhi1utas>$ ze_jecBjOV2pO*?z^k0f#K0|zyWRl;AZV&?+>}Q;O)uYCD(|er061L@yWNvF5_tVrR z1u^Q9aZcB|QKt|m1GD6eTG$tD8_GUks&$dtToJ=iu~wuVsk$AHAL^{ta?&c9G@>6_ zD~~j@G8a>*WI@$28&)3NO)~-OPz$EI7AF}%=qetkPkOlm zf>!{eD=?TlEkPNjR%_CESU7J8#hzmah@luqX^K%i^A?UW6l0NW5#LWSCLm{S>h;0g;-ps<6;K)!vQr|hL`FC?w>S4B!b13knDR8RULYlRX2o`sLV)l_;vX9he>$*~# z*OjLRspw|%v1}%KAf<=WQ`1js$|k+2kp42t(IV>Oj&z|e_=c>H0Lk^9=6ygK3LFNu z;2|Lfufhz~|AyQkIZ%NV0Jn#9fjJtz-!a;W$&xH9jsAZ@5m!p0KxQ{~SB1RjN*R^H zDO|3c_TqH8Iqk=3DW?{_i!b_6hEuR#NL~VgJMqs~FG7p>_0)=gO;Ggui}>Rjxjh(? zu4rzC)o0QM1OvUe7Ydd0elXBm&Jk1x`pAiXM7+n7w{R{6$ciD~QK!sjdkXC3v^mhk z_ZEAKx9YcD;v6J-(u}`DmWEiL8N&didEVQR=4m*J_sLEJ{9s%tu#eZxAh3LB zr~?9DlKf;-U0e7%P|phnWv8sSQFh=U_b43vqd?iC7Q6-GHbVf6guIOIcL>~mk=Zux zwlusXurwnRRb__+0|WzthHMBj;|9pmh@)mcjkREf{0M9*B zBlBVN!3nxbwf8Z>=cQ`H*rggx?0t^-(t2Ff`QxxkvInX!-y$4B@i{=o6X_vI95Aw~ zfvRiV^Yk>fxp=*3ql~-;t%l{d$v+6oEoCQwW#*Refn}E~{;yzp@DPO77~;G796K}wK_1!@a+r-3{UKlUSHQ6_=|es;XdQ>Wt87~`s|M@f&5#K-g{+kI}c$Awo8 zaRrEPFTta(e-V+R-;^%s|!apE$V}*L3dI26@LWO)^ zCF1COMsP}9+ZpN@I4j9JTa%6!2F-gv~FC}CTY z(4p0}d6vU3nSRf|1cimfHKV&zh<#}1m^i`PI=ra_)Q{6IAMPi>6IJ(F7)fAnXl;r@ zaErs&z35W`XVEc-quk-W9)TOKqKyTJl0q=JXo01U@JCJ0mNt8~%n`0A`iCxgT&nV| zZF-N-ya4%cySVH1l18{W2Ee*p-JPNH^>oT3=Z{+6`;a4?#@#%9*A;k@Wv-vhK8xgS z?oJ-4U@=ruYVGi*8!2*Q1vf08%DkL3aQnj-snpntM-QRm9z0h6y+9}Zxm(v-o2lO+ zLct+@+uK!Yy5d~P8MJV-_Pv#NwwZU%k%wMQrA zLU6{EOXFUPY0-EId^Bj8fd&@+< z6pqE1w0P8O?7@^2O6p+%I4bjN-+`NM&_iHsFeS#<#rc)JXq5KV+^Kyvt@bkQc$Av| zg`ijME89<8S+yhA6luvM-IPJ5DXfZ1{KKUDSFOuS$jU9|cZCN@DGI9;$VXieJMAM9 zx%6Hlg_y;2Unr+uEaTqT3hpLwW>4_NZQ$~^3syqEjfPG#<*u>D3@QAyec`cq?`V&T ze6iWS--&m>M7RjdE(YoP57mJ-yr-dAmm#i9FTEX% z6y7)+6AMP-;aEF}8N~>ZfweC(8wn1x!BdIvhst?e2Zgzof&`(+qKG^M<)O6PYaGob zvk))Y)@ZzT(4i9lE`S2XOP;}k1KQbquezgJR9a3l3_4#C59$5Hy3vm|sPX1e<5Fxk zpGdWHxNmOYU0-i8soO=s{CzvH%Fj*NIx1Bh21-s+=Rn5VKIKe5JWr6WNp`}{GJp1B zbcjWKIC-K(#NJ*Cc{`ctGO3`T!;|vxp2^wkddz)LO>cJy^ZNr?WLBkXR>9$gQw}ok z?4FS*(YIIq@e_zTN!uzl@?!CRBtkR`QX*Ke*QCD7Etzsqb$6J`rrt2Sle~BrFY;E4 za9^^26c&&mz@3!qZLiJW!o)bQ_;)-1p*VlF%U{>gwcryOncjg#sV`#kkW6%-vi978 zaSjeu}SSc%N3njSI1D&3zTwM5!`ki|%HckI&J zY(f(`oZ6BcmX94B-7AhJdHeoAizI!R)kOs^!2Q1850tg8ggg78GObBHX%6AuPjLl) z!}$HLs$j3tZtjkWcn=iv#{{bW;Z}7KcK|i46TPgnCZtr-`5b4 z`N1xNAJivtB-G1vD?6GwW+qtVtBjh1V26WNL3yyB-+j>eGv^Oqd-NIh7NXU**j1## zjUl4)d>yR@=6%g%;zfuPZvHPWj^c#;k>CV9_`t|jd|0;h-D=!dTV?;f_9>#jfofIe z*P1{jC8{_L>$G!&Hh*lkLs#*u@)EXG_(mhW8Ov_7(xc{fZ*QU&bo3Xjrsm&DA>Tpv z9NBEPWcsST9;=|rnzH4##g==Yzp_4ZnPdSfcXo4tz0n77S8hzWzr7|+S>Zb?+`)2hv3ymi6Y^hR5}VNdX=my*fH|1V5OT6!IU?|9 z)6>MR%l^PU-ADo;J@fuT7NqZ5Yc7skd#%xF()E;p9gg>dJEGxu2TX(DZEE1Z`$6GD^MScJP+V~t=}!Qh<;WQ1t&?NqxCeBtP{38E1&iRtCW z2ZfySdYKRs#!UiH03g1dS?ld<^0i&bn9P|g#e7~)hcxKnxz*hHB@9?5lkda)WsSqS zM-MCTm0tU{4A_qL zE`@LyuV0r+rjLm4?rCXi>3e+8W}-5-%6{nBikwp)C?!|2HF8KchZH$Tcp&Q)sU~PD zJL>I4JTz7D0h@DT+_W@*u9KLHcS_~DfWX9^8xsr6hckW*g+p_A|AqY_yl= z=1x=l9&^|$_4(_Pz1{qEUA&zoOmkAnlt=t^-F)m0kHnQcB@CCp?ub*UEZw14;9V>qOv%zlAUP6!2DI6A#D4FbpAe%dh`u6 zRr(yx97<`S_Vp`q*Deg88;MMdFClBH_SlvrV28=x1GuFMmA69P6l*2koR;8Gqqs3G zfuvBv;}4dndX7Y0tv~-$vKZhfkGk+=*{#6gNU3j33D}~ODxx2lNorwz zE|lw0kq1;aFcF%>t0&C%C?d%&>W^P-ltzrPrj*DShh({Vu!B}N!eHm`V6KT~TZw7= z1=B_RH7!xZ98ZhZL3?rvo9bE3u;kU;E}z#?KRa5}Q-j(SKd3`yx)w-8Tay)0JqN39 zv&x85wM)Jc!=2hPNaXvLe#-Kf*i^Rrek&x=REh+veZ8%_@+h-5|6RIb)bz}rsrNQ@ z<-KQPyApUwcV!t=l-=CT$rAasjcTuuYWK!gn-o*+1I?>(K{_mWwz+4R}xm0sanMa4}tOxW%SSyY6I``q}6CX z{1$C}FLpFj$zgXJI z1jD_WTdh8IwtVVuv0(Y~?j~s8O65%x=j0bPv@fb}qn`a+sOKH(sTm_pF!Rc_KukOA zW?X;224VkHJwU&a6>dKnW}XZ>9X5jmcXf6ObanF6$&UP9^f_|5RZuL`LG3+$NQO7F z<~59h3JV^Q?0g2U$M4hCcORk?LY!*fJ!tN}(cORmQ|)NmW{-}{LB;B!wd$T*B-f|! zQv32{^HS1m9izBsE13OfGktwu`uZ@Su)nmuu{4u&lyf1KDcyW*;Bu>$pS=QB7vDfLazx{~g-rcLl6HTvOqalTXY*AkD@2tkHi5+ei&Une={Bw8TL%Qx5t?&-hLgL~N(W@(8n zP$)2nj(hMO7nWq%J3{dnTVkPA^A8^Tze{ixi&3cmyLPVPSER{0Pa(q6(o7J#MxByN zaiG+q(l?>!>xcBUSXG<>^u=y#F_^3=Ib+bhSUo;hH>2mj1Ph}>$s!B;VtFv7ekbbV z8>uQ3=qDB0?LKGe3uwLNzBQ#-wqQ~8lI#rq`zP(}tY>yM$BuRnG-0Is5k6gdR7sD* z-L0*1&RGZXk0}xpG?e4`0F>j;w4Yr?cMhGq9piiF6(2-s7>PVi%il=n^YiyDi_0H# zG`e9~Zs{F$iem%%0jbEuVW7TqzKK{4*`cnjqqU~y>IUMd$kwmo?mEa#IUQ~jFfvsF zUkI{vFAutxz{uf!!;He!2FE9oen)ygRSy9b9f2CmEut6k>P*vAEU@%~dGG?V!PrAp z^QnxRCVG)aCa9x>b+4jD^C*h{#4h!5^ZUc(etgYy&0l`4d7)FIFF)J-e!SdwhF3Ly z)~V(;JU?P$(~=J!kGemwUtZ+?HN+)v%2oKAcc5|t?>^v}KR&Q+=2d}r=Z|`z9ig!2472ox1F`H{@D{a0 z6!*)}L~$<;{$mMVB4#_iX*DZ(NRkh47e8WrvWKxdKE^E)3Ro4^ z#$~q4?wPl5WP!hw+(?1;%Hg!2DrjweyfH1_^;m_dRJJc= zYlfb_=4!SRk~eFFA53J$r?t7_1#+y-oaN0$3rH4-OR9wnUu=%j;Q4=H(=}q^6p*ue z`ufitw=G_C`iqV-ewF<8^Q+t>e=W9hgX8f|-Jk z31uwi1u1z$&j*g)^M>}7L$9HInP7!tNG94q|q9-Mllj7 zywc|?4$AV=J6%X`PQ-Uu&l?(#=Rey)xCPuMC2X;}|79o<#6=qO3Rmc^7M9Tcsc?ht z12BRioxs8q^a(#GFRS*;S!{ZG=5%OWU7N;kj5Q#CtinvHR2$((1OHehlE$LP(NYmv z(v=&=t_GJQfMe?jg@jbqyT`t199J0AP)F6`$K$Yi0tvETE%T@sN5{tg8J4M@IG+4JFcmcJ@Tkv! zDVSqMQe)o^jbW`_D%M%A#MNx3YWc=PD`5CvjnlLfwiv~KLMUK2cqL;`gGE?ixtCix z%Q7k|>Jo${YKhy(ueyv;Q(o(Hp+v{n72LJ*iD-|1WCa6E1?~GsY6MW!!wlWB)$!At zQnL`~<}6>h&+;wH*oE!|t#2Fc_DQ=@&ybR0e^6sL5EPVw5UrW-%<7f@5Z%vTnui1} z?K*a(4=5{dkdVSIV{LL}SNOL@GVnEuxJF>nDDPS!LA6BcsG{c?l|g-Jpm%y}=$TfS zS9FZKV3#0qNcEhsVYzzc@7sW-(CcmVN{@!WB1Qc(__^b(I#=uaczM>H&LKK;u4RuOlEZE9@mIX{#{Whd}Tc*PzW00QTM~@mas=)Q4xGhKm#nK z6>R`RH{Q~P3`-uIm=YYGDv9d@LVEoGKoY(OAZhAd7M%d3q9s61{F*f}Jv2P+rvhXn zeT-Bzj`B1c?yY8YBtd0}@S%oA^-^(}Kg(^`Z?yshZu>T?k$wLYQQDIHyo! zbcfdTy85*1=YBTM<*s1M1v{c+#Lwe!_%tM#E&vhA*@qAl%mHFLh|{s$gE}`7(-ib~ zjN5>t8SZ6z0vmoLvvy`Ha!s3e2?7-QX5zGt5pS(CGO$(+E&LpH_w1OfH@8T=*Sk18fJ& zN0}y*&iTPx`A~7hq@ZYyQ5|a<_Y{ph8~2p+{vYPf1U|~@YWS0dFhF3U1_i|(t(91L z1uYoBungc597Gaa09zGfv`QfZR1E|tkxU-Pt!{nmf>tX^Hk^~u+0K>(k1%$oD$Dw{0K;7xSuawAWylLf`dcvPP^u9EWze2P%K*3Qpc4$F* zvajq5yLJd}viF#DCY-Wxtfo_37dn{XOm8miR`3G!+&6YJd6Hh(`71Uq7Q|Op!JCEM zd4`7zRwkaPh(8g$IdOMQ;_l6fyORo2+;=x7?oLYF9h|sZowz$Vara2VYtDJk%sd{i z4BeLSwbyN|&?jy|w&;y%I$8j<4u7rlS|9Y<7tVRl0o-zzwN7WnhJ;e~-PaO(cW#UL zvq*iUjfsnKUjX^5_M?DJnWF+qe(3geGCH;(l5}8p)OAJ-CkbV#*Zgb(g0+~L!o^YN z7%cr-))Ey0dq>shefF(q#YS<@l?UdUWrXq{OL#4_`?7)qe1$S3&7-WJR~ zP0FR=@tEuhjwXqbXg>2^5`GD3LHwI8gf|ZqoTH)w&WV!55?So)D`n3w_PDUO&3u)! zPNJ8B)Z32D!;rc{l&i--d=#eC)j7T;TJCY`3TJ&U|4Lt}h}sSYMyejhLN&2dUq98q z61!E|Z{_-=Ec1`SBEZ&?5>p%qXe>Nc5=_kWY9@u4;h#lz_6UA!jyc5 zc;DTkbc)tL%d6s>p0R+emrrm|=O*0A7G;f83UE?};BR&pGr75;ye`?p{YC%v8|1HrQZ zOp({jJ-^f;qWjv_;tsLWTsX4L5OsY=hyX}D9A#J1L$MU!UEV4h~@%6b((9KX0eC8$wZ4WY+HExE_Qr*$6OS~Vw7B%BEesy@PdTU17R-E7H9SUtk8Pl-{Jvk}aLJ=#Ju~ zTBxO&Dx`4EzuXzFHlJk+!qrh=?tCy>(hVGZwKLMyDMIcsAKQDOShDXf36)nB*wE93 z0OGuU7%j!cP}!D%3I7e1?!{S-h?r3~L$=ULn!?blew5~V97WvJET~MkvO;))pwMKI z-Pl#$*d=e6Z!+RqO+qll?#3JxCYvGob*zUiUBr6C_cYZn$fw%c=gBWVJw5cvLCb07 zIeWv8=P(cX>}6I75Y|kkV)_#GLnqVMJ1)a7Dg1h?BK>bhHqJ-b*NHKM0+Ho?e z<~O4(#l(G<_lNN{^6_1cg8m^nRz~JDnhSk=5C(}ozZ_xfOK4gfi}E|<43?E^Z8>~- zd8#w#kUoUc4{IMT+a;C>Uzy;WnypHlh`@>3h=*aschp?uT8go#$LITw$G_)%r`ZcW*2r(0~$=0~MsHk3_VR=76OW-j}RLIw+Ju=G$KkvgmH2I)UZH^`d^X*d06 zs`2H>W8V-eHcc+2*-KBJpilWbjd=VrMyx_u!5j2Tz)RLYV0ur6&v1?7i$n3w*586A zN7_C3OckIubACv;{m z%_4Kgb;-D9k!XiV6W`r0<3QrO_eK6k|Lwc;84kF7?_>PE1ATgiZ^`}g#Hz)&`c?lv zjX#_Hr7KX;Hk`u2N;&Ay!D>0k;9!j$bmyRw11q(e`y-fHtIydP&Mi^J!{Vy>5JW-m z1K0bOJf~j>Z`3bDO7shN15KX#&HP8Q!+Oz#Z1&$RO09aat8pxDF!j&bW8U}FO9Tqn z8N8>WraofNSb0zVVtdT=c^Ve*2%zt2xRrw*azLHsyHP!R8m4oAfsnTwF4J^=oQsDU z-E0``EXs;s1G(jz^A|CCHvEvM`pD}i@W_x#&O{K``(glX=)o0nP{Zx`;&g19BI;Si zQg-#+n_Pml_vyqc$7zxUn%$Eub6P0TXcsS55@JgiY&Rp^Q&mk+?~+sN^dSiF*Q7lmqyL2{x(=uP&WXL!egT%e%rC_tFZ>9#i)(Hr=m zukG$^>Dc(8^pMPk(@P_%CC-45m5HYi=IWH+Hw45y?dPWeZrRgIC~(X?h$6@)0q+yJ zB9UNot2q5SkKZAaLvBsB;BdLTT;22=44b(n=EOdjN0hGEF$B!}#8b#Vj5#zmm^9H- z%%FERpwErHYy<&tRbiL~rY^<j=#@WU@%i&8n&=b`KvR)YSqi1o3sp$r+$NaY$w4N-wr= z|9WRyKPP8En4-US4FGS72s68rW2=?{#<4l+$f8=%mcPMrq@pjb6qr@uYl<@&S>hJz znzvv4W16lHt(+TsWvGsBu=I`0IwoTZllYK=Uqmj3K026>6(a1#j&=D`?&*w+TVqe$*|wTeog0 z{K`-2^IU(G-@ov?mEU*x{e<7W{C>-?Z}f6c8o&McJ(=H;{ATf+&+j$-&ga+uBH5=KfBNW;Pk%D>$8w}9&s?Ya6<27TVy0aW z25Z1t85twNvKCQI%vlO3km<}uHvy+nVO=_^O3<|&jz3c!4WV7ZoOekC1)t*I-C1DN zhgxM|6@i~Q*A-Esyw-(~+4&u>naw-s+62-4O(mlS7tK_;x3XXrdjc`l$iEN%MiPn3 zIcX*&hvy3w{_1l7$_oFMa{nthnUgqFeBf~fH9s#Cc0;O>z51mqy1Zbr&W>B9kVEs# z@yS|=SSpQH8_$W5=Y+ui9Ugc?juu{{=v23hE8|_vri&<5=%rk$&llJZHnLGX;E2A; z;4dD;FQ?trgB`x;G+tB>{#B)Pz2FtwrkmgKr`Vk86<4>Lyc2XI zIr~<($zZ>B>)Kb!N}?xVZA*ro5ll2YQ=5IYU9-KU*>~Casa7fSDtH*Z;1hO_W+7{D zS`i6lx5iK#^Vn2nzJgzF7UqkVc?k_eH*L8dJY=2R4!<;kmWk|(VM`bNDWc{H82g;u z=E&4-D3Bm8CD%XEf~1PLh8BG({s`gRnju>z&kE;0R-XGLiB%`F>l7wS&_Qj0M^=~t zL(}*~EtfUv-TN=Lp=Uwr)$Eq6QJ68u$sRqu5%2iHvAM(x9yAa9nk(I%9Ya!1^RV;& zS9j;AA;*9q#N7_y^qBBq#w^4e&!E#UY!wDK#6>~l$HoC)nUC2~+9kW<+K^IQf`r0CImtQ0N z<}h-fzUfbos~W5;M~nK9kP(FEc8ZEOzE+B5_Nix8`5dz3D9lue54+(5#$r zKgfaAB$w2KtqQEd?pB3G{i5AgeVI}vJH;Uo$Z2)wb=PmpV3)Kdrep^@ zfOyty4Ukyo@AyB7_7HOf3CZAuD$OH1@u`Utap2GRRrc$53|y3&9i4N6+$m1n$>h$W zp1!+7yptWBx5!mbz3|`6BkHL~*hNME+88kJ-Yb*Xh^dMBs_-|L`)e!w|3f9=Ahm}- z(jd`2;ptePjJ!m?7!i31E#d|9I43%%QR?-T=$wKqkJP(!y8GoM)ALO9+!`#3XABzE zN^|mWRk;%n7Nx3TD@r8rfgAw|eZS`rdqk@stB6o?c6=fsfuVxKz;m$ZXR@n7n;!cW zj|IJLofd$rP4~#YP$$j^q8`mfNzn>kZSJ(q0Xp*1dtRLtbkyLa{K_+6373K&3=GS7D$j=aPqORV@KHnem)1C2Im&N9L zopMb}mE@F&i)^e0G&<8A>k1+)ME5=gNl4b7fxaKnfy$NoBcZHum`@NXU5^o#K1uKh zp(h8ZDvqixd(+(cq`r_zJmz5}#YW30We<3>0H<(e;c~*yu zYtW%-06<=m2t9<{Z8R6_A)0eJ8O4eG-SmUj$)s3^?=Fak$H{i)daM3aJ-2;Byw zKj-?^FuSa5uwsD7H@obu_vIF3$i@rkUM=u0h7SoRwu8mNg~5L04t9?n>~tBd#t7Uv zR|bnxccYo1hwfk}b0Ui(@n+`oPhCjbXttc*Zt#)u!rZa|CP(@d4Ko5?+^$95-8K=O z-@$U!W~p~_4k4gQWp|i^vl(7)O9A=_g%CQDjhQOWUjJc^i|s(pwRZsY`Ss*JjOCkI zFKkf1wp2+FAaLhsqKbtc$z(Cg<0~tbYxq;XMqF96a5zC@VJIgeB<5u7+AKFIX69Wvf@#94o;4x2) zZry|v6<-v-FSqe&W07X#$g_esVl^bi5KFAkP?rnN`X!(a6Ce|2WKSvK03>gsD$n5#9kn|0kA4+5BtC>8aa-JwxY3MW+SZWx2=BO?&)Gj! z@UrM;?!SdIX0JtN4?Y#sX`ct}>`7K+p-{|THg=Cg&tA06?8!@Jz$b~>yZ_X6v6quV z#Vd8&dBH4yvi-J`>cKCswsq@?^J7%^3^iWD)}BGcA3;=ii4GhJ*e`p7?=DHLktg91 z8+yMJn*t;>nb$bNw8pFore`?Y@l$r=#^6+Cj#rXZVIz90T{5$BVVl%zGBwv8<(UE0 zFQTw0##ChPxmf}8C$4g_P>UZDGum_7Kj7sTUWuH{=cd6BWl~?_f!<7NROGV1FOW&~ z3Pme;^hoASqIRLccVZ9T!GfO#W?gw{@O%|2wVFKf=M%FC2hE;EZ z-gfzZ$*3;4PknP<=SY0LZj+Ok!&n`*o4N%kE1MP{`~ud!=#<3=zm&h31*;O8qkw3R zq&fSH??HcTNM-!EGADpbe=}mG8I+e0md_O88*G}CJ+}+qU3=Ebu((c`Z=4SK%WZ~t z7qz~?`&A>*6HTpEh5oxN8VddJ)Fx@ND}8>GumEja{oWe=m)BU0{t~|7Om71HoZLoL z=ihig%Te51&=)-^hE#O<0!}ZBDWmg-o@O_6SZ#Mdm$%GaH_KLr>;(SKQ|5@BWbucI zEp6Y4Y$|>)`ZcS4kq}ld1>N8&qe=^~+>W^c&Gz7MF#3J;`9ZHp&%QDZ3qrr(7rzhe zr^%wz_mwSXkdjg6NA~jOG}Y_hBA1S{mxdmxd*M}b$;%~8*7W3Ugx+W#n6WxVn33%i zjlYj6%55$qU)bZtbB;#76V*<$n_OA&E?&yLg8ne=e`3E0Bp72w33RSP;W85W__MqPf`(tDtbT z8XzI=9`ncZ38xsJh5WigbkyeKySw4m~viS7YuD0ZVgiOR`WoWP{ZqC7WOVX`t{zS!f! zWTpA(@om_wR8Qni2_(&~o^z$`TI7$i4VWyqgK_gd9sJdu-?M{i-oHuvlvgkQbwd;; zf^#H`^xW=Zz;42To!QaNUMI7-8S}sdGJD_0VzTgS0%q_s7beya45~2Eq%Z-tUjJ1b zCVt3w#3-#W@x-vYn3j{~i{aurb1;pqD_3gAviXkw<{%SI4}4|K2|&s>g}gH%Tx_z7 zqjR!RrwJJQ%F;2@gbp6-TXH_L1mli^D$0=uf1y2quAtH0v-ia6@8hC{rSGTF&~ZqZ z>&qvD!9k&nD0;MiRYDnU|1PJ0I43bK(om@6RrFaJemT1l*H8sCE}C=)=?nSvTt5UE zZH;`qUq^drLL_fPKzB?C^L2)qeb9I3Smv%io&QuVDa4ZVC#d@q3bk62-27wpwI|CsCd(9#Q`@(c{&jY&WDykKY-^?6h;>r<=cZ}MM8Z|)b=lz0%RD4^80 zaCX5N_dZTh<`1E`KT6xLo0tzNLlfneJ8MhPp2&tLVf?u2%v{PF{(h#n#whQ&29Lm2icy zAPmR{+Fy_JUy>|})PKl>;y<-@lDof(|CAI3+2Hz4$DVy0b)>vQNq;bZw1&}1d4F5=I1cp=z%)`oZBw3jHoilV46u?A?dR!#m#QJ;72fhf_Sss zdA8u{!t~_M>W&U0Lfw&W?mroq;W)#BPRg4!h+=rSOE-YQwUnKibGGtB&Y8&4YX&-1V zbmnCqYRivzp^qu`sJeV4xx8Q-n0Tgju#F!-rqdkQQk6`?K7u@gJ!axJrjVqLxGmxy z*G(i7+~Y10jdQ|1?k{%;W$&b3gy#_tIqGA&>P30WJa8=!Z*Q356eG*f=nk{uC$`ax z+cjEv*hX7*mhzSvDUIT%h|2P-n|0Gd%QWn5chlNsUOXDq!u?K%li<%qpPbHqP681_ z$abF4YB?y8)!Ayw=d;PGOJ{n({Q53VP=KY{PD<2{37Eg$-sQ->ZAMPf2+|ozCm;Q( zkTx0&nA}7sfBCmWC%w|icrH*x>M8lA8(kr91InpS3AEg5f*v-a?`JAWQ`YR6_g$p) zmF|&IXsiAzbV zrFzJ9=W?}*tMriZ&3O1B!y32E==ap`iY50FM%3z<+I{MgTh{j$G0nHcBYIS2zyt z-Cs{yeZ#C-v(RvOoqLy}IvaHFWBk9rzUrG)XFbU@Q`ToM*@G%!UU%2Q)>(3OruYmM z9ZOV^c+qE)t_|H9mx5n3bSs;h5yV|vD#@wX05&@PI^{SPHrBT)<*;_Bt>&fxv$ea+ zmrJs{&;%%R3_C;C$Z45qI99V79v{kBQP4dxm&SsbNECUZPJ)UyiorrqqZarl?-RIT z`15UHw{m~I4)plmDj3Pd1nm)+)SKT(OA3 z^@U#N;Z~QN#)b6g(xC-$51;^#5kDZkQn!#uM6&AJ-1-&j1Xr%H{S{?ba2=_q>@5D; zI`7CnntDIHR?N7Y)g?pPHQnhsF2u>UF%!L-Q?%>awE3Jf8?`9}`>|QFtCYz{1LngW zYjMhusAT&r6x#KN@n>Lr{U6wwvVC@mJ3B4vLbP(yYLWS}uOi}R%|3$~SLIjK5%MSe>oR-UHy4 z^i5)GoxT{VHPbQR>v23eW)=P`E47kx$R?ML+XCA4pT!)-A6g-18U zl&kD(Yb&s4M%q7z6!p zjQYCUt6P{5aIXxs+B^l@f+|+?E^(Ph{~6UA(P`Y+8h%CQ0o|Q0ttD&A-XDsfe91*)dr0M$~=TKRd-E7GLIn`D0_ z^f)+}?$qMP)xPJGYzIGsH)`#d)fASM3iCmyP0FYH@nmKKG?4lGGD$YRw8$HohurCAv=rQ&WV@~x7PY;AAODTS%%dDPR9;Ktc9s0$t>*Qq{i=OmmI(r|%P z`_T^W=v}E_wvXRDu3U8=+3ITVQ&(C?9h*@^%+4z8XSTEm5T)DB$gqwFzHxwY=4QBg z?g&{G(1$tcl#)=cD;n=O1jp}(EVMAOu)o8ABq%T??r*3MSuvxkt9hj#LX-H+*3~pfi`0(T#y(; zwBs1=`Pu)iF-X&9=2vz+SR(a+U(Vq+ZSKNrQJB&T&K(aVTV0;dkZ;%Vxsn=cB87ahfi_2IgEj4$ua6}7}%BOBu?b-vNU-A zMC4bV@2)FZK=qEWrE*;#i33jRI>+OxdR!lg<2(9D>|_8!(=2ix=t31Gm2%sdoKzK+ zmJXE=$BI-O%|(CUALs6vVmewDz|m8)tc#_0w`#Z!y=k=S?X>CVd+C+|BQ7+2I!)n* z*Vg}{8vhgQEe@ft?tIqhe7@<<=QcZ^(`7!@|Dt|!>wLa1$MN~B;Y4zlXd(EwHoCIa zN;9z=0zm5oTLxId6+8NPb;Z6m^wj=aeQcMi{qN7rJ{fNdZCBT30!g?f-nwE9R;Bsf zM|~2jAQg{4+Ot|yY!3ks683<5PQpecj!>?j;zBtmQW}Nf!34woJJ27Ug;Uk`;)7h= z?{5;NV^M#p7;J2(YPGTk*wO3`ibm;GpP5X z1~oV2PVrOgGsOMLME5N&O!C41)Pz z2O=`GcYmr0m`5>fI7Djat|4o9g@1RscznGp==WEsoS|jo z&<|&?HD)p=>abh~=weq(LJZ*uL)U~V#l?UbWe?=(my=o*9@viOE^zg8j)*(00=A$2 zMQ43?|B9u5Dm=fQ+uFZ%avbm9OPt7;hqwQ7p$FaF^*>Gk!VRE=C?9~4eDmV%iR+hg zU8SsWgYIf~UZ5G*o6MGn)OaAAOoKoTft7x0Ja+c2SHf&vy$_7=l}WXUZ1$Mh{hS5q zy0-Ge_+q@G_TE?B-Y(XFW93+51J)4|k`;O9g%4r2@QnuXm|MOG?~c%kAb zC87@bQf@PG>!XYae??Qi<5}9arI`BIsRJ^bmwQD&)n9{dE|<}hym8U--F2`V-NByC zaCETy?54t}h}@#M9U)wqCB;6^Ya%JR8l);#!P@=M*Ig*YsHK3aAR_V#OrF{wVuY(& zir~e=7hBLcA+|PFa3_&q=++>9Ys3ohO}}-j%BwcB-KV0Y8fZ9ApAeNY68XG(1&Kv` zrr-*`;TDn&n6k#HczUy=iMqu+ z)d8&Dv9^)#2&r|(;{n?gilzvfX_))Kn?bXS6M8Jc*Zaj*A%^R84al6iNcEYLil`nN-zsc~ca1fP*hbGAq5*m&vUPc63L8f5#!i z26=TtA9V*!sAv<_NQkJJlZJ2Pp{;NFb!yPH@K&M*U5gnZZ~0rY{bWwsBtyx?579Wc zw*)4zjheHtRAb96sM1~3xe)6PEA^QgDLSr{yH05kaWtfPI0Dk1hsen~aR-!zlUB^~ zi7Zwc@q(<;6LOqPdNqz8u*Xo9)#fgHtc!b_9E-c_YICa`ibY|yxlRvlE7LfZYqewq zaJ|X!YTn=t{j3QcL17#70dUZ&%5K$X+x#&3&R*ws3Wu~vN`{bV_`nA=tjg{aK$En zr3VY~_vZ+L9tFur?g~|d%*zrgm6LTeT!9esrA&@ld==eLGoV)z7JOBwG{_m&$~tg$ zkG=X2<>%YFM4O)$@;bc0tqJ9pOzhoi%>cBzp3xMh)8@L6*UXIZOsrQYa|(wdI!OMS zdOui<3)4(K9@o(Zn@vFavK1AraJS)NulbOL{dW|#J1&p=bCKYv*_gCxhq1bowPOGCp@nX4NM;cbEP+K6g#xfwk0L{oPoox+v-z zE@Tfu*Lh)oJg zAz3#>0h{KxlbL7IS0})6ada*Iunpck^A1TrrFvI9#m#+19X(?cSf=~QFxOs}k?&lU z>TIw$3LSFJBT`9tfv&A&pEQN1H#sRfp_fmI>&VMQbkGgH%eS1A_>u%~0lc7B1@B>Z zz_o$xCSbBKZD>9hHYEJ1U5r(K>RR=uHpJ>lE){vntb_Gch%%|K>O5d`1TP- zSek$tDFQ=oOQ7KIcI1NH#`w_t-zXaD=`A)hZa>p(z_8uyjFP2W)WXi&RO1RyZ6-Bj z2R@TD7Py5`8dTZLC|M3hgTuXW0O^ela+ANsvo9w(Nh&h6BvEv3K( z!qcjS9!bbyBUA}B&%h)tNhjP-VUD@qOi(~B`D?y!lU{S(dum22WHb2H6qYP^ zjpSph6=9>t`?^^jITF-lB~w(1t1G!9zpItR2qmd{t8q^(ZN zVIzd->`IIbIuz{HYMrbfsU5GTac6tIBY=2I_*dn|yas}sLE(`czL2u?fQMlx{J)xlQAi9)pDLNnZ!}zHp1!=6(7Oobi zQqb3oo+cMHmE=k;UZs_g74xnru$bp;4@JBC?tDwQtu(Xu?{CL&c&stY2-#6pfEKyC zabBqq5emA_$c6ghK<^*{+DiJZPPl~yhFTjUB zdVZ$~{2O_m@u5}g@r5IFeRkOiY?RKWn#*}ra^QneW}-Bcy9ZTZGNm@mFYtkacq~*# zp6LYZYRx#?m*XRJu-fD?B06*xOX-Mzi7sRzp2eo+UF}jg>C$wZ!`lK)PMc1x%my_i zNPIV5U3fnBPdr7v)X4S4&|n`y1n^4iflEf4%bL)-=>ZYVT7W^X=3 zAyE2xk3D;iN=0-xlm6|wG|}B|_2M`XDz5DAD?OXVDD2L1u+CR#1WLwLGiR{VLRW8} zWmi{$bf6aSgL7dFLd@FneZuc@Zj*HAfCvk29vD57OcGP-69txwMHvFVm1&IfP-N^2Q802`nIb_LO_jJWR?G zCZI83p1Ij|_P(8jpmC+t2G-)ZTtG}RlKC?_gP1BcI!x%F_9}=8j*7#f`9{Q4)~`qF z`XOfy#8#u+GmD21fWn!ijw~Hywo;Tn>_99a`krm_9?>C$u6tl=Ot0H~LMmB!0m=;X z-j8K%ah=?1?i(FfIKREzm73O=iyK;nc%q__hbD`5Edw8BPjHw9-W`RmH{D#e@Fc2_ z9))2P@GyLQpG^=%^)jTErx zkK!p*dqF6A;`}U%W;}Dxa;YS@ls}>9?Lm9@#89;N{65^Rws$x3he*7MBdeGP-;(QC zT5k5cS6|&N&k#C3$!l6PCfHYctbqC?uaguD3~-w2XF++O7nA1rM4@VHfNwX848*gk z{zADq-rH63+_&&F6<(VXj8(4VU;j>i-^`Xg)1#`skD917^(^rdM|~izH;ACH-JJTl ze(QbCLJKovMR#!R-oE<87I~tJU_jx}648ggyPoE;PT%H{`mnS~3_q2Qq!nLTgbT!` zO-J1n86VyM!EyUeZKA5*Ca+{3y{NyImy?@A_BlK9%<$F=a{n7#DczUl^w+3!-BYSf zZ8x_s=`FNHTUSn-^?X~@nY z`y$f@L{gpX-M$I0V{j@%uV2U-_)g66I8*^B>Lq&TrwK1%X2*v%q-O68e&)6(?fcY? zNOiiM(;d4jb{K`QOsfP|?=Tne32m@c7HQx3e)yPw#8GSa3vVdMxRv<(1^j1L{7;={ zVMIa%4*xTw(=)T~lWPHf<^ADzFZayi?^XPb@b@u(7jV3qzi;!mj^7%Nqx?My&>qHd zS3iJwax(l`;s@#{Kixd3X_8mTp7B4jtH(nwh@KuHkRDGj`46(_idYmkqO2ldq& zZUWi=b&DkqI~g9QKNW3VlWH@SIIQesdjQl{3gUkUanNU6;t*Uw%LP6~`y(t(>iMaD zCxtU540${;?+AV3pTOexAPm(!)+J&112+Uup928EAIn}1n68Wn=r6Y}0VWc+lG@!` zjAvuw)~8puee1V<+uYjP?$)14s-AdjMY~&)W+-v%p~S6L5_JM3N+{B+SfCOQ-kf-F z$Uf=uf49APY2v2RqqZLy+U`~}FrR3$f4f`tfPUiE!K>oqjQv;=8x&&E!2aKX-4tTQl1ZttfHp zd(hC8LPPrtxFqQ30}|MlyE0Bc>59!$KOoU=JL2|MQ=P|mqUVGMmU|}Ozua>(zr#6R z!r#t66f$c4Nqw4U*77Uwl2DE^MDd?l_g%sD-R`}w`73Q+&hLWzmV0jHZw0>}@cR(w z|K#^ueh+Y-2~Hlt^X-3Z+bJ}k3hC?C&HWC?@{^YA(OhyilU$D;$vx#NH+$*-$;s)- z$-R^NaLp$-+Wojqv|i&v`)~iJXYCn&rGHnqrGM&qwaLE%2j+0`G62q5a=C)o3sUq) zj|C6`x5L0--(Mio0bGw$AyMFOs^=j3d2~`NcvdtS+_Kk3Vd3c87 zU*_b#F!QQ#xy%NKWm}5UD*P)>LcgeD;^ougnA&!Rb$-*upH1Vzdu!&mxfzsCU}tIX zP5GvyciS>q^Ew6fy~*vuB*ELK@s+VG;t}M{Fh{X}3WgK;pUU+XgpA09VMvvD4wz3t ze+*YiQ>3VZhJmikN5tlzwQNJ5?Eb;y5t6X^1tOOYGk=iRh~k+NkPj~A2?zD4 zhNSR?PWum)9VEg0VOSk;=n|dm4pSN>fS=FxBJYE+J`X-5jZ5I+|Ek%uXx5pKiis9) z4aYMu$G0j9%e?cPlg&GXP+@mQK|-0fDLNm|AoO!7U%HcLHc@OMF_~?b z)9QDpwc-nnGlhFebeJCwu5j*}2yjGZ5CBRg1rW%;Qk~!SZCM?&_t1LXo~m~TW!t+| zvE;y|W|usXyMhwIgN9TcOm-GaLzBY(WgT&CaT|KC#|}AYUX!Q8xvMP%ktUp`na5+> zWgTpVFZhJRERuj&EVz>1m=E?@^nJMHTcpDk;T7^7KBzjj7x+S#c@1A^2L$~(vI23x zmRRrw`NnO0Lq-m9(Ltlnae7Jptz?q0bt*xqFRRIaar$eJz>+qPH_aK^vEY<_JcSM| zPG2F9CpN)nFOQ?^;`Eoaq4#PVrJ_QRaX0ZRcen z*#wMckN3`LOMS;)54|3r8XhLp*CoC)62$kaj@0+<%i_z~4qgBMU%%VGw(B?K!2hfD zyW;3}>lf7Z%Ph9**Yef>qxB12`){q^(UT9ee*K`ZA@oDO(mx2MF3dpWewHJRxSSxm zn-Q75vIn@rPV%R@lC|1b8j?qcjSVggnEh8sW-V+%ML&0Pyg*v;Mjkxk4tcO>28!45 z$Mi<0)r0^m;WOeQVmA4s;sAH1_4mNwU_?Wk+f!m*iZW&E6s77Hv3=rT=O!Qs6*uLS zkI#^-jK&BV;iG7gbxU@^5_-}x-qGeC4{JzLSVNW~8sGq_v2hEc$qGL%5i^b@C3@Qy zFb-RSGO3?aMJ9#t;}ZJ-689FC$b+n0KS|JQ-T)g|;(K+AQ{!go_O}rKv_KoxO>4wG zVNHV_)_|e#+5z0k-tQ}wuq55EA{SGkVjx%J;f*J4V9y$xJ_rY38>FI@@F3h1!y##s zTr_un$dnG!nwo<&rlsneNcB&J#{%1*%t5U~=$F@W+OwE3W z%yPD29i5$%?CPSPlVg3QSfps2^@EP~%+Wb_rz^cY#f@WXoiiH}l!(e96=_oYaDZbw zh6C9Bs1L+_G7GfmpA2GCDig~@mpv=ulFdY}OJKV?BsS;B5i9kn@4+%zl>dVavlHk9B{q(;b`eLa9BL z<_XSrW_m6EglEQ~IrBrtTPtTyUc2qa`*To^kn19NX>WMCHxQXL%v`(wTjizmajx5L z&b>s2wB1YxJ$P_pn+MOg4<_q_l9sXu&mupBvOPt8$(0zLq>`3yvw=}KcAHD`P#RTbN}vHzPJ6&aLzk@VZ9Sl=47Y$lsjWuw}nLij>0{Pn@qyg8c<;1j}7j#)lWh zm)E&4T_hJv(KK8w&v{v=CBANuow}7qSlb$Q1DNSJ=%CW=TdJZ71;*% zT)&o5m95l!PJjJa;Y|fO-d~YVmH&ACQdQjRgR!Ar6MM(HW@se4M&?O>w%hGN^w+UP zwpUOP{Ds$kH#x4PBZnr(GBoq|+v4O{0**V9<7r%KLyif=tW2pg$=SLASkl`M3w4)N zw`+PUE!rSc$1b@I8xwjf9ca5pS$Z3LB_P*Dinq~_=EtAYgpJN6q5h?b1(5NKVYPKV z22leJnWDzdn9jcM&a+x+t_6vA!U{A)_CW!|8stV8Y3XfDTlQC-rI8v(-;yG+v58Zb%(+ClRtLxeOm2d@tuIr_F8slJo0L1xgT}*cc>G@azgDA zRVe)OCQ*k-D_YMk^wCVD20YKM`btxbn~qUP71K@U;Y1_>bJ`&aXQhdoNB3c{t+EG_)bF%FW z+2Ca9Y9VKuED7#e9S0$qSU znBSkx_j4P=QkB|BG#{yR2t_91ua+Zf2H1iD67shv9IP`7kCy&s@I+xsz|7{1Ojn$l z>p28dB!BU-C#ly3o^jWNU9XGX=5Jftd0i-K#PI{)Vp0T(hudGyWRi|o6?GF7CbQs& zD3xs<@M+W~v&rwan_*K)LRy@GdM>lzEKGR?(XUC5x8gCf=nLI*#*cHRdY$yu&ShC) z1~;|Ip{O|i+jmNxvHdw&V)ZSW<&4g-kpfqnW3K7$p_0|GGD#FgG4jElu2yYoF* z30xmhcwNE7OEG&J{?l({ADr8VxR(~Q?Wa{l*tRsJ6Z8-@>*P#wO%`>RXg&{4y!)6I z3VjO@;&{{SCXF^jGw{F3Z4z%Ae1bMTnda%G`RRjoIP5apc)ZIi;>^|A%|=Jr!Hssx zcFU{z(+Pe!ren%cb`0eVbG@QD2uN7*E_`azsc-s(%`933(At>u4a_Z}!Gz1%WQ-ls zJS0BuOij1xCR28RLXxQXoJtU>9eP;&7zPgna7-L$9-m_)_=;GGHku0Y=HPUXa zoZLDP zYBaK3o43dXTj<-K*eD{Ok}F8GTn%2 z$sV7|15e8X)qY83IX?aX@ps0_ERUp@JDVXxq1qFrZnVJ_>@90G}1RPvu#3Dom+A?JV@n6GamkUZ^nZC2y8L$j1>D$9T4J7-Bv$U9Cu(5+N3d`-z(3I znXP+_BzFxJXR(df`AR=v1^D8T(Eg(a^ze+l5V-V}R&$lTg{AA|%pY&oK)0%@ke|ry8qqdwv2A*#p(~)GJK*Jf{5GnP)?~v*o}p6kdPik zjLd?+%8F`2+FFGTz+S21!?&!Hq)(V}vc#xm@+N;08_!qgRLC9~lsxZL8uFE%#rry+ zGHvXiQ8s~N9}rLKenJY4;5I`P)uM!S`PkEMzLGkaT*^t6iK9wh*gpV7VrI6RfZQ7_ z19Wl+4B3eb0K{UdSI7j3NF_-?meBJqXvBb48j)`LfBCJY5m}}WhfZ0+j4 z)_qQbK4cw&K4b}fIKib4T@i;YmpGgNnZ^UGUCLA^SMD+yWbBQaThj%O1}GeP>xYV< zN*V@#9Uzj)wBbIk@P^wX`4xU}K;mzR76~4MM&~G!QLC(0m`;tw^A*WmM(2#S8Zh{m z#f|0kqE-JPCPi`bc$YmR56{`vNR_j3v*)_=pGw-ClL`rkP~S&9{*G^1 zvCNW@BM#n~>?u0N$$ilAKbD<)Ur~zVe>9T1I8@mZXdoW=L5d(j&F(XI?R}nsb$E*X z=mou7Aa{!^vx{Hwm39XMEOT$^bNnMGWEXE_V?03suyzn6<*_fMhz^q%nb6X39CrcF zQxbPq$L~6uoqpIwr{8V?E3{cpe*PwY_7)7vx}hgI=RL>&V7C9hqMm`aYKV#r){p1% zA6rEPy)9lX0V@c$_n>-kE+(&)@L8(^X2vnZRBAO-zHRDA{Co}Y>cl@giM4}W>G*I~WvefMR#*t>B$eVqi(e(i`*Y1A?)> zvYX}W_JyiVWgl|OlbF6^I|f0%WuKJgATBIPqlSM(Ic?YwQ6;}9U9L9iH%MTE=7PHa zq*r3L)g+Re>kMc`=+J?Y!7x2{znqhmT`v9fmCctan?#UiEe*Z=yts{q4(80gKt;zJ zg!V5u5#%Zv^`sTrUdxgBs*VlX9(p}yzJgv1*@BI5iIh~B(_=U??~)VjDrg~O$vI)C zr@psb)*e~lUCq#aWfEuQlnF>z5|eXGSO?6C#{N6 zk4wYSpXe*;M$j+RI^US5uHP18z&qxjJf~YW0Yb-yikry}_XtWWxL0%4d4l1o^-DOH zJ7Ps{G=6*4iO9E!KvMD1{FXf7vB8s_7MCL^vK)bUSUY9a(#xDw61F(D9`tIm;R-d* zco2fFgdh^B;~_L)#D8y)-bTvg0(APNt1}Ul&Gom`iCz0f`=I&lWB|A(Jhhf++x8`D z-vX`$=f-G-%F6f2u{wWjWyH7u zX)=ZGhhF^2I>ExtWsh==(RenOJ?0*5D*Hf=WLS%}su<~cqA5k0p=hrnA8~g@Jwwp} zuzk_vgA-zkWCSL;l7HUhfO!C`9N~L>kn*GxK|J{cjC5GPVACEH^|rmS-%4^`5#Wlf z-Gx!>wX^8W*U!f1PcAuj@gb*l8BwQ}pe$%cZ1%uBQ~F$r0#+ky67eq$`ybS7YL7=F|lCplQnX>s? zP;s|uAX9`C>U!(`N9diTr8MUAr(@2!VpypkfR8!F!^3J=;xWrwz-3!LBBIyfFK2)? zNU6C^Y}L`ExknJVTXWyTh6q5caH2;g|aB}0@E=$rh7Htm>jsw%zXf1%a5X? zU%Ou9+-iIA%M~N7z4Iy5Jo0{q=Whya-=xaXcwRi z4EmS(L97>AJbXm~dpr1l9NVtLn|_uUykh_^CA#(2gwQqAG(Xn?YC3#cF^*5aaIoX2 z3)_GC;?_@R$fvdc5rw{hIk*>oTstEyxzc?dlldzF*9pd4fCk1~@ZMb$1-yWX^=~)I z+M5%jeD*UwrJCb7eJXuO7HO?;H;1dG68fykxuDDCD_P_{GI&cwxy^uiutsED(y1L{ zm;YWLqL4+=0OvwzEUf{fGp~gY$H>QKAcVf*NJsabu(Aw}?hAJQgz(taH-ki^u|N@x zl&#Qqp2JQcWNddt@ypp3FsXm}ww0nn70U!~oNY||kD;PTLSIJ{r=uj%X+gG+4Y3q6 zfMKl`nJH4Xls96!0~KUJ(y33i@+~@jdckf15IbP(B`xv63+T(>h2oP?;92TkbVcit zDdMcO)L%3|EAE=$L+b5-fyn~dz^GUEvW)iTlikt&CO*i&vuz>?1bRJ<6h0@_R!2jkrO{r_ippZmM_-T+7wP^tn0`c{$GeaY|FS@%x zN!wd1O@Fy1`}tDxN|)|Nh_tWOzrkS_J9v*vK?Gs31Q&=u{{1J&5~;o=XUO9N%Ss_M zhup{6!C5YMr`RZyy{(g}CY&F)3IS{2*7+n8h2)DmoGA zjqczN{X`e=_h5~f3C6z-ta^}YoIbim| zKequ_cl_*s%9t?Xzuwkq#PP8*(AfN87Ob7o1Q}ErGS4Li3jPe(YAk&D3Ymqkj+a?r zsP!-ldT>(w;E@yD2^yuEJDxd>39?L&PRCu>=yW^@a>{i4_-_KtE6s`FM`C$aLKn`a zvVn4HA46tcnP%zVFhNP~$@~jmy8ZVfs z(>QIdoyMlOfGV-m$7%V@9C=(A6K1Pi<%{@EIc|S1h9<1`WFbk5=oD}yDVT2Cw3cpd z?72lgiAcYlWD82;Ol|aODONXs7@)U{W81U^KI+H9EsK&RK4Eac0NT|HQm9>L{I_XmQ^-XcOxYBO?})t*5Ku+Z1+STVEmTX=MOf|L zyi=`qF9RL?w^hqMf%QyelKqMQbx-wAyKD9&e#!l-fA~*IOGs1he{J8kPkLr;B0ibl zMVsyKv(?Mns?b}NVH~MHz%|xgK{79CCW(^biBgRA7!cIXM89EfF398ND|Yz1g?K;RSfdfp07C82uY0{lJLM z%4E&Y&_!guTyGOue+j!)N7IBnQm@IT4-_7zVPBb#mxt^N73Zi1VVFrdUG)m_Y*ibi zK7_wgraLm)h^zbRP5x@U-*?L;Ij`B|uO)OjXkqZV(5q z&M9`ug_^DdJ7jGDZBSC1t%fm@V$HojKa$WtpEI6Fu+Dy0H258USGGZ%hHBgf*VG^B zsmS$}`+yr9)F1ne|7ojjEH|&z}$WvP0q_~7;78Z-L8?{+DMHwvde9xCSaz;8>x*q za-KGl5!yHq-C27phm0rz8eK05bvkveYs@hNb*-iMzPr*O5opy-vb|Wp4=qFJ!0m?s zo*5aP3@kdCy;?I(9Nh^fH4sZ4h-MZ^zO?b)fhUeg^_AVhrzP=R5r3)Pq#(B}4qr*OI#BOONn4aC_yZa;kO8wvY!?--wQRqqiQ~y^k=9$f>!51{e=6TKWAB)`{ zBRAB|SNg2HN$tXmv-0p@Fd4(Uu^|-oVmhdSRDU^eC@%8-x2bCR>6~?VaX`d;r6+QS zhw{w22fbp&VZQo9%ItgQckzq9vXcdrgXty3{pjzH2z7rW>x~WE$HigoOC1(gnCSg_S0K$dQA zuz&gppN~)#MM;?G z2jt3ja~dpW9uqN()bXa^2W{u&n-A^0TpF2x7M|(5LhJ`kt>3;e@$Ez52bsDD?pH`A z0mvzQ(Ug6l{v-li8PbDlbL|1IXXFoopQ2tP&*YDuI-xU?;nqQpGP$G zlf0(XS}6(IODw|-h&wZ z^StX$qOr1_kum*z<2E@%%j=J2`SMKm;6@indeF-^`g{><=#gjsn!7@-issH&I!Qj` z&xzy?n@BzA_twkmmkrn6$L6PV*`xt+a#3cXFh_L2a;*?H=H~p7R~smwQ%mOd=cmljQ#G_=m&~iAyQ=C^d1R>w|7w zPV3pTyWaK6|D5sDqaC-a{H}0WjTz!o8d|pi{k6weDvoNdd!IF~c1rr{IwX=WGaqLE z^lZ#7QSrEBIXEY71A3D^9GDY!+``-$&x!*m?*VhpfYq=peG3b1&EtY8*zn`A<&xL{w{Ys!(jnDL zPSBS!aO=q~ZV4`%d6g~ktMWpYr3_oM`BjE`kc+* zue#}m;p-&Yv}b-3!NEyk*V(SG%I|E|c~+irW-b z@6QNDuMGAjc7ol-YrYU3m(;xCQNAG*oe}iK?~pc(t=GNNibSlx;!mcCjG;f5So}E; z{IQ60Tt~CIjo?(lhDFE&dFp=*@-&e%Lw1ON$<%H)Q|Bo1eEEz;o_}yv!u>w*fIa$= zuCPa-K(VJWU@~n3XU!ArX(AfoDQ*h(G@2g{+d>EnN6uh#Jjc$|4Cf+QZb>;YEHXy0 zNm3&KAI%c!P&nj0i21m;LhJj5dDI5;Ld#DmkYTpLD?2ozAHXdhy!v%&{>6sAu81Ti zNhb(co{ahg(|@WW_J>&p%h(%GE`G(IJbgt54Nt z9J!g<&}ZF=++zohnq|*y0ve(Lb1#m%vTIDs{NH+u^(i`C-L2M6Y3puvB*-~vzTiaJ zChM=c+Zo$0a{GYO#N~4{5#juVD!ZSvvwSL{8zHuvZ0bZD31jIyu~cq)obDEGI@PIo z+v(1{D&9KNQvb95m)!0J68-cqjB~BHk2xua?3N_Q&~7P} zc|nNsDR@k@i9sL@jc5tr zC?~_IJL!wf4}O3%E)lFph7ODk_Libp5SE=i2zHRb+JZi?L6Df;nh^iEgHOjQ@Yj%# z3=ILGU`MS42Nm^|%5sahNq4sDJLbeyYh!;*0u~xlDyGI_e0FncHva5o`;dEQ&Zt~R3BDDrHA*tfqfZGwU?yGkdy5aVGY{9op}nz? z*Ig5-;KO({$1et2@nIkKuTT#Q{cLe?8xCD6TL@XF@qmz6QqK} z_&Hn3bB}@mfMZLfh9Vr!eVQ$`8T$BN_>N3XcLrzQmJSHip`W#ZxXP8{l_FfJ)6*H_ zjmJo6X_*%vlZ4`#LPUhNv>ci{5-KQY;Waldf|loIVtOQLJB-Z_KSCu=0@aLm!~Eo5 zhaRTug#siQp~~)<<$W{a;kB_9New4z($^gXPNLr!48_gl3wdVLvBH;To>N(od(?!U z)l5franyI$ey{`Zs_G10R{uFT0bHm+zkdkJeZNNj5{G)J<~Bd|J7MZD>W}aA0vtr? zEWsp-sBJeB_90+tT5F)_%5D~lFj2*!2v3pHZ(t9+Or%`S2XrF2gviwpCDmB&-_4&d z%KbP@8!F$ye3+>pu^KKT+M_`^2o!IZUhZ-bHD=?3ZD6hBf-VZ7EAm}RAp#qwMB%e|J+{0lr)>9Q{S+D?NPJulsCkcoGAOE z8=Mnx7f*Hm)zCiYfZdEo0fn;`-|l_aV;$OeT4uIOgZZq*i{!aZ`IclLhE?2#+^BVvHaHO>Sf|DuC=j5E02Bo6PF8#1>n z*6|;J3%TBcG+ivM4t3>=@MdJzDlj9TAR)YY{lnI!SXj?eI>_@>5VzWdq&|+h=I?^2>I<0|WDLa(t43qaLqa^QTi2mpxUJso; z-Qzd|r+mm@=#mBALC6bY#rI&h#H6YwISFTy%%C>>$fi^xIF1%twpAqCCACW>q8n{wMDTdh)rlwyyowJIten|Yzd1qRTl7!lJjQKXKo@&VBQ`c5nL1UZE$_)l2_OSMi&VCIx4PzUe#XN?hOm zbobb&lGYs|EuDxK89&qHV6RYBYG{3G=*!f(|Ex$lKRI}E=-{_S{VGN$oj)cim{~D8 z`TQ}-!SssJDd&$#Y5%QKiN5C>t1)YNvTJ-})`zyl2GwN0=^OJplao?IHDbn(BhfMR zydu^A=+u{zDoxtH8cNHQrt>mO;5sO}+rAcjlQn1a7wveXXGBu)w8#XqP)Bn2Og^si z)XlNk=%ZT9lXlrf`MI7)8!jJ#e`|p+3uLdQdPBi7hH67>i4uIEZf&gM(mqa30N5@$ zkW$p68q@cs>KE zfEODqmq%o1t=`%n0KM=_z2`5sxqRFOn<0vvx7iOlIfS;9x_Vgbz9%H=hRuPJyH z&NWlazfc5d=LNO!q?}^NAzG`y>P z$yQmP<|c6eeJ8UT{cCuX97WIr->T{T3Pu3l^q;_&(AP-;vtX|fyvB$)#0u-v?1qcm zU~!2YC89Bd)Rq$8QCx?=tdSN>&TfcXvc`*_%b}DJL8$&5c2=Yx{L3zOY1?jtpEFyk z8;?w5DU<`jpXT-d!`$1zH(8yH|0xY6Kp_RIRIQ4F8(Q2@P{E+KK-wY}QWz~h3b1x+S-#U4;DU48YEw}f4cIRpP2ilqc*yPpc8PN!n` zn9%Vg|21aJ@c&1bZV3)pW+b06{! z%-)gexN5up(>4f=AJAWDuY^6Ok_EIyUAqT3X=LfaQe*3`LM?X$FCch`916two{je5 zg%6uVOW4nvHKN$VZ{#=++fACg~t)bb_)p}YJ!`I$Xptl^U}gTP zW{WA)cD>#OY-CDoFVu8>WpNoOkK;}{K`MQ&eRAX#Q#CU(zV>4`@K z>kR)2GJtSpi!l?1pJ%k_okwRkDSwz7)-|XO(8FQw zxAwayG1%RBxd@qowk+GZTgYQ6#rt3v2+$@LyV=^W>BJ*E1{aIdGpwXgR7qg*VUuj` z&b*gY0-^GYmd9{>KqQ-8uXem7I$d}UVWXbQO|VhdJ%GI6O`ThvosndKk>1X`N6&Yt zeO^$jw@inA%o@YW5+E12Q$j$#x~w$yY|#~kwU$75Hbj%}9YlPXHpU-BH6Utglm<8I z(UM?;bFd!5*;?UM{P|afw*j3IXCqk$;MC*|_2~E8Q9x_|=;JEswQaIDuc1Kn85~&F zK(%Ho3AyIEsy-SVdjBGOjKQykPD!ZBXYK&sQpi4O5BH@5X1K5ROANQNQGolo!<9Ew zbGY4bX+1bl`WcvDsp%{DalEg)?7n;wdSpN|{PX(aO!>?Wd^lBBZU;#6u1|etK5%5l%nkq(BB+^7s@Ke8JY`bsSPZPvd*hq{hn$$P+7fsD+5bReXu&DxnKe*#xsj zT0W8ujjw9#UG{Dg)z4-^yS0olWxtU+r)t<}sS}+~ZwV3c9)-W*w9@5`jx6_{tnj|4 z6BX1`4jy)2UQypHZ?_Nt98U3UIHmq`=R}g?;?1P*wMOu(vwxP|&`S#07Nq(xw(Q-9 zWu<_I8vCj3@_m{f2LwcPmZz|LFb0* zf{Yir;)m}+681wXa)BMJ#IFtmJ6D9$2jyC>OP40>l#oR4=Zq8HR8b4ZQKI{!OmsuW z(1jMdO7&X{gFOc#*^_8#AAi<0-J%!uh0vYQZT3nt&e{D?mHpTkf1e zlM-t>1kM6a5s0H|Mg_u)Iy>x6O|PE(fleR;v++&+`;qu>p!1(~IS|}Ku}DDHHMeZX z2`4Q!O1l0|`>xMmAbJsfxFIVp zlPwmROdGDy4BhB};i4iCOLk-8iJ|c)SXSA@x4a_gsVGTEm_yd3A?@3}F-!M}Sy$Ev8{oBY$!9pFg8`PV}qiT2%3 z<)xL7iC1?cuc=h&CeP{90)o4(`Er^!j7fWIpQiWAnqFszbc{zg+68hP_6CLMQVyUR=2=|)l3jqgG*lf5Gwb)agz_g(E8lE?F#M~#<= ze{rAfQ5`l=UG~krqHap9(Pf*)^Gf5Dr+K_z*w}E_AQ+ohCh>};2aKD9HN1xKImuM1 zJ!arfF`N$oD+{e=iCQ4h!EHQWlkF6Zf;BB3lsk+9h>?`FBH;f~2ul7580-T-wsUBq zFs@XU7vs%jAhaKch-&X~+GZsxeQM?PN5GcVR&bT+8|RDiEczxtO6Y^uPU&lL`Ihks zotmb7m+%R=GITO4FfdegAat^~`+=7kL1Vu73Y;s~yEy)8MdJNKyHz_&&Yt@F&9Ur$ zK$QBTJzgr4-LD4p?JHshImh>_B)*Hkg8wr3t9JG}-FV(4YpivDMzOk2&bwfyRj2Od z8_sf`oxv|zQ9+Ml2^yYKw+&Lped|+8=S3wTSY5+K&nxpUB2B~2h3DF;EHmk9r#Pm( z2eD}EWAKZpG-*vBd;?lb^Yk-{)Zx@mkpd{)kg14LN~oUDF;K+$*g_ia22`9*@h5< zDT+vZCT)Wh=XF5}Gg;O!TJTtnw-WFY5xXiD^jq=ib`f~Vq{?t5cqe={Tgqr z`LkF4L`pH398!%xPeDyn*-=m3RV7}`tk(jz1%X;CBgQH>Urog`a z;zgIkqn9o?-d-l0X@`S{=^kGs)6_62Vosam}YZ^I__zjftAq zcV+lrOcR8Ky1p%j4t+VQ)03N2<;!&=6*{~7^01WlBR@&_O8#29&!UKlz}+^6OEuxK zd`gSzC)JO{%C?Q-r<^98Qk4kgLfd3Oj=;qso%t5SkEOdM(wFPLXhag1sJoYt7*JnV z2fxFKFtb9kj$COHwx3Djk#8SskX>j!Jf2oX=oYttvTZ`B9f73@NcbD%kP$Gv`sRNE zh8bPKAT6o~pA&OWkv)Z_{Ib6$%WUFFaO;kmwe_z!4>Vjm5?$%d>}U0Z?;mL=OD5#! z%(#72tLNi%(rNOnU>!Bly3NdLjLIRq|%OIo#e_n9FaWS;CIzw1zYe z!cOXb#usxxlYOe{9asMYH-$d!ADqnH-qC5|_&z!9FL%QTJqzPyl=N5FO8S4Gq`%Wj zx)Z(qdA4SLu=dw|;;T9d=kGVkL_}fH*>PSkPaOW|1q-MLNyW|OTjabB+=$i3re|8q zoIO(Hd-%ORl3vcP#L0pjQM)bnqW9?N-D3-yNl9mOHH1BF@7}(SvI4>mOGt^_N`%kJ z8as;A+dudhXRNqGkF(NF>=3Py`}<)CIj&)k zu`icRW2c}Z6_N1x&OY7Wuy&HOXWT?5 zcY_!4nzrnu-w+Q-OC&T)m0TtRf>+K^uDMz=WU+^z#`R5$zuhKE(-LZ;-K5}f>((9} z=+3m2k^hxe&U1(L((h5_7wQ7bQe&lW-9~&XPABDCU45d;msE>{tKFi;{^qwxhS=#{ zr)xyS2V5_LU+CaKEc5T)1$c^!n6WMy179%--K{EYKCQ`kFsyLQC#Ep|>vhM%A^v5F zWxiQ2b2qOH77EdtTr34s>dW0=U1vlsNvx(u)b3vScMw%z z*fSE@)9tUPD=12mtr|W2_7oRqZ;?uhq6D9G%(b%=HszvG_ ztwt)Yo;xR=Hd*fv9WWpP6~#SkAf$|g(LfyjAFWU5qdA7zJ5QrZcottuj-7sU=WOP* zb+CA+d3f+wMX{kD?qweKUy|T%n>=v08}94O-D>>{#!ykRh=WpwUx}=}%0Y<{?HCz1 z=XZ5d`pE*lMS;YQ_9c3NN2qDMTklYw!7*!K z@K)H2#(W5YBqZuSFomo(1G~ED#g_$kd5D#lp?zybZPL%m%Oozxo7UI|FGFwI=y)!j z9$h6g0C#B=N8dLLn0xESd28L@+r-QlA?zL+=iTN0-tPnsrL7JMi_LCrcu4;`dOFjs zXeOztDFD-ns(fm2P)^)toyV*CVNP7}jC0w!etI4s?)}=GIqu${rgjJHqnqRkrP7dB ziP}f+yX#WnmfNcmU1XdDfX zqVKhTXUOlLwEbpFI2uGBY~ROz=4e>Z_FLqnhOf2#-X_0iwEcd8@ia{2_p+U%<@2*Y z@xY=vjAhjTJ(eZ>vD@A!&kkvO_eJ^Lr|tJ4`F#R9WIs>d5l6!ZZNHbu?^opa>{iQm zwAnfOHF)Eln&16H|8aJ5AS<0`+|8sWu6~Frb*5BSK z$#+(cV?HvcTlhDbf8XKXH~1&l97!oDDZP^A^Z)(-oV{)D)4hA+Cz*8;645czUye&E zk{J?}M$N7J(;72FEh1mYwRR>a{p5dGZ<8aoy~bXjuP)SJ36)3>XDmT?`pDBR@lSnL zjS!bwog|WL-+qST+4;g3%|cKg3?uOG_STzsngV9yJ`CBOEm zbL7#bv-D|r2Rp)F+lv$H_GF4;iI9Jyj}8S1i!y_!Rp_)&hwe}3!1x8v;_P92TB_#1 zldBBcg>L5X(~Orq-lIGx0{`2+Qo$%C)fEV~3%fvHMiliTOD@b%+q5i+D_!tn66EU0 zCCGJ)3e%kwqBs%!WkQhvz+i8xlahoFPo(2$&+PD>^}s56lH4rGL6>LI2##=3_L#K& zqZ0l%f+~5#=UUDUUC-+Tib=}))8W{};1GBms~`gf?;_ltZYQ2y#wC$+#qICGDosk< z6R+EXG|bujNsr_^<*AcTg@rx znj1-D87MjZn_BI5Om~X;)!xKvR=qj zR2MpC6{T7`vT}8iu{ugFj&rkYn)A}N;q(#DGqQ41sR{RxXUF`El5e*w|7M<;D!VK; z<{{OqL^EWa3i=6tSXUNX-*H(BGpuS|m@~QNI~o251WW1%!Gu)|j(cfIUtU)<^;%gi z!`I1vFLcWL=-4KVWaT$#kD5GJZ2s`9oXpt#vB{Vz-C9#}(JQFl07JYukHJqXhu7jS z#_k;+yLT+8Ep}EQ*YvV}MSSHnLP&qOUoXdg8u$OGRj>S7RC-;up4L+&(kkBz4HZJ~(7aEqJ9SfZ-CMCr_^~>YXv09ZU-MOs*Fz9Bm(jz?e%U|b zG8EKKj7 zWZRAeAJ~lSLqQ>{82gtCG_;X0M%^<%A+*%yN&QaZX>S@Rn-9WTg|4jP z%;cG=R$uCBX@`fe%R4h$tsQ!UgtjNm{m%K_ZV?_byJP~9;SpEF=d8|Vso3BKfdzkQ zScu2*1Nc+ohv|x>$(m0WKyN#)2}Rom`M2m_`f2H3#(#v2m)LR9)Hm3Rj;uXwgs8K&qwFXM zXV!a$UT`ZfowE@!4BaeXB-z6~u7_elKO5X zMTAbC3QCC1u-sH45f}#v|4+7(3}mV66m?9Orp5x3!8`n$iqwTj1?;_a|5s)9x<8fZ zub{;XHbRe?pO6h=IG$`xR4Ee zmNlg@n>K%mxO05u;iJe2p;+4d^GO|oOssC~^HA*BIJj!ud1P#G;r}X*Q6fC^sQY`% z_!5n_@@8~FS|r*cUw$CIrIBbe--+fZmvW?0d~siktkk!+$%8 zzoDH&L)Ak=JBFG*0m@2C&o8n~#vtx$6Cv`aB7DZusI7J}YiY0WZSfvur`A-}_x7pB z4;iGGm=+Do=p*-~Qvz_4H04tY{}}KQppSk*ZR1JV&Q1zZq*)8n4M?O97jY?c*LV%v zI>Voo=*Lp5;B1fl6J(plBG@w&G7kysuBiQ=` z!r(X%Z%R}YX`!OXN8+rm#^0bTid5?#7k!Ha^l-(W1S_PN$m_cR$r*S!X@T zJ!-i0K8LUx*MHc+yQ^qGGGGY(>S%Hhgg}Edb~*`}K4}=L?d&}~sW3%CS>Le{{s*$#u;kQpWHo zf^SkR^lFo?;`GX7)NEECa)bAj;946Ix=nB`cTfc;&!yw`?9tw64pI0+hQ@i!!R-<- zq$UNEHzYCcHg3w$lLCAb(N!0z`7bHC^6`Y^Vw%wV@pM);2BsZqPZNGBJ4`>*tw4a&ZQsC;#0gn*krufb>*4YT1X$#Ofn=Zo zOxh5@noQZ$xb>~xF@KOTtcg+WsAExA_;q+5+g-coU+?aD@Ix!Z#d8Euq5}{%aG^kY zmxzzIS-B&v+R)p{!TyiSP6{|7Wxb$w#UqdJNXGMchq?NsTz&DnSA$vbJ44N*=fZ4R z`(~)k>s&;1kX1?jk#8K8m=>@~qcjkg@pjBK)7JPZ@+~A%3m5M4LvR2{=q5o3aWL|; z)I~+s{c6s)CDN80p~58K7;FxYRQ3Jy{vvYFMQC49&sxNOXfwQKrAy4cWYNqLkE?kw zdBW}>*hQF$r)R>zL+nvs_fz+}de$i=>^APFq^6xad=5hkojNbLSetUMxLZ3hFt)Eb zM1sGpD$zsfS4$hCjGzz^Z$kiMSYf<>8ks^wA-n3ja5%l-4!fB)l{qApRElyrQ*MHow@Xqxm2Quc}`+PTVtf$Gs8?u zT>PC}oI1XYk`A-Rhu-Z&peCj9LZ9(jb=~v9FBJKT`4M!hH(|5DBVk?;@6<&Gt?ZxO zdL(H2pYUhGN<$6LPC6gW9OGPpeqQ`E-xhC;2O0r$7x_XzY1}!Lh}+%kz7Rz3oCjEP zXJP)~G#ldYtg^$KM#u|wJg6nvtj5aId7t-mL9-_xmncz~(}VL&dN@wV5PH(=jK)4J z(y`ejj@ZYTRL!^T;fcwnyWxq&rsK;S?U$R?^7zYypmh6klRdYB=BTp_R?JLthP)<| zJl$&@`^=U;3yyklJ1XD6QfE~~?}fuSVmXOMZ<0OMB>bDIc!;gn?h=4YogU3S>OtG-JraBpoM@bRx~0|_vFIwu!w>JV=aAaN)J1z0T8usJ zfiG$bqNB?rkBIBWQQO%{E&rQnTD8{W+xkvwjh6^pT+-%oN7tV`IK9y->4dL>+H;dKM?_uOPDI=YeAHpz>iz1QL4tr? zHQvo)iNe*J#y3Q~8*98<`HdIucJoKH<_>k8bSgn&1h8HBYv>)SYeR%Zf&I;%w)^MI zmjN6>GT5N3^$&qbMA#Vy5;4V~B5TZ`7>)_h z`45K_7e%OFxsjyHo`MY`>}+l)>}-sWvU;fqJDr~5G&56LD|cr%d1hll`~(oj8@|Ld z`zVrSr<#>o_r`)pC$=_T#1m-TJIOimC#;>aCtG6k;>Z5|@S+A)=C&RC)#S?6=Xnqp z9_m%iY@rTzH)sFYndHLd@W0g@{$F7uL-)2m>cWi{)jBxQtp3Qaao*;@wF$|p3CXIF z#DPufol#n{+Npm$Hy6puOgSvY(yn@~L1dsan>jYs#tTkA^JH+tCnLJ~T!HOIDF)W! znY}?qx;5&w8p*TFN`(w&k`d}M0^`Q@!e8n)48v3io%KrzZU7#DtfrU995L_q#&rKX zSI85R-{32gP)C{Ls+}!m+(8=yDc~lm0`Jx=?{@c!otAf_$Gf3B0kR!G$bO@gYpR_s zt%vY%I2Cm6aH^6utyR*O{bqp6aVOiq{79fLWOc=MIgh(3uZ=zLn40ws$mT*Zdu4P! z3KOW4Ql(OdBX!KMZpn}uu>(Wzo;vs$-vS6Dx6<^j3Hd`b1Hkp98U;51UDBN3aK2l0 zo=@gq8@PcY0+u_A0PkL8Y&g%qLLjW;v(r$B*{WPg0%whRf?~yF1@wHfV7K8N(OVi` zk}pPn6Jyi0>bZgM38OiXuYWOL2T^Skg&j4i#v3VRr+)}z@TXV)BFXRLLtS|b?kB*v z3?e~NF{h++BpB&fuecfuu ztMT`>@$ztFHuZXO1*P=7XC~!>#h+FDbFT}VdX#`MHwgdK| zFWzJr~g00p$o=*c`a$i)&^N!G` zv@T>j^y$%HZrK3R0 zO}8dwMshQ8+_H`x{3v(XDY_|R!9S37&=URavsv)C3*t=hH!148rhjc@ic2(Y1`^?u zqAxI!)e!0_C|KR$b3qF;rqRb6zh}NNc<<4MySbwwYd%;X@XmRw$dO$9ahMi%wsmkN)C-OGh zqj6AYD?QTfpLEsoNKJo!1#Sk?ysitwZ~iB*AJBJ&K7erp6(bUaWl6##LG7w)mdWfS4@J9HAY6=}GaFL(uar9hxe>ox~WD)bt z@`rU$@HFknoo8&So!%cSA~i_~G+Wb?HbKq><8YT>+DFb|*|Qddw&tawDIzj~sHuvC>1aik6o+H>^-EfQinW?>sdvQAApHBoECH!_oZW2r5PVz!_FKNWxTJE7B z{eCs1zM67fq%%UQ%ic`L(?pf2B!f{kPls(C8GCVEJJ=Ue=RIc+brp#O@@ ztRq|Yf%ES0@fT?;OabP zTntB_s-FM&h-CE86+%+gKc6)Q3X)KQ#U$q-UddZWI-hE9ro;2uLLZsYbPAIN&mBR1 zaulW@!!Ko1j9Rd+upRxuVwSzIU+fySCf?{#>n*9cK?x402zI%y#&Z`82{olL4r><+ zaG^BHn7(kh7AeD3?d{J-UL(560oc;KtDvP+Mf+{nz;L|(ef|0?UH6`;$Izhn2KEvZiQ zQhBXyS&cf+*JG}yUg|CZX+0oK?+j9{1C4{T(DaLVfUSpw^#al()C&-(VmMX6m7qlo zq5`-~s1g3)-n2-bbGbLOs3I>-eW1~Hcq4X9T@3JpA4t&?b8nA*?+RJHMdwHpgCYab zn-odP2DNqRpQ!*JWhu~`#b(QUYbln}2Ih_1G*H?w>QQsS-mw}V(@0)Cx)`!03ZKEj`VPJ31V zZhOM7SffriLNO=UYFhd)lmW;I36(pkK6`Mzn3M-XMdp%mSp&cco8M~fFDg={)_UP8 z$cgWS?@6iQc*B<2_FQ~EoVHSs9_O&c**^BNIP)*Z_CD=l9(wzts*ifVR4>-=MNS^? zbjT;flRg~TbHk|{=8)W_{qZjSv44dHlyqb**5TsVX!1!61@*Nchouu^jSTk7f{2`3 zQ(Q34A}CYsJQb~pR$=`!6$SIe)U1ghKx$QsGapXkYGG2k92eTR(GDrEW$!LJhXdm{ zaxg3+bscmD1#$2-_!bvq5{u4wmo+`c{Wg0#|`LA5?v{0CcfIx2ydA#EPL|$zc3v40}BU; zyK>pyJnbUD06+Y$e{})t$YcMm3x6-|~+@a0z*K9Ioc$cGCWncn21;b8@vey^X(*AZi!mM2DpYt>?6XAc7p%r!vQLp;8;fX}?80L8g#8Hq zVhj2UIu48lR|}b}6O)d&O!6@>7d?S!L?)w7$&iTBx3B3b+%)8&Si?8yw8y2nzlWvi zQ>F0r2)fx2?``f+B#FEHV%o9#{PlON3OB9&Ym+uV#&@^3PF-aN$)3@J9L*r{Qem~S zl4NniOBggmj?8{Av7Qlc1*X3EYUcE1HO*uDWJ%SUf4hlOt`1G4soBzmxB;yZ?p?|& z{(EEkL!v<(6xTHTlm>bPqr_i!a-250rH&XL&=`KCGLGTDH5k4g_f3uA8n+Fe`_vWm zZ!PLt!%G@2yP;v&@9-O)5xeHffZy*LU?{7G_Yfg{i7mG~PAN(6`F)$i5G72yNB7 zw(N=c4(k!h&-5@ZysN4~$gGr(!&>sgIGmp}aDKWooMlH>e}1!axb6X{J4bN%@Wi~lIfsvG4iDP&IJgRz~%?s9Xlo(B-7rGiB?8y(XFtjzL( zcB_3yZ^dOi!Pgoo7|fBak&efqR0x-X);U?=|3EXki)k~rE5 zP3ItiEOH#0L+)~?;3k!K0s|6=_I*Z123;2^T{NBnUD@F~IX9w<(rNl})AXNcIub0G zM=8LP?*AJP_-EZl)|8`s80eF3D=@}N8UN?Nm;716-8o3{?JxUCuYkA+bEkX47S*82 zaT)^8=@%b7&WZNmzm?43<2&D__EGA}Dk!spYVrXGHmx z7&~O(){+Mh@;Q3=ZS@(yvAbakqHw4CVZx&9YX@JTv(7+ggWd}rp}nj|1i& z3DKq=x|_}MH$(CUy!}rG-0lPfK*^>vhVTb7geMt7!xg9NW^)hSbZpowywY0J<{!J6 z)_X~DPRZ49kVWWmR{1@2*Jt$cDm6F~TochOnqb@6a2z_Tv}BYfEG`nhLzd7@{ID8~ zrQjU@gK!J}v=l;Xwm+)tXo;1es$sC_7`S*$a8c|3beM@gDoqQ{4UzEe(iHK{+1U|8 z0CB0+iDo>MRegb1ZGE_PW$1m>k*fLNHtlI5#t8|O*)^O(My9UJGA@mNF*36pU;ag3 zCUmbNf1TqmtASFDxBPefX*};Q51U_W!J5sae|T%sJr=Pst87NUJ`GN?@QLK(8-a( z38=NLs)H?|w_9;a?Pc|~l5{-S!a?GVfhyzdU>_~mHB!8G)O;M6uU=$dxPCLs?`XUx znj=yZx`^&rpM9z|U8<1=GpyV(!!rmcKT$`1_U*~yHE9y)PD9K?Ygv!h5}6hCWmIg_ zk43y|QC&p5>pKiD>U|7V462QA6Ix#?W;)etm)Hv(xXDNla-QG$6Hy9Fx-zx}!|cjg z!TxM!dDY%iTe@2eXyc{ZSB3S=v6bw8FIn`sQ;+Hk^>To&s~a9^`hY-}TS(NMPpm z+vU&5ZjXFBk?Hlzc*LYKwU(wfW|=q7H*a>o-uu<+wZfB-6id#kXhC^lv_eBButcjN z&XzOcgounm(jHTyxWUJqV66=#eQ`j(_g(Z7wKyk6u4Ha0Ms=y*O}scnzbGP5ky;4c zF;O=bFU;xT?i~2BtNCU7l8EV=VBCI!H0To z{1HdxBc64Rr*By2xNYn@$6XWFIr>jp=g7Klo#R&iO&_<;@kj4E$B%N>Io92{&e6i( z?L6nYex2ie?(O29!!7?M@voQu_HTbAcX-3u;aAT;dZ+Yp^?bL-JAK{#`lrg>0WR0T z%0=i4{1ewX7V@v0e{qF})_2r_7@hPThfVe|)H=2=YuSBHM{y+j6+j<}j*?HEcPw~$ zVbszXG2si4IJj;9WC)2r-wWth<)g&Z3K{+0@`)0NbbkDWLHY&4`EeT6w}O|&HjR*_ zH4Pra4O2HbCDEW`vfZGJCU9vM#>-c^+elpS=yGr_T6~f^^2r!nPDdd z9WKD*bT&43`6xzj(k(Lejum}gPNZQh8@n_x#2&c%eWTWfh%_H%9W6a8%5K!SzkgV$ z$;4C)z+#vrks)D)a-epx_G9lw=T}`-k6bSUU$!L4DFTMOJkvCBM(^u6TVt;DoLCew z+BpO2Vjn>cXTdv|#u-`pWQ-P3!|Ljj*zg)r?+T+zBjZEFTZ^eoA0Y>#C|kG%5t56m ztz;{E_;Ck`*^?PvNEbWCKexkFTd+uWnyQ_SWLar?Q(qy3)$+=Ts`s7Nq${1*|C#Ah z`gW7dI?P^&3`-)w`Dt21hPW0jSfM`Ji1Np~Dl#_YUFB?;A+XW7Vq=4vD*C9={?K5U z7M+<@C-3vAluF5ImoF$09V6=>me1unTVsVz{J1<^$dwAiKr>Sc_Ef2^l^Q?hiSzwZ${<0-k zIX5!x;MJDq*F0LAIsY6zalJ;qXjJ$&^^ZR@ef#nt@LYW?uXQzWam!+ge1nNvcP+a|HRvyelOBW-siZcU6{m1s*jVfgpP| z4vSVnt*2nGyS$>qIMNg2_&EAs8HY!Yqc$;)y;rIfK2GJxhvOZpCG?#=DWhIVeTQAc0Bxa_{C?aD!dfvfwc_Wg@G7 zW|N-1-O4=IGkd)|{Ibxq+3Bpc1%XGov{$kN795b9W9Du#|3$6gVZEnNSf(3z|l)qB1`72Ei0|zyp)O|9xuf14+24~wKw>m zm!QUZ#Ah1}axy9$E~5nxM!XMFGh=IocLjg8Rd`oo8IO1?Bc;f8tK}`_AI7i>*3w9$ zNbEToG(uAv6Sr2JQ9JUY8Y=C0HEBGA9u|+2IB|sT4C^B!t)*HtgruJ@cDBfdA{54n z$*!LpVv^QIOkkR|J#(nINtE5l#DApctK+Bqmr3Of8D_ISX9nw$p04^vP>O}fTWaAY zGEzC8%#^b;OhZ1k_W_yj=eDBfJBn7S`y|bgv=ea`R?XiZfPA!(KrtsrqLUD!)E`M$ zUlGpdYczVZe1>Q7S)&CmW+u6+`Ry*=PGV_uo1>46;qu*E7SY0(k$!QgFeafW$2i}; zyC^xqRwhHf)MrA{)&){vT6x!Zr~53;gxBcvKzgdtOo#a<3Uc#J9+v-V!ebKO#wNav z=bJpIUioMXL(k@CjsBF2xZs#MUjB~EPER*>HapdPJp$Dxf|RWNU9|$+sWsc~bkVbn z7L>JJift0jn0jqB7@{E*jSAero{*kaQfQ^{OJvncs2ao^GDpo@WpJv4{~G6!B)7oT z@R;W_cX?l-9s|U-?Y<~m^i>J6_t}E^-BJ95HpSQP*e8i=TxQz*K_x*WhrNz47CR`! zz5`*-)Q)_eNzwuPNFtUjvw!0}*vT$uOvfIHsOIc)jT>KMmcz;={OIvqYX#3kKr8 z)S@o=jMD6-Esd!Jcr>eY`4w#ToNDX)QPcPD<9+Lciz+sBU6dqRy1=y9f(*6Xtrcn^ zl@u5&ADMi>>f0`4e=?11j5lImUT-cxVP6Jve~_fbn5QXa6rM0qoL<#**wk|a| zsFG;q_^MQY(SE)ydwkf;0or1HNFJCt1_T&>`}m=5ozsZ|xamyj84=#*Mn=tv%rc&I z04!8Jq8s!mQiuMSBKl-;$3w@8ZdL0`yDwFu1H-$IXA_)>POVof$B7I7Sk!Onon81f zI;K3su*JlVfn8*+x!AiHar?2(PLnlhcO|s_4Yan4?y#neXj7Udll9uV^7ByGMquXj z1yFMIZuY|XOQm_xa9P#U3;=&a+jFodk3w^Z=<}{EKJb{~l`jsJQl#WkZOs=<nP|9zX31Z~>@58~ z8r{m3NLW6Xhb#H42=CJ0f26-Z$EOv3kk3eXyL@h{<+CQdmrrR|-E{7@7%YzVFBtkG zeV*=&hFiHk`bDY$NHPM-lZK^05{wH9Bw;o-^D7c=;nR9Rrfbz@9gb|0HZdDVR!T== zJg$wbl(D$;UX84jZX*v%l^`nJY0vV=%Gc#)`3HbAo`1CLeq8XW8Kbxpyej&%s6s_5 z90Mb(m6s2R@2lP-8G4HVBY7u~Y3X;`-sq*@h?oD6_TX8=P5h09>-a?1C_jAaS~X=BGrRgMEz|7P3rM zRN$Bu)laEpPwk?t>1G6K&{uxLsO7DA*Y=Hyelh^Lq3LOoKv0LP?26~kiJ6hy5DTQl zbO)B1P6|n{+9n%X>U4;yPhcs&ubX7~ERE>7kkN?#Z6p3BS!j3o3VA}~g{6_g(m0c) zvC4|d^eKz!sao)*s8fuVjuN6;H144yJIYCP}|{%_*Nj0n0mv08J z-Hj#PUzm7l?1grdqz7UY9=%TJEJ;h(aX~!4VnL$vjLEj-L_-(S?_db%I^T5vH@fK~ zTFLwPBYBSD+m}MxCvgiu73`xg1wS+(X^YZLJgiOKncW;KLB2F2E+~}G7 z>(LnUFHKt-7b9KCzrl^*AcH9!0t6bjM;E=5Cdgr6c9Z_?dD$J_h&+!6VOE~@WY&C2 zX!}Lrc_b_wjsp*sQ9ddobDprrBT=EI*3rnO3K{zDz*$kJ7~~v23KFZyk4xACG*d zL3zaUeBfLwsU5|ta(SK)erTSxR?0BUDZ?QWSy{(Vj*rd!u@8<_e3kQ}mcN!hYVBo@ z3iY|Ol6hh_k{7J#c0R|sI6d^4H!i>1(?j>6AtAGo(?btJPLGZ9epq_!{`4@1oPizk z^Lbs)5c2?yTbix#X!77L-^AuI$N9KHj83z7;|iUDq5hejXuWw)8qi0Yl@?ifh~aei z@_DCunTR%xC6TCXB^VO7;ESNagx_g2FejxU$RPQ7okJ|CxF`58135|nhDXyjq?JzL z7wsNfDM%-YgD$e1PrBFDMx0MtE2Rx075yMG37w1);y_n*&P&{suJrTP$H~V-OOC-g zT`Bml4HpNx>cQjhIFDHx-y6Qn*=N~&QZxM;`eJB2sTs?k(M+@W=SO9zMQZ*Fn#z>F z$QH34Zj#}j?|IW*?&ra{03cf}v`wCOAb50&Lp8c{4QLttOI3gG9a$+f5y9@l&Y&_6 z>)Z0M7DcQ*8eElt%hH32IDgb0RFZ|aTSKY=m+m?FH7oNl!wyT4`3B9oXjwr{LMA zpPk6jfOa>69~exsG=*q*6c=b*PedypdpWjA$eb#9KoqV=`5KM3@=4ZD`+Txbrd!)I zt`x>bw88-v>jfwK4ZLyz@@F$4<(?&dSDEn;)b}Gzwt;PYhG(;dn*|TBlOksc)z@Tz15rE-nM&to!-P*NbG<0a3t~Gq(ybH-P_}R@lcSIq}P}6WbiVi;f45Ub%BYK z99r`-iqv;r16SV%e%Dv=d=I{m3p3EsxyzsBF=27t;a~Es&DRnsW|&$jv0(@Z?%=0{ zmp#=&3Z^c+tXJ|kMe}2Sr8Ng`FL1AXIN?DHj%o%JKL1O1>U^e}pOd_{hM$YMCw+=i zGkNFaiS3^b)|q`{mA2~9l~=YKU2}YNS_AezcRpuyl5wc}(KW|MH!7}w(Bu0dZMGlZ z(fIh{&oe&I-6l*uWAgRdm$0|?2qe7L+V6h}JT7tghYt{gN{oD*dk@2QT$*Uj|G%uW zQEzM(mA`oXHb}wQqB6aAkye%AI)4YhoQOe#`3pkumk(O;g~`!oNK@B4dvKh%`2L5Ryp zu(=qN%>6Iv2TbmN2Dsr zs}xE}`isQt%OTEFQ zlMMzv_KglwTZ`H)^$zbUkI%-$d zFg_4YFUqw2D>_~d%>JKw2t!TP1v?#$@5u3p7Z}l}Jt(wgzsw}ngVd86ENRtA`*9M` z^*f&1E2)}9aRIVsr6$Q8HD@$2%%dDZU5UQZ-d{e8gk9roh` z^yTf1y*4BfFFd0V0B1^d2Qqc0mt?5_`PB{y!m|p7U+RFrB2{PA+bR8VV8Y^fqx>BT zB-qoDX@DdxvM8O0xf4=nhg$lQK5P>XPo}QJ&}|R5;f`f2okJ6pA+di8Wx`@3mI+(I zk?rO@vHLkEGv{gwZDIcb8m;YS&7JOM&E<}>2B$jC`&{+Eztr;%y`QY-UG;uS|D*P# z`8&d%^dgzGz+f&okwM}Gl6bcV0NH5n#wpDJVC{|VHjf5?klPXMLBM+J{4iuV_Map|NpDev*QJ@(k0I+P>*kEGjVV zkwRw;l?-G)Ib727!3U-)a_`8Rq?=_rIeI!ZIb&p2H92F=pYi5Tw)rzj{*Y>?(*(PN z=ZGRR#nZx*;(!9qJKDfmlV|$RGyUh8{_{-#dAk3uFvjtY10$N7jR4=TFyVDmlTya< z7$sTN)U-L=a@n_TiTkm1I8Q#eiH?mQ_qvh-{Ywa-eP^MF-aSH^UP?~g1}clPwYxPDNfh$F=v-oT=fIBkaYmhE;=J(dC z>o1Q`5`Co3_0Z}oNy4pw%N%Y#^{r7u9VJ4BW&gFPIm4SooiZh~n8Rb(<J=|w_CNSJ>rdV_UP?$sA&kX!cS7= z-qFMBH|nU-%AS)SR|+0bPzynA?Sp>E$|UR<3jnU>w* zXL;Pxp^e%bG}~SNb2ga7o&K1=?414Ts~^eEafg?2!G!ijy$|}-r?;izB({VFCUe8C zx?d(q?0!L6p`{nSC^m{H!)rLh)sKGto*vnFy3+an^pK5HT&EZ~_1yoCadd+(SMz zJaDAgQ1=2t{M|961bZzqyAt1+d##BXM)tz@vS)01(8ea0`r@d~u&@u3fSDKKu?;)+ zJ&W2!{Or}Di!ngfs-f>|yrxdTJg!E)mH6`4tKT156|)|exHm$AnOXQUzM7af9VI9P zf%xq3dj5_+-ta1%rrqpN)9kqSp9QYLTkNa-;iBRtsMMv$qo5h(rizcLs- zI>tMZ@%keAm-^(TRk4PfxGV36K1=M#8{ z_!pyK(VChvpV~4Ta_KEI4V!4B<=%=4?Mk`a8>t9?UFPU52YqQ@R5k2=6M-9f*w4Kh z9n>LBs(+o(!^(}1iqS-$0TUgK`5otbyZHCIL!vj=>m16DnY$7?%$*eu zb?)mw)mpT-5B@YpJ&P4_z*PF&gS@-sW$ElOY2lFCI*SQx6TI;IG@P^pG^>_;+i6#= zBqgzKMfO^4Yg;R6N>xpGBv!UfJWu7o7$-V~&BF=ppLMBCfI zBJGe)a7VS|B!*J@&#j$?P>>h`C#8;6HkEL$PF#<(g8HxKH_}lJQS#7f73EtyOu3Lr z?x(0aax~Q9T=ccXwX(5;0yFjfqDf`f4Gv6(>rg+R)r8d!{|67hKvqA6RvfW=)2wM! z(s*IuHbB*+{?^PsnTBt7lYdQ`D0Gnwp0Mw2;a-A^U_6D|JJkdx6+?PSktd}pCxEaN zDAEDl;j8%pEkAYmpRxbA{s&@}?M-=k;I?QUqrEY_Ui>H_p6UKK;jv6n3PDDX_rLUK4j;8a`mpZt8sV+m)NijET9={k57H?T0q)jx$X3c=X5SB{j$!r zrAtbvg+JIPd?cB|U34=qT{`L2)`{KXC~1)=bWyxi_4c`mu^pdC;ed4ics7q=o$Cv1 z);Tf0tNrJ(#{O0KsrZLp#14I#TYy<(14?P($U5BBCCGs>^Adj_vSR`wl{#I(BkA2V zBxbjb!E6JK|6@cSl1^^5Xl_%er5`eO0G`H-Y?O>F&KAR4?@@ifEDnY4@IM$q)Jt}e zbiO#ya%6CG>lE#6IEn;;g0x~X5cS6tC&LmAa2g{7T19F`9U3h=&*qK{TyjTR3!MJ* zh34_lVvHB{2zphqUcS%=Nve0T5RG~q>j~;y?o}1uL(9DlCCL@uzi}!SM@T0btRpF> zyszr6e3`R- zsSk7Yh?*O|A!lwW!)zst4nPX1fD`S}Ke_q@m=f1OkJi-TCvq47+O*-;j4>E!FDQ=9 zm*nlSxjZn%DJ}52s^=i*RZx&EL5yLQs1Dl2wh0F4^-tud0}G&pHWsA&9~TVNYF&*5 zS|;gZR9QY&5v`V_WS`9XlaC!;qBk=#Geh%Qtv$1eQt!|fI$FEqwRAniY!~27z0~1o zO}^gY$V^%=pT^6^76!g$c{5mr;5}OQJPdIB{yKc%^N+{#*W@`%T(Nm0(X`EbM_6U@ zb=Y|ks6SSaNoorUR;F3!2q~%hJ4K_Cr;|6LBprx1t2YRSj(9U0-qcXf4CSShf+C|a zYV{$YtdObuM0-h|A)HzPPBga>rQE_H{tKb`MkjT1_8M_=Be^%s*UXI2+oz@%Za$0V zLZ>pfUsz~)XO~SZ)^v6kBm5}M|Lyw7^>F3t>?kGpgGyh!3xqY znK)ZXY@{c{wCYb;MNaFQ>By#4A3<}_v$3gLs1j*r_KBHUW1kult;+1KCEaXpdh7s6 zILJ;RAOW&$QrRi7B8u?HNQC*ZrjdpH6e(Ig(=zO+-n>kbai^(^7ULT?4Vy(e*tH*E zIVne#O`9y9Unq*CQ%&y~71HCVK!Qo1`t>H+hT?zeM!gVU`$|XP0#U+>esMsNO8tkJ zZ6yx?h^XGoHRNRoa|ybNV$+?vFqy$~wl8>Zc5njoHNM|2DXy)ek=A!pL-&tx1iy(W z9`!2!QSm#TZ^C?kGF|quBEBo)J%q~nXodH6{v0dmRpEWZ@-~&QSap$LJ?2w+O?_<~ zM8`#}#UV9|ukyFPsRIp>F*so#HG?RAd?pk!!C|h^%Q7L=${%4(AU!-ON47>Jwk=+m z19p*@4#;D%`4lP5P`~Ued2B~MJDf`_e~DvxK0%Oca21Jqx0dhrZ9Z3SJn#0_xS!t6 z)!4#OP?*@0x3Oh?s_fpT*l|(sP92GlhX#T5omBsKIhuuk5o#7KJYy)xYijn`1Qe$8 zRiN-{BTxvsY9v&{(O94f@lQEIM57{#l-x0*+mRS(ZCH}9UYv{}(sF!#iwC8S>Qraw zol|mjjG7*MLPlStc6{fJSg7=XBfti#O(+6o{SBboop0$ng}fU2MRwu+V@XL4>Lg3* zsZInQSL|ux@#YLoPVFUC4yKKSlIRgPUp|nVW241{#kN{Ggz5AJANq1aW0Y-csE z=q;GMv5m?45%la%h}0k}Z=^1}<1!pw<3(IBU#(eEiU9=zfQgr52rdfUKSqq+Jfv?2 z`z3Cr``<_~3`eKh41=v0qltJbXR+!m8Y_zKUsXRVTqimQS@lH#syViZRXwqxF=m&N zHq4Ufk&J?^T{~?`y(u5#S4~ z&S7=o7eK!~!t6-x1Au5}0T*UR9h{(99rDiV)A@Ox07HckPZ81%Q<$bXopEVzwsAV? z9OmgHo(fQvNb^nTG=k9NblDv?6O`GG31S;0m>|bg*^Eup(}eUa_cm8}>z8}~DNNAY zRJ?)-dOZ?6QsY(fzItg4J29DINcqib`C&MsI<sdV}Ua>U`?Yztc>RJUv2n zpj+B}p6*a@50m+#8nZ`Aj9W`DHi2!<)O^BL?9*)vWM)dF7Ivi3vBuuweL*0d7K4)8 z@l0PVIJ1e#JL=QXW-gOts2}npK9^r#AD_zyzfH{Lwhy|Si?CQEQrgpQmE?#{93JTj z6OxS&1eb%eq0f?+X88ZkEDSo9wdajF`m~YH=dw7CV29w1eX;2<0qK|qp#$J~yVD3n zcpm0J@EjFeZ_yatV@%g5j<1TI^&=2qFHG172`IjMUnQUiAYM;|vWp001 zWD6mIu^=u#O1W1(%I0(OmHkHBu?^BNO3SAPrD8Wpvkp*ZE|A82X()X<(=RMZY3#?2 zm@b@0NpImoL`pV1(Wt$KCz1&dOdKH%{ei!<1I&`~%mwT=&k=AwAyo}`)1Ebi1~qH6 z-zWLnW7Bn2!A>nz2|5<1!^&s|C)HEvvKgElNJ-AO;coO@LeL_;LOD)nqT6Zhx+QCx zmt6)^drI@Zsp@B`TEAKUqEW3Eg!zPJMlRUTDw+L)MgZ(tO0ZZBQ^s)(}p({?rMFv4K4& zSHSJ(_1TRPXzZ|o^xUG=GpuVvF0Iw7OV*=BkOFJX@r7$vZ}!s*cVfTRNaRSVfIa3? z`BE+Me~A~j-0;5Wmxu8(gW_d#{Ae>1$i~6OnqoTF6M3z-ffkb`53M)HJe`~zopt#a-|vx5haWD_83eZtbrdKS(=z)MA8 z)h8CGHLV86Q?c?(NvF=Vh5+7oPuY}V|L0H!O&HRPJb4-O&(axuY+ir#-Ry=u4z*UH zockjgn%y5FJa+=&uoW}DWliPu(PsaWL?_l^PABbvWz85FDcxvIK#_4Ew0NW=c$Yp9 z4s~F@&&d<~JER%lt#IA1S7_hGH-!0q&hplkBuS2dU@a9lH1qxb6~cDLf(Lj*9p;Dp z{p#CWV>OZx&(Sa#zR6Z+YsR~hi(FWt|L7Fc@{K`R`5+g(cNqmBbjqm88t*E(2k%Wv z&Gqut=DjaDRYOYok>$Wuey{bL?U2U`93m}}E#rwyOPnmA}RHY)h28R_R6q5O=xgHDbZX4By=F z4;jFWu{vpr65e~t80+IKQry&6o$5s<#>mVAk%En(Q_h8%CC;dGlYjwKmy&(;>f91A z17cCIF`BOLcnS^#22O|UFIorBa*|D`r%$>BbEK?o8PcseVvSE-nx+Y2%G%y z)yCW^!hyFwE*yA|WHB0BIM`rKK{)WikXSP}i*o6mQwhnSSgrjQ=Z4PB*f}?Y)^LL- zkC|*h_#xrOA$8J+6dT2L$7CIG{YY978pdNP4Z)d>KLkz7a}6=sp6!SmF?3VovI9a5 zTAGpUQ(Jm?>O!Oku2Hz^ddbXSY>I(vtcftWsXYkDuds1!0okP{?G=*b4!|B1quo+YJCwyu$ICcVA9N1t5xQDjKyNxJ_T zx^1Uu(J|@dm-e=bO}r!tb{GBTa`;?ZIWise60#^qJkH|CZ#=97I zAxtPj2PD*uK4BnD^W&|91U4sRts&Bph_I=JG^dg$!{|@t87s$@wEA*th@=%DxoBK? z`cgu88ZJhb%Sb(`ZBmceiV9;3O*14L z&DQTr6F${!aWcU}rE+NHmzAbF0u$s|sa08by+zDzaMM9K@zF2uM}b{)0dudLp>BLL z&Ib&h0aDF_NhMUhwKN;Q z&9j-jIj9(QvD%df_?Bi{MWgUiD(PiSAp5f9oskL}1A7J&;-fzve_giyPsI=7)yr8o=K(o};$r7fxFK=51O?3n* z$YhbJLEPk0s=Y@Yjq;fUvwxaqyt)}P2r023La{W`&Z$n6_{}1*9A&dLQFyngq(lu| z1V@N)eP60odL%N@1#kEohjiQFJuS0P6m<*l(1&* zNbc+vLZkZ|1zW?%01u)^wqrHw+*Bx1&kehly)7}t1lZmY{31DbqXiq)`d2vE3LZn= zSS{icmtsK@>i+FLNkYxTs_{j=t3|2)g1l_McSPRvJ{H=p4M^$!`UFMSrURYlgysv- zlcT%6TOMsm54fevlcZAO+AOYFrK`CzqnK9HqTaQ1?Nk5rfwa7qU2%<7u-TfNFn$cP zW*))#k;&B=*gsTKo(z4naK~xt$j$n#NJ?Xh0gOdPsRANfHj1O51eER8qmQTUYLF~! zR_WSewfvwx!N5o}x%KMlzr|t#5sco#JBVHfm{cLfi5dJGOucbwvHDT`MR)o45|CN1 z{?5ydRdA>GicRA6-L@`&1-h%ttb!GmcTLrl%b!HG;`EtplT_8!8B7F-iw#??it zUz4ECF6!0Ak%LgKdw8nNyR-qj8Zw+e_!Vi!Tj~E)#AVS{z&Vs$C;WM(arrVi%#c`C zRd~z!^H7C1OlnH;DJjL5wU#)BI~aARs!W1 z>pdSDlsnEW8lH#T7OV3U@46H3E)tyC;r~L%GEVis}Eh@yd>eF-} zY9ejA8v2b1&~_WRBRGvct4YLK3>8RL)TKZ$1C+#?5!{7sve z!W4SSW;O{zSd08oU%{@^II38HoM#&KsY(q30KOJEW1~uv>bl;wk_umJQ{F16OV?pj z2d-?(!`FDJ#DtKiiUF>NKVx%}4wLUiYBRp2vT--iK72@g5WdE(epg4JuCMR7r!;(Vw?B-qYgqj$w%SE2H_lSuyrwC3B71~`Ga|Uinm4p@ zptXR!Pww(@%*$Fh>T^;v;V8J!sY@JGolM3K85l2})I zQCaS=4wse6=_p3tLQ{IZg%Rymf=YiC_TQv z3K)$0{t7;W66H4?9cgWBgQ)Xb1BLhJM4s{#c zHo?J-$wnbyWwg)?T^aKb1$ zP%V6-I^h#ZF6)UAKTUv@g(yMOj%LLZFPN!(%1 z&VBo(r5PiRk9rfP1;YgJFQ2A%WY)l**@LNTa(KsN-Ht}Ts9CvIH%sK;jvrJEX=KQ%HNvnES@xGM;l#d&W( zztk~e=cqO+TH+E2o4(CAe6z4E@DA#g=<)x9cCQF_#JqWW_ z4~wwlIHFn?|K}IND4q3~VpYsnfO1d)%Bs%*D6^ckvlXBq2@hC)5d+0Vt9GyT=s7UR zGSxZzL2d;eIF$nq8+a0M81ttzZ~$cC#09MBqZF=Wlu`I{qHVT(n)Tbqn^M!&AdFR` zcrxs9qj(yEZ>1n$b=9^}re%!7kRTeetXq%$B2izLa2OC7zaWP-;!#n8)(`9il6D2r zJS=N2De2$4_lo{{D5%DZjz zq?kTg#%3_^ghDV&UX9NM$e<(~ctTLmB#{*kXlLD?E|UfohX2*}p`!WFRe( zs={w(tZu%F=2QZ8vtYC^?0fz}u}YPBhF$FLT{J-eBz>q5XIjsG8C3=v_DvdQNYhjS zW~zWJy8wd%7B9M38TDdzq4wMIZhFSXq(zS4Fx`5kCp>w&+S>82nT}ZZ{SSz>?bL`> zh+&Ob=Pc=iSP%DySVd9$eG%(nM#uWG5GEkjOJ!;FLafDKN+Q-r*bymGqck-DmzL-O zNJp`+=`P%ARP2LdQ!D54v3*c1puhGrf@0yuBm1!$g&E)3=>Myr*f-(DgJO?H>yAOl zDHOZlEVZOwBekrlt9azrIaY*aAfWH?uf50ABfaDcfikHg<_wVn=Ztcu^%fc57eKbc63OODC? z-xu5rIo7jtMUkJPO)Gd8Tr61h-gj~k5RO*fln*m20qe4#VQitcq(=X1J-3400qbkj zB3r?0|IJpgy+O8uBHidyYz0I5G-%UL*C$lBrT2?0 zk1gdG4m{GGanCA}om4^>NSKJk8w#c7ZB|>x7Zl*{R)FvSRL?Dgp*a)rQF6;zGfZt6 zD7jg;aLbnQn%*+L%9DWie_DHhciZJQzLCuXq@8_k@6BU|b@L-l0!v2Q#Z7DduZo-7 zFL5TA?0?PEutESywvvNtD^cREL)P!UAX~{{dn-9?jn}<-;rFtEgz6MpX40m9UZLgX zV|0%MBa6JA9u*-5(%AUnGj+2sr`a+`8R@klsk8jl1<<8qV+u(8Em=UwF5tbVwk2Bq zuV$!;?p=tZSA*;SsfPbkKhPFg%cYkxKs0*5@Bb{j+7qADjh@rpXoEVF(~uadcD2{^ zuJ$HRGWK7m4gJ<%|M~tpF*VhRhwK6-Q@}$R?XLnQFe7Ib)%5Pjr4$77$R7E9)+0w% zN3LD3JMtr0c(cZa6B(hiRc{_ytfrvz6K+Rs1zqVFt~RrR->FVMFRy2*9;$WC!2aT; zcZ=TQQ ztsXh_HZc+Pe!0Eft*E0D7Ur&;I3_2z%g;#&y%XUD>$FV`L;;DDb`Mr zsI>``K{OcASr1q*-YYoBn(>d3f+ZzZ>Z1dHk$6H;o&l%tIm6*8c`Lj#QTQBjM?ED^ zXSEVJ8R>tDB%N9>`$yOPS#W~CCl%GM`w{xW-}#YnmQfto;a(JO%b@wt6srAJ+b51D z5-UaZFR{{TE#0FwQ`KjplP4XGbn}b**n28%i=>u<=qQLh+?eUs;aI~j$AhB+(K*vB zhjfjBD@vnOzBN@%1`2s7@f%NDn`jGt{_{`NC|rI73qKSgj4Q{Os{^c`fVsMp!r8pA ztl4mQq|&mHBGdMMU#dvTJ9>fYn|8Wyl#i>Vi_tknRs)0u>N(gK%xi$D+QccNxjkDH zof}?c(CX_XuE>7w3^dKtJzi^8Q6EZ5F^ZD@jfP>EOjfhh($*joM%_PBU)8xk-@F6&*u4n0uZGBs@9gLCF)|mHni;+Vcg`^x4h%rqQvt%7vGKgK)tCWyJnjz8jOycDhkUHF-Ekm z8~n>e<3Z2EyF8CLE7s5ZT}ESDlNyiUfclPtj)6_q0Jxx8^(_Sk$ELebzBNPfto_l@ zIs^ZjQUv02+TmY|Nn!Zpbu02X=)uNXYrQ^GWZoE}Ng`ujJua<=R3j|E^0Ul5X?M7@ zTFF!BUyEklT{0x=Mld8^ah{rDBVezWCr}<*Ys|Z|@Hte5=dNxRNT{}E*0Jwu%R&`i z*r*!Q{Q8jkzh|7>zII-HA_Sm(au&xx)lZp;-DL9}G!{1CyP4Z5^NY0WM$wm1u?qs$ zCq52dp5v^&5B5EqiH==nbv_T)awYU6b|L^;>{eN|5^Yh2wg;l^C#o4*MCgP`$SrKH%NK&T!r(F5v8G`3!mi1 zXD6Gv>!{w?Mfj$3YlZ9CgIk#@vV5{p+!f72HZCEQ!j>~Ix3I0!x_cf_!TJ}60j}_N z3HB7N#_>FDUU`POu+#T~r^J6uk*>!4|8_2}dr!@U|7iQyM9Lb!y0597Oe#Xn7TevG z22p@BwF&3--h@-=gkb51^BJXdMC zt$u8vn71uv3&XZ3dXv*uyyqQqfW^IDN?g~jfOSJQ{UCwAt5<^V{S;%gOGHTqBE(oM z8uC3<;Coxe(P^EE0qJcMC*NAcV6rcBTl{&vl^@RdoAj5Y#CgUOqmFs70WpzPDg|mHIv=?fcc9hy)D@--5@?p-ZbZ z9a=jRI#gAY!w!c6N&)(!w&WI98J>m*$f9gD*BaCFMJpi7xW$X4L@T1Oe>YCgUF*M> zScIq%BID)QkBFj(vYc?Y_9;ykW0>)DbGx_xW#Yu_tmOXnAD5;LyzTH}?uwSW8~yjLEyea~ZL}0WN$aEdzG;mvaz$_Rrn*@?E;$Ua z5R|Q@+Tkuty{@tj{a&bBk#vm^;K4UU_b6qi(xq_yjh=}3?m*TO^>66I%6g8D0#B!5 zWyz2t)ug5@(3s&t$H%`xB;&c(_FvoMyPn3ZGEiw@z!q*uAEf4h^2;T0b(+-eknY>T zsoU2j_6}x!;lnv7dZB!_aJ{i>>5bOQRWfuNqSL)bOLVy?&7=k@?=z`^dQkw|CIvE5 zudA#-xG^`vOS7Nmc^cG_?;wFu@c>(YLeR)+K_lu6vpxkoyR6?-!jq%7!{1BxcD?TH zfnOmu?_@NfS*Ov*?TO_QXH{DM@<>{aWnw^?CN6iPhp`^w>I)0ED{C4xgSST zIuy4O?{1R&d3Pc(4!`4CagJz(evg9XB=Qhs?nW!CNH*F#MS40-eKFlR(Te+_$q*mN zA2`L=9QwE7bsa>afj%&zkBS3Q9uzZ7jooH6e%1)Z5T-P1=i$WGy_TZcR8iVbtEML3Za)7HBPCs$apQL7&H z6Bt$%Ojn}>h?$Pk_CCY8RjCRcIHli1!c)p|OIEJ)QR1-N>4_A{fuL@~QWu)tpq$ax zZ+~eoiM0ZA-=~v}voaH40{=!(#M+AWKt^JDL1KBn;+FAGsEqpy{Tpot*>1*8UL7d( z?@RK`WFz{Y)-HBLc}B%rnrJ=vdv^0U97-*MJJeg>7EL1H0rwrr_?z7tw?8jTLU1^K zxhEo~L6DqZJ-J!7j@;Ux(^Bz$Oult|y7DW())PI+icOpR}IbfKf zb)Fe-V)ir1n#eni&elh>Wr-J9Zz@kcw7EfMPy7)ZbzmX_iD4kL9WPxd30@#U$^=sI zH#pdSSSt?$H4dP|U;$aavexRYAIB+W7aNQ9#nM(BFN>QY!;61M|2lROj_YU?g}ld$ zGR31|G5>A9h0U*f#6RI#qEx8;8e(cBH_nTdqeAxF2F_^$PocF+KjzMwrI%X|&K8te zADvE^&U@ER&o@+s(dBtjpq!YCEH?I{>E8C(J2)(PMCMGnDZLIIE9?KBOzNBDX?=+4 zuvA>u$DX6f%O_5F1~JftMB$$3^l{;4R5vqy%O`uvo|d!E&R~AhKW$cBPOM&&-OYC%BRyD(B!kwS6@WsC|Wj78HHlO_1_h8p3=U; z#ba{F>eP^lV=;RI4}Y!41pf6uy(Uo2ALnJIpu{ny4$Y-5W2LLld07}xr_qs6{Hc}V zC%5Ox_ycA8uWEyYgP~~+qDRJ%L@Cz&2+lMy5WCOD^T>R(S|tWvZJfRol1OPb9}~@H zKmiT)BG5`-(1D*RpmQ4fOLe=VD{+$(wywkmJ{>sg)O^c)8U?hmpCUV%oCfQE6=g%qBY`B{OJwcq@6`U z1;U?((Rg<63hYnO>3Q#?FlO{0lMto=LZg(2jnNsw^J_~52PzhQeFDd-3J12>wuImREZwDW~T%eUM=v6t>qS-Q6i z9OAYXFSZy&;nvu1sg*2yeQFtZCYSNCQ>a?8jNeDqN-bkCz7c(^)S;5yM}{7_{-4kT z<#OaqJFHSDB4Z&lk~BtKQx~m%m-3hFO7oX2bVdKZgZZL;2P;p?DUZpv&9hC22u=!h zvBr)na^x8H4mC?_tqV$JsaX&r*pmVDn0Lt$PUw&LVs)ZZPM;8)q$3**FM<@0jy40X zw_m6l@r?2OsC}v3@*A!`uHw{AnPcz0w|F9=aIMr@yZY?Z9Cu}To(A1YVRXmz4{G(x zZZG7DCRD~j8blXbX|&2)ZzP19zI-fbisSGfe$;(HyjTcEF{z%@&jE3z91vw^DW0Pb zh`n)cIF19)pGY_MTIWu0MUtsogJxaD(P+gHv*J*IcIXy~Q7=jHXF_w78N2nBS)5_5 ztkwH<^MJRd1+>u`DlI&SSvU6F>x8FwsW_#nK|F*|$*q?C6^WI2rpdt}O=2Yh7_yjC z+%PzCN~1J47ymqMcMmsND1ffKl~%4Sp~fmpIT7E%Qo?G=dS#}xqOLxz6q~tWNW{mTbn5t_4IZ$FQg$e!qoM+-zm;Br8yDx;iJoAjp} z)hue!^et+trXRt4!iG7PK#IbWc}@enTaX8e)K)iFwO4qV;u}Cr20aaO60`pCGO1Qd zd|GUa+1a&G_d^-dMD*2ce0-{{NYIsNB2Pkh`F+#$i<0Yab2%4;&ILP&gaiBW(akb# z;>W`sb?J62zPPEEa&2?Y zPk$G`Y{%@QPEW%u!Rv6a=Vuh|v6F3;FOn9dI5O*LWB>lw3%C2)@afyq;WC{AeJ!4n zmh0Ovs5_<#Sup@1b%$&92?q*pH-FMB9ujFaYB&N}gV?lfJ}n{)k8fYdX*}04yrz0?rFAcb zu^h~*i7JJ+W^SO;YLu5AS++Zab81+P_#@c*bL{K&5E&zxtioOC<3KO$W}j(Pb%mQp z6~16j?+V99t{i8)P+4W|9>Gx_Q%)RX`{PB?OG$6EWbKJ!?@p)_uE|A#1AyV9;p|(J z*4&*)tq)oVzIQ_(dux2Vf+6FiS&bj_v4tn_XDeaE4wyv~@s62o&YftK-!I_=S|`f; zO}s4GZIo}0&O8t+vFMj0HX}#GnGTP)Xsc&v$w5ihCdsT=QJYFowA;hAwP-88lJ>2g z*=d#^@a>XgZ*Fz9b@?MdXVJSAuT(Dy))S3$rFIP8+p$hL_Vw!*JL#l&)+f~7hW_mZ({v`X?EjV0sO788ub z#uLd4;{$R@4bS9{YIsCDMPiXqzWBpr*>_b3st_)W_`myvLo|fFcM&W^8`%;N13L$a zgn>z`7%f5GcM%Fh0?XF9QjsvA_X#OG+gpg_Pel_vTkIAme?{cfIM8Fy*|zRJ*fc^G zoH7tbf{Ly47fN z16`CSo@Dtl&Jitl>Hfpk!;b{+>0H*0t$(KT`iLkN9A<^f8c5xIH-wp>tU6AJ(3dB+ z0QRv3!e0;LakGDi;Z&dd3KvBzeM|o;{XVxUy75RR05npbI2@ysP*3N%nWD z=u(aN#~+&+LTQlOdY*e`$CwxQZ4Y|qa!|w#r}c-r9Wrlc2?{6C#;2qw!JLOOl>c;4 zx88&pFJ)inwl4nsPsKFkvqrho3^?CzrV(Ot<#$bZX2Q;>H(KsoxE-wotl(i|eGJu> zo5Zj2K4l&x`&}vpWseLbi9?>mO@wrhmNgG`vOGr_Ul5i)ajsn%bZ$knK93Zc(yUo2P#N9vBRi)Ue66z;~dYBRuA=8csp5Q~-N$^r(a@HCu* ze>RoUzu7Z1TVQerA4AoWC?PR;mWV*b^&NLs2`X{zn{9G9$Sw!wr2}fG&Al%J;GQI94egT%UPRKk?BQI^?gqqq{3-mv z-uI>+uTvPSE5H($pklxzfKqLJkuesRN@7ryR;YsC9`#)j!#v2Xy-`MM{y!0&$N8rj2Ka1i z3YM!pfCS!w=vUXXoepMvwp_z*H{Q>-k zyia9Wp_w8;LJi;fy_8*#Lc_V%Eldh<2Cn|Z(yU~YQj1B_%VN6Z_Pe!@JJq}zf_$7J zLmmr8GB~?4nA6d$-}w3Daq9~L8MfosyBwh^woRj0jv}Ft+l}0Y0v|Y=W0V--R$2%3 zQcyJx=+i_=Ej51Uw)7?*_-yM(IfB`tuP57C&p;*dMK{)2g}+#7g}b{Ic5jXiRlSid zNcCo5T5p_vdLyZ&oE>%Py}A1id%*i<$hQalyFD_@`?Z~+?|6;2Gkl>(h68I(nPIG* zVSJAa&yvAzeK-6vMZ>|G6UhPAbaZD}no)aj7k+W}SRJ?Cols_&Df%1cjrgZ_u}kJc zrU(|)W_Z_L&4#~dj1h;#6Hhf|&dks`%D+=5gQ+$>3&jV&)&6%L4dYriRz>jqQh4y4 z*wm|Iu`z_h+dJ^KgM$o=54%tHK#HB zC%$#Q?4i0=VO9BEHR9Ce`uU2C8PGW2jc>Xa=>+VcV}gu^A`Uw4x3ZF^p8eGAX{UtJ)G49#6sLsJak$Exs1zI_ z_K45Pfk{2d#;5kDYt!i~*LA8>iQ=P*4;YBdp84-5|1!zHu*vjqmW=`})+;*Dc-v** z`E+x@x>z16Ho+@hhVI{nfR*vjZHaYS4%e@I%owEoZG=xu3r*=yD^m_~-IBO1z5SNR z=Z<@$3%9oVV;SKSxjO!bS-g)R1)eo)0M+n`>7Ir9*U{3is*hT~rf zeli@d34YwDXsVxbWAJ0)_}79&q+1^Js`8Kg;Xn470{5^nh_;Prx4hbUD(^eE|4>G9 zxD600p^2UF!XC$Dwbc5)F)#$<{JhGQsRO_O>v{cp=An4wzb+fqwO$d5RC6dZa$HYv z|L1>IBao}SboFSwI-}!$09OXqPS%4uet8-mW^*;bIu|%VO_zyJHc#ZIynDOZfmOXH zayR#h5IPj7JNY+Z(_p!W4N&GhOzHj|KgaYJgtCc6vn>(Ys@!>FQ!6J#iP=$QoqX+( zR3(c^e7Uo;h7XUNHoz0f<#YI`J6iV;o|o(7$l!nIkF=4pr!9Gy{-Ly0l(I-cjJ28fl5!*yzRo3iedxLXn>*$fwoSsON0Cw-D%5K?DQ@_Q~ z8Wr1UE%sY>TN|IEt@WhG8`)7;eI3BLqb4{#=D3UF6l4S=!LC3*?|XZ*&YX*V9r_H? z(F!uFd_o)*eNAPcrA*2OF@wH(UFwZ0Vo_QV-?57rND(?vFnF%mT@)>L!{_!ygs&R? zthcdSf9pFgeMa#1Y-&l&vFgjp!Y|d-bivmK{x>ET{2-P~P5JE|+v z*UwYJAEgR7DMct4(#lX)bdfhrYrZol*+PysVqzi=XI@Ob)cBokg@LX%F0Mf>2-kC0 zc`;`X4n#H>aPrN#xJnedTa7(aZXMmmBWj0 zyeL={dGXdsw>uG6j-$YGXXA{aMaES_C*#IKWDvveqB2p7%L?z6wuM_0;b#+gOKa=+ zJm6!Qtp9Ij3Z!P7H{pic^ud_^H1B;@J%)&tT9W+5VdQMRl9)J#mFCOMl#)V z0POQ%TKVh=AF_OxD&Kpm@RDT$fxrv#`(3?Ye5Cx$qXl@db;&&pgiD*W2vXjw`Ou~~n& z75?xcllwREbe|y}QJm2dfD5K*(HLc};WCC`O)=j13mp9seUgNmF_dt@cmGHA+_{P$ zspJRlj`L~)mCV3dQ|Td#dXG8X6(Bl?%zmc4%cc%rHE+Q0!q`L>z(${4*aqd7l2HVd zjADDZNy#WKG`2&_jZtk!H8YO#@8za@ZxkyIq!W7=BTvvGyOeZd{a2IH37cN+o{!55 z|0eShYmPf*I6a<*mG)!=G79%b=P?;hnGBC{V*kGiV@e*hT_(fh+wLjZZnQPOERGgc z-qTIRm6@rj@KQmasrZ!so|+26e44qw9S=V>o)g#c2$JGvs?al<(UctYLo4xy~3xfs&e8 zWL>_!p^lC#e0zcgo{=-?MW63`K<$(wWdzSIY&ALA-~vx|z&T#y{x^u^ejFyH_WwrHe!qT&){8UG?7Mbp~ zQT$0&#IxF@bF(xnEw!+&Sla)5q0jgH)+yh5WwKJ}!-~Rqu5g&NV9?vIV^fwckv*o; zrAsH7L0{an=4*`6>clIPzm?^=qgAFC%+$8OeXG1FZ1(L#FsrcQP@l$%P0cT7;cDSB z`F^??ee$IAQIXK%vdt_X6@K|}v^X`R_v-JqUv|vO{zg!1bWc%BG@Z|w6PpWP2o|6u z=NVZqb5H|zJBV3KxV1dokrC<-`lBL$^nKqMCpvA z6GVG7&g3mptiMi@567wO9xE3mGRh?BTTC7)XSvi!74AtNE7RH3e3*zzu*7dZ)0o{A zZW>kiX1KL0d~)Qh_E<+(rN@&h?Dxaj}o6|ex&6YNgoq8h6bqRH9@J3*wmn+-%pF*(SuHj zA&HYcAUHr3P;LEt0Yc~<&VJTEZYSVxC~x1MhG*H+(JHeJ49~WC)kJ4m<%}eZakw&! z)^#Ce2(e+K&VudQ(52Vame0Wlip4+W=fwB+@ z$k#Y}q}p$vH_Jr~QgHE$SbE3+-A&``FV7F1S#4d0{g48MVf+Ar&xN;NF>I%2)6>~z#n$jU83a05=9*h={qx(e;O9|f7V@InT6hr=n<|>Z zCyG{{DWNpB5AttQHe+Z1A){j$d9CaJfCXj+z{_XP_gYA~;*7c0MR7$HPuSV;B4A!$ zH(D4B!GY@ed(GSvOwx{(X3QUB5N2v&LDWCmchJ+YS*BuMuCWkhh5}fG;+n`*>d6)P zQ!u+c=84=!65ol?H&A0^u?c(l2a<__t(pr!;j8V+fHn750&E8v-K%8QYSpa4#{C>V zl4aH=t64)+JZ?NBQwEO_zXeA`j#Kkj4Q9;CS%4kzP$OY%LeS}`EumsQ8ZRF z7Z8ekwtJ2W0KnjjYC7@jHRQ)QclwiYQ!W6f4~eF8yqK~9cY8Tqh*vL}JsJ^i3ZR0! zZmFYcZekLqtpYUPzF)eqj}kvGUARhhp^113=;U?-9y(9)G{DQFBNt0_TsrctLv}}i zx;$Ab{XiW)QonqUG{Gv9NMb-;-BFM7>!Lf{KA7I6l>7HhbqRDzEG6a4R%-RGva{-^s;`g4qvc2$s1x ziEC_nym$Ry|KI9=x<~!nK79QrJpWVwU++=>q4%%92D6eYJ1q=rWl1N3lSQFZsSmn?$s1

      *!R#7qfg5Z;JI{nKm0{N85$jVD5I-Z+S3&~(A(Fr- z8;8Lo>q7Ap%O+xDnR=KUEuCzXO^cRJGs+NC6g8I3SX(+n^mwE#)X%8MepN(>EOXh& zSdI)p^BV(fB~6CS%-g{n!M3cuUSeLM#EB$mX3{;PLt2E(js<6M|4GbbVVRmdbNHx zUtg}(m+SN;s4unpa)Z7s)0b8Ha;v(mxl=Cu#n#lTtK2oD?nHq>{$gv^=^O6uO5Lqb z-GLy~Uu?~W)ZNC^-TkS%O{u$wQg@qEcUx0;+fsK;skd1v%nao(8UDj<7oO_zM-FSbUc%KA>!GWDJCCiR^=btimg`DAT6PyJ@LA)jmEWB8U+Uhrgbl|7|K^O0g?=eh+or z?wOWMsFZl&$(RI#+7Vcu7!G+ks$yR6(|hhu@D6s5FmUp2n$ zRUeLaVr6Q$|CjnU7WH2ri1CDRDc!i)$QE;}FM!lpW5vd7_vwTvmniQ1EA5KkYh$}u zsRoKtwF;IJr?JKUu2AmcMJ?Leqdc0ekuYz%`STLmYkDqK&#K1Ji|K5Im3f76utu5{ z4_+9Kcfu>YP4>U@3=i&&AT$PcN90&qP-D&0wLz-+{vB$A(YSaKK6b3gKNV>j&dLZ^ zIT`bA-6uih)y8-_e=&3T!Q_ERUl+C4T;Xuo9*e;Ijiq@imP0;~werHRoeZ7{3v=_g z5xfkwpmSd_lM9;dHEX-G--L)xAG$8+wng*wv*8 zF;68O)8qR^yM_-lzT)WOwuvmG@kZHcV7@FV11}SNwb#0i?Zvol+=tFLR`NmKm5w$p zn+$cOeZQc`=)_MZ4ic3s7w6*`X654QAfd644dycbr9tZP8?$dsujeeI$I|rNF-bNE5gq^Yh+S7u zSF%c9Zk3BsTC2-icG|LDm!wkGeaW(Fbs;zC%QCqbrPt`Pt~+g6>ZmMb%}bVbjV|O` zeYs99GNwaCGidfz)(=DiTUw;YwmiM;Gkf-VWvOc8d#~92Ez$*QqNKE3o)Rm@S)&Eb zl#T(3jO97c%GGEmTn05UJg{;WNV7Kr6yOdS1kpb+$fjghZ)dEU}Y(>aN60k$JJQxjga&il{b9UW(K zARmGbZh&$cm70ODd$L}H;xW$1+6Bnx7NS>tGGOFXX0;GD+fI{XI+rbCw->TN*9DB~ z^NTT5lyuQos)3EsTDZ4x`-C=a0Tpy8wDlFX@PnV~<1PbPw{#*(b5Wm%yI7h{B# zJjYSLQr-%=C+w6{VkE(FKgr2_-xL4Y>cqbl{KSc$Gd}*3m0g!Q`rjw7)zLrsTKD&V zu5U6Jx1ajXm)E`POB!9Du#{^0ekzRmR$N3z0$r>an=>choNtI+)SvhTBo`eVm&q+0?qJ--6Nbfx!SzVlhO+@4-`H%YnkOg?8ol z$*K4ir|eO|KjD-+3?L>nA@XNYW#a31he3f0yLu*jH&Bw#o?+L{-cdR(!MA@Kx zw4BY?N^>>cVhEVxK4<&z4sc3_NAd#=nLIRV@x$N(;<<6jktz&?zh_2}(_5duzCce>0HZBDyhaO*Auyugkr$Fh$yb{@G}m)2T#X}8Pz`1 z34@v4+&wpC!aOu-!n{jcFn>%en2-PEK{3CjTotS6%TjioMDIJj5p!G{G1DV_sa@Jy z<|H^@91Rokvan4W`9!Xo0Tt)CNzX$fv`sX5(e6Hm`L%dh_8;~{{w(xc-63EJxN$6E zkFufC`u#grH*~B0?YQ4X%&RwJ*;m2A2@YDCS8X-Es7Q|f`H8*L=T}>wJ6(Dq@e~Ex z^T;U0r0SelZJpI`8LU6q8t`V4gS>815`8O^$==a#D@3bJZvlgh92pJrgbplPusFG! zs{VfX@~V*OeU#1`o>!i49Zb5(CFCr|c=elgEJDC`Ys)dRtX(*C=%MG$rd`Kjg09lwN8b_$Dcyd-s-#V;&SW|tKoD7mK=(8p%o&j}b;@fk?2sRyQB!bHJ*D{~s{t8CY^^6cIg3xqjOa%yaAg~u*rC9{RE_^+JV2@DDp-G$p{;3RbpP4-awrw{C+{V`p^ zx!pmJ&{Q}xR7ezBqvtXaEaZ7O=Tspk6b{>KRs0YEcHc0=>TA*o+jLK4BZGxgJrU2> zIK|dI-k%!D^IlIS*BiIOq! z}wi6o~VmW^Z57myO+x?5R1sj7a2As#F z-90pvK>Nq!Q0c;fs0{??^wB*^PlItOx>urSv&&j?ka%uT<`nB`c$Kjdvi>Emjq?kv zXv43?$(vRA42kwi{{lDz4Gy-(0mF2pU8K8KiwLZFxSxk`e1a!}o{;u~?g}@ZptIP0 zjas=1^m^+^g|C-!S&DhD_2~3JW5tM_Z>RO3x|J1zg0`qxf0a`8i0-jI&wYD@MWAwp zby5euEyeTj3_gbITsfia@Gb6)l@~}R6oOc3jY9>@RGvBAd8}d5-d)zVM`b|}Pcf44 zG+ZDnY_Da#B>tv7k+byUlp{He_|XYEj;J`r2BJFYog?^h6`14T>&>DK)X>C!863zr z@;S;o28fSs#}xljY#NS|2?klXg*T|&SpRq>$3gI#+}ckAnmPv4L-!CNOHDabQZz$( zG)K1HnHBR*ca!pnq*TEjx`A{M;LzMYH2iW#*50g&&O~sn(|T+nhmp`x8YBm=6-j@k zr!?CYS0CAG=P$U<-uW>MtcWkok`c75*U>K5I0vukF3&eFgEW)r*<}Sb4-%qeJVZ(O z<=eyU?(m68D@O&awk+|{sZOPQYHoKOCvNs2z($nS7jU9Z;fp2fHlDl5aU;Kj{2ZD3 zFT=j}xe&x#*0(4avc9t~a5!$mir10t2+cB9oLZ;6+b!`aH7f;N#0cO$H>);%(Ndq- zhq2wfSqTDS$EePadTpeInUrwZ3)o@e$sK0IMGV)9eB+?)W?&HLvJ^yg2I_3GB`wQ8 z&29r{sMl_D)o1~jF1W76`HcF9$}8rLfF#j-MC84jz4OpLnG2r8g-#klZkm7of1Dv_XR-(EF=obgHcZ z?CW$j+~P##E%F&aGzDWR)T?gPd`={(FzPOTk%1w~T@5@}5TSMNdPW7Gp~s?iN3FNy zp$$ba-w97cv0~56ppq*DQHT*UPD;}T=`D>bE_;+gnv+LlQ9(^&B?NjLtj4n@f$>b+W&n2oCAFzp}_i=y)~rIl|X=^3OJ< zoOeWqrDTTrxuQZW7FqH~L`xHOHSGF!L~%T%>VX161Jn8&%}#%v2pz%$RgLx9VU~22 z(}+*0auML(6CEgyIZK@I;>Dz`EX|}XJRQA&Giv6tRw~$tWKKsju6+O%# z6C!6J*|4HI87!xSGh_rYy$W^F23#(F2yxqg3MdZ$@ylf`77 z0MG)AL|*2A)9_;OoJt8;)lGydBw+==ord<(KoWQq{t5h#V&y9!YvoXIQHFKos2o!E zST}(6Q^ErBksjcUIc9wJz6_7I*y$Ns|Ks!zym6f}(IMJd_$m*6LjrwjMk_EknEp^RpXcfuD2 zN=1DPLsL-^_)F+W6&@ZBwaBT@_V9?~EZzR}@?ybDusaR73fmO_vm{P|CBkQ>Xy;I) zgrbx7l;Q0d%z4d{xGxrZPD+2NSLv#M$Tv{=l`7oq5}dblYpSsn6|xCeF!6w8apn;s zI9SkFmWQ+Nb8yNz`lPXIZCReRZ6Um0C|~Tsxa0Ef%_sxkGT9LvC{*2G0YmKHT~QzT zvl3-v7!tJtYQ_)%Wm4un_bdT-7&T%fNaFX#&n zHyKf0c3KylI+gJ)VRyrA5_MiUt)tC~9oEl3bvHZZ5$nfXDZ`l8U?`Qg#vfL6=W|Y%$5x7-H66G}{WxYwPka=r~RbtNDjHdm% zn18cE3`6~FTn8zQ0x6-;@Tfx`}WwbjfE zu?Yw_=L^wQV?D$Ro6K?(@Lc*g*ZL7J1C*jnNnF;Q>1oW8OkbO4jR+>0jl5bRqja-3 z^k_Ef%heK~QVdr5Y4*&tW?!zGXcCR>8_q!DX5!tbW_B5!c1eAe{>Oo;NUmRc^iFi1(%!i9wG?s@F>O?n`EDBMISuL3NrQ;?yoW4q4OBf z!+#h+){e`dmFLsy^@$0IlY9oVlBcTYyPNmMN4 zqZRir)={C-6#7KK+K2g+><{s6g!@#11IBxn;dM(f$%OXr#SRfEc=zF|56Lc{LEz8d zAxCW4d4Z~{9^lN_o2{Y}rr1xRIk0X76U%y9^N-le4Gc5AwLn+E2)6`hFSnI@>uw z_EF^1S35XX1V5#M!?K_`t`)he^->_j8Ao_=s9tSFV^V>TkAsXhtK((HwzI>kwpK6hvfqzGE2qtR`Guzv zt6!5dztOpx(;>9LcA1i0OkcG%9qKz(pW z9OFOhG5)F^ERvQBT8D448Pgmh+^TNM$9akD-Cu-{V(+O&0s@&(p1igy7|fHT^WFv*}5uhpoI_ z1Ex*m+v;jOX=f@`5tRIpV|u$iOH~91^+Q(lhT>pKK#lQ)?fw7+e3jNNe^~N~3wS}H zY2JVpd<$&XG-glB86!g>M_>wtb>xBK4h|kgBXT z>YPN}2AV8%k9^s#zHIB~%PL|$R9QFkpYnU;c~HJk_b>D}qulMAjWsJ2eyZ3J!}qHs z!?==tv9Gnq=R2R&B{XnF2Oc(Aajr4TZB*tq4kY2=SoSimjr1&3T)S9mvdDk<88l?q|({pXX#cA=1QHMgsR*frhGBpcu=)B z%r*I?UC4I%cygOA@i^Di$13~d|Jj2P@GxTZetw?FQ+KgPIHV`F*d)Y&Ly`N-O%aj!KVQeF5PS2awHvsB7R9(`mk zXt0JX7tfXL^>*>=?Ac$-HLdtV3hL0fN%noc-Hdg*8NOE5LmF6q*6v>=SBmNV`PWbA z?*Ei)Kc7e3{!i8RVO;z9e3f1JjQ$J1Y^WZ-OSpDV%h`hL8QjHo<{GXnFp3B8*!QQD zdp(gZ&$(+dunFrli?HZ1wYkTnlZJ6xB%f3 zCxiKorI}MpGDCyIClWzVV`*P1&l1+|@{O0oe8oxXF{fggyey&NI9OL-S;ddiHliwzOyZE*93tqa((aKNu z1I-M2UZlISAKWGjb9AKka=jlkK9)$-us*-ZRl2D610{Xa`+;l?4Ad^`+7ms{t0eIu{ca66L1;<| zU*RefhB>Z_eZiRHo}0KSm-cVK7+>&Moq+EOA^cW)Ee@yYd%#u9wiGghtK{EB!o)JK zbzRS716Zn(>^+(!$>O4Nx6gtAS=_wTQA{)x^W+_uBReBFxn8}X3;%R{SZKpOAh^J&E@N-EP0Y7Wo}NT^k3y( zyr^+|3iUj0PyQBr^1G{APGXkJ)r80EgYZB3c(dx@NUn5%#?eAtKwd$fG{ohwlf}37 z#Qb}EAlIpGJ(L%7?f9LHPq{tMMQMX8ljXKvI<96ga=AjGsb0LcMGxrTxT*n74cKq& z41;@SSTj)9c^lWB8E&;R9D1)uSAK41__5BQcZ&9l?FoxD98%-)Bv%D?jdS!)GMxlH zI$Ot-3*3abQn6jm>$FZf{%yOKJ9I6*F@3=9X1VTW@6Y!^U zYM$_!p4iDXfjVj1nS zzGzq4*+n~R*pH?`c|6QZ6oVRvki*k(KTneDPb8@p1pFCZ*wsG>HUApFj47KOBlumy zZ$7`3{I>CXg`Z>UCPx9kB7P6>dzqihx5;r4zaoA&@%t&iXZgL!Z^X1sjw$@+^IOU9 zZhl+%9pKl_ukJFg{Cb_oS0Cm4n8x2n9tB@C6En-w(Tg}~P56^l`&-3OZ9%eyGhr8A zM8Hxx){~64pw4{Fy^ltOZZ;LuTeG~8J8FKlHKT;YD+=^SYZ6cP?XDYMb7aZM?F7xD!Sa6YfJMc z{D~vlf<@K?59-FNZnK|O8kKoQ@tE-6PueG~IynmaipLV$r+6$j4hCl5WA77HRV)s`k0m$BF7A?>h$L)L|?ElE#IJZPiKF1{t%`8LtVPGnZ+` ztI$JuPV}`!&+?Qt!|Q{gT{NLoe~jMd8ef`Ar$(QMX`^3vh8^O8?%_!krYDYIOABJ! z=F~Q5rNV4EjNc|sCX|S3=4kU9`C{(5D>yVN@nsMo0f+kVYP2Z15j>L17;l_)-Ul=k zddxrujyj1MJkPz~f@c9zN?cLs_u^tT$Jid7=j|8_&mpT>`B@d72B(w7c_J-w8T(9U zBQmS#IA!7>s@>0rJcVtQfw|W6e-e?TyJIwFVl9Qufy%j7E3ZU))e?Y}1P24hMt@ML za6;@Q*t@VRGW|ruqLCRY-G*qSTyFf_TqQT^eZbni6Oh;Z(7Fxam&i;x zLWDNrOL0Q&kGR*6qRergizU1T`fm=+M@EN_CvE`gXMafcGYcAPyiY$)$UsUVS|jM zxEmIyY(~$qe;69VOaVWz+h7~JQ2+?e^l$RT5jCeU9Zf5T(Q>tLruJAO z#{&Tx3j8PhiB)br@GFJ?v{0Az50&=9!Py}W)&-brK5IAifx5YFJ} zgmBqd8{M?9=F7$)rH0FCV;ecB6wVpbjc$$!y6Ljf4VY1*n=U~&T`6=!6udcOtbYv? zd=t0vO{d_SvBt_V6s{1?p33UER;|*3aCdy1s#^oRsNscCHddhL@j$hKiLSJ%)?%(YgDQ{VGFj|?%gKvjl&EmBTv3uWipZEa4ymY#Do^k+qa#s{aA& zGvk4=wy0UpJ7Y@parq{y2j>Z6OC#k=gi^r#b%XUyh`Mw%zcQwF9*ya3G;dmz&h>2~(@JjgCFne1jnp42XJCpV^@eVyD#bWwMyd-)o$Ho#kzE#h9mVWEwhel}%W zF%WrrY2salr`TD84ky`=D| zd=71-U)}ijH8Y}yUC)X&3MR0iT!S(U^~E%0_6!9fAl~eNXxlms1x1ExyJ;RHMfbNf z41NG6uMFoNX>?Bvo-AnI2EpF@f=lMAf;$$Sw%UFx)BvGDlzkw(MmI58a<(qnZu0Gz z0tmFH)q~UNy$S2GVA| zD2V;^9ZWWZZ3Y>Lgd{0Xm8S54aGbjF0je8{g@pnc#9<&>(Gab>(`tE=b(O(R{8&MT ztylVEA*JTzp;{7X_1}fxqI*P&Y3A;X`6V_Sh`qzo} z`g|#*&DxC6Sst&H$29$9&mEWYhIrP0QPSe5e}kkNrBi8DWlw`d>oF@HidJkyc8>2r z0%Z}jJt{W`P`g64##G8j;#2V5$q4qgsG~}#-qY}mv{MUbr_vfuKrub%5OpqE7GF4MnHu}qX+(w&6ANrcuR39R^ypqe09gNMUELVP?U z9KZ53rEKi4lpIyc4Z4&cQi|b{vp;@9Rm-FP_0fuZVD|dxQDiE~jEZ%pe=YtG4TO>? z9n@`P-~iBT*5NyE@O^+%r$}&*2QS2jC|XU`PV7da)h>=L%$OrO8;^OVxwwYPRvz<8 z^TcV`anUbdp9tL}Gl~$mAv(@7p9d5P1yZ*m^m7Bl-OxU%sFT=fb@wRzKz%>nAc$P# z#TVjElG-q&LtP}`vZMV*%c)H~l*JsXHe&qBF-z4}Q)%p$nlLx8&X>B-R0KKxii))V z6ugE~U3Rs^dczOw#%{PLrGNRc+ z=horA(-oB<0+YlO2wLK&QZ-B`RD~XNA7}RJa-onX8cId+yxtVDnsUydz@0G{?ah>y z;{N{#w<4vbh*UEw&T%JGPI!9;x{Suc+*37!Bp5|fmMt)iNLfjplXQ(oMepF>Pi+4# zlOuN@B@?Ciozyn}WN=wHUJ<-L9M2C{hvRdD1=ZH4ek1J3r2fDkA5;1RTg7b$Q`92D zbaS@L%DRzgQ`loZ`*b2)7cb(Ry*6V7dJ~=2Ge1@EB;0Jt0J>_N4L^J>{B8RgEk+U3 z$`kF?izKPSAj0!qfX$9NTv-xz|N^r9{0P8VM9v9g;*yLT7-WoDY<(f&j~wKOLjyjlSudtm6UWqw%X42KTr}2^^m!& z0O0+zF^T_s4Fi-<;6@csqcy83d~37QVdgf61{%R;G2?i>;{me-#ZBT?PkWSd!jeAg zxU}S|PG`qDG4s3vGFXDEo#Bb7Gh&6eva)`PD4VX$0H0L2QyT=U;O-~&5DMR!R-G&T zYqBIP*d5BM4kfKRwD~b99US~}I6fr!xp4f<&?mqay=QKBOqX;_w%X42XBnVye3&QF z#!WxTe{3gzN+;h)s`@KbBXdmuuvY&t^d$CJD(kbJ7a?wS2NReu%>2t-7!RT^N}8gD5qpmbk6d{8Pf#sU_Y+BZBpkwz!w9 zJN@#OK#dB9PiIWBtv}O{j$Z(<5HO{z+=VSfPLz986Bf2C?%|50MI6=e$LuN(Shwx^e&W$0ff4xm&7QKh zsEFi3&IwH&Ueoy}K0u26=?4n`pecy3C$Dxh>sz164pya~$@W->FT)T|+vuGE1e^H> zqYFWsabJt4;SGvX`Z^=S@8XC_OnSoac6u5FE=4d}jSlEhRrT?XrRGhEm_JStsFmTy zqq!YJzzMsW+nuBKm=m8i<A2MYeu__?>w0mhd~Bp#jiIGdQ-yvz{JR(ODu2_4AI} zsYB1#exA~FtF0cb&Ow`B94tbhK?k7hh!qr`VwL;X3zII&()1FSg3ynyXLk*W^YV@} zsMX)uvDN4l-XMfQ+!HxRkd*%zN8=x>fwMW8+AnUEaR?2#@DYTE&Uwc5&gc!Jox&m% zA24Yo>2$W7<&51eF#N6pDVULI{EwQof*|$;qK{uEk6W(czx9J}4swJamsD^P?~nTL zfg~aNU=-p&>9K3Jcaq_Kk7jtMA2aO(rs8TFgJqLT@)YF&8;#tm{>!1(jNGs8g(5d2 zqv>cglBfRX^IsoFqLBi1A6F^mh!l;8ri^K)lp~B8*{$9;ssB6F8=bO^`&eW?|CNSd zq?|jUty?1j?i`+m%b7?NG<$9$`*pL0M9@}GV&Iue%5ZGVDFVaPSm*z4fY52iDwh%4 z9}mCQg{eiR*iW4zhq7MAZa;IyDb4iEIfq3gCFhHz5tyf84NumNEdzQw&E7JW{$Stw z_zbRW(x-Qwom*|1lF;hf1^}o$9cR{~bkL))~-ndLQX3rhp=NksK6K_xkwRv2^@0^KjgwqC2kSg($Q_nx!RBR43zI*k{ zPd&YhLXaamr=G3!1COdPLYpV%VBn2}|C2v}Rc zMPZLik#Y)A=MWvQz!W%TVewzctS^w=j5NtEwI^U@-p*M>o$+S!UdJxjB1sclBpVLq z+sE@k>XqOKx^ZZwTRSgDKTg^9uJSg&oEcN)(+P)O7jkDhr-)bixTnmN5~F63Gy%x_ zn|v$@L?c)8LhP07o|{Lyd!D#d&V{283>Xo4EiH(UPkO#I+4Hrk=TDg3eFjTVrV){G zKw2U9I`o0v|KJQWvd!*$_HDZF!EuIaU?8zYWgeQ?A{iwN!dZ}AXBy^29!=GZfVB^% zq@mV6Mr%dBh;%Bdo(G@i(y}qOV&>7EjIjo+A!rS@S`#VKax@4XBhC~F;xRp z@4xF4;0f|o1CPL&UYbTkbt*ERjE29>sMyUGC|^x^FV4+GxjJbts1Qi+XsOR}JXA-x z&>~?wydCO@MY?FK-lH58BYPBQ|NGWK8YoneW!MCCt@Ya}Hj1YqpLfZQ=}qT-cq#~l+uN}f z4Zrj8|87aj%=TWA2N;bWOLDeffKpxyPzqn$UXr!EVoAQSmhL^SfTR~DznbEs3Q%N8 zeo3vY&14d2oc#6VlB|%`rJ~SmkwH#uk!-Rg#pk(HIaXzq1}LCBIhiGyCz#=}4dp!;{KhS!ViLjY~{j5hRIbc2WhaT%uDoJdS zPkqEeE zKe9m}3qthQAz;zGmUl*{Rad|UJxL?P#1_c{y_?t~rGz^(2r94EX`n_AgSBW87~ygI zBr%jDmoCVfL@^Cbrg>CK)s*FyCMj&jn^CpnbW@f=N%H^Hy?uOC)wTaWNro`M$OH`% zgaRrm7PL{Q0zn9bNl*+VU=kF8`h+R9SA-eBY9Kg?G8~Vky<)W&TiV)|+omn{BE}Xq z0Zf7*0Y$}1DCf}XIW59pGmJA>RDwlk?JE?>eAM5g9Q$iI?8>y=3|difml%WnG2M}zDfZKbJoMlvJ|Ri6@*{(@<_NcO&-*zI{;zKtQ)RsS01Bx zk>{l5*kUIQn;Jh+UWMG0S8<&o#NfRSKX65vzC0&epMbyGl~oiM+PH2>l*}}N=y_nG zWyM?lG^w@FIZbNPzXDZ-%GlDq6l&I;Zn}|vN!zs)HA~fWw!lhaik%R)ocBzj4HU8~ zH#_aWcwZkER!-9)t=AfbP-N(*+PI4RIgPO1l6ajeb;ipZ-G5-;#TOzZTy>N z?eXR4-)0aPS}LpMK?Eti?n^9JJUDIy)W%J9?MLfz%{rvM#-};ZBoK(a<}9-wDu?jB z=_i;pjLaqn5p&wpUQX6?rCboD65*gZFViO!MlZ_5`zrs7hniEJ5+)m$KHJ8{upkq& zQ0!UPJscCnNL=Aam!}J16p!v{$Q#G3p=J;RHAjuE<|#<^)Yl-QHW-GnnuxUb}gFVceX`b_D>$-pFy z2QnbMUf!TUDiZ;{2=nh=HQ)zF1o)XMEqxP6jC!1t+#+rhr~jf<5PZd2FLqMPyyj@7 zSyn=Y{i7AuJ)tX%)+QBGTfKNACRV8VAa8gVw!}_v*c09V?G^44qjXX==#83t*(=@V zw^b=i$a-$7^eS7xgC>04(q4v!2z`$m?NY0uwZJ&T|KmiyC<)duLF&*;iLell+IF?j zOaT|gl&QH>aJSpTBu0LlqlDfjy zz!*pMpu1!!Uc>_Fk>xS9lhdw0wZ=QR$Ep-Uv+X@nsR}i4&*pw{yNY4U@q~UzM-y{ z=YXp@x5`yBzsmLST~)3fw^h0BxxLCYjo+@+4*w-3clddBKT^)Fc$cN!si{4pKHl0s zF*vUIF26qmptE2`@GcF^v7r2ZFvM@hA&kwxNBP*~Kt3J^z^h==12-jdAO5mUd0lJ? zvPWbS3@s>8ox{x|1?d9ZaobV2xj385S0h&I*#wY-{;X~}1{a8TiPV+Wemp~Fqbss* z$*`sj4i|~1MZN!!=CSh*hW$H>OC*=&ts+vUSogcFtI#Ti{oCsNH7?xmuCnHN9eZMm z_}F>Z0H_U6gujYoOA3?~hujnCH%X!4PHqC8M zellEfj)%*JkR$ycXKbe*+#t-4k z#)}2#*94-p`+>Na#lHUQBe9g|e(WZDvf&yP;A zYFD3h0lc{+&APrlwEbf8fYh{yzzH5ku8{RBWxEoLxbVD#S@U)V`WaGa`jv=3{fA?h zfn1G4({jqP`~^X#3==J=K#KkjMM=@Cc2+ykqdq^OoC3{HZ-Eu65*1yTm8JLFOvVtbsq^oIik?YQnKF)jyq|DU z15`8uG%e6Y!b{xY8$9(>jCaoz{B5SBLw(8G-)0K_Ha+Y8VtLenP?AyrO#W?w`|+$9 zP7rU;=n}2bOEi3Le2IP%WQkU1Ep-R3kwQH~6V|u_BW-^T7z!ooe=mpLNyaHU<%V%3 z9$$rkF$0N}ED;S&56arjZ;;c}Ci$vCftsG?D-GkVvJF1oxp8lojrZ1#$Js*VcZ7t4 zHDmodjrEC)2?c6h4vY~gykSvN>Cts8WS7csUZ1cQWd?j{F5GgDe&So1owm^Tmj4(z z6y-V|N_wf%&!WRZz@t!{#tAsRBLVv!k*S7=_dTGA*x`+^0<+%txSG+nA4PtjqWff+ zc!!k~TSobtBf;SjlJBy5JZAOy9(qc4;=~nnS_kBiNe5<{4m63VjTIDw$}IKS{qk@F zhF%>?0t8vB_8m8DAFAQe_CrG}?Eh1-uHRZ4JRX)IC z6c{la{DYeWOX}oh@>ZR7`QCTTx*Xu(JH zi~^+cP5~$tV3?3^`)&bUZN+zk+zy_mhp3W-c$k+ZCte<5$skNR=sl+=mzbV5vN4ui zVz>J5_he>?9aa7?}; z8UA$8<*WR@P=Nn{?EjDOHJVCgaYi#qRoua4gv6t-y;lGq@tmLRS#q8n97w5KpdMWd zDeLQ43)rqEy9wbUI>E2PLBMnJ?}9GylP&aE*QeLMp8|pOu!@d0ds6m0^2$6x`L^b@ z5ZbU$BAq0Btyry>^SS>}4!T`NmNoCNuW||;sOfnjthV#Mcv4=MNqJW*nxf_?X5(B$3Ko#GF-n}dWJr&k*>9JKI)w1 zW_8#cqVhdqkIrJuSp0`&2wC$E1s~HnxuFmJ`ptpX-|F~o5C{=<4vYpuINPpXZ;Rvm zop!sk=e4px#68#FV!c5MOWE{-o5E#JhUaY#&pR3}Qdzm~z`10{I;w8@Px?FWs8yu6 z>15rh3g#s13Kwl&xX$-HnUSq|o1k!O!WwH(xNL)sD{IlltiP~@ zoLp!5H~XINBU%g-=&`4dvw7`E&iV_RSJ?(R#RfNJ&3F4M?$`7u59snZ)e2SKAy+4R zv+}&Yit&6e{|;Ht@c2x_h*1#TUbYmdt1#Dg+Fm|Jq>i(GXu;WD_QbZALtShy4bJwm z8$v6*Nr9=BziOdHqT!V0adI;- zS`IRSE6P`a2X$He=3vAWt7qg{QT0j?p@^1|AY0#)5&VVyRiPS!kgBr$j|ci%MVp&M z-{Q!CF+X|Vi36F0Lzc{< z_j=f{ij7wOrV{n1VRVJ@>`2ZQ>X$LC^Hr8I9H^dMD(hgNH>tOs2wK*#k#N^9H9KiW zRI)S+j`g;>MMSswlGFbCn8~Qo){&Ii@(oXZ71`V|#3udmvxua8XdOLFjHDD2)G>7b z*H{&zR7f!en!65vG$)$c58Wv%vO}w|^Q4!S$@Zy(nbJiT*06JaVQp7{>TUS3__wBY z^lxqUg-C1A8!I#89_I;=p%_D}h|5z^rAqwY_Zi6-$NzoT1fz)OR;S>KGsgen5PKH! zl7ky)LB|Y|2Sp&ax`>F>uTp%u0P7_p(#dOagc!vbbu7QnP)8?jtnsZ@w}`})NFN}c z3U%l+ygtH0GMGHM6izB8rJ9Z&g?2Dpdey6FuoL65-uvEJ5KX?g3MCTFYwmxOXgHV& z-4sjO-~PtG`KFHV-#Hpbv9!bMg$}G!qRfAQ!uHHK);MWr1LXD?57%pLf-D#(QaRS$ zI6k@Qxm_um0{j7fL6g$u*1$xk%dCO3L+MU;x-B)Hb+_N%8KW{iRb9m0b`ETQMjlx& zByWv(;K_RkWsFCn9%m-JivB`5{b%n{6>8tpmFh;$YyXZ(lzy~;CQgUz8 zo$?{6S$viEAV`W_D;rj9;-hquX;+S*$Mmy6eKOFYlh!z$eA%Sk5@_->f*q|a>uIU* ztS5Y-JZzTrml&rGbRI2_mP@aNPo`O=I4ZW-K^v}c_ zfcG32x^Nxn8Jtnik1TV8@ZN}lPW_3Yn;?S^1cA}GjT_;Ie|diGWO5e=J>zrTzDhwx zvB*j|FdCioZYKy_iB4LZG9fwml`bP2$|okHM`)hJ&5lWL-(H&{PYO^>uqPlf6uJP& zne_3s+6}jF@oYQ4k2-}95iM3C10#*xW=b*! z(c{gisteS!6e7WcHSZX8C0VP|n@3DY3tVOjE_avi1n{L;S<$MZkA25nkdypw=C(vN zf%REh%`6qG`P_2`H(P2)b-hy%wx@_I1i3(fp(#?n$}AyK@c(BLvo|(z;BEE(_R|O6 zDg)omb&)^LFm|Q>)Y#qFRebEvQRvKL|8BIZ=-5}93-Pi49p4IP?6-5z8GDJ;E)j=} zz0HiBpxU;qqSpA>^Rl6nOBcDALWz`nCSK9Nctw46dudL!F8xcgD~jsgh_2A9sKh1c zpmdKQ^Z%*QI|?uq;;d#!KPcFx6*9ZT#4F71<|K_fbcwuXPpVvdw^d5 z!{WlfFakjlCN6~cwE)EzO6XtqO4gPZ@-Yy5O-cq=Aw1{V-)t}x??oTsdniqW<3x?~ z`5jf>%TmpG99_V>cPdxYpGBx45&S-@q4p!PoYmAerRn@c5{3aD;ySC!RT?<=iKM3A za6!}o)!Uep7k2Uw5gG+ePjK0{b$h7hRH!Y*_sB!$u__*`*cC|gZOu!klU10P|vCA<{1x-_=(&zKiD|Qjc7s!b8zX_rskW>fR zUq!zSDMtFwNw_{RetkJlng@lNq7Sy+5r0saQS|!Z`1R$3<-y4E3~BTm3D0hem+60J z!u4lj*JTovJ1|NDmRJ4LmzI}-_Qu-#PhUUx@JRoA5}sKcd*&00rQ>_?i78Z?P-uFr zQ0boK!sS*F^=4>@R4N(Zt~nf5?lzxSs`Mf#ZIzE6rES8KmEU>9vA(z69v%Nn;VM@H zfA8^kbS=1>ysq2%`zC*%a%~LP?&WV2f3gZSeU6CJCuzN9iI<5P{}U4CUuIuY zs~^^uNzz4eph(7W(-; zYiA^{$v+SY9w<=17$F-1)8;G*hnALkB~0Gcq+p`OYVuW}Z{{DCo*krL$t97cUL}r_ zpf!`qXHEVg@|6{+S1(O=>G_TX58}?d*sVOe2jHpd%lK`wH;YJzKYktKU#fvE%MR+c zSQ|~EmPfw5-E4oY^3r`3f8-)lWja)%OCT*rN*{Hm@@G<&nM!CBfOTDD-W>^*1oBL` z1x{6c(#{M$bHfjqp;8`YhV*PRs%2^FExEZ#-<+=N6{*8CExNVRCx8AUp36*lj-4Ee z`H?*Lpngl|CEOHpN>i)lW`(|a{1xe}u2gqctXjpYfX-?eSV-dyDbg*`KgZoO61^e7 zwNg>87C9W!M&$UEV{YlFo*~g-pS+w9OzqkTyyB>Luw*iMqiwB|?VgW9_#Z zK9&Z?ue)>_x$a8TrKU_&*ol?h7b{!3QxE*}oj<@sJvUj}YD9pO&9iimzIB9Ka#=bl zZ^5eyq?01{G%Z5_DpudPlix1gspoWI;>Vp%-5qO)d=*mcCe5uM>r^Z|Rt${)s~iHu z;9ZCJX{@e6u|maao+$$}FU09RRGY3I@Zwa9`wKe&NMybo#XekMsG4GmfP})y@N#%sB}OdjS0)BBRV2>H0F0M zO+>}Cyw5(uUKkDD?_2NK@aJ zn+LhsRIMvG_xEtCZ9?j-?oVs=Y_jFefD3rB1(WU5e@I-%_%9xS;Mj!+mJsBzTMcDe z*!t~d?rcoNS^h)84@+xw^FOCPeab3PKjbSXx7e)Tcyn~tnVxSuqkwW=Cw+6Q&}Feg z#p(s9%W5s%BwY;$52@>Qh2DjsmB~rLaY7i&GfKtVq;#=h=Nyz%TU1nX-lH6BGSxaz z;tXMI6|Gv)q0zhG(AfU1S!tY_ZTHop9ccCC?GG0nzGJTd{^oUpfTPI ztffR%Brb@{=R~KdSpC;rI{mow*o^37re%22HaJCT!G75`uHvROU$2OFISb0^wL}dz zJ#8MM53ME2D}{2LLu+H~(CP>zAHOWLEO${r_10B13EsW)aHHJLJ?-JxTf46$-tW=$ zTejxT=g+7-=#P~x6&+KFT0-SiBz^YttXEavkAwIiLN$3l1}X_w%RttLEB-^;NFh_#5#=m1_Ziz1LN_ z1|WrA!RMd&<9t$nKSvQVMGrD3hID<(M`fb2U(z!sY6&^%=X<+8>L;q>%z20Wgr3>f z&8RJ}67W{?*ZSK?%$W5_U?f`1;6SVI+Mc9K=v#>MKX?{Ti7FZsw7*SUvOfvFOGavH zz$KP9A55L4E^B-#BHIDFQGK2oZ0#RiLk>+?NSn1}*vKV=YfmMEb|SL;t;j*-buNj< zqb(V1jd@t|>iH^0b1SrRgv(bc0r*k4Q5{d^z>Nyn#Fv5_E&4gj(ZG!!(>b??zxT5) z;YRxyxX~sF@`;0uwp<5W2HN-!TGL8&MB#>ac?Ve#Ck|M)c*|LxqUbLk)IjvbEHS<|0` zR||SfgEetv<9-q{PZf&NyTa&qL$whU(2^gs;ve$bDc5%-K7LsTmkcg_TsD$*gTTT_ z8w?i4>rfE~5&fj?9^`x8>p>x`-3G0}Yglt@b3Efot6RBNYMSe|#&K-#h(;t}Sz6_P z5n9FbH5zz_WBoqvmrv4q|EZM7=%R#C{`SNevfE1lsU*=W7J|HQcbV@uBO-0&OL`O+}VBENN^<<473B40ehPU(ap zrm-j)>-U?WPo%3+dPD>XO+-k1hc{tc;%HMW?rPuJBxJ_K7DBH`$)at^9RR24B5F;d z6D)C|!QC|y9IQQFMR8L1KM9HxtHA7XI2!pgfS&;dex{eCirLg(Q0TO9lsJMf*@9Nh z+(`@KW82g8oW>*nV>+UJ-0Ayaln8j8M)%Jiv0g-{Mt?FtT7RYUmu8gS$a&cyjE^D# zbX+VFC})z0_`M6@OSvBGS|s@*b!qNkA_>Tx+NiK3>F{0)$Ow~pETMiUKdMJ#W$~!+ zZ+r}|jJ!Ho%TTo_Qt{2?xW8o*cV;V<`Qc^A9Iabt zu%?sZ@hwYVmzATV!$LL3LT%S98U9wa+9k-aguh8m;q~SG%Mh$ug33ZQ`$BC! zmVq)PSEZfmeg5^LXQ)rM#%*tWk$duICJbO4m6iYG*+*7kMM zlgZu3Gz~we+rxc)jO~B4-oIHIk!-~IFf;KTVo~HO>LN(WIuM83f0{Hbem0U6|f?{iba&S>J~1<*{ed@!%cz= z6%x7XJgeKbI3YDywpYHfnlC|2vw9oEA3V|R%5_{XP%jTjtaO6u zfu(y8S~0;DxI-H0C624>>ALYhD`*R^-^|li0a(rQC3GZ(!;j^XX7`y(fz+(p;G4~N zXj}@~GYtczqg%Z`q1EOI*5qMU;oy`NGvMW9Md%HYb>C$&c z=qqmh{gA#cx{h$=0bQFZd64f`rK~V=xn@nn&-P{1OJ*rpQ_?i@mapR1a&2XX#bKG3$a=i)=ko3M^(X2S1c3ga9#8^n{~bAUUh`<*x^rNP?oJezO2%hbO3?x}j=osBd4pskZ8~dGHx~S!ts{&X)MKU=jpATd zX43=A<8?o!-@)5LD+$%Cz}1tLDf49eH$=OMQW!k;Su|wsR0>&jxEbQ6K>?)XrKh)Z z9_;`M>Z_F8y{4u9($Zda`JbtFWtzQSh_|99VJ2-MSl`rFN53AntNF^S?c|m3Ot7ya zM6C&vEc0XVjuU43Q7)R9uKQeGzWh#@=`sAI?~5jPm}zO(K}J`NC?&d^X=zbrTEdN~ zWw@y&VWykYL7Mhe4C8>Hp{sor{pGA+g8zx%Nu>SC9-Is;KaTL=992;xu6*~^>$k}? zx)S)Wt(Q`Pt?%)%$uxggG0$so08~x&`YO-42!DT0I$Afme-fyuJ0s7@+9l_NeyeKc zDuym$(9&e^8I}hVW<6&XvD1ykrW;b5#JhFV{$Gp!FYPz3?AX3;*};|8@taIT3|cxK zcdVhM?Z@de-cHu_fMUolBW!+dPiA;=yW}LYpW#|qZxrF@wn&HagQtwGO{G2^rup& z!B3%Sxl#N;kv24TSLnl`ws*5-`jF)Nbz3;eF56UBxtl(b6qkSr+2}Psrg&p78*Eqx zdbkSYBNTALjYM1%R134C570g3crN!R9?u(-MAkal$)mfmm!uE!rhSz^kRk)JO5EhZ zmOYeRuJ*8Ow0&v`cO4JPWOqi^NuzufH_Owyrt!1u1)SMv3*Juta!2DWwZk(MC@0FX~qo%rN`6zJ3MUo_Uo?&4bL$ z5QZ%3YeAkEt3~>6?x7w@JJLdD6M)b3$`f|utCZYv5(=XiYx&Blt{`^tO#*hd9G;0U zokSxv32MKUzj5^IBOB}WCd|~iLbWLZp;xximlxZAd=&zftNEeRX<#{~oJJwiHo@zY zGvr8k$Ab7smLV31{MJkK|L)Ppn|r*(i|=->3^$o&W@_Y*8H(mk<}y1;ab)oXGc=jA zVl`)X*ArquHDptBYs zPT}nWW+D=b5iP708K2c-bU;f|x{QWPtN$iU=fgy%Qy)6qYPlT2Lv6U8QMPi%LZLmz zdQR_d0{3#~n?D!zG{=~V|K`=QEzkOSDhMeXevWWv%KIw5D|d1|wd%Z0s3%wQYaQzE z|JEHC)MW>>cHApH7+a!-CA2->&ZE_j4>+yT|G%JvF#Vs?`>6!Z+Nc_yk)E7OPeg%E z=$z?6Fl4Pvx3mOcYv88>H6yh*`@Q^cWy-pfuSq3~a@2avSqA3A?24=JIvk0h_Cj@~ zft|wS0Fu=5$J8I^$qULqtS%bRhsPt&$@>vHwe4Gle%=-5dQBA|qj0O4bTho2Lg)59 zkesCt6rqnjp^rRPI~yn^FMa6WP!709_nQQbjO#*F*xfV{LbBfdgz;laW$uRvrH7gr^9H`7Bsv+bd)w zKao9Jcfz)10U54h7^vP-6QDixZ@qbDRm$e-tNeMJJT09tXB#@fexiF({$TA?#9%;u zH8-os#$G{yp1x;$YZFjS4+*MiQr2X5pjV+lgno=C9mtQ;8J!y~jxN+Bq^FPF^|~9v ze^%G&=rN>_g!8CA;9J?8F{Gci{ujAu9Y6S3!H3u@IU9@jWLiDd2u-`g`e->W*AwVX zJbaqOUpDu*^;QSd-m7jx5o2~f3Xe=B1s74;HKq{+{8SSxZ~6CR`S-ECNvyX20Cd!# zel=6Jw>_2?N){5@>EDxVP`u*LB>*jD$>8;A&U#U{wfGeLO?sLz1=4df1qt$CRR3^> z@!xpXXq5@c}QI`{%43lvKgu=EO*;JDy4p@ zzv>67-rpDz9jc(rY#*-$p}28_v1|P@CG)a_By^wV;uYEVy9c!gS-=bao z$&Gk`**3IA8am^n48(-3#VZ^d>vdL71MMUGqJj1?2tM)*YFZF{{@$|$>Tw^aD%7N0J z@SKbrcf4sPe{a}d9S&}TIK3sj19cRi0c|Mq*wb$;6#tm(ZUrv^Yr$ecfd@e$>^~p} z$H_Q&+SBLMqaEfyt1gTkb_KT5G-Ij?mmRZ8GA!3D+xxmb21sUFX;ZZ;_4&6jR8|c> za7Hk_^Wj&=|LTKpaNCmf&Zk}z9bD}kcY|$~oOP|TW8kRd4YL*uuJij)S4Wb>Q|4f> zk2SBYX_m;oluVH$t{-_;3dP&15VW(#o`Z(}Wp{+LR3Qx|Yhpx5xzR(Vj29cQ0OQxq4z!3bDnJl!X zXC`JQ%5N1cLG{ZulvPwb>ec2$wH^UU3hy7Njd1O*;TgtR> zPPR2SGdvGJc3uJbrTr}QJ>hx#`2BS&hfs174R)KCjQgfH6zPfUKtLM69yLkMrjkX; z&TS*_`Z^2XNDNj{y9wFTg@X!9$PkWzN%({AG(1*{R@m6nROm#~@`1pr=!{N7myePh z887J^8JT=Y_9%0gWFzM+@5|je=I%{=__n4@yRMctfm~v_ax-9VmhypJevf(qck1gvbrQd6{nxzp1}pIG?XV&?`Fd8tcJ^Oym-s6nvTVMb?tWPEGh8 z4M(@~Th-rR{67dlPlAGeM(L+>0QDU_#Q36&YJ@NU^K+);nSV-!5BQ zk=Lr%`nzs{4E{@sShIe6v{x(iT-U6~ok95~k<6)8G`d;J(903O%=;_42=w zu1LD+V7pHL_;q3HFxoGl0J4u%5KPw%>u~UH<{*~N%?Sp7BgAt%9NJGqtob*xKR!ZT zF@UGU?2mi)2vA}00!!Xt`dZMYyg^x^I|O!%FJ2O9b`&@@ea(pFxy@<_^x}<$ z=T&KGKSV;#bBS;BRTg2S!bL&Wl>n1zUj=lyh{}BkDgl77K&?1}HLYx?5NkT6%O@oT zb77m+!dqqgj<67If3;|p?eqIMNryh-qDfVuU5h}4kGai`A7u_C!(38jtrSeLXB!~y za8Y%6S%V8WL|;WOI%Vf?372g_Me}MMju7f;W{RmOlQNcnCqR9^$H5%hLO9Ku{A!4L zi@HT}Gj!qWWaZaDg>pO-Z0<3K+!~vkII7b_=N>P@m!NEMO4RqiEuvJ|zA0RUTys9OZ}G`8!#V07PxW#Mr5KD0f*S z*=e#yifU%bT@Yh;5tixb6`I1b_EAY+Eda$Jf1I!!6jy`~BBPlQ4NVI!?N0E=YNT7y z)aq~Y;;ea9mVcX7RGqbis73)%5=2*?8YYNQzKTgwy??U^!9!X-rRJrS)1Q5cA6*n6?P6PJYQf1`?0s3Q$EQ{Tw8WVR$fM+ zXJ~tJ)?2|n^g}8LNd>%LY7lQbq{#qpg>e+9AE9b?f;*To3GU$C3c9JkT8>*Xk$&>i zZZ1#(DcSKYC(dJv%%u32=~w8uwha^Mr1?=XIvs7EriV#g@>*z2UG&8@n);-slsH_M zuJI{qjJc`JzdTCYozvT%`|=SYFj=4Mv!NF6Y->*X@f|7EOoq$nKL`xayMZFOBeU4k z8f(w-pm?5}=6mUZi0`GGQ?(y@`n1gqmwD_lS=NrMy1-W*{juKp4I#1Tk)UcJPtj$$hMAmj+DOizqHTM{_E3_*KH;tYzh;K==pLl-GE1^gV+BDxo*HD>nYwz+C_Xf}R zZM`9>{KVqmIebYjKXHG;^OOY@PW!^V0QYg>c3c;@z_-=2)~knE)0BF=HVItGGEdV7 z90C^1-<%`@iQ$XPH!i>>q0}U6r8iV8V3Wn^-6BoSh#^g$FPqYL8NJOJbgyXR)MOgh z!R}uGG)WjueQ1(MkTZw?>EMZOWB|>dJ=n3s?ADXh*~Zy+0owImT~jY}tu-|sJjUmF zic3f|ngzoP^aw>x0aP^{Mq|(|r_G95fGD6nNvD15?MuRbk3{LYF5YKtuRZKep#@LY ziNM9Y;6P^R#3^!A9`{XcO?e~d;v(QY<3)mhrUSnxih6E1Y3+6q<~$f4fmK=H^VePd z`h2+_7FG;f&vqGxgaU8qI-J9m{&^vaTM^NHeF;x1IHFVXtG zGv^XbXCh%d!V^!>f!Yt;DP$8RYM_lpC<#Ty>(<(_&LW>Eo0vGxhyHcSSMjV|c9NJL zZ(e8@l4J2(yDuR&z+RDb@vERZSpTT~n>%HRN2d|}YUm_S|5%4wLg7vI(f_KvdhtD+EXHx+sP-C!<-rVEYFY8 zXR*XriAnE>J7wQ|P;t(wchN{BRFei2&Lx>Sp@6?mDMiWD=4KwPxDvNILk#6XcKStFQ%>) zqi%R2IL5i|`dniMFjK`TI4jq?WWZ?ykmE5E)K>eyJ!FIfPE)g)0;F=*{fB+$y5Bfb znO?nMzHfa^0+L4pf4Ma-{|O_p{rf<5*$D(T>Dc`3XeCN`A>?Nb)eM!Xn^y%CwmqRz zUTLB(a!aUevx{IYS+qCfL?QirfY5v7EdRD}*)~1wkqleUhrha+a1Hk9ZDu|m!YU}U zF_zgtS)83{6tU)bY!n&GJSL|(+q<=+_Hd7I{x-Ck5C4#U*tya*+dBw1pPYtp{wB7O z0i}1b0hqVH*o%Aj+Wc?^Od7E1@x@jH}l*qOH9&zw#zZ_9J^^OR6a+2$pKI#Y`|ujxXezYWy^nAYAm04vy1 z>3+dinIw&vx(9WpMDu9=mM>AiDdc{ECVancEic>Q3cFtj-YWA;<%_-atJ69)m77V{ zonJw^k}f+h&HJ}eGq1s0ElTCqa8k2O702IU*3!XDfq;0n2Cmh3>^PAJF3l?1v*dh@ zIqWxc-T!LlntAkBg~yw@W>&?D*cyDz(40(qrG>l@32re)!N^;jDC~T~Q``w&M$!0# z%ArQEI~@;8ggG$)RsZ@|zxrwk!ueZptC0h&neLIk&pz6JlATr!P1(-wtV?{>6uWd? zQBhHUyyxYu%=FlEl1BQRBGqz-{f45i);0}IdDYs#|D%!H3BYn&JDNSVyEl8#lpVG= z8;3~(+H_6JdW3dGnmwdt!)mhRGJEpHp;yICE_Zu@S~EoRbJ@>yhNU?dhdwwQ&S@ua z-mbtog{sutw+>={d{;CjT%WR2=_0Cs3A!d-mhCQXMbC;$RQ`c!zBC(eqNVg=wYR zH}JB?qL0b@g|g=X6~^g`u5OgBj=cf5sj<_eLJ3{{%v)eiiZsO+fk+W zndc2>ByO@s{zWi3v1nSjr@CqoTp{W{B{6ri7fq`dv=w9{xA{nv0#uTe2N=g)`L3_x zQ7M+AB`G^6y*|g-I&+LPoMXh`93uwj4AYh6Xb*wr}< z5JvL`=2cBvI48}{$qeTV#}EIAc-o0&`la zpKL}sS&vc;Ve78X9j0r|9d15Mmvc>Db4_1!O(%0rmvc=wa#$%*Ue&$~xPUZ1yEF4yM;mGShe%3v*Q9kM)c}70?ul|uu<_q7d zV&68$zHNzp+Zp>-9s9N|_N~VGmJqHc{0j2-%9+>fbMi{lJFfykWrX!Y;1Uv*(&u1! zh&3-wiVirfsFb60Ern}UvMD{^9r_@}O0E6C{LXqO&~FjQhCkYvRC=ex-AVmgp?TT~ z*x`SypYprir`DFZ>v|@aA4#%OLw9@HYE|m+ByUY}P4De%^4z}XXC#j%EBpH%{)Iu) z-eLD>`kOYoHk{|N`r-#Wx*_!bu+a_9-5zo`Ti?B870cV|o3iV({j1+EXQKKzg;ej+ zwU@Zuq(w269Iy2Re4o|2T*F-GDO|iw2yoXW5nO}%)Se?dY5CpWQ_>#xediDwSLe%o zhgveD=M|ZCbTql%a4LtfP)#O>vHA|=O*mY~Xjy%N835#%J#8Njrpt#3hTBX}cI`*~ zLPwIqGbSK8c9vDDBR}8il>}@ zA~obc=5GG|XZ|)}oIDxmsU|+#%hmkjMM)}1CCyLZrZ~e5Di)J9(>t;uoI9cRL^53u z&&W15A~$$~SFwrzM`YPpbgZvGA@8;Wzj1Pox{@g2#&iU%nNU6Z0D5I~HV zut>-G8u_xnb#URj$Tbjiom*tWPlErnBpU^W{^4@mYz>@e9W?h@A+h_@hr?qDk4-I< zW#G1^dtmPI-;1WrRwGTf%q#6EAjtaA&Sr$Id$RICK`2FO5p22hF{pGoXy$K<9U}aJJjY-lJTf+N%{DmW~=8|9l>v7gts`IQRkJoXZG2uD<9$?`DR}xcIBKS;lKn?eNG$OE z*yNs3Z+HBiI6lp9I@bUA8SDRSpQ-;Tr~c(m{m$=B^&@W>Z3Sll3HYtU9U5Vux$NY! zt(UsoEfM7(X5_9|K^{?XbWq}~FVa5Ly|cC%&+Wi6yq7jC7hmbWU8%2WAcAjzyy`fK zciCd-!&dS{)u3I^zDWn{GKHf;Wu&$1vbf0EKK1D}s6s%46KeS4vXeLpoT>RqT@JN; zl_w>*=nHCRl0@w5f?rCgpq`|Zz@<8yY5#G~BQxCGTD>X2D_51Qe5@5S} zf}X5ZNt3Tkg(`!d`B!VT%#IFv=qSxVj~qXW@uv2BMQtrslY9e5EpAPDq@@c?!5Adr z7~{*w)&{>`pr*|^B^1DI92+wBw*lBZ6rdkyj7w=c3DTR#(5Q)ff3Sz3Any3a0QTxtrwNWwAD@5AQ-qTi|ix?4z$nf6|{& zOSU$aqJZc5bL&DP#U+h)tSF)y?`LLHgQfl>)b{P=UUk#K-YyG0mB;Gm+xogarTw~> zc*^(4lz#lXwY>Zv+P!95EABNX`yr5ZIzj2TfVy$|oj7%XUrT-@^pVGY0J$o1loW77 zylt@$Fp-xkXyYosL-~bolcy;p`6#cKIqk=|lK@Wa)5ltCkLnEFBwJ zI!0YEo2sTW>+aF7W0-mz$t0}+bNO_ST5x+8Grp)aHsg`6Bur|d+C23WS+wGk@#%#L zcl5h>19&j!X4}OHHw)E??B7Q3{0N>Dn-2Y0OT4womnPf{o$P&vxf+CVPtVmr0)NhO zt^}*DUO*utOEYAy(w({bxKQRQt*MdsP^gA2jLpQG=XL1Yw66PRh4eux=q+Dyg)6X- zC12-1jJJYV)%j3DCb+`Z`&;B&m#odVH8rH*Y2RMf<(eb#hv~=PLFJ5bxpdSUt%#aS zm}@6YTeQSNCBCh$FRBulAb|k-AN1lKUJch8{RyLH*%Yc5@6=O5YeEGt-xgoi!xESE z!w9O-uC5tf-kqFYj_ZD!P2k_@XP?A=hE9GZFfep-NH?z|fzcd$K=%ldN5hYQdI#t; zjPSK#2_p=hyrk=jWWU@k-uius35!iq=;Vc67f+mt2V?D8yNkj9rCsrR!g{m4*Ey)y z+jX>>uR^%5gr#}Z55KleTt;wD@(3_R);GcK@_U+7MElsM07*>aWlbHOg42n|@_bgS zg@l2fg#>I3nnm;qz29o}Qp3ljN_i?Sv8GL^ZAy{N{6^~Eo%4#gUrZKhIA2*0c!VA} zE-dPyzCq1sg|lXoAWwWBNiHC~L(K_8#wa4miHE_W1#<=II*}1}tCd3&=0_9EJ>^~70mhjF-b^Xp_EO;lyHCx$!Kck$Ti2)0Du<0J~ z27AfqF|IVH5swKoJsxGI#j5{23d=ewR==9hSD`##<@ba|$u_r)x>yfQ|k4J^U+l+2bztW}9!g+Xxn;K13+ujS+Unj=4h94$w(}n7R zy)9Ah-}=>r0fbJj?7EL;|D*XY#nbUGjBbIrx<{6{WobQM#?zebaaR!YBL+moKwMIR2&9B8QIFo50Fu|HVHtauY<%}WN8lR$MACSXQ2%Yx+|!gF0`8+Mbsikt$bC!Vx%i@L2*eT+ZA$$`tCHwY4#kJ zZc$tLicutOk^4bhD`%;hvh@d#f*P7bG!#32oM7*~gTFH}F>`fBt=)w8$6h7dYA zq3ai=WjifQJwG?TtUHKzE0<}y*W%qntP9?4qiP!V3dmKv)nxo~W33db?bA<1tm&e; z5N4qrPN2qqQu11=;TH3OH77=o7x26$mJHJhToUQK3x%NG1sT1Olt_)5-(I;3PG>E3 zlc$BCm{zny$nlF6dZOGklvIHEkvc?8x|w$A%rp?U5|+yv4lfBEKk?4H(TRKMnuLif zRK5?Ph9LHGH=ziK!QW-lyA*?qgYkK~MOX<`SR$;CB<8RC{Pm-E$w%Yp*F&{~?Zty7 zLBZ&V?Ots)jNI!4*aM3S_$vbod=1pMzI+aic3PIJdP7iI9O;y;1OYVj5^4{fysz7;V>7dPiJlq#c!B!8 za1f3~v*B9pR#L6vAlXV<6hgJgmq+9FWY1>@2i06m&UQ%on90ZJ6s*Z=#rNfBNY$lJ zx}HiZ^`gLYSm7~i%;qjdPnebN&Wvv|~Koo{bSdz!H$0P->;N8MVPJ69a9M!9g zHyh<4|GLR}uO-e~{m%Ff^ZuP~<~?>&y#>PPa=l$hSLvN*u9pa>;$=t=iEMKa5!NtP zfuQ-i2C5s|o!U!~=g_)Eu2m~Pru*Vyg_FVzk;>E5ud)r!!)|davKdlr7=>!(`!VTkbmC%_CYh`s^X{Xs zZb%}JS!mjER#K_7B*LSbn4Ulz>mEH^I<+_vaH&OQkA62=& z)?DTK9nW6&_bS)=|E+TU_~R;93Ywo)wDA;wBPhR#zuPFgfwBkryP>7ZwTr)J`QFB- zk7sV6&VSNQ6Ls9m^UL^iB_*e1x_e}1ruOvo>Yb_o>yzm{C$q0FEv+9v&o$T1<0CyY zJv}|MzrJvO<^Xepe=}m=G6(YYg80wqw?XF1;LOag=x;-YW)8dXqKk)TIya)_&iHvr z=B1a7xcsXlrQoP5uKb#@mtlVq_f}kGmU=>en-n^AuCL-67DVV23C^$3Uxo%}qbY(_ z_QtyO$hRS*JkM+a%(S32-t3*1y+R1e0c4B%WG!>&w6KtNt37OtEHKQ|dVw{nkz9{a z*lcy{EEwsGme7gb%NIaOsi88jsL*s%qCz7+IH9p2G^Y8Y!xsNTZ@Z1^Ely#H*WbES zw&OQ-qsFYVu{3x7(j zt*I@iD(TaTz8Gvn?@uZ}ab7Sb)Qa<=7nHKfT`T%?uOGpdK@a$nfCo4C99`3#5^4~R zU*~TnH2Rp6sZS!``R_D4iS*vLwP$zwCb^AzSgWu~RQZKstZ8=z?$KLs;UfBnvl9-V z-mV0B=1yEsMTNdQ46s+(v6u=SGpO1=Luxz5aXYG554M%4Dz1tE7Js86_{V=~{dt;R z-(pzI<-~^{7e}vF&94JDTQkO5E63oJ3AJ#voNyzZe0T$6w`Pp7ipL^y%c+cmTi}A( zys#29t9#XP_IRfhs0Pu4S^WN1ktU|2?spF2dmY)}N=_iwN)OZ8hqb*|P5dV1+GdME zGzZmWc!9V4C9_7{qa%br8JAs5I@)En1JRff?2&8pT&RmP`9XI$jfnRlcDgLwySoQ^fJLIF~OQ;wHg#POQrb6R4F zzEde7vvpL@)?xSy^dZ{0D6cwabWPKrlcf~1Abt#agRPmv1x837JHTUdcyAER!MC~0P+#S>^eKy^1nH$IeR&<)K%Th}AzN3BreV3)V5U*=94eM-YXSqMo$Jj{ zIIgzptbLHtWriNW-z1~-yjW$&q%!R$D?QB4-!cz=#J6dHD!fdi~4^}i3v z2on2zUA)iXJg=|vPDVo9mL-8yH8N>@JuFj}7S78MJ~$^mvz?WcJu&AIQqyttu&R5lx&>?ECRz);?dQ zoFh1$6QIJYCVGei`s18*Kp5w>%~Eb?Q2Kv>WoZ?0_;H4Sx)gsIG^cr-?JJMBKUUD@ZlPC1TEno39S0I~-wewr81s)6@i<044>a}+m@pQL1 zZJ?4y$>pe|U*TxVb>V@iq>qV8I>!yFd8SDUxL;v|o=2;u&EvV5$?zBgPcptBT_DH- z&OUaU1L=M!P5ckVIQyL=rr*Vxq^sf7w*3-DRg=|#-eAzX`#<{ZUEHE<_XYNt)mC1n zRff};`x4ChDJk1Wzn-#V^t)ZDaU^@+9DV+Z_1WrcB{@z6z9pEtA6#~U31BIoO$htJ zr#D1BZ6qH8#I25SHpyW^MawhK6WkgTX?RJo??%3r{J(5|D?NnNaq>%#ZZiF1f*7Dd zV!&r>%!GIOm3roOCLI2>&p~V{YCm3^61bprBZE&ceZN5&;SXpCYU};2+{DW9d3Z|N z)ioh9OtS&`9)3nH)~100L;Sto%e-W1=*rood{U3o&y5DxrA@Mix`a1iQ}<1+b+$%! zPTElCqtr*Ts~9D2KQo9yO=Fd|%Yp7z*@;=AWu9!nF(hp-Bm@#>9sz%gDP3OH=E9$% zs2u|gFBdf{&PBTdeT*rf(0aA`JgcD7@^7D|dgyA|mI)=w6t0L=12Ia|!(jO&+#Xlx z33$TEsFB^EQxUB*OSRVil!Ucin#e>+C){mpudXK`DhaHT%($mJpp;MQ<~h9(qne4$ z?=d_13ir3nsQa7Hhcw*+S_g?7N`Sw9$2b#osiHZ9^^#E3W$vua8^?g|O!S4=EiGt( z4YiY)jOFqe!##uL5-qLXp++?H7Ek%l{7Ot=K7UZ1(Z8e1-p74Kl97Jvnulpuo$=>K z{h6+ZgYB6mZaU}p*4JQVU&rg{Os(}*#Z_BH{YWAJpd!!3<8W_t^XQry)#K`2mn6|= za-A>@CSWSXDu1*GX>_vP**NTJ?Y?j8uJRR^6LyP+w@p~;UV#Bp``+p;Yf%XMj}Sk` zy#L7TiP_{>MU9T6@ojw-SA;br1A=TP8zA+-JoQa)4;QQoe=f{e5{@2hK}lJL8xgum z9RK<+y0diJOqhz|pV$_kb!ur}Ah251+9J*aWv$I#k`J}02jy3=CF@kc{rjZmg#p`+%;s(*Oh8_a|SFtD6WeA7M-^W)WET)|E0>bROJ)`2#*xNP8c9C5k zkha|_KhY-w69%j&s>2RX_jWibTf4De^;B7yS(_v>3%{~x%PIC;&%{J!o-}0W~dxadh^?o1Ihd9STqMV#_Av9F6i^*m-x{E(~ z*;n}lB{=dms`7TMdGO&%e9lFlLTWt9ZP8;>*M(1qSM@J)Ms-#7=pwzX+!FJWta! z7NYROMwH50h}!rk_@P!-$Z4!mZ5C@lYj}QC$V`}iz!_GJa0Q)Kvd)Rpm|LV|X(e*4 z>Go_hh60s?9+Td)P7t(HvxqZh&XSHi;YXL>i5IX3l4AagHU$v{z_rHs*{D7^7?bKn%BVcwGz9mFww23q z<=<_kEU}eizRJx|rl#x)QONHVx&34cDkt&zK!Y_Ay)R+TVuEawqeFun9Xfbr&Ge{U z6DX8_%sC!(S>zYGh(|=O)9js5kqc3Jf9S~P;es@^oGx@wGSx_mGeoEfFzS?W5q(5@6cTK3>}!+{`UtMuA9Jd6!=9Ypn-hude|krK z$7vbA^cmQoi-p>JVEs)WCNPKjZOwfhA=P1Lh{|SHGOE_!p{VD#*6aR{@RsOl`!K{M z@(c&HC@HJopK~gbMf}1Q@Q&T;8Ggwr=SF}coyV9`U*#{%lMYQH8Ndhq?eYj!ssHep zr_N7&3Nl+PPwiIs_P}J`pw|4hxAEn~{j=lt`IZsCeOqzdQK7b^czCYLYfveAonukV0l-+*Lk45Ix$jd8pXz=^;&Nx_55O3V(`sN8P~8*2q}q|3J( zKf86Qa?)&mw!`LMIFPUy^quG_`p1cPVua?=iRm@Bb@sy%G5vERbfiXLmimGKK*@@G zc+~_iPGvC%47Y1-p8NPdPO1G$c(J)?Z{l3OarC=tjMUj^wW{6Fpw%WQd;KT`-nnpZ zNQOhqBF`d?1~84>SMBPdYLIjfigZoro&{fmeZo^S64Or^>CW&~?Zi#CsfJKn>hcjV zca^ zN*{{dOuHpP{lo@Oh6HO~3&aWHT&DPpd@%QS;?R>(8j3yhWa2ZN98g2UmkU%iMN$7z znhqXo+Q?jmQj*wBkNFxfzqR8G2-{*5kuI9ht5E`6BFD_;l9EQvR2T!VJbj)r!kJr?nS z&Wvvdre%5>T?{9)uEPK<<+m273*^-v6r{pdycBe*MRAc%)c+2PMtqn^9f#BiEclTp zDyU@N!FV`N<2#(Os;kJXg zrPUEwh17q&CXS7*JW&D`#$y|pjnzj)V;wp<&G)!JQhqb*BK*mgYviUgkA4de`bPof3&~)UiBN%!slwoR*V6^69sa9t7zV$elusd2!0)qjaJvxzp zh}@Or1>{OTuowPk0&|(w*@;H_z3Rh8Zq7~D(%WY{x;pLWmy`h!~Mn09zU3M2=Y#-mnzRDgfI+!*L zgD=n2T}0*&0=VLYXrHFziq539*J$hUAe-&QU33(CNqD(uR!l)(z$A-?O5!fsfgFoU z53^}CJQKs%;mA@FD;B5$cR{`nQ1I*GxWPK@>y1vex|4OP<(Dp0?$C~vhw%Y6#+I;C zn;?)MwFzP$O5MD{XmtGtMZLQ-uK7jv;1tz2OnLOadBdZUvUrsoJxw0Ruyd4`Ejp>* zk)=oi>b)zOuj%5M6W6ZKeGT=7ei{oEy*esKDW_r)apun88IorGSLpdvI&9wa3M>km)@zEse*JE2K>29>Vbd^!cA4L6uQtMRG zm#K!G3wuJkP5>Q<|L4*)ktx%4IR>TAI3JcNYFX_JD~&KSrb=`~*u#E3=Plbo4yEQJS* zrSM?XQmC}0@Y1iuXY_zobTBrl*b+^NqnA-4CxaK$)jBy4Und#7pyx+Ycse{gVV#VI z$qHj=6Y#jTvZu?Gi90Z>Q+plr8ygsDpu~W5NK7R;X^sM>-p@WIXOlyaXvIVFbc4E& zw5K{a@Lu26zM)!;qI{>Y)5DWUd?(>@=LK&O+5NUF7q^r zrY<_K75B1}d{Kw6g;rAD5RE=Nl!<|uQE}AM_!g&~R-F@ywL@DYjjcttN=@(3GBzTBiD#EAlUBKuvks;rWHI?cV~%t+o-wUxie ztWvSzwQ3t)OGg_X{AqPd1*3|qjMn66M6I ze=%l>O}m?k6Nh$D13m#IEL>;xHDRgtWC9Nt_#PRGYMc1NjbHhVD>A%tF(3Bi-J!Og zU57g%f&KBHI|*^6*{18LuviUx!MNNtsGr2{T+E%&iT^m=G@_mBm!=5TQ6QZJ0Ud2pBsE2kfO`K`rCr9yQ5%3Yad^ zmvboNe3xwX64+C1xbO`GeKx-Z5hkccM@C|*s&TxzgDu*fdlPcy1%Q-c=X6D`Q8RIT z&a*M0lx+$&@rRc?>{eF_hzQ4QDCu$S zm$OApms=$3lhfzRqK6G`vi9QZl@dBm;tQNUR)DCrf{4SUU}{!FFgfn?1^%$)eXhWh zd0U;o0(8|!nN7}f>*Pbde$ur02Lkf67g4oErf50iZ{ds|t@?Ph>ekLxZ?OGOnyR0q z>Wxxoy4wbEQfd*Rk4DYczcsULHf6ToNcvQu`_`gY(WFZT?K!B(y zC}^o*MT0_I)bO$iYC|?42^Il+YiUfiMcoBk8$dUyEXQr>z1Z4{Ew;8*i!H5Ku|-V? zmjt1_$yKbVL8%TVZG)w_Xk>q%@60)yO-Ru8-sk`P^$ELs&YYP!GvE2Xzr;&x3+i#R zK>xKx51j(2@9lHet)M<$`k-!eUAH#3rP@@euRqQ62?>wExC*%=$8T9)T-4US;4A1~ zw+xqWO@vx_R~76d@WN^syDeIuMP8Y}QC|ru(l)}7Ozb?Mzb1zusr)#iT5VY(2?A?2 zM&3XwZ?J*>uX~+2($MHJ^`8Gv=XGXtVz#e#0h=klFuUTq79jZ$?$eo5Ol3f7%G7KU zE^57C`jzr+trc0P^AE2r46cv#DU56gR~`>;(8*KQOY)TU>aVw;!x7eUsANfG2|G^c z8SCjXTiu+@DeK*>n?49`kTe-QhFQsdD+yD6j#(*C&6l;J`wwm|_!CR7&PvT3`~3@N zKIvM1#*?l-!=H5hg3s~%&E;?RuqRzV^d?(S3`7a|kGmCHTKKAdf zAKCh6PS=ahFHdf6U*~(b&wgq8V8`<<#ea*(6a4oLqc{~i)Ryn2^W4{u=A!LGHc2>d z<3kqi!f5-5UvL<0T+F&N+Ixg+)I6)hLx3o-enG879kkRN(~*|U;tHE?i!9|4mj8is zZGHvD%vMtlB2TtvrG!D0bg%OCQm=KVUz@hTnP*gu@9Qw&n?;|qN8bT=lHLXe%pT+v z>?*9zimMn|gom@7ksZe3M=vlg*jx-2b71!Z~2ZaEEW2A7NJQ*cwPY)=gXQT|rM0p1I7;hCH>LHLvGzjYSQ?|WPKdtA zb>sv3*A5`He}PV>nAQXQV4Yyz#Hwc++yq>w8c>>y2wO3%(dM8`Qcq6vug{_72gjdQ zWxXSM=;PQ7KP-UFY|a&zZ!to#VvcG&Av*98EK66_xJNE~WVNm{0ZWcE-{|L=lxF!x z$&_uT_H$-BT1oBf&xg-ROE)Ady`{T{mV2aS&um~yV%6tmhUiB~zprC#%At^sLi{_@ z!`;SBC^A4BHXahQWCCH*x~@oqF-g=)%;QYAI6KbFvx6@85OfJ^)FOoGFkBL;Pd$WP z?ny3YBQZ*5Pp6Y+HR9tZL<5*#^-v0qn+1+j8WuDgyJ9s5b-a5U(vh}LwP2ru3lmkY z)R9nUG(L)hLI(v?>V#5BD(zyOO1p?u+Hh%Ta7lO>_s$A5+>sr34+^yovR<^djGc+D zwjHG{>e@3Un|67hqiA*|R$F(wWsB|>gI9i!idqg4nTn%VCv-Ax(RAnZn9f+x^+7xU zSzh7I-CCSG7MtM&+ICTME?m$Vq^3R69ltwg!`Lrzi*8G)c=1O8(VcR}MS*)74od5H z@i$&0BBMU*-8eAkd1FQ*{Z@s6s16eg~iWr?dE8P)EDJkiQuP2$zw+zzwD?`wIf`vBmEe$Hyf#6&>{xqLm$g2-NFGDrBFxRaUc}tMO!)YbS4i4 zg3fIU`hg`^?Y;;_C;aq_3k_Z_)4^cvy$vDSTHpY_KeyB`S}o#o+4jTgT~W|5_DMYI zag}v5K1DtmH<-`0)S#Z)ec{gP#;NiAy^UvH=`iClSne)+xHh8?isUh(BQ$nWmCcA# z?1haC!)I_Xo8(0)`RJApTc?%BeDPjFBjGRJu?{ilXq_S&n7pbRQo!sIk0ZTKGJ1L!Vw+WeftBd& zL0(&2Pj?H00ZuGEyl??InoGeVZjB}KQYK1`&&N6boj7+6we2dtx;KGh+q8o8vdoJd zv1<|?;-(>VS!iA_sfTT#$QQ7OX3ZKb$^_^BrRAgk3!IdnUOD5AM2^fV@>9wuY`A-MDmK zdX`ZhE5Q?qIx1f?kaXK3K6DHyA+C1+5{kjm*SYN_ucGz}@2FIN!&nE^+@-!eQC>hY z3juT579=P|eU6FPCk~IIWjM3e-Y%?)3HtEW-pmgf63IW&Iezbhr)<_KvH?6m+wo*Q zO0CA>Iy}*dDHF4sZRXl`xt?C7n802HcqIVkr?1J}q||~#d*oBY*Ik{;qb`v&8(Dbt zu83EL)BgJ~R(FSLj&^d|yVQI6T(l!$Wz$7p!D zU#4BNQWjd|Dh*DWlg4Zny*m##ud4N4hYESVoX%+5=V{e<*0G%{OaHj-+wukOPKemB zs;5(rt<;ZkT~3mId#Z_U77@5!9ACeTYED3Uzf+g;uf4M$M=FEGDno|X|VXy zrx3mY!OkVkVM*U(a_G4q7s=4~K*M91Ahq+F`|0lPSO%4`l&;CThmEgdU6DO}#M36gel?f&870 z-GyFKHXf`y7+m0>H2U7mGGR#+yOw?4w!(m`uUyK|)NYoh8iSXCERV%dorxdGMp@ep zf;Yrkw$a#}O8ojN3#~1a`j*(j#HwU0VU_tBZ4941t30`M5RSjI#!9P8^;5OoB#yEg~})g}V&V{$gcYSSij z#cHF?lA1GR}!UgEl(6s3XT-`Wrdx@S?1Vx@?)&8PuMXC2dx}|COA1ZQN>;E84SE%QCDe!ZqZIrx&0T^qS9g$RU74s53?`F~S*4uhs!7;$yK^r4o z^=r+2ixn!b>cP~>(grBQ47STgrF;bt2kKkD1^;QH6x{10?iLx-^mZas$xtMHKvYa zkR$4={hH9_QaqXR3i0UdTNw2EYQMm>_?-PA>R!a=?2OOpC?^40Y|b9_BQdj=?ipL! zOmgNx^PPjL-AM59(q_c+{rF$)Iz%QnQxF{eqo&h=8h@m3Ad*LtKLLOw1iP6pW-E1? z;FM+zK{>B#d+Mh4WZ5G$xy&6e=3s9nJd0qUJMz1v2-XS-nn*(qy89lnTLgCof_u>P zqy3keF++6~ljFLS^7BN4JKa)0@CzI>M$PZhe?~ftY-Ka+3TS3ES$C0ZEbqt#@}s61 zb6#M#DTonmAcfD?MXRk#tR?xq1)%5`kp#Y!;FW~BzK{;|61<6rv7NnL-ZHm>xA&HL>|SXF#! z7L>)~ptBeVB-7kRj0)(t^tx?Lj<0sB_a8|=NcE|M^qzPf%R$;G2Wb-riMfl-BzgoT z)7Ch7wVL#<`|AFVaK}LPYQYG{i$`W4|1KHX+7~A0bGKqZZ0F_F z1fJ6J6ocU?SDIVFH!#LZ%noIA;0zqoGN5T2lV!w5{ z^>XyB_ShT`BX;vGLz>qkn#|H|q6CusXOHDXW>9(hv5d$R6ad3deTo1)=Gj-sNQ19e z&-UXDIjtARg9ic7uMNotVomJOV?92hU;Q!3xVKIYd1qk_jb4ME-hJ)l4NOKx^_B+h zy<<U8{j*xAMqCNU%La7#vI*oE%eszVLLf zZ4a@`4DmS`LL3>X%~tyz0A=;@5-N7q-6b%y^#30)bH(8QFJNY4i-wtp_5SyEm{Tw_ z7kQqaw|Kx*zK!*hBJ-c_%s>4Wo9N<`gw2m5i?Y6RGw*8Sz~00|K*)o zf4)4{eP?pu`PC&4rSD8z>O_AQ$+U-^(Xs8(7TCykHMCxA3+=K6`f#UoKt{h}$7gHj z<`v(#5DsdJ9H<)73nyLHa?yK)tQ_W3kJ` z3HOwEd|`j?V@UCo4qpf_Oysei!Ud@*?A&FhF#2a{nlOj_j(6eY?Y!s6$aSa{Q!1;$ z%n>18tE`5hW&t_6pl|@8_(t31e}JwXKhTcv;S(m0dF;vPoSpNG%@whZnKm7g=aOl229$evES$fOk!cxLs zhWlCDggD=o*SZtEIC=$d?BTn3$~U4``f*ut8N$*-1ayDlY)elAMi-7c)#oVsv>q^x zW!S);$Y?7rGmB4-OHXm{B;o;c3&)2GVJ=A+^v}5aiq?xN>{-4vA zDh3SR9|*39T*S)^2m11>E(Bf;x8xEDEM*APFF7~wh_3&sSIxX;K(AxCUns@<%_eBs zqvpu5h2;6ZbH2zK!F4#u#7puRn(n0h40jE$KTGby=hUEH_Ctzc~| zBN}|r-8$NqHU_6l8+)XcNE@|A+OYHt#FcUhGXbri)1%B`nhBo#dj?bY)kz>MIYeg& z7#+D-e#~E)#>PKBlGTBYk34AAtRZ-BcJgTr_&5ud-k)63fgnyuQgxO#`_-y5zfT7# z6j7T(5rZzaQN;bi=&Tk-M^bjoUrB)9lNQytYnti2;`E(A_dw5`KP^7hf`5AK97*aj z5ekXd)^%1=q}l=m66d(UuhWDE&EFGJEBP{NC{ux2Z@~m%+Xo9q?vfbF zPC7(ls7kTn=)_R3w=-YU3Q%zpLv`MN_@i!^$BZZ7+2LRo#0a0@mq=eRKH0^OCCXR% z&SMVrn@~SLmv0AbVsDW@c5I{VxAZ0e>MNl?iF}x4(xX@f9Jpa!0>k#2JHn6aaJ6W? zjtfKn@2IR$lKf8iJWsUIZ5kHAo1iqIHf3jSEgN6z;^D8#a-p2*R0Bl%86^1FzOGu|6k>O&X!ETJ!g?iu+K!p7Zq$;s&i`>(YlUH>( zHO!+ThKhrwWS!fk?#A51)|Pn!W!^hbu~o*)-0HZ<08}(3Au5?@ z!hL79Rq40N@~o!V%t;Gl6%))*sr|<%&|_)b4cMU$qEHEpnBFU_uPs?*Rwo|Jed+er z%-?1dBx|?(f*+xy_mGt#&Hi1__34cqgr4lU_g(WJ}+?oTm`S;;xhf!(_2_r6^iDOga;dB?wds4e-+@g zc^es9;}<)BB94%+ZVTpS;EOOHjp#(F40W~dSDd<$zG*KO?4^8{IllaA_*?dPrgpyTj7hK}F5FpZ8cv}+C#tr*h} zT16uz5eTwFWL%-{f`_x#3QBQhjjBvX0 zXT#Loo8Q7)rcMv~<5bsbZ;zM7+WUk5O!hL%*L%Ff+u$hWf>TM#>s-yt{+7QR_}jr> zE`R6q*NKmGytdbRwUPj2b)o~B9FeotKLxd7F);RmQ*gdWl#=4IUYiR>KpZ?@$6(Ne zim4}i0rfgci6z9{)|%^9{o{<)=@LFoyM%j4@}dRAgdm6xjUdo(8er&ZZkO{4{m{lZ zp{S?KPAJlft7pOY6a1RnGX>0bMDkg{(WGE*IA@{M0Gr>KlC5S%xU?aIOVPx%h?}H9 z1FILABe+L0b;~G~>ZV`UCueJ4Jde7b?@%RC#@!`?V-Iwas#k=)UmY3INWRp>l?d}F=uX%piCYTtN#l7LtwPyJ%0eEOXWT2K5Rx>36dJ_frOTn9%P4XTXj zoHmR}Ytto?c~~r!KLmISb=c9ae^HXTDUeKi0eAM_|kwJ7~C{zmXYaf(Dc^d5SR0&Lx!c-Tfp5O00 zZTPDBtWGyMbb};uNCGqPS;Gc61qZSlt#8c5kVvXR(NMkz`n1s9U}N#a z0i5EKrv02&T(t~U^ik%PmIIX}E7}KY$_z4^L9eVS*K1R~5TCvU$1mM?B*p^}(o%2q zWC9{|vORKUcOpb5;(La=6hXWx=oO-FZEH|{3i!u8YKzt0@QynR_14hBIc?#~bv{7I zkgxW4G>m@O4n2Y++GWl0W^I`on?shpW7l?jDzY2W#7a%Mo?5iE`>gUAk*xRxf7X@& zn*4*%MBJpT?}^3&leJVzX-84L;+x~3!D5?-&BJ6Z#`t4cJ8iYo4R9y^Xrmv66@tq~ z>kY7w;7&_%jxYxObN;89lQR(6J#fzplS877a#pXIf| zgc_t_;Dm(Z6W-lqC-AJ*b=zrg4zIS>$#sU%*1E&u+l#kBxtlkf;<;m37ptA^>qovm z6zlQQo#^6|6Edr_)YAKy(VR9dJ9|m4fUojYcl15Xk8L77mkC57Aa$3Xo&Ad(=5@qo z_gQ%}EjTZR7x5k$D!*BM5@YI@Gb_E~o175wFlAY`Y7dOVv0yXF2}P*tVR5&rA8=Cb z#U+rL#r^$gS=_^&i<@=&1wH)lE~s{v{ z`+}xclSE4U#EeX0fXD{c-%bHgq3#oh2M%Zxs+dHe<{;UhgvP^GOQAIFM(}$Ud&QNL zPu`p9ir;=SYAT5G05Sm;d*ek?S*3LV+Clqk79*eP>h%DQjb*kUS?dyiPk*vhW1(6}8*?n}#M z>+@%s+Si%nXcV1IWKxeKrn7E{;WY`8?8pNa8C{XJXM^f{d`@$+k{Zf)-xMJS#9O>UIeiy^)3YVt7iir zNxEr4^UO^0wxWc=o*Rlbc+|M+r`Tk|0?-Rz<56eJPd%r}zQ{6twRER?#(E9TXus6c z8dlX`WFT!H8b6CnHH<3J_EKsZd-qOj&Yn@F2S?3mAwvP)B&|baAaK9>$CX%_pm1~0 z=kCM_lYeFqR$D_dovqv_ED*0ZJ)QN$-Z700wl}EyZmrBF zoQ>HhqZOe$iF;)xDxkMNj@E1}T9S*aquT$l<|vOhl1hrGNqu##dfr^sh8H{&+l(&J znlT!!LO#L*C1Qy>z< zJ=IUNPH*d7-K=-DqUtHiA`t`2YJFkqM-t@o8L6)$zppjFhjE+)V@Oh1dm;_70T`}H z*q03*B@lG09(=Ppx>moU37FOT&rX(I^Xn2Fmu8V)xVs>|nJ_7B4hI&3XS zFtkTwV zG7V}j^m<}@sSv8CNB$2Pr)Onl>bNsbQWAqbg>_ZTayZz*gz3YtIQnP~ekfNAIUp_vqIz2>@Cot9HtNR%3WqI;x8AQE@N}XwNN^9TYvh}d+ zWZW1r;?lxbSznDQO^jH;g)3RG$TwKu4sFwhFYb-8@5!B!eBV|#o_}5Hs)gce?W?^? zI@a@w>-$(h3qoq7eRm{xS3IYmSoOeM9<-j5!O+#z?prx0D$1G$OON5Jdl9)w%<*Wv zfPeYFQna;3l2ilsJd!kDH419ID;{4=PwM#YN0OGdyldB$x~y4k zef&AOi6Zvt5TCy3C+rp6xr>#mld)DU_s8lw1h(pAtXSPK{e80jp5S|vZl+)6VK-N= z_y}quWq8uGSufLz5M%tLwQw$EWiTS6UO8dn^>L6~$Y!IiyyY#9h>XPa^*RJ5yyc2M zC-W$>bQj_asUH{LX8m|9xM^k0R#`cDPz`#}=mhLlfL7&vizU#oY9MQ6FiJ+FWOcF< zJnO*DzCWd42iS78e#@S~AGn?lJ3s9mc3`IkdQO3z5B7erPs7i-`kl`04nOC56X$lq zkH81;ldHi+SXQ9uu!bT96s6$j*zrbB_{`|rAK37df}BA=up!4C9%h4$+|vMa{QLUe zGa2!k+Lbj?{2w*qwgIRz`Ly7lc%1-hNY%f`=Ii^`cpIi@k*`~{$rh;}OAC?}`&PQy zcktB84w?J|H_^tr*3`%u6j@5-Rpd*7ZIOjfWn5Z+UN9Oj?KtmEHX+)Szv`pF316Mq zS66D{QTtltcBtEJ*26+=USO?V*3qUczGH%)4*p!C$_PCuTGEev9%IbgfaVnmbX~4X zUz3sCfowB+{TBcy$RB3dT#P* z{SFzklB5`Jj1wx?IiXlqms$Mu0llU&i`JV>GurE^n~8U69ZqX~xoK@$aWt0XC7+ff zs>*0&KvmRW$)eT^yR>|642_CpQ+4ZeO_x!PHT7kE@cWs|R->q`v?cbptBoa=%xIdJ zbCn3EKNOZ0o1^SePu!BO$#kYr%zVw7}VZPc!^0U&9llY6# zhN}nH`_?yPQ{rifkI3`#S(JQMXN-Nz)jAN8w$#f{F3(cm-u{TquPOD!B+aiaHT;@V zKQh0+0`^0*jfkPtRZ`YP9sNu;BSv84+UaLTNZnLkui4e#VNq($xpbc{(I8Tj9WdE1 zJSdv*qIHjWe7_GS3mRhCt!LOj$X#F1+>QTh*ZiMSNB>g;Y#RS}Dj(`VfR_LKR)c8# z?}CuE<1jJVD#^3Th|@Sms4S5x@($O3iEOD$z11}7h|kQBbbMt5dNdowsT~a4RHSL2 zs+6D+$mt8=#1`jM0<8#T4d;C3a1y?lB#@z|DT0w*HtJLPJRYApCUw6$ zqkD_v{Za5Ons73jUYmzn7>m|+v)!;4lJXn%?kYy7H zp?6zL$dxW4B?;r}1CkEWH~qjTMTr*F|3UbPz%Js_P~hhtV8Wscm@OenZyut1+h4#| zyEA?{yJ;JVBb7Ldvt#*2LCfUVf02E~3p4SzN(L z7lCDPnLoB5PyGs9oeC0my96#ySY?yq*Gy0wE(MOYM9>SDPVA3lFI^s0=R^}(OM0k` zrQ`Xchn7c=jEJ7-!BJ9k=p}Q(X!iTAn&PgA-|k-3e0;A|WT*69VYY92JKNKUFY%D- zg(eB>c%tV!y`L_RzH>5qm22sc>I=>77813lZd0{lLCT1Mqspq8?o|ysw{ZW0?eSty z;Y{}eG8#5AUT*^|VOdXF*;=GOWe6)9jwoJ4QJZfsXk@=ouH24CMx|AVojGtKdC#i3-dkdehM{W8dc(vv1WrVDkBxX2#@z*-UIWhQwc!!mEdd^q)u88O zrn)9Q78 z?f5J3A(@hWE5*yDU^~PXfP|UXG1kW2W|zu)577qKw8Vl%f^yI(wzYasWZh}2(%g_VjaKO0pi+3 zGV8nZ8s2qhNrn`!^(N@XI)gTZAX8t0%%*q+V2$#UX@K<*Zz*?RH%f+SPzU3i&~gpu zSPU8|{Ol3#RC@{Bs}F_7&zy&&C|Eg&Z)G*Sm5B#U?w;s}9^ZZSKx}gK0|%>~#9nX? zNDq`-Y2BF*c2rX*68s}kKz)aU=4v>FZls5iunKd-I?wkI$OFmUkq z4bQ;252?&=dr<-=kXk#`1#drx){;0BSs9%z=F#6|ikJDHF4L^hFE;3CfZx!c)7t=e zj|ITFWf#sUsJHJ_9U(BcY9*-@t2|YYWT;hVz2&NUK6Py;H`EfYEn2;eZBG9?vFJ(H zwOo7L{(F#5aa4po1YFC(A0pFuXiAz{AZg%(X*wiKpfLEIgrKUbsa!}%4TB3_+Kdfy6C zcQ@l^82KXA;qvW6)O#S{yX}Y>6!3Ym;Y8L#VP`;4*sZ+hyWk_QbfLxz-_6=I->wtA zFFsy8AwN=`daFK!P8na*#3ad1TNs(xvC&)d4KT%Ah_VBON&x~W`6QDe%lX7%jDK=z~M>XGJ; zo%;`#tGAtB{?=9Hs_xIb?baWy2h#2Y(#qB9*PV-t9_8W!eeqYRmgREs8iC0MnJQVA zbFCLu;M#sJ`B_je|E|9A)+b#L@%I=0KIG5Gdq2bHa{eCYZ##dZx%LX5asIx}pUZ3h zqx84^&24|4{-e+7Z-3I=Y;TU|liKulzps6xU#<-Y&WFH*lu&};dMc~k#4C**YAtY& zJ*VNr%&dJ4A7uvSczsjnc!8L>`vHJNNPt)MnS+>;u(AWi?(m?v_hGqF9;#H2t`pJK z8+ZRCc2x|KD(KB>T1Y5LiuGkYE&qsE!f=(IvBN+aV|@)DW^t&p_A#6YUW{nLDl+E( zq{jT-^&-N$siox$>_Yl`N#o0m_$*IsY6ATm=C#<=4gwNdVOC=!;_gPoMVSGgPJ;Yy z-exxcP3kDU1T&BdL&EMX%M)*x`N!048@``>wumVJ{ecEwNpoyw9=-+=rtXis|D@-p zHZRliI_1R8y{k8u%w zUm;GNzS>nXWD-}Hd!%Va9_%)hm#9+l7rx2beJwm+K|TJQbJ~UHdl4ggd~Qa3!i&~W zJUY)6kIvhSM<*_{+qf$po$b@?29Y&=kjmHc9%%$|Cyg z@YT(i;}kp=Qdi$=bQF%14Tm3WZ>@LaYsY^JzbLlzG$GvDyJeeovNMSL+CiEp14%k!}JQAFunhj>z^h}FFe=66nnBY)?1jmyrYTHTlP!% zq;`li=~?EwaL3rC<{@f8%=7p<@|msB-$-BEjm=GRGJF(8bV#K)GV7aXqzMuXkU6I0w-0(QFwpoza!Ji8T)E{f@hjm6vo}>gp>;lr|)@K z58Q3M+S-}#s4BL2U7OhF*y&k zHwb-q46-UZq79?Qz8|N4P-4W=;nw@*6>8euv?F2NR!=M^?PZfgMpK5Oa+Z4Mp?6)9 z;7XZ0j0%BjtXZ@n5i8A)&q!pw7%0sTpJzq#HGZ6$h|dzg+o^8x%Rl1L z_z|8B$4hk1`|f#%%^ZP_zvO+u@`BYcqw(dQSV>~4Rhkzo>j=CY5dx8cT!$`N17n_x zUuX;L9}XokpF&Rt3L~D-k?_`*2&#%4*re9}C}{b1sNEWvI|Yx@&IALLh7G!u;&z{C=XjkaIbO-`>eeh*dXm?HPLkIhX*pic{y@4lIbP}Z9Nn!H zHMEODbgRfE2~~8GS1H9c(+|AGCX(b86anrQgc~b!i}Fn$efA;Wj)KeZcLeuT z67O%##qIcNyPk4)pLvt>-YG$TN*O!3t!*iJ!uWJ|BBO4u`2C$GC#Q+{>QK4tGti_v z@zp&oi+Qpi!7GdVwvLLP^hR=?CoPeyby)OdU%vN~@43;FxtqlBp><_mYi`~t`kYTY zc?g_1Gj{cWWAXxppE!B1nkm!OlShs9NI=`xdRoVn!E73~wbu-8Ul{WcN-qx z$oeZzTs;r{jP$w?@ig7_Un72v|0WpwS%4ISYN#x}&g6!VLZ+ z)jI!dY0XXt-h=?%oVvbRt~&%MKxXmU@3PPMY!_zHPq3|Unw$3JsrHl3No$Xi4l^jLJ8$E1!r>Z=tG0d%X0j_`nJ!o0SxPE7bT3LK3bKJq?Ne>5k< zs`N%HMQ|ptztV3zvMS}t55nBT7k=L2s zkm|dPu(Nu5+EO-^80%(P~_Gc!ScvMxGeaOzJ&W~2ODK#=^v22UidPaJ2+Dz}-=5JrO+erVk z`AmhH$W90oVs|>Y>jTf32jXQns~-hII;~hGhEgF z3U$AJz+)|)Yu~8+(NI^lyF%UR-0<5s-jF9e73vH2jS{TfVj!mLQOpiEr+68v0CNS? zl&i5RV=>IQgB>;hC5(qCDDUHba>*oh{hb;%qs8Mhq7@ThI!5yR6l>;~v8WC^QUXUv z3mjXb^;+PVWo;=BseNCQM?Fo&Bk7A|#G}o}82OlOE%1wr*)VJvyzUP5y&>z8)iY+R zhs{IPGb+@7ny>T7zU6iqG38YFG;wm_8^FDzIU5%>ybbTPG(YPNs$Y+gbDqRgHgPiS zO)hb#(ni4aauN?MNG{D+cizD)OZ*wp$~;$cqG?h+rc&kU(f#ulrU{^&hvSF?=!=@N zW#z)TvJvmyrr#58F0E-NJ}+{X^mpuUblGHAykfj0);iD1w64vw?f{=Ri-1Ck3imGD zh6TL`_s4_vtt0SKvZjLAXW59oURBQmvCo`tEty0XE)cqHNCU4QsMJ`UPHUhF3Ekr{ zdK4V5C>#V2fZ|>t_gjRVV1-`o11@mhv@D7)b z?Bb^_t=MqK{+DZ<@r*g{k!jWW>W^PVR<_L!W1CQe3#{{w@}a#&nu-mwEH=op*e~}m zNga>rZX6EP6H?zQk`f8w0U~Z<&9iMr!v9v}2~MK$0SCtm<2$XB4Net0=#dA$rs~NQ z56lQ>G6KEKg9$!;p#z%-hTF)AOCh0fwsDr>2dOh`tqkj7@;^B4SJAseE<`utySDI- zRV|#6s@iJDx4M^z*3Nj_zR<=83xwCQ<{=7Teq;O^kCd|c;?+!iuw?zXn{vHqc4q>ZKma2`N&*X zG&69I9N*`HfX_P0jv>A%s`TuVm!y>M^R}E1Y~-TsKVCL|$Ilqki34qv3P~ zo1+hX(^P{Hrsm7V*wm4&)E#Yg=>cLxWHj}YyYw)vQJJAWUj)~lSh2jw73rrW!Pi20 zj}^>L8&P@zqaw%2fsM2v(BlnhK?ad=>E8nssg{|z^ z009nB{PabIti43SeKB??)Cpu}t7PuBlIt^Qk}D|oax|Yp$4fLnw*Wpu&w=?_Q*Oe) z3HBv&Ri%uaR4%Jwv*ZO1tR5=Jv>pa2R^sqT1>Z9~Qkk9x znqs%X3a1790s#Nc#o(GRpMySqM|{EtHBY{w8cN81S=$P>r!wulq0{W(BtvvzJD^)O zmvT2M_W_|siTFHs5i}U5;=jmFEtnS`oLo8=Vrwvr;3vdAdZx%an4)AxQvgX}%BcCUNi|9IEE|M;Kw z-p@(x{S{_L&fc$FSTv6u;LiRtKe3&aN}_hL3gtH(%G~s;C!ToXgG1G>z3)w(r7ryb z_vKY%#d))V5^;4NfR^Z~jF76mSwl$eYgmrvX|wyTTb@j67OJTWrA*_h%zB8|Lv&fl z6}bxPd!^}yeHd#9RLYyv95v(A+0~U(z$I23LXB$D8$k@a2Df$QN9v?a)NWQC(1&I;_En|0(ibPO>6s_(oN|Z=bSgpOO3$eb9et8t2 zJuR&c7+M_*kgo|cjaLFmNIHqMK3V1;vwpa8fY+sJw+=ZR2--4BcWJ#KZVybQB&;tu zZUs^~R?hD3fMpc;0b#9x_ZdkY(n4%vsYgQGn~XxSx#3WsEOZY8G0RB+Qyh3@v#td zDcTctGYH%m;RuGj$4d{EiGA0l&eqhE3T$BY%~dnX)@D>G{?U$Efe-G?trRTy zvm7`yyaw_9d62JgOocUx@M7yKD3aTHvvqKnbXqT2=dcco?pf}6z=fIJgt~8Yx9&L& z(phxR-O~CL&7ZIp4zb2JzCgb+C{k0e-rhI7;(z(RS)K2jfP?+i@B7Pt>3wPaFTXFw zfavxlOm~gPKz5Tj)Im|FX{MU}Sbh(LCwaB+zOhip_yiF-T=$&RhOp7`;!)^biW@>| z$W1mu^40!?2JywCqVKfCiaS~d!{GFAF*t{q-lFt?^@hOeJyNc=R7cX;eJXI>A=cwOdoLFc?`%(y~pI&-}J1^7BRAz z`0K6`jNxgFAd_6;Psur&tx@NG32I%EC#u`x;oY$QcNXYn#z~TFh&P*~g4eR}@dRIIfU3!93C8|3GB`4GR2PUADH)RYnW$-3_P5}|*Aqv7dRhEZ%) zT35m3B*SBqOUI}o|G_j$MxtF9O$dfx_0hjQ8P$`bm0nk+`t^L7re8clWvp&G1TAY$ zY~pZg<jDcKQEkJP-7&hw+YL z^XqB6av@&O<_gm29969yk2?bO0t9MX0_skqJDqnE0I5ErQ$I83Sro;CCdq-i1g zv(q=_jlE&?Qi0z zc;9=L85*5>;g`~1xa<3V%KkJB{6FmP*FsbO5Bq!iwEacf=4y7&uqr@LZ{csYLLxpx z5n#6T3_F}0?~-x&O&0x7`%O;fBbvB7V(t=@(SPXx?%r(f-oyt%bTh7O0G;{ntKwjD z^D%QX%!gFHE5sm~67J=~O2~ccf<;m8pg5X!g=RE40?ntfDGFPq3(M{i*>U=rAdeD% zoV=FT!Ub>A%F@j!i-ccoASVMAO*c@z0{;dn5<>Y56s#N6$AA90@cFf0g&0w^gn}@I z87MaA94st%htI6)rr3O$CXC8$^pkSFz#FVirmt2Q74g)rm6R~1mp;-(k2)sk8D~{J zau!X?Jm8(BQz1~n^%8sAru;bvfy<74FKAFKmaIQ$)1Yq zOidhWGQ+L@o4F7cTqFv%J0%%WyLHXTkadRISt6%Jdlbnd+Gr8EE z9M2;aG)~SY&xe$uU>%Z+M@ntRdV&g4TT%U$D*xA!bnfCGHMI2*zLqTyh|kdJ|C{k( z_cn`Gzw-m?ee%q^US!8f@!cqxtcWnMfhJH*B zx|J+Ao8!SpdA;V4AgxWY$W}pH2h?@vr>Qb3Sio;aSU^tef3SFtieu60zdiJ%>qkF& z()A9XE>~u^|1vVn?%DhIdGRmPTbN5#N#rGU*<$o&Vl&%~6B6~RGo>C*hvoU80r%8o z9prw@)WL|*FWf7XYXA&e{!AVeVj2&s6B`7qsS#?N(7s3~|r4uHA? z0prLTbMqGibyX$5eXl8aP}Z$=Ib5t=IZocVXozm*uFh(`tm~a``}CbFs9I)6@J-Li zMVt7>MLNP!Pvn7y@``GKz$1vKVo$jQX*Go&z_rfAZulICGkB2cOQiR8LRl~;?uiFC z3TSL1sd_A;YxpTmS(?>jqtZHZ7TW%VpNh6k#~fk~%r5m&Aqunu+8pAmy%-igx-8G< zt2@q`M3;Fpj66stHO1MkdeBAG(z*&;H)Bc8wuU1EqlYq*;gue>;*Cd(k8Jt(srA=M7@V`}kFGzvvEy70?@W;Fgb*03*Sx z`n`TAF{EYw_)^J)N17|juCpDo6q;3u^zvS__UZS!{!_mfsnM+rvVBWViax%&{{jMm z3W_ay)V3=GoJB1s+Bbw$A?o2UK0nkm6=;S>Qiq21bFswrzz#Kn1!e%ogR;n=6{!@7 z)2MbgQcKTG0~q4&cG;=WE{)`+%lf=0%DOVvaAwm|H8>E{4NuIepkDF(}IV!3bShe ztAxo#Km)!-qPiwOH}=@wY9PAxmGj@mL!H!IZ7jZ#m#aYC3XI)eybXg^N;VTG|q^R5p`UE zLyx;K(WkCD(Or31TmOQ%wGfZXW&#x~kDZ0yz!q>%F@xwA`UuaMLhzFM#O`I$lrCN-{4t&TSG#>k>Lu~{SP6#m`Rl#~ow4ct8u)m!oJ!#l4$pqI za+f~IcUYxs1VgR0G1R(KF_du{eKcN*_)_HN;SJ&ul4lhS7Y`F%Q#x2LR;oF$hVU62 zVqtMv6%;8U{C05}Q_t#5yX`Sg>qyd43M<-q?_utl%)YHzT*fVgy($vxda%t`_jO^l zOFiT~&|q*a*-kNJPb2wjC#!y$6;w^ZJ(@e8zaM;od__gS_42A4U_U4iEvTX;KGUzU zMZLP_?6gyF(-SdIIP&V&h}*-K8F+A8LQdqaAK6) z6i#fby)$gf{&dZWmBP{jA|!HiSnmMRD!*DPP1 z)V+}#HFAS$3~r)uPh^INQ|$p&=VRQhy6LOfwCCO?o)gSQPDLU!ayCg^)R^-a4afGa zZm=&D)J2&@7O{0ET}P%Smkw9iv`7+^vlN*3sKmK;dweFg7Hlsp^9udYIS*o`&5#zl z5q?8bC`R_T_TwkNL@X6_4yx&j$z$^mYGfY2#_UkL`X#JjCvEsdI;#C9B+)=@{$?9a z>pS5T%DfqZeo#mSQ3ltg_np#@!F+S>^Q%4s9GR6`{WT}1M6gnhH8Vf%U1?@A48!3ndX1M#*;P=esJ|zNCM5D%rdjO{fb*{!nu1h8h2X?Qx@X6D@?JB%()vPfddvdvh{tiM{fh%n7A)~kB4UTrpN z+S6FCHmiT)POq(3_3AyoS~c~BHJigd z(1t4nT9{@#rP)E6S>VPZw>4v=_?3(lIjZ9EHOba5i{53Ix)7gu9kVvSVz!#^OfXVL z&%#GY=S%6_OsoR`s!uU7K`&;w;erL;eN4xO8H&C>Xh^?FajW6$=1%y+7z&P-+98a- zzA{7sX*H&BJL#=k%wAbF>y6K#b!Ke-9_tHk90z0bcUto|gSZy01|MHw1veUZyiGm& z|Gi9Kf^KRKX#c-G#{X|;kN$shlmj&_fI)Z9D!DPAl;U+jde;H-y1RC3d=Tgng9}ck zsK8`j-5bD<72qKC+^)=I?wLFp^eO2-({j1L42EMi4M(UtiiKF}5rOfieX0B5Iw*&0 zzjL^Hv4I%#@P4)bh<(5gs_lHWY7Q3G><@>{`N{#c)f{X+vx|w?h>Qc63CyWjiqRVP ziDDz(X&*9jqIY=!?ID~YM&)lv(;m&Hz%QrlGKpd+s28qile}D!H>zCZ!ciGGxGSQg zBwuR$uFO{N3tFr+*-{GchElDR_S8hP0r}Ve0FdwG+&mgmvo1?NU~4&YMP07+eB?M4 zqPF88q4rEj>?Pp@ho@Q%_k5`Bv3~2Cj_8(AV;gKg;V;c9SL>$=ex5esVSEEI)*b& z1XX_#Nbv}v4e^gkzS7ls%;5KOcxdf_sRNL7G(ZK>0B`Utu9!|ZKxJn<0EtnZcz}|w z@c=Ir@laLFOVIrD^X)0AFR7E(wX7yB~FtxtgwG2qWi7>Y9He-8?=#OribVr7Q zt|mas92?ebHN+qKJ{c0*6x<4o!_qdZFZ9)7C>&9XwL=iRaQ!VZ=wUpng>%`j8Ovj; zT^B!>;t^+91EMF~9LE!VBK^g8&ZAx$E8y?7>wI<1H$JWtAEyjXqTi6z<1MG)C#^Qn zcr2PIkjx%#wQWA?CcDb}kN%E;+HMW7RZT;?tD0V7ZeU~4F&z{g(-*$ihY&4<1JNM9 z{`;5kYysU6Q+Vigsd9Eu(7;==s3)WECVI<@qvy0sf>HabBezK5)bI=n0va3{z7lq6 z)B;>eMZc`Jlf_LFgM~h~ z-MSi2#lzr`8-IfKAc8{RFn!U*sYII+Udc-Zf#eBk-1*3wq_}Ez4s?HNAQmvB#-cr; zA7u1W{d*pAviW@$<8*zrJoPBC6QaI6Clk(m#+(67|J70d0Eg9#%sCe+%bYdXO|15OH zvuaOlB2JT3XCpmP8HMXnrJ}-}L=on^6BMqG`_Yif1)oa(m2K#(_rxO2k~mNlQu|SE z$Vs;)CC)kupo6wKs#$G)LCdfUKmAeXCDeEN$hy>vIw@gG3R^oR1$wXN6t#$?us@{E zg;msk>CW8k{V~Q(>N#F1bkg@saem+c#TbTTJ~L^Nw1UxS4Tf729_&$};QRf6=n-G^ z#BEDXA;j{e&gUhXG1g1yg@h?bKXivjM?dUCYPt_IFb>`ehB7>VzVQ5pACO#o$c&Le zIsn3>HbbEur~gEs$W&QgQj!S{BXgIiFXA&ts&_X2I%zE%W6hkvo=VDucpkyZI{&PD z_rky)5ZcsK>;P%w$e82&B4-6|OXHB7YmmEE4L7FDAK3TK2K*i59TNGDGy3zXdXcjBnFg`9`$05lLZEp&snt7oX*AGHxSc zr{si_|Kz8fpYjS@$DKMo`Bhi~~QjHdmlv=H@0GW4u)>`hhDn?qv zM+9CB4|n3@L;@t|e12f~eRoU{3ix8A6)#7Q&L!ZC@zs;m$Ay~K(vIrZ&FVurcI{dd z$a1$1CsXg$XK(~Yk z@7X^86qHU)9bHXc+GzT)T(2zO7%zl{ggg_=v z%HeZ01nT^WjaEMgME}_@4MdAa;#-#L=`7vT5Ch|--C(>MG~4uG0%M4X=850#sbmc` zM#n0&@BscoGxJu7^4_|NG(-3i$7yl7CB4?5L7K>5zIs2t@~zo)J=mtGZ_vDswUmd7&ZY zYSHETSdzO4)pPGzg?6j$m|svAbAG?o@OGc90~J<#pfSA2_J7oIzGWgJTq|x{yFpZm zeL7!7ey>S@przTd44TS$9v+)AJXzw6ZW~GT;LjK}q%ONc&$E|; zu)P00ZI247nB##N391yscofBJCDO#uE<&Fjd{KOC6q^+i8|s5toWgR$*u*frTM3WRZhm{%$J z@APkI;%8aPs>DAiU$kMZUA{;%e=tcaQ|D0OMWd~B zS-Y{*xz&L!SUF5qj&4d?%^2m_jL}twF`B3g-uKY(G}>I<&u+EwW3UD%i4??5;I0j^ zngbvJoru-F7X)U);oDHRg2G~@QUw(3+X`A^@62CX8dmS=T#8wzVUD$d9sJ_Mg62;OKZw-SSMr?v5x^@ zr5lBr*{RNFx}1IC<-aSy1NAB0EQDLt6H-JQHdyP4o% z!jYxd;Ck^g2~igAfMf=ckbko>r?@?_G9(HT`5!f$R(rd{<9I-?Mh~q`JtR?&V|FY6 zuT-d?qZu?@d`@-Nk^Wp`X;gBL&J}eIhmLn=Yd43OoGi=v`2Aq1JMvFitZgLIg8d|> zZwcE_wdoz;dB(f8Kd~gDx{AQE(@921F4omO%5f`}dosi1?mgh@xp$Z*Nx}N7McU(WqEy}o;W1W3VGNB{+ZbTg-&HCrR`DnY5BR_u>gX!kc=r9zBRx`2fo zUu{`_KuR27nvxH304QAptP0N!ywD40n zPWAekfM1Q@+Lav7J0dTxRZO(RQHx6wBXoE7m1*4_KCOgy=&%m2=qqX;q5b`J+L8D$a!mq;xjh?h0D$+=Gd`4z#pJxGO za4lqd4NQu7h2o!7`k)n;6VMct6jb8juv#C3O>zu2Qzi^R4z9D|_hDM-V!OigdR-=4 zu~sk+XD!r^8xOgv1e>KP9anL!lOGn@u_CXlB97!9bz8z`Rf#pxL`SSBb<%i9Sh#R$ z9w=JYo&|v|;r>l7jyv8vJre=iLR5y+gn~TSYSXShKHNV-m>XQ%`1t^6aP29Oiby!^XnA|q|CAZBf85i)h z5a(ql<3hW!xU}_XaS?4pV15r77xWFuxNw~u(=G#^VsVkS$;;6Xsn0_QggDf*za%sD z)jlH|T?1QiEEH|R$i7=Wz5}U+k8kOfHRe<fQ?#lHZa2ll5LWgKx?BYY--Kt zK5l9N4K8a2Xbu{ndCUOK`rd%1MFY*jPd3vTpy|O(XMpA)C5JW8qz~9D&>T?1csT)@ zb9qPuO};!`gXMm|12p070yO)31DdU;08Qgt0yNDU6ejA2o6~@1YZ}n}P`9ktE&J=1 z_5T9U*x(`x=mFYz`-cOzW%zIpx@eegY}hEHh1vaNYt}7Tv)=fO$b$}Mn7S`?&%{1zk%5h3zv>ej;_10=}Ffn zA#(E@HwiJDPgp5m<^0TVto~{mRXVo$kgJH+)A_rUze4_O`ayh^b`UT=4%v@u57{2f z7FxC0LUB--w11!5_SNo{)BP!i(VVyUk2dG+tNWom_sM1zEFkZOv<2j=ofeRrIIiag zHJ3Sw*x|*R%cLH0JsKNhA#Uy|c=+U<1Bj5rU-CtvZyu=|NBr<6`4u5vE=+1$lhKyA zUK7gP1AS({(8nTZ6?x+m?hU+*?iJ-M^$W%}P)!%3uI5+<3diEr91Dz#>>#x!`s4CP z#?pNYFO}4C3rQE+J>doLVD`y#V%zYPz^@4r9bHQ$w z{2T>SPY>I2RG4 z*ARYOpeFa=0<{nl)77Xad$I^0sL3cpyL+5)3kl;jV$~MR6JLycIktFZWJHG8c-O(g z2K83$=n88~o^fOX17Egm_=(*dNOhydjf+#=IN)y6gHPMvUsC;P|A;q#?@a68?C)r* zKRv(i_She8TGrl*I9bu=B(`Ph+^-c~T`&GYH{Dz>B9e-6F*R@hHP?$XFuoRUeGISF z#KL*ehLOtqMlz`ZRlG31Fj}j2#S3F}&L2A)z5BY|s8@%Ku~wt4eA>L56Mr|>XEGCACs*HZkVVN zeSG10k+F{v?;_^_K@Eck+8{@?J|LoXn=M*Th3V89j&$>py#GCI4+=bB!t_|LQr#Pa z2SW&ddLA)jPMn}5*z(=y=Zek)N~TTZT=nqpK|(s_@t@j?fXfI~9EJe|>OVH4K|%cK z_dA*-u(^x7wB$zjsA1efr^1z3PAIvAl+f$cY~B{b!yDw}+M&KZ;vb0Av0O3PldlXp zdKy)(nI*n8ST^N@;n42fjVZw!tEq=K7|U4CZ~qw*2^rRrWwFNcTuG15S##C{=xF;k zT3g1x*qMcKs5L7+3*(Y(fwVM%*RGO3#PySoPQ*-g&rNQAs)Td zO{5HKDl(JpmO)4RL)bMD?Q)1sMftkJqLJofwE37|KE{}japr@#C!PEbHH(VhosXo5 z!?mpRhUZzrh;q!J2S+lOwAlBZ`gf-pG@|D!fJAaqao5;oN`SLf4=)y#rB-W7$!GDc zM}4D*57wHGmFDAq`B2&8armD(9ml-5`yPaMF#*g4B=MKc5PAQAHhU=b9a8_ZHscKb z^wmm^Q9}0jydhBQKwas!?F-H z$dK*_)r4MbL*c+Vm815h+oX2Ym8Kt_`Yd)q6w69oyF)9Mr*R)=owbrutDT`FY;^_0 zx8B@q_o50n`s$Z|<6wYLudS^CI_vvux5_-8Mw!DP%wvRTDP2}vN>1ybAEZF6F4uU} z?QCakyhz*)ge@Hml(vzi{v=8uF(OmBQUdQtJWg4W+8g_@)+Qh0L>vP}ed3pR!sEU= z*&vdH?~x?oyWdPEk^d)J9{QaaBWlbzaR2U{u8{Im{ks!Vt~*np8q4w?=ZO{Fo><)N zi8JgcCX$Yr$;x7G;4Dx`WW`lvopSPV_-cQ|)g*};F7DRhh;AJ=pP{F4MBHR!PwU0H z!n(s9_`p~DC*Cl=AVC=v(SL$2veN9^zSPqC%-PN6roNXizs#O<=FFMvGc(UTSGN&~NQX~y znb}eQ!$5zucpWQ16d5|SGVi$D<%q@bkp;j%La(B02SY#+tu|OIGJ7ISy)H3gmbLDO zm?4Y#9|^=1anl-oP=?PEwxNHo$)p6h0NmKLq1HV=+9)c^xGCIM=a4-tF>QEa(g9z_XYeKoI@2r1ceOnsPG9U<=ShCunp#sSO&eb2nJqf6#Vhzj1&pg|20012p6`Lk~GaZJlM)ijU!)>ZjaP zi`w>6rs-K5!{^&`!JhPm^&Hw0jWff`a~-isxxt=df$!utq9(9^{H4EuxflyY>*5GF z_@DmD8!@&9VC`2+;q#;g(n!)vtzSK#Aw{M@4h&f^lRA8i8j)dA;l;VE70J1#r+S@C z%(PA6uj;vVs^6?Cz*NUQf!o@(kp+Xpd*mO|r3i$UpI{~L%1@0t&9Wx;vR1vcg>{}I z$u(@#njwDJiBh1XkZe+UbU5l^+x{qtWNEE8$5?Lwdq}S}TcgRblp_j@BLKv@9k879 zK%V@EHKx|V=^9YzKP)*31w|c=e|g(>S##+U`fdnLmM?NRS~9P6IMzBao#{U+&}t+W zdaQazT)8Va&e|IJ1AbG0umjd#7z%TmQgU!5LY3CNYDsdX1Q*CSUPrf=wL3+`|B#0D ztMewP`Ki9!XGC_GxEjMj?9+DXuemBN+w+>kPZ*Qv?c z+ppORF)$@Jb1H_oTe;|XeIa%MOJa9w0tRI}cTB?=sXxbM5Bv@ku3U)bo$iKc-cDwu zULkgL6wMn1Hm0O;Ji@1xo$Vp%$zm_|=;rPLt>ge$p32~Ox-<+*A$*BwpS72cm6N-| z*9);ww_vRKs&#+g0spGM`4lw-RB3^%VZ zB8qWW1X_GR;J$rVRsAlL=B@ zC2ViIFS7YCu2$sh$c9mfaDT0bRSDurKor4}r66jp3P2Rkh^&_R#tK->>UlIe6~R@P zJc3GjtXC1Rqq5@8wn!#ZG3sbwt#C70RR z;WHV*+0ui1NN#5!z#@if>^}akR#QqQc9O1S&V==E!X-c zqsE#f))!J9+WUmYV9F;1*H4n9_3##fL-gd`jWeW&x1!=g_m1;>7_w=(jhEwgIdr*v z`Xzb&kZ8bkI#PF%Pjqaf$5(tT1XtG@1hE*D#SG*}@kDb4S}HVShPkh9k~%-2k@Z4i zq%{EYQR6s-4ee;?HD47|YR~5|UD8acZCB4~@mHqQZt===LSD%e{+=7=?+mHbUaV~6 zNGGw#Z9NMu@F{0w#>m%`c;GV0A#FP;Q_rp2NpGFw{CRjP(yLmE@}X~JJ=7*dwa*UB zHZ^AkFDsKl)ho(6Sr85q&(?8{NFYmsoU+C363FW*9+Huj}M~8e@LthD4zvDgTRN7WVZ4LMSg|yKTN)}@e-?JQftuMD`0KBj@ z2|wmK=*>glegYH#8RFnK9+uO#AaP1Yy3TP7Bjm(%Z;ffzF{mRZ(;U|^;3&kDWe5bc zDl?7zwa}|~AAQ2{65%~UGlB9~9zVhdZCRLNI_QOHM0JMWTN;fFqaUmlzonVY(VgRY z5DN;2Wfi^7Qxc7hASQPAkeUy>#avs+%@IiSo0c`^G#f!3GpV~oDdYK5N*dTB(C+d&&h1BE3qYC=erl}2&L>Z$GW7a;-n_|a%#TjK$0Hy+^83k zneirBJ@DjkFcok`v!keya zg{~+>0XEm^a2@nl;nM>Q| z6~j~&>)-37`iJg?4$k>g-nFg1Pz+Q38a{p5XBLsCi?}UWgzjYIPuk=$<}>p+e4(o5 z`H~094e32??K{V#bYld&puOEY&&XWi?G(f+CUooK1MuxOHS~3!&hE%Dx`r$MZg*s7 zt+bQQku>dFvGr8}!dkuSt^M13PdHZo{Rzh#goa~JI0kbqB(9S1C189b&ld3uxOeo_ ze@-XY3__;Mj_K^uElXm%clOGTbAQIW+KZ0c@8*a7zFpjrFudxP84A_nbd3T(5W(dx%#jl}F_rV?koDlppZKT=n&u zcOFj4)sT}v{!`2vWw*$@L5@P2Kd~gY)VJ8ZXkh#OBjtTfZy(ED9rq6QQ4jkO>YaM$ zQ2Rz`j+nRgpC}PZ`|mD)CZRVKW}Sog-q3gyG%?8$u&Q{c?7EpfjX%~f>!;-SrsOW_ zyTG-;5u1{S;Uup$dBEF(vB{~}9iEcYs$inew_-mUl&ZGI8bW)Zd7ro7-m-;vp=LdP zA;_>kYJxLTO%C~UZL{8>mRCa|@S3&JQGChc#TY)Kwrj==f_?$*JO~MzZp`h+bI9Gu z6YJC!IXsPsf@$rK;ukhPr1H7Y4m6__!Y=&g@NxVFlfG0ag;xnhQOQ13&BZ}1yQ=l= zrx+thyzQ27q4gMBp^vKtT+}rk&$EDcp3ua|X-&BKyP;_!iYb-nptQu>Wu{$NrI9l6 zqB=J>E*oI__Oai(|2ZjL6*Lm*PAlAei?KSSH;}O(stqKEONkYor#FgvYrdr`Y*ZEt z<|YbOE5bDmA|SllM@-e^nZs*N z5dD7(4ich$m>GZ|jz^B;0y|%STc$#^m+TaiU6rpJks=Z@X!7!h|HVsg>(v+;l_Inv zU{aD-i3#_a0d@Z00jp3rYW@?6C3#{W%{p^rD4(G|k_Xltx&*BY&gbKAG$OBp_ZVA? zoa6mQL}=*TXN;d^L~6JnRULnpi=st{Sb_c3bR+U>ozgk}IwSIsPPtwZO!u6078;Qs za&K4V(qvVRC#!OostVi{s?rSs{^H}Yg)Q56%zw~{`g%qv8%D=2`3NbTD(4j$p)0~? z{~f#(-BwbI=t1&Wzoh?K2MPU4D7}jHBNE@r>20tt4sWpmQFDqRUy@aep}NMb zDu2!zMgeB&e$W|QMq+2xV+~`U3t0PGf+MZJg3o+YQ^bdS*68a8?eY~U7HPTbJ$%mer(MwQrOZDqd+SU2k|tC}$cUqsU2 zcpHo!(%aG6TEMs7ioXfm^zykwgJ7rnrn*wl)*vrZ(8d|PPA#cxd;H@G$L)MV zCVY7O3CFEm|IT$K@0Jl9*cNpr4UDE;Gt%zu+sw96>MNJTr3{p|O<+G|b(d|1^+&Be zdd=x{JrHf`qbtJA6QIa(UeTM;lA%@+ymAIZT!n_UncH(2jn^0Kgc}pGg_)`*=guD{ zQeH`^CcU4umCzIQ$-3Y-G`}R^GTpXf@7tN#2eC&5C!#L&e&ZG9*zo%;?G`~Lyx(1! z=ett;CZkDS?m<0DX3PO=0vrhliFdHFhE zce~@a14E~30DwejSetL$IC;8M)OshUxIkBsDkU!mK#cuQ;9{-^CBJ+)2yW|eet*X- zx%u-Y{izRk#`-|q?#g&r#ROLBhew6}+YjxDFctGN}QUhO(p5b>0g zubDWkmI>V)(!#jm<~*bFaTRluQMp0gTxnE3q;4jKzGTkn!qKcUwl;o(QF#YR(|prj z-KA^VbQfe7nv-&#mS#SdY4~d(JBeq;-yiAbxH3$3n!+Q-Kdc|K&|&0Nj5VPopv0MA z=JJhD5ryRXGwBEECcFm+Z;?F!4sPrKQ#Nx{LUmWPoRsA>WpR!mO91zG<@J7%D1kI} zEMR^38qZ^8H}NYgUSv{?sCB^XEl68nK}KSxpz=bQL!D)6o^R?FVrN)P_e=2=uzG~+OtJlhelW*d*V^WR= zMWJz&3UV@49Ck#B#?X233G*I^Wp3XxH)vivN`e9(=wNlY+kw62E9wLlRB51*y+6b} zpb)-8?}!BkM}O#aeZm8RN0j~_(lwoZRTpr6D0Nl zUN}J)T=RVR*$|5sUzJ$wDYgEKYB1VPe@lF$lvRGB5pTRh%_(`c{%j}G49Nb7;KD3< zIk%Zz2*WS14^B%1@5%KocQ49qKVC_ata%EunQyU+6zzyUsT7&!fmY-_I{R28XA?eX z{7oZYTr)d6E@+D~gMVD$;=E4FL2iM8fcMG!&Pvhm5$-KM7V&Hf6=4$Lg*AT6%G8%4 zuT{|Q2rw})m@=^6hKBVq}CX0C-c z`&Y$M#c1r@W>zP+P|CM`!i+{d{#3{kMsl-;3_ZD+R*}a6Epz!) z-|}mL9MyN%LNz=@e$uOE|RqyiIiNhP2qz(W615HUdQ%|t?=g@*G0@4Or>mQuB0nl)-+1jO+rsuxMO zrvJ(`OsD^%+yI}_Gb_4Y5&V>m($o&QEH}D-AsI&32l}x_%k2 zefPLKl008FRa)tgw`v-@`EKlDp<?J?8x32C__3@}rO5L`+nXJAHeMN!sBgt;%JcQudb-y;nHKTHaRdlsxeH zXzr9zf*zDphP!8n#;!nC@A~U{2%ZwrBV<>?xJLoSS&oFA?c{~b$u zAQbStb$pTDAwl<%uWC|TV^u?~s;^TMP<6E`Uo}09a!-tT?)w0+rc+lWt zMD~Cm&5tSAn>PoaNS)u+qlWnfU9QBz7=7 z(M%!o?on>3&=R@F9j+S!8^LxiR-!5WsKy~;A6<_1uEZ$ID?Ck>Gmzl+-mLWbL`lx# z&zjzLoa~OEIuevwV#Y@l9~XG6BcHrS2H;>~^gCZt{A-yAu3p1{i@bPcvfoxT8+wzKyLDU2Cu;vvp#(HAUUH zWW`E7Yl^aB6TQ&^(NaWX-R58sk%eP9*X=tT{4(OR7sjT0d~{q(a9DImy8LWxG9JQk zKk16%Y1Cd55z0ASFxOr4X(sqXU$VptDJjevy-d2`OJ*$TEj~fUhkuqZ2Z#hnFIi&U zGXpcM$9%s{D1L6tby&o7^|$_(4di)ORQdX~HSzS?545LC4T>H_pA>nGWmh4H!mg20~a3dJpxmDLY-<1c(6 zchGnH+Rx5CJbshIh{RbuCzBq%HT#%O=lDJej(|SfMd2u8(!@;t{p0HUPeO;%K2Od; zSzkaUIZoRC;9md!|E)i`Im0x8Q~bfLAa4k33P_y-q$Bdc7WU3cD(h3{1UmE+{(Ju5 z@F$LrF(+V5dI^nGNuf;}YxS1WmKU1Su0{9>l8_4{aMuKj_>z`n_ z+GVP3orUSrQv3KE8xP6kgiLEwHiGVg3ZKU!Iu!xWMR{epSTfW8Zs=ydfeo!0%UPmtN6qvnBA4Hxb?WQC798|N}r{Vjr)bil`71O=Ad z75aI@XPvwbC{%>Q7kRTy_qfpY6LGwL>M*C2DRQ<@%{+9pC>uG>6CC6*+m6v$fIqoN zBv)=@tblep8;%s5MZ=QE1A!pO-A)`*J^E;wt!TE~y<6G*2?bGh4(8~51 zVhdDc3YH+#tAp%-;{UJ+IhdQ1dt~ZNu>$$Kly%2emzLB|(&`fItFdIv z3f;b%1rB2p<_`{74^#K5?!%nH3s|7DQG78Euy|!~lidWL#V232JW*$Z-MQ(W@E7-Fky#^m<`36O368~z#3MIkZe4zR6%Mg>=w!-q+_ zD(paFRwP_aVz$PHo3oa9%*)LsuJC)!(aS>z@ejejFsh{#@W6JZ$gMmgYL|=!#=v1;*IlHt;?V6f? z1&cxg-Ow8^5L%B|0=uZhdIUivg*6Fvp&v_t@EAqr_bJZbbq*GF>foLfu5)2w`bR00 zNWA6MAgh%`k>vS&bj{j4pVRjF?X>4M-r1IwzwKB}uYBI$Upu6^eeDY3-tD$geg6>m zzbCX$$HJTZ!~a^Rf0^>xoGE=Z2&c(-(Jfl4NxCOSPww0&@XT1f^f8whxZDMR0F4>y#;vR zc`00*iEE9T4>NqldyOfdL`4nBsQiFV0bVbqwjB)o?UR*pHYRlyXGnpov05A_h*=JPA^%O0u)B9Q;AFmb`WnKBCzfO@TZnozs49gp8@r5 z)1W0Kje}X;2fc`nf>A>3Iii+n-O0+lz$xaZAA^4<4;fm`KKNCYmsGlV-$bSHwU4Iz zW3nM5(eKCmj(oF+pOKm=49wg6>T-?}1Ve zLk`&uMWW?2uB<78k83iC&R zs`k_2N@dG#`dLd3K5&gl3pD7e$;vMhT)20=?uPlArvG$oBpTD0x)*;R9YbEXhOxnr!FB3lKxzW)rd!yqL&qhZj zA^oq-z5*+&lRveiw2l9~{XwZsxBcY*;7R1F^ASa&*Wgh?#z&ou^`iWEJHk6zF-ydx;=$X z<6|l1_7-yrDAa`UIW{kCMN%HMQ}Mvhu$Zby#gjY`m^p}jOn)i5=VUGcgy|IjI>_B-f?F)T!St4Pzi6l!6M-}bB}lBggftAa$9I3MDYFC|2dT4c%e2Fw{<%98(Gyq z;XEUht}IX_k;)+5v!s)OdWfxGmKQ}0!_@nI7_W9u(XRb6&&2L_#YR6E8~?N@_trBh zw3QQEzqwaReal$X-8>j>zIREkw(M6i3-`Q-9~Ebp>Wph1G&78?xXN_v3?6qdr;JLm z!N##A+-xkunbf^Y`gi=gKLex;in(z#Q1CcZ{RBRz+8aZaOq71%$wC)YzrIq_^xEO6 z>|SG)GTAYScV+GC7k`Y<)0PZ1KPje}Q^73j!)h()p-rQ~ zfvoueTTUl;)4h+%u)SdIqlWnO>e8sx=a|{qIk_&)u+*RBNg0-!C=~C z8_cCHTN${6{%vyQZZ(o{{>4iFmK6@YlXT_V-V5N@Tc7-Ek6IkQ*IEV*ll?>pEHp=* zDaL0my;=)~{xA0u4#W0dlHPq%p5_lI5{Yyq1Yl}+)vxqg+L;KFmhTETdyPn#T(Q#L z>7JmZIt;WKI=aA+9YL7Y#VxZeL~au1irmlMkc?HrMeNLOQv5nzu(*W^%@ui{m&t`) zWzth+vVeYH;g0{Cxf^aS4c%kT_jKAaKwl*A6nVs0Eh0Zmfs70Gs`dXL^0-2Xx*b(K zQX8zX>R}4$v^^`NbS;hYO}%@gS-Rxva5M5SB5i7}$oagy$9I+Yg}h*JzjcO1t2y3J zp5_Y0A~A|xxi`C%rhBT@Gx%j$gk#g(mSvHy*b@tR#z7@^8^uj(c|Iu7y@bGV!B8r(e$NS89X*W78hTLZLoa}FAT0dvB^-HXD_fYms`ZN_{MudbLV@jLczMpI6oy>0iu8(f}%Rg;4*ed7~o{!9ksdiizo3dJ>;1 z(66nFkL$iu9VT1Pa|~;0tyJp?7)Dhu@wMCP&KCpNv3ag>S>ki|3Za_!ZtKgJ!p*@+ zN4|X*T-?EtZ!9m29+l1(%4+{n)#I|}8&@@fC7{lTfR0)~1tjX+zDZ>riR(%+Z_=%3 z<(d0a5_N9m=|U@z4DwC$+L{uRa@1VQd+(@7gE9|AOv>Xj1GysiHtUYA_KT1yAdDz)D5*fSZwFG{#GIu`!YRDex; z3Yt^Lh#`7g$XX^!uC4H5?{CX3c-JjID_54L)4Mwm6p$U zL?hdH5Y>tW^=sT3WGVw*VJ$}pGY`kG+0cIdZh z;;K64`b#uY$rrJh{F{5ZfA+zXs}+q_|)eW<>hZWN4(l$<_)|mEPLH zcXep3Bx&p+t*sy%EQ)rUs4nL)M`T>1>U^R1&c za7RZZ=Z=DM4Wgz3T_yRZV0gC?nI>e^^a&Dq3o@iVoZ?kE*DTD5#$@RAsEXM1HXz%k zhvY^d6@Uc=$J`S#i+Xn0GgK`JGDVx%h}(mj>JjO^@c6$#7r9!^mc7!O0-#-fGArMl zHe4?@1F$H7y6%$`zIkphFR6Pd-h%lO^K#^G>kMI-j zXiL;*!V9Q2X2}#NM4sCHe=^_ILSt@`8iBG1$6&gi_|f%J4`0KgK^+E!B+^WkAm;jE zG?G3eWa+VIMEx6jMwDxCsu)`n8gDKZckJIWHJ9$nXPG9!?pIcG36+@sV?MvN=o}=+ z@pk=(IY{LBk3~n=NI~OB)2^(Hqb%^aBsiOy_Qf*&g&C8PMI2_KE9^f;ze##iEyMVb z(_kRt;^(SpS#Fh3u-y36(q%-Z3$X93Acp-@6lt$~MY0eejK%ixYhEVu0NMlr2nhBJ zWb25RqVyz$w6e{Bx)x75EaFLu330&s>Yd6I zF4WY!!B`P;gZTzx@C^ivlIyGTmoNcm3BfBwr$^W{Yrd^Ss&d-Q4ARj(6VReC_RAMq!<16&1omd((;pl-v}83C*A^!kJk zGoTawZq9XB!g6alSQCyL0v`gD{}j`K&j$w}(U!%5q|V92bHJv=9prId#gOF*ov^0A z%s3%$f4Oz5I7l*LIGmto+e+_($`6UT!Xo+UcjJX}O7g@kQZ-4*3EYj&%kjd|j|t08x&qhAvl*cvFe zwsAsZ)n?|}%C{wAB??j}9LDNj5iQBxSWXMErrxh-Vj$zX-EN8I4QO zFFvl`BH{SA5^G0e@}auKGQPW0jEV5(DXhA8br6(gsB^RW@&>c|&iO{A=vI_i^WJz| zXJ|y`$+}(awi*}14O*Ba6L;xSZcGQFv|9ZpyKN=|O0ynv6kc#;rk(X#$-3T(j?;{$ zW=elhx-=1$~5r@5HE>4=AlZ;EP_uowN>bhh=mRcDkLJ+}ieVa{;hR+u&xL#k! zwjMr(k|OSCUge0%LW(i&dNVsVR+9w!#i_q?}{b@7BAV(nks(zrIcR=IlIlEm>q1=0d+_%hQW0W>BN$^}a=JWJlYn zTeXU#@#&kQV)TtpM3x)KSQgd{Xg4v>!?Lb6p>Hr{#7PHY&fAdN6K(T?d505?=OQ~P z>_DKokL)N5Far2K{C@eIB0~FW{fF4lhMM#8a8K6 zV^-E%!u!Se^rIVS<<}8_F#SWpN>I(a1XIRxZb~;|9O{LwT`@dc{F3E+4G>axgOR2{ zDs!KS5AkK`7^bh89&3l}>t-nYGB)~YvwT}AE8oHf@#AW&+rt9jmWa3ZQ}g1MDj~E0 zW#6n;P?lPY?fJCw_y|_AbdUoj@oM8|;x^O2gBh?1U#FOf6xNNh!n>n18q*@~_;-pm z3946|%iT~q%eq_)Q2IB;Vkd|f5}AKOaKWRkHTn5A2=A~i@zQ&xrNgX78 z&5Mm0G1vBh^>bzL&fPd>$(5#mn|@ih*uX2zChJ!syu@d-H<1(+r=Ox1v?50J&|7%t z*&Z$4JnAI8^CE$7IWlGVKJIw($NTFhfDG#e%J5mt^Q5(Kmxy4Ps{c%7c?=A(3n`cqE9*RQH2)k7ZQoaIyV_W)9fls1)@sc&3fvk zG&q0WRJoZdXLYL3nd3rOq2%Uzsj*qS2_JIIXaDBp5w-(?1>dUD&1QKMQyEPT1r`j> zVDqr%?`FW?eIG#*&EH-0kuJbmH;3NdsUR3rEMsO+8phu_3S^gBQ+X!`1W{h0*P^lU zQW?YyBVxNPrbuYo)?HK?oQwH4Xd-k0ku?`r6kjRbAV(f=6$kZvYHb)E2a za?0ees3C5Xf;j2W64atqzt4WGvyNBqB;6V5cz~{xo=>F#^n{V4Ku;Jslc6O`=fqUM zL;8`C;Udcme9k`ww5>*MM6<-&CM&sGNwG|nC=z`57L(rCna^ik%!RZLQA%>gFlGq|pqGLoC1s;YPy_viUZQx1GsaPyP zDkSwZH4553Rxo8xwC;RHW~VExc1&k@{ShKz{T;Wiw_o^=Im5Fp$4Q*^g!-Ey@lk1@ zRQbvRPl*-Zs-|`#v^f#lWPSM^8Uj9q;{u^erHp$fMQ5KQwVeDw$b=tR61#E4sFMic zmbRC|4ff%{!iLtLF|-AiJ`_$`D-}f1hrFl!-WHmbrVLPuO5~Tz#WYA_WFhK3$bf)d@rN2Q9QLJ8HUVDL^a=YE8HOXuA1N zpv#VZjv0p&ak0`P8gD1C#ljlZPFG&#jl~RY9HyyL<1o5UPKc`jM=WOzT3i{j{Qt4O zah|ls>=hgYH6gA1gCAVD+jxo!WKn@epIL{+AH^y^A^CUE5d~Lil0I{yJC~OKQ}xjd z`f*ATjC!R#w+u+r0uGA5%c+BNSE0x*m8=!lbj$8VcB!ev8an$7kSm9>A!64+M8kxh z;BtfvQY~uOBR(7U&zleLxK@5`d|%W*Qxq#-S5yK;MC#P4L@VPm5SG-@T41Wk0r|Po2OShPxTbXk)gZ#hwoVF;z&US72{4Aw0nvboIRdvp5 zFaD*o^@zoMWc)^+oK=E><`HHszSDdmFV3ybYJN|ZH#V_he2=Bq7`t}Irk#m-%&pE? z-qhF>{4ANxKEF5gh6n=8#`a*v&EB(Z*#C8H{7^-E))w|gUV4vtpz>t!dA=&x&v)`w z^a?F-;z5#tkC=@PJFTX7Bh`0_Dn_6p=gBZgM?u=&I6vQMYQG<(JU+S92a(k0lvdyR%dvU0+ z&^|6!+}3iI>C}s3BZNZ-Q>xbgZ%3>MGPenx{5a*{R*f-fnP>FIibPQ^mVQ`zF~>)f zX9lckOgt%3Ut<@xGXENG zzSLNK89k0_)So6Ot*U#u#3nnVPDVF)Ud7n5Q2#MM0d|1Z7HQ=?89{JDEnCMTrm zUY!&{ymaLCv62kmY;W+|s@#fC$Akt|TrryAo1D2FS^Q3`75Y`hr=uj@NSzMt#184A z&h27eJ~b@KG1zW&l6dVWU*G7MPxt}h_g8Lo4B+|}*O$01B}^gQ!r*_6>wbbGJKLGv z$zO(!%glCVcgy0wdv>-vJG)1Ac29*L0Q?>^OQ3!Pld}-O?j4&5I8jTpms%yFZkrd# zWLE$b@W^}@C`Ug648poi*;2$LZCmfDDt|^Rd^{Hp)7Xj$7aI}fVudc60#OiIO3Vf* zw?!9{1M~}~3Y*N=f%$}J54RN5nY{z0iJ2a1)A^DmkXctKK%^ESnS3liExtEldg6&A zZG|BV)Nwmo_BzP}5eihQZ!R0U7!+q4KiUk7>{Y&DY@MO|gg!TjnMkKmWuNIRK#AQm zX_i{fycOT_o;B;{XzxmOQ{1YEDXN-vQ8a7nE3Wf8 zqpM}izRbmB{m8Hab33XcPDpqD}Oi-^VYX5MT#1=YzA=~Nxn)<Q57&{t8zOPluFO)_*8pW9^XJ@D?L*1l~FGW)XTnt zKN0uRyU?Qk&D4z!^TA;>s_|wRn~if4Tje39tZ|7fS8sT_i4ienpDAD+x(!#7>&q0f z?{55RV(V~~SRy3xv8OT|rnj-b`QT>Bv6uPaTDfMK502nkfpd{y@0l@e0Ey&VRC4qA z@H^eZZ#UyR>Fp*YN?==chdYtoVD^|fL!8N3<=Hg2RMawTI_565a)j8GjydEsRtTJ# z&&Td|+W0s7D96>)1^Z{rge+>Ele;dV3co^}u@i$@(XK+*!%kyT@v-gKuYJ&2aj!dZ zvEhGNWpex4cHiIGe;us(V@z2p)AZa!z?f(#_EWhD#r1?hficN{td@F&PKYAzA6POL zILp?)@Gua*xz4{=lGOR@rRKH%%?@kXfOQEwgA)0aQ~@iKl9aF=Lr}c0&VN+CTHrRk z_zMgE(us4VeabnKP{)q6I?Gg9xPgLWG=U<;bx=p-JKL zO>E46q7Jm~esZYuuaiWv;>tSz!*aJELn?4WSD-SPp?_V+3QUsEC+RXK<;b_HBALl= zCV4x2W6pj!e8#(IxLI5|(X3f{#=+N%a?Gn+!n-dlz|#RPorV~zXETpx&ahs2OiqMg zaus$ZsiE%CN|=z|MPD;j>pvqSkIv}($&8NHsg9AV*7++`UaH$vc2sKLXXI7QM^tKJ zGOv1j=omL$seLM!d??kexp><)ZRvgF;7I0xtb2Pvk!F#@v95C%PY%0&Z+FZl(i``S z6=$>fk<>TF{Sk?2+o`MWCQkcu#g<|USOGh6-!3{ zs2VFEub1x@I0ae+@B!D&$&vT(?J)9IKl%K>3oZ3Fw4`-u2Wa^+>k*yu`0wmaIof%* ze$Mc|4H8Q(x9D6t_Dc9HJzYg2MkiL{OaiZQ{~Z$7wy#%&at;$F9dXKrqVgY z$O7(ml8n{!>Ce z_W?q3Lz4Za$P+&94O^MPi{xiu*vhcC6tBH?Y!ei=(X&l3P&BUvUr5DMRI-A8tN>>BV5^Yp&K9Iv4g(y;+@dIC9BveYHG~RKI1*ShaOaM~7(D zD_6V?!PYUK&#oq1M{qzRm4ANH|1vTpPX3&_h2eW#9?*iK{BX7Go=baEi=%umWU$>?AlZ{bEKLhsAd*#dk}OT zq#mlGc5Q6@5@8*rZJG^ZbqOVbJW-qKX`EVcb?`@emmLHXaQRci%>$QW=)b~!tt#2U zg=p21K}(16VuXG%j7xaM=x#>kN=lSm{8hh!RT&B?Gu_h9Dz~9aKjNdC^hW{7?LhdR z(cOa6!!=&3kN#w$wxg3Q$Gda~pFE&HsgO_V%)-%#(FT7LZq5$=BHY|P_)~002iJ$2 z2L;#CsGvEYqnjFB>e}2l*c5Kg4Wib3e(=3^)iGAz#B?P8$8`Q1B!9bsZe#TX{qiOK za-Y0B5WCuIiI=@pEv1u;)k2CSA4?}a%B5^{+rjzqSOr7F=;jK>XD;Ed1i5b?{)05h zVDWx9&yxw?CnUdb2Y2=;3+&v!R?_^0@BU0k{bi*79LYPUQ>WeEK5gnFut`ZQKTfoK zfK#Vk2bDLV!aD_HY7+2X%2w~vXN9^~keI5rS;@W3mf1jKfsrfNXl;_Sj zXXN7{d_efjIl(@@>QHa2^8|Zv;|`zc70T4}MLuCY5Pd<-B@`(;g?$B~;dHGwj7*$z zOX{}f{U@S7O@c&?5SqqhkxvxM%@^?0_4i_m3&Aj@b{shcMyx)>>Ld$-vHD{on14+( znSXeZ|4u*&$?QGOLQP3flJ;At4!Ins3df6pkWsl+GT3juOC0h#csjPqVt+}9$}s+= zJXQhU!*LB*-)wqXQxA>GuzXU8pN>Ap*6MKeYs?&D^>>K`Wb3 zG7)Yu;vO807D%YI2BBF%7`Y2W1mjq{SQ(dpI`dK2WZa`Nzp9_BPeXFjgCc(bGRpaG~ zvB6Q=k|2I(<|&G`t=fk~$f#=H_irH8{FJ#tPAodQu=D7fI**pdcaq7?okvgYJo?to zqpxijEnRfubTuUJ?B1@lB(^f)5HY8BMJjDPFIE37{xH>l>r{%=a32vNtko-sr2p>F z{dcQ9-2X0Cd9Skb{)T)Ra-*C#Be4)VVY7_gjo(pY*Jt9h37q*zH_Fi}trw+|n{`Ha z79dPmE=Ld$cQH6Gj!^@?f6s2RQRR?Oxm)?sKb?+oI5^A%lcADtrVo+Su#f)ig)#D( z5jg_8O`<=&R`tM3f8V3DUqw|!qL1n5So4#zk1dg?gA(;Wm5i&n&z%|knq*T&HfqFb zj;BWK9ZCh_FS2C_kr<2|APN{}KpZv<%g4pKT3OW!79s=eMvReYR*QBjyTb5L1z&&) zVZd6r$Cf3;p7?(2MMpPy)Gb?7oLbZ(^)QvBl=r8pK3S+r2~KT=w*C6Wx1Mw1cfyE> z0TzbE`YX|@Ngp=aO$zo+YtCA<3+^Oo+UzW=V-M9BR;A#Lp-aIfN2lWMkhuRKZtYjD z+vs?mrSYce;EyvlI>r#*DBkG!i1=xNjgEB$Nwb4Ats4=fH{zxf?j`(zaF}p8;WomL z2{i=$O^+TuoEe!e$b&t)Wp#J62c`0(KFM7uiICa*hfvvUjkM46uH8{mQq=bu7Gbdb zOd$zE(z*c*PWjsw;I}T*4mpMA1z>nZ0KPCsxu_6~_XgCu;o^-#nb|zpm?LhsXSt1C zcVhsg=xohwg>Yckr{Nf?!vjRlEEak7~S!M^u2{*B+e-;d?3-b zJiDmg;Y1?n7B@g0%ByNy9*v&bp*(kJ)~>x$8ao;IL6q^F7_kW;*YS^bP-Ke z&WC8Kaz4~$E5DpxDn>&}B$?2)F0(HkYd3U;9!lGmOOMdB?ZX(zU8=mK>m|G{g+G+? z#P!no;(96f3wT%x-Uu%eO{!K&Y>ef)8Z*T7t&o2M*3(y>5yXMDwTS2VU92&z-F4bG zYsxi~juM_jyC`8Rq@q%S;x@XrPY!#{=Nqeq(FNA?aOp&apYgj^{SLiJ(p1lp-v@e1{2KN9CzaNcS0lKW5OxIzX_SV??EsK{Rrm~&L@1Ca0y`? zVFFn>a2G+!Sx#6(YNbvpl|o8R#&Uv4Yy0pN3W8a zy8z!k+uZ86L0YlxsA{Q4#T-}nUUmP#ccmY6f9h7>^k?aZ=kV>N+a9H$uMsXI_y|RW zDTHFeEW(Y1`GngD-yz&hSV|}-gb7L5u<>)D0#9*^rsV30%*PU%GX5K!l2&lK$H?-R zm2#E`0$j6mu@~CV5r&TaY+~=X9gRIV$kQ4pW`|Esfgn)13OK_jw73hOL1voZ?QTo( z#%KlxjXYCymVL-l2(M)Mkrx~JO=K$1DpQfVy*iWF1~Kow$b&E5)6T^?e3Hi^j(>q2 zd;%|?Bku-@S(BBR=+V#V)s_$JGR)QwQl;n*k`2Br{ma3v4W7Z5iKXJn`L7wNLQ~Dx zZyrs(VP6|XFE-w|(Q$@8mwV}N*@s!fYU+w)5p`7jNAB6WBALRDx+2XSDbh64q8y2= zEgDG3bJi6NmB+fGVfvCU7x=owjLQrTBdPr z(aqf6dL&oU-ofp{!!JneGH&lJTk=b1?aE4(-^w*yj{W#iBG&4NbzF|9h({!%;+LEF zJzKYOgFNw9xAHgohP%g7cYm_)YFGY6?!=zL%Hw;v6Ww!9(v&lPi-gTT4siQ6taGh; zuH{Yf!-NAl$c@c{qGDi#B{QZ3^#ayiaAeN8eyB1%-YK);;od>t}BXqGY@ABI+rpwI)3(eX?+`>VKSamHNEs518KQ>>S@K z7%Rr|W=mBD$Zq9r5YV6l@?!i&!ONnvTg*>LPKmr{HX93GSf+Iq{)H#9|`RWj!t%#$1s9oKm_- z39kiaS&M0eaf#kl20Od+=J_C|?R4nU}%y%2rd+vW37(Sgqu@$%ZpLasdCA&>dBiu=LiGI<tDlQRyKNT{p+|{+t|ITEEKm4`@F!7U<2B7!9Apn{y zXG7)X%AbQ1!HpGTzZwb^A~eIpFWY8-T-NzI6I=e#ns8LI@G8aC$;`po#V=LjLOkeQRGwd)FiU!kX1nq6=37A zGU)cbg%%g5stVtnlw!pRvgGU-k%8XBp@C^*9%AA|XCLvs0yC22CbpwbRQTrNgW^U# zr=oLDFsY8mFOat%7km;vn-N-IY|R)S4B^>qqLZt#cxt=o3{4lKKW!jXYpbX!XU;w{ zsn-7|mYT;Xx5DQLT`^0>o<+i?mzyd$;d;4o#vee)K*lV1j5H-PaeQ<#)GZOnZG0&a z$ZI?R7haq<RQuzDtB9<0FBwU6`JA#Pj8@m)s4O zJK4nIIdUiaSiGm)iOfe_2$#Eh%iT%fLpeT-ixmAX;vMmKZurcC7J>Dh4DDnH`Zh+hc zW!#tvM47H32ur;G$jyoLJwM<#aZH8|+`9TqQYR z&-aWf9c&Sd$_Ss$!w}@zL7|L92DHn_m&h3*5Sfpxc+Ikvm6lkG-eUNb)h2T49dq?Z znkuar254qUOv~&#XPSk>SeHT&dd&SOBw1T9jlAaPvWLXCF}}No%AG8aqpEl1aT)8+ z$F@@AojhV!C;14qZr703$LlJ}^U;FeHHfIjTg~F3LToo{HV9#+@+8xHmn^c4*Vu3F z=8dtn>C~I&oeaO1g%M2s!8det&3l;RCbzpTCvmw>W2hbkk-c=G9iHoio}~?UFO& z2D=})*6Dd09U1e%vABLfc%6{V^H_o-E6bUcm6bur%yMOAbt8SB|A0qE$Rjim-uUK5 z$CtQ{AY4Ik0qMuMzD78Y`>VK);X0k`Ceq%(^_zq{2ulbRget=Cc(;!0&k2tap5^&T zt~&^|g#A4KldEG$mw(QTA(<{nBX$CJk0C>P4#^%e#53d^9o5V5_U_X+XGlLD`wz$+ zION>(hU5(yGH7rTKdGjp1i$ivU$t=W7#H#cOA-6HeXUyKS}>U!%0&=QP%01TR3UK9 zaybO3Quq|og_j~!i}zAg_0Ki?nso&=ff+g-M#;>H`H2Rg_8i~Y(8kn}GbMwVjxvES z38EMNy0bjDtTz+E-e@`Mw2Ht8M==ZeK?ImQ&bIc8IKQ&)UmR}k54W;;Xi!)S72_N@ z?|PAT>C8^ZuC3NYwr%)y?aEjFxjE#7SLF9ID(A9{h{%l6i|U$(V4E&A-PTY0D!ONp zc1%5(&+De-t94?^ct`D&>j^g#?jV3guTG)9TF5EcDZAmV`rTioyzR&t%LM#A?fW91 z2=SO|{`yt8ez@=MN)6qX_I|qw74-LEiZFarX^1SAY$%t>Z;b`qkkrw50XMQ)HV))QEzMqTWLs?P&W-H6 zikMkekR&L9JA056MH5bB+%{=#P1XfGWp7Xu*pe7xu#9D7k)3D^{qa?bc#Rs@?t7O;)2dzizTyiZ^R(CwpwCB_4dXI78oqt0)2&4aU|r?nMIo zvF5uWtEB`i#b%NtI^EUyOkI}bVb-SQnNP2#=g5X-{y+d*1RQ24*fuKhK$$RC3m36Y zXExat{|<5JhTMyArR%<4;nRaLn{gV0sZZ0fx<zo7?4w5x4hmO@`egIMJxY|+*N>XXsJ(QJ+Wi;kuMsZZMi#9b*XD9yYuR2LAOoldzlN~K6D#`V{e4 zW3?E5OAg{gdJu0&4&tqCI`dW`oyZ^x>$$a$i*+=8Eb(o-t+0I`%jd!sZ~eSiGFM@L zw??0m^PZ#@&UI__Q5{WTQn$8+UEjViyE}gOawpv(9Fp|zNREE|mz^XQK2@8<=>yvR z$)gZ$gSA?9S2B(CREIQmYL$u~;~*L<`WMnfOD_$taB&v!pwChfY|}Hf zA`)M*uua^P#32xEME1&Bpw zD9W&mr=Z4qbt^Nmai_YK+1L1_x)qRa{C%=pf5a{bXv;J*9gPnqqv!lWMazUCy26gO zr-$|ED)m+%*L1{hmsP0dAK}x8rM%0$X7M{LZIEVVhHkDX_d0@?lY_ZZASqn$g!;*J zUPC4wrgK?4P^rt3Ex65UxvX6h)?KqUbiPiRwyL&ISC=J&mX?4gM>_CGMWN!@E8?2u z0^IPrKK|V;&0OKiFe2aLPUjYXhhwX1AokQe0Kc@bE$|1gXa~=8J*Jt=JE-ywo-6qR zIbk*Aspb6vGB?A+lUdH!vyCNq*pHxSr)@!XS+YOHXOq4zOHiu#HQaJOT>71jj*SG9 zFpl8JglXOSmoexLc;tj{5$+>o*z<;-)_H8ek<2aynm1IF`1%l$=!WZVbb3!+eQ&m9ijJc~Rfi|e^cJaNQgg`?(kNy$@Qz{3!NaPaxD|B~E% zt~NtIe2>?m3nu+ch!#v^oIVU6yLX%{t2)Qd!RCZYH7QpUP0lK}eTX z+;ek>`fbvgJ(kK0c>NU*ztH)8X8kJe8K0J4FV(+}kZNypdVZhq@KG{9J*a97InN7a zLENdNv&n=nD2!d$8yElUsPF~lNwM%MmJfFXFEb~NF!vV*tb5--YBTe`=fTAu%slzj zX6Ai#LVc6u{_y{0pJdah08|bUOKTnsl+A7J6QLi&0Z2SHvkIOoub+P zg7rI4S5utMc+JzXQfF27DN2du3_g?-((NUlg5AF6CE215YCZi=daVy;L3)+Wm}%Yr zu+o%w-Ul}(&-(XUc1C?vM(DG2k(F0v^!)FbTFWPT%4`Pnbp93TFN{7krwLuoFT zVfvCUm$v*&;m!&_vkf^%pI7cs`n53MyygIyYraFli-h^s%skNiw|bUx#eZvo|27=E z`S9NkCHZexvkBEszKSzOi)@dDQgqbNhdp7ty-HFngn0_y1k#1srs?Q{+4GsRu`X7; z&JxQFoHpP_&JrTpxfYIgch(pxf`ogn4lej#ptB#D!TCTPAFP@)lzk zL>t%uvy9b!Sid0*xbIaf#fIfcHozJBPO|};nMRM6&_pfT-C3^>U}! z0K4Q)4h`|ma;J#@e~>#x{NEsVqB|3RQ0~+={eavl;{W|}CmT)Uaz)W^3@UPdA!KlqWd@Apx6YBGZbf_@fyV{Xq;rzsDJi{G^%zc4jD96yD~jGs}WC~iaLHL z(UsLt%R$uee@wU4`Yn{AkAvS4<-o>g`0V*cWEJ8(2}^;0X1tD6baAMRBg#J34!> z)_BGA{z>fN8h}YbP1Fz9-5Z!S!>X$V76%9|FXSbIUNP55++9f4k}owXnHihC&J;Gq z@HT9UH^J7|%)2W7Lv_Xxy^(cDLqX_`PA%l&H%!6W!mH3vD};&X-^_I=*S%avq-G@9 ztIo68SteP^{E1&lp0}?Zc+W=1g@j)bUL#yWxSUW#_?YlG!TmjCd$?{Q%qIMdFrV;k z!eT->VKw20g#RQQBJ3mlm9UF2i0>T(yZ&$bb6rFxRicSy9T8Q)`QbhWvlSC<$jL^9j`2u?xSLNe>MN@t>iTro0p0?evT1dCB ztUB}Vg{Z$K*!HrzZ`UO2JNZypJY5iid&%Nvondo1tMVyJphC*QyhxJJgS5V;8<3x3a4`L|uQk+ku+b zP-FF0B7ly2D;0Fy#3iXnx1TqVd^Sjw5N|Ze=eTqt@Mr5`v#7y<5UNkJ!&(HxK~a6| z64Ymk&{L;w6`@B=l4{Co<6pQ1z9mPp6AGqHa`iVg{!VsbS1c`IFoEfgquS5EZ_4)LPs$+`C&;@AA1q#d%>zb$mNTk?_Yg4{e1tcHR2g|y7b_W6K08cl;~A(aOR9z*3MO!0uUd!5Q2OvKa$3BB2tEJ9phZHNLj}~ zn(=sy+hz=8Tq#)>AIDz7Q@3fW2k7k&7LO9R0dze>L!*$8mV07LhhT9VM{u$6%3oHg zc4`4q2~i>%YJe1i1zmL3im8Y6^{AMCUkTd0QU4BeFUA)~y*?@tom(9(-y5ATeoHY8qKvGR=L!ze6KmT8mwH|Gp{Sy^LR6Tf&rmD zqfYwjjLOT{a+Mvff!V^+j7NE_pnEzs$=OKpMT>Co-I88HjdHW8?PCvy*Cas$wWTsp8VvP z{^TL`$uapP6RU5)a~Dn=wd3H~EeR?%t_44i*9^tCAXbQu7vkFl|2Jj{{#KiO2Qk<{ ze0Z|U6&FMt+uXgBN$05l=#>hrC0Ed*4xY~sGkv-X?>|ufkWd(Qf2^> zV?QDo0jx3d%-1sz^$A#suq4YBBhbMSID9Cm$3#2!6q!Yf`kR54aLt7UyOTy;L=Dv3 zJtJT_ZqXo%OEYY@L1|biOd)_JMsKJmBMIaDKPz-2mX*SgsWd>+55S^qj{G7^ewWY1L z*!tG3wY0hxmDUWQAzKDr;lRJ!?lyG&PbeN9KM2{uCV`KVuY;}q5)C9Y}e)xoEDCu>( zI{5y{Sxv$sUPYr(w^LE?vq8Z zNHA7a+`^yj*SW%(smngaXng0lVD9vA=`TUtV?}~C2dXEsqhvT=;aBuZPo$#9`T{;v zu>bz1v~o30Ej_p9_s8>w{%<$9{;wL>Cju)^<#T{-kZ8t1l`T451C~#4zMS13%iDs^ zT1eKiT~@k>bXh6>Pw@)yCP=L-&1oe}-kKux6C;bd(bbwh(-X{%Ov8*{c&1x6!J;l~ z6vj{fL>$|S`?<=5g&FWGC))Du4pX>y`0erYYAc%}D|4E45~qX{KE(8W5?_B=viZjO zn#3feHOEsj;W;)RzPM!Xjk8{O;T_oaZG-H;y-bHXboW*Sf>GM;j?PFRQ0%j=bX)r) zxM0YQG$b&`i9>_4k*lw=GNKDTk;@aJdlm!e3G54XcFw?8+nJjO#86Fj5+D8 z?C2HPY1BBg6`+S=JFP4h&qSImi#fG*`Y-0s>BYQsnY})7iaXb{ERx0H+7`hf11QqV z>v^T?;o@xZ0Cc)^;tFO1O zvUS=;6^U3v%Q4qh8_dO61oDdH2_0Cv#CBz(yP)@vNAt_9SA_Xe%T$M-X_U%+O_lOv zodZ91TKGTz^6&_%Ufb%%2@EUK&Z zgkN+;YTPAO4Hh{39FdV)Pt?0G5W6)y>K;?sImUX<+Bso9UX1bajw8U;XD!5e*`#Y9 z712I8CekUDA!XNkaKn^8s0(8TAMah^fSh~t>76%{6l)95YuvHFXE8Fb3WaoQ5%SKF+AbP&R7@@W z?g}xR<7<{DhHy59(cNso@O~|bQ0^_^ZHYk=>miH0nmS0>)IoXPt?sNAdaa!|&!gK3 z?Yy}>kE2wb`0t15HhO|mOQpJ&I%Hcf>N$n;W}$%5p|qVh<75f1Ad@54x*->s&)V+j zoW*LgkWOv|i zg7chH&f~%bENfySXNC42YqMSK@h#{z7HBhu5e`Z@abM_bIwGT$2n8>ycgM>$QEaux z%e5W3xrplX2d!1(x1MV}!@TfZH7+7phI5@%oJV5x8L?e*Gafdw0pIT(NY% zW~nA27!zcVivO@w6*`rqu%olSi>j@Su-isdzh3sSc=Cy%2i zbkOn9i`$b@4;w)+@!X!^1<+vAvspN0ho_gj@n~@axY2gTx6O7wi!*T62Rmm^uyFcm zlCo=hsTkkFRM1^Vhe+yt+ju`LuJLVmKMZ zZOU)Lo(%Y0e9Qr*WastR(=s#v@PRA|lG@0Qi;=4$Jhqj4J@ zXYd97EM4`k}R+u3%>ajWN7Md!Jdx|4%{f27(SsRpb5DKgJ1 zE94pvE|CIzgL$C*%+yiu#*<`VFDQU}z~@sfJZ3;uyEE;qHTbfR|1B}5%#6RnowGv@ zusPtBXc?ZD4uY=^M(1#UshJ3-o`Y8=QSumO%{|b`p~C$rwtTa-cDz-#Kk81{OAo(3 zxwK7;lMEC5G}iazbJ3X}gcD!$ZMc~&3n$O@W6jCi{v()0C%(p{i%*U;7P6l7Rr2sS zy3ctm;l3xc!^#&<-0b@n9%Yh)Wj!*Di13Mup$hhVRKeoMVbFr#AR>I??4b(ApXjMu z{Ntet{+2GddWeE;*Lc=@k7V$|_IA&a#gh6^k9EDXAU&k`f6bvNC6A3_q{l`3-6JyaqO+atp3yqraEWCY#(mAvZF z-*72zS6^O~>uPLx!)5Ia7Spmy^?mMRP!EIc5#d8&gG_+JlE5k zN$FiU-$aH_6c5pb@;ouOhu%|BuuzYP%2t}`q`nM+JmY)@~RL3sg8WRNOz>^^X#d(>vSv@IS(|;9PAib;Y}^B z8+)rhv3BqdP=T~~OZpst#$=1mRN&K9gCYbc=YJs-V*2{QLetk1d8e%Kdyvm2+m5ts z{!?b#3I;RTn$xoRPMJ;gK~1)KCYvVi^Hku|5cgu%ZK3bUQQ;%L@QIrT?{Ykga!@0V zmvVS=lPT3VnRuz@5-f|X^rr^Cb3tkxmKDFc)Y|22_5&t3d}8F_4ThbwDRyjsWbOeh zD|?GuqM-x01Vv9Ya4eR=b!b^#g@S`S>4==!pnbM<_|Qp?0bGEu&O-%RM|Y4$qW2RW zy~Qm~_g*^Zr%9NGfi7QDk8BLwh8zT~%tR$S+_65~(iTo+uP(Oc9#j)A9VS~_cJvKM z+D1^@hPuJY)ZG1WE=GM_`~BOm{`1fBE*cscZgmGj&xam6@*u?~@#MER2{-Zh2WbfE zwaV0Rgil=TyW=g!E_`B!Z^NGeqBHlhgYcNr|ID$*()idrqr-1r7T)=f@Q0q&*Z7{i z<2L)KTEQ24{`Q-8;XZ8b&DvlWy&02S;Su|LcteuSe!6Z^2MHHTLSi<<$21F}%rwhd z^$};#;OoKJ0s#sIo7)}-yXL3*s#lj^y*}RFu-{@A+tkdFD{0sA%}?Bm-5Wm7{}B0O zK1=u{zlUxsVeu{4gZchruC08&^aI|Y`27%Zi}@}gY%cJ4(m#41Z#kngGDnXdoyEuP z9z86ZZ|9$YIRbk|4bv#!JtFrdot%E zI>`OHhkN{X@g(KbXI;Mf>L+EzamNtm&x*XIk;VSFOEk!xlOlCcRCpaOkRi&oReU{v z^45}?!nNL^rtl-$XRZH8_clKDi{I`L_Wv+zt+3wL;?HuBwek@a4VuTE{u*^}H)BH| z$~=Q6`-q}HRv(V+NcF)hefS?$G-%_b4{$yA)~J_2s16a3ry_-VhCgM`uzzXXCE}VN zZ+eA)ApW~4`ISg*kK8Xrbkxdr+!Tj=&EKam3l>Lgyl=*kH~V?|aj)DHKIHTLa-Nq< zw@qF7o^;K)u#b5RU-Pe|K;fi$Rr|Of+wZF9!y#H4$Aqr11nu+G<_tzWt%#iHr73DZ zp5i@Amqa`pEA$Q0>za(XYca1(>+(j0K8?TLcFY0&?8Y8U8iW&Tk<_F`9ph#U$0n=9 z%)gnZp)RZwfeEVBzrN2P%A@Xin=)o(1<#prdT4m#H!_EXaJ|j7*0Yo+vWU$a)m1ND z5~q10{DPi!iosQ7y~Yb$_^@z57Fl0)M{XML77@W|ctpG-HkB8Om$B|6B4HCwOb#t1uJOuT zdQ7bPZtO+6qCV#z4o>TVGoRn*YG$+L?Pputi?|e@%QMQR61!Y$RHr9exj+1&d-Yj( zxPbR&Xway8qp(&HlDR}oNDm7q&J7h*s}C;vy-=l~7N74oLJu6ZN(v;^8T67+|E3a# zS&d&m<6_^e_Q+gimF9B{H{B~8fGdKu8j!UDK1^FZMx&hn8Oas-IGn666_23Xax^uavK-$y?<8TVL68RyXR;dfFY3M92$Zc>l ztJPR;NTNQ*v{`R0*_p>xp<_WMn$Aj-Kj|@cR*WEpROc`!8Rb^17dfXjhb&cwW&*K) z#9p$!gB**O)+#?N+EZUQ2Od&3GsSDIz|_)5+*OCj%(}*)PpC)z=3O)t1Y7V5OuT*0p&+EU#Z}CPJ_~mJUjC**% zmMd+UqB+bY2S5;WKCS zfGmNx_k8pJ56?Fnt<t$Mkp&Y!8#8mgsk&WWEfV04P?q{i{~))zx_^*M&FmkP zp+4I`XqY;?e^9pa^bg8We?!8(PrE$o&Hh2d)jks>$f;dj_BFYP?Nd4UOSf}dKFy$c z@(jJD&w+j6(5EmoY_dR$q3Q?5W%6Loq-}ndbtj+3pJBV0&qI8k;`2P8H~75IXV||# z=E~nUU!y< z*OGVu_eWpJI9(b%FrD>x@vCr8ZU)`Z`?7<*&R6Iq6wYD$OUYMj*-@AJ@B&5$y($Dq zu;bjp`y~_-22O1b7}ST=uIUdY!bwn4SRbfVWn6LO9B>FRk~^b1Z2;vg#w|`k)=RWr zjWw!~Lr0EBPO3_eHO;E<#@-zr{!2!b*Ta2SEsRe2U2!t%-BkRd6`Rl+Zpn(N%)ooT z**iI9g|t~um#k4%hC@61ZiQC54Q9qdVZJt2F>?p+lbO>pV$`_+GF0X2O1mLy|;r2p>sJ zM8JI283VaFbM!;tq4mP}X_gfMg=MwAkbr*+1n?mMw0oA%;L(o6v2cz>2O5^5C zvG&J~oCcYVK-wij>V!r>JZxQrDg_T(;GTmB%gqk2gRVd#$ZdCNkteV}G&!);duv|Z zX)n`ISjA+I1e>^Z$WMo)1e4nG%r<1RsLeP=~aiTG$R?ix}!#@xr{iEN}B6Pyek zdSg(VXY|?OFW9kq@jH()1BdMeXYoS_hyM)T;2A5Sm*H?#OdG8(#1j~)!g#jm`1Pao z)_I-RWLbuq`DxA3h77$n78zu9Xk_sbtK%ihtd1DggR@qD!ODV-$h7jRs&0#eE%sVn zs(9~kSD*`z#B8`!i$axAvd8|MX3 zod_bwvNT_lu^KZDic&V^%oql%YIc6-nKSZjz(2!l135F?q3IwpsM5(eB!}7XaSVyw z(j;10q1?vHPUp{hE~3Mhhv#J?|JrI(yuy%S{d|PCT${-~wPE2I*`^d}8&qvMx|B44AwO-+4KXQIQL4%70FK`zZ0lC_P z{R9oNM10_|h!31qcP*$VP0-*a5P)DhMDMu0z!;hCC-K~_=@sta8FfocVl8Wc9Jo0C z2^@qb5F>qdIa=I6Z*xSdYZKGUROlw>?s#aVvjw?3dTc`;{V+OF`3XeG=>_ zrJnE+jPZnzWT4>2A79+nr#e&z(t8nislGq^jCtA?rF`KRz-Ph{aFz9*`r-K^k`^4r zQL{AM;?^tDZ40M)!_{tAiB%0BumQm|yC zK3tGRR6-QZ66zcxMBcxlJ8(RB19LopE2hoVmCLi^j9CM37dp1gJH5OBcICYBynZ&H zWIrMJNA2N`1j4uKsa;YB6@-2QN+R4UDI}Z;u~y(JiQB^Jf8CMPLNx8xG%ecrP=>sJ zc3U3D`sSGf3}Hfd3nm2&W^cV*6bNpNu`|2 zBG<}*Xg+I3wR~}=%Krr_=P;}f9gro%RIMI*8xfSFZ`&X6DeWz@msY-1;o}_LLt)g>iR4g&kUsc`Jbih`BoRV=`Qs;*DHG`iMvnj zJ1tE(-^MrLqsafs3mJq&dyRUoY#1E+EMIewLy-we$^0E1f(CpUZ3#wJROmhGoUSK0 z^w7r-n2W^04CG$)MPgO{P)gGhEw)%ksn_0p0w-L4t5q8UI66?XUzcRZ+B*A{YVqwU zuT-a}d8NAB<-5Bq87%HZwk8S7{^%fP0(4<>yQ;X;d}*7#`ql~Fz(>}uS;Jr+Q~zLB zA`tYRIwpFh9@irf)Sx67!hABNB=$o7$?&n6+PTkPVp zz|&*N%VUaD*Dc&Ajtaa$2e_(KId!pLoeas);VSjkn^aFlq~(3+-=(hc)OCsVojV~r znIUA<;Kqm^_JU)XC6<1KdAg9FzFCV7vooihRX>vU@D8GmKi&hnJSz9Rqk4OnbvRA2 z@ri>-s?_h^Nb7S~m0C(8G#(M_0)uC<(z7s36H-|^>|uKKXQ^R2!!AG%QwPIzdo2hf zAvX}+PxUL4a-7{gXLypKE_#O{+ru^LGxS6cEi%pUnUHVc0@&D)bOn9(;GLCxT*jbt zP5F${Fka zDfJNp0B&CgjmMpM$h`b5#mUXHOF!r>0 z>+Sc+gSoHiG`mfa5*rr`*tV(W2ogwuIBL{Vuq5=0WPS-8z&;bwjG3+VsyFc=V9%fI zpaZhZWZzi{weew2vo_fedxAxhB>8v&bIv=SwY#Rue&mJTmX)qvd)Om{j4XXIrQouj zksae4Gx`0=27|5Q)?N^BauN@am8$NmnN-5d7XM-7w?&bw%3HoQ33>MinuRPQ0`v_X zC9rWs?);!~P0}LI(^qqCkz6%;369oj+0U4l>6R7cqK8&Pm!znymrlO>UwV-eC(nS@ zm1-0z^pah~K!FIbeZk?XRYH$iyCX7Gbd+Itsg@o?)Q4jtyE9!*1!;zcFj5x~A_M+QMk^ys=9^So9?yQTVgMy6hp`sG_Jf7>}kOYQuNiddf6(M6VOTF51uzv3N1VMuAJkuttHc-ByInU7SvZ&xnZnmE8zE23qXMnL5uEQ1sRdCs6w#&e8TXf0AaAQ{BDD#d``3kG zKCKz$!5^#0bsTJ5>vr+9k!9{daR?Ka>sk5JTI$ZQ=H*#0gx}1vV!pDt(8uqCKyZ_5d082YV+~$ne^-e|!jhA*H$A!g zuOuQjjIQ1y_@_s)MRp7F07v=NIf4UJuAywPXv0zL#$pdou7+GMd`-8|0Qlv%R$0&e z?l$O{XAwWP{Wa#I7Zk>2lJ=hXPdTPUXAP0CvTmGk-}=R;?xs|2j}0$J8MwQ|5fcS# zABmY?$VmA}#3$p-3>-n?v3`}YTjnThR^xVOB{*-y1dbDd0?A)P7R zrK8Ry6{Tgub{ozc3z;C)FeJRv6UmaL5OV8D->a;4ls9^B$0@3Qr*lzeeWezcHFIK2 zW%C~KMSG1UoHf?K8vC2bRCG12qu?pF@d0aJJ(gN4l=+l+SVzrU$ z93vFT*6H1n3Url8Lu7Hfj3$f#_WA}R@YwQR1!qR3wbWy+LnfpvQhQYWclABVr%Gg` zcf&>S&2Ed#%R^5_{15q}?kiv~RH{qP*QW;;DbDo#x+g&IHgE2rs7;z9s$CU6_b@ux zzNQnD7j>_XdczSE<6iMKy&(Z>F=$revX&*ne^28Lj=b=%0eJf76k;n=fxGxv z=SsP^{xSB>u!`b8vY2DB2|GY)rC6odmt~Y(?#kw0P!EU_j(|Bfib|R9^yWYlf4}UcWW;T~ccjINQU{))n zSEvgGz0|L89KF>9Bi1|txn!&MXqAc<>0vVXfwq*r*ZE)?uSY=UgZA;9dx`K=hrS}D z{Evv9YF|cyz9W@;9432K@Kf5?uzQXcQx?j_IljKQ(T(kfJ1^1UHkW0SjPJC%cnND`8PVQhH^{EBV(n^nRr51xtWta5;`J@%pK5u=ug)@aS;|A+;ArOz}4bid=F1Xcd!K(%K9U<;INKy!Ac@%YWxXA(bVQq+a1ls})atuOqiwRe#ZD*w7 zE~$si^7!Lqj^9Xikmd&ibC2G7TD`j-_Aks-)S3SKq7J$E3&nnBxJ&4ODbkpWx>wSHUZs!!WZvIbcqQERD|d6u%hA2%dJikT4%+ z-ui)HMQ3w?ENzH{f$U|zyHhb~JA(SZUT4wr zNHzX->WwcpR2D;$;y)AUdwrf~Z2NyW8m|7@VH3D=#?i2d#wRGx8wx#{U zis2aT*^HI7skwr3HkSJ>_^!^IirV~@L$1p3QIQX}o@YzE?;GtNuYPdDAs3XHdXsOu zlcjI77mw8!-vjF2@1ZOh5ckGkG_76n$ktvu2vyoj$zBYiv_c2eSE&TKg40Az>e(++ zWN!l``YIjmYrY?u97%H3Js{2AB#sss?XdO0;@ZoPdI+mim1vvuSo`V(>gmmJ>NzMc z)N@mA8?7qWMyp!OiuaX_ zEe#HjG#tnx;_D`&?thU&is|_&{lt1Wai4+n6~K3!f4sncv%b0 zWH>)!Ir#0e!VN7YR@qi5?*U!jBf7k8@v=vx7>f0M>s$~`GPGU2&X(p32{$}a;``Qc z9k^As*@0=ptFHUOu8QtsGF}m{T91h59^ePiEsmO_l>fCxYK1h%3m07614{ZI1 zuA}`%y*Nik?JCDzk4x`!ow#4?IA3!P{23?ym;c7%WYK=li7G;%^vG2Hq%Bh|KNc@# zC4mGW{P-8olCw$O&K|P%356!@J)SmgUCG*ViCq5&Itb~up?!U@TQrM9w2{h~mx zm&nTe@W~{GPfup9IuBvXR^ev3j=$;K96SC>ZrcKN8|fmYMMCJ5A_Bxa3dM|&Vuo3B ziaN8RbBdzwzsX=BIMTg9?V9$sYg1V+P2N~qn7;7-$X>LE>rA?B57%Wt^4wq#M~t_t z-r*oZhGTyJ;ecJoNxag-J#+v`$Evo57nv>~giH&`ls2Ixt#l?bp~mW!?6NmH3!MG@YqOvA$k@^) z3C5zVM~}@AgDQ*NBzJ z23zT2fU@3`fxQopqwp@K?tVWRF6)^VzB!R$H#hWMYI5qN!pVbG$a~3AVRT)~;U(?* zOr2PhwkZhHF1x|{MNg9!CIWdn#xm;tJsovTXrtY9A?j|U^`V^Y(*4e{0}8~z7zj5Z zV=!2erQT??4#Y*l>}EO|onaTBP>+k+ruU@PEb$TdNuOW4-;U_?KL1rGv5tTB$$X#x zx|2n|(X-@dS)%|1m2DQFDEwQ=iw&FT3ch`#7ZG2(IhbqLseUC3kcn*Yl$eDSz^8C? z2Pz6_E3bZ-y^_u?q+i$4)61QXUhees@*%qEYg$RYPFGu* z@w6UkAMW83BSJY(i)eG_+4eh%J_R;5(Z>DSdx1`7VX0?6Iys5($r0e-;R1a)g8BTq zK}B{JS*)ySuvWKPE}J^QR`9^jwM@cZoCP`|y)&+cR+Gk{u*ntu?EbfRn+vRSh5wS1 zn_zbo$HN`&;&=ohyHYPF&UEN&Ic)r@WUQVit2MHc#W!NrxZ*w9K&HU~3sfFS*thze z!Sf3T)reJ@*6^rXj9$vwl31X=GFgi8rVX4>zWcC+R0>%ymrpg9b+0Ep4}g|XA$NUD z4Cw2A-5%+B-sT@>)K&6FeeU57u|YiX1^g}Z+4ds(4F~X}{Ga&00xo^|G1oN*@u%>o z$6OD-`k3p#Uc>)_kvDzC`n;NVou)rViz?RpRfmMHuuFTNA#Spc3+cF*=BLHg9qQYP zpFPxJ*fDY+6X6MsBIRKx>jM#NZY|zp#;Wi6@mgML3w*x!{P^rp=LhmY5n+QwmbtZm z3eD5uL>U;Gx?l-2YMOl+Qr*5(T_f%7CPZoL(p}CiNkH9xo5!IpS^}k5>tQ7nSjFl* zegTfI;@~)5O^gT)$`y^F%F%J5Pm`?YT1gfvzzxXjr2NOm2a=NGo_T3Gh>MZy1)VgQ zPxPlKP?9YbOp#XbV|HnhZj#r0K0cZ41G7Z0r| z^N14);!(sqfw{dzMyN2n-VgbGEAuO+ysog(Q(TT`9NzJaRaGqybWL)@#iB&$N^3r1 zmcFLT$Y9;lg8^L5PKTVD&>AfeTHxGp=d^k3-Cz!D?Azc?7^*Z$?CE?PgaUL#TpJ)^ z6Dr32g;?rZU8vf}=&7>X(?Ptn=P5hTZVy%grA0iAg@P72!q@2e84;ads9wGrIyzrM zZ`Pr{=6|OMiMe?L6f{LGvQwWPo$paUBQ?6fy}gtKQ=E+Qh$D%nkg-o9)D}Wh5EqvN z@G{*2L!PcKQlspqE{)IDSH1MoF^Cbm!Wp=1G7dFxh1&l}`sh_M^=9-ss~Eb@d7Ooz z6;5f}nUWa}a6P|v9K0Gu5M9%ci4qqx$ z+pZqx8d5*4T0QF>Ed2ysyPt3Ary@rn#YK{+E z=-V}V(nV>iL&YkY^*ln?=+Mx59r{CdUbHM1j-M(doa=OldiiG7f2c#vx3h~{aHmfK zF12&sjEu1wvr#8{y*8mfZKoS8dDkvH#goxy3EhSjejEQP)dJ__>;G9%|I zggb0*Ew>oHG>7ueH{~fE!7J2mZ|AV>vOt&z=%gIx?t*@)NE2AMZ*{F%Bjrf9oqlpt*$yl4*iUJWtb(V|p)s441w zo&LBc>}AbUsbBs>k6?YdI!ra zrL5%`{;b64rz5Ouyki`drel#}%MXxHKyS5$CkEu8;o=986jG{iZ3jG0r93xv;HXyf zy8Gw~n*O(yvJ8bVU2@7sgw6VHjC1G$>88vQka5un-77IdpPq#4}()n9Q?=$Xs49 zaJ;0lDTAj+tF2FZ)4ou4cpU=H`E{3?j2*&o>uqIz_(U>zI$qXSX%*O2MOdM&aO)>M zX@6_l@7^V?+dqQ#)R|)Sb<7ki7FZI!O-i*#vaA{+3-)8ckSF9q1ct;Ya;h0ro67GY ze?N|esS+826qmr+{Jq28oB!he%z{+@@TF3CKXySXlKq)=s`B-CoH~E+V5IPYr0>Tu z>8-EteCqOtlfKL#tvwtN zI@b9#u6J1MI?*<7-yC0i<&N&mUQ({IA3bVk|?==8D} z`>_*x`|IIhvNww<{|Zxng>WoV=`qxkRyz1zE=!+Rr_a@dr=N@2zwg1sa3W)w?|Utr z*PmA(UZrn{fUN3-g`-TuUc2ZmRKL z-r&v=UgIgD>|N@jzvEWGYFlz-4Yw%uC2TLi)w~JVYTtBFh3((h@%sx0>HiVIcbXpC z3^U&J2TJ`KQtEPq#jn;%zIMBkUFtr5ITh+s-ZiBhZ0uXgN-4!O4q^qKw6Cd@BISzs ztuFwGtHWKG^c=C2_Al90cU%hd-@((s)%;Pne7D23`PfnXBJmkPudnBm&*x!2JNkWM z{Fb!r_wdn)V*g(Y3uft&TMb*7k$a*CMLjId&-7ReaL|hm-^$bLeRV6Ovb@_mQbJ;0 z7bd8ONhq9`%=^~>L@xI%zyCG~iCpg8x(;CD<)gwFx#!py){B>O(yv;6iJFPlH<_Oj zwK*+K)J7{<_(Z+JC%UaWzw!nqUI4p-rSed^+Gl0wmb*jlUuATTp1h}XBvUc!*$!6# zfv3A;O?#f+fgmBx-@cn~U)jz|J6xUFt**5gdY2yk^)XR&(n{f>)BC8Kr`A9C z$B}gMim9lPp^?=paf?>B;YGX7TIF`6lZKR?7BTXvkh>pU{&30XD@{e!ZR%Vn|+1rkx7MElODPg_#(*)*GBLA;tp5>vd+`?&lfs zed@$F7?hFA@0Xv;aq2SLo5`b<*jqvbdxl+CGj)}AemBr|>zMim@?1V3s?Cx#Ftx}G9o)wc?8e6|A)eX^>57rFQ zmXk1&E492Mj;>{O)l$R};ev~UAGJ?->J8n;<62p4TA#g_!QMku08iU$3q_lDZPm`V zGm|rWn<^{u#z&pKHQ`_N;@Vh-hZ(U6oEt@4M>SuwBiZQ}A3*90q-6Gs=fQfLWbL(= zpKn&kueP!ocnNBLh(*Cb-Y=~~bl%F>YDSoGe~tI5N|C_wSi5queBbm#R*%-)?hG#N&78CH-1?llMi2;@w~`ri zDY8Tz^KhNT_e)$PWBL6}8r#ftZ~c~Fo0-`ZjZQ+J#M#oc(D3?CQP%iIUZdkLB(O^D z3;(4D>FONJoh2)aI%lFfr!J2DLiEh?>$b=-Z!_L0w-@beMap{Durqk_u#HwN^yr!T)>eljatNAbOJW@fn5i#)d;qcJi@_-L~B zRWU}W2y|X5!!)XePTP0yUzvgO_aU3baYXMpp}+JC251%TRaifVD|t0l-@xP~&onso zD)XQZ?`xVyQBwNWpXrsk=iH|mMQ&J!(M@?Y_M@aY@p)PB)Fk_Ur1S z3+ro>D=-nBoK(L=H8ikH+tia^A$Obly8L1Xs^zC=i1HA`e+eVVxCI!u<~CtvGu!!W zRC&RD8j_-S#@%$nU3a5BGXR3rkIufP`x#(umg3=*y}h;?Wr57~DKj09&`s-P8hL@3uNP&X zW8~LTZogw>zBl~$5!f`DEBb5Nokrjltd>Z+DJGOm_YP zEWzo`hdT=)wtE?0vU&~Et5dki4@NKxGnXB9RGoFoY*_KZ*B-q?`q3SHQ{xYA~BFZ4{`nUe+1oq4MDQuxg-5MStw{(50AV|GaRQmwXDu4ulZ z^5Z@h%L$#2yD72eeGcAcCJfA{b%Q%cA`4VqslL7t%L1J7l6^1{V~1}EOEa(k`=#FS zR2ouT$C*ax4IE3TU$B~)+m}F5;j->Lgd{p5A%*NbGwkv;uVTl+@p0xvEkn;8EF+T1 zv)Wk=4a%AnIPPm|W0gDn;8PH8_8Rz%tbzRgCZST~<0;3zamB!KFBc{Bky`sa2!|uj z75pU5->i1&p1SJ|y<{s@w%yHlS+UYFZ9YH-0`Xk6$;B!UDf-cT8ONEkBZO?*tJZxz zjS`XFQ`$>~2vtz-g&Nnia=ThcS{qN4V|Y_lNtOFq4b3n5ni>TSa5l=xD0G>SIvU-! ztDloij8Y{!y*AFxu}-46U}aj*)yPp~kcYkD@3m>rkW|Kom!GoXf5dlc!!yf!wK6-1 z^dF+9(x#4yN|fDL=@|RvYyCO~$24_yQAI+AYFj*FJDt9){?1P!>wYznftt%Y#vo|@ zr_|2XAnUOf4l~=63)9+}x$+aKV_~2A1NB%53^rv+XG|65a6nB`$mhPXYW5MTWq7e5 zI}a^g__-S8WkL&Q)`?{idazQL-06cdl7N$P(m-wLbMQc=nlb_JTl+X@l9SXlX{n*8 z?Qsn5*QI=hQe+(Er;Ot&zGWOCN$B^xigw`LWsQHZ7QDyJ32Gb^E-i5CXQPTx@qb)M z_3d``PpwKjYwFGwRMvZ`y>~;0YtmmIb8X~v?z@k<9`Ab0HT^wo2JyL+-&2k~=9+jM zyP6;JKL7W}T)X-7a^LLtSi_T;Z+H@YcqGC@!+oGUc8CGztt`egy#&4WkV6stgjV=l z8Mz0;Z=H;wb(F!2g$UM_a}ei6$_u!(FG-UmTUDfL{`O}O5?-bB`^=`Y{Ee_b*{x*^>QeLDVXGG>No+k4*Ph|e)73qhXEP1F|p!V|+xv8v> zX46}Ft|>@$*5*$lEG7JgFxn3Jb<5>!(a!{Z*=QlJmOh-uTnr)U@csw7^$7c%!?RnZ z+iJIV@_;&~_r>jqBMl}ZU@PTu^(!@4d z4-n_+K&(f^dAj&63OBSNvNU%;@=Ao)b_wslO}RTbA>vvp?>=W6>lZ!d*BUL)4fv4A zh>Z35;ZFFk;In`NuR&gDCUAK^-~29@-+bnIe50!gTUs6umT`2Yd$=2|J>1RnPuOQ0))^~?b$pHD>CMmi#qppH zeftq^qyCRDt;1??jO)l$4|wmOJxHR%LJ~38nOOZr_zu^rxT2R9xhA*BZt(EJg@KS7 zOq2w|$pnm%WLM~%y797IC!ugrSFtdqnMVTlAwqx{SlJglf<~Q)VaATQHBEV58%loB zyq)N8CW1wxpNBqO@N>2<-7(*+_sN#E_q@5D(%y6-3~LHVvX_=d z{4fsfKnJM|(Vw~A$t|`R;=ulNNq;*2&-&9P{pmnAaOnQb_2Lzp9*uVTGuP=4`Vx`R z1NtK>J}1z%y#!(=#}~es9ck6(mqgIM#o{Q=*?f4792L37ZRJGr`7HKyj%#f2x`JMQ z`cRY|9XYdeB*FZc>A_zip1#QSLE{=PB+?7aGW3MS1|2~;0oX5%-yrj}zzPpmC%eSR z_`{37BR=e{eXS*4?X#pTi>`!KFOj5c5@S8%wrl4NRJ;*>4Nl)9b}ABkUMRh%|J!mSHajZZ>0C zhG-TC}&hi@{9G1^41_a4OPrk-Q3isZJic z5^GgB{#N%dV3zh-+?l1U4=$FnLZ6YnSizKzC=UO2!rwW_dk9n3di5P^JFOcB)GuE~M1C-BmJW!83GMX>>{7!Wn=X8G#G>1?vIN zuyR_<@Q_`?EHdp?Rxu*gvutjaRq02~h`9(B1m?I`kGRzxcxj~@mU8B=GB(0A+k>lF zo^GZSH;TCTks-%4uRo(xigdxT*3J44+88a9slcF$%%<83k7fxAMV>eDJq@Ds3%^~O zU#%X`d=`Erra53Ty~li{d5}vH`_|Nt!wb$v^|Y7bampX^n$ft-@1(RqVEk?Vj9;|ZC?M5Y9a8CERnso#I)*T^zYOEWdCG7 zPBmWV{$G~IT6XyVTtdT%;X%9sdPIR@L~xkshwftio~b#u_Dq=d5_UQ3B{;uYtxEl1 z@g#IcQJ6MMWWr?~TX%<$dRy?H zSywoY%+l)1YsF)n;nQg5Xib{t=Qr_oB}s!@;0yMuZtU{N=@v0@i3XqNP1?xVIR z(B`}2VaW}h7@q)ohC=d7>2Ycc>|b?`h4q~Yc=yiC+F9=w`6^w-PmWOq9!-&bLw~}5 zJ0@t8mj&X!*?+>paPzAa9Q=e;+cg1~tO?#&J<$^P<&mo<^#uMHdS6^JpdC(bsB1ji zbNttKQ^#ATb}8((n_{F^MdM#NC0HgX2>DhX0baZ{Y;= zjl!hoXpoWB?p=KoUV@T#PZo0@(Dxru2~x!V32=^jDltP-rORg;x*aOKA4MwbyQaR- zI-#b%^=FrLhCC;^BV(~MQtggb`!Tc*8)B}1xzv2$?h7rLb)(RG@jfKh@1c&r-{bWd)n-L);lU^`7ed_;L*bk9@ds>~=40!o)i4Rx$rmsi67@b4;lX%#a#Hdl zYi^zzm0JLj5cILA!fnY3@$fEp7B-Hoi*ZXF~(nLbB2M`Ou=s zspBbJ75wn9i@5nkNCIz*@DQEr1Wb$1E^3j04}V~%sEE&=rUQ;R0gL0aEA~r@gHAwQ zeD-3UBJKpNiO;UK$q`ut=UaW&9a;pT_JHd52SR%JcaFr9hMh8n|iv-Vbg74J9 z61kt?$g>-P)Ho;dUL7e(^z?b0;74_^M0Q9~?`^RMVuucv$Sw)~lM}pO2TP>Ok{X@| zQonT~MMOTnL6Z21R1Z19T{>7I3nln2C)fqDk8hAj-JUg0uwMsDBu2I?@7GSE>2^%$tjK-~sP7|2B*?AE&t zlxHB1fxHIt8z|pE1qPaEph5$UH&Bs*CK+gofo2(Knt^5*sKh`O2D-{X*BPkNKvx@R zv4O5P(2WKP8mP`dHyLP!fz}x4HUr&hphgE0%-3W>H#(4-e~&Dl&HUWY;)!qAYLYx) zphpb!sDZW_=m`UDH_#3PwHRo(f!Yl8yn*%`=zxI^8t63xbr|Tdfs}!c8mP-a-3Ce+ zsK-Dqw^?Wg@)*c#Aisg~43ux60s~DnP@#dw8>q-YlMFP)K(h=q%|J5@RAQhC16^gH z>kL$BpsNkE*g)4C=tctt4OC~Kn+&wVKx+(in}O~$P@{pG47AZen+76aXD zpsfaa#6XW4XorEe8R!WEZ8uPhfp#0{fPvZ!^t^%g8|a{cUNg{919ceauz{3;x(w89 zAZ<^F#32J#yy&p`POBsYLsPkck6i5YL8A_Gk_&=dpB zGSD;w%`i}jfhr7im4PY^wAet`8R#YhU2mWp4OHhq^|TtV9?l2^4Ro7<8V%IsK#|{U z1d9AvtOcugUP`@1E6-1m66SY~}s5?2d{ zyj%WUz9N#n{pbJw?-yEE1}9v(;`ou+hnd#Sm>QS0Q*1Wms95 z3ml)}ZOLpI5wq@UBzWTnNfJJki0Gfb-;`z+;~B|Q+-3)m1r=gK{AnRdrzuPe=@=$y zN_s=GT8{58j-B5~Q;XYhEDR&g6sSfJ<6`9($08e~5mxT8m?!8v9)qgGsM}L6k4xrk zPvgT)#GX7qiEv47EPB`7{2D2~6P;`@$2W*IEP4FfAhxiqviusR8Av^N8zM%?h~1Uo z7xw`E%D?!AM;$1#VH;31d{~D*VdA$NXomx}ZfFrGzM;)TJ#V1b47A@s2Ml!3fhyx0 zI!xeU19clnIZ$Hi3XZvpeY8LW}q1cDlw3l z!?o+EFwj*7sx;8m23l;O>kM?gfo?QVoq=vL&KurePXrMa{wAny+ z8)%Dx?lsU>13h4%M-23+fwmdw2?K36&<+E&7-+WxMK?6TJ7>w5nCA_&-#`ZpbkIPr z8K}cRhYh3*bksmy2I@9Y!azL+a?v7tZruj*7|3fNzk%`$ly9H{0~H!*yn%`gG|@nl z3^c_+(+o7jKqUs6WuOWJU1gw316^&P#Rj_0K-U}SMg!Fu=q3ZLaG=PBH9(OKxA8Zu z8bLAu@eOVsVeDb^7|3fNd7_bjHSrC3CNSSX1qLcK(0Cw_m`l9?`6SG*4Qn_C94&bx zmypH}29Jf0BKCW+m|fu^YX~Esj=v+Zg4~63iz|4P%?0akoZIv9GmOv~hVnEpNDaev zhVE0>fUR%w9&c6tj3emJ>=!`PX*4b#5`!s3RN*&{+5)hbx52LPsByi|`t z_)w0v7?mIH$cY`w%58&#d_I<7lCeW$mho%XQtS=sx8(dZ@ebkN$?#aO*uydN*e)N; z`K=6Ue~}sn<=8IK+#Dj(+Jyib-m>@8i}0H{yxhss${{fKx!f3!t#HTX6;qztWD0*h zS@%HK8!VHq`*~}&eTW8!-#*9V;@;(i$w=B^T>1&SoCT5lNQSj5I7$*i0O%K8ZM>uJ zmY{zSYD~Yg8ydXA4zKYDl_n*Wc|xDJyM9)GVa1n7X1@@~V(_Ld1_%(n7) zhc{3BG9$=VpRF#qNG8JLtfR=<{AIF`cBP(BQaj21W<0gOD6G3XV=60VfOw{UUEGTd z)F7gp5_i1J3qL+dMtS+Lms$&^Wwk*$5#D+$kz4Cs%1ga15@8x)uh;)S<2S!-j(a}$ zK+^Z*BG6h2$6@0l_U0I9=dyQ@7GVlN*wu0>?v0^MHh=ps-4-G@LM zQ|k+>RN)?JlE?b5#&w7$96}3VZjXqR;QO`fQ;vGksi*w(wKCm15r1Q9|Q$=UckX?%?AJ082sDz@Eb|eTWy>k z%h<-^_yqjw^JheAyP0y?iS`7|^rtZHKQSw^@m^?dv5;^36uLb&URJix+WzR3L=3+6 zSv%;Y=>29-%C`oYlm#p;8_nA&RVH%2J3QSL9H!pY>$C+fm<1SF4V`Hi=Gf0C2cO0o{OXZ@63g==i=!9dMHMhMR-39U)5=^?56FH5X6wu{D~avh_;_mzo2f-d}Q1_m71oIp~ab_ zJKT~)P(PGyX)-iw2{Tz;_7%uHOPK1t{f}D0l~)hUIg>#Uw!Qk%iJkpW+*uie1={uDg-sV%?LO+_}!L@qFqYwgH-#Fkb#=^mHY2+Au;&oR#AxWdVS zpz5VIn0)+tY0T=KQja@oP2yKLyqLcXiGFZV`~Un%GHQ7w+3z(d?@;PmbmyX$JZGt8 z7eAFuJ}&QG>T^;KmkFJHH(xkIlgBhQR!2NyM?7jrY>|k6#3aXNJK}CTqER9a>xeaW z#BFv&okZ-Fh~0Tnq`sxCf+1+D;5C;zFh!a&O_DvJ^G~v4r${V54kg0U`I-LB;Q4Sk z-%e2=Db%dhhe_5*gu2nLACS`ZD|qtpI*FL0Bd)h2Zsdy`l@c*oM^xAmSJ@HMB;rgR zG0BdYVn-B8giA-{+YtqJghwL&(juecvLoDfgh)52b{!#N5VT6mKqNI;ul_?v2>nci z7OY4@%1_u1A{eGzI#fi))ZchB`;wEoUlzvdeW%xI~<7s2(pYHFTGJY(Xq zEg8K+ckzr4L@#=Ob05{}AUUG2EH;#c&pApQL&>OAiFwf3wu=;M$?Gq5tKD2)Cik{} z;<&bJN)OtgOSIn)(N_|SpOqg~mMFvxSr*zPXrh;UL&dfyCS7P&=(DIY9sVN+%|0vy zEOx7dz|$v%MonMr4h=UcZLdvsJJyX2i-0;twT7)51{*@2|8N_2R^3cGZA%qbAna$G zf8c}@o7s|bzD^mwbl5r{g3*Dt-p=6*InZXhs$D}-m938`0+hx-dhSC%71Ip=m;TW! zt`s#c+dulF4?@rUv;NT?mWA`>2-4aCiu%!*H>DEwZSC14UXhF-MvbjXv5&|BDf~(|<}i*f z(B9*ZUi}kPr9L7xXn+!!xAY=xmZvt41utEcyR+3}J1Gq*dczJC`F(4YUiv4QgStmX zU`(^_1fyrG!HUSf6%+59q2X3Zk=OlH3CD_5 z;@iJW7Vim^yKxnX4e(Lv^|QVj8$2$W5zGLwa(p{Wv%mAms#`k97p$#rSt0wxQJ0FjQ!LQluOmC#P1zR_@3~i*WC0fu9cXNTBAa`?1=ZM=+NKD8L zk7P;|e>NB%2w=j4c74*yh8i6?a{?cZL-n*Ui zzn7{me?rIsuULiFBWX98_KI1eMMBdCE*FI;NZLT=%50?8(c?sZoxi4cdi;;^$i;ld zv*n}-=GMEb)jN+%*?38FW~ny=<&#!@`Jyvik}o)_ZZqq!T5TU9hn*g`Q}OIAQG`|R zL^WP#%&jk~R(A}@CGEdm7^@&*Z*}xna%GUw7dr)G>hWzG#kK$gbocMkh5#W{$`RH7(XWe_&o-a4ELqt%Q3#z<14u4Smjf~3AA;vGAF7J zy#9p~1)}`3uvwP*!=B5b=Gj38CIxg-8|4Fi&k7) z@BRo~I5Dqf`P3_!Zr&;JbJr~%eLLNm_OFBT>%R9gxD<@%R*DS>)HKB%c0|I&FoT$t zn)n}RsaP_0o35zcIQLx`Y=O2AZ1MyvsGxEIj|E2-af|G-p2H5nyWbByw?6x}GXq_# zPG2VG0(p%n{)38aqY%A~`8~PCcKQ}HfxWv=?^oW4WPO3mk}L9(x8$iUs5-G*wW@|* z|9)EqBqb0qz-6)?9-KE|(fd1Wltx#%1GPP&P8y_c|IyF2y&G&TmAl7h&&XVrW39RhJsS*A z1utMbi@rB#bDydawvj|Zb~s7@;v@y**Gl(P=}9c&kki++kj1036-u^tb%7HTddH!B zc(+gZL#5W7S+sj)N%5<(Lzz+cMbhvt-EM8PKbK;bZ%(!T0E`a1^`1~?S~+>X<~L>K z(aF*oq7y%A`aCyw|CV}-UyK%fAII#0y}>V7XTpNJApG}}c)O-wWjn<&;eOsR1A9Yn z;R)x=NM>@LAJ(AA0CY~bUJ#)Ges+Eqa~y$ro|R`rvcyPAwb#nNQqn~8HcPaR{iGdd zetBkx@PP57*(KPneEGxJR_t*FuV83oBdNnT{LY!E+QfvtOjDc}YyL^6Ywg*h*TFNZ zlf?}9+o;^KY@$otC72@#@Cg1F)93WnrPr5;PHZovtQzYZ{^nz7UHNA1kIwUMFCfe} zt4#zUcQ+rym5Kl9e1dpRif}zl&WfRL;937GFqcMy4tf{dgYtdWo7ernq1$E1HsvD zy0$PmsY?C*r!)mJD-Xph>!Y)~qIp+Xdt+~AW$lDkpr@Zl}a|gU;URpLn7&&`sKuJ-cwx@{f0+d81c_q>=)15zYzWc8w^t| zyFF@d-`1qsFX$Eh&V6f4!tqW*%G2vpTGf0^w=+7AUb5PB`}`v4F-Bx!-Z{Mzu@n~J zLej~M+Uu_}c~Q0c)LPCmrm$T-Uw7Dc%!XSMgoTH($rTk~Rf>7Th4?SM#hixbG-JW%*{slamL)u1a*8zFl1Xl5mcR8F1!=A%dELn`e%A5VVY%*Wp4 zCa(-spZTz-Lzf{FTq85kExVwd{rG;s9{P9qrln!ZNyB5QLAT4(`@1T&!P7Ulo>|%P z>?$T(uVHLBq~N#nQz(r4N}=YHC9(~FiiYD%(Ep*7QMT_on#M3UxHq-_eJ2@oJifvSLLQIR5oMJ!+n2!R07 zvSPspknTtckZ1zGiT<^%$YOiBNVvWUf#|Nz`r60Pn*Ro0^S?#z!USe&2$BQ zsO|l9grJXo_(jX^iG-w%7oZq81ytae%>IS!LW$*XRIq|w6IM|47vCJ2ve~^Vh?!}T zF=Xbc@B^D^gOWc%EJp0$J?-Y_Q-;;CwrL zH++Oj71;Qn!Lsx@lHl%O#9zVo;Tb>opf+_^5N)Hs%J_@^j9mX#Vn(R_`M9W}JpU-K zViAEYXGVZkj(!{{!GrSvoN3_i25ve_&|ES-M+-)y#KCh?1!7HRvY|*&>jn{+3ii?5 zsI3dMkN0J7$E{5twfELU@2m5u{ZfKYxh4|BW^wrTk zJP|*g9YYGk;zm88!=es2>hshSe}^GT^~2c?yZvc#Y%t}oK_|eAj#RM;v7~*tLQ~EU zb#w~Ajtw7;5VW-@j(V7O$or5l((%*EY(+8n)JmQuTN%6IeQ>+2sYfAhOe=Nugg6bw zAW<6&_f~8l|B4UpQ}E@CV~6f6ngMD}qVoyre-|}r0!?^IoJ$y5%o@HCM-tZ@c)wMG zkFbXUF3^e(KcrR&|CVenug8E^z-vW`tFO=x<83jBwiwtbkteOheM;7+DJ(f;Q&4N> zijaEpN5l0m;SC(Fz&Yz(su}zdkHDUQcCxb@&}kBxDM>9&+H^>t-X?u<2udbfn!oDR z#EV?{Q>kX_+s|oB)A<#YB(0$9P4lVe{qO=r|HJdckue9c#<08E3=VevT`!OiZvm2&e-U^SXN6MD zPSIeZa;5Io-zjyYX6HI0LP7zLR&ZVpWrF9yg`B%`t zb0!5htK5#p!L6^~F*pnLdw01YEOLMY{Rc`>&HJTdw4oG^ka&#u&eUHiFKB2TB3X^H z{&?yqg~~&)!Ug);n_Wz;5AE(J)(5-Wn_F~=J^uW+p*?Pni_+t>e&jtqv_~ui52BmP zsGD`Kif%?6;<7s-6}DBPr@c^w+Yg}x9Gs3s7mET8c6gJTcWp>sNHlof`rAVCz8=iG zK;)IPk|AvebjfoYh8fa!TnUhvv%x{bXluNS|Fk&qV}5|JeUgpMkF&?4|gJUb^eLQ9KAd)!68qyu<5Sn;cj=gceo4{&UB(I)Vvc!+C#D( z$U@z0D*Nt3$W;`r!JQ>~lg1n8hx=!^%^qujuP(T8eU`|}+!@m3RrsU25BIybp>0Kz zsBP3R$ZARM)#{F=hQPl+#1@e6+$2rB3oW%sGY&{v)Y*;s9dI{EpOSL)Ic93->x-Zr zP{yiyCBc+W?_B_Apm4rY%;%lo4WHpTP&166{!=;Ur+%n2X0lJ;0-->=b4DfILgW@< z96T)+)8l_36^>>c65=o~GG$w__wB&Ec2P(vGN z-OzhSO+_exH(RmK@s+|;Y?gM>s*;)0*-4X$efA9qSsrI;{yIm~3uAv}3koF90w#7i z;oES1fq30TEZGu^2HnAz zo-#q}UOV(&t0ieB5vu(dCJLs4i_>TQQvTCW?}OO+qnE^tIN)F_vuO4l;IpSjnGubT zAa7vyJQvJ6TjZ59lX-SN3tCojx`$3}G4>;ne$)R*`q~NqBk9k4uzk`mR!F~Y_wOS8 zk9gZIiu7^E)(+`!UBF5Ih&7D#D}$s@{-7gBzaA<#=UezC`+-b$cngt!F{T}nz8j=p z93*|XY8QlG86^C|_lWQ-vzVQ=CHw?xW+>tBJRODbJ0Y$L2>;mEQ3(GkY+!W$-LFu6 z4#F;yq}cQ$s`YTe`hNe`&7fx zy6WG2$%V=|h#m_Ghx}w6W((nY@2R$UUjCN|JS$tG;HgaT#;>B_c`MYpXuPb;CJPoJ zcQeH=b#G*e&(nnwq6V}|B|?0?{kf1?ud;u{?|bU+xPF1Xcowu$*(bg5gN^M0D|W#L<0vDoUWX};G_WoL0YDA{20 z0pWS^rEPUZ*y=vxZM&%XUM=Q(ecP?B=srH*Yb{ad`|j!NvB_=bd+R-z%G^i~v)W;{lMMySPXdi;Lc?4r&1)jQfwJ-F5W@^YGbRm#+}M4Et6 zeTd(K$SGplJ@9#O+8vYan_2IJfoZpyPrFKxlY{kOH0`Rg*ndy7op!JNIbz!V;n()3 zUGC8+)2?iKYJba+nCBZYB)wu<- z7iSsnW}QW^gb0OlVCw_tc25z9z`n}?4t89!QUt)r`(s=zc&`9cXIxdZVm01D_h$|^`gt)Yanl~>;0Fan9udn8$w;4mmKby5%Yy}p|8+1!u;3?C zFqw-16Y(I!*!nxv(!i7rpm+eqdI64J6u?J7*b8#2rM{s1&kAWdE!2T!8jXCjFVTwe zqL%4nbS36sqpB2of%qEqQqO)U570|J9IN`@A%5GBSsl3D|HXy^X*R&_-us2fQpZ^b1#hP;J;x^8)-FczPg6a&iiL>(dhrM zMKcEf-1s*g|K{P}l^Cp{_@|zSE@6Fs+_B2)VANbJ}0A{ zIEqX#wYNTh4Mp4te(bK<7qvdyUcSWjxp8aM_4$^hOIn}Hp>4{g4PcA-`kcEzFyBJg z=Owt(8gbWr#$-L@%ACgER@Q{H}43(DZw33)G5C`SWoSmc|W*gnVSIDIa_(iEmz6 zqKB@&sbB(>YY#E(rh*@!+boSW!*CxT=AhVH|B1orNE%+?ha46W|KOq; z$~e%YYJxLND5rMIndcloWi0}{;g5RqPCK_KF%vR0_V!@tapfB7jEHL9!d{}3yCvcs)pNlW)zps6xkAjy{dpwm= zqJ3n*N}|%xx~ew+uD<9WR#%T;T?>@D;ILL4obp!S*aQcxrsa3zlW9lZ+IzMThp`$z zXc6hK6qQ41X^9Oz@Zarw{O}oD0g1shga1>aZwRAV`5w#-S3kO|uHRwARB&10RG`d1 z%_uVC0h%KDjp%W@$1dv%P6T0oW}E&Um>SdB+vkX7(IXg41$*b=EqgHqyGAq$76#b(Oi!N+MVY+~`CxOJF?-h2)H5M>>J#Qh@H zfkyV{*{^~s890Sf3AKNDGu) z;|A6^MeS*{>j*T@Oa;TByCF2Oxc-&1C%VX)SG-Q^ti&JoellXVUi*JrGhS%!n^eSG`j{Y$MsKt4&`e_sYL?!P(N6z&9wUf~ydAYxlH~2rP z*{nEEbGr7Ni+R-I%uzqA3VcA#8Guo13Ksv1nv0I(yf|)IEY1b$`oVhOAKx*=QJE^C25yTK+TuV8|M2thyO=&uXz8twI9F zDntGcZaweg)oPO#99FTU^Gxjxak%Ra&H9|0Ra32IeT1^cMP_|o&AKX>^*+jalq9+5 zVse8mcu~!pd?eWa9i`lY-w;`8O^9b~k+^d5%&JcODvmqZ7n? zbW&1YYw#NFyUe*uZJ+rI!br3aqXvRU6Gx&*?IAEJ7yu+mP+VI~Jj-%AfY!c?$FP1c zR>3Xc;DD>dou}148JV?A&Ds*kN~(E?lyw&OC$)D)=0Bk3&pWCP=^$!FDzYNzVg;Lv z1ruUIxQlnN@4f)rYiq3Sj*kl56DM~0YxPJ=?~oH!G<=5to!x+-eE;Q1ae``eu$}4r zPz?V`jis73LU@iMu>V?);tk#a0E@FTdeT|59=B;rH{dpn?^GF99`wgGDq2LoLzoKa z7HE(3i1Y)be8N>`?HtsGn+A@`zxE1LCgPp6ya9g!o_pLe72J%JxWvS<7q^1=pDmEC-GgL89ZA2NMOaV?m9I6EAefjwh_~u`cUxcb%#!LtM`+Brx z9)My8cCZ;EKn0nU>Okt57zsaAXt{$Z1ZS}|rX?b%;?HU=d7@>wlrA>XJ*gE?y@{}i z$pWlb5$O_p0K}|h24QhFtHsKAF{Ml+?{LI2aj;Ux`^VN&dsN$A6B>9EVy*~mCsCTv zs5W5$nt=LwH}hyIpt8A!KqZS&32ExsAT&qYm1h48z4*{(C#qE?f2m9XfKsTWpi&vR z+N%MK*8_b*37y!PfG=;wNQ3w2$|dQX2L5h*1>oVFo;3Oc1XT;tfqTbN?8)>%SH1X8 zx!%R1&|6wgQwWfH1tCpPAa#(IYw)q|cqqhwa6o{Fv1|h|Z1uQW#cyc_%=k^7sx^IJ z|IOq3!rR?*dXQ;3=}?$+seuyF)p|{6(DyXM}e9{tK$>@_LPZ0!A4oncN zL-h`JH_6)VaKPqGgc`Q31)J_QQiZ!SzA^`Ue5KNkI!}%kuTDDHoM8cyxF6fTr%a2H zsh!IoA*5}oB|UFX8GO;S)K0>qe7hemQD<25Zq~Tcg%hqekw(>3r9m>VAAcdpedemr~%hY$n>D_<3*FXncHxGL? z{uSe2NBpzlUypn74*xW9aoV_;IQ*xJ)5pcG%Kp<9&DfkRns5KOMHA!PqUnNv6aTzL zvkw10!E-Eri;!m%^8AW_1MoZtd9C<&%Y5X=zf*ww27dj>yA;2>k$w-~SK{Bz;2Shn zt5qAL(_3TXtnpT>0ZFSh!P=oCf3RAOof1t}v$b;TCCP?-L2Lh^H)u~Z;NIZ z{*~b0LHs+0e;PfA9{-~Lr;Q1FtqWew@F&QNNec)HX{T{m`JfycFWF|$O2_G#K-jg8 zVH_#An5n=_6Ls=<*rFv$lSg`d!`Z6-V7e!dZ}zn!lPiH_3DC%)8B3B1BcLS8(1V(g z2=$!FzQOa|DGf(}X;Qbi<9EKTlAbuotK5U38dQ6%!sL2PfFQUJ(zhw6aEbh)dm?dzS z1T79@&RiUXV!uEHFAvueN`C|bB-3(i8N|f87V>k)efYu25Xy066LP(~3zUsm^1BHb zbDW1OjGDSXum@k+5<<7#( za{l5>H^Aty8h@xw)zsNMpQP^~-O&O4Jxwep=6+);GyjO1H(hJ0i$>@H1c_3XJ4@uZ7dJuQ6~$N9VU0~t)4$_D0=$|8z2qJxD>nxKf>`Q8=go!flDyy^VdJ-Wxm+^xAL> zkBc)ef^@z*RnO7&dcVFnfhX=t{h~~-FoG*mXp)+{Z&BV$- z{48byn9JRgtt!n{y|61^P;AE>vb~ah^#s|xRe1-a|W zv?-s_k$1#(?ml@BX$k)V75}@x4#l4jLTXXY!p!-&AZBxJ?M?1P9n8<~1>wScKJFY` zhWVbdWXeGO)fvh|d1tOOt=^kvuW}E=qx%Now!A4O-93Ot1F8#t_f87@_@7v8@U}{f z4-Lyd(XWnLiTc`WTVcv7T4`I^ueHP`X*%p(VOuFJr}YI^*iYc!+9pjp?4)=Da~{ZK z#iNv_%?mUQdYQZc9m_OLn!KG@kf1^4^V(LSiRdMH#tO71#fS9)v9KIdl{Q^Ne5kz= zqy`~!h$q4j-GdPiak@u1KcR0R+`;lK4U!jDR-o66)GdlnJz8r-rC7A%UL+B>e#zB1 z$yYDNj!L{)U7ualv|3#5YIyY0+OOyd1Ee7%31omZ`jFowLToK@ z;U(A~*1w2EknWDCYu~&hcy#?4+mR5KFUHG)e?%3MwO*8vtd-6GibTt;ijZt3rASDI zeH@}Q7}=GxJGSc~A$(W#@qXz@9lh-Pj$V^`6cgx~y>e1EA(n|?V1JqmY@Q;|IW)zp z$Kw_X2aXpxJ@S^?=`rVsEw>`Nc(d z`1gPc_>TDa;CF66%Mk#iORy!QhP`n=bi=!oDH25y09jlPO>vl#E&B!w!eg>!TDUpc zqY1kqtqi?_NBeLwA7($MnwJ0+Nl?gm%!YzUX0nlZ2n9gpquPsgMaIyIlpYJI?~?7s ziVVVDY$tw6&b}4Dobd_KC=l?`HS%c1USTS$zLjsryfvb|ihbCYF~JYP_HlZ$5Yb+w zeVDLzK)BvLFb<%kgJs7H zqmvo=}*PpDx^QSt(DrJ-B1XL)FQ>& zDi&#OZb;?Hz6uKyRLp0hhNXI3X~DvZ9gl&16^wuQ2vi|K3(x`l25S$@SKdE?&GchU zU^7+eiGL6DPtUgfvy&LJfW4IbpkgZ}TF>{p8K@S?Og0G*0otb_YTN%fE2afk7Nvg# zy`9${>Sryg2-rh?i-cki^#vY-_D~0qQafMNPsVAdbIdRg5XyDlu~0y%#%Ux4o$5K4 z!PUuE`=(B%2MpjthhFsizUz{@$gu1?jiyz1!y@u(byS?M+x5oYt}Ax#w;yLBD4{(z zP^jT40kFpz(#9E;1IswGL!P2%*XH5Cg2DpSHqQ3(7o)lRap193kaW$^tpmX?WXVMNR=!H}!Ti4y9sf&ZY=<^nAuzKl9a^C1I40quu;J*6= z^y8Y-2Wd3v8u)#D>IsmP_em$!n?A|MI(uq##Ornkuj}fBKc<2MxQ#=2h7Mb`b#W_~ z*C79j!uu$Hc}_o>BjsR8IJxEYmkX1DB3Z{7={k|)f$5TN=}%&d=IUNWo|+Dxq5%%M zkglen-wg*1IXB3KbcIF5KBIK1Tu4`Kl>Ug)L*+uc6{GZaO5Z3K(&ZVYU!wFdxsWc} zDE$njuaXPt4vf+TlunTg=@yUDZb}c53-40W_fq;=xsYz;==%&xUndvNQ_?o1<-+@T zDrba)-N@5)dzf>x1Jk@ePt(OBIwKAKi+FmeNRLE(WTbO$k_+jQkl_Cc5n;~tav|Lu zQu%32AV>7SQv@jRSBg*a^Fw*fkS7)nrYAl`bY|_4bM&nG`WoR=2)ubIvUDEZ3*`Q1wXoD8{e4bSUfT4c%@Cl{_&(mz3` zB4@l@xL!#gr}PB5aI=y=Na@?BlJ@BNrY}(hDiAlM5@A^ju2o<-#f@ zJ&n?_a$&WS9z*Fkx$u~h9zyAOxv)k_UqNYuTzFDRccFBGT*#Dk45d5Bh4o7MXWX&n zbd(Dll=L^0Hp+#KO8QeucajTRl=L1-C(4DbO8PBIo8&@`GQ=-X+AJ69mGsk;?kpD? zl=S12?jjc&mGnYNca;k%o)b~TTuNKyLW`1~M(J*Hp;bwbp>%hwb4q#$rF&qdQ_@#Z z+KL5DNq3=iPq}cQl8&MDWpd#lB~AB*IlbgUivL9Qe?#dcxp1hG{*=k{HY}M+x(m`x%d4>>Xx~l7nE7`k;qT6o_(N`T z$|e0^Z($Kqv=x^Yo+ObI{wpn{TW0Kq>5swu5ANF@T zFXE1(ooMNBmWF#CDB&H4;@Xk{p5u?@oxU8hy>d2H%k{^)ihCCiONJ8Z;#hJTxOYeq z{_tuP_?IaExk!IQ7DWV<$!wWi0K^Rk*!aF=?4M2ILE;Ak@*j(=`Wsq|?BGEuM0zh| z7Fh%B4apy1VPF0=E|9;jPh|c`e?yi_kP%I1(kw`b+VMAJoPfwrIv;r(^1)yQ{)V!f zcj45B+bebt+QAt%!ZP?D@Qsugforp;#T7oXD?j7uskoxIf;gb9fKeXan zOdva4Mv`A5c5_JU0{C$Gl7&qf9GbCnSVpBwfls77CESzF`TP+PeR6+9&w|b2{)nhS zuO@M~D`MQJzarZ|Gpzl8MfTvBi2haOA^f-;>5s_5c1#0NQ4c_}Vr0WZASmUP^C3{f ztWeL)7xqW=Wg`tuIr|L1#H)RRU!uoycBog>A&Sy}mnx46`XfSra{ociQ@KD&%=SBZ z#ep6Y{n@TO3i!4WNoBHA93K1;QEznsJZ13^^abJ~`P4L=B!X0R@-i_h5#te6K4oD8 zP(g4!HYsI^#KOiy42LSB3in4e_ZQLicj8xc`Q3mMSmzXSRp4D%US)~ykLWk}2PApb zulS|K;RpOuWfkm~p6!h<)|*R{UlE$1n7?t@g`3U6gJcw)Y`nXaM!h{gZ{P0gECNa2s9futDl+U~;l z4PU?s9^_@%>flubhA@zq!L2Trm%WJ+@JFUd)Q@$m`t_s7BU8P!hyF!`F`4-^?&kU#kOzhVja9>1bL8@h#3da(Y; z{cGn{p)2KkC>3n8(*HsE8wOXMfMNcK7NTBN{&p`Ciu~pGa>4hDfaxCH&O5t?&>a#kCVSQn=oZ!)_W3!8dOq z4ydXQ2<;DhVA_T(+=Nr~4gCeaFauRZXf*TAc}_Jzn`bdG=Rrr;hcGLthVL3+n(?yk z1G+=L7k+WuD7SE>-bA)H_gz1vaAR-{O(+ysp|{*nVQ)pOx+}D)*a1mrrJapK!l2g7+urx_99Fn%+(qLtpchhzm3byursw+dOs|AaOo_F#%Fi}E|*|1-cQ_678fOBikA@r=R z9*(EdY%n6~K^g^9ETpK`qBt#&GL|6@%lDx!sbMF{Lp>#C>2rB<1Ke3Qe}OX&++`j_ ztT67q4wUIRekD|%sh|o+ z?29bYala_Cffs3y&e1SZ_9oghu<=U69zYRNcw8FCjgkJQK*~~H|DSmM+CEW1I)80o zw~N<{JXnxgP#lIQY#4t>R)ORUnVouwNXF}C81VdESSK(^Ui_Zy%3PUvWMde=P%!0F zTp4&MAibo$m9zj zGl_Q{s6Ka%`%oRi<07sDEN$$JT>&gauq3$7KR_sGIB3MPti&1?@TX=!DNtZ@GYJ8x zrSJvp6oqv#<->CT2D(9VGmswk)Fl*Pj#v0`}7YquG#;pKP&LYsbdn%}Fp#Fxgsd3Fmx7ZsIih}!x7)RgSRcUVY8P_-x zox)gRf8HrqDV@ToQ_l3`@4E6%sdgVyXBM})y)oBPS8rA@Z4 zVYPRD1CMlTpuw8Ses~evkZog%Z4-2lD%hjY`a~Z+gry7mXlvMiPQQe#2l(@lXI@6= zulls?1E%~J07~f7krRWNUjXwUHV>5tuyGAuh4HnY!~lcnM7wV$T+Dbu@7cBDWq$>k zgOY7+nr)4%gF_7<8-iZmEhEo8PHMjOxNxb{d$a4={U5yKuj}a9%M%V@qqMMK9tJQP zF!HGmOFm;j=z;ZRS$!qY392;WRu92k*Np@OmR*ATEeAYB8dE;^oUtx4=UAO5Aq&Hf z`Dyvrnz~*lb1bDzo#PNxB(@Qch%1s|_M{uF(jtTOu%2B;Aj+iC25G7>We&g6gZ z;(zbvf2rTR1y26=KK^$B|Lfv^m-4@l&|h1g*Om`8KdIDE{{XgA{9{Qd)JXs z0P(})^(m)){ur83H`9dWTSi?6?vIgY1t*o_gA!m`!@}Oq)fi3Zs$NiLHB+qGLy}C; zFiWKgdP)CghG|E-!Jp521)R(W(st?}S}ET|LH6h3@Zr*<-}TP2PcU3H2l#Mx+(0Ql zSO|rY_F;H_E%L)#9Od6C@^@HIsTDDPxY|{zARgJ`oo0*`^NMV}H&DtOGk=4HkKh>n z`tEpGF(wXF5g%I8f|6D$IfY8{UaGrl1HBOmf{_$}(I*Il^x=Kq>Al<2sb9AfIS|@J z{mivD9E}jPYxhS%`?e3l^M|1QuE>8Lw3DgvPm655H&BY2+%M4N0l_ARqMaB(dnQWO z_2vk-hibu51+TSx!rK{wSLe2PO=tJLAD%x1ujBi8Kb!}zfrQt4B3thbl%n&JfgQh&F_x zmc_R23eO*cT7Qv0>e!ipn#q|?sGTe0s9i&-(F=~+c!Apd4U_1NcZ_lUWIU`GlL%x@ zQ3>=NfVl`{Y4uf+{Uu@@2|?B=S{07$-uK!?cDTrY9%LOrfOQT*mR@jVXW{|lIDf-k z^oEd~jfe9gyRY`8`nOv4+9+b#870Xv(Mjc7uks-e^g{UVPrcw z?*;;_pU9R>BTFwhvQ9hz+4c8v6pa|qPEp766t?gSjHj$8lGUW_mDbTl>Z^(I77V5F z4WQgLV!;d<-xZugh(P(o&UR6rDe|8O`2=y(q8COxvg9z9@X5LETPVAMGw2!R&}7H3Y#=ImZx&U?#hEN4p5VAo52= zuq!5NSLb>{@L`cH8H_chO`WlWZp8zJ(!BmHj$ju|)UHt{>L?Vx0D`iT3Mgx ztI>H21{1!Rr6sg5-5;^4hT!`R=On`Loz8CA4tyIBI}&kwU}e^#UDQS4{&3FTN+lZV z6pXbL&_~Ib)5Ez9sCZg>EFzPS8kargH22j)n z_`K2j^_B{-`Ht7?&rGeGo$=HU8ccv!(1poFN1y@)~=K#Uk5 zI$P0_%4gr#5z9pgYIle>grb(kw!GCYYW>cGnpj?H2({n%#$3mj7ka^$7lsE~Ug|lD z?JqAyD0~4FC0m~FlrDv%={prePKUlB()=}I-3Y-nM>HuEQ@=Zp?R~RdT!)JiQCAwV zeKZiRokcdjeb5VzYm2~j{)Se1L)*tWJe+U)*oTe%!dUAXJh}N0IDJjn#MacCo!(lsFHzn!f|vD@8VrExq8_8t}lmJtMs#Y!mTtK5UO+m%k9U_7xBb zi_=MOS|6jc@K1AoAp+ACtZqwqi4Z3KZc!pCrm>iwu}(8u&qj!BT{lq58?)ZRQKBU$ zHtNhwxG0pQ0^0d?B|4uZ6Jsaq)8(N)-7mWBw1MdOnHm!~_X#-MTgv)JES(|r{7=p^ zgyEgVe*I6oSm%iRAz0I9K!~P)v>FmNwz zvR6sAHMnuQof*Qw{S_bm?ll0|@J49k<`Rew&Y=R}9bo`7kODMa3q*Vz)=lm)OEVPJRSExK{M z0Q(xH)NWjhl&pVD%H7DB4SpmbxcV@-ixs&4-5lBjcN3&U=N$s>v@p20A*DMjWpCmG zv;&J_5dDGpMgz1y3|bc|ALpDWpy|V)HSM9n-ppa;guyz7F9hq3Fjysci~8;puy#^P z#rQQ2Yb%GoW$)$lp@1qSD=*>jkXbFj#-#u!=aW6Icg>$j(q;eezl;vbR#{p3a>D)(v5>t|VBw z#hi%$5e6#(Ux`4ZIh1AGaU@ia}R(Wm-U4qGw&N(UWDY8=ufHUz^kDhFp2>8b~cJ? z28UI11y$p�{;DJsSqgfG^|~F)s|(&mRI-XQyQ~Ukp!DO6`Epk!k}%W@|~Om1+-_wpshd(ZZSBlR$56^EFVx{eYYtT%b8TVuXDJ7b$b}Bkp#=O z8~c!Lr>@lZU96OQ%*(ebK307FQ^A{%nZ{~)82Hm4@TSfb;Oi)*BK{>(y4)%$yM`0x zecsjzM?ZI2n%W45_ z8>Q54dzqkRpG3f8jcXjUhCy42Z*X)4c$zSH3kibWxkvYNup%Ru>E5Ru3r@kQzD=~?sC{u6udfmHt$I1MXJe>_IOkSTU*qo3_J4hD@t0?bjd+d9-Z)R=iD7+_oig+g85&pd3|?gL z-*`7N;8W{MfOwU&Oh9~qm%We5p1^uSWsgz@_$e1<}u;Z|#I5 z8#2BbDc$HIV9zSRo(uz~;lLIMV2cDW>oc6tzTHJgJVIsfRLV{ZD_e{V{u`HyvNzGE zLC$nh_Ejp&ed#Do$R{ve6)+vcz~pi;c>+wsMh<3y05g|2;Rz~x7)uNFMFnM0`(iXN zyF!%RMxXjP*Nd_P@X51_Tr_B0eb^eYGAZNJf#6E?P15=uGo@YR-VuS3|FsdnQnQy+ z64W^cr}|BO5o+w+K7fL|H6M$IlaDcFJIO@tPz`Qub(Nk{a`k#t;$@W1mx>6EXE**L z!g&XsLk~A%h+Ezyd8meI{)P2sbCn!cw%H&A|hy zcxG{6*?XJzXx+V>-{DHtIsWXww9c8Wfe>l{M;E4{P_7^-T9odoKi6S?#`XC$>}M~YN`PBu@*U$N8a#=&wR0{C&`qX-naId#?F|$Y_zvaxt|Q=! ztmhjR>2v5nA|5ftQ7a>*$m8)H_ko%^!ludr`S~t?-orOyHkk6sJ7kWQO;BDzwPyiV zCTF!C-pI-xfzx>+4*#OzXnz0m=8?t@hkk{v(MxW;T@T4)2a^f!m3uu!=^(wdMZ*{N za4u0nC$A>Zpa<%_p$!*}3lJeR_5l$)OunApi>?59*;+DCZ<@Q&{VY)o#>A(`@TJ)s zOa&QStBw;`j)vWh5_MnkkqlR~CDwzFEQ9LR_x0F-_ZM#ctTWQgR5)P@}ZI*4D99gBdZFr?A zwe6%I_G>PwM{P^7?R3WvIa-@Y6Vu&F{^l@hJ2znzNh!yeW@D!O4^TjY))iEGpvDJ3 zplc4j1bwf~D4%BE>!!(&Mu460!N z)q4>IXYLxV3Rc1swo<5qx$B|d^EmJdG+Ln~-B8laB(*t?Zb4^|!rNLLP}6Li z!WGe03hz}0=-F)sx}+kviS0iLbfa{}N&fW>`kGsxmV46mI@hNRG^I~kZhL((j`||E zy}l@wCUfQC#`cwmCzIip=Xe96Z^+|+xAL$Ib=C5MCUhgzjPfYp<1J66$ls^pl z(d^n4d=*snj{{pR|K;=fHpw^L3vKN+hGCdC*{yUPxEWf*o`;PZ_dp2@<8*_hgGM{W zE}aNI1bU*y-t677exFch!=$Ubib9`^wZMU+toJ#l%J$uCi|K2>)DeZf@bxwkt8ybs zo6MR3YXm=dI9gXhCn4PoSP;qEPD*Y}Jm_m8ScC1@2)OT*Y&9ds>ai^UA6n!b43#$L zR?=(ZoC^+^P^SjJXKxu{pw+)|#CSb?aU%wZlGoas@A%NUhF{-mfSIR$TE#!ndp8u* zucI{}qROdi-r?XLc$F(B>zjP=Y4--L3X}B`soibTy6?eDa_P!bsO52*#vv>RYH7;Q zYq7^hG9&mR%?864C>iB@PO|4jOWhEvVg$Adk@I@kQ8N2j3^Dme=_BdDw$Onis5+Vh zN1f?c3xAi{aEcnSfShFoHrh-4>CI9ZOt(`@* zm0d6W%P2?&)IiiCrNUvW*Uj}9-NjIM#8x)Z0t%4zURl3KP)l8kAQi7&NWFZZ73f5= zyWM~($fZFg7myYxhA2fL6R&LC!zl$sHGdVz1r!8w84!+Nk2d525}~ffZt^kFOT+J? zmlh@dOhlhXrI%z*FP9T}O->Hbi~C~eCAmF%QQ&y(^*HSGXhTwxy&kA~j<@6_Pi3R7 z;uKK39t6u}=y$**FcxI<4N^ zR$0G}a;5ne#>x6Fj=Ij$K50+NWOK@X__RzbTXNYnFbe;E=Vhpevrr zM}ALkD>%nSQ$8HPz)h1WpZxzy=~f)RqXmFaEN-F&fKWb>c!#`V8>GO9)>!o6{mZ++yQHk-}ulD!dW|yd_y&BG~k3?OD?Xvwq}4?g0KJ{ zv$?P!O5Xi0gg+A7c@`PI=@s| z@Tse>e7n)xK^`;Ed%ND_Gkb40c*i7p$0U1-%-%8mpyU3jw>wQ58(6Ak@Cv*zS-w4q z6{pc68DjXMbU5nw)DI0D=Ezc!A1R|+2XcHVC{ztiiE$S2mPC;_H7zTlrqkK!SjX2X z;Ot~DiB(`#VB`QjF0cE5$!x=B59Tv~?S z-QD>-jSRPkuwIUlIRusld_Z(_%as}CevggpV7l#`l#Syc21Vk7a^pWg!9i4%O5>x# zL&LKl8Zj!wt@f2OjNUjzu%}_jKy287-i#z~1|O9S8kHsxBm7!t=+iO+Ui6_4hrQ|h z8z3V+7+%nB}oXug*J` zkJVW2EbzQ=J^Nz-n#&5?#6TD{7^4T4cQB7vfUOdtCq>o0BH1!w2EBv?%V<>;N~pPB zP=fV5l)&e!nH(<~B&>_53b4Qg#=sv1Hw%htMQqvu!SIh1q;mOp=sQmd#2TcpElnOy zs!E^Yk;hW`PoGmbF*ZP$rUc+4iHjYxagdMc`)OBTUm0zI(KpD0J$(fB+AUhwP^4J_ zPsF&cqQp|3(77(7y%clUL}#J#%^0rne^&$^6c`8cU`$r_eKrC@&=DpXLie;Ofyprr zPBU;navi#4ir(APGY;`37Ei)Vvq~A3chO+YCLO$?WABOQ?_p5K@u#+POD{2%RKap^ z{)DW*Nqqf9Ut$UNJZdFZ@(-$0hlNfZ?v31pj(GLOf_>OxJ6ks`*j+L|g9R}i-3O=UXu>T{ES2djA5Wf*` zT>aulqJf)`0H-}q+JEr$6=jG%$tCpzC2PBvA)fu1c`b09PL)EMALX<&dmc@x6RqvT zPyqmue||_Ug(Gpqu&ikT&`eg^wU|um@wOvw8AlkXyWBAn;zX_#?!-V{^}x z#;0e=6GpO^S3}Ij$xp%{w|`AT+ZTB#7}bV3=Np^KoF|&{DU1ML_@dw21RxD-Lo)Ow z?@>b{Cf-*)F!8vHgqa->T!hzA!H(pTg>KXqTPcVc!b-=h8T* zI{Lmh!3jJ_S9j3kgUa_a+#cWfREp1QuYo2=3&JX$tlf?Rp3|}JYta_T#~~4nSXT!M zYQ<`wK|+9*ZhI<;-gtP4c()_GM7*mb6^wJ~;bgT#Xp#EJjPV4zq3#wnQ!*v5^PG-z zUmcmZeV~N9k0oKn>4YnQ{*S#3{-Y5+0;JIq@{}a_aui6X_~aQ?q_@`^hy#JpV=#So zu)Z&YhDd_eB2OOa&9F9UweD_`mhX(6*iV0Z86GgOXyE)TJ+&D;DVX^Ly35cakU?^E zRs`$SRDSay`H&O)0HUyp)9=s!;gumkO7-d^Ec25j zU0R8&2TCJ~26!y9gS~^I6xe34q;s%+_r&9}zlH6=FRoeOCD-a)ngBxP{7lWOAxo|| z6{`aAOR70D=dW?+P~VTDS&TPG2YugnL6;FlrpS{T`Ps{5}*RW&%MmmSQDa zF!Xl?#W=WqCoz9YP>j8lqM#Vqw$H{u;&)bWDxm2zXSN!u0%`+r^2G*fd4vuF^3@g~ z2OZVgwBeg@ZH)z&URsXeJtTWf|P!-eBro7tfy6vD%-wDu!P@z!>u z)`F{}P#fGW55MgTgxc84`!79c+>Qu*5OtSHN0f762{oT|A-vheIQEsAH_qq>r2WL}zyq4uzrdQs?n*!mzuzDn z5~1pP(%#GK|Nm9%HKu}MR4>^Nu)81J4-as5H(0j8b>D1Pwa~HHyS9 z9fvWvK6M+jSQo141XAP@L2?DcaPf&CbdEEWKkAV8f;Z0He7{Yh^>x2MNW9!-9>Kp36doR5M2B5 z))g-vwH|wwR<<9&P|i1Xg-qm+kSiUALfjKsz9*G$BjTc5IFDV1g+N*Hu6E&2YOb9~{W94Kp~uH0{W1!r zW*{i@gPB9-YR?XqSFl-e!$1O{!x(gr?SPgq;<(fC%&62L4&K4Kv0iTR-(;)Ony_>T z!F;G_LdfRr)dAUj|7oa;J$>hQewlmw2vkUKjl50=A1vHhM2P7*;@MTGa~URvCJ*=V zr=U|H1o?MoL)O4^U?J6mdDV8reQ=d$6v^}L)e^_b8;5Sj%A$z$B~D;o-0v+i^ZT^l zKbYAx7&r65^bb%56Sq-lE(Y{BC|CU60Uh0DK*xyz1$)>(O(sHj>*3?S7av@SzktA! zMmntldwE^V5a^tk3jTt%jV}LuoZsw#$?((-Xr20|hqJb8;C!N40k%$^qpdlbsj@s1 z6|tlTvFU85NAe0N;@Y}WFVu^PZ1q4)S7mXA?8ge4yd1}OX%8^LUzF`2Mddr-kd#&( zqg=AS(jn`Q0N6Ix7tlTL4+d;9kN$9RS@QK4`V$=(0H~q7mX@K0A3CX)$yWy?kg&3gBxHJvP(e zDN2IpL(hrF6kkB=IEfwkCoR#g1 z*87K%Tjas))q8jOK^3%9v1>PwQ^O?e03)UCv}K7Pj_taeSQJE zB2#17*grq*ubl(KVJ#FqxEtD;io`nhasb?rCBI(&rO)zvkYROm9Ynp=j9zKD1v>r zCTz$Li)6%*kItbXCk6p$LGCWe!LC)`g$?I0z9BHo0|g|O zv0NSIZZynt*}qaD^6P0o?ul?qh6g2f97f(+ezBT6GDVHzlw~2M-hz;{=BZ?G(;6 zg83xYQ*hw3*dX;YF`y*hP^5c8pqF_Ox{Ylw2)U?D73Y!bPP%LVu}{!-r?_jkgPt6$ zIayqO!>^yQJ!bR}z9|gs4Q&`UUY*K@1w4i3g;Xazg?{xXs&0i+T?6jg2Z4hdh`TO$ z--Z2r9CxkPDT}83S=;KtAL9 zn)M=3YZ3RFD@`6su_ofDXW>fPWrTzxGw--H@3h%HSrN&%K-~X6)*(;J&8GZqv>=7b z{dI5<$IcFkfwrr{(2sXnJT0AECe(Fe5=Cf*LMxSm0>=JKHh3X4||rT1MnnyN1C#B=p4~69hvF;}9;9ghxEB zifb>z6>`A_wgX2PWKSz~SMczzb;h08ur+mJlR^;O{2#VxKIE?wKg6D=sf+)RxVSpv z!Fvv(+ZerRc@f?q?`q_gJQSo0;+H_k+g3JY0(B@tEW`iFME)4dVc=lQ6@d26nZ=n! zKD2m7Cu_tom$QuPFi3Rme21`mp!+>GIMdS-yZ9YQ_gMagYP51Ri^y07y@+zzD%&O@7$o8c0GL9#zw5d*1Izg-J3w zf+o8p>^_;S`#lCUExE3rlIy$MqUBn(O9WMEk)K?H8lW~{UN(idnQgC9^acj(d=H%< zxI%cXG%TBM0IzzkG=s=VQ<`COdd5{c~fGS`iO94rS)ar+MeQ(Pf8H!P+6UtHJvTVj@L*M^*2fV zck%Hf0V$$KtVOUthdj>G{B@3|7p%6fY(f50yd$m4#`DgDq%bJ)=i{4%Ar)FaN4N|( zyAi5m?QNu=ZAgfW z4f*V7@!h9@Y7=aGCa$@WI(_`er1qL|AR`n!RR zMv`1BtL z#hDe{;KII)oyh`+D{kM314-+HHHlv}6@8*G4x|COpM8pa-2d@NHOJucK#p?uHi2n? zgb=#>ui%-Kp}u}aSiI~e;;@Qv%!`D$a*+$T-r_CZ8*B|=}GCPD%b zTrG7(xv}zMecIRV?**EKj(e+Al49Ft$|v0nOivDZf*JBjKqi;8Eorusru=^Rs#qM5 z!}bPOZ^^zX&A!o{AnV_R?TDk!1X~c?5b$T6-;Jg-h$=R+ZEulT$R^mvAUoN}P%f-C z*rxIIS^Db6T24-~fq2j=#9iOkLWbBec`~<L>Da%_)hayw{66{i@zWLNV&Hop9Zioo5wTmhO{2PHUXJ@i;xcr?m-3jLr z0bUD*Q_RN!WEnY?sD}i9pnS05La4@tfW#N3($`rQZf&f{0L!7JgXYb~Oa3N`3~)BB z&P{ubIM=NQMj?7$G}29b$rL2Y2P|&Qd!y@0P&ph$q+Z@^BiQ|DwtoQ$_CQnqon++z z5v!f+E3fSwII^`-r{ILQpRK$L2vuJcXg_Y+0os(`goj9tQ36-{CEdmEXBk2!G8*%R zw)1!XfGTJYrD@7u6{#=*#EsKQ00C{P-A^jg2UC6qU`4EcN_+|{ZrwQ_Kt{F*-h5iw zopKw=V6K71-zUyTw26VD2I7K)#&fYq{^5^e%fk<~ioN^AasD}r(qPoeS*cRsCqa=c zN0k3YBzr354^a~3k92M17xh+Bv}T({U6%S5CKWgay+R z1B4z3EAl4j%)w@vg>0e$x54ePRIr3L(;S1z9hpg=Z-S9*g6sfJb_!M}>;T5_>gr9R zI`R(F4ca1|K?Sh6?bZ}v3ic}4w}UiyPZDtthoXBI1Wc zgtkOnL-5!MoHKQ>%OBE08Dds556ui~Yz)X=w2}_TI}Xzn;Gs~c(U)NgzbIarxDI4O zU>@!bob3a8iJTw7k%Ze2`@kh37!C22#b07_@X^K6+DBR0+9>27mih$Nwu|id`;3wO zz7O#>9L$xd^gA83hRMf!c#JPLop()*}b$5`;*qK52 zh7Yi@$gtoHM^!YHtRtRuqLgKk=9t6o@=G~euPI44#(SY^;jlpM6I%OMNO%0bRf1?o znr48Q#XDZ_MOcN7v*_7C=hakVSwjx43WmTBiv{$#JoRQN0jN6Ih-;v!gWX^-Ld#>E zqyz^WK(A)%)6PnVOk)nCy7`j9^SypymsQZGkAqf#PY-4XZx;RNIn(MIx>9>{ock)z zncrMjuNt{P!>T?>W_{!@OH^>5c*P8&=G;*~D@S~Fs>t4mv$fXH>< zQVFKLCAA2S0OribbmfZm!l)|HIQ&Y>NH8O$G6h9T2UEawD*~qDEVgU~4(+(onaXZT z>4uZ4VQo^w-LThLugXW(l6+)yL3oT<8b5CDLG!A!f0`NRfDm&PqF+yavUHFZ z^SAE8pl!!rdFEKB0bKV^By$^zWee&cI)J!@w!s5cljiDkssBU+913KZ<|$AYGd?7>I*fc zwt9LlwLyvxe0oTG4k8{51O3ze{`It^?$Ze8|)jnRbXw zUqErN`Dm}Bo)daqb)7-v1DXFKVpWj;0vxIx2t!uGuKe-^&P8zCY&Fm`srSq{sY#b+ zG?H4Etwq=~cyr;4N3rP>CJpwM6nld(Y3K>Xfg1MeGP3GZz#cdTDOs)olFRmO`cM9a$k?Ttqbb#X$VL$=$$z?%nMA?3D;o&bhPz_2Qncf&piBAbu&`q*<^uY)py0a`M= zGtzOy0KU9KE<^U0+GLkUY6Cs8RIlXhfT3i6Mb^4l&o`}740I>Qc!q0S@ic=<-Hk{O zksW&J>y$52Klbd^Asj|sOxj`7xFguKtis;61CEffUR;&xGdz39yU`C~N5K9EvZ6pX zLw`C+QXb`m9WkSb-e*An(k$I>CFassOX`wPWF-sIj!l*Q1S4b6OwZZ`+tc-+5L(0b zIoRX((<6)m9Bc_5B`~8npmU|_w9`=gemgmEFrWD;j@`Hq;ck={6mx=W$t;|q{Ox_*SsxVXFX zN)>oAS<@Vnx}zTy7-P_?sT@XHi@Ou*bQuK6LZ-l}&Q!1gorqj1lq->w=^Rd{vvoec zPjNy8mAcB)h69yPsWuUHMs2a%n05}x98y08kpXq5>(d$*U*@b*zt-@A=uc{Ax;~}E zk;#?RY#nidC*InPx(e)_q&&tO0Wv2#9HS5HoP0eUj@-1M;#>nZjx5v+@;g?nV2Djuh3~+n^aUFc4ke!+vGLS~^jCz;>RD&jn`)o zsDddQShQ*~WwVtzyx9#=p>+Iy3f z=$!&j?RxJNBQ{{tfa^gl`>LEz;opYOds;xq>x8>q_f>pi zKryHRF_I)-$C6aK|4Q`%bBN4}Uf2M^4pxbF-DXj7@UHN%lnLW>-)S9L<;QuxX^_Ui z79k6c*Mrz2CV0RVoYtea5Vb6m9A*s}zj3h3V+L+1nN>0H7 zfPcriWd$uyLEjL{cU%tnml#>y9moCBt!Q?0i3XAgfIAH)R!Af(H_^gJv%`jK5qD>& zljaUL@USMV*Vc8v#Sgvo#c+S2zHfa3j)ved7A(L7k!AWTv}H&b zzmAkqgxU<7{t&{miVSQVo@K7iS<01%03HfxW5)-|lZpcc3GKV_1O$q%*$5_y4KqvJ zIs6Zzc-}10Vv@=CB~jY#7?-KFY4|H>zdaQKq;(K89IuUD%_U^%2=|F+_BDbI zl?353@b18L*Hi#}<$lzFTv;7a2t16av``lQ316@Z_5~L#&VBf&8ruyHNkU``;gC7G*-Lot++|S$|`M9a(>vX0* z>`5+H{pjeoJh_Yn`Zb}?sTA7ATr?f71Ik4{HWSPw_|;7G*`=n-c4A#)+)?$!(X}=* z=%i&sPysGFi19(#kA||I^+D(k)I;BV3-cQmhb14*#@p#Z-3Nb5?3IV|^U17rG1T{d zbGIHPoH8LezlCUnNOcZ|Q1f|@VrIMBd>uDL@IG^U2Gw;(WL|N~I9~0=+hnGpLE;9W z_pzqFM-cs>B_aS|RthS058HQd*516<<6VgoC!NDXV>A09k4t@z*vwq^!Mt>ti2a$_ zo4|tj0nnamFhF<12 z>qWR9Zaru#_804_dVo{_Go4&9%hM@*Qc#8UYxu~Z>SQ7;_>(!%Qt_uJ34hwi(?**b zR}p#AebHDkI)OrcA)?JGxKJy|2fYGqM)D{e+L)JKdc>T6e_All%?{=i%~q?JliJBv zjhLdgY=${cC*~ZD_Z8O<#lO1F7J?XRrT!(yqx^pWK9tvi%G?U%r9C>i&lSJJEtnr2 zuiw2`M9bvxO&r?e0baQYIkZuT zxA9h{^K^l(5qWFJ);4sQ`T-Ih6QS2YH(mOrMb^^a)-_ig+QYq@Kjs0ArKR zNlhq!w$?yOzaCQkWy7gkWbGU1dETfuh7DFoHJc7QD#sNO@^P;G&z z-i$l5g<^;&Y-@Dm!$zBKh<9fy-Qa#`x-oa@C$1BK9RXd-BE>L;dXR3M-qPOzo`Vcb z$^KB&jkqg`XpQ9jtN~yp&JQpqkgJYJ0q>*VK%T_Vhd}&e!QH_%A=|LTXIE|n9e#vI zO09=an!}IKKW)6toBS5vTRCL;Nr!AC+VhZAJSB&$Odqm|Crnypdo)5YWu$tcaMa)% zhNIS3jv9F>{R*?T9f%g+1O0$NbiTVw)1aovXPJYVv=c8hnmwO*7D&;fPYk&aweVHv z)KC((f!{y-SU8XO3QdLuati)#$*Y_zN9otPsrD zwQgnn1BVK%i$yqbn6X05j3o}$pe1b_s`kA~G^`x=q59K%`cU~C2Qi!{e zZQjH=CZIpVkr+9XpoyL54!eB`WgSWXTB`1m1qZFq#eYbig^KJa`B{+SoZh6-zL^cQ&j zTp?RTM-q5MEJTkey|Cevp-}dM40ZuO1zK1CGn_4b&JzT)Rmtf(TWC5RhG7Rub;oz_ zN_neBRY4Vl-PaP2f3N|*Bn(B?ff(w;#|1-m6Aa~zF2Fo=gp};IPO06!g09ceGPQX?^U77Q_&=mujRXlD}m;-Q2 zIi|&dnL7`^7leSKiOYZ||4#@dufN;u95^Nk4PSBn2Na281|qh#XXyu6tJ3PTmZp_X z>ARF7{g{CS6^P+Ac`y}dH5V99|HF!AeuGN7*$c10F&_YYU;?fVH4dJRNZWz-L3% zaxKESq3Db2m6Fy6bB;|ztgA;s?BNM@bbowC)(`ensC3{9DAWS0L$;3=%`YH$A-@f1 zO$!(LRI7Mq$QxhfgX|#U4aoQBVpG6hr2#|FoqXZzU~&SkC({r786s z=Q$^L9DKpyc8R?@Xl@_01Ez?>>qND44&245;yLpr`Ey$7YdDWuowIilG`3ETY{;@` zcW7N+sPCbgywK^(@{rRU39jsC7yYWmvxnDJ<8}xykiTcXB!5mTeLdbNAJSsd3mD0G zwEiy`4b#ePhVBK@R91=V6RU~EwL`XkZ}x#y`2qVO2#05hN+m5L*o*%XF*?AvdA@oA zE@a}k{;1z6jwUF(^k7^uG2~^Nu@=6aoLj5t$;M6JVOEG>IrQ~AJ0A_!?vXl zPiO4E_$jt0eH1No_^AIUrH^!V<0Z#0eN5SZJkm$!1#K`&?MtrTQTlj%M{ClDjo*a- znDa8?4}gpY$5!@3%)Kxj-|m5~2>b`=z&==;j(ZF7G3*g$4GcL))x(7QizFQ*^ABa0c7rafbnj9qu4X+8d?d2MWTX-e6|{ON z+h;{J`<4?|_)viisjEcw?+V8qN5$QepNbq9mJsHE$zXJvxZR8#kVWxE=iyurjVSyA z>$o=CnfcsmXXco5nTzpmo6QZiu6{Morq$-VPXR?x_if_}8q!$ZKML$*WF)ongF&~E3^tAmzKM9w8Gs4}CH|UK9gWiGRz2BdnK!c|I*OsIi z<94&nels!}kHWFfG&x+&EL+2K5AT7=CDh{s^ZFhKdTr{0d}bmGeP&j7i5Dz>Ww}|numOc8{G{J zv8%Jn+*V;HcqeD8J^!-=xr(+JL#)vrtOOo&8AU9e*3%5^9v=&JJW#A|`zOF#=SwN7 z+vxVf>n2u!^x;|Q1s;Ea8?_Q1C#mvvgAI2+{z+(L!yCZ*kGe;X&KVj=^wDrf4h88D zFen_0OU$cpgee=W@oqB>Z|!j)7IY&&BX0GEs@lhqo{y1&E1ht4FBk3@(@>w-ZBE=C z*#O_Y*;9S7XCSBl>`8Iq%PA#EMO`kyZq`D;uA?&6Ymac0TowEn z&eY>}!;Fp{ihS+!-hUGbtZWVsSzhcl?voYRPGayel4RIW6bo;!byeNJgn-nYfb{rQ z99)4&K(tm*gx?kf5kF`)gCysfy<(nS)ai65ox`8bi4^|Gar?Aw3~eSS5>-`embIx5 zfN+Ur&D=Vu8i}TnLFMc8ijULa5)BJnqnV$jS&l0QRad?PiyD0LhQrd92{lNUMxv_O zpI(8rP-~~H1S10O%1f*{;F)aX**_d^Q1D?fnGVR1 zVCgzf9;AIZanz6>sW`(GY0B_Ez%+RX#9G$3iV(Xj9ZpDNC^2j*rsE01UseJ!1;?vv z18A@ToTnDi(8bzoGjI&l#wi{bpkln5II8&*@9QUSe*TqM!(XHT%u7FejJX#qbt*mkWE=&F5o`SC(`jnil#g8bXH~gw!{;Gpu>SlccF&<_G~s2% z8TPhJU&5kqg}s)R2N-NqEf3cP)wW82B{TiQ--mHfLI{6(4o)FfJ?l7FQTkjp&+7y( zoQ@{27$Bh=4rAm%)f(SbRUBb~jK56cyAs33BrYv}UUqHXLRTZ^`_ zZz0sC{vq^p!mVZU&_euU2W&`z|GJxv`+-O3+zqy%ED}GNEu=GhKl{=70+~bi7!#Y! zOvq5)2d09G;s_4uk0S^l1c@2YoB(v=%{+#M4bWAU)WAs7DR3d-!Z*vV9J!(cjF?Tl zG3^_WiR%A290W>%0a;8kCU|P;sOCz@k+GTZn1qZvXW_HrOG-D5S{KkGpV4?GHWT4V zS!!fS21o#;MyZ>_5@F;k^z&d^@VrCYbTf2IMDp`najpZ&1?o?DXNgK~sP zv%yOfvw`c_lfX4hNK}XG_-W!N^71sU&cW})AD4N&^J@<8=~7p0+beo4ro_O5fJC{a zRgV<8O3HG^DtF$a@G2YhKAdFG$tlENn3l4JG%+uszcF-yS>A+tdC0y00T<#RC{JW# zj&(zhRBtFyQoR9_DQIG;CdB7vMXsPz2}4Nq2HyCeBsverPOOnR4%Ds|5!0Ab(399l zE>pnMY?160D*XpYrp88#Varvg-T0Af>ii486 z?h!A6KF&U{9q&tG2}{g9014{RRG%M_q;&K?aEXTJ1LsyDoFGdr{2}PX@gQ`aL%Vml zGehjppeYxrzM(X{4p2ECS!ZY)#PTiNf<(Lt8}{5k3$X_oc>Tk9raunl?w7TdgQ{n1~-8pMlU& z$;(34ipPU~c63lY-_!UVq>M`Gfu6)O`K6gEK`0IbM-ES=7m zg(N@IaEY414fl(1+r^p&uUBvMcX*!hvNll8`4xbYr0Oo6EJnLXP&sp2>1C+^v{OGp zjBN$cxlS3TA8iI}J9YjLJ}T)%;2|2R>tJN)R6(`i*YO`>a*Z)rU=|MPG#Oec2?db( z*Te5=m0?r#6J)I1rYf$(QYZN(pj>3-CE#)r6aR8l50KMynAGu1Oj9=RY zZLqop*XBP4xO^7?#=ov}s$A#cGXkGx^mF!sJS;&1UU4!&PhpT!c-eStx3T0Pd98ie z5NbV3Z|~{=P422BA%=iabW=K?=@Faeu`D@sqG%S^Q>2W?{XJD5nVs=6eXi9V!HZ9o_a*c;1wSNBMIAvir}u zxDvDhdd1^Q5DE)+5q|w3Di30yslzh2r3_3DNljXcFzprGO?V}?;&=1(&LllI5O_zZ zwE?=-u@xM+DLWceqa#ppL)sGhE3xDd#UG0UMKys!i`rgL*rgbDQV?GIGWc4;oMmwn zOj%1jhp;HKB|kJ9e8z4+3)F`j}B{|Bid>JYB6Zons&pe4Ld6-`M0K>>nvS zp=^|_SGu0L6<9Uihz`a*ORko{!rC9dj1|4{uX@%3WNh%%Msx5BlfriL8@6zu{4wW) z5m5enWg9&xF;LG!t>%p0sJ|wP@IiLZ@l zHvaW*_f~cWI+{A)JPqtps=V;7DNpi^@lupU<_gXnDv6bhu2(&fH33$6Aag>U%DA-? zd|@}MSEeGFf~-+cax)<2{t#mB8%xHj*9toU`1{q5!=jiM8Y{S^Eku>1SL>YLO(+rl+%{1B3wMuenUt^fyyo@?}}_3nO)$s8SRI61XZWIo<;sDephdHL81T|A7%$X z!!p}O95m$EsoNi;0B=e|!{Px)mVq=xyA-3WP`5tJM&PTs_ac|KvJ(b{Xi6|JOrEqI zft1K)ZJ~-;V3iSABN>&d%~3-PL2qQ2m^z!Y#mlt5q&%xPR0{}SR%Z}bD=nTe|!(yfUb zbjmh!J|WN=kxg<*Y`3NFb|UCg(H-h9GEw(%x49*@g4+k3kluQ|>zHa_`+&ffG8SOQ zW3d?nV>6JP1DTh{sz(Z#3B*Ej*}$sEhQZAoIZ$q-Xg4YF<5-;}3j6?m>UYf>HP|#c zwz*Ma)R^E^{dQ}3wkXYJ4D7WDFYH^#R~C;|x8s%21~n9z7ve0m66dJ1;IvUhRL_Z- zbH4WtrizHl{r)25tTW3g?o}VW&7IzFA8BZgE{Fv7yEQKGFC;GTMw{4Lu#7nh33#2N zxA5#EUh2?rdh2QONA>0*+6xIc)ZZMP72R~#nUH9SiSC)}W1WVFaYk&l?tG8{IjFC3 zfjE0RcZ=S@M&tvU`rMf+XBzbyK3NEizAM$kbkH5LoFKQ zb{VUB$}$eK1miNf8u2jBKk;x-{c)CHU{Id;cy>GE0Z(Y705$z#aZT-_qwkDqZcXUe zmF^h+uJ?e@wU*UH-eg%r@N6@%0nhFD|E$)OC{>$9O+-Xje7=fKK(%^v(!GA{*W z4`~?=mb2GS0R|c^->ktN@!u8QEn|pI-?Z*-sogz5Sh6o5~7YVgVf83ZtBpW4NGc{#9aQ}|__5g-_th)~iDHojZYvAMOn|~FW8!|~{X(cj4Q0U^ zZ}b74cwmcd&=+*xN@b+C@*v)57OnAr89KumMkpdtj}UZ__xbr%j*L?h3)h)-@Yg&9 zXhLOhgjpEnYcP&2LACe=j3ZpfaCBBkh@_{PcV|V$x?P1B9pW=A_gY+bwM-9twQs<- zc;TAOYX6lC@~RU(3AzpFZe>fG<%D$!AChZB05H1ZBsqCr%hwq9>aY|& zo4>y9%*M`))x%pk0)POL6IAcswT^-wC-DQ4SG!)u-;lOz<`g_ZhvS_iFu>IO>s zb?W(lYbky+@hki(Kkp!mx`v1gs|As<1HN*dU&3E_8E;ejHt2v^S=~|b@sy}lKSEBC z-53BkL_YwtsU!1bcq@OwzBj9S{A8cI&23}V%aG%7FS?22+^pV~N5gyS3-}hb)s&2D zSOBFu@3HfX1y?>CJN1 zJD~FPlysD;kVQ8G8-TGS5Vxb5pVN?ut`=VjRWKlPi<*AC9hmvDVeSe>oJ!M6*z|@8 z;G}X|eKFr!fbidr<_$RwoiOe1@vXZ-oKQh@%Ata+wD4G5ol@};)+QXl0il%qNPSK0 zaG<&oix9fNDymjXZ;`FL3k(rf=yZ(!p)WR~1@jchmR$=Gii>+2CXdb|>$4F6yVRVx z2Ax0lqvKv5l!?Up6g;KR5u6Ssty)xV94P%wdk z6YdQR^==cD6n8vJRXUQkN51Y6zQP=ZYDF1{#L1Ns>c9C+>b*E?{{GjxU$OG}$}k6|0L4{uO$>R>p$Zm!j}S zSA#);x%mJLP%4SimP|R+cf95x87vB2p?`-C6VYV#Pva-jG^xx6gn%I|5M|gZAH+3z z!@6p`!LcTNKi*Taa>3DuEyq+6B!$ZQmIxFt^F zH{wcAH2{4~)Q zpPNI)D>0-LWQseAm!c=&sb&r|4pmC>Cb!+V#q*Voz}H^Swz;jg)v0JPgk*-OD8*^qZpI}$b~EiHZhOJDjWA91^@o}%NpnFzP6Yvr8 z$(or#l|{OKFYEOoWq@53wnaWuHf_BotaMuFSQ%S*y?Mv08})p@1|*iEOMGiJ!;iVg?TuCWJAs^wiXQ7=(VuG3|g*%X!pe=P-F!xB%}wW&=FF z|9kRyc4=kYFDw6djt~V_U;J_-P5CoV2KTHp0w6!5u5%XF9F*?F(--cGi{ga`IGINl>>|c!Z{S<-|oJ>Ax zZ0O9gb*OpVWg0@2TG5f(qid-=g5cMwa2RI3K*zQj)G2W!o%SN)uVr@ zfnduOGeLg1hBlcoBujfx&HkyZo9!R?OdJkV`~%q+h)#c74}D&RLv$+GaX71e?G-$i zFmIGY)AdFyrT19aDP&DNNE!EF%b+w|{#aSgCP3^n54{oS|36m*hoy1~XY4-IO5r2Mbw zBbCq?eEgEe``Jkr8tMxGcHbqS8nuy6v60ECX9BRrytkA&FG!`@#z#pp*&a3cjkT0C zE`p~t69I1%R|rN3m|JVU=)vg8eVNev<$)M6pUw*>X%{(d%s#Gn=(z9OHm;&5i&veB zqdVq<4lvssXXDmKb@wp2hp?Ax0))M@**z0VXum?-8BQ1}MxXEdRS{M46 z8YkrTsI{l=!*?B&k|K4CcBBrDlK?y7W|UE)W=s}g7HZxfTnxf zXnM{s9W?z2Ku4ol=#jA&W!dUfxb2$-IogJA3no^Sx|pD{3etf#iS!|vY>fU4UtI0Y zr|m>;C@Iu$=u7*H|JfVjW`fkj$gjRNjVhZPA&(tu!=cVr+NtxPwDUgDgX*!Z>gmEJ zNkWx@pCzi|Gj2VMT&m>l8tTFBliQ&m)stg8uAXQ90KJa3d#ysN5_N98SC{Vf9Q*bo zl4 ziWGC8hMQs+P$>%AEbI8xGbq$7KVZu{Z3@SbdBDqiRV{MPQrW6-cpy!1hxfmU0V6FL zGm75E`Dx$xdBexf4aCAff@K$;Oo$j--0=(UAu!}6^82XU{vEn_y!t3#2lH=*ZhCi6 zP1%Q0HF;MCV!!f_chBrG-R;ku={4t&mG`d9zuv#wJ7PBzVLwm|r%DXsVYs>YapeH7 zBXKh9OKW4s!~>=anrbMpJQ^f%p&afzXWlCALD-vfurKSgB&+D@Ly)89ROcNNZWuc8 zfVW`c0aT8`G~t3*s7o>Lq-uFO#I-GN0TM_1YU(p73r*oD_N?gw#XOSQzy}odOVtlY z!C?}~&3)?p2O-3TVyMMC&S!oFR}d&Y-B`Ci=C;Gz5AQI)iqxbl?_L z>A|euy0e4%B{H9l_;50^<-iUXtD+M-!Ra=vk(5b-#YlNyzd1#MInkd59L#tcRNzx+z2+oyvMi_(S-{>l2cU@kBq?HFz#{hLN879xH^%2wi#zQ) z%Wy+*pL(BV%=@KS>Hy%fsK{lpnt@mGEv|KJL8xG;P=Si;eJdQX(REP5RKK= z@GK(@yl*?W7}wL;MqJl-H25 zT+FP-)ZMN6Y>n00I4z;!=)MKBA5Le2I64uW7Ij#~)HuK$rh2 z^I5vGL9W_=r&!}o!cNtx&u)jCiX?~8SpdwPRzc3;_jFg9pWiU$6NLEM&2!WXXl{t) zi$xrB0vx=k1;DkBWri9dcxvCzolzun_E4r4CCtGM!$kupvrxIogZLhE32R9Zh-ci- zAPLGlV&Fi0V^w9M^H%(DPO19uAgWt0 z$e?b=qobu8y6Go3%Br(u%_;VC&*WvGS|_;_JkDyJ{F-LpoPJ)0?NXzYBWX|vaFm^; zR=!Q~m&ykx^F@Kqe9;Q5eEz#6Ska;}&H!SQsUS#=O@0`MP%A@QJt6HYF_Rn(E-)oYAN4M&r0M%tXP1*vF%vfbEW2tJYP}nafMIQ zO!F5xGc zlZ&MGP>hgqE9g?EX8!x9U zZY>cr#tFcObgKui;RE)ho^r}O_}7%&X-Oi>+Zo0v(P=6(2^i>q|G<3ygg!9T`-psBodR!6-XW+3TJ3CIhLBNOMLAk=X9x-v z09;Gs1?}d4hWv2Y<(h(ZcM_gl-^Eb{EqcY#D<4B$*G8y}U@=Ih&lZEG2^NQJXnqL& zCiWeg%}*M2BEw9xAgc?iCTN(bmA%8nKp)5$H1h$cM$~JFTC#PuCm+bvO5WBVuv5&f zkBKM=?>M{IqprMY9~axMcJTus?E*NKMfGE3Lr$Cq&E0@8s?havD!fS5r1=VObUChT zSOpmOw~R$_Qc(kcM#h799Z2_bFr}82k00v!uThdFoU8d9ZObv4+x3gV=vgMmVJCF^i#@jY*KoN1@B1}CTCUq?phIN1 z+YL@$^K@SLx-UgH$%=0MAhVUG=oxr0^*Kn% zh?J7MH8Gz(kEP5H%Wj?v7^BGIuI?SU)U3YVQ9<6W*8(v77!3m=@q)aC1cPRY@ z@o_rjQsb{wev;yiM(UuL`m8`2)8QZjnqV^_jkJOkj!)~*YCNAXPe4*fuc0$AH(LuV zn(!jLjN+!YE6vhsF#udYErme7PRJnM z%DEtV-yKpA)NW^Dqh*J~hCqVNU3e2WxBeobq$K>uGPSgYyU8P9S^j=CaJQ_H7A}Fo zaTawJ7fwlCKUJXZG!Cdvk3`^Xtm-U7Nhs}7GTl+hGW1$Oown0LSL9{UCW!e}Hr=r? zHH13f;rGm~n$-U5I$$+9fDPB#WP3B5J%Mycp@Zsw;7BHmt+V_rzeUD(hKvu#nGeZv z{@G8kQu-h><-2?XBhbo`c=frYBk|q0%2pl<9JhU_6V@H~{3NzG^}IX}s7mmcWGqEK z=RS+^T4u)x<@Zs3d$U^AQ^b#)(z19Sg{nHNt>e>SpDj624!37>khbuy7M}G6e7J4y zaV~zOu#+=!p{2_EfoTxVoc;($JQ&v$$!4ELHP4hjh+j%#1L;w8y>Ng5{5uxfqlc)= zuk&vX|5QTg9~Kf?e-k)CEgo}2o8l~ zt=6Pc;~biT`&}dJlv7#}-?P!1lJ-m=F&3r!9LHxoRlrn-^YdHgr}odCE&>iaiD#8y1cp- zc>2|kPYj+mcW~h8iPKITo_aZN|L*W412|52+I6K3PcOvxth#l0dJ-p;@U-sK>;5}S#teA!?HD4nhUx(2}Z^mz3p#xdy@ExL#Zg2&v-3-{qm^d_xTh5Dw&R}^@C?xEgpWH#{&A%Y`^qUcS3%mXq! zu1LI~Zh$~SJ!Jn98EAAOU>;ZrPc>xNvtGjGp~~VQXdS*f!Fd*YA0R^j$-?);^&ncN zEKVX`Z!97S6*MK3Ht>w@vst2l&=u5zqGIo5LvNS%8j$l(M4i|#5)+aU>2+bKFG}m?$#E@NjC?4F`f3-uz!@V_~fpei|-eN1* zWn8Ws8(YD5C2NagEBGSl|9%M?9p!h++JJu}8+zA9`GwHak<~7Z=yLpYWHQj1{i6il z@6^oK)Ds}rNrZ_^EOKtO!F}H_S1)J|XbKm@l;s(#b^xoH7U#4Yk{_I1dPk0A7|}Jj zU_~48uMypgf4w8$(rDkXR^jJ`?;wztHy3WlzxIPGs_?xwIv@XX%C*r2_BSKCAKxP1 z`et-To0vH9v$mi zor4-kUk-Yo8M3MN9CXN7v71dN_HJ3(M9ggg=n&a?`o;k=5+hoTUlRP99QKMMnBCl2 zneAgM__$s?OQxE>f)fg=oHsd27mk|~)IZAC-Z0Xm9H<_QDSZss+V)^hYcUwzhUmaz zM|xmZ)&=TMD;RFXeW|QAWi>=?=w11acjWd09(1{BFVqrlnl~yD6apB74pqJrK4s_< zLI9kwqug$PlmHUC&6Fh*6d)^RAC9hi7J5NrE7%e!UuTiA?j8RoMJ2OJYeS-#=?ij{>qo+lx*pEt_6;O0cy3?unt?j@3%271CoAK>{ayTqWfoEwu5*8d+9`rAYSS2`3$l}Ur6#w>j$!-^7d25ecO$B{!Q;7C>5C^hkXiMVlj#l*@btm| z|I-)1;3E+;Di66PizCM!ZrJ4PfKv1$)3s`5#(Z<+W+Yz$CTi>(h`0mzlL zaH)N3%`Ea)-JP(Lgd!S81lWv|jRLnF2Vq=|_;{Stjcy0@_f`TX{%T%L2iik5Oe0?x zzc(w&d$>V_lhBTO;PP^9jz+_~F8c(kEFrhrI<$4Hs{TE_1c+QUqHR+{WZdn*Q)~Kp zyCAZ*XA7zkMo6|ttLt0(*2y}-8CbmeC$yPY(1rlBSF1VNkWA(CA6CnngeaMFpbPJ2`!LPN=Yvi`-YE-ltmXi39xS> z84 zuMu?*i-|FZH=N9@p zIgt=`h=g#@48rlIawZ}n#N%|5nLkZRSUA5zDZgf={JJOkS49Qp%?qW><6tNDT#Bq@ z+p<1#A;(`oyyHTA^6?pi&yDyvGsb)m2R!6*oRF8ckdKGRX9!#@Q`4x(X^KZAriIRe zVU&IZrX^ZgEpIsEZ`a!pJRUepUy6?iLrb+Hd95-($D_ubkJ*}w61HUfBL zm%eebv(Q7{v=0t|LGN6P6!zf0Sgb=(sDxmA`Df`#f}?bRN*#CQ0_;lDtST2%(@tDJ z*>-Hg7byAQyo4`s_RwEIQ23>EEyp2oB|eNpP3ZEGYc+bP#%B{g@8I)3J~n(oL*S8m z9#lm(s$UXWFl{$VUw;|u?0p8I{Q;~@OdO>I91TfGPlnhe-5r_wlhHOwcO^%4qGtx)B;CCx^(SL+^xe`=sVJ94 z$$txrQqWmovE;5Q*G>3L$7eP^^YM8GpI7i%i_aE(-pA*2e%I%5_JL;nDD8Dfmq*N~ z39(ibcweWpxTj?mCpZ+&l4nV#f`(9am7bZX*>pIA94K*m0^ft=9K?b zU^Al=4nRv|8_Zk9kL`OXG^0OKkst#QR$PCWGPvjn03U-6so(5FLIv??zez|BMMaXH zk6*wSZFrS%cQWPBPf>wwa^zH9aY}L3RX08KK9TAJ;D-EhJF&zYI!H=LjW+q#6go`Z zTkKBO8+GcZ8d5^;SibyHWXcXb?5sD-j%Fx0VfI>vVEzk2hYn9cIwV*y8C$kDt!AI6 zOWno-kC$k6UuWiF-is<3y^K5E#@#;SYENxJHl`smX4`IRCso=qx`+W1{gNHA-PE|4 znmK%Z5NN1yZmsTo`<#b>-|R7^ME64I+DovITxozI!(#3)L$V86MU}|9cYwdw?v|@Av{Qe9RUcM@jnPB6hC{Fm ze+C`0B5u6dSn&ZLT)}JL)TA#-3d!^F@(-{yyTzK!)Cjw<;*s?Syp@~rg^P7+3mdaM z3&h+iFCi9ac%n5`l=pUpuZ!I0=?Dj=u{q{jvvDk3-q}a+Z^w{((58mYvp=RtYhLqM z@1fUbhrVaZtZ-7S=zfeesD@wmY)nrm4Z$!niH6Hya==Yf&m!HDgl%ogiLd@b?*%Ot zTrxBAAP6qS{X;?ZK2yh4FDf88|`f7}>a+9}mCH{i8$TcD}#vn!K;)^*s z>%vV4`Y?2+N_RwO0Y&6VSA&`*zb`j|byt0wKb|@&?|Dtat18`Ij*LWB93tGm#?~jwglLP~V)yXqK)JPTjAjHFUUelYX>f ztw2J!FLITg0T@yzqh67qB@`xz5^@gZcjypySFufXWGw*>zNLrp$6J|+7Y{ll_39D% zQTY`o-iIk*{Ne1D#t_MI5b#;Us=zu7%;$u?m9#mUJrAwR^hO`zSL70JGV63mxHoz? zE@`sgB9dvR*^^WsC894iB-Kf{4NsdwtKaKi7PuokB}Xw#_5cf5hRc{O_K{uNvYZ#08vQ6SE|jL9__|MCUc2tu`9 z2{`t>7{|ytuY#MA5kTM4Bop&S-^BB(wbJ=ipv}RX{j= zU_LU_RjLv9edrp56p*2b{_?h0*|Z4AvB9gHsr7;%CBr}G`U4L-sqS=#U)~Gc7?^A1 z6-EMc-G15P@c+QZBST6_^5gZPs$Z_xHyo(vW!#?Xy|>QW&3X`DYm~3we=61zC}EL` zF2>)v(TDJ_H_B>-6>E8XT;56{gA7DRGV)V#1Dwy4IaM^>@jm{mPsdgBuB;2I%`1I_ z-l^Hw!H~qSwUX12Pgw4uHT50*P2R${>{GcZ^e6L@wu0(p!R?^Bv)@TMIoeDWsMCv7 zqK|}Lx}d5b0?j;DY?nW<+gY&>um#)IpUSynyUc||n2}nfZX972?Sf=w$Q9J}@GszRsW7%Ur>R=Eg43Rrnhw zhCTa_L?8{PTNZDrZs#Jeg)~5Za(UXn&bzS2a$9%`!{tVys~M9@)Sqsb*!zaDri?7H ziO4fB+wl}Rr(JBUDJJs2eP5V9c-S4l zIsGbrPK9&Q=xV!#)K7A@p%sGZ4BQ_QqE}i)^OJrr4S@cPa5~^6^2=O6bC)uocVvw{URxi~`*JdA8Uw?|YmUw} zthwxeGnR{<6kcDx4~!tb1tEB3KKIt-AC5ZuAbJ%m;EzFS4(%=w)KH50R z@EABwbD8v_!9V@n|As5tf}SkRv>E((P+`cn!TYORH$)(<;ji<( z48Qr^`8cw!El)%aTu&2+&-~D4-=Q;YDR`27r->`0of;FU-rUU_C24}bt@U`=V>Jgn z@$e?qO5lsz?hXWcAbl{)SyK--i}9#mM|2T}Z0lq3k`ndDQYiNA@=5F4?y3EG_4Y>T zTXe$BzvH~RqV&%ggj>KoXx@=MHg-o2R3&6pb)`fV0Cdo=#%w~E??Jc|4<_Jo(z#H) zUBVzgWY6`^MFz$HcII8bU1z^R>J=`_xH}$ z@C=!lGKv;iZ3V3)O=}~jQ0(ZoLFVA$)p0wz!gp;Du$8s%;zCP*!U%`q$j4NC3jcqW zBOf=4e0-u(QZxBj^t1gz28-*-48(K6sjQ2SD^bvA7%I>?RR)xuFTMaI``C$s+AKZW zZe3cvbiiMZX@#;R@&!49`%r*xN~WMviH>=Ij9e0{=wz0KfzqyuOzTM!}23FYAOm6UnZt&e>xwR>$R zTJcIqQ8GW?52Rp)Ot=+C@MWPSx^lvD^l@vLzxlDI7d|SKaDE~O;Ew{63n`#cbP!SJ z>eFvv*%66EbM@J!*V2Y6nS83^%s3d0Q8aM(1>W!Lt=t1{sI)l#T$A%$Ju8g?A*8|5 zisGSYFxi}zgY*%nm5z-+J>d^z@e%Y7Y>$)=Fd7^3OsaB~yaf_@;AKDM%f`i3@bdnF7k$qtO`l_Zs!zzyi0(j?epDqS|2Qt#NLInAK zijtRL^sSC87s&D#aYqQxVwjsXKXepnyM{UfTKIe|oVC!&?$ouKsFTfiqeZ5UWXmp{ z7VqW&RyZvI{3vz)U$LcPG(XR*G^z%tP72bZQY})c^@<9>C8q+G2jA!dD=zvOI?A+2(#3@M?1pT z7LuVS-AyeTkW^$WUNiu)NMn&;fiWNf1*`sM^lc&f~UIzs9nd+4D6GVF`e?{R=UhZ2*|Cb6a1;P#5Q~u=f-Or!pqX2B&y*7gz5n<6i96t zBas=mDGvlyO1mP%Jcmik2hg8mBdP#d744o)Y#y*^eq z^mfYxixSui)}+vpeK3O=_I<+FuuZ;C+Aw0xuJ4r0 zecSlAHwG+TMkr#8%=Y52iPNUD+oMw4fKv{CE*I&Y`Cd)K8R_q(?=i=C26R1KKR)5H z>0f^*ECE~9sv`h?EWv1)P5HMd3(5d%7L)>m-cQy66v0Oz6o_4d*m*0kKd7c11vfCp z4dC{V@l5w3M18BejeU(_Eh|i^05ZF`TbeVi;l9WycaDEzR``wh?BqNHZag$eOgvgL zUTbSA|HRWJo_qjS$j8%Ae+VTP53Nf>bw!93W3qIuXK%EUPikoPh8?RJ{DC|uyGUN; zy-LXYSL2~JZDf=fFan;6ycURBZpIUQb_mUEr!1k!Jf9$h80aSz-SZCI2RelFu|}gY zIjLvW$}`M5)uQ|xTeC{k{Q#TxX912Li*xZYX5kJ^q@aAMl=WWyh4`OQNq80d$M}}L z+2;6w`t1sh?$D|1qph)4e#?U~3aY}BnVqE$zeIm&j>>L>mc5HxnCJ2Af;;qczWXW} z|JVPp#}5he!+5r?37uiHmc84mcCY;}=M$et^fGX8s0=~>GHoYC8o-H1>nG6Zr^ute zShP_p)1iW=8+rK#Rm&N6Y8AxgXOFpq9Mm6nfmWIK*Wq6zv!y(FDD1v)Q^Otb78?|c zeA9$d?B6uPRk9zTw=@q~wM$1|=cLvq%&xb_Kp)sq^wNXY8%0=cci$Qw&%rfjSO1>S zS@R=DnnKq^jx>flM&arIE$*eS>l^Tlu%8Hj^lBP%)SCCpP*!s&HG9)5H-$5;!I@H@ zp%(QSvXiEQZUTof$W5p$YMh=1~5BoZlLmUsdY-s{haKUzP0N zJPt+I*|?wM;r^w?>ua>!zv{O3Py9!gLRAh6OkW{bwXO7Thg%of~|KcztHeOO9&Xa?b4XtO|4<&Sle8%wqXRj@vu3 z4lgmYh8mv9%$Ny(#UfPMMKUh^OUpMT1qYCld5^8$Y7<{I^M@#&o}3zV(A;=x&{e~A zYETbL%C+TQf&7xG?iG(dZ#!y)dV@Vbo9RO?bGa6{!Y65;3LCZ1WZ#xXUg*)MjmTjK zCC|k{_4~(wZvqDDZ) zj!fL5!v=2sK;HtKCT`JN1Gi4rw{TVxx9F;YTTR5~?mv^Yi@%G08o2d0eTzI`{1zb# zx7OhnuAw3MN^vJ@iu<(;`4e0?D%6Lr*ptYYiiur>PY|D<;WG!HXYpBsk1H)LGc&V8 zy1QcrzRBMd29W26TaFj*h<0!t&L0LQxdL%pX>xdcyB;I4)G-f}NfAqALJ` zP{wLlZX>=RLzCZ0@H+VW#Pzzebn|-K!moi_LX{ni0vX*=0mp`%_MlKAB3i4gos|Vm zl2q1iuQ{2T)4?9L%2z=mZLe+XuSU7rN4oIU2jMx?Uh}s3sn!RBOh2@{M4C~+JTNRS= zh619gL=D5&OTP*C@Hd4n@z+j<47az#q|vtMP#Ft#_cu-NK6#Ruwd||@+UZ|Ro)oEz z*}vn&ozC&t-`NKke>7I>bExPaZ;r`6TtgqXmY)1OagSglsWiQ}t-^}3CT983<8AZ) z&(Nk3`4_`JHTk!zY5C7Cy`~Qs9?>3c-{P2Zx2k;Sc2WHH=(p|LR^a*Cz#e{$>|*uY)8EDltr>3rH{s9qT8UgVKd2V{ zW;KQ3pt=u_z>OQpGEw%2gQ}|yY~dKK;XX)`91@4Pi(kBf9Wpj+dT*4JU)NiYO^=gf zo748#PG@8ohP8pi>e9-vFalIzN^^##mV6tlxNO+B_jhoGPBDv6#&og2XnqL9X%R{W zMXHaIPAvdsZGshczS`3f0iDgC!ri%Y_YK}zTiw`o^Nz1^ zI{w0qjwPv+U)~nVMOsULp=Ww`@$fB_n%Cz{hN`R3%}^S*+ny`*B%zZcU!X=|liKw9 z^Rb35Qn0W|z04pfERXH3G1nXY5J#NbrK1ZZK267h=vX!KH##>V0VUzWoyb?I`on~+ zlg$qhZMU~_4jwfpyUk0Ci9Y|oLU&A^>OG^9P=ylQI%AZ&=?3jpgK_!)6;^l(Y7d_^ z$vt5Gpm!qG={2f@f1=M@xXuXBi)FwdMC6V{`$2a5zIJ=WMP#6lLO8*|FCzRAHXh;G zpa$F2_H>lpDRi4&DGC&6O1rmvY2(q~yUN_K$MhJ|5haUYW7Da1Bzn>>vyWFv4b=Gq z8xp@3_yhBuUm&ccNj82WXW7huiz>%G^AIv2W`emEQ#@*C_qn28KOP!&j2tvS?g)Az zyTP|gB?7!d;j{st%l}JQZ{NE5bCGnQcE*YL8)USqK6`N zeRDl2HlkL2=*W7t>JcV9nOLs$7*kTgcq>1`aV)N+$Dg5Iw1@UTgb6J`; z9t9Pnnysr#n;C?H>Y7YhJ3HCW58|5_FB*|#{&Agdn}71+F;UpsGPjyp4*N|XYIM)X zYqjSqH|E-9t7G*8aEY1x+Opn!{v*+pBZ&fs+*X3{1)WbUjFGmo<9CkC9i8GFspX#p zTFl=nU2OV;v&MP>sydC2m(fGgJo-qW&}URA*i1ubG}jsSR z4JbMoFIc%%_5GbF2Vk7x{MAU^?J+Y{A5CPawoO5i`(VMD>7E?E+$?Ie#x-4M8cgeo zbgDrgSR52)&p{k^ps6-MM-rEj0dB8{2~$H1WfYt6Bg6iYF{zaWqdZ0d8k%@$^h9Az zzui{}0(W}MjSTnoRzAm-`1Ghb!_9OS3wRR+`1ajr4QHZq?;KgFBLl-DprkizcA!x5 zQ8-w3KpCerktSwz!(%f#Mw)trGiB=<#zdO(rX#N5qM7!E%OtF#;bLnzqA)U0PK#1V zGq)H3;61-z4S!JZ=%WVr%YiyYn|;!e#}?vyIKIjA_t~@zvf1p7vjFDIifeB5R=$gF zX%LfLxqR(!vDsO4$82r0vsmoA)t!dmpYE@lDY?jhco)p~FkRU@{rMW{^Eh`J(K5yv zIJQnAa>+u@uv8=>A7cA>4at$*Yu#%xbZl^;qqp?nWGDZ^l#Gd-83MU(#weh-@B)jG z_t58t4Kyc$XzV!tXpxT^{E()tCAQ-TPLpkI7q5h9h)5byz2a}6lM2{wB)|L1>KIaT z@-g)+zPDrt=FH^=$P+rtDhbaFmr%9;mCVzX!V!e=ucqbioeVZe*jcR4$vXR=dg0%i zz(0t=X&wm{o3;o$ZO+ukc17QE8KruhT1mem!z?iqEvWguv5$$f zZEAjJDm53=wsZ!X-rI@)J4Ilj2U76SGlQ8%vedhGf}xiD?RF-bmWV!&@=W(LG?77a!9-oOXYHK2w% zEtH@NMqn>0UKoM>G(*zYO8t1+uL<(-r2xq5vjSqqBSXB0f~Q5wO!LFd0cDll{=h*5 z!L(JSInXqo7Q3zLyuYCJDcT@7;4S#$B6)z%7%fytju7!Ds0~0%y}Gj_)FvIh4;;cP zq5pG3gUsva;JP_Fn@X>7zG9=RHO6C5KD51TUVDtJ?oFKCQ$^HmvY zNb;N1=NJ73QYh*2Lkmda=OJFLzDv%8Bs>!hw;U$^ewle4q4Q#weZKV&G9nK5O*ImDzckQAq`^dz=i>NHuDBn;Uc$w2tll{7^+*SjSIM>K` z8~L88I67%*MqrsbZ+sUh^y*-Ato$JNcSf7=^7d#FRlQx+>RV_nW@-2;_3cM!G-?9+z|rd2 zymmH3oHaxji1+El8uKq;K2R@dx5bj6%Do8$ru=!}hS&SyOoE9pidLboV~m03nr$@K zxPHmg*%%8Sh=te0!mE^b1n_>NRkX~K6amHxhGha5Eik_h8f)*t54CtN$53SyeP9*s zDh3fnpi6icv}VhU^4;o{5)iub>PRhW#Z+5`jsCz=lsX4}MfvX9KsCniQdc1)-z-9G z%mVoPpx7y%H}m|5y_FeQ)Y<@zcC6);s>&8xt7|byg{YSNr#wNO-752{-1Hj%hF~qYqT#&@FFZND2|1f8{N!t)u_b- zHz6z%@^?UG4{~W0Esq3N!6yU;j^*m&fB+9xA<7svGrWO(e1ovX+0c0W4&Q(zxBU%| z&6t4I$!-BFnA)LHQbYV+))3#SE^L4wR1>~+!yYio7pPm>Z(zS^ z6lYrU1R4unIWRaC{3QDq4$8dNW4V&E&tmL3B(aXy}8!r~?_|v`z9XvH-AkVcGSQXhgn*QS>@UU6FoU+Jo@pyB=vnno&oDHdy zX&r>dgD#CRk;zB&s;ZE&xM7wSiWc#rt6g zNkG`BQU@*r=rw}g*5SU3`Czz=cZ*T9tX3_IjU>9&C zQPVB**4?r2F1$1ru2dnuH@wRKmG^!sduDnNHg-Rp^LY-PlY2hs>dERzEUg1w#q*1nK7vtgpif<-CR=p^w8JAA$E151l5fm>Jk3H)`<>77p@Wg~ zCLbOw_7(*8bNg>Z+p@FJ$)Nd<0*migcRzs(>80Cs*O#$t0!nPJH@xLBsCB5aX8h$#_~w&vK+-e-wn;+-;0o!0^e52x$x~C0SAD zqRaup#jwqJ>UQ_j800c@+=5_>ol0Qc65~|tRqb#&2ZD6x@Dyni30AoB0*x-{zhaKh zHm~*hznb26W+v@DH8c8@ULR*nb_rvG2S_;ZBp&z*;05E)of()IW`(?6+!?C1O`%WL z=zWnRs9;F;KNhYaecr}Q@ejtri%Qh*4)JKKjNQO%r27lnp!*B>LQVIfH~D#dKv{pb z(G%?<)5f6C+_Zt#tbw2ir?fnVm#~w-^Ed&QLo=jn#;JxLt70YNvEFB0y5E%+*Z@d9 z`Kx-Cq={5hS=2gZ6{sp-6dDFt*rvY!5MUv&C1{PwR&RVvnA;1W*%AwX0I=CY4(jZu z9|5#%QAG;{e732B)}xs5z-8&-0WTc|HVgGDiOt9X-}wA^HS0A->-x;C9J9I=KN6Ac$!0Dy(?m0X^f@)8(d zdw3jV8bbN#SPVS?ot21`C$5uF2Vt=B{Okj?)F$)SISzkK7YJP*Brw>J)SE^$4@-b` zYqPSnFhYOD93vlRg3(|N$xN^rUEb}--W7l0HtD;g=i zZG_XL5zWT~pz2}@A=oxk$IEp>9Gr=?hr&Sb0~f(V1u|RH4w2ca@kiH&M%Xh7P^xc{ zBm*je?@>iQKDJ^s-k{1}6=MzqCZ4T@QE^l-xHlY39Po!U*T&jGNl%!nEW4wokt+&xCb-c%J_uc1x+KG&>rRy)} z1Z|h>-RV2Icc=qL(25Cw)%%g@6fmJZv4Zx4XEzGyr99Xj57No?kK{cY+YkX9*h&lC zDBihiMmvceTX^RR=x$Y)K1zA3)$S0wlZHiTrpaczvNE8#eB)8%Kx_H`cog>3CDqks zz-4hrz3@B-QaO#U$h)@w-h@-mKzkZzFW7>GV_DR;rg10A(YDbYrZKRMX$-F)jE!g? z(=g*7gMXVEE(`)pfMEENa|=GpRkoJ=e?Cb|yP# zJ`+-HFHC9;Ep#4yZGbH@%Py_|vx1I7_yC*%7M_V7yp>;LT6jT6G-#Np{SpkxE~w7d9lvs|#K`y){tveI zLPvf7A>7wj%=~Oaybsjp@5x~9l&0Zrc7x~3G!I9Xt&D|acg}e<7P&7QF~ZY3m|m(h znmSCsExpdWa`?ByZVzYSZ*16f#Q9e@bc7dHT^g3N$kIp|1b6x6K+fA7^z7jIr+IZD z*M|2Zs>6Wod{yybt44e)y>QX)4|9O^~H@uZ(U-fGYS#RW1 z*mhXMs<-mV_)XN`b}j>iTS0rrAjoD0^z36GI-0@kL+jE-3*ZfGN081?b2@?(LThEBGIGQn1_K61_Koy@o$i}``G{+;y~bPlEZ6ni`ZrMq+@9A@ z_Q*b%W5A)>G$M2_faP;!>6YsG%`ZreGz5sL&hHPlRw&GpLLm&BL=W*}&} zX>oDYi|nJd)<<<~K&#Wbi`|-DoMn@+@$XfFGZNZvdmyRZd(r2LJp7Z2d&o(+Kqk3O z^>=>*mc%CKujl=%8CXXVkPSpEN3502C{Z_Gg%LH{E?%jk8?Bux!vmTwJF7Lk<)s-Ze=YO_>#4-dvsD{iZ zbGTpSnUBO83hXhc`^|r7unK?Qx#X1rX{?x;6IUg!w|U^QJiPg-$fNdR=|xN)s$MGL z$B47l!{ENlCf2{irN5&7Is9=}Fns>M_;Lp@+GK9PE}Ysr*(_1ruH+2CaH%JLL|nc4 zZtVIh=)94UiHwUmW?03(%nAqxBe#23zEzCDe|SIkeoVH2+@YFuWTt^V_$QWlhy_*N zA#iEiq`I@(^(eSetpKau3)iQa0dvM}Sj6$_tq$-2TSD@SHIK}K$sib;;l`R%j(+>z zG>j>mt9?IHN6J7Nyk%G5H%9ZuC{fdfP$rIms9j$Oc;icy z0vBF?6!X#prISR0K?LKlcQv3oYf ziTxr@+=dqTPB7{AkOq@ZhAl%>;W<;v34*~_>vl7w66hKs{mK8w1Wi#Q7+=zGNh<2P z_iuQ;Ga=ndix2|Q(ndE|Hy_0D(gWXfJD7f%&rq40H+n95(X}`KSdIy(laXPSv&*O|$l=sKB!odWhDYDtKdkx^KL`GGjo<4oO27B&MoIa~t?6lWy zG9#ZN_yF)ZL7vk)UN#JG?OG8(jIyGpEEr|8ff~{fClKz>-?{LB!NCMd8y}nIQ~!n& zO=9q$J^YBxJ*qW*WQ16jpI8>*i{|L@>o>-sjaSlkZMWIgp;0bB={j!rv>vXfD0P=XVFVAwC*&_e|{Z_Zkz5;H{b!y4It7Bz% zLpdrFP*30MoCpVJEG~l~)y5f1(YHR@=Q~IH=V)MwQzr}%;wfntds5jAT!JTjo0N4i@o2)bwmft|U_9G+A8PN-Y*2`_UMH=L?BIu_1L+|lS>PBC}w z*+vXnUZUSQLJ!t2gGF{RnN|ID7{6YT)U5G8jA12qjD{DNA%h3_Gw$QbhiXlI5g zH~LGEhm6t$RCaz4==^dZi+y+FmC~U`>iJB(CBJpg{`KKM$kN!-FL4VuRD0VyN&N;K%Cda)_Q_p%sZ=UJ7|M&C^+KNlQ=z>Psc`xqDBuJZUPdz; zt`K{DJKEu_{Q8!}aDNMKA@RUvz|(qa1Y**U0hBGzt#=z{1n2nx_&Un-?#pJ{4uRO`z`(X z3qE0Kag}0YZ)Yh>kCNXN_kx3<6zcguz?Iw+UdhYs$J9Xn=ZxZRnV8P0zm zm;TnNll<-6B`f13?F!)ND@U)1ZTqI^DKWKgcaNc{E4!U zF%1bp>OE&8v3`HJZdxpOA5@HX;pRB~dESJ` zlJ0C>Rg~xr27!CHLM#JznMBv?jl`=cFxsNi{Pp4 zHHH4ZwfUU=UFWm^ssEMvbU%UlX!vN-@NurK23hmoVyZ!CzMyZKS{?>s-5SeNSD(s_ z=F_s#vK|^gjA!$3t~}u+Qt}@&csl#QV%y+o;%s`6^#&W!>}8^#u4Tan#|M-ufMQpc{q0+QMwi*u^em=`Letj&W~35HJ+d{!v+Wa@0{i zNaFB+>@NHbVi1EMj*fJ|kF0!=2O0*; zqp*HEhfV)Y#b2`zP|ir$%f^=2kw$xLcWB3Zc^VLNqUwoM4zk^#Uqm2{X8IFhZ$ay| zMxa+Gvzx^10g>IkQ(S;=)|KeSpD-kgN3|X(L0S^#F;!l1eP>#uWpr@jOa$bq9iJ}6 zii9tR7`+5ol{929(^C~85bPi@tz9Su;)|9j4JZ<3}h@^k;6eoB&ipZnbB^*rb0 zd(M#oH^ zWOWNz8gkKjxeZ^6K>RMxb7clDL3YoJ*myZ`!at?!?oDt;wS~&*s>)n3T8?oVpm&kcpFdP@uLf>zi;(4K@^5fO`P2YO69i5#>X;69XzByKi5<~->? z4>;3M7Po@_1>SL%r1_t4;;2r*PRrwIyNzrB@ZWnS7JMe>igr;J+Zo zZ}5Px#sxfj&bg1!Dai$Ciy|clRSgcalTv((O2MBAq9#@DO!3=BRyI(D^3|rs;2U_E z$@vMQF5*+x=R7&jk^EM}uPZb$>fF)wZP_-B->sRqYTXe`H+rXC4E`sn*eTYXdJi?^ zG;h$Wux^#Xz)^H?r;U;E_metkenlxi2QLVg)4-S~I!`L)1gYPUvUK$jd{&fSfPc$A z^xLrqfOfQsVTXBI%1?oqhYFk2l{8S=3AL~uC!AVxRCS5650&y3j85=1T2AKqLyFDO zm(5gcd&phy5tp0`N>f;`p|E`VWm*Do^(?1FsO`zF(W3@bDHC_A9EzD_RkFdwoLsw( z9@-@$gkItiM{97dxQ}9Roo-=7NpAuGt6n^sg?71*YUNaN9Hi9}e5WR1`H>10?d6}& z)zleOXzD7d`X0j3hSk<*PO+<8|)Zrj$2Rr`&KA z$t2hOX&@Ei+bdz`0Pb)*P}bQLgqIw^9lorq*a6%t9l%k5j7)(|+6TFn*&jnoMf$04 zm5FsA4q3U;<#5HLg*;JBm!TEDrYcdKU+w(Xe<4^O=Pra}0N{gKqYVfZnDbWCSN{bd ziTq8gaqbHITl;ppml~G$CY&Z`0T8(nVL+;a*^2luOpPrMCzhD=UX)%&?2R(+YGQq$t)vC9&R|%gKcoPHVWF7CSes)#Yf$ z+XHj8$s^((vJ~4NNZq~I2-JR$SWOBmH^=95z*Or3Fm>hcaA!K8{$$%W%Do3}LXTGf z-rVJYFWc2IDRud)(CHW_A!Oa%YURrF8@S8 zB(G0$`9nZLY;M)v)Q(jZ>xTlv$}Iy@N5}4yAvyuOe?VgQ5rpRY5yaP|;5O7o(v>!% z&WZrloFg83<8zXh?7ojMl=A61LjLm#AS^!|>flILl|!bXn^9PIB435#$yokK49h=6 z$MQdYxridLJycc90H4p#w=`zQQ2dbuhvS7@xY;Ot{B?R+^A9>4N7%Jo9nv1auN6}I zB5kU5MoMZQc-_038mftGOTS@uoJ2XQiKsm_!@&){}5);=Q6-1YU+)X^z{bAzY8 z_dAx3O&MK~60k2Fn>xB6HDFyjHf?l4T6<6uiTBU(Uh0ZTrnn6hh7*Wmh)_MeMjX2S z+9bK> z!N`S_bSOJ;HGS*rtn~K|Mid(6-mu_*0vDXU;yx%j5SQ!2z}fAfbg`{J&L&SN(mWEZ z#1(7&q-wqK6onYf!YE?2T-?C&Ikd46dzKh#i2motKfK zo^Zox&UwB$m}xmo(w^Y)G-b&{G$w(!H6+=6;bDs11y%Oj zqIM;&&Uzagcd8}(W39-n?SKz%Bo%JB@TmioeqeTgZ7;0FX|vO@u_^ZmLTJp+Pwry0^P;uR?6 ztI@U)oR4>_lx^uSfCHA$bfbe27SzLtH+bW?_Vd5um;#Z`i1 zmQLLGVJltTb+7$}xFvS1{AV<`QmVord918N{2yF`%wjFl0|2bSZ%DL~{K_rcAp$%! zqDF{tiQ?_aNrz`B#`>xJr*5Dy5(LvhsUPC)vNdwdA0!CAj#@Xol8^S&CI}|V-F1ke z&JOjnS)WE}8ui9-a3J*^)}t-N@uNc@phtUm4-WFvhXx|O7eW;hbQzuYj{@C+$wzzJ zBl=(a6q0dB7zOGY1$rFPxPM@rnNct_a96&;8n{ed1K0a~Xy8B)lrn;Nqc)EOwTL$- zL%1oi%3%KtOh8POB$RuMY(QrWIQ~qGBRqu)&^*?z5k>>rH9GdY)UMGp#MjbefOG*Z zL&c#YD^3}fq9FLGxA=TTzINAkW`p_d|pu4VYXk`RX`Fqawc}#sz*L zQFqs|4T}2eoI1^YQb-~iE}6A4WjizN9ohBMF9hBhXC9I$6h#CD9GkjQjLyqx#GlCQ zgx=7dnIZd1V#m~+?Dx|c>*6uTGZ8a=&0=Q85_)td$S4F?Qp~<{HiovO8A0vM+GM+S zmR3?PX)eXLA7@bu+c+qK#s3qStnw5J0nn5;)r@>0zrxuhefl;a1T%7?b6_Kc-ho*% zEAK3nbVX$N)0<)?9fPPOrV<(=_=3i+FE_4hvznc=EMSLjA7<=S6UAI%YnDsoWl*(E zd2B~Win72(#u-6OVwSE1c_4{i!RDw71mp)!sb7gW8CrNheRs8aWfEBRHP)lb6y!tx zND)Ygrp49X$m_a{7(AVp(W)j{pap(L7>~Q98veE)t>#N28&Jdhdrn_as6s@l&)Q=Iz2Q&hM=`Lad#Kbih=b z1rComS9WP2WsT|QdjsAN@H zk~B$1QYr2u>Tisz?C-J5VV8u5Wt~oJSReP&2@fr!B*H_>P7& z*Q5*qiT9eY;XI_Y)HmEDR6`psxb^=|_%7medJ>=0)a>?luYRme5A4LfA$!A zj1r-M!s&aA&({tfXe?zW7|P_i%=?TUz_y{q66jzkJ0Rm5(LO^)PU9%oAK|Up$s;i% znS2ZHHT@CZoTq&x`ZBeI&wsh`c(>7W#%|+*$QJWvJr!Nb3((*K?y^@HCq2ztXF9pt zd*~aEmQm7%qlu9luKz!O+=d&E8qR#f{k2tYxP&C9QAC1L%*m->T zj`n73&iF<&&O4nMmj?`l5DpZo@@VTDGG}RL0k_7DGPWK~0&P9Z%l~&%?6bsr)u+vziq%>Htb4vm=w;FN9o%S z`o~S&6Fq*`-(sjH-gv}kBv_}v-DPYzGEc@g95IMpA8H9FpUw>PrlW_j>39cqVKe5# zJZaX}ic`h0U&K#37^it=_@rY2urobi zOFA|l#9W4P8XIq-#oYRVj8;|CqQ(23dL0-gXzVR+>iJx@LFAtOFS-1%H zk|wAz_`ITr-)N#uC9~P{P&j{vOCQ48uvJN1&Hi^gEw(vcM!ej2$KB_c9Xm zTnX*oq?zQM@a=HD3^?x7WBZ6Py1XHPsrYYl?;y2Nn+!S?a78yVZE;(urw2<=@##fP zcN^M(;M#kzxpb_P8G1Ucl&Xo=lD!u(!U$KFnf4mN6^ETkmw0Ff+SrE#&mi5K_`mFJB<_K&! zV-#jVrG*%x@9GHD=bCBnUFIWrlRVphjf@B|at_NbmD$?$}j z4S%^9FLzhwx$EXlML;X9@X!J?JVVAIoNNv*2C`3IU9Hw#9KhU+a((JoCInBVE5Wa^ z6&miM?dp0P@G^%UDBz{94YG441HGt<#zC`)-}A&P<)yUMz~;H%6-9qR<(K0df*Oiz z@B=6pC>6WPQE&jaX{#_mxF=kru-1D3vFxhLa~(oFjo;dhMQN%ulw~D#xs`b(hXTDo z!@5IBxu}X}16JoWvM2743d6%+89nmdM0GG6{1B!3SXuV5v@x>&a2=W+-y$SGz(gm7 z2jEy_G;GH6(1}knI&{De-}IQac|;AGWvG`VXVa++KSO6^ZdsHpSx7G;F$Fgye=d0% zaV0Kv5@Ym6>;{ADp;ME{WZ(6$QIV(I?b2$6i1=1r-aW7#tO4m>uc`(##{|=E8VqV{ z@GSwmX|!KDI0QfaKCQCn4iy0~m|a#USa5(IOU#Js6%YRX2%Nq4iUogw7F}0b`~l7B zpuZ&x1cm(Yd?_a+j;P}CUyGK+$3KQg{D$N-jJDC!xu`m>vX#MEr6QzXDcrjB5fR<- zL&p40)SpgRXjDU!NCS5Gd1kKuPlB>O2s$#Yp_CXgD2NAMXISs)iV?JxIy@$DN3Kj(q2vG>X=`6+WSAU_GL>t`AxB(KEzoT^}+d zbmKOpvp_&AN}Da*w=*n#3c^Pb!2WH#g<`YTo+dUc4uAqPBA}k5agI%5lhssQnhl^d zqqr%`F(oT$QwtFQ{v>I`8?n%CW`7&_{;DM{IJ}zFk|r|M{+8VKr`R>GC1kxC_8HLD zZd&2d#`Ls(d>&1(AlP3ma#)SUOJxv2Z93xW!3sn#XkZkayS_*qp%b`HMW9N`^Wz_W zS|SqMoubZaq8y@4*xQg2r8Tz&@z5xA)2wE4&0B&y$)@8&Fdf4r-FZ~%LkULW8G|S) zb%c$?sJ4u&jWA(O3i4(UHVX8HG(2h1DK^y!{3mdqS?KvHioVLv`EMxFRng-87UE` zoskmj56?(=U_4GZX5`!Vsaoq9o9*R{Of>6Z;g3x;r-8Tt)rO2E&@4bUV?8lu7=h4Z z1J2XJ0#6#GY?=})rlf!Jl<16X?uSm-QN=|Tr1DldA3Ced!H%I=WO?ga$XiT=U=~+P zBBgIsf(DoZw`vcr!xs$t90I{j(w^8vv|-6s`gcnOY#G@*U>XgXgWw9Cb^f1*?lEJ* zou{Q~N;D@*0h`>)ITRJ7d<-@d!T%^piwJy-^v&{xRZHkqfT9wM(Wm%Yxdx<-nHcHG zNSLd~Z2Th@E<)4?!?nTV-4@v31=x(>UjX$fW%F^1i^4D-tfYAJ3vyAk^!ONmHWD_( z@i~ZKuWU{Uiou94&sBVBRFO+n$V|+Y6c?874q2HYUvPH9-Fk|q&|e$phbIQVJ%Y(0 zug_+D&JZU*-cIxsYaVI3#YIN_@9@pp&$GiNZaTC{W2kH0U@5eQ8^}#fDSHux^hQL+ zC}mIJXE1V}QuZ)^xk4!;Z}VUzQzk`KnGBRj0Rn<+gvE&E`^tlWPSN^ng43!e>B zgJ>2$pq(!}DG)EltSqj<6)tsYyws+IQVtB1viK>Z)ZkX`9M$yzmAVUB&afB)&L5Y` zDq;_g8ScMxhM4;t_ZEu-9liq)HLMs)WHF*2Eeg1nLYAQXaA_C=u=*{>YGEs$Aj@IP zLgMTF`2c8k1fpN^^2FM~DLg?g63+u56s&G2i8O2?*T^(D)J~&aVWzyfO4%Hu;M6{< zSSe$L?~-L`1W=fi)(_1ku$(u_YgrUHx;K-^qmN`Y4|62v1oa7*Ku zpsNK@H;SgWs!z-YN5#{Aq5`3n${9ws9~7P^4nU&Kn<Gm0J+cqH%1ILd9M-cl`DS#@B=)ba$KE3ba3TWw=?w*&-#(`<=xHo=pXW0=0pU<#5L-!anTh;Hdw@_^ z;?S0XrYp%Rci#=jiwmk$h)DBq_u7aP+M+#h8)Q8ALvgfw`aL)4w?FCk!gjy)p!xK) z@7!TnNGuPoN4^wMKL2CW@>}tmyYZ*u?@|1boeAw{XI+A!&UVnb@gN#^Y{I1}p(&Rl zzfB4y5D8?6cNaeyg@6Q<$TVDNd(;UI@$q=T6c}zqjezpjt|JyN zds%0ydt(C@4*)TL2}$ZnWvR|~bf&Ky|1H>Q1Go62Ic9bbWEFrhDSZA}WWIv1Oil^S zg?RHS?4lg0EC$re)pi<<@~PnG%^Fhn0h>1X_%=yv13AHxHq&VylI35_;;{oUq}(oK z_4bHgUV&8;Xj5SuhOZ2H=RWe{8uremy^*k#Xu4>=WcpgIbUh{tgo;kT>#>L&wvDE( zI0O*h2XQ3JZq?VK*|e3GGhh5&!bN!M%8S2DxCjNjyy%Kw^by_kmHrNnAsc|36Qli< z6W~Q7QTXlN+l4L+!;%R!3l^(!x%H3vhqV5D)0(?C4!U<*H`OqyVw; ziEg0rp`o}N;umjAdNxpV)*f_kseTuMVeUE?~CM8_6-fZPPccN=sakE1#rEWW9F0>%sV%*IIA z)CpFpy`dLKI0Tg2+WV~^NU^(WwN&IxDTX3PTHwlAk<%XC0nM7O$XW8Cl%U($2KD`y zjCY6nf>h2x@|W1OZ;AlfqN-&FRsChG+6gh#1&NwGdgh(bLKGBvx6wEO^v-4?9w+)1 zq9BL5-)6!%^?a1asSl5n!lA~cQX*ljs{gK!)twOJdXaL5j3b%8D@p2_dlEbOhVLQm z?E@9V8s!37kwsm}rYn>@$2Tpxq`ZgH6U~rdgEgt-@<93+V;+#(#j8&OwO;B$+D$^i zDw>4d;w|3~O@gl8O#PtaB=GvAogH7F*lHMmn^)E0H)Pb)dSX^o-KAG*HCeg}9=8BX zGroQA4ro1T93UUx1t@TS$X=yN_f!-flssq$P>4!%iR|~czVQ6>7q)%@(5SW@oM+m0 zs=!<&b*jkUTJ|d18oVmSf03^)hAW7?4Bn15D&4UANQEG$#ny&t;T=5Nd^)vv@Y7~( zV5b@+dbm?V9oHJqlzlMPn9|KgW2ziZ-gQd(WEw*0a?JZA2~Ijg=4O=IUc-e${BaMQ z5O}l8I4@{PHKP#GJ)lT%rd29Aqj!P1xbu(Da&k?unrk0p&Y>Ad!hG@~f_W0&XtWtgHP8;K4KGf*j;TOo z!a-Al_h zfwqT9y#DTw{@jHD`}F%lE+(eiQqPZ>R=aj&x%IsmVPbkj@fq9GBQK#oCShzqh7iG} zNJo3{WC+Kzm{~tyW1$f0s z{6iv?knsMQ!buMgNPU;UcLQhW<3 zObT$u(6BnRIgkqd<2t3#r#Dx$kIh1^7D#N0@Sxpo2@#MwlWz(w!4sBw8KJQek{7f^ zKGHv$m$UGI{@}cavGTcQj0kkoNra0vCX)Gvl{xn<4ay;eNF$XKM}@iu%D3*|0_Isl z1rdgAYm2G=*_ydRzKz6mWpn;7WsWf#KV~ov>MB$D-VRs+9hFTk0T%K3Wr$Ef^5K+o z4NSyY37Ci$6Fj2!H{OnVf3P-)s72FI<<9ef6o_bwZe#9%#&};-upMAx&fPypyV?v@ zquys2ou^sDUv$?r>ezIEM)GaZT0@^f@(}uG1z;VT<&~X>R zyA1h%+Ms($3thS^WZva$M$-d|k)=%~!%=RT`$%=WsU~0wV z=hEXP%N1L?(g(RemVc+*ivYV-BVboS80wPc!DCH`n?KoOJ;x zK`o6F;ahYbImhByGhZDVQ{`-hT6~Xq^q7V8dKp3RpRIwfWQl2v0*a9CY~+U?QQiYI zmAeTo4SS4R^OemzLgqLVisrrrpC*^vF%1MLeA(o>omrB|tTuSZ`CqgH?mSyjyJrY=MY?H(VPurt6Z;ygvtZ%0l zSdKly`yzX9VnNy&=4$LtD5fuW24dTy2R#0$z{R`nCux$28*A&XTgg zuK2zvDebr~$n#I%v)C3$y@mXH9x;%E9xe;HS0$k=0%cw?ctAQtWwTT&g2EO7iWc;M-%-II z1h3;Sh%cYy>`6-j@tLzQWu)3j;;509W;ot-pJdULvUT(VS1JC*2dT5km|aGnFk{KF z*K&!F#pzNWw`^WN-=iqxTRspByN$emBjO96hZ?0Un+4HK{2P3YSX@(R3#qas9aGBQq3P#HuyVnYyB#r#vcpkE#CU`TGcNJu zAe7CkbtQU{T*If0M_HxqCT2wUPn6hw4!WA+EgmFZzKGacYLo%q*V$V=#4jYoT zk;ODdN?9cu3}+;zYzw~ly2nVBg-8|ch=#{;LvQRjy|FUu*#CY+cFDNktd8r4ySN^W_N-AS>-;+{wNB~( zL7ji6rIEzH({M=s{SWGoGy+84zQ1~AGs~T!x6QFtaAtjCDn?6A|$CK5+cXxrsGaL`e71*>?qA{oGfT zQ8-;k5#V(}CK8{JPkw-afaZ~JHQtvS4W5huVsf$>)|X+}Yf=k8X*$LwW86X%Dt+(@_Ki8ng!Q&Ae3pXb;!4i`UjJv|UB0Hgmd6yTJ> zf?l_(>a?$;{;>U-D4P^xD0%Hoy|9m2H^Hh1I$MJGI)G>Q{ZH&p?LYKWN1FiT4G3Ro z+DE|?sSEn!wWMm;?G;1%>6!+zqXv(khedX4?DqqJyxJ1RzQFM6ZLwSWqyBTP+(MY?Q>%f*Csza zGQZu!=LcruWVP#o0{*=cyAH5Bzk~TeoR7o;0;+sy_)}4J0fqPhdeEwtSUsW1X7yf& zcxUKCv`@igAUDe8D1}w3?@k}`7VBVvd}tuWOs@_em-{u?l&OUYG42g*5LipFg%&}$ z156T10#4lC|DEr33?_hHfMJp}7aFsR=pAVbBL1@!8}M!XLgGDn$sw62fE&P_4j{IS zD`K6)uKlR21lk6rd~oaRN^Xh?e$(ZiI8*Xv`1+1Z@{pgc07UA1?~ zYJU)}*USJ)vL0oW-eN!1KG;q*vgP7GfMSoLH%gz0mO1o&_Vuw|F@3XQ??|fFm43>A zL}QPViTYv2>RIM=YVQv=A)WyI-2fm&y_D~@dE|%Ht~Lu=qD`?VoA(7zAeG`YV4IcA z_t%ZyXaXAGMtp=DEP$E$&o1`*=01gE-u724VB<`rvG$5DA3i_;2GE{d3aVBkZny)| z19s0|+ypc!$|PJ)Sgg9DPO9^Y{d17N2eKJRQ9i*G8()e&Ftd{fu}r+t7_>1Vuzd9&67Ue=b6J zM2n-s9RAdlS9o+@)`D(%uKM`{o+K-=@Aq(@kaTxBt(98p7Oj(L;3&{rLfQE#c7HRC zBjRge%Pt|EBDfu`v;wWf8^qgb?8;@6w@Md|&qq)xU`?1z;aq5wCy}^rI!%cKwc+uG z2T{T+vM%OnO6-w;oRW7HApzZUrL9Ul!|XIz0S!S&Vmo@P<>zWE^T-n4{Hxfg>u1!N9F60 zsBdD!W3fBYjpW@gcCHwx7e%RRR|~G0^jo+7X`rd0IN^bv^uR-%KESs|(F1u257f{D zH+A{|-^!o|EO?;W)l39Ve?R&{zZzOeXf?VqDc+5%8{SR4Qy9PFZTM&6ouc@inGI`j z2k$9u_a6Gy@L=LI*TkQh+yI0`yam_B@3p#6ACGoNG@yA>ZpMycvmas8muC>u2M+CCY@=7$GqC(|=j>Xz6uR}bsW2W0x@C;Ru z;?+uP@j$dz7L<#^+i)Lldc{Zk*%R`Gzk6EAxt9 zg&FJy0yEc6<%A6ZL9rhZ`&C&RPD!goY4ir9p>jxEwt36TeP`lH@=lLd>;bMD74u6(bB1XNEUy)-0kq_z4mMq8FWS6TNV$;VORn zkuP;>0?o7^;H_{>Sy73YHhqeJ?VB`pRf`!nYTY9~{Ddc>AI^oBQpo*+R_sw6A`LyzD=glnvzlWP_Y#=cR? zmf;2Z$+S8DhDV*d7L*{5eDi_@)4bxA%H8N5W$WyVlh`Y+_zd}|c0%PqhbQpsjZ?KP zOqV3F@S4l_2QrxYH1^k0rpE|QLLodzJ?En7DC%nLNw&e#chQV!E!swSR(}t&t`tPe z!!XUQicMYq(+N{Y?mD0nuI4!^MW1X_udyt>##(y#l$zROx3+zD#Whxaf&2c96Gmc^ zZ@}b>Z>|O=*_^x4)cx{}ruQz}Xu2JLui@__{QdP3K%()t?c$B5;*lFo_u>2eQ5#Kb z@iz_Sd**C3jlthM{B6Z=Yu-lFQ2afE-vdx42Y(;ndkCMSao>l(|6ID!^eoDZ#vkQ3 zGMl@lXJl9`-MjbbVd-h@)yvXbvGwWG_bmI_c6+~m{qdh;z&Qgm5u4d`4%&1P+FF3W z_fXgM_*{m+*YNih{w%2bJp7HppBH~~@wXIzYw`Cw{_5~Y?^jUInf!<5rBU-N-Fx)J zH~zHt;`X71eej=D3$VP-@e{0ooXl#AOVRCf*pLVft*4%OJwquc&>5wDB+q55IQzE{ z@hOUjtH~qQfjfp3CwQ+VfBps7GU86ej+kOWeDUM?(9?CNY25G&SS0EB9h^-8qC0WX%>0XgBiAcSJp0=n9EpybI z*{a7}oo_{1lR;k5HG=qNe}g?3Bt?nd^>d1it{+1DY1{>;8x0)7krQYUAH9rrX;c~t zE?7oRkUm7*n()MjOxfrO*%|RXJ%WtVcU$MEcUlZJi?IiuLyLT+J6EUpYVnWwazb3x z<_Z0A^5Zc!nsp&RcEqd7{5#TMLyFtskreDwyksv&1@p*jI`PnQ-Yq$itXaOa@g%ybB}Wo={{#ji;eh; zoizLe=85Kb#i8XmW$PLzF`adxx-K?pg@pdS9| zozOUY>jxojh}7I~zw-#JUSt83dU%)@OX5+w8}E$A_UJmY;%C|v>NE&WQPdt)=9W#cNj(ps7fv)aZGgt5uxQr2$2%= z_bEca!gED+kZ1bl7qKeatNM)f2K`PvUM?KGup%JIa!!Jlj)+5Mg%}40O*R7KhI>}! zLh{YX4dbAN`tMa=@)+a=$w1pi79>*jXn_`TnRx&m^n!qtLu13HvL zz(XQu68nYVmK82C2mC-egu$wCHJ!E`c09b1v5(<{2D*gd13zU1zU(JT`;ykIO72!2nj5SiWju6o0>%Q zRV8^xOPLkDF-x`&=p7)Sko9gRpbJe!ATMsY15da2kU1Hv*|!FRlYk~RtQNqJ#$(4AUlc3?9D+`vzM2|5><(?H4xI@=BkF=zXAe67>R_r<5I|i7;T8@KNfpgZPv; zHfL;m5G#kR)NzBrOC@0=QJgp~*?jtv92hpxLZHb&v#~q+iklSpHsN{F%8avh(KgTw zxN0Wt4QjQ%H_Yw#2KOhxrw3I#)6tpXcEGm(pTM0Yj}KZEi`TZ_7RzLIgr1m<=w=^y z199{7v<;|O@&=&w#^L0&(hVp-362;G=0ZPv$OXO?%5>>&^?oidUb3!kh1@PLh7&G= zb&?m?CtM_{6)G-^_;bQVXo2O$`{NgV{b;4K3s)`txWt01KBnBUH=qq~;_puVbFu#U znEtr|pJ@LyVi8zf65T*ZXXxrZVi?t~Yp*L#!Sn{@K5e&7{JR!4t;bV|coF75YzWxT zHev>)%5cR9Mzfkue#x4&R`aeIluZBk;rzgo(Jjmr?O2C7K=xJ2wxO?`GBJ{e(JSq+ zb=cgz7p{GDz9X!7yYrpw|2W@2`IS7|80;bO>*Ai#2$G!uQGtE~S2{sqo5)VbPfBnM zp--;*4Rc5XLo<(p==7Gbj?n9b5@{@!F{sl8)3MQ!wfA!3vXNKPhdUyj-(xsffzJ3O6I zK-!jFJDEs0_ooqLlOf~|G16ACc8SrR_B@z0wkPmm_jGl(@&plWLx!xL&AH9N&oXkG zL(GACJ!1Tga%$K#P5lwuf6uJfAe|ws(P1@|F$3~Wyg57qI+g7N7WnFx|Bkxw!UiNL zffu{*X~~NbvQwUS2!*1$BV=f2YTvq@7k&qm_yLrog^#t#OWwRLBQTPIz5!&K2p-A6 z;SMvz;bwV_lz5Qy8;58G)}DxyrT?@|=L2UR!ieCsgdRa$(H&ojg=){UF!hbgjLC8K z6t8%Z(w&fb1Sk*0fUzO)32+8#%8ytz?a|^^EE=137xavjy%zKPE{q}0KwIDzAcuoa zvIN`uf~K)JxrXrT+*rIj4Q)8>>sKZp*}AVL!M5T@HnD=py!$U3M7?pau|f9D2%Hbg zSg|QA&K?>@t307`4v=4%7oLUNXv|P%MNo*(wy|mq8|Zuj6u_S5h66kv1fwh;X}J>g zli(3VG?4~)GTsqJ9K%3v^sX#=ARN6bGc5YT>_N|fC{2srl%wMve?A7}JyV)Z9$tsak+&=OktQrSpmWb2-*qC;qw2AKESl0awa7js0R4&e`4r zj=thrP}^W6LwTSle}RBLn$DW#ctDt+`jphl#Q1l^#p--Iu<*fRd3AoK{6!`PTx1!p zIv*LVku@$qD+TF}fJ##5j;PMhktJ}@Qo-@^W0d?DBR}%x$0Yf2t^9yulpgTNkL%>e zO!;x6{P?x}@XHUM{J2ei%#|Mt<;NfRqjVX4;J@n9QvRfGWwCD+`nSe&isy=MPwL(G z_wa(&f7|bDa(J)Q9-!e=7t_DM@}z4p-bZa3|DL_Wm!u$g`||b*0_I2jfRBSs?SfslVy(oD6rwcAuHZR)hVbj+#d=!bX+YmmABoH&(2Up(A9?maReCe*KSVwBdGCQzY^tyAvCZ>bAs- z5`O0OQ_+U8Ty*wT*k(`zfold}xk+1Ki7v2v#1bmMC;ZjfXf}=|+IHU1RL8Vv4hl1| zEpJ90V3VT3<30RCq_H*G&H=#>#GPijA*;OMf9G- z8R0L^CYU_v{`46-*5}J~bc@gg4x!KWB1e7Xf!*Mo1MjNz8zJ2QF9SjoZ9#_Rwkp5t|$1Bl+S#xP*gUK zRgwQ9^uh;ok;?wv*tNNI?M+-;z5wfN#FULD4?cg3&-M7TP6Z#0zaF^e!RP8Q1LxA)zlsT$=!)h{hNuur1sEdRb4)0{|fCO)PqG>>!SE~IOF(OE~}({D zCqo-&?fIkpei3yTRpBg!V_Yni9uPedQi$SEKr&a>{erJwRaMDiXd8H_VLI4o;hnnD z?H3TsyJFAy{Ot^MY`n0|TijiI`8L2k@Yf%Qlp2{TxKUS@IxdSH>wv^uybZ$_dSEO5 zRcAT!3M_sLbYKN$b7PNCp#$U7`;Nyu#qRcd@xNoz+WT%Kq~|04Y*Et&G$<~=w7RTB zSkVoF<>*j%IHl;!o61bM%E^VLezPlCSSGpBX8y3NHwVi~MEufdm)>I`KIj$5p^^_0 ze~+ovAs7(8ztbq4y5s2fi;__D8*!l+Ni2wLi?w{0WHJ51L%1M4MD@6g@_IZ~AMyko z#W-n5;X^2PannqeZT>%}@VN$z#Iyz{{?!}9ktC~r%aJ61(@rAlbITfF>8T4?-R!Lm zlE&#NJYqNqT1eye;u?u59s}+Ed=a->k4e5eHoCE70N5Eu#_ZX5u#7PrAaN_J#j$P4fagbIAG1N8&IO1YDk1My2&KE}hMiwI^gdve{36F6qfJvVsR(hHG(<$X7oj@=L~jwjYPy^N1x|S3`ZVN-d-x2;-(&{c2{q*V zJa8fNeWA=9DxlwC9FsH$FVpqBU=$uA6+J$bwMV8{h0b=aC{B4g|3Ne z2OyA!zo4-{5dOkEbYEy@3Q(P)OZNbhf875Q_Qwn!Z}!g%9%P!XM}j9G?YopoR81lqF3J2Q3_>8>lb31Rz=}^_Bi28 z^e4Ik?k_zUiTHmXj5PZL2+xKC+$(&SJwxHs?aAZ7bz%V0!D}I;Yk^sh)e;?N)$TQG z)r4^N4@D+J|6q-h+_lejRGe8P=5fno@i?*EBf%=fNZE(TCgpcx@F0zf6`&m8hhq!1 z-3sOPX_)~PB8G1wQwBu!f>h7+;f^{hiPZ zMlX-%h*G?3HeS|!WF_ljEv5}A`j^<8pnc>M%U%=TctpwDI0%8I+{3ODtl2HbC2X77 zP79zy9V{p$e@?MiPq0$6swdd!Ln1^5`o_iRU#Z)m+$c;;?*xj@J3C}W)<=J@YDNPE zD;>^o;5+GNpV&SKqb>-5-4O>A(}oDL<^b|Kqy^GPR+4^sLrS8S8T~=&U=vJ6XBHBG z<3^KUbKbsaboSDG>#&qWy*28CU#1(}LezbFDVjtnF!Y@T8fXnyVnF=8sJ_B| zZ$=S3G+;*Scc34!UTXyo=y&{Q;U;CTNDZVPE6B9?(>A1_7)r_U)}hB;i1IwdGP-=P zzd;DEnceW7EmekLqw&%052T#HAyV-$KE157DaSV$B$Vi`H0^@sTkeO8fd7%ji>G0bv3~EG$v%!*l{~dsOV&V&YjYH5+(&pPwCnJ%0IGuw- zT=L0gY+k6x{C14Za6Ms$DJ9Tt4u)mN91O~iw~=trmRpGM@Rs1G7EEr!h_qeT4{M-nma8Gf~Bk5r3!8-NEW|&ir zCYVg*r+}3U%@KizEVreaqFX3kLWuv>_G)$FuXk>N7d~KY_IbI^y1Q&hE$4!B*&G?& z(peW6;@lM&2q9ZET*;uxzJu8#D?PM@Gaa-m9-lI_ZyNifLB9pxxH9rM)fSk~d_Z3P z$QY2sG$k!2n0(Kyn%-hmKwf>z4?H#jp|Q^{zS{SQ8Ia6T-2lln*xscRGHb;!%#l6>)c?{F8&d2d z;+*!4|19l+^{{5+$m>pYJY`1IbFH>`8T7-)@+}sn>^+bmc|EV#`KCjP_tLDSJ$1v&)WRA z!A5kG2BAmVFZ{O9IIEh5DCxmU=qD%}#D}M^IJi3%bq7CfL*zK;ILo}g&1v{rxjKp)Xz-y?&8|Hv8=J0=&H=^*(G!)|s?FzSMkfXT|Ey1>6V zf)mUMT|r=z@UZkTsmkKP7=>fu^uR@k>>Cye;f4ch*wSa)ZRd24|-4PUnB#^sf(hn zwS@m!i%TYKmiA^i4(~BhKA@JYp#?La(^DiVN_)%2k2&;eRuClJAA1X^P`Iz*Vz~nzdje?&5*3njv zs3^o$*E0RW3XfQT3;f_<`QTPD{HNQZA@>U8XGBe+KYnSW5JN7oRV!H$4LqW`xjEu0 zJg97TZ^_-CMyH&V53Jt(5#0Szm7~o~$FZv>ZFWRdXuGbb? zmTnJ!-FMOFbm3;TaMR5gs-^C&Bg1ORiVAntx*M4 zNsX^;L9iiregs3bLfKMN`9(MABTA2?1S}PWtH@meQ?x2&bm1yO zzGAj3qk&aO#jK34MHCRVa0Bclx%+Wpw0jlBIUipeaxM3$g_R;)Sc`SLRx4Qp6m8kJ zm@_&szrZIl8l!LM8kn)Ej@B@L)up_~^QE%e*JlXGhP1ElA-$sJT0<*$l0$Q?)jSSJ z{e`P?w?9Ww7nJfZpyx*{mxe)MF-Y&^0lMT~qXpK&{G1C?7I`Sw;$V&4l8AA=^kn?K~LV*_Nnd~9@mhxE!}IL;yn()N@Md3)3nxU*xv>+1pLd=(?QKnl zFbq_r?OmEO+I$IZkn$Oc`C_R=WsHXTcJqen#f?G%NIPk`?(`ec@;S!Z4wJzc{G#$p#Zbp~Eti7IM8ys+yrVaN{|n z8|?Ur(+x#zu_B}fNGS3RmKd+59PZWyp1(zJMrfs*)pEKJ;(tA`OF{V8-u8$KR(v1z z&H!fX#s|LFT+SRfbP)i(1)3Ayvb)l=+{+labM}tjFG&XO$LNB8pl?Eq5_tAvDNDX_s)Lp@GFl9xP5cFbow=2Z4)YdutykUa zl*Q}t!sVV2h7{g6m%jNXrnyqIT>_{+g~t2q6D%`9`WcQ5TmEti@c5-VGM>VPdm(-s|EJ5pE=S00C*G2 zkE((KxHXPO6(uluLwVYwmI!C7QkG9=2yl0Z#@7T64vs|N(K`Wi#{=cR9A;-cOj+4p zT3v+Wg3nbKkHtjfd*hFdz>W!)G@CkqBzlF|{t~|;Skhtw6Vyeq%f(|ThLMNhtr2?? zA)?3jdsjp!W=Kq6a#r~*&T6InANWo(stc~kSV()W{0FAqm#gPFX(m&|gIr`MEw|rY z`!@`CmnKr0uCCGH(2?mpVQK)vLSq)I8`_>R)D2T0WIgaHsT=D4Vr-q!r%Cf^ysfuz zpw-xCeZX}BQ8b*m9`IIs8b1RVrLg&C)wL74*|Cn$HJKbk3E}iIv30Y<2xeWlb2>8q zcnD?yG(eF@jOj%i4vaU$tPS)M@T-XW2L^zHPFl1RH1qet(%%FtHe3Ww;YRK;j=>2Y z`A#dev(S3=Y=&FmZ?vl1YS_~!)8}&(av+c&{@NV=${hSWE%;fQ^Ax7?yDZ}{-B1e( z#9fP~`1=P>rTF^>qp3>S-_YXVDSRPGmL!GQ*H_~kzB9f`N7Qw?N`YIDVu06)56`*)c*+yVQCQA+{kcM~ZQTrFiLv6fiF> z?DR@eAe1t=?9h!D9!vHNZ6nW6#3T9v&(MgdT~S4(fIUOo#CG}>Xmg%Y$|mp@h*Y~G zG~%M7g3j0$27ug#gwk3L6y`E&_VNxOL#AP@cMOV)pa7lUArKUoxYwZ_2p%CgV`t+~ zhy*%TqDVwkNC0VrdjT9F0>gEH#vquUvOAC{nt23S>IJY9miDje$f?P~kFV?0zk&fA z>oWWuVu*7S@lwDk>p9bn18foyj5z&(ubD~9(A6Yo@nVSba3W*k*(PQ!Ap+e-<5PZ^ zWdMs@wz@S1;vL26iJ@hTu#z!_801~V-@p zaDjf=PD3!cCGXSub|eGCMu?jX3|!A$J;~V!X1ghu((uvw2IoN>PWma=rCwU=vN9M1 zQm8UlGb+Qe22*TVJ}^ky0R)c+Y1<_ilHa0zOC)?g;dnkLylu}`Aa`@4`t9y?R5I-& z`WB(XvJdUM>fEYzaJu{x4l(-9bPj5F<0lyklyX1)+=~oW4QbG@>0%TmwE{5&Ndz$j zNkoWLhwr)Aa5FtLl!YLNO4-lwKro6gNaaiDfi^GCj+I2?&RugH%=5 zfCVDmKgHR@{}hnM>J==C83f66p2@jz1_~=w}2!xAM>EPhJ^;%Ut{?T)fvSWa8ory>Nln!)LgF z4b;WPfai~~w-6-}9Bz1paZC>;$q5VH;+f$Ue`z9{ojqYNurI_>%2-ZMX|bo^UIVn2 zwXvGCJpNynmSma&*U?_uin5^O`x;qm)}J1KT3)*9GrFXdFGi>6@&oenv$2v^agV%Y z*GoPCO)-w5c0`A!8v%tLKqboNC3W{P$a5_|=;coN{7w4dh!X^<(-mlywzi#P=l z0~C9aL>?l4A$O*za?$P=B!gvo#8&*$MxhkY3dJTQeRtVuAzpHlj!CIBRLX84E?Zwx z6UX5JLXA53`BC_p=TOSlq{9IRs=`^|O&k=Ya0qS`X}k5;^r2!o5R0Hured_ly<+mc z?G_?+$%jnv7|%aGoY<8U zTLEY;h4t?y0#VWsr1gh}i-}=GwDyC3t3-s{%|)W;r%~QT3z+&hqv-G`HWb!8{`H8r zhfxFrFeJf)Pev&sgO($<%4?b8cetjFqQ!-QX#vVf%J724oEBcEO4(pkYz*Y7g7`q% zq2I+%8pt9vnDDf*fqWk~^npaN8Y+f?q!fcxOb+BtPryzb-_bOXL(nh`Vy8&tZx)skj$4}PkyOoU#$0f*;Izl=VN4uMXi6`|y)iM;=Lg*rKz*-(B>fXQ0{+XQH*78@n<{ZRFmv#pGK!0IyiXES{4Ww&Q|_Vgjglo#I1qQ5RL%!~*$5 z4p)IdV&Z0bVF)g;NoBVmp(!#U$z8b+dB6XGFXlV(n+77z*6unX+<)Ks- zf5$cWaUNZ;(bQ| zG14tPJ)>JUOShs*JXHr9d6F}e=1enCKL$x``s8TNHL zAU_mZhLVW45biG^0Ad3ME99<)V8*0k{^N{T>z-?v#x-{>Y;vHi7sjL1BIn(|;v-Z*S~51!$CRjqo4k!AD# z7xUz*hYa2trnAgHTFw?cT=xZ!v_T)5>KtqK57Xzc=T@*ftf(;~<1@lonX^-%b&}nI zjw-QRgn!T$F}}f+@9zU@NGQ9-y%6pR#gKDU3Na*&z}vxseC!Y!WcVp%Wk)#M{}x~M zwby9T%_ zDB*(JGZAyPJQ_0J&vmKkp^2yr7PJAu!#~#$IT;qq;F0^%_JyW4hwLj!A(ytRJURz2 zRHv93Eyasi%KxE)x@wm|8B^=QDuj_3_}0)GP#y}%=8hmi12&?&4S7pU^j)ZvNPkCZ zOswi8d%NM4_{B@(#&gs{;7x5#R%mLb>V7+KfV4AcrRxAYQC+n-7zg_(VYMXgl`BCC zrG-l)Z_D<10XsfSFY3K;o3pG^=wv z%qGohA8iLeeh4+-l%N`RsM9PBOYxkBo7qr2rm9GLUKzMJSW*WM^(Iv3|E=bFH@j{I zs1r{0xl5s9FUrJsgx^A6(6F=}jV?-uF{qew8iw5UvgBL$0B^yKN8N#X=R5uZ*&hJr zF$0l?hUv9T&BPs|FRr?fc`;swmLZsOc9mL`6|79leJd=0A8`f_DH8!dMZ^4KrF{<@ zD0(>sNH+ujjWKXewah!4fg@9`!~J#)-eTFx0+D&|8&4h>82GfFknOsk8u1$cvhXvp0nHs`TFh~0<0 zHzwcAFJVcI;2#-lg**uS1K9)-9A!!ZTaYHNs}KRK7LZbvt#BpHP#kLGGk_S$35(vr`m~@h$%G<7k>dXq{!z-$0tI3vqJ5sd z!&LAhwWT4EOS3bO*;N5}7B@#PiC&sP)YJlA2ah#Sng_18>&NtZyMA%wGo>Y2XmQ1V zTNfIJHbPUIR$}vrl|Ylx6$F0))d1d#eqRoLB$^}c&L9+$A4co80<2u8TPWp)kQnF8 z-jG5pHEeDpIf*wBY&uVX4zk9=(U*W~0$J!Mmv+1FuORetpNVG-u63{IzibQMfZI>U zZs$B}+=g!hVnPB02gn_EDPiM^5bPE$Qoue!;XhNNtq_qMp{;>{gTRK&_sfsrb~V`4w6d@)-T70jsW;SNR?ezwg@Bc4XcHpJrB4sL?_1xna(x_a8lS9 zq5EuIV4Q3?6UPjPMw;|}2|0C0#!z2v!f0w!N5pZ-X~D2r%j;^l(nF+*Rm9c`sHJ3c z%(3P?5^K(0k@4pg#Nkwf0&hr4aY5@NSYk1;D=qohAU4i_NWy1i%(6$(r&_*8`%FhG z9*fO7tz1SWRVMQABV4_c$#nFR1jN>$Kb(ngXWiP7hnz3uONmKH4IPAidEmh*Pu zF3!=k%HZMSi1L|6$LKgS?}=a0p;Tvn6baRTze*Q{OJac24#p*3{a6Fo?Imphoq9qK zE=2Ri;b*@GXUh$+`;NvsRA+RE$&f6%8AY+c9jsAkmrzd5Cl>Z)&tf3qwSC^Hn>!jQ?lv77R z&5;=OK5;$J%4cGnbVl>=^AZV0F7RVDjP(x)M$X3zEwLAl`is%(S(Xmovs{5pK9f{| zHCBP|u~-El=+wF8)VWm$jn4Io6@6q?yFuV`ew5?RNwFj*aH4+@p4Xu&oe)gcD|GlM zEVUdh2MxJFxAk&EQ4Z?~vCR^Pi_R|!mIlkue4sEbi^4PnI1iusK8h%q?TQ-m0*F}a z;-jENB%n~v#ev3qZ>&mqFR7IQIAXl`gb7g3AZ7(U6_-7zLcAY~2g*6*?2~XYbD8=ebTmW6vH!oISWn%DIG%uk(Q|I+jFgv6SCEdfu z9K08x4?Z^AfR8!Ftirj3N5G!KU<6|?y0Lx3DbWR9=Mg8q=VxqSFPL~sxm%v*UOS!U zGmx-?927AkMz)IBY2In7iVONbgTq|53U7D>Z-5=~e{-0lCF(>o;L%CTjrkiANFjI? zc|xzu#OhGxv;y38vFu78*%c57qc3o1pqbz6f&7dR4g^$Ca}ZFkL-kaDuxV1T#G0Zk zz5;xxOcsRBcre)XvJ&uYMnHSwgRj=m>f`r`XF9-xNLyuxR?50oS zp~+*^OV|G)dDAyk&tjQxs7<`z7xnC+h#{!wtw+gx(abr3NL?)+nGL}c9)$@RhhkCo z(7tJ`vw;&$OlNb!Ctd1nP+p6ve-vH)v*hI3C`D0XGb@}>=#%t9@Gbv1p(ZLq&-c;B znoE)MCNLbM<%L@CYO`~aeL=5z-JEl6ccp8!nhAKrd<&KF|9dtmQfvk#(sqTGgJ&W>uJny07IW)1Y^^<|op%K6(cc6T90Zw=E3O%_;Ovi(BI&chK zzAuQUj7_1x%UB->oRjo2ul_Q$Z!*3ni1e!Cb-kASam+rUU8=l-FzE)(H5;$Hw4}CaXa&b_JpCg1EhF*(^%lI4g2_hTcv^oG22hpSq!Y_C+ z*3D5?hi6|OGP^8L|dzG=^5TL^Of4sd7d{o8N2fUkXk_8erV1V!)1vLt`NI=0LCcq|935Kr( zA0)w#;u@_Y>;gUt1~)5Nu4_|^78P1z(T7@UQK`j>nh;9DhY*x%tf&F0UJTWsG$at& z_y0e0_hvTGjnF<%$YMY=iD|7HQ$eIYXcKA_zLA>Y8b0WimRqXAIi25%=d$rB}O? z(9jL%GQ2I=PTh(^^1kWq+3Cxnx?w7N@w^kTLIEuptA34-MFT4fPuEK)fQ(Jr_#lqI zp^Y^)t5@UK_)&}QRbTD;tMWD8`1-tjb$EHRsi;u)b5vgF5)Xi-WvoBjh?z(l@uZ8o&eT_H<{lvU}Qs0PccixunOJ~Ev)G5#x%-ARJPXM zKdP~>Ys`zROFd4~QMKj&HvL*jZ~tGXpTqRze4>{A$3?(=vGT;ii1{2Nz|hv=_iaUg z*Q|j6`#tA*9Dx=t&3VjHPLoMs zj$jga+C~4%RbUbVKE^|kMB0fqQDF7E`hr^!5a~W<>h2K;Fsfd;<71eVmLl%g)BaQ* zG{V=uiajQ1aygT@=qDfnleDUpXDp!Gi~4HUw|RFA8&M_L8oDGl*k?GTLNli8cTE%C zh@7S{C3oUCmzoiKNk;!&d7>-=UtD|uXXpv0U9m7EtwTu_lGfr)A!&{I#_FrE$MB|* zBy}qVk-+$Htm4%vjFGL+$r#y;hZY+M5D$J|8GQZnW}=e;z#Wcr1fefS(8(MTB#}Jm zA}Wrt2Q$%IAjWu7H6Kfw?qewzIf_>V0?bK&uJ&U~QhX85f-m848;1?s=%yH zXv6Qa9J^O??Pe5m_P+;MR!S{1EcOo7^N%?j)Z$ddN&*i7B6QTTmH{8DpBHfMgFfBO zDA}^4L|hP96s1|Pc2(uL2jvLl?$ftQcOlmFZb|EdjlF_b1$=@ry+5oNk#>jhz&2u^ zlX^_8WS?UbfwO*lGy9x`4}bYT?sNaX(d={8h1|gW1_7$mxqf5PuVq+6=r0^0{d#r7 z%a*fn{0q@9jNj>)o!ek3m$S^9U%w#>-eOoPw(AGLzkzWJ*O7zx;2n!&`FV@_9Kq!Z zJ=g#M?fku8T{_F92?2;3tOc}wEvN9Y-dj)gZk+^>af5q8J-QgNfViwB+e~?V{c;14G=M z?vLFR?e6QMwk}1^H+=?j{sDA{U^heHdTXO`HbL&F@@nIgh&lbZTz-_oL1><+LF&i_ znVvV)5Sw?anJgQK;pqTo&n1+@x+$+nv4pCXr<$ry5ApG7er^vTB`wfKin;X)V1 z8N%X(nQrm!jrI?LCZX=_w;hEtfqO$Y*?Ya}CL&Ma{4)pZTj;y-jQmmampewAWH+a< z4*h5Ozl{D9!w&Kb^uiAPhwyYDgY(`065h%a>wuW{{)L5v^ei01P;AVQ|| z_Xys%ntr?#zUE+WF#5uj!Cm$R+6z)0G}ISHA*IxqGNDoTo7VS$}vVJFGvT zJ=sJ~^iP8&7{jw<=jUpSGglC~Kp=WOgjk{^8$S$96dmS3ax`d%xOcl^c9}i%(Ou?g5uBwTtyi1^|i^kbzVXN9Hykt<9d|HEZ@Ahz{g2S>kCQj;TFy`(Szk{P0BU_b>yOeVQ}H;@`a0|6 z24j5z4>KJGaUcI_*2~X#oj@y{xW0; zvZNUR`j0-cX$!i#V;f^PS4BIV(81>JOJSUTbs~fuIO{~E1Nw{5p;=^X%z-IU`*yl} z`$m>50aB~bM{>c~^gDyI>kt$}WukV-k%(;^3zHaU{m@ zx1*P};to9hnTZ=*c$Q@*d9&jCKoEZoY^j1Jhp;DK%fQKUyIza7Gs@Phcp`GT6lDvQ zdzWP*N*MZu^e?iM6MP$vRaj+5^&{X@O?Y;6YIAE^>KiJj9p$vUCQSS_%Xu?vp2(#c z1GqFp$?U7+M&3H1|I%)-%d=mP-T4Hrd0@SFOM6>HWY~Ri@8a&RIRJ=Qc4VkEH4b2w z3}TiGD(3UepNY-J`0m^c27>=Yd$G7r)svD@)!N&u&jX<_3hRosT4HcUs)Tj>Yx11&$S!@lj3seC1GF?nU$_?BQ=fX9U@;k3d>LXR?n8v|C}PZJXR^&v`Yo#9UEb1#G7DMv z4bc{dG#Yl&SilHfE0N$Am{A+%@ck0m|G&xtM`=zH%a-X7@s+?+m%@LzR6R+f^n&}k zs5x(5y@%d&%4*g2;wpdD*=StnZmzcCI>4m(9<>_GPjLSj`?q;O+w>WF`38d`3FgfC zXyu7Hn7iB8N943gKkvst7y9`#d?pjLRml1nJSYyKK+TY_^*a_OVcUdoefBWfhEuXN z*BP#&7++6_UeB(Z+m`l@zBoN3ewYbMC{%<^4N;&lEx1>QMZ8B5$}?|25p2vv@DT}) z^^AqI)}Vh8gVYMkQr|O3RRQk#jDjAPMG1QN23d_1dc#E!^h7IxU`b#zzCh5k4Ud3` z8D;e8jn4py;esBJhgGjp$a73Tu%7Z6sp#;i^})HJn)d4hMw zT@X2n!c6pb9efJ(NhKkl?gUU?RYN^qe53or~y@%;RG z7^?>ngH)mc>eL6~>>;{ejrY3XTz7PE8fHcwgD|T^eh36PFg+34?2*C~qxHtyOdj?p z8F_;>m7@)5&DwQdNcwP#{+uVpHC#BHL7)#gGt9%Dasv+f@v)0n6Sy&0rN_Jhyj#+0 zpl`iOx4~>y{Ek4<4rq5zHTE;TtwFcb+jS0d%E`)F1UG-?B<K>AeypCpfoUf|EFIpeB)y-c zJT8K=P>d+gAQhtzWBmJ4=6!r3YApvEu)~6e1TT*E!)VDDtD1d^ixtIoMVKF$mgqh5 za3Pd*dt0)X;skApeVY(Q3m#NQt;)OPR3P&+-iA35$ZW#X@f5UFFDU=?FE3j@gCoZ( zT&vZBfAtr78b81HVZ`P68?|2b!`=&(OiP~|pOxfZ8py|~j59#fXzd#91E`e^*mhv) zncm`_t2NCG?SIE%Khr(I+j7o*b#u1O>WnMyE!DU`?IYaNfj0XdP{Z0$oBd3E z<5&?W)6l{>=x_J5%tZ-`pd80@S#U|BzHdA~+nTfNR-6{IqT{PEbq7u~n`|P+Jcm2^ zZCMG`STnY-x3({e*dDpyCvcnD9t|sT@x?gq=oj(mmE9ph$i-f-y(Xgt2(|cg+Bz<$ zjQ$El;4pu)`?7q!aT+H<=swX;&HzcNarY^{(Y2`&@|sa6!r51)Up`~11+>6(DV6_v zE<7zq=Mr&$*lAbRx1*g&D3Ja_w{@7-phC61sD^cJeDvcZj>|W@2juHNH=z$(`nMpC z7zVPjX*&3Y(O?${+SQOLG-J1sdX#SjMlZ%XdIQ`+RZOm?4~@fMbdB#CdD*6-Mrmq7cUrJeQ>xMyhiz zCe%XQ@U#1)!!$bEEa@$aQ(V!UR?7!sTFsaeB0Ea>UWlWzZRuy1q_}KmoXRfa03fb3 zf}2+Qqgy9^Y#Fh<4fiezZB@ajz=Unu-t=nEKy_(BU?sP!8J))a8d_!>ZY)fLhUpPC zUfq^AqPAc1Mi6v`MI4tuqoh7MMLqnj^wv8&Q%?;_o%&|r?~~rjG5ZDa< z6!sM6an6g^?Bf^OpezL$V>Y_k`;~1`e92I{(JQU+0YTZ*utSoN@k54u739 z&cAg!{B;FOjSIoh@w$8q72EFp?^lDGa|?U7vjNOVjNj7$ZHddF19pq|!6}x`XBgar zi=$ocx~HsMQf+>wJQ!R&1+T%yIr_w>%Y!8kW{E|gIRfE4tnb|PG1+qH^LzP;;PD>F){!_l zk)jwLg*RJkyR;};t5ROjT08mTD76C!Q&2%S^e@ra%r^Z~J5^}fse?ubJk7I}6#gZ? z?$<}hRRl3T*Wx@^MUY9g+(RLF7c)~oj^I1%DCX4w)fVWxw>&}l)N^=1|KyPY z=o)t57xI%t$7JBybBek*U;Q7hX>0X2%0Gq_9^c1Jo(lFMU~>|k=zcg^_UYs0!amPc z3;O3q$TGJYl^F$yf`aW1-ph0NV5x`r85Mz_w}AqMAKwS<_#qPj{Pd1B@N+X_G3oj7 zlK}iAxa_DiOWgVb@H2w=VTg&JL=!)&6O!;=7Qzk;%7kI(4}TKul;V-64`~qW5H;+9 zAQV6lvGXKg5Z3x%$jbjMum%>rE)ao^UtMmZBPE26KlW7UIIhr<5`m5_sIh^L-R&gX+Ys|yJI9M&Gc_NbXC5yyD+_6ro}S$Q@SxMG z5U4jy3yxo5gMt&g>kx`<+)@1OyJxAru?HHrZ2fCs*unb*u>l`4+F6b7T0NyyqJS_K zmk<39+OgA)p&H~Anw!Xj$j!jRYHQ&BF=cVu2RJ)C;$T^}6~~6lvZHWbxGXz*b*8N> z+qOD0rYt*Vb!Kc?cI@iRxU%fH)tUCPZ2RiWZe`isR%doE%kB;}@BVDwzw~D(La&cM zI|+K;{n^m*GsvGkNXty|XQybH!~NOAwaiq1cB+;+(w{w2%N*s;9wi%H{@Iu=aMyKo z`hHyKTYLL`b_| zFP|lff|Fd`&Chl=ukrcH|FT%hoV@sbU2%qf`Vw?5#UMLMw*c$j8|@H;Ds|$tv^o;FifyD$Wzr{Wdr*AD1IB@Eg`Ja#Yy zla(S0jFvbRH@(YsR=&RJISq*qXy_n4 z=N?A6{&G7Nc03FHFKFUSZvPZ5!$E3l8K680OFx?y3%p^+woT3{r=P}=-FZ;!2(@y- ztMpqXB@TZ>!^dgQanVY^ghl=#Fdk%FiWGW++xNT`9c>7Ya$vNtB>`fNT)Q3*p#apw zHR;im4m1@)4^4>q7HfGT8{e=0b2_5okWh>M5#AtDxwlJPnewRw&m`|I-F>Z=H36zs zP?ae=~)P&H@w|LXh!{3o*0Lb+Rn04lkNILSd4GZXp)$Ka>$_r#6<==h7MtK+rk(eHXIkCr{j1e=uTsdoP!nLtwbPrlNWO0k_%FrMECpZ z5ZS+eACqLpW5Y|80H9MkgO-G>nyTaH&_3>8Z1X;lXwg(YnemWr_?Q{?pjGp|YE^w9 zQk19#*uS)1!5MiNQmYLW{t_I=SKNXZ|0Fcee1`ZZ#iKSoi=ltMLq1^$d4KJXK?qBu zs*9trio(C(}s)9vgg&FCKS4SpN zWbF=O#jX;Otns&;^1#zL%piP*vyz)^3ujUADLfn8@a*_^~lzx?YV#2AHM1+3|=8 zaQJvVQ-%?Yuzv9t)76G>ah`#4R}2fl%<}Z_%8;OI6f8nsU7&!pj2Pf87@AW?f7nKP z6jq?HQF4VUP-Oj?g?>9Bhb2;@WFz}S%ac+I86^ymQL-5?GD@~EBs5Br_4E$;gkfWg z%I62j21^qn8(*zDFFI~VW?i6z1fJ-KSLje=<9|AkvM_`UQe}!n2s6=V5Ox?s9H4&= z*H$9r3$g^Yjh9megH8nl^_OM z=>Pucc@c91GV1~{od1ZJlNc!=LhL8y9SB+&T4Gd*BGJMu^mIaQDemXmiQ2V~lYTNz z_Wz0>IZmD(7aAx1ic>L2hBH|hHp6QFG!y;MAgLg5A)e8B`UgIw=z5e)MP^;po;(0+ z&$DS&4KW}Rzv@8$!YXf91&XXZbI>Oea9AzWdC9}Tg#Mne4RT(RzdsGDJi}cNrbh3A7H>D+~`7 zRh&pXFbn-ELJq@&8XKpGhrPnFsIkES85?ba2~4S$ZxylF5QUe}*htl5JLDIJlLu9P zKY$aKD%3k(_nsFmKS5?)pkJx*23H>iBktG*Z<37(c!F$zTqJ?lYAiwF&&O*O666o^S}a3HUTY1r?HVWDkZEU}RO}>5 zKsyve4z`{Qd2R<{7KV-;!i97|2Q$%I9tP~No}yTdDMUv=B@$MH0n$^Z3PM0V@)#0g zHAd-m9r6k5Ax@Rg5A+b0CN!gZnOWBeX#xAt1wv{Kgq)H&B^KDYt^*kh!^T!&K{{ZA zIp|-mh{Q&3bdKJxS;WS}Dp4{z2Y<_I?GA+lc8}f=Tkq?TIt&MyD)kTGfMuv^h|SX< zVNP8m;4~P8&Ir&F_7MXZB|Lf-u)PC37%P&iI#9GQMEpURjt+=mM*5NEC;+La3svk$ zJ>5(u)H8EbJ7+NtoW&j{JKq4gmdSo_fDnAg0kW9cc8v}ltV3sXRMZh07$E;Ld5oWS zAcrAJtFujSNuF+t0Zsi27NRnEr|d5FP{ho$1)0jjA!Ehu5EycUwiSXI0rA2 zBA{+Xu$I6Sf%x6BzOB_$BA`Bj7!`*V)cZ`NwSf$^!@XDFG7oJ2BB+5aSs8?7|6YlX)kc4D4Z9$X5zeO)dE_m}uoJPN_~2)O?( zaG64Su=J$Qnb5559Kvns2zLj_R(pNN2wX-2fK^Q1-&LaE_7A}=XRwLoD1plq?Qrjn zfZGrN+_sKzZ-{`q9dUwV83}M5Og_N1PQk6fC#i381l-jK))JVa9d7dyBsA;mB3w$( zL7&?3{4S}9k_7|Q6oJb~`0;BdPjYQja4!qN-N0b8zP$x5Q?$cf5dpX9F_w(Nd*ALA z4@6Axvm=1lAYyPVBLesU<}uh+r+{z9r{Zx49u@)oNi*v}lHwZYQ0VAYn19e!W0vB!F4RO@%NWT0Ql@pdEdLf-^*TNY*%%c8^f?6Ioxl`AHZF*O=Oa9B zoJ7>~YmyeTp0^4}MgqvKZhY$PN>m`T2$J=Dlfh;^e~Mr&fhpSS`7C3Y_)U-)+_ym! zFU1+>2Ah&8yCXnO#xHbP#dfd@ns z;4#Fj;O-GBzVNQfGB6NmV4;6z#a#lOkpSk6#ehD-HB~{+#U~dN;Y$_2m~~IXm%9>} zh@VNkD)`;3`2_^b%_{%~p%#+)FbRYu%M{r6@kvN#ZUoG?5v(OJ zMLWqH5dn2QVpOCksCR+wMqRr{0DVY+G6sMiSOlPbU27E3TM0A+!SxI_D|&+fWs0gJ zv8?Co{A|{9gnZ_XU8g}T^v|qrlt5-g5& zq6nK1uOgKt2&Z4YNd-;lrHB(8%SZt8!TtD@=&DrE?;>>06AcVD>perDGetZ7dW$j4 zs*fVvksaYaLqcT2jTg9#1OP=$p5i*B;GSG%z;#8y{Re`z1g2<*n-u|f8)8(9>InCu z2)JtyCpeao0QZZ9fQti}3ho0TxJ?W;>wBBPWr}vV`x(QmZwBFx=?M2l5*o9n;!wU7BMQuDY&7bG$sP-3y2XM%P4@_dLN+n zcBLq&8a~NTii&{h7N|_oK9m}m(5&qYLY)u^^)1pCv#z5ADx(0Zmx+^HV-(arA*hcr z*u?QUAM45#?NEy&pdOYO83fyLPRxt|{wg8{$1);-$1;zhuBi(6T6~h>mCJr5Mh(q`xS%DipL0Srf9GD z{Si<_2)=v z*7k0~o!SxZ-$`IhxY+`ikpTA@CQo*iE4U*=aDT^Ov%Y-pC_T^RxQTQ5tNN5CB$ zdQJrJJ%|__%ZLCzn0fSaZC1elgiq4YmqY+xYi8ZCq0ileb2AlOBjNrQyn8L-W;_(Q07Q&ko0q^G#@IHNn zRb>pM9nG`@T!$3Ao%kg1(j(yg5y5vSFonPy5&^FqA1iK&fcG7VfLXu$1Ri4m-j2KR zskf_1!J8F=x0k_Y{jL>wOd;@I;ztvoDfp-*%qPG|W@l9d)Yg@(C8GiAROSGI{%IkR zpWu@)JF_F8)*x8xqf!X7!&hN;u81hWZxOHJ4#GDZG(H0K3IWX+0DZ6+p!>Q8DbTkQ zG#m6E3^pq~6~T8WFojh3O@1^h{8N0?5?lnhd&Pq$1FuB4PmuVSsJ01YMg@oh1$m5u ze7ppZ7b19m1mt%StTK=2#kLvxxQIf$hBoAsV0(3zrr09P`GS^3d~yHLS3SgqfZ_Lx=fB|sSix!=LGgIx0!(B_8$ zl&sdzBY=L2U@d_u3|4De1jI`D>?X*LB;(=;$iGI!;8;ckh%a4$9PcVokRKvsvRdCV z*sSi)%&a4jjrG!A#xpB@E#g%yV+kr(7?pmJw8yOUAOX!7fN>ww_H~sj&{l$GrI$s3 z{&EE?%@jtZZ;pVtS3W;PkR2;MDgyFzh!`Bphyd~LI|cG41$h-dNu|#**sSzIGwY6( zexLEoO6N$tlCFyIM-m*f@v0~s0a^66yaaXS$U@DScI7oMfjV< zEA6TXmq!#~9U=zDG9rrb^#T+j(RElAVI@8Z7Frl=Vxic~x?>UQ7|+DQB*d#IV+mv> zwFxqLOcBMNZ*A+DsDh@Uxa6hr{tjqeqY znSi$`z-bYHpGTbFSVltfmY)IeWv-+ap{c9!$;CwYa*kijnlBW_Y#{>i$%qG6vEf1jJA9xnhli7~*tq zAhk0=Zbu9p!&4v~Ox)KsM}e%sCtUQZXHt~H^GeEJY6j|nwP zpfU<7`ZN;{axGL)M-XZbf}dlsiQ6QB$`tJ~#gYi9-~2aGv5sIn4(x&m;JXnqIF=Cs zWf1ci>?&8lU&1Hp(icYn|FxNQ$1eTd?MQAm@O_9^v4JHJPB(*s`Hx6_%!=m z4NTnMwMD@mP1wl@{yl@uiVqanOd%78h&5M5Ky7^hP&X>5?VRrI5pe&GIKi=u1OTZD z?mh+gulOVr)|C-(e}`Z#fhpQ2EJp;~m4v%V!A0ki+Ww1F#;k3TKxGs_edRWM>g&=K z)G36@+P=YHv$j_VRHkUJ?bD25;}JWvnZsAo~eSJlJJvm9e`Yp9HEi z0_tB7tR*l-JJewjP@hDMiY*E%hAxGAQ4v7h0+cZTwB}X-?c+*OKyN0{6a?2X*sSU# z0m>A{CeO?KY}RuaA#PO=+gmk2N@n6WxRfg8DAKX+A=&u37iNup8(TLJOz09k)mFp$6ZL`M5%4qOE?)G6>%oZnel(B;LGd_6keV%+BFhRaN%dfU^T2BV7i;IMs5 zbC%5pMN#|pfmdS-(76xl(Wod&p8!puxPB9(IrlXV40`raqYlkh&Dw@kxru)0+Q1DE zBv}SyPWo54GIBZ&r}v@O`%}>Tfb%f!QaE9k;Sg_kIP0MZ%Y8WKykbVq-+KDDZW)HR~Q4u z`=;&->MuC&WpMw{V?YC8?&vCj?WMr_G{ohdBF|3GKQ+%j zbxSG>bxQZtI(#E|ivm|FJ;^Y)z6htisdeixlw;TFby3(GbsmBdtl9hgqo7H_nT*?( zHkd31PKb~vkTW8Ts6zXv*Wr@M8U!e91&PoE6olR1I$p7uy)S*tFFjXILOzWJ{vj-c z^AN#Z5DxBE1* z+JSt1_OVT<2bAfno21EKV{C~=8H^tc8E;FDV^uCLdqO={o%IzR#Jj;#e8soXvc&;;^8;s{hlOK`8jy#==mZa>`naG$_^4)+yYGu%12Sj#Jxo^XBPhQM6{_Y=6Q;3mRl z!A*n9hbx3z0Cz9k61Wv`kHS3;_Y~Z3;9h`x3GOwxx8Qcc?T33G?i0Ar;l6@vhC2rr zi_y>%t}omWxJ%%E0(TYMM7S)tX>j>)g>Vbt?uA4QzFg%gZ_8CnFBH92Q2%p8ssHI#Y%R9r>$fG# z66B4`pwYMeqN&WsxD-k~!ZX8c-9~FOY{vD+^!IVo_7-Rfc8S`j28(gU`1E8OG#&;$ zG3kYgQ1?@4#wfEIF}y3{E$*u{6t0rWV?@~sFYb1tTOW|-fN(?0Uqf7vYQGgqM+)Qp zg^5&BRC$CtiV_0T8bB*!XX>y2EY_mkC<==lMVS8jiN>Pt9>+{fLR0Nh%Rc+R3r1e_ zHIOR&!Ju~jfQlP)`pK2lWY-I36*8hwg^)57==nb zjm6EG&?DAczyEK+U}Zz}aC`S`UU_efMjn$nk4ck zRpk9+rB910F101Nyy_@j2hPP{s>-|Mrr6@4?&w%Wl~f(OWO}aM;aiChxMpv0KZpds zrw$|PZ-3a^lIppuFmw(^0$&{O^Tem_cmHfa|6i!$~Z(qOPFnq(_di4&If7RJyR^l8Jj|>0uKwt_u97*tcMVT(!Xb~zh|n93cM|c( z{tg`vT6d+TF|2WqsSFR{5twu$q_q(3IjNpMsJf6p8u)|y3;9EzSM8b**#-{*<{ISj z2HZ<n+Jtn?eZ2|Cu`5tx(|Ui#GV(x-%%J{hI&(1YH>8Ic9$Gmy&z zaQDC!!2MsBA8H`m)KS8YCaQ|02 zBfFT7Nep9QQoiK61otp1DeoPo@XX$PSoFG$Q%b_vSGAjx1J{q#?|tu&RBae^XNUBE zLH}EzD7j+}yZ)_mNDkaIl9@DHt)2@s>%kUGcRln}BNxw(xxpni5cyTXqo8wCjMzzm z1o{K{2Q9zD+@5~W)8}+nXac`K(Gv%q4@?g2rQx|q`jc4wTHP`Ffw#DJqcUMwY*4Yl zHy9sZ!ADN`Q~_Zw$M-=U%kMe1+K{b&sNv#0}R&dp3z?CKVXg;O(kdzK4oox#Wq} zvY@NHT3gad$w!hak90?vr-jf!W$1gDkmDY|pgdn+eO4x(F0_Lrxn^~p(6bxbNdXMy z)aQZ)(@Hj{SuBF|A5~t1w8l`CYqhtfKNJtZoHR_Q6jm3to6Zv~AivXDiEKewRlkh1 zOzP1BeMlyMln)|IeHm!eYctM4$Pqt}Mav|I?t+K_p74w-pKDZPL z?6>CW-E*Pz8k*YPom39JRL-pk+~wSA0f5|{PytqMq{b`E{7DWdU+!jlr}Xtm^ai*Z zC{x+QqDZkc=LTW0H=shkbl?T$=wAtz z$m2v>;B!3Mh%jY^?^;?^buaR^4EH=P4U+qqG)R5{o8wR$EhnA(6Z`TYXcTdj{tu$3 zS34e`!43+HiMGxh{BR`Vh`Wf8s0_Hy*bC7FWTeY>3dpg@p_a2`g6S!kN@OlWBCMnruB z{n~Q;Gjw5?8a(&05K}V4hH8y72q9re0+$1NCX6ZMBX0tMVD}dGe#Npa?_U+x>TUK_ z8{pp}?=JBl6Mv2P>%`wI{&w+qihoG_!{Y1WH;LaSe*9O=IYs;@>0wL*kc;zd`(+ z;vW+KnD{N?C!S=^!^IybevbI_#a~Fj*rk}`kwCQm8BT&={J)U+ie)q0D{$N3-h$f+ zw+F5c?tQq!a7W>ExUb+&!JUD#^n!chaP z{tIqC+yc0J;1>47p@-e6S!k= zU&1xPHN&;RMWNT);d;U)!3}^*fx855B;07Yac~piroi0*mj{;*7e?Np|5!BVf**elu(@aaETSW^1Qj>(+Sa_`}eH7G5~K%X}D%x%Qg3Q!&WPC-m?n`kDh-NscKs znq_$0gedpLSWg;RhHL1G#+ph)O3ywiOUc9@=hxm`6v#SZ>TmX*i2sqZ@F8z&-=#6y zlH|sr-pY?5<#4Qek5qX{YP@FoKw;Uu6A@vEW?-xyjaRtx(T!?$m37TIlU_&)4QA zovv;I0qz>2_p>G~8uLz`K4$>+FmmZU(!0Fvd`3l3G`pVg9aIG_OgjE1ic+%NZgG^p z%0hi_Dhuo>|4=~&c3J6?2kp_G*#XR(F=b!?n$E+*g)kHCz9f)^`iu(-7NGGOTBaL& zV?KFm0e%-#seJyfhp=?QI8Du4FWKJgTR9iD&}KM^|(YmXl$1{)Um)z zGMA^Lz|!d-<1k10T!3%w`-sd6yzgpq_+>sqb4 zXfPi|TL-u1>yyzO9jQW;)=eKs$&baYP0Nrms|!EVLaw=lwj|Jr;6e+U^ot0%FNRb-3yJ4eKOR17dz!v*R_Z(Hn+N z58U6NfB3J?9pNK%oyPY=O8mpdc&H~pEQwxRs8&yFBP=KE*MEHy1uduUKvRU7piOJh zqM$V>n3sxGC4_{b_pr?I`hDXgU;l|w)Y`)1X@G(F)caL?uoXMF#1bqo1Cv>>plcW< z!J5?Dn&2J-iDY-o&`Yj>^$>Tew~C^;B`JCO$0tH2MV#sawKCTZT1GZ&nHcGa>*A!1K$+Hh~xIQ^PsAmv%3 zWM|Y-ng%k-?Pz4>D7}O~DwB;IlfEy>ij`?Ggf1IBIDYgS^jTamXiMT#&}E9`nQcDy#(?ydX+!tAAkFc9o9 zR$NG)P<7nKHW@S5%mAx$O!(Ma$kR98`-YlhK{u9Cs3FVnS{hd1hzew-oc?6)z~-W1 zVk0wTQzhB8!i+oWyRaoYdMZcNg7N~i#`^Jl z^GE&}afKC=@fwdU1Q^TAhk7*MyEsMB-Mhoy*h|Yxbi8!~RI*PpRI<~2>FgGaePhr9 zu+;+VJSU)TyG7esW1024-&k>;f-{63{nV#mW`gb%&C`~)8$=|xW#GHR>M)to62Lcp zyMLig>d1xM>=uL<`V*-oGmMyEJg~o-Jmz5R^0bTIvBSj36u)EEi19Q{*FQPldFWSx z^?cJDl*rF}Vr09#gUV!=+qDn9LEEB%f$U&0_=pzE6T!DLPzlKF(rX;qpxt)xXPd0* z$Ooc29vO+Q99W!)-2#7ZePH%s|LjBQC*4J9K@_SdjTU9YXpwu8Rs(Cd=$DHIyEbzs zA4P*mbBaQuE<^g@7Ub&PWlwMN`~mP$PH)3GKe}en zwlvvwA$yMGSAR<=KlU`+cT5QzF8jGow)v^U{jmSRBHhB0&9J-UisL+sxYpga^7=!XvTIA=PVqpV%}rMeC}zs zJz|Dg^Mw5EqsEStOmCTF;zP!7qDNOkE*+Y{P@dO`dI)5_N3AtkICX?($hSkZIW0-7 z2>IT{dsb48ugX2pH5uJNH9|>ls1cZyBR&y_evVQ;YDbc*HDn3Y)ZxHM(}xg*J=f&x&wl(o z3E=|Yvfl2VXr~czf1_opS>zV><9yB^sg*n#uaoeKlss>QHj9;AAf<0P)E2C?mTB`g z#O4=Fh;{$WlPK)0hdF9;q+wa&b{IF~-dWgfEt* zM3h}c5U^Ln4vxV!7Dr9jQ-NpnEGbs8ZMvQu_8azvLWKa+hza{DgXQXSPc3A;E5Va2 z7QfuRV6yaecCk$`;93RDT$Hc(H%cD9*hRi5+}j-rNBnfKXnXuw6wd4|`}T25GQr%E zj7CRCcMtn6{01iIgRPv~qO}a0hE4rFP!lZtMJoA=VcynJi(@g6}W7C?iBk?MT zC0b5rCR(sU!?fVZR4u7}XoNw%w>6lTDBUEdEd1$!IGb999tiQ%%qa*`|Bf5+AXiUfKIBH@J8>@W9 z_);4%Cz7EDJ-+~QmGkY-+$ejr(`&tFVjZi*NXuUR9Sp)eu(TKV<|e+w_c#ziW5Rp$ z^xNiv%ZB+hPaDpAV3m2EMSW;z<=S2BXr*i6bITzEdkr;C9ltE#1f3`NQsZor-+K+4 zIM`Lti!HJp;bb}V`+iLVg6#;adnQ(u0PXROu2jaIssq#Oyk}yT_9mi?^97!x$8W-P z;cdOZQ;$kmkV&V51v^t^6|)@=>9k}KJ02|f^<0r9S6}*yWjf+<_Y8l6Y2gp&w^JD{ z&Jax)OlFenpAbMO?!JzPkVJ}lK;MY9ER63Z^W+M)ENk=iS5Q)J;ISF)mI8g!r;1v_ zUNc6!RwkIyP!b7IP{S=m6O3M<0#N37#VvSMFTzQ=la%!x-FVe@f|brCY!rE z=JQKo1|9)4JG&{_4a%qg`5yp*aqsDcAIq?`(PR>%VfKh-*__9?u{*CGjarX0Rsq`{9<$2bfPJhD zyPVs&U*^=Yr{mnBC$~KxY|h{gHKrGybUxTJ`Xj8j#{*MHk*}XV`#daU+VrB=H{o=Q ziL;;wYpW*o%{=}2)xqGaR{tohF4$B+5D;Aeqkih(iN{v@ktYvk^}qpK4`XB6e$=lr zPoH>%$A35Br+&d^oT$x7gkfs25{?sL_5NHvkXuR9M)mr}EE=+bwMZ7JGXJ;>t%o%U z&g#?z9hlow~VJOmkUy`u0J=b8CZRsDrw`{I&pGVm|8;!E* zwPzH%Ms4f7DbD$~K<^9b8J9IpT7g~L198GpL!8hXYK~hWC`)hB_G4bCXJ(YU5k)JJ&h2ai zLo*A<52D=DcqAW0Ch%fJOb3GsJ;?o0u;FT8`d5zliL5ja~Z9&&!~$Kh$ej-oQfGVSowhS-oJO z7d0953$;xx4SG5j%Z{MOQK0`B)2O0D7`w&R0zC;*C$s@h+3nZ$$HUTerq5yaAz@GU zfbNGB3>Gz#Tu(#PsVK)dT8WV}YKpup!6CA!C73t+xO=P37={=m=LT;J7rxn{GiQ!c zo>yq>$q3yr=Q(^C_+6kM!I%dJ(TPFm2KZXb@kQ*>^XxPA@u(Z((TY_Z5<+GOi14<_aHU~j@oAeJqdmH@)rb&1xPagr1l_I)4sn?Sy`MQF>iZ$4tDu@*N_Es3#B2nHA`8XzscM&u}f%CG2$PWN!2Q7*ryUVt`32JFs^c+fm1%n+z8bbaFlLX|H~k;(G{?|V z5;BYT405MQF7FxISgv$T*@g3U(R+sFp2D33J0vqk63^dVw<1fm*wrHp2*<&6yFV7P zZydO)$yNmVM!R6MiBm{94!!MnR9y1cFcpyQB13 zR6Fwcu{wR6r_W^{&OL$KGqZJ=&)k8tqM(v6*lnH<9* z&DJsh2R+9$+yb+(?B{w*fi+!Kx4w0R9BciK+#3~`;i`;7K8#8Oq9E(U{_ z;7|8INULARc?6hK6E98G=IL>uBmw7I{L~L`j3C%M1I{h}+)7wVBaPmo|NJ_cHm}xl zVc9d?SqIi9)0XZ$1Zp=M9YOV$aYG;)5k3i`GG|j>0NXh3mp26)aq;F5AOrLvm^I{^ zasC6$15f>6IckR-iV{NOsE1>_5?I+oYg~>`GQyY}3t(Lm;#e>$SmD@#)C|ZpCBS`E z5Td%=wtRj4rU4v2I3Y(ngvzwWz9QUz!}->$p<5EBHTZLZ-|EeZj{?5~646g<4HQ_7 z`){k`vM~*`jyMB82102Z+>0NvBfVuwkAmsQV;b}54H-($g6T8#euvo~`Ec9-SSAk4U` z550@KJ0h58?SZeACph%OjF|bCpIDt`11}j%b7o*RUt-gV0K17o z=@0M~^%#D(EX&68bFdx{)FlL*Ysgsr^*OZU6@h7q5TeR)!2Tk$LNmlb;-z)N-G+ee zy}apxz(W`#`m;8g`-4G5^q-w*=Zr+y*32WLcu2nwSwa4(E^uk{c50qOe&=D$xgCQ? zb8Zu!b1Rrl&AAzdTm3jFHm?B<+}IubpwT{H08_?a;E5T3qYc*>ZZ-Sh7T!O@H3r;I zjQ1{Yvbcw7x%zlJ`fKj7@i{j1*W1jv$%7de5!2_j;lmx~hjR0Sr^!(|jHK9kYJ4;@ zakh+~%uJ@6ai!BU6LtI&wsp~CXnx$`^8x+EgY=l!(U;F}5}D~dBeWGZ?-%DFMW1X- zpBy^I3M;DMr84*85GpwFao))`o3{K!m)4P`1du6oX^YLf7uPs!AQjr|Q$Sj%8vR^% zb*Kiuqb6GJVMwEa!}ODmQa@-b&*Q~X$R7`T>j-!F79*4r>yw_(@%#84_-QQX3_eNb zyD4%6oo95-D=q%z^$?%&R*O2YlKugT{1bE0Q%~buLPBn|ovxB=ErZgFz^J%JnQ=;j zjHAJZCgeEO%Ji_n?U=OlW1rtLP&sltS4V;+tu@|nZ^S&+db*EMDyqj-5n;M_zL z#tkj$)nE}?y%qAXB02LvHvuRy_^jkoUnP ztdD6!zM7gtOir57{OWN^YDkB2~l>+|%|6~fS7reU2` z=f_QzWDR>Gc}StdP$v65jQ-Bk{j(3_^So1yW6_TT&h2^nh~IJy9n)slVh0+R3kAwy z4GCM2gMT*KdOH|xEq5Ps_5SRz)t}oG$f4vPCzwCf24YF4&1;d|F}zNBmmju(_nv(M zlo_1@)J>a{oo>o8+EP3??wHQDy%UGQfz$13D+p<@P9 zT3i#`>dScj_kB&i!p0_e*U`vatMeW`=N_K^9*z;*qaxOZMXbqW8(EHXR>g1%)dlih z(ouAvQP`w%j345Tqqyay=ihM2#cq{R>X(41m<#7&R4RSc;(;z4^)hbojw^wfGwd_6 z19vjSgh*UJJIU6YVQXViEa_G5%gV>Y}wxmc?w{nEyRsZi-+{1eftle|^7^!GepV1R1NPl>EBJ#BG+ z*SlsjCBB2{%{<1Pej0n`Jk_S|X_v`Ic4DpLHd@Qo|~;Mm6UsCmI@*d_%CjO=7e)P?KF;puf5 z*}1Ue=V1Q1eP^B#I#z0ZNy1`ZoK9gaj@!4RMojC z>{(;El>Yvrk>C&dRDB+m54L@}{t)&i!CbQ7`$5lF-Y7*e*ZmN6s;lg~77r@61#Ew2 zJ0f0Q0A_5#8&_5zwxqq=I1rNaegWH){F*2E4rjhto^i^wR~?Pw!0i^j2P>8&u$>KU zd0O1`=pA`_^Fd({wYUJRBW8DkZ}d;&z80tV^Q!=$-Bj-5qCXpx>+*Q*B<8?Nzc*cx z7+jsV1A?5~L|6y52mEV6MD^!=&julw@h8K0{HADZbZ$W9!Y;BKbU@Z`wNXW|CP(mC zJ(I0$j-^h6Att|5hP2>!`fLGKzK7q5wHA0T)h3>g-I=i?oZXSVlmDFKDI&`=q_BNc zhWJ{|>$R#kYORjf-m5wqhe37m!=MB`>ioFna`a*EnZb)Dc+Xt8^yKkBHc9` zVuolC-d@G`tDanfbIj6{OFwci!Ho&>6c10B;7-MXp5H<=g^&aKrUyl~l;o=9Sd%@a z_$NVZRhH^J`*`di7mW*KkHc+5EYe%6K8p%uXGB*AmS$7|(Gbu$vOmN=PcN-!u~okW zMbGA~(zBkg(Vf**AmPAJUy)}_lf${2tXh>P20gMd79KbMX4}*29Hkpk5M!qqlo9g7 zFDO5Rgmu5J?c++*o_@xCt@M{N=`S8HtVz>6bDMvhKaX9elXcJc@SP(9_l#S-2crBd zu+`)*u!T-kIea)}W0|49f%P$^Sk&kd>&d~gX^L#k@YEP2FIXS301>CghRKHh;LwJC zlItAzt_6=7#G|?l%0p|XYe4^l-~s-}?9P=pfT}?;g)9t?v<7U~K@>3!Cw*ewOCgHs zbZVNJ73iKCRZ8q%H|>PE>_n|a9c=TAV7YO;ZNGl&-XARJ2WCN+&H9ZhsDDKp&Vme& zonV77dB48z>z&vz2X8~ckLpu%pbkPh6PdKG%xCRGP^=3JBjfH`tq7R4@7FAX zp%T`4)O-n==6wLSf^indxD^~PS1wZBxTA*iIADWYE^_0l`_=BRc`x`&<6iL5>H1d- z!|w%e`I{UX*u$HFM)5g6=&97`BKsqnbzX4(pwKry@f|x&`H=oq5ywB7J{!R6)@YD0y z=B0!-U+hVv17k}pfs?1PHI?A-@qB3DMxBd^NAL?<~gAzi~a+awq zHamQ@G~6MIyC*gS^YlAE`*ZO4RDL!@CD1@w+5I`Ix250WM0CnKFZtMF2u$sk>H1Ii z$}|RvNk21G6%dAuRpUEWy(lGY@aNiD$aVOI>2)Lk$7pFq`7t{vMITIM|xg!7X?8O0GhlT3-uFc?d%93zsH%8Rkh_gZxt zkG5E^%nr$T?Un@!pit%v^R{$H)b1|*bBX#P@(e{~5Th=rXyThc z(~c5#=T`%5z}LzXl_*-f2v~DsR|(?7=8Smj+dIpFAK!covTZwIW7jdIrDS=s#sB6V z2=TNdXaZ_~@FInv2}F=Hk|4iHkd@N9Ku`RgRo~M^lD6})F z@%B&|vQUOddFuI!^4*1DPoc zAbWTsGlv8LPba^?1)8^LX3#ktEek^K|LFVo&B)DIY;CK2gkJjh_smM5uBZ_)&I z`A>$b0}3fxfXb)C&|A|Nj|R`+Li{QXS8egpJ`)AK!RZ z_3>_b1=u@XvhP3ZiH{CxZ`ct1HhW?#KeFP3*%NnEhboSc9?}y%wpXon-`{3{b$Is=qgzAHD z;7h0v-uj&CgXn$ehH3Ah*Ax}%HyWYR2hsmDXFOO|kA3t;ujVW>uZOdQfs4FJ9aX?9L*ssjfw{H&}iye+_ z>wAOSuzMZIOgvpbuyR<{X*oTz!qZLvXP?)3oZvTIXIx-r%t7}$7Djpc?PkV2Z`-Hq zj1%nU80#v}j zs|Gc=RYl0z3UZu9|9$oVOTfqPd4a%AJoGOfJrm3;z)6UFoml~vO0WNB!8-83&;ljI zJnFYX3l$l>6;P?t~w=iTGz-di2zK8GwDX|^9t;V+uKUh$| zb8{eY4}SQaTNG;ol?cwwiYaj$k!pMk%{RtXtVjvo^k);GWE5L~K890j_6!~9AVF`+X#Fzv{z}H&3rq)*>3*Mr^O(e@VdJ;#O4EPWH{@o@whx`JeUu6ux=*+$b1BYFYy#m;~%Ko#&giKQy8!v@~E

      vraGA|{j?(XB+cpmZ{f-OqmwNI_nI|C(sCOcXLcbjO&UUvz-W6g z_y{FnKbz{FwW`l(s#~reQIQ7gq$!aox_Z}1$qMsUM9D^-v};-IS+O+Mcy^2Ea}<{+ zF?c;twi3W%bPox#KSEBb2KRM*Y>~1>T1bcAR{jwEVBZ$AUY&U|&!JrIo3ddtHAQP!0Y)KSn5f>W$_pj`j zylW|Ae<(a_QQS1q4z3SL|jA9Bld%>bSaW)N0ZGv zMtLUnWU`>O3=@ZXcpmX}E9PfO%b?*%s52blq_@8;zY46*-x5x5UNM12{doISO zpY$y0A(FzkXK5n7{*0n*&7EjoKgQ(?9ts8~^7_TWI$^?#&8)ZYk3^o+R)|@_pm6`1 zKL6geXL{E~LoK7>n zC*P;eaQ!&2G^<;8B}1R!PM0T6a1CehP(Qi{C%H^MC*KNv)g5h4ZC~c2-Pg`Z_!+oUc@yuY%aRxC zviPK=R$8qqRZ6A%tV)s>t5i#-KjN5`jmr>=XB!eD?-mNg0ue=9B!KtHy+oWeXjXTa zf^1rB?pb1fwp_8cjM$)HVXN4dT-yzr5}U4cFecsG&`nL($9<{PZ$_j1i6p1tA%5#e zccF5+QQc;Y41I;+M0!-0ce%^z|;+U*Af-utd(`Zd%E5^#dZW8F35Yqi^Tpk6A3c9ev^i(OaPzO@lX}U z>*zb#muR4mmOAQAcFB+-YkZ0aR{V^{XC)^v+S#y-hx*aIfZe6!L_-*}T<`QDVkWMOFYP*{BXOcX>M|zM! z{?7{NIjMy-gukPEmHa{XUey3fjDU0$Klb1YCHb|NN`jG<&o2OGQ! zOJ!Ae*Kg++WcfMCSBOHg-qY8$Xa$Tzm77o$^K zB*4cjzV*4p8c_PT7r)gny9JcOHE{n{cp2e3G z2#4;Q@NLuTr)R~R*vh#4xbD?H(P{U-g<}^YbXeUx8CVY9y_+8Rv9OtscM99o9|PM$ z1Zf9{t=G=QKXTkI>KwKZoc>{t+g=or2ZIefE;e1m|E_eQoSGJ$$a;!T_&vPQ*oi|A zx?HSK*Aow7R)16p#hRsB2{>S9cmpeOMx$iT2*~!>MKa~0boGfHBVwPpzA)(%AN?%x z6VCjJVt6_Q^xvMT`k6LG(0@V>2aZgXG7`diae<31McJtKs+>yEzfzRXHD9>KHdQZ{ z=8?#QH#6#LX%RnVTV<~I7O0}xr5}2c3E2tF71LaN!~ZCY_oX?VEquM&9zYD2Fic-| zX^;WL6Hht)NJ!;kGyL1#$dXXJM|^k@?KQ7XuJf0xwsIPlTEugin1#ZM>c!?W)H15w z7^^{bTZoWio<=H;yvzMKgH0wnQ`k}%iqY6Yy8|8!Z}$|N?=9RNVc%$x;n-tN{VtWX7+-zH7^*&zjmF)BO!9h_6KIdsO> zr256?IB=WFF(`=Nv2k%q&P>Y8uaMmW%8DUa!iM3$Asb2IKhg4IyRkteQ5Y$M8aXlvb$0>i?adG6pLX@k>I#7qo-qoIkbk-Dtl*PV6@VhJ@}m z-kIFpqXB^KqEDsA(=yj4_4w_b%<(|&HDiV;e(c1_{?upC*x05p-6MLVzX$c zh}rE%i#T|3Kp0fLB(mQo(gSU?$JQ;`-N;ta>;YFz%{RehSbh7GQ09y&siQyk(bSyV z+vODhUU4IQBT8LB0)sCJ@^6+!B}=LYpMr{Afs%xEkmF7u1;u9d!>KIJhCeUE;g~)K zi`{jY7_QwvT3ilq_5G65_hU9&TiTo{A#*Tm>=I4HMwsI2lQ5-M-=n}v$T@*FX)z(^ z=X&)d^g#4g3k|_^^U9|(rVIEKKl_q!i)H&r(tNcJ$?P^tQkgN7Z^>CD{b}0{(e;bL7 zv7usqNx%Bh{UWoo>dRbaF=!jDo9n8bEhTm6uGSn^-5;2B0u1Q|XYM`=?`(1C?Zodb z7Cz7=!Ek!{dX}1Ryrk$L)?Ad)$|BK;K|a_(DkLJ-V(E z`1Dy}b`!JLt#}z*p}^oc3LT+vAOE-X`4;jeGE?m!DNunw39M`<}sgI0i?DfcKFbA2Wd~|xzKre5DZs5yw z8c<>)$xuheB|NAj;}ep@k&#Aw#m8;Ii>sCI^AKWwvk`4JZ+6}t3BSjZihn}G_>}&H zA)gQ!8ph}}Og)onSZmI>4-OT7Usvr^wk#O1P`IBM=e#0u!DFEJ0Q4T-v4{$J zl_%{UDThJH5YT5dUL;RqqfqGVfe)RrK_tx;V24?TJGlaPVB} zyn&3>sD1AN2V{MHi^x6s+UInV!HKMMErZqtPur7)p> zyUO1bZZ!E7dBGl4DT_+|;sg1MGgQy7xtE@c7_eVhd@|#m)zXj_-SjwVT1i7BLpn=i zI1WXJu|JJr^<8Yf+!V#hGqnGkoV`GKbMMd9=e~Fsbp-TP7$I{fd8*dDXsxO(Qg*E_ zTQc@(@u>)fkK|NHY%|xmP&lmv7~3?A4{*+M(nHYs-DEq7L<)|{GZg~<_(4$m!8FISK=C%l{&Kjlr9l#%9 zQ8ucVNuyLF?>?3V8|zy)m;Vb;BtBvb651-3^3Nodx4Zn+Qa(0AmnW3ZmGb_i@;#Z2 zp5E4{7Ym%j6Uy$*plk(Yg(Ap%HI%lci)APq?EKa%Qr0utu~kyx_@u_Q2r!$$rt!B9 z?68H?dC!8DEF}UQs%OOAaFUvlKFmnp@CTxRi;aL5{N;{(P#U>Y8hM5H0+r-Nmqqxo zq)J^8K6dp!LEJGaT`H9Vyl<2YM6pltBgSQg&aUC>lj`Y@J*(>-E%i#Qk4awaV{#`) z96~K{U!g1Q;b0Zck&j7+pzvy`DFXL3Jcz)(5P|!5930{;=+C}{eg|;>A}#!b_tHnn zi+%RBq)J-Mez~sXlS+TGDoLJHYPgCA5wjOMyNBzODr*t{$$DzelFDAIvgAqS8I7mw z$x+lld_hw6Zj5g??^(L~w{28Ek@t;~AzeOK*OU?N7AC?`LRWQ7?H}l)v!6g|@}FjE{e25&!x6cn1TF6T2-+omcakjrnEn z3yAF(PerR#M62li;$B_$=<}bByihD39`9H_o?jT6nq7lyz9oQ)%Y%Ey@CSaY_ufJ~ zYwuCv$70LI$qYHYmus*qzNh2!crT+Rc`{m!SMkvNn|PI;^t7k<8eL@wRhlcLykw~I zRXoVzzky$C@#EH)@I^OYyhT_4w4G82f}`F~ZG)wo(KuOl z)4&+vIr^lOv{QZX|mxg9<0UNzE8r0VSw;gLi<|E1PAf^vO5z#;q6W7T-bnEY42nb5zp^TekDEZU25BY^-|lJ*Xs2Aub0~PkcM1?4Gigz zq;Gz+)OHbR3(r0I{gSeG@VkO^^nVhso^%S^W@?&AI|Io7O(o|h(kG;TzX%#uZYgJO6hEa)8tdZTh*z+fk&3Z z>yXJt9>1T-7VrKK&%pOlqVvf_%S-t(Z~Pft(6>@v3Nr!B9ki9D+gcE9>vvLoqqU~x zWnx>i<>lWxXe$G_GQ7FEtx?go3Z-}r#T(^~5XK?Wpln*l^8jH~KxUMigDBa2X)1&n zvj))WP~Gb1a(j{V_UoTh_LN4+mL^Y*HhF4tlk25eH^xmmjnqV#cMi84+~xuiI@qcL zf9p}My7zT=v^JD=-#5DMH<@$zWVnv^)>2ozgR5c7VjqWJZd&i zjIL%G!i1%aWp?ujd>LF4i$UX$TE3giZc^=t4wq{N>eIHG8<0Hy%*e=3=VB*O0(v-j z#g?8Z0W)HMfo<95&k6Sv%lXyJrM72C5mMQ#cKSW6b+kNSjen;LryBY^tS_3cj!&~bmtS-tJO3uLoHm*-k_IG08fd(P2X!i#EID#6ALs1V zJT%^b-uUmGqEzkuq=C#v`Adb~utz63H%Zq!?O!R=9Mkni?eLU5M{MyOWdE4t}}|z#{N)s0on); z`o9r~E{CL{BxGBSJFH;-OOQXOxps#o_@q9v-nB@2n=ysgFCUkeMb4V)12*}ZZv;)A zx-WF5@96y@8%GJ>fKV7cWJXmc`Wqis)edZ%q-3*0MEX3XK@~0QQ*@-K^;AT0XdUt~ zbK0Fsd>AZhA^gZ%^DYdJFaw(m+hheM*)}_~R05Mc_fN*R56IQ4l)xmn{y}Sur#VH0 z&(c>yEK6@A%W2=&;6xL-TAv<%iN{j2<~Gj$VsL9m-(+kPjZ^noM?v+k(K_#9K4Q`K z*MKs72ekwz)G)@at<#Nde(|iZH?{t5 zL?{`G+}@%fQRG(jwCY}~m-~-(*_w?~^Db~bfiTGq*EfOa`ftv*RSjkm#Yz2NXp+?e zVu4zlT=-8&9OKB`htcojt*HZYlpz&Dv! zG;7i#s&A!x9%hZ(AjJcY=5;EB=|HIWu+%qUj$)A_E*wN{Y?BeXyA7rC$1ZHXDPDJ6DuqrZJjn-i5C#t>M1UX`n}g{8gVOTbT+> zmQhh|-v4d74K1;;dHyPA54ktm<5nwZEFD+cV5JNWe~(}g($#B6Ob^@_4MTXh&YtIr z8G)R9EWLl7>{9czd7UbP`2?RdKV+2DxQfPC@jYR=CAif5G!1QU$2w#ok5pZKOuMQg z4F$$?-iwh}7lpzS@s;d{%VYZf$$J6)MD?NbR)QlEQ$kpEk6VR1sT$yIV1g33^jNSH zV*{KPjCgwt5n5RaU;&{0M9Qq+vB-JMd=vN(|A*AmYus|n)orH}CyvuVMPUNNgbYqw%pE!XZ#hle4QmJ=?#hcUn(a)h^lO%fRRl}owmWb}d1 z$BxWx6T&Z$3)TezUHDyQ?n;n7%rysesA9I_$*jG8JDm*w7cVIPq+c=QQvP;StYN>- z-gk#~gCe^bsYm!4)yxW?Y6kAT#2BA#e*G|B_vi85QggOdew%y(!x*_xj#JFwb<2s9 z?B2h9;JRaDb^$IJ|KESOJR--NEZU{q{0%4oSSrQq#3+ed2zSyqh4eS)})d zY#KU<-DG@gyzA|h9bnog%&KLYs8&X@SK>(Pwb%e-ZP_>G`Cn6=X{-8mP4y49ssiW| zYp&+wwD>`8el<6~I%^|X-%3Pe5apXqd|8?9V9uf_Tm5a^=xfD@ZD0O1%BPe_{By>_ zTjp@bBWe5%OKm$z$J~g#kMxV1mfCJ2y-I2#Z6>`-Y9VFZjJ*Zv0n$69FG;7|g1rQ3 zI_U<|Hqx)EvBMy}d@DB0q>o9D-?r4YlC+(aRfDYrX$Gm9^ryLe|90-lB>juz^mAVv z=^WA}q`jof+GKg4v8vqoml)iB3jJ*3Zb7;2f~a@S%obyyb>&4WrBK3=*x3~klXw;E zTjgp`eRY(=PJ}22yIauMkhem})CG2fP*3UmR;E=E*hc(1M>!$&nQN_Jf!+4MaqQR4 z=W;pE8|W4HZ#i~N-WI~pe73pfqv0-WhMJ81d7-(Vj^sdo+zJ+v%d|KId@b=@aF8iZ;(C zgh^4`#RR^>07s0vqhgz=dAha_cgw9z-?Bp@r%B!)8ABx^mSrlTWX)TMB*O3u-$hJ0 zu_hVDt>Zae)48>ER2xv!&I z684h}wV!akM(SoF^Q6MWM)|=Lq`??J*un+X0?st>OTwE(uFnaM&Lw7E@yii5pR5iD zUHMKm+zKfyvvO@!9>dG%fP$ZM_iSO^#r@HAxLloQ!Htun=FUd&E_Qn(V#~8OOWnzeihP9Q^#1Plr>64e=^A# zZ;_Z*5@HQuKLSb1L~gU$oul zDsV;Mp39XP;68HjHkKQWEPay>^DE&z0QB(>0hBPm@~5TrGNxo3tB9d@oHT}io!Dii zrEw*r!>E%{X+GLJ0dbSImonR8VGz|zX3m(LJ@@0tZ4A)|#^v|sNW8$-D6xc6CJ@S? zivAIe`5}QkV%~r$UVxYIuGs8#|NXfANgM@3dHn^0!+DN8CvTfnj13uu3OoVJOY!rR zm%u-kA7Z$b5C$>P4=}|GP)GYv(>_j*VE%Jz1nXXb3To{}eD>{Cedg}sTduj^@_%B^ zD-W^Q5bLAp6&e@Df4~qc<)mbYG`PX5&_HR*;lE-S(ADQN3Z40dLPmx%Ik&#A@p@>4 z2z!E_2_=svWEx}azr}!lW^sCEsldZDH-0FJ-y!`lJ=aa;D0`_qnv&I^f?;g?59RC# zxsfw9Z5LU$k-Zvw5nV7TzpS5{8~dpM`QoeTsv8OVxt`DP?;Jed-|BMB`x$?uq?)`i z?pRnkz&qR_?rj5RaTA4kHjsoJ6e}^i-maE9BzQnr@U-$s??sf16Y?WfjSQ)=mG>p) zTXUl|jtsBXHN4bl-WaV@nd7ZhAIq8fT8a5ctawiN9*Rdx`CGGDV%gqDQeR@88vE)o;lYU| zbG`QNQZm#mmr$R99IL)` zq|4s~`qIYA_h{p{iDd?OuTW(Mxct}aG7nOw`MM|&l>@!Er~(6Lj^i5Zn&`+6Y%Yow z8SK4R6&XD9*b?)MSdqcaCoxpZc@-^*PE9#C=F2B=ZtM{&d(`}l6=qkc0yo;}(>~B| zQ>`AUsyM7F@7@-L;7F;05oSV_Pi0((ou{q=Up9mf6 z)|Cc18e%dB zrkV+HfJCn3*iI*`Qw9EbYYMV#^_~M3Gbe;;lljRuT}1Q<^AQtNJLa#g*>wQ^q<(@u z?>(b1`#2#^+>PU^J)5N-EX?6L9CZ7rTw>E44LGlMBKj|%P1uRVHD{90JZUL^8-f3y zjqN(cKg4#ON!e^Up>U3flI22<|62WUWWGI{05B`+J+3A0Dng%FXf?>|PzzPN**-0O z026Dfqhmb?OA0tCWG5K!vTl{ueG>u$vA4U21Bs_q9OqvE44xhO$0A zdfw?Dr~EV@$vbhTf1#g#r+=LC69r9Tx0kg*KndjK@;1Dq!il*7&{*62b0I~NB|Ass z5+0Nu@d?Qh>%zbCfOR3hL)=BoK`&57l>fcr@=}8BG2V|v)yB2wY>#txck`upRhxY- zHUqb?2NX%rX`%zBjdn&W2=~zoj2_BRnL&yRKFc4tOEsLtZ~d4q{?T|9TXW3JWP4>0 zG(S-DT|)dT;y@dH4ldawAoj)PG70kM*<&xrpSsgkw+%lvVtLP>U~f*B-_Qt8WJubG zP(6rN$SorwbCBNqSWH*K$##ZNTeh}GsF*xaFI&qC;m=a?g7*9s&eP2(D1E2yD{$0Q zwNuts^-%{5uhhf?DeVg!4x+0`c(4s9rK5gG+&o1D74uQ?6k!)$>)(Zf z-N|VvdT^2x&y6&I#x&v36AL=P87cE=Rae%43jH8D?z8!yZ(0<$WI}~Roy^?PoPuXG z_7Q4I(;7~dDboLM0K#i{M+hwby8zgJb_v#HI~J_ z-AkITYKqGHWBOBEY2w{sp= zia`Y8ILe(gGp?{qE;HAJu_Uhw%KR6Ze79c5}p<%b`%Lg=OWyF zt2z)9h)j~0CVTuJw>A+9MF`ER8R|MZL>7GJZNh5z5WYMEew<+8AGa8*h^RlxsSNIm zOM^vko5zSKImXax6uLna+ndcf0yd$O`^xv$C3H$00a?Q<~fi@97@7Wj^q9> z%d$?!RP8_6#22r2aPw;uvXkI+cinq|sSd=;TxAgr33V)=eoT4y4A9;^crrU9dFCx# z-lVT4!T=4Q3v;kY8_;uiW_q>ZO<+~bcSojIM&CnGCr;Tz7n+sJ3%y z8XhYmmFQI|VWZx810{2rOV+3ge~4k$^c>?hN9e0Q{?Bf+F8*U1kf{jTUnJ&RVRZ`; z*6~`OW8`zYC?*c*pxWs>B$OP@cau)^Xpq0OzC*52UXo@s>A*~%NnobUR$!*H3CsjP zucU^>73P!`Ok+{2f0Z5hMvEk%sKvJ+=0Yi9^0EOQ$kS9{JR}OSS#Z_fskm1sz@=#s zjC9uAqRQ)@5;3TtrS3hpJn7pDB1JbgFqc{=Ym_*QmC6c-yC5>^BEg)wf0u&9vv7?K zg+3qP|A+vLgeucz(pLuUbve9GUrRibv1>t*(6CijtoQ9I*1IWzTV)coe?(0+=bU_N z_~O#flL2$I1?I`3AS%ov2J;~AmsIq&{tIDF{od$4#XFYEl5{!2A?OkoF;Cz8?KXM@ ztM_mTD0f0|J4Ew|Tmeo7kI5H-^SZew5s21tRZg&aFM}+kP(&Pt%eYPA#_Q{FMhZl+ z>u?-C#dpYcI7DAtMT|`1wtGxh-B20B=oTUqG-tCOa5X`ewO6iHLfd{ge&MV%PR!b3E9PF-Gb+^`Eg2|NRb&ShFF0uBBOfwd@RynNmUf=;LYy+ z9}bKh`~AMctdXu-kH(d!)9Q;d<16FEO{|Qf%-G5(%wlEun{t{w*mb~S?Hn1j&*SQ# zEyLdOuS^ep-bL2Ny9f_)_N(1a36{q?%K|8Qe*c4(rP+UTep}T13j1ZvFH_x;I=_2m zeoZ~UW}s+K$MZW~Ad1cJ&{@%eV)tf#N9PlDzsSj8xav+wo#I8WCr)vzGU!X5;+d3) zky1Uyu|MNe%=~IoRV^-bK_laG{pie!?6pRe*{4b9SaHf~(3*$`1&UI|Z;~PW=8VQA z@&w1prr)FaOfK1@LZ_D!Vx{U}-?sQogMGm&j-IbVI5i~4ei#Fx1#&YwW%evU)Fy*RK4saTp-U^x*xRxlo z16nK7+7Bhh(It4cm4mmgH;35 z9(C9M$J=O+qKri@yYmHnP}W5*jK#hJyK$!lOCliT|I7gUU-HbDZXh z*J<>h;|vcWGv2w$z#&|2F#)5M)RN%PM#$w^gLm1H-hXo3(xH;PnS@GuQ`Qc>l~~w& zDOhZ*!3Ws<EA_Cfd=tFDRS+5f zXM~}xOv5&FcZpG7-xXPC-PPHs33ekFzRDo1!z50Ot?c`>ER!3;(Tr7Y_qJ%@=kd|z zo{jPsPIgUn)LwZ`IkJ$We$6-5nrHGU8RWI*>o4L~dJYdmR8}ibFOa2YX5W?}X zPe`7Z|5_WL7aib^a6Ec~R_x>|WY@fpWfvIdm5u*Fd6b))YZuAWaKth@TY%b^ovOH3 zO@TT184_X8!~J*M>{IErm9Y1FW7jpx&Wrl~2Bp3ik(@42L#bGlE*Ms@-e86)moYbndN zj{LVNh2|GVV>v|?MbP__sCG!~m4szaAoy~7FQ*jv`U=*1sd$a9--V6_&(n#yWF99# z7nhWpdmm2JtrR%raN)TX< z-SVb9`1~s`*^dioH1BaTh_-tv`_9_85#`>I68J#AD)JIwHy48mG*lLB;BIt~QOGqvYp#@&0 zKaN^s>KHpd>If2w=2)-`M2u;UMFEX}I(FD>DC{TYeV5gRSVuPFZ{IQcepubw(c;VInJHSY!4ixFL3 z@))`pu79#5g8tUtv-;s9{|Kjc^9ep5J1L0vgUo5uaa?P7Ru1*Jt&Mi}j`1sMmFl}f z-LsA*kil{a(TN$f!kJUq=KSLWK#U&IX;F%lqp*N~bW6aSqBisS#3I((*R6J^)$ZPn zx>a{VtF?($WO+#$SzZlq^I$nrMM0=YEKK{Mulf;~Xq&Ve<3n?ml>bRCQ4%TtEx%F- zt5#&LtVsKF^hinhZ*mUX?ElsdV0Q1$W{%_Q%{kPHeyjQYgzh#%=2_(K;9 zESt;=Xh_Pi9lWw5aj@h)Z2u)n7b-6I+`ge2`$J-}84KquA%@DMOKtc585&f zp78C^iyAK9Vc*1+OH)u6vWQ&S9M(<^pSNO%ZB1G(RMfiYM$yBB`>pc#H;KrC3x&j{ zOpCC`f5z@FmreOUYcWQ)yYWcg)ZFGc5wo2XjzL{eb;uUQ6)P6-7kIRP)z_@hib^}T zUK6QZ-#QlB*@gQn2mCQ&^a2%ec#3dooAFQBonQ{f0h=vvMKCLq>#p+Gy9$YgQg!l- zg+?0JTone!wQ;F1w_UY>hB7i`t<$jynig;e#@nN-nQVvxZ<4YT4?}uBoG5pCp9PZ(a zgWaPvK!Vb|RHUTCf)UYAB+UTdlkqP%e|Mbn6hP8BsocCH`UiYz3Jym3UgM0z0kB)@ zgq4^lfmkp)RtV`5^Fq!GiGNq(EfN1);jdFbwA=#eak71^vU-bQNsg;F50hUm7?|@8 zThmofFJ)7F_pjOvdlc5b5hUaKo-tIEAU;#z=F?&gQf&DpnU8*N?RWz`>}>bFY$ zZ)T|ar|S9=RlVFin)<+n8E`19-P%1N@lW774FmBFoM1pU|LjBbYh;Eje4dY9EvHI8;WD*L}KXfvS1YP;JO6 z#T(w##cxU~Ua5;`sp7ByPL2)4AEWs7R&jAtj<=q#i+_SnkNc@ERM@VH-)$Aop}2K^ z9jQmjp{p!aReoL3#wZJ{dJfIczf{ApNWJ|{xw0?LTcH@>RpsWMLiL4s#(S43Q{#BX zUnZwyJT^Y1%C-wqGWIV}V;FDaj`!8n#WVVSkdm=zXG+Gysa5W-PHD8{>6DD&eHB*5 zzcTorkI87qGd?&$%~m|)iw1=>@r-Ly0n6;EEV$z({wuY_*>8N9{FR}pRnELLrH$FC z8T~Fz8RXrm^YU=&G%VGa7YFQ(dsJVhOQ8EtrmmXK?jpZ47XIdMOKrE3?jkjio+hm% zy+zth`i9i)sin3fNJB|ylP)ApAzeeNCgnZ3)HacHC+P{&v!pO-FX_a;l24h%r13n@ zAU(x%Ex#dt@8b6r(ifyR`TJwiUQ!O0#cNy|5$pNn@lekEfaeA z=wm7La%*#xUf%!3q3GpbblEt)yia9V^s?>P6nc5Heyi!_m)B}~`KiWCEIT`)m;HXB z=-v6cvZj~2cEsrAxSJHJTlG7jm#_VYs(;{fwbnJg{F?d)p_g6mO`(?|U0Ku1Axl!| z<-_`|rkCZVF?zY-Q4N|ZHaNxyp@noIhUglfe7B_X+&7I#2YoE^UIIIBC^ifGv#t;{`P})Ns<@NLL3D42@ao1^{Nwx| zwQ`r-M=i=^iPvLr0>CP?CG%@hd=s$l;$mDrF@_3E-D^HERGMnF+;PP+25FgYOoR;h zmTfkNPI)yVrvVXU#c#UOBcS-}RQTp}3g0GyZ&xcWa=R?}GK|sU!`Iz{tt0`q>+%i_ z+k(rIVFMoYb3l%Kz5+SkcH>risM$UD<1}Olmh7?JHI7;h+Dl6yxksJhZkxMHY8V+R zUR4i$=Tu3Fnt;k9%zpO}?$6_#9+>406l58zw84SXCh}4JeI3o&Sa$E}bi#$BQ-wWb zx{s4aF}6XbXk9v%n<@y^z_gRL;}A0_o(|W@lxAs$&f6`RR`BpiVn`Hl)i>deK`|L#=cw`hmx_| zzENG$d>GQT*_!SAKTQHrwX~P)DuI;fjjbja%z95Ne%&Xhc3n!6-%d6x`CPAVOx-KD z%d}ReanG+0GaB>G-_h@)Y_1{0gAv;e>oUL4u5^56k${WyXCyrm+SLb@4&#ICwI@r) z#giK-K!iPHdZ1tkgA|zHP*U1liQmnziwaL)`8hBZMm;@T@y57t9S$bMAg^%&GNnv} zSlr38kAWGd2PR7mOjg>Vn?fKi1GFJNMB-r>?P#X?r@PezTm2K1^Eg#MvIDcSr7KLd zT=paQr}TOFF9L}RCgG;1(uv~aOvA{5S#l~rQqd!*LCmQ<&b&ak9opFk10J+=ZRy-q zP8-r3kNY@fFmRp>%4v+>M0aSHD{n&f++DVsh>eE;-hD)V z-ZAD{H+S^D(R_sWKat$))!{gj)$uM4s0=@?rRNnmae6ro1CNRJynUfv_PhzW ziw{3-0=t3$?y9{A0}Q#JI^XA>Y3aSzdN8FKel)r=MN!d8*`E@}6PqS415y$AUHnXB zy0Q6;l3oW2?(TCZIBbZ$n=kwCZM(ZD&!uhT%m2MCv*+lRp%w>g*1XzUl?De%BxMgzQZmmLe*R+MX$Wd+8$x!Ia&LoX#9Smd_QuEB6% zD}`nYy=_a&TN{vDEBg3%-Il+;>Ikp++iP065OyN+7OluwRJ)1&TlZ#FcF=y0v{xJ) zms3$}p69`rPL&AS|6sX!7eE!kY#Io{5?22c2Gg1V`m7TSOL>;n5gc;LkaWk0FPB9w8|4WvCf{S z*yZ3PHwS0q-6m)~<0y=*8^hbY72w6#ErBwJF(xYyudI=$jmhFs#&H$6m@Ex{G1_!UxKs|u+*QeVl~=%9Tl}@t__}g1_o)L8ceioxv%dE| zFfPkK(m@2P^MK5I-S=$lm;b=Vu9!(dmqJHiT(&M!(peFEU|f!|Mr`eq`9U#Ht#%sQ zgOhU2A|f?Z!rwaiLq^PL=92@Xi5P(+lw8$$A;7^v8C+csr=8H0qG5`^RPl(jI7@G; zU=^t&Us`jY#ABi2^4h?Dj)Sc!@049`s}-YXo$t(_uu1*P|7j~4X|vbTbUY0Ncs2b@ zLwRMcSzpKS$|;bm&RX_wPdp^K2d+~bT8*MYikp*mKBXN_uvuIT6eTlKpmFIJK#y*=B#2=@qKe|%$idfC-jmcMPwZg%-Q|k*5F4;~khmzFoG>Ze^vfCB?3KT*!oB?7FL${z_kQq&7V(f*` zXF2~xnF~yp6}MTmr-FOa+cTGHFFGK5ohyC-Zi7Iywm$&BWhfz3>;Npq_8zntRKQ;? z#acQmCgfTUzI%cK*wpmjAsa4ww5q>kQH>krq+!I@=QD}OQd7dBAvM8 zCVERS2I0SwO(Y~ifk5eHr*kxxE42g|YwjL>j zIS9Y3k!q6b9~Jf_a;KL6Ra73>rh>&IqU}IFYjzn)d~B>9UA1*W$2OR~3A%?I=O(P= zgWO75B5_)6_$U^u(9v9UIw~AN1K`eEhev^jyTyzf9Y&LOJPmy{0RF@O*~p4u)?6J@ zD>xwsN&#bXaWP`ny+)>7tztSI2O>tM2y`RE%gqPJ#-+Vju(Mz>skG$P+M=ELpS$M? z0F1|*qLh{talhVyfM=oqv(~@^w+IQ;UcLDAB9z9bR~8$;jGi&aX^hO&?%>#?_D^zT ziAVFC6uUh71YZWu)zyodyXLJ3cowm@oPnE4Ab1_0f!V0TmcXV7R#H=2lmGIs&SvMg z>^ogm-ML85Rd;DOTrterA|_mJg%zi-aby|kO)8j^ur`Jx5WI#j1=att-UtmSXN)b)Un`8lHtsw63H4t2jpP z0r1_*@xkaDD62Ovwu{&3all|)Fr1_GNN}-eLH_!gxq7?T#*ztw3&XQW*qfpSMs+<$ zs*%RIcM(vsZXLDoVdh@#eJe*IU!GuR#upL?@yRi-M#5!;{uRIFsjCB18-hiTyeN{e zK+(N{qWgpPh5i+UI$30R7Syc>79%rX<>r^8Uu9VD1?KRxGH2XpBD{oaUOx_{m}6GG zztpDd7n}cl=wVfzih}CTP&GV-NlcnAT4a7$1>BPz!SOl48{C1Qd?KiDFx1?K(8vCd zZ!;HE67(redDI0xwWWG2BWD^f%YrR7CfUvJ(iuBnEsxQWTf#jC{3$47*op~VTWk78 zF?xf#G9+pVMoZq=m^8+dq||<4p(Z+NzIFLd&L8K-*M?(^lS-uRtG$5gPxrM&ql-Z6bH>`m5$&x*QZ@6bMRaxu8OgK=5+)EIB0s73|LH_+-hqI)3xV?K}RcG+k7i zzee|Z**ZFIl&uBS{IZQRb9BeI(DBvgEyvUGvbDP7)ZvQqCOa8Q#I`m%0OR-|Uh!ud zp4A%8$SnJ?Ef)Q(tKx0wyDr6ndxX-O_iY9u^p8(Kh^0l(Q&O#LiypQ7l~orMBMUC7 z1y`ES2hoB>TPUF4HnHFla)zq9QHBDBXJ@czPkzW%TMT~ays$@Tvzh`;x$?)jeOWct zi)_ALwd;s8!ZLts?AE-}DBBtIH88I@jgUKRedyaRg2oqv$9*6AA=2Cs-)@FhIsL6C zR%PTtix)NbsxVics_ZI+wyqU9iX5VYqcIn+k4BGh-67$KgJlG0*a@-+%62o|L6n<{ zUkoZ7eLzf|6|~r z$8JGVW58^R;3M?q0RN{WgITv5>Hd{D{u}Hzydeu5{L zCJ9we@T}|Is@@w1sCP~jgQ|KINBYUK6|Ax_L4AKzZxLE97gh*AuRer3PM*}~+tKPg!{7TMth_JjFY^k#RPW*K%$MmOE@oHXOWHRwW!9H<^PBAev6x#Ri8LC`vl{}zB;ga}?br`ovIgp90 zK_aGZIJ>|e^lWo2@*w5rKWDLd{(FzZbXYR};$T5eF@xnWiL8!GPEM+Ag{%STFOX+T zpAlb6pTBKb9?9Exwl53TXsSDM`ZMHxLf*K1UltByQ?psE`$KJlg_%aFL)(Q^9pxRt ztub08-ZBsgladYcp1x4QwX7gL==^PHmm_^G&s_-p6ts_*xbO36TF6;z7vI@jy8)Ly z%ZUmrXg^H^<1I=sj-;-tIPX2yGGu16SwWQo{MhoRw)wsUpyt!@XZ7{dw>%7u_;Mq@ zoC>q#5(f^7xa`Ue-`$u|RBCCFVy9eM(T^4g>TIhTqI){XHMmx25iBo$^{!?1;l<|H zi>*F4yPi)MNOzJUup67-FoD0=+)Rd+q$ba=TZrfzrI1S$ad|5k+w0xI8{HDJXp3=~ zLxSh_5mF9qZywzS?*Q0q|7@T6yKfs_Mx2WDrZiRUg*+Kg&dFzaAd68is_*bQiM6Bb^~pC?NI zyu(;KY?Gzlh|i*YaD(}K$`;B5Rx^Q27Fm8(JzJ{h9IARnVs!!zlsqz3~ zPP^&!X^a~5;t>7q8SSrI_jgqSeoOzp_#-fTvY5%}fC{b8L1BT>kJtxQl+v>~$HwV> z3JO~7IoZR%h04Y6rMm}Rv};*S_Se{Xa%X1?=JY>xLqH7tacdx3e;Kh-WDffRgPs*R zv)KIgR@r9}(^-;|+IO*m$}hQC!@R5reyGAd{N7+@qU^Wg$BfeSB1gKa4u)qLIhLg$c;NQLY{WDAEqOz+}; zdAN{S$a8dd=X3U_w^D|w_m2VQ!ovrK%TJ@o{B@}F!ReO@&s+||hdnqiz&su9;FLOy z^?Kqk84Z2juf+dRMsPy*#U*M2tIIlv@%lGY#_WCMONR|(|9=NYG%+7#$fMmgGuLye?{k{JikOMclo@(oP|bP?y)!yd@j zxsL89PqyKbQEZygIdI07lu_J|DbQg9H~dEcXAzKo8uRk*NSav&wzS;r)f)~vh3vMW zXOWHQBM~!s+Tt70LZPH6c|j7?Njv3e1z^HX`J~9L zd=3WFRr|6$%NFA~5PJ8$87v?m%CL_;E~y7dF0>3Q#_Ld(1rWrfDRI{1f|^qE zh+l~IGal$T3GLQzOzMBtIeNmXCaTH0#Z3BcQq6_QH92^&ldjRiutd0o8uSAWIMv{l z$yg=$@L0|dF?Sib$I6Sm=Fb+xW({AQWo|wByKl* zfi&&&rM3g4N1O3~+QS`Nq%TN!et{p;SNN3jTl^()c}QLP`$AF^X*;PajPFR2Ev-ws zy=%7&2TWm)Ov1(Ya=ClE^uIo?zAjf*KlMj{*Ae})t+R;y9E!ibp-u7ES^ONDyW{kd z%4W)0zuzn^@7f^;h0oF{wMkCGJDcmOhU{1)~Aff|1^I+ z^!Uz4#hD7s|0;id)ZaRXZ05R@VfvruuS3qx=j@ZUDZunXiD|Ng71QhLxKf4%*p&ReLag~T4Tm9q3`Rga-7Ld;P>%UR>F!}4<$;X<``0MkK znkFm&B<;dqKVNYW{r(`h_yScd`~|%`=daJJ zhrhlV8SrXS(La~kwvvAFucfvhNb~nDwH^5lu~SIX_Hn=M{-w4@NN2TDmh>fQ;`d8! z!@ni|6zQL&Uw%id0n!QNpH2EDX))>F;IDBfz#1Vgxt`Af%C)R!!4HbFzKS1w5tQjw z6_%VWk>MsAPee50(R`now?hA&)BGiF3{%6;(MHYLHtv)jqi+ZD9c7Hs5^A3V9neZC zt{b~a&XZeo4rQ93R1KhgruppV#YxANFYnl4o3U^|%>Fy1FGxR-x&UG(>3mWF=_1lu zBpDRzU%I_Z*KRn(WN;pre{%hx&DI@OKKd`N{{T0QQM$vvZn|R{(k&b#V}=0n@^kly zYB6r#DT-oDlSGSxQXt@45t#Zcgwhg|y!eVmAsUpPf1qXCpm0jrG@jeC%d%<27;24Y zxeYU};4EwkEit{e9z_C zZWOJ}FWMNjebHu8WeQGw=$}$>Qp6v!2Po)!$#;M4dsQc3!8B}b?~Jf?v!#9XwkEVry+l|+f`=(L{0T_o2zavPqpv)s`Vk$ z*!~mr`koa^jnh2E@T}0ng=Va6R*1RP&&3c%=K+y6x55@6W^PrLUmV%moM-rU27|ZA zdMU$%3hB$RttiJXE|+GC%{Oj=)LHgfN!B$I0(M2->xc}@55I^a*H6XYKfZJb{Jkai ziJyqSXY+-hiofSY-a}foo9YL}-+h1o@50{&TtV^^@b{hr0_RV_-;Hd~{~yKQ-og6h)3n!rT=~x1=zIXUn;9$2pP_!{H^=*+EZi}2&Y@YRZSwY*NImUW| zzgWh}1DlXnL(0VOOsp_oHZa-6P(!3~J?KY77upL=6xX#ajzW zzQ(}X^n9#_E99eFip|$B959NwmMzIJ@KL^(k2T7B%N4crZ0pF(ud)qP5i`FnnE6FX z@><^m^uVaz31o(Eb$)-})ljEjS|YHJ3&nZ^jVCEotFZ>g)P2XkP{zSt8@{($xQt7n zmzYY3h5+Hx!(RZ@)HhiC^WlkJ@5-s7GpW zG0Lr?jbbeLb^v?8sEy$md&IZR=w5Cv+1fcGuuqD4;1S{I)L3*Z`h&diN8`iV=MN7b z9x|gJ{kQRS$x^aKa?(z1o{YmYol|R-B6Tw9w7)kBS5XW2dk_*)lOF8d~ znxV)k+2!Vr8H_z)-J_1U0$-Xyr<)KbxL}bREko%^k32u*n3u=#x!qhE;nn8k&M!WjMF6Jl7x(0$tX+6 za7o70gp30>k})kI;|s~SA|YdkWKCI;18!N!#AXTY5TwD zpZcgRE!jTNzXw~~K@v$vjILbE<_z?I>hd4xh8gIA3}2RaFERver&=#|s^VhmKR_Ih zjcl_111KF=sRxcODqu=sHW6=39FNH*U{lq#>eA_GPJYYGBfJxO(&F+@u}w1DxOe(3 zO3P40u zPpvF{2eu$0o=Y~n@5ooMPO#;zo1VW<6`RJc8!f712T8fERdkC&bU3w?hTFL4t{jOa z@rtk>s)&?LY%DEg_9FgC-DS`Ux#t5*WA2RPE>o$2?LVINw&EGCz8=$@@yDJ*^0K^N z#Kzto9eaa&t-l*Jr=L-68cms=JwAKhy5<~pzH9CmEHcf%H;Bti3#OFSX8uaoJ)z+B z>C~9ry~3RH$u10=sn8LC>P`l|7^Boh(`#;wgSRN*s;ZUc6^d#UFrHA2Vz*ky4t_$P zci*=%jgVpL=4ur(Y%;4h9`Qibxigw<-Q+C3se)~wVNL6mB zkE)vJila5pICZgV_PXq#r&qB#kM~Av&~u=?*!*7n^PhK7v&8j0-fHHNH_2yn@&P;`L_V4gSYr$a_|IT7FTRwNIS~BY1EPqo* z@Z4AYYjX1USDh0%LxHqcfq_R6kt{q1ip@ng0tMXe>Z}GWmUpt`O&||CxVGmrw)1*D zW4nxWC8?6Mi1Y?&3Ga6BYj-_k`;6bO`Q1w1Vt%VhFOl9PHIbBD55;-6ZW$R4NB15X znf%M(pVP@NPsAePUuI9yr?U)Xe@?`Ih5jy${@HyM`furzfc`##zC-k%HlG+K2Wr-J ztJ$@`W}Ulc*N62gre}${Tu(jYTrMl3dmkA^yWoGAA=gp*OUx@jeSwP`h?>Jj%=Lm! zbJsl|L=m(c6p}?0EqjJw^qVDSul@Y47f0(7^O!MF%wBRXm~CrbUSeK5jCBTHxgxW< zwAM{4c$={CGl^nLe;Z$r0~dbUdzmi25G-QU~nIM|g|l$cL06hxNZO>}ctE-Zz4r1cS3v3VCCF}OCG7rN&9@e5Slf!t@d>cDncvN}*~SIAHTYjXY~=;! z=~L<*772Jj230I$1;xwFX=cKJH!^qv`+S-!F$?(1Lgo6?W2juz6h-B~#?V%w@}lcO zHl-~`cmq{;ySRavhBfnEg^GFYn?k4?M zJdRRy#V@+?y7|`p`V7zjhksuW|D>!g>V~mZ#)R=~V!ezB=lVlunVW?SPZ(dWy;oed zGuf%c5wC6Es3B>{qBod5zv*hDgt}MV@^Q)WKEa0S-I9JE7em_bON(rw00^bZK)7L5 z#mD`4X)AiCPP-s!ob1(2lfBFr_c03`H(a%Q*(TW}&H-#DTq2EqL=LWx!l~{)A4CJ2 z7M!Gx9>Xa3b*02F@b!_KIwxhB5BY31eUI8I0KbZIsuf>GB^TYaHCN;1@~W32s2Gz6=0~j@AI4Icm=e35!hSM%IsK=iXPz% zWfTyK0hVgt7UIP81gml75vMTNb`hjzdm9*;1Yw2pEdmH}lIrv&%_xDYY9;|+N{o;d zj0KutjL+)K`JCt{LO3X4yg^J`LK0u>2z~C@_a=-%l~@G@)T#rCl-?UKl7Q#F-75ScP@kYqxf!oZQlSM!9(_WLHA%5k*AN zTu0snLR#2%!tYLS5EPg2Z7N<{noXi!ioxB~RY8vD#io5l6%(d%9vI^IjuhK38^tw_G^z*DQajX#`0p$gbJc}_TYa{G+w{KX5=AO>dZ{rj>rlS3ndTzT^2ijT%XFO%)3QqSUQHn5PfYT| z9OIL!j#n_v`{EJlo0zu#Sr*qO^OLg#uDiZcK`Zq3u|VETj8d<5(HY<6o#2Ivn=!71 zO$Yw#XG*$N#!aI_tL5UcJzuMx;JFtO<7_k1HKMhPE&ML7=L*LN2eN{R-g>8SPxdKH zj6*ss>~{1XCXKhz|CgIL3ELqfDZ!nKGz4}TB*74wFA%R^WxJb~Wo5)}g*(ZbtZVmJ z1EYj>Th5e0x#`Q;pr}tA+0w!xt1AA9C@AXp$9?ZWbK>`|P~Yp3^1Xk2_3wXgfUh4X zA@f6=NEp_Aqt4ABBrijxu;H=0)L=8##|k_BLPDWF4C(qaWE38msqR^@Mm64Lh?jCJ zgF))>qDt2?ZtGm}8TV+Tcx`GfGp2Xy7%tAo9Xp208ysUDequY)(7CW4rz@!bnxPgc zpbr($BM?EOl^%8oii(}R>L&w$XZo?Ox^=QDerg}232cB1E)UZgb zJ9;@$dO6_Wy(|-`&fdi*^7grit!nMNwIWBHpxwiT(L>q zQ+er5Vo7Wmo_O$kz&pf>nV#IhO6R~FpnL!@KX34l&;gk0BWrnelTx&6HAA4N6snTw z1iDcIYxt{X(H^fWh$VV+p&EGdU{abv^XGMlK&sgnol? zPTNXorboW$dLJecqj({9Dv%e=e^$c(8+G?}pzM#D-{P`A1cy##cZY9;^NP;75P@}va^*RxLSAbrsB;g9)J#9b*ghFCywi$T&ao47fLk6b8v_in6>{{x3a zq&K`sK;#NM15WN@<54dI(R@rP-}4^aAGBYYj@uU4jIOPpqbp>f1|zLuXWIb&WmJC+ zU@YkRuUASq7ne>|UG(M22u?#!{L4!|~lJ3PaKf5nXoa3!A64ks}g0?rfQ6ldj$ z$^%M{P|vqoC*yb~*I7Nb)o8?+825R=F-G8QyWb|Gxcl}e;T{ZnOd0S1c+X$ z5!#@SPz6cw1gW-GD>U;U~K`%s+dC`LV~x+e&@F{0b@2mMcIf=2An5+Ee~Bu%{N!<9Vrna z6$1J1-fiCIBYC3lQOJb9%o9H~N*VDl6u&bM&b;tllP9j}`J}gb8{Xfz)!Y0=o~T@e z?-%n#_nYzk4DPe0-;bfZ2&8*3PkeVdzAN*@{>MM{Hs6yccHZ%Vw`n=H_&o8zYmkoK z%8$&*Khb#rVY4BwHcczZ3!rO*T4Nr-f$DsYjh8wU&$VmS~8cR-KP2vUm43! z_?7XZRt8YKdhK+10y+wD6-~m-5&n}f8iUt#4NAgzt!?l&UCED+4(6NFg1S;YMjfYs z4yI8Fu>3~}Enmsm&L;7bJ}x`weFLY5u;9-VSB{Y#p|iD3^H>_%gPUa&Zw~i03%PMm ziC)0pUy;L2x&B?ixxP|!t@6v2CldNF*5#wS4`jkO)r4~c5?)4Ky@8uFs}YY^^W)#> zaW)=tE^y->DM5hKOR+;1MQ&kA;2AYa7Day0LHJ@4_t?auW{^!fe5^YZY8;My1A+Yy z?KBQs8n$_xj`8DN6#E4~{_UTD&IW$m+#k?ci^t;cfCc@u5I(vZ`sSmCZ8Bsd{K{r+X?F<#@2MRd24^{ znB-&%!fC5}iE+`I%BU&uvDh~9Ggqz&5XU}pcvzTz)qAx5 z9*ztg>UAtLKzv@&C*cW*M-XdW~j)$GV;QJicZSNz(Kb5 z;=U&Yq#PS6a-NJF8j!M7Mh13sos8@ikn%Md8Q9IeGIBsb%9c>s&Aqvuf!UKnMP|#$ z!2xC7DkB3&zCuO@j?&AaBKOM3VF6`&WMp7Bt?}H>z{n&S8QA!285!93;!xR3LuG#| zRAiNm4D92sa@71>t^#XA!m{e1vcW;S@p) zw#o|;#vxoW3j8g?YJ|Aa;NLFZWXMFAk1!m+CnDq{6eFxepmdKQP`a1!U4`%|!gmN> zga?tP2H|sr69`76TZ|BoevL+$f-n>HE<|u3R3bcy@Bz}4BRq!iPlPWJ!jblSe7}kJ z8WF+#H~3?#<=)F7w7|xH*QF|d{PMNDYx?oNRWgRBS#r#8${0V6`Q0fx@uBk2sTVL5 z`f<#oWDM^{vYg^{&gGZpxenzVn9OPXYF}9SIBns6EnF{2ABIj@^1Bj@c!!WNyJZY- z{4(ZHhnQ<+?SAFlD%n<6?P+MDEq=V-P0?$uoA2N&^3%VEK8iZRB)*!4xcn0B3 zgzX3i5WYibM~KD9Cm@VLn1*0Op!vy*hl;6EGX$$k)wzsjS&L+E{a$pjn?WTq)4Tcz zUAv~t`Wq=#c6Coym6GX{A4-(=XqMT?r03A3?7M_@DdU56DRrUN+!kmxvPPvtDBDA6 zRNk~))2MW)8kK*M8kIIN`SAX>uk<&d? zhV_?T@YBh>4v~W~O6h%omsUf%z2scQk*W?v_N;=9OV1pm)FX(q)_!ml%jsFE#6qry znOKo**WG`WXATslb`bOHyPpP^Wa1L*f>7!mxcrXJ5JIVUsIMSeMQ$8-9S0MLk-&Yg zp)PaNjv`zcCqg)G=KF6{DR_U!Kr)>1^s|(G2GDbQ23X3r@xwq%*%NqB9PNBXh`b(z zZd_8b=&tHXZpc)j+_Q#+5IH1xhWr`#ofsP511ChS>_jw)p5U~OROk4TKj+F8gK|m7 zdt&{P!T0+mmhwmv7i5@8>MI4Tl9qct3^7n~2#7O6+chw1%nl@wDQQ9IQ^PaF^K&aR zbROw-mGno!(WNT$aDW+I>soojK3~}btrA@4zSn!vo{MUu>mAeSI&45{94K@H4+)POi8FO9@}UtbEk_b~?=y3c|gsS~;1p z4D&cW>B}Q=?YGU;+#PyfE#f{G+5jaj+@VMJ1MenFvYZdl-(1&RT;1@AQIwGNlav?Y z^y-A1x(>(xP(M0>3XzdDL);mMaz*LS$eD8p#15G}dJtL(kBT*HBJn#wQgS@4}ciSN!i@ z$Xr&wnZ7LA>v&o0-NHx(ruuLiyW5>}NWAs$$Kinf6Y?OB%Sn_B6t@<(eXfjk+cTac z54B&Q)Z*MNPZ*2i^Km>yf<$-52av3<6_?LJGaTz_F5{I2YcZXUb@}3vf!C9~Pl+yL=1zugXoPBH)6>!0ohi^LtFjnE zAED7Gs=3g zW8stZHRdD8izAWk3lt?)YBqr4LgtMzbdqB!djLPva7k#{Rd~?ss|w?kS~_&Xy%h~& z6}ghtV|o`i^#EkBMwp@EX+Q?v0dQMuV*t@l5k&hO*b>yV)|x`UfZn21IkJ>Rp>Dna zT&&*x78FI>mBp$nI~?K$>4WK-a-nBXKi*BUUrl#sjAQkZJ9cO~E`LOi?gEp~C$ML` zKp@EuJ&)mNdeAv5)el9VzCOjB;dZmK%-Y0CX_@iOVIYSb?KGz4n@IfJAo{11K-NBt z6jO0X>?Q}2bIseQn2oSvj)F;@QsbIo^4~Fdb1<=|Y4Kf+0BQ{UXe z0%nvqo)iXJj$jDXW9LxA%}35vhoLC4EG(s!XeL5XfqGWIyT3nws`WP!-71HO4F2qQ zX#IsoD4k{yy+mURL3M-3+egdG@xOT7477sBFY$Qi$Gqrzs?=To3nX=?=X(6TZItw% z8cgInJ#qHA|CjqG;w;v64o5ey424g>((#CPd1nq_%^{=;QQnzxSlk_c@tc!ZGs)h5x8xK zt&UXBfnjH7_zBzVGQ0~OKi2TT%Iw_%;Yj5VDK2+gsrO3>;V!4V|3Skn@Tm%PaQJJ=U_O;T0n-r%kSNrL_<%OVD2cdh zE=iOw($L9Vp9W6z)mROLYzF`GCY>At*^E@O;oB7KD&KL|Xjsyh?wD;4U)^Rfv>29C z^9TUAP&^Yu&(Fn+r~z!wl-vzG^qNVq0l7+#dl!uocOg#W4e49rBlt|kE%TrZLfy>B zqhli6mtzGZ(hkgF6ZVh6i%10LUmTU^JYgjWTp5$n3j65`_@ul}`39=n*e1c=$XgKs zRZ6WRq1qD;VkEA(0-Y#cHxMS734@?1w2y%AXiM|O{2pT)`aQ6^cWI0m*6VAp(vR3F zT!6V(?O2ta(qKT0otK2Y-LfvNh;tTKphHriPOJ@0@Mn9$G&Cz zF^I|?aZThOH(yknZI3Kn$l;fu>l_U6PzPS9o({$L4(Jyk{j$|+oRNwsb zpFn{j-#lCc8ZzXY`Bk00$$PD{(w4v8*&Fvs%xlPcdO!g^^qaqT`o@yoS)QJq<~a?f zBy>Hm$3NN0n|tp7IEQTYpRR`eT*x;U0Wd2%zlZr>5IKWm=O!nr=erwBhFbj{vm zxCr42gaU-y5fp^y5#C4m0^w(b3#M-}3`3ZVP@jQ#gs{v_h8_rs2v;H8i10ANe57$8 zyp89b2oK=-AiiI~_X&K*qTW#mwfOxN!YPCq_`L+78}RK&gbaitguftYn*{a;WiITw z`$LK9CtNy!i`PNlecJ*&U%(Qu%$VrCPzh$jMfut_w;d!y$_@>mTkd@Z7!f$V|CNyM zia%Sw@`B)Mx)+f)vG^(-p=T#4)j;TnB|@KWYAQwwrEAl5obY%hU^P3wDVKjWeTsE} zUsL$kLBKvCa;W5hwz{BoUu!jd4V(e30N#|i(kSv!Y;Nk!slS?v6`5^qir`<94ome~ znODQ%HJrDF^1erIa?MRd^xDLa$jdePVem(gmO4aAov_zA0|-FNHuA4aEY#WfrpNf# z(ru@`O@y0mLc~g}O$sx!E|pk2hYFf)YF=s+)6rY1hh9Gc)|!y|#p>&;;7{d05@*xv zRqAUpFs9s>+QiJ4Rofc8{-^r71-*q&Az}cp3@c`7xJb|Hh9Q-yqvx`7x>o^xIb1#8385z0J#P;=BA8 zyv={Mi8owT-sVL%u`_I^x4Fv8WGV(;NZ+0iGQUK2XxiX$OND4{J2u zU)QwfY%)a7-el;GFaRM5Aq8O~!gPeI5Q-2=5F7}l2o(rx5Y{0)g|L3+Cc}#eA0r$_ z_yJ+SEZ`4>s}VLL&1(pE;@O3;70-|2y9(dW;JX^35uqNx_aYoX@Zxt8+SZ6?fzX2B zK`;Pk5dI;3+z8gk9hG|?`naVy#gbGtYnzTA3#xjR9(RazbcZ5t(V8Zd|8Ino2uBc3 zBlJQI6#VfY>L-0&sS>>Ye422hUfp`CZc7TE-L68`&lCK4l0W0tQjJOcnaZE@__LTlSMX;Uf3D@vjr{o z=+Gftg>VhRLWD&Kw<0V-Sb?w#p$wrCVGY6~2)&Gv>ayfcEL_X32Tz=0yLQ@gziP&HHda%B+x^c6Yv|noW;($h6NZWG4@Sjo2z9 z*4o5CCpPkQcp@R|A-ok&@T;a}fK;2XHUM)r+Jt#&s4e{-u=p^gr)~K%ayeWt7Rt<* zbLMbzQjuWflF9D~NPewMekmt^|KC1#?s_%(%z)&hW%3A4p75NHzbjLd_eXM- z$Gb$1(l6QE(T{n9UGO@HhIDGHoI`O)zI}_|7QH4JLDlaK_T#5z4SK{!Z?Xhbb8cf3 z>)!~9c>I~5EIXeKifH;)POo0*ip%8G=@F5sK@oo)9~AL$aF(*qg9@D*EoVwEbnu@f zRO%7kX1&03sYmQxEoV!Q_~sY673&d&!43O$QA1!E_XVdIIr5vp6n$?B$})UYP(*QX zMC7KRLH;awULFpfhUZks)0{ z#vx=O%tN>t;SK}^VOl=u4TSXw+Yo9HP9cO{waIW9!g{261;K`AJHmT-eh}Y#@cjh7 zcO#reXvFUy5yF7GMxgEm2tDweh;S)FCPD!M?diaOc{bG^&L~zr2Sh-&(-U#_2ftic zqs}&qeT=g$)-jTvlG1kA6N9CqnkES3;SX2wnL$b`q`mk-=LZ_)Aio*k#z1Si0FG+l zX1jj%5maK4KEPK0f@iu|_pbZ8Ko`Qs{L0l>)8}H#3pD z2@*;{ho*zl$L9(efSyB+JM{l{_4QDkyf%n=ZE{vZT(S-G%%Po~i#hs%*KpRDFeGVn zPg=^2*cav(!Jj0}%KRcYm+Uw_WbezzQ*m>=w9FvQz1ZhP;p{|LVUrgJ)k;HQ(^jNBd$Su9O;%)PFh_Ou`ES4dBG%0$&Nsl&Md zE>&k!T(X~Ly`HW(S+&BkSK5z`9iawC8xIrwG5zN8_#qs7FvjCJzSZ&2%6l{S_mp>` z9N**k_8(tfO@P-Zz-!qFia)O2q^LEymL(K7ShvB*-2vl(Q601A91Y=@Fx952wvX z;+4N+J|+#9^KluzwfS}5Zi0QyY^}870y=70_8}T5b!a+wM<5OL`TTYHD9}UImtqv} zo(JCram6=)3@NS;gF)#+_=S>oZa|Kav|MUwNNa5(4-7D7CeXqo-{zidDuDm7S0KQX zbz92T0z|ya;s4Q zR!$BZKPAl3pX$9yt+!r$^}!jkYL6%?e9cJy2jGl0aKk|B;UDE2?PzJR&mU^lmrhU2 z@@{aWXeeSoa-KqRz6yuAwU$AKAMoQR1pbq5J9&<5JU`3y0*3{hRjoBF=^k)arMuuQ zu!+}S)`!rZLfv?(Rt{hKglf?nc%%z!C;1p{HBQPwdeVj zV@fmz3;^Lz*j&37v}IiDV-uF{N;9^IL_iP#cJVH+ z7l1^vKLFAfX$S1_W2#hD3Y_Tg5`$i1*CpRIhbs%(&$qT;&}gM)E1fVqw_9<1Gb)tl$RI(c)o2dC!|UB9H|gWMvs=O&=vBQdhg^NB$fgrhYrmeZ zLfu@tJKI{m!#&yKSGr1exEHsC{|JHLv=+EewUj-A>XcYsOW2Z>t7&CnQ7QMTHd;eN z*l0aakpdg7{ret+xV+uPDKU0ak(tZUN;m-S3y1xhm6yTuBq=|G5jQBZgf%F^buT4L zJAfM^z|+vihE|oAFy_P(lWGzwuA(pCzq4v#>FjWr>MLlZLJsn{lty=AHLD9nQd6iy4?v^Fz{s9@JHk;r*_wD8orVt*hZw`ySEr zgZFru^_4$2kAKpO4G=1%SlD7Ceo^n4-1dyH+)H9w;I;Z27_V)`7tWvHS1gZi7@hHE zJFUJRJf-S{GWwKrtDJ_}b;qG2Bte8NT!mo825CG%d6NvUAuQ|DQDcO1@*WhV{KaS| zoOZW$?-2mJ@hA?Du)~1q9Y4a42(MrO z=r26nU<`+MXL{2A!u)?wthN(NAcs7U6>Acf$6-V#+{hz37GKyVuvrwx#c0CO(g6@; z4HyJ_)joLLA3^;y8V#DaX>B7>-=GTKpN4&*L2)-fD1OdhSzAThk!*?lP% z!!PUG^@E;WTO#!A+J>-|1H1EySRM}?al_4wBd*1lk9I3wqYJ$G5amC8fhVp&k|_xM zXEgGHBl;4wV$V<274FEAyqHbgGg$-Tc|I5pxy7+lDQw*~(eR0eDBcgCQ=wDUBY;lz zBQyQ6jjB(la>e_2<{=KivW!sg`I=#J-(gbep+3R-y&tnx4WC$I@5Ii*#xUwWHQaJ9 zo%Rw|{S%K^JiZFVt|xfyW3oCpHe=(GNu4-t;{PC1s~r(zZo)C54kF_Y{!O3!jkAu(odDg^p1Rb49?p znNkm8laAHPAI5fGEy9ah_xd(5&g!_I{H9yQ%Al;liPe$s00ul%81Li`@+Eo$sZRv( z#E$?xKh;i|2m0EYR%FOh3AiF~49^=Q3%K^87-4z^gFr{?lqwgv zgjS%&w0e8Dk{gP%uUwCt3-G~rA*7vI8Vgetv-n$6HSrV8F$Exvgp+?9Fx zD}k-#tvH{;^JNIT@Ouw_pF%L0=?@o$^S9rJsf*tavpFKtx8@{&*=wJ+ZZ8U0x8N^l z_}1+q!}1A|b+>IG9*4H*R{L=Bq?ZB6!%vNiWN(d^$T$EXvzzu0h^Zue&MfV-d$lTu zp1Vr*2voO)a}2YI{eX5!B=jZ7t$owK1tiR+OsG;jDfOc-mS4eXu{ZXjtQ9h=bOUG% zATQ{AwOS0a6#zd>Rh4A)Gu;mGs@WIBiszptma}{ZtokOKCk(e^7aD|}REj>ByH=-w z=zr`1EPEm+LXoPN6I6&s_jkHefj)+3BD%6L^J%OG@|J6^TmUT(_NyC-($3~rSGpw{ z|HXWC*e9eSP0}Al>qS^6h4W;GnX?HJ=&(BTR1@}A65-uOTtenNjOQSD*$86`flceN zF4=bR6ts1Lcgvjb_8=)-ADO=79O=U$R-)u&XeApFMU7DXE;on~XU~6X zs>zU!=9NDuQN+wone!>Dls``l=8@>EwUisZvll6u(ud@A=;7A0=TXq&I84qsBz2!V zX?N)IL?h{(E!41J(G&BJ?EjJcO*4MHnZ}Lvxgb{pr=-sU;_Vl)ux02++T!csN1(64 zBrT)Nx}JKc5FXlC3wXY(rL2iYZkGuAJBTPy)Y$v(gup|Rj|-tr!MgD5a@~S!l!)ov zBFFl*VcYoUPxuK3mHFZu+^>rz&hj2g@?Y^A33w%)pM3GU^+~PtQjS=7xr!DXt1#X_ z9o|9I^KhT)_-i8p3kTS-Hw|fn($D`S&g23YQ70s` zYQ$z$1dm0!d`cn^jbH4&1WGo2mk01tlmhUfgMgAg3VVym;OLDntHEv+7r(+oueZ1D~h=e?WhxcjU8(?^cn zh_R>_cdiR2NIXQ4fCiQXNzVX+L_5kbP99)0hXIeBL93%F>6o=`mZofu=heS zPjNAhxAA!6!&IWsT@<;ddIsvZpBS3 zxY2<33VTt3h<@bk@YX2-+%A$~U*m(d!Sst^&2FZ}O<<-XM<2M+dY7uks{YbBCMuMp z-4`~h%hr*|N55UA^ag``1xEJZmo$OpS{mT*b2`;m#x*%eI!Q;L{jvY)ivtgV;|n=$ z2dM=QaF!+w?QXw@3{c=rU<%eZ#)GZtaDvhC_+ImaKnj4k#k9;t5ZDG`=lYI(?L=@< z&1K4!zNsq|d24_7%zgXI5x@ea|XHMJK{H9J@Z+`Gba_i;iWZyax3o27M z!cx{so!%q zP#tQ2aFg<`A0a+hR!hGhrIs>5&5r2A2LOQjtx z{U5aSt|^6F9lRk}Xe>VXdr0kqlLbcT4{%eMnjQNp*%>;_^HmOQKKLFYKJt)5eCzdU zY#Z=Jn|nD#OG|4sl64SBR@I`BY!_pf+aS|fcNfca*5Jz~wmbmTtFot;D_63$Jo{|~qMRQgpo2J+hbQrx{VPUBQ@JBNM<`d1XFAgF&NP^U+I&NTW<%IigKIlpMx*2fVS#x*euBHO=%xGvgF4qJU=XQV)D@>qHK=}5=)ReXjw_gA& z5EQYjgMb3?t)26+?!vow^E!JIU%KwXOZf3Bf&^%PNCt#cB)y^kc%}XfTt8+T*x|dx z-bx)cy>%AU^hFb+rdhxgtNJi%x`I*D>vcbhLN!ewNc@hpIIgcahn%TJv}8xPzh zCflIVdstR*KLm^8)qLfqs;0)a&TiZSI`%zxkr%S!HP9yKiwn~ZEa@xnLS^?RrN59- zwX}`K*4()R3^u$z7xO&Sej!B5Gu7h0hx=y_>UREMbd;WhoKWeB0+oC~HvpBaSHS8F z4Q1-#hrPdcVvqB!b!+*=zM5!aX?+qaiS~0Uy|F66<=DQ7mPgifa#3-F7#bCz5YF-Vg2EQ+lcPxX}YpwHFlWJGhb>vGhUZYh69eHW*_dwiI> zmY_+2ceEbB3t;irEZ6B0OIaCS<)d-G#-AV@a2p=OEU2__UT2cN)~Tja9F9SrSj}>{ zBs}hcA>i4wgz;(MmOn5F)RmQ3iOONkO?n_ggTFOFHQ>+3%W6bl2i=X&HG)sQZz{qW zY99AK$n*GuK9AJnG@NbH?68ZFbEq*&hjQsKWsLqYr3Ky!Qd(dliqqD!`uOn8C&}4( zJcCp*m>G{PF^Je>jLL7NNuNXJ(e>h`9*olA$;vDyA&MvbvzZ!dPo?-_TKua+)XByv z1Sb0Z^)%66IQ+4E+QprXJ!4SDpEv2n@Oi)r6eIC3T?-V5LNPxoeQ;z;X!>St2m0n+ zfBL3hc@TXQC2P};PME%FeVkjM(l^Cd{eMB<4A$EpNZ;Vh$B({2+kNy+QJJspOyA6w z?bO=N^v!q~7f9a>3Fy$H`Apv|?8P&FR{F-b7|tOn2ve^>O9SbO$-|;1Nz_L>2_kym zqld7sJozZ)qv}_=(f&rH0E>0U9nuU*uRz z+rr`6G2gOzuVwQWmW(g?q1uwMxAb(lBewJxqr)_2N3*r`moWRO@p!w_vbokWrJf|Y zbDh>dzYSu<0m}CVow-<)UtWMW%CZplzo-Q#~eYN z58#f->gMq3rf}!caOdIhilJ${mLxb#8x!n(D|c0XQgt-E^vLn3Lsf^v#~g^-S9&yI z%*PeIaN8tMo=*Dl1KJDuof++g+F<8*m0C9A7RRH%hQqUdmLq=Dbr|gbF@Rrj)aHH=*lA>2NYtz z@NqwtUEqO=_z9j1jED0C`M3L`z_q|5E|5K(@1APqYlmu?w?K=hOKqUvasLV?;;6?J z?{iT$-^y2-l3hzA+z?+v-+IK*zhaPb$dg_-*b1@D zAn6|>N=a5$dMpK1B?eY(brCQQk=S{)YR=GBD+aG8fw34+UD@R!QI5V2OuBpFe z`?3Dxp>^ZVu)62smaLP&2#gLqj1GpQ6p0Q9=;Hzr5aAE_O1a!%k66(3P3~#0KQhIX z^7|O~gZ>T#nZmiZo|XSt2lGY!=&*HAHb|&9L7bd@_urbLOO?hQh~0;1sBCL1^WL^ z0QBDN86GGej3NNcPCE5Pza1B0qXs|&vQN@|Z7p`>1Tj>EW#Ls&9MTXi^;-I`x5 z4kHlr-QR`_8c8Eku9{k9J1SApMzFYx#~b>g%8%GMON`>zRolF!i{h)cXT}-pGRYRf zP?wn?zY^)IGBYXhWL<=5)HB8yQ(Y#kjtz#2%p_%dU1l;p*JX~CU#ap7o?$66U4GH7 zg|mR+~mfz;wza4H;Mw+YJ!Z0D^3gzFZ z9s5AKX(U-*f^+Xv{C7kZujvPOXx9ET1DJjcAQr>e4S;z?0-a}s-Rks=v`0HV7HF4x zVjT%)jp5&f5xGXq@%n4cu!gfsMUaE9(!6A!!o2K#5H4f1BMO4pT?Da{ z#LT$=J%7+s^D=iR^3h^**BXw$2Z7LZc3gK+9 za%Dp0g2cLr)RDM0ATyT+xGwW5`8AKe%8;|{AUZRdboV_!qcg=wt9Qn-8Sc-21%)48 zrRI;WhdR-ayA1}Iu=S3v2l1O!-Pi{<$6oKRc(>g(djd5u5nCD74;D{6wgDAg5g8p9 zJZ=P(Xt~lL+b()R5UOPKcfmF9f&^D)d|kvCy|5;?I7nfM?p;v-bRt|&xEjf zfL=rSj0c&_T2Pau?b=#@aV+FrYEn`#HAM1f+#x#ztKEzQ*YY??e$_=%w>E~uF=kK` zVL_6BF>z%j5XfXD0xU~!8dX)11ptky%aW)pOQNzYMrECp!gtHphk^CLo*k+hN?_SM zH_5U&XOt^z0xm#295dv?Mz1%z-gS3+U1TY#L&~y-dlDJxeAPw+zN!zUCsowL?Vsf|?i&I<)mb{G`4fB0GW5jF@a- zq8AuQdv^d*xrK&TIghqQ*E(0m7@$gxWsqqCHETfGO?MQjA_!;uDV2_9r2yg>9>OJ?AlE~rURr&Pjg zfB*UH6u-g$G^1y;7`KdIHqn*YAJfP%`zE%7y3BZ5Po;|zt12?F@U3;3Nfe=yF)9TU zYN3OmvSR3+w9u`g7P^`M(isdM=#gcqSfa}839Ap6dcCLWBJ3lcF-F%rSDFU^cZVd0 z9DSU>khk-z>A;wA;6~(O*aFnJXO9)HzYmwZa_qIy(ct|zj1QyBUJ#M;n#TCV1dmTA z18{ashXG*TkhYTq*D~yf$1viZf|08b2*bH(6cGRmYWfGS-{0DwOgr@_f%h}a`nmVB zIJuvp(f^m;657j1axEK$$*zki!y;8-h=72YR=Gz@Odvl=pRzzngGy!EDf>SRiQ`j4Z z4((#y&A6&{B}^OGFpF3SSUh;dYKmrsFEW2qISVXQB^K^S`W6QPv;o>hBCrNt zzV^-Ty#F%&d|!I>?CH?y#ihPfDD}?ZRKfihU3}>i;3M-~>A^XRBU`z@yKr}|I)BAB z(JeTq?5}vr799<7B1v*d{Q{S$R}q<{lC4u zq5tLb#{HMe%lKlYyx%tr|X_sl`&idDTxHfn{O+Cn^L zJzj_sXx_=|>Iv!yet@^FZqvUA+2^WRQ^izdB^@^_q(IqRq|#6lCMNtz3UG)Vj|&T= z((6E=B?cHPFBIeTf(8?rje>&7Y+Hf26v}?^e+X-B|+L<(4KjEd=! z%n6VT=86#?KjS4bOO8W8|C7Z>@Vl;!`b53|UBrjC_zioPki%XVv6#o4Nlv|QT7PJO z;`|0EN&Jzjf`0-lJd0h5zLrElPj&&-b5nekQnx)TE}||=GGSQ>G_Q48JiT?1>oE;b z+z2t73{U!WCW|vYv`HB1b&R61OX@g$G{d9CLzodCSZdS3@TnJ=AYMU%+W4SIDRC%? z6wj9sfd=*o?BgLY0K`gyp$vo-72fsYibbK`KD3M57d*G>dPo*W(LQA_W_Z6cB^S(g z(hx6v8de|f3V{i($jMc~I$%Ci#joI)wf0U%1F?n-R6ogia<#=aUM%_#9U=6uZtRwl zITp|oYmnsLB}C_~o^2%qH+@R=u~GYzhnyr(j;U@8%Vp?KzVY4WrWWH^t9GQh7vN&C5)jGOMFZ zNdRtvvQ5Hd=#_iYa@xURjP0heT?ewkVbEz)N|k$N97LlTwJH1E*nGqD>&Q06WN}Y7O>s?bPy5XA6V4H9rJ{cdo3HYD68K$x3X{a+-SnQ? zZ)(kmqeI?Kg$^XfBf(yb;z$6FxUHC=1|mHO_TpKvXRZq`Bf;LC39hAyx;dyla`j9r z+2Kiv9>jWRj=p}8H!Z^oga08&Bl*pR)Nzf#)Ek>DzPD=Yp*JzL_4G>RW<^Z^Ue+cV z@Z^{ORXu+%oX_WR_B`rNy>N!iPU}a{p9=r#TK!l&A#s@s?-Rtcov%lLT7iyD09fe~ z>f(h3#cL>~AHmulTSkQdm|orRvq^C@s0RNic2-HnIg*QGy! zT3yk0Q!GI|wO`5~9Whh=D@{lbuhptuXYo~wg~iooiU${A%aC;zsddJ4opFA3CQ_Xl z@$Q&`+f5Oej07|+PsDOdAi#?cZy@2;c2ggNZ@y{2#O8pC3QFdQepI=-PtH~`5|zSh z+=>+!Q!-FILdYYun4*7YVv4}cB*CWSny`QD`!2;cfqg`pF0oC>6^C~F?EH@BJKZDCay|+N)pA*7|gneX^>v%r$Rp57*JlaSm{?DKt4oyLqs1gFOJLe z6{Ie}!1Z%6ijzdeMcBt^Khvk$CzL8l<@uJInScIV@oJ2g{{osIEZalSQ1jpRsQn@7 zv8BkW!kMLP4Q8VxOr6NCCBJzh!-6L=OytiAoXFov+Xak&y!cnN-fH`GB__4S1vmfZ z7Mp@wY!XlBaf?Heg&O)K{K1z~6r>!)ouV;tFD1#tL|?-!Wg9V^(AlWVI6*tyB1?~q zV-*WdmP}HcyRkS#b6tfdS0N4#XpB)`_kpu2SM_q*b%0MXoEu=ETOaS~Qi(k!t?Nz9~qt*64wCFdtcXV)j zM~km!OBl|KL)iwxXG~WGo{7ujus~t5hNuGCn;>$0?X}-l0-+(J`s27B>NleL$l$g{ zic8eCN&*{AGyG#060cgZ9rTacGtV zfCwVLY5qeEs*cV4_jfd}pd?Am_cc!47t+-R{&@X48>qER+u+lK8<;NA)CLAL4CBb> z9SN8(5DUx~O2)U^tsI5==?X8bl7&N>w zV&%-B^`#yzs;kWZjFFBP)io9f4>~ZXitkMtFb@m_Hilu)^Ap4^fg8FCPw5&o#fukF zh6b{OxD;{}cWk~-z@Y+xUn_h7(6PL0I+T}*^46YzdH(yuJQ3|zT(+;1V7W>LqTJoI zCNo1GxSgGnJ+IwD!nfamuMGDMR+6tZKp0rtiK6g-&q4}@!sny?%DXVQydff%%j<*` z)XMW~-q$!Ym&mQZuP}O|2G)ZRbfZ9j@=n{2A=3hDU@l1z2T_Cu4uv35AR;Izi4vb& z4W?;9oO=}n8qAs3Ms}{f>^yopWd}}P2C2vx9E~NTVSbToazcRkfbOvMNfWgGtUi$l z66EQ!FYgIU`4EBu$P#`maJ_X5-bX~vTu8Sw6OHohSXs9*1xxISM!d3{V0kgTxJW-^ zop*+ATn6`s_--XriVr~5tavZq^h7LOIQZ_|S*5dct?u%6~;M4u^5Bz)*pGw22 zFSeJ{Z`?4^?ke}-soxIB^)9M+bK+c9sm-f1thpaXv%7E!juP(89jla6Zb;r9rV>Zi zkRDgLz$4uuP2TEd0)CO!0yC<$hzn50;*8YD{%@f1y#vJHpUYzD?Nn9`6r)L1v*f>5 zXyV-y(sAY0pY)O3n?(n+dcB!xZ&7b7XVFXsZrh*5L&lRY_AxqLfR%186X%uB%|V;k1s zMVUN7nVxQQ$JM9R!2c8=-Hf|N(;Dot&MI?SjiW`iHBwEFIGg?f{I&W7O@JS~@sZ_B zEBTcovpfr|$Un_Ts}YrM0;yRALj+g(t>`^@Rg1>!&Gb5%sZck?!`1yP^}d>kP!sMK zFoW`BkkipDX2IapYcO2#AsS&RBYzB6kZ!i6tQ#I-=n2pF+fc>SKb>Jarqg(bpC%le zD=n1~8%_3JMODJY{_S$wQ$7--#>(OGE;EVymu+AHh)JHvc=uP#If#_=l=SQ&fHF;ZvnM zOck+3RZS)+7Z+CIs!cA%rj~+VGFDY=(>b5-GX*$V~Y}hmec)QWv&&6>(xghSsYRdro@$b6`moB zwV?s9KdFLH4#Ld0b)~p-Bc3xhb96OW&RsVpsk4vkmOq6XS8SK4=G~ zs)L3G;5y&NADs1OYUb78Dp~4^109=pPJsJ#nvXnEZd@6Ix!!X{6~k~I8b`i8pb>Ys zv+AVNlWMv5Uh-TK{64~Cj3X^8VTF04U*CebH zpVoXWVhNyrF5S_ivO4jbiU@qdjjki6^l*G>o7GbG4XWxyy9&cisHMbMAdcMhBv6zI zGLd)?=)m3O$FLw#xJ}f-SsJ}k_4I42n=G`pEUj6l2>WGd<+s` zkjU;MMXD8RABR@ggP44MzOsmet->IVa<1rabPO#JHxzRf$km518j0z{O1g+Az97FX z(h`F@iY8EBKP%nQt0Gpmy+9;gFI!ITBJW$q=8t7b)OOq#fopMT8`?uZzlQVyDiLM7 z38f66dz7J{L2m6VWt$PjUggSO#uFLeZchkO{3V|zHu3UwCTQ8?fp#Hgn9>yr9?LrD z^2!`{s5us+@yPKlnZkszGp#`Il&NQRT7ECfW}{OK!sfR;+I@Q?I#NCfOPM^^?-Fla zF8g_$y0%L!+57r{}`ueI%U1=j?@psG1lZYEVZTvJm8i zAz!_y8t@V=kFs?*$kB7XG&C@m{^FhyfiKV%R1!0gV$C{?y!Nk6h7S?uyobBo@ZAq# z?fdXu(1pEmbb*V4F7$`bF!~M;??Ufn3`OuOjxq6%0BpH8q}5x>KS6}k)6-J6iytOf%IGRh zWoaP9s1qPBVFkjF$u1DRPz;0cr?L2?D<%rT3p*We{wy0?hS@s!qLDgQIQk(YXS zhB@X*6bglG2u`2Df9m?jMCauoimvp5ZZ#)SVDi3I%BbwhISU+gS`+hcLv_J43m6;u# zIm^)%8?vDkI-BvukAkw0bjrpF{vgyKvVjwDBOP;atwxijjBcz2WkQyL_gyP*ox7J7 zKBCfLPDZ=`9ZF^{b^)W~cK7TFY_!tgte#M2baayjCyuV-bvVtCC#uj(n_?M+W}u8I zfKs}Is4I?HsQ`Pjdxk7vCkkja`j>Exs^b2b}mt#CNvs5R%B@#R)`15#vCMj1^?CuR{qm-Xg(kL6Hfn>3g$5- zhab&haDzA79CZL&?%{UULJNnOwDj_9$E)C;We=b8)hwOB$=V(F>Gv-A64-B+FYVWj zIoNrViu{^n&s1h-<3e8Btmqo8Nl^!)ciK&FQ1kXlx8!NaZX%Vt5o}|>M`a7ygN^%gQcw|e;Wdhc`<2ZQP;yg+niE$xzUnQEr}4a zl`S->v>UOo{>o59yDHI^&DBm}aeDr=tXJ?#|6GYi5|!wWD}EL|^&|QzJLvH+d$+_N zVoVhgDIlrYFvUcYf|xM(Dsu(YzdcHQuJ|$ogn9w6#^HZ=HB@Ba+6WLO*Sa%sJW+)) zFyxAjsi(cpl~o42*_~4*D&ukG;sQ@)gt9B~*BB#6{dFjT{PdQp9=`0;E5VDH98;Lo zhp9-iGS{qxrA;w8hQ4NPP84-RPGcjqzl~y0@72g&P`sFU?0T_#>1l8Cvtz2jFhtc? z#HLi09kgWNNK|b-(VMGJ&~cQHpObvdS-2QmuDB6|fn;KU4zoYSq+qMqp7K$l_-d#h zw<+a8FoA>!!XDk4nQL`)5!2}~b@nLizphw7+;?L(cuCPi*O#RI5nx&evpM{+D(QBl z;W94ZG9r;JoR4HjLI0F=A)co~9PL1%X{Rh@m4p_UK7{9_>ACz&($r}6IAiFXHTGn}LzPF81^Tyjjc@Gxd z@&*%2`IBe}0oQ-0JnV8I9j$Zu=g~VeXjQAYVIC&2UgQ7{pgA%S26))UoQ)n@r16)~ zWYA2Muf%(8vDE5BmLE;T>pPw}o*%_iQ;5ZF5T4tJoB8L@#99a5nQ5>T30E(Ea7WE1j6=t_ndDG5-#EuWCc#N?QWl`B57L`%I zzQ`7pC)lFW@eEtb&_30fLb9HK)l78Bi|jP|OPy^~u1pG`nUzaarxTq!G9o{aV*Pbb zN`yQaEBzZA%gu7Lm7O4skF;YiuuS`@bfp=hdwVPta-v{%+(4wr-HB;+4)U=3GO}Rx z(`u7iFml=HGa~21JvoVn{M3Q`epMI2;2uWPalE}0Ty1vjHAefO-;vZT8CtRfKGsM zTC2ky=2O)y!01B=}d;T57AP$ILxx>p6Qb>werta>sgeaVK9M^|^xx<8{=LYRneDR8VjK)2NIG?5UC$usV0@le zK(u39F0xa59Fdp@f^xJImas&Y+OI*w_D>|ybGA`7?Kd{7d@q`%wu%c!!G-())h+&3 zhmhyjO8W)l>jIbKB<^k0&~{l4p>6mx>pH|s+@zElyZZD0XOM{7wE1Fxj2BA>P- zH3)T2PGEJcYW7pjVx1YF56UmY$Usj37eI94c}?!Y6DEN)3}U);ScORkI_~`1>y)PlXK%A#b*Qhy_)JHAH=a*@e6Vnis+7s8 z+Ej40%H+hL-=hM4=ZW!Y0Qh>5a(%lOZ*)f_ZAt+Q(}s|J-xUTd4frE|v8zS|8!iWi z{0u389ihC2G`PJOO91HoWj#>^CqfD={!bCBfSrY3Yq|>=An$C;c3cLhDIvXpST^GV zCML`~P-E=u1O%(v3&w{K>5j$vfek2bw7+jZ2;B^`YOqt6ZbD@S+TYHPM*(sLp10+R z!7oCF%ks+OM?wZ2s+@D`m8a!QK#9o^hHLi`!-ukZp3?08D6P5kp; zzCu+X4$&XD#MsXDo=2CS_;XN~2Kc)4`ukd!rYq^`=iL){A{02n;-Pi)qF!v=fnMYY zP#ni$pTHu7YW~vaLzz4(-=-6h1=0maC@Ruk7(mjb^FeTfSac(89%1(1OwoMwQvgNt zx`sZ_P0?t?a?lQpjjlCwp3#0g#!>YsW4}>7vA}*p9$k7D--Gq*$B}bHkn%yz071JfI zFlE{$I0J@b69RK;6yyOlbwJ2y>=Z_TGG67sA;RCjPhbqH3Ru6!6;DG~WMj=^(OAw&&ZRsB*g^+S!$~UNeh!%HP7FZd z{EBRo0$)*Pntvd*KpBwa>zVVH=XZ2#&b3=j!0)(PUd6kO>z002AzgUSborgB#hr z13DORIJisvwTLK2J{rFTeMW;S^F=qlYYhaa{T9G^4{8s2z~MHb)WJdRu?fSMzEX#| zXU-FF1xF{1(V+U!kEYQiJliE+!1j&UUQHL_w@s9M`z7rpB;<&p1giTm02Kz2&O;Sj zf>J{=P+S)kQr2fnz_@_@1USzix5a;CbLHk_|PXOWtvm89?D(-kUeIOh@Q)27zjSz%7Oq6J}y|W+}Q42 zY!bIUrKQzd2>w~wTj2gn^1ff-7X+T2>j~|50m3c4yTfE_Q7K|8{0HazRuZer$}{rBF@@C!aFJ*C*gTI z6vyBdAZ0(FF((?yeus}OpgVxw_$2Sf9{6#zv4Q5zSBHZiKdB@$nJ{x+xIr;1b*|;6 zLYIX^2LNbSZ$uQB)L%OA-~r=7JD85FEUlTWqtGCxOkf=a`boZ>dqBbngx|T2LZ+sp z(3f=-;&7IF< z%g4M5{8!e3h$lxr)pzx%Y%4u_y!3c@=^j(n@$jhA6)P>3-?Y{xIQkWcbwC2#D%59> zrF6RzP)##D9pUOzPit+0-Hvs>1OD4Q*gAVT+u%5__#uF@Bp$ZHg-mk}Hg0-PZ11#(4iIshEF?{}M3`}(i7cDLJKJUGwb$WsPi@3dd2+>KZ2gsdia?Sg#}I&drKR-nFRGfCwe;{emDLp% zemO`&NOR8#;Y&wT!pOvy7%Q}QA`{~$SaB_>zc(bRXg-OhdD611DXpwXM9^Tl_gh-> zS0>=7u^=9}Qc`jIJaAVCf)S^lxqO&$q(zAmBd2-2XnaqG zm;3*!!i#za>ArHF`0iyW$C0jqeHL^x&~pobG_8^^$G=V#rKRi{`l&YJ5qjpLQAiyrWx$5lkyy z@pE}0o|)(-EFVS92~yf&?I5CtEcZ5}F_7`L&@ELl!x`7#I3Bp3wS4Ge!<|R~P_dL% zQ?re7px>frwU5m!3qGXd&IU^bsCeOoDqVn2NWj?1zdFG>tNLR^*^L z@JEYwd4z!)m0_;TvCJ>3FiVL8(O)@M8`jK3xvfr^0FAWiK?+ijT#iv~X&#s-CQN)1 zONy{7Nc!7oTvgT!n-B=i(6?4Fk zN(^Uq;9#A$w=n3pf>uF|GDrR#+&_!eJ?wKtVyOX!C4lU!{%*kPHqJk|GQ)djCw#l@ zh2UT{@y3jpi<#k*nc!8>%gzl4rB^o&h^|)lxU#Hb$xw_TACW7Djp>%M4Jd9Su5urKKEE(7?)}>V0<-T z?J>P8RXXoVu;NS46T$m;jK(h!?|havyR-K?+qzipeV@A6AX*^F#cU14d6e%gk@Qr= zW`1KSiy`Ev9s#D4I!>6Q7ab?rL>%wRJh#k3RAyM9lAHLMvNNXFzNU%{lH@yPVg62n z)!u@$c1#{`;Fr=MwC=|SZbcsWk0&SZhr`o$-Zc;)04IK>J57nl;lHmas;004%6@wB zIn1FWhJeXgMKp-z-qqBV*<*>ej-)f%va!HTgoVmR@&hi&AkOp^bVOB0Eq|IirFu}E zV4v#rjK^B*Fa#+i9@2CRvn^$}AQ$uyEoFbC?4aLriRHGG=gXgoi5fJKVo})@6uZov z0?h;vwoKtd=TeE7fRZl6JM`N(<#AnZMAX!(@rH~{ztTwqV z{Oz7f3%$ocvRK3_-B$yG9&{NAV5Hrps1*5BSA%inh+9#8c0MEECK=& zBSnbG3}7u7I*DX*nihL)i?=?&T5Dgo^qOl^?bU=(5(Ifzs;IO^pnB49+t^YFG&29+ z+WXApdC8>zr%jmrdN1Q_}a ziJp zZbD~#BLxcUlov9`2o=tA(~BkD_+|}Gzrq89c$p%Xhw2_MCtW8NImL4oNC4g};H#Ja zW9O(h+e^JQnAu}j7F~9A4Y5`m8rovub18yj58z%4s62mVv^iOpZY4ZX#8M{Nfkizb zt@jtopIK&lk8u)%%*WC|LQNqfnClxY*0b1^gLRrTPP{(6c5%Myc)oyA9Rz!V^E(5L z=%txeI|U(frr0O^Wq*wjb1fqIss^9VswwUp$@KOOCAL_eRf4zj z9{9>$$YC=ytp4Cf-G+vx#tdChw13L!oGEcAm2TIYo8y7bLEgvzgU$rbCVMNtuWp8W zE1%{@rjnyg{8r%gy_IduquSdwGGdk}$Y`rC*;bz)3vVSdRFa)_NhQxm#$iE(hv58K zs14Ml@tQ;`dtUsE{t&MBWK1J1PiZ^N!ews()e4AL};2z8Be^;Sds@B_X2_x{n zC57=7J=!E=6b7Srd5qkAg^X~v%SBqJ7V24__8MD@I%asQZk0?q6SN#DD;^wDu_ITB zFU4;pfi-z8k{>jAPtlf=mTW{K$>Sw{m?ZUoG^Yg;MZz(qdoBVJ6VyyQtv(exrB<4F zrm_?jHvWgEW}kw)y_n;sduZ9!%GEVR0O?;!moGME^;E;F3?JwW8I&zs=W`W%qLdSi zwL2Q3a6Y_$?zs(;9);B^O*Pr)A$Sws@r+co>AVm*&|lPbn;1l*Z*YhK)b1iqlY=J{ zhShf?hYy(N_G)SuvaNmIuk8VNeJS4gwx7#5Z$$pUKJgR1PrR)r@04tm^FH&AbFf|S z6}GJ=?=t~cT*Q3-OArA6wAxuFKuc5lm0m)8=@-c&r@<) z3VhOmlp}N#=Q+D&=Pd^6piiuC^z<0T0~eZaty8UwATLdPDaAh$T}f@;dGom<`RqIm zZjTno&6z@nW#NqP-H$+n97y2Zd3RKn)%Of&w=pLLTYTXQ*~W8%v^g1^z(}JVZmmmg=@FgL3y*pBCyKc!!#$A= zbEQks;sxf6XY^+JOUwpYilxQZ&9hpZ*jB{r+T7!Tv#xbHfsLp_s4-Vp=dHSwM5^&t zszcp0HEIymig&X(>@l^Zw3LGG{>ulQxA_Z=9ATP7*$`(sW;BJ`ogm6}%%Y;k|J%Y_FHo73g$(Hy4uw zV~QiEFs6uw4r;sAK1Zbz#`hFZlCoMm3PP#1*$Mfko2`x@@i~RKF21IB6MEWT_k2RN z*(Rs<;eX&)-G|{wD!GF;Xcp)0R9GBkvz?cOKmg_AseH3Qt#VA<4z-Zmn%Tz~*J>th zghMPafZz3@Q2QeIbz!GssmmjEmHwT@?!GP-JE;o?P@(U)S4SZ}K56c(jY5v&OQWv^ zpg%g^gHRL6=QrC&7KCmDiTNbod_=4FystP2vTlC&Nk)o8Y+%NAC)eh5rSJ4seTN(o z3#yVOQgtOgEZN0B^UL4(z)`&A#{ho$Ute}?E}pg?q@T5}O~LG=xCAL5HLT*4!owIHTyzTIWY2}>9f-9IrS^*MywqDMJ|Kb4 zo4i%ur-c=d-r(?7DJq+V*|TQ=LuSjbN0~jNW>i*f{#%WO$pblvYN2N$r#c}U2&Ltl zZ!!U;9R~z}=Dq(W;DeEM(Vg_Xqnd-ktg~5J{TW$P(~usr6nZNk<-^*nRAtV^eli2W zSn-zhN2ivJDp@C+Zxw(&&hQ%|pB(XqiKXt0 zUI|si;(osv$p>J9@h0-yFVJ@Eg!b29_kS|vKgpKITzH3&5pT^EeNRREJZGXAi%#i5 zoJAkfH<;e4F~ZSpaJRi9XxBLwT<)do5eQd2dM%^(oJ`0pJg(HqL+F8(lFemAwO^w6 zh+fLIcgQQ?^kc3VSYC}L?zpqP|ZNc zy^U&1BH74FO*?H3s5G}WOWWr$pi>#pE$QW{Wfzs4kBsM58BaY{YD{TqXvz*H>H7%7 zUYc*Hwzh`+tPWhaYYx@OQFLe);`gy#o!k=te#J*A zli#ZzC*aTS$Vtb(x$0p7yqZvLUj!^N2J`u~5o2q9Zb*y+kqZ5@=9w2?OGY@=gEeo$ zw%1%zal9k`y^6i5HBHr*AoJRZrssHa#orSL(DW?S5$JO@-L?1Y^*Q7p0XWUVo1D^VQgT+T$`8*>jXRJ!p=7$ zd|nr?c4|6PPCxAb(TQR#TiJlaV562KMVhK^dbRiB|80B6{wwY6hZ~*rkJ}4)2bA=( zmt<#On<;zSwL{t0`aFTN!+miIO5y`;x#ZqJkR%yDZMA3viNIrJ9C};4z!S*?dqKVl zaU!FTY+-nb8A1|z5%aa5eFj+>V|KNR{?_Gs8ZnE+`|o~8Tgm!k-*&>l zoSXMkcHlnRT3;USd`Sf^5~TgUJ56A$fK*bg(=NR`^4;=C+7_MmV)u6fcKzK}o%YA> zv=x!GZ8~j#ciIEtG^1Pynadc`J`~=?`+9E3`+5ckA-NM;W(UqD_%m?~WIjdX*!${B z6!Qi{fs!gc%6}zXMPR2Z@Ml-~pNkD=F|U$pGNY!=i1JHszZb5dq)ykK-(9;%-*l^g zrPHQ#r#%}<+ojX$?}|XeA5ObKlVgaKz&b*Xn80o~TJ7@0O}8%l@`^HVm54zrHoDe$ zt9Ein8%6f5+R=6XWykBEz3h0L>v^t~TtDI60xlodX`bKb+QR)qT`xP9ay`Q37(Cb+ z6+PHBIPw=08|NMrA9?KeCTg($B*7CmsCbLiD|JfwQjgRZu3zetwn;mrPN`ef>-0o< zqCGB8_%Fs28@~NVzi}Rq+cU_PD?TAiZZtnE=aYVFE|mzI`z@7FvUw?>I^Be%;8!yK zb7m5`cuEzw4m8=R}{n5>+6fM`R(Y<-bgDNNU zS~$kOqB7Y}a(2ZPoWbY2%$Q|2hf31sP=n9RN>%PiL`c*cOVr%&qEr3~W2g4j z46E(r{EGZ!b?{sNy20?~Q)#y@Xa}TVXk=#8=1y<>!voK25{^GXZSIsd|GzyOex5+U z=eGI3`*HYr5*BQ2fBW^1^fUChVnZU4)?tT?Pks11d5X-USrDvPBep1%Ke2Ys0`tt* zWW$TodxjjjI$Rl)V!stiEi#YJ6wy?YxE!gok*xA0-aQ*Fx9OoMN#Yz1znkKE9Ogt1 z@F{Pb7;e0Jp3+wTO{?+hIi+puQLFLld1BktaN~K#UMtz!6aS-ApZgB5+M(tUj|i;d zTt4fB>9dobqf1D}Q6}#;a42J}V^ExYT&hl3MTGf{9PkFU6?RjTyX_q2ySTQK#_9uv2T0`46Ri+94 z39oL`nZo!igm7MuyzLJLI+OetzuICe?fRZMW(BY+$bYrfmc!dK$K}(a{9|h}ozrGG zyNPN|X7scf(SBE2Lwn3c4S^OXaseBA*bh4)^VulC9vc%h4A7MDD%!XU2d^T647iMG zkjF=ot!?dx{hl)~+aIHu4Jq7=xXg-4Q16|uGP0>y?@sboiN%}jjeE~+Rm|rof&G{G zDeHqbDhe!%zzdZq4zxqj6dAKYd+VfHtZg}nYHGJ%whbSkZ3y#3w1yM){fN~tC!mNg zf?zK8rO73`pmbWSf8-qXtKE?RL4SlOZ2-I7IVnQAKI&R*WO^{5cS{r8%AB0W&6z;k zdKrJxD8@(a2O|8U@qOVJ-FAMlW&6PVVuAUp1iWl9m$xbZBg!kReOQ>Ax2qMA7;NMc z%^l-Y-ID$0v|#wX%l1BE(%P$uQr?C5X-gI<(%5xGpmG~u-v)o!UE6db`HP^ABSAk$ zZTt3B?Wv#0@Ox*rhz`kPDKjg7+koGPcot zn2%5gm@+|-DV0M`OLFfDBNGxxHK}Ung&NHm70WoSnFWie8<*{@O=>ja)6e>@@Q#}a z89dwRyEbsP!yiLbjhTPp%jl-dvb(aZT>cM@8DeUV9NP*)fT?HCXRF~6_$)B%A6H`% zr_I>Io*Oy?{R^C&(jB}2%6Y=lw&^8_FaqMXusi#NqdEI1W6jSI{_}HK|A?C=Py4q1 z`?nE^x0<6}=R+~;ahfDPN^SPOe6u=(`|Km>*#{+J!#=a~o(~W*w*t`BIbRRSn|E%< zD;SC2xx}*TjJy*wj7I$9u#YJlY0T~l?7Zxn#y|sd)^TfNLn9`@T-;S){@@R-h`l&7 zybDN3;Di@=!LF>QxwYnR2p<0_$8uSQ_}Va6sAARIey_sPM2V%SzBQt1^IGXe?F{6w zClFhT4H*_yNwLa5WkVbXpD!{YPlEix(XupuHnqt}?_}Fb;{DOUCBCp8S{Lck#`DZ^%a9h$yv`rl_A0lgQd!`4xsR2 z$-5Cmg8$tW{Bb2 zGJ4EQ=|8;0%xid}_nZRyLp1YCG_|Lnkp(C+pLBoNH_}o%HAIzm_Ydh*p)3=5&}Mt5 zdNkkS#|0ue6Ipn#Es~?sKH;bpz#Bu6?PH`kdHJ8bl}NzfEUPJWNe&?=04ik2$!X_ zp0H*sBdpnd5!Ni$6K2gOqHD6TW|pdSK-Mf*gG)Fwh=wEh2w@`m!Fo={PTu8=m6!6y zHk^9?C2AC#XzVoBjSaKWQN}P>=*wk+P?SOz2u&%bPP9{sF;_w<1!Knc08jV)Q}bc0 z;7hKH5@UmS1L9JlnML5E{J#|an%IMWMH#n2zS1CEn+q>QxPC|jx(SzYg>KFrsyV&M zmF}-w`fD!TtB`35QcFRm=U;#VC_~^&)7N^VL24(q%nA zas!>NbyuSw{Z(R}qkikctRt7BY`e9HJ_9tK!>f_%RVh4B#rjN#FP&HOe)Z14KVy-p)V&A*H^=R^myvvezA3wXK}6bJrTCu z>%VZ6F|uKn!m%S3nYl=QY+HY+pl!D333J4A82u?=VzIMic#P7d78wEmAHuPV!g9Uv z900#WzoFEO5Viijxs)SE*rZ5ohmFlI@E?mIUnv|B{=!S9i)RwE`ATE2@I@)c=+i`? zPwE|pPox}yy{`6j&}CF#x5p*ZCH;7peA_34pM0xg0q(^C27@-sTA+!J!}@zGF*9~- z0UJke0K8KJpL7zs!U|$M{i42O_YR3tn}GMCzGJ84F$c_jU+EsZIGp&hyV{>tzCaq@ zi@t1!cjX>$<86~D1V;7b?g8M7u)X@4>$@qscj6!jUX z7}%K#DM_<^amI&j68(Ih`Qjt?X2Tf$*9kRIZ#9$yk?%%c-L)IEk`TqSxnYV9)AOT+ z00B3tH~zmCnu~fAgq@Y*pJx3{k)Lg`dKIyZ5ixbj2Ei=nqXXu{j{@3$=2^dE)jiJ! z9;*~7Ffz{$n2GYN5aEf>jR^hEGeHJD&t~ayU$Nc}z=)bn`_Hals{qCp!_!lEz@!uX zf^UuhX7%PK>e6tp3^vQ1tt1j0?if6sfh%57c^BekYeE93dd>#&5V^sk2IIyzU zE}Tj*9=GPSD*6S2#M7`oMblpGPaVw~RdbNd#8Bg)go6|RjaaqnHl5yy=cCb5b5OnY z#j3?w-uf<$yd^Kb+79*Bqqdu|L`L96$$hc_C|1V26;@{N%0BxeiJyT73UtQWrz)Sp zaY|&5{1x|H;#e?g%s0krUQTa@!{If0?DOE{^g92kJ`Vt34YbAwI?lDQ?eBgVoM8tf@g12HBHXMtVJ) zIL*cr7&?e5)|CTndFDj6Jk3khmPb&bn|}z?_(zk2i#i9gR8{o(lMcgc9)IFzvT!7o zq+_dUNqe1yoKtl1(E&|ey9;=p0*v*EVbOU15^qdmiA=n}bs_65r0z!lzOEIIx<~tO z3T)_d^j|vNSoN6-et$RX!uD6*7L=ZCEshuXERM6Q30u|?c60-o&Eqj@LL_jzKotZB zPneZExwmV~6udnFR8(Oft0Hfe31Ul#=uFLGV;{*2bNr|1SW8_-YN7dYg^&|m{(KJ_ z#M2|<(ShKG#P*RrtQdb|$Z7S#yu{*7kGWrUi1yaij>M#wwt;iFWnC-Y^oV5YgQCjJ zK08r3D1cD_jS83!-xRR{xR`(5sy$#KTP~%|C%#Egyr`Hm;@6k9XLp9nX@8?^1$w@; zoY{#s=dG-jj_)^b>WK98R|(<~D?NQ!uP2|cyE{KmcgZwRcX5AdkKv!{^kur!-pX_q zL+Nv6igi=9kHxa>yvS?zo16Y5+YZ^37#UNa=l|aNXV~ z8#pK>Y32PTxpSX(mYDpL!_{R_(?2awD3ItrE53?-si%;wr};&0*=*gs0e)4;kwPGs z@nQS$Uf6SqU`60D_XHZEoPGp<4qbrdFAh9P<~|@*Ty2)e$n_wti!+7>8r_&icfzv6@))F}XH# zy7&e6AAd9w)9g0Gf0Edv5)LdkA@ffE!ZVrqjtZjE-DPQAkSyw@tnvfDgmMk#qI}tt zzT2BE;Ys%_p4=c!6d_;~5Gi>n9;3M(3AS*VoP=ZLplgd42HiWHJyt8#UTw*g1sJ7= zVMfCGCBCOE3d(S;_V=90)N23e$qh|Aoc3=Ny-GGRCt;!>Aozz-Z>s?)8wQDcEAh_J zl7rQ+Bs0F9-a9)3p(x)2N;Y_20Izyj!of}vNz_20Sd(7t5xDFn;GisUF90lCmTn-> z9}JWWnWXC$Abv%-G4WD_8xji$isVbCu|I5A)F_l{u2H)sh>`!&NDevFa&sid;J7fk zijm`qn&haWrV??>*GSbW7S$7%ec;$Vz7C3B7x_)1*6`)!KHS33!H*HlW(>}BwqcA@ z!{~QWd()X5HI$3J-%?sR`Wvyg+qSdY-VSG>KwFeACD7*dCGyXoyu*pZ!nYa(XC^m9 zZg<2+ZdDUSHa?bxVRXgRK^!@5ekJsxY$!KPbx5Yg64VPnyGAwOa$O+*)oC^i6g1>~vIVr~A z^j#Lw24<3ZigIf% z32BEx@G^?O`{~DdM8xjmlr1|jHvvl!;T5-`hB zo==#`B#1f=sS;b*U&3=mqQie5&AASwf?CW!oip9Zu?o<>Zi0U?1b;{t1pjn;vku)& zJn7Ft@%6eTLUwe2!Bl!`Edgql2|gfv&vdD6ALOjziaN*ShDA;0H{+WG(*{YjA3zFO zx}9ZElO+d!k>(SNK5%UL7TKS&F1Z(aA$yL(fnqLw!3^Rh-EBfWplvC`A+#iHS$f&) zeJx8b>1kQ&Ror6L9>DVJ>A{^|brV+ej3sM>%3Yw`$%)EF?Md}@5W43dB3&z;!PD>RzC zCw%ww*zjF9!3TEMj=2x{ReWJiq8vTOsbNY^9Jgd~+qoK0J63|i>xdA(I|+2q<7g?u z91QkfUz>xMjekO+dG_~M_~4<|>i{ar<$GTaZD|UuM zDh#L@w4@4)Yn&Wo$okw3Yu(oe-c>Z;1K@z8M<(uvQeps;M=F%h^)$eYT zrvGA}8y4&+Dh^rqPZUB9VaK$s(M&>eHL4^jqHM^$MU)L>W4XdR6yFjPSunV~yMMrAHh{q|J$yzdrZ$6}_fuUiIIHLllGY&VPj$ zq$b-*LHFwX{<~|XO&x54ber%_KPe|(m^dWK7KmUCT^#Y3eTt9(R((GF-sJ!!zr=Dd z8-GPT$`|u@k$U>9@z(s@v{6O#DUV}1+gFi?z5#2Z)EPg(`)%QNoCsGU9CJT{HM58QIrfCc5;DOgQ;tHi|3$e&8*E(@F+?7Ji# zpARvM51e!QhRTD|lAIgjty0eCSv^9Odn=!i;g83Y#<5UD$jJCf>YzJo(Vl=y(%#lzYWWhBy;Or$OO+7ZQ) zwz&MGv0$-0Iv&QOL!ji3QTqyMy47yxPh@|=u1%EvPaXZ2FntVuirtv*kta*pKL(Dr zyH^?X$~{@wFnHaFTq81{nRF2g1T*$uYtp+{|JK%|J@OolKDk+U#5+dXWty38%|L^$2^{uPl*?x&Ke|5_z` zRttc`mAocTQi+d4GOTHDlz+}W_mD4(P@m}4;yFExbBSZrxx}y}5sKZtl&U-8+lpQ{ zg7p@E!p4-f`z)q{?Qx-~Uy_Zh9AdbPoAi#wBE?t&y|Mz> z%6h;YDl+D&4T&oDoGx~!F80ks=UDngdnD`-#XeMMjtmz%*ediMz?}I*#m|kin6^t# zDyA(_EMA>-ICOA{qLE@v@Xi-i){BS-L$pT@rJkLP>XKXd3p_a4;_ZP~)4Nm)#ui-u zmuy^)7rhTf= zm|C0Nnr}YF zy6gwtv_c$r1_(J}owO&By*r>l2|79(Fqg=WQqDwOj`JhD9VB+v1IFB5Yxn#Muib-) z>z|{YNHY^ROCpw$%NIH{oeI5_s$aM_SYap?@1pa>E6wX*CjfpT8xk< ztO|$9Y%#y}eTj3&!fXZ4#9s*~L)M{OfYb7cT9OuVTAa0#5%S}RIsW&=GugxOoN@5s zPd2v43gP({{?-08Fg!?%H*?ORbFx{coD?b9s@Plg7*m^q$EjMqm8Co`j+ju2D006! zPgiPkI~5@vMf^_dNR&)^m-KYMx%h3xKK(QD=m_)m#G_*B{lOGGe@--r?kcq{*g?3t|xXpnDa1gsECDxTGU z9z}0S;O-pyUF=oIl%;dNItJVt!q-K(U5V&f^%Dvr=h*E(0(RcYXLwv3F-ir*oGWLM z=`gCQUyZM#^{7`d&^`^~=Nc#RW`7IFD;t!*?jso&2sU=mT0FE7!@W6S(x(oBQ=g0L z?Be9pO-}#i1KC}uLXLNw&T=_9bx~q9y5-#N)lshtCggR$nS`lH?E=?4bGb8YEiqL^ z*}L4~=!zzu@sp0SA)7vu2Z?HX)Uo!)({U9_6~5_yh2d8yVkMh`dFI#mhYNWhqF;LA zeCSNZboh=a-NP@BmNdGG$MmbKge@4xi zg>w_qv0H@9_%6PsS$;;M#83aLzXdMWY=FJc+61jn62S`X37pLB_E%Gqv7mpK`MtM3 zgR}URQLWIdAfKRlfj8kUUV)gM&b%`fQ3!WN#TGWD+D0IlUElxuV40DrBg9NOoUoEov!uRBJY`z-IL&-um8r0^i#cYx% ze+&Dfc;ztIc9~S?-({J1Wlf(T(TL+;qf?HyI7!=U{>-QBmg8R&Q?$0f@Q;@@^WZqL z76j4RHy|RspAYol#v)5$(Ac4F__~rFS=(mOv(w?i;oh&9%8jfcnx0xM|)h_ z2ZZL^3;*P1)L-J2_#Re$uzs!pjd;bB3Jg?#Z8yu)=}IVUEEfR z<9MhRN`8pK@XatsJSe~W%!}zmWBa%o5PTshpZ1pdyPvc=v`m3#ww8<2-dbq3L|%gb zHQDZYHKQlQ)%>R77$FYJFRwTk?dMpB&dG1bzh6CColRR$+hBR5)Md0c1z76YOOdQ?H^ll z&gmaEc~4FAX8d^=5gC-s-hRjR~LDVy~u_JFLWU+b$K_-`L0CjgdKZ&CRPq`@9kF_Sw1zXhUkFJ zzF65)v?mtLGuOhJC@U}TlLRm1ys7)J#O*NVj5QAFb8-@t&;SQ}cl)KBk28=(qY4l9 zQCATrFKo?Ae=emG796JmT<&*gpXW?jrV}m&=P^W)gR{W8FS62BY&Z{G@NlRZ$q0F0 zdEX8e%pcR=ql0B*Z_dLX;iVMca0$i*Y!21DIT`LgW%8TVumr1$RLls1t>v3BKNHi6 z^C~bawO?nz40!mCSg@AcSKMmxb$71bTyd_O0wO&VluE{l<1#>pip=h!bA> z0$Zs5Ev?&!gRh+6Co;L=wylqMbAa)Z?GF=C=3G*)HRrC@R@&CIYf|WMO*>*_hu*hO zyZz?eMKQ9kHFEo#cjK9NV|u$_yo*h%jMMC~$lT`XX?Iq^H$3f{`c6C8$phwbT-my( z-6#w4e^S)wV;NZt9MeAqP8XbZUL$AbJZosZ$Pa!j(~g+v#6u1_7BcU`1%FS3*3&LR`1Q04C-z2#Tc<0(IwnyK*B09qCehvN1N0cG10|MFjQfNr zb83N|A|JLWvV;P(QDnU;*vgZz))IQUqhe2DO(UlgO!%-G&HO+y{P5-KxxWoPoFtKL zmdz2hdhZY$w3oHa{8rOvkr)J$S@;v>=Bd^LUpN1Vah(eOimy;G8)j`sZ?9Mktc=0p zIVV;Cog-Ax`v*Q`OQ~Lp@TRsj+0rGgjb}r(mUDPVpsManEyEh?hIJQV5Po1Dp?4xn z{J9tO67PmZIU3A9s03DB2(0?BqlduV?!!uE8rg@_vyYS|N>~9tMd)+TY=7l_ENu=K z22%sshh65^UKgnJH8#+#J?;OwvEiWMKOEdpmwv`uIYgM@IbDI>T|s|+Fpp>){^TB3 zwn{@_3gY$n9%zmjh`=$1a$fa+2*FHFy{X%W_w&v_@ zdzRqWNW2jeTiE$tljTWoS({LB7Yp@6<34b-k3r--vf!>zxyPKc3()5&jyKcg#OODB zmxN1bFfvxDSvt=&u(KhcQd^^lUY(YTaIk+>Z2=l*-wGqI;dG`e5ykNgPDyXh7WtdQ zn=Q<>xAGVA&5Y^#n58N?C$gVhRd@3Kbf(8yKjnt!oxi-3f8Lpm5?G+L;Txg0*`$h$ zrQsMR+TP8Iku7KypH7KdPIHCESB2p4s1nz;eDl5|=jHsLt(^b!9-_M}wL;zD zxuy|2@AAZz2_^Sa7eHBX2|$^EE<8qFpbK{vZ(k*M!A$qI)!bBP#v4t6EDzDBo;F%S z{;lSSE4L8*+LNB^E*rA)Dj34k>LDY z((*~Fk?6MvSpXB&{#Ml;cH%7zn^{*Ng5iB^QTju`Y(YS_;X0Is1hU}RkRb$FHJ|>i z+T8Npbc0;t=P>%XwckaR{`*m&WBtcOV_AT4a>QyEj5deG%0~EJ{e8Zf_1!nHDgaSk zfA-E;Ue>PnWyXE2xPOD_bcfH zZgW4E-mz2gi&w(cjD?{GB8q{CD%rJ9g$g_%1r9FWE|0}QClHS^4iq^J@O#)dlff=FMH1@QHKOqzk(J*uB}M|v1d z52H)&+oF2-KNr!%5yji(ksfYa#&30I6g`cOfc7dtdxPXF*zLFq(6-Nx%)5*IlWGO| zal2<)nWIpr4ed1reAz~n@utw%_Mrvl|1`a<$X|<*sE4m7+#9AmBNL!VY6I@_Xu%z7 zSoIf{d?Rm%GW@+mw8|*8ZuVt%51yVyPu`~r8775XEwe~o=vnl%+{r9@mK$b~%pn4~ zIi-0<_QBe`qZqZu=Z8j2jb=fCOcO&vZSX#MwpH!=>{}PLWU^kJ&UQy5KRauzOYQ4K z8dl*3K8{ZCyMyaeB@&!XsHE3JF}ZAfDwvZSEWDF(B_s*L)JAsn=m`i}Yx_d2k15^j zqf~6p`qgKlmF|_E+Ul(=80OUSr<6H>Z=6JqcQng>-ccOPac?R{_24+)oFg&>;rC8& zngi-)aORsF?xZ9~H<@QCjnm&|xzcC3%Z917Y!;j}@$7f7lo5a>H89I1;TqI__^oFY zWST^`<3A~pd9qn5O?K|Y=P`f!+Gj%Yh$TdPbFADA((_LC1+oMP3RoqDS&=Y&MP4r5 zM0M0>@mGE&eU@dd8@u4?w}IWQy=;n=p|$3lP0^{X8>~I?V^3!gcX$IVXX)<$mJ

      {LvWjVKvfGzr*5{_EgI7wv7w?q=BP7EhzyI(?`*xU6PHIghaftKhc!JJ8I&j;dx zKQ-B$p8IK3LrvktiesO}6N@FWx^QAJCj%nw4(3b;-4dai?s-KkU5%~LwLw9ueDhc- zSjATE2fT8TJGZ_omYK8dr5(HKnK5pWXM%E0f@zg(1 zTwDyUY)CZ9UDu>Fo{uu-x~}n_X`?%h=QvNi(Hs}OQ}<}4yVg}v>&mHhRf%mF{&#e+ zXda_law~&zgNnv*M4CH*S9uf??f%o)W(M{;34XU=fs(na$d4MWyWw#`KuFOSfYO2p zl)B3+DlqV4zW{Kt7Y&XxFREu2wwSKllvyt>Afs28gvDq~}HRnVva``Xl^&m;wd{g5=vAEI8EZ+`e+3U{V9cZJS4tl9Wz#Cte(stqP82CA{2!7nsl z(w}X*L5EH3E&tQPjI-t@vSC6{=)B8X$4XZ{MWlU?(V&6D>rpWT@CJ2Z9Nn>^dzm0-aPF!>cj(ry0kgzkDnQET|GTu~Y zd|GIJTBmw@^|a4ILc1KDag=Rax>bQP{}{NyV^HVhl3zp+Bsbj#3@8&?znO)2*)B;n zpOSJrST>qom38>cv6XJ`mc}#hCA1XOeqAl#>%OE&ZR1B#oDAX)&YF~Oj{ij~Gsv@e z2?JzjLZp7FzVlQKrWG3K~rU2B|fdJ{2e6|&RQJ4kE-`ketf zp&z0x3BgNH7G3UeT;Uj$bGSXWHfI;=3}dmYws2Q)z8e}?lQo?_+-qb_mjfrne0EI9 z*J-u(I&^;%x7l~eLs7(eBj;qJe7Zh8oQ_vZMs*&0$~gAjQXxaj*@+l*6q?_@3O!D8 z`&47$^uY1+650d~-@_iS6?^(%zPtUB(>wcF;@_nrsqX!Lsi)MTSEAs8=@38QbVU#0 zfn?|xc$*%T6)~kOO`L5K=5Zd;GAN4*iD5I7X6<_>GBjJ%&`_XO2u9|~zlaZ06+TQ+ z_%P)k;KLO2xtjsw{||gPD)_K3j1T+5_%KD|!;}l*!xR~XFg{HAocQqgm0^6C^8W`P zru=L8aN~Xd0zN<-IMvTMTUa}Hy1DP~lytzXBEE@nBq&JgyBXSkC2RJ>>KzC=w&au; z{V0~W!5*SQmO5cn1C1$W+F$-#Ld?gX&dGQCT!Fdy5=Wq4dTnIpbEdod^2cB&y|4VH z@mO5K!O9PU1^Eko;!fJrSBSku|Jrd8`!y&Pw5N7XE1R|$^S*m9v*=Z&&}Y3lOi?~a zO8fZ&vkTN&!Spwc|4@6kBx}w4$_nT!DD1nq8D^QyTbA0ZHD|F;lPA~$wR2NT{D2%{ zU~g1#NeY3Df`l%Uv(MGk89?hbHw6@hYhu4Zw7qN((JvL~+_cg6H`<6^#ytFG2B-yS zyl32l>ciY6&j-x6e)?JH!c5f?mSo$SrQiX-wm4TEEw8}w9l9hl$$X5`;G`16>;L`# zSFq5vQO5uvSez@f6rSLC*Ww_ji?Oh|RHK2wWM1NG>hO;?$E7kY_nSw4@>!@kCs#&7 zcg>8I1WZ;4(IHU-Z5^h+xX7nbbZgx8nNxaUhqm94=pEpQQs)?-vRLdDOIL;Nok;t% zjawwx^_Li`AU4MP=b3Y92=EHyPR8>81-$xfY9h-;RB*9Eovg%#-66L71kYj_7QBJe zr#*_(cblvRm;#D+JhJ1V|B8QhJJt?q&QaLgET<8&*eh;h+6B3d)yovO5uD==GaNan z?MM8F=7pph%2&Zpdcg0w$R@cPei0P-A|p8R$2|}&POAC5ldfOD$%Kp4&=0H>f(fjS z3#^R2tomg4e?fx|MrLCI1uY%|waWC*verY6xRei4V!GJ_u~bmxccj zG#*l$#pw@j6*dWt+Yf+s$<*5su{Q7z_6c4t3n82*x*_n<*@VWx-=l)D3w^{(7HR*W zz($wDAI(yyIcaH6QSBoOnCn9)G3D_x@s*)mwJaDh9>U)&(g^oy7&IkFnd7dVb%9n8 zUqmu=w*u+ZLJ8*3-3+|@X@)vE!Hs~*946I^x$708cPE(T_+uZ10_UTAztb&$C-4|8 zKNy^4wY=m(*{~{m@jHjuZebA zJnFK?={vU(@f$OPd~?}LYCH1UFEN2h)qDiup*|)iu-LvNeFQM5sT+QgVYE?S-G3U) zoU~AEKt@^cc}_A5+r?&4yfO$)Dk+ShVs(}U0L!z^;uYB>j#(R)S6mSJc1QTz zepYB1AKg9)NfBa-3>GWxV9t~aFEe4m5#MwEw2+)R(-Sp(^)l_qJIoi<1OKoNj^ zYo&=@toH1K#ernnZ=+FS<7d)LcoP0+q*BciCm55aB=p&MRYUb6yk1s9$XEay<(s*RGy7O@@+Qi#aq5tT<7>P z*K1raa~%V~uXCAP4rf$Uw2Qyk*jWC_PoKY-$VlrOq1U3nA6aqiFBNYNt9i3#=Y$V2 z0}>5>6sPeWORhNg`84^F@(REnWpdH_Jt&a!8Wf9TrSCkGF-hDuyp>yI0w^(7p9m&O zc4dY16z$`>2j zd6(~6Fy%3Il&ln!9N5O%tfc1X^*|$-mXw$i=ZHJV7}u9b=A4dhX4wcA_N;2jz(x*h}^Ua^Tzbd-%+ zxuj(M-Pm>|&xeeUP@-`m%ZZ`Z%~S-;!v(9el;)UPh? z!^2i_-z6xbck|=AxO;VRx%`O7lH05&+w_OLRmG&&@6ZM5lxM>Q91V2dsg%YPGAwUhFKX@Ii0Y-w2IdpOU9rteSGIq%8GTeIP0K&9(Jq zc(^HmW`uY1t7HH)?g|B(6Ep=h{AJk#DEe;Bg)sfQ6wsl8B`N+$N`<84Yp_}U{|%L{ z@Lf8cbJ&)Vx{?s;Zu5D0>+@FSOa2P0`6{JaQi{D*H%dy1PLVpwmxpT~D=FLT9lKk; zSxOz8`gVS3xQ<&@&EBe$ys0m>hECNnK~l*3wxp!!6scoHak!3pN!eygSrJZoR#LWT z;K?^j%fcy@lG2cG1M9Eewov4mK<7~J=H+AntQi`tDg3~w657zY=6-Kg4v7_yM6d8x zO;_b;7+M*Y0;Bcy8BMy;l~dw8sP#6@%8kk4A}z>iu=hL>~(?w*wl zTdWMK9V=Fq^8Ru4UQbNjzNKYL8H?5OK126k&xjWf>h75(zN=M`$~(vsZp?DVpGO)4 zCQO!Z8!TK?u!~v)+FqnH(AuGrVMhcR>3j)pcHXM9u*3EDX_)H9tbT9}81Rw2-(iRK zXsaoKpNv&8PLld@2L5UG4{BrgE;aRYel$Fsk$6r4H zyzggL0)-OZ3gTF^*yXJfZohs%oZj)6t*tSn)^< zu=~CgnPMM|X#Xm2)z@_f2BT6kB=*R#loB4&89>$LlA*(z3JP_6WqtM~N*Xhvz&8ZNoF*hV>u!3P!pjwGbM)IQ2-loDS0MtL{C zPXGgI;$w3oB`fim(;vhw%=L5k#Qu#f!G)q>b=E6=J& zyj5K&pz80lkNuRlWbA!c%Zl@RQZ*2Z*Q{pz_VZk^K9=ux$#)qR@YOoewa>zkRlZv# z`q%h?8RxBfI$Qz>BE;is@?EMm?lP>=OUu5*d!M{_^uz}mu!z^*S2AM+84I{y87q_J z394eUBu?kUboub0#*_LTcGB@B$t4|u+>aoa?#Qyzr4M+kVtA$_l=^oB+V!pWj--V< zvRwKAK|ewk^>OslRpr3AMLyYP?}JYfj2-g6)b`%_Na+gZ*H+#OjtHgwn)=p;hRzjb zS(c>!)g)^PyGp?IbIYjBSeKNzr*U8@6C? zH)_MWgpi_u+NBz`Gx%XLv&1ed_c0egB9#R6Rk z!%4DK{FGD;=hfvtQ2!ZK#`@UReEEcY*`ZNZ6O}!0^5rUxYUSZCqgOm2bbC3^73<^Z z#y#>~g$>oCS1pq^W$GNzikl=ysg*{zNSg7+` zR&K$)pw12MJtn#HEwZl4Ub~`<@*c2quK|J!b#Bn8Kyr61Zz4r6BkT46 z(NZWN{Ta_&H5RTl%hyoqQ2Bm~jiS0%l=*1$**M-;SnoCTmJ2oii1!K}l=WNgfd{$w zs@#!@3iMVyR7&YDTe*e%`hm_(51*0TDHba0vdfmyt12tE543(n=VswsBe@USY4HzQ zx)FAyck>)FfUtEMVXFmU_0r&5!BC}=$~4oH@iHmPVZ$2dn$kz;Rf5j+-~%Nz^gQDI zdWW6Tu3x@_;rf{Ok&@n%Ob2x)jqyWi)pRO+gA|R)p=OKt`8bnMXvPa9skTAi9;Cxh z@(c}#lZj9*1$Nlza`cL_V)B$)d6omX`z24SEst}lZ^e3V)t$VjWl&?r;x@_Th+qT@ z&eDfgKohUjnM#*RNn<3_L3^fktL4P!D4nUi+O>p&hyr;UdrKKgr zc9Kk~_Dn0*`<8jD>UE}7YnC$?e=M0Y?8Ixu(l1fczgZ=%k(KFj$&_fPOt0^@1{yYY zrg!rSGBD7l9_W4D15J(Is#&_MWz^`cn#M!L`ax8kDy8PztG@q!A5%41XJ>tc4kYO8 zG{Py_TkVwWW*WhYajonKkE89=l&pNYADI4z=S}Nl%N3>H%|m^ug%WD@JO68$csPHP zqNn0Xd9wnt2&}&yF3h!JxlEA9c?KKYvO0WO%F4IlplkL0g3ZgUJj)sALdla6$z$Un zr<0=V`-;@}knis4Wz-3#TuO?b{(5B?W|b$16D#GV+Ex#jj|JXa^(Qo)(k{t!jQje0 z+iK?0+{2r;Jg-ZhQaf&~SSsAfi@X=KDSi;j@DvXW5U;->+3(Xxt!Gm6E*j0K_({<- z>A&R7GT)5?%q6^4D-siAIVH{I8HyAqn~W^(D;^od-Ob$9C)#LCbomOQ=i{y1LeEF& z+;lNPa(C!%=|wS%8Wq3C#uHJ;9}#kcdUt+R@q4NKXd1I>sqk<6NTp}@uaHGsT=oFh zpa&@TW$x>@Md*!fh@K)v57B!~^sR)xt@Ty~c&qvb6&8wEuF87EEfi5sps#o&9*Ve# zyZTmJ-w?3M>XU8dmeuEGotq&O^-ui{JJHaafl<7d;ZWSD#EX$eOK;92F|4oX@qyYK ze9U|4rD7@H<3T=uzasRDoM+u$Y&eVM^&fa$lNmK_2KVoAUw_a75=Gq`DN2sR z_Ew3TNk2tAZ!1FL#ndNiu<17LZ?qPSVqamv9PGPBVzHKKOp^uG55!|2`NjT4fd0W1 ztM2#TU7u>FZT@BDet!nJmVxg6o5&>#pZ~ggM~_^vHvTc>BJBbHP;x;9Oa1QpeBB|A zjak&RrE_JSW7e1I9K%;3iF>Hdv3+%&V{mDmd0)--A=lYR9ucOyqSSv^^p>CT{uf+t za5Zxs;Ch!!mDfko{<&T_W21WKi?+XT#l{qGnMQx_=332F&-FIfSo(h>S3Z~Sk2}h3 z{YAUoE_Y0<+Z|WDY+)_xVR{3 zW3>Ep#l(&&t8?7SwT$a=t{-vj=lToRYvrVY3(L43=lT(sD#zoDiuQOsF0L3ZPi&mq zGbldcZ=_%5XI#1dz%_hrog+x5~34a3H-$*#Kt8gxCbS~ z7jJoy^u1giTqD-wf64VTuEShsxh?@Ov$#|l@y__D`1ttf_;^=5K;YILA3tczH%Nb- z>wmbme!0$(3LY=vQs3CI;&a_QV`HPhC7Tu~hPb}*U#WAXbG^aU!8M+Fau=7bL%xy1 z)ptr&B=Yz9qW%q>TVL+MAl?$vW39+}xO3dsG#1r0-oYQ7t+!;7~-Z!=;N64{%aNumn z=dHd_|mFPl|8rNmpQZ;->Q%uy_6^jO-I>dz!OP$cPvV2&IY<_cebF z?8fOnD*cFe7GbYi5&u^H8|idpzbzhq+8L~bU>5veGGYNQrtKGO^KH`R(2dgQPse}0 zM&I+OtTE+-;}+hgq*aLfS2{r0gmD{yxuxMG=O4j&i9sa)nAT>LYs0GY-}dr zq%)b}HMEzP<=SPLSVau35Wr(Rn3E(w-o(tA-k~|1!E$#nXJU{TUj-BJ;7c%~u)*Q< z`e2U7d}sGahf)0`xv~F9Fq}cGTrx>X5@&DKu5cflop=6uYj?QLeQ6Cn%+oFXXtPx8 zkY)@0kyCV1)ziLxDhimbM4hh8Q>tG|1A8`N9qt>EzTY<#{{zNG8riH#Pwgxk237I@ zDZiu(MW*>iRPXS^`zAN+Otys^(d|+C)KZVJ-c5KUj{GKU65g5kW)dTOCsx_5;-T3- z*mzU!KI$-rCS-b)(dxXy{JYEt_lgH{GQ*DXRuAPeKvC`YXcKtLt7C&Z7^iI0j=NwPxKmmt z5K-RBuQF^#7IVWrfR)BOjHcBE2f4&ds)voal}=2-DE~~H5Tiz(k)I`i|T7V zAt}%|9R)_gS1T_Cb$D;pFI~J`vwtUZpIwnqJy$nh09V1|GsL0INC;?Gi#9+!V zGSk8j*qwDU3N~{Z`7#2Aq&_$$!@&`D(aMq{BdKj8g&W>8jS}S2-w)J8@h@0D$Xs%% z3fBw0PHfASul_OKCiih5P_2vLkOxoj&cXh{^UVKz=Nai87_##J0;7m6XrZZ9#aOWG z_sw|No4Mhdz#8d4o=Tsu{|Bn;#QtQM716hJ=PLy2Y`ayy|JNZg-iPbR|H(`mua33; z%WmoG(c9k;s4DB#i{uz$OiC8adr{i`xR};MDuu^rD*1-s(3V1MK92CuJaOiIMHaE` z!EreWHtHsQK3<$e)64f<^Co6q$`^jC_`(zK?04@w+J_VygXOt67$3;+LVvI7`oWV($4&ow&(ow1Y}TXOW@2p7MGGG#g0E>FRz;_a>c z76)gz0-2szNw9x6i0=lKZ296=r+Jh0oj7;P3+(Wswr%C6dWM@%2lf6mj!)xCPDqtq zN3AO5NvbrhD!2WSo9Y>{d><#@mn6WcYJi;-fW3VBeHc{7J724F453G}xq@8uH*j)N zw?8)I5Qq}cmZ%~+9)rXtXfaQH0Qh2eJ0}v1K|EE(V`sAA?FLJ9`4HUlCwz-GE})I# zlrIm(!KiIl@LN42ik3y6Zi?#pSuCH$mQ0k-#;eb^%e{1LlKNW1@^q8SH_=|3i_cso zsq)z$rDX}*-VwUfXWv#sc2yro{f5 zm?58Ul+Q95vY`D~W1Rqo}pJFU;Q&EY0eYld$_ZFZtKo9CNr zIfauAN5zJZ9KHvLoZf2s3Vx1rq4yOB84l;0zaBQqVcaBi6b8VJ*^^NSa;6_yJ9u6J z*0k@u4~y8*K8%HDh{R=h=CM}szH=_dLduh#BLOE;$Tp5_5^y3Vl;go2{%Gwi7sa2* z$Ix3fv?a z?h5R@4DPd`E6_P^ZER@71j5_gRbbw|SXx1N&LtLVjaH#Po_ddx)LtNy46>o{NYoEr zfonvpyC(8h^CvyrsvkBd(=w!T|C0&GqFyEr=_V{gbUmX?76a%r^jUII#QZTQz z*0q_~I2^=Rd4S2H>Bmj5YlIPLW%3h#!Cq_>#p=)+=2|H>5?Dj9F3QMBZ8V2)Cb4L7 zCyQKanf>ELK29w0e36-WvwWQGO^lHz?@;+VvHb>nW)GP?C0+NB*&~^gg;2<&5Q^Hf9AND z;S551FSH}YSdhZ;1V~Z;ZW!SXF4PF;a%__njUoyaUx}oIcMAGf(aSs861`VMTs(8b zS=K0wOYcYmB6%l?E@6yQn`dn4{Sz>;4)OW~ag>7ogWkjpBJY_F@6hbS=1dT-P52@s zq1F`$2Mq1NF{aM}wRk+JqsvvmkU+z6c64iF@DRp!l*5}Jbs6(Js@SY{P#Cco|K6N^ zO5IVLvGW(sYnlTMgwc#jKS#Ysy|W~)MF&j6S85iuvK~~1d_%za=!(6risR=ehuTxS zN7WWfX1^JD$Byz&#xknn_}?q`;&FAdHm@#pQ#Iu!5^u_1M}QmZs^6Wx&tcvxUCcfe zXqH$c8Q7k)2lv+q$XM$+r!BmyMwO3Ya&^4L@QkJ=BTo52SP_4Vw@U&`iJE9Vl6tRS z;;csD?*%ushL0}H^=>|h84KEpl<@ENG6=?-<|8Bu@zY}x8<+v{ zQwxFjt15`|=UWVBEl_kO0)}j!h4#A`ns;xo^>k7s0hZ)|kya?NZX$hkmX8OjEzo!R z`r&VEa6MHNE^wP9FR6CQDrdp<-AJM_OUKh<@wN??9{H5ZzT-4&D3p@XI3j*u?=3uED zN-B>+NnhkQOi5=Y8+*@uxYBu1=(5ftvx&8r9mL5~5G32kY4|hc?P=l2_nX&Kfb>lsrEkyjYxT{TJ5dBTGMAW1Ev-(> z!c#+Oa@cBjn7iTjHqJ^WbWisvj9?T-l-$QkNkuJ(R7)>m$(1+Wq0a54vW8|RZu9Y5 zoteZ)jOZQ-#UTw=9MWe8)u$GZ!~#>O+R$B56!@p<78Na_q6k9!=7-^{r^*tE1O?R$ zqu||<^dj>W;v7XjOphc0`=Y7A`L=!~mXCmqn5g^JA&n!oqkRZnlb3XjDiS4Pl}0M7 zD-&tlG@sxDndkCY98~kX*1|c5#<{r|L)vGJ z3lirlx%Vkp-n;oY(xV6O4ufL5BobIgG3wS_yd#oYWL|r-4G@!U35N-d9w~3ME#b9% zTY|%uP?l{=_+(zV1x03Ct}S7|Eur*o6v&Sz!}pw!W&MEZbrXg+uhm$eWTL=w7^R64 z)Ua6+hnUa5b%=;^M~z$`?kRGp+bV)XaqtMI;uy216Teb|EL~{_kLFA3nQZ0_2Y_w- zHo4bKhmH2=Ym_uw-W(Nl&vqm>ujBDyQ{nR#ynfX zL0iJ)BwNBSYzb`zwuEOR3HF{PlwV2sza4|0bD9hHzmJ#NUUNBG<4DU&B3}t5lzhU; z7H_YYJ9yb`uX0m8BcAm=K|a31{_!=Dk3;L$o3AYsFSxyCv^|SElEvOCy;DE+N6_)t zZ!uL`*t*G+knv7_g^W{UtPxj0Fx>o!QmkhoC_UH4@#4(LG<3>HM`*lecP%ouQi@jW zZa;*qo83KXKJoLu?C!OE-1d5BD0Di@?ezQXt#`8taFp4j0P6UEj22=y_#UFAhe z-~rnrltrzyq4y&6^+?G@X2WnB%KL2z?|K{4s;TjR>j`=-pAi%_>))iak%c!(FT7elV>M~N zZqkQNTU%b36NX`t`SG>3wiuCwz+)*8&$~p*Z5#C1@}Y=$)HJ-6n%gFm-tRnYOO`Lw zR*o*oW!$@`+vsvRpgc-iJ-EO;v|7nBSm#C?MM<@DlOzIY8f;Hm!|T8qjgNO`XD#8} znsNRmHhryY3#@@`^1my4k!Cio>77P2C%+&jto77Rl`m}HFDkatvW{;SJt=d9QShloa@kc>Ky*9 zb&e@daegq@E&q|YOd{E&waPf@hZQM^IOk#h-=2vb&fysyNKTkuBp$|IfgyU z`AJ;cxXy76e-8T|u1Q=EbDiM&j4N{+^>4>kg)4`Br~I+?kBW9+I1=Z^;=}X*sQVhY zsH*h;837q}WKc0N-|(#{tu#z=!9sC>G88q%GE}OyS=-8V#+MX@21~k9R#x^7Wo2cX zZCYAZpsr$?Z&^{=hUM0su%gWrik$!Vd(OSXonaVo+kd}SKZkklz32Tr=Q-y*=Xq%l zy3?U!rw$!D#B@HZ3sAW0+1K)9}i1j30No!__czFj7*S3X~Cpa7ym;n z++qXXfSa0Pd~I)6gm>P8>bBBw^n5E2ao%5%`^m}79Tr`2BMQ@85MIQTJNn%dUS-J? z==Z_}ZYxY%;e|_hDbc5`ducQX*dly15->?R$;?voP@M+ORx8QblB5$QEN#Aolj*T$ zSA>!tTMfFc-f|=iH3NB4N1tiZ1TE*bR>K3$j3ry*pRWHK93w(H_2saCAkbT zVR2dTXq}v{xE@Mg;NYTj!6$Ur(*|t0-{3@^^pQYf*)RU9mY2A z7-n>PB#?e6K^%`Yvc}M0Iydcc?4*>=}LnPJdqq7<56QTx(n?_@;s7eM%c8vVTBUh4Mr1t+et z`3=?{_n*D|81<20)GPa|hk#YTzxu-9MQctr4!LX3njZ-lWr!J`P?m5IazaU&FbZ-B zaPQPsUc1{0y8_1D5N6P)pJD7>N3idfepIFGoA|W!PtIwWKG3?GeiW z1S+~grl1!1WY|85foQGFjxBN>(Q|(sQAF(d}G_<`b5xya!HuG9R}-lW#94#X^qj=lCAjOjl`Nfpss zU{*<&o`>NFFf@+2)gEBs&mZk|9aF#cKF>DEWiSO6|84eiR0LNa$CEN^XuTSpE@joO zn*^$aD+X9>F;iU4(}#sOfz2n=qL(WBpeu#;aE6?h9-|(p5;X(zrrU&r!WhSPjH+Y7 zs>jR@>w_@-uFV5wU%A>I^fpWVj!6tRsjcS5Vp~`11qt1+drol4X{s1$;Hf=0V$H{DXDfWC`B;$eTHSoCPPW21&Buzd6<*nVtPZxq zb3(`Jw=_B0R%k{fF@o_nfhu%ESw$%#+>@kWA6rDp7_SE>me*WhNcQh4jDQv37CRh4vF!A0jlW!S7< zj&SUd8qUbQ#2NXYZ(Jyh%Y4W;a%@*r*oNf~HWIDK5##4uZb{H5_!&uGcPaTHD5!kFm zIBuxMQSax?NZhHEFm^c({45u2ya;7-G7Y4|iG%YN#a8}JEQ~eDgNbvX6x^Yx$qhe2 z0Oxh)ad|0WG6Nm>)tQ0S7c;KB|9PC7qq`ZmM=4>(Ex|A2mOKqWzyF~Z+F>|Ui!(=8 zo;f;k^6ph{p4wn?DBo82D=AM}7P)C=voLVyvTBaPJ$DJJbf7N(sM$3}sf49H=V;-6 z^yD_1v#X;7pQRbR#4(V(+%GI~P%s zWV|~1L+qDu)u0{9oJ)+<&#)Ekj;xy4ibD4dn^D|YR+6=~Pc?svA92-njdj3ocb&Xo zX)C7CgYO;0RAA_(|V@3Ve>0Cie0yC(|t0{pF**C)4A3 zY>Cpl!CfnlEo-V)kC7K3zMJnWs99|+#<+A!B& zr2WO~j7>Higq^R;aSAfv%D91W#N@J`Di!kj0+=`opy=t3O$=nnuBk&=<;XFd) ze#H~vfZ}2@&2cw}14=*4_u*o`3)7}YY=r~(l-jR&Ouqx_JDe^!abrF?6QOc(&^EeK zfg{GGnmL_k&2_{+2p-mY{P8)0@H$_M2YMd79C>6`rX{(m=Ik@h7L7I$@xI%Dwt+SQ z7PN`jCukD@oi^d(Vi>2l;r_ym+flQFXJj<@MdX3|3+>FzOLAQd45CHqk=6d^W6J0( zU<&QV|6gor%WnK9C2~<};MPyXvpl-WqZ#&Mk+28pilweXz}9dQSx34#L}7#tB)(xT zM&kY{(!p*}55FcS{`IJskF%%_(~An-SFp;-q4T9%?@K4gd#$-;RjlpmYN~!oTKzug zXecMcS5C9_d(4_f<_a$j2=10Nt6~J)A6wyR*;4L6$ zc~M@8>gXZtk9I;%@54_F&NqG#dvCMQK*$&YWd?BtbuOdT`SC^9kXjhk>s}L!)WDXlbztc@|9M`>q3O43A zHZ0nPwi_007n3!+Xk$$Jo8ru-5#;&1h8dgN7Jby#5tH|%Sv`+=2@xSaa`!N^v^yc( zh2rM3tzusdG;OP-peYfcKz$VZ3cnW}6#GiNxJ-}X^b;m+gOb`f7PDjD{ToUW!lZm; zNhO7%H-*%>EgIGzCx-8|AHjHZZx`*5V|6yP7&7LCr zI&!?#@>M9$zRrd#gAVpRAWSLI=u-QUohi|xVJR`}z#Yi*%qn$(R;hjJ=huKVR-iMp zZP8*F8v1mW=+#NbpjL#&uMgF=MU&Q}f{@DGzQbN&Qa=SYvZJ>?h>l(wiwn`bH84_( zMnY33P``@@gs*ELjcH#8vhB~w1Ib&5@8INhaNX+8TWboQzS+c$*?=Usp)v%Df%u_D zw!)s=f7p+tXi~2@Scy)zAHxa7X1mjk5f}k9T?*ru?GUrpz0X#FXYbN^k?-=Sx}Dp5 z)~2%%%{HpGc$^sqMlpJG1{9C%n^eA;F>Pt(@R@v36<9`GOyTO~ZJhh@-Cb2xlu=*Z zfkFb~)pW$bcUJB0%wt7)wac--9Mh^bE1o@`qTB<1bQNUl_u!)0mTKRFw^{1tj}?1o zoyQ2h5CH;R#9&-J>}kN@M#9?g>Ep%4Ln~3J1#-8?l)QBs8rn|?G=x;Brx#cnAv)5g zUhwVTAjDM2o}>X+B@g~i*AaV_aarY_HWXok!TP)61xpKEj&0+99I!au?tioxd9O3s z3cqIW1tKWggGmeYEXrK3>_jT+Q=pEMC5zLU$;j6`1?vUT1 z;Y1EfE3B8Dv1U|3J%y>)8omk-+WdH2`>6OnmVXn@W861pxYhjzt}4)v11(QeOre!y zu|*b?qsN9r(f&jm5F?Y>b_cH)3~%6=HWF{Ji!x2H5(BM_jP-RA zB5h@)hM8L_BY_NIhH7iHHbIr~`oIKTr8!y=&hUg?)olyDVB?i5@9R#PA=zvpQ=X-+ z{S4=NdkyTpJK=u!nCf^ED~)^xx8ayNMLgFw?wiX{F+&Fo!Xx9y-i!2^>%>0DR(Ob; z-HILdr%dWNSX)vuS1aRZ7bmYQ%3G&i$`=(y_7zF{Y=sLMai=o8C~vJY&XPYo&Q>@H zuk!PrGPzQKH)LH9wRSy7LS`h(yaayW*-uT{TWv=~f{kL$SkbGa8suB9`5Q=*jqbE? zU+AtnEnL+^kaBj!9KUiQOnoQtHUi#$VJHXZowsP8f7L9gQSB+pT(i~&9~UL)R|9ho zE9)xGer!Zg!1 zq*ynp5r=`InX9onEO)Jtr_TnVq~%DW0BNx6S%v*}oEXuwPo~G1T`_dhA+nc?gnBLG zf-YsQfH9+@%oRx$FjdI?!J_cSICa@GSVnLjFmcK>Nd7H=vDE5(cisw*s!^*AcFb)7LRXC&|V~H>sY~;f*YTf(Jt*uvL(fZU14ixA_XjL%Z>v1 z@IkEN_W=f%>yF`qe;`c=g!zwzTWnFWLSAo=5}Q- zH``)slNzHAMP9^pY_xEDvs+Eu27P&y@lNL3a4(#>UfmdvGAS}gr5ZKz#e2O#%|h29 z+v};}=cUHLHGM-3;!uM>Yc+_Yj3RFzvbrPdp*~U!hbu~JB0D}H`dO90uvp1IOHOc6 z@PlF^N;~!O7r4XOqn@~n3x~$y+1#&6Kh_p+bI#(^;-+{dqT21?taNo1s6SNB^b@MtZk8b|7dQ9(JoYRG`LEN8vmW1aee$e)@Rf zAcyLUsqr*WQrpTE`A${+!{+M#;9fbqIbO#!)M!7Xu{GK+bRgeRr>-_5rt~52zV@o8 z-@%Wcw%1u$`L!#s1CM{I`5A_Kt55h!9|&Id6_1HgcaOj>6{^;Q)K_Sv2rMQOfel7al*Ezg~2EQ03^BVe`k)r$1E4^?KgpDKO^3O-W zycrXN3p7_E+B#j85;;q-UJZq6eYZmNUljEne7dZLvNA)JHDs14TiiU&KZxCkp|bLNOQ?!knL%5j z87k!&7bRkUv)CBBJs5oL9r@@2^`DO-b{u)+d?bUfbU6Sp5=&O#cljtQ7>e!D0^E8D zwS%GRF9!n4?yPOW)s@K2H*p)P;Ctnx_d^WKf5;yT4cvA`Ih93udzAT!4IR@Cb}ZUC zMpI;c2=azPP9N5lFIZPtMj*u6js>9U1L^YUP}Ib_V4?iysdq8B2AxZJpT!L?=ESFu zAZOlZ@mVN+f~E!NSjssp^xXEUFCamKo}19ogUG060zjR*?hP;0-l)QDKQta|>7(Gi z;ATu*si`CI73?RhVGz#PVJoDWP!MpW$D)^xD?hcHh=Gr;uel5Na7{7rlnwK}w^k3s zeCP6yvdr+wBe}Bbo|jNy=AmNy{wy^bHBqoNt718?@dGLW#!}%#7Sf(xaj;YNm$Et_ z-;)GM*`A9U3kV(H*Qqhel2~X_%XOi$$#vnT)#$z8>q3>1Q>pA#!caY333J`y>@wbEWiy4dw(Q{=)&d*q;Ui9_T= zh}^Kq3Bs(2^oBMo&>38{b=@Ran8Ne5p2xvM(=7^U+pz|WmczG>0&&-ACGtU6Rkt5X z*fl(J&n)QWm(#LMPe?%o*d+*`+g;b0jAH|Z^?^jxK(3cUVN$9~%1=Ffp9GB-^f}8g z|D^i65GX9l*-(_X1uCS0naZPI%VG4kBC(Vz!Xn^o=i5ZYd0P-Nx4B-)?bm8G60&$>d-gxCDB+Cg6Z zQhw5uSE?rml||8MN%b(l!k-sun=8Bkv5GUd@3e2nCd{OcS_{IExd~3CV%0l`k|vaq zCX}h?;e%o?BTd*&n$Sb13EL%2*p9;tW8kBt3H43Wg!U+tXxxY&~{d6ySkd+P!|_Y**PprcxnY{XzX^pX`&!}&uK(qyCe!5 zU_Zim3oj=F?JKF1R>^uxV@qO>>BeU9fReXe$=M)@!gfg%_GE!5Y|2tcp$|a~cJ~rQ z;f4i)L}7cD>V1F|z>g?gD_*sbD7=fvjfg@^*zH5mYak2{bkPX|`WA!9&P{sG*SX7{ z0jW^hg(4CoSc9u(mKumewcVY!9(N~((Hk}djZZW=2N+ihxhW9hp{Kx(#scRPJtQI^ zdBVYEyRf#8gzBYj^wunO{eG`EKX12b8l=<>OO7FBb|-+BT&$_!23NZdjS>!yk=X&YJEBP~)OlY&9glvXmgAg|sh zNKTJZK8f3Dx%&t&86|cfLi{0+0xf2u)X{P$g8ly+7;%FjiW#@qW`|Jmo`9I1CtI6L z4O-rwd+|76>kj))+)f!bL+8qxv|uw7SezjU^Y_ua~Nm&m<&T7ZFtkzN4Jqv zS${I6pBeYc*iT(3`c-xyqy=e?UoH`j@JI9|VoU~>2%evB3kUVSNEs>x^j%$rBx2yr zA?ylRDWM;wzBp)um$zb)%Ldyp;COZk!tuoInssetlb>MiiW6>2gUG9&(V=7H5jSac zNZ7U715V2pwVl(Suu!1sc_bzi$KcGU}+6w;A0wH{%rW4|m;{$)?u&x~HW0 z35a4M0_v{CX`=T;6u2BT^m@Ss=yhM-q0-TZ`B*D&Z^R8#8qQH$imhOrmL-)tvoYyF4~a?SB#1vkI3EZat+BxyM1zN1XxLGF{1n%iGBo%k4N%;O+3oW`+e6#t z`>*AiCI`JU2if3@ul7x1gI}ghA@3(ysg?NCsBgr2zHEi;o5t&TnPT5W zarHG1wZ~fS?Sjs(P*=|moN_pyBg25D{62-RTDX*-K;-{uDZf}QA>O4%F9k zL+=`v;d7aV-+I0ijGkC!->Jh;f`%yUMD-Z>Y593OO<2l<=kev;{&^Uq85Z&_jP@HA z@|98gLN4{O@4>Uamizbt8HV!+wUJ?t3mDQ)NgF7n%H*2t?7{U|c4Qpa=`7=xT zP~ENJV?TZj=SNTpWW-JFwhC6}c=LKdc+@tCw7Y-Y;VaX&?_Q)C$%8 z9xl&o&CW#9pn2k$iB34FEPN*O44UH#u;n4*I%Pn;tBgzd~yFS1>q{6h z-JXSl<4axzZq?G!y-AsyY|EbGoJ>nbuNQ|GOowIsv;4P1yaqjjx(Ymlq?~h*aoa0Z zNcQt|@&+5!sgy8ONDkpgQz4;ddfU$EH{X@YrP>t{80-EwFkjv&JB2qe*mUDI&;QEh znRjsI(vPXJ;y8`>H%aKyXSLKxqDyP1O+6Dkn$~vu9E5eu_IQvJP%Uv4dwq;s4G{bR zgMC+F8~{4CY2ZKi#C(7$UIRUmQi%&V;T~WOv&f#~qh!zJ1F9ZEhW)U{sS24YhpB`t zBOhg|6@+wIMw^lrM_F_qvs8*F&Zf<%I3^b2iF{<@k_7;kOQX1_(&8y`Fws`H9eiKK z_L`>L(?BRzaef?LhD<;x_~0WH@w`H1m3?*v`XL(l4Z2+cUv;Eb$B@TRo%@)R5Dn!c zs{@tlgM95j{D?qk) zB|B>n3lQz)qiFAH09t#2#bE7uhmpBAZy$(FTD&Os;=?Goux#PYO%;53sDdA7!EYdj zESQg?;5EjA2l)#Ab+0J+;=^mho!1o}-W-Q^iw!39R25r5i}$;Owpg0@O<|W_%7S4( z7cdW8quH;}S3tkE7X7-`;{0=SrOXOmitN`6mQslrvUz+I&C3Gd>sJim+UVw+V-8-B zY|d3I=vEfgxs))QGliuYoAZJRCxzwRMuc2`WXndVsimKgxTS^+}lueulM4^Y)1;(F||=Un7@yBRjLupy#l!lqsczv zCD+iERKuK$7+6CIV+~zpP{TB=CvtZ;$WaRW7mN?O%mg(9cHn%L!=_%{b}lrzV`tO zwBdd=8-7q0fl*$MJ5Zhf@atL}F&Cwr+9_1&+9*4zA1BV#N!y%xFxKX?Nhj@&W`T@j z3;YqP1a62}i1`XA2fL$F2o-5|N5ddsBQ#cZtFf)-cG2WdkimnZO@8Kg4fZR=O}?R) z*|L^`J0h#kxF-{i;9i&P|)A}XQfZLCz5@(0HzlIkgtzvNZ z3Y&|VKkiz;HvT)W#ciA)uB2Ov!|$Z|;Tq>S$SMeihmg1EB>5%t!*za1t;R2@#oRr; z7-jhQB~co`WQWEtah)K)1eT2J{Vf^OO!&3vYjqr|Se-kwln)xtSHqTzUo!@@ycxRb z_O=+H8&ET%bzAD|;i#BXKg+~J&z3i_M>a5f!(lK~Gs#(wB)+@b07IN&M1AKs_}8L} zR$U9#xgD%a^U5&7h}6U^wd+t}MXEMS-3Lga`wmneq5%4)5N7P#P4v2IRU0$z0`5d7 zK2A_Sio@&@{#wjagbMGpHlPKX6{)phQ-$#iXJ5aKUeY4cghmuV*F$z0H?s2LUYNvL zg=Ed?A!k8909TC*pTJL3LKs&f9}ox8zYRhd`Wub^ZJFpZPQz|j(jc=X6v5%UXg_q- za0%C{x@X}oFh`eTA{f-pK0sXbAE*K?Ha-R2hep>r4Xhw{ZFl&bL<71Ye@I2m>~ z)$@_shnC> z$o2|rgzFcI_69WxnmQ0BVQ^}=#F$p@X9i7&(w38H#eRm5Vn34zK;O@d=?)Q#EGQLQ zm&0u2+<}k^vlYI{u5a${&0RYHrl{xjBOAYn38a;t+Vh?7;gf5j8&FwNnR82^SS>H; zs-IKFTBJCgE0U5d_0^G*4@=qPqxC}j5f)984&c^*r%!xl6X=syT=4Bx7d=gx>Uzj4 z4^}E5v)s`Cco~M5yEWs1l4OYW%O~%btg}W*-{}W)yC4q8#fX z9jUHFPM+2H&Yc_IaF|Os0l;Z?X6Y8bft6C6UZSe~Ot(sjoHFKdC2Nz-4EQKAsE`?y z?7^=lk>l_FL893PsAH<_nOvY59|f9i0idHr82y=e&*QaUm7MuW!ZP`u? zG6lft_Yd2tSubG52z_9fqzI;TMrR1%$GTOUyY}XJLB-3xaN4-_-@&h;0eLsG7GglKn;?G2b)vK3OGn9F!dciu4kr=?=rr~^BNnP}kW-$bkQA^m0~ z$GL_J!y5O${ZGo;L;CPMBfd%2o)FfLbD>v9OSvWPyQ>pVrVp6`&z1)Clw?;JHu%Ab z=)nyeP?Zy6rVs~)1aeJ-;^xoG?I$R0P03)@ybh9IS{2ho6~Eu2S8=GZO!M3xm|j90 zEe~Z|eG zwTQf49E#=6Un^1jn7_nwzHQlgs7o`Y3F8wr%A9cJqw=4_U^2$pni-FUoOl^h+Y0}M zk%WXoEp893>dlXA!c7d+Ss}5WX)XBbGO#4o*qx7il|-ogo!SBOI$l>dSV=CQU$4MHBEH^UD;WgwM=(%>mX;}wS%0!PL>ZsT>6!kaaTX$ANR6$<>bd_ zp2&g$c+-Mk{Hm5|nKrcuMxMD_v1m>QLEo_>(T+Z@D=E7?GFlipa$YuZvRd33GU27L=!1_8 zU9?}q#w8u)!^MxrMuoDmq5QPT*=l=P{sI_7cMb_sepi&g30YFq1Sr1*T#S&fwsBND?4+Am?>ez-d}okdWwv|FKTdkhM{iXFNTwRhV&z0~FQde!w9mL_yt zv|r_sfm|O?*)24qr%eEeJ~vjCm3MMjE^D$Chcfq}}*38)a(hQR^lbZnm@6)7}J#RSe7 zF$~z>{c8$N@7rU=r10xA^cTs%@f7l=2cVy&eRD_gCOp09SW`eWlI*pvyQhj{M1$`-AHG6=5!EvuO64jeTw=X>3#wpn zi6vyac|#9*{O}^X%JuLp?7rJS4TfG5ajA zu=-XK8=NMMKVzJ*4S#(PB$Gh-;C~YCqa?( zepY=hWaf{nsY_`u;kf!%A+}337=VQ|6iPE9-C=ts2NuZt{idpQZ&}q2qDJndNZYd4 z*@bf<8Wg18mDZZtVXAG}J&Y%;qcQ2lO-D>DalaxCyKVv344~i5b>X z-~2S#w-qZ(73__P9WRzz?sy&BG5@3nOcga?gj&1d>@9cVHTa|+pM|+4cH(^G0Re_M z3F#MZ_Ns)#U{^v{8Au8vy0*eEFzbplqKh(*Kz56(&EAmJz=7cEnfmzlu`Qd=8SiV-$+S3_XmQsX4%nSo`Y0Zpf*r7{FQ1*qm2c}^^_l|z2T9XHhL%Cng{Y;Hb*K(4MK>Qpl zpc>_io}jsbu;SVM6q=-I3uR$v1hfTkMu&g3JaBq3qbuQ`KsUgpPRsOXa??ub&kkUj zW_{~dP9~%Etwx3-NV6fi`pNOn!B4Sx_TbT7J4~CdX)y`A5)SHy*L%Sq0vu^aDsA0c zEs*)ng3R|7kog{^$$Z;hPaBdoeu8%%_%Ld}Q`|xglAYpQ&@hyK9WoYmZQ_W6Ca=F; z?~p-3I%Ljb@YUwS!9)0X99M?nWSI37uGHIui-mnPs!)F1>rG9{+3$?e6nO1bo(rIQ zs|oAdcs}vnT(p9ieJh6$WZQfrI#39r9;p6Y=V)^?%r(z`6IVl$~k) z(3K`N3$d^g>@-Vk0TbpvG|S0Z#=Nro`|`bl30}1Pq-jY)c1*Ef0!)n zXTqi6Wcn0*WF#nhP!?bxumHOSvH*pAijNHl1RJJIu@=vcF8>mScoMwD;R)r{t&(bN z>7QV(cP6E)AY&@52aIDB&kIlb#Z}ECK@J?qL2wuhHn3>F>JGfxtJ+}S7_!=Me-uGT zYAWUt|D)7rZlL?46QExZ$cJ*fH3`t96SfEKzwUr9Lg@QnylZ*p>EbJfVCQ`5lWx2E zzE_l~!bc)ILq%u68KJa?nR8^h-3vF&P0)-~GAD{Ns=(%%e+@S8FFq0m6b_$%3%2%u zjo1i%eyhouo1gcq$qApKwa`{mwijg{+G*d<0b*(UQJSe}ibehYJlNy0pEg%tEW2T% z`fE4sO`N;zC%XOtM!lJ8WB)0VJ%Bb+kfHIo7tterbI>U5u8yki63-*Fbjoq!XBLeNbaf zrvMetsbGz_E4xLVvn*;7>WsLWE~OiXLG9daF)aw+D8eWBouh>y_;mSY|6P3Q85Eyh zJ39nEJ%o?Ir_UeP@##ZC5}zI?J{h!Lf4;7?Wr&p=0%@5tzFEQ zmb@v&EivYHKU!T=dl5NqX$m>2uL5EgbdYD>3?Sx_NDVQQ1Y-7Y1~Dg}3!4%+fpBh4 zR2^LJZHGGqo8fSWu0ScCg4GSsQ(N+luNx=q}djtgo1vvq!;In*0?9x~b>GDpvz9AI@ z2?GhJsvV!D_Q5ycT(`$`oa;bH;@leGoF*^bTFDq#e0jXO?VT5hc8wU0V6=!+j<8AY zR!3mR*O=!hj^|)az(1j&gPA@$cyZZs`|0A5@w6S?7pF26R?P$j1c4Mp5J+q*{1TX^ z=;#`n4sO%w-~^jQH_}08+cTnrUt{g^r-MJi0+x8w0y-EEq>K+h%IN|rm%jai0VyRN zlt>_G-Z|PVfc`otbcIIr1ijO#T_$R#k-F=QxF>T7q^Run>NP9#+o1IbM-gtS| zGr>6ZYgOVc2@c8uZiR`d`&ZeauH>z%ZiP)S&>yR1?xw>a}q77GR6Q@tPN7Jwkg ztb+o{=|ixj;_Fm&0op2>1Zj$?YU~$!XQ-{rRr+3vV=m}XOUK*$2N~~ka~hBLB}erp zHa*@Qd~wcTyjL#tAMY1&`SE*oo!^l1!ZbVAX>Kod&+Xu^^h_s+_qC9qqm(}aBu=({uh zx6_0$R5EbBclca(OLz#H@a;eKI2w*Xg58f4h|@`#AOKbL{D`Spi?a+DC!9rV)w@TT zO`bbQOwNcT*b4KRriEky)($}xxD-H8zKUq#R}GMdxv4Ejm%7jNHmhIO`=QI3(FYst z9{&N>gUG8Jk9}vYjiJ_qACBnL<_ze=lz{c%?v&q$KCoOPeYk_i;1;e27GFcvfB)<^ z;AgZRT=b_u#&~zhZam)o59?#u^m<_S#W{oVUJ$SzJbLNxGu|xMINta3nA*bej{Q{c z47F9=e?H#d5C3C~_qmfAkM|{?=uK>TygT^foWXck28{QMIIjI3>p#mij`!0eT0Y+K zm3n8W9Z&s+@xJYkG2X)_HXd*L$9fZ+9`D}1IA<{4tFf3H_xEr9>Gv6LmTMgEzbCbP zyc0jtJ45aBQ{(aW*Dq}PJU4xI6XX4i-`?&2`*|*XeB<$+^r38`HN@U+urH2pys3{w zVFceEZWA|ZTZ-&^oPBY&+5`>*wsP`h7tfVk9IvpA+m?u7UwmeJIC$x4;r@+9%RL;J zyc~6G-&nkUxZ60q<%6GeNbec7|Brryub=OX_9DQIZ}L1puBrJ>VVZ`f{r?~TaY4ra z1KG;hP~-25qm4hh*`jaWHKXn{Ja3OB5^Q%4!1wiX?DIM6+56hb9>;Dxsp^)Yzr${x z)sTmLRs-n3ie%v}Hupk)LVXq%Dq6bO4>+jzl-l`+p!m?z^L{U96ZGJB=I;#4Y>W@~ z1G1H&_Vc}caeVYZkb;o>o#g@h`8Q$A=J#0dS*{=bhda@h4te5!y))E4-}?=@*v~tR z{5;&5=fA7*^JqmA1_gKACHZ+5EyQ?_i-tQ1@bem<;D7L=0`p_sJ1UFj$0%d<6Z~Go z30_|J>6wA6_papX-4%qZH_pIjFmUxoj``FiYX-l(8dq=JKH1QC0~H92Gr$)o|6RcX z6I9?X!OhECjj2@v?jGLZ%F(`_)F7VJ0RBMmZngV36y6Uh+ie{nJY`>t+sJ7AZo)6k z1llVQHD!=W|9?FD7mtfpABBYk&l;ZHVemjOJ%*fs_Py3zs=f@16A2b>I zdAoI13OXACWk_ODt$RObY8G8)s52(5*o=*Q7L`m{O&`jHs0f4qIr z??XRWu91Gs860xB{rJPRyY+^uUwmU6?neBd|Ab$-ApL)UU-&^@^{ixW^fUUpNCtJJKA%FTCc$-(iOllwa6T4e$$7FKRiu?AoRGi~5@Chc1oq z#h{(+<6fO^^2hUz{@-@0tMq(X8`-pYdk7#__%m zo*G-apH%;$cZPcK*nd9Wz1)9{@jjK(c)TNgO>BC+k8any;S9#RB4B>s4i5{z$N7Qf z8pnGMlzCb@-nHBGhN@rSs<>ghcV_hb`#;EdM_$%=ygU1v*z|b+uvPDdGZ^pn0poo) z+`9Z8sX#V<7b z;`qk^`EW&K+|`0dK{o>70oWw&AQ0gCm!$?W_cIrXNPoXz$AlS5Hs|jI*MW`t@*Q z_JTjs{C^h^_yQFS6cDI+NAH@ZiNqdXoc{=E)^aXZoz!%3i^v&}Vvq&Wj@?x{%exLP$ z$A>w33*wAHut&QK5H>ex5hjrl+S2|vIw?0Loj0T-?RH}XRb)xe6903E}YZXY*q*84?$1~<C*lG3S}Cq0hBTIXgSK<`G(#v>TFzI`%vbL){~`oHL;#hUj28xuYCC8 z#smNC>v{v59{2)Z9RKyiD0v)&eOQJy+&A{!&i=m|`-W;@?8CdYeC+SusCSL(#ND-T z>!KfdYze<*+c@Sq^$zd<%K)PADC7sr46L*7rO1l&)a9sB$2Cs?j=KhY8H zFI&1mtbR@J4D}A&P8&uX<4ylpR^`;Ge|9@roLYvi$XY!MHMDNDf0>ooCXcp>#l1Jb<5U{LC73d^fFkB{n@mq7YCPg(@_uk zrKt7H(jlTIaJ4kb+B#ePOpD;F0s52W$2C!Y&eJb8Uw*{}dihJ5D?g`+@}VdYwEf>^ zLuX8|wM`49S-U6fJb`3u^>%kO&g@`4O}P|9<* zT20X8GCb)Og!qwi4~uZuMb84N|8iw3^wP$@ zB2=+=-s!92oxUoHJD!4g-&yrL2S) z0H~Ey`w2Xj30dles9=7c#q`!rvD^78S8vl%!YT z0=%E5RpA0KWtfkk6EwzMSy0Z=w!OYBOWoB5tQ^~{IQdF_6OVdTVPaHN(xOD}$QPKi z>BgBeXDY*#u`vV2MxXM)*Ax`c%YP16J}nZvnDXjgVV@S|)T`G|M`ee}=vrh(+gh&n z3fr1gId_SsFcMlFO6ZeVpkwB|h5I{;&@Zzow+UI4+d|8tG*$R;d;Of{ia@X8d)N!J zU@NUvmf9il5nXpU+@!vTD{_pm*q=z18Kt!}eKto~0`HKCcX2eKi#5(~FwtL^8<0&} zqS!tS$aY;k#zg=*P|-5&w_hZla^lD*HEWc62SuMBu`rVS*N|{>L)Ee3aqaLpkck1qZ6K8 zWo^7efe)$&dfQMqgPkip!NO42D6?kkY@41UO79h|22tveC@kz_;bR=UL(48891VgB zbvSPl5;G|p{p#yE84kDCI$@yLzXj50 zhl<9lgV}=4rG&X9IgVd$NrW+YkTlq_ly=5O1m>ZcKVcr<_D3EwNY-kYT$(?T8Cj4~ z+v?Hfo;I|wmK>N#EY9Pxj(TRYmYH<3MMv<-)}a-%vrZS;jfzGtu~bjDl&fvAhZ`Q4 zPeI~)sVWkK@A)lG0@yw-2WYST~q#ZIDgiL02bqvH;WdUsyYo3g|3h%jH znGL+>s*p;+RuA5DyJ~4W1gn6wnUcW@eBO^0VDqW9b{!(rY zrh`nooXYM*x3+4G@mn=OUyZ9q4CYLX;~05i1N&g4&cdAG6Xs0m3Bd{Dw2R4qOItBk zw?f~I(N+via53u z;681h+m}AI9Cspr$Lef&{E3~STZrHx>mx*&6Y(aPFDCacFI@M)VUgE1ssd(|;DZ+i zl#0XKBI`|z01GRlcEDGM0=xCFbF5o0hl|pVa8X*1R>2s-r8r=94St*~WWahw#mVGYc~9 zf=xsxzM7!^jj{llbirpH3qQZQh4SMoP>>>e4KLmTiv8qMFxuq+WJ!M?n+5s!tIV`A%dKN1u z+#&K&lJ#g&L->a72tfA@ZDXgYT`q|bhF)Ny@i-#eg(9giudp3%=9HZ67#Gby-0+-A zSHy7F5og*-`;jnLgkrC(hCQ`P6}C3GD;bXkKjS;ESA1>lwpWH%?>S|M%W??FW>z{Q z)tjguw|SOXeVTex>uL8N7XGKI%bt<==(l?o`>UqtVJXf!zmXn(hb&q`4~Md-AoQ@O zR)vuCu;?_rA~x)wZ^z?*fgaA~oNj6h`-j{=9~fw)hj-)FS*M5n8t9=UheouP9)&h> zqj6ae41@3}#7Ckv$Q+EnPY<804Ac8G3Tvu3K84BMEjLiwsf+i}H+7d-!+Yq7cz($S z6wppyhU1Li%ra~nw=lVJ+h~Jvt@+{ViSIBR**L#o;|BAcu#Fr|I1+X|izXex{HgA& zyyyM`&Q)vRUZdT9r47hm(WEL&Z6mdl*6`?@3?wECWq~khrJ3oeK#;g9b*9qJI7+~#3prv>F^s6kDD>R zku{G%g2IzERN;Or# zR9|(JrSlC_l|BwYJNbBa;iF%f(MTQbSi{thF!fqQz^cp_Sd~%FXwQRzX*wZIC&wnH z`7_fvWg5N^yWa``-2Ilk2VnWAj>x5xXIx+|vbB4dOE2bfAtJEX_{P`Tu7RoAqU^Sg zN~ZF3MXK5kG8Ny*zOEvqojpCD;Im(QJ0N`r$1$dVf$29P0(T*Jfx4HR!0&RgZ|~rF zA~3BiyOwEhX4=JC*?c3*Hq9`UofDWo5@km^!VyQkfa#MFp_Gq223cg%@RGIwG|sH& z?7%Ffm3k|)_$C%v)Pdh5jx9{h!Hxld#?LH`%7ta$+WW@9KsDFFM5agiV%p{Ao!uduNo(zCko`PS^!o4Ru zcrK%v%el;DsFn-gh+MAJa>+8}(jhPxiMLlVm!n;fOAT0k7)QR)@%A&k@~gj`DGsK2 znQ68l0y~dyM9H%O=re^rHG-sGz|^-g^%5;L--y)thSa%%soS9M+BlXo^(Ngmb zQJXj0o%)zL8ZqCi4*-1E)2BOh1k3Z`RWD4bzv@0MLgtD=@W0 z#uH2($J7^Tsrg29XgvTO89N51mgpazi_~AlAoUMcfe?J5qyIng%CEgPprFkW%QSyu znzs>w?d2O$VjKXJ2xqH&gCQ(A2f*@CQ9ucs=N{$<8q(bnkGBmpq`ROY*D}YO5M{g? z4=D;sL%Mse4y;6HRHCyZ139SYF-amK0F(Iw6)&BFU#=Y2;&=I|7!=&u(>X8?x&F*x z9{=iuJWjwf81mo?l=swIy&E)#yWG+uJm%kwbyMu4o9Vpx4 zc_c8E?D%}9`U_JnkY)3Q-tm79Oe5>NifJxkn$a>1Ux@my0U+x88~}a2>=l@cEO{++ z`Mx7^Io(#YnlJQ{tMSUOjdJd9VVbv?<~>AU8~H{I`E~%D`xW@rDfY90xkyyq!(3d< zrBKU-Z$vJKWG?72tLMhR)U7e%tsO_0dKgouAwnr1Ia8~cg~t5z3=B*viN!G{t?z)O z?X-gVh6RIpDAQX?z5}2Wi(_p9x*-Bph;Y;}pAF1s8zPkQ5k{X*h=k-mMtEKdOepDY zEfX$c!n+Xxn8p|A^AgK-EL76nTLaU^pwJkH6;ag7n0Bm8%NIyn+8w`=Lm1;p2uv%> z?Z>oXOxsbWrthw$=Np-R zwlV#$kpbmvGn(n&$LYv(1QEoH*3yd^y)!VC?5}*LdYGx6Lj?2}U$DPc;#co$B`~d= zldG6^D$~xAY54+aQC_qsJ1~vxrL|0RF4GJ}1lE#oWGmMb(tD{(V0t;HH!%IzQAmHX zwM@@9VvM!`;G8bQuRf;_Ad(-J$dTU8TuPbCdMy{e5xMM$!x2Jy8z$njqY7_4BMH?I8b+v=&;^7{*8}QH$U>+qp=d%jLfr{P5Q-=C3vQ?! z$%K9<t)kLe~=djF5xS2ZWr2b`i=a^e&+lgf;>j;$++C=DKLfZ)y6RITS zCUk<(LPFLX0NqL`me8LG#SxlHXdt2SgjT(@+U!XuG=%R)5K1AGKayLY6-RdVo+2p&~;42rVTvh>(j=GNGFYWf96HbS;CA5Ih za6-!oT|{U#q5g!{6Y55&f=~xSM+ij{I!5SM+#@=U6Z(-*Eg=sf(@a306S5NekWeh4 z-Gl}aDkqdo=nX;{gkC0e6`^Mc%^(C@)2K6{dkHNkw2aV7LW>BM5W0=f20}Ly+CwOZ zP$i*>gpL!soRH~8K$j7UCUgm*frJJS8cnD-p(%vA5ONS|PiQfrFhZ*d)sb_(j?njn zwiEgnp+kfY6RII}fRNPzXeXiWgx)4Jh|p_5iK|(VKDTHPdDj>9g z(0oFR3EfO+6`|`1ts`_bp$bCd2vrfX6FN>PiBLVE!GtV-0dy{*SVBDr#S!X6D4tLo zLdk@@V7fc92>nFp213<@77#j0sF2XdgjNxHpU@gY+X!tSMCUe+?Sx(-w1?2MgenO= zM(7x!`v{#NbQdA(EI>4b?ua2Ymrxv`zYvNiG@Z~8LX!w36BsOUQB)AbNy!bSLx@p?-u)2@N9jFrh?3#e}XTTG5`N+x;;Vdlzj_+E8=?xLaSmTugrHI* zKS#7hKGVI#a#rKP=coK7%+uK#!g$fu%ODbrd&b!w=|oZ3_qJ>0yX(4y=y>p0Y(Atc zStE%=;!mFl`3sTHuXpML7#kuVKVmaQ%ctgqAU4&H!*cu~zi86g z0Zlqz7TK3S&0<4b<0c7T0YJccR`v6J1_T_vOdq)3AqLKWb_dS9$6&@^&hA2F-I#(@ z73yX5X>l0_=L=$X5A&4~7qpDUzB2lTC_~P`f9^#W6O2|r0O-T4L|-2LLgX<9_ldxZ zt0y+bi)Ez(@7}T8>xC~=kdI>facZd^_o2b{h>@lC7~Tbk{M0xR0b;g{0`!uEU%gDk zsY?`b1_h7PO~m;SagaQJQHsfF11=rX*05hoP!F3%$VPkTW*~Dx$<#0Tr9$nF8sg_e zJmoLCQYJp8B`(8DEoqi_?p2;sKNB(gH{B!dMewS(?4cNe&c`)${zRl2?70;))Ll2E z>C~7$V(Gk-OXqlGBK&E#cB@!!=`Y!eKdv4Q>&;>xX5vqT;{;2waVORhwUxd-cl*Y1 z_8mT=`oT$m%JAh=qWwqs)9f_5B=|Ivoioo0n(Fx!vdiweVIi8=Ksawip;!R0CCtG> z;j8V|0)2KQc@~IXOAe78_EzYb-gF{eco_FE!khHjyp^?yK0=>(a!@HeicZ4gSW(AO zAu`obMXY%`s%&~vbkz?L0##nblZF*B-np@!qwqQFu1odo5Sfo|LFUo$#_7YusWS6b zGV@G6rDC{Ea=6cO^poQpiyt}8=Oaq~qV5t^2k|uqzcbS{bZ~1tdgo$RsrA^d$>rA5 z6+$%by7V)x;G0i~*8dnTTEC7@f_Qj#{lfe*LgXihh{$VOmd`6xnjz9_LOY#&ePA_AF0Z@jJnDxhOR|M5)-@XI9Wj zcZHDrYCndhH|*1kQ2@y4ovrSLxYjYX=g}1ni^`XIvf~Tt_F;GEDg22ooZ?Bq+%2fv z&sVpJSJ!&tIGyWqJa3BUX(6iPzZ?fHl~&{RUMMK`^ zPiXR3u*7n}6r4UPX*mD2o}YrVUmVVU4hIGv$7?5ldOHgFbGBn8e>yqV@W<*{$Datt z7W~NRp2QlYMbqQj#mFa_`BX5{*^d4E>Et-VAFD&%E4}`-ivdWN2ZC?l7LF zFU9@q%E04vcbWAhWF2^%p6e^2O^6awNleFBl}a3nF{?GFP{rY0d8n+krNif!*mjoj zva}ZlSxNBi;huU}l9Ox|>JD_oVnMg7}_`m84xEL26rdT!k5IMMw; z>>KzK;kb%}A$B_PC{`Jhm~c{=IHdfGRz;a*JM9(7+yrsp@^4zfaZ&n5MU!fwOLl?s ziC=}kdq`IJxvyE_3R&R_I&-dsl&VeAjfoB96wp0VEF8LGS`Af85K*o# zwXScOeoS{JiVK#gN5WxSuhBX=n%O92Kc?5UEp-ru~z86!v zPWMee7{Y$y;8GGK>K++2 zLPU*WXY9o7r>D25!JVONpmF;iLITh(r=(r0wU!i%LI52!D?Jk7SydISjD@_-D=f0{^Y*q0nrT}{)8s?SkoS8 zYE2s}PkqCmBeT4Pcvyp5OyFUS)~5;Iis4bU$9{M$s9Vhvj=;@rLER$+ z4+!v4f;$BG7{Rv$_$0uli}F4PS7e?Q1?v8wqXbjoO9(qIfkiUU<~~>pSNjW z&f^zsKC@8+H2zPjf8(z}G~hrgf0}Llv;SG+f5auGq>r-wpkG1SKUc@J=Q+%`{QwNv zttwypSNE}%qPna2)9j>r$>jNa4bkak=6Ix<;NJ+wAoGH{S3>r)#G&0-Mw>nXiJ|R` z*4cU$A~O&oj_<=r)3|*T=g9WKp=HyEt1~48KYt7EJp(r&kKHTUf9Pc64amQ5(>w4r z)Wq|Ehi%+IaJc|^@fD(EaeDOhLVs~*$!#r;@Cs656e7OzABE1c7E%0Z7HKv$fi$v% zXJMb$Ob2hkEvU9WivAsjB#ry`$Ju)GH-~PhwsLhyX-rW^+#`B--cR^RjV{it<%BbxSwK#K+`pgF_aO#YaY=U}8*3|Ecc@*u84ZEkvdMbhKfj)3YyS85uSrKV_Q&0P8Y*o~%P<2IUZ zMtBL~bAk%GC_zZNQ5FSGK3ZdKNji%`c&mtT~uw`#FO+qL_*oV-5%0^QL!b*f)2oYCr zG>t^aL)eUP3Srna8%^^OUPkaB^q9KQl!NdL!cm0Y*KRZoK)3|qGK9+!CL-h@+=y@+ z!Xkua2=^j9g76H&%Ls2Elq2j$_z>Z91P{WG2)`mk=D-g#LN|o|2p1s?M@U7;M94_U&;m-)SA}mC3BNQV%j8Ka362eA=cM*0We1Py7!q*5tApC+5F&+Jn&=sLC!UYJ! z5Jn=5L70Rv9pNtsa}n|o?n1Z^;W30~5ne&qjIa&ieT0t@jv`be{Dj~|Xfp$Ng3tru zT!g_0NeFg?aR^r8N$5?k03mQ@G`<12;~U75k5rt9KnN7gK!Gr zG(yC68%=fGqgUhggpos&)#VI6T&Ejzaf+( z>_RwzaQ2*yrn?dDM|c$BX@pnjV%+C#H0?$B1YzoY%oBvu2yM_d4?;b{n1vfnlM!+e z{)#Xk;qM3&ZwLM$OkA|lG!5Zdg!Kq-A*@0_J%#Wh!ZCyg@_;i-&^CmLOA#MoE5iE- zl?Y!V%s{^lM1L(qcm{QT9pRGO(Eq6CBj|4@>Zqb_J@T>p$j!|)BeV(&k7ylf$<1xk zwq35ZeUuIFa-%zR>=e`atS*GLf3dl_UC++#hNtd5#H*gY;&O9)_vza&w|{Q#Ip^la z^X+-(I@h5{I-y-&;?o}2rp+@##(5tm+;lAAjc z??IAnY=wQBZ*YZ-fo^OcDROQ%Xy2`x1DWMlj$%&&{n{w+>^OD8-%X}z+e-O?8VRfM z3&G{^l1Bk(dU(FL=ZLt(qhR?*A^$zl>sQAi|LPv4gqh`jq4SR{4^ru08eKz{2WlZ$ zc1eI0Cut|;5OZn6TsoH$W-gUlE|AD>Em9v)k$yx#`ba3#M>>u${jMre3&KLxLQ7xr z1puuUr_#c4i|BO@q@fXiedAv~mncYmW6^#n2xqDNUj=rgSzuJ54Gc_WshwY;c`5Wq zi23xYmeX&r7j+t0v}8V|v8W*W?iXrR2sxh~dDm|~-Hpfp!hD)bX_Eh``E>MK<9vD) zm*aAL-N#|+?}w9VR#9}usRP&J#%GDeG@X`u{OcA5MVv4PoxH2BBjq&ZUpd=mmIiV9F1~Pb<6j7TK8h2~ zZ?xZVA?nc*e4fXmg5dKstqLLWdDj*{e0~#;XMoQZY4;3$FRY-!{uu^bm_Tb#d=CS$ z(R%h;)~IvPZViF`Hun-7DgSU5(?0*kI0IHM!3+q24+lQ|&G^vsaLe#vCW{J!4`a0| zgv5uB;oyLM z35Q`CjCZcJ;?A`mw^Utt-#Qj1afYc6-pvcVr4UH2cO9QPy@5i8m=EP2|K|A+RoSxn zFquUKnGct0RR}pBUU|1wUXg}7)Bxn92d z;cv!=)5xMF>tz~?3W5(8YE=k{507m0!-u=^cqaJJguT#b&cn?6pBmnyUmAz^(fL05 z*n~aU10Ve6@$Gr2W#c=OMFkn(v04>Ej_>Bz{Kof1Jf6Y$MmI6O2|fSU#@GCXaeUvz zy|&!%x{qHeyj%vHD5J5-i*_W>#@2rRL3DrA|D*0(z@w_Jwr7$dnUEnfK!7L#q6Q6u z8Vw>6#6Xw?L1028K@hN&#woTHVFpm-<^&-eMro_97p#f3)>dt`D&n;XP!a_LC{<9@ zsFa?VRAc1}gGT0m-@VV7IcG8n_}S-wzUFy$=G^w$x3$+^d#$zC!r^G%X$PDGt85lu zU$Wl5Ug4#7?5W{(_`|K}6dI4gq-q?rg3y&L*aE?-*<*2!C4F%$-$TfQ0GSG4tb{du zfP?wh;Aewy3)(|_({EL;c|KuF9~Z z6YO3u%g8_(T2px-oX_;_limZ<(s|r0ygG2AVA(K&&II(5;M7(%|L*(4iu)KMwZa)5 zW3{;3>fOgsD@)6;;P@-+)FhAm^sxGL8^j;(BjQuI_`;`6_3k756oy#XJ=Lj0HnR0Os}ZfA`5j@{{|PDlMaF6J$!>; zY>7G`DwtM>>&-|e>Y#jVsKdN2>(B#r=;5tq9a30_zBRlC$~`KI6@Dtv=46zIFxXmo zmTwJ6EgXNRt1BLo=PJ6yYC5KStWgwkJ+6t>_|aw@iqJeW!}{`yNI}=JARc59?^k8O zDf0mD#F*F0v5-^GuV zyl-5udfu$BS6%tn9KZW}kMCUoaXRDs&KvQ^_ccC0)%Xs3!Zf~T;`Tf6BVFysZ#d__ zjUTz?ka2v^|EWH{fmVZmO%aN~2}>vJ&2QDZNoj;jcyr8w7>C1#z4^d>JzE zc*^QOZ2}FBJ3eG7npOvDj|D=bmR-Z6hlk5N>fj$^%o^14f$xPC|6v%ox|@QwJCz26 z+>yeYHX*!eLi@64@LfRrJ2*8~FI}q}U^n?&H96~P6kH6APj=GSgr(zRM?&hCeDs0& z<6RhuK{dRlerY+qU{Y~*8!mJ$mmJd+3`7@Wx({8a4k08lro1JxRUgEK<~t8Qh^^|_ zJ2+&BD?nX<0W&1ObeK>M{S8nS)bJY2Op^d0_@$QV8g9`Ce;4kjj}XGI2|>7@=B;El zTX{uyN}mgW!gZ?#E*ao1j;)Y%``bovlL$`CA>N8PL`_Kd{l5FAyxhRjX)%)l1umJk;gsN*Z8== zM#NVR*1Ma?kq!Sa@Abfr#JZLQxHvC9wC;W185&Y;{ux*ZVBk_7yJ*Va;r}PB_0`)* zR~pn(>o;M{oJ<;}HkNs$7D1i56w!7>AQgg!-`y#$z{jhDpoB{#jK-e*%cp;cwdOP*fcL^+P^C z6@PQpBPRZ43~u%H)8MfByV@uG5+}6&yZG0i?=$i@lNUt!o6M;Ha4po5ajmgqt+9I_ z$MnWp(@`td8bM9?2s54w4r9k?3(jZNofn*4%r!GKe_r5g*WwG6sYfO#b!)#CL8|&I zS9JuopEJBp2B}(_Bx6g>C{cemQTo;voX=ypp;X3*k4E|{!=N}wlCDKzA`A-e#GW~m z6_rj7`;eB2na$`v8SOi){+@wPPwxMQS3TM-R$m^es+m_<_E(8!f>%IHf#bh?o~Fm@ z!#HiyT!w8Yfa>6!>v&W`2kBg=;I6$O9VdX-;tKP5%sUBGEXNC#^N!+X=#zM%aQL6Mgskv*_*Le^d-)KIkh!MN zRU2yh2<}8pD|zli$v`pel%MHs@h^z!FKo#XEEArh27{_)4biBYGPgq+h>Uo<0dQj9 z?hxiCao+_#CCl@EI1eWK2guN2sBnA>VKhbsBSHl4BQV1EHo!jFo5j(d0~L*dW_9*| zFO?sU)86Jv^pjlQdCSGB=4o6=VUYvHl_`rxfE`Ly7G=fZV*4#zC@HwN)F9_@ZiS12 zA>BtybOwu>KyPtQNlBg;#jXqy+5L=HF?wujc+m*;YJ4+)$1bZtHT~gb;-P4z5&sQX z%6Mq|Uy)e)J?vWsqbjFEk1JSI9C|!Wt3vnk?=2>J{72mW2k7yRPyXBF3D(_4di>Hn zL61Azb4g}v3-Na~wmg#A;;m%19_5uL?gUj(^WlC^N%N?Qn}BQvYbuFrPrU?OlNM(= zY7=PFJRR5chr7kY$c*X+-+lmC-*^27h||Hh_7~&h+lPF9%Ju&N6TXeX?SBB@O6hRu zze=C>^9CcnO}(&osWXar++_-y81! zZyVodb{WTa;p|h5Z_U>4J-(j<#OaLhC>9lGdyV^!JGBt?kK6k?Ft8y^!b?oKC=DmDB>_5Y!f>+tq?fANwJ_o-I#$DvYDoJ@-d0r6wljebO#2rGDhq^M*uS{EqwyW~FJqapO(>7~ z1lt4bUTEy3_PP3Gm~ntMK87!Z&{T$!PJr2Ff_D+jHX$_q_F1Y%VYbQpimD{YO%re* zSuSax7icxc_fh8B(Yf#$Q<|atJ8%>N(`02=;Aoo&a^y>fixdPi8Z`q)8X;esb|2*d z3{w=GlI~G2Qoji+S5OQQT$0mCO!qFnEK^sM2oZv^=oCU%ejR01JIN#XTAA7qT-8*n zq(Ho@zWqCPR5ZMTDY8=gUqmmOA}iG@dp+u_H~%G!_;8FWX-8hfi3=_51;g4#b%)H- z2eG=-$`KrCW4VaVU|nSh5SM_FO7PZ>e263U3z?x;MGYSyRviW^A+R#!LhpqA$DD=k zBTA!3y@{VSM9ttNk}Ti!kX7}FS1o|RTMbD9E1LjePuPDL5O9oiI6pEBw-rbRG3;(Q zdwfGp!%N1G!rg|X@C1k0!_MI*HpjGyb(uG@%O+s^dh}AceVqxVw$OjqyF>8DW7!22 zx3&%5b2{7L-)L~eHuz!O0L^j0Kts81__MmFQTgvDpGkY>^yqsTi;6?v$7xmQmcIXC zvx&YxfZOjt-!r?ghk1K{wDKh8MS`u*{rzW4ZE_~+9b-=!=n&iKyL zs?hEDzJ8Z!d|$%tcNkxnA^0_R$$I>2h)jnn)9pgdmEnP!%V?Ni|CH<*Zlc4>9QaN> z1_STz*!9&?DX|&m0+$!L`~$r7dEnhVkTE&WqOk#9kVH=E*yaBJ6fgVZSB&`Zfag^B zu>Z;LjSqv-ai_!2Rj{Zy_%KbYLbv$v;wBS5{1La`0UvUM)9nV7(D6atap=EozFS{5 zj_*s;#P|x^?{P}KZe6X}VMjE)Nl*hW9OS(Qx~=HiJP2`{8`U2?fk8ps=3HP3P!-GN zARS6iFgVa5Tf^5Q;<DFF$?H|84J~aZw>EKg;78M7dPX0kwp<8_V@kSFq&BpC_ zz^AV47e0kYi0%l+s{eDRMV{Ga#HWQj&Icl z)A-(o+yB7$KD+L}ZG87{HIDDb$@=)hK1EtYQ=xma(0A(nbNXf}*}umKo!Tq~r#&Jj zDZ)xtNg7H$V<6PaM^)~0+q!mNuQJu0A2DtWUp8JnnvT_%HU!|;n?#r(_hDFmDzF8Z zt6~#Ld(jTzAMWzG#~2?u{PR{p>+ot0On9!Mk~Hs{Ymo4aLfB}7l^u^9cXpb zySeMPz`Szhu^8}Qdc$zOlVR~auT06_c4I|F#qcRv$D8Zjj8|ddn!X(tzlqzS%lG}F z-hG%)H|w9mt>Ey+*6oqmNxV zd>J<%rYyKHU1`{VV$H`^-(1)<9qsUy5p_ms$aAhx^<4PdLzacsGW4izsR0#UKTih- zyi)dpYsE+E$3|>X9sUz>L%GZ^>+)-lV+F2xYth z$}a_!jFxSs>IQK+`qVSr31G^UvH0-P;4KU`a+O`sG((sGnubMaTDVN7X-$Hrq5ZEc zNJRThq$Ez;A6vkJCX#CEK0FO&fNnY~r@}k8QU`l)6gaed!ZeG}+=mP4J^rBo%?K`B zk{#{T%G=nfr_l$g1h!kX&0{;9mAmN2JxUg1+tPe1rdFwXu7F+;?ctFxZ?VQ3uBUEb z!%w3cmHcqGI(2y>d<-gW>O@{lnU(ie-upqv2BmKJu0U;KotlvUrL&k6mvuc8b>&)9 zt}cx%HW-*lf1G_zv_E{evOgwv8ft?JYSU1s&+IhRH3(W39ct0y*zN(Ezx+edkmr7A z{8(UfoR9C4AOAD`k7ztv{WD%1R2qlx&Z~umA{IlOFwJ`_|3lqO(OEeZZtImVmDE$C z$;AZjK3ovkfwkjs{x1I;k)E-i9qpOf%h5AS3c!n{VJ-yfMyuQEw_rgoIKGQaia$kL z+FE);4&2m1yVn9+(6#|E4S6a}d2D&@ElF5Y6a*7;!|rnUE*zJY;|DorWB{*)6OGeB z_#1z~mNa!j`0-~&n^9V1AbvT97qg2EFPw%KKUju_7iQ|KV5+hY#=$8p9{O44*h7pInMhlqt(ehz;e@7;}j8o0R&cTA0pgF8gyD|-gG*s$$0<^^>x%~ z@mA>kGI0T;ii(;nKGC9xw~RI|_0llIP6$Wu*LP36C4`C^m&_@Gb_Z6BrXxxmskeKx znc;VjKx8>3Cu&kZm?rR0pd4OpXxB4?^ad+dzWl54}~-L9ElxP`T*Br z7c3Y2n2?1JAaC3fUorx{G6GbV_>l4C*^!r}>cnzGJyRktVs}ed+!x&~1ytuPwR!-Qe=o-)P^J8NYiu@?C6ie(|els~Fy7uQ~`B^?mF4K4%~_+}AS@a{77% zLTUaK)MQW5Nv?oh+cImpYd;NyQk?4t{G0R@p*;4gml%o7d67D`7v@@ZRQ8h1eedDB z!lm4IemMcG3@4YVk^DahAHdB){3}(HjAZKx zL&gs@xq@K*e_?oWz?kD!!;AMXHw?k`h8HttSuA<42Mb4|?1_gIa;kZ61q%xj>w-%P z$R@l`dvmz|7bNN=-0*V$Ea_9x)$!<4f&uz9i}V)uWD9qzpC+9QH~$$>O4WnLx%1{3 z(Qf%@wxO=iMP7uTeH_9C^%k(<;UyE%Y43uXmE!kqBcRI2_oeDPH|wQu61=voEvmutYQ(O zE9Co){PQORbdcdCnd&7!gV=0E7W>ARvM|-V6Af=k#scv)7l=xRu$ht>-4O_uH;z>0 zK}+0(%-mA-RU_B7I8t7zx^ognL3e+9ZR7o@?GkQ2W-4Xs#sf!A}_ z7OS@!|J1Lc)2Y~8vh#V%b4Wk^8+>RY%{HV(yWoEniO=ly@QsNyxdHw>k*u%7Un|lK zq_Q^v1F2&7^OiMx@cd2qt3m9X%^B7q@ze-q+|O4 zXFq()A{|G%`7K%goA~{~+s|7bMcS#Q5AfUGMPi+u2jI&SDM$OgQ~P}xzXy;A%l7x@ zEq5aAM=E^>K1Y$hMd}X`;YCP;*>b8GUXD`;5m zTz^?_QM&^zqIPZO+=bTT2M5-kvm-c3R}$tSZD$CBSmuY>HN`X7P?p6{}#UW;LGKv zFQ;hTyjxv!s^0xV+X{&yl&?4dAC?bnKc`J;tnzoLuJce1c5KD2DmSfR;Cl|o96}~b znkVlT5;=n)t=w5G__;~#CXe)sbv6YL*J4ajN>?N zBnXS!j-8aX$f5W1CRz;ukhoPNGDG=+Ws1)*$>?nrKaVuA^%|QAsl831{fv& z#Yy<*oLIMJw8dHZD@g0`VoKsR8!=#F1FVDq5b8vISfl-xac=Bz2d9Sw;*Pfq#BC^v zqHxPlpA@VAR|28I>53oq!cP0a*OJ3BP=U z*&W(gB=GPAzFTdNeku*&e&Pp#{wj!1g&`bo#iqfB3!czhj^7OvgdyB%4nuze)07Gv zhO#wrhryQ~ZwO)<(+`a)xEYNp0no_sRP)gWwkh%`N-xlP3xMkzi|xt^+Xixr&CNj z#W3blOnWs4@_f_@Vp?8POzXj~5Yx^OqnHH4!ejtQz_}nJ0O=p~8Ukom0H9wDuL)q5 z1^^k80;}zqJF_8IQwsHomnk+1*~ld6)a>gFjnj7qG%_7;d|?`_7tZEjxs*A!Y^$;? zn0p@c z?N%KELRqQ$_6y*mc1GvBZpXL%A~|v^9Qf!@F&~*~ZAGoyi?Ms?aws0&c*>zrigSg( z*)B(84q@7kr=vYU2=v_Lf_v2lxrwg3s)SnG(Q93YBedVpgiU3g?zXL52MXOpQ}S+ zI?zCoHvycEzocH67(ubTpK~oTB`f{w)V>gToS`%Zi$Zd7QLJ@p??97PnOK+6lAvtQ z-{-7+7l9p3W0U}*pWwZRM1L5IfRQL~bW7r733e!eD!Y$=DAx2O9qg_QkNPNfj{w+w z2j_MYm1w`vo-D!>Q}a^TyyU$0I<*h9+}!Ch%w(|GF4&~{K&^x9fm5l&2l;J_&-89e zg;LX%bidVG`&)Pekb+VtR`U6=YgWYWR=rcOJIVKV_%}vS(^TPEJgr>}TQ>(_^$3o)wGgW^KJ#2_#x^wRjUrXtTH`|GPB36 z{xk@=d?_WRz@Pih#TYEhqSJ}T5e&Bl!5$$icUFFa3pk5XRjCvj}J94A!TY_c~1f z=9|FO8gs(@UTw-mG0Pkq=VvJ^JG36c?oeHh$TlyMT(9}m`VwikbK-ubVTPJ@9y+f- zjG)6aaya&T!;2j16W4duinRd01`E=*hNX{KUp#<+VD6fSLIGv0h&o%=f)%boa53~8 z{B7M%V%CPpGvOsT=Zj(TsEdD!L$D3%oW1>`6wU;wHvxf@*bOHfJ#I4AD%$7Y4mUnG z_W9eOOop<3(Xt^39rYHpSq{ne={Jo-6&-}o$gXNQjS!3BX5CqNF9mblE&Wl`Psn{$6w2blxKM(fSEW#w z+}ekDBYFe|5RxOm9pQTv1bjM%(-D>qD}$U9&*|9Z2Y40fA5%yC8eqc9DDr)1u70)S zI)DaQPa}zFpvbG3LY>N2afub>_=oTk1~Pv_n~tN?8?YLuKNqa;vTcGhOmC0nl#?A5wi`u$GvL9=mbl1 z1&})0$S5=LM0{odZT~smu*Fyl6Cp#muN9GVp9C#L$lT}nE zBQ+xB9zm=sq{T>2BBlKUaZZp{Aw7!p3ex(ch+~8F1=29oYdq4;NY5aJknTnOP9puV z8E}!_L%JF=rL&QKie#}^6A}{=Yzg@5k&uK?HTIOADJiK8RpaWNlG3MdN=kYP|N4pl zN%-qOAOnB>&o~oLl9C4Ud1lI>!Q%aptg}*5&OV3N*+Wy#O-VT~XW03}Q%0m*aA6Xj zU6hiNn{qMVUXquRFft+G(u9Oj;_tF}fAW?2|7ccK`?FXQ5-K(iMw^BrjX=sn(#;Zu zJ>o=Rg-Ea8Q|!*I5D|@Vu3wxC%7qBf#~@-`k{+D)t>8i%)zk&XIZ^bj&Yogb_NXVX ze?A<}4NglGoN%N1;SJ`G2?I>zIc@EAR^KFe7+;v_y=N}iqsWFob4fNRPXCpVjdK=y zz)xVAZv?shg%MVX`UW)r;5h@uj!f-KgshTZdW~NOi)78)$|z)SRNo&A&SyzFuExjx zEJm6k4r7r^58Tdm(YO^@XoVOlL!JEfAt*x{)jsI3=p<*UrDWTqo$+N-><5Ca??M#R z7v&jCqrR>!lq}i88VjupI|6P%|Qu( zoQeEbbb{Pno#%IgNTa`DrBntH+TI^Ts(b`CqtV_XcCoh_)!PeVJ1M3Y=a@c-W_;VU zs7LxB+Wm`7Tg@r12x3skTMqG}!AxprmEXK+X;hybXQ(h|gpOCuy^uF@hkkRRr9Di| z(?1Qs`qY1gX*^u86NFb`Iw3vlHV6Sk?%!hoBAr7w!+6b;qT?Md`N5sW4^Vbw60S-- z{?WkjIVaTx7k>-)Q_jj&W(&Lnx*eagmm)(*3)T0oFf>feb2$?KzSK|&WBWLF?j2~% zq_+=^=gZ}IsabZ;J?~reYfhE_m3nur1%FDT7UA6KvV*1ZxRjk>VO}w@Fc}xb0}c}v znCHU#RGz5=r68=59oV!S2;HxS*A#?pz%M0f6oi?w7`FFMF^f^)T9{7vxJ$vWcBr-V zmogo_n)7K$!doE|Uc}CzA&F1+hNF5ZE;dX^L$5gH+1~aYPWZ~HMls&eld-2CJq3Gu zp2uz9ksSYpvIC|xKx?qFuOEbFS-+J5j|KS!wLjZsZ>wza+I!KhI&Tu zo7Lr0X|=LOR#RB5L_RTKxH|koiP*n`6vr@Q_ZViZFi>q&t@&M`5w=p}fe^vv;b<>9 zaO~FM-Nf46zf@3qc?e&tSj|1SKtH0_9Oddiz4&5E`tdq&=wbgr@6rVH-L|9XyGj4l z80pe45CaqGXGnJ<{T_)h_)8c^@q1i* z#^3Zd#Ff;NUe;f6|1Q!oq>?WYJMiBU#>}teFTcCbaD5qg1igOz)p-j|9~o%PGM{&# zkEB9$NIzkZZS`FO3n{-Bl7{GTNby*K?LMp8(+{McTv5XtO+3~T&*u3#@Db_<{CZ~SJNXxLhd$(Xk~DL#`W(c&)Q>Yd>=?Yz4_OQT%npC_etUVDazY&o z*_<-Z&f0%^Wwh$@M;OkJ7VU{ERG{_UM=tJ?6!el<6&w^sOrD#;oJ&a**fHc)*RFDn-w{U+6 z-dj_W^%6?5`z4S*I7yX8-Pra0b=_FBROzL_@^d()*sFSx0TYFH7=8$DzpJOc{QnU% z0r;QyraBfkI`#{DhEDVYXH-k8{7q`E9Yavs{ScIEW8j;KF<1q^lW?;ZSGoAxMeNt; zd`B~OtDpayay}}$MZX~)kfvMgqU+{KAd#*c+Am($^}!74fEX2BcY$6i??vaC$D3A{ zDdL;hYHNMpdb3vTXzxebXF`n~^1~R^*sZ3%cUq{CDo|q;fV4zfSDYSc9Y*}SxK^C} zl^k$?Qz^q_low(kr(tj+Y|Xqmv{T4LN3mUM5-TsTV=!_`?2z~-wB+KAE%K(*`jZ)@ zpPL{*QHsXasfm=seFioK)1&^^Tf)k`S@3C^;a$MBydeR~kLwffkLots3p1>KyD}%E zYOcMdCs5HScOWi$)^1$@`ulxrhq}tFypl?z7{1MnT6Sb7fFlmVz_$h`yf<40Djefd24S9r( zhgB-)cB@<81yaqobxCrdEf!kdwxz_Y-Rijn9>J?GdP}@o;?PT=drx8R5%$|@uzT)! zQBecJpl!q$Zr26I9Qes03rTnsOC&)ztf$JM@-nqG5s+5dl_j>oKf78_Hvkq`flliw z%+_B0cQ@;)N9K#HrvtQh8C}jeQDvvMjS|pCbqF#@{+$mne%6{0E^yweqNamSs>VC2 zPvT<3_%s}^cVaD~?4N;EMvg-}j0OU|u`THBwQzxHxCvmnyzmaoOSKEX8z#80()DKU zOpL&>D-7JI89(5kO)Pp82c-FG9JRv#&?Y$ZJSoc{*`*y2b(S0L$fKYBlGij7Ob0NC? zsv2IC56!}_z7=h`gx^X7kZgWCjNcBb;WfX_(Y~!d9~Tx!BT3C~r1rhwN6quy6gz%xhz-z5c{<~d#`&IUnC+)T?q zW&i%K*L-62d$@n;0G;v`NfYiayvEY>s|&BOd?kFw+A)PjRlbGo(gu`ZaLX$7%hNpk z5V}e$6h9k6rpySDFRNh!D><*^~mQ&<`&b?$Z^iZoK?pY zY-tUz1x|gc@n3x zJ+bYX6bL0c*SBLFAmXh}+-j!!DeyR!;>~91!5g6oZ^U=xkoiQg*&{^R+zh8QKZBR1 zy7xlvUfx{hp3dBxwcLEd+%=;vHrLYVFd;GP15{41dMu7ZSEwZbOIs4}M4E*R(!{ z3p9MmFc~o({1HkpZC)OOdZ@iH$LhP#R4eHd{~+h-NY+YtvF0uN1@*##nN!X04wiN5 z`8{PsdtIV`fSlGim+^52tf}^@KO0HK&HX!<;w^O#(k`e*We>63?rPrHN1v#)^hx4##y5M4pjZNI9PN$vwnVqUUl9^sxCYy zIFtgE+_Q`B+raF9X7)ifye4hgL>P=*aThKk(h|=fEMNHc^_v6--Lkg#}7 zSoi3#er1AHr!w|LyrH;{Kn6$J!`n!EmSh~?B}8o*aYb!hIF7aNc0Eu*5CUmYrX&(v56--@E&xg<~jUg6AvjAF3_*(nBo1y{v&GW z8hpE3Jg!P-tlV)%vVgb`1|7~e1fu0U#d9O^uwHRxaA5wZN^h& z2@anJ9qZ5-i|LeS2R5sb^X)@2^kYIDJl_uTB0Y@c`HKLj_iwP9;3;K0FQzOazzv;F zX2W2N0Oh&t53!jjq>oI5!8HJ^Z3HPO`^{`jp(-*B4WE)8YDTki4-&bmO1*>@S6BLNk|(t?zZ)iSQAunWZptM0bhq2l=07tNwl%!bM5{d3HHlLMdXFWUI3BVZ zr_^|8-*%UF91Vvee0_vV7)z1GBC)~l{~Y6ilb<|(cmDvx0E+d4mVrEtQeaoUgzR-_ z7^+gp>npHXRze%+c5K{HtM(B6YgC3xQC|nex=F04=wIH74zgijwf?PbNut015hf*% z=rfP15tx)Txc~YRS$UZ#Zqh{heSz=>7Yd+LBztWn>>uAv zko#inA0c>{dMv!irQVKRfpPmH`a9PkZ`Te1m8%Ij@%X_!0Blau+syZv^VD>|5)6vMwob!n)K6%h-|`!KwSy%b~n)>5ZVA%N)4H;~DB> z0}+%HTz333C^>UuyC&=x;iGzb2rnfGK{I3I?f-Kfvdj#97n##LO+w}rSb4CZvqRLS zsbT*<)&38DV$&K9UsKpnlbxnuejX+B)qoL|O>$!)`n#Z%9*lX|3U=MF`!b$zd3g?c z!@wNwR;w=L^un>69A()EijX3zykuZpve!e5OJ@TcusHLM1nC;09T(>^fp+3t0Hh)6 zoN4?p7RD^X*oUG84BipObvlfBQ5a?F8Gx{6^+=0vm`Q+Og8;$i-NfUN>)D3X8eU89 zH{~Gp)DIso&gH%_xGdNABd~NI{d5c0tHj`XuVB^hsPZr&0GBacyo zLfGAkr3bdbwVFD(-rWFPvp^S&Co1RzE~ly{wXoG`pey>O4*jp6b1PRrg4-RdDGd~s0%sm#L&7a4baW~RA zXHNv_?dd(joJ-6(`AoK`Rl<2p6q@wCW>OR==A zz?_Y%JGc=Qh|wK1s&|}(^K9x4257p2HAL|4^#_9`pok>&9~~q}4jfC0mTU;3xL5sG zxtN(Eh$59eacCFFE(nuGd6jZ|)l55r#XuRK;JqC?Voc1(0YsTe`3!jhv8fg+LnT3Z zqYOsCdS+d~DoiCC)mvCL^rLi6O|75SbucH^*9*%+?bKi7xQi69{JtzYff!2hpI3nb z$<-!GblZzF66V9&!YI^Cg@f)??;39FzXFV?@{W%r`fU*P$AsF53vEJ0w0VMF!)AZ3 zkmnVS!1fX|<8dpNeo#=~ATIloKeF)<^xdrI`4u(1X&D%Ox#0saPmB2y9mX4tc`76K z^j@w;G;&Srz_T->ZI-gDwK@0@TQ#L1E4&ZVn_fXWVezQfUI4#=mnu`n(!JE^*dy~M z27jC*mLErxddvgq6`a@**t!`@F!9+x%mz8t4o~XTR9nv+Q4;9TTa#sK%|Eb(F|KNR z)o0Hm3CyWe2Lny~7n=x<P6e%OR^C&E6e}j`zo7kjFAt5_1Xei?<@z zL|o|n^_-mJJIJUyE3FXclNXE!X%Zp5!ioz>ycLi)~O@tm|=$Nb}&U%0sBt;E&^5{NK&Y2V?BTez2*ZL)A)v+$qDe75SJ z;XHBm2%pF$f!vzp_fG{JAjO4b3AnqmzDA#)M4jYGxnkOX`s!sYK zcL8$8+fh>Pua+=(zqmR8C=}XvB!JRN!HD2<@Hb7W4A{;c(^q zx8mc1=*P8Pd<+Rg)UHzUr@HfN*KSBU?B zEX|K#(XZyMID**xOWevj!Z#-LWX6bYqIyC^Gqyhr@31|Mjo3-SRi?KMO^&X~nM+bJ z5=W+E4aWjrqCRs>@C=YxWs>&G1zh;xOkH?3zC0gaQsjCzmTY#0=rAa@8EfwfJ=R`a ztajnZmb!x3`_=H8!}Q4vTy%q z&^}Q;wTay|-B$UQL?NG>i*PS6FTK3k1pP1UT_W3GVkn=ogqjh!AYYw}U-H62&!8=L z1d;?GN#2nJ^0*O54Ii;(qeVu&ZCcLCw|rwv*eSt`C72(W!0-{l6yR3}5~-RoqY-_z8Y>Y2dt= z^3qV=Xx6fZnF?xn&BDgAo?2loSbPlDnNl=xH7ofOW=gH$wG<8H)vluq4PJ_zmG^M= zeiNLopYI=j!dbb7&v2|PA_|gLN?Xpv@vBC45WvZO2p?!ccl2+|OW_uP#P0ZH@s*=Q z-T8&wAQ??6teDx70^`#?_*B~jN-E5qiuS-81_L2Od1kXMo1ut#62ti0!CNgqL;7~m zR!bg!4abNHnqE3&Ev<=Fdv=Y%u(5 znA(L)v3|RhLpaT~F|m*i4~8FNz|pR|BTY6GyNo#9k$-ThvlJpAwDKr6Q0O+e=kU4s zs6>6@bJ;QTBH@i-ACrjfQ=<18v=w>&BJ=cvXbBI{)zxMA-7ua3sS@=rM~6Gh!_dHE zKdYA!_PO||L@n0JFn50cXy;Ey7F|1U?0tg>O~}vWena^ZPHW)S7_twKdMx4Fut%KL z`(q*mq>!v)={CBOzG0GRvZg!K>kA=VNQ8VsgeKIv5g(yfWQ~uNsQ3OWf-Y=Rsd~XV zz(%2ToiD5^j96~4s<@MIPD9lv?aE**VT6;qBpsX95o8I+0gi4QOIpB(ay=X=bwu{+ zQMia~TMZqhA)x3lAxuA^E3wl+9EEVUhcv&MYF8^>MYFzx{ncZ|XkSF?aC58dr6rDt z9YGceaD2-GZHph{CT(XCAnNoIINDIATE}3Q|5qVX#x7rj2eV{yjraZm71qwx{=s-A zTeLTq@>OAk17Sc>ma-}v8+IxWq@dm)HvIs_o`%@8L(RUNA4Zo92}6iY@7G~;CpIlt zKN*eYtQygc*wn*5Fp5oi`v2uDw6y3udZ{gnc&Rn{ccp~W;GveH0Zp_ywBw}as)~v_ zzx{Yo4vrm!ftgs37sBMQ4INLz^^VUHA!!xP>F4ePO42!f)zkxY{Is)b>Oo~UB(nQV zV%XbGoHXn(#P~$z-%(*rdvTW4cLB91Y0#pqA$=`yqdz7P?|DnSuiikCBei5LIVKCL zzWlh0-IGz1kPMn8W#(wjhZ6-+(4^+zG^Esgye2gtp9I>L3>i(?qC{~_ckpHWUMC*3 z$|5k1JAnOM2PW_Uz@+#bz=Zfb0_<81*#1!fwpX3JDv`E0T?*630IUfsC`|tyyj2`8 z&X&UTY~PJ2{ugDsFg-htF#VcY7({ri$U%3`gpUvk)Vma?gG1>oPXEhs<2V}Dw?L~) zvZV5O5cD>%-_X=X>E4*LE<7hh<$F?~7G6?6KUhOO4|FKb7Yh1Aw{d#eUSPJV2t967 z7NsNj-`b;;=EP1;p%>|xzS)vevKU^2H(MZdF`6vqe|r*(=+-#|MyErJpZ73J z2L!(>HCJDjt66lIFejx~g1C0^eBuHeA53m4Qb!X>xBx^TBKxP6i1# zWRF7Lye<3D`y)=RgnhQ|*$O`NzJ{9D5Rmc`2_~Z5J#i$$o5b+O+OZz1%m8MP4>aCb z9_u;x^={0NU%yh+H&W2%I0c!G_1uRHk*#X{V?BCzQvVs%zdig8Iy1Ti=(2R-<){!q zDK0m7Ia;$i*Wx!j(vo|a1?Wn(4>N!}J5*Z9!n8sr|J#chZN#_^}p(f7=1Z;NwcKY)awDjXF^hp|-;Y|K2DK@sP1M-2ep_BG z4p|gKiJJoFU0A^{Hq}Ma?+(^wIRW>r;WhBmB3KwfzoB-Hg#|GqVa0PfCoC985Y{Oy z7&}9SZ+Su;ZK|OZly)pa4d2NJR3W$Lt=wVQP+j1t6qN2&fBV(92pr|Ce1}NNR`(D_ z%+R5%#S;#sw3mB~?~Oeyt%Ebj(A|t;nrVZ^@#GW1(`6ZWx|?FMk{5I^>qypcD)aGH zGBSo-HaLGE-@#(?r8uM72Xg|}(on_cNjcA~i{r|9UZI)Nd{nNP@*uX0PuMOY z=b@>!i5*CToF~oOz+A(a>+f1G@(FX*?85~{tD@!rpJ-Oj&3}r8Bdx6u63)li(liG( zID8`DG)XwsNARmjL0fJzRYhX9N)W#Rh?c1}yar~siYx-N5qiM5rIo1G#w<56i$FEr zvdD^>5U+GpL%tREx-a@g$+bMDBOIPyAhu!pTFS#*?OVY9KhH6FW&nC z!~1ys>oLHO_kP1E@;`lw{F_hFKZ{NQzv&eHzs68L`XL>7Bzj2ipT`a58~dkhVS)0c zI{78?Znk=hU4SXFBfH({D$2kw^oK<`_~lNmXf%g^^gIl_wrK0{uRq23Wf|%huYYHC z-F^nh^rbG$C{f>jk=3-vDT@Ho8aE9JNOS?)BXD?@JHWW{(J-v=$-nGa9;QC-=E+8`|X_U_-etnL2&6M=5t+vhevxUQS`z`xz=yMM1#ncl;D zXl%S;v0liDI$oQoVpJC2?V%eQI>Z)hT%_vSox)pOE9*sc-yvV|6`4_nVWB;<{&AcO4` z{~GuR2cphO1@$H0JsJO;>;8f}h{B>=lax>&`6bQ^9KT3YYVwY3u!>)@!PTGPLNlx( z?wSBdd-lz<@sQ_ zb%nxwvHwO95w(bB!3lfc0~lilbGmUKLO922B82hYzv$HiA#;0)7#fJiTYD@J8s%Ki zJ&~Rx0$4i$irRx)jR+$W&{dkx$>|pgVMIh?!@WQPBoWDTI!hvcc>x-$Nh0);B3cqz zA3apkfk3GLve72PWO#0ctYA7|NZZ1psP8=46~<$+Y0<~p8iVl(v}Q*q12iqVC1yla zAv;iRn@$FfCI|i*QtBars|&%2f-f1anp4}9E6d>P1m_u2`*ctSM0H)HOEiWbhN9|N zR1xwS&1{qmzuDo1M?I5Y>{BM&hfj9kU;%nlbI$pO8Xkc@>ZMF}=tid#=xgM=90J(? zwBUf&tfVJ)>eey&{=lPU2mypUXdDlFRBtjgj#Cd)R^)EVKjF9I5b6wF~O{2+E;Q8}IF zKxUWQ3Hz4MAY_EoiVn4$S84Dl-aMe*9YV+84B7_NMAVsGD zO!%>`Gz)Y#AQTeHA{%rP$aShON5T1q*$|5`)~vFh;as;8ZA0HFqyG0mV96!?rCUni z4`B`dNq-1#hmw0LplPrUcwN2!W1w4G+)C2>2Z)r4csdD7J6VhgzYFfR_5z%HyCB-# zQd+vG97?Xe>XXCJ-Qw^oAArVk#9=O;{&=GA4DaV?zBlw0D!$xkD8^dClaGggfLhmvcv)RM|~?cms33S?uQ6s2NQ&&A^#Wcg*GeZ9}l`^{SUMYV!4S- zHzALJfqg6cWQgK+@E{~ZomWjYn00#W>Vj5)j5A@yd`-u48CXpcwH9+nUk$W%Cn7pV zjT`EkhqUjfGu0lLmn|+tO#ummV-*|& zc|1=BtULo`()hto3?G!@gX{PKbf3bC5!PXFy)zV5^EUMc(%Sk0Y2U$XAZ^upRu&(m zdoPIj0B;p{Th;mke9-(YD+%3?yDeWlkT!VI5|O5DHmHbg-m$+Cp4NVb+CUYQTElyg zt0D);l@{-O3eaoZgXl*y_{Q|{&pUnmg+qS43?DPI6PaZ- zTdrkYq&?4*7#EcFiOdd-2_Mj&=TG>J*z*`_mD8!9JGFw+P|!Rb-y+<{e1jQ^z)zz; zG_jO?8CabTY<&QI*M(zo;XH48x_bCpOfZTPg~NFq2T>o$Mo%g zO4wgx$0BKUXcB^};d~n$Z|s@66$sgU4eoGeqWNm^o6tN_{3bS!6~DITk>a;U^9b>q z)SNATlbbWeue~{4{H8QJ#Ba}LoA^y_?nokBNAofKN>x5gXFJ;!3l09R5y7GZGR{bQ z(Fklm-sCixH$vIH|HPV)aSwwci?V|@!ZQP(b|9Ye{IXKmPODqS(hdQuEI7dd-fDbh zbRtRuh~>D!y76FD(Fo=q5bOQrU8QIQziB#&RlW>>)XR$i@*v3b)jX6G;gFKxDL2WR zyBx^=hWbBe11^R8cb$pH)=BTh0VWQmMK=`i5)zigwnrDN%tB`s$xm`D5>S1K&W5y zPhf3{olElq@jIaTI`Ny)(kl=;qXlQu&TN54l7Zb6R+J?+;?4i2mk=!y)Q&(Xv$>Ce zG^pjQKic9la&Ir_gOrB_1i!)H$gxR%pNDE@pp4A=nkpg-u`o{?U?B?firYI0P zhgHmG6^C{QL{_mVri$lwlVw$way(evBykQzLK=_sE>k~#1tyT{iubn&tu-8pXDRO- ze{bMh=j_ja*I79N98VdHl|}>8o5!Q41EKS}DhNQEr>9DAqV23?jYp|NI(6;IGSbZ%6HgK9$4ugs2wXlIkV09Ngkv}5cc#iJq&~{ zZW#~|UM>Vih4P3DBUy(_yQ_mN;6+m%AWmrhAsCQA=(6V7{H<+(-P_VDTFwcCE^o;U zgvOw#P<~6FKxizcM(vIW@{a4SDB0X;UmDvI2wmAtmbiF_I4i^}^+zue_b&SM!Ep0x zJP3pezB{BT0@6SMso!USbg6(ezNI1%n(*DhbwEd3rtW!>6&rQ^W8vnbcn}B`vb!d- zyWFHCMI4!8j?AR4izwp|-;uh>FwwnhFw3PaxQIGi31hz8qOF$8kgh~3Mw*UPjx-jOmLaW1T90%$(yx)Ki}C#=e2-L)G#}|kr2R+(uG(rDf^;6zMMxu&E=L-NbPLk0 zNUM-GApHVq3({VscaaVweT(!eQOEm=sVNOO>WgtQRpA*8<}y@zxJ zsTt{Wq_eKxY8i%fF;YHK0g@YOGSYOUYmqh~y@Qkm9%U%f%}73^Tai{F1&}r%N&YFY zikp>($Rill#0K|~69H<>SM)zvGLj6mK4c9cE3{!Y1_}g4*(v;VZ?Ipx) zRqhZ7#zM`(C&WR^Y>NkYzaX!3&<01L)yX(p_BJ-9+(;w`T5}TJ*aq*bcOSqfmU{O= z{+RsTn=NW{8Zm3#_KYHc$oGd9KO8Z>lJ-2xAvg_%h*i1z+XBq2Tfu<6nNz zuVSP{q<({E$4^0lX-j%vi_t5;dMdhN@)QQnL) z^}0I!M#3eWaTfStz0|x((|H@%>Y4=Tk?&(RbsTt;UY|m(+@O z2>gV7F8z(bN^1qQAkI5lfM3J&w%u4!Q87IK_~#2Pbzj@)s&Yu;b_gHD^W$HLXMybr z;;~0P=glCj$Jf*~C3>pdZQ*{C5+VMRa@#y5gj1*#t$gXbK2V>n)Kx_6+3K;m;4IGu zx?KW=%et++?Hw#W46Tc;Dp|gXuZ*D&++8_=`keeW{|ht>%EM`m67UO0F^f}!IQh8K zp5Nf>SrYCy8nvN$nfq8(K57{pS&t2QVto~Ck>NXbrCn3+DAQSwY59Bo1&S3X9c@)b z+49*KsDt(z)Ir7BtaqT$77b}u<8dvjENBeR#YeZ|@GSzoidi#hH5*RyJRw$?02psozM59IIjU#fX>uqjhR=poeT zTnrgrHAH&|@-b2SSMS$rUsaZkM?$Ohc;q4a1M{6?-SwED&aD$1lS<12p;YJkO}H<^ zu69e=R;nK0W+FKLq>P9;xA}Rz?DTLAlr5be4u>eB)5CY5xKL(iDz{~|tX5{b5ROB+ z4d%`wHU`6Cr~eHU<5in zycc^e6f8G2EZ*@2Ke^Egu!48uO&v(yfG4QQb^0~-YOc_>vjC(Q(}fRu~mMw*SZ z7^B7XLtHGdO(BK!+SM`LcNmJ zYk=t}?_gl(!H?#pr(FGojkp>`WbLpXJ^^O*V9qw0Ltldj;;K5h``Vihy08aZ&(0QPN#0fGcd9~mP1wQ7_ z%U(QCDtKZ7;wtVC`N36Li6Ja}h`Yr8iLvb0PQ9LoLNU5vk7JH`^1uLVy4o&i1jELB z;}qY@odXlI2V>y>Fb;eZ z-Yi506W+K(g~XfMEc8+ST;RmLo!E*M4){|xjgRijTGQTkMWu122*JHHEk+MI^2{*Th9aS~#LKJ|F^6!fVV zGDJHUF)4t?>_(WVGp6P}^I(h&dSkQ`kru&r_UGPSQ0UOWn|;YAqAy*tFRRn>t62m~ zFU~Q5QemQ;>dhdaI|(SL0pb$^s;J506^5nyYynC*FKhX6Y=xvJ`fS1(2RJR0;0l0u z@F`L~62I^d5>v9wF`79X%t7Dvykm|@_|<&ZgHGp#V<`2pQ&Z{;Q0fd&>JI4Sx}wzg zIxzHIQEK(%!LBLw9OgVtN{yqh>TvnJPN_pBYMZc8a9F#f)S*-(Qjk&~i%{xgohkL^ z#n)}Myo{7McdO-6B;yWF%pc9)lX5F8SsYlu>OLQYB|C655&A^xnGDCD_Nup`bhERw zGWD^2z0h4;`A-#MMrwCQu>}$BZurlUSpX_QXR8Q}Mj9c#atVL=(w)e1qQr@w$b1b^ znzs@Y*YJv%cn2<8a_Qhh=BQ+jdgc%gNO&uAY|?Ywg$wP#bzlXwSa;IrUSLHgOhSGQ zj5nPFvqSl3_ijcGjNC1NijfwJ1s?$}HGuZ;3lqUD!d8KqzXFP_SaU1-pC%dUAjlkFGp+(A!8Go&r4S z`mIwl^c+|jT;(&+-nIO;t$7|cOK|ZZR3C`0(_Dyqoq+-_Vg#3D22O^3p1{eIaIb1y zXB|rhfz)q7U#TMr42QzEd~?uD^7)n{RP!hcFqC` zVgM#U-;x>Or4Du2Q`ktsv=3`Dx+SvkV@PXJndp$7kDSdf;1TP*OfwdV@)E*`qu9mD zLyl0!LZJ|61-65J1wy9b{4f~}0aY_&B|SO_1Q6#B8!^Mi*TR>61L(j)J(jUr<5jv!(iDE#>|fS79Zv>%Uaw;cV>o1 zKFz_MWK##8IB0>;4L-@meUxvP!b>54T%Uy6gMl*0AB*z+c7Gr?k90jE#E+%O6X9i| zBFM-i4T(X2=}$!Lt|nzFo-Db?!YB(i20TpF%nrHBvJTd`m|012xELdHn;7mldWcc( zp5ZR1=Mb~27CJ1^(KfO}T`7S@`0$B;j3rw0>7S_&{4;ICr~=8R$Q)Uu*L*}OSyPJ( zM762j$&rT%V3DJjUX(Jo!{FGYm&~oNj&N-9)*obv=GD>QbmTqkqx4NmlrHH{(BGo3 zr`pSdtL#BQu~sDoi*R&f3WFg8L4YBsTG>JEB5Vh+rB;6c zE+MLEj?#m8^_eCMo3zSQpIqU(2D+{UAC%jP{-nSPyTzXZ;@SW5Lc6c`!WlB#td&}} z?^4Ha1G}xPCS_gGYIf0I<77cDy&y&O*D32a;XhEnGvn0{lMQZv{QVZrlO=3n$3=7k za~+0`$cP;*{WIrQw+llBYc`Bq>OmTxV({1{zXyR}mrxWEJz5|}Q1p*00Q=%7PMtu0 zWe89v7OOOrnuLkd1xmF6kKoX>3zVXH4RFaF3cA~5-HxfLs2gZ#aG9ejIj{o~bXTAr z$5}C%f^JtSYyok2`$lL^6?b~f(-P`acjjsUM7CLOku%%m@kWw!N`femd>#jN<>R_KqZTb&6r#%wWu& zhV?c)JwT)haQ#O}z?v!Ndk{Aq97*2X7VVYY$#)D<$^AQrDw0`m^HBAO<5ah=X{I zr*|_ZbOeLbiNP4pwXNJRMO8RFj}lyWJGL#{FF1lhoTv*|t&{(KxP}F7)jAxL3p3Q< z?!M3C*Dk+OU&UQ;-B0kUUi@b>JwcJz6I31rQmPM(`v6=u%(bt;@s`~S9c%0E1EE)M znE7jA#qH}u4uD!^=wOTOSS~5a4nI$r5<;0;JOLmC&|r}D%&+tH^ysS`lsFw+x@q?B zS|gM-1{#F+QbncQ`5fwkg<$kT+d@b1E>VT1Ykp1l{DU-JrvQW#EKdPfTuYV6fRj=f z8~u`#Lcsg796DK;Qp*me)UCd1!QPmB@t7z*>!A zgjKM96pjev@(zSbfOY(S zWoi=`pvog?M{vF)xXe~HcVCr%kFp#~5%!~it&ZXXM5hFs@Db#Ivu=SL(CupR0 zGV~|T%%r!AfnwdK9zj){6W!^ZKKgmr1{8{gv^y?8LEF|Al4BEp`x%ekPB=IxC{v4)^kbR)C|&EY;@xcgvp^ zFTWHeJC?xNW$ljBsfIMI)M`TJ)4_g8&U?N2!pCq_ygpw0t8PUe}&BeL<_W&!HdfzxzvQgxDsa+Hud9(c)aScUe70E)5}oB?q-=U3UQ zCfT$om^AIVdbCYRAB~su=T*7zN&}jvl-UyBmF-o=aNslwQ40!z?XCM*aOyF(ePu{l zjAN2d*TMaUfbV)I&5NKX&qn&~F(8OL4!L;K;jt2HAq zh9S=Axr2Z8axK#8nV?Lj%Q^6TSgm@>zCdTS;)G$F@`gvmzR5YmJV*(0+AP{Jk zk6N`U+7>kdT1CJi%5a!UTeP&=ij`KawxzvFP|+rYCJ2bARHLGza_dP$YrIkj8lCsI z_CDv#nVB<)?fpN`d&9Gsb=Lk`d+qPN*IxUOQbhDKqCMr*yx~jSHLtr)wbGn`R|G93 zkRLFPou#EGvg<3c9ZMEUo=5(b%IXMTRDb6aCdek*@iZjm$l0GqgK zrQU;OoQrCp2S3-JxFryesbTc2ik~L>j#HF6&66SxBY9`ulcse*3|M9uU+_CFAL7nWUvYJ-wwDZ^U&Fw3MK# zWHKMQe$6`a)bhWq`MpC;-nw8Szv%lNMxGid0*~a>p2SvRv;n;WmAN`L_Yz-i&`YhR z^;i#6OUdL&(_boAA9|y*02&v?Ne@cx-6GOlnyTdiU)PwkgOinEl=EN_#%uPIeB{Jw!`(9D>knGD?(VA2VrYi`}(J2=*#$7|@5WXk-!7%(+wj^Q%s z&cr-_VyOAj;dr8r*X+dz=dZDLsxB!SW!z*`Hx)z6KEzGz&GN=d9qy>v{qT2xbb|j_ zg5M{>$Lb;ZERNl^&S!?EptUJ4cP~3-Ol1-y(YF8I-o+H92YKdb1mhW-pyeH{zP8JV z`#~XyK2RCIN(*Teh@}tIcCw`IoD}H$`qk&Fn`VAu(C?NAK{ip>&I4IKGQj33X3Oj; ziq)eh=+PHrfhJF9Ak-(a@A}X!tymwry&)J_9x=0IDKO$B8ky3)RO9hDxRZ@{ImTeX z7gm`I<e^98Fo`bcS5%A6Y{s!MNpb41&gAKlsz$~g% zf^WNS$}jEXVE3Hb?;72Wt@_r_H?74mjo8nXN>`0fGQQ^+jao-ojaS$|Gd^mO8IRg~%DO`q-JZ);CWg_qlEm;UNMiVSlCY<( zY}v3eJ;1#${=XW3Y=FJH?G)jcivPYji=2(a~FAYhL>*dq?M4s6ZO@6CzT$qdJQu%N$hsfw+PXKD-; zxKst?iu0NAxOg|OZl_=9+3Y(rq1eRgc%67<=@~R%U@IaerhZOL z#}SiuY7Y~iM$2MWvchFeZ!6KCzTfIgy{IWRygwTCQ!JuL>Sp%~*MKSpui8ztU+x0u zknhPZJ-hhqbI66wv-y^>P6`?MGkY}paDg;&6J7!s8{ok}Sqh*Dg2e&z#9TIPYPoD{ zvL9e>iseaI$1non6YO(U1kC@*QT~jIeDSv$f06?3EP<@J&7JtcZKh!!rJaD#txZ1OY3nnA{>BWX19eLL0ZG# zf6L%E^CPwPd|fGpOAj!}=&rgCc`H4Dp)tGaUY;ci;w3NF zy*wMl?ntZ_0l!Q4i$+7TzFGrsJic3sslKpE9{i|0; zr~6m$p3LrFyp`gzVQ z@~0QY-K4=v-U{Fa?nWEqq%kZxTv)R}-HDLojK*3Fk9Ki6b8nX+E#d?Qyu*CR$d+rM zBVwNL%TL*lsU0nQF(QkLEm?dOS-ikJjzDJ~^jS73#%zV5f@*nYsXBZIJ27kd&l!+p zrYllN{t17by_CTF(iYYJ&jD$Jp}IJ6ki^$%2mb;0SN$S8_n|M({h=IAX%eB;_WqAu zf5xzL3737CTWzI3OI$ffE!TsXdf90nPX<+gG=IsWF!oFWwIO;)j*r!Z``hG~38X6g zG07QLPwrdythT0~b^lE-K8a}o7wNe{Aw6nPX%%|TM$u|av{un5}erg1(V>HIuGt*u2oKl_0ZSXCA4Xh{zfnCk|-^m-~S_y2D9cK z10|`ZNtBP3ZXYf#jzbm)E>*M5@52RZGwKmRA*soD7l=I>f6<&jdmXnFeJA&09P`WA z_^-NT!cvDLRvo?s(ez~NRJG@!>Fs%-3{|R0BOF?_3{<_Tj!qVKnk)5~K-~@Cno>MO zeJrj*W(&w&aLMW~;~kwftzfQCZN#^f`=zaOEMYcE{cm=5-gO}DpBw!x(&l~Kqp)X= z+MV(5uxvti(Dl}w61}~^$Cl;|)q|GN6o=Qjn&Rwuc>#N?=ZoGJJD|CoR)0@>D->_) z(7lH-JY$`r9F#@ms5zWfY?gakFV3FTwrc8U327htw$vq(lI*n1?0Qt%P)+{ai*$k= zFqe2u&eFF8Emkgeu_6;@Wg{~$n&&t2N=FAm%leXgrT=XdV9_k~8kzXlrn=(ewnh(k zUl1{FDLB$m8V6~K3(T7tYN;(+y{T@q2!FeI&J^jI+V18nKJKmP;oJqc8{=IT`n#dy z*Pd&f_r=loC3>Tk1UR&eptB|Wgj=KU<`HMj3D}=P9HrG|QHp6V{~-=`y~Qj;Uhk&a z997x+Gu$Z_H3M|6PUJY!$dmI6C6YSsY$sYqt1~5Q)x|#Mmq~~1N>@Tw9kr}RscI#U zmrKdj=5x12)u<<=MxuI1coDuS4#cJyANn!cA8{X``2NxB4H zQJ(0N@_O%#@n+h=+H1AAYA-W-7(@9^Eq1jhply7pE8Pp^rK(HTh?VWyv**fXlX>jN zA(|$UcAvQ=Itx2g7T~UBtSvkD5Jmls?hmLM%+V~D=Hy!5crkJ$)nnpy)DlIL8P}qG z&VHn0FEB1ME@;V-7K)i9vwDlcSyxwVMqzATQEXvxbJ-wHi#lN?TIL@jy`gp3kIYGr z+tESeBf5>2@-Q*@TFUd)TBf_t{CpQNrF03}KT4PJiGICeG!Hi!iI(yr32HQ3chQ>5 z2gzkzb-z~L-wl%uTj%CrQxDd#Yw_+{LaJuID0rwvH`VHg9p?s?nYw$J))fz4W;8|j z9`3zW7O}m=5O^XlbXPt(PZU4<_)6@nyct^7jnC?BOkk@Yxrh3_{Abd?$bQ@w`!YdL z{ME^hWAzJ;zYcGI%rtj7e&+mK;vynmr;AsFW0A0V#c}L#Y&9P`re4h=Wc8hNJO@Xb z4DVYVyiZy?M+;wdT$OG{Zymgt3-iSCyT&Kv=U^Wd=Oh(p?eOZ?90s;31~M{(K;Lxy z%)8%aGQvCd>i!PbwFmlE8SKvidx1J+B~4Ds)A*>ld(S18Y|M$~`f84u+tWOA3KeOK zKY`)uNWL*G9NK{57d!3+G1NadH}1u-SM1ovwm|8&nv<#rinNuW2i;4$YA=8=$cRIi zUa=~_szCX^lIM-h>K@&p_vQvds~Qiz-h1n07FO1-cgY2umsf5R5&kdC3!d~2!F z-m=2$4#H|5@I1Y_`=TV%i_Dv^Ofp@BzL}i2M~Y)Sy%ZS~;}Izioy!Ash80F0hY6F7 z?Q%7_wroCIRC{V^Wao)lC%laX-jcH#~z z`Eb%%7%MMOx^~jiic@x*l)PoL{%~`ToMhbG*PEPV9-C(cMnxf73mg(GZIUyA6_N1r zv4QxoUMnK`%g6RKB12$TozPp?Y&B?^X1SdAOI8j^7VcTMsl4J8# z(&=8$kVGft>&h@JHg-^@xeM>YB!_;Sr3|yhno=JYCq=s0yr$A6($I#AurZVRi=v>a z6WuXSceDh_GO}WjKsGyQ9GP!kfa z-l-hSBqhF<@&freqDaSn^@t*U#ECXdq(Rlt=!j_CVVW2tm87M+I6bDN)Q8PUer0}T zPI4mVJi_Alh>ZU7ydyH2sIc>&#wa}kQl-=tqtb8E3tC;VQd82x)&1|%{jw90+^=D1 zLpkdvuG8HwomL$N!Wqs{X}z8CW~I?m9Ew$}9+6WspgNx|+v+twOi~Pe=svsay{L){D zYjb3WFEmyZbaYiS{77@H5t+>=11+66K@C-f}#$qb0JI(Ci{r ztTX@q40DEx`{R+dl`WA5A-6=f$WL=*tIxb`4)tu>MzP^K$f#I1%4l5riH~W=&0*v6 zuIT2|xPH{o7400jVCa>T&AwOZjlpSqEt{`9lK%Ur`k&uD(XW^ZKcU|Gx(bEHRKrzt zMLTCKI0vSdXr^l9N9mfiZ6XjSRMkW#{5Aar{?pCC93V^6 ziu)_gzs_O-0^zNBD>-`KXHFY-e`1A7Ahcogq}a1plhi?fWX-fc=FF+-ExbHPRPbWN zRdrn|5{)UPJ7cNX*pAhSrk$~LrNS426VVDCLxYK3;n1=$6N!@N$H%mOUd8g#w`+!# zG_2?wi!4v`TT@7ul&Yd~Md|{y)6tyy=Tws@(aA}jC0vlTgZ)bwF zdWw0x6h>ruw3CMa4lU96g(PY;X<-a*EYq^+U?(OmOJ0J2=Ly2I$a!3mc_Nuh3zaU2 zGJ;gPf_!kLB@ac^(b@8dEUz>VVde*6j5a4eZ6wFwkp!FyTn1bXT>DdW zk#f5Izxd0|^IyN}A=3Cguo>{>djI8klaG?>%e7|#jHirZ>{OprEvE{4qVM~uGtrNT zfnb@%`|D)!h$2g+HJiTXY{pLXKx)RZ8sOBWxqF^H93L|`&ul8U$4)hGW}YPT^SEDj zVSSZX#>>O8iKwo>UaO~lOig5KJ6-)=?PqaaWIxL7TEXR_iXseCo<`@bdF}iqyrMS3 zm69N_%Y=a*uVN53&;dj2>U-YsW7nUj$%3D!=-3haOh>g&tirNG{4H9GB&`3tK($Su&Yd3Rh=y zvn})9oaVL5@UJhA<)KN-mAP8h(A@spAIrn)h1d}yobg-kkGXGQQ^|z7I#+{K~@- zY5Xz^92w5wTFw7Cz4Sk+YUaV3ytuz3rB0q`CwO6Vj$QRsrCaKx7USY?W6MZ6d-Ju7 zRM)av#{5xj=A<_pD?O!#ImT(wbDRcE#UXXrkBnvsOWM7s$A1tuc9t}J{Mc+`vx|x5ZnDjg<7|1skL`F+Q3F@UTu$Pv){O&y*+xkXKmlpeKe~}L?stvWZaItp#2rm zwa~|q&U{-o4s=J6v7x7`yq)g2+6#^OqM)0)=_h_d8@gvR8K&B!R~RQhRp@|D#6H+d zoyJF~d30kJle4gQyNvTZ({jR{B>W)R|80IopkFmV(Eb~xmZH}qldGmzM-jeRG*Xpq z$wBjPn>hkeuNV9vIQYfr;r?6@?q9usHOfxg%&%?dltx~8mG4lW9uIc$8yg$G{y`tx zZ`ZR^fmPoA8@EvI*RP5$?DEy*<_(QD1TQgrMRRNaX~raS*W11Nd4e@!2=Mc5;v`pb z<gPm=JQ5GcRJJhH9gZccjUWAGKl7myYEdI<^SP2bW zLLO1c?BptQHMJ&sYZuroF!NAjDo1|e_g8Oy0gi6e9QA%szVyqKiCenNzic8zCwfy} z78Hg{7)*7ol_&6)E3-r6#Y|Y3UDT?a72V6(F+M!_f7nbqC^3j}d}ZNiGINox=T%t8 zc0$v4RWF-^Wqc|rD-&S54&dBgRxdgvN^m(vcy!5GKQL4FKM&@Z_evmnWm&%D zjh8X}a#!2Gwj9KIV8+M`{b4l9(62v(XYQs~1_y789@ei5jKdrImJ^9b8%Pj>T>Fle zaTQ$!^6ziqLDsz;umGZ(yK9}yNeh;Z^GoK_PJuIyi%5r&SLw`FxgEKy{BVwL@ zsjB+yfToQwG9FC!vxOJ;-y=PCd>9IwOeHGgg-c66W?HI`olxWAab!^&F6Q1w?U{m| zSlWO#*$2*e>{BDSXnS+$&{nL?OQZ>XDO~3%CQPHr%AYRE@m5ie4#viFP0BLPMKnZ4OmY8GE+SDEQe~sU zVo_0|RYf3H6(e1I63^&-qsfVh8(DHMpqz6_v;Ar3YK`l9Oq3G1<)du@BeI+;CdmXh+tdntqQCL)%rkz}CTq#)?WiI#`=1!Li$Nr! zYH@9zPOfb@{@|)+f&71mhgz}=%VOE21O{wC5dF;C| z@S-{0cKK(%b}`KZdlQMa|EB-3vm}{lYgPni`s6^d`lKQhCJCbBrWnG93i1;OMtKo; zLhP(7@@GPRP zG@5>~G3sj&W!$`%{vLfVCsu3b?J8*~Z9J*rP;1_KP;q=OH4fW{)V8+4_z2aPAL~jwzwH=^s_qBN+HwS+7`$j= zpq5vP4oHP{a-*y7MBO>xoR8)~S%6*BR{mpcI8h!gV7t_49K6{I(%4CH()ArEeJR5` z`>Nc=m}b(DD(G{Wt=rw1YG%^LqQ%2&F*yIxRvBuYZaLNE$8fZ*2Pj@)Yx( zUMNQM33o_;?k?a8=;Lgz;PPEA!s+U>gsDB;$-WqR`ogPO@#3@`0tD{I&~0ryPYllGl+k2mA(==KAW=bP_ zUIo!{s8lvW2yK`cq^ttbcXL?i<~7=lT-Dm2xVhf4JnMbMd7e1=^<6d{4yUiIrVfa*f#zSTASXFl|L ztFQWHhjz8l?uN#>@b4IlMy%W5yA#+2ybb&l=mL8E8vEhEaG)IcE>H(F0xtva0|$U^ zzuDj`1kM321?B>`0)GHnfRBM54{z`l0A~Rg1LJ|Kf$so!06zqVJhH(z3RnWH1|9=8 z0q+3`VDO_Gd=~%}zzpEqzz+ZexF7f(@Eq_WuouW7Z^r>+fN8+>zye@7;LBk)ImRFEbKG(MZvMV~{r+zG{rvsA`NRA>zTkv{6XowD>(5_!a(KW1 z|3H7yG2-s`pAz<;>OU=fOmWy>c)H&oKEodlcRO=biUef615o8#e6xVHXU$aQOMd{1;tZI^q(2es9}bshLQ7HYVwaGb+2Hji+HKO&_leGB!`HH2*YGRuj}zv!%RC^_bn|7^t~?zpu2j_DQ*4 zsgG5h`KM@zq9o+3-C6^sz>5!oAAln1g$v4(SCu7A}zo-MUM4nzf&g61J z>u-K(X=^O@|C@?svp8^eu_OEh{{O@e#^I~X9zEzP<;q=_+r;*!MjsaYLy~3m78{s*GW)vhsosO0+E$J^Y>d zS)UWh-0e~81@x_taMgOrrE}3APODA!g%*Y^*6GKqJHYR;r94aDJC)1jtf5#IF?X1S z{h{QNiu~AmPR92OJuBT8nVd&|^TjIj7LxPWzeIPcW#QbK zlj7s_ByVf<`@^vgCAqzPL`=OV&JsC3uGoBln}v|m){|(rU_isXX8V1j@g$dECFrCe z*OtX6Va0j0c4pInn;0U>*(w_HCmN-b!d&HypdNyb^QBYbGZLk(*kkU_)@F6MJ2SUA zSMdacT}r~uB+cuK#)O|0m>238uToJ;)H-Er{V4i3dX@eW_f01j#s?T5QSI_mZsNaY zj4wo%*8bZif2Ic4yn-e*`pO)1O2O!Lxzyjwg;_K(xCm@z(0me45Zsc{U1&=A75oR~ zH^pKjEeYbEOdpKc&`;}{jCju$R#@%9U9#F<&i!szt#!J0y}k~{N2-hNr!{gX!4=gz zOzTpjGJm&i8wYa-NXH2C9)KtwClj*dooo-%lmEN*^_!&a-5!j_B@2r%6y~b0gY5b` zL>Gy{wufCj$-G+pF|U;?GCWzxHIJ?4Cls~SlTfmzytUx!SX6nd{aZF|Q9aK!ddhy$ zU&L3I@=hxcc{DFYh=ijT&t4uhmm65Bq->sdC4{1)^$n`zNG>Z^d6w>8M2=!59f6#4R!F}~-Sc2N(6VHCPJ7d*- zE_Vr1RAnxAk$C=%qA(_`2%0y!$rvF~I^J&HOF~7 zNAf6cl843k6E^|d@7>TI0L0y<3x5(`(scY0Mrd~Y@@u=~H1Q|+ zJJ9SnB>abb+wllpc#!X7`IRsO_!atj{MvaR2`*(U^#7|M@)DRzUakdd0Qr_YE(2d} zeM>&qf!71_+hYCN^NGp%T;brX+;42dEW_pDs=Ak1LBwl2Ly_i6^XIg>)OCb=Mqn(btR5{6fN94yC8MYQ>EtI{_rv@%%BCC(2z16HvE?#5|3X2Cj0>V?dGuH=PsMupTyWj-BiTSDHJyqMzzPr>B;LvJ@X~mR_ENm}<@y ziNq%r$l@HkF!vD9LkeL>3YJvkvVw7HHJK85T%I|fzfSve=Uhtw|Ge)k{LI$R`ff&o z`c`A~{m)fmZ&P$p8 zh@XKOluJ@)P58ObMZsXZD|MNmIjj`BKA2l2&^>4y65}7ow>c5@7MmB`M%$wsrmjlpsjk7Ci#s<4d1nX?Qi+L6>!sk?D}2@ zzQOu_n0U5=zX9wA4g=jcZ}9cCU?{(%0HIIg_gjF3k?-$=-w8-M^1TLJX!8AQem4U0 zYrBh|ZG7(m+FbA{c%Vs#J<sdh~?eK&!)?a zz#1QAzK(&&9AzNVH5%Hp_kPk7xCc!=o3Q3TVPkTEF|v?%K$+FCa5zC`cFgq5=N?ZB zMu+Q)U8ir)AGuHD%pZrD56ODLnduml3S`bGlgBQmQ7767%p?Jid6Vqb>)9julga6m zXXc@dn`3R|%d|?SM)L9mj}nPBrfPK!ZEclnTi(FhhZw2gfFFgFM9q)<=EVQ9heW@{ zUiu7+^TOz*Vq&aLIv;hdxFbb5xvGGh=SJf!xe=CYb^#e`$-kcs)h44X+@$xrxo^)LL{3r11?7b?c`2;!`Oq@a&^KlbF?ti^6k}wN z9pWBFSk_O+Q?Q}uCMQDAjr_dvy+H3>SG1#C=VzVt{9nn@u=L|W8_Jt z(29|H7mvc!E;eVk=Aa+i00$#s6m#igMJfMqsBX5*Eh1ediHjD7L(5pKV@!5Pyl}at z->P^YqIo|~^M0zjLo3CLm9ebZn2o0Og8xTZ7${kYbg3-Bb=`FGFnd;XYeK1Iz*VF( zPwx3@9_^;0eyNYtckCmSH1HxeuLHIqyeu45;+~m+_3hEx*oE$GNtzj6reK6{qwcjYcHOM`Qem$s{OQzhPQ@!k$ zRCYCqA3e+n%KOR2gic;WHI!Dk$PjRdlbfPE}AC*a$INFd)XE4DlSJ;@Ko`Tk|w7J19T; zgRFh`IcH-t@Q=EZdhtd=Ng(c?v4)rXZdS^%8Jx`7Y`u2mdyZy0v z^D2+og?eFHmu|5}pAvt;TCr2sivRd;va|T#+V_yvCYD!EB5z2Ka)W7pIw?Lof3pkz z69&~{cEW$cpfU~n15EHK1~HH#3`+g77*vJx^gFn}Xbe@wd-6Y=@p7J=Y}q+kz{|Hs zG9G(`GkIl4=0z3zhaCfro=to!Xc_|z$R>{P1Bq`Q(Rj}^E%9_O6u>CtASk77!8 z5v&ebnx>xh9UO}S$nm^!q4ZT-q6<*~!9L*#rbg{5NAXF;=7X<(BFfb#o~7oUr_&Lu zN__S|$?G)Olktuwm1}H{U17H*7G9lX%uGWP{6w|(qFd}c?*_h zHKy>)jm&LbqmO92OnXEPvFy7t4-axpg`IN-PqC&J>!W2Z!V|A&Yp>L?dFZI)QMGZY zTiSQB%VGE*sa0ey=FWU+M|KSvr5+y=?50<5e%EX-q1R@P+R1#sbbYWdE8=*B-Umb`HMjI1hCdr3$+K zWLIU+qtv|Ok+IRP;q}Ug<9tP-)RyoW;yA zwH2s7;m2y;&|l8@Ts9IiHysIQb!?4 z)t86NtWr?CN8P;l&%*nH0_FFo`?83ObwH+QRD%yogXe;htM`?DK-8Qjg;U52sJc|m zk}PRhG8wbzHO~^WoUhAPJ!t**n3^m+yQYNbTwG(Wo}B9DVk{7D+pZIXD3fHS{uRaL zThb>W?xD`Yp)^a!zy(c};n`_3IlT`f%T}VG3*4tJD*g56#5+{lkVr#Dp%O-CtBSgt zpW@Qjv7qx_>dQNn=&LKMfX@R`Ynt#YEj&Zj}W~mewMDr<5-XEGbG6 zpgsC9@Mg9YyCW3y&z2aKC%yCBlJe*aw^uPoIk2WctRwb?Rh6?v(&o2vwY5Dj&SdC3 z*;nI<18$}KUd}GW7kyz%wgy6V#d)|yl3Y@z6zimX7U;Zlt|K~D`LwHWN`Fb|xBrm| zMEm2Ecl*OqP4pUz{kJqxP(4D+{>n0fEVTVmmJZOFS6!8uw#R-_Y2rL0V2THfZKqjzzX2kfY3Jqo!0lVoxBSKjCfJI4}5cj?=A4| zyU@`AZUcS-{1zDh66XNGfS0-30ek~k0Z176{x9HF;PzMa_dWdfeSL%Paef(9aW`f`TuWCPc@+vdd+r=ga@Gy=U2k4 zwCI1}_jL>2=2yyC{QqACk=Og=!vu1v*Zlzbmii^%!>n(~=M?a(0Qvm^um%Wi$f-2h z0_56^-|(sZ<0Y5u<2Ji20p)s}zpf!i?zW%Hepz!jami`vwgb`}%pA9L+YL69;4R%+ z!ERKvy(XcNHX{(DQeN-*D@lD8R- zzpKSn(XIv4X;gz1DcU@+0u{CfY>=Ye23D+SOTfk`+H$Z$MOz6rL(x`)>2%kCRV&(B zFwNgOu-g>vaWI|kdazZBwh>H+-2}Ey(YAnTS#1T|sA#(!f4jl9DB2#!-(Ij?ie`f8 zeC!9?t7r$niWJYCV4aHQ%d=(g2lL-0vI>G}{=#5|idNvz3c-ddS}~Z8ZxGlRMH>pH zWi<@!YDF6XrsFFEo2O{w9NGl1Wr{WxO!GVgY_+1z0TbP@mTuRAtyi=g!F0Owz&0t` zLNG1A+rU~CZ5h}w6?Qq;K1Evvrqfsrc0keY2h;U$tzgSV29JPg**^|etY}Yw>3nPi z8=+_oU^?s;uo;TB!|}HZ>{>-@1=IZP0jp88eGbh8Tc&6oV4A-JU~3hv3ryEFpC1`0 zS^!MP7X;g+X!#DU0Bo0{6*;tGuziX)1WcFFP_Rx#8xE$^9RU`Mi44X#G#(?!EmX8h zhc*>#n4(<`rpsdv*f>S2c4#+(U9D&}4s9V=jiN1aXv@HsE80pho!?bp_bb{OFfHf% z!PYCDcUA5Evp8weTudfOy_q8Sf`@x2Ge0%!Tc*k274Xa zKCrN&?FZ9gJHQGRtrJYA(FHb4(fr-$K~((S)pPIoxiBZ^iArsEp})}Uw;z;r$;!FDOy49DNqV5Xv73#QYk20Nf=^T2f7 z;2HPapdm82&GEMctVq$8gXw;4CD?F9TMeeet^pgTXlubVFYCZ&DB9y-x_sAzU8`st z9eO8^HByiRnf+Q z>3mE8o2O_~!E}5xz;08tIbfRSYr$43+Kmov9@zbgw$P#72DV<&mVxQ`mV<3kv{hi5 zm(^gcigrJk&f8kB{fhPom`?X`Fn?TR@PtF#2$rvC4PZL#7O-MP+W|IQ)%#swBNVL_ ztW44NfK64jePEgw6RcX%Ivm;ouo^|{0@L~M^`M_rv;de68w6XeX!&5e%nQICQM4j3 z9kv*3lcEg)D^k1+1>2!$!@+cXBfwe}Z48)}!8kBe(JCE(Q^5j16uDdtrqh@MHbl{? z!L(d%1RJ4fHDH>*g<#_pZ3&o8cNy5Vinh|Btpcl2v^8Kljr+ltDB3zO-QFGnTdrv9 z!F0M$fUQ=vO<+2|4Pf^x+E&Nk4zTr#w%eh#f^AZ?ydBR_xFQf$dYYp$=^r znE%JZ%Lp)CZe?HviZ;%nO#mCBXj8#-SZ64S{MO*05ZUbAT zXv@HKy34`VDcUNBwi;}cqTTP%)`IO)v_~A;<6!$0?Fomr5iIZ%$y=c-E81=_Ez?%8y^6Ni@+YR&n=Oyj z7#CtS7Q1lYidT`Z0`8k18!sCY8@DNb<&c)LT`=m4HiPXJEEFEKJJhGF0W(6Qc)s=3 zvRy5s_K8EwC{vl`7`5AHT(Lhku2p;}gKm3_D>${?htas-kf3qllq&46v*Q2h4LEZ`Dv7__?6=hy;tkjuX66Z9F8sOGR6)mjT9i! zecbQRI(hT3BCd6x#^#qshT`_$j@#o&w{YIr;6;%^IDgZk+aJs#GZ-RGgP-i?)X+C)}=9nY$$TNoB$D;W# z$a%;jwqTI+)W~-8#h32oXu6nptt$q_78LM|Z*YYeeTp{ZVZ^WWrO?=xx`vwL*nrNB z&-agwm3Q&BMd@MdQH!Ug4W&F@vfW%HF;)~9i@F-$_47hQer)W}O0!rPsvTs%sv+$s zEnGyxwet4B8OC-L?M}tG=`ty4pMGX5etDo}WS4wL|Cv+Uj^^K+Vt{z|Fk?|++~0!b z;nL2UaiM`_KK7E09!S9wPch|-ge+UN@9a`ilEa2d^X@{CQYTWvpl?ecc8fpS6hH;7 zb`#u}JpZ(CIXA!|o;)Ao2+et)HH3j%^q$n8lw2^OygIK zl}K@>@_Vl4w?mccJ15ztn!;~q?Ix?n4iV)z?wTFx^7~b@l27N^^;=BRRQXG*0yp=X z>odh*7N2s?j^)diQPQ!|;G_?wL5}o?`i%0^+(zcpAV=l5jMVNU3si#~$t8I7c1IP8 zk0S9=WQ-gX8#O3e?jPcQ|46I>a?*|_RzdZ6zuk(KJwPk6tyo~mO{_*|eOwoX$>`sD z^!_+DFW_pi^k2%@pxj8}n5T(Tk_2&x=Bj>ONj;xrrxE?zr*Z!;Bx}7pVhg0{r|aKZ z{UHz72aVS;*U&q5Yfxz?ZbmJ$2Rg}BSS8JPIcNS(DhFj+GmKMgc{!(h%F8*gadu7r zgEh_A?fzI*0L$L7TY_5ak$AC0?fTOFvi-jYKY=gi=Wj0@k)N?%`~*_?Nq*U!=wJA; z?A3@CW-#XeQSz->@qznfdA}zjZ=O@?wZ*yMO}CgSJGjcHF$?p zyT9^a>mEYz43G7Ekh~pKXLs6j($M@b9J04SyrLXc< z)VYpQx9hDabfcx`_IiHE>3#aC3_7nvjpcQyKOb);FHciCh2*mBqTcJHpGmbiqNV}I zhBh=_vJ?S}_2Xds8`{3h`FiHiE83Y?dle?6+c#_a$(r6j-Ad4F%66+nCFWrys>1fW zk2L$3A8xzR(oD4{AyS`sEK8nzn;Ep3ryr=DZ*0dZEVdmxc^sp*+W7cTBdT+W+7qki z%W%2zZzva!`#|3J){kuwocHdG?n@R1`qW;;+i@r^GrpX=hAApEK z+*F?@dIhijjz{o0^F4@h{p-^XW$JjX2Y2>#AO51%J4_VC$nu7}UCmq6ZJ!(+>+3ZEUWPwNOYpPwuxy9Atf82*fF8(twy{pxC{i@2tobLla0PY6X z0Z#!tf%kz<;FwR)B>*l2CIH_6<^u+>7I+fa2D}3t0D69kZU9gMj00u@Hv@M8_XB?f znt?Zg4xn4t2H%Omxxg6UYruDbD6j_j9k3aA4cHHq!jml+|%%{X1(41YbnoZRmUnr~BN>e2$r zwY>D%sc!donP-mGwg{x73p$=p`8J+KpC&_{Ch2Dpe%jx#qfb!y9?^G>@rr&FrRw2% z`(<99`_cGNkL7_#o{v*}SFu7iZ|5BpQD{qLd>pxKf5~R*>k<_0Hx)dY=e{Gof}SIJ z&P?avC0?GF&{UG?yi5yiZ?aRp_6EM5w7*{Et8G1VWt(t1y+PXpF2WPE+O{9M2oKRX zJviC#DV~FbPI9u9?yGH-E3R+R`iL+v>UzdX|jax#JkO#Q?{7 zN-;Q1=2O2EBD^9+Am+Jj21h|S3Za~oIhoNy5z`oE{I_q2%5)Z?%oZ7ZvD^!@C86a0 z+eeR-#MRXGwkj@O+u0gV8*Jk#Z-?--NMe|a@TmAW%|#dvn{CIr2oHY?f;R!{ zy~Jk8Q=u#LdETM7dA9x4N0+_9N6g-3bYI!C_uw~q+&pqbwX` zNDY{uN-3odr!$^@AR#v0(tJ+7h6pmr+o*OP-9!96*;rrR^J;}eJ1M=`4@+P-3ym|P(=|)fTZ*TS_KQt3^ zX7S!H#gIw9j!A__k~_W0uX&f{T5nEzdRK_!uJcUtR&ROllk8+xh;!(+JjngMtIuL@ zPO80qf8?Fy*S#~}qn}xy!qLKjmGkPWASEpLdc6u1ZNV zrGs7bgH~UxTfOhUfNj9LKqnCDUhg{txCEFA+yLAG{0vwRv;c1d{{n(N>V2mH7Xy=l zYG5&NFYr5H3-BiJKS0j_eJyYyFcG*8xDEIT@LQk}Xazn5y3@m*3=9Lt1J?lG2UY<$ z!=vh7hp-Hwf8~{6`!TaGu|(mW!OU*<0=Bi2-E96q>1O3-LclCVzD9TAFVH(tedbM&<(2U+UuQx^ccc$vX` z>WK#ubA5At&q%Xg)}Zz`jqP)Np~$w$&;#Z;CX>-Ea%GUmT?~Bl{F^*K5`EX7x3gx6 zY&qw|dT??magOzy)yfNtseOmuIVlnSz;9NmB$hQuw5lRX>|1s0e`hl5#D0$D(efnT zTBj%`n(#(Sd7PT3z&Z-7A0h(fg#Ow;WP>dQYg}Dt}!}%ro-08ut`=Mzf?hJ~MyAGx8TO$0XBRnUWqA zzuZqs0jc=|Qd13>$7D(MuV2f^{^Almmnaa)@lM z!>231LGvdnXlDI+b9P3`TOp;VJT;l}{j3R&kn-8-DW8xfNlTM0Wx#?mW&puGTsI$RmOgEelor14tunos`T_CS<*Wu zIn>y_?I#|+ZTDn)6TQ;=8#BL@{QVVzSMTr(X9VNjJ?Y^0Ne6!yR7RV`Jbz-S`Snv+ z-KLKU|E)&_Mm~4A7oj@gPW1{G&+OfQ;L*FEq1aXJ^t)nMDZTu@SS#iP{H zqSW;KW++Q~V<#i`h#H$mfM%4|h0`4OA)p!VhnVB1@w*RFD!)N<6_b0bRkd=D^ay>} z_4ss2DrinqK{MOeXPGJgJtO6?**}@`EK&}I-4!Ct8?EL6)(ox`!{+-CylTW_Q#10q z22yHX{pLCqT-AvETsh6Cfy+|U^P9J1N$(_Xd>b&3F%;L)`&0bzP{1xsliTceSsQ{T}_`$OW%+q_7ZUaZCc^%je@5g8r% z&IuVJeFjpxNL!e~SXCw@Y^E3C!_E}P66w7vKxUPBdy+~oZ5pr@sxuAPeuBsJ;SAk` z)53+JI^lle74DxpJ@;btO-QNv3z{FWKV#+ZT+TI*Fi<^2G;|KVBm2v+7De@OtoB#4-DQ;UcNj4_*+WdRdGm86aNU7rRo2|^S zEO8Wxv8MFm-ssH0tm1xH1;`Y_V%^iH3E|tx&VHePu4IUFzz*{oovO}JH*%EM99p(k zj4Acd3|e0E%;CxORcORL!-g>gn*S24sH|l(UOIM#XJ|-sz0gI1(;o}WfyX0O+ zbqrAn9|iCc3OkHYM8?=KY~{x&o=2SZv0^bFe(q6`47K9({ z&g|5x0l!uOGHbwRTJr7&`1hpPo!y}8lj;3_zdM&!dgbZqou4he@(ii|9a5@PgXTeI zR95~jCA}jw_#MvNOXW0ZKBIyrbDFZVdg*nd{}JrXo@bDKOP~$-+A;OM=Yflkt@r%_ zI4e}|dk8o=T<`lS(4$YiZvpTDFz~o~-*lh_xTG(8slW@sKY(xL*ZW=vF7H?Gdj=TX zzutEr(C7GiUljNl_+~-9?-gLf3GC&bSnrz!+zW(H;*1OES6J`+1#sTU^}dIJ;|J9H z?gC!#RiD)V7@<|p*NQBESiv-UVM6B$zhz-1=_!gQZ7UzcWj$kJf<^62CVhNFMQ`6@M>>US z(Z19EiZCj)H`rf4g{$^I#UncukB{m>gu$m`H~X4~uPzZ<_L3Z@T^Ma)YH+}K+dw5< zc6ej8``Lpv?;3>Sdc)yp=NSt|^5l8=ta|l+7(emI7UJA*POE_1t>zDJ<)^Hm(Hww| zY>%_%1lCxTtHTkK7}&5p8omksBHIaYb!V=USW z1F(Sw-ntr;B`J$a{7k7d`w^OxT_P}8wdZhK0DCrKPtB5%WTE{PIs3&bTaI$Eby$Sq zpt(*OmMQ?mdxhUPE@=%%B&t@!cW zrk?q>;wl*rVX(``sYEXQnXUy_1T7X)*<3`ZFZ48g22t-)suw!(*BF-D1|Tq-z5a}f zZNGQ<=r;<2JgH#&$VVP+qg;gdrKg+WN5xiN_kN-g~|XM#$9L+sV;s5EbT zlw#9a>`f5`EJakM2Bn$(goIpK40y`nUlG{*2V0glzgrk|zcAFmD+yKa3iTB!CV9Ne zj^-DXqO^g6*vvgt!RTea*rL6mWw+59GN!(gEhe&A6jq|Q=KG9Aftqu5GuvbS_$o0M zyIbB-X{kgA6`i79)l+Wjw8TQfyV3>|I;S0q>=3_X+F}rBbUvxaD)z=J_DqjO_Lx&7 zP21>lvPusbNro2%q-60etvfce!x$Y@9GK62`+)>D$Ai+Ok5hQfR|Wr#rWXnRNwxBm zUtNa=us%Afe&9aq_R#o13|=ym?MGkLc8*d8(WUN}qA7F{Zeio5t+yiRZt5C*h;=+U z`;RX4`(hPa;+UbD7p%?YLQhX)^Xyo!*v)=hj&_M|FC(5Nwp(q&#bY4+$whcnD#3$_ zp!?%B_)wLA;;-p1*4;w74_DRIDyFfV&>hHDF2z|I!Duv$_D~weSo+ny(i@u3Or%_< z9WXkj@247gHHo{Z?Q&yko-QQj)<$;>2aeTMYrnaG?Y}4{Jck&!W1>&Qwcq?EG^@JJ zkR*JuJfkUgD;ALLidK%jb4+EG2MCq!XbbCPI;FNcwp4AxN;)9=09mOVFudP4r4u;Q zJOA;qVQp~qU|IfUH6?o1qNly)Xil?{1G5%myD>G_U-z=eoHN2%XsbJ89kh~{xl;AA zxWstX&~dRDyy^<#p@ZqAOlR@j;3;4m@FuVy zSae3c?+_3;v)=b8@HX%v;9~;Q2e=U4CcxXdKnrjUAb)vzc{%c*{g-Pa&TsO*hFf3g z-<)q{o@Sq#GT+*9UQ%i3J8FC^N!~WlN<+;Qmg+c?`lzSft52n^1L>#aaN2by{RF2d zYL(Q<`t#5|4{#>kaHw@QhWgphuq-+zm6HBO{8nw&$G^2YxYgK_9xJGwDIOg|u(UlW}j zS8JX68529N-2K&ABr1;qb9WYxUG#G)xqB>&$M-Lk{x74Y?J4yn|C)B`iZ*CY%@S=_ zs>iT7IE%-RNyrtW-^|V8@wcft3Y)S&?9Bcz7LRW+F1bAV&0rRfPo!r?=I>s)?w#)O=`0@Kb37Wu)tDVN@77+qHk?Jn z-D6u=Ee6IG%w}JBR$h~uizK_p0jYBEo9AR-;$ zyvjE_bKpA1BYeKqNBz+qejh`wNBDoFcCP{RHXSHq^cll6JS9g{vUq$fJ?m#@@%TR_ zDKQ4koHUOqldxr1w)&o9gJQth^}eydJm6=*W}qF&AIyFfa6NE0un~9{=ryF?R{|^t z?gjn~m_VO%>V1QN%YbU&N5Ip-`#|t3^}h3gS-@Sudf;^+_gvx!?glmj?*hGsqJIti z6nG6dp2&b}) ze)B7PQuo`9%b15(skzhv7MBOi^4H|*DyEJ1^BxpCHkIb;ZLB#WtS5PH347%oTpz-D z-}FlJ2ja45pHXYpC2AgrsrEm)GRS-pV;xpaQ6r}Dx_KsRL25D!gHE&echz8NY`4eC z6R)wx%9>eh>lx$yp|CI1CkG=EdpSsCTuplY@EcB*QBlW7+-Yu?gN)jsJH@;X^GTtO z_fOB;S~b}`_f7kBDfKS6b)T%tU9XLg%LoM0vwh=u$a36FSJ=87Z8sh}x`+m6>{JoUR%HOcAD(9zb`K!L2 z8^m0WQxObjFCn&wRdUT&*eLP1rmOP+3xUcH$N%wV$Y&RY*iZ-vJL1gAN_Lfm@VKfii_XXzLAL4qFUN1 z_gZA8b}L(SE*tJ5jR`5zxb*0xF{HL1a*%?GEo2cMD^Nop_9eV`hwT@6)%s~DE2r~} zx2IDY)=umJ_5jrVcM)CZaVgue*IuZ$W2f>HkL*H-9cDA*D*H}}>-e#^V{eiDRTJlg z`9U*Hveq;f?QdVlc5G`^rMab>wH@2)-j3a?yl+(A_tJ>rLdrK~JGPbW*gFYL#$-FT zqE+@Z?99qG?3-_1Q15#Vm_S<(GPm?7T8YL?fM~B5oKKGd`0azNVjNTO0l-_qu74!92~kUpJgFC+|?Ipk@6$^ zbItU5v5Jni*I=Bf&xI+8ot3RVsE2@bO0#Wlm2feKQNm4&U*!=akO=;32| z)GY0s{S|g_2s`4~%sGY*UI5E#2fn6PNrP}6>1Zz^4;5mErM*9{?B|A5rg*Ic$2>@r zoyxIoi|Waxeu#iO+kQ@qAjI+Pz8kL!%Tk5ueC#sjqRy3e&5GOB=l8p6!F$6QKY>$# ze*woMR`r*|pWpA#&GE~R{>!rwzu#w3T*C$SVa|hveskwm`zE8bUOfei3ATZPCASAo zXG~0!m+gu%DVc-Xh8nC$sb7&hd%4@&n97Hzcobkcusaj+BpcG zF5QGrM(z$q_0kTb)o2clemlC=hryfQh{1}50};RPkW2iSZz9xm^RS$-c47b|av-mH zuCMR&(S}4-^rZv``M1}<<-=R(4;}bS)ON^@Xx<^%GN*1P5VM3Pqr#MfCm9L$!(-hy zm}%$%7rp%|GsuF-na-0}cmCM_{&E={`24?>!Gi1={KbZB8N8+O=rTB%WtS_1s(wZS zkE$WOr+rhZX)gK^l+diLMC#NnDR}K)wm@Y-Out#)goPNwG0#IkOdg$J%uER`;lH4Y z(*0OZF!rrEIog?@y}BCn^QoP0d`I1{jh$y5(4|@^5`LAnw#0>I<@-NRVD(H*pXTLT z^QWMB0w6G^gazClb{!7d zBdu;GUz}f>n{rX(ESQ!(?eo=X4 zjnKQia+nC{YC(IF@>)e2M^Ro!o4>P%pAg0K4DwM)08)3g>L*KYe2EkTqitNdUEPdHUk<)zFGrnqqA^Fjh zF4VuQ!17C3V>d%e^XXcdHMFXB-+CC3!8zC9*uG z3}tzivNlp9yfb49N!{>RIBH*Ec5yvtR)?NVE5SQC2^79k=Z@C+Ci6KxZWxCx1=87m zbBYz@MYb>RLXSPK*|<=%o!9yWTn`ei&&pDx%fp^5k8!g+#r!MBt1zs$sohH?DIbU3 zkM#Vw5D@J#V>pbNKBhmoTTBr8Z|;m>&F~ui-cIkB*-s_0(DT zIWd)=$2jg#lFG`DU-(&ux1*5Hk$Uzl{H%B;MLs8`@-xLaLAK6tXMFDO{cCa)TYxOe$>KdR?|kY-pvo| zZTS(7_+c!RAGELdDQTG1R6P?mtJiV>P#t`bcjlL0#KUi+9ojw|%o=FxiTO?-4y*>Y z0*?as0lxx{<}W8V&)= z8Acr~+Jxb;d}aT5bXT-95V~s`ZrGJ9s6Z7ZvP1m0M3i~$mWZ;g-4bb4k%S{VLVdco zogq=>#Ul5I!T^MR5}wC-UrdykgWf*Osl-a0R*KUnDzZH~&b|6)pZ+oBM@CO3Zrz!b z1c{}3-lyzz%;|FPbliezf-ZB(Q1pfPHHWc5rnKg|%o|5_f!7paM4Eox*p22YKM$>~YJxRpyd`;A&o?6`{ald}@+L~qerE0KnhhG?Q&tYT9rf+6fh zrY{!RYDDtM!X~cM)G(6lb7OsbFp6kJfVL!$`1h_Cm=!=edgwHS*$ic z+9Wr8N+ZEg-JP=Otv2+Us$Z2ntI9M;DpTo&t-jDeUk(MaV>~u4T<`(7z%#(c368!s zM?6dSFCi9L*QTq2dLSz#pXny-l#=*M1WT7%17phq=w@FcN3@W`fUQ?`HV&yI#*{H%ic?JzRvdO66 zA>?@7auv2>qxpL-0=EAp9$BwE`A!f|PgtG?>Gal{G4^8G*Ty4{C{J&mBAz(cQZW^2 zPmh>mxTe{*kgs@Tt@76wE{(`K%U^-^x7I8af0fGL8s)F|srak7pYn|5#OuPiv|yE* zzj(!(O7mH+E47`XysuK;_Xv*_tCe^852G1%0ToC#0|~UM(pf(QfYog0^OkkHK;((oHVZ5RtR!+%vNXeP?Y{<2}N-r6&6OpTw zn+C9JRGS}<3uTI#PgfeRGsU|mnYk2W+pD7STsO}SbgUgnC{xULdP^X&D@Y(AnJ;jE zsO>=&sM-$n?bFC({6;=gWYemHi8u3JCOmC(Rj}c9upj43wcVwC3DsP})s40>;!Byt zLcgj&ylhooForir+>4catIFd$BHfvLq@#)C8#|2JR`fchBiJfs@7ZsPuDsL|&nXv6 zNe}I2nH(nOb6mDn=C6+pfK?8C>l!p$Tg}&t6A1}vDctc6yqS4wL6hE3Jf#!!DbqQe zHEYe`4$&M|v(Jbb8|_!O0qERzIGtO(Zlg}8)%-|GxkDf~5;SHW;J{1rG&*P| zMm#`=+`*{(b$U9pgHN=X(OT{>$7npiI+m)nENSD8_59c^0rNTA*F48p*ygZB23%kJ zH_gMPYPujvNX#o-sl2V6YCTgS36&5JA>^A++8%Fn5*lGA6f23>Ezz0oFgLZQb!DMt z&1^8WJu3Rkb#oF{ZNE-hbltUlS{=+IDuTFpFgHr2-LC@7umcniw3>%dm>;7q60cjU z0}09OD}m}&ph`Q?_h=qQ-BdoURMzMK;=#<7wtuGzFwPFJQ?WH68DNzTARf$jC534c zAhK6g=kRevj|Bz_)2gMau2R>A>InCm6@MqpDJqO^0(<%rrgl%fqE-BMr*|3p} zwCtBml%Shu@h$6-ESjHB4^2O)+tuQY8#we6GxypZu>>j)Wb1wVd-uL{ zsx00Uw}j1IyO~#&Th}tN%&O&bg|td)rsNTZ;+U5AZCA`GjsQqO@KcB z`32_gz4LyYIdkUBIcNIp+3vo|5?ywLQt>V$=mBJ*viPM%3`&C#qo+?OOy`@~vP(D& z`7@GK&*45%D>egDGu=P#eQQkSZ7O?!xVuzZaJ`Pi06+gIn5!(F9E?nTv zj}^n+{=VFA^QZI=#Lr-bN$51u{QD`@g0G^B%i;fcap^-%B7Sk1la5x>;-XFX26pec zd~wOr78i!Y%03qt7Fk@L>}zp3hQ)cl1Q@2iFANs5QJ^a# z!EJo%FCT@jfu=HDBm-R4=YV5H>_aPpFE?eD&QC^vGWPS1JnJ;MvJwj~IqgI;bNZqu{cIvrQjRoPV2WBI5Jw#2BRvXd(0D>-KKFwfJG zUK7)L3(eiw*&m+wn~I?`dIR(vu*WdYfj%i*5!~Hyo8Uf!8!{Jid~oL@-qmpP;oipg z3Am+rAMe;MJ%rzd`1QiQi1#MAt4d&F5AI&L-^0Ctu#H9ArC0I(cQ^)Ta6(4|ZXet? zaQaf%RE2wK9&}pgqkQ}pW6v=J^~{5F!)>Dd5dOfgfzX$7413!s)3Vg))2m|=@G3DS zA(7ONa40E|$(2uFgm{J~bzi-m;R|%!G4VsR55C&zhgL}3Kw|utiwP~o3ILfsR?H4t zvGfc4!PwBzSk?CnlSkj&x(5PS?UH+B$a5@0iqSzU1l#tr1_bjv=(!Y~Z@M}1Vf0Nm zMLyDTL5leBO}Db*i!l0gIqPJMp#hR@|6=#3)A|!S?x#OVJ~1ydIZ-JbefCMh>!Roj9I{aIvl|wys)z z&ye4k|8jnr|KY}~Iz-46zK>=>MBJR|9^`47|2`47`C>o>hR zo$h}MFw-WT`)AHlcF|u>h9C_$#T$Y`ul#5L!gr9%T-gmV+DB_}qvNph+g!8eKCN>x zJR+Fi*0VItN!;b%bnKwZy;{wX$qTYO=*ttd^(-uNCvDczAg;ikvwzL`1Qw*8*(D7L-bZ&YY8*JFtX=I|S<&|f<(5{gq# zWv}d}GVR@gklxTmCD$(m?wgr}y`;8*bsp4$hF+;hrcJM4vzFN}lH?GYNmO8S(C}#Wq{29bDh}8}M9PGB* zlv+ceRgWk+yU{YWNiH}9I^#FlZK`=V?yfBGUDs_p<@ruS%4kDjJ0x=qdm&_sLx${z z(jvB;XG+XA^r@^SDRr=L1H&Fli_UW#`xSs4KjC=!2=?k%%KrgYNkG%52elO&x^uP1?R5OzA90Rr3NLp=G| zYU7LU!qh)rT9s6Bb+t~>OYVUV=Dvzw8L6(cX!j)6=krsIa+7u%;4jeC=YvU4Hz?NU zTj)i*v=msQ2$YI;2kIv`;jTlvY1IPSfaE-%`x94IqB~Us-wamka;{nZjU?$MUzzFB zYdED40p2kDVcHVKKb-CYwq)sW2J4_#Ir94Lpa4s&II0sK^0u8^0&aZBlZ8T==`RGS znV3im(z$hWUx7K-P+MQXYfU%9`W8g5sg2b9Jk;C=GZGVXI-VzS4euv%m%7c9VMgU#?AS@nW?x87X~0QdEI>rEVl1t?@y@u_VIzkgL9I{ z5rkZttlB5|3M?GUE!a7pa2(Me7-sc2uEY#^uy0HUej-E#As&o9q4GCy0z;(BPP!sf z#LuMoT4Y2N@y+EEDf-%Q^b9S3%nwYDxY^;nLd=dr%!c@Bq0I>a{N*@0<1ofPoc}l- zGY=O6-m5PNg?<1l*2Jr2mU3!(`^3)AsC3Z%Y!CtMymwinYKMk$GUz=j54kfu{kp=Cx8oB3HmXc3NzKq zvA{z?3Gu^u2mU!!`5Jld@t2IA=P${D8#50;=QnQ&dB!`~SZG;PtQ;eO`o2dOUb-59 zsv{Jlysa=tO-6%92ad?84S}PUoCb^tx;dvI^+3*n)kkU8I>K+yp)P{0t?W8`HvNvF&H^LFxEfjm z;G^XDMi6W_mY_S6u^B~O#srQGN^Rg($fPRB+w9qa!)d93oWMAm-`poBa99>TRLy{z z3gdfS+fD*R)cWu|*N7W_9W>1^<=8B2A;;5_B9KNHWdosvQ8r%FH0(`iCi2<>Iy^-= zVo(kzJFv9`1efQtSuYU&PJa`3WPqSpnUQ)Qv^LF{KFX0EjF+J%Cy2^tq&BSnrU!~X zsy!>GE7y0Qd66$a4M;!Ve1MG$t?G5vZv@R>RRT1hZ&6{3t=hrfx{RCSlVJGL&afc| z-3#k{lA3EGAJ_)^s>6QF;7L;K%-A}r(|!!bsc?qL+{r933UUU?c1*nk~} z{nJ+P?mlHD@baajGD0sd)R}Lls)Cr7D?bJ>=Db&L&j8p+zLN2_LTe&&h9=y24xScu zjzzW@_3~ijV0EV6;+r|xqN4gnD8%Vx??L2&NoqUUXBGm&GeI4Z)~~5EAl)KKz~5=~ z3zj{N5DAk8ell_C<63O?%#fXK;YOz!s|%=)gkEvD*ZSf@FlViA;Pzd$B*WIU zA^g7Q#q@ov2aMJSEXB7+i5^H>ecM$A}B(Dl5~i+G_8ywF`#=q~nv zC=@UW?rXkT*$JfCet=Eq(~Ov0fZ_((I|)lEs)e(%8v#9nnqT)eQS%sph|+FWc(0<- zqhcR=D6C}8k6J>@jO7Jv+Vk5&n9;x6bH+}8$< zcBJN19QQ`{Qm>MKZBbJ%a{nqgbOlcLJBcpeY6u3~G1 zmqmD;2(8{t>wfDZc1>Ks_dLKTwHC4$ZaGAmXeqF+BSn(bI+;y~OVPyxOj7G;mcs*N zFK3AIqEGR_6rgCkg{ty@p}=8lYCzo&+Bb*gRf6!WLm%D8Ip@?zEVhpjP}YZ2AYy64YOFSOfR>T&MZp{eCkSDZ$wI=bG5ZZvZu{4CXFNg@Pj6dLQjBq9*OE zl53&?gTgmW?0>Ln8fAgBWq}cX)^)fy*MSF1f}a=_tX~9wCiM{5023fzO#f&|wymEG z0GY%7_AFnFa(2IiETqnF%1zp~r^x@%dNhrFI|u7Yo(Z_#o|)T6_#T84@@WEX>zi$% zbBx(g0nYN}WfCD)Y_8A4IS-bL*%>&MvZveZnGi}%iAo1xMH*6px<1jc4Y^Zdd__b$OS!^Ef&=T?nFMg6aHMIt<%#6qnfpV z&GF)XD=R2*Ea4Neg!??*noywa<3yB;yU%$+g&C^x3EFUDeXp`lMAT8e(QZOitp8OI zXFQvzpbx6-?PnD=1(XAHq|YiYxK~)Ejv;QsS_1K>4D=vCfEv~q@?dKa40*u3X`>@H z7!IDpwmhvt0>FiDD`_X$3m87To(8*{2V4G30O#YP50%e*XMIgT%Vtb*(Hf>5wUz4@ugW60OuzGy1@Ctkv7=kSqe!hS`ruRw8kzFgpYcy4HhV! z%wsuE67*Sxz;1n>SRV4k@{q?joxZ$uAQYi(kziQ?z(V{qva4WX7k>R3D0+y&{R69@ zwoJbOEW-u;3c)?3jkHAtMEx+PD`aac!;1b*B&rEml}81=?w`#YlMh+ug&d>AuXcR@ z&DT4UY(5kgH%vi0|gI$vo*mO4`<+#R*J&GO~iHt{lNsZ&P8Yh9@(LJ&IVS(bDqU+2-{$1QwuM z5R!zzu@4^)xkd~N%(DB6tw8L=dU*)2i;huiy}MDeQJ!zWIP*x^~-A>yk09HWbtWZX z7EpqsZQpqwL{(8`R7S|M_{m?g8zBX4N$O{U(&uWMj$M~w&8&=ofd-Vo~6%eFtP(1e=bN$BEAWnVe z%@BLZvK^PbB=fD-YFI6f_!RV50)D#__-)tYgx}2Kazu zZ4tqSu6{5S4#oLNO9Lh%%m-g<3bYKYIHId66sW?JfYSO%VB!gaXHfz%47=5VSmk+1 zlu+Kbn{KGoIm#DfGg12}O?EKWFv%^%WCIWgR-`zciY4k}-g$ei$}xy^@U1^_Mf#}@ zHl`e1#WXnev<>bff#{+B8r(+$(L?R0uM%}l1G|EMK6**VMgox@`!{+ZYJ`1ogD z-=pzk*Z00FU&0|7I3qkcEaAx!*#)PIRUhyIV4)QkCmyhH-uuvlPCDdXCmno$0xtG% z*tw5j1WEv**1*xhIU|Upm?QyMb6^Z8omhdLkP|cM0Jy#pzU3y_`y|*Yh*g8}12jCk6DFf@^zOmYJ9UPM z&fj;st#Rk?K%3OLw&P1vi|F`0yKzUT)r^yP6U)Ral&!8@*)3P%G#cVfxsnRQ_@FYr zXdN0Sf%Cq4E;3o9tTGKpWq7l34%>P_ESw3VZ$ua^Qtmc`=d0JT~jV@p~WSJFI@ru7ifuCn(kDoGbfH~z0$4O`BOD=9;y`p2j} zqD=!LDXPLLAl`LBTuF>{02%{nf+&f5k7 zws!UriJ>>JJCP~hHw=%YTK7u0g0SycNv#am><=Q%Q}4fnH0~_)a!p+L{UUrc&r_}} z$3$_ZNAhh7=i5?5Gl(FE*W`MU>K_NSnq)*$#MZZx z-4RGA^VM(xOEvZ?f|n7Zs{R_XqqDxj`5a*yzJcR?`NX!(#Be2POgo*`=9Du)qHR?kU3eJbb?ecL%~d;P%5G zTM+O~^<+NZXfWvY(f~4ps5$&3C7ZNw?n&>`K=`K^BIugV!&V3gDwD7da}=C!fef!w z)2;+Bm)H0R+xaOKyA&KN^%=@hZKDb&gZ?2Uc7f; zD)_uE{!T#-)=gw@9xox7g9;}hc2T(w`Gp)4TF+C0mqk4F+;d_p*^$M4bH(fySb9}= zP(JEol)vqy`<9AnI?qkn2f4z$tx2A-Q`sHLZbF0Q8GB$CV+ZdH{{*Ume>|S(ANpbL z)(5GgZ0hcVk}9h0rzY3}ZjU1>@_u{vLEjEaAaV-l@fc;uCTe*E8xr!kG$xO6T3Y)q zb+)x5U?_D6m27(hE6aJ3K>V9;9}E$NqlaNnH3?^wx)5%(;IdbR-8p|}Ek6U_4U&H9 zGt?Zq^xn05;p4h`!IuGl7xEEOok3#f9#{*3T`)?(bwIi;TDsGXGad4k(I78_^uU3j z@^v?8D?JXZ!{pd3ca;(x+MbN4FihcR{L8?Af=@mqyMrWxiz{=$9i&3D%l1tkWll*Xb<+WgtMMpel*?9qJ015hy?(b*IZ05HBB%yu&hsd zPdPQfJwZ8@W# z$p9z9d;5r(fUIU{o>^`4ZOtO@-ZVPlhK_tkjprQ9{mYIKTA+9^=feIEo2)kZu^Ozy zIaKXSRQm@o1e*=nbJNnnbIJaK>$k9(dzN&BUFkvb?B?~CZ_G<);fK{N1CH47){&B^Lxgt1g_8$f3q z3F0dadi9Y9K{xuipQ;bAq%57eMqg9qZAT<^lB!p})~jIm>kJ*(NTjwwlmf$~>c>@} za{^x*QyWyh0ecL6XH)8N?wQ&qZ=a!84kNPa4N_60L5dIkCX?Izq9kQX)lxbR#0OMU zRuwOFBTmoiud!=FEX`blZ!4wr+n-iBvQ``G?VI^@wm&V^d*`DWn4EaK0dIK0nxcgv26-jp^#x!dFvE>Lw(TarNI*0@=*!vp~^#PT5|sF!E;^;ss5Qr zAd=O4C*qw-SFd$|Z9-eDVGcI&#+%Rd#SFlq)}> z4sK-6FYXRO2{MAj{zkp>48c33(XQxSf*vL4UAy*0N?1ZASQb4`UWQDeQjcM;4d z=yWU(xpO7Ri*OX;3Z4M%xcTX@v4Xsr5HnOA>FQ49FeJR82%{WHR*tq|=}g82R6rF& z$|b+O25pXQdeJ=gQq9RwJ_M$0TM6gMUcUR_#G1-y5;xa<&L*8)`4n#sO+t{@Tkk}l z@i~K~bed=z%^v;IQSq&M`XE*(905>0LZ;2T`GM7w8gjqYJT+d9^PyNr5P+bV-UDkULj2Hx?%RMAA z2><&L1|jWv@(B-tQKK)gNt`EcIRFtdr?}g8k zf4GN$7iQs;uSUF=l|WLsyQy?F7us=p07zam_krk+fv&@kJrmCT^AFLg^J!+0XLQc4 z9mMcm6`ofE)n)18tg8RLO&SY~c>yv+B7Vm@1K4c z!eh(x{AGtBs6AE9b7v(_)w^?4ev7A#XR>5CsXL2O9GZ2NX}=`Wipuh(EBx1pdERpE zCJZO&k@f0UstvXSK5r&bOGP##lB!IGM9=9$`>mkcgn=4v)VF6NfI z=}?cVGV@uB){z_y>kXuzduQhKcMWqOkgaHfC9stgAt) zPgHH(bkL;oF;e|BX4wH-aG6{>&+n%(V(-3(i7^_i*1@Ioir7QTxyZk62gUSzDF)Ek z(?I0dOs)L{@XHqkvFEkTH{whYB&sBOV?#1O;^Z;VP*FgU-%p6TNHrP6X18*cUW#B= zUWG}>SK;_BJUKUI8gTL*D)+79U?3*M+0>4Ih)ARr3ijMkWGAKAk1Sfkch~35x&;KC-@& zT>=tHcJ%@S9^5)S798rm1Ua#gz?Zzc5+R{&nd}Th!rz)WB;XDdCm^BHBOqaGUyx97 z2#_FVc9{{p$lfqOJ(ecG$H3=%c)4Z|tn5AdlPNFW&v^=;%IWCSFc|!az(8EO09efp5tMwO83492XhAT<1>`(1MgY!x z_aDTWp{p6oFTVbYIAYPWd9T;X;8gQ2+La2v3Y(+^4f2|M0P)4_<_9>V&_8QDdw%97 zP+!@8GNNu&bLXQzKk3Ld>D@N~vtzIQy6cYQKj<9n_P0?6mQV0qo`!_oMJV?1ZEJB| ze3Cra{xlY+d<#}4`%9WMPJO;$KO{;1!q?dyh}p7%W;7>fP{yt5V#}Eqs}ErO3Xvyk zRM6QZc^*lCrdmfv_(|>`VSDW!C$=JLE^yrh^pRh%e>6%AO=WBT_!@e8vjq(dd0vw9 z>`!BJ>R`7t(%OCt4JPMbiG4Si0l0a#a2HG$Hn6J!2HL33*nSW#{)+u(EBFW8gqYt? zOQw3+6vN{>@R5=nq%dyO2-=}M`qOMSqSIEmb{nmARG2@^c+wKY?C;x(!t4XRXQ_XV zm3=k?Yhe=!fskoRTAxzH(z`50>C!K=C|$$cCjWF|Ei4}Z9}m=l*rrG#FA}xxo5vpb zCD;g@H|8iVWt(7QO4%jUU)Si+q+p26s*ss!AC>d?IL@V(_YxL=8ffqbP3^N$95 z&R6P~`<(KNoaN&wM-@3baNoENVwom@<~>waCWYKZW$|4rT`S?|WA9+8TVEp?>a5xtty#eXihyOSzt-JNNxGxs&A8-ZhV8aA%&cjh> zz&rTAVD@G>OF>wrs7sC6IZ&z>hnyzp$b;JeJEaaySMHUp$05*+Rr5#CX(C&g5bNY> zOy!rcpG|=xuRW7X9%PZ^0Yr@otR$BVif+6*+vtbiP`bW1d(YT<=;|sp=};(53mnlG z&2zB9i#g)uUD8W`8^%x|ABb9}!`vrbF^&7Btq$0qVGBE8p#c(lyKM_5Kpa%I7fyiO z7H45waP;IWoPd+jrJ(fg%y};-)Oo1fG(CynaK!2gXgoa8ZDZpZu%UxF#@$YMO8L{^;h$(8nW zaNyCV=2A3Z>6IR<=hxH<+(s7L4)edzj<)l8J0Oiao@$=uL_4BNX<{Tx*^fjs7SxJH zbhuSms1=P!>ul-Wf?tJOpbZ+YKh@k+j?VQG{5Ukh_k+_jGowCrNkHiyiI6$@{auO7Tk=_~3AQKtz zg$NKivo2|NSe-NlqU>2XWdm~6)aBH=J_SYV^Qk>t>hnlU9iyiyTz*hMYTxsTXUK(XUJ zu`W8^*VHA=i;nj^Ho2$gtj9YFjhcKYjDDq)HCj);im6nmF37^(4OR!Pz{PG~8(47o zNjic}ckRMT=UVY7r1;H`#TelMeF2>^2zS@nL!?k(#4nU?r(!(3A7MPMT#zYy|BjcO z-8mi5RtN=-7|Vf;bN%MkN+8*v4;?$;rwX7bNb@;X2RN1*GDZNCT=@=?LO@4NBhi*V zmD^e%rIUtjXILK@N)W&bvqGMkAy003DO(1HK1qx&H~Hp5K58<@=To>s%0$xYAlb5v zwFQ}3Jt=le*72%>Om(`|W}o1`)>SnSZRWC{6@S99b9mfZf6Q;lCXgFXL`@7{~H7 zP`Q9C5m)luuLQ;uXFr4NT46bwPNoS5qIW&UNxNJ1Ta46#Qz-#dpXx{7l@SR%M6E@c{;gK6v&}a>Ss}kmRP&MavETqGTv)*$ynt>{EFY zS+XF%AHElhq+<{u@-HIm++lITQgD=vV5A5hnWF|gG7`>G zR$3*542Xnm2#2UE(-o*SS%496izQNx+;BBi$UBj4u2}a7&xfg|yGMs7 z<|yC;AY*mEkkY27xG4^5UUxyyj`fsd-jz_plfiY-!LmBQY%tir_Vir7W7h=^k4$aw z&(Qf~pB-0(%9T3^YUdJU55Syny~v*zvh7?ly0>~ucpmcU(XG1IcjweVgw0;>bFViE zOhLvd!piggM0$y>E4wj~R)1cgYX&NH0UVGoYf>U3UojB)&q{2R+X?A+U-@h6A~qOpmLf$ok* z#*{M1`aoSXQ`JM!1llypDV-aJz@8x$-Xi~X#v=cmj3RdAHon$#!OR7<(f%=Gi3s

      5ewS`H3VU z7`6aHyjbl4|7{wBLFGztrwNjLydV3vxha*Rnc zyaJ1MN~2#M;w<3%pJUth*2|?52R3 z#J^9ygHue*OV#QHP3W@yq*c>8TN6>FS{_A7kn12!M6zA*;CapNSiTI_=42BU;XT=q z@p1uz>Vip58Z~wmbNJkFt&o=}WF}EQhCFt}tj7d<_-d@2uyF$G&C35kl9Po#H4Rc3a$$jYG* z6=mgw>?O&lwV@+QVo?nAEft^MT2_kkZ1t^C=q`L9Y^^!g1)YgU@T_Rd6Eouj!|%ha z*L`J~HOIRKj#z7s*y8qzvlBADpOY9pF|Eu%V5uu`6qD11(lj>VBWM5ko70-;;#l3q zUAs!|rFk#rm-9Y*+A4iE@I#~ZPo9tTagj8rGZcJ}H07!0Fw$^@Mg;X+1J$Ft?QpKI zj~DYBF-JDn5uRuFO_CO0^`WJqb171k=)xrFz{-n~;opZ_mGI4kpCrU>c=&9%FMbm}jHsp2Guz|DYsrf*tAF=O2TXo38rV zRsRCI`e(;#vaoTOnsu{*f8GG-ES5dnJd^X{%b3Z*np?z7PCHOhQKRJVG#lhz@g(L^ z@Q?IJ3KHLTL|$8rYn0zrFj-aCLkN4AF{I~oVAk{MWvV&xRh>1sKvuU$ntc%lVRP9a zY$=t>aio0;m7*Rdb*zDQk%Ao+BCs|X2tDf$v{7;VY|npVf1t|o*uf4)c+62 zoxH%UE1_B-Fs*e*`|Daq>+R&_fMdJqdX8IeUD=|UD}Xca!_5`@vDDD;3C)e{$H)^L#l}-uY@;>zmHjq^qi%Bk*nNl8^~3YV z_mQiOc*j!KlL}67NN;aF6-J7KPs#*E=5J}9lrCJQT+jq!(tZ?F+rQ)Ay7rd{DxR(& zJiR~J08bs0g^w|(PzXS-DH03ZmHUHJFsbEoX4fLg5{Y{bnlQ77vyi{1OtbI7oEZey zPl#u^d!2mJUl0;tJ}fs-%X0T<7G#nO&kNq>x0TFGB=Ry+01A*D3a1i9ufImGAc`J@ zlIIfkH6WXlXySR>3UTNPp0>DKPFutRfXrDk?{Ag8cCqAqF5!D3Qy8~Zn9?jdmWZ~w z;?N~RO=@l0{y;T`|LrnPI&-)3xtQM0zL^%ro?Sq5HzHVNZCz;B?k=SP26S>Vo0ug1wQMqdSB7m}f1!40xi}w}jOfQtMN? zvmFAB;%3n{HV(=W5N(sh;Q{nOUD~H|51bJ`aOQ49A_lnW%jhu{uK_(qtoW4w7+DN@ z^8?W)lBUAM^PA)9MVpTTlzrmx(ZW_x+#ypu>&&g;ecD5#cLbR>oL*Fa22QwIllPzq zc~jG4<-G*-p}A`NBjo*Cx~a*#kWL}*aUSFWLo-J^-XFxI4ymXX6pBb+hRDet2WSHC z!YVwaRwxS`^cqO!3q!PO_89BFsKj5;Y9w07o72c)902|sqsfsuHVehb9&W7z^P4g2 zhd%75$@~t`kTWXX3j@uD# zirJ%^=i{9$!UA-7PO{J${0LS`jOa`mJNV^5zBqNJa1O+s*=K3tvTitafX+@yZ+dD1 zFCbRT6lN&h)D-42I#m@WB#usce|U_-AkQ1~#!7{;3Ue6oApktOhXLVSVVYZ0mxIPs*Y*_|YI3qb$F`;OU(?PET*}nyY2M(7!xB7CtU23>G&_TWCbR$S&0J zRULfx0~7WO17C;AMj@e@(pT;sesNikl2nxADVgQpvWe-5ED-(T-tsdSW2%D&$MS8Y zZ7SJ>JBw(RVWA!GSunzWcS!|WT~d83(pleqUP(L5#fp!BK_6QVZ5V~hqvljta$+vc z4GizzdS%lRo3>e?+?}-Q!_H--J@OM;7 zg7ID?fYp64Gw(sJ5^o_O=q4%%o|cgSqHb@aL>oM6aIa~b0}oZvL+N8dGku&)vuT^n z_y$(nz6@bKO+WuE=g%f9F1j*|clTv=tG?&L4KI~irQUt;qe{gb=%YGX z8-mglq3;bGaR$z+1EaJ0fzjEYHZZy}Gdea>&~*Jn7`RiAG@vV_O3(W-lbNUrhlYWPB|oV3RsRnuHj(ww%%`q=oU@_~QY<;I zKI1w6r1e-4u3>-)Vu>mr^KnBXHqo~D3lzFHa3*u!KxIw=Z(lV^PyGF1q$A)Ro4o=S zxx7f2IE7qe(6=-U6i1J$k>Y)51&SV)oP9B8;FVa>!>s66bzX^zVp1XK-6iJN3%MAg z_Fd*ZD6JF^V)9`xn|!F3Ml5BM4}np{WU>j9Ov0GB)D~a@XA)38O)YQvpRPwJ(*)i5 z_&!~hkif-v#$J|GlC3^=8$Gt4B~9}JU{gTX*fK?1Eh4J`%J(W65nX;BTQ~LEQ>o16 zS6+Vkiqn6x*PLyKi6*Hp5*+dP@Y;;iWzIsZ{;WhkF0E&t)~#pGTybS7)&X$*6UT8J z#q#m~AGTN;aWH?JiSZ1q1lwYvImg{JHgZ-_+N6>)ztE2Nxq=JrGgpM?HB+H~ppY;T zffm={!CZ%j-pO^?9j(K1^7qd0^$_kc3rdsf_9WGHN2@NCWjQ>}(w$C4ZIK#~c&r}s zA(eGUtE@_%%)@r9ij|}Msz^0ey#{CF&#V}sVU*G`a?U7ywSy-pp(GuDhxCUwW8 z@fW49T63|4X+QP`2$G(XYuUDLbt!>AIjqnr zXXQF*u8c95i|=bW2`Kda32Rt5p23kQAHTa}i{(Ka`jCU-4P}BLnNJYlWd)z~)n+zH zAXt1b9jSX)%oOl>RAsIpPP-IEPo9rBvcqIPf<9)pkIey=-)*-PA^dh$tc7g(e5A8t zHGT`Vfy0eLo~_f#w3C6O327(!&9Vi2Wr*E|lms|;CpxYQkLdg~E#x$9qaHQ5A#6h+ zgC%6#y#t0+a?>~P6e0Y>*MGdBK)NL=ykQGNQ<`a1Jr?^^*}LdwKJ|^qZ^%<_|M&ke zX}{`E4^z^pyq<=aN8WHncs@>8_PWygbKLl_c`zqY@Fvy8CtvogwR~oB^|Gm+ zx||e98{1UU2oZnq2BpRFcwPJkENj>04CNQo=}#~xQ>YCVX49lrqO5hSJtxHp9%<6o z_t6SWMs5?L61x=}3FH+@ix-gH>NXOf@^E*42c%k>E)}D+&=}b6!tB$KQoQ&R_Pepd z;&;(6>^I1YWk|IHL*c~}Tm+QZ6} zO*hDca_MMk58kgKGLhehDuA3=fWo#tEFwk|rMEyyVKj+^ySu0~OM308jp4fZvgBtW zDVn09wYerdE-rEh6NKVKA>U2;I|s2#+RzeLZ@h)G0{H}L6o5Bf98b|>m0{rkHY#g& zX73GbO`IfkTSH<)uW}gBK3~P=FVzO7OaJj|Yz-p$Y5ya&-Cdd?El+7lb`kxNCy5$8 zXT@vataNl;eCE4PS*8BZHHB*qLl0yK0@8l9OlsJgmdKDo;zKi|4K>n8A?tE7>AAX`Z2DuU z5!62V{u4ejMrC}mN+n9qWowfAZE2R=$`Q~0v~;=LO41CN%px~d5TR$m z`Rs?HtMnJlos@p}7;Gjd(<*FUmxg80(QH_;fTEv+X8>kj?KTz z`-{4ZU>4Y8G{zFJg8-BriP>RfWz$xpP+j=PLdo$sGXq+FRrc(o{uE9Y1>&v3B1fRm zX2}%_F{{ivS9DCusF@uv+PeB0y3q1t>I7Hno*F4GqkdlZNx-IQuYHf97;Kl+Kw6x* zCJfDB!nTs<7?K2GZ>JX^6=8?5=2I6K6)KAhPrw@@#an4hgNXlr5kFUb`J;}Xg5VGT zxA}SDKRSNi82q0L!Vm3RQ(&Jg-0VgeMf*S?BhraJpB7BKrkd^LV5hW_i8ibs{6ECK z3t&{$weUYl1~QP52@)j=)u>U?U>gOMbkGKHLKFul#3c07fNia&*ayN4c$G+CGLpk_ ze6&8W)fQXy(w5$f3W^om1ZXA-g$UF}OWSDEcGILaY7AqYI^S>Yb7qo2Q1AWf|8Gm? zJoesaKh|FFwKmu?9B26@RwlVJNNR{s(W>{^xDBDR>I&0~R6Z}YNK_LtZ( zMRI6qUTCygJIVa;a0{OyVo~3Ha9FIv-jNfTW&R9NF}^W6JO=EbaXn=KeA%-Y;n;zh3;KGpI;CQ4WHWmNfM zANbv!H)9__=VMM^g$jjN;`_N5c{vGo>g0UINBfeZN!?q62WmiliCeQuxKQs^&Xp5Z z5Sro5TsqG5_k`P$MZQG1g`6MptPXU%wdA+p11le=L%JVDI~X~`QFIeR-N!`B_yepp zPjlzV1Z2QXgm)F&B-^YNH&gTFSCHg;fkdXQ=ygV5)FfGI@xosQR39Mx^G z;5>De$jRw$vmW7|0$515x0YCzY}QTqTX7VY9a2Mpm7kMtdrdFri%H-7_<@j-I$je{ z4&7I`)z=lLtke^{WNec4#iaLcXlH6_K*9ces)ZFZ-gl+p%QgJ@5(3pA>pm^&Q^}>Q zKw&`r?7Q|S609hncuelm?^|p5tUVq7#WG0n)0yl}^YWsdfy!!HSHJ!?aI0yHF+H^` zgFv^B)pJu+3I7}3RgmhPx9AU*MLP+3sSc>MGy#4wF1KH%;dP=}1t-n^uJOL?x%V%$ zAaMH!=|B6p)>ZU@z_M&vRVLl=3yFjE&LZkP-^`HZ%8Jf%nzcCZfVuLLQ_PYm@#9db z=N}OWNN5P?3aFoOE7*eExi#zinA-3TS!1Ir-+PU70n3Rn&+;b19~5}*ajtr8L207iaY~6>RpxyM?QB5H(k;5vX^V~U9g~8OLX9U;nvRR{W2fh3ixAG^>}gY zk9)3eE$R(77Z@O1CQR^SpA}C*?Cj^I(+uPOhX&?lPe85ac3@u4wCCkiwvL%8p%fbK ztK#0OK8!;CME6#iF>52rcyyRW@C1r?e@{jk>VXb~$cYs%>a8ZrL&H6?ANsQXV1|@T zD~!sA1)h7S>uuwfiLX@GOBtWY>u|BZ)B|GOLb+LVjF65z^EK8J{Roscx{KkW+bKE{ zb-&;}0yF?Rerw?1h){<7UG-dcs#-Vd-Py6+ztbB($?%6Mw~qIs9& zgT|=LRPXQh>0x&p@Jv9&JI3Q0Undb~YD z$J=?-c(=<6|MvqjUW*oPAwL+mdb}NaylU`xI{?e$kGJQj@%9Wq-be2q7;on=<8=!{ zou@)l%-2PM!>2>@Q=~y72F=fqDswV=HQC?4WezI!29L`IZ{fDOhAln?WN-R&%?|=b zD4|-v!^r%^uJlEHU67q;^?je&Zq9UiXE;}$0W@cV=1&n6v$H4`sEN*Im-mrL|X7Gc+SrhnvSC^{7S2)~fa-dG9i2ZJaY9Q7B?8gXI-xP<&_WJIXV6PjUu z_(~Fpa6aXIXXTld)qx7NNqBNz_+6D0aPuml)``A!*QD;kdAi6Wl(33`Uj|C8<|%y4 zpf_+kx`7IH4w^Z^;MdWEp&gd>B9^p=fL51;>Ku^uf?++_gnHmJqM5}b^fo67nqtob zE$k4a_)r`X;DKguOK|L>8|%ui!M3XSlRN-Kc#ka2sfqgIsuIW2ZZ|HW2~{pWru7Li z?|sv}JdzAL%|CXJ8xj+Cz&wr0H-%Taz6wRw--T!De#KG_51XLprtlpU9@Y}fO6}Au zwQ#`{En%U1u-A(5Zp$UuTYcqguQ?uXe0_E1lwS$6;lqck)>UK1jYu!SYegTlBs0Uw zf|cillNp|Se!;9j4?%+yHMi(qcpcbt%CFUb*Rd6Vf@9<}tI0ENzOelKNdKMZMBQ6y%Tae_{)w3ts;FK7m^iM`x6IZ@iguX2uY4HkU-`Ot zQ%Aop@0`Do_M(vlouUUuq>qbg7>=#dO=D}Ezm@7P-K+dnFUqY{Sg>qNa;p?oWmYqE zcj1&@U#C92+3K*}&vo5DITjv#_+R55m0M$sF~^$!;gsXOIqSRHW!&jTjao7mA@V=O zZZ?ZASz3e6D^mg~%h*t#=Li*uWwkoby92#H_N;htMELz)4BSMhmF0SOg#NZrXIITV zN}&*gZ2($YVl!wP)z%D`_2agFSUGuUY0YL7T6bD`7Mnp}tGp|)ek`T#3`?myL!3Ey zr**rr8B?u0t<;UpD7Egcuzs$!e#)(%tF51a{G{~D<|~31GNWtT>1%AJ)xnv%gECDs zoza=av6&J6^Z_~eW zwLN{+oW9zXzG_Qf?MYv?bEQAG`e6E5hkeB-4(ZF->dy4buJl!3`bwp*deT?D>8p79 zDv`bti?jR}TdlvYubk;;F8j(@EfZs`mb0p&tGDwvwpu2qK$oA$mHZc5U68)oU|$)l zH*#gH-o)S7>dpLh>XKXR_e`37rJiFu#8yv&(~|$9tEY1nTRqvnH&)A8IL7L!{1tFq zJ&lX#>iPQN)%tHh|Gk#K=8o9v8~K(0Vyo-YSBukE!St25npov-OJA)>Up1t!n$lNy zr>`DOU)`6!dLVtZ&b}JZ1EzK@_)Pq3-iC^r3-a)V{7TE8oHaPuWc|_mL9psR(}QU_ z{C+Z&eVJgSUh{!1cwnmHy~=JvJ)M^_|InwBL;EjbrW ztX406MI)(jEZ6%%=)cWSVj%%g>K`By3ZRG-Eu_v#DjP&JtI6kN3~G;*SR;eY2tTYx zntV3@e9LeXz7^3R* zi#Q8U3kg~O*<(!)rRN5?xZlTq7XlT_fNW#F+rIsMA~{0O?&Lz?pi+ zC%981tWQu;KEaQCg1@TgCOt3F*~PTa177Q$WL{IiB#x}m4Wo=sEtUS&>jkAjmkd{p z?t9Luzefv=1GO))Al&S-bGwRuw@mAIOF^Qj^G~KAZ%V(5sG1#}?TXE|FxqU5(Jba}APKhgUlbzrza}6-bSB@h z`@fL>+bVEL&$h3+T7Bbh$U;spD1cSU@Et@PFbMsgUD)b7M6@su9ENXG)VGPob_EDA-l9%; zR5KQ0^25oYP<@6?3MAkcgg$KruzHOfCYXJSOSKr`o3o}Q@v5HkJMpVV)>aZOB63Dr zzP`MH2p~^nC(qCdUo}~@Z<2;DbVl7Fp4ByQ(5Q;lCz=Ut2U$?YSOWfc)-+JmQ1zHnNOaPNDodqu}rQcZzG! zdim^7*GP09;oX@=e)vxbbC%OP%eCahMK~VPf~0eJ=bH!cAa)wl!n2&{G2`YGdp=J+ z+W*p;hbhd1%;j9CcW$aB%xilCYNNC?S4*22;W8SlV$1w0l7?g&C5>!_uSHs3rf$;ka(0{e?77pz+s49Y2HyRkRIrrh4uz z0xhxhD@J)|6?@ivM(*le6=a@CUaI~{P>f`Kd6k_5oybwIg?J5}Snd)Hq`!}iI@8o- zAXJ>ZH0tlFAj#B?tI@Dnh}NkQZ4HiCE7?%el&Lo%ijzKTXSax&MF?eZf)_e?vP=iQ zqF^$=UE_;VgP>22mV5o8xcJ=KSwYqBzWNY>fPE#T7;C&yO6kyd`z`jWS}}hPO}DGv zk!D#5tu7$meAzKVy;WlJ#;j1zj|B^OB9?9qWlf)X71265-kF6<#xMF-U8xJY-@zYH zpp|s!$^uCily{1G^(iRSdy|XNUG^mxyDH|Xd%yIWBWDMj|9;v0ng{5Z2oE5i)08U? zF+@`wFh{A%58s0_cX9rzXdr!xNfg_fJ~#mRedu2MEk-y&d!-*YC{aWEG5GfIIeq>! zpa#2STULQL#)nN8rBSI9H!tyByZuH|r0qm8rRO;EQ>}s9oS_*dJ*`ED6uf#ZM5 z!<=e0XDPCkm^8Er^09va4Yi%(@2%kggUjvxvpD%=5k@Y-q7%($@hdXN*va8eJ|;JU zoP6L8ztPJQ^sYJr1JP&pR%=V){VM_K+^nixw4vktd9V&~?2rVMPqTqEPxrb@viEg_ z40`MhxjhkK{v{(1hzLwG=jVSE$eO#Y zjXnO(Bb+o4#BsvHPY4S^Y>sJW#~f3s-u)K49jfbT6fuU>dH7>^zr6<$bAX_(F%MtJWmUVe#ekiC^P4Ce_{ z_=t?31HvIoS<}YNcZOTACiaEfv4l!(uV00BdVO7?Uo2dZ#^!@4fz2_1pDp2+h-324 z{R&n@q~7DRA}L8nyuGyyi$D^cldrz=J9gKc$!29i)=NMEaN&$je3?+xm%-5s&804A zjLp!Vsig=!xaBx*i$xY0BhBr+n-UUstLP%MD80d)lFKbAp%*D(w_0vJ9i@jOY?L0N z_9oNxCQqDvm3 zo~tk24t4M+>Ll$CIWNq`)5T^r3is`RI%yA3(WWlH{M*TD)fT2hyU1eEvxpov=b!!U zBnkZYsWYe#&Wy9c6F}S3uYEVUh?E*V$znB9%4Ah?qdqA7HtBb{D)CKPl&O|{u z0h*WhzvD)JzvAY&c?2bN9#v@A3mw5Z;rasCGN0F%A1d`$O$>R>QPRPMd3DWJkFkI4 z*4=#gvTrAma%g6ojCj!q#$2gZ*)5NvWn=)+#}qo$E&uUsvMxzZk@S$I{|uTToNhH& zPIJ|2|LVb`o+^EoQ5R94QRmsC-rg}V>Rc&fjd}!^l7__|^5GL9YbpI$xTmn8-i;NC zkU=5_J&ljkXPHM0zNV-P)vwKM1 zvi^WWne5leCGe)bG*edxhhXu2`KPCxKPdxsOyeFTzR6KjG?l9PES7*18RAjW3(j&G zv)o#U%rzD`yU!X_Zk<&Q$EKm>)Twa5?1Y-|%h-)wjqMWVn#%Tpf0K zvq=6hm2N(>Dm@kJWGeWK_Sms}3OP_%Prjiizx*G1^6@t6(~1P>Q*dIKQ$&K2Aybi&5wg322WV|Yu3*!YeCUAN}do~5WhUCsr6YredB`0ge!JNDb z$x6I!0rLJF@Kvw)2K9w!xgiEP%J)TQ^m={D6FDrL4~~}2vd77n>!VfXHI2TlWoYTq z%OH5qTup2Eyep(>3zXuopxq0y&|( zM9+$xWQ6c^eCKca3*&(v9w8eAlxM%7v4l}<;Q5B4R)B=qbb#cLC$dBfezv_Jy`Y+& zid&xfKAj5S!9-NGI{6J&6mC)*)`i(1%X8yOmi9hN-g!0rrugL?yX_9Z%Madml8zN+ zJt9xJCGyOO><>*mS{ylmnpbL#qI7?Y=U9Cm1*F;jmhA4&F1Y1p-B zObrs|Z!PsF=-C)aq8fn$suyl$$$OcCY8aUR`m(j^ed>Xqf5KJoW7PwC)%!kv)yY^v zsAIrd_;OkJ@@Yn3Iwn{&WSZ1spP0v9tnZVxjTEN$aLP((@x!Qb#dImVSUd&ES5Sj; zPdo$hKW!AVWZK@Nw=|(1vt7@h#&{v@Eef@+XJ*?rN3O$hpi?-4%;@4QZ||{ZpIBfd zYUz^ME_VNa3eRxg1j0b_B^xldFpCL@o1?tt3Ebqr&^>~_XT2X?kmdcu@l)2JG55ZU zgUEyQv~JpL+N;YQ6vGoOo9vA(KO@}gx^EbpbGUVKw5-q@TlOartm_jx4>W#@SPRC$ zCR$TtUNZ>|CFoGL6MkmG*y{X3vPbpNQ$5jJv%GJAL?8c>h~Amy{qQ47{53%^^>Igm z-zNjf5??<(7As$pZ9~WW%j7!KWBIGz{464yKkkWC$v{}yYY=a`-=I|*TbTLf_&+=IL<*e_)@mk-j#nRz2?|^OT>&}uaBNXmshW5)sYQV_-^&rvD zdt_OD-GTJGror#brEc$s%O=zvOuz0-zvdl1w4yuu2qmvkXWWSAwDWSF!d6?%cgo+! zQZ_)PU#rnR!7ASPtX3IiL2095G1&{sT>VNmQUcDQ0d?-{Lhg{Xdu^>F0J4x`!mj%g z{iO-Abxe?I#c3v{?^xQ0u1_m*Eta$I6SADTie@>*k+Jp%pCS{}`E^hmsl`=n>+z78 zXtIxtbf5$d&7|P>KeC`$$wLzaRv_O(s1o7kUaU%I@aS->=1Jqmx(*<&wLz3Hi19Z2 zA&jp`HtMpE{Qzg$3d5zA;)D`@K^k+A$uulpKJdFI8)4mkSlZ7>w{I7OAk?Orsr9GX z%v8FRFhStYRXuG~9_-tPJ7q5JedIGBt*8;XK{g+;3r6T}qjtODe-x{{`p)&h12Hc) zk5s>T7|Le)w%aQG<~OiYV3zl7H+<_v&RHh|k@$hVMnp1V5MN+KZsQ^v`8t0CvB+Y6 zHeN_fv3{_gEA`)-5Cr@aqs~zRwPT;-jxUtw8~zQXGAcbD>$HJIg>@R1t&(?~5MubZ zbrWRrDBR^X{LkyrE&8{aub}$~zZoaP=bOEneIuRZOm|M3d1A#pG5f1;u9v_~Q4N!( z6J4BVme@b~&|kek-|#>9XYP{EBEroyTL>5fw=6l?yb=U`R#6Ml6r7H@Y-IAJLYzkD zRj9kZpxtA_^_v{QvvFqembsSXEGhs<+J1h((d}w=6qv1;zLTL%Xj1yFZ(`0Q(dBjA z^*{YKj?Y_$lYimow$Me>p)L5q3nbutF8=4?xNB+dB3IomCYEpX$v1LIHZwvV$g%d} zGPmTrw7M~xA~U4O$X3T_>4cAfmUSe7Yutl9!<;Sb-KllIW=#i)(2zsT-c_wLZ!26| zUO?WUhBruA@Id&siH;`!cUGLZa%A|ne8-Z}A`G|sewq<<^4DR$tb7d?%34c{gn33* z^P3Dks_O4x7wDYIOL5$_!n3PYY#M#QDPUKw^!9{Blj!Yto@WK(GHry>NnECXdyQnq z64HS6PbOgO(s7H%*0sw7>{IVj{_qYyKp36gA(B} zuKuTx``(WSLvGC$?yRY`I{TMxAKTdzS*;W6x~$HY(b?{NdMfwy^rpxAxVXvCeLd0i zuLH5;=C38D1ZweUhgmi`lwucqY}DD;(Ta=mQ=S{@e<~RpmWt3N4(L% z^kMj~y{50mTqhP*iM_z&k*7_UWniSZ!?3) z*T}TYSoiJPlcM2A&>MD9A=F?ug;T>5q-!}G=LrxZ_MgIoR?5ZtB zRg<8V7kM7@HM=fibC#I?%|`tuJgzVxoO-ld76@*$G+jP9s(WD6Zvl&M3AYpn)M@V= z5-mjD(JooCxZ+nvRq9bxUE7gFAB#p718E)x(rs}z)HtFH>mTs=eBzZbu>x!9qczp) zrMQr*ZN$Wy{tcxPndjR^=e@orPb2^YGgJoOQ2)~uuF%+VeBIdq(J$Ns;VI!0PYlK<*_)5TCl3jN84me@LULtF!FMl0K>VE`ilH8?;K``38KX@A zla1byYSM{fO570hZIIPc=lO(NY&PpR5VX^H3cQl(Z!r8@%&6>NC}}_~TS1Yk&B&1e z$S$V=$(mUZb+>u1I@;?XwR)vk1-B)G?M~C(9*u}ax`H_simXQc0cyM~U%WAxC%iGB z_plKUe5|01b4IoLVBVvUXs4J=N3a0Z>TjtBfW>g)^2Z9`BMo1Z7(Je4GE7ERhA|{~ zO5H!Wt&6{l?AFw$Wx=vMploB7Z8T|tRDZ$BNqw?8I=WTnip`;cTXdssP))- zFf?5?<+@LfX*B-Q!iO@VTLp<58i}KTH~me9Z-e^fq9e&g8K~$kVFPOV_&_qW9jFad zt8x7j(o%SMCJ0~m8t)KK!mdl8fDdtibuUwjK6Rnre~I$h||^L!hi zsXxd=%hHQ)3Pq6}+KmvOB@0uR;cJWfUSEVVY7efOvXAVPPBEW$hqtqg#e7|p&s|60 zUtDzoz{$`9)TM{&CIRPix3^qap3lS3{N^dmYh-*rSxWpo@ja-8Ij_pS=mKh}=j5%o z)p0@6*V{eC3~k_HwR(I5jkK9F+};_|%mwN`ib)DiDL4a_S5tXbYe3yjF==G~cX{jE zW%}EgtfDp}Qp$`*^xdjQBa=Xc&y>Ul(pJH+G)t$%hxGC01LCf<`kZx->sG%c()4adp&n}lj;PG&q|b3?sSj`6EGV2-EwBFDV$ zJZs`1$eZue1eyI-9QAKeUt0GtQ?upc(9#$+e*wfbw3*nc`VHpXVSP>x@LXt=P0^a5 zXieJfuSvFb3m#A-pb}hM37Zu0iZQX^*&^CFlU)=TrsAJkN4kwFI2D!7y zsN~-+Sk|{8>U%)GY=oN8j5n!2UO~nY|Mo>0>{;{5ylCE)+?iLpqV88Jur6YPeV{u7 z2j?#38~FewyYNo;^&r0DuI}rF$Et!@SOHMeNYrU9ldrGgwp<61ZoUn~AR1fs_6XgL zTx;zRJfrj;8Q3E1mh>KZ^!tPN$cG!*n&k5o61P|7KF8J^kM^3Rob#}p*7ejqEYIW5 z@|^j%mD0yZEtXQcwD9@$(hgnej0;Nh#;VLc$6Z0{HKOJCa*PmabM$7Ks>x0zeW{UWydfM#Jg`=~tWj;(CTu zyAJ2u^Gx5PX2aqs?3jioszY^}#JODZUfv^26hfRQvRfKnE@`lqi$K>YO`T*lHHM~W z=NmG18OvUk*xHm#^`gM)g$2+0{P-{NrM()N&`_^5w1@Ka=~q7hXk?9KgH`S^%JH#n=je&PR~`~bw?HE4wiH{DbYdr`t1iB9P--r+YJP>9hc9M!>VC|4 z>Kb-EmQmNvA9YphfkF1SwBhDB7g`@Yc|e)bP><723yKW4gxeEj5SjvoghnoMz~hKl z3O+@LlA(?OoZVZT4aXu94yl6`Gp!zD|065HkLECD|3R~3kptTwarGxY|6NQD;;9|C z#Glb}osDGF?J<8F{wtb;UeOlB%+Irjx@yR`e_y}kdlR%{N#G-wp15daook9-nI%7E z+1t9uKQ8wMBAuIGL^>zlb!G06qF|sIvW zcsC&MOQ+A4d6H)`Pd7b2O|Fa?uJxbS!yir0bF7|&qe2JOuQ^57>Uia&$L)AIZ6Don zl8xIvLJygmMmIfj*KM|@@kF~v6QoD-OnUVAHZJH7{csQNhcDfa-QW8NIQs?ob_krM zl}py*H(Q^6Sc=Kw%e^dqJHMh>(TiU=C0WD)wsYNVBl-@XTu03F`2&EI2_R+G?b-uq z6K^7Iop96Ra(j~@TB=NQ4j#?#duJ6c$sgj;Y$^BW6tLlv!S|iXsqa&N0^^zOtv?j{ zp1_=d+jSfpytDw0Zo0K}hyU{cnpz75B#SiC0tMXkxV+|z>o3j=KTQ&U;S(fS9E(+!*>E>Hw0=ivFaTiX%yNgy(YwO+4m}3+6|06| z4}A((*wU%yFs4iE#8ELg*31E~WvHh1_mV~>h5?u7*|3la^A0)Dcq#15BSmdyD-6q0 zj-X9U*pXbCZ{`R)UPYC80pi%Fw;;K3=4Jjokd_LlyLrL+m^2{OrDh(7W2>`M<=s-= z6qhpU^tWULuk3Hh44zl=9Wi4pKVyljB;3x`((&Op{uP@gwg((|^7!j8bS+cAUPxcf zuvA%qIU}Vc$Ep5enI!QYs&pS?)75EQEt_uho2;Q{O%@Gc_h%MM=D0np*YFiqX}Qze zvh2>H7BiSr(g?E2UJ$mqT5>wmsK)s&hHR=kOe_Cp8&LEK9|ol%cf6xDLJJu`{yot zKRwgbqwrkua=7zIPMf`ed)1^{;+#U)X1#5BV??;~k2x)dE(>tpzNd$`WUdtRvcoDA z?))HK!iIl1Pj-H;5f+tDEWBL`^B=HoXIc=4Oq#oe44|Y~m_~+$#T*0LLUsk5sK{ca zQ!KRMb2&K0f<^&s8O)YrbZ&*jZeht1-EN(9;U97rihD_i<_Z>tHALpdbQi$&gSr9e z>IW9+c30DpcV0}26Yd$Z=?IcwDan`dYj%svFl7v^q@jmF*}qiuOWD(El? z&1&gC>X~!&U`e4LwxL;c-(ZI($?=GJ<4$ud#yffuh?2WX|45W>Ao@ZFKQ&Rkkpkw- z>#LLP%=Z*M|D5+_U0BP3qVrO-#%X%c)Siqo?Zk!Qw#)_AJA2p7s}Rtmhu_|#$HLhZ z3}hCGD35lX(HxkDFZ^dTe94Igeae9Al}LwGCrK`_-RgZdouCf>=i(G)4lY)&ZXb$e z&f#0tI2;(Jn4&mrK;}+14~J+NxctgRo)JFCg*x?AtJ$Y<5e7wxCFtfCX^u-PWI}v( zPG?F6TQ84D69d-E_^|>Z)=M4PX<0AHEc}Tg6?7GCy%eXMAFQ@CwEv5@AMZAB`a z89-_zrxI?GI<^4+PP0=cq~!OulJgA6h^4_Uo;2V%HDH;ND(<}0)IHNsRrwfK&nxuVF%8bGETaX168Pr1Yv zp(my1YyH4{x%7PL$%rJ=?j}1lGEL!A^1Wjm#o2^hOCDu>0qVU*@Oy^YE8gxQ(svn*03B4V z57`FrkMM&xLx;>-$lfS0tc3nPNc#=-3~98vGpE%P5p+&A&7o2hQ7Y=SnD*VT6OV#@ z?4!lx5o-?^wQWXdk8)Q#93_jLD@UzxmgFzZiu&3>f2Ictwm&ACMrB~0+eiEpy7^9{ z#%&?ThtA+zJ~>vv@=K1DqDbHoF4&~ld|1$J^j?j0cjU})2FtX

      JglaRpVq94E^m zUeT&{GgEwmI45ByD*HZNM$r*m)w)VDmf-H)W}=(4CYTaRM(c^x$c|tpk$V^VElh?G zMhuVDwVZ9>o(`BFa|emt*`4OxX*qMJ2X6@A*NUX8uF}&H%E_wj#o1{bjw0eKjC0kD z2gPXHiRE;{(N4?O+WWN01fn-6HZm@)s%n`JT)A~S?>`{zKs}G!4wliB0hmRxea%Y6 zW_wzlr0N-@gR{TfBQ;7VAu3}l>uRB}jpu^G zQsmp(0GXb~(I^P)#n_KPt~t^{i*e_(s3CXdd*AWg+sWQt;UX43%<+85@PEqw{8wzY z#evS&9O&Wgf(gYLIBPe3H~j8#Av^(Osg2Ms^`%M+RNX5iy;X@zptU(QhC;@`3TS8* zFqKT7U08_(Fw|f1EE8}w7CRRh`I>GH%10dTnXl<3_`}}Vq_^Fx=I!iBw)#4Rk;e+& zkwL8LUUk90KwsECI!t^fgbpH9w%HoS2}he+?X_!T?eI2?`Zp#okx7tmGTCi7vL z0@J?{)t4ZJ9pTOb!+#JzT!gOR%(ZK_%Imj5NN^92@R(Royvbp&NhFXglZ2gc-gscGf? zY^XgjY$SW-BnIkxL0AdKV_f^l#cVrSZyrS2fNhUwsBFg=F-O^#}zf(ZTrzeR>uYVxKR?{p&K{Tm8NEOC zMHzj!BsJ_NVPlUq@fpE6K(R%)RaUv|y+h=X(F>9TfK|BixC$iv+a$@ifeQHE_C7g%7yp7IZHzBPtpd}ATgL8L=-aLX)fhxv^Ib?Q}_*M6Admf5!;~% zyH)9nLJ^cr5mbitn(j6SN84Dlx!WaY$F^R<2!&Qxn`m^bs0DvJ$#g!>7`EGJ2|ZPJSx1ibzp1UNy@zVh|r1E>e6}ugop|W z^109qbrRJ^irY;Bu-Xw|v7pDjs(Hl`e4<7V6!tV$%bU3_&Mk+6cp7&K0??$0)xgnH8HY|pbZu6U$7$IPfU8-&3~ zwwoT&{Q>>=ZD-j8sstfti{tg+TE0{*k;+rGU;zJ*Rg3c-Qfqwp9+^gTZU6)U7V87* zp|8G|Oc6KVdd-t;64u$bflsCD1;02@sS|(C(mqsNovNgjg=}U;7vHo=Rusf?0ozw| zpC>Gm6B3&7RBBVNY|(PaSZ(3olWrBv=ub4%D+FATNP@WNUoUt+2Asf_N-i(YDcDO$Ce?|FPX%v__YSpzq4-f4tL z7O>0fv+J~ZeVbEttnEo}sqEh@QM5RLw8<=!_(?MoT1wetW{4;=v*cFi%Fzf*V-aJB z!{uWGUn0OkzEncSS1rc$3=(5{w4BJ&fzB2=s_|XI(ABQ4|LH@PpA&TxcvT=~^}x33 zccr{D?-edlGX%Sgsy%uaT*ao41ZAFTb-~X?NV938h*IyUzm>AMx|V2u&-A{k$)T^^ zQuz*HxD8#*g0F)CRZL?xPScrd&5Kxr(0ND&5b`qv$hvkAg?aL@w=8};5a{J z;m7;lLq7I(&$H;)6i9bwIE|_f@&6d7Y3z(#{3Fh>DC{+O7_}R@W>tp~aE50%UDl^F zLSDWDXbOGoC74WINprwcGPEa&6yVi&^SH&4W*c8Sp9k{<>E60SBH$#hx``=cmSK2d zsp4wm1dIl7fbN`^gEiZ7d8vJXihS+~FL(R%=O=mbnq*_5}4@=F-@vJkfVh;$j(!rmbVH8CJ;S5IJ` zYS@;Z-{3@36IPo{zXK)w3}pHg$n>k-<6sq_r&+Dzc56CVPCX%<*SIXYYEfCQR7%nI zSD7oKzh^V#9xeW0nCw(T22ET=~<}H+v;h2glVj~=|1+!KxohpDAAYadfJjf@wec5o2b@sG#y_hRxb(2jm2ZHx0&?dTF$ldVpzt<70mpQK-r zTUd-ix>3y!Tp|1bo^{nVWGqCMjH_S$oh3%Y&{u(?jkFxmyE+*U(isr1ZhJ`-cm&Rz z6ZSGKgwQs} zN+(H$s42pA@)=?6b!CXb1@GZ*pr1rd$seh<_iPnScwSw1Ixt~#D$3I?h!(*v{8k^e z*_^x8S1En?EgFcL5-+OW+pIgmu`tpJz6OI*kdB|OdpF(qv@=B$3LRnXCCc=AME=81 z(hyX(v%+#Re^_qA&2$^X7k}y92k8ddbprx9Ip!)Mnx1D%uXsc#IR zS3bc$vrK-fIAWO?Id? zEDkCeGSz2DRh%~WutMX|0Ag5Be}Cqv_7gJ(+HdEj;0fKj)v|OO1^->rMUg5yJ&m(j zEv?#jN&K1>oOGJ3;DCDnQ;3J(gQB___sUOAQ9Wy#sP}ukdP9ar*_$wU1q9rJdC^_V zhE(tWOvAog(EOk{_VH=tQ7*_sBAIl)DctY`{3Sk#zc?m!a!bNXHo_phWnpVuo{{q@ zT-BEGwI+PWB!`4m#@QCPr@yiB9KInI*h+~ZLpS;-brgnM69*7%4EN+|b_URfbOVz_ zzo$*OgR$EdJhzQ{G&G&9zAniDD!6WsGMJ6sy}6b z^5Isobw!y>!1J#^6!7dM8;z&&^I(o>If)to&nxJ#L=9N!u|5T;Yy&FKulv-XGHXzH z#Q#aJoDPo=@DiGG$)`EIW`;NC=1*;SIco1zHeCn%!Km%gn50pTDlVywhekKl_c;hS z7Q_-ttZEg~W>!1Rk=}Mr+n(!2ikRzaxNQ1|t1}%@_gZ+H;Q727Ct*k}PV@Dsb9ITY z*W-JwyAUbxs7GUUBW2PE4l}Ps^H$Fzw@tfRXy7kbOGsv=y0P}VNxOM?W0GBt3{Ld6 z@oBpjXPnT8ST^#A_wDu!dFNh5d>ZHHdZayHhu7C0TEHmSTb1PG)pYoQzc(cj-W|c) zumduBwi*BK(fLZ&{WyhS)L;bjwKN2j%jVY*KrR*al3)S0l zOh>y#OoSD{OYPiEA_CzsIffQRyd=vHsUFFV_D{)aG|ul{jMRr0a( zcd};p%lDfsx1?Ex-dU4uQEgT+X|@W~o_wUWSy&I+a33bV50&U`PCgu-Rfw!{5EkMm zKYcHW)Y@h4uAxWx*~mFxe@50fH7|mnlEurB@@(PI;la@0T2R$7PdFS-Ou{|zGA0^` z)DEiSMq0jJsiSIB{Ilkr(~fN?EIn<}33Xc}4sWme#VUHsGVjeoU9xJ$0Xb7t-0S4E zcCXvcg}D1Q^V>uW!d^<_HFkoOudvFeD6jRa`Sn~4I!J#gVe2rYv)JU2_%}4||^<`uAa3Zbvypmt?4Pm&+2n_;*eGqarP1c1=QlAp&t(~T{ z=fq%#iPu=AK^)bm;4q;;?%({#M}l{{JYFwsK<*%$O>n$X0J6@4u~Egh@Zlo9c0cv zf5WFXXM^ee__PG%NCl1$rT3r0@Px^}ZsDgkyd3q1$eit`fz-K$Zc)SnLnU2Yr`l4L9a`B0rJejG${H#(K%M zfkU?2duQH?GEOZZxleWOvgziIoLEo}V~B-YlHvB`SudXz%V`UqR`;#!6zRTARD2fA zuGh{BRW74CmvfQL`aJKQ6Q#9WX)XUFS_`FH%P$&eO=9w>Y*gnPcTSWX)khtuqxXBU zoX7(XmXUGFRwy3I^Uj^lL58Rv$mv@)%@dYm=_)0pfGpE{$uhlRJvii20O<}ibi|j# zRnB%z*^l5<+gXIDp~A5&Ccp_&p zKS-6(cGN#7d*@FIjg{(hb~{{QK!v3${7qg!ZTqe00n@2#pC2vgmh7r|gsTI?c9J|h zUcHt>T#homScCkyRMM8QE|nkqRhjInPU+$C^J8m&oT2%#J9K_*mz5v;TW}D^&yOwE zWjvvnDansL$tHf$069?T6J zo+0_L|48htR$}IZf{9+Oq9R-t@hv^mg0Lu2ea!f+gd8@63EVLL?WrWuZ2ONFCtasw)y zPr=tvi08lNe~Q$lfn(#uD~ptueW|!U!I*>GtA1<8_2F$%Yv+YNZgVYjE}9ft4bU zh16-kzt8&E+P97+&&u+lFVPCPM&1l|3su89)2ft2B=XiLbEef*v@@+N)x4TdajAY& zm|m*h)KYbQ>{6A34|9f(ztlJXc z9>|2(>4~hA1r!Hfs%N%pI22C(J7E6=xuC*vtRdCG9-2yhGtL{{>A zCrqbxj=<17-?KA55>EnlSmTiKBn@!R_XSTLO6B?P{5R(LMg`s@cybyGZ{x|KslC78 z9Ke%qkA){KH~2K3)cgYHQD~nFkreUj!yDqG+!?ew5DHLn=0Fy2g1_8Q+k3=e#QK7q zoq@eI4?hYLR(l$S0Yl|9D2sQiJn>+kVYB?EfO5yp;*GP0*gveCj^|IbvUsnN>TPQG z8SDg403Jg%lf{^iN*3>nXVV_anvclheHH5iO29&ggz8;5ePs#Ww#%n2y-0A&K2F}` zeCGEBbP-4sS;fO=@Qz6a?;YtOTk`8Gh_B(>-46VmGR>O?01X&dehUa*?B@(>af$WeGo4>ZW`6a2uocS8gqE z+v|rjH#y7qsh@rA;~k@0)M)XC9t8(T4Kp*IoSx-b{ZGM)`_%PMB$9+@cpCr4y#ysS zzM(Iite}*@3t~_}uY?t@d5PzqXB+nX^94t;FtUpu@f`2Q2{f5O#HT3NpS=nU9O^Rb z6&{1|quwK)MuTcM-6uzfZk+P8mDg;a&oXGqzBlJ^lsl;n#RudIazBee8acx$av^su zhn-^D*IEHYfhT{O5a}m!vJ}iBE+v5XZ@?O8B;%-uZfT?k=+R!G1)~4QvNYwKxEL|V z%6dyxrPJbr#Ua!0RuAiIPveuk zN}o-t2Oz0>zDnt@lFnji6i}Z;0oezweoPclT(#CbPZUsGM*;PzZE}Z|`9n`+sc@-S zTI&@bxglZoaDhB5!|oinjlf4XZJ|`0wO}D4{~_#C>fqG6Q<$wm(aU!m2OJ;7UvRv~ zKk`t@TxJXoX9oUO^>i{$ou%GwU@hCH&V4c)SR!MZCnBq?tv;2v2oZ+QcVpx8G_EBn zg~dz_CdI>Kr2TiCz!AIVe@%+Re~N#6Xv^%+fP>(D_f&%LKQE`>lFVnZL`9rjC%#=n z7$`a4q<=<1X0Y0_vO_3#E8lNXXIt8M6Gxe>;A!4ol;yKT#Xidw&ASVE#Ji(9TJH4t z-mdN*H{`AJF4ROyT#Np2tH{r!DF^B3d5(NvFRtywhe9}@{@Db9g{RRNUr?XK8$%7e3ArO@#7`X5^5`%fk~hxNkpIq;|Y2Z zL#43b$4Q_im5!f4%Ler0`n_oiZ;=yo0$Mgv6}wb}8(3XD*&M0uXrGgfFc8jiz#PdZ z!?#^ak#Z5KOU=1?lDekaWnPZ-YD6UGO4NB})VaghDhYrLoqWa6iC3(YK*o!bKEZfV zGPQIULk)3k!?!8wER8w^^G6GKps4t_aZJpVH~E0CT#j(#J1a{ASM`W4gTCA!~I2Mqh|igb;1`izD< z$(^x)gg@9(e4PO`{ouex@VhvS*vw!r#MuioWG~EMFRT$$<&GM?7v8U7FARR`T*F@I z6l2u>Z?YHkL=8U?+8k8O9Mq*dV@7Xd`ogXGoVM8bJUi#6`&jjOJUA*GN4)q?p6HjM z!-v1eH4KE_X?hDqb_k!ViSVQ^AJ38`u8sX8tNgnEvkf6pdiH3ilI=DVt z(q}Zzvu=OIEo7QiD9d3z^-)&k7oaARFOV55=3DOq@sO+%Rf*wyH0rxA=G(v%v=1BQ z$I$s`3|~Xc*9arP<0g3=^WAOz^vRFf`{Wj^NZ7EiDNs+3?nkSUkWHCTTX`XQvB_%; zDHk$n=a)T>AE~9xxCn+~+3^0JBhjP;+%$cR?f~Xb=MFCokfITWZ}e>mG&%{hLp9%# zND?jZU^8?VE2Vs6`o+Oh%`(V0d_yR=+RjcC^{-Q3c?EC~BAC!bFrnUg!Wx3cgF*+z zr_HR|KyGEt_@7)(Hh)!LF0W(^i@U~ZYu6Ucks1$1IEC*+y+C-VZ+TvwxPjDl z76Fov{+*)`wF7f&qWcuyF3GDqGyQg3>aBS>PHgpY)xV56*=P2upCN6TZGdm&5AwO? zlZIW7YW15D{o;CRk}-!9fyoCAUy^BFGHhwjvm?Xm^kL6w)6iDdiFD6Dojy(7(LOLT ze*;OYg44YEO%RX%#%SIuy?aAr&6W!E$L*@jqw%EmQUvwNAm8Hj5)t<$zS|k-$&zD`rRX5}|dn?%n$a_2*I3w;_1C*S}6W z!=lg`$ZBY$bf)`cI>3)7{aSw$y4s=c;+wPOth^6GPgrXV_eBKuIxUrF75%$qWYL;2RW`s6^=6JHB2cTv@qIxnF;1KKefWc=A1}9v>xeA#;WBbb=|1P1{`_v_ueOC^VX%|`He4e3L zL{$^IFr8BK&wsK_V8PGGVQ^CJ#J%EN*Adle$mGG>>!spgl>A4Hq#LYrp}iX8r4D;0 zGm+P~E_F9xw%76$=L&Jy6@9OXmC2byj#wEng5bk%N?_cWh9@WUaA&OS26-4OyHS43 zq0V)2{Jrl%@^=|?11K)dF-F<7=^~b&9Yy{TrAYOpD2H`WaK03r<21^y$HdUGZ9c6A z&-2c`UdMq}&tK|%THHhTH|~Fa60ba0w3*Hejk5XX6&Fe!l4Yy!7m3AUue#(s>-V(N zt>0y5;5T%a^m?N+GIcM8p{9LaZ6U{)836H-+ocydXlQ+w^@;I&6)XnYOgW+f-5l5VUbxy&uchi@QC zK>}W|L+>-H-9{NEj68ME*nU_Y?WWFbbl%Nu%$;g>c;{FS;bq0%ESg+UY;wS+QC3Vy zdyP>xRo#4{HLQhnFKy&#(mRoD~P8ojom{@Q1)Rk_O5_5}}jzD*c^E~saQ$N8M zCvSBI?71x`TctI(%q+&coHBQ4IU24?^$S!(I%XtzX{CBQ|6z^u+tivb!k~Q2iKbfE z4rMpoBT!RpmQD4RUA^L@m9VVE-m>x~Ic8abEM{3@Hz||K_2tz@nY&*@S!wX<xfIt7$r)&{LH`?Eq@ zvlDnG>%*4+`RE}*Gi%!o%vZ)WWHxe2Y!nyS=0XHgl2zr2+GQ>d+%EHNgG^(^@@c=j zaX;t8a?o+eZCsPv&5>e+SQ$0BA*XjI&djsY%xdSAaK33Dme>HYNZSwL>4IK;bWeWW z3Px1d@jgVnebk^c5P(X_bLsMI+L19&jXCE>$w!QlMzs?Y9&Yp_^^euwsvbGWa=>LM z<^0@VR+teiV0Y)gBym6cC+g*dUvitK8PJQH+kS^Djy&!*o_*RhV&U7misKJ_*lm6j`T{)J^yFVwaq9X%6Z+pzwz~&`erpQs&m52n^ z)e8Gcyo(y`6!2+=`9597_kjGUbMAm{&(4iTWl%aL${RJJ4q0;|z@gTmRwTTmIBKpN z!R;5HyWiH4p2P&M^{+P{JV>?v7H24@H8P*Mbwu_Dv#m=sYK=@+U|=!=6bP(sX+G?1 zRwKwyZk(dL;+EWc9|hL>)+e{hyf>@N9t>A0hq_MR?~!bl;i`6rnxpTxaDR8W zYMVoO^?f7jBhVbKYI3MaJhA{H8tsu@?#c`6ZIuyza504(;!zc3B?eNz9{wt~0J8@G;*P- zKxH&~y*xUTjSYP1>;C8X>L665_1fn!ZuHu&yzQdbPK?{`(2;iCqXf@6Byc3G2%fqG z01hi8^*{1dE+VhV^z2jjZ_rBV#*-+(?TPb9bD^gKlzr;a88ZfE=}0NxEp-q_N*POutHwbn{dS@$V6a*IZ$^1aln7ldjEZ_x0fMtw$9wyF^k+=WJszt-k8 zqNQ>jEd+`^SF~8TRIsY1?$&43hfm#aR~6mKHYNleBNadZ)8$84ROFhi)3{+r(qMAy zRIZa-C+TZ}o#fVH{baKKD}Aa?W61{YigY~-OAZ}Mr-#sztrIe$=whh8r#!9$K=vQvLbhQN!B8SfY`ur3ssnSW?xJG>Xlz zWqO&M8@yiqppxvYr(3X4H|cY@u$FUJm%HfY@cXAP9ffY_AJrsR95+wB_<^7~nMXl8 zrS8+MX3W6kmcNZ?cr(NE?EZPGg4O~xDBqiY!V0y*30jF>cfU?$ZD%_=8RE*t2OM=X z0MNQNT(auQCzJm57I{|579V6Zso@#2`L8|O9S8aMJO1&Xww+{JVoLh2mN#{NJGY#7 zRPTz;nH1&lui8Wm|1a>|Y_I`8f^r0JDv(dtPXA1cmNyg&L z0Vz&ow+zY>LPc507aSbjUs~V{I-kmw_}{f*;qD9H8r{;QufjVEkg-xtWesl1eA#ow zZW==e3mcm-kO2{Z7UbhAf;3VxLyIaUUldWLmb0XyUqom#W{AjU%s|eZXwD_=y)H^e za|j3?O-X-WcP5T>L%T>CpkFZ9LArO#lg>(O>@qwYZ(zoZYn($EaeGGfd`fv^2GIjAwO^hM1*>vlsT~*rIj*wN zRr5K{;Zi@#ObfW25t@{9dGLA|LmatUT_zrz!KtYSI=9!0CsBg@SOmiLvYgpE0X2zx za7Y_#RQ1S0k{bi<5+|`^mv(ceM1M{A$TaX>}gyW-vqam7-!C-Xg1oVsIp(Ua1p+cQ9;NrKR zl6%HG5w<3Kx(FywrOJ@1V{zVLFc&H7)ttm839$SIyLt0yrkZ0p(Ix%)9bPgogCO{6 zf#Cg?Rs#s$(WE6$bH+roBA-kR0+h@lDYQzedQ!3L(W*Y8)-iZl@$Oi9^?Z)9=QETj zDYM|XTHv^<2RKIJ&lJ@I7W}fQX7%Lg+)2blwc;jM;H}Z2?cPfVZ@7H}bIkgv>9_aD zDxVO`X1-Iq*_^G{cMR*BjWUl<;SH5(#t@4&a1+lnJapUsY~suYh8WDTK;N45k!NK4 zJy8o*6?||?vz_$N^6V&^&w_CFl)CH6x0z(i{u<;ABiN0+y4JL4R}N~m;$w6TNzr<( zt`Qt%E-pn$e3G!FL*kRge<&Ju!1;(9uHS_XN^&>-YYFSdcFi|;k}#9dAbc)Rdk}4u zpWG}$s~mN`P129^u9s!#_EeK^d>hu`?FnO7dXy=i4|vkK=PC zlj-;53nYbo#K(QK>YjWiA%COR=hw*hqOiG<~zT`g;>Tzew6$2a-i@jOKKizV}`IMZaKu{GBTvuqoZkBPr| z)v|DqCXv}lPLX;0)i?=N?KOYU%=g62M@PR`s$U=K5D(2$>#~_?%j~oHGa{v1CF!h{ zZVE>poMMRfzxzMlOAhM4)j#Idg_}$wdTXx4?d}DeCD@Oq_ToEf(LAf+z(g8OsXZv6 z%Q54IE{CT>m8i>H<~+AWEyE)-%<8;wwbM~)E^yC^y5~X95>cn{p~w{oRL&Cv-DAP` zJBsG!7VSo*;B8xe>O7$9$;{s;2YumOzCcx!75Q};P(I6ExvO%J8ioTO!e597vy!YZ z+a)_X8?Vz~HZlaZP{b9NS>v{SLXY*ADV971(OV~>R~HYojS}2G5;YO7%P46iOA_fv zw5Lv}ofyt`;-0m)4(Io_ODt!*dN1?Q!M~EybJO|xHCwbdDl_QD3Ge4G=mNc zNX?`qH~?|abRlNXbR$}C&aj%$6im}EyMLv2|6Kp`{#AX7{ljfRl1DBbYC5uz$uR~b z*+1HVblR}CKkasi=@%Q4%8+4lO0rwsydA_}>yA$Sm4J>}NqX#yyrjp@8ukO(FeteZ<5YNou`n#&5JWg+%x-Swg_2K$OiItg9rd$ z0(*~(I)#dxEdPHCz&}YJR zq*R)gnATr5F(ZhIxg6>=#+*An+%iq&g&x9OTW+PIa-qf#Pjd`Wbe5WTmV+Qt<-3BE zzq9;EO!Glg!+%YfUmy$n1?Ft4)oXOCzmQV1?N+mC)zoslHx`@-MN8IA!2`rXe)$Bv zrIDYh^;*%W2!D}&Ggjg8wMNZ$MrF&Ht>r1D=eHp+IA2T>xuWy@ccHSOiCV~bm!*@1 z(I+$1?X^S<*C5gD+c&ee`_zQb{7d+s#io|K1L}@HzY8t2WUS<}yyUW6>#v$g8Vn2o zRyi@TR4gSoLF7jIn3Bk}nsAmbJ&|4+4;Jt@B^{a@bT_sr49Pfd zl8+h(6-x)u{tT~{Nvf#sRO!DzK17zh=Z7f4;>`OkDLGQQ@Ue1aEKb8|IZ_1Xfcg=e z>9}&_K9M0GZ%xaPTCIZMC`+PBX1CZgU=*wCzedvovfW#IQWHNQF97-|a)SBjZi4Qx z$_$;T6+E>&wYsNv=alB!oplc&Fj!JwzDRwcFWYoqA+nVm)R1wq(Mw>at304S z`>!?0=S!JsFp9+Wv>9{q@LF?DY3_DI04vn0-KZQf9uRPPnJ_efb6(vR>5=xF=@62v z5#nz3Ce0ALAqQ~_+J>jWqZMaYUjhW=ZSyof!BftEhQfy5Plj?X1AJF{8XI`ZC$lf( zw;>pUr^6ewT5ZAj41L94NjNtBF_r$9-$hcl3?bFXqGc`uRAXgGU_1G7gJZq44gM6XA{-H`1wZkoGpl`pcSrCHN&7+YPoq?I#2kDx ziB!s8GN-}h+$I2#4FTh}rEYykR&u6J|!%dsTz3t1#V}*d>450xa2<-Rwf9&(z-kW=8&YYP!b7tnu zc@Z}{SHw$x)Ce!~`QG}9#;BY4rZ6!zncty{8&-dMICo`BZKTzgi~x1pm(En_9XH@f z%1q@V!iD$14#c}~ijd6(9H`SS+u6J-f>Ium?()7uB(n51& ztCX2=#Ya+p;)wiVI3({1uT@>7{9#gMl8qIr1{AcQO=zKR2Q+M&$g+JWlq}U00KTbb zrY_}}w9q0=n3J^6UKw549BEuQN1wSDJ1DFw2F_XupP2AR#&Ylf&Z~~E;Qm> z*U@mFwGuPHFW`4cQLD@qY@RL> z{)#fRSHRyaK5;l*2>m!qkm8@OP*IC&gQ$h^TYU))O`-n>J9R`m7Hxtm>K*^Wj7ePM zTiZWH`sO;knKpHLFoE&$o2<|m)aXxxRHO-sQhqWh10*uc_%-N4Yn1(Z61Cx2XyIh< zLfDtz^OU#jQ6ern--iVOkp^fFKG>`}b$)8k%yjYjWM!(}K_*Y2o1Ak{O+2O;qM57i z>x5>o=ixLnbblz#K##v3UMa~iDh$mCifIrObNoUnhFt{3@BTTek9h2Tg$2jg=6p8d$Tu|g zT}6&dTljtyf)Q@20ymhtRLmtVP3=v)-M5fW!+rVr%!1I4@cUX%Qm<}$L#9^W6Wj8D z+yVJEQS?eo{&2g9oo&R>_uq-!Rfa>e$IzUPJo#;padUdE& zK<-u_a#I75BbR)L_%%W2ybE(8X+=ShnZfxErt$2S3&pOkE|0x^3zS)~QiZHwCM`^A zBc4%PW<&<6UO<<&YodA@&8w&nY9DCB;;2{zfm!qt==ehMd84|Z>Lyz7y$bddAm}NX zA{KnSJt$rX*AFAdx@^o^>{ektoDW0Z9_$?$At@U$uH-hm8FT_R-Gf{VZn*b57=9S{ zK$S*gY*+xdjq-;l@Ih)2lQ=~l%x#1Q)BSMJJbOgmaNEog<44-28(*NwabZ3!`+Lxm ze;P6+EvJ{#9&(R$6iz|gr15i%lDcI^FoO#2A7}Ys`Bq<-$8b#_MuL)XZ@9@pDfGJ=#NYJ;`h7`5ukWy4Xxg2Oq z!A@%FRd7F=fyfk%^ZUYB0di8TP|`Hhu|!eib)aqN>4d!JQ!p93F|_1a4rHs-`=65BTc9m)*)gF@9)pL-$C^4D_#@&tAt)$G0XC3!NWe zFqM;UW;cI{A&s$7&@v(;k(9tjOiNHC(!fL@0UTtlzTmzhKc46=b~`Zaq^|}Z4BuBw z>8mE{t0qZ3HK0?(97lX;yf*ax`c!LXzUvWMhp|W8s74QRHh2Q^9l~W1WWmlNt#OHN z=^apQo2H$AtL0AE0*M_?1NK(RuG@X3==RnexzlIlqSMdN3aJ4gq#ke?Sum5=50e#E zEg`*r=K;BTZAA4RA2p&rCKkDO>J=2?fXGefUl;QJ(n*!Fdqen5A*Yp|;!G4!0}CnMjRxX(%0;LY)GVRY&kSik)fqq0>M59GD5#ztgmOJ1I+9`Y7FQQMw(;QMh}4 zaZ!xQiU7_!b}Sh>58S0d-(dbOn}w3%0t^G;(I3MZdcb2yj;M{v(%5{l88G1y7VfJ< z_(=C0kW>R-bb}0>)36>OBLuQogRB>;Z1@zTrLwcY!@edd#RL)SCafTA0vDvIr7;>c z?Y&~Luy78SxvS6MmiHI=bl{+R%Ctld5c@l_i3Fra=xEAFQI|(-QBB)aSC&x&bGjIHIw}U95@L`5dnooN8Won4`-8oS8Fy8M&A@a2)WA7z7bkvwi6dm2Eh(IWuSY(sN^tko0A#2^EbI zH}MT&VnQ;%lNf(Lxq}8**0Q@Gp@fMhcUaTv%79OT2H3IEdJ%=_9T~u%Bs=?h(X(i!LyF)(=K%CO)PLgR(0ydZrq(f+kK5Aftv;3wxx5^e1BI=_!i3^dc zb0)Zt6|HL{k*Q`A9P{3^8`Gbxq40gTN>p1YDS$=FcC0tdLyfuOf<}~~FVWGOyr_lR zQXW|PCrw_~#f*`Kco5kQq~P{j+TvFjFhEuc=N+lE( z`46ln%5|Oti~L6o=>5MKSgSsh2bPDG9YTvKP9#D`0T19+mX?5(=>1r-q3UTGAwHl} zG49y|0v+1}d`}Qd*3((=ncKwu>NGYV1KnY}Nppi)+^r58})6=$C^4;P{T%I*y+)n79Ol?f4zX8}3M2 z-9N(#OCX}_?(7&*#3a*Q0VgOEQbAJA%yh-Uh3t&vgx>KYW^*wdwYI)BnW#17e3@h< z>T{6*z3kuV`K#J9r1G(<5xN`)h-$DBA(Pz`%U9tfc|S$^LU%#dw39 zY$tS=rJNzqSCSq?M3R{58dH-73FT?c+Rt%vY4l>P{fvfuIb#VaXosW*DrzsF;i;6_f1a*jkKDM&pboQ7eg=;8S$;Fu5%p zConJ2Y>>@dqmzwU!Yn4c3Gv7fNr7`Aj5M5Bm!nzXJc|NA@VI$-&g|`wqa(-;I2*d8 z4*zkhryI+vz!8z@c#UZz{iJ@_nuLBJ4>>K|L(T_KE)d?(o!Of&+CKmK;N`}L@ZUzg zH^AM?PqjC8hY;Zlzq?te4M9S3W|N$y^RhpEn(T|owk_`b}HD6hq=4}mom8%=8w zuLG_f^sA~$3%2y~v{%1LmJrVX%jbfWtT zS1!45SAN4+S1W98XP`^TrAESs;DCI3PSuxe1F1nKz+vJLzFO zX^jom!{EnNrq$9E=)R$5t;Q+3rFUX0I#)Y?xaG_CdlE`3?;5tuL2=$K7WyxOz#hop zO@_JiqcYR?QugLj2Xu4MZ*5Lg(zLxvf`JIY&X*4H5B1%*14z zeix1r_@H(Sqjjfgm(c_rP``G6dv5QO_i_1_ELw=LO~&TRx0ND)IS`kCoXLBE4(iH1 zSi@w#370(5N3;bOp-W`JQ+Xxdf;&ezf5}BoN_n8m#2M-SlSDou-BxsIg&QD3TX?ZO)VsCA+=4&n7Cvt(I-`cFbeDc(D#_1Cqf~|0EQ2r zn23Mgj3qesyEoXH<>`+fRF z0k^GP6+gQ)KPyqbtH9<^phFb6NCPjK$rRq%GCcZP--s&A4G zDCEssNNPj=6Wg%lhSp%tZ=ll$k15l%k%;=!2HvM}#qM3{((HwS?qX~Rq`S4G4~I-n zQVb0kv!jfpgi~4#W)OjD&!oC*LESf!=Yn{*vizO{T-}ylv511A{ zLJ!w=)7d?@Ow&Jwg9IU_Q~m=!aVRK=SJr?=u_#NUMKf+U1 zYUQt8=xZwfI(R8f*4-j^pE|JYQ)+$0WaS`Ox0K4kDm1zbgbsrBrz%yd1eGoNEfr`8 zdThIkXBo~8_MQTW+}N1P?kY5fi@UZ#!DXg|(u~+LQ(S3A?=n+jX+|G7Ld_{Fh%Y%- z4MmbdmEKgZH^Gf7Og2EMn07LTlegiFA|RC=+JZ4xi!E=~yG_BhX@gEg*d#N99@TaJO9 zShlCY+-A`o;4~j{H%yp)`dBuF`y!>r4JOJPk)eUhl;cVg#xoPczzG!Wik9pQpbg{B(vcRrLs4?wTcbyBe;REF`rWJ zeeYCwrgvU^!#e>-8S*G^S<91Xg6$72TC_-Y3L+JV3%0i+^ccKXP8tOisv>>IH!I z9S|QrKl$7MDsZdHD<}|hruWpy73PhYit|*eK41A(fzpbXBtkpWa$S_K!-k9sSaK9E z>7xSUQp2zai{>nyF-toyrf?~w(Gv$Eo<&u)dZ{;6CkC&WKbEyLp-}_%k;$XHE>HMt zqlgu2l2Nm2$0YoRI~7iD9h_ER6GjFkQth&;MOd`hKW%lcArYUwF*+v(f>L;2cMQXC zzQtJ!V=#o9dfx1E(L1&hza>)wLU%ew;x~x_$(Yz^O8_(a8aP^NO`zc9t9(k9h#jNb z=yZ)kVi9Tu@f(oLm~9Y|?_lflDYTj?q#Uem9JF6H^5XR+WCVw@H=}II&SFuv%aMb} zYW^Pv-&^PdjI;3{Hm~?+X76@Iopu@EbHL@I_c>;EOpT1#un{cwi%MD=QDlmriFYMt z)?axC6SNZcnr1mR?VH(4xVzJVLLE>b%-CZb5?X^I(KS_YNUrR8RtFb+YkmY(s+E58tVyOtJQntx>k5 z&eKTgtq>ldRUe1iZw9oyHUzbm&EVpG{d^6z3IvOWD&9dYsaQ%!0t%$HSg z?S>-lMU4hHW!I0Uu6h+2YfQWF5lW<+u;G zpd7@*%W==Zvg+1$0xlb&;Bb(TyaA#|Km3qpBUjjfzHbdw;>oKc)GRmFn2zHu;E?S) z{P@;!Tmk6$P5@zsBtQ-YP>pGWfU;3Qc^O%z>PsFG zL-^b|$ugpSz-umRR19Tx)&jeyyY)715qoHoze|y`# z>O!?X1Bb44Vjh8(9%m$Cs$!15hp;O07;vzIV{QHD>?Tq$egJRDN>?jQ)Ftf%p7RZe zHI;?J*<}97O{>u^^a5itVx1We&QaR6lW{K{rL(8$y63ZJy8;Nb0%;|TG46?&->Wdf zvgnU%C}3500@Ld5K5HGlnB`O>7*#}$i!(Z~MVc4bi0{Ai+84zdq%6a{2noux$oD}X z}MM!*-lD>B3smr1=FvFcj?xb&ER+zNY*t(#5 z-bCbFB69YE&TEgniIbS=9ilg#8o`H^qSR;vwI%fdH0^$tjSTK?Yw1_1+6x)Dul`L z@d3`?L%Ci69|#`58Gx|N2LbkQAw1xWLH~y#ZJ5adxp~Kf_huOuw`b#A;6}V5E)X)g zMQMDKo0?N8>(b@?CK;M+Xc;R{Hn_p=gwHv*pC^`&t`0ZrxLgEBnRsfr+g?7(9CU)f z*&;7W#mc@%Z;3s}Qap10zJ|^{T-nbHE+2_O!@2xum}{I6W7R_-*m%mD-NZ6*htyU= z@UN8jr?RfViQ37x-c84#4_fbX5g~C$DW%@Y>wRh`ZR)Joy~=M_Lq0)2`&-@w9+vH2 zU`^Y&np|MQ9|#JfRf&LnAf^7~&SdK~>yxd6uysU^ElQ5n&vcOE)K1z}qA-3#Vf^0T zvQ5dF`fR(bU0u|=(w)v7R61-3+w)tliIVAaZZH7elb1qc(a?Mnb+CJS((hRM{RRI$ zkbZ0E_YwX(-db<>TtR*iVr_BxY{!yqG>t$c79%a% zyZ9ym`lJXH3N5$d9pvOzWxZ2gg8!oQRWhFE`ORkiR;&}bJbA1aPt3-gZh$MB$l`%ZRzN& zl~Sb3MIp?oEoKl-{5UYr%p#$FA&w$Zktz6MX2~gXBm5FSc_Yw!cHIim2z<*U8sUpc z{zg#oyqmX*MxaF14h{ee!kEo)+yzgUToDEi*x&yPST2+uI2M_hNvbsP*rhSOiXDTC4 z1|t~kmw@Zp$^SRFCZYj2uJk~-ZmE}X^$@Q4rv$F_RbP@VaQ$Y*{|&AQK3wU6aP8{D zm6Su+YbOP+^i^N74m1Em&wZ?E`3drJHC)c~4-f_Ki&o0BP|ibN^(FTUx_Pkz6#joe zH?+y)eL)XYzw7qPxRQf9w)ZfIc)@?uOm4-Jz z%D?`15jfkTxaKAJ1qL6w3g>gj(zxasJbAsPjE%il|=RWBZ2@?y@rSs?%8(F)z&YAj})n0+z0a69nW$%Ks@J*a?bx~faHGm1pkR? z60_@$k*K13ASc*#JhJLw+O8Y83 z5oWj|rNx98zGgNg{)GJOPLcRh2XTf|LB_oXd%>G#!N~$oP5&XL6j_Nb%K$dfnmPP*@p33Bt_$S3@BR{H}*H1~_a2=BKPZGz5i|o|c6d)cH zhcX%)jZ}l3KgSu@aJKHa4WQ)3gjj4?a}cXi^c#6(IDwuMfkB*6+h6Mz8rXyu#UW zvy*Heo0ssn+pOEX?gja5 z|Gz7|?%x5Qq}RRfS^3QS%YS&?)AHHV^g9o-MfWxN?6$k{a!fv(^cURIAfKT7h8||L!tT%*Zcl`h#m2>yVXJ6V-UQ|BQe_p{ECm$-OOomppFox^`P@LEnWqnDj zE?Syp8*r8YWyR{y$P49M1yAb_s8XKX>JD0j>TP2 z+~h$lJgoG7z+OcqVS4z_Ap6ev zJac6;bc2cC=EFJLL`)b|C@GabXO%IAo*LK>9~ROUl3}>`zMgz3+`A4l7{nov9FaKW z%yJn>cAaNUjT*SPM*H4j%2u2Ni2;Cc?%p9;!V zf5WvG*HK(&a9ua8Ty-n1S-4(8n%8hS@%%KdH}U*u+~2`{Bkl)reT}OEziV;TL4khx4Jl(Cb*>@b+h_sTD)L4>36Y0ft2Xc_TdZr< zMtX9sD#xwHK|j!a@V&9>IDbLD3gj1?`HR)~k1{C5N<3CO)>4W|HI8EW18iwv>4z}M zDNffeyd%fTl#=d?aIbcdzyf=FDu6)y9eLL{2rcohL4K-sP`RpVN3FOKp7>QSZd4)s zI!rgV_Xf}@nn&wh*@VU1oW|Ekb(*X^x1{ zUICgT(w2?LHSb!;;`@)-Lg?Fi74P6E+qxF-;MiKbRyzo`noc0;K_x|pQ%gA{MH4?y zjVoJ47z*W-OpUaIDk1S2m2IJ#%Ld+wNBosp&A&RHs@UxteS908b5@3=zwz-kr&tszvJy}o`Y81&>2x#ue3}B zP6CaFTL}$>Zb43wF9?&QJsly?uLA^dNaZ2~{H4}tv}hPr5M;TI)NyhV!r{DMg99#R z289-q!E4DK(W59nY9!7lX78pdIwz}#owFo=86!k%c2*g}&|eurE`m^;i?wq|QEcg0 z)UF!VJDf!sYizy6s8{2oAfV>whzzj5+yN9J952~|yUW!I&`!Qbce)s!#k$(bUD}H{ zR8GE(b@Ej+Ot=fxPQI!Z8~Yqu#9s}fFI3~~XfDkx*iZMw3-JplNlk#t{(IYp7 zBe`fAX$_5Wd*zUP3>_LuPTpg_p-FJX0EOmxLM9DM!HuALK&ep-=LI&IDX5?i@e4s$ z*q0@i@z4dgadv9!Bb33fkoLkkIh4VxZF2MVmDf zi0g_9vl`@?@Kg#-^b*iC;TAFBK_Ml}3BF1%0TJPUg_WPzJO$CEtkV*I!M7G6JH zoWHTQ9B_vn#dwmsDyjv(e+xG`LNz>SOP=TrRn(E88iPu=0q`c35vxF~8b{a6h zQ6^9wPt@<4Ln>_TpF=37XN3QiDL(ycSo>0J_DuM3Yh?#|o{8)-?Fc|}I{@36nbH^4@);y($`>(jWK~g9 z9nMFK)}K4w2E9EB{K)n25Y*$>ux=851*AjJJL58iJ6&mBW0ihXJ*m#-GV*`6lVMuvp^>mFyqmAeG4D7G-$|A%|p-oI|HdrZBT?ndg-3k26TvVC+sDHlIp16paMPC zAWi;*!I=wJvQQ~rzZ9Juhk07ePjgc-KOI3Do|rp0K7F+f=4No3ydD}?wPtn`61#Kk zr{mkdeg_qFkF=k@RqvqfJb=T0@@Xeiq5QfBDJ;k*R~Q9@rKC?IKX*djtSMvq98QwHwEU`UTc-<@!BP|bhgj$7oY zx|W|&vrmBzgC#Kyst&(21o(u;`knmIN=Frs&^d9ZcJfVb7(dWCTt{suVj5!K47b^p z+-UpdwaNro^c7|dLqcYa*V9&ZXX&0_XJ z8O@DsR`c{Evcu0`(|8 z-%O6}z-NeQMuuClACV%d`Fx7x2y{@Oou{ofdDPJ5MpSc82P^#}zLmajjX$rOy{HXJ zR43Gw4Ka3$TBQ}FI4@0rfj3k{Xt8S2h9$^>!3($}(gb;#nybb74GdtykO11p=%1<3 zK3|<4k@ETK6e$A=4Yw}E5DQty$;CliH(M(ggXJhDOjQ6htz3n0!&Vy(CdY_0fOWI8 zwKQzO@Sy)Y{9<78W+6N=S~*PN`p9{YcCKr}5H=tUl!|V!-hic0k|YO*ZzaxMD;dPP zCw8M6NzLpA*viP(Kw8yJ75v?Rz;^-mkz~W(mY)aHdk=d$0X4w}+@yu;rZV~g)oX*; za)zU@&<&@pZJw^$)T)-{^dOhk4ya7oPx`0~o~0=73AHRc6QqU_B&_F~NKC8Km&^fm zh!pyg8FBMt1ymPf4mrx3@_9AlHo`Pw|`|7TQNH!uO(A- zldb~{XnO4c13vR!BnEAS!BD~guGX_*>IU~Tt?&^HY9Q`pB3HzGMabB!XwHKfE5HM| zIXClJHU=u?Fx`MWG7r ztkzd>SDCBuBEkJo3K&*Eg>-=xV(lxW>lkiN;(%;+Hea|ntvwB7LAqQvAfcv@qIrRZ zofqOlktNd>!j#E;T684#*jebAc$fv+i<(q0$>XAR>j>!j=1XxjQZa*Gf2SDzw5cL1 z>?`pbJ1Y1)g(pNa8;BjIzhAQv?ZC{s1-_&G$+8w5%mf1DlTyJ@M5u!K8R?fnt!xNQ z>o~Q~)Feea*Feh^a^tp>B$-5nU@mv8abQg^%LsMKlU8{mU_-B6t#EU_q)xb?K@TcugU|Zq`bf7e>Kczt6 z2v-(^D4J^^R9)C}ta6Q`+8c0eHB4h_J=jD>ZP@VRvih|F=wiTZHW@ z`}aRsI0CQ?I zI*1bIU0s+YBcuKb$Z!(CVejO=-%)!u&qBs(Rgz2^JR`o|B7e=oSGz~2cRcUM*W<%i zAAm0$t`7#r@#lf8?H(X%%MU{GdKt-kaBQj|`FbCLWF<n*o$OqfCsI4y{*{hn*aejQ_O#%(zfHuU8@BA;ZBt$?qmE z1y@+8sgAl9oFShNOZ=3E*N0>Lit<~{268R zmu^J~RFE0le)kfT5}j0yl7LC|h+7d>gQ!t}k0VvQ08ih2@e9fk7jSUO?mQ}j8&`bT+TH`nRt&T`~9#vZ!gZdaV+gElb zp^>SnR$c2wMYmuvC7KLvB^u4l)}1`)Ab7 zdIxbNF~%hqab-zF;8Uead_cfz5b0v)_br4CC34GjXZ`Y^s`(cvOmFByuk}5lT)?w; zKaQWyET|{Y&)DX!NJJnE0Aa8+`9a)BAl#660|dPW2$9FoOb&^lonxCJa1e+QknRA| z-Qw{BY54*`{(|IWXh83w8lhmKg4EuLkbxYNvhEuEEX~r1Lb^B4MK0R#K8^;U#;Dkb zkTv=hc508au8f9LpA7I`Lpo1Wp4dX}Fz%O95l_oH>tw1n!a4)*S1yBospmT3Q)5Cf zsy%^fPm301%1xF=sD2M-i~7=QrOC>=$8pT$ChOUJgc5CyvR8Z#=C^QW9_v#=1Dn)} z^X0DE%cI&-51ZNWZ=b=Eewe~!F>}GIEaGot(&~WGZuysBv_I5=(cX*VTzrN$Gu?ZX z2dYLOn^zUGNdSKQ6h?7&upq>Z1WjdmY>pk?QCekaPELYM+nqGbU^Pgwa*4@`4oRxD zpYDc6>Sj4Hh;{N5A#jojPLTq^J&(@YEN?5lyb{PL6L&ipJr!J9 zJ_8@}xb=YI+QFAc0-Js8n`2!#!|di*0d+FjF85kU{NF+rcT~0dTG-{vHHxYO6kq(! zvG;Phc$LLWm~gq;S_s#e`iFz6m0v9>S4~)2uKK9BTvhmoa#abg2a0eezr39L5rACi zG+%Xr#Y%eEhi{_*iD?7F$7r>=)aU-!fMkFU6Bw>>tPR^w5&?a4oQUJ?}{plrvRW>dz6>Ejk zOMw?)EyDWaQo%}-;11&w;q?&K!50Zj7L85rH%!V-aQ3_e{RrpLro^e}N`yf1 z``p0(?Xu9f7WDmdg}#U1{{JR@3!2njWPgdV0$8AM;7z;>_Ien%GwgEh2M5}wOm zfvyvGX0?FAaI>N8w0AllrWG`=`}b)avm0FF$ua0?1zehD{w>ULUcf&2QUNv@z^12E zObd2!c)9q48vNlukV}aD(v;gS>3R~89WL2^Y3{}EmlXQLF^u8Tt^dbiMJccUebGo{ ze{MRiqQcK!Uk$IC0)r7ca-{Q1E%Wp~Nyg|75+maMIkR9-o_sO39sTr!#B4u|l$WNb_a_o8tJ1ltG+ zfki-{%#1xLpTJhpuq4$at`mdtC{E!nh`;;-{AC{ONQl3Xv%D5+I?i7VZ4hvCw>CHk z9S@JaPA$Ch__#{<0Io7`2S(NOX(WS(^H86H4)C$J#DgM=bX;G)f3O=zQ8QU*Ua}?n z)ExBouK)*9){p)Myx=?FEM#r^6@$SOaQ3(MIh_6NXYb-0&WlK|A?N+wXl9tI-8B!^ zszoi_Utbfu`IlTV6AL$KKMdg5A9)TP<@kEu4~QGYrw<-%sR{t^r^0GkpU2!d_J-D< zGs=a7Q@X%E#Dnh_~?b}seXO#P9a_U_C@GzC_=k}^(Y{{PZY!wNeBVALHrARpB z?q+X1YwZG0Z|-P(&26GwQ>9FUYXaE2zJ#p*0y;x)zYZ_h3mfp(1MRuWv-ZiGM%ZzM)*t2eeRXByXX9 z&x^P=PebR`*GhxMr-6S~TIt&p)Jpo22a&2>OPLasRDtrDK&jA9W67#i%%@A7D`Q@(T=E~ z-f255`zM5eeqafCdw2^5=38?Jt4j}? z$i>1thpLK~7~tXn$1HSkU)YU`Vkc~}Ln=C4hC?dgK@dKMV3`h(2XA)xA$?``LBcS+ z9=goed7+jx03k7?qBycK>pRe=Xl~jCe+&3EBDor_vq+8aIJ61tiy!W-0(@H<;r;e* z!u#-OoZzHGqozNQhOazy5UgNqafpf5;I$oQpQ9m2m4esBqF}%Q99{_kbJAr1NAHKg z902wL1hlUd2s zC&ZxUQ%Bx;VS<6c;6Bfp@r4CocYOg(!L@vXueGYx1wbEC`;_J_{8;oTw5qa!@Yjl^~yaf|c;+xonR(Hz0qW#YF}X zb2XSho!F6k8QDL2$lT25swmmr&Pc=wTc8b_hM#2V?VkG=lm}}%6A1TT?4C*bl8tCB zyXRqB0Td+cje|x;!)i4HnzF}nz}-GJ7KRc9?1^#v2aa^w^?jH5Jqo*6j$??k)4S0wSFEFFXT;h@+)77jKmlEl zZ^vI@1YQ(}wtAiVc`sWW3`h+?YD+yRkZmMD-PY1`X@nOp%J;G&1!KFr^)Ci0D zz|(4W8IJjTvmWOJ;4@!35(XOYvqp7-Ec7eSxJ@N<_dh`?Lh7s%P@Zf|Cy?Web z7kV_va9Vq#G7+pLf4Ko;OJ%*@KepnzuiU{k0V96TSTW*bRl<3$ax%9``Jjw=T3_PG zt$1l~6;5*z3&MBO*A0ARe>L#MNnbaNSg3-blF8D900t(gV09g6Zx|3DDxe=S71;ly zw$)>{qY?f$YTbaWXVtc0SpUuMg9WBZ2mO0EGt{nM^(S>f^H(Tz9X(<&Y`|^0JR0Di zT1!d<+#MfrTvmaUV4B_5(l1W&c`W`dysMY)(n|Am2)TYbdVU-)B3cx&5xQ2=o`Plv z6+%CpQM1-<#(ft2BdpzuhtiBF`zT%XbY7g;UqJ)AQp!qj9JIz3@@W;WFr+=~u^%+t zslK0~3xA2cs}oTGIn<^@;?6odjK6yBG8yyJ_yk*WaZzmWB=GxtSHM*cDf8}wy*sRL z5aJ*Miu6D@5kc3GzWsD`SD5sDkRI^;m4^K-XH7OdC@LGRx}Yn zhfLbXb;%IcJdWM2gN_{hMdKVhi2nJ$g60?DFIpAqFZ!wguzp|CJ@|~+1>blBVGcy8 z{E?3V&_A|03&`tb41_ zK>@=GEd=ALY&6aoY%H&PIf!@+^W&fiv>k(oU5}hda%3npP^M|zQ=l3{@AW-tNn^m5 za{0?0&LR&|AQ(zd7;&Q2$g*Vm1}K|Almo++3iR(j_U=nwvhkEZr_$$r>>+??hj}D8 zY^0@*%KzI=VBUMyI{E=Nw00lvrK6~Dcu?1&61k{E4uH%A)m%?RlEvu35(iLpWd)vkST$zUZmHkPH1;u zoxXYzb%NrxsPY{8ypR1kDX2~n^Lt~0ZA2mLC;}r*pDGj7tabEm`c#?6%5TFpW-nfF zKw~~g1uKpD?O%DpLs75-+_(O_$G`q7LvRUluFm7fd|hgKvkb?YMK70{-aup8U{Hhj z1ktBO{M`kR5h8x4Rl z2QBQk$c^uic7Cse9q^8V176iA-hl9<9!jeO;TP~u>38MbaYt-V6L9!;^)38>TxDmh zO6dEqMVq!8;-%aTD28^aqYzV_-`y>^F;<6S6`y#@q~p@%0hT+JA#cE#mKA2XSq)L8 zb*?K@W2O~4onREM!!9Dgoimn!X4VDGLlJq&rSJ_9?3`z01~LNk=NrM4sHKhC$R9h`Xz^e;ysP7hbCOv)7@)M?0uiY_mLSXz-yK zybBZL@~AO({02qVvRkTKz0;=3)fk{u1Fh{^s1dE5BySqR^Geg-h>AMs?pbg+(6+1T>*gm+oNaiGvVslvGRM89r^zqaYvL zZJsC%kuuC|`wPI>C%O-@@|BNLqz)lGZ)OVsfd>j9aJvg+3~j$a3?=Z860hw^aM=>f z2xj*1YYwo$jd=Y$VoBol^KktQ{)^XeAkBuZqk9QU#GP-_;sZBnQ$b5V$Bu_KX;Z;z zWPfq*k}!+5Th;H7Y)hYBh4_q9!EyJqInNTu4dnHFJlbg6w4V*U2Fw;)K|S|X7`S2c z1hCF5N*u&GcM#uD>C?Z>V@L1iB}MR(+VM;p`7xrT%~zwZ0yc!$*O45ff%bK5J8INz zEj{yH9r;2}Tube+nZ@HSOW~%oPe=L~K;V8Bi+Opug4NjKVi+x2hqRjoL{W`YRFNo( zo<&ixyTlBiVZ+*EK>|*HARdP&`#f?Q?^)0@eC{UQeUI3Zf$zrjC7*G!?y#HT>IThm#cTV^7ex8-oBSGNx4k5MIURLW+lLq93fFPy;@DMCp*oSVVk8JigNV|>= z-~yviY%mun3Xv1knYCGPb-Z z{cRQW5td<^6h|%G;NGXdtr&9tIQ{J!O&nH7@cJaf`7sg2gys{bDrb7XkwK6yObDh)-G!U&e)B7#DB#`0&DeaO#iU*{JE(%gE zuN`T)j_VJPTG{ZP8N=P0FqA>eRW9$;BfJ8wvM zn~K>&8FTuy(tEVOpGqR$*_A{c@MjS4&OaeQUU%8}!Q)DEU1EMfYhR_M{$Jn+Wzg*n z9mU}&LD%sp=H~B$9|VuR9|MW><xX1?k!&6chUd46g2S8VT zw3#c*Plm|bHP-ALJ%t@SwGPe#C*l|D`yr+>Qyf>Ho^eqKWXp|0Y{YU=ka9UB!A7z! z3X;Gnn2l6@uef{w8&Uo)=lFW*a*Z!K+zD!;3ya_>TV7>riEa|w(M=qun|Mw)an8{R z?Ah;Rx`|_-945LEW)?$&5co0Ev>2AjL69zN2#DS$^^){{F#TvZ{rosc7e6e0IK_oo zg!~ws%3z`ux^%cONMd}ILD7C(|KJJ#!XSkoU%$bbk$;;0pNy}$muq~{`D_p=UB2;k z+c(PiT6*A8jW5~cBU^VK6T@3yD-*-ndO`qR0ANQIJTd&Z0Zyyu-~s+)R)u2q96ZJR z7)WFT6Ur)n9He+a3ZASk4ASLZJ=dLRKP)ldk+V6!&GDe5L((?lnn5vRG^KItk;s+#kz9@bWxW649 z1nI|&D>`6J?>G0NAmxgkGBozb^^d(MNMg@TdU_^k>CxyKhke^5gnN)Dgg8GDw4=R? zvv>c!Z0~Mw2{^yy#O*Aq<+9@&17*jg;Pamsg`9^g_!Ph;VS-CDz|3xa;h<_X)KkeR z5Dt**;fc^SeTXzx4rBf%S-6uAu*0XCownlv+q_ocoiWsP))DCn3>4&m%g-xjn~u|H zku(Ox0@1I?fzAh1z?%+11>9G}JEDj{mt02Ayeosp;1MYXV4+I^z+I%=!&1!b8UhUi z{RnG6%SmMb)RV!9f<$OB&Z7E&YIs7uj31Hggc6k&gBBrwU5BL{*&W(}*LI}UG{?QuGtJO@6a_kN9fezqWvoC016ru^HD%M7bp7KnZ^%>hwYA% zgIrbkU2(8dZDwDk@#BswmLa@4^6x#0QunjN@M%V)op;v=1q^bNp76UQ|JA1>_Xd&s zgJO}}C2~K7-0e%73DC;5-J??@6 zjQsdA1@gezFRAP|K~aY8FSEp5ME2}TKUy!IR?vFoZ68{|%4K>PdgCApudN#pNC3l!$zdfQscIldPam;p`c$y1tX?u5F3mj#6|L(^j@bs=i;k;ogN7H> z!Ym>QdwfA33@RYx|NJn9ZCUOyK60;yAIo}aKPqKrXFd;T^!E~c82ScqR>%Op?hZbH zClvt+(_v{p!QzlM0un|}SJYmq^6wOYAw&7o+c}(WA#f}LP9?Tc9S!R5o(nUmKMEey zOGOFmDTaZqmg-yXwN((MbwLr$SAzAS+5NP2T&AsKvMvcaqDfFsxu70&7VkFdE;QZi zAYXe?qskUlTvQ8(uf^ai&_q58#6{a%;2+z|eXs9jqoC{{$R0QVFwiiw+qe5E4Y+~K zcA+WREttHTH)3iFiykz#e8gQV(A(uhuaTp7j1Y&u1|~#83GVTMo~?f|(MPPst)N#M zfZj`RrKO+;+<05nvgfz?5!}VGM!i?SlX-Jbjvhv4tvt|b{jEk*GjE}fG0Xsrn!c7* zd;t3J&521^7RYm0vwtZu!gPFIh?7WaK;IfD#=cmqg~~{il#Q`6Cf2r?Irp7FFSJvN zqJ#5;&wxY%G@B#lUk44r!_Ch_p_y&LM^cUWp*X-!X6KbY;-9sS(jmbtCuuiFunz*$ zJ*%W+-Th^QRLKmda3t(;;4hI%uVq)hxPlDy*ec||=&DznK2l@y*E)F{!XKsS@XF$) zu`26S@QIu~Ub3>&dQFF$|A8LC&_sGTI<(%-$GVxN9YFI>NT@L#rVjJ#G7GKrU8I%% z!fLEw)uG6UClR8k1A)xT9LJMzSBo;1VR#3;oE!cdEPh?Rj z2a6|xL3+}GFpH&@+|B-CqXkh;Y9r_r8Q z&ss-6NWJ#gq&FedYuzz&xBM0JNc(z*tz_q;0%V~R$hAX7J%13CL{yIfm8z!#7A+0^ zeU!eIJ__p>pFgs9l#iAdh*fZpWFyJb{{tJj4dMIPdHiR8x$1W{<*K!{<*L}d<*Lbb zup@jQzRK`^<38b=jP~nXIseD$r!QLt9rP+$6Cl8zR@nCzX^p3>H`=Qc>`OMLy0$I? zpIH#&U69O14-_-;9W*m9@URr|+m+FXfIA0qPVNIm=+!xPyV5*wYcU|8CMl^Z5f!!Z z&VUq*Ldyg8J&jdN7*K&X zm6MnCqQlUimnd6{l+h+lZ{x^#*c%&A_}Ew|_qwuAP`s3N^g_l4ww0~&v$4ubes=FS z+S;sBRvL?1tdju5l?f-`k>41!saV7LLZvRPV|@F5OHqg+$ySFm;WTU5*wJ(S_(Y+|X4imfXC1NZvy&4<+Zh zq*9%yxCW&lnWw7Wov3=3$LAUu!(8|3f3XCCSJ~YEsIn{}!tJa~PUU zjNt$9clMnT-1)JYZOmHXon1j2M>9Il+dB)50b24%qsetDwBe1d)_i-7R%(!jnq2C2WbR3cC3L;r7M?s`?1);NSw1!~PLJ+!LiWm>=2^k4iEue`? zea|!vu2?8nrzO^;!A=1R;AzR?HcZ@xi`z(XOQjpKq~n^5YbGwMzUQ(M{(2d?A*@;U zG9|)a&9e340Z$v0C$d7JznW#6#RHzU%TItr7QDFCi5sa%0=s1`xYsN@f&cV}?-b<+ zH!TJ#ZgIF#GIHBcvn(0^>91zlFy(2u@Cu$JdY_M4q zKpHb&A|O2ifeZ`*5?}Q9&VaNEAfzj+U~+UyFeV=^?i7eBi(^9e2?~%WLx4Pf;Xoz; z2n=213bzgaldsj9x1oFG*Ri5>vItR1?-NpbZ0DsX3Lx#;;XrmZ29rOA z04eJnNV)(L8(5u80P(j&?3y*y4y3o!{5t;0?QoCC2ziXZ9eRY6uIs$?_0MzIxw&=t z+7F_9J|>+8F(PNJJbScUHTomOW5xA8u3pE=Rbz3j#PtEL{>RHzIk;Bi+J}pVtl+QY z!PTX602`H*exnA1_C^Q^hDpv{ZObC4Qiq-05Ff9H>zC>>bsBsroKD({IApt>cWD$F zdm|Ukl8HIF-6_oZ@t5uw#$RIn#ubD)v6}QptgiS+Xv!zgJLC}Bep;tru?G*}HCdl3 zyk@TGFQOI&^;45&%5L%Tnh*Z^inm!JD1x~x7P;aAb5(}qdT-I+z0JA)T&qPcqTS~2 z{3CR`c-=b?m=(aBrW0~;^&$lkRr5bP&uHWsTSGG{wd>aobO6^-Qk=@+6zwv#nhPVF z?fwEA1Rn8$nC?Mh&X|?Ps$Ga`PxI&Uh+OT6`^k`8k5ew10As9B6Ij-?kX-jr zu5XY=&K1C@nqS8@%lBFUYd3Cth5*wOus{2O1&mvFmJBK2ozh-4lL9;IWigg}0*=A~ zhKcgEft7izU9OFyk+>?WZ_aywr-0?#2^#-B$kUNL_c>~b12{)pA@Fuar@SxKV4ShE z?qXY}Rjn-iC-zpjj^O$?uAhB^_{zB6#}(OFt{Q>MjB7crXK~fzlE?od8!9zF*pvSEG7zEGI_d;H(+Luw8DNT9w?c z6|~&Kl8Ms`vL=WrgBT3^dvI1-ohVtQ(b`JZ3qmw|#WB05w|+$*K+WRj@7MDt`?%ut7 zM5Lxm_o%4u(b}%vx_6J!(MS+~G+*JgJEyF`ke6R_3{GO-qounmmQRlF^3{I&*~l}I zrzJgXXXlk1duzxK%ObY7V4~EUDv1bShwYm#A5^BxeZJ`uVb{CLOWfk|;G_*Ft0ECr zWEDEiVp;i|+LHD7bABUV^uK*?gmaJ+UKaSqNXJ*+(_}w&I*NaO9_#lm7dF58*6&X~ zLK`CA5}t+#E#Wo#6+`ieX;u5BGOdPNZLQ6gX9{Hr|H6a51>*{W9A*_CZoxGLaQw@? zzy;S5KIm#x0ZiIm8~RRR+&$Vs3Rr|Gj62+Nvte9d`2ovK1@2a)2)}fz+v!`nh19s+ z>aFr$<*KeP>OK5-o9KoZZuB6z26yaN9XC+!f zY~O~4>G*)++`VLk>jet!wsd280fGC%F%N*K#Ok;m;CAgh9;EtPTu!Xzz4Ry{qSC$s7k7V#WQ44|B z6?CvRk$p)4GIf!eT4SbWL7e3&;Ak=QM6BbL_@_7&z*!RJ z%6Hxnm;o*Qpj1R^1V&wek*y1%(kcy<=4;>}>Q-sOJ=hUI|E2Nl}@S0D{eWm;fT+sL-}fj|x?G`Yu}$@ZOE z*eWCP6IvB*Ys}rQcTmJ{$<`v2yY|`tJPN-)2xvzX@JtaaZOmtlSVE z??66!rRz-Z9gS9ux{DezksZ5z)VeUk%T1=l( zQ9Ntg+Jk~;Efz+@Bv0yDIKZ+N%PULjI2?A8mr;9Byvn)+^pI^}BR5cb>p*EPxkJ(* zuv%{^)u4ZOu2=tV>e9guuZSYsATETUK**Z zj7pY38%9tNI)`aO@8(XIzx#H#s8ML>RI zKz>JGxYU4ymI~|OSApx&g#&`o66%)RV`^5oVy)TlPO@B z=un-c*=RI*Y&|oKr);lGpSB%rOvT0jIN51UIf-KL4k*vV%R7FM%JV4YfmfltR+KmC zT;-kM<+b|Dqjfbe4?LuTKgjbluRr{e=JD$1(_ZKgNGlT^THw}z7C6(Jx&oUX>s6vF z!chqAdE{ltFV>Eq&ImY8*>YHIY$KUKNs+2;Pl=;{n79C zqK&lYo!(i76;kKv;Yih*NW7awVem`coXcky|=K$lT@fKq)@^S`)TP` zaI?vP0H44)QXF;;a4*L6jjws(7fq@yQ;+P1V`&3T%&V8I!6sno8lT&b@jOnR8r#I` zbgeoH0Q6hc&U=>WusWD}Rz;G4fOZMf9e4*1JjUIuad zMR3SQE-W4QfU%&i!jW={w0sv*!JnLU0D_Rh8aNFrNz0T8VEn2=V!iN~xJ&19EJiM; zV=n)1#eZ61Ip}m2)k6!rEcBSAadIaTWsmFx&{Ed}l+eX9QMfTGxq3N$g8!pC3QvEYeZDH5i~br<{gml16`oiA=kz!AeP8EX zM*5p&>ZE2DMt|;4I-tMDAz}$ne~apTRXi8{&G_!8On>G{o%GV>ntzY&@paB+q`w6d zJE_@)(cgU^cR+u={@M}!d3O7%crN;D{N|@je=G0lq?axi{Y|a)bOK&2V(mOP7oOj#cuZriQ zzee^`roWYscG63ii~gp*>+77$NPk-&>7-^CMt|=54(RXkH6794q8+{}o{RoweDPDJ zzq!wL(o2_%{*Jxl>zvC-e@{KrNzE>d{_fk?0sZxQt|R*MyzQ&vx#+L)^Pe*PZG5Sd zUb_iPrGXzfPUvh48QX z$R8R1QV^Z>e}De_j=DI%BmT|0@;o#9b@*57Z3X|H#API{@V~d!DP9QwW*q(_ig&-;4u)X#BhNJgfA3;os5M)W!Kd z@o&s|X7=mw@1FNt!N1Ok3TavX`d?M2cp?0&-up+!zm)$k{xAPf7w31xzgho9|CfKY zf`3mIw1$5RSF2OJ5dO{B{YS>X8Rzp7`Q7;6-_^zW9r17Jtp6VW+t3RBb$+xp{PV9; zr+6X!tKRWP#=qjZ=UJuS3;(9BR2S!W#J`Pm&NH)LCx2`I*$VzWxwtj_Tllg%#S7uz zjLJVU{>^#hJgfA3;os30)y4T8@$Z?3&oi@Mhky61YX$#0=e34^{uk6KUI_oHKmH@* z-@5-F{#R4~rY_F!h<}Ivd;V9oZ?%GdPd?Nd{w-XgPVqwcH>2#2jDMxY=iw5+8~=Mw zU7X($|Gqh&XW6ghe{Z&ef1MY$hJXHN)hS*G|Efz{#6L=j8W#VHq%Mg6m!`!cA%WRr zTVIr6MmCh9@dzl6L(=v_+i|1@h%eY~Dp-LRZ`|SNlhcMGo$dcZq;p)xOG>13Q7SUc z8Vjw*DQ_&UAMmH-c0e*&>n_C8B40 zEjv4T8XdUr#dqpK1pJ~C9^hKRpJO(f+G}O^Bwl~jcB)UYvAjM#q(QlF!`}vnAA@b**GuElpm7+bVeL-FbfJRBGC~4f&6y$+&-j zBC9n;)6F+dt1q1PLgBRIXvj0U*kfDfu`YM?YZ1DVbvd9bO)i$G7Kg6EW83AKyss8n zZI&Ss%P!V;IkMaXaP(bw=K+l?Z+Qwp?BPM$1Y;47j9k(@Lc82rph3=T=Q0-9%3&G; z@(yj(!{@ z89(vH_~I)~DS)Z%%fZ>Xl7o|1Sk3!Vfl3*CY$uA+%+xENlAW!8V>{B}Be_Xv4p)nA zk<+8#J-}PCu9s|^T$^ZwI%%#RNmTGn49c{;6!H1?+3g5=tne!W9lu}zZ%~qdBvu9? z$Zk8pU}u|NJBu8&>vKNj5z|szB=@$nPm+J6WI2s*6bF#U=W}Fv-plqD7YAlXXX4w} zPZZ;7hJ%!az_zOhxAX9X!vW`~_>(2u+G{GTyD%EfEROSZgFr^SJMf;?RYC#QDGNG^ z0Bn}&)s%T>Dl_TLO@i-V$BoPl*=25U6WK1}MTtxU%9|sqrAU6n zuYZg>BL4uYiST}Fv7q}3{+zm3sdhQ1+Ui2}=;L>SG;8vo(DDYb&h8AT@-C zrFK?C9Z(*3a4BFrxD+m%siX?QdERJU**d6XYq4EnF|@8y79m$%ippv7CC+}7oC%!S z2zo8I7INx5!R`cq1F&3q&v6!5%Sk#g!R3@!y9HjAqY zUkaUQEQ~ra=?y1an>0ZMU~_D14Q!FrNkg-W-Rei63H{i=-Nf-&}Se2L{odYl($V9!9M0yOzyX7G?CTbkUznrU69ZTUVA#- z`&6}dCo*L1l5I#VY(!d^9`@kP6SW=7U8QIP9F@x=*%}LNwURx(5gwbP^th5htCd`& zqD^)AV{)%WHr>)2ODLP}CVZ^J^&*W)yII@y3WKpV4l2dp4eyD+b7mk(Zq9%V!0XvA^M&sjnsv&E1C|N+^rv(T3%tLOOB)hO%}dKk|!M3uNa* z<{(-QM_;}a&bWwWXe3SOe`Z5t=%}R2sjxQEBx!cY^M*TQ*vt_CTqS#J1Lm2k=hIwD z)0|Gz?15=MV&T(t-~-eAdRp0_Qu^I=N}rEDpt&7&CgG>)*l7-sC;UoNT#$0pprj<7 z$u$_$lcvR`(1jkj^&FRjm@HmrN6!>J(pSde=Qcxa-~2oyt_{PVCX3eD$lF|)Q zlxHM<Z3F{jSF#~(#BnfDM2FO>#B>Dyvhn^QeInRRg%n} z$v$UK-q4kCV38<}Ar#8RWdhvdCI4n&;n&BzDqhEM5nVqmOuBviUQR z(l3*3jBEf2_^3i9&s0e>d!|YGWFJO56mxPBG?lLI?1ru;`-Z}d&>Uu+`>MItS$xa!0V1+I?ur@`?wutQVL^ZToBnKQBiP9OB&7G8sa#Px8T zMjjjIXv1c%JQak*c&)P`kb*8m@wbJ4JHBv=;uUeC;)j4qIk597J z)vnD3wkRnP!$!~X9r?78z}RWbN(xxY9o<25X-E){Nf2M#^8RwlhG;2AhH7N8BbF8M zzND2Z_cxsOY8`r4bz@mlX=L%PV7as9a?l%L2lA9&5|Is#r@JJBNc81I5-xuyXB$f1 zhaMts{NnUFfE%~6PV2NL_wz9zpq*^yUv!id{#xvWXKOHsd`cF3T9XgNF%=Z!d(IpZ zvQDF&UG*y7(A12i7oBFThOI8CR2thW0as5Amlo)~4LVR37=g#;8yaIOIE)uX`b^NT z#cL{90?UBFG5aW!+{kmh3KG}zQ7zDu7yEaDQO*xtE&;!rdH*T4ds#OAY zr1p}=$0c~Ze%(;3e_pqo=P|0B;+`0Yxfcxtr36@Dkh4*W^-8yR_44>Q`$W%V7(p0& z|Bm;`(o(RM5{iy!BQ1zU$Ig3k;n--j=ZMY833gi;>~=4E<@J+vU*Y9YKInd;gRh

      =)yWEsz&*r`yfFL!nw|nTINf})uV$jd!V3Ij=>R;04u!mQP zB%?{CNKPzS>vLo0wHcab%oHqe2M|zO z_U;w?!6IS{N&zvG`)(}PMZ(QntplI}4y`_Ly_P*RgvJbuDDG)%WWA<74O?bCw6&K2 zc6qcuoxQ%1FEi%(@)x*`EM-{#m|;=4yk#$2{Mt#fMbiBW2>2lVVfQlR6UOL#tPI~Q zK9l<=G=r)Is9I}A5o`C%=>X02QNRv8N`AKRyY>8~xp7!2tby_L$N^esv}+H<4kzM& z{k)!*)P0WH!ew%{x|*f*wUXIB#fZlDk}~5Gb`YLh>xbG}#FPGtuvj@!^=g*6t7uR-gvO6yvFO*Xg#Z`~kT z*NSG(zQLQ#puep3($3j82Iin1D0SZ-Tdcqk_n@Caj}2PWV^`q|q1qC*o<57J*lV{vO%v8U3cY+zY{5~74r@<01ooyI zLlm<01j+C=S>+ZnF2Bw>M6$+8d)r&<99`M>t3W=sIB3SY0XpTbO}$18k@5N4+Qhk|AYe&UK{D2 z(`eJcFzQ;n%O8dL9|+c)vu0(Jdht|m0MGIq%h6#jl2qH-=9j~!NWjiw<=2w5G8KG| z)+AdUlIva}jU2c}=j{7BC?Vj8ONZKGBo4U@Bm!ci%CsE}-b6`BtrJOIMoN0h0t!A1 zjQpWk96kZKi9luA$NX(tSnt{8OH0v;1}V#ho&xgVyEDoQJCX9j+ORd?4c^4JP1Sa` zLTNK+9uXj#jfFv%-GXKTZ3wQOq?Qf-f_R>Rr#mN|LD>}ssiXK*YKf*tT8ZXn0D$n#Put5-r+ocF8_x$zf} z6eUp(y;Wx_FjAckL?o82rh;40jC9WRt*^P%*iRBuNbfpDdSCicP?=q2fG zD)<;sB?)eFe}Hdx*8dhrapY*$<61~}z*Imcdy$GB>FTAlUebi~i0nfsr2*t|k*#l# z#x>~E!No~zgJrXr$wFj*NgEQKkk~GN8&kn5@HK2e9X&+W-=-p!Qc{yht(!LjVj;K9 z(6Pn^gVUisUGV}4zN+R{ysju4VysP74!X&?#zGoD?!*2Yf2S+n5tWhFz8U4x3qWv4 z-=x0#xlEc&EdSy`VD)q9Tc=9jMo^BBz6A9Sv=IK&X#;>bUJQiTWKjkrGTnvL?;TYR zcRL)C!$}zWnU{ld_);2vC9}FAhxbAZ55pG{!)@sKPWB6G)|yBjKTcA3Cu@93NW3a` z>MKa$+@J`?7{W#H_4Ql?7o4GWZz6cO;x0N;%^cErLpQ2Tt?5kPK1-);y#V;@v9JPsh$dR6|N zuUEfU_{Y^^*}CAb;4+0P3oGzauz>47xNQtKC#dQU*m|yLcOSJ&3Q{aze>x7`E(r5KtT3*N*k8i<76V#RBmQanlUsP|!LPpqp`QQw9PjxkKEQ~v;Gau3 zu-)ImH0pC)k_A%M;((1-dvi}*w8PD^H?X&Oxyem;D^Z=@$3&f{sSeq96t(5+XTu<` zs4YF3Zawx3Q9~%FC@%~3XDWPPpUoL12^>fwnD0oaIu!;Up~2vy3es*MWx6}NK@;ct z!7wdht&z0-zhZds#8}Icmte}aIBAStwyw3a=idSB^VVt{1}c2`uO|b-*8*aiIMaFM zKahGwq2kaIDgP%EX$bibaX0wT`Q?Akry!*;tL@iG2gHRb&Gz$Ok%->OmQUgGe@u(} z`3__P4({itAhCjE0QwfZO7B|Z0&@)M?3GU=M|4qJeJwS>m1x@M_ayz`H|+EMVgpDz z+fv|>qA48M9J$Yr8ush=`4_pBz&>B>ChV{?rbBC>eg1)QLTPw|l!lm~(%^jfLOcD< zpxv;Y{&&x`#)`$YAaSmR292rUG5}BA_IJZ8;ES5Olx_dN+Cjp^5XM7SIq$}QURP)- zX~qR6+5zW3MWkGVD}bOh$GILfXdFFZ5NL?zDuJ|@Hm7%pI-gLTz3inY`5PbOuM1fR zp6a?k%sQ}YfHj@0e#<@xjr$-II1wVDTPAVDTq3bz` z!G33O=v4S z*&%2#1hMe|JbHo6;Fiyzt;`QH=e6Xim6~VVL+rYLTNv!1ln1iXn%od{{it) zi4SN1^SR!GE#Bzz@UdScj|ek25Nf%PV#&F=fp)lrnVqXtb3^iIjs;K5{a=|I7|ace zo&Y^^bHl;zK}!I8F8K7r(9;%0yx=h0dO^+YEmoV`5Ep8$CiwK_&{M2tm{r(uwV+8H zj;L}3S{3Y*#e6wqo)25Oa9!;O$k^bL{`agEbfXwa{n!Y3uUIok-a}41`_PcVTAi1W z?9X5~H$eoMhKB=z?`fE{(cyadq{T=s*N$}rn-(S&(s}qWSf7qyI_WkWIsgnAm z@{pt^`~J(&tt0LG-#b+M{&9Q@v+u7)Rbk)1dXbRTe+TS@tbXpm1?>BWkGE#uzptbv zN!`MkP*WK_vv*KNAHi2eM(>f;G3ha;2>bqf?_Pv`|AvdP?=v!dgl(i@b6i>klB{Hl zpW=eFN_-q!&i~qhzk)otscEITeV?};l&IXkKR~qJPc+*@e9WhhNc+C;!!T|iE(X3u zDuvJxe!ak@6QJhy{Z;!^fm@Nn1#bN8-y(2LZcLBZu(0vRu(m~fBRmKnTuAtF)7d58 zL~#T3X;K_vLQd8?M&T4+8WL$we(9lR_T;f?VRLV4PllRH$3ow}wGm6SPRnh~7ZT)T zC5ZO$A^r&;!6DB3S`0CRhPXiQ8s3WeT~6hFzS5P(rSz%jgCk)739i$BPh7WrxF7^D z`{0Ba_6t~qzykQpu@OuQuG1j;nVQ$`j7w zu{WTz_!sm^I4O@Zd(Y{low_r#4c>2bnRYg3<$euaF+164nQV4kBI|zvOf>e1nQZsl z@Uoas7wM6ftv^RzOghAW$ofj09&9ygR&g7B!~9-3x0B(3pJu1r0u$ao@tP<kPap6_t*?LPmqmd<;U&5jVQ$FIqnyJ6r4aq@Ys`JYfLCdFVZ28&5V0h z7xa_LrJV^nJknW>07lKc_~1ZjPN;BI`|Vko ztT*opMq;`cPV}Xq4Y%KzgZOd=_;M11_nyOr!3N7&=Qx2c30R7)-T?4O4{Yg-Iq&qI z)$0yVWC?TM4B&-{aI%70%Z5Q>V1(Xp_1cH^-f#4}B-N883@iFJ$BGO>CXN-n-vvFI zBL=U6QiA-}1RY_=UW~`vpx1ff>H&dIn1Kb;Tdei-yFe+$PI}oKK0F*!)0;XPkq^#3 z-n;#JG*XT|D(d4^*oz*WLYxY?a4Ny+Ck)eD;J;HZZC!8)Z&l|dOSXj?#EMQfa6%wE zgB9K$MsKxVOAFm-`O)z(T%fRFbd?+AY}^#>lNb10|1o<~{ZdzXst-#y6xL}R8eV4E zKd-O6B;^`7kL}C7L|T%MZ=U7+L4f~J+jh2A+QFi`z8R>1noHwr^rSXQI!`nPfx9j% z0B^jV*XVo}0HN;TrdCiuH7n%#hJ-RAm@1eh(K#FrJJQSgB;qZ&Gt(rGZ)Bg{iwRYF zI^waN*>t6WS__7DgOo}Bm6us|V1$qI5msV^kMa>N;|~J-kJ^~oS~lwvb$qT0v#Z>U zK{zE01`bGNDsJ2Sx*Y(LXRIE`3?A|%pbfZj=ZmHJ7_b5^KGac-VyHUutieb-(nu54 zk?QPhb<}SfXi02vpyg&7Ynj<~U%l4pA>G?*An(vDwvYxxM&G8yBF;OxJutCV52*a% z@zW8%r1)KdzAjjQPGo($6qT+3on|B#WSl=*${Z7=!wLH`9Wo5$@8-} zKmLk*6IDMk&JRFh#48{X%^(nX3|q3m*W^XUS;dmwFXN8ZuJU5DWUoV`o-8KWeV(j3 z$zJct^2v68MT(DxWZCaLfVZ=$AE%#SP(coz?}Qnp?Y$MFbeKp~+g~1RAB@3BPO*Ovc45#kr|3d0 zTN>=eplRC6cfG=UQQN;h*gn6<9JWkjCVMB?g;B#gi!Q>7S5ibBpQN!_F9k|3)V_3* zJ-z>c=9I|{45gEhT|kjjrcV0)?8TjEVh{U> zfI?%%X#zIx#)=q3r)fNC2IkGd;|VZIRodC*utbs*JDoXHvY1?y2yeosJ<#|-G}z_A zcV@gnFe!G0^Cb9{0S)s}8O2!v4GZ;Mb&1?1S{cpz`wnPmR;H}du!(I0=rCet#LU>U zEmm2@tHiS!g0eHdA_k`l8uljY0*gAz)_8cb?_*;DrVMYvv28Hda;*Dc19zfW_@B&J1m`z8H+PL7hnoe# zg2Vwzfoz3Y5_2ncV0VVNI(b4oTaWLOld-zJeE98X5Gj~@Ee<*vJH(%w-2cQ3spQZv z*kCyKu@8f__p#1O?R{*GQk$dzfnW`bzaH8Q3CTGoH;7 zHM_{Rc=kSl7mLsNcp^cXrHNOrq~fvkN~k#JSR_qu=?<6w?UB#c;F*e|93SGs@!^d< zE#bp@EC|7@k!Z#VOh%I$_95zu#TE-Qy<9A|fvx5xCija31CR}eCjyvUBcc!*cvo;y zxEGM>ys9qDmGi}7WQ*qcV!VftVFDOqWB5}77-P0ZS_lIhENTK^2IisQVih8B9KE`V zR{$^r>p`!CikkvVifazATs%_%#`%F0!6^;1?VcMbvRi}^q(NrHLIl9b=t(nIq{U+1 znu@eI`d|r<@~9Y(#slxG6vM0vxcF;5X|V`1_rR4U)$B=&mns6OcyEAsZ=m=XCO#6y z$MxbPnLYxkM$aN>ljNAMt|fh9d{B+hFu0bdD-;y>0cTuJ_jaHT?)h2>V?jWLcMB{F z@8j}oD7cyOTtilowopfN9A#Fc*P)(4)QvLM8Z+gw23C>@SlbLZVV38{7mkYKl?MbX z$MeeldF6Ok9IE_aa^a{%oG0h);t13}OCFod)*-SKOMCiz-z(6rpKqRc2yS?n)k`9ic~WYQd5yi91|Z#`Y2D0 z!&jsXrYG_Aq$0IHeUzsrYM6sKzMqxg1DZa@KR%h|qs!XP>~;RknZloqLzEax6P1fa zWfKbQjE@fsFtv;=6fcP9J@Eop*~^*=zLS?=(BbO~lM4QWE`S3{Xrd9LSEeLAN`BlF z1(7n$lN!rzLg;{;daoySh9`BVt2D)vnuEPc#Zq#wqJN&H+wdEQwoBLXzcFb`)90v%8l>M1 zCGz-0SG6fA4KPO4cu#7)l-A#q+Fwc=;7J`Ik2HIZCCs9H8q>)FaRE!kJHj*QoYfPNBVk9Si&&Wj2$m@A~$&xohSp$8eKhXsG zM2D_YvuC6+tQyfTv<;XZj({TifE9v2cOqAeiQv9Lf?6ad62SXn!AN zshZa-XE_SOTHxNFEn);VeYmL@%w=_X7dHFj-t&Q`#xAM{ieZn5;khdYqa%5hQ zrgcP%-KcRG9rPhu4J(9I z*Oj-0D`#8S?E4_B&^qsHlx3RV*`CyMO zqrsN)!IrX;drt;ZEk8QnK?jpzhVje#;=tUQWOUq`)Y1qc41i7+7<4RW9NlIWyM9Qf zT}}*Wb1vGloPn*y0?QAWV7shfSR-btATDXXQq0hW21k#aTR{|x6hbtjkV4#zAu!q~ znJ`5lbRaj8&0oyLr92_l1+PF?)!BFrCbJs;jA|yc zo0OW#>=RM*T6%i;M;vM_9zfX#a^u;7MSQrf#b*8hioAG0KxnFZU1JWTC0c(lGim$` zuw+Z6qg{FsfMDs|aq-=dAVhR(EB%Jd8tb^SV#9;Yi-sSGojxJ<;oS4oYSOIgFtr1A2+cSNt2gF#B zO{Ob|+B5?Xm$8)3?=>6dM+&*npn_daqo{_YqimzJUsK!Febmue*8iJI?P#zM8swB{ z@E+HJgGg<4J2C6n1TbH}U5ZK9mD$;k&x=Yivfeixy4BQRuVTIme`^2(8%cYIX|!eS zB_**W{6(xT1Dn)b3e6@JkB{~S){U1rshUxI<<;^(3ae)M*|7_a)u0eHVXbZFRd8Com+d+EbbzWX4X@I4&4+djTXT$`mfU8**>XzmrEtO_Cq6CY7+5MI zLm@-1Z%IscTXf*H=+V zT|8azY%9s&tsb4!F-aLjdpreln3AILl+;i@)lnqpUFC7mN-gIcBcx~MpSb)B1rrRpCwchSs=iN?3VQq zE!V&%cZoF3pHP)ypU5(vRZYRVPdr(ADLR|h&e|w8X@Wvvz|_G+-b*o&qZ--BRSH>N z2ny*A3V~T)PzXkdmK&ZC_}>wlGsvU`3fZsJh=ENN_I}!bH0@rHN(lam8H!hW{(}g- zO*dp_K|q@d5Lcmbou#Z)aIErinOCZGXSJ5GUPY3 zo7X#sc3wHpEkfqB(TiVHl>!{5Y%>-aupcPDMXRM_v|Jqc7)=|ydd59tgkqRI{hXFt zc+o!XceR!%Cy#2sS?`QqrzQR~sFZ%UR4z(HEe@Xn*e`=6LxZKPR#uQWOllzg3Tt%= zEtsvU0t<$J?pVqZb4(0sOTiI~ri8$zReHZ@{C z&+(eU`D}hKRP(;DnoZ}U4b6w|(s8~*IpVU-j-D-MghL^bHsl0y5U9!ad}M*J*7Ib0 zKGrey0Gw(;o*obUF3hUVKl ztY*{sc8U(JU$gnPlyT=G=G(`r%=dEWoyrPd?0mm^KVrUJ!m#kQgAw!H#A^oUd*t2F zeDlI;Hl1(3HtKvQ0bdmf1zr(E+t~}7W?BP6(-QB=$bxGXLh0)4?4A`gGsF_F^;p+) zDT0U-57Hb#tXS7oSnCDdZqXt|n)P!#Yww`?CuG|;5*$516N|K5XUUa^RYyv|p7T);=lR3)-RGOXu=s zA_R#B=5Wo;4*|SRE7UiGMu|zLrNVsEDOE)#c`eL0Nag$eu5TJ)o`{l$w0Z<-+8FI( zeGtmCATEcpG302{p*rQ`SIG1_-sdW>hTQSi#K7`ZXmAdaQhB7i<0?qfOho)0d+Z!} zsn6-3Fee^6G&VBpbRfl2PKT8Whf>^i!cmI&v#^f^ng3oIL6h919Nv3aN24${M(FEJ z-#^&;`)_x+i1)u}`F-GtCCva{-XW;HB~Db=3xyaWaq-SlOg|X;^!=b|;KFK% zEFm)WP3_-8-#8g;KjA{{x25*mHfg_KtL>9T1I{fm*lrBT5RR{z5}ijkbw9=?Z<}!z z@Gj2L9(ImWoEalS(81|bvm@Z0o+S;HVNJ8ajsCt#$ghO0Hczh9UnE!RP05w$jBhU} z6K5T5`+>;dNkYtod{zwQkCg(%n(PYt%~dbe8q4*sbcp#z8Z+AOK<#70GLf7ME*I_h znXRRCFE}zaiw@SrhdRK1p`{MYD$s#%w3WA0d;Pfi)7gW!N3Dqvt0|(nXyV3^wRmH!nt`OKDh@>sxallWI5W?=@`4CF-lX546E>7n_GN}91A4FRks=t*5CbRqp&^>r1;`nuSXoG7hqKT zNnLO&C_?;IHophiZTP+u`k$N%$1UAMaH|4@y2|>`V3p}+>YGpN#J6>av@Wl~Qt3R! zOTjRMUUot6Ky?*~UrI~p5CNX=T1OkWzavoQL8CVJe_YsaIQx)wKj%UC(qMUjmv(kz z9|{HJq7fTsCG(6lCwb^xV{TjUWU-atujPfkro(I4al=2Q9bDx$Oy4Qu=auT}aEN~| zsauWVgtkCfVak8w;i(s07L9WPZ~SH6xKWnp0DkH4o?X=&J@AaF=%hVG>Hn2`E@Rkc zBpIb@?0Y0#r34l{4cnu$_{OK~jMYp*idiC@w0W$e2($!F_ypgGOtipDQw>TQpMj1` zptYqBprvah8w?(lMBNZ9nG&w+ zd@@fJ3j5r%>oG@24t1Ss5b&j}(*a_58>qh0LV2vKG}*(Sh)yjVW}?(tDDjyItPiCT zX1gC)9uOVTKJuMm@YXLO5J-uZGe}5=(YLB3kr5AEkzGSvv2{IZ4;wT7bO6&9KyeJt zxiNC`{M-doC&(Xxu3>cF55D#Y+aury+~9cQiXf0tHDS;)-@Ec z#xr!Iq9%|8iy6;FUSTD7XK2W4S?%>YjgrJ$h|mnSrX$8;TTS5u>#=Z=Ck4~9$>hM% zJnAli=F_u-Ea^XYs+ix-xd;fq`;L>8ENi|r8uY)|RWr!dpv%1*`2m*W>;qw!dRQbg z;lH~xFwscpOpD(lI-gFpmpTW672Q(@jY6h+l8^QAouwd+r%SP+pg77!_ip5SfZ0@R zYXmpXPTD<{O;JXr>}PDTNFhi{HkbG=5*|U>(Gkvv?M|mngmnHNLe`+Ho{Yc1iTa!# zIZ+F9{YW9hogH0yaX9PBRvg)-VCtfLQ$a`mN~UldGFcmta3hjVdA1E9to=#Oc~aUO zFYAk)<|Wu^(h=E+KdnMOD*fpc4CfYj?-|?yM~0|{KTt6h>q`~8QpM4F*2l9x0O6v| zaS7pq;QgKC4a2P6Fc+%u??6ouPJOg_R!)oBowH5iZsA;-lh4s4HApcA)nt zuNe~Fz{*jrwP&)1XV(RiN{3nvfII&D4u8Vs*u~q7%m1L1Fl)MF0MB`VHF^IHY~Djj zm(;XN$n%7JR1^fDlnD_E`RS?~9WFd!T%z*_IJ@peaOW1}fX1mP?k3>k1AV8lJDebD-bf3g|)imayHOdEGBY1oQ^njTvW2R+lqCF`H(2}$q8hYWKehHk&E zfuHHZ-NsO%;e$s)A$W40*{XqHa#m%rXo1+&SS)L>JaM={NfTaG{h`cIZH^v+YIibEm0J_ zhpHD38(}Iq0s_op&nwkOe__``KKjsXLXp3D5bu<(z==<3O5B;U z)>f9@HA-bkr)hPOpp}kffFuS9M@>Fyjb@?22h(E?jLoz$KYsjO3aqP1yw2r67tl#$2@0(hy3);K3C_*?xS=zf*#`SzH?ZF&WaEv6uH9rsB+TU^}y zhYf8_1+`Eq)cFu~SEO(vCtAp2udn||$QGj3QJBaGm%lH_3It=?Soi{;h+K>hxI0Tb zGuc&`2{;R^Iwr2EKvBzN%a`(pemgr0Ax+H?&7vh85(4=3CigLPi{zbHA@>n{9qNQ1 z#y)%@Cu+FVBGt}LHUW)b!pX_x5;YsDTqV1s-3g-jJ_<?J(VHc4r4AR2V#ZAyu3)U@<} z&}zWBjy*k{8>4D6@Hf??`$yKX#p0K;IO{PG#nxd;BOAV0!e*2 zChm+^I)7(iID_I75)29(CwVf1z29<@-{63A4~on;joarzJTZ<+ZPnRQJDdXCs)xCl z8^p_$)sY_I3qku&9C{OdVRcRys7rPSorLFA({q~-0`?xn#3Sg5Qb@0prXsf}{g;XS zXJ`gX@fHk+_&8)Z0i^c1j*mzx&HuSGEL;Q&Fl}7)0dUNj2Ify}T5l;g6+A@*XhWJ- z3Z_v{DhSoc3_O`(%Wi3ag_lpsPgBYhQ}Q>PQWleeo5Y_hS(#%!hG2pcR5KWe>S~BK zJw_*xK$}f{q2g5WgcL2YH=VLo8*6gEh8F^KRApxWqeBh`SaNW<$#Y63891YO;oF}` zBOo9Eosf%Adh!X(2KW1z?6Y-1)PkeH{dLIRScU!O_nbiEKBXi&>!4q~ePk)2r|TQ2 zJc_EZ^J-u$&=vSY=vv!BM5I)V;uILdpn-RAL{pEuk-Em1#U6i8Okd+=ors!Be{uN} zO^@|z;5=rV;4xbSkIAUH9gkfNrdC)KaiL6h??Wn`PW00<@iXFvDCCgE_$Ywj&Em}p zbzesntQ5P09e}CeDq^~*-=KB;8S0<&Dgh=0&+H{qv$IZU8VmIh++gu>*@BIM!f7Tb zn)-69NuwN!ssuEADxYnBo=IbJ-$fjQj<(CiYNRyTKp|Iyxs~bdWlucF z`@gmKS?s;*Kj4r9lkbed3`ss4xamp|n5p0(&1xE8k-=u*1uQ14HmPUua5AH*p2bxE z4p@-e$VW?5U|o(1L^F761uIhkWTv;A9D?Vf9Mds=7eP`-_>acUY8`ig;(6wt#UMKY zFWf}4j+B$*3;AfrC2?pu+nnHRsHjRXm_E02_~5n?_q)Wqk;{qz)R>K&%|U{vCv^as zdL{b=*vPZkHD3~)#%E@*QTcpm!OU}@J|%xGDFt_S@{HfI7xC~Vm4Zo__sXK2A8Q-4e%);W#RYc@KjV%y6t$d!0Gw<|cu z-N=T3!!$~o&|@0yv7J|;4v7XbH1C5kBKN8gpi*Eo+{;ehK@}aHLgSidsEsDYB+s9p z7Xa@fBgC0<@PmM}XXJb?VU#pL*;FIXsMCQ46LE5b2LF<@o$|9aCfj1uO;!YHx?$<4 z=L?bZlz_kKX=^u28n%2sJH7@OxvC>E5SSxaoz2HmCxHi5vJv#50Z+yDrryp<|4qO) z0N95XabO2W5H#A(`AB*L7gdB5TaA?WrWjMBlNCFQ8^d|*v5A0DXk&d7 z3UT7{^XSl)TD3}qhELp?7Vh~5hizk2pXI~&E74mBy6Z=g|Hfh6qorKTvTztGI|&OY1L$&pNJtLDOrjTY1M43 zs0VA9I!-KxGU5=xRd_2dlw@S?4Qhequv-t65EtGbc9=wJ8oS~;*divt@L!4h&$2~m zUiNemoHu&}B?J_ZQT(}+VHGz>C+W?)M7%j(ylGe7R9?I;;zebM7+(g~Q`lI9X)ziu zXUHAhllD4Yb6$j068vJ$BnIxGmk9ec=1mt+IQ-sZj z2SHK8DJp}#phn@T8yR! zNHOx*c+aSKqPbBBwt)BN05%@Y;hw{61P{?^Jq-|%K=EuTH6Qsr1Wy6W21RnU?Qrf@^hsKGU&9Uw9uku_o^;)ru|OVeIQ zzNUz6yA~~D?u6Ly!Zu7Xrz&DUF)SRhL-1TuN2ZLBNszlo;85K2B3b?eNc|8a8Q5hx zBC#_iA{B|92jQEYjs5N|)zWM#=#EFOhvQS^`Ed&pU`&3y9Xve78xksA4JkMiXiKt@ zdx}(VRDA;pc0(j`k431EEcZu`;^d^lP2Vvx4a)^(5xMdwc2|Eq!FJkuT+fqHwAl_I6Nf;8H$YJSIGRtlGKaT z>%;QO@KZaoI{7g7+L-dCrT9c&xC<(KI+@$Q8>3E0;ZLxqkqZ&L3c!jxf)AhG&-pO3 zvt3_e%Q>FhFYRpQP{0TQmsPk%m0as7;BsK`0o=!=oU&5k2fWb93qRWWG+3ch*whVv z(3kt6C;~szGo|a)ISqgu<1*Bd6gDI1OPEeS%p!O&tjsF-x609}J#xr^7xZYPbU=!7 zpcI^_M(SZ9e@rM{F}XcqF~EWXb5BGSk`YF&eKzn>yr+Z z4Jno~)2K4+K9xq4v+Ss(qea%Z>$Sq?LRtY`{~1d9WK3DTwU?$cM0(4SyUZym0_b>PS%+ zdZ>M^#5s{9AnxMT!^H#}T?p$~I%R0?9}=s10$}*ZKNMXbQwWD=*!sX1NvzMo>%{tC zyu#@U%rYN4_MnK3T%e$n8`ft@9mNtx@C)cr+mvGj_>$Q@&Xt~NtJSlE*P}?;qm;Y_ z_v5Q%-A3ksVO%Wqmuv^Y8xS&q3)^Do7SsvIUIceymSkLo`(bN_;|*NeMmylSwfi-A zGLV|{M>z+Q5rJ+3-hO;3tnGW*bxGU#o>=UNjbpi*ffs%T24M|M?rK6MIGJ@s()hJ3 z>S`=3{L|NZrmbOjpI%N1>lg8Ghwd1d6U$Cq1+Ql7S~Al_D~5~wIoNw=6s4pTTFcn# z{3j4=&UfaU2Zi^$9P|zgRMP3Bqm)kuM z|MvkLD^^%Hp|*y+@7GBNvbS}lY!Nn?Odj7I2-FTHtAYD_RFQ4Pq&YoD>=E~Ud<8g= z$#MW6kb0S_P7EkNuZ)aN4qS`134uAXH6KpVYh=!B?CjG#FzQM+eGFp70m`MHL9fUw z2}j5U+>d zm27g;c2Dex`?R<-k$63ze`sU;x?AzlG`TzBZBgS_wlVq2_sPzQ-CF-FBtg0Y7H~mg zZt@Nc3ZK$ZVv4`A4+CqniJyO5lPSx$V0Ant{P&BaX{EX&y(UB~QgbOH?slaYS>`L* z{YOqqm;OkuT8_!Gj9p-WeX@+FlX}J6nk8CJi8A=s_v6%}eSd~yGy(q;yeqv1UuZYPgIov?nt z9vK0N)h9V5?mJb6e#OoohujrbQtjY}P>o{&$Yt#D;53~DfK2MA0z^OPD8goK)iALq z;M%{{^aA2iDN)wv5=E#Y__RMlxl8TXsjX&5hftD@)ugr9Cz67>np4+mHfYdEFl@M8 z%lRJ&fZ$mAd58+Pgz%}TZ)_|5nBqGM&c>qpxX~2MwYw#U{DI8|MU?N zXxRHd9FDKPPv{S0K4vNNwSj{jXAbv1@Dm`y+dKJ#viMcEDU0tMrW74Q5vIC#JuQdx zimVJ;>Q%7BidA)ghZBI{5RML4hrk)l?9wKPvw2()arT&ki}uv>gg8NzxkWS%-cwKt z9wZj1#z7|yF}MgtT_?wI&iiTn%DfcIQE-)xiW9KaDG?NXgEB@EPr<6|P&JGTby4cL zFhj2(pjOfGT?;HV zY&Y@3O#*yE3_||7>ad$N{1c>1c@Iw(P6q4JFNFz^9N0?G0bN(~MFOG)%!p=(hvyh% zAcI58rl5bA9c;Jw9VY@Mm#xNOQzMY5LbO|z*rAl{3 zXeU9ZC~0pKx2WmR--usqa}1^}Ng~kNQkfUcy`(OK=1yNrG|o8E?oTDrbT-*pTPOo~ zMNF5rrc_#gbp(`Sg58HNKE7kVOX}tTHA5%>w{V-7^cj8-#Z^^qYV^2QLUH!UYv}ij ztMS|9eu@aVb?*>v2Mmgg;TbAtPLf`vwxp@5z-i`JqQ2Rl#l6F&=oJ$0QgSI*k2-sX zF}o{HetwLxQ>&-b0sDoX1Al^N^XJ-SS<}OD3E<_F33+F>vaRXUS+u$O|o&A@ocT^rax4hmFy;A9=H zl=C{G?PNyPOKu|xOgRp}Lr-OS8;$3U4*-eKuB^iiDq?WV|1Z(^;5TVM;|$UFt3yOL z=cn&Q&>jVS4?3C<%! zwLtROQE=NU!%gdoYjU_ZGTAKnatBS8A>_4ZG(lhXMHfX=a7@V`p>a+ELd@68oGNGo zZTb!tG#^}C-Gr`o_Hy5|SVc0IrU!-~QcvI&t2)Lp02tK;7eqqSqZ;hdpQB)|`He{N z^yUbp@L#Voe-0l?Hx%N3++MBh&xOPOnKZo*LvZ{V8_o>&`f*Nx7+x0bm3yFw%RR?v zamMJlQyFpMMi^oONh~==2X7w5-kYmO6R*OG%I`v3PuQ^9*)MW~Ba{oibsH~6S{7LW za!43^$+$A550o-)dWIW+2D=(I9pFDmC}}su4>Kw)2)y9)CBL_b`5I++5+=w^ZuShR z0k=hz4OEx1dl4@Tin0%qRN&3lXJW5?J*`f`dmuP;g(cf^a!Owb@I>0P z6}3F@uZUH-E7))dhdI3(!}O)3i`AD*Y|h*J0zy$57~GE-!uKPsC`!y3Qk2j??9n)_ zOQqmc15!P36-tTS!K2t5Mp0(ZX`a{Stjv5toP5#w19FyiavjqK9EEzew3M?}7=c^M zlFr3PIr0y}uH*V91~iIPfL7#FEPD?&b^{5W7Ov6cG7<_$G&f2&2{6QcW|W-=hbtQA z{cz4~k^NurRY*ENNxD#oDs_6^=7KkByN^z7tykJH(qW9tKhX5pV6a8#;h%rR_3-uh zz|c{{%R1AMmp|3?SQS_ps`M}ARgCz^-bB9ed^NIhi8(2@*_*IYR~~Vjr}7jwA@P** zJMO5)UJ!nuOYW+NZrNr`5u#NWFJi>_&jz*OHYeuy5h&rNFjA-|A8d2_|(1;Q*c0`x* z5n+AmVapQQeZB+QJpm$n6Sl7^AjyG=j}_aA&E&|GJ^i#MWfK9F+&KVun#BAs`4;Wq_!ve*_0pBPD(SQw zi`gNp!e(-dYSwX1e{4;~p6eEjo&B(Fzb1$78w`8)89h55`K+9tb&P!XpY*I>_i-kFTHrr{?CKeytC`nZ^X)D`OSrqo}0`bWzm{uQ@H`}A|Q@=0Ul z{C{PHK7bP-t`cM+qKlaJbiMR5UE16FZWQ`_dp79rqym`={)yfK8|cljjm@4W8yh!V zLxtjVJKxMqBK4JN{)zOljVB>O(m!= zs}x&^3NBS?Sw&PT4oXmCb`*4Q0z9cC(s*y1TJbv+2DvvLKe=O(mvYXCefGGVjDnhJe{3*-H_{+l=76ug$Ut5_M zdE5g~1fL1~2I>Sh(6rdH*NN`8Rk$^Hn=lVJMNPmUw5lG{mI*J5_DQ@6NS4BbI5z-Al8+ID{lDANK1C1}RfqG&40&n0w0S1B%3|C@zNiXG>@Zmao z!IGtQ42@ivL!HG)!p%+dXcVD+sC$5dJl)u%p&1>|b;| zsM-gAg}$5kimLD4&|h8d;zeNwJ0Kxt`zMp2k(&g^=PDvtMQ5ddk_QId3LvG&f6Gb9 z;6)O{19EDL&MPlU@zz8ookot!v>iOE%rRgVkCz6m{iTwk*c=^k?rdOWDo3N2R;9Ws zVDU9Nzkq=kd2dytDaMOa!QZw%<_$k7`;p0)sp~V~yz4W(poR5WQb#$_Li~p3Gm+gt z0U?(DPvM8C&*0Ial(g`2%NV&$5JTC7SxvOi4rRQ!HF28OMk+O3ddJa!X&^# z=F#FHz{m}#ERzL>4adThWmmX_ZDWhNa-2`v&7QfOqdT0Wnyt61F3jExtm4Q9`>twB zM*rp29C?6Y?Li#R{Sbwvu8n$68?qwDik^zfxG{Ht=nacR_@w4sA^sb!#(lmQ+ya); z7Lfd?^AQS+Gk9lL;45~#`{CP%r|7f|_PU7D#pi?crkP$pEX=P zee4R7%OVfiOcn(fX+WPhjV$mNZp*;>uHc5xuts{rK&&<*+v3C60h*hZIZ z(&NlYI2E(SvM*4~&+0zDNj1D81%50m7q5NveAD)2Zp;va%%p)c%ayP`nh+kxRtWf2)Otg!LXcbKN`~XtpoDYZ>oAdCMDrfK!n$l*BL+{$0M}j4z zDR4Ph5}UIFun^8b`k#;>iAp5vL1e5F{@3t?LLRGqa5k$&j+k8p=PS$l(xI|sA(aqMYIWiB} z99p&iP5uZ>@K`H{;|VbF$U5d#LYifJh@5S+0V|>9FKg*uZt$w`R)zG2k`4mmSO^5m-@9BN8-I$U}aTnUq7}G74P`hhK zAz2yhuGu-G8R8uhYY^|iVHD%4K8GPoh*foVo&6_KT#Y&bgaPs-4M@gQ2u%i+icCt| zZ4rQnhW)kIx6t_LIT-lI_6B2vi22Mzqf{-W$klFQf zlrsiNr$Cej*UxQ`HXp%?fCx0{Ph5Ginhyvlig_6R&_0&T;UaDtM81dZJAky9x*t=g z!`x{G001sG9t5{>oCS7vgM|TceQ*DaJ`vz-b_Jpk?3f2t(*)HqkZWYGRQX}JV&hH{ zIN#)apO`ttcRSi3@)3SPX@vE$qTS5!cH4YJ1EzugHT>Nyme}|M4HRP} z>cT;miB<}EK6ly!^D$OG>mvqHA+%f=@3!#1(SLKEJc}t&N-M=gsZ8O)S0-u zRNYxqY`@ar?!$am3)BXk?<7Hy_p_h=7B(w-Z~_m)@z2#jp+H*unQ-0aMvgQ^88SM{{((7T$Xn>;L7^ zmKN23n+!e9YLD#%fRC6_TGS)31*?l{a(mI6M3sDEKOV9;AVk!R(0v$q9r3cwlul=z zy$^BtWI_<|Rd+nh0iFeb=f@@CQN)Ig+sZ@JA54XlZ=xc2UkIh8H0{M9a$&2J;gX zv|^rJpFD&W=@FlE965FEL&-T2CK z3U2^Dun|WTG%yu>12m%e2%?RJ&jtd77N&yeU^4;`T%iYE^&&>|zk_?1i1ETs1J@ng z_QKcXHAoL-E;{GEz)a@;`*Pw|=dju1%-b=EP^a&6sMqo=C*cKUmQ$+KS-Sghob2Mz7~&iR=_4gX`XpzCF2f2hI`_J{o{;n z{eGOU;b+_dhXhe|Yu@T2_{=aN(h-)lZ8(eyysPnRI%SsZF%$ z|MXvs$zW=0YWLgvY)`KljU76wJ1*>Zmeef+9+Dvno_8WE@Ti#yqlDSIimcsf1|@sE zXWBtza0gT1(NLe4TkABGwx`sQ0#=tn>~t8BuGs5GIj)B3fL;9*$S>~%k6rqlwYh}H zF3Glo?9Sz3cnaCHWUrs>$d}^l0(^zLVBZ>|T+$*tP)pTMLadOl16)8qhp;uXx9d1R zKp}*X7sVuEyP$@Y8%G)zG3fiS;yJhU9E*#91wWqi1_&Ha}BNzoQ?ikoWBVvz;8tCLkYaOH{ z>Mn2U}Qs@c`GgNDK6oMvM+5YpGZ^YK-Ai5GhkwZQX$H66{Ny5Q@KSAtY*>Z%i zH2eQCcP?-`Rr~*+8G~Wu5fc-_aZBkUDrL&Gp%O-pnN&!1YSINYL+ZFSGZ>Gj=prhW zN~9YVQIVlsYut*_6_xg&=*GCz{NLZTzI)Gpo|&QZJN~-I3uf6vAuJ3oP zRTAP|6QV>=NnaB_3H9#toA_`>E&6h47_O%*jlh31pKwE#JDs(DRR1J9NnExuBX(IO28vvV6do4<^awdjMR`#6u^%Fp#d_MY?n-$^@S^G5M}`--AFt=lGFY&nYL%4x-5Cb z5OS!r{23e{7|LnI&(-EHIhjS4Cu8Z5wN%`VDpYRVV9&4w)?k#C1{+$TS z9Ijt&S@|QciJ1O>IfD}al)JHKk@c1Jb3>0Fqqag5`8&8`@7$az=JEyp(#@shE}YIU zbl~DI#uAeaBR{`2iMuu{4KdC5H&tl|kg|Nntg^TJ{nFj7Ho9_o2GW{DZH&oo_H7Q@iIRNh=!PToRCMdl zc>x+_Ge;*$giKjbm0Nrb%6LlR{vEJ(1)<+JIasr3pB`3;yp`544PnHY?WKiE;cXZ9XEBKXJ zD8%}qkR;qPB$*s4WGPX^%As;r#kZ&8f+kYfsv%4V$PXc--3O);`8te{;>?ufgMYL< zthZ)!wMAH;R~!?uV5#Wt29ZV$cEOTKN1hosABz259!<;Dp=v9gE3q3WsfDu+Qw!#K z@uV_q$ugvcQV|)fsY)pPjZYAZZEj|Vbt#o;XrWL?{8KQ15Go!@tB^ZMaR%k^SQnc2 z!MYSLl()g@N4H}>m8|3Qa`Mc1Brzv-GN~_=>J2WHoH*;Vq1B)J&ifo!bikhXX@c12 zFNaD#E745*N;B5`g^%Ijb|bvMx<7-_4W4Osf@HQm`=`TnluTau&YftrjD+-HixZtY z;Y*+WiH(Z+xCRE*1B>#qimndi%;Q0vK$CzPA!}b^@EDqe&@;akw^_@kNt__OF>6JK zT5AKZtgD0+#_oH=s}&EAyE?_W;yK10)wvntkm4-qIF;Kd3iVhlXESoj4Eq%P$`%C^ z2i9Nn1J&j^nkkyl;Y3YeyqkIA%fFX>apW~+^9s4W<0zOUn5Ya( zE11Lw1yi)h2|1mm59w}7p2v(H1y3sC2;mt#eBZglTZ7jn5{t=04yB}~E>8@0tZ$Dt zE#hE~Qlaf4#48emu}70)4+nDOB%|PEM`M#NI~*Ixd5x?8|F@TU!SVCJ!rUC}(B#W? zs18IKPD{~3Cl|NQ>y)nZ z?vj2m;c$>T&e|n2M4XBoVF|yLvy3HFXKO{Yg|&4fDh4|z?u}`)yc=&t(x_kA1ys5z zdAsb(Rp)p{zV(ax0c)6?Mrxl~`l{jH=ioUs$?rch%GNq zoU`_HG111Zu*Wgk?PKsDHe8D0Y!I4xa*g9B5Zu^iZPu;>!TVx^+j!p(u87X4BnFGU zIHsxsT9^z>RoHcRwXAjZZ}NPCR7Xk4id$ieb?Hg$ic2L0Wa`oR`o&*NJ^A_|)BnWv zVQg39V7El};vO#V7)^2m191`HlhW*oJ_B%1M!5E5*?eFimAkTC&UWI z2M3l=gYA)vTcy;*i*zZ^Kl|zW+Gh{G2uo- z=oDk99b`|4Fdu@VJ}Ep?H01;w!?Yu!fE<2;pSzc#@9UuQnmqpS@wgp5+l{ywcq6=F z4x2(p&*08(QV^8W&Fp~^JlurbrLsxEB{6&mUh|9>o=w+*t{VKA6O%?<%!$ZmS*6qP z1!{8mH4Lv4(r=c}$C?;c<=jwVhN>C)NShNYtZDV$gw;9MkO>cwk-tb-^2-WYz9USk z#`}*j*|&|SWENYot7TNus*DTU$dL~=7UzI;(}O@hsY+3dESIz@^Q+vYVoMh^_Y^cz zMQ@CgaSDav_*-H<>rDQEZ@e)H4;ho%6zeBTU7S_{5%9uoU90Vv@FH-yM_dGQ4l^&? z+aB}6-d*pU%1KqGesYaPpX^beA)n=ZXFrq7$EmM_T@$0xe-2N~HD%o!Aj%h0uyo}t z8Yz4*B-Q8io3)8S{q_8m(fO$)T~d2fg2QVBFAQ#_)5v}74uY^ZRm6vVOVD_j&W&y$ z*T_(GNOm)`%VQ7bRnBa|0b8QvZIrV)^Ze2Ym?$K$w}v%UPEB#X?e`l^m5thMI&%Z1 z*V1mW;tuiHhp*InUL%s3GT6?mjB*=aqT6ou>eFc%0baUpjdIN#0XvE?NfzwZG}j1J zbdtHr(}TR9J;nxmp+0#^)&}>;rc)?cA>3nfs8=gHS+-DQN!h2YirFWn&jVa8lx8$( z!dO~EYO#5y6H(pSDZ1i?@;()tvw57^r^)9cQOp>&$+I?_m1MP#<31zK2C|}OTm{os z5gpBRU$MzNEX5|s0cIM2Lx&_qvoJSeO2IUfER)hjS*sFkvq@SgO(T%=GvC)zFW0M; zX@REs+Eap3oZu%^W2+?diUqPOlhyI0WqUeM+1iHDiE3+KYAh-DET1iGPuMFa_aU=- zN|t*Jk&lUaOL+`I4!n}u5H+2h0uaU8ShSMtqrrzkragJq_7U4BYoDoay|>+I&OX7Z zW99LbJVEc#p?LK_yHm}xW5OknT~Eq${QC&5M&Ki18XQxP}_y ztR!2G-gbga`yb@z!JlZu$>2jGtGOc@jU1vR{g*jJNq#ufE7B-TN3G2u=P+%@H^q1H z;jMCvA!14y>6PqjSW|=fKTwPx#_f}}LB8)37C~moMq+MA)};q~)aUz@kQ;i7i%>}R z4v^snW2IcPk~w$ba-4E!uHmoq#V)kj3ndJ@05xQ;mARP_RP<&4cncL^aDA@X=D^9B z$t~S;jr|Ok_kGG5&E6zEf+0yblrx{d@&wbLlkc?2BE>n|tbY+NMsNYU+CIg3J6oza z&bJ*xog%HFg(k630x{Bx7s~Awo8sF9v7gA4eq3&di3qy@OeZ#0n?*wMfPV;V|Nn1zUlfgo%s+cZeSHV+pVUe=)pQQ}t1Fme3fwUz&#A`kWd9;J zVe3d2u8&_RlW-hZWIu^( zC=@GAzT&;|d^kUSE#o-1z8Y0En|LRrpTXxpz33N2;rUNJsbiULmxV&o4&;?*2qiyl zePA!thm|d+`fTdGi(A=^7E+zFXOX^H&c(uP{cN(=Xdrtl@p~7aA`4|GUEyj;+3wJ> zRGveyi@mdJv8UpE7_&FVYO`FQdx&y&N6Q%L1qsL`_nLgZz3h?oYw^NYa4K%)?CxqB zsCeE!K1LP~nXvgz{~<(Sf4~=*_UK}d=*l>&YVZ_P1Qc~^XKQ9(mK(&*@~7^MuIG~L~jz*CurZT+?@AF$QdComHEjLR5KS# z+KJ}iATuFgrb9LzH4ZP+j1P9?P05+XFFNow&O75dKOz*mR}%W_n#XtyQn-U%s>$h9 zU)P`|T+{3M==3Q!G8UFOjgVR4Csn)gbeiB&iO8xA{-*Wj9nCS-L&CQ6a=Pa|!kx{< zJ2i-U;(C6dU&8U?MB6)&%T6zsD6ynA-vd)c3CH`Q24~96^Ia`oC>73Fh)swuX}|(y zcUKT;>R7FqF2ISw##M(XISg2XGew^kG@WiAXW@?rio4`mr=p;(LenqObC|Bc8fl9? zM~-wFwzfrGmSZyMo#y=fvFSPFMZ2Auu^cq3PyQ_&m|D1Wp9-;3X%BAQ4C$n)>@j~&W+kCwf zjv*9cbNd`o(9vIo>#pap^nG}+z7|7|w-@;VhDeaQi zJ7Z8g%ljuwL~PF+#eov0!?quE=i^}nH;a(%#-I^nL-Sb^vtRQg$$VirE8BdM3dbEm zeYI5j^QerW?)O>hF~u4Gv2Q%UQq)^ENfpZB4c+X%MsG$t&tc$K`1K*_EGH7l>3rOx z=yphVN~G%<^4V+FK3*p-(@7@18tVw`>W+`-HJux?bwBHI`x0pSzVRmdtkAEFXmfM+ znK{Qsxj6?!ILe8o9Cltkvwm)l4N@dN?4^cvcW%xxd%-kLg1dfbeFwkN?Dww@U^Zr= zN+8xZIQPvr_m2Kb_GN2WyioF@6PCP-7fL35(wy&pl|YFoG8RgP!KLDkmgiKTerFbG zCmqWC!Ft-#Vk2BN%^NoO6oJ!zu-|9K+jjqyN?AqmfeFp%71;pdl9**O|1hNQMwxhu zYm7l~k7@%ZqSr9Pde+186~X7VGk##4#e`Ad(Y%RqcI)t!L|nzV0PhX|Fsr2R!6nKWgZ;$USDh zG|`-gnHX&AoZZ%J)gGTFd$r%tYID@y1YGMF*UbBkYrAvUx>?TNuE&m{qJXRJ9J+_? z-+BFq^w=CVH#VaVu5xUZnV7!rLesqL`b^pIecgp6yTLbTy_vP4x-wWiUp1bY%_RE; zH$R5$ih8Dh$~%&tFy+bU^c4O$O~NBq{I^=58*kYHZPkezX#@5r@pkuegRp`gp;G@5U-KfjKHN!X~8H95Pb zFy^p+?;F7 zj}}a@^24fL=|~#cc~%=%w6|94PG3?jO!LmPE1tPCujjAZuiTU5?^kAjcA%IKh@`}0 z=SbuPr|~PM#L}LxVt~O-@S!-3St@a9CoV=QjR-;{vzD}v^VKbs*NlIUcZQ8Ife1`k zB!jAMt`Igxt~NOPPA(C%nj2puU=6aq`S>D#O!GvnD{#+RDt8x!ZeoM8bhZd?nGN~* z+{@-?LVBh*+AU&Lo*h#giwS24pLoB1Urh`Ab_I;o9_8!iR~phN+*`kd7o82j+P)jZ z*q(*AZsjhjwn*krP%pK@n9P~OCA$GIbs`aZn{B+Z*!16w-!iT&Zo@d8Tackf{pqr3 zR$?A-hHA9p3z;pEN|x=v){k-Hu|J1t7W89XUvu|PE0L`>7tm3K8GHn?MVV5vMTdQK zPCw>t3vb6K&3XEIW39s+M}4G6TO_up;0NpDYVc&%I8Tm3axxjydn}X&%KW~BG)|EvTb(|TnmBe_WH3R6q-8hye^iOWCH+Bo0C>xUJ zW@d37lv$jivFzM}ONw*zOsNv79+_2nbfwny541S5#a+0uh5s{LcboeembcM0vnb~? z9N29?!(O*Zf8zF+d=#X|tb3Pi%IDNN&ve@;-Udfwc>b;P@ELp^>N-dHNHDLT^9m2f z^BaFU--uDtL&|4i`lqy{%x|5ICTK=giQV)pVke60JDPxO6e>RN3}6h-nzgoL@2?R> z?|RIcZsU=)In|<%GohD>+}0Uwd@{RvK0SJxFVLwJ9BrTJIqy5qv>{!-=^X)RNQI6g zss#hN)nySAtE@TwI^S8j#2h&k%%}73!wbU+vIkO}rS++}etoDvbmZ$ z?V1x)i}!EBcSo?lV|>3|o$QFORWqZfHV0<0v+f!`NC}Z2B(uQU{TQ);+kTAd%f~2= zQcX$@P!bf}xdYd^;GQ(Cbz;U7SIHoilZR5%u!m#j0n0a5 z)NK0rFumA57EUKH;lwv>el-z6Wo=gF)}I%O$wk(vMjc0-gw8KMxqfEt!n1Lb?FzPG zA(NEcD3Dzrhq0qth$AzugFDL9yV!3t@BV8>J+b3;?ypA;_Wf2ilh53NF}JC{Q(4!} zd2l~ceSJR(_V_56xp8&!C*n0Jxy3{#HZvFJ_IN9|?|WHCI*zD_!N=ZqOhh{a$v4>d zz2Lf*=0Kr(WgaL*0O?ZLg)}-i4CU=H(imQ)w{w(Ni|>7L=7HkOeSF4`IUVSh*Y70i%(zM^1F^xA}V`DEolS^QplINHXeMpS@&z9KaSw+u7=l zaUDq}H!e3Nc2&n3GQ2}X&==_+NFP}rw2;wf$qQi8<5?f$ktbqxo0j6-b_yN6T0R7; z>o}`+n_yeKPG^t1h{QneQn7RTP7b;x<;dc(AI>qGcv< zUvbWD<~bSt&^oE43c;bCjuq3FQYYANQ|lMmLNZuEtOKl4wW%sq>!VaXv-IPuK>o6g z_de#+r(NP|Q2fOsjpk65k=r zRN|t0YJ+7=eahg$c8y zr-gbZI)$hETD>VB?K>?vv{A5QQ?qe@0@frq*vaB4!SWY|Os$Tio+Y!AuBW*a z&b+Asv(bKnEH9HPa97H3rD6uhG1 z^Q%fyT_3F45{?~&W+7| zkHKp)=Kjy}PbP`6yAi33SeIOY5m#>VCww_Mu$%cCj+9MEKX4M`9-}t6!4+|W18cB} z>&ap5MaH~=MHR9f&KN6W4WD=yXMRFUE$HKX^R9HRvJSmJa^GWUwRnj-gq;z?`6Iql zVi@l4=SieEXAqN74nqavhfny~r7UKn#=f7cO0FAw7qCxcDU-frridwR)bUCi98;rI z^Rzcv`FPRH_o;we<$%9F&Z+V;%ZADcc0=WNKl6>L&GQI5FMusF*n*1oncG9wJ!56Z zgQ=0*!(p9KpWZ3C{W)-c4NpkV(sAm(qZJv*t}PSwnO_`QRfHJGr>cwHFsUhrnwbI4 zkPpNtn*W!|!Y#DR$b(Z6&c5R1UX`_+az+(y=C^$}gR4-Fi1x9Ae0BPM+p_PDU@v3Q z)~i+Ckr=UPJ6xf{irl^*CFKoI4EESa9wzO~PmoX0yB4CVi)y*9&B5Fr1&pA?o;RN? zLa{PCj>X^yqW>brv{o(G1(ORTwN*)Zch`xOh_?`eXT{R7V6~XwWihdw0K{fUxjiBu z>Xu-STt%&0b}6n)2oqp&?ooho%@`P)EtwERvxAM22oCnManJb)D>heRjl{Si}PYlV$hJCk3GVf0$fxq0HFA`Sm= zY@TT9D`95KdSmhEZatb-pbt8bn^|Ct0Y3KL&-pjFCT_{!zE5Vfyd7*3!5Jtq@}Rb5 zTpRqkWnRleR7KBn>SBjf;rRtSZCRp0iSq}%tSZe*WyB!h1l!|5G+ zUzB-;FPy5fm}%4+b_daj{oIHdBSkpL{6h9k3uI4|L{^#4c|m5Kuzq9iFnZ8#w(tsdY2O+CsKtT5t!FpZk4r_pf2d!4caBN{_0zM`Kbe zyKfsaqBokmQv|ibrU(MrpHfqFLuHyFY2@$f=zds%oH@q}U7fX*c}^UYhYgG!=P~UL z#5(ijkgNsNAp`l98j^1@X8}8hd(!lJ$f{I1#9KO(Oc~&#Kc4JMfRA&q3ST_dE1bc{ zt}hD$f^oT3`QYVtj@5w-gCB-hVb;Ep3kIl9KGbn(_So=1_94@1n;gA!y~q96Rf9UB0oBr*H2cGw$sf=hSI^SWkD`q5LDMSTMDz*sN`%mUs*^ytz{!=oxj#e}<72*1?D>=kAEY4gub&1GHe z?u{hu51x>C3BNo&M>#|4(IUTv3X%q*Ue0U2wGUqTIiL|6uGHbs=RwNZjurF*d zCWg%XiF#_iP=8~WET@oBnaqR4t(IR={Z~|@&^0KxbIED+zAV*=4(5rg^henDV=#Td zSSw`KOFxr|L>dTiRw5c4w*z^IPpSAmXg1cn>?R_EO-Yqo#Z*Rz7DRF~(wc=7NnZ}zAEfS(VtZva#S+*3RRp*_y3F`G#$czFMOhGB5A^R zK~;s}=mE}zWbyn-tTE^l%g`{l@4me?u_|z!$+MY~!oM%CrITBo6IN+|xv86 zJHOq^R<)eQPM0ON{w1emnfkoMzrUMoh%~(1b1jVRkU0`7<}$6vuf2LP^=QP!QM_Z- z#*X0~8XC)-aC~`>r6jp~2K-ihQF1(Yu+vNLS$QrdJ^Nfn=yR#!{5Db_$~Ru%^t;`_ zSg-c~z&|lp4b$IB{>j{fERyH^_~3e(kGtYtS)*4&7H&E-F~BHMsf>C50AFDHag>*r zf2O`JGM_+Bp+*T_F(V00c!r$+!y@yD+IQbXIar)-M^1mnKAAZZKECEDFf+f#Sv;R- ztcSAKHw9Q@p8gu=k7X3Vst@&%k$>?pCMl(Jk=YKWWKDPDzQgYG?9Ul-RN6i6gDii4 za`P}R=xiQlV){|9KFz~)Z$RWFCLlkM)84Dttbiftm~qn8)|dewdUj^?(dLRG7jUg{thJJ!UrUN*SMCeMUF`>xTl$T zf`DZxq{$Ly>pn1rbmid}5(KuRDhyml};E~ERjL*pImOL|V* zLQMTu4jj$LuYhUE)EdEcV|NC|9>#JYJwZkR=Fp*5&tnq2 z4PSZOU8@DxF%ubhJ&zfaYZ%io@!v>lkYgkmtdCzmvJh|{ehf^xi;Pnvx-g%Ovtj{SDk|a)9@N)rX5&RNhg=GBZUI_HWi{L zX4TaR;s(ZFMzAvDx5R@yF26KS9_)k<&}mZOY$*})#@=}{u~1k^GRb$o9LXDapsu$m9$W~nJYw*C~6?l@C?Qk{I%f`Q)5EDUcHWW{{7#?0h6<1s_QPb^VH z4IJ#s?8~vTGLU7#C(590C^?=P+GEbfNt$ZrEf_bC`+(|~uXx3*qDqt zut4^2MB#Q-47GW9f)7+U*!TIjMJS z=EZ~Arz(A{kx#^Aj|tIu3QEJ_v(RL4H0R|Wd!3fRP%70K*4$Spoi3Hi>F0O%va8_F zZj;S!UFqzeVj+pm?k(A{CsdMMOjxoV7*3iRK0{3lpQjFV`lXc!UfA}eke2W1ubN=0 z*ykdp{ro;(or%M`NQaTECGo0HLbMp?yK!;o_KeRV7)X^DrwdE_skEA@@?Z|K?#)Yr z-VcxZEPBYfmzI{kU+i3sGGTsDhtQH}=g4xL7wORI17EfhCEyP+_}26qL!OFGzn4Ew zvwoXQKk;hQXv4FWPkTXDb#HJ^Q9enzqVn(0TmRpbe^CBT`Ag+bl|NSgP7)a-z@yv^{-5M<#)@L%c9zVB+vzP2YtYG;3jZ8 zxCh)1vOo|#0usn;P>YhZ@7CX0J~y{M+&qQ1<1gq>{=fLb`oqZYfoIyZU5@mZ>$+v& zA>3S?$M0u-*Wxbm?jY~`z@_BTQz5@2@s5UxbYG+HQnsOG#FOyj%5jfO>(5+2Oj_S7 zB>dKL%2lL!ep`lr6`q;IeG+~iybRt1?}C+JJ=g+12j76b;1_TdR5)u{R6M8!>VYPp zC1?YZKo`&*^a0m_o51bh9&kU%0zvQycoIAhUIuT1cfm@q9&7=hgKxlI@C!H!DlqQ2p$1Xg6F}@;7#x@SP4X6aOXci-X|P_5C3107`~1*62nF*5fa0ar~MMc%Xj{j5<_U4Ut$#Eku|($6n3WN7gEe%Zk3sj({gU8QzEz1~;5 zCl(NPKOa7L#cuJDp)zFj3Q}4?kZc;5K<>ys-&yvYl?(P;x!`p!W%zlkUoMb%yTjxO zS0cE9Qv3;t;IOPQE|CcK9PlK9{pb1a+9wfg^SgTz!B3RV%dUKhV3L=ekqGWD$!=^| zvZW+~siYqv5ws^QU!|^^P?kin_AcLGU21D_q{Ez_efP;6QA-Y|E{b7Lze|kIbAr_V zU}xpMVt@YF=pshI5!s`+)P5WJ;PvLrm!AuJKRk-agkiO@=63 zB24tB5tb)R{B~zV3BHYV_=Tfc!#ao+{t#ipM8Q>7n7AR)4o@@B=`KU!$C&e7W-S$8398tUOOhoaML!d>-!sV0eK6mTo{hu&kMhH{V#59-S2IS4Fi}6 zrhw_-SuhvO2aCaSum)@d1z-p0N?wngUpnmq`}n~N^|e#3Vy?h^lL@_q&M;`a>-`5lRU8Ya^Hh`LMJ9w;N8gny$P_sF#V z%=JprI-fchNccGFzN~o3>R-DI|5WvJ-~*rtL|sH$paw_;jX(>~3S0y_g3Cb)xCYz+ z(!o%0FBl6Zf+=7+coxhB^TA@U9IOEwK>^qS9B=>>fvAhgAJhPepb=;RT7io|M{qev z0oQ;VKsp!-?geAPL@)(R2hW1JU_Mw3mV-55BPaknfCCPIA`ry@Iu6tTt`fq?6Fz&; za9zYLQ_9pB1W%-mn1A_kWs6o<{GX965?Qv4HX>b0gly6OVZUtAYtUaQTb#GvFIzOZ z$uC<}-0YVvMl=bNEef8ovW2lT{^2!OXykm_!AAU8NBSn*jb1osHYx4>N=kFx)xK))=!FQn!)JDNK|qotWf4MpKJFhv zzbBLGM{jb6&?b*RUUBc{cv8-Jm?EV(QDLc>3|{Hq2)xz@9naxT} zEVe(zh`jaZX63yp>7JL}I^m?t52Vtj^{270Z`Py&dp7Kg5~U=<5-)-XNAHPt<`atT z2}f62bxD^nb%`t#bnd)SWHDNE#@V8s8SsrKi>+h^UB>gKMAvv3_@uH~{ty>>A-p2= z_7`EbEyD8BMc6aQEy6s}*nGar6k+d7uSI3F;hv;5MUh~MKxWP?ewD~pAT#BhKhLeX zFwx9Df6vc6e-qJt{$XBKR9k0a4e-1?InAt#-YXKa974UkoE2keOQplH>%~$V)9vs1aq21Rr{x!+&v%~q7$MI&Kg;W6E=N^t0?4AMl$62I&Il9aWH(6W_1=Sd z|0VB+*%R4KH%`*+Y$AQZCiAA731lCj5qs%2l5`uIAWKSud`u8)Lt$=yke9kB3y;z_ zAfINAFtX`4AMGnHTzk~&leEhgyzLT&(0bSc3k-?dvGe*a(9 ze=qq5I+w)rhmqfBs-Me|{&Jm6m>VL{7IzmL@VnY~E$$NU2zkd*{<6{(w_g>P6UP1R z=TzJSm)SC&3H$xr-<^}oc6a^%6Yfu1s}vIN=5orlQ}evL41am%5_c5OE(e6bV_+tj z4PFHc!BX%c_!xW&z69TaAHZ+mcTln0vZ#~5Dd05F44e%v0GEPf&;#@Z{lUM$ogfp8 z0y!WA9s@JMZ15^r2$q5m!N=fJ@Fn;T`~ZFfzk`ZMc_)EWz-gcvI2&95E(OV;2j~m> zgMWcLK_(alazF??24;fUz{sQZ!==#wnG8C#?{Q_&19<-*(Qox-Yffa)7O7SS-Ja!_ zLDygX*U6y6t189vB)RhK?4BnzpH}VBPd!QQ zFk7E`<@3pJJN@onc281VFT3)!YUg{|8Le8glI$jhCF@QLWVm*ANu*yQ#2Gs~r%zZd zhly@pE#G4Tsj8BVjzl1A*cvP4Ua=|8i<8Af`CF%bgYhcAn0TJZCgO`M+c4_2M_lz< zqvck;mL92IOB?H}F%@Fo#8T8)#b&h0x`-1p(>IfhU8pm3?z1d&q4IevC{EULOg3Yi z$UW)OlQ1<~(s9&m4_@tSO41}oMLN9loUdqM0?Y&FSplXhyM{{C80Gu^ZLjZE9;|$$ z^0mrWD_^PHS-G8ZYvnVQ8!OjUuBlvAIY#-&{WkxfmG>y$c+9$At9-TcmCBu!+bKWr zxE;vfr+l~aVC5T?uT{QU`AX%^%I%a}E1#*{Sh=opP35Y}G0I1#*>e1>yhnML@+973 zss9I*?^C{8d9d=0%GWAit$d|&XXSRvt(DJIZme8axu$Ye?`CmqrIS3WXQ^M`Mla$(P9QGX}8k-y-Y2z+@}xZ7>` z-v>_ZVcqku#^wur1$KiU!9nl`sMKd!RCQ1rGyu)PIp9JNB#nYz*wXb5N1@Nntq*^g z4k(5xM8ZVk5Nw3x!1xHe>8bd2L80l`u!1MW)ohp zNLhYYr?$<&|!`oHj|Hw37(L7s};VbNDya-+ci@-9l3gm;W;482j{0I($KR_i!gzBI+ zXaJgnbHIh5J?IL0f>ba7+yadJlJHl^F9&WquKY6e=D$~d3CanS?wX#2%0_~jD`i59 zR%e8fU}R@|26$Dv8kymsNC_uiMzn!oWlA7ud5C{P3Fe{l;t!Yj`OeGTOli{XRcMis zV6L@S#g&Z&a}`(eg}OoYZr&K{8LZ5`k)niXurR_Qv?jvgqxn9EzfywP@`Fe)J$iZ) z%p_O$cC0Mr-hZ@k=<(F!Nih9b`{qh8p=Tl`m?Y!NY`B$Ro@#0(m~R=~Q~RUVTM6b< zGuZd6?>q_SP7S`$FAO-{G}beISE>JVlKi#XF!+cZ8O(au;CpbBysV<)%*)(eiQED9 zXZME>u+j2NK&9Z5!v+peDZneAEE4K{H5rat=^KESh)nDX5SQB{Zg1t)$#LW?R%3b2 zN$h%(klwcn!{8c~*rjXw^H15;-ge~>2PF=#Upzd~Im4eOet|`@lsa_=N3mA-d&v!l zy7}^_KF_|-%2FsDMV4y7rN~mlQ4x3zb&^?`JtEc|vSgBddxg*2lqOX~4(A!ayJ_Dn z;`h?=M4;*9;)y`zOI+tsR-eSxc#S7)tM>TRN}j`Rjq>E?ISz)WPfsonwx&DkYuG92wqt&^=yBzP`p&S~`;) z%@fUY8j1$*Vt=ku%ZrnJ#R!whZlEVJGT9$ADx+4K{Dzgu9%Zi~uL@Cv?qk!xIOm)J z&za}HXeseV{n~L-fhJ=&WSpe~{9JUoxCP|kyk4o;lR zjMTyC*o^8ZJ@H!I^Kdb5e0*wgTW2pP>6v|GJlRcdp;@Ny$%#X3(C45c;uN+U^p}D{oR>tDL92M0tVoOUkp9XDClq&Q%_#JW_d>@@>jH zf3W4+uDnTkt#Y3766NSzEBGCrX!$4QLgk&x+m$yduT{=dUZT7}`6cC9$}^OwD(5PX zQy!^2O!+qDLCRI!@+u$Rr}eK~sJv5oyYeRGwaR(QOOzKVzoa}%d4}>--qCAEhT<1g|MRG;r+i`EFv2Tw-=%&o`~BVDM+g&%+lcQXp5OQRuEl*5 z=t$l@ft!x-9^k*0-wzU|%fJ%%8~82d$;aLOJq)+mK(75Lh`1I%xqp9{KlA(i8_)-V zClnIr3(emj|7HAl0CC%+{y*vU**q_47vlFmzgL3|U>o=vd=K`6L!cN`z7hQ(r~?{; z)4{o*E$9HcfnFdD3+zN((5nv3M03HI5gJ-}T@H%)Kybo4`4PYDi8hj6o z{CR!J{#IuH8Fv$@pRnhQ+(XsuYEq$@>;~uUF2Sx(;k!#D-s_h|#XD?wiRpL;uPePj ztE64BKWnMAV&ZLgmpD<}vUis-@$K#s6Au%}U~RsiEg=U@cWjc4MpR6BuSn zHDEDG7R5}RV>{QCBXHj8VT82W+}RoP-()lH3(Z=W(>T|M;3dX&|7JV*)}Q;1mJDTk z_p{#l@%56ZyBHV~m2qGmiT-oWo3b-fZ?+L*Cxt$oClkYVYwV9Xsh}kBh9vGwy0w?I z)W^?_?Lf)YMx8LP)haX_uVYzmfh5*Pi+r(mdS0B_Y-OL2AFUf3 zxu@F6QAXZVc%~$U6ScwNWp0@$!Wxw;b>PguS!$?;mw4xr#JjL#$ba{2HaKgT7y5mJjQndca=yoX(5F5xx0&EO-?rZa?j!o&DjA1}9>=!O zcMIsG%B}aY_r{61uqc6XzS$pQ?7!S?p8lH(w(sISD9y}%F7yP0qYIZxPx9ZUT3z;y zxyS4q^U3Ej{nPUjeJ2CiePsrq3;V{Dd%J-}(Z&UBFUOTAnv^L=a*)kO){cBB`2+DV^LvZCXV~I=zLobAQvf4aH{dy;IcoLh1HAgcjj5n*zz*?ZM1vG=6?KMpLt%SaP+~W z@(t+Jo1-+6mmgeNq0G|{jOp$A7!H15|9lR{^0Il*pVt0Zs(!tF)k4WHq&Q!R!y4!9 z>x(!kBFIiz%dwr!|TN`d6$<#(xg`ClTw>Le+`53Xk1V$4%`K?<5TcdM3#btGk zt>$|e-;Q!C#gA20iE^?5G=snI6eeJy07=VdnQk()F6^jh3r6jK=SVhrAUp_yTl z$dzJzEw6jok$2V9$oYe#_T~jEaS*Z@EF6sLm~mRL3%jA3b5!r}dZRTrYj5=D@2`RX z{#O3mtsp649}e;Jp7LDJi$N0GmFKLD*sgwC*v{roEB1jLab<6(`h0Wryy;{z+Vu{8 zF}M8YMcb<2gy#8jZSCb+%t^Z|Iz3G<6H9H@PmuyPe$!WnmA#;; z-XJs1o6_4?qD+4h$1joDL3|CnY>haZB-=gC7>fJ*`GROR&E@Uy?~1?~bctq6$Cc=uw`jJa!JQ&1uYM zGSZk`zD82MXIuG_|81nd=sA9`&pfX`U-Vz+_|l%?B_P@6X8WpTwCDBb)1K~6`%*6f zN&Dk-xqH{rzOm;OHcz;{`lcueJLogIRk)w>rhfK%t#Y3766FQTFDcJbo}oNdIahg{ z@<`=j%C{*GQtqeRTlos*PRdKR+j1>Xeo1+j@(ksv%G)!d&3$cBUaOp^yhM3{@=MCI zlxHYURnAo&r#w=5nDTAPgOvLz_g20_xs&q6$~z0}eQj6Xq`X!+PkD**0_B&KXDQE6 zo~oRyJWhF}@-XGwlm{vIQ|_&Ng>qh+E#DI51AKL^Qo7-0pI6?5Q1a7H?7q=%HC>+Q_B+=1<}x{t_Y zZUsyL4}r(QGhhyQ9lQi)t|?61o}<6+C9TtxBvQs1?>OFHYw`x^cIAuQOT*KR(-1%&fo zyT5m?K zyF2c}-^2UCAy5n|4`)se)Bz2_>EK+@7IXmJKrfI627+6`5HJFa0TaMO;BoK_m;+u1 zZ-e*2YOn!p17Cyh!G3TE6obkm$RE@J4Z-Q)T+kMD0Np?@kOl^VTfq=80*nC@z(e41 z@C=v(UI%Z3_rYqg0c-msi=wh(|a7tzF9M#wa|;9`3>%iA)ds4hu0G*^0j0 zsm5fGHOiBc@&vtF~|Hm14tIS_T zDsrbfBDctG?hLW#V479t&yRC0UCac;EknGz4LIFQxIp%!G6$3I%#F4-FV7-gaG5*T z+PqBV()VSj{XiR3Rle`!M3b0n$vJn}rR5>u7Z zd+6H5<14T6HzzYmF|=7&f$#BB3$yb#g-rAOq!8aX^)-r1JTK~ERGLh8uzx-Ky*Y>?t&UGUSiV4PQlb_e_*WKyXSeP+}Dd=mSpA_`zwZ3=p z5znjCqV(Mr%{;zuQTk;AA{M3h^hSM z%2kzPl#i^}{FU3?YRxxVE1#*{Sh=opP35Y}G0I2S9zdSJ&&qq0cPW3Syjgjj@(Sg5 zl;2REr~I7q6Uv?4@+!AhK2y1|a$V(`%2kzPl#g(xi7Bu09_3xipDAxvUZ=c5`5omq zl;!SGlHgRpl7vBUfnt%6pV|DSxKCS$Umu=XEw-JLNajeI9(vl%Auo4fq>z z8+i+|!Pv3bS}XVax4jlOKOR%}+F96IgXZ8Ia3N?9x`Lh{6$}8kfV;qOFdDQS%^p`{ z!qb%WSNq)D`tav_o|a=T`Ck=LCV#k*>gTfG&;9)wVSbCi_;J{wD{h8o`L4zNJ#d7) zWLK`;$G4PFGVfkj{$SOxOIR`3i;*FdjSzrh%uyi{Le|2rL7uKt9+Cz5=_!kKiEq15`rNsSav`2B0}O2V4l+ zgRY<_NCgAHE#NLN9E=9z!GmBLcpAJ2UIRY)jPpS_oz=79_@7yD-0`qqA}eLVu@CS6 zBNiN;?P}9w@2(It+ZfVy6NR3q- z;VOdd4OVyB7~ep)oQs5d;?ZAM7%j+IGNxbeWIk!tzo&6&b$TYASqHG514RC%!GBjt z$M`xOG}iZiSIK_-$-W0BLa~{wk1J36X-?i;ACsGiYQlMkMY8UZ?ifZNPbEAmOeL(3 zGA`@hj!~I?4|Z%3liBM(%)5Pf-f}B1*Rf+-o4Tuw&d3p6GV5mRclV2F$3!c+mKeS| zq;~6EX_d;XG?u!L<5DzG^HtI^NlRWG{CSB(gQtD-*MypmLgW zFXe8^9h4_rYc)z^lt(BJQNC4qpmLgWFXe8^9hBQDpR0Vjazo`h$^qrd%EkR`ISwiB zSN>l4p=I{ICMYvDHP3^2S;Nd%8@^Q;J6Cg^rrb-Jy;qET2j#ZP=PIAB+)%lWazMGV zaxq8vNqab?JmgZ%UwNQ%nsP7YZps~$+bW-{e7bT&Z!W`sj{059v+D$|0KGv!FbLcRhJle_9LNPz!3;19yaX12B_I#11)IQjuoD!5 zpTJ=dJ(YF?P6nrfe}FT0}@EC5SD9#{)D zf$d-?Cfk8lI7Gre{V9o(K4 z92Lje?k5i(Y}E(peWphjZyd~0)F*|jj?!JxhFXZFt@WLW4eS_Es^z^qTs4m! zfX6$7jc*`(ng}u*ob}&}AhX`7C4$Tb=amOVkXi4s)65&L&h_*9w^hg}x8DsJP9`S}k9_6cHk?NB|8`HS1gA<}6v z#?&w+Sb@`hi-*?0mOagR?pkRRiQYres@pr&_XOmTRGsUqOF18UJ?W-7TlV_G1!-wT zqRbjaO)>I6?xBy!O0}zUvn5BoR1Vs;$~?JCzVYRz&sR#()bH+PSKXgoIZLC-ZcY_9 zJF_%;`Xn#Ak9Ya9^IAtB`#GAkwvc(3_*+PkheH$EaN$m4zJ$mE0RR1<_{4jWHtVNW0ZuL_ePZA z=alQVw%0Y4t18DRA34wZ|E#=6d6)8M%A1wfDX&m|NBIrqdCJczKcW1v@+9S$H*CH~ z7HIy;dz5!6f2Q2HN3^-Gy2>?`t18DRA3*|_diYs+kMb_%&y+VSuTx&3{EqS)%JY<; zQ+`7EVdY864=A7MmRGs1a!uu`$}!4E=Ii|{?@`{R{F(A*<#oy{l;2T)LwTO^bIMOB zKdfA}mCY|k`N+ANzw#dCUCN&+Z&qHXyh8aM;4Uy6j0WSugJ2qHFdf-sM(MQw?Q?VM z!(XP?@fVy+8CLqjN|?G&EQ{Lrq{SZnE&PYi-Srm^l!0vATr}tRW4>!~mw4^T>nhOn zDfU!V$nQu@)-aLoPpG?;t*gdMi-?~daUGe)e{wyNwDu?@-rRD^byV|QREB>wo|(jb z8h#PH1{Q&3U=_#*TftXgH~0}81b=`^Pos+gwLt^W9Gn9#1nogr&=aJB0pJ#J7Z?sk zgYn=&FbzBnUIed!MPM0N1@ggG@DAD|KvOLb5iGyu)PIp9Lj9&`mgK`Iyk zZUJ|J;b1fv4;}>5z|-JG@ETYImVs3O`RXq@FMi6)e(9=|gqN(;qLF z5@DhD?pb~dy;qN}727(s(0l(529F2qir#!D?_cIhE%e^}-Go#Ny~k`wwa}})EX+bL z{bJvsNK6CT4)=`${>n|9so_uHVIBU>0v<#U?PJf@P!BdRC>eZYFG*&ym zt7Kp0n6J8zXQ*bkp{?86KOQv_%j!SEZXnD&&4_W5O^mM5vT_~kaavg=$yXxRfLlDd&E#H_v%yQ1F!|EoGK2fRE-;YTwpToXL zhn5}u?@r}ZSs65;Ky@VSO&hGt%Ai$=G1N}U@V&(R>n&PK8|CYo+v`5c-Icp2Cn>j4ZmHZvxt?+@<#^=^%14{o z^nX#_tNe}f=gM1@*DH5<(Z)+sZll~%xruT;<(oQLv#jfs`zUu;?xLKe+(x;jauelx z%C(f^l`AM8?P&A)MR~9CH_D$YZ&6;ayi)o0+4jC}Qoc^Pk8*eAF3L&DZIoLoH&L#q zTuV7#xq|Z17qtGB_bPv*{JHWL@H?pZ66XehQ^0AU z88{nU04@c|pakkw8Tf#@W`O|XK6uzE3 zT>QcHoxW>vmv~Q+_dHOQd#;%sViiA#mB-zV2lrmjfzXUCU<`%?%gG9U%?8+Q>)) zt3>CK?>w{LjPZ@GB;Q$ZgBkzNvwm;(GgnX9tJy!9kVaRM?@X{E*|k7YIlRC~19x*J zLxy>0*pZuAJ}~4`zma)|JMHkoc>UA!^42VH7STV z!jFq=#18Q(&J%~UFoEntB3_8J^FPkOTgdZmv3rYU9T)jxtdVxiLY~jk!YX}cl6R{C zXS4|y$R1$jp07W)a*wRHptfHS;$ovtDQUPhoeqvYmTpVFHmU%N);7ns{3iQP&eq_Pn^| zkDHkFI+!FmEBIN+0<$ufyFYSAFS2-T+;4>?b8F4QycYVss)l);S;6;W?!U+_uOv8-%~QNv z`NZ?mg*N|K?^|f|);?d}FO>u>k+iNlj-*xFU%cDB*iwe0Kl&0*3GQOSiHswLe{gitvU!mMdc}Zv`n87|8FN6!JR~t29ic`zPuyWgA^aJPALe9QVky{>=4Tq;(o~ zE|BoM$|=`H>VKdN|32!sA3g+%LFKp6Nr5_`AvhhJ3)+GXpd07~(!fA)D;NSsfH7bK zcnCZWo&j^f>)>thK3EMlfNkJw@IBZM4uN7&c`^BeI-nsq9h?i=f)1b?=mpZiKyWJ< z0!Dx_U;=muJPw`#bHMB1ZSX!=4K{#n;A`+b*bfeYVo(|3Apq)tze=Cd>civeQ|9A+ zLMiBfXUBs%u||S&q(n$ix7YIPQ~K{J(Wjh9{Sz2pmbIEp&K9Z!*5N9@1a{uHCT*3# zYV|RGDuLy^U}P?lz~s}u>NGn>^Cq7EHOLMn?Bu;jN2Qm~=m}$i^0zs(n+wGGkFcN2 z$;>HEC8SIvAO*5#{&gCdlwVw#q^yGgYZgU&$7rnT;f~zx4F;TFk&VQTsk#)0{U!3O zB+`RH8kZNQTS=t7(WQ9ic-}D@%{6!f?bVX1~?I4B}EWFt_K>0r9yOjqk->7`8^3}>$ zDtA_Hr`%fkOy$PP>w@;aRw%!t{D$&8<>!>2P<~i>lJWz}_bK14JXrZg zJCQ~Hg0#GFbYB{N?fOqp_Xk&CcLJUUFM`*=BCrgs0{LJo_zLU>KZ1kcQS#dPe(AJ- z_PM$B;pQoP`EncQOY-lhzy1F1@AvgSTz1|4JeK&8*pHiwsr-&29rs#T;_oBxBVZ=K zUsK5MNVMY~Bi-csa&?!ott%s*ggID_ds*q7$gMKj)$MH<#gmhx+{i zS6Yd^5~vLtfac&Fa3N?9x`Lh{6$}8kfV;qOFdB>p4}xjnY49R=4J-o7z$%arwt}y~ zZtx>G2>t+-J|KTk8#DmT!8zbU&>nOJJwYlM0B!+yf#F~@7!Mu<)4)g5kct}@C3wMm{6#Z|~0NY0xGg*0#7;YIGe zf#1WGhcH$TSHaWv?n!Q!RuwL|ljw20hQ|+AY?`-0-K0>9Q`BkRjER>)wVm?qE}EBg z+Nz$+z>)h6>!Y|;x1qQLYnRC4aKLtb@~#c*R3BY;;nx=q;lkx;Nr*n6PP#I3Q z#`)6wCysBK*UXCU_&DX0acDSg3GuR?_z|JkX)Clkc;ggM;ksw5tbcYi754rx`!W0~ zW+SB*qBhp`H2i9<)XEg?bV(=!9~p=&2~jXgbZO&~OF}*Hfp?d<=lhqU8m9__k2z7e zfyVLS0UkX>)X()r3y2&N8fD8V9+2b`-EKfZOmB5dN9=jKyFd^aSsQ}?GRkrKKWY*67f;c48! z`mJlioI&F@4s%j1YkB&1e^Pd|d0PClZll;O9&2&C=f!4U;v+qH|F<=t=%F2js}6i% zgh>A;s`X@lIl9%r`v!Nl^J{iB<9Gk;fv=liz=dGaQuj`@Mig;~8?Ylw$KtXjPr%gSLE7YUie7WL-Q-*x>|AnU4{*KxN z58{aHOMT*B4YtAqX%a3#=_Z~|ClY}_{hoK+6>(kmsZ%R6=>ENOF}+>Q`}Z8@yO4*{ zt8Lu!$QS01(K$5OBxzrUM^s~sk(coV(zVRQ{K;ux&Ysv+hC|F!G13homzAt%F7=5` zSCd1`Qg(=0DwZo%QR`HTB)Dgtrv%#}n_AsW3AV%wW=ivVV+ls~hH+=5wk_a~KC_Of z-4!`MAB3ELB+mxUgJI)P8;B^rWMk<>x=fFx&j@e+6spccw8jxg%%4UdchQGY=X(Bn zI7K~hlbT*H&|kg59q6rArfH=)VvGy*4kV-dpDsN_!?2c>2rBicuPi83))xB2N1>fj zG~VF*A-T6C#t@=j;L7gxm5>K4s;0y73{zScgUuC+1@={drGq9a3V?tT`U30>B$QAY zz1)Bo5}DXb-*7$<@g@xPC?R&7r1Lwh5L_#W!#We`CYlZux>b}tgvE%xS{b`nHkD!T zQ&@FqpAy8uX0A|F?mp*;Llj;G0g))az$@-t)b@ssD?!-FxhQoSp4v@G+O#AwDFWHL zQ>zjW;U&FT3E>b(7m)Li!A5`b}dc%s<8<4_D|5DnhvYT*SwF)obude*UU z;FuUviXmyMShVI?bk1HavpQFsos97qz5mvdqjI%^_;9ayHg{eW`iP#nmrDJ6QV`qNus`_3 zAqA6MHKkw@if!hjK6&)2XmoaFRQix6ibMEh3Ft4%pGt#xkZ8r6+M`*ZXa3Y?u0RVC z5rHJgKoWjcTIMk=tE!^GduR?&GSWvQ# zX_-}&*~se?$3YWA@S^%dys4ikYcmtngT3-kHd7XCO5db};PFcOnk;P?T_#)P%;bP3#7GckXHv^Z9?E{c3l=`9}BajCR=9UA99znEK)K=05VX>vC!quuAI3 zVtWg-6uVW@>|XVytFBg2KSrx`DKtRLvOqW*MM8hTic+)Yy7kO8;mqaKl`>z~Gmquq zx*w^_o4ttidg?ROi-@;NG8faQ__n*V3+2duV|O}qB+6-aqz*;ShG?2Alan;)w2j+h z15Y$)Qb#Z1)%s|W%;kF4nmYQ@9ivh|9*Gl{Oe&duiJmFby&O$v*i)^t z;{Lb&sRibI7#n}LKaJezY(`5SKKD^ts883e^tH za{31OdCMNVKRsrZVz-K;KZSp*t5s4Vv6Y_qw#8Zc)4AK@R9D#meLv>*cmUc4sSURru-oH@ zre;ZXw#Ug+b+yMUklA*7yk>!@)gE)LsQ;_>h{p|Wc6;>t9r>2I-sl+0!p${l|0PfI zmP68}Z}m4a78*>wK+3YcNhU>j{z#{V(psfCk8)4CaI70D2`y&*4QdqQr7SGOfWcFD zQtd7Uk*B8;v2ow~4$yw5sDh?IpRb3R_Hv29I+3uWo_U%C@SI;A$oP5O37tiFh|mS3%tF+(uM9{K)s(i>8$s9s&_B+9h=Ac+L^OX zLn$?88Z`EFw4zvEPZ~0l6^krM7=B3>PE`Ue{f(M z*el?r3(S9Khfv38m#BFE8q^=_NTE`E%cZ1?YAz);=fx&Y0kX)eJ}+5v4C4|e_;=&J zzGyeKFs+zDy0NxOpu}AO>=SQ(&+=hQ;_M}#A~d+qf0H)Eqj8dAw@cSoArvls6J}!i z3jaQ}$R{p4a|FwU6d~3>6^d3g7tIM4s6KTBP3}xkfr~Un{Q5aBEZM8kry84Wtm{`2 zj1(Q9%S1LbAzdfbtm=v-8|KrDHFq)3Sj%wzpv1ic(nbp?Ef5~A>$JT0t~=W&_8&Gl zLkae7?sDaCph{tK*A*XFjKqgTyf{QfyTszqnWzt1IzEK&H>+CTJ&9^{koW=W;c^RV z1@7~+pni>yIZLRafJWQo`B8H z5Kn%0SKzO>qktDF)uJ??cs3g}+vjhONX&2mp2@y+{uy9Tc)#Noo1Z=tjl_dlf>9-O z1>jj}$GSN6P{6QKFQn9;fd+c0EAp#FIC}JvrQD)==w?|!TQLeDR+hUd%Q9p!FdQF) z;Vqa`0K==TQn}1C&oD^hkyl1Lif=)%asi8w#oV|Svh@JYDp|}!>W;CVqPEHGNAb!!u`N9PY@DjwD3$1>0t7TZNHap+Z zYO+b7yArQsWu#P;E&{)R(c7Q0c;&shp{Q&nBrwy8S2$srIQ6TQa2_ShS|GeY)~f8O zr+|4nFb5u8^-K$Z(DWoWrL&l$SP zOndq{N=y9$n4dP&9_CP))u_8p;KdRHoenlS?`u?jnbk~7;Kg0f6RF^TbJC)~lSm8V zo&OPu1T1;gLxYtGukm>~K0(4R`^3b}EHjeyta34y-<9AMv<5b{lt@I2wOg?mH3U(q z+k%B-UCP3u>|p?I5Z+0rj~<(7MupP;AA@BJa57&_lc`) zIGg66-Yj^;04xhY(DpP4$!p0{*oYpuX2wLwX8__%K5?+xqRT{v#X{&5SC?SPeoyPt z(E^UD%C}*8Ojw*sEVN-=0a)+24a~0E#FP$U#|!<7p|muDaH$7+uo8M0gB8RswOACh zGR$$V(RFHiQ6)bwfyAWGgYvVPu2W-+Pxupugpo@WdPX0KIPJE$W^Pe9o9GiZG~te#xUC9 zHXGJYvk4ZHX@VqE&_|T3-4^#c;7w*xN4X+Rh)Fl_Fe5va$*Ri>YqIJg2ZZZlF)BH3 zQRhxzq-`MB4kU>8b7}#6+5zypQAQOhr%z0@0VYrt(OmPn`J~9Pn(N7FHo2D>AgKFX zXXoEBOEy=ImEX}^gB|(rMt-y_2#xj4|5z2$kY5XwTJi}3g``%w7?05nGAJLsg@+-L zl4WeExCOCL1TKW+HbpFrM~jdeYs$|qr0OOj!IhMbl?b26w@YnKSnHHpG~!n(Mnq>) zD3u|O@hc%CB6wvC4IB*FUoLiGbh9yJ%1R7a>aM1-Z>#v5#E`2+7!q_~cno(*Net&u zIvuIdE?*xbx^SrzY+UmAl`$M4(IRAr@+%=D2JkEQ!X7e|5?sTt+;cDGSMJlT=oN#` ze2jzEpfeL6k>bV}9#=rn(FTE30!%rcwMOK~%F027l?GJZ7)%z6Yh`6=y!YwYh!0#` zfQ|S)KqF&f6DVec&+T4b*jG1Hn!$`)Uo+T)s&Hzq$dxjfap_9Lao|z{^#R`oF08IN zaCrlhO4c;vkW2kHlKTUqI+Vhnl=x(yHk+59!prg!XsDCO&l-1|oJWVn#xb@rjpgC|v;s-B@-jtu%EX_6MdC2E>2Zuj)^^ zJX)1RiMBeIakKvu*wk!y?qqX~lK z-U5|gsVwnNe&sgp^#PAQLD>6Zh~c0WIF1qibxU_MI(xNWBtj>?9*e7BXsq*zh7QD* z>?XY1o1%K0P? z$?;_;5`fcYv;IcKhz(Cz^p*$}b+^p8zT`-SWvH)d+EVL8(LX}05&Nea~_?1OSOMYe1r!b1q0zylo zNhGfWzfw_-IT_Hd6Tfm%Of$Bv;wgz{9?`=fd*x2x$BH)LhiUbxBNl%1W>~}u@hju^ z7{4-p591Z;6xf(t7_~>e)L)SGyY9@~vuoh*ttwUIXC7 zngIWU8_A{k*BBuB(@z#%CR+d_UmMC)0K10hgpB?D{EpkrS%;%RNgRGxQs^ZPBHj|8 z8bNbO1Bq3WI|4wgnmlHb-D2+#Bh;jtJlIC++v%uUteSiPMa06n$N^`(2?v6yz76LE zf|F`>02;q|xK}l1Fv;>(X9HvMV0s^7!C)6jF66dy45qK?CN+B!6g1DmA1!KLfdUOt z)P`S~%aZw(xvU|-5+dTvG$1FZg=PuY9mR6739&#?ll7>Hq6a8OO1XJh z?k!&{TP%*WZNP4CeE&>Ip#3Bp--oFA>QW%@L4sJ~zZ|d|@juY!9V+e2N{bw=xQfIg zMjKFOgHFdpVGMJS*swTk4DskM~u&XD^ zq3|G9Dwt;BawN`LEQ%2e?wO8~@yO$T39U2QqPC`2{#%`xd~61<0~)M#@~E-a3I-u% zFj4d+8SKPcVrtUO!t6?kw^1ufaFVYgqC~nZYP(FZyZ2N z#*s7Z zvTSBbwTGqN|zs-*YqO9_oy&qqO;v;>=rf*PI_Vgn^IE6 zUU;2*7Xg^F*8=hCIYD6K(X=Re@%U#hxhpef-ho4~g|EQhaoihm@IzNBzIlJ59O$2Y ze_|(Md4Hlih->aoutnKP>`#zInYgs~ZY(larhu|qsaom%S!wENFFL31hLmazqKE)q zqusPJ$Q*Gph4vZx!b$}Dkk~}u7f8Uiz_+l|gB*jQr5>UzwBIu1VoFK&B$Teue;sB& zU9fU4fo8)Z&*_F>0Kav2*jr3_jrffUG5C#M#kFV2?BKMn z$4pMEvHv%tvMr|34*rtY9i9v?=~qp5_IKh}>lQ8;ji)*-+2y}Po4JK3R^33EH2|K% z%G&(SDH~~nq$3_UAig3QKUxvl&5C5+E~|%R*i2I+$vI*DUH}r!wh|>^Jgo#TBpwLC z)(nMtP@8b*7*gmu{f0x;^d6Gor}0jEN;m|bru#Wz?$YA>;h4m5rjksyF(<3%bk6C& zmd>q_u*4|Lk7YU;8TdAT>M@u9Jay`NHkMm2e*E?b#8gEaO($7FS;Y_7dbbmlBEdWE zXaQjrEg%fV)#}e? zgF(N#w>gCN4%qyL3o-yKTriM|F1yg!YaC8tp_}n*IEtjyx#dVYTbX*W3KpcP5ALKX zS!fluq_hy_KlffGr9gJMS9$yanRx;->pG+I%FDd-cW3@Fp6Tu5eoY98u#D+r#9(ZJ zy)R@$5+Wgxq%0~Q3$~`vj?U0Bgp$Caq%?W{x-|)$*SE94nH~BYf+4^!g?Q@6Q^r6m z2|#={o)kRFCbr`>lF<_S6aW!)0@OU20F9D>AeFY}Zy;bU|3+CDIEIpnB?Hm6H_<+@ zT697^Sx=cYmLRp))4=I4x3R26&qqyYJn~Ti`YrU!?_`^vP10*K?$VGzFM`sAKiL_&GE&6qw6d1 zn_i>@Q&XS~a7?5lUS&}{K%l58EvcycWKmS9x1i4(+<|*J@SznjS{o?GiQ?1v4Kz7X zLQhz~M;4*AjIZDVyr-Y=->enyuBJOyg7~KXciKNyE1{r3Kr2xXoDOsU^XF;qs4r2| zsjK0Rm8Q|5iRo3cG(TL=sJx1Px#G(d>WPq?fr~ZPj#5L9BgY%)Dp7wECw3JrJwO~$VhDj^(M`AJ}JAth9R5MAd+da{?A_#@dky%aK3=*Azr{2BqH=Ue1(qt$AXQ*z(N zfhH%tI51esBWCl@GfTsnrKl(3!kN2Z=}V{TkuAO0eG%vYGiRt>?a0viny-&UD=vVn z9DWh4HU)YZ5XIhCNR=^|>(qFv0@tPruU0ou;eT&*y8Q8=IM{5aeqKz@*;i^he%!5G}Ev7KguPHJ|by-_~rxY5kvZ=mgrd` zW<<@1c0O^>TgLbu_|nG5-_opjKQo%4U{SPR6J24&1I45G<{%C=#E4&>iMp=xKu=w#;UQbj2k@Yz*|4&? z5a(`~(32!w*?$37S-Y*%?(|I)TFX|F809U(oIi&KgrV4Kt*9^Kz_e;(vZmp#PsT&s zcZU3(#p~WC|3nmtc+e=@8f7w)ebEVtGAUH-@y)1;>>*~bdeS(H)$8Fkl1_#k1w29( zC-A^QL#NJV`Nq2Po+s2Knm#cf2SH%&ekbO!6>q@?tboLWu6M?7w15Q0*xsT|`*~oF zG%JFV5krMT;smjcOx%M*4sb|U&KM4r%OZ&|(cXBZA3 z&;+QWS^hJixBm(VAKBA*PSOx+%%s+N%O$@LM?#v(7h&nt?2wjVaj}%S83;hI{9=ur zsvsE3tb+)FUpF8a-AGJ%lq{p_mKH}2P&=n+RYn6!EnW$|KydY?gohMO+es!JRn#Xa zBE&L_onMNo0+F|7TCM>(64!Bam+_)=0iBB$?JpW|#8;c@ZSMkVzTIo7W1S z+)1tJ4oI1nW(1*uC^_oi1bCZ7Cx&-3LU`1sF*&qN2`xl!=(`u>EsQ1F+$j(&r0j#a zM=S4O2qoDng_0JcDs?IX*4?>`y0GB%4lIg*MUl8~91mMkYtTc41v)3S6dt4t;6XT6 zJdQoi5P39+Lrti3s=rw})9rUkr}VW-|Nh~a(y5?Yr4ved&zizK^cV|_4-fxFa^qe3 zScOMqBjMJcaLee?zCn*TCHOCdNYzAqxN|9RCiqZ--o^)<2ZK7tQ=n+Vb)uq-5ka>y zNYaSM5fEnL;!eIA1Tv^bt!t3Wm-n1(K9aB4e}#Mlx?YLyLHYRgJFdg0@~e`*6o_?X zfVj&lc>@TOjMsKar9<*pn43sr9n#=C)*-_SDWgO%tW(3Ozh+EqnWtWC&VFBi6tiD2 zBc($_yqAI6t6Rat>h`D@EHDM;Y!`C@?Y3Xcb-j2Y(~MOS36|9wC3t{nC+BOChU!W5 z(5(nD8&7;4;D(js>{yrh=^2(C&yA!>Yv4v241K^O%Brgm_5Ja>pV23YTHU$GNteoL z-FRANQ0O@`29PbWuW%=m(N)>!-~UM;mV5x(Y9?G!WK zzwFQa`i329Y>RYXnp-J6` zI-XPC`VW+eNH3(4(8jl&WI&r33+-b{cmD4|dyP^Zh4xkxw@I>(X=5I!w7f z#kd-y7f+zj4G1-cxxVw5RTH1y1Xfjor)Xr@As%d68I?T{{F|J&%<5KcAER!C4rR>8 zJu>^p^C&w~zG9_ZWTymcM8ywxfm5^gi$i$Q9Gn7a4t^+(CdP|5(h!zt&B6bQIrvu0 z7y$H6%C-JJ;&TS{HeM}0KY}GjgU_Gm$2wzR$+HdH`3J-dwp7_(Q=ad4s9wRgiy+uBPP+ z|0PoOg({FY#VIAHSM%r3moWFoLVHOcAhTVDn_ai&-ms_ zn+%s0mtH@Rq;B%4#U2DsIHI0B?Z0MD-1YSXm#HUz^ItlrkNf)m?m$cRD9w2Hd`%j_fCoJ7nO4vLI;L` zezDC;IoV8UU|ZeT-$kuX@L#1?C;B^{vq!(%gtsQn2cj{3`Xw12#UioMs~?obx5(zB z9l98ub(jowA=K>L{?>V)TBr#VHK?odo^NAm%{{R@`QdbcWJry!=3SF1;3#}9Z-8zC zvhMHCs67r8XpGtbgFtNNJ;)f%MTZw}j=D`TZgeDlIq<;VVksVBt^nFC94f@8wqqQZ%wRdz%NIIo0Hnf(k|>FX2ZvKcbJV;%FKgZ@|z6-)fwar+D zKgU9UE-&+4dbR_Z}UilOl^<)!&%e?t*P1SfQ zZ4BYGD1#B?!jgJ2&fht-&3`4dTmNOWFn@{M7>NHv8w0t#=ysijqa4UZ2OH0pHlEnA zVjRWcr98qX*Bq|t7@0Y|YGIvS_VE|ykZqn{(Kvuf`2wcAekU4Jo1K+Oiz1gc?BDt zoA+0uCCT1k6vhjOc6hf1qj+W^P&SUzV#n0}R^0Dw>|_0{gpWEP03`7rM`7k62_III zRKfU1<|I8Rf`2I~203C`bCC1on}b}>nj8Die{`0Oefa+x=K?I+V^M=V2&p7_G2>OQ z0c;Il@IhyRCr?@8+7Gnh^-Yp0LO4WJ#7G`{P~ztrhocjn)Ph(hmIX#Vqp9O64cbeJ=y5?)?L@4!wY zgMqv$4$-QpWws;^z$OaSBvGg$Vg3e!>GD4&J6ezW0W3!(BMA2Qe<$w3MkXQt=P2S8 zC*Rygt_E5u4g@p-2Hr2R&P}`RCqkp+oV|Qz+J@FBf|rD;Xpsr=L?zo6OO?A#UN!v3 zXH006M6iZhmJopy?o`IGTJQ{Ye9Vg)+b7-!_h8^zdbkrYuwSmfoNdA z@WeZWS7etYfmdSZj&?@=IEhxPr>ki)nW}{d8*L|`v(|60ZUr zn7s^@#$#5Q$@3PsFZo3FQ(W-t(q@lK1>xP%d9*N&YNIYh?F^TL+8wNlFbVn*zM$KB zh&-!B+*X=%w@3r7Y*V|kFVMOb$Ud#3+m)VK8Nl2=G8MJVh+t!l?R>Jz!KTvmC(<8b z#K2hI8Cy@h|2KaKnkGD zx6ql0VUZg4kQY!OhZSa?* znD+v^Nl(9t-bVzveR@&4Y?-?rIIp4^1!Nc*??FZ_Q)n5<>VXD5;{8n-W1f%XWJmg< za0JNt1J)$74qzn@;l}8H4mo_FoT&1H$uUaMPb*o#s-!)5_<%cd`ze4vrzl^-AYQXU zTw{O;0z{4SVAW>EzXBkcd&%W{dzQWAhyS-6uvr{4>q2_lrq)5ML`nI{0|TnbY`HfP9<7ROwvWBpO&Bn?zuPUEOc=Jl=YG1Moxlxbe*})Bw+& z;*DQC`)$umR*Wui4mq|ba2kk#sIm07pI*A?nezElGIcxZ~& zRC|Jk)8npuC0IzLnlle=kz2yGz&DP7PDFj^O^nbR1BtwO@Ipl^Yn@A=7*LALYRETN zab~$oJa(-b z1JsIWU~q|-4^sEp@j8hCC}>LX9?X|{@S24fqru2_hESBQfj*Hqi5s=v1z4wIuv!t@ z;syIa0fi-=66}tb{O$oI)EO_?;>}YpKxGAkkYU?}2+{^8ktwr6SGF|4nudh0^-ruA zh_hh=O`SnS2jVKQNF3*Hm3J`+leftAygRS(#l?ok2~fn477PNbywyKZE7%H@wS~0y z2$N>|T}b2r3Ui_PyQVh^eWE-u4{r#WMSB_Jz3ID@S<~>Ae^AMXhev2U-n9lgd+kP< z&9b2hYz>Dz1bS8buHc60^Pd5H7X^4v6jh-~0&QzfzvR(GIwc}p8wlStx$$J2sOQSqf#SYwkwjNY|ZlS3)zvyRgtkpjMR5 zBe~L-`A02_(!upnrO#1~yLSB6aMpfU9i9&jKU%pp`Zxs#Aq#)*s7AL67YI-GAD|8ya>06cHC77+)$A3kd(c~p_K}jZAR?vC?aV>@g zO!#QNL%R2VvhInnH38PYl_2S3kPg_dkz6!po|d_Qjcr4SQKv4?nB>(m7bj#ctw_+} zNA(lLa5|2648DnI5+@S0EQ(j?d%#Q!CMD1!Zd9i(U@P_o;5zhZ=Jg6Rta5-4Cd0`Mt?BrQ)>ZLuWXe>y4cH^fnG7f9>P<~|B5D3 zqZYvBX~$i$CZK%y^W@Ev9m!*X%?) zOc{9(Vs!2+ynaC9#gvia5tfk$n;nZ%f7oUWh+*zwGtP{G5LANXS25$ve13-`4&E~$ zag^Y4ejmc`WcysF{t{pP%8yB`|jfzs@>)3}jF-9WG*%a5T%^cTGSfH&$bfsQ!FTh}RG+>dvRvYW<{V<{}N zkR*+<_GcO?2FMhJCs%Tc-w1C2=`4fa;9wkm_U1+AqR4RPqKH$@P~BM0?D;n}8RU!- zq?H4=oYkjZS@Z^~qU{cOX+|6XK)%^!Zr!hbSoVp#Y;h*#3Y=wyO603_uQ9gV#}MBl27 zR|Uch9^Azpl1Lyv!fWIbfU+yK$mH=Lru{}&Zf6+fx#QwJ z^^*Btef(>He_pS*VZ(-v8Z}BtNT7(s#xh?1HnBhGRY^`ZLz*Z}toP(3J6Tiv)%kXw z^W*>fd$Td~5cGA;5^HElD3>z@L&Bho$C)q!LY> zbnd~fY7fEs^;r{EYq?7LD@vx}=?8R2T6f(S`3WI3n7#G>%IJx`>L;!fU%7eZzbPB| z*kk0oGK=(1JW+HSolyyXgo?;n4Xk+JThtuN3C&OU07aUfHf(V;T5+L4fyDeJ*t3Gp zz_DV)yNsNc1f@WV*z}_5Qy=%Fe?DQ7HUv8$`vFAOwj@-Jcj6g!P>NgY-8tO5D|XMR z5S=wdXdpNcfWGr4V)BDlIr1q8pod`f%ray25S|`(|A425cgx2ecz^^IR0-C%Nmgg) zMhj90*#MhRDj*dm)N0L+=iAnpD!m@%LJJ}`%kh@2MCZ$)z6B-9m22^|uQ zQ;-zr@!<<@B2;rS`|nQ~w~B}HfOl!!J8pIA9==Wk2luR(3%9)KC;dxk1Y2z@*^yW9 zKI7E)=n=}S-M~)?K8Igz^HtA)G5rlyf!j}TBxB9Bfl(C1nsko1b?WbG(&M3@8k+Pm zpzRY+Us6Mpu4+dbEYZZ!r=d>gDory>EoFLtZDm>#2Kw}-tTP}y5ltf%dI+h|Pac6z z&8-eaT5E{lGzy+X!Q90VtX>a~V_I&^EX5@xNm{AW7d~NbOryfRJ<%>=`&-!Ff(-yV z==7GPbrbf&Pp_mO;;BwcbWKXh6J&45GxDXm=8PN}HJa2HMVhJy-BJH+k7$(1>qFF* zaPeUUY6f`1G0*v7tvRfLS9`)Yo7x`dL*5Mkf%%%wOv6&?$S$W;I=XMToJ}Z-%2#iN`zXtF}tjJxziu5m>2Vl`6T?Z%3&^ZAMCzZLIy~{bw%mW z{7abMfdkr!I)ovYdGa~q6fv6;dt`>TBp6r2vp25ezRR zTGJi~$3HJKLDef0ew4ryopPi&x1ANG03TqtS!Y(v*1Y1g`p4j(^b2B)5ouC8CAfy_ zzM0BbPhF(UN}`IdRXg|KF{w2kGfq8AM4F`{p+99t1r2Ndc520?O6XezNr1EvCq7!U z5@MA~j_gAW)(Oi*Q5j}vXr1UdxYyteQR*r2js+A9(^jR$nvvG@X&2H$GsbMF7;m&JGV7g{(R7yKfy8vCq7r--arqm##r)@! z=G~_iYug{dRF|enk0D;pT8OSFi;kr@gR08alZR~GJMs#YSnkE@W}s}$Oo-Ez5UJ~Q z_)4G(2T9{nB=dr?i{6z|+}OYhTi(XSlN{%m?z8a90J@u&gM}BDMJNk~JVhxL_SMrdK>wRz*wl!P$@> z`IEg3ln|LP!T#5`0%XNX?0Tf51b;=aI=O9zJ}yO?a`9D@Nss*gRg>z5Er8+Dt_v3w z;svg*JH>F!GO*y)60cdWAE9~iEoc_8d;XEA-1$?Cn~`8m`X0In83l=3U&X9Z z+OED|gh{1!`_f{hH0q!POHg#`@i0rP?pz<~4HV|}U+xcTuLgkz>#(xus%TN`!bzN)}LSYiuhk!=ub6@RB`&O@|T&NW`awb=n!S8EniLYkdXv zmzK5IdhuUXivm>tUT3MlY|r!oXQRRZZ#=Vfu2w)?j1@aW97;UJL8#NTzOfcKN*u^) zriE6Tdb}jG6ghyiD_pRg^1}C4W-jUN%|I{~b*N92U^eA)4Glj674&s{7x%{PnJ4*_ z3A&eXlw9an84aQ>F`!9X*o5F@5sg=yrLrDtX01-0%geiS#lV-2MCJ8sZ0vQ%N-1fQ zaHLYjMlCa04tK3;uD8pT{mf)J)}i}WwWI4B1FdqgnYQL$hha%W3!)aUvkf&%1+F=_ zJKS-pdf^Q#@GEeJg3GdJ{P)eVfC=xVUnPR~wL2BpT3h2yM|f(T4|p zz8VBI0~08)Z;G~~NF;ZF{RdhWW(Q?lfTFLce2xH1_)Fq(q;%?JMYgSP_OQ=o39CFY4Lb ztEOSGYt+b9ZoZ$>iz#1Xj%bW|4(WEdn8S-T!D?*8ahV`PoQ5r`Ds2Zaf&JsN)foE& zxTf#)uxMvo8`AzJDwvlOBgmoMl%f?Ci6kPxQ~0L3Dj|(x_#)FWp>1$xXpMkijTua)7rQLUF?%^*XqmYC_FPtgl%4M7d;X~(NxFj~`;0M@a7y7TIrkm1Qd3QoebetEJ3RH_5ZeK#6e2B^&2E8XooQ4ol zx3sn($>l31m&s2vDyg09@yi^%!hD-7%XVw68c)~zVW4c z=^Us8F90SolURD^3Uo9~qyH2ZUh(?RtGR2HQP-TFY(N`I(8i_w0Y3p8838PPxTAX7 zsb8?*(^-qxaPsj$4%{Ik6Q6-jwL?pTpDzW8y$I-@ri6x~ys>e-7tgg!!Y|kIxkVVJ zLD17yiT|z7zG0U_1ljcT&8sv58jSOM#0eA8j7WZsAOq$ zfU8aQ0V&!sxnkiH<%_m~@klwML9;a6+pEbF{V<~W5Q@2a2}e@{Vpw!bm5OJ4Hxr%q zzbQ3noKKjID`gqiHoz5}z9<&~vVJxBeaSoLXsdiHQnpnf395Jt>zADUa033|koGYDf9*rzYBrEvPA-*90?x`u@Hc5wr|!JqI3$ z8IEuZMb4a2iC9osf_0=}zWi_9A_bl;yhhSkS-aVnE%Lr53E;iMzS=0yLWhPOj7#6W z=)C!8kQJ@ro_3M)7r?7ehR*}Ndhd=WzHGIv-PUYzO{;YzSg1vp0#yyWl0Y&#E`x5W z$`+fTobZU_pQY8;vkEDHMg}o9^^R zQ4Hh3QA00>?8w4#*%+Rd_vEb&x-PUM6+%uxOJ@Pks3+NBaO^l85d)Vdk&Cvk41$L&xEIdR9yZ9!<5KG&|cfs6==8)zsq>q?|NXL+% zqZDQ}o8KJeovprWu;z}wPxU>|N!R@o-7aU%PA_oQEU8wRtiL(RJ4^jC?c%KZH60dP zzo*TjWc`-EVpFk3{r*6E?n$@m*B>OTkL}Dc7eL$LE3Qi)jIr^St-U%#tql%CYqx;$ zf!*5Gm^eCVBJgdu_UUC#JeeN1INIAdED?faMzA`n7M_9wrZNjof3#oW8q8}$B8v>S zl!@WwlM=!!v=P-VEW6*kaJr>Ng z1{eXv_AiWniQA%)jP~tL40kB+H(U5x5NIv_9vi}J8v@2ZhEU*y(8z|+P1^w|$lji^ zi@(5~9@vt|5F|2&ctrXLY6vCR0g&kXj^i#@Bn2Ph?Mj%8V>G~`rQ^`i4-W4_r(7Z8 zzu$!gLlgW*9}xJRj~U?o188Sug|umSgX7+@;yR%iCSMhHq5%q~vxl)%?U)e_df99; zM8lM}BsTgAD;n~__F5%MPVLTY)z0pf`<}+$r|qfp(^3;OlEi`QJ^>x_#vOYRPFt@p zwLJ?M$5QyqUxq4KUHnM^lX8p&$;%e7dGFu6(KQW!+it=>9G<`8ITCDxe{Q$C9{-cO zZSuWdz4-WetmxG2pXS|lW#Z=)vqu9zp8Vl5#2v%LNZ`~H zR_-qU)jjEcD1S%vn?ZzV84zva%MqpD@-$+^CJ+1trsFIf%mnBI;~aLiP9NVK51KC} zny1}}qioV{!cjJ+8JfByF5CuPT>Nz$<-^R2a+;XP=h^ACDId7el+^F*SpucmKPZ+u z;Eqwrt8S!v&A}5LSEMfFToi+Sp65`(QWDIsE+m zB&srU&St|Ut)7J`M$hB#Nsqp=Jq|(h?GmfDyebAi>&HpclM@f~a&N7S4Vg06+pcrY z%f5ZICm>A`NP#7O7qh7}v5933O{i!PyUDKG{fMSvU0yXz%jL9`s}3}^4N7iZZF?uS z-$!yGIHG%yYpMyr$HpnJpDEjCH@ zs&Au9#otx*M3cGP=*RZI*e^TWe2e?@{NcKV`J*bw$sZlo+58d4I9&&SJc0c>C*?kw z8^a&py2trX|F?D)Unk31?(EPIsDu7f`YA-Xny+|$2K{#bl- zY%MFbKgb{7{oSg+bqczJKaN2eAel9`C%LYf{PALT-Tbl00`}3+jjmVlmqkxB+5da~ zXq(IYk%Wic$Lg)M`Qv_^j#CGJEW?VFlRs9^iQ$irp10^zCe{{6{%8_$@W(4wivKZx z45ZS;6O+!uAD1J#Hh=W(S0{h0zcIF!rQtuwA0I8U>R%Us?0KRt{+I@tT$lWqYytZY zy?HbK9;D~3|3CO6V>t6iXFP2F`0gE>KL$bQ)xjU1)S%omvt#(<)#ohwl!<2v90u5F zFchYxKh{%JE5-kqKRQxr;_kp%_@g1BYx76DK6Ua(C7cwTyS@A z)n~2x*To-eppDd)A0r`?>*9~$7O;B5HoCq=SJv_OE#Cj%%a75wGk^H-u=(Sow{8Bo z973-S{y48BmU81~#_&gIp+%oEF_FN5KQ3~5Fy3RO_#g9!mr4_TCY*&oBCG1+k9e3v z%TsP*^p7jC4CmyJxiky?Bm5CsVAa1a{#Y=rF8;UyGPy4PNV9--xD9rc`1=>Sb3B^t zf5IQeZRZVQ_0tEWemeV3=8wsEXgf{)^wqbBKdxi_v>}9^%^xwV6@M8MyIL_g7{eoX z&9`WT^K=O$bdkpr9UiQ`tQ6(A?}t41=vEXBi?CxL$vzsUK_mr&Vkez7$DW&L7%+9glK z@XEDMTXZTDml8M{Z!U81N;50PIeF#J&u7-HAYS?TAt$dm<}=SDI+j;xKJyM1xNKgr zYPlZ!i%xmcW5yrklWXT$^{-2w^n0uppMZOQf?Z`@@9m^vmPoBbRmCYkDH9ZC!ALp88GHUvV z#+}Ai4Yj)DN$bhA_yqE#7=5oUc~YpG}7k^pwM3enlKKb+Vq~m?eA1Qd)@}%Bt#2-?g+z%mm7J2d{7QdanY~_>~ z9x0k*(P*bw{SV@iGVy*d2amjDr8p;#{CRoOk4h8M@|-;4kS84w9m^vmPkO;6&gPLA zd9wV@*qUy6><{wEhOkA0y5vdegj#$8c``AhZh11!0v189F2Ub}_}g*spXZbRUY_{= z%KVanhpnG{ww(Ay%9HL8hBm)gJ#BT5*q-*pqcOa)aJEIKGBK0DL7ogAyN>4ta9&m72Ul@}ya+lUJ--mZrzna`EIp$R`VDS@o|=o-BW)7N0<# z42F!ZOFtQC0c$>Hqw5!R?Irm81@HfbJb{OjmgUvl9bB$yuAcA(b@?09?MjdQfX1O6 zhFtg{iBFfUhQIzue+oADuw@qQ7M*_Mo6v5P{$h4gwQGUa6I><*uss zWq8DC&74J5cUNX*VIKlZ{EPp_EH@dCVWMTFb$EOzgM7@c$`&cfPG@x^K44X9%S?8U4 znOJd$$oY)Vs(C=eE$dmQ!}E4o3DW85P9m8^_vVU^ zmlDw%aI^C^X?NNgV50MCjtfP@jBL)xBys4&r)Xmchi<@de_`e^ZICCjjGAbtm_<-P z^KU+tZcWEvWog&8dsn9W>IG(PhajD2|xw)9Lx_FExj$l8pWt8GlSORQ|*n6@I-$fnFZ3hc(A_7?v&8ujStwZ)hT`?Vgs6VE_=X9YJHk-n}MA*DGdGHrSe@nvi zFZi2=Kkxm}N$~eG{x*yySpqA4?9ST%XsmesQRK~YWn(WiA3xFEkS$t*R%8mR>tJ`Yinz)O zxxwWhH{&45vKiPvztQDynggw*JmQcldRD$jb%R_`fbxCA#B;Y9LL|@}QP@yFUY~>x z?G?&)CbNolKJk{9998nMA^%xyf?+6O**C<@frgf_B1@qOWGs{eVH8}*0>O?%(PWW} zH6+7Jv)VO`Tr`DvV}yZ?zb!x@8K98JB`{ep7_8v;z}72{+$^ft(N2gdA?9oc+SCfH zFYZDi4wDYrLx(Ib7ze%{rsW#viH8@G6=Ud=8m)q>D<~XfSJuWEtH!j;av#Vmyobt$5JsWEXaGEQpWKH-|`y8cM^DxmG^Rih|8)=x;#C zH&pmcMFdvSpyM2!!ZofIj%t5CxXs@}YhtrP4_BZ*o&T^McSgYOBo`;fHNg?RRvEuc zH;W&N;^+S$Wm6U)Lt1EFzJm5iVzqenWP+A349Cwjl$*hU43T`#8&Qp|_q4sa+ONWc z@AO}lSxt~#d13~B)AuT~(4*wWz1#tqVU;NM+->Er&egsWTkxG;EibT3|4OlGL7ZFOE!eeZu#5W)|3>Oz^;TJNqqs@>#1HIH+XirNAXxKs$FL zL;cJZA(sW6Z{aE7Uswvbe0lk>+RN7Extut+c4{(Y>sFDA`@{_!%R5|rlt(H~RL4a@ z1g+s{DwZ}bFR#n$(BZH@W130v6MWe0X=KM8ghb0AAc z?2~XDyBa&Eni%uVst`qlXSWsbKyIk9d4P6nJ_2$4T|@J#xbFXi)Zi^ryOC~2bz~#G zxhSTQR{V<^=@vwzk;wCpQi_*maNjmskAk_~X3Jo+vPy6$68j>3@k@?ZKDy#Ol}_d` zTIQ`=s4O~{sIdnimp7<}7KJ-E@;;-QVMw;|ZB!Sl(7H@X($`Q9TNUBmH*e;6L^ zfAQqv=82Dss}~X3^nCxlLs<77)YWEJ7Baqms~t$dx2vY#jWn*_qP|K+hR~HvYmxq?ZhRsYKW^ zjT&it+pls{V6FP9l{Y&EFS19}j)q698>Yp};Uyd>R7GPYcsC{!s({1D6tEXw{1@bi z5yCNuocEZ?;9%)^1E)K1j5^WhHe^EZ3Y<^}Tm5SB3cVy0Mb6hfv%{I|A&Y~RXczdJ z@>%xBdnda6E%F{dAI!iunVs|Kuy#I04g$m{aV13N7ixCLEF%^$*bodh~Ig^ueA$J$1V$oK*B{-0@9reNs4D))Tay?0=D>mUz_u9#8tz^%3emIgr)=EM@nU1VmBrwFsuNti_71TGl$o_~LsU zQ_#%y1h?$!7zwd^vPr;E#WM?uNzssoNG-79K*fJ7keqX-9v>pz+#zLjE8UEA`1N3L zqyv7Crwg5>OavdK_n3|EOX!q(8|v)>wuHHkvkd9j3sBCrENFaMX^6tF-HI zNMq9&pCdZEAD%kK`Hc1bck2CNu71JA?4SdYmYnxB)neUYXt%=~JueUYM=xx!AN)XP zKGp`8Kh0a;UrQ_If(ECEuU|&S5rsZX5k#LI)b4@nhk=%BuX5-)36soLqRv@5leFm(315A8P_fQz4Y zxELU4fpqqG)>p~)wnmqyMG84{nBYCfVVKI=`sbWE7$O5M3*D4iqtKtBl1`q+D(NkF zkn8ggNm3vLAx>y!%Y$5)M>X+c2cFLjQ}`0_&YPza>KT?rrRj`9qJ3+E7ZMmL3in!xJT_Y>JuZ`CB+ReFUp3o1}E%f3dOWesJC zH)l!X;5_G{`V8>ougga!%$klNGnoX>S?zK;j@JLtZ#F+z9*wP18B5q8eVBE)pY`UIC!iJ8lq!%%|JyUPc;BDle9vzoVXN2vT z&k!vw{6V|?9bzP)&^lo*E=wXIP1B`1%Dfz9W)rZV#v4PEA(YxWfi*RN4Z2!Z{OPx) zuOe%N$0wN8<`KHk; zy=j}RmF9|B`OBgxM!eJ)n!17mDUmu`8wBsQTye+8U}=$=MFfRAXrQ^nI6d1c4c-P5 z$@wws`yzq_mE$5lqV2(VW0<+EmBH?#4(#1lv=i&gCDs;4?t8?nqqN8sdB31&!~%XV5=wfL95AhZlK)wKmG5 z^)e4aDx+X|ylZF^-uZaf_b9M;l6qjeD$?lAl3C;-oGpGi1kW+^oL4%*ljJX~VyPR2 z=yPyNnER*frDFanc6EBtnCoHiFUmSbj-_{i_lmn?EUwBGU*nu)@ESrhbB%l-Ok0Ng zv|wLSKwJm1Y)7pj=47*!JB6hQ{a-Nu=11RdeY$*})Tr~Pe=cAebKp^uq=IP?`X&#~-;}h%SSleEqov&>&MQ$QA8#?FE4r$_=m^$MS zFHHUFa$O3MOlNdKx=q$d%Iy$s&xf*VNUkvtn-#J*?R=DuCUh`*Uvq^iafs3G2O!83 z=-U2dak&Amr~_?PL}&p+AF(AjJYv0Qf+%)%!wPnx*mV)N${WxBg3&3QxlX)=3-I{9 z`hU=ilKKg>v69R})YhdZ&en=L6|039LE~_B?|@C=%vE&s1@j;KWb^qBS`$M*YXGl# zsTq6khi3c*tGjyU>psyP3-?fU6V9d?f1xE6uk4G*<{1SwFl4_ zpy?2AzF>tz(E6BB?d62 zZn>iTpfz!uND5Nj2N~PyQA*7vJk!a9RG@B`(a6Y?G3NJb(Anm9a>G>}eyh*l4UY()4dR zv;kF|?{AZ>F>a#zkYf_q_yMz(w9O@<#Xy8O1&1R^tZ?1cMC6w``M~d;-Z$S?X$fNe z{x?~KVwA!WeN=VaN{nARxhjN(FFr(rRxc>9IE4M_D17XpB78c)?65ctiW0JGFr^Yj z=r^Gt z9A*x-CUW8qVrDK>nYkA^Z~-u-8Yl~ne1sr%12u~4?Da?GN1gnIE3W`evAUox_qX+L z!Tn8V=DKfCPOLgyU<55K;r53V zQL}WIAlNm#5H&O4Y^n&NEy{^R^4KSR55MolFY?P1wRCQAEcq}0fGCYV1j)T_p1g*SU?pN8io|M5#lz*6Q^LN^EJl{6IPRaFq`1~TUl#=RALwX*kpsFu=i zdsxp$!VuPW=RrqIJ)XaTuyJvpnT$88Jym%e-m__?a3EfMx~B=W;g0;O6E(zJW5H2a z?|ufH2a!xci*G3bYeQp`{fRP)N6^L5pVSSVIryGv0RgFiPM?A&HqPW({LoM+_4dCp z&~Kl%fev7xXh8{-a*5U^&?Gb1OTqPwVB%at2%MWEy5SOBV%?qJLQ!O1()OnF8I0qb zVabsN8La7Wf?{8eec-hWOT#ea4J%TC4 zi%1f=3_?uTnKdFUc$kmdDmOxs<`XcBZvt6D3eIhonDP&h@#EY;-7VM56&=akcJnrC{NbF*86+i zYmVl|A`9`L8Fuhi1F&R2p8nBVj>eHE#(4AfTVWuPQHVD}XAkm^Uh@~i2jb>rwq z3h{~bHl{qjQr*CbaK;%R=sJCfxwk+i#Hy&A?JvE@M9)g=;f_gZBRoAQ6OU2>(7JYC zLu!i5_*XmQ|JL_3kqQ(2ds8JaP4#!TZM=?7t2sX?PkZSH6JcUi#E+K zz=EgM3>R1+4A)gV>dajxcG~})-mLY)SeiQwC-7}ywrPg0B^4c75d99`;5PaGI+Ugx z=5ZfWEEF(zy;#HC6n_inY;;{Y7w@qiv$0>M*R1^{|5>$iw9WiEeCi<%i!x7TIYDL} zu0T7{rvp2Cx1{yqXU_+@jG1TUXp17e;0o)nB%@OQ{lY69L{s!7@BZ|MA~_L0@?gFe zpiG5hQu_@A2WUoC4O=knVh{ZEY^D_^`ZSjsVk5Uxta4;sF0%q?5sm{?5BE~fBu}iT zp1BB@BVLpUg`N+_y*a~ign@ddwYIZWp?aXcTG+T#6}FMINhxCA6PTUmc(hjGTh|}& zlY;T|LE^LoElfwOo#5+d18HPGG}(j0PvKNU{Px`-2Nz;10UF>lEwEFHE*-_BnK&ZS z0q@v%!(PkKvF>3xKG7Ms2w+l5hDuY{;Lx%aq>YVO8lJj59C#hmYbE$Iq@JF+6uT4a z)xs34xUcaI%Mp2R{{}MgS!uhG;2n3Q6b~r?x&4#L*rrS2|KaXhz?&-4cG8A6&_F5_ ziGY9tQmiOa1>EJ=$m)uaP`nfhX`tblT~ttXQE|l;Z@Z{~sGtqS zwjk1S5kXi5VRdS|Sg_InmHh8FbI!?0+H$G4U3nhTxY5Sk#Z0wdBM5yuqpllPY5Q8Srs; z_w&R@%8kDzeC$*Y0*&EgNskadM$XmZ<3W)^`1p2#*!dUY$c~>C{}K3@jh|uoC`CTt zW3`+<0qGZl4`aVy6(6H6J5PLc8}eJi$D8T_pfP+n5o|@FAFIOf@jH=1_$V(B_;`C2 z$H(d_fsa-A8HSISkPrA+ETRU zXxoAJBkwQQixk4gKXF!}n?tX)93P7-1wJhJ8HSIA$On8(m(v4lE({-KeSTGZw7m2@ z@o{kAZwVhWaD~Bv1f0^w@X^0Z2p^6xd~_5kgpa@E3w)G*!0|C1!cv0Edi)H-$6d$= zeAwmmWk|me`mrkMSH(wV$MeKT(RIHie2l}Lt!aEDK&-6nFJ)o)IMs=#5I*k1ji1vG z+#m4M{%@In;Aa><(vT1M=qslOKDsb`6!!jA@v+5np7>ai{9D3DzxHRtN9`pcd?e1( z?k}H-6vD^YhXpV6V4MKQ?B_f;p2Gx+3>NZeFz^c3?EO66vBsjw!lYPEyqXA=VJZ`;b#~=zRu1_CLUKGN|sxW-~ zPNWb%%4Z6E^lAwX{6}o{X96D<{0zg#OUMU&ESA#)Mv^?9KmU|<`Bm}JyUlsxL)ZJa zgpbFdsNVGbr;X2b~R-X9`Ndm7dS;*coaVWl`Q(a_#)c#n7H@GY!G(XUQtjnQY_=NJd$| zZZuvAP)pWYNpXI@#(%vMpCJYzPv?uEKn7=W6Y*mUOMgHUu_z#<21~YppH+c2Pe0 zj-J^_@v{F2QaOa#+XSPC{)0eE4a89tz2_{lEFK$ZW|KBNluR}}ZP-IQNx=!>M_l#L zVusqgG{+De;4US>n^|G$nhU%T_CQtymlEGloL7XQaQg?bXOo4Si2)xLK$IVHGjTo@ z|9%bW=fEatLJviAHZX@YXVEmJF?zW%-O!l%U6onWO3xNejz^<}F9veQaeLlhL{tEH zVX%`M2KYo^*;BMG5r(C4tqM(hL(?nl$5%s=rxhs+6TD}pLh6`JwxTi6mifbE5i9RG zNJ&MkyruYNXVRfp0b7`WOhIl^7@mX2Si8}85*S6yIJd7eM5FMpJpzA(sSQ+(gzh*3 z1aRMl1tFCTuZSfp6f&l9%`p>REcIN4Pt1#smHZ#M+n>T$3@PK2%gTNLy<)K;D{I_@ z7+INkOr~z_pwv&WS3JKL_XF^`?T=_yxJj_a8UKc%%Bn!D4S~-R&qL^}-aRciFh6CT-nu5`lg2B>#{e(UZSK^yGpq2=as{ zG*D*SQu-gqf>cA)ZnhZw(-NTI8K1JLmq!Ai(wZ%*$W4XQ0K3 z{zG?K*c5yO%IXUt!w)t5?rZ7SBRX>dYye;?Kmn?Fi`;`^U5Eo!b@}rK!xMT3^b-{A z?uVe=T_J`{R-{TXiFaU%aH9m1?ML`%{o`_8X*T`DzEPQZ7|Jx+VwF? zlQ@D|CK^N9R9|1MJMlnbuHEaNaKTm`RxqAqGo5cH~7f z5Eb!Od?WCQAcItr5@axYoCq*jI@CZJO1a`QeJi0jgOC1>2p-}Lx~woJcpyRNyi5_x z$C?*9Q8=`?4!*&)xc1`Do8%y4r!>?cmZQ!XU$E18kDIr5&~U4m7QRw3W3nl0@2OlXYyo%ed$nq61Z9q>Z$y;P52DF*ig9 zrh^U$!%ZV13m^jq5kA@2ZT+$K*>DTr?lF?B^EXm4P<;?CKP1m<`04X)z-PGoWwENJ zoJK0hh5qWWFp3E`sB}uT{e>e{>Ibnm6nVBup#RPkd_#l{>TmJU%0b5KZB;c;eq zChXxK+F4Ha@RL`6pqq&QP&UF4=~b(4oLA;mC*qN2KM@A)`(T5zu?HwPOZ+`Qr}V%9 z3jUcUQ)C$I7e_QEtRvOxLw31MEAC@ohl&p@Z|9~dq2^roLASHUyOzu>r7`jT%GeWr zsQR3yy@|VYSdv|jgdzEd5F0ignetCYnLXKPx0Ks0xk%bB_Mjan5nmmo)yLH}%_C}j zd~1TbfB&^O6^zEjk{YC)d2Rs#*+}0JG*RSccU(o!hR~ix&*%$F$1}3t&={%RZdHal zILqSm;p`e@C3NOUGbN=NUnc8IXKOxG6_XGXI#3nk+en$PF$>oi@~9riJHfTo7ZF7* z3(kX**@he$W_*u?`Yz3YoqY%uBQnD=NcS71ER%OBJq8w`Tx0OU<{aT5;l9C1c{9*W zW&^!NydSWf;kI}OCp1jO8n&JhV%8tmB`GSmVBbbV@1(=?^-%?(5WUB&=8YDd(OHF zG{{4Ll}RF97*TP@D$yQl zF4^}{p&8^?W)3BthAo8gp7oUGjb z1TQ~gS$$;6YW5t(0%?l}oKrFbxD>SAKAuE)yY%R%x{zocQNq+v!( zpqJZhTgzs)%8<6Q5fiZ%E5g^?I84bcd=ulkdk+#d;S*`)ug)|fZlq4iAJHGCkzY-}^SI}CZyP=b^Q`6te~6_OF#=wvmeMi7>~4c4f_h-XnMPo>R?O(& z7;MHG;Ciu%&o8IL%UBZ~E3;v7MkV?T^R50F31O$tT}Y)oJVUVme70c|KYdEG4Rwe^ z3k#yg`}%baPEWK2*LP5ZGLoAXiI0?gXVA27Ft6YzYNG{hl=#F1uf^zP*jZL0K^90f z7i@xqD;({~sRkGm@?kDNkq&dzQCkJwPVzAvMCD%v)$ndC!Y}^H)s7YoUun89YhDEc zn8&EEl!a>97VV)@g$0hpH!7>=0G`ai)-D?i>9>;MUI88o>kwAd9-9=;J1EV~-ybCL zrovgx{E3(hy@xPC7Z-EE6*$_U^Q;ON%F0XVoKu2jBx3b8I%kw#BMpMvm~8gd{8eMXEg9F33ICBY2!etP(q0Itdbp zfR9&dEd_|b!g_J6z7399_GUaQun<{bD^VcSn)z$+p&+7$cEub-IkvPwLx#^xekdoU*;=PlWu0kfVD5Bf}9 z7|$jC*qgphV8UzLy@*$WC554dqIE@~?LY%7qIIPh0YOc`6rqe5gF{1AI1yxo`u&E> zz6JERp(eTe<^=~ZG(jFFp2dnDRBpi|_WVPQ8HB#-B7;x|3Sc$(DkeK(LT|=|QVw-O zV{WAhUD1+ODKwzW9uHb5t>vXWh-$1g=7QUCqLB+OomGL@@RctTjcZ9xB(m1mV8n!7 z6YC8o9*Plp?d()n9OE|f!Muiw3OHNKW1Ej+s=CN&?Rc8mb0x2aXODjwhIITY$G(4% zznS3UcWz7$U2j=eCkp5(XW7ZKm_47MRpHs#{S`WeO>z%%H4Gv-3kCVox3Tx}SK?+| z$d7V#>|wQHs!>73#WO_3ycM^}6&LV|wb{PCw}NP06lmS=RVu{8Iufmu$BXLS(?uPl zI8mW8Mz>=Q)iL_^0U8CfCx&Vg_^f`3#)!9L2T!HZovIH-bOvLyh43sl@lwVPb<4 zTdY-VuJcy~uj%$I#tE)B{9_g$l&TjJkKuUpo z=UVK1X)s1%HzGUiD&XVmYgC_nLh}1EjGmp|@wMg=CBk~fUDVlYt2VzqGy#+%!4Xhz zXcMO4hDIhM5cK%cH4@P0$^T08qg3;EW7%YZEa0m7R{`F$XZ?0d+6 z44);Mq^Aa8l3cZPz`q)>TV#W1MX?pan=0me!3&|CO@y|N8dyvq!FUMrLqw{SUn*Hp zgpq;kI`xT0^uf>fg-8zZr)1$1EU5B*=@s6Mv(X4I4&mu#zVyA=c_DA{(w75p?CecH zNGx19>49^eReEO>&Kb77Bo2c=oqI@pTLzSk-z?aTUg0s+pR|eYkG4WOV$#tiX)CS* z)?+ySlH(r7;!Ze*#CL`-id}dWBOUDjCYc*PLe_?lAP3?nA0ZY8DGR5OFDLl_UdY!< z0Gv@`rh+rNc?;)^Zor=s+d_R645=1kH&8-?@4DpMV1C|0oD_Fs$E#`+N_ht<67O}Y z)l~>yOnMobQJGCN!j+Gi-n;TYV24J#u7fWpJ^4c|JzNt62NFF3Gel|P{K2#el%@TGyrc+6OK`Sff|bw4x^aTB6^6V=Nw)k9sdiN~1S%_NWI{1= zcOeM_KyuU=axFE2oW+RY%_$Tv>tQ+-9GJ4nHI97$NqW?U9Izk&yobAVP8DnJRM3kLYZ#>~*B%{^Sg za~c2Q`3_H#z7VBXX^ZaEc+q*_&f)gkMkY*)RW>9h0kyxkE);0k89&|s{QXN`~W3t>*AOlRj=uzr4 zc0XrZJ4Uv35Beq#vZkGuO1}Cocsza7GBK*4ZdugY;I-`72x=j}WX{8U{bZxbMLjfw zz=vmx+4C20Js=tA34$Q6HR6}IgY+u2+`h+E5kuNMj@jGyHV{o;ZDF?{z}`;*}N^&|z~FJx-)y>8Sm zitp09e>A?QKF}DxKd(3&zPrVr3*Ya5(kQ;aHf!;Hy32n*zCYaeKZfrSZ~i3s{y0&= zcd=cA?>(u%D89eG^GD;m0RD&@((fC$pAFwBt@f|z$N8@|t%*OEjk8Nke_mo!W!uOf-M)BQ?UR3dI zz2v_i-z|3kkKw!EwVwpvt-CAujvlSS_r*hhQGEBh<45Cr^Yq5>ef3Ck>D1KuJ3sbZ z`0ny?qxepv7gc;uy!gK#-#vHykKude%RdRe`*c(A-F>76-ve&^Me&_B=||)H$i0o? zyYy`Idxha#_`VVG`Wm@k-bF8}_WpiIM@YG zO=hEji4x+TNYOGwMetBEf}HJQXMt%d)+v@G=cd@DXfRcuJ*J7$D%MG%m9tVFruR71xu5>O#A~qrU(7EY|B)8r{{#HO-7owk5YOqTKsAqy(%a_=dFPttQ2J$b-g10dh&tH-mMy4LV5CTsi08j6QQ^ zqtGGk6fxP9MY5PII6x}L5V6518u}Ec`HHSGQqae&`A}yp$AGcUNJMq{dBu>VZ*Zj} zejEhJ@J0;Jvum0Vq+_s6uxN!WodWydys$4UsM1G91sG7+^`@`)Y;h$-h{4j=QxO^Q z(k6;a#HC=ld6H|x*~C`D{PrI5HCM(yv0`oI3keh2LdTfcEFR1E+0>-RPC^;X8( z4^q}|($zm^{a)IOYk4$d{bpVvYhQ$|U$a5&`-QIG8OzRV{qFxqlj}DH^PpY7Q)}( zk`=Ac-V~=7YJvm*Q>W39J3!i!N8b4XYIUj;?y&f-!Yy}hyl<>Axu|ZR*Ty<+kp^@x zPu}l^>RV2Yl(XBLWAtTomU1ef!HF<1<7-8*PHS4ij7uGBVT>Z|O!kh43gZruMmxm# z+V9MB4DF=b+Zmmfp1;@ujao zhp|ih3@K1glnl$HocdDRDr|0KL10@^Vq1;iOJwiyxqRF;7bFq8f}420(M5PHARQ_w zmrhUc*~$>@x+U8?{uuNdRk; z(u-y6_~cuHFt8;4Rs)&M;B^2+FA}yBfJF;P=}*9_oiZl16s(pNzKd zfQr^tmn+AH6a=dl28GDS$Nu0rRB)gWaeLZ~gN9;})DrRC|9%Xp3q%{e@Yjy6jxLHJ(d4l1 zJp@fAU>5o$e-=5ip&1Kt(^-#P3l)x6-# zdUO@(9YnfDbrj9bX4xo4RVIb0AZ+1X0TlnwYlY1+FUgTibCC!eX~!B096oMox$e%z z9jiakRpI|PM?cUN{Rc4$7hI&|vOI!ZS0R^j_NKply-(1bzx|k|EX1^v`numImCtC` zIAytCgGq({ccpf*^RUi!Fiuv3W7MD7trMR2OBNKN0E+31UL}9bzEo4B)Tv3SQ@pM< zWDd-uLU4uE_0Y`EIBj+O6^3Qhq}6tcEp24;*AUiVS93Kf+D}D$s`xvrL60Nf*&x3&2Jg@) z#h_x$32--&Jmrj1D{clJuK&6L9=?7{gNN#RrB{)7*r}%ce0b;#U$rV8?g&-bd^|kJ zX@4Xhj#M`r5BqLZ@Ngd-w`=h5=4oZ*G{<{GlK85waN(By_QhF7MhfQkA&xZ#SdaB|fBUEAY@i2|6%0=Q~ z_czVP!zIu}7W83qUKk$!c2XHR4IV~sYXT3yU#-Q%2((AVLx;$B6g*swcL)z(K|4}| zhu&(%&A>y)!wv9I`cDlWwgr@4MdIO2HRb2SLp{z2DjtT0Dr`O;e)m~p`^9F~Y&<+Q zUctjyG*&|&9;;JEPJ;*Q)+X>U?jKq_^hbMCJj6!6qu`+n-XT2fc`ytQm#7st0}rhZ zHNeB$uWRtI;e^twNId*aP5JroPz}9F6%W^jDr`O;ZiY^9!}G(MubPdAQBxE=+=Rwz z@G$>-W#lw?NGfXr55r#5;-LrHqvD~iG~yiv4{h)c;h|)97#>=x6*mJ9r#^3hhnHT} z;Ni7erB{)7cuYsf55HGaem*?B zcE1J>$Nr=A6EHF$XE8)clDfrnRiH^4(Ss!{Q9yIOc89)_tYKOY_*fnKP(U+kz<`uQX9 z@C{cji#$Kv`dPE_(DD@p4`199hKI}5=4$Zp(R)qc;mhZ=c-Xv8gNG+0-%;@J54=No zxDyp?@bEHI#;F;2czS08Jfxu-6%V(lg-7C{pPKUX;o;#wYVhFyTIuJHz{6)-8lw** z_BI<2-n9xI%Ax3~*)Q6v&DG%Hy?2_x!_H^4cv$nP1`i7(-%;@JEZ!kJWT9dW9-jJ2 z87F}UW2O*SN*%}-!bL*nx3XoC&i_q2sT>|(oY!(+9>M8?g&rWUla~t@7vyjJqii@V zfI`Gr3lCe(#Vc&nTPxuDGTCPf*x8-r-DW4Wg-{?BXOPIFBDsEn{*aMZGLQb# zmbXEh4KQICfF$+-o4sHluwZN3A)8MLG4o!@}!F-7bqmf4L(6v#9bv2w-G6@N@T( z;d$f{CFP>C)+K_Iw?TDQ{fW`2Zo~n5cN~uD&$mMJE z4=c-}`E^UETN}$^`LjwJD3-&YAQ%hDz-o4pV&G!TID$yGWY_+&29hefkNefIv#19E zhS3Iez|QvUM9#J3)q=%cP5z&p-F)211-rd>g-*E3;a&LPOSKCk`++{(U6hjjUlU0p zOOfum`uAcrd!(bN5wnGylgl@!hvb_gmrh$w^0}fbHPp-A%;7E5DF~b+}bIy_!4-vSJSpq>O2P-V(ULcJ<6;-#s#sAdl40&Z&%R{n1IV-+kTpv)5RgmxG+-t~84cZu(OgKSyAMENbI)ymy=7oR56X=`V zV=jUMv?2dSovVv)%pf+aKQfLrxc!jl;;Y6#6s>3<0yG$W4Bq$fCGLl}Al9u;Aq9dX z>;#rHxm2OKpp4zv{zrJmZtTl?ZN`s9Mor0b{iVJ!c6K5;tWs&9BGTs?JlKO=TeOFy zdeY#z{0Tyls=*^4jx2a&MC4cUD$Nz=i6NO;$@`^a&^_YkiZtyE-yX$h*w_v;T+V*bQN*C_Y%L5I zRgDci|F``78E(*ME|`qBNCkGV-gyyeW4V^l;L6)BE46KhYD)c}3GuGs*u4vvanEIg zfNS6Q&FJHM(DK!d!}z6OJ3U}$FCBQD&J`7l00q+V{IoZ9KEA{jrzh)4{MDT(hF3=S z;UC<2+c=aqvsbZN0i_egXo5TM2!DEjEfr7m^Wt=7&pV_fgi6V~*h~~oilp1K?d-1B z(0xNeLak*pn<8Ekx}tn!(dFa8H~3Jzk|q|%JyaO)ve`qLJ?zkk?LmaxSu`@fFg?zj zQ|&&TlG_@dJ3&LC_GM#LZS6e%%^T%VajJ&qlSGct0vH&|d5v#)@SU454(@|Dxwi(B z%G_l^Hi;-udZ2E6ecg`kWsN5`i<+X)8LzEuku9#!wwv}ixLgCwOKsIC zQ|Hau#^#xnUYZwNh6V>+o7pT-6bzcCr$GceiX)}BDC#fkyh6sEbMBy=IM=19C3(ww zbR7XK2pIJkI(4Fvhyxj&#%f88$W|-z?A7LxD44?F2?nR4T=&_B+GP=-rMd7iy1%H! z7Cu{q`ZOyOXRLeTi*yC}pL6nEj1t#mY6iMvaL%W<;mnaHDG?cS#hT7&tZ;nvOvj3A(m*`~pK zls_ZpgD6V(#i99lKrOoAd`$iY=3{_5AALBPrTHM!&KEERxI~@Tl$5jQPd7OwMD&i& z)=mi^Kr;XbwmSS_-@l9TN3_5q%yUPCKRm=Oe*Ut@a zDw9N4_6yj5)|_Z^hG_k?aB62ryM9g^c#NEgxIg1JpK}s!-K9=~W&t%iA5E>Fu}_B9 z&kNqre4N~=6y0z>e%bx!_0`IJ(4v`lL5t?H@0*+wS~N3eXs4t-Ul)7};bSQ;|^u)_^dQKA5ERlK3E#sU)q7LD(mBJwakX|@yqTnmqPQeS^LY9@0y$p zS|9%gXSeb5*?aEB_LuAY=bVWC6=4%0uaOIyk875M=EJ=pG#~rQm7;&``S3yWu37V8 zIDXdo7!OWxXI^1OEsK+~6)^VZ$Hg zV{3*r8Ezv>vFavKTw!q&B>r2r^bm2w!_Pw@`;N2l#OantSDXqPaTZ*$lP8Lz1?LS{ zI%A2=NcTB#K8$+U$=vnr8{kBvB_!5?<^`zrX1I(6Amvv>2tt3{)%S#Pg&&Hic)*cn z=EU(mOB*>u_~#ceNZ7%M^Z((^U?21G4EJSxKCN_t!LtN@ce2^HeoJCLa9^8D>aAze8 zpK!Bq@Yg9!z&W|}oWo=@HqE7{Qn+0;XXl?!#obW7=F8XXMz|ec*q>|(I z@EpyQSds19o5@Yi=Pe;-2KVofVxmR&l(}G@oGJHeXi{p@xe8PP?;B4VOUE}KF=m9RRqb~v@I7W_x`)%Pp zUzqi$Z}8c{uHu|Msn|Qd$j@3N7yFr^`zBw4UutFD=e)+;H3dOL0_Fn53c!~dR||A) z#Bul?i1v546%B=N0}17b?5xh5Gp2? zql5x=a@)}&v5-4Oy4#Rvt4LYQTp-_iqGDw2SxDnt4BY_F3FmO^4zs!;^aEt(mdMZ# zydad~?LrcS(YWJi`q`yK8Jcsvjp(yo*p0QcMCBnm{GswH*->U;&sjqg@=X%$Ogw_) z17wbyUWCwggLSUH(qgi|bf40j3!w2Ibe}?a8U*0P&gNJFTfj`rJjwbyzW+n8@+Lgb zfZ!bsz7m&Y%!wi*y;rT3(^$|~BAeAlkXT4Au4NBBT&dW3+!ja)v!)>)dnIHhnFc8u5cKSH zc0`aJS0HPgJ%jZoMWxLNDm&dbK0uHEHkZ>|^|9EZ`2J*3Smd(|a0<2JHeA@=)|bxM@s^OZtD-PU&F86R&jt)Q<;WlMcrcVBt3(f0KBL+p z)kppQZ&7Hj!96EFCHHc7UQJ4FX9#H^v-GAK$yOZEd2Kb`)OeOy_-qgXLeWwZXimGU zT(`&;C``5RmlMNZ?&eMH#$WEiUruCI3qvn=V||pD`%;A@6J_j6EJ0u_)Y3@V|Hug; z8)rUW8u`CGb2t@(=C))X*Fa5WE<%bJN@GF%bzV3G$~Kjz#pAnTe%|DC!NT5WTMXlQ zwx`{9K`;n?V=WSd87pD93ofCETYz1T1od)c10KbI-9^)*1QH037rI(sxG*1eCx1M7 z5_`k19J{sWqj}Ycd#aHSNH!A|v&-mROMGo?tY;^X6q7ULMP|dc*J;6mj=WiW9HAVf z%y^1FBf?i#)6O}Xf>!fz)zk6Q=cy+m1(ETvr@w>5gsLp%Ty`2UcEiVyB5(<1vGRwm zahfP16xV7qn|3`x)kxb4dmqC5(3Y~|4f>@-^mz=wG@2nV7Ae#ddzsH?K)vj~p+A5c z`g~L$J3ix8EDsMQ*oh_3@36d0a?t|?{L}1*@;mSIchVnWpA428^@yGI=8aOC5yu;) zgfIMI^-*-1*Eb*U`h2yh8lHAoL5e8ALl3wX3~vb9@!*D|B%gkow+6A=cz|NTLJf~& ztnZWdAyY#Vp?0_j8+r)C98vEJrYljt}6$cOVDb{oFcczqQZA}@~tc{ZX>{wvP4?U-3ceM6`Mj))=Q1Rd0N*PWa?OhZmW{9b8hf_ywWTQd}z z-0m8v)bXaft1aYE0@S&qv{{b#`6A9_KHn0;;i9_^1*^JB^%OUHa;|RKrVNQ9ZK_GM^)n~19c7_~T6G~8zMx8yBU}!0S@;dPp)WCvl zgF?uF5297>ITjq}EzTC~Rpgw8(CKd@3n0jE_A0gGcv76vNOk#hTkBkXg0qacZXCwC zbI(O7pt%E3&L4O=+3Y@1j&vq}PHUZW7XV6Z2(?5}zbTu!WBJzD!e=v8wUb;XHiJJf zd!7fSkZkdA1LJ4W2)UL(iQ`4?9=>!Fd-)Os(ZsW%;@K6rp`s9|S+XzAl(Zod@pHZ%JbcBMb=Gjns77;(O4?T;BpLhwLX~%~%Lr4K&pf%aq(eY2J ziQNJ>BU8qxE?))$&MZYVx^2*9f;tv^9zXeTG4vQ#dn*sS}DoJi;%{bX-9=^VA+vYX79vzWzY8|DYjm(`0X|1#Uc`3u6k6B@HU4 zhYU>*(L=#(y5BU$iz_90eH?*LX^(g5E&LZT=dwNfon5V;&+H@>OS^V3_m}$U3hDEt zy>gysD3A1j(KplrpGlsP^xiWm_(bs30zF0-337Z&>t{2rwetKkds{ykZi0*>|hUXbY%(mNJmf*K;d=3%|l%&jk8zJ2(xGZ>O(3kxrT+ zH`Ap&_!Zv7v(CsPzFF|?s$R?VULK~NZR=Hzn&=_uthqhf&YzzI#XI6m#8zi3S?OU2+n2nB>rWmOa z2q!P`V%)i=PX)GB%UqaV@7!6s|99=id~p@FJPf;^TzbfHRZ0eWa>@Aa6Evu6O0tjCUhnpIPuk=zs&@yvnt9wuX%n1YwSSvaXmh;nNNFlRAeW{l zP@(3FV&HbmRttw)sqt0UxC8Msu7vKE&#ssJ^G@+nqKa_t!qliN7H4%k!;(G#i zqbx=s0r}n(4^n{g>9P&}H`wOcCyHa6<~Nwv*-SnY9aK4=;&fb@HywU6J6p$eQ|MeG z=$wV^EhRdK%aDo1o_D!PDbQ#&W6 zT4b8$_r}O~U!#Vkp+6a!(mrvGif+MIkgcAU%4`EJpw_X*8PHw8Uf2#G#{+8QwV=eH z$E8EX>KSTsr(xaT6|5WRy2UiLZV-ETvuW}qcTp|pNAqT&{`_}}sIksY5{eyf@_%WN z;8x6LjIJ1GN4P}RJMo8L&L+9heEd`R{Rpaz>~);x#W55Umf(21D^?y4KAWG5y-j9O zEW<$ut7lq@WZ@j)dUPUxcD&AcDQ?Nca>=d+R>#*!=}dA}m)dHmIaP2!wU-i~{(uq> zO6hwg*MU;oK}w`ia3R8Lk#~IAq7-G6C^4U`N(L8)4V+1@lu28~Hq;?<8~PN9 zL_)wC8Z6y!z`L_rX0XrrdW0)hwCrN&6DECuL7v>HWRmw13^)y0F`h<$F}av>xYbqZC)?ufe)>T^z}H`&5cU;{@m8b?9tO z7wA%=Ns%cDa6F1#}8gnLdv+^-^4{auPg;F=Dgz>aVm<~AWq>7C|Kge1gEK% zMC&=?0(NwIr%0g5P3?>bijyo!AHmliVp6-VJrQGYUWFLR9U^y?oyg1KP^}*cuX^mF zk@b~7(6-%0B964x?@ByTY;<-9t)RHh%=qZjh|w*BIlwB1(&kVDr;1fwc2rS#WcOhN ze-02(0cP5(MlREz8OmfFfv@X!mNeYPU^4jp73nmZn(!=3#yy1H3x8%R7xWbDZ@1nDq6_I1{UgU5XZCEMRDboSBTy??G2B zz9XVF`+D-*Bsf z4v@g;4`vvhVA%d}PuwfTp@6y5bQ$c2ufSEs@;BnapMtLH4EE~Z%Ys!?P%-iU*rn%F ztBGoT3m(WdwetN))M{dH6U&Hr6>-z_cIHK$sL|a<5AlZ=OQDUPKCx(N)y1<-Z}Op) zH?MA*%}boeY5U5C6Vrzb)-%rb?r#UVZ_+tqv1N684j0@ruKyryv~m68Jw`o-i(1n5 zx=Qa%L-Y>+sTNA4<Z(R7Kr*3e?gYxxveZ^jJ(13Mg3g!|X~w9t zG%L-H>phUyGdPzHJKSUHJlb+5qp|c?ZZCEg&W%}FLX$>>-{Lr|3I+;qdp2~*I?Dk} z5i`U(;T*lCvz0qwB+gGOSL-bH+2@Z^$r!|VjCtpah{sbRo?+Cmzsa&>y3wW?2d5c8 zQ14K;o|Flo0eeU(8RIY(mjyVYgqHY>o|(Q0XRLc0hD_gsT$I=F)Wj+Rjn#?~i$YNU(Ep?HncI2m>;#CmY28M!bJgJfy!C)B3=J97P@oWvAMKTa{Lp2xk5dMVx2osBz_dh$YS(dDy zNHOSLEkm-0F$Qks;GS*JIWOY|w%;!iMh*^1rbOHX={Xq5fhH^{B3R1kBvT<@dOiE@ zwR(swWy2o1arlGr{R!GCBee z*PGg(EJf%FWYU!^ETU>CH8M$_oCxlP;J-;Z@%(_8XLO&AcDBjHwI`b;a|}8kq@K8( zv~fOsX*}mvQwo<7 z$efpu9NkEA^yq#?#jEuSF%tNQ;BVQ%{t*1FW$B;=obbX<4g9Ss-|=y&sqsMu73{ojS*)|gJC_rS_2I56i#38xdfeKOo%%VR ziFPWV*x!xrGbyIY!gYJROu@6hAlj>?|n@o(NC`b^p@?do)L-r;2Ylj`PuO@Ga=9gpHU{YRtbeMwK| zeMO(qyQHn{>ZB6$YkmW^=;*EOO6DCh<6lqufM~n!wcWbO{%>#*+BC7a@@{R5l=fSc z_J8z!J+1NIjg~XYGKWapE(?Y`9H4&hbB(KA>820j`y0SI4_6>KEUPAzOyt9CqYp3 zao#B0M`0p7j586K;X61h$GtW$z(om@EJ9(-o5OIeA4kiOU$S(!()Nz_6Xzu%Qqx0d z%i-oY(2H}p!g`S=O?4mS+?Q%;jKjLmJRcerx}-5vk|s^@pNw+*qx`3%=AHK&z&Ii2o|fzbQL8PdGN z>V2bd3U$>;@b8V6{c!Do#g{eJT45eh=1aXNTtWzoK`Ff^y37mT*<&2O&da=$rjqbH z+MPNT91zwxzs6mCYl!(Q?wiC9F(vOOhVj41-vv4$-hdJl#hw`j zrqNvY$$m3Nxldk~I|7>yM8{R(I-NTq-KF;^JPvW5h9o;XWw6IT5n{J8_LL()rFXfHVCk9hYXzk#f%}%(l-^{8X zLq&5D1%d5c`yK9$7|angP!G_f59ra@5rD(^4c?sfKEphzENQFTAMLMjKh{F{Psj$t=!756T>2GN!N)!E zy__8cx5#}kfGdWp#R!glZ37YPB94DmD~vdNl-4AWNvpTyQV(39>BkrDFEnf$u=F=QjMM;svHjeuaB| zU-@2N=9+~&z4QJocx*YwrN~Ac7JeTb04^C=Hh7gsrl?`JX2^^+XD_<$Q~r#r=n=Gg zoe4pgg);%>)In$pArD1^aOcJAxoX5y{6~P_o@-da3;gzsQ#q93_= zcjkgO2y8TTM&}p!XU|?+-S?Ca*1i@R+{Ptb7&kG?0so>CeeTyp$1u zc);qcelnM6n#px9=5>>6$;k*7>d)$=l2L#SuV2R*D0FeiNJF^ahBE_5u(0@;e)GHyo zL@5>ymR13*?U5b#F!@%-M!fteWm}5#{7K>;zi?8f)S+yvjqZ;Rk3CdOn!8bpkRnNM-JrOLwi=k*K_#movK{Kl^bs0 zm*MO9-Ko~j{_WxSVZEbJzA7R7hn@WediWR*?7Ho;aKD0_1B z>w~kvQ)Bk8g0hM(_%UF|;hjE#o@E)w*xt77QdXEe`*MXkU_LTqh+h`8$Cfen9hRD z$lwlOr4Pqxnw;AdT#qkMOc)IvL1@s9kkb15Sv&K(vUw+|Fj4|xH>}3mhYDet&+svx z>5}}Ck6P|CY$CF(o&Y{wCZ7Nx<0CGRRq|1PeY~4?_SJli&kHdUAS{ca2`}7U@KeO& zav3EHil{10$^&wWXTQ1N4;YN#S{g&Fi1)9=4D$wg^$<~brqSck(4$DK+t+DJ_p%Ij zOKZi0+wY`Iqr?Z_H!QL4Gn@=N?d)D5`9bXu)k7~RN@{7{>at^?n-IJ5ePGBCsGk*8 zwd8|kb{~X;7FTBxEXFaYC8mI1Qw~nVHHBziRg6fJLc_lqbcYZBd-$RZ6G_PJZ0t1I z*WN}!CHUwO3BD6n9nxA38Bq55^x_yW{V_$`**6bBFk9vwW8m5cmpI}vKpO3XUC4=s zaLof!H^8OFU|y#$9Wl=oxcvp*! zqAY&AR6Brd!xZYCEBAt0`D7Ar<@6_;Xyw-kQ+)1LK7SC4fe#Dfe_$E&b@G!Z`Ru{%~m{A4Q{ zlx9WyJ;Q-MDQ|-{4{>zIpfRf0%6~AL#JcF$wT?^GR;nXS36=&efG!+}Rg3iqr3dvn zirVT9#5y}Pm?~Tlk8ZobLk8FVLq<=c^mk!dc|mZ z{B-EVMBxOVS5b9s!?DV%pw@}0Yy`{Jyxo(XH(+;K4Ya|54X>y_H3bM6ZK% zY>mh!O+%Bw38C}heUuCftw|FFb7CyDmhY8!Ju0s_&aaz|B}OKATpt_!fp8mAI_%|J zT^P%VGXf>xAVoe(Te9NUza@{O9bxYn>%#r_JJOG?!425!s>gx9Q&o%P6Zq4SQZM$2xsUEh3;60jFR^7WZtf#R-3>W5L5nua`!3 z6CCq|1{yTH>Gjf33uJX$t(m5A=Ha7FSmTAIHoBPUSaAW3RlLtuXlK2ir*SOQ(I^(O zmhkH zl7GTJH@!%hE-l)d#lG3{=U`z@1%xnIEv{I;t*+`u{<{(!SF3LpJ&ORIq8g+5ZPRoq2Rd_*Ql;efY|LHUHIMJs zb+;LlcY@$~$8WA0f=GH^Ba}M{0m(&DdYRjQQ@bMY&0}zWB?&FX&2tw)$Joy5{(&Ww zQ$|13dnfKLCR{2c_``Bq++{Aa-axynA9GfiQGkhavKgUs7mW z(QyBu9yB?EVzeUm58h`STy2FEj1o)V`K)$QvgRBOrn-v8%`8S+=a7*}D*)DLh+4DB~ z4o)%@P6^W)Qu=OLyGT|^CB0VeGWgMnHNX`_(|LPmbb`uGUM=_nlDhWowDx)7;MLoX zK*7{~Cf+>UZ+_np`&8+0V+!i=Mtd_2CBwl?n@>kiUsgy1^ml*A8&r73di7y_+8Fmhy>|d2QR8;3}c|ZPd#2 z-Dm-65LLrJ@m3;e2cR0sw!`8E1Z}e~{WU?*3T=n8nB~Ji^NC)Rez-7wLvBy3ml-Xr zX{MQ-$cSRvOuG9)#{U|-X7<~`MYauiX;GPETjK>4fLR?xB&)r{4TYoQiR5F}l0Tlv z7Az7|#_@}67Hm|Y$D~|YFxbg)s@s^$-5>) zHiByozn2c=TLL^3V7_BK#B#n;?G@_zg=kJyXdIdhuc z;h|bx@jK37gzNU;bmIO>&$_{timZ&)8P#X7`%t~2jnyhEgH0CAkzAJGfNXXV_r+(d zd;rQXk`3C1kU|hw+S3jX#Qb)N+~I^Y+{V=nF-%|{ra+_!ofWg^U+7Se}WyuHd726 zhvo5nj8++|^5T+I#*T1fbzgP@N`0Ps473?1Jl{g_ZPar zvQPHa!!+GoKuVMDJeb+Fffn5(s7)%bY)x(7&c<1vKx56GPmqNg|K>n28q3(k`gPby z>(Px#?7mX!kJ4iy#tE=qWweo=16sS;i(=gex0%y&9zwV=2~N^!vbkW2Zfwa0MD<5W%Kv~&$@ z*le|S7zDcFv)L8@A%-BgVebTH94$Xrt)#Oqq`@+Kreo&8t%oHdriS&t6^vMD)1RrF zi0Aye=)$=Rm6dmfKFuoX_;}t(XFm=O<2wWnXHPT_bz`8l4g4$K!LT|D>w}e?om0*N z|04A$u#U+)0`@2iixI_L#EW}pyL0>fm%Y#Nz@3>!?YV>jkqK%^6TNm*5@Tr<~ zUtQ3#oWois?#toeu5utPjE~rK=<$gfERHy}hQuk_KBD=Rp9sKxMRpmQ@lHV%&at#q zv2rnty2urqA{sQ98dS#m;Sa4+kloThMK-GiHERXRAUIWWtw>uvc$F4dd3*W#)ss_I zCn;3r!@0t2zGz$Kf3S%vcHNEL0yc;@MPUSN2#3Hm7|~X~^g&~s1AscGI##p-UZ4=E zxTat#$nYbB9e$v-jqsysJ(ApFf2+Jqk$hJK9Ew-Ho*G4)=Wdz+&&^GlJ?xRp^gegkFkmA5JEV8R zVT}geQmVsnt6RRN(U0LVIx*5}OTZ227)@rG4HCh=WGu$}48v0>-FG%hBaApA*0>J` z8arNVEqZ#wqKC#vRE#1UR;;V)Oe8s{J{)(pZY8`qZd<^Z;jB}DXg+K+*|ASJnVp5}K_+Z+@ep1WVB=8<-{yQXa8AsY=ES>iiUJKJ(VfPV zs7eFVjF2&#@IJjcw<~s2c;W!@?#5+JD3vEXp%!VJv|10Licv?V>Z+BGx_rd?>8~_# z3~!<=)w7udTAK14qc}!@e(fi-wrsQ*`i$dh~-1~`;} zDz_-2Vwrb#ebEf2(^;^=@Kp zU>Kc{AcTgzKT`$$mG-gLyhF~(WM0Gxv4BtmX)x|VA^5PP{0^1|I|BI{aV5+yc#MPA zjt0a1Zhu9p#fMiOZz0X%Puve-5c8Bl%x0DUSAs!Y&MxZ(&dg{G;&Q}q_%jXSaz2R5 zS@xg6%TnNewzdi?KjGt-h|1%L)fResJ$1VJ=o@spB|7-es*37Ygw>b=vK{5>l)RJs zzZyr^w8y8ttqPZc3Ot#&?)4zdRi*N$#(^IZk(>s7sF8Md!%f&wP?l6)Xp3{rWgmAe z*HP>N*Dlr)!_#Em0lq?Zvsd!@3Q>Le8+B~ET)nx#juW%egk?8U6U@TJ zyW9+e(hPG!Ps*B$*7{QQIKAN9TIa!DW`p(4Zf%>g&?sVVu*5NR{KZ7^2BLAjw2d<_ zpkr&$wVSnU&_I43m{&~5(#fq+pra0|!zXBY0u zD#OJ15Wjr`2gIRklG=yf{_wQs?X3?gZ<7Y@qAU4n_i$zzP;P?PB)05HL|PC+DDPV8 zGfOqS5p-MWZ2cLAM(isGdqJ+E>?=W@Pi|_Wwy8N`m0c<-n-!`osX=A?;;1qMD*HyQ ztZ!mdl~tY6^sMFqrDw!bD9>UWw-bRh7m(7|`MHjYdv+BUr5;7y(u4$`j|7~ed$P0A zNay6SP5LIsax&e5VsaspCbBBsge6|erN$^-$BDGhV51725_b6z{&9h3CP=(@Dak}( z#hZe>P_QZ)8n0uwAVQ0Kb0W5^izOxA!CZT={UE5rf~Hi>lxKoBn{~MfwJX^)j*m2& z0UKwlL#9TlfsUv_5iNi8dkqEUl2_WZTu_#RBFus!G>s$yL_Ucvbe~!pcq_wZ7U}Zw z|9$*Vau(^9;Xmm8yz1BRQsnvqR_sJH{mhO`=X3rORfa8JBM~)KgOh2WBR(FgG4t&Iu`!IYM z)X=;OG{7%CROZ40Y><=s*i2~AacPzuW&_jT`er`OqCh%>ET3Ew%u*c9!$~0g6+N!Z zD33Y@%0h@^f54XT7TjvAY!K7Jz43NrNP(H>T52X624a9#YGmA%vznSyTFs!JQ?zr+ zbu}=j&-ZD3PXDTwhEs^+?$#gxiJ5Rul8=igyTznY{t@>n+*u%;XOB&;;|u948upR# znf^*+RyNnl+(J*v*wCfNfXVBES87QSoDy6#ZK`AB*yWH# z$>s_0!KY$p)A+_B!3j56GQ!r{ zn`5dXm6*F?1Gv#bIiIe#-*hM^zKM0Oxqz?GnepIel4CwdmKyTkp$5p6-Gv$;3I9k9 z&~*h@0d#eR&drsPJk?KejX*1;PF3KCRcG1RvWjLaA{a!r z02~G6n1T?V7AK(d)|^_Wxw0eHAbAepw}fKHJQ5u61!aN6g`GBrEhx+%@vK27zU;w? z5h%aK(YHO`;T*2~J2l)N=_aXkM}XsugshEezkXex&GwGwB~8WzBf;<1^|W1B}*Wbu*k#Jv`4?gH9lKK zFc~vMH>`iYL6VGm$yNb?4IXRC4XF`xesdA$r$F%$E(=I67V2H3xV%2Pti)DELN9Ml zP0(3rU|$8fjjAtweFg*@HEe)^RH?c4HF0#{Qc>q>$3+e6?d+0CB?zlgIUflqxYV|a zYWaWK-UU9Y;(YwxO+vDezy=5y0Ra^i1Qi7l3`)2pK`|0Q5)}d4D&1neK^9QC1UG>! zhgDQmyikM1ij}r#5s_j|fF@BefLcYR8kFjUP>qTZ6y5jx%$(hv+|c&-fAjfF&e=J0 zeP-sFXP$X3Qf^5oyQDm0gD}P?j1?N}HS3V*me;AzVs&|fu;Dg&p-M{#)qLBm4*gz8 zY_AJBcX1*qSKQS(YU5O?B(Okf;<#Fc{2FNo7Oc||C2D>oqEtt0R=1dlhsk7`*=OCEH~o0m?HJag#qkUEm$XJ z-&z)`)6V&Nff}&Y6b39UNHB&ntE1Y|yLO2R10s9O!Pr5i+qs9pXh;MX2}-it@Bf=V zMz#^9u

      X8qeAk8&IlP22u?o9LPle3qw%kQ@pR;Z-juHR1Z@s$c#UJ&CTWyD4dO zG``ylq`gGNni{#3O6KhJaBuECjY8TbN^Q}=>|;J%8U5sYRd88@pzDn^!`Gv+@at6# zP16`xbWP)hpl@P$B0?w|lP|Wu!)ao2BGpI)n$KcQkS7JCdva5R zOj(oBz$=~}Hig$kFKT$zzM?yy9fjASzi4>9t>g7Qo3$Ir;QP^ah68ASHTn9%i;a9= zaeCx?Q^=hi2jqG+hFmA&jJ`>pnn7Vr+xH;j#(0iv+P*7I`vx^_pIhA+t)KDk+_Zge zRoCjsE{Sd4zFEZC?X&Jmv1H@1j#;B3T6SZjT6TM)T6XWEWp`!r>=^64L8YN9Q`6p^ z?#(D`tRk-Q>+lBRR}{m*wI2H}G_^t`y!6xr5#s8t=dGHQ+ivdn{5|#EUj8Wv*1&*d z0-IFzzcs0Br36sjDZVBR?7CtRb$a8;Rv24F&d7IqIpuaBrWzBQ3iU0b}fRT`Z@PU;=s3tBao?99MYCDwKT$ z!fs@a`CTz3(u<4iURb9|zGyBQ*pMqeM`%E;hm;^&1-S>kIZYkA#Q;F~k+^NU0^M5Z zE$At3Ale$53hkw)#1#ulj|cXmP7|)b*1EoW07S$ozJr48O3x_44Bwe05T4f61B8fx z?NnwqxqAA10{@~5zL2dY#rN-MhUDcORyA1X43IQfD-4v674L+XlNd5pm>o+<9>7pd zW>O$G&XsQEa&>S5?Z!~j#I&+m$isBX;XdOHQBF$kFQy-2(<GS678$P?u|YWO4z)>dw=CmE&7Z9T*sGrf85O_Z$uC0SGVb% zayq1~FdEVNZi1Fy4_7r%FtnHbp(}+p#V4brzOL%~jT+xI><`~j8~EZ=9iMOS4@FK? zQfac-`@^NtPfZ(=PD6a%8e_Qu&c;RN8zMgMYkMcTd9Yb$$MqKjDE$+UeZgHz?7Izy zPoRQyvST&2Ih4S*7+ZJZn#Tj-H2jT^%J4)5H_HyhP6%cnv2|l-i&(jpCUmw3!z+Df zczcZzf9N|aXd#!VFWv>Os$wWoODM!DE-OeoI}U|dWSF!q(gI25ut$35b+$dyw9x3} zwEFyZc~Q0lcPL_$B%*?VC`e)`t_-0OxOA~RJ+^}jz1|>+I8q!Pnd;8X3*D9KPm}o& z@4WW+kBBgG&xsf}7&FmvWHo&AuXZwQGDw+BN9iUAKSn;jvJN4Jcer zZAJT$_+nJWK0vxBHyA4AHyyPG217e|jmUmB)y$G}!$}+I2$3vpZ;8uNAwsgI>4I{)P_oD;P?VGe^6iw(A(wb{-9XC#V^h)+kR| zO~=3ip{BJ#K1GQ}J`@ZPX#wnBiJSPPTT`*6R2-9CuUGM_^Nb^$E$z24G4uZ2}vx{go6FVj zyzZjeSo4woBFrWDEqemhC-#0Pim_wR!uf0zOn$Kl5CwqFIKpHUNfv8vYN$xM1Y=kx zn3^O+Xr;Pp6UW`eTrE)8dvBd=g&o5$>8ZL?g}X_`wZ1&%zY|F*Ev@{L6e6-nj|+>h zN`2o?w9~ysYpEolEg`!cCA?}%I9sfa%QRG175_CH(vuqZ3(SQ9W9+%$?|spS5pJ2c za5h7bvqs2>Fv8$*HNWDw$!6AtrENTi?nGJHomR%-W+T;`yJ633PHjCv^01y8YuWG=&@e;Fjw^gSW^O9C>*h^f}kM2Ybn#%9H)D|V+ zAhN3stPl-Rt6trHrWBmNz|u=ftw1XTagr3@_-NLF#gVKg$)A>^I3krDxk9YNO9Lv3 zDshmE~}dNTzgpv+HnfYH+P8z$>? z%M5Yl%r>I=ob`&nh7^~7-%)SDs~S1^M}+jM&rzSxx5XOr2jr>mRz?gHl)k8CZc=@} zN76$k>g|kn%_f1WEaO)hr+P}NOm#~m*idKypPLv|Z7|L~?iYqTt8M>4uS`H}BvATeZXTl7-leCq zEbwT*XJgJU z?1tlusoS$xX;~iD)~Ga>w*guRt{j9PRrjQ$F51_%9)U-4wOd7m&X`IU9L^9tN@O%^l+!7A-W(Xl=Wkv z-s@d@4ZKGSLESz@zQ;X-!pKr{dARNp~R@Y(fg*}ci%Ug+-)*NKqNM9I$wAwkI55xVbmvS#!+J>y7CAJ&<4 zQBEyc?%l2$(aUVo7LhjnFWd6uMUJ*yaniP2sM~TOZCOPkRkU}xPEbJ-6a&sBQ}MT_ieD|;aBRRlJ!;;Bl#ahHh2 zRHu8F#K5}<`}e6AZqz3>c&g_TBWn|}Q1waT0omNT!$$!ZAm8@~!3%y)u$9+<_J814 zARK4?=q>tEdY_eiX+~eP8}l6lpqXfV(ZnC}01RLLaLr!LxSz(tSqRAmm(fN2TN{e8 zGOCTDs+DmtsBczn1DoX;1@7AOwMBy0@07gQ1uaH@a5%a>F27sg)9(YX&ZBYq z-cDbtFEgLfXQ>69ia4~ek<|yaC&GV&TwzKN%u&Cc_t)^z?P%cyKK-GASv)>cvOB+H zAZp`un2EJAdIRsVIV$}$Emu)E6G+GixRxCfQmgQKeitlCc6p0(cmw$_g{3baM#@hl z4zf$&rKdwZz&)q0;I3z`gMO=2RS8O*y?_zk`Gc%sE$wIHHVmRpiU9YRpno5 zk=NJ$Eh4Wa;Dl85X*^w(mqT-8e$&Z$VSkDG=TzOv+FP1;##>k`qt?7bs~-A!9oq08 z(;;Kb_!d(W4c0}b0-zk#e(B$k(f}}M2a>D5&4;W_FCUt|Ue=_w)AbnRG8`1@KebWCDb&ILX(fQ;h zf8*NF4BsSm5rbv=o*}1hY!cCVS(YtzenJR!RtEZCfS7*2`>B5PqTl?QcOA0BlMCch zXuN>2inSA`JCffEe>1+N22t5_<#AKQLlgl4R;BKK0a|Z67Oz~sC5;l^DG3*PmStjp z{1i6rK-k{Bs`c)5Q14#VYUTjY&jOY9@tp3yg;6A3i~|tcHX=FMz{s4L_OZVmM}E1R zs;}*Y4}k3I8Q$Br&+vXzi7x;QtYn2>8NnP3RF4R}5$<0Zs0^#;r-%+-{h5>D;#LPI zAFS7^BT1Tb6MOXiOGaa6u*NdiGLNHM3vMa6`T^_EzK3eO_pRP4QokgukHU7Dw^2bc&19b7VsAlL+ zO&x`?@$7+!*@=*y*L;L)q(7$fQPdM?I#jGQ{fkl3^x7c~I`woWr=I!uj%Z8~0h|k2fTMSRGgj=nztnZcgC-o|z59w%*MOC!uH%H*Ri&=Zg!zOZ zVISdJ!YI;I5w3rr5k0&3uz<+PzY>+hl%u0l+1Uz&Ii}eMq0y;wF<~~-{7&$}Y-?iH zHHO!oYYl>tP|l5lG0%mLMzI|1#o%|~p5z#BKvYmMv90o+(HaRw;-@Og+8N<3dR_*R z@0aNB`TZ<^K}g$?5NbYGj(dN)3ctn;RVUk3TU8YqGP_*r@Enm<%UBMr{0nb{6(BdS z=MfpqC}gQos_f>vQ#qC{pB#lqSgFfj*LpM}wYc2nEqq0{XSrHB<_l^SyHENK=J83U z!&+B4akTht5yQ%C+Qm7_dPC5V7TFJxo#hE3kt>Wek*iTR{9+9VJK`5q-8xo_+hX-X zXaQTsD(o*7)$=vK(2C_h+2~+pw9yeaY4471)Zm(lronQd2}m;vCviavgcj+X93=|r z>@#xo)j)~Z?hw{c4#OUN)w~%PEyJ*`eU6?bS;W=lG%j7HsC(^dB4;Ie2JT9C`P&{H z**C`D%oePCH}?r*56+V(lcf!m4oLLkV-JWGEOQN`uQHm*k?89b?)=+|e%c;AucEfF zhE5Y(SoMO0PU{apWP!GYl|Nhj!~T!9u&m4h>ta!)qN3;68!^&zGq2*{&091@X0g-K z)#j-*UMyYtACQHQe9KWHrbVP;K7@nQq&LC@l=VjHDM-b5kc!!0OFpl&MlgAr>qi$L ze3|bH-4mCmZaJt$Ls-ApS|k4F(qi#N2Y>UAB@onpFRz8}GIr{1LhCaQWw0vvEe%1cp-NPhC^UiM%ym z-tTcoB1DWfhSyK`DxZVAh6Q3@L}(#8q}JsAP8Jc;DTtx%ufmTbLJyNYp5;68( z^}9!22v3I^?v$&(Ih*yWh3wmCJI&hOv&|1FVFfqc|Jdk!w1di%t$=8-1w+5(H_B*m zO&9fxz`rmMq08uxv0XBwqUc6al0%Efat7s>Ic&m@iXc~WFujRS*fQcj3134Jd(%+;+^jF|9T3R|(IE_*uZGg>q!9^b;pOw|Wvh27R zox0SgNuU+o;ejOMT-zoiBN=MD6@KXNMux5!AJU~u{W|WUrnNKWA1r3?lMNpHG zP2{qx9NbWQe}F-N{8->&`iY z`{xXV^H=s=EJvQSH@t;+LuUv*U|l=VN*~;RJMyAwm9x6}9;19?C{-^NWJN_v#+owF zwwP1be5=v;)ySV7w)HlL{3@!qSw(@2VtQJ}L2qH4P&e5g>?6-WhZAM{RvmG-pvI}| zVLp_nT1nfjT#t3b_Ba^7;*DxFB*H8NMJ3iavGOhzA35^v9KPksw}?6WX3CzrU`*K` zw&DY2?!enFOmY?F$mGSf#ddE|hP(pBIVm;5(ZCb5s}(3!ll&4M1=;SL-Kk~ zitnxH6kZXT!co(l4K$6$FJqjWk7p96k*zZ-GPZ&#Dl$sx7plWMbg+zw* zGyT(lvGGlS@mF_#AEI}gXi2fdymsdH=V%spMs4JxXgepf=F*zO_B+t3U0+c{Nq3vq z_I63rLF~=T`1V7)3=J<2yE0O8$E_u@F&}jmJ*;ikD^39h0Udv?r*zeV^ zBdyW<6UO(&_~5;fwqS}R2}3&*RVmk(G)0Q{xF*7Ks^`AT(GU@%k2d5Yy`6bbpfu_2 z{YR7q;2@$VhPkMogGvXz<$WGsslC0U_YB&`Ee1~<`1Ki<8&`Yk1XlVD3BqvW3a?82 z0@*7T{T0}S7S|NpWo#nywry6(cx!p#?_iblnr!5SWvp8sf>|HP5ZL4Q50gn|!j{OZ zkvCSc)B8|a(|fhSI`^(!VhlFo>MkCNuB)#r*u~JYCq&xyJ&@3jq;)a=nS2FRMZao) zZDyVI!2Gp%3W{asV(ECC$AK`+3M8xJhEpnWX< zpQ{D+#ap_jzKoiPMTcJ=GZ-vV`JXR2GNBJ=)v2w#PfshKHj61Tl_?Tc6ltJ;u$Rjq zG@vN04B!ck@2eL1ztWSw4?>OH-068Bl$uop1Td2 zSL^n+cvOp+^RB{{$6O3LSRbp(nJ>Vm)hZRW_!dW(PDEw0HwLrU!fpv>uLF~}DjO5b zUe9IoDbUSA<%Wt3DSg&2fV_)icacO}1p+4;D1^D{Ck-r`&ntKDcl0*o`h?&!l5<@w zbF_pR;v0G;T5jz5!=r>6Nl`&$&Q%GU80C5Y`qYACwN={TZ2l+2E_C_P3STf6U zj4T$yKGc(gV4w&c8AgmgFyyEL%u#a-TRYmCn}n^6&Kx^mjn}>%JfYQ+5_9GsN-il* zu9HkrcxcG!!HvgE*Cg=eJ-JdyA7Poh(?-T&**);8q}K$$yr|%X>>*n3tSPB)OU-EU ziw23_P-wY;E#@D9twGA+=5#YL8c22h#(Z9U_y&%^j`<~O{zVY_`tT)75vhlGnLQH6 zvFfEdo~qL{J%>bMLw)ud*9S!?b%gDmGFWtkG@+3E4;IzSdy%9J7M+lH1eB3qzvBT2 z&gfS8^g!5cIuU@9d>TZmJ2pu`;vBnEeMh3lzLG-6u`m3Ru1x2h>0+dqIcq6E?cRDK zJjs-4^CyKhiT#xC0F9uzv`h_fn2loUaJlL!Z7_MaZzs)5(sJunDZaTs_^&RA_=A`4 zW^4=)5XOwpGt$&rEjgrJFFQv_WM9;cQbofEZNI#Q5z_dE{q5)2w{JMomtQX{RQ37| z!e9}TQhSApyn1-SfrNtNG5)jA(u>%xFTOHryZ+Ww;Md{h^8|9|lD%kRKA#v1-;G#)|G0uy zYL?&cpc(Zw^1bg6B^Sph#58;1>l7;It7f+C>swT6)5kt@sHp#$N^LreR%#PV^V=W$ zpZRwfJ(;9pBfa%^hfvZs=5C>$$Q$?6z&y%$H>k^mopM zwEO6~uVh|c(raBfahpHEI4)!R7h5KVK^M3SV`4obUd$5aB8F2C_t#Pp!8-9`DbyKz z zVf|~U{L1H7D7#SI@Dg^ku92yq)i*S^H$oQ1PAEby?=a&qX;9milgc}4bTU>#uTBnB zc#5-sEY3cNMFdASN*bV5-Vk?KA9-I}kx>Yu#tJj0-uCn2Lb%+= z8|jTjfYJr%JqX3d1%vF9w@1HdTLI?FN`1w(TrCItu(~j=1tUY;N-bEQ9?V`IoVp_D z$7<)3atXXv%`mCJ+Ua_2t+m7g#X20@1{bU^&e$lawyN|XcdBguM}$? zg&OG=s^`xA!seW8ixYkHz~QmNWzG{rO&G(w{n>5?DRQtuEc%UOSAQ9p# zi+)X?%e^O0&Wn0H#^~!IeIf5kuYQLF5t5-2Gvj*>)WHPgeow6$`?c*=CF08f*7{f_e4=_8jR43WlH zr#IlMp5UvkFKc|Ykq1gn8{8iEcAgiN@@$H^R`05Et$37#_Y<6W%ZxtynD*j9>#k%%W8A;n$S;rCqL|L@86sOUJ3fVqs`-8=(>GO{Tyb8VbCz zae+s7R=H-Z7|r)|0u6P8O5D1<32~uOC1U3P%EO$cyNOS#QFZtM7J_Cp%|u?GPj{=-xh3kE`?d=0pqV;?Mz)qSE3LXoYIx=s;br57GWq0MXk$(& zYh7{n5p=`KM-PSH)AdL8E;u5^qle-;MS994`I$Y%{Z`dkvb?v_wC8D>>;zkhiJFbs zJ6KbEpgn1$+q5y5vB4Va2^<&^INr;DM!`L>+6%>ivUOhy;w-8bB3oF_exho`USr^R zCvTw`84eup>@EB=FYK^4=e+;}Ho^#Ob&odO+RAleSTTQ?g=MPs)BlT%_v?%-v_JM@ z{%OQoGRHxfo5t^yCNYqv{X3zRMYioBY5xX3Ng{t%DC2M3znri2CdAm$5d6XYO$=49 z$J(udN5OGa#MgUQZo}=!-IH>xGV8u%AR>YwkKjDJW+WvtYHqtCPK~;va|L#f2<$8@ z=#7oD23Dkl>1Fp^Uw-d4UfkCB=-kbcxtpcu?)byYvh2AlW_R-r2j|uWvyMy(jbEqQ zAd#?)Ig!1gIICKwN=24pEL`fh(|}+0M(%G{Iqcx5iy{MUWt9XoHa27M@5Q_?)7iTz zqT(_v?BA$*A+D(@-u!bZlPc(nO9dw*VgVXH-C4tuXbnuI@FwZ*B=s>8Pn0S%cw6zL zp-^GHIeOV7Lk`E)%aK!PIDz#(lZ~lL^^?;Kp6T>;(D~7FePeq^kj#m>5M7^C$Tq?H zMGUjQ8z!8v@VCwGJQHsPqDI6iY-Dnd>OZE+>r&@2GN|c9&JR$w95wR?(vs`?Li}>=p>y zxeSxAv#&wKZC(zhqORT;%v>MJ+MH7%!{AcxQOtp?y3m{(i!+yp7TsuNtqN?vF_^is zB2xs2T{9{&pM-UsSt38ItS5t+t7P;upR}^p1~W@4viOSAjj8qir`as6sW`#Z{*Dv4 zXKN$9^oB&V*2B56-Gm0!J_xQ}p(MyJRd%3F?9SNjxC;$tdAMlFR-w2#^oR}-i zu)iH}-v)J*4`=!$TB*Id>Zw@h-_jKv< z@{`5t)in|)`qRRX-eiAQ75bxpA*~>7q#^j9L7wtXX-FOVBr(zu zWP<82O_QU>+@@P0JYZTfgkNg0E(Lx64Xj+7qKbMz77$_5=2of|;p?0AGfDkvLm=7= z-%~;`HqcFbcc5H zN}0)0;*-kS1XBYYx$LbhABTx6FiN?m;azeS^4@s{A-3pmTeGN{G1EM0-y?+iYwj2f zL0EZf^!9w3Fgp-;t3b9=c=Ba|dU*1C2fe{@jiLXElTo{kVhedR)VMu@xw1DP_TJH<{D+r)QwBZ0%5d~?rJ|WNq@j!qa>$lJ}@J2Df zudY9bSC7DSH#+x$UnTz-9G#?6Bz9bKY$;luiIu@|$&`qo%5K%2(+~TdILT_Gtqbx& zxTqN`osibBt;kp_a0cqMkQAcJmVpkmj9Eib%^>K z={@xW&^E$xz6vE=KG!c zyWe;=*D^26INICfJhxd$ZH0KT@5ZYmw3G3_UJbr<_yg=18+G}|d2YM@7(LIe1>NbX zj%m+VrNjmtG_2HtgEan0x2HFgJH^UEvd*8NrRu;s0WgS}R_WK<(@NB)-Q4u#PeCh} znHP*E*&IzGBjD7yLbCjf6sLS`vK-BJSD$E2L!3nyx)Zw()8v|Dpt?EX8xi9ECH&et z$@%ak(6{J>AdgqAIS;ts5EU3L&8-lUo&*}wIxs5O_fMKWD$6u-(sFhyRqMex&{Coq zBN6-56DA_6SsvZ*79ZZnglWJBwz)YOHoY*{!tlTv2h%PYOxXOQ14!5g=QMmh!O%cf z5|n2!G?0hx zsnBqVfy%sEflqMI0A${2_8kJ}4)TRU!zodXJQbdZm|HS=b1*S$E=B4w+1T{bA%(=2 zZi%IvAJnZ74w%Q%-M}!#vLb1Av2J!?L4j-0o!;dYly7@zn*B>-Jf$KFvr`rE{lME$T8qE^XUfZ==@Nw(Y+yn9#inVyk5cP&GF_rqKu>l3B8+ILD}UZ3HQLn0UEwW9w~M9I5|TP@`J&8ei1zI> z-CXhsfx8+n#aPYwsk>lv?oAF?U_d11cz$=ps8Q0@&uTKzdS4 z;0w3E%7U*RJ#lG#FYLnw9{iDEpeGA*M!RVcWB9h6owT{)km?|YXpAYul3d%gBi;kD zY*Q4mRoaqUj~BJLF56(UGb|pKg(xc+$|n4G1`CnK^8k+3mIIHBK zzdl9tqpsXz0wa@R{)=Wj{DN)6 zP8<1&a!$;QHGSkQILcFUHZR4a+R=o>Ozke}Fn2Fv1xcSQoud=EU!mT%fM9CPn^*eL${pm`hgJs4)aQLc*&4={^jj6DuykE>bR&#)nu|!}{xd$L1im%x^ z$lz@O?Ek#(U0)d=%HGA^F()ZJ+mkad~9gzUij!(D6`^%#7%_dr(Yju(Cb_)F!tCFegTtQc}<jtym0pjZ(`#ll}?{Gb%KG@H}4{_B~MS>&CGb?fC`DEJoB!Gx7cby;3N|G~| zw@@ThekQ7j*Y{o*-l@%`U>>DRbrQO|6c^`M2oO4x>#5;YrJVBZDl@5aq*OVi+?82- zel-3n;`>Q_&vMsQwOym}(yxwo6DQC_SmaoAZ+3z*Xy)i?vhD%(NLup@$3$Q6Wh{P1)D&9obo*>Uh2!AGM{E=ksl^e8nA&kyoX_WJwCph^8 z+_~%{)*Y#_I7Lbh#Vx_H^hbg1v1PR}9Ne=$Kq6w;j1^WqYo$+Ms4Kr0^W%u>(H5vr zK4HaJW0TUxdS+cXvp2Y`>k|y=+2Sr4L3Z-<@i`WNvvYHQAb6R?999p$bxhmzTq>LO6eEvKj*U7G+g6LMXsjA9p)6 z^f&>umEarWTjN&uJx-5LTO;p5FxFU}V63>3D|sm%6%WQr5Z20g53Ki2tnxW=q0A%* zJN1vgN5ZuiS&mX;DK*x2;|kz7R7&kKV~zZn5sWGMCC}nff`Vh6ISjJS+54zl#Y+y5 zwfrE5AZu$;5(GxeRw@fdv}MC?0-4B$oyU0z?j-OKyr=0SF8i#+1^}3fSNxTVLywt? zZM!8R5`R%lLK+5(TihMVY}s-zy` zV2^dB$C{PYzbbItjgly%P4BHY)S1*|^9o8NYI<>ecvO;M9ymr!uZP|a{H%F0U7^&C6*9s;A03w1{27i{%FOrm3E$a zf%#TV0)+6yzig;SAh11dS%+n1y1cf7N~N&6+QC?DZmF;#fzN&nT<)6Nv2j_H#JWN@ zgPZ2im>1D5*Gv?0oiN3_=nW@rpM zitl!hP*)D%n*Gl{AAhCoqd6yJ98);Xx9XYSxt0G>=0)NfdDqi1PCR5*foeQC>N#+SSMfkU`TZgmP<5f6@S^RYvv3&D!@ctKf-8fE>; zE=Z7(OzA<~%Lo?Q+#687(vE*#wB_TA;Tq&5rR8{LiQx_!&|mVU7q=4}Hp~>)j_4G- zIEnXe!gg;J&K#1}53m!hds4(Jy(}lDag}=iTY6>UYKdzOp{qKw$R|mGiEHHDhEPL~ zW(DdOIlFa+v?Ez}Yx%>B`^Pm!zz{@heN1y|=J7*P^qMIxok@yl3sck-T4=AEa(6rI zm6-O^`V{<0MZYYZGICfdk*w!;8Q2?IbT|<;Uhl{eCp*5vRK218~i&&{j3!{fB8x9ycm$` zDNRr0j;5uizwpq>o34jh?+@aC6{+O~N$!Pc?BvhzZi)>kxFfgD9fug<>xd&vVqJ_J z+;}m>Ksm(t>fU5AWKvbXg@*C#am`pGk@n~`L{C!TK`uu!ioT7a&5m(>QvaQS<6UN_ zGDqT=1?(7KJ?Jcy*&^}YjE=iTyg5R%ENnILhaZcVA-u3>{L++wI!h9At z#pipMUdmd4#O(V?smnQ%W=~IHLaUo-jO^+1gPxUi2j^b~|LqJs=_EqG z=ct2&xX93Z;oV97cSnwvyQb^C@DwSGNi08S;InL0QcM^Dyxwc|q06e1^8_0T4s9_u z*6k|tXSVp+9cRY-Ql(S(lPx?a zxwdGH{1ghPhwk2}I3{O2Uut~9w{g^&MCK%4Z^=B7%r)Z6Lzch9$n;**R|?XTJE=za zY|hM{*(ozUzJZdti>bNBW9OGh$xpqw!iNYxVQ%=%K3 ztZk{at#7#0`jnmZK|8BNO4gDwycFwJx0Twp-glZcCz;bZR$}{e`Qe$}iMEd=9VdxA z%CYKelcjozq6~K+E6I~PGhU7B#~i5SP6ui!+4>3>!OP+^;fNjY|25*uN2SC(&gyA( zbK2+1sU*>q)rr%5hg>%Iw~$$Y25`?!YN*^j8@GlvURtfkw%E-H23&21J6G*P5X~(J69>`qPUy5p1BJWVVBhj33tnJJ3YnoTni*`9DdpvY=yf0rG z@}H1nVXu)WY0o^nJ+expgV(%-`BK93jY^OxDWQPp^l5U|kuqAq5^ZTiTiM;9Rt&bd~JLslJ8&3 zo$!z-aPeB5y;%39O$&W7@LVVPS2xNpQ38$ix`2~FBY_qq_;$^H+O4KEDnX*8ggrd< z$?+{-z`f?|*g{)ON!20R(y>uV5+x-a-KX7-j!CpTMq_R71I zxPzxIv7DF4sg|{RnV0}?CND0>rl{(>cgdZ{!{MeUO-WL7EgzhNWIDD%>K{t|(P_Cx zqNEucBhA>vOVf@yOES}Bvy}A3GG|E=)nuCFBCpcQY%^q7r4;il#TYV7e#+Ek#N;hP zhM@`hv!L-S4m>SF<4QRRIYy&B2%x?19jW|Wsl2zW8~G`fui4KFRhLxrEFP7_v~MrU zm_Mrt)iB6gY(fPeoK0v;6WaO?N)w(9(u7oLg8bA=_pq*7h)~(_RF|BVNROwKO?qUW zE2IY~O;a0V9}F}I6cgRfS0}YxNVJr7-4hRlYhNTj!B;5pr#4G|LZV~rQ3aC(N3>|n1q+aI<6Y&9{Qbc@0U(>i@GDoS$ zh65$JPL(R!nFFOza?&1e;n!!_?1$_B9qE?gqQ%TUg}J;wtWOUADsmu1HZEdkV8Vg} zM09eB%g%d}%MQd0dMgy?Evt!1tJmzi6ST4??8`wPT3+GbP5g)3H9E9NIGSlwPxucp z#F{n%)}M3ah?b{e{f~o@Mw#P`f%QrQ>#;NnSj#Vg^(qIfk7cH~lI2dlGu?B7+#Fss z+qtc?PYvhn#tj%l17sQuI0W-)le}GYNz)0@JJQJhS7HD)j_DBR^KjbcEcr|!P3&M@ znY2bCf^HxNOABs$^J_NSc1yv~wpdpU%gT05fTvi%Klp}vY(+Zs_cVlQj9`6HskiWS z5KLfuG6sGccT&i}6>>uEBMoR*BJYN$-rOm)Y^w!nA_3C0Rz66N2i8!f7!ryL+Yhilx5Qd@QiR%MyLE=;kD}Y#4iz>)ZiuK*VOH~M%{YkRAROZ>WIh7oo>Xtu$^Ie{Gr&WcNjRUzm_GK1hCds| z{}s|HT)kv^U=h^M>69ln57Z*Z)D~8Cc@G?$z$^GeA9LJY*uV{N&RiSE%IbK=SwzV- z%~nU_Y=X76O19g`2G){ygSDohh~0u|ke@NT&a9SYMZt3UquLZZNJ!SUTA5)8P^h`% zAKNM4k(3`Ug&gFrVRl1;eUSwFB*7LEGyq=+3z(O#{A8`4aw?G8y!ENyyAl3e&%^4F zqps);wP1MWr?{;H}D;{nTQr zjW*oem_&cddUW@4%qofK-MdM|?PoQKnAS8RbhaZ!0SNb%t?(Q-@8F+zOqoCX%fvoV=;*B3|32F9030dfeCt-Pa;uk{q*U*QU`%xo z##AX+3-C^UNiQF8rh-zA6Nt_yQr6#Ea){sw>+ddSB?66WofAMJveF&kk%&h|Hi__$ zY7(*0IT0aPQsR#zLy-TrG5s}su>W-;y{_Y0vh>)8j&4f%nK*lh4zomj`$tDabX}R{ z-0$v|mh(5RlZ+Um`Txao_WbHAZQdZ&#v-Tdo6i^T0=Mr}Q@R=Lp+U|**!Q73)n)eA zF3ztFIOpng6r<#^L_krA; zib&3VU1ej8EQZA-YXsB+=b{rR-|pnCNW`?JA6Ohg3Xi_;m|p;-t#7C#xFeci zjx&K2dGT0Bk#>PKy{HdIW}$n8*Pmz)$oEUW4Hw+g8zpW|x%K={(-T!zsx1g+qD0H}{o8@R&V;OBuI!bu3r59Hm^Z zunV|CS*a8}==GVNp&oBWwkP(D3F^YHma~LC)*fAb$3dl1`MzPJ`(g@e++Z#rUY90v zP936-=E{bI5hfh*CM-ik+!3Z>#{rh3|+%W^^<0(XQbCj1G38Ku%53SOz)Xcau=emNT(*^Nrlb z-BfKG>c1^gzjA|SbDC!T%e9WIQdZUVO(NdBp-II08yyh_skfz)0wf!(4*6}t{Tu0O zZ32r__j&(9>2s=Mf<0cyQEzmTNYxHetDmluF>mPSXmp8CbV9?at4g20T%*%<*l>!b zP>;X%1X_p|!n`Y-@zVVJXE+)M$P#^91!ULKhG>2nq0iHzBXpJ6hZ2;ciM8`dDSLhH zQk?(<-&uZUnV+(`^dP;6apVuwxhiE`>la9_WYyc5i~FF4T%Y~Zu0>OPm86fhhhk!V zV`TZhKr}`Q#C*C~dtmjvAJ~qyVa3rkLvi}dI1(Bj(8>+CT&^Fs;E137F@MUispiE{ zH9L^@RWm5+XhwakA0ui9cp{Jni0G$v>Mud!maY zg@)O>O6KAYGRjcgaA|ZX*02zxV3FZOp{yZ-tRCN00;eEZ5kZ2Qse{b@@c7B_u^~}J zF^z3UMK+zK3l4{C&IcaSf)9p8TQK4sGm~E#&a~M)n16OB-c50KVyF7UEh0gf-;f>7>J5{qP_ftp%vH^Ian*XsGR5 z+qr7aJz~#GJthMs$rMkEC!~Tjf6I&=`n6MK_B+-vqh-Yu4UGcz&|A(Gw(D-aR%#C0 zLK!De$BMSr;FDL#5RGb#JEj$YJ9et2>%{+wb5HV9EPE2&i|k3ie+7$SJ5|zi53pUs zRPP`%%k|>5{5ZKo@R&661qVHs^HsCWah>-!`bio2sl9{-z; zoaYY=XBtqJlQH%E9_Q$Fn3?MPt>EBy=1B)r935P)<@Xx*@6VD- z`j|4YWMu=w!QpeTFpZ-_1}K&i>tO3TmN$agIQN{#nLhgDF+PIk^-v#}>!=Ax)_86DPV7BLn;^^n*N-)c zc=w4W5ik9|NyIgcXv8U0Khvc?eiN1`r={FAq5$#>>c`LFPD5|>hdZ;|4BuEj&y0fQOe}w;l6a*Yz9fBBjWT(XLv*qZ|7B74p5aFXds_36*Lm-vxr(o$ExW zJKdyPyHcn7y`Am}XF6+24?WOFcj_XOAJIwY>7?~4`G-WUd;v4=tPXmJg%wSmc_c8b z*zA@{TPLOU^3|CJo@W3}eI3S3MOp^ZZ##5g0wSyD6-Hc!SzH`IM<`k)3XCvvmKI zbf@^PH2})9(~WPI?oX1gk8in2cY&SmoM!2YBwat>Mw2eVP8ViwN2jcY##Bky!&hz6 zeLUOrAPQE%b54?7|gl6e(mUJn;6J}n0eusg}$KZy>aJfvK5^^Gmu^-*AI6kKJzi`z5QjaeuQ-d3{Z~-FCW)X6eq7boAGxd)7|(RI_wH;3Ss$ zGS8%2WT%_kEZsjPT@T+XlP=FrH@;cAKS{dYzRf1x1$Me~nx!j}bf@|bn)#Aorwg-M z8~1mrr0eFp!^VHN8MwUXOy`@&plW0}ki_gxcO{rqFEmQEhg7xue4FL5*SB0AZ}|4p z&f4w1jqKvOgfDjJ5-y>HXghodBVYHJucz|WoGhjT<;ac`t7C#(BJJqYin6hI{*+K=VXPu?UMpi!0LB9EpL>hR3DR!PIL{-1E zPbkTpnqPA=m29^!bY_d|^oVIq{dV2!kz|8TI>gmERCM=9lg>5KZxbz)|1ARK4w~3g zUOq*sFENKz6Gu%Nl4~hbs@w&NulXW!wSJ!+`z{+|jku}yc@TZl8D{H7)IMKuPn>H@ zGC~Qjh-89y%o{j5q?~I^8&|gp2py=}^oSD4=Q6oy_Mmlgl#`R_Z{!Vg4O}wkx0fc5 zl{U_Suan|4Y$5H5D6lqRJw zbq?3Hkx{ zI-0*gS<>io?&5Ax-63(miN+m~xEqL*wjD&MI(Qg4EJBNanC!FvTu*=BG|h|^{!dF? zO9)RNEOmWNnEh{l6CNe3{H)ZqnNUUO`gy7A6~aFWy;Z5}LV_Zkaj4W)LU@mGO>L>` zDZ;O5%REA)UC;AAd`TFO$dv>a@e>KZBIFY+!jpuZgii?H5axYBJmG0V z9l`x&sjCy=Ou}G724NN!el~-aQ=6|j&K{H z17n*`m_WLDJf*D#JdXh52YAZZ|CO+V@K3^}Cul3-S;8lTtAC&z!Xt#g6Ow)`bzMc+ zLimKxE?nxmh;TjOUcw&!UFN!!@Jqrn!i$6t2r)5b zu5$?!33n5oCcHuTn$Rt_%r%NIlkgy63*i$&ySOsfMTF}K_Y&3-{zBM9c$Kh&AoJ-H zo&(y@7D9mV9AOKgb9|YrA7KPx0^u#f`J}&=@Ed~BC&O(6r$@}*V9W>+m-M*s9+&{F-d>ZpC*|!WdD|#&&&%5` zd0QiI2j%Tic{?F*A$d!AlDB}o_2I2{{+6Ng@NXF_kK4A~Adg>fxkDZ|ZYh?>bz9cT zW8#(_@));epFGBFIV_LMwzyXF7_ucr9v5usE04Zg(&cgbmTTnEZHrGHowv-FN79xR z@@TVVEf4F|qPLiJUx%)aD&>5om2%it#v!ePQchy-L^jtsH!!S5t7PH?HNtJgY~Ynl z_ZUMn&3L?`mwpl{82OCe?Fq`pHa<=;7#8fPJ`P+0^-12s2Y7J`Z#$;gp()L#SYXir z7grP0lWI>3Eb1LIH^ujD=LoM)p*Encm08o1{|~Lq-)gtgo1cmmhWyTAo2o;gzGHq{ zG5%F_k_HcJvB6$xaEfj)wr+gkXoJU~zhyVLxd7JB2kZ8~*$s}gFxWasAHBW>koImv zvtm;saQtmUvzklP{rqMPFwKHAyS4$QzLf>E1^Gs@>Yrhj*7U80;e96GB}Jom%3t>HOuFW0uDGS@D` zyM$`OA;J;Dj|5M9_CZ1q!r6p@gi8q{31bQ43Au!+gqsMr5M~kXA`}po67C~BOn8#; zd%_(*~ zB$4E^Jit;Hkso$*Lxm8?q#V`rBkmP)#XFC6ZB%S<-<zAdUgwmM z3zfJBI1C=j)vc0uBZF9_&e=`3@w>6Vb z1rtJ;%P1^mq3QdXwAlmDHE{IIf!UL#XHAHQ4xx;LIf1ei_0Tfm?(!>`u?Ko$U!2>z zBK0Tei9MLt#yrU-4E9ZzLr+XbH!(HvUGl8H7?T)fl`Z~Ggz;x3TUVS2Y&#RR*3uJ! z`d)KyVvk$(zDy2}7>My#;}TD39{+w^)^%vz(ukF5pp)+tuyLc`sGBK(ThmDW1Wuj9 zUHYJI)|gUqq<5H4Ierc4yR>XRrC|ib*u)4)88J5DZG=-|XZJuZV4jeO&yk7=iBXKQ zeQ(=T6grfA5((hDHN9wzv*<)mMia@LHT0CjTB+!O$bC3s|4lsay(@l1gbHX?q+4)c zm^HsseJdBo4t+7x{e93V>bps%`|?8?_yJE_Hu_kC%N64SCBNW_Y*Pcpl$ew&&6*d7 zBI+p1t9{`PWZRz8)z_biYilrkf%NLTmRGm2ETD9PR`K+ie{I}CBXquBT6nFrFma8% z8=-Td+jpw3UX&b-M!`YBo=K*kLBTe{ug9%Psn}6boq`L*NyP zgt97~NV^=;%HEepr(%>X>I0m3lOA#W=#8Q=2Jj;2TGVqHV!(Y_zQg2b|nSn^zj#7y~HgZ*V090&S!D6HQ- zUaumpux?xbvPP%K5_*OSEk=s3-N4+r#2Vd$v2v0ULdDsn#KjcSm|y`%=!^7Q{&|$0 z)gy;v(URz&iE$&3tx;E{ez;oai)hr%NmARs0cRVHI;{4zOt@5#s}bSi=$T_Hb2|F%#t4aRQK%c~ zBepM{+Ky(-?ENp-dLKcZJe6Gq7}Kmht?(^u1ygNIL=;m0K8~@kZ{S=M)ftjsjEUHm z6Ni&5fn?B4uHj+{(H~(~UH!9!;73DX4uZgp9Snhqt(z#rDq?-~9noF5SZZKrlOGYj z*c{K#(Qt3=sI*g+)iMgL(ihvWJlV95VnGex8=U74%_aOQ=&wGSHPGFXUa;14xrySX zL-HfiA;sK(hgsskpPCtMNd--@9Zy^azV^w|cxlOwR9X zY17*W+Ak1uuV)DH;;7Dnu6JHRb+&yGLD#y>Ov;p-pg;dH9R53bUBmoT`4>TN;|I!y zZyEv>bc$~pM5UpE*2(eyZBoc?Q#RVhiM?BZ9TtwTlt8>)%&xON~DEqzlPS9tNYG=PqIof36+ha{R z4wH$2MO;;#7g&UP_c_j74rr~GTn=b4<}tPdEzFyH>1}z&L3Vm#qtm3KRj9v13??6_-Tudn+J)}6RI1&2BQYA7w#`wk?CFXm6` zppu;$e!Chp{JuS3sIJtL&p<8J*gaFvKzTRpjJX5LzCbTOeC(s{N6&aZ$Q639B02P7yM0CZCNGy#> zw;SW!jj;#Nhl^ZnFW7dVv)Z9Go+!OLs{upMr}nw#rsMlDP2e-Ro+G6&G0tzq#OT_X zi7_YMFc@HEyjiJP8Rp1e#SgQyM$adU4{rr3&Mm+ggR3YS%W8Wa)yRsXt9YyH2=8rS zN<~o)KZf(8qUajlhCa5Mw`+Mz*KapSQjVV$MK|(xSijxG+co;l$J-J8_FLZS_1hi1 z2|LTUHmKHd^N924xcR&(iOVQBs2_#9^rQHMek^xMs*Dw@^skjq>c^_(`tjrn{U}+f zA8Xg^$GUa;v3`SoZ1}ByY`jB1Hkatf*0uUkI$u9_6zE4~zJBbQryqMnVHvbitRMSs z(vST<{ixod9|x}zcx0%J`qyD$t)XI&qa%;(n=8NSlkQ*b4ut!73(w_@69}J$g<+x^uv4kuGxK5_@!m2#{j=kq8$<=u8Nn4mSE48U<_J}E6Hj&JTdG_7fJo|!cwAgg8Xbhvo#?XD{OoKUm zlQ^mAe3t$uC~|18{A4j*T0hkEqc{D?qC)SzdE}1vsE1Z*n?2GTuQd-UwLCIwr%yBb zZBxv24*w(aArL;-pQXX{m|c9?(-fLGbBZdyQiNBjc#-|(S@UJ8x{WWwpwX55HCh(x z5L`$3)5zUByzy082I|aDIWAYK;Zl|i#vr?_DU=m0;*Mw$U~F&ExX8%G+lkLN6-Nr4 z*;^gH0x6D4^^Z?<=^yb+xAdQv7!dui#!-5wXz6wX=h}_45>=rT5aGs(#nVCQW=4p` z)4;+c*W8~os(MVHo2bWBR2vpLtAA)m1lA1n&n|6BLumskEjr4^s%>aQLn|YlsZ=i? zpfeGVa6O{c`c}&Bs%?#L6~5aZu4tl!tn)mdr0rSCkzTuXgqIGJ=#)lNbFcZNalLKa zvpJ=`m(P*o$9nkHDGr{?{%nMm9LIA*n+d*CZYi`~iM;Eb@n~jWcm6M}tNR8H{Fr||rE?xk zum*<4dTKjbS0sD?erMSG_mMxAedbB5yV@EdZaaLm4p-wPD&Culc=#S?I14qpUedRJ49Bs6rwp+uuJp$v^ z^36g2T624NU(QMm4PTOW3>!q?PjH^wrop_k+63z7&*|nH&ARp#Ov1j^zSVH*44Ok& zAxWL~;Zac!D%vbLQ9QY$2Q$XO*LEP^Goc z3M&1u101zD*a2IIQ;U-T!PJ`}KpH!ukc*CE-l7hIh~Z-8M4@|g6X;%GAQ)wXPN9P6 zAR9~OjZCdJB-iBLfJVuqRA00NbKY;+MEyZo^tEYp=(IKRE>`puPi@Ta5HAs9e%eI6 zRVHem`MwuDNjK6--JCI$|ikn6>XPXf9oW|O1$ zxEIsv)|pTaBxdtFv{@sY5utgLovltRwgY;Nl(FI>Yheors;0g=|eqD9k|XhO}j|WpE*ta9&gcHnWwF?{3?dE3hkEXmtkrjmic9o z*D$r^r)Fv&(Njy?1~lFe{{Nm@FQ49cY8`v*Bvb2yp{;h7c}0I&&+Lcq<443A*y;sw z)WqeSR%O4$z;-s8QBF+bm{t>MhZB{WOR&R_N`}VL4Ps1OBZFRK(ZX&m}ZxM!EZ{+G$SShe5!@ zpF;(CjieYeV~zZXY}yw)O7T<5e}<5zce&e-ub77NC-dcP`NCc6WHFL6`govzvUh1b zw7XdMyF^>}+b@lBFsY0k&q`E6)Y()WMR{u^s)-%X=K1zWzAvb>A)iG3WWIfpZ&Rau z67`e$swLmTM)@S_C-W)Em)R(vMEzvGI?30eQ9gBGg}yC5FCf#rf~H*J6AFrQ`= zC1tFd{DM3GZs)Muq9{92Za+4dC0@zmTEQ>FB^jAiJk=xQrQEluOp~BZajFoQQ3}-< zypl|6BPpUYN0-yYB6}QzfklF{u|5VrKq8jg@XB~ANzOd!G#Iwr(RM$PaE}0mP zWfR?@7Es+ucc>^m;as|@3{a}CSO#dgw6{A0B)=FSF&nu`hQ|A@7RpZjeQCkIQ zStxrmjPT~;W1qeL8=>r8r$Se@E|i@k4ELW9%GU7eZTp*$>uY^N2kAg#=7koDtV6d( z(-TkiLY&(t`Sj#K^`bz1ntwRgfz}}PLkZ06O7+N9+e8^SiA#cNZmuf0v)~Wjn>@Ia zJ*-wb6^$7y?tD6OIyh_4TUNQ)1==P@o^)>T>$zI=;$p~pgL^%7+2tJ1JCxOQLK1{C z_j{qN`ePq-f9uRWxD1mbkP+cF2p`L#xRHVR_hRPgV&}wl2ulpQfI(3 zbtIFPf80HMW<4eeI5xdWxKp`;3ZjFw-+7rUVK{c(fds=bs0HSF=SPvTQ zE5Epp7BtU35gM74lRGhdp_}mg}EjR z#TA6&0zfQnpSSSObTyFX@)k{Ho3${Kx>Frrdo+w4?4sBB#9?FsWFich1Z!BJOgJZF z;hfxMI47Tb66?oX{(A0#n3=iamZE-6du?+v|2*b)9XHA0{0?GjGVLwHH(A(B2BQ+b z0>{D8WMIdZU-+lUOe)U^Yq#|N`oQ*-wEvH|Yk{kx`2H6~xe9qPQ7I|ym!+kZg{A$l zLJ_rmK`K~2D}PG#_*sHjrl~-3y;Ao0rKOpcrInSH>8-4|W{Qt|WvOXpX1N3v7AY2W z|KIP-?y|dg7p=eG=fkjj&zU`Q=FIEN%$YMI%02l*pc~9WUYg|XlzopU?=LXT33Gi< z?tZ*t3W8|CfLQ~02 zfWL!5*^QN*zN5jCSttXg&ukQkYRgcyr3PDuUR4pANn_`IYMtjiYhrw~cW@3^~b>|z!zwU~u? zs#;8G>+1C>S`I0HUM!@^ckwB%$)s=8C&&Co2gELnBFTr2CM)$ZxkJZ6_e_WAp6QS> zrZ+mSu5#lmWN18zEiSIpk2W4tmd#PzCvI;nCDz*dOMdw-^;E-j-;Ghxow0VIfUQ+NbUew!Lxl%UN{%FFqgw#;~MjDe5f=L^lgC;aeBcv{L4*n8SG|Y-I zeyYYwJqnOhgRzoo*oDnSWkY-LPs1*;(-^VnRy+%OOPk&)xb*xSCtXl%ZtC~8Wp`mM z*z~Zqt+Q^6+Bpj8pwLQFg&%Lc32t#Ou3^?Iy9RL>x)a%ITy5hcO^fguE^l)yGoDbb zi*BE3PEg+D!Q-#WPwhbAoW*?S;@@zQzaHU>Mlyry{gg>j!?bq&Y;g^p%X6f4Qk{$O zDzy6WqK;m9E6V8>5MarmCF7@P$#|+QSt~N??`nZP`jEN64Ax~W$cvqI88!D&*uBWQ z&?oN`7=%j#vKygTzAZ%FqLn*;oFfeL;Yx0YMQ&2^epabf7YfPqT@+F7gYb~)i!bzS85G-B+py}q?ObH*6bJ(j$F)lT!4mqe|V&3+T=!5C=IPiDwOLY;JW)DCc9Fh zXa`yKGM*0+ta8@m>{lcQYOxO*Ymm5m!AP=GeKxeAxz znIz$0rhDA??Xp$@vLTe7^!@QUsCT0 z_cemPmI!^V5A?OfzXIR5Ba5%k-{{GEgK?_Y=Z10p?|e|l`rI(A&-s!%VmndL%R0}b z{CZKY`+{$A;avZDF{`EJ`6NOiBHMPSL8Tp^|`bc69V#k^q0G z1bBArXSlwkS=(xH;=lS!S>R%cbq&94TzyEkH_9eq3Jl(FgGzD|rTqZEcPi~@mUfj| z+D}7a9Sd_B$MU{h&4lr6FdPjhb*#S)7IZA?-6v7hZ-o|hpYy<@R@6p{f4i_NEQLLl zl=Z@{P?BkfaDu|Vf!~A{HfEH4+t%N}qMojd-Q!r)k?QA`qTcl%S=3ts*6vLAw6~)T z5)LWqDo=ifDC!!T^jv=FRLC(bWVGk3WKZivIOBCJ-&9huwCBFVcb) zKlC**thC4~-gPCqvu5ho{GnFy6Il))XwCjxU2$LsF2*(uVwgXQ{R5MIzwAfbQ`vhO zRAfKOpQ0b_Bvd@P;e$gI(ue?N-W+xQA7%v6MZsYFzN<$@d-Ax0EbkjOXrNLWqHk@Lz`;Oq#oITfm8^Y%`qA5#S5@+wc+ z)j>-}ADlHW{QtN6v`yLe0V;pCJ1GGo%wLOI?YsrJ?wk{^MX`p+^*dE1<}IkS8ac5M zXcHxV3-?&_i+rhEaQEabLBGVwTNGwFQ5nUoS&865)-3*H&04%2FY0xmm^}QAB{;FQ z3+XRt5VEx^FJuue^0&qr*0|+qPTp!Lia|B}Adm7kwmsx=0ltv8vGJ$i@qpxU(IGsw z+t{j&;!nbdgT`xlICzcVHne7#bP)#Tr&}RK^w#1=>=R4+|7DVUmd}&jwR&8Xl4?I~ zeweZZTgOLQngpBMI#SUDUJ$DLs8|F@;1A}lI3NyVsq5nKgG ztMHA{t6i-p?@q0M5dE$FQusG#gN&t*z?p@Bq?J&4 zZ>x-JVZkk3y0%}e8>$Sz`RFKL8g8(Trm@K@hSL7ogwhIYT07Y@kRe(JiiUKU968x(5${= zt;XhJ*%Sh%!FdxU;S#K14~q6}Do8#MUz8iTu33?1d7vRKjhpDfv^e#~!v5Qp&$+kW zRJbR_Pk?V!l6GSPn0)}&?U{|S?7dyt8QAK|ofH!djrQJpK36JkHB&x_MK6d`&ws;O z_}K-*S~z#gp2X0D023pF+1r&Jix?%`cXC;5m|KMVpU0HFDCVh&*uFp0v#Kb!=!@LS zXwS?(Sk=S^{-VLyD>n^=t#Mp>JeR}y!v1kfQ>jRbbil_CgSAR}R zh>MJ$Z`EV*^M2KzzpW#TlB)-{>t!q;+Y``Cu+$;=)`t|q`296}x`>~46`%6eT3*-L zep(-?*3VeNPyZB4rF^BlU&K?Dwr(F<^^}(Hj3;=2xeelEWZ<8&0$VP9Zw$DeLYR#T zriHjc@VkWYDZ=$CobfdLUc8S*cmnt)z)MY1{uk}NPqneUsxrX$g25XC=bvxIpvkI} z63^;hEe7EprYrX05~i%y_?O+q5dA_#&tr5Lnp_A&6Rr3nGp_+AQzdi_%IYodEIjo; z7-aU}?<-fH#T!nw&^Bu+O;4bo=k0T}&U%A{EaS!2x5AWno~#VwY`kaY#~5_b7KaWq zx5aQQW~&$L+zk>X3lVKG@7a;Zxk?_!Z)2TlfcOnEqIjFmwTyo^btJtS^n(CY0B*{iUZND4051^Zfzz7dLbwDO<)QK7lqx$cA(NVx3Xc* z8L7&Ljnv^vtPQOQ!>E>0PaD-Z=)r%4A77>@`P*NFZ*K39T|T!LN3*aA$`d8q<@C?n ze-94eMq_$^02BWEk#5P$82z}=@Eo3mvm5N{N5$*EOV~g-Fm&ljFtkoERIyDmwB5we zE+a!{s0@{y2|>g`+lZB%>{4D^O-{D^l6gQb3>F~$_opfUdVyl}d} z5h&MLO=Y=`V7cN@PhyO^xw(iNUWQ~1>mlFs8&qY(BpG>DUVj`dqx_0}zO6V=rM&SH zM%IZvg%grpY$IO@Nx&ls8i|cB6fyCd4a&ac1En!$&m4f%dn*hZE2)KjVw8wp*oE!S zvDcei;et42@d6 zNTt`~`lvON&P&9oHRo*fnZIL~WbB;XLjtadG=y~c4#cwuI%SSPV*H5}{+4`4(&_(G z`0(&%(|{u6WTtvQYYmPf=naFGnp>57Uk7&++#v@8g})43OAHSw!pldCP%j@eeP@Kq z^z6%h6Qk@&z-a?aH;O*R$(Wo-q<3&VYiahdqe*ST{M?Rym!~Ia$B=owi zPn&{S4SONp@ebg!J349ncXzq#(r#4tV}^zmx}#amU_<~*xaZ%5T;&Sg_$c3m zli#Tyy;VCsJ=gojxA!G>^k#GG9Vxb= zyQ==+6DPp0QkunK!&Q7V%UxO@sH1`KtU)l&*vxN>J*&F65zZ~34Ht$d(%8aoWncK! za5GQNrXsw4PrXSoWJBbSAH@*Y9= zhdZy5xHjK&uV+=?HkiHA-v;;z9H^K3Kx}(g)?K(DIkyN$Ov37a6!<2*esN(c{BTqy z?3i$_)%-*A05ha&mP>cT5uSCHXH}BSD)ae3E{Hbt^~*J1xRqbZ=3_PX(CT+5)!t(- z_o)hVq9Jlm-bShmhMBP3794-=!Z2lbBm{QOV!m@*Fbhv{CSW37)NR4Sbleq^ztcOU z%+s?H!{LV5!l;=rok%$D$@`Y$!ZB}lIee<+UgyHurUv!VB!!RQ<#2~2XT{VX>L>i= z`Cq`75>*&g*dAXM^sh=t5jL1r==zEpgN+6SjX98Yaa`;2HB^t2Bw=ZS{#`10oXTYL zBn@jsEmrRXOvq{i>!1N{<<62{f~9f3F5+rxO#ASRS0XaSz4Y6a*XWobyF7P8xLD)A zj6(u88ithlB1-G|{>tB3cyIVSs+E6kw})I=*Bd1&2UxL;m(Q$VfHf}T!9_2n^A$^^tdK*FqiTmACQ@wG?zitf)22Na1bw zKQ#hd%@^~X1w9x~7Bq&8hK0Rij_pZrRdoLP!bvf(ohl5U3DM%N@4PS6;;o>5{CCUO zt(LDF<$J*WkII*xv24qi-m$FZJNvMyeD?@Jx62TM-lJ@VGXP(9g(%-jPrfK$^U4L? zY6!u91ZK6vUe$8fAaXLJwKuc;Gc59#>fTVw|87b^sC)b=7hy)rLU1p-6)&n`gmYnh zSzQ>@@cREMkCceoFORD4Y|3NqShYN^U3Svt5f5fH>DOEyA@;tq0Oqg&er%`}0DsB? zn5PxM)71rl#pU4mXk6yC<=IFV9Htb*#Smr;(Y_;vX}Yi1UxW!>^)bOnaZGR)laRh% zq2~;GMH+oU$1*f8zgSJE z<=`=fB7GVJFnI8teM*LuX858^ADj}PO7wk&H2K6(7jJ2SQrvfv+p=&eZvIeLVW2PZj=y)?pgHmMRv(&U zVm-QWY8xLdI@NAa%ziM+Rj>;@$7zTYR5;GP(@~JyQ~*2Mlqf?l_(gqi@b^c#ztsyq zbkL^Nop+ns>WY_Wtxj;8Fa=#d|kG&BBW^IIH? z7j;LcuveTu1jU(#AhEGc+0Xg^j6b96)xPATzOj+~(pyx?51{9PlN*1M!0gHOce!O9 z>CYT@`9hygjfT3McOe=;VRv;v4`4tq44+E_UySCW8gEcH?9f^$(3aNPtUAa`fTm~B z*DBSTT#4~KI?OCj^Z5Z`3s!#Iw{nAH^bVnS65d<{{yhX1tW zDvaXeaa-{&JUb~jjTX|}rMTz~AiD~qIT~!j6qp2aKp$rEtuD=##E5>x1&LZ~u?nbZ zJio!xo5*SKB-ZDJAc<)(-{my8uvc5X3b!>?;m^?>P)Qcu$KTPAjT+R#;3u`-ciixm zO%48Tq*{Y#FFNTOJRQuQum;=oAEPYtmb~M$6w~3wDXkD5=GxO;fzT2qw+8*(IEB-f zDq_L$2@6`)aBRwZxTU=1-0slh&x9!-9D^+2EClcDSrk0Q!r%{h(G~_B*Nskz#oK|u)l8~b-p-T{mJ8)Ln$aYjeBw`-aEv#Ia! zryOrP^G(i}8vA;+#|7e8wD$GtnC_d}7W%w$c6>Pwo@KX$rDN+9W%;FzMRSA+$>O;) zf~Dtj{c#)CJf9Ee6}!DUaxFYwtapc9i}h~92qP`7cmPjX^&9w55984(s2JbnS|Lm) z4K49|q2+2VQC$yqoGhQXF}_++`^A6Lr>5eULqNqKbqJXMKdtyrt}*(+aSe4qlt0ez zTKr{8d)m>s%ul(2Sr&6-{$!ai%D{_uE&*q}lHzcAjwf#hWSx@PRJo`SJubY}pvV2- ze=}f|-ljp8X}?*HG-7-9$6rAlBaOj^JUF2Zh#Z=&6S)sWjN5*Of$BB&bHlPWTu9^d z7sThj?cjo!m+Z`n!L3NxfHLkriPf^u9jKd0)35_|-aPI=acwt@J5ZgmQt{x z(A@AK@BwU5`+A3`S&lJdZJZ~WH$9F5b##5R^+69Ql~mc*G)8P3!H0z-$feMw_79^q=LH z{?mj0)05Ga{pVlhkif<4KlxM47ZdS<-gE5Yp0Xc}TGR_K1wEQz-r}+APd8m+>`#YZ zr1z((j~V;ZLBR@3fBHsO$NqFI`8pl_>4=|eze+UPYN`^lKV33F?N9s8(W=DB^`{Bo zxQ2RR(;oX->VxdR7Qq>{^3zYqKDs~tP*;DAT4gP)*p&TP`vRZ0#Uyaq2IKpyZSV`8 zKRr49WgD2SLDp=8HuAQv7c@cpYm%`5txB27+>8A#{uJ$R30_3|TSkbtM-EcSE4!l@;Fl8R0I4Uy%|-rn7!n`t5rzB5 zI5}fM__Ai;MmA60dMfS>yR8fr_@}V;fWTLV3Y?V$)oz<|tPeQr!+ov}n{to4ae~U7 zaR?O+6Zi*8kY!6m&Wv+5r_2Q4R(#;-d%``n{icFse(z+c)^{IFr zBvb~`U%|5hT|mW~mc4FNjLTj$L`sHX>z!A?7%eRdS6}&f7me^>!h@?@l{XQ;+JDL9 zLb>+{|0RFxY>#%`Ma&K;2dK&BvppXiMjF~G(*O5=-qt8p+zmpq?#ag2{ z?|9VFp86IhWS)y)`WX;pag)T^8CQX3M$s_z5A9#jPv2l^DGFAe@%!NO$k+3iaN3e> zye|ejK=9!qzAX%2>x(M~I@tLa)SxeTG~Uo24Ohl|{XIB{l~=~#GF9gGLxwXPquf^Iqkb@3?%^92{!i`)qvL=Xy}&I}H=M{;hokYZTOIQq7{+jfch!KDc6IW8 zp7wC`;CMez2Yz@G7SqObZwN`WinNoAaGa${rcrixY3O%Ulud9& zUwS_bFR}Xn0pIV2O>cQv7;H#eBCZ}2r4_-83oA<_;B}DQ0=?)e>Kzt^{VSCfKb8hd zI~jSDHFi9^ncKcao|`S^JDOdV=w!r&PzFB)^uzwjLBvCsNI&d_uxy3*9;Fld=;W%l z^}+rPOtcIKxT=(U&c@X2T-kHOu6K}hKLu}7Fl_z}R7z+8Nta9kJn4gK^-S4^PmU^i z4IntK7Va0yd0bE2&zbBl9O^!{uhqWu_jpI3JL?G*1_`xq)!2ot^xPfDGtL*bvT%I- zn`(~J89yVsF&$?;Abt$P56y+bS=Ao2Zjv6fzI8|L>1%MGrQN-HCHNQav(&p+s~(c9 z^X^r#mD4oy-)M7Fku>y6--yc6Tkvna>)+VX0ibk{u@npodtZ{*tE87LF6`m-pP^>U zb|aQrRx+Zcvxb$->O^>Uz=a2qJUJw~YH{_Uc0|wD^Sw4&tG;nY4Xt_z$)7~4#)(68 zs5$IV;VRl>(L`U-!edk;3PCR6=q{t=Z>&cyc_`qTif~X3s(v7kAxTqk=uRVJ;e#!^ zSMIle?f8S<*t)^}uVH1hAx`Kt%qXJg)CC7nu|7pbSj?YP6W8IXE%KDS1B^;7MWdG8 z3ni8H#fLm0l7QFS@hYzJPEiJQN5%{Z$&#XRw-S$pO7B|4cj+bQmZQC5!?K2gz|a<` zhecWa3$YH2MtePeqTw7|fD zpXs|HN>UHQjW4jk#_$RaWIc}6(hE4;%VSY-K(sFaEA(#7vszm9^4&mUXwLoS!D+{v zhw6&LPCg!v@yX%g4KLB_;C8H~=zSX!usEO;hV#Pey;}==f@+2<=Od>HK4er}rfPE9 zU-gxtN5)cO6CT0;AXhUS(~}peX&>b_TX@6<99|kM{M9#?Hp4g{*6%RB!|kcE1KF%JohmvI z0}FHuo))x3g|EQ^- zO%u>LrQoK`s17@Ff0whoewYfQB|iyba+XH`>P(oJPuo?u{UvV4-}s}I3Zfe z=*I55x`xYMPRx+|laO(SJUK?X58;lMNpY>dfW)UeT*IW%Ko~>wQ0*cM;cl(`3qf3W z%th~P9ogfWc+uTk1rQzmgROfjjjmAN=1IDI7h=@aw;1I|D8VWXDOEAv#K`;JF){bm zhbvJY=dQfQGxL3%n!x$dLyzN%_>MT}S<((I+27}aXTnO(;oFuA@z#uQ#clD%cJA-T zctL0{{x-z^#3RM`jCr29=p?MhFantbyCy)VH;U?4o1vTjp5-~})E;9Y!xCdprL zc#5NV_2Z8Ql(V7uQ%~NB>_ZnXob0A|T-Z*Z{|Dy(P#-YY2th^Gd+pz_SgWe*%_-XH)#{hG$Fsz6W6t!h?W~z;hhJ9e8Jt zmod7rCXxp@?Hi8m9N7~Z`a`VG!RrTXnAsab*+3^aX0G}22dQ$$oC!_%qR*gmvs+lq zpH#VH@zhoBM!=v)?-he;x2#RpHK>5BeG$;vBQkb9fu(R|7YH0g$)NwnzP-cjd`!b*A*am$muJ{|`^<&|3Pl|i2(wy^obd3VUY8CqUdSQzeu zip^-w6SYD!Y!4p*)yMbxx=*OfR#e|%dHEXXvRFITmN=V=d+GM=tlrnq@1hg4wd$Ti zDgb>av1fyBFt1B$K zr_B7(o00hhWZr&~H5Y8KzZAu&O|ov9s0}PS3VmTix`QhtR9D-Ey9Kq@jkR-29j; zeA|=_m-D{5PGRp*hxf~4)dBhg8hP&woG%yk?*aZeE<;s1r<-uuFaqM^Sv}^B3%Wkf8T_=3hzT1_xvPfK5 z*G!q90uwc0G>$CgUhT>{7yB5TWIqRvc$pj)0D_%@U6dPNSC0&vw0xnDrd0c5;m*Jm zH5liF#&X9Mz{>3i3I$VvRLvH&JSi|G*=yI3tu)pol8 zv+iD-9Xf-Du@Elv!-_&%Pq(nFRv9r3wO*&w^Yb-VTI!;L$MgCCWCaTnk;++nW&}%~ zg7S-!>c3eq@p)+=n4*jyzC0)=MD(sSK6HzzdPN~u>4Z#$-dHGNY*n6o06r+naT5Zv z6qE5QBq>ibSK=lsF^|oi8jjwf2(ss{lJo$dTiF<^`i(P&evb=Su>QRjYC^fR-Xn;! zA~=BHo430=w^vkSI6vUU%*xPFsMEzt;Ji7gNus!vD|gSpHJMx%fHMtQg7M0 zOm$CLZvy>13Ey>RB0aV=;ZmsGjhcIe5HEHDAED#1*w_NIxvUl$Juz@*jQ<1b)bKx{ zPVEL91=K4XXK}<_JOHyQ#ymUY8f(k}Vx>I!KnKS0zw+|S7azOpK;ZX!yc?l){k7WX z>k^7RdHW%>!h6Ei^M1KgtHMz=Vs(m>{zBP{VrYV^{IJ86dpt4cB5bfubO$Gfrxx~K zp%nNEp`rPCZa;Yi)+l_*D>o$jLDp4zQDOJ%0!qUa8MRpX6T9fX*Vp5j}bElLg&e~Hj;sD)r9a1hH!VU~)i}v`qVw=!M98^Dml4`jH zt+_$LSy+ zfje=NxzWDKWV$jN!*dEc=He7A^T7Y+v#dSMvMuh*B2$#$=1;I-aY*U?)-+^pd!px| zTft*6yI2`8Smdn)Tlzt8G;zR5an#p|qcj+l{?ZW+ao0ta1i3i7O*tPV>6C6Vz$K-G z@uCRR6`RIojyQ34b^sXG>+o#@wK}W~DGkSKLyGRb>RLV0*g0=M4V`p;z;)!AfGc-l z!1cKrj022Z@1?G3nDjTr@?O&n1v-_oWfO|F1@4>SFD&mZs>HKETs7156kRoQ{T&cS z6NA4z!^EgRlebKa{+6Fh;YBubsj<+!m2?aGP=5)0p>d>;+_h@>HZ3O}tAyM}P?*Vex}*$r2VBiYG{ zk$f49v!ptQXzYSE#TQNg2BeD;0_bZ;w%WMkhhuwjy-NN5?)p1?;d2b`1h-7Pue~eV zjh*Ns&;N=(ns)UasoAZSV{5DfD8@>3qB4@w{(Xr~L>gjzohiC(f4~1KSF8 zA--hjDo4CS4*B{=VU5)zY)r8Vn{|dS?8Y=-Vt8;n_RSi>81j%3hNUKP+%Vdpfr1`4 z^WNjwp3YGpGim82OAP+almyAU9QQpvH!B;fVM8C~sHz^Xn5X*4qTN^Ofri zpSlqb+4puu)ar=JorWknb*?g-35rCFDQKk%`2&}$xU!xm}u^wbMrhB zc|bnsei*d!&o$9HQ_!kT|AgP~Zf*L0Cw6_*^y|}Dc_$vTTDi> zI{OB>ef6hfvh2ZaK+(RwQQin|?{I%4igBzL6VTqYxp4jE9T*k4)(cNFz1^%A@T(LL zjLQ}6x*U-@;r=MW3zV>4DlY?Yr>i%Oj2s1j@c;`(5Mw>Qk5AJWNpmBX zZ=ivZQQiUWk;d*s^jGWxP5f*)rzUek010G*7CZF3}N!R2n$xSg3jd>;qxTP?{LE~n$|sbc zrnS#cZke$E!YuE|^bKt8@EgFkk15}j3Z?XH@U{nrTzPxJif>32)PMLSlQPSU_Vs{^ zjY?m=cd`27^49kzh5NS%mSJ&`q_)2aQIP>`H3G8!*g?;nz_GoN#i>vU=YTX;sn7Qn zqbau@E9@yYgyCyf;q~qf-K+RUd(2YEzsQ?}+YzvN1l1ki^!2pPBbvU+d{LFYo|Q0b zEEn^9?7j7`$P7zSE(dwe-^+v9DwzL ziK&KLS$vk-D2Kqk82ix)QEJb{BU{+|kzMI0$d#!p&56nki(H$Au2dNb65if0&&_HU z%%Ndcic$~xLZ*;|f7Z*IX8%$j)B88Ay&R5pte?#Vx7D3nt+p4v|JV4j?fxE3TV z{lmf0wckH%h;c06R<$qB(E8TJnV-1R!OzlWj`BID_W8*z<8Y+uta08cRjL{k4YuTv zImDOao;50VI*#i?uYVA8Fx)~^$%Wq(_`i>WStqsp4>94ufa@OXokZhm-;_$B>qoAK zb(42$jBiR6bS3n*-n8g~k+JC4j&e-Z^!}4on#^Nr4dZF*nJ3j=Fw1dlFHJzg(q7&i zajM&k&3N%-QRY!$Zkf6DHtYtn4_s9-anZUN?j#Y z$+0q5$;qLTNai@~bup;*zI3RJd%Vf}y$#{X*lvC(h8%AiRj9u^Kg9G<-^@x?I@z=J zl1F80k!7~Zb?9AWYZuwFP7}qP6|JcR&MJec%K28}vOxNgIA(gDyk%Td4Vj%ML-pLk zLfOJXu}=FiNAIl`N=YWZPgSC<$w<+D*ThM*Mc(9f%)>h7!8(;QiT3aH1!mEH{2xno zBwJC+0FA9hh7$L3D_{+IT0@>}XLKcZ3!#2sPxjauGPj<*WUhxB=7`*1SV__=NjhY5 zRt&C7nhDZxfi!mu_MpQQQvvUY3LobIq8+|so?rEj z#vG_O8jE6{Usd^{_V{}4!ThRB*!XaM<>vfqM-=B*m7HIdr78Ch#r$fZoL^OXJMZ=O z+#8;hFharn3KJ+GQ+Nd-x`chkwJR|%#FCL^UT9o0!mQBHCG@W` zdyn8UO_9B)oU%91o4kP8Tfpo!v&r5jk*DdfT|*ABhK8zOs0Af)qAs?qk&8wu7oI#1 zYrBJ>=XjH!ASX|dlbFBH$z!5>`SLbPtEevP8I83j@zrs#p-qud+33%tzBjqRn>?FM zVK$qBHcM7#&`>hC>=?N=GYmai8rp(#1?Y*f9iF;DP|TNMx3N>~;zgBA1}s&12K<Euy zRHQUq&6ao~TefrCk_wThaQif-=xJ=G^o(iX;1_Z;SWQDbkw(aTRn$P-pn!ao-|E=d znll|CyL*lzosh*?3~UnxvCTe>p?Vs9$-GfWT}2w*)HK8sY1mHsN}};`s`8$F8Wjz+eDq-D zGN#c-5<$`BcZS8An*j2B?BCDCxL(0%|TA=TN0QOmCduvDA|W z`zH5)@{UYVt|0fl24fSjX>ejs=;*^;kz%jbvPEjzt2Ir5`;WF1qinS=y1=4nwH1)NwbhnWAo&&i zk5((5XtfuJs-(4A=yu%0WqW-~6kWVsN>NHTJ*CUak&?0BRzxyoYBJ)9WG=KOBl_)% zpIJRx+o!Q7=u>lZA#-C)=6%I5x_rRHBq{8PZPox2ZOsGzVA`!AWU*zLk`!tsSrOE2q zpDg((7HMoz(-2Rjagj9*Zorm|!N;k}Hv2UC=xID@l~s{QW1X6Ycp{C9t!apS3=^_? z&pwSqe`@*I{i7uxev!r+H4X7Z8Xc@@hQrLlLp&Tv}1eZvHmnuJdK=36&aEU#^LY?3=TY~ch!3C1wWy(Sl94ZJtZ%?qB zPH>iOmgfk9Pe_8Dl>Q`mtB~PyIzeB#s-($%a7Fn8x#lXw)t=P@8e?rd_Ztta>#++C zHykLO)RdIW%YB=@`2{4NKO6s*iYD`e7}2q}?48UlKCz6TS)PaiyQb}Bn828p5z=(t z49ZZHGLVdkZna0LU2#kknaz`#y+Roco=VO}%v5EFJ;A?z*9ac@!H(c0LGS@dFkbPH z;6}tuRam~%CJpM77)j-F*Ndbp)F*1wqTckcLe<8Sj_*NuOY${RtN3`4Ko%3&oY`4< z?Tq7j8164T=MoZU%s^NlE%WnMx8pn3Q}W^orpsU-}4Nt>rc)Q$n}M5LKmb zW6XnCw74ymrHUcmx6M}{g?ptpKZA_r---XqSzrpPN@kc?X4rfjEO1NSlXpJI2$i-x zMY)5F=qhbY31!sAUg%y>kfpfWR_LRJOvX?qTQjdxo{oahUl&4eZBMYPPVgaHf$;5~LOutsJh@Bz3K5rAdu(@&%QBxqWl(#>W{*e zOMT51X1}SGICX<4WfqBxN<0P8Li?0Hf^t8}ZC7PJD3=To1f%ToJ)eD=KUlJ$VQ%> z1kKK*xh*q6c>y%5<@xdVBpzl@{NFn9N1ceb7sNYC;@y-!CgK@_c*RItmEp^ynkYKh z%C?Q5+?JHLW?qB)#UP6MLbku!6P&FR{K8hYv4UWnBzUdz3<JXfrnrQ&?_^==rSfqeW9 zF1f%&c83>!7OJh!pdR!w?lNq!uV|gfjp$j=hloO(!T}-GLzL>)%w(l|LsYas4pNxw z?FoMUi$-uKqJFTsz4_ajRQ@jfSG-6@R9k2S>Cm>6t{~@4iowj+1NRb`g&m-VO)WyM~ZQ9huVv)%$%;dJrK1w7~ukM*UVACm8*{$YQS32mM z4t23yilcd9`iWi5T2SjsMYfy^vbvM+z5kfUOOU&4IgmS5Gy|qz( zE!QM*gSA7E-HGf>W(|u|%cqj%vrUxG4c>e|xz1mM|4K=HW4AJ&bS>S=Ou*2s6pV^9 z_beBJWwaCaEbMT!Ud1E9aA>9K7jJ(}si#_tRO%NOGeOY`&N*OLX;%pOuB3doX1bIF za9i@5AedrLaPQ9=!7Ydu+6tBlg3BerzRC~vKyZm5_^ds_0-fMwTY`%O!6lMlKjkSB z93%)Xv?tg_CwQ?f!Fht<0!gsH(uV}=34+hq6a4-sEz6y4WjIF=d_oc&pd1SW!6?K` zRmyaN)l1*BE{;_mBTcOt%=n6u9H>pMM#ac!0qV9ozZ&St9NrLhNq`WmVRr$;X2|XeRHntL!+)f}t!R;m?azjrPruGcu z1cQ9*R}TF3w4s1p z`ux3Ek;uO*sJ^Mn)GPI7g7uQf>jwl8Hj<4ebdAOEiN0Z3(s!1lvl2 zH!IO3c!40;z@Ff1I>9OkE0n`nK`>4d9Hx9&1%kVTSi`LZWu+TIf}&SgiS}*VheZpT zF{HUIbGUK`XjbpUO>;4b*O2_M75!&CAh3bNY$||;}D*RV2MCv7l!r0;!Jr&bZ+`7YB)mgpUuB6LJtgr(AQ5Q!kpZyMkk055M z^0FPlXk~&87MOwt^!Ob5+^kx?a&i(+`*j%<_?r<3*A@_9he zJS1t}qFh2g4}VTRpR*E_HFER!T8;ddsNy!g$R0s+KWT2uyj9tI+*l)ze@5c}vl5pr z{B9B#E&LYn5ZZpW3(C7Bx3?(|f^x~#g4-vo1SPlU=-g)Qb!b1ug60;AygE8L3s@+Z_OO5 zWPx(YrGndy_5{z=2{y1LxIz$IDG82K&L_by1&77<1OtaO4p$;tD2K}g!R3-*hO+Y* z2+kG+9p`Wh?EpLE==5Zu48u_<}! zbFKBeG#$4l1UE~^b-K>_-3K~uNeJ#29T%Hu{q90_pTAg{9fG@A$GN&&zk686Wrg6@ z>Nq6?cT~s4C0S`+tQwjWD|13{BXwMOPwRJ&>9|QDxb-@&Te9`L-*w!I5ZtA(LX&0G zwwLw0TXmd21oxzl>)6}+-6kEkCr*+(%>#a1m z>bUS5thjorfp)PnDFkbPAYxScw#Pe1E-X|TGN<*+6MH%rHL z>Tmt-10A;{1ow-MiydJ7?!s|edb2}tH|w}g1FhdZtmBr1;MVH6Soo08ZJAtTcP*xIH1bi8`)dn)SPvbzFG}?kgSlM7s66Gw;xN={nSk z>!suNhv4qlaVa-hzk5x`tqZ{&)Nx&Jwtm;*PK}r4A-Jb?T$^Fm@3!i=Cqi)b?$T%u z9d7;ZDjl~a1edAfMvt(5w@}CJ3c>Bvaq~u6ziW86#!J*FEAHPqZdwTLZXH(B?R}fj!PVC{q8Frw=x8G<~!srsgy8Piafun$@BY$p zheB{y+^eNG^mglaV|Cn?5Zu!`E-};k-Bum9G6Yv|f|g#v9oFxz(s6NjT5*{=ZcYg9 z+ANJ`&%3PO-K*pLA-IOw+IJoAwthED$88V6eW2rd{@425FFMX2f}1!|Pj9^SyO(v` zq7d9yIxglO>vw17Xfz8#aJ_U~RS52W9XI}7E6vw*T+9S3?x2oa7J_RrN#i9h%lh37 zI&O{;m(d)yyBYJ~<|t$EHaI@}Xs+;8eD$XR*Kq}YQcK_?7~yt=8`i+T?>hJh-V|_! z9SFFZAB3Oc?*gue-VC_Te=Fd67op`!+^d1m{Oy42PK2LU1zex3#&`aJ>#lbKt}EUR zxRxQD`Ch;^1L1pwrJx)6e!%r#gijGNK7haD4+E|ogxiYX^BCdIK*06>TKFaY2wqYV zenwagURr$&f5QmhB6MC4|H=rTBedHPa7{vpDGs>)gRlx=z()8vMtA`H??t$HbHFtj zVGF`VTaXWg-3aYJ3ApY<*o4q(E51SKvMu0>-yU$~A$*1~c1OVV5yI^|1Fl(+)joud zy8^B$2wM?)d=_v$i%^cx|MP%rA;QlHiMs=?M-gt^6L2-#8*q(5cpIVN7sx9@5yG?k z@Et<${Q=iJgx?T)eF=Zj2(GViN*CcdgkKSQejRX~gR;09VFTwhwui%CkPF`hkt5>YY=Wi$VPY+;Z=l<2;U)u z9Y($ou12^Ap%CFEgpU!vLHHBlEY!~{5mFKELhvHIfDl0V5}`TjY(Bzbg!d8lBK(GM z$q&dA!haB^BRqrf4#H;$M-a{^MV=6n5pF@4g76f=+Xy=leneucLggMj0+f`P>dU<|Dk1a0z5~3*<8e;cbNOkjD_@r76-ixRa6oZ|M`w zaTar>E&a zn4_n6Qi^thm;Ua82VsQ{4?Kgsz594ar6?}}?Cm{RZtcPly*!xHN9lWRwIO;A4AIMi zIfIp}Bv2Zn2j%AO1%J2DV%1@~O zrwc92)QNwTW7{41X?HsK8RyJT`_sYC?ro0pX?QyL>FvzVMW=(G)mt6qbMfimr=2rD z9Zm;7b3bvEPsh{2PlPi+mz)lMa<(|i=hD-`&*9CE{9JZA_(^x>r&I0oW8=?e{U!(q z8!L|fCNCFkReP?e9si)(c-n>RaC{FPPp_zb`BeK_()d}r(UG6{+ULjQZ|pd1uVSD* z!d?p6V-qsQlP$N09P_La{xyU{$IgOB!vR+KcbyOwDP2#5I-OAb#h|Kr)4=fzWlW5A zDnmO71Ah(GjuvZjs9|-qSc5;P?o5`Iux9^hS6Zv0!GGFc8>p&Aqvq)T6`yM+6jd+| ztLkcRRwwPH&!Uim|Iqp|6UjQ%*Q;v3euVOKY`r5t5p~Ir=I?Qw#*eMP$1WC@YF}U9 z{jsBbx>}g26Men6Ge1|K4t`dzbCl1&>yjU>{zkOVllq*q*0KJ;T%hjxIUI20=epCuPr5TdiKl~~4MmRffoVi- zmsf5XT{@fA$Kr$$s&X0m681h1gAE*tGCNq~p(uHZfiA37_scy5!v;+?2i~i(s>S1; z@W8zPLy+umJ{46AnDJCpB~L|VMpmC)XkLAGVUPq1b;97nqoMMnL6oTS~~O7t1kJ`#)Fyf*Hm7xc&XL$$}NkwwjbOjhYRjGLnvDV z)n+m;UEwfn&CPnEKT(n>xbX*+hJi$sY!NJb;&fbw{kkX0Q@3sl{OiG1*KgzWrVOhUB7~ENF_oHa?-0+rKzP9p&#pG#` z=jG(;#PZx;gFJtFGen+`{Z)JN)cV^TB{}naWe^}I-SUTnXiM@Vt1(`arez8MvcY5`UnXfz6FPQn7gjcKeT`SLHui2F6 zEbV^1(H52pYTZ6&oW@V+d;@05buXXYuiD7Rr^yEv&nA{mb$t)ruj#Gv6Dl8=Seuxs zllrrIc}?YK3iH?dUv?Q6rbn%eu$I^##H&s{WrLi500SJJwM}|`N7ea zy60#25=Z&q$V}by)7zOJ9Ji@^epWy4C?6d0se69fIrD>~Lv_#3+~*wSgCj|G&rgIi zKiQ{)pPa>x@|k!#_&L1Dk)NE?!B4s~Ka*;opPKK>e(zbxN;o*$3sz3%zU=!1%f=N5 zhx@WegLEz4mmLQ3IIZt17x!hq{KL*Vx-UC)KAW@9vA*43`{f(T&*5hr`I&q=_(^x> z=YiVirv`iC4;IMEpY`9G?1>v`6<)ih&qY`Hsy#8UvUAy7WvARq+D5D5CJJh(@b#{3 z0sdpF;_59x+x_>$^Bv27O6|)#v_7Ug^E0*f`N48)HaBy9$1{5tKFrHumGw`n<$i-_ zb$a96gC3vf#$ZmjU`}E%r*kl;YcQu{FsD;6r)@B&eK033nA3(9Q8}?N?tmZZG~7_^ zTjzCq`-J;8D~(@+>%a1UYDF>r!_3J?k zGj%dQJT}jfpU>)&AFaH`Y5dr(cTBUeRD0#6@w0nwP4#DbE%W1GPtk)+op`@vhTzVq zZPdLz#oQ+y>(}QN;nhifk8tKE_jK@+^FK%VGLvrY#;Gaq%7kMDHwb8L=qo_+XtNs5*GWQwfkz{o@MDHj`G}7`|=E(KeTk_ zr|@*}GxK3b`EU{C6q{J^Yd8k^TXM_<$P8w&zIl? zdZjXZ7DQEyE0FRxX5EXsb$yeg)q8be1&*t5qJ1g21H>EV?H=xbT=0tfkv8Clr0KZB z1DC>X#ae_HHzRHIrbVf@1ez|wsZ=gz3fe6=xDiMB{4=Z@iHmT=A_ER}YxgqZX4Ca> zo>bFyx1*5Q$YIrox=sCuUjAOk@_(ZCij%BQh~rP`B^#!t>nRX(=-%&ld9ob<169s*Y<*1zTn_U!eqg&<+kzk2LE z)%uqc|L2_?|4-Gx|5y1T{Lk1?SNz|C#7{#0Jf~+lbf??LpBu{m+U<44|Khxp;(vY( z{Eq|)OZ};L%K5MEKehh+aIV@OL-mUVf?LCt*#G|{fX@1<#!tF4KhM-9KU#maVTLN7 z&X%j)c|_8`(8SWTpy)rRZ*sY&h2chbF$Uu#v}p{6M;ObM^8?-So2Gx`awWRrH;FM= zUFWwQf4gY>gqGK{CT5^O)J1tMo$gqF7M%`$S~~Nyxc2!m_0ML1L{q0hP+Y^VasTi+ z!6TNiwf#fXDbxNTDpp^pgvSmVu8UUwMcT&w!>ya^YX5NQgO26DuMXsGe?H<&GIiqp zg6B11pT_f-wZ%G}<&p3NA*VnC6R2kM-UtiEf__yloy`*idujg*8tNMEE0Y`bi zSo`v>9)Gp*Wt_&3tveN=;Lv{l^3{DI`sa*~PqqGBUH`TEHV(-;oQGUq`|`x_u~$95A0vvh4XVSQ^_P^@p!Bnm1`jjLQenT~Olt9uZ8}wW_!#IcL^6VSUYvXb4ap&XSp2x#`Crl~JexKLK(+5T`cRX~oYPXtc?)X7&Hceb050CI@ zsMR;fJNm$|E#Jdgj^+DC?U!$8f0*vfPrcK@&xQ$(@~MA1`03)zPx$HJXX(9;@_DoN z`Ek+*nv$y%>jQ5I4(;`Ut@niJ1NXjvs`UXU{!@|oN$|h22L79b^8eUiYGM2eEP$^-H!aMu6=%L z)UW!HwUgAZ{DRkire7Vp3+Wj3t2yt~mVV`6-+3!JV0V>_b+7U6S(BQ}jnY{|V|*#m z(qop;z26bpG;~UE0`*WJ+ZSd`{? zEQam~;RrMtm*b>k&sn%1drvTHPzEP+B9r7+KD`57e^Rt}LJW$;6Pyqg%&tsPvQ~@U z^VF$iw)$8)(sq~+uCWNWPWr12nU4ItU;F$xjgOa;s}qm!9|#T&&Bfpk{-@hR#`nkG zuD$V58;^33tV8*JSo`v<9*?y4d^khp$F@BeSy(#N?YWvCO+M)wKcVAwz`{(e)_+Yt z8^+ZnpS2d2YF|EGG=4(m^O1#_T9uDhUQ5S1*5`GngP)ep{Cs>m_?h`1NBOL;eSVz! z&m&{N)rtGh4T3}a{_{1Eu}%-eIwk3$%jaN zbMUGZ<=xFc1$_gf3zN6_vJYjt2BjzkxBr1TlG1(lD`?MtE^m5X|Eu&2sJqIPcM%yX zZ{@PEtfskBb|p@X3}$apuA9R~8t&VmYy6`|#upjP9`y-;XLa|+xd%MCiYqHRR|(6C z#J}t)f5kNm!#?uQxfcI3HZY&!Vp#>Z%PN`YePX!b($`(M^>tmtiLGbmsyLS`*fzi8 zoVB>kGjY`;L2z*_5l(wNE>HfeK>B+=_k7q#sY;dw_Z)F~61U8Pn@gNu;`Uo`vxzI0 zxaig9^riz>((ViwSV^{^?k6frpzgPzCXnKt&kHVJlQ_@nL`_JIARkZuZH$va>7*)O znB!D7@XQ5G z9s_azB$@4I?+6w{*w}@S{dqFZbq;aXF;3habD91fA#q|@4^bl_=hqq0P#05`*)qCb zrxr6t=cOVmMHbvs#Ep@-3JdO0;7TGRSvM|v*FGmR`1vB4lOZyWp6va^?fZ zLoB$z&IWGR_o8xoB~Gh3%-gR(BX9eex8=jsbW^*nm&mFnIz+`HOJL?pGkVtWSpO599^Oh61Va-Q7-=qm_?dH zT)D)hS#bX)Zj$VtW=WhTZav*mj5AxNyDB736L!K|uxR|Ar6S&dE3W0+htXLO~%oA`;@r$lD8{9w*USk@xA12q(hvy z7)OzDW|`wqlFNXGB;zQ_m7=?>U|hc|QRJ%9`~^6dT~t1)W)0^cK8F8Om2=ly>J($l zepA%98znBJ-i%|MD4Eh$hdAks6C>l?>=36n%{ex_5Do?ZYgntCGLBPGw^hFwUYN3BNj1Z{x(9-tk@(n z8MfKJ;3hJDhGg~Hz;(wg@-%pOC$?`kBz;7VUKC48b-eTP-rsRpLU@_>yrtXNj?UjOF{!h-)urJ@XvC|Cn(ekUXxleE&Xi zc~b4FwBX(*u1NCMajTi{SBZ1^1>d7BxEF})DRE0IxMzrqJww#^JrZZguVM5mV8lGh zbkIU%8gVOR0`c4I3uZjy%$DDea)>jUapuW5K8H9djI&6_SsfC`z;FU1E|(F%3W+Fd zO9#gB%Q%g<+cVyZakk4iS2@IqWSspn&aEMF3``wuj)-mKfaDE{D4F`6aTH1HZHG9Y zGfuzmVwn0y#?jm0R*}YgqAE1sVa=3*nRgg*xFpgoB%);ICB}(*PqfGkhd56$&KODO z3B)n9+Rx-CI&U)=HF}NUtzmsg|g>G3szh=1mK37;zPn%=Z@D zAmUtdTsiwwbMk$Oi;=hi7F-f>QSS@3XIO9v#PyT7RTf;lNKf|pKUi=bh}$l|J9n3v zm-C5hFL}Aqf@?)w%v@3Q4_R={h#UNY;Ir{(W}1=2`K2yVt|YO zP|$qQg8P-Y6p8!7f-5C1PvV+z_YQ{GTKKFOoHKhK2s~q`yMaUuC9`afr>slm9s4l)R1gI{yI~@kst$M8F6H9d<=`3uDVCE|aPWV5sUP8WN3QjQyjrJqzK!-Bh-xHaoU78aP((<|*o zj5AO662;~?Y<=fSp2m}>?ShX(;=k(~@)yVdsmcNKcc3k@F3Y_9OeC=KASd)4M~KN& z*nV><9Au0+vMOFFaUqi4$v72KbhkLfS<5)#Jw!)YXi4K;;yP{+q6mb1Zz!o37%_%K z{L7?XdN3rqVMv|D=xt=0jlMJ$sV?ICMcOjXl`@WAeD@N!MCSc=3oetm&QiqBm}ygA z9|bh3O96|fNK9tC3buR7l-{#Y>q%-U68E#2n$Brw#u+Z-wED_EH*FawL&oXt5GRIl zCdoJx9O8sC&TJXyS%)|kO%Z2_jI-Gx&LPHGA>$l#h_g%3p^Q?M316FQ-xlIl$`V*A zaa!%8lmkFR%JV4YHB7}{EdKA3DSm9B_9CgdePXI{+)PcE@{^2nKz@J00h5%OqEDu{ zj4AdL&1{UU1J}#Adfk~wI_o6oQ_OVqw8k>dei`Q_%l9LR8!8u+rhH@K1K%5(@b!$i zOH47d#)>AqFeJKc?D33QA+vVzK`Tia=X}Q5lOgE5DC6i^Y9(0OBAV$J7F;vpT!%!D z)8tz#ZNrH5S2Q9@UbTIzwL&S0x$RYyO^PwGC+0 z4nNB(gQD@bWxA=#pXRuFdAvz_icIUGLn0G;S}zl~;u-P%2#M2bqW=BUjMG)7;kA7K z7;$a33gNwP!ObFWjKm!=(`G)f>B@W*GardUazkYr&A+n>TFUHJ(i_h>8AIA=+nj^9 zVVg5I{1aDZ8^gZmy#!oq0Ng^ra04KPfcp)A>j21@hm`{ZtOH@I%&?Y(?J~pa6Bdrm zUcj|h9i411lhFU_#|gt>97 z!obT+!Y(nxCJ;8z3>!sQwi(u!u*c1?E`+^dhMiB?J~PZiSkMgnBMh)}8kqPyOjv>$ z_9y$Dmf-x7AA8MckE8_clx2)o-1TT0l|X4vC|tu@0QBwOFCianqf(V(el9%?=r$N%&=C3J!XbQ5caVd_G@s9E8|Bq>}$f#z=oS4jm?Bz zW`?aMY@iwTJYjd4VUG~@h#5ASuvKQ*IKuXrVS@;(GQ+MTtUdfM8Tji!Sc)0elCbe+ zSbf4CGsAxV3$S<1uziGmWrl4atR6P^4e7o`*uTuMX9-I*!+eC@YKG+yHp2|Njj%;# z*g(QQFvAiEJ79*jBg_?L;;$KDtr2>!W>^=(o-xDDC+tHr%tKgM6H~f>Q~`E@ z8FrYkWHanj!p50l9}+gx410yJSIw}wgneR$>a*$j&( z><%-mHDQHjSR`Sun_|4T)nPJ-qYYmmgP;T!LmTZPCCG2)H>~X>h&9Dav zd)o}VgRl}aES<13pw}AGO(N_PGwd?L2AN^42%Bk!MG*Fi8TRY%fbBEGz9#HJv7?4Ey;wV3WrIz9wv~i0vn=Lc~5KtWLyU zCafFw92sPJjIiM%wwSOfB6b&HOGPY~uop!vjj){}b_HQSh*(d;I%4abL6+8pT`6L} z{0eN6h&o!X6i~&4hgE3@Q_vYu&zTh_2k1VK5A+IXFQ^983hDO&Wr1YS%b-foSD-dhg=r{g3g}_b6QDBC z_n=mgxeq84v;?#sR1K;FMdwwRMt~-Q@TR>leBJZj&4FWkqvp_3B8$s2eI*J3T-%>*q2y#xxs4>;&rP!8yR&@-U-Kwp5GK>hBoFpUAt2CV{>f=+^3 zp$sntIY9pgy$kvil#q`y15F3525kWy0M&sk?g~>pC2SK|*KY`AJ+Rv{r#efn)qd>QV7K5GvZ3F!XN__xvLCZiNfNDUk9)#SW zOwgU6)u3|FH=r=o)n1^xK!1Q@7gm_kK>q}JKnFp;g8CFxn63le1}Xq;1RVf1fb5G< zMxfh3MWA({y`VFo_KPb_SAsG@cY+=V?Lj@Cj(YtV$bvG=07aqPDo{S3K%XZ;R_Jaa zXcP3b2V{nB_JRf=Kkq;uJK_>`RVfCaeL?$G`V^mEfKGz$KwBWXOQn&h|3srene-j? znrM_tR@7ypPAUyR-8Ir|)LEjrpoJhGWPc3w6zDlnJmee*8VtG`Gy;?g>Hyh^qEzaE zPog-`^D1q?=Nl?*!RK`-6QVTGO`sQ$ccNE7Z-Tl&|3p1iDu>Ri4CIBri5^u+dtt=z zzDO%9IlCkIR@mSf7ROI}_)8+q!?SIT!7~M2LWgHt)`Ca8-~6cZKQ|InA~qA`U~9I) zUfV}nI8FW~58%C@k@oyfc<-m(IriR9e#EA*${}TyIr{5A(ZR3(bfLG0v{!(pYVQD5 zf+^nb#{247^k$Lmy;160BDO-Bq-87eA7SQ`-U7l2vtzA^4mNu$`fckN=1I5OI-E^XiQ1hM?$KVaE@<~sU0(@Pw~10loabjk~p_RM1;-$F>)Uu!L4zt0zk zHKki+ya$+TO{|dH$&<{<$L6-ra>@IZhk3|OcJ9ucAiQLa+Ey9Z!5YAZ&?MzikQSWt1V6ytA}Tf-0z^ysoXMw$AV5zjmVQIAzt|SFDkM&}BO~o#5gkg) zyP@Ta>UbV;|4TZ~M99CU<9*7|P_G%Jy&YmkDk za*xSVWlk=z;G8Y6Ot(-QjIb?Bf_yXAT`1!ub}wm5iS+N!RVbWlKE?f>% z7(c=KuySZ+$WP5{;6&Pum!j7jD@8mLsfQ|3%^Xdn_)sE!bH1tRA_DE%*K)}!4PK(g-y!M=yB^W%$mq-Ey1Mnb$JttIF2rFdiq7#N$zDA_-^ zeQp+5yvkX0!Z9!%aCe{%&*HA@T^G8k$@io(^QvL+Ubh4U*~0*`Z{Lqei_?`DS-OCV~W+ zq-wEXHhdE>;p+J`y6ML2pAW%hf$5&Hj+t&P7al+FV9hVF1oM#~>tN}(+QCNQtKPxV ztI+vTc##xyve?2D@@a#t1x{Hy0fIhbPN<^PXgv-r)Ey( zkU4q4F5hRxi}QGGU3S6G_4qp@FP)_=5LhXxhB2wGjY9#_Z(GN37)F+pRC~z|d?`-t z) zX`MsQTqrdvw8XDaoa%r-%OuWHPQ6bOPYNkA>jEHh9-?b4Hj=rJg2>XNVi_i$3>Y62 z8uK6J&vJ5Y@1^OZr+2k7>&iz@c>|<|m(f7=mOp^?gY`R5^N`hTcWGH2AZJ;ryGo^F z9a_stKBuL&qdeYj`}n~o+sCQr%fGX<^N$0c#B$i$cDduBnOBJmS^ti?t5mipLm8)Bok)axc29a8P+T1r)*#riB$oZ#Bgy%#c0 zZcA}&?>gE!l@%0AXa_X(<8?`iMLgY|5bM-5wNhzAKj{H+8_(hY@@f_APvmDZU*Z%m zn_yp}Ews~CipQJxPy&X`q@7#Hlo7;D*&zC+nzGvK^zJ=S7bC$VQi|a`rf?oz*3oY- zEMXjvZiXd{)Z*yf{1rU3?s}Y+^zziJdN^EcU+2-ONkuy zrMffl-QW@xESqK~(hy%PQo&4+Vv%-?G+9VHhNazFPy6scwWc0JX}|H#1=H57Y86Hw z7qzN+mr4tTv@f000ZGV+i^kmv6Bc-_T~Gef8gyVZXdtOEx)oyfV^X_VOww3yJz77K z+P@`8YMW;&nCbn2yi4s7rqr|t59t%JRBOI~U%mCE3RBX{m@@|b2ny=|4F2?1&6v(K z`qKvYGzmvGXzuA+42yUv=grhK-Hl|vkz{V!LflDlf-OXr(kVEXbGoDIHt+HVBDz>O zfwr!>d~67i7pv7tDVm8K%hdcmhALd-_wLX{jwO-*wK=57?^2xRB2S|jf^iZ>*6Q*+ zL>KF_D6({exQFkW&-HeQ_6IYIDZ~D_{?LS@`Q4UW_3WH?u4R6=^%puj$9%82sdghC z$`kGKe0@}sH%Kzm2`~OZObuUe)6}qOhNgx=q=swX4ylGWDNb`WSSW^|27`@WfH;5A zM!S?p?h$iwZaDhQIB7cMHsr+PkDJpGlE$$tK<1hUSZn+4c9s!&A52YLZp{n^%0VpO z;Vf5yW$kM&Woyvmm+?4AZ}Cz!(_1`i->-d4daF5vDFBz^<|!h*_?j|?1oM-KUy9X3 zb6m6W9j0^1SuCT}l_32-+v@3~$F>Ig=)BEOAJ%Oq9Gg_zYTM3fu;Br>&5R+3=C%!B zLXfHWNuDL z@dGjp<1*Zz;!++AB&-*&OPLZB|3yQ58WDEGl&h1Eo&I5z1}-$g)6|jSbbQxGhMII3 z66Uy+(L4p5Z}pZ!Hc%CvKU}0gTvcm$=u+On1KE#vr@RH$bEDW2fUPLTAY5Low2BS8 zW108$$yV+vuDVTAZ>;RF2G2BF|H4e;0>-KNj7h&Y)%hE%Fw@9p?3mryr=%dNo{U)6tMFGE4P1Mha%&B<%F>|`YB(#Sd zay^-`%GdW`arzHxrTeELi|N)Fx=UeSuJQ^!8G|QWmVtVmiTg>AKkkD;$$yT3XeYuUR{*5E7AclF8)$ zhmwKlx&}gZb-cxjnwXA6G)+V>87QrrkXFs)-$@gnOcgY71wBc{6RwFey;Q!%sdl;q zF6A755O^!YRw#2XA%7xsm-}87sAnF32UOw?l8FX2`;-M37V50XRVJKV<#iT(Vbg9_ ze1T&+(uzXrpfzaS>U5J7maT5KWjk1LnkW-EUJnytI%7R_tW?cH$J&;yW}y#F(L%@S zp<%drj`UjP9u~*|+%r2Q^7#ANmQ7$h9?^O9Gw@g%#KS>6#4fjol)*UlU|sHP8Z|MO z_&S|o4^492$-kM0(w+Q{JZ#YXqHfkP|A7d)SgKj4k($A*4+s+VjiH9@_LNk!Zu9g< zT|k*tVbG;>bSX)}#h-sAEA@p&F8!q0s?t2WX?lF0ved{$%Vu7pl+^ZlC^ylz?A&iu zC$F5W6;Prf&8Q%WVeF`N%9O@*;_^M`Nh4}U#l zsPO#ZDgB}UXTw96(!C{1yLyO0qXVQp@b5i-KJD-T20YYNXXru>2xV!{A~zSYw26#c zb4&Z54F*g58q*53=VqN=gi+9bQUeo|FRvZI=!gV;?p95kSYB(X)3X(3A^}_MjTc?L zC}1p`OWWTl?Vob+QK@vmFl?^Q;admIugz&68!i^R*_ALYF5#uEa1#FTTFxUCEyRgay9%) zEwg#uq(;QYFwN%K#T)g{7_8_*Vnrkh=h`82ySFY4nEE`66wl!;0^C{}%;B|0*ri+_ zl+(751dC8fJn(EW@NGeX&s>4Py`+2|I86*(7!>#z1-?{T#RGR01HT*;cpC-oFCF87 zYd$pO(537O3j7ie9Q7Jg$5t`$4?M7@ZM=^d$4p-lMd~ii;*lOUM#}3UIXOJr2)mRs zA$VmHuWr(M9x2%v3Dvcj!|_JgrTiL#R~OFf1dsI72Zo%3*LDscGr}(Aw-CI(yc}|M zk?c6;5B1~)W2C&UlArThVTAGiC+DTtGv0Eq(Os;}kwVM8M{}|C^HRBb=Tg$$q*XlW z1Y;V=#(WNUG{P?Be$Gp`0_nt~y|j@BKK;Hy6UJFd%_<^@$oeJjkd6IdVVne z;13Llmm|&U$Y+F;)<09eYN$l)KLega+5-OyGI!Grt$KOj0 zIYmKLbNFi`>{7Oe;5CML*`<0O=?!BfXuk0zn^t_%2)mSOkr$by?qCCxv;igwt~nvP`xN=Hc=11Sq@tzn~^Gw_F*St zU?u79WM<1=WoyG@}TgCGV2+)}+)saCEO(;6R?RwU(ckW|K5 zn8m>Epuj&QBJkys^-Wd~N8dH%+NG@4bQshM_fVv+(qta#d1EBVK7zxt5jK>E&T9lI zf;a0&iD74H1CQx4#>BeR3JzZ@z+I($4)-&{E~T)U%!YK5c{=qxX3aZ>+#;RB96lt# zU8SuY{?G{X1}V+fMyt=J2@Uc&{va?y%p3-jis(XuDX@PvbUsw4Jvb2qmVErWgKqWV#ujWspq`(+BuzgL`#;p7>`3@ z;Li7{&Z0g&;y`eDRFu3Ad*9^6R`hG}i0O4$l_wFE+S0UVSzB7T{FyNPS_(7^*~8bl z_^P=_)rushbPG~qN80I4_C}_)noE%$wN>O(LQ2YDmQ1}e@$`9$An$W3Uyfmn+0Ke; z#b#v8qsB`q6!q85Bw@YMD-iX09+l07RV#-PKyUair3;q{nbWm(k1kH4R7^bAF`m`R zookV6b&afAk%4kAd480fVrM(hXkO^DnMVJ(gBD?*aw{URJx+bVhwU}9xq+qYcbThcQ-8C0#%>RCKU_PEgSvMil<6n6B<&B~l(*OA;5hzfo8$ zpH1g*2P5oK7IR*D5&m%rc=VKJ^S~$HGKlU{o)3}m=M<@H^RJ> ze&+m8N=c)HChgS{((6075=E3yXUU3VLu)2tJOxSX!M$c78@xSszuHQI%Jz1O6(yx0 z7Rt80Q4Sd8I1ZoPBxLnT&P&(JQ1IZ*rKdCzF_aw$PYwE!r!gVafu+AWC{AZex0kep zC-AtKz>yHb{yYGY+DqGcr0K>;@GLiS_$DKa^Du)Ft{@&gq+>jAj2QUOpun&2z$P4t z3hn&#ra=w7lw#&+wmdb%P)hvaIQ?PvO@@aqfWi4^$fYAA5; zIhxn_8FAR?TQ{h~NVtyDdM?~}M3J$Bni<#Rbj$ti@)98Phc99fZrNckG4KH%xS3vsW;-G+@Ml5|=MBQ=>gKsNL!Z=&o?`p93c?i$!{gp_jxxF8a$9hM^tD(ZP zkAfa+tfMX^mglHhf&7yMv`bsKfWK`ta72Hfzzg@35#|Z0{E(1CtnWENs_Q`sbdd(* zz*}fwwULucc_1io7y|Rs>LE=)3`IhCDyG<&3wzX4G6ysf5EDjIc|&GXyUO=T*le%`rxT z><2hJ*$BIoyE!ktj&>m)-6azazlEZ&5Cg9ak#Iv_R{SYE((kVtGZ8JtbNFi`>{3<* zCA=Lx*gB=f_V6BjN55Z9>y**77J2oyc>1_v+hF=g*fxSb`fSUfj~?45&`0NO)9J&y zZ5DmB+BP2_$TclmA|o@AIMsmOX-2=$X%vaq$V@I4f~JX8zc5JN5tQd%(n6lONFyhg z@^Vn%eiXQ`w1x-%>=lE8Fdq~YxGe>~R65K9ZxjRn5ES@K9~L+oX96Rei^afkb43Gm zi~{$U8hCpgF9uHIfemfjFrayxVs?@Wc{0()m>5Urb2vIN-Esa=X**xD`Ff3id;yIP+DF%L} zvsCnE0d=bAFe8flgqkJ773m^@(Fq)kU&=z!dq* zO9o+)d4=;jZiKPkAA;A(Sn%p3jo`dqHbz1L$8mV25q2rAX1olFTn~n&Ggv&Q((ML= zY^6>W4HM8~td%&G+UpHrxsgcX3BgGG=n&krdz(qXwVX`3iI$FWu|Ip!z!A#d!r=-d zjE$X~mu{Kc5syTvfd_tE4E#j1gbi8$1}}4$&cZp>G=7RPW~X$bibe|P2o%;qhEu-V)nfhJVu(ugFlSm@;Ix{fg6GU_~8*Oem2cEHw{+q1s)jL-zG90(u`>a zF^!j2fNAY3yu7DyF_FKZ@?I4re;mcVOghd5I{Unk{r7?bx2C{xQUVU;h8}l{fj

      B*LDi1niv<1UjGj$8G zRj1yK=}wX-DPFt43ha`Ofyt=+1b{%o6x#g%V@&s9Wi!j$_M+P6S)`K(T;w-xHjO(|oUIYXGIMRb&H=s=Gr`X=%^aF4N!E@|*33zsd z%PX!+ni?%{Dq9m*p87A27Z-021H5Q2NK^~2gXmTwF77eZM^=FP;n9ZQ9<9jjtfxJ; z;k~J3-+k7FzA~st;cyyIfzIYrImo}Vm8K0c z5ojGzU*9q_d;|hPc@XA@JSyM8K>FDFCRP-t}_fT=rLvo3_Be~*=H9BdOM zf$@l4S?YB-%Q?Udb-tg_O+9|29ZZH0tSgY_e@?&$HZiYu%<8Vuzgd7EGvMd=qIERE z{jg`$=wN}1fW5Gmjv;Z^e}W$&mK7`-vNwduEcO!6T3Fq+6YwFgvBOi|wtB;B+yGN9 zew^$j`^Q9=gTpf8L=&)k>$6T4JnwtWucwXst#z`En}w9XEE8)vkNDs%OHg?y`xO2; zyE#MBq~=b*cJFJ0(qoWk9tVj|SALIelf4Cq8kQ%9B|<0bc;a2HgneUiCSu1X6Lt@1 zwQgY7UHcYDPucr>Y7wr7D1VgYYm zrLJLj|1UVcq*FYqFG=@Fka4s~?w6^RF68WFS8E+>BGWGSaY64S2tm$9 zAi8$pjU=imZq+ceqKDoLwfq7@qjX)2)rXc}aVc*FZsv`W4~=YopM{D4kSx{6O**1jpAqZ@Hu*4QiY(q`*%j{uqQ zKUe9wxrfRc%A($E>+!Tqs)>xUlU-&#Ai&V?fcBbfZ}8s*HWh!PDKeOL05!17wi+FZ z9bm0`O)0x{HkYCT`C(93m}r<#(t}w13HnN@pgN+;>|YT_9RkRpN!gY5c5DXi$F9VQW~CGT+hGrKV+rl8CP*o>8$alQVgr#;+|-(^ z1b@}H7#XipBkMXPshJ zE#IwU%v^<-7J^&3ZwI)Q7alk$xo(X3eMNpl;Rk;7Fkppmw}6kidAl?l?g_l#3g>)f zyYy?gix7S%z9++N#P|1z^D^9mSGP+u@Gay068zqU-wlZKJ=|xM4&OgVoL+w;M(A{K zBlHHn(Wo1Mn~C%$(?HlMgP%^HV$!A3pV@34WHzUnb@GT2dc96>8Zp9xaFcGZPB%n1 zRIjHj(sa7CH1VH)bvly?@pRS^x?#EzCPW^N>HXjMi^I>*-*U3wf80hh0+5u7S=LqZ zCLvPhWY3+$5vk^X>Bqz_Z*6k2(!T<@BJr<$c{ll2L)o`>AGeajnLvFC@I}b}NuF!4 zNdG!lPki|t66gIX-pR09FV!5*jpqkTH%*=F8MshwENdyibRsGRYqlD2qRN*OuEjFj z2-_B-Vgunj5e;cQ;$+Pk;bxF;`JpF6t$Us9k(a`aAYb=icZXWHiacXGNaW8COp*UJ z1>q@2X_{^j`LBq}KSj%bQe6Jl)8@a7@Eh_^i`0Ll8ixWQ%F@7Yq4EwmnJKQkC!5ip zzd6~?zr?m@<4b7I3yJN~=o{M2Lm_L?I-m?F)1c#vLD;Z|nzjCuD_$i2z#V*lH1yvi%e=5{}^tpyR-kxJ1D8 za1tKClgtqz2e8Fg{^ch!~=TX%wTY=AXqtNiH8rmpG8p)R^THpfFYSCZ~@o@uLLq@rY1ZU>>wQ z4WTcI&`tOO`kr-l0OKsL`5pj>z;+S%7Je`zGxPOaz@8L+@mcg1&GVLDQg7!&(=E~N zGxRaJ-DeY-eP(=N7}wrjy-(eI(XNf{>gJ zCx$04>Or&s)bs^4;5k}XU?kl#ib@fG0^JPlGlpnzAEL0HXc&Dy7yU$g9v(@gBYM&O zSCHbce60i^MQ&LBT(~IrW0dI4m_&1M9S3YrjIJT(jwFq(!wFA^e}0A^cGH{X0&GgS zX7)^UqCBPo9g9op2zxt_&mTw@q|lTP!-Tfuo^P}&m;b_Lxf8a3SKz_+Lm2^UsP~P8 zb&j%%`%8?oXdU@2g7d>Y3imSH4me-+cIgm)8QlNi-H6{IaOVKbF2HYJe}G5msu(0A z7&!b-Tl|tFeKHnCzJ2EYU>}n)APKw&9tBi^B+>qO5WU3xX<0=55-;O?)e%R zmtsCWkKv5@d?fypgqC7LKZt&YE=N^2mV(5u@oc7CJ%3jB%iHpej?m?7>Tx1o-Rl?D zke-v+k}?vMCx#%~*bby4hF4ph&I7B>R)x&Zr&ngIYu=PTO&Z9mblBkow#B{)UC ze=&c#Mqcv^dZ}qZb^B({&URJe!0z(fZ782eT1SzdeTRH#)ZkKMv! z$+PbeN?J_HTlS1iI*+~IcG}6p6I$7kYt(tpMFM0){kIA^an4`<+hNY%dFVajJ-L(k zJ;g(ayG7@Q12MvNl8#28k(Dl`%_P{5)a{T{23r#BNW{`Z9R9kSNm@d#+(vn*IK2f5fZM;rzBMEm7Az) z?lGv=!ZOhsE^mU=lr&sffsn*B$NVmG`t3iE>;RqRlQe-tJx=^#I^l<%(9kjy2`qgH zUKuV^AXCRBA(%Vv2^<}i+7vjFmeT}-Cz;^DH{nq1htxf=aGbLT?9*I$?TNK@Jjdiq zV&*blMY8pZQ&?`7BW_Pj_+~on8Nt5Ke6Z{xl>}p#O0B7NusYu&zr7Tq^?5ykuc2}{ z$G4yzSBWS+de3xun_;TUgVVV@-PGG*54)yyz~~yKK?ii5L1A}jVRy!bd2S2yKx>sA zqvv9E@0(AjY|yDXo8FyqmEP05cDnAW89GnX+UfeMX6QW)Yo{BonqlzZa_ZIqnDm}3 z%KJ{-z(M8S#>>#-H?I7rq2vLkYpt&{WiD|^COG#U2dfCzYf zwEVU`G|y4QmK5+4AX>n(aRoL+00)5!{KrTSM66OomQMbH@c>Mm7Xyv(F^$TI!iytd>F0tFIL!EZuz* zfFC&K(nu+}Z-q;t%Q)3pkoPh9Obcqo_C{Vq7k^<^4=w^*<=>r#*jj4`>`CsM{h-a+ z(MAYSlbu?~g?v5&E#~$W=BMDEEUm>&J{WN5TfP^wI;o$Ni)Gf+A&OW_xsF9oMQSi5 z(i@LPdIQUyZz4_>mEaxjk#r4~)ipH|tsypASv|T)l5hwq#+!I^$~8F6cRhxAD#kMN zotU$5fP=a}*TJry7^b~6u!&8tNBZX@={F~&$BBZ2o%(TH4!zSqb(-`je@A?3PJhC_ zzqpDpr-qKL=}=)md-NEfFOj=T_lv0pZDeosOjqwo+$K_-$Tl%?aiidny}R{EVefN4 zyY|~N7iE>bBnYG416#|zVErtLQ&$-~>)U`F0D8S>5K66l)27Po55FT;se1sL)N1%Q z3+l6SXlx7Fp+m2hwcrO_hGxje`D8U!$l@zqd7i7)n-VY9rOJhs6{dPd(K+m1EIOdc ze|`ndL>pMzDhR9Nh7M(Aw5(tn)X@o8 zg{p)5DE01qG75duzn{a8+{Q`owd!Bh;kpvCHdpzc`^SCJdyzWBnif>8*cVHHAf%R0 z0STv#u7a`x#@TQc=l*ky^Fl;eX)$iD;WzW0MOUT!^N`Q{n0&sBV6LhgA^u2R(q})Z zd13sQ>;_|XpgRS&4cr58qU#w{%pRY|=_{zbTCh24t~>=5h5LmcG*pydb?bb|ve54h zOHXO|0&_J`ijlt!h=fic9!%$lqgbY_oZ~&MqH7FH!8fqt**JXo$jMYg>|x3|H8^~z zfy|uPjhq>CrYE#c9Por&r+1&v`^a6eMc`Jtg@YyW7CCI(kI)E?JaLcc=gOCDiBpg= zqzynC?hO&9+LE|jNiB*_0ONyd8lpp8&cW{b5g%T(^%wK{T{s}2LDp#)*mC+rTtr24 zL956fPMjYl0ZmfxUNWMe-u?bs(YqJxV|(`~_e$b_j7pys|y3j2d+UGvBF=Bag zN}uRLm80DF;k`NHAK@+&!md!|o+^74LWzAa>Nwsw%WU#Ix&3BQAT0ZE?I5rbtX#iy zlR;>B4pjFqENe0Ua4JNycHs`hdIVw=tpp1}O&3rG!n02(0yU_eI`nDP1m{TqJ^1`! zW*9!t1$-`AO*3xulqh`S)XLhDN(i(L8zZcNeZ#318dT3TFAUnecrY)v+<#V3x#^ep zD))C7M?&HKlnG-q{T2u0HXouH-27Cg&U3wrOXeEcM_={1q!PGS*v5NcjgjBNUPT%i zocN<{y$L%Qv(v$@{GLwbO#eBjLMD8d<{9K<`Exnt1$;M|(}Hz3M=7zsX~A8qsHf6I zIvlrfUc^nf?SWS`JezQye8%~722up8asv)$h;h~jVL@`bG&sR!G)?|J;$uHcMggtQ zXr~9m#pwa{jSkuc``L?j;F95V^oKddWrGG_S=i48Uk&=Zf$ceb=Gx_Xl8|&^8A#Vs zdd28+fj~~5qKinapVRmnS1qRhbo`#AY21P%ss7^RV%A5vDz6=e%WA8o*Xe2E&vgDA z&z}?dGnYRd{ORJ)#r(N~KOf}Jjr{pKe>U*vSNth$rJU3Gb25Kk&!4yP=L-IOkUux@ z=O+Gqoj-T+XET2u<4blr|4LLnZL5qMU| zOfMglnm^bseGc~(+_!LTa2;^naQY9oOD4E9I4j&JxJ);%4 zPPm)lehTM;`!$>!?l*81a1X#e2=@rwdbnrdHp2ZGZZq6AxVPYT!ZpA(!hHbuG2CIe zui=iteFqnW>wz-@c2eLhaKqs;;Le8|4|fS1->=|erj;h!eP-;`FQTsC>Ll~0Jr^Sd zM$0znCY@&xc9QZo;}pTMR)R*zI^lfRSRMADUDG9zTxy<;kz}T%+l?zkOab#wwg=)( zT&kRIGUBJWO-k2*<@z$ZTDF$tVW5NuCRWh|vesh2=2@OuuN>{BV_fe}&uG`>5IJ{Q zl3*yIq4pWA%18j*s$M%G=RIN-QmTcpXb$F9XLH%;nz4bH^|1)js!q^{B$MSC7H0-F z%&3T*i!bX}P7an2i7z*SNB~@pz8f;_c2k*#Az>&1tbPd1T#W4?=#eNxov+Wh??nhJ z&~;!9O4q&enitW7u(-703!F=?vIwiO2^f)%LQjKE`AI3x=Et+15T~jHvzU%Dxm3PZ z3y>S9$-iP+dE!Q&=L{u?-H?~3?N1#{V=lzT2ib<(2Ba5P3LVA2^5d@wgPO4UimOjX zTuikftJk+_A;fIsGM{U9vLaq+q(Ca*l2JmiNoyH-wZ?m?Fm)W)`2CP)r9)rn1I{%$ zS@+j*eWk2QmmqCf06u6?Ey&8F(7`O8O<=;bh_YaA|b>D?w&w^tjz!$^Qqhjpx1TxFG6TAuD=5C{;{ zenYJ4fhq%7#9eyMkh{vr&Uv11lrV_z|0AxWsIHcgalH??YRRKR+qp31?HRnV9v~eH z{m2?(zuu1!1^R{Y*>NFVxpF(ga9l04%hc(76sChU-W@h4dhrtpfJbIVk%kRP3=%cy zEPy=_RAiwA4X2C6#I5wR@?)f46`SN4-cexIp?CA*0U4Mgu6L>BUqfmlZj`tf$zM== zHX0a#*zM2agP_SjH(jn=h7U&W2p ze_UumuR{ORMs(uzFQyS41?hVC5Yk`g7$tK42!ii4i0TZT1v~|%OO}Dd(*#VFPRB~W zL}w|7dxQjc8TA|#FVEptSM4}=@(k1hfelHo%(XsZD@b5NTs&za!+Ilnn-U63Y;oc6 zeuJ?zAp@9sDi=c7u3~_rmQ>!R(>7)!dT&6r7~Jk|E)HUQw~dgrTzMxt*vZy)#dWhf zHytPqY^R{o`2K5-@IKSH}=qW>B&#FOF8&`0`4_9A6%{WOYiT)eXV_; z#P6VwMH~vt#QQ`z%7?y};+_2H+lF5Sj()@86z6e#zXobuqoSy1K`H*vKVY~24b;|iX8b;yNXOypuG0KJ`znSeu=y|HQvpOHl5uC2 zp=_$ogPT>mMTRqAP>C{xhq@E==v@|&i8vxFt5uVxdfb=0vI!eV(3x;m{4>0S&`F~i zq5YDJVWt%5zoG~O3P!Z*`{Q;H4+)I%Vs%Uc??&ST8*Tz>I!?1rRED%Tc&a`*8Js7T ztgf)0i4#99f$Zc-3&I@7G@K_DfcDRxu6)VBT^U45>R#2R5{nS2flAChF$d|rn#B;t@|#ws;8V_}(KtYF))oS^Mu5Yyl&UoeYSusvf>kjm^x_(7hci2H4WA84}u z`$@9|dC<9;Aoi)hbjmSnfDIwx7x$I^>0I<~Yyh@=R;0rQ0PYd~C%;D+w;3Bdm8t8X zaE%xB`gKs^2M;4s6|gOGA=W|X+qe@-oeq;P?Jz^&FFXd~m@hzMc9DIUZf^~wSD=Fv zmpnRtbQ)jsFr*zD*tt|;yD2PO6zQ+y*tX4qa0r)MfYF4Rd$83Qf<2OxeL_@Ioz^-? zWO(26OoGuoZ1`ZZY5Y2Mako-~`$0SwTfp-j@-FjPL{DfNw7)c>Nb2WEfL1f{gZ@&E zS+wmKOy4-s&Ai!dd=t=4^fPS*&=KA2$F*Idj)F|1`w~r{acsTcF<#!5n<;D!m~)k> zYbB77*RM4~LDiS0RU25%Gh8D`_Ktm%dcsQ80=YwEkf?7=eZZo|7X2)=LNo}P1M!K- zu;oJ=vu}3g8Th@_VYqhl+e0))-8X?*c;%J(=4F!|U})OU<3KphkG^PhluK+fJkX3C z6uA&kgSP0@fM^L)bHAuhw97U4gn3i?2WmeJpoHs5>5zwj z5)6x&FDd}}17DvteCAuxZ8^lgSZ200x-VL%4hFyuQvya?qvr&Ar7YSh)Zcp?>^IE> z3GqR3{e{^aJ|V_2H+E6D@SR9FY+>VwN8Eo!24UoFQh!{1j$d)*<-eU4_v_fk(Ei3< zfO!Bzh+gz_}rJQ9L@hspSOuT zfabRDqnFG0R>1!i-hGcX;9061UhKv>R;GKDYZ&pMxX4KGMLNz@c|6oi^-|QFP|kb4 z9gHXa6i;ZJ1H6;nm*A4iT<1p$ zWPj!bdZ}VmU@k?lx{4w!xW#lQARlUx!xXh1O2ZvZm~Sa+z0bP~30sGi`uPiW~Sjy!W)!;-m5Pmg=5$S6Nsp`4Hp?jSbV)Lr;!9Vv<& zO-1sQs;C$)mVTrL5SS(^>)YDQ+f(HC(hIdG-GcUT?>g@Z_~G6RcRICVsGol$j+52W zHM|Y2S0yw>q=6`wC+iF?;zd;K;6=DoVA^^sHL!J%s^g8ki1(o1dmNs1{3$t{e(z?j zmiq1?kW8mQDD0*{hF$gZAfC#A8x3$}3e2_BhF|r*j;A3|=lzbNM}{WcDDvfv`e$Lk zjiNZzs51;x#SUJCXBcjIgLNYTHc+i2kRUCB5N~5>D^)ABm8uxpO7jK=S=;f$ramwn zt%9&(ND?y$XKG|7)HUUIfQtq^IB5F48xR|Ign6Phj}8X_QZ{}+`TM-GQtCpPR|YUhVU~9u2a;g88`u6>jGt=AID^8k#>Ar^pjY}K?J4{a z=MvPvpM+L8^?!3MsQ<&iJ1AX=q`7c&;0oYM;4s)as44S5yc%>+ZI1biF6M%s;QN^| z@|ptF0DGE@6WX4}xc6DwuZVh~()H5yPw-uis3P~d0cK?p2fGr~kNdPI_yiMt+7f(@ zCHUMSd}2ypoZ!=)kV<;EcYWLmsa7QT+?(K2k>GP!_{6l-m{67}!KX4IpQ;3(eF-@~ zm=I@Og3qG~KI;>Fo=))DAbes*aAShcri4^4CHQPk@YyANME|(nr`4ZBYQr0V)XN{H zeQF(Gvl;GNxNf+#}#7*2%iR^Sma4lcxGFaMUtVH;+6 z16=s`W4s@O>w&YNH_nHf43`f#AFdqkUbsmAnUoqj1CrMq7G21`2mXpfRefVKvJ(Vs z1}sKDgT)V-l)@JTYv~7Sp!7oqnea1G{0tL6!^ICI?kMaW@dE>G^mVTIp^X;41Rth) zl=vDgegxyC8hk&BA{Z*wfgKe;mHW_*}UBCs<;#I{6aQ-9g%?fc!R{p=Lp?_6i$7qLF>B zH`VdIsg026M%OPQkX1pDb%Xz)^e)QS2lqDIcDVQ9K8AZ5?oV(>;24~w(?h$@Fwi)F zwEPnOl9Gj&iP|LEqZ+-^n}5&=`D#oBQijjR+^t6As0(#+G|PW2;bB z*-64hQ_i4nQ1d=G-phxmc@s7nJgF~&#KNUDQvh@kOCmq@Oa+?*JAw1!xCaO0zo0mS z>sn?_!2Nd~b7w&0L#kxhUZOlspDs87HY4(2gH!gd#K9@` zPz}Rr_VRpGoD{#gWv1mLz?b^fh&O2~4f|N^r+95CM0^ox>KKUGHL`tUA`t?3Z6O2m zktW>ZxsXRD;Z%|bGk8Yef!=FmR>~~|5|$gm1=NDIKs;&859r#(FzDp%`DwVE!Rq=d za%eGsJ~rUg51R3Tv30NqX$6lmQLRwkmZr4GN>@J?f%qY547YUOz9@Vi67ab+(Xzu? zfED(?mth>}(jBN1Xr`quz($m=sqM3-kxn~@bTiIPWZv^qx97uXCboR(Km3cfR=P&Hhr4{VjBplBHH5x! z!3!PHkX@+YBnW6XvPmakRkOcotw|kD^(3pGx2y-u@R0xjVEmP16M!VT*j?BT;pkLt z<1$Az(}un$ztofjI9(=(mYW<<7CgqD0h(?djLYSho8ia3QYQR9#J-=}OqPjd;)_9> z^aEzRtXXOu#XjTyvX^#{kuY{?GsIKdbC;!tJjdAk-+xM-LE3KM!`^`eu!Qyj8(Z8A zp`#DjQzGX9@N1RHV=eda{0bNRv9e$BNS`feXG=xA!IZZCie~9Ed%HMzp)^jBW*i0n zr2MH+B+#`38w8hi9ZW7e@L+#`04Kk@s863v?bzZ72edR5Mfgz`Kt@J4Q{m z6&N8nVBU(}!nKseY}{b3H0C$H<{RTHz^y19L;S&EZ3Clz=xPJJItQ~ zOu&L&>Is-)<~(3i-0CjY!$Pw&r=t`n5|@dk!FD{++%1$>`5o^#&%sS&P|}38S5Im_ zq8?i~sRl|-3pYd4o6Cd3ULuxMzyc29gLU?9iCytVD6|&b;E2{W?<)RqvbEI!Gswc9 zzb$W2&wsSR`s{Rl8WmK$-afDh*6=EAa1x38odH~G%VZiJ`p(6V9K->LgCfQAz= zwQgd=2+b}xLh)djT4GiAs(Sx2qc6W(Y0-fVPG*W=1@c)MqGWWt-&jR$hXu#F>^<2# zkz*jJH`Ll1mJWs4Y{+r2cY%r35lDz)X;d5i#{07y)C0c4c7P6SxDo{TN-Vbbm)xxO zWOu2BL9#k)ViOi3At`60yoa-crH<@QCo{@Iw-9FZRv{ffuYmDrs~;96_5N#(zUkdc zD^-*yoaLN~@ae zpJ(*V(3)Bs}h4Q0OS*hZCw5|)4ZmrAfqUULybKt}IMuBOdm z6@E(D@(=$O^4Y6tvC4%kHLkQwB~wV1KY%9oFCL$;9FTwxf zNp3U!E&+{^FR~6K@z$Nf)GlT1v%;-AxfcB#Z21b_O4qVPI)iuies-da+t1m-Q+M1X zx(wDzZGR`BgO(S#|0OqvyK>|EzyraShj^|9{p9M|4AWLvtUa%@EUH`syBP6Fnr}0P zurK`ss!YYSqQ3JJSpj=}1M-=2DMv0sZ<$~Byc3#qgjUQLmyHGQ@=GI(q?uS)?Julm zcRc~wOVXp8Z_xDU+*d(3F{dLt&jkF42?1oYSzWmqH%p+(ByOBGh@Z+X*UCEyxWiRq;I+Eur}Dmqz%@;tc-o5nmaWMR}jJ& z+w4qEULEN^5afaZwno`Y+;=sfb~uCi4hPD8_gOK~hc#m z%Uw1tjnle&(P@Q*rmF0lLY~bb51y~H7RcEl6Bveo zLBDF)zn~fz+n)#lNubBPkOT;|`~!fd+BaiF2OtX{Zooi^S5t{!w(=5%;yZ_%wcmu{ zhAf}I4gkAg15Dpyjz34acs7HbulHTEuxwI|cCq;UND8R0zJ%N3smeE)( zWx)N?P%RCIJD{(Ya_}9(?-u;lk%K?O_hxVCzfNHq?P`Q1p=ARR5&Js8_ zop2{`ET`{4=W+TjP2#o{@7D43o1BnOY0}d7GQXHFits|-y&-J5kxV{5rZz_Hi2lQ(OX8X9AG z;ZaQ2Eg1Q;$R?GIxRFe&$d!&*KE^#5Az}w$)lTx5@Yiv z1my96&p!Q|K(nAsf2Ga_Av;Y8bShoL+ zjwneYQz%sl+T=Cg(M!$V{*CkS>^r1f*-I9-&!DNwm7CeCNn5}wk}Dsk1i27n zqwN4B51=ci)IHEd(Qwb@5!#Z`{3X?jB%*=9X?Es)B`bWhF{0 zW>4&jMKRf{(KF30&4^RXUjD!Eyi5Zw0HR4o5Rq_aF@j(Mf);vuVqe iYXToTpb= z7Jx9&a*6}OFd6_@dGc}lPPz)&YapKn_WziB7w{;H>+ye+EXhIw8#GD~gs4GLuttLx zo2Y@X35tP0B%uX@ZI!0cwp4b3Y6HPdl;w3RwOTJfwRqPSTeNCXX(fcR!O#TM3RbJ2 zR3{Bz4VH$Wk^O(p%)6WWrQgf*{PiKb`@VBIGjrz5nRC7GWM*Jya!r%i_q(h93v}S= zN#Wy!9Jg>9Cn$^i?wWw_D2QLtM&O&fx1qg0rTn_GnR5sYs`wKPr=E3U`3M9&Z7Q?v zHJGHf=A;q{uQNe@`Hp6tFcJlKl_m+1z#dole##pDJeD;dKtMIuH&0(6PKkr@+uuYQ z?{H1iaKI+4R4(j>#LsuBbMDmGxw%xr1iPyyGfb^);btrRr^}(W;L%@$Sd0+0QbAz4(Ax{g#K?Vlu zHa<(X%{rwhBb%%^ zy-8y2)bexTs(hoh@YhU~u}NBapSkuqpDw~%yNmzk)O{*Vel3^>%i291MA|MEl zlBgaC?hzHjkE{hL0~h}4YQcK%biL^|hCi2@5^DS(GKB-|RiCIBmiP#+u{kC>NG&hX z;*lggb2?bll(LZ=m1PGuB57Uq2+8gAoaLpWdthhL>*Y_o@h#fOSUZU{$q6V@$fpzf ze5J1+?agiwS6lmz9j#5cCA~?#L{C${$v6ADftHKaLunku$Rb)K_Duunw6G7pH_^d` zC@FUNxL(_-P0rQ}g0I~K1sd+8t>Lghu#($`Axu!sjS(q1S=EoFQ+X=GXc zl}489^^c|eI7T*96oiBuhfcS{RH({;CeuIBl+~A|OJ-A&*P4ZBr>N#xjuH>>>}NqZ z4i<5LR7>TTD{F-8AL$l}vwSd2#y4-USw>5#hiU41M`Iuyx+j08Y=>7(fv{3udG zGwl(zTMPbMjt7#at)AFmXbzG@X1{;~O%67X^hMe~;u+DK@b0(ElX`WG8*kI8y7R*` z;XSpm^wIC{LP*@cb}Dfi9XBmu0``zhpin*V*ghhLSB>QsU}|0U0h)PomAC7UP z`nAZDPiK;~gS1^c&1?eNjne1-j;&qwHCW;(<%detsY{Phq#!lC3>|86p<4gQ{rF$h zs91UxUL3{LVR#?CF>bLGH33|?JdsCZ~Q@33$4{>|ZFeC`ps4COw-=B-ZKrO(~ zFF!e<+uSBE=M#7pD2EA@)17b{!niW-ilpWTOq-Eg#wETp#U}~wHUAw{;V4||@!~N< zp70qfEOL(`brsnWY%HFc92my!g@o|RDFq0~AaDw<&q#PoN?8rER5_`E*gyX7yaTCr>@o(c07`f8N0kBRJ=ITlz%oVAiO^F26-tYp$uT#6Y;p)5ThNXHR zf#lN&-%Vt>LiGbv%*Qw7mZ{<5nuxx(P64p1Dv01sP)+|C|Y>o-ccA6Vm3Oj52 zWSc@HQ}dpe=n7X#cU1;H1z{9P3ilZIya{mVEhzCi7Pdj2##7 z%j75L;b+}1;Hh!}$FOD)7w{CdJ^PPbz*F=EJXO6QzkI1#C)`!I1ASJVeu@ z-RI$Zzm+E>@#|${`Hz3M4-E38T9qPNIF^Iuo73U0`WX~+eeQ_t7_W=;bJbe)9GwFH z8a)NOJwkzfOL1nSw0P`rEbki`<7hr5Ncvk)>b(2OftjI-ZaG;vb1_=Fv@`Vo4_kt+ ztN6^bK>v2Hz}vl$iw_+IJxN%AM!u@+5tqslyj`Amnw!f^>of+Xh%RK2dg4j8YfI)X zU@Q!-hCOt98muc_B!N`_T+sxox@fK1OKYUX<>gMeH5Oiqt8ap&j6@0)b?dG{Y!xP>IdUbYxgZ5o!yydz*c14Hu8VqO6;f zZaTet+^oGiFSu4lbIIpyT6oaDPjywVs^Lm5qVNsjMFvbNu-9mmm1lo#yL{sFn1=fs8fx<^Q8O8 zrbU)AA`055 z#)fm>mMGVw>B;HKvXk9aE5RJQ-6RSir*+>Z0S0;I80m2POZXlcE$?Yz#VW9L`AOx@ zvK+G(;Tij2n45<`BENB5ZeX)Ht+`27Z4I320r&dKiM&|nIh-}ubrTHmVRf0QF=SnA zcv_NOQZ_@Rq>_@u!ak)=reyQEx?J;_kuBbK=_7*6x68ZXOCOP+_QXL6q*nqcN837- zHQRO52=1rU_;ap?G+`apWfL115eY_1AFyFOpzb$iyTAx-ik5uOF8QANQMZ!*kKF71 zX2|=c(D1Ntzq*P-O>!mFV`;jp)3ip0RcKIRGbLqM^3xvHYvN8JE8<9Aeu{g1j>G?% z)2g)^-&C-6|EdnJ%CH)(+BX%$?*!pnGIHkoEk<5HokoYOi(%B%{mCA541tQHO(O&h z&(R#BBIE>f_xRf`SveIt;y72+k+yDhM98c6iic$G6Kx>nXJqb+lh)T;t6hIOjI0Zh z9AfRI)l)q8&3}&cA1?2htbI2PpG(yoKxw**v8)>gG)#fp zK83KEHBIrA2NNo5GS(IB$tu(X+5?;S#WX#jVd0!4!e-Vq$5nomP+6O?Zt?D{nYz$! z3jNg-8ZCtovKJ;rTH0Z^w1YyMJGBHo$8u0p@O+4SRz-`u`XacEg&YJ+>nFyVg29bU&5JN9OL;{eAX7nI{p==Z*d&v^Hx4z;d30H>3n`pnHTtu zX#+Wz;(It<@W6Jv=@t=MAng<<6arbZLeN+G{p{7L9ny@m9 z^W{O%BRDNtLM@(Ea(*^e0E;?miSoAqc!=r zq}#t6`TZ0A2@sk;K>n?2EvTLLx$i}0Wdax2M%lUUYLQ9wrijqxj3Pp(c5&ZcB_(sG zzG|%hnzHBHF|Awp&**bATAW`>f2|_g`!M znYL3fx`mH-iL75lvDy}g&xm`8`u!b@w=a!>@hY+Ee6x)gN&W;|NRB5-)_>cRqA(Q``fPaPW89t`o7jzW45K1cEy;T#=W5WDlry7u&gbaYuPJ%|Nf7`X!i`uJ>$vO zgvlo^ZWQ(O7cHMo^4G|Pcv6hmZ0%Wr*h7>#=I8e1B=AaF+*G?a92Qk&*Xn{lMbteD4PC#@2$AT}$sJXvHljN%5`CG>fz zGwA%I>dwKH+pM+))$cMAZb9U6cxoUH#go2bQGK>6|31#5L)4?4mJ3AK}lw)!~Z^jJ;Ke z`{zq^;F2f^^e?8iuZWkQz_BxP*Rc=FUG5$x^tr#hCmhI64mvN%%ukvi0TM4H=uoS7 zGKSwtncJfF}iL9q5SsU(4 z*pyx6u0UQ&ZzlY;_h7MUfqaZj@E-El zUUBj^_omu-|7usxidgFs|CccYAaAbq1k>jo4==8XKS$n-hgV`GkT^{JWQbk!5844Luc>G#Hx07hFB7#3kZu3psGhEd1h(Y?5_TslwkaH%ZQi)&;F2SKd?9o1B>5NAN`zh1rXSm zsQtgk2r>fqW2V~O?`v&EIW64(aYXav9a+B2z?n^$Pvhp$ppO5Y9vZARwTyy56Y?CA zePC47>eX^R(4+N?1zT&SuA&qG5lBw7jB264ksyi#IgYQuO*5T7pO7}8RXEL{rcygk zzeBQGyQM1r4`Lu@=V9s20sNohzwO*Rs{;{ySMW&Oaq}ZU6bA} z3I4=|OBRTl^|zZY#%v_y5lJ>l`f4X_&nXQ5ILT@hCGRhGv4;qNSU?{7QL8>dN0*7U zy7q>^GYrSRn?{x2P?qDu$7Vl&Yy$purZPO`VO5iq~2Od6Hptwi3oX= z^VzTu70Fr0yz_uFB`ed5H+DL_PG*G5J5Ek<#dY+0Fa54rZ1rYgk@huoDx2Si}1CH5+8t|+-0EXv*`7F;=itkDMC9B#-y6bmBtr? zD@P*z_usz1KIT8_g7xm!em|a{0}L)DFfNp*r(X{%Sr3aLCX?E90!o-L85`kl%^*|E zApbY}Ph%08;J97A&utzexOQ3HwFl#50cNMjWSg)@UGSePQ94#~VP6`!2pWQfprCDR zal^G=hC}gh5#I=0I>pLg5Xf5q!i4e`vE~ktCXE1pJPYI@x)FXqtoYTeJRCAw}x2DQe-;`5r85jl}}Q?dz(W8 zz4yu#BMAs4>_~q!=IOYe)@-7vhZOkhaDyUPcb^3U#PkL$*NhG1r_paH;o3hl(C&60 zw3b3^f&6p|16s0`lbo5K%%%&E=Mx!ge)4b!J2I58f%;sVB7>dejm>=5nv+3%kFkU> zW=}4e7+5knFejrF4}+6hb2DNHPLMmFRm9Z!2#iQH*O2 z#wFH;;`c+mWIDM%K#;iDO}2IhW={;|X^6ldd!yJGD*Hw3eoTj#s7-GP3M5;L*=H%V z6Ua*q#a}bw(U^V-l~9|~v_Kx~$KQ#TCtdd&ig$$`)miAHNNe_Is@(}J@n>w%;MR%8V7rm!=TL-CJ8Uuq7- zhVnEf76tOM)pQJq*dv#<=1z|Bx!EIHToP|B%=UlOX06Va`(mFbkN=Z|#4iJ@v+V#G z9YoKpZyM`s5T@J0MoumWp-hjf{A~4&H)MK1)UmQI9g70$u_&OSAaH3)D9>!Z_`;o? zQA*>l$egTqpr1rENFji5voo_bbDOxXm!GTtwwLw`Qi8c-1Ek=4lQ5A}tG9*XT3Fto zGbr0AFe{C+$?h3%`?pV=r@%ktajcPa~ioXHzP)-*#y4MlgU8>KgF zb+x41&`-!IOL}_uLwqmAKot7|E`&6xH$oaI=7WR^AvGj4urdux@!p+0151Rr8V{e+ ziH2(ODTLF6+D&ytNNVS2&;;gF@68HVNhm&N>q9Z>i?@%5YYuQmWRjEU;2KSo;rlMk zOSTW^P@YR>QTQSu*r7a4Iuq;G?s8nqsQ_2(-9xB!CTERVtd>ehQ$ zG%^62@pDoqsmG)QOk$gWn}?;3Zx}bC(>H7uPHVlZ^7t^c(8*ly%I;hJP)ym(HPKW^ zc@ijpJ$mO|J7*yMw{}{^PWMa00zX|()NDjsCy47LIT2HY1e^H|&Yq|~9JOBVT=gr7 zaqV%%coWN46|0fY3N9iJVhB3#bw~N~ZP4>xz_Tadd5ddhQNXi5=(&Tf!)|R1 zRIlO!5~%(ue}mNvV&CuHeT-gryTSuka-<=L9Go%DD$a|@ftBEI0`lx~Hb zYoUZ&#npKEd3S{UI|Y#Ho2Ajy#rVRi5O3#obM!3tIlm3+)XM<9g+<2wdf4oJaGjg7 zTHI9yuyEFjWa|>^ZU2WY%$aXg_k6@}TJyKbM4Zq`iN%3un)B%dpQolR4*Sr{3FbYz zXBEi_O3~JuUR*Lr*iy&q)|!Ooi-OhJ3cK&px*I?@TJ?J#amPeGV9-wX8B(5?@R%wvV5D|)xQ_1 zl;jrXGG0oxve2<|REnS#$|amaKb(L|GM;>>A9H ztAa`En&W~=TkPHD9jl+uuL`DY;CafHtk-=+4QWmx+I+J+^3EymoLeLu)ebf89JG$U zO~IfvtkS-GD7tgoypybZgcfG$PECK#_092?r;=DZS#7={))(`d$N59fdCjR-P>Ncf zsw~|S*@dOl+CqFAH>;P=MtJAhoaNc!JI|WG+qzuLp02{eqMfkcCrQYHE!OMmtcxH* zyuHd9xYR%0>6E?hL(uuEhz2#SwJw&}!dZGPyzzw+H`;0GiOJHd6@BK}6D)Yogc{am z3ffJ0g6}-3<0N#^IC5V253dptLD2Ick|8_~N)QAGJnI6UI|u+_$p77%u6yp24>fug z3W~Q`O(EqAuU2EzpMeeG&I0^#XOVaPKjHq*UYSzX3>LTE+&T|u z*4^sube7oHf)#zS`deEE7VQy+c|M*kPRrpvGm8sgDnJxU{X!Q3n5_A2wCJ?MyC9X;D=P@QUPWw7M`cAa-=?s6Eq8S9_EgO4ZD}X7 z?q}l`q{DJR;on-<3D9)w$4)E8JBjG_LvSl#tkYb`B^a&uvIOR0=H9u)a@;hK>vw2l62RJ`Gt;0bf2WeeADEb zKN0Io_){EZn-eberMTz#w7_Vm3>a+mjwR^<458Q(WtKb39YLgaL~|*B@oh&l@5aiK zlXOXMTeoamQJ3HNHMZ?+80a=Jy>vR+L6C&3io@>e9}7W56o1mTGAD3w;=;w${3Pp0@(3Tt#~v#PVVw zhtV;EFiGxt220C$KXV3OELb_PPkY}@0Cu-CSWo@HO^#r?#TxwgvIdJ&t>t=-lX^LX z!9aJlY^3g3Xs?ZpdV+PnVUl!ZCkg?tlfNOD z$UVPS)E_23pj=Q0PeI@~agE4Y#En&Zn(h!2lBo!^%AVdE(P%RbmL~)Ih-3S$hB4dx z2gsdS7|cr}abKP27|K_vtAJSG-R7MX_D!+SK4hSu2>T{>n!i-ooMh(ErLsQ}cPYXZ zlJLyFkIqF5C;C(ge4#ci6ma5^%>0m}(tvZ|%}(H8{Zf$xG09Im_Q9C&S#7lJDlbzz zzR$d&+e}7kQ9w@>6Qw7p3S7=d`T*W$CXd4^L9nxu37@o`u36K}6Mh~*^ zgqi0cB9_iqUSs7;=a5ZXkrFBm%qd(VL5%sMJET9+DY0BE8>w|t)cSA93=Lt13ZgUQ z>O4cNmJr*tWABe?J*!1#y?mK^ysQJzJPn?}Y2@`FwqBg_i`Dr+h~z|OL@R+%2{9!J z%b1c-ewikip}-tGRlp^!QM18}Vzj{9`wE>Y5ZEj9jZP~R-DI}jKrhin>aiKjRh)~C z?S(2`!h&eT5j>9kC;bURyJRrQCFR$uSH4F-i_;>T=rTs9WpN$NCzX#^Z;^AvOe4TlH4fO!UKt}$u~)h(OGdCeObF{v<3na!#H|@7Ot+Gw_Al+2$zst4 zrilUuWam_6*QH8_9U7SOOV!t}{4yNOotn9;dRrhP=+xm%Lvi~d5QT0}y}u@>WUeaQ z+DR%10@{<@75-9sHt+*?H~7^VsypxuqI3NWH7;8J4B4WLzx(PlNHw!lL)3?hCIq7w z9}FzL*JKYD|Nei>jrgaX)|!KS_as6|?>#PYNnF;lZ2!k?&9PQXr-^^!`Uv1>fqLoE za~dP)KL3}~Gi1r8O|k}^;m=W}(PqZUtkX)5CSL6Xys6(o-qY0SG!VheV%c|we&?%{ zt;kgur-b4wS(Scu5eU4~{2zT4w=J<&i`a?|IcPU0zyj;F`%np4 zb-fgh&?ev%rBNn?;AMw^C;A}uft6-7#5nwEx7n=JW| zr)A&;NUp7EQ>>aLa)?3@|#ApGmsrQ37VpI+fqT%Hn& z+lI_kI>Z%{u5uB@rv`Gy(2^AfBj_A`m-zhnR&1V$a0V zz%3IssHpqoFpbbe)`zimA{P_YGvA3U_$lDKAgxUt)USGw8!fMmf}N_)r)~sa%gPHPVBcB$yoT2!-KjIkxY;CUz_X%!vJKDI2ZkpChz-~9$=4!y?F`Rkwe~3kkAb5PPO1xWF#F3-e#a8` zOBL9Cc{U8KUNc%xd)L+01dz@&2>4W4zM_+5bh6{vXN` zBoHnL6^S8)9dj!^cG(}-s)|mXP3`Cm6qD#W@ICKc9^rcg!50Yn*lf?*r6N53Qubdf zHXqSn9k^rnH@5?OrmCb)9eyqBYd2cYN$T!Hf}$BGWY)x{!PfnT^0fUxuS3xtF&@qi zHWVyf%}22uk(@F)>WRf2lbF^qF8NkcekpQ;YjR{>wVn@WyEBDGj2+%vxL zhjK7&A6mo9ZC3rieiLQZy3F5Hby-J0?kW+_l_%OX=FL|Iq$ z_D&iM-`H$B+zx!O}s|z17bER22Sv!5cMegUu z(52gH*KI#%sAswCMb}eY-^$OnVa)x{VLZD#jAyIh#y-~5nBiz+gs!^g-j_8>Bv_v= z=gU;}&u?}b!Xpep4m+)SFQ0Bsx>bMpkEeTj_n}Nz+kd5pB9cQaTs-aAhV+>9cws#I z9Zz=}+kHG4>a@<|k%-V8<2lES=joUJ4;&xk(FDLCQM@p;T~R4I ztbQphMBi*{cM^W?wcSYgx$0XFb>1?e zcrmoG&DQkM<4F##9((KqEPW79o$!Yyaxd!T;IRiF>k%c06V)G!rEw9aoh*kbyt=FW zJeB`<YBjz7s3ffR`Va@XD5r@rB#|5 zC|-c*@Cu_-=vPvIPIr~L7I|a4${h@W5a~n;)r7jX-UULeH(qJPtKcRn*5H`2P7*U# zw*+q-;Y(0Ayody@j;NW>b3L*hRte10P3x>3QO$L93Nm=H6Y1m-px>@ZJr-(#qeCaS zf+3b|`55cNnV;ARa<%z^I+6dIu(c|=zk*^T)JSRn!33+sX>G^w(*I#wVolw2h4h_$kh=yl<3K|}~;HHXthkBSUp`nd_k05r({t(|W zm!x2Cu;NAUtqrTPb~5ZyQHgb3BO+qG4h`xj&*3&QGfh4B>Tz6KC^kA;EMrecu`}O! zSv+V{%1(>EZi&1uE<($+_DL21fAO+oNUX7xi`Xa4)!s$KzGdTD`ICuw$%P)Lk|T}m zQte^P4)#waF-6%$#P_ph*l*FZUYEs00#Z+0iV7}7iOgt;`~Dg!kw5vFHWto{VN9Fc z_E%2s-&XPC1j#Qn+2|V#n9*4j`WT%*_1noP&al7MQ;20VR$rsKCmXTtNFyQ3GGMM( znri)5Al{_Ikw$3ldX+Eb5vlgu!CE;rVrhN!U|JVspqDyT_%6#X}UEXPUv1UqgQ;MK;?zTF|GOT_`P4ml z-XNv{JgkrEbgd!qY722AmDL}Tmx(ud#F_;)p<+)Kh&tA1_T8fcZ;VgCqo(yBj1 zejuk(zcxQy4)&vZNdNF(OD?0k_{to72GPvTCVCT7Kbh|IB6!cF{YSVz8L@JTm4O+J zx>hQqD9pjlt5|#JwldIwkFd;{ZsWmd*C%yDy}Ho!<%&_~n6AX~r%^pH-66rXulZ99 zxF#li?dp>^^q?d*emgwN+L?fw=CI}z%5o%2P;cIR7Sb*cF?1Q2bi0qI~wb6h;8+#7&`KvLGcG7?Kmo%M*`1PdAeA)a??rj(QuEy4*Ax+OyXSl|9gG)E?nj2uQb%sCC6J4`c&uSu2 zKFJFf{Wa5UaAt%5c%1uo9ZslGy@N3&qbc(@z-h>G?7v&W4H7B&e2$2+wtvC5Y<>{0 ziHLE%l|O^i*TRM=l`}v+lfiDQQ;$BmnOfdc7s2>AkGjVX1ZdSz~bD< zoF~hiV>Vu=CufSg`d$ZIrWy{TVvxus{H0SK^lGBq4|7mUZ9m zX4T=VI%i*6BiWbg<$0qTR{j+F?^xWP8r6yK%l8;!QP!*J0$79`UCa-=?MAgjWASkr~Mx=4IU)ykKe&ys6Cb^AYw!6ejj#GN4X2tgL& z+Wg^|6|(c*po~qwDqOAk6Jxvr#a7*f@HVjy^*brTSJ<3flW!^&pm#klX%c+W#?R~m zkd%5g@)1AGyH@%KD zyeD%PmdF+f0_Wp38`ru$#yeE}0uHud_*!`|qw;u~Hy@L`b`|&e7qsoJeu{aa2vFk zlXk^vm9uzTuU15Rhn%d1oHUqC8?YlRueZABf}3 za?hxNlE_q_WdoZgV>y){)Hchf%7g(W{^y_dCXvFeB?jQ*Y=~ zU$C*^rM;tQ#oG5Lq0OV2W%Vn}=IoVz+-@<4lnzw=xA1*+s^Nr8x;L98wd!h`Vnu;{ z!Jy_5@}WZt>k}wn8ka-MB^%_@i*&D(_*%MI5XSpGE1zUyE+J={pRH5#pZr4l|Md5I z$oUL8jyBjnU~4i-z4hLOVt=J>xu08*i8Bg2O~7iIpSO8$pE{g>`iJae8QB;{rWfQx zcVt1N#^X{*wnC*8Y8CdbPL1CvB->r}1)%e@^0x#}P{V%9JBc13Tfn92fBz?4=5`DX zC27Va(yTFE15c8WbgSUW)1%T*#Hy1!emGTp1Ui?!QQg%+!Fu9Fp0!J6 zP=;_2@O9-ho~P?c*3WlEp6Bp>HGugM&#&P*C}y>&tK^%G@$HBmD*VW$(N`CAymIPSoScdW|T0?f=GWfhg@Oo)7PMzCH5%OP>2)5X92ue;s*# zjOPzMAANpTH%Fd-!1Et;JpWGQ`D;?1J3j3v1Nc?uIeQs8u|BVmbWjOG z9ptOaD}+J@aLo&!M*tFWfK9mTRT4kAxx)E)OKI#Yb}T=Umw4v{vG*h%?t1Xp@*HOK zWO-V=m)dMo$|fS!atsz64QHr*hn_dk;G(%L#gz2D-7M?3i3aV?8q{kSXtqPniMx4j zwj1Zf?NW&O=bUI%H-AlUUx^m?qsjW~C>tsDUSB9>;jz#GQ=;H}T|yRcdgMh|Chl%i zRbHGMeIYZ~e75Et=iBt8d!@+fn>5Brkq?my3Xq&tzN7qpgWpV5 znoSaF<+Wkw>(xug5|<%!6025q?YK zz9jRaNinW84i?DE&Xza|r6M^SOB{v1Q#|HlGN%dN!b~KpWNyn=hzS2iu;Nm)JfUp93Y2AyU9B$xKu#C?tpqkl|{LH@nB(^*A8kR4tJsvYx7#j`S4&x6uq} zAU`?stgsO7>TfVjnr+n=@5%D3QB|21dJ|}fr9O3;Y7xH08l|M7XC<h_vz3= z-+|32REM9`rz&+D)PYob=w0Zdy$RxLR3h7IxIdHv6uzpa0>FTtqp*?;QgtEEdmtii zhWh(a1PczR^B;Q=vcE@dTp`wy zPQo*SD+{FAmAwkJ^g1-EOE%d4m_LAv(f*j}QYRmNKxDAJyJR-1@SUK0flE8>WJ=9d z_$zuZ*B+B{&2*`P%LVUfUAzjDAGiVY?p& zdu0FRJA+A=$faN81a*Nqwx0tR_<`!xpr~lcY+3uUmM63XR(4d49tlQ&)EXb-z1&|x z(8Sa-iHugZ|G0$C7#fMwBybRW-O1)~Z`vNSR~61v&CUnH_Xpww#ZK)@ZpG^l+LPEZ z`7Vk6;I6utq2sx2t$Ug{gPi3!@T8WXYY-@>4g@lsI5%W6yjx$-TIuwDr^t%8MsnFI z49|0FXOccnE8C$&J8$*Pn8X7!+Y#eky&+dReH$10zvud@l*k30;-o|-1o(khq_1N| zdQrK>vE{vAJQTCIcFQ62vEf_y@vH0adqj%D{<;s5Bw-Y@0b#jSZM+(Xs2ukH_98McpaYWE{5B8?M2-}usn+QFn& z&hys1R1zAKzq+*6nw?XkF17IZ=b5!dCf%E**^ItcwHU6GRB6#wJtdA+U4n^opm;3p z<)wCu@JfFr^rGHc|3Bztb8MfT6sz^4@8qZ+h)J2!4=);_m9nPA>KlV<@8UtX_s`Tp zz~@&NfkXYIM32B&tWKK^3pLPq{l;&qZ#0jz*E$XBeDvKW`bvT|4aG@YtyL2_aDs#` z)6t-HJ{Gsg)UPToR4@7k2u|36=Kbse=BbbN=MT31=>xW(+8g};zIBlBpEE%Fn!ioc zCnOtHe2H6B+v-1YY9)oBWl*!#3ydxcEfGfQ@vZr;SkA>8VPkEN&3MwqYRz*2l0{dc zdPjI<_?tD?q5{(Fl5;|M4ScIJC+NIA;5i^(!M}#;O1yZ>eXK^5(Y`BNYn)u>D*8yx zXD(>!d?d3yUCwpygut2Fq!SmTo}vdLoFT#2b`W+f?UQ-pKiI}K*O*7>$15b@=;j#0 z^cBWJ{&iCcfT8tM3Q>EY;t&+2YgkfUYCw>L7q3Tm-v++T=X|Yb5f;9RN%hCY;DF#S z;>fm&xX>RKyOWCcVA8y-nw#Q-&XWq8PqJROwojUsJgML?n(3^%m8Z?)g#GIHLt(_X zk!DMEv+cl_QbsxxM_I;L&aoXuwh=~{KCWo<#)W4kTOJii2phukE4e($8fqT58niN5Y-7|Jty=Mxv()Oms!3xq9PR>ZT=;LMA3&ovz(Hwo+l}b zo~zyyv|iTXRP5^2saW_6+o{+!NT*_5MLQL@KpID@`5Rn%yLblZ?CS!AIJJ*wdzwnD>b2V%L))Xd5rl&UDy#LCfY9s!vYW zW?l$3g4W&eaO{pk_2FpLRlcLL2Sft$n3zRY9Cmmw@mI8n_lSE2YH+zrbX|r{q?udL z&`8`}<4xMbyixocv~Wi)M<{6~Pv3X1Lttsx_61`4C9PIgBq7bYLa0Zha{lB+kvfgW z!&X~VY>~6l&77F{U{Ek&{@qo{6jz^+jm+AAEKU;Ul38*VDJ7F2scOzioC|2OHom#U>fN)peB0mdU>PPnP z8{~JQPL`1CyU4nw-!s)d9KR=Z@>82e^GVKPY$bG_yy|oL-9_jBcGq84qJIY_n`GNi zXiD9;kC%3Gq0d*Ka^``F!*feYuM6dVDZ#HWQT#z4XF7L5BW0a{_D%8!_PW?EJF!N* zcM&ICq1rO+_eNF6srddV)=`@#E*KU$-W%1Ee`X8!-dyDxS3D zE$fEamnRZ~ABzDSV6Q3i1Bztss@k^1?I|D^OATgzF7(pkPiG=QgMav^yCk8nxipqA zdFJ%n+s28>9a7{F(Oke^b*4!;qy4)@8=T>Ica;Nv(MjqJxZrOFSXo}SN zUfE;dxmbZ>#MH9o(MfM`KT8N7RL)Z6uSH$#-fH}iU!V2iM8wSEEy9<0A!ZA;egk`n4zs5qWCD2F)B*HZRI`>=&7gZSSOQ zW3B+@2o(rpW$)gc*X`Y_U*ircMl301_tSG(ohKsQ(?p}9g-An~LS4}Zni-SY(MVA8 z#d@hwE&I8al{ODAQPyFJ%yM15;(0SzAya7li|MIk#<{GrWKb6p|}r-)WgG1 zL@0Rg*g4ot*SWq~1Er|0Lu;`jHdAyT#xO0VtN}HpE$n*Ro;IOpI+%ie><}cIIJzS2 z@Xqpo-0saIcg4qT{R-FzbC(kVe8+j#34cChT3T~lV2_B6ZDh&6C5kMEPw9dz755Gv zSxOK|{NG~>A&CvPOutiOi}9K)QJI~8c6c;KEC;nvi5!K)q-(-7jf=eWb zW!D`om|UbzUBO|A__$7uy_pGFv%tDfWF!6G-&*q*#CR{J#gy(cF}*!X7GS!Pzepq} z^VAO?dJq#y`z0{7pe*H{S2&nVe>-+wncNn8H+_kDCFR|UJQB50aAs=L6IVWEqPAGmGJ-QFH%++8{_U?xZCV$3$^80jCO5ev zFZr!r#ni-_IkxG$?|&sNh`6nIBC!<5lSof4Nh5rx%u_p)9~XQ8ow#_FHr;;Fljtc3 zdO#>E1S!^RW73&D+&iXh5(L{e_5YM>q?W=_0JOq_t@8Nrf#nHn4_`wY9q}v$By7U# zAiQE$y#B=f+D2S{pI&ymbf<&DZ0Qh><}IK*s}9U}c~2tqcqyXf%)h94-!$>iLe<+~ zlv#R5uv+mgQ2ic%(K-dH5AY>eUB-1PP<=>$mq>Ae>KpanW&DM2MLAVX7F2>^zQA8; zCse&9`faQIO-k+1rS?bP?T&ui6aDs<{Vh=KrFjnJ5e)JPxwOq*zA$BwgBC0QEuPQl^ySc5?scgNH4ivpP{ zUxe0310557QO4%KM@*?4YA!FBL%Gm}GXJuqR3$91L(73*tuZLGtQaG}9-IFZSCEc7 z2Kd(H{T-#-{-B@B*<hLPWbPmbyJ)+XI={X&{Y{GZ4+Yab@aJ zses&2-5;9qpei`xU!CFbj%&@E=t5`lfJokTytEcM4D=?IEt5AJw6i%t*3Bre`*!hFfYqc?G+&ObWOa)~)9Ay}Q##B7{Cx-=m0 z$g+{2^2)Ky&`f7Hor0c!9o`v@ECl8>D}Q3Jfcs$^mTnMuA>!(s_b@KWu!NsRuAwAA z2DUKy8H7)>@~2?ys#(Id$;Vj}qQ|)c8FXaNtt@h<|2p@VYWf=+=`StP-yh!XwZC-T z-^56NBL~@^9)BwKjeU%tnGpx!k)qBaC^DGZ6<+*%%z3AgblC)UJi5df-x=DTQ-`S% zu?u4D=zf6-Kx2|pwihc2LoL_65n<38)v6?p01g3{Dvbld{%4%y>E6lywsGE}k$fh# z{9U+-+r0-Hybt%Hu2-8T-FK5e|nKWRqZe}n~cFM-&lE@b&# z(s&+^6~RjNbJVwLwS1%9UG*5hw0ycwoqLQIQ*n>*7Hc;SIaO2Xu-i%bHZP?^IVDs3 zn5;(iUaPDXDg3zAiIaqClu`7;6WbPEMy>REZ`b?g7vN$woQ>+^e*>rdvf;$+ z-o|p7{*GUEs~VG6auNs@H;=4(gLFIqGeHhjbg`_T?4VfY{{E=V$(Fy^8#ubrG?jqT zL&f^g02}FIq_;fjO}Mwn3`qD-(mdLomP!nVT1_9xPbz9m?cI2~mJj9>rYB^_;szr| zWI~IB^(_6^BtLG$%Vsb7o4|K5hBYpuDSIHk2l%tecck7a-KWxGQ*j zl`;|?8jtW^rHu9~vkNhBL{8>uFDXWzW^Bc|VS!Pd2#AaWztrZlOf1g6-Y2e1vaW#N zr~uM7k=FgK5w9zbJC1&hVZ^yQ8%TZ_~?GEZ%+#pr;ENltq*VtNDPrS)VHCPwfT zoDjj>bE~y&*brgNYRh9_yLWoR4r@oSAWSW*A>`N-y4s;0cw?BO3etY}HYvwWIihZF z0gM6cL9y_}1kyK#!|>@xUlxW{j6Ki4OuqX1F!p3mi7@|&I$Js@jRf%RWwe6ht+}ok z-?cQ__L(l-+pOrVl8eRsXl*e+nbNOI>E4a}bm=@wkK=TYUm`h^(L0bqx#K=%;JeNA z7}aw2SPf~(k9O64hXl`~*J}m=<0ygAoQ%{sv;P{$a+zTKsm1K|*r)wZK%6o3BubXr zEk*kt{V|Mf*JBx_*bf|4!#@(eDO_2dI&;0a4!ElqGA!Gb;)?ef zO~ql8Ya^?IoCYHiFG*tENXCq|p4xIUW(aMzwdHM=3*%6eG-IYY`KOUIV{CWpG}2<| zT4GAtSKbUcttD^91w?-@E>z!s%&62Q4sjnzGi>E+k67Kt+_oDAl%yFh_3pAS zA~PgXGMS-EnFMX4-QuqPjA!hskf)v9?@*V`W5%#@5F3><#$&fLHLC(f`vmWd{;0=g z!mxK*7t)6{jxMosKwhnt$#5&fsa&V4_5L-IZbn%XOc_N=wxm)Rq$MADv0mnt=kuC#w3P!f>b7sM9&~mH_=I?xJr=zixN+WZCmkBWJnixT{j-SuS@Sopt%xmu&)~yDCO@240+1 zZOk@z9(UDe`is+D^)X-In66%A+_Obx$Ykq1Q6z;RddaUm1Exax!?iEG;xf2sD zNXW8O@io8kbCzBwGt+XJQC&FtPT9lrBWUkL^eIa0q9|&g#iiok_)`|D3$E7aE-iV7 zb1@Q6k5?bT4?Tl^FS_=4SO9=Y+*kfGi9F2vS@q0fqvSebigJ z=7iKA2FaLD36PC7$@2^e>QP0SI~*e$)uZzv4-s~?$08b8&e<6V+ zc2Mt1Sd{b5QeVR67;VbT9_@k)G6IbcNrcoru8!d8C98a^tSJLHXnwEwI^X|lzOPK} zj*L-JYQ9Fu;mZy3Z8A+<4vumEuYSnc@=RaqWyyjO9C!fO;!|%BhFA=*!Cy|5q4pJk$_DS;Rf{=^Hn&z z?fNSmM7Ql3osqm5953xZ);rWGWJ$;y`d}PWyadn2&;>ckzaqrc*)Bcd4YRh`Id%m^sY9jaF|g2Q4)aI_B$wk1Yw zgk6a!hR^-+1L5ZQ5_JZjwoS74vaEjzO*ZRU3$LMmp$~I!Iy>FaXKat^)w2-QB_^6m zR*T%R^j6ly+?-kZyfO-Yca>~u^~zFaIS1L6yXsMX8|AtP*-G%WG8=rL&FNMX+J8Mz zU@zIl|D&BAx5S*FT~5FbdOuxnVd(w)z}}tSzb?;{v<*q%U>G zd%3_S0Gi%({cK%~Mk6d)zpfS|R8y6{ZbN0YhYQo+iOSOdT!PTGTSp4j2JF&cy##{l zIscmwe6Irnb3kbkgQj8H-k*F_#@;{fqHR#2Zv2t|aFW~?)DavFH2t>^>x1HWpbs#f zuE=Cb8%>FxEQvnNa`g$2$VF6+LBBzW-Dl{5O021$Q(IGkZnGY#TwlVPKS=z`@QPHc zP0$2N^mrL zXomS_zWzmSSOecQ5iMYV)Sw<7xHt)qbZ{oGNO~G{$M|zJs5h5uEF7Zmoci{u2dwu$ z_dz+}bM%gkMUmX7rs(fZcl9g|27cc?PZq~roo#;p<7$HoRcGnnukzQS93{u)EY>lB zc2FRzcE$PZT{(GAS=bgX;+~qJ#{BUiSSE4r3@=Mn1y6{{-^*M%G4_0ie(sQZ`51`p&J(7YYnWSLa0}$1E`5!FN z-a|xOCM%eoKnz7VqmW?sD!)?^gVxc%!mliNkD2UW9%5W;xhcth0EeNFgkH-_%F1)y zlvutHeERP5qy>xL=~x&hP1x+DAn8iN_AU6LH^7t`9|RV=g16*gE$@-Y;QnnnakU{2 zR~6J*&9V5b2R>MLHV3^bz^FRFaG( z#meba94?$Fy8n=K+Ve43b!HW``~E&y#@@bQ@;v9X?TqxHlly+_l_ku?^}!X`#D4v#rhbW zy3iWOkrgM-v3P5sPSM^PS#93&tXGj*!ClNaS-8dP*XQyznhT^6cSbJDKyB7Tgl>2J zjaBSl=*A@62qZcO;bS|wx9`V1vB+s9PTH$;#I_3u_^Rv_oXkyrwV?CmtX$_!rzqa_TJldSpemh)wlhs5(t%+LD5UG-C{H}Ap*JLvqQtgX32`)h<;S{DXp zIjxi9w&R6!a+enOStmo*M4k8Br}? znYhKs1vk2|Wf$w05;bAbZagVxz5aGL`v3&#LWMCTE|CbJd6Pv%fknK&G912zY0=Ix zCJ3k~=%QAednClCzE0~Ppd0^zjgZ7Ky)0Tn2LaV3R!kO&S6f!C@5=D3fn`{j71)ya+(=Th!3{g(rQ7yg+A@+EN( zy3X=E9*t}SktdL4y}G0S2G*XvhOI@p>jo;P0n(Zx>ddu6ar-Qc#+9Wc>7M;*?tM9a)qtPu`1zR~~J|ga-GxxKT;y3c`3K)kig2^9@^Ug%5BFEI3;_F3LY%1K`ZNsg^c{`(C;l#YO~oq}DP zfxi%SRPPmdfocTyM7z|O?{M2=+`Idufc<2JgoKp6$ySkAUScBKL&wV+>6ItQ5#eO< z1v2|9Q!0rny1z;Ym4y&}jr|xmnDWtpOMiW15Uty>lzBJ3SP^$P%HM5OT@ePGrO_E99# zUxWH!k3H1>io;j#6YGQqP)|KOs2VwhF0BhXCFQoMwqj7#>eLVE2>OuasdHCN!3M($(qP}5A zPHh+jn)+9XHHCPbQ6qjZHS{LaHWl8RsPo2O2GNTNrJe>0jQ(mc6(m-j1ksWlQwLr` z?I%Ij9LYXmHm{Wi`Uz&flqh}S&nWoy0SX$X(({6LHP*YQdIu^?%eUL|Y;4U*LKAi; z=K_a6$GCRB|Y*AJ#f2ZFk*{+~hY^9NHef~4hi)c*P) zK(mpQFl7e1&|oUrnCz~0NTqspmsA>XrDe{-pEd0kbZk(igYGED1Ou%2sg@dkjk;$J zrfzGFGZt58)_>O^pp$^Lv|J};2UN12SgXxGNxO68M z4zd%8lR9KDE$bnexcT+!&AP!&kVIR(_ixc5JSf!$nk$BoribvuL3Z*1olGB0%NhwW zBlJ+=+c#_65HrG$Q{<~=iM|XCVq6^oQM31JS-3D$HG{4h7I^QH;secuo^nZgAy{+m zU^)ONU!(OYgKk|SqYC)3gK1p`{(&%e>P;@b1A>n-ksFB)=*{^zm>PP(#<-HCl zS8iKj6YqL;{a_)>(LuXc+zXC+Hs>G_A~2Er*8h?yyPiFk@2#wz?y9>uOePT-zUD-% z7Krr}akc*IZtfMhc6cvDz%>y8*MRb^Pmym~zHQw3TUp^3Ynhu_3jzh(5O4HyWiQwU z8)NOfKQJvVFc%#@kWKRK0U&jY)D%pj_uguHq-J1Q3f;h@@39K@*uwA!1HL+uhra+5 z9Pn+j<>8ZR@V&`uxoK3{-K>NOV46%&CwIOBF1yQOtoa65?i)ab1Ku>} z(+R!-7<^qN!r=duGaLqg+0C68{HN6!w+e&*wAG+xN4@r}r%7Zfr&`mE%*b~x6WSwu z?LO;Nna|hNf8}Er#r*s3kp+KCW~avT)%8CILFND%@op8a8N}ST=A^}t?u(_BIKjlZ zoSCC`e&aZji*1&cAQq~po~8HsoAOwZU=nVvyZzf!0`oUnj?TisEZ>8euxl8biZSK@ z>NV1T-weKgsq4#N0pY0j726lFT=AmM3Xqm({$-(>G*QW3IT;;CdIuSFg4J~&YOQ;{VdRz&#xlvHGL%E<8=bogQXkwlbi%NX#o{E;(h7LlU zB5d_T+&2HgLpdG7vPS>vJbFhD8<$@9Xv+m(&xdm5HTX+0#VgDRbS$`s|~OY~=Y8i+%b_qRR=CHPez6Id{rkil5hp54V==SWj?gzL0#>?*{E6-&L(3-i2^%n-Nt6_Efe3nTzb5$Z2}a(KI< zK0+fIE1QYnLgV__Pj(^yN5{$QQ;YMt32IyR1HGL^M_I{shQ390lmP$#5qB=&QB~LC zPsorA5Sc+E1PK~3*3_UzL5U7(Fk}*iKtd#;MILRvG)-R!GeEC~M<-Fo<5+67)wWu# zwpUx*YFn*swI#sKghvA?ReTgdt!@m~pp*oRY^yYVw^@q|^t(BRf8dpl0Rg-0#V&l^vj?n23XLt*? zne2xnXTcy`owXb17`#KY*T9Hnf5Tkv(A7tS>7iAw9?~F^=Ylv+ zsR$WwPp5=wL202?F%d$UgX_R}%Pd))m7>|^KwB~ZDqAOgD}q^M)I|Gku!_bFFJ!z9|QnzqcgA8swYOv2?G5e}0@AJjdfrFF0IVRpS{^+M)jU z($|4iDd}G`JtJI`?EZR!dCnTW)il-X3vJA`AA7v11#MLYJ3{NdHM4X#E91LKx0}iR zDK&8`B&RBQ5PTav-};ekdb8(S-xGi}xMeFVa;yWsBP2J8vTvbv>=@aay}tFq4v%+` zXGBIQ>SZ9-$BH5gyuK-}<>xO+XHlt3$I(KbjmYrL_6G9`4%Adts}Cm%p4gOT19R0_ zkP%tg;oBB)Ss%Cm&I)=9KCGElt)evbcr(o6&os1YgYOm3x8$y6Z)j*W?wMf01tex1SW;{dE0l(jNg+r`i=y5 z$mIUvE!a|3%^#S(x-4!_$fHhF_aFVCu#MjzIw5eW+vsA>;QK>49n;oZ?yu-WQr zKJ03K*Of-WMWSant-M^v?=NskB)PRdZQbQJw79IZmXBOA`0|{VrJl&dmQZU?!Fu4H z*4jSE+T65h)eiPdwx^|l3R2`B!R@P*{9K?0pL5vPYJPiX3HEQm{W7$%(4McrZG&XY z_;5!TF3hFfGLgdto0$?bDYANJ;WM)swq&r6S-7mt?WZKn#F+)&D6`#_&PjMh>l@yVg1y`Z(8f*N@rSNc9`d?+v~tJi9A$n^*x!dx1aC^2l;8 z{yvL6UeXSD@|zcVmhN&b@~qt883E@x`*nV8^(}BMKYNMGH)`n^<`b=qlzD3_)v8PM zDH8oGxY&NS6l5q)5o$8WwcJZ{@6w?*|J&NGJR^okoj`EBBlsPOxOy)YIL)T?!PkV2 z&GRx_2svx2RV$bsz3Q3I=d(4N8q>CX6WXvR@{~;f*<98n^&oaxM?BLv6zn2AEHWpz z`7Kx4D`ajLbi5RFOy|U0!0Bh?NUaj_C*8cTi^ft(p5sLgFWu^Zt z^KRaQnfsu|&)MEImY*dep&QqCT$Cc(6*;Qg>@RpZl9TFt89Fh2eZlrL`Dly z)T$>;tF%sQb_c;w5?oojpBddL{$7%UZ(deGbJ~VVh~pZXvYIr`0C|JEd{NI`;#`e~ z8!~Ft`bf{dW6|0H=1)f5lbZjjCp7>47wJ{X{P#Qa@93RBzIrnC7Fr1|Zp_@b5;@F1 z!8S)A_Y*l;_vea_9p~e}Ys>+;soLB}$<9d!;NqO@Nq$ah8IId#k9|(YVv9W18KJC* zoRRO%ov#bhGanAJH*_?26?ZH5udu(T>Pgk|? zz$)(StQrpM-ysuR+U9!Zi2YTQjr{g;)PK|s?x9B-Z~$X%*62YBd;ban%9P+BHK|L6 zmzy#1ayR^~-~cqVl>0s4b&yRiIp5}BN8cCB`rHHal%yV`UhY0`=&E-Q?kK3Qg zq0u#hj0P=CpBxzpQQGa7y`OF`t)+v7IR2ja`rNe5GS=1L!!S66r*J7H(N0L!o-q00TY+Z$@ z=(65uKP^Gjc+onO{av(XmHXusv<7-$JT2SN1W5jleo}~t&WqOEEUo*Ar1C75&mop= zghZ7R)W~{6`*Uzk2TRyq{4|HQ{uMt>l2_n~fp`C9ks2@DZ@zUZ)v2s>Nz_DfbrLn< zCrF|u*BwMpf^jXy*(v)D1FYY}(x$Y(1cUzv`BW`DK8Y)Kd{8FNvzvlx!tZC!vRVFE zx^tV~&vf|x(ZcV4>jv>&!}VIGrf!Ndv3cFPatHtz-IwX#uAi`2YXYX)_}T38)lwJX2~AFKoRGBrKVD-1;M~ zZ=02K@62WO)ZcxZWB&Gn`JNFeA9+@m9$e&ksn{!eg*b6T;4Sd%+&rpJf)6esgKJ(38? zY6;IDZ{85?L$*jk%%_SIo@u=TW5W(<65y`)sz>Ms8HTKS@Ur2OBAB0O+KOF2PGwmo z#nF?iqlb~Jrs-j7pPFUnbW`}}MhtWkfStiT3p z*pE^on*Ib;PojP@w#x&G@uZ{(2(wZcUxYpm4(HfIN;ApVkn&iXrxd603F`o-44VZ4 zyX#L?GxR;m*u{W0Oh8>}ZrEQguv=La_D`3A1jJE)rSuZ@UoXE_FS?<7LDWA-J|n#5 z_6o1g{t1WbwGMDU;3uppcxL@+YOg36fvolx)`>MAqK7!taHRj%L2LjDlqC8RlXb5l zH!_3y6@`~gj;8O?kSL}rCaAHXHtN@Cp#FRlk}?WOtE^m><@b7?smME53hXuS9U=$K z%XJl=F_n$?N4{aOV!~_SMZ|TvAO$}5f)wXR!14pkN%$L2r7Eg1c(KY=;@cgM7r7~t zvrp^p9H_{Ca9_$bWgP|}^{1=RpOy`u=y_&#KFOGvQsJ66Q;WNMU{TiWP2JPeGi-Y_ zL(stUOle-)3+JY;#tVLV*6J_jtQ)qSzvar`QV#UAlx3ez)3RJyI)5*UmKj7T)2FX_ zPv)@J<~LpBxjWaB(!r85hP6gBasU@+XU*Q8p0j$wWrf3bfOcy(d&slGRK|zPCUT&| zWyRsz@zJs(={j0A+5FN#jh5;2MBHF6AfsglKgu+IkVR}JHR$K9pXlf>h50`oeaSTR zWu!WCo`5GyQd&UKr&cF^PV%q{(Ml>KVDBS;V?w~X6k-3b$_vG zqR~SRinBdJZ(t)dvbyW1ss;uRHBh?;7|4O-I6&Z-j7$Su<1jFp#1k3Fff`e{Npc`= zCsj_J`xO+@4xN)*eSJ>sj4&S8w;V%`ht1m5XQ}^%|M?G{jhwi%F_rmp8uaSbQ(tpV zLoo+lW2#MbHRUotWPaAXT+xY{gK8A9eF&LRf0E+>3RZuPD*Kdd8QTPu+!i=i2i)Oh+$(R>qnXP?bQ(`JxH`dH*vxD^G|%n18u~v!KeT9kck|xiV0`*? z!FYcms$q^+tKLm;9EbiQs&0g56be4%IUB_Kk(~)`faMZKb^PRCVI*?HVxcPM9`|P! zwE7M&8&NC#z(uQwkTF?0H$Z2G*HSy+!*evxpSm*Bc@hU*TOOA5>UOM;NX5iv)>>(+ zi*Sm2hPA1#DZiGqu;jtaR{PH)4<-yO;;~!3!2_90L$?$bJYT%cbSOXE>VSd#Mh7~w zKO43~IFk|=!%FJS@%WCDpmUnrml_~mPx9PLm+1k~E zIVd$StbSpQ`dq5)rduCkopP$T{UFo6eM_u;IXb$5+rRK--TxnZ+ZWZS)PdXo*tEBL z+gH}89Vr9OXNhS)x3~SA8uf7U_Uh8!R?Pb5zO8y8#CjzyC>WT5JaL&F+gD>1f^&%( z8OcB+TumjzbrnUnM1~IKz|^#=?zThNjXX`lHWrn717`^1vIP@@dHgr~@%MSG zBkj6^&r2N=1jj8Z<^6}XBW&Oc97V~Bxon8FY&wY2(O!icLxt8att__uQzJRI`92Pe zgP-b|gjPq!PcsADq6Y|GNn9d4_g?)z0kw92&31o?U5xh-oCrotDJFR@AFW*|arU)q z6^fmBA`?d4&OBiYJ>U!SrBGdQ*gXfuo#-Yt$9!U>G}PtwG|m;smQmlCP~p7P+a*Ep z{z~=G=YHK&pGu7w?!`j2A zBLsKRj-uVD6Ok@V8I7*fJWW1>2O~aU?MGR~VUK@DwZ*U^{a0Ua2*miE=PHR@hzzHB;8 z+5UEE_R)2$pEwi^_s3aTOKDc>zT0R=3TCO?Gj4&^V;e12H)N&YvK$9sAO(Q0UT6R; zqEn$7aistlV`E?>;_|6>vC`M($GWln#Rz&crdl1a^t802XCtoRj>H$P=zzaJQ%}0* zGW7w9E7;H6GtJaA1>a5g*R67=( zPOnM_`~%@gP>$+~!b{cl3)SKOB?`77*Yq% z#GPU7zK456N-HxYV5TMk)*)V@%2xC6X zC99UryUOyLj%MhNu91%Xc1PnhkueWG9seMM5v)R)R17TT>O5JIU?vkipGA;OK$hVZ zZgGTqg>{6N7ezCkfIAfyyR2B7L3LS=UP#5@U0oCFI#+GoNY_}(z$>cr&C5Cwtwmd$=H z-I!%hHdoY`YAQfUqW-h@2g6B2W_?O+O?{=>yus;>*ylVO=jhnR6As@BL6k1`q{q@h z{Z^Y*Th2Cw-uy(nH;y^9J+vnk3;X(TSvkiBHh19&^!;ehx!&J8r64q)5 z{Gtavd|Ke_(BV@9IibT|wG|Pu-rsN$9U+hLu2(Rn?)c(=Zk9Za+KJb*e<$ zdiyh^B2-xOi=6ulPp~Ikj!0F93k}_slDFH$8B617o=6kb6*GXx?{gySrYk$Jc`M9Z{p1$hB!cA@}A zDrwA<{Ke8I-MQ=MsH+&w>}+9AaI)-0k+Dc~ip?4BGqP;;K796LM8WP)wCMHa>L1je zH2s~O3{%VzQjf8}P6zSt7ph;z-iM}X+(=lrj6RIy8P3bG{l!s^XEn^=E3qD+XgRVX z8?WTKx{8;r?O@gmHfCK{9NJ4M-(qrR#IUM4d`+>n-o_;6M}Ag_9p($@U2Q$_uCXB? zcKwe7i$uR2kdZX8t51R95w+h&Yg-M#mI|sd9A-NnqK_e1F34m*u!XOKxfwkzqlFooOQ9^ z8`bGW(L1?iE?~QU5cOxu*HbQB$OYy1uD)_@N@!3@U?|GdQ_^)IoTy*?5vclT%g9MJ zeU4&7t5hA@kTBncs^QOZ^W8(2^zFzOK*LL2RlU|#r@7g@-rnEk|nJ#yvjiJuu65zd1eezuIeC7zb)&HN0 z9Q~0Z4S-o?uNt|S9bt#3nqNkrm~7ic#T?TxC)mVfe3*BeURA1Fn1G>}XT*lrlc+(M z`TD-T=VlNpS^anGTR2%hy z9u{xu*<$}Gcdg!=zWVT>Wf@lSbfltx@L)2oQI0;PJnK)gvO~?7+}iLs7^j;BM#r8z z@Bh_)U$7iiYVZ6+zat`|=-n>W*7f9NM!mKo;S#HiiXP~Ii~xAY-K?gp*m&5E6!A=y zB&WcmEE+oGZkFtx(r$;*%<%U^p~bj+gc{ly*VB1A?HTxk4DKw7JDUdPCH9U;|0AVDU>E&zJ^qqr)eGVsZ}555`KY@=px}+ z1O98T+RCGO_=npdw$(@fXup;Tm3q$N-XN7+uSJt}on}u^^b;~>JAE6a(dl-3qlt<- znxk!M$UM=vxXDXaEV;JEFUobOr55a_eclg9rN- z(JG_}EW1T7ZC{CSf6i@-xG)U@+U%L)Mmxogq;-vLW5`H=xc zxB3MSB)J|QWSsl;hhuM$$&))So?`vxo^bUh1iJ;Llkjb?TMm0VLx^7j8HGYzI&R(r6l*b~@(KDdSBV#^L17bVdq(uYKsD zvV6CvX^Wg>(*KGgK5+V4Ta)g&^)yi*YwbJ+&u(?FR)}IZsByk{g9%X_YxKXk!l*;g z9kB|mq%%W%-j$cmx>TCdZ(hv5RIc4N)uP)6#YXz^MAIhtcR5$Kw_8?lJgRR=Z280c zgIm2ewt{M;8{d8{MO^5t_0gv7yvbIjuwL83RvTK8o8oEuz6-Q| z0barMHsADS`XU-k0AvY6wr;|q@Y8$fg)@*7iO454Vky}5yq=VPgi^6R-TXm!Y1ofp z(q*l^6@du?vY}jO=SP}$(Fw$(Qe`7Vm_9imO}g)=m(aKVD1%FoY!SyT()2p-NKWFP zto?0IL_e2roqV&Fmv^=#-|iQA#&$;{^0un~?yq|!PD_6iPZHBdXY|s81H!*uXIi}Kdvz%*#I@CMZ0oCgYKQEvc_GPh9(0HFPwl~9CH65y?dRtvb zD<|IA3>npM5{y#A7%dWMrNgSo%xpCsX`|0x?py5arBA;`9&^2yTX~06n%OE_zoWO7 z{nwlHH1C*hqI#G0P!CB*wgn>Dw)kaR*bsx-;yPi#@GtFw#_M8Z?w}5EAJy}VR+BUk zG$<}-NE@3L=R!|=@#urE%TDN?PGH(G46-**A1Y7dw`CpA%l-=e{TJ2}UVajogon1- zfeCuO>Ze#hv?v@j&mr#tX8PGiJKQ#YbSZHin7&hk&xwSGN~WtvffZOV{zfKu$o!s^y$Q~EKiG^`h7 z7H4vd^~>AHffFh#2TlV_l8qHcnjYhC+^1vN3;o%O$davlWxe61XL)KhJ;Bd#({u9k z>2>@htnZr-0sVq|1yltQ`PqEL6Sz&X%y)fJo7tBg?9(qnMPa}Quz0$p& zguG?ujZi-L2Uj__Co@J*OAZfrz)ddrL35d9N$2)ofXsK6YU} zf3sg6uU>$JOzMsFwg(N>vC5s3aV)x2UaqT>3NZ{`V4sg;w+A=FH|4euv78IYTq`1@ z=s9b`rmyFbUv}_Bt{9O*Ej>l+`8cpp@%3K0Upfjpn~%B-`yg>5XNHcZdhXiH4)kbL zBLekPf6-9g_bdJ=;UWbcYmSPy%Cb4na(%7B8+&?-#ozeiSw6Ap(8@yRKC;??VcoUa zrw*!8k&f5IIZFignSy04_ZO_UI(8gwI<#un1TuoPbL`oGKS|G#rv0FTnE<8O`CLH*W6S+b#r#9HWGG{7i`LJkPiGgvb44j5Xd zAs5>*Pt$_}3JuhPD4igSjqRH<<3;)xT-2`~hXPV!0+he^2$35S=Cd*cw_tzcNuVjKYDiESj%8|8A z_OHgdElahm#gr)_UB-AjUB>5ragRxtaeXw6ZBG$%UKQHZ%AcYo z+B_01$(CcogU0t04l$gx*aX z_HlS+dFb8lx#3CH%3{1r&ZYv>r&)zaJ8?O3omaxkvtyE(*)Y*$kVOP{d-8c?*ZEQK zn$_365x06IwWa^mi}%`#zwrrs@!2d}*6WIvxEYj%>SgN%EH6Ix0^Ug*_EC6wG15r* zDkNIjBCTI35)}{LN?MC+B(sgT$S&DhTY;VoyVv%$KdwG-8ozVFZyerZ`d6u(nf3+2NOaL)WX1u(NLvN_-sc4+Lf{^wgj{lU2loYWebTY z+E3Ao>xwO_X*_gD)N|X^`esK%Suh#I!KZ0Kn>*r@FWdo<<-JBE5Z9#N2smahw?qIjVO-HDxzZ#@r!o@O`M_2`${o*r(WP6E1u8pS=5F3I zs50z{%*?E*3fH>SXf1PO#(X99eou@q{*mbzZ^QF;MJnD1H*BwpRP3&*td5XtjXUl8 za702dcUqlTOgndvIfTLYoDOU&!L8AhyviS?;@T!`m1W(I*RFc+w0nCh#Z_3XBSE!T zOtV)vypci{w(yEdPos!XFlm_)ORwR%M_7ZXmdZjs|JwG+LeT)J-WxEN;{Dgw>CDp~e(Qn&4bS0Vd( zzc5q#k%+&gJ1Iyc8wXXNG7Q+1?yOI(WW%hD(Ugg>1&Mog)v0=~dV*W4)u~PFmgG3h z4o|tB+X53G$?(qnixwXYGIB#|N@2@o190_@np0=2qCJ~?4&3?OXGuL&d^GV-$d!-S z_}kQ-V}K0%AN-q^JX#Wp^*a1!WiP%GiAIiXnBtNw$v`+Z%o?>h1x_R|kwJ^fyf2;9Yo5k5xxAKU_tP{<7d7hde>YAn<%t!@s??qD5RW&FByBF4ft0b^;<=}E zGl@2v_mPW!^Xk1^<-fhXf`X1YgHBJ-8j5(>xT;n2 zFj>%cj{mgr&HF~OO98BO+sXR%@R@Zx_z^W&MnNU_0UbM_a?| zQ`EhpB0^0XEEE&oN5S`KLV|xR!9#0ebilYTXn<#Ib^s1tBgbSS!Qk`=!Ikr~dy~_! zZmb;nI)v7`TugZC?gf$*PSazl&wiSZnx46?xcKmg4OOF_&_l}!CXv%TIMj+v%A_ujjsiVSk3m!juVSfSU`ym zs7_A*A%A(Q^{iAx3i#MU;;Vsp-LAusn(afJnrbXsjG^0rTC5_{&z2wQxqkui{^6SG z=wAHg2^s)v%4AzJqQw(~FS=gW;l6UxF}y!&)YQEY$_}9;1AB)M>JYq)hz78$Azp^- z)|Jzi6qwUTBpZisDmNM=X|@fN5D8(fwPqB7P}kt{q(y0M`L9%0yu#6v`puuVW^z8e zpnDL#+c_fa{n&&~KR~;IPGPdOV7#@#5R(geLmD1D|JOau?MT|I-y+Yzma3k@8kO>U zK}8o$!){t!1aLN-(CfX@y*=vs6MAj+ zRawDw?HjbA?m8j5n%qr>=&DCPt8-vd^U|4ptf#6jD&jG3)~KVmJYr7GvyeKh zXU5&F6)exHdnFb-)U{hK6*=2}AiSY&r##Usf1M}l@z2Dve`|=4%9}PR`4O(bR$2ZAQ+s#!ly{&dVYqR7RzT*oP?VK@=-q&WQ{g0)= zPjg~_lh?dFRp1y|Q9UuhohOSPIrx&a%Q{Os;HiTO1iI1;l~aEcET zI6Qy`#H33&{TLdMHuWrOY}oDGBw|v-i}7NTIQu!8&T2gmW)S=)60O?#s~D4T`2w3s z@HFmYZo)+_LYQw9ltaJcgsrL(&Jxk@{Pk~f`kk&BwmQTeSjAO2z{-qFb*zi{&xbXN^@=>Ih5Y z=6LHToju&tU{)XB$DjQdsO8u%^2J(3Y2m z)(-8@c9g#KFMf?)NzmMns}h~BC_BWb@7K6)p=h>9I7TFP@L+g$cO>&xVX7#edmvD3 z>tEojx}18)iJBNYL4uTkwcW2T3Y-pmOkbptZE^S@NvUk#x_pG6mBU3jZL-YZQHmz2 zwMKoa>60EiCk51wB9imNZsS#^`QP}(^}7YN9y{iTSCnXWsJKypYqPyM0$kxrPP3iI zmknLrK$@V&Fo?;xRo2#UssoGh+6dBq}=_Z|-^;X+*=Pg9zR zpCzK^sNtIQG>SD^t$n?#2QGQQ?0Kix$7j!TY)Y{VdTXBV>9I5DE#sq|L2s$fpqC*| z?cMEXBw?(FgHyQCN-jO}P+%c&wQsfk{QJ7azQkH-y=cuhq-j4`F29)CYTR`#zt0@|td(_hS-B&v@Hg#R+`ilS6nv?-i)nO0 z>XJ(J&0*TU0s22{6}!((N$F0zG9_hgO5o@1|Kq$Ec%b*iQ_a`~g;J3{&}iK}d1k1G zc#Gw7vzDM}ko<%eJA_uMTfJR>Kcaj${AV)Z%TyI8cax<{;CFaX;9NbY-EZnS;fmXs zE8XIQ`{lE!IH8_?$)2pIF+&~{qs{3ut~CS2!-~T-TVRn1lhxicG}b|jXv}+8oPrb2 zZ}^jVM*Tt_k?jJsl)|XJ%Q>Cp0Qd_plEr%(L$nKhkQ#h38T{A2aPjX`6#r5$`F+Y6 z{F}hP>HPaG{~qVxTl{;Uf1jEl96wk($o!Y)LLQhhIZ|Gb%aH_-vT94QcTuniGuD0g8C0#$+2sQUShD46Z@6T#g^&%7w zouMl{ugj|TiYhBZR9Q{$$R52(jQf$(2wz}NI)BvJ)Bc&z5wH20Enlxw2cF+8EHnu9 zDQgZwA>iaiO_j8#)Q{ww-w?gqIo6j}t3Ul*OJs7o*T~aWwV(QlTKWrE)4XN^7#L^B zSuj$d93r$+S!3g+%Xe^M6Lkzp4Hlg6dO!Dq(ZPuaJQEBQPw27c#{|hs?16rs(^rth zAfTT9nIlSmnW5*BE)mb~EA=D8Dmr=JxS!~jUX=ywwXU5Q+OGrZk((x2=sOQarf?d&Ac8fdbEs5NQXKNdDilkc zdi*HNf}1=B%U$!s9?9a%h*89F5Gooi6Vgp0Fa1{y&ngS!PnK9QI6Jl?&3JsYq+)x| zmRuC_X`5AS2&t#>htgN6}sC$TZac(1M@#QgE{Pu6C(&Z;UV!(II z(URH=oRK_LQV#o$pO>?|Iil0w1HM$uwHBAoCRPh+|KK|)+4WjEwgv{^NscZZj@H?&K6!~;YYp!9Ok^Xk`ar$~y}qLX z*ORI3gDzRe?%kehrD4>>harO!siAkf*0ik_0H<2fV4g0TitKZ{fU>vRiNpF(e4%}T zDXe;|HcZ!Ag^BE35z;2KJid+_DUjP4m9KREJATzY`woh{;_qWKa5^8>Def0n>+E}E zfS`Wtr5c1lE1ahC4na^bJX}o@7gE**Ct;%t4NGlFNwqfE$0#f1(01*(agJz8bQY2< zQBNB-$!;A>+?r($ot&pCLK9#ik*gti0szp1rRSU}})cyXC z56fM5%`EIYFy9=UI1{j;N3iVb65gp#m7ZIzoj46u;WacUDy&sX^csEWB;g*Ef-&HU zt90L2n!bN3eYXgiOdt-1-U(jQYt=;S+VPr7#y5+N-$!Z+%n`=k&gP^2iFB9;Ajgz_ zx;0}W(JD3L!=u78(eaoLxr@RXmY-yxE@8LLAL*Zb9x;Jr8~~B1$9q>mV`jUF)U#$} z&JSPXvet)(+THMH^2_%9vrX~@{s6Ix48%8K3<`TaQ*WZYn9GTYjbBf3oPX4#wX&Xg z|EPa?JrGj{$ICRBX5Ew-`UVLRi>zz&t!6HZy@o9ql1ODWS^fMGO;$;GS%?dR12euZ z#_=Pzb^Ybn_iB1~!qX^r1jMYE^g4bEmqweqbl&}9vT8h!$5x?H=^eikanIIY>9-Dm zV^mcWO~UbB>hHp26mM?Zu8|*@7wYz!4+;k(9Nt|rM4Ng)3q%!jW1=Y6 zw+|Bje7e8JX137JG0 zjF@lisZ)8SF7eGk{F^xZ7{PWh5w_R}W=xJ;TcoOJ!VPwTRZc?S;Q6qbov(iYlVI>MsxJ}7~iY>G?ALtE1@3uk};7o?0c1}>y0~l{#?w42`>`$lywP#F5$j0 zjtL_Ionq zNRda%hfSFtNP9AM!zIF|32jX92mW{#D4Sdp8gN~LckppEp^47Jr$jj!C*(YA+<^1Q z>X(<=%Rb8doLX`Nx`U&!FJ~L%kQCEF8d<7Cikll#Kw!8Id_N6rSs;^N@MNm!^~I?~ z6NbQqV}!(DDA4^9XEOzV;LcF1H#{Y;9X)oN+IfV9iB)R?ejUF>O^;=sxQy8QbT**9k!ue(#`y~_fNXt)Var>i1xmR@@B(?e!_|j&#+6f zH``Mk$jQEUCESZs^767LyD7M^p-$9H#!~SFc4^g99A~L87oL_(M{N@OX5|UmH!H=y zd40^j`Rz}RYWrqoxaNAXZ&nJ~i~VQrOKlYcm`lkIYO|Je0p^bwH<7vQ66TT^YAF|S z9OklHbv(`7$UG&qv3vqZvV|AHjiH5oTy%S;x|xY-%`B1u5|UuVV< zcFmp?L1BB~Tvu50CnqL3eO%hwNlpV*{T|;D|G3w4I`KOAuYTic_QAJ{WSvJnO`;y; z1)W1xzsKLjK6)07f*cqynhfJu{sT)E zgbO)H+P&G0V5Oe&J^7LWnvv*ivmS*pF91vsZ*stk?Du=!nwLXQc(KI&7t3W z%WuCI-0JKIe5x65P#C+Kogy`kcNHX(`%A=V^&7f};SPSbuUULR+X=?X04Y(`m)>+1 z3ZEph(CwKh^iW(&(#~!iLmXaGD2O55G4wU^Joy^pZ9CbQVc!rJ!-JK?535&5r^q5r z!iMfkd1kzYwF&_LoB!&^j`XU$C!gM*4be~A)Ou3I$byG!9Sknup2pD}XYH=;WNf%g zk0u!#ejviiHg(E(9jD!o*=+GYO!Pku4si_Jwt@T&@gmx$+pgv(_ML7!QHQ#i&Si~a zZ1^Wh9yw&P#x9jDql*7-cVJOJZx%g!$F|c?MXaB0Q|~BeZMJ*6r}0YREaS~Mzn8C8qK6hdf(Rs770m6)2DMp?SN`e<0jTAmr0?l{W-qaM`oM43em6z zFs4gZ&sO#4JCXP}BA&+YYS6^|VMj7I2Q;sea}iNjK!dzHLAD>hLh^Oo$bA2`y>EHf zz-Oql_kpwZzB|Ud@0wxQ_a8ZjDLHwI>7yvw+MoWO#WMd5`n&Ka9IP1qoh9F5^!FZ# zDzfRXv4=20Q<|hN{Y7|$3s5h-W7hmNoP3P-;YKl=-3;da8*|KgG=7f5<(tfLK_CMH z$6<#{(!ZP&554IxB1Nx_yA3V|bz(I3ls`%L2$XSoIDFB-=}i1?(Ts{H@}|zziQp_^ zL0+5^^5AM;o++!G~Cfi?p9qjNRAtSucQV zJ8=znm-nv0(|9AtJANHIpObZDlHWvovoju(M8a&+bYPpB`fb~#r^X>zvE1ELxqFK3 z_uAAC^m~Eq%Y)gTCQ;6#uWjBpMEi7Vxl{Y%$NYNY@-BV*9@0)jx4YCR`6MYu#;mo| z&-^dvU1lTR%pxw3cu7o+V7sSj6@LRjKVECka7n)zE@Xx`82c+>VX^$;1<(VD-SCLu z^aVXaz{|XY(_?cEOhG;&(fBU2QzK&jOusWbL)p1*z@`&YXEBKjNWH4-DPj$2dJ;A@ zX0`3rCvm=P4kun=@sVF}+E!Rp2{~lJfpXijy8LPhc4;$ER+G3vL6Zwm3yCg&#r1+< zc1kHHVb6CUzk*5zTJOc?k>oztv!N1?@DGV>(0n~9!{=buO~9Ep^^inqw5f0G;TIan zb%Ak`>fQ3xrvzN}=o9NxMD=rrsJWp$o+c$5bv18v-t};gZrTyJNvL_02af-v?eCRo z!*}1$WnXCXh;Bpe)i%}jyuJ8_Z?}%z6^@d$rF87e3n$L(2K< zRB12$-)H(?)7yWF^xrJ&6cRet^q-Zif5H@n+i=VBf`v4mPKTq2WMwbTt;9DRc5f1Y zx}E?--Pw4PPbdJc=-U69TW!gaKm~-W@Vs@$5sw`CDpkk5&SKaTl*x3=>(@@C_s|NqVd`;OinA@6yq+Mc zoGew3-Xf+w_|^kPdyt7&_v>LoDjer)I*UwiSYrp`rZZxtJsB&Y4*;7PO7*bC3V3d z-+^Ug3ubR;;>||}(SO=Y^{(bO2T_Bj^Op>S0;geX;Pi;=X}V0QtevH5pJ%aXWKhxI zWIg%U*3$BD!_I=P<{q-+Z?&`O4B(ZuR7>vfkd;-(^&)m$36~K419C@7=bQCz&)VkB zSBACXqrA?Jrn%&%dwL?7&&%MHQlhTo*6>P_|Ge;=c2ScVBysaL3YNn^aCXI(2Sg&# zb?@ZXn@MDQYP3uTy@hAG(c0E#>0lSG<}?D-%A3{)#?+OtZAQ1Wy24TU$g8NAYANBE zDzAB|rO8X5vz8Nliqhv+90pnoHrsKe+dXA%SlBYjF$wsOeDrg<3vj_MbyGaK@gvq% zO}u+{=wlKeyu`QA#~q%=zwiMkJt7JNBO)`s)(*0RwV$G=*Zv?Q;x8n6T>*=(Oc=R| zD@1nrVDrAg6SiQkjI2mKr!6w^4r`?ERm}cJ=>1XY{YXb}Ft3tAZFX1MwsR^Dmf4Nq zzqRO7_qo`TRW(c2ygyS$y`B=#={mJ#NHcI1NK=+H{jk|YMEm`@4XUMhP z6Bxqr*`n^gg2XE;#bsIE4jmp5yvX58X(rC)%_6M7hUK2S>8~}FyfZxE9dH7_`XbYT zAc*tXVdnYGT>9uguY~VOuKx^v>NvVjbeN&*@?3rNTfnzU?R;7T=c|`@_4ES6fp4Gu zt}A2;{cT_LBiz*;rl+O!6bDylNdjLC-d^h!09iI+Q~2gNF{)P+Pxjn4_WHgOBYRc{ z*h?_e8^1FoujPIUQ--Ur2OnZcO#f9BoC9MI1jlJfYzQ{Y?7HF@Vl0kF3|f!@MbRc8 zOn^k8$$!yep~ETdQ?z9&`{Sp2dX^QNY5{fv|3dZVchjizoJBm^1WHJ@otu(Um~ydy zyg0}3Dfm=;rhh=A$c>t!)iX9{YaqgWF>A{%S5Tj_NJb6&C&TvOS7@MNNgoO-qgT|xNfgh&+~xku?xLJGG2_IzEVPZ z4yC6O^Oi1_TAV5xJ)9pM9#}W}LEC9uBL6*&cQP~U+R5P=u0vCbQqhb}DbnwZst)O1MF|jlEe;KeO(O1fOTjCTaoNR_)K)KK>1TCL;Sni(yh&9}RZ_i&gz@IL|gi|sb`-`$XoJw9Vp1I2L7+|mXwvF zr4t0{2T*)ajGJBBunl3d2vUuw$XZa$T*j`x*`35BDk})zoE<4EYAHRK(z$EQx^trB zB_NHclxMa4wV4v~Pc+PO_AnUY;CA z=#?-QX3y+;&DmPQ?DQWmt4f<1`(#2^mEm8sx8_(`RaPD+tIE4+Ev4Nl!#sYafHR0yxP=8-SeezhjqGp^SW29G*h;EbVpWz$2Xiwb8#xRaZ{} z8k;bgmWtYEr@iLB;BYQ&2PDqbp??c~SMRQhsq?2_^jqyUf|A~CQ|$y5IPImr0kI?z ze{NzTvB(U(BKEak_iCKGnD7%K|J7R6m64JgeA@#Y?6^TYVk88LojErQFZrx=`=}4-4DlgWc()ZciPfZnd#dA zotEp;Owg-jf-<{#QcEuHmvBeoZx$%A1E`V`GF?<{a&~_sg6@f|0@adwAls&BFsicu z1HyA^A9%iTa`5CX{aa;nc>eRDI4~G^+TIKrp3hV`@N7K}JfDc~=p^8|^NEvy=a}Qb zGb;g}YxdvAE+(ibOca)sb~VvmO}8MIND!FBciEv`rQNk*9Sf%J`#HR0gEtb9r-J6Y zYSp7Sokv`&B9mK0rmv2eXero3-(#YY%tj;mUeD7ykSZb(U#3B&`pPs7NpGb5AsC<` zYI??B5ZeLjAro*FiO5t2jH&WOjHIh&10fjT%fG$8XMfgzeH+gjV10A{=a}oe69U1Z zAeFhxDld*)J6WBP@xaNf@Pa!NR`{P-->%2|ukYBoP6ivQ;-vCF24}lTjhbdpoC;3LHUXplOpO4wH=6O= zy+2O1Pq#Ov?is|Gx^k|Ly0!dJe?F_9|Ae{kauKq}TL*MNFqtci@Y+@xSL4lXq#reX z=TS=aEYuTAf1AOMIWOvwh3DT$>9nZ7PF|6YUPpPG3m9k&tsf=Eh z8<{Ejhr(qPLC*@8E;WLUoxsrj5T$wr8r*|o-M4QRgojNVQIeQdNS-f;0sPXMx#P$H1&YX z?^|9J{FRQznzz2t=#Sw?D6o3Gdhf`w1{_0wCg8}WD5E9SzO$q00*hmAlfYqqZrHCu zL9zj<>p1=nz?iN9Vakr(?w@G2wD>Qj){GWYWyA6$o(|yxS=X+=o~iD5obl(;RgSsd zP*z6M1)mRX$Y3uY5-=5A2bhYc0VcWULvMW?o}Ufs%OsPx*fJDmE(1z^9WNqWKLNvTAZg88D3iV*n*PKdP{E(itW#vgu|oGYSIYWD zZ-7p4HicagvMO?f&jK?t*6ih-)f&gpPD}11YyG)gURPr}8rB+~nc3Ma-#oVt2GeYW zU+epDNmf5p(s<;xCO(O(oa8`(+q`NcHW#TNV9Y&z1Z=ITv_ldn1+O4oFnqg-UK-W6 znjZ(kh*U%_5vA0uh5?t1H8VvWjOou5kjM$*RGMRL-*II1o2fX+v`QGV%SvrOv+)Ih z*hhFK{i&e7*yM^co7I`|9YT0#X8JAs@VhlEd>v#9n4PuH1t{i%Gf-z&crFY7H7VACERh-rSdO3r zL_*F7XQEMvgS?osh{AlSsbpGZ);SX}WHi0tnYvB1FqEl82C7n5{KRNkv78&^G4%EX z&U0+?S2&Z;9cc2|eGio*L9u}N+22tLG0?L&_y; zz>E0jMAP@bDZNaVUZVbD`6Wq8{L=>)bDqNfN(Q|3K25}FaO)3apB}P5g?{=dpSnL#rJ~Z6Td}uUj!A1t;S-)end{b`Gs{z>PLT;u z1!-B>zqSarZoF(A^JlMcJ66Bmf4f+le=r^2$Wk|+ruvxHsNHJ>B}sCjwX?nLziHZk z*=awlenpLXDxq<#f9#ITG*O&ptc#p?hu1v|XlvAxzOUQ!8{qv9rp4y^n126~WbaqO z4eDy`>LM5L$6$%T_>@SMlQ~MJI)Sa zWMlV_y2K?XZFSEqN4ym@WIuY>_an2u+c_z{>nrNFzWi&Fudg_Mc8Tj799y3e zSO-|&(Qgm1zBfdjt`!qW)|dZa;`$tM(_SC=se+_fbqKV2>>N14buKX;`~}N@!htmS zsqP&W*M3EB`}e8++qZocxABA*YVGReR(WP*h3Ly8uFEBxZI@1O*expUTOk<^qiNw} zAV=|uzcBZ{;TQ4uX-;s;zjPJSd8L}qEhlG>h@+_Fy`&&|cd&8(TnQI6Ze^?&AqJKz zGUXwou(76mg@~0EE_Lw_5!3K$*-|S4L&*pPv`hr-HU#Wbp+izuZufmaQVZAr;9RWp zy(*UZzVyxXZ%xUxu63E7U;aUS&-=VddTvbUc~O#{4MP++|5j)IQ_UzhC5#eEHp-a^ zqogDmh5nr_L+_ZA)P1v7ExS*L+G+*4M104kvX;H9Rrh|605k}>+KT_I@G1>t`M)+M zGE$2EH)X(taCt9k+w;V{(pJk0S;!qC!PRGzlr4n>DsYH5a1ZJGeZz!9;vz?7MKq4& zkaQctP_3xC2VI!3Hl9TD5~5~~+*>-|Zw-T96*uU)34?+@dRRm-?IKon6%SuJgjS8jJOe9ErTb-jRe)n_)zhT-dn<;VD#!l*yZow0{C`{Fg;K zY;f1A-S?QudXcAV^?gEeG6N@xE~@AWPLyMm&z;G28GljMpIxigic20Y%oQ+Hx1f%# zjHYJ;yYP$^Rnc2l3n2JUU4f?$XGAZ}AF#HqSu~kb^Kod;5n7pRU1H@%=#hft3QMjU7CeSBAT{V@CLcH z1ZgFALAWH>+92S^+ca(u=$~$KY-YC~WfDfWM%{Mrfaq=-{PZ3h-Ty{dNNl==s%IaW)Zf}HB%Lp?%1DPelEDmFUuT@&uyeEyrtxs67`hAIm zFBedMUhrii2zRUs^kuyj=;<#8-(vN(SXZFjcqU%nAh^m>cbrfZz_ zo}KJ`7;I1>&>+bSry_jd7mL2O^L-rH>Q);eB1tp0jFBkT2E+T(;ANpk$3& zEI!#r7c9{W-Mj%frTa?tD2egd?PI6t=oU&ZDLQ&9)-ygxn^`N!um0RAr$bMqQ2m;G z);c?|oDGJNqhT}tx&`&I)lt}$XvVX0kdvGZ*+S_*h7g5no^)#8Dl&JWmI=~C{TRCa zAL%yz2JAkNH;u8eP1Nv$q)gQGcm~cnx_3>Fh38fu7n>1;9$yRI$_V2V@y97YY_`UGF2w?4^F`A^g0yF^+-SGV^_Xw#qtVf{7!BpHNde$I01 zq)+u_=3}(3pFZXhklnvhH6&t(jj!Y=A^}9iRm_#@`d>FQaxj1Fbr6)-y7sVAxKwWOmv@ zkp#V~uUwlF8k7owipYo&e_=HJxz9d`;H&)xTm0FyhrH$4Qg6O5B6Gq| zQO^)LCs#dt*B^S!>*#vIw=R}_gfQM3;6p^Os*faRXA}{?|2R^qH@FWzS6mebB`GOT zkBUJr{w=t@lU#gu-^FLE3mVPhOWpQ@lj%UBe$7Rp@Eem<6C&)kt@Ok1dLtB8|sJHxbX7*$Hj%HU;Ce;a738zIqQ@m3;P^|A?oaJYFvn>YsLvk>J#87l?)Ep zrPzCSEPlUWuphwr&!)eo1V;U6dyW&1KSyVB_FPXH-FJ?oRl}P9&-f~QTJP%n+&{(Y z0UQux>z4#c^^=_SBQl-jd7adE{gYI~YO_aXZ+caJ{#?ca>$T3$Ib7l?#~veEyMm3?95zrQkc?JEmK1|gbY zh5nGZKl$qUNpY)KBdZu^?@u){(n;d?xW4-{PCd||SFw6g?omPRWE3btyWMXG67Z=| zof1D^eSe-|&-W2Twv(Li8GYw_hI;=NJzs7>XR_K9*Gn|Tj`4qae+q9Le~$aE|FXFK z((51Ntp7VFz5X$M*FQ$RfAjz6^$Qa}(E7EKTn)W627D#piZ{`=<>1p?yrFkCusg~`5;&IK_=s9-+^(l<8W#>8U!#uvMv z>aTD7T4PM#Xe%0H{l)7SmnZZTPS#Uizn(O?il1L!ed5^(y-rBhYg;JE{D^NLn%J6_ z7r8c9jsFaxliCql$GY}+R5m8i0bSJE)O#>4TnT?#E&CF<9KGx9w*ol*y;rRzt^(cG zS*V3ZS+`3T{+__^FrfBSVjAxDQ_;aLp_Zt9)BBS!-&^LK*nCH$4eX=&6jcyLnk&qF zS57sPeGT!#S~)f9pDOe3o#t3O{_{AKWxo^V_j>J#&2JzVwKnyADVxy|T6v3^pHI*4 zmZ)EI#Q)0t2Ey;X$QIT-lHh24`bUS8;P+izA+|o9i;}JVTdu8AcO1-;;`?n0J>Q?K z=ZSrL4)yK%`1qeN%7kR2NGiI7`H$^83iB7|@K;pz88nq}R6=y!p2l?`1D1M8HP~~L ztLI{COO1MRmk!HBx0dNEbt6Yfqd50eld`B3_o&QD34LFCp4g?be169{)sJ)P46k}@ zxmcC5#O{{mG7ji~_QQ~PI7<4CVr!MFU(kT|MK|uENpM>~t;np^?xIqtPmCTihn&1u z#jDFlGCq8OeKWF`jMO27_Eg5oRAxxpknrVtHj6PsNp@)T>7K@gD4xyy`Z~JGcsi|? z*?+C({f?$}MjXOb;DzI0}6XZ&iM^3~tkogL6X+0z#&{Tz6R5D=gw1Bd-6 z29D2>QL`5uZ>#1D;=u8?;~z*=w)|hKmb~hKgE}ygUT93Z4vsN04}OTfm+&8a&bbbt&|=-2E$M&S)Lp2@t;Lnrit91*ebMZ+ zl`c1lB)lECa-%sXXZODYq@1W_t>)Z@_IBy<by?scJP1FZLHv)%^>54hg($6xPN1Fcthr4wH7tK5&a2PF|S z%(uV)F#f2N)iJ)&>Srj8*{Zh?GjR!&y6ncES^SjyI859A(shVJPyokY+AaRlfseR; zlKD#yyP19m_LrV~rgl`g*7!?bqjFwlw@!ecIU8$B68=DIdQBCNV>?>^bb)cyjgK9* z_cydZOT$O4MpzPb?pC*wZ4?;&8Lt6rMWt1IJtqZAd?PlZ6cce{W#FP_Ek|KZ z`^O~uZ*LvK4xPCF{kP`zK?~L^{vJ)3tU-W3aS$=(XlD{0x;L@+H-bj(%k6wcEOTQvaXFr| zCDfc-8=*?<%i#t^8t(Ay{lQUo+E0&qY8s-#?ES)UDxo_Vtmcs~hR%XBeX~2Ha5br~ z$=_9>RPd|tY1Cf31bYU*Nrl<@3cZm|lq%J^lHohc?l)6?#_88|8hoNXEnJe%Al9_} zaK+n1o{hC6E8^Z27{v)?swtFNw9L#oOd>TtIaQD2^2SS@v0T?`!zEJEs)l<F zWUlB^_k813f~h7J#vVgaXS{q#x)7M8Za4xFbcYTP4vY;QP7jbsRrfoXTPCsF^4!Eh z1{g#4pV>Jj&t6X+mA2c|JMTK{$xE`H$M)$tNFoI4O?HPVNLz8RQdK>C0&CN8teM(% zI5=p*20NWPC^MpdnelvC_zePmHRrL)+s{3ymtP5WjSH4oGqcqhIs1EXuj-6qg2(xx zuYa_>L7r|a1ENJexcUdtrnsmFG5_42RWJ%0LS2)BM2P0kU$CK8wVnQmd7R5vy$9B{ z*){5SV;Eww%g!B~-FFCwwuIj4Aiuo~^URl=Ve}|*BuDr6#gpxCk?GI#yW){?ecAML z&3>`$#vf@dq8wIU_B7mdBj!Y_@|Mo^0-r!e__TdWZtZRA;UL$}%pA_|j_}iUv~s+| zn+(W+-**(2))1H|C;^cTigpj z&W&*NHspv!AY7c%Tf?j^#%q2wa9KAHT!?Z2-`?tG(chL7uG_=+%G^W$U7X@++6Lf7 zs68(L=(g1TnHDQy0=}7YjXQdtaL$+*aG(P!;?XUBv^D(bW zN{>-EL7YB8!W!HW3a%{PFV#psg228&SRV7U^bQm>TN)86t7e63iq)0N0GNiUfiNpu z0CZ37tz6umZeFkqmQ`m`dT9;Gx_Yjr0F$Pi6s?%6E}tEPJojzU!1uSQHkO39b&i;& zEvkrs&M`3b5oKkl*;_r~H3|vgS_573wR##iXmD$0y2hy=W?c;Y%kGrmi$FnAcPuAn zVp6bS^~y_A0?WzBAX&8faIRV#XNOme3l8b@YYN(aq0ke)>HDEQH`JBWpS6`&JN=rX z2SBYpAe_IzPFI+awU8Y5cv4)OuihH}lj8^qGrV@`!Yipb zylhlIaY48xa8=3_CXu{kk~)ug>?*S9;rJRE{ze&IvI`Eti5bW!J#;@wCAOP=m@!6R zKT)w{8Xi)|+I@D>5%K6f<~Utv2M1d-ZULV+5w&flIfD}s&(lI5?t*WB(daWI46&|5gu!4B}aPN z^#yIV`?Q_AY3cQj+jL;5HC#Qj1(8S+dkg?oNB=PJ&Xu`*Wo}{d>Qfk866M_e1%@wk zk-(~B{wK7)i)Dc0uFum*fNP4CZk3N0Jbmud;OQ|| zIxXRljOlww%w;z%?x36uNLGD*Adq;PKFbmB1&cmgHvR!T!>mP37MmnoVXV2}tJG`I zY*n3P(%LPnUo7=e8rRCl+5pjBZ)Sv!NX@JxX@T6(5f_)&hlr;}_4`mPz`>eX$D!u{ z4YsDZK;(6>w5RB=H@Vtf6AqE5stl+1gI1Xo6gY<`E^CM&e3EJq*WX7q2#M`o5WZME zlVPMadt0lH^!!-!Sm+N$X(TB=v+GjOESTwJOQM7rfgrjTm(-e`S@7ac{ST`wV3fL{ zJsE+Ur4;)ztL#R}8AHXVz<6srX_5lxT7(F851>ZWeuS;A_Tt7({iEMrqBEh3S1=pM2p6j?!8_q2@@~ZD&wqI@Y!twe3st6esguQAN+k9hu!FGnxfI zZtLk>!ddRvafFTmMqrH2eMo+9>3V@RM2dpAZIn0;lPR%?7mfU3t2W_aR0M9dZ2XrRv zpv%V9v5hk(o*fz{%3?()~ zY?x$=?5(sxSTa=0nehFR3x94+eR^c3%jD@(p0rmVrY@yx2Vdf2^Gkd{fog_>(rYp$$#IDpjguD+g!;p&AQ)rLXiy)85% z|CWIF;|+})7n6B%r~cLh|BPdh3yIZ_xuTcJ{x#K@ox9lT+|+)ZyInQz*oOg}(K(}M z^ouS@lO5Gc#cj6SVzhk2fR<^GLkE4H!;C-on{)3M(M*!sBO4^Fw~?!rceZ&)|;uYS#IMjNJ~RJ zGWC0wctrf|hw#Xk<7r6OdU+5Y4=zX+R|SthdVx^n6A3$jhZ|6!PoYi5qH7 z%ls{H5@PUMeuf-g{Sbe(Z(Xmx3!A?A=4H#4X;*6V9mQ|=eh~eb#9B&J5OK6b@;kgI z$evVj9dfxEEB;rN^LBK#po8=O`Up`E9rSKs&q5tVs&k<#M-e3mf4yCWB$TyGe++$y zp++?RB4*OwX<9K9_bv1Y7sGH@y};Fg|-vIEZfw{y|{j0`lmH zoqlC5RMoNYS?*b}P)A<4`6yWD!q#IQK95+%Zx%)#4LgpnTDyA|;Y4hz!iXy>WER|e zZC>wI)x@`7g@7yFOQOT#lE%@U9Fl*LIu>Bv)YM249liF(O#E#45dJsP!#9ixrFxKi(+_$0(86s|r3*`9p9>6>Y+JI=bne)JLi}gk)ybmWR{2GmIDu=<};WTb-e8xnX&t*0ZT ztD=u@`n-PA&Cg0kzQ}B6c=V9Fa=Y7yaek;Rk020hj?;{xR4*ppU>{LE&K(HY*UaFM z%6vo1v^K(plpO?ItE?&|yC7qAw%P(8-9Bz$y#~u^1fEpoWo=7&S=gs5uU4cKmgRVw z!nJ)>Xl)(SP@Nh>^?u}T%~j~w6gioRGZMsxah?O{((O}gbBXrq>r@d=aq3B(mzuNG zK`^Wf*%JsxQ|uQ*hsA-iZr$Q?nZ1da&cG6mC*vf;Sj*@~ zXUbt8ZiZfRuaS5xQp;{_@kA|Hm|RLIH3>XPTPQY_;Yd-_O=2&S{bklwZAt6)bv~?c z`rN)Fp$?}bt@j;-S4YEFjN6X#TSbx~?NLuWczA6U33ZeL6mfJ1!A9}Ax%hoC+a!{c?)ZAxV>pM#1 z-Jwcr*@EMx=t!$*&uNP~t)hodRg}#_#cUC6u`X#150iqY(9W{(t3}Yj0(k5TY5_#< zq*$zVdwXRL$-*%*AU5lf-gn}`eJHK3hzH-5Bj%*F<+{`+>o@Syzk@0ST(vsc?Khu#eE zY{c<=w_t3v>{MFS6 zEqiix+^Qa=cUXKBM{fb``}JF_X1~^+aZ|Ec_UDJGgJcWZRxfkW{=SYXp>6R}P$0Mb z7;t>#UoTh!=~Z6icSQi$w&)Ri<7Np&YOx#3!gsqQLAnJVgC5U|R5)Ai$gxNKx%I!z zr<&kM!S8QrA9Xv`m&ol7_wxkEsO>8!lYqJRRN&i)<69lR!_qWc2;yl8l)p`$=;0bP zRz1Q9xWYBLmZ(JLyCTob_&8ZIKAz1V4jU2De)ZBv?FeZxaj^+crS9Eu|KNLm#G^z=a1^t3<*qT6_PPUIWT-an5!HsOf2B40ac zm`x3*H5cnE(VEW~q=8qlRI056wU-3Wk5r@ZZk?|L6ri_@kc7Vf=y9~P-@pFXO3*8E zh|%1w_~Fx%(4}+Hq2BwSjt`fJSG9~HJx4!sgJkawWEt;l;~lk1w;8Od0^j2Tz9)CR zX9<7R@5~ItkJ+GXOkq+oa$r%gBUh4J3$@cq(D1IgtpptzSU*++@je zi32iM3Y4Q`OyMcN(H9~!;3X`v^hK!p7$FcwSj3b?{y~A{u@+p_# z1GXZ<-aH9HJ`PE&L@=*~r>(2ke>EOOINL*+OB+IQ)QyT}Pi8Au77*{9RI*{JF|yN( z_%Vx`42f}W<2kY<`@ds0Ib?lC2z9J2hG^^9HW!`P0H{;q1R7Ea$IuUeROr1}SmG#& zWT0Q)c;o-8Z^OZ%Z-5?GI_BO)LRWVvcI%2kP8af6md0$-fFll#|zUz1S30qI^}KMXOb>apZ39Mf|Q19b%}{2!O>W|?W~j5y$$YJ z@N(~l+7KG|loArXoC74LUE|WCs@Y&bOYe=U*5+UmLl!}?UB39EUJ^gr15^2}=c^xS zfnxdLRzK1M=Y^V`lDXbZV~sVvFo!kwrDU#W@Q`?_rH@08soqz!!Q!T2}wR-d2|5442){^)%7rtM^*_Z@EV>my3j z3A&cweTL?Hms0{m99MdWHfuE|P>0Ev;GJXXLWx;I7_4tsq4=AF8uW0rwzw;7N3w)@ zs_t%W#@1q~ieqAmAXyLE0v9$h$*4#lYe&puaqPfj@eL^}QRbX-FbeJ}jZeV7EvBZp zPdL{P8G!fW!7Qlxs;p(lW|LWkt<13%e9H0$+nS@;)=yKv!M5fow)J%7O|~^hv8|^r zOu{_J=J2c+9M#^B4R#fpjrF{5Tq$f7gD0H_!3$kWS>a0-AwRkZgTV=iEg%MD+9Iyi zQ2p?Lm|Ng}?3t(6*BR+Z&`;(HzJId|{+|;S{kw2fpA`FC0B}msEIUh-5k@bhXhpc~e%ju(S*uoxMJ{9*WwR=iann zBGFAl2lfj;gf`zd-My){B#d9c{!cVtIef4R&N~${Xjyn=9?^EP_Yl??VB6qei_%{Y z?Tcpb;cI?q-|F<&)z`B0w&(#*cBfXI7u|mbH2J=GcBe49KaFR<7H-H}CX2P$#8yLO zKeF=2oEQO_TU&_ivpQc8T#QD&M}}J8wZhH9`-G-%w4q4`&#^*XQDmn*h?2+a-0fp-R5K^hX^TzJ8HwDJj4#zEGSQclbmrwnQD zgr&YCm?=i!w(c^s)nVGI%~iWXpT24{%zTd!o}s^`aXiYI7OBnEZ(4aAV?gVFJ@z;| zn+o)o>R6GrNIzVN&BL>uTE)cD?LvLW(wA_UVRn$)_4 z8jzhC$EuOz77(!vV}+6W?x*`C>53;(J5j&yPrdTpF?oCUh!pN8VO-OQmNq93SxT5dZnZ_>IR);~RlMb16Qa@5?d`s7d+XkIpWCjz)$SW>LtX3M zbgk#LLu4L{?spJ{Hho9rj!f_I<>MM}k&&+&&w0DCz~bQPg3Q_bvB>O_EmNrydFZSi zkp*MtM;5rbvgZ?RXu4m2Zyv#no5#X^1}+5av-%XZHC3Y7pV7M4dYgCs`VajK-5@Kc zCRUn3!YKSG`Eu80Sj^u@zy9-miuVIP7LR+Dm;v5Hf~B$OLC%VPFxI=k1I6%TWGsyj z*$8kKt4EJzv3Zs_W@wju0z@Xe7w6>Puuc zh{RZ1()&)6bKLgmK1XPOTIj$h**nw$P#V1eJT{}Wlkn1WN=W^u>Q8@7CwpLeROE65 zP?Imc2a@R(t#jgy_48xRWNA!@JTv7oii@t?r?TLQi!6HPF zK5POwsV%bm!*(c4SkSpu+#NmSk=KP%lHyg)@bvXF0_F9!VK~B0ulW=iB{!BSxw$B|!or z3c1cE#srN1wGToE?ArA8L&^o*n=(y4YVtrsIyu(Fkqbk?J2J&&rQD(Fx2iA2Zd^TG zG}KelkW)HgdURb9DS;0_2Amgg$pS6o2*f49-TJT$!-pi5WQLvk8~-i1-`%=K?k+CC zk^fSybT}b|bqr=$5!HirTJ1zhNj6gqnN9}0eBVM%HuBACC1y2)2)?&@iE%5xfJ99$ z$9PEPupMlL{qny`*%L zQ*>mz&t>Pq0)-}hBJ7QJ=d`>B@w!u6e01J?p&8;EH^}k4laQV3W^+7Ox`8ZbIFzRDIw{6!0L)!Z1-feMR9)kmN*hD)N;OxO1We?vzzNQTdC)j1i(J7oiKz zHR7!si&Vkq;fIJ5;#a?h-V$GQloACZnNAHYDUl52o=dVpd799FIrXOq&_`kqq1>be zNeR*KpRs;1`M|=?$}XkaREHXtNuAw8KrlyP(wK<$;fIX4{{p{By;0=_Gt}bfla(kZ zp+0rt@whBPb_P?*0+cZhbBLM>Ulnyx_UxxBNGYMz`X|FPG{-Hgk|gA0ZOZ93V2*y` z)>Hyg*jFUCMsF2#@`qSo>d=B(GXNBmX*6>q6xz{lfNA{tGpk7o33IelC_WBki5pqc z^jY0|jU2k7Cnl`{T!+1NyFrbDN@P`SBjaqiE*Cv9vJyNiJ~x!U7v(&OC0U3bh?f z9s8_|1F8_js8Oi>m#UCsa$ENZC81&EBDY8ozr=F%>62;%60XSIq;F*;;c9GW(#d7Q z_JV{ZLas^pZtqTe+P-!UDAm2@hoGr-bJDc8U^WrE3q88FcAOmD?WEId_l>th-@Z`9 z?UrvAfIMqsP`C3k$pY+sZTWe_5V#7I3u2ME1)&27lV6tCMVs3^4(G)2T=9nab$;Dm zt=Q3VL|rP)KoVfLP0C0dV0i|e8>f;j#{1B@zxJVlvFurmOcm@$$)76;6AYy|i7pz% z&gz_j63y3)=S;JE6YK_hwisE3B?~NaAA;99wO*hWiaAyy!f$={)fa4`U1^~3+{SAX zoax#hL1l?ge`uGZyF@(?Ufeh@@w^evwHxZ3m#$CT+$`*@3Isq<0?kgl+3ib27Oikt zu5JBX+PaSGt6X2_TEk@_9ffaLn8=&n!F~zRvf>$s-~DPYrI64DfqM#cG4u<=Ni4uG z@`4$t_Y@L~raIQ~PkhFbob5zrQKSV67&a>t`*LG*`rvTWqX!UA2nDdIws0B2n#ukU z-9H8iL<|W8G6~duLRj{S9HKIhy*w>g0)W4f0C2%a09bL%%PpV3VHxEdJ!|%Hw0_!> zh2h18%v8p)N@p5e>Q{wV>r8{wc_>3NmkK)ArC%!XHfQ@Ok5$5ccau}|=fWxBi5NZL zpg(nf_wzMmf4v4G-SFY^>&K7Yhvf>PbjALwD17aWO20c5>>VWaU$9^>4GG;*B<=B% zFMpjQ@7NwF+RW86Ve6b&DHRMRB&|1m`Bl7yKFpDaCd@9TMWJo3aD_7zb>LWhMYZ4{Xeb&%$@pO(UW{=p7{KH9R4iwv@CUfw=|cjbd3bvJ{}wo(4Y9dh5g8G zju@cxF%$dk?M{2f-qK9AUn#c#-TuWMdtv~Rtn&-MwcF1J>K9IpjgLTt$SI#u`E1TH3@{0po@Ivi8Tn$g{#4|IPvD$6hCqV-g)PJST zEi_t;I3m(7(Iw%iZA8C`e8gItTWF*wM(S5UnD(occvSU$&11aKa!--1-FF37Dc5+$ zL9X)|TIK~3k0KPiC72^_38HE24Yg10z91C)D%)#7unNTwB#V_teB;HB$ydsCgsFZHf zwe8)LT4vnR5Ij@={&yY{eWVhSgxX3XHO}rc^jFQB<VYj)6WsZMDXBuA|V@MEES1|<*6NMTB+Yu4(e=H zk&dloZGqOD7fv$_@sLZ9;KPX^qPb5?2T|K?(fy+l9d}q}JL&w` z7S4u_AVE`9tn@q>y^0X6oDLdCm=W*H8_XLlQ&q^Mhb$lg7kat@Tw=NTrxwD*7Oyj8cghjx#M-6l5Q( z!rB$O-#y=)>8v5TMKBcxMBp=QukABJbeY zv5?z74=XvCH|~8f3f&cUl!oD)*ib52$#O^2IQ^z874{XrqK^wF36IA`mFQquA_fXO$rF(6P-Jk_wV?E~AH^3@nu~dq^ z(RiBpQpx&tyi`Dq(mjJ3i|bHhVo*2*9S#h75)4!IXZi&CKpf};ai9;xfj)v#$WJr| z`P6z$3AJZCNY-UF)=QRDM6aO}NjxhSFBnzp16^Q;z{f+-^xc*+L zKlAawt-lKnqK{X!HU-TA=1)(+3gL}g1N!@!|nDF19$tzzpAd!VsYk4 z7tA~=@#jU=tN)Dnorbm}Woth@%+~(#5L;UTf%!GYUx($aqg5=!tld0`<_&k17r86+ zgHHs_E=+y%v>Z`9VGA!7&q@cC{F;;eIx6w?5cFwQNECRP{(12g4&<0M`aNaf_;k)q zPm+j6Dz0^iydxcD?3mJHP}$k+(96BOSYjQaBPltLEdZBpk5r=6hD31tb_%sP>uFaN z8Q*`eC`Fm{#2%FK8urkhq^a;rYS?=DL38;|YR{;#w8dHUbLG}lQ(-NG-qO4G$6%kV zBz6gFU$tL2U8D)+{*#*m&;9S2)h`4?k%>p(n8Nu$;<=ix({Cx2bI%h&H-@YTbAM7L z!#R-ewGC$5*B%jZ%cE3l!)rvp_A+BDEE?kIvgSAGpV{m}4VK$Dnxmv~--aLC8&^Gs z8Jsd1T$%@hzw+2NH%#FMDj#GDIgIC~*g-CKb&G*%#OG@8>w9NQVx&TAM-@m%&EsL; z0kxh>KlSOUpClZsLZGSk-teOw9!dp~$kAgoqw=EbchHQ;y74#o9j&ihTmU!9F}h~2 z-|cG#@cO-%(Z?VXD(YFYw+SAr&wYQJUr`^>4dQguv|QgmiJ7S7HQ}Zg^dVG|`M}~2 z8lnP{#_j6}S8#$M&&vy(k7)h8#v4((HhMB(r@OH9HT{2-pBfc#uHWH=2lPcFH3cLO zisZI?KMIU1-i0KFoI#V2VpXY}L6bZZF!3XD1`&He5v@s!ezjj^eW~Ro2f78_Z|zsm z9oCC!jLOYrL}BlT{{)hSf}TDzEtm%u>!DHui}_QrSZQ1LSwmwN{JEi6q(i@}Q6170 zv2tV|>s?OQD-GUS(lMciDw4A{fluq2ZqZ|4vUR?Kwbdm+I$T|*b+lJclC1JWP<)JE zB91f$>qyF^M61v1;aJ?zMEu$+F`{$}kl5P$91|T*F!#*}N47#DgwKp-3Yz$Bae`kud-2w_osMqLu$)ajYOO~p5$0>fClw9QN|Vw#^|Q<=MZ86I#w z==M7d2L&)h$E?lD)J>#~DVWKa^CA0l4>MOFGpAo=b!ldM#`0vBmg|9+QoAHR8BSin zNkUMk}6$j7rUuQB9EY>NM| zb~elaXeHu!E|USH?M-jT07|w&)S}lv{F6DPW|nA&Pj;5A!*^6ZBFcBe7lVxNagX-( z=>PM)h;y}F?g#K8O4@a)!yc=yx=Tf5>+5M*=II*J$!P533 z4ba-Nb}q%%%fKqk$dKznk@bGP#OnPSkn?B*nx^W%Bq+7eiHX@A`hDq%U+;O>9Q_yC zGo~abbc%k_Z~9GWhn6D;zF~dU8AjML*1P*t7+XPW+}cRtm4 z3e zPhGC~SViX8kzYhyVOgl1Y((q)m`U%zjb#MLs_ik?sxrQ9vZ=+ZRxObUI#IOvV)_Jl z+9hij7KjoL0xR+L)calL%WCkoKbqi}lu8A0R$Rvs{iREujho9n;Q*HOJ)=F7QDOZJ z8oYhD!S6KpD%&)@U2W9V@mt;ba(l)t$=SI@zhiUi>p{j(^{Zd=F_ z&NxlaKUB>GlS#9m@sC!r z`R?b*S5ey+n!ef=tgh3RIC{4!Lz&@WC|!B%-GDTwQWNWs2AFMqej%R zV^K%I0n50JE7W5TwWal&EZTQ(;_h~Y!z;&Qh0t^O1>5Eg(;l^N+kBV$`yKW7Hud*Q zAO6g~?I0z(xc!2!O= z!eA+{W&OL?Y!K2GQfRvPN;RXaV?rPN#?x}^V!731+zQ<(r2=!h za~oew45ZN##)j^3*;eK@9+Vy{^W_a(8kzBj^>eJE zhyZNbHAR>(E3ZgGxmn(E$yUsF=xG8RQ~$r9v0LBVftD0TX$VjzwA2kqobLfW3{mEE z;6?FiI$7bifogCye^Q|k_p*0CHNIGK==(*-;}*Un z+5uZCOWAU%aA@pJehSJ^KTR{AAvdaNn(~7KvQZ~aGB#=tG=qQi&>K~~P&JD@G^BLU z{)~mxkgHFMiH&ED{=QFER$$~JDNmx($^SJNMmN zW#eO9L;x>v7O6Nr!9_MJDX0?5o9u> z3@{y%94T7QBEc2m5_52}h2{L!=H*gS{GY=fW7w=}B9ac<#|+bIeAqtXG$d}7Gw4|V z==stfK0+K(f@NSao#70Oc`Ay;NPBFg#xakm;l7w(KUxD$fB?WABPTH%Mt?>A^_n&l zlRtTzQBTmW%@YPnO{vd$4I#{T=x6*^P3enm#+0VkA>+3Gsr4kb9m5V+#GTA-D0UtV zkqv?HrV>9jMkp@~RmG##Ig`FxD@Iny99LqI81>`AD^?Z#Uwf@Wj6=+{0xA80Si+x? z87b7#@WaJ5H!@QUd6jqZBk~f0xYT?ExH4L6Qs67_xu#%ndtVr)Jyl*L1_SyxX{hr5 z4t(DkWelgq_cOG6hCW_3mH#L-j0$}KhEB|{iBXy6{s*=~W7ZVkf=0ip47w1aa7Z&K zReFvny1t@MYKE1FWdxQAR;@zejn`XRU?j9#KrE~>wH305avMKRurC`EhKjrN(D{&$ z=nCDf;+N3amnc;94~Q|<4)QDM2=UC-LNgY?e_#J}9G4mF`uhTvr#Hubb=`#*R$?2!1QGSli~3AF9WOI z?1Ht#fAw*J4cMAu>;lY z&_v27g~ThmpMVp1*2f~vCkEa;U-v! zgzggLJSrxfB}iM_fv{(eX#`6w0gPZLo}u)Dsh+6DDlsV=$3}wkx;LGckdc0V&Xux2 zc)tv+{;#}$cIx|~J6vhO9IXO}l(*TNE7CXGw@q%du%|(fp&lh-m3RuBA@Po5?lltS z!n7P~>*UOF-+M^zC>|dli$IPxQ<;^ihb!cO+h|7#=f|AgV0yhc91l47)In*a5}c0R zZCm$9t-1^|B@DN4U|X|R8o<8up3@p&xyiR9TS;Gk-${|6j)<%(5<3wMWw&(Auy`A` zYf@^U!L;{yFnj5ejdtZB;lT5GvWl7qK`#5-Jjzdha*a3o75f3=pxg3JSAJ+8dhmcr z|Cu&_qw4j{LdA4}$I5Uu^XvB-Oqj9^`}0`Vu!`EYFbn9bgM63Xdc8zg+C4$Nx31iE zY|m07EHs?V9Vq-2s<}P%exJ7TQ;G{K&oPdez;rmjZ{H8@U4iTn#QG(XU?@k18`D!U zLz=)-?1(r@W*w_RL1^)@MsdZZ3vIyUt5@Cru@46llm;nhT;rs+KOiE$P- z(y)3)oI#A`FwVkQ4&MMww+g_~%Ih!zE}^%D8EwyWC8f+Ry~=Em_@!8r@789Pg)=0O zumlQD6Gb`%J&N?1PEn-K#9t$q4U8Hcu111I&P2gppv}w=R}^Y93&?z?%`6O8Ow?u; zg)2(5nG?emWiN=-nR-Elt;hWF+e;!7+CtpWYWdvRC^DlcGUe_ znKv<4yRbbYGui!2{oW0!LUI-VZU|MX0)o`9?1$=={Yd$RUVwgzB0-fPCHR}l+s{;ftEQw%yKMq76^C@c?3Lu{cCgq zjFepucAAgn^x!It_d|!Lin`O#PdCU&o--=A)Tm&h(g4MzUy<5QGnOd?35rX(y0~=x zh(yTU1Lk`@a;>8jm2`L#MiR5gY&Ugj#IK5t0gl47@nu9J=LgsEp)4wO--iOTd*wi(p!= zzI6%KFiHIyD+8M^1nGq37Xe+VoCv6ECsmV@0%?AgM}!Y5Zew;7uglUlt=_5a2t{X{ z(dK?Cnh`o~U*RJjq^utHB5{#T!iD$)`m4XaFOKzfxz@EJO`C$6xxP;SdKT%oa79G+ zvD7K1mmP~_GrMe|kIPpSgYGk*lyFtf;?B_Va%ilPWG!yo_&Mfu-=@^~TvKoqu6Byc zmc$6cA(Wboiu%E0_2Ko}}ysCEKDt@(_u~S;>*swUV2Rm;rxX`%t_oBVN+|2GX^f3qIty@OO9c{;JkT?cKkP z7)i`1nE!=W<1MQ^HsW`wU`JVz+Ji#r-#_Xt(xb=VYYyV|>#ig+DgvdP7w;nv%0az- z_S$&prByUm?*4WF;K!entY~`2;Xe}g3r`!XXJ6L`_Uy-tJIG8|uRpU=a2%3zV+d7) z3U0j@y&47A83nZ-dVk~k2knPGp{0ngE$n-ijKX{m`!+{NOYM6x;(HeRud&a@Ba!b& zZ*E*a#uidv%OkCFhd?@q^@n$VL?9i)lmRC`6(sz6A+0g&|9v>q);(|d+MAQLrwv*A zbZSpPSLNOPCOBDZT|@K8jmjOxQI+BEl`TNh=;k}Wx}UEKejmt?RsaV1xuN$<+>@ZKh<$1-iB{*iP+vB(zd|inNTZY>+>uNG6%*v1y3bU@pY08Cid{#z5s2y6P z&%4kWyx-I`iQGil4x~cE!2dqU=L~TP(c$bUhfii$y?vkc3PTIfdd=^eb1vy=K&eVwvuHBOnfNgEM;z3tC0eJG_Qq+eL3gk?BED6! zPgr^E*5^x6grdM%GA*T_M_xx6*p(>-8$eIeh58#X?nZy`;X5F$!{sZoiE^x82})tp zn1fGeuc-GwUXjv}7`*q-Kkfa_~nTWp8G;+U=)MF65vR6q z2xp;=149dN@xl%n+ZO}kp4+{Tg#)W!Dy+WpWwiD4Wvo(38oIZL$tr;TeI4t8YJxEq zdt`dMw>L0`Wl{ykhueBEq!P7%C|ry*=pJvI%ToMj%Jm)d`_K67WYb z@V5m~kUuT_ZNU`NKIaNt!?o(-j6*|`~vchs~y0gFad*AC;NxvWC5c=u;_PtJqPj1>)B|tMr{E;68TSF)b5`usW0~ac`-$V08TO#k5b@`K7 z!sd5=@Qh+Ndj#}z&=_{$=#1fumC%cVm(%58+JXKYOu;KLg4Bj6w!@a0TAR63&Y(ti zzpxG+HqpcqAKN@N1SP0w*Yd9X>vzAglRGI(AS?JLLF)u`$z^dY@TP6q`s^I$p81#0 z)N4Gy|6$%g2arzUw|u5vA93$-^M2}-tNG3q7TP2?7Z_7hGMbeR_MJ;QXR&{kG=?M(ja>AJB+3&xHjClw7b<002QJ-Vw}BcRHY2x|)GXQc=cBFcP z{&JS|qu!v+Ov7r0qz1H4ei{Nmd z5knx*P#QP<&v|U5s46Yqm0D^VvEj}cn(iy5yAXXiRTDC@53(;4vhNBZ`!W^TcZH0a|y=C*Wi!?N{Au3Dzr$h2;{IBHk-CudJFuB#bW#O2j5rY>wUaJtrNbJya8 zllOnEv6^YOYRr=w^Z&0k`g(-`F#4Fk)^0(@7%e1QlFs*b4oAPscqz(MdYQ_KFkeSI z(wR%I%w@WoORt*C^n%bfMZed$2>AxtWzHobh!p;kr3n3`j+RUVe?5DqoK&ESy?3aC z<=HSFR@k(B6KB87Grzw5ALcRQUURSP`~>yHIrqPF6zw$SYhXY{;^-&N{E&Cf{EAYG zv8i%6P2T4oD5~J+kITnbTrsQgu2r;ZrV#rD1%GS)CSY#xhy4B(zpaz=z=!6^>2AFP zdcvZq6dtU)R>-iJ7Cf3D!~SCKpI!QK03sppDtXHw$UZRo+PIG4q?{rfzxJlB>1N|b z5fp;{Q*J=BZ2(r^$=zbx$8`}6`nuj9(C+_T*33~>;ydTUa4x8sE}5r zOj6M`0-Zrb>O6x;bq^p?t@&+yx<7P&a4YBT`ouj2pu4%ZZ2fN;TOTke;qzhhI)~4n zaV_ThI#&vOpl^jc3c#Tn2k_MiN$^ z`vWP1p0B=X8$*rfami=umB;Tg^Pbfg`Bd{Ik$ueL-GlC-o}RsU4(EHVB&WgLrFd&7 zmbE;$DU0CrEQ^QcziA_zy5fT1SVzcBP-@z;$NYR-vMfB)8LDt)nI$+4mLZX~+ucZ! zM*9vfb1(05E_2`A7V5;_<}gem{22ozwx}r6qOtTR?Alh+GVIF?9q7SxZ-;!_-=mGr zt{_a1q}df26nvI{zW&mcF`$uW^+sTZ zg>eG3C?m3ZSh}etA4|4)H9par%yAV*L$U1TXEkLv-hbnxB42xe7p)=!0=W$c?8_c| zM82Uy*zgm+tgXljRk^aQlKlXh2|zQIyiKo8sqHb5z=eV3U3>yc$A-K4vSjVd3}BjR z_DXz(#Gg@spnv6BwP(iMf-#rX>mW=qz@k*WUwD5S)2(iu*=5|}ZZc7Jj> z%N`Rc+On{H!x#BnTam^H(yfZAkTx6iGr^*uXY00VN&dL>6U$X&uiTrN0FZ*Z1xEXF z4}!Wrs;1pJwA-DvL4K{ZGY55ocz64svFib!v1gkVW9cAioXZ;vRIMjLnPc+a?n{yb zNu$EF##dfd6@D_83P&w_Onx#1x}Js)9fA@445a_0i1aqQg1@m|UWA4hFxVSy-&b$H z%-hzGHpo5IDeKPqr`SIqaV^Q)V*7;a<+Hcgs<@VMy~TBuOYNs3E10sdsi7H?rDFgu zsRD_t^bDu+l*gEQMtogJS+ptSw$SgJ{c2osHCuXqB?v%_#}u4XkA7X z%;<3>fyGBKl_AG-an#$hBBy>ni{@9gZ`uy^(VnD#7YC#I`SbMKJ`%Z+%f8ZeXutG} z^Swr_WZi3Cw0br|ThP@_ijOY6Z#@#*+I@y9Aa|fDK*5qUW1g0eFIu}G`-LuKwVT)P ze2Ct4YDXgV_Vp><`$)Ri05Ya~+4b}2o}2DC(5w+f@ONv=TT(dZ)+3Op;Y3|mq3yKg0#W(oEiE`I?PLv9VcP6q-S};uqums)i zVyk0J(WAf2x24|pl*fV(2rRh_+DD8X*bzrX%2+SIo!%T0u83dvE3BUyBz#@k?uhSQ zzkaj)FigsN@GQJ?wugl(YpBux{G;~9ygD2PUfd#)2D`-N@lT#-xkQ;jMlThlD6G64rFQe*jd6laL(kFW14=&2d*H9bJ6I49z_ z6LW;X;|q?yrh~jU%fn)jc;|{tf)FhbmwX?oQN3H;Gq>{G4^UdBt&Nj9Zx6H@X~l?P zibY!v6$|iVLAPi|=IgN!)hh2kU+XY#yw43v6nFS}k6tzS^*^XGc^byYfr*A9ZhznE z<2G~?w~x{MeWBrus8K+wQ=EmG!o+u~;y;>V+3K6S03#Z>Uadjrk|Q16yO>-& zy#T2}p-b<6^FOh6q=fI23iK9l}xqyjn|aXhTDZ{}iG?|K+GYB@<*f9HP( z!1_*ZSg`IfVBM(7;FcbXRC1()H4f{)xbr)4Mk@0G@Qfk1j-kU^?a`%++Q}D3sd~u; zMBw0cqL%mNns-%F&pe*w`t{q?6Lw+|@D4i_e+5K@t4FkC0OhHnfU;4R;J*$O+Z6zX zy7vfB7W7CeqLIvUf0(Q~JOCy)bHjqkVFM=Dt1_uD>Cx}|rUes#Krt2vtD?1!F&@%c zSNcbn%MxP!sQg6$&w~{F$hz9Rw*Bc1;j>tSreCKidRez5zhzl&U(0(vS?{b}lJDK) zUULvWUJ-^zMPy1=Xj^EN!{%NixvhofSwc=r^Z`V2CDvJw9S;ON+`L`xZ;433K$yyt zLAx%yxB(qJ-u2uHSf-^!V(wAqwOr^F% zd-&5NcJlh9{0HOHFAHY9EI9O#pkw3y*>e9g!96dFyzfv8e?li5%SSgAH*SEPXe^1D zvf&WT<_>C>Hffn=F9|M-RGvhIdsOcjM~#;R>m!w-(mjg(n`*hrXzxkmY39o!h3!7W zxOuFzzu-~M<^t(nq2xo)4hY{=>gmi-{G0s09nPaIEvs|w zocxyNTu?|JcigR#MImi(Xn!oLD|`3kF0!Vyyq7k)i?tHE+m(L%mq0amGcqG2EUJ)C z51(la)>(?N;nQi|zZfSx8eJ|l%H^tZmjnsWtjdW|;s~=$@XU>lmiJC%b!qK1V4iik z&|pK{3~kS(Gf$)iCrC%=#)^!VJJP2IatlA1yge(rRsx+RYAF2V>9m3OLd)`EDMbeH zv$G5niQ~tr@-p3Pu9nqb?WprsI|HB5=8^-ak7;tpOZ30@c#wMqU7>1c9}lL@bp#J+ zRe8d1;(>`18a`jgs`8!Wua*r`?Vt+sJgD#J>ie`#(5-&Ql^6%_TGyrD#+NI*0^ei; z^)K;Vu=qEn@GgCU@w4?7`I%?|Uj)`ogWMY*@x`?%cng853GHp8cNGU@S;V2qkGfkg zqmUHY>95y|%m)zZ?$)z;K=5F9s~puL0~)XG#8Bln^qL3#`X^Zr#_PqF0XL*0d?)L% z*LT?6x{tLHsg)q&HbKMh%Ja`ejrO!W!;D`G>LiLY!$EjIT5+xsc|~o?^|C1q@i4jM zNCWjzV2)a^>s;r#e;W<8^@d_&S2nvhwY*xiMX0|vKJbA;+Ike&uDmHy1@qtI-5MCP zZq|AB=~)5C^ijc#D?8o3U{4jXWu9l3Xe*uTD)QU(bcr&r9AJDgq6B{ft>%lInOEq$ zNqnu%>07iE(ZUj9%(*?~hz2p)Ggx=R{n^NY^ts-!a3L>2NBP#?ZxkUC={j%UJ) zd%}y464sA(OdsQ=w1mw&kr!6`=f#&xaw+236(P*!s3u<@EO?V0KJRp8nov6-C8) zxcac1AxZlu$=^v>lh*5mpm-<#{95q1U%yY5|7?1^G3!&X&7b$0k3p-LNLEY)^*_%_Io`VL>0e0KQWr7D{~dB!nL58osHNaT82(#NbE zWvh?0%6D#+$gR20jbc+Cw0_>kPZ7bYScpx|s(Ssq4`DqfR#LSG>)n;L2esI|hVV;% zdH0fof3&sC&P|i^3rhD+Pv~RM?Vr_Z50VjO^~Z`-JxjZ$FSK<6!Y4(lTA+djy=0p) zhpl%}Rit*UcGcAM2T2ehtAzo?$c6@&a**X7$neYg?a&rKp#>lJ{v(hRpTdoH2lu@H z2!5n3enktmaeu6F-WX4zxs0d5Heg5a?2LM&7C>9OF{M_hrB)e^*c~m>AKS``WcrNI z0ZIO_2twvqRjxg7rqIq9--!dB$5g&yNddPJ@#zg<<(=la$@!_qqEF9w5YrF`)G1Bv zG!9X$x%~PB9?0FJgcl7r_Y^nBID~JngchKC;~IYs1PuCNVG>m-3MEqOCOeoydqjox z>zBMJXwPj6W@^rK7B3;LOTm-QmN~h0l0t?FbcXp2jJE@R(VFuJ!Mwcply`e^%f~sUl*x;NPqMBQMUMVsx^My+?RaC zDqLq4_C4f}s3~L>i@~1$%}-d=#@D%{NeQl&RwS}f8tl?qiKY-Yx}LHOe0w6b?>z&V<4BSG(=BeFxWK5Ic%vHJd|DHz0q8)3OySE;qUMwVW3*)r=A zTt@|AW(b;ksbj=o54RLk-n4_v6uyU_8T zz{Jq;eZdi8J^m5T)3;5)=*KJ-{0m*#D6zuAqs>!^lp)8+hW-{dG2zilB#^qM7*BoV z8zra*jU1@N9FJi24mtm=*Z#ozaIEt=MJnkqHLq&?HzpUK3^ZK(l;KsZqKuv$x^tl| zcqsvpZC^r(!Vlvi+2ikIgpJPQ5ZUD?IL}jDvrj}S3wr-DEmS<{7LbGjau-j=*MZR z+uLYxKGa&TI9$~}Tl%`zys>m|@$L{=(hjA0o1b-8?+DjE0d)@b{Zu%(fulyd0_cou zT%G`B?BfJ!J6CtU9+*Xr52eK<>mIoVzFz0un%X zIWj-**FFM4BF2SEf>0w3Vsb*zzD9duPrp)U?P(@K^gABo2!pc;#@gi)dzDgrGuawOOm(j5Gj6k55O-0})~O`r42RBF^-^f^2bt z$PX1JnR;G=VeX84SLPW~9RIN%q&mF#p+MtW4tjvm&UuBnm z7VnuHP|8_qo;S+ALM(EgNDpQ|se;)!U{BK~@5MpPTRoM9FIb~`x<4|vM4$b87JhZv z+PpY{3w_SSJMJ}C%1*3x>fx1ayPnARq_g$*p_3!s_m1Onyzsd{lx<;gI#nLB zC(?0{5yA5mo+bJxN=vC{-jqimcKWb?F$Ku_WeBM_khR@~>C^34af(z~Kd0YKL)5H~ z;HGFQUiuojx4Y!naIblo{;X$%^yy>2G}zM!K zQ+joRCxp9`!Rg}}Tfc`txs8WZyo{&)9-PSovHv1LqL{r?`uE^&fn{m1`ZBIe#W|3fefcX}p1cyTHLo`y7cq63Ek>5x;ZZe6#C+ z2)siNm7Q3<$Nk%DzX&w?fG^uSck1n^#gdCCV<(GfF6*an-Gc13qghJy&?%66ghQJJ`@5^qEp{1w zt<#^M%^Eu4aNjEd>*IxwuAj2ScC5;gju;s!6!QCH5D^Ig8ivE~rQV{(^yz(SYHnd= zB#Lss*t}oY?|#B#Jx|>G&oHXI4M9`#Riot_Qt!df9lv~w?LxYDHCMfPC81~P$Hiz* zxDGN>#iV=^!qGYYXRg9 zc~YrkYPXKVFB)Qx(Jhb?yquq875e+vsFNzDe+@jRY)29#e(L(FH^;M?;-Qmher`5U z$f{{uP$D@cH_I@V%BY$czvws2`N|WVgNJh9T#4Y2XPCh%Q??sZEu2yM34Ump#fBt! z=5Ae5uq3LW%~O~%8*M(4+9oeJjSLas^Z}__L{-Nt<`Cbk5emT>IxgCySu~oG_l1n3 zqCFBF0NukZI=3D9pA|`zb@(h0768v5sXjYDzE0Z!NghbH(H1Qnb@DhzMAN56;8ix%h~!9OJi-56#qG~UMcZhV$M`rd1m4bK;tgV+^Y zYzz6cu8XH`vB~vSu1C3K$uXa@&;_3#sbNni&V~1?p9cR4yq)ORjJ>%V!GM935?e;r z>*4E6`XL-Vno2@^S-AS&WrMMWI6sEB>3RKy>kBK}}d5zj(WLInvGff3AG zzE^~bc+sRHB-znWR7CSp&G$;=dD-9)65zi@RVFDh&b_HpNT6`=F#NAx$$ePA!}_{Z z3@7sm{%1x@w@WslrDerSOEglhybl`<_l{;Mxi_tT zn2T~39aj?rF0~L{A{Q4R6&fGNEUeC>i*k9r> z8H_@^R*ARn4qQYrAe95La_a48HreM#Dj}+7m*~f~f#)mBAj;)D^u#O6;0ew^i#Nxi z?*NG=D_)vgx*dg{cxdAnO~ut^Zr?kQH&QFK+L$K$Jd0G@AhlMPt*gym>y#sQZ(te~ z*6EFGg=CF$i;`?mI?**XJFJmIucO)cO7yf2z3ZPTd@km*g6kVxcXNG@YXjHQTwA#;ekcvTD1GRE4u`{dFd`!(BQw*UP5XtVRXTeQkN z&3%DnW%TPmmg2MXBFppf%H=C^35GO_}eI2Qb0q#AYX z@b8lDK2f#Y_&xUJ{ccQD6pG0m#Fyh1?a-&HF3Tx{ISDLdmS4a8I!va5cqcm_lQ^7U zY@2C|H7Gmq9#w)xzTFGe&U0)QH*gxQl>H8?+WR_DE}X4OC^OerkYFGQn0 z7nE{lPYQ~VdS>UIa)pdA>gvBjM$QxHKFqmk0(!Tc*~ZFbDZ}giYDUUZkok(F;u>>V z;F|5%*HDt*k>v%-cUx#5N4vKNDI$D$hQJ2`XaM=s0!$3@=UvtZX-T0?h=(E;W|xTKIlNpe2`I(PP5;FVgMM-U{a=GZ{G}oGi2;TCKVs+tM`DkiVyC?{L=EmWozQU# zmVYLq|Di4X>R%N&Z}6tQJ*BF+wP}sc{E%w;PwJ30lnh_P@2DZZJfD!H-B-!P^%F1iHu2H}2r}oCFB{(BjmMi=`ZU!_c*JQ5gT(@)e zaQ&0(%JMC?*<3ep-OA;w*kZe%>jal;CbrgG7gZ+kc3Qea@NY(@-R>NjC73un+hreR zx99K`A6w&J3T~FKLhl;PQGA8MuGvgvoJeS_Y#Uz(khcasW$*}4Rn1B*v2xhZHNrH= z#?H~7-TzRWxH6*2B#>jD1}!(lmi@_Z`fXY5)71QVYStEt5k#~*jkNB=R9$IQ4atHi zsH&_%|5lP!N|7-My`=^Qxm7(;q(wr_no=e~lXCpllzD5W)F7PfE4j4Quc45 z^Rp39XCt7l6zSj1+R}-HlL@+dx3Tl$0irS?rfMtQ4k?6keAYWqD+c}wMN5R7K%Q3N zG_hC(rp@1#D%E}CV5*>aV01qUz>BfUy6PgR5(BoCWkReOh|r`)YNVD*p{q(?hq8ih ztDdNJ@`mL5IgU&V3-i9-cgAg>fOfEK7?LmDs3e8tTci%jBu(@5htM=;>_Zh@D;t_i z=&{Y98Iv@-N+m@~(UAdfiH|R9Q1aDR`L%3yga@u<+ug|`A$GUp0y`BTbKnFMkwZWE z-YqXMI1$an#E7%ZdMD#l?_4qTJDI0?Cw;&>RsJV!oV5YgN8J9T=qn{3W!xqm7(xvB z%4WJL#9VwWObZ>=XKvvL&c^<08YA7Mm&(r-vr1ntjYnLqoTRphgG>u)DWt(!$ZMbt zW;^r?foQeR2F*en06N3ibH%V5QFzUv&u@bZO~#P=9C;%HQ$LTE0^C{K3DOJy*Ge zXVLq|NB$psFY1dYrHPQY~i4;@(fl;;Ka!H)CF8T^nmo@0-GEtc^A3rLt)`5?F0(^%OE;@cAM6?InWK z@%VC&92?t73T0727sTPE{QA$Sbsbo8r9x8HVcd^e`;X@UTa~dvz|V4gFLId}eTb7H zU=&xlT!3Rb0*PLRuLB#OT_`fu!^NY$Wrd2xFR`Kq1?ao|=PfCObwh{GiC>m|o zGiHOvp-ZkQVn#U{^al?Px1tjBq2lP>NoF-U7l|DvZ1zCD?dyr^6MUQ1LK!WfS<-GR zN-ASVpz`b{ijjdWPc_HduF^Jfxtix7J?imvi5ce<@2noJ9K+_m?6*P(GPC#0Cv*C% zrOb9aPXIjVZ9rxLYrUL@3ULUuS!to&F~M^*HqVNIo&8U3O7~+T{~o$(x}sfuD)`U& zpP}JjZ{%%DIft!nt>AA`gd#9wCw3yW4;@bnWVLP&o>`bT-4k?!Q1AQh;~4k_EzKJ_ z1BN*Dc0En|mh#Q;nVC+;@x3ci;*`eoh4F!c9}_nm2q;3vA6R(>K$!Q>+1-jl@P$7lKRPP&X;$gjTZD7 z93wKV*P*pglz6r2_N6vCrG#o*TmnVkDzHf950c?mOcvoO<2Q#5xLSHR$KI{wm(R4AX(q zc=WyWh$B1NjTYHm{TGbxASEx*wrOXFPQ(Jak(u!hdyG+pPV~5EZB6N`00ci%rQ1FMhW?=ElnBY^)kk}rF)ZOtV|i> zZ&Js&%{{lvyEIp+NNz>$dFb0z7GLSqZ+XlZ=k7ZFuMqRy-@phj;`kF!Z7A|e_eO8+ zOULZL6NKol-iF5RVopDaaUP2G1jb;Owoi>3Q2<$87;>eI_bHqLUu14a5jafAW zpDYFv?XgLgDEudj1i@?GoGlnC_u=wE1fJDHU8LQV^4d)5nW z5dlVv7Tz=634DqLK88H-!z6q};n%YNo)+|h!-rp%40aZMM*M%_4|C-pPegfjx4tDy z_-}p0))?w&m2QYxi9tUv6W*g=$jG#v3;-U-k#e#=p@$SdjZ>E+D2K&DXwuFQu|L}p-X%zFT> z#X|b3_`%4Wefomw2zBO6CFTX#aO}XC!Ea+!D3e!F6GpOLaUE}jEA#aNd1=K|nZ`kH zNbzkyS{kmZ(YA%_uS;NQ@Uw_}K(;Rlc*N<`fO+T(VgVyC$Mtm$kD8nv8RaiNYS+(x zxi=o&$LevER(UR9GR9Am^l}ITfO5aIo9s>Xe3bJ>j-)D2%T?=bp)^|{tI4U~^b2Jz z*pVS~6miTjb0u~Rm8MSO0pk&pNa|>9K0fQTcdU@6kvj`80qZ{%68E%0@BOu5nb@g+ z@(iQescn7&V_UuFO5n9za=YDFdeZD^D?Z@Lk(qiGd>%w=|2xm|Otv>;2kU|B6mVgzGb&-)cH=*q$K7IoU z;~MBCzAJX4pMeTx**2gLiD*9cVi5b{4^&%CkGM>lVdK4?>KVWGhVRb9gk`h(=+}4 zYBNMMA&6n@2?Y(GM<{6Io`ix18xRT_49UrrJJA1v1Glsd9zDNxZ#_n6W)NY*9f#UR zq<1tq1kvaR8yN`Foxrm8jOUYWKQC?PS#7&oIXWHds$7_b6`mx$tuqVa%CmM3xPneF zTl-jB# zGB1+C`9`gXkmD*5({6^@xbOzBU=M$cHFwufa~Hwet+`1^qRi>f1b#V82c9|fO(`Pn zdFu6BQra`e%Oim;(F}?S%pjf;_&-?o#W|Q)dpiRe^Wq5W9iet27xZ~Mg6~U6U-l*N z68d$4Q-v@xjKG>>+7-ob!L{{%P`oSp@d(pi2f>soBw?zO_j;}>EiFxVulWHeMCkK{ z_TpV;vCZ;C%I=6B8lS#Hd+oIkaPIHK+hJQb8!ii~b>_B+tA+fT;o8Hho)sfP+vD9% z)5YhaNX3NEjyQx>)mCEqu2r(^K9@iQh&PU1ZNYAaHT++OixYZVivB)!+gIlMUY$!>O0(p?A504(O2{icbf2h zL7{XpYaiatZbV(dzW9V}pr$>2N_A%t?<(b=puh6>%CYC8{Nnb4vrF~cPg8$GE@}H| zPA_#QPy8-SYsx5gICFO+NC(4{VDd$QGq%}7g>-RFvpDpDjDz!R8I5z2kraX4@{E1{ zGvZJYDvh@Xgx$h9%woqK`r#FlrPnnrV;|mNwurad#-ML-0mU0t_@nySbRv?k#X^TT zCKGS|7Gk7e7vNNE81J%|PBVURR?sL=9OuBh5`8h6$YP_3EVfZTtUfr-9vo*2cDj`r z@t)Lr%;GTa{aru~uaskdeg+Om^wWmC ze%7Qnu`z(Wb0iY{D~W3?7Y6^%UKYf1Z6&n;gH%fK|Lbu4cDgF*4@=RjOr)D4{TpQO zL?Ks?y=I7Xy~-52XU(Ye;IF?EEmc+~<0l4jQF(icVpL$T@-nrbzwIK!il54h+Zr5g!=xl{WF|hpU5=0u*oj~- zj$V4=@1E2wSKd8Q6^`s3!!?93g+*k!l{CsyqQeKLA*h<-LH;u~X~vvSXCXf^IDz&t zxCo_ahl~l1V4;gbxCEitLtpan+A}_ZNLS%Lx3v{_>dX?~=m$q2-Z-GlM<_tWymkynC$%SHyJa$>?IE9Z z>?NXhZDW-9h##M>__WSzr^r&+=gclvxDst$L|ecoJ;o>w zA&U7}amEz5izcV)K{2RO+}xf~#9S~HvkQAM4TUY)nnlML(IFH_lR$)Sk&n@*bMkn~ zT>izyEy&+_!Q}tuI#ciu%PH);J|5^gecC6-HLWgtu?KZpB5avVn&D3pnKZL!+Y$DkLmNz)004%a3;^hB0V)7o^Ma`Y)`Kl> zwk6gW07!@d0O@&C0NAZkN^chd0K&e?Pv56*b7p@Imf}7jRAP4f1X0T;<-Vh$ zap;Vg%Uh>Eqy&ooJaaSY51}W9765x$dFX96Re6MkNkVZVqCiuS7jxXF5B9F^PoSwx zOHD42!fQ2^j>r#Z^P@#!e=lJOxU5VH8tzP@t%_JsX|!u}Mr z2aS=E&`tDJ7zIVS|AMoPXm5A)!UbyYr$vVCz4C&$_p0Z3e@3=yzuz7ZHqfCqO-jr4{GK8D5py6U`JGG32tydJ&r`mw%f=)HUJ z9a4Q9u;A;?fV=l&_APAOzQ zjv_>P_)HtV)0AtcRYU^ci7pYAlk1QsQv$8mEza}s>`DUa#9(eRMOaAhBj17$Dur5- zYk;E1nLw#I62~`wb%F&h0)}S;Mnk0?or2^XlCJ&3Y74(0{3c))( zXnP1Ba~1M4vC)fY+d%(!Z@_*A<2Pb9BpZMwP=Kj8 zFBzS`+?x(;6^e%hCpvy=n)L)#0*2a27B!%fbqJAW?wI%*d zMic*iiZt9{G|{KzbyTDaCb(Xtcu&FN8MK2Z%zdgyhT}N)^+%X{N-ziJJ_uVnIlJVbtI@Cc7h6Tx zGt7}%hUwv|;SVa1b|Y;-hl3y@<6w`He`GZNq0mL0Ur$E!HI(KuM(MjAIPv^PssmO1j4f*D<FBik z=f-iPSVD=6h zyX7bG`Jk8)FOR|Cvk^8?7zQwxN4%i|Df2PXUJqGx5zrIypgQH%2X8FvoYcQifQs=c zuMR|P4@Xh#1&=AOrbmeqi06XZ8;&EgTrVDkxZTs zk;$ey>oO_c#YI9-WL#+r{u(`@7L$=|8j^cdpX4(pNYjuqK|Li6A31-q^eo2oXj-ie z^mOgzBjY!2G;A*kLu)UaDazzCMVWLfqV;_KhVx6)$MVp7t}>4-<)aQERK&jtCC}?a zQ7K-oX1ZHLTF?Ey{xTJ?WrK2F+~XV^ZP&CtX}&$I6< zW7WVthu;B(v}lfr_LqZ3yNe!^Ao2*QSe1aceJw5w1P}Ln3sfz{3p@x z+baDljp+05PwN!=eQ@kSNqpZg7aTVhVgMbz{zRi|IV~`_$R(}%3TeNz6sD;*Q%G69 zwEnIMnCK5>^#5c^pA1GvpYqx3ay+<*Il#Ic(m>0!x||gHtFKg*SD-qfg)SiskQ#H8 z?m%x$Gw2Nuh-geUACeC zX7)&7fTjVmJ?1Ae&Du#xnX+Q%z~PEE?r8JiAgH%E4oJ(DN}yu15{-LEky~5{ciw zLVTa^Gs*)~7h~|DYOMn5?|t-cHNM#s8thz3TW8S68Wz8U(5zX+H}1WXI0hr^Q}D;~ z{25wPB39!c>7#b+UF%oweaG?*j;qS~U;0hQ z4LBc*V+M}J^6#hdcMFb#@;Tk7azElwo}qK)S>?C>Zyc0JU)FG_b{B6;!^h(9#7P+rwr6uh z#<#(VLY&*5NqwQg^RRJxd5BkbLa9s~?cg=eT=502eTL&G4of==+bG&<#qJ{Xi=S$n zN27#xS=&KG80``Z+{i$x-0#fZEtD=M0O+`2>MqCr>qfeON05?&$4;o!sYHN{kdyI5#(^?8zvbm4hM!-8#Npm}U!c9{c%mUrbS%%P z@gt39QbRW+DNJg(NPi1^n&*Eg`9@-kU{K3njT|d1%&Zk^#H0-w+sZl(OD`LWr!uzr ze-v#S8&ZmB&)hf8BGrf$$L+3o#EwVkb_c;*g%6V8OyQ#s?t+hvw9|E!j+O3=6-w#S z-z9E7leUha?bkoc@P6p5+ylvnF>*m|-qjg<{l6E`^hT`k+g4+rNh}^+J8WdxfWXM} zLaozVgKR~iUZCrK3HfI|gTuo4>w@{%tx~c!j1+d`uLY+K!!nAi=JW}s6EW}VEKoYnP zmJ%D0EWquLrV^1=Rp>%~M4#v!goqhUdS?J{tI^}{4(&u|2RzMzq(7T=_ag!UyE1hD=-}a0+ZlhSPu5@73%`)HYPQV5;z=gC8R=(>G zr^m;g#Fy#2;e9FHa_L@tk^VdEm77tRgkA5Js?WPz^gPBpY}D>R&R~y{pnCT(zw4zp z7BX@YaZgb1ZSKOJWcL6}*q<4n*(s`?>FmZ5o9ft}&;(O}r@G2N!j;lVT_xo^@n2=? zuLbh2pnpx!Umo;V1Q)Ii!n#6b3y?dB*P6Xm8MS^-$)jrR^Sdf=DZ~-$tW0X7$TGEx zke?{Mb`UCyx7=;?hI!Xgd{01r!~Dm2upZh0zbde8e9#)a%NEGB;ge}=N&gqF%~-hF zzg!?L)(BJ9r&Vup5!>F?#ItyJGS5yLgH-wsm3TR7iGVmMf7LrQOh62Sz0kZXHdDlo z-B!h1_Bx_V%st`E-X>V$w$c-e1@F2#?>ZV*Bb791v6y?xneAOiw}nSY5G)j0n{mKd zF$e)2+wi!GS>W6+QN;nxHgZouZz!Th(%?hySOGQP*9 zvKhjZbwYhAy$2kmy^sC)>V3nFlr(xd%WQi~P8=mul*M7SM6OTOu0WuFBb??Rs?ZYlUj!*`d~Z8 z`wHy0JsO$^eMC<3l+}VWZf~#~`?%10G3g%=gJm+(kJbjKtd>5i_{3r@Mn~9%;`O9+ z=lvfLC;l~HFKSceDOG{3zTlK95sCV>&dSdzsuD?l($E9=_phXJlC1m}wFI z->|=;Ip+4aaq<6Q`zt~Pzuf-b+OOJQ#f(V%%b5O??XOBYg{{f{KWBgIBK_amHu%4_ zk^XO=iT(XJOSZqYk^XNT^MC7N{2zI$2*(!(!^0kLs_!EQ8SDGt^R~jl(H^>s-)8QS z++mGihvS8_t05vw&`9S0w&AT7T%#O{CEN?*12E(Q>FZ|90@uQSnA%^Jx&NzD{a;nv z{NJ5qe`}5X-y+TaFm(7C{x1%n0D=b$7OxNX(mB6%tcmb{3(5Y_5pD5*YnlIBYvBL( zsPNEXmbZ42TS=h8HQOTb#O|#@wb@_PIFvoJFsYcBNFeGA&XDy%;{^fKG^5^7yNtn@_=X*w41M}!l~X*}fXHk- zF~}#qa!<5~V&%UZmdWX}HMN)qh!c|Z@=s9ZKOu&=A^(P{Q#$^|2_8NDPAdIx?~Z2P zkbcyfpaK8Mdioty`VX{?epK#<0sRR6ohtpoZKEHxw%>O8yZ_vhe2{*Ew*>m|Z^*M$ z1eR{h$;)Yh>>YeIn&uO#d>oqOljd;Jk*Z1Rsp+Re|Cp*ijg*9JLZ8pcs^i>lZKrRT z;S|Hal2I&A1-v<*iKZ?5M=eg9@Xsf0IseH%X>!}?N97=z(AUcccKgG;HuE2q>eL4M z!|^e-w$qPFWoaAzv^LO};VmjFiqqG@gC0Ls@C;O=5xeIa2uZ~^1)rm`UVZ}oJK97) zDj~~^{%A}Xj)|*B3Yt3OgN<)uYlz`LD&giQ(O>V6k&s4T#)qi)kvRR<>}zr?VTKL{ z_z?BJP21@IP!_{@G=0^-H>v={Ug(JtP?UeMtN8o?uS7T57J+ZFehyRJZ;G+|mFFYL zzw7i9Mm*T45lsGxffLCr#ge~LM~lnKYU1z|ELmdH=duZuc7SbA7CLIXA!hxGw%!jdF;D-pi)&xl@OZw{AQ11B89 zE-dp|giJe@^sK?r_%tK-HF7Mg!Z^&`l!>pw;H!R^Td$X-j5-9qx+*zJZX{xnF8cDt&JmY4?@@wzBP3ELDs zkl~Tyv%rZI+D|G8s^%{3UnC7gQ78yzN8)N(6FuNVY2vQ_auaVw6HyuvBZbQG0DZUy z6W&l(tj=w=Vp|_94VGP0vK$XfN3H5^E!5!VU=|Yk-Dq}y+*O**R0jJNwWX~}LlyA( z{tjJR>lr`EqW2)MLl`NoL+_g)5PfexphpjGwKI>N3uE1EC%#5ORG9vl*gYuZ8Bj=8 zDd1D4ppZ;F7$X=c#2ZjJ@?V7qyzv1FN1!w&_yr2vm&CTBN~Pdt6sm|qdqeaBg(U_Q zrm7SY8HK4t0pA`nz)(=gG@y{AQb=MHl88cr8HMwUV_WgbS6mL^xgKdGtT{Y486M#) z_A3Ryo_K(+4Z<&%NWX^QS1o*Acc~TN$CYqqSQ*^=K%QXRBglVyD z!K>xfRQRG5U!Dt33l0&ssc&ns_$$Kx2f+RpqDoWy@2j`}0o?u<-~rA4g$VnH#9;sb zI|nb1Yd?cabx zl1f3gf1+S+{|jSV@yTJG{lhqA`)9wH{lmk^_RlPw*?&1*WA@LGfZ0E+Qnr8gYdDPQ zTZA*=xtaJ?#_%K?zs}xE*YfZy6L(E z;l!KG5VYM4XdhV+E9kpEmj%7)Ggzf`*0~+lhiH{$v|a@Te3x{&9G6oT*99_me4Q4pHu7?;m_SAg#tJHncbbf6_t_v?=~vJU_OpPJR-BKex|=92ER%&wxe7pOm?D zN5-F5*ollki~Mv)#-BGB0U3XW!Y12-KPiZR%Fq-u{MprAk3T6q{+WXZH2e`G@CQ*I z;vb}28OA>;7YKj8$C@0*$~5`nk?I*g8vd+nLRXmL&+@skT`}`x#qQ+zhbWlhPo4pV zWR-#({}2UJ{E0W9aO9xEgB<_-2nwe7v)v!tiYk?Y9RCmnQ~X(CKw+v%L5_cjf_eO7 zKp{z`AjdyM!4!Yam&LZ?laFMxpz#lRUOxU|zgYak(1eYD7{ajlhg6@(KMYM+{KGJb z@MkmGsu`}N!k$cVcM9p;vra*z=9qQhF0GrDG26xu6};e>wUH>8V%91H z3bRxS9J6K-1yjtLWI$oCN`Yh6V4`4(SuO(#C;p|hf@9VR^n^KP?Vc4YhnH0f9J5{~ z3Z|HKzX633l>*1C5~5&=Sz`?-43H^M%(R?*GQ+GPSyRDn>zEaqjZ*qKo6En0 z08KHg!<||ub`vbi^HXS!X4yDOgQ3w9W^NAbI~T@vK6!&X%I;6G^Ea0iNx%OCs@LOz z2X?C9fuplNez}C+|mIjSCkxd%@{TZ}GD#RAD7>~emg`I5u5Fa(bYK$HCv;{FMJ7Y_T zlK*#T1}z?;Akr##N;8xT%0iO-m#vSPtuH>+ zj;*%DQ_-tp^}kY)CP{jFX7s994FCFIYL8v!f4nXp{7VG?e(;{yn%{ zo0Zh2#nI?C*z|4q;B0Zq_ zhZSmrDPCMb4UR{H4ac{=)W*X<{K9y#^JKN>JknP)h$qcQY=_F2`-m5QrT?g2+JQ8AF+vf z0g4v~F%LpM;z)_&BbKppW z45q-eRUc80mPGi7(^&E}_Yoh@(A2;rUVNdht?^>-B5ByKQN3Bb_*tBc2W-8+H^T!v zJ)q&iLlJoJ5aB@+R(%Zdptl|mJaqE&*8AH{)M3HF>BNtQ1)H(XX^sU?{6-U>f(3JH z6+7fuFqbHpV!=%Y6o#r4I2H^g3Z_`l-GIXP|4?|~Snxeo5Y4gR!`ow9u|cK4v0wvH zFvWtE1{Cg4DR3;fgD99{fzN=#Ae92gf9 z$BQ0j?Susf;0<`ZxPYMoVL?AwD93_&vQ@KqG2=IM(EfFtvSM8_A;mlLVDRV0H_78v>rRr+-quQd1MH&wxnwyX>en{7*Y$ z!2b&o{J((W(o!susrUFa+W~^qvXv{cwx-w=Yf6Q~lp9PllF=HO$L!Kl4 zE&D}l467*UH5)S~07eC~7~>rZKw2F$u7xLTJ;wN!qK8&vjAdv^M2zvb{Sct(8pGq0 zGy$5-AIZK79*)3+hY1fhVa>=84+iS- zz(XfLZ~kcOa2*z`X8dSaFdwU}=2&n`fhIl$3$A-h(O`}R*AWF%EJ!q^?= zSUohyf&;!-9yY2JI2LRq3a0Cgs|+a2QYmmOm_-y!v0#z`g~2KXjs=5>f+-fb3@Dt~ zsK|k1!3k)BITq}m7%PXDWeS7^onfea{^%|Ci?E;+LwG)abeLH?%^y7qZ@{r&I70=R zKRUvG5f&^XTQ$Rib3VFhGJo_M5U6!5SWOPK)$zs=8pXDX1q;Zp>Bk$d?1lhMu|S-l z2{2~7G5rn0@kT^Ea0TptEUGlM|8Mm6e+9RHdO)-PRT1{TirN286Z^m7LfL=1-u@Xs zI{U{uYYXm#*k3ju zIccccN{^Jn_|fpjj`dS>yg8nyb-98!wXY~v!ttgS9b}F->kKGVs1!KfR1gJIyqRf0 zVT?+F* z)A`7$1{7|PDNwxe^mrxS$Og>t{HC+;?mXU@#i9&~HwM7t@OWbvD@XChY#;$&uSz6* zF^e~ZJi2KTZ;UL!%~tU%WgL~Nf@-&fU$ZHaXf@t&knhyvR|XbB&Et(ra_hg8-VeLQOLz0|tBUN{3@3h*O*c(& zqB{jat>T0Q-ney~7)udMt2pr$xQ=)~tlL%y+HUrK>W`yiJA2<+-q~UPe(IRfki(|K zFi?o%zc4BF{ZxAS!+O{T&2MA zr<^F5;?L~{6h^8PIR1hpI??;7yMX}w{nTGEWF!3fB$KWY z{&)x<%<$(+n3^g6JW4@KtN2q+ezMg#;b^Muu7DwRE!&po;#~=TQSV0$5Mc~iY z;gExZKfeVcsQ9xigHB}p>BNf3_;ct6x+CLH7nq^?e*7w&v<-jK5dREAV~p`<&}Vx5 zN#pSk71!`*bp-ybCj7~H#{_@UE)f1qx?G1pDU2Ttf9&s~D@@<-IGz#P6}3+*RwKth zTR_1Sf7TgLs8A`$@effj#h;l56vn6&T0fif63M~F1|H|I=%4R4*_;Z$_3E|HyhA=GtA=PL2 zvx}8u@eji!!k3r)Y z!?aF}9sfLOIR1&8ze$2cD)Tp^4jRngysDZv&ELF=;?nQ1JSKSM&HsAhihlkEr@v%< zetv&$*=FnA$sn)r``|}1zxw>b*CP0R4aKFuVfjhrw;itN`L%L>J^1r;^9#54Q_(0% zdSd8L$%nfX>)&_)=xe+`+WG@}{JoUNe?Uok>B#-BNlE4U-ae?-9)e^U%7*i;H~{6`c_@%QMpu{>;D zt?(ene^458{9S86p~c@1dcw za(G9kz~VoOFBtxAXTJ!4?`F8l;y;GYEdIM*!Qb%|tFZmizGuG(e^(=9F~#3b*U?Rr zapijqSu3El>dewIoTM^HR_DCerGrGP`1?HtkgekH{b)%9{%*k%q&faRm8JkM$!%`|o$5?EezI{WE@a_Ky|Q z7VQ5TO=PP5KcZ-@Z2v^T-2M$H*i;I#{SyUq`@cGthpnp=9%TE+YGn)dZ$P13r6Ais zQ82fE0}3Nm3bOqZ1#|m1pwRrV(hAxBp$RS6|BzTYydzU!_7CHf?VtT(_RnH1X8+8> znf=29$m2hT1Z@1relhze`!tKcI$=t}-2Q<&t;b*M$bq(Q{}kx8ZvW)V^zqjgEJ3zl z|5s@OjJ5xjhV~yBe|cb$N<8!aZiD#ib=ABn{(7Cv`|I_(c;+J2qz&I^#qP;~;P!*i ztkyPQj@mN!+ny1T7=Iy`-cN|!U$~>fv~GXl4KmM&M>Y_{*MVW+5h4$5e_;o1XfFrj zM2Q;l%4y{O!jbho@lRPuy87PG>U)FgqxG!l`Z~6`zKHi(Ja|m$pT0`f`uyjO5&g4~ zs?SCBYP{JMR}A7!io1VS{&S*=yvTpPqP6wSRP28@5PfeJUyk3U_b;i;zs#oxwDJ9u zY6B_0e3BYC6Khn4{v}my>@S;NoZUlhrANwR{Am6q1=?ipUpfxbOj7YLM;}m7k^7gU z=pb|dQlA=2VXaDm`+xKw-W`^@qM-d1&>OB`xg&UF!e9(3@98D z6*+MKatQrs?q8~}h?T<{l>+xKYlwpB__ z_P>VNKh~%W?H`i5Amhu~-Sqa)_|e%v)^%I3{}fGRs{Jol^j@}qtQ59j|Ch&7SgTTy z?Vl)^+rI&Y+f@p({SyUq`!}HAQ7OpwPZZ4U-+;oQpdts^{?U&u*#Cf7Ijm7B$o5YZ z%Cv5*q z_KWR*nL>B-P_CNn*enhWTuwJl#-Z2I5UtgDKo7ie>o`%0R<({3Hu8D;{dd!zhoDW@ zH!r>{wyRDq<()0BZ{CiXGj)BT{Qx@o3f2m_r1Yl~d41s(c5;H>S%mSTy1wuRBXEk} z848k1n0cRKcN~9a5(U%oZJq&zWR(KPpJbw7ia+rN6pmCXJaGIu zg0)6-{Mp_wwiQ(>1&%*eM8On)mKac&s#4(iGnFWqj&Cy!C?u&AIQ}FN1ylSve`#zh zKB=)br8weop z|ILt%@aHTU6vLlP!Ur?_i9<0{{Mkf7Osn`)MSk+WDwu#eTecP_sqB(ETXq}>+B*JJ zpv4jR^Cng+&GF|EPpqKt3Pj+~k-m__ro&(eLa78IsQ9z451q*Plgf(8_;daey3@#? zx!OY~GXA`UleXZ`AdG)7)G{CcysyWfK|KDU2Q>V7Is$*51~bx3tWg=_4`h2m@Mm^M z9scAoel+|^c?Ml!y1v=5Z){f_U98x?9RFaY&>Vm2`@~XMt5T5TAEIE2Kld3>xLu_n z$3H~DJpM7D;87{a@effj#h-Qt6b_Xua**R6^rJccR9_M+hczk%IsPFEruehSfWj>@ z1s4C1e`WLQGZ;z`{`6uP!r~u>H7x!i)o1u~f|X04myjg?Jh<7(rTPnuyyqXIXjRaifQMF$tTgxYC!IqZ{Wbvbt2vee}`_#ggV zvz$Z^PG{ETz$&K}Z=04@jepf$>-hXwq3-)z$KR1_&8v-%{_a*EUMuSB1e!u^bd4^# zV*ZD1orlWwHOloxwbz3Oe9|nX=JB=h%2&70-urM_y~=)pXWy3FJFzxC`ny?!d97$Kw6gW~dRYBR#jM%J?L~Nw_LeI(-&z~5d?gF* zU51;|TUgcN?R6Gaqy7%K7%OkSQ%er}QWooAYQG0XEz|H-oSfvC=F|7CNZDNUp{va9 z7E7GhLEo*)SKcEiwJVc{M>flHDV$7&yP+^j*2XKJw-OG5*X5{6vU6VXA+O+6_pQN2 zNx>XhD`EUGy~MglWlZG7;=lY9{zsmsvdU?RXSTz0Zr*L!2WbFGbO-5nXKgxFBOdb#55h;)JW}v?|#!w`x zvTYn|VP&cgt6+*Bsy<^Q;=`Cq*YoFz;BU!aHT^;1H&K}Jr))pW_NL~~0hT0s9HwwO6S-na}wH4o2yrt=fvg;}IqYA{N?O1!# z>xYxo5Gi>D?MT}Uh0o=0pr51}KFOuje`9UDvTG^o{|nWh9aTSXp>h2lJWvaFYQ%%u z|JZ2sFvO+r|498@@}?{e=qC!liNdV^mF-1Y|F0n4);(m_|GjWK+6%T(Ke6#)W)y$a zF3o<9Y}E7shLE)e0sP zHU1%;h?az+FH~U*{YCZb_D?(hhTLvMA<_G$_2IR`KH@>MRr}CYtk_6P?VY96jP@$K zq@lfQQI)jz!N~R^PW-v;<@kw>%`ySPdi^AJb^X6V>wgsPhQdrgmF>(}|F0z8?3_0P z{ERc;GRFTK^gnTe_*dZo{zTce3G#TJ>Rg4jB|Tmw7}TWn|4+vYUjO0OWeK2uW!ELt z{{q$Tj;f!0mznQ{D6Lj5mN{j0DlrEhQ{C#Lj5mM{j0E+q;Ef>(+gO?2h`C1SGD#lyAq-P zm#KbtRQ)}S>W_4jX6@(ph>e9dbd0peNPjU&;RgN!g##$e>`~cHh}q*S#M^v<$;QAQ z6Aid*qrbpLC$1>|JfNoG#m4m-UZC)o7_l(^lvm%~WOJ zs`^)KyikrR%<-$Ajvo}Btnj03x4`&WMf~KM@^eL7_%YC5V%aBEy`t%l@>V(YXFb*V zAy$?2`iteCSpEGe`omrfzXJhFv_zEgTvvq~jOXwUc@~PY{!v~BXYzQ2cuVKJ8T8K( z11@9moa-}tQS}gD*^HkhFKhaOcUs>>QO1w*dMe}RQQ~LaGBbU_(o~GpO!>i!YZF@F z=lhp5eo(Z(!jJO08sq0N;wRCRA1v&*ogci&@*ctnGx^-E;|E0_Mo}go<@FWD4|{uM z85Yir?J2D-{21u3jQ{I2{Z+E+p}((^4BWgpP*WSna|ZSEczwE3KjI-JOCI&V zM)j}4`jXy$+8Na^+m8qLT8RI+z9O-G2!g8U-q7%E|BIS_pl}=tv;I)h*;#))PP~P% z=40F+ml|+sqOVA_t+KVm&lnv)C_D#+89z#TE#rq}*Or*_gX!GX_0^z%Jb2D0RllI= zhm!S&{&^iYrBhh7()Z6r1~vVJ_)IrHIaa9^!=;J-vqYe$VZqTHDgJDX zjvwR<%|TJdkCOhw_*p};Dlz3}@K50fi2p z^fvoD3;Cx6e0trAuZeB7S;YKPQsr-v@tSWB+W952eEuKVzt@5KGICsHiKX33_I7;^ z)pdJLt`0X*W6j}qJ|QPD?8hEFKFR;h$7s4^YVlUPMddd<*Cy@xPHA>x$qld<&U@ys zV|i~6-b;HL?gntmCw*d+ zTjZxhoB4V08%;i=TIA;+SXwOYWya5o;b#Ci?xsvz9E>4afBt-XTjdizq4AU5B0tv> zKfTTP>CqxT$9~;be(u!qliDIb&o2T$-Ocz}dcGz3+}sL31POqsBH>I%Zc^FBrAZt! zJZ=RufDOVtTcK3lAd9ao;XT5~hN}yuHLA)18NXBe8^}0@mwu0M5vbb!Jwir;x;;MW zz`}FkLbKMq{XeZWNj++})$YHXPP-h}v@--p&C#vez*9W70Nh?=#_gY* zHTlJIJFX>edHfiq57%;inBOB>A2u9|)rb4lHbEagSLF|VxQ3TD)Q8%8Ai{}BuhX$UN4Sp&u9NNY7dVmNMrh{%rSkMr7959r<$)d zefq3LeaZ#9r5()lX`qhNSbaKo8}V#6_TEwUc&ExB*MCKS{9ONa{C?RYzmNSH{B|_s z_s?fE$;R?K?kDj3zRDou*QK5^et&&blW(|1e!rd%emk4-yCc*Rzfa!UcKJG01{uH8 z6@BLNedE6xzws&>8sW?J#IMtg-<~b<+i*+U`JJXR$oSo$DgcwORmbl|E%Li`9{6>c z@%#JJEy*|IC-D3JSDFMbRXH+>hku+4j@)J(ebm$vM=#ynf&?St;j47~bZwEJ-x5Dv z%=pP|k)NJz=I5C&HTm>tk)MD2!B1B+e*X4jOY#Zc)Ute{(?;B&{nZ_eBySjL0 zm#TEY`@ZT4@P0NgZHV{rXb${W-0lK$VbrWlyRb{|zP>u8HA!(_)kV}0EvWhC^BA~~ z9RFOU^26+7l4Dh_JWURsCl2x2UH~{so-DifTlg$6J*DN3$XSPG<6d`+JSgSosT6h~t*z-{iGh zF#%8)pO^TYwX9PqCO1BKmzrf4YB9#Q>7r%kpQFpW3Z*AnDv#m2kmnAZxzf3GJ&Zh@ zEFK)X#S)nBu=-u-`#KBd7Hqx;|KQu_URRxk*7`To(p~X3T`8S&=t zg%+btEA%pLc8*!(h;w9pDCfGmSt%V=%GS|Sp`nU;juufKjoKod)0jp*M+<4CKrN4R zcAvL}aYeJM`ulWiGc7sD5~82_b6SnopVR8F{+w28_2-mFr9Y?9nf{!zKlSHK_B#Gp z`*i1&m!mJ=JL;Tf!}aY!Zbig7W!LKO(`>f>oMwCV=g4hS&eL|hLw!u01!Zz(e-O0G zl1|&9TwGNnI`Uy*7WE#JGTvlRsIYS?A=k2*dZ>6?$seIlC7XLeot$16DY;rIf_NgUR+EtW1gF2!** zj?p*@aQqs_T{srwcnHT|aJ+$|2FE@eU*I^2!-~4Q;J6gW)i_4uD8TUt97}OLhC|`) zMcr?@#_$Seh>1hY89E9uSy<~0S?auvCQ2Wm^R-d4zWj2pYneABKZPe|$WN@6 zpKt&dX5K6A2vbxMJbjJEImJ`GC5~Z7R9;5kU zT<%7vH{w+2j0-+#5lT#(dMlp_49{~(SE@xNoHqPR$aRSm-D&&5c;yb^b7%G^qPr4Z zX$fp|r|k$*+HbF#F||)f{OT*p?)7*e#O7z8Z&%IJGDabKQyrr_y~A z0Z0eEp?AoxVG^wO{6F1hAF}JTuzet*aR0s7`)0$J! zT9X*tCykL>a~!D*OlunTa^hNZN-T1}PdHh*UmRm|X4eU}Wl*4sbYdFX@fx00xhRre z9}sa`r9ai#$$Y9YcPJ71u9*}1t)37WhC55PA!o%-xy)#NnYN1e0eV;!?|CdBp{+6E zHKgVdZ9StpD>H)H1~Y1VB=1L?!qh$|J+Mc*4yPoqMR-D$7ppWmN<-3PE8Tfc--Haa zN;Moxq#}Eyt8;1@56CVe9{S;wcsPqiD~$*3sUx_KV&}a4DTH10)Cru@Q`;k++9S<4 zz#BN27n_1pD)v-FF^za75zkE~ku;wLVHBMmQIxDDS{BK%vUr~!R=e{mqH5NiZJ>5n z1hp?vQTP(fOw^#<^n1|y&9FO4WJ#35R3LI2!82-+X zf73Y~%c9Pe>j!W>`37Ewu8qU*$8qez(LO_~Tj666u2H!n{CytB4|ERqx)O&r+b#R! zl*vM|y->K8))O&}U-_xOOKE9|rC_zSq-64HYxn@o;KyASh9ty1DR9O*ud9${4;&s9 z2=$%U2afy1Bn0rGd;I)z-$3Z1c?r1u$I0;Lot&F$@d55B|4se{G#W4FPh zhUYk>4c|Y?){zfZhH-f_1?A4{(6JG?%g9dd9qu0z=h;pl>fO};w6I&62#^Qk!UP+5 zhkwu75LPYM_=!t&PxSRk-;U8g;SJS!n;odtCwiOfydjDoeUqi0KftD(5LwWB!Y6IP zBf>aGS~a|F(2Izm?8b~N$82|rgrK=(wdHYZNmU^hM7fM%FEvt^z+r1#Js1s_Ewf3t zj9|!3%N`TSaeD2Upp)Tk^#4upo*=3B!1`|3-z?l{lk)Wp211Etsew?>vH^jR+gZ^C zaw&O`0@x}9W+izDR#~m82pE|Vk%`xnnT$2oi{XmHbKHVcY8b5-!9?^PiFuC{huA`; zqzMy{_c6>#xL)+yedxtqTh9Xq!$ZP_cH`2op!D)_HaP6%HBEchS<9Sh)#5nYusCOS zJ))F`Ea(T+b6QEB1oa$pOjXao;q#D-015lMmtMthA4Zw*0f>wg7_r{6K(!5pmUohA zcSx%y!Ur3Mno#W>`0{)p!!oZ+Bt?(|gM#0lwj=e2I`1iTyd_W@SMzPVjAFYp_he<0 zv*KC!bl^<_TALR3A=~qmc&iOvcPgXSf6Tb;uU`&H(F1c_ctR_a6*~QC?@#+5l#Qi- zsPfaY_F|SD`%zW0&`T1qeNH z*|}-7OSr|sngFbpc zz8coyvo~d>Sp9ZkTuR`J^Du%PY1N3+C)!x~u_(VhD`lP4e>n;WHNb_kz8e0#9E(58 z>tX$6J*ad72o_KkE>-V^gtQ$|mm=gq`$a%Q)TVqeTrUiLqxYhuFwQR2>QA5LHCv8U2@EkiHmR>b|>P>ozNpW9@+1Zkaq8cb2$K;Q(sAdrf1wI`@ zf;h(>zK%N6U4DQ1ENP`<1uFZ~$W zC|ouOrDURtDJ_2!nnQv^-yn8mtTf5_xhx_@E8RUd!!F=%lM%U z^w2m*fv`PjZ>njzbs7atGlrOIMj=tw^uY!POKs^3rl15(aOBSHlfpO`rWOLVm@dLp zj_qn1t2SyA3;Tam{rPq9ZCT=68-(EhR^vo(>t7)lOlul8$K|Ye91oH#Y#T5u5ieMT z`Ub#T+K$sTjgXC>fTPqRJ)FKF++Y`aAkKr!hE{~jHrS+pe$7K%1b-_*F(+e=%m1cU zqt^BrnDW)G>p8gv&xzi{K6nP{jFX8>)b}8BNN{97qSM79nFb0(ivPC!CePLqCCa3mB$w%Z`>9%lcbP zq;mvvn1(+eM3gDN*KYCmY0C1Dm*1iH@_Fz^%gA}+%%#)fyqyr*JR_847+Kr<7bBv1pj4WVvm?(D@BYTk_17vr{%!X356a?pux zc0ku>{OYlY5cX6WnA<7k<1*sfihlqkaJu`-TJVJL30+Hn_ei^=EJKZm{jWtv#Lshb zQ*l{|h&Q4ypmW0Cbrf^jsO5T8 zjR^(REIB~RSXfGL%WQ<&fJfK z#V0C1byht39ejtgZ#Kl;3$rUdB4<~GDQtX-e&=&6fl#Tx3j!t){M_~}1U&^Clr)bH zY_*{x>e>7g{=XSB`6sLdszS37i=8oq&J(iSz%sa>k!T~rqSJ?bm=gIRQ0tL;Uqf04 z{%;hMYBPR7{DT?`(U-TQy@A@qj34|b)w=LBT$OaSUPhWVZb0Q~(TE`S0Oq_oTZAH_ z_aGs`Lr-!zJ!AUVGxV4YY0SIaftuwDz3_fCJ4@SNBlQY;8zCEt)KbB|+D(CKgjgqp zPC^aJWbB>Yv&4#})e=`c{K4h~@&`gEGQ=tNnq$2(_Q6t5!jensy)?CODVsaseFGwU z1ltOEK#lTaP+i89M*nlh4gN1ySQXBhalbW$IIoeqQRKh$8y*oTXrj^3g!v}iwsu|b z(1S#q8HOzer<8H{Z>h}nu+00BuEtO!3ec2-!>OQtnB9pOWz^xq+)fvU!Z>qw@g7E; z0BkVkX^IoZ>&i+pE336D6(x;nyn$6}#>%iPn{yRniSnz!$~YSV?35FbSVH)&L_#~= z=tiSE2TvQ*y_x8eEEUy zRvbrhIL2(TT#sWSjsT7wI9|=#V%d-5IF7$&Z?Sxi!|eqf@N)zHPRH>ij#?beI4;lG zVi|?w6C7`&-VbsyU5sON-WJQvICkO~aU<5Mar_5I&DbrL|Kj)zWk-zLVkyD#FpiIL zq>abiIF2$L&*GSszs2$?j`PL7K@bm;7Kb?9QXcC}i&S=|@Aaksm* z2m3FvXD@4SoF`c?>C@NhxwKz@YqHgP*?`Matk!{7;6^8__2Se)R}Q|a!w~D$*I3hr z;@Y*>S+BRI54$15I(&rHI&ze?L#A~!{u@L8wC%qvkkS6j_Oki^LJWV33WYP$5X__r zIXoW0^tg2p!F*K057zJ1@)jyjP%)RshB@l|T5YQGD9RVG)rF$T@LbYAF+{^4Ll{9z z4f0UK9X-_eh^ALD%(zaNs|-iX%TzW+EmqLe<%{ez=DmgtlY#xRSDv

    9b+ABP_ugU*umJ`(Y155!S@c7PSmHvbu^Rz7ekOy+7ZvK>ycY{g!H6h zAui{E))&jeXh_XIEXR9CwGPNgLH_*1;;{br44-Gvo$H)`@>}ki-Y4Qk__CkBjq04B z5w*cZLl$5oamdxe&C}k_=5?1AkV1vM-RrH|CnQ#`oQ_w zWtliDcfL(t9lGki1b955JiH|0ckc>qzykva`^Qz&pTQoh)Hqk z%V!6{4_zU7_XL{D*%z1O(^#uo11K??Jl@D^mZkI13CTF?yb_M)uv?=T6NHqhr` zTVZLUi*=T!vo1vyA}bTRc92A3ATHz)b@yb^v^1+DM;Ihso3V5*0?1W#f~pcr+|;8X zYwLMFdDF%ho7r#deGT?4t-60C)U8cAHzfyGN*x7i@3E@4Q;1X2U|_u|t!Ls<(+8$^ zipKOdciPi3@?(Sr5m2u$g9YcU7T{WR9*Eu!bQt9Xm&pYOYz6q-126#p2eC@w< zc`tlu+<(cV77z2fT2EpMLz$2Rj~Yr#v{)ZHX=*`bCsA67W)5s_0oUVTJ+Ra!H`^AW zKjA}par}loSYR1eStknN?l6nJ=9Unz(#-JN4@4(nQ+F@Si%x39IIu7$I!Rarn2xf< zGFq0xGTJLogtA9(7jn~3N@G=-4+If+#JdR1kvtEMb7c#5W7on&>F#6=#p;QS2N z+^SDf<}BT!apO5%3F&e;1ad(;tfQ$MKtniybd(Nn1zS7tHR}vNJ9hpWF{N$tvWvGQtVfQ&CPpbPTqH2`j^as=e zzRKrk?FWff0tRXsM8@S`qYfRsk@De@p%l~$cXYe=A9o%Xwj!A@gh{a1$CmGH0OOBjLLhsx6h+ORq7YVS;0Os~h=N zq<--|F?eDu*l)?9-+<2(&O z20RZAsVHDyJ5p_X74rfyE?nrpd>iUr!rmpJR(^Je(S#GU&fht@)~Ls;6Bm>l-t`kwb~eC{*;D0Mu_~Lb&_N*g zunAw(JQKFy>L@_anu?ZQTA=?`f>Qltn0P$a?a{P6%s;kBy ze~{PtS2G#GVFmtGLDE>PLGEGL(2(`F>t+U8PYc(&`S2!gyO#uTu96TZ>))$|Zzs3P zNNL3fZqrh4-`&xUF-zvTw*SaUkJ`BVzSV@_^HB|rUCf8cDEd)cUh5(7=m-b>oqVF=ud>k7>kOANUFkwM z_LPU@cI)rvA_X|-?*t>S+OHB*VgZtX$NTX2WP0-=V=avBOe%(v|LG6dBVD}q*#MXQ z<|0?16y>5?eBh|)z7a|Y4`=e+PfX;wpO~9qgQ&&v`oR&cH$aa$Rc-wwEQv>Tbc`19 z3mAh({h+^2hjpfG`d!wg7QqGm%AVlHJ{PdlWToBr-e^Ji$mKLV0AbiW0-=HGseg}# zezf*iKj%vcgpUVnNfE5RMuR0UytJ6Ztgl7~7vOS~FmWZi0A2k$O*H+^fBk5zC5>f( zCLbx@M`d28gMIeSn^~;T@#7tOQgIWZefabU*2!R=z&j;gQ@&4ZTFp&_dD`{XFH_VR zpQWcPJBNvQ?%}X&UrpD)qx_bC8=Y&i$=TmC?K+vyd6P*gEL=}mwvXm5k&EnmC-*Y8 z%aWAvpS9ZPJRmxw83{7qjxVxl!O7u{!NF@v)HC;AEC6fCppdN8fQLDoZQuHoy7*5L zb`GAeL7nrcp16VWqaumtOAsT|-X({G@+Th|S)=!HXb?5>BP%kBA!e$q=mh;G)6y>P zOa0k31{LSeDYc?wpxbn9XAEiDro?p}qNaK3GS&vVazncR5^;XYgSK7KN zv){ts_qbrQ1)^!pi47m29DIdilfe$E9MqY00JVxkY$>9 zl6{@0uEhhFX+@!u4y>5%|R zlLY-BPW&1Z!u)k-pI@={bv@A&Jz<5+m9p?&+?B~s_Vak)$gJ`=PN(}D-UU%Kd(h9E zXe#_o}AAb47AtyHaUT^tWpRQ+4VzaI0197GMRL-HKJtwOGZ2|Zwd1CFf_KJr?j2FsrOy!y zq}-TEfEB&K)K9-H*JQ0N#XKZS20hOeSY)IaYw^fz4Guda@s8nL@6e0H)(@E~wna*L z3gfHvDTRv0W9$}A=+`ULU1&USr$+^a8KF6LM79{+N{0cF0;``)=P`LY#eqAulG8&9 zA(DcMAczLLNJ1Yyz^C)jVjl9Y(=W^4&OKjUjhQI@7H{NIidJosJ|X+&$u2CMOsZqO zr_`LwKZsRisiC(rWP*&LwR!a^xo16@vTfpkl-uhk!a{GGm`-FtEu_^?L=r#=lnM*K zNrtOJhsQ0gNSSGGr8I1r8MAFT^~csq%ePJJpMuh@aB^(HEett)Ji7p}o*4iBob%`Xrd)`@E8Ydebg1iZx73$216b?s8vu~M~}MMs!$c_H|qpNa&7 zmPCEi`LgG~oiFd|TX^P}0lFd=V4uHD#Rd}+E_$mp_h8)%vDWL8ULE7r2*0{+jc{p0 z%G9q{O{Us-Z7su0ZO>90Q9AX^GvJbt{(A@BgVkMy&n81Ys4Mi7*^u_`A~pWg_>hM# zh%ck+RWfT4IRv)3y7Kj&GAFU|HtChk>^w-xBl=8fqqMhrKEJCr=?&tId|RrSg377N z8@Y+^q63dDm}Y|C#THC1Q8ys;=>T5$^0e&U=+DzBWFlk8?2?yD-mQdgZ$6;9y1 z)8@S|B24wanGNUCQ%`&#a!y3#pRt9vd#exdh1IpQ=@UtAb1`45DnDSj^{d*{0)E)1 z5pt;`HY>wEodD)-d=XCkDS0p|N1tG}7ECUG6aImA2h^|_!dr)t4S#Z}2(=;@?@42WKxQ()dL@hOV)1X@1HEYhOTtFoVD36)d?)Bq_;L?O4Z zG!JvJeu}06(J2}AQ#2WB3h0Rm))bFG^F;BpTZNB`?Jgr~2e2JlQ?3^_6y2&-*%82#S$(S? zSho=TSny1H2yF(1H)v*p#jFUFsFIttVRgxjfUC;onlrbrXakPEdbrUa+Lf88j`F8w zu6)2-Eux@K(p7y6=M-Z0-@b|X3(cCGq{=>o@K5|q?bmRK4F`^6sjt1p*SysCX^rnK z^xG)6t+InKvRaY-!P^I8e`{lOi^QNUdKp4*6TxFjj~Y-G{mu0(2ydN`65>b$0A^=o{87Sf>By|3$)ZhM0 z7IKq%|E+@{pff*Z6tv>!kH657wb`S1>ggredWOF7>t)Ad-gUJs(IZWSgRMnfF20TT zJ$f-}AF*pJZDJIoKI(pmx+~Jeye5#!j*Hlusor%v;Q&-CKjgIwcr9CXJWn(5OPk8u zX@K^GJj4JJ&wYx7VQI%mWCmSVXZf3WwreIsGL!P4ddzvp7Vh(Y=OsgUN!KVkYI#C9 zoXseesN75)aYMXRGh`gc*)y`y1VsIvD&j#HoF-f?!N0r_iHS%cN$wzXsB*dK!~pO{ zL{T6*;4+WBC>y^p`)2f+2yZ)8?YX-F`0bP!Gabm6{2DjbTm5cgA&c8RGxYo%=7+~w z%V)-IGN6qEY67+(8LDZ`m|F<>E3cVJ8ai}bl8Bmqo=JRKNM#6+@voIhK%pjyvY z#T9wp!}Hig?49Kw$QXA${wBr}qkk-RivIJ>qyZD9cL8|KEN7VXi5+>J;4zb%$e&3D z-Yj)}{_9{>cB{#JvIGKZ@#S%Y9ukq`>=-A0ae1hgjwi`O#d(B_@U!WmikbPZZ%YOB zhLmIZm!rHGHy1l|GnQT%{K~CPOh}x#i)$>u@>V}8gIKoJZh&P`zbq0}TJR$8I#0M| z7$j@a*#Y(aW$}0tWT)6)0@Z3l#FuypsGGA}XV^D;aK<3v0FYz}Wt0|l=f6&((3?Gn zw|Ft!tl$kvI0)h44{s6w#6E6>-|4VFsrOa$h|9$N@>YNBmYF+P;8XK6E8L=lKLp>@ ztbSCUj&|*!l^ymSbQ4&jZ^0-0PMe*s{47 zKZ^`>lY)5z#;1a&nxA2Xs#_MyyLYIC{RAICSer8W9cl<~%k4w$QlkEH_Xz~xK1z!M z#yI{x{4o@{MBQT^7CzuDA*s1OHL) zcIk{7^ln$YcX>aS-tB7n162Ejy-VY?LAdK4!VVc;hqj!SaL+y0TW#y!yXm?S9DC&f z;VIEx8mZCO)K{%?A9?XyZ)AnkhIQha4VS=vpRfs1xHrZ_OYibf@D_V^mZ-$H2*v#W zxZ_%aRQR6`THgQHLCf<-mNQWw*|=Cn7Y}ih4a_uFN^{sGwmW-sjyQ-(fjxgQHPtjf!02icZT_8zzZ+#o1L_ zZ^FIPs8NEPIva8OYnpC?F0nrWX5x^!$QeNG5O;v-kfRpJAOVg-&FYEoo|F>xXKeGm zgqrFu&BMQB`kGe#K&EioMlMGEGj}+_S*qOt|-1g2g`3S|kHI zBP>iBRGPi?N$VKlUdPJ!_xR5EyGC+`((WgoO=&$RMwX>v_s6GTmOViecCvjyjc6(O z=Vb+DIo`0u#K81qXDvT6DTBee#v6HEF5!EBrL<0uVHKhHBPBd(j?b1&Qi2!HiRnf> zC*NoBU7rzzM5D%C)5iH42u7uU)U-${AY#&=NIU1RC6HI+U?IK13pClS<>l(kcMRE` zLBr_aun~z4wp_!dFQ`zD>#yiP{mkD7)m^vU>)X*Xkf&HnDOHvGT)}xxD=~ohYLJW> zj|Dk07VhOoCYZ5!_)XefD96bJzG$;_drn>9u}Su~YB4+9gV)xbG4qse9u%9?}~4JvON!P9U?34^FfB!n~+QHVUf&9Ai!VMuNY+4rb=m} zxB63Bn9uw^0h8o=LPoueX+Kx@X5&3z4cR~;jj%&eg*|1rx*d6xg?~N|01NjmXFY~; zb@@jqUjft~Gvz4t;cvBX3e&lq>D1F^@vicPFvtiKQQsOvgT|=eUMVsa=ljeKX-JK0l2(wv z@01--#vERtw(l4ASy}|=MA)u|g3vB+wWOYc=CrJU?2%i9D(tmFoXS(Bv7@vQxCa0B zaeXyZgg@O>Xv5Q1NLnV3solBKvf8L`MQK1SIa!*3m1u>UB2CcVnQ+FmLpzP)(%C{1 z3EBPS-{NVOyL5_$cKcZduP}VO`887%a)BjQ-SYzL0Fbd1K<+Y?Nxn zmsAu{+Ui~5s+Z;O0x>8bOd=X8Y+gMZzcW4E;k`~{h58f3Yk$s69tEIiLY*XVs# z@hXt_@MLfc|X(v*MN5W7$Qv+atcSiA}Hq*c+Rm_YQE@KTBTEq*b>LVfa{fs9*HHme$p1e}&={awyxByJ^qz?9#MUoErNFqay6lUTNklhu)LZhHdLReI%K+d{ zO)AJ&`Rv@2fbO}`d3#jrYvzdFEN%5fXS<0$p1&_Y7IoLaBEnMb4A-SeMDix@)Eywc zg{S&&%Et5060W<`G*a{m(q!^^ibHZ{D(T~OKKjobtEb&SkiK}z-fj7(BCz#iyn{?X;2hk{i*U(lmR?Z2d*qOK#C$4%tg? z)nD4|CEwCt+U+If`b!6P4*_K2FJ%vcAV1&{Ou@{LM!E_*q#wo7G-lym&%GqsMEEU7Udm_EkI8p6@1# zCxAu3mI9^!TuwdzaEXYYPU!pQxg;9L&;?GQ^X#7XTTR!5i0sB@Od!|MQGbUz z=Topr4QkaL{}PSONV$}0F8z#4{Dh0d&H`Rfm&>b=a^C9iO9Onv?S|6uTgUTbD^u7! z_@3G6u`9Gv=lYX(OP*<88|Vq9Z%G{~6kY1}&ycSDBSrr!iX`$__?p#8hb|&l35poi zN-UJJ9NDq|l3kF-+vU|&@@nw}={u^TcimJ^xb{7R|XFLeppW;je!F7KKd z%O}U7J;0o$$KL-i1|LQf{Os0dIeU@sv@Ix`4{cvIk zWB4B)3yqZdej$(7P(II2-*5(Bd6(C>jmKD@-u1O$+hvu`DpA|>NurggBeBxV7uK6S zP<%dedCcJ9&Dxf09u>W*AJa|P;W!YF@=Fd$;Hu;;og?v2*w7_9`pHMulLvt*p`DCI zO~4b0&4b4v*XnghA6hG6PsFhc*Es&l1(l*cgmukQ&+iy5%<5?D7`n8`)4pp&u^2kj z-XyiyLjt@hiv`C(6{)c+@xDJKnl(HPI{JI7=fIUoNRR4bz68{Ur^FvvkiW>4M{KQJD73B>h+(ZtBRAYg?57+W&e25w0TxppM zmx&*w_WYiWIs{t6H21s^T9djt4PJIVWc0UQOX`jl5h`M-2Wo~Cr=pZEakP4re z{hZS8VO(*_9BL39dwlff+{3t>Ej;zL2!;~1Nm`IgWdXHs`##zs*Pz8ZCB9`XiOO|l#2Nck@57JE zP@2o<-1Pykm%*@y*iA*Muu{gt?kK+q29cqP_bpv4P;C{UQg^Edvc&Kr1S6!sInN`H z@zWWA)_Th8&|s#9iYtZN0Qs>Q+lf=AUdrfA)mko#P)4`>>~#HJ;=53g@S3J=V(;NrwV1%X*)o$~WTenunB3?T~eEY5}?X2o;=&59o zU*NMvY}|A>X`M*u8x{i#-b~di#5ky`%tPmK17*z;(0WjBbs-l-B=@Lq-ovhhx_hg2 zG}5Ua2XlC~fiJ}tW!Xd2;D;GyKVb!gqI9X>@CQf>W^~2pLGLvY<&^H`<&=uBY$ZA{=)=%G|@I-?%kD~um0E%oG=3;H{; zMfCh*3X0GFKQIxpD}bVS%xGF^;Z2%wN<2RapOY~48ty{#%JZ*^vlrz#&>92zYkmjF z-+3>kr`*2mpR2;I(;zGIZz131L@@js5@@IW5wN&`y7~Mu3}Xfq9@jDSBIpk|nFt-= zBZzOCw5iY7i1_3=@L|=0@Fn?uawh5^YaB&M$YFh+tfZE%^JHnU_;hfd3>Slxr{;0d zfW+3y-Uia zg{n-HmsqIUE~|kxlM~oZk4LEbWC3Anz}rZhLDvv?i&nW>?t)@bwyN?`nA~bH`PRtw z)^w6d=q%ipuf|Tp<6z#%is5RvsFe-s*<1Zr%7F!Ow4E&%VQyR4%fnOmji_7$?YcUZ znU{hAIUrxXiLWh#>(mgigXRKZmoa@(Eo(begE_ULR5i_oWcu@LAH!Z{fln&}M-56X zQ=9?|v)GnaVKxR%t1xG2VQ${>LB2=xKB_6qwI^j2q!1aehW%2$-1W1R@+ygpCruLH zNNd>PEd;5opugoW(3kS^CPHCOJM4tQY?;Xo;blsR>ouEEqX@r|Fy%*A5G@#qTezS$ zzX|*BqzrHP9X+1*0(Y?BEAqsu{Xv1tgyPd83fdC}3Ps!5XRJ`s8aCR#yj~kZwk}xU z#C~a)kY*BARL2Z`o*Z*58lkTr?D)5)v+ov~Frq?WWMxbI(AZj8)+YNGbdBG#BWMeh zx5V}om8#m3EPWJa!>flkiAqez(-ED1H}c@b(!VMz}=XzuD1y?NaLHWp!K?+{GV9jBmj?5_C2G`bxO~MqdGeU@ z@Shh+EW}`=c!9=KJNB|QzQkSWIXNA#ff4Mkv371&J>WUh8`0L2|F|A-&Vm+7&c|e0 z;B3ZT6jpRclG%YY8w8%3>NfJ9xL~LsG_{~CYd7u~9ZTMo!BOY;XUN3cXcY8SL`|go zpWF(!o6Z$DM_(J}#i|i0{8kC$JH$Zsk*{f%{rtU{ z=XC16zsQVr1$$(-FiaT%T#^FO8Cfa_xB%NCd-L@2Ge9Mo<8w7Hk}Q8`2_PGpBs;%wRL5YxKF{^k(OR@LBt^7phZldOv2}kDmz}bjf)HqKa8~OA{PpN+wEfYf6?X zoCQ7>9{Eq{V+8PfIJOAA022%&q_sy|#$Ti>=LMIETMwx#z}p4jQ7`x>Gv^T>rQ?u3 ztvIU4Qs>Z0+NjO--s)$e4*~&Nlr5?(ADR{QWt(A$%KZ3EkuI~!3xwV1_ypK|Q%c;$ zXVF*4Yq#g4H)Hm^%rAe_X*X#t(9IwS+!7#OjBGA!rvCjBVSMF}LCunP#gNC-dh$mv z+5Khu#m=Vb>i2_tdg9bNx{_pmm3E&_yLHE}`+w^A9{X|?46t4Sv#OnKZxY*WS|*B7 z2^isT3#jGyUBa#-Oe>KDh=PDh^N>9Ny{0jlYkS9^^IfgvUALK0Nt=0kPX@)=9(u|< zdQnupb-e2c2hVzT_r0Fw)lhhEiTcCJ^Sa1-&j2arJeK`^6n!Wb_{vU{+wm+)EF*9A zo3ggF`+Ia^CVY4NWD{iuHyxFHgr+%aqkifqg-|ci0Y&NDY&WL(w+7sq~88cnkCL40~~weRHn8 zbMMjcJMa;0qUQt%mI;t)lb!FZj-ArE9Df;}nvQbvUB zYgHapo*$;LJ{s*Nb;lUZafE#hDdFN>F40hqrdQ;eb3E2pk|#ar!C8!GC#`9G7BmGf zlk{3F8V?@!)=inMxreu;!3D1ndf1g4HLjGk=H%LG7D=*E2Ub`+E;!iM=h zEf;ZI#4(f%UvK?g_>jiydhAyrh(9Q`uRc<*1(_4-fpv1{xpAI@SQNmD{Y{WjITVQe zVUXBpg!vjzH8-gR5T>P#!Ns{oF+Q682E87!^|XNu#ScXqd z?hNpi`MBIzAz~=BkxRMm?bPVB;iMf*+f1&Ry7yBH8oX0qwu+UY4bNmF67mfNwM0Ha zBL9Q%557)Eq4Exu3hg~nYPz^uB@_796gR;=PR!&Uij#3l3Hj}ohXRTx_cz_Y*lvB>F!%BKM59v~Csk8q2v7}q4!bjjp!mZMog2NaIz{Yn-oqOy>M9M=X zcag{~>NI|i%QlMy;&4%7VdTCaUl?#nzBb$6K0zW0i5;OGKqonH^ZaT%Scw^`TAP3iJmWV&P0GS!=ZrZ+g`WR+i*D7maP-hwG3 z!J5S8<*KnSz87l+-FhAc$0Z83#S4OznaO(y)Pe;2Vw;p1h8?I)Koc3Rm{%}DG}%>a&ISrzw|yFNoFw46WUnc2wO3w-Cq>&m&%dKk@IHNq~?&>i!ZupZBQuzC#VZU38|qU7V3o zpA8V_=y<5L2QJVueb)r*`JIZ^KOB{_M*kn5@K6$YV7TCAH@) zBg^-g;jPTu&^`|~+b39$7`<*t#f=_IR930V?U3msqu@DqXaiTx;!xwH2ip+o{hj$Q zs!hX94|>n(k(Rz^(=OhsCsbxr42O;OtXxtGM)n2gniG}DJ-yrHzHBC!tb#JXrzOwt z53bbn%dI}9IQ%|%AyD8O%`E?(C5)3ow``jB)XDbxYJ@7Qa#{Vu@7ZnH0&l+YJ=?w zAMF>+4Ik~#@E>Cvn7k9yj+3RwVTN=K)3WUV_>DD|#|ntA;~X($&LUP+Ex43`3e0BU zi`U@P3r^B)O`?dvJ2qHDL>KijB2(XsZk2kdU-FaLM|PI z0H`tMx$xM2bg8dY8irheDG`^)ZEHYzNH2D=vNqDgSmu zH|Tkw;@?S2^l0xFHKQ|DxYT4=tM#O9kfATweR@T z;X|{Nwjdf*wizL)30G2>T>@yNAv!OQ?LTZyoH*q5K^)#%3vn0~cfhDUkyNJ*fyrqy z2?|fQCFFBaPHaJ@Z1q%|aB3U76Y-hdH#eld;Y+Fa3Fx*gKB3zyc^wEgb$+{S{8g^t z*SV&yCB9BRK}*bje=$#wqW#XzTkPpMnv6S!g9J5SEjxc#Qu6>F3OBZk&B!rFNMIdp zY)uBMm@Pq zXq-K5GMO&y8d*E_Rf*lMSCQpk1DAV(9j?ivHE%NUU%Iw8BaXNYh)12a<1&;Du*+NH z@B>hZs`eY1!k5w%PLO1dtu6pLbjwQd(?clHe6o?dy%9F=e9H5 zPM8@&SG3JFw0BOufguvYBHM{^g*{+fS_=3Gu{XjEmnyqc;u&N!BEPdea6L`Ha$$II z4sH_uKou-M>M-EKdgqAv8M@W9s5#B#Fs~2=c_=69%kExxK)oRj*uHFmKKe;G>y50U zN`!tYM|0-_#&SRy1NG2PyT7DFjd`=lFvj*Ci_CvGu*~Oe-Mfmt;gVjXq5D6l+u@Vc zf0jFKgy_-Q+@xU$s8c#*9CD-nTs3>W22f-PFL(dClJm(?&8uhY zpf3&T%JrYaF=mrLM7-vnFc<&#Meh0GgGibztfcPss2+6-{WJWifI;j!G2ammDkB~} zuG22fSn@VweT`MzQLxu8&I(=-K9(BHGf}_9=7L&gR%uZ{{o^mvn=FZKq-P$(29&El zGn(^5k%TfH<)kk-YWp*TcT+=XyzNzI&(`4n;RT-rucI1CIGIU+>&vl7sPq1z7YV46 zo5S1O1)qf8XgyCfd;Uxs!2=h|duK{%;w5g4m%W6tloBkUDOlMN`VpniM)yHDw(MCf zKpl(hbko{|ln!Vo9>A&(eU5gn6=D4ZxF%G#I~`lNFNE($MG9LFFwj}Iax{VCk*G`N z%A-|XS7h+{Pmg~l<4?>dtxhPl7vsR!JD#p+TqG!qB0B1Kd#k9lLPpD+r2%z5?>X%2 zWc`abxxF}}mk#%<)FuX@j8f6DzVZOI_%pO?XN}a@KfFN#k;Vw+6za5hhTlD|p1bmc zSV3FpJh5!(3n%~NbGd*Ip{GcN4m2n2YLC>0w29*1W|_Qo9O*Fp-f{5(y^CsC)aQOA z3_}Myrk%0GN-(fg_T&$T_Ulr;QA-a17ZFjN^~`u@*ssPGj#RCS@r)$!O>O8TiYLRp zJg!o^ApCdJk+B6+MuzgEQxJ*?qYCM$uBD?r)rgt_5jqX~tJk^5(J@0WPloA_EzA`; zZf8I}eLus*M9QF%Uj?~xj}d^>j++N`>qA<6EHBUi!GbBdp<#>}O(Fl<>kQi-^-~@( zeHEHWzxSwWF2xoON7S>^A#hNbPJF+?Jn|}BGZA3Ve&uMF0IOrgCf3{JB<4n2?g_0E zK(1@BinpTgIkH*wQRu}GUXz?L@Wb)O7Uj-DLRP-n#CxI{(fd*WMTGjnAhq@r+s#%a zCoCnxcE=M#*i&-1`Sw7_Jqu5*aMv{>U^GJb4+PZTFXjZF0u9_l>gvXs$lWpl*mb5n zru`q%>(jK%SS4%D8-CtQReDwB9#@Ej)(r%lfVmDeqQ$vqq#YP(-tQyllZ{ z&KnL7QZdRZu2sIDYVAI!&grbF2DCwq7_aciHGz6wm`>tdPj9g&8GK%F?L&ALEQOr#EsC&^BvApQ;{bAQtjTCJ?<*L2%k#W^a^3m_A{d}P8 z5EFcoRd1i>FjRr>P~5RrOl1ev*o%abBKNx6w9^_J_9=HkC?m8)bnXlAjnLM%6_Zj} zhN1=+ZK+w#D2#BcJzg-~9XiW86M#VQ@)M0luDW$Fq_HEK@=Ww)G--qEW#-sZyR1D|$9c z86?t-3U>h1(IM>pe3g9p$yC5!EA!M>|yWdR={1xz*RBv;c0P zjSQ9Ynj3kJPdJL%YFhl2cO{<7OnN16(pG4d8!tDnuW}jI0HMj&D032Ix>P{7CwQH_ zZ*shC;(utmH9qlwWT3qwvMok$4eAwhX9u7O+D+N9wfc<77H&SZL>5Wx29E*=3pGzZ$APq+k#3p@qgT zkfTVxos1h4XWdNuIxqyC#QPl2Qcmo;Kj}3sB(5zUdFad^c3abKbYUg4B>%&~U8RZQ$VNwJ-7wu7}c!X9%0?o62iA-+tCtZ2#h;)Wv}yLl ze6NNs!G@A=B@`bxK`4RX{0}RIl?|v@gHkC`(o;?K>*K+Y$w<@cw z&||9KQSwp>nrW0eb|&vkS3miHL#1-Lz#Esfp`TiM-SE*fhGS(Ob=`3L6}v`Xn>c** zq~Uq)Q4@#jd|hZmL{}zS`(0wsmoJ3=hsz-zRR1w(eYW{(T~XgEgl^voyzs~yfyULI zI1*=Bd*Ub%mPC=MQ#q_$P!7xJhO2cD0?E7I--ljxneBf}+N?@D@?Ch#!9;H5Uo%b? z%Ou?(AiY@V3A%9PC(K)A6~sT!#k^7OteJgB#bM$c?l`r%JyiJ~Qz^7i2jT71tQ|RO`VG-i?x~z}FBwOSFEwB${x;2;WwovnIOjr836q zzWYY$hkVNqPZ;hF4c_*k;#+WnV&~(LBnG%C zW2)|*?ea#hhrPzJ(C8@bY2)n)6G#agb=QfzXoI)<7!})>611QP`OzvlM`<*kcuKp~ z{t}&XGO|vdV1%`YZ$NE2%*<#Ild(`RAzC=9z99;eC-b!OuJhsLIx2C4; zwF@)T>Ixb`5zKcZad(G2B)wLRHR0WR9AmnKzeezvyiC8-x>ZK)>D4b8DDc^ra2{(c zapNc_!lXf=lIch?a`~$Z{Ev7e{o%90YKAx5D}&1z5hG~ngyD@UFXhTQ&d9t(HN!8B zS5sMKYmBGqJfi?{4XD3Z4|uFZkd7BsdaNq;D%SQPOW@ z4F?E%9YJc1AgJ{RGxdf>ZX=qM>b%PlcY}+Vl^+frBbG%n>IBru^XNwzCwWTf7JEQk z=)4$WQ!ph1xqUYA{KeYX(q1_*aC>--2B zz*HC6Af6SFl7=^rDsiyO@=h!&@=`FNa7uL!6zGg{2^!|eP#<8f;Y5-~B$w%vVWODU z1~d8_0_ye=(vl6dWT&hqZ?c43*K!iU3&L*^INBp}GLEDO#2~YbOq?RrAL5fA(IT>#H@(_lhw1_Yh1D73(wN60O4s}IT3#i$xC|AJCG+-G) zSmvxj@{TRSVBav}WkhB!%qkHG!&cnfq=qZbkyYCW#F6!Qa#t9}*8Zk7NpkRCGP>5L zOgr<90yABm`gto8Uq3CDq8-nO)URab3D38%V(gDU!|pS?hUYatLB z)&jSMwy;pc^BEr_fS*u>kt9whb|mv-w4&;NNaI64dc=s={KEO+F`Ec>uaG)^#Ok}2mJZ^?kesE zO5s^=yOZWX@ElLwl0orx74=oge)z;o7SP4Hu;zt%umV^Q2f;+u7v|Acm%Y&Kh~8H^ zPPAPZv*DnQ7hoMhi}ip{v{*Y;{dcq$YoP602GVCcru|WTwRbzx3Fw8#9Q1+&Z3!{W_h`{a9_XGqm>CJ6&R1@J13r6u%sMltReyzB17VOkE-%}9G zChz)**%jCt?#ZD`?j@RBV7Ygi9^b#->fce5vxi%LDz&CbvOhHk^p417itNuCoayY@&71-{d<`nU-uABJ`8zBQ%`tc* z*U3Ve>d8Nh5(fI}2hNXdC5UUSJAZZ%UFUn*msbQnjc^+N*%je5tN0$5ZmL7z=EMw`6EZPe7U0T3p2w$8 z8p2pV_if&7qJMr!^OqK8lBd??%1fz_%%ccjUD3!-`L<2}6$wSI2edCdU{TILyx;@C z9$=rjfpQqGL_M+wqKF%w^ivGFKaq79l_y0+*4?+Fx()ZbTW`P>*F0_M)`^8;@i#c8 z$9@^amh~o~7LyXqtIjErl&E+XH8W9+Cj0B1Al074*tV+(+hWD~#nk1|8T z=O#6nbF=VpVPWvoWF>g1@8`Q^FVp`uM-(B!G zdSQ0)KpGnMo76a|Vm0KY)N}LqD>;P1b&p%wXNs7AcIt;wRRO>oF(9E51vX_PQs;AE>4(i>TMlFpfD~-uhzeybUq@_IsF&W&en6mSj)iC#n@Vz zsyu?8%gjIoB!_Y-X^N$;67}m9#C6bhM5EFlNpvjMn=XF3rB2$Zmk_=g&WU`d#7sM0 zptogcPQl`g&`oAW&Fjp|)a1ni>=pfXfvqQ~pfJz0FEpy4FgG;9j!G+vRO<^+u=s3o zx&Yxj=8Dggc|wLr=9NCi2j;8xanrBpqeeGstJsP}%}Mkvd}u-!aTD29!(oAW+H(na z8SHdWOM0tNTgw8fuy47e4=(u#OJ13De z{Aa~76N&<70yMvnr&BJ)4;6a>UMkJ73#WCn8Z_!c90XNY5AJOg5U?$Lf)dhSa~>Kd zG9P&(zZLd)r&=F^iD&lY=AHWHA#T=~n}4j9}Av=7Q)D^3x-R^1ofR}wQuhxEf8>TDjSZ|Rn9zUD6;Jy$y3PUBYb9PU>K z)gymndnL3h3vJvjG#X;^GA){aTU=4}g`WiVg&XZqo4N4gu)a`;R+)hiz5J~xCt*g= zEMH8ev^rzb9+0iR_aT~wnVWu+cO!P;78qfoEx&|FC;xC#uGJPCZCMJ0A#@D^p- z5L=c(j5@pQpsWPMx#p5tGdX}|Oi4SoAP>tg^Y;Whnz217bMO!L9l{erh|J!yJdReq zD;%ax0vthXXh!gx;(Bzv;HA(_|8Zl`Ud0>p#xJBXaCq0qR&(B95GJSmwFhU0jp8ln zmn;=HxW`tdbwgeB64;aXhbLL1_Fou)HGm}e0DE-2r%R(&dkgEvXw<&dHRnAvYQH!= zNu&0?=X*4g8Cb|lgNGK$O)J!xHgU=>>nKrozxt(Iqu$T7SL`V8|BK>s@1;5(YgZ&q zbQlS-x8`yq_BPJeVy}dHb0hI?b8Ot=;18>>g;|Vs;#1m*KkP5yU#906g)QKV3?y06 z)k;u%`5foVfREt^(0Jroo_MQF`C*0fo7gGuMlvE|@6rcBtx&>s zvqisK3xzC~n?<9Hf>+!e_S+w`f9gmg=xbW?F2`4zy;;<}=hDgA0@j{q==QzuA9*$W zc1qd~qx*FfzXXmX-vc^qm^u_e8yyvt7=i5RqYPB%NS#!(5T{Si-WJgzXVeIed3)$< z-OloTwto%F&OGB?m*QBV&+Mseb;`B&6Lx3K=vpW7BW%&Bgr<#RnxnG=nIAiI>1L~V z1N$JUWhK(G!i;*~DjEeWEO-H@NiLn3dh%xo3~#MB5{z$^(QL&#G)zC1>4fOuu@TN= znfkFm@|aHkgl&M1CB5%mAt~{*7Ui`!BB9(03bVYCBQyZV9CJK2Rmkz^jl3xreH-ME z@~!bkg!i_|>QtEFjcnEBw-zkO^hU&5DjIZe=5IEgjD3J@B zxL_BK+N&6e1u{NjFTPzXJ?H-xB||(;M5%Lclic$<8i~~b_4Q$*kyx#KQn*2V?`v8k zaRFan8ZH`%vf++rT0s5yEYfo&H)f)|8<-nekWPE9Io9%u?oWg0E^FyyXdceWqUGFv z(nyx>R-TFKg;k+;>9wPT-6+gOC1RH~5|XjT zzjefCl&OoQ0@sV(GaNi_Ly4#>LmOlFWCy?zgUZu-v=S>t44&xl2CAR07p!)l#)tk) zH-t=_skFFpX?tJ%F7^SUEtvCxgzI}$`Be;D8EC3bc&P;$0d?d?SqWk(=!VqH9o-$N zd0Jehf3<^o%Lt80(D`e6()qab!3$rxv|B|&S~P-!HI-@a0ROg=F78pQyBCYo|8CAG z4yDI*|B+poWf8W$a%;HbBJabWFcjW(RTGYfb@Vwt!izIf7G#&Nhte2>XXfikLJ`{b zo$4>&)--IFDAYeLlCj*S4}}7@B=Kt@?E!V+^N37C1PUOrCDdp82y>+Yo~Ty4FrI}O zWRbJer?F9>McA|;Mo=@f@3o$QT38`ej9El{(s7hpFQP(%kMEZ0-fyKMBaQGiikfs1 zTF+gw4q)3#)!=6k&78^iR{xRtPLh^?A^V@xUAs33kGc!O(w*?_r7|IWy2uw;4n^%5 z3jtE7m7#cVR-BwmA{&BIr3;)Obc(wFTY9`!OQE;-qOmzi-DxhZl1tC{R1;0&5&>)k@-}IFGE6@|p_ycadNR90Z>Tq6sy?9J^A; z*?Y&;O?N=fIzoOugNJUD%62hR1r4Dqm%QaAZou^;JmgUi%Vuj4ddSZgz(508 zjmJOzD86CjUH%4pEF0Edlxt1R6>m*e@ z3%lHWpU@e05t%6^#r+ljOLeCu;t!F{kW)UMSr_rwk4m`@tic!P$%Tu9UJ8U=5b|pS z%zSYha=$k+i_NoiI^@M0fC4%$ByjlKd|p=oYN$1y_K?4edK3$!(RyYgE@OfWs9*d_ zD?EK|vLFV?(KtN|VGc%%FsB^EUk3*i;3#gE1vliU+!vLeXwP1g-67Gpd=1p>f{Tbp zaUyipE;Z}14`YW5ho=xub^36vf(Xuy7B{fpdGGV`1i2aQ-9Yo2{8}!!FkE?n1IAH! zc&qQG{#a;#S7@p(5Im=VQcDOrZWkXyN+cc-*2V5{(Pm)u2|C>+kx6J)kPdGJa{O(%3{!ARC&o|qog)ocZzdBT(nq&y2Z7$JzR1^31Yd0c;`nU1 zEMGgg=%d?q1?uI6!hLXQ)@_HIAryPKeO|GM+%;6-pG zgE=o-X;p5(;@1wY>2J!K{KN>JnHdBkY;D( z*rg5v3DfMV*0i*}%dqr!Dc_M}8v^Q#8IByQx&KsN!1*UEe0L{@Z0~yTwVs7%MBO6d zxBy5~js@4KUio|wehwg~_psR=?jC7Bhco|{+cbY4_jLH7j98qd#k|p6{kj-EB5j}%5g^R)-n?D$)##>UPzVMK~_4o%QZ8fbI80@VC=UhXVTuTH0W z;sqLC+-xiHpNdygTI2Jo3#A@^2N9oAU}`He)wplNQyZS43HlHrNQ{ItGzn~coxRgI zCpk)@isx|duruvR=m7@i5s<&rRpV<5ozXMM4eoLRUA0fvB|Y(yheBWPSyD5K2I#8m zHPFR2)C>eVGE_o3R8lcQ9UuHYhK7vMKCkIOUdkxkk{3(bNzpjWH9NVN%0alBcpSPO z4l2w~5`GN-!-d`Sum8N3fhp@0zmC2@E{T;oIkwOv7TZ6Y$AOStLVHB}B0&=-o_OZE z=u%ndQV@k$Qk_tjPKwDAb;0I7DM!-!N_N(c`!ii8@uN%adj(Qvm2D8&y=NdZfvHzr zGqAUETjSRSM7ELB@cqHU3~od=aKKJo>{H!)@kMVJLtzeJuhKm6=+}`gYRUk$HZl98 z3SoIcE!GHuQhbdHa-r5cY%+s8_5{u9_XW*bMYGaghchl)B_TN@Ic!Ev8YT;q23*i7z}G}H4V{9|5V9dhA!MjDidS3NlY}Sq?I-c6 z+u}Ers(6hzGE!_Q{>G(cdl(Y&xQ;WhPJ%DovhO4I7!6!Q$GeBDd6@^DDe1#MLEjr! zxh6Ee`t{IQyAl`g25SJTt5>iuryi&;SyiXbY%QR$BX*oCt*_iLLPK$3ac9cOOGP-z z(%4cs0IWHOw)-4I3A+*lnW_SE6KJDG{mz+B~kkot_!h?&E6rk^S6>=0ef#3ha z?UTzB|HBgr=%w$e?y5FX4SQur#1^{QSS7@-@3txI0VH(Px=+-t>Zg}*7VK8b?$pwX zc0J0PlGw<|+Y*-0sFPH|Io)K_uEXbIg9x2YB{b{nz#qtW_#2u<7|Z@VWE7Wdm zgL+vr$&HNF3+c^JubkcO9mywzJ|D&>>EA^8X4i>28>3g0WR|`L^~!WP-_c+Y?^VnE zEo+5f&&V=@sF6a=iQII8BlyO{tlSw{`TOj82>#^F(c(R`fKP>Mvu8Z`M=J#IL%ZHuFScJ$<^O=X%Q4>nSU~p4ROCg7tL8NWGp` zz-`0R==HR<@C56rHMiSb_gYUki}V^_PjjSMERc0P)N4J_LbIL{joc%85{f_E{T+$H z6XjtGCL&-p*7vKSwKes;pn}F>QE0ZW|j=E#s^kojn{5 zo{%tB@zau0cxzNb5!a&95@Ggfjx@;!Q*g}iegy^dv&%OS?8U^@bbmh{4u%6G|1ewH zht@Ip!dQEu6K50mWntEmEMVwCHrhniGT6`XP)TvJF`#x_m9T=P+M~YkJ+<;4nD1LQ zpeF%89Q=Cu2MmR2QcZgznonUCty-BD7pl>d=G%b`kjLURx*2uD6H)(it9W_q1$H2l zPwxxY#k?;}I$rmdC%xfXbGvo0g&PH#7JSRL&qe-(Z?Bff-T2>V7ZF@|QMpM(9nrvs zK9YlZ>nGm(DFyfLUvsl|HyF-DAstZTAn}9(%~q?AQN}C0 z=TJ4dh3{pou3d;Th7sd%&zsqrEi{5VMe13yNzfuf&-4aFI9}SBZzLA7Lo_tK$kOpT z_4(ukysP0AMqlyO^!~s5a2A&vOC~y@qkNh!F4mHF@ zQZ8G3E`rD)YWGm_+6V7QfO;5Rwjjr4CZeDRvWh?ahpAAK&Xmw)2!{@aaYR2x!`F_@ zI~R2mPw*JnqZ0M@N7CIc2h_eiFZ4;@;hgj{d3lmT!3==ze-D2=jK2u@oVGpLGhaLF z`U|wE!e452hYo@8>#Kw=b}&HN8Z$NHKde-v?yuLCN@$DUupnWuM#TOthmr=YUcybr zR_3Hy?k3F5)4@*|7m19He+&8S^4+^Lpy{cOTcLgTUOTQ!7~j23KkI&Oimqaj=zwG* zwEv@!Q4!wwAc%E|`s}znd6dnm)|F$ZhxjGum8di500Azv3lI5c<~iL6diCSxX&v}s z2=C!AL5oPtYQPP$bZ8Cy;4EVn?E&AH`W^f6gWF`o_JQvYA7cJBegMz;4tpx>d1rvR zQmgSC)5r&J^@}o`b2H5`3OCywG}jPtdF zRolb%P%}SgBAP;9Gsa)7M7p}{SS)D?iwXfIQNlj!Cx-C^rn7rjaMt)cM3*rTi?eW) zCF-`aFY!!G><1xHEMt$#luq{;F}+`s<1f}he6&Ui29?96q0}mCutK#GBdw|c(ssWa zNVk}LcQcmzM{gI&(61%K{z&*%abwi|Fv1W{(k2%!QBF5-s+R=RrNANWvJFE2&OM>$ zjDWLlTb)wl+ueG#W(fw{TZ9v4ofK^QLRoH7tCr;?o%(+FQr~XE<`h&S!QCekTv-D~ zXP=?7Ex(j;&|y7bCk!#cb79b|E={n1qe}Y}a-=nd8dLbYCPQh(!Lf0vpE%xI?f=8w z+rURvTz&i-5@CVJMhp-IA!~1v6buG2h z>Z4TJVoRS=i$0)ep(enSgcl(qDpsqgJUVHpMx_uG+5h*<+}*vK7Zz>$|NK9H+Z%TG z-kCddX6DS9^YS}G1AjHK+{1#~aA{(%7sQReZ7K&S#e9(?Tz%=KQyVW3)OC(-yNsAk z*{R?mpf)U0U&v0<=7DXa`oSUY#g$a2#TsREe=RREKLq7gz<8OT*wixMCtRorf3T>P znlMv)>DpRCiBc?9>Tzw@o(adywihfEizel~gUvI=RWr7mYu4sWrj~FICKzkCSoQZC zsax*o)Ssn8^}E&WBW3Dk!1bRtB^Xax?S6LaVm19M!(&V_LXS-BybZr4F9bZoeqpSq zvH7jnyEFb;2VejD{QjBC68SxTI{#Lsn&023D|PVuKbGi2i01cWxS5RKA8o8GMfX)9Lv*C8o9-f;A1kFvl~Qj6WV*rUN|dww&lgU+QVdL& z$DZ-YyUVbVjJ9@@+L_aIGZPHFbs&t{(zH96)?1kAWvl9dX7I3LqKey7@VAhx+@KYL z!jneW;P&c&^r~*?8F;@-;Jq$@`h+KEO_|EH)-IDzgyAm!Lw0o5Z#m5&Pr>Z=UMc5g zTnG+vG((il6hC!b0QfM&jaTqhB>sy6w5~p@3t@?~v~QZ&Q!mBXh30fC*0xZF>@eMZ zYMl$gYqurRp_KXC{iZUdrl5Wz!~XmF79TODBZZHa)b z*MFkC;r6MKCH69EC2uUf7SFijPHDqvpI#r|wzQ%7>3s)RGgF=CL+n#;hIACT?8Vd3 z{p;+0k_zg+K{!l}x-W;n{sAQt`cty3FBmX7qb-)SN_GMB5T(W*vtz=>iGM%)6dX5E z5_!YqbfSqip z^b4ntwe)9TweqWpP?C18^>66)hac2a#pU+ zTAp9G@O%pEg8$W`;1`>m1v{GtiicTA3fAe8q5T-Gtwo%D-youbx}ipd1MsNk($vW0 zECL-vDcGAJY-htp2!b@U4oyijBnkOS^Y-Xx=w7%&@*jD|lRGyUxjRD~ss=T)nDoyG z_CLj{NTt>eVOSM6^Q=#G;Q>p37SaFv@>{ zKgc-h38AC-812$COa2(Uzd_$O4VI^LE#)_#`blWgBGcc{q#s+lalFlpOY1o)qebc1 z(P`m1rn#{q2Cl)UULL7!jfBr-mK=#qwxJ(J8)-Vu%(+o_yay*MOMjM*m$HbcFG}Ex+e4+JIKuZww90-ayGX$+@MelIoXloN(SnaTctTO zC@sy|%VIVIEZy|3QB||B`;E;q?=`#2nJtZBEMWWX3CbH!@DEZOfu8UTs_<5-p7$~@ zqu#igCEfc*m*!drwE~OCV0~d=QI-ogn8NZGVau+HZQ*f4Q2~P-4|IiDl&?+tN?^V- zOM1krDf!4II`mYRPS4a4cAGTy_TlMo%fZC(q_PYgUP*^+0+a4wTWLQ$H7bQPxBW{u zAAwGM^FrR0dJH6jzikrn!pCt5bx692!mqL25CKJKXyKvZ31gWa8hSL*IW zdv|1_d}T^q5bNCr6`fLs0Eey+u}afkn)`nj(OmsaMzS0AJ4SMq`W+SWv}Qs){k(o! zzRA;Xi)N^>TsH_*=NAdeafQbXg5uHv|DclLu~w8z9*H-AW??#2L|)KOPUOjI3q(Ha zD6bHXA`QyHm&)*LdBr^vowWb>3qz?Ionu8LJaMot4`%~)jg!hHlspm^#z zC3g4$1fiuL;vaUz)J$!i@9S=shM}ftwcl!$Q0z=!&Ku>l>pas_-+c!kWs1f3S2=)M zujmteX!%O|RI4M%APu^{NBAzEtS;5+G~QUqvF6B|eYc&vJ8%yf7RM3NC_!tbmue9a zH_WgJ_ama|nRyg5@q!Xl7}9l#ZuT`MyrthHVFC*YC6#!$@HMa{sVfwIg1?NN{EGkJ zU7VqGq@#6>L_M<0xlK?b5d>Gci6GEnbo%2c{gGYJ{6r`L@sFmOf+5BWLw}Vm^*U)q zXX`p54l+aG@9{3{x{Qzx4V7Rn9jO@#m-0K4;u0$?lwrq}HidOColgy+3iAAskx+iN z^k1o3FJWE4>Kc`EZ?imkdr-aLF9rV3w#HK{4qLm~rmQJh*46z+Ef*5`$BYUK!BH>u z7^QVbPb0day5V%~fLRmxab*@< z|L05rGdiN8Jbx;Tn1ypl*9K1#K%+iZZ&BCk(*HOecl2;tjWvE5PAZ}fEuBV@-5e~e z8yzu};q>QB^rZ9&`^9V0M?l^jQI58*7CyO(HaPg?a=u2^3%SH+O-HKo3qJ`Z!{J5z zjR&?eL=wlT!r%YI1|>9ckFf!j$JzCy9pdNs)bvvbPLJyszRXek_uw-Nes&ggh`AjX&m`h|6EzTQqFC8kBk*QB$(;fj@LFW|iHd zB}bnfIadynCi4x8K)=A6rtpt5uhDM_U6TzoAURS6%+<_i8 zE*np|(72qb@}2`f5obQ#_jtc&FS*DNu^AZ5BB2QsP@}&8xhOt`3^Qj#2>Uf9^Te8@ zJyA>F!^3p*OoDqBQ~|=%anw zImP$I9H3My(zu7*UFJll|K!UzIrUiWB z$2ZvUi3bH!$3TMOmib1phEH6}<8pwd=ON3W)c*}Fz83Au5bKmGm?3AZ4cM`tZsbPgi^>{u*Vy1N+`@Mvd zuDo93wiA(p&wxyp28p%$22h!kZK%vWV6Khdo>ygXXG(h^JZh!M^VzH;mzJ1IAJ(`C zsI^%iGXK@~^91zL9yPpl;Y7scf`Q9=i~(Ohb!Cf@8-Be#at`22MLfzhJ#q_pTt*I8 z3`S0%FF{}J5hy$0Dn&E?c1-q(>Eewtg>iJqJ7Ueq@TocfkQv;rw1Y}YyR{fIM)<8x zi6W1l4+j4tIv*BeY9_L+g}=6_!;<2oi^@p+r_@Jor3Y)_lmUOA#rVM6#qF@dz7Kk>!nFBA1pq2kCN^I?+7E?bn*XA3ql zdMUEXADn{C1uV542q^-BqL<4(Ws%4c?=b;-E&VGrk%L{^UT+k&!;|`!o`Zui@lO}n z=i$;4HmgrS-Serd&(gnXpsuNwAGKwZ*yKolZY^-D#@TRt;t)|EvS^!FDBwfB@rjXDXEP6>$mUX#b=195B z*&IJZ_!{dPZnD$7wn!krcxsv&ixN8yQ^sk7<9BUB@o*r0?TCYG5K#gE+ zv!c)QxXapNKQ0;x+{%}W1Z;%<&~gFX2rbtF z@U%mr_`07!U27xd%cDRHJu*K+?t0IwcSI9|3JmbPz;`12+ zF`QNo#3e|aJJgEpZAh%z`$o_?zM_2&iB)_(91^RX8KehMiB-PG;YN^H1#ZA(tQ+m=(mYX&HGHnGg10~Mx-&iS1zgB6mQ ze@&X-lV6bG?^eX(`Rqsdt6dxwo24CC3gEuQQ%na;rQrSEg)33#Rv|pEZ8V~AjMJM< zTl1@aQF}&{I`%OVTil+}UgAc3R_FdCV5l_8;vWcLhL5>mp7cNMq9u+E5^Dt^RKLS7rK7 z$)DAP!xBc6scjljisrb)f};IPZa_ZcqMC@!kx-wFS)UObO!Nq`Ci&w!=^hy!nGYuKZs2d97!PR=F3V!Po4bnl*!rDLZ1RY|-qa z;xnobJ6p1rY}yLfYyVBL4M6;=3NxlyuNXKamX+#Or?-HCiAoE3t!x2jBG}toKtp#v z8_g7l1q2UkT2^SeFl&p%eVp+ZutQhM*TR0tKT|@QEr-K1_z7WXs?l@RR>*g$o*m*w zKGy1eLVi$xzLC8`>)*gEtQgBpqqD(lPI@p}KP`XdX?_grxB+#_p33Z-nmZVIL-s(#fB?1WcQoEz9K|Mkgj>WDr$R8TS~L~` zaL86l8UAa$%&t(sB5=I3A0J90g7gE8XZohHkIJ)l*Ey=dRUW@&uz8dH?owd6ZsVZ{ z{v>I-2}g7xy%l6z8Vk$_9kr?Q(){h7;CWb(rZk)>b|n3*aIx0;diBD+*WK4sF;rBM z>!m3+JIHK{5eRb%%jpFOid~wX-NK#bydngLY%B{vyrVYy?o_ z(y52c6MU97hcwiknftl#=vt06>H_-F{JME(mOLVT)0W)~42J0Zb@i}5YlSQsnc#EK z-Hh*_CGjS6GFTip^SgTR8cw3iWiAJ{3`*57fMm1qWazs_WEmIIRd`NI%Lr_SMF~R+ z=_2`h1%e7^`lMgka07F}43@2-4r}bUkk&iK73S(QPI0DLS~ufXDKtg$pXkS@7&>c} zhpnN0&#Rg6i^@IWgcP-?zaB(`GiWafeHhU-{`YZOQtQn)M=oqO`6^X-Q@OKTY7!8r6ylew7og4+Z&rxBa^k) z(i@z8SkPE~p;WUype^q1(_BRJ6Ok%x*W&fh82LCWt}B#XRqvPHvRACF!U z!UowzrjTrqLAa)`!O!1tVU{W^V5?{nXxGnW65Wg1`jw-HUlCnopOUxusbtcZkEfI< z{zP8owlIJRXiY>oGnS|}8_qMM&ug8u=2a<64SKcMu#RS*WB;{!Ocxb|sL2dYqpHdo z%wbK~gE=u7QtFFLab(>_>{Y6M-_@1>}7^`#T$*T7R|HKoa6`F0V5c1!#EcdwKr=P?h z&fhn$e@lMaOG}tBp1R45oy}7(i?7$YRH{aL;ZT}27O-sPr_|~|E!FzXqM;NIw)afbLaH|YC>Jo#miB2f2MH1K^JG8V2Q6&A?aSDl~ zqPKfbaF7(zjX~QW^aY>ZjEA9@-dj#?=hDr>NTnOwHh~41C`w?N2;Y>xQr2t^>{&K_ zg}-R}?khM6`brHaLti14rRmE-Lia4x#qf*#rqXW3F;%RvB0E0u!av1Xk>)>Qd2`D1 zf^YY!fR)qa-caiRK{ppxu9ACD87s`mN$x# z4GZY%kdeO-M-r4RzF6bZUs2~pmPm55-;(M8MNGgr&4BY96vO~4 z6=A001DO>dwCxbE0qxnN<~>P_`n1&{4Y6(c*8s}P1PpBwx1IdgJwN#+oy?uKN@pa_ z^{+be5B*895Pwnq$$-=^j(j}FrE?MoHh0o;3HHjrzZ40ljjbk!6kz3%UXujqp>Q== zX5Ll8S6+wR_s2jSp2~i96_E4yj?Exq5VO@)&H2^-|Kl-ekr-_fPFoW4uL@_@027~D z6QaR*60kYSV$l@woYskov^Sholo9Z*&I;s9y1wt@aBdP)?3+$_la~Jq(!_sZ2YnM6 zZwvqOtTsTO(dv1^Xr$HMSEuMb)-%2d50uQ3C2dqok{9Db6!ty}X1_0dwOidc8AE+x z(3;Y(`hD9BnUd!vmVT{5#6~XenmON3FSdKJV&bRIyDb>VTFX>4mo%5U!vX zS(&jINDnla=L0X!LJWfO7{tq~S*16lj(f{WFJQ(@uf=1YilL#V2S{k@~gi z(Sy>X<=w>I@E{$!T+RxGPZX)E%xxf&z(>-zE4i(t+Wb!bE*p5x)!4h_XR-d4|3>#W zRmOOJx};e+LmEKlyx1d#B=P{s2ntuls3LV4stABCX>D*pS})#+Hf;nBT!>?BwMkQ} zeSb8qS`z8ZTWum;X!#$E5@~%f4+06@Dx*K$!cU2Gdl0$_B#~D|qsk@W;C{8?MTtZ> z5E`mMSt=!X7%tHUn}f&o-=Jvs~2Q3L7~+trcbP3+8bi^?|0Cm za20?#xI}fHVrauYWCu9^=65Z$BR80qhr)0-Aae2ffW|Jn&QD@^QCd|<-obp%hk7=nhhC%D^zwHq2rpakU`%g$f z+NV}0!3dmIZ)<1+&0R_fa3yz|zi-L6Gou@q%XqWvm@BK3+&{%r@jD^EL*2ep4LOMB z*jo>3qU54|+o%4@u@Ag**{F%4Hf|_l(DxIRS4FZ|6sN>bSG#loSUF6gQO^mKtnd4FNOE;DLMI#S29tu>ueWbYbBs>GeDd_T=0z`Yxi zfu|xv+Hy@AeuPA#htuv8L=sZiy(|0eB`4C$8O6LcQ^gvJWf22_Y zeYMx9EBm(8^qG?w@F^mc5Pr^+n2@qs*GxDY&y+864=g=9F9K*cJ$m}x&aSm75@@4? z=)UvosLf66cT9f`>eY5DaW5K3_UabwC)x)A0zO*?fH~o>t8t}>fZoHIkWtn-j6wY| z(*dY|Z)}Dn0P0)UWg%InhsQ-~yz2x|su9U(9h0R3z}pR;<=(d{wpo=D>&NH6)t2k1 zKlW&%w|Rvi{Uh_d{}s*g?~Km=?zE0ba`qByr%zql2(KusBOV+ST#x8=i&n5$h9csI z{5$gt-1GWqTpG^acqlA<76GClZE4|Kjj2lu{|0Km$Pya@1!-xaW%Ba8J)Y;h>w??Z zzDPAv>0PI{FqRyn88`4Y-hIb1{nEEJ^zJwsc*Og*us2We4q2RD#7R3XqZ>^sOMsX> z_1N}PwQqQVe&lWB#Lfh8)}*9Zlhg7iyXTSg9QBH6>C4a1QrvyOhDed-fj|(bPGiF6 z7gmwHLmvaE#6P~}@2+`E)=V90oT^-dp+&XG%=R#E-F?ZRMNJZn`Z0E0?ir8OMIs`p~Pv)OI&w5XqNGJWF{{WzBl0= zy-rvnT+j^U^lr6!NkXAMCoH5p|BG@*i6ZsJ;bws{6UlKmFI*cV znY={WQb&m*^;BXD?pWry8))vAyuPh>J4j7^6>LxO9=-mvg!=j?uPy5|56d5IenOXMdnaiPV&A6*MY>Mx0N=!x?kcLU8=B(HBf z{$R2C0?k(@FR}WC1WJxcUSh#t5=x9sUSfRWjyNuPiHBcIc*j-AON`y_C{d(Nd$Pf~ z8_aXw4K$BWUf#m$=fC@Q%sJOZ@n|3A5>2$xB?5SfVg_iLAsD*CsD9Fgu|i*Cj8pt|Xx!zT_ot zK}{SRk0Lccar6%*uFI*(>l@~5fjKz@nu}U%ptKq@hNC+Z#ac_i75zkfrhGg3yMHmn z(U(B;wB#jjyTnnVNd0e9!dzW2EaC3+HLp8YTBY-Dp!xdbZ#z8RQD30>hU6tm?@cH% zGkJ+;??{*dHzqGpo>*d5@)AD?Cba6N0Ra&Ucg~FERMn3H|tP@)DQ-#!;e3^-ZMx+p7}pzI+`2>G+A~>0^$&f#&Zef7?M6 zP%)|%sjogsSm*B~zHLZiTjoCHC>v=0Ve+?KjE*w)wm|dT_X+Qq zm%K#QpAt&UPhR4~#1f^+OB||Ac!xiEiB7jT=5vuM_(Q_k_P}=>cLU7}lh^lbVu?k` zOAP&ILYwbNUgFxscl;=MiJgLq5Z%j))TWOU=HI;n6cW7~X#R2X`bG-~TeJi#!yv3@ zwcJ9Zde+#ZMQZ8?&0@Bo+`m4EhezBBF zQO*i~Yi|8`r`)P(aNepkw@y3%%gC~I*9Bc4a%K5~u6?%zU7vGZ!{;A!^+1>R4F7(> zl`s78(rUqS?aebHTajqA*8oACY3c9Z2x{vFBxc-kT_1i($*<3|j z6E}#!r^Y5Kpk8$nb`ig7F4MEp;xPH#{zg$PSdd&>FCUX6ZYYW%E zxK6(@=o(KQm+&I-C_as8C5n(K3}({2j73b_1Szvp_BtNZMr>k6(P za)r76$n|%wFS*XRIp~_qRmSyauJ^c3{|^1(TFAAWtCs61S1w~Si)%4gR7s0{NBr-L z$?Z5-aH-l>{>Ky5v}*y-frvYbRri1BLxWb!8vQRiZNYzZWXKBnkEwz^7*`}oRx{=v zB45>>1`1+ZNyl`Pm?x{b#t{-huv#pe;FTuYxFFM!C#(IXvs?YSMMb;S3VzWkQZV=& z!}7xlB>4*&C*4-p^H9t$L7m#LAOX5MN;&hdwvRdThoIqxnEtH1xA2w36hVae&XB(z z(8f`-(#cYZwWz!-gG??~`lITnzs}Q|{Uh3PveO#=XgKXrG3c~64pwJ7e)0RIoj@hV z4N{xMuFb&Q($d%>o++dZ*czII6=0vqX$+F{U0+I$Upt|(@6@P;F46unA)WC5ZqKJo zTKX~WeFhFDG1KEnPfr=q!%_|sU1odPc`5UqLeeZJi39rspg?R)6PCdAZsWqKb#4LwB zWMUdgJ?Hh*CXa~#oB7n=9>wG_kv_gn0E%~OV4_$(_J(wu^0oyDjo4xw3o1bq)}93m z<0g*AyJR#-;zb**v`0(H|AP&6txpAs^=a(J=QZG$NiPIs*HaPFMvuML78*v2@>5E? z*zKbUgkQC6+!dyAfM80qX4Mri5%OoH3oy&hhR-pt*rmmaVjJalRv1HyAU1A|^~5-G zB)WnzWyP2$)|X$#3MEcYgC{UjOfXUB0&B5E@3(2>PZHnEjK*9~80>C!9+@VwCCgHk zAS&bEU<3HELSuP5#t1$Z$u)PV&sY8v2bpFP0^veDK!_RK3o%=6blRUG8odvq1(8=6 z;GUx}yIbTM=A8#OgP{W8pz3cEyL!3=%goP^#j8CHh-I}iRMmRL1qTahvm~ejPP=c( z)AGtmM}QQoe;5~G+n6eeR4}&VD6l`|KcFge1-e^26O0QcxoYGCaO~LDn*>^=44CgU z(#PHVtJ7UNqY_c;j>J{*_8a>5Ywh20vVa5W;+J-6YuDu0VNtYtbQ`I&H3=7I+Cg%o zTL#JDVd)5xd;6~@NG|6+@c_i}F9I;q$P>iJ;aotRn>z|yb4vc=%+enSzr1>|#4%K> zUcSgPvq|LH|kEjg=4ZrTpw>oGn8L7Zxh9UNIJ4@~i?cShiI*`2)dEIU$I5^45e z?{p}7aO{Ha5k{iR0~skIDRQGW>l8~8vukfD!{~f`h?`@pD@~DGt%nsq~{DJU2o$>ojsr)j{y_!lr&|nG^ zx%c({L|kg7IVzjjpySm?ms9Q%NFC7!=CI3zRs-GVThXH-SY=&xkjPh z#0@Z=UeE?`|9siQNYppk?Jog#fJJxH*kMF0?hTb4u*%qp_Nx`%eSiZh?Q{c(L)k%} zy5_GU+ogl6a}iAzrpA7H4ll5iP-cNBTL=zr&oM0#BZ(P5go7h~27rSQ;E2^(qyX?= zt(~}@l46q~Ic8%{&F=>>i`B83D2y)-KqrSM894a8xc`Z4uI}j=v_t+i)=i`be1$yZ z$8fJpwPun$L;Qh$Efmk!+2!qd+$woeEcbliqoy|U*bvHv!4 zvRbhRs+u%{hVz&NaGGq!fK9O0yHh^d=pHeDEFE8{2EIH@T#Eq2U(l5$u~nV&#kug4 zwR~Qs-W()b;70BDFDWp!YfI@iaSo_5&H*n{vE^MY9;du&1755?^;;>$q**B;uD`2; zG48TPhP_YtRH&Ahi64Oln*<=^>g^KYOsRE}Be_baboHroFJ+^pwkiYraRaZF=4@4e zYm`N`TGrG$@e0~XoPxhf^0f|q^|J`BQEcsG2&gXYiX&~nUY~2&Pe$b(b^tV=vc$2C zQHBEV`qT(hpm8r9E>eGnKU>X>Tk^kTefrP9L!g(VhAsETYM3zGD$We-?_yo+KD;>< z5^R7XUCF<|-awuPlIvZDJ08hwa;8YbKN^W^OYv~48JE7TIo0ZP ze5I}sPZlC{cd5sg>$^ubyWB2UX= z7scnN#N4oLizD4y%bNq^$wq<#YT2qUCV3Nik7un3O{*gNW;CXCk0+RhQ@dwCx%7!( zwmv1F@}Z>8%PuwaY#q!-0#5O{O}B} z;eG}se|za58!6E83chpW8TxUlb1O*RHDl9U>IEt1-6tN8_sgs)%p$$AU`HZ@dY(%o zYI~y(={2{DBp6cNua>~0eHM|Pt!3>Wgte?48Y+01gvbkMU&)3KnIe-ul8G3NFJ`imavKy0LkzadVn2d$wYea9SBoOzwdfKpc9 zcp86T|Jr{ng(7&Y)!2bf;_q5s_O7dRfHelhPd%;hU){%0kpGPP*-m3Q8VAD@7qqkBgbi6Z(mT8m-&$n& ze71`j^+U?%9nMXaRLzoclbqtrrS3YRT7J{K-Yo;u-VpII-AaFk34M_@E`cGQqW=2R zAuiGsWS0CrwtCB>t9L@azsmm`_}Apt=_nb7%S2D)ML4~L)=Mx? zO)~4&v3*y&CU02oHxKUs*1O*Q&;G>ZLsuXriPGvV!*p0Eq{~r%u|so z<#ms(f(+6(=>|xLKcd6dz-YtCV~PMhBK(dm^ioO&7)H)t@QjE>GBMk)%FV(9`GqY4 zwE9#q9SRSGE@?a~|Me)lGFzB1T9)(w)(_OYp^3b+5dgG@w}%$pFR&TB4)J>hc$7pu+X5 zh74vJNm1?epLBQ~N%CNgR@wgC8aA=qH_#bvD3%$A+Nf%Z9Fxh?&0#oey7C++e!)b5 zwVF{|N$l*HVe#X~n!BAdM(a058~w&Xqu(In2HdEk$0X|MAk6z;B5|cksB0D(fdKCn z4YzuAsL^9=l_^mCm`s74;H_0ia&0S>2P+G|V$CfM{78Qj@3!D9Rdklhdz*s zuWEZSld+j0+Ql=C=dvnoJZ zDQRT12k>uZx_WYms8dMyyB}39+Gus{a8ai;NvsN*%FrzIN?)$w_&h6}UZ7FAP&6tZ z9=GcA=V$n{0dGWGW~)=ST+~9HGL0r6)*m34Oq41ziI^?@7#87Ve)m+-tL*jZvB^n6 zztTy=4+xTC7Ebxa@Tu7^CRMI5Utk~fN9|cmKrE(14!G0n8GgckoIv0X8OZrj&o^!2 zNVndcZh;$IkYg>*M#pLbElS6e*7dz64&zr7SmhR`GR*1@OeG-}bN^d(jXTr^g16vW zJs?ir;k-REV8i!1iug=cGxPiG0@0yD0%A9Ze zv^$If9P)qJO^Z1kp)X8#~zmX3cQ`GnAZ99X}WLp^hJ<2ViIb$O#94 zwS!$_(g3+@$D#c}lh;Cl%zQV@75mAjA|t2^ArylO3zO`5g7YWyQ7bbwO0qgiLU_UL zmegZy3M}N-VJLbBUeu>QY?p@5r2C0@wjBU2Z8-mgGh8?w2sD1L(^=-lK9>nf5NJ zjQ3mDxyju(HMbfiKZ*iDw~V|W0gs&>tTdX``25I1H08jh%JFk=s1q`KuINxCa)`5V zvHI4TV&Ag`Qs?v*6ka(0DD1__Fd@Dl+;{>I|+I&Qd zdE&lsdt1H<5q zYzK7<;Z4MQl=bL;b$gxh!`SGMqh+t&iY;f-P-_Ms*MPAfDqK4ZzO#<(l^X9bBXyrn zYKf_5)`scfvbRHJ^;WG+0zCl&U%D57I}}b^!HW?qYLS=8Z?p)3o#*t9tMfJow{koG z^Ld#qwd#7yWl|SzjSOF_Z7x0u5G<<-L{b)Zc{ZhT+OEc#*1K{n@Nbycw`Fl-I_7Cu zxp!lJzqO(g`RKUYODf8}`QCleg9MUcVZFLk+JzEw)`q3ic7;YtN=(zn3HhIUDrO_) z1oxEoK&rG)*bFAhyxlJP;vZ+8w3x#&@$@1d75j`Nxa`w%uXu%0G>g^4(B3$`(Pz!# z2)s9UHwRuhe-vea?=fY%m@CtIN9K>@Jb?7Hb!u^B{vbJ= zVrw|YR2=Ndn2?Ftem|Q93vY<1Q+G3`8RItzz0p}!?3;E9L79MY4}_>ul=b8voPSfg z|NQ)GGyLb+wX!JdbwS{8tn%+<;k6KGKqnYHnA85((blPdhf$ zcs*ijQ29%MsA*1JSWJ?Q;a1RvQNZQDI({_DeOCk$ktolAWg;)vsk+xWA|QCfkv5$T zXz~yFlBc=P)AIFZsiL%V<6n413MMQYq<^!-C`qDb0J0<@faY|=%ga12KfnP9yp89R zf?~fhw+0T9uMnhhAZR?#O>hgDO=i7g0N@A8c50mctub(?*&;cZ)r*et?xjK3Iv@}Fuok4D7e{Dzu=!5loLmF=**LpBRnlL#- zl$uLMkDx#L~D^+Hfc$aEU6;NlCnef*n-+nr=&(Cj-4;E z)xf{&NnlPErNZOOnqd}8Z_2b502++*!MMTXwQR_Ura~mgWsm9xPx<>P_Aj32wrhb_ zOk63EwQKO7nDcFQ?fvF}!I^dvijAfaK(QdGEOHy#gyv>c&d3Z+>UYAkhxEcR0puVU zm1#Kan9&kYivH-Riw6X{8gapM}Qr_Z?itEOdzM zs1rDRm|bAHg{uu7R2q^nq%#oNiL=Q4lmG(pily;E83t1_mK?CPK2Wwo13Yga@`N)L z(7MAKFppu$XB{0b$nFFSNGcPyPD!1#idUl+J%5OUpMlOC&dY{j1NRoO2L z5)MkzwJ1gm{#zBdA>{egpE^g`f`;e|=_-XeY!kr8A~!Eh(>VkNNljTVWK&ako@8*- zx!LH`D+-O4y!um+)~w<8qa!rAxD51VpxSMc3>e&2pTR%%sYA#2w2?KeoJM`EtYN2a z(T>sPU1GI3P1>z-^2KlM;{QXYb#q9_pPY`qLxXV|nC3?8w)3-0OVtB}o|Erm0OA(b z%rw(fp~4n9+Gwc6m`k0f;!n`P+9Xhhm~cKit{%IG>D)}_N}-LWtGv44lVb)-(#}hz zp;A@Z8`9nkWaZmTYw`=y{ny7ETy}s4Grf32$c`}&#%{BsqJU|;3}RRVakoGoHMrY}zA~QR8u~%LPMtAgha5;XdadWV zaoOQ1gYWAX8=h zeVkO$Td7eE^m&KXtoAn@Lz!U1ONP^5GOd>cWa9F;hdj>E?KDdRU7P*aoKj*m_blST zS*K=P&KXJE6iIZV(~9}jd82VvWM)pvv6BtLU07TMK{lU&J2T&njIckguYs_vD zcr=7J`4WF_%RKsq4L!|_a*Hs!xK#U27{_Sy;$AQpCTGTHmsp*QBpf3LbH)*%R%bQ*fbFB zwNa7hz05RG>W1hoy`N-@R^m-9SQV1(>Y$pSWJqj}s3x5>`qowA5Y;3KK~M0o?Au;3 zK;hXomYl1ly@c=2Mr^a1(On1}%^rD%Of`C=YI8#Y6~A-qOhB;-uZPQLE%;a<}nH`pI}k=H;+8c**iZmW6IU zHQ=-EoPZ9RK6@(qG4^bj#=XE6^#wyrY80D?BeB8qza{7e-D(wyI|N+2P)z|-8(-5y zvdKO458Z}4d0MLl4;roD0S#mB4vmbxBqjpu{aK)<;`=jA3Qv1mj^ubOSYBohmbGJ{ z!a9q|JgpvO1^Odz`_?w(e~XU)vliTVstw)W=B{KRDIr?Mu)@b@n{ajqRRu z(t#%lWHFuw;led)5x4ml#7}Y%@NV)=@XO(eX{naWe~LBTjrh6;;3SmBM!SyE$$+|w zC!|12&!rTpIi=kmejsat{ILGV{8iflP!ngjhj6kBl&ywuRM`-UI7jiHnNFoZxvjLp z7wf}?ZyVE_24h6c1^==!2QMx*oGX*J4ySr1-5T}$TbGcOP*uIjKmIyFj|+y%#F3K= z^-Ja9J+gC3F*)juq2Lf-&)84WRZ2 zhRcnl0rh7VM~0~x%b;bQ$jfiYo^KphcZLc#fM{J-7xHgFt0=Phas1A#CS#^*l^Fb0 z)M>(Jy*nk3Mvs{J(tn#N(8>x(0rAS!AbdCl_|z-kdsWoxh|0M@IgZUa>?-#JXGn|i z04>~#!-V>43U}HA~7jH+d(nwWms7n~iHNDdKzdh;Fb-6vpx9oosW4eb;VI z>0IM&#`vsL-+K(%^sRnc;{b`nZe^yyB zjo)#ps`UzFrt6McFBCVvKcV$AxL2#)kEBwS`{oCcaK(Y>s6O$!ESyIW<*Y8aX5)1u za`9l5*8H)Cmh?su+j`BA4AO9+=a3%1$4F~o8b#mWU%{2_esa0HN z)l8R$^n||-v;5%hZ3t@RuJhrL!`}D*hKoCCX)QsM3SurBF*VsS>fj+WFoVk-jFs4ZZH|! z_$yVZ@|BdxYJ}dn*oeFt zq5fv~3Qb5W?Fu9=yEKzdbiMVSU=hWq>Rqg15+94yS$o-e2|Q@>RQv+!2}x(IyYU~?Kj&Hp5D{8;HlOH(fI=tk`4KddAm;=Vpb|9zqhzZz{dhy0Tq(Ph`#2av=Zg zX_?il#ocJ8@EUP9+7Pu8n74T3Eok+#aDxkY*P(k~lkZ=JlWN&YUansqzAEjnS+tD? zM21)5OfFUbQmUTzgy82(zQyyz2wS)oM-oh~)E8Npo?9Kc3_I6U%(mTC-3`64CgOw* z{A}Xs%^~P`3yq+YmZ1KP#}Hv4iR;Yg2Fc^Lp?sakDSVI11eTSL`mO6 zx51;%$?BuC3nuD-^?Ew_`n#)qNBz6II_lrtrvvIgUA>hbZ~qUS_21GF_4ikc9rb&h z^>=Eoe$InJ(O?v36z@WsUo4@Gj85C2_|IqII(a1Fbp{_qNLSo*_;KK6$pXWJio z=hz=ELIJ3sS@p>moarh4_?h-E??;Q@L(GW2b@Ms)hhGxBtbe%|w|D*FUpfYa;)A0V z79fD?TNifz($t(1efy$ldtPd=U;141!=Iubf|%=c@yDaTJRJQHihd}Mepnd&a3zNY zUFvoYWBS95(OX5)4;LZ_=v$}twm+1B&!m6xoMC^s!()FqD_ZK2UiL4KM{hkGeZ^5_ z_hN0do-W8%y28Ka*&ljk*dNwhfKa+B==ufMlU%F0p5c0tYYW#-uGhHU;rfWHiR&m= zr>BCh?p&E%XK@YW8p1V_YaG`#Tt!?ra^24L1FnT!L&hUHJsAx#)Rme zomX{}%uulldN5~5wA=`vDlF}V5mj#397V79o1Ob7wZpG5$P<^v(_Nqgr=>N-E;*Fu)HgCi5$U;Lv)OD(<4KtPFL0QPhwlVctUhr zWTSo6wug2AeKMuR9Yddxz^@uXqdofkZu&Q%&oe(d3HtQ#wm~1qe!=#G4Zfe*eY#>+ zZ&GKBh;#5i$+0-P1Fbx*^$yWmo^#H}Cr)}kt}0HXH|i{_Chzbl|7tDTW$S6V647qX ziD%?05nTERMCq(m8X@9-5hL0b?}o}dZSgK~R<86vrf207t!8CpZa+!7=v|E$b;g#H z7=Um=!T>-oT$ISJif=3^2?%Nb4#Eo}3;`0m)WB6yM$+x3yee(|gq097As&!;Bt`Ok z>NmT4xr|dmjF}kwrtl}~(JU$l{0_kvZjUKtlTelLPFNF;1nMQKOyExT`g6=L+asYp zdFNd9$GrG#8zblM=xiJ2X+7J%cKrj@WJmp4`yQ=-Pmd0$|9sUrEZ+VlGS{N@&+CZ# z2Pw-@{{UzGJ=?4QzJsC_h;I=LrtvaGSIqe-cFaQdwPt6e9wE>+REGX|Lul5cfiE)_ z^p1ORMUPvZi@K$R(|(24w=VCk++Bg{)ar AYPK$5%`gJ!0#$%2soJB{yklA-Uiz zk6L?4A6H}qTD66TnNpsRccr@G)IKPESGq_I?OoUEy!GT%y&%ytNbce_jTgwDL2W(h zmnTtCd)FCtv7F8dIHl#k>8ZGf)4Nr+$|!DOAqz7-_rD?S+pX?he@qAO)$x^SzgiAv zJ(T;qAWD$PBJfwO{7@h`)g9HrbYR!97jdrR(@q04&HJ@ zmzt1fmENCm&;OEYEbLub>{Ao(q&0vC3{{(Ec7i*t)&7sg;sCiW*Sj|A0J+kqr5VC*vvCJAqJ04(fNl0OVYaPg{ZYg zwM6^!pBz4x`SZ)iRJN^j^<+%MrIUtN`ocPykdIBGQXNY<1&8PeOm5;fAG*qRQpB3Wf!KAWp5E9 zDt7KCcfoMmIVRg~Z~d<{?AC1yOo{T>@f`{B*C)R^0jtyU*QO&aI9x}`U+b<**zfv9 z<*$BUU;es4dU0a;VuHM_&7JN9^4ERzJ*isa>Cp+>o6$#ffc*8ywF&h3cjVKqE0WS@ zpuFwt(&tk*%QBhT=AryH=yUS>V-IBwj_)r6I5o!hm!9qp*uT#whE|CMz9d^q_V%%7C>lbAo(j%qc3 z9Ouc4YZLg{0BLD^qMPPt7oFNWQDRHvkMGnZ)VKSwWc3xEsJ<-lG7{=ra-#Z>D|4cv zWw!cu?-mX1==1M29X3Dy@MzNcQFHY-m><=UASr*j__9{>BXF<-)=#FiIDY=kj;-%a`k^m(uUNzkXqh&Jfsv_EhbLtFwv0(_vOxZ>L;h_W@ISt~_* z@&)z>5r~(IuoSaD{A(f&E)x60C<$iF&V38p zPg^F42jxW$6NIrpU^6Pp;MIZZ^zi)b4TEVKAVlNqtj*Q?(^Bg&LqvxEOah5dl{dsK z5f{pt&{!e}Ex-~nKL<<12&683NECB~M?H4INznDV;ZeHARNeYREBQ#%m&h2=Pa*Q+ z+>L6A1IJp_KkaI#eldYw^Qh5I&CjXzt`YKA92QD@*M#SejOhdJI)Od_85_XJ=|0tY zxe$7dRtR7!ZBHREKwcXc1EM;rmHx*?8!&4%)LU9GIQI>RC90~tN|Y4dRa1%F7%p)d zLnE9h<`06XYTEFVpy9l{C=HG7N(iXwck=RqTiult-(Mr2(#`1k^RoyXlsJM`_5#QL z@o`lGe|{IQ#uM)!S6teHEz@3yK0}bAIzpdO9BW9M`ixA`XPiS*+SO-hWk#0jk=Vb; z!zbvUC^b}gMC<-J==Il^G`;fnaLDZoGr&sYQ-6?JGsM^z)8eASegC*YJWGp=P)9C{ z)%rEZ*Q2a+;^R92XTjL`_B`Is_<9!DQqj!w!%S1hE zydklw9}QKE6n)ZUoWsQzQd|i)i3?t6MV9=n7|UNVu?&ctSfZ|!VJWG$kI{P>qC!zN zt_oX>UP=oLqh%MGe-kVFsiHUy zOZ(9GhAM{gAwMiFi-P@(mttYlpi$Bw{jjBe{@ z3}2faDyt-3QDW&I6i?5)`+3HH7S61Y4usQP;k034{7cd+MTiS$@LGFhstrt^9iNN8 zcv#3QO3yd3-IkBK3+FJQf&<#&RZBm^xLNmr=J+{G#&9294LdwvG-wbdV=8u&1^`{%9VZ`Y5O1-{p&Q*9dXXW|7- zve&)&oBGjMPemu`1);;*nYl5Qfa9g(E-|yQvf?tiSs^sjKAho-xAnxjH|-OWK%2Nm z+`myJ5-DH8*z*8uzZHO7~@*jg{+Yv!y(S>qqKURnfj&U&dP zqDN%TUFyAVm%5hfmefobno>F8lG+KP1{E0L!+7uIdmoH?6D`AMDX6ORrO%b2p|~?! zWtHMbPRGkCna-!$G3xw`(%I51L4b`6Z>W&j=&86*XMYXmeqrf#Z0QwS9qE)?J$-6; zxr=ASqbR&wmg!V$xh&quytK%??8v6DMK1T2K%Cnuo z7V|@X*@N>q_z29lX?`bZKF!u`s>RKmSxa+u7aFePT~YbpAum1jT!MVLM2F0t$lm>@ z88JyoS10nY)EBi+4fm&Q!;)t9*8NQ=Zj z=cj_Y9+kI$a;O93jZ@U)j{1i<>p!Rc`a9sfpEHWl?U?=ju?L{aiTC&CM#@q!j&+Ha z*AwWYe=TN^Wct?r107pH)F0sF&r_+YFK$H9@%{4w$N2u{vv$VUG2egnKMC{wr}tC- z#QL~fTF>{dGatLCyL!jl8xffE=zRR_({|eXb?VPl-5vEm>8$_Zj;Q}M^~YZE_K$Ja zKdd9_@1-U?>VFq}oEUxfG<5)ddaK6Fc>9+)>z~&V_4iShqy7QT`g?Xn{aGs4QU6Qt zIq383Cmlea3)GI&VMK%|HB+jhS z^`D_~9reHTj)OkW9_#@6bW%Gq;`EvAtbb}p)PJ_R%Ta&i?~e9=*4P2Tj z{)gME|37@5{?SlmhsmOP@5uA?fqNm{H#<)^452~)iSzWb%_n)Do=!Z_f8sp-N9bp1!)_&k04MIuml_<8!`e|>z?=jlDm|IPFC&%PY~wa(Lb z50*avf8adb{QYloo_;o$=AX=Y`s>K+r>dFV;`_}ff}I{c54`_>9k3syt1r98>;I{< z{-1P2{oT~#j{1i<>p!O>>hG!Y9rf>i-9ewt2ReX0x#}(4a-#Ck51sYj(h>DvtQI@! z_c-hC)DiVxr20DQ|MP1O`uygD4xrCq^%vZJqV&1WS^rh-)$g#Ubd-JZ@B%v4zCA_T z7pKnuPuf$~ozLoz>s$UE|D+3~Gbh%!Opv#IU46@x(v#4)Je}zf5u*B*4$wzEGO)ww z)777pJ_F@#Uza|woD6*)I=v1040jltbmXSk2m}BaGl9gx0@H!DpvJo!r{8_yiG;6# z4iuiY8`$6aKy?=AtdXID_v^82m{kKlc$sy26vOy50ju;2&i8h8botRpV_&PV9sxnS z3Hzo9fZBGPaEn#?Ej{sus5b~34%{F|Z_|&AisE+pma5B^C-q>3s5`xCF`G@@K zHc&jJ^b1|R;PNrn+28<6BF(!Me3eWA8Bx4vLnn&7iBvs1SMh>Q~bxHr~{xN zlLZsB7y|}vTp$b*BcPfY&>9zxVzv901n5-J2-817jsdt%<4Y5y^9TpkzI4XH2Sg1o0b_zF2^DhQJFj%x>EGtyKgh}v*|03ItlKeXI_;c=1q13rgioddLqWEyYHqKF2<@A zZg)r0HTS0pbk+0MfqyH5ZB@&L1nK~eJotZYB_kwR-N1fPzq(97eAfZ-Y2%BXkIBzq zIkIF~tzbAu0dPIf7q}&(R;aLwr~$#Z5XhJCd@z?b$~`j4WtK>8gOV9Hk}#!-KPI8p z2$s-rtMlmpDZRKQO3WMNRwk+F|Fm|b7m!G+a4Sgyi+$?I2wF93t#)tvKqdr87#|$> zJU`Yw%3IaWTfyu2<}aSMA^#oAzjgy11kZGjB>p2&+=s_Q+-M24yFFWY>t3s{%9^!v zoEZ8x3f!(3`=FG6V}9WpPsLluHO|70kbkGT{_k%|3Y&{zaM$vYUgBx9#-~n`UcwP~ z>M#g@ojoMw(qaG31UTLTn7NJOp5Y%Q8P9;r10Vfus@ugRCR98dWFV8o=c<+qRbzb* zmMZ*`R2YD1kehN}ryO2iQ>HRm>U_KoZ!k&nFh{Sq6LQedsWA@Pn!j9rsSMbEoWJ~5 zn%NE>y~!V8CqR_Iw3}MvhYC?nfFEk+Bk^d>;D`S5`?BLUGaq#};+A|EUL6BY9?f`s za9rI!h@k#`0JR9VQhJDF5v5nOH7q6_rAbvf3n;F1iQf0Si%69anVSLIlMz{cb5HI0 zW}|=_L!bTE-oF?_$(I2jHw;oe|6PeTX0!4Hbq3da-3Fo)42kw36uJbIC(!);*4A-> zPyl2iT_O<$N(2rACH!}QF&jq^xtO-*Pe}I+AW&6MT(0 zb4#1C^R|hjYIR5>(u8MZS=xytv_iWxRHRb|teOH@CUUta{aV@Bt3Bw%pR4l_( z4`F`#^_KR7z~0{P%g_q3($`d6!e5s)z8UMen80f)hRF{#6?yVc#kPAUTKe5qSYDZU zm%JhR&Ed3aYk0HN0Uzq~Ov7po%*AovHh?J;Hc3~!xr*(fse#JtC+ZqikVFNaj|Ib&~ovjD|(oQ)=bM`(Q$ zcVEyOkM|WTEDhiVA?@_SLm};&6gIO;yDs7OBwj>n&s4CUv=>pn_MDj4Zw~NvX14Rp zaOpz-Guf;3GoB3X?qr3VDNEd=c8>tP+uRLJ%CNM5NkBiGX=w)&ljDA=o-3qodajx@ zZ^*8O_%fjQT71cFWqVmP@o`yExFU@=liON-r$p!{-=yy5G!nc*U4eX-3LcjV>O9ZA3RP+=glfFcmA|W|Lb~LNlTh9W2`dvxXm?bT zuziC4GpkL4wI)}TP-?|*5i)Ti;V^}Ed2Si=H;HDYveaGQT> zWWDfAy92w(M_)1qOdf~BXlncrX+b~X@Aa;~eLeN*1cGu7v5 zF{vcJMcDF*IsB+!-J&x?wGz;KL{pp(A=|9u%rms*p55}yV-8=E@T^#++)X1}N+f!J zPS<$$(E|@qZoP?cIP6VlR?9$uSzw>{F1|gAP$VGC@w3i{xy&mqfOsl?&K>aIIPh%H zBgMvxFlf#^Y5oiBGmqOpzBruM*>hPXEG9VtWk}wELp~8*zPLfo zTZh<-5n4{0ZKP7^m*dn~Kp^%WX``xI7lmC}`(=cgSO7 zjXd&Ne=Uy;iOXZSJ3`2oR^9T4!2-t5|G;&^Yft{&2`=FwD(28H=@u*mU3Ejh(+NS}uQM*} zYb)bId@=AzkH^qf{b9N{hT@ZH$LE9p_z0 zU+b->fMm`9;_rZbTuOEVgyylN7W9NkR^UHqjm`8Sx~Sf(Q2Otdz@VIQzqCBxstK7~sIy1A_Wy84( z3D?(fBY&3`^Z?$rV!Uj>+P4&3%(?wk(Ja2#hnDB?#)>_qFQK$~!R#FQ<%@futFs>- ztCK_I*ZXtIH%W6`{=Q7wOMk*fVyo!@&Sbs#8b0AK&Y1$59wgZ@zRfz{aS;5-y5Zmp z$eElRleyK_;!He4j})ZS(G*)S*It|;3>UbKyLe-_THRP725zC&tV$~^@^tP#Bjkp) zFzu`UvXi==+QlhWXlJBo;}VPKtls^)78ys`=@IQo3u2=_SBTOQHaK&LC>(?0eR_pJ z5}G}nd7BpRUw`Rea&)RE_*?lmrSzPVOD~QJ#dU83#u?pZAfzDf zRe|PfC_lEJFKiAK3|-1>X|G7cI+O6_NFed^*p(tX>S0Gu@CF{Sqcny51EZsG7OKZ$ z^`~;@I7oVQU&Eau`)l-MhC<7O@lXMMmI~`1!5gpr_l8ARW37+_SmNMVx{s_mh9`Q6 zlQRbS9BRJlSj|miux=X8VCmNy&-?a=>@J2zhU{kkwP%_qIGQhk#cr1;IE+ti&((Zd zXcdqqrQWn$E2%^Jh~${GW;hEnjYo9pDa>2Rp<*9PcGw3Ib<-B1aL_(fjKn&u72akF zvoJ@embyoG(x8l~pzqkSH;0{y|D~Wl5n9V-+ROYNDs(<0qUCM8%(aKUbWbr_JJs<8Eqz0SK4h#jBPs9^Mk+iq{L(VH2;(&*$)1xwVV1xWO5C{1v5e`#?rme zdYMe2O(XfM&b~Vi@~;oJ1WuNXXE^njCLZzktpzX~1`*Fl{qz^+?HMcqIZ;a8>W#V7 zq>n`TNNRE_=2y@1iXwTL&SXfY0IxEEH0tW#0OF{<{6qRQFKU=u0gE&EV}6ODY8?<` zO>ldjs|y?*RN60a^a9|dTZLdua3dd(JTI_+37Uk=l6PPxC67iBB8Ivi(@3c4MqCgl z_c@uW=Q6>P%oI@i^cSpj7^N&BD>t@KY_Wb;6ch$3x%?jY zKz}!4P}WbPjz%{<-z1+TCBhP#RHLbq(q0|`3I4Ha1=M(Gdvvf<0Sxp6e3rB6BS*rTG4KlFLDn={rnCXge4n3gnBc&+0+Af>e^WsR#XCtdRPp>kx^e$V_6*l*vs{bL`D)i`u0hzY+WWp>45oHVUsj*{N zj{37+i=N(3fOuE{TrKuHJejtS; zQM=7Wgf8?5%xgoJ=|>G+{vY1n1U`x~dHkM`Kn93Rz&+5i-ag^CvrnKppzLz#r9TO#u_0VmvtLGuQzOI0@gnpaU}fA!9)_a)#wf(YZ(Fl zhnUQ4x?d=|h?k;EwDMywhnm#~6$Ow_Po6NR=~r8wxY7eMv^EW#;RbT3QLIafnO83) zHH^{>n}NzkPDKWqriZdh)1v2i^Rp_Ir{ydj*J`G`0~^PqO(K7@O5+SMh)B`ev?9OD zoL1<}-zUiY-M_^|p~X)9q$Y)slCeEiAuu%}&VEdWOvzpy{j7feF%|c4vtn64=Be~7 z(gTr@W3Rj;LvQ!>f=9V%&1%cu(>D%MUr4ymgtLW-NsC6_fq zT_|)g^WQ#A>*!iF1$J@bdz1W+nB$m`&B>I_uUFYXXPCqOx+g&iM=o7qp{DmYE55%?t1OrBKxRn>;qaeZ2{ zCVdwMxE~ZzrIdoCquz??wrnNT2lvGkCov@yZWnW0<>EIXo*dZh-s!4!P@XC=#Wne3 zdZ;)9Ckkb|I#to?yb@oXB9dLOx4FT1mFB>&qhG}>i4ST;nW{Ur_IV9Ls#M#pK!VNQ zEwiw^!y~kmN=wtbjkX}+76upWo7Bq9LPj>#W*I64ruoKiloK%Y-iIt<#-{Q)$#as* zP{PeHA43}?Yc?7nB=+6$&2?AKDn70W*viF6LlMuu5JD|Rh2Z@l!!n1^M&FWxUq zG;aN5yUX9|OW`z0 zMuG}YS(jzJt}%0&gZGRi8_RW4SC+EBlj#ay5?o`}&%b%d%#{-1^Dy~6I#owld6Gu` z4s&&uWEx9B_gZCV8k;G}ZwS>Sp#zrYzwYa2&v%}5(&?m!7p8l97S-p!?*BK>(CQd? z;5g0BnTB_H{)BY@>8d$$LjzhJn~K^Uv%ru!5-3Q7HA!hYQKZw&HMj1|KbA}V+PM2IfYrXP?ln>h9gHMP*B;$kp7n6l@ z#G!}gB|9F}BZ;u3P)zBY2jxghipPs)aZ}s=qEmW;m{yD}aM!MrHjYn83MJL0aHQqZ zSivoD^DbVC-fs0nhnf_3jKfs3$S8mG<4sr~^P%$hY01%kj6LJYbEt95zH}sehU4$k zT`{@;!rv!NVhn44pTRUiYjc6!KY{%@am-99!<0@+JZ<+Oq^P9HUNh|7gUGUXqjwK6 zAChp6g@KxXnVsNa+s~M}R~BjAhpcDHEu9X>#g(?qT&Oysb-Bt;R2Tf*Az$4Q_FvT> z88gt58Sg3G+0%%o(Nvp_D%EBrm&LfZQEA|Wr10*Mf1>mw-C{B|N_XavVu zRvJCt{7MqT81;)J{rJobqx)<_k}Eg*x~q(v!;S8)x~^eweW^L{ZkA5DHbOnAl{o9h zswF8T{Zf_vb_8+r<0}$UNT!&V-Xv-pQb_JsnYhtci%Hg;e4SdG{Ef#&IEP5;i6-rJ zhjO(^HoZB&n1+0khIeWY^YAiR zzntiDH6|ChTscYp6J%IQ0Crx%6176AwvEFjV3u|XfuHRkw7i`K3nOO1 z*NEA6$F&eRRKG;ifTqZ@x^qi;O`dWnV)_D>>09j_u9~oZj~RtAq&0=TXd^XpW1S#b zK>g`PPlx??W^(ooZJL)OUE8&3q%p%?{Y5X5qT`w~om%3>ePxJl^+$BS`kpa9B#S9} zJh7B$_2Hz?S(Yj6H^P(2_scSRbT_i`l7pu(gLMj3ZT)#3&1|(D$Qz66^Zt;(Azad6 zXBsN?pKd<->t+;l>J2uvNiwI&^)@Qu|8HkNv9DgFG&D zRuY-5*S?8_#`tD@is!au+cwu$kI)pht<-!D2|>>j;$PvoPTSLjcIbwomzgKqUe=12 z+x*)W$-*Vf*o|<0T$at_S^SBV>YryY$tvF7>Tq6kX4lp!#i$eswM@cGed-q6#92H? zPb%c`1Xm$uaeFmSEbNFg13V6VW&aKfN45AWH*O@;DcN|Nu^AB=7M;}!UUCBlErPh< zRU&wmq_Ng)bvc=eXht4yQiu#SPq+*JwMtp{g~%`0as{EJ6l9A;FHzOL;(wyh#YNPp zBnxPRQA|Te5O^~ZLUWOQm^@Qyi^g0}vy8lbn%V1AXmZ}8aZ$Zimp=6~f zE07d?{+={kgR1yu^95`xb*B{ko!?t_o|KGxwpIcKi2&li-01FDne(Cvw8lQWiv>0h z;PN7Vb@@}%)oQ!k{O2QkC@5UOW=~3n_BqouN)*d-QG>&EeT845~8o%%^^!LAD=hcg$b* zv^uXllRWgac)uIXO`Hg#hJ*MpBpZjS%^sn(o9M96stx?5&ju^3JymJ4WNGH!;RvDD zzp=yN)U-((LqfqlF-EBPBvSsx0n<3#crPQW~8=NH~;o}7A` zgaNyJjCz@WY=tQ3D#m!x!M(trn00=we9Yy~tXS0g14dAAC|snU3#ltl@LuF+8&4}F z>&D>Ed8#J3R9?ovn&2JwnX#=VxGehXJ@y$39(lC1tVR{oMSkVnB)I^m=64H!UpPs}o^6B(&@KGsi{^{x-u0?Af=iKF+7Y@shW~V>DhC)|bn7k9;tsr@( zD|ur=Tl+CvNf+S)D<~LY!Oc*;zcHv@rkyXHM!0t!_X8UK+0GpA0rF6LR4EAhHQn$ht`U&Tsy+s zZknv}Z70oe%A#<}#!yi3lTeR6pkqCL^4E%TnLu%_u<|}JzrPL}hkBPMy^FEc(=%23 zve3^(>8g_h${8Zld@lJkml2jefH+pa<~UXdHVzJ{U-MOS_}uz!b@$?utn;)eyPmMT z2L6P)ta+#<>W%}rTapc!b{ zX)mxT)c%;y9`+EERNp){5#24dPNf-B#~qlEnT-16QBbZJGZ_{?W=b53hcM)GX{NW~ z5Nv4b1MiYvSr$jH`Q6%$rEZw2G=CE69Zy{da4Nc9Pf)Z`TGEFW#71GSrN>5568X}W zuaR}Ti}1oaPsz|d7JnoxH$1+npqiuSwwu%WyL!>D24jED38tSE#6eJ0LGn~w@J?rr z6-9w;a=d+ZlhUQgOUbz1eu3Yih!k~%E+DPd&KEZQ{fD>$DeV_H=^3rwkuQ{)T}NPB zM^a;?Z9_DB|MmE{b!q=?@4XveAhrDh*L@W$!2Y9=37_BmUHr{(w|C-kyAv0oSkrWC z|5F7|$7&il)V=)zY02@8pVoeX{I~*T=2d&lcznK3RN7yj|L_&%&kg-wAf8%wq{2bndcMA+}WWrAKn*VpSwC#rdvY0 zE$dL3cOH%Z&Tl(Zrqdtd%iP_eGRHj~Uq*JiwBOce{58IenEKi;b6G+eNrlpW8Og66 zqfzmQX}`>I&&HRzze8mvCzM&9MZoltPnNuE&FY{=J%DnSXe3?IVs7$AaaKXs_gaVz4>JlUZ#lM~9U=unx331$A= zp)!vplzFN{Wws`idAdVo4kwg(rbA^u`*VD|$zHPqV+ZSe>pE2C*3R+uktKfn zxcz|sDAoq+J5*-!_*j`Tb7(g)2FglX3^V3m2BQpAz8)=XcxVqiEXVtOk`(=)4>H z1h^S^9{3FC+c)Ss54aUr4SWF{*DvUr4lDs)2EGDL$O^j3fZKt80N((E`UhPX0e1rH zfdjxP#|2%N0Cxi$fy2P?0YTRgfgga8*+JK3zyrWmpwsa|*Xh6<;1S?WpvwtC z*BQXoz+=EWK(~QG*O|b4;7`E&z(F7*C+M04+ytxy_5qnE23_X@zX6s2F9TlzC(s^c z!0mu5sZ(-F=Ps%4uHCw)9o6Ii*MFY$p1qFF=-ua-%wzlZ%j$pJfb8Q>7?^Y7ppyol ze9Dla!-k)lJ7Q$ssMAg#J!b3~`Qr-CJgad0*%Kyui;5?mGkMCnCFe~g{qcDW35#&$Fd#x@7zt>GVR-GU3OIw*4;%hf%+vZbTbGj>^2-z3&_OdNaMt8Qt z^4)WW60IogHA_v;S3~GfJdYa0(FK1O$JeFk+-5!q{tH|6b-84w@1{!h6_sOU>0^IL2wwrx;{K-!`Wco=xUo7UQpgU(J3oVXuQr z8zl|+C0~j)!n;4PKh4-cd8`tWGd(oPExt3|OU>JII;n6C{;@bn;Zh)lXYh$cj{-3( zYmb6!@hHgKlVtBJw1W~fCq+Fb6utOj##F;A!~?JWFjPW5$(6Rh3|=R`o`!gs&{4M6 zA8sXYq5{@lf6G6?>rdQJYP_4WsdL!7lgMxQb<2glRldgCzy((kIke@MBDB*bc8dBM?>av0GWYhyJVBL8UNL`t9-)dj9;IsQKck!~ z+EslQJAr8Rf#qL~~J#rlbaD28fY|@y)VED+t#QV)pNQXv(3l0-60etY~ z-sZAWbJJxE#awY=^Ao5_?XR7E$;u?fz0+Wg4g44`sWq3qv77dm(=s#VS6?;BNao!y zosT0KUs2w6`|}#vEUi9pI&O=(VQ($?!&3ea#Dz|-IA7?|*FR9X-{o80n5qa{n_-77%{Z^BY@<|sl-@J1R%1-?&g5!D{P zwD^zBzGUP&yMmt8bVOdDUUrbW@H3H3D&ABKOxw(_extf7mD9XgZ^#ywbm3h!$6=eq z5e_FtYIe>S$u1*3G*hMg6yHbl`_4G{#u{)vRY(PQTxP(VpfY%1PggYggV;*iMwxd# zq}~<9wZiRzW9_ZQPkHG_k0hB#&FGd?F*N$yD`i+oeHhh4-dNJ=)liU4Z0?9 z9mv(c2?tg5dTu=b6lW(qVRwsvzj%&zv-k9Rs$QoK_%!bKU2qk{d93aCt?T3vEEv&(p(g#NEo%frRHbZ zw2N&h>}Tf|W5C&--;-a_11`&D;DEb3@OK?IBZG~9#FZU;w%gw|zhtkc>MxKSzwL-j zGo}pHkxH88<6J)JjUleOXQghBz&40%SF%%FV7`;;&D?EFcN34JTi$_?pM6bxi5=n1 zGC1|_HIg0ir;jmSK1EcHH0{~Qj#&BFw3Ho(Z(o04JN{+;oBY{L{=N8;W;D%nGZg&0 z%gwK@JJe*2gm?&k>p!mIGs;v<`u;&SQ8z~8*!VMPL8D|R6L@%L{d5WwiPWZk27@d= z84R2BVT&9>c(lqOjhKIZ=qm^_TL^P6Y?O(bl6&PD#Z-6Warks^VVZlP=n?0Pa9K~_ zMX2w|!>_#v_Mn89dGgP5vn$@49!j-($*XXxW*B~WE?9LZXwObqW4XEK z!yzu~Tkx;gB($f7K{^w+*`>5wQdAyTyniX}nn=>5@C*eXl@|xaa}EiCEs2kF77DIV zpCfkPGn^z&@u7$B;WzQsEXiOKs%)(qFMfYYuExIHmbiU$YtyyJ+w2Yxhvl<#T+>d3 z3~mX}OfQ{oe1mv};nwwr@>9t+6lUSDU|NG`44Z^;llY<&y=d*?uTX}13*nF9g29J) zuF0QSYChZLho*z-vYuZ&Rrm6+zFlhm?Ra`JEKNWkRILjKmrAKsQnu7nbrCIQrswd; z!*}pYI4pOCAL{R$-rMLsWN7Ay32fMqZJiSsvTAeVgmiU+Je{E&U5vHTq~e)Kd<&_p zv2DoKgI3J@B@|r7ubwKI7DEpUN}-3B%P#{8T|<7*&NBawJ)U1X|G4J+IF(Uezg?Pj ztrXYOjwgNMnVBktLne7guj6-f(s@jNs_GMxgHpXf&0zedekaO`4ihuI-z;{AyMe|bC*c_NfWo; zep0wu`^m$twVxVLbzN+_(CwJqYCFR2akP=RbQiC7+R>S>66F1K97l0>b%$ncU|6Sx z{M#9@p~@|U=O~h3ZV_CD4khCu>>qt_y^IT{u4eA%nwp4M%&rGnA$V37x&x76p4+a% zNv*E)nqf3D@>|Z7Ao7&R?Chr)_eK+8MhTl9npqq8C?fqy(02AQCByu?1U{-a=Hb}7 zDe!SB&)0VU#+-f`tw`vn6cJnyKev~fr-IEv?*=_sk71-sgffw|F8j|2k|J!ACs#E2 zHz2>=BulOB3_BQ5vbet3jdSKI-8jTs@jk9FJ7f48urW0;=)|Yq4Xj3(h+({;k~N`{ zO$d^u=FvPRpSp3$4%PEj>t1HXpu<4UaS<%SC@Zpj*W>-oe0nV25 z{{-dhRqOr<|AE`A5fp?Odc2$T_wQhBq&9WP_qW+ktH*>~J>Ccl1JL}nETKv^@TAP( zX+1(|Fr}T=4#?2yvB$s#%xk>6`G(6FW6Wifz^2krWvzJ|w>0(7(P2dTM8C?$fbD9h zyVR=5t7>(D)QZmT5psv}t!v`Gv30Eah8Ct}1-V;&!e49dJn(g__g_%GKZ1$OD0x9^ z4LnuH&;&v@UCj&L{RD?jg#S~USj?R>RH(uXJdADt3VL zmv%=9vcZJ$WfW1QS5Z#j^n+m=R6I`yCV68D3R{fB%L3CEjrO!eoy9s4YZe*pn8j0QtKff8~v=>F@*^4Gl z#IL1%D$XhRdiCXJRDVqZF-XB)Le~<*h=FgOP)ra8?+e@z49!1Y6vZChl41b4hlDJ5 zDzaq!%W#MW0d$iFH~;K(Uth+5-kX<&X08s;TrGR5R+O6Vd{}{h1+Q&Jg#U!6+e9ca ztkTW%yfzW8F>1{bzj#A)?=_lxyUnx86yn0;$Ur_PCHYkuv>@AOyrR-;c%LzI3(VV? zwZZ6w@95b|YB^gXS{P?b6bU%b)l@?Q@(bzq&!>b^C3s&zKpw2POoENjK4{;;w;%9%fI^}wb+i4&iUu1ld8n~0xKNhO>p3kZe|X) zcPM(QD&%pA$0po(VF_v?wpB;D@kNnXo4mwuj*^FWg_;!BpxCN4uPMR1Fi|APIw&-u zS(T?MSw0e_3D}hgAGPLaDQB~*eu_J@5)FwSNno-CwaEW76Zgc2_mTU?F z=zW$VfFFb#%v>P^5bb?>{3eiedVEL%H+uM}@0+YyaksMu@&>n-j)Y(t4JEau=Bo4g zIm#$bI>1;yDX!FkLGew-B&yr%mRKoAgxddIe0#kmBdTS46-zn0y?Wa1CAzk=QW!{d zZu4<;EuYtY%g$f5jHXFCovE7SV(!rd*MqXt1cOhHugn+S;9D2P-43bS_NZ7v)TB~4 zggFDHBNQzW0s1Fk-8tX81?_<-0~Oi5+$f_x+OPGBvYKOjBHxJX*L3sz@vZi2L4m5o zfz!aaS-%>3R3j~_QN5gobt?GziSZRYv=6?0ecbI8QbDahg!zfoV+$FXtqR(*U`y1* z`|^dVpBu0Bh$0QlO*2Qjk<#=$OiCbo46dD?K;)k&nrYq`navxcxUkj6$Q`E|!;;3R z+$n-%Dto?)Qw(?wjBc`9cKN~O@+_kv));3b%#aVgc(}>BGVXT%;P|$h^%V-AlDOLs zofLoj5uA;!;c>VBlO2D1z+JSoC+_x{%{((r>g>7yfknrOh;8ZH;-UYcV$^2WGnxvNOnlw%~cNQ^2u|~~h zaRs|?F%JjBM~%; zh@jDh2pUCLvMaF>Jw%Px7-yNa=TQ(TZiU!=cYTFQa|y2q9`r? z8z(Bu6LuX(u7iLBaIyKnAppMmG4W!jd4Q`Thb`7#)%Rc0(>7x>+n(H)a zHj}5`=$pXu(#+jx01{Z97O4Mqnqqm6@VH7J6(>*Wd6%vlM2lAp6N|J`Y>(QDVtd$F zY&nz1;#+eDzBWMaxS%VoAm|zbOa^`fECrqfHUgglDQ5;<1A()FSAd$cg05YKLDx&; zgRWYj$JzW2>;fL1z&Y^L#Gvanzywmg`27I41AhjNDhj%u05$-h0M{4e(*yLH#JA4j zTfo`CuYlCalm%9f(Q$aNFJaXuc7^%rhQ0XWL&(X=pIQBC~^V*1=_ zj)9M3Vd{YukT@IiPh6vfVBD94-0GaT84@Hz&b8j(`K#<%r7`9I42-bkP%1|SwIBz7 zfbe)0f3Ji~R?5;$nA7(bLwHJ#c!x-;HaI~S97942&;huO5sozd7)Ue|T0B)@euM$p z9s_0V_zRfTa1M0u1hQ4}LN}O?_9N=5wo_weZsa#^XoeNO+piL2p>|?sI{m4|DY9wDY~JgKV}kjZltc6@8o8+ z@?jy*2(#T?46AAQt3CK(QxjX)@LpN34o*YcN7dfSf8>y!l8pf{$v$Lk?wHf!{f?M9k5N z%APdyGek%=>JtNrY#X6Qy;~`JBqRtXRd7>rF{Ao_6&{jE@uSU^AAq_Ofx-?;L;Eh? zzY`*ek+c}cXA<8*g~%3Hu#gJRB_2bSiwJynuMZIh-ACR5+Hj*+8pAX?RhxZ7#7SNC zE4itHIm^;xB&PN74Q^2g3_KjDapJyqLy>LvB_d{4MH1_jiu5i-UR#qYfu4=9yk2DZ zuGLoG{IBO{RD2D36`N##f9~d_NN#dB~Bpd2J_L8GEQo|&t&sWM%)Ta>vC$_M{B&bTyUjyyynz8 zd&E7XM%)T>c;-M?cxnnW?qFPt<0)OP`qWU}UZguX zU&S8wRFzT-9sJW8jG9{BgA6v(>4lT+by|z~I;sox8coIf?m6dl9ci@63HF^J=YK95 zj;Se(05R%UwTLn!uWLL0H(|cb;1?qh8s)z-R9Bhz@JeEE8=IsYq~mKPqPwP)BFyB= zLo@FP&0H3qxgs?4p76{&rcVn6E2L-XpOEC-L;f`9r4t09%_!tLaCe3zcPqJlX;|WC zhk`%jZ(a9|-rI>dp(1MQK*0pcmA9MQ_DO=YLQb7u{_+X42{e%#@>jJ8;5}N$Boql+ z2v^bY5$X3Xvl;zf-CN>xtNJJkZd#>k8CJmsOU*qj)()z3EeLJ(3FQnA#a?_3J{%AlP`S zzT}7I0b67wSUaLmw*2s_hZ8GihkafuE-utZ)kLyG@S?cL&$81`B0n!Z!kaI)->llp zeyxg8(AH~xg}kzEOw)V}{`+*zR9xj!qti6}XsXSggriu!uC&}NUPd36>}8^C7I!k{ zvvc2aErzrzul+nWxhauBdvKDD)4$F*)6Rr&Z1b5S>fIdpyxusgMFc4kBZ%Ff8N48n~e+0JpBBS1Xsd|m3a7yk_sO$H9y_MI7TGIU$*j5D7@tHIKdFCdLSw~ zhPyL_D5?`&OFdO5%8w%3?VP6MLgiF?BzIB?%;|r@e28(GASB+{6B(jp-GS;<|FO1t z*`HqHT|rMX&&hTsSKaZ%=nVOvA(=Aq{$w4#!rX`XNv*kcz)$`2O0)mbtXJ?B1+fj{ zox{Vjj$QILs%`%(_H-aVkTX#a;s$l5@p>MUcO=2EeLd#CSF~Y!MfbzzOCOFPP?PfY zTZb;Z?pZ+$HallWLk>`tfT2|clDUJ(y{r6R8Xrj^NSgKkSODV zTAj(#9Va|vVOsUSdzJ=1Pc}#U=>6`>RL|1hZz_-VUyO(oIa!V*N24uy_nRl~MRe<; zgRFs{olpxjGb)ZnhS#BMS4gN?<+UqLbmBUm7(EOJ;YO&|aO+4FfkRh&g5uwSa>%=8 zKO&vkS`kxLv-6;>kZ(LT)Oj&lkT;CcR!m-7u$fTCKH8(`SnR zr5YbJrTzDb{!4<5C8W4I;Mzu zdEx_7TbJXyH;e`5{g;yWd9zvo`1`9(IB!pbD0uZSN;W5sNFs6c1-tSxS^($v83-7( zqXF#-;dw(}IzyFmN8S zhuZmt`!o+9@(!yX$;Dh9hf9T$zfAF^YAQKp} zh9`t;#gsIq*4$khT9w8FHD1}=50l-X51aJCcDdYXCXF4+l#JqepT1%0!+w3J*M|mI zQj%*UI|j^K3%ijEF4x$$G?>fVi7H)6PASf2n5p+47LOPwseBb~dx0A>U8uQ@30b6L z;30V%{#Y4;S1`x^fpAlt`9>K{tA%#SbI-=xP=V6FO~r>c&2B|Qdj(fV=gU4D?n zJ*q}BvP%Y$sz6~SS5y14(q1cdL`Uoi$_`D^90kSiPrgw9csE>si2pW<*HkR~kfhEz zd*Y&T2P&6!@{f=wm#o|`F7uN$gH5m?zngf)8pN}jRt`%SOPW3s;&nwHRaGaROaBy? zC9)|zHR)f&#S?wIewGJSGa6m>!{z8cnqI=Q^#@)QtJ0R^sgkIFRh5ZvdaUGTn8Y(k z3E?pu$%ri_N|s6vKGhVVaG~7ajH>kxGoJ#YF)w0N+?AzXR&QRGqnz4R`Dx*_)#0>F zWZ94^l$wVhR9>Ndq#e%tHN!{~XBXPcRX0>$A;HVDQgf+sX}Mit63OzrUuXV7-JKXrZuw@syrFRQbazehO(69OT_&Xyyc8EIh^^@*50n^9Pb+RcC&MUPBN5?h27SCH|x?Sw|67EWMNe%xkW;`CCo40jjg zJz}|QdT5oSfu?tRTr$uaZ#(?#`TTCK=+Hslm|+&)Eo{sa6s`bu|KZ+IsBwKmB>F7= z(vs0NgGX(%Y;h-^yy#S{JxdC08m zt;Q2!F$h%wv*&TnPj{HT8HL=gH}_|^J@OVUS0nFKL(#82Zqyjk ztuJmtqWg+lQ+}L)#8g3Il@NV69KpRuQz2}oPKLFUr+KW-J^hv?q_l=^J^V zCYZ*BJZ9dL`;~25&3jFc_TVnh#OlE35>0v;mb6teH4rh9V$3V@5_|BIqew1P9Sk>0 zsB>2Ias}3^H|wN>GU!uyMyDK%V-l=|Gjt-tx-|U)U2$Oyzx;awV_1EAGsY0FAC~+Z z#5@k60F@jivR}u9m_-EkRQ*j_fqYF$o!LStkp=S+gc7-pP!ds5akrVn)h^aFBtrk} zm<4cz{_0o~JrC0RR=fOZzogIAiJjjo-qVyI^UXs4oPkh<0oUKij@5J}|4+|P*s-ch z=xF|WZ>*}ZlJBzE|AhjblsM-8zq8TvG>NNk)XL=Ae0!frRcwrFWq+=c`zlFEul|c) zYMOa7258xMRBztHd$Dty=e`?NoP|@)gn5`3MW2}~->yVxA15jsF^Wf2{P;C*im^1J zbwpxdAu1`ssQKU7JQo32BnftSB1U{@!63KFC~7o&)re?}PTfwSJ(@)WzxzlPY)ZK4 zkLQ!S&Lx^!^(q&lvE=(v!QEF67X?ARIALEzzlc0X>onRjIom+}-3TS_@0>p+(>Fyn zTg-4HX*SJEK`H-w^%uRXtzN7*Q6i(cZNTGK9O0m%spCP<-)Jvedplhs14g<8y8tq8 z39Hq8tV`#AbC7OE3vW`Ncon=mbiIlasJ4S8MuWHaN2Mb|3cgOzYI?D~t;ool_L3}3 zVzD2^%q9alF0P>J-y1Wudc!wPCv}W&PW26x_{?G&D;H0tx7TaaSbriqFbk&Skvhj1 zW2;7@3*Wek)ArCwbdA?J|Hcg8U}@I%yiVoMN~K*(r{fetLoTcnd#&A&zLoSDq2|#e zL~6W^@>0{AkznUcF&naMiwB#lO478qFH!tIK*0_z^x<*ZdbZf?8jlcd-)>)f|FQ9& z@*B7|jSa`x#$|u~p=nWN12W{F!G?{HZ3dukO?kj_5^EuUE@_t26?*)FH7TnvYV?> z=YTho?8n)$p$-jdgIV35g(!YvtY;TVKw#fU^+1<^w;`pjh5?R# z6FIcOmuh}CV1%pgg*i!P|Km7$diKhsOEk}#J#w9W7SFFG-vBnk1@16`pi4-Iairk! zb6S$NlDJUV$cmFyzj^Q$6|lJKR{Drn+BL^S6<#1)R#8~MZf2>9(?^l9{(7l$gQ{|a zs&c(lx!&BGHNrK6DsM9%SFiNt9q{r1RjyB|+jP*|psQR@mA{pmuA<7P&`fpDL^qeZ z*_vr@rxabJ(;sfNN(|3MwWfL_unrZCsrrP@!pP?I%2zO#kt`NQj9~3Zb@_yA=f zL1%w#JN*G-Kea#p(AOcBYb#qIm)IX0r5l7;{zIAe`a?QnrluF;?Cik0PBw}VNqE$) zVcaNVgyXbf+f?)Yu@06yZfXb1YzNEo_OP@Ev!)+=Gy2z(VfbiVp>d05@1e_8AVyNp zZMiJC*xa<`1~vvqx?9`QP(DP`tQvJZ%KE1|_OM=5N00TaI;LAss$);<_Z$nh@FweC z^-HfKxN*-;hb@Q41@iZhwGq>#X8=M+Qyv`b?Hg6y(*v)jEBj?5)yq6pzk#dj7k(B+v)~PBfP1=2)AhFQ z;8?JgU)uf%?_`?WYJPA7!Gx;TUE;adsb(LmM7`!1%d3u=R)IPmYn`T!eXU{Y*x5Q! z9s61R)iKNJt&aVzqtx*@tFt-|u>ONXav+jzT`h=5j&B<&l2F9@$6`em>z~uWlcinN zl`IpQS3VFqp@Z*~(EWC6?z>*UuwSb$9N6{?otFEf{et&d@W^lJwB}v>me`s(RuldU zfyjy0L3JEt{aYPRvOZVG!PXvi>|(vEjwf5&)bSLnMjeM(|5V4J){E*m%z9QGhg(mo zf{(0qQu`Iz}DOusrIRZ>6f^IIGDm^)Ijvs^gi~zt!<9>vN9f=9e#T5ost& z$mQk`77hHO=1Yy++1B4xnF-e4)N!JfLz|;)w*IKDi>wFLvDivezfZCZb$w3zZSmo? znhIDaHyN`t*t%hJhbw3tCI8suvdVsNKN})i(%)oDj4Z)*RxkD8DONXiJlE=^jwRM% z!Y>3O=ULyV<5cSlbu6_$R>x`9`|3E|ngSky$PDXsb$!0IUL9vzFRNpj^}ITkTTgK; z*d}BCQT59O)^hn}yZmye`sG4vi8@|n-K>rmTMO0kXV%r~ILq22Rf$~Eb|WPW$BP&z zvOn5xk0%!DhTF|9kLK-BAok_9Un_$pgTe9(UXeIhW?OF(4ki%!x%Ij_UTUpZ$6r`4 ztK%=N=hg97)>G>EYwIy}yv%w)9WS@;R>unKc6I!Xb*nngv2Ng4@TRoRT=k3Fs!+!( zte>mnmDUC7c$HPEj#pcg)bSdtP#x!5W7Kh;C3#8$k@*&>O*k&FvenUN5tyHAzm=|z z3oW-gUTeA3@j5Glqf;Pqy;ZM{H&~`R-e_UBBak8~zb|$If!zls$_VR0e{p>FM*ry*kmPe!u zXSw~K8nd&F;;iVS{Vzi&t>(v7_QU%l@edC+igTh5XUC71p#A(S3D4&m#Y0*n$VAELB%BeF*za*K5p$AY(o z7=9^di{$J=ITLBrnkr|qP_Vpm_KuvPd2tm4`RQj%hC2}UxO~Gw) z)>Y1y%2^ZQKtV{(zLT@t<*ZK53_1Hq&hC)2cjfF|IeSCS#E;B+RnEe4_L7{vCuh&f z*`0Fsgq+^3=jU(PD!>~1+*AZOyMVf{wV?vb|H&f4Z32`s4w!gc7g_k2yv=d$mq1wYy)Z@*UF z{zo~xO3ogavtP>D6CMBJOulFjh{xyY5AMRTqs0gRBroqGFMm?b8WB4RR>;{ma`tCA zW1;RU5aYV_p`1M}XFKKW8994h&i*22>*P!fR@Q1cdzQ1dn@2{!NOh?;a%al^jreKp z9)^ouflub@3iNHQ0xRW%UOpIzBw3Pfw%|GWB~Sg*$r_@L$(Hz91tKX{KY8MLd7`JB ziAL2DXQqM|4ziJ-CGHpT75p0% zW>>J2{mfXNY0*P3@tL~I3tpDP&s7$)x(ij3v%2X8Yvso&1rlAfZeqbd^ff_O zaBk2wY+lgSupsEV!xwZNdo6J!t_r&D1s(>T0R9530@ecCfWcP>U4CFY;Ncy|00V%N zfK!39fMQ@OP!7xnE(fjwUIjAv<}BdXz*T@Bs06~my}-l36Tn}9Rlr){U%(qcXK+0V z=neD-P6SQ^3IH!q0?Y(v0lx;W0{lQFa2N0g;LpHwz)L_i@EWiKcn_FBJ52{J0)7F^ z0pjfC^wfa1*cuSOz=*JP!O7=ncJ|1e^oR0A>M~ z1M`3&a2Id@_z#eRx}ZDI3pf_Y22KKo1E&GwfC<24U>a}%FdHy{yMf1ne?jLPq3>GY zW%_UnFoS;i0(hJ@eTz0d2n?Vd!odB&)4&J7C)Djm@Mx~TL%F!0VeG;t8>fcpkp6C- z+tI`nUm?6%l#5YiR-(S>zHYX@=ncxWr!SIxmuOR!5r}-3Vn}FV<`QGT5zJh2TOt>t zi#4B`qmY|!+?es-yylnsHQn1%#Kr4_(N{bA(d=mZrvKRX?V0Md@8`d1r+rWFYPauI zlxeShMIRT%FY~A4H?NC>UvYc*-6!2H`ocFT(;j|~H|r6!=w;@1F16=LzDLHd}q@2R^z@y+Z6FryrlVw#!>5zh*c4Rk~P>AF)@;)|B@GH5emti%mt( zJc&qcjlMA`nMc_Mwl?A>VaIE^qr2xcal8FTr518TPN$F1Gb_Ei==*Jjvr_+ymb4zl zKl-Mzm2K(%-%QcE=FR4c%N_D*L-&7BdPTZtc;|My$I<_z&!q`Eu~|$xHV5`5h5Tlr zO-spVE7Omul)2$?OSHyZS!lqwEpxyLQG6qpIrz50PKq6TZ>G!<$;rVtO7Agy1rbkv zoV{XkvP19X?IHLlX-8?$4=8g)1T{Z)NM4LTb9!kSxD^@*7diTTkPY9gj6YcD!~hZ1 zl(*TSJ32W8@Z_)CY0v}Gj)L#7j^XR@52G~8^I~CUXr^g*y)uNL)mPYQLlFJmwl;ql zIBEk`a(g&VcW?|*rp-2`J!e@5N4T7Aj;ejf#o9NE*a&7#v2NnCkoi67MLB`}geg_o zK+UvleM`ds9wo)KN*CJl&RY(BY49^GjBAe#!W;!z#Ie;JtAFcTPK;tMPtlj%TW>Ub{ENhc&}B@>5L2Z+o47kPn~=D$ zrPY$zWScqHRszdX-k6eW?7%`T8x>O)f5b2AB%o&UjxPcq3-341> z!P?~Q3}i-eIO{(6&e&OPG4M-&$hD1|qc3fzzm`ZhNq?=SOnd!>yrRZ0?IVFr*!`9| zQ4gW>7^Fr~mT{E$3o$S+l*S8}rWkM}w{KK%moN9=tKzofZ?SK32PR2rI9&O0c6UOY z`+82FLBowk)hpJUucYDB%MTO{PV!%D6b;6S$2a4D^qK8`{h8bN3`5!O02$Yp=m|8D z(<^;t+s*%RqtpCrX1CM)sZF%HH2<0ZX{Y)1{HgrW5O;9&*ng46S+smc(YR_;!Z%(g zk*&9un*TnG1C>9L?{D<|+B0AgkGPb0RFux9IgyWqqMMM9YE-ARB_FAdsY&dZqo&Ca zdqk;GeMbj2X7CaJV^Lw;wtR|{hP`oH20Q;4UrbiYAAms3|0{ohKDIh{v9!W};SVtU zd#BG*E@{zci7a@Abd|8++bPqYKY&_6DSnduKjbIb3u5$2d}_~&grT3s9)M<(|6*E1 zF%NjgvbLxGk%x0__U@k5qV9?8y&Te3^m->{j>s`DsqaN zFO9FoZz!Dgu$%r*yNxr^ID)8(K!x?ME&VAA6$us=7p{&5?}80&XLU;-BfK5kT_ zePoz`foiC?zZ7a~^4e_v%~prLB10^72cC6GII@#T@I7Rt#+Y2>g$NsXRPwo(G}QG$ zfMPp65vZlZ8$y-R@g-_SvfChTo;h?bB2q2LP;@V|wf3A8m(k0PFhAY>tyBGq zvUaNfqV$SX|0~KIvHEfI6KIqf$f~Yt)BV#I(EGn}uv|a09V~k~SWY?umd)uWwtoB3 z`paoi)J|#-wS_`9(tv-V%n=(<;ir^O?1^Nb)d2P`c!J_uq7}w$LfG-W`b`XB>bAd| z^COWQTa7fZJ#KG`Qeetw|kNmukF6q}5rCctTX0otW;# z4dPk?`k3#}kbd@~h_>BwMfSCmr=*B}pTW<PnBdy zF|HjW&N~i{$9o3I6auviuB2jtFi7Yl{(3g9LZwDwcGGsbaX%fOK(?oqg7x+CYjF-( zUyy+HPwul^Ua0!)K9r@_D6na|HXHnEko2wY>T5&*(u{D&p+z4hk&J_k4voGPqf^~+ zRfM}}!Q^nCf*;8qGv0HJB5F_7$JDpnTzpNGu%Aj1!k+8=(9)tJe6-xW>*^>`?*kj_ zZgEqTJ`L<8OxSO6YLdpPQosIJh;CF9il=IFNj*8 z7DLp;Nl;$4Oa1y^A==+YbQ!O5{Jf5B{M7dIs+x||k@IsW=jXPN9uY%&Nf+t=1f=t9 zqzC=?NLQS%hvqI75?lN7{p$ND(hqlvAzkA9+!oR|T^Vg@0z0^@TX<)zrEkVTNm_cI z`t`qR>A&eIu4+&m($5}_A}#()PD?L$er^ltnk%A6X9?1;gQoDJyXZ}8t$p!)1{W*s zi?@q)ld(@1zQ~v?H9v+Ft!4Io!a1mlE{)wsQH6Ua*G6##EMmM$vYBt>q5u$XfpqH2 zg1Kjs1TN%vn=@Q&5wkNf`ZCyxMeN(nX82P5-CXsaNm^QAzPtBpG;un1ZiF}0kqR&( z?9ASuCi=R~DrAWH_u={tU*T#+!DpIA;v&__6Wk!ZtZR}fm~NE&#n)+mo=#NmD6iD~ zTs)biEB_=Ojt-A3zDYu!OiCBg=7g#GLqQ&p#(a$Z-crENwbL^__9?$1CgFVNr|&

yEj@_4nuP{euh3B8k0$6S&R=5hkf?of-(314Jf)0-8&e{u$vuA{9&}}A zqVF69QA`S|aUWx95epxIz0r6dtPfVb7(obqk2PUx)r(f)O!jT@zgS*&)MFJ6^H&J3 zm+Lw?Jbx*{@%WC>$(v8N%q>jLHGZ!=r3sFEmt=+@%(m_EYXAf^^ zHq=lvVz9M5RWO%2w^zoR>S$?nQr%NzRpbx zc~hQDyXK_!u5hqdaj{+hJx&kzSdI`*X?1s<77~gyw6_;(0+qcJscrq4^3%49%-srU zz14#gq`fC-f3@5!?hhbP5Enc^cBFW~Ve8$u~!$t76-DCPc(`NkSd3 zZkvKzvM$hU4SIYM;#yK$dvUD*hK%ssfgTm-=q(nGEhhM^3F%FnsM%TBN@_8nvvR)_ z{244-$zI*UQ++wYjN@^K#C9a545ChK>jDrm#HCS8M#p|_@GH2(%Cq!a?#4UE&6_ZI zYi{G*b6^V~$4e5y)2F4wy=uVQHp;gFlO$ zcC0?MW*(b#(l+g4*>Mm$h)=XuZsw;xCNBVaQrTEy;T>o=YW>r#Vvx?>U0$P;`D1fo zs^z?#b1()w^>d*>Y9zhz4XeB(4Z!)IuC4M09-8t*O07!c0Nlq(e|n7n`D%f_X#GxS z*wwkO+_}qk;Z^2GJOQksu-sQ7SJ@h#9X(94&j0a**xHMn6DpUj%oQLMKnSWTcp#3M z{QK`g&gXTC5V3$W{{d&^4QX6V8dsH`TIopT<%fR|?pl5r<4GPqI(MezenuytU4R2e zcs047%^j2Ikf$p1GXK*XJM^TNlWzH+-&o*Wp`7$_xu4znrs+lQXQn1oO61OC`_PL% za4e<C@AHOZMrxMJ(bSs^V38)13yJH95oehA>HFGIrnF9B=xV z9#nZdkNQFQicvGd0oxITpjVQaMYEiO>iV{#XG+mJowx--b?P22$SE&N>iR9^4cDjx zhKNpNN(gjm~kp$2%3}gD`41epao+cWU9X_#(FlG#8@(P35+G-_89Bu7%PI~2d3(R zMy-Tc$bu;xN6^MG=3cmfZ!j0|(`pUN#gz)t^v3{w|BjiDd2j}d7mpHGp9v>=(YL#Z zU6qqLgJj`0@KHtyf7MvXKMbM%E8b==UX=A7a$fdj*eXGfa>GfS5g`STx1ispon$)> zFPH5YnU`CSbJN~1L5{O66eU`e&?3zNkveb!dxPptI8&yG3v>}mpNRKX1@_2$1|KPKG#^+@&u3JqGHFy|6(-UE!tl8G+Y#r)P=rkRIjvYOqzTh;^ zbl2UCksr#M{2Z=y<$m}RXW;=slSzF5t)eLxG5)3EFYHpeiSb8sscGD$G4lAAj*%Ed z$u88QWZC>cdx*+v%AXi1UZCMx6P#u2Cjt#pXtXsi{5xdP!YgOzZVEpHvw6GPu_|%$ z-y~P&lyP3WGGGsB?(}wb4rMgmD9g_%$G-pHZ8f#2F{VhWQKULp(3cAy?Vf(S$_2H} z);6d_F{k|bopc4F>=t?veSW`wiHX0n<{wM8@Q;!y3frd;`j+#Pn8OlR4BsL$|9KIeM+wY?dBqlg*2DAS-+~ zMxU{LH%n~a%@o^r*Ng4DVzGTUQ7kl{?Qp7Q6ffz^u?YhENE6I2Jsjct-6lllHdk=; zQkyRjvccZYoklR+P0jiPW9K2U`tr|&F!#w=ACa=Q3i3rYG4X!NqkKp7Hu1ht-nm{$ zypNas5JIAZA|xQe3l{1mJ+*QAR}#GJ7n=D;aaIP&i^2ud+#bz`(y9({I1aS ztAn>Ay~q-Mp%&vXffoNWwb9mT^M4d=ojP|>RAKOal7FdK`es$G9;R32L;PTKOa1i+ zQso*d3tuDe|E1qo>n6M2^>Q#UO~IsSmpauO8tg2oTy84F9WK?MeuC`ppC{drW}i53 zbcq~XIyQaA^b2dX&TXcrD(5E8NBlXo`hV^w;TYcuDe^9llx4}XT`LD#PN%)WgOm>D z4?2AL|K*D-U}WGKa2AUNC_UzRhx#jo?vZJoFr*El|3DlNUGkj}WIfv%AU)$)m>w@M zeX)UQ?XhOv#TwQg<4554--DCzoFVVq^}7a)LF>+C31DY3b8U)x?fjm=Z004p zoOFJSlDfBz?7B3btTMKF^||(pF!+grT#@KavzG;Uo5kPH`1?OG*U7T~FPdxF0hw>M zzXs2`gAb=*L1(lVqcwS6`-*gHT)NnP;k#I+4|gxkn5gDHrLDzCyxBc<{)yPQVnfuN zRy(zX%~R~296-BbjCXLVT=j!m@IOCP47MJO^y=USS(|dvzFDGbc(k?iyv&fu9kg?U ztW(U(I#k~R>4)9NdF;obb^n3cGwywuJ^FLek?4O~N+6_hZ+68%ac2F5NN}jMpF?t(K&=i=n?<4i6CdE62N%%X377{A%8O;W1;K*q-9UcY)PcoGY;R z7iC!30>*{a)!BGCU2IHS1O|bma48L2dA2pZKRn+P_yXsSy&siOhX-M_Y^PvoP`!d2 z0z8v=WT0^qepL|4fXfTvqjc~Qo^?Wdj);gC46^I3`9AjfX&VP7=gOUL>09Y=dbMgE zy_zEa&HLI@GV#xFOt0vYc$*bEz0KKqx#pQm=ejp8-crt|6Ls%kT{*`dAwxpiley=O z_Q#$;Hhsh!I{bI5V3_Ibj0yjrIy-IS07IV*p;z^RPw{vE4u4;!;Ki~&@BzUC{Jq8B zUjE+YZy$ee^Y{yyRFGyXp3 zua&Cn`YkDj-|-LHRh+eDudI zAV30tY!Cr>?1@BTG=A8#%kbijn=J~c{6EaS3w%`7)$l!&3?x8c0tSeRh#D0QS|ljYASQ%KKnxBb0V{|Xq%qzQW&mr^ z;A9|^<56nC$F|ziN-eFlr3xBT(L`tx3k6iFSgDOl+Y^HtDutktdH-wgb7m$XAbsCH zzwbjc=eDnF@4eRAYp+Z7%?ocELRxQlggh;}{jPbW_lC1n1xKAcV3*)+)wkSv&#hE2 zp!$wQuoF@Pjc;?(RL{R>;a%$U%>dr{d?fZcc=y74q}ta#RCMQ^Ith_Fc{F{8on$zX z4c=5!>j3S9F#ETYp=O=H3@4^Gyviu=ICx2rZ?@u29vs&OZ>+xcp1T*(-XYb&yKcTk zdNZK<&f8S8)GYbjNnO48_C)~J8M6j&Fly zHM^aD*yGtfI5=Va)x1$N;GmPOW~lTAg>Q*Bspi@bDL0`%&Rh$r>RO$AM9m6bynM`^ z_uR8U2IVv7{qiw)-81htZ}>Wu{8Q&OK74~0RNsA1@NVhXC_Yv%yywn4RlhD$Nk54v z?c)s#qOI8t={HILC3UR-(5$Zd&ui27v6Bxk z#KEGPL(;+p?T&m*!S7pL=NEgFs_{wR%uk~Ksw}KdZH}q!wBY?UE*hfNt?K3l#}C_S zlD#lVz->8MYcizy;-66brK|c;^X{tsTY2r&|04IM@1IT~c&rUxUVYCkWh^#t_=kL~ zp8IVz&6stDJl;wL-^}ms4KGtU{}IpW^@cy;W6d@HLF@nSWUpC3E(WVtto_}CC-38o3N3neS1YlC3Gv2@AzKikxKCc~kt>oVHedv^dqv_zqHM6D18bJqdj~5_F z)*YN>`aXy!PXFQ# zKEHL|S%5S~Bl~&7tLbu09@_8m3Enkcic!j%)Fw4G1T&pv-N%S#O@Q<~jjTB0i0DEZ=GALSAx) zB9D>nP}>HqP( z?KIWE7+n_*>hkJu2X9^|H0p98O7m`;H&-zbVu)LPON=qfR5@c5UNd+ToNk>EelgNs zGf##l&fqoD*yAR^^Sm^D9Y}ay&2Fhg7FPvd9q`LhM?!Wz|AUM5Dh=M9K+J{l|3=L< z07w<0hA&tg&-8R=}+#RMVr!P#{mb`uecY@`WJfm5K`hVHCSSFha-g=x~&UT+xnsHtUy zK76(AgYG<`Bv*pyBICy6;G@dN=|D=bhfKe{dX6Yx)8tu+MvxBIiFf}%O8vYn_?X-S2z#hU6XqMJXs_pM+4+*CM z^rxf(`wlPyK63b@{F{j`lyT!MyCUJ4@N+M%`-d47SJj&H!7$7Q?AqQ(cV4M z(kYYhGzoD9bfziS(Hhh9>fE{}&yC4-h;-uOH|ft*+=d!QRgoyD&-7#uM3Fz+o7f_b z3e|Vp7hCAHq&n;DJE5e1aH^ujNV*gYmn$62xG96W6>@og`_^-HC4}uTdwVb6UL<8joAB z;&=0GU2*bOQJnCl%2fnc;^~5Zp1gk^<2BWh#QyOv-oLXt^)LA({kt^Qzo9gKuiZaO zq@qJYbwd%1j&Gw!e?6rhnVzouW4N`|ehOCm$s=mFZgh9VQ1sW~zeOk|Ja_{CEqt}` z-y)w9{#*EQhyNCyT=;L{!-WSI-u%DJgZ~5upaTysC)jZw{A=U`{{=ogM&G;U#HaDP z6DNLqoD+}pe_gRUarspOJDz8=JK};WPBU9HyR)B{rtg1|9}jh`)!}mQGKjiNdxb**!zmKu&r^?^Qc=i8)zmLh;h$|KRzvb@}6WzopK^;Z-EK!B`=Bx!Eg30ghv6IYPuq*NcUyyZN?p z9n7_!D}0AK4p_H(Y_X4|-iEHnWR4#A@GshpXlEm#(3J`MGu8@UPV}QJPf;A4H>5 zD_Onpw`65`)ZZHx-&por7p8f-)&Uq0wTW*w^y$_(zS#)QsXe!q2L_b6VeNKWJEKW( z({GmR-(wgs+r_G5$TUVymH`>l^K{5DstC6{es z5b?EAfo+Ff1=IvJ=MJ4d`{-9lD@)h`6BXt%w3wX}f9uxF|u zouY6^3pcFR%|~^!oHz5wJfIxbDS$LR5CcfC!tQ$QC!w|+r3#XDy_!pzTx|F>h2rVo zPsV*!nyNU!^vm+D-r90*sBLVZ=SxyEun#6Z?taf?u}U{moNLH>?=g$Tx)I)Wm?BH zH|O41wN>jQZ}dFl|AL%3+3Csr69P0i=H}1T&`56L_fwQ9&dx8BosdC%~utO30hB9EweFObXEAUiA>{I$GlxtJH*9<$XhD@BflnbVpW*gOm}k6EL+ zXuy}Rxlh!mDD%@pa$LR7&vy47Z=;`PAi)cM9Yq>TYfX@yCdzhEj& z02ti_ApE_}^V3{i-A?hJ`vmEdmAsKg) zS^bmzQU(7gQQamdi+q^&FXC@Cf2uElLj8kT;h+2_>s$5A6F}vSv?AeydeE=rV-i0x z`2-3aDk7(mY`C&g#-eJwi?R&c)1;tP#;0|*8Xt=b@e9@F(zyS+oWt3>68(J>Pej{a zMS|_9AWxteJ8{Q!xvdK`OYdT?CPd?lc_4}xe_W|N~(RcHWG+G)`JKON1aC(3r^;m&Yqdf3C_jog>N>I5HaO2G%jl%}f4@>;>>s5`i@GROzf-?4Y^U^xME`bvsBLhdnBOY`MK38Q zh`DtLxPtwTy3KWa*_O!q_Z=&JI+_*|2j$j#Gf-Vjz2aS6&<*$7wc-t{R$~x*PT*6q}6to&6Y_jO22bvbstbM6Zga*dufwdT+@HXb{uH(ijN0+6JmM zKKf<_^Wj`{qS9T$`o>Yokn@JQ2k`ZD{#0X}*3n3(SqbG;>hj9DXu(kDxNE!59p;|T z*W0B$d!b3M5*M4`BW$B*q?OFXh{pR+Ip0G^lNR3ZeIaS=+#uG<wRHD&ttspEjQ85pYzQ8W1*b{4Ud}NN%D?w4IN8blv(qO`tZ%%-*~qR9AmbCM_b7{T#-R`_S|mxS|i=fK~E&(RQN_B*b~nw72}HJ zP@%^Y6GO(vpZ3#sHYK@JBs3w-q(HHwc={>qC$S$93j#Fu++IA_}r8_bo-QKn%zUA zF(CVofHe2$!byvZ0k?kIwdjm8kLlS0(7{Z8df>M{dXn~&Wq_GhgK^gx_IWZu?XEXW zp;`}2_GcvU)NtIuz(UZZKHOtsa8o5^i5rTUMqWnF;hgtW;0RFq(#+n5e<&8(69<)l zkWzj$DIm8PeU;-k$+Fhj!kT3~eFud|Jex!M9f9H7pmOmyww$ zrz$;}PqR{C{?c4V{!qo)I{|d~a{W;CMS)zwLmUr3fHMU)N5p!1N2T9wg2kTuR)VLIh{xxl{GkhA)$sL#uaZ8YSYk=>o%!;nPR+H%>c@ zkQg6{@22m|O^4Entz+!xr8PKS2Ysd9 zSppS+qU>Q96>&n4CLU{uJeRM)*pRPIo*MGgC20dxTwOBtWsqDV`9qAlhJ00)6r~!} zpb)scSCBvT(i-xINTGIlu|+}u)bR+GEC}-5=DnH7@l(vXgf=8-p}fma;|<1*`5D9t z&3!+Rjrni=$M5499QW|4-oDACDNH9#L3%@>?oDBaXh&fXU6nsvB8p=A=$y(pe3CARq8*2IL6fu))4O| zAyMe=BPQ^d22-jpr7JC&rLV`*RjPCn5?#3H#TlmgT`AdIpne1V;-89e&D;=`iC=+x z#9Yc9tk|Xal?cVkTKc73CqTUn6I1qQU3(HC-UI>ICVOT^whX7BNI|Cc({jw@IBnut9v8@1sM_LxiZu?B9My z;iC8*L4(CF9{wEgf>fo7t5n6coU5NC9FBftsxIO~+*;mSl~o{s8-agJ3ZaA>Fj1$5 z<04_Kks%NO#@uAQ@$?-o1UC-@90D^-15E*DHo>2-;Tk)ja}Kpa%hHk};aPn0hGkb? zz6=jY6;DdFTLkPP@0#g1RAyXCa3>(*GLK6MO7Pkrp*YvW1Z;Due6$W^oQ+AhOchrk zy=(*>xcJ-0@Uq)1LXPO>(R`?$42%iYn1S89-^ymx4COFS;;@K5Ga*Ql($A;WQ66tp>jpW1H>VcxTkqF!1%GG(hgZw>p@}W)Ukvc zmL&OE3JDI=;}FRouG<&MAFanIa&M-gR!!u-p?U-(_YR8OH_}YoORRD!!IZ&<_|7oe z%x`({ZQZUH8VW?4fC{oa7 z7PjRo&;;vrg@!6Vv}G8@EB||0+(g$*}-vA*fc3BHH-R&Cj9$potC(4DcHRnoaacZo`oY$7_F<=$9S0Oye`O^*7qUD{P z3qrxb-=PCSOw~G=DRPf7g&ClSbESC-4-fx}<~h=h=}5edoinYGAF#~!8U@2bZApQ% z(1a$-g|RFf6SIiQ%#zU50cZU2%hzlS?L5eA*g&3o(_WT_+(w|vF;-04QhNl zf!oO%dc^_v3I*;J8r(A(Qup(BYvp9&8=Zd&UW4Mq4q{7q310?mB#vg5WZJ@NOf?8X zs9B04MTF~%GGMAY(PN?QLT7!M^+m%)Z>1-pMnNaOww3{6VN<*xdAGdrTc>^UKGc+O zxBGE$A`;CvKNOme52A*--o7es_aTZaOurEyp*erD!Vjv^-WqC4UpU+--f#NdM&0r+ zT(n@}0HZ^Q?Zw@7$aUgt=aWnDrt*)F^QRlFadt5Y{a=2df)>R=Ag&tWsiv1G9qdSP zIi7pJ%M3LzyceQ_0AGY~L}u8{?H>JRuYR+SH?49T2@(LKNuoEng5QjV{pk>5Xtnr2 zuyXIhzvi|Kv$)Z3?K&*9eYN$^Z(`01uZ^>p;_}}Myvl^5dRj4#Z!q@wb5a;f*N=k{f}jm)X7_ifd`$52lJ+ z1UZ^6t9Q-3ftr_ZwSRftY{-K3n^YpL&#C>Itjii*fiptOcG$Ta zo!ko~H!I);LK^QXBjDLp)5K}S!^-1BMU}78@%UgG#TC|Ly~SyS42?LAc$jVUmuloU znA1;X8 zY8CQX_>LKAMwP_ZA-KpIUpt$o?vaP&IrN=D5{K$LLtMe0q3=v!XwqB(55M?^WhaYo z&geo6(QXAP+TmuLxhhw+Ud5k>IQ z0T-~q#iELBSwC?r0UGpMSKh{K{LCHvR77K!YVUJ6%-U%kde>$iyYljv%*I=J_`Cau z+QZ+7pyzovQMKXn$XnSgr)I$+qMs70>8*Lg0!9i*lEa}U zYxK+Fh42{Dsq;~gaMQ74AcfU{kASf_)%p-^PbKeA=Q(s1x#5i&RyI5e2sB+z^k$Z2 zmSxhwmBsK)`WS0(aHMqoyTMDeyj&+6ST>MkH<2tco1bTuIPh+4148}F4_M6EI6hIh zgvgMBLJkUx5*{hHzI3QaL^&@3--2U?@z&Zv3@>-%@cWf42E>{S0 zqVd6)5vtuO&Q(^vM{|*ow|!ShYn!;pK{76yB5nz!B+11e?nhvr5w)UtsL1`}OEh@X z7~9z-ku77(dHOy_?gv(n$s+5HXUc67bjce^?kiA@%f$=^0jjWj^ zNfIK`_GXj7tGW+8$*-wpVLW#?4Md{G|2mYJH~g9`t0LQ1nxUFpmJ}Uss;qvi`WOU$ z8z!!8E+I3iIz^=Tkg-F&#I!~(tLk0|&N(V1yEXe?us!gok$XMH4rsEQNSLMyh32>J zh5;}(OE*H>V7){g6&m=2TO(KqGG4!MvwAMXnHTitF$ zyZ|Csu^o4z8P<&E=4hVm(bAZVEpz1Uk_>AXZfoRoU=)zN(-o4M_X6r@d0 zJ84&(AgxL^QTCgiW}Z7f^TxHy%*#+5DhXKB}ZtOLKj+tpH$`^KW-rOCpJtvVA!fR{)%h^;=SrJZb-J$X zx6O@`AoO8t@&LPH)d*d^(Kx1iaCoU`^XNuro^zr`S4yKboy7-c zVuj6LwQcdOu7B~@bIGl)0sI}~{(I02G4p z!kaYV8XT=E)WitRi4tAJ*BB|@As#T57T0S-jemJ7u40atkDC}M$gNv=nvw(gcKglZ zZC1lWOf7N@5BVBBC01$G6jr^*SdePeztI-@M?0>bl93LOM2>E7e%n%=i=tk|r_zF@ z?PVUT#{$Nyl}sc^FD>Uih-k3&z|Am5NjZlN-~L>m3)wf3eO?^ zJ9rLpxWW=^Zv@B^WgCXn_WM!NrihTCrofblqviI$a_I9bF$RnPYWkbR$2^D$Lg?~sH1;-xc)>y6SQK^+G%X-k!Iki?FdI~rY?Q{bqDlQ0uW9!@N zVEQL#;RvL7gONYMP%K`=_hf_O_!umrYsxf?_|~b&4qeW_;tewY?w!z}lB!ITvn1Z) z%QnR7rh_YA)5%u8M)3HLAj;PUL zH=NNS*V{&MwdBahdWy7xfu+KpCU~K75=nCcjnIef_;2soat>tejM7TU z@Wf!y|B$o6r11=)58AE%86_^mkO?_SjnT5$7+KC3nZ8?cetun%E=(D=G-p)0EO187i^pGOV2=Zf;5}A)}ZGv z6d6$1FG<1=^6Qc#@;_XH)A>xor{aK6;t$J*nBV!2juADO7YNn=v!93@=M!1Y^rYZNZhP&VrSwb#r^3$MPQ`KGmiwoJ!OXDh4}gg!bp zogiZ}2cw&1Vmh?!;!g&$d*0KKXr~Hk)UGQ%7km;k!3{yNeM>jx2{bS zY!Qo%`&y}9B93lBY<SC!UKX%?;m&FOMam6Q zb{$&(ew?!JC9~gJ(|j%rz0@KFnewvbbmT$dTB9V*_@fu*M175@Pt&HB&SS}|m9&YZ zvXVZBWcsb%II5(C@+~j(TD-fjk?&REYJMvp60v%8^A^cr%6sdPBlDNwKuhdGmkPGE*aKo+NEUcrCxw zij-kp>~4MRZi9Vi?_jf;$g-3hc8Nff^IIme6eCq`?U&5aq<~siP`!pyRb1Hfbq{n> z|FjZ->a_DWzoMP*HNVUFPczMH#6RpES216UkP98+2|Ch^6F^}UBH=b(m|-FqG3xEy zb2!Vr>08g?EH|VbYj7?(ITZu?KtIB?N+Rn=_u;FyAT?5uR{r~H>1l9)(F?ZV`Aytg zcWuPPIwbGi__CJ@)<`wRQ_>N_M<)hoHHhlHUPKJm%&oFKHp|pA!_sPFSBc;HU9H5i zA$GPmECR4NXlDHwJAzoBznD%3^_aRMN$gr0!ZMS|;X<7!%{arD=E;7m?u(=r4@yjL zhQ>hwBmpbc?|4CYoc7eBxW78xv}zP8#tioY#J|o zntYK6+yV)Fr>?h(e+ztk8{C?nHh;;ira=1LTi-gS zkECL^iHgt~iP2)HnHQgROs4@5sabroDtn+W6q}h&Urn=#Dy%yeF`j}VWt<{m2tQ+{ zew9u`#8fBQ`gB~K^O|9zJd*NGIUv>|#P2CuzAK`>m|-c`UmwmOnald}@5Ig7(#|Va z&>!03A{M19SQOflrEbOvJ(k%^Xj^_W0j>^kxF0a6!4D$SlTWfHywe!!%SC;JNiIHB z@IsB0%q^QC)f=@RYD2wH=Yih7B1F<#Ari(|oLX5-9|+Vq zQ6-?c-GeIDk7-J8tVahUWZPv`K23e^HIGOJg{$Q#Rs+GijBo`b3W1d9k0^(!c$zz= ziWp7yJ*7>;>}-}aPSMv=wBLHSNJ-l4I)F^ z2T?@@{nl@;m9BF-=|@$}?=Ri0K$I@=SZ(MJqYHkk@Ipn#{MN69AJ|4jOVyL;AnBA8 zXl2nUIs6cGgpWb?`wT?Hw}XyGFoYw9sQjZ5a?#0H)wEVfj8$@EF!NiM5wcWgZTxg= z6Gb&@I7!esf=XF2;5p#og#fQUT+6T9Z~ahCf7PNii}!#ieT~@7smMHf zYtY}{4+X}{yE<^P>V_<5AFD|oeW1*2Wshf$Bs)%VepDoZM1 zyssM>8}E0|)L~(zdwM~k^kJisr+xr7y|Z*HV6omPp;Dif?b{D4qRDNUd%A9!m2ov^ zf?E{If{RedzDtCzlLSwP1qA<1k8T!ZXf6IFXk8&Z8?z%~z$tEge`KoU)|BzG)&vID zM`Pty2!l16x1lXdxy3IliYwgcO;va{x3m-vX%=^WYf2Ifpu*((?UR(`w?@lb*g{*6 z<=Gn@PDY=vgbvJ7M=CNC$~?y0EOz35hjqp0Bv3C)vKrr3;^`%Z2;N#%vgESXl91(sTQP_4AtaacU^dK9GQh{|RRSr8WS3{AYbG{9dOJvEA2Jwr@Kumm+ z7)hdIseM8q#vf$7C>EmL^rF=47uU(UyVk?Gvc)GkYyOz)kh)_@k!8D)+3vwUl9vap zA#3iY6R;4UqWibYI@k+rA*8sh#C%i=v0i5NdfVKw4ov}|B)x}yW!i=YH_b(+FAVy2ks$z~+D-D@7vDv7%&AwE7&&;VUXu{brpRpS3MoZ#t zpa>Dw>p~pIF!q#H=fQatp16Nat$BzM)>|0lJJZ>vvQUUW<4ZTMM*m^AJoz%<;J6Vv zDnfe|=x~1SYk>hGMeSRbubFmB1ni>bVGFIT?N>t;h)bu={^4L*faaPsek0)wxhI&o ztvMh&rG~J4qA^HNh3Snb*7tXCpf3ZJaEi)d3*>R#2!YP2t@qWsD$OK5>3vqUbOz}N zG5dle83>8KfyA-vfR`N>*xV&7utk|lL4!jV3h;)-35E5{DHkzFinu?MLj?{I5F*Ep z5yGv&4nli?ON08AUb1wX8q_EC6n$Pqp4KROF4n{CvIb`~<<#cR*zc`)h9prX#Cz#! zxmBCW%CK~N{+P)$6`d=N39O@=|C5P#$KpF&X1I}7)rY$a>_xQv%=Ms57Z~$G)0CHB zOOQ~O9axZFv`J^I&mKU!qwYg(Ztsexr2ZLAEy%89pxoqQ$0z+(Ol@?t^gYs-1(fY; znkiliuz;AHRbuzL@23cEz*eof#XFp%4Sk-n~yRO0Qhg1qsr;nRNm6B}*r@(2LP#RQ#%_ij zc=A5tY0C&9Gqw!HErlXWEJ$LCc@Q$5H1x*{YsCH_?B|W9`KYw zS{0D3ZI65vtyBeJ4vMi#I?SCY67SS6u@JC+x(|&%^(oE{*!q4QkSmfwtP3UDaO?b4 zs9+mAvvcdBN!IVunP)p^5-^j-q*x1kD=ir{V^IzZrdTeHkz2Z1w_A)%8_G`SB3kOK zb3S`MOQXOO87 zK=KCygVBl;JMieBN;YaC#A*biA38cB5C|R33EWfql+3rqFu0iC`mN0z2b3?fl*UI> z=h$GSAI)=}T0_Ut(1cU$%ceU5S*DtE8a*iXQiehCV+dmP4D*IRRsG%gH5d_6PpB4g zrc#(W)0%a!OeWO*GV6V(xguDrYfy~{oG$t}ga=Z3pQ)CY)#80|N=BvcwD~|GSYUY7 zfxYOD3%yJ=M%lqPL$&VvGP{hs38^fMj1rS(t+*-?fOeLRutIC4&B1?+_MH~^fJ6IH zc0{ln3RwI4%zonq?9qx_t*HDM35rP_hm?Gg+0U7ii*k&a-5uM{b*ZrR1^xf zo8eMsw5`PD$E!{RdE!^&*hQkVx7}ZMhSiE(R8E~6eC<+~3f6-TR$d^T-w}bH{N{MW z6#zxFX50O`=aQ7i)xxYtgBzu@wgA-i>|n&w-U@NEitv&zC=;9JokDl4?>F!(k!kcY>a;QXTygo~En53ru2N|M!RIVvFw))v~1E4Y;1be1vWr zL4@NAPUDgH!zBR4hy-1A#+(1>Zd`(d8v%szSO(A9q zX4;X>^`T|EU4iK`1med?XGEXfO4u^(P+O+mYRj}oZJG9>N9DJ!rY3 z!fWdhP}|-e_O^Go+Bxh|JBPh$=Rp1+{z39vV3Y%D_s}ZaUh+4o5e$j)Jx{gjDPiYp zuRyi_#8kf%Nm0>bKywkLEePq;rweN4&&1dez$inSjMCA-OY`QtzkoMaCz3m@J%kKY zOmQdjsy>74v9bXpMwT5C)#0K$L5PKDUTdXiEgw_Du|tZ@M?%)1l%!<@8nlY4jKwZl zJz8TLt7(-2_&55sien!8IgZ_oomG3Sa6Zj>kI;~!IrYAv8KF(ff>*#=T%?_ zS%_H-{^Snm(q#Jk%J->$K0Y|p>cevZ1!qpT1z}6&9;ZjQ1-+De*<@IjMyU&n>0R@4 z>+x$vHmE7bN8C|PFjvt|#lAMUR<$TGB+R+XNYNr%TMzVcgiXjH8^W`s0>0-QZW$;_ zjlZ6K3~pcE^3wH+OkL4VAzqN-HnyKHbsX7?UxB8<-8NCKA2hEtjs4c5D@Abm70f4l z*zzr++T{vdVVD!SsS01iufw@b2jedcH0D({#i-aq#~;(g`mE# zQbPHbxl&u;>tKe?sC8Rz0>GrLuTX)j<+7N_ciz9B5Ros_fn|OZcE9o~x}CLC;CX2Z&1G+?%hBhP)mQM&>#L(Gq_hG|{1*TiXSCtd zPdeH|{sNz_Ng7tbs(CAzP+}Oo%i6j{kiXV5xBfv;%9FBpvF6S$rMc{1)tn6RX0xf(F#g66>}<0x=(o16o;MEf_I!-;wQW)EhmmzYhl1YWv>}luhkv3?iPJQoeyDsVSwKrpPM%*0@^1{Qh80jfU`6}@x=)i*eIIMt=l z{~Z($R8vGbvXPS#eKsI%N!XUQ7CIXUhrw0*g&|sgD?(R{jtVkf74o47P~a?_^##r> z{Q_jEiKt76=-Y}B-j>Ekmd9!z@s8K26?UAlzMN7UFjTg&J`B|t^8_JeI(WsmKNx@* zP0;yIfymXU{4s>m1uF4berx0?*?_gG4VYEsJK(VT2aRIO`sbhLf$s}4a-xxC?Rbb; z)&}PHhKC46P{?D&OA2}T+N=$zBI|zE|UXS#}mYk0ZUQ2-)|51S}q(CK=OFVr+{(djBPE zFkfrw93Q2f%68;6ybcdTK5F!@2OJV)`h4G;r^MZqQV%8^r4b7y8ap zQCGEIWPh!^dI^hmFN~sX!1j{p&u2Fz+UukwziE2jQItwTavg^3Kq`5o1hyFy?=_yu!i&Sri z4Q5_;3r-LrlsniB&j2l##7p^|>O{Tn#Q3^4PwwtTsuyq5izMqzT?`x1RvfXlOYq^^ ze}vjDQ2t#5x{-Hsu{Y#f?VbHrbQLan_Ey(X{@i@-GUn!qykNQ$KDd+Iu`&`oS+PY} z6?>oP;40xh(eoAQo$+Katv|f*HMRxJh(b@?txs%Dkokm~<{aOgFVs5J=9P_JpJ4A2 zYj*H67+NM|Fv}EwP5T~F&qz9Ov8BAaef;xlF*hHn)5QZ3*fq+0rY+(+2M0Q-IKFYu zN_q;Hf%bZ7aNkL^_?SBzkq6O41XB!fLw8AP9o?SfI_yhzH*}YzMCwc{v0l&9cIWk- zyQuTC9W)CwJDwzUC}LKLwW7-+PBH)N607h;`ISAa%+*}vbH7D^SNa6qD9!BoRDzx{ z$6sjHchZ!&^_n1OKdjoLtXY+$5qU(3P&%(Ag%;^frT zPdRv5s@f)+k2|emP#+~LPkm#9Z+6k9XQ$e2N{+Xu=#<;DWzHR-NZXHT%yDUKHrn#P ziOM)wNvt>*R0l!V$D2Y_1=e7yw@U(WwI9lG%5lZx?md$k~tR)6X9>9jTjaD0RJ3sn@CWx7XTD?jEme@+sF< zcY_9Ye^>)=_*-n3<4{4kq>V$aajH-Zg$)?Rt+n+JTtIXmV(k1(n7LMt+DeyhhM7}x z1n-N}GY|(t4G{+HCc~ilp)dLelk-}-&xd+;n}~y-K?a_(^-=ugv<1_0MteZn07m=Y zebk9vg$b7rD1}SV>jk-RA%}<>9igzjNQTrcMIMf2X<@${jK=;4%~mrH5|O&uA$9ngaxId zWq7JC^j64Wr1!--1|T`Oq>E}xW7XQ@D@!mLK6uG zvKx_V5kW;c(Dqia1)=_0IUD&_y!zM_Yrf|AUWcDJRk(gR3mMg)+NI7*gWXv>?w0Q5 z%MhEKqp`=pvi{7cpQq{hq_lRJOp#(dvH+%HIQ9MkRx{Uu-tdpv?#Ejg8<(P33vB?Q z{$gAK)6*YKSY((WiA@)N6>a{UY02AxfDX$co35K)1?A2Rw&>|sOff6E!AzZP)?8*^RhKjeeEbQM#B%%knhwPfyCmD9)lt*Pu|FHxa4A&c(6bYnFoKoE|=2)~j z360OP6cfS6cAdSylwaKHeev}&&s3TmrV4>h?+*R-s#I-d=nuR;wfS6l7vUF|ACMEJ zxV&B5K#2d!oal3I?8mk&B^_RdDrc;OrisL%>OQKU5nNwMb&1;#)d^>4L*$`t6X&QzA!3(smseOwi@n#Y&p3}gG+bex5u{V&k7&VdIU9Ud4t#6#itnj6UESI-p zE$|Lm#4+5>4b6TFYf28Iyy53~mPL&S=RRdq++?bSFH@0Ao|9UCRvA`iLYflfnpmY2dg-+!IFPiskO@RgGfwVe%= z8LCUquJcdjXv`W<0xA~Fuj&dlwPFg7UoYAqCc6_-TVsvzPbH->$z$a`hN^k-hTP(f z*lhopVvjSlS2nY#nJVM>ywv~YF`;v;W>@pGtmY!U?wfzYeF@WL-oJD-h);P&z$i)z z;^Xeo5zg2pkjpzr6ONiiQSXEXqfHki7O9hBxFjL*xDJU)=APu_4Zm(5h2~RI9fQ)` zS86Zxbauy3Gy%#~s4S#4qm4%fNAjFKBz6ie1_**P(bwodQtT{6)GOpZ#ZGgnH{6Fb zQ6^78Y7yylgROt&NNN#lOX_#e7F=6C;?3q}InF!2In@PSHAkfX?1#teTU zt`v?2Y+0+ZWi=POg^N_3qwP9xi`5zIy3Pq*);UtuSv^>&8Ro$@^FCUjs5&sT>%xwV z@2UgCRbj@NPGK2k8BB~8VaZfs??IHhfX1)7ENqx6Z08wHVdCft{jOMHk5CwN0>t$u z%oq4+5XZ(9Z+a^pgk!Kl zrFz;fS;TyZEJN%pr^mB=e3{fD;(w`SP&~`Qwl4cyliwBa2C4quEt@z6tlxB z_qVz}d*xQwFlhR7TW)nlxWA3-HC&@yU*_6Knh7u8>biixJ>1_;+Kg)CfZQMC-7Wkr z;+?CXyPxwfDXAZ^ZwPPFJtft7*WucOr=Gp+S84rv_v_ck`R;XY{_n2oDqG+AtH#s* zH>F+TH$Oqn==kB6*CKX-UkV+_e9op@AdV%vGq={rrdkTL>;OMgo#dON>6 zVLLxXyfL$v=YSu7dZDAIb=b=n4klWQ?F8@k$!af;cR5+XJFSbDUCp<$@`#S)U3rk^ zdMp0MZ^)unkA4%)3J11VBVhcFu(==b`30ox)knFUM2(RSFe{>fe;z{1cthS;LRT zQ(mA_9*|btASr{SEXO~wH+&a~TKXwAc405g*si#qcU_Fl2UnhOZ2EgE22v#A7H>r# zb#t1xqD^4fmf@}VOx>`_c~{+JdX@Pg+wr5ly%p8+?r0xx#c$P3y4HIR9qsF_5E)bG zXg_a-Y%}3?g8gNCN*^Quig@lyZ{ENc@aEy4C~@{Jf{)cLjx$9aR8N!4*fbITBw4hy z)2*#eI)fs#FDT_eH>PD$AVTY;__P@@=?+)RRVI3ZwBXN~=fKmgx$N=mOje$Hu@7o8-uHO<#uJ z8g-gT{OmnnhO6YYTV3zh-Rc_2wFiIY{5c|0Esqw7?a2ft9ke|sO$7BJTAY$8!F>~* z(K_ot5Z^43aJuY7upLNa|AG0tIQU5yTjaH-?_s~yt3pujPvxvNIH2roEz8bJM&__v zy<|v4dZxUdgpLjj48ggHgiQNmU;xL-s2!Z6v(&0AGJwSyFpn@wX+~deRKx~Mkzdbw z6IbGkve4vy!&>h)R)|_RX4cbi0Zx3bU-abgIucwbPA{XuwFpJ0aRj(d#`5}Q_BXUc zMsPMLhmade?8Csc--D-ogJ6ey%CTXI_1?Cg;#;K$-P~?HKur4bS4WD5&`Dx>>jc=i zJ^EdC*(K2zhm*m2Y#}yoDYjBevv(z~qH7g9IYL`Ukth7T?o z&{=o&9itDhH+^gU=6x^%We-|!1{E#6Nt9j0hoBK$YoAR&#*?Gw;#=jno?zl*Rw|-| zPrhts#y_EC;H#>9s~s8m4~*hfR^E#o>Wh6qaGkY(M;hDOXWcE|qD~l(vZ>b1szTf_ z0mQGb^gLau*s?CAQj_vsA92cUmw(;%H0HrN>&})oeLh8KiKW-cK;#84Dy@=nGJUIr zLU}2bD)}{}eqb>R6%bs<;G`8>K?&{(E;2=*FVfL8!x+6X9^V%wR zK0DT<**nWpBUj_`tL#eaA~;BqHr))76p2^ILCeKfyt$B1<-dP}`QQqCliAi=nr+n% zI*siw4j{H$e_pIi3D;75QL4$Od#nIU$rvBzU`N^`Y^#uc3R&mpx@&BNmL0+tnKdrZ0wtS8`17vS7K#1 zVw8^5rTAqr(=`EM+$^K{0Upa{TiIERNShpkMg!-VMVSpLcXFZ^nd^xx!Qc&RxAahL z9&QWki)Oj-CBgc#D$aw2n3yWA{n;Vsr`iTG;>hm$D z$#Pc~%?dSuR}1i43$WhVFU&hrXRg(bwU;-vml{j8f;1@ofkWmxcA+;6?LS z=@jCxce}NbG_f2!ujN@K47>~M&j$AI=XZepwQu)zEuZ3d;Z(fk0y4~{Eda?%X*?J; zhtSUayTUGL#cb>0>tu>PPr+wG7`&EFD#3AZj7$-)2* z6mRq6keI(BAW|o>u5Jku^RijiHB#3rOnJM9w%tef$Gy>wFI2|Xf5{G(r`fDUT;hnJb z_4bvZN|0XbpKKCODv|Es&ggoq@5|gGTm9@~Vf-+IKOnt8l}*JzWe%fmFEUbBXTihH z9BMDXccJe9PT`d&NXL>F$OV5H>tMXWKXS5&(*!$@D3DvP^-}DyyF@vC-eo=ZIqb2> z5@TZ{H){VeNOm9CAk0)+EZ&Oy!9U;yroN!DyW}Z9-Ml_c8_!7HI$*=us&2izcmQW| zQhfmsLuQ?$t_4OXm<0)BoBv`BFHQ0qYNXpy%g1rynuy|1_ z{&PM}0uLM_p)!L*sc2EE^~&Qt*#}L@(5|M8H;lT_Q4p~hdmbi0eb5JhY<~zoT!ls# zXZo%0AaRq}jN39mo83@6_O+M7go)|keqmRx?u#m6@qTN>zGlTv%8sX&4G-n!Q?5El zYl9)rk`Au?S$zjv{!@JiU;aP( z4#r$0-lS8Ud8;&T%TizkXWrhtj!#Uf*{c<2{w;2&s#_>QC(c}{pr;7O*lu0or0K+! zt29NLBag)vUVEkH$kiwn^wu1?dKfTDbL8sbcE(RQa`mu79^lB;!%v9Op@zpEnDA@t zeCUrGw(C{eZ*L3sI%@RAtk`sru?_&N1Zf*mgcXk)-A3?bu`8|WMHGP#+?Buqa?B_q~A269abL<`g|v*}gJEJ)2QNDJIcHk?ihww5{!*}sSFRW4R?NLZ8bI2OT>R=ga8%C%IJ`k-; z-X)GvB0^z2mLE6($l_ZX=ln;^XPy#0)vCfYu&Gy#i`BwB<3&r)xZZt(I((oE;m*#X zVW=P3?fs;N_9`1*ok#|!LxN#1HAPEPVfP?st0-D?SjJ8n?2W|S%Fa)(YeSr0DWdyd z!9wxQn1tM&w?OQS&R~8A&OkssDcu-J2*Gu14ElEP|$(J-M71O{`7{Bnm_e2n)P ztz(jcgF5paaE?z(>+|^TP0z!t+fBe1>`DC>}s_;ucqABqR#`GEL zL(7%=itj((pU>Ze$#wS)IeuHCD^#hB1!z=DsmXQ5j3>3jcbEt54_FN2i`V8ZOkLPt ztGE2o+C2>FH{(g8c&)JzqN0p12#rGTLbd6U@t)lAwjc&RmwrFLOyc5xi zAo0*qaQM&E4Jcf~0xQwVD!BoHV*wyiR@v|zU8r&R6U{&8BkSjhM-+^2;MP>P$K!A{ zZ@ObJykAR zR}U#3jl|W%U%Kl9j&aQ9VgRIhv?qi|Q#Ee4_AXZJ&~dujcBAcvOrs&_X@lT`>mt6j z!c#Yvb=OCfR<~Pl3gRe41j>X<9T>c|w27TArW|rIAkBXi;!?h4G*8NOM_yMcD=5cw zXN)8?<-Ik1y_oLEEkG929hJ?c75JsFpS_K9SK(b^$258S7!H>?a?I9f9O|*;Ft0VwH&8`IVq>&8rHZiqHG z%g>nTG14_k_AoIP4Jwr*ZVlAT?gCVMjY>Mf_8v3;tBCJmd?F7z9vSJ?m2PmVeMNF@ zX+-wb>{rIVW-22;^#4=8ibl4mGYlp2prrDpsjkT8EFe>_Vs5zEVU8qYLKGa@@UY;C z;mhk=rP-P<#y1mF^jBp#-J0UTm%p~yP-WPD{Na!BAy@7S3^&ZBR8XY?2RTBB<@%*n z{frEaeAh$cD;LPDRz{LGcc&nkw^6t|ZMp{c^(ZY_1^2*;E#;Owc&{7v9lTeOzJvF= zQs1#^FVJ@^+d=vc-b-}p$jh>=)pv}|3;K?QyFuThkKJDL}^TtW+b z2Zl+10vGU`9vH%J-@qCC_G7{Bq}y6ZTmAxER>u`to1<1F-4QgfUOMcQpG zXh1!@l_b0zUXvYOZs7@eIaP~q-I#)O!pyL~7TC~h`l_AP$uWA=`u8-}d+9>(!UfyAPCJHskR}&S%mC*-BhY|BNG-0>4Mag(BzOc z9Ob*kUDD;lg=5|3l(E6ShWiciZq&ot^~k@_s)3z5EaQ8jANsrzy{v(ym&9Z(8=w4< zEZO3XQhVV9V`QZIFV!B&nBwAZeB#6`Mt4XE5Dbew9?P z&TnN_`CTo2tnaz(=eUJzaD~5lCPurzqJz|NAnGW zI1AP9K=UuVS0qgF={WUErXv#uDNr4(2Qn($a-Y?anbVRs;Xr6D{MMxO&<78Oj-Ds(notJX*aCCj$)PtGR85II;RHk02oOovvrbbz$2fbV68u%3SnyZL%+Z3shu&$6 z8klu7dBN#YTkTNT*yEcaIne*l);{y4v-r&aKz!yW89gG!tB> z)WEpX$028E_$eAAXl=1uthb;`LrzAQhO9+CK4UGu!P%lN?gqtY>DT(Pomcjk{D=u= zb+&JlY#CT@JMa}Ful8sAnndj@-(#C_`Zh$B$vBL}wCI9V>+p|zCsMLCg3-<{7l0sG zh|#m7F?x11M$eAM=-JU2Jv$nsXL7)&>6x&hwYt0*J(Dv&P0!?zPt!AEUc-ty82Ro} zP0uzu^sIM9jGiT_+mq3=jn?}iNluzmp=VPsiPN*66i)3c32&yh_;HEFFqk5Xqv8}xkTq5@_uGMbMplJ<7vt`(|HKq1M-^3O>{%o(D>sFkO zDyu=Q+pTJ5FEc6UFb<`|@99mWcf#k^f`~dQlP&lfNusvNws#?A0E);UMb2mBqvNOk zN@)`z{cJz=N?wu<@tAI0pDF^Aw$1{RXk1`&$SOY8E*{n50+U0wBGY$Rrv#TZv5Cg(vVK%=3u2MGGMsf74To={t!(CgdDm^&iMT@P&1}{Ns=) z0Tb1+Q%9r(0@a$M;aAgdhUod58 zl2Lr913W+Cbr(V-H6Moy{N#wBs$iCJBrY4;1;yr-Fl3ILP7E>e8@tF62<=;sKxn0m zn=Ps{rl+fO@G;ZV;EfLOLGz61DeSd&^A%F35=3USOPVt}%S`MveD_Hnx(h{XZy6)T(h!N_b|oS)iuWTWIj6IfMCn9;UT6v_$d_E) zWV{t2jKz4k4qVi>=N4peLM7aEK_kwS zK_Gvk?;wzC^qnni7yrIDg9%_++8s5R&%UdMS=3%HAFx5TR%P95xVnm=%6NS>dQ<9OAFokaxr-n3?0H& z<80J2I}6=ojbN~f(h;Y5!^7a5m}RJ^P}DbC+oR2A@J1ryc*DO2^bFFZFOq=bgBgJP zX?auJCdwjKKNhEbhQl!H!H4y^<8}fGszWw=KvB+7JkS3pL%M8kry(75e{4wms@tz0 z(&q0drYEyA(-VVc=OLYyl`y1Vex5L-JI_iO(sO{eK1Tuc74o3YQFxe1p7^o|i;5ak z@Taotn~|!9EyyM^Hf&2jW!OaFjzO?~zXZZT5R$x+ z1NgF4VB)C_%-GX|qo!K^my|9C9K{PwUx;?VtIy6Lpt&I1g_)&URH#wwEJ3XfG&sj& zDp9NO!H=B(|EKl6U{0sW;Jq(489eIt>nFp$rT^h%n0#)+WcXB8v9rGG&P<07*}lL;bNj>Xa6ZEV*>5RegnRQ_f+FKi&AF zYj9_N@t@0&cbbIw@zzD}y|DlW2q_8=sqlXhHz2-L+vuWJx znOT*LpykZxM&tE^rW#k+UMG_qPV97&^k&+qxt&!yDIDd{G&fw+ zt8_Bq#M?oTcy&lWFkE$_qxH=x`2WJ*)EYYIz0NK zC_T<3X1cu!zSv08K6qjx+i$j~OBjvwjKv5iZL^lRF3f_y@Q{u!O!=#$p(iI*vs4L0 z&9a;tr$=8D-AXHalBikACuMQ=T& zf7JU*-m$t5Q+w^cI`l=4;3a(R7OGEeNjC0HM-9d3p6d=~N(b^i!F2Bng{j{}M<4~~ znld_g`i$*nckEbxjx2rLSme`2nDl&cYsMu_U&JblCsbE${Q(8qTKa)NzQY)^M=LKO3VS< z1n*Oh12&^Ow9v$FpEXX9Fp8fU{?apnpqZbFkPFxT&w%jZKR;?$&gz!cx(L!zTwUdR z**Qw7Zl1Yt3QN^2<^S6ROG#8;tUR7D~D z)@yHws^~_gD!RVPx4|j;cUX^E{VCe$-cWvk=_dd18J}C2&Ln()6vTm|LJ4q)Wj9vp7Wv6$x<7!StXcE~)}J`5`RFwcub=c@>9 zKI)v)Zp>(7f`wj7rMlc;Yw%&(F+9TgbWs}Ux}FZ(EoOd9)s8Qeai_5;t;)s9GOnm( zmknZm`1h9(uii-RCa9@wID8d4nGLV@A)ISPJYa2F@0F)gfMP?$enHwn>W^BDN za=k~CV`4H1HJ>xZ!j|o`*gbf|gP4z@2ZmsE(NFGP5q#m|xN`B>=;G0(Lzo=R9zGb? zrXJyv>I$3{U6K~P*JIVPBNDN0NpzI8>3b@L1c%9od&Id>&^xAZ5DHXL?2(u_1qsdg` zkI2hPSNZ1kpcSS7aSnhWso|BSV)?D{EwTn@*EX{T zIn+FX>#qZmd9i{7=_&YM7sn^sj%P}i_0|u2z`1M+wPCD$lYpCduZ|*O7aGlbL$9cX z7C1w&-JVEKE~2yWh`hC4N6oY4Dq|Zd^`gLcoy-aK#@NyE9aIaEqjKm2Yoz(2>Mbd8 zJT$wv!b5bHU0x$#B7XZn1X0LJ zl^7sB=y3)57^yRt*UgqzheG0w_zdoUOo;n&ZPL5!1J0mg@0_8L$43EO@e~PrxJxzO~oNdLtt|y zns=a=Y)`|ZAXhCt)J}C6x5m}!q1Vy~gEFRPFst-3+>>Z5m_FFSf|RLddAp>$+GEZ| z_h0c|wqs=+Aw+^!?$xOaGnF7`JifvF)`1@2CUUAg=y_VAWjY?6Nv+t2D0T2Kcc0$ttFXXSBHl4%_a}&QYi5$G z$PP zzYopKo^$qluf6u#>q)x=*CoE@Uw9yV0+WARPhio{STO)a&n&#hR{cn^Qm_p7t^-Yc z(5>DwKvF|){l6@o&5C*r6IpY za+4-cc7x0@KlJmRh(qM`5|tj0MHI^83VEL^D^zNJ0g=#lhiUW|kyJkrkWClatAgx{bK zL%)ZL(R*MwlfxeM*t#JxlG6P)w*w#IE*g6#j*CX{K3fn!TR8IHqWgOZEr}&nUK2!3 zxJpzVmPjKTMDz7Op>qyIHXx{3A&a*+)D(F^0-lz46u?Z9}Ufy5ls%a3(o>gEVtGg2&h_4ugDRn!#lLoX+}d`Z8aU4d@c5ntGztEOmzY zP0O62bUKs(Af(onpquh+D5ZBl?!D$|XjBARm-123Q|usdBOO8G;Iciepg2Jh zd(Eet@nK?}pgc)ZVnW(-(OaC7RW*^-KBf3eewwz21(mO&Mj=AifHX(RX5mZAzNTeyx*Rk^X8U#iw7k84!j(wpeo+a#l^YMKWYiSCqSp*c}&(_$R& z@}Fx}*{JfTjo5PgGC;zyN#po?UJ4P}VpdNU@B&OYr;(uNbVq?Ql@jilhvw&!QQs$rJ1ucd1t(N?iO+O6Yft9_7EokK^0)QY-nSyKIYIMs4264{wYrLJnlCEZ!}hsfKLwKv%x zQbv}2+K)j@`<#S4h8phcxblYZHB!iY?I%3~j@IJ3BY9wzbm^POj??!?WJghCr$2GK zn7Hlc`x!EEJ9IK4JAyK>;@D+ocuA+7FaZGdxGn48w&;?lrexJA2jUA+d|r~@TcX^%=) zvC)dQgsXl^mD5^($S3Pv5LtyX1uWz3dixf7c1J;EyRTp&D^7c;T7oyqOs{R(fwnIR z?8_uK>!)v`*r9rf%NM=>6ushHRjzbqlY>4^Ylm7|6a>A;#tB>t*`$8Gf<>kXIkn zyKgA=WwE+tNn)3l-Q;bx;}H2_uog%rDGcSJr1!74}b{8!AmwenOJ^bdpB_$bi19h3~K)wxs zbNTxTf4j2gqVF>|@Cko6vo!-5J$m4>q(_f#J<|T+z{I0_{4b@i@9iLdd?&4v-^Klj_&_^`J#&+hWXQIFw9o-@|b_Odo<#1(7dM#!@W*$!tYh`K#oR#T1h-_d z`CwJ6UwNFuG){KWsgJBFH51M~mtC_4X%G=^m&zu4^DSUSboz#f!5<(4F}Bp_{{3k> z+2N;1fwR3V90%kmHMh-zlHA%pe5PsXkr8MeKwHV|)?B`94yn8!Gi>wxLh}5RzT5sd zF|^$261>u1honoZks$Rc#TkJZ`aUR`nkdz!vpx$ zvIE^D8G4eT&&5_=KzU=q_1a6M4eNg+F#mmYZ$&$mL);S>$rClFLD~VoXIp98&HwZ@w&Bb(dLx zg=|VUQZ3`z$WE7sUniaeIP!8QQq2kv$8HTEVDbbG_UkIozmjR0GDLu&S^;FH>GO z3IpOsP5b3UcGZ;ZuEq=f8d1{Yq}#{^$nJMxPMhI>_RnyO^L~E=EU5a}m5K*+p40^9 zayEbtSFcauszyEZjv4Ll*xW$tYI(QKETtv~&Db92wht1X!5L?~a?X}`YfyAp9{o3y z7Jh!wr9`+WNGq>@h5@16gJ+S)#2bbI=JhK zj$?nZqDQE{^?bR``wKH_qg|LUum*as$g1cj3$#QQ=#D<(C196n)OZL>1L4FH%7V*f z`=It3TfzdB%_QE=tKI+ zjZH*Huj3nRuWug-Mkjt^kv$myK^~T)+bnySEj0z7yCXl&)Wb|h`_^StfXrj~uunqixXWc_c?mG7m?E6G)8yYB=(SSP#lEjJWev zcPyOxrSR8${~9Gri3^sDEy3(ZoSQ7osK&u|WOp@eyU0>c6|On5lj3Z6;m`B6Kg<`F zLB#$gpjD*aK5dkzO_8-&D-uZfI>>92UHW@~YPV^L{GM=V;$m|Pu;y<mABP#5ItqG4C!Y$l%=WHaGA=_qlDjYqMkXIUv$Etf*t1*D?vjvy+4{dt|8IVVdZcRWNXetnlDFy8vpwbpe$aDn z;CcR<_zMK(Uq&!fzx|Ia;nywN%VChlPw`0#P-JprK9F94A)@)-b`Misk)mRA*_0{0 z9|d{y*FVegW1c5)*$K(<6wbO3lw%Duvj|p}qE8~l&?i%Z@fZCY&?0*Sx+>H(Hthz~ zdRsQ%M6DGXeT94~08jp^O;p3qw2<2>H?*!idS0EE3dJ9@l6H zAfFKf@@u!x%|E{>1fcxqY7|^8|D14Lq+Rawa9yO`Qgc9e0@takc-{sXr#E{@M4+cwGN}}DeBNE@7#q8=z`bomuMFbXa_{VwiiMecKvP* zSGX5@9vB30Kr1*eObU)H*vNQglCahh`e8SSxUtl%zZRJFV=Q-KWWmhe-g&iH2qI?5 z3i<01%Q1)FmK&qBU~P>u(G}Sq(8wOV9bfRwpai_yy*4$2UtbQu9DkNB+~uzvH@DGA zg-o;TW!;b$v2VX!X!or+5n!h1zpSZ@P1e*x&v~zMR~c@5D{sj_>bbBFRcrCRmKlr|^3Px4_{B|{}f+^i-7fDv- zHLsI)aXR9)2T4m;Wq<`VXa}eqoo- zUUfW<`3A(v>Ie$fIYwWr2npMS%pe&T{!3G2R{$E*^dP*GAj&VXv>r1l6{jw#q1s>t zbOg3Goj0pl}8VJug0bx;?s)SOCazqH@}O70R_maeLB zw-!^E>&iUa6*mii_E!WY-Xle4rl&kAsYD56*#l%OIEZH8(M*&Ji$1>Ryna4daf(;*LURP>9Zo44EmMPjO8z!3X28GWaD4ltonequxsTG17-QcrU@?ay= z*~3K!0{!_w7*`&fi0EB zpiSSF9gfd3-|=^fqjZ3hPtBaTDCemIs1J7f8GQDHr67W2;&Ad)a>GX6SOx&0~0Fo$Z`=!jTbv z2pX&ePfO7hZ%q1JT-7uWe;KLq`EaQL;OS&i1KHPE8bd3v(tjm^XCE*b-vFtNcYmfYA!9`i-rVJDlmAODM9P9I|3#6xb_y_eLzXvG{!MNWd( zI%ouEOS4iyG69Y%-83h5(Wv}RE|X9s$=cWCbD4BESu5RdPWV#>3XDw>H|=tiGe)~# z`4SR@FFV8m)!cT3!KF3ZDM%)yR!4Ir6Vi^F86<84v*;a5E>%vaU}Rllk!6_w=yRt! zh5z{k>x}#&%GztOyPOKmp#KsitjXX7Vh&HpzXQqIL%b8Z;Zk4=%r8^y(GAIi=#pEfCx6lNfbcvBY0a9gx3yS`J8gVJ3VB3hfv1jWW;TR$tuB z+MPGDcN$gi&RCtCQH48vciBzkOxh^Z?$CZ70_ zfu}!OP8)XqS@RY3G z!4FKDOZK2B6HaWPCJPL*<6myDv}0CG+#vbGvqGYAj>6if5{RaW)nib<0q*1^yJbr>E$JS;ZFu7~VDr3{2-OKm^t8&6mBMEcB(Lk~8~U<2mEm~2W3 zaHRS;*|P5#goP+vY)F@u>FKK&B)M!qH6#_zi?&DSd-l*pCB_%;?nRcl+icy#DOs|| z(d^>-2c1oM5XbY8t)gU4(K6XBvCYy~KbULCc@64^124pC7U;3>S#3|j1FcziWys#6 zq63&oNFeA;0USmLjrz#nI1iTzq(KuoC0h!%V8_OhZXu0OmeUZ^>Ow_Ux9jq$sM4z= zNhDtZKX|(Zk=5QRrA}Lb&%+KY-#G>*dz6{edk9QsvwU+T`i4?p#|TrEQnR3_!c{aC zO4g}Hwg7aRKE&9FTpXE#esw?5d>y#yi z6g28)QlGJreJX#)c-g|?D%m212U;(sF{KHVzpx8(1`K$z*Hkc(7q zlz;_F21t$?rR{w(;36qw9V#rmrGpHZ;8peFPmZVS@!Pvq*JHzZ76nX_%v;UB$3X_P z*dX_2@I^{JeYW0HYQi4>D@bxdK4JdGm~a1DOHH&v=Uok{owV_Wb-j|cGH^#%5+ETPVZgV7=$u5>h0OMX&)e`s8dj~0aFv9YkvVEX>0RZe z!rErGzybkt^Cpgeok@ft*E%}C%&B<$pvY^Y8nLb*veqItnM#@4)1E~mVyN70wOt$iz&hdn61*nF?D&qbR;m8q9w7+BE&8*^Av7OWYN6sS*mn`P826$&GSY z7S_*;Z4xLqX0YPx-wKwb4=xKVH7wmWfeV5UT@Y` zv{cG$T8ZL}L=PXJ4-GLhqZ?(8FCt&p(@t2CWy)0-JY8xqh zQaKoWGU+608yGu_vVd%kl-{JfAXL#CqWw!R3DS$6CM(Oer=`p+oWd}Cb%;=);uLcA z&|KEjKhS*j`6q$G?%=pGF*UAltq2spC*2+s9fR0aZHa&J1})^Hy%@bfKpu|+M>>G# zD30NzCvd+yb+{7%uQ@$s>0(y=1^~Wx2s)4yvuJiYqbW00gU;zRkUk8gczxI5J~p}Y zaQl+$bj=m6dRulY@yZ~IPq^Dt!+pcpO*g=4iB1-tQ3SP>(Jv`AEb&8sjYQxx<^930 zAf!9a$SXo-lvE*8C3yXTtq2%fOgDs^SkEFm?#J-aLqJ3NvQjhbbViND@(5LlKocuU zosEfuJI}^xjB~_`Ivd4elOTEzs_qcI_}E3c4cC3tBrQ-av3F1FR2kQ8I+lD?L_}&c zaod}sNqZ=RX*jP-ZRSj=>lk<}-^i`PjOEA@AsDkDXy)NPXLqPJq*O9F-`NW0zxCKT z!CBnNL-OSxi2`{p)wVAX?ieJJ`Q!c(5I>R7J zGGVARysV*mSuY5h>i@8hqkRe8)g4FaKzL)Y)Px_;mHXm=nOv&KZ~p$2+!r;u1E=)9 z2{(G@V#0_EPKkHdAYBPktI0jvo#>WMZxS^v1hR(n`0Knxk}(&bxYFPAc!gT~z{tS1;?&QGx(tS7j8c)=tT_jX@6R}}Yl@WspVyaaM0 zIpzkxiO#+O71*&9^{W5vADO`E<)>S2)IOOR(AAjdWeN|;v_vm+TzOoR*w3dwg@+}h zJ~tUNWC|qBh(KR)t0IF^Ic0K-i&CmUb9fgia78TFBix%qQoN1=HSPvJt3!@%Sh@NT zPc5@!hpwQZnuP3Or=|K)*~R87b?gDH*;PIRCw@Bn)AyUytzG)0dncUO)zewg1)+mYjPaob`N#DR1LCTKD-vK!Or1w4gXDscnKM$g zv-8Uz;e}P+UVSRc+rEuQ^CThT0?sW#gf=Sz4BEW^$v4n;6mEQz`s6+ko>%(aw8@l?PKL>W^FEjr20op$pV*O8xj3ylbA_L6>X;e>2PJ+wmkrpQxjqw^F5V49hZYaItp9WuSt zeEQL8lG81D%E{;8pg>wi2c;v=p2y-1^BUQmK+Tq(h#{BY*&Qvj@bj;PBQ03)Crg$W zzT(WxIgnW#ouC#zh;p}?QG_Q11)ovg1qEAZcu<3IcmbMPk`wdI)4vC^PR*xnNVH^0 zl^XC=ilb`fYc@p|2Z|!A(YVi(VXxs%xYC^aCcqe3g~Q4R*u+lBVgV*fOx6Hy@yIF! z%f-<<-Kj+6=J*#6{}nx_5kgc zG7?cRQsp7&SdyP+-nF7(0hZTKY1+0>b7-;U^tmwncj>gzAsJCO4>ot}hZs$%@UkV6^bjX|I?gUOg5SIvXm(hF7$R5wu_oUc+dnZrjV!<=U|4&&WRr$j2R*cXRAaH zpHu!EX$YDn)KhAHg?yoM<8rA}JSfY9RW+J`q+H4v6f%F$6NnP-h@^>NtDhPKWZ~RlP!(sBicLjV2U5}gb zWMU;X;WXNkQvIH&;P8=diF!trM38m1qUrhN@^kIEJyP2p_DdnyC2b0E>?3GW$~5bz ze+}Mh4&vLS^=$eJA4AKX_Y4D93fLX{38qfrM{~i7&}@e;SDMZ6mGT6UZh@_`>-Jjd zEBb8IB6iql!iYBr`xr|iefiuPQHL4xV^1AM9-9AHAo81Bz|*WF>9`8D%O>#7bN+yW z>~J&drXB&cq_#7F9xT#st@LIp#iF`a2FVThS2+83U3q0Lk*X7w@*KItL^i**23i>E z89l%J)U@v9d3pL$m+Q(ebMT&4Vu+JUx{LX2#W#=_?*5<^N)0I=lvYE?t6@7Qm+Q(e zQ%eo5i&Y}}JR9UXhssWJV>Pd0{aJ97oFwfgBnR>O20_p0f;T08&U2P}mb`Y?q%t9! zBAra!q)#MMGBHQfQV{{WH7&hmgO~GVo&^QU!Q@Ior%|j+5p}HnyWC}@-cqw0Ccj{( ztxls}OvFY?&dB7wL9b)ht^dQlE;lVtXZ-hDCIDD@WtTzqzo@8Q$ut8BS&()hg~<(DLaf!mu}guKbl#JD_~d&w%oO%g~h~LA==597yxq zVkP0i$9aUDX*)HA!2h;dHtF&ex=DRZ&b>;|^k-u7rzgq1O0v+j+^d#r(%abY&HwC; z{m?9LW21Z`n_B89HAy;AkvWt7{0B!Q3tF8h7@V*d=gAQGt*-UK_3$@S5;I6OizX7^b$f{DXdxW*T8479BfU#m0}_<8Ltg7f_LZ7D{}a43yj5~lE<7p>PNLGs z_NO`EXAxIOoN1|=@9dJ-h13q@b@7(qQkokgoS$k zuR0W*)g@)Mx~!9!v#D%G!tJ4D>D#1SI#%DC*IXhuDL1B z%fGooWAHEdGEThXW3x(Flss>>@9IJ3953pT`R=Lgxsyv`&o-8 z@;LBB*#@Q*pE6mcCI@#(?y~C{2P&e=1WDm>BDqXOl3UyvRpNU>6-l@|Bha$?M+mf% zGpgMg^~o8F!!OLtOO`aEKN_lUdb~!g--eNmLdZ5IFBYE-j-J0ouAIDg z545MSG|wq4t(#twS@SsBO^a3=<9drga(L|3`Zf+1xmbS)k?KjQ!&SvXv8p6M6dP|R zl5cFDhR1Ow&L7mcXj9H%!Lf7 zN`n>=WbhrQWnTPK+|)>TbF{W5;SA1O*2h;KX&T8iMYAh1 zT5qMpNLMm^#N{>m^W!)Ae2_+0JMR*`H&I5bx;o6FKYs_9SGK+=o!|bj&|G#0LUYMf ze&!DR)fldYpE0lB!zov%5!|C2Mu4=`%v&z!M#VHQx@9wk<+rk+RkE0Nwb3b-&gcZ@ z2BKFBu~=Pzrn3gZ5MojApOA`zd<*oKeJ9)+4v|_>+DaWI)6K{4j0m&}t5Z%Att~q4 ze^8$XDAUciwvPz3jsL%|LE*|CS<}shZ;2REGy#q!X7zMYryXg;tnb1Gw--X()+FRi z<=m>)gSHSoX=n3|=7nGQN0@(bchIwo_O3+vBklZ-nX6=CDUM@nB6*Oz)rkj4 zbK&DT;Z^u#;=s%kG~Z-CJ>*Jwvcxs=&>hWZnU&dvUx?*cxm{ABL^Tgr457wk?Q%Yw z?6ELYu31wcMX>m`)CdF|#GTM^-kHAU%#%{iT-R_;(fUyi(T;u^qINpkUI-s4hcrr% z8*`=Ijd}W+ub%_?6#m#*Gb=LPgp`5sbrba@O3l-kcx<(iz7}>B&+YIlC97BmRC|xY zFTBy5c!D3Ink{m4Wk5uS@O)m8D=%V%q?7-+2TEZG?DB<2k=0JmL)lIAIWXBidd^Ib zboGW^JMi-k`(17$@Fu9bSwE$pLaTr69DCw5@`l}egWO3*N3TPv)fK}JMBwGZreoCW z$Wdy(_d`L^uYc1stCEN2KXA_@7k2@RX8r8AxKGDHOY3YJmyuXCYO7rAnS6;$BhkMV zDyK@^Er^ozSbu&7&nsG{lQW>}icZ`-FV?wJ-`#kYB0Nk0fluT zeM5b+Ru+U{cGECBX|I){t}Bxw_@r@WNojn zeJZw^5O`vgRBwHXso~3#B*TkTyYg_co4AQv4$55mc|D(QLiU1&1%*?@0~7lJTo})8 z@Oru>tCVz0NiF*6CHA-ND)MlCA_Mm_!4pbs@X{68&4~-WG@%DmsgbGF=v1mWm70)B zP4-eK{}*+;~K9W_CUvu zC_LVdkg>{+DEqeE5sr=(gu?Ui3vbE>fszx_bgQ}UsO_criIltHcTe~3hM3NfJy|PL zW7Y(fSUaOjAUn@d=zMjdI3<|Gu5do8ENA^U1e+^M<}8zSO1c6$M2&b@EJF&G$&#v6 z;NV~MtKpNN^N)tV4a)k5^M-wU@GlhsdFqJ@6lmRvnaDHV{zJPPtZdkwRf_2VwYK-0 zj8NZeZ6Dfw)Gf5qTOjulF!QSfCIaEyfP3B0aG!BIiJzLwx4|yCcrd}YuuL9z2&>Zf zZBf+7si2DtLYv2}6mMwT&1rJ9>8z%t4$=Z6BS(%TbA~TSCn2Nfw*XPNPjRk&Akh~E zTxgWWHP29v_hVelxi1LO+32`}W|ASju%N>ZneN?aENwbZvI&_kThfy0$kR!~kmwHy zAsfMbd{vnHf)Du0LkU;yP^v_V37kBJI|{T!v|u>lDk%zD3nzv^egS*VWnMJy#1ird zCJ>+~HGhsn{x#-}s+Gs##Pt+(bOxNQ<)0|iRPxz%LSazL{A3w4S2t9e`32qePx$qf z8|UytZ$6TzCUFy={>|sBlFyar=5iQH&038tDK{T2*3sl|j%o4^ieVqzxyedxGRiA$ zQu5R!?&8yLGDaGa2A`%8K2~!=l3tTqtfR^GH0h6T6}ezkG(e804Y04awnl0YRSn5h zlUU8C-`X!p+vlcCTazqaYg&xfWc4hb6Oqec;pi$t!@uIhuxB~l+Jnb}mtUKS%E$m$ z*Hg*LLEU%zFMz6gq0t&G!Hhc6a;iQ@yktWkST>J$R$euPvvRBXKS%+5pbA$_6{O)c zJ(Q-=5kDWq;b#!*X+b`vrWY>-){2{S^8}g_zm;L3jt)q%Rj7GZ;3OBoly&(wE+kUf z>EWvTC|xzA)e2cve$&3jcpZ7hvMt{D!{>#O(vd7G|?PrE1QP@Ir4gdv@eVZi} zY6Co7PFuL|lfm#0j4e4jKm;10S%FF3HYY5&Ajg|>1g{(!HaFGopuCy67Hy@3B&GAC z&XE&ZSm}vo}7YY|3cFR%MNi? z7N{*dh?FB7ewi!#)Ex&J9sTAX+8cHUyWmhM0`9b^z){8mQ9h?RD;lNTw4C_n)cyVH z{qA+S$tj228}VXml2i6NSMNrnuX)@)8GCZde)sDAsB<7W6r#eK)jLY9mQFJ_ z^32j4t{W73rZLn7>1t;kh2n+}f>~QE8I+}%H>snyl#rt{Bo`JLKWg2{u_4cKyq)K` zwx4TuF65rPaWTuK8evr=(lo;E;wNYm0KS71{KoMf01IBP!UbP@TR%(6T8LK8?VnsW z2lz2XpbmDFYMnP~d>$bkyAY_&#HxcULTvaM^%}f_>s&TF=p$LLR}t>ff2>um6X!$z z{cZkNxW6e`?5Lf*J?IKtOBKn8?JO4TvyftsRfMp?j^h)P-=#ER)qHXX`f5I`v`70z zsw{11$-eelsTQLcfxLD-^)TipZIO#!@lw~b6Hpxov{KQ6zaW!_)B6@4P#x_O9iGHXH$HrtZTxHt~g^w zL_-XM@4*taS@|Y5bkBlQwn!@2{TiM%OIaH&pkN|k}Bo9w&_Q@ z_?zL+i%WR%_$$QwIngh~4-JkEEPt2t(AKzk{8b5y`0N0PzBROCSm6W^%T;*ubl7epj!uDV2?_W>whJU94qktnQ+Emi4nB zOS9f(iPc86c$f`Wt<*#h)TcDjGhFqUCVGXd5}L>fS7E|MW}?2$*91Y|Dl~yR@2_ft zkZ-dzLBzLfH4!GzoFoq8MSKhi=SHGzhO0(Mvc-G~*>XZC?WD>6jXL)3{W(PcA&>y! zO~w=6WU>u!@;ijespKvidH2`9IyaWL=-%Kr@4Vx_Sg%FBE18d0 z3DIzZI=aWsO|Rpt^XK0dJ9QqF+2O27-ZB5lWn(+8(hB(|e|)JDrX#xcjzftPha{ zzOFUVx7Ot+uBpoy@BVu9t9FdH*)bv_ZJi-t`UHJv-;MuN*GY!Y_*<`#S8IqdtT8d1q|GyhZl~V|TaY_Cjaj5$u^}nps~G98VYw)-QzC9|T(W_CoUkj#gSPm44*Cq}|?ayM3Hm zu$(Y`yVjDSwfsnG`TL1`o*SFf(ew3#X$@e4-4~d*M8RoXIyfCWhD=&tI;_hWGPU(H zrS)%}xb<*s0khgI-Yl-p?$3R33$wl+#uwoMiUUqIv4dvDn}gDYzXa$1eV&s&k4F<~ zCS_hRHZwN*_}%Gt{O&w96&@x4mK$i@MFZta+H_)XMQu?PY3QiD9vo;zLM&^Y>Q&7k zR8tAu_38ZZ(gtOEEo#W)(lM>#%MK8iE2)o5*rTdB=yMv$HdlSRbvM9K6*tcl>~ z>@Y2GiPJzuy{R}hGC46vswR}mD}iDtXU>?$WN&1QJ-V`#x_NDgaHOpd+4)Z54?c1z z**iHg7bwGeNt#CBcE0pui}}YtPJ##*9&xg!BRCLqjjul^CpI$WaAMzKNJ}gLyxU+w z0k^@=G>WS!dChZYEOv2QszWK|1tt#(etCc9%xS?)h{;W!jCNR zHl7#0!h}?0GS@OyZ>m^7XM(J8EU_zUV+EM z{I`^VIn6U!LXkI0)IW})V?3Rx9Z9w`H8@jLm;d%_nf3?s`ZWbrSD zi?*15cgF*OJmJQWuagPcV@l1XRWg^TcsLX>*`KSiMKng(2i*i_E-I0t4<5Z-+V4;M z8PP9PWZT-`j#In!YIV)6NEJ(r*)bJ=6A?OBYVNBfz(lEb21-S{(usRvsJpU^TH*D7yxndKO!HQE$&SkewJc$YG#60UGN1cZ&ZnKumE3F|Y zCw0Iql}%Zn+RdU-BP-_X)NV8X`KkmCDXj0jU95erjTcriz`6oBtrEDqH04G6l+=F7 zmHnb#v|G#sDAVKZ7k!;l2zdFw#1Vj~8UQLYIVv?cEecMXNGlPG`77NId}f4%UBTmn zi?oxXVWSfyLc*02A>j&%kZ`F)NEj{=5(*?j!g&%QfqOu1bf82?7$6Z6`bva^QzSw{ z$Qe(-twZ9}R`#>dq_?6zbn?M{@Jr@tLB1GgKa}@n&pT*~xxg0AKdw0hy>?Qwvyuud z60ceyXF!X&6U-*6DfjC(IvI^$pLH@Ce|(O_k05kJNJ2;SkkAo5C3HkD2_2CWJ*U(R zY?BLS5X{(LrZaxH)2tkkS4z*H78v-ox^=rcOwQ#C?ATJ8Gf!K`0icfLGHC%WRQ6!o*SBM%{^&0! zfaOksS^E4!&YLw7s|b8g2p`A`#K$G;+>#^WSFWTkT%|M<{v;573Y?0gWqTL>tOzFq zGyebCziZSfweDYWEg?=NPEB_zv1f%yVAeU2HP)j<$trOv;S@S!iFz6Gq%~u6O3h1} zaTU*ri!zpYhAn0mhuh}`&exu{d%D6QRyPz0@lQKtCZT#Bn`P z0IFun$j=4f&%uIPtBxnSSXsh$vim$s&N@or(*=2tA1z&oh2IxE9&Xjp_~Z{?r$TBdHRBaH6~(vexo^C&oY=@ zUEtp5KslWlJ4=5C@`*H#Kc?XV+ptxS5&3G{IhF)E#$@t44_Krmc5|{gUr^n>-xp|05bh!#DP;d`tN88*4Dp6DcGoJ zqBWr3^?5YQA}go+Vu@X2Z?z4uYccvz&7#x?I45>mKxNvrMgd zzg^51Jq_r46LyF}cmjJ0+s)&hU*FL2T5p)yhYgoAyv>=5^k6)JUyjs;<3InCVNJ}3 zg?$T?@wyY)ee;bbkgE7g%+rJA#4q9RHvZDhGtvw-GBQ#>GSbpK|lLB>=ye>IoRZ?78tqvzdEFxE$7W4QA zCpl(Pq-)Mk1P|@ufGLU?Ux~wd%KPy$L4kX0)UQ23lko*Q+9G_Z-_ejzch&gQ22nY) zt3|Q-A>xs!qH>q8Yd2^;t5s21BCqMV!c{W_tISyC%wB2Fj6M{%p}K%&T;j2Tr<;oi zzk%H|ZnBP1m-O8TUuG2}+lD!jm8pD5%&k|YYf~nbbN|B{_q`|iz_BVKWUrXR( zdp@7tQn_$BgIj4;ekEk~lA6d;Umo=Xews0TMIN<800(*0a^~X1olSb3O%V(V9|OhF zjQN0IMkk{UI^26qU+L2ZEzxWJkQShim+n@=U>$d5PP~iCgfQ5P;I3E?fMcRdJV-CY%po3ia=Gkg_bEHDH&2OXuhAg3DP3FVudCB2q0#;;u z0-;?d3jQVrIZ`RLfypl`H9y);jldRUiMTeB#@NfmkG9U#F5F?g9NCHX?8POPP{)x% zE7QwxXDo(}?~JIQS)KSNNwWzW%y(sc?3GbH6cZr`1s0Sk3F&P{JShNzkki>3{kpm| z-%T~8=7)EsW-)v{OSIAOSUd$TllL|59zLsUUSsClYgt~@u>!%V7ns>8XMo@S#T z@^_E*gw(|klJ$Z_?D7y^bfu!NNc#a4N2G3Kr9Z4>p0}EF*l!2)VMg=}M5JzFI~nYp zPHNFr(zi0CN#VrU>_FhfNwV$WX~ZP*3362;pQsBCu>c4ZG}{O$X}?Q`?#H{?OMYO{#%wwlqqbdw&#H|^{p`gzR5 zB@WuQim+MlRZvKeMF;0KhDE;v=3~gC6Ylqvn$fLPC*vlJv_^Z77xUW357c$OnwRD3 zrkD7dcUoyQ`bcw;iN$}KPhr<&&snkuW)SOgmZYoutO5Kr4-IYp3 zQ>lAXsRvT2%2cW)bdp7iBxK3Dzz$=TAfO*Nu}1NQtMKwx>PEV zN(ED?P%4$rZO}xZpO%EsSCa&ibrxW^ljXv1{ zBMBoduRI>Nc`AU}oCu~;p;Rg-mC8+}@=~cGsnpO^>Jn1Ol&EiH>e=X2syLOJ;HA*0 zCgte33ST)lurG_EyXd5JYD{2lCO>z3Kb?g19&t=_VvqOeT=5OmYm1{Go^<8?i->1| z`JE)Otl@LslICJ%db-8A&Ba112jZ<6vA@(wM%NVsl4j0H(pQDzCL{I_Z1;ss!9Tzq zd{YUtMZ89I<`hNgPmh)MlW%2Hg*-v;l23Cn9B8j%vD&fzJDhLri?`-ZPP)4^V?Cb) zFuB0#?M}?;d;_Vtrp&x~AGkFknNUM>v<&y5mmHlItE?o0L*8;G%1XMr_!p2_yi`1j zbr3)Y6W%OWMtir{%G{f+3x{XG35{>mm5uglua#w2Ba`^XVww!dvymk9nWLD2Hm`Kt z!8}BtbYM8pb}=|{=-Zzckv;i+JVat`PqdQQxu~8GoJWP-CS%Wm&2oBpyBHY>{Ma^7 zR1;;YfCN5$c^dJ!p0${c(@pf*+{6a$Q^~hEOhQgWTLmUn)>kKq}js8%6g^&jQ6&xCQ$cZ&SM0|}c za%AyTsf}6z2z#PQEVGZ~rJipX{El;6aYm*#k21z0jX~@?U=Stk28Kg201QeJ!1K^U~Yfih<0Mj<8wIA!8h`5_JoA%%2o zau}~D7e!SaoLKnFkUw))#%4ni)b1pU<))m_>6z~ay7vN~T2PvGW=GR!(=;5dMoYLx zr(k<{H-oFlMXq(vJUx~3%kxr-Qaj0)Qj~HNGW9Zmy>qEWlz9JnYZm~K9Hr*Mdp!Vw zLxjzVg^owb3)L!w<&mq!N>Lu0MI&0GG{-2U?#5h1mP#qP*}2KC2J&_@=D@X-(lP=qfF1 zD6A(lYS*Boyzsi|}H!?c^fK z<5ki45iAsaT%?b~iFawzR_3~kft_wE*`cN87uN^`$zTd!!RCfh#C>;wn3u>CSsABRhd42p*Zt)6e0e=l&VBD)`#pKnO-X@V zd+wmnbTgJT-acu=Itr`ZK@zQ~f^Fh0tXs+iNI)W7^&u5C>pDr5h4|sCltfwuoy!#+ zy8Ep1Z?TSc?)JUogPG&CgTi;J?c)?Zp5k;zQSFFxO?L^}_$7k&P8;gnVcVDG2gc(?XpdZ*Q0(fD_^ux$CkL9b#Qc>dN6g~wW6`EbgTF<6{5C- zbDDU9pG-3YSgt_1JP+bzg)Fz8{Ly)%?iZuP*v;jyvONKaS-cYD-Hyb;TVy$XTF&FFK>cx8HGv8nY_vQ@4o~Y!IbCrJ` zKXIuFuhhiY#m?+QuxTcWcHPk)u__Tn2(>QLB?JvR70(FV>I}Cwu}K+Z_|f0x#+bl!Tnv zz8)F4QHb@FsH~Tnz31_mZf!N=n6=M$U9Ve=;*$hOh%d~^0@Qr-rIcb#^QYa!dhKNH zr9ADHP@vou7}5};#T?h>`&k7U`1#!S(A>c9_}j(bANl(We;@OAh`*!!1(^|*M~?19 zFF+>bh{ys*pEZw&x0dR}L%@5Jrg1uCHOadP{7#JKtrtHw^NKb_d#=BlyrgiVf&SP! zp*P7o71QVXQgi)BeT8o_yE^fp>>YGQamq=m)I2kv84Q4S3S3v-K?qHwRLZ}NVwzGj zektxRGz~{Bdu>MR7io>WP1zaAtP%CC`TTSr(KFF?g_bkli9k(Q!ViVC@3qSIK~>E@ ziroQT5gaDUY6t&H7hL%TAr~7b{5TXDLtYOV%>kDT_@?%=3?fTKMwd(%KPj1n6bwF> z(RL$Qq;I_t3twB&4H{hz7&GvGPTQ$)ujCh9kb}xU!{+=|&M-l#0j=T`i(;Ax=$AF( zJ+FeTR|#s}#{ktBNJ#NC)VhP87PVS(b4)lKsM%cO$^uqDCW{HSvI6f_xBHZKN;qxl z$7$Z;SHAp)Y>?hQ`zKUrWrg*7&7z1J{I)JE~SlG<0=vUE?_MOpO5cGF{!ftLe_w!q` z#olTAvbdm`Ei83_a$KtX7t_m6=~BL^qrBHUofedfn3$vYr#hGF8r>{4=Uy+DDd|tAF>r=tev{13KA0nCIa7x^Z$Zf9NIaG|oU4XHu^e=WZ8dIaa(*70&?3ss(o^sq z;9dE$$YBG~FO+|uuktxBK%M5+`4kohrI#T#K<2S``|~0?Gi#qcHPG~kl+3tUKs~*_ zks?YxQGJ>rc81jVSS9GX{rO8MVs6qp<)y7tEy}Ut0~Eq_7JVm-YK+~Q(clv zC;Y|-YU8759QoS*uVJDMr=-G9jJ-&GQB*EGqy|{~Y9jl6S=(U;fOzA;*F4{Iy3!Ud zna^o{vTmrK-5yS(^5Hf?PB`hTX-d;)-QzZehDqh8C`8 z_Za=MhJh(MeD{E^wu!$bpIm8rj>%^qW*ygAaSr^j(~F@pwj8 zBql{iSLR)i9jJUT6u_kQf7GFXbm&{(I9`XG2XhMFlv>{_Xo)vuHMC|HJ(wGw^lGx? z2wUnjY(B$$_i#{pZf9Q~84vY^$M#ldBL2y9Z)uu1GDEkgXX(Y}a=NcBj(x#i|4#1; zu6k1z{>Zy&Yx(#V3`U$L zc4E4X8SM);J(Ww~#IzgxdF4xb`Aa^FDC?;kyJXIYWusl;Y-uY*MPlZOWkfk|xAh>L z+wY!2Mzn=ex6F&*m(wkFrPdR@hzh*&ogzPuOA|7^1udLumQsPx!rfxQwHY^W9#QYj zgu<&Hz|^GfQ2^C&l{gYTamRvIcs1Iu*9PmZd|A$X*m*WFX-i1*bMX*v zs&~qbfeXb4WVN<&_5Comm2Kfp%xx>y5Yr#>5*ZPPhWd4+prpiky8Lq{4ryO|QyzHj zViS5B-o?}*rFsk&tbu70czPdXO1MhSP}QD1V*c5eC<*rlD;qkYbm7>@O+s3;Fi<4yT=?@i@Hq4T+3#*UbI5B$^KSfW=Fz+{^#tCHv^ z#c2DE#w6xYUTkQJY*p&?t*3=LotjrCvq8KxC~)tLxaH;%suJ$QrNFZfNH7DUXUIZ# zi{;6@4SvhC7d;}Ep^ilizc7}o+bN<{-CLBZb5W{B$2ufB){v>2*Jk)Nr|{FFy~6iN z=htyr)D@y}D_{^>JXtHTu%!86U@#nrdKhfvsXhkt`w7G_m0wKdSnKC-BShE|L4~ZC zsL!IKvswd1u5lx~*xghijSTw)Z895To>*Qt1n`-4t_MC) z*W`}Nfe^np7>M?EdZQ(F6K$Bw+FIMo%=Yu_fwS=@@~IOHslG;Ic=;TM**w9toli4u z-`C*qNRnQPmk%w5%tx8?@qzI9j_;*bRYE#sF`^xS>XigV49w|Dqbq%IM>??N`@S|K zONHw?46f@iM9KDedrhJc`P@l1nA%-0m;Q;;G~rxW_{QT#3q`BQMp{?JqE#&YZfw7$ zBuNaHS9-~n&5>1J@(JFo=5IOb6S+o~R63Lq%dwH)nkEJ_+U}{u*&5u0N%1vlG;$UCn7me6Y-&$L@Jzx-%w z<8_*SXZBDcUMw7l9Sw%ys2I=06&Oq6b(RoRxgL(zc&2}2`Url|n+V0x8Qx8Qhy)C= z$3Vd%VYN8lk*ni1bWg29cN+YIrhKs}+!OqhP#+dE!b%$SBBgA6hq^I_nlQ~%{w`YPn^9f45Cbe#pW!ES> zZL7H*og-zZUBT*DmVfm+ZVLLklT7l1Z>v%V%6T1oXJfsz5HTr#PQt;%-skUNnH1Zs z(^@W*t9|-%!Ud2=9V>dn_w9-n6HkE^{hwCT*Q;hkbkhH{ik8Q1PYT0{vlx)&PU1~Y z?=G4$N-yh+u)8&LpwZ87Fo+W5iBpq}b^cik;3dIbqM2 z6LyH4u!H1;JzY-NeqzOxD^^UsoGH0DTVdkbdUhx=pspxtjJa05*{U(Vdk1%9G#oWE z0J}9FL76dHcl>47n^UJ{|I58ByDN}{K-x2(u=>+tKJkFmuF_zq7z+ySwhDCdi9z%n z@iG(}X?obEK3g%oQ*-yzT_W$t?a*E;uQcZ>7&$es>-j1T-2pYrcdWBz@nXcAcb zYR@ppMsAiKm+8wlSj0ILk%tTzQH+`vN0uiyN;mMAM_?T{QkRSn!^LYy%#6jL+1a^- zNKSO9A*sWmTSbQ~d-v{RT*JKWTn6;Cbtgg+^``0?rKsZWyso!3-M`ue`tDrvvJb%VC%I!7*XE=G}VbPa8dY*oa-rlAHv>Z3?R;| zG5(0`B!sv+aDgb;k(yf^VKdbNcS$!y6-gCM%j(r|c&K~;%F(|uco&87L!AD}Wr~k0 z<-(9utqNJ?O|rgQ?mn;UQgz%J9j_US&G$GncKe0CaQs3ub~EL+6ssA8jSEz{Qd~&d z_S!uHf_hxEUxH@jkoHS*tv(6#IZ*jZwpg-gAOCHRfbm$z$>0e8Ggk#3O0pSzlnno5YWlDQ){=RUA;5A4)$#_rWV2O7=Iyx9OP1|+_3ul zE7||p3i|6z$xJw-b6bV5wDm|YN_MLmNRz^FhBxD%iAE z^n6L3*)os8mu#?WgQ`Y`)1My3BO5G;THy6s8r-$F9l+`l9VOd~N_O~~^E+waHFK*r zu-z`MWA_4cfpyLHpdc_gOuVJtb+NGfhsw;0By})}Gk`vKHw^)x%s;b&lvv^^o)NU26$;Z>)x0;|A3Ul-weeIKy98P0J-_mVB%fug zmQp?5`%S2y@%fIn=G1PdwyIaci9x_0toiehMO^@9Dov?U<^1KMfHOR)8PSD757R4w z2#ylrsz1pr`j|&dQ9Ed<;a@ujDLINi1h|x5s9i^G78?<|wmbL!=cvxIvTJ=007 zrDhzjY?KywmJy!NU{PG#nf4(PbnS8*WWAt1Z#!CA@Cv5>(_fxs>Y)ZZl=#1aI=aTh z#Pd6~!KodoZ2mTh-$P@?HTP0W9s_cV9$C6-5OUtn(;#!g9 z>6s_TvQ#f@r8+lQS85L3(@Q%@s&011`BjI84@%qAAiGz}x%rFE9R`m9R@waNvRw$VGRseK7+k zfE|+k@p&(b{}PY6vwj5WrpQ_tqz%y=1pDEHY)%oTE~|I89<8sAtTorzrt**LUs;ar zY`>{Zw^tAcCtt8dGO{vUC5EV&RRVdJ35^k1Q?xI7pIa78&e(up-RCP~3)e0l@!BuL zA`Z|{o=&Ox-7iCdNtFwi1d1#-*d)8QzxZG)UMACMH(j6vCQhN+WQ6R>Cw&D2L zL|%8earuAemtz5XKO4lZe*;qoh?o{OG1rIBG5L`Sd`oK3@0`!m>I{f2&Zu)TQ0XBis_d1AY7@hs)#*QGCI z&ox{kXVi_8$fMMPcvpO>uK|sH(OXc@8rfdg3ufzrQUc!$a`oC1#1j{5TC{L^>^riW ztSJsF1-97ovY2THAD0*O$ObF`Kfv;JaPo(o3LtOJ0Bh^@)0sYG8pL1O%xPdP=T%sl zE3Ms9du(m{vvOf6H8Xz^0+cHQKwj+wY&}l8;{xA9H(B5tuD}{&3X#zTOb?tf$xMyFnu*`y(130fUXDomd48kk6`P0z&~qeU z*%eu0-^@uj=Dw&e6FdujM8!bWRw_me#XdRJHMt-Qjw`cSvw*yNjaQr zy^ceF2TUp6P_*M>wyvFi@G>rmO!C5YvRKhGtzzHkXb*fOM1zF~+U{~)5ki<5Q~10L zPJ}-!pA}-q)qc4}e8&AXn`NI9c_Mx<(%}4xZ`sph!YMwRUtZw|`K}PW>}JFOtb}|7 z3hPHkn!^!_?uHQ#LQji1UK448UsJ6|O5y9bAXB~3JTmF{3~%HQA`cRugmGSnY$OGGtpq4y@B`Y6}PvP>(*FhNCYgVQKw)#TB!q74ISo$ECO2#1Gj`DZy^g# z_VFHyzKS|aUGz}!>1Uql8IIp9yEEUcj<7yqRkBL7Y$8~H$SMTd}zNM)+ zN3l(wo4}Gu3+2jqTzmRXW810sf(L~GcDv~;xXIF zti1P>0G;I#!yU)qiY5nR-IArjw%$A`3dMrSTvWqK1%Rdn>4}b~YJ{vnHd;*DLx_Y> zG9QPvd4cjH_dcFses;_73`jiYKfX85d1GycEJIJ|x*3O(C3~yU(Yila`Oqm$OgSr( z;_u6R%4{#(7q0p_Gv?evd|hWajTCKmX6A;+Z9y>#GX0KtYw+$2B8#*#9pi+TGgN+vLAhoQ?S^u&qVr1k&aA{N;hX=B;@2elk({1 z0_i4woGpFq^S|7~ZuF4L4-M^%1qqbh6p=U154BBj zvIJD3=K<6TGkwt)1J-&0xyAY<`f=rhtSIPkUt52kP7G;2$zYSwf6*Mc1g(ft=T-C6 zg?|(J>wNlxLbDq|X(t!q9?E~Hp0+nlq7NabIT`lEUb%tf(<+(Z6xxp3E zPEo_%-Q8f{Qk)gP>TD{Qnp3c~!DJO}S#a8QC~lky&X(4;X={UMje348s&Ht4oK~KZ zLfVa@1hQS<$Sq@P$a&|Dw(*NTrG-jVvp$joNwNE!*^-eAWQ%{0;Res>wI#`~E00FA z+Nb6)`Ed9MeurC|Xt%;w=ArgGDR|3`-q2*e4@5#4EKqaz!CzRBLHN$0W#%izc2-6E z$m#+5GRx!S&nq(*oG3qan}3ZPmLcs>J=s6K^0TU!{w&%n^nd63W-?OgMs^St9`y1W zz6Q|igk6vG1etQrk)MfbwZReX&t)V7NyJgbp?S?<;S3CHoNWysbOSYUXU*D@bcL!F zI({d(&52dI_xkY@4o<>Iu>Bz$dGO#Qz`XsT*nI~jc;Q2_|A)AD0gtM>`iEzd0RjY0 zfB@kl28jp+H3BLa)C3p;YG48qu*yZnI8rYNGvEykPDV009K}{DR;jf0RoYtr^equk zqX}RV1p$>>yj4`HJBC)M2mvDV|NYiJXJ!&YZNKOFzArqSIhVcmb?vp+UVB~cK32ex z2oDAQWzoQFKR9exbZMHUbwzOMJU55-8{DjlHU*VUDntpx(WbZ?Z%m8tRq}3XQ}C8e zfHsAIK{Ujwjre$zyP+@Z2B%4dh_G-C0ihTy0jUus9gjXsqW}8Tb*m7?G!HKQjPU2k zO0*72&85&8nWv$|1OpXCRBpVmyk$OB3F*GxP)91M(GjVfg)96?BOb^NxN`>w_(!36 z2`VL;g9zV)uf)il<+X=c!6}~HDJhFmvHjYmK6@NGAX7XHro&95qR|60CAnv15MBpz z3Rv<=E)zYe>h^Brw^xd{`?3mexx;T;W?`B7>>c!xw@i1Cccl!~h>vv_h3Yb`0>lS0 z!jnNjF&>@DJ~p1%*1&BZ$J+~T1C4kV!2WtK*r1GoF*b$BbW&V57CD6QCdI4T*&6|wYnm5u-oQqew0@sD0 z{1cdN4lw^b4>NoDHY(rbF4o<(LzS|-7PGrLSW`04H|;TY@EVL41*v$%Hm4w+-ix3t zuBNa3G+I%RQ$8^#G~P4nj9vEP&emNvqZ)3K7F~ed(@SecrCc3Xu<)Lo=c-g>KWZ%c+6G}dt|cLmZ@c{zbT6jAX5 zG92@GO#8#9HkM=f`C8nmJTe24(iA0Xelh)*Y&HP1_PM zk=C@3pk`l(`XbK2bj#|GGSnZsW4r6}(?K>&#Pz%0k4tVtO?foyDpqGAX!o-)nRc1pGr>WQI1j50b61B0PA#4b-~r>S$%=8dOk1QB(uEB!4Ju2kxEpi@yKHcm z3vk1yD8j5Fs3r=z$Bl=7jd$6iRhBKpwB|Tv`uT{CGvKF;j?>N;3FiUAjxe^G(45c$ zf~dFQv3QaDcHkWFKSr9{T9RpWo4DUd%TEi{@b*yd+rh7OYHRfaI>m`pgtyoFa$5 z-me>$+yr@avJ@DRirNiKla?9XI+!A~L`X5xIffL|R_U1)(n2j0xdbv1Hxz`xTbx-B zB6jGo6tcjEtt4wWUZ4j6wiZz-ag7`KZH22LvyynD&CeT`Bp6mthq$+eWpz7jwAHg% z+t5+=s27<|24&S6G>~FvbrBpNAY&l5?AMFi%8lZPT`QroCBv^BCAK0HVPaf`MP!;= zo?>zrE^2=rM>~k5*ZXxC@YpOL5WG`;fWTnVRjrhg9OBAlacT;qs?s_7Bq&ls;m()| zsq-E=zlVhkz5h}84-D{buFcDY3;mt)*v&N;uj(cCn^^Qv;4%h;MWuNmT=~xk3Nmz& zRDm0W7&UN(e=$}Dn0EUtdjGz32t_S$4STm)s4Bb%oki_19#yBhn@Q=epBv9Z4ekc% z)IK{>47Cwv??+Dcb%+^*KbioIT6ijY%v+D1d?+~Vn0Ke#3_RxDBR3hxynE%wXq7XB z({Sg6CF?*tSbffJHiPgIeejt~hNn2x6M5HpOBc#hS$BCVp9RzHI`7IJ^0aEWe0!ps zJgsp>p2oLlD0Zpyu1k@p=g@FGt@jDsix4>BX+xTP+sK79bTT;bu;9XuLOcG9!5Y7Nx-ezU>AWusNp-{0Xm)Ae6))7 z9xU=j3J<7?<)|z88*sk}paI>Y-TnY@07{ia{Tt40jzU|sUi}7iLdD$~lSn z4oNhppr)_bYDI)pAupt&>j-j(ruUPGtTF)R^o4yFNGw;H_{??I*EFn=@%0q|v8DAm zP9qUDEK=n{Fez&5UV>ApF|j4J{6c3*-K}oYi{NRVtz=0RdK0mlke5Ss-YX*2@mSU# zyoCQi^Pc|d)WsLLBUStOLP`X8Fu5+w1j8`~k;+eS2S+Nn9zw}#Y8EK4ZQ(Dtg*r11C(KCQ>k9bhcb+KFA$Hf`;Ud{Jz(`IMF960-i$Pn@N2k+ zj`s}C(uSDg&#my3`z}(sk&u-ea5cgWSgcL4;cVd*A$%3y>v-hH zdmCjxAO||W9Zj~((eLWp{2x)#hI5fsthIS;ZFMKICiKn4N7lLPv{TZ4KBN5}45E4^ zkL^FeC>Xm#cI)|sn7k4&tm4lI=m)-oPt2p!wMY*Kb@IYKUn^F7FGXML46ie&f^s{G z5EYd9xJgh!@!^reR)z~Vt!r2jRks%^C^T6?TxX0W3ggH?(-05f4U3DpYT{hzjQ>Ps zEdEuCuyH=XAwit!BRu={sSR!eGwmLDX*1F$!2;8lX{61{G1BJcLEDbQ)Ge$~qS4K& zmY>xdPSen78ahowr)lUkf##g+hLXFX z{a?@0&V{QX&h^w;=Kg@*kUOn&zR^#{-oSlpEDoHZ*Y_t6&U($srl8)DcBB{7ZK#?Xv5&C;L zBIvRHy{>fsTQmqKI+W3~^A7-op;KPWf&U$g4N@23yKWl{;egRdVLr|SxM>h7^@ISE zS|w}~>=jw9(T(kk)oYivtYG8{^;GJAQ@PHloTgc7-bFg3TJ2n#00b`3OxbDjp5+Hq z(D!lriv5e2WZ*P8G8@jgBf)3X_rF$9b$!v?!4sf}cb!UK`6C=$?A*NK8r!)a90mri zTOisWJ0OxP_o;6OfFK}j$%_zB?ou}3MQqwIe;KWCIz6t1+L zH{!6guv|S;b+fA>f^YU7NMtWBw4+NNxm~#&gHX86*i_T52!nb#rN_pKMKnr#xpebe z;=_0yelUjKH9V*L>0wY-Oz$0-;2jp^wG1_MYM`|GEV@a5vCjKqoLf(aizPTnB@)ZL zxAl}pp-kp_%XO#ZXsuV^0_@5dg%v%p(x?7$7J5MY6TJzZ^{K1-jZ#tB+(x`>AV&7C z0k(KctH`gr5PqqWSps=vG#n98Nnf-QC(}9bHG z2e^kjD5nYLY5n;UW-=`Ivbl+B7r0D(nxVU-Yu@WGT|>X-1uoq+yT4W-oUOXP;Vx8C zoPn34^IbFsqQBsc*e+nVT4MC@u7WNw@eOP*Q>Y=!L4^x9sLXrtdo{R^6qibWR-yMd zz;e42-y(;FsVce@y;S&|HOr&>75>=!0JD%RCxUok{5t!&NDkv>IsBtOA?;&?Ss4^s z=apKaGIr@upxhvpQok|iaNQaU)LsAc#T$&v0c!kNG>$`1U$a_TxqKv7i( z5#GtL>!-#Oa-pZ;r$m>g9!7W}ps`DR70W9{iCvgkcoM$W$(23BTFS1M4|YXGBB{Oy zr;3WJe=L!i)&tUpbbzALZZ#%}vyG2x0AgmCmBVq%#MMlUG9zFeU-YSN|I{i^Fxgti zIZ<;xD&$=UG+z%tO}|BvKx@F^g$e`IEL;gq(gIu&ZHgva_ox=o3;-rwxFTWh?*o?3y9wga}ttL#+IAXPM2c6z)BMArot zrlFP#6%~blpm75T z0KHmqd8SN*gAq6g=OOZhfPIKW)pC}pi*G^)$>&J>2CPRyBHJL4pJLLQJFvCy(>jOm zZp3Q26U+chorh9=$|Ys;zRfag00BlApHb!-K%Rk!+-8>_`XAH^z{UX|r)coP$ltB%Zt@4rF!d)J{K5K9SY ze1@hz*iUz_5nfAN=Tc)YG(IWv6!_`Vs%vqNbKSX+?&@Y;*`itZ_Kr2{pC@#)mVD9H ztjL>(A?rgK@$7YAuaPU;h?Z9B(hl{|4Rqnl%wo1rS~v7OwC-z6XSNP31N4=obuV(1 z1uxb?y3mUWzyyCh7lmvDe}9H1n_Sv}QNh}T=6d14ygS>v>Z(?JuA7@s58y-*Ych=cj@cMP37xH*8$@XyyRD4WozT`Fiu9a=riT%3 zYyuBRl-LP*%ooTf_zc#0b?-#%srKQU|4Xd8{_1SVdQ*mDd${41VebC5^IiS6&UX!| zneX~l-F(*r_48dT!H>Ay?ULI4fAN?6-xcCXkbU!3&hv(}Pvjpf#BB=p=t1a<9xo3M z;dCj?h^%$tCQ>;ZS7X!6bYs)jQ1uVC;mztSyoK-Q%W2SVtO#ccf0lMo__KM9^P#Q= zMGc(q(GasucBSJ34f%wz+Vs^1&{;wg6 zqqoW3s871o=UE^r)=S*0=l%w4*KU%rV|qCaRl+VPXS&MWl;LW)0Pqm7swq!W>l6MU zKSy^Zcut7RVbfZ-ZU;8;cI&1NK))a!<85q=5q=+!JjmIy7MW4!w(Ay(+Nf_E?$ibO zUxLxnM;)bu94#yC9vl9VihP`rHOd$X71?&r*USk4{ zi|apwYvsS-)q<{mPu5yD&eQ>IgJs9S%v}!hJV}5L2w?crTLYZ9#VIEaP(lC}x}cLk zt2Mw|Z2(+MfPd%`a#{ndX#>DRfVT*c>d$KpaBCX?@Ba+|f7Mm;wFbB(24FWC+qK^i zU>^ax`)_Cs&@KiLZ}i;+Xe2-v|H9S)d*`3tOL+wNURSBKHNbD%05Aw}LRV>JYk);< z0Q~J!0Mrp6&A+ZSKzL1Zw>I-&8Ii|Y65K2 zjsB!Hz)Nia^d-PY1nB5jtpS#`0nqRX06r!_5C4(Y0N1nuu$cf2x=JbMwwe$9+5lKV z03K~%q|;jid~?(3jV>ktJqBPLvRVUdX#?O~0{lx#(6iG&8esMmEpG$h$j1Qqh5+gQ zNv%tm*#^Ki0@M&7)jzK_z~D9jentQuccKjoTLXN5yx ztxIsV0dPA3YIT)7gInR!?s=#8QZ51N3DC!%*&5(iZ2)v4z?%f<>>t}2;Epx`KKu{> z-w`0iKdCjq*fs#x6X0(INcCUa8lZCwAWkZm65uES(){yV1AH|1^hQr4z-I*L>c6Ko z!0*}s=t+QYbqVFI0q$u7;J`ir2$SB^|4eIuf;IsDOn}2Ip`(9eYk*#D06a{9C;>YA zt6Ky79RdCH;u~KdiU@E-1MF-Ku(1t*Oag4x0Q*`4gxUc3_OAfop$3S+fz|-i+5mW+ z0L=tQ^*6T$7}y4YMS%ST=;Kd4uN8V9LU_K`jlO{Z2MEyLKcqFl8*Kn&6W|L1^!86` z4e)3i04F{Gz?TH*WRuEy0JG=x>^1=2A^;geQ19DYmoU5yfHed-MSza}2U-K1yy5gl z-%5akx`gu90B^Sea0vmZ8_5<3Q)g}>A+%Nq=jKa`td>2%S8izRbk`3sYDv}Z0C0GK zpzY?u^hhO57HOsV9$t++N}c3(RDREDTb*7?0*7i!?k0k9&=eV~KfHdo8wu~^%x-dm zVtr&acN1d-E--;|K^AdSf_}Xi7bn-i$W>c4OAgS>w^)Bsx=+jlb}^OA(Rz&Sgd{gi zh8DWeSkuhn z>B<#%B2d86&(JKFib8SbrdSpkXE|B0`=!)eNsfZ%$5O3|rP4`|Hdp#9a9vw<%<#{M zfsP)KP(TT-0(R4Ill~5u?~JD7ug%&;5u_Glx3W&0B7OG$>#+uSX=zYGulb8irW;qY5)Gu#^BPSe?zKyr>9p!vfNJk`1 z4qj@?_C5DWf(I@bvuQ7meo>n37rJcKt}ous$pd)&zBpTowg1d4R4qt zf@oN6pn95$$gUF%4>~h&r*40+r1TAOIvAWC?}XJQ?1aG8GJwJUXvJde^7Y{N#M3SI zQ+faxfjG;-f#PHk`iC(?P`i@mTp&^p)*!L$zFGqkTie&shjs4u`P?(HjvnMZZKs;wU)Nn7UFpWd6G_)hNt!gLyXnpV*-cWtHWLKQe}0= z@k~7g!ZgbpjxjUR3Q{U0QF(q=g(NDe%WvmKK$v`-5!U8+a@FNyqYb@+e2f8p+zYXx zHoE1fm*;mV&-XMaAR!%@hbLm*pkE3hc#sYWba(t2!geg(2oJ{h{}Nk&{S$a%l-bAg zdPKN@tb-&{JgZ*|KaDL@ zLV zthU)j8<~sYDrMgOuHq_%8A3Z^6cVXt&bE)y`2@jF27a6afc=kWLj#iw2~73u^f&zT zB)UnewEUbO;3T2pDGVUV4F>4mSz6TM)()7ZW?znu#xnV&N9J>ozwO{8_?7%RL6oncJa3Z)s` z_@>brxdhuWh3Li&{fp_yoEG-Xqo|1vK@EM=EO7zh)1BZ*WM;@&h;9VVPlx^v z0~8IOqf4a@!Kk0;Uf}G|G^4m71S$}+UCop&f)Y_w{4waG6Ww&WADV?PBrvCm12Ae{&KuOUp9ffU-oxP54T}70VI) zN*Zyuh6zDr1-pwOH%6<#xV1mJC(Eq^wdiGIOas>QEATCFAy6g5KZ#6&Xk@PeZyNJH zsl5{scbaCR#(#%Q5y{U(RUq<*w+b$)dZCS0vV3P&F1Uw6Vu+Eq03udNH3+qnHQG&C zv@Gk$`j5md=DWL9zO1Uvl-Mo=x;y#a*dpH@C+vJ(jnBtRtBk!(EbU6WG$TA4xyMRm zSsK)7!{Gbi5Rq;89#h0zIz)ek-s-7|9(7%td4Gvvk(RXXq0?J3X{qj^Q&T(*Pp|-6 z7Mv8!B{n0T*p+@LN_nv6!@O2x-Tp@){4S#6>>rxZUf4I)tAYD@z$4P{=j&9I=(Ed* zk;+Gw@t*j@@smPH+99{Vhy@*rbcP()dCW>57ysomCodfwS6z!78;;@phCG2d5rL`_ zvSo4DK9F;j>hwn*x)L^EKLWl^K+T!#_Wuf1hsJLASW0!Q7UxmKe{wYy4}ze+EaR79A2XxhLGshkP^=T7ud|MK@#<_7uWrRFbmgGuNezs$6`&rhW{-z{2^mJ2Q2j5*U`X$2QrZrz}OW-qkg zeHB}1Gx`BkSWPUq!+1&)o8Q)9&Q7SZvDPgX-^DZVrsd+hE}rF^eVxVE=3(Cl!fCeK znJozEB6@NSZyZ5Hr=Oz-OLF%FvoLh)r|KQZ2vkMZYGPODVaCER%Fbf_S`1X5&(RWz z7RyP|FHE4R>CiR}jBv^-4g4f@ymxShe?OsHoI&-&{IX|Z=60Szaqy9mgRxgf03jV8 zV=`19r*RF&BS+Nfoqa;^PPb`u^7?1%FZNTz|NHt{Mw_b=pVuSnC?SA8-1eOe?4?SbprJF))6?C}Qf zlI{E3v#@>t8UwG10nWecmw(O;bXoPiHe(Qe3oCOVUEPIb!UGJ^{P(~{Lz$>cV=wMF z*U5a4mSJ>mE<_7C%h_-a*SK>5oTCdlmY41-#TNZ`vlh&jJ{1nkg-wa>8SRsFswV8} zI>t?`_CUYL`%lma7|sSpA*L&`b!gC&|Col;XkZQ~43<(&R~`mZ+l1uSH&nE-Lu6!Q z$J+L8J@(XU+@_tHXD2&LEbKF`{ARvu{m%KWNjv7dW_~u`W#Rwzcvt`SeAi>2&v$kB za=z56zUxA~zevq@b;a)&f1mF<@x^@CM*LrcZ$ZF4hCEIn{X0nWFz#Q)?`L1n zca1zS-_-^G=b@a>@a`jg`vG~@1MXG)|GHtmYdZ3ABi|#q&qUfk;Jpj56LH^!-@bso zvJvmH-PuXW{PTFSJswZH?DpCG>yVP&F}q_YT=2i6ymBs`og4c%wTr&#${$|zjofuL zAN*wx8g#}~Sy?)Bx%P|QXQKT0ADV#LvIU8M=iRAbF;LcGBdOWZ0DHJ6SxNZwzfX_K!2v_W;50BJTUsH2Q|_CP!Cfav7^PhN`qbl zt!7zhl22XpF$ctGJs`@bZaTyPfl*)YHjMf%ehi+WlHnQy_QCALb{DZrQ)wU!#T@l~ zHkw`7q^4XxSjNrqe&dW+JRZ_BF}Uwp{QfJ1JH`snE<2$jy*(>p9w#uE)TQ8b>Sp1BZI z+D0hbf5`HK+kwz=dj+_wd8G=Yk50yjz>ya`Bap2VPx=S2QX+OrDm^H{1z??s2L6cD z=4x)zBWo2BL?lMIJ{^i!F1)XkMd2x=3;04!H$(7?2!Rtza^*GMx!)NW{R$UMz8~_+ zVEb->ze@)P4Ob0uga@z(L6*Q)T_#l(d%|%W*caA}+4p8P-JR?qA-xkW_K_#u7wym* zZ-F!`+yUA65WVME!0l>mr!w!5D8FUYB#k+D9*g#<;=ho!p`{fcse<`jfAE=byUb_E z5-I#szRo{jN#re4jCc@S_;|QEN{ue;uNOs3pi6w}-j8o%MVt?83qCA{&w{!5652k* z4s(JiCwKjVQBF`DOtvSY;;tR%N#C4A1Ez37ys7xcDo9V1jPa!g z&Y~-|jCf#6eq|YF^+Vl|t!tadaz2^b&w4qHWy|i zHxQeIkX%CFhQpT#sY?phUB<=;Hr0BeVNFRZgSMKSsrA-O_?U^wu1e{C7hB{>vPGU| z!LKrwjZ-)kC|!0?yrCSZ@G58R{f7y|+jq<9+T#HGq69|VoI{@wXy~RSS7R5hUpVXX zskdL#qVT?EM(`@I{T0QsUpccA%@(?(&Al*pVay5%wRbOcxu^S7$5n7?oN;uUJ21p{ z4|pWc)l1w19>H<@Zp>(qDwn!wL^C|^l+TVf4mROV{L53?VWS5%(+(Sboy1`yf?Xmy zM8#|ov*iUJL><4H@!!;O7V2ou-cOs`@t)lAj91A*#-|e38#|(q@d!nM{)VR%j|eod zT1fod@G{8x&B9TbZN;WL>Pu;y3$HO{51{(y9FKWP?stJPAVRg?Q_{RsJe-?%{6-f% zO2LdC4h$(7d1?S6wR)Qn#b!x6?l#)PwOQ_W!8)|4@nWQiZHUrp{v%7+iha69-OP&+ zQ4+zrR&O<4es5Z|IBo8nifzIwL?b8}DjhXW z@UwrhEWqY*EWxq>Q$*`+@=-c_J;dp<3}4ZL13lnVcYpnFka5Bzt&kBt0{JYMzf5!i z89#ANEj2yj$i*JI5p0m{HO1{KR-c{cim|bFkUP{DlPPpClU9Z^Y4|grvqwT6k33rE zZ6^A&>*v#w3W8l9Y}3^TzoGyb!oLS`(3uRk*guDKS#x{U7hstc$G|((L(>J#PBZa# z{03hQml9XQrC^5o9xkR4?u1KmUoekP#lLw~2FtJA9@>9Pv< ztKAzEm>C4d*dYe{*hPE_p(-iE5vJd;StAPqmmcEtyumEu5b6XYm^o%)nwo;JsU&c7 zuGb!Oh)1a||MM-1y%)unE>j#wy;OiBp0U58@PM;LX+Y2dHK zcpvddd;#oGmlm~+N2hz=`C~T>JbYKeC$#o)Fgf+8J1LmwU%`fJdp-`uxd+gvRottH z$?`1RAo4q|4nJ}u?h*MNSM}Dz;DEJ9pV55&@NJP(IUarFop-X-5FUN_NRK{a@q3y_ zpVEKnCD4QM!8S`T@H*C<+M26HSEB$}8@?Y`S+#%qGV+7O=>fdJY`@5|_zAsFPwera z*8J>KclKdWYu-Bm0r02Vdr+Oc?hv_I*Zrc}8 z?crF>wTId7E*vcUW1DulC6JUu%;P;%*-Kb6` z>L4-^1Y3hE3vWGR}rELkqilJ zxXQgDZHxzcQ7d2ED(5U(a|zNI;U*-m@P@RxS-GSzz2&*yl}>1mRX7VSQ#+G*7F>=+ zE&{L3Si@0sv?CM?_zG|>Sca|`R8m?S$U_jTnoiY)a18u z6w$hMVos@NV~K$oI|8ypww(sI8 zPn@2T88&B&&(AQoJhIPTC^!8XL$K$}NM$J=BWufe4d0F{#&st|#Cpljf$>}HSbf3e zk;*5K!m{#kt$0KxMbC0MTPd!UN0<8GO^z!Qs8{oa@?CDqqq)s^dG!Rmw*pZho!z%vydnv(P=OaxJPPRWe)q$bepGKP6S=emTu-o#hjA$ z2CSJ}Avo|Uth4n_lxGuoL2$*J%a})?Yi(&YZro-b%*)%m#qz!cuKps)W|++|Uba|k zki4+2uO;;@XMHJWwy9wC!B~wadg|n?lQRt`odCX2?&jkTJ||qJFLm<;_&t_H4}eD5 zIk+#$wX*OTL0@z01HJG>us|2w5XuNsXZP5+;VzfQ1z#lL!+7+|Ox~ro?_xI_VcLnX zFCZVwltcJPcqL%Lwe-T4r^sF5&W8cn@$9!@YlZg=R>xmJVN%_LI~r77`Vq(tR4gm` zqS&0&U)^#g&kKV0aYk*&r3HC{CQuHe8F=e`>a~vnY7w32q!IC4b8ze5281m3sokGo z11YD4=AmdM>jehl#Oopr82_$F190Yx*J||(+{o9fD*T#)m!{z8h-y8uW+w#QGgi`F z6;Zgi5&k)D{m-Ku#F9iCbiqC~7Dd{5<}nLB_pmWGub-fqUbD0Da!p7L0AIVLUFq?&f)l2zO`byPJDBifz3ttm(3g<829nHv z;g18|%;a;~xuK>>)cNZYtoFNN0^oAaEAp<5zc(jl!5b*cpESYTP=@-{mGa6zbMwKj zuxp$(!CcFJjaV{FFiXyvm?e9A=}0gws~VA5rnt>5%Fu(VfiD;YHdR=%$|1-D2P?Sx z)D_5q%me2V1XSNn#-m^XHTFIPuVt=fr6S`egkF{EfG#`_cF|w{zwj8mH_>Bo9I&Ef zw!h)8xX4^N?K41J4V!T($z979wFKraxZ#)jE1QAJpB?M`%ofsj>DgjkCc(%a1MTk| zD`+lA4G~%Aq0oX%QexlZfElF4Y=}c1WOL_g3C8Y8;d*ImGV+4N9w+#uY%wlr&c`-;yTCtRyjo@)gU{IDijgBQ514XY7&=T3X6yqYSs{LJsqmDLl79cB(&Y zxr~Eqgf|g07+o7q@Nhf&5o!?|;dQvz%{?Z1#zq-*Z|F_;A~0cEgSac62H8*P!9^9n zBBU;>R&wE@0}@n@!kxYLceiF^m>~Pg^FSo0sWOkHbuW}l7Cv>>NUp3>X?t3#tG1JZ zNyG1I!cp!7OePyW&PE7{MD#cvH5g@QBBWj*kUddHhdL0&b$xZ+&sgirQEMFPhDmtJ z*RYv-c7l_{8*qffPL>ch!FRDb;gZnH+?Nw!&hT@fCItFz4- z!-RTCxGBh^E)-~KLb*eqcK!5s`n2oMzr|^nd?B9GH6iUrZexu#zR#rk1hW$qFIGS6 z1Z70V9)Wtc5x$uT1` zu5Nk)9v~&`x}1yiv(|p@+gkhieLWL+e5N&@nHGvwy<2EL$5Vlcu@{|GM*iqxgu@tb zh&GZ)DKx@yP8_1o11c|01iEr@(4)#Dc4DBOr9PV&*yKg!y18Tks2dQR6=6;jN%}$j zNjxI$?RoZiO$>2g{vL??cMwL6fT7XQIDZV?Yo|Q#QavN-_Hnc~EihSkd%4Uddk&vA zp?))8dR>+Y-SKw$kbrZiNl`nCRW$bzip-7h@0e;zmKhN{ zifNZfrOHGz3uFSJKEPTujx`w)TL;4~LqYaTUhc1K?gMo2 z;y!^1x}VKm>}lfsO#fGu=qyR`sTbepf>FC(%aAnYm;Z`~0qk47XJ~jD8z~HBtKl5@ zxgJg<%#GH6F{J+JAXmfX+?@RZ)j%ULqz?bo{NBlE1NSoQ$-co0K>3DZS4QIipNfvc z>=A{HUhol!`T>v%Ky}caZrFB&f=nEe?5dD)ED!%2DQrq(lr81(OSIS6M%}U<7mJ&h zFx`Q1KQDV$%y~Te@Qm}RER8KRl*PWzoKc;B=MnY<^Hp7l^(tOtuJgK?dW335IM_1^{rNt$ySTdc4Gxas61L!gnXZ;X zC zI2x-*;{ILY`-NY`3@x4sQPL7lf;sLzlHQ4)TCZ{`|uCSkA093{AI0?Wq zLH)=bTuSt4LS^&^BGZk-Fet8wH?;xrc3Kn_=y`N}FL%H|jyvxWwdC-fy0}lj)7#dE z@CX?y{glD6GWLI!Ts!3UKK6FF9B)S+jfB}?#bS{k@Q*n{AuTFVuI z-{F}qyjSXWF*tB|+{C@Q>?yF{;Ul;u2lBwvU>jfsf<73tFjL1U){?&R@Y~4UmhFiY zA4gVW1D9|GozHRs{m*rJ{_q)Ivh25Ou=#O3!d?yK1{sjh@v*_lRyf5@vll{QRyWIf=|)#bIeY{yxB^1sQOJZ9U!jvtLb6Z($YlJWZe+5yibA!{MPYWmSt}#F0<{3<*lt66 zwvcD3x_9Jw!a>Z&jyNmSw3fiZDH>NGo@EX@>5V@@mW&7stR~$3*@iz)MTcS5@g>AU z@jTJH5kUrop~W}L;&7W6$GHfcUd2VgXZv{AG=}=1L5NYh`)^{8Hd-dAAQon`;8|=o z;}}0Y9Jx|8k5lc`x3OVr^s_#Jn{Ws*@;wBc%-$8MNv>%~$_;Ke3Lw2C+Cgo=Yo7R# z{D&}q#sT%IyG~`e3allb+$ur`YxTTE=28@$C??>k!wBq93P!OF49rJ*h@PS4_Ky^r zmC&f6Xp}i)JBra00R4(3XQVe(l&s?f!B}0B{XuAJa?Llok*hgpB65W}e$cEU<)a|98+<|cP1##eGC4!H zylcb;t6?qLWMgIp4ms?p*6;|MildiWVX^}knidgpQnp2`M0jVg%l-Vzuye9CL1XrN z=qxbaP<^Rnqba-OOq&_GD3Lz~-O^MF^rJtM*%NL};~={-vKXl*&?K0HA^|7`uBT73 zIIAv`E`hX{!@!zrO1V(=hG%JUu|w5DwFZ>)M~H94VpoEaiVDMs??8gDMhH64;kxiD zd?6y#g`bGst%=<|6T4d%yL-;Qi-gzXt~|UASIw4V88^ykSR-ByPas#U*m^Y0e2-SP zFR(=i>`oj8j3z4g3|=I9_vJlpy?Z14CEKT|QeFxK{%PmBT+PXsyIgSiUslVHjGxV- z(dVoO)_IZ-s3qbG2@5BdGYGAMs*(m6WsJELtz-*hDt8T&@Qw^686j!c z4(ubNl`O!Lu7Z5rs?US6QFICsBCE!Gjj!U zsEwA58WS9S6RUJOo{M1zxI;a64caEmE92c_oN(AkSQ(-~?Cze}U3u(orG1CNFgqTr z;c-r2mQ7as1gC^fEDKIH1r^ksiP*_ow*!DjBa`q8{V+%~O}US(W%j19_c-6OvxR^G zcM;)$8*jB%^LpSdvxw!ubf!Gg1?oi*-Z(=i7 zuLZ2289Io;0m`&P98N@id@nZZPy^Ow8YH;*u~xHl@j!F{izsu^3a8@9r`mr8XAaW4 z-*e$0Mg-5X=Wa0-Xu=ba&cU1Y)XrvVjLQud{wFidnPa=Yy$#!cDBRfFAbV@{$WiVW zD_=wzC>tBJxH4zgclGuQ@la=Aqo2S9kpu3>I(~7=XR|@DU1vRgYH$iXIgON0ydsU-G&*kY2LomtwD$ep$# zVNujtDi=S!c=8RNPoz?DcNF_*hyM%I7zcI(Ai{&McVVK9P4x>9UVE3i4d)j2LK4oC z?&$qek!vR6twwW-Rp(!b=*p)SVG9TKUYj}FZt6pigZQN&MF@qu(~6A?9Iv`ywAQ#Z zM!N#}PIsU8nQvB`Y++*o6J6=vrY*P2>9x+VtLdS%NkDid6FwKO8Y>?IECy_CBBMO*2-GgO3y= z4ZCj94YauZh6QFGI#WFfbso^7|3J^L%RwxX;tRMW)O3|mb}5J{?(%{qnrTI_i6htw zhng~svPQX?Wt4p(H@D-&Qf_`?l)RM$s z^U*2w0wera^bZxV^0MH%)+npzBWacnVo%21TN+GnA$|X==`H0HN?HCn7md*I@j;JS z4|@3)nA8hRca7=}n#TaN0jntG*hl@|8}u&1`_|N`ZipgX)6hd=h31 z+)4q9u3OcPaf8GoNn-~*?Yo30dBNVg%SQydhMGq5AYn4vPw>!stO(hm=Wvw)hdx~; z$Jtz#N_84T6~K;L@e^0nFnyab(7Jl!+G;j%l&SZo78f8}^d!YrWJh_MPMd((38w(^ZD??3enUL4g zTj&I>uWugJGN7Fxh1kam{q(6Pn$aKfge<}TTnq%V3LmZYKHB#7noFop?K+%+$murs z48RJMw>U+Mc^a=9S&aw(uW{CbPgeL7fPhB-R$pTJH)M&JCjvE$!#0B*4GF8zPdHcXxb@At$7=3Rg@5bGS?0y8RY7n_l4x-dZ|3 zGkBAfgLw}4P(#waKaxeL`jljHj+4nb%;c;EK$hFlcxc;|tLOjH7=5E2W;O^^5iCa( zkzhI8WEHtfR>kyn%Dt}@MJo3I0y<%l%DuSZMw~CoMN)()Lb#t<=iSJ$wS(%Xt(xA~@HjD*VODwAbMQQbS@rH?nAHM=S*_y!P4Jx6tPpXAgXb5s z;f4hE<-IyQgY{(+yS@U3g_7l9K4!Vgy^jU% z_z}XkN-FjJK`_jqtvo)e4d2H+EsH-`6bGIrYpfQS8p4Em4{~SIM4Lx3s~!Msq{@%$ znK+eccZv;yxhEndKNL;I8Wv3oct%t=CL!Lb_tD%F4|FxcL{n0bYw=sU>@ggLl!I=R zF0))l*@L)4k=ToBE4%RwDEWy`^?Cusk2E6P-o$9(Km5H6AL~ z5oBS7VU&lfgDl^(e2eeZ_US|x-rC3_V3=`->>2mTznO7Iv7}+f1-8kIGi6w1Ic7Yi za^vN~M?;6*$-9ftYqCSeOc?b&#MN9^uojkMebs3ASgrT5w%6Bk)C~IX-z1{py%-Ci zA%EIL!`B4nGQx;l@N_gh1C#vMp9<>P@e&KmD{44b9yP*G3XT!8EZhMbjqnfXFKl`A zQ4ePV>}`h*#fpSJ0hcyfltYN;nhc=}nx$Gd{~1KNK2o&?PdGt3 zIeZ=N&KNmdQWGu4n2#L+T4>~mW5#cK#xO&d!Q5J4h6lx=DU1XM$D;UJ5q9B~gB|T~ zuivZZi-;XeVq=GZx*Di_n>fFO(&{Pp=ii<-#e9JGsgH)VHN|uwc4wBg=&x(pD`J$u ziI$C17fdubQnZ=TU*gyR6HQ2o4t%^@l|120wA%?Behww$;7sn<m4FfOwc|Db+I99I{$i z4)I6D)+~2qHCqY7u2qRavw0|Ip`g-N*I=|8_EwKt`C72e07 z0q{1s#K3)|7*^q9*zd@h7i?jWfi3UhX{S$(`AUce5}lE{1fU}rlQymiQYVLep%Libwh0wu^VNCVQ4N$*H z(>w{}o!#2o<_EQrt}!vx=ol2XNP4fN#*M@#30tVEzQ3K!1BCixQGA_TiAS6qr@W|L zCEug!#kS^`QrQC?tBTgf$h)grSMTKiiC51XuU-qG+fy+p9p@hCg7P?wS_G&bssHzq zv4yB%g6t+io_9qoYyZW-H4#Ig*Ew0RUwDb!kIWX`X|}x_f>Qq53HS9iuy%`w$@}Ov zr_mx$DS~$lFljIV{m`dADMjDW>4p)0f%pco%2W?p7V)N#wDuIs*aGoM@$RmnZhVA& zAM9%iJleh{_z;HSR>V;H@#6(xzZ@)l_z@^2(0p+Qr2V=1DYk)8J`}X>WD)q3Py1VM zb12_~oj)xcFOF5SjNLJJ&IY&b17q%-5!G>b7_=t|9lSO!EJAIkYpum%^Du&E&D8p( zT>?YsBXbaaWI{E*8=c;E#}?9n3b@{aiI2?pxvNU_kNIF*{xLVdgId!+W(V<)3H?>u zKW5uywDOP1GRzLpUz!=2n4w<#5S_D2{bg1Q-wR!XQOhfTM6$^2m0Re>B2ooK8AM+S@H(T6PA4v*(}{~9zoMVe zI|JvHqDOL~2<8C&>ci;}F`Wk|h{b!ktKxVMJg#MB+!6T2d&5>oLk>D!P!2J_i zz2I`+bgS?a^^3=$u7lqPyU-mmVoe5%;6p*3eLka_mckaxTjo=bzaWXYWnQJy5#-KX z))bBg=Ys0n?7Da5Oh^fCTZ4kVpMY7fDBN!@TM0dlJaoCg68yPCALgTDe9HJewS;)D z(u1N*;9ZF@knxk?zrhO^vO+${g#PUjY~Bddu!q$v9iCXde?5=1Ib4E*tDO3j@l=aL z>QnDO$?kA!DqXUGBKKGMUigr>r;eGeU3DN{8FLSop;6fUiP)^TwWAKiyJDikmE5M_ zxQXrZUk0LxQoO$d7lcTzr4q^Y$(3S)Q@vIs_CB>q-`HKzF`z~F7s>AvYAAlq*(*cK zN?q{VzBuk&Ehh;EqE~0Z`gfHn=!^WL5_?XQ^_l8d)6aJ`9A@XwNg&R;^MAHJ*7;8^ zMhTLGHvE*>donGE{q2E(cLpc=_c04WY1y0WT&_VbrLtcVjdH%M5boIFqwc^PQ;%_4 z0myp1{*g*fIkmt&7}-96+d2tmh*73?<2-r6*ZPImtn-%I-#D#U2S$kPyaha+o-VI& zB9DBF)AquWTyI%mC~F=V1ivxFfnbL%m_x3{418Pl3dNnqgtrBzvE3H*5qJsgZVFcg z21`G(Xt*lDWq})fl9Y+gR#y##9y`z9S&r_Tn=MOb`nN;TkB4xa6N+^eTB18@5N6MU zcJ#ygR0U-iWORSL%Rcp@%cP%7?@DZ%ST((LM=M!D9@_?2VS4HcLZ3NP&hk2d27mtD zxw4Ad?mnKV)YS5{_{Jfq51KPl0z=JlDY@fP0|QI%yU2y3xTN*TGv7cvU52-AZf<@m zd^wH7dY2aHZn~#on-tvxLezd__3W)4SExS9AKRZ(8dw>mJ}z#D;k9_G2coV+%7-q% zeX)A-eayM39+=_#R4!i56-QoDG0<BKj`ii-7&r!m(%t-~^i{sYUP6@(z;%lBZvljp%vIn;*O0cKIE zL}x!@CV@p9=gCgu5dsV`@>9$-@GWG)5susD3wLevxaMq&udX|HZcb}>I4R)`xDs=s zXH0vDf60HH76Kh6pD?4SKIG)W@dZe)V_Odaec`&SP0#ba$WvgSacBrGI&aevd1@wHaj2<7FbKYS z%Z+!=UzD2?9Jb}I+ejiNd4gwenU55gO==HoId6(Jqsif!lu?oCj`my{XGb2bSEm*a#1G67D-KVYlFT9`i43-ZC8h z$apWNI~R32idKbcJfW?g&_6wk8!Ozf6%K!nm(s#Lr{&WlSZL=n>!WAfI*UjlR{n1&gFU)u%!C3|?wOKjT0T zPJm{6?7`mL3Kkj8sYA7ZKzT$l7cn4Vf(bqkPheg(HT*CX^(^XV6;ShEWqkg(=o@)} zg}6Mo&M0V#@Gv=rf`dJL8}%3upNB!Q7N=QLG9!iitQns~X6(&99Qet|D0Bt8GU(1Y z1l)b&8)exbD6H3h%@#w089kok;Y-jaAdGARF{GbL$xWn zhk_eWG}vnHxyGlU?4=q0foPe|YTpe`R>;WmQ22%h?0AX75NxK>Ag7Jo4>QhaaIa78 z$MPK8QvV%k=zawx>*{oKaT=Pz%u_=3Zj{q_F=UV#es`>(`BU2}=q6?YKq(6aS)N_s z8;TW)PO*CRf2A7OQE11di(*B_2Smmr9b1Ud{W*v+BK~|1@_O}f4n@^%+bGzK!`&Snk9?tTwk(O{6YGz442ZV?cGB2Q$-A-z82jPZGbCE@psvUTViI7tkB z<5|?rY@h26lF$>YzVR&nHguvnFsh>cW$>sUI`KnbXvIYLW%=%4-_VIuf&LW}lP=3o zLSWVt(ST7gG5NCm%nTG0`BFMUP?(X0xaK6K2h3rtqgQ-_{Fp-nLJ2C$_y{Fa{ zojrX%L!`dp>IbnLCkH$m+_SfhsBSTvcJ2hnU>wW$(Eo0*BN>R`;Str_Hn^QRhw)`z ztN(P13p!VwnNfRW1hhj|xE@_jtaJx^m^dmu*L5h_b-8Opk}HsG=Yr1B@~!|pm*6b_ zAa<8>vcC-v(O##bPC@bdhYrG78a$kD^X0S<5RJToPjY)(zz%#Y#s za9@xaD{u*4xCxeKElmT^P3BUB0tU9%j{Mj>H1fUd!=c&^ zHUCV8Z>@swa9r4RT%8+&r>HeKCHI5izd*~u|K;vMXjv3$_6?mpWt4q}+tA5oqwE8| zE5Q7A2fCpoNFfTF8@ovT8rPzrNU)jK>$ONGEwYMWFap*38Aoaw+Kt>%)8Mi0aSwXi zOy6aV+LilJ;9Q`rQT8IUKhYd)2iOU<=8Wd#-Gd5`6j-C)HhblM6#Q7rJpAU+KNFa19#qwMNy^qe| zBT^%Hw-r>3?UoSaq&(s_480Hc%W{ONYccX@<0^fJ%6bnq@Epyd5JDg5>tm)lCB=Nu zlY4wo5Pop4m|k-na~B6pMe4SX{}!#;?}4MPrfAPeFj_OantMP{QKiTX2(cjF$S~5} zp_(*nTAI;q+@ak1;I~NgA=2b-vnHk*6LwtRN(chk($|NQnu(U~}l7Y2j!f(=@DtR5Yu7QS?0!=mpozR9~(KxfWoqY~KZ;``A3!M7>gT_XXNd zmvk~p@ku59pQ;zh!@0+dGBPpK&9kkkskt8_rdlubU+$iOG0l!r!w*~z2ABotHF(!e zVc*qW4|Ir3^+XJ(=kS?scbl_!Z2o!H#sM~14do~ur3^6cgaT<&!MX+`m|VrQqw+w0|Z?Clg? zN_Jt2R3x#W+?vJRK{25yh~}s&SkI1puW^t$;|O%v`&*vBaI~_w*6dI6O(&t7jMDLu z)1keUs=vNn^LbKojnC{5UFyNFq7euk{DHEhzA5naX8Y?cPdPh`6?R-NW5*`_pN?e$ zVmYwtFbvD=5#C=!|%gp znvQ$3;GVg)x8`Rr!NCnZMS`V<;uETbS}qxa8i_z)?)97|aa`h@miFY>_ykYSsXdJF z-`SYmD!-pZ;>hrq;#mg+U*E%_#OSQhLmu#);vFMyzI-9DX1XcX%H~tFV$R-XK2AI4 zaoTLTL-Ko;=Y6PwC8--fzuk3xJeY#_Afy*#gFmHP>RrB>>WfvPV0^vlO^19m;@xXb z#A>c0P|osphAgDnb`D72+Lm`uotL~IoiK}xAj96#^&c~k3tdmqVDKJi8ZU$d8cg?ID z?_me4o6vh4T|JQ3;wi>xcSMaj^A-&D=V1{2<+!M=qlZEN>f6b;xW2>x6Zr4G>K0cD z{x8G8x!V2z`R8tzlu&%Khm=D9fnJ!8(-(ocoU@uvaFc6inpHhDD#=?#Rn>gde1**7M!yJII(6&a)Qb)|y2Y{$urKR4nAqYyi{3 ziS4D;m@P{)tinAK&qHmx7l`cg+a3}N_duVX*#!$o1s1@&9=Y^Gbe{X^J3nZ0IuQq! zLQ?WDmM|X#{VRg2Dd(*tqTj7@>43_MAZU9kX6)4rdwDmTmx5fd(G|Eq)QHxQE^_|v zHn+pyUY<4pjLh<=w}~0Mfm0W>%3STITdXr?%{s%4`qeLhk42M0h+Yy6Lip7r=bFJo z#S7exJ^1A|{e_zbycGAV^hy8Tc{ma-++)_F-gD=acN6Z<W*|{y zE&W21<Sd#-260`jLlI)9g*_Pma100P8bO3Tx_I1dc{lhL z^jgqMt-V_^JP#*RNj$5OKtWdFYaoRBte4u~L(x6HhQ7FJm(ac8*<)d2<1ILbLOh7w zY7&k=XanCX*a>=KQq{(>rt}QZGs#S;fUB3~PjNap?ZV(|ANIi6r@)Uxa4+?)kOU*& z5~>a@Gw)$?c;TiK9ElAP@oo>pO7^yQV?123j)TmG=6W}`3?BIO2K#VSGQj~U07KPj z=!(;lE_9L>U@N@R7X16bLg}545273LFHTN-`ea z$u>H{rhKThdT|Ml4RGv&2ROAE1qikI#pY-> z#4MM@rpB@zY8E0n=62$B*VqU~e`c8?Jr(YYc)n=fxR1Vp6dh z`V3~cZuv|1@ytp(=KYs&0BOfi#O@PIl&=Afz;Rl_X{V8|u|9Mv84U@<8uCD5L+tv( zlK1p_ZZ-v;&#Mb)KK?>(}Ksh41#)`EKxiwe1#fT%+uHx5?|K+ztMy$v{I%=5-hm*}WCZTQ zwM*bST)PIQ8IM6{o zA37Or^r|Z(_<_DJlM>YUGfdPkh(FH_Pxd?gM=&i|r;Rg6_YD>QX=5iz7xn6zol(0!#6B%;w8jNagXCSW5rouqK%hJSIrX7ClBBU-i`5b;h44V#zFf20p9o4_bYkddGk8_ zKxq>R)d55$0}pU!1_w$N(AvHlS|)H$Uc5;wO7wt&gLx%1c#%c$e(D4~)8$7tY4@il zL9D++z5fg9O~oSD%|Z^c-?|u@p}6PqGSr6E?IGE9oz0+SY`Xp`-=d2>)75Zz7Gewz zX$AS4z1S`!S@~#}AIW3(1QwtCFJfmAxr#bL7pV7EN{jnxQpKIAJ?xE7>R|`77+Qy! z46?t9OTn)fl8a-|5f22Sqld+T&q!5@BGl8*(+wYQnPM432Wo5X?I^Xwf)On} zFBIxZ1Q%QZrS%(Zpf#9Q(3`pd+v|V)6ng|2XUpPeU0GE!on9cMynaEf06HizLwjsQ zRbqC=W_TSQDIGiuZ%y&D2Y*tRb#*nQ;)UbHo7GOgi)#{50Um~Ng>YSh&Z+w``+yi1 z>sr{I6=o86#m2Q97LQVqpJ90Hp4zk?4g`LWwTM$1y(V38&RQpLH4|YbV6ll08v8(E z;Wb5aNrjs!&?>1(a4cLC6WZ35tMuVP_iZsY&Ne;}_o9`&`qZOE5(ie7Dcy#JU<$tb zhhR$CTqTfR{Uv*td)2HNx47ox|3dtK0RL~rym5Klh&tx{B_(6NFF)vSV?L(Nq@qqT zPF^BaM9fGfI}hh%S7$BgWN-E#gQHdGyqv+{HKx#~^KE3?(X2P~ zU~U&Y21`#Qi{uZ9tmX|ob|GoJo=DpZbL2T@wRB8Z)YfU#f{vV1EQ2%V>5Z6Eo%ORb zrwV?XIH!j8`T?Zk{`C8xUyf$$c~d8|hur|a#wH+Y?wiCjKH;=#3ROTkMw$d(j-=dI z?NGsYg-Ly@Ylu!9|J=`GR3%i>b z%{Fy_feY|Lzd-%+@ZRBC%&$^lw?6@IV2ME&ey}YRut+5rF zEZe|bmoLW`c@KoJhx~GOOz+?&qE0V{=9BEy8tKoO}#C&@OA9TK~M$=%Fg52~QY+~7$x@);PHIJ!Z?-a^`&5%>$ zxrE9oHl<}&n3b97Uk|j$0pt>>Z$66^+NZY6vYi1+W$&K?3MezI@ofJKNQ;yj6#h++ z-fq*iNTzpC;{LZUEP{}`%Xos?(hO&UQ^yT|HC&DDi&X|pcQG8r>e;u_uqmZY3uJc1 zGu2}kX1E$sK)2YTjBC{*TEvic>oFyLv0erJfB0l{!aWi|7ns9^P@s0@Szxw+Xnspi_LH4!;Dsa3vE6E)hGR z1y0%ne^kGN%CaT>4A;196OME-9v)aWPiD^Hkqeav}Of&9Gaz+ZH0AQ7@50dMLd| zEkecw@5i>&7DE3?BvZ9o2%R8<{=c;S3w+eY_5Y7=AV7e?1_%;0Dkv(77b;Z2fP%1q zm*^rAydhQ##?-c`yNcCl>}EBaH)~PB(iRjyr55kBg2pNeLJ0^3ytHDa6)V+ALtCsA zBcl6zzGmKg1H61b-~S&T@9eziJ=Zg5&YU@O=A1v-tH^(O^*XZ6EG~_XmwC9!$;vGh zP++3hfa#T6%#`=tZ*Tmn#1Okj54HlDEsc}5PE8Ac?Aa44WuYyNm0KIM6}JD8)`-V% zl?j5%Hr)m2MqY$rMLMe@eYA*M2KY+c3zv%6T2sPQ_Hj(AO9Go};WgB1fTs(_JYI8X zEpt8)oV=nrwAF@sgf^h|t01xq?4(CdWtP_#N##sO&Y`s+%4BoW9mIBG^|;EvSdHSY zlAx}(%{(k>aW2wv^8}nTw*lm(WfqZ=m96)SLGTXY_~3TR2_#ffnXl0#+0D#v=WLr} zwOa!bdi7?OJ+kgR?3rVR0k`Y@cqEDY$dlgYo)IgQk0?zN>`tCOY;-B8a)WffEvn4S zpvro4KR(Z_p!RfF$Q*wW7FF_Wm35|jSO#s5Yi$(35?o77HsRU~x%c4RlK3nWhnWbi z^;cx)k-(HphfnO5j4LTirB+>2KHq5&_jdjjg7HIGt9(Xph7t^%CYou3CGP=XOX-%& za&uz28sLktg30(Vd4p;m-@!?+^cpbdeGWq_&m8sA{{aQsrL5cWw z6*X!I=g`*kTGBEHVe|d&pQm=mXFF&bhs?h`Yz%$mBk&2|lT47HeO3&qN7#m#SLKm*=ksv*)fwQMV|I(jek;%f;y z+O}GQZkC?}ZSyU!2J4?;c?_rCXwi~t7i@IVsND^JwoJWHQ)A^KAO3EKgv`oj8_Yiqep*p5ssTm4uJR4{q^=4Of|E!wymDB%$y!`C#idiG7z&=TrHJ9CRl zm(e;cw+Y{&3EY&+fkN;x@^Qgy)CnDC4hFPrQUoA#&9{L1H>-L+J}ff`FINHwLil@# z4?cHm>EIQy6t=nl1Zra*5ziwyM6pxV-l$zMne*#ersg}D348%?*Ek=9Wjufzte1+u z!|;T2WZbZ5cG;c_lMaL3;Z)n~u@)8Py#oDcJ>e-7i_1HzGO*^CTb z!*(X7HZwnbqS2;v3v1k#^tZW!1l{nwWg^W~$eEGqt0|s;BoxFNegcdz%~Ay5-wa6Lz>S!!4mW?1uD0tbNT< zNud=fyKca5i|R-?f*m4_TY~FGs|WHuY7Ll-!kujiy{a*@1|;TAOX%*}c*q zR%Az5)WerYJOJzHldTNFvL1c*BUr`9iy2$NdgoM6Y^tp6<%f4U<}Bkh&92924xm%Q zEh2lQUL`+#ZxR)-A~9!w$9GJLj<7zUrX8Iq)*6Y_pFjN&sB&JPh?+!nyV(N^b)bdW zn)`59hhRD+<(jd`Nx8;Gs;hUw`nO*A{CP}G?qmexh^5f)#B#WKY|n?3htI$Fh;kCo z6}?eQP@736z@B=qx$HF-5rA(i3I2}gCHekKE^sCyJxvKQ$FX4%t zgTP}csy!TwE2=H0sNh!>mB)j`DNgdm=NHfktbf`*{#uZ%-Oj%Be-s-k)7g3#ovjDs zC_`lB0}>{gA5Q^m(}ow4Atd9oYYQNE`Ur2C)!oCQi8Z+3<4)rPds9+qvFCpr32L9L zJVO~7|NiulmWC(mTpOhlnBKDepmH#~)*Jw4 zSXmpe{5ls4im<|@Q*Ojnm2Kz-CdLi&M)mhj@h(0g_}r+{J6CCe8zJjT!MmT<-}-y` z8#5h7=-@bbx2GlQ*}8c@uoC9;_?egt$vVW|FbBOY$MQKRqFu{DM38_Tho8jUcRpgr zj{8KnGq)=G-_)h-ImvGf6EDM5dGYPcWs27o{Ji*%X0+mey>EOcGf?qA**Ctk>7{rX z<GL9L}<^q4=Il3kcC+Q3H>SAP)wUhF`PWo=Z?9V ztHYfjZdOrc=LlrC2Ooq+z=fH(@-v9*K-}!3z{(@9n-=&nPYuuMJnO$VE$};@tvny| zbRljJ&u@8N<@p=WmEWHh_&L89^7JHp8s!9f{y+Xp7f_&b+VQkkps)jfI(Aa9XV0R} z?l=3lOE$P)sB6!j#oc;#-!I-q1bdda4?XgyzxM0tJ*#eGNWw8}oOZ2OWmb%`;aLI4 zU$!22aok_PF>%4Q)=@L}%%sh+tJi@}v;6a{FbiFFKkX~`)pV2~z&cSk)04=b&WG?D zcnYLoTlq-~NFT$Tbnvp3I%9WbsHIlTJTOn0i)9eaVxUe(6i zSUYbeM@xO8=Op8sDL@WfqQl{&l6n&-)hQ8d`7INOJrG;BZK?$03{dA~sxXmM49%Nt z?&%GGBy&01QdK3BOZZ^ko+Nh7248wjt2^Eq;BVN)=NPA+L5J{oX8)pNpJI3E4Bte4 zl(gN##FgrbZ{aU|I(jQ;lv+U8q_zpGv4fyg&4K=K=fNHrqm~V7d%@9eSN|2W4EnL@ zZZzA@q?Ls>n(mlG@~@aSfDL}D*KV@h8wH~*=03Mx2Zv}qjbtnttJPRCR%K~R#t&tH zK9q^+8yvGPL{iH(*nYrr=KJ_aEnCY6faze1e6m!QAyg{dJAc34Sg|18m|V(VZJUKL z=AcUk~`C0Zyv?x*?}0!{Utp|{2Zq3R`kL)*e$tvXrlJv z)rGKZ_OOi)rt9mrv_q_1Z$smx%~QFr1jezy@HM17xytpT+nxLkMQHQu-*eN{7g=M$ zG1ATX*)~7?7^bzee8HPJt@IpI2sHG3ZS{Sfv#|NzueFEYU{-MoB4$Zf%M2oh!?evo zV+&piFW2}MxsVwS7b0nF>-Pva_O10w5^%rzPDT#F)h;ByeZjua4)lK0c(>j>u$1v3 zZ)g{pPf~RkQJt%3sVd@&WVzf3cMI0vd%DVs65SD2ng^P6l@^Qd79JT$KVr?UW@lWZEw~vpp(0m7~TnA%aywH5-U93A-yO#b2C{c?l8#c2z7}xp@D_Q=g zMW!#`u8l3i4cY`Ml(m$5<}kx?+Fn^7e6F^!`esITjdgpD65ZuAI1$>60Ej?U!a7Oj zOqLf3%P!(K?293|v@9sE;pl_8R+Q> zfzxM{T&hfYNyVG3g|fY+p!$VnNt-RLB9CRs92NQfEK3F$V-)0PMVx|sWj(56l$1e& z44#c$2j-0~Og^)aQA}8e*3R*?1!i1!Dim@oU$Fim!lHDVAAgZ{gS*}-VeUwhCal3N zdmKH+&)FOwp9!6p35ETT`O^{XkLD@~x()r)x(&s_BQR%>QE#vYYNXzvfEQQM* z=L|+1jG0%)_9isPt6dnI_F|nEormhK7g_{CZ4NyFNWlLU-nfes(WSoC(u#4H-_VWL zUvQDR?RD1aaTjB#^a&XQDha&^n^(f`27deUyOrNT{O;g)WNh5UVN!cZ+qTL@!^T|{ zJ^a9i0LEP`jmOGGiSaKw>%g?QG@Sg&b{b?p=+hlLyv|S!$Fl7cHxG~1&I?4wyR!!M z3VUP+(JgBz%<|?B8O19^F6m7k9&mT`|>n4E^gH(mGV`ngr$aM_g*l=}bAT z2Wcr<)Ert=s%7`U?3GtK2I!yvs6WrPurZS$+Kv$nNXwOQ|xguix7( z%U@0g^468RXZs8NR`F$%O{a70LZ8;x-)e4JYpIH3%Ck zpjj9O()mDW?_^E~yibMvf-hP?{3U}FVZ>HvCsMdMGm}u%@Kc!|p*dM+O;B>lDp>y@ zIaAi^TymVuc53Q}&EHuX{6ts)v83TkNyejrtL;8Yl)}-A^cZh4Nh}U&bCUfgYY`g% zP3HRjzLjOZP2!u+aB|>j@ujs8-FdmYmV#t3H=rnR3(-LU#MdQ~Y8A?gA$vUS zhR;EoJZ`j(zQ?IO^!Ju2Q}lAHS0%uZWCcImFiF=XH8l%CYBuF?9L{L5g%qYwN#@z_ z@fApZ^p;eSRl-3p73}_q5~GV1t*`%t7r-a2%MN z#S1#WgjcrqNjYqK{|N56pp-$R+Yj=$U}9>SP#+gV{KcA-f)_zZr{@H&W9Xal-S`wMmq z9uVA-FI#iSq#9)^R?@Q26OENiJWFvo>2Coz&35X>fy?un$(R(|N%4`BWew_hPOBnE zKR@5bW2zyxhaK8eWMXixs}>=escXdZiP5Z&t@!5%S*Z!${S<)aP~+l+J=7S(Pj;rX z9_hlOBdrIyum-8Miwi^iAR8J#yxv?4t@d3wK-JI?WWS7l9=Bl~$w8IfTVMS#)q#$h zv|)2UA}cA+Slr%1OWU1c7$5a&qB-UQWiCq3bS#%E)0fWl(>}e5mMaO35|i%GJ6So; zTz51(1q(<=0o|}#uI* zl6K1FOguNi)2#y*^m;xN+n;~CDF1&o|CGU>c>i4? z-9I31%0yt)B=>)_Aepuil%o-zE@=_>PK$-wg5Rl*v)unj^wNv{w zWrkZG;ICHQdA6{Fs_kTbNMc+YC0T+v(Yoa#wVXHK%L@&KqWa*N>{>b5{9G;GuX&3) zAFz4<9Q`HDOWNkGixfke=g?AfH3c}%%`{b?h!vxZ0_pl`Y4LI%-nRF8Q)HWk41Ih~bv2`CGk)!FFe1W5geJ`|P-a*}txz7Wf6vPk5f;IT=D0NMB({ z|K?t6NXPyE^tauCOKZPhbk1!jU*0wVJj>_Dk+(UE&mn7;z)IaFJ53K?5@YQ+bB^^7 zh_Yi)2Al?iA|(pAQ8`xLq2*-wa4pU@*sn?0RR|O@UBe7I6sO+2fN9+M2f4mNL$?UQ zQ?l?BtD<}QLry+7GBV^F=jrI@DUF`*SwRw$YizNW6Z5^52bO-O)lss#1@GO-E_HO- zDX$~kX_%{~w_fH-Q*X|Qj<V1@UQ7*$?OS+7UDZ{l|z#hE2rJnsH)`_Dbv6gA^lDXHFxSz84{;=uf8bwK`Qj}gcdi(6+j zzGS?d`Xm`&(4RoF)kW+bI0*T;l|rVSN)5e*E5THTxP*7wtP4R+g(C*1S$hq-j0_M6FHbYn%UV;kkPw?Qi~)Y zVRKwLx&*n=A2FuVHyCBjdpp!v`faU47E6A{$oRo4m@b}O$sGLF1UPt5A^`a~r8wW} zV8E$stUq3R{M4r*ej!Pc@lv&{i&|Di%UU~z&4Y(ZtwHgLq{b2DhN$yLEibRuySxHu zH)LE=%fUQMmG9DGL_N|;9|?xth#{$iX$5pIk-VII-klAc;8ol?i@(U3|0rH$?Gqe$ zRX>?N@bYXzkxQG(U2~}j@4cgc^;?-pliq z4BPa?xuuY=#EnJfu-B|IW?A*$8O)OeiZ1;7cjbX**0d8wKW+7>F&B9qUDzp|emk92>)3&^y1vOKS*E8Z zkk0h)Oh?ydAgqSEv3p(s!H81sXh*miOf$H(Qa{*=-U(b!PT?ueBOsVd!2c|U?w%*IU#i$)&gL zD%J7CmYr>!yAudu1r!T04>F$4=#NfJ%<-4F4GMR<=8mMDYtAB3yWf+jMVu~nd9Lz4 zX}Mno+V9gVHY$l{-B~pzRc^Fvb319fwCILybGx4^?<{3VOGDN4L+W3T9HbS*s^^;P z*U?(b-L~Syjd=Hx?#x;9`26*kp?zk3$m38(+d9u$hXj#nBM=ZP@7l-#(JO4roUMja zFHZM4E$Mf^R^I<2L?U;8A$zh3dluq#6T8QWN;yrl+OgKt8tc6~g+!YM8`+W;`Fo6& zpxbLM7c)kq{=0KTf+}7K#^uj~MZC0HJ6D%}{9p*lYov@>^ZtR1Ig*DmNj58qbW_BE zP1)cplkYYb-aoik9+FklS+#u9V?gz`X= zgCcmB#b<&~C2;j=b@pgKE1(LSFP;VJMTwv{zEHMmF%f?OqO9tTVE{i#F-q zCmgPhZ9PnC3FgH7GtXxxITW;T4x7J0AYHvFd!TJ5oKl`OuY6Y~asBJTxa2rZQoTpi z7U|w}zQw4uPVe5o^OsDH0rO2cMp3M6TW^SbB6L=5?oS>F8Ie}e9xoo0CR@1$s0BYk z5N8dfs~Ky~`K5TUV7+EG-a(Q!lNt&MzD=OJZ6-(3i(a&<> zcjHBA_&J{;e#_RQd^DC*ejfmrQD@6UZIke}#QDth3QO*T@nZoR`_m$8?tba5EYQ^;sV8R`q{#XXj>w> z%M?%=-EBSX`3CaY8x#Lz9&k;Sy3lRqLixYSrPv>g*AnlAwy_|}bpfi`BZv@$aK8M! z^3c?tPti!p{4}J<8mlP6QBYlct(u%Y$Mxy$dry{I)rZR{08v`ywh5@|Inc3awBI1b zGFOv|AMM7fcJ2NrQ zjs%pGW(iX~>*=E^b;FS4S;K{8sT+odQ#TAs-B6yoVL^m zPL&~us4kuTv`Uy++#!0Sl}XzzT616ppy3RGa+t`rW_(f>CUtpw@+j@9xziu6zFu8$ z{F8I388&Bwhhg*asY-)Ftd(_zFvF9q#GW_5zFA6p=HA)^UoF+H3kqE(k%BYje*iELCH6s}hkW&+>BX4vjb$xN_dTz3a7)$ICHvc?X9*Q|hF10CZ zIynb-oG;M@pGqIhkwnsNQp|(J1Vc?Ka`Z1$w0ZG-YZk}{KCbuFSXvsQrNTw56bcdl zc)gE^*6G|nAaA(HfxJK4Gk<_0<88JF$%eK>@VW8DO$qu5xeeBzMY5*G^xF`N*D(AhpB%V}v6zv9__?!)O~0{=bsJ|FyaJ@A8U4O+)!9 z@}{DFMFyhx4qmY)bZ=m2Oc)j%vr{H-uq^9qP&tA6E&^MjU;ion(*%126hwb206)|Cv zHbPmlZ)vE!?kNJ$*th z5}t+7v5U(gstsDHUi?J+p*9~(PeC+uz(iF7)X+5!P_s!ZK>Y%MS=FLlG_ZO*9flE5 zL&9dt8KMO@_wp^M*wziRty^qLjFiVQRJ!FlP$ zSc^wTvcPJK*^x%py1b9qCO=QLK9Wny63^5iKsvXu zX}BhD!U|Q=pT+~EmOTP_=6h&0YaaKX_@XjGO<{8+VW(#|x~OFXsqKb>{ltXyg&N&~ z%wDKDjb+#^ax-$2n`gn}Sdr>J5@pNK=P9AJqrujg-pv?X-w|s&;pP){;qI6AYC*vH2VgZ~6+Sx&RR=Iay3mtN;&1bv0Hnrq()Uv8f z*Stbz52T`Vc(`)F|F8c?!h+lb9pDq&adGZu3*{<#PTW2@5#1(z;0_lsJ}8F7+Aav* zonRlC>K|YF#I(Q*LYLOggWqZG@PZaWGhwkWEZhfl=?xC{w{ui^S5-6Kw{y2*sg#kb z%;+OEl`=MWmzv)$w8i!JVCX8BHco0vU#rOA{D01NIFI2sE-FZS#aC&uQb%7oe~YdU zoqChZ^llAAzoXkehd46}VCjQ6(_*y0Ty9TlOSzN1X} z1F1CTtjlCrbw^^57u^;M?Z6%9?WH55r_+lqkNCY9!;s{dE;%sZ&$;H>K+B(*A8Kjs zFO)SHm(4YAl8L{A$Gp%E?B64K4sEMg6|8@Zp{>4_37(2>PKFi>nu~|odEQ`RJ;+Ll2h2gKXaRKG+2ge}*3q0;J;;ia*AWhlr-*uU9ocQvhh;;_v`(Q;?MWv*^H#)f2R0T{dlRy`swdf{Na9l?`-_F zitp&h>*kK1euCov1;Z$0V56CiAEtQj)Y$l=vhn>C|B@enbT+=T;+gU`{R!FlkMHvVnJ-{i-in2lel_$&PQ)3fo9DjuncEx%hf{$9l+&am-)vhlYl{vbd8kZk;S z6#oS*tomD$jXzuQANcX#%Eo_7@f-d4?%DW*75}UsFBM}So&}13(2qYR8{hI7@pt+0 zhh^hmQ~VG7_+zv2&nv#lk3TpY|FGiE@Z*on#wQeij2}NB8-KmxyZiAyvhkNFemBgr z;LtxCKT7d`_2ZAo#viBnHGcfz+4vrcf69;Vn~nc;5AhH9@jbKg?@9BK$->=G}y7XOXbNlgCdH!F&sV+S)KQb+_5cvIHpSQ^W zZ=O!So)$QQ=QN%Rc*aoX$j&t9I=N2di&;2FbnIZuRV7SAGuspmz0-{i^d#}3{LADb2^=NZCt9?y4qZsVE5 z^90Xoo~=B)c#0pVJv_sCF5(IK_?s5_w5>Y14P$_hcsE)E!r^A<6`m{(lLgYmB?XEBJL8R z``F_|*tDcd<%GCEvRA8D;!(Lfl$`NfCsvzf9+>|%d~oKRzj%ty`3vRD-T7WP77?B^ z8HtEEadTPX=F*&P=>=yv7QHX>fKmjwbxh+xaF1BYsG&*#Fq<3j-l z!g#%4heV=gd3q)D9LXa;C%) zxVH*5$bLpg*~Ezsq_||LPJ&y%9p+!F`>Gi*k9EzR#FF@h73X(S)zn#WK_J@I7Ylcy zef|;7dgKq~5-5k=&8^fR`e9yY>B?+fP8*SiOIEf!O9LZWd)OSaK$6^2Npger6~uet zzH)guNI`_I4r~{ijkgJG!TR3B3kQPr2;Qxjx3aE!sF?N{<=%`T-poPX#eLIvgId6g znhrRFaz|=r7{?;qxLwPg@smzK9FcNMl+@GQguGk{~*EbaeUDhH1` z4Nt=hf8i657B4ykbx)gC@VYBM_1hJh)VRDR^#g~YU0ONI!|R%z5E6XbdXP??lb?4% zCU27@tH=?fKh$_i`c_kFu@uC_!1Hap56!M?{nJvJCO1l&oHIr2Eh>x@8TQ0#V` zDIIUmS~TJ7U#A<+)RIN6G#b1z5UI)^$!`xu7YJ`SSbHV?b~GesZ7tTf4|1o$KE9X28(Q>BvkbMx&L; zHiYhH_OG$wKx`)TvNy6m#{cJiA(NF2<|0L(-i~Fp}JuGCA?&AAegMkEiLH$&9QdE zg{@>RF(@&^9VYyIfTC$kxcVN@fU8AUT2LQ(yhMjj9Img3!hY!j{&fBCE;n5d`>%fI znBM$~dLp27lIX%ARuX-o-#V09u7%z?;epA$4zF9gK)1lW4u0ho(W7%Y@Tdbc&#n_} z5aYgz5VkRNe}jdxPHwtA!HJxs-JA$Rvu`^_%I>$(1IFtXuUn8hezy|Alx zR;ImJj~9X=Wc=*6!Z0P_{AidCoLY1iU||CxchC_{Xh(Z}Xngqbhg_xho24wRmpW2J z7;OoQjW?7gepH6T-qthyDXa5W&DX>@On4PLoJ|vS+ZdJ`-v+!R@E^f@gJpHKbxcBJ zrkbk2HIjkr(7)vBzGTR_sV*vKcHhkrJ=k+D(~`Dk=0vyC(imSY+T#|8G!A?L%D4lL zl`S3d)LGMBHm$3>>cB==V*dFb#yu+tUU6!=uryC%`H>~;%5(Vjc4Pa_^CCV2M*gaU|Kzq`(gT3=i{jg>%+)u@+4&4p6EAfKU~ob!>x(bL_5 zx=2p|++~QHo?L-eublEZ#x!2(2EOq7Si=2Y)c|ZmJHWETywK*x$~PN|a+C*d`nH2) z2~)rfeutA6Yh!r&u(%pZhD7DA;M`SYi>+#p-5acRAy?gGUgR=$&boGTrWl)j@H^=O zHj#t;;n7?{ZphE`*^qSA*=`?w)Mu#|Sns(KY&-7iGw0{$TzP<;tt|5|Xa?lxEX~h( z_W^SLMmZ(t$}t(=L6&%tejBXeR5u&pL5f<_J`1?N03v(+x$9@%+ERZ06AY)PDudsbDExc z{k-e|IpfMH8DW0Tr}A_5J3!8Jl~Yp0{G5^eoF5L_zn?vnQ*yfeoTumKeDVM}--4HT zL6WxooPqqDHy$A80_BtpEkEa)9(fQNc7U8$E2pG~`8j9h=S-cve?N~?P6_Yxb6%LA z^Y;hH`R~KXDM@U8&a(WR-T`thQ%=bi^K<^SB(I+n4v_O!<&;z}Kj)(SoP7?EbChyQ zPMDvwCO_w2PTC(ros_fhemMu_=ltaXa{i&5oc;F8xjUHG&ub5m^M2)&)HJ`fFXrbw z`2aaDQBKLh^K+`pekC};oua*of>`N9Em{{2vLvH{qq&hGg+?>s=x$CXpk z=ls^b**yRdhBZ_ku}yI;OU(im*ZRN-xEKy^cWm6@Jj{@Vl7J=ccCZFr9QI|u6P z&E=Gz!^SKc6>mhBxp4>kqLG}BvThcQ{ z2}SybaDDi*0s-rmmlC$-9u(OaFX3<6+(U1|Xx{VJobrOqJ%~$hj`t;k-UYn2gjIe_ zh8A-F$&d8!J+Ob;mRNo<>17)`w1uv7I4%Hh*sCSodu14ksftd}};H!_XFlh83Z$=~L}(oNB*mu2Y3rpcv$> zkA=1rnhnkB4jXLS2wL58Je7MEDy_Jc5xg*_cVnSD=0yo!jT>mcbGt(tcuAb&q|C&F zuH!axIUiBt)*g4O5juZ=D?NS@>1H&xphU`4SlNTDB8a-%e{4lDCb{}T3Ggz<9S?eJh$kFgc4rh0PVG>?hvo(w>E>8HH$p-=fcz3$e&GaAhK?-cldF zKGnj1Zuqxt_#m?ijt)a{+?2Kw?yB;+8UKkcn3x z8fe_oIuHd*IgnB%+O1we-M*IPGoPtSTl-L|d4ufIhIpG^Bn45OiDZb|L&{b=Y_&1xQN?eus#el%>#BQ|ym z)bv6Pm~>b-8bUA3W#5)B5{wJ_UAhckf>w&72;_ooq)kitfAZ_&nUi~o2}BB?DQGq5st$ko>De7Q+8JXp`*-SW0jHtZcn$WURki3#tw3%fF;BtcI z@^#(Vk?)mIQJQa?j!v%x(8i}<;oOPm-z%pDT7Jh_)QV|=cb4Nfo$$vmB1L$9THt=- z?jYPu_*T;Wf%oTmpYp=Az)yLue|cJ@cVb( zKj-&p(mhPNqsV^=<@F}+HNvOyy%Tke;(4HHT3{K!Z_~cOaryrWj%#Nl+81`{*r}*< zm#)R#x(7>o^z2pI`=CB$2On~1`C*42(YN1`Bs!}9(Mo!ZP5*!SbF7~!{d>SN2Bf7& zX?p-5dscqbIH^DWyo(YGBojxM%&RO(EGs3PNS5#yF;d^e@;2}n?f(JNVmc|(ulhX% z3BJlX_QCzTd^SDwjuO32&GB+_gB_^+cMRUW4VeW>J@v0yr5^4uAkM`@GD%Q*MPgSz zx#b0LNouLd_)&^>UxRbwWjTpb%k(zUXA(|&t}pI75_9oCgJr>Bd=oTtsLdU${~;9) z3zY}!rxTDB^p75KYOPhg$Ie7jwM&gdV5L3un$Y$@^hA#vIiU^Iyp!&R%}@T*nnFHT z_Sj!(P33lT$FKhi_1a)2-?cT>dTveU>Rt3*A8wkxH5EIvfb7vjCzyF}(MRhq<o<_NrRx0nG@7cbOB*+JJ^J7~_%2LX;xRi>iICzMKIl7E$ad5KxZ zFCL%)n`eg>MXvFj4Wx&IJ7Ij%pdd;O`@nwfHsr@!Xfp2H`D!M_x2EFnv>Xo1y%23G zhMU|5i{p=&8^r`xh0pKrkEQR%OaspO6~#l~bBA;4vb^D}mpj?yfkc!6 z@zVfi4j0?f*HO8?4&CPp-7j>d`M}E-ng^gWmiA?#w%E=A$9t?d!^RZ`eW$uqmio zxu?*3Wu-Zy{VU;#xWxmBx6laJNO%H@0-~@^1d!ufTpi!vyz?}|_vKnn1Bi$7hOEEn z$C-sVc@LGk6Xw>=Tr71*0WN6*XWDU#HCn+`AIDlP+co+Z;Ph3M&`xfu2rXNC5t&FT zve^c+Q87{sNsq0%M!N?@RFKo?cc6gAGsiTOVPl!$r*r3ao)JL z#Mr%F;kT0K7biM;opePSO#?J@v3F^T)sk^#$vgZKk~a-VjNRpp+m#sGmK@hsu`2p9 z)Gh6ttq23@&NJIGf!Z5eSTVNfhMursf#g^W_@l3SGW!u~SgxKYhQ`Jg7RG9~1tR3! z;&NKjIoXU(b;HD>W*YXFLamgV49e@$(B+(Ve=1@BPer z(_FQmH_bP!sh*!q=3c4wF}?+hKc6w(bOfzb&H*iKo$*TFC_*g@ zo8yZmLr|=hAtm(F+v-;;LdYjyx2 z?=J1U2i~=azrm8RLLBL3$5)e{8wTZE_dtlD;Nb*cb-})gWlI$55nsv=@w(Dsrc97c zgZBxpiErd@0btWMX^o9bkAo)i#ASk;K!QMkzYX!f@fXp;1XFz}w*i(bJ9px}!>j?J z|I#)m!x-=mG7LQ4VK#D?%^hHforaS@F%68!0Yw$Bb<5QtpT-31e-9{4A$1I12kL+@ zgI~`g40q71S>=Q?0d38;C!9FJ-ULk8{a!Mus>6x7Ql&{)S%f)DkW5?8?TFh*Xty?A z>OLKI7#KE}E#-A><0x$UL^!ZqGpdlAz>T)^uB&S-P*7sw;`_guUT(fFmN72%It`fP zTT9K!Hws@Jp!$9VpzNxdX~|?Wj{9l3&|_ozE!W`I<9x-N$>vBUs;mP<+@bF2``)8Z ztsNb(A%1BWz@5t+Ma1;KrAIFU;r;1RVwr4Kd>OJ`%r_s|E_Xp8+Z8S-6Pe=)5@V0e zcb_jb`ynxF;#cvvAdH0z+45OqBQ5*?pWg~N)kK2psyR|@x?lV`JNK4Fw6AWtvctN} z7CQWQ^8W%If{6>b%U_(lpd^g}lMBu0AJDh-@aJ45;g*_fnvnhqwF%v}$Wi+YEp{gY z89ODd9n7Tbwe7B3uFeGz;q8O|nVTcoopk)5%ot>Me|G=Jdea<``$_Cl-`UE@wTsjub>okHMW`(; zQ5f;l;}PE#Yq#?zc1H>l?O>4x7Kpr@Rfy>Y?~dW0tl3E?Gk%6YK$bTC!?e*CP4jaL zV;}6CjJdG0`)d>B#KrYP3ax6^->0lfH`V^K_`N+@)$Q^omUyh2-dTkM+o?WTZYlC^ zEcS+aHx2ou`RgnFaA%d*DX-F?t2DR9rtvL5ZkH3$RG0rQ_>L-cp5nZV%PDZ}%9bN` zzoy${9TK6UR;=9P`valQk%QSqZZeN2*r{2$rlkONV5c)ivA7pNu}T`GzoYPIfObdw z=37durJ7T{tp{*x=$T1UjG}7$Pq==$5{`TKW}J5fapNZ~CG-3#R8(0!wc?{IFb{K? zWg{{$Y=&OKVnCJbk7GDSS%$;*Qu2b16=Msr;$f|FSlMS;zw~%{9T~AJa^OM#9ey<3 z-~a6UswShZbYtPb!QQz=1G|3mul9e+ZVD2iy*AA!E$v^kv9VX$x!r>KWXxYv6``Ww zS)rn2vB-B|;M$e%wVQzJJ)cwVDnz-l5ZM60`LtqVabCN8) zGr>_rsIC3V#ONa5g-`~3j{en?JWK!BolJDZIbn5#y-+b~#3hr_bd~$SP*WoMVq(f_ z$o*#-a$hdv&?5KJ7(BFkZ|1{!=@04tJvXlO#JDV~g5=?3RxWAq>x z{UP3zU3Ilf0(d^CT-+FX!soZ5zv0!?Ka9!V&|(eL^ybhKAn{qr4JYAFBRR3aTY2Z6 z04RLJehxMM283{^QPIOW)QG<5ODc~ER(<{2PVCs<$GH0 zLrn~Buzp0&0QkUeDBxr-)L_9q4{)PHUa#KQeYx`!#$iop8v~Vge6qH{jtBan8jnN% z{{J!_8@`(vk2*UZ4PP}L56;+cJQmvVnAaGZpB|5gJ?td!dPw6j&mWJ4Zaj|PXFN*0 zv-iecIcng_*owWewj*w?Vl18x=8wfMzW+_fqQ^;$MP-u)qQH#_!y&JnCi(+ymu7y6*I7>5&hBq!K6Wgk zts>iFzDrTr?LiYABYmXC9_>SUNXLG{NdrYqc}2}Gh41i2_V?;^uh|=4h7`YOdTLac z>8X*$&OVW!G)w#lc|Gv>G931{aqWut3QswwuI6Wo9vXtwEai{mmiPv>k$KGOx&wUH zs<0+^ITCz!hl;RJ^-*)jzPN~hvBBHo>D?UCsqb0dM-3spmOPjT=N|D;0EmFNM7B<&^zQ;E5kmmSzNlZ#eoGuh6@5bmq zhl|(wu{c2|gb;{rxgW*OI}@7ehkS@0p}7Uoy)R-xYLC2aew@GD^IW=gj6;gQZpq^0l`XeqnYxVu!IADKOzx7ntBgGTLmGTW%g z=yZerL~QG~0s06U$lUz$3-)=d-O~fEr7glMv;A_N`tis5xU_iFdaY0xUviN_HJzNZ z8;w)gwCw@?3Tyg6VZN{Ph@_$&Sj`Sh2el5;KKV+UwircD&xSEfSeR(vS_(wuIu9Q@ zB&eEbe*S4+q01_;5&M0_H713-*1eJEA1lu6>^4J1+TYx{19l*XA7hK4OI)8OmT7Zn z+Z?$#-C}83U>_^n;urq%A=^l8NdwMd4t$lE8mo`dXtf*Cf}bfQa`EQB^R5cCbWyq~ zCBbJ`F@?Gn^+hmYPEg78R-09g`E{tg(wqP8r8m|WsPmuNz2y&}i_BMGF^;n(jA)gc zD{o_^-{kEyKmE>UsfwMEGHc$#_Tu?7NN!DL-9=x?V+N-a*Vx3~CjV|o^iVTTuBEK) z4;QC)EIk87frCwL&Zn^7#9?RAL@W^sS`133M8_6;&&iF8Gi_@}C|Zn^-_%^wFVGUC zIZ4OuZgSUToHHyISN~Si)%QzAC6aeyHD(zDAPntrw#CBc_icN?6Agv~x>>#I!&J*d z^lf6c%?s&(0ZSS3dg zAbH6eCoF!uqeD+t3yYsy^YD|k85DJ@EulHA77d}N6Vb(BEbH9iYHwwvPjx-W<(7%Q zW3@~)hMs1%gXIG9a9*?cD}5s-_dy)+Catw*dEqsUJ0~!lt*3)^XELSiE^{A?Ap0*W z%lfmZz*t%HK2oP&sCID7Q^L7$1d#Gz9aq7Qxn!cu(MMm+q!+j)q!o(0<_clMw~c-*&jBaoPZVGDIj3$N$}v8oEGpjLRus?GS9B>BW2${;Yz{sP@`* z&~91>9OIcoiz>$JWQ$YmFS+Oq?Ax1GR z#}*cc@TutRuqoRKM}#ij7U!78An^7wCGF37>ng!66s3? zcAI0jBCzf56-~Tzr3S#P^9&rpc=a}dC!vu98m*6oG?30F#>Ja|&K8iA#0Qei_6^;A z>S8DWS`cuXlPR-(NkeEp1k#d5mfb40gA3EXV>kBf#|kur>R6};?`AQGoaaU701@2r zRGCdI@|o$W#mKj`dNwu4=oJQzcg8;W!sbIbIS0KH9 zHY-odT$z)IvRFOk)@w%ra;o?sb&_9&+l|NC$|Crz%%xo4qIE1xH)G`J2RVqauqH4u zY_|V39}VWQ==s#%qQOG$)Bnq%!KQHaN6;_}7ESxG`6&nzHvRst?^twHq`C10X~wKI zzu;G!7&x_A)O-wp>us6vL8Q{wBy8qg090izOkB=H^L#H}0V?kHI_C7SFw;X)`cmrK zA*OU?*t~jbh;(05w}RgSZ)DM$ksaj%$5uQYC56F%KoZ7yI2&4~>5DY9;16UHjm4%9 zT>5lqqFeNf#IFZidWAU>9&U!}oPbPKZSu+B+Sp3SlBDVp_z=cEp;=+r+)wIc***9U0 zRXS7qHGL)~mKXD_AwHVF&gy=^?Ea(JJC$hO!Bi?M!w|fusorI3MdMtZ3pUy;K0ftu zX84_L^u#TFTmH&6nRY=`t${jo_0)diccc*Qt?i%_MX7?{ElUijq3!q-nfH2gM)PN> z)~y7N{yl*=2+V(pz^eq_SV&+cfkvglgr@1SmcY{l<|*+b1g5@BU;%+OxX)~zL*Ot4 zJOV>-Rnhum0>2>8aub~({4|BP)VT1Cj}pFuuv;Y(mSQAtElSvftt1x`t;x?OcD&X& zX8cYq$+IctXLxY}LSMc|>%{G-pFhvP#WKj;_h65KG zq#=6zl5g7Eeuuzx=$7t{Whv_<#QbFVajZG$9*Y82RBpN9V7mnfZAF`Jvw651%s)!h z_G_Xb7J3ur|JG8p2!86S9+a+nAATp@a}IBOKtFP@59nb1<6v4%C(ii#+Hnq>E<5aQ zSN5~-*rdJV0Ci3)g;F$H4m!P39H%@^k9k$2RthB%AXrXqwm|GxL#SY<(+CD&!fO`7 z&}MG~&Q*9*YF3y`XiO$FJ`*}G6AEWS7iB^hXF``}LRV%&-_3-oGokA;p&6M_BomsM z3Eh?n)n!8UnNUL}G%FLDoe9m!gyv;J^E07^nb4w4XmKX=L?*N(6Iz-HHDy9CWF#O7yL}A~C-oKk zqCNTrs#l5QUT+Fmr9A6JCiX?aO>AeyE3h0_Si+Fr&W4rG9cY_PU9_E5vc#a6{VhZ$ zqlP(MczKMwh*zswjz?ibxPc?~yLQ`>rSpmMJi(Y|g9F^bN*;38!Q;yNfzy!TNiN!5#;A1Y z;1l+T?*D9RR`6L)5}nb`{U4IC2FrP^ObT@}y{J|La*0F7|F6fC?`; zfR89>_zRTs-H!XlqM9OfoYHjF{3^5;k&j+24h{gC8614OJN(R`FHnWPwWvjh$(XPZ z0Yx7=^+js84Pz!aa=wORC?A}ErxBz?Bgu3b#75B)E{i92(33Y5NCx_*)b6a4p0K(4 zXWbk^B&$*_FYuvyIcRT+|0!9NsoR!<+%6lz9JD? zYE7%x6jfp0dONgw3mf}tZS2>Zxp+3vmY!fE!BlkVMDv?1cE3?qyTTrkHZ_J`^w<69 zO3o?GYd>bi4{>g!z8m4CVH13hR#h%> zd*M)%w!y^yjP}dyvuo={)3U~I>qhfef@pY+RYoE zKK5I07GS;~QvVGmQ?DS{Y*!4N`Hd|00{Gipvi6Ss?}=KbF-gyQGW~8{P-M z_2?d%pYpl&2;QS*+EN|p#CPy+yBuQ?o8i6tBb8>Vuww&se#>(YQirC^O$xwdiAhN-S? zS2Xm~TIq?q-h}^4hOi$fPZ&$gr8Lr;v|2*_OKRHV zixFB_##lLR=O?hBBo&Ae(Qkom_niARW7Nw#zi?urs>~D?Gab(FKiOQyy4-q>iWrVX z!7KWEG3hhFRU95XVhk8DzVMTkQVxn%e6sRAEV|(Hgs;&LEqg+h-vhx@(bcxBrv;U) z+H22$rYCmnZ(n%pFEkfyIZ6jEbj>a*tSBG=QYxl4Jw{jw3H#nVmbRe{T0Kul6Iy}- z;G(d3<1dm?)xK`mjAZ2^^ZH^ZpxVQ)8n6+={pJsU$9v-~@CP~T^_@G)SOc>lN59P4 zs}%Q?OJyz=^sPcH^ki>_+?1W2B{wIX^VQ@g>-Tk07m*tdgl14n(;_<9Yz4&xtRGmU z{_D-VXMfFbWp1EPN*8w##c4h19juR2l$}`cquMPAqo3UB2tyBv)6Eepw7(WhYE|)- zsL`^k>HYOEWwQ=v%+IO?x2RusUsHyc*Vqt(G@L$kFO z6^1x}L*Lyg#r|+9;>OX1!tP>a|eoDFp+kb9BDyI1#25_mbXt}f*| za`TN{Fa(;uR8nBx?eF}c$-Pkh8~`O1tnSaxBV^CYQT2Q1DlGBYoio2&-; zXu~4kKmG(pS=3E~vicp}1hX*v10OYAaOkEh{n~5tCCbIC_a7+;v=&Kx{pr6Tut=<|f+eKF>|xj}r+nDS=1@H`ftP7+fNQNRDP!6| zW^BRf7&;KHeg{&!O!eazb;W=sCyh?zC%Y1%E~>S1j?SGAPCKX37r!gEX+;grK8 z2}smUmZJveD%Q89ihgvT?&v_?SKtjz)Hbx7M}_Lidel;`$jO^&bM$evNSKj-)x@sr@<4`W}XuzaW!@n6ypS_ADcJqGpz`Lwmw?2D02Wwnn^;Uh_Wn$n6YI22;_ z>C6zT0z%ooOx{|NbbDU6OSdCuZb?YxXdenw`sY2VmIs)yqQTnDtInxAgqe=YWt)6G zC{?|h@%4E}3yZM%EvV>^*mDnCNcdeGMf%J*n68JTn6#rvuAZb8aBoc@F&;E&4qW-^ zcl@g1FI%bj-2NOf4oce73h2}4A^|eaS8tyC@fWGawO**cq4It-=Lgr--Y-T!(o+XO z+_8mt(w^gCEV}V(?Cbpjc!NQWl~^&Yhp4AXU02uJmU}_Q`gM_Lw(~vTNCSMd^h||d zs>BC-WTXXqr5tZqse)Ud#K>Bc_x9K^Y`Qg|S#}~EiohxngTPv(-uYl{=}W~TrxwG4 z^*UaN?Sb?>Mc|V)G(8op{~yB6LM-A&-A%jem9Vuzz24ngx65z!pEbw1|Hj!3_BbB% zFA{6fHODMuOWDrN0XJV{5ltK%@&Jrmd9@AMyLZj@#GUWf@v9IWY4>gX6mVhlc7DMg zy>fPK&y?MrpVlkA^^C>Q4l`~n@|l9L`8kN2bZh)W4>6N#8(O~&A8BW8UR%tSw8T!A zC~9~DmYV0i#?n{YATvQAL`N?n_RxfW-woPve;^o_R=pgh1>?6VwERjnFc|+KFHW>M zB3Q5edaUiBVEsb`9942czLAlGoU=;D!H61v#;Vym%~JL&TNtO%EcTT{{`b&n9YA}* zN6O5t!rzIS`l6!*UYb#q4@V1t$Qgb|ARI?nh-ScfE@$tj5*EtQ4tD8 zG~>fB9KeyA77KT!u@F2$|oO=c`}&Rah?Wkx7q z<+N5hViyRvI<$y=_a+KOHIc%IVm|o7dlg}7HRV;Aqvk+9ziV9(_F)ouueuMSuvO;N z*?b)5!wZ|p7Ja1IB2HQ5SmmkMj$&^E!%?IL+F~6jrSu|wmshJy?a@Hf($Cx#>a8E| zw?bvbHN)RcGr!tnS$WMMd%sOHM~CnW;f|c7=DKro4&mkFv~sg|Yk#x$JtVfU$+cV9 zaW#iF4}EujL85jm{<^qWFpoSw$8r$R?CFgwiEXr%6b9N)Q$bk&mQcgRn&=MPS}R_BO;eb1vN7=myhhn$23w4<;kfZi3E^SBY*oC zth82W_nHUy5ay;hY6IPwOAR~?7 z8hYlRgICji)R-&e;=F}T=gJJ^)(Ub~sJq@gU-8wO&T}P{DAf7($$K%Kbt^u}HhaL~ zJG4P#GF<+>ko5R~j&4oV3eaU}&sX7$Z@p>S3|}bnZZ=*}Wa+cx7!Tr>QcrK}{}%oS zFX)8i8I!?#*^z4rnfHc221DH#Y&qlW#^8aEvSV<_r-U;Dumd`}?*K@lW6YW9A-I(4 zH3T=jd!Qk(@Gr{+JrKGC*bm6SerC>we*|pZSIHN%8~$hZRNDm)_)8nP2KsO+oWh0+ zSaLb;G`$WxPV7rKbt;&KxVqOd%)Is9AoFKf7^*nG|h6L0$7RbpDFer?qm0mPf1QtgeHsoBed zO4ijFTk%4Bp=tvpU2NmlPgY*gr#DLwZA|OyIER7$bU}qC)P{YIWBcJua1hC|J*nwL z!~e0K{haf!Jr!a9mkI`dTSFiAtHh4)#rur!rHt=)ndOcuHApqcpIcLge$(-Nqs@)) z@8$z!1{pDX?S?hjOw!5jOv}{RJ<-wHGIp!RM&(M=UMuzDu<1jW?9DtRyZhbD`^U8! z3rfPjHJ0~5g)i4+$qWaV6TvpiPV|m^*Ovm}-Hv7Gu~)4KsL6?d$~lGj(yD(*)uNQB zMHgpB?-H3z(w%5nIR6eYmNeXYyE`x{%HCmTVDRqNU=5Bh2p4!Cn<$kcbCH8khPTOA z5rsk6;-BDfeNWiwpX96wy%I3jBPpV{M`;nT!X^C7*KY!POq&jDjh(;+wYwsg@?Gq0 zKMh1m>S|X8B3&9ouW&z;m;#~4{)_wv>%P$<|0%sHvZ|{_ZHusTZv%eZK_7|?Ye_+C zyHi$xwGAQks<+bAu9p95XMWo6XbU&V;*ndjpN09WtA#O#o7on@mF-sSHy)kl28J>f z2P3wX8aoMg47U7XtnH#;JP3@rkH*^4K}{*}uOJ_U(AqAi$;zE7bE|FVcCI4_pIyP; ze0+9qoKwBHf_$a~*&}t+&8DVl9r4@WtEA~T6TWisZ z21HCCO`;&d$F*3nqNTcHP*D*BB6I(1?=z1eDBpMQ?{|MUFf;p{v(J96z4lsbuLqr} zexve3w3q&97^gNm{7s#t1Mb!2kYOhNd{vNN2A1A}CIj1x)HJYxAcMWFx3b3v#_-T) z^#1%_s-UXt2`d1gw=B8h!DNgwgxJ)4mNsMN*$cLEo=0ylB8`jZ|`FECZ;ZE zJH!I>gem~KU`1_;C$y5hS_>KTzC7Dl&bx!)NZ-s|vGZ)an>CH)31!L~M!{N6!$dqH5?~yOh~)J2Q|Ym{O|-}E z{)C3$h(V+R5=wo4k^19#|BAM}#cj@AdY48D>(zsQ6hv6B7ICfvp14G}SFFpV#pRpg zEq?#WSc_$Vj?vsd3L6OSo{~2EfwaY+c`7hOmgaS}dL1Mh7&S3_z?8P(I{DD@! zOH9#@a$k1JzlVtXGOW*VT&9Z&Y@9Vi+Il|`LR#S<>(#@eQ01+!E^J!r4pv}apB@c7 z6t_E_ZHP@@EfD1!c?D*|m3*ly%g%7d`PGF-A>WyqcxS0dx4w{*sS>f3^46=l*sqdQ zR}Z2(?3=gQTg+=>0@=SdidB`7mB= zBOO}@b7;yu6*HB(Kz&G6q*}f{O^c=^58|nCftxuRDkrqP{D@?!s?l2?BiFX6KXo!E zz`gt(*En0A0#KyY*K=;9U-5)Qv}(4n%NK1MQFa~r?ag8rQ4P0rBT-+!cCf00M?rh`jqFLQK5X+p| z+S^5q_O2iUb6js1dFRBvD-_`EqT=}8E*_XAiYlw=oe-RBSftU6x!SuzX~NsZ(cTrx zuqBzY?QADD5XK!rPyaxqmi~Ue-!p>7xz@t9F$dwqlFy`TttnQMcFPnz*fWrt*V>^B z43;*rES#U+K3@3!dwq_Uav_C!4#Fungk|B<>S_1PMm+#zC4LwF{klO^8A;*-BVU=2 zfLAyh+rdIfX-+gebB}!jS+O6tB{kR4P|@A=gnlKHe!j4jIB;$BZk3_XsBXKY;NZY< zZ>x>B3j(kmam;-Cz~)rwfR$wMjl2v$0wXWC{pAF=qyQt<%pE_Rqt=?a>xXmHTQheb zH-}a6wkU2F?hDUsvM#h{ZpDpHd0yD7)CU{QjG;e%+E0S@pLa39$nyyUZ|eDk^N8) z7jqh1G{ix{IA3WC7Yqwmv@t0E5#ne-6D|mA`7-Py?9R+R;esLIiv5X^ueygh77_*d zqH&3EvYA_ZIhKZ z1gh^Fph>Lu??kt~jYn=dhIo7qtwu8Eb?3Yev#p-kVjw6p0YP#3+`1>}aE!bZp=fyK z-eB9c{{Ecw`uq5vzLKM01G#zV0zna{kDv7;sAYvtE+3o`uWISr0;|F?U1s6e@UQny^Q*{B}E= zg1fp-OG-E@P>o)dMGMX0&!@N!`hKqvJij6%h2D|1OwL=%MpYaRoIFJokgTSuC8}ZM z2!tnb?X0QxlM?kQ^4z2cwtV(H@vn8zS}+GmAPihibw2J#27O-Jg7*>U(!%eS7VcUt zPDk>!(~(yPz0$dEX}+tq$Fq5{q+4uzzr#6_HQOJaxf_I@Q_YcZQXxl{7Vgo7j87_L ze4-GNx{xDF8JB{EtZJb6!s;Sd^=p+M#+wpdTDbSXrc(kZ9mu1Y^bxOCe)vk~HGx#oY;!%EJU^Ss}j5iBgT~2Oe04k)zhNY zn`(EvMvQe0%HRv%+phGy)=XO8`M_AJb&YtlHRUcS({b@Ix1d1btd zlgh*^(qW_UVuowHi!r{uy6`*mO1`|3FRx^z=P|5F>>xGv(Sx2j=#>$#>OoI>8Xx_n zd%i4mu^|7`*1;JNC{{4c0RN5Fv_otHk)R#V0Ug|0`4L2!ioum$M8bGv6t`Y#yt33c*&&tFdK-}fVSuvV? zYmr*|Vw}SL?h)2&0J3tcIh9d&+{KyRXz2-*^W%-6au7qnEv%0#+>K)=$m|b}h}pf7 z58&3|VR#@ME5~#xnVo|5LOLqtsev0R+^st5-yJIYVl*0Go#s?PAkS*~WSiXXEb)!tn(9_a%v)rKpDvfDw!gtFVs>MqEBHKY4TR+bEBE4UYC*>H?5|fQO~$xU-SawR(M#JIB{|1)B+C>i11um zw3HSYA^7$J@Wd9YO^qgWRc>3LuT5awvPQID+w80R+TaFHN1v)j+|5{9v>DY@jp`=E zGKz>?3Au{Cq|=`Pt1cD7m9#q~f$f*+k_{hnQC$FoAD?9-yh~(q$l}v$nbG`Of!Q~CnT|^6&!5+b1hZ^ZerBM%5byD<_uh~A(Yp(T zIIe8*!mNiJfr|{QINg74udX5 z`p5W8^8iIEA_G{6(D^V(&C9+yK%{bg%jcS9)i$1GWm|FVlA}SL?-cT#jHWte12ibA zPeHK2p1fvi4*GuFMWfZbgGP5krjNekPvIK8ZLp~QEbo4P20&nxg=b}(1I2dir&;eA zLOyz4EX_me&eb3y*v5UH?qkutInvXA8sBI8 z33+{_hrbu!Y5okp`-#K!BYpj@5w)!;Yn;$gT=q=LfG4vj#QkRCqX4Gn?FZy-$r&Ze`&D0HP#Mq5_JZA%(Wmae1h%bNHFeia zOzgnWl&N3W!ap?3cT?(+%60e7m}!m(^UWT!WlTy_`K~7OBI35`?R} zffor{*S9OO&v@&Ep*H1zMbz_S-M<|$I@bNo08rw-Jr1{SiAFbSD-}n}R3re2;#c9$ z@_X4If1m7Yv=6C!f-FCi@Zv7`mD0sN@W|> zEqxojeTA6M6qw5Z<MdCzvVi0-wote~)HLS=C-ku$$C%KCS*JQS){54=HaV95>bN=nVsbo%TnjzQ8|8Ls&M1~@i?Pb zXmXSsKgUp$YG1SIXm zK!+gya|6Xz^J+26zhf99C}#QpK2@v^{JAoi3s4TrEaJ3NwlOWCMPi^%6{;Bgtz9Y! zhA&aGng=8el0FZzngc_94J-v_79_*GuKR(|U684(eh|A2*v~29T zWsbS$lsO*c_ZdDt`P7XlbKJ=9E&Sfa@9F$r%%_CU`;sT8%<&Ds9U z!_mXpKI{0L$0xw&J3a&XT*7<0 z-6vUK`}$MV}0)kcIJd*X+#y^IV%aWw5g|C zM9%BPG7|2>8Xo*;tY<}S=)h9%{+cXqV*MhF-b|@FMYuKl)CQ1ki@DFn>cXo84*bEs?nt)1)k6)dsE=IYu2a6uJzy>e8yN0d>#d#$Z;eH77Nm3^1GI64mXJXKp7 z`!CmOM5wXDWuzl-c?|VQZ@N&9)|S?eF}*KQf{@3v@HQbe7ak6GgEL;#zG7-9Pq7UE zCambH+2h`jNBqts&JEnM{lm?yBGcRF#V(SG{pbQ3^rg2C_zq<+x^_gm=1KgU=Rq zRffP=0Ksf)AKy{>mxkAppbf|AP5C~B0>^5-k9Xhos^D)tx*pD*^)ZL>I4%#&>AZW%)z!Z#ijgEaVhT+ zm-5{LT~zbVLNt7YJ0s(Tc1Cqpuq|c58B>&Ve=D|qqLGpvyiVeeBS-6_Sq(9}Zi1+D6 z@6$0Zdz;F`vp9$%U2^aF>@Wd{TCcX*mmPt8Ylo+Q9ysyN%sT?3VlVfWf}CsFDRl~&%_Pp0P+rpc%=Z2xCWjX^M5H|tWD`u7JnIjjzZHwV z+BI3dhrU*KFeUfhx#Q;NTa(@9YRkMnbjS4=orEtfiWIPg%yaK_h9*S zFicdi)|Fcq_?#!MM~E_Mbz|PL5IhlkQIdT~_0uT=s*N4ckl)WSYsO~aZHn%LOmeXH z&ttx(F3*xZ@Q(;Z4v*JD5yg-C63GBDPSbn(dy9M*!QS>qa0xL>V){8`>)dSLUdL^j zrk;Vp_MHp4qou<5$cP!{ZBtV|($oDiMPMXqicrHkL;dQIYXUb%Zx=cM3f>$zrJsb$ z!Tc=s=xcHqo}a08BE=-EhyN6D4VJY&jV?&4+xmwnos=ge(!b!r9)Z4i(wpQei{|&! zWlX0GS|)^Y>l8p~H5xz1tzF*KZ=J?lx|^6$BXo@wnXMnDnId&(wKyE_3D}$dM|$k3 z>P-HYe7;_}f<|J_AR#&O{hoC))1ohsRz@^PM58q3Cblh6g+upA;*({rzf4&BCeez= z_D#>j>ifm^ZIal&A?=z?#<1nA60FS@&ak$$5ac$pnwtH}NzIG3fb&=Bk z=24gJA0}O$XuhOZ{(DL3NNRfmT;p%#>7~{eDueMtEyGjwtxPLJ*(Y#5!+2>&4PM8W zZ~)+wut%9h5YsI6QlkNIf%%!~>*WYj0Ompg?Gft)7yuYgXuLqhHdP2wCyO)Q`B=qj`YKrs8)5F;0fd5y$oxGfug@7~oc@5n}t zsCMK|js-(4K!j7In%9Gi2w8h_u)yV_fi+T>wM`55v(#efLeWa;t(SM4yw-&9iU$C< zLO1elK|5_dQ8J;Ps#iUsY(a_bHY-_idb?6&26uV)@=I_&?`QlD2nXI~v)aMsJ~jLO zn^~AInp6P5DqLgNf%}@xo(>2eyx8A2cyJIw zQRqSKK{+`JbROyT_&Y`xVjhx%;Nflc5XXMlpyKP4_sk^xUr-%P>><8SB$xdOYj>!84IzZ4Pcp+&k!>T3;<8o#2gzUE^ zT4C)AHC!){lt6b4i2iIn3nE0>to>9DW_mUH$R-i1I(7Cr$j=iV-LkN_12|k48c{@A4%Y677*=4{QW^U^O z7uuW4t31%_CUBd5r+_=(Z}4?Ed0|_g}p3)B)Br`@YJwvjr%+tS$-xxUk%2TybZcA|5wIskufzf7I zpc1lUxcHn+zGF;87|%(Nt*0hUJ`>p6{|mSle>r2XaC}OJ*)m9Zfh)L^@3d!Q0#j>9 z#--0gGJbzHHq=R#8oNA!k8_PuCdN?;;bs!#7aW}C+>)XnYW_{rcN#U@U?TV#+Nu>4 z2<4 zgwCMHjKHdu26b|3A={Ci@9c;idT63%AjufI+RO{{VlM=)uyZ&QnGf94K6AdExmTdS zo%#9u;wAr)WTNC)WGzpXkckGnbQOB6oA9$4vW&XRLO3aK`-q)o%c}Ex)vB~X&dxhx zS%*kg6qz&p{Uj?9)=pw@x5X#6@`Yng?7v^pNaygy8a7r}?F^hGBa{}n(QfhFjcA|a({{_;q?{0 z>Akj(r|LfpdUXX+fb@E)gN(&aEp#Q1jk5`;2F?b3mV_& zJT3AhbPSNK-+&gL)mDY45^iF32>BpyR=7v(6et)Yhv*9~V(+V6J4R@|1qG}E_Y`xW zT!b)N1DS=zYR5s&)?v)TlgJ4*GlgugweOhADPZnNV}u)+-*L<&e&Xhl+dA)1rC;jF zC7ujVn8z*}Qan{&E>id=bV=u~h9@#I($heAPnLj9mvY`SJL z%U3-rF_YMeUX|X8SFpFcf3FS#_=DT z7fq4J%awHh`1K@Z`tjtkim_Xg%n|98YIa_ksk1?iHzIE}`_95CiG3&MkcN-%vHYf0{>+YYJM*ywI{TOeDvBT;n!)EpvLd11pPyw8D8?vO{}Vg>HR#R zU-DYKDZ-Fdi6BTj722y4Jv>$K=mehGU)PD=_*B=4EP?|y1rK(mK?l3hpo1AS=wNrh zH+b+Qf1a>_Jw<^JBKmhLl&L@W2<7l2{Bu43klQk%Izh(`tEVS2PvAu0x!~uh*nT65R)UwE3zeg{Nfr+M< z#qv?;<%_>hFGpWE7QKAcn=(3qp)+R3sdsci#nPl|i7xA6PnAqO1NqGPnmU>%z0C_; z#+~#7_R#()<$RZ}TvGx!d}g{-bupWw4A2OJ3&!{d>EQA#x6%HSX%9U%adTac8Hq78 zB(_oaXdj)`rmwNNwCYMq0VVvh_Ri!u@c+|h{9!#B1Ja1i&4O9;8ixT)@|aSv&%gIUVK#Vlnqi`k~h z9=O^(CEh5{kSuC5XXEQM!7oRMT#brxy&%6Qg0LXQ^qZ@He;`@?6_TxI;OvNr=E#H2WRt=3>C)vp!SnZP*3dt( zybnv^*9!>4okwCR382dp+Zo`grtzBTY<8mL?TZY#lo{x#M*#WCPRm=#kx2Vf5PQB) z6%DQUTs*lvHWz|h^x4vH;%Ryz;{?&86Ib>$Y0 zTefjF>r^Mx4_!-!uEi4?%f#zpH@h(C@Hy@nbm$gVSdJNNY&h%_jdwjuL@9Tj$PQ4u z9exc=(u*aT)}i1bkW~wJgNKkI?3QWIeZy1r4-&Eoix1gKA_yJ=w{7NLWyKLFNHO8@ zRK29H50esK3c*7?1Ls)m4J8D*&d;7Igih_V27TgM%AJ6LKCc^~v{1!n5k(C_vmc!! zz2zK*7h@+T34wAsrMC0~KBO^7-*BSWD^j>4GUxB=9K1Wvo?$EUxUh5Hk#m6f?nm8h zQ{TW3$yCjT#UzupPkp_oT_)!FJ4ooA=C=V(tF_rzC4;=3?Z%fq35)U5hMeInTlT?> zGDio7v*qeCM>l>oyo`owJYNJ_*1M&z$exfauNj{?#zjefe3no1k9n{1vX znwWZ_a^X)k?{y77w&7x)Yq-C^c=`Bk+Q-q{;7W1_JRF`6+j*FA^MvlF7%saas6Z3J zYQtaUH%>VS3BYVEO6OeVHga$loi5=ZtDfWiVB6WAsy~t_&s3NGn$=;nru|noj&(ud z|A5l;Jpft5ShrnVPnm>X{$3E6{_aBHP(_-*qv$!iT03cF>0|}xEy~9R%6`6}BcOQA z&&q&hLT>4C@`NO+hwneG7&t#9;4HqFS~d%5g8vS~r-fWBJ^h|1^axLmVxP7s7t#mM zi+Sln>UY-#H=RTFy!ai8UVd+kAr84|JzkOP)ygNnjn)XN6*~`B>D6(@Axjts+r`wO zPi@FQO0`5kZs*!-&NDI9l1$&scv*VIOJ-pUQ8cNpFv3f5+7w%LThuB%9<$Dg z+O&g(eQ^g124G`5@Sm9{N(vzB5=x!JxQDr;hi5SnTku7<_R}cZDeH8Dg|3(jl8BuVc|z|Z-=>CE%{6nv zWO+DbGhmTyZoNEb=ct*ij?Lp+^J?_z9AT1R@ijA6RR%7n& z#-BKIwc{AD1&3k7fcR7B6}jzG>FR~FJXssaw)L)*vzgw3Ug-ZwuI}w~af{vI@W0x> zx<$QKZLj1&xAtNe8xyl3_MtofWoPS6o3&AxD37`Y*3Te1l%QlEQx)Tkw2bA~><@pR zS>~85*!{XP$3ID*Kda2~BEOCf|A&80c|WB?hg3ctQahxiq{?+_YD!9nRJoKp`WY!Z ztIlWM;(79)OJ3!1Y6>ZNIq_%GsZ=55q@*RD{9r1Dvz;}wOs(O6zH6)w;brTrTDubshq`5Adkhpn{0YI zFFs;+sV9D`(dahSwomZPF7VjByLjs@b8(SOTo#m$RWj$zAA3hG*rS+F2_)AW=zii*%A!4s3?p2q_>G;qktN8Y0pb0tjgv)Fd>=jZgdV3aqLtkX zNA+`}EpqZk9mOYfKKs*pb3Qxc|JDI*v+57iZw_d2!yB0+2eb!Ryx>!}Oh{^j!wEU4 z)IVjGoLZ4iR&_E*Yr{*#?k*y(FO>U$0f(*$aNr#c5SB7Wl7NG^PaHhjwbtfe1{9-uQL2S32OClysuZcYz;8DiEWM0vtH%L{ z{Wds2uxoHQB;bIPSRi5#&~aG(VI#~+bA$JYQ{7B&WX5{}$sGWzB(5X|$#Q%w-pYRc zo`I9pK*yW|EwblI$A7LTB!ChgU=t`J;76)c2}DlK3?3Ze=O{kUe@@K3L8X6a z@L&$B=U|_}sTA8eWGFu&M>+h;5n*JWR3QZo*(keJ>#2q;1qDh^*)U&rt_0iE8wCxSe>A7ha{F=!b2~gNqk~| z@(^#J`gBSs%on$RVJ~ZDW`*L((+8Of#l?#`H^xZt;?6X_{c-2WYxEI zet894qMu6!d8~8B+Wo`7x}@V|F%6OCNo$k-^ey|#)Zgwgx1{0b9^cwkmqy{NN9)&u z#jM4G#SmwT$@D0-YncBjW&u}i=R9@zIozJ^`-scnBE9IB^*eut>;y6l!#NbA#(H1OmIo|lZ z0M+eOt0Xg$J~iSJuE&vEH@8E?by87lcd=d_Iw^f(?Hkt{*> zsX?Rh1yYe=brrTb6bn)fYoqzhNFRI@DQg?RcYg{9-w)teo51_c8RV z$$ITfoi*Q0J_+EK-nUC#m^L;BFF7*9pBkN%E{e)YHsl%}GQf{+*%Pg=P-OiQ%rbOS z-H{ZOw#G1)mmr~Js?ci98~Pd+`+^1ikpB8)-*K~^yiZRIC(<5UC249Q9pX3wn=#9nVPYfM$PnEdvixdqEez-e4 z?r>`lG|szDQO}y^)^@h4H&Ks|q(6rP{=)s?X@@z7(2BI4+#Lkw+A;Lq;O5l2)|A{P zPr<+N?BPd6WCE>rMy9&*DKT=XEBC9wzSe83%|q*80qays?iNo$1Djt@JR2RAO(env zE~>=4$-bdq1?ybFhSa*xQgU~A3cdt+_8R)GUB2sNN*)&;dpP$Uj+Z)8+%VDqZ3=#H z*zWO3R?*>L-N2!ng0+W(ZT%OVZEc!Tq&n)J;jQYhc%bMQNnaYq5WH|-Dse;hhbN2I z1KE4s4&x6^&1>B$LAwOr3*FJ%(xbQW?Xo&qmkv_jz>~~0Yl7!uLszK%Wxay@gVkX_ z(qPPU&x>Ob3wYhgUKnyx>7J_XCY9l-YA`7TrW;I((7PgDBVRU=DokpCr|NemH3&A& zq=tB^s!eK`r>fGVhI^{!o78!ps+&z}q^IhqCWZO>bd$>SRLP+^bxiP7i3E()L{F7S z1V~-sslpggQbnGspP1B@o+?qR;@)&ml^lJOy2evw6z;s&da8~9f!w>^Q-zI(q2Z=9r|Q^i*v!`R*`5|H^VhmE17uYg|<6i{I%yA>kLzIT}yy z(HHWZ3nBLWx06^diMb?1=-|JRg!r5AUrS=8BuYuFlEfqut0lonU`R9-{G&;%kwgxO z=Ou9_i5f|qN@9Z~vPjfQf@sR2dP#H;Tvw~{UTr(%6~|wI5C%*@&SM*Jm((p(8%C{t z#iqq|+d(?vN$zUr()@HB@8yei2Ug_=Hng%Wh=Ynt2jL&+if&jP8iNPmX-XvqjaHq( zA&^7itcE<71AnP6DcLe$cSFb-eG7|`92Q+4!}K7i@@(}+1#-82f&mWrhgJ8gF3ha_ z@JQ!r87%e64-e9+NPcGR2PwF?>IE7L=cfm2`OeUU>-|!EaTa(ixuI{VRRgH{u zv9d=MxECM+h8h}HydTFg=|qc}#Z_!K z80c7=8g)_%)T=n*GlKDA|4{!~M2H7myMvm&>2!+{=@z!hVGf5eSp+ zES^VVM^q!NIh;cI`)m9b{A@_@&TQOKN9SjX+*{74S_P?$4A!RSw)s1h>bnM;fFh_o zKC1&>N}kmZFJ)Gl`uy}+OP%ozmimKx2PF=#j3*`!CL);^`+JViQbB!~;Jw3~FK{Gw zY3%g+SPm^Dy4shmo!}xDzX;X550_YB?;hNpam0*jFmnC$j)>x9Du^$;?<0|NW%(+( zHWI1TJ(9#s*d5u9t}K-4_ux0HgxVwCUBp9to^ZDdT~5m#xW)5=bM){4Bt>f);=d+h zO9!s9Jmo2>ACfPTk|IQxW9dA9AAO!UTBNvWkB#jFchhTZt9yAc8iC}8*D zT3qpl^&K}BDcr*)`cA8G553B5@^_vRmpK{RlUd@&vhVG&kuvLX@m@g;i6IsX^=T#q zqxh1s3Ny4{yVO$Sj`T5!codGv!IEes^&Z#|UZGF2yn-n(gb+M|Ra*^7K@j}Z%1?v0 zp5zWm5=^AQ+r*vSj@A7U2g?c)nGs9JHLzi|#}k6=#pQ;!kCW`EWbbiA#yZ0~^is8R zEMmfgLs7bpMyE^_5#o~{?-Uc#Wv}B;lgkS};!>QCF)2u~GOVqh@k}xxzdtIliHBG#Xn4?zPB?< zNKi|+2u`et=i@WN7|W7{z$v>L$3t$=?Nmo~-tb7|4%)iZyIZxMk5;@M!{A3AQ(qISNJgh*vaQJt@55Cq}$!K?w1$_8~fPKQ6!B2Jj}Fczlx=c$A#=H=tORu2tY+hsNv}GpV#lB~mIm<2H#r8_qjPaxySM|VoczDEx>~JExMv`2} z_OdQL9NaWe2reOg=65i}431>o3$-IzmIWe07DWfHh2BYEN=>c^y(7$f%rU2RyX%`q z#7Wq}`{o0-zM791kBJ}0#^d9C)+JES-OI~;jww9x3F)lm*Wx8OkUiMpIGj4h;mCH* z1=}Vfa0sDwV6$jeY@}~K-wqs^PCO8keM`o0)(pvH@V6k_`57wucUH-yj7WYqK5>s) z@7vU=7ko!(9k-LP2-lXV-V02J?S0eqPSbPX_jgOeGYOXi-dx%NzG3k_eES7QzD#pk zJ8@D${6ax90e6iil)~dPZRHWH)81J8p<`dFWAPyeWLKcbsv9hqV;pmw4*zM3KhVz( z$}_t61q<7k^(@_+GnK8_*3Jrh2|wT;badzCX=}HfT1rMO2|kj1!Oa+6D{reHW+vf3 zGF(~UWS^G*>+*1By~PS-gvYzpDY1O_#q;SS1(OeHcX%G2U=N2=t@$ps?-RSw&jr$( zIC}6k{nb{!4Q{MrOdPYZi@95m(cOBC;Dk6oUwsp%Z~{H)_WUHyZl}mWaSwcy8IuSd z>a*0c)v8R)PwivLC{%s6CZ<#2?@}XJS)0Oi6}kL2k<0hH_uDAja?BXO;BPU`ou>D3 zup4?(n*>MfZyaaP&$vuSJ;wu_nI^oANB~j!O?;mRVhx zz4Wr-^oLzo;2+M6$PNdr+37=PyX(G9fx8)PLBzmj)WM_W?t_^YBGb35FY}NA%V?Ns zGBANw`m^v-9W0LRqZ#?|K=q-hzdz3+1)1$(wmiF3&GBn6g765m{=3isuE#hhr)&&Ato^+np->v65S`?&Bsr)2}O1~h%)E-ne< zrneB&^_#Z>Xm8-tE@> znQ zjRm8nP?X??=4aHkrRHv$hwNcehH9+mZfT|-A_59rowE~WwMz10tvb@WGAq4tLRPwc z8J^Z=O~@k53nP`8o1Zl|gF{IQxl0Ox8ZC4~jf@Rv1UF|`)7rvCu3&y9o1r^*a^~D; z<6LSIK4aU5U`ZFCEq9ibsvAA*YPGWB$NY^tJxf~U`-RGzE40|~8h+L|4MZU1553M) zQ8xsjE*Xo3`9fDGk7ju+_j+I1W6q7x*s%4vDS z(5ss9(-VF$tO=_~WGg4>;k7~@MwYB3bCKFV5h`zQdbpx864Fm+5=5XXQdo&_F>ntO zasD;rxt$V1vANN)@)m4QbjBie#_tYCgSQiLsFM{sECr7rX@wk=4GKyPj~^WiV}kwT zYev7}OR8j(8qjno`i(9GF`38OXFVn@^3RM+!s?LlHzpcKtU11HT!>-yRETm~Ww_!V zbsZ)dk$fVOtsN;HDXjF>?|al)?ot!=gCRUP&wem$=3`FSiF4$Ero)KR?ZlPI{Rtg5 zIVy@;T3MxPD(#b?hU-T2Ud>3paED@|?!6tE=nQMZI?Rz_o}=2GSM@5iwkC7Kpoa=U{TFp6xi`Y%%se7E~qSU9`fQx-{OFbKRFN1wFeky0+GT3_$ zL7i%A)g_5n|R)jE6rRrbBLhD1!{4bNJtXS$0H@214#LBf@fP}eJUw?NUgk~k{ zPY6w@Yq$V4{7gu9-8E*ulcl3ChsTbV5YRn&6nwc2=s*q` zsaf4iL$2J z`+RIX*5Q~z{pav?cpu=nDv%vqG$6(x7Ywp_J8RBxE02Kla!k}o$I)P~A*d%xB==G` zcc7KQst<`C3Fjbxs4b-v$H>;Gf=-maL27%X%uy^$1 zG;Sh|6GfKfxEov42t3ailQu0M7<{uC=4=NYz&RDe_Nc$7?`Je2y5KzO7u}t+X+i6Q zT8cV3xQN4vF2O}^2eH2<<0H~)!r7`s6Z6dwD3blsyp9{Un7g8>TR6I?D5u&~Z>Lu{mY9_}qsslkMR&ct}3m-KR z@3JCw?SptzEnErphJ<}J+;ib7;X|G4mX|!{l#bNYknl`s0wAroBfoTpJ1>jz=FR2q z@MXeDj#0m4bs|LRC8e%{F@^o%0I~=KdEYA5t(NhnTNwZZQvbG;R^%i(Z$<;Ft-#aK zz;c9J(ZI6ke0MbPD0FbqRN8F2w;cXFfh=Ro$Xgzp-xw*NfAxAAomfw1v-pAt7BOQ+ z=yRdXHg|-8)iT12YhsMaHuYYkZu@bqN)l?3#Y=tkZx@ISr?$|lVXyW#QY^vT0Qx<2 z+L~D}Jl;Ut2x@Dd1NZ947q*HKRP2E3cKj5z4zj#&OY|M@j=4REP9z1Rfx2D&?smvC z@7sjm@xF}*R8eXl1p{(ntd&P8Z)z^5oxQ+cmSD6nv#I6h;3r~v=!uI4n!+iRI@G&e z%;d+ptVx4Z{Y#9kcROck?R9(O0fo)3 z+=y6$zpxi78gn|~cR&@7nxB>O1F~vBdL&A)ePoALXT71fU2SH!Oh~k0nGQ$I17s~5 zRgkIO4xHJbr|kHKVyTGFiU}X0R^IJn6RCBw>U3FoTKTOY^QD59MuI&Q&v_&SwSljm`@3E5QF?^2V|OcF?-1&Z)wvbtTJiRKLT{V0%1*ef zT_GP^c`auEqPJpA&T8;J4~RSu915=T-3Lkt7qZ%)4i}0D%lq^cD1k<=RK#Fwaa;qD z4{euJ$J}1CrVD2K{S_LOREpGwE%WJW@0!>av6f4<>40pRPfNLMna`Uo^SjeNMlU5X z#P1xp0>djH-Z&c+bE4>l>o^f$fURW9@flNR^jr-RGB>Rntw{`jX5YmFT%CP zdCcKwn@<#WuCHPt6=Z=yS5qbcM4&GVkGCMFfJA`YfVSX0#j4^3Sw_o+UMR8(m#I@a z>7Cy~k4~gc%YL4`_Y1<(^z9mWqvR!oFqZRCBZw;vhteVQI4eb17#c#dM$9Ay{5_#O z`XxsVlZoawj7QntSu%a{k_d(;mX<+b(6l-k{uNcj5 z<*$(X4f>w2&Y7y+5!1A8`%x>?mdi0(#EWnVM!5GbH0I;~ z(8FvDWk@6Vli*CDL9vVOp-gE3oPzvCbS~mibdgrc^h6f8tq$uS<5}2=whqb)+8$O2 zp7rLW5$o7eu4=?)w~RyMkm&pi0b30WT6uUXPeJj&&E*M+L{Oh4IX*lbQwJ`{1v{k3=Ms41&5AqluQg;3&)r#4Lt`pTgZ!pcf*#Ti)GL42-69o>~KKMd84H)%LEi zfqqY7JX_HIpxKg5;0}!~R{-%Z(|ixg%eD$SFqiyFCtfiP2iV2^%Gj477d4!ea1xag zo03m9!amo#OmG+wTVB!KcTjO-NWOKyS%R40Yme;Z&g3P=OfqFI@);7) zo+sjY{xJg>lm`xG>nJ#z4kc|*&lr3XC3V|N?KWr|IYA^+^c84xgsLAYjnqINnIpH> zR`N~1LRIps!G<6VIxVOm9J-lwB$P$ENag=yGI)59DXlSdm`BnvmUY^~9D%a6($q+( zjR$l{o)?vr_f-AP>FOv?BS@&eAE|8v2Cu#ql_-H=xw7H2SgqQ92D7X)oH0haC$FeU zw|yIJnS;8yX`raJ$naSaX`<-Auj48lkxe1C4MYUX5?ByUWr}Y;U~YB}t2wr7&_2Px zHpu{IenK?Ep2s_9s`q6m<(B$aF718!3Nmx-C1>9LF446UxRf&-#2Uj% z8Ag5>sUkJWiI~BlKFO)kp3aFh+1}#+GSh7Fw$790N2Vul?mD=zx0dZ3K0iwg4tnAi z5xyUL(C5MO>Bu__mS2iYFs_dbKaVv;bWS=)nUEYM<*91>Z}7oUp9$i*K)4S0*&~-3 z-C*I26SgQ>4<3ppot$^ETbPBGtMO)Km82uK^;o!gtdERC*sy{9`V<7&q&yoZMm-zz zj?{hN?$X4qOXZ04G6H?prv@(dyxdj=*duixy1Q(@jDQS*n=I%0n>lK* ziEt#bU6GG+#cGZskkzu-(`eBN3S;{ovn{_teZ2MLV?Mee^sU6zw3sI1e|k5_I(vqd z17ItMB!N5QXyx$NY-By$eb2!9n0tPTfOmSIxk37sO81&eSCOseG= zEb6-2x@-3-X)jP~Q53Nd74BpzjyoRrQX!+U;Kd(d9Xm26rQ+TA(*+`BSS>C5@JZ_5 zM{_uPnqJ;fS10$&WzD-ld`;?=v&75sapvMA>bA9P>oXmrwIre*NyL_zB;pJ4p*5Q3 z`EtcRI4}%yZ-}labR`Q->N>(!PF)xpBIk!Ej&a4z%o@NQMt z{TV76@X^-L&p^vT6fYBdXuMyar{-aEq*ZN>l3~PY(fAm&%*O!rD&9xVl>;?eu_jzm zuije4^mvJH|5olC-(6dP`H{=J2pg z`ZY&unjkd-6xCaSrV{lmYd>N{%T2^wTUBp)Yade( z?$C&eIDZ_^M?%+9pYLw2qX8|gtt?>V!JJJJCiH3b1~T{(Q1H`g2~?gQ4pCCl9HhKj ztxe=(!*L^btccuK?vG?RBq>!f9Qrjd_Zph6H{?L?Qq9@Ju9{Rm>WQz*_?MEOTU`)hZ`*t3{n4b;| zbjFK4+K1ly)=a$>*Lyb3Fo2F{2EcBx0EYi(`00nT^QU!!$?{p6U+fe094 z65*UHW7~?B1e-5Se;JV^LPv8Lf`;g;@%^JFdH)cNZxmw|V4?)`#4(J=yTkVTW&2O# zaHd%`0u2HH!Y^&moS%|oYo@+!cKEjRS>dr6F#{I8zwYmtyuXTw)S8(E+@Mo)FdS;4 zG||cotUoFZk2*3P1SK-jL^1XH|-=5H6fu~ZJHO_XR;lISXOYfV{*@3*OMQ24M zXif7v)_veg-PYO#rtUSh_5$%viRj`EKDyL>JBQx|P&HJg4!( zqc0^b+6fW4Sskk4JGPF(q|JR*`ysnov-;zjAKA@1AZ;lTaZCT(w1a|>bf-~&XW6iW zeBmBpz+@~80~n_ku9<44HPcbOq37!gHaSc4Q4nk|yt42x^dz< zbDo58Uzk3owVUeBvxK+Y<+VZqN<^hdWFZYwKfPAW5o7D zE$^rv{~C#j9$ysD^r`~QXJMOhFN)E+AmKVi<^Av3C`X568CFMRES9=kZtaOf5m9In zDtwH!fT3T`6S{aL-=+Kr1&X5@QJ5NtB&6G8>MvFRZuH0`SIg-XV;{$aR`NatA_91n zR5)}!-*Pk)T4g_I46Tl*o{pz{@zl-n)SP(AZ>J2d_4k*VW*UA*tX+C5%09X_kqmKA z$f!wWk%-i-?geZuU1vBXC0Ze=H5`&MW9ZxM?=2XzN1$C%&tHvfRY-QTd^^cHjMwvr zyG3*$D@SU*bo8NUjp%o=u;mbGk#CW34Qu5&0zAHpRL@I9#v*BTsME)sQYTMq>_D?w zZN%r7J=`G~6(ee*n;iX1hl*787wPm!23jc9KlKn;l))}iDLiR;m>V{PXt*%dATN@} z7!)ZJR8rotSd9(J;7B#e6}+@Bxq?fRDtLk?EhD+1qd>PoE$@j$+(_}_%I`5{na06% zqhJs_5KqzeOM}lrb*wfVdR`0t>gAJu|nCD5FR@uyh0LY%oC8zE4_*$kxU+8AD#~V z7X$vvmusnrqkl6v>b2e+**qqg31xD`7WlIY$*2kF{O+l5*$!pbF_{e}QKdiW3Np04 zyj;vyBwk*4TUNcZ*t}k(rraQGm8a?+9vYyD=)N1EQO}(%vZ(W@DM=PJj7wVSZTgIfXG#nAf&Mxa*}0Aek4Gg}9RAMio`Ao*c+zsR+^|pNr@O4-L;r=oCnxed za}G!tyzts9WfC5n&bOL!mTCVE*&0LXG~x|~7H_wR!5a+EB|+dwM3(}+p!nF(C2e5s zaQ-=I8IDS$Qf}?@pXz&%k?~#oB6_$PHR$2SSV22W;A8_U2!RDC)Z*m;k%kNox1>fh zsItyv{KKJT+>1oyn{6z-cDZD!FAlqHhL@JAPn){2Uke1P5oi7P#(&(WCo=xok}E#` zfAS>8KZPeP56cZAcsfdo)fYvcSX-VN_TOvE3wuwbEz2ZVye<8b+A^OfEnT@mC~ytz zES2pHmwLU_mY~Y=42OzDdcQ({hpr_Zj$9$%p)2+Gba@(b=$zM(ZnvB{1Cb{Y?~br{ zt3IvXEs7JNYp5n1x`OXW=pmghk~HVn-jyg3L?rWSz9AfBoi>DAlpN^-TDpHBEaEVC6%j-}ERhK4HTiD#!;|P6=8*l2= zjy?Ju8$~^OryOGvQibx{H~2UDWxODP-hA)F7)94Q@Stue0zv*xIe;)U!ADMnU%I>U zVB~P2hLb6T1Y7gyBA$UsRgWS62f*^ckT|dm9T*3eO75N*usonn1X$)st~jt9>6`$T z5}vetDmOHC7}RmJGjNG-_b~=(*ZJ{5s&gQfc~Z8{T24e|)$-REnqa4*Yh}5cb<8Ll z+SROLF0SR7*(=n#KIjkb06?|O-6~X=CQRF7)oJaqux4Y}7bl={J^|+{IxNx`$FoqF zwnroe>CY9bVhru_b2Y(C(85ARk*%B1fTHlGp@my9I!BC=XB`~s-D+$evW{uKJ`yN`7mkH8 zmi;6S1%pqGL&2}Odty+q?4tw}c&hfIZ4TAY@&UiHNKp{Tc{991kipUwukbD52+&CA z?FrQ~aidnqba}K@u(g?JasDyBI{<(wk$U3Oakw(dt`umZOBpz-OkC{gqA|+~8 z;XBZHE4Q)Bqo-)>GCdS~|4w1L704DZYY0h8oULOmjou}caYu2*H3-#Ij7s8E zNT5f~n=;lHV^uuPbfUGZ{jw=7k=IitOWb;FgJ2X?ueH<^$-2=WpSCir6_=rFEAXLY zU7j8Mpkwf$(@)fm+q1d`t_mJ>!EGK)3rvQ-#Tw5*U^r4kLvz2J3%?W5n!>8?%@3oN zF4WTFVCgL34q+TUn%lafU<0(tLZIE6F(kAzaIY~IL@qb8GWTEp^P}^Sgl17T3|)>k ze~IQ4slW&k1K-zC%RM6zd9J2>_fZsUsoZ}BwnW!Xmp6nIlN~0i$vFD}R6R^s8^W@o z3a@((*v&7Bv)8TV`YqX9rxu}-XbOO{lmcVrB=hZ;uaMFht#hsMCa_=MKnH6^R`B0# z+|0JL1dH`~l8`yhqGFrf-}7d7hqYGkJO}()NwYf|&ph~!G4oCdnU>y>DFI{XK^$^b z@9L-zE<-Yj1+H};3A2zVjx%eXAt_4E68el_w4rp`j6VOl0+y0iXCM9uMtcZoz2=6p zvN9v^$vH4IGKgE>wA39+6YK2$shi+-$nU@13ds`#K}HN`y*9K-znq*Mlc=Bg9tOg{ zXA-qSDg#N_FxepnjJnv!Rw@aOc6SK$&kxoWh4pprTB&;OgGB6AzsvqE+9KYfhi*4@ zev)V+b!Hv2PHKy|UZ~scO4W_`zYrXm5_mSaFw+tEv+rY;tQ~_{3n1_x%kCA4RLSso zzBQ{>8qlamAhBxS!eOA`;7gFQAygzD=zW(vTI9sD@?}}04*xtu%*6ZX>- zfCJK$fr_H%WMaxL2~6))^=>BhrUsFC?&i?=D>88 zzQ{rJJnLm?mA#*6i?_D9rydjgQ;KW=x(w^Qbyohhx%t=6Jz1;p=KG2wlde%aC!@lf zf33+A&MFAzU+c;}#Fj%V3iq@=ZuSYwyItC}^>}Uih25rQ#scs7?b-Tc?YaE8?UDN9 z?U5m_^m`brRk_~PF|FjMIj&i$+){*hRXEGw@St}UC`yKm^B+_VpukRvEoh+>{2l;6 z(2(pAcQm0g__C(q+2xFiBiw-hl%ttHQP#6F3gahy23SZ~2(|QXVf>^Fr{MfNPiP)M z$#Uuch^{^J=$H}TSNvOXwa;;&pqJBHkmc`Q-jR3Tnq|1#dVs**oA%*BG1i1WrU@dn z)NODj+F+g-wg@kdafacT?2jIZBAbgzurCR=Bf*M<*NU!~dTpjStK2F`O&4vmJ~qQs zq|W4U0k$Oc3ju9S%eS1xU~9=OUyY6$>~3IrdCak6csR#$#;bIZiVC+;pGnca&EN$D z9fAh1SAqS+|MUQP>b7yiR|h@Rl-{Y!w^(RYSciMU#9i1#3wOc-o-( z=-MU`-0kxc2xwapwob&B95%^c-sNm6s@%eZ?qrK1Z89W5Jq z>b(S|BeD^b>uA|XrR1{dU6I&5sykmUcQsdMBt4uj88J`J>lh7go}spkib;!Q1e&dS zAC{|dgzZns=0W8NxA+!dDu_<7UZeg_Fb9j~+04O#zAy(#haWB5cuOB(>GP|b6UrIZ zw5+&E!$Y_Xz&2K#NH#r7PG`C$@Z1>A#9?(Lj=Myrxn&UXriHa~ zw7kR5RCUiSdnKSty-Q0(!xgnU*i)A8OHj4ZLfUa%lDymZEnST+!1wKHv2ytA3_3ut z-zGJotDHJw=1+j-)z#joV`?DJa;Y9{y3XMfJ4(ztBrYM*8_;HXR=;c%VbXr+_36BB z;ig{Q2fQMcEJzO*xQSRA?uh70YeZpqR?E_yk1YMB-g1~k0+JG5fS7Imnz*n!m-t5dTL{=wE@{+A#hw3&X# zuQl_b)&S@7*c$5H=<4yGz#&~Mn_V`qF|u@1jxr~T!~ys*LZ$%jZ1ZnD~r`% z`^IZ@*)sSerFa}_)mtgahIi*xw4HQ1k zIqf;H6xxzX&jXIQupTltT+s_{3yk7M*@ft~ZV!AV1;p=Y_`)N5>9L2;$$On;;wQC!kjSrYH2i?77YA z4=C>#Qij<)0qUdoRD1>9K3u$|ybJejYkP_rnoue-+w3d&H^{+9UttE&=0wiki(Q0p z^j>!!Ei;_-CAUy-AYB^stH7lgq1n0$sN3iQW?#>9?P}v>dAW^vW{H^>3> z?h~Y$!-;XdYiiHt#pCe)_M}AZLrpzg|!|BYmI2( zYkRkVN@gVPM(9;pu}>Q!scP@u*zWQLf*UnzljyW4Y7#}OeN;Gq2s&~r#ES;qSYOAA zpc}VmJ7xuL4cv2CBn89P-ROQSD4~|-yc_SZ-$9-RiT5sikRgTk&kBiu8ZSwm3+u-ac5D46+2IGF8F+IK!Tsy142PexO$p)DfwwtiX6Ov7UEwjCC zR{Ak*v(gi`S;KC=2~(>KN8pT@Un`v4=84=0ZtH!DG%hFA+x?&v(rk?eaYCs!amQB; z=ET(r>aF{*4?(C^o&s~(q`r0u-rT1u_JTJH-Hj6B)}ijZbx$Gq`R3 zi*-?veAs>|>U>iaS}*EPc2OhR6*ZxKQM9s14VN~$bYrA}-9^Sm8xG=ACeem2?O#Mf zF*_#sxFB$)&kfwt3f|Z4_zN_2IqE)5Y9P(16zBaANc*b2`(q${kV`fH6)2o|H&@@% zuA4H`y{&EjzG$4Oo4-OBTIg0)?emnX|N4}Xov=;%Ps`boY&P#ZROBpt9ywelMm5s2p6#5n#10Vc2~zl7yI{fTa+p-C?*Hjt zxEmKU6D}weMNP_udAoxKl5n)1U*5&HoR;EV%yvr#_T+>N3(`FfHTbtXp^bP_DVfb{ zAUQn1Wn!f#T+&>(2^-Rfr0IsYn$4I z(7dwZ9*ya$s=Z5NU=pzktJLI|1=CeYm0&s$Fj_;>Uc7zd1ns(II|)Egsjs%GVy=uR zv3v+9>3XUZ`UQZt#VFCWqBB}ts{Z(lKE?Nl*u<93%^#2Y3I0ft!|4jNd@T?6lnj#W zHUx7Jsf$q^QzI*d7OfOZA^^uNfa3yiO5%XCl5vcm=F*r2)i$;|%0MqZUvZ7GPcIWp zMbR!ebZ}gN@52tpl|dfG>Vuvvg;C_-ow@x>Y&cnU-y2TH23DPh zeZ5sgwG>vJ`GSPR5H&LVg^Dhkh`@EYUlAu+@Bm2zRd`7^N6P~4i6?}M7_#ydYkInR zAWb)mK{=3GS)*vxx;1=xyiK%oN{L9p{|0p{#s-xw5_?GuurBodS(>kVLi}i+3m~vW zcz%r5k9+AlN6UEquGC=p;+oOMP%YH)T2}T?U>&(I16%MmmE!+UE0@3_?%{S zkYg#)ksIw?A z(5$dT!CYO0SQP$%MutgBMfz+@wI$)A#Ju0%bw4w^%R%e&dEeJ!_I^(H@w%`3I$shq z`}?iS_lH&=NAKjD96$dE%k|)z>rt~@uDI1Y>L1ThdWtUeB#vcasEzpy}( z4=c`EAmMAgKOTrY0sgY9v@a`j`}N&!?AK|fndjvGNEoJ76M35aus8a73YJzQovEOR zbUbZF`{~rRT&6Qu@hiCg9esCp;WtqQcx{&c*nYc_62eeJJ2nJwEs4E z;Zofp8{Ag^qkE;zy}T6d&E0f~;r5G@j}HaPm#1EVGL`pCl%?j8VF^`M_rJ4rO19vZtgF%NjhG9}M`GNZb^hh0iQ_6TQ#X5Y(V{1OBw39fYTh2^Rn`NI z<;C1_>oXNRA0X1-KiU=fxDah9J{1(k1pV%`f6Hjk|9WqX0f}D|Tt0Xr2RjxiWqiTy zXM)=YinzVie>}KccB;KKH9fzd|LFI-B8^nD1`vXb96a1>^R|~@y|HC%FPHYRgn+nt zEF4VN*YoM(dp7jpfsK)7q{5%^sw8BBA-G*6WLmunf1=$TOu25!S^O?4A;Ozv zsPCL0h}HS;*PcPZ*_>tew@=G)p^N=>vqFF5-!}gJi+@K5J(Ums^#4~3Dk9xmnq9Tm zu5k-`Z}ihG%wanboE-5>4>0Y~e(BUww1^7IlWMTSpsD!l>)D&LAcnkhh%285=}ZYX zE30NDTW?BqeNjfV%@dv5 zS#6-S7ct*rOO7i|uNtIAw@DrpC4@?40DnJ;5FdA3IJvr(rb6)^8)_OT6yV0TVRV-Q z9p_-Iaiw`n*uM{QD>V>uE4jZgUc4bSgo;DS{hbnBUAds9-fm?q8WnA&R|yo-s{{&} z#P)P%AO%P2QGFC}2kk>_51UaU%EYFlu>F||D?MV|WyIc*abIz(Gu?~8Mv{ei;n;>bn$i z;qfgAWoUFLK45icTA5YWk|=HeNon5$d@`vt^4!`rRnqOO#{`YqSW zAI@VhQMu_N1H0Ev{+I5z&11%@xi@ETrC%AXm>fU4rt4SGQB;onk^(o9(m^aA60*ou zQe<+El4aVJ%wX4uGqx**?~mEf z9+eL2=MVb%lYaiFpWXV|rJn=(`L}*v*3Vx3Xjx+N4T`;|pTFxzJYH;{e%{v4`}+Bn zem3f7gMRkw=L7w;>POs2>|Oo*UO#K~^B4X6Q$La{#&+tbNk4DtM~72voqpcbPl!>) zM481t)X%^4)2yEz`uVMXUeOO6k>>7>N9DVt@TO=jpPB=vv#HN5RXC2v#a)CY0pNS( z(x?;kf7MQwgYUiq!CU-QFzMR-POQoAL@`3pvrFI*F(A+v#7A9wYL*@ zQ(f}gJjKt>Noyg|68#sYaHY-S5U{}>;tHUp#Qlg+#eR^-UQ;IeX*c?(6M4J9e|w{O zWD%EG_{`sm8Q`#2n!D6x^fM5q#+z&_p zODZBg@PD=Q-E8y8sXaPJjkkSO4~C(e9tGa9C>%cJ3sHT z{(Z(9$MmbwNa|YVyWJv`bD2qvr18d7e}2_6ZuFGY-cWTau$CTS<$?S{LFk3XlrHoE zH}tKdJ#>B50yOj@5SBP)?xySYthv~;zns~qqX3A0dNblaLz@vPTNR^!^~{S7)*s3D_zafb!3{paHY*kW<6S@lO9V?^$h-6` zx6T}Lr0wK*LJk?J6@}+5GvICYx?>D>Z1S$K%uC$MZZ(2^aP`304Pb}t+@Tfz?|QHy zI>UUr74XlL2EoAATc#x;Mp~!roU{C1c3&%3g*amUpW09Oy>If3+mmHYkYKj*uJ00% zRS?mHnl5C>epwZcqZ?uTERExS*tqcm{~X3Z61N{db{O|G7nwQ6swz=akqi4Vh`SRY z|HQHJ@iF=sf5+espOV&8cZTz&^qGU*WhpPbw3H6$yWWKJ+2j}KoAYlkj-;e(Ceh+f zzsG0LU0Yv;DzG1l#94f_8IsYeNSxsIgI=uain_}_GrDM&hBm8gOJcq^ zH5|CSJ#Q{=jozUyZ(9SGw}-0a@ip}jMPbIMcQERv=XjJ|B@p#D z5{45|lWMyfjlNEs3*#s58`l^4*CpIAfDh(3HIf_d4DfCbzxMa!dj*BrwF_{g;* zfn$Cbz<7v`@E<~9>um?GhvFJtx zPof41XgL9=Xk^ z-8OKQ-eQw~-<6totqGEoP;)m|)?^Y*iM!q%#oic*Y<-)`MruXDh}_wwHyStC`jH#J zj-W9m73tJora6<^!-0w#ZVjudU?zGD4y*9&eTfo^z0KKGqOu4hT96)7(==vW#Az7UWEy?O2p9062w|=8T zQeE}8QFPcXlM!j?fA1TxgoeQa8asYl&4L{vq?+TMTg0N@w{wf|jL_EUzuiyVfJqGW zGfOv)FgCz!SxWSH{9N}IMw(nz_zR}=g`sQryifJzuIj7aZdY}(-VRhRW2bHEB?f_P z)@8|XtPcSYEav;lPNDdeWERBvzr1u|NY`WBF%m%Lhkq|dbVS;!9L*4$CEy{nqyIBj zs=7et1D*exCmrgxGu1W;of3lu_M;Lf9}SQ`e+9^I6Oz^3&UKJBnyxrV`;=aIk{8+z zY7!(HPt%y%$(-{hex#zEHl&v88h7xg?0#cvW$+yLm7pX6^~1odH)f=xO9E!Ez(Su& zB$>=2uKqfOOr9?|qXIX#Rhy|IIB|$@Id?>6>?pVP6`UIGIM2@QpPf56yGmz{0;Jf^ zHc1?i`jBouEh#zpF++medL12J5n(jb84(L<19LaFrf+s-#n?HDD3Ht+CU9tu)XD@Q zGi^_L+OG7p-Q-+LPxGzc@3GZc!uY4j-*S4a3!gfMbKuoEfkB?(q^`gO*nz>O*zdKN zD}@+x*x*gDcR)D2`1-pTY>?K9^t|<&)+z_y>`4)vSGZ}(t`eAKS1z_n9#ffc-ofyL zAzyseiR!x>uS4L`U2foHoU2VRgusZk&YnuNZ!;83$Q+Jm4#hyOX)HQB=T?C5f`84H zXfrQr+}`v^UestPC0Hi^`mk6B(LcOSzHbJheovVa+om~~(?18`75*EL7ZrZXTLIFj z`pA$*Fey*Gmd5~FDCQ^}Go5fGI+9MNB1iccsmBb`cM(VaF;6MI@otA6%gX)0-Vm}n zLlVU=osMx{`EJjUr{#=EMt6rD_0`;iK-TnMz;F{7s4WOSnvcRClNIZO}iYT(f2ieCvqJm^{$mIy7TwJ9}&Y?5%^dxAvPNAv~irs0Zo( ztH7CX-BEU3n7VVj?tv5?I?8_gG-I~C@gvqv)BA+Mvaq@cjnim7H}&zM9PD1nkPp{p zJAtlG`=rUn8!yWaa{F!4Aa;;8ez0|p(tF#Ffe7fydIX9ahc&p(5^RUtKw``ge&_7_ zPqj_cf=PK82dAg*V-(5r+4A>LAc&`66q7%*^wSYWe4S4EK#YkXV~5)Uu`h}kUL~mp z_BVyR(Q10#t^TLbMxb&U-`ajdEZvgd5cL!tV=%nIp^5-^=p$6DgPcunXkhhh5|0 zVGYflO?(E(l3p^iOxVp)CZVYnc@>)|&5SYIj#r0C(8|Ol6_8y&n+uXF?N45 zzlX1_D5myk(VtO(+~4t0hpg~OYm`iis@g~`=H?W31|r2+9>ecw!|?Ww)({Z0!>4Um z1T%uA`xp>0`+w>Yo!XtxaXG$Sl!Ygq*no zQ+T7$i6mINvpCco6^rpSN8w=~3+OyPcHPvst`@3r(-3f*3*Iu@94I(7>eZ_ys9^@K z)yYEhI(lsy?CMc7uB`a(^=PIAte_Bs?c4$+dIc=es(S*KC^65`KC;Cj$}_v|OhAB% zy2i0dR~~`aS@GxMHeRO(ame#Q$U8DPEy7I!gL7r5J%h6^{<-#Yy7&n(*)=&iUCWdl zkOgwOuY%~3uY9#;R_BjMVrb%NrwtKyhkkgv7&X)mrM7BEkngT?1i4o)GTbu}dD#b% z+LeOGE&jjiPYNYB3?_NrKbyX#TaMYE{3c=J{@?7}GC~U<-nj`!>|Fe~z&@+3Z?4~& z)Ck5<))MblnfDXQ>vrmka~gx3z4F36yBSe?eF+9IZ>CK}mq>yw=#+i7QoVxCe!0@KxE{4>nM zzXton=wgw%ea)>VAaiT`J2E%Am^f1qxbB-~bW~Ed5`%eCsrMSO<`U;Ig05}^{bEPA zHwi|tU@)=felC7UlC%ftsl0~dUP2&B9sR_Z`xI9kDLGa`G1s8s=V2xBcYiicZMs2@ z5ZNYJpn~+O7vwBZEUDV=gODjs$zc8x>W?Kqi|#T?)d81WRCW)E?s6_FI(VNuqfjgONm@~= z$&~NGS*2T>e`Ln+l7Cb4{%jrvKHt@$z;KW|8OXi3x*G}3wImh(D-gR_dxfhp;`95X z7@;_tVo!=TD;PH%mXPMgZxOALeYChSy7)MT>ckn7$B2s&gaktBDwH+$`wI#3i_uL^bhZe6w5pBa>H)7|FCZufp z7`D-tOOpGG5|`?Q!q*7cS5dO?f*WtT;g-bb7Ty_--!bPVLQ4M*4hB=IZED%yx1WXL zglD0))kU}GZ1UdZ(*NZWjL0_mkKOPI`lT*8BzeLhf}mYk-3I~rN`Kk!p{V-C79T^d z;-9deb?=yKt*Sm6;f1ehgd5AcL@sV@x|3lG$|ohDirNB^vU)BM=>?q^)9VTW-nI(= zijV7cXL=pX>jm%c&o-Hw8L9F{7uk>*^v6yfgtP%|;f5&jHW=dd-7!Z8A0|%AlxIQ9 zqG4kVB+gP)uV`z9A3BTtCT@kKyH)=eY%4Y}mW8#Gv8$&0K5rvD8_R3W@5FzyvZOp3 znf|t)QGtLql(Qm?Jzi~hRb zN!z`V@e5-0d59i$RSu$Q7WC)ZJ?ALxex8@y8BSH{{tAF zW-$Eq%`~4)7z}^#O<506YLRfHkya+z zN;z5(XA5c%W61!gthj*{z$;JM^P8_bGJRo>Np3-W!XSR&I|H!>EidvW^wS1X>fDAZ z|LWiE=eTX~$1=%G!PT~p*t)x9taUcPO`hQ85SL8C_s~hyEbwh3@2ZRL&TZr-55d_# zAJ8Ne)lFNEo1a7+j=e8$xQ6AiT%XP=l)#?Lv~pYhl`}u4<9QR-Gu7!J^kh+DXzW4B zM&|bmI`|audekn>q)Qsw>F7%|?&waoTJ{|JR^^YY&Vm>8mvnDgLBJW91~Z$A3~yF@8bu4Yhg&9Fgz9IX_r#*~wk ziiUim6Z)m2dlPfa3@*_s`vO1p?I9s=sA6a$o{kZYLmrX93i@1|x^3DecqkvxmdAm8tmCrdjJ}jtEpGPM~(dW~1eU^QWGj?0_ zOgnXkmtTx!14N;It+a0>^-uPeCihiT1a5Mv+AAy@7tTpYnACT0Sku?EwGNj|@gRuVr#5 z1qqDa`4pfeBf{z;|G^gFHpSqf(+bw6>Cc&cJ^aUGZJ5U~_mNuj*_jZ|d_(qBkmP~0 zOrV|W2q=N|5*Cw8{#O4dvtb1k{6`0YHq=v3LVM((IgWX!BJs67KD)a>%)M*Cb*-d- z3UHN890&xG>FWrv)`I`L`FIZuK8wKg~)S!Y`$;!`+k`51?x@ZZoWdC)`$5D9s57mhhDsiHZwB{*4)Tn z?P(D_-DZ`oi+9FMiV*f&{qyVyj-*zyjBeNWi`4$W_7UWVG+i0XO%Ti^k@c99|71R= z&pKp2uYKZU=kxc+95SE9l4(SJ>$~PpJg3dyFP0Oc=M1hiPx~&1PE71#;@hUZ*G#1% zTJN>gP1^`Y+v=b5k9Jd?17U+-`NtK5w-=Op|6pGZDTH(`YmKC~GVqsd_GY@-o3&WJ z$Fs^BJIvn}f8W&t=}0PL^G8zJR_3pU3x#dDD|4?I_BrJ!!3goID z%yO{k%Ry)03UOWn19{u@hyOyz<3;!6CugQjj!(So?=d--+SNe+&B-5HEP8Ny{}4Or z5~u`kT1h5cPX|K;yZ27?CJ!py;q~$^D%@6x*PLwOXoq~n(f;PbIWRk?Uv_x*bJ<}4 zwh2W2;mf;X&IC4W#Z=5}#=b%2lbHGPD$Qtrx!gq57>67 z#y`7V52k9q4ruavUvv=9B$~W*kA{DMapP(e?>hXg^z@?U&zjRwqO&)iM2NyIBa(kS zSV2B|dUi#2{?K61Usc1zJaBgAPH--5h$^;!nPzZAo{k zSLHvHeFXka@r#p@fuzB!Vr7dOCk$1MB%NuTFhV82Gm=Pb#rx46yyAl1G|ZS7}uH!dEhKg^j;4h2yoJ_g=@fRbVyHC#wlA;GLG+Q?U_**9?9xunoUBLhV zxe~8@C-EDX5jHY6Hkl-FwMT!1rYeHS$GF(S zI5=z8x}uBG!sotTl2mT)c{^tV!C`mGxHy2C*HwT+cnS9wDSQV)s_Ttn!iX-OSD3eu;50c?uIa!F z;9b8PlP>Oc_&!-&PRvXy^56RsS|lv-^p4-n(S=7RXe@Xs%uHA!th@Un0Qw%SuMt)MOEw{)tLHv-ToLLtt-hN?2o!Tz2$t6E+pKx3 zfbUXBEYj4kf%J)_{+Ic6jB=)k8vI+gu)AEb@>0BLxul~1OFELFk6-+6S>=HzimA0uRqHs zbwjaa3(j342>EF4sqN#pHIUYz-E~R>sLK@dOC;wX3vk>($|uSmO<>h%zv`8n&L51^ zbn1y0Z9qpuA<({h(e*>34NjWnrZu~2px!g(uqOLsr}=-AAQc;U#tpS0A#J5YQUOuTv7b?>TYZdfm4P5(w_lLNxJ%gErz{fk}e6oPNx{a zo|{7F&l{yVmN)<_BX>iym}667&w? z*?$W6e^0^!+8VnKy458bIr~4Pc$_+=gFw4;D1snyin)bSg+KgTm^sxO2Gg5T5V$u9 z#sJP#)}3#@e|CWrQ{_(cAphfHM%Dp;N?#JK0bj~vyk?aRi1tqMISR;zI6HW4Fv`1>7>Ves&}Xq+rH?^j-qB#LCkscI@@r)Nr(wf znMgF5aRbW6jGou0O(@@plu8nf)d(Gk|FjyQ&G~}`Nlh9`L!B+DNkjXjCf_5Dkou2J z_8|JDViz!GqBQmkM(l)s153%}V2NwD_%mlqc*p=v8`rP*(t_B=+~de|lZ(Bz$=0sq zRK|97RI>G$_~(+X-QvTNt=;2iCtHi-gGCOZb^@>N5tr1LK@j>hC zO%_4(3UmmI*VQY@Oe`Yn)Fp>yoeE<|SMdCf*s_AMPVxR1bV~HE8&hz>SR9h;#&o)1 zY^OwV-I&4)#uj!=a}~ie5mY$83!3LY0v41#NO2p}A-V?}a$YFdxrAd!L5|3yGs|1> z(}1i_^v<~Ggj*`I)1L7{O>Z)d7S!ig6d=014w+QfAJJQXz4O-ZfuZ?5XOTjQ>eY%_ z>fWPjw)pQt64S|}pOGEH2V50_4ZW=&k$oc1E%<3{K4*;*!F!hG9g%e<+3wScMN$pa zl0R;{Htv6zMsC?3w3D$21f}~eFmv95^)+OkCS}L@?CaR-LBPaSr?yM~f$Cz4chSN| z=`P5*T{hpz4YvBL7Tg4Lrvi5Brc5S0#Cjk?<8^l^1AZJ7MWI~ccQ0508Kb0kqKcCxFD~5xR83= zAr+&?)IT!ANOz!~DwV0rwp`)u4+6%ZGI}J48587#3F7=TMmOpk|4*fkh5Hi_;`neo zE&S#UI)&%Z4}aTOgPO4fjh>)*BNp-Cmk=kW>)7ZIT_-)DOCykbfU=8R;%%z-;R*Trjc`H&Yapvl= zxhoMt%G>eLg$ed#5uiWsO~l;KXk=gbJkNG`Tk(yE-=xGV$l~^p^QFT7>`o_B8AYZ# zlUd9!A};qapX&;3ZE;9?@Iv$44&&YQwvAUQu|~g)9TNiVjZg5`eenCY_+X4^^KFgM zZL|&(BPzJ#u29Gcq%!h)3ZXChHss~8GP&3)&hSjIf+oUyTT_wxh|6I9OGbZ~ozZ+= z-E?9hwZ!&Gu85)zAx)L~)G6}pCWRn+a;@vtF!jnU+^hY zF>!0UUi7EGbcPb|4y6crfMGyauO|*%9Ger5aBPnF?~hG-kj?jCSFQ)%=Quq@A0spl zdmEZhJfilVDUo0$NSF6wQBJq!EbKr3vXGT575!73&S{D{uZ_}JAP#%5JssibCtnne zYFuTcwl@d3XZ9R*#+2rGBvHifzQ67ca91;XPE&d8kr)0jlqDbuzfh`odee2e4BYi_8C2M@bu|`tU zDR>qoK*$TJ&Q7ER>FK+WZu-BPZhLfKtVVq_%4`MXnS)H^k0#vOMbP5%R>%Fh?s^r- z?RSnn!;N5xc$2av8pqu8ZyPmaW7(_o$i;aD&0)H{(_i`F=>^{OU3}r$tC`}GvNz)q zsY;m45IyzCM=)csKv2TR8;p<*|S9Zz$bujU7#dxCJcYlqogOc0@u{o|Bhc))_1* zM@co&{Fyes>lDN?%>&x5le)%RTJNdHQ@6uY0Al5SM*|COC$uwilmf7U>O+C~`KRT? zIIiysj6J#o%eYFa$_2}-k98sm1S)Wh;)p5m_*zQ-W6&z*gM}T8c^4ZDuWZZ>jPC`* zwvx`qBW*4-if-EIpu=yt+BQMIm}coH9l6t8N;@Qcv8N^==7HrZW{D-2S4mky> zH!}I&!9>pvk&C4Jthp#5%&4|PQ$Pwe{Fu(PDwDA>)x0m^fr>e_@VBe5R2D9Hs^g>v zIPjg%Im+n-R@Q~E@RkUj40)Ms?EFPwCsBXJ6_VWH3dJo1HbVUVh;u+Vf21#xkElt< zh_}f{elb8atkyFZ<26$IecpG$SIx*VR#F6DnxStdRZJZfeg-hCsV}8$QYqc6vj9># zjN6AhIEC@+Pl;m^bClN4rS;~a9U2(LHx>R_G(ZYC|@GCHDe^P`%FUbiF1y zUBB0U1t97Ae)iknena*fwqL<%x_*bfxzm1k+3#+C(IKVleY-rsuapm8sFbAk*QkRK z0bC}bhXsRRTFBJASyVJOM{e_jr@H@Iv~(qe^!3k*fF49+{=3WIO!by}jZU8W9?VE{ zVX}@9nrG2Z{)}l(5Ur;Dg%{Z>9-Ya~yP$uNoo#bH9wSQEdlza_mC6c6NgsyT~)3~;P_=bQPS>$mQ9=(nKE z@BVXNVw>$3{-=v|=|RnoptarX2y9&|deEU2qelM)3Kg`BkJO64^9)3BaiIrgHlg^k z?2C_%#Q{fznL0^yXx_6;=yEVuhAwrx&LB01E~Nl=X6XK>zp8*!<4P@B3a-$&!=Km= zW`*Jfx08OZ*eLi{la42n+5>DP>jkcmONzP&uNxq2HCEy8go1!#R<`LWzYxXzpLJ%* zSHRtn!2%Jd__@%|67}E?0(m)9;V^`k(pGk|Rqd|||F;W^5twUo{A=s}f-jC%3iCbO zAA}9OmxsKX{KJ8T`z>x)sdvSJz0K7oe?OW3z0^^ zaco}wGbsjW^Jhe{2|AKeJ9U{y_;ss}UZjuc%19_;iyOnpe+#;I0@&xSaD)?zH)Z@2a~`wOWw`L_Zr7N_kp?^|U#*o-ta zGA@drzNSnTUpuuiO!`nkyc)rNX@xk0=x(CNlz5wYdw0$52KU$UJ=JOEb+rh5Mp0kG=v2Ry8z5yZV!BzJl9C?bI}dw;UO zPx)`{5gn|JeGX^!^MBCZyQFwuLCu;cD3WRzHZl)jKc!niD-Y5N_86P|=efr|&7?MJ zJJ@E1t=-85p|SYY+L9TIlH1}{q(CnX=&_$J=o*UM&HPs4Zl9UMJ5||vgZvM!kpfmb zjtOu?3ruq<85&8~r}@d)cHxf>rwadrxAdl8q8;sUiX{TAsA8TmE#FwFz;o6;Q#lq> zMU_8nmr^OJP5-{PhLDo6ZHI#*55wt&cjs~XqT2r&r;CFDrw`i^;Pf2+ZjaM*cs{`C zpQe={2E%OTqiH<))mTKE%qFw#kUjpD|NM}xpY6^y0eGW4;+|6x)HAvRqaPJRndo-xdG9$0-E>cB=lI#x-BEGuk@?HSMiz`fkl^w1 zJ$2ERoW|x~T>2-@x;{ik!3Enx@zatr;vbk?uoH_Qnk`@tG)7BBiO34(9}%o}_BG!I z-TuQ%IH+h@Heden>)8g;QXSI~w43W=FL8vB(~o|=GSh@?>Yo2~_AR7rUkUqj)#^mp z;xDCQ=7<4c_;sMo=quQ?Puz?`zQyd2kiYNB%inWmkS~|yt-k{PatG~ol<#5?mNqZF zs&rz#qG01Y=NfK0L&ki3R(Fe%3r`_!dp<{oudd53Sm#C8Gt5jb{O*V(bWbs z+F=`C#s%pGY-Rp4Egt!N{D*#ue7k(T!Z7T}M3={2KL$d!!ms}o@NEcUwVS1pG zsJRREUY|qNd(*INmRr)*-iZs>nQm`hxNM%&?QQZm3`Vy%&peXUSMx|xKR-^x_stP` z4d1x%2ygmoHJmp3HSL@<7c^|JbEW`Q#R%58owm{7fB3=;Ejn@ATPNRgIz5?eJ<+-8 zSp{@M;bpK>F0NUy!ZeA?>!Oe4;PMF%onP_>X%d&SlF}rupjxL%#OW_RVb z|8nvpnSOl~j--CY5_{2Srg}sDdw!hX71+twFjyLXQ1ku`rDZv>O5I>nhLPa%nEW`;~hM9 z_x(NB$=qg+-seBeZS2!f)4N>JK=Pxa#0=`k?ub_`;IvwKcdc59xmF~?_A+{2XVh1& zm7BTa?)&#zD|#hp#Xb!+)#%gcdhfic_zifs7yIQ;DtHh$WM9`q;%J*j1s|F9V3pZ4 z@7!GK9}`b{l`4*(=ad0kT;>x7CyC+ss}E&mM+BEjW-4&6_Nm53JY zO@GF_6ubNM*nXL@D2~Vf4H-Z=Icv^7g#joVVh>WoG<^#a;}CWI|7>*(VsU`eOysc6KL$g*#smN1O)dYt6op5MN za|BEcf@~kxpab(LVU_TmHQ6R2yTC>xGKhk6i)xP@XP#}&vIcc|>lTs-*cDnZg&iN>ASZ*q zm|#UxQ?+Mo9zO_$*yr&9`1bn$`n@8U-A!#gX2ZB$q8PsUI6{kYn?&pnMui~QsHB|( zUoa-5Ey;lUj!G3tV*)`Lw<3zfrc>?6rSH^dDRk}(8$}L9B@USJqWF}eUl^Zab1>)# zp~eSK7Z$6fS{*I-OQK`_Q<{K{{?%#4*HYIlQ@}(1CEN(+{l$}@R186Qg|P;@4#B_G z?*{>tH7905@q0_+e2Pb!cljXMgkMqV`!Z8*!4OW9+uRNBy$$5V3mOzJjm^*dv4w8TN$I!xkDl={fR7*BTMi-oN`~4T`8DbRg($XDv*N1QVa7$3}RcCR$p#iQ4o* zKTx!+==!?yjWe!+|HGCf9Fl9wHJ?%ln+&9U(`V$!sF3l6~blRaURpZKLPz9PqM`mWY{w?FmXcbUCuMFo3=f^Eg@*P2pgHGqsr{3VzfUou~ZlruFU*G7VhnIimUqbq%FjCn<;dg zQ9C;s2b!X^DYv9{_>`v4zjm03HZ2^qD$z7vl@NO_e!7jrXC8`Ww`IyA?PPBgQEquf zWdusw>}_c{bfYol=SyPY-8~5aT`5FMt`rVR{?sDT{iC^j@uxgml)}@C_C-#+Hz(#x z+RE-;{;)iMUa8_`>wiwuu5pBj8N+lja*g*SJ!Gk>&uJU6n$w%Jz#$TUBXMqKW^3xz zcqo3OY7;BpXuoYD;>u0{ll3i7BAMZ>YOC;{|B?)EZEE5X0^cy`JPYMS;fmTf9_7=N zrgQoAjN}*VBQs{FCy~j%w8F^8i6&{(vPJl>sz}!lrM?YDX%_f1p4)HKukOL0AWRxb zDF`iD8Ib*8`wIWcEA)m!O1eOjfezk(VYM*$_@4xlrVCvmXP^wpawQcW)fjqmm8dhl zqV>odLkq1ZlfvSnqx{=dG%+`NVNH@h{zCM^rUnTVuWr!@qZL$zgh{~epl}MnSL%^O zT6@C3S|rmdy+~jz{i40D@-N;(gXcHnfMd@!`Xg<+q#19A;?!=Ss@l~v)jrp17koR@ ze%0Y>cYU90wYS0l;ZW}xl2AUh+D<^N%XA>?Tb} zqBH;|2RmY~Y(f7^W-9(H$D~pS6(C?}lo9}_%bE;0yQ+lND*ao%ApGEtCmp>Icz=8n zkTqR-R3IC$@ZCUM-;~8bgEXEbLX`1Q6ocKz>I{d>5^l(c;Lpwe?r(hrSZkYew4YVo ziSxhFrgJnwL%sD*Mc>|b{Dy-VsH|j~J(Dy_ZG16TNs~CU0-xg|R&5|AJeQl)O@~aY z%RZ2{Tm`v>_%EmW81y1u>nBSC)K8o^mcOB;LcA0QWa(aAT*2qA7VQ< z|EGKcdj8oII3Po_9%hO4c7mo0);t7fw)!!CA{TEI-Mc+=YeBjjA&@R6JY2yT2-*EZ zwzS1%KA)}4Cc#HCW2A_aX}2AQmk>>qB&4dzA>_@H%SVH;$%!2qed%cMbMz713!M{7 zJO7@;u=edY=CQV1SL_6Zm?Wl>aIx@vg+syqWZs07&uKf?HaK#=Uz>o^=+*w%I8SXH zJxa@$xhhOjRx8aJ*f_esN_fP({I;2iqZ-GFL&7b6Z)Rfu#&J+3*l|C|Pvf`}l^fCC z@;lz%Y8+qct|VpWn^xmdFNAy_gaMG4hC@?-=L`wR?b(h1fB0?Sth`u}3kp^%EP~Z@ zQS3V5lljsu$&9+>X>q%IKsIZ5#Vg-k7xi;8yuWhkzjXQap_K*s2qmJ6^C>tTafDEt z9F%VS{+!tdv&phhoLrRQ5dJ90A0xFhRCU0o*FJY^NoJ#H_?sw!Zpe5!Q9l))xUF*UsZ3UTcLt-~zFbJka8lv8E#&vrVy9ikTXLoJdwld5{^ zj{`U_ z(U6BZhh9y*yXIa-X5P#~7x*I?rJJUlDPJuzcN?zDM#K_b=Mh2J-+wI12qILFG4>lo zvquDttShlv_5&h1i#d~D;JV8HQ%yjPUb;MxUOi@tkw@yH%X3KeaSw{3`cjCP=p!^M z>D6OueWU;QZBiGI`0p9`lEg~Z`zarbRNUnn7&SI6mHyAy_6RkfY;X9_DhgB~FM6AJ z^#$JIgGxV3nmIh+nfE2FZS($x`;HCOMH@NS+{z69KZ6zjPix%iR@!#D8N5u%1vVlG zL-Iw-dy2y7+j*H#i)2C;yy%`m$(L%ual{6V$?QJ1=;yd}Y~P2`u|1C#k*DQ8z2QB) zo9BfOt2Xc69Re8T1=nvUk5FrwJ1x|sa-edf0JE3y@YkC=5sG^(Vx);!c$~5^`Cg$n zHtdBLd81Z)_o}93LpE)NM7PF!)qwun*A*$Jjs_|zjXj?4_MDq?-JVcXHla9DyNq|d z@q@e?1)WD8A0%Xr{UZO#j@&2J#s2)&QhtQ#aE~fkOU|2r07P-1xoa+b#{Xzk{|NK=b$w|co3c{#xTyeOqY1eqyP7TAl4(c?tYu@Rl3fAYc zaYFDGB*VO5pg-CvyS;lCK|Yk-dq2Mn_BWuI*v6+=gV;}415@ffETc&hg4sKGAJagAhN?S+XsdEQ_P zjo|I~CqrPd3?&4yo9WQG6O^qHzMEQ^`QB16OJ>S7v-0sWCEs^pg_J?%wz|Uf^c{=v ze<&vpKmXS7EwEYe3Z?MP_(5P zG4T%n*BssY`^&zPI&(+b5@?dBR_~fp}ulfK70@rJFhc>piko5{2=kyucGz?DSg3ZTD0=U&{@n>OdttWo{muDwJftgd(cubWH9>J z8svo~EqD5H(J@Gj3FxHd%bgZ~;L;y;v66tch7#RHotE$QuR-TVFRxrda3hBoN;yJdvf(_p;^3{uq@_h`z%;4*+HhP3eOhx%9+E}iyt!F6$xYHyb*&R;p)vx%J$UhKj`Z*q9yTHzso$p@U@E%;#WBTgwkvK{>@ z9Bn3N3jZrV&uNG-Rq-dEF7xojFqM0qMis3b-!i08TMKE6VE+VHNO!-+6ioim{MWjM ziI987iTRtvw;o?MJ9Gjw#(xF5|Js+ir)PPz&3aVA^dSB?(HlS5d&3rSn>TteX!`?i zOi_C5;PkCU=xhQ^ulF;zUdzZ8!LAo7OVYs?tGlnS<9t&byCTlF@!_!hhP7=RZ%i+C zQ&b-DdQ|xDU5S_@$MF`cJB{NxH$$Nr>!{y>M54It{rG39yn7BL|5n7T4DceE3B_d_ z2FWr0`Go00kEwlS%>$4F@y=^{lhc%NR#46rf+MVZ$gjnbQsFm2y8$sZ3mR+- zuda)}klVs*z4F!m9is^s4{xvq!N?s2>0vpM2q;xY*gj3$2omK zgcW|Z&aE9FAZX_oYXf_tqlODeUIa0g{2Kgs53hUG!nG3B`9HcqN!RHf3aP`o_q&Tk zkFM7ALytB%dbH0i0Au+92Vl?t%wX20R$kF(i)IGd6RxR;e!5tA#&yFR)*0Eo&hjw_ z3vt+fSJ<^8@6BX3Jom)R1UZ-ZD|YS7zBHOTi62nb7@5$T=8bVh7715(v*F0sPZgms zuOu^hV7h!qX4=m5wC!d8h+joOr?rH!-+wSZI=TNqyv%D{+giveH1|_6c+ya8Xn)01 zn3>zy7V+MjwjEeZcT0~ACtpS~xg*(FM0LpxMI=f6IStc6^uK9DT-h)f;$%@mR?&`Y za}}}Pnee~q9NnM(Q=<&i<4SPUOy4EVLV~lU7i6!npKbg3yyK2rkHFpYN*IJHFG_AK zpq=J(R}>)HDabc;Y#G>)MkEZ17D50q_9?B)ZnN7WR6uo#&hpb4#ShYbud zJTpBY6JD1dFT_#E-=cQJE*+<DQ=Xebeado;FTvgPj|B<%4L2J;vNuoe+?tcW0D0fgg)!y4AD zEMN}^UozXwb&iTUi7uiSR_eY$^yMEn5DfC7(K=qM(?ttmY;G*L@mh>5#)QRVwH-Et z|H0;*98TY>FNpMl;YKJFM$W-Ect+o%Z$^i^cKBv*OYn`U0TrdL2zycYLEL=+pU|$6 zb$pP%cPaORx9)at375BZWtqLTi+g1+>NnBdP{2$>{$(%fb8czQa<|lHZi!jT-BOph zrJCKXnZp}$Cytvx3o_T4iJN~>{Pv{Z`NAi7cYXpQVedF25_a;ZF6z#y{9HFrqBz4u z;A{OZg9>zro!y06lC4$qNAmH?i|ym({Au@Qp?lNs`2^S<7VMJamAy34b!CBdYMARA zXYD2$oyWg>`1d9LJ+nTr*5VaGzcm)?JN+ySwNDfN-)AYeeB*_MBpna_<3?`7 z*m+Q__)pVY{gZ?krWKVws&n)=iyt|Hia`+6`b;_SGpxLVoTYFIMRJcl`B-`hX)d! z`S#)sM1(BdbV~W&ahVaXdVR}2OuXg7e8jHLV-SBT7{qw!>8&!n=tOAfv0-7VNk!g2 zUi;hlh06F-Gxvnpd-rkO`mHePfy%FLTJ)P)+F((8Wa|&I6?$ zl%C!70282xT#1gttuD+>o&6sEE)?8SuO*N6T1aOMm{ zOhLb^FY|x&Lk`mxNp$wbOE{a-U0B&2%@%X)KsI8sum=?UpQbPeRwc?fz=!Ee0j{n2hCkEY@5@an$R zef^)_j-tH`&hh-N`0@XULBCSMuKbmwJ1i{*GR94j${9ZBg| z`~aAO3EF|6cSzsYKJ+GrhZGHe?Sq%uc3J3+zYs|v;M0|yCZ|fWWe}SeNqtM3LCXNI zPrc}kut#|~5WB;!9wv6roGTm2Tt04R`sBxmk!-rF3shapFOW|iC4BYU>!e@+7%-iT zr0!?@W;&TE-|kOcASl@Gm+fbX(c1LK8cRsE0%rL1$1#{I?*~hUqt|wS#|O-CwBNo^ z0Wse~9(H`Y4oZY-F?3J7kGKT9`-YcjNl$ClH(qpmUHJ~M3U*x4qUKY%9{xIahVP>d z0hzmhtoH`*7}W7$>aE0OQnBr@Sn%nd>086b8qbb>lTS>^X3X)Am#E*q|KN2JAEW(7 zj>Gy?_&+B{G_gk41t8h>nd#=@d?wwTgaU`n^64Y4=cLSk+8#j|ek}p@0G=gYr|jG! zwq{FqE)p^L$`+}R1M$VDj~^a_Bn{~FTpjLveJr-HN*{aU`?q}z2)pkq{HL*J6RDgn zxa|}Gogfcx3$(F>FRijIkRB<1(Bi6!zf10sJkUZgHYsi%)L~@G^mA&;!ozS$(E^u#2aLursK>`>{YBV@?<< zA6Jsx^|kc$1IdQH$=363%SmsEzv?x<)|!0p08MxDE`s6g9eK8Evf+<+?>Oa~7cRLb-mOlfK4<~D@QfOyY}{VGX%kztk;-Al}4=_UqrgG*lg4G`_^|O1)mI@KZMa>AK09vUFDx&i9Db zs0SPUxepR>q?@xBqk?SBJtd*^Jw zLA4s$@=mqqxC3u(;}{bMG>&nM{}^NZ8^<`s_n3Zqy>X1G(HqAMbXSA)2m6sRgB!;T z)uwM8Gr~O?DJr*d%qacYFlIExi}j!lsJ)(Wtc0{0+uurEC=IYu5v76aM4vO>$aAA{ z!|xpLo^1VEyvwi#QHm>#UgY`0Jw8>o6Cv2n@b;(8p9qszPQa=DufHjz1NsN2D~aZi zwQF0$B(S?Y?8ma?5FxOK>^dZzT9lR$shC{x+^F)KK*!GCpw0Bd#hXc6T%la-rE7WH zS@=40`LvmIXNXE@=Giz`rxl@au~{tZAwFX1C=rY353WQoqTjj_39#y2 ziEu;;;lO*x63fq(2uZ|sN&E_ad&V#0w^w{TzZRCrENEHDw{_AG2}c$=O-8+J^6%_z zQHi#?m{=9@ZhpV}F!idTTK}i_vuE$17Ge_d+arD&za{a3{Pv8Wz;7?a=ZC~4GBtdj za(dwfC@0K1tVzWqQquye2N$_`M7ittb&a=k?s^?^UcyI|KCj91*3K$>m3a431{f5# zz4xViIe6-|o}oxe^OFnGyNlDyxKe&}X6_!6PdT;Oi>?puZX6O_??U%_++7jeeQHQ_ zMcdu`gS(4|MDNevH4hN?z~Fj_-DrC(YbBbs9Wlf#3WH}UGr_Y%9s@xECVQ*W@BPuR zP;+M~y2;J4i#%6{*$I(TtbAKLyP@a`IFCZOn#c*b}pF zP{e~Vw))S1RfNK@FK@*O)qk9uH48Qxxztb>U7r)czCtn+zx7OrQft@5X9v%T z+;;;sTIAV#M_pwCfd2fcSx^#6Oq=4D1=Y4>)Q9R%xeok_-IMFU`LsoKm440Ac0D+S zyMd)ZKZ?q{vb^%$EQ2jb9_*DEqq!?_Jb(F{Y7o)w z#eL#Es(T^wy^B5C^ehY}<&(&?_OXOCjB=Z`&I7AK6}Ug3ZMq1$5A~U3FCqVxZ`}m_ zFvZ)R?gpUs%8V(%NH-^xF5d<%0p+y~$#exx-f|`_N4F`E-e>8A6dxA%ysA=F`U`$L zJk->W2f67x@VLzh3U9B4rK|qb6xDKXUEB11_~l^w#?TK5ENuaIb2pg2Hz{iRt|xYm zrcZ+J$LU7XN`ywab{;xnI|JIa^UYj4Z$8|vox9uGxix5K|CMd+oc&qanV4(m$|?R? zM{MU=PVgK!oJlpBin;BZ>C@Isx1gDC2F+lD&-7|DZSwC~$X-%@N$sWW{x{YR3pKqe z{LDKn4?>@_t-^G&abkAgN2d(7Kc>mUYq91e*sj;kZX;K^M<_naN zmJrhm9^x<^iKI7Plug|4qI(A^0wcBO&@F{V7{kb)fw<|o;ND25u@ zmV$6y+CE}8tWtyEbq`CX?T4Hj*bt2>9DzMxu3-T2@V4V!T)Ti_(@y~4DgL*9&;iJd zsxUYkz@g{piib#%ARy{LRdD6P)9T~{Su}sK(*M;%9cvJ(u^M)AR_9i>f;u!ogI#kD zP|Jdf*Il8C85rAYbm+PQY`np43WO)oCQJAAZP=AH41Z;0`8zXZ_f>wtv~^#8*kRb> z(BdCYn;m*$>gX2yB*4CFGsD#WkZ ze)WqDr>@x0TX30b;3qF6nB|S@?`@iuPVJ*Q{_NBrZ`=Tid)=M4-JOBl`KPFw;>V z*&)$8;h2Ca za-N%7P1AkHLzdU8wNRw?L|(NtF|*FUt292X`Xv9VMC=w-bM9yLT4%yj6lCHx|#f_fNzfmiWpPVzVA}+n|*C zS^x!gdokD$%exmfqr^)UD{~jtiVvmBm&)lPJ{FmK*;=fs;IeoR`~1cJwT~lWh&~i4 z=_+R|$=RY0mAEP^{FAJMd`Tq3rM%U=wo2a&UP5%EcI~#_QyV?bh(zonwzLj_J*~;(ABKm)#JKS z#vFV0Ev|^!LuJX4MEs0$i4O=ff`-*XTEymX%k99?UuFkxll(8}lgu#iPp!q>lZZMN zX)yWtQ0i*QERmUeIyI7C{OmI3K$p%a-WZ$Jes}Ski7rZ~`7H zaZtiFZz9FU)K&RM*XB#tF#`~CSPKN!5542rTg=x z#re`h`O?yS>5+VCdA{^mzO*7=dMaO9nJ+z)FRjj(UdWdk@}>3p(#CvgbH21KU)m9r zyoI%#IOzxUD?GM{SX(?oMrm+Gx&ai+A&Cxc$-JTdym^=<)nBFW<-|}yL9(tePFoZa zIt}wOBUOc;9!~bmK}Q1KHn2@q0@y=g2~KoaiD3Hdz)H7sEB!7Qk~R;G4W@U&b3+r_ zq;J)zQ>C=zH%x+(v%T*46fz;>GUIq7buGYVcl@ox&cEdwxt-r0m&9-1pUq>bNbQ5b zd}dXMF|L+;$lLNf`vuTEK)ZsR^paLe0QT_LXGMBjgt1I`p`wEk7R=&-xmaL5R=0}Y zIr#pMt@4aTdr2G1=+Y;d_(YB@3MELQw@B@mwKMbfh{N~6m7}M9iAH6`c}pi@#Xam# zSq%SeI%c-@!e8lCVLIfk(vuB##uhZDc5|VAZ!jcSkj!>U^jaPNs&;;t#K=rapEUQz z5FjyR;pcC;`72*aoRYDR@M~=4TffJf%`oFd8g!i<;fZkbF~bPsVz*p7z>houGPL8Z z(pLd$+F&1q{0l&W!Qfk{D7{Q;mrnKPSD};bYE?hGx81(p#;;D$L5(RD=ja6e)j*w~ zi7Pcr9M!F(6TJwnWmQ!8I}CqLDvdmcSYd0#Jbjzbh@A=az(j#6H&YGvO!w^1n(6Eg zMB$l?Zu$!@Ir?!rhOkHNL1fBpZAXh-qFnqI2YLWqyCl~8EK*fLVrbSt$RGBA$!LSy zIlOv^xrOj*0I`kD9U%7k``bfoZqzR))Sbba1ITxO_(#J^P2NC;P*UTh-T9Mkvxv<0I5eg26H>OIcmIXz$RICQZh4B~;Zs9JKFKH3= zn%Ne#xg`H~??GV%9h2^R_U*4f=OP4HeTtH%o)fPffq~$9eaHfpUSg!6NWX+KvF-HF zTBaDxxiL?Ui(XrSkQOtg@|_~tvZuzo`r|i$lx^gZVGq_ObpPL&rrPLZJwr9fh)TW}ZShcf!%(Xg}c{+BbI$ z&9P+un8Yx4%s~3)mfb;;|7uf*#jmf+Exs+KtLH@uN2(aRlD;?S?glM+*aZ3T!mM*Rrm#7YrblV|EOaygGtfs z#?Ik8V_QzOHY8B}4)xd68;Hd5=hJI-)|H$<^>}s5?)&c???R{=#ieu>wbIZLePiSv{|c~i4g%^6MfIrHkIkpFFlZ}2l=^za z&*ZlxK8W9*@d5lQN8}-b)SP}(<^*j{CSUpyEVBZFJF{{HfY_8 zzc4#=$&Ir^*IYe2^yzD6hx*T)9XgfkHp|YOg=dGqox~T0JKTaz3>17OpWDTHw&xE~ z#=YsN!ocyzF@%k&99a|i0S!UW(~cLEWSSZ1pK(#FQ#UdNYlg8d+#Ha$tb&vVBCF;> zMlRGZ;Cm!q4bf`~9K|u@+oKoKc7&%bKI8C)_kWzR0JJQ_OUKl(;%|IacxNa&B5$LM zAtC*bXM`+BC~ZL;Eu6$?>f@2TXoC`ZBS*4^7&S-nyWB6>ka|y#jp6*3V>lb;8N>M) zf09JFB9B*mEF9vH2OWplnz5J^h$TP6rmIAM3l!p^PLPf*{%O|;{lI~2@lT|f$!w!` zfB9I778p|S^mEY8QF+%Lyq}M@E#7rIH;i|k#7QFF^>I4i9!ZA$2fleE-c>DE_uy06{xydY~x+G6Mx8YtKO;xo(DXu*a{2F!GQmY}+b#7M+0HI& zZ18ta3VE5Gl%-AACOA?HbJapFAwu_xN5y7|nF)Iq{IjW-v9zjKvsKG(t1fhH>-rg< z22n5~wQ`=y6N~WiC;6!djy@O1uu4HC zkAXG-S&+DVivQikIbbvaxge1f!!7xzMUMpV`0!PEc=Rad)_*kg`nd{|XuHa71;|Ig z@ed|fKB@<38@9ag`(R6Rq_;DJfaQ_Yv#dsCbsxek3pM&rUZbPXir@IH>W!poc|)jD zD%LYdl@uQo8$#D}N2u%n7qvg!#+iK)C*A}JK{*LN-1leYe-Nno|MO?!R2w{E*Mnv1 zo^+zc|H7G) zTMLyK?3%a%T%Uu+eRH&MoB6EL@Aku+*pO?EsVN|VS9HIBwJ8kHV8pvD+^P^-Rm|vb z0AJfE>W14N>i-#2&F5mw3L!!dl62B(v?=aiqbSI#VA!;=@v>=R+>ZUDl1(}=?hkR zh|<+oT1-jV%NkSnQ&N`UMvMA9-Ac9Glc#rMs)mwm=!gPF>5Epnoze|fic^y4qcOFb zk_04;7KU8Hk=2*-^U@@KW?_X}`6H8gJ8Ut^2kODu_JWP*D|Zz$^Zgt1fLA z#Wi46e{!A4;x(P}$I*9e0uJfkC)bgoUxwDak!iy;`_>kM8JBA;hh)ie!IU)?`v6ba z?)%di8#RRMd#2_d zo=FCqF(f8B<-qeMi$!4f`cl5b$sE{$Fa!s3EaH z+NA!s^`Vg%E=5BX`-z}%t||h@Z{#H@(sK1FeEeutKz*)%!Ls->i>W+Mnox~3`N~9g z(2oZ^pJ)PaT)ZwV%7sqi;)iaG-7^JqUbaT`9z#0GRzqfJvAC0Vyh zXXQ>h)I7F5W2>6((Rs}G_kPUxm$rT1iKvT?L&)re-?3{OixZ&)ke&Ztm>R zLH@PzS{Shxn8vMB0i^=|&rcZj8=AO|%vP72F=fskBFvG|#&6+%Lu|x1t70~1qMKyF zl1|+3fAtC`Is`fU?7g-W?n#ANH~X)nPlU+$thAYn$$Z*2Inn#u7fZK0)BTiWtgs#M+$(qC6(%#N zF8(`ML5MBd65ZYT`+aze*KJdx6g2q|8iw^OW;>BFFI02^^r z(k5kkBO3z0tk*M+M^CH)`$RPC5|wu%c#(3$%`qC#w7t0)}($6@02=N)4*i3x7)E8Jnb2xD@WfV<= z1+2p;nv#sv2Q~87$`incP}4wmtqNup63@GaXjfQKiFGt{^^3_2%kThz$mmob;~^fS z6GMNer)~)QFdla$JeS8Kwd${r9!`eH@Bn)L$@k?3kuo;V{wvy?>(+{tT6v`C5@@~C zISBX;&}*m!eh0p;3#!q%!_mJweB&#G>{cb~F0>sC)Y;|I7Cu?u#fDoUY-dr{qWviT zvW>tI@k|ITg#V_RI{RE}GuH>6gdmpXgiUB-y+thIWLaF&Dmp&E<Y#ISh11g~{aa!+g_D-f^S+*~tm?n?Gx(QW{)8dFLX8e+}b$Ezu?7j2S( zxjC=_VhKVNrAL+Ks(9+2L0?h}a55+wOra5}O|3!uR%;EySTMZ?YbW$t139V1bI{U} zSOb){LAIA#1slrO-db-Dk4P=Rko4^@MiSQ4oy~#Z1FJBEogFwKP#>`t!Pulbtf~Og zhRDJiB&-hY6BcMVDumSBFTe=4{QtfnZ286T{|tya6Qyd`UWUFi1n+++RTf)}(L3Sa zBgGtzwmSXd=-d;#2?CnL4|TQbyHZC>;7Oa>LCEaYdg7w$0X-;h^(`b9LODOvOVPifs&m3i(ULO(zs=BC*!>rPsSQR8;fcHs!At=cp$m-6i_q}i zA=Kyg*Hjp;LYK|fN}Hv-!JPz8sEMXxqBC(JzR+T$AlW0I^gj`*hQWHwz;eP|$&lE2 zU!r1o-5;vKFtM%XeOm%Gar~l;@JGB^t#9B^Tj0i9O-_V-`!S#N?HS+d_{76szRl$m zxf1de;uAR&^2FQsYH}y!iPfzpheDn%;}f|Q@-&uDdz-~ zE##>alf9ap3wip8Pvl<66KzXZYX$&%O|!z)7a)nTup8V-iO1h$?agOdNsKnOwCLwdW0)e>LB5(QmP=~$>4`ZH<52# znD!N70b1R)UjS(1M+u<8;Y7c6gw=x^vcls9(mwwRSMDEUUjxqGyi?#TdURa)O8-l@ z1B#5uu1GOh*sER@65+&ldM1NEQ|J2b|_e04Q zm;}$mjC8w-z4W)u@JvqY!QG1Hk2gQk{u;(;+8A2LrQ7H^ziKLxI!z`@w`pSdZ-}#k z&6)$-4LEXXsMrqoLTJqfPwb+-TnSBOsD|-ui_a|hR}gz4p4B59e2 zF&p$F==DuOMH(#;cXunJ3D~YQ+X(DKD>sr(AflN8>Z^2HsK8q^Y`8H@_d}-!9iX#Xh!E?YMN_nx_3>m<` zuOV0>{7*A7fg0Y7jKDlXr?o}rWqXZnvteMLjI_lE8HHZlb=9*Eu!C*{MTyb{1$-54 zRzGcj8$NcLgma-?5FU}Ie^%+AHTtJf|Fp@ESRUvUNe}(0PX7=Y(P28TH|T;5NX2qdUKk#qf`9mr zgrm;1N5$nq)qDyaNQQ^WJOdmG#U)iKr1}REm!*t;z*CZPx|&wD#2XOyle%S$lrON# z@3qSB!%;7{70d{(Dw%hb*>H2z!ONE>ehM{PRc6c!kV`GN_B}0i%!(t}ax&&b%4>cNVIdJIrLem|0!~s=7HSv2`H3{JfIioTlOQ-~(G^?U-TYg#)BnysE+8YAf zQf2}$PH0!J9iEBRXy+hjiLSg+vl%O<*=Gn;sFnzI4BF`u^tW$2)+?Q|X@|$LO$hC9 z(YPwDwJ9(T<(c6E8=e^TVH>8u51>LD~2IXVQi#y)R`m6eQK;BB&E-Qc)e8W${ax)7qoI0h&NN(1GB~g2skLwA85| znkJ{-52cU;_2t)cXMuD}>&wFp53J|JbPkg17xdi@c3PfTzOYsHivJTRxMab;wb5yo zc0y-#AJlz~(iPE0SpTE!9;3;(9y~u9kxrO12~M$6k8_4&QNZ|E1$M%6_0#*nPAFZ0 zGUjCZIC94);v(d4g9|2kMgN>BgDY`sxDarX!SEIvvB2(D8#o4_l=t8S7DhG{jP4n6 zEO-1(p3lwhlv|O^+*x0cTdb{l*ZcV{>o_^vI!@Z+HQV8vO|$IVY)WmzQBvBbuUTjI zoFF1uSO|YVm&+l7I5Xk~1Q+mlpboK3ad;R_I6my)mKJ%dhw}8eeeSK`i}LzR?suSW zSyp&xbob{di!$o!jc?-&uLH|?2rgM@lP@RYr49ho&+|wdk#WxuF?lDN4?|kv0l&g1 zUG8gw_z^3I0;e52fpS+u9-eC7mQCHxgDZ~**J&v{hDhhwrS&|x7GFc|47g=4ZJZT7 zT;e=Ftf<4po?upo zM~<0Q7iaa5HLIO%dRCpB)g#udzArC(LDq>ThS0T&kT_AM)H7AjEchy^sl8bCg#Dfq z)gV)Qw=<0}t+`FzmNVvd($$<>3GY0~*c1`X@cN)S8?P~`iP51fZq_+282`g3)6ohb zLwjhsR>it&BCn>~RA(OeSzA=ojxU*h@9TQ{sgasEcKY8aNl$;?mreiAAU*2^)Ono# zcdY5Zw^dKSSI0A|=A%gMGvFBBhEBLuEkG^;Qy>$PS>%i78)ndy(f3V)2_$d13K+a% zkFj15jP8{zW!60-kKHA2A|v-~>F$a5y24d(D@rp6_Tme&M(=gm!#>|@O^36hhfh32 zWCLU9-{A9E-uT}`GQFclvzHSX0c8_ji@jBSiV}jXswEJ$t7dRF=s~yM6s|G1>7N#6 z@^WmNmm{Eyc+iOaLjesB2~!RfH5+n@+M1}%Q+EeiNyXQyy9p0)C;dErqMf5XF+cXY z-rhI8Wx?0^C%~I4wvq&IYYo&D0)pZa!z%I3W48GZrU;zHYwFCvLLF+W7P-mA%pkyp z`mP>L40_((kbaeNDZq;Im#W!3d4QVs;^f(_a>G1%_871Outx)XoD-#0Lf%5Puleod z#F{z{hVSEn0CllH@Iop?f^8caBg-_ zoY&nk5)8d)=eeHPSRipdho`^!C42PtEi#AecpE%!kA4eIj&OUy#I2)yzdq;eT+Z3S zJFPoQJy1BNDX6w>*p)ogB2EE^U~Uj61jL)#vf*vMMO$IKZNppgAXninl?+Qk0kDFg z`YB3tb_9V@e|mWMG@cg2=}@QVpt$q$9%L5rq~ZBGyiSbgYF*IpW0;B9!{=$VMkOFz zS%KKjE)&Gos1e)G#%aVhDi^;vu|M4QC9`(%t1@e=ZGhTDA1C&~qSVB#W_0qw`+2m; zZO>@qeNTg%Ox<7ZICkoOzFwvd`&40DVb z^VA8mXC|J66+>oEdY;Bk>%tW%3P}XSS|H4_L$Bf#(h7^)XgVWgQm=*iylGbwdd`oj zDR&))hT#?{ep3lZmQB`u7cy|>UvO~d$AwF+Gkp(m3~|q-$XWWn6`hwidhQ5Tb?$0t zLFU@S^CgEh9}GJTA}Scbr&7s{SJex zK_a>GcKk5{%c}^(BE4AQ3oHkIh4jJ-Whb~w%ecsZ24Tv)+cd>YdGsEiHsGHu0X3pe z34gt-VSW07u>O0x z_g3`)rN6UcsM%PQ^&xQ(W4hY8AlSip4gLs&W1-R6Kj#bcDgj`S08w` z+7=lD2Tm44WhxbIa25agWwN%W z_9JN*G-Vp0Tks9+HPCkMJ4EcTkm3et8sv`nS5I>t`(=sTo|vdpaaAH=cxb7%sfDXj zT9`Luh0=U~sk|BTbGX#SZp4fu#x}3u#ewEZ-W9fC!>QKWG|np?#|VI{*K%pZUH3X* zBn>m1rzz?|3?9&9{}X%yz~|kA(jBPFN07kf`!0FT^TZgoT|*EYZ&jM5&(#N>v0zDE zv07qG6=!x6odJKWk3LrCr91fzbdpxKZtcM;uqOcmanEXs-{MzJT9zXAo8y5!>fjn6 z9w|`zp5Rsk@zbDVeQVFX`Eu6uHzWo)qmI5E&3EK%WzXpxqfcHS{f{L2>V+ zW0D3O_*{t}55tP+X?X_x+>Ue8wdJ5T)Jv}ixEu{4%-NL#FF~O^r>?hJ{}}JtdX`cz zTCICxJNUAAQoMKq)k?n+8kf=VP^;ln(Qs?AcnV55ffo?}Ll);u^ukIGN0QU5{{50n z?xoSvJ+9*>c;6+*13|_FH+^5AAkl9X=k#D;54O>y@L+<(@BYHWjT1$EQ_c`)D>XwQ z>=n+?UD@dwih;k|LG1{DX4gt&pNE5E%B{&Kt;C1 zXc1;7&RjQ`Pb1gS!&Tyxb-Y3q35w7L;X#TwF zEMZ2113XDMzyWfANhpwayA|FHIQ#0wCrIr8_ZwRyT!f(7Q*12(v_#~JEtqn1Q2m0E z347>(rbJIVk1WS+!gAc)5NJ;^T>oxB3NZ77nP7|m-WC}NAxyf@sAI&^Arw%0h8E{F z1fJ2$i?bF!o{wID=u$^>;i&5<(Bw);j1&Ekj0}(7KWRYtJkn8~I#{1!Jty=}WFu>2 z7*DmZr=uQk*&5I;QWw6`aW8(Jx7Sa9uI`mczN|7GMy&x9L5&7R+eoCCIoe831DCP2 zKJYs@+X5H7{#SCy2cEI17jl5Za_Fb-3=SsnOfWRF>n3bpNPjV5P{CS%Kdz9|JEKSJ zb0G?T3h&`F*lJBpn75!FJn*PeLUwcJbR->PGHoK2k@zZ%qE5BM~@DV46GiaY%_1QCHhyYP??Zh#&(>|#@5gnY!Og8Sl9WG zr_e;99Nd=A;QGGcm1xb9;ni8_Zy8?g#w!7qd_c#sz*6u&x$~RRF1hodhXC!mpXjjF z)dF<2wq_X&r1hbzwm?Eqx6@Nc*^0ogM|?mS)0GJiM*WSgJd8oWsK2fFl4(i@sPNy7 zoru8R6fRP%_?O`nBQj(dsBFE}C`MF4_3O@I9_`-`06VKVrBjKMZYgZeMv z^JRs-dlO8$abZ;`BEs+p2?o6g!VGG1p5-|BZohOS2SsL&Z1U>3D8$LhQ8yzLHr zxnXtK`ch_niFOT)U>mz$o_*^r5&zK0#FuZzu>EDu$hTfb!?sJxT#>VNBmE+#e}FrHHAS;;-jDUb3!7j?D@sYcW>37d z8|ct&v;${(>e_KYLw9|F=cV-k?`rN7JX@S#;@#NH|_b!WoJ<4DjdY ziFSHGPIMtc2`*OR>2sPJezyh~roZsaOS=3;8EIBUi%vV`4(| z$lyrP>g%AHVb1Bc?9Zub7a7x|W%r5JvWuLmHS8ioasOALwLM*&xAJb{x|RYDxbM+`o=J0R3|nfBLQC zofd!rwpHj{e1*U^bQ!EW8UK7cPzdC#tH6(^zWFA#a;E)~bAlcQ`w>T39Kg;Gvd%?3{Mp>=v8MXO@7$e>Ef2vXW)62(`zHTyRQ@pdGtJ z7`&|^usuba`~#XDs(BZW8@YDlxPcZ?OQ0Lwh6rjeZd6;G;6*xL`Lbd74%K&sena3L~#tbL@Ue0%HxHl*C zDD&+eijmfzoRQCT79f}v!skF?8?`EBf0k#MSP>d660h+ID6@COK*9AXu{H*9zOF*<(WA+* ztD(qo$z%tDw>2jEoz{rx7J!e~ZVUjY0T`Ea@2<{MJF3W#hKF<~UBoq4pAHbXbrMbn z%fa7{QB*I+6|KBd{oxGDka4S8kJq&|i025j(%cYeOD)%{cvQo7a=Dt(5UB%D2}TXn z1-k7C2Wu*IsXfcSR7DNVk%)yGXgRoNu1O{q7qx*5tuNc!GgM)xTo+q#aPR`@gAJcWM7eWEG8T)-;XXYD)E|IzW_svD1 z5uR=UzWi!u&?Lou`VFMG^NlhmAf+@P4snJWhY_h~!)MR&bDnz$A3!+M33wtz|Hm&{v0@Pg?p(07u@4jTZ2Vh&u4t^Ex&v=T- z*#@0@Im}|?p#ViCv>O|m=skQx=(bacB5s3|wlP4m>aBmAWACA-qI>gu=rx?QFOzt; zBD`Jr3Xf4YB4-Eo(wV<8H6KVNr4+gg;t7P^+^T*@I=T;?4T;^>>!O;=4x^$!*#UC9 zKm;n!OO4USBc!n&{R9o;`n-6VT%Yg4kG?)n)Ys<=_4V1Ouh04V`h2>+J`dN|XOCQ; z6E2!{{F+O-RSo*eeXG3{q&raNv@s7gEi8av)q|1C=&oe(%O61VW8X3dSnz*DrJ-qu zfNa};{0kk%l6)+%%J#-3n3<5T%SwcN-2e^_^aZCSFSi|=;}I)I=zN@Uh!_U12V{ml zjisw42No(gyBY$!Q%LLsJgVTEGi~Y1!57}gzX>Ny=n-L{;MMq8*fR~c+N**)i*fjO zIsToGf1~j4oA@^w|NQtD#6KG*-ZrqW|Lj=<9Rr;M2lhMuWB-8zTq*ilBDNV1f<$-v z-|{^C4Cc%?eARQ$K6{?;vO^!0gJL(pvM^-!Rc*M~l-w#nP*`YibnRL{?aV8vOe zBMfy~5r!CBNJklZ!)QW`p|civya+Iq;~6?x;q)%@Mw@bgJ12L-Qse_fB5FczSW--B z!-b%?Cp`mxt+C$=&Fl@hoguIgP(+FA2H1(aW_X5Xkra@cyr2Sd#C@#}@-6op`o8z_ z^3gx45PCLe&RIf6ct-*wLHagCp0eaA3!KlTSmMO#ATab43^~-%GXvpohkgx81s4vX zdBCTB5<&?^^dkuDYX}@jfj}1?Rq3{wHufg%z+C8E(tJHz822N_!vQZBbZp)4aa2dU zP6>~MUw2Pk1D+6|MqjeBrf4Wd&k!Z(psm(ZSIvW6>xln|fkCT`)#8m7VY8h6_BrB* z_AT*4TQDC=;&hANcx1+<4d{U9(eqIl+jr)2*}mV!kMYPd9BsZwmf|lJ>CqBpP;xk+ zkGb&uNa+fabPRc;PUe-z#Z5C^$>9w?kkzmLd>;jQkF~`98&CFlpw`$D4?xJ>O=(<= zdTBwe5Z9woh8H|1dknu|12zvY&|4g)>0?j|+tl6gNLeek4YsiJd3yqyeGg_|=2^JG z6axbFP?TW|Yax?s(T6SsU>Q!OYS*%3Utl`Xu;B)4;^UL`#3N#mUWs|u3$Dah(a?Xf zMmqtXgyN8N6uf$)y2z>meqsLkEaDE~-{;R^AHys$<3E@t^1ox=>X*I$S~+{a{J(k9 zAq53qAL|9Lq@r-jbj7Eykf@Ulk5WKpme$q>*0xC6rXr`32VASBFVc)g@K-h)k;QNq z107C*fi}c0MYU;$ZsdZ{Z?NxxftL`mPPve~3alUOswEA9rKw%@dpxQ`?K1&dFEHQj zKAfFnh1*iuN;t8BIl&*}n*4Hg_*9`R z_If9)Fixj?jdwmC2~(MuA`(QWgh!Z}!LtqbMI6I}Bw3{BKu3jGqOXbRCqD|7yony*!!wz0hr5 zkz~NHYVrqZme7v}`}fSiUoj=(VEcoU>18H7iA=IWPmIPCI9mVr>92b1pM9ea+yW<1 zxhR{6qI3}i)y7uTIv8`0_>g=L12%5UpjwD0Ha618iIgJq6y4NUWQV^v9VqCY989>j z$pbSL9M;A+&qM5GtZfT!$z+tS!FxEto z0xo37Kk$c^k1yczo`W@o**P-a0WXIH^NWAPiN(&Yt@*1hJO*<#niOuJk$|}kr_Txs z=$n0kMxs*)=owqKY2KN(#6Wy&rTGgu=j$N4Wq`@+9ykkhO(PWRdt)phvxd?-h_nN1 zfk!mprh(Ug|T7+T`y@<$k*&}G9OsJ|feKJR z$$)aLE3RE7jxg@_YDbHnbq|7NQgXEEL)YNWYY6-5~I>kI=&RJ}a#~P7R?&Vl@DdLyxvxin+pes^#26Wn&@U+-2FjulzQt~kp?bU8y zlfQHB$T70EA!dy!aXP~ddt#3=L z6Hk~?{-l)^h{%Damf&{!0+R?osudfS;_VtndSM_FXt(vg@k$D zwcNLe?K1f{7u(=4N&3K^9Tz`CHk@g4C)3ICqi%?Kl5ciAfL|P-nMb#VRMD5Gu5PsJ z)bPomSv|2_D23t469dUYbI{9v_EjP9g(?lu{RoCItBD;N$OGm6?Edg717#=*% z1IYqj7C3Js43oPb$ATw37=Ov~E%pk_x58Q#BLW9cTo=861~8!-qaT?iTgK+j?$Mf+MYqRB1DHxf(GR<4qh2=gdmQ$D!>= z`aV_YjW$~MsV3Z~`Zz*N=lpo2(adf!q;^M393u&|S-?ey+q_Dpz-zJ>XJw9>hZ*@g z$VtKHeaHKl1m0t^^`Z!J3f^rYr-rDIj0QENS|n{RI9MO^V743V^?{`#wTYK5X|dbm z)0csDeu^#I2Id%-JlSy@n0hSyksb|Jv_QvUJ8He=1?h>P681&1> zj0+BdI+cc|4nReC7x}lIT6px<-8N&NAQ4ov+Zd)40#0O{An!bN*RYTrrFsAel&;zI zA^M#Pg|;IU-?W3^R1?K_@ZF*H(wrqRm81I)c+Iih{d*kU7}NbOI1faVcnu`w!W!sd z`X1&mjRyXWo6Fd{i~$ekfaR?<=-2N`589Oaj73t{mHD29v1XL^|Ag}hHywNctt8Hy zuGKc-YTGx*Qr6(9`xaV@sw_|46Kq^BQxhbukv!ZEiI};v!@Cey(bY2tv2Su>#7+*u zb1}aup9mwtvF(Htj0^Fd%R16iN2Zlg(HwpEXnZAiYI+Nk%7~lX!f=6uzj(B98~+Nw zUvnG(?$(TL%vtDr8|OiO^?$T~oh`UVX;=K%!htr>mM1tLI+kHrpR!5>tIx2gFs{EXRdW)9Bl3MAl?7q0DJX4g3DK z*{6jzV9cR*TtP!N5`Ws7sYcEUs}A4R%+eDD^`qd=Sy1AUW_VfC1tkmFZIfCdR_e5e z^BE6&Wau~Pw(hz!-4^9eyu9{{-{Vd=;`hL~8mb&iaZwSBUM~o~qm|rr@o)x@B29^$ z5N-1{(Yiv;1%^cg?D z801%@8vhgMr_n8x=GJT+o4OnE-TkyC zgC}A%*xh`oJJ2F&s8a=&q8EWWp@3m!l2M0pq7b=nAismc(8P>#2*jRkc?g89W)CBs z<1&TFRm}-dte{-?;@7xX&o?*en*AsvBxHKN?UkS=5By9|_2wVFo$TO!QP`p+$LRB# zEd|v~v}09&E31`d!+h)euKE#*W~@^Fw^FMVS_;}dqrVe+>N%bDNOxMPO=;_R6@SU` zs4Q1QKcccfB*dAv(XuE()$erdC_Ri#$+4AHs_xV7WXA(Ng}1>=xXwTtYZHNr=P@qK zRq8tC4ff<+hP=qt1C-C?qINm+aGsyvDxix4A9q*+akZVy0^qw)st;D*KSvfGN*6>X znI?1Ul3d0z6alV2V6E8jE#0YWN#tBZUW1w#1?Q&BV2uk{Rl588{pjwmQ3?D#;eNKA)y-@;cL$*s4r&SYysf3{iu(MkSJv-&CIGq{*f zh9x$*16#mj+k^NAfGL<>jlc!uppCNZy&zv6M{(o$2)}_fGi@ES`3*!o6e;THip1C= z$@7p@3m?(V55WT!VN&$Hv85$281WiD!~$&5ytnS4szeBm#6ak*1=VRtlJQN(+ZA9r zY>G=)Pt17hvqKka^0x;cs4kW3%^JMe3D$n1pkX>pu=a!w0!Jq!aE^5v_gY~iZzE9lo#3jxfW|+>F8*gBwT8nijKaf{TRlcE_9Y~9l zEd4!kLCD^Y@O_GFCey?VpHCG0mKB6L}qCU+uNw8<5p-0j~I`5HvuW*z&a+8MAipomN-75&z`Z4!&hzkg0{=z5;sLIxI2fj&|@iUA_^_d|0> zgl=?H8Y!BlUz*)czICHdNY*g29_?za8G@Y+<;W?Hd1{PFzPQ+MFk5~VjkmyeEX8y<(s0;KotBDDf4k@5-?KDGjIF-XZXZOP4&yCop-c?8=bmY_8k>BC zc}KvFsoL$(Eu6#_aL2^~LizJ)zSnSVbZ0@eBz{$v6Tstd#RXhvKnI-bIZxAFzD;Gm zuJS5%JawapTOQ1Yr_H37P-xuft#*c1-1D>@LYePe zx(kGo7p%1N(iy7zg;wdWXQsZQgAq3%7d!I>sO<#YtQcpC&3rJ2eii?Mq%kAgXpJ6W z8w0EclJ|InYS$#I2~Vt^+0uD*Gm>XjDo-TjKNP;nxEdTw@9cAo{zd8CAC%p{KH4a| z|GUQevY?9P%kGx|_8=EZvV}PBk1HU&wDbq%J=F`!yTsc%l@0`Kty6V|0X7UJ+M469 zfu>jhh?bLh!}JXrO$buY_=EL<{9oPr53l`T0Jidjt05U0tXu9Sn6b)O`7i3p@2pfi z&(e4*Q;^e>A3kPGG06m7OF*bf&UGd)hJ8HnW%R*9uleAZ*$xA6aix>0F>@z{IzWE| zqXyNwY#0(%fx!6>7}`{F0CZC#dz_xbtQH7UuA8eL(gAu?t&=5B} zk%&LNhkqrEi2v=`gNN{vm%`-mp zeHvfMCj=i0mZ`szo4y^nCKhPl2;gQCf9tB+BB)ACkf-MQwl^Kg^3TYbogLcG3~ey} z42?Y#=u|RXlWlBh+U<0}2Q_Qgflho=-42P>r#p=HAtjUk@5W#Mb~x-qRsI=yC#ZC4 zt`5>M(Y<)iy(eyaYPLff)o}rFd0^!dvk9I9B%~BQYQhMKldEGE`>}t6%7EEI5*qy_*wNWsZ0=~c z+B0$jxTvlhjcK`X7BDT(SdReH)7NXItKRqx{_}8N?62~?bal1?t^1S6Od1j%MZJ1x zISmaDqh7t2!h*pUHujvKA`a!H;FOmy#YAc?hK5HdGcX_LU#Ml&2i8zV5W$tNS<472 z+AN=6X(Q{+T2_F1aCa`zvVszk6`V|bwykRH;?>r6f*6qe)K~9I*S{lr`N?^8yN=58eMIcRG0Ab(Yh4;}2mo4EhDEaDQ>? z)>aI>A5@O9*x1F+_ymkFTI_VHhZzGUu&SYS4ML}!(|4gQ-;zT5de2h0a&p2Bo`$m1 zJ8?<$#2B0yDyO(8g6ux_u4uA?)LoHtI?NNJL&D5utPeb8$$J*dS}ws|eV8_0gy?4l zmL7NY7xd5a;I5f+*Bq9ymbsMsU@iBuYtIeRYq^4Jxmc~4O_u?%-)adY!4TMD)+E)m zvr@Kwr|F9?+*3lML~Q#&wR9BIun#V|7pof)r%DF-A(}U8ynPRH*#*Z8vd|MFBN{7r zDV8=vbT$P;&u}y+@YCx){s)*O8-c|QrBBtnI&9$CR1YX;z;_Jn^ zw;o@%o@GlHudw&d82SUqgcLtydr;l&7E96Ed&OY?{ZGE2j~7cHGh4#as64bYwGl@ zi+mVIW4l03Mu9X zRvh0+z|8xidl9313Q}NG!55;$^A*sRm}X3o`B)7rf~$~8e_^Bprl4T?T_js2CW8JH zN@uz~ow_TX3a3-^(y0g1soHd^E}g1RryfhE7Nk=P)2YSj)Klryl5}cmI<+jFTAog= zNT*&%r&gs?YtpI4bgDU>YD=d!r&I0e)V6eLdpfntO0^WiAY7)qdJz0SlpIMOvL?UQ z7QQ;v41N+=&N;HALG?GB2(Wt29SSv`HZ|hkfaSGRov_jWATu?@a`87MEIX6MCg2tPGnQBs} z=G*H9vbC$8|MJA*0JTsx_qxU1=lFx_VHYKcUu{xK&;WM3)Qe!KD4)Vio78!5b!4pN zw$*I$=-OMjWS%-dS$r$MhX>8C>o^B5qMgIwElDs>uihLOAPd&^$S*kfSr8L+%s@eK zav6|=1Hdk2pc7@OI6 z6FIHAI%F#YfgdVQ*>4&01?PS3#7Ovz5Vxz&Qj2_+NG_E{lvP`8xwXHrLsu1|C!0|Q zErfi}BzySGP&QtK7TbP~>%(thu%M-RsiMpXL$~)lp8qX#LsbX8LF8ZjMMzit4aOI7 zJ=9B|f0T^QbK1hALhoZh8F2mY{uIe@0oCiTL6njjV)#63W*&&7Rzt^SYcTg;O24g9Enn?<5=E&E;)M%d915+Vzuu2m32461zx#2d%ZOla?T7iXIR zzD?=w2C2w+Q@rKH7qKP^Bxaxs+>1tgd=bHqCi>77E`il&XNd$D%9QG|RV= z{i|KevD+f2@(700k|-BUbj-M~7T7r@_h%0e-+?f=Y#uNFG86zNPcZweTws(gqZz%F z@s}=71;1JWmEEQ4nzKPzl`hj-YgnmG(ZDiib)mZFKbjuysrA;3TEov-Ftg;=|My|0 zH@s*#Nk(=fb|&XTLl5*|5amp-a+P}fpW{K&Ej8f|_9Di}g!&fTaN#Zpm?e;CnQrD= zu8?VRYh}Dmx$H`pB_h+i6Os*$GZ{!;@TIPO8gf8P=r+tLNWq?M(ma{Kj)#5dKanUkwbi>I79znkE(m&hz z<1cZ|_K@>Hw-L9Wg(WU=!j5M<_zOry8@({^@0Dj-Di18vW*}$}Gs5tqf3(RPzuM_* z13#eJUIs2iFg_jj-*?WUSRadsa4 z1>rIxaF9+32L`fKe)z|>>IwYmQQy0$V1#=MmZn zB?hJVxse>I;X?&;4iO8)6%UCPmskhU99zs)eDYG;2*G;vK+}6p$9gdna$hO2B*bD6 zni$aZ_OYI=YR(V)CY^<;;Xp&>@u@lL-{*@OXJ40P$+$`R>iWJc^D~r5-Q*Db-`eHF zQEXPhL3DcE?b7LC$J$F*qXaS?=B3GNHT6X2pu95>RKz7K4KK(<$Eo{Fmd zU9(q&j-pXwlveva3c2uQC7Ud>#6$=fPq#MAj3R$r{e*xFFkb(=7F%Qo;o&8 zeY?8veI8OfV?LlZZ6M|+eXyN1AVk0iX|dl}_B%pl))LV-Rq4Dim)8=Qrs z0&JOV(PRW;?URQDb}q$?ZHh;-)jRSG575Wh>0`bMxWL7bO#(7KQ(6Q#gTC+E5_8Gg zLgk+w?o1|bBR2|)zeC89@{%Prlq{)}!^4gZHhv7m^g~tf--Ny;&bBIi?;t7^#u;i4 z9Kr+aWTdGaG!^}!7j$G(3P6kq)%NKp-@2r7tz?I6RRcks_H{|^z0;!Sp$8T2=w#>a zC>=7v0m|mIT)RgO)tlQc_!|6nc(BU6Piy;*DR3%d#jbn05NYt>p(-mU_=uL+gLs2m zX&66PHJfo4oP2;0KMtorT+S-k!Nj%mzn88AC;NM>t#n(w6o%rPA(M}|D)-FGLz#cuuIQWM?Fg#|!z^Q{owD4eK(sYo+<{ASj!c9*CEACMFqK#+%{>>ogs#Taeb1(s7|_}`H?+x!C2p4j7rur%nx01S5s{O!c}jt_Zw`_E=# zFA#NT>Q;yC={OBh?$K*&wNlp?4lR63wDUeN6}ZHZyFV$^iB_xsaUC|6Zv#%D_|vzu zMnOX`V;)TUWD#E_Jb(+>Mcz6YL^h7G_G{JKxj0S8k^?K6mCA})7zS{Uw#H$P{9m-y zRb;g_D|(+BN7@!ZU9V*reQFwzGq*TVC3R!Y099wL#VI7B1vPqJdd1PktqEP4Sa&x_ zc^0+iOCt$*Xj#iT>~o6@!LXo4A&NM&c(`BiY+s1u^c-wb$xOt7U?NeCF*IW3{mZ`( zhtVITUf4zmBt%Y1tyA5H=wS4R*x#>V&e-Wop*s&?mGSCHwHsY!9TU;x+O>kUVSF0B za=3-APK?r`BYL4UnD`un(m+s5MWaGcFpiiI6lY5U1O=^7f%ZIg4oQHZILr;F35x$g zQV0s_+d{VQsr!i}hQfee5+{4=9%2H-#c8n1B5YwQ_DvW1B6bU&J9gkZ?jw)gDXO@K`a7xUpafU}56OsRow)qM(rU>?a0T-%3)&mp<- z4U!wDlibKTmfVmVH}OjURGmLToknqv?o$E`2KJgYSA(sUIHTuzBcBoLKK1>{{hdH> zvQ#+Aj7>>>n4NW_9Ag8{^qMYhrPpr|va8$MBvPH_?CZg(&79 z5JZs!j@tn^!AYaMxDsEL8AwJmAz(Ozs^T#>{+h!3f;B8FhxJe47^C(s_$T4j zHg-EZH!UaHbw>Dy(XLV95d3qNVN}08hdY;aSLh@lWICA0G3G(A&T&B3?z7HhRXOtg z;P2_td+MG=*YrqFI0Ku01kKZjkAzHf~!#a|Ao49*qEp4Tep!rE6yKOaqnH$?hD zqd4^@N7piomvU0+oB1>|dWz-8Sj)OXZrxq*djR9o$5!~Krw72RpDEp>>X&+ zQW}3?GlZ$<0FP?ww-E|KBBFtJbTo|9=HEjxFquZbCWGpB;tjk&!pEmR7UJeuq(Ok< zFWv(mfee*&7@dlnA^Ced{^}mY&ATMcQZO{-=du(ZQJU~cb3A;gyy8yIajH*XMIUX> z0Wm&R0||IFD3^KCfro=P8GM=;8_*r473D5;TXTClUgMZFIIJKzz-AazoLzliXu%!S z7P%9g;E_;wPR_?}M**v^HcFL;3wK^1<<{4YHiYQeHTd0P& z@e0u*#3gnC3<9A5(;7KcM!nd}VC&MOJ(is7#Y>#`KY*)ns9zllpT7V?kLCpuQ%?Pe zuhXh#sm%AMGDo(7X|u=BC-nx%ruJbXXpe9JT2aD|HfS13jV*_viGR@L#a=qld@$b@ z8B_pMNfK&_FbH;76>)3!gWWa(9_%mFmID5_zHtsT=u7gUo4DvIyeIFhQx|4@#Bbxo z!`sP5(?f?vP4&dVIRA8X3;`THGvJ_6`i3E5ds{ujtz8f&H%Q_;U)Hbh=ze8aF=Q8Z z4NS)K0|E0u7;J(Q4{nqBSH z`Z}IsS;6SqIsh6F6%PSJ)=?uZIBUTNl!@WF+8G+=<)$+Rqf zawY3Ws092Cs^8@iV5E7Ya5Ps3_P@+vtlu))i)C9cT4Om@N}XX2L#@n@3n=+}|v3YOu}K(U}YathA@rh$2kShw_$kL+RG%tfj-mS;UrjMa{a4Gi|AM3(+p`R&tw5oQ9PPvl$r$xWU$%vyWEsPp4x? zKFuyc!frPl$zYx#R0Kr$D%Lp^ulOMu9NjWC2gBph0jUxG8f$qeH=gF5-B`qB^Sxs& z+-sBo=rcW5h^phU?U-(IMq;~|kn&AOoUk90M*?qaY#Y*>p^X?fcOw;Fw1iTdT^;dVCZQyS&i|u3~>?D*Ou!^h)>Hk7ttu)XljjRqs0{) zK|9K7z##{o&Dbgo>)Lp1IeyGVxyTxi@yck%w&QO+_JX8G<2^F*v$=>_A*NwEMj*h4 zeEE=%3a>>$JhY1TodBvB#hZ&pRtpk?nUwM|N~omNp0)bt0R5jOl<(mjP^lkL3T zw*w?n=Prk%@0O}78wQ&ud!;@`($J$YIizC)otUCMst(-%V>p>E)%_>0J+>2mR`gIMH-s*^hP8D-tsp%M%|=gvd=rO92IQP0zp z_`Eax?d0>dn0Pg!8~KXo*`wtT*phQXYJfb?w1*ZDJCxr7jPwVo3Vr5*t#)3|(F(Ou z`;GUIB*d%#{1-;si$#RfjuzQ6z&YFx*t%R@^=slNYTNps=JTAK5M2ye3ZAcKoB{rK=H`UnNPnx( z{AP&L41IdRgUdHV+tT@Vr}ODdXepI1JlX$F_yTa4UqwHm->t7eo}rGEmUnRCLRSYpuXO!0ZnvAEpIUG-O|G;h` z{xn&i{_S)6na&-FYv-0DgqJT+OVf!B2rda5j(>1tfw}n@7@oDNzy)jwr)s5jrgJ;I zTaBD0_cLua(^{lY16U=rMPL9>i#)i$FeGIYB2bdGl?8*OlDSu;LRg}a+-j%keA;S6 zhXUI&0FCH4md+>9$gl+jJ>5oB0$P5;fR@fD;hLcUV5sAW$Jc%jL(%;)OyU)^DhNcI zf^^Q#KUTsas7>d^vgpi4?qSw=5{5z%hXdk`Gx{zkb)#JE1BapXaF!vcxV)NVJk(Vo za??%*g6guR@CTMdEk2W&Oq0!mN_v@Ub0+rO$=r zO2TS#CE*rjqigq~EeW0@$A(p%!b@F?z6M*Iq0H+QuKz}9n+y=A_=yJChUrdzTQ4Rr zWGknjU96|t{?T|`1qEmPdr0~$cn`_1a26yg(r3ZG=e$77JU=rK>hb5ne^sT=gFi}P zIS+n|Qkxe((x#pmh8TzkQGd|8l3nU?-Aa0Sxw(r@^4(_g@JNu9dZ42DG7`k-`E7 zPa*kr!Qi_3G#ISi{T0Aq0@|>^VE-q5fWa>7<(GlMki^U0~u<2gS!mV0k4Fh{jgHJzo!7 zS(;oK7)t{X-%G7j+adXWVk~rA7~!|j!EI0j;I+S|SYW*CsxLt0zo_P-TA*Z9=8Zx#;U zI-cY6T2jDT*AC^AP%wvSZ;tCNeKDmsW9mqyY zIl$W^^c`K4tmjdF{RX~a#&9VMtcjO4|Jhz&u?d^^5e9N9*cqSRXzW-Z9!vJ4Lm4Jg za-cO-(9Y5^-COs1I-IVd3pZq4( zhfui1mX|DXCN2U44az}2Xpv;i8SWc`e7Jo#WtCCEJb4tkuXfJ*^&WKh&-BO#Z^2pU zC93fCj|Wy+77W8Otlc-U%v81j*Nkx&ZQiAKk#eK7*(|dA18d-{j03t2gbL0nGq5BG zs>+z=Qtu!Fu{bf!)=o^5k>6_`wYunmnKrG4FaD=T@0F$9V3fW9ZT~pEt+j(}i3hfs zfsG*fHn#*e+JdkISQ=C#&&FjA>Q7#ny}=`M#VUqbSb<^t-iFh{?Q?UiK|40dm0~9ufkqQy8u@>#*j76LGxhz@>pmVCzH-KbL zARFos45O_(5F$fZoRODy(qKt05&)nH=OuRqbsQH`z<8EjJW~X z@9VHFI-Cr9%>X=?2Cr3@jfc>8Ut+xRsK|L=;vS)0EW*eo5!xVfX5Ug?$%pAewbYsk zLmdZpzFJklV!Y^$No}4X<;M1h-UY6i58>`Z?=x|*-M0e(3?j@GzYdoEaj$r&cG+mY zU~H{a7k~KQwi{?C+UNcbAdoX0H$(IJ%xLF-L7d(Ar%T(=^LvKCd-HN5RM7sPZm-74}=oTCD7 zFgzEXN8o@Vyfie;9aC zdcZHxZ>R4l*Bz^5Yf3^h3f>4@@&5jMbLL!R6lFV-2I%%CAYKvc`)WF2@jc|;;m3yf zc*7V%+_p77L~Mb%$SK5&@nFCB0%MKRafqY<-xGNNiZNBtEQ$<5qypn;2VK&|UeQlS zL>0>4H2)I+hWQtx;cEf;qt(H|fa62Pb{+zwtJFdlHh3V{an!fH9KL#De4IWy+MM4} zi@N-q<`-N`h0RJu&-`ozvoOZ@S*34Fd6}xxg?*h>xY1sL2b6OhNnDP`kk$WA#AzH& z`29x_CmXO`Rj%%ZHW9q!%;rzI`T>57EvqIz{{95tRxl2Ev2qyNeZ1*xG$%z7?Exl+ zc`zzWM#d#0W2+Ey!lf9V4FM#4fpOMHC_mEPFp0@fKgGvrb0JQ_-qz@{|DnqUs~VI= z2qAx)=ZQaKjO=U^wI$zq4OsL*e0n$Ac0PpF#v=N*O8<1%K5hDVl;hLb!3SXyUr0?M zIGW|9NO!H|vjUM!kR*?}XY&11DK7Er$%ZeP;`55c8 zcp!(h+>erFCaz2)#$?+wyH>@M}we&^dE zn%avk=NalOKysI7=#&C){DFcztI_m=V9sPcDpffej5en-kOvfS`&xpm5lwifdX4#c zSpUj$Hm5GsZS0aZ`m;69&=PO_!BqJ)#^U}i%{HjPnMe5C=y~FEv_v?ijwCTl1xAu< z9D!$tJYx&uBY1`m@OX>7o}p;7C@#y$4j%}fWYIOj65Y? zV{%@+BoC7+{2#L;_5mt*Ly4n)pyKH}{H*zu55q(Fh5TECI zC-=KsHk!xlkYaOYHbF?j#s@Yx6fto`d@{0`mG;#5baX+8d_yUZ(gMK@qY z*$nC~V%5=4rp1f$xPQ&NcU6^BH}nm#Aock3w8I9jp$r~qz9esAjSJedpX3``5}S`7 zC_oWersswWFwDer$PoQFzxQMy15hjn4aBLw;mDjf>^)biK)O*(Fv|E2VU`bM34SK< zc;Qk(23&~FVZeoX@!~wp5mq1`$ctCxV2P%842K$q1}WKZh1_q%^)BO3JaQmRYLH?vZ_KB)J)K^O-lErG6z3U75PB4v=78B8q> zzY0*7V2l82z#V)o9K{UjoTF1YBX3&u8j%B1Ab@(OdYK#Bc>_BhyAp>E=rDw3`UrO4 zRGRa|M(`bgkeCf#CvdPa@;W*vGqaOC1Gu7igX4{^-)%m@DOr_=8GzQEzunm3xoW+y z9l_Bw&gCiJ0w4->n|I|agUX%=btH#CiGT`5&piRi(|e*Q&p*90g8RV%e^>a79S-=X zdp#yi*-ht8$*{-whUp&QebC2Isf;{}wyJ5IJ zeIKHD`Q9n7s!WVI!F2g+_Q3)^(wX>;5$VPb1H^ZhtG^_12dGev&tRX8T*E7%_cp;=9bk?xrty;Ov zFCu0V?w%JzQW35_|rBYS>=W@UcVzO?~{-$7c2?-PfL(&-J(G4hvD{6Lj2o%1X zvVkVL+(VXjs2Zgo3h&H#*p~Tad*;KM%!kIzhwjV=+mAA8Yi2lxRHJQ~*;ZvfNYsW@ zwgs7p*)F^59Q&*V-#H~@<3BqFm`bO9uf+T7@b6aqn~i_- z@$WJG`#Jvo4*#CVzefCf760DGzYp>60RCCav$@s&z{JJ&9v574{!i(}pF^AweIJIl z2aVgr)-DLsJCUp-c;fL|V`|tbzyxq&iJ+s{g#+*eJ`Ox4!qG79Y#>p_J#j7=B4L+j z@dnXkHEP=Y?|?>|ya`f`+YI>6?r_dNW!3^C%ikZnWxX@n;>4>tpG3R5!{ZvVF6kdR zC))LS_}qrc_Df3ak&)4^qv70!$yt|_WJOM*LcXVAvg48xM|i+#JENQIbP)(Kw!7)b zD2V5Zn-ZfEpeq~wN5X^g-FlM+UyksZ29>YT@UhvW@8vZv?~blN3rs)lziTp>T&>$R zr@UhK@xx~gh}pflr-l=2jLo;|DeZ0mQAS48{dkj!e^UG>W4~F7tDZ}BLLthyI?w3z zU!4yl6Id*oC8LAp)w$}ykH~<`GX{Vk4X-Hh8&{GCPErQfhx@rGuhP6bm*gGIAWzm6 z2)pw#mM?L}=Q&$#pi69EU!r)X&&V$>f3%~gJkGPPU4C6gd9sziZu<{rln3Vj+T}0H zC=XiWYnMN&dd3fW`D>S7mr)+Y`!4^`UaFz@Y*8K32*P6E_LSv&XJr+X0r7%P&RnK^ zgUZz{coS4E4>*`B#TIufwA4!M@L&Ag2T9l%^Sc34rspBhYjIu%Dd;@Dk>bF_5IAH6 zIMb%Sj5YSk-vwgnS`_fHYK#|(B4@oh#@^FMa3+aE@{Ju(T>1o6;_eaKi-egCUBTT* zG`*JvZgWf_sreBfRgtlyBUwa~dGq1Y$nJTZH5a z#IrMc^zOO;wF(*M<8E?Qi?Q#aqpf%64!Gwc@M6B5l3$qagH7*dg)YxIIjc;q>5x55 zI~J<57%e~dtvB|)b`)%lw+djdJ8}oVJJ;QfkMM}FkDXvw;;~Nrh1+V~r})b5o}LZv zWY2P+Z$BA}g>_0_vrFi~hm*Gro2Y(p0bCjLiVoU3dZ-MTnsb!OrM5 zPKoZ#hYqQ++3L64c}qZf6?u7E*knw0ilS7khQ(nzTjVmz+`jb)WHM(+wLA3K{WzkY zy9ObMa-hf3kB?Bz&HD91B;u1@(IPkE7U67ncpmkm1{~3o&cG3Ub$4=(8~RYe(FaR% z>%nHjisXiy6|XM!7q_h%;hb;qqPKj&?bq1>*=UyW(ezu<`e+&w-{e zKPPgGE8Mew&G(G3^elcEVQI440k3haovxby#TzE{G>mCf`GtdUlSPB-aa2RS=r=E- z6qnfz%x!ER5?I~BUL)6mo!E}5LNTL_ft_@-S-RQDS(s8sawUta_dnSQ<$vg(xDgtD z_K@m9(A|Hc^c;H!wc1+jgOY{rj=v$9$C6L!yvBdAwR>%?< z3t8d&P`U}-CANb#_Z7LJ=`^tFTJ=}dpEw=xb86MKRyU%bV(ZJqV*AXlv6!C(bCX-%F;aC+t=1^R>LplE0r0dxgQYoJPu zDmU~U3-BD=Q*f;z%J-T94vj>cqJyezwQM4{bT{P=kud~ zAf|vx$)!B~8O)co!Zqz0^X7rsVta2SsOQ{}Z94uve!8adgq|DQ8xd>f&i**BTJD16 z#G34QWH)4io;o59od4$4UcIvdyAX=j=wD`R;g(89w!^$9vQ3THhGh%1b1RAO)VXfs zY6N$cbsL0r8x(p0699qe;}{F%VKO^>rDtbNYIaK8gOZVUnVu*Gq8IYX4Fma>9& zY*Ax2Tp1%o5~82kLqaWYRAV_)gO>2AzJGEu#b;kmyPXQ!ZSYo2yG3?Sjc#!HYqC4+ zz^dATYI`q!$fqSP`Q;!mrUvC;;n1}93BX=9w{2+HBf#A(9Qjf*gYsR6rBygO>Vv!PGK zJ7leWGY*=gUt%Q#ERggTvqx!}HZ^~cEsPpc^M_#9z9MI3~z>9nOBH0avU`9q9PoUhM9WqW9xS%U=AH2}K^H=E33 zv8lu9U^w|2lE>mmN$$v}I`(5X%J=5hzD_|dqc$S&)>U3a0PKWoiH#}rRva!j-B`-k zBhmymZ?UVwp{Q#R2b2FKVUkTY7I5{WVd2$c_-H`C!O!Ru-bMJEy@&uU#n%+)ybhwMh|}>K zf+J{Wd9h0O){OgoYuHvB3!E5KJ{XG3A~FNWfTP&`NNq}FYFL`f_!aNZ6D1&7)-fsu zIkGCCf)orvT(A(Pj+RX`g9%zKDi+9%rxN$Z0zmaly)giYB4_uFn!GHjYr0bx%ZPK#J)#!I^}gg;fhx%3bt}d@|MTjb%~&^IxB+V>Doy`>4tV>Q zjT&+>?NCAxwH!s4HHgY}v+=XvCh6%YSkXuonOlpk3 z;8pLWwcn>7lu{Pln3r^8L3M1qhemk#aW*dUKH34G2SPf!cdi+{Tm&nFo=7eYkERgV?n*Lv}iFe#t}obklpeoMge(M|IASr zgT>le(&DwzH;-i8Y!3Q5nC}^EfPIOi>-IcfavPOM>~G*Kgz+XW&sn&!L+)}=GthnV z-hd~>3$U7+rY3+Vgn#$kDE|>m2W55m;zmG}GEtt3&u~ByW81 z!54hch7UYH#;}qzcp-Jvbt`T*hfhyqe>lrZ|xiIV!C|q@t&a2>Jds_Iqjl%4<%SK%)V>D6mp%0CVw}7JL@A%D*m@` z{5ypM3=p|Rk00AO4=zxS^9Sccw-t2eowtC_+=??y07sY@H5yAg^tNc|V1r2g9Y6D1 znLL|^=*DKPC{DBfmS`MH8(g~Cm3vIy>v5=XcKQaOpf?$Fq*yC5H#L~E#QZqYn~O&2 zeIM~gST-GP#|uwL>eSvZv&E6VkkqO3dapq)B9X~RWH^l|Bn{QHb|TV<@!;0WG~C8w zzs`tg-_+O9Gb)7zKZEu|*^9AC>#K9AUI~4PwzRdo&VZkJ8eM=zx=SrNsg`sGT*t&B z?dl-O=9_p|X2?I8h1TjFtEkW5&8m?Y5XxY*qpko?nCs;5vMtxYWBi+$n8|~o6;P`> zMyrdfD+-4AXtY=?ET!hqs`59nq<}EQnTS@ENu?B=BweO(1qS70T2q2&XrkNAAO(TC z$PPXwDJSYHCq9Uw4@$avXk>-fPP39n3w&1(naxKORIZ)J_=)>N1r<+56m*IxXw%pw zZInqEB`q1Xq_nBgGK-R~pbtvAdLIleyrE+D<`1{e7NdR6%Ow}B99nXZ@oV)Yj3u}G zU0QO<@Q0S%E~5BXbU5mSY|B~FNsI0=ZkBEh;W}znJkaWvAO*N^(1cVA{;o0xV9!Sn)hEdt5NzP;NKOw6fANgoC}uNQ zPfC&1l*x)<)S7^25YlS)#m=_%(VF!NckeV-NBHbWQa;>@CTRkNTbv!6?pQ37;&&r^ z3CcnkMfe@U35OSix8U&hY7jx~@& zoMlrW2MQRNYmeGY-UKF^3?pO}ExrqITCwV}`M%sHnjhjInf@$Gp z6iQ2u+UJp!&<}y1js0!4uOi;?V3foEB;`P^$aV=JWj&&O-sSN7=~wFjq*j|&09_Yg z#f=nTQAJAmcm5!RS6K4yzzY5%J~i#NI9zRbFcXqir>mbFO%>6ZM=Rj`<=4SNcJ-+# zimMNyH8;!Tw#1huxq5*`H*!cE3LNLK2k?#964L@m3B5JNR4RoL=ApeFFq~O(3m3}RoL~qtY1zHpi z@$CC#b}%HnBo>1hBk|VjXqg z!N=N4PUc}^?_H2y_o}0obVW7cNz~1E;cO~v5v;HVQ~0hNn1%F%-AN*qDdmY+Ma&dQ zslRtZ>bc&>+D(bUT)QURcaT$+5_}G(ium*a`c!g&rj*};ow|d93W>(-{SSF>H{XJ} z(7R0j(u5mnC_{Y@ex7ic!YAV>y$UO{g}1oACd#(9pftVLV#}CX3X^H-5FYrG+&9E8 zSOVbLf_&MF!<}1;rf3iy-g5(}RG3QvP1YQ$$$*1_OfeJX91PF^GU-aod?g$hFnvg_ z0qP|lN?jc8Ny6+Heoads#p2Va?>BxOn!ZddSxmSzBQJ%fqz>uTRrZJ~T)t}J>Xr+X zDpn>qewdCl$AQTf&tJg`$%xpyk{!_=7WBJLpS*^hP|UQs6KLal03VJ23p1&4}>ZxX_#St175xXjL)0u}_^RBxeuu*BQ!ZLo!l~^4XxH_S?Wj zp@`hgjiaLiMt22NXxJOj49ib_Lv{7HeTV?qvp_Z3XhqVji?uXAi-u0$Z8$F}gG1hp z%HW`H9A?zq*HA4>=d68M)^ zXjszT+d~@+G@e8)(^R9DJE{6!dZ*XavF&F3((Q3YN;KobQ;G?t1RniM2q?)qi7|n5 zMl4#ccn+i{-$ap?>J2yL|A){&tkJH=@#fA`ylDC#f{4ecH`Y}zhT0ErpEL7Ryv4Bs z2z0PG-x7N3X`^8%R5I4kiSuWW&0rkwO7)m>(>$go{QCp`g+>*FO3DqJ;$S#2fRTd% z)Q8(X^PxLi4mKAAGZnIl&>$u_9XDrwBr5Mf}Bk(bo<~tvLTIuw{~l zxecyqNf7H`7fyVf6hP>~ahUkM6Ev&C3FDJ&xIpeexOc2Q;^WAekhey}gq-<;nAAje zyoXjICUoU2<%4cDZ>V=F#!ze#|9n6Ct^^vDaN>h84_UL_^15cHP<~L`BEBd50v=}; zgtNQadC*&khwz-G%_C*Wet0bZ7}f{vA$#}8m+jzZ7h9o8eGPc<_=w`GM=R~I8fkxJ z_9MlQnFT}!Vx8HNI+S<%FB1UnHW2`>76rvZj;4TK8inr)s7@GhK!WCicn6!29y?SI z0C{#M0zk_4hi)FefKc+sH zL3w?RJkPCz*%uLFqiA*Mk^e+}(n&V}>r4mPEufpo@@~UU^e$}XI7TPwkmiz*3LNxq z&7O%32pWamnzbI=4ZO1okwLec?|koL9BRU%JWU7Nvg6KE^(!Va7}9k@89vMEbe%-0 zN@$LVGe`RM;d7*_i*2>C*<@Tm{*llV<90)P36o2%Z*Fa6Y%yPZ@{b_A$VX@$DSeW+ zB6bwZ*+k%L#j(LV)sna(4HkNzueycCB6ymRT3-nIED$E6*vwR2IS!|h$7u-9PeW)S z&&{v|fi|9-Pxt{OMmU=kz)0^{gKMDPb+WvTwOWI&Anxc2VZV#jP z|LaEoA0NB_SB%;JkB!#L(J%3%O z=VM3d^{Ga$Lzm-{KL0)Xyume5r@g{DUG#S%7B4a7iR5#^5RAlr1w$n8-SNW@q1zV6 zN+HY~)a>)XJhW&T4Vtw9o=}Fvw_##$g;6ECRZP`;Bd4nDq_)m~u#=W9|ED|Yt54~j z1lw3d$igJ;7L)Xy;YkX!qmh&JOu)s(B)thepij~+ehq#^bW#^h(sz|mCqd&mS||}= zl6LV&(<3|SOQB8zxj7exKmYvveC=|5MKcur1qEbmHFsI9PnfaYpAQJ`e%wfAJX9!+U>p(khSL4w6k{+3$=oHiRoM24@fTYR;jvmZ$W~dQ zaN>O1vF-bqh)Is58KvYzzb&fVRK&BpPl5A=m=CW0;8pnutifhu8AtGA==;N&GB(_P zZw4#`v{IXv1+!ex0BZgjZE-A{-v^RF&F5@>znb62<`1a({ef&D62?~gdkkzO!)D_E zzoiaKoC9&sF#}h^dBKFDFc<5Hm)?)akuermzq$(IX;2BULZko<7G|cc8R4xFqX-70 zIdQvPG{aVy}B4RY7-j`Gx;a}B>T1GWC!L|>^SuR-G)JH{4 zUGZpvhIo)Eun8-$!CU)y9L?4;6X`{0c?tEaqE!dfAOd;V2(f3AWlx-zmmbIyqU%83 zbb1`fn@Kk{FImk?L4;;CFHOr^qHf9z?f8F{)~uVgrTs)5?{4Wz&9|1WLD5Ap!qa=2hPx>BMbo~ z)PyPBm9aVM%2+C59UTdiRt%=T3Wc#PB&@NqSez%L*o4&AL1Ww4cwD2{l)Be({(lut z;3ohFdT(0XjKxKWAzns~=?eau`5IhQNWS@oh&6o`l!Xn6BzO4z|{f$ zS!5#>g{k;(3p5qNzm*?S3UauQ`XL-Q9FvG@mQ66F3Pd2>X=+wlncqIdCTs+!-^H0(CKWsQd1__N2f4+V7wX+qjdZphjkUU<uC%MOJuSSa@E46Z1U z893{Jru@`9+xaGh)aQF|hd;j|47m3ZM5q*IF8yQ$^S1Z_doI|H{|<0cRXtvjMXN96%C6=u2^UFBE>^>n0$Qw^!z*JrV}4#FXof}aEhoY zsJ9eT?e09)I~lR!pM!?=Lwm)+we}SFRm;4SF~7gH5OP@=Qag|>y$udT{i^|sRQziU$ZJ3z16pT56$VtPL#lr>Ak|-utJ1n!_16Mm?d^U}2myZ| z-SCI1hW09*-Y6o{(8k^_qYW!sTM(;S)`G}EPzh^8ZghQ4G*(2~_;T&o_%xVhmq%$? zh$Q^Z-8Y++L&;jPUCXwqSE@L|0;@2YZAoz+_iom5lfi@ZX}Rgxai(L3DNJX%DYTE~ zrU6kcOj8R})WYQ6#n5^q-)JCC#fU7n_RfLuVq;vn6%1Bz?-%o_FG5JOB?XBi14AgbMJrvxauf0ynY>=b;S{s=}&J^LrzcqxA=t zs5pLDk6kv+xCcuBz9D{HH%knb=z(L+BPeStZpN6Qr$LyD^`tdgSgYO z5ZE?^EBytw3D+h9O2HTS-^3aS3T#WHANUJwOEw@1VnKhP4t!B88bjz7b~kItz+=t+ zs%CG5lm_Q}H60#i6d3!p`3BID2bYmH(TkLIZ?0;Wp+nt)6ADMkqLq6}-9w zs8B9(+4ZHA*!SRKb~#>YK1Q!rbkv=as*#S`XRt;f%ytLL5O8&M;dK)m?|7w#5aGG- z8qYgejU}hkw3&RbumW-nz{Xb}nDaZ}m~>o6T|JT*{R@})!WR0%dyS{ZNVGyGs-rMh z7f4YUr4#FV9Mnb&x@lhr+3z}r<|2_wA?SIMN^~@sGbW&X*CJa_^A_md=5H0{6JC)T z%#Qu7x&jL6o3zihnPE<9ZJ3}vmJn}z3vY^iCMCAzT;Hp9#Yz7K?y||t~s{PM}Y+I(e?wHD>g9H&IEGg zD9?$bY@}0C;ba}|0)&n#v{T~q6xT_sv#JCBGAW6I(>?2PY($ia^{1eYrnzDMs5?i$ zL^qHkb3r%oiSLUXdw(`&KQz>eo~w7gF=juH=r!Lpo+(f{kV7H9N;I|6YbQZ^2?{OL zOM8{bUW&a;FEy0BfsU$QVk2sfl^k>IH>*o(K#*H6ntDD!^>vN$s?(t9TwNe!F0lFm zB$iZ9e0Jge^L&pUqwvJ1#_t!=Vd2H8$pAZh{$xH=a}Nx^ac z*e76lK>57nBqjpn1=d&y3(Rb8tW7zH?F?jKH;$iR&Q`$yyc?QRP8YOnt|y{4rq_aR zSUu4dN%hNdZCTWJxRBb0CN<8U*6_y3N4|QiHKBC~mF*PY?xb(YQ%wkej;jmJbF0xj z>6mNeCr(W2boOl{FFk=HDA&mEXN=N5^qpv*lT`GRh)PP-y{-qc*#=D#sTg21-jW)l z@pg&EYr++g$*BDtkhC1c-~{b0>hHJyxHUf+kO+XRa=#Ee%bdi7v&$B-)+=Tnm=Jv=y24 zl$2?OlUtI%17iln01H^CFWRAA!}q77uW`agIWiZvaYrf~QFL4GfFqAA5M2rC0&wsE zB;)w4=A;M~L>j61=cKpiWI#1%E~OO6$)_7=do?FBkh4(y$Vq6=ahpV{6Og2uvqZ~T zqvkACbFfu{tXmz(Sx1NgrJ8Q|3n;WT($dtPQ(gB^7bi-dj*(2@*Jq<`8DoymP zUD->wfbtC8@E1^8#hswTfF$ldde*Mc#)Rj`=!U<5(k<=;odG0qJLy?FG+^-;Q2OYG zKZ?4Mzfe~jXjrMW^I!#qpQ;~G$Q;7Wf1g+`==XoS+A zsx$*qmEE|C5BC7jl+(DPfpDe20Hn_$=$Hwx%f+i|Tv20O>5p{=luE$VU5pVFP%89y0mW-T zn{`N1hOv35B@=6k{SCr z8e}!`pOk%M@`b;E^1J~ZHlP**I$%JpIt0l8dILW+r5jgl=LSlr4q?{1(B^pqQ0i_wx zTmwospbP`bG@yI~T4+Ga4ajXkOAKhK0j)NmH3sA{pb7)>8c?kPRT|J{1FANldIQ>F zK)Vg7$$)klP_qH;F`%anXs-^b%056?N^un%X$yez_<(X+M*zvDL;R|*e+)jXRW+$F z?98;S4P@HQX6(dxufcr*C38kxxp)$X{S4$BU@W76`T@}&=Bo~YZ~+bo7hJ`ti3Ol3 zDdJ&*xF+H{E)!z|gd9L@rjtXdcnzr1fHoUYwE@){&@Kb2H=rE`)MP--2DDp;Fq8p- z=r!K#F`%anXs-e7Goa@UsKtO<4d}1|oiv~h13G3vod(opK&K6;+kpCX2m~`AP|LU~ zyc*Op08QBof*XebBD?X2UBG~L8Bo0e?J%Gw9cova3Bn448@6U##}S!{{TZO9ths_x zO~jS{0!p$0Wf)M30i_vGx&dVx&|CvrVnF!@w9tUuI;1K~0f8#RRZu^x0R)u2`fK!^ z0Ua=)eFpTr0ks%Vs{tK0ppypFVL-1eqN+at#cM!u29#hx@j6tju|$9YWxDZdrVjBVM-Z)pdBy9B z(8J$C(OYBn_{m=ah!)k~Xi9w?CA1H}X?(z{q+O`^;8}}~6HpEq&@lsQHK4-=)L}rK z26WPZ&KOXa0i8CWZUf>v)UNaqgyqM0HE2LX24qJC=nv;B1F{;B&46MJD9(Tq3@F}! zrW?>q14=ZYWCO}DpcDg2GoW+>$~2(42DHS0@(pOA0l5umsR1oFpw$Mn#(+Eqw9bGk z49IIhl{y4k9uR1GT*dNT3jm9Zc-SniyTz;3SSkQuyzAr`4*RrFIi@JdAXRY7khg`n zfm5R_$338|!Il2N34pJDo5|#z=b=M7uh>CcPb(y)@xcwru+(sFT!OH|z4jMlf!^~Q z$R{CCRfud;8C`)nS$yi|Ys9xUq0Rd`ZU&!$hj30RB04(7BZ}yF?f)jjkrUJ@ z>}oU^(6o+1ZNT4*FI4{yac#nts_x$fK?adyys{@CUAj5RR2crV zLl8KGt6a33OMoCi%NM5{gUt3m;yD_ zaN=DJHJ*ebpGn-!z7qtFV;@Fm(soSu_{UxP+CUm?`tPF0j@m@Li z6$_%}A%kUB^ z&*NOvx@ErM~EY_6vZsTFclL zo8`}NNx50ulo+ai3=M~sRR0H9?jXj?{cJLs77Sj-wBP|D-n&H>E|5DYrflwzxQR_F zxRLWBy_mV(W~KCuNeQGV?J3UBeBXi@)~aRH!nf-f(Lk`8gdvEOc7-}lzh5$*9kr*B z7ZfKkjcl-JfSx4G#@g|$RMCU4o33It)qvDp;z3aS=p7G*xg&fJb}D^9LID#aqXj9mJh<6c zy8G`Hk(;l8_c^6?R?=CeeMq@DW79l#7V3zf)rzhR1L;!5`cErkfSb# zxS1;kSFWO&Jw?5woAuTqad&P!x+x2OIL9&pxl8m@jh?e~w-d;nE^^MDNjK_-y<%!x z6}=k{UD5}XUm+Z)FOOUn&gI(7zFQDeo3E8A&;yt~m{CJ%_ONDAnAwAoKFyaR)>e%8 zAVW~gsP25AR^Sqv!v*OfQhZ}z3iP(Y$(6V&<&SV7GsXeSIn+UCw<&DIJrbI(_#3E zCHe+wzg^g^e3Yo=#-TkB3JfuR@XptRe8`m|9NBrJ%fwTuntn*62V1HO%)#2o^yC36 z`=t6&7&F`=(nBXecK7BqnCRYJ9#_mep)!H`us>CAfo;S)@N@(f8JMHSl*hsHJO;K? z`X~y{=1)spJtsL~O4%K-!F9669q3_6phfl^6p3L(9H9y(jD@mH=t6v| zA)dqFj7>MOPm9X9Nv{`ZVAKn;PjM3qz^H>zuU{!kr6p@Cu=V=&d+#nIeNvJL!)At* zx+8nB9FcM!s|N87%P}~*!)D#@JHb*{!E%@usKL=&|0dD;58^v&{ZUFO^rVJ6AYk72 zakIJStMLn^0yx%(GUXK^(DIJs|LGlPVtz2DO}_!5WkMvWq^A<_3%=zr(F>{k;w@{W zr$P%3+8URMiYjnO-NydnaJS@P7kN1{5v&mKkpdM1(i+x#kCf+xZpo)A^r2;+hNDy%p*>I~Sy)Ld4*5 z`iZ#(8-lw~Z%=$JG;*48kVwt=`g4Vcs9ZavPL>LLOT*yxuU@HfR#N(=Tx}9 zyOuTsD=l#rb9p>bdByzaTd1$>T4N?~xSgb6`{}^UPt*MMCjvApPl#i6aDP0#I3y>w z)<~y)#UCp%;&3zZ-S}Q>B<=#wf`@jkk(dkrnY&_|E_a_oov$O_bBBHOAtX;!nX9HA%zG z#19Wp;fP7Z=K&1vCzccMq1ojp-V_i8V=B0x_*lGCPCL!N2EP>lUWp;tUaXOrW5bOd z+@DWhJSCFKl!$Y2Goe}OMO`Q<;uxZRB}Ot~utsA3g(pQELtZStuxfr{lq&veJVWsW zgON27GjjL~t&td@{E4SOM(t=I@oBJ^3+^YDDxWBdL>yRrF4(WZ{lu;1f0NS{Ny~SF zt;_rs_yx+Kh&5IMBI01^a(Y^IScpWIt=>$d30+1X(_g^vH6Tic{Ppe&TtDLZE7m#0}@u?ir$?1W@xIAS7e#YmLOo=im7u{EqG?mOsB% z)C&V3AHNiT1+J*MkPz?<0xg};KG{lT23ov8OOa@4xS9A67#><9NoDxMUxI~GBguOB zxliaR34l1eE6E((Pcow5e&RRqmljh;5~%q}hKAM{E+g}g;F+X6D%uN`!vT$7gk+sH zl5|ehb(gQS0$b@sk)3HF_R56Td^uHxHpjBd|hn|55^{>R^CygWY86joM?58gE`}to;VF;=So4!KIQ%Jzj8UTzPf5nC z`AOa!j=M)ZCGmCGQxUbt>EDc}q4B_;BEdHnwRr4kPD|)1!A#1)FEj?O)EKy-F;Z|_Hk{`}bR-5%UO69E5Rl^7-Z<1uJce=L2cHCA9t zQl5yz4-+2;3lpu8I9L3q=qA=k`VN|ZHLk-svc^pDl$0gHpVHo@`BNgF`Y}{6Lu|N) zs?Hioa|5l9>+ttj7m1s-0VTlFM4(011d|TG6hA4dpcRCc3Z^4|4S&oUNpVK=pT;%( zDe*lt|I;I$t`<+%jd)6&6wRMD;wdqDFnn+wP8S;oHP+HoZ_`90ut0!K1ZERhSi$eX zofR(Ca@P!hxJoOut?Zfk6v9kil>ocH;X@zjiH2MojI0aD`D(7Ue%mo5hJyyqYEpM& ztvG`54cEbMjKG}5CN}_4Xzk*Y@oci2KOVCh)&}^}B+(6`7W5UxJAh?->Z=r?pe_hU zdyZXg2*L;l80Q?jT2acY%GY@E7wtBCI4(vYQRl@CSC?u9L%jZK48N)&=fzc^FU8Td z43QJ~!}QoU81`76C;rd*c}CB#=rZ|9`}u$E3{bRD%*0{)5VRM%g#Y$W>85jVxB}j> z2_v|aCrU)!zGS%nbo}>*@oB`D@Y^i46Dq0A$U zM=<=?;4vooa6bKb03T%|^3lulqhUPa6_;|)2)s}YBtG1ti4$OBEefysn{XW-yv$FF zfz$8Cb$BYL2~1iL!Y~`-#M7B0o<>ww4=Aly^lGsbg18(}(KCNEI-muqmGU2ZMT3%i z#u4!|h{YIuj+mao=ZFEy2V0X!A`YJEH~Z{ME{@5ZMFQX%mD}zDEHV`U#=h8uF8BEs-p5|vj zA;1#_x8MFATyjFv<0lm*(GIr1l+Opu8xu>Y#Y z=|f6?-D=4$HU&Z6?P^Igb2YP*0n`oyAe$%#8iB(`rf@E|OU;Jwfqplie;D)w3SZC> z8Qug++ei76_6!pfx@q`+V(__YG+(fjj(|t`l=q?u<)t+^Q!9e|)#2eBEn*7M?mY5O$mzG6NIzYeSf?TUTdH!c@mYTj0VwGJZyj%?P#LzG&u z%X!4RT=2WC;vSBG<81q-QoEk ze2!D{M|o4*O&GS0+NY@C`LW77TeU2j5e^~I)v`Ls(X79k-eOU!^PopP4`Iq8{H~iH zT85QPJktuQRabRGT?O9PyXqV2$k4dlT<=n4U>}dI0ZMlQ6-j|06PVOCwd#r;0ap{H z$v0%fWknQBEeopoLxAc2F=*hPZK3>^Q~rO)d=&ZTi2UhUD1UMQDDwX*6{6G^^ZH#*PA=7p{8T%Uxro*RNw*zpXt_jzfNF-3V3lIQ6%{oL(yfQxinU8}I z*(A+oN((+r5?a%37o*PqiR$XZrcsH)Qlwc2mUg*b(R#OtmW4%e%>FFjk-Nae28s7f zewx{$*tVV+I9G7gk(GOyCj6kfHH}KgP43gd>U%RTZi|AmS}G$GCG#da#e487MVYm@ z8YaGjZ?I_AR^;xT0i|x-;z!_FYY=gWhO?&8>dLD>JQb||wHVHh+C1bRL}-Ks$vl61 z9+dCZ$7vJB$~~FQx7EBu4FX$NuMOb@#2W~%$Tj1)s2U5>JUcPS-CCU+-@x9zj3zh1 zp~YzYG~sg9&A+@OADJa%(Pk;S8~14= z9lc1Bi*^G$Jh>wvXYg(}cl{(^E^%<8+@%%t@qr)0uN)Glh!^E1H>;z{1}ow;5tYo% z&%BgpQmO_rnfR^d#Y3>`>*MWTm*)syGfjf;K@XGVAr?&x95jq)3sTC6^P8Njk1JoZ z^H($=9ChbDr)e+dv!hPMxf0`0Y?E?az4#N1t2}E`3}du|CNbJ)Fr?0Rk-fC5S=Gp$ zA$ji1#kVA;#AaGc&1TZl>gcA5jOtn+Nutg57SC3&*QhtKWjxrNXu>LAOM!zShCI$M zw9GU0kRv;>1xFY2%2ZlRu=zUb-k_DepgDXCWoaq!M;jjzu|scTK?*^QAw&u}w*MOA zUUTgt2Wh|jZ;bSUT}XBAYt&(A86)C`qpn7ot9^zK9Qa3x85R(z*^TDI&xq}pH01h}h+InW3JAo z+7?#jbxX$HR-=qZ9BmYaGki zDcwq4A_NkyokZ{(g+ntVdgCR&wFSm;UZBjw;&Pn-eZE}weZ_NJ&2UWcvLGCznV=~3 z0i6-^ujg~ucjYu{rluldD;>3Bo8mlTY;1ztzT(ByJ@h!VBxeE^ZIcC{Ty{?efgrXB zPj4SW3tN`Oz=)m$VoT18&tQs4l#jj>TuS{+00W@MN7FkmUQX`4*zUTK`cL|iwC~!H z3;3I|J!t*z?mw4l1@IjnbyXSQ4|`XL#U+YAmbFuZMc zip>nP27Kya`&#Wpt4bpD4@iTE(A$15h)_o@kyFrh)TX0p__tp~lbN)FPObrB!Y&R` zD_AQXY5J4SVtH5EEg<&VK7v0}5N&zq)nCz;MKb7Eq_o!9ui#5TF5e>@#v5@2u8vst zao!e7en~S$6KH*hyxwmo1xBU4+fgfG;^k)0BJ8N$fv1|Q6Duv18Co+n*VDFU2QS#G z&oHc8RMF59i^KK3i$o*qC%X%HqINA2DjWj2E{)WY6!GMmo#T9ZD1$t zB0~6aY7s}>r&!fMgz&F_6{Li#(;WO&0v;$OCr$i8dIaSS*(XndnL~Z@-*3o+!Mfpt z00}a15ZKIKUPqh3b0qgrf4v#$;OID)TyTMjA&3T@ByIEF%tZV%$9}kWJL(S3My#v; zYp#O&kj?pPDj2jcL;|E}b>4S?2?N3;Wd~BmQSc+%JZn86Afro4Rwnr)9^T|HHJ`XLT-yDssZ) zF#kosC*>O0lE;9(ayL|Wh!0iDh~|l8{lIw#vGLX_TWp!$i4+D4Zq?yt^RK{;=5X`Zu1Ug?&d#S!Pclot zNyrZzFL<*-^dOu8!F|0SYaRUPVufp6fXN3QtZSg5UPkfa*#$RSl*a#^5~q?4s5Zy`f}#3+x_z!z z+UxVjvx31@Y6W~CT1D`_up~u#Y2nPtHj;;wLDdXiBk0_A9j1a~|JCruUjk44OpwCx z9RnxzSm;uN@S1^BI_L>-6X#-XW?CDT+sw769Cf$gy#*%C`LWv4wDlIYG_87z4G44L zp9Q;M0%k#&S8P3HqIcnx<-&yZS9@+UFgnR^_UrTlucO0Vwba^vhuq0q3tUsp9}f?u zT1JPKZHCf4VwqgdQ%fRUOo&&1iKmu7Q!WRK5Yu$IShUDf zi(^U*Tto=pEP1g#PXGfBSRC6lLj3|KEF|)S6P775vECJ;X{t`LjC3?jvQcs2FnpAz z`Lcl#*);XLMSGy7;9~DUJ$VWU!v76i{Zw^jk;@n*5N~uL`pj9-iSw?jyJs$~(n7Y# zs=CSL@^%tyvhUG;4F|_i2mCkDzf?|yh)FZ@mnEcrxvwVBPv0!E4m&CN>(4PN7m+)2 zi_BIy*vPRdhsZ?<`6qF%==A**CBT4V+erw+enXNM3_j9R-GgS*R@p_a(>!w`bCstu zxH$pkbic{_AIhVHChxzq=yA)jWU8*y2uqbLDWX3{kzzz)5V0W3 zMg^39KH$O&49y(78-70c#h1v#M^{5m0$h8L7n4kQ_dte$H04kl%2)UAXf<$LsQpZ2n+*OM8e$w($qmv~ z^__O>9%}@Niex`|9?ANt2KXNJ=RZIa%vSvf8U|}ASK25>H5@CJ{{)C7eZ=b#jNSq` zJp4y=p1nfn`I&bSqWV8%M^HgCWI??+QxEXlDNETGxoi^(J-}9_)wGL_SaEtpfurb4 zbi^Qa#OYEuzXLT0K1VfR4sN|^tX>#yf1}lcn-YmPv?$qOw9kfc z@V=(67Hu-Tg;98r5`+X^VTZ5~A0x6SyHa&MU-K6d#gqG+g2M=-p%##sQFy()9$de> zmA2273vrI^tHpj-X7b*z6}0ln`JV@?(@nlRSpmZB)q9Sk*)gSGAa%vT@@Vo5 zoOG*neZ2?p48U4JJ^wLm#2|%*VKzyLCpqfQ(xBU5{i147BuSiFKp2($h`g9vab~@e zW!i2unT9O)noI*&+5U%;syZB6!oGu_Q20P_`@;cKC1j_8Oe+o(IN9uW^F^tJIJ_X7 z6Xcn0es(TNcjH(;8k`t?-@h3Rz9`M}DIIZALJX&6kcCKwlj^F6;JCKl)r4DJz3W>L zRj95VXa|Uot9Auk&GaRI@E%GQzP#)CFHX}@x`V$J`(6+nk*dSN4RA<}27U(en;Uv? zXo$s6hT`DCFYy2;+eB9NygK9DAzdQtc?E^{c)FkrlYcIx4AVnLVWp~Ng0BqqW~RNF z-oo=18jZeOFjLv_bDas~gU(%y4EY0TcViJN*u%T0KoxMs9;EG^&Row2Oc;Va@ZI0WrzqX`J6$b4Y+?t{HxpRF0cLV$S$#KA z)sFJX^J#)SjViTu+fpqzQW5X4paANO-kCrS`kpR=Th|s~Vb#qVhY95_^dKDMjV2=yU!)zsbC|X=by>REqg#LgW?vh3@i)KH>HK zl;VBMBQ)EPf)L-MMi3Jk$u{^*eyup@b~Cug3h6D|h2AoBpYdW1ljtYuPj7CLIlPF|#4L8~Z51r2r*|C!wE(a6TQ zt|l)UnO310vLKnM^}ys``odhWA9cGm;eUl6?t#D^GnoVy&*w7^MOKd#=o?XgI5VGArx`VOf34$SUrV zVUIB%^qtWPx?z+oG+A_UWMQlJHD~DzN;P;2+ zKZWv-#;hAP`>?st^1iI4F%ilwqo&KhQ7Fq(M&%*l7h=+!s(?uCXfQ?pBISGErl|=r zlZmIm+Ka|E3xnPLlk+fX^xD+T>6MgWd_wj`h(j zx;+!o^>9{hrvSF+lnX=NvtV)kh^^?O+8hn;TXL5%YdeQ~f~QQA^##V#VT{ufgEnP8 zSzsj8RL0YZ#j$Ow)%arh@E2#~7qkZP)7KgptA{cA!_s_d7-P*a#-PL?)&g%P4AFhT zXXmD&o%#QK4HDboPP8e;`pUl+hP+%LKN5)?Cy_(7?+8Dm#jyCy;*?LLLl0TOp7S z5wdU4NP3}68gfn(-yXv54mHT*zz%DWNuPWtNvGmnP@u51q`TDOLUk$nWz<*G6hK#RvgjJ^{ z?5oYi`9#cN(kw`J^H;=I-1usDSYF%k6@sbiUR$AAg0rRWzf>1b@Y_2+55fm0^L05d zdMAPJ29NCRR@K+ldnJzJZk)+Z@`)pG2E%a%CC&$dP&!lvXbiO9h6yy7DFa5~q*zBR zADPEc`1eEd`yU(MOPv02oPLR;jKJv&$LW(etHN<6;5aRCs4`q4+-D##*GU9T0~4Ia zu^_JZ$+nw~lEN19B*<|kV0B*f{Ru5(Aa&f;Ov@on4h%m2b6~Lovhuq<=>lsb@ncZf z?TRS(fmtv&6^@KIMoZoiR9o(!C)i`7rHIuhxQ|9RFQwc=1*357$P-!8Y6~s{VWf?P z(LoqjjD>NGF#0pb$fc7oUKnCDnlL=!7|pXq3r`Kzwwo|=$HF*6 z7zsMYVXPUZk!f(kh#D)6KEmjR{Ohu<-cJ~>jD;~k7`w;97$l5uj)gHq7)!^(Fkuhi zcaMc(C5*VSFl>bJw|mB@t(`DBbqrAG)S_ZFHu@!&Fn%7M#>iHWBa9tmVZ;+g`B)g! z2_ruoV~w1FMmc5@#!cZEBj-y3VOYn)NF~z9-aI7>k2qQflV`Qsm62{cAFy<1*KzdkhN2ZZa7_X0ov5+wKg=2)*hE^#z zVKf3mKZb&`supx&^4K2at(i=x}-Z+$fNhQj@`!c6YVrtW&OnZ*V zZHmNp@RX!_XCevX1h`_oq;P$<$)?_DiL7U8f;}ykRj^dUGW}l!ApGJ?Nu8-!&o1J? zd7qwLG_s2@qYts;h+n7lrI82;dozS!@Eru!W$En*-V*~U3z)y4c*)H<*zQ%wz<)fZ zSv$b1hs%7Fiy|N*lH@V|_uqaP1RwHlh*2m|U>~Gr6e+SFqS+Gc6r)9obRqsh1E}No zRvZG0BDR#DptI>=TSFInt$sz2Z+oT)!h4d?Ps0l-_gvdlT@?hSZ=ok!;>fv6f*As3 zgyM9%4sQSYd{PryfE=NJC3CEI1$*xU+cXCIrSB^EQwm1N_~~P4 z(HUA~n+=!S{25! zwuG%2Ht;EukhLDw^CO&0-oQJcSHH8h8aj+KJf!&%7W9*n>K%_kb#JIq>OO%0s9^=j zB|Es_OinQ9`SeeNTafgMgJ}xX0{4X4WJK}Xf7BV?9)p2fzztFhKf~J3p1C( z=wLSuz!lFk-#&OlxV9A9+iq=VJq9&Txdk009E0@WEfR=S>(+HySMg6X4e_}?zKFSt z@kPUo9mV)MmyGdcLA(VTU*zAQi{gK;xcvBf{LsHJzE&>N#}~`ZXyXTN6UY!yyr zP-6rY(h6tt1uN!()i;DeB{W>+>Hu+Q?F%%}_42oo8cZsn?>Wz<4+vmE4!X~(VLUl3YF5i|rPxVaw2a1z%jqkxRic)>y z8l2Tf3@yDJUt)#vaEimSkU6O|Xv7)A2*;$}_MEw=nF{uWjWGl2FPkdHD1p*5L%D!R zK$j`RT^QkyKDvPPC~jrBOQB?W1)lumU4+gSzbGEm6cV9lW=K4myr+7`zoK0kILn zd*Fj@d4at^9v|kskU$LJ>pefCxj9lBU7(;#*~TH}uLg$GUyCaQ5f^Cv6CM*PSePIp z*huf;`$Nvt&{fRW1QBmg->4X6%M>btv%@!Yq%!wU=*| zITb@*nrMQrjD0v(m$2zN6{Pubfj{vJsQUMpU++l=cbj6T=Gv1wl~1qVKx^)JM11O< z2uO(KyH-1>8Yne{;CeW2(>U$uErt&jq2=<7COMa(T#(!rBgX%m0$SYl4&4x z3BE@>5?mqZo7iM=Tj4?*YCq@Lc1n72@C6$<7Dc1B+()Ky063x#7>6$nb-KIkCCtmanHygmBe-a0RVyMCBy;p4-%6X zf5d6)zJSmN@S`X^6mF-{h?poeCP%m`v=!*C3dvF7s>pz5Vm?r`DUS_bvbXsvD$^jz zs-Wv~igL=4Bl!xYD$b0#e3W;sy$hprkW3aa!l;l?Sx(mS6QSIPwPF%!P&xb8-|IO7 zQGjRg6R-ydDZJ1LSWVMBg0CZi!!{;E+S0#1&eLKbS|5Rs=!C$6h4q|*A=o@_NOR0> z14ZE7m(EXrOSaB-**dZ6c4{4JrtQ=;@UOjA-A-Z}D6;^HA}9|{^;sZhDH;%d{M8qR zfQTpsM2LV4hs`P>RZquJOx@l`iO2x-(%U0cxLaU(c_sm5)SKRPto#*w9pYrZ>P3G?NX%W$m?QlaFQ@XAMXujZLvA8K0Bz*GsE>w zKa=0Lu_x$zXXh%%+zw6HYmqC2FvDpmVL_1ttBU1_<)A9kR-d4}RX>#+el3Gy1s3+} zq1E-+F)`l}pog0D+te1CSk_q^Vmt{yJC3><%J>8p`X2+hWT6+IQX9=1;*KAro7hV0 zoa--VqqI^eKpl0i4Eg4iy><0`^cGZpa)wkhbr^(pVFK;=|LNAk#eDco$9hLzqZpUyaE<6=~~}+fh3i)CKH_ z#RR`*Cp6Hbmt!<){+YlHh?$PI07QdXLZOKs@Y8UW&uCmr$Z9||ZRu}qz)wb-lt`@p zNcEHXxayC`Rd`mN4nXr~;u;X{B?w*hljXVUPY)qw2&6UQp<7&+h$l_B2K-BLwTWDo z1EN2KW7HwUPy~eWfh##c_wN7z=RNvsv1EO!bVQB0WG%86LGoUbuP<4wT`pRoZ5;Cr zY8h*>yrR=4K_yeIr|Oadrst2e4GVkYRw$|R?;pKM*c)SUkecR~F%@!=%tC4lyr#|v zAJeueJ(y6J@S?{=R$itRhgyjHfE)32al2ODu9LSUd4v85-YFfy6^H)b;xUE(4FUcL z|13yt0{%_Gzj*u$%^1`N{^C|(S;ahO74jU96OAw3| zGGoCyy-Rh$$)1UkMkCA5)aGSCf9$V8I1QTvH5?F%L|=cMa&VC@D6pOF@E>*;Z3d(} zfb%c7-ERKfuM+*~MWnbPWcF7&IM=qWgx?HtZeR;U%5VPsuQ-+uIS+Z`$a*3$5=*ay zFfiTzv8=?MP1kx zPS)ln@^9JCp%8XZ$)g!Rp_W*rbR(pDVYs<5ek9c`^zncN3YheVrhsx5?c|%MK?!>h z?ekw~{9B92MC2%cJzf~tT!k_1=D&{_*)F0;7bl(zIuH3yuL_;BR;}D;77Z6Ro-mNm zX=gEj;yugIA(A*ABzIz=5|LLjXh`2j#DLW#J(ZR5&bBD5Vf3UtftTGGS{kR81@Fev zxb5e7t46oyTFn9{wUt0T5x>In2Vn~`;VgMqKyXtj+;?pvKFbi8JJUwWQgy9GIGrN~ z&k%eH2!ZOmuS)jL4M+rJ<$h8ykPQjinU6~)KF@1hJ2y!<|2!B{;l+Fc!70MI-wKjB zF1RU{w_w2ngF#zF4tFW!wu^E?EAQME47TUNr35R9T?L(|yKqneb$%lpdfs3-^t^f$ zhn{qh5$bKfI}i*;oNACi1|Z@GGq)9|3YEL?HGU&$tyRX+k( zaaqi)6~($2!_u~7h!pZ_{s@WZM1*&TK$JO9uKP%Ic{hM@0MNRNpuKAC{TPB(S6_RU z^%5Cpzwdu^QU%U27J%-uDXml7IvqjE?3ks4s!empt`+izK&EXCrUqhBU`7Ykk^y8j zwFnb+G0!N%X66D}h_jrHl?=3lkEX^15x+LaZppDZbF3KtPtahCodR;N2^V9qA?z`R z_mzL5+Gy4qM)8ctqXrIPg@v`Ew=Xn$bpO9nUmO7}hoBOO?Ew6sRdGQ#^mgr}?S!8D zRTMO#HX_*H(78jF;N9hBt%1y7ie5zdO%B)F>_~AirHtPPlL);D^r&)Ty)8{Wg|yGR z?4(Yn>&<|_v=JMvr{#T=KmP-gW>al3&7ns|)&Nr?m{#ItuI)xT?JI*<_$-LLttU8U zN);icu~D-lg|WLw%?pl+(0dI9R3x#OM|KK zaQn(=?OoG%7>zW{A|o!9^zXp@t8sR6`q$tJ-Dd3LQfrO9Cf#qS!d?lBg0y1MgyDa& zoBtS0Txpogo~)puDhwGBu)a1AX~4H9W_ugAf#W-?(==Si(O{)_#_PBjUA9f9>j z1M8Y$tPf~EJI-g{BR9~OQ4c0;r!`?m$Tr1#o<;R>G-vam)cf(Zq-#eOhMKlSl#8y) z`&%1?ZL0E7dc81wY^W>3^ZL3KxUxDjKvaeGv-EeM3S;gTQo(Sx2SjoJP32M3T4AT@ z2DZtR8K@((Ny^;KE6q?@w3W#`c{zUR;K!unD?DlR{17RW@s(#k!4_o2Qk16e;p=|< z*C5LTQ;OJk@tz`@0)m;+6t30j*@ujJGs<|uQ$3V`zC(Uv+_@lj27cXn3^jaRYJ9zV zd)RK{xf;hiw2>xkzUerX`x*?&U{uk;515S7W>IN#sBjxtVHy?^)J?0)KsDiy>l$iV zg2P+3L98I5Hg(}`s7=XeF(B}%>CkLs5enK=G_xv<;AIO^EC`e(d&18{zmi3^m3F`U3^Ked$pDw444P;Liw!U zG4~+Ohr(q@p3(*;lJ5^F*j43~QcBSDYS`Kw8KoVbq4f!sJAIX$ijjVgr8k9@yz*9T z2ZG~=?G4VEi6?V{9C4rc5d6mt6O=7>Oz1hNZrN{$gr?AZ76=sdCM!k@h}f4DtM6&N zM{A-99e(0_iDpce&6qW!8L9n}I^Ou;#Y_NN-e=0-J&xQ9@JPOdTuD#+GD<}nNLI}J zX`}j*mI_LeZK4FN8>cJX7by~j_18!cQ|aGs5j~*h#;RN5maSs1t?ZeA5rQ2n2LAdH z7b6;sXM(oaln*EnwW%&BYACBWy~TMHjy>im!9nko;XVn3ae{A+C#04@brf3 zO_n==BSEyA_DCxVgwli@=N5Kpxo5<b;QFLa18qGaz4ohAmlgi}n4Ul+#fJaaJIH zaDn}N+vqzGoQu##1!Y_8RPbfuX5;zzhlQ&6VC@<2W~hl*>but^8?4m6rE`ezuVT51CaSg{Q+E8&8S%>o`18-sKtuWr zult2TXoM(HNzL7o_d{wh%i*cHE}?^9Jn z!aQzn95Iri!Pp6FCgt6&4K8@Q>1uHOwI0M1dB{4M+FJctf^IER9)$xM7|MMpwOU1% z8I&9keu|bLGw@D60I<5M%S4*loec#igTC$%gZVU%IR+yToB@fQ1k<}rvWW$|x?m6z zOh?_9v1~2Vc2bk@|AqHjww)S670nVMYoivG^c$>)hTwRb2zma^t3HI34q{DpHk+(2 z5}~vgL7-@3SL5^sFD0O*S#F$W&&1@{?DZ-fvE0eBt+l7T77$SCqFATT?i=TH*&s|M z2itO)?4B34Op?a7;Q8rP8nBbmlL@kTeG}Gu#76~!HVg`*4JDof!b$V3k@V3Wa6Ra z=z9ngZv};GuCgmV*7aAeZDLW*7+{-4o-xS-J4J_m+li^F4WH z-?hqxi{9xC*-`i8MfoN{snY9c$hO>*XYs~NYsLBq7Fa7zzR_yxbAazW1!FJR6h(R< zL#-MPNmcfT5<*oQZW;lxc`5Mxu{tC4m}Ww_ya#%o8%YLunc&io^=g5XM#7NQ$RLY(u zUgex;6L9re32&?dHDE(-t$rt_`hvwV_y6&BHtL0kXjqq*m0pWT_A*_qkd*;%QqRQ*USNpaV7kAn9Jb_(k} zaaaY7vp0>Yvrlp{0F_(`nWJ>Xv+#7d3iN^R;5{|vgucJTmWiAUR4NZ_wyJRxTgu|=@WP9rOo?72d z+QFoX0jzOKKyXUnLd*F!aU-_#ZMN`6a)pvR+!yT$LP{ z6y>Vi$SrVHhPwN(=BhE4K9w&^pUMYUo!$di%^IVHQJ8Q7XuN2OC2gK)}Qlk1~Y06pgSrRr|7dF?8c`=-?f(K8S?e%XIx<)sI-!zf* z{@D^JkvLJ+(G?C4u_@>8Koe{~)m!}+eL>;`Q6Ry(?X>K@Q)W2f$&KoPi!P_s+1{Ez z@}NY`yV!uUz#}0cgmGYCC0mzv@li@+!thE~s=GQUH7o_=V7`+5*`DMIk~9pnYmP@W zxtlq#d|IMD8sDW`yw&~TTfn*F5MEr23W!x<<&dXiRP0{sbJlxgOE|$icS;sbukTLTG3fn!cCvR!-!ZZ>=Q%&$ z!;vN)d#l);I~gSmg469-q!ynJ@uVd-2I}1}nb+YU)5UbgljI3@EI#>f_<9kBuNQ?y$XmvvYRJk6&_tPVadzT1%krsFv8p^vpFRhGNByl(%U zE2%p98YStkns!Mz6t z)?+$5Q1E=rbIwDdgP9-DU$WTl*mk$2_Y^`T)>-g_R?SklU}XvZucHYPEh z)b`u4R4|STMClg#Aalqg4$UZifkzhWiaez#lk?RZlP+^vPkcL#&TeNBJ7XD{Cu-TF zcXu5qQlh_liW02D57s>SwkQ&*PY~4giaL|+41q;*{1;VR$toVv(D1mwFr+W7$Crq4 zP6}IViQYcGM7ENXJzoEn&E4uJ*FfMUaw#6lC3@TUme73ntl67%u3PooFvlC~Wzzh6 zSp;o0@5k)t7ies)qE{m4fDa&@X>;4yrCq>?6U^}hU8g5PVS!|g# zS@6!{Vf}|5vT0R(AE)79#30M~Y=sA(P-UC<{*CxUNxk4l;gWSbYga{jd6!(2!>?Toghw695>k;f-Z>}H3 z%cJPx@kwoqYfL#_@!ArbD&)MQ;`%_QbuUHA!|E=SJ5-kp}2{q3AAmeLsNm%@x-wwrZ% z+tfCL*6C#;vv+d<+Xdc^c!&HqiYl*;XObi8n_gi?^(V;)@&PFX$*Rp`*tK799lj>{+xE8c0hi^&!6Tx5}@l8}r}=8LxM13sfIh(^L49E&^Rx6`y70WLVjA zvT{ave_AK!Lm7F-f(}+;b2{lY<)ooM9(cPPZ%pn~HFVPJvg{PfPn(8JkPxrI^?Or@ z&QlfXTBuaNju^ih9kN|LwEkZaE!PtLLUAiRG`3FERw+?D!FQ7Ea-k9r4v@)ddc73g zl){9ou%;d-OdbQ;OsJ}gqWXkS36jB!(oPjPQO5DfS**KF#z9oec;7m5N3cGnzA2fM z5(UpAhWo7*-_~b14mRo5n_qPVy5^6GxUYrfT^w8|VNfmN8DMjc9SK#e=H0U|!hSN6 zqUiKKW|^=(M2zhWNi@2J2-Bt&U}eop4b~@FmF>Y7U7^7wpvkjJ(n6K(VYj?>g;S?y z)!*DV>^`ozd5HDAwQ=NR-^gwFPP4YoA3Bx(d$SC0CaQS5v|g+tchhWTd-Nosw6Y|O zebXJAr_mi^)kN~i)^VgFB|`Kn!1uEcuOeRwQ$Rvam=snDggDvKP_m?QAWC>o*u9m& z;Pvc5hL_m}CnR#9b zON9bE0cxk2%7gw+o!)sb6H_pd++XV4{Ev~O-Wt8Do*Wo-N2}c(ZN0=wLnBhWT*TC2 zZg63yFFe^texAv`$h?dx;mbYh)jGZRkTfj^Bk=a+se1Ea6`7?t3NYVOwSc46P6bN2 z2>7z*dIAIS6lLrCidK%0J(1hNRk!k%E@#AV)t|Jn3vt;6by0a2U8+g6SAs3^{skHB zde&45Cs?y4lGP_MW!f(D8cKVgNHJ4S@0}8C8{EVK$zQmz?v~lI$wi@0Ad1gLk+nq5 z+4kO9BL(wE$trHGj!ypd$&wr1TP??Z$XucNJ5nOgUTC=%)i`Gi+WI*$I63i7&cq1d zL?WrqQIEwKj0>qz4Uxnum5t4*Xzkr9MeYK-vyOOc-jk6DvI|GSP-w;U@I4P=%-}0g z|5A)FCeIb)#X(^n%K^h{Wg=6abOVxY@eLka|3^qVnUC>-v9*qGaPT5Ckcn8u`xj5f z(9A};N3ofp?!N%TupJfFIhgLLGwjHe)k!8Y#dhvof4uR4cw7v9LN2u%hqZGWz=)`Dscv*x;Bw;{O^kH-a>G6}v_~Ag37fV^! zB;zwC#Dy{q{{U=*huyayr;P{F)1)Q^`sPxi`6g>Hvjodzv2QH!TbBZo^Sq72kwV6&G?!VX-Qk`k^e!L4!iX=8pm_4U0di8$UqY_b1EuT>{0W6+Z1U z_tLGi4fxA|e5SN~v4;FFQ*6kwUG_Im1p4(A|0VP+1Vv`-HQjM0_NTukxIG0efITgT zcQY+UU8v8$!YF2(jt=@;#8sMAxyM^`792r#D~{_85ZzKIUVP8aYa@m)-S#bJ==W9|b74k2oS31S{Q*YyLWR~`vhIwEt&m8cI7e+R*f zPEBPuX?yZ5zVhU<7uXU?=e)I4LY;5;mE7JSp^d4@?D4=pO0y1zOOwR^v$S6UZqb7y z56N_2swqhwxiPDK-oVl+RPc~ga2#HM!KG8Cs_*LM#?+*Rq*Em--CJFQz_5jak`S}` z^QWj&@^G)4c;JdMS?8m|=Vg&k;94LDmTXrAHe7OhLnv9pwL?uAg_Jv~kGMw4lZr8` zBU4Ak5KE#00!6m5&v3iyD-{e_DR;F=7(@hkXXQ&w=Kx-QGjyhwi+WNydy8uT1&lWy zJt^aTojxwGq~cuWyWxA~sKMYmS+Mq5ZEXM74^U&F6RpKk5bdC3ZQU5PT3$?#mlqNY zO-4R3C2@JD3eVKBhll+;WZfwzifO$)tzPyI?ZiPUP~`DqwQDz40=s->Qg*ilBjodH z@fI;>;_{z5>pH|v%f|98{(a&rNF~t?CRVY!{YRX7g~=lp0ob0Wuurh4^vu} zS}_+{Xw4SG)W5TSZ!)RE;_cGo9J{n=XPjaB+h6^QYWF(T=Id(r>JYI`CaJS>q|MTH z+bn${)USMmZJ64}5337P%~Gi=ldu||XC@Cpaz!5dOSvHgX=VS#6U+Gr;&qB7( zXb&Fp-8_Q*Yq?ha;zN4Vw2#?LaAS1S^!#s-0MMsv^~h@c%-!Caf5?!W`8Xsj(FV)hoyTXg-=OhE`zD;w=(tqqDysJ3ozD zApEpP6TY!n{X-Le&wtHN@BK2yPgFba82PES7k+xb|1t8@y3BurpXzk2$Ied=QC{3v zz3>xc#R%7tR28FzzTqS`| z5?bSpOFuR&2?OAr{($Q13#fCQO_dl-s(RPt9<2yxHQ_dI%};?8nVxyt1UGf5XkE&w ztLl>5y0;6oXetH4cbt5yk?w1VhZ}qC7_fFv@zWFiX!GMhQaQuN}367|^dYu1Apd^$G`~pdH zS=Q>6nlI!yGU1->>ggR&QPw8Au?73trsRzkVks2)Rwq$C8*ZCgkh$X4WukJ4q9*zY zJUK6k;1}I(wk`j*$Y$+NF}ObjpawLKHMA$SsX9bK2V8GgqXn8CEK`T4^1L*jJ-36n*tmQYynbxEb{hxClcp*ptqs=nkjWWmI{WG$~G z9%b(lWPD;ngdE_sZa_MO{JyRMq1w#vWz`;y z)qM?oT4WciIFFRDg9B%msMpszA%4RSWT!_Kv6w6Anc3@_0HG5>-gyNKduVZs01!vf+nd`xtNaUxhI=JYiD5>j=(}4)es@rtiv= zx0paqb4X6v+Fh8Ee&Ht)`mdLtE&e(#cbg}T#!}qO(>)yh@{0cv4AKU_ScDXkbESE6 zze`;@7iC|xS@pZ&wFr)~`=vNmSVN73LozsA_{=stv5+pwp5=d7r_O3VEgYUh8TF6j z4iYzMj(nhQ9X3h-x~w(Rc}?zu$Qo1$;i^J2JJY^Of0$RT9KI!{eDf>&B9S%bwJ-th za&?)=V4}7o9~_Vi`&5A`OL@FO2WD0bwA=r`r}yzpw_m}G=n?g89z@m%Z(+W2e37(X zs!kNwpr&$gv(MTh0*}-9l5S1weEy;gGznA==X3InwMN*r*f!t6${F8=VMx`v_lVf7 z`t%F(Yo3(Bc9&4!rspVGC8Mw(`@|)sqv;Jh2KdUc)`fPr6sv!Igl(cpY}paO!)Vfk z|JK%I>T47GtA(^3`YMr$j$tdar@qN88J=CIZwSx>=ziiE&%tgG&e&80jBv6^*rKWB~dIWZNhveQDn6 zmw-a1!jdTu_fmft5 zHS4X4Z;+bGZGG1K_0nnT&XceYOI4NpOjEb=V{Mm3pL19@*_L*NeMNVvO`nl9nbQj~4(Kv$9NJsGB{Zgz%J%o8iZBfAX z9yWkchEeyGXu14;iRISX<)%_%3j82-eO32nMzpT`?J}%JELUF#JX1`LYXmf46+82b zQGi{vUiE2E*qgRb;#>BYLJ>`mG=~Hvxjvk+a76f)x9UIYlP~g(O?u(QE*2*6HqIrV zfW|ubQBvT2j8$Gj=qakyyx?2!-EuN}DTfZfWChZQ{||258@@-rUzxc;pU;WC9AScvM0CFMxdj4g&5YY2(9CnP205j{qa}DK!+TFIT8WLXQvb*UrQy^|)J`eaAoaH*N}dvgKoUtWVg%q@!8he~ z0&a)`$EDwvHPcsF5O!b9YaI3_K7lS9c{rTvV?<>gW{1QT4I|raA^1rNKF=2h(Z*)< zSR0`Z{ub+%tha98Mk`ij>y*-|>QtzUd7tt+bjaGYkd1*Ji`Cz&LxDEa%F*h-k^0$2 zMOtpDT!5s0_RytHRrM@d(2`KN$k#Lm^jUB8N{*a{%_<_jb0F}EEsUaGWX(URfU$P` z-S3VQPjab5Ke#3OK|iWLlwuvK|M;|&Ln8Z9VzCh4Xt-%uKX3K-Wr$zy3C~R$IZ%Ia zplPkVk+LRJy|ruChxmxMvYl>AGg~1BWNq>0ZV9K>5lR38x}JG`g3m>oJ&O-&$K6@s zoYRBP%YlUX8(DL0m!uas7rfQ&kSsj+^x*q@L-`%e$K#nEG(`I6EpX_4-I*km((g%er?CC3898 zCnH#&8OrU*+7WoWd3Z_j6qz57ONMfiP_r(x7;mZw_(k$83wL)mJ)n^vxg)-p430KZ z$62Kv!TQrj9tsz91lv!Wf1Y({3Oe?HAV<7Sdv<8dY(AikaO&M57PpJqQnt?uUGA)R zn~aaD`I^@vQR>;_Ki!x|RwWs=;JmDvsTF5fpTYb$ER$%H#?#@+EpvqRKVy8%BokPh zlqD>Ogc)@!2|$qJSCzU4DTJD0bXqgggY|PlTsMr6fu5Jm@Ce^DBAl1OAP?s;-aRH> zCs)gLbl{Z81?rL%#`+8iePqPTV zp*$iFS~)N|zb%yOmi;4JE6!6xHfot?;lplur3v|U|>c0lMf50zB)2*y-(k$FPo**6fm6l8jz^=8F!$k*`Y8ERY|;s_1! zW>;}!^qJ!i@JS482pw^Rz^MbQt_nYIQ=YFFex`~8qAKvS`6w0qcuw%6Ip~s5WvbeI z1`Yeu!_zotffeas6Z9e=CpG-75#d`2xg}fk%5ql-ct?Zal&O)?YO%|v;P!{y z9dI_T_uQT+8p@SDC81nR&fK)6&@zAAQfQe!ekrufzj!IM%xC9mS}1>l*C({f&xT7i z_413IC;X1!P4W05kGJ|`&6B~Zr?Jb^*yU;L z@-%jN8oNBhtqYz8x4d@wo}J`Lk_Lr=nIhbpXSg-ba4U{bs6hDJhk9VjQ9nMGCgIkl zc^bVujb5HcFHfVFXV62ykPOUVm?!)x80Kl5`5l2JsF9qJRxwIglD#he_NFrhugVU? z1ZpEvPuxn(XMXB29C{YKV!wTux7y=WqBxO83X0y`K22Hj8Or_5isQw85`L}Sa1?$` zv+5iC8s!qWEV#h!vV82P3Y@}hN1Iu`spUx}YUk|NBPMW}?fuNw#A;(Ran=QaiCGId z$7&V56{_@EpRP{A9;n4dI@v8jJ>HtLQL?;Y{IGm#eUb$k+r0N7xPojtby@wJ4)epg z_Geg=JmYWm-LlR!JZ%cTMn+*N4bQ$h+BA*bGMnXKOeuBaRh+ow8o$7I%Oufmg&fdB zu+ebyJ$tF9;jk!CCni=vXG?*tdZ9}&+dnIz0gDsBD}Cd^DR>@ch~3n$N@;3F>v(8I zN-qjzEug?)G1Devil$AIrfIU`Bq5A6`^!$%20X>mT5YGtmuaBA)qA1;QhKejjrbUh z%?q+F4xBE47PW`{Y12wsC019MZyEHS&}bdi>chZpQP&A@0p{+$@%g@6m;sotd@^fp zEmkLV^I18@bDDbQW2OWW?eCd=b+pEqg4Xucg1Grok&vBSiM3g;d8NN>3%tU z`8Mt_-Aclb)e0vREh7Z$E>T2#aSFIX%m`4S{*|IOIgtgm>0d2s)Bm{WO%{gpnOUya zn_B8Pw5=N*8R8fmiTK+pI+7)5bR?VUP>>uEl|Mv0bq|ZStM$Jun$rIYni7xRo?8E_ zqWVN*%JD@Qo@Uy`9A#QD7JlL3i^b*@eXsX-U5`B&<2 zzK6vC@UIdB07oMRfPb|Z04#y$rOTpZ9^26*HRZXO_Jf{8)cDsUrC20K2KzT7gKZaP zgTIb$!a*rBK^odBaf>3HS>BZJtDOkvrT*Qb{rxYC_V>Rc+8<M^ zxM`ypvNM*2?_K~$q8f@GWD_4g1OIYna2KfW9Eu|ODb1lijQvyeV0gA@iGD&HqIs}y z*cym^Q=sje0&U;069PgNu(_cvR4_~ooW_c;p~=3s4)m~ZiXIgEs6)D^FTK+p?Syb* zGI_MgluC~Y;R>{6Qy`WNu-6u7k{Pc26-~!PT+L|dqismCl3$lfvh(a!l zLDM=Y3bN?I7`hb)9dv6>mJvF$Rwy|?13V!kc={g}JRu`^LPqd}jNl0w!4ooqXOxWj zYyW#Pf+}PLRmcdQLdJsZ+JYzDehVg@zZg+*9x68}pxs|;vN+C8Ejxq)y> zh-14%4~r{5&K&N>7H&f)(A%iLEI&rEPVhU!)ATP<$;`I|S*$3KEzrnfMS(0OuGm14dhGp9^Em@L3zDm5i)su2mZT)@a#byhH?2c-~5Jf8`?m_lP+)!xzfi zEu51__%bsL!k3w0?A4R0eZo0;N`y^bOE}+yuo)Y^yj9gbZg>ZSSw3$Si8Jw%4n&Uo zk{(13d-Xzj9U^s*PxPmoJTXi%IOs3nlXSM<{1O^l!`O%M8f3x9G1z;aGr?F z;Y~&swrP#5Pv}92o6qlaw(Fbz@MJL)tNx_h{$QXq%1n_N*1wJaV>bR|7&=D$_2~Kc z@rOJ;cY&Tl=4HT{^sZo9b9VQA5tTpJ#q0+WKFo?dOo=Yk>lYu*;c}#QBDUhyl==SF zbgT;FKinXfh{R_f#e`-4e}qGgT}^3AZJu#BqZ1 z=fsrLua1jDw$n%R1xr~L`@4^YU|BnbfEqEQ;H3luCUww@3lTel^u67qJsV2XCJNZqvE@eeZ)O>U03*s-0G3n;$b5W z{_Mb@5+&=f+PN7Rrz4hAzxYV*b-JTBS$H$~!mb+dvsk_}%;Nn8lL%32Mek6y^Zv@C z^pA-fN)PnWz{`Hqcn&{We?-#-aKH6V{0#qOaEwO^5esA~J zMLqXduk_aNw=(_({;tg*6@Qb%KG=T3f7pH${}cW@{7?K3+t>KNYvaGSOZOi${^wMT zl07VaH1#Cx4&gHL7zD#H(zkARu>HjO-3&>-XTtG`HGKc3ejG$W8gNOZc8Q&XsK=9P z$)9JXa0vCV!0}>!4-OIU@1DhZ^jFKyX&%kGx&hr2jZlg1r#?3Ml|rb%mRXy$#5%+* z-$*Qz-DJDEDo>=-9qnDElOAvX4L&LVEiYDVB+{{zf|za?Y0H@ z-P&a(uj&^##fS<#GM+9&U1Y)lWWppjA|X2VzeN5y`M={IIp?H1+xY(%|F~seVjr=` zS}xJ~6{7UL>j(NCd(7dcA6+87zuA;au)U=J{!4jt+B)gC*Rwr^qgm!|MKtw zp8p6R8=hgE;OP;6+d@+qB>lT~frAezX?&%j!PXG#R=2%5xx^D%C|i`r4+-=cf2$i~ zribiwRh4P3KnCrwCoF4Y#fg^eQ)k2+Ji^Y1I;!wxZ47*9Qr2`nfam{z`z#pt-ad&N zBwzW`0#9u|S>!AHTrr-5*-@{LSp@R*2J~!$I+Rp+tNV%TeWv0 zsMJr)67>#g$RRpTFw+Q#KUdoE1rH6V$Os-9SaC}5P-?}AoWfHvBzWjl$sr{u3&gB` z%C*N_$3bt8_w=f3hV7L;0!3CDbWysvD?; zg(KM$B>=N=a5%uCpN=uoW1ojehb~z5QDDoojxuC zd*G7r;taW1oT~r&_#0ka!QY0(Y5bLLYFM1kl?He5u;|sC=+$-hRcLV;SE0o>@>dQl zSv;4E@Zx3qVYU8StN-4`Ul^xh@p3Lqy(_sAI)@go(l1j(iyx7T`i8};?LtCr;D`A{ z;*@7N>2Na|^36!eHzNf{x=s(#ke{ZZcldCav=qv}PBUwn#Jnz?6Ux7FOa5GVwL*iD zzrg(5E0Pq<3mTSG$s7J{SyC-O4NGd}hksrl+2fYn#g%ZzlI2`9 zELq84`DY~u>kbCnht8kieWGgTso!&PK*?5qaIOBF)U#~tJDr@|gwgM>PpU{Kq`*C} zSoReU;_@|LF^96Oq!uF+)7V4mx`&T9@IU{Oy8P3RjMOTz&M!qJ5vfSD=|reOxMKS9 zxNt?s(6FV1p5LTcqeCtNPT2XH(jZEU;D^?Vb4XA~nrokRiMnYwQFZyAr1FelNh*N^ zLwC|qdJXyj>8f9!U7k^_`tpobd!`%l0!Zf%y@-S#)2&iFr0=#aio z!}&U-?{w?aDJAO9J9NbjI#w%jQ#1L6Oc-CZNtnf&To}%u-YIR>WLAks%;F&nNGFU- z`AO0@qw}Gvg*Uh=u237_J(JCEWRDyRTb3<*lVdA0--_D|8oZ@+!Lr=o9(8hF;(E-Qa5wCvA$|jvW5|mMY`-! zYU|Hf_etS%gd~SmBF7~X$a4h|VH^s9hR0#(pju$QeeRtoc_h`db+zJFRcbuE%= zc4#i{9S@BpSOdB}CI?z1^(CohKWl4!(<$UiF7(JE(!raDmOU>OkGN+=QrTYq*j7+q zs;Bq~_?i!mCCGKhOKNr|=a}dm3GBb~x3k70+pnJFYZvQyg{07X>75!MTQf}|n}o>2 zV2kKumJgX!4dq*jKxvb$i6ngP=#!+*-hYIAIjK_lCZV?!?rZJbb*PHuT_?$z5gnXw z!i=>fuZ&`=;8E9#%YcL$1W>5ZHY8y9*#&6?eBb|A)@}pEu#TCwxq^_ zlo*JwtrK<#ZAb$v7-?0C*I#c9EDqOrcu=f?&qOuuew@!s0$Y)5Sr9yTO1Bc8>)!wGC7L6{5bo`_dhujful_~ z$!6a2q$yjn$;zZVjLN2z#&y=YKtxZGY=hhz#n8>t^>WK%s11dN#RkDmh}y|Do^`ah9=y?$u2 zD`ks8fnAPLN}Yd5LKz66w0wplhdnZ}2N&XgkxBecGc6!7gA%cvhnh z&NX03AirP50hA0tvX-qgR~1B?jH!;;co$nIZoKRDrBB#)L&h9J+Lo)|R~NDoFsWjk zY{mJxzDceaDK}w#lTtA}Sh?KA4A~1;mK7clDg5JK#4X7Y8&&imL1X?0)zX`;)qCQ- z)gop@R@TaT_}3lrF;t%BlZ|Di&DBkkyfWX%1BRJrT4Y|ToYj%{ONx~;q|(S|)z2Cb z+~^@EV5!gh^rVRQ>D(jrZ+ixAy(~;n6TxHt+Hg^=M2O9}AECO;X5^hL5Hjvosyn%m z-%Hz%M5?Z@+8YjE2LnKi74mCNw`tHj*3S@f=wom+Vf6Vp!b=S`G92_XzqTvYy9c3C zewx>(4~h{&RmTXWzjJ6c*{w=CpcPxO*^T#gu?+|%=Wqv>yAjaq!$n);?j4E-wm3|b zKvAO~)O(Mg;o9%_BvlM7XVYUAWknv@IdkJbu*1zB)8u&D!-1Eb*< z&VYjUD?z_(+$2%bmpj@oAF|?X1Xi%SWl}p9P~v zaAtqG53?tfLOhMk>ht8NP&p8i5HfT`R-R-glH{xmZ;~YZ;ng$5Zh_ZB<8apo^W41y z6x@~^8ZH_QK!BqMH91_=q~ww4(%yKdz0}aS*>-~ta%TSOTio&poiVLs%>Ggg$MZ^% zZ|%iu??2Ci%5sR8Ni}eiNi~4=B@>AL$fzG=AOQ)`&17DY{6Z4Do-+u&_F%f}t!QcG zu4!t(ueHGDi!_T9Q6f|2FttW9{iLeXF5q+G|Jk<8>*K>k8B?hA4V_0R8J6WDo*9TIBdS0;nD&i#|1A&@;_T#L zjiSup`|Ty_eAIQ-^_$UKs}PleRfJnN_#YRpiKbGhGk06%NA1GGVA9Sf2P7t&4N^Y; zs>s}lmVawZGWyp#VzDSwU3vhqs2A(3tKAGnZ;dEp$sRrPh0cBay(m4#Vepz{3q@=cdLpGf@2ER@DP^WDOZIF?-rRInHO;We*p2V?O zbGVkI+;1 z%$$Uxl^+T_?=2~Y017Th^WB_mc_MRtQ^WxJ=SbPcP%Y`k&a=XEX*!m1EX_*DIOe@m zMhjWTe*TP6P}|h{!TNa8p_cBF!mQSSx4ci;&KG`?By}&8x^?$qA%=7ckFfsBTuD=k zLm0{DqR{KW-wLXB;xl%^#3erK0*0KF1sKO0F!HnX0cGBrn}yqMags&$98B;&*=5zI z)t`yf9c>ljfUQ@jGCj;ZP_Glfq?XNDMgqYdY8DW&>35BYS9Q%{>A}>fjrN9gD4mqEIdyq;Yxk%z-Yt7RWX6WwC0lcqPh zOz_w+9^ik*b4h8iy|4GquhX-*%sS4;SH{*I!X-0nTDjTZH``mi9<<6wlr6uHqnJq~ zx?18GyG+I$d9XuO-K&eQvWqW1O7SVC_-ecO)T0#tswuwKE`It^ihl-C_V>-HD6P7_ zeXl^hxq)mi{A=*lNYz$^>XS6fGa&(*}Q_*au%N%7{J*c-u?xO}U~93B4}%M^MPw#~ZZGo9$jjwdcj z4Zh>`R=)=r!9z)bVPzBDWQg3MGWQ*kaAcjU_0Us>QGUL$wTW2xkCzIWxUL`Z6jw|o4Ta;IG&8uBa z;&k=$LRyj+rSigSMuONz*!+9lNop@3id?t~NTk@D;S{r@eb2NZ68@EJyB+kZj>H|< zScuzzwc+X)>64{1)0V=<-w+p-u`fDj$ub9%njpgCy)`hEt2)A|T=|7qI)kmr>>e1W zmds&FnqMdzEh2%NI0Bs6YY8DPQM(7mPYMG^ofKBElK?hq#J-e#JA?+C zk(4+sEFypS-DsG3ZZx>J=2DuEYBIxCTAzu$ktkw06kGkMUgnW>2`5_?tJF4fI?3H; zxx3_Z?sR9chs>IxZdir^csAK%bk^@&cb31cVrXZ3>s88%+?%0-mAhFy-^?DxzFGbk zu)6a3VrRvvovp6e7nII=g(^E)U$FvNMZ3M#e-;l^0uU#4&ctqi5jmgWXUX&_{ZDFT zNi$^4*k={(3Ha=@UOaN_TLkOYob$5Rl5<|NJ%(HTZ^d;O*~tGCD_e5Q z4%%P!D|*rGt=TMwG4?6R8D^!9_kd+l+xSAUEjuNLH|O25@x>}68!U6$A)Fq`oVJiT z?G)y;IY;W>@eJHK>6v^g4jxJg;ATyl@B`9NJdu+$;d=qnW91}IxKSTN&_^F41~*+L zi__2K@P$rL;bj}>J%|w*y5p=}Pq&GrO3vzAG3?^L0gfX}x;Q^6kS52Hbxn`*D0nD2 zFkDyZty$p|ztRjJirk}%xC55}@@C1!`)`4KZFoUW)6aAjeFDW+(v$0{;%R!pm6gnq zTlH@33F6GQrAZej2fh+K@ak6QwIJrBXRl zC@YzcMCKjK*8{Dr`i}>4ie<3j0>dA1%#q%iIieBw{&rHl&rGele*NAC|4ML>xt;%E z=Bc5|RSo_}SS}jDnnWfnszI|x(_Kr+OxJ}F36dJNtoN5 zI^B*9{~Gts+raxx&&%s=D!3sDoo8FsF%_rv+r%!$wKlCoY}E9pidPA-$J`j}hul!| zyVFW3$4FuaC)pRueWAc!k_oH1mrJZty0zVESJTUoz(sq#PqZF*^OXI;_dV*`Z{t67 zFER6tl!hddw)*!fmOIb_|ZmS~%uDMzu&dgDlhJtMp2mAd<{3@wcGZN?hxr~dIe=3V8^ z;H9pL324HF*8)s-y0KPA8Y^|1TD!+_>Uto|&*c-x>lAs+sD8R`%zky=)lKAM-i^51 zSxBeLej6MHgKg83Z)fo>&R{dqpc6DTWTv6^U8ehA$Z?rGWBnTW!{^OG+|1k*S zD$CCb?Dp2k=4_p}B4*-h{kV#O6=O-+@aVx>Upg~&-LRjpAd#TF7km8?EB`vZA-RkZ zO7?2t3;FBxF_W7+C%Vs{V`XRVcV!3qasV0ecIz^!iV4+9^*!KUH==dhia@ z=k)-z?m9y!_wX1_XGh`II8ABg|^uobUv%R4>ZyTD$1WAZYk5Ro*?pJAUKj!`Qd}*F?MTaq!JfGvguveCu`^ zd^gA8`-Z?h{d)fdyKhbTgcHXbANusXjI$e=}x~a zo#|Vb`RZ~QI7Xng-$r=aLYqO^;Ma27AS*rqq&iDawB(?Rc?ung6bM$II|V0Ck;FOM6a^0d+$nPs^OdLDyDCRE_ zsL(<^f&4dk>YIOz@|3op3#Y}gknvL4{G&Zontzn&cJXD6dCu_9-Z+nyW*+Udih8Vy zS~%1P8wY=V(bn#CKZ0egR{ZN$%b4&ugg;XVFBG-?WpK4|l&zhsSy}_4LDJ4L+r7r3 zxV2p%5(+0kB3TC#-Dg)-(n77SOnc;FE!_SkwXpwoygI6?NLdKt&d)fSUto6oMFGBq5|Mog+Z(q1F=bupK&iYtQ~WL?x3*5$l;`e&)n`^3hj zss0CN{4Hte#!(q{O?|yjG*-Qx#AENo#_m3;O}BKf6R~QRd@rzW$q3g7AqYJ1si#wt z$w;t9cgc2AtPN*Lt-6lV0q>TY9fDu;AoJSXCYf5!jh%XN`+jCvT~3x*rq_Q^;Z)FX zOO0G4RaK_izB+I9{VbN5eqY7XVc7$C3d+is{eq~C`&eaq)x46ad|0@MBp)K8c34Ga}&I6g3DV|#nl17ua)j2?Sa-ne5_f9wEmG>GStCwGAT_9 zhlQlri_#Y+U?#Gig$kK0`^rbyj~+qC(^ZWsWf!cXnYZU9g6(SNtz>NOYsy7ComEqx zI(`PT$E|AAiPFP?@5m#UdDN7q9~C?0y)}<8zO1~Aa9Bo(87u0g>H7PY6LjIzJHLM1 zyk4Q}@>Z8qgJB*Prd;#|2Q${RQ(HJJ{m5LEPLccKvc_MmNK!9nz7Co-EL_pY>5JZh zrexn$U%UIPB*GIZ9;|Hl5v7*LB$v4VHVM)+BPpbhufD#CDATYEr(y%I&17oArH6ST zR3vwiO~dvf4hj9tiL{j{MF9nD284 zkOG)J5a6rN)8Q4zVd|Rh{*UrNXV)*meU#&%^;6 z(UQrG+B|eXY}EQ+j*Z&>eAkJP`!SGcMiX+&8@x-XNWoWS$z_d<83V@!4O(SL+2%8!mY>iX>6_3R z>6g$Nsi=9-(*lPGKlxCky|?<|v!m=)agvCS>;mF`uF4$^RRh@)J_3e^_yB`=og zo_=b9rW*IF^!=aAJtL$3PD4dqQE<-=lSO(4r`wc)8c|PL!hI8biybzVQ;z zv{EC>nc8f)u4joi`dMhFJpe|&trprQNW8(6FmQy!BY-cvL7x=@d$@`lY9{c+Sa9M z4wv}3HWjJ?uGeg+``J8s6=OA?M;ist1iUVk64@~>eu5H4q?XuqJghY*cF^I5qqA7) zTv$xUu&Uc5jSiQ2t9Q~*A_e+gp*d~!0mEsp!fEojmGu$$;1ADWX>C%?G* z6n)e#w9OQ%Hif=8s0%$op|A;z=gSA-bCSIFvwYr~+xW~%UZ=&TwgSYVoRvfdt&MIY z>giyXgWOA#FHQ=aAuEtMNr6*k1u`c&a6)i{2(w6qN0uUU64&3nHN$0y6zXmht4iH- ziVTqsE@dTT2w;T6GIpW{h%rmlcUQc}5DTQ0Wx$MO3kZ5EYmvw|(H(|U7#>n%Y&aP< zUKnsh-u=~QC0Q%lC}TcAp!YUpENvt_^H!I^vYr`0%seoyT;*{F%jlj5OA6=b8Xu<_ zEWu5knd91e>WYB*e7x!mrTle_kdGa$6lsve*`N{MiD*^cY*eB`_y2{x_t=b+Hl~D3Qqcf5OPo6M*DrkIwkB{x8b-!H&iV z%21OiY9F3M2DnZ#G@%0~|Dxv(h%$!mfwCJl&_XbkesY|Az4{i1MQ*y|80D#9j$gmQ zvDh_o_?xyJ8eDT}0aHUP0?QOxL=j`h95JQyo+O0)!9fyBS6Zj}-% zVY2-TtcOx@Tz;icE`ekI zEG5>)X!(E95)MCDQX-BEtqt5~6C`JI!(q8ksPmih#lx$9>XdjbTEgMNi=;&7vGwTV zy^O8j{-kI6T5GUKQA?VxEW9?+o-?{ua4nt60?Ym~WqM315Y?=MUrZy3KsL5GXQ0c86~VzT<3qOM##i}+5%#Xs(ui~Bzb9pbn+By>rj)CcQ$ zV)#jLF`EC{M;(6ZrekN^-&@BD1?04)U(%ApNz=F%PCDiD&Ybi;XR6s(G9;&!sO8W z`m6Q5^J~)eVq8dvsx#XX#qo(ldKbt0@9V95B^o?ta2j!}V(h!l7stLG<&HRB22qMt zi@8S}C;#Xe&5d|2J(nX5ZNH&oL!2Wfebi$p1E^SS!D(Xn^4y;J@}|Gj-*J5TiS&O0 z-LI4qo#ou~e|7lM_(>D=*oJ$1>p1Bu;mdyTg2R_j(W>xe@YBwGx$6m9kCSjyy1@5W zDG?{(&Z9&(9FvX-pgHD;Pxj6+JFbnIqivr6PN62MR^a;v_s%h!m-U8tcO26ZrZpIZ=+;_;I3)c{DYSW4aOH_ubta;)xt10=>A*y+Yh(T1C#F@+ikVctaw` z)S7!Z=ApoUz%kG5?4&Z&Xcs$iKxdV?l7hXe%)jP$Rhc6ZS4UNuuRIEw;ux(&$d7cE6ApuaKAjBW|z+H)K+e zFRWYBGbSJR;)>0X-%hUBYxuO+;WIZce)t#=TZj%f!v}%glau|Ye}ygLhR;dDCJDnQ zASLwh(WKGRMz#LFm*Mkns2BQbqKalemzJF2^Y&_nkC`X@?!(R_sO>KR5N8gy2|x)T zz9=Q)MD>*jluB6^N*Yzx6&$&-#`OQ^8qX0YoCBCh}{qPI#-IK~jr@ zc*obZgLuK)#&3M3?Gj#V9^do_tg)@?!*{hy_&0AGzwtSCp&y$udTkJ*uO2L58bV+DV)-m!weSnpWr z;wJt*bwx*dH%8`FclN@HaVzy#=wUA7MxD_|%NQB*#j0$!mNDSI@CQ+^FiZBhguAZV z8&BSv=bW($mo;h|`@Yjy0$a0Bo3yf4Z^q{ppE~37Rr;ZaMX&>Zf+fDKq0^#&{-3!| zVE&gWf$-_x?R(Xdp7Bp~)ICJS4jWJ9+TpvcK<)THjKXtEFJ1Z9-uTWehyAHkcx#_} z>3#gQsdfiwuWiEO*z_@)^}cx1uwIUERpMe;!n~oTre~DmgD-B3k#uTG97!LT>5%kK zH})dA4KY`abk9&A(Eq?NB}ER)ly5{`fEq*cEjs8R`=X7iL`!{)*M>jAnaoV#K`wLi>zA#!ik*;oD`414+SAX zpgBFVMmRGZu7XphOe60F8+N-3yNF6OyX}4C=S^XUt( zcC3VHoU$7%H(>G1>_{8CDE zX0M?udtt9Zcl6v-o&AziXwRX4AFgc%d;Xoy43;in#Epw|IxT)&)XIGV;P3yACvnVk z10@{hVe;~9HVti z{gHnP#~2;s{-z_4hL+iLFd6N(g?Lok(7&k*&*Xj(KWjJI=1s)bQD^O;-_p5peA8dZ zlhFO&l@jrW6k|lav!WNid3jN9J><;VPopJ=V_t&9qBnlAw==smJxuFWF>UxgVTJ_w z8l*&RtV97Nx?zveSX$c8bLXnw1j{z{K{4{fh{sgG>5Uay7WRT@Cs9(@p&7t1hH>v` zQL@TBH=?AuBvF*SZtf8!pIqOID2bnQjHvIz9A~`Ol{xAWGKM+wdKM}-{)VoNV~!T- z>V(dpBqcfvm1lp^3v;Zk?4{52xRI$sGEC<%#}l+_6XdoxJM+hLzXpIfaq^r16sKm# zcLDjQ@G2odl+|f_0_o$25h>qVNPL3)%CjW|#jN^{&(yrD&X+2JKe60(7cS(sj(UD4tZdl=St=sUB zT=8)4eDKH>QPHvM_1;Zdw<@ai=Ql3}+FD^8ZMVvahE zmkfh9bfNt~rfi*Q|9hl`q5VxnEA(J)O#LN27f1USr6&_;KUzw3mJEOTX)m;Y=+<7k zBq|vcEjhGb&b2KWuK8zY^8fWA0Ei?1d0jvZONlu0528dj7}H_z)C|HKK{`Bdz%?RzV1J{uC<8F8P{ zcbdoE|7CAd#!R$x3ysDpf3>HH_BrC?X(sUzOyy=s6C$UBh8xYJdZfMtrao{K3is~? z!}z)P3o#16@>v{(PoC^h_`I3D$SE`TzHx0A+Fmvo+Q!Yj`y;W8bn1nwkN+Gh#%*^P zD^yOP>V1^xk*X&Ij+LrcQ?Wx;FV|Xn#HhL+V}#e5s=kMgPSqPp1|z!c{+Cf6W+PKb zUus9t)5xA^?uNXZqq_n-=hq<9ksM>XV>1F}kmNSfc{oEeTWekqoK#+Jj^HetMu_At z^PUhwl7I*IE(*3EPbSYzp_!g$&VCE|Jyn&XU4auw2{8~ZdZ=*+hr>c{#|<@I!g3m(Bh4AQ@a0mNjMaYfr>L-dsg&@ys1N#o$OeOb z^k5K@STjeEC`x^`o?&)<<6e%_m2{9~x?rc~R-svgU$$ECv)laWU6X1fmXlTFqq`5h zMkbe~{>GutRlV)WJTPEuRplsGZBb*u9rSNbW*ZqBJl9+PJ!YjzXS903$qKhk4gD=l zORg$O8Qf0pOi6Uv_buU|c6g^o=W`5@Q+2fAkYIb7w}u>8bbWSQMy|Fr#9n^(A3B&+ zSKLh0RLU-?He<|wlCTTdk}Ta*|4uSVZNlyW^&ci@ZS@ws5}MJec38FEOK^*p^iGeaN4>#dfSf4WH#rme?tS#Px=R-xUWRv=a z6&NA;S%8njRT80-LySkOPbCjek%rITo)fHdhh#XkXB7b-4XKUa{)9wvoa!!nXEx9y zI{z7RV^lW?Q)P)-DK$=>IOaubVK!*jzfBh3uzS1!)*c0HtQE*0i?Gve02k{v0qi36 zO{&QYFLF~w*38zxix3w4Z~60;WE3R(a0UYA^q#>WUpU`Oug|-}0AEuGjRhmuda4LW zwyv|;(@{i5;chS~QLjC9C3(_cI%I0$I}c6s(N}tCw4_-5&J^w`pHW=CJ~r*9u|b!l zL}Uu}8I99Voq50L8c#7DAR1Gh`IO$06s&A>Rh%X%v-gqnC@!;I-=Cm0=#+&I;M}@! znil3a*J=-|OpU+GV_TU~=(!&=@Mg3FoaE^IT0&;b6Rm^ojpQ4SLt-m zMjf0;nl;%Z9CwJcyd|}5qZ)$Ilpr-$nySfi`$!YpuU*O;2SiFd5c}hRsF?nr0RSIkl40p|LkMru<$B1_Bt2fanUqc5>hlmIamsl2Yqm0`ztiuGQ^rs60%e>P zX!lmX#y7nodqVfU9aD0%&Wz?U?odJ3ue_Ibng7@16xGt2Kw7}A-n&#a6XBgz>@9OnY__B(QmFu_{KeEe{~EC=JJzj2A{MowW&^EbA|tn>{YAwF+O&@Ckc^zB!g&0rMKt!` zpw5D@!M?I1@T$?RA3QD!j`0qNe9B}>tk_uRO;gWO0`25c9UN={M6qt`xz92eO~BnC z(!HlHs}dIS_0(k*Mb_+zBtM*=Jtk8BZgSW?roK6uq}c_pabUptw*A!=Q!%_Xu2TTj z!S!&I(y^(KzUn^zPAb`M(9-dFZ2ryEZrGaM>MO)_%XaTltCGCcmvXai+%TO2ZEIYL zqeEdwSq}`8n(36gxNZNjNsBZ*`c9{9idekcX{U6$Bl=FK8GBdWHQMjqmrCr}EOj=> zJAJF0SSzL!-UyM1;wr$w94-&Mtb7fk%_I^F?(EMbv)2b<6_m>a8w771==j@6zD?>3gDTNcN{WqFIE1!x5rm*0s{t zq(pi=4kac1tjVQO>MtniTTSRgp*Re`h`!S)vEGz-F+%T^yCb<3KUC&>tAx?frsmyYV#hw<9!gJN7ZBiebI zB=c(N*p*kCba=OR>B$f7H9h&i<1+tu43V+2l+4Q*cj^%7N8_;qyROf3s8%eeW@Jl z6QK5*p4u7LQ&%Mdb?cJ2p1K_fV?s~B{P3PH6{y=T5FufJYD=l^@*wrS^Sf^uH^@c6_^&2#d?dwhyHqO(M3|C5c5$BDDX{`Pk0>4!u3u zEgh@d)b6+^mwoHOSo<68lgA|a8WZ&~b&`24@$`cDL~#CCBDl#q32c&g$YpY5T~Lz1 z;=)*4JO#(Y>T8{b)8iW6LpMYb|NqnQMbfa7fv)1(Xs53m73=i18TwkmcVuy?w~_r1 zvd{hVYw?-ev_4u(ow0mvlBZ28p=xOhrIaSFA5!UYLfLg8?VSqgyjfO0d4sFMa>~bp zAx=>9Gjm_5kNe&*(i`C!rtmV;yKu^{)IPD)@&Z9 zrLt9GMVdW%4+LWp!900vF;6n?i)I6Q><*{IK>M3}rNra0I_`~@AeWb3Zup^;&~hf# zeln9MdWEAfx^DGPRHu%rIlrd2<&Ev?-g6USemmNp6R;hrqCKs4P5Y5(`_5^EZ%Bza zyx-^w&m;$)Usd-GPm;j1Ifnm~F7W)YQ)?eb;c*}?k`i&fT+|hwC(*;Ye})_do|{Gi z&(C5c;2iRpmSso{FmszyBhC=D-=h6^$epeQ&`cOXaGs6L#W zN!sobHHuJnTt3b)*vT-6r`d{V4>*85wGhC@$)PU>u%`sjy0Ovwk@7_xkNtx8rf7q| zQ3kN;58QHoqc(;1m>i^gNAL!zCIyh4jmT4zNxP*`p2*2Bt@b<4Y>b`!vf><2yKK&RZfu>9pn_bs0!Hk9)$-@Q5c53L++q*P$p3~5hqcrqB zpiGIuc8On8qEpA8=72eGQSTl9%2^uBk}1>F_fdzOQII)J zz5RfU(e$R;VI1R>B+t|=c7w=8d9up0%W=6@7tCy$9V_@A;dHuSiW=$^Oi}mP1uu*h zT&@K{YSZaFDpA8rfTJK&1cJ}nxPK$PmMe3i?P@n`zSVWsMsM}`^5DwM137LvU&&kj z75)a^p&1Qn;}>$eW`obQG_>03H`)Tgwy4T`~GOHyQAMY!ukR! z5ho!ph?a1KwJ%z$1IdwF`6dpMBheBLBzvSp0wmA#q!V2Wum&{yJyh8{U5}ih`_pp$ zAtrjCZxOO`c2Cr&Asy;);+xW&YjtiBZ6XYdV&&j{G4Md6b*Xd?rpsD!){w5&^nS4# z8AZwIhW=5MoNhRN?pw8utKaL_(3ih_f-EBeGi^P~Bl(cHt6L^QvJZvL{+{0PGn=XC)=UsmC$tisXW z>aPmHJA6?^KQfAlqj4`2Ahk=*44=!QXgD(etS&(R7A^c`0X-g|%SOjoGSsF0-_PsZ zX=i+i?XUYPofaJ}mthw~N6Q3m%5IObO^lun+oS?oFKqJ#uMM9&Z1Z}+dE&6mbMhok zXgnAF#$lu1N565z*8@CBWTWFz+Fuq$e*YEF9v7p?fha@{%qMh$`GjZ*2jcg$krHv7_)HXUr}tJ+A`$OXQ0-q9-ha&i?}`}Sk!br4gs0NJkb8s{ zjyY@7`4v})9y!HoaP)&A=8L=cUBBSc&JOB^;zzNeTUp)BQh* zK5@FcTAsu)QFXKyr^L0kJJkX$(_1Yoq+jNtJ^Mf$Hdj85V&fC zhA8mW|Hs_7z&BN7|0ivLAb}JuQltoK(JH8DQK+dJpef}M2p|s^P;?aw;);*}KB~ne zLLBaHT|ui0%KF4zS5d)51#Pk0Rz)bnDvJ6mi0*XT)w;4!w2=SzoVho->4V3L`}z0t zX_9+q?%XpoXU?4WC=4=){xx?1UrbBwnt9D9Wiz(OlQlY%dSPL$jibPGcv~Vo<#TZ- zKfVge0be4L5I=UZ;HdyNY8K;8ZvoFhg2$w&SV!ZlhYb#Q76h>Nh*njps7 zX}+uyS5r$d6zj_knneCLfY>a^?F5O2Ag4I_N3nz90)*+H8%hWpxaQtK4$?)1kzd_X z;ENAzzZM-CaXUIPH!iV`ppJ1@4FYr?)i5E;d8m;%IdlYosjGbM$BA~<=<4}B0r9jr z#COKvF^2xp-w?#{8jliu2@nUUh6&;TY9vDZ6?mGH1@Xc&0P&m)V?@3(29E*p*S7(l zP#of~3BCk~-=!KRh~GtxM2Igri4gy-2dJd3nq1!rqS<8m)C1(7rcZf6JqV|~kD#RU z9Tgz*yB095!XAFIM)4BB#P8MLW~H~&(UAJ}9WCD8`y{^owKN_PGI*qr*!eM5UBNxs zu{r&L=7(p@5ZSxV!5!1O=^CqHi0t3pYCL1`4`0w7(=2~MZ6x5qTd0vZ@7Z7~PSzNI z*d4uE9q(1I7|cemTm+%1SFRX@Mz4Cb=v9Yiz3LEq#-Jcy&u-qUUt>EyS-m=VI(oG% z-mBrU_Zz*s8Sgju>gHG=~n1&KAAWXvdA~9-EQ;L~?Ji zPIOA}Ryy)C#go85okhKx8}HQ}vG*Ij`rWL=Ui~iC2cuWFQH_LNO{F`gUQLZXWArK; zH4-uKuh@O2fNOmwG5I4k`nNMTyH>mx=TL7VH4ILzi6K3J>RAX(t4}XuzrUb166qgm zB=$QS`+p0eq|K$I&$1|QbxnPED*9~-dR#^C&xy}v=U5+%x$H*}o7PJ|Jdp_BW7zFa z7H(bG48Ftkb`yNJ#m38kPuy&bpfN9Z#_kyNa7*lt@zg}RW9rq!7Nbu5hpAW1C|OGz zib2g39izdITTv!=jjefTqnx3qY0aBvp*!`Ge8+UWSwh#06$ZS|-joRMvw%Nw7EViq z_h-?l=fMFmcU0sIJxcs@c^u1crIA|{j={RS1tbydsiu+pS&;MsBn1PWjAds17mdTt zI5g7OsBk3rAh zyAd@^xcDCRAOYg%Q6mxJz9$jlH@YN_afIIgd3=ly#o#d@?oJTPc#ZC{8V2?L&kfBX zo{!!8WQ}nLKn(oU)&9=VWmr{E3#?8f9Rg_^$hkFzZsL3$|5zOCM(PE+`4d(iZa%V9 zITY8^CF>q^_YwGf^NAg>l*&6$N#%DNr{$;0Q~x;}fyD3(BGUx&Lv8vDb3&JL&B|R- z!CDS6ghKk(SpCk~Nh*Z{YF_&+6;qH8#mR6UEjA9q7p&>CQ9WErsW=adrA;Y;sjkx;;72$B9aXQR@$3uzh@Q3Sh$FvTAm|@f~ zaAZ4bBx3bg?7}AtN4|noXYST(^#0ViZs?pA5Dy`UO?=gm77+Jt0r4vAmnRG2O8_w& zCL0&9Bnp!->o;U0t2gXSk=_1j!Ji!d$@)u4A<0&Moc)+{)uUEYNVcMPz*2yP{}{IZ zSC9Zzc*-?zwYY3>@*`GPnZLa+ii6`3ky)a7pD|q<$FCP%uH4CH7WY{`%W~eMvn-X5 z&$2Y&zsDbDS(5Qh|8K3CW$BOW`<_$(^n2`IXIYlvn*EWs0KB+A5=**P(McN>|#h--{^hl zRbih*+Wc18FzraR!jplK-;WOBD@I$w zyK#UG(Weh&r(?gFPOMMgpbo8{5M570L1)(ML`078z}nRiEbjyI;;Qh^7M{jnqY9+c zd{$Am_(ziH=cS5-P&((5#{oV9>0TPhfpjf_bf&b26WG2VocHFX%yfS2*Q! zRHl*bEn;GbLiR2e8s%IW+V-n1R<9bSUWHx0oiG!I$@-auPbM$wl7j`4|i>%73vJnZUS69 z%Cuo$PGjy)E0et_MkNzh`ig_cqG%r>A4OZlvrO}>jgVjB8g@r~QS*F`=t9I5Vr(lt z#e}s$<>iR?3^>&`<J);t@0DV~_e?CX*_NnWn0$pVj9wAT%5`%!@ox>nkYu?XW66t3&@7h*~ z^zH#BpI_zg3$p1zV;2vm5P3Rc8KbD59*q5CO9^|x4ngN3X5y1nGe>c^JlS>|W;BI4VW<^cM+A>>DmmgQbhR>V05ziD)a$6)2Q5?qcxGrkQpZSGzNGAvN!3mxSA zGJ1j2K(^?ck2Vpjl{ZOW1vqeEB-T5=bPh*P*HDdnxVfd|@kgwYi8b=E4WkhXyG8E# zeP3%UvFLYA28&jh0w*hM@oIh}3JmCB~Nmn%8+`j=6 z$ZJ}BIawSDe$^1@S+D?OqqcHOR!fh{; z_6%zv3)xhO7K4+rh^5p__`N_kfso8V15SaL_MUw$`s~YT*OQ|t@u&6VfJ*$SK3_Y@ zA6IO{Y%1IO=V*rrOEoBtn&y4^bccLV4Wd(H)}la(f_dIAA3G!VI)z__Y4BSA9$o2Z z!>|u7UWId`F@o`(c#JI@aR6uHWp*d0>qsL!7M@I?GOgb0rf<%$P<{i73V8g|Xq0d8 zidFa<#4E5`#i#zO#VA|$D7*jc)*BmU(?d@;56~O@K#o9zYItyyVpIo@V%xX)0Os-8 zVs0N%m^n$#$JwVvH%qM3EwoOzVDpM0J`a_?Y9od9vio(sMiE3`Pb+i)a$cAg>F35G z{Xkw7TbB$ExY4KzlkK~bL^)?DK#LezJHC%moy1t`Pf!>mJULm;P%b^-834%7K)h{# z3>qD6_{ab{an>0=S8vW5^*Ml!4alYAkUdJ!Gd^px1B#0Z!7X<#@@8PeNg0JHt#d8D zdyf0mTP=Z0gK#Ge^e-wLXz`zm7t7nschIOP|;Me7s- z!q@mDO4mFg1k>^{DvUiSFAX*(JD0qHx~SNE_{Zp>?7`YggNKqAw8$PoO(9DAULfu( z-;Ti~1m@#s-a}UE%0Qo-vk1aLun3Kl!0#RCDhsrWdQS~O&B4}P<)Xzu_g;<-N-6l?)# zP=QPJ&To4PGmZHToJFex>&t|dyyR%>_&`npXCGS-&0;69-o{Z55(+_~X!&pO1~FV^ zb^`i+g3DmzKxb$xeoPYEvJS{U2W78d zW5<>=!+AaA=plfv5NpULwlR7E#6@d?TLbF+M!$yoX9OEB4)oSRJe5H7q);gRmkSBR zx*=j=T3ya$dHrw$xOQT0THOVcZJV4pgG`De=I}N>9;Eu)Qamd^o{C@8R~TIe?H3^_UJqrRNuWe>UC^ z-Ubuw484MGA<7H^pApY$66q+!>>15d74dB3Trm=9yTI2VBM&76^E4GKf}@TpUOM7w zkW*;3bt3=*T<;vEqXk-(_l!2mH~@V*%5Xd0Yq|RxLV*$$EmNeTWq1-=jDSJ{o&jc3 z^hxk6Gb6#AgKBVz@|DM5gTXBV;DmXtH*T8Vwi|c0+4wRZmH(pYxQErNh*UW4c=)Uj zuam*EO>(7y^NjCwOmH0ES)Z3SVUogCQ8ihq-sJZdyl@w(!Vb0v7JMLQOjBBUNtabw zQTg3mkUymOT2A88N4Pt)7<)o^E3j1z>n}dw^m$7m{qs@aINt^?Jdm!JQMN^S_OJ0U zQl>b=_fvhu@1^J|P3GZY&AU>6x>yWLMKq%v|K)IOEmr?v6iE+XaB97kaxhmArMONH{=UwkRL$}cqA{|M@vs_rQ zFDMd!6wdx*2qD<+vHC?7h&xgYb$Y*3SuC}CkKG{J>nXE0ScYRYhNd7XTt*_RQn7*^ zNX&i(1u{gw7)t!$7kHD+i-Kko=sSOJzpgGX*J04 ze31+XThB_c_dN@oK&*oNgV1Z{KWtWod(aT<0VSOLYRK%E9{QE-H()?P$cr>j5p<}Y zrR}V;X*fyW4hU|meg0GAZMdu@o=!eZzev6pQwPgOKDxn@bwEWK(+nW*r)4JR^Mj_r z^*xv?Chy#z$35r|-JPE|Nk0(@z{o89?O`x*QH?)Ik4vV3cF9VgOR1dYt#~gCc&p`J zv{O3@FCy@q;b$;yuJ4^oR^l7&4j{Cnc6V2+Uh(Ox8h=u|ZoS^}8STDLYT39~@aR7mY>2>G;(6 zGotzN8*j_NS37I1P_X%M#jsti!)6-sWNa`DPY_^mKYyh0I#GDYvKU#xp9%r_GosPb z0X%aU9!$1R_B7seD&CV9eAnjUlU1DIp;#(3&UayVE_yZvPt<7Ie%yq3yNSNlA@7xZ zcx@_rRvE^IK*{m&%Z6XP--aErd#U;_nFcNpj1kol>*=mDg&U5nZ$Ps%o%fc46H24| zUA1c50eeI?6MWU+3IyuhRy74^lB$6kp*?zBEp#!&mOX?yDku-!DUrE-fugj-I#TccmMYnenzzcNlC31Mhcg!D^;DZDU6o#cUDk(FWtM)+*h=}E_tT9S zlV3yBtW@EoG3%m5eWTMOIydC!qXEB-AXGswBFy zd$6%xOOZy^NEcPx4;AgPBBO3~aBq{}CX(vT487;?UO+5kLCKk*7=3y}?e&QmhD?hN zN}jfYMpnyDfu1YEW^2v1IKnuEbfq0N+e7L?OMk_+%Nfc50oLv+ z&vu3*0OP?iecr^bX#t!Y?D%%(ZVtWYdxHX#H&Ch(isYm+)>`aRTpC%Rwp99c#5T^t;(<=5gTgBtX(^I#GaZp)aMics5`y`RKtfPWE$QfRP zS2qXY+GD&cuB>NM91_|BvQr3xEpo&INWBb5y56&kG`UDk%SJrU=WN6iW70_2ZzQR1 zb8v4%Sz|K%6*_=Ib*d7lMtO6D)xd$=uSjPju4!0UA53)64*d~S z*e_r{ErAgvjBOL;MKjWCDrt-?aB4{>aocUrb0>fKtue@R9iL{qX?ZMbXi*FpsKNf52aQ2^0J~+n>XT3zb${x}RR)CY`PCq;qN*rToYJCp*4#^4ux|DrbEKjVM${zfoott+s|r&h;- zU$XygzQ5^zGymP&>VFNQmi`C*Z}a_gln(P3#=pkX+vXq=C=9^2M9uc}c)-BO*M^79*ax7m35&u{#z|7#0!;;2{=|KAVG187`0VYq(F%G}OSf9OKWYC8q@V09HyXsR~kQaWNI zB+7LQ5vCBbUVkkPCl}+ABVJJU*#M)AEp%_8 zEOFwpv&|MdY%eUcDf=XrjcK-Y!)RR>tdeQyg1!~$OC%l=m#|FU+>QJa6yktbh;uNP z1qFDLfVRefX1(*-W}y25=tL+V9&Cp4XWJ1o096cez|y0I zaCr~P5&`>h&`AYMe5R15rS;e!p^U98fc=7-?@v$&(~4;M{$>A@_ut*-``7(X-v3i4 zY(2-PZAO#^*=cv%4CP2GayI1aV7=Kt)8n9gu;iV9Y_8Cvq(bus$A~q_fle=w8qgV< z32lYut&wMyktwO8bIC;9aK2tt)G!NKU&C|pg<^Q-_%>063!O_&hb9&!%TV$*N2zR^ zB%i+UNL;NoSO@X#MyUJ*O2g*TGmKK(BdYWkb7@nu>fYNadg%yr>6b=nx?bAPTv}?B zX6mJ#&81Hnr33ZS@A{iy4jH9xy>z>|bf!@{S}%RgT$*o`PSHzOm`g7(N^jCj7n(~Q zM(JF=^jdT2w@LbF+@qJe%%#;v=~BJ4m$~#+qjb4m8trH5?{cGbwO+c%T)Mz0eNiuc z*IYWqDBYl!K5H($!YD1*OP82S(~Z(ynj^oUjO@8^2yD069zQ7ZM)3(cjQjne&k zsncBgj8STNRAJrs7nnxl0i)ERm+ml^78s>zdg*#|=}4nALoa>QT-x6#9iW%qX)f(z zl;-HAQ_ZCf7JW4G_0lWNr5_ok*XX6a&86#%(iwWG)m-|BQ94I2{px(vXe=^H7wM&c zGnf9#C=KbQ&znngjM8GgG-572(eFwHT#q^ir?6bZ_(m)(XG9Q7^sNTv~3F zZqZA-noFNENC?7MIUZj^I zjs@1+8ad~$h&uIF%Y84gD{N<2f?=UL6~2k{E**hm;F>O}B_G$iGpW)$s?wUXsFE}E zAeb6dti5D}iZb$PV^Za)mxo(~6BZthj@e0e`p;poxCTJ@0E`3QWOLbh18go^<&}?* z!Lx8M^(!8uGph7BSC2=vOvX7tTPDaUUy;=`U2Iczy2yilO=C6fh?)g5DiHwhztk!K zJI+%82z(O&69@n!&M-}HV`lLM*h8j#H_LMRKWAB{&cuHX{(pu4MfiUN|LgGo5&j$S-vu!A$NxzD7vMh~ zuwQ|Hg7pDh)30xGe zVup!@oPy~xm1R?zAxGt)ERmo56ShdjfI*I8O}m*P*Lm$$`EqBa$L+do`nsiR|Io^A6;S>2}GEzpBJoN;pDzpjTnwIzEA zwSnV6huIGw9PV#mw&?e?+J?`FW|2z|VhQB;<51T_?(^*XB(iENRms@cG2Pju%;5^)+GYH*& zI)w0>+59Ym+8S}Dr2K?01IgQOwZ~f0kqqO3ae$XR!a&OWmrqb$!ILNgshRKj4pai{ zGlTcq+riXNC)h>sOkn4AQ?H-C*`{Odf7M>!<85!yalp6uUi)8=bv+K?4l{s&Z-V#~ zp&P?y2)8N@!VuQ=W6u3AIwY7IP9SYdoZmH!4kH?4n)iDE73Z4fX%2W(O75?*hsu+gBN*fdGV1hfF5{58fv4l*BLIdvO4p?E)$3I zHtg=d*l^Y~;dN?c|8^L0B6p`+kbaag+eg{mEq`P8QLK*xLu^)m4+`pu6=%waTtKq1 zZpK%do~#3cUA)9D*Jfw#mxwUQ>Q^l;!3>jM#D?tOel_^uKg)hh7Msgt@8r!s6|_7d zSf46(!mgYY8JZHEgeaKf@eI=)C*J-FacEjDnwRf_(-Yy(0f#HRi%?6?#h`c4h7_nV z_UO=l-tUMgGrgz*F^JO(_=r*L8WH`7w;J5zc&s5l`nDc|J)d~nM8|1+b|L<48}Wni zcNo|YL=s2hdh1eGYpU)#L3sT;{N#saa%Vhfu>jq!bgMBhu^X*^!s*0W!h^Hk$m<}VWXW` z1ja`<#tyr1rH33Dk!usDTaN<1yy&AXVR{qMdI794W61aOG8CVsi=J3zt?+CDVTlCRRd_Zg zBZ?EzuXG!Ab|xp+r6QMxr&M^VP--P_Jh)!%6xtlT5N=pLy$`bL4C1i&L&Zr)Q}f%8 zmDMGoQ#IV1aH;AP?NxfGdd54Ynhlm_M7aIB9-2n=W1U-mkTweFI-|i#Td)p62){?M z-t$`;i8wT2_SB|4T%<8piS;xvLZip}Z9Q0PB92+5uJv>q@q<31kmUdc4p)Q^Xvrt? z-O&lyp^D@Oy$RdkVF9`aJ8Lu%+j!vZzzN0IzN`5A{&8Z*!jfkv$ej;?6teTF5H`2b zN!>W>i?Bu)o>bvYiD(;8ITC&bpP&Xtb!^J+-nD%#qPCSnMff&8_apd;taX)OrEPDuuV1V8zOcDJNDmE3vyB^UisM&ZPHhNeH}lc#49OG}NY z0R{Dc?WeJbj`iEJ-m5FXX?CQHW22XC>nmEk2LKs z)}V9-8*f{1M)L#Rgch~&;@!*V(2m3O7l$U#fMmzsCn@TPbp>l+7dzK@_wGuvc{yy5F6&%hls2v z-W&w z4H%jTZ#9vyBx1@tO(a~8--4fuXtZZ*S|&bymCXDRh?QJX{UVa6ei4bJUy)T4EK9{xc zqdRJZ)#AWTOhi*wKE{Yq>Kb7=s7?tuOI0%}Jf|u=i3->Y!t{{-=rUFEx0iu`r049< z{_$9#i}zCIFyNWh4HoKA@)Ea~)%K#49q!0_n&mpUJM-)FRU6x%KSX$Ww!$8TVZaJN zOt=P6@-a;EryHTq;rwbk(Pi?8fu>R)&ZnAza=r(S&=oGlqwrCu^d5xAT#MIhbUp1g zShXDD)Q=0`%Rd2&SKhK7$jEmzjVL%yxr(n;oyva&C(alnzd@=E4p~x$xixJmy;SGr z=exnJS&$f`GF*b&giv6Zs75n(?HM47{0m&;G>w0L^c}5;)|q-nXq~U8%B)CurMu$m z=jXQI=qVt8IQr79#L>?rj{XJ^@pt~h9Q~xDaP;(~;^_DO<>(we)r_pC1y~WL1!xsK z!djRBjPM+a50D2=O)ti&GW;S&p#_i6cbUz%{F>N&?%xDr^NW_zRHW$Rb2i4uVDq_7 zbbf}M{yJ5$gFQBjsCsdx{I)+x#V94B(oJIX*Wg<;5}SX-B%%&L4_e{$Ic{w-i>MP~ zBC4iQN8}J35~XQGOk^IW5hMvMyTWVnX=aIZ@PkyvVEGq)W8e?-`xzjT&3GeDqCiq8 zINnHMxp*`ayF&J(8TbsGQSfJARY7r2a5ibg+3Zlov~`VaLQYNB5FF(6HE|60xxwP> z#;@aebY7Fl8<3sXKhVA4`R48C4WP!|*pf>{ev15N`RLY|nV2BS8-0u18=N6wflX8( zb`{3*Hc}|4(rRIs)e}ie8*mdR%88i7wgl-r8rVq;snsH1?}@b&lfLVCFJco{+sEl||@q%Ddpo=7@TB}b-_`3I||>^(9VO6))ZoPgNC5a zz|O3X5QOPj3YiRec#*gd9ELMI0!S{!BV7B;zUX~uqL{&zijX*jV&5GA$13Bq4MFbL>c+# zhJRv+0y{A!7gf=eRE7URbA^;v7&{Ava2V-!t+>>?44j_JyVRd75F`Zl6j>N} zeD8d`K01lUeeUJ;*v9lp_%-ed&qkN03W>%%)krT!A}gmDgRn~eRIR2NBWuN!ZjdcK z@LcrlQh9Z9DP<*MbP%d$#a$!Im_A&0f+iAc=G}=%b?Wb~KXZT4*)Tj|jZyum7Na`7 z9DYH=+^BWH4HaMSapQCjCOSV;u7&m+g&@IikUoGYkyk>9h5n%)8~2Eq6ic%tv>JR8 zG$hFi@6KkzESExNC>9|j-?)?jc?156{ioj^s9O(8H5;w`yQwkA&_7!2>887cf+?#JN` zaSB$8@s2BvVr<8d8r8v6h7ud&6g)0p=!|Y4za)N>$!+#2U_CeSRd_Jn({k_`+2p2A zEgzqnZAnDSrOWVWd{UCvj(8!*kB8qwEI4jDb1T`#l^F6GUlv+^b?{I-C<`G}P{wlL z2Qb)8Iwp(k@ZxYH+^Gc=mtL@F`5&wWjui-r*B@7KE2#t029i~F2Co*ZN$ynPnIe?Fcj!9q7{5SrC^lP`aaCfn<8;GuxBMvaVX6AguvgR3$7 zrs%(26#W;bk;YnH=9?rBVOyef2jwZVt$<$VE@>u7CM@pfSq8px67iKz?9-?TrJ&*{ zO^OnI?ldPR$lwZY{L+}-82T!GU=xNh0e>SL`psJE$fhY+(>c1Gw_Zz{6=4 zv7UY_tc|R{iE6c$l1b=^wUDhWoP#D%srlYwB-JW9l+`*hqdiu}ueQ0fB3X~Ekh_F;e2@i;hXsqpua6Ee? zY)4aKb0teggngAvGzbkVnUtts4%AYmq^(r<4AD>pe$oiSqHJ;fdtUeEnxh?ngmza@ zft*)F2U0{)ip5~fk?oCi@c}Ll3{S-o}Y3wNGOD1S6~n zFT-zaCeekNDvyN-7vm2223QO=%1v8>{2Ls0yPA{Kma{qtt8t5NgM#lY#t!)8St_4> zi*kWfqXDA88rc?+4n#24J5qv3XSq}vA(w~m#!G?~nXN!SNp9T_4@_`@bM2x6hVE~a zp__7}wCpQeOnL_!lUm086P*iI)PU@Bu(4cnALQ)?Q)p!s+=T6cDUx^~ zFU<;V&%J4N9YN{tx(zNwjVhiRm!ppUEK-~rRW)0Yma`r?xx(;|p z2fWf%=?qZ{32kmlglBA~$|urZCG96Q0Fe+qQ;5uc0X)T~T-*_ru`RJx`;a(D@+7hS zohp(16j{+aHHagMAR$|t{~YxKIUZaJZyLX$5t{NZtcXT@@TLJRS5Fojf`cusOa=0f zj0Pl78Q7@r_P0Na7G0Thm{4B57-b<2_dp&|md*GDcKeKiC-FmRwRPFg%d`nijDE05-ZPu13$5lhs0$Uf zOhL}ih5Y7=XB!FBEN^BgWzzY5#@-ql3xaHd7Ge5Mdf?Y zhP(s6k1vF*7zkZOo*Z|WEOPf*)zfum>0NX7f>ci^DaY*>O7scM;Pc?~YkPvZ=yG+{NXG$>o; zj=PRQv-(&Aoy5I;>YOU`Hps|;r3sYlp`*6|KY8P22IV5`lfOFpV+Zo^VyMRZFy-2` zL{YA%&6G=kW)Tr2bfs^NlSlbv@iRoT2*3VYnnkVYG>d-9CxE3Vhh|;##z~@CJ+E$? zW<{?$F`D(xZ6=yk2jtXg7O6H8XjVCH#Aw!EaiM6|U-0WVXjawDM6+l>!M=d%3p&2&&U5DpTZ%ei?hz>Zju5i5`ls=lu%gX~ETsJb6vzDL+P&YB`C1 z8%@(D2>m{qP9RToTW-4)S_X}5271OT8yv&vQm)^*Pa#SVyrp0fly(L6thpmDjme0f zDog(K)8QBedl|pUw|C)XyJG%Jist<7P$E_O+mFqu($lD+sFGnOKP&kt#AzR<3SoK3 zd(NZ+jxJCz5Ltq3*D7J+_(^CU;-_}~@mW#@Gx1BLF0`zj;hCT=8Yk$g=LMZ(L*a9jiwqPH=kIfcraJ9X}R#F+*f`k^2!WK-M9b007 zdHVADGhrgM2G=ZYimYIAm8AL#g1$YGN*RJhINdLN)cX%DxsXh`N)b)jJA>M&A|M(w(FSR z2dy6!^R2*GWA9!M<8|UbyyHM3#_u?2)G*FRdIdEE_fz3LbT0Bj@BnRY$j62A7XwWV zZ;_Tb|Cgs?IM3El!rK_bB)4%EM!HA3x68>kuQuXIA7kjlv?phMBsgslIDU;bZP(^$lI zvA}KI)3nuik-XtBxws%~6Go1K_>31bbMX`v8>);)KUAs=M}o7y;onq`F?GJ~Nrm{w zI*efHX`HRLp8Vj*8y7NNLko}GRP<2Z^Aq_j^3Ol+B#OnSaj-@pp5sfUHQ1NQQz!9x z{0DMy9zlPC<4+pRDLMYo4=BpL8;GG|5T4jULqhizAaM{>W`myrLV`mTy&8&Yc-nz0xOt@CMY=mdfN`Y6?#Df+f2K_uxNh;YOS zC~Mr#P#PW#mEJi+wC`(aNVZ&QLGD_Ahbt{u-GNbfxq?C@=8n2)+6iSknu6ET2^9XR zZT5?zB3sQoeO&!I_yoNG9)n)^Yb%J==@1b_2yCnHgwS?T>GE6}mlpO)92zmZ-2^!y z55`LGepIB9lLOx%V<02NogV=&0lqWz5K8Dh&hQfa0*CzDCp*HmBPnpV=pxGW0R%}7 z+=>kGPFVJST~>Q4Eari!SpIOqx51Or_rhvKg9b*31$u5-|5chdH4;dbR$`Q^uNyNKd^CMLU)5O09Ev|klA{nZA! z8S6IF8_(L7Zja04$V0RSGJv5j_Nhp;ee#GbK^5hIwmGF4K~Va6jE-(Uhp@+m7dkbr`>9)JHO~Yo4WLM#pM}dSjHRd zFAG<)xW8;!#IqWSDcIV2u&e>C`EOJT{HMP?Lf#2ja}G*=pPLD#SHMx1BnIgzep^>| zko8jJ+eBHXimWo|I@xVR+^W7RT+>v#l-*7wm4tX4SOD^t+vG#st zxC7U2q)wS4FGwWL z-o>b!mkVA_(C%tdgAr_^Y6EC}2b^6P zIYqqh^dMqpq^)u&*+DIpLscTUq3P-h8eqCf$w~3W`QU_iZND<4iFV#!0!9uk4vBcz zMv(j7(-?tvm*&rhs5m>!{SSeiV{<=GYSuPX?@-}!SlHa+4BdpKO@j-ex>3xv9c>m! z;ncd)uIOGn(iWVGrVvR4rPP1j$_364>1JZsaC%EE>>$zt5+pz8J?(MOnSpV?)H{-C zlmj+=!Z*8#La-KrHl9iADUe3XC;)eIo~h`94EfLHG);Cf#vSq6+3TVgEM}?#FeK`!QrVL=}M(diD{zz@L~A!_z=t@SunL#YoXZ_k^YP1L&p(QcwX==ELE$9=0AglgOJPZH)7fc24ThS#{I^5>& zm(cHFI9^mG_$T3+w^6FzY#XIhaZez%Vb>D0fa9p{b$1B-8k>(5n-7!~Q}8qIDgNn2 z)&lr&wL8$hOCTL@6~At{xGhc{j?hF@!3Qw~O6r6DO31_Us>G6Kdi* zF@IvBT?|bJ469-$wZMkj4f&?}z4*9=|1z7;Am>x>-hxaht#~lk&2%l(DIh<%L zNEmuH;Lh>If~;9`bk8v|j~KBa)2mM?7G#3lofD4*nSfnm>P&st=tE2Ga25Ke$1%|j zj$;~JtSDAu9Ftz0Dc@_4>C)qv=;q0Y1?l^;iUqk46LpMOkl9qlkejYAHLyY_M2w&P zv0pLOSp!6k$Agr_<3UPVi3iz6v3Ox^)@Q1g^lde+&{N`yB3wb+m=JsYT1 zJ=mne^OHp^N)>ZcNclo+Yw#*dpgnF|>+Xmyz)5^i#)HB>^GsZs;zctX{DWNH7s(f9 z9Vt+7MCazfsW7T|8xSP`;Z6oGfMVogvZcgs&81uEvB#h#L6m*0bm+B+)UQY<$@xwq zB3^d!{|t&=6&s-2rxuq2MzBylghltF&v%B_p;oZ5vorK((hJ`KCsmuPi*l$=h6feA zb>JzXaiFG8zPF&>FczeA$0H2pyaCWS4gHb5H z6g`iYYrM27*x25=gwA0Q!v^w+6wWZ1C5xEfW}KGp)tPvbUVCJ-MjGqBP?1Ehv>?*K zKU1i5=8ZZ2alytb{G-JvQ^aqw7-5qu{{;u_*hu>aVwC+CtH*M3V5BoYfDmDJ`#%#- zs0&UxFl=C&GZY~}1N+7FCViCPrsNELh+znRYlBOjoSIn|t*xT#L+t|B7yu3Sw+l9A z2L>gyPXK|3I9qmz1BD=DSY&$y8@u^agN+n~+<4i7Qw#tDOE6>^9dc~W`|l#08kT|+ z`yfDH50~n_IL`sjP=mu!aF@>IWsv|*9*h)L!?$61sjJH0ZT3wC`D0gF3nV^bXXUw$ z%$|w2OrjqUcgga?#DtpkOI{&ZaMgE92Ri3OyjV(o=#9T&-4L zOlM@xw@|1d+$;sB#(LJU>)HHVW)qa(S&4pdo=#t^AhVd-+H>%#UzIpd#1%t=S= zVl7#`m`Uv)QLJ;6aR!9=507JUeL652Bz)3jQnYR$@`QjVXXqvTg6|XXp}{BDcD)D^ zQUe)*AE6pGM<9Fx86yFQOr0%RWg)8k1LdP%vTWK}%uRix6J`t*>T*$6emjd*0*`h( z2y25gcMs#dA0&A8ZVdE*p34`2OuZ;&Xb6bFd2`8-i|@C`aG;OUN2 zbnkW-(BXsQpcLB1K0F=hJH-cKoY-@@`yaI7@J~w_X6T51URs+6XTqK)obo2srH&A_ z-$U489geti$leOhl7;z1;V%|$1WhBkR;v7FH2jb0tfEjI##M|>3GTTscqq*o<^xiO zr$GfTfy?_}F)Ln{p5LNdP1lBA>2?ooO%W9Kc;E#vD z&nw4&iE3XRwW6sI5wwq{=@rq-ab6r=FkHjgv*j7CLOVj;*zn=vs?HEC_PDcQEvX&| zjHhma$%R~_uigGHfM+9wD%8s!Kp9}WS`8~r+PZG=96~+~hn%g-f(ra;r&(!4hO6%D z`ZQ9rjmnL9o3#8ipjD;knYF36Vwe(Rf1zhf9tXmF{w1twliQyq6&qvL>F}L~DjN7k zYd;6y@aSjF`2@2btK86IjY`yG?QG%E?_DeJ|AtmK$ty0F91}$he(gJ`qOb7Ocs`HC z^~-@VX8GaMc-S4QuqZ}^<=gpgsJsyy5?KXZ2kg@@>eGF*FC5m<9Kx)JfnWO14V$R9 z)wqkN;YOuf!I<``Y!l>;?kVPD3O3SVL-F(As^ghc5l9EUdQtczXZTrKHKQ_3$9^}l zhibJLk?E6b#@qrrv=e+VoV~02Z7=&VNu9NWM?+*mQuLhtgW@Wy<-iS-$_gi;LWkrK zwpWymDZ&SzYy3$E0+GxHhYiR7vC+qmD_Qy__8WMTd#jJ5Rl}4>6NWciL`e>)oy_^> zFiy|82{#cATvnHKUa1?|9ja2l?s zKxY+MMcW9DxS4{li1Kdi$__<{fF^k%JM2f(i4oBBGWNenK?O1w@SNWM7EsJv9e0WI z?5xGDDCWUckVI3cZ zP7PZIe0hnd6m#cdWw`xWSf(+W(Lf}F&#NHEBSg(32NbO4Yyxa!dT#q7K0RmQH@Q~O zT&V-1(1J1U<@^3W9`}Q99ElDGOXAu@L*@*3z^6VXTfj%dV2nw?c&SwhOB_vKGfNzT z*N?(W*wLb4iKC?*Q(nO3A4eLAUX%(##gsw%h4!-;M~KC*_1z@8he*&p^z!f`d=i5} z)pc0i*lc2w;$^S4YGGq}u^jWFQdlf>lWXpGxQ70!l(XQ}6x3k<=2SNz2Q|8F(@cWk zj!Ps}roc$97OX+Hp?T#LH?1C}P1}%Nx-Nu5nO8aJ2dk)YMDF#h{`ojE(M}p5V#&Z% zRvFaUY}7;(U=Ew*1ff%`cRWcF^*Xs5KSVbsaAk#;Gj){E(T#C95? zk?zRECRz<$vFJ(jIoKjLlw!CLJ2imH1HEUhcrMt6A-|mX1Lc2ks3)W(Mp{7KLfoG@Y*{M={>@trqbeFpN=0)Orz{i|U z+Hn;a6l~1*cO>aGY{gA989sy+Jv+@fasKejLHKllPrIWOJqWK6*f3S2LP|05TrF%UUk@RPUqGgzLC~$UM{@7 zsv{HY75i0ms54HqB2sJ)lo1o_X%oOvU*BWgiWYUY1bSurQs%eAVd-@?gjwOF>&_N` zz3Y2_JJ+NXa7Agd7y3s}kO=}d2k(9u9Qf0&jZ7IolZ_6-Q$H?3%GgPjLx?=0llyU= zowDDedup^oo??JgCYStDLabLOmTEUs$P65oHWIl z)S{bfY9iipB=~^bx=s0K-Cr~3L_eeI(!`SKpxz(`;!XK86}E;Je@foW$psD{^D zDF(-6)kCl}6g}w9C}M{w2iLyl3An%oxoL>IM%iGb1K;%8^FNWv@liW zK=4tBD994nS4Z6ih(&e2j%dGzV53bhU)Y&ylq9Jdc6sk8`UMG-U%r;!IE-L~$q7ts zUM%2=iUn)*m7$`snW2K1o1+*iHpp)94-(9WxR^ajq+jz@A(u|F?#+p`|JHQ*57%rn)|!cgS8jy z{Wq{6v+0pXegkU$LcQ;W@jpiIe}yVW@AZ5@|NZ*$LNB6Y^SoCmxXrXMF7Yzj>&5S) z_!sJQCMMw+oxT}W;+>A|)_VUF822rI*o28^#{aqo?Nxpvv$BnJl$WNM&~7_MR1p2sv(h z&xYHM$KF$1;aP4K(-FNx(9!%TROvS-<9vBwSTc;Oi%1`Stzt;mvQUte4d}=B{64kV?f=R75F{vwc zCe=jXqk(F8Oc0B@1!?Q7ks&Eamof>-m`deED~L&5Dlf;BseN1L{FPf-jGbrL??9#6 z-vS9CdW&sv=}_jw<~imj$z7iVI6b=EKSPNGbyH$e3rj0VTo(7^xm@}2gh^&GnCwJX z9`^ie?#-iM)n$?Sf2S_ADT}P5V#8|n!m~;iNz?P`IYQ%yz3GmjL2u+}j&S$}IS0SQuB`X^eVG*v zzMBk{=(I8x{!;p%y&y(%@rY0fZv zB27m+;9VfaGr-N#)-cR1=DWpK;2}lg5XOjv-2ogaY2f5f_|!a0m0FGPP2E>IIi-!$ zeFF9PM0w~1i{&+|aX#-hnf*`$=gx74DEt66#foavAk#JVM-c+Z5oU^sKr9FfoWGvUgDu&9RMmV7!8jM9J0Zq=6nEB zinx#Ix`TmGDI>aL@T))+r{vI`yDU0@l2FRemgZUN zI#QYs>BQ<314IQ4|IWzI(TxNbU?E}dKJ%3 zGJ=Jv#dEP*kRD0Sc0no7%pbrOJH0?#%m-KBOlpe%&~8SX}TBn6@+6YzG3TJ z%{)Qe>`10$B1KdohzNvp9n|y7 zsg2dApraqi$lYu#L{{mI)XbIt5Djy`a=x2>;5kn_|Mjc!)`ZZy>7SjUj@4O zw1raVc>hW(m~->_GjaFuAuRX&6t%z)4zUB?d$HeC$!DAjqVJ&>4Hi}(4L7^U=d0N4 zIgjEK@a$kReHLznGeuxSzazoQWMq7$fhhY9cFT><;fH8X{y#MA>dZ(-~hC%kDe!qRKV2pfNmPri~#$bqv6HjsnQd>Ax^cO&#}femK6E8vIS zwVKvoIsiB>_$Q-fWqBXWDh1Fsxh(S3VBqP&zYK|f?6y8xwF~mB*0!Hv6;aQs9f%NjrvWMIJ zy%keda076)U;w<+3)Yg0`p0787Er3X_Ntf{;5i_u*-7+ddG=5nIJO&O&!qLDXYhcl za0?18=&_)NVK?QTj_71~1+KfTo18?F_-L%6_YhZh<# z*Ur#pT(G17r7%+ipLBPi{8XuA*e3TEI^|_!a8IL84mymXV;mtGzuG4sXm5q0+HUdB z7lRa)K_-Jq@;jtZ;+RSAE>7eG9=z2gPKM_GcOM`GY(A92&?@gg$cka`&0v3a!5zMN zE+?jChd%^d_t_|+SojhmK+}=7swiL5za}ya0_*~Lf|Xht?fjWK9HdWOaya)I)}Cs>q%|~SgJ=|L?AG8kY^o>s4f}v zpwr`7Phyk`(=6DufZteg`g&(QNz*}eko6?uO0tpZ+LB9YC6L2OiJ>it=T%e^92oTy zvv3Ih945%9occG~2>55w6KJHZjEX+=Q`eSIW!5!ZUjbr=-F8^6LSiV6T4Y-Lm=eHJ zc138CIlJN=B2Y>R7H5IvTsMu?CfCIiEVfC?72z+OmY_OGYo0dUm`bF}0K6690(`(H@D^0}_0MB#pNX2o+|G)pP^I907exAg?-T!)n6 z$v0D#=9v}s;!L@m)VO+PMY;)7&I*Zd*Jj;9;>-$`J0OkUAB{!Q-0U&Kk zxClkflPtp4_kTh1_?U)5xv!kKK}v7z;>@|kV#BKurcrvk?2B2iyPOm$A3zdnU6Dd; ziS_|NHB>2j6A6ZpShE(aHu)QVYY6~wg^5LQh8_l?z?*BA62aho3p)g7q)6~UF*Gow zS2A=3iB2dSG1c4;MS-F#43uRC0D(-RpA66!@6s^D0g6i+OfJqOcnz)0Y0C|+%Mc#$ z&HOQmmbw_kW*LdjD7Ru-a=Rc1laI>udU8HHu{$M?qJe;Tr~aqBs{)tao_Ku%8T zv3dRB3)xJ1y^e;7?gi>~A$1Gfui}CjbY{V_R5_f^AR9n^B2VxZ*@$S|i~&kHnu-A3 zu3zxqc6)PEi*CP6w~o>6yZe!fV82O4@CGLIL{tRVmM5wR5`0jbsR#-|wGeKF-Py_R zQTnKUgZ&*8Qpb60X7LRC5WY=vzwp+ZG`$palpy+#6C>OvBj*JBF=hY$rLKrfcJp*TUt|C#dr^tWU3{r!(}pN}Hn)3QyF@83aZ5mDVT%7zEEQ$5N`rZF0(O z#49;NAfme)fvYL{^|>6pYAKVxxPld1B{=(Nm7jV&Vg^OM7;5?OgycJZi6F) z)~p6=9e3bTir!L;Hj`&ImL(Baga$9pd19>*s?jcLb zGtxnW&!V!6{W%j2;SAacRMFRn&BF7a5ALv;euwRW@QfrCr}$LGLPu87Hsq6;Ps28N zcP>#$4)g{5PUq`o$`fGWG>Fuv&7Q5iRtgXYh;+(M=I{`=nlkT#U}NgSzN&8PnclR8 z5+u1B{DTf8HiJfx7nrrLOT9rN-=9KaG${3{0jC%l943P2wiWYUaG`e#} zuc!PUsh~3E|EL@v>7IO_Fad^2WdI>#Y8tmjE^br-KC5gR0rdcv&}>0%AZBbA-0hI+ zoqitvJzl>s6TBy=9p3GeKix{1`XnwjjkKdd4dysX)`v8G<&LGQgcFMUPlLXh-DrFO!a7&3(X0dQO%CBs%vr4;tjTxSNUO{%>v|x~-FVQVO`41a;WjUTh`A@0C9h8_! z&Mm`pZmeXRck&;G;AkoRto0%aDBT z<-^el8jDp>ZgS0GE`1Dk@fgr2jRA2c?UL2m8Pp?r_bd8nT#6s!^bP0;=ma@b(=Rb{ zU|Fr>;Lw2r?KaKgylbtKYbBC=MJN{l19%ehp*Mg>}`xY{EUaGoTrdgKm!F6B*CYSfU_@? z?GSKwcJS^T%L1pGGK5WpG-d!XVa^ z9Z5R)F;1tz@8CDsUth!zQftw7Wq1QVF{D8FjrfJl)uPz~nS2A1H5cJH3$D6Fzm{+Q zmBbT%K&+>`2o<2#BJ1zL=S=6lrHB(~qWfK0l|h~k*hA;w4wOs13p$eWZgBA`Ye7Da zzl-hwgGWBIXoVgU;f=td>~JYQDa61|ykBH4j>x3@9AYpH)hNV(H(ZARxj~9tNb$-b zS!SpRgl9D(598;Ws13CB{ivBjk@q9^2@h7<)duT2eIlYPj|4iK3IqR8 z+iC4RjnoI?P=vd`C|U;dB2XIk6K5y~9S?FkM(iT>f_HdmQ2DeRsS`Ybv9Lwn$pS91Vj5nAQ?Pj8h*yYkLT|-GsHEANZM!*jw8oX|`eK_< zTm(1=95kgILVAA)%L2ElpmQRrPgjMNn+P{?Je@m5#S9sY$Y_4)9DL$MpmxmE3eH@i zm{S-M&({aNLyQT4T0OM|LjoiSZlaCTg2X&J3qpM&hJ;>l91KZg8w?5W$IcLJk0370 zkTip(nU0+hAbPpR=i6bcTqd8L8CN5Ci*an0f3(ZHjKaT{bN)OB;4{+d=Hj<98AsS; zCKuI1ZIDaO2JAwcP&SRqGGlE~<~(Yvm6~Vwgg&KJ;M>OD3cKrjXXs8skM@MOaI=RJ zd={>QR1~PKola%UUmJY-X?_RffWRzp1em)U!JjX>U8$b@6X74DyKlr5PyVZgcc05E z=bdJDm?{4~9A>=xBA4JJSOzzXeM%S9&1m35U2_G^Im#fzZtqu}wVOk)h{cVpD!?ZN zVC@0o_p2&9l;rw!Ue5yJ=uA;ptS`pXm@hG~1P+aOsFJY-^(^wp+n{J1dWECq)8uz6 z>GUf?G1_inpI6uhNapnr6GBj!mX41%x)k?sLelgMe;2|i%KS4q8(2+np$h5f!F;~euV3iti&h}yP>Vdxt^u)8w4Y*yNmCo>R zn%3#dMV?z7nj{vGXFUm#5NSbH(@|c@$_cb?cD)jXAx-mPaB(1A;h$-Hg8|&`P?bE+|*&y~>|r`&J*#TTJHBn?J|E1&ZrV1<*b$aSuXo zYOf-QFF#s}D9%aVBHdT9PqrIG>As4=u|~qgIj9cEZ-W@oC2W~hdB!~@^!Dzhc>BZ> zv7VNz*fb5Fk-#zm-kCQ}SZGijWTwn|M(nygC^Ge`X>GtxC4qb+)>5 zkE@=8@OK2*u$dq}Awmm_NY?GS=acHgOOf89Fg>DD=z3Rz!N;iq^7TPVq`VAKcJc+j zNJ54@T&(1aWPi_K;Yy3YTXRWr;&Q?uoIBt}G;OiG=wgUhjm{-&v1Hg5f4S@6ylw^G z0}#`}qWln&Kora0WMBa?EZMeKkhcVnu{B<$1EkYXgg2d5@%1E2CKK?!9M}8KC1dG& z(O~V4C=Op}{RP7ISCO9z!wHLIPEQrJ!(Qdgwu<${mmdAVc=*of{;!pu7ilyrJ!{n$ zB3wIo>f z2TnmW>i;y0MyuslPf;%8)s@U|(c9!hf1;4l6x5@WdzDftd<{BL$xNGKyDcbY*w|5) zIPyyNUC!rU#2Qd(gdMoE!&C6I|15Ch!~ue$z3W+E$c*L_4( z_}KBlQWJyBp__244k0uGMn5vc)jo%xB1=8UJ^*#^VF5flntGv*K7l8|dSaXE@8k*eiaRN4AwVS60^Hl|ZXJ`0qeo1JyRm_D3k}!!#`^Z;sf+GXA9A@UzaF^M5 zBQhN`yzcNu;xn#3qv6k)U!oe3go1lOOC9u_;K^vyDV{ zQ+CRt6U$Dik-)Aes9eG$Q8XmNHzSj65y*Dbyx6o3pT{7rAe!wXg~vl*4aJjATuJeC z4C1=24dS|Ol}=nAzz-&_L@zM%$VdAu5mzQlL|g|F%Id^*Fn;HuPMkF9gho*)MPo^5 z`wxabPOG4haO0*TwOAI4#PW$MI^j)7S=>6Qz3nbC4KR%we>Wi>Q{6(H>XJi;3Yb?^ zn6C?$;n+be33!n)dUkI?t58lD${z2K9`KI&d@#F42rDlJlL^TkKV4zc()c_2z*$EL zb@f5GjcOQT!j1Ekn2=^s`6%aWZRDeLV`Ad+11zD{9N8aYXAai!BecDce0Rk6V38xM zh=vP_u?d;&HE`xAB``Cg7T14z@5H1892K4?p>Kt%G)$TmY&EL5Sw6~*T^~7-e3Xkl z82dJw+W#hOpl&zMjJ&p{txcK-HqYM$RtL0y*jP?E<=yDBRx>NrjbMFElWpVY7?#Lj6JV1FCM+Ncf)G@s5v?NZ19*vs?nbf>>q{+GZLwl&`_k6-r7d7oXcIz{ za1l|d1f?}xUY!_PW2Lac$o{_P%(K^Auy6GL`NLqmq^>2~m{F z5mIbVq?v*z2N+{&-;u!%N~psPqscH()Ht10cYc7G&BCNk!2s6L_(j0@3R{@3g8Js1 zQ@qR~FYS-%Plk|mOa9qK;xW2Z=aMu+cHyHPln9hnib z{RM*kN5*p~#{Q|oIUugXGE4#lH|!)HX%m{2J2Ax(`%4M;=mfh3b#atP8^SVJ*S&zB zvt+`P?503so=V)nv48`-^@qT=Ey-Hp!ab)vz6(zpX)mR~X){t}Y9-9%*eH>VkvVOA0S29&3qGXDZ$2YWJOv=17Gy#|dzOq2?GELbC|W>IXEic@$Vo<%X?v~ecT zC9sYSVTtQJnnm+y3^_5Uol|UvA2UEN;BmCQ4p}XR`4zU-f|ouS#AtA}f=d<)0?9j{ z6*-td>qQDBTSc1cmc+Fu12{oOGA^*(I!pug;B&;d@a4wkNIF#u=dGUstzy4>uTdcU ze(y=Wt)30Iv-bG7eh6@SrMu1Kx?*h`>5g4P-EFC^f$lb&%Z58R^0>_S#vwqvv;3at zK?12_rbLgS*Qmrm=33?BKs-V96b-7R+aQHh0+bK^1P$7dPdAAaGA{;FxIU5;K0FDQ z=d~v75dssL0vJr!{R%_?*nRWaJ#GFxY`@Rdvi`oJ9Ds`bYxmNxARrGaKopX?ho#cm zLsUEfSkBg(!=r|9v)|6B<@XeAwG#|{#8p4C(Q(I9&F}MX!h3X^MwK_h}u!S z%+s)yxGuYiS9yxtpXwR_4W6stO}xmFtmdL?{FR=f=vi#H7%tF*ZxhU|Jq7chH)4m# zLx{l)(#dPR&t>0gFr>iEsg!UuM_zattn3~${7$N2+lhPUAY5#P8j$1mPNxK+Ryn691 z{g;rhb=Lr&RD05Z<01|4`L!nvoXYCH2Ms+XHEuMZ^J??HizUq*D-J!kh7LW%ZV3+L z&Ft#iF=w8}NN%;GBL-6spN}M-^0lXlK_&LK(?H#RdK^6F{9}cqQkdRWljswzJJ+trvGNKWa2#RE_$iZ*l}jDhM222>9qK0kn2u)%f2Y456&h)EPoK zveDUDCW9gi*7Mm}^A|pea=+)|ap(*Y;l8HMpa1_EpMN|R8lV14{_o=x*I|6p5KKNi zKBH0h|F`4gB0Iva$7eepcRfDaFww*3J$1h0Q=by1kSv6>ao$~v@i&<9k#E&=m<6>e zBG&^>e79nz$ucj%nmLUG2R9~ywC^ywr4k&ZXDma^%l&c};-Z0Q-6XP8 zBQwSOI7TOIQBtTw^1olhn+-DcYO<6fxCMmpT)o_h+{t=hj^Al8j0F*Z=?P{|3E}}% zRy>IJ;rV05ol3_6dF>8F1}%!x#TUh>i)PKHKmw!cj$EvuPHo_ePPNxLP8p!$??bPj zlDYLq0tCS+xpRACfUGX&gO_3b-G2GH3;1cIn)u%Ju9)Pw_(Q<`6w7L9H8kl!ul66OT&$Um!d|_g+@zg|w0*fJRzanx<=p9-O%&b^=>D}xBV&=A1nQ;rvG&O{B~0#bstg48D~1}pnIVYDY|Hqw{Yn{a#OXYLE_ zu5nPBCTdr@FMQ>?ij<~#Ms2A3!UY%9;Bgc4;$V4uA>gu-4m>a3mB{*Ucq3Jl_>7Jq zZdUypx<$&_-9fvOLzos0F@@3+4iRRb)9igV1B2t^zbgKDi(SmNsoO!_rFtC12B{%i z2Gz6aCLzK1tOa*e3>9~o--azvjI~b1-`S=KbI({SV6Q;aajyGQ(~2ZvMzS6o>_cHn zj~l?jdBTBtVn5*EJmDbUII)m$aGr3GA2+d(aB!Y*kR3lUHyQ^>BD0IMdF+}dw)1j) zd(6Q)UTem4&BSKxt7*P0exK{=tap8uz4mjW&N^-Pgxe}lYbn7WcT^tJ`obUdoON1j z;MS*4i3OR0$ybm{Bhcv7-Y?pq;h78Kq_aPfU%+p^GeZ7aE7UZzT{ON06sUde;SddFqweL znP`WXgI}VL%xomFC;S9fW=99zr?%L-hsu$457UbC3$SH4st~}rqec9B1egfxBlH(u zzXJmlWKYAUq&#t0bDV%T`aBJxktt8<~%q#oVTjG@EL;7DOam!=UIIRwV=mrh#omJtkF8I4Q9r z{0FcBkpe+(0NH@iJ1*_Yaw;M`pN@;Ss7R1i-aRLZRc5w~`Q>Vi8q^qDSqmMRzm=@& zNeS&;i0~#@?NR=>*h!#`3CLfqMH@4aO|l&!!a20MYpVX}PxCPp9m0}DJ1u`OQdi+{ zW$p9^SEd7m%^+6P$hghzF#|}mEi`}u4M2yyu;xGuS0xvIpHN0~yi2F$AEQXv zX*m`@5n-_5vI?FKn{F`Pf}i6p#GV7VTja_WjUyGWT*uRoZbz@lLc-#kR0osoOl+a6 zObAPQgWUgo8gVQU@vbO!EFY7$V*ey#h;sWH{|wt#7sDrqW&qn){|l3rRX=QBtsD{^9^x#a{!u2@yhUdgGU4hI&!}Om-ip5zZ&y~@s zhX{upUJPkW9a}Ur4+jf7Sg=b6;-rXOw4B8IVmmW;ux4IPzsZ_8lP@BynU(!M>FWYy z%sdItm5(gVe)8At%$V5&OuBgx*q)hcSN6KUrFbG25_ zC=>d@o=+3l(2l`jL%U8qWDxm8B#MPLFYmo7FegNYYG0Qp;@DMlT@gZw4ETe1nl#FCxF6Gm>tl=JA$U30{)JX2Sewl8y($Hpn1gHZIkv(|jlF^oA=Y6; zdY@Ai8plzdhEQyz4ueFCRa4OpRJzDu60~S7C_~4z+c3sXnP?>6(Mm7#bGjE0_=IEt z*vlwySc$VL#YEmIzhtcB8G_>a&!>)7NaC- z(ZZgmUiM{~P_YCMxhT0CkucC_T;0J}aEl`o-^F;I*1VsXEMDwn^11pQqoKLEodi(y z7O@6Ac|V$i2+W&NwBtT2v#8IFF#7(`waTv9G>4mlnA{9BfO*wj$&^hgFhLv=k{R8+ zO2@sUSu-p{LluN2`0-H!Du!&n512n`> z1)EAm<@x~=O{J@*4r_W-0vFLppHTMgAf4>0yF+@*fEe_a&juY=OixA>(~}&{vRK#Q zq-_AhGG_)eJ{?B`5yB|_A7S1@RTwfYWPSJHhiQ+zA1~NBC|Gpd44&Odu(b^FZVA&nv*uuX z4)^KtES!-W((wWg`mRDqI^sPlipk5gk{aa3=W(Lpa7-KM#*B=bX4BakxFD1C0twtx zkOfc=vq_Orv|p?6pU7U3Od(Q!k%6kOCvhsms_+S4v&<3)yv8k^#DSu)fRqR5ZTY|^ z*wGL~R-s!`4A4yCir5s5x z)MW%1HOo0KMfMnBhT)91&`e#OMOg~o25$!ER%G!MoEyfgodQQJy_%nbBxfRH8)C|U zvLKHlwK8h;2-romi?=Dz44hmpDC8mu=CEI3Z`1rPV5l{eD@q*3i5E2Zj1>m6qy|;)ok1-7AX<-J07q*gKTVfVmKAH$ExQ+?scgpVp5f{lj{%aIb z{61MqG5(2x1mcUl3n`WwNqO!gJyy_8_jKu27?uSya0SEON3dIzOq1xmeA-3hz?Xk4 zARU$;!Z!LzIxHnPB%73`R7wdMJ*wK*UDe}XAWMM%E7W84s$)=*{WU5L;voqqVZvrCLXLp_?Ghoa&>a8Yp?<8p zs!#W*>dU*U`nDcbT{pNJgq-P7)%T(5u!O?jp|0pj92_~D<5<)H38c0JD;PbmZQVg_ z`aw^Iar>Zd5Yp746M*b%ug3Y^Rc-DO)PaHBKrMR&^(&}4JdCHpbwv$RIEERv!Olmv z<1pUR9n@sU@qb^9|HKg{20-Fx3`|tpdsOugyQ|vJqhTE1UDeO`2c!nveSeRt?$uq@%X?JyuWbq;Vd}TJLw%i-I&2CUdo_BU zZeTO@sypTRUg^-vf3nM*v34_zkM*eP7rLvuyhl|}?yhQAkE%Y|FLDE0(`j8Xgn+qg z+A5g8j$V_I{BaRad>!6YgniUxkpE4b1s9P|j^s zz~<^zcS`vz|J9Ro_&zv1zOflGnqg*cbs%%fma~RzSARX)0{O~)x`fJpjTDtC-NItZ zwXgs}{ePV=poB=yaIS^qSQ#G$E>L+E27dWD0?=6yAn0T37BjrB$ho+*>SLG(ZCFoH z_fXQS?W}WDBSocIK?irLh-~MWu^p!d1%jR<^S46Mr6C9`;mTP&r%2WvB^i}XM_K74 z^suhYeIa4>XzPwATNTzMzJjSM`9(@y>5C^lt2rhTv;H_;jv$e)9*LQ5QY2YYVme&h<8THECJ@207BD{8ZMm011HC=$}TF5S>rwajoFpCPX=Bd(MF z8SyU;Hb)!!p?9P4pnx&OEj&=H9QnKj4dWfd zt)5MI1DZ8T4W%9OnQCDWV{ddlx^x31)wkS-$SHm(4i}4==C#M!2)C`DHe2MO-aVtp zdCcCha;lj2U&HlSPKlxw)wE=iK}`Xs|Eo@U=D*MYQr{i&Ikq_E$M_YvF_4K!iXuNl z=DkFIyRJU&TC;uOPEAm#XJj%Jb-K4Zm`FQj-3=0gPObwDKU1;+SzgLqHBlV zRBPwxx$f5vm4wc>&QXcXBn>`}xZ`zf)5&TTlhv&q*UnbJUL-BQC8Ek*;mjoK-`7_T zW93?)BAA(k%TQ*Ldkt!h%*Z~Q6Hf1{KTenDNo1>MCZU_OM$Gs|evaMNX%`@nzD6Y^ zact-;TKVSKoE%Uw$)d{uCC6Kl3ouYB%CemerJ^Y?L;XC8w2VhgORv_*GJk}xZ1=+D z11T|QiTx@&iH!R$U<#%piLks8bCY2SXG0f|Q_U98_6Xw~iUJq3!kLuGnjFrq9zoyF zIxI$3<5)d^2W^7^6Y_LI;;Bmy|Xg zyl9DDa>DhoZh!ph5KUh6?~Bf>Fil?j@9yVSBu&=-Gn!l^xBZ&tl_JPR%lgW3(3*uQ z^7}W0=T(UICb3&>m$dh1ki~z~wD-brMSBx~_lwZpsVEYnz2viHV6PVhF2y!-+Kgie z4J_COs5mil4unL$z>29)pAIReU@F7(H`*T;lf;He0)Jap77?i>Wsz>V^&+VoF<;h4 za|X~*kVA$%4eL7nGU%P0q@f*9qb0pr+I-AB$Ttx6&$bPF|$c3wsJF}b4%?noTa z0O71R%Okhpr)8sZ()wU7DZDqUNC5Pb%wGf(VkFf@C$jdE8xD*v1ZUeoeIDJ^0TC1@ zaI|aJ2_jg%dNo=Cb9$G4zMc2k9Z%2yh4A%!1F9<)^Cc5z%nnOmHRZ&!%*M zYwN;q5w4L0*Kobo z`iKn)05i8@Qqk18U#~muo2h#jXhdm--Y1)0cf*2j1nxVj?pN+s(Lc5kg2MRv>n!{{ zuv+zL9z8p-vCgVx;SZ4sXZ*6V7loNEb%>Nc4{>OI!@i=|_oCHW1#}7I2Gq{>v06!Y86SsehaLtW`tBOz;hU@6e z2)K?Bko=58z3ifAx8cA|xU3F6K=0)bQ>37p3I?BKb?D9I-)3(%!oa8W`NeAV&qYI=LJ%+ccoWZzVR#lj z`d)0R-x`T(9|O2<)knA_8m{tN0oQH%GdF;YhU;@|s^1!1O8}Rcs&jExPa26MvXRA} z7Ecx7D?H#wXG9F^9X$FvC4HMZ5FGF+ssnN&!2Sky(f7^)aY2YiM?;iH5Cv)bJ_bUE z=qCCRr0rYrgZi@t`{XwOQ4T@0SRby9)KC~l+owlhVtgb-zlp@&2nA6D?`Q#R-`XHQ zaa9DwCkT)*#PI}i5Qk4PkU9?A=t&TV_v1q|X< zSteF{SpEg18TkAa8NV@f{#v++4lx}LUx&~S`CuUtk!;`~f#Zw~!eJ2EwCNc{)QC3+ zX)zyqx%5L<()ny0K*zuZ&u1h`zR3A(IhI_^`D_qPh45UyF)#R&nUZw+8Dyl!O`ouSLn}sfggXPfAW78+VOC3d`v+G!b%oJ(%f5Cr>^= zlgTu6UFU_IOON%*Gh;-Az=zN8o1*5=oTnC=an?r2&o=9hT6e3_Tjp_B4^+O^J{7)> zvLRwh!L#Fjv>rX1Ap9YtdU^S+7XqFSm65fz;w=(o=F!~hLvzdO*-1AlD6Xk0ADlr4 zaHsnj6f=36(@@dObV?j+bjnAIm+&w4_n{lVo`)MMid(_+Vs0e_c2|iwyJG_^f~T15 zj*T62w;e&?WC)~C*v&qfF#V?$>bhPez_Sfk2)~wVLJU^AnHrmgJp8tL&HjEz&ya8# zJ3IbaJ>SO|M1wUrHXl*&r6lD|o5N<#obFDk!G z<#0h-1QqXh8m?3!*8O;ug=7-@I3R^l3LZ~j!}Dn8OKOW(9?4p1d9vPfNSC;$KL-5qzqB+OgcD6-bzWv+D@5H81oCKjL|#a>RC@c3v#VhJiVGl(gd3mpYAMGg8F`bsPi|VXcj=#}TVMfLGsYpOe zrIcf~xu3|!)hb*qGtQCk4H^t1b*~1mb*tx2+?)e@`9&iJlTIwDh)iYhehA;xU-i@x>RkGD0 znf62I*cb%Lx2@~EFnk|~;%tb^GsW034Up#PYOiMWH*)Yg*L;;HD(Pz_dU_G*>t9er zm%erq5Azh(OL#vQ4s+1u5F{DK|Ik3>O+#|V4!Pu!)#flzQ9ja48BMe_rS3J>$b>Xw z6={Hxeivy+J%vS`#Rc%O?8gV(D)wkal8ho zA9amy1Gc_;M|DT7RW)neik>0u0(Yf&&ay=L{+l|Z#dugV0zG>)*+6P;E<>8#KmIQj zF^iJyvs1%bEB$f0oOTE1U`aN(HDvt+iZEw5aD+HSMCyI-+`}MJ*AaEXEZ?G2sE8>Z z&Q;^k zI~fEFW(Mm&SY~)LHR(P>)g_pVErZ@n9fE6w^)$5fd2_Q3*H&CBlLqpofl&j@8NfY9 zc~lqcgePk%u+gnr$-8h%hqTYeA~}BpC{anan5z4#52eUUXTalR4}eq0vR*}4$v5a_ z6v4t!GQkQCCDPi2hB8F3A~zeP(t@&{2JXg@!9;C?F02v-*TL zM_}o2XInD4h&fJmz*4oWnnKtizR%7Hj-w|!H~nuE(dju^$%OxL{~OU$<-gOe`|qs4 z6a+?EIl{rQQXXmq07u>`HtZ+VL=wlK|IWc|LPk0ukzWi!X9008rVTQHY75Hmkxdci zO$VqBGA2B<<%e|MI?ODagFqoQ)d8$CzyLd&ChVWenTNI=dUh<**l^g#Xp+}A_I9FQ zUdI_-74OGcF?vR~vJSq|hgqed+(l6G;hMVILo=rKsN<2ZpjGxW(EQyj2Vs(2#EfYU ziiE=`ga(Mmrvd$r9v_PupK5)4n)-+RtH|+!5EU~%<7rT?y_v>`FXyBXBSM#76K`Y^ zR=A!p$M3uGzQP;<5sNu0qWs7^HvpT2=OM8~M@O_)dHBLeU~a2C28h*~v2$Fc=()|1 z48f!eVUF=d@ejlNiHgLviwM4O*u+AMmxUN)TjSV_q&zsxi30PSSt1YiVOwBD!>;5F zFu5Un8Tc$Z_JH8Qo`JJ-VlQa*aWHYGms5s&Uu*ya+-YVhdEv9K5TAxl*`NY$K4|M9 zYWU=xhfrR~Ik67likYUR0AMK;fVcz@HBGjx9MdR+A>MEu?pbM{a8kir5Ht84zx#MQ z((1;E-UybxS?}hk$1Pu(uD+ zz_WZ08R3uolraYke%qLXEmL4VgV*m+{p^JaNls0xcK(Fb8dy=##` z(rY^XIpx_8yMr}72EaAmVXpn{PFV_#$`>^^$aSApj5V7m_2{yb{;J$oDa zB*r7zppRvE@o#&X$|JZAGm2x*d6~EKK1*kR_l49|!w|9#=WyPA93zl^l%FfM66t%B zii(}`l??EBd>^YIzAm^QA!{KC2oyd|VvoyOZ#Z-SW*XV1Uchk6CG`eMRgIq{J&=Qs zoS>mn+fHW#mSB`4(RYMB*er(vlPa~diW{deL21_hNw^HaoXpgGlGcVYJ*tMa=9xZV zUpPl{3fLF6))Y5-x1XU>g`KT`AhDbijnV!om@bjE+2mASYdPV?VhwEPb=V-E$&Feu zDsH?l2XU}yIS1DrzlnncE)KTqly#SJ zyM>*#J2bjo*YHrA6n`(e-SC=yWfG=z-f)xacAt_J`3jTeOK-q8oyK7~Ant4&5ToKJ zm}fi=vuVPqa9)GIcLd>)$0;rH`LURQo55m>LWDW5k!H|UE9`A|rz5)pZe^P&wp>j! z=13aN5p=sR9{-#kXR>9akM3u^3ktn)xA$4X9!xs7r{KHdEDprGPGi`t8>5q6Q^qRaMzXaDXf%B@v+KondGR!~w z;B>1ADMX~20Gy%*o#7n>Yb4Mr3Qofcv7j}W8u$zbLdstarPRQu1!KxP!Ru?x%7Grgd(HmK{8q- zude-^2-&&pbU&&Sj4bQ3)sXBBE}R*}9hNvFx49aFq2?oCxJgZrONgvzU8Cj*qGW_8 zlOnG2yBy4RcxaOJlf6(nVuL=LfyJ?%2imcjW*UNRs1etv*<74vqo-LdUO`huPWgI1 zPcs5yGIm<=A`P5q8*aB&4jKEL$?Pn($w6EZ*K+tm6w_>GBv4`Q!d49Vq{#3i<@>kUv_2@WqTa9ifaUbin%k{{@FBkoT(;^9^W1M6mmD#TZkO!$fw9 z;zZQ8SjQ_6k)O>f@{iT?7T)qrN%3+fB%Dgt6AV87C3kH_p6&*DwlE*wAKqQ3@TmL= zvq8JGd>1WbgKLGF_|kOC#{s?SmPL^8oyq?=pqCL1u94z8@vuoRdK8bmnQG#C*O&y? z+L9vl35y_?DiE%!&PeTnyuK}8#(Q;nW<&X|jR1qB#}xfNAiZ?Ig6}EL$H#1vG%DDC z{2)80%*06Bv|HS#;fF-)LL6|)kHDiUv?^*!<^h505Pzo<@sV)EaPLX=aS~^z9OpU8 zBVoDwNT7KDW@iuqWA$Fe1BzvFs%f5bKIVB8g?Gx^UIGSjLZ+=&4^pdALp%WYtJ&g%M?^(LpT5lo-0-G$zTG{RjvQBUZr$IQZLDkDF0OM@GUmiTp!Os+~_>kg%M`+@7KjfdeGjpk)Bj#9I*hf$&6mBX!0G zKfgqoF$$Nxa$Siq>G4^o=tViDFXGcNS4@tzWz z(wk)gc2)%`IMN6OI31!pWYR@|-MSLCNAiDpl~EuzTZ#elK?>gHFslG#&^!c|rw5j2 z$l8`bfP%M$B(Lg%<%u)_!}3JZcj`HBP8$aDl!JgSje|qtva#%G*cIS(Nm#Nhfdh(?|Ax_8t9a#TW=;gs+GN(nO@h&xKWwazkzG5-!w z$>_+(1<`ls9Z{HnIaM*s0geMo?G;Bh_XixUu>mUXnniHS@dAyJA6$uARK9{Uysnh( z-$fSH&;4pqMXi}RMdI^fWG;VvjVLk6DO7}l{u1w$=$+ubo!nb6KyYEv-CKsMU)Y`L zX0rN%ZUN(3^w^l)5Xi2u`lcAYxsQ2gno1UV`!1+e*`gf-C|fkvr~C9YQjQ>P&1tc6 zjVMCub+h{sFvz1s9BH@_fY;F=rX+jk?(|u*#T2v8R0%5uc*6S}J6nc}>9Dg(US^o> zGi8H`bwZ%NQ$CvtPGaR6E37$+ARi{5K-7vgcvvhv{Dt-LY#Y^mhU;#{>r1WgBiy%k z$~(6`q7DDj4LCK97LH>R;z@beG+}Bdk$qte)J{aA%x?f=FclBZA&-*68l z?4MJ7(e`F+DKMWpEvBpy%T1!tgcS2e(GNOAs6_(P9}BFq$))E3QLfpzEY)3Pfr!(} z5L%RSvsTTAbm(@%CMjhIMA_Img`BDKtPZeN{2U}jtj>pUqMw*K$z3yEKJyc>%B%Cw z)scL`>N$%eO~g}I5+sUMguJrob& z$z~tPUhoVE(;p8meKqvB6atpuW6C+$el|PJ2%+CWInRpNq@gOidIuUJ9MWc)#VwYa z<8j`($9$%wn&vqBA#2{-qAbN*&_u4m;)ATS0d07(z8z+fmX8)|u5W<}0tma-q&4Zg z43zW-<^3l=gRB9wI#zourau_!xYNXkItWE$=lB6@3z*lf3?(v2W zLdAkJ0F#W#I*pR?NvlYNJ{O}C9YBB>Cp~IHr!R_w2om5vj_Ga^b?zoCe1G4XzOCYd zS8H;A(h7bVV6U$28f*yeFQYeG3FeM%gHCnYE`=tz0Sm0-8^HDi?XW zhGYD6;A;E~!j(Q81;ed7+C+oMPIe#vvgVVxzA)8m_Z76uhrzaEn{|z&ANTW*IMy=bQQ%*Z;4}4hwhY26WAbgn;U81b zR3qc<4XZClZVI#^A6SPV#|2203{3)p>dFVWtutt#;$3ZUDME4R;jZ`0;hxVuO&~f_ z0@)V##DFV4kZ<#jt)HTAW)|-wCQ)__GZ2db!gpE?kCjBOhKjGSkb_$b9|-t7(1d