From e988607372b3c1fab149e445468727ae3b61311e Mon Sep 17 00:00:00 2001 From: cherry530 Date: Sat, 19 Feb 2022 10:53:08 +0800 Subject: [PATCH] Upgrade 3.1.3 Signed-off-by: cherry530 --- CVE-2017-9110-9112-9116-12596.patch | 96 --- CVE-2017-9111-9113-9114-9115.patch | 436 ------------ CVE-2020-11758-to-CVE-2020-11765.patch | 671 ------------------ CVE-2020-15305.patch | 16 - CVE-2020-15306.patch | 130 ---- CVE-2021-20296.patch | 26 - CVE-2021-23169.patch | 34 - CVE-2021-23215.patch | 83 --- CVE-2021-26260.patch | 41 -- CVE-2021-3474.patch | 33 - CVE-2021-3475-pre0.patch | 27 - CVE-2021-3475-pre1.patch | 29 - CVE-2021-3475.patch | 35 - CVE-2021-3476.patch | 70 -- CVE-2021-3477.patch | 25 - CVE-2021-3478.patch | 35 - CVE-2021-3479-pre0.patch | 174 ----- CVE-2021-3479-pre1.patch | 171 ----- CVE-2021-3479-pre2.patch | 680 ------------------- CVE-2021-3479.patch | 550 --------------- CVE-2021-3598.patch | 26 - CVE-2021-3605.patch | 27 - OpenEXR.spec | 66 +- openexr-2.1.0-bigendian.patch | 63 -- openexr-2.2.0.tar.gz => openexr-3.1.3.tar.gz | Bin 14489661 -> 20322346 bytes 25 files changed, 23 insertions(+), 3521 deletions(-) delete mode 100644 CVE-2017-9110-9112-9116-12596.patch delete mode 100644 CVE-2017-9111-9113-9114-9115.patch delete mode 100644 CVE-2020-11758-to-CVE-2020-11765.patch delete mode 100644 CVE-2020-15305.patch delete mode 100644 CVE-2020-15306.patch delete mode 100644 CVE-2021-20296.patch delete mode 100644 CVE-2021-23169.patch delete mode 100644 CVE-2021-23215.patch delete mode 100644 CVE-2021-26260.patch delete mode 100644 CVE-2021-3474.patch delete mode 100644 CVE-2021-3475-pre0.patch delete mode 100644 CVE-2021-3475-pre1.patch delete mode 100644 CVE-2021-3475.patch delete mode 100644 CVE-2021-3476.patch delete mode 100644 CVE-2021-3477.patch delete mode 100644 CVE-2021-3478.patch delete mode 100644 CVE-2021-3479-pre0.patch delete mode 100644 CVE-2021-3479-pre1.patch delete mode 100644 CVE-2021-3479-pre2.patch delete mode 100644 CVE-2021-3479.patch delete mode 100644 CVE-2021-3598.patch delete mode 100644 CVE-2021-3605.patch delete mode 100644 openexr-2.1.0-bigendian.patch rename openexr-2.2.0.tar.gz => openexr-3.1.3.tar.gz (56%) diff --git a/CVE-2017-9110-9112-9116-12596.patch b/CVE-2017-9110-9112-9116-12596.patch deleted file mode 100644 index 691a6e3..0000000 --- a/CVE-2017-9110-9112-9116-12596.patch +++ /dev/null @@ -1,96 +0,0 @@ -From 49db4a4192482eec9c27669f75db144cf5434804 Mon Sep 17 00:00:00 2001 -From: Shawn Walker-Salas -Date: Tue, 30 May 2017 19:07:52 -0700 -Subject: [PATCH] Add additional input validation in an attempt to resolve - issue #232 - ---- - IlmImf/ImfDwaCompressor.cpp | 7 +- - IlmImf/ImfHuf.cpp | 10 +- - IlmImf/ImfPizCompressor.cpp | 6 + - 3 files changed, 18 insertions(+), 5 deletions(-) - -diff --git a/IlmImf/ImfDwaCompressor.cpp b/IlmImf/ImfDwaCompressor.cpp -index 1c1bd454e..2ef88786f 100644 ---- a/IlmImf/ImfDwaCompressor.cpp -+++ b/IlmImf/ImfDwaCompressor.cpp -@@ -2377,7 +2377,12 @@ DwaCompressor::uncompress - - const char *dataPtr = inPtr + NUM_SIZES_SINGLE * sizeof(Int64); - -- if (inSize < headerSize + compressedSize) -+ /* Both the sum and individual sizes are checked in case of overflow. */ -+ if (inSize < (headerSize + compressedSize) || -+ inSize < unknownCompressedSize || -+ inSize < acCompressedSize || -+ inSize < dcCompressedSize || -+ inSize < rleCompressedSize) - { - throw Iex::InputExc("Error uncompressing DWA data" - "(truncated file)."); -diff --git a/IlmImf/ImfHuf.cpp b/IlmImf/ImfHuf.cpp -index a375d05d8..97909a5b1 100644 ---- a/IlmImf/ImfHuf.cpp -+++ b/IlmImf/ImfHuf.cpp -@@ -822,7 +822,7 @@ hufEncode // return: output size (in bits) - } - - --#define getCode(po, rlc, c, lc, in, out, oe) \ -+#define getCode(po, rlc, c, lc, in, out, ob, oe)\ - { \ - if (po == rlc) \ - { \ -@@ -835,6 +835,8 @@ hufEncode // return: output size (in bits) - \ - if (out + cs > oe) \ - tooMuchData(); \ -+ else if (out - 1 < ob) \ -+ notEnoughData(); \ - \ - unsigned short s = out[-1]; \ - \ -@@ -895,7 +897,7 @@ hufDecode - // - - lc -= pl.len; -- getCode (pl.lit, rlc, c, lc, in, out, oe); -+ getCode (pl.lit, rlc, c, lc, in, out, outb, oe); - } - else - { -@@ -925,7 +927,7 @@ hufDecode - // - - lc -= l; -- getCode (pl.p[j], rlc, c, lc, in, out, oe); -+ getCode (pl.p[j], rlc, c, lc, in, out, outb, oe); - break; - } - } -@@ -952,7 +954,7 @@ hufDecode - if (pl.len) - { - lc -= pl.len; -- getCode (pl.lit, rlc, c, lc, in, out, oe); -+ getCode (pl.lit, rlc, c, lc, in, out, outb, oe); - } - else - { -diff --git a/IlmImf/ImfPizCompressor.cpp b/IlmImf/ImfPizCompressor.cpp -index 46c6fbace..8b3ee38c3 100644 ---- a/IlmImf/ImfPizCompressor.cpp -+++ b/IlmImf/ImfPizCompressor.cpp -@@ -573,6 +573,12 @@ PizCompressor::uncompress (const char *inPtr, - int length; - Xdr::read (inPtr, length); - -+ if (length > inSize) -+ { -+ throw InputExc ("Error in header for PIZ-compressed data " -+ "(invalid array length)."); -+ } -+ - hufUncompress (inPtr, length, _tmpBuffer, tmpBufferEnd - _tmpBuffer); - - // diff --git a/CVE-2017-9111-9113-9114-9115.patch b/CVE-2017-9111-9113-9114-9115.patch deleted file mode 100644 index 2eccaab..0000000 --- a/CVE-2017-9111-9113-9114-9115.patch +++ /dev/null @@ -1,436 +0,0 @@ -Backports of - -From ec64836c2312b13034149acab499c112bd289cd9 Mon Sep 17 00:00:00 2001 -From: Kimball Thurston -Date: Sun, 21 Jul 2019 17:56:30 +1200 -Subject: [PATCH] Refactor origin function to a Slice factory and Rgba custom - utility - -From a7eec54765e9122b78a6c34bb9d5bf744631bea2 Mon Sep 17 00:00:00 2001 -From: Kimball Thurston -Date: Mon, 1 Jul 2019 22:11:34 +1200 -Subject: [PATCH] merges common fixes and move bounds check to central location - -From 45f9912e6cfa0617ec2054d96d1e1e73fad4a62a Mon Sep 17 00:00:00 2001 -From: Kimball Thurston -Date: Thu, 27 Jun 2019 23:36:09 +1200 -Subject: [PATCH] Fix part of #232, issue with pointer overflows - ---- openexr-2.2.1.orig/IlmImf/ImfFrameBuffer.cpp -+++ openexr-2.2.1/IlmImf/ImfFrameBuffer.cpp -@@ -74,6 +74,88 @@ Slice::Slice (PixelType t, - // empty - } - -+Slice -+Slice::Make ( -+ PixelType type, -+ const void* ptr, -+ const IMATH_NAMESPACE::V2i& origin, -+ int64_t w, -+ int64_t h, -+ size_t xStride, -+ size_t yStride, -+ int xSampling, -+ int ySampling, -+ double fillValue, -+ bool xTileCoords, -+ bool yTileCoords) -+{ -+ char* base = reinterpret_cast (const_cast (ptr)); -+ if (xStride == 0) -+ { -+ switch (type) -+ { -+ case UINT: xStride = sizeof (uint32_t); break; -+ case HALF: xStride = sizeof (uint16_t); break; -+ case FLOAT: xStride = sizeof (float); break; -+ case NUM_PIXELTYPES: -+ THROW (IEX_NAMESPACE::ArgExc, "Invalid pixel type."); -+ } -+ } -+ if (yStride == 0) -+ yStride = static_cast (w / xSampling) * xStride; -+ -+ // data window is an int, so force promote to higher type to avoid -+ // overflow for off y (degenerate size checks should be in -+ // ImfHeader::sanityCheck, but offset can be large-ish) -+ int64_t offx = (static_cast (origin.x) / -+ static_cast (xSampling)); -+ offx *= static_cast (xStride); -+ -+ int64_t offy = (static_cast (origin.y) / -+ static_cast (ySampling)); -+ offy *= static_cast (yStride); -+ -+ return Slice ( -+ type, -+ base - offx - offy, -+ xStride, -+ yStride, -+ xSampling, -+ ySampling, -+ fillValue, -+ xTileCoords, -+ yTileCoords); -+} -+ -+Slice -+Slice::Make ( -+ PixelType type, -+ const void* ptr, -+ const IMATH_NAMESPACE::Box2i& dataWindow, -+ size_t xStride, -+ size_t yStride, -+ int xSampling, -+ int ySampling, -+ double fillValue, -+ bool xTileCoords, -+ bool yTileCoords) -+{ -+ return Make ( -+ type, -+ ptr, -+ dataWindow.min, -+ static_cast (dataWindow.max.x) - -+ static_cast (dataWindow.min.x) + 1, -+ static_cast (dataWindow.max.y) - -+ static_cast (dataWindow.min.y) + 1, -+ xStride, -+ yStride, -+ xSampling, -+ ySampling, -+ fillValue, -+ xTileCoords, -+ yTileCoords); -+} - - void - FrameBuffer::insert (const char name[], const Slice &slice) ---- openexr-2.2.1.orig/IlmImf/ImfFrameBuffer.h -+++ openexr-2.2.1/IlmImf/ImfFrameBuffer.h -@@ -48,14 +48,15 @@ - #include "ImfPixelType.h" - #include "ImfExport.h" - #include "ImfNamespace.h" -+#include "ImathBox.h" - - #include - #include -+#include - - - OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -- - //------------------------------------------------------- - // Description of a single slice of the frame buffer: - // -@@ -147,6 +148,36 @@ struct IMF_EXPORT Slice - double fillValue = 0.0, - bool xTileCoords = false, - bool yTileCoords = false); -+ -+ // Does the heavy lifting of computing the base pointer for a slice, -+ // avoiding overflow issues with large origin offsets -+ // -+ // if xStride == 0, assumes sizeof(pixeltype) -+ // if yStride == 0, assumes xStride * ( w / xSampling ) -+ static Slice Make(PixelType type, -+ const void *ptr, -+ const IMATH_NAMESPACE::V2i &origin, -+ int64_t w, -+ int64_t h, -+ size_t xStride = 0, -+ size_t yStride = 0, -+ int xSampling = 1, -+ int ySampling = 1, -+ double fillValue = 0.0, -+ bool xTileCoords = false, -+ bool yTileCoords = false); -+ // same as above, just computes w and h for you -+ // from a data window -+ static Slice Make(PixelType type, -+ const void *ptr, -+ const IMATH_NAMESPACE::Box2i &dataWindow, -+ size_t xStride = 0, -+ size_t yStride = 0, -+ int xSampling = 1, -+ int ySampling = 1, -+ double fillValue = 0.0, -+ bool xTileCoords = false, -+ bool yTileCoords = false); - }; - - ---- openexr-2.2.1.orig/IlmImf/ImfHeader.cpp -+++ openexr-2.2.1/IlmImf/ImfHeader.cpp -@@ -785,30 +785,46 @@ Header::sanityCheck (bool isTiled, bool - throw IEX_NAMESPACE::ArgExc ("Invalid data window in image header."); - } - -- if (maxImageWidth > 0 && -- maxImageWidth < (dataWindow.max.x - dataWindow.min.x + 1)) -+ int w = (dataWindow.max.x - dataWindow.min.x + 1); -+ if (maxImageWidth > 0 && maxImageWidth < w) - { - THROW (IEX_NAMESPACE::ArgExc, "The width of the data window exceeds the " - "maximum width of " << maxImageWidth << "pixels."); - } - -- if (maxImageHeight > 0 && -- maxImageHeight < dataWindow.max.y - dataWindow.min.y + 1) -+ int h = (dataWindow.max.y - dataWindow.min.y + 1); -+ if (maxImageHeight > 0 && maxImageHeight < h) - { -- THROW (IEX_NAMESPACE::ArgExc, "The width of the data window exceeds the " -- "maximum width of " << maxImageHeight << "pixels."); -+ THROW (IEX_NAMESPACE::ArgExc, "The height of the data window exceeds the " -+ "maximum height of " << maxImageHeight << "pixels."); -+ } -+ -+ // make sure to avoid simple math overflow for large offsets -+ // we know we're at a positive width because of checks above -+ long long bigW = static_cast( w ); -+ long long absOffY = std::abs ( dataWindow.min.y ); -+ long long absOffX = std::abs ( dataWindow.min.x ); -+ long long offX = static_cast( INT_MAX ) - absOffX; -+ long long offsetCount = absOffY * bigW; -+ long long bytesLeftPerLine = static_cast( INT_MAX ) / bigW; -+ if (bytesLeftPerLine < absOffY || offX < offsetCount) -+ { -+ THROW (IEX_NAMESPACE::ArgExc, "Data window [ (" << dataWindow.min.x -+ << ", " << dataWindow.min.x << ") - (" << dataWindow.max.x -+ << ", " << dataWindow.max.x -+ << ") ] offset / size will overflow pointer calculations"); - } - -- // chunk table must be smaller than the maximum image area -- // (only reachable for unknown types or damaged files: will have thrown earlier -- // for regular image types) -- if( maxImageHeight>0 && maxImageWidth>0 && -- hasChunkCount() && chunkCount()>Int64(maxImageWidth)*Int64(maxImageHeight)) -- { -- THROW (IEX_NAMESPACE::ArgExc, "chunkCount exceeds maximum area of " -- << Int64(maxImageWidth)*Int64(maxImageHeight) << " pixels." ); -+ // chunk table must be smaller than the maximum image area -+ // (only reachable for unknown types or damaged files: will have thrown earlier -+ // for regular image types) -+ if( maxImageHeight>0 && maxImageWidth>0 && -+ hasChunkCount() && chunkCount()>Int64(maxImageWidth)*Int64(maxImageHeight)) -+ { -+ THROW (IEX_NAMESPACE::ArgExc, "chunkCount exceeds maximum area of " -+ << Int64(maxImageWidth)*Int64(maxImageHeight) << " pixels." ); - -- } -+ } - - - // ---- openexr-2.2.1.orig/IlmImf/ImfRgbaFile.h -+++ openexr-2.2.1/IlmImf/ImfRgbaFile.h -@@ -60,6 +60,65 @@ - - OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -+//------------------------------------------------------- -+// Utility to compute the origin-based pointer address -+// -+// With large offsets for the data window, the naive code -+// can wrap around, especially on 32-bit machines. -+// This can be used to avoid that -+//------------------------------------------------------- -+ -+inline const Rgba * -+ComputeBasePointer ( -+ const Rgba* ptr, -+ const IMATH_NAMESPACE::V2i& origin, -+ int64_t w, -+ size_t xStride = 1, -+ size_t yStride = 0) -+{ -+ if (yStride == 0) -+ yStride = w; -+ int64_t offx = static_cast (origin.x); -+ offx *= xStride; -+ int64_t offy = static_cast (origin.y); -+ offy *= yStride; -+ return ptr - offx - offy; -+} -+ -+inline const Rgba * -+ComputeBasePointer (const Rgba* ptr, const IMATH_NAMESPACE::Box2i& dataWindow) -+{ -+ return ComputeBasePointer (ptr, dataWindow.min, -+ static_cast (dataWindow.max.x) - -+ static_cast (dataWindow.min.x) + 1); -+} -+ -+inline Rgba* -+ComputeBasePointer ( -+ Rgba* ptr, -+ const IMATH_NAMESPACE::V2i& origin, -+ int64_t w, -+ size_t xStride = 1, -+ size_t yStride = 0) -+{ -+ if (yStride == 0) -+ yStride = w; -+ int64_t offx = static_cast (origin.x); -+ offx *= xStride; -+ int64_t offy = static_cast (origin.y); -+ offy *= yStride; -+ return ptr - offx - offy; -+} -+ -+inline Rgba* -+ComputeBasePointer (Rgba* ptr, const IMATH_NAMESPACE::Box2i& dataWindow) -+{ -+ return ComputeBasePointer ( -+ ptr, -+ dataWindow.min, -+ static_cast (dataWindow.max.x) - -+ static_cast (dataWindow.min.x) + 1); -+} - - // - // RGBA output file. ---- openexr-2.2.1.orig/IlmImf/ImfScanLineInputFile.cpp -+++ openexr-2.2.1/IlmImf/ImfScanLineInputFile.cpp -@@ -522,14 +522,14 @@ LineBufferTask::execute () - - if (_lineBuffer->uncompressedData == 0) - { -- int uncompressedSize = 0; -+ size_t uncompressedSize = 0; - int maxY = min (_lineBuffer->maxY, _ifd->maxY); - - for (int i = _lineBuffer->minY - _ifd->minY; - i <= maxY - _ifd->minY; - ++i) - { -- uncompressedSize += (int) _ifd->bytesPerLine[i]; -+ uncompressedSize += _ifd->bytesPerLine[i]; - } - - if (_lineBuffer->compressor && -@@ -626,11 +626,11 @@ LineBufferTask::execute () - // - - char *linePtr = slice.base + -- divp (y, slice.ySampling) * -- slice.yStride; -+ intptr_t( divp (y, slice.ySampling) ) * -+ intptr_t( slice.yStride ); - -- char *writePtr = linePtr + dMinX * slice.xStride; -- char *endPtr = linePtr + dMaxX * slice.xStride; -+ char *writePtr = linePtr + intptr_t( dMinX ) * intptr_t( slice.xStride ); -+ char *endPtr = linePtr + intptr_t( dMaxX ) * intptr_t( slice.xStride ); - - copyIntoFrameBuffer (readPtr, writePtr, endPtr, - slice.xStride, slice.fill, -@@ -836,14 +836,14 @@ LineBufferTaskIIF::execute() - - if (_lineBuffer->uncompressedData == 0) - { -- int uncompressedSize = 0; -+ size_t uncompressedSize = 0; - int maxY = min (_lineBuffer->maxY, _ifd->maxY); - - for (int i = _lineBuffer->minY - _ifd->minY; - i <= maxY - _ifd->minY; - ++i) - { -- uncompressedSize += (int) _ifd->bytesPerLine[i]; -+ uncompressedSize += _ifd->bytesPerLine[i]; - } - - if (_lineBuffer->compressor && ---- openexr-2.2.1.orig/exrenvmap/readInputImage.cpp -+++ openexr-2.2.1/exrenvmap/readInputImage.cpp -@@ -194,7 +194,7 @@ readSixImages (const char inFileName[], - "from the data window of other cube faces."); - } - -- in.setFrameBuffer (pixels - dw.min.x - dw.min.y * w, 1, w); -+ in.setFrameBuffer (ComputeBasePointer (pixels, dw), 1, w); - in.readPixels (dw.min.y, dw.max.y); - - pixels += w * h; ---- openexr-2.2.1.orig/exrmakepreview/makePreview.cpp -+++ openexr-2.2.1/exrmakepreview/makePreview.cpp -@@ -110,7 +110,7 @@ generatePreview (const char inFileName[] - int h = dw.max.y - dw.min.y + 1; - - Array2D pixels (h, w); -- in.setFrameBuffer (&pixels[0][0] - dw.min.y * w - dw.min.x, 1, w); -+ in.setFrameBuffer (ComputeBasePointer (&pixels[0][0], dw), 1, w); - in.readPixels (dw.min.y, dw.max.y); - - // ---- openexr-2.2.1.orig/exrmaketiled/Image.h -+++ openexr-2.2.1/exrmaketiled/Image.h -@@ -190,12 +190,12 @@ OPENEXR_IMF_INTERNAL_NAMESPACE::Slice - TypedImageChannel::slice () const - { - const IMATH_NAMESPACE::Box2i &dw = image().dataWindow(); -- int w = dw.max.x - dw.min.x + 1; - -- return OPENEXR_IMF_INTERNAL_NAMESPACE::Slice (pixelType(), -- (char *) (&_pixels[0][0] - dw.min.y * w - dw.min.x), -- sizeof (T), -- w * sizeof (T)); -+ return OPENEXR_IMF_INTERNAL_NAMESPACE::Slice::Make ( -+ pixelType(), -+ &_pixels[0][0], -+ dw, -+ sizeof (T)); - } - - ---- openexr-2.2.1.orig/exrmultiview/Image.h -+++ openexr-2.2.1/exrmultiview/Image.h -@@ -159,6 +159,8 @@ TypedImageChannel::TypedImageChannel - _ySampling (ySampling), - _pixels (0, 0) - { -+ if ( _xSampling < 1 || _ySampling < 1 ) -+ throw IEX_NAMESPACE::ArgExc ("Invalid x/y sampling values"); - resize(); - } - -@@ -201,14 +203,14 @@ TypedImageChannel::slice () const - const IMATH_NAMESPACE::Box2i &dw = image().dataWindow(); - int w = dw.max.x - dw.min.x + 1; - -- return IMF::Slice (pixelType(), -- (char *) (&_pixels[0][0] - -- dw.min.y / _ySampling * (w / _xSampling) - -- dw.min.x / _xSampling), -- sizeof (T), -- (w / _xSampling) * sizeof (T), -- _xSampling, -- _ySampling); -+ return IMF::Slice::Make ( -+ pixelType(), -+ &_pixels[0][0], -+ dw, -+ sizeof(T), -+ (w / _xSampling) * sizeof (T), -+ _xSampling, -+ _ySampling); - } - - -@@ -227,7 +229,9 @@ template - void - TypedImageChannel::black () - { -- memset(&_pixels[0][0],0,image().width()/_xSampling*image().height()/_ySampling*sizeof(T)); -+ size_t nx = static_cast( image().width() ) / static_cast( _xSampling ); -+ size_t ny = static_cast( image().height() ) / static_cast( _ySampling ); -+ memset(&_pixels[0][0],0,nx*ny*sizeof(T)); - } - - diff --git a/CVE-2020-11758-to-CVE-2020-11765.patch b/CVE-2020-11758-to-CVE-2020-11765.patch deleted file mode 100644 index 97d19fb..0000000 --- a/CVE-2020-11758-to-CVE-2020-11765.patch +++ /dev/null @@ -1,671 +0,0 @@ -Backport of - -From 6bad53af7eebed507564dd5fc90320e4c6a6c0bc Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Mon, 20 Jan 2020 09:07:02 +1300 -Subject: [PATCH 01/23] Force tile sizes to be less than INT_MAX bytes, in line - with the maximum dimensions of data windows - -From df987cabc20c90803692022fd232def837cb88cc Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Mon, 20 Jan 2020 10:52:17 +1300 -Subject: [PATCH 02/23] validate tiles have valid headers when raw reading - tiles - -From 37750013830def57f19f3c3b7faaa9fc1dae81b3 Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Mon, 20 Jan 2020 11:18:55 +1300 -Subject: [PATCH 03/23] Sanity check for input buffer overruns in RLE - uncompress - -From 3eda5d70aba127bae9bd6bae9956fcf024b64031 Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Mon, 20 Jan 2020 14:46:54 +1300 -Subject: [PATCH 04/23] fixes for DWA uncompress: sanity check unknown data - reading, off-by-one error on max suffix string length - -From b9997d0c045fa01af3d2e46e1a74b07cc4519446 Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Mon, 20 Jan 2020 15:39:10 +1300 -Subject: [PATCH 06/23] prevent int overflow when calculating buffer offsets - -From 7a52d40ae23c148f27116cb1f6e897b9143b372c Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Tue, 21 Jan 2020 12:04:13 +1300 -Subject: [PATCH 07/23] bypass SSE optimization when skipping subsampled - channels - -From 801272c9bf8b84a66c62f1e8a4490ece81da6a56 Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Tue, 21 Jan 2020 13:33:53 +1300 -Subject: [PATCH 08/23] check for bad bit counts in Huff encoded data - -From 43cd3ad47d53356da6ae2e983e47c8313aebf72e Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Tue, 21 Jan 2020 14:53:23 +1300 -Subject: [PATCH 09/23] improve bad count detection in huf decompress - -From ea3349896d4a8a3b523e8f3b830334a85240b1e6 Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Tue, 21 Jan 2020 15:12:58 +1300 -Subject: [PATCH 10/23] sanity check data reads from PIZ data - -From b1c34c496b62117115b1089b18a44e0031800a09 Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Wed, 22 Jan 2020 09:35:46 +1300 -Subject: [PATCH 11/23] fix memory leak when reading damaged PIZ files - -From e7c26f6ef5bf7ae8ea21ecf19963186cd1391720 Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Wed, 22 Jan 2020 17:31:22 +1300 -Subject: [PATCH 12/23] abort when file claims to have excessive scanline data - requirements - -From a6408c90339bdf19f89476578d7f936b741be9b2 Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Thu, 23 Jan 2020 09:40:44 +1300 -Subject: [PATCH 13/23] avoid creating compression object just to compute - numLinesInBuffer - -From 2ae5f8376b0a6c3e2bb100042f5de79503ba837a Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Thu, 23 Jan 2020 09:52:58 +1300 -Subject: [PATCH 14/23] fix check for valid ruleSize - -From dea0ef1ee7b2f4d2aa42ffba7b442e5d8051222b Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Thu, 23 Jan 2020 12:30:11 +1300 -Subject: [PATCH 15/23] fix memory leak on DeepTiledInput files: compressor for - sample count table wasn't deleted - -From d4fbaad4efe5d0ddf325da44ecbab105ebb2954e Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Thu, 23 Jan 2020 12:33:11 +1300 -Subject: [PATCH 16/23] fix memory leak in test suite - -From 53a06468ef5a08f4f2beb2d264a20547d7a78753 Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Thu, 23 Jan 2020 14:44:48 +1300 -Subject: [PATCH 17/23] fixes to memory leak when constructors throw exceptions - -From b673e6ad0ec6cef94d86b9586244d26088a3d792 Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Fri, 24 Jan 2020 08:42:07 +1300 -Subject: [PATCH 18/23] Fix cleanup when DeepScanLineInputFile constructor - throws - -From acad98d6d3e787f36012a3737c23c42c7f43a00f Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Fri, 24 Jan 2020 13:43:47 +1300 -Subject: [PATCH 21/23] missing header for ptrdiff_t - -From 0a1aa55ef108169c933ddaa631c1f6cb02b69050 Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Tue, 28 Jan 2020 18:17:01 +1300 -Subject: [PATCH 22/23] minor tweaks and typo fixes - -From 89ce46f38c5e658d21df9179c1641c496cab7396 Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Tue, 28 Jan 2020 18:18:01 +1300 -Subject: [PATCH 23/23] force x/y Sampling to 1 for Deep Scanline Images - - - - ---- openexr-2.2.1.orig/IlmImf/ImfCompositeDeepScanLine.cpp -+++ openexr-2.2.1/IlmImf/ImfCompositeDeepScanLine.cpp -@@ -179,7 +179,7 @@ CompositeDeepScanLine::Data::handleDeepF - int start, - int end) - { -- int width=_dataWindow.size().x+1; -+ ptrdiff_t width=_dataWindow.size().x+1; - size_t pixelcount = width * (end-start+1); - pointers.resize(_channels.size()); - counts.resize(pixelcount); ---- openexr-2.2.1.orig/IlmImf/ImfDeepScanLineInputFile.cpp -+++ openexr-2.2.1/IlmImf/ImfDeepScanLineInputFile.cpp -@@ -915,8 +915,7 @@ void DeepScanLineInputFile::initialize(c - } - catch (...) - { -- delete _data; -- _data=NULL; -+ // Don't delete _data here, leave that to caller - throw; - } - } -@@ -932,8 +931,15 @@ DeepScanLineInputFile::DeepScanLineInput - _data->memoryMapped = _data->_streamData->is->isMemoryMapped(); - _data->version = part->version; - -- initialize(part->header); -- -+ try -+ { -+ initialize(part->header); -+ } -+ catch(...) -+ { -+ delete _data; -+ throw; -+ } - _data->lineOffsets = part->chunkOffsets; - - _data->partNumber = part->partNumber; -@@ -945,7 +951,6 @@ DeepScanLineInputFile::DeepScanLineInput - : - _data (new Data (numThreads)) - { -- _data->_streamData = new InputStreamMutex(); - _data->_deleteStream = true; - OPENEXR_IMF_INTERNAL_NAMESPACE::IStream* is = 0; - -@@ -955,12 +960,29 @@ DeepScanLineInputFile::DeepScanLineInput - readMagicNumberAndVersionField(*is, _data->version); - // - // Backward compatibility to read multpart file. -- // -+ // multiPartInitialize will create _streamData - if (isMultiPart(_data->version)) - { - compatibilityInitialize(*is); - return; - } -+ } -+ catch (IEX_NAMESPACE::BaseExc &e) -+ { -+ if (is) delete is; -+ if (_data) delete _data; -+ -+ REPLACE_EXC (e, "Cannot read image file " -+ "\"" << fileName << "\". " << e.what()); -+ throw; -+ } -+ -+ // -+ // not multiPart - allocate stream data and intialise as normal -+ // -+ try -+ { -+ _data->_streamData = new InputStreamMutex(); - _data->_streamData->is = is; - _data->memoryMapped = is->isMemoryMapped(); - _data->header.readFrom (*_data->_streamData->is, _data->version); -@@ -976,7 +998,10 @@ DeepScanLineInputFile::DeepScanLineInput - catch (IEX_NAMESPACE::BaseExc &e) - { - if (is) delete is; -- if (_data && _data->_streamData) delete _data->_streamData; -+ if (_data && _data->_streamData) -+ { -+ delete _data->_streamData; -+ } - if (_data) delete _data; - - REPLACE_EXC (e, "Cannot read image file " -@@ -986,7 +1011,10 @@ DeepScanLineInputFile::DeepScanLineInput - catch (...) - { - if (is) delete is; -- if (_data && _data->_streamData) delete _data->_streamData; -+ if (_data && _data->_streamData) -+ { -+ delete _data->_streamData; -+ } - if (_data) delete _data; - - throw; -@@ -1010,7 +1038,18 @@ DeepScanLineInputFile::DeepScanLineInput - - _data->version =version; - -- initialize (header); -+ try -+ { -+ initialize (header); -+ } -+ catch (...) -+ { -+ if (_data && _data->_streamData) -+ { -+ delete _data->_streamData; -+ } -+ if (_data) delete _data; -+ } - - readLineOffsets (*_data->_streamData->is, - _data->lineOrder, -@@ -1042,8 +1081,9 @@ DeepScanLineInputFile::~DeepScanLineInpu - // - - if (_data->partNumber == -1 && _data->_streamData) -+ { - delete _data->_streamData; -- -+ } - delete _data; - } - } ---- openexr-2.2.1.orig/IlmImf/ImfDeepTiledInputFile.cpp -+++ openexr-2.2.1/IlmImf/ImfDeepTiledInputFile.cpp -@@ -283,6 +283,7 @@ DeepTiledInputFile::Data::Data (int numT - multiPartBackwardSupport(false), - numThreads(numThreads), - memoryMapped(false), -+ sampleCountTableComp(NULL), - _streamData(NULL), - _deleteStream(false) - { -@@ -308,6 +309,8 @@ DeepTiledInputFile::Data::~Data () - - for (size_t i = 0; i < slices.size(); i++) - delete slices[i]; -+ -+ delete sampleCountTableComp; - } - - -@@ -927,7 +930,15 @@ DeepTiledInputFile::DeepTiledInputFile ( - _data (new Data (part->numThreads)) - { - _data->_deleteStream=false; -- multiPartInitialize(part); -+ try -+ { -+ multiPartInitialize(part); -+ } -+ catch(...) -+ { -+ delete _data; -+ throw; -+ } - } - - ---- openexr-2.2.1.orig/IlmImf/ImfDwaCompressor.cpp -+++ openexr-2.2.1/IlmImf/ImfDwaCompressor.cpp -@@ -265,8 +265,9 @@ struct DwaCompressor::Classifier - " (truncated rule)."); - - { -- char suffix[Name::SIZE]; -- memset (suffix, 0, Name::SIZE); -+ // maximum length of string plus one byte for terminating NULL -+ char suffix[Name::SIZE+1]; -+ memset (suffix, 0, Name::SIZE+1); - Xdr::read (ptr, std::min(size, Name::SIZE-1), suffix); - _suffix = std::string(suffix); - } -@@ -2409,7 +2410,7 @@ DwaCompressor::uncompress - unsigned short ruleSize = 0; - Xdr::read(dataPtr, ruleSize); - -- if (ruleSize < 0) -+ if (ruleSize < Xdr::size() ) - throw Iex::InputExc("Error uncompressing DWA data" - " (corrupt header file)."); - -@@ -2806,6 +2807,14 @@ DwaCompressor::uncompress - if (Imath::modp (y, cd->ySampling) != 0) - continue; - -+ // -+ // sanity check for buffer data lying within range -+ // -+ if (cd->planarUncBufferEnd + dstScanlineSize - _planarUncBuffer[UNKNOWN] > _planarUncBufferSize[UNKNOWN] ) -+ { -+ throw Iex::InputExc("DWA data corrupt"); -+ } -+ - memcpy (rowPtrs[chan][row], - cd->planarUncBufferEnd, - dstScanlineSize); ---- openexr-2.2.1.orig/IlmImf/ImfFastHuf.cpp -+++ openexr-2.2.1/IlmImf/ImfFastHuf.cpp -@@ -256,14 +256,29 @@ FastHufDecoder::FastHufDecoder - int symbol = *i >> 6; - - if (mapping[codeLen] >= _numSymbols) -+ { -+ delete[] _idToSymbol; -+ _idToSymbol = NULL; - throw Iex::InputExc ("Huffman decode error " - "(Invalid symbol in header)."); -- -+ } - _idToSymbol[mapping[codeLen]] = symbol; - mapping[codeLen]++; - } - -- buildTables(base, offset); -+ // -+ // exceptions can be thrown whilst building tables. Delete -+ // _idToSynmbol before re-throwing to prevent memory leak -+ // -+ try -+ { -+ buildTables(base, offset); -+ }catch(...) -+ { -+ delete[] _idToSymbol; -+ _idToSymbol = NULL; -+ throw; -+ } - } - - ---- openexr-2.2.1.orig/IlmImf/ImfHeader.cpp -+++ openexr-2.2.1/IlmImf/ImfHeader.cpp -@@ -914,7 +914,7 @@ Header::sanityCheck (bool isTiled, bool - - const TileDescription &tileDesc = tileDescription(); - -- if (tileDesc.xSize <= 0 || tileDesc.ySize <= 0) -+ if (tileDesc.xSize <= 0 || tileDesc.ySize <= 0 || tileDesc.xSize > INT_MAX || tileDesc.ySize > INT_MAX ) - throw IEX_NAMESPACE::ArgExc ("Invalid tile size in image header."); - - if (maxTileWidth > 0 && ---- openexr-2.2.1.orig/IlmImf/ImfHuf.cpp -+++ openexr-2.2.1/IlmImf/ImfHuf.cpp -@@ -1052,7 +1052,10 @@ hufUncompress (const char compressed[], - unsigned short raw[], - int nRaw) - { -- if (nCompressed == 0) -+ // -+ // nead at least 20 bytes for header -+ // -+ if (nCompressed < 20 ) - { - if (nRaw != 0) - notEnoughData(); -@@ -1070,6 +1073,12 @@ hufUncompress (const char compressed[], - - const char *ptr = compressed + 20; - -+ if ( ptr + (nBits+7 )/8 > compressed+nCompressed) -+ { -+ notEnoughData(); -+ return; -+ } -+ - // - // Fast decoder needs at least 2x64-bits of compressed data, and - // needs to be run-able on this platform. Otherwise, fall back ---- openexr-2.2.1.orig/IlmImf/ImfMisc.cpp -+++ openexr-2.2.1/IlmImf/ImfMisc.cpp -@@ -114,9 +114,9 @@ bytesPerLineTable (const Header &header, - c != channels.end(); - ++c) - { -- int nBytes = pixelTypeSize (c.channel().type) * -- (dataWindow.max.x - dataWindow.min.x + 1) / -- c.channel().xSampling; -+ size_t nBytes = size_t(pixelTypeSize (c.channel().type)) * -+ size_t(dataWindow.max.x - dataWindow.min.x + 1) / -+ size_t(c.channel().xSampling); - - for (int y = dataWindow.min.y, i = 0; y <= dataWindow.max.y; ++y, ++i) - if (modp (y, c.channel().ySampling) == 0) -@@ -262,6 +262,7 @@ defaultFormat (Compressor * compressor) - } - - -+//obsolete - int - numLinesInBuffer (Compressor * compressor) - { -@@ -1838,6 +1839,39 @@ usesLongNames (const Header &header) - return false; - } - -+namespace -+{ -+// for a given compression type, return the number of scanlines -+// compressed into a single chunk -+// TODO add to API and move to ImfCompressor.cpp -+int -+numLinesInBuffer(Compression comp) -+{ -+ switch(comp) -+ { -+ case NO_COMPRESSION : -+ case RLE_COMPRESSION: -+ case ZIPS_COMPRESSION: -+ return 1; -+ case ZIP_COMPRESSION: -+ return 16; -+ case PIZ_COMPRESSION: -+ return 32; -+ case PXR24_COMPRESSION: -+ return 16; -+ case B44_COMPRESSION: -+ case B44A_COMPRESSION: -+ case DWAA_COMPRESSION: -+ return 32; -+ case DWAB_COMPRESSION: -+ return 256; -+ -+ default: -+ throw IEX_NAMESPACE::ArgExc ("Unknown compression type"); -+ } -+} -+} -+ - int - getScanlineChunkOffsetTableSize(const Header& header) - { -@@ -1847,17 +1881,11 @@ getScanlineChunkOffsetTableSize(const He - size_t maxBytesPerLine = bytesPerLineTable (header, - bytesPerLine); - -- Compressor* compressor = newCompressor(header.compression(), -- maxBytesPerLine, -- header); -- -- int linesInBuffer = numLinesInBuffer (compressor); -+ int linesInBuffer = numLinesInBuffer ( header.compression() ); - - int lineOffsetSize = (dataWindow.max.y - dataWindow.min.y + - linesInBuffer) / linesInBuffer; - -- delete compressor; -- - return lineOffsetSize; - } - ---- openexr-2.2.1.orig/IlmImf/ImfPizCompressor.cpp -+++ openexr-2.2.1/IlmImf/ImfPizCompressor.cpp -@@ -491,7 +491,9 @@ PizCompressor::uncompress (const char *i - // This is the cunompress function which is used by both the tiled and - // scanline decompression routines. - // -- -+ -+ const char* inputEnd=inPtr+inSize; -+ - // - // Special case - empty input buffer - // -@@ -502,6 +504,7 @@ PizCompressor::uncompress (const char *i - return 0; - } - -+ - // - // Determine the layout of the compressed pixel data - // -@@ -548,6 +551,12 @@ PizCompressor::uncompress (const char *i - AutoArray bitmap; - memset (bitmap, 0, sizeof (unsigned char) * BITMAP_SIZE); - -+ -+ if(inPtr + sizeof(unsigned short)*2 > inputEnd) -+ { -+ throw InputExc ("PIZ compressed data too short"); -+ } -+ - Xdr::read (inPtr, minNonZero); - Xdr::read (inPtr, maxNonZero); - -@@ -559,8 +568,14 @@ PizCompressor::uncompress (const char *i - - if (minNonZero <= maxNonZero) - { -- Xdr::read (inPtr, (char *) &bitmap[0] + minNonZero, -- maxNonZero - minNonZero + 1); -+ size_t bytesToRead = maxNonZero - minNonZero + 1; -+ if(inPtr + bytesToRead > inputEnd) -+ { -+ throw InputExc ("PIZ compressed data too short"); -+ } -+ -+Xdr::read (inPtr, (char *) &bitmap[0] + minNonZero, -+ bytesToRead); - } - - AutoArray lut; -@@ -569,6 +584,11 @@ PizCompressor::uncompress (const char *i - // - // Huffman decoding - // -+ if(inPtr + sizeof(int)> inputEnd) -+ { -+ throw InputExc ("PIZ compressed data too short"); -+ } -+ - - int length; - Xdr::read (inPtr, length); ---- openexr-2.2.1.orig/IlmImf/ImfRle.cpp -+++ openexr-2.2.1/IlmImf/ImfRle.cpp -@@ -129,6 +129,11 @@ rleUncompress (int inLength, int maxLeng - if (0 > (maxLength -= count)) - return 0; - -+ // check the input buffer is big enough to contain -+ // 'count' bytes of remaining data -+ if (inLength < 0) -+ return 0; -+ - memcpy(out, in, count); - out += count; - in += count; ---- openexr-2.2.1.orig/IlmImf/ImfScanLineInputFile.cpp -+++ openexr-2.2.1/IlmImf/ImfScanLineInputFile.cpp -@@ -1114,6 +1114,12 @@ void ScanLineInputFile::initialize(const - - size_t maxBytesPerLine = bytesPerLineTable (_data->header, - _data->bytesPerLine); -+ -+ if(maxBytesPerLine > INT_MAX) -+ { -+ throw IEX_NAMESPACE::InputExc("maximum bytes per scanline exceeds maximum permissible size"); -+ } -+ - - for (size_t i = 0; i < _data->lineBuffers.size(); i++) - { -@@ -1148,6 +1154,8 @@ void ScanLineInputFile::initialize(const - } - catch (...) - { -+ if (_data->partNumber == -1) -+ delete _streamData; - delete _data; - _data=NULL; - throw; -@@ -1420,6 +1428,14 @@ ScanLineInputFile::setFrameBuffer (const - offset+=2; - break; - } -+ -+ // -+ // optimization mode cannot currently skip subsampled channels -+ // -+ if (i.channel().xSampling!=1 || i.channel().ySampling!=1) -+ { -+ optimizationPossible = false; -+ } - ++i; - } - ---- openexr-2.2.1.orig/IlmImf/ImfTiledInputFile.cpp -+++ openexr-2.2.1/IlmImf/ImfTiledInputFile.cpp -@@ -736,7 +736,10 @@ TiledInputFile::TiledInputFile (const ch - - delete _data->_streamData; - } -- -+ if (_data) -+ { -+ delete _data; -+ } - if (is != 0) - delete is; - -@@ -759,6 +762,10 @@ TiledInputFile::TiledInputFile (const ch - - if (is != 0) - delete is; -+ if (_data) -+ { -+ delete _data; -+ } - throw; - } - } -@@ -846,7 +853,15 @@ TiledInputFile::TiledInputFile (InputPar - { - _data = new Data (part->numThreads); - _data->_deleteStream=false; -- multiPartInitialize(part); -+ try -+ { -+ multiPartInitialize(part); -+ } -+ catch(...) -+ { -+ if (_data) delete _data; -+ throw; -+ } - } - - -@@ -1307,6 +1322,11 @@ TiledInputFile::rawTileData (int &dx, in - readNextTileData (_data->_streamData, _data, dx, dy, lx, ly, - tileBuffer->buffer, - pixelDataSize); -+ -+ if ( !isValidLevel(lx,ly) || !isValidTile (dx, dy, lx, ly) ) -+ throw IEX_NAMESPACE::ArgExc ("File contains an invalid tile"); -+ -+ - if(isMultiPart(version())) - { - if (old_dx!=dx || old_dy !=dy || old_lx!=lx || old_ly!=ly) ---- openexr-2.2.1.orig/IlmImfTest/testMultiPartApi.cpp -+++ openexr-2.2.1/IlmImfTest/testMultiPartApi.cpp -@@ -450,6 +450,21 @@ generateRandomFile (int partCount, const - } - } - -+ for (size_t i = 0 ; i < parts.size() ; ++i ) -+ { -+ int partType = partTypes[i]; -+ -+ if (partType == 0) -+ { -+ delete (OutputPart*) parts[i]; -+ } -+ else -+ { -+ delete (TiledOutputPart*) parts[i]; -+ } -+ -+ } -+ - delete[] tiledHalfData; - delete[] tiledUintData; - delete[] tiledFloatData; diff --git a/CVE-2020-15305.patch b/CVE-2020-15305.patch deleted file mode 100644 index b8d7f26..0000000 --- a/CVE-2020-15305.patch +++ /dev/null @@ -1,16 +0,0 @@ -From 3d03979dc101612e806cdf0b011475d9fa685a73 Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Tue, 19 May 2020 16:09:21 +1200 -Subject: [PATCH] fix #728 - missing 'throw' in deepscanline error handling - ---- openexr-2.2.1.orig/IlmImf/ImfDeepScanLineInputFile.cpp -+++ openexr-2.2.1/IlmImf/ImfDeepScanLineInputFile.cpp -@@ -1049,6 +1049,8 @@ DeepScanLineInputFile::DeepScanLineInput - delete _data->_streamData; - } - if (_data) delete _data; -+ -+ throw; - } - - readLineOffsets (*_data->_streamData->is, diff --git a/CVE-2020-15306.patch b/CVE-2020-15306.patch deleted file mode 100644 index fecbc2c..0000000 --- a/CVE-2020-15306.patch +++ /dev/null @@ -1,130 +0,0 @@ -From 6a9f8af6e89547bcd370ae3cec2b12849eee0b54 Mon Sep 17 00:00:00 2001 -From: peterhillman -Date: Wed, 27 May 2020 13:50:54 +1200 -Subject: [PATCH] always ignore chunkCount attribute unless it cannot be - computed (#738) - ---- openexr-2.2.1.orig/IlmImf/ImfDeepTiledOutputFile.cpp -+++ openexr-2.2.1/IlmImf/ImfDeepTiledOutputFile.cpp -@@ -1228,7 +1228,7 @@ DeepTiledOutputFile::initialize (const H - _data->numYTiles); - - //ignore the existing value of chunkCount - correct it if it's wrong -- _data->header.setChunkCount(getChunkOffsetTableSize(_data->header,true)); -+ _data->header.setChunkCount(getChunkOffsetTableSize(_data->header)); - - _data->maxSampleCountTableSize = _data->tileDesc.ySize * - _data->tileDesc.xSize * ---- openexr-2.2.1.orig/IlmImf/ImfMisc.cpp -+++ openexr-2.2.1/IlmImf/ImfMisc.cpp -@@ -1896,18 +1896,30 @@ int - getTiledChunkOffsetTableSize(const Header& header); - - int --getChunkOffsetTableSize(const Header& header,bool ignore_attribute) -+getChunkOffsetTableSize(const Header& header,bool) - { -- if(!ignore_attribute && header.hasChunkCount()) -- { -- return header.chunkCount(); -- } -- -+ // -+ // if there is a type in the header which indicates the part is not a currently supported type, -+ // use the chunkCount attribute -+ // -+ -+ - if(header.hasType() && !isSupportedType(header.type())) - { -- throw IEX_NAMESPACE::ArgExc ("unsupported header type to " -- "get chunk offset table size"); -+ if(header.hasChunkCount()) -+ { -+ return header.chunkCount(); -+ } -+ else -+ { -+ throw IEX_NAMESPACE::ArgExc ("unsupported header type to " -+ "get chunk offset table size"); -+ } - } -+ -+ // -+ // part is a known type - ignore the header attribute and compute the chunk size from the header -+ // - if (isTiled(header.type()) == false) - return getScanlineChunkOffsetTableSize(header); - else ---- openexr-2.2.1.orig/IlmImf/ImfMisc.h -+++ openexr-2.2.1/IlmImf/ImfMisc.h -@@ -452,13 +452,16 @@ bool usesLongNames (const Header &header - - - // --// compute size of chunk offset table - if ignore_attribute set to true --// will compute from the image size and layout, rather than the attribute --// The default behaviour is to read the attribute -+// compute size of chunk offset table - for existing types, computes -+// the chunk size from the image size, compression type, and tile description -+// (for tiled types). If the type is not supported, uses the chunkCount attribute -+// if present, or throws an exception otherwise -+// deprecated_attribute is no longer used by this function -+// - // - - IMF_EXPORT --int getChunkOffsetTableSize(const Header& header,bool ignore_attribute=false); -+int getChunkOffsetTableSize(const Header& header,bool deprecated_attribute=false); - - OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - ---- openexr-2.2.1.orig/IlmImf/ImfMultiPartInputFile.cpp -+++ openexr-2.2.1/IlmImf/ImfMultiPartInputFile.cpp -@@ -735,7 +735,7 @@ MultiPartInputFile::Data::readChunkOffse - - for (size_t i = 0; i < parts.size(); i++) - { -- int chunkOffsetTableSize = getChunkOffsetTableSize(parts[i]->header,false); -+ int chunkOffsetTableSize = getChunkOffsetTableSize(parts[i]->header); - parts[i]->chunkOffsets.resize(chunkOffsetTableSize); - - for (int j = 0; j < chunkOffsetTableSize; j++) ---- openexr-2.2.1.orig/IlmImf/ImfMultiPartOutputFile.cpp -+++ openexr-2.2.1/IlmImf/ImfMultiPartOutputFile.cpp -@@ -145,7 +145,7 @@ MultiPartOutputFile::Data::do_header_san - if (isMultiPart) - { - // multipart files must contain a chunkCount attribute -- _headers[0].setChunkCount(getChunkOffsetTableSize(_headers[0],true)); -+ _headers[0].setChunkCount(getChunkOffsetTableSize(_headers[0])); - - for (size_t i = 1; i < parts; i++) - { -@@ -153,7 +153,7 @@ MultiPartOutputFile::Data::do_header_san - throw IEX_NAMESPACE::ArgExc ("Every header in a multipart file should have a type"); - - -- _headers[i].setChunkCount(getChunkOffsetTableSize(_headers[i],true)); -+ _headers[i].setChunkCount(getChunkOffsetTableSize(_headers[i])); - _headers[i].sanityCheck (_headers[i].hasTileDescription(), isMultiPart); - - -@@ -185,7 +185,7 @@ MultiPartOutputFile::Data::do_header_san - - if (_headers[0].hasType() && isImage(_headers[0].type()) == false) - { -- _headers[0].setChunkCount(getChunkOffsetTableSize(_headers[0],true)); -+ _headers[0].setChunkCount(getChunkOffsetTableSize(_headers[0])); - } - - } -@@ -494,7 +494,7 @@ MultiPartOutputFile::Data::writeChunkTab - { - for (size_t i = 0; i < parts.size(); i++) - { -- int chunkTableSize = getChunkOffsetTableSize(parts[i]->header,false); -+ int chunkTableSize = getChunkOffsetTableSize(parts[i]->header); - - Int64 pos = os->tellp(); - diff --git a/CVE-2021-20296.patch b/CVE-2021-20296.patch deleted file mode 100644 index 7a64d1a..0000000 --- a/CVE-2021-20296.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 64ed1789afb3286cdb638bf34676f7d770032a84 Mon Sep 17 00:00:00 2001 -From: wang_yue111 <648774160@qq.com> -Date: Tue, 6 Apr 2021 10:24:35 +0800 -Subject: [PATCH] double-check unpackedBuffer created in DWA uncompress - -Signed-off-by: Peter Hillman ---- - IlmImf/ImfDwaCompressor.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/IlmImf/ImfDwaCompressor.cpp b/IlmImf/ImfDwaCompressor.cpp -index 2ef8878..c6518bb 100644 ---- a/IlmImf/ImfDwaCompressor.cpp -+++ b/IlmImf/ImfDwaCompressor.cpp -@@ -2524,7 +2524,7 @@ DwaCompressor::uncompress - - if (acCompressedSize > 0) - { -- if (totalAcUncompressedCount*sizeof(unsigned short) > _packedAcBufferSize) -+ if ( !_packedAcBuffer || totalAcUncompressedCount*sizeof(unsigned short) > _packedAcBufferSize) - { - throw Iex::InputExc("Error uncompressing DWA data" - "(corrupt header)."); --- -2.23.0 - diff --git a/CVE-2021-23169.patch b/CVE-2021-23169.patch deleted file mode 100644 index 1584d7e..0000000 --- a/CVE-2021-23169.patch +++ /dev/null @@ -1,34 +0,0 @@ -From ae6d203892cc9311917a7f4f05354ef792b3e58e Mon Sep 17 00:00:00 2001 -From: peterhillman -Date: Thu, 3 Dec 2020 10:53:32 +1300 -Subject: [PATCH] Handle xsampling and bad seekg() calls in exrcheck (#872) - -* fix exrcheck xsampling!=1 - -Signed-off-by: Peter Hillman - -* fix handling bad seekg() calls in exrcheck - -Signed-off-by: Peter Hillman - -* fix deeptile detection in multipart files - -Signed-off-by: Peter Hillman ---- - src/lib/OpenEXR/ImfDeepTiledInputFile.cpp | 2 +- - src/lib/OpenEXRUtil/ImfCheckFile.cpp | 20 ++++++++++++-------- - 2 files changed, 13 insertions(+), 9 deletions(-) - -diff --git a/src/lib/OpenEXR/ImfDeepTiledInputFile.cpp b/src/lib/OpenEXR/ImfDeepTiledInputFile.cpp -index f5abe9c6a..94452905c 100644 ---- a/IlmImf/ImfDeepTiledInputFile.cpp -+++ b/IlmImf/ImfDeepTiledInputFile.cpp -@@ -960,7 +960,7 @@ DeepTiledInputFile::compatibilityInitialize(OPENEXR_IMF_INTERNAL_NAMESPACE::IStr - void - DeepTiledInputFile::multiPartInitialize(InputPartData* part) - { -- if (isTiled(part->header.type()) == false) -+ if (part->header.type() != DEEPTILE) - THROW (IEX_NAMESPACE::ArgExc, "Can't build a DeepTiledInputFile from a part of type " << part->header.type()); - - _data->_streamData = part->mutex; diff --git a/CVE-2021-23215.patch b/CVE-2021-23215.patch deleted file mode 100644 index 9a3da66..0000000 --- a/CVE-2021-23215.patch +++ /dev/null @@ -1,83 +0,0 @@ -From 1f7cac0d1538544d3f93353bc16750374aea33b8 Mon Sep 17 00:00:00 2001 -From: jackie_wu -Date: Fri, 18 Jun 2021 16:31:51 +0800 -Subject: [PATCH] add - ---- - IlmImf/ImfDwaCompressor.cpp | 21 ++++++++++----------- - 1 file changed, 10 insertions(+), 11 deletions(-) - -diff --git a/IlmImf/ImfDwaCompressor.cpp b/IlmImf/ImfDwaCompressor.cpp -index 1c1bd45..424cc46 100644 ---- a/IlmImf/ImfDwaCompressor.cpp -+++ b/IlmImf/ImfDwaCompressor.cpp -@@ -2905,8 +2905,8 @@ DwaCompressor::initializeBuffers (size_t &outBufferSize) - - int maxOutBufferSize = 0; - int numLossyDctChans = 0; -- int unknownBufferSize = 0; -- int rleBufferSize = 0; -+ size_t unknownBufferSize = 0; -+ size_t rleBufferSize = 0; - - int maxLossyDctAcSize = (int)ceil ((float)numScanLines() / 8.0f) * - (int)ceil ((float)(_max[0] - _min[0] + 1) / 8.0f) * -@@ -2916,6 +2916,9 @@ DwaCompressor::initializeBuffers (size_t &outBufferSize) - (int)ceil ((float)(_max[0] - _min[0] + 1) / 8.0f) * - sizeof (unsigned short); - -+ -+ size_t pixelCount = static_cast(numScanLines()) * static_cast(_max[0] - _min[0] + 1); -+ - for (unsigned int chan = 0; chan < _channelData.size(); ++chan) - { - switch (_channelData[chan].compression) -@@ -2939,8 +2942,7 @@ DwaCompressor::initializeBuffers (size_t &outBufferSize) - // of the source data. - // - -- int rleAmount = 2 * numScanLines() * (_max[0] - _min[0] + 1) * -- Imf::pixelTypeSize (_channelData[chan].type); -+ size_t rleAmount = 2 * pixelCount * Imf::pixelTypeSize (_channelData[chan].type); - - rleBufferSize += rleAmount; - } -@@ -2949,8 +2951,7 @@ DwaCompressor::initializeBuffers (size_t &outBufferSize) - - case UNKNOWN: - -- unknownBufferSize += numScanLines() * (_max[0] - _min[0] + 1) * -- Imf::pixelTypeSize (_channelData[chan].type); -+ unknownBufferSize += pixelCount * Imf::pixelTypeSize (_channelData[chan].type); - break; - - default: -@@ -3059,7 +3060,7 @@ DwaCompressor::initializeBuffers (size_t &outBufferSize) - // all in one swoop (for each compression scheme). - // - -- int planarUncBufferSize[NUM_COMPRESSOR_SCHEMES]; -+ size_t planarUncBufferSize[NUM_COMPRESSOR_SCHEMES]; - for (int i=0; i -Date: Tue, 22 Jun 2021 14:47:31 +0800 -Subject: [PATCH] add - ---- - IlmImf/ImfDwaCompressor.cpp | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/IlmImf/ImfDwaCompressor.cpp b/IlmImf/ImfDwaCompressor.cpp -index ddd8b3c..4aa0d58 100644 ---- a/IlmImf/ImfDwaCompressor.cpp -+++ b/IlmImf/ImfDwaCompressor.cpp -@@ -2908,7 +2908,7 @@ DwaCompressor::initializeBuffers (size_t &outBufferSize) - // of channels we have. - // - -- int maxOutBufferSize = 0; -+ size_t maxOutBufferSize = 0; - int numLossyDctChans = 0; - size_t unknownBufferSize = 0; - size_t rleBufferSize = 0; -@@ -2973,13 +2973,13 @@ DwaCompressor::initializeBuffers (size_t &outBufferSize) - // which could take slightly more space - // - -- maxOutBufferSize += (int)(ceil (1.01f * (float)rleBufferSize) + 100); -+ maxOutBufferSize += ceil (1.01f * (float)rleBufferSize) + 100; - - // - // And the same goes for the UNKNOWN data - // - -- maxOutBufferSize += (int)(ceil (1.01f * (float)unknownBufferSize) + 100); -+ maxOutBufferSize += ceil (1.01f * (float)unknownBufferSize) + 100; - - // - // Allocate a zip/deflate compressor big enought to hold the DC data --- -2.23.0 - diff --git a/CVE-2021-3474.patch b/CVE-2021-3474.patch deleted file mode 100644 index 05916f9..0000000 --- a/CVE-2021-3474.patch +++ /dev/null @@ -1,33 +0,0 @@ -From c3ed4a1db1f39bf4524a644cb2af81dc8cfab33f Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Mon, 17 Aug 2020 12:29:03 +1200 -Subject: [PATCH] compute Huf codelengths using 64 bit to prevent shift - overflow - -Signed-off-by: Peter Hillman ---- - OpenEXR/IlmImf/ImfFastHuf.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/IlmImf/ImfFastHuf.cpp b/IlmImf/ImfFastHuf.cpp -index 9ccf2e15d..c04b56e75 100644 ---- a/IlmImf/ImfFastHuf.cpp -+++ b/IlmImf/ImfFastHuf.cpp -@@ -205,7 +205,7 @@ FastHufDecoder::FastHufDecoder - for (int l = _minCodeLength; l <= _maxCodeLength; ++l) - { - countTmp[l] = (double)codeCount[l] * -- (double)(2 << (_maxCodeLength-l)); -+ (double)(2ll << (_maxCodeLength-l)); - } - - for (int l = _minCodeLength; l <= _maxCodeLength; ++l) -@@ -215,7 +215,7 @@ FastHufDecoder::FastHufDecoder - for (int k =l + 1; k <= _maxCodeLength; ++k) - tmp += countTmp[k]; - -- tmp /= (double)(2 << (_maxCodeLength - l)); -+ tmp /= (double)(2ll << (_maxCodeLength - l)); - - base[l] = (Int64)ceil (tmp); - } diff --git a/CVE-2021-3475-pre0.patch b/CVE-2021-3475-pre0.patch deleted file mode 100644 index 490c833..0000000 --- a/CVE-2021-3475-pre0.patch +++ /dev/null @@ -1,27 +0,0 @@ -From d548fd5eb04d62ad65db18e6425a36e7ab6645dc Mon Sep 17 00:00:00 2001 -From: Cary Phillips -Date: Sat, 8 Aug 2020 16:27:03 -0700 -Subject: [PATCH] Avoid integer overflow in calculateNumTiles() - -Signed-off-by: Cary Phillips ---- - IlmImf/ImfTiledMisc.cpp | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/IlmImf/ImfTiledMisc.cpp b/IlmImf/ImfTiledMisc.cpp -index 8552ada20..1cff8037d 100644 ---- a/IlmImf/ImfTiledMisc.cpp -+++ b/IlmImf/ImfTiledMisc.cpp -@@ -301,7 +301,11 @@ calculateNumTiles (int *numTiles, - { - for (int i = 0; i < numLevels; i++) - { -- numTiles[i] = (levelSize (min, max, i, rmode) + size - 1) / size; -+ int l = levelSize (min, max, i, rmode); -+ if (l >= std::numeric_limits::max() - size + 1) -+ throw IEX_NAMESPACE::ArgExc ("Invalid size."); -+ -+ numTiles[i] = (l + size - 1) / size; - } - } - diff --git a/CVE-2021-3475-pre1.patch b/CVE-2021-3475-pre1.patch deleted file mode 100644 index 4d8f7d7..0000000 --- a/CVE-2021-3475-pre1.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 46833b0e090a31cdccc32cad1ca27fe601d79875 Mon Sep 17 00:00:00 2001 -From: Cary Phillips -Date: Sat, 8 Aug 2020 16:34:02 -0700 -Subject: [PATCH] Change >= to > in overflow calculation - -Signed-off-by: Cary Phillips ---- - IlmImf/ImfTiledMisc.cpp | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/IlmImf/ImfTiledMisc.cpp b/IlmImf/ImfTiledMisc.cpp -index 1cff8037d..51b6e5c26 100644 ---- a/IlmImf/ImfTiledMisc.cpp -+++ b/IlmImf/ImfTiledMisc.cpp -@@ -301,11 +301,11 @@ calculateNumTiles (int *numTiles, - { - for (int i = 0; i < numLevels; i++) - { -- int l = levelSize (min, max, i, rmode); -- if (l >= std::numeric_limits::max() - size + 1) -+ int l = levelSize (min, max, i, rmode); -+ if (l > std::numeric_limits::max() - size + 1) - throw IEX_NAMESPACE::ArgExc ("Invalid size."); - -- numTiles[i] = (l + size - 1) / size; -+ numTiles[i] = (l + size - 1) / size; - } - } - diff --git a/CVE-2021-3475.patch b/CVE-2021-3475.patch deleted file mode 100644 index 23132a4..0000000 --- a/CVE-2021-3475.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 2a18ed424a854598c2a20b5dd7e782b436a1e753 Mon Sep 17 00:00:00 2001 -From: Cary Phillips -Date: Sun, 30 Aug 2020 16:15:10 -0700 -Subject: [PATCH] Avoid overflow in calculateNumTiles when size=MAX_INT -(#825) - -* Avoid overflow in calculateNumTiles when size=MAX_INT - -Signed-off-by: Cary Phillips - -* Compute level size with 64 bits to avoid overflow - -Signed-off-by: Cary Phillips ---- - IlmImf/ImfTiledMisc.cpp | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) - -diff --git a/IlmImf/ImfTiledMisc.cpp -b/IlmImf/ImfTiledMisc.cpp -index c9e8731f1..b8e195fd8 100644 ---- a/IlmImf/ImfTiledMisc.cpp -+++ b/IlmImf/ImfTiledMisc.cpp -@@ -301,10 +301,8 @@ calculateNumTiles (int *numTiles, - { - for (int i = 0; i < numLevels; i++) - { -- int l = levelSize (min, max, i, rmode); -- if (l > std::numeric_limits::max() - size + 1) -- throw IEX_NAMESPACE::ArgExc ("Invalid size."); -- -+ // use 64 bits to avoid int overflow if size is large. -+ Int64 l = levelSize (min, max, i, rmode); - numTiles[i] = (l + size - 1) / size; - } - } diff --git a/CVE-2021-3476.patch b/CVE-2021-3476.patch deleted file mode 100644 index 8145b4c..0000000 --- a/CVE-2021-3476.patch +++ /dev/null @@ -1,70 +0,0 @@ -From eec0dba242bedd2778c973ae4af112107b33d9c9 Mon Sep 17 00:00:00 2001 -From: peterhillman -Date: Wed, 7 Oct 2020 09:47:48 +1300 -Subject: [PATCH] fix undefined behavior: ignore unused bits in B44 mode - detection (#832) - -Signed-off-by: Peter Hillman ---- - IlmImf/ImfB44Compressor.cpp | 37 ++++++++++++++++------------- - 1 file changed, 20 insertions(+), 17 deletions(-) - -diff --git a/IlmImf/ImfB44Compressor.cpp b/IlmImf/ImfB44Compressor.cpp -index 3b18ba855..0725659db 100644 ---- a/IlmImf/ImfB44Compressor.cpp -+++ b/IlmImf/ImfB44Compressor.cpp -@@ -381,26 +381,26 @@ unpack14 (const unsigned char b[14], unsigned short s[16]) - s[ 0] = (b[0] << 8) | b[1]; - - unsigned short shift = (b[ 2] >> 2); -- unsigned short bias = (0x20 << shift); -+ unsigned short bias = (0x20u << shift); - -- s[ 4] = s[ 0] + ((((b[ 2] << 4) | (b[ 3] >> 4)) & 0x3f) << shift) - bias; -- s[ 8] = s[ 4] + ((((b[ 3] << 2) | (b[ 4] >> 6)) & 0x3f) << shift) - bias; -- s[12] = s[ 8] + ((b[ 4] & 0x3f) << shift) - bias; -+ s[ 4] = s[ 0] + ((((b[ 2] << 4) | (b[ 3] >> 4)) & 0x3fu) << shift) - bias; -+ s[ 8] = s[ 4] + ((((b[ 3] << 2) | (b[ 4] >> 6)) & 0x3fu) << shift) - bias; -+ s[12] = s[ 8] + ((b[ 4] & 0x3fu) << shift) - bias; - -- s[ 1] = s[ 0] + ((b[ 5] >> 2) << shift) - bias; -- s[ 5] = s[ 4] + ((((b[ 5] << 4) | (b[ 6] >> 4)) & 0x3f) << shift) - bias; -- s[ 9] = s[ 8] + ((((b[ 6] << 2) | (b[ 7] >> 6)) & 0x3f) << shift) - bias; -- s[13] = s[12] + ((b[ 7] & 0x3f) << shift) - bias; -+ s[ 1] = s[ 0] + ((unsigned int) (b[ 5] >> 2) << shift) - bias; -+ s[ 5] = s[ 4] + ((((b[ 5] << 4) | (b[ 6] >> 4)) & 0x3fu) << shift) - bias; -+ s[ 9] = s[ 8] + ((((b[ 6] << 2) | (b[ 7] >> 6)) & 0x3fu) << shift) - bias; -+ s[13] = s[12] + ((b[ 7] & 0x3fu) << shift) - bias; - -- s[ 2] = s[ 1] + ((b[ 8] >> 2) << shift) - bias; -- s[ 6] = s[ 5] + ((((b[ 8] << 4) | (b[ 9] >> 4)) & 0x3f) << shift) - bias; -- s[10] = s[ 9] + ((((b[ 9] << 2) | (b[10] >> 6)) & 0x3f) << shift) - bias; -- s[14] = s[13] + ((b[10] & 0x3f) << shift) - bias; -+ s[ 2] = s[ 1] + ((unsigned int)(b[ 8] >> 2) << shift) - bias; -+ s[ 6] = s[ 5] + ((((b[ 8] << 4) | (b[ 9] >> 4)) & 0x3fu) << shift) - bias; -+ s[10] = s[ 9] + ((((b[ 9] << 2) | (b[10] >> 6)) & 0x3fu) << shift) - bias; -+ s[14] = s[13] + ((b[10] & 0x3fu) << shift) - bias; - -- s[ 3] = s[ 2] + ((b[11] >> 2) << shift) - bias; -- s[ 7] = s[ 6] + ((((b[11] << 4) | (b[12] >> 4)) & 0x3f) << shift) - bias; -- s[11] = s[10] + ((((b[12] << 2) | (b[13] >> 6)) & 0x3f) << shift) - bias; -- s[15] = s[14] + ((b[13] & 0x3f) << shift) - bias; -+ s[ 3] = s[ 2] + ((unsigned int)(b[11] >> 2) << shift) - bias; -+ s[ 7] = s[ 6] + ((((b[11] << 4) | (b[12] >> 4)) & 0x3fu) << shift) - bias; -+ s[11] = s[10] + ((((b[12] << 2) | (b[13] >> 6)) & 0x3fu) << shift) - bias; -+ s[15] = s[14] + ((b[13] & 0x3fu) << shift) - bias; - - for (int i = 0; i < 16; ++i) - { -@@ -951,7 +951,10 @@ B44Compressor::uncompress (const char *inPtr, - if (inSize < 3) - notEnoughData(); - -- if (((const unsigned char *)inPtr)[2] == 0xfc) -+ // -+ // If shift exponent is 63, call unpack14 (ignoring unused bits) -+ // -+ if (((const unsigned char *)inPtr)[2] >= (13<<2) ) - { - unpack3 ((const unsigned char *)inPtr, s); - inPtr += 3; diff --git a/CVE-2021-3477.patch b/CVE-2021-3477.patch deleted file mode 100644 index 15ed659..0000000 --- a/CVE-2021-3477.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 467be80b75642efbbe6bdace558079f68c16acb1 Mon Sep 17 00:00:00 2001 -From: peterhillman -Date: Tue, 10 Nov 2020 08:35:59 +1300 -Subject: [PATCH] Fix overflow computing deeptile sample table size (#861) - -Signed-off-by: Peter Hillman ---- - IlmImf/ImfDeepTiledInputFile.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/IlmImf/ImfDeepTiledInputFile.cpp b/IlmImf/ImfDeepTiledInputFile.cpp -index 0f893481b..f5abe9c6a 100644 ---- a/IlmImf/ImfDeepTiledInputFile.cpp -+++ b/IlmImf/ImfDeepTiledInputFile.cpp -@@ -1034,8 +1034,8 @@ DeepTiledInputFile::initialize () - for (size_t i = 0; i < _data->tileBuffers.size(); i++) - _data->tileBuffers[i] = new TileBuffer (); - -- _data->maxSampleCountTableSize = _data->tileDesc.ySize * -- _data->tileDesc.xSize * -+ _data->maxSampleCountTableSize = static_cast(_data->tileDesc.ySize) * -+ static_cast(_data->tileDesc.xSize) * - sizeof(int); - - _data->sampleCountTableBuffer.resizeErase(_data->maxSampleCountTableSize); diff --git a/CVE-2021-3478.patch b/CVE-2021-3478.patch deleted file mode 100644 index 1a09a4e..0000000 --- a/CVE-2021-3478.patch +++ /dev/null @@ -1,35 +0,0 @@ -From bc88cdb6c97fbf5bc5d11ad8ca55306da931283a Mon Sep 17 00:00:00 2001 -From: peterhillman -Date: Fri, 20 Nov 2020 08:30:08 +1300 -Subject: [PATCH] sanity check ScanlineInput bytesPerLine instead of lineOffset - size (#863) - -Signed-off-by: Peter Hillman - -Co-authored-by: Cary Phillips ---- - IlmImf/ImfScanLineInputFile.cpp | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/IlmImf/ImfScanLineInputFile.cpp b/IlmImf/ImfScanLineInputFile.cpp -index 649fc304b..54caec01d 100644 ---- a/IlmImf/ImfScanLineInputFile.cpp -+++ b/IlmImf/ImfScanLineInputFile.cpp -@@ -1135,14 +1135,14 @@ void ScanLineInputFile::initialize(const Header& header) - _data->linesInBuffer) / _data->linesInBuffer; - - // -- // avoid allocating excessive memory due to large lineOffsets table size. -+ // avoid allocating excessive memory due to large lineOffsets and bytesPerLine table sizes. - // If the chunktablesize claims to be large, -- // check the file is big enough to contain the table before allocating memory -+ // check the file is big enough to contain the lineOffsets table before allocating memory - // in the bytesPerLineTable and the lineOffsets table. - // Attempt to read the last entry in the table. Either the seekg() or the read() - // call will throw an exception if the file is too small to contain the table - // -- if (lineOffsetSize > gLargeChunkTableSize) -+ if (lineOffsetSize * _data->linesInBuffer > gLargeChunkTableSize) - { - Int64 pos = _streamData->is->tellg(); - _streamData->is->seekg(pos + (lineOffsetSize-1)*sizeof(Int64)); diff --git a/CVE-2021-3479-pre0.patch b/CVE-2021-3479-pre0.patch deleted file mode 100644 index 5bb9c78..0000000 --- a/CVE-2021-3479-pre0.patch +++ /dev/null @@ -1,174 +0,0 @@ -From 969907789e687469a9ee5c003656f761e77fe15d Mon Sep 17 00:00:00 2001 -From: Peter Hillman -Date: Fri, 26 Jul 2019 18:25:44 +1200 -Subject: [PATCH] Fix #452: read floats with 32 bit alignment - ---- - IlmImf/ImfMisc.cpp | 18 +++++++- - .../testOptimizedInterleavePatterns.cpp | 46 +++++++++++++++++-- - 2 files changed, 59 insertions(+), 5 deletions(-) - -diff --git a/IlmImf/ImfMisc.cpp b/IlmImf/ImfMisc.cpp -index 4622c4170..277554320 100644 ---- a/IlmImf/ImfMisc.cpp -+++ b/IlmImf/ImfMisc.cpp -@@ -1381,6 +1381,20 @@ skipChannel (const char *& readPtr, - } - - -+namespace -+{ -+// -+// helper function to realign floats -+// for architectures that require 32-bit alignment for float reading -+// -+ -+struct FBytes { uint8_t b[4]; }; -+union bytesOrFloat { -+ FBytes b; -+ float f; -+} ; -+} -+ - void - convertInPlace (char *& writePtr, - const char *& readPtr, -@@ -1411,7 +1425,9 @@ convertInPlace (char *& writePtr, - - for (size_t j = 0; j < numPixels; ++j) - { -- Xdr::write (writePtr, *(const float *) readPtr); -+ union bytesOrFloat tmp; -+ tmp.b = * reinterpret_cast( readPtr ); -+ Xdr::write (writePtr, tmp.f); - readPtr += sizeof(float); - } - break; -diff --git a/IlmImfTest/testOptimizedInterleavePatterns.cpp b/IlmImfTest/testOptimizedInterleavePatterns.cpp -index 1ed74d2e7..f24c09cab 100644 ---- a/IlmImfTest/testOptimizedInterleavePatterns.cpp -+++ b/IlmImfTest/testOptimizedInterleavePatterns.cpp -@@ -171,6 +171,14 @@ Schema Schemes[] = - {NULL,NULL,NULL,0,NULL,NULL} - }; - -+template inline T alignToFour(T input) -+{ -+ while( (intptr_t(input)&3) !=0 ) -+ { -+ input++; -+ } -+ return input; -+} - - - bool compare(const FrameBuffer& asRead, -@@ -192,6 +200,7 @@ bool compare(const FrameBuffer& asRead, - switch (i.slice().type) - { - case IMF::FLOAT : -+ assert(alignToFour(ptr)==ptr); - readHalf = half(*(float*) ptr); - break; - case IMF::HALF : -@@ -213,6 +222,7 @@ bool compare(const FrameBuffer& asRead, - switch (p.slice().type) - { - case IMF::FLOAT : -+ assert(alignToFour(ptr)==ptr); - writtenHalf = half(*(float*) ptr); - break; - case IMF::HALF : -@@ -250,6 +260,8 @@ bool compare(const FrameBuffer& asRead, - return true; - } - -+ -+ - // - // allocate readingBuffer or writingBuffer, setting up a framebuffer to point to the right thing - // -@@ -272,7 +284,7 @@ setupBuffer (const Header& hdr, // header to grab datawindow from - // - int activechans = 0; - int bytes_per_pixel =0; -- -+ bool has32BitValue = false; - while (channels[activechans]!=NULL) - { - if (pt==NULL) -@@ -284,7 +296,15 @@ setupBuffer (const Header& hdr, // header to grab datawindow from - switch (pt[activechans]) - { - case IMF::HALF : bytes_per_pixel+=2;break; -- case IMF::FLOAT : case IMF::UINT : bytes_per_pixel+=4;break; -+ case IMF::FLOAT : case IMF::UINT : -+ // some architectures (e.g arm7 cannot write 32 bit values -+ // to addresses which aren't aligned to 32 bit addresses) -+ // so bump to next multiple of four -+ bytes_per_pixel = alignToFour(bytes_per_pixel); -+ bytes_per_pixel+=4; -+ has32BitValue = true; -+ break; -+ - default : - cout << "Unexpected PixelType?\n"; - exit(1); -@@ -306,7 +326,11 @@ setupBuffer (const Header& hdr, // header to grab datawindow from - switch (pt[passivechans+activechans]) - { - case IMF::HALF : bytes_per_pixel+=2;break; -- case IMF::FLOAT : case IMF::UINT : bytes_per_pixel+=4;break; -+ case IMF::FLOAT : case IMF::UINT : -+ bytes_per_pixel = alignToFour(bytes_per_pixel); -+ bytes_per_pixel+=4; -+ has32BitValue = true; -+ break; - default : - cout << "Unexpected PixelType?\n"; - exit(1); -@@ -314,6 +338,11 @@ setupBuffer (const Header& hdr, // header to grab datawindow from - } - passivechans++; - } -+ -+ if(has32BitValue) -+ { -+ bytes_per_pixel = alignToFour(bytes_per_pixel); -+ } - - int chans = activechans+passivechans; - -@@ -350,7 +379,9 @@ setupBuffer (const Header& hdr, // header to grab datawindow from - } - else - { -+ write_ptr = alignToFour(write_ptr); - *(float*)write_ptr = float(v); -+ - write_ptr+=4; - } - chan++; -@@ -395,7 +426,13 @@ setupBuffer (const Header& hdr, // header to grab datawindow from - offset = (writing ? &writingBuffer[0] : - &readingBuffer[0]) + bank*bytes_per_bank_row - first_pixel_index; - } -- -+ -+ -+ if(type==FLOAT || type==UINT) -+ { -+ offset = alignToFour(offset); -+ } -+ - if (i -Date: Tue, 6 Apr 2021 15:16:42 +0800 -Subject: [PATCH] lighter weight reading of Luma-only images via RgbaInputFile - (#827) - -Signed-off-by: Peter Hillman - -Co-authored-by: Cary Phillips ---- - IlmImf/ImfRgbaFile.cpp | 89 ++++++++++++++++++++++++++++++------------ - IlmImfTest/testYca.cpp | 1 + - 2 files changed, 64 insertions(+), 26 deletions(-) - -diff --git a/IlmImf/ImfRgbaFile.cpp b/IlmImf/ImfRgbaFile.cpp -index c2b604a..2ebfbed 100644 ---- a/IlmImf/ImfRgbaFile.cpp -+++ b/IlmImf/ImfRgbaFile.cpp -@@ -1169,7 +1169,7 @@ RgbaInputFile::RgbaInputFile (const char name[], int numThreads): - { - RgbaChannels rgbaChannels = channels(); - -- if (rgbaChannels & (WRITE_Y | WRITE_C)) -+ if (rgbaChannels & WRITE_C) - _fromYca = new FromYca (*_inputFile, rgbaChannels); - } - -@@ -1181,7 +1181,7 @@ RgbaInputFile::RgbaInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int n - { - RgbaChannels rgbaChannels = channels(); - -- if (rgbaChannels & (WRITE_Y | WRITE_C)) -+ if (rgbaChannels & WRITE_C) - _fromYca = new FromYca (*_inputFile, rgbaChannels); - } - -@@ -1196,7 +1196,7 @@ RgbaInputFile::RgbaInputFile (const char name[], - { - RgbaChannels rgbaChannels = channels(); - -- if (rgbaChannels & (WRITE_Y | WRITE_C)) -+ if (rgbaChannels & WRITE_C) - _fromYca = new FromYca (*_inputFile, rgbaChannels); - } - -@@ -1211,7 +1211,7 @@ RgbaInputFile::RgbaInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - { - RgbaChannels rgbaChannels = channels(); - -- if (rgbaChannels & (WRITE_Y | WRITE_C)) -+ if (rgbaChannels & WRITE_C) - _fromYca = new FromYca (*_inputFile, rgbaChannels); - } - -@@ -1238,27 +1238,42 @@ RgbaInputFile::setFrameBuffer (Rgba *base, size_t xStride, size_t yStride) - - FrameBuffer fb; - -- fb.insert (_channelNamePrefix + "R", -- Slice (HALF, -- (char *) &base[0].r, -- xs, ys, -- 1, 1, // xSampling, ySampling -- 0.0)); // fillValue -- -- fb.insert (_channelNamePrefix + "G", -- Slice (HALF, -- (char *) &base[0].g, -- xs, ys, -- 1, 1, // xSampling, ySampling -- 0.0)); // fillValue -- -- fb.insert (_channelNamePrefix + "B", -- Slice (HALF, -- (char *) &base[0].b, -- xs, ys, -- 1, 1, // xSampling, ySampling -- 0.0)); // fillValue -- -+ if( channels() & WRITE_Y ) -+ { -+ fb.insert (_channelNamePrefix + "Y", -+ Slice (HALF, -+ (char *) &base[0].r, -+ xs, ys, -+ 1, 1, // xSampling, ySampling -+ 0.0)); // fillValue -+ } -+ else -+ { -+ -+ -+ fb.insert (_channelNamePrefix + "R", -+ Slice (HALF, -+ (char *) &base[0].r, -+ xs, ys, -+ 1, 1, // xSampling, ySampling -+ 0.0)); // fillValue -+ -+ -+ -+ fb.insert (_channelNamePrefix + "G", -+ Slice (HALF, -+ (char *) &base[0].g, -+ xs, ys, -+ 1, 1, // xSampling, ySampling -+ 0.0)); // fillValue -+ -+ fb.insert (_channelNamePrefix + "B", -+ Slice (HALF, -+ (char *) &base[0].b, -+ xs, ys, -+ 1, 1, // xSampling, ySampling -+ 0.0)); // fillValue -+ } - fb.insert (_channelNamePrefix + "A", - Slice (HALF, - (char *) &base[0].a, -@@ -1281,7 +1296,7 @@ RgbaInputFile::setLayerName (const string &layerName) - - RgbaChannels rgbaChannels = channels(); - -- if (rgbaChannels & (WRITE_Y | WRITE_C)) -+ if (rgbaChannels & WRITE_C) - _fromYca = new FromYca (*_inputFile, rgbaChannels); - - FrameBuffer fb; -@@ -1300,6 +1315,28 @@ RgbaInputFile::readPixels (int scanLine1, int scanLine2) - else - { - _inputFile->readPixels (scanLine1, scanLine2); -+ -+ if (channels() & WRITE_Y) -+ { -+ // -+ // Luma channel has been written into red channel -+ // Duplicate into green and blue channel to create gray image -+ // -+ const Slice* s = _inputFile->frameBuffer().findSlice(_channelNamePrefix + "Y"); -+ Box2i dataWindow = _inputFile->header().dataWindow(); -+ -+ for( int scanLine = scanLine1 ; scanLine <= scanLine2 ; scanLine++ ) -+ { -+ char* rowBase = s->base + scanLine*s->yStride; -+ for(int x = dataWindow.min.x ; x <= dataWindow.max.x ; ++x ) -+ { -+ Rgba* pixel = reinterpret_cast(rowBase+x*s->xStride); -+ pixel->g = pixel->r; -+ pixel->b = pixel->r; -+ } -+ -+ } -+ } - } - } - -diff --git a/IlmImfTest/testYca.cpp b/IlmImfTest/testYca.cpp -index 0d3459e..3007552 100644 ---- a/IlmImfTest/testYca.cpp -+++ b/IlmImfTest/testYca.cpp -@@ -187,6 +187,7 @@ writeReadYca (const char fileName[], - else - { - assert (p1.g == p2.g); -+ assert (p1.b == p2.b); - } - - if (channels & WRITE_A) --- -2.23.0 - diff --git a/CVE-2021-3479-pre2.patch b/CVE-2021-3479-pre2.patch deleted file mode 100644 index eb4f0f4..0000000 --- a/CVE-2021-3479-pre2.patch +++ /dev/null @@ -1,680 +0,0 @@ -From 3c05eacda70e3ac00ca45287aa4c8de7262a0673 Mon Sep 17 00:00:00 2001 -From: peterhillman -Date: Tue, 8 Sep 2020 10:03:03 +1200 -Subject: [PATCH] Address issues reported by Undefined Behavior Sanitizer - running IlmImfTest (#828) - -* add join() to IlmThread for avoiding use-after-free race condition - -Signed-off-by: Peter Hillman - -* Use intptr_t in pointer math with negatives (pointer overflow behavior undefined) - -Signed-off-by: Peter Hillman - -* fix undefined behavior reading non-aligned 32/64 bit ints - -Signed-off-by: Peter Hillman - -* fix undefined behavior warnings in IlmImfTest - -Signed-off-by: Peter Hillman - -* cleaner pointer casting/typo fix - -Signed-off-by: Peter Hillman ---- - IlmImf/ImfCompositeDeepScanLine.cpp | 9 +++--- - IlmImf/ImfDeepScanLineInputFile.cpp | 28 +++++++++++++---- - IlmImf/ImfDeepScanLineOutputFile.cpp | 30 +++++++++++++++++-- - IlmImf/ImfFrameBuffer.cpp | 4 +-- - IlmImf/ImfInputFile.cpp | 13 ++++---- - IlmImf/ImfMisc.cpp | 9 ++++-- - IlmImf/ImfOutputFile.cpp | 15 ++++++---- - IlmImf/ImfRgbaFile.cpp | 24 ++++++++++----- - IlmImf/ImfScanLineInputFile.cpp | 19 +++++++----- - IlmImf/ImfTiledInputFile.cpp | 5 ++-- - IlmImf/ImfTiledOutputFile.cpp | 5 ++-- - IlmImf/ImfTiledRgbaFile.cpp | 13 ++++++-- - .../IlmImfTest/testCompositeDeepScanLine.cpp | 3 +- - IlmImfTest/testDwaCompressorSimd.cpp | 3 +- - IlmImfTest/testMultiPartApi.cpp | 15 ++-------- - IlmImfTest/testMultiPartThreading.cpp | 16 ++-------- - .../testOptimizedInterleavePatterns.cpp | 12 ++++++-- - IlmImfTest/testPreviewImage.cpp | 2 +- - IlmImfTest/testSharedFrameBuffer.cpp | 23 ++++++++------ - 25 files changed, 207 insertions(+), 93 deletions(-) - -diff --git a/IlmImf/ImfCompositeDeepScanLine.cpp b/IlmImf/ImfCompositeDeepScanLine.cpp -index fac7fc432..1572c069e 100644 ---- a/IlmImf/ImfCompositeDeepScanLine.cpp -+++ b/IlmImf/ImfCompositeDeepScanLine.cpp -@@ -323,7 +323,6 @@ class LineCompositeTask : public Task - - }; - -- - void - composite_line(int y, - int start, -@@ -386,16 +385,18 @@ composite_line(int y, - { - - float value = output_pixel[ _Data->_bufferMap[channel_number] ]; // value to write -- -+ intptr_t base = reinterpret_cast(it.slice().base); - - // cast to half float if necessary - if(it.slice().type==OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT) - { -- * (float *)(it.slice().base + y*it.slice().yStride + x*it.slice().xStride) = value; -+ float* ptr = reinterpret_cast(base + y*it.slice().yStride + x*it.slice().xStride); -+ *ptr = value; - } - else if(it.slice().type==HALF) - { -- * (half *)(it.slice().base + y*it.slice().yStride + x*it.slice().xStride) = half(value); -+ half* ptr = reinterpret_cast(base + y*it.slice().yStride + x*it.slice().xStride); -+ *ptr = half(value); - } - - channel_number++; -diff --git a/IlmImf/ImfDeepScanLineInputFile.cpp b/IlmImf/ImfDeepScanLineInputFile.cpp -index 0844d2349..c39bd225a 100644 ---- a/IlmImf/ImfDeepScanLineInputFile.cpp -+++ b/IlmImf/ImfDeepScanLineInputFile.cpp -@@ -1425,6 +1425,20 @@ DeepScanLineInputFile::readPixels (int scanLine) - } - - -+namespace -+{ -+struct I64Bytes -+{ -+ uint8_t b[8]; -+}; -+ -+ -+union bytesOrInt64 -+{ -+ I64Bytes b; -+ Int64 i; -+}; -+} - void - DeepScanLineInputFile::rawPixelData (int firstScanLine, - char *pixelData, -@@ -1507,12 +1521,16 @@ DeepScanLineInputFile::rawPixelData (int firstScanLine, - - // copy the values we have read into the output block - *(int *) pixelData = yInFile; -- *(Int64 *) (pixelData+4) =sampleCountTableSize; -- *(Int64 *) (pixelData+12) = packedDataSize; -- -+ bytesOrInt64 tmp; -+ tmp.i=sampleCountTableSize; -+ memcpy(pixelData+4,&tmp.b,8); -+ tmp.i = packedDataSize; -+ memcpy(pixelData+12,&tmp.b,8); -+ - // didn't read the unpackedsize - do that now -- Xdr::read (*_data->_streamData->is, *(Int64 *) (pixelData+20)); -- -+ Xdr::read (*_data->_streamData->is,tmp.i); -+ memcpy(pixelData+20,&tmp.b,8); -+ - // read the actual data - _data->_streamData->is->read(pixelData+28, sampleCountTableSize+packedDataSize); - -diff --git a/IlmImf/ImfDeepScanLineOutputFile.cpp b/IlmImf/ImfDeepScanLineOutputFile.cpp -index 6e302440b..d455df9e9 100644 ---- a/IlmImf/ImfDeepScanLineOutputFile.cpp -+++ b/IlmImf/ImfDeepScanLineOutputFile.cpp -@@ -1411,6 +1411,23 @@ DeepScanLineOutputFile::copyPixels (DeepScanLineInputPart &in) - copyPixels(*in.file); - } - -+ -+// helper structure to read Int64 from non 8 byte aligned addresses -+namespace -+{ -+struct I64Bytes -+{ -+ uint8_t b[8]; -+}; -+ -+ -+union bytesOrInt64 -+{ -+ I64Bytes b; -+ Int64 i; -+}; -+} -+ - void - DeepScanLineOutputFile::copyPixels (DeepScanLineInputFile &in) - { -@@ -1487,9 +1504,16 @@ DeepScanLineOutputFile::copyPixels (DeepScanLineInputFile &in) - - // extract header from block to pass to writePixelData - -- Int64 packedSampleCountSize = *(Int64 *) (&data[4]); -- Int64 packedDataSize = *(Int64 *) (&data[12]); -- Int64 unpackedDataSize = *(Int64 *) (&data[20]); -+ bytesOrInt64 tmp; -+ memcpy(&tmp.b,&data[4],8); -+ Int64 packedSampleCountSize = tmp.i; -+ -+ memcpy(&tmp.b,&data[12],8); -+ Int64 packedDataSize = tmp.i; -+ -+ memcpy(&tmp.b,&data[20],8); -+ Int64 unpackedDataSize = tmp.i; -+ - const char * sampleCountTable = &data[0]+28; - const char * pixelData = sampleCountTable + packedSampleCountSize; - -diff --git a/IlmImf/ImfFrameBuffer.cpp b/IlmImf/ImfFrameBuffer.cpp -index a11ab4e63..a6b26b2a4 100644 ---- a/IlmImf/ImfFrameBuffer.cpp -+++ b/IlmImf/ImfFrameBuffer.cpp -@@ -89,7 +89,7 @@ Slice::Make ( - bool xTileCoords, - bool yTileCoords) - { -- char* base = reinterpret_cast (const_cast (ptr)); -+ intptr_t base = reinterpret_cast (const_cast (ptr)); - if (xStride == 0) - { - switch (type) -@@ -117,7 +117,7 @@ Slice::Make ( - - return Slice ( - type, -- base - offx - offy, -+ reinterpret_cast(base - offx - offy), - xStride, - yStride, - xSampling, -diff --git a/IlmImf/ImfInputFile.cpp b/IlmImf/ImfInputFile.cpp -index 8695c65bf..6bcb451ec 100644 ---- a/IlmImf/ImfInputFile.cpp -+++ b/IlmImf/ImfInputFile.cpp -@@ -308,6 +308,10 @@ bufferedReadPixels (InputFile::Data* ifd, int scanLine1, int scanLine2) - while (modp (yStart, toSlice.ySampling) != 0) - ++yStart; - -+ -+ intptr_t fromBase = reinterpret_cast(fromSlice.base); -+ intptr_t toBase = reinterpret_cast(toSlice.base); -+ - for (int y = yStart; - y <= maxYThisRow; - y += toSlice.ySampling) -@@ -316,14 +320,13 @@ bufferedReadPixels (InputFile::Data* ifd, int scanLine1, int scanLine2) - // Set the pointers to the start of the y scanline in - // this row of tiles - // -- -- fromPtr = fromSlice.base + -+ fromPtr = reinterpret_cast (fromBase + - (y - tileRange.min.y) * fromSlice.yStride + -- xStart * fromSlice.xStride; -+ xStart * fromSlice.xStride); - -- toPtr = toSlice.base + -+ toPtr = reinterpret_cast (toBase + - divp (y, toSlice.ySampling) * toSlice.yStride + -- divp (xStart, toSlice.xSampling) * toSlice.xStride; -+ divp (xStart, toSlice.xSampling) * toSlice.xStride); - - // - // Copy all pixels for the scanline in this row of tiles -diff --git a/IlmImf/ImfMisc.cpp b/IlmImf/ImfMisc.cpp -index b397b9f98..bae4622b7 100644 ---- a/IlmImf/ImfMisc.cpp -+++ b/IlmImf/ImfMisc.cpp -@@ -1390,9 +1390,10 @@ namespace - // - - struct FBytes { uint8_t b[4]; }; --union bytesOrFloat { -+union bytesUintOrFloat { - FBytes b; - float f; -+ unsigned int u; - } ; - } - -@@ -1408,7 +1409,9 @@ convertInPlace (char *& writePtr, - - for (size_t j = 0; j < numPixels; ++j) - { -- Xdr::write (writePtr, *(const unsigned int *) readPtr); -+ union bytesUintOrFloat tmp; -+ tmp.b = * reinterpret_cast( readPtr ); -+ Xdr::write (writePtr, tmp.u); - readPtr += sizeof(unsigned int); - } - break; -@@ -1426,7 +1429,7 @@ convertInPlace (char *& writePtr, - - for (size_t j = 0; j < numPixels; ++j) - { -- union bytesOrFloat tmp; -+ union bytesUintOrFloat tmp; - tmp.b = * reinterpret_cast( readPtr ); - Xdr::write (writePtr, tmp.f); - readPtr += sizeof(float); -diff --git a/IlmImf/ImfOutputFile.cpp b/IlmImf/ImfOutputFile.cpp -index d0e34988e..899303ea6 100644 ---- a/IlmImf/ImfOutputFile.cpp -+++ b/IlmImf/ImfOutputFile.cpp -@@ -558,13 +558,18 @@ LineBufferTask::execute () - // If necessary, convert the pixel data to Xdr format. - // Then store the pixel data in _ofd->lineBuffer. - // -- -- const char *linePtr = slice.base + -- divp (y, slice.ySampling) * -+ // slice.base may be 'negative' but -+ // pointer arithmetic is not allowed to overflow, so -+ // perform computation with the non-pointer 'intptr_t' instead -+ // -+ intptr_t base = reinterpret_cast(slice.base); -+ intptr_t linePtr = base + divp (y, slice.ySampling) * - slice.yStride; - -- const char *readPtr = linePtr + dMinX * slice.xStride; -- const char *endPtr = linePtr + dMaxX * slice.xStride; -+ const char *readPtr = reinterpret_cast(linePtr + -+ dMinX * slice.xStride); -+ const char *endPtr = reinterpret_cast(linePtr + -+ dMaxX * slice.xStride); - - copyFromFrameBuffer (writePtr, readPtr, endPtr, - slice.xStride, _ofd->format, -diff --git a/IlmImf/ImfRgbaFile.cpp b/IlmImf/ImfRgbaFile.cpp -index 68fa51cb5..9e781abeb 100644 ---- a/IlmImf/ImfRgbaFile.cpp -+++ b/IlmImf/ImfRgbaFile.cpp -@@ -369,6 +369,7 @@ RgbaOutputFile::ToYca::writePixels (int numScanLines) - "\"" << _outputFile.fileName() << "\"."); - } - -+ intptr_t base = reinterpret_cast(_fbBase); - if (_writeY && !_writeC) - { - // -@@ -385,8 +386,9 @@ RgbaOutputFile::ToYca::writePixels (int numScanLines) - - for (int j = 0; j < _width; ++j) - { -- _tmpBuf[j] = _fbBase[_fbYStride * _currentScanLine + -- _fbXStride * (j + _xMin)]; -+ _tmpBuf[j] = *reinterpret_cast(base + sizeof(Rgba)* -+ (_fbYStride * _currentScanLine + -+ _fbXStride * (j + _xMin))); - } - - // -@@ -418,10 +420,13 @@ RgbaOutputFile::ToYca::writePixels (int numScanLines) - // frame buffer into _tmpBuf. - // - -+ intptr_t base = reinterpret_cast(_fbBase); -+ - for (int j = 0; j < _width; ++j) - { -- _tmpBuf[j + N2] = _fbBase[_fbYStride * _currentScanLine + -- _fbXStride * (j + _xMin)]; -+ const Rgba* ptr = reinterpret_cast(base+sizeof(Rgba)* -+ (_fbYStride * _currentScanLine + _fbXStride * (j + _xMin)) ); -+ _tmpBuf[j + N2] = *ptr; - } - - // -@@ -1081,9 +1086,13 @@ RgbaInputFile::FromYca::readPixels (int scanLine) - - fixSaturation (_yw, _width, _buf2, _tmpBuf); - -- for (int i = 0; i < _width; ++i) -- _fbBase[_fbYStride * scanLine + _fbXStride * (i + _xMin)] = _tmpBuf[i]; - -+ intptr_t base = reinterpret_cast(_fbBase); -+ for (int i = 0; i < _width; ++i) -+ { -+ Rgba* ptr = reinterpret_cast(base + sizeof(Rgba)*(_fbYStride * scanLine + _fbXStride * (i + _xMin))); -+ *ptr = _tmpBuf[i]; -+ } - _currentScanLine = scanLine; - } - -@@ -1335,10 +1344,11 @@ RgbaInputFile::readPixels (int scanLine1, int scanLine2) - // - const Slice* s = _inputFile->frameBuffer().findSlice(_channelNamePrefix + "Y"); - Box2i dataWindow = _inputFile->header().dataWindow(); -+ intptr_t base = reinterpret_cast(s->base); - - for( int scanLine = scanLine1 ; scanLine <= scanLine2 ; scanLine++ ) - { -- char* rowBase = s->base + scanLine*s->yStride; -+ intptr_t rowBase = base + scanLine*s->yStride; - for(int x = dataWindow.min.x ; x <= dataWindow.max.x ; ++x ) - { - Rgba* pixel = reinterpret_cast(rowBase+x*s->xStride); -diff --git a/IlmImf/ImfScanLineInputFile.cpp b/IlmImf/ImfScanLineInputFile.cpp -index b020cb9bb..a0e9a3678 100644 ---- a/IlmImf/ImfScanLineInputFile.cpp -+++ b/IlmImf/ImfScanLineInputFile.cpp -@@ -636,12 +636,14 @@ LineBufferTask::execute () - // The frame buffer contains a slice for this channel. - // - -- char *linePtr = slice.base + -+ intptr_t base = reinterpret_cast(slice.base); -+ -+ intptr_t linePtr = base + - intptr_t( divp (y, slice.ySampling) ) * - intptr_t( slice.yStride ); - -- char *writePtr = linePtr + intptr_t( dMinX ) * intptr_t( slice.xStride ); -- char *endPtr = linePtr + intptr_t( dMaxX ) * intptr_t( slice.xStride ); -+ char *writePtr = reinterpret_cast (linePtr + intptr_t( dMinX ) * intptr_t( slice.xStride )); -+ char *endPtr = reinterpret_cast (linePtr + intptr_t( dMaxX ) * intptr_t( slice.xStride )); - - copyIntoFrameBuffer (readPtr, writePtr, endPtr, - slice.xStride, slice.fill, -@@ -794,20 +796,21 @@ void LineBufferTaskIIF::getWritePointer - outWritePointerRight = 0; - } - -- const char* linePtr1 = firstSlice.base + -+ intptr_t base = reinterpret_cast(firstSlice.base); -+ -+ intptr_t linePtr1 = (base + - divp (y, firstSlice.ySampling) * -- firstSlice.yStride; -+ firstSlice.yStride); - - int dMinX1 = divp (_ifd->minX, firstSlice.xSampling); - int dMaxX1 = divp (_ifd->maxX, firstSlice.xSampling); - - // Construct the writePtr so that we start writing at - // linePtr + Min offset in the line. -- outWritePointerRight = (unsigned short*)(linePtr1 + -+ outWritePointerRight = reinterpret_cast(linePtr1 + - dMinX1 * firstSlice.xStride ); - -- size_t bytesToCopy = ((linePtr1 + dMaxX1 * firstSlice.xStride ) - -- (linePtr1 + dMinX1 * firstSlice.xStride )) + 2; -+ size_t bytesToCopy = ((dMaxX1 * firstSlice.xStride ) - (dMinX1 * firstSlice.xStride )) + 2; - size_t shortsToCopy = bytesToCopy / sizeOfSingleValue; - size_t pixelsToCopy = (shortsToCopy / nbSlicesInBank ) + 1; - -diff --git a/IlmImf/ImfTiledInputFile.cpp b/IlmImf/ImfTiledInputFile.cpp -index 3e7fda333..95edba917 100644 ---- a/IlmImf/ImfTiledInputFile.cpp -+++ b/IlmImf/ImfTiledInputFile.cpp -@@ -609,10 +609,11 @@ TileBufferTask::execute () - // The frame buffer contains a slice for this channel. - // - -- char *writePtr = slice.base + -+ intptr_t base = reinterpret_cast(slice.base); -+ char *writePtr = reinterpret_cast(base + - (y - yOffset) * slice.yStride + - (tileRange.min.x - xOffset) * -- slice.xStride; -+ slice.xStride); - - char *endPtr = writePtr + - (numPixelsPerScanLine - 1) * slice.xStride; -diff --git a/IlmImf/ImfTiledOutputFile.cpp b/IlmImf/ImfTiledOutputFile.cpp -index 52f7577ab..1cb164fdc 100644 ---- a/IlmImf/ImfTiledOutputFile.cpp -+++ b/IlmImf/ImfTiledOutputFile.cpp -@@ -789,10 +789,11 @@ TileBufferTask::execute () - // The frame buffer contains data for this channel. - // - -- const char *readPtr = slice.base + -+ intptr_t base = reinterpret_cast(slice.base); -+ const char *readPtr = reinterpret_cast(base + - (y - yOffset) * slice.yStride + - (tileRange.min.x - xOffset) * -- slice.xStride; -+ slice.xStride); - - const char *endPtr = readPtr + - (numPixelsPerScanLine - 1) * -diff --git a/IlmImf/ImfTiledRgbaFile.cpp b/IlmImf/ImfTiledRgbaFile.cpp -index 157aec0ab..ff90a7b3b 100644 ---- a/IlmImf/ImfTiledRgbaFile.cpp -+++ b/IlmImf/ImfTiledRgbaFile.cpp -@@ -227,11 +227,14 @@ TiledRgbaOutputFile::ToYa::writeTile (int dx, int dy, int lx, int ly) - Box2i dw = _outputFile.dataWindowForTile (dx, dy, lx, ly); - int width = dw.max.x - dw.min.x + 1; - -+ intptr_t base= reinterpret_cast(_fbBase); - for (int y = dw.min.y, y1 = 0; y <= dw.max.y; ++y, ++y1) - { - for (int x = dw.min.x, x1 = 0; x <= dw.max.x; ++x, ++x1) -- _buf[y1][x1] = _fbBase[x * _fbXStride + y * _fbYStride]; -- -+ { -+ Rgba* ptr = reinterpret_cast(base + sizeof(Rgba)*(x * _fbXStride + y * _fbYStride)); -+ _buf[y1][x1] = *ptr; -+ } - RGBAtoYCA (_yw, width, _writeA, _buf[y1], _buf[y1]); - } - -@@ -750,6 +753,9 @@ TiledRgbaInputFile::FromYa::readTile (int dx, int dy, int lx, int ly) - - Box2i dw = _inputFile.dataWindowForTile (dx, dy, lx, ly); - int width = dw.max.x - dw.min.x + 1; -+ intptr_t base= reinterpret_cast(_fbBase); -+ -+ - - for (int y = dw.min.y, y1 = 0; y <= dw.max.y; ++y, ++y1) - { -@@ -763,7 +769,8 @@ TiledRgbaInputFile::FromYa::readTile (int dx, int dy, int lx, int ly) - - for (int x = dw.min.x, x1 = 0; x <= dw.max.x; ++x, ++x1) - { -- _fbBase[x * _fbXStride + y * _fbYStride] = _buf[y1][x1]; -+ Rgba* ptr = reinterpret_cast(base + sizeof(Rgba)*(x * _fbXStride + y * _fbYStride)); -+ *ptr = _buf[y1][x1]; - } - } - } -diff --git a/IlmImfTest/testCompositeDeepScanLine.cpp b/IlmImfTest/testCompositeDeepScanLine.cpp -index 94a7ea962..c85a07ce0 100644 ---- a/IlmImfTest/testCompositeDeepScanLine.cpp -+++ b/IlmImfTest/testCompositeDeepScanLine.cpp -@@ -341,8 +341,9 @@ class data - { - if(!dontbotherloadingdepth || (_channels[i]!="Z" && _channels[i]!="ZBack") ) - { -+ intptr_t base = reinterpret_cast(&data[i]); - framebuf.insert(_channels[i].c_str(), -- Slice(_type,(char *) (&data[i] - (dw.min.x + dw.min.y*(dw.size().x+1))*_channels.size() ), -+ Slice(_type,reinterpret_cast(base - sizeof(T)*(dw.min.x + dw.min.y*(dw.size().x+1))*_channels.size() ), - sizeof(T)*_channels.size(), - sizeof(T)*(dw.size().x+1)*_channels.size()) - ); -diff --git a/IlmImfTest/testDwaCompressorSimd.cpp b/IlmImfTest/testDwaCompressorSimd.cpp -index 0691ada6b..8c6015832 100644 ---- a/IlmImfTest/testDwaCompressorSimd.cpp -+++ b/IlmImfTest/testDwaCompressorSimd.cpp -@@ -97,8 +97,9 @@ compareBufferRelative (const SimdAlignedBuffer64f &src, - { - for (int i=0; i<64; ++i) - { -+ - double diff = fabs(src._buffer[i] - dst._buffer[i]); -- double relDiff = diff / fabs(src._buffer[i]); -+ double relDiff = src._buffer[i]==0 ? 0.0 : diff / fabs(src._buffer[i]); - - if (relDiff > relErrThresh && diff > absErrThresh) - { -diff --git a/IlmImfTest/testMultiPartApi.cpp b/IlmImfTest/testMultiPartApi.cpp -index c0bfb6882..8ce19b579 100644 ---- a/IlmImfTest/testMultiPartApi.cpp -+++ b/IlmImfTest/testMultiPartApi.cpp -@@ -391,18 +391,9 @@ generateRandomFile (int partCount, const std::string & fn) - int numYLevels = part->numYLevels(); - - // Allocating space. -- switch (pixelTypes[i]) -- { -- case 0: -- tiledUintData[i].resizeErase(numYLevels, numXLevels); -- break; -- case 1: -- tiledFloatData[i].resizeErase(numYLevels, numXLevels); -- break; -- case 2: -- tiledHalfData[i].resizeErase(numYLevels, numXLevels); -- break; -- } -+ tiledUintData[i].resizeErase(numYLevels, numXLevels); -+ tiledFloatData[i].resizeErase(numYLevels, numXLevels); -+ tiledHalfData[i].resizeErase(numYLevels, numXLevels); - - tiledFrameBuffers[i].resizeErase(numYLevels, numXLevels); - -diff --git a/IlmImfTest/testMultiPartThreading.cpp b/IlmImfTest/testMultiPartThreading.cpp -index c4e05704a..d764121a9 100644 ---- a/IlmImfTest/testMultiPartThreading.cpp -+++ b/IlmImfTest/testMultiPartThreading.cpp -@@ -560,19 +560,9 @@ generateRandomFile (int partCount, const std::string & fn) - int numXLevels = part->numXLevels(); - int numYLevels = part->numYLevels(); - -- // Allocating space. -- switch (pixelTypes[i]) -- { -- case 0: -- tiledUintData[i].resizeErase(numYLevels, numXLevels); -- break; -- case 1: -- tiledFloatData[i].resizeErase(numYLevels, numXLevels); -- break; -- case 2: -- tiledHalfData[i].resizeErase(numYLevels, numXLevels); -- break; -- } -+ tiledUintData[i].resizeErase(numYLevels, numXLevels); -+ tiledFloatData[i].resizeErase(numYLevels, numXLevels); -+ tiledHalfData[i].resizeErase(numYLevels, numXLevels); - - tiledFrameBuffers[i].resizeErase(numYLevels, numXLevels); - -diff --git a/IlmImfTest/testOptimizedInterleavePatterns.cpp b/IlmImfTest/testOptimizedInterleavePatterns.cpp -index c8ffd3671..07e64a128 100644 ---- a/IlmImfTest/testOptimizedInterleavePatterns.cpp -+++ b/IlmImfTest/testOptimizedInterleavePatterns.cpp -@@ -196,7 +196,11 @@ bool compare(const FrameBuffer& asRead, - for (int x = dataWindow.min.x; x <= dataWindow.max.x; x++) - - { -- char * ptr = (i.slice().base+i.slice().yStride*y +i.slice().xStride*x); -+ // -+ // extract value read back from file -+ // -+ intptr_t base = reinterpret_cast(i.slice().base); -+ char * ptr = reinterpret_cast(base+i.slice().yStride*intptr_t(y) +i.slice().xStride*intptr_t(x)); - half readHalf; - switch (i.slice().type) - { -@@ -218,8 +222,10 @@ bool compare(const FrameBuffer& asRead, - - if (p!=asWritten.end()) - { -- char * ptr = p.slice().base+p.slice().yStride*y + -- p.slice().xStride*x; -+ -+ intptr_t base =reinterpret_cast( p.slice().base); -+ char * ptr = reinterpret_cast(base+p.slice().yStride*intptr_t(y) + -+ p.slice().xStride*intptr_t(x)); - switch (p.slice().type) - { - case IMF::FLOAT : -diff --git a/IlmImfTest/testPreviewImage.cpp b/IlmImfTest/testPreviewImage.cpp -index 5b32c5010..4b8949822 100644 ---- a/IlmImfTest/testPreviewImage.cpp -+++ b/IlmImfTest/testPreviewImage.cpp -@@ -150,7 +150,7 @@ readWriteFiles (const char fileName1[], - file2.setFrameBuffer (pixels2 - dx - dy * w, 1, w); - file2.readPixels (dw.min.y, dw.max.y); - -- for (int i = 0; i < w * h; ++h) -+ for (size_t i = 0; i < w * h; ++i) - { - assert (pixels1[i].r == pixels2[i].r); - assert (pixels1[i].g == pixels2[i].g); -diff --git a/IlmImfTest/testSharedFrameBuffer.cpp b/IlmImfTest/testSharedFrameBuffer.cpp -index 0b2293c23..47c700ab8 100644 ---- a/IlmImfTest/testSharedFrameBuffer.cpp -+++ b/IlmImfTest/testSharedFrameBuffer.cpp -@@ -115,11 +115,7 @@ WriterThread::WriterThread (RgbaOutputFile *outfile): _outfile (outfile) - void - WriterThread::run () - { -- // -- // Signal that the thread has started -- // - -- threadSemaphore.post(); - - while (true) - { -@@ -136,6 +132,12 @@ WriterThread::run () - break; - } - } -+ -+ // -+ // Signal that the thread has finished -+ // -+ -+ threadSemaphore.post(); - } - - -@@ -146,7 +148,7 @@ class ReaderThread : public Thread - ReaderThread (RgbaInputFile *infile, int start, int step); - - virtual void run (); -- -+ - private: - - RgbaInputFile * _infile; -@@ -165,17 +167,20 @@ ReaderThread::ReaderThread (RgbaInputFile *infile, int start, int step): - void - ReaderThread::run () - { -- // -- // Signal that the thread has started -- // - -- threadSemaphore.post (); - - int num = _infile->header().dataWindow().max.y - - _infile->header().dataWindow().min.y + 1; - - for (int i = _start; i < num; i += _step) - _infile->readPixels (i); -+ -+ // -+ // Signal that the thread has finished -+ // -+ -+ threadSemaphore.post (); -+ - } - - diff --git a/CVE-2021-3479.patch b/CVE-2021-3479.patch deleted file mode 100644 index b67eb06..0000000 --- a/CVE-2021-3479.patch +++ /dev/null @@ -1,550 +0,0 @@ -From d80f11f4f55100d007ae80a162bf257ec291612c Mon Sep 17 00:00:00 2001 -From: peterhillman -Date: Fri, 11 Sep 2020 11:02:20 +1200 -Subject: [PATCH] More efficient handling of filled channels reading tiles with - scanline API (#830) - -* refactor channel filling in InputFile API with tiled source - -Signed-off-by: Peter Hillman - -* handle edge-case of empty framebuffer - -Signed-off-by: Peter Hillman ---- - IlmImf/ImfInputFile.cpp | 271 ++++++++++++++++--------- - IlmImfTest/testScanLineApi.cpp | 134 +++++++++++- - 2 files changed, 310 insertions(+), 95 deletions(-) - -diff --git a/IlmImf/ImfInputFile.cpp b/IlmImf/ImfInputFile.cpp -index 6bcb451ec..2ca45a738 100644 ---- a/IlmImf/ImfInputFile.cpp -+++ b/IlmImf/ImfInputFile.cpp -@@ -278,9 +278,14 @@ bufferedReadPixels (InputFile::Data* ifd, int scanLine1, int scanLine2) - // - // We don't have any valid buffered info, so we need to read in - // from the file. -+ // if no channels are being read that are present in file, cachedBuffer will be empty - // - -- ifd->tFile->readTiles (0, ifd->tFile->numXTiles (0) - 1, j, j); -+ if (ifd->cachedBuffer->begin() != ifd->cachedBuffer->end()) -+ { -+ ifd->tFile->readTiles (0, ifd->tFile->numXTiles (0) - 1, j, j); -+ } -+ - ifd->cachedTileY = j; - } - -@@ -289,58 +294,135 @@ bufferedReadPixels (InputFile::Data* ifd, int scanLine1, int scanLine2) - // framebuffer. - // - -- for (FrameBuffer::ConstIterator k = ifd->cachedBuffer->begin(); -- k != ifd->cachedBuffer->end(); -+ for (FrameBuffer::ConstIterator k = ifd->tFileBuffer.begin(); -+ k != ifd->tFileBuffer.end(); - ++k) - { -- Slice fromSlice = k.slice(); // slice to write from -- Slice toSlice = ifd->tFileBuffer[k.name()]; // slice to write to - -- char *fromPtr, *toPtr; -- int size = pixelTypeSize (toSlice.type); - -- int xStart = levelRange.min.x; -- int yStart = minYThisRow; -+ Slice toSlice = k.slice(); // slice to read from -+ char* toPtr; - -- while (modp (xStart, toSlice.xSampling) != 0) -- ++xStart; -+ int xStart = levelRange.min.x; -+ int yStart = minYThisRow; - -- while (modp (yStart, toSlice.ySampling) != 0) -- ++yStart; -+ while (modp (xStart, toSlice.xSampling) != 0) -+ ++xStart; - -+ while (modp (yStart, toSlice.ySampling) != 0) -+ ++yStart; - -- intptr_t fromBase = reinterpret_cast(fromSlice.base); -+ FrameBuffer::ConstIterator c = ifd->cachedBuffer->find(k.name()); - intptr_t toBase = reinterpret_cast(toSlice.base); - -- for (int y = yStart; -- y <= maxYThisRow; -- y += toSlice.ySampling) -+ -+ if( c!=ifd->cachedBuffer->end()) -+ { -+ // -+ // output channel was read from source image: copy to output slice -+ // -+ Slice fromSlice = c.slice(); // slice to write to -+ intptr_t fromBase = reinterpret_cast(fromSlice.base); -+ -+ int size = pixelTypeSize (toSlice.type); -+ char* fromPtr; -+ -+ for (int y = yStart; -+ y <= maxYThisRow; -+ y += toSlice.ySampling) -+ { -+ // -+ // Set the pointers to the start of the y scanline in -+ // this row of tiles -+ // -+ -+ fromPtr = reinterpret_cast (fromBase + -+ (y - tileRange.min.y) * fromSlice.yStride + -+ xStart * fromSlice.xStride); -+ -+ toPtr = reinterpret_cast (toBase + -+ divp (y, toSlice.ySampling) * toSlice.yStride + -+ divp (xStart, toSlice.xSampling) * toSlice.xStride); -+ -+ // -+ // Copy all pixels for the scanline in this row of tiles -+ // -+ -+ for (int x = xStart; -+ x <= levelRange.max.x; -+ x += toSlice.xSampling) -+ { -+ for (int i = 0; i < size; ++i) -+ toPtr[i] = fromPtr[i]; -+ -+ fromPtr += fromSlice.xStride * toSlice.xSampling; -+ toPtr += toSlice.xStride; -+ } -+ } -+ } -+ else - { -- // -- // Set the pointers to the start of the y scanline in -- // this row of tiles -- // -- fromPtr = reinterpret_cast (fromBase + -- (y - tileRange.min.y) * fromSlice.yStride + -- xStart * fromSlice.xStride); -- -- toPtr = reinterpret_cast (toBase + -- divp (y, toSlice.ySampling) * toSlice.yStride + -- divp (xStart, toSlice.xSampling) * toSlice.xStride); -- -- // -- // Copy all pixels for the scanline in this row of tiles -- // -- -- for (int x = xStart; -- x <= levelRange.max.x; -- x += toSlice.xSampling) -+ -+ // -+ // channel wasn't present in source file: fill output slice -+ // -+ for (int y = yStart; -+ y <= maxYThisRow; -+ y += toSlice.ySampling) - { -- for (int i = 0; i < size; ++i) -- toPtr[i] = fromPtr[i]; - -- fromPtr += fromSlice.xStride * toSlice.xSampling; -- toPtr += toSlice.xStride; -+ toPtr = reinterpret_cast (toBase+ -+ divp (y, toSlice.ySampling) * toSlice.yStride + -+ divp (xStart, toSlice.xSampling) * toSlice.xStride); -+ -+ // -+ // Copy all pixels for the scanline in this row of tiles -+ // -+ -+ switch ( toSlice.type) -+ { -+ case UINT: -+ { -+ unsigned int fill = toSlice.fillValue; -+ for (int x = xStart; -+ x <= levelRange.max.x; -+ x += toSlice.xSampling) -+ { -+ * reinterpret_cast(toPtr) = fill; -+ toPtr += toSlice.xStride; -+ } -+ break; -+ } -+ case HALF : -+ { -+ half fill = toSlice.fillValue; -+ for (int x = xStart; -+ x <= levelRange.max.x; -+ x += toSlice.xSampling) -+ { -+ * reinterpret_cast(toPtr) = fill; -+ toPtr += toSlice.xStride; -+ } -+ break; -+ } -+ case FLOAT : -+ { -+ float fill = toSlice.fillValue; -+ for (int x = xStart; -+ x <= levelRange.max.x; -+ x += toSlice.xSampling) -+ { -+ * reinterpret_cast(toPtr) = fill; -+ toPtr += toSlice.xStride; -+ } -+ break; -+ } -+ case NUM_PIXELTYPES : -+ { -+ break; -+ } -+ -+ } - } - } - } -@@ -706,60 +788,67 @@ InputFile::setFrameBuffer (const FrameBuffer &frameBuffer) - { - Slice s = k.slice(); - -- switch (s.type) -- { -- case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: -- -- _data->cachedBuffer->insert -- (k.name(), -- Slice (UINT, -- (char *)(new unsigned int[tileRowSize] - -- _data->offset), -- sizeof (unsigned int), -- sizeof (unsigned int) * -- _data->tFile->levelWidth(0), -- 1, 1, -- s.fillValue, -- false, true)); -- break; -- -- case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: -- -- _data->cachedBuffer->insert -- (k.name(), -- Slice (HALF, -- (char *)(new half[tileRowSize] - -- _data->offset), -- sizeof (half), -- sizeof (half) * -- _data->tFile->levelWidth(0), -- 1, 1, -- s.fillValue, -- false, true)); -- break; -- -- case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: -- -- _data->cachedBuffer->insert -- (k.name(), -- Slice (OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT, -- (char *)(new float[tileRowSize] - -- _data->offset), -- sizeof(float), -- sizeof(float) * -- _data->tFile->levelWidth(0), -- 1, 1, -- s.fillValue, -- false, true)); -- break; -- -- default: -- -- throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); -- } -+ // -+ // omit adding channels that are not listed - 'fill' channels are added later -+ // -+ if ( _data->header.channels().find(k.name()) != _data->header.channels().end() ) -+ { -+ switch (s.type) -+ { -+ case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: -+ -+ _data->cachedBuffer->insert -+ (k.name(), -+ Slice (UINT, -+ (char *)(new unsigned int[tileRowSize] - -+ _data->offset), -+ sizeof (unsigned int), -+ sizeof (unsigned int) * -+ _data->tFile->levelWidth(0), -+ 1, 1, -+ s.fillValue, -+ false, true)); -+ break; -+ -+ case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: -+ -+ _data->cachedBuffer->insert -+ (k.name(), -+ Slice (HALF, -+ (char *)(new half[tileRowSize] - -+ _data->offset), -+ sizeof (half), -+ sizeof (half) * -+ _data->tFile->levelWidth(0), -+ 1, 1, -+ s.fillValue, -+ false, true)); -+ break; -+ -+ case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: -+ -+ _data->cachedBuffer->insert -+ (k.name(), -+ Slice (OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT, -+ (char *)(new float[tileRowSize] - -+ _data->offset), -+ sizeof(float), -+ sizeof(float) * -+ _data->tFile->levelWidth(0), -+ 1, 1, -+ s.fillValue, -+ false, true)); -+ break; -+ -+ default: -+ -+ throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); -+ } -+ } - } - - _data->tFile->setFrameBuffer (*_data->cachedBuffer); -+ - } - - _data->tFileBuffer = frameBuffer; -diff --git a/IlmImfTest/testScanLineApi.cpp b/IlmImfTest/testScanLineApi.cpp -index 354d2dccf..720351ea5 100644 ---- a/IlmImfTest/testScanLineApi.cpp -+++ b/IlmImfTest/testScanLineApi.cpp -@@ -93,7 +93,9 @@ writeRead (const Array2D &pi1, - int yOffset, - Compression comp, - LevelMode mode, -- LevelRoundingMode rmode) -+ LevelRoundingMode rmode, -+ bool fillChannel -+ ) - { - // - // Write the pixel data in pi1, ph1 and ph2 to a tiled -@@ -263,6 +265,16 @@ writeRead (const Array2D &pi1, - Array2D ph2 (h, w); - Array2D pf2 (h, w); - -+ Array2D fi2 (fillChannel ? h : 1 , fillChannel ? w : 1); -+ Array2D fh2 (fillChannel ? h : 1 , fillChannel ? w : 1); -+ Array2D ff2 (fillChannel ? h : 1 , fillChannel ? w : 1); -+ -+ -+ const unsigned int fillInt = 12; -+ const half fillHalf = 4.5; -+ const float fillFloat = M_PI; -+ -+ - FrameBuffer fb; - - fb.insert ("I", // name -@@ -286,6 +298,30 @@ writeRead (const Array2D &pi1, - sizeof (pf2[0][0]) * w) // yStride - ); - -+ if(fillChannel) -+ { -+ fb.insert ("FI", // name -+ Slice (IMF::UINT, // type -+ (char *) &fi2[-dwy][-dwx],// base -+ sizeof (fi2[0][0]), // xStride -+ sizeof (fi2[0][0]) * w,1,1,fillInt) // yStride -+ ); -+ -+ fb.insert ("FH", // name -+ Slice (IMF::HALF, // type -+ (char *) &fh2[-dwy][-dwx],// base -+ sizeof (fh2[0][0]), // xStride -+ sizeof (fh2[0][0]) * w,1,1,fillHalf) // yStride -+ ); -+ -+ fb.insert ("FF", // name -+ Slice (IMF::FLOAT, // type -+ (char *) &ff2[-dwy][-dwx],// base -+ sizeof (ff2[0][0]), // xStride -+ sizeof (ff2[0][0]) * w,1,1,fillFloat) // yStride -+ ); -+ } -+ - in.setFrameBuffer (fb); - for (int y = dw.min.y; y <= dw.max.y; ++y) - in.readPixels (y); -@@ -323,6 +359,13 @@ writeRead (const Array2D &pi1, - assert (pi1[y][x] == pi2[y][x]); - assert (ph1[y][x] == ph2[y][x]); - assert (pf1[y][x] == pf2[y][x]); -+ -+ if (fillChannel) -+ { -+ assert(fi2[y][x] == fillInt); -+ assert(fh2[y][x] == fillHalf); -+ assert(ff2[y][x] == fillFloat); -+ } - } - } - } -@@ -342,6 +385,10 @@ writeRead (const Array2D &pi1, - Array2D ph2 (h, w); - Array2D pf2 (h, w); - -+ Array2D fi2 (fillChannel ? h : 1 , fillChannel ? w : 1); -+ Array2D fh2 (fillChannel ? h : 1 , fillChannel ? w : 1); -+ Array2D ff2 (fillChannel ? h : 1 , fillChannel ? w : 1); -+ - FrameBuffer fb; - - fb.insert ("I", // name -@@ -364,6 +411,34 @@ writeRead (const Array2D &pi1, - sizeof (pf2[0][0]), // xStride - sizeof (pf2[0][0]) * w) // yStride - ); -+ const unsigned int fillInt = 21; -+ const half fillHalf = 42; -+ const float fillFloat = 2.8; -+ -+ if (fillChannel) -+ { -+ fb.insert ("FI", // name -+ Slice (IMF::UINT, // type -+ (char *) &fi2[-dwy][-dwx],// base -+ sizeof (fi2[0][0]), // xStride -+ sizeof (fi2[0][0]) * w,1,1,fillInt) // yStride -+ ); -+ -+ fb.insert ("FH", // name -+ Slice (IMF::HALF, // type -+ (char *) &fh2[-dwy][-dwx],// base -+ sizeof (fh2[0][0]), // xStride -+ sizeof (fh2[0][0]) * w,1,1,fillHalf) // yStride -+ ); -+ -+ fb.insert ("FF", // name -+ Slice (IMF::FLOAT, // type -+ (char *) &ff2[-dwy][-dwx],// base -+ sizeof (ff2[0][0]), // xStride -+ sizeof (ff2[0][0]) * w,1,1,fillFloat) // yStride -+ ); -+ -+ } - - in.setFrameBuffer (fb); - for (int y = dw.max.y; y >= dw.min.y; --y) -@@ -402,6 +477,12 @@ writeRead (const Array2D &pi1, - assert (pi1[y][x] == pi2[y][x]); - assert (ph1[y][x] == ph2[y][x]); - assert (pf1[y][x] == pf2[y][x]); -+ if (fillChannel) -+ { -+ assert(fi2[y][x] == fillInt); -+ assert(fh2[y][x] == fillHalf); -+ assert(ff2[y][x] == fillFloat); -+ } - } - } - } -@@ -422,6 +503,17 @@ writeRead (const Array2D &pi1, - Array2D ph2 (h, w); - Array2D pf2 (h, w); - -+ -+ Array2D fi2 (fillChannel ? h : 1 , fillChannel ? w : 1); -+ Array2D fh2 (fillChannel ? h : 1 , fillChannel ? w : 1); -+ Array2D ff2 (fillChannel ? h : 1 , fillChannel ? w : 1); -+ -+ -+ const unsigned int fillInt = 81; -+ const half fillHalf = 0.5; -+ const float fillFloat = 7.8; -+ -+ - for (int y = dw.min.y; y <= dw.max.y; ++y) - { - FrameBuffer fb; -@@ -447,6 +539,31 @@ writeRead (const Array2D &pi1, - 0) // yStride - ); - -+ if (fillChannel) -+ { -+ fb.insert ("FI", // name -+ Slice (IMF::UINT, // type -+ (char *) &fi2[y - dwy][-dwx], // base -+ sizeof (fi2[0][0]), // xStride -+ 0,1,1,fillInt) // yStride -+ ); -+ -+ fb.insert ("FH", // name -+ Slice (IMF::HALF, // type -+ (char *) &fh2[y - dwy][-dwx], // base -+ sizeof (fh2[0][0]), // xStride -+ 0,1,1,fillHalf) // yStride -+ ); -+ -+ fb.insert ("FF", // name -+ Slice (IMF::FLOAT, // type -+ (char *) &ff2[y - dwy][-dwx], // base -+ sizeof (ff2[0][0]), // xStride -+ 0,1,1,fillFloat) // yStride -+ ); -+ -+ } -+ - in.setFrameBuffer (fb); - in.readPixels (y); - } -@@ -484,7 +601,14 @@ writeRead (const Array2D &pi1, - assert (pi1[y][x] == pi2[y][x]); - assert (ph1[y][x] == ph2[y][x]); - assert (pf1[y][x] == pf2[y][x]); -+ if (fillChannel) -+ { -+ assert (fi2[y][x] == fillInt); -+ assert (fh2[y][x] == fillHalf); -+ assert (ff2[y][x] == fillFloat); -+ } - } -+ - } - } - -@@ -509,11 +633,13 @@ writeRead (const std::string &tempDir, - std::string filename = tempDir + "imf_test_scanline_api.exr"; - - writeRead (pi, ph, pf, filename.c_str(), lorder, W, H, -- xSize, ySize, dx, dy, comp, ONE_LEVEL, rmode); -+ xSize, ySize, dx, dy, comp, ONE_LEVEL, rmode , false); -+ writeRead (pi, ph, pf, filename.c_str(), lorder, W, H, -+ xSize, ySize, dx, dy, comp, MIPMAP_LEVELS, rmode , false ); - writeRead (pi, ph, pf, filename.c_str(), lorder, W, H, -- xSize, ySize, dx, dy, comp, MIPMAP_LEVELS, rmode); -+ xSize, ySize, dx, dy, comp, RIPMAP_LEVELS, rmode , false); - writeRead (pi, ph, pf, filename.c_str(), lorder, W, H, -- xSize, ySize, dx, dy, comp, RIPMAP_LEVELS, rmode); -+ xSize, ySize, dx, dy, comp, ONE_LEVEL, rmode , true); - } - - } // namespace diff --git a/CVE-2021-3598.patch b/CVE-2021-3598.patch deleted file mode 100644 index bd8e1c5..0000000 --- a/CVE-2021-3598.patch +++ /dev/null @@ -1,26 +0,0 @@ -From e2667ae1a3ff8a9fce730e61129868b326abb3f5 Mon Sep 17 00:00:00 2001 -From: peterhillman -Date: Fri, 4 Jun 2021 11:13:49 +1200 -Subject: [PATCH] verify data size in deepscanlines with NO_COMPRESSION (#1037) - -Signed-off-by: Peter Hillman ---- - IlmImf/ImfDeepScanLineInputFile.cpp | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/IlmImf/ImfDeepScanLineInputFile.cpp b/IlmImf/ImfDeepScanLineInputFile.cpp -index 5f0f43989..ead43c729 100644 ---- a/IlmImf/ImfDeepScanLineInputFile.cpp -+++ b/IlmImf/ImfDeepScanLineInputFile.cpp -@@ -647,6 +647,11 @@ LineBufferTask::execute () - - _lineBuffer->format = Compressor::XDR; - _lineBuffer->uncompressedData = _lineBuffer->buffer; -+ -+ if(_lineBuffer->packedDataSize!=maxBytesPerLine) -+ { -+ THROW (IEX_NAMESPACE::InputExc, "Incorrect size for uncompressed data. Expected " << maxBytesPerLine << " got " << _lineBuffer->packedDataSize << " bytes"); -+ } - } - } - diff --git a/CVE-2021-3605.patch b/CVE-2021-3605.patch deleted file mode 100644 index ea277d2..0000000 --- a/CVE-2021-3605.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 2a4f6d9ecd0c9ab2dfaf6bdb99ec962aa1ad09e9 Mon Sep 17 00:00:00 2001 -From: peterhillman -Date: Fri,4 Jun 2021 11:12:16 +1200 -Subject: [PATCH] detect buffer overflow in RleUncompress(#1036) - ---- - IlmImf/ImfRle.cpp | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/IlmImf/ImfRle.cpp b/IlmImf/ImfRle.cpp -index f6992fa..458f261 100644 ---- a/IlmImf/ImfRle.cpp -+++ b/IlmImf/ImfRle.cpp -@@ -145,6 +145,10 @@ rleUncompress (int inLength, int maxLength, const signed char in[], char out[]) - - if (0 > (maxLength -= count + 1)) - return 0; -+ //check the input buffer is big enough to contain -+ //byte to be duplicated -+ if (inLength < 0) -+ return 0; - - memset(out, *(char*)in, count+1); - out += count+1; --- -2.27.0 - diff --git a/OpenEXR.spec b/OpenEXR.spec index 8e2e8d3..4b6c9e4 100644 --- a/OpenEXR.spec +++ b/OpenEXR.spec @@ -1,36 +1,12 @@ Name: OpenEXR Summary: A high dynamic-range (HDR) image file format for use in computer imaging applications -Version: 2.2.0 -Release: 23 +Version: 3.1.3 +Release: 1 License: BSD URL: http://www.openexr.com/ -Source0: http://download.savannah.nongnu.org/releases/openexr/openexr-%{version}.tar.gz - -Patch0000: openexr-2.1.0-bigendian.patch -Patch0001: CVE-2017-9110-9112-9116-12596.patch -Patch0002: CVE-2017-9111-9113-9114-9115.patch -Patch0003: CVE-2021-3474.patch -Patch0004: CVE-2021-3477.patch -Patch0005: CVE-2021-3476.patch -Patch0006: CVE-2021-20296.patch -Patch0007: CVE-2021-3479-pre0.patch -Patch0008: CVE-2021-3479-pre1.patch -Patch0009: CVE-2021-3479-pre2.patch -Patch0010: CVE-2021-3479.patch -Patch0011: CVE-2021-3475-pre0.patch -Patch0012: CVE-2021-3475-pre1.patch -Patch0013: CVE-2021-3475.patch -Patch0014: CVE-2021-23215.patch -Patch0015: CVE-2021-23169.patch -Patch0016: CVE-2021-26260.patch -Patch0017: CVE-2021-3598.patch -Patch0018: CVE-2020-11758-to-CVE-2020-11765.patch -Patch0019: CVE-2020-15305.patch -Patch0020: CVE-2020-15306.patch -Patch0021: CVE-2021-3605.patch - -BuildConflicts: %{name}-devel < 2.2.0 -BuildRequires: gcc-c++ ilmbase-devel >= %{version} zlib-devel pkgconfig +Source0: https://github.com/AcademySoftwareFoundation/openexr/archive/v%{version}/openexr-%{version}.tar.gz +BuildRequires: gcc-c++ zlib-devel pkgconfig python3-devel +BuildRequires: cmake gcc boost-devel pkgconfig(Imath) Requires: %{name}-libs = %{version}-%{release} @@ -43,6 +19,8 @@ Light & Magic for use in computer imaging applications. %package libs Summary: Libraries for %{name} +Provides: openexr-libs = %{version}-%{release} +Obsoletes: openexr-libs < %{version}-%{release} %description libs Libraries for %{name}. @@ -51,7 +29,9 @@ Libraries for %{name}. Summary: Development files for %{name} Provides: openexr-devel = %{version}-%{release} Obsoletes: openexr-devel < %{version}-%{release} -Requires: %{name}-libs = %{version}-%{release} ilmbase-devel +Provides: ilmbase-devel = %{version}-%{release} +Obsoletes: ilmbase-devel < 2.5.3 +Requires: %{name}-libs = %{version}-%{release} %description devel This package contains libraries and header files for development of %{name}. @@ -60,37 +40,37 @@ This package contains libraries and header files for development of %{name}. %autosetup -n openexr-%{version} -p1 %build -%configure --disable-static +%cmake %make_build %install %make_install -%delete_la %check -export PKG_CONFIG_PATH="%{buildroot}%{_libdir}/pkgconfig${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}" -test "$(pkg-config --modversion OpenEXR)" = "%{version}" -%make_build check ||: +%make_build test %ldconfig_scriptlets libs %files -%doc AUTHORS ChangeLog NEWS README -%license LICENSE -%{_bindir}/exr* +%doc CHANGES.md CONTRIBUTING.md GOVERNANCE.md SECURITY.md CODE_OF_CONDUCT.md CONTRIBUTORS.md README.md +%license LICENSE.md +%{_bindir}/* %exclude %{_docdir}/%{name}-%{version} %files libs -%{_libdir}/libIlmImf-2_2.so.22* -%{_libdir}/libIlmImfUtil-2_2.so.22* +%{_libdir}/*.so.30* %files devel -%{_datadir}/aclocal/openexr.m4 -%{_includedir}/%{name}/* -%{_libdir}/libIlmImf*.so +%{_docdir}/OpenEXR/ +%{_includedir}/OpenEXR/ +%{_libdir}/*.so +%{_libdir}/cmake/OpenEXR/ %{_libdir}/pkgconfig/OpenEXR.pc %changelog +* Mon Feb 7 2022 liyanan - 3.1.3-1 +- update to 3.1.3 + * Wed Sat 1 2021 liwu - 2.2.0-23 - fix CVE-2021-3605 diff --git a/openexr-2.1.0-bigendian.patch b/openexr-2.1.0-bigendian.patch deleted file mode 100644 index 45a99aa..0000000 --- a/openexr-2.1.0-bigendian.patch +++ /dev/null @@ -1,63 +0,0 @@ -diff -up openexr-2.1.0/IlmImfTest/testFutureProofing.cpp.bigendian openexr-2.1.0/IlmImfTest/testFutureProofing.cpp ---- openexr-2.1.0/IlmImfTest/testFutureProofing.cpp.bigendian 2013-11-11 17:09:51.000000000 -0600 -+++ openexr-2.1.0/IlmImfTest/testFutureProofing.cpp 2013-11-27 08:43:55.486026741 -0600 -@@ -40,6 +40,7 @@ - #include - #include - #include -+#include - - #include "tmpDir.h" - #include "testFutureProofing.h" -@@ -64,6 +65,7 @@ - #include - #include - #include -+#include - - namespace IMF = OPENEXR_IMF_NAMESPACE; - using namespace IMF; -@@ -1234,6 +1236,12 @@ modifyType (bool modify_version) - - //length of attribute - fread(&length,4,1,f); -+ if (!GLOBAL_SYSTEM_LITTLE_ENDIAN) -+ { -+ int tmp = bswap_32(length); -+ length = tmp; -+ } -+ - if(!modify_version && attrib_name=="type") - { - // modify the type of part 1 to be 'X' -diff -up openexr-2.1.0/IlmImfTest/testMultiPartFileMixingBasic.cpp.bigendian openexr-2.1.0/IlmImfTest/testMultiPartFileMixingBasic.cpp ---- openexr-2.1.0/IlmImfTest/testMultiPartFileMixingBasic.cpp.bigendian 2013-11-11 17:09:52.000000000 -0600 -+++ openexr-2.1.0/IlmImfTest/testMultiPartFileMixingBasic.cpp 2013-11-27 08:44:19.370775892 -0600 -@@ -40,6 +40,7 @@ - #include - #include - #include -+#include - - #include "tmpDir.h" - #include "testMultiPartFileMixingBasic.h" -@@ -59,6 +60,7 @@ - #include - #include - #include -+#include - - namespace IMF = OPENEXR_IMF_NAMESPACE; - using namespace IMF; -@@ -1383,6 +1385,11 @@ killOffsetTables (const std::string & fn - - //length of attribute - fread(&length,4,1,f); -+ if (!GLOBAL_SYSTEM_LITTLE_ENDIAN) -+ { -+ int tmp = bswap_32(length); -+ length = tmp; -+ } - - //value of attribute - for(int i=0;i%< za!Nu@AZ_-!50)b^_hq_qX2}$u_nzkhGAt3GOPv(r7dq%~O(%qfGiE!yYI` ze@qpPy3f{s72v8=D*P{8>Az4}epW0O_Yd|DO6Bqalo!hfrNXm+(FSOlyL{#;E_CVI zwzmv!RegGJzsPk^BC2hg)bfrhZx2xt`sa{hAz zUdTDz`N71o}{?Zj~H& zPvm{MZYVyZ(hjNH&eYXMV~@O0U&5W`x%$BOY?l$wCf=Bm4#-mD>VllR_GhYkIY}D$ zx}gzSW>eG9t?Rzy(xE;%%99<^@jYS>3A24yrGx`Y(95NN6}Th7s0++4RXkFE{TdyW zqZ^dmDz2qlBSsWPsOtg+(oWcuI+@sxcO-vO3?rkIgJ+dbJXd*&jx9_7Z>Y<3+ge*6 ztMngg)B1mK2=;%g|C_(cFzmfA4qzA~a!5?po10atviFsgN|t~WKXs@?v0D%Dh#GInZfJVxjYhm3kv zBA2C_p^vQE(1SvdsAE@Aud$|P+$vLc3@-dyfI!^9sOo$A4XrT-1?cNp6}-Gp=O9if z$fK)x;EWO=4W=p%)z0WGL=_aOE-)?;bh>Z zcWl_|H2~DQK&wGBVd^j~ZDl}>6>v@8QaR^RU@Z%o*0GFf47fGydWuH_4lG04wrwX3 zGE@wI77biLDds>^7NCkmg3HSZgoMZ)+q$5h?^?a71E4+IY112O%z?*&&TK1z@0fz+ zqNl#$;bhY;M5quZhV;b%d(?Cc7;jR*ctfOAI@Yaokl;utLKH#yOcbID5P15@RU8L; zMA4H7;p9U2%vhjUeE4BG#?Q79alM+TZCJj48ERv^Je<>Ns{9PdVGfW`O_p~CpX;$P zCOheJ*{sfWa%lxUq{NtT(ls5nw;vT9;12&W{H2$(j-opQ^7`AQ%-ae#oHI(P%yjMucRF?DrMu~dqG zwnIr^k5#sH2CNLYVH>s;N74hnB?;i%;1COpM2LxZxe|KTGr&tTW%-A4qcnADXf?~S zy-?0$BM>Um)&Uj@!zvhnZ(42L)C2K&Q;-77dG0DBQ^Bd*{a@1h^yejUcu92^A%Op0 zG!Zd$Sww@e=z#U)rlI4)mvidI%tUs7BOyMYbj<^CD@-R+(%IeGfu0%Lm9guj_s9|XlvKPO9eg0zPQRaOenLyQ7of%(0 zGuwKZf4KnH{sLUNR|^^x!_l?asiIp!%iR|}?6r@5zxZGoKf5Toj+5pXe@C zF;svGF7fXbHkJ~ifLA#zLJLiQwa~)w`3$EWb)~Diy5s%Rw>>OxQ{^UJj;&j!1MV#( z;{&A*w>~JitmgH`;B*w%>kPx$0sD)cVlG@OG7Go*<^;TXCwA1Fe(x| zF^IsFa~p;RK6Fa1?b)hr2uoD+JzLab7b)Gq@-8CeEQ5w%m~d)1u~DUeFeyp29O9f> zis4O#nTdk9DtVKr5zU*r%V7Fq;Zqte&?Oisgw2T>-nI?#CjN)|QnFguu8ejW-W{Pr zn8pNS*!mc%R8CJ(gzRDcEW+qmEeMBhEn$|h`#F=*rbAD=Wf_23SxGECUQNQd$<*2#&)WgI#2a>cCIVhxf&xzGc-g z{)|mZP>ikv><;>z(D}^>$NFdj7WUn;mQ;2B?JFX%fJA6k3yji#6jzI zg$`HRxnvZIW5%>;yD{jXRlS4ye*FYOnL zrS1CP16&*3|J#9oX76A5+5#q%Wu1W}aGkMKsB~ zbV$L?sx%TynN7h9PH>%C7H#AJSduJ=G9lIo#8#3Zo`3{|sbi}7kOA^!WQTmB^xBw` zt`FXL8tgt|jZ7dahX~|(ffUFq_*Zxi9ajx@CT8}>$^C6=? z@9K3@$$<&^LnM3puu6itbg5%A9i(JRj*iG~O;t2%PP_KdyM^$mY2yUo%;f_^v>Qy& zyZ7?gW**gl$j8$hfxJpg5^;SHBHfzNv8#rG+%C~@DG{1Lq6mhHV?uZtXVf3~mgmbD zI5Uq|MGeJ>vDXvGl^}=oA*_l769%F2VlJ0{USYSxs6m%+U(cXp61;e*h(Q)O14O#X zm*24>uj+EZiz;%LLs07`B(i>W1en;jQN!1%liRBIgqF>Bv;Oi^->tT!aP+8 z^EI2eCXwAC$@|RBL++{=c|#vm%6ZjPu4x`(`P&rA`k1QMw(mu_d>)R6=0gpt|MR94 zLEOTBaH`QAqy`j}TGpt8A^1Td-2t9J2nA5%D-L`$CQ1C)7(VkFz(`-WKz|KmzG7x@ zV!hbbP#^g&U5u8qfaG%Izhi{~mXrEv?L(vAI_vgo?RNkCqS0(!9p!TQkcuUZjxSs7 zlYZ~d^TyEyH7F!xOMpQD`_RYPN$uj~s90Wq0oiQV-gS?j%OfIp3Pc_{u8o#o24lnE z7L`#}K|ozlfafc4buN47m%V=Ds@FK{wmN71i^h4oR&N}2&X%-nTs8Xb*4c-~MMR7- zf-aZ!_OWqs-03#@c++gP8`a}Zr+u{BX*PE=TL}hs-`6f0C(zk(cL{9gym1CzGGsb` zAV%o3<-ix0XZ_~ozy8(lHM+gKU~in&j@ylX@BKxicG5a~$Ge!xKNtegeK{27X*F9W zkGaT)ejT+&Xn}mo7t&_x%fNpdRWiWUx3FwZd=pJ&?sw$Ln~Gd1gHHnuMRLgCwhvz& z-^&=DkbhYgnwX^q0r@h-bR+7K#iAd70;*i=NFet2W>7D5CYb|PQM`%V<6v3SRVPdI zP4;w?0x!s6sZhuS5R3x%CJzd8q57 zKILLlKQ9iE{l|bpW~ySvt$)nF;q|W7dw+Qhy78fLRwcjv^%r4Ob*aa4@fz}f_usKL z-OgFYOx^?thtnJ!EJvoT>$VbH(xjOh{lbYOFksw6b zKzAb8y9s(sgnAJf+dyv{=xqbN^#^*(%wj8WR3{W90&;M5X|D?`aX>|+-e8f*9r}KJ zf#)`Si-m8iW_4LOb%#LeyF;jdZ1=ZB`h%$IZn4t=F2-d-3~eyzvPExYj!=fo1os8A zu_1u4Gcz(DG9t@n5}I`1SjMXbmIA_?gq2ugr#2S$H2p7MHXi8=p_4?E!+Yi7IL3&k z;<@@HClV8lawb8LxDA1RUtyJ7QeTENwb z)r?(v81{6eXc|}qw!45(XmfS7qSZD4eVPI2HVAz9AaDhIW(=6oBId|KT}L0b954cV zoI&Nh<)2@T)UAB5vWd`tiIu#?-AIq@S*ca~|NMbKG4^lR`4`uU=YLB3hjaV?#me^i zzX!P<>HhyQify?0@AzySZv1}~&$eRV>?#&`Y(^9aQarSV5MvO1WZ5posKt%O^ZOAg z<|erbM-euY1!OfcJQv4uDff!sBDT5un_^JQZ$i)=@(+6;x@OmZIv!3Yw_|FN&RP3U za;mu3ntf}L7q4=r_LB2Vz^Y?BIw`E4qj=-_?si{cn_WJ9!|1#8-w-8v)lH0HIRU{* zi7;@FC1WDXy5z|UDHU>svY59Z{^6_TJ_S5k#;9r~_5UhOu zo`+-~@wLkTtNQnx{1ex5|6eXt${GIuVEg`$hqxZ8|F5^U&i|)!{yTxU$9uHexUMNy zAZJT7Y>zM@Nn+)abh;#X7YWfB>3qmR`l>=9$A>fbNwYhHr6&SIoM243@9||8@x~&Tuk8ZtUIglUaQ&-I?+D3m@hih4n(zL4o7@n92_5*OEUuOpay8xLG4OOPa?2ljT51jso|veA zu9K|`CAIP$lA6|~C&JTpd%}dgP!Hrm}14Lkfn8pdB*vrHn?6j$bCf&&x_KT0GP zs@Izz;s}0ue%`?wyxq#`hFn65v|{b57l zhf7EC?awA1o6OsPDd{M_T_PQ1v*OWzrXxk2!mK3Zr2hJKLV16TfNXNnq4)y?WH(^; z?q(!K2uk{tc4{vnBzN|_D<0mC1F3T`i6hGoHI=%+jpy-23+P4!2`&~aCLG2sh;9v-_1 z8uo)7vc91Y7=MZ^BtO+tBdMbqJ?)TFcd@L2zkMGaPSC$Gaa1{4> zfk$iv38%b(o%Mx7{?TvykT!Adf*(iO23GgYF-YlU^bR)( zH{w;BB~EpmDk|XzIQYscuaBSQu-Q#KSo*0?a6nH>)H(vwY?aNU!_wJ*0gvcd#&U+- z^PIzvI>k^7Qkp}u(f%I#{K9PFGMChniAfE-9_8BxMf_Q(1mv>CH$LCE+LtRPch&1Vn(g1sZM`Q^N3}1K-jhakz~L3BDzgvGAddC?UH~ z+O;a7ih}>u8C3+jBBhGp?v+yoBbTG~{58JUW<8TS!#AHpJ>3+_WH)NDlFQgTS{N+f z@qhsS!qYF5Ks^8>9!KVo^;(^soyD(qj2iCjq>0+u3Gk&B-UDNQ620NknR;W}$~mkU z_voTj4j-8VFZbK~&S`_(6ZyclnU}`R3+GYq=ib~C`xl7l(#WxFIoSb+9s3rb@cTAv zd)issvKO2Fs;S(!j3j1gQV}@nO@?v#?kq1v^Syaqh-X2jC#sj{dOP9ER>J*1$Gxg0?F|3MG5#55vI=Y$4@1H{z_#He}~zX!1Q~zZAd`| zB0)3Lk;ldGOG#=OCjL%nUUZTVZbj7B!k=Wd6eBl|z}_py5G_OWC8}xB39ktL&dR|Y zj73fOO*)^Zx{V6vI$i~u0Exck95q=S5a)#7lC?kN@^drOHA2{cojmW&8fuhq$C263y@b zvv)1fQB-L<1OW*?$8kNnDy5Q{Bz77hKolG`BnVL<$ioMqP+eV}lyrBsUEK*m(Xi{H z&d#cT6Fev?pd$#*td7ddH#mB9b`B30^{Al85e4zcB;pHHoc$m7-nv!Yun#-7>`f8WkA-ec17U`21nVqRPOTXr?jIrqiX|gmKx$^1L@MVqA7v zeOcLA5b4#$-3*=^G}df4u%LlOkTN=-$~w${9G(p^8%&gIp$If*VF@4B zRz|Pshy%=|D~+5Y-jXNMVHP6i@>yLjWfk$zIyVu)LCdPDLdVoqRYi=p7RPEaT1?M~ z*>>6hXkx~a4#a7c`S5R%3ok3O@Tw}cCh6L5t#$;kZ%($FbsUD8WeN(Rlp203QNVqpi<(7;AL1D%(=83PC6evAq_VWqusdO zYA4+c9l{28n=l4&*zo8eCqp1KpYUdX*G%GpQ*lf(0Ye}}!BGUav8jLTC}1NUkwL+1~| zlIV#er~+%Jaw!c0ENGh8SZ!ut@vU&b&W|J?&M41^!})VQ`?)mAgyK(e*UIC6;FOMw z&>`sXb;Q73XwGtyj!r#z7f&wMVNGdx?P=Z85SRy%V>3Jb5eFH2E$-2gyuyX0;Ww^HeWtz zKs13(<0egL965PXJC3e(kEFhJ|F*rQ2M;jy|gi%|vCnm(x>Dp;T>05mmB(je-PL*cDrgzQlncoCJwMi`xcTA9s-Rphh7@(B#n+B|59c z_3Sju5O_2e0kVFk)gl#E*)p>EO0aZ&A!Ui6F=+)Ujr)@94;FWAkIubBmV+(jw6bt6 znjVQ!+3+#jVz|u?}@PZYgqct-*ET3e5Nl~)YC}V=$nfPK+ z+$uVzR0?M%>$I9yJM)2RF*cGJ&y$eaNf6eo?68R#t&Rz{3ciGe@R7J|{8^pB3d0=A zGFfDqfP7(SJ);?*ewKQ5h`&y{)lGsv2XKV+(9)P@y^si?X~zjuZrn+<8(9}i1RmH1 z7mGd~12|bP`{_Mh>XW5q%B*ox|l3;8j%)t}8&ZaMCD8DAi&T z9T}!l`841sk!>d#QE<^_qZ$c2PFN$mLp6}NU2~7FZl6bJGzuam4~Y)}n%i1jz?;B* z+svi~UJxixQt3(_BVe>>EJn%fNQ)4yXqH1L7Wgy+cT6dN5~S$9GZ{gC@2Z=r11qEurTM2hwtn4QG*zT%we526;l9Y zrwAwoW)9CO#^8M{GJoW71klt{o8rid@yJHY$uP5n-Web9cJs|G%pIzL>WmX0FRm>F z3;z;}RYQ-4d623j^o^Kf=n01IWl2==Iuvy_}uGZ@_$GcwC_nc*KaQ_Bq5oGLL{s z5x6KH6CMt5A5b7ZkPgtn@}!lr+XIY3weBq_O0FDH;3eE_vzc~gGYD3<@cH^=sx|UG z{q|Pk62+n7UQ5PtB-f%aZZv~+%@An`P(%1BEhx0IuII@KHTH@l+?fF1C~0%I3g)_h zPCCc$Cqyk|XWGhaz}XopvTB6GLBd}ArD*c-6x;x@(`(1hze*EHwNT zsdv-~SMpshB9&lUdGdC&L~`H^-!m>4s_?WS5yAl+Y`8#f=r^&gqaa z2G&5yM4?c%(npH>g{KVig&2cgKTl2%-#%d5GkIguAO>Du9{5i6k)rPnN36K&A&ebJz4s3|89w8hytH6+;tp+7k4-H3=0 ze$l6l@V~(%2vF&G!K6=J4)Y;@9!Q^)09}OpESb(s9wq{2=Z@)FR3o-G2tiHZc4dB+6xhV+WFW}DK3H#w z2JpNu&*6fHa&5ueQCLM3X^J|P^i>pJ@QwuPHX61PGQ+5fv9>-J4FlRrqvq5*DUu0k z-J<}N2Fj}k7EdJmnHG~>2P{COg(w?P@7AlLT!@VllLj|I#l=E@)PlY@DpEd$uXOT# zMG^J_6$a)QwbY!Jqc!Et)#@EQcmo#MSpESt$#O?T_#u5EAWvfD^mspBxOl2ir`W)b$}z-F~f7% z{;?yeImd{b?Py4U9hX#E8<&%fY@Kbw4I`A@i(vW{I8W(bGbbULg>ZwaYwf;lOKl=+ zlErWfUAaUAy{9<>Vx(Y z%bFRPWWfvqIZ6{>AkHW|6Ue}j%aY5(@*uDS-|>W)oZ}IHzD^o;E-D8T6e>7X5SO1} z)H5t9OYLK2VK?;1F+jL((iwhneltN@1mqC2Fsq!!PUWaEUb>+)M;dKrdnBNOezZVL zK^;Q8N(f<=N`QtbVSGgx2k5uJnSth;5uFVYuEb!1TFV}SB&CJRWp$<(S*a{GaRk*x z3=Z_9t0{$l#`zaF%cKx+A`2AW+EDsTEw3=06)-{)Mp7O#mo?KKj4I2Jq8Mtq$)p)` zvlPcMhPPoq8KC1EItg=N;m=9gBEii~+``8P{8Au9Q1NzzUyxq-be^rXcP_?DEpG60BFjx zvnL3D)STvej=nzlNUOstBvrt4d?$;)v`u+sU5m{P3oat<0lAV893|PZ0Pg!33wb50 z{$%7d5>+M{@P1Z0Di|kiC!7MHRDdqz=?g(RC6w|a8 zYU5ig?OApTkR2Nd6z5Dn3pT|LC%t8^|FVn6M<9}bKnku6cM}N}9u_r5b9K*{kWY$# zWKNUp%K-f-XrR!gFr2is)6HNWq=lv&m{_Syv&kw_!Y0G0YGcB@hL=t~K=3a|8J61u z(MYSUNBnJ=H;{Req~`{1$x#oG8>ihP>j`7qslxU%;FK7H_(kGK#sqaSZ3kh2azVw~ zQ&i$fP*_kKLq1^+nfKimhDgSUIR&kMKpm*YpdtvlNRTId6=z%~<@{Un9&*1q57>_U zi`e5@?1TWTjxj8v99TDOFqmvcZ-E^iuiGBenwfUnl6Jh=_S+{c^*UFF^)+p`g|HB^ zNVPs>ZF*0iGUfjLXfM&FO1Y1V2c2^yIn0tgAc?Hk;$%dWXXZ#ZwZfu8VxeJw{d~Qz zm2ABIYrP_HJ!ty;ECoK?4s#Z!DIx|pr^M|b3)tcW!y#(Y3x>D}7f~u~W>}f(n71%p z42u;-W(bcivO`Lx;CgO9`%z6|9Bc_}>eoQ^te=p3>_cp0{u?oe6-Q28uQz`RI>bnZmPSxb zr27Tl>_5#_%L#MDVE zf-0tB@CvbOT;5>$*JBiWO~rq5L1m>H3{|1pO(di>)7k@Mkx2L@uJDq7tCz)U|L7)& zRD8h-^wNr&fXFMbK02JMQFpU~JG1qBsiqjGWG)9Q$wW1HzNFhO0)CZUHVpB-N@Qt~ zxDf2Zk`sy)pmt53q^%%<@%L5+bUwKuiH(NqQ4N8v3f}}-w$mzrQfLmgiXmN76Z6>= z4mH~#koAnZoX_AP(Q^!c@%U9vccy|mqr#s?)efWtSz=%Y$eaQZ9PZ{h_r!$7(dVnQZSp|xF{VLM)(mUi5V4e#POnkdmAkns+dV5xzEu% z#o4kJE`&@C;oeYd=N}%F?UI44TR~Ay(@@+8$pdcomK_+rJ{^J)LG;{6J=tbb$RuSd zSkKT?OP!Nb`5|dsR$!QF=MWJMS_X~3;i9Tm<#x1|upk7mS{yrA{b5e(P0{${XsqHB ziX7?UGx!3?9;VfQK(!f2Ziib9NNz*pa_lO&UGSSodW8$jT3ZG3gwuU87@!<58)O_zQt!gr6%RBo;&L78pX4l#cp0{@SY+KqgN6#j0mM!m z-*6S)l%+~a%5V^FBkJQwgPxO+fm0FknCz_lNI3u%YY8}uU6~wroEtUjWUjYJ)ki+i zBP%L?1;sRfa&2xkm_6)@&;*5d5D3nS1gQq4^%SF4vk2xi{;waJ`hWDN$n$^n9(3=2 z@iE~4&hwvx2Mzk$^Phi(KZo9b(`!paGwJ64`5cFT{&P_6prJM4{T~K@{`UOmU*XT~ zA*e{@bH*!hr6QlGA=@Y^a+wYwO-cZ4X>CdG%}S+9ouX zzViC-CiT7MuEk$Ge8eB>mySB}%-hba+cR|4$+z|H*>=}&D$X4G%9y^!*yA?TUo>Om z!;K|>z518;7}@uT(ud{^IBsy)oi7}dzVn;y&*T%G_k4BWfz2CU_~!08UtfE}-pMzQ z7=2pfmhlhvI``cTiy!GXW`aB8xF<@VsD9%3Cw}t!2Tcq6Y$#dW>-1jROSadpe5Rzj zy85Fp4&1T$`ct2HYT=?yXI|2IMd?jPfB(mS4HtBG4f~?&0;hZD{T=_j@w2A#t!q!{ zUa;^NT}y5#owM%r$Jswzf5ACF-}}b?Ydi1jm|QmGn|?b|HQ$Y#(0_;5*zc*$ja}t` zm3_XfUD-6?tDf1!u;(u7AL)DJ;(a%r@#)p0=Y87aS4Ye%U0%{>=zX_Ooie4xb(gPR zePUzJxi5Fj=~&&dcJA`ICwFL+beYp0Q+4WzP&#Lb8*^$$B&96#rd$IG? zwQJUFsw^LHFWG$IX-&x`cc0bK zwC}+8{rjE2uh05N*4JFrf5u%)PkedVfk!W&+Na0b(w#M)H!SmTzg=#R>A>iJ3m06q zVO;M-kDb$YoZ9o$={uhPp!Da@be}!^xctHuiD5_1I_BK6r;mDPNMmR1h|Z7lKN+`t zf5)bhO<#^%+%GbwbLlU(^>*D&SI#?qecRmUYu^1l(c12LHP1|Ye8sRc_LT3qsOE;` z@oyQ4o}(AOd&?)!Et-?8g}oSme)(1QYmfJR`qXnvKiQjlw%0o+T=mk1udDK#*Q{AH zwBv)GJ2xh8{JOm}UGjMEKacH<*Ug+c^V|1cT)%VuHxrLO@7Z0aOn-FUJ*l-z=XX4s zXuY*x?X;H<_Ux{&x&PDM)yGbYCC-{MWy%kaz5nkc_osH0&G?s*TRWG3J~nOrv>Az= zFT8(JkCT4ZxNkNLxV6vJlKPFGJwNaFA8vo*AIsnG`pdd<=l2&69{1aQm(1RD=fU4S z({%oEoyYw8%SV=8clQ`!EdRW1;RiQdddl5GynEgAuWq=h&%btE_wgH@yjV`o4+Qn>q*de{Iq9 z%4Kg4sjZzq;NNad4BN7I<+@8go!T(w{60e(w?2EzaaXT@Sg~wbd4Ag7k47&3^GDOK zzjo^1-)koNe>>p*=EOH8-h02Uee(6I8lGR-Co_H3ia8e!PfgsheZuBD+h6UfE!ltH z!h>&Yydyv0KiK;dcqrSxe;n6d+V@4vl!R>AcP@JrDj_5dW|+*@EcT^+*P@VwN~Nro zttcs_jU*v|BwA3`qNKF^j^jAbb7oZ6^<2;MeeUb~`v1SzJoj_onK{p6KR%!LXCM3K zT*Ik`uED;0LtCZJC!PLYUM|NCP%7Niw2;x*p*6+7x@4}*OPv`r6&kCDB;KFda8@V0 z{%v6hwRgw(hocK8D>}86l2Y<}nwF?aIPSlb7tx=8Bsc8c8Sd$Hp;>-qy#?RR1dqiXh+q}GRBU;8*c-7I0+$(fCO%?HNe&a1)RYu|izR;Zwv2fF!kAlDVldqNa=>9F6PGJb z;u53zPaOFZCw$*DXOm-Td(0EVM&6aWo&A+2T9;>Kn!RgL~W;84o&t zd2!5z?Wg4u`(20AZAb2n%4{4vg1O&S;rxz+bGH}I-;-K$FsmTunuED!$)LGsw@l#M zDNMfmcB%0$<&^G_acf7lyA|$8j(RwVsh%0FTlAd&W$XpT3+^SP@*k5o)hE8IG+q{= zA?CoZIIsJdT4=cVBki+k>x;q7Lp67QS9mOZ)G)b-wC!p}X?MWYrDhZJ;_8+Coq5;o zMw0K=FB>)ddbQu?{?hiM4c0faTq(Vl`zKT-y%>D++n|&@tKRj8?x|PJSu(`uqSrOm zXpT#JH^;s((0gJ;^TbJOhu=xD`tZZ7FuicnM^3S?hFOQfT>s*ZN~THqnyyiQdQN9p z6zvl``xjHq?$F&DANEG}uWYojydM2TvWe1i<6HeLYgN4iLzwrTb%jh{k`&e0R1ooS z&^SfPtRp9H1mD{k{~^fa}tPu-V)Ja|>w*kEwU9BRt)Zyhr-&-b672 zKJz*0t)8VveK5FOA@wEGmO4+rTvJkTcSBU?*8Fvk1HXUtDI64`7{!a}PybG)=Ev3? zKd0TZsUV^|-s|vOkA-Q?dWKsk6w8~jCR>fX^g(+`q|DIT34>mY$xhXO%}Q6!9JYOU zrEaT^vFQm1Sn9xJazp}IJMWm_lm*#o@eJjC2oIq^XdIz@6^NB9@_9|Zg*sA z&agMbRf8@K?b@f7x%SI*s&7I}I6Jd9x=@+w>&yH8z%t@^v}@|Aygd#H`zELag)JSa zFxQ7V;#f_%)4He+C;QufA1-*UecHm{*t_vkmX8nZuHRwNpt9&SeZ6tS!qGZK>*h$& zY-YBkNz!c8WA?}Nw=aC#@o?G%N)E%#QdL6FXqL_>sW{oU&8y1Vlb2hSjlP_bPt*7@ z@7#GSYU}9s176{gv((C_1s%D0dqLzQ`qc%Q`P&;t&I}$RB{g<`RfZ$i-mk^n^K78& zeFLTyKjrng)fCOlIMtPxZa3M=g)iVFjAsR!z9Idf8*gZZa zT48Q@{itm(Q$O!by5*j1^@l0t)Xqs4rlrodH(czQH=-|p`Ly+^z@1ia*RCI7*>8@@Et_^6V(kYRau;$_Cl^>5tu4mITlcH0DZ^%b0npDDfm zOv2uUFC&BRn3ru{J9W&*>xHAK8dq<&1x`xV<5D$JXM5+ill=YplitP0%$Xu-#UH_u zZeo?v4?FLFy?d(Un%AhNdk2D=8s*m?jnQ9|r13+1hC9`Tr?x0=>RJcz=zw@B2QRJ-#2BA%6`pskU*+5y{C3lUKxZLQlV0afQCLsSxJ7n(bE2hkDqMFR7+7&UdXVP zq0e+Vf2^&wEqt5GJN3n`l*Ci1^M>Rv%_Ak0`Q`e5o3cK@GNr0k(d#&W)VN#G&!T&F z`%Jc|w$%FIH@4|nr+3cOqic6gZmjzvRvIzRCcFI2afXz>^(Lyso3DX;PbW-mjHVht zzmZda=o>m_P!%V1+1LEEkyB4JbeD}9l*gtt9vp1_e3F*(x)+k6*NaCFdiA})fA#eC*F_L>yaKx~!bBVST%+REYfB z;g%27t@x>z7=D&{7ou`Zo1bY}R(o|`zj*q8ZA4VsM^~vdrMIudA9k%Wm9-r2W#AV3 z`D)^6!|7Lgr&wN(d@|*vNqBTtXiQnbUG@Ea`4s)H&m`B$OU;p{nQwmo%<=IX|BaDq zx5`hBlYLjxwD8->!cVrh81Hk&wyMnAmXy%^%&2PBNv=x4ox#TU-m)!+B$L^0mR%cv z&l`^PFTUZSS(cNsciZiGBUi>J7jX(E^)5IP>lXXA$ZKTz@sDkdZBGY{uzlOPNi+UR zzfG+}%hoPR*3*^Sz8?Q^p`)}t*m$9JOk|$pFs@Wk=ZFHU7S5Hm&iNH}>d_K*N3Sfk z)7tVwKHDHt%sDgubo{X5laFTWZ(T8e#i2CliQ6B259s5^kZ$$Mojqq#EG97|#qmL- zL1WqAA7(Pqa|SPu`Vb#o->L9c&UMPA*riL4)t)czZ(nv!|8oAO81?yaBh_^(L)$yj zOpj)RGp1X4?~R!LGD~M|rq65JKE-zzVnSwbE%qc03LP=qB_k)V=Bv)T@Vmi(Z(A%> z<7dAq$UL*@3ROdOQlJ~(@P#|XwYiq`HGE7wfTw8&PI7;I~=H9TcVv{ka7L738d zV}pdSbGNj24vJoy_n_pvgugzgeXMPW$L+6%)ZR-Tdu}}`iregF)v(aA;9TKOUbN3} z*}Tu8g_6|X^QWs9rg>9UpDAq&8sv66j@GlOtEuO61GPBupvRj>t1sw(eq6Na$(UUQ z{mUP>Wh+KdXcL%8jIE9t_Wc)Ru4)hJJ9K((_SHXv(_*YOGu>ipG)D!kqc4A|`+`0A zL%rm~p}Lptyk?&~*EF+H)-vn}ZyPIWRpjnT+0x_N+ieOrY%AgvR{1Xunl^f(|Dg*3 z_nGRcj}kYvl(gR#zeB2jmvaw{JD@r8?T0hVpG4QU9~*vL;qAF|tf={(b-o{-Cs49Z zmJcmC@ZoZ5T3TBB_KK24ukHoe+%Z4=-KMead;5)ttc@-?q(arRjV5+T~{WEO5I9SY7{rktbW%*>+E=J@Q^> zQmEXOM^EoazdjSuIcPtN#R@Z6cSCMT*j(;Z_LWu3-A;v74LK`qsiJBb@xwnSrt}am zU-i@J#oM2fwKP1os}0f0UukK7J1geykv_GAvWC&m+H6|==9GUmTR&&|x--vphcCZ3 z@o{y6T<#pRH|FDi2bB$;tC>0M;fNoj+bf?xH`p!qQA4#`Sz%DB50z!v`eJmKspW{H zHDg!yH%~g{acxvgR@bqb4AqWUv!}c1)E&07+P1Qj9*`Piw~f`WZF^C|`6J@Tpm7I$ z&0AOR+3=%5B~zlLT}-vj_UTNz&O1*RmpXog!?}gB4@RVa#ceu#(JL~ge`DdTwTg~b zOI!!jTh7{_8F!r#eEVARp<`ZY&gAxk`}(D8&o+upkC?Dz+PM3DYc6$NQ(#+YKfETM zoxH3*>+Y!(>meGSl-Ex4H=Ok5wm1ENH1%|g}u*>4nRrGw|c z-LcQoZsz`f+ha!-9`mv<-*{%WXG>p*U#s|_L*cuVI=c0Tn&*WSD8BQvoT|NA|KT@j zJ-3sSUc4O4wQbzIs!T02dQ;M~>Xou%hs?cCPpMXr-4Z=-GK)X`Bh9Vr!1Y1PmO9Hl zd{Wx(wsGjVU3OmK{8{9^`5Cvo*RGqp#QyQyZJud=zG2aGhfcZFH95!e@~s~^c~^8V z-)622ezc)wP>@xt{kTkj#bqqN*Xv4*|0oYCjpS{P8GGbO zb;gC&Q zD_rdSJW7_X?`ZDOy>#S@^LqP$@J)q!$;aD&PTep#c7bISG_x%4@IhIv6N5iqOK{^h z+!QOAWX60bHKi?_!{}YUJ}@u$G|T?o;*;I#rJj0wCouJ9T&^v-Wc+@V@xqkZfwkY* zx8KZaOiw-Gd#5#{v^{NU<44)oWjzh?;lW#b`W$%+&u$$#^Nj4Z)}9aV-e^sFdUgJP z;01yADmLeiyc`jJLAC4s^&mgZeLI&{#I!80a!xs=!N#6AJ_X{qgo-Qc;WAEt{_fUSqpqEn4DY7T(jQ_Il@##QVZe za|Q+8k+M|Dd>RboCreAaJtc|ssXb?Z04P%$N|vEbo9{Nna^97wqf>P%M(O$|@izAx zJUp;JLE5r=Y1+4Vxf`kaqZ*^Xja05RFU&29C z6W!Wj&&u>CKCLg=5hUID*R}4e`tuUS)Kl~FQrGw>^T$Stb34s{mQv=L zKV>IQ9DJ&N*sbjmIUBE==1QveFMXVtUa()utJ^%t==oTB!?R~!*T}wBXvifS8lR;} zH9vD3d9p^m=kr&&Im_Q=kFsg`v99FH-t!xh4xXM{5E+p4`t7nWBp3gRvDv#0+dX8~*v1G(CtB;Agk<%44wBQ+xy#xpY!c$dpgio(bhU0 zs9iI5+A3viXr zlmpMAb5{#}4(*cY-JGN*<#LZX)1ZQ}^xB63Z$^IBmoC79t1NveJ)a-HP)CL0R41Q! zZ-vO>hLIkx#v*rwS2_nk8}XL)X}FU=g3VUWMk9@iE9q`5@8CuEQo7rGhR5b^#LuWS zunf+2damsM0LY@kVtE6JCpkdi8NT_37KQ^|G-k)doE8&N8^kU;&Q(-i)JR3AXBV0E z9@Ry~cBgcnhrANX-JbfUwltORLYR=<{Jq_49%`!ocU)5dV!DQ(@pGoB4|%s$18v>% z_8?^T_kji_tc~;7P?mgjZ+vK1T+r2|;Hv17lV}46(7Eu;`Nb*gWKM$KbV8(Yb)a@2 zcaWB@GOVq6au(WptN2E%GG?#fCsPyhDY{-@)nYJ5%D>bhI<$>|ijyE~OtDL=xeTxrg7xOCuEiSXG3WL8+9fn#(c|?2-m4w;o%!_0< zmh8}h8L2oL>X)t?7n|Iate_*cw0(rtCcWO4(`r?Ta1o@5O!>gl;7-WB_SY)P_)#v6 zs{E$Y{iRjaCmq8u$Isq-vnd%_@92A%DVf+C2_6;_t*4U*Oxood?j>g7Gfx@>ga^a7 z6@-hk$9@i!oLnS62xNpp_~(aW%j1eMbzbd&XnjmF0DTW@*3yPjzqBO8;{2V%Z*}^dN?$l7x`LDCO;B%NURad`ETC%^=>0S7 zIf}cDfcc!WM5IZ6z{KEZT(@~!T@~cXn2E2;r0lTTW7C^@vy}6Y>BQR_hydneu@FEM z?QV$0q>Ql}IIyLTS*A@^SR@>^GMZ0d@2nHCjFU=^xO9tlVn}*upHbeI%c^cdO+(Sj zbwP<~V@tf+2sYuMu-UL3&)-|~yA>4`j}FMg2gatMX2UZ=&80=xWf>)o6GgEv#qv5t4KjWKrn?8^wS9<>V|9ry}gCQDcwHp$7{Xi+9d8P*& zQKgb+Asia&Y#X9;J~(xJ9{Z!alvSI63h{<72nELdkr_;$^f%|7ngzeyMd0e=HU#xq zie){Shs3!yY?njIG>*F3UDHzcuD}&6{2fi`rBg$OAk&JXeK<{83G}lSURGmKfZU_t z+cX81%7-B`+0^sVA=jIL(a^A{<7Daq?V2*r*77?pNg+wXE7T*H)}iB83>)XKJ)6Ms z$w~GMmE9HV*PP~M0spSgQ|-t_5S4y#xUbD@kFR%LZ`*R?YTPW;`Sk1u_G>A5Q}jF} z2)(a_eMoZ_v+-?R(fURx|9XW<{CZ5Eps}*W!l}aAx^*AMRD~5t2&CHI>=)$DoROJA z4HR}6tRIlAuTFnm2YU3(lw>26d>7h!hCVSH*>aG!8o?fqZCW3|B%8!@E%l3X*Yg2M zUB=0rAr__{XP+?@I9rCD3@`PQEa+1s()|W*P3{wht|XfT>xR2*aWD@43;)%92^*s_ zQQwSu|lvKR2pB4xwK}GC#%kkoB`x)t%dijzL2Ko(zeVY4ZEor zm%rkZ(nj5PsCGXV*g#?J+_ERORP*JG`gi7@8~zM>lL?~IO;$6du}RTVxYj0AR;x<7 zI%DLQ(H6J~@Ik=}dm6n7w)`H~uL&P9Lozo--9w+#122|8hu~U%%HOuuU;Yu*AzD3M z=XUbx1h~B<84F3-K^wT-0a0w&$ilh%F1hAhi3)IBO62fxhm}gmiqn5t8$X*J9_B|$ z#e2Y=lY<2n73uHQ7wJ*97^~dYx|U7FMDY|U7O*?B%}$6^gAi$9`D3!73Qzwim-J7# z_8?c(rPgeP#W+wL9;uaML*A}{Fb;qJbE*6%a8rHBZg)W-Sd1s7@t>WNmYzwS8^wm@ zwdpEOJI4r$Avb#!xVeR)FcD1nB;9Wuk723KQ9ce?lFd}Sy*|t-67-ep3GIQOk+_UA z?`ck{L@biNW#KzV{+|Win9}?>QZk}WB zcZr2rN!jlXakA>|U)7z!WvIN=fv3ce~&M;?<^OtJa$)bas_nG zEAr=%+cJX75u zUz}xjpTW;D&MQ*Pvq=t{69zlkom=0Dy9iC%RQ`}@9HZH*4R$_onXT{!k`0)#EU?M2 z@VD*^Zi(YvsLU$YIUq`i`=;pTS??y@im+QBaa-5uBRye}{Qb+Le|f_f$DTn{zD=4^ zQk}6^JG*znPSZHB{GiJNAz48~?4IL3B5j1!m}y(+@OT5wP%TuEpJ)4SOdgk+zSZ~6 z>Vq&*peHGck79Pin2x7(0x7MK)1tD_4GpF8?W>hT;IpL__TB(|4Z<>w1cnUN+}{!P z`3r5=`BC`D3}0E9wUE!AE`<+tJf!DwuC*GGVqK&_6yE7aR5jQR@35O$5=zrZf1=b*^j;1 zAEt1290-GO9XS2IV(7K!F_f62JluVg6B`L7{n0+R89~76$L$k}E78tANeMOA>n5K6 zWqNcFBTWoBPrGoJr2=4papHf$vdE!;jVW$^e-6xF-NiF_-72yMguvtrn}UkQW!sAc zV193DJwd(Zn#pR~s(r*2raP9`8IVm4M8=n?`4H@$Y=q$hdnd_J5yU zd@WQ@03OI2ge`x*z39-}tC8?m-t9t69Iv7?*BQv;?+#|t|1R!J`StvgxY!y_cvv8!#|L}1n6R&(girg{0_wSk)sy`B= z;_t~i_LSZ3?wQ|Hjb!Fj@g4pAHJL0d{>(y?N5-iFh~BAC4dMjliKGW4+_Eim`zash zMhFmWn3yf-qdAN0PWkO%ZfvYerO!pMyF^sK1unt<7LC7mEnFu19|8xb!n@UydL7wrVLO;1j-(2;1dS=QMjL2B$9Ap8iBhi3 z26pQOFgO1i(&3WSAAGY3n<~6^5zaVLskmbB?&u1WJ{)a751I;o1Ta=yrdHn2a-tDK zt?rJzx{jMcT8g5cjg_*x5iD6NogjoGo344=`|Ws&vv zr7uUXe@~JPPi}Mpu1_9hj%t8&;<^rTb>X39#NDLtC^_aws3Dg?y#zkP>mUp zW7|5@V#oG?QU9ATM?~${j*$l61IyNS9#~7qXLqjPOwZAGO)u(7QmR18^Lo;OpOS%> z%L3#Lp3{`a2#LINTd;+~a-*vtI?R6`p@{Ee0ap=P_QqRpmp*VdLbfg4&GpS(Np<36 z9P462BQqgezcWCJM(zzULkJMaR_M*qQzjPOmfaWb)y*6e!x7G~vqEpPb1uxon6^Of z6UikP55%rpY}D9IaAtE&IbpC|3@CF!gUjSSA)z*I^SQ)vl-@qA3|P z9q7e~8F5(i-pG&jjo^znV!lpee1tBG4 z`$C3Gm62}o04EMXr#Q6Lg+ii+O4_&FRAq|FvTW`5psS&n3r3+o+FqtOCTC^O-j3t`R zmWuN@wKs;yPxrr&l}NYBqSsn8zIv!Tkx%c?no%9O>Z;0};SDm{S>xZSbQcmPZBT}C zPn6af`H`1E#U~!g1;d^WJ6n>u~@GPtLL z$w8RbD#$ftzx=?h;`|ouLet?QIp#`4E{c`3lr-EH>PxI&twL@*GHPt*n{|X_v#C$@2B7FyEh5yZJ*354-NZUW~H&(xkGKT zqdcNn*DayI>VB-&=(%CdFfG2Vw4Om_R79k%xU1gv6L3v|pF94TXq&+|;TEP4sBlw5 z(%CJ}w7EN#tMA4=(}jZdX9bIavc5r%B%}LMbF#D%=Z>WLdWpfNO=z2aI+luuWj2o9 z_#f_9jsm~RZUQMhmU$>C!n249Z+))c!S(&Gx~j*tjx-7ZVfF^(D&Fmkr4n?~rN)BM zC4um-sKAW6z-6fT(SM)%{x>Z6Y6ZD8V_JWAOIiA&C*vwA(4%0ytVSR`y~3Wq*mlUgs#uJxPyl}1d#Te|2ic-)p=FE9sex6eYQ_~e|uT*7Li4DH&)@Nry z3ZZ&S;kCNEo^H-InBBwM?`^1`0{zKX|MX%^L-GdN($j8NdNS3K; zo;GBkHNH^iplTPnPz-Ho6gmGkMOM4IEM^8&rqwlpgnvnx-CY8B+#a8xGxCW_t&8t5 zJDk?cO}J-P8N9$}c`>v-yv%Lom2lg|x zE%oN6q|HqGy}A9_1+Z#u_VG|{8uvM`{j@Rxff471lgkf2>TN+O-f~U80lw>)t==Y8 ze^W)N%IY2_pe|ifzZG>p>bYc6RlC92q`7tfvw%EwdgyaZn`A+TWltd#-Y8g$((;fV2TG@ z;V)JhWM=l8eWXy|DkIJ0YwoikfSa!KZ0~cae`1t@X>UC=g4Z5-y7-saLneV6=B@X~ z$?{U%Ae-v%&)$f6l!D7AgKGmF^jcbHtP(ajxC2>6~!$H#JcK9o2BsT)={b8 z4=!5UatF^7+9GH+y}7<{Z;-pMe`VcflA(|WwhyRHD%6qw8RWQ}7iRQi=tG+G+TUR| zw{qSEzXk<5O!LzTA)hX}pEX8OaZq#CRmZ0sC1Mg_4|OrLZp)VmuGWV(oxo||>^u@s zo}BjTtpaHpI~|38=95Z_C?7uh_{Nikk38%$)N)|w*|n)eZsMG5C}z96tTW0DQ;2)m zgf4z^%B(5*r9H{(9rf&|``0;+yy|H8VS+fV$nhh*hWltk*TdjtG^b~NkayRWJt`zJ zlC|)_rWvTLdwROu)bR=4o@$jw)}ICl^aDZ@E}OKGLGPd=|0K!fkl%mwFK%CD3y0*b zxW7>|R>6ux=)uU3ZV4JJS>ol58GIe@&JT$tpG>+v=tlPzA9dXe3~TC(%uFlHl3WI} zC;Zkv6JyKu-F(haBGa6_u2Vd`jFpbFP!#kLhGnjFjOMOMyeBDQ@d=UWRqW zzZ=+6aeSJy$3&JpXE`m+2zZ-^58e9dq59=Cu3>5UPJgO^mZwG~i1^^8U-XG|UBUE; z_3J5uH_Hm`wQS9b)hw|p;wKcGN_>sKDISpNyR^1ek@MeqH2gNap?4LDI|AWKm`h^! z@_6T}f?5~gj=xWhujEw(W}_kW$?Z`wxH+T!%%4(7hTI_#J5}s}PKs?`1tRmUQjO{# zcFv$Y4fur)XI%lQe*h=Dx$r#Wfe2HKnTy%j0`DmaUCX((oH*4n@7{|;G&D*Moj%r8 z5MFK2A`o8_e2y7ektNwXsZle0Dq@GGv~O#C)N`r#ejFuD+IWF`?qZ9sPY8=;j`3_t z%Hi;HrQh!Ft8UKr^=Pumr_!-JaNIOSRJAE?~t;Q*K(Zx%4bfriSANmC+B>T55 z9Wcm|lBfq>hW?UVz~@w1oCN(Le|W?54|(I6v+uC_K!4Kud5Y|c*>3L2T)A)X@T;s$ zMB@0H!lc(ltuV#S*ufAD_M7J`QvQoybQikgSL4MICY&lBi|bOZkF^9)<@-a{#T{gw zkn}<0r6BLp`fLB~4Eep*A6B%74?dL13B|NY>Kpi#=-lj<-?H%w@d=2)BR5s_7QG$| zXpGU60f*7@hr=xgx#K*N^WUXPNrSF<>*^QWjI;6Lr+e3r?n`)?&~iXkf>oL#BL$3+ z@XXVO*yZ`{c|G{=iDr&TnnF%?gYAlQk(Jx8VN7u7`3aM_wuJDuIK zU=;zkREX)K3x0Q%Wt#Xa@>U8K}=3q0v@eqqL_=4&h@f2_qwhRY5rqltPM7 z?v;JXQOJ{M-LUe;=DsXL+_F;Yx^hbU!~fKI8y}w>;^d=1ZRu6W4!`*~qrP)B82}+p z3U$TWUvtEA^{f~g7HICGW1GOpKo|s$3DvPW;KL5q;@w)LmW)Pk9*y|2>VJzZhBeS|CqsXm8=6UPvdXOKTSD3N}1%_Y%ITjVw)kvAzt11`=E&MOguL4 zVt!A#zwz_`jy9WV|NYC$q|lka!gtpFEeZFQTG${u!zB?WJMuv7UpoM>2}kD=i-( zre7Dbe>7di&6F5*tlFFus`{Et6+7Xh!W4o<>z}WWDyBb0Bi`%I_M_5|rl5^O$tr9- zN%afsMI70njZ}|v-(+n)0E&*q}OEk1J|h!_?PP9^nL&_Ff+9d`0Ux4 z3tR1;_|@9yCeG`5kM|D$pGVL28hpBvEes;%kM}xFD1iDI2yWt>s+jQ>g-2L+%{&}) zf0}7xg2aWjeM118FI$7A^Ma`TGel7m`zLs7U9m-|*VKV{dFget6W-cRJUPsMa*d40 zx(xu{E47~tRZ`qK>2iBhO6$l~0Xd}IfK&yqX#kw~bb9IHgg#Jkl}&^)Yz`07jH7i1 z0)Ded>A;P?>k)P7qq@ty6qzO~m2ikxXS!kP%;#?eU=E5Zup|l_;CVVE<)!^>TpSB> zZpz8`M-Dqtuj>7>uya)Q7;uQvfU=%LQVr@74w6;LUj?AGbS66M0j=XWY&SZz+8Ev5 z!#XOS*9yzapiWFlI^!SLO*Y#V{v3+%`dpf}!yXn84UkhLG{k&Wp$Av!g(_l8%#{-@ zI)OmFSA1YawwvI@((zQk=Lbl5SMC?R>h*+fB5xV~m`~hPJBGME?TyU5leVsES4>Q7 zZgbmJC2-%QT|{LZWlRTi zR2^9x1QfXwO3%?I52PSb?|0R3UXffPKnZJT-ejXx+{cWu_CAqqO4_il^${q4g0ymSnQ@DA;(p6XZr8C}@oazcQl|>d;M!PqEN~lI)!jdW z(-ZfrIBot%Tg%Z9pKr;MzBL*DeLUW$Ucd8!A^uRgW_PpR?Eki8H#IFODz&tzsmfk) z3Qzd|{!^YUMPHms!Z4Np`Fl`-E1z6Po3_G0e#Q2AH2Fl`q_)5QVr!)!u)-`hfz~AK zo2dENUZSo?H^LJ8G7qej_|0Nh@aaqy{nG~ufjW^|c|h&A9c|e)t8}sJVY{5S;;E&G zg2z@yi+SzbFc;OX1E%;~O6JRLIM-orc4oQfbG_i6Gl<%K>|I(bq72BH6wKvq(8w=y zSxMc8>CL11IReGn+d=v#VH@RT{-WcN-ogn+xPcqi518ZgbEdOSPa#E~;JQ}VtJS*N z9rSTmQniM7iWuXvZZcOPk>k9(0!tXZ-T{diPR&jHmh0BMe0DNpR+qG zMma?Hi1LeWBadnm1+tZA)H<9m)(P&M!*8_ZCIu&?;JjRlu`bHW+jI&2(LYSo zOlZy8?>Cu*mWLayO>~k_v}MuxD4*S%D38EO6ZgfhoSSufyef;<{TYFv&tp~aGhEu? z7~-m=6;w*y$~ptbX8M$*j4iEul>cyN$iM%gGo8)IR{0GcNY$C*Z1~srh%HWkN7Or6 znbGXd(7pH=e(XqXw>L5HB z`P@?_!$=?p#+P{d{Nlg7KQr-^Q>f42QMy!cz*erc*%&6XKCmL6n35l{D7v`|PPm~z z*RrZjJ4i)o2gN3a`(|_hE?(;1fQOU?g0h#Y+vkhD|ALcC?_xRcqf}f52b)5+^S^CO zG>;fj!znMC9?40m=GAj4R?5vap6+*NFgKh|dIQ(1<*yG7rN@|@S~b&ZTFdvRK7H$p zAlf4yXhgd1lG<$z@sqo43G4e}4|{B3+;ywTpVUS&$9#qV2hB3n<6Ki}zX)g1JCR-KzCu=ciIE{`ouV>8by;$4Yy{NE%$Sp{9D0r&u;MtFKm`xw37OrC1)i zq6;|Ww5oIjOj@EZOARD=A&UL#4ani>F-r&Yft*vw4cvJFc$+FtN_^09{;q>j=##0_ zbIBi>!vBf~_PkQ0A(ZmcGfN63@x?!6rMs_uL5aoYC(jC3f9A*rLvRO@fKc?m>(<|> zWSN@8EflEahC8T5c*+D72K!#(SE0l~0I8dUi@O2f$_G?stDI_y;hIfNIKpddz-mVR z$bnh8MmT#mgyFI8%XoDjyQ3JJn=sBi{~D8hxf)48aNh}HU|A#t^~!fo8cdWEF5xz= zRFvj=4kWK_C>m|q2l?02y3^pscU-Kz-bs7A79n9hptr3#nw&|6X@F-THgN^0zRcug z+Csk`DXVkkQAogxn_D$`p6B6_QMw)L-N#nWxlu9Qo7q>rRAfF=L`Tx5V6t-j-x=r= zI&$29bDG84WlgIiyWhqA?|Ut^Vx*(t8qO*|HOkHoVU93=e4Ms({m5;&{)rX+p{#M2 ztb@0QT=L3MS`Jxdl>Vx1kD3V>R`rRtok2ssx35lLK{wW~nvOSaRYMAcwknPjJ>Se_ zxBDeze;6Np8|Te_MbxQ*GwLv|vQal2PBCeJkJN;;!N($;yAg`op0p=6f}LTJIp_9; zVRF6wsgizD)pXR>_knzK=&1)&&c?Qci)pG2+DlOG>TNoiw9%+SHwT30+!j;KkDLt2 zFdBF0>gO)bx@+J{nWlO`(gZxwbzQhr#U=+ux|bW)G-%s_`&p3^>S*2Q9?}HA>F~0o z4v8|>GLEP89tVGMe`n~22Lax3WoKnMrQ+5XGP~msnsy-6yX#iMt>o1n&*60g{QZL< z8`5V`AJtvH9!N_8Hl4zF_ti=a()GvMJ6DF9P148WxFH8*_^5Zk=IoAoDE*v6^2;X( z(ROH_1^K(?S++yF((&#W;oHzvS@(uRn=iNqTt&0@A56Q{kSJYhlzsLvb)hv_YkrH4 zJI+EL?0IMsQiUuW){&f_0zPqMj1*DD1(O=m7&{aZ1(rAU6RxXG5o{}5$%qy4D-mELLt)Z3Q{PhN^6#H9t zgwT#(Mx%XG54_n*oFUrRDzY7P$dCs^h6I#(K=}Oo~F?al~{H7OO|Q{XeYt=)=J8(0eX zStmIUoM_`$C+-)sp~t1g#uNg5kw3Fy`^9eRRyuv%>Dy(eC25&Vau#8X;tfYqZITY; zS3(_wUoaGgdK;>KZPuG(b+z9Wr&6N9K=YJS4=VUZi6zx6DGl5lNt7^gJN(LG88z-< zw#r}pm3}JfX$|p!f8Z~L?GJin1p>xi4OAq4c=8WKiJIyY6#FIIwfi5oogq-A8cl5B z$d!!ek2O=x^Yw@D8WxHw`Fp5&>OP-r7hExIad`q2Sr$t(x<|IN*DlS0qzj{sXSY># z*56%|aX7N!z1n_$)KYh9k$u2t)uFI5IGARbW67zofQfyADtC%4$NKj@1+vQwnceW8 zHB#roLYstMTBFB?wQVgyy76E0i&}`KSv0%p%G+?0Ke=~J)i?i**!3lMg>zyXUe6K` zo4|+eT)C)oaJ}t2B;{6V8$3a^F_SFJ$L=w&3|7*4EW3walN7%XK{R%vGI}c6;<^Zf zrHG~48B3Tfd-)JNq!k4mZvSezcQ8jWAB8>gjvnH2JEfYGC(MLxT+@sCYoZ)#Wi7T; zhiRk!A3qAWb+UYIA2RlfZ!f4F+o3`TM~IwUm-n8eV)kxgUhe9G4WmE&M0clKl)#%6 z`Tw+yAXwyWmu5pw^ANSFDn*!$2_co=&t|%v#n394|I*B+=%0W?=Xi^qn;VQ`>K~UR zH&yAEhxcmyFNOMJv;|ayFwm5Lu!oUAT>mMoo=i65Scy(BGO*+xd6GVP+faRGLwYkm zfueJ{ca+eedPp@eQeKg$v?o@p+@MDIlIK1NjJt<_*H&)BzqS3o%+_j*8eloUwIq{L z31cHeKX`}bNds_8&MUdTA%|v}JF7Td;@bIi@PpvPyz>qheblfYuWd|ri^Kx+mjp7= zDqw!*>(O;y0qIRId=F9&op%RIEW{^TxD+1uU1usaj{A zUagXmqtqdl|0Z5DKijK5P7I$ScUmRoINAT0{6lWk8JHYyw0_s854I0qH?1S5F_Xrm zIoJ*ePchmZsiUd4YL_DY!Z!z`@FrvMNrR0^9}7dV5?^ksx-s+jtubMflX?5wKou!) z*jL+YOCsFfI@XqvU7wC5i9LB1n9VdaTY?Vg348k8u}%E+;h|(OYIgJHBsw#n4ctQ| z@OJJ4HR}Pucc5$qo04eNH(5P~wDu4GtSmW53g6SGNn*+ql@&N#P$Yc=mv$>P%G>{Q z>d!BlVL^CeobVkj(?vegWD|`wp`kAk4+`@BU@hOK@BtucPony@6UtHJ>S}?!UT43H=V?ul=|zHr~l{g)_u3$_2t5syjQ9wci) zwn~V0)(Vpt%e%JzPu#IO=_7R&^`sT^SyAiGb;=wvo9Ze*P8G8}kOqs>%#9oXL)Bl4 zQ-<7XDU1XC+u$CnevVV_jkEEAttv0AUr_0sH>5KvgSa%&eZL$xpCwWhN9vZX!dmyxUgv|xVFHWnF-`NIh|a-A{` zk(zEC^~}96T&>}2ov)vF69{|yQsD!Eqt^Oh|O8`b5_#&(4K0*xKWCzEfz&&f170JBev*dByFG8R+HOo6B zk&xZg5$TL*A4?e9?F&RPo?w0UGi7(KG@X7mtR0M{OWEI$`k?n6Pk*8##)Vy_R)>6l z;{CW3RNk>9ywZJiO_ZqDmu=0Tkl|$x)+bFbZudNKo82WZ_-+jVm)ng`(G*3!mfSX^ zT6l|G``bw!g7)cMe)G_%o!AO%h)cU%a**lP;-Rp=YipB$u?ugad)N#8XtDgipX@XT z&+5RSs1|GeZEY7P+XpB0`G+m9bhjSkHb>tkTy7k$^TY6;T3@{TF0)&=vvMz#oWOkz z#AhH>h0+tYEC_`H(~jh${9vcKy_lm{GP9bBO8q-ui*p*3{0B3L4N@!{K7EZ!{fWu9 zTxuNY3Vm3VVr}2a4dkx0DQ$6PBoLuWxohmEViKaZm0w8@^ z|JiHj+p=;@y`j)}16HC`3E}F%7UDw z?Z(N?#~W^MiL(Sf(Wre>D$LQ#ivQ~6^f4U2npub%0ezMC4bHklTu_=}H!FFOP3$m@ zz=!W;b-;AXEczB+Fm)8xr3c2hAK0a8V+?V zkoc3C9YAZ!4o)>9+8izN+Vhqq0iOfir4a~4v1rwH`(hm|vf`X4SK)lo)Y8PWY+)=% z&~);|v*P5IE9$GH?ox#o;eCEOsDoJD^s>EC;N{6#YK-lb%S?ho7H1#Jo&b@wA2tQnn+}UU`Fc}i8MX3)GlOc8k;>gLieD?geyc%vTrR>uSw0yZ= zB?C@<2f@r)bzXnM+U6luLwL5cAB^!3n=pXS!VJkhb{|_6)!|gm#^EHmP!CN zh+J`W+?J870+Lpc4AQsc#FF8 zul@|v<}#Ot%P1)I^{ zpWHMS+mLu&>&9Vao>|_5pPR6gV<7m1cktA?S;lhqW;7~1?RKNL7Q9!jSI=7gACQZK zSuu2+MdER`c%OljDNK(Lnj$4;-!X`t^A$Mj{!>i664&BeR~>NFrjJnZjIrsh$ZI*D zC~a!>+IgSf1m%6bBi{dM27j6$qz|qY3p{+(pVDBPaCt(*aqUmh$h->J5ja~QC+*f}ZJI1Pst8=N!mU*pUx+@17S14UAj2~Vd()gw@wW@#J{`Wv$6T-1Z<|D}sAu>_FNmk6AQ4c`bOeaM`X{@SuJh`1ewAa+3`fTRJ@b zv?+L(8eJDzn=hpzW%NLO%2W8f9a8WBcP zF4CZkE+s})$fn5SAdTMr{toUWO5=N@>v<`YMI~s}@>t-f2dVXn zHIrI_jti~<*q~7%o+g&~HN)YYSiJg=7DrJ0mLEi1-nRGd_o)}B^LEHM2 zQ7HW_?t5bN6N$rRbgtvgopt|TIfmq|)n>#wa4JY1)53fart#!>w|E5FN>1pEtdD-2 zTZI-@w{}1InOoEj3yw|?f)g4aSvOf$TIbHnZL4nPhre$d8&89ka28Q>n>$|b&b9bPtuYZVakzh#4f1mU+0AM@DgrYtC^Mj3|5iDZ#{{!w zNGsTgw(XTQeir%W^y1h4t>8&wT03xNHeSPl#YBq4X6&nx-wAIO^DZ4T%CM@;yp->` z=zsGMp8t=mxiC~nyssJhqUI{knAM&q6wkHglixD6+Ga*!4~p!{0i^Iw9!?=)ZY4yO z>i*G=E%or_;gcDalS5Bqb4&e$H(_@;J!rqZ6=;Hx2DBKb~&SWRhiSGL;#2S9Ftm6p*0))~S1TEuFA{ z_*&XYJel7vP?+gGv8Zjrt41JrH@7AOsy1^{gWX2p#OhJO&blThL=H3>nCkE8&yao| zy6-gA>n{4B){ghs9enbH|M%m{1WUSvLb|nKPEKXv(sHfOXuY+AHc*nSbrS>&S$jYN z6-oLS2kLp|YB9k*cYYqk^=4l07K!4kw&j-R({eF|k_7iY^wzNG20Z}Vyq*D46y5Q+ zJdL~0O2h{E=-JAle}Q|X-JfcUSs7fYh(nt?)M1eAJxJx~qL6^4xYD<~)8qZhUgb~P zLCy<(2A#DVqgyt`K;FwjM~7je3@DVL>M^{Kpj=zs2FV}sYC89?$Gz(1okj-)92#tK zclaJ%-w%?p)!jO1&rk`rY4Cirqbi>FMNLg~he-*{P4ykXd>U#LGNFy#qb%=7g|kh9uXMNz+4cGu_L(=VUfsqFfrA+q28{@4v>zYce;%=(L6lU@>}wE*cr$ z_}EhH;3x2SMK!2WOv%S@M65|RTSEGjdW4Mf)WHQSB;&y;1La}Z9n1Xz?dkNh_qMxT zj})b>>*6gAsfFFM*-&OSz6titHussw+<2Qgtx>d;+pjwL{AgbAJ6BzF=<}AX!9E!a zhTi*4s{4DD)7e#&FSAKFz9q_Kh0+?oCN4~t2TU8o*0;a=p|8q1`Sv^NomCMh{lr1u z)SDgSiiJLFssC`6+7-95UQeE_2uyasd|WO?Yhn0%)Ap8$hgsn{M*3bd&J1Lxn1<~s z#`xafIzF*+qLtZUs5M=m_`HQ>6x9C+w7JYLT;9neZxDR^*^(a3<)4Pk31I}>n*b*R z0l(i(t_~~yud&h=`IO0uGjlr}eSs9o3rq)ZBoIct-srSiDVlU1#e3gLKsg61P4=&z zKZ@M%^7W6kQ3QFz7c+xpq(Kc(KaWbwT9+fksQNhV52y`x-dz73nZ!Gh0xG|X$|@wwoInb)BXvnhrbVdjvv7Q9N%n+QTKN8nB- zqE&dq`M{C9HT&|>3fF~X$Wbo6H`$8Qu=<#!c9)!hYZW0mgl0334hki|Yb zp5HL`raVH*#pj^;SIW_jdv@+fr}ZJJtj#~3(jXtX6vP;L7qSGrr$i33L>)ld?4B*^ zTFjw2yf|!@N$-qFEmHOGH1MD6IHs&2(+6?9F3O=JJ`!WWMkf0)DH$St0%;C63|Mr( zxK=aWYY#d;rS@T~_lKBLlWi-a9ES49~YJ zM31MO@>G&Hzs8i)Z?A51tlGM2?___z|ZDa$NCtB}s9DY2s`kLX~5!pcjqJLyf2)GWMVXQpyq3L z*tsn))oLHETmFka~NXj+yQ^svnVov6K{MV<-B3x|vw^55P6EI ztMHsW;M{z>Nv$`3`*3H)Vo1W5hp8328d!fEL^C@;zdCETAyxOiw@nM{2s(qMYkY-z z>tw+py&I1N;qJsFV>Q1*vaU*_(R*aDLs{uaR`uJ-Z#<1Q#d+#W?3XVAgw%dTR=zuy zWBd({kcHh*XA4xQiTK`kKPOjw`rWY@jXxNMil*olAZTC~mD8wkV$`v|cyjmR4Xu`m zoJ0;(&y8-(x^NK-PQ>)53H&Xjy3zdyWD&O)BU-(rQ&(jS4nNQUH`bsooG5>W_lhwX!^Q$ zhH2};ZFXw9S7ZZ1%}ge3&)rT5G3CtiCo%A~+^c=sTA0pyPasU>aAIdMzrf24u0C>L znP0iFbi^HEQZM}Q*rcqk<=VvK3un4R(?fTJvC-gFW%IK%sDzp4(O|mayObWy*2;km z(_EaJ*?IUXc0zi%I=QJW$P!z(eW4jEo+WW+*xZ*t*S^ukdH;hK(}`(s%=lWXg32F=d^%g=c-eunf+|VT;1shi zD{k0XxE6yj;5~~TD>ma)2@9&+xIRJ-Q%YV--{o5d!Zm(osN>UpPlHQRP~jDu*5+1k zve#H!zXs%86s^sF_tyV&>hrvy*d|!xKKP(L=%LShQ;%+{ce%C-Bt04)hF-j5yvz72 zI$i^l>1eXXXwch~(!Z~YugMP7Ly~zaC;H3F2K543Rh(zGrzIo?4PWs0E4$gAs@(s3 z9fa`*u7d6=Gi+8l9FK&yrs;E|(992*pc^HnLGCFNgA)8V9z;w+=tA)GPpWYSIy-SQ zY9zrFja-chWM)~7(|90LeXybU|5%5nN|nTBwn2qZ@dt`nAKy!BaB%P{B1LWz8yCgrsDn;*>ce6*tX zL~OW3VwsDp_WuDvK)%2H&&BW_rdcNXaH9gN!1~zxo=~ZoH7mLcinMZHl>&_V`m2}L@^3(S( z`X;s>33feHlkAe~-@1-{Zu4+#d;a~%&B6>w7w;|UZU4Lbmd|=is z=c@+}gRd@MDBs#S@0DL`V)1)tiv^zf2Al+sRsQqNuY9EyZgA(WZ}970De2AM7sRW7 z?n=0%;$|m(QC4sK`zh~_o3!tXesZtf%67GhvLG`v1L-B21?b{Y1MjvDPfLPab?@{!){HSWcqGvS;9!a*0LXBPt)|c z5^W97?{qA)sLsrrXIgjnrTFgIZx<$pUhSDZVUVWbD^ z?GL?{P&fXV!nJj8lIJWmkI>Y<{q5*8HLX_d+yo{6^l?(3tmFKezB<*Fm-YvLezR%w z_^^-RIObye*;^6Ub}FAeJu7OH$!4*oYey6~nl^8ge)#2WS3q^sGUl5DX}Tw8jA3 zlkUiQ6&@X&uxqyZDrak1vd)!%{j;~8O?Rsi_nOt+-4&c#7P-}JN5Zx*1)R73$!}S= zCg&`b&v~HhlHk6(=dJef&+iuoG}V``yPO*^BStSHu_tJ73gxKdgMP6V> zDx2$YzuNI5kB?CwL!YB_ey>$d(J3t>Hy26Dlt)wjRO?o!B$JBw-TIBp3!O|iWqRM; z%QSI4KP@fFC+pOEN{#fEvk_G}?Vj{I>aJ-id+ye5sdP#?rF?d##AP#iS`|^eb6WVtK@77xvX7-wFMy+6_ z=e9bf-WeB}!Av-Fm!ahKjx}tv^i8u5S=C>3cFU!zbM@3Sj_=%mO`HAduEzSiMV5M} zJ#>#dX6%fq+3n+!_$elo`$BWRi(zEig&$%u6HD8AJS_HHluCZFRe7vya+}3U)|C}j zQLul6EdC&;9KRLg6B{G%S5nXi(v^eT4vx6Wa|Tl`Fl5$C}V+wAb-!tvJqd7e5c zY$ul^ZuaLR*KBz;R%)zXWh8%u>54yYeqQLec9U4d*(LTjOWoaHI*uP7?{#c}4%Id4 z<1$vw5v3hxorCr-)Xsi)%k)TZ`iY(SiOsVwjg?C6deUis{dmbKxi+4ca>|k1aTSwy zS5GXP`srgCogWmaV{ctwxk|f>n;?0QyLZ25{OO3KZSR#5g3~X1Jx?q0ptns+1op&hJo|d}B<;z72dQrVcuTK_7_E8ipmss-tBSI-5XBVwce-~^Fu7U{qwS>o}>1~_n#|S zR>VtxzoVL^r@KApBXx>|N$%#7ME7NuR;QvZ*{4)J&af3N0$d{jWwfG*i zUjD~)PpKsBYx^JHTsrI09FCh=R8vXL!j4Z0_9ujMayMN~I^2Ds?N(AsQc6lg zWr~r*<1%_m@YIRRhL&q(w;!B#W&a$bp;YmIkFVn1ANDcJsp)Q;>mB#VXRbGM>zW=D z-mE*vBu-T6J*pqQG585>G;5t!Q%dB;TX!ra9~z|%jR@XkH=)?i_ON4cCi9!y)T?VR zy3%J@RhI0m8oYr*(#@PLnPo$ljCb-^{NmYhw%x|t_eHn)qUVb?l<%~4vvo8Ll6I_r z@U3f_JFF@M}S@eJ*a_qyUT=|jfh?eE*T z%~#w;iyt3nn|`+~>vKi)5{i=l4nV!J=uHP!7FcKU}~AaeD(gw z>}~55^F7C{uC2{YetGgx{C4vi+Kdm|ukjP)4!eI>cQZ4{Dtm5UBlCVw@8Z_8hdU!f zqRcYY+PP~CX@2_#u|LMD-@LTL?q0EE%|YJ1QvK-hSLL}g<>fbY6sIoBKdiTZptRdp zNkTGcRfuco(>Do0{_7RKjefx}kjZ@CGjvwom}B3`UrU(UlVkgL^+%U_=}n0bqOdv> z!dyP4oBj}+CHMM8caGb-19Ib&QaZ~rlRci+yBIv5Joe?{gf&I}aYxiUeJ&l?*J`zI z*I|v<9L3qi>#5UAsogW%3p&+*rET}|udjT4KwNKLlU3D~;0!qdL}S&YfU9g1(ZZwHV)K6$-qbAt3qj5d2wn#fB(bM=ZANtKN~UEu5HP^ojy-XoeJV# z-_eXJ2rg_pk$$u(H8^f7mhcP)6{C3Z-F zPf7QPvpW@&z20Rsf1mrjS@YeH$n#(C-?GT9Y5gI#TE*f@y?((6OW)ezW6si@GpF#! zrG}Bd{~=cKE^L>=%c_KYL+4M*Mei(1UwJs_AO9Bruu^f&JkMBv!*L(mD*GotQPUc3 zG~x87L#bnmE**~X8Lt$>TC06Pw=JpHp=O-v{Q#%EwJ?$-Z0+Ts{oSi`MmC+jan!eN z=Sg42$IUa2ohj8RHn$j4M)}O^b99>}_x19Zmac%lg30U20ot=?BxP88rS$B`y>&S` zf7&xQM^17|`uT%@5uP!(JDV-_%4|GSm4cr8IlF1bl-A9yyQm(+er(lnZU;G;&24U;pIX0M9shnh*zkL4-?9!=(o&L{h9$}Qj2-v2DH zwddQ%@^v;9UD`@7>RU>0WRz7td)bzg%}!Mutg|M6+pF|qb3p5R>1Mg)n2@>M`!#x0#4({)v5 zTehx#uh?^S*^rClPHb(u=d#zmMsM8hITqs|M8r!S$pK4dDf8m9eaddC=KV(BCCiw* z>jz(db+5U%_u!3OyXJ_x8D;Y$s+8q>-m7SBeDeAADUYDzS^F&64RTA})m|iCTc>!F zy*TldSa+#Sv+A~t@ufCRzE)~eDZh<0`qd0_BzoFM@qC8{xg1t9!)L~WoD=@9&tFWM zJDstjEIB+}?r3sHDr--8M6IfQ$6Ch=!B+Wy^0lh|Au0W42?kbLzUx$N&ekZCa~XSr@vC@4xb8 z6>av#?Qf;)%7Z)X-@7QxzPRwwI%6x`NQtnF*8r1{L{#^|SRy&HpU_&u{WSu{kU@i%X{e zuT_BipVWWTSfcuG{kMPM^H=+C3w|?Ovr56plZ9$+Dy+bNQDk`jcl!A2{9h`6${MO_ zKj;5a(bQ1=H~-f^@R20pyG$Z>nMCZeI4u83f=7b1+Q@`tO`)Kgq6#DeBJHTbJ14J(#SGNo}n_^9fCFKIQ4P4mEN?Se7bP{vG9c>s_6b@6R5B(zGFIYsTYHR*^n83f*QPd?PMJ^ zV)!HeFnVwmRzw#pDqB#`o5$zC$-`>Qbm3bfyCXvbt3xBx=>a5+GQa}pTw;4jr@B^bqmC*6_ zms`V^m9@3CQT1OA1r-$bBr4&u`R;U7PZ^wqC8}`haMM6r3WB1#?i?~FKoMIBtQs-J zpG}9Ae7#wIpb;>0V!`1e&}m*wydpU20k2sNw-DYo!{4nOiz(QDVyd7JHCPfJJdrFq z%Zo=!h4E7CF$U zxVLC^(Sah7h@`PoQJxRuPrh?{Vym>sfj*^m}pPwSm4;8^W zDB-^=dh-}`Sz;lDqab^6D0q!|I3QSd*_Y zPe$O$^58SDdf_Z48i(tj4ffYZWknW~$70c8#b|!!C#6@3J?9mP4p-Vj=-Nk zA}c#!WEf-r&E!Rg2Bu3BDG3f%VBqkKSu8FOA0HP#fbQ@+MHa_P37i5BSLxSb{+%cB z(Gnfm@EI!tgbM-RX7U;A0QB~67vj$!`Kf7hI?v~SrzuduSLihp+Z9fhHWrF(Z}z~U z|L%#O+BNYKj+bCw97Ru-ACnHyh9VQt1wbg_QS|`Lc)6)4stAV3_M{3X@;`W2R#te} z!F>Ze=gFcBAe|&{GN9Em6h$vZ6667}(mN^??}0-X4%bi?G{6#^di-)i8b%R$>X+*R zZo8j5vGij?83&d3aFd1>eBihph+k4LWm*1CFy`&Zs#>CX4CC z&@cRJt2tz10+L%1oS2Vw=}qY02hN65FrI)1!5u@qnwx+0Dv_E!d(RA z`EY`N4SM}3?qDy#vdJ7CT%7=nb>k<|kHw*T{#JqlD5TPnuj;I1Yi;9 zP^SEen}TyetjSLxL!d;l(933rM7S-m)V4Fy??m3?3mC z1GWhUOh#-CAG7G{z}1Ct&XYLZL>s?dcEM74LUCSjdEnxJwn3kNBwsR}FWBdwv^Ch< z*yY5uF-W%o*bWD(QFxGIv9TQ`^aSo0wuBgr&%^$}06k(&R7_!jYb=-~TRTeyG8;BQ z@f7MFh%fNLTEJC9tj(AOc@aK1)FD23t|DR-=xYM-a?zOab1eESoGhT@I1z)24m5oZ znaQP6FlqwHs4p3R9wq^8L+iyPEjNev8FFdxw>OK9u||=7fZAV-KSH7n#wzF*oknnc z!GWc5y+x@F7Z)|iA_Pb<9;i?NLI;K8fhj6IX^@%l=|DySG{Fn-HxBw9TtfI5#^MC0 z0;&(mBqlg=OsGlav(fn`$PPx;{z4o5-zI59TYo{%$aDaI9EBP}@Fb5vfMNaS+Jael zu>chjkTg>Y1MmeNQbGYXiv~yXrjY48?*I~zm)*h24HVa?92NuKQUJ9$T#BfW26-Sw z5u63#<8akIDOAyW_Urjas0ogo2bdEdSF2)bVs~8F#Dq){anKKlqDZ3j@Sw1HKdH_J zk|;!R$s{&^i-XYxctluK#R1UhXR#7IhvQr!gMgBhs`h|k$m8-STsBC>Y2ZYWnLiH) zt(brd%9Bh1DP}mb;CVG-(lC02AqPi5`befUfQ-q6ehuk~(FTHHif#ze12hr{)QVhO zugG8nm_k7-0Y=C{zz3ri#Q71WNtlimBR2v$*Ym%BM%u;@V6PAWY-0$5h3jgA!Q@|# z85wXbcc@^776Y)-UMwVeK!hYXY1ll#WrZ+jz-s>8eS^EDEU%)eEoc#vKU}#+rSNDB z%I{VfjSvh2-gM$c(M4nd*fx;maDTh7rnstApg$0d&=08)&^F;e!GD9>599zoSM;Vq zZbmYHv9-3gT)oH`#jF@KCR4;;P-4*AO-gpdq>E+^ig&_V+_H5rm@WTz7FNG_xyzgsWB zUJ*6>rAv&^|Ak=@Sw#QZtccUzRV;TtxIpfF8r>6-5^yQ#bP;j@P!Bw};240tAVhue zBp;ywIA#-TvJVAo0iqj`dkW~VF=|)@Zvhb$@_z*?5o3YG0sfofPs0W^ za5RYMV!VSe-pZ(`B8}F-Cx72MfOO!02yq8=fOIIoZ&_JI1#236hG>%jDe!GCKFt%| zG5p9wb_BkL>nPAz;5}eV1y~k`=8LRD-ee||LKtiCBL|ikv1>~@!QxAr! zh@JDlXBqz){fNjbo`9+X63l_3jF%T?c>YNW6D~6uqtV7dL`6V{Ofm;^fz%9KGDt{& z>R2ea(I9a^8%qUOgyaWxEHJ29+AvJ^&1859Uf1bY9!dU1f_iQq4P%gG$DBo<&p z0!cD6v(}nf_K22Niq;8;d&@5aE^cg1r-T!tz`r_ z3)~iQOQAd{FDm(i+u=tLMRf0R*_X)z!X}PU7?3*REBBL;LlpLLes8P5rzwwsD%Ka$ zVzK#LZv<;PYSYKlJZXSfZ}5MCHHf^e6K9 zYyZC`s+wv)`~N9xYO1RJ>;Lx;d?ZQgN-9d27oQ|__X9+b35lP74&WqKEN>=YCV=I5 zfWHQqVZq-*QV#wYK*Yh{BBUSuWeO!$I%z4z!-v8IEX51!Yz3ftxN4Kf0dNLE5U9Tx z(6tU=vP`}|$z0&~L;@6)#z6oEQt%bHQN^0f1Z*6laYfJ-olWwh@G$g9D0jo!4hCCMO_CV2zYNz;*kdRp`qF2tPf6o4ZsOdLjG zFb9Ej=nsOtIS_ai9tRzgtyN5H)1V0bFt^;F?e` z=*yzxE@4p0M>Y-Iq|c&Ko)0Kroud5$Mn`r!yq&8JU>b3G|M? zJBm6&7gyAOh$412g_u`x9^v*2)O&vghLF{CG06@93{P}U5k{d>$Y|H(NgPa8R76i9 zD=qjENi1;x#lH97w^MdScBj#Z3e7bPIr+kqMlG z4F!{#A@G4$fwbDr1VTtp{4NC$YCOz(i-3!~K!=NevjjK-I9v+PLlHK*8q><6Re_?X z$h*kDNdcWEz+y!It$>>=2YiRsohHe+)4Y%{ilK7Q6%%eS4>P>6fuzCbVOs#zS*Rm{ zqLd*^f@88pa)T&r!$$Ipr-%Z&(CD{;UM1iQaBGD>;GQIKv>qOOIv-OyZ*=9k(BuLkE_4LKWEMN(RKv52`?g?GBIpV&8+1_x@EK_tv2{gmM2bNELcXg2 z1;7J{`bSa*o#YFT02%|LbQC%m6F6Fe&d?-((WwV$oWj6Y-wr=^TtBKJjWy6^MHh@6 z$^GD5dqD!`gX3?^W`<}YRKmgrkggADdUY|QI-PviNy`Gy@r<0P_KV zWCHZyNMmx5z1W?_=V6u}sHb8gj>LcpA1+j#5IQWR`Jy3F5S(>z$thqbvC{^ZUI(hH zpumV5rO-Nw-asfM|D_!9xAC9$e-8gCtNeohH8oW<|HXg*z(*VcKy6U~=mjn!SqD?U zf`iI{w!Q&()ev*T@I+Sxkr0eMpsUM&HAHV((KuuQ0pfw{EaIMo93~0B8bne+L!KudCK~mB$kd-t5?}~r`3lUzg`z5c-5!f+bsDg)c$v2^}_^a)u- zY$AxhAQDLy5J_Cc02iMa39k3VR9DdOjC>9Sl#?*SGLdy1pi3hv54pty_zWlv#E&db zs7wKS0s5mckUEU$1bIyYdW$0k5e*0W1$P``!d1d_E+X&2s0SVk;Bjw6z*d97A#?_? zC2l2W;@x3mhyH1JPaG8VLG~km2M}%^4D<~ZZUN+wWHz#0c?y-3Xzt!*Hds|5e1*&b zA0uWsrr|axahx+kGce$z-aImLDxlM#KL~tUq-EFuLRNsQ!+{Hb;v&^1G!tMgx&tgu zMW$%t%%D4=Aat%G3&jWYlRL89i@Ka{0ACX)K?y06DN3ebgy>1d4O}*VS?F>1Uq1`Z zk}=>pkkWN`NA1JusTpo9!z=Dj3<>F8v+!mPLFtmz00{~zIZ!X5yC5s9wYt zfKKzlPB=iaBt(yhaY54dJL4&U20-S3mq8xGTg175$O{b%b0@^E7P7GjY^lHL7jqqi z2%j(#D2U)c2w;2xhJ)LS%o{vxQ9+BsUp0f;&;<)1M6m{q$ds z20iuX3J37x3L1;YK|zx=rY{XQjsgI}1jvYoe7gYqp?G3yNL+)79K7Ijge?>w=_(2t z0Hc?ij*~IpvX`6UaHlbOz!d;@1}qkO{y<^{>KFij&Ie0|)Ss3@wegBoTwP3BBGfE&B32sHK#&#-oQIW=MG!f}Fn{Le0H%2B zf{hkJY-3yV0q(Robb#7Su;Uhdq_-IuLbZbMcZtI~wy7Ssz7&5lGTb9uztE`=DpBx70j($wXa+w>q60z3X)aW&!zd@H%R(l907^x!GkQSe z+#{9Q0DY#=QyUCs#VT;0AR?r23`P4l@>K9?9BrILNQp z6Z0E?1_So`y@ww_PoiB|lYy)Uy$rdKDk0gJ2ptjjf;tDs4QX95>`L*3B$?txrsD(w zhVw!2$Hj3vXvJi?5t6xBSd@UFU^(nCC!!6=VTpq9vxwgm0@*U)WqFdRi7kd=xw68w zq@$xRkHyWx)5*e>Tf%S~@G^8Hr@@6|VV-|~zfcF%F3C>`sZ;52CfI;P_8SV5&G1ORR{;++Z8U;&X@@x?|h87=Bhj3`eX0g z4|vTQoDaya2rpAlm_>ntZ6R_HLLK5R$$usE;HS|V?j&(~X$%T-#fJQii>b9)xG$WD z9)vi?NYex(1i(>%)cB`sz!Qmmf+8z_ibh8=F|jZ>x6vU9jvT>&{t$_Ll1I|7=r^L* z5&;Xy!Z=vU3NCI~c@_^)f)w!aMRSf6@_c9-7NA4L%?}Xj)KWM$NfX za8KC*ln^s;fTjqs5S@EuECcHbEoh#|^BM(4U{4@FEG9gkIAa>nAU-M)f5M-CPRvpx z8w)c#z$-+kD9&rJv64lDT?8y186|l_F2M<4^H_Ll33!uuEDshPBV>^9;|V(mkb-cH zXMl*!3ON?yJ1gMZju_u2QR!q6=B?le?>o{@T9}xSG?h%`xo4W z=qz!v4tGHqD`pJcNg-P?qEg8;%rDiEpuYp-9dJj;pRAIYI~5$>YFkrV^cqq={bX|@ zK`{joKvC=did6%^p9MMu;E*CVfq5tsq)G4)B#sOrNrcY4(3TE)84N=qd`D4m58*oo zE)Ae0JYv0n;dk(2Lmdx)*$V-0fjJIdP7#MxT$Ks+zV48ZBR5CD6;SX8pN@wJAOrGD?BIU^vz3u{TfrY~mCmGxY79gMs0(B7PdI{QR(7ZSTn=C+8<_G$cy+9G z!1-fh3+#)?7m@aYM@Kqj3PuJwkhTa((+VAgytvpUQ2;PTpxQ$l?Sotk!CulR7>vP# zDX>AAVHN>QAQ2n}DvPv8Kn$@55x$3tY~-X04&Kl5qylzvpjQW6RpBZP6e)jt3_&mt zI7)e9y?|#LN|Ft^`M3jBRrxC8;o1X zlYD7pg18~( zFPf+R64~Ealz+A-540x#Y)cl^9RBPoX$qFcl)_+hDFGxIEW4cSZ+*^$JOK&^@SI|3 z+!va7y|6%k58>9xi?Vx6bc8`o$W6y|fQ=050`O z4p8_uAulj+odHy$2%0{SifHmY2tR})r-*vli|QFrHa~doFkB-N@D7Ct4_}HR zgT~`fU_uql{|FpB6cNdzxzp%K%%cg@WH1SbHy&hvdIZB3#Cd?$L8G7vaC8BR$75|B z%-4V!P%#87Ou_GzRikgPk+~B;N$`?83P; z=ol_Az#OOpL#VuSM{R)x#PW{#A;bqD9+d`lZz7SwLf1gh1`2s3enCNX5Fv}|!7wn7 z12!Cg{9*AVxQY*fPcFEW(g+%$eMMV`;d0?sLv0&zxmYekNwp=)s0B$?O)WS(bRpz1 z?SWv|(K~iOQ3V|YiNV(MIY_D%v9^oO1vf9lQ^0}&n@AmjX;bA%qERwrB)j=3VJRaq zS1t&msVuq=O7Dc4z+f+nsfhQEA#y$wY&z0^(qY>80r}F9>D7|rk46F-afjk9E;gWm zPCU*W%Znx0AUqJ1#Z&-)DnOS2C^~`nvB!xUNm|BR|2F^E{EzW} z^(9Mw$N&G$|NBpTy7I3h2%z~}2tXJEekRda`iY;THF3EQa(Rpa0OHBi!89T;EH#jS zLNe#jJfS0x6(8IKWfg=Nh^Rhj<{+c4{{(!9<6%xDdU~k-?hw$cspbIuC%;XGz)f>o- z3mi+Nm?!h0B9%$Sm?Ro44i>OwMT!A50j?p=@F-NMMnZZUXgU_)9Ki}>?*KFfU&H3H zoWjG?8qvuCI3NI^OT-BY;tdu?Dg+4taMh#$6=GJf)yAf>xQ@<(LW~f4Z_&vf6yf*q zCgMAW+j=NuT&w$&)t5^WA81g2f?955N){ptB`j4Q3j=VX4fyiukQ-wl@_)G@;pG&B zv_P*nL_U!e#nmBUITJV}q#g3WqdHLD4Dh|G3cT@OCB0ySosEC9ZTBj=KTY?nd!11^ja zmWT*5G!rkwiQxAhd4%E-&1eMHxb=?+d=XJ@^T=K>B?xF0JEE2V|AU5+yBwzMBBKml zeiVuiN|u4lcHl*9hhY2%+9r&oc*8q|i$wobf8flTVqIZLelf!;ZhD|X_djnzLJ@po z6egBM6k=9PNsqaO`lE4wK$3~Yyh8%|b7TnSzzQxt5u1$OMTeT8F2wDFLxwjGKQBCQ z4xgYjP?8byCE*lRRJ9<32Gb`f9yEGFCt*V4DR@u?CHaHr91%CcFRJRwf*jTGT}%og zPBEs~$LI@sM^#OYq(E9_VT}C*^By4?6cQG=A>fZ?WDXs=007#5LXufdWBOP^;K22Q zPR%@7)QSq|Q~?}wJVhFl<%cy6rlTNgOrTLk#VS0-2E2;q0Am>2nc{E3AqiHK%*2I2 zwEILVMzH$W1cc0x$bun*GO~EV$Pyf^#|m|P4>Z&tz6UUGoOkYNz1j<~>oBL^~Tfk6yKgTO30fZd`u zAh^a@vLS>M1kf@RA7J+iPBI}s#IPAsD*euJlvo@kv?3(JJO{*9m@W*3st_y%L1+$SVsTJ^-37CM;FfJ9?O^-|gJJ>%imH_ev+TkLiL}aOKQ5I74Z#c~DxmjJ+#+%) zA>P2!If@H*OR$6@CPf78y`UEc*i0;o4jwavnF}$1heRcgJkDl3F-JA5zyL}q&*ZY` zG)%xkJWmh}1vwUmFmU+>@;K4_yF65Y0Imn&Vnt+s!vYA*(~V8`@WEn3kmWnD+}nJ1D3CP|d+Iaf&u6$hn1D7G%H2AebkO#SrNM;T|tV z>_?2ZW42zD;0sA&48kA{ZPgfZ@uFdwX~1f*X?O-Op_2r**suu>o&y2y6qddlTKxf< zz#__j;VW2HRu&xvK!l1w)`_mYF29eo`7D&Oa)M^B| z!A{|s?LAOFxBhJJiv-!;^%~oF&{UfaNH}`l+a?i;GYlFBH9m zs3I5NKb%ye4Hw8)P$Up2D17nM;e<#}cs>z62uNXpZ!#I*Obprzb9jl1I=&5%NNHGq zWe+R}j>Q&u^ofK94)9r7OoWXSIr>pLXtoE7fyHNI6NS0Ca0StTWkZAG@VSIl3czVZ zT(GyGFO#^ChQqXUR6xV=m7H|ahSR-HqQ7S_WnWIKfEFNwyLFTW2zy|QQ@t@XzF8)VVMdLU4@89_Ef8vAm{{RAN z{#g#7pHhRg(4C_ z|KeiN+R*74C0R8TA24@e!wLc!9;E@{f*v@+fD21cs0byTL!m;%WVw+*fr{(mv5~`e zah)f%zNwA)qAu)^NZ%@nW&C zU~cFEkChx`iKg$ya1K1bG-9UK&~ib;=V-ay8vhzx12)v{dva))izJk17;tm3bT}}E z$(zMvf#m?;fzI~=rwYY?u@NeBKV*u5*A>IY3WB^w2x34Zl!$g6dB6^E^FV&6ez<2p zQtG0$L3%I%aM5}}B`iWbNOMW!$zutRuzUf;PKsEkup6Og2yQPlr$KEus(VA@8erg+ z%l7n#7Z}h3DviRyo3OQ6?u05(EVqW5KRPRbBGCRKbvhI$Q9(g}EC&$4HAw6s_MQiz z6cP7D=3zbnB#~sFTs$%z?f^;~j@f6hH;e;t{U41Bp^Xs`RlJ4A3JVrsP~d5!aT%B} z3G4ZYcn+hPv9XScq2WK_qry@*;d)*&16*G|h7e&&N&s-dkiah`zZ(H|#E@Od7m!9I%cE#gfECaQ zMmI)Kh1hoh5nc_o2QUl`8Bm}$Ls9%s5ah3`gVK~Bg_bB6!dC+BJCP0pZ2+zh!%~;< z1!=;6(QjDX2IhK+CxXE+8_co??L~k7j=UhK3w;X?He2Kb6Lu=x%(RhDL%|E!i2NCJ zXo_Ql_c3AzT|<941_MG07#M8BwZM2TckEXIVM4f5NM`W{iTjGxobVuRV7X((zHnCp z*f|2E1cCZxAY?k1CDe&P=mV|-)bOG>B`lSH2_C@Y37f|}3x7fV81u!e5BcHJJEs4j zF?|UCB`yj;2MYuGgX*?l2_T7$te9B-B24AUr6WC}J1P~8fTagf??F%|8;g-bh>$CK z)3FSAx9C#fs#-xlbe1`>sALY4Na%#e2>SB`aq&cMIxCkWve= zF~$MF(kKdYH44BdlEIK>i9y5;JDAB6jEU$QQ?{w9h@^CcOUkAY?q2Ag;5pJ!Iv||v zq3oDs40Z~tfkJW%U7DD<#|jNk3NQ43z<~V`NNyEL4YN}Z$ZLUF*fCdKT%AaOa=gGD zR+)p1`Db8K$bjiU8@du|UQHb|zm!jE)(zbgWNk(o?IW+j{x!<2y(tZ4b4x$%mYB7$zb4F5p3#s;QJ zAb+V*0NFdx&zt4pw`w(;MPb@(v{hJc=DWh)*G|*R)Xxud*E9!B9N_CROtrY-K0^t3Zm^`Ity@8yZ|PHWW)M@VT68;#$`(L zFy$Z@3HoFY4hzOr!$yTxRCfev{V0TDl7@>>2<ZZBwhjv zFpCAEseU0&SOASsG?6NQw896lkRQ^|K_Neci~2v|TuRc0X)6SQtfGR6g4 z9+6udTWl}@4s@eN1!d@Bi*T->b{2t?plpfXX?K9-pa&oiLtDsa z4=eVF#0}^k;<(z}aK0h7!zv=OAgs8|CT!@~o1%I5iNrO+z$1D5G{HknA=4Gy!A12U z#7Ls7n3A9b78B_-OL*3KTX;5(B-(p*n;`MQvbN zj?mSlGlcz!IueM`VWBFFhOG=7C$>7caIGk^IGCCo_x`{YobFKTqByWMtQZ{`Ww1h- zo)rZSC|tZ_Nhp`#_a631Ty?w z@8N$f@Spz}{?|}b{Z0N)wSWCT|A~(zNlQuVZ^QrJ!2Q1yRz|^O0V_bA+1?}zK+{ns z9jJWe_&`O|Dl(TwM!|b5cM4$3E67X_7MaWY#U)im5gb&}oH{>IL_rcJBKV0yq$}pK z2wfTej5QHRe~w(KU@k3~h75N%BOtrb_Yx{i$S`EYP*B2yF!!LGn|KPEKTE2qtuBRY z&k46ILA@7}jDkPG^vQyvni$W;Jmw(4=QGd~hIqav)1R~C3`ofaT>(%sE-%V2pdPE$ z$Y%=;ZIB1ToP|H-I>(XR%T34edNqPGTc=pZRrYozcd@`>R`6VG=CggFS2e(S)p9EEA2kahfyVFeY@4aEJ^MA9N5 z`~~q4nFLNB9=e9P{*n>O1v~-|XyFR{dU})~{2HvTza37&F zHV?@N$d4G{6*3#S1{3&&PVqiX6d>LB|H#aRtp$X%q~GkxAC3>UeTYK7()^ zL@y{3WD_15OA-&2pJ$=vVX^fNKU9U)Z~F1<*M{o*2l92;Eaf z;s|4Q6DrLg7H>l}DnKjPX#vy6^cU7Ee^#53RF-I{E2xRs#)O4X1>R1AB4_wwBOFe~ z8st)Vidf|^WJKUW;~(-W1~d+N6~hd3geND;tB6(P3ed$gHo}gH!;98T0T-@Oxj02E zNCF5#P#TBMQHJQ8!5+nllp@e43weqn=P7u)k((Co2?4b*aF9UOWRb9k1upNHe^V)R zg}?&%$w(SQP9mUJ6xRSw2%|>nEEw#ExfQ@|!5t@XMXroaMZaw zMYtiT<`a#HNB`kgTks6Fn@FF5>U3jbs-b{Dpce2xAf3TO%b_P6HiiNHV{v`(CgFoc zRw2yj>IL?S?JvMb0`5(ErQjj@bSXL|a>cG0mc$hKK2zI(4!@!mv+2QfZ z8EgQI`9F^xZ$`jM2B26te{v&ZO9dj05hRpcSXUUkj6|9MLH11o#wrd>5ru4Epg~`O zffYBOft|omHKKAWR*9P4uxj21=AuKgw!?;t z@dUgTbk0azKN=5^8R*l(NAYGDB_mW3@aCW)i72W;Q+VMOH1Gd+bQ6D9{#Vxc&*lG9 zRry{1AN7Cb|9{{E<$q<3Ulafo3Q>ml7mMk%SUFi)NGOIJPK@_0gtt_4|NFjq1JgrIo^xqLw{ zE36g(s%?*DMFG+!bfHs097q++8IopVWH>J3LicZIfD<3Mf3moG*BF}W22?u3J+TGO zZUiGDSTxk&<7F!_Cv6?VUWM1_r2_Pa3u1yo%w$NI3C0IK?XYb_$+U6rO&CbQH6%_R zERW&`>!2WWlnC4)(pli<50s2UMu;h}e1#AXVfllIpdjK8aOmBFO)@YgBNjk5ESM5h(y%FgF)CnA#NlrF+%)^ z&^3)q1mdcb0$@-lkeMic(A$S_h$b`v#QTB~!et?*f}$sZ>;b-aCu81A^@L= zHDzM%^QdW|*C7rK4M{RIMSuw*^T!njvLG&c~qBT%}1_?!F%)LlZdIynTAmmA^FHtch8PRE8OeEDJyn#&} z*LPv%Ihg{&j^ux^o{GZ!vnyzPny$N92yGegL+JFK9>f5frb^lKsOOW2P;Lvg6P7+^oqp7Anh2es48$V7bG5r zf1A&uQWXW=2!;<8dZ<1J)SHlzRs@CMpr!@yVyqCiVbRefka8PKYk<`i!>=ipf*Hx- zNCyQ4V__a+e8|Xlh5I7o#a0ByCM@6%dr(I(CK{0=SJ)VC8ep)Punfn5Cq*@EsH86{ zRE$y(fJe|qjL77P+Zu}y~Pa$#z8oc>_p9qts&iH9pv zhYKk=nZ8*4n}y0tmSCsCj!Xq`DL{v`g2Dz1YfR%ZSacGb#`M8Z2+0fvqd|lQ11Pyf z_#qZTNoOGq8<~UYK#YjM1Y)N!XC@Il6n={aJ`C@SFRJUs=lD_r23SOJ)e3&_e+iu_ zHXD?64~>V*<5Q{dl!E1^!;Ea;X!>Hf6x&wOB17o5>tJ+1RT=ZJK_P~YDEfCfi^~l_ z^>c(q0V4hmSBwgr^+B(&Iv?^8x8zBqLO*;Uj^NMhfOUl64Jvkptze2DE-LvUOh1Dk zR^oghw>JEa;&p3r<)9(S4v+8yf43DD??LHOP(}#MflpZjnfQ>|&XD9t=!`iO+$Bw9 zH@sjZAnp!C=;NRT*olH`ztJ#Ii76D4D2UHPIUkTe4N47;n+TEi9ZRSCjk+ERLAAAIoYaaK#h`OahjM#ff?lm`55? zab!+~MsXAwgy~g?Rt5yyf{_c17|3BxM~97vDdIZ(-#Ww!`K?fej=O*2@z8MK&=7_P z!VyIiMY6u2Q={W1Zapvy94&2i=efU%?n*WFqq8vg3g*gwh=s#`AF~e{kVpEQbzl8dyh&e+zwqyo{A@6e0hZSyB)@P4>i+?=VHY-0`KyL@RWJ!2k#ops+#>UXq58 zpMEYAr;A;GfrmE+Tq%MS^8W?}{`T|t@E`cke=hz{MO8)R-}+zwmp+mtZKYqs|NbZN z@4p0mzfmCm)~bhRe&vxd3mc5BL%z3yk`b^N7E9;@e?;W##HxJY;X+u25{jpwKnVq- z#zs^gu6zLP3w*y&GD$AxafSQ_v4SQ*a>P_6f*5{*n#vEiG=isvbxqxgx~62TuBk}j zTF`cY$#NrIB3TClqrOD01~%(Y!vS#%rl35vCxIx0GZ9Jhh1Fxg{7?xuO+vUHka^q> z`TL-!f8kofaCZ&~`h{>{Ic#?p*aIqsLWkax04I3S0~7~VXmy9g+7DKNfO0S!59LEY z;fa_GNv3>E!6Y(E!Yz^T1;iq^p%NJfjM&ieCWu5jxO0dn1;y*bLq-H$A?AiBqCie_ zY!(hrQ9FX4iRaN8pw;6D!poRM+#ntw1CBS$e-eeOXADVJBs&jp0J|sxWd`U8YKjz5 z;c&J{wJu@U3`tU5O-n~uZIesHTq1@Elg}~OgsB=rROqA!l><;VP=Zl=Kfx`oH;s*j z#uMFf$*2+=wnPlf<4%ciy~CWb2n8~@K7O#^!9eYUk|&Fgxn*L>DDlLd5WS%wGI5g7 ze_|)9D-@(|z$dDvt|G{XfaO7;@i4DIDC{s{x;s%N^uSkDv8rKe>T2=>wC-GiUn@%K zN``8j0js-219WP{^&vtAa0C0lZ2rIZ`MdmI`9Ej>TcW9=`EUNu|4Sdp|CRsT{`cPj z00V4=e*+Et9Q*V4&;f256E%TB0SNh$e+b$nbA1S5(F|j}h;s|0EMSNQ@>fv+{R0t} zf&JT9RMms|O~|3@-`F?cHK_09;u%M9jXjgkUHE^StETC7IgNQe7 z=7X6y!Ft$QTH1kQ@t

g>a=3WCV4R95!IW-%$ncerKLkuaA>v(w>j6Y6oc%{dn!nBe|8w@= zKjHuX;{Si*gZTgde~$h4U;h6u|Noc&|I7dX<^TVG$p2OTbMb!~s;a-K|ERX)U;h6O zd?5c<(fED+$DbStWCY&TKlxP4A~hCrLKhZ=hXxWucteP?Ca5?G;UF#gr6Q&U!!%#W z{6>&E^n(#zs}0aJZ@w1=&xxZ$5+u!m6&zRN<=~;K3tn^Ge|(LIJC>llIdZ6l@z?$& zn12r?off&QKUKMee2a?NSzsIqW4O8-r> z>TlvOe#Ta&EWQ`XkxciYaDLfHYyd1eX$3g|y$pV)QRt+l6aX=p?i8@@zso4|(`nei zLLvPFyh}u)e*=jlLb$+iD41~;CXu1@yaR-12$~KdV-d~130?HKg0%a{iJQ%W>12rf z0Yr%bY+BV0~Vln&i>VTn8!56>tb z1I$303xFYD052y;_VCf)kPlsBM2=A((ofZY;$PBhf6le`HZu^CNI}wx%o3|I{D`!@ zZQH)Ay{>actBiMwIpcsA6fCcp>t9nWS0kfXEkKw79sWk6iVm>Ali@k+c$aTx(mMwn zWq6Nj*{wm5Y{+w9K!pK{;)`QM7h{Wks$xat?&17qR_^7-y3WcUP(%t1Wj_)n8@K{o z(Q(SEf0Sc>6}W>E=sw+g5Xs5VFR&z`+e?SzHQn(P-8XA# zrPUEIEzsdG+Mseh2o(jl7o4e=L)}xw%%Wcbe|PD_$D;jW6qFD(6BNsVkvP~ohv(<> z_#A29#6=|a_;QemuHuuLEK==O4j5dP;uc2*5jt>iyKXN&5xsax6cL5UOkB>Iw23nX z+_(@y7SH!IV^S4et#eY41Xju{{96fo2)ASa+Ucl~^`Si|hAV;pAx; zf8Rz-b{MQYOsSK_oUdS#cQvN(1rgOuFMS)2^{6e=7 zHdi^23a~E1B&ztaLte`=z9ZYcQmqtd8VBjM<#6N(nZ?MzGH2yrtEjsbb4O8Gz=Occ zgNc#Jl=vYU4`O02N{xTklTe72<6*MDf8Tnv+NhXbC@T%smk6kqPYXLpp?r{6W|z~*rw8*ru!`Ct!JHl3f$q6^s-_kD-yyv8N^zo%$5#+e~MHT zH0neiOfY=z4Lm=lNq}?=ZDw$JIlHSawityuObC);2xPs`!Y-m-Er+OM-@}Ugq!68f zE53=62jm$pp=9zza}nI*M1i(4ze}PGX%>l7D`amuE>KaomzgdpI9Rxz7rtb~&gexr zk7DJ&_}%YF-;i1MgTgJ%6)0L>e}!jW9KX;cUjp%=P6tQplJGCgoX8dqyavL;U~J^q zvF0h~3r_LuvUMtkB{Z!j)2jTkI!U64B+j*$|A|Dh%DS&kRwC6ewfMI;{S?J~(TV_e>`lM1YKT!mK4f9Z;>kJVkz zn|DI@0CT!YH>LUVHACkuYkGS*64oGQGRkO~Gc?luK^z-jHzqH|h>RVrShS>A4^UKG z1~O=mt}l`SIi%+-&ElvX`r-n=_h~hn&W; zqZd!hQD{ZUQ-Go6JY4vCe}nylz-&g@)w0#+qE3i*@k%B!6x|Zp(-|}Ca{L8{&8>c; zELk{rnZgN}++HCktCTs49Iym7Kq2ezTNcn=f9_=eH|o`T>&w-DHF|68|K_*+->>oW zP*k#=dh5;zz$GVtx%&SO+#oA}0Ba1{qGh@!9`LM$)M72xR6YLQQZ0=;j2TrvLt)gsRHz3i$x}Ui8#6 zN)cwIl7HU&Il(=#WNEaDLISucnT_^4d${6wwhC%t$Yg13V0m}9Xn9A0eZJoO`| z?lZPyYJ%c|D)ZrlRczGRfvGo5lZ*~z*x*@A=m{nQ=RmH?!b#i%^VuluX>pS)AGYZ_9AX-07q+fo@O2J2?b9LI`u?iATz?XYKc_ z#lO*(PYAc171i33L1>DlLL?_~w&N?jcNX#Rf^fKIzY)^b93O=@xley$RsW$D*I}~5 zLOHn@!{+?pUq@>A#`%gMx0+loFd!AXnG6>&iwg-XRq@XdLyB8ww)}%taeqlD0M1F5+=AkuTLktBeJ_F;zG|SHO632v1~JD~#$v zHi^gM>;bQ%w}<;LU;af^xpx-$kh>#V4sf*xe?*^$`wngMPnAD3m6s0!DQ`{C@`fY%8LaNv?Rl@SU;>y;YQISLvNg2#e;xk7P{*^4THf>f2yMoyW_&DJ+a#el&>Xj3#}^)-uyWy$1asm zDn;TsOaWibA6zDxtSR=x;zofbWT}yUAyPm^kgqfM{`3WCF6_TwCe!8hmf?-*dq8x| zfXz5|wP>tV9j7o4GS!{U6R1l6Sd}C~Rs)N}J_Z!yj$=EAJ!6^^f*k-YxCqq;e+SES zo`|&0I7OoGLieH)FLO+@MM1ad$#(cAZpw9i7>gQdB`J6-3PpB*ec0)@{`K+4y@NaI zo7<7cw~>SclvC~#IK7?y1K=`cZ&-On<9@GbZ0`ksT2k?KO6NRgp4`!7^h$1v+C{1V z-tN8n@9l1Dz~}VjfHK_RIznQ+e`SVQ;L32w@S;&e`9g19L-@#_cKhW|?cHxSdor7D zE*Sy8!)*5MH=8}oCU4{|ve}gmaJlDh|6Ve_-Dfb7LzD z$GNSL**!}!zkg8EjB#RX?NL@S$~KCxm=r^4?&vgph+G+N!r(Gp#GdYVU+I1!tW6hD zzi0{FfzUt|#yklC>KKSa0>>+sBa@5V2P9fZ3h;x9C5PH@>B>siB1y;?_%;SzODa*W zY#O;;6uf;}CCmmf^Ff76f6CEto`Zwp&qQyhzM#lmwcvZAJURq0rDS88tfuEcIi$a? zV&*}(6%-wqIfNzEX95g~0tUU%;QJ@x{2eoB=d^;Dz-3?@!Fl?753IBZMYDVy*UoEN zEzsCjY+uBoslWR{SAtX_OczG`1Xm=_hc~u4odHE5hA}9{E#`OfgC&+`BAzNpwEMq zEg)*@RS8P8R9T=VvwN8Pu=!=x$8e3jN{ z6t3&%Yp5BxIbzJ1B z$kpVNER0It_d+gt`B&|Bn9f70TCx=@c#!SoLu_tyml%gd=iKexN#~r27~PSFw{!N) z#Bf>yb;P^(f4Fc<6x6`vP)c@D<^r-;lhere;2P0Hs^x?0+-Gnd5_huQ-K+p>*UH;9 z@6)ciZ88^5d8*)n=W8$Q`*-J6l@fZQa)Xn^i%vO@3txRV1H(okav1Kjd^K{`L)u3o zqH=%)dSMWf1G-H*#{bAls)+?Q@G#2qaoo`|)p3Yje`>_!Zcf~M_?jkjM!7U7jr$NF z)Q}1bsGt>(?#^zmJp6iLc=wqmv1x<1vEva1ki6Ql8uy{}B?h^gNcQu2^uN35|BY(n z3*x_ZI_vl!zSVzxjUUnf8#|5L2ymZC|G$^AU&t+4=lb`^aJSUmH3w~f7)J5r<|G|0 zM7xS}e@C6ENOpb6O>PlY(k))T7>U>@}9~LB@mi3oBDwgXRn>rym&!53f75IU{Yo^Hm|(XqSM|Wd`KrDSa63y) zaDM%nGq|AGnS6=j%c5owM?Tw{AN2Nc|JkcUApJ7hppCGQrC>Jo!lAr7GzAmdd^xKF zrb`HO5yc`39$JoovlmSh;G1)D4Z8V;$n&i^>Jx=6Rx>LQiBLJpY-SvS3>*3TSqhC}gVJ-H86Y zZ6u%aZ%btn%OmpAG@0jY!X8#vwRTY{(S1ChRMrp5l-9!VRiP6LYo782IQ&IsbR#Ax zB$_| z)$eK!a+sloc|zbi0!anj?P5S{X#!4`vzd9@tRnt{e{1(t}laKZX?)a7}~9hAd7z(0xai6Tt}e+q_@YL$yFDfp%G`GYw zK~o-6_7uf5)i|%Re;ct81Me<~^swD;8>WFwO!b<|mInZbMzV0lJIhS2<~=Tjmbok} z)Qc~@X5PV1xtc^T6)M(3lF-DYEM$^_OQ2xgFw=UG;}(bGGV=LqS*EL6f6|z&s6ar$ zbwOaJ?y~U9vmLks46;nC-UTrJTi0(~b>r_`j6l0=V4H9?9_L;&Y%1Kf3J1_U2vGaOU9t(h^K?) z{QM4ye=AhX1>a{Nm`$A_=Q zwm5tC@}*fgTYkv%kXiD~HRqo+bEjOn=hBQAhk+n>#A8UzbF~??SAT!|Ym(8bO-rRn zi{u;|n+sXFRFDV?lXDoj_>{9-8hfq!Y!V!woZgnLcRl}KlK;K4j{l+2{dWGp!Vk|s z3E;o#`TtlU*!%1Qe{N}(PhFL^HO{AzIJ%hOa=OecQFfUboQ8%O5izuI4^>Zi|K)sM zCDG!dwno<6a)A^Rkl!bAiboo4egcx62p=mQmU&=h!~wk-ildW&+`^_pLz#+!!pd_? zm&(;)v}WMh2)T+#YnEWBY&xzAqo%WdVH9MvA(9c?9*&;Le}zaE&@DlqNo*_`gQ$$^ zOY<%oE%uUs!W+t>_^UL?(&c=JLTKmsbbcU*o)SV~H_cE%7py{Nf4N9G6XjqO$(v}2 z?8q3&S`KSPgIY>sYFHXO_Nq$3BC#*LQA;I{VKSGplrv2Tjc{&3{n7wAyl~=1bQ~g{ z9FL0+$*Trre~toLfr4;|CLazj;uUUB#(80^6<|wTE}zR+evzij9Hr-93P`Yfsi-b}Q3Jtq%!0GZpCi%8ztTmM#e~85K_%a@o$u6Fr%PWvaqsi1| zU$8pOhVvzJs;|UENKqcCtfR083pwpfbsn!&B>7S%XNrREPafvL<0MRG>v%&rkm%(_q`@dPOf5H2| z-CM)|f6)Af|N1q4(7+HBP_*tM~e=lUP$y}u7J__GCS?nHul}-W7A%8qw z##yAuTl{L~9tM8N?OMu==}?4RJl>h$4qVUy%OpQsN&}EYnZ^?_c!Ly(?~oJm-FGZ^ zrI{pm^5f^~DwAu1&bdl(IK6;S)(hc(^JL&pm*)mevdt2TE2Z?HXY0G~P{zN^r0>VC zf9Vu^R$wFCH_%;_X2>7m6=eS5b}e}2#=bIIjy0aHj8!>ew*rTfYfiifFO|tUW|H1p zM@Yusz2df6`Ca%oMvDD!pUQ~F>A4Mx5#V_ek7T<>1tYXmuNbk%qm218%s{;mH47kR z>Ojotojfsmcs{qpzjEfzrzx~l*{&{be{Pp^5wurPa@~pZ6-`B4v;3|4TL%~DZ(g9r z9318Lsw=f2xkWjeZC}|-|*+I_rHAam%9HO?e;qR|C|5sYy9y3e{a_R z!`%NXj)4;~w=P7C0;g#cA59tBZ5E%an4(%oEGys44!2 zFQE&|MN72jV%Wq}NA7J{k}PYq+))EsTq~LO6xxh8yK@&VBZ9ZhQcZ1Exnq?DX0jzy z7&-j2u_DtPb$N&uSVFSG`BZNOf6i^ue1WWORXb+pYq+hDpsl^gZ3G9wz8Ln;;V~V~ zW_xZi*QKrK8d=+R*MsLDzcqY_;NO-|S+EAG>d>^-=UeSO2i*m4f!cmyp4)6O4*|&r z>AZBjkOjr;_^rLT+3+tm&q+=Tu5a3{V0?X$YRg(Eus*VBG%EBPN6}=}_ynOei9-GH{Fs@XU#U z1sO@JNW_78tIT*bj`KY+Dmxz0z-5YLGsxKAQ#6<0t;WABZF3x^T z01}+#CV^fCG(z;6BM!9li(+kZ257wvr>;*F-neco{mwBB`wmpLf9FPhx6=gAEoc^o z$xI!eCJkB4?~15oA6cE#6D|Voj4K*HuJ{_aT%JbinLe776~tG@)Az z)C(F65^D_=y-1^omP1BO<3%W!VP24EXgFD3f-0gn(9#YVe{|jIFdZ|_luR%rMds6M zh^4KHTIigugzW^Yfe2&(M8<2n$bl>g{Rhm>xn`tLqae4vrmR~+pysF!l7)i0Uxd?X zJkAO%@dgK_q2xf{7DkuJu%HL!wxbUb8}9munvJ~f&B4)|Jzr4+@xZQ<6of414c7~` zQ0D5gBjH4rf9are@8F1m_H)shW|b8Wq#DUGOz0;bcU)bXiZl2zKi|V{A6b(nH~KsV zb5k*?vZ%BWy#InOa&NH~b0Z&6{qPx*57c{L>7CFuBUdzJbqKaFPUqS6Y-iXOg^)p! zPD7ppx!0N^8vApjE`KgG_J9AqTPZMjsQLRjqK$WxfB$VU0l%F5Z*^PW@_&A#pNBzv zr}^7R|58HG8q4ukj!>Q;xZ)UGcX#|4YOeH5PGbx@7ee(~q%6<)`(UiVSF#x*Y|*!f zJZDkonRz#Sx13q#2ZLn@=M~HecoR{<<@|}h{BUlWghaq&ev-r1B_?v!G0_ka*_EwT zcma-Ce}slYX;NYga2?F85=+ap(iz{BgMumcus2hQjS)PE!uh)gOdU}$v~um6|CECN z%=;UGw3eL9;*Pz6J5I$4jbiv5KU^(XSWWAXxDrJ~HQLxjgw_s`{(ecmP93^V^|?7a zyWM_Cu$t7>w>`)Wwg=x#nc~k~<^Pw=|E#yyf8~FC)BnH559I$n(my}z1+Yfue=H09 z6`@zxiS!~c4{E<5;xzZ0i4^qYBvmM=z~#(yM|H5kdCKuYSz~+hvec(&gH35MNVE&S zlcVKJ9JB1p=T2A=E)pJ@c{oy>R27a|JCjj1Bg?=NAQ6<#1K@lzcPY7YFD=tS6op8i zf6(hg;*rYT6>6%4p=5f&?43@P0?BRYGU_zVK~wKMuB?`59BU*kaOXXmPHyP&gSrWZ4`>Eggi#1wqJkZ?d-vuG~(05N{-Wo z%bqbhz9E5M^rD>-Dm_XV`y1Q@@gz*ff3C? zA3vF15+)NfWD23JJp5Ql%FKr;%#y`}$7dM;RzjBcu?v|=ke{KIib2zTgFVlc+Prb(0qkH_H+f2+fR%Om&R z*q~uVIYC{Gn9kc;>1?$SUiCsZMAtM@!^uoG8wfj9r6JODTrK<>mhS`8f>_=s??|{R z9OWF0H3*kZ)m=OoFXO_XK+ZRyG6NXM!WhKl&yWxVdO{^3q~3se*g!|RG?W{ViwaWK(*-rSeDCj8Pif! zqdZ`{NM{(f8^I*Z6pq@Vk-FWLaGPSgEVR-d>t@53B?Bz?h;DjYl!Lv}^zHa)Sf2Pl=w4H+$07~^` zGA9fvRXb4N26Gn6xSAmc?{jkW;>FwjsbQ6cJsTl+j zu9ZnbmWdlPx0De?)$Sy7ub*haohyUGZcGuwlHNMsVe2t%nL1(AYey{$we?Lw|hCh{qAg292^})L( zgOydl6`%i`D>>Mw7wKe{t$`CDcoFr)Pne_BrC>i+V4Y20f0 z1x}1V!v2^*e>VKveR{YRoAy2khYA#^eY}lXv8f92rP5c(4YVNHH!75*L-`B2$MZi- z!kYmY>NtuhDlz;iREt&g7XKjknPVAT7>OR*zp|p#*p;MKz(TjjG^PcD6F{+%iz1$h zAV2uw*?yI!mL3z91d-u*jU#Y+0R|&{};r6e-p94M*cS&-{k*S_<{T<{M&ov zeS_-;8w9bT-q4(I0PN+l7`)LB+!J!Izz5+G72tYBD<9;QZzqDbaS#OAYib{JZnQV z44TjZe|TB|HAg@#)v_3h%+5hxKbSCv3KvJMNOSr&9`@?HHGHB7cj@8hzx+l2rQrtW zA$S71VukFaGu(G7` zF_6&9V>FBf`W?g$)3hYCIdwn`#uUPO8)<<(W@L97U8;Dv3|2a&^LHeQBUYhUJ4^V* ze^8J_^aM8#(F} z%lwLzL?rkpVzaz_b70MW6oHL|MLfpXBduk$n6kJPs{;#}BSYOQEaG84KPPVA`UfDB zM9W)PJ=$)aL^$^NQ}>i*qS+P$W@hw+fNM5ask?V z^pX=x8Zc>~-a7vlS`!SLLafZQfBc}&^->ApNYOC!9==jJYL4Gx`Y^vc<|#PI<}_{9e`P3gQ|z-_-!Sp-Atx8xH`N^gAZ9_#hg$!(lY8zx-v?oc}QY-*)0CSv*;0vwt>Vq;&=T z<`LBx_OYSvW<|a#3U?IZz$eRZw@UtKOPHa7*-!IE{6h+ zhldFsvNPhHqoYz(4dJaHD)ghXPR~{qAP-oQCv)4z3*T>h=6n&3j z7GRm7cDvSaqwWW94``pRo5P%@I7uD<{nbWEy)=>VkfrjhGmOS8e+0b&PGcv$kih-qWS)Fq_J~Bc@g!9Kww#~9S zPqRW$knAaYf5GehlYK*?gla3w=5m4^h5hJeh?XdxDOsU>M9BqRCYy2wlMS0K^Q6mU zdYKry=F8_UUEJjj%r%1o$qd?Vf3&c|CA-`za#)b=fspK8Nks&)%W|MP6rXu=`OmZI zWheRb)8@svUB>BO@!G##akH0<66Kyj1@F~ zpoOs*C_S2g+-lPTShMHUWOIaiUn*v~my>yFJe?MLPZn7`9@Xqs`iX$d&m5AXSyGFO zs^|2}2kP4Ci9ZSq^2xb9f;YqAQjQq+8qFCfaAs&{sX|K8=%Af$r3?dxH8jhYgBnjx z4JdzsfAoSue1XtxGR#k!IVqbDq(<7(nzSgEk4X++svx&)G`*q1UB5Gy*NJQkw)GJ}ahWJK2G!;MXj zoUFO>3iN$MpFx>WfJ@;ZQTCnyAuAEVMuSmKe}yK7R@6)$;TYwAv(WaUD4LG~-1y8t zVH8Nr1%&6Bs$uz~EWjjd0J0Z|IQn~Ohxs7SZF;WB3;3>#hEXm|xpQS&=9S=Y@+-%{ zgKL-6Jz>V!d|!%YLCc~PF-c6b8ot85UQRZStx!XK>g&2n3#QCvh_V^#ffhNUVV4XD0|5I+H7Nfs z&-X0PO`aHkI9VxYp=@AVcdDOm7V?}`t8-P=MRX`m9hrMFrGs}|$;?~!3JgA*&sy(1 zw4QuC?}@6Z0AHqT6!S`?K%TUlk~oFeCXnuB--?xj$5 z^bkn@icIg~VH)rPo~om{N{_b~f9W9y0A(O+xL?3{vK-_JCv?7F8bO2l}_#i4yf5}7xR-lQ_ zHj{Z<&WgE+%It|HBh#lUnYK6vVaVN*0QYEk0T*tqblha7kvSZWuLz+KB50c~k^kw~ z(a($OtnzA;WWjCN8??v0qDBwKYTTLG&2(5Rcv$u*segR-6blrGprph!+fH2OrAyoo zw#IO+Sj^>S5Gz;`+5_Z+f10{BzuHONWPmIU`c18LH0h5q>a1abj=;^+Vr~HNUWwK9 zw9a%Nt6nar9JWlw1zlvwE?_zLte1}#JY4L==ZTiK>oca(lg0rF2@}UA5l+M|TKJ$Q z4M`f%X431x$Ymcq2O!n{d>-BuMw-w7L^Y)`tJxK$HDPAU@h-Mwe}y0(9r6HrK*8Un^b~fq(pg{y19~L6uhqMG|o5}`Qy;E%F zd)-b2(f@bUGz?}mLFg$Q8%}Xe6drmMB4%H(Lc_x7aZdd%f>?AEd@Q7pOOAh-j2>lH z_i5ZgTY-aEQ}YkbOqhSQ;7>~yarnQ=#($*_>X;@<-G?Ha zsYZ_#-u&hfvcLy~kkd8vlzU7>FCw&Y{XZ-_rC>f_(SNkzt)h+rOuO0cAaA9{ViIeA$Lq9uzsWV0mK z;T$TQ7Fgme)dEY(xPL@mBoYR|KOxVI5crOi-I6*T zt)Js3x#BfcE<}6buM$!jZ3T9fDA~v&W(AcP=O7t&SC@=#e+G&w(GYx{sKZYHG&*ie z_(F<7QM+c1WS~&ra2Yu}0Rg6%{)G~sl3yIsGEc4g z6rV4KH+E9sdl;w8Co}6|w#+Wb*N|myil{{yD8*ImbOh-k$9WH2N>--MkXdRsCdkj0 zb7w#(BXl0}&GbsA4Z2(q5mpIyOQ=Kn4Bnc*LXm4RJb!DxD22QmC+di*+>U3tOc)u) zDppd>$g?A_%Yh>=84@5$&1p=!3+hrOBXp7`sk*w^5M_Dt-(Cdl9U z%JR7enPuDH_guuAs->$cb2s6-9*pD|$)r43vv=G;WU*v70ORkw)lyUQvMd*f#xm|m z*CCi>kQW!u+)AU+)c*SB5-v=fuTcq(+6u7OJb$HT&g1h0xG`dMK{#)_*r1hJIR*qC z+yZyPdUAD-5ZH{deJcXmlzsV#B-f zEDPqvvuw=R>bm1ukmvV112$yZ2bV?~HhuD>npOIBe2dN(Q6ned{n5HvwP3GeV{~*N zK7WwSlt9dQHm)MS19LvBxnCTW`DxJcBdEO}UM;U)E;?6~D{9Z96>uLXdaxY;0r~y7 zRmZ7u$W|OvV?ap_wwx(5IUEzD7rsQU_Lavq&&es5jyX-T;__h(=c(Oq@Px2}*yknZ z^~N@LV@u?A-0nJiav`O2*hP6B53jU~kbmYjk&E&cW0a4x09*6Z|MB;KKg#@xC?XYM zzrA|-N{p!%IGOc;JK_PwK8~6J&hL3*UiiU?{_4ET zwqG^dxl{+oDaj|qOx{_Tu_&Gx-b!Xt%p5T3>pl*!-|UC^Nk@u(Oa8=kVN_{}_kY&t zC(8&AE|$}GZ$=}Lqo?p%oS>HPUiFB!+B=H2yVGmeUG;#HN1cmEjqsF8xJBG7vsAo?CvHKw}&NGg)&h z6x!B8_V6QTi)e4p{`wP3o(K%)5}}>k)^h!cXfAXu%3%{J^)iKrCj%tc6*E^t#Vxz_ zVDM*%VAURyiDp!-4EIVIU@bjrWchn@LN-I21dhE%)O>wNzBsegLC2`qF@LjNp3R5) zABe)(e<3x5SFa_-?}?ht${1!xq`@ehR~#WkC>rIjvC+q6PQ|89k5Utu6}R%Un7U>} zJjCQ$Fpi;hU%bW^nh$8;1=5MKq!v?#CWy;nPTV@IksJ)xU_nux3#Z_MQ5rR^m{p%y zQoY#}Wq20d2TbY5H8JEJ!GA35dHN2hCR)TnSw27(UbqNrYY~j~xQw)FX8f*@?Cv%( z!>1|Bi1lHM;Fz?apHp>yWnFjvJC&WTYFbsSEY?yQrq!!TNR6HoTz2mQswPvuBi{JS zDAZVh25ZkzNua@1Osrx;aCmsKLQf_tl(i_uw1BCdY#({6shakaA%B_V5kBv#l+Ij2 zBgBgI_#}9mEN~21-j{jp2k!A2sqT1ixT(Jnv!m&#VzR~`S%C12SgHttC`Sybj5?B- z@r=mB73nv<{_*J9(Y}qAtHV{)+#rina;r#}$;g%bK_Z3`wr6vEtj+ z&OEZelW8jeMKzFpO=D+jSp_i(#VemfRZx!rQGyVxh!RGS41W?Ruvigi>!IUi1UEBN z9W^9n^1+8Te=j=o>>`vcXyHXg!b((Iwt%01A%x7ggscC#e(vi3ZGAER$40Z$>U_)p z`i*|z|80F9`p4e{@5Nr~17OYuG>4@8KC>(tjh6W!d7h9VB6yw*mJ44yAM76-o*;6K zIH9~BZmHn$$$zWk)5GB8G-%elooahKFSO4w)qU^gl{;Q8+>0iG$6>Ljp^KHC*XzW? zXpy;If%_&Js%PnhRurGU`5ty7MRv|oYjw5D>Ax+*u~z<40SO*Mp8wU=U9gY$2FJ@s(TmsA_i@`zTR9Ve7&?cpH zuiPze6n|$oObic*CQ;nGn#zWGuMiB6g}rjgYl_uk&PyME;4enwG(_O}Xyoz({pNlD z_NCIG7|x=A4C%$qWa^QzEq(n(zFX$h{D@e@yu<_y;n>1do8$ClTB0PDs{c;B!61Y2)mgQeqwDq#kX`}Z_Ghy_C*)W zQ{=v9trWdiVHDA)aC_C&Od8)j30|k1ZfvheLl%K6R=VX-s}aaLT$ufC1iT z{x+;jv)*X09ExN0)@kykReRa7ST|11Z-e~M4NU`;9tGG$)QeTgo5Rqal{2#TT?L1{ z1%Jgs>D-YkEc`Oi(eAQDV)vE%Tbd!7x2_Zbz~h^hzJ7jn%xa~ILNH7(4Z7T&A_Z#X zR+ovR>&~)WVPa&SuMbEB04N=Y7qx%<{l7cdf`w}BNRaT0K8(Eq_WpSTr=%@N{x^&9 zan|M74p{o^o>eeK>(FM?*Tv{vrEIwAOn(}ATr%W}h==yl?W=uebMLA#2 zW}kdW7jY4?gunk=I#7x1P+*3O_{Uu8s|qkUnUVVXq94XJY(vxN@F?F-hc62 zz-=gqwY5uWDD(7oXC7-cSlrBFmof^!lxrXYLN7y_T2`6lguK?+)SL_i*aS$o^g=Ft zpP}7MZ}=LGwz=Hh{Pv8eDqoq{=bEykWfmHGW}cB$KzAcv2wd`s`Q!;Cf#%G&BZ|io zFm_f{=1!;K&ajZE=2nrC2hJ7me}6wxCM-{LO~=Gu?lp+gTOQ0>o-=AIS|qs2Pr-rw z1rrN8=wD?<2nuI{_a|3P2*cTxIfcpCxUH|Ia+#IS)Lbqtl4!0o`n3+x%Hn*nqeBQ# zWPcHR2S-H=kSs?r?Z$v9eCWmt#^#CYei zuW*=CH^{T=?W0*?&5+Ttg_QnDi;De;1m9moW7Zsm<7HQ-kqkga?Iu zR=}v02stIk12mNHc@V{y4}Z$Hjtf!^V&07@A}f)+fC-x~V@%dnm>2?Zkrh>?M65n7 zAAq))RMCkNyXaJwXc!9UQ~EuBTTT>c#zlK&KCi;_)P>Vvs61L|iK%?&Y%h2&bCX>- zDqO&rxTvAw)53$JLB5nYhqa*exzI!=>ek|gT5xjNF56S7?_89~=6_2`EuZcA6v&tW z`i*TkCs#K?4mBATRU9TTp;?u zmX|0-vh9*+so5xU&s%l)JUq9|7+IA(E5*crRw|+ptyF#;yZQtRRLcS&FMR@~Z92^h zg_(Ejbrq$@4aMkiSbs+sdBwLVL{RvOj#7s<=>VCSPYyhItw%wmBlq^gvT^R+CtHRO zW0E60KSzr6B3Fq-Td|~YRgIa9kE%{1p``a1$uC<48X8T5l^$I3tdl>~WL?g9@RJiS z1>Zef^l6$$b}JTDQexq~;K5V=m3lDMu;GH{n5){L<`jrLXMdDT!OOLU;yVF+8?&n= zBMW1}(aKeXEHcYO;m09Rnoh$xpu47)LR^A;PYa0$*_e9(Yq1V!yW$zUX_zoP6p8Z1 z%6>&y4H~bf~%{(6v5=CIprz<^E61JL`1CuuR&vYIFoHZ z2?Hd+p(-9&9@x2s9T29m7;@vr$}dR(eXM@+iIb< zjRMF0U7r4@%5*Bq4bb(dUXDUzw0joEvlAIQFaN0=)_>;-$YnQvb+5%&=XK?Jn2_yZ zK76{7XF7t)P5HqWS=40OlSB)QeW{Md7jcox zT0?Nj!ae(GUuC|5^?ruAY3sP&Y9u*|QUAxGh4b^JBdB;!Cc);f@3i}>afL+p8;>5- z+p(Re^?#?tJ&CWi*lY7Qw)>sp2cJ#CYizlfvgMc@p~`6XKSZSDZvOv%wejWnf12R> z{+9p!+x$EX`a6x!!~b(P|Nkaj%8(|p1NjsNXG?Yk5lr<8$|gMV7eKqhWpTV=wSq+*y@Dd~_!$8I>&8RCbci20EbN)I{bv?SEI% zA`P7?VZK~S-;^%j-_k)v9t03%Po>@wqtIi# zztm*d3mWK|1DddZS`c6!x^icx^MA$+0xUG}l<1YuYdAbEC+sC za|pMfFk3oYMFI|4V{e})84zdESp(VV=1n$TpD7S5GIb3PSSxyuMP{Po%nlc zYL3|Fa`U*904?$_xe$*HR%2QKBzU6kA5?#k2jIfPD<~ed+Zi6|k1L~$j4k9pyWojs zMevflF*dP0QzIxOu(BZDZGUzbT10kXJ}RajCW~SL#(*xALV*TLaD0A3MulkA#TmSr zD!ZDxua6eayY3&UxJyZW=QBMZnw3&hcQZp>1_R`ss$!;VnCnM%bJB?jDmo2rYMQ0! zQLDk2WHN~(+^#aN?|6lN$INoS9~^feKfR=*fGE>|f-EIF^PxF@&wo~dcw(9^syFeX zYW?~$y9(Vr{xMfu>PBe^{6z>5nK2PG3vetgEaz3T%cBtbNR*!e1m_sI(Qx?>Q+3Zr zRb|ctHXxnN#$3Un%)J*8JpqMa%c)14V5#U2C(qQ}6LEuI<|1rvz<(~;ESXl+B0F+GtCMhu zBCaGD&O>Zrl0-sqy3a)pQZW)ZN0nBj1PBgz9=h=ic{gHt4lm?>27beRolbYt|8}d5 zFP8sV@3zErkP$(P`Zklz~0Ah>a{=F-_>M(|e}d1sofs-DMh zgNN-N3`=)aJqK~canaDoNqm~n(n@O|FC4@2 zY+J8%dw`oKSroj2C~qp@ByU-rs(j3H66Ybj+d4GNf0Ue0+{eiJx`o*Dw;t1ivBzDY zpX!ii-D#$m%;xW@lg?r8g*&tBk@+^Pw@h2J@;6F6x)EY|YH)fLT!4A%BX-y_3_u=jfwFr@Mzz z;-E{>sQS+11yI{N?+5F?CL11Bj=7G%2>te-?JLSKh(sq%(lV6~NILO#mW z8N6^MVJ;!k7KDf)X7pL2RWZ*lDYDX0s`wSOEH+K!=Zn@&*ir=n-vt&8%M~PayMNiV zF8SB>oIS`HwH{@Ki8MjQo5$@I)I_*M$yu1^&bXZLQ%xA9WOtc}JLXLBJao3x+}~Bg zh4VpZjtCUoL*1t-8hTH*PbOT1=fUI4X020eZJUY3RLVySyJoyp5XHuWfwJZkr%VNA z&1FeAYh{rS-8=xQ-@t24d`Zojg@1It&GYxu1=$MUbG}B&HR%lp%X9T`sT)0``@G_; z;D8ilnI^+wna4K{_Mya?Wf_%RBfX3vIGA9_UQTs)zxi_o4)rNFWG#5M^pMMQAMnG! zFoG+)=Fy3kfn?i$nG9gBkVxb56YYt{w!DMKkiFpOV7PG@Rf6U=B}(zA;(zZ(^~KWb zrf*&nI)FQ@8OrBib*WGw?9>%Plc)sHlty-LXSRY#9o+CMMYp2V6dr}c;c~JZ zJDd|Pfa1&Q8A#Q>9V{UZWZIl?XWf)^3HCM7+Le;v{;yu z^YkcOlYTfHF{U>Ye}Xr{BP@ugb(-nxhQzFXBl#&D<%qyq!xvanpK{ ziIX!dZvi6w93UwfE^j!oOFC8{TQTVW`MUjQPcxLmJ+u(eM1N{R41{GdQW(v&q|Zq> zo3YXp`v}-zpfUvpht>VSkEOWW%u>O`zBvA&Vr9bep9(Pp!zIey8`fE)uf4HC%dydV zZ565TfN~p>;*@2xN15HOo;5f3^$(4=YRlt+SkPfnD2XC&&l5lAbjQyepf@2+e9vjF z>+s!H51G;6`hNyeap#{q-Tw`wfP6v!f4jFP|D*Bk{{IR;4}(U1=kxIY-0lAVtQY>b z*ub~gz_-}Ix7fh9*ub~gz_-}Ix7fh9*ub~gz_-}Ix7fh9*uY(X?rQ%xn_mq7vD0jJ z*ZBYI-|YXd@I(8*+59{Nz;n5&4sl>I%N7; zp?g7{+Irh2nU2b=3;6&eQboo%u+0JKj!KMBYkoXlmyMMrDCr`(^jw(ScB@0zIwZFj z?EBP(K}JBDD`UmGCx=st+0`t6sP{QC2nR5xh1yA8I)1LfP z0)JdB_+AVMjWjLNCF+L5`KHs0w>m*a%DyBt7po#JxC~U4{HGjwq z7*9SaceDifu7C_g=GpO z8#q7GV8XQcIsc>1$$402^4a4XSxrLc9as~>$%JGEX%vs2IAO55*R3c;K46&6ZgTJ( z6r7}4at)6R2tZ^q038GJT7u6xc7G9Fg^D>ALSyO5EB^*J3tvWNBMlj$^;Fm3p(c;7 zcV4hAESdwKF7pF-yL+%4lRRXljcp8Tbqf&Fz%FlNH+qTtF5#Y%u`O70~&N zxW%$8La$=qn*(2(`vM~^6aoaU8@h^FnDVqP>;hB{02Cm49zhPkcFjnRKYs%L>ItV2 zXSB@Lr9Q=RQzi zA##uDSR9feZ&Wfo;2<(qU+zN>(ZW;uU>}IJu3X`&8#Jm#9FTFtu5Uhrq%RPVl z3Nh%FfbxW@7avUgwF-e=DLFm0LNIj>Ir!#g4#s7XgKId5(_2Gxe#gSC=aP1^ZSiXp#tzSV;S5X1rhEsW3 zcnJ`Bx&4aso)vAQ)1ojXt}`4|^UPFrZa*LQ^8_h@N1hk^Zhy!D9?rnip83O}@c7E| zI4#I*joaXY&_!W^zo#-tuH&)3%kDrL8sFQ7J5MGckpG1gu;RrEu~Z=6pKZ`aH#jD#ElPuQAFwNy7 zqu=vfzp=zYDq$4G-a($@<|r*Omz?$FAPA#`y|DF9R)2M?qc={)_c#CP6=-*(*i$z` z2g$EUCB__+*vnnw`3TG>?MwrIM}|{9d~zdO^*i+>$7SsIEDo0QN?7mgBL7Ud6}a;9 ze3B`rFw}N{^6O^zJOQqy(ghqvD#?r5hp8oYzyIU!|1NEFiUAK0Uqr4}Lkxrk;e-i< z3%Pe7w0}gOmg5PY0v^tl+qzk=2XAGYtALX&VVg>JNLhhdIQutOW0XUI6NPSOh(GI| zD{SF?6($;}%L6=wS#}J`BtwRyzgaII%j1I=@w9CglUpmG5u{Yz9mPN{C7hB3Q@_~> zUJUHqI{IZ^vC7WJc;ZDUyHml=f|8;^zebVoL4TKmsxZI1l%)ffvRKJGgNYL!I^SZV zCiqo2jpf`UNb0d`D*tHMyy`H=RA6?*aFt$yrkdJQN} zReuIMJt>ZICehU5Rm(4-Au*A_)`2gbb+e;{?x#x(A z`Vv%|5p@O%7S9!l?@>(>1n|lwO3a?(eSe9|@b+3zk&(w~%%xKm^N#F-OoZ3OstJu^ z?wMYnd>gGvkCO(&5V2m@py1!}njm7qL&AB4nX`lqSY6G8Q@Z01@9Oar};{IBt%W`hOeQ z(R9%O%?#F4c_nX*Wr2#PUGzqq%P(G0K1lyqOvnmsIHLe?QNVKop z6;ruVixsDtTEEG3Sv-6;iLh7!lmUuC?{HJhxXew; zinRiVB0}uA{&gTjL5{fhj@e7!)b zI)2%`72#Ik_k!W93|M&z*puL=u)t1FRh2n574sy>J?umy_!3kMUiplfA_ItLlNi1^ zp*rDIQ96+e&fkNhipMD}4BcIa3i_sA_*Hy2mmTReR?SchFVh6hSxYa=3)zre1$27v zNXnfn(Dx?F$}Pg4geEdGWq+2vDD~fDSa(iCH0=|YYh0uz1U8@gJse#(X{xkL$&cay zuQWd~&1Jn~9I#(x{1kzMgdHYK-CGCF;R zrdUx`Tb(}FC5`ym%a^djpsm}jzF@+;ZVe@0u`+|evuya!HL~bTbAO((8$3{*EVPZq zhiG*MNYe!>WkpP@Ff&xO%&dTS#{WJS^KewNrkQ#AG*FL(R5()~8I7^+b7-eC2iH5z zuzx{k@5=yn#AW_$mrm;a<8J3TeMWOlZR;75oYNj07l`Mxa=CemcYMGltzGcglzw+) z6x;H*>}E0mT|2EQCVzMPgl>$5W)BRKOUaF+<*Jx@a*Jt|KQIB z8ghNBTR9K?jW6YPmBGc=_Blv7KK{$mtNqjO&kkSjKYe+4cKGwb;qmFwo7X2izy(q} zCbnOZyxC=|i`lSbVZfp|Z_ETbRbEX8<&JdKr#a zEqVC)=VKQx?7y$^Lx20PvHL$R0eoHr+wJZJKY$aN>99M? zX`UBr6oSDpp0j>QRfH`-R6F&WnOvlnwb(WTa>?{etA5$bNYyMd5o*#e3hr{JThZxQ z^SNP~T$aH&LpASIuJ@R}>xE$)tC5KtGItDSuH+M@Lv@j+s(%d%MN%$CHwV3oOHs;` z{C|Map4c@vng`|@ zBZVY>qNIrxUlQapIdIWXoly;I0osaeL8C|WOnux$b6`O&YXSC2IGj6!Q8bZS}9{9`jopC#cgUnSs7rm-FGJojZEW*h@1r;;697%^6Vi9ZkR(sg(1kW7D z8HzVA{^|4&itBx;fi%7|DAm63a+E(oa|{Q-RsoG6pCiR7(b!iMkyFp~qc#=FR7`y; zIA*=m-IMz+G{WOR$Xy7+P{=W_qDAXkb5W?nJvF9dC}qHi@%m_9a;yXjc*Sy>g@2>i z*Y=jehF65y4(3VZlu0*5tS0t$$rC*v$8XInqmu$}@D!K&Jk~*W%B9lVdpcJi!c$f1 zPzlx(R|(DvA+U49c!}b{trQY5KTj_-%{1p7a8W8pVTb7xVFx1{UYUtlHrF&LMX!EW z)X0q107clE)p4m4#^gwT2RG2eZhu{7<6UeezpK1Fbh?}zy?Q1_S|WR2wy0${Pv_}a zV=|c;M5>M#@z6zC&*H@nGCOBCxtL&$`NZY%4sML(T7);Z4f5|tl!nNGSee`X!a0lf zD2%SrNQd8Q?d{1MPh{uCa=eVf)%wmY)QO11p*3l@i%l>Z27rhog(Z|dgU`b!k~5CvY02vV0iCW^VISsy~RaC98&q^tKfz} z4a_08e7X=Ez$yGV@kshzFaoEhh6a1jVGVNz&GIXjQL1%1SZd{*lBqlDuyj6g+A$3% zB%z~s2b?D@F@HjFxw+BQoOHG^O*u9}z!koh92CX2J*#2hO6LYP3xx0PcRR8| zk@}3Lj$nuBUbggNBaUw}deAVMcUhT5+lrLvV_GOBE;0m?Og@!b&d`t?rpjfF9*T0t zu{TH2T+?WhZ1v{g!d|(21_fYa^6quHzF!`}!n;##s$FV~dw-*%6GiJ-R;QvF95(;F zXV$Yaua7;}hjj4j;N&zo91rHp3>iaprgD^$1uPk}@Ca5ucnkFz@$}^^p5y2&nfP&} z)$U%82qzB1;2f|LbE`j7oDb8KfDbYmK$p6aTkLwp!EwZSx=3d}-La&eW|odIh+Uz( z24P6Hqw|HRxPKv+5dFi~sOguuQkaY6{9+8R43}cS`tm&EQ?_AMdpdx2!_Yor1gtp5 z%j2;gX7_Hs_el^Ot%iD_8M&fn6$Ff{Gqv4R6K;JM9QY|uLP_VoAGkjdW-?C^bh#T;%aj(|oxQZ4s@F*hN((IiS z_ZKnxb^L z^h!_(tj07?oS21^w3aMI9Tf^|!c0$xGNS-NIj~Vu00nX}7m@hC`(3l~_{nw-kupI3 zalBGp<$twyswMV{ii@Hog*0y2R{Kwnf`KTM>-0kC8@YqfiuRL*r2%Sno+W2znt5Y7 zhov7D7yZrA(HmoOGCT!KZuEgaphe0IIbq+dUAwGoD#=lSI?U=~lR}`=c{bIisv+Yr zQ_xB>z~jZG`;-JYnWZ$FIjOW*Za|(Z$--woc7LZypLp`9?BLXCQ)DQ>(P%ncaK2=o zn%qGbM9EzJjsn@2`-(8qa+?&SW?TOg*YSVq&)xig&1(J2@jv%^tu^@{&F(k<-&go~ z7&MwYcjtfp3MKso2*7pzK3B3PB3X`f;E+UBHaK=c5@#uh+Hy8l&r3+CA~VIjax0gQ zMt=j<4a7qB1%>-ftl>ZVzDJn`k^rLXXeTj<14S)`45g@1JDat3BGlATmxg0{BShU| z9_n;xStJ%;zosX7bhNIZm>;DwHGNr3@#rI?WuZuWOsmQBXuUgQ*$?X z;Mw~g$av6Ik}3Nw-ENr+7@A7vuUZcCW`Abve?F?Ib;>KiYYrM#L$p~uT8^J+)xdYb ziF`UBWJPhvX30G9+Roo*@wrP0)GTcuIrV>MA3-GZ=Rj z&T=!?JFm0{{Rp|%OOZ*^GZsCAey(b6_{FM$2`fuo?SLsw3rjy%!y%vH(D68HVSfSC zYFplHInVoN1`9TWxea{^r~%bL_2v9hA7ONM;pdhBjLZgrL(1RrsF;NM0pF|hsBoDM z!z?ibv)R&(Pu*@VIm%Hxn?99?V&5$1G69-x?cL;NiKRv#9dfwAWjJ2?)cioxcVN)c zCooRDgVbR%`Cqs?GX7H`pGsrMYkvbBg{l@UGqFEMfx8Hc5MmBy&B|?qH`qW|39^m| z3s%e~A)BXLRC?&AsWpz|EKe1g8am-L9$C>mJ!zzOj=U(#VJaxH=E=-&OrE-YqXkyA zW8aF*lWWxA#WTYUn8!M|XnVd~c=xF&x&B;uhRTDj!f~k)0@Yxxu&pxdB!5;-ijG{I znwe%~dHfO6O*Q|9FH&Fa{_#<=}9r0;MAvC4=xjCeIuYC zU%~-u<`}~h0D~dEm||dr1%Fc$@~`5f@?Q64&J~?7q4xqHHbslomD6)X6rk3wu;lI0*Mb`TYI-McW1 zogytd8pG@h_0;3HE`Om$ukOqoc=lpZE1Zk}mSDOvGT=QYyH3j|Mnyv|U(Gi&N4BTg zi02CXM|ok=(JhJJ2iyZ*KAx~hV6=#D9ZZ+QtgL6$8Le z!5duB*>a#cmkasOW<~x_s}jTu4*;3jY>1}e@g8K!Z3N*gDeezF5A!$=MSGB37Zk)} zGEBEfnuO@Ywo~`%==uQ%~<(<`CxC90lTKI7F1kJEVh}%Qz3O7HP=+ zW6qA%YjuAdUjt(&yP@A-XK;TQidv#cutx>>SbA&Bk$>gfQkm-Et^m+wdK<`s1$!#%a4nLa&kya=IUiMADN@+G%pO|)X@j5b0>o8 zd?;3%so0^xPdWV%>7Ra=OaRzshoS)ZbUd3L-Y2B)qYEOW8%Jd2Hw0OuD zMxVh5gMaG|0u0)`cpVv692|!YS6`}j$U5*()p7@ti*vEFjH2Cpg6#^F+4ma zd}!|2g#mzJ+a7)MF82Rj{XdP~7t8-@w$}Q8zVSbQjUUbb>itK_|N4M4=sTC78aySN zk$R7wg_lVb?4K_oyVzhLhwWv06|eOkf%bkccz>zzdI}D?pJg#z$ELBLi)wC#3x`(x z?_*ACOCyNl5Z3kpC-6PvMNLK8$xji$3G(-f&Y~~@el+@4m%jZ zREMu|Wl6IJ?U;MJnHG?}({Q-YsNd3?oI*_W3m=hj)}%|kABGOy&1|6kMX*03l9i=m zF@NpIAs~qQ`Y5v*Sj=zClYsAK2?8`GRXJ0VP*oW8gy?g8O=uxP^cGeZ5&sp_LMv5E z%ukh~WjYA6WLN;Ou(6py9nDp9Vv4;2*>lDbUC5PL4Q6Ks@`t@SoQJ>q8=Wn3jG8$e zYld24MdX=R*;YuZ=vFAW9HSUUx_yS3&VLq>MkJ=_{ebF#r(8*dt~|1EfJ_`OT8-f;qVDT%k2rGKSiFvrxN zSeK}|3j*_5{)3n^9)!pnwcdebvtX5Ht3DT+muMgZ9)#))ox_@R-umlH3M>1{E`7LK!49HqNImPg#L0=p@l-(R< z2u_(ZnsyH7i#&6cPEf&JQrSihsq$svU0Z zTSn1qQk*$#jU26_2&(78<4mQoGo&7ncu_t^?nzz+{0im?*MI9yo!g0IQmU<7_nC)i^d>!g7AY-kyp zm*P|f59QnFRuM-SjZ>aThC6a!>hFH%zn2halSEXfVzdQMcvH@o6opKFDP(`y26!i; z-vJ*EWBZmyH}E5%2~Qkj+!B!$E}4xX+{_2(v252abkD?pyjLQc8!?fIFriEx{wETK6ECC5s| z{7*`p5+K=hOphTJ=ZS;$kpBX_=rv%RIBI$yE4QD;k3^|?%iVe#(Qyc9E%v zruhD=XBv{#T8-g_*g-sA|F%q=4rDP-(+!g8yTa8DG$+GB2d5SGzbK~obB?xlG;&9J zrKW;fr!COHVSkbaMzM(`GP{W7=Q2c%he0YS=(f7)Jd|(nn60wqU@?y6Y~`?s1u;VS z;EX=UZC^Nh^jjTq%uP5BdvIlS2D6XfO(L^%YS;Ub?(@bg22gRbrE`yz*1O< zSy!3Q|Gj;x0=+G2NV=NB;R`)7(fsf!;)G5#aiE5`uK|4hi|a*>cXC+>!4POqHVh88 z0t;k0NLv13#d|~EP*uN}88EKz$8qhvCIW>|HM-k{^)6K36tUTy#+%Q%0R~vLE~hTk z_?@o=l7DgdoD5C=;sq-=nd<~-iLe#P?G&Xms%*uBD|`C;pBy-&lJR)5C*6W5tkLj@ z!(+ZsPq+;q0ht_T%YCwAxC#PaP_1P=^1@dygJCisj-B;p4pgN8bh*2+U#Q}^oLw@! zNCBaSJv2-g$D|Hq4|zaf@0tn6&ntMu*juo0NMCYkKoE~ zZhs-lrm6!W7h?q*+ofpYDp^nzxwM3Jx{3~xZu|7ARxVKNHTQx;ti}{Ngl7-bilTUW zuAT=f{^$TSgYqIAr9YHDmSki=REUB|w9A>RoViM;?`}MKp>;eTDoH5$X#ULPK~M=W4H{qvRAP7Yq~J45n9Y`yG7X@Bt@ zWV|uadDlv^D5=rrBsdJS8^ooJ#YOS2f+EmW<`MW&tC{B|yxa%ewYlKw>brnBFomjf zWhIS?6*0tGnd@yD*9lGZQ~L*p{@5A7+Z4u&Jr(kc#Vp&~**TXhX*sCLZLwnxkrPwi zpL^<-okcj@8I04x&V<#ZI|k>vGk+Y8!!y_YS(sgo5F|RgY>KFuL;!X`iNDT-eM6oD znIKH=kLe=b^R>`>+&-0j(^PB^RCM7hTyfPDxY#vyh=nS}^Do7OyHa-3h5g0asMReS z7kE{R_P zg6|a(jP({Y(8THl1!2NO;!^%p@XFlFUcIt<4;b=!Zj2aV%pP+zU;HBE^9IJ?gepI; zzSDM5!ybMiS`%qL3l(4Sy+~DwQw$e$eBJN5xB*cS*hjgaG*xS= zcCCL;DGk%=zVaF%a>Bq!y8;^yxkZ1hgp%3P-aUlrhWE*3qCl7TW788n2lvz@&lz&- zISt6mmJH9R=_1K{I3!awdoH@^N_@ZeszF?wvvQcGXo4ufD`kec1G$cFiPE{oXk6t9 zvjq*#y@+{DOs;~*snkU!HIPt$(hz@R%SCz8 zEW0yN4hwpX9I(W*^!n!9bS!J4T4&)rMEZ<_^~%g8M-?B&VOW3<2+VhkQgXoPX$&hK z&-5eck#PMH&wSzZ%zXzXq?0gVS_x|97OX23Wp6SG8Fz76d_`?L+jDRcyNs%0Op1BH z#9adGdC9OJMG8_i^U2!G)T4hlf!K0#J^&p?zBl45GI>m&weNf>M#}Zhs}SJqqY*n% z06#zXdN^LD={u!Lrg`A*ufmY~yL}eHx>`?k^)&o79{W_WKQn}6e};!i;R^Lq%AS;8 zxW5SA43}f@2YMJoZ^9Vq7Psb@BSWytK8fY8GGI+AE?;u$U)!_zf|`Hk&%yVJ++ zbg-0ErK!<~1bxY1Zt$6;2TIOZgs)a7(JU=?VsLM7<`zU#*lmxzmwRJY8)_vUlX0(N zBQWARcvfvh^sHRab0>drk=^%Qk+=~T4Kn^_k;?|;M)8SFgwrn`<^r>&`g)W}P@OnA zp^dM;=D$$WA5oCF&3=q{ezV|pFxRSkpFiogn1e@kF%#v7 zUU-&5Y}g4Bd3k!}g=5=};4j+&5jVn{qeYINV>hECI4ESOd5M3P!p%!HvXF6QF+1*@ zWJ+&AkpizIur>41atYloP8JTT5SytAUJiFi-P?J(JD}B|g14vHjPp2Jf~8xd?mOHU z^utfVXFDoOUYsFW-QHJ%u(z-AoI&cuUPDfV6XxJ% z3{x<6%V3@8$lZVSY5FZ--3v7UZiNY=7+=RjLQl$ZxlHD%qC9Gxmw4u`Hi~z8p*`rY z?YJX}4?BaP4`VtS3|fJ@4;2gs0-VR}*Ix^}PHQJDEfHsTX87q?Y;HD(IMnZVg12$T zfT;YV$?}$DxRZ&_1rjW{ym&Uta+ja4K&X`E|vS4^uHU54KgnshX z;)oz`dTV$L%o{U%Xyy#o6$}BUd1s1F0|1TNJ+6k}i=CgC7n@FbYUYN_%y8or-q(zP zxOU%@MLx-E7YxeV-w1S|vk~lL>?#kaX)#XPc`EF zo5+6^SW?O2U|%e4t#k#?ed^+bhC*BX?w?$Fj?dun9@jkd#gv!~^t#wpw`LWWIyBH$ zt!{t?&{s6FfDA^x@$)-S=HFezDI2@SO6^T?;8#ZQW`Jd;H4{NR z07JK0Z*iUgfHWQ}?~d0>-y(5yaU&;Wkgb0zn~i#qHFDn94X%kVwga?@R9?%lo)^8 z$p5Tq76K~<6z0cmrVFN27(9{V(SK|Lg?;C&@&_S8y^zsn|SN6BgJ)40kVhnhtWKnbewes3FC7HdAB4E}$4L zC%XpT-bm+9Q>3|$-94TaQ(NdAI4XZv3)G0mjmK+SCoV-yGeSk(ezJv${2uOT?`JGT zQXg4eQqz@|j*__{NL{5BGh(3AXUH2;4`+ao z2&@$Y%rvq*jT{UPt=As~-|xSCe)j6wWC9_=^j<>%{EQI8r)yIp|a?=%Z!Y zhLO*qB%_Fbbtl(+PXA|Xo2Y*#;{1|S54Bp1?ndX|EiCsl=g#%SfubtM1_h>=s=zJg zzqG!-Fs&u+Gn<} z`oh(fySSDz;`)T0*B&m#hK`EM<02T)o@E3jQ%_@3Q%O9}E`np3?D3A)I~Cz~_E_KS z{*|K#*nz?*4!}V9hNRJ_JoAc9iyXXTv3HN?NTQQquK*r2RFZ#-d91Kz?kky9n2DGM z_4?7oxDj%A0fnV2K`2<^{Cyo$&SCRY9>`f}k+p))co5HIVTCbv$=L*d7N12q*L#0H zPsFG@FJ{L(CQ~Ict|-FcqlM8|Ftmc2@W5jt(P0tEbUEa2)_-XWxJS@cj9!{nwf$z|hjOpZ1@co98i{j1ODw_I82c#jv1gzc8f`R4o=Q zIaLMWLeW22Qf2Ywg99D;6y#H2wA|vZn)C@ zu7S3yuTPo4G;$T-L|ca1MItZK_?Dd6Yxz$F5-cUdscU~hd5z>XqTXzMv&#Ob{kfa{ z*Q_=gU(Eh%^*Zb9zs@)N?<@R#M*HuxTYKwLzSfqrS>XIc!I*iAAKyF`wZl?zsW2+W zk#2WKsV9r?@8~_}gVrj7MFFOYXs?RVser;|TQ%0_rX9FRK?5kiX!{xep1vrQ;^R`CJGCUBGVPPw9NH94x41#v> z=uTtDdo5prpqzb(`4)`b4x03JBDO5~yNXPVoYGMWegJsF)$e*7&qsOb?G$^}%2Kuf zorZr>OS4ND0l}c2h@r}wVbn=znwSUJa)lC5Qwh>+byLu~3Q6-;(T3;`>oMi)=vT3< zr@T-yr!oDG5G5TC(2`_^0z@@tx4|l_IZXxASqj-vD_HM`Oy`*Zna?qflF=_7&qm8} zP2J|2GQwT%Nq+)`tCKc#E6|XVEI}z3~tF^2{m0yY*cv!AT?%Dj7k8%cE!( z?AK8~ha>-4a-JN|(~=vh#x>O$%j=942@XCEtwAtr@p~d2EBOh*gm~(hVD z{ArofbV#BhMblJ#L~ZI2$bEfXPUhl43c2-s&3GYR<{dMuC zcm5H6m-zZByqFdW($$>L^E8UCCrW0`>6zc;EWNw}m~zE$jRRF9P7(YzKo({X?NP6W+bJ^rrxU-QfHf47^Rb@)H+Z~EU?_<0yK zcbc95ar8fv{h4`sNYiT7wK$0hbf08&qhR!foEJxZw&g0Id>9{hp!2RGI^g9|qG_XW zIzT~i8UJsX1b1-c(~vZoh(2@T#~zJ}CEIHET^8udG^u*%?oq3c8@p7p)PbR@6HSw{GV*V*8=vK@RAKxA%l{ciMR&LV2zP-v zVi7t?EWscmcC6OHxrC=NxaEHilk?bl)ScV41jwQum=Y|LDv+A~4Mq-8%@9vpb^1=Sww?`by$?CPWxAHP$+d)o1UUYx0C4(}=c?`U! z>G=+PS@;Vs$J`B$bZHjnB-rVWcisO2XM>o0PF*hW*cH-?^Bh|M0T8+fj@YV#vfIV0 z%(4hm)aW?2pjs%_m3h;sK^Y0nP!ps92Uy&5>YQ__DBLtJfO#4RhvPp(W${TC4q*%P zf*byalV`V=$>rZpoU(u5lJ2H%w=i!Oe}SvM(yFw5Mum}k6;Gd`R47EeibSrVj$OA6 z4~gOrnDf`qx@E{~g+ZzSQ{<=$M4ZVxA*FPBZWME7<@t&U1RwSEX>jLh4zsE!ooOvr zi2 zr5`%JOiD7<4GGkp!4w203kD^#4_iq@iDO0A2`oV}(lBx*_bV2!mi$__6-b5(Q~^lM zolk=YOywCa9t4I`;21B-q-IV3DO(O?c6T)Auy*kWjX&a006KN4l{H1;LQVf+Ek0zrXooF#t;A@6RmG6N$S2~2S%+j%zC>$w;>TA)hYjH+W`;760#VT9n)2M}87(_>7H zaVjl*GnVxF95uMip0F$1!{z4@)jZqcW)>&Yk@b5HK+&PP2Rv4O(VJpg)50Os7(kLb zBypWvO;msI;^4q(UAJ^BcIr4@7$&w1mWb(`gLs_Ct>bbT>|P^lv~l4g&$kTGMOFvX zro%-(8|Br>`_|N9-=U2M69M@A6MULmr@U9@Q5E(Fs|l`K~fiDyf7Uld;&2&PgROwE;xnWKEVS!+@e$82?R372Z(x79!H&s1^pVrOakVY-!sSWX6do2loboCQ ze;}Bk_(}XT0z7m*gWZ@5#|a7-D;A{r9@YP{P$t+MpGE79Q(wJNWX>6htoOc48uG3t zUy0Z?@yeKc;&G<3Ml-Pr8anHlye4W&Y+lwvk_{xjTXCT~l@7!2R1SgSfr@p4`NDs1 zxL9g^V8G5UQ`d)9SYFYU@8AK7&K{G=>L$(&E4M9fnNXhP%Q$OOErc0`$(+=tS9(!Z z>`OiU&I+BP!zX14+%ShclvTLhB#BM^H&D35Y7v}w!_z1Z$-V=L!6|=^5IhY6}5bw_I3F48nhYnvlajm5%)wq{rZCu_VWucUoCZA%Q=Kb4JNv z$pYP34_l*N|9|2bXdaWh1&}tALFQ`7g{Co1At9{Z(P&&ncrF*%c!ioL^lIzis&PS5 z^zH^l(dUKT<=IHxa}^KsMUR)-W)Lu_0c1|qe-LZtuKNEM^#Aun>%Xo4x9Wf2^#8B$ z1O5Lq`Tv>!?+O6o&s6|$f~rEXIsO)|wGO72!=apf(QdRp+52wUvZcxRu@+o-r2JzfIgaG@%OBRw|foUw+eTB)Mn^7X~e0GvvJ^^R`I!;`$^&ol(gly!s= zAws!iwd@oi?bC?fI+C;QcnL+DhmsBSPLvGOpE>hLZ^Sr#EvWc9LFXj)@upDoFxmAd+E zf;#DQN-~U`UPDEao7<)Xfc!@E_4a8MyF!y9if%l@h{9Te-#22(;#P}B+yN-(u}neDAw9BWgoAH3CX1|ETS zyyuBfJ^zgwtjuv%mFa=a)C2SKj>*ri!5qRwXgW^l#(Jw6MrBAC4i;8nPfZo`tU$7~ z$~ESXnt9u&giN>o7pZ39YC?TlG2(6w`Z=Ij)#BDneKZ*1P@R$wQAQTS<|kP?7|-oKu|ndxcIGwE;UhpCQ75tJG>XC zPoG+@NTIKHAmbn|#~66J8bXlo8?r!|S~qaz!*_-j;0ZW0TYqaooMmSH6LY~o<#wKf zwN!NGT&j9zsbXRXfl%dwTHKhwz2fW4ov16BY~G;Qapr$RsUFBfoD&%2gw`L$^`rU3 z;s?_95ssyn9HDXx&IMc~LkqqZ=7q^sP_q4d)x==#As0wCkYR6XI}hRH=ptoXsJ$Wz zW{Yu(>d8*^srd~=o@hJy&E#fBKTRwmc?kc`=0p4oyZ`)x$A?gi zM5r8+Nu5*37y=mK{FsBs%urh_mKovsSi#?ke_Pd5uPCpT&NYiI7l)2VvJh|xJVjl- z$lzwZ(X4m?9_55P~xctBni50&$ir4}j+ z85sg};e{IY&}+Qqng@iH?-_}av*p4OF5u77`p4%#S1t95H+)`5;tlBXtV4`gnAVc% zaMuMQL==P92g2Z>B?`XtX--qdr3jz^;50P&}uA#6d_kG znQDKj(l8aX3k`p>j zH0uPbm>Z!=j3`Dfokt4o92DW`<+!+cLYy-t)W*r1SBG1H2kxem^Dc9t-frJL^-l*h z??$a@fbL&RdT@k@8FBQTe}O(dS2`pc1ss33a&3;34ka9`_x?aci);cApvNwS1?;>s z_FD~{KhEvw(~|>7M@lp)X|v37Aj5g+UJZEylOesagvTrMh0yC1=CJv;t%*tDj%m&1 z*7)K%n@7==8C;erO2+DdPUIkM<^F1-|0Bx}mj)^&=apPfGPI=2SVgV_Ek(E3i&TFf zkP&>~WtwJ#;zBZ?p!Sr^6|{PqSXYj3U@I`$P2Ou=GHLR7D3=TM*lisoK?7+E&2afE zT@4b!LEM5_nQ4jzQ9CY|V=ZDz<{GvRqf1;gQLgbgW~|i5sJD#UcO-j*h#|{aYO8SM z=9Rh`>W67jc_b5viY>+GQV|VNVHtnnK>prIc$!e>2@8AECn<#Ifq_fgKGTzIjM8ag7=1u%^sytaaY)7v(~ElS&%tswC+0x>LsulkmlQ42bzBdn72jdGvcr2Db+Mh#}O4= zZ*ia9RZ5I|g&8m)E0_i9iDQ5KAp@JdnaO!sm8OAdxlWne*|8OtNYfc2HY*xfm4paf z4$3^p&Tf7*(R(aGbfct(YF?seg!C*}2MpxYv{WL=95+HmsWGTo5nzzz2&&N;RQF{W zSI_wp3*JP=7Mwp(T{%beNaY?G>@`kDYA{Kz0n3t7#wcxmKeE?K}wCLMa7D}b}PDP(Ql9u*WLp9VYdP=zD}bXdk7 zqJ*zC)w2Lb=72w(+D0~ck2Y)8JPW9C^gEj#{m%B*GXldV3M&lOjQ*6nO}&tYX{qRHL?C}u$Y6FdxN+9KYBpD~EAP_{Ht`(nOkKSFK9@6GPCw6gj=&l%-vOPvjd!``9@EKtg$2Gnp~8T6AQsYF2;7{_zoj_iuD!)u@}t zepy(>xut35@dEDwl}*LQ2>1m{iFWDZvXb^o7V?*9?HnqPtH0BFQt*`cW0Dl`8Hh$B z67-1!SYgqD$dqdeP!eN33I5`!UNzLaNEh@JJ9;^1Md&xgbE3^LrJOheVBoVvd!@$< zhxq~h$w~B?T-pa5Hgu zvKQ=QYackg&k1ZQ><(7|kb~-HbS0E3R6Su3dI)Dp>CS&6(z=@0u51oJ50g=Fb~c=i zml^)w*_r=~LAYZs&lbUd`LB5sq%`<{X$=O~=D+w~)@n8X-}%PWY;zxG&z?9;U}qe| zl0_ng$Guf2y67@{dpvro$+#U}Om5Ky%+m)P*Qrkq@SrOV^OoC&$1i+Q19N(%9}V2o zJ>u?58ts4BxT^2CsYmnbALM_UJ|!*8=(WZFX7WYDB37wOSwi3YPc>7l066@ek;Qq| zKV3_T58IlHX1dCHglF+!TT|VnyJvU%UW971E`?o6eO93g*Ze_CrqVz8+gPlR@cCS##E`kPJD4a$c$NTETY6y zZ;}q!XToI86Yekql=ydwR}_H5lmfy6q=Ano6$S1>YZ554s$WEZ}ju|?EfzT_PCH&1c%uS0mbpU1dxAEGhYLk&ip>uOsiFGmW@f_j(Vrja*jKS zoTSp)(8vspTuwGHt5a&s;c}6}$a3ltnIP@*(Zn_MIZ9$9(@92-xSckXi&e|-N~wIN zs3>EQSyvU2{)`|;=`FCtT)ug;P_BigQLc!<^n%Z-Da~s2rs4`J-sRpxWI3A%|HBmH>bI*^SdHWVwEN@ankU>%rOtpd7BYX{1>nBTzV1 z8Q+a8m~Al{^G4;$Jj)yKQnU(A#~aSI!B31(~vO_LY+jfR5S2f!Zvl^ zp!rBsji&2}S5XpgH>Sx`eHv6xiuyRR7}97tHp`BgO$phI=bAd5tM{u6D5`%-!v2-} zHi})iYU%)WT%8+Lq?`qLl1!tObx$0_4f1E??Nz|wDxQxE*Ynt@YfNAMNRt4HCXC7# zU0M?lYxltIEe}1CB*fgy&+d;`IeM7qPkL;jcG*#?$|b zi~}~}wQ8`>e_o@BnkfC@QS)Ix{jGTi9w2+y_ zfN1C}0CSr?aSPy3EY6XB|4SMSZmu}tkJtYgd!AlB`5mf<4Wvtk&FtwqUAu!g+m)tHB;HR&eLd+j-3H*d-X5! z5CoRxNahrQp+kQoQO{*IPOsqf68+`Ik$3R{)W2tTYZu0BZcYQMgUBPCFSP~R;`1<5 zoHedLG!bMSpHq}suI)&(P<6yFq!U!QX~qzf4J$640)SzL+oFCEzYoa#f~$-`Omdwd zCkX;yjn#kgLG~~X;q+Xpxb&eTbL1yWA#0bgK347vukK)az^fKaFqr zUtiPjL|4J456ISbu-0f;j?4p+izCen;@PG%=V&2j)Y; zcabVu5Af}oIpBKY-C}oww+Gle*kH5aJQ*mu7X`B(rzpNGI{0Tyeshqq)11BHPX{kf zm4HjrSqqXIp$i{ca<@-37ZtX4P7qw)K|m?riFO+QcJiusHNChveDUJC`}*zCUz&d& z?zevq{xZ1v{%`%s>v#viqED9D?4OZkfGjukEHk5;(Nrs=r@_GsodoysbA)T=yzmXs zOrJ;b(^gQt3d-D(hQbNWqX32mU%p9c{pjRZi+v@FvNo<%#$p(GdP;<-kUgo2L>zlp zOf*tm)UR2p zSw6#dOfvK3=r!bDg?{YfDgi$s(v~CtF0;6hJ+HW=&=RP|X88o4BfZ;&b3!-s-X(OU zu{t)-e0xMq-P)FDJjn2(`LI`_(2e8i`QpOLw)iJ!o8wd~NgbK#!i@Now73;3nK^&I zHO<<-V9<`_Wp0n@#sBypfB$!qw#GLo5~`5LlxZ;fi|tyjzX5>(o*d#`8p4OmX|*+R zKGvls?$Bg$cYjW*rd})=nj}?U2c2al%Ez>@Ni?GwUn^7UJH+r$Ero{t zz(JJ7!?{SCEEGFKKB*vx_OwAu5_a~^+BVj#*g z;0P5@#5GAu<|#F}WWiLd170JBL_7-<+5(evvxO|@uWK92qLk_jx0LgiBepdz~ z(#=as4mMN$H4Ll@-1&q|OD8&3$PDDgAod^%uYDRkb6rIIDUFX$qPN_5^MlSc7v&~U z{{uhFYwqsJRe`!nJct=r2ZVn^GP6AedyJQv-g(?ga!o|Z+#PYvdM>c;KAwa_5tbi$&${t9i(?@7-mNMDJ)pplM*dvOjO zn6IHm`(^+9g;_h0NSq{nxlezfpcF|9=2X{9Ey%gQ3a3*B;_Bn@sBC`(Ju&!Wd>z6m zSRjVo4=&S%CKs^e8MIfcMFi}qf5+xt_a@Hc!N2QFynW#bPM=H>NqogQTc9SO&1%vR zRGq7USH1=)bbzl;7_JC4R~P7Z_7L~M;wp|^YNq?G5~UZs0?mJVw_REwgE*P&w+j9_Z5FTrpBmnh)C3D|Z_!a^%Z2ZX7y43Uy*3>zv9?TEo)?dm z|1O!T%%x`fgq0Ovt!huQ-xPDwT&}LN)M8;pkFRsvcu(v;^UA_oNsf@E3T9Adl(VW) zpPr;6P$hJqN!s2aH77uDI(|o|TM@bw`ClvH6<#TZR*-)Oi6kN<2B(|7;R;aR^sjaQ53HR>A2bJ=8zCkp#2|G7S6))2|eG)ta zI{jmqs{PHPb3r;Ba zN#rRxY-b?ZcM$`=UrEE6-n;Tg9baw+;u&2k7XpHf9mu>{I|^F(En|~DK5ICzywIgf z4sqFBnah6@gWyj~Y2L^qBL!FjhA%OZ1`Hyqpge!OzdYByJog?;2QN_o?I>>n$)#1tU{=wlNAMCNC zv({PNI>{gRPn{k7aB}+Q6(9bS4aax+ z;)i^hIvj%U_kTP*`{Ce?Ou)~lXWs`640Y$b;3513qg#LeZm0N_rJnG`d>l`|ee-|v z?Cs%;qZ66evy&f=kKepKUG4kh4es)`lcN`Ic=vwsUE2CFe00Km2G=ztd~K9jE}AD>Jr^;Wmjrc@35|Kjt^f; zi?gFw&sS%BGAgZ%f6}f0+9tPF-!*%A^z`hU$6oFK>CIam@Q0r}dTr0GAE|rpc>na^dp>{n!Qri+ zqLL(XEp$(vi5+zI?3Uhcn@Sw10T9T?|ts$0&Hcs ze!>?2jjb^P-1^ziKH&8z*_N5}e^t5f))$3HfazU{O9w?7@de&0N#2M2OIUmm@dRX%xjw*P0Id-M9`$LH|94ez-**W9qf;hAM$-cpU+UYrl9QRZI>fHG->n;ZY{ zshHx2*TdRyHY?7>%2Thx#l>^@UGMnlZ26I=PLV-;IG<0`a*zM2|8sv4%|ASBf7m|s zO&@y3zx#s^5wi1xk33fp#ScF73V{9DM;=*Rd~7tOMfm80vIHM{<|vLoI!~`1THptt zDlg|nc`FlPv-yi z-s5%qQNWYm+=U*)s?-h%;pZ?gfe$O_#>%;jb`VTD&{0V>jphPH3g7?_1A3p0Q zA3l20a~PD-{xHsfcJRJ^U3}C<0`Bna({}s7C=Am1U7k;`@6-Lk+w(zq$6+66=EBP) zd+*_0|Ma~ER8F$FZ-aZi3IY2pS;Wuccy=-jr!NUObf+Zaa2MVZihbJ+3 z_a(@oyjzRsbJ>6CPZ^=TV+$s`o-9P)z0XG%r`AK8eM-CI@XoX0+Pz_T`V(HL4e#;B zQ+Y>p-_Oe%-S8tQwJN$5ZDR<7DAH2^{o`>1u`{n2^PeMJv zSJ!CpBXe8s)$Cr!jZbIC@%#iRzwgx@3oTy2`;iRqvju;x$-VZ{_ZmmJ!-IF4{iA2E zEaT~358r3vkKWwnp?gf*eGaUD_8C&P?(+P-zU|NP%>h{Q?)>C^I;R{2OxL zkAltSE{}gEzuxNxI0pQEd_~3Lo{!&WGLNt4&HL%lZ$nLizsIBZ8PGjcZan&z;a%40 z?cMqt$M>3vPf^|0V9np9QFJF!eL@P0`^>hsxc`-Xa+59M$%$oS-l4&%TupbJBDF~G zrmaJFd&UwlCMMqJ6VUX{Xq3f^yDY)ImDqbLuxx*DM_GPMQO zd-OibC42OKk86hO$DjNuyu8Cx|B~EA8<(f-`SGzw?78jFvk-R5d@qU-j{T{!^z}C8Z?$XMfJ@^mnOW~Ux_2vH2KQ-IxOMK|?9Ojnxo+>*- z^CeHwy`DZvChv)`-1aQp?XkNL`$O@dHO_yhk3Ls+J>BW?RW0_TjXo5UdXIbRPR|yc zQy+W&mTT&c4eqgN%`NrO$L_Ey1((#_AHDm6h>i2nNA5gPcb5cZN7S93J|VQ*2ZEGk zzg4$=m#6MNQO>t@$LH?evG;4;{mFZDzWn%Fta`sb`aJBVk3MwU^L6JY_c&;|*Xw^{ zPaick_o8!j+5(n{ML-^kG8t|Ox)voTyeSG?eY5@KXmhJs5^WNKc*9Y%D6j)_R}3?)`%web9RcKl)_ZH+bLY z@BXPpPvTvky@z3QPopOHA>Qf9dx-S=nmuLj;m4mg-{D;!y!+ym{DvQYcz!2e27HDe zd*2m;_O#hEB>FIojv?dzMD1Q5ViWZvj1^6*n`>HWJ9#tu?Kg6 zVX)5iUU~@s_&~A1d!Jo7ez$+NVzHrH$VGUr4@|=8G91gVgWw@3Z!%-30sr?x>D`H* zp=85~zMy13AJ`D9GdM`5w-PpEQTl*Cv@(etu{^)y{+`d>`}d$bXm@+96%oJxz52lC ze{oFz)dzQtjXa4^EHYiJ!_|lXHTYd{K28UZ|GK8hcXBfRb&Y)fz-!7UY2yXY77;K+KCsp7 ziBH^XU#k8;ofYvP4!+-i{o?TC)1iLX{(K1kq0wx&>aAP+&+Tsg8~(%B_<8728{QfW z&FfUI1t35D)zr~|d*gp!A3rqMrfRFvs-|L&4dQvV*{cFPcsqEbzX+PWN3XX=3FU=-YY0-nMt^^O!_o}bo7%8fY`Au5 z>gBnu%iPZ9$=HA7KK}K-uWVESVYJd7zmm7lhZogmK5+SG(0tF(>$kh97rSY6OWicO zx4QukV6V_av(wW#_iZ`p?`zsEHSOMQ^3bqTYS^ic;=z0=H$=7J_SbX!P0(1g$IwN) z)J3}*#Y4i8%3gm(7xnGnnf)ec={nR`yJ(fVXu0E|W2pP{VI#QJyjg1Aw2A9jW1YCp z`lgLi(}qr*8#gEJJwvXS8rIpcTWHr^*Q{Os(st{v3)L=vWBVT8*e-u#yHQwU_o4Y3 zul?F~`D@$tY8KBHy2y>)D#(wv0UxTr3L3i=5+ap5X_bFFY1REIL##CV`6^SgH2US{ z&GHP0_|tPP{n#GiL2uR9eL%B32hB!xnqJx_Mf*l?TP}`E+obHG(Od1JH2h{he0I>z zhp)}s<>qB6-jqgu1Whbrqg5C|lMC5smAfcQI{CXv^M*B7ao$+pwDfk7PC9wJ)>P+i z_jc1ptyh0~Yoljx<=JjD?X7yQ8_m_G^-@!Jb8)@v?&i|fu9us3%Wv&A@*5j6q24Rp z*c1x&-f9P>cX$1AwJO@&R;#tHartyN9x_Y%m5_`<~|I)?Q<%lo~hJHExwBuhlSN(Y6<>uxNj;Z(4e9tFBG^l|sw@x`yTB*=RQ1 z)yMhj_^VGRtFzj;G~lKUxQn;8?X8rj_4aDR(r}ygTz;crF27eBmNl|Qqv0<6o^Q$v zzqh_|>8)~>y+rL=b1zWW4!d5u>Kk>r>fzjw_U`q6(tihQ-(N3X_YGN?)xUR2fA2U^ ziOzrhY1f_KT5Z}cHErMOx>fpn>(<{(+o0aO_4m@e*Bh&UFa32J92r4Lj}IQNYU=XP zF~Idb5T(I#8`&YbljwX5eobaXJGMN!U>sk@W72Ls`_L2WV!8_2!Q%pJXLq~e@Ybh+ zl2a+ay(g_Kb_7uV4AgebYaJg^I79jU^hSUAeTbV|Y(mV~nhfrjU$S^%BP_VH<(bFZ zzx+amwEJ8Gdzs(2YS} z^2;w#>D~F?2~xjU&JFlmU%1TTsQlKg{c)C72*aH&!MT1OjFM|5#e;j#rgjoffpLFI zO!9QN#6KB6-CE9oJ_?A`DQV7=;c^_#xx&xU4~f9h(I`yDpmXF>C>5ZbiIfZ$m$J`F z4M4?9{;eSa&66qdVvCUdH^wrtwdEpq!JCtlYJpsvWAMNGYr9_GZRDg}@{X*={*vXS zmd?+2W;i#QR%35Z-Qn{XFXAyhwoNj+}h;Dtq;D~PrxLeC~xH%reb9T{Y^&D|L_PB3nQG#+Mh+SJKldQBk1k! ze)9zQflx zy0^c!+i!jPYo+n$IAz^deSw6!Z{|{bioo;`F7kB%gL(+8G%?-xTZf<_)I;~A+q1C^u zv^i_TqBxt4!)dsB1Us!wW})@LS-A5Unwy+~=I)($!+Q^5a|8J+jo*JK1>);D*ZpiE zFFqSyET`|zz*}HcV4@>f$V8FDSJ*9()%YIyw)b#WJ|Tl zl?lgEBg%X>)AZaku-e>u?FMRHORX3r!lmR~bd;B8^8ZNNafYV1mbca3K&6q!YY!Jt zn7O`#Ob+#nc)^u8or8ZAe)aVm?5L~@H@Duufj%jXH`->K$kvw1 z);G&VH62yuJ?Z@B9;?2INNt%&jnBhHav4{V6;cIf&Ey{6-rV4Blg1y@YcK`SYGmD2 zx)%7LZVhFV6QD}{J$1aTSMmHjj)G%3IKf*GtYwRA4-UgdqhEgz0{7=MM|&#UQKal; z+ywCc*cQA5VMy|}yKi@WZ{@iiFGFzt?kNM{`{>1_Ct4qoy+xz-#xGA@O1 zS;^fQC{cV0jwM+F{Hh zc0d`LEuy`>aKN{g+@*5g;eXU&{+K@A;GwkaZQBqwJY;`89= zQ!YYC%gN(5^Zg>{D zUAM3@cR}&$9fsrK8G|ur_)dG>hF4FQR}aeTz-EUnq>?seiI1#krZP63Mvei}t3Wn_ z4G(Bn{b=JXWt>M}&zmNbje`hM5;3%6MuxKLD)E1watn$knA*~(>0B-iIqEjH4G(me z2Rcfpj~1SG(5_{^k7EU4A6G=~#&^^7%9Mg`W5ajT+VgM4TlkVeJOW!HjoXmdvJOa9 zA$#|R*HO1#diR<*;R=<#zP7XBYdd`H;S>--!HYCKm;Vv589awlOBD!opST5~d5R1t zUbBC`yS<^HYj+Co0BAs$zm8`Y@x&NGS0k_Xx(&}=+pB!sLwHR>y~fMZd5kpaB1<(R zpZfadhOck(_5YI0_JU0A!{LSTSg(ZA+d(0O?t;eB)heLCr_i6FdmP?X^cUt zngg}6*xZGa6O(mFa+t6|BursIui?l#T(UaOa46YqzmU zWVxY{W%W_4aly%~&9ME>W^>TfokIy{9;Yw=bS9 z(x3nGFYj~3*e$)`P1)IXSJx7bsR{M1DA4^TTB?XB+UM{cP{wd4*t<8>{5ySbVX5bT zhg+Xl=u)q4xyR&&$dnD)Y;@(Zw-Ib;5p;5kz`q(V#5ZewpMG>s%baUUsNl-nI5xBs zI^BY+CRjO#92Fcmc3VM3a|iEEl?MQ^;ai>-(th{NR1kd9ad)^(In_A=RgT;qZEtv1 z+B_>K30!s~Rh8)6PW<}@*;P0@Yc=_g*YV=%$usxv4bMm0oeyj-ib-isEytOE?q#S+ zd+Ublt+5-rOO~^MRB$$@g^9LTZMewohWo&Rs4aVE)pHvbUfSAF{%ZUk3;8{>7IBo9 zvWu7;8ZCLO^UMppmp0olr7}q?K4mz=jc3DEZWW~9L-}W?qUT#veM6a;i43gUt`3rg ze>LaE-oK&qqSY?D$EM2(zF&-gliYz@vGFF{Hnyo4+H|K-6l+>18cuNqEtQ4~$!hHt}q-*7iJ zn}yE+Bl`_=&6lG24dJL3Em7qC-kz#o0GY#utmeIqV8boc)C^47lY4X% z(0drHqbPWQ+Kon_b+4;yklNDmX+_Ot1@LcZKLnV|FrYp6<_$Ntre;1my@4!b%R@um2>$6i zd}A`LUHsvfU+leq8)_5{uQ$qNkfoDY&DT*N&89K}mIbMa8_r~K@>dvn6B5PR5H>WZ z8l8eblUoTFo(9@fWsZVDd=XyCV$Um#c|#wQUssdtB1o~dL#sNw>~>J$PI~gOKBnGA`VV?!e1-cdp|6 zG|Q2k%8@i5bET-VRJN?hEi*4|29G_nG_vG;3eRlFIA3)kYTG+IQMi??ldVZOMQE3I zLvXb7hF_6?N8yIJQgMZ86b{KLwcuzWJMtX*{UY5GlM}jsFqRvzngQ35CjT%ThlT}a zadB#i6X3|Ig#-*Jbh>4jhkSEhY<8Nv&5JJfd~DiFH48^^C77nu>R_A>`H6niTfFgH zCE!)4IV3Z=9urvK-XlI-ig7ISw10erhvCb>X&M24@LJu?fzFc}lp=Fuq>3R-hl_;Q z``iQ~r$-*amn`Dxmb4HpXw1B}gO%Ckx*k-=;q-io>6Q1(0hfu)3p*!f)M*N3y39OoMEeif)@cKdMsDF0xqWObl+F5%AhL@r#(8V;>EV8XxJf~iU z)Yg2#Xg*8Nx^N5l@?=IvOMoAGQRKd%vPHx;-HCE~WP41KbDjg4=cPGeF^VBhENs(% z1!lAs*qN{lt}RIEslFZ#Dmx$%=9Mng!fSA}<@7;I!qr#Y3o^G=zqs5ykYC(7^GW8? z7Y>}{&^bEb*rPP&XewJ2I`|U&%k5GXrjQv(ija=Pnx-fdOFzqEGt;&0Sf%(0=&^J|a2d&>aSUgB(D5Cxt9!z?Q6~PNhAVi%k`1$*(?is-nn$A_Oi` zLWB_)SN$YTp_Hvi0Rm5579@o!vmG32CL$EEXh)8XSWx)aESbd&v@TNr{+Ji3#vPE8 z8HA`=R*QK(qGj7a({Qckc<^TBm zf5!@Kg&5i};9bZwz4bI@B>_AMX63A06j#LF{4 zVSwD|1;|@Kn)81LVaB-hR?#i^IH}1_L;*i0M*cV3=6}hNf%^71vl^zYOOX~xx{bDL z!GT`O;~R~r%l{uIl+}$2p_XKnt!ChwX8c8it+yWI;4BArd@YYx#t}zi0!}UF|RBc_Lhf!G~`l$*$XD$YfMX#uVQ+( zb?bCm=F!Nn^%Q0W@t(h$iVCi1`&69(-)IVvgHN>2L4pKl|a3wPh(Lf=S{|6@mFKYR&8^h*cc8OCW1MgWbDps5hQJZAvAh`$DfoX`31@=skD6^4*^u#Mrn%2CkzU}f#IEE$hNG!;#H5pNVkUX~nR zsB5WylfVsU65cqO$_)uwCn8NYm&>nrx7%{M%$Py&AumgReRnf2i?rYNM!W)6%bT2< zr{QcnIS(EbbHV=U5BB~I-DJDXZTL;iPiaV`W7$!~ApaMJrS>4%~%-HtD)@82}6q5842#m(5gcr(X^wBOF7 zvGj&lT}D*H7KnG{*S$Q!x`ww z4EVfp%2X|Cpk#3-Jk_ERYfxN$4Nok@cru%WGbhb$Oq+SDrTsQz_0FbnR|0o~GZ>(X z=B6p-X5vo6hGh%VemnRfvpO0J=w?G?z{2Pqq}Qr{)ah8RZMAx3LKuFTMAEo!?3=z-^PaDk&6e3{!|gC zOXB5!6v{8)@Pzoy@gxGeHcB@xHCuyK^yrG{9(3!5P1b;Y!KqtO((zeR8`0^5xm{ALReMJbL=<=w}j+JUf*C#7>X_>v(xS zTD9+V7#n6vNqgM}a2H#GwkSZiri_SU$XaLAt!D4ua0_4)Y?!vX^C^jB0p~rPx8BI!;~gzziqieWl8Opcxgj_yyP(9>&1)Z3~DhJWlSD2aSysz>xylO^yDj> zJN%!PGh8+-V3GEKFkS?2jt^gpa(?EN1!^j$vHM>lGLD_?ZmSJ9XtTdr zAEPipx=ops8yvq4Fyvda-U=QUG1fmM)I<5@x$}z1KG0cJe}Sf#%270nZHu#ipdK3- zZE)^I{@mVP{H6`#gAkp!?uH#pLC``T^@hkBeN~Rh*1G&3=|G-w+-Q8$;q&Y?cD_?Aj(;rTpZwqeeD{Nn05NEJ2 zKC)?dH}i7t!pRu~PND{X)k{q&%lzrVN|}15=SY(>q4fJ-*hn_oC(^t)l08N}>C8fs zdE30Th71esZ3RJ9HQ@0CtaUrbH}+o$_D#}gId<89aDzCWdLLh;Q54OP z3p}JW_hf|`51qy!2%P82GN!+<>Wob z69*bV4U&f!M9-lbOxXu?%3pqA50)vdgE}FNB{NxZjtcCKGQ=^Wd@?@8r%`1} zIUWO}zohHn>8*NiT|^n?1XpgBAWCUUW`?lga3{NvJssK3(U^b^=pda;5V5|gx{5Zh zC}@F~C=eP$l5Or-A^zM|B^1@M0()q4G>{8`!n`+BpThx z0z2S^ydhWfPme2g*`))ZbLTc-B-)~&5N1{P0B3~JcM-Uv@Mvf=Lk1BAr<};?A{pJ} zA?YB0w-dS0#T054QzmL+&AIw34zoLO=S%7Ep7$R``_5pT4t6FelbY`!n6z`O-M&DN z&1$PQiMIKQ5yL_-k}^}Xo$nWEN}L~N^KhdutxDD$sT;$t6 zOFwDNTQ!X@b6xT)~9S!6C>wSpOZhH*0W4H~9L~C;IKgF+S zMeo6?3EgbY0KV|KX8r?ihu!{0_O&!e%t`grDOe~ivfwtizGEZ9c^7#GKCb2OjBtLg2@fKF z48&AiXCi8p@iRQK81X zeJa;V-ORSl0Pm#vwy$K*tc0%H-cike#P2K&!xbs%TQ?RRh20YlnINSZ$flmDvZa|- zNE@Fh9+@GLt=<{+(w*U`F~8Z0-)zO)R%D;fUZfWISMBLX-+}0A|N59p+?u~^Yw9fm z=sMR_s=isC-z?8>mghIi^PA=Q$(HB)0;KMp+>qQItM*=_)B1E+el)(Hy|fvBZjdy; zWiPdMKiytMBH_tjsLm~1ieU50{ zQzowPb2bZ|w3=%^=hGwbXe^%tICGKe^Wfn7!-GG2+)w~?Jbqjc{?mU79_+hM)SM^z zlPf2aBWJ%6?I238o;=vz4*u7Fe-0kkw;#y=xvp0N`9IrV=;JqFm_Xz8=?8;UR5ibn z#dy#^`QN(VL_Q(x5B$W<%(Pa0%_nZMzRmY!Sls^;ky!SHKC!-u2c`}W%zY%vX6a7S z{Py_UpAKV*#&`7~H8+#x&D*lPl&W&?kt0uK4KEKjo6k=N(*O?BXZE6nmt@;~Sf z{1NF2&*k;}*3IJX&Ccq#)_1#~e($33`@gloS)9)I_FhUyH_wI(WwD*Zq~6<$uf~-txwy8I}(lWx&a%TUB-=DmvOzj0ro8#-}C5iCc2upL|47p-e6NnGMXW(q)kRRIuf?9-JwHooi5|Li00w;P|lbJ+M^GvD7V zjY*o{8h;5V_rBu?NN#X253`GsAU$5pk4~5or8fdbz8N!&G`}_SQkBGgN6r$74^e)8 zK>Ppv-_mQ>KYbUW@%?tuX8a-2e0BWY?x*JuvoW+=y2z@)8m(%7#-ow{oDeR6o<9tJ zGn{W}zB>3$xBbc12OEE2@_k`NVfHsOh5NTm;by0Vx_#dd0Oa=lK47!5IB9ZT~21VLe$#(MoY4b@=cAeS5GwVwdc~$i)9-c zY9Qe4XpE4R1wget89Db?;~6kyVP+cQ$l(s44p33@$Xk~oa2n!aT-Bd=TE29pjU&lIBt zm_*A=%lce>omJ=-@%srfHs=sFQ#B~k8OC0Hn}%FDuFUE>Tm;BU^^?UTjjri9Hgg!^ zf|o^|je!w=tw_?0f9&mPRPpH5{^|E;ulHXao*eHV9PaJuOE){HundA9G7pZqS_b8_ z2k@D?;+yefNOKc*FJ8WRy8n{QYEg7%JNNOg@*kRhv>E$_G|$h-BZOZcu}VfxW2B$< zb2L}GhhBC53n*i88LW19vm)UX{MyoJy0~(NbVs|t0x?Q+cigI^P1^=xKB?qvh@ko91X3k;g^!~(@vXYdJ!XnT+ z_P_edjU#k{oc;xp6-MLme23&VEZBCDWh>S;k~T$7J}9u`m_6sK(-7jYnV z+ne2gs%_q?Si$Nd0l1ppS3E0*Ld%T7oC$EZy_qOzJ5gZjjsrWwi>gE$b;{2Vazj+) zrmN)S0C?u5j$$)G(N;mh@O|*G-*2wu-$ckT;m+pUHV=^kSWPAspnER)Lt2ET#E(p| z`LwzZ%7fgwm%c7aWU-EAv-8s`o}V9%UZ0+Sz1sg-&yHv_W3bbZ;8)+ZnaT-V1Fm%r zpU$t({-98e*TGN8Gy=?kC2s_dyiH!c*_j2V0dU6Bxu}Xz60H)^AU*O-b{WXiAC6u= zt1*L0U%hb>L#xcO+AOPkhA`+Z54sm9G zV&KGX!#S=RkNv=5Y{ony&GQR6B&MrRFp*b3uyn`=`l^kihQ%*7dCi0>OFO31s*sV4 z6k~n!#!&RxW_N0h2SI8luFQ8=_)V)IB`U|@jo%6arz;tNF+ zm-<(RwEGM(vLGP!+j8balo$%ne%cRzmeaRmqj#}aZKh5k!XCT5S3qr@Rap0^t=L#F@Tg&Gt7DAc}m8diN^Y(&GuSdW#x=m@A8&|LdgfsZI#-1Kag`Pn$pUrnc=E)pd;Bh zU>KBYRRG!>JSv{+M|`pU3Q^2|M?C3#eSdeeSi$aYZX>>ab9!`ei0?Px0JV>q4)(CW z+tBxIbUjLQTj65X_*19ze1_=dnks)xTV#iKhxP@h&$8d+X(s#oGS>HR7WX3b!qKXd zsTPcv8iO0)+s6g6GlkOINXhL3S(NmSd439o=}PXkyFW@v+K-_eK5U796{aKE%xeu; zPi3k#m$LIq%Bz1&GMF?ci)ECg`m&89r9tq$DjnCE(`s>Ez;X&|fb+-OEDOnushWF( zuigy2vyVg}=cQxZd-cpMqD)q#1h_dQA~87M5HjQ4}j`>T)V~#Z*m3 z-Bz3VyZiKao93)I?RvX^$)tJ&c-}x2+BE5WLVwHee%DZOv6;8IPjB;K^Ur$_L`=0- z>|7^3PxeFf#sg|;s)WFR%#SQywe>01&-?S^s(xRFC?<+S&nE&9b zH=a6Dnmo~ZzMK-eN~_IW5bZMr1_Qg;R6SR34!!2Cij|`M_uj4^huB?QZ=0puLesV1 z%xLJ-Xqd;5$s;Hiznpkhj;gX-m8IEe-4HF6ZGxXQ`r3o^6CcwU@bD8Er-L=$r%Y}n|J-vMYct0S z+HY??C#CU+-ku}a`4Ol~eJZ*#tV)Gu)Ed@v`SO5TO$AkPs;h-1hOPpIc=hQea{L z7W6}(#A`ir}s@82jS_*#j|NPRs^!Qr=&?M61tS9bzce1 zEG@5QR#jViU*_M+1oWGqo^y!CAIUjfsfaQAOg5(8Q`yQ6Xlzj9hQ{{+?)`AyTw}9{ zbwf0NaL4>7N=_*XZ@zMWADMS{vuHr0z8x%QtCkMMz>S6mED@RUVxS8n;m0x;u3IxA@smM;6dJD?Sm(Sv^{6uf%W*Ag`U{Jve z>|_16L-SbU>2e|mYj~!=Q%}ogmUE}Adei=FCX4t(0owX;IG=ReJId9)?Np{<^}22c zk44hQWMyb6>}!2n9{Y;-HLhOQ$>nkk;0byH6S7x}%A!ip!HO3{Y4%+vBd|~^;-?gg0mH&NjH5Y{rpIjx*#-DKVR!7kK zbZrxjH=3}OnwL*6#%AO9)qQ=m{``<4;SZKs%aZfcbfv1Ox%=t$ENJ`*JGnSFz5WK} zG(CVE-toK^zq!@ipcJgtyiY0E>YH~zeJh~xC)i>i+M1pAr(+_pv8XVEIp_R;>}+^_ zEtl|RV{Z?jDsgniDB0=+d^!Lu8{h8^EWWu@|8#+X#-G0Eolmd(XXDS|AMJFy8&nT= z5QO~TIsbqt?)2IlthqGarb<;Us8Ye(!~JKa_ba~H-d;-Af4chhz4oUUy`k}%Ar#;4 zlb;IuiH7`F#!*U!y6-rc3iXM9+rQh~zzKrJ9~QJ1PQa{|Ja<05Y8Z__`OtNDHz@b* zvKr{KYNfwT9sA1e>+fzL1N!7^P5^jW9o$r<_w+tDy|n*yl@N`^Xhkibn1od(NLPJP zUuhUj2(*!47)R4l`VmK1zpk;@AY zIzQa|0z7K5#tdAdWugji0EM?aP0)vRIGaVsk*d9anaVqgXZzMB)?vXF_0O;Ne?B{U zeOeq16<{6BX09*jl*BrJPKGGax=tp`Ne)3u3P-CCVM2-KI;K|1f@&5!1`9pB zUx^~jK5e%Z3S7f{ICsT$fiA8yvDsm2%3&I#N)LM@X1ShE#2p1Mmy@uXA_3h}aDkUx zrYbGY3UqZH)MmaqTz`lPt%No$Azdct_~>5>so*Pf1I4`(6#fl=#aS0?vm=GllDT6v zw_;G1SZr(OKZ3tGc^K6$rdC4f4KIP`mEOn?f7Ey^cUu?5AgnA37w}vqa zB@S-a1DQG@5pEfO;~2jxiAJc(~g$- z{d<*CerADK3H-0^(gZ@m)=_QdVMi^eF680QZ};*3{V~aZ!vn<3eWAVQTXTeg`FX{^ zEPQz9ncVC?M1d=l{Y%){&kjzDX^U2P&(L03+TC%Cn~7o6I_C#OH3X;P1Wv~(EGX?3 z&B5L5kOC(`U)%^*kK&_gI^|{bh*}k~wON*&S8WuB1fxcWwAq>L8hd$u7g6WKHb>%* z>JGF)3b~+vrIEnM(UEM7boF_X9*d)+ogXs(dTG_e)}S+Ljym1Ouqj6)s<(T8aopM+^>=q02o@cX{GKR zO`GOa2ZMPyl`q%thi0=Tsh3~6Ai==nhke8>9{+U)o`4Ib3HaB?f7E~e@k%VU(Y1U> zZTjmr!-3UCvkJRmHFVet9vc^c<@wa_kmpm17UtQAI}TXEMG?nKvXjeZ0*nKEG$^8< zB)@WhBKLH;PL`7iFj{0qezce5fk}LF)$rpJSZr=qd{olkcc|zzBZYBEO%2p)TF_)STFkdUxLsE$P_qR;XN>}y|zGVj-R1o*Ch z&8}g@1y;YTSV_rB8B2g1#5kNxB&IBe5}}#t8+m+iyd4hJ^VzaCoXs@h->7R!!XU1l z*T7@~dY-{>TVKD?UhARaaCHjoi)F%J%D#F-)c{kW@7riI_23G;=b3}2me`mlKp*?a z+3RhVQq)6Aky>*HP#K>k*=!u%sKxt#cw43+10j&6_g*Ctz{5c0p}vlYkU_%`b&IQV zOb54-T<*b%3s4c_*s%Hu32Q(|nA&du)|5F-e;kjTcTlD=$83_@ukbhrwi#Vs4|I72 zYz&Xbp~qH>v`V#2g(@yfcY%s{g?Q zb)fdyqby*Y0kQx5X!SQcTK)ER`O`@|6JHf8&|NlXZ!2NkX z0FJv{ zFVB8Fd`sXMk)h4bUURQb1JNw-zaF5_<``ytGRx$PhVt(}CgTZ4mVb&mVB}NkgKpGm z^gEk=it8uZ-5rcZjbS?+^ajmQT(3vX-CjIuj)qaY8~4|7^M2xg(7S_9r`K!_HXXX_ zr`_)L;(pW)<488zARcrFyQ9va-E4NF=3o$Q--6xMfkRxnwK@3V?c2lGr~G60{-4yY zhrKxJbvHgO*3U4C8|`K<47m2o>DRKXCsK zlJ|5)$}~3pAlFYgZ1lqZt_XnUuss|!+Wk&944Z@AsM+j`fl@F2>!;fq zb^610+!}_>x`>W$ZxD$D?Df0dc((~>0zn#kosPw3eZJ+c> z4f~|sp$M#QcVnsU`ibhTb}t$Z2mN-~?aPH4H5#LE(3g*Eg|b%L2E8&dZ|U1d+?tnb z)~9y=uNe*-{rYYkZTdB?ACcuEK>EW@dpH{OTJ_<7Zha7qI=%W}AeS%7?QdVN_9^!s zdvAo>u)guwT|a~RusN(Zqp&mTMa{5VZ;l52Uf7kdXbpSy$XNw+X(8-ab-sBn3XZ$m zW^}Qs%DM3p4TkkWv$;Fm_@=UcIuL-PXxJ6SuHWeOcl&WGYP36pZokuR>}p}9eMxX3 z_6-z&Rn|nUS-4KE!4J1@z5mCBy{_!_jRl13r`sGhM~$dG9EKv?`h7WB{iwb>?Cv(| z_|xWA#^Z-HR_+mws&}eQC)4{4`Ts`Ejlb9RvnzU&Xy(1fpxYV9;)P)>I@PGX+luAt zZVoW7BGU|n` zuqg_sd~vfs_-s*@`+jiO3E(JfHKW$XlF9Wm9Ce{A%h!p33gy_gM%~?J*lzY=strbe zpY9ryPkeDBDt7QSF`KnH{-yIC(KX)75csLr$N5ie)bid(B4F zk49qrHAFcL!$D_*P}G_z)Sa!nhPUpTvDnz1jc*IrPpjLPdta>D-B#EYQPQus2corh z*8xdUMd} zj2gpkJKom1{NO;DCHAM`_$Es-U?wU2KWn;P9p1-GZ@60!s+MSC8{dMipOy&ER;Sf& zh){{Uop{jd><)%eHyXrZsdPto4|v~yVIT#Xo!-Ven(JpYXtqbKUMCWNnbNLzy8Xc@ z>b5$)C=%K!rr8cn&an{u^< zyRxOeSakjVAKvc7jrJ(oJZ@qA)O+>%pcjs!!LF!ay}>|q>p{31HoDEI-i|(Bgf5uN zl>%_@ix9OfV_Ej`jmu4cmgnzkA@_2xbl4pX8=^&RIv1{=QL{g6><;=Z5h`-ycjfkI z@_wxMI~_4EG+AIg&XWTa0;iBRa8HfJ-wMNSz0+^BH@+2IKVlZP!~%|^X51gvhgjy_ zM!(yZ`@Y%kw4#sZJ!sm)x~zv!{>DM8HIQp~bLnsWw8R)3^}11iSnrR9Vj{((e!D-| zZS|sFtJe>#%;oIe&!bV)V|GOwiW<$0^%(0X>UVoxk;GxY(;l?Con||XTRl-{A~6cv z!;k81cg@zg`$g}6tiaZA)bF*28+(3TKZB^*isV)iV^FTjMjbx5s55E}!;ppjCSjP(P&rR)Nk}#jn1e&+Kn1= zS+qp)j#t)651x5qe4fm`m#OZfK=PK}<{=cvmLc z%aQwp+!y?26kdt}Ax61W0Npo6p3mLpOtZnAtCCSzK^rJ2BX3wOhk_f8%9x{q*8NL&RQtAbQ78jMqW48F#{7 zUp8c~(}p>B05J&3C(7h(F+WqXM{k;XpuS0%y$jNR8F!*Q#}LFmF`I+8VU~m!@`d4? z|MkaNa-H2sCoAsyrjr@HW)!!FyYc3UCECxZ)r_0*Zaff6M?~T7Zdf0MqJnnAxY;KR z_sLbV7+!Eg3>tvQGQYFfFxwuj^27@8TT<&h|LlXU0K21JYK1sUK!0aqZ+0?>y zm9onwmn0gGMx&p+ZTGPU^QlGb3=|L8nk z{|{y{0c#ePja{mL>E?5|(f3ykMnGJ((lE<1ebsRsr%VI#(6E{-4fY@y<6sjA*VbT& zv#NO>dlG<Cn2+kW*y@@aOk@nEQ@wdnKLJwbj3N2BlD&yLCsVSlh+D= zhQ(WjvKVyWIUF##Ggr6s*~Ucz^S7NDEzH!w)UUfw=4QPxdBMbkQV&OdchrR4ZbvMON(Rv-j_kYGOUT*(+kAxPmAnj~DX@Wg( zu*uGR1YeF!3y;OfC;54UH@ea=0&_Bdtg|HymwO+BW_oYxDsAd&Gxdk!oy)DI;6m3x-$AMmYzZ^?~9#H2Q3VLey8|N zr?vIg*i8Vh?cD`n_i#VHNK4ihQ7nLd_wF{f!Jtx2-`xs6H|y1GHJeSAo94MXt=Qhj za}hKaL003^zQa!KsNi8QZR*%dy~JZPj_J%h=SkP2*1ntHpjoA5Y-1g7RF{{xHf1Q?#vAN78VPu7$L8k6Z}LVO z6p2PC65m2i^D-Otv--woQGau{9Yqk!v6$9RAPqN0a~(_cr+A-Z4_zQ!FJ{-E?~okx z60E2Do0;k?W~%c(Q(d)S!in^Z)i{n;XjwExRj`&@Aw*qOg6F!nV02i2;W3!+rxWjx zVNNBlj0>e2WH&An2sOpcSs zafEFIuiMHwS!pf}*gCCjikizN7p!$LrK69Cz*iVfrZy_RgtWg>k6eu$@t7j4Y{^BQ zZoS2Em}mu)jZnEMKznR|Y*mV~%`I18A#fHRq97bFXz(I_a|)bw+kfId`-lQ?m~Xxb z%X~mkJT@*cST7f)sVz@Fy*Lh7LPF;fE(h3n3X?W-V7C@*RZxHP%5Fcr^g2;g#Nf*n zntj1KK7jhX^k4@ISjFrT)T7nrqx*_9tSQ<6*0vR^t7It<$ElTn;!UON+=3}kfl<&l z1(@T&l{$B2ng7wR?ry7(-gR5HT&N=1%M!<_Sl*Z_R|36bO~IvWRar3w-)hi+tH-|X zX{*vD*FqG@p4d2!Fs9;7&f$>;ky(_$yA?30g?~Yh!d3lY&-deRWpBk6c_AvE?w*a~ zRK_rCi>d`4hBFj@O@(zad0yopSQ{)%wSO*`l>32elI+`Ky24%5v?h!W7BQl{k)LJkJX$Ewcp`m{=yA zEww8cS6C(Ywd&N)O9PQ7SZ$NjH{v+(uXL)k7M=!M*qX6_HZQG`@S&7&dfJeO| zn~$G7`Eb=Odpf@1RrKg&9oB6iG8*D{uL-_s)3lSkhM}3~6PU;0`?nu8CG#9&vsop^ zzh_sc0j+9(7VO@qniU5WgB*q(J9_CoA{esnG8Dz9^*Pem=g3#}-8lzeTiKt+;4psM ztjMET!Fsa-H0q*md2+xyj>F3m-yT<*hFRSzYf7a{xcIDXR4&BV?jnY#*;j_A&cCS%VMb7~TqjFj$Si=nRvr)>7xJWLR&I*MsAKx??#puMNWI?_Z7Zzyb``W8cp{ z+oh?5XxsFBvp9}pxwN`!tuO`FSs77VR=c8VFi)}ufwdeI_r8Dqw_~jCeVISReUDcM z`sEZL_Iag~71}rs7e!MR_+awJ=vv#lv3c2oVq4_OE9w4#9&?wzZZ&r$ZBCL_^@8?o zH}%kengcI4Mt|I75|a0^RpiFSy}a?RZBREcsqCI}`*cRIm|hJVVPG>hdJj=ogdKym zdEn~t)r-uXtnvR(vaA;3_2>D??9zL2@n=Y{`D9LJv+MPIIgY(LKV`E;(@k*;ViS34 zSU8=*FhR-R1bG90x0Bm3PSAbI&R5Ox`S}Nb>|%;pr^_Xh%J#fNcP~WBm%hnqe;TtE z|LW|VdY^`IqH0Qm^nD-^)eLdG(Zuipcn|&8EoUB-++*?kRfJA4OG-Y-o?&gETOg3H zccV4W2Oe7+VbZ*Z@Kt{#g!)LoGf=s{{7VnIr~RO~A`)-Nd!ch_V=&ittI^cPQ+@G& zw+@?tEkPB)oMeY;f(H(OZGX}G41B^op1^80A5GjxH+d48FbDs$KjsiG_YCs;k7k;G zl=c46X47J<_ZpM`9a}prre*?M=NEunKVR2iFK74>b=>lEN$a7^eDUF@#cW0H>JM}^ zo;@G?2!>9BfYS&8M<5x_V4(d9vp$x8p2x4TuEE%AB9rC=&dZ0$(8y^D4#xWq!?=UX z_*7|lsSkZA74jBFUf|<*ae-cr{r&i~;QLC1olJ{hV5p4@RN!zQ?ho1wvTv+^B?-G- zlSstV6fTTDQBE?(J-2hiY5X+jITrUkgfIdB(C}#&4o#;mw{4KgFnm-v{O0w4Fy~sg&)Gc$Z7DT8>gyp;}BaD zMd_>AY`MBPJ-c{yc6R>Z;^^(+53eyd2^&)OiAzK{=|ZY1SRC`))fKk=oi%G;;6^d; z*a(;?B_T;FOtkrMegsdI^QIerF{T*t0#1?$B;6{7RmBexV5%pObgdL-=KmPlvtGG7 za)I*ALJk3Z)Y*uijC_g=`^}Ojk#zYK;@iEY6~f~1j)k=)T{8G{4{I=S{j-e%II2XR zLK^6sDub&Y%eTJ$*3{j&xrMI}KqCM>@ME`Ftq}k@=G|d?ao7BbD5sr&8v?O?2ni;~ zr{^CIPfkG49t5ogbvJ4Riik)Eo8<3+S3ohjZM_)NB+||eLD%kcr{|5l$Z|Z-kVf4^9!Z&zSI_*Yd$z?z*xT`|;TH;VM+$3iDA8(F=CX>cq2&i^{ zfBn0+&-FfTG?7U=Mubm)^Qw_wSDzbXI`2F49;EnT(_uqhxJ~du=97_ur_e7K-261V zd(jQxeT;t0CuW5v1PKk5_I6>5#iNr$)XTxJ*y!+#{N4FN@L- zGCZ8b<}g$m11d~9x@iaI8Ehbxks`_rs>8t=gB60wVSLK&Y)-m=zEWwdfGy*&+;O(R zLM2f1eX?Qj9uM&Ix837JImyaU2#t@7wC?+FH@yR!%rD=o3ELvA@bX;-CQ6eo*dqYG zYp5XYAoS>oy?lI!0IE@{&5{gt^AYX^Ve{Js8k7slh*2_)o#p+g1j&^zo5MeCHEP?1 zX3)@X-HLo7Tf~EZ5*iAZ;9B<$L;~@&yCn6)3cVP!ZO1w>woJQL*c%SF*DlQRig-9W z4nW5DZUdl`CbBV$>~!!9@+?<0ZrXb$)E)xAVFuu)l$|<%qt|E} z?FQFeVr%($SZOUo6t)bxF9Wak{QzS?oWBgb)`J&gjvlT07O^cte=S!ap2nA$r`N{x zU8IBKBLM%E!<~9r3e z{r$S#$fdJ$^zOPTwgSOdJ*&wD591mCxXim>!(7sCX92epf0H~&_v{@DbE={0>%53m znggH^gf8e6p_YpOf=?d%3x+IWJm|1FL^SP|VD~rVn;2!svXs~V@$T%s$3KN_M_QY{ zSGcteShk;0ZS?fhI`=7F^%7!spWVP|y}TS)Q8HB{|%D z78{)D=^HhZh zwPI;J#;S)*xl@?XO${ao_jw+yB2sDM(l>XdV)Gy0f1mhT|Jxe+DE3out1#^Xtn{ExZY2hipsl*`ax)F;Kp7kKvQ|TQPJZm-Y}Lw(j10^xlIy zD)&4>-97<>?fXeI4)&es5u>EVWfaC`P$~p(^nhvhS-#J`i&3TpT_grw-YuN(wFl;I z?{lXx6H!Rw78xTi;dx^R*)=9N;)w+Wk598je={*>^?7Y3Ef@r~G+ zMzT!0UhwB%Vn5uOf=DC@W?7P8j#LAzUCz;mWMPhfCw^WN9qqPI7(HSYz+PO$<=i-MQtiaz( zFYz~5lxU@Kntmv9Ndu?x7sf1xi@?1)cAsBlp<0EM+P<=dNG91x@aKKI1LC&9*&xed z+1+M_Zcal*gvk7;DWY9U(UWUku>#i9*sl zE7AFWn6>T`xq(m5&d*K{-}k_WzWN3mrr&OERGQ;mqT~I@r_8M9A!Bd4_L?_>aNzmb z{%&RaTP<^Bnx|dL>QU^1rwK+1W--2hu?4>7i+JG2|NGznL-R=!F6f0vB{J^1f29gG zZ{UX=_r_C1q1;=#N&E68{&&x(J_bZN;_Ni9yp$n#B5pXT=@)+m+yD5l|F}3m`|!FX{iJDB~SPvxjB>h9A#v{+);? z*%%T%^v6>yb6Q5mLd6)X5Vzlpe;0^0x&9oC`|vJC6bASW3^X149=1;?fW9lcQzP7c z7yxFL`L^olXaHUUt0el1yz@7Bu^$~EKcd$(}kP>F=Ee?{@9(yb_Y zjhx&&tAG8X%MBU=!I(W`f+?YMP0&MXXN9mQ0e9s;PmW*3q>3p8{dd*@`*Gn~{Mchb zxzE%PoT4F?;5;x8I~p2)b}LpwSplhhgGg#O-TcPPK>{!63!mc}t-GDy?Vf^oelN`e zXid8M=n~A8&iGyM#XLlCf7fTOC&&;@4R&w;%);X{MlZ3&C$CxG5YiJirdY11J3X4W zEAn6gHHtT<@}&a4^g+%8@+~gc-6|%Nbjz4^L9}+&#Clqwi^b3GZ1X<33ieMB?%o|; zjzjW?=cw6~L=??pSFza7qUcu~eL+o!h9>BUHHe)MtW4!4=?m|1e;d80i86=bZ<^%; z-YuERNZ66(3uzkf-N$Z8eq_AAFJF3D_@|eBYJG^JrE-$+D8K`JIgkzuOcC|))E#A< z!6{EVtVbhoAUnUl48J$)V_qR9l6uYvZ*e~wl)VjSJ_ra=H3CuHRW-WEOca_3C(p0Ho!Amx1-s?j_Q$~9JI%qR)};DA!&iEiQ@_TcVc zpc@PeAbn@CJGZ=!M9Yolh*_Y)qnLObVE}s7!>ch{jIT1(%C^=*E~`Z4T58I18uZ%n zcxtO&S&4QLi1(`W`X~`jJuVH$b%Ok`h%i^EL}Yule=pA<#u$CHOyr}R)#$SlBX*(G z7 zZ8ES_94BuS7mZ{st5s!q+nS2W%7`}CMpx)vh~<_C**T^XEmt6Fv%lQ9vFJA)rEX z)o_sal;rWYo4)z`V|%Z1O(mkxMPmIm8`z^T=6@l+!VUX@1jx{j$2OM(OO4X%A8@Jnp>6=&0f zCu(VGUL@bAI1bB8))btn99B{1%(YdHNQ0nESy$TXp+48Xr7}g5=&et^Rec}cs;aGN zWipUp9H%y=c6Dx1=1V6Kf2L|!f2+AcSVh?*=F;S&u(;P%`K#BV;RDXn(VOBph2XVp zOq;t(*Vx9T;)Sgd^uKYoZDn6&J#2Ij%b0pp4MYwbl>cwcXVj$lqp@QL5~4JjVeI1VoVl7w6cXqTD4rUqWU5@!`Dw;b62%3PX;!M<20o!e?`$MBj84H zSF*Y^#(~VsMN=65V2y1k;eY((`)&$SnZn5AeUIa)yr@K3f>_Q$4%kXsVNDK#!M1|I zb)nP&QsSuqVHnWe;Edlf0Ux=rV$=DSo07MzOkP+Vrz{N9wq>p=8`V^WsI;yOlX)xa z#uoO=Xd++FQCzq15a{H~e;&sHYs0|pR+Z+ufcsuoW#!7oa%0L;=JpGq8ejjGXl^aM z$;l=~90y)UrZsEo9CTBOc#DR?-QcozLf5(30k8uW_0}w|vvYW8d}Cgz72_5E79QB^ zrT_3Rpu{egW6Z>yPj3H@xNBREAc2F6g91kyFJs_5hilNoB&S`DhKq54 zGeT+jk!UzVb>M<3axo@5^?s(1&D{r9kwszP`-X$4E+}1g@4#0M}B4 z=YPT=^57kL7}^TAe;hd*pA0?A@dhCR&1N#Xa^juCzlb<6nka*p^_anfvJ!YJ)5L^E z5nRi*SF|*)p0@%ojJP0LE9!J{FW<_G8TH+klHZwjMYR;vMc>Acp2g$Tcw^M2KTNT6 zX?1sm1;2e$ZqHs^Zf;&rJ7M#7M~t#hwpY80lJ|!NTWI?5eTGe2b-Ij2jgiV0vf4a=x0o(mwm^Uw^0iydKn!L#?#5e6yqXk-A)tjfW#XT%JSnGzh{du~mN zGyUJL+z|Ojd8b{x4V!IMA9P=7vQd#q za<&O^xX`sCUWi2$L`EvqdLPqIueUh+``^iyFN@JAe@do8gw1~UdVivdNe9k?9S>e- zIXK5gYhZ1trFZ}$GF}tKv$Tk8Ex%92u#HzcN~064{PDi+C;e`*f(?ee6&GinSMXKX z-<|)w+2(M2Xepw*1N{9~(=sn$lk!pClslTk+$IeWQ|DXp@tS2@#>PqJ;HSpNXLdQ6 z(Nr!Ae|J&g))kA|tkUjBd?IOIt1ek6#T|y1?6D zslR%@`HX73(theNdFYcbGwG7TKcU!oeruMKe>A65tdCMhRihQ&ab37&T1n3f96)1x zc<^)fvG2*6s?zxEye>ypKvc^Tjj)&ST_$m$^-_XLG;}WXY{-9ZE?2B-e_9HM9k9YM zWA!YDXPFU4bI*j&bnlYz3!>6!J&V}N)2co^g|<9sWL4#)#%Dp#a^NZ{i{_)sS_S8| ze-l#UD{Tw*a=1SO@JKXHr}a-?@$PgH!zr>ZrxsmPkrkhf5G*Eu7ptPP77)hvmfm#~ zbkHily7^avHhF_U?)Cz|dvdwi{r-ML9vH!kkTq8`Y)-lySdy4=4lOp4GL9=rsR3go ztP5@WL4v#WDGtUZR@m0zz-*Qy3!r8uf6HhcUY?M|3Qq44=sgr&`e|+?2f6I9^bbxr zA7^G{vIP_sF$a%uN!kRQ4@>1A%qB=fBQAg2mbX`pHUDSC`kM;`O233Zf8HV< z>7(HnZ4w`VH-D1DO5{c1FD1nQ6exuujCMLRS1hB%@&H{S{rGUWTH=FZ144Wc-H76l zQ)j#e9meOCbvZa3PQZB6#^W}^4raP>!v^Kq!9%{69C5u0Ss3X<94=7ka$+gn4Dle<8ne}9B6H2NB5yy5N3pKsd7Kki9>&bn462cg+`#;MDZ zSboE-a|o(Uj3O8XRG0v&=)^_$@1~Q)vOK@K!MC4oHrqBv>MpiV_q=Jdtcfrw*6~FB zEQcqhVL-j+G6Jb(ZJDYib6J4x3PHD3G)*VIX;HnXX&mBpIRMK-rvMBBe=OoMlq4t` zy`p?msOnU%%C%$1@#5HWL@AG(hrwZ&RH}UFynaL( zqA%V~eYjIE!>sRA-ABF7H}&!3qd^Rhj)|~NPkS0)eM~bMeuoUCdwKNC3Vfjz#gde{5`dM<^)_{{deCt2UNeEPI^2L~dKr}}x z&8Eg(V+ciBX?I`n+1Xe#SBv@HA!o8f2EkY!F_!YOIbt8LcY9)gVQ1 ziZdBSFZ%k6(NiULxVzh=t2TLQ5;fh>6Y=m##b4s!%m9Z=f7RnJuFDZH`6@Y4VrHHT z0+&S=rKw0N@rkVdAr#6F)`Ts$)G7FA%CII~j@B8k#CqkdirfgL9nZ$qlq6hrV*k#! z6udDxvSAn9T;-LN*ZfSsW!)w zocEL>mjOXde+)FGuMD%LZ?5;d=~iH!{aEsl(?FczXtv8y-UQ8nHUihl7#k7$#GG_s z8eSo)b-e6r)nZHCXp%Omap=+INT2c2qyUagL5YN@olzy9f~q#1O#MzSoc{7U7k-#p zsDy}84Oho@In{9Ii}D^3YGSN%t~`}A1tAg51@(T`fA^-4S*=iiZQ5!j_;}K|%SoEy z@DXCHETyQK2OLor=-;^50P$|liqjq82`0l2pwrk#Ops9p=jGn2XsX#ohmyJsf$`;35GeP((P=^Qpo_QMFU%i)Dd z?h;e7n5qHoEkJJ$3@DISU)}GS!y_NxB&(Z}S%7K++CDv2Qa z2x=BzpTgqjd`Xlu*kd(b3!lt zSmn0)p+uJj9)cd9licN0x~Vokc_}lZPz2eDSCb+W(RfBPId0lG+})c6i8O~Wu`Qme ze?`D!QX%$uv(zLf%VKGAuwh&Tgqk+Nl47%3z~KNl{qfQ!+~?!cCffm8*7|Z~Xvq%= z0xF!SYCQejuDDc-sGKUzYz)!`SX4*xi#U+E&pb|lu%C_59s7+)r}C#bE$L+C zf&)qoaoFc|Il9(TG8FQv7-fJv7@UMxf7ZbDRU+`-^`!Px)ETzBnZ>4E*=z$&-aIa7x=1|Ulug+qf3@x= zz25QdD>dv%tE_4aKuhE0t&^NW7rrd#Dybj=0d z2pEnbx*QXMnK`vKVuv~(xg(RqD6n8GuzTX8rg!&-J+1KF)Boyeg%cGkK}v;yZ1^?K za!ghMelKbvi>op^iEWIpe>Bxf^8&1V7jBok!TyGbYoGxbQmB2mR-c7mK&C7|fLrKt zY(|`}O%8M?RlJi$+2kZg?2i2^;1>EUvl#Mh8!3iMoz3iWUukZ{d@@hg%K_S2k;a4A zSx&4jIu(pb24J($_VWNT#c@)VGE@iiNSei~-K1UXN%;ryVw78=e~HRt@5=@)vSP#K zt6fe3^5@D`fwP4;2Ej~m-bT-rjM7qle*CSaPM$yiqFu4w%mjPW0lWL<>h}ibYT=Eig=!8p_e$a2^?^rM?+iU^U@Tmx z{q^K7;^YA~)4YwpfL`4$2aXyC%_HuqmUvpC7YfJ>W`%e#>~t$Y)n26K zReAIH>~0$VH2?m5w>htS;$ecar01`p7bs#K!qm_|-4@>+PlwvllQlOQ_AOZKD|hRTL!+REg1TUwTxv+?9Lu~sw2hqE(X4m?Z-dawkP zWRj6;34*T)hK#!J5t=+d)|{4R8Zp_oKi=|oKaCvt{@E8tYj(1Vxq4?)7)}gyIY}_U zK}Tgp)UaB!e~?s704STN^8rS!Az13-*)=rK0MUeMr;Nu;wzUm!77VdF2{&{VvHRc| z!|+8!mt#wbC2MB2Q90{M@K>;+k^z!u5h{M!a%}X}?bfdy-B_?2X@(~aN_hIsiRIvWUFNcj8BVZH(uoTf~)v7B^rxq{i1fn)$j6e*|jia~~Z(UU)TfS#3 z?b&(LzIRT~qa!ZnuRojXfLmqrM{Q2p%c+3o=dIs$GxtU2tGgB&ze<~5+w7FhZP@;;3wZt+#J}n> z+GpQ=hk(j!x{WilAAWk>hz(Y zCo2iS5&*-89Y&X97!iyxywoI}roKviVkX&wC8*RDKKv!zH^y7pal4axfsI#2HT`o#8=1M|%7PS%H_>zkVHh7vaJ2?3C zR7E3K*jQ{h{nO=?ATtaP;}oBI4J;sta{z$9FyV6Q-D}@(8ifR1@;{V|YkG3Nuu2M6 zeOBX53$q*%q)FbZ2qP&&uuezr0oAk7e5`UVitjhTn&mh^ z_6jFzyaz^SKEOV4K}EkI%1RBwe>#T#fz>zsKrEn56bkllyvK2p;|vT7UWjroYUQ1g zbo;|&GKCl%>oFHtBVhUVn-||dfBp1_7f-+W>fwZ7N1NUjQ%q&U7N^VMLMesQt8)-R z0oa6+T`e(lUwHPdNfVK6xlQj90N$%hYwrKLYpL^xe1Lzi7RtH5 zGp3lnb0M{c>3Jm9AxO{Hf7i_rA`}B|`*BmY6L7h{_;vdHWV?TLaeLhtK^$zMjTxpm zj4#40$5hYg;#exDIo=)CMB$@}8pa(^^y3Ddr}nRf=k4`OkwwR`{disTrIk-q;q`y3(NL+cQruV=OB^Wvgf2+rXfmse!|zNyK?5@Bv*94_gAbvA6RO}W4=;X~6J^p~I6xW1G8$0~06&pyMa~6c zRNmw5d^|q%^_D1;s5uvp->UAnc}Pkis+D7q zu_%cwb-mqPM|aipw9vMBgF>0N#ROi?rq`9P*9sYGV$QHzA2j{!787`PT#P?26KJ~g z{jCeQ9VKZ)u<4}x?6S!b37oi~7FMss-ch_7jyZ4}Lxjkl*Rrolamb8)R+!WDE;}G7 zbTST~NAG5fe=wfTK%eQnzQiI|xA+ZJqSnR{-(UMQ$kCoc{76$w91K!UgmSQ*Hb$5| z!I3-}efh=gYrH-?IxBW2eZRt&c&1rcdOzHG8Lpv=q9K;Sp6FI%kb@mWfg37x;EIY& zBlzH$jWr%3OOIuscu^nMr&}=om>}J1uyX_aVxynKf1u^tlaFuSpS=A3)5*&p-h6oX z^3|LD_2eqWnEErxCI>=AP9YB?0x`QRe48PBhOn7CM4he}?IXW)wl~b$j_wXGK=L?@ zAsA`bM0+boh|ffZ?rO>=hd@LnAog(D8m+B@tTHoD)&>=*LI$VbT#LveGh5*;QLBl$ zqb}=Ee_v7OBJH;RO^!?&4^~XMisVFLwRJhWOH_jM8z9SSd|NKB@us87I9}sPzGzi; zi*&IncO76!FWqEy7g+5zy2@v^W=dTMId^k+j zImF}zuHqvyM&e|(Z{o{~3VcvP{fF9fO;hV+e=t#WN0?2HpfRdsHOtl!4tviNSI9U( zdCQTSsa_k^YS$rUf!uS;zMv<=w;XO4#6B-SaZBWkY9(rWs_M0Y0J6VBvB`ls6&buY zBB9FQGNh*}DUuyS1P|=pc@a}~s|i*F&990E&#MOIjQ!f=?yV2}p(Lc~PPm&K@MMaB zf2&L2wn>0w0dWLLbQ;!f3|<{<#ngw8rOn5P|I<1g?lO3?ITxokL`rD4Yi@FwX9ihG|-S~Ws#l)$4ej@%~Sjn50i;K#GoVtG-{ ziay5+zKFMFKAQ$e#tc@EKR|(Ak>gZ0DpK$j4$M!+yJtLM*jkdf8i7;45+`x zbdckt1-DAIfQScT8%ZVc*pY1|>{`wtocjPX_v(jtglI8ZuEJTRO`4|}_P~5Oo0X}p zkL3N^w;xAe%4I2D(zS}Ddn?Nj`p)-L5;ZxHcR;wFDMLgC$|)$UJX3gp9W;yjpm9>n z-Njj@Qx0xAn<7i<_*V=kf38rmPncCr-Fffs20-HxB=>qE^R)yqnQx~|OPHWglgwZDb zjjl}&^0P$<10g*o5T;W|wmih?FuPt#8^9vHsq`78ENehveuf9df7p>Qa;FG=iG_h+ zr?6>lGMmlstz67n;dN?%m1~vbEOLJtW`)i{c*`7k*a%LBW3#;o^$>qKdMqt}R`~<4 zTyLP9D^obX0?&_dFzefveU)o*Jmf%zfQReuiy7o35h0JXcp_>e@hnBIVEajdXHyby ziaz31(CarJKED3;e|@bjgWs2al3KXmn!FlO^%}JF>3?3ryQkyX=>6dFnKIZP@!zM>Cqm-kW2B|HjB7yP1a~o=?e`bNv;aCk#eyOe6VR6E# zSWnH<|NIlLCcg*kak@z5ZgP0}>1X)Gb>#CQL|w!DLny^%f2&WE17Rp6UQXj2xXd8D zCc^2Uk_{Gv>c2yX3Tc#54}fIWPcxwVX4IF_)s1@;7g{Ty}ryqdO zvdM9bT4$)Ge~{yO14&*G!Wg3^lQw&1{(=zIK+12e=+9pVIYwpYGlyu+7)vZOU@yU` zgU&oVBmXubs=zeC_j`;cCv)SoMuu@ba&U+UK~j*6WND~DaJ0WLMD>JGNYc9xiJBZ6 zGGrjmW@cOzoEfVjkp|bO@$d-Q8U79-s!l{x(SHZtf8=PJL3yxAigD?YVv`~+GB?bt zz>&QAj}K9ejUffsZF!p<5(5?kmRlQ^Aat{dx{w8y*;$>{pBkcq0fA*jyUR_R90=Vg zAtEY7@M1^^1)Gm&50N;9-Rl0-5EU62osIoiK!cnZoxrL{0hWd=I@E3+#kGf1NJpX-F705&wQ+K&dlVh@yf#j4S=>Qum zoO5^-stx!QU)t~g{Ak>o|wC0Ls61A6->cYV%yj1C71|2yKMx=gzmO)Nt(Q6Ws_(5t! ze>w@#M_4Z|anMHUhk4QhxzS=j+Q1-3U@0Z|0&wf-?qHZoFsF!CT!UADH9eFZKET)^ z`r#C8ba(1I$T5*i5rlLWTy<6!+?k=ydV{5{4gswzjBpw6J%&q!f?d@8sGA(fS*1;$ z^Nb9F0)Z?DtP3wS<~o8L3b7=GPGHJ1Po%?y1bhwT-a+gzaa)RJQ*o0&cCV~p!=?!iHE{Ri)%LdqfQxBM({q8+-Dj+ycqwObpYjPwO4PqIxbqG2jn1QU@fwgx^CxujD zH);1agW7-mg2CD}{qb+ zh1h)>&hA?sPd3%@N%91)ydMp1kOOLH=dIxx{<9E}DM&a|4qnFKEw*@-lY!|4XPf5U z!g(^B@}>Ev!}pFogWJ0T9xr6K-MhQV5jqksBu8poaKb(zkUFH9!i&=Ve|Ru@w@7n5 z)nP|sO}J2JXCDQ&pjm@qS@%=r4sw{p-UKZWtR%@0sV@^^VgP?9Ec>(W1{@DesD8%4 zCWp%?1mwY7I;FCTj)MzFS{g%{_sIA78J7~~hNa|mi5n;$y2 zs;}LJt4I)U_r;dFUde@oe-{vMcDtED4(LX}ZaDY~4?sfxPl7TkLQJb^vIE7?tIEms z{Pjip<>TxPh*`fvm5*Qqpg&fv?d@-z@CuT}e(2*tj>CgQ4dIrK;4~v-6c*wdq(!tb zKq6EZ=DVwb-m!837F3w2n+)aCH`K)?+@oZ2G5c(~XRXOGS_XuseX!2-zez z#DW*gTKvJ*Fr_SlwcW;~$sr~qNvD&MBc2licR?rzwh+u@re5CWdkcxndSLrc31k>p zv)FCXn;ea}sv;>5v48MRKrTqYDLa*IR7{3l9Zq)Q2Y!zgr67PZ{m`mS4)+LnV40Pf z20a{I`34uj%yhrC^uhxPs1p=}Van^0Pn;h&Hj?UvuSe-K@ zx{#SmE1bqwVxL;aIj^<4T{G4E)+m!rjMifq^SkBHXPD-IUB ziTw!FO%A0oOYpl6_KHw3lYo#!7QGcUp0mbFUe93n?(HNSf8Yn5U@b?{ec0UOsKlKo z4)U5TNr0KNN`Pgf*%)}mIo^oOC&=?Lxfxtg35BY0cz#;{nm%m|>YyWb zzPzd}tWVs3y>L$o3d2P_J{~WpZu<0~0fd#cJ9-4`fA-O{0n2B&;~S6}m;I{yOqntL zH)2grwt-lx6$JT8N#i6^YNtS8A#)^rsx}8#d6!=gPN&B5_ak*;zy zMMToZR~gfyA#`-i_!>SP;s)>fYucL}8DV;mmMtr;nB$b-r3<5(YuLrYfx(J}i7hN< z4W?l>e+A>^M%dmv8Ll=Feq@$MPaZ#c038!EiiCa;m?lSBgKZH~N<_;K+$M?8N1&r( zslfdYw6=p8g5~<8TA_!~Msco*?FUb9atxDLV8=>n7sNIW)~qB-QR1^_)Ng6CiDs^K zVfT28^(@hxAsp$xZ*Ov>M!Xd6MZ|+D?+AiCe{)71xPQ6E*1E~|g~zoM2Pr8ZeM#xA zHxa~c5>G@Qr;`!H5_AJ3K~C*&oeOM(w9gp=KiwI$W=jVV!P@eE zf2`mp2hx^I7=?|&33Caae`GR6PZ6HMS^dYYC&*$GeE^*OCMOHDQ(PvgDda57Lk6QE zx`Om8f{jbB|-%Mv*ukHAQ8b2jn|~)cs}svmv9%7zd^b6sgz+z1J-{kHOPs= z^XRc}+H(&PKe3*t0C7kRkpJLuVGD6be=kN)Ysc*{`u`qb?o(N2AozGOaFhJc{z?(+ zsBpHwyk?M-Kn3`hA&@Fkj`Ii(M?o+VbO;EjhqFrq4$Wej|4$JWWo}GAV8$zm|z$D^<`8EVpnD990T@9WmB)e{?IW z`FZA1LCivNpG~gr>61{qmWZO!g6Op$s%Macw2f3|8YnRkB2y-k3R*h~u|x8PZ;lSu zG2Z$L@zqano-AvbCLVTU5$-Wxtvc&2$anasY_O6CC;?s7H3^0R`mGEU3mukb0sh!0UF{$thV zIZZF)5z;Lloz5-1hWxR0`TEc7B7M!$a`%{E2;%f5*pXtNi0M zH2nC((FsQV?`}r@@Q@7E_nfRb2z?G8KRDRYiwkY{Q48OHFnYVXIGp9ffocYU*y>;T z1piOd%X2sXlvlt0T9|?iCtXA4Q z&c^v-N1fGl?!sp(%9>$)Ylht%t=x08@}L0WpZ?a=INybos%zX#-W<2s zbKK(hpYqqPaLT?;$iuU^{(Uhqrq9F}(BZ3>ljW?MP)camcEZoMe}m~Q82qA>yEr>O zUamsO5Vqm1)bJy)q!E8q%5JCW6vS3;3%ra(CwdCsPj5I9HhTKc)ijN$tfbGN$H%iV z7;E?tHW6I+DFb1^a*IIa9?pdvQpw5I!U>n@2psDo;aT(Za5_Hp<0<|Wn-q@V`~Srk zFLpnUtF@AMRHBkFe_KsrVWoi>50RSYhw$>yWpFBod661h%lJ2lC98S4@nd+XH-@hI zhORb44`<*fi_IFjh6S_SQ3Vy*CShsY@-$t%!VlNGSM&{6Y=(=xBJFus zcDb#Qj)yl59>)bdLK$7R*Sp`>;SLd9y>>l1!@HHOW~*{Ff8LOf-o1SF-OF#@eERV5 z{kJFIU^w__`1GUEQ;7G^5FQnIP96<+xsOWt^cb%>3KtxP8t>EptuW&&i&D!j69ylz z2b|YOh_FmWKJPLw8nJHO zH8T*hHITw5e>25Au;^nfmNd}&ay1m zfA_k=uPR`=hTQt@q^JvFaxQ0vFS~^ zE?6<;EIyYJ!ejY&TpXPh#;0|w6?V$K{^DM(xm}NsUri9bE05Fg`kVUAGo0@@aGB$u zt6{gte`UNZLXU1J*kh3K0_wo<5dK!B!qhqi!EA>l-fnz2~?)#1b{^ zu7@oKwE9?gevbpL(O9!ZWwrfy^4-bXfBipie_xs$$C0J^U#AG8tcPR^NQ5u3p=DJ9 zL6AZ<2yy^QtS(g>=;7f3L@AMp&V?lES07-`F{hZ*%mwBO^A`8WOc11);S$@bs|X-7 zdLy;NMcwzvOA$m}xbr(3OXd zvPpCFjy_kn$YVr#sX4~tzXUyg_GA~~$^k@r+2B|{AJ(4towzl=IlSy^p?;^aGZNI~m)^7mg77!c0HW%3S9f8lgA z8qq(*-~W^D*f#egGI3p0jg(cctK4L1DRUz-o99K1E!i52beLEv4tCB~Ef^)WeZZys zZd5H_i~eu`*8;9Hik{_b(Hst3+fYiDuf=LOa9O`A4a?V}HypUucdfxjc& z%GV+>{GD#&Cn;9G7A@fbvJ+g#fA+L0UyGA);DWZdFuxWL;Q$&FT+mSS>T59&4xui= zb$!Mj|60U?+f-uXl)tcA?`shY4lWABwQN!7`n76rW9n&pnfwKgz}G6a-Lh&7m+e{wP_1Q6EIufuTBcyBMEYxX{>+f61Vho(PI6 zrzl(xS_$z{p@DiI=11W-?VE`2B=0)IPx_K?U1NpQ=64Q26k$k@Y!S-q;{lp3*9h?7 zi>GFbMa%4SBAFv|LCG5t=iZ<2Nzfg_72dVg3#s z!alF_)$$tohU>p|j4dbE|A5jlySUEgqolC=&>@PonCRYn*>Lpe&`=< zL`<*|zm6NRff;++BgWW99k>;qkIlWpE<=ve?3icsKmOjkP{i#*;g7@3CyvAVdAuFE zBX$KbICFhRo*s_UzJNR0y)v^!pV9x_c1e`GqSSh5t}J~0F}*^X=g;9KaS zy9?ru>zP=)~+;lqjoCFAv*n|J&Kdk-*`yihCalFp#_XewjdEeaV%YregYKRrz;&d96aE0a(?vuXWDQ$!#69bbiat+*ICI! z4~^{iL#s~?eMcbfgE7TpM((agT8S_wgAP6`WA?#Ipn=Pw@R~3%>XSF!uN~bPxbjQ| z)lJ$dJwG2Be^Ct2$2{}#1cfJvU=02cK!)3RQUP-E=HO%bxleye~?@1pbc)r_Ybhv4$gftiA-!pDQ&uyV(z%Gi^Cs9B|Xl zj-DRBrtwxIL|z+(?)r=Fk_w~_PYxdXBE^59eG|AsgN!jrH(!&dO-xzYHNyf~2 z|CtAgJ&vfS!WMA=i=`UF74bG=T7|@pA2IUY!vnA+`etk_a&3SSU`aJT>n06n+E2Qg z?*xka6Z9}fiw_GPJW>L{10GXmfpGm8<*ldV{p8|rua8fQWB1`gUdY0iGZM~L6|rv- ze+zy7c5?jW0{;K(;Osy6hvU=3lb@a*U0^ucCszrE+a!-pPXC=Mc6rYqulW&wXTmT4 zKcjc{16Ygy;AuwcSB0fAWaRHt-746)1W=pPaqwVUmB(IFL>ZnhK+KvkLMQpaf&b<| zhq^qF>hC6x=nR@M`VO~imbuS7Jmx9If8Jum7ryly47VAz-F!rf{w*#)K$1z4p*-nJ z7t9RP5Il)UYfhmxcSyzsGdsLJKYD#}eDdPS!THhpSvh};z99%VzKeP6bwCu{dGAb8 z(sbnEF1#1}F1Q^&CGqRt;o=f2s-b_P^kO0zWtQNM~@QukNY&qo?awb*VvJzT!Yk zAKLB_@;*VzrA9WSH=K*40yhaC;6pbH;Pnw(9TON{! ziG5wjtbNF}C6upl=qx8!>=&?p2<8bR0>Hn$e4lIH*mtC|XeKIlN0ALIf9N3&cX@Up z_WF1(Topo*HkHP1aSB^}M3Rn@(3t%s@U$7X7zg@?vx|Kq!I@9Tn0|2|m^;$jEy)8f zfcC>omlMu@jNASFW!L(K=>O{fmw$h;m;h8jtG_+Uw?!+VK1^U`Z%Yg{44}QpSpT^xp(IE?M6athj*;c zL4_kihk}pmcL^&Mavf!?gCV_xL9w~J!|uwF90|PlKX>ybyr1*MvgxLnwabzZx#k%} z-V}HM3(S|jz(hgwVJ7veKp=TkRC!Srn!C5iSoc7dakD z9`~nXenq8#barkQ6h-DiA`hlSC*&v;?s)mV_C{%tBGTiQSgMV|=DB%iCgy51nNBVz zOANrH^*FlxC&)RXap2)%k0{nGAFc=FIQ@d~RFBmmr)!>!8c_^GqVIao=m%V+j;}yf zsLyz`SRsHe>ZYXI>wg6iNc*WZA%{M`ZV!l*7F0A`i=!C|f1D1Y>m{5Bm{_6vZHT?G zm@Wa^h!%|r6DG&qz_B2Nj0cOol8ABp<>&Ln2Mj22i=w%O1JpNz*z6t$_hdW9V45 zqe1Q9YDQN9u7!owvt5Lsbx5n%i#Y_L&8Vixe)k<5wQDm0CkXBxt$pvGsId@n-C=5p zU&y<8|Ip39@PAFvv4<0pA>Nzq%O(Go_;eNz5&I6vVZK=&HxHBdhAUSZXUAs7Js}nd zEt`YrCI1{0bL4OeMBEDO&2hPRbMkD+*&-yb80CVlp061yz|thA?aGaBlK=OA{+Aht zFY~NoZ7`&-_#8~hV{yP1X8r~qHC6yCvce|G*=223Ab$y}`&V+e?iP$lWRFwDo+Ydx zS@)f-cey}*uT_aNHq!q9Cp^~)PQ-_Tk|OyZ_c^7T-m@Rs&pTE|As_sU5b&D2OU%T1 zaflaho_LH=v0Dj|;_}vik@F;C?E-~%0ZWnjVtO<0BLo!3XQ>?=ufZH9{a|nLw zbuvm=4yCcuFD)PYrLSVYFVFwF{}Errd3W86uJ(1Q_9s&=mg`nN!hZ7h9agZy?RfMr zpwS=iB>!@IeVsn!S;kt0X#mmm_z`cl@#AB~34+&GJg>=_sC1z0?f5qawbh98lL;t8`7pHZa}Sgt^HoFI5_PNvgemp62QPO$KeCle`+1V)t(vCzctFpG?JEPsuN zjTQ-v76s(qjb%ox1=kk3o=)aLNMyJNxG$HCP8YF}B7u=2pP-npOuID%6lEz=9xT%0 z5r`Z3$gEVf+>ph(31}?V$^isU<7ctg6RBZddHR7hG`5KKa0Pm}YpQhzY^k~flfM|H zA(JCweJX)IReuV=S(|k?3*=`6MSq6Gb7l@c+%=!cST91L7xDDXLGL4gK)nlF^^#`q zg|Q@X=hJJqGMxhGgQpWK_0TzBATcHUZYUo?z<1=rf_bit7rqyRsbIs15-vUowf(?h zNP;F*WqZ*S9NZ0F7a?OWrBwak7@>Q==5w{H<~1N2Zecs%-(!Tn83r!S4S$A|x@(rk zvF4cAFvnINy%?ofl*2U^Fi;u`a7BFU8Djh3JU3m4NOFNSXQNK0_E*=u2DSbI^eXdE zT_TEob`XdsUsH<&o=@b$5tJHWMR@XA9=+%$&)@7Kj$l*Grm>b98fqRdG4;eEp#Us- z;M47+s|P%b({Az)!^1{itbZyv-B{AF=7t`;Iu3wNboqUcpd0uQ6()dJfaVoVA=aEj zYwpt8M32f19lLh6%1D!<1dD>5h}0u7_7kwXL$Dd+qTt=ozn8T|YDKICn_v0iW3ikC z$!#w)JyImldS1Twp%)q{HsOc)K6DwMOh2qjz+fv?N%4_1R?nfD!+(U)^)*6zz;iaY z0ftGuMU%dE4lgf9^(Z`qLH9@v+rx_3AP6~rP8#6Q56Qtd-ROIIappMQgSUej}pawn_(aqi|zRU`wO}<|DT?m%o8T{Y1U2|jXc-_ z;gQk)cs89`cVEf$9)CD|h{46eY2p;@sP6(nued@R#*ZQ&&MVMHBlB%VwZ18{~xT}1JRyZ|Ro`U>~+D~zloB%KF~p+w^!UF9k(o*)3`il6m1`TozEG=*n-EiL!|{weSeILg{yXR%fk)TfPOgL z*Vvfk!PRsOC+9&jtr5)@8WJKp#jSd@5SkYAl{|hFgJ6a*zNcLCPn%30JQmL`aO6NP zzsY3G&cP^=fp2{y4~~U)L!qsXEIJ+NQ`&F#b~`G22Hgt zp1G+_xy!kOY;aiJ50?Au;uU?kFsljx1bo0dy+-xJM<=ddMTRcQnIqO1J}&-r&K*I# z$J0yhQB;Fd&|w6J*;}tMat0p%lH+mN;LyIGh3~2Pt$)nRopo9+rrqd!V6=!sx>~lF zcAR?Ldp6ip@?)=p>KimuY*-OtGP3Z&e`DFDXFl_LA9rn$^@}N2HtO#9(Q$V~rmW^d z35iGTvcAXnxkf-jOUe8s;)H?#p)kLv z2X-$NO^tb$<%CJ5o0XNuS4hO&P9Z6%Nw!0?nSbnQeEudAako^Y;e>IYb}Z4LSH01% zokohIZqASx>JSaxu4eAd#zM_G`}AQERFjanV9p4hKPF? zsdtIYgn3Pn$rD6Nf7qA-W`;z%*cyZb>O>>q+g_|GWj#2MMRU;@$0Bv8E3u&tDR|;N z(|;KOpxBC@tpPAG&4AEM>=W^S|NDRQe4-?w#tx}CAGQWi3JN%#AKW;(f|syInz3ip zV5;Uvp2ksoII12TOY>9ko&*jK57qk#fe+F4TyWnWD&8P-ki6Mu$|EKA@=EvHQn4UdzVEIPPzIq?~R3y$8mI%lSwB2FO`S-;6LlRFsZVCwXQ)^3SG5w{ruy$OSp zdE6+gl)5weafM>SrXo%t72F)L_tn1j5u4c850P2O z=Djw97Z$>iE9o=14$F^)6i#r#$e%z&HIw*XZ$kN~4i~dzCKSA`vu461;-pXE4LrD$ za>J-HNNKl7sJfE|8eFEu1LeK-mSwmGTo-dV`AFm{*vc2s+}wBqr@^@!KQa%IM*a4};xw~Fo^K9aT0b+2@s3&$ZHbmht z2ltR;Xj4QvwD5LAn}d)9)q~MCe$Xsze!gis6CoG_` zFvzR>=y73~xJ!g6n-DbjG%zbsu@-iyeRnEu6B+7punnGG~G0qCgMkEBwo7#Me760k7{(!0#k~S;CBpRUli(W#Bbt;QIag=E9p;rnPk2h~;l3$VQ$|oB^XK zA%`w8%%Vp`>$uFg#>_aEv3x7N{}q?()=I4f_2KRP4 zUS3bY;;r3yzDA&ja?MwUgfI&YJeXFR2S!q9Zza6EF`ycI+5B*xT%eddMJy+uVxPxd zVbypBak4>{A&GIwG?(X8oeaW_O_520h{^;hBtj*aj_aJQB?}8mY=YBbT{44OLG8%Z!~M9~Dpgq?Se4D(=d zsuFYAAu!$JcILi#lPPRB^5=ZS;*!4_lfNH(Qh$G0PFy0_&49RkuNEQZt+d=BPYNS* z*!g358QR|5F!h-ShU>W0E^;NIWdJgIal!W940QNxG6(nS!m}OnIB^=N3V^v#5M)VLcWyjJRaX)W8fZ}iqp`Zn`phAM^g%R|TA2_gIVQi>I^Yn=)(XZ)e_ z+kYCTXoLu!2)TV6&S2_L3YVLA3_T0J={qy)2#x$p!YZ{l=)|l5uLF5?~Sky8R$a2C(ZCH4<%aw{j8IXmHB?vr) zIQ^G;L@D+RM}+;))E~ZA!=tMJyz4!3pMP`V!QzUCkIs1>K_{? z53ooW_vgjO8bqj-22pXjd4;+8pF9o{4jLzhN7v1cPw(-)ATrtGCqKPDK7CGqe1HD( z=cBXJgVRI)>}H}*#idwPse+8)dlz`-R9qTWmGVBNOc=~;m%JJk=RYgudC%u7qG-=@ zQ4?!7J7k|}L#(X~>pwMLdzu0`9pI;%`mE3;+a)U`Ek z30#g_O;+dH=E}OZ5UtL%bggz$XEH5{HkU;PAIOPe>CrE5-~Iz^7jP+V-@b*Fgdcur zaCQg}m~Sp9wBy_csu;H#QJ1C6;J=$H%Y@WTVY0?lg~*+iWdVyUvCT3yP=9>d&3;Wz z+%>`lVKoi>_`{fgTV50Gh0B>N>Ao*{A{zCBhiKbRWPf>^peAzy zPUbtrSA@V8rkZzP`rm?BnMDf3OgB1j42Z$9ty=?LRa)A@DP7pMHCdL)Ld)82*%ljL zuW#Y|(;T@dy8l8aqT#SJhE}>YhtzXJT$@0+6St&7mR9B#JAJolk${AE3Flxs#KK~jkV6{x@k(C#w=)HVO*rD)lJrv zd0}*wN-!coID%$1d4G|Xjc9F}Rw@_D#vZjVt2&E(LzNXpUBSy}rL$>P3s*NXGnI3y z6`9LgCkjyxw~W59m@RG4>nNSLhcgzPOF~CNB&~gq=W!y6JCaWcwa9LSrxqq~>N`yemPqfE@A^u;(^-V=ZxHZ#da`v4%>W1ibF8Y zEEwy#XiOno0e=>5TNP!aQ&AYv)-}iz>#E_N#}`%nMqVwcWzopSszx~{bm3Cr@+Nhv zmY}m*Re*z-m%}B<7u8=z9z4)T4lGsGswOMJI)w#gGS8ICicG2!yj~}2B?h*gN2Ard z9A8x58EZPUwE&+3ymFCBCF>T9)FyMnYJeM z;EsdgBUB+>ksI_HKucvB50)y*(&_ERn^;q^EC5KUdehDX(4q@WuYu#L#i>S$>>SL7 z91Mf3$~2e>MJ)BG1*8_HCi-jY8zYI zs;pg}N`I>c9KE#{hHOf3!MY5d;5BQ zrrVYn$1O>=O0{X*fz@u^5(O7S$c+tvHNazFExE6R znM@$MTi0f?G}vmInUVsXO*>y;$SG1@xYSsYx_?w>b>389`$#El1?RCT%Sxvp6`hb^ zKy1GQa^;(&jS9Zej8ZSR{Wb)EwGTe@v~a!xG5`ipN+N2IzY{4Qo3xfXg~My$%GtI^ zwJi&<+$(S!RiTWsCZi&Pfy;f?r!&{8)RFs$E7jozgR{73%T=j*+=5aGPKbk-RDr=K z!G9TP^Gv$Bs+@wqh%AFu+DZ*L!SX(5gn{x%PsRzJNZIF7aQ)I0UP$V!w8Fw&YztXS zaBZ8sGF1tNkQ<<^J+N+$pr1%fP6_bNbyb@>b1jUnt5TWN2{=S( zO4MMC8rzU1cZ!t1ufW;vCSU{q0I&XPIe#`kTum4EEFk@O0iPoYh!g^CjS(M^dtir( zJQJ`WP^_SJ+bXX$s9sP@%BpQwkyf7x8n00gM9$uorAk|omS7ZA@Go%Ta#3Wh*4j0x z%w3l1Ru*3#F2$Vj7SUc>VgWq~%> z@5$(DwDqR5aAL2txquBx&Jc|=1C^QFjF*>aFrfPIwe_RqctNcZu3-OQx^qxA)8&G& zOB^;1Kqk0w78B{I;zaGL8U)KTVSnLmw}^aac?CkcR+Y}PrmC6@TvvE?ZCka%*tV&) z)J@fv@=M=Yv5QAMW(QxvC7#YQ66-AM%46I}&l`4z_Cq{xt zqci=*iI8Di#7O`1S5N7(x|&vwFLecKUDh z9X#6}d$C^1gx7$+YZw#gx2v8aE$$6^^B-}rY=UI|&Ce(~J$iHAKl#0TICE?Dhy>3f zFdUMBqsJL}+DxIUEU()}muXexRc-6CbyCWzEkIM0wg9inw(TE#+JAnFktEWk1MOG9 zXTi0rWNQ^Tbg50HESzdvAq*J)t!_%U#TxVN*Z6{}BYJcncZ8bX!t4J)@MC;H+&bIL z)TJo$T*0ezM&O&no?_s&rpBl;N5@9!?QL`u06~=hHQJ zmsna*Ih&d1ioulG*niyepWefc!cBqiM7ntuczAVdT2bewtec_dkA?kH3|}AuyT&`HF+*ljgIGLJ4wi#H4 zWmV@|g43c^-L`opOHr4pNJaKFH)H@+OQgH0KsIO%)-ha;tbcC7^8_ndHL0;BxNT)& zQZT}DHE0t&YLwJSNSk{8+IC6=--N}Yf6^k&ytCMj9UC|ACy#djg!O%$rHH*jXAi3v z!GB8N|KO3&rqdBzCHNTsuzPa+@ECf9G@XxPMQ7^x01*C+p9oPr?)!`bt%xGq=DDy1_sy9&tHR_^jmp9)2)%kHbIc zPp@2Fs5?vM-+c6u5j^FiPr)zm`yi5?-}_(f@SzUqAHb6wdS9*pPMhjn~1;7lNpKdQcac@d0JFWQD8hl6ryUgqDiHwjFM%MrD{lQ zAImykV_c|R&IogSO=}?m)vv*>u@8hQDJt;@K;_%%@|*W&LZQsSsk8YAFFh^&@PL_6 z;D4VFsE%aBQ|RX3;1M3*`UWKvGlTO@#m_ybQnw%w0@l#utj4DEwJ#gPeM4SnM<1&l zz7r&?Fmno7VV6pVcEPE9wB`%)=l%Q<(fes2X7q1xPDZ*&l{0lEZR1=eR9Y8} zur@ah+JIG_H)##7gRS(?)IGa}w3JZb(0|NKOJZgdgNv^WLHR?AuKLWR(J}*x3F~lh z%1u!!sf)6OwPad~4D5aoqhB0KgA+c$=R;Anw|DyT{N?GvSwO`+xQGAr0T<6Z?+>k& zqV{p6Ii9Na$v~cYi3! zkq3i^oJ`S_VO|hyRX*lgkp9Bq^mfo9>lVR?g%`HN30MpNs4-S_2}&P>e{-UQ0ueUb znDT98w8Cm|QcBF9fD7+X(WeUj12(*IR)Zoeno8EzY~jfdi0iN6pC~O$04}Vr2xzY0 zo2+G%UH4cWlC2FXU%rBv!Zznw3z(;Ff8S1Jltz_uOyBY)Qv0`<&R z1Jx8kU^Z+2z;8Fd##&yv1&hm=)@Es1iX678N-JFnt%|y>Oj}en?3evxul+|gdpjFN zdg~Q>`xvl53$VjNtcFQ5RxxMlndS{_41M0rrWOS_M}U}+z!QnnUGx3Cdzc zrLZb3;QXWrcuRGg$-3595>>XPX!6pjQkB^@LGF*8#cj^d$?@UQ>G=_PN&Ojmd3GMT z&Md1$nLBVsR4J;|S<%!&N@ufHn6#`?n`XHYUtBFUY@NRcCwDA@sef>-(x%PQvMwx` zv?6o0&2*+gx*20@m9=%bZGA*^j9?%eccjawvlRXVsDZL zz(v^JZOy#75XJHxsXyyl<%Q50ScO%VtEN%l#uQ*0WoZryRF=9f^R^tmII|v20D}na zV$54kJXz3F=Wfme<$qPAb(`wEfSa2dd`W4RHel5?;KwLc8CMrVR;{f>y7gkP2gk>Y zng80|-1toWCl-b@HLK9zIVK9DZBuQFa%8df`pRui7_kXG_bD8l1!WyB>4KPzE#MPoD3tIG zwUi}By+_>$PL4r>d6Mo-JNbC1mk`WgP>0hU9<%8hbbm-N+8lY9K$WGb72qM{nJhrj z>$EY2aV_}BbylfDWZ*8_ZF~ha6d;5Pj8xvKRvFAZH)-p@hLaN1b>60_5p9#Z8Z7uU zGin}v3o zib`wQ;E{BytzDBg8g5msY-U?&^dEd2&%jcid)OH2N4A?M%v{rPAB;P!I>@YwKra5$ zozLR0xbkxKwTJT^-)wpXh8#~VXupG>UjGQL+J6oKwRVz2!myo8J>hSp^a2k}+XAkH zFhvdKl4{E=D+=)7z@;mtDs3gfE#Jn28?eE#y=5Y~F0@EtsYPXUWrT6ov`9qYN`ytG zN(tS75p1f6T!i#CK~#g4NMF4I!?6&x$#hj)3kI^&!oWQ$+AN3l6;exNUD)DH%kAIv zA%F7C{b(OWCzH*DfB?s1ztLi#83Ot%71K%JujTn}~ z9%zJo>B>XYE@_aI7W09T@7>m|vf#Crwkg0yH9}NYwJF^5%;Z=-t4sy@@oVlyU!gST znxqh|u{}En9DM4t4c1_&_`wRM-8b;~SbvqGoe-sUbzK*xX-n70swp*i_IX>hb=uaV zD&1GzkE03uU{sJs1dV2n)Hv*D_4#?~e-yHp*U=}Vb(O-3C-}G$g!qR4QgBwVYF~l9 z1cshywyr$no#1d%|7NLPl``~eE5%^*Xfz7`!BF%5&_hX9Ma_7%kks+_I4>q^>wmUr zz|gWLuaQelwz_TF3TRz%X+avO7k{_0v+a;@RRh{iS-)GLi|4i9G z$2iVD?g3IWF(1n6N^m;T(Z={`S{jbR+)u z*I#!e`1>aJmo7E`;@#^U4&T3{zBSROtlkD^B={K;TuD}?V_8^mv4n97VSjWGDLZj0 zYs=3%93Q$WK8C2=#2SGpn1v}2g(hjGx4gyt;U-{gcs|dLIzC_qhBExXZb=)okLldKIZb|U;yE5Q%djDf z=fNli3lXM2Wo+h(nJLB@#D9{ZW$sU2l`nclX>|wYJ2&>?`R!(Tvl~Tb5Ici+iN@9G zwYT>H*`LoIVF9;bE;KJ8=EM+S=vjhw+UH>|9}9#J^9#M`bk41XUp|HxcIz2&;9&5u zgA2ZGX-0xeQUlLo{zvS4#ShR+M_)=v(zNan=q7U6e+IS$;h_mXbAN%aAQ@77_vp?} zSQRH}^i4ddQ(!SM%=`+Gjj~)st1vGrGnl-S;Dy9soy!o53sy``*hmcVo0M?-lCa@)Hoay>Th}R};IAJox37-4a1J^J1NsQ= z^dW(jUoPRWbpowdl}iA;*#35amA&VRfZe^!?XOx$HXYAy$XHM0RQzRiL+6$IbmO5!(lXaX&BPVE84taHVwSt za<~qjJ?qxgF@NipxV+t!8gDFAXdIR?;yrCz4=_a*6WpI5q<*IWdL2d z<*;_ouy60j9v`|YPSW@s;W<=cZ`ts&+Ln*N0vx5$+-ar22du$G1E*v0%sL42RgjWf zm%uwbqbHN!^8sIc{p5$QzI*x2Pd{FM`|P_Pzo!!Cz8AZ(G_Y*F6(svPbR7^?=&W^F z9j}e|=6|3S3c|cXZL;XE@A)+jXG@N(OD=)o5q7=2O4E4HKN-gpqkzFwjA{Zk=>G8@oPBh;X`c7&X_ ztqTdx8-Lr>cCAMQW_HpII!P;dVg#==&(&4y zovGO6EiD|WS%hG)v>iFu$$51~tc3fdYzDopR@nJzaDuQ4pogjiIJq~#yZbsvq0SbksHktEOZ)%nuA|^cFA$ zV1K-E$I-=CcMI$yr^_D^ioKJ+jceqJKwZk-TD=_?$*fT-Ay$_tmd3WtRvDl-U(CN+ z(xK5v(g`kc_*oG5wdK~9>MGnd8Wj2(xYz+!e~%EmA$!ISu$waLWDziSyse0jZGtD~ zwpf1@wdtwi3MvYjd8%;!6z4ev4;nl=SbyI(8y#)nywq~ux&LFKM0Ud&;w>Y7=V8Pn za~?52uis2N0{*^Y^;kZ_An#Fxxy%sQz*3=%XMfXVzY76%i6w8MP{~0Qt+RES(c0+h^1`a-f>5V!po}&`+N_Vd^N}cPsEgQU!us$SbtG8 zvVvOgg$FBFZBa=ZQ?5aHcvlUXd=xm-mbFb)J5{<jD1~Ymo7TOwggHl(vob@!L$202#ie~W0*uC z2fR_8zD7P9nEdU*2&V$p9wq`|5`Xx^C)Ndn;)=1TY}QtRLzoPgGWuY-^f6@{wa?m} zPEWzm=Dmc?%Q!i8c)r3U?KaQ=1A5b;b_PEq`Hfx9|OQTmYkTCk?LM5cs8`g=w>XZ-|pEthVdETf4V4 z)E(M&%FXLnp#{Y72n~Gqw=ZVz{E+5YhwXLy>?jQAIS12s{7^1t#}D-s!-_VslYUGu ze+kKaR3aAUl$X9Z?PX!oL=TlZntnV;{%)##$j3obt!J@ds8$zto>oLCk$ zJ}1E?x1I+jvM$VUaDOG?=yS@H1lAagu>U`um-pG>>|^de0x=v@MR4#TP!dBL>%n2p z+?gO%QVH483JV;Z=nu!>@iTfLf4I9vwu|`@_v_*wNo=n)gzM93=PLEGdpN1-(OE-1Ut2zD->)6 zC?$C-3&d(HhU{ETT=OV2c0{P+)Cs*1=gbCyZASFM`+qFGlR5Tzk>DSgU|}dVvk+Zo z+VL1_;qW*kQT+*x5a*2XWs`-#7;udJ2p-hEr`tV5q}!=X@Gd7M!8|zZrGhgNf*=v3 zb8viE1Wbv<1*@k6baBK_>W;uQ+q7@BycW4#x4ubCp5X||=v^&oaYK00^DEf9)&@9> zS zkq*O~i0iNC#a|WbBScN6YfN3dSg%(LDkRLqc7Jww?(@%wL4SD|Gtmnn4^dpsBfRrZ z*vEuDinq(2OF4J;F+bl~XfH5ke$dD{dk*h6{iXk8|1~j1AdJyb>#CT6144P^nMw%c zhOkO<2Y*6%k;CZ?!UK6$UN>s7T;9%6hw%JbyH>9 zu$*0q%6NmgYvDL`x=ZCC+Vml7c6wz7PhD*D-fc=D+RcuN+4fR&(-=A+`4@CLw0~8d zHtX$CYtQT$>OqO!6@v7qf=8WLjDZVL-G(dVngb7gM;mymMgprmGT1~uMTVMO$x6)= z_$nIaREQdxS7$U0{frlOBB*9KKPpW-5^j8nXVurRK(`mWw~f7j;!ZP8Cgqg%B@1aq z7N$fE0juZP`N%lLr#jcu0UQ%Xe}6y#LcF!yUKbMDrji#eg!FORVN~{3AaerhL~)~F zB6t9wCh}^*5r*01Z^ zIoE`20p|s4pvzUe3^=-Y8|mSRDX8llP)X% zdH67OSM8ShuJgq9pK=ew+5qCq+J#ql=Wg*){_9aoIQGsJV*jPG5=~PpF0Ef9x6u%V zQL1XHx|x$wFvTOBs8Q+SrPDfjr(_Tzz?vutHhww1|7*hH|LUE_4nhFHvM*cITpm{b zq80q8wlnaVE`Tp?HPO&tQ)T9<}n;F##uqu1H*?{TblwpGjPO=)8Qt z3!Bd6yDL}Jy>d_JxLd2Q!1}ys&!by{4@ob$nImkh+;ryusk)lzcR`45Iap&jK0V^z zYW6aeoOISIBSGvLLD2hd*aw5pyIMCk9hY6lj?h`Nrht$N@7n}n@PB5x?un}oPR59F zL<)5T!GPSEn89HoSMcc}u6N!c53md@7U84=e+GgXE}qlOFky_(ZwRs0@8!sN_ z6UkH#!^{G#W+oY31%Dm{rs`lm;2b%9@aH$t{%&Y+8)|-JFJWJl){WiJgyX9pfmy%g zXuy0}=@1^p;5cB+nHnu~JU9bJMwGc(fj(jpe zO+ShzN+`&ZnT<9T_P&%R!CrT|6gVLRI9d?F3U#{t@T6%u>VL2%R+1qvcb}eva4$3~ zbS_Rk1qF*e=MZ09ywQ@}s2m}@O5jPHKeVG81~-I8cNBLHx)Sfi zqGKF-9L270T7N`3al}el!3*+2s>q^ZELg5N7&#`qu1OchDm$YM14m4tnU=-G6jEy} zq4vVTJRd}I8+f?Yp;{+UhfU9Vh)y0P_BT)JAHbaKgC8$nJnS2S5y29dZdL~Js-hi^>D@ntF4bbB#VBk$Tr4O zjIl*|mwil53USsHPlfh=gz@F7IK(PBY8JB=;AC2Fl~R?7tUUuCMH>{aK7R=fNr(<* zJM4u;4}UC{f1!A~1^dG$p4U})jp*e%J1CA(7)P7=ws!+o(y{<|d+1I<+}%O=WVgPZ zugdGPnsxsz%s<)g(TM?H1{)nd!5Fb!lQ`M?f~S)ZBk8flc$O)@nXrYqnT6H*27C15 zqkgIFsC>DEpZ(@$EPIcanGw0-xl13JVDsh8?SFpv6%h|07^&COaFVa~2r~TP^6Tf% zF28y5yXUQ~q6z3ed;a_dzJjHk{mq|l@Yf+Xa7#$Q+&#Z(4eWGcVo%25dvM@C`qBod|)>?2Cj6|w%&uz#)S7BnYg>{nbR2)VTn5)G~2F50 zf1fI{z>%=K>p;ATH>6^|Qotf(mVt-ubAJ}OLbzo#V;TKPhKe<()PK$x5jA3wQM^H6 zf{AXGMI*cn4dzi4Q8tbfzl zy0t`nFsn5&yp^ixgzXp12;nV}k2B7UBA@PAxS9Wcz4@R2hA{lMNWTpK-P~QI@uX06 z^r2h()qV#~8pO8iI%t~SD_7%L|IP9(y!MndFv$vF3{-J!4}P;MH&?ssg<8~yjSFW7 zwp7jI-LA|AvJ^@#x0K-$Ee1^oHGfO=m+(@JcV#yazECq(XPH zlwpy*Wl37O+ubJJ-aU8-<9xkefuAx6C=HtH`^Ie2Fu~v5hClDiSngkd`+tB9D3tIg zh!B1P%=@NkGd)4fz!#_^@~;>3`Q<$w?xtS2Zo~lCT|{D1VC!4IE`epJS>$d$%2|Xt zkvPRt(J4RrBzi&ZO8sxQeD=M0>jTxU^ilo=v+eS%Ry;ku>> z4lWo%Y{O<$#G)qf0WQ~q@P9qhg$@!2a06)Ku~gH67C7}t@p6s5^sU~}79Op$-WokL z*Bn0AYcp+el8c0s-arkZOD(RCq!o}=qFjg9ODwOoZzSh)c*pj@K7m*M7S;f)r52br z@Z*3-8Y0f)yLN<)IbJI7`i>u{c#`M0xwbE9%fA!zA2NLr>2fHmdw*5tcB+I_22*62 zOQiSWd9^}I7c2IYWf!Vop?X&Q2`1@hSl&KFLJIfuYX1t$JF$x@5O@4xsQ*GtL!9HC z|0I`k3lRZ5Bj}k|cs@SD2B%Lh=1<{yk541ozX`rJBwJrK!!pHhm?{b{xp#{D3WiN; zqpY&Xz;BIY*dQSiQ-2o0WT)-2Q>XCT@@D?!<-mUMrb6Iz1*`LMT0SDc??<5R*2Sg_ zHjX*r9N0Fmxd}nrU^x%m7g?egy&?o5*WETEO$q%0|HJRP2>U}P*Uyy7p5UA3PXh`y z?B-w4XD?!Vc)#zhcOia0`=@{iokxSP=ms9vtWf5V4s1}jrlAgh?Rm#V2w&bI6I;w zk9Mcufc5)i)lb>(-0Sk!o+ELu%u3IV)L?fC#_|A~k>;L&zmYSO2NEoYuRw7gUZ;oG zH!=$r&jQVWrkdxLzv`k}KXk}SDYWL+Sdh}x`W*2sgnutpAuZ>uq{ch$XgIT*8zhY#All!&xg(!nhhZQi@y3rNssjxI;o1OHoY}jB(2} zQPdVr<9{N^9+aP0VB?`P>Og4LZJX3P8uyi8kR(s z&RB#=b%zVT)wMZWM}EkYEHV(wTHk*B{O0U$>Ds^>i^1ca1J6|m+VUU+)*R*vEKEO7aqJ6Pr>5!p-@;iEy2F9 z*a%Zdu6a@Xv0;J4*mob%ad;m?SKnoGzrvGf&#fG2E6P&9IzjQ2$_U||P`RUA2wgIG zTYrdPi=uG!fRVh%@Y{^4XiYsqHt}(yM7%X(dZ-JEQ+TA|wk$0HQ_&P5H*ho^K6xg1 zj`;0f9uV?6hT-I2;GM%^*`zZ>8+ac#wS(vft~&E66Q#^*)bF9rc#&FM!L|h%lbYTEuK%Kv7L2`}lV1j`usrdm9{)nD0tOvnV@^pzQlhM>I>WYvi zJ30by`%lrGZWl;Yjn9eOlK4WJLo>jI0>2;+I$%j%V8$y;EwPwf0Qwf^yHy4Zp`(~S6gl_oN;J)p-KW&~S7z}XTW=f6d?uaqM)*HeU{86!-zo5n7; z6q$;Zm9DZ)NN7d0p6{GSau2=c!Jr)kn-G73%&EZ^VQ;8%;1kl)(qJ@f5%-5k_#=9u zH$eb?T24Uv-Ak^ClQMTC7%(lglNi&-$fCu5EuIqvGSdlBl)YuTJZc#7sz5ma8tC;S#O9OI?aFTh(Gb$xc>16LlHISNJgc#tCa`1=ybI z^ZmN29r3f%xSmu;g$_gAV|mhaBE}58zOMdRLj}xSd=o3?6YhJ1mX4pfM)1yQ0Cx%> z-05*oS&s8@xu(n;5J}z!xT@4?VoOtiT0VfsBP4%Of@kII zaqOVS8n*=&9M*tqZB)#G+SM@SN_c*7O>z2*DxKxvdOH!Eb)a#D!yM$H^@m$!(_!sh z5n>>r9M(mNIHIFL$zFGRq-z{w)dSTL3&y1sIk;Fn_#?LB z_~r&I2D=!C7dTnqlSdJ<%D;b&t{U8hRr^p~%sq5^CKy*Gm?);O4wz>`I4`;9zJSxg zodAy{D0XPYU9!6|Q5sv->Kv86h5Xz&SkdHIK_sWCHCddD7x_zo$@tk-om?BmKb2oq z&JV>#CP~60o+9`?v7pg^tA;|%JB(xzaMMf2z;U(Q1wz2kAvi`}Q5%0)(EQ+$BrSxu zqz-Fu3^XQAJxOCFA{KXQjm&Pada&-Dn#HydP$ScX3y=SV+Z&<$eX1I6=K970HB_TF zS*-e6E*#cc)nJA#;)8a-f&ZN^!)l;S)TpcK^k}p+fuez-Ik3z?n-#gwv0;|0T-u`4 zg(R4qU|`Rb*ral3C(3`Ii+{05eG1d2N?;L(u*BBC81=$SGFwjSVKU8k46TML!KuRO z=~Vkb1oz-}`T{mWNuL+sg&9V?KeX|2umr5_tK_uA2M?UrR5^~=w{z&~s_ zs?mg}P0aeu<=-#w2cTHvEH)x_VFW|N1uQfzODRnOM>aTR7zb5Wk~H6a2D0T1dKYoB z`!D18a`R!)le~XPioC<(65RjKH`+$fkpFyr@if&r)WCrQGXxs;v@k>$8q3|W|3gv} zl=nh``2j{LlW+`kc@PH-PF&5whg)Uj_tN6!431W{C76s#mjP@hr@?rlgu_BhrSp>PwmakDOgINutD9;r!)K_)`o)=8EgFhzaqBkU%t*!>zDuXpx&Ko-XO}S zHXm(4mAil1nvS!rLBU!SuAMF?w5Z-R3rXlF*Aeh+WnsLjCNFy zJu@}!@I46K@fbhW9#f823DppmmDS(envnI~*<=EI+7$g*r+RRv%R1N_x9-*1+n3KT z<6!jpv<8d2nf__s$si;+Dhx;s#)AVQc5!}TbNc%Z%m?r<{1cR#EmZs+fwJ%9J}+vguHvxj3a zWv(MQ(lyxkSJA+EoOv*Aey{5#+r4n$fFys|nH0apnA{xc;{JZ9_xF9;-}b3(CnzKG zTauOa%HVW48-$?`uSlcDi1W5BYXrdN~30gjkH&SSU1d?=h8Ay}JRS__X4 z>@FpZSCZh26H_wqR;W>yQqsGfNN#J;@0FK(vzeEp`F-T&z_S$vw&Z!6J4Js(k%QA; zN}6kKIJa6eT7bFPyWIac7EiJlt0>M&Nr9I8`1DzJl5G>V4czQHwbdz1xmc;zR;|Lz zYVm4m>T2dGgts$f=pJia>4pMAjCIu$>r|3aYtl>LTu?ljXRCQjHd&+ z3KE_^Sn6d-aD;=UU{)#u7utV=Rt-jrB1fGQD$@VT{3D265IKgI=x+UEA@wg!w7^we=Q$#FV9KZIYI})w-x`6p>w7(L`PP?#h+wSc7Mn1L z<+-8)zQh2aL?mV>a+e>s{ChN&ya!W(XkFqE5oN##l$=^!mRy2H*10BvQz3dA5@Nl| zRO)tLfph~Wf)Xlx&dYxsi`FnLjwSO3OMHEBxzmz|Xdpz*{l?E0m4#*gGLEl)jA$fb z^#exJ*_YO;H*>2kD%qd+5UEFQMRkDKk513KAe2?_G(gDeSLDC7C%@@G970DnAUUcpm*wZF2!Ra>w>}jL(04mu9!oUp0 zIjl5T)w^J@wdmUxSNvyjGO&BW=D8CrNGo*VI7k(4O7M9Y2NrTAnCC^nAxZ}bUDWsA20@_XMss>1EWkfIonRX9-Po$M>pxqAE$PCy_~m~ zpP#UDT_&EOd`^C=CZ~_<*OTQJzc@{CqksKhysBtTq?)^-m9?hjT8yi$LyJCQm7Mqr-)oWPkLXH64I zoTG_<#&1ZI%Nv-sPt|-0X2<1X>8fdy`5M}mXbR2@&gUtBeN*OvUL73GLNMu^ zlcHZC;_Y4eP@CzsF!)sA9MpM@9gYvUgC{-$As@$UTzN3_6PjfTnwn}-V>@Arz6JG^ zhUvv-%{YIlDb|Ih^jdcF>z8`WYhA@V9(sUE5SHM*Gb#x;298hxN*M%EA;9U-+*u}U zp#35j-K|O(NA*@^ZOsDPax_YUFbacG*;8r{s?xrUrl1@ca6WqUcyjk>M3=3syO_KzAY( z&~$97Nh8Vzx@r_OF4*`M%p|a&3d68JnU*s6+=F}1aiECS2Vq%928gPwPHvWq6h3YG zttZPEhfQTA$Wskgod%LNMP0G{^1-?o^Oih_AJy0*kI~;WYiFLunWAGAYm%e4^kD0J zb=Q9x#jM*qTxW5Qu2SjvXOFXsx0fH!UcZj7BSfepHd#{ z2{OE%84`PHuOf&?>zf`oVx~q-ZP!qxDKIntrJ92gij~EcZV`Onlvu@LVE9=tnrh|S zBxA4rP3(HZJ8$P_AW2pJUf5U z*81x@=dzq&o-Gzf*XjTWr@ZG(|Mni1bo~rI{c-wq8G@fZ{2{wF=M_oK=MC0>9NX#E zs8YB_|Lw^W)LhTM+19W?;JfK+9~9nHdTspATlwFbkb zG<7fOkv?61Nl%c8N72~BdT=b0O(}oshjWh*Y6~5az?xLh+i1@=tt?>)w;dy;KctgT zt+SNt5v5<3*O>oFl?8D5Z?!tDuZI2VM{wN1Gy_-b)PAW>K!W4D_;g3`^0ZG=?*^b$>0V(t3m){PlKZQ z$A4j#&fyy;Cs>l7ePtsyqW}2s2M;p%wa!3ieSiH=mQk*X?9rn~iNx)R3Oz|=Ad|D2 zK#JR(K3n*2AE(bj7@FyHfq8$zn|%bbjAf5bc2H;!uj@mhnN)KCGf08KIp|V&_x|sg zC+)cnS~miL{1|6IoMu6AQ5RpQ%VeZd}ax>BUu_y+~Ya zoau%_{da5?*s&q$VXDq~+C^XsJLzU`TSCtRx$8tW6!1Xa@kDn>xb@VoJ6Dl5a^q^R zDXd=YT?6k$VaK89PvL*XbOyHdCZUypx{JV@C8&=roFoF9XL=WfO-}kV5h=W%&a2Ks z(upK}DS)Ywvn>=*M&3yQt?^yA0=$sE6n0$;xp}C!QP|jm78mU9hq)SB*I7q;6sv6* zjYfMv9oKxn3Z&3a+w3p`d;Rn_1<|EY$F%$WO1Fw++X#%#KV9}C zK;?D5g>>Y#zqsj*aSx5~uas=jq)o0y?7|9uk4>2QeS8V+q|&xYHr*5D**Eb<9uox6k$) z{7$9(pXUn)UyjCn8--GVmP%`A=6xUVt8onzfjYW>diH-GA78!uaQ9uvx{9(PaHxA* ztjxz1g=5{@hQQGt(Tc$J_+s48Lq-C5DZ4z>6yW!n^>c(f-YKFJ4{8sERh#i%GhB8a z#5Mx^EZ}U<5}tB?UPl|JTUB<)c-*9L{^5(!`}U#ZOKhQVh49|j_&m1LNP14}qcEFd zdxfnQmEV8nBX)Gm77DNlV6H9vGw*LMt)9HDCbu|B`@r{8z-_FilkJbCqbYY&*#02; ztN|C_aDoxw4KjDG0V%wgfwWIC>KzpJ9qRT5uEsyK4|uONY*Oex3%2J>ZcspI^3A8& zlZ$uD#U>lQp2ZdlSDiH+M4`h*qOj*?A%)xXK01Grrm-3hp|C~e=0#r$k%KL3*e4&h zP}sJHJ9aWs*!n2@o`)`ltIaj!y(w(6ktonT6n@h!5wXL`X8FFIyhUM`wCDS{Xj8bX z#v37%WXSG04=?n5@oKpzyxa-m?WVBbxkG8ci@-hsw|*3Ru0;om4xI!!EIM zn*i&x1kCU5yjLs7WE+9~@s2wQ{QLhgcco2ke8ILCc6(^7X77QSr!oHbp=fta$W!{)UL8*W)EUzM=)8#oP2n#0^5Pw;3fvuea%w z0eK>ZXRU&g zgdXcKXe0Ls9o8W#bq~Vb?Ayd7?GEpMa`!KhXrXl+gTd(C*A4AW6$fQ_t77k1f4-db z%)?NoS^0{d;N$JwjhM-#2cb8$*~`%5EP7L$2B9ycZi~Cl5lD~MeYdsX{CjNmU<4Eq zhCCMS(WrM1<<>3URV~O}`=W1eVmN<&8z>k$&V>ilo8IK;5`>OX^abU;sm>XJ_@M zHVr~CG>SfB8D;1RA9_=pJwng!4hVf)ye=^JAS_&O6clCX(Wt7$aVWLu(dz%2t@}G? z!cl?j*_((kE)eSm7-Qr*@}n^)H~obNd#_%tR-bq4&W4u(Z}H-*!uv|f-a3D6Z_3^v z^o^!BpluM=2d=Yz^XNFYD@Xff_wC!@8CtZG9k#wf7#>B345QBQdS`O*_s7X#!o|Dp z`F(48G_bFlu9frZ!%0D|%lCiS&gP@$fpkT30ii16bcRvAHtr0es(YUoiMuS+8A6)} zjvCdm7H0^r!c{4cD9Cjnv^9T9bgX8L@XK6n`)87N_?t6?&YA48FlPuC&t!ve@l2i| zw3RkHyhV)=XR){XF|ZchiNT{}Xj_NTYY`AIMT))7Z7K7>&N@XnPnpjSHCq6>!rJkJ zXj6qF5k?|(rHTVGybDh1*=o1ko-asmvRNbGe>;0`B9rTXfmeTwgT5o#b9sbXUokzl+y2}N145Ya(FkW25D?t*%R;S3_Pn*q zP$3LXafkT)69jx+RWQ%IYCi(<@eS!j zQwi@u=%36nGT^IF;b@K1I#N+Ys3}LsjG|Sm_XuM~(J8~AHgtcM1&$Cdoyl@*kp^>Q zGTSx}HNu6-?By+d2M9>Dansxp(DKzo8H&?Ue5`IW7}LvFuSGk+=qF)Lqy9a@a4%oX z8(4=3BYOGjc)1;5gdb~P$_C-hi@y#9S^Xl62=?kDsy=|;V6QboItAzp_UiIZFF;?Y z6=Df~Qg1v3xW|9z6?y=O>>9#|P^&$}Y7j=mMeWt01_8{2ot5jkdg$C5?GCpM;V<); ze`dBV1I;_;afE$ow<`?-{y1I-(6hNuYT_X6|dek!Ro_A?ZRGQ~&N8#kj|+;#y?g2-SZt8^saAz`<0@wmLz0y4$Y41d^-S zx8rF&sZNbV=;?6oM1c2Z2Kiji4v0=-@i7RkZF4=VStE2lg35;9H(`gF5V z4;@*}D1?7(GC}}A%F5mzqfUfpt9eJq`bp8YA0g{}n0ka(M})S4jGc#oz`A7^*6N55 zWT4NFr08@P-3S+sB0hOJBEuX&n6jGP7QfGD9U_E#LR-~(tc^NAXtNLd)|e3p^m$tt zS9i|!1GGMd`WS%U+omCoVOSdu5!yr;F^`*Fx!r#)I?pnO^{GbadM0OBpMKdb`z-Ys z8FpPA9b@MqJPp(;#K~bsKSIyZ_pl7F8EZH7qb*c}(D7W*2pKvbs~)?W5g}`__G4Ew zBCr-)J=SAE;uM&D&%4IP+S$9g>QIQ2qp1OeZaX`?7XPtR9WC!;=OG~U=;ZKfzEzOu zwwZs2(K2*DW0$eQ}7;W+#XB;Q--nbxB=?G+XMIT!TQnbLNN;1X<$Cb7_V&Dj@Wh5QgSq zkFY*@qrQG19zS=-qr(-9#=`UftoN_a?>+b*R0i3i4x@V+Vqj0ss#&935#m~Q0t`0- z#4`JNOg;J>ztc91K6H;~HZ2IFPmWINyN_rkIhLWW^*^GG;t+tQwK9bkkU#%2TiSnW zEU_tM2!P0Q08sq9hvBd9b?FqKs&0vi>vi!y%!aluUW9pbbMxgU+=h!+V*W#dS89I&P-l~M zyg{|5*uKU)HkS^+I}3zgf2+PG5zrT3~pe$$HTVCYG7A_S^JC;kH=axC+v@y-i`fpXa*p+1<8pgZzn>)m>sw=5QbBl3( z4SjX3eo}^qI&fIK5{GNlJTa^F4CcRLFK@QOdU3oJ0>kRWp=P!)GE1q>EcbtzWJ;#W zWJczeP))2RhKNicEzKoERmRLLvbToo^20B}!0S_kaOXZ=9}ELMI7ygD%vxBhNI{*) zF*$FX!W+^HZ7tQDXek6^g~$i5e{UPlE;0!0?{S^T9HUr)+y+kOoO(fWCP7+WD59+w zR=W)8Si~?@)q$*{mNnj^d}4n|CeoQ^f~Q)Ol#v{17(i5Kyj9+M$5WpR$$U|G+QK-o zaOJ1nTpbZ_cSxO_h61=b8l8!E(C7>hVK&u8%|WJ#BzL)yL})Ou6iKDywkKvqthZ*IfQwxu=_o z#?`DWLalaS$hE6kr)_`Y?_NG@yXGG!ul8`|&U~ua1GYg1jquCQ&Q=Tq$qfkCFuCH- zS+_DZ*=DuG3*?hM!NFdbfEvNVq9^yD zGs*pG^SOqMervmNE>K?}`-w`PgdhVAI?UUX`7QM{Mgs zGMO;=`cts5+xX@}Jw&1q{M^5u(MpYALpadl+q)NU!l{21C!htX-+Omky*ttAFhLlj znibqJNmZtDFzcyAzIkE|L9!;wMRCziteg(sak+4(gy^7`OLt#gz#dtgCdNL380qo< zv{2p@Uaj{9un;NOMT)UM4UCBrw2h;U~H^D_w@XNlNC( z>kd{2oSBrefF%=_Qemaa3w7C$BeOy!bKr_GU}$F19NC?#BU;#;vzi0i%++FD{{aHN zJrBd>Gl-jiu1dV0ehZr&yj)FQ5NyOmej=ZHMXg}Uc+P(uBg7WDq&N>U)xY0Mo@bCo)(*uW3G?9?yxVgW4QG$#oZZbn=u zU$5`9QyE(*Lum^uc1|DoIm#~*(~yo|Er1Xq@4{jgfXHmW#NkhQD& zv2Ea#$4}xG!w=$Cfj>SZ^`~(8ZjzTvvkCk&HHStd|5{)K;T0D0acvc>L%Ex8V-$qp zLq(;A-pW^$H<2;KhWIEB^pHyWObqAHon)2#B;At{?E zq>_J3Yf1~jh;kaV!ZOH^Kv%M2vQlhz%Oy@!KY(Vzv_*Y|0SZ?v(gRnQU{J^)=7Z^>T z5rXvuxdZvolV&lVRCcxsoGZp5mE1e`8FYX1Z*B?7QZu(y`=A0k9{g4E#|#HmN738L za3jx80_LFp{hP}*2)uXl?zW~6o5ckn z9T<5tlk40=1`Ntw2;+0gQU{qb<%Dq~3dl2AE@M&a(IOwond~4#nJR9cLBynub(|P* z(pq}qArCg0gjm!Ql?$aZ|F|+xi$+XLaX7JDTVnEDn4FM+Sj|~xe5#G+oTN4tJ}-ZqD?D|^Az3!bM$n43iN9EF4k$$-+@DyK6;vCZ z5?7?TOCgvB1HJgSXr;D{PyZ#uJ?oy+*NrnCKDGLZ*%vRBM(i z4-v8eSHMIDiAS1>lrc!)gkpc7-&CwUsW)~n?7N`Z-kU>2ty1SP2gF9(0Yk1@_l>G9A5 zluIx!^y5wn@_G3$|fd;nmaJBqR`q4&Y01RSYLQZ6?4z6g{@2_ zQ;#}`Y!pZD7VC!77&d<}y~!qq9EyYEgLEV#Y34xZy;U&Vl*xh`gN{KO=G8F4c-z$a zRn44?M;mT~Dfr7*uNw}~>!V^(XekJ$$bB^~q_2rlShLjgmH9j|wkq-hG6P{fY-i1F zS{T?HIVBPt1kH)(U}sszALR)0zxRHY*nq$dq+i|}qakjg+B1KW;c1{{++`ltjXW-z zZ3f{i_HH!3Y@#cJoEMTALa;=}oKrqC884)uspf{M)a25qsg#$^_xFprO+lyy|5~Wr zN=JplmH|k?AXi9@HmS%Q1m2$gKR1!as+3{qN_47;EQ}Cb!;UV5g={?)5ccFkWRFUH zn_>I{L0o9UsfvF_b@R$PvPs+I=hdp*R%FN%<23>%Q*ukZ#qB5<%{2eKrMW0l z7!dIxe0UFL$b5V_r0l2ULkW>|BY8#OT$@xZSk-5Q zRh!Z4r~iKY_UQ1i{=>^R@Q1a+JMzJ}l~;*Zk;XXGrF?%qX{%*@pc7{8hq9T*C-F4l z38XhO^9ehm;#ct)RJ*h4RXyJ1pZbP-m`T{x4ohr%%i3IV5f$+YOtAwIW49IjJ&@Z^ z-1%0?!etygri3BhDA?){VyEC1Aw49ZhpGURa7ktbyYTh#2$E0g3)T?vGBbz^|K`j# z&S4B~Ax(dbJxI6_v1*gdwy*#Y=Q_2((x+O3Dy%m%h~s0iGt5B1uHdSli0AN;(i(Pe zRdzl2Tup{veKO4Wj|ZJjDB(|41=Ofr87h{?3j})d2?TQC6u-IJypba$!MkN$V8v+< z?FBfN8{|)~Jn8)53Qc3ORk}?6oK!sS@QuIKO%Q+aok>Y*Y1|SyxKXMN=+=BOTX-x2 zYlmB4-x7gQc|68T>}(Srhn;xnXefhl1;X!4QbF=eO644-%x6L?Z&Q*B2wRxGOu<6` zLDiOLcAFr0x!P@vL;10BB$UEuc>7#gH*kb4IIY?o_u%1q@y{P#zIy)g`Cp&Dy1o7F z!`*+oiQCd}3`GrdLO}>*ixhHwR#>cy6^aW~qYApTM9z@r70_XUbEaE2RxhbNhE5CbGvrB&9oSzQH4$&wtb>9oP*M&frQH z`$G4JG*gcsxX1}cxP{9t3|(18g_i>I661fR(|CxPs!NV9*+FfgawS1?gBB+XSC+6z zLbUU3KGV@ERbv9*vw?kt6;wP0*aj}wh%qt$5<=!ho^dLufhbvVLJe`Ukg4U=SQ0uC zTsmdAcW;wF5y6x2xIyBU;Eqi=8x3Z*T)Ph|nuqa@rxO0P+3t(Sk0 zwiqf>sV(Td(4KGw38&6jtQ0-&Oo{FfJmT`KHxAbADyjOBD${uP+h0CD`}M`M-#)&+ zeg5Iqi;33BYiWsgxk)+a(qI`3b7!Mr&w^+WMR;Sqy~L(N%opxQTkXoK7dbj5yHV!; z0UY)xP`m}miARb1hB(-o*VWdnn+Jb)*k~TkI;*~o`VUPfN!{^KM|cMy*wS{er*9hd z4^hWv_Qwp9VC^8<08uyi(GV7bi;pV+!dLx9ZeO$~?p`mmo{mE~@M0l@YA+Z3lzS%!alTAtp$ z3})oj3RJnA!EQ_L9Xj71wm~v%)`W=-f-YzOy>lP2WH7Nyn|nhkM62LXH202hOBqBK zmK2t`ywD;wgwsp9Xz0N~2Uz_-QAw|04a!|?txR@Xe=S0A85+PQdPG)uS1>$hc3KO` zGNzPDsn0FTh}SkVsvyNBoqd1gr=((=4PjHTe)rhHQg@x!C9AJo9tJEWO zBh2sy-e@@?lwHktO?zXEAQ2!;$?JE&KLe$FxQE;*wqoH=?E7BvE53^BG2cSNtde{4 zNo}SDy71l-w-#gt3vBxh%XEdmyixI471(xbY=D{Qw>b4)Dx0!A&8UAjStgVxx)99h zJe49Nl4z4&61X(#_PjDn2hF}3)(>VgEZx-P-J0Cdf@Fmz@X8t|A?)y}GX^$_v5KXc z5ISd%cS_{2w;p@_Aph9R))+;EULp;evJLG`v3sO$F$<~#HtyPeot1c+{C%n|8FMZt zI6UyW+;iAsdFE4Lu=#)92vK;ES?c_Rfuib#&3}bGk0Iy7zMd)zL}R@_4h=o+6PFIm z00az>KQWR*iU7Ws@(i?(I<85UWhtYQ`A265{5m6tL1MY{II=njjt%x|^9T5`Fj`!~ zsxc^@@?M9&wJ_GHb$Rl?tX*xB+eVK5E4-xYV&7VFzc)Fzb!C6AUy{i=u`83?r0zbr z`iHKHO)wr79+0q7>B89Q5%nJ+F`BffMu8h8LaK&QxA5{f6=$OwP~yaX9r2^dN; z?HXB29naohrz8CNsP({#u4A^VAF7bS!P|m}XJS8CDgi5Gq<}4DwF+3O;+1V-twaz_ ztD=p7o6d>#O+$Zp_LskK4$HLNp3sEx0LHiL4vYK#`kh<1|8;S3<37HPV4e2^XAd6I zE?oB?z-~WyIB#?!Hj;biK~*R~xDsGr6JV^u8tZB!oJ*ib>>p3|oGwtdw>YYApFOM0 zQZ9M*0C3d~eEM6&FTWs``p$v>@*(XWUQitd3T7-NdPjfn4YdBx-~IIZmt2lVg6rP* zU94bu8`7u?Sod7T!BTjbClk5){Wafh;(~UO zT@39)*30z)-md*ula)t4(8k13jQ$+1b#~jc{l?RzX{d9ve4ObdL4ZXtu=vT=mSLS) z^xANMyUu?)sdW8i8$ZD|}lKyXPy=Lh!!3_*Jnq>!Gh; z`LT3nx7~G!M3&V{5TI4sJ*vhjqY@mPw)U_I`;x31=MO(pUh8v7vHY0vr1PIPAHXNPbwWj9Cd1I z0iR&g@|L+TG!dVy4{a-&42qTF{HAWRtbR#jfinFJJp;1xbnS=>hl3Am@I|txH|*oZ zMbXQ!$1l^ziwgt+FFppU1l#8jChBS|w;A$s6_1KwDuPj%lmatg5k92#8bBa9OcY_x zP6>aAQ%5yTa2x#gCOOmv?O{D)SGeN?#F4wr!wPimsC6-rAS>zzR{b60s^F~tQlK>{ zt(hi6L}`7heQlMOj3ITC*_JaYo8SVb4jXQnKNGOng_vq&$E5DjfCuo7VfK$TEa0I5 zUZ$TEZ+d33C`4-#H((k7Rr1=f#(1VYGd_O;G)rCz2blS6GSlg>G9e4F{wCp?9KhQ^ zXJVq!-zjwlLwP-WP}*2PUeUsCYFv$Fx2{dP_0j~Dm~4#zWZ9lgEI%F8{|u@4WO+@d z0;FlJhEu10jAp!d>%*UraBXbeHf?M$8!v?yK^tei(BAu~1!M4`ZOEwu>SO9yqQBAGugh6Uu z3!zfuG*V~s=6&|`yBGg$Q36&y7KeZxa7*8Rygz*geBA|~+}+{@USKWW-L?x9-6DmB zg_UFcZYINog;0CTx$_EarPjg(*u%9IF@acvYtMBG8MuzIM;OvSmf*@BuCITG`-8D0 z)MOgd@$KQ|$D-uX$pvG#$US?|hOOL?V-!P4Hf}T47&CJe!~`+<7UZDst5=vo&KC3< zq=6!!xH*>9$Cua6yCwm$4XSH)%)$x?%C&NZ%WthHs0u$c8yZ7Z6FwYrtH*2aqzn2gpsrM_SWm^`tt z&$8|WBwcVc4jj-kR$vjR*mdB2+y~#K^1lF!amoNQlUH+-ZaiE&df3a+B^dhkdm>8! zVu9~(PU6AvVuEBXg3ck~TjVk}@a-^HRfKHrq&nSLYhZ4rt6P5wTOGlsuaR2YG*)}Z zQY(Gseh%cAQrFpcPct_7&~)`s1FJLp`_2d>(w3!O3Cdm zs^zgm+eM`=s{gylruzb15)ggBwP@B$zt+5U$mA2%sQUWf9{Xj{ zz8zlp`X@-j8oqdP*r$(f zSf+TG7T=KZE*K+Y&&!vOU%a|{arqK860XOCUoL-?qQcnr!?Ewt1t<+dPt|`cF*byt zn>6G%L_B{w?T&O&6$N~+d)k;W#OeR$*wAsgy^Y`8edcjzp;pam=62hYPALs*GG$?I zpD~`eOSOaFOD>Evk|`BiUu#}REW%-2@{noQSKSSa<@J7_b}+reyTk4##kBs6LNO<% z=m*Tf6Hv_-00*?s+u zuyF{NcaGy6xpTt^#fdvK*EeaTts4(BZG*p~nqYY@jCX~#iO z%3~zFY{vaMQ(IdJ^IqG?lamH1{IzW0B@(iFqHR@7-bj6J#_eE3wy}i^bOKDlcvQ*=XIk)v8|hP9V;1WCQRvfn)r72Cz#B8)SXd!r z&AEu&#n>`tRH{XzeJ!vq1bm$q{O+@ZzIq|1qL$$Ub*9N^k#d>Uwx`&5hSN80b10nz z4;wObnQ#lJ@j8S`Eo-t1YT1A{Le{MiWX69OSH9`n?S5B*bwr0`3}MVIIB&HS&N^T7 zAZ2TK4A?u!fgc!>Ni2ZZ9|Ai&26Q?*sH0IeQ`q$WiK0_msJX>4x@`=TfQM2<6j(bh z1a@O%K5AXVNRU-Vz;BCWcT6t9vcMSVzfVrTMC-jgygL~TR?)ur?cj1q$H~iT z-8Z4%AuD+Fl1iY7LgB<@I<}YT$L%?{=1E208tl9fqzg(khSxkstgTk9*KHev^1A*4 znLaWEcL}pgFhR4c|U`*OkFOUi>jv_X+HvY`_5a z*f| zX5_oY=CMKnBH|%PW=5*S3j@6=2BKn6(~rZ9`gTNPLpjp=uDEpP2=( zO_Kru8V_jLH`)b^e%G>P%6aggJu+>ulC(Kjtkr@~sOA#Q1opq8hKP7RZUxpUVtv)z zm-pc7#l}eQSlx((#vFVUcyR*)$pGIoDMLDYf$nkR@8pjuBsP`4zMX%_P(!+L+ZD!s zh~xz}A0r>*mu1tAJ(lM7G>hQ87;ib!$E8s$Hg(beGF&zu%c@UtzTx?|Ii z9a&3Y`&g-rjx*kL%zJ;(=wK%vHpCWr`TD14FWx@;^;ae_q%t>orgZS&g|=QOUOT|y z;7GHewM?K;qO5BZB5cL8GvBAf{h3NK-t_$%xiWyLGf#J>+_eBD>kvaij%$+O0a?ya zA=V;+iyggay==cw?iN+?CC2(K(*9H1xdmbjVvHPt0|GUdi#LD9qP|j#vc-|-OEQz; z5i;Bs7+A)N4nPty!zbjqu_HKALR1ZLA64L56 zE|+KK_eFZhJ>TdC<4nh(TF&5+8p(gj_x^KKLk)(h4pKCp8<$dIQCdsQ52I$r0Z5Ti z)#~g5np4>-!vcS3pQY^Xf{l|&qbjZFW+v;C!?sG6Tbrb85>`Pu?nDX=cJGUki&m)S zY)9>MO!)qv>V-^W`ji}4R$I|(&-C6nY@#OkB-=I!*g?z)Eu@mkYHW!wc!YobEZv7j z?CZ?m$^11${+}6cOk42gaud!`pdZgg7)U_&78VM`v8jKxG08NVH(UX@(oG9)YXUIY zoDG~$2RM2R`PDx|W||L_bgPje?vkrv2dN~iYa?%sPS~&xn{5c$8h>^{$>}hjk%u`2 z;852bX#&S+BAKf{B{1g#)7mvjgWa{NRbY4OAZn)_^S%M~4!*Tu_S~}p0%8I3HM6qP=k97u+}mU zXfcT_aF>4PR#>w6biH!JszXjkSH4@i^4(`vO`ZhpF2^dE>gw``=L@6`tTR%&u@w*KJa*X^m-kO0a{_3&VeOrUThDW7EO!`_%?a*)6hE*8T01 zZTAt6pgSR`C}P|EOmt1^A+_JH;cqWgDEWn^ zMx6zSfP`XqaY4{E?J!b`2a4w70%u|faETf%v~>c!B=Fw_V5B;wI(m%rN^V;rm@W>Y6k96^FPbz?%r++!(BTus%0yzD|^4jDp0LEgVn0!gP@KGt8EO;c) zjOK$X);&RBN`CYM(v)|FUEYJ$rz{BGYxyv5hny!#yG`}6HYk;7U3%<;(#7sQNi42E zyzl!|lE<3?X(8QFu94(Ho2tuQPqKf0$bFh~x8mI1yIAF^05-SU$oxo`^E9x_s8jsV zZ&z6Bl_j#|(sqxgRKZkdkBp_v{C+?k;z748Ud!cVb;hj2s)yUkGhiQ3R)(KP+kb;lv2o?z$To1B`zw_8H4% zL2y*0MEV668IO#=!nW$T?MqQ}M-AL@BCs2HIfLXtE%tG8PkNYt_DYuBZX@HQ1nBibMyA z^i-RjJ98BpFrDRsD+zLw8=!w@@mNlACSotp%H|F940BHZS&CJ$b9wdjZZ|xjIs-RPC9b52DnrM{aE$5oDNGX83pZ=(3k;Jya6)6qzsZGgxoqH1;2ld$n zNn^9{j#vdbsk^M6=A&XB9UH^r>~=I;xg>rpg-1#;ZahbQb4an=S=4`OTGWx70?YDy zOADLvhdj?ERz0?sIqZuXeBTWnbrIiZse|jrfHiT-u$&(&l6TdPEF3)SRHY2}1p$U| zi-$i9SRQmcdFP+#XL=ZF<`wAPQF@-|Ha>*Bm+O8e8;h&D}rVC`l(HF}hfAJY=vAD~ZM~*+{RAJeVQOKz{JFDMZ zB1MZ9QB#xE$3Ng6z!gXzu^D@JlO9dPqw(AhWOq_~tL)jM?)}ie!+u8F5#iJkL> zIBgM7icPv97imm2C}2_x?5+MT45|WSa2NRV+5~9 zv_96@(B7QS&7XfX&j!Ia!)0_ z^qA717j!bF!vd5%9>h+_6kSH#8nmsZ{t3P`6xgqp)lYwgDHz7fyW@4=499+2qk1I! z+YN=pmyXw=(}Y3lZilU_Ht!3JoT;Fkke0)2+Js31V_Pi)fMC{u|I9(?@%&KmDrru? zY(n{IGLINtH#l763>2aYaR$&L8b~=d;%uLow$%0~uH%0*F_bg$*`?`&Iuw)Zr zh)FWV{aAmdbgWV;H+m9xivUqTuD?>Rw2WyQ6DMlu?~SG?S1?LrNaHhE= z&-*SP9C~{vf1OW5tzKSYA=D=`QzENh#ShMXg-0dfC;t_t$U{EXgr_fW;l=bEcGI%z?XQLL)r*S4sweMxcRzYiki5TkLLZk~wQ3s9+3t zYd)nbr?!tC?%%JnE4)U-Rx&!{;BVAp+ML^W*EwdmyipfZOQbhHy@r3V`_AhhUtWGY z^~otLmy;GcGxJ^A1mCo*Nz`T4z`oP1ufY?w92```T!hV;iT*#J)kzpj>~9?Ubqvb0s6Y-Ml`!Dh<3(;pfv!G#BZ6Lf$OBj*djahTw1>nPK`!9BDy zpni{CB%ZKh`TM62M`zDpfBdv=G(`7L9ZaP4>C2`E>F1^~0YobTessL(K_17K+Zzt# znpp}SVy!Jmx33CqflFajO#FmcP6oTLtip9F=KY;_b7%|U1|jf|xUE_>O$hb`s zQ&=K@R>r2)l`VCewtT{M&ef;9x#}@-*HhG?yEQwW`WhTwyFrk@bCCx`6St+dwI+VVD zcMHHnMnrgbqO0Vni;H^6XHZ3I_=lg8dB~6zu9O*Df;uSI6?r_ccqbA@B(b3pn1lu# z#c8GxAxyHWGF1f)EhPJxqfRdj>CCem373hz;J-F!L0Z{55Bx2P_)(!ZBend=A8Z;28me#I*T)vX)^BZkByZ*$O!5*sEizZSi(FvUfGkKMh~ub7}Z8i z!{-HS$q0`rgzOqj?VutH4vw8$2Y@{@QycvD>17uIv17Z8dlYlMV(iO*t)RdBMCO6V z_MF-))XF_YMEIAZ&o9mpni^<-5h^7@RYgT6BP$Y95yMnzn52aXHPM36f(}QjzOkxc zqTexjd8uI@9+N3Y3LIy1GO8~0=H65`aDG@%9?@c*lL^BvZ1zwOZAWBfrii|c$a5JM zWM3pC)m2oX>_M9{MWc2ZGa}R90d@bzpFB9H>GQZbiQB#)Khdtv*0e}};PjIElJ&t}(__=cwoX^)G{_nEBfx*>8 zpq5=1l{IA^#zjnjdLo&jDVbm@BE=>{9ZkiB2WC=V5>?@UhxD#78_4t@8Dr~uZzis_ zA$Aux2$RrrgO$FeMZC0&r;nmJ>IfxhNlM2b;A~N@HCdG^w!&sAEQm=bQBF)^AU8lj zARR_C!>%dsm!Yehn1?-pxV5{VRaN**w90g0l}56A9Emd2$_g?bEP4YDS|^9J+qhUgpJ2>;H{(0L844Lp zMkesGQna}x8C{4%WO+u~xFtib)P=|u(T5XoR}&k&v9sH`lW+8Ke90dV>4C!BG-*j1fKYj!4chCRD>VCvTHc+{Xj*q! zHJ*~cWzN(idKAfkzBSWa9X-l9KyI*%l30qEm|m8D3MCQ?Wc?x|Hb^=W894Osx3q^% z%fK(gJ$sxck7y?=O`|5ACxjM&&bW+JY!j={$*@R85tfEjyB`>Rdhh77;t@xmB+#Qt zx}e*t0>Vlua$-zM6{L+Op^9S?L#|l(QAVGqk2v}~4P*4=%5?=`@}f*hOlsnv=rTqe zC?WfQUsbwzywN`@<%C(5C1khR1VS<*GmQ-4yez7u(q$OJ@tl#0`S8*EL*AQ2m`A-i z90Zm3kU1YaK;r}Sy>ZE8NFn=#rb(~i&P3~{vA!NSaa-joFNo_Ajm5c93YEZ7C{2_A z$A~0E8Rb#*Ey4HW+g7HIsW;=elEZBtMH`lX7#o(cGNm?gWXdEXf{V(Sc2h{1BqFme z9eW5zrb-)!nMjg9A^yhv>NgDO*t?yQW906(0P%NR$3LrA&S(-MU>Hi zh0tUh36gN3O@BBIqtn`tM&7qYbkn)32eTCq#etDh*(%CnQN)7OZQ|G|eGs`3WSS#? z=%tBD3!cjF^Wanh%j)pY`OV=u!(a9$5OVJ9$H~=%j6K)tZ0?)xf%IgQTags#g(&HL zNs9h+iB0KZD$7V_r09oqwFAuNz;9p@ts5fj9!~*ON6Nbxm`|CD*mM3HBn`c}vdblZNca+eY;IyY3M2Md!!Y`A^!EAtw`c#|3Br_e@5hK4p(OCnAgT9OtvPNa3XVO)Dz@pp}XE2Vi~~F zs;(ESSq0em`n$;>p-Y_jbg`9|hTeKxob%vdNuPgrDXem_F?HXTu9wj#6?_?g@Ki#L z^$^qjetm4KA}Y%Ebqih5;NmtoGOo7m==1NLx^ua>au9jWjF)8dUtKTJm~gHTbmVv~ zY$trnCvQGQ)*{k4o08Ijn-!u(awug{l^Gp~N@o&{?@dvm+k?%8E=B2!sO%Ry3#S)W zE~gfp^b!}wH~zw5g`St(qNlfiMPd{t_nX09I9$qlTFV6)_)njo9{qWyr}FChj3_}a zhX&@-C{$5us=UZmk_nsU2DLmz3^>RrOd~~>L1w?@`~C~EB5i_R#~AfK@~EFQDDpf7 z7moBz{4l@P35j^2MVdF z+kgYGp3kq^rb)PUcdyTXj2`{*0|jD9syL~0n#4n_vnlLRdyS#xL8|k?IS*|V{;EkLJUt5+!F3EaQ zyR*y+6FL{1v^YNwdVP%)z3Z}Dxrq-lm|ZB(jmou5z;9o@`>oj|2CQxhOSom`47C7X zY~Z^nyEhZDdYD3gmp)9hXiH$hmRUMqxjb;NWGA9sfN@&wcZuGo`g@GxeMZEbfh7$E zx>x89XC)c?g|cMolbuiUHcqQ3$!r*zDl#^U#E%ns!WrTTtQCi=tX<%>o|_e|=<8Xv zXd0RzWA3Z1=TDFmCXp;ZpY8kXF2A63uvz7Ne*B5n)LyrLI?rs~`FKVz>eX*x;VQ1= zJtr%PkxJJ~j2HHnnB}`C9@c}h^l~GJM28b)j5O+{%PSq2pQE!}7i8p;l~j?bm?oK2 z(h7LU;TP25KV%;ZRWAiK}Q~N8B26GQ$b8 zybUdg$nKhd5xf1YxvmB1z$6s0&I38I5@diSIjQkFwF=N2SwaeujH0+uWmS|yCnm4# z1J`LC#=jf9x7!1O5OU%d6J@A)G#PU z!ezr;s^Y*9eaOV;x49hbf!U{3W=Ygq8Ri-3{A3YGO$sty0c5%nQX$hw@_wJJXp>Gk zT7}SR8@l?AYQtdZs9!nm;@rV-d+CAC|~7uJ72jB zKgo}O(bQi-%pm!n0)zl z?cwT(Gf$h`X5_qJn>m)MxL~R719M>}97I|A3HaV)&ER?RSKQDZbH{XDyVNVRj7OR9 z#xjunY@7(Fqdbm=5l#5boG_6uK}Fl(Cj65@Pke2^L|zZ3ncF0ruJL z(ne==rp^XCIjTfvCMI4el_??_h6?brRT&qy1c*@*naE`3TWepL1h$at5{cm z1i1s$756a^SV|yKiukOrRk#3BUA>wu*6Qv9A285fl2IW|L7XHpm5dd-wn=m_%_B{w zQzAlHYVERNe^iQyawP7jgvh7bRJ6eGp4q1-CudVGpC4H6SB9i?he>WznMnZ7kc12~ z6-GrtW}zVh2(1yWb?!s=9!*|Im4hCCadN_v%#VDtSl8B{K%w#w99Ep zXFRLY0%S}NC`ux4BXgS#aFVnu@yQK7Xa?WO7(kjkEnu%Y1K}h%3wQmb_h7Y8D*DCP zwI?BS{km7K;hmlC=fs$greM*xZK4lPSSgNR*&|r52SoWrXk`@%AiE zM3Kf(`PcGJ+x7Y9J9`r_uF*(;qfTj}y9g3+?S65Zwuc<=KpU~dn>72eUUjaLZTWY(zr^s)D<15iuj<25~L#trED5!)x!=^ycfJD2^_=`4_Ve4 zwvz_b-F^dc)36Z9V7VmB0k%lfWb9AL?OJ?IKk84txW`rh6|ddR1pI}6Yqp_Fu@{9- z?5pGB@y^aqKLwwCvKQ)WA|fxcE~h~(FjTUWc6J)*3F%u=c~BS^v1uCL1nbtU{bm>o zt5-EpGrz2+NSCYWqYu=hsbb2<>h`SmSH zllef2rxKGZzgeV|N#&{5>VS5Cg9)u(YH z6!gBT7IwL~d$`fC;YRnZV}FQPxea>gz+w5gfA@O~*!c`vfJso>Z|~l`dw=?_7fC?7 zzU{e%!{!!#cW%BV;4efOBzc1MbS7{u-LWGt6aTlE2v=sQN5mV-tLD4%C*I235@Xrl$eR8&7+0)*YMPWWF!|+jy%eBMJ(wZD7oc@O1){_d^k zJyZbrySJYAP)XxyB>MQPCEEeI2iX)603irWM`1e<&h&r{*6vk*CS4qDr~Wc*BNEK8slUGdha2eFE#JDOQoC3USWdU_ zPEMFhcCZ^*h`?N=ck*CiB9aa5g6lL+$He>)R@dC|z%^Z;-EwbF-dRr*JaE{a;|+@J zPqjaPxw*%AXzVU$o$WL)a~?!??r-w&5NDy~;Ze$`A^zdh5bQQZD3Ep5>>X^Jj&SRA zgm;{d@SCS2Y){A5nBc_cs>Y_}JO?gWgu%`4z^LT%g6*B153imbu}^rv`HjaWWBe5q zN;W{Fy@npV$lSSOe`j;;IU>bSz^**U&b~~4>bZlF@!jjW>1JC(ztc1lk{-qx?f(=; zZ%CfiyuU*eXpT7ggXAKTp<_u!p> ze+$}Y2Ty}v(ak9M#kDiq!*E}=#_31yWcrzn6QZ&0pRU{3xB@0`)6$s&rq2~DV7q-| zZ$8Lcz)h{n#|du1$0i)K+jkah3KP-T;AOiHuV-cjm_!=X2?uNc7Q96nQ?UE`Vf-;)gKYS2kS)PmAUtyS9kBJC1}@w| z@iAj!=D2KuseB0A8FD9YeI*=SmkrS1j{WmmGUsFHPmkF_Z@jeNiabruz2&MncOtRT z-RbS`{0h{>wV3ejB}uD8mvtik%eCjoaXow2Az#0|Cli^glC(H?NQzjCo&Gw1`5Wm` zK)xk0azqx>`C{2w(%y-dbt_Rp2+;W(woQ^@6!>OfP~idn?V>@l6>aOnUe00W%4rr8!krd~-rU{rg+(w7E(nAL8Riy!ubEHcHEgoM zb%ck}{x;EGJcbK9Yi_Md3+?0KEj+0sx_!4yK6vV$=;*4(>LZV|?QHIUK@Q1Ksn;-J z%*8n~vE$iuL1!8$uj2xX;wnMuNo)kVUJMgd+`E<%e1mIYJ9SXIYGFMQY1cEnp(3UN zo);`dw|QPcXnOZ7T4e)r4?LHMWZqDj3y`9@k8@bIk-FK48n_#MzAOQ+V}k_h_#Z z!*`RskQg%;4R>MQ!Gk`&=%6Tjm~V&7d zriN1xNlCORl82-$yJQ_I2_(q003-?ta8Uhy*LjV*R`<7li|)05`on#b`vUz69lwa! zLk<8*O}49uDvLnoo_FlnF$XomJ7ko_65G5dq9;a2f?1{8x`zqfMgg4$-h{=#K<2om z@!ib4u*DwnDR??H7%lPw!Wl5v_|k)JFGjpqWAS2rnzN1u4r6#3bf}rJ>z78>>S+*m zf45n*Ty_!JqpUH1X(iTc#iyhBOvyQk&Z1E}R&yQ?p(DH~!y^Wa0I$9C3KCD9a(=D0 zW_IeS*|rPt?j-{9CxMvXO#N1T%LdFtOVoX)A#)GZy{LPp`3m;?Fih!M?OP-_&&b<= zhJj<}A7C@ZV5>YGzSt}yRL_YR(TeDmxEaOGr>-$Y%`TwHF`dn1BI64y<5B3SL|PHI z6io7qhd#}JPg{=%3VdfWH`%9(opV1qQAEzyZL_!$P!ns!6^Q^oWhdzDv`**}6X79Z zwWJY8gvO>TbyW#F$o8gM25ZQF=#G<9u6hQ0+WbNa5~Vxq#YLwibavB zNh54lgB<9H-^@%$WJ0_jja!u9!;ES zsYkFPbu=9~|IX*5K8T|_r_0#OJJE@j!r!Xr>$hn7R0gT^b;_fT(`0=>cvtD#>Kb80>`tlx_)QbYLzIHC00PyHWtdP2YAALNY95GV){<$N|c{V*OzpxT&Hqb z@{b_|tfWzP&tzZnl#XtKDx+zZO!?)1xc5%rIQ~k8<8LxwJx&s0aXTlp6UxL{qDNMf zM*1Qg(XC8SLrYL;oe&EdjWo3MX~GOWID!G)uknz{t8{`0&n$8<+%hm+$ZC>cH|{g7 zf(6~g1-y&vc+?Dbqc&gQXTpnGq1Z+$HWz=0GB~nE52CxLp`WM?%4e0)6%-WpI!K;@`9evJghC5;E@4 zTRBmjL*yt^ZHc4VSEirT8M2Js~HyB7sb!L)dwN?&@2o25fLf|OC6DP6eIPj}X>uEGSaN~d*Flsoc&QDsReZ831n zhVp_g6b}~xk2Gy8@IvKl&0h74NsDr7Wp}%#vD!|U!f5%2XbeVd>OwLyOp-C|1%?5n z&O;&5CTzcSNSLYzC*HUl9Qi*v5{=_yAngc8L^n1A?mZho7aiI=R5D+&xl!GQS+`QX zXxuIcwilYX&_%vYh-*=QR1!;bmC9OH=VEa6$&w>fm<}6<$aTR~F44p^WQaouTr0j{ zzSizG9sei>XZEs1i8)b%u?~THn}*`+x!b^#_j~9~*cVG&CI=0BCfoB`ywG_@S#G=Mn*`407V#K2RfG$j(@nm$``Q{vPl(qBBgb{bpuZ7W1Yc3>;_JP8ybZ zF_Io58gddT1?3cfjImz76&9{EgW9SHQxW3SL>my`7o98}{ihNFwayZbe$3n!--b3- z6dw|&EXBoSVubY0E9{_XL`Oz8fxK0m0K_Uns7uvh8ImgFy;nJ51Qj^`$>uAlRCc6i z5$a;5MvQ9cW?p7{!86A$1DSPQinfh#i#35!s1&qcxR`u@OfS*aIgt&*tS?NdvN4D` zl8R?;$*N+dzSDC8puR=)$4QTH+b@$Ss|Z_c-nS~rJBt=&f0RuHx0%rzFVgbg$!U!j zc}r@Zn3P~4AvV|Zew!=RDx>BS(fnQSd_maH5;w`gHg-ErOJln=LUAPT6Cy3GglaT# ztURS|H-0Dik4GiesasX>`UGBPPmM!jQY&63z zM?e>5<13b+$m~HDw`7RMX0Vf86G1V(M03rE_|KUeFyIOAA;=B*>B;0M&D*48?D?){ zM$U16JeNMybWdx~<=gvE(><+SXzxQ!_q6sbtBjTp7=Z(fvFBbvV0v%a0};{D6ExG- z;js9}wJ) z;xkiYc{x*K`E2=u8b2*{sNB+8v6$Gon__oR?9S9;0bhDFOM-kHvK2}0lvM?WM1KMA zbUb1bcok7Q56^?vkg(BQlX`3oyv*$ohn)fiv6sIwM>AI55~PKY!1*x5>4Hs|T+$|g zWD8I~;hE8hNElo)VlYhG%;fuIV2gwF)0a>ajv@_Azzwsoz$Uuta6(1wc6R3~pK1kG zt$RIFC*Uku8Vl*N#yM8JC$yQd$W{aYaL6;@cG*!k?L!VN2cWL=f>}2c{UgpzsR<_8 z<9N_9a;?C6_m<6dL+*v@KC4>5R&RKJbU@YKB6UUWJ4BHR3lv9C@t)8&yc{&-ajeg2 z^3cwtay71SJPk0wXAoA#Abpvf6*~l|o5719XRxHXN=h`>MThr^7DmC#@iGy=GswIz9;gwsbh$&?8w&L;_LE+tF_Sfp!Kduj z{1){Od&a>JTTSbwa_W>Z6YFWAkP*dMPJzMJoH3r##GtL44$vJyo zr@^M&VW-Kc*V#{2X*EZoQC{H5*4nDvF4owBGl$67?Y)#XkIQk17@c+0*z7Fs6WOi8 z7a(y9d4?Yx&>@v99K5`D7Gah_+}qu|cs&Z+iszp);ny=3a2?CNYi*ncVUh>Zh^t*! zfZE*NdUmkYda=HD@N~0(^~?Z2wOX*99m?T1f0uFB2GilRRWX@5FjK^U8{hCUkUPqrZw>~4aaNDQ&k`Fm_aUrhat53SgLyZEc{oNv6knft0BB}5$) zT_+y;j&D3=J4rzSxU#FfFp7DC+f^ExLeM`a@k!WYow6N;Nb?|el6vBonz8|S@J-cU z$0_%UG;R=s&sSv__x$puD{LF-49z{HjCs_h#!qadXs#?*L}#08qpp4*=iUreGRzq` zh>9JWjP|g9>NK~f6&kW(W;3rPst5ULXM`xgv9)dLpM5!&AV*oapO>SEj3LZP7(Ba6 zl{FZSQ(Q?ra&dKkQw&n#u|_pOb6r}V3C#t9U97*#6*Tf|rAfSP^XR>`shB16+|^JC zW(3W2lKAZ*B7+sU&=PS9=~prI;U&xpE1q1C=+rrX6^Y-)kW={b8<0F~tSk7x$kq^7 z%Pu0;bJ6fO>b#!@hV4N!nonBp!l#q>@AnD)&6NP}6qY($(U9gWLB#K4qC5$q5}4s6 zxm(w}9b>)ysMrwqtlWBjgsT;!59g-YGoTXa%u|P?dG3c|N*znMLxLMHSvJs|bVQ4r z^edu&lz4y_9H?o`$lSz@lBi6wwwmfV*yyrR(NPkKoUyLfsAgmxdcl!jv883_KX(wE zhucyV)!h@LlFqJj}9M*0>p- zoeGMUh!-nl+hi8L`u=u25J}ggrrJ!vu)zd>arUg2fmIlE%M&*855>@NpuD0Ym8N$V zc(`W z^o$hI@3h(;_mq053OCGZSsej#K~HG%g*g~0zRYF8%!SS%TbJRnO@%Frwt(X&8*~?c ztIc^sLT3@NR4Hp-l>}ZF8=htg`H^G z6>AJ&xkq3dQL|M}gEb3PKAH4k$h)?;U6NRrPr)o=sCb=aZYeP+btb?PB5;2bl$@|! z`(~*H!Z&r-=2l!STcpm;rOCS&Nyk2aldA>>X;Eh@n$XVmE|5QAjn!F0j)kGodEtWR zt<9$gFE+O7N)hsk;L@PZAvK{{<*9nr=F!x*!Y#QS;z5@MXhkVz7FF9(L9myy)`#vC zOP;fGm}OKVRX1ltDScjEmdbU<>Ul_IFMFd9}aSb7Vm@Fci z4gh(iRk!M*Jjz-TXT+4_ZbxFSq&oI2&Z5J$)Li;*WwGvbyn-BfsLi66el|`EVOCMndNxMBE+Kg=x!~(7^ zn9~g9R+`13hGd6bQ(J>ItBzcM5b{u63{~vL;vKdEJ?tULA%{Tb;3*Q)Mk0(xqlQgR z*U4acz7n`5oF0xCE6mzN=ENoJVK+XSjG|`P_Poa+)s0jBs@h!{HB7j8w4?Ccs^+si zJN3F2bwk3H*w(5vSmmYTfWkP=Rc%}zvx)hb8Cu#s79_8QBO)4pNREkrpifGu*V`tN zD@`SbzhGmOCbSV8jLmX!V~y*u&0!A2PT$JT6^mUn`@9_>qRcxHl)BkHE`jDV)j^YfGew@0!&1t^pfB!&uUYfJaW3e@}C)kt#qAd9s0_jCs8GDruEB5+HhLHJ(o8kQ0fC4~y8d`}QY}NWDW81CL%u z3>MgpxqKCQ?Ym)&VBRnqZg490iP3js-9T7l<=8r>53eKQQekq%Vb9EpFE>BcIiYCt--3A~c)?yr4B|SQxNpb{2do`H=qum-L zuUWv+?=k9>HT9 z7bgr>JTpJy6RLKN!73gwl|M%e(o8vXEUjYta{|P(yQjUI^OkVu@-BYOs;$SpvS9RSKEu z*ihsp6PdC{R+Xh7Jw>4hyrO+L-Ja0r*7=-;0yr&^1|L-86A5duy0ISo{L4R7!)Bs4 zWO(PMO5wnN_?Q>s?}2%-(n7smyfJ882$|({STyrwOnyi^)}_M_#Uhg_7FB8kj69sX zm_3Lp(lJxcPB&FU0op9c?A^tHVv%re3v%dA z1QK$*JSl&1C#Eq^0Y{@8Mak$W9Eh5n501J5W@BJ~tMH;5wgJDPhWb4kWo|siKEW0Z znhmxLo);rDw#D!qQv+*A7QhM^vrr~n0^iu9E|M_T0_J#ALz=n{utBGZ?u;FIosk+g z*W;aeq~mDCT0pY`I%0QszLYFJv4)UtRT_pz9QGzhu`x+!K!S`CqR?Xqa?$6`aWYQQ z;{+;y1q%$;hKoI!VVaHn#^ zG0V|tFj}V{YV)X;@s`@1CqCk=yoR-v8zr7DiyehCZPk8^`y6_9|9CP2Im|6^!i>f^ zX&_UE&$I&iRf(@?j-54-34(KMz!1P50rS*|TaM`JI|6vKQ2Uq;(lB^FIXoo7 zgS!l!IEwRK?L?zJ8n0Tiv0$!5`d&JExy|5eIhYL9#$Y!(9l^5Gh7Q%4{m)4_=4las z#@S8AMyd4{WkztyW^y4INw)cxaWnq~Q`1PCKrY*9FB%Q0JF!_=qY}@- zPu@xmq0YU_IR{a5)nPQt$B~+Ww2^c#9q+LDNNuieo{PZ{Z7Dqy3yImy3zkypa(=cd z(c(_F2m9Erqh3^-%MDITcOXJu{>~eJOwT=u#_guv8%UkS@WG-^Sdhb3oiBN7A%U|y zFIjMWOyGJFI}-C#6a<7i39H&MvQ>S@Q^$59kr8QQ8WDVuC8awG%>yu8@ z_C3h;qQ?8PC5#eHE+>^z;HJ6|*Et=SL|gH0d09H;N=3|LSy9M#Hn#S837&3lxAtv2 zMhqj)@3iBGRI^|AqAkpnk7Zc(<>o?YH3{EaMqT{IWbJq5f?V6&RQpZ2HhvNpKk*Ml zy*udaNjMsWxapF^6gR+)LU*=*wlOfSs9kKY5df0-U!eFho;3;eW2p@=lG4j|`S0goy z5mve68yIXaGMYb@g^ZbAWJRGmFUu`#tF(4D>>YR*c6_1}4tW!B+Iz%tL^0Iqvo*JO zoWI-hM?u-$rt!zy;e=619ibXegXaYBF1Xr!G&l~`&rKR?`_{gG{Q`{M5lej<>UW;t z%BZ_o#%8udeaQf-eux);(&0TRQ9IJryIsYt98 zHBW@M^q9S`#qSmB>3%X8AE(0ToJIn3ARsw(1nN;Eu=qcm9HpwJi*9wq`yWbs;z?Ne z*NvhMvr%FICyL+0sEZr<6fsjw#Pz7$Q|LMM1mw*=++YS&lw$mUk|b5ziCu9zbS&lD zo4rWZ9#_L*iz9Bf8r?HduW`t7kL|tSXZ7w$3k6F6iw~EmE4`>7!R^~So2~t)+q*9g zZr|q4Z{L32`e_}%`XRz$G<~bTj1NXuz31zm{2s)43rL2W&#I0qzPIV2ZHhTup#ZH~ z6H;%GFgkzVy{YMc+Z|*~@^h|AB4!Ugo0U`Hnmk6zawE;abMfS4keTYRaXt=*2;9Ju z9Hw5n$dzu51CFf$gei2uxkOW{i&(#R&I)CTY<(JOq$ROPBCtLU&#mnM zXeT2f+THkB1TA|{7x~NHWU#%bj|fC8+P1E6iwlGWxBxPL<|57lqO2L8L0il~@SWzJ zOIUkoI)^4K6?kv!M19{9qh?TRp>DrYnTT+cB(O=Wc?d3}p1S~^1FvR1$l^Sz{VJQf zGCYDfW$c7;8uZZlSk!rA28o(p(pXFwBPRG{6WrOLL1mAQ92Q_lYG=eC#T=!YN1$=g zH6|U@xg83BVQuRCI61|oCZp(2#EwHc-riZ?0^^U{Lz_2^-%42oX(FK!jmO?wC&C+I zeW)3Gd9Xv2&4`1uVYuI)R_|vIRB?5wA%A`S-LYxuCW9DI1KY%SAc7ZKUpD;k7WuRh&G(dEJ++aF188}_tdD*bOnAxa1ns&?e zShqOm7W?TRP2jgH{5TpCLpgD;XM%)IE)i+CqR#2K(r`E}I@kSb@y_zn_p?SQ)WSa} z$=Dc`N(K&oQrHx(Iix2rsZEieit*xoJ)d&j>B2a4Glkc4e zerj0`W=Csr7OcgvKe?5%4rJUuo;A$;bLO_&9(N zm5w^2u`h>M%Z?)PTH(u`z??moI7}ARH~3UDZ$^?)7yU{^Gkb~3AnPXf2rmrxZ$d6g zG1Hz{r@G4-I5~rrJs%1)e}o)R-Z&K{=b^>6ge`7a*t}JD!Wm)#Ao8LcP{qJrG2@PZ zBtvt#TT7PJE`{EKwtX8E0-<<4?5`ozJYN7zQOxJ;av4Vt;k?-}MeL2SU4za$5Nu+me{9MO=2!5Xu_q2aJG0F!H{(@~zD#@7(dqqz6v5U~}@LN1;0?I+~O z8bxP+Wi<1d>{I8_xQJnP3{hfeLF00Nl!yS$C-p!G1&lPFE;h5pjGI=bJd;UvpWsrC zLMbgiWpKdns~pAUN^b6t+Ttn_Pn)!u+h4+WU^JC!Y&8#ZjCj8$j#VRR-7q|A)hi@E5>@&emd;l1T z#874Mfsq-qu40f_>TjaFAPf3`8fbtW>9Trskz~@j##R;K*zBQQNLt#p?N@t%SO3|a zrMg)x6Co8x1x67@cy7*%MGU#FG)1&OQBe6y&F}Bl9d+w7Ir$dWjj@dE)yDST0gQ2^ zN2ksnu>CUMfB8_wagrV!hH1${{uBT|V(g+y)ZyoWNC+DwxPG zgGMJ#K`{5ib3N->Q|zfiS9LIDvRUJqvIKCTHt>x;AX+5`YzJNm%uSSK&1c(TI$?v) zo{KMzIEEoaTi8K52obJ-L9-Z&y?DX_NFy4`u|oTFFTrfghMM|jwFaG6BH~~zItLhU zre~*fYBSlFctk7`stH0_S4)Js6}ug}SQ>%TH}HW%9JWZtRZ$BjCgpA;4Z9ICsEEua zKg{AF6c3;-oQcxf+&t3+`okliDuFHK7osv^AUQ{p8)o!W`b3asR#v9doTa(QL4rX}D=zrHCSK;JL*XfS>ftZ!l@7j3dKYFB5Jmlx!9_7QgO!`gLM-x~6{yl*~ z_JA5E#t@MO@}?82S;5&QVl?j9$OC{?>;{{R@8-?jjU-d6h|o`T6fw#Pdev+NtHZZzQix`NW}-4%MH>K z5r0yX9QZnWmYJ!4zW-tqL)ck+>O!vGR#Igp)1DZxxLDGj|6HbyfNGqsD)OWQuGINB zQADaHp~o@tq=)g%=M>v7!Pu%RFr&A@+8Jp71-LvXTDN4y2t zD^cyq6v26aG3YbVC*ncwOl1P-`a{7sRGH`pWK~O4_|3eA(_c${C;=V9VZ%g!h|XA% zAn^pOGY+)^Ar32UR$S;i<5-E1hw4v}8z5fcOrVm#zM^H{CJCyT2tj zvLHt$EY;mOBlhE#RYXfP8a!8;9B?d4Mu{}N;BXG|RAk*Y>a(ai_lPqE}&>ka_OAuOSXHVMmC+&MG zmL>Y_L2jAE*42odZv?aG^6Zvqx@yS>q5dhFTqmm;xse}WUZpq-*9P zZ*5{{F25MG`}dPY$5ZNMuNV!H@?vA>MQi6^bN#3FP3FjVGY`Zq;RX}a>TA}i(}_K8 zAP5sycr2#y@P1ECAXdnDOmHYcVB(&{=EbLcxQtNGvbo;vq}#`}co8@*RH~_G{d@74 zSJ_62@mrC#Bpxk(4@QEO>I0TsjMWN%t!8VblM!FeBBT)?rg>CP;P1rVW21yQT(v+F ze>WfqTzaF(1r(CU4Cf_p>T0`TLh26BH789hdBagwz|yBGLZz;a#dmrdN*c&(fcxbRo}-5@MF!o-(Lv=sm@DEdBd&S45uG)U9}6Lm$U>I%Jg)l)$n3h!HE(v- zsTMrRymemSmG5_5WRPP|N+vpghBRpH?XB;MvD*Ig-R)OKi-F2=Nx>MvM9Wo&w74H5 zBB@GhjW*`+oCjJGvuoOlXm}~ATckdWYHJ%rpH1&DPS6xvS(=1^2BVnTob4fwMk^f5 z9J0${+&muldqLxIaDkM@R8g|SR*0K#q ziJr1pT`Yt+P%6hq>M~7pR57tN2P$j;+~&x)=SH!`(qMx=At~ z65eO&o{NvB&K>raaS3EI`~>Inje5gOBo|g{0o#g2Tb^0WNpjQ>N{g{_!o;d?;1)yo zVk(pASw%aH4t9RtUCNq&b~5Ci@0k!|e|r=x`i4V!sq&rXGQWPM{*=~ahft-X8)tdI z&ssSIJnaE(!>1aWcUk(Gs426Wicv9IPTB`AiGq~uMwyr_ySSE;ie-%(SY%WbOC()v zBH5<^RzRu04vRII)}_;WRoO8b>81&?gT_sK6V)?5iAne**Ay-k#@K zV&EbGbm9&R>{w5gQPf%c+#5kTn3QkJ3s`=>eM@`=EQ|=93!T0H`0ZQc(NKK5R}Z{m z=-tzKOVnR$@?6_Kgh+|1$d~;&sv?BA$$khORR>|*JvoW_h@1kZrHmqVAhfB6qA`_J zTpDi^NtBw9J*FWNJbKN%e|`HTIeYk1)V}j@?=c1~9+z+53X8M6{18*As}Okak$8dd zh4M&r6-}?T+7D5;8~j4Zs2;RN?-00om(X>1Y#BD?G)(L406{dO{I1P4p#%{l3dt-Y zvP7?o7t70C39x|xt<4L%Y#9fFlV}jL2Z6YA!T^SDHc_Q8apkkse_ZB{*D2=950{%p zQ4IO#yNE@rp|GCpZ|d3M&r)Lu6wEHRh>}#wO=NRwW@^B{R$WB0M83 z6b;Iz`a(blVXnd+BG|PK({<3M>RMo*??yfQTud&!E;l>IA; zmB8C3E`?h}M52Msnu&QJJ9Rv?!&k1%6_wCL-Gk6Un zQ4vFUUOwI);#V}jo8*5{dX`8Y)?%^keBO#bttdB3e}mRV5LDG4YU)8zWfR+sn5|e@ zEmp8)7iz5}cW#MH-I)i$ros3dD;Z@5WO{NQNFuUk@RL}V4ZY;<7;L^tljP60f0I=4w2OC^8VEYiGzP6fgM)8sWEQnT z%o5f%bb4JqcTGnYh|rz{I}^8%!g$zUD`lrHZ6oU)23Iol#aUnm#?u!%4#`2tLFY9i zCTFS^_PKX%K=B_NJ6?ZHKW+-k!%XZH#LWmgf9DAB)o#d={Ic2#YWa{R^BgH?&O(x| z%j8fbcqXoKHgk6xd5F@=>Zy%PG+CccvXNyS0+$d2X`rFE?P;q7x$K7~Q5fvQT!L@Q zjUbWBD!q5vn2-jj61cVag_rslnmtSO8uY8d0gdK!zg450T@it3*jFIo7)SZBgh0u( ze}HmvK!EeifH?JT;7Xh9BOKS5?oDD^3F_IvSGBkrDhJ2Nvd*HSgDz-dgrn~KSx1to zJm$`n%Y!>y(*R2xVOXt({0t1RODnYqk`Qbe>&=Ai=!Gs?gYPz*Ru^k;MDTCp5%O-b z!6BBgwX?InwRW)n^D1xL?)uJVYjvG}e{+86bCoN`h)WfYiSpD4t0q&sN*E#DOw&n} zCyr44esi%vhL!kFXlOc{V@j`fxfywM%`|b;K4M&RCZBj90{p3QQA(CWw4vfBD&)TK zG0o#_3VI`QC~n6D zpwQIXWa)khA&K`>2+2@E!YBAFe+0gYDu{#K9*bgIv*AFtj^l5wM+wsFHf4pKK&3St z#l2>3n5FrR3i1_u_fF;(2flpP7@f^%Vlj{-~SfwXddu@!3xGZk}! zab9soO=?ciAa$vA_19kg`Db<^sf+9yIbB(gpjs$a z^QoONB5&wyv}M};BoSyuf2OiSIei@y>#u8D*DzW}@sJS$3#zryVGZRBxhwY>=RG@W z5Y&r7n3dvq`DIJ?CaYvsjnTkY-qC?;XB_!?o2N+-t%&#&HD;BHYI1Az0-D2wg}d6p zlu+en8KnUx=82GDotUGm5jvq-jN!+c852Ok1h+GB{UG1z2-c{3f8k@8l2&aUM@>*I zvbbxYC-EVWKnkj$mDKA-btIDEFj!h<)*zer1#SV1sXTLeGh|egb|rJM$?(HUTuv$H zjf2@f)~j)3leXgcO(I>1+zUrTR-Kjwl3Z0o+;K8gnbYRR>iX8+y1MWig92bxr#fb( zt|+;C9f{vPVnryie?}mAoR6{Dvi*(C^|jzB{TsmOo~E_>ytVag9h(7w-JXn10s%Ff zu<>zvlEQjKx5Y^&_&aNtY?@&4BxfQh6f+Gkuow$mJuXH-!0<-in^eqeVDSa|M}0&% z9EVp3c|+hS60k2G`;*X#78T=V#tH;$?*kJ_lzR^QLY5Mbf3Zi!H>tR{G#v>(v}2>@ z`Qjp@`_4rhRAr3M)B9Ys<#?@3@5H;+7G@trtMfIQt$PCI1xz))iBev2CgXVH@|>f1 zBO9XwRXLd$iPjW$Chy2-PAv;w?QZO^A7F5v+nzj>HpGPA4_GGWU-5w-NroU24Jj?a zuFBfHq>brue|T5cbhDd}i`b0UMW$48Qua)kI_56jQqASp!s^u+Af_&b1!!3fjF`_8 z%XFAhAG-j*it;$d!w#|A%YWRrkdG6 z8l>V>f9Yc4()U(^)ua=>!XhTtT|XNYFB5>zPZQe=_B7EaVcOFH;)$o$)x)sUDtcg% zrLlIhQG+j$lo(}AEE-5IoSA2HYki+X9+_c_LDVQi+0`9gRyQwHMO`<#{B+!bWl)(d zaEry#A#O1&m@uaf4jDX)q~)`%m)0fU*rH0Le?7iC%#{&&;ZN0iE}MgQab;m;q12&0 z$^_=gtOiHE%Y`iP%yPXd@2U4pKtU`pKV(anvi0!kQo$kJQFz1ixpJ8pTb;W-8!cepRGLCXT$iptzga9WVA91JOEFmV~~VoE~>qxl|MH^fD2YQ#4M z{gOsSkmv09m@apD=w^D;xj?&P=zJj67h;)Z6ij_9I#3~;XLN#$WEZyXtZ&rgt)%&j z?ovz2i~h)(s&V-GG3R;I?2X1?MUn$*e~^A6n+M4VViBTaIGZ0K;>on7Hl058I9heI zGr4XW#-7^T=Y~jKTVLH>Z|!YtJtJbLZB?ixWuxyvaXlL1ZGm}S&C$~7}mm=BUnU5!kU*$RV~5?V^|9t#)mk4fbm-kbXE|% zoPW)tuVWeSuD8kU+bXudeY-9Ie?dohX-%_l8t;&>cSQBa$JX9;1ZE;_C&4NmR=TpY zg74qhb`QCM2jYV&WGzOv3c?eiXnXN6bFGQ7__NI?5XaZ)%g!V{7PDdVO9pC;ybOI~ zISJDZL}1PVc4nu>aKoB-5X(T*X*||s)C8Mi53K=8B$M@xKvnK>svW3_e@-ekIt8+O zp?N>3{Xk>GILbugC{QH2y{z^uG)wxCbMmb-@mVqaHWkcDv8{xxB;ioq27#BXkLQ(K z&c|FhQ^;nq1VmkcZmx?-II~}M<&MKPL1U_8h30}o#q^l*V<={)bG7j}4JGT8MrlZS zpcOA6k_njQTV8;jHbEUqe{;cBJWFx05X^Wp5IqgXNSw4J>EYnK=bBN?M0YS3V5y02k-8dkLMJ$S z*r<-qoY-X8nP#r9_ZK~kMu@|stUinW_N^+AW17O*AUc!yrZsiODqsUF8mwwH~3 z=vecrAsL(1Qr5Ll;dDND5yKTF>5iF8HC&=Vz)zlxNM|QDxGo^4A9Xep=}A;%OsniY z-`(e_i8oy6?j0JFf!mBO>4*`lpkz-;-Xb~yqA4I>^)tzhQr0I&pI|duFZZ8s@9t^5 z23wMuQ%->Ap zRpwDN7TPTA%o|a$OTRHQ3Wa}pm$(gN9%b3jpf*09^bZHL-bP~UhCD0ghTo+lqh_t1 zh;(N*?U^$8at*O(5YJg}e<5b&+h;O}$2P+K?clY$e`DSRYkGHz{+Y*ThLol3`IhM*cso1jCbu(_gaSbf5AlsU?PAK#9a z3TcXre;p-}Qbfi%L1np|vXUF>#e{`ILkGrFLe!~?IbAQj>l|oN0;h!OoVWYl<*js? z6KX0hgugvwbq;;+!7gA+B~`Md>9K?)Vdq*e1lV)}zy_W|kk-s#)tjEKCFdqDCK6&F zArs`I?o~6xV=}_R?*W8@Di8FgiLn)?YM5i5f325PFeg{!>xakZcj;`{F6t(?q8r*+ zox_-@s)?FfMf!Et9j-b>4qHuzyku#j1|#EqganvFh~+IO`!g227$ir-_I&{yGEoR2 zWOCdyg4$GcMF+$2NJ*6z{cOP&N#g)x+=M#}3g*z^l5&yJq{VBrX9oA|c(x;IP$K@7 ze=(a%!3>NO=fOXJd>TcJ_m&nI5#L+*T38?9G+X22o<^VAfrrARA1u2F-=6zQ2Iic~ z!366N?Wx?9Ac#%2wK^M;i7b|}Y1)sN*;Nv^%ifh?N3!3YdnY6>i}nJmI^b-2W`i8~ z(>ECezKbPan)c&pqg<>Jv3z85ZhP-%e+Im;_fCB)e5H!FB$@0z3W#)B(jcYfgizd3 z60C*&@O_N5lpI#opiW1Yi8P0(B(<;|bo}==wskiA$?nbzHD2Y6J!;sg5azs_`Mu4PxBwjo%r5KobU-sOT--MhF` zdXnYduq&`178?YSD%#krD%~hBTFW!;ZOOio}Cwps-WMG;>t$U2* z%_uM7{aivT-C4Q(2;gqhZ4PMjB*xKgksSZr8L@elT!&UW&c_xI;z=*8e;2cfLESXh z2YX5pkqFB>G3)hqSr%NePjr^;(;Z-Yy8hTyX+E8_e>FyZ)EDDYEDETZWMrJeIv#=SO z7GX?7w%zh1Ro1HsGFld^g^smo-L#}HNm4;%#3iEj-ogZ}Gw^|Ce5ZrPO2?qxQSe`HWIZJ;CT!!QRa zucpC?Q#CW1}ri6aidk;yba3SIVD+mY}c-9ifR#*0dsP=n)2)2>*x-F?@GqP&^wyc)=k| ztc+-6(Y@DFIwn4`e~6lvW<^nZ0g) zczRqv>JsO2_|6qpc*bgX`DCJRQH^8e-J*)zAtwn=Z&$Sh7HRg zJUWt?saPxPh>2o{LJV)b_{k_O54K*uc(T6BCgz!mE;PTNG11VFb>^&VYGzNV!5td4 z)q%-k%U7Sp(I!65%8F;p=^4&vw+$--*Hdd~iz6Dhqul+x(EM)3$PG1U_vXK@KmYb0 z<(C?Fnv2alfAg!r7l@^oHpge1f*^j8pQIgD@@I~+QllzN&z6$ns)_!hm3dP^pkbq!_HU&JJj&!@)-)zDC|H!~9dG=lqalJv||c0*w(Xi@`U zz>mk{VY)Iue|mb_JQ_@z$>?a_i1+8U_Iw|PCcSykLk9!mPUl&MgpdN-ZUf>)p_jgL zeZ|<)Dw1L7++H{VI9B^yF z-gcoCQI4g_phMt>;Z_!#;0OU4A|YKV?DDsZO*7V|CYNNwcg1h}Tktqk>f1#wcc7WK3WM#eVyYT!Z_Q1qc7WFRij{#Vv?5(5<&|1nYrz)X zg}Jx5)-=WwT}}vmu)Djx8&u01u`-g}>#Bcq%3W0ByJ%j~(HeWeHu>3Hu87WJ4<^Q@ z1OeSaIytobYE7S4>{$0(`!8uJe^#wiuG@y4*6NS6YX@7c7wf;*Ez_s8S z{W(zzE25r-&g(GZTi&Vf+7g?~r$MMz8nKf+VxF^U4OdqGtGYge|b=yAC73r z&#G6VELihMaHVo#8;sqzJl_HNfNOL9G|k){lwUQLysh@Ip5LfABJKoY<)Uv z<2Eb-3cNXt2fS(f@Pn0`Nz6JpxPv<7WHZFc%1SDh7i=R#8#7GUlbcr_Yk+IeCo;7O zw#9&^T?O|xe;(rpr5M&We|CX@WLp#&96Z_BYVH1lcfZf`2nB`Lc0VgX&ko+N9q<=Mh(@;=_aWpIa|>HrGpVn+bO}6}_3Ne{+(&CJP|}K*UDO z^U3Wp>(%zy$d?UPsjEy0?i^pyWy*Fd5=kYU^kBg!8v^SP4w%4a#wFtV3MZ%^kB!O7 z>ROl{*8|pho(Jq(jyN(2bkO0uROv5v{UykPkdUZ4Y^l&rUY@{S&!$IH1O<3tJ6lg! zSf{G$nZ_BTIGU-Yf2k!*wHRH*112A3GdZkivi+jTk!-Vc*D!W$ZvmrZy$;5epp}KXPi&B zmjDj|oL6LPN)} z5&t)~q1_~Dd9&FpRNCVc0|894-J$IUU0>4n=Jsl9pGlQ@fsy9$c=$gQpFDbTuH1G> zO>}Uuy4Koz9_;VFTzB^=uc$DuPhM_pt{tEbIIhCwzjv_r@`<- zpLOA3(hRoY1Kmla!???+Z6smnS;UO#&zx+Q{O~(9)Wrkh|2kte|^lB|IxdJyLtKF@;$u&l!KV| zxt9NV5(dOMZypidH92e&ojK1DrRYYSXN#T&4DN`eA$&G3+`nXfgJ8kf{8#`I{|B7> zabW!fx}P=I>Fz2N27TBKKMKF49AmR82o*R(C#qnN20dB zpY`Hs{N6QuyV>uQFw`I1aOICwv=q<(!S>UG)$Ogdm#h0U(NEFG1?PWx;m)1>`KRN5 z=lcAAfzMZL$|4cK2ME20WDZW0Z-vK)aYsVMe{IHt$yx9eS1ey;w^Fgg6{~BsP_Kxi zsR=U4;X;VsMWV3EYY;|nYUYIZx`r`gsV2)kiGiF)lSt;JP0pzw7fhB0AjFMRIx8;s zA?OaGux&E7v$YOU-b2n`NIi5Vpi|h3Q=&PMqXN;k>zYrPqjQbp6ZQHAY1{|dEwSbi zf73*R@enIFIAXTlh0cu!907Ga(L9>84jk5$9R(n7;9wI(%naIM+qcCO>v1?j(0sN{ zlx#oeuzI0ahj4_ZQ6HbD8YhK4md_^m?zKStFww-CqE}@DhhZx6*&*R*_Ty-yqc+kW z5yjT#4v$93WXR$i4l;Wj55GvlCf5}T@70r?!l7+7)N!&qHjVP3`i7?CsZ^H`p z=r}xyIiWCupb?=o;cQ5-*ovZebp)A;hHAi(h$9k^{5D}~J_t#H2^fH{-vh}j(EKSeM`7>QWp5)LxL5x@~kI35vke+Cb& zwoAm`XI)p1gC8Z<51D&pn?_>um96NFjypb-Yjyhp?rvIP{5*Qp8Y+DSC3Z!bRN0ImK@*$A-$k|9dG zD$e|>i9Zubm7?Ps@(vTU>7eKsf7gS_z&}+1`{>|U$+y#}hinnlfB_8VWIHFkz)dyh z?3=6tBNq3tRv{MCI$1XGf}waQ)VObs5dczNS4|Sjg}g}u$t<2h4Oa0Tj%+R+IxG_j zIcH)Gg-pCa@kS@Vr_mE2cH`4U$7%?$8^vr~qtg&~&E$|7axs(I8;eOgf3X#Ddqs=~ z`P|z;yP>2KHmtos13L$quv5BUa>VF(G`KNu&}kFqSbSbZGKh9HU8@NoD`yXzlt^rU z77f8W$PHpF0N8^_LBbyJLWm`y1f51Rz#qv_O^Wx%(U2us3~}%ZWb2<5jW-$(Lp7n7 zWMSsU;B+CF)lp(1Rc}5uf2!eBlPMaQ9ydh`fsrB(8t2oa=@Yu;z*7V)l|WCJW~F7I zPI{7gZ@`18GmDqLb4%Yz)KM3qThHCe9>CCy?VQrl#KtG|+E=d|AiI=X(zyLJbL^HZ zk6l<3y3InZwgiLal$I|Qp|AxDtg)a6+>b-Jkxzyyj+7%cfC5+4u_-Z4J15@SR70HwCe z>luGV6?Y+ca}RD{e}QCabhH}~B&Z(sbEWScL}z1){`E7}VQn~=H(|;CYYumapVzgMae- zpPbdk4qI(dA@{5y&!i==DH5uCS4=F?o<3}Z4ShIQsXPU>f0R!u#*|XhQ(i>w`7}N> zard=^`jSdGK!-vaXpocSs6!+6uyX6A1wXm z`01cyayNFJe;F9~UXRj>dQCG?HDpIW(PeNGLQ&N%X>P{^Qio%IR7_Km$=#8vp|x|e zOjt!sEP|NWmH;es(k5ZyX=0+TfD+NLy+r$&6qMs4(=EI$J%4SGbSFCTSZ6lV4AawY zGfw7@=Dk950pI*6u~G@VFphqN^)8)I*qGa*8j6Vue-Xh)RoMQU*?_TKA@vClU38p| zrX$g?i<~4UJr0c{z|h(P;#9}u=aa)=gG1f9nRo)nR+}jK{`sC-H#sqbmA*-wyt$P? z8l%xkbG*zvAx=sL;243@XLmBqcBKThi3G`J3hI0Q746}3aUpJ{lCS)E)EibReuAR$ zNRm#de}{;;imGcNE9=Cd%M0czAzV!86EIol5l7TbHM-A47(MC&!7YiqOD2qCp%NjG zn?T7=Q>a&PO^qRdF|0%w@ZcToS}DRw0Za-&A_i#b*arJ#Vv!Ygnv7BV;PV6ZWfjXr zg!M+V*{o()Za31L@J}X3F3=G)rm|T`A;P&Xe|T#+5RXe^Za2!0U9nR62q3YWCmCR@ zepQ^4gmAX$qz(<+#$lQx36^F9EqQ^_OoP1Fb+CTSTpM4%ptij?Z_^S;E7nbt*|rq% zlf+&1JW#e)HAU=_7}&Vklfi@&mwAd>u=8>Pn!%2Y{0IVoFtBcq#Iys5aCGU=Sy$F7!=C1lgeof~VO%>J zjV0G#It))S1;?yc!hWJyz+;Bx+MRM<58S(12@Qdt-?+lLUO4=C5 z%?BrbB}_{})xdUz6F#8B*L&-$FLyWgf1zvljmDA^G6Jennn4fw3gU5gnD$bR&%^Ab;rgIjRuB#-`y2Pa7n@|WNje_9eX zaF75)!BLWQ0xLVjxjl+CMh~#eJ3|mD!~qGI+)1u4O$(Eyas0dUR4GKRD%58<8FTt} z^;eSge?(=lX+mU9)rrKFX7ujSI&_Pv1%A*v8by&LV1#DwFfyU^O=uk^H;NRm!?%3X zTQWtaq30(s2gnoPYnl^;>=(Ndf1D^|+U4@T;oJ@(N=EW(Bd0gb=am8qKRTz((A2lM z6S%k~uYFI0H#PM)1{_qZC-Q1W>Z{;oJqAQL!%7Ot!WNEgz%AQ`jLBQ|;+m&GAH2<+ zeT|6D(>Og=Vl5BgDuabYEb3@FgLZGiC_rPwnR#0WI;?je#?EpeOt@3pf3VxPeRwF0 z?Dp+u{-8OYOQ4L~1#|(nHd{1+kvfqQX|Nuq=k(AKU2WG}laR!DyB9Wl-Lqy7TiJCx z3AM~uFn*X)9yTkd{$=icIX?e^VygaVnr zdv7_qdw(%%EG~8KHBr}Te^ z`sv4128l8oB(ldj8qt12qkr7nfmL>pd(a zn-k$uH*5KtJ#t}t{-3gvLylZAPO=1)zhpMRqm;2(w%1nVw83F3Mg;$9S<1E*dxu`daa4}>cEC8`AqQ={eS5==(!(K)F)|Y>OaY-l!Br$( znaXd;A+s^D{zmrVFq4yf7CUwof!+)O27rF*FGn6Hpx>V zHLC2lR<9@>7>Dio!(MVY-w#vBn^d+q?+Yo3p!mwe)eWT!8leG|24S5!OC~@96yO$U zY}DFAVgwp!7RD zfBS#`@BgRR_1BDFKVeBp=fI}0bqR=$ibwI-bkS&F9MlBr&(#@gwKe&s$yC-h!ZE@E zs&}o}d=$rO<16l+UY@;pd_^+NHzxZ$8;2VL)5VfyP0&>ACdY)6NLcDvh~_fUuk1FR z+~7%=f5vSh0AFdOT_zI@uv>?gER!IpgAEI)P2&5M??!uASj7mEG#LSN;z2?Hac)r3 z|NX!JPYx{E4g18rg(E8qB%+y}bpo;7k4FHDqr^%p5REj@tyQsF@-&g&pK)Gp7SKfKz zo*76dlGA3g0fl}_na+fRbqnAi@P~S8f6#45$GE~uE?BjA4!NS)Kaz}a*effv7gtu; zT%eo@m@2ju;-4CvAl>d_lP+!=^b0}(E?ydgEzmC%8=xc!wW}Ve@`PteC|#S`ebPXp zCbdim5r!%>OTpH6gw5%6u?3grsSd}L7l_N>%=Bv5qEL8#d)jQ2dEss=M1PM)f9DO@ zCrE=K%NhrE^wdl*(#YxDn4vDSu%qlV(E?0soPthB;0ppnITt)G)v3XVt?dDRCAEj; zT?Ata4*nBKW;5!vuHzVi)*487cRnH+`H``uh{t@d)=S_i2jiL}$2&t6yMQSc=rlBD zJ|GFgb9=R$SWPzNlsMnB0-&Obf27{I$ziKvRX@~X5b#(bvOOtgyTuKY3)fngz<4fh zmH~H}noTmbFQPB+`V(z!iEN7*wFF@&`v`*yvT~$gkXBxA52B~6IrW{>iIPjYpkL@l zKVs}hBSKq^umPNCaaIG_R(g`t+$dWK5s&!@rvhrSiFFB-Q)jY>E=c(Fe^}*|a(ODm z^U!fSI`t2p45?5+<`x)ia=qiJ!^z*uGL1_;E|tqHD=j83tCK%9sJ(u7(wnPzvPtatOAUzolv7h~PToNf zh8z<%iI1sJ_YIwH--fi5fB4sN`DH{mx8!QbT=By8rHm$r=MEO#9mdoo*MwZ7;==s# znoABRp-9U7cd)qavWFK6}-Dl>#hav0WH7uWc2x>O8<~%!t2a(4l!S)H z)p?12Kw2>lrz@2TQ6m~WI%kG@R%n9x}=#_GflIhstK@{Su8kDPW&ff^yn5j%&wq8$f2;7OTy&U~48yR29|LnT|e6G7;%GhZr>sZx2tv3lFi;l#K_h;?vx+MNw@6=B6W zJTcu0y1V)!4csWv=tI?e|Xp#*kzIlop^ z@gzrqFeL7ji^}c{ns&Csi_>==|BJQhR4mj=uv&2w5}tw`h`2(m?&<_D92FpnBzieW zD`!j~ytqS}M-y5`$q25nn^RLq%qzs{F^$74e~fxqu(V9**%k5l8Q~IOIj}Y3svB~Rs;#T7co5>*B+_I%5P(-1`<0nBmSpNG9t)az!3!M#o&h3c!IPvJRvX_AUa zNC4AFv6{h?30q4?F{2nm0z{spcI7~X&=r&u#e@S>C zNagF5$)E?@X%5F6s`ngq9x-?f+UFbtye90>DKEW^G&G#Bz=Dp997eiqkbR=cx;fM% z?i4~qCfEG*Cm|7G$iF2JQuEb2!tS_t60HP>9`FI~2DDz(0FTvjRX*@K{I5CU ziue#fB1S`}NpKoP?_6jg!UePve@a;aAjP-~*P`=q^I(%MxUobUW{!%bfH2Cbuv8=L)9--%&X1oi|(=Z}=Uy%d8AI zNPRepY2m~sSG4%74oduKh+iZ9w)R0XsfsKFOS057Y~NPGwnUr`)XGq!V1IAb8H>~R zlVmJ1Qe#`r$~2va2tu?+f1nI&OW9?4lQlImNoM@jaVyVxh9%&&C}cg7pyCltOq3-< z2|ES>_BhJuq!M+y5Oa09oBA2z(VO8RLn5jwP`@3g?S|0#Z;2>4jCvxN%WyY|W-b>x z1??D3J!CmXl+)!9{^95_9*YO#$P!r{Bbh{NMgs!fg~>e-8mmU%f8xuW5I={-z$9KE z%4f`WDJ*a|RYcVc!zdgbj~lc$V+(MuD$3J)Z-sO~oN zndtvHT|N^yY2aZ)WYylJXs;&~?dqO6CzPeGmYoD5#h}x(Zl< zK7#)z^MAM&;ga3-_7s1KPG>pmge4UDIN?Kaxdpwg?}(xti$eR4C!B4^`9koCm1IEu zAyj?Jc;SqSpMtV?Trf34A^Bxg8I197-$wE+)<@sIO~<5Vth=2S%qA+xMigdsYE#;H zGC9)PniCr4i)Cb1I@K@SjJR?m-^TTy=7 z0Dz5n%#H;k<||UuyGtQ(`}XR$-|CoMmQWdhn$p|Oe+cV_qXBy?r00WicqS$4+`SjG zfj|TQBILy6=t#6!li|@w;F0@;@XGEa$K_(kw6Gw-6-z=(n+ASb*XpS;d(T?16MSgV zjDDRf?R)%VMuNR!#F>!`#IwOZxaTcGVJW-4aleA42!ox5Vr*DyqQiu(IYNewAL*?Br@9=? z@5nivhb4+m$_gy0RWM9}^H1cq;=u_jAE_0-eNwMU>73FI6W+Ytm&7=Bs$nNlw!X08C416~4Tm#%Ek#0 zL5n!(u)N&aVMzY;iY6~bI+G5ovr&LmjC9f^w#PU;OqDo{rH};wa740y3h}TB&>x!%`;`pi=&Cc(g}KHERD-k;yd)CB{~I1-U6;uwP5j0SH9ut~e@ttr z-)tXHb2SL$ZM6s4b=qN9MuHAdKqG9bvWc;nZnG?P+6<5h)#cw=S=mp1X@|6VVQ0TT zd@|_Q17jidC}}h$kViQ0Rh%ID-okMhny# zil6;e8C)hr%>g|__@!c$VN9e9QrY2npC+SDy224a(==G+sM*m7X=on2&G#+}MK7<0 z^u|$nsr%k4o6o#JUeHu6@)^W9NR3zcEkXjXws!X3N}eo+K)WK?e?MclsT%7@s({myDKR` zxQK=!*Q!Yf4E790EiBQO5a}%Zhje}9%lvKD!Bb}|-4Q#%1UGxd4?QK9F&jN{dU~~j zr3IinkKeIrno=Lu?~=-nEtZ!1gITc3+qaTa`T!*!KCaCX1M7=ie_2w%_He5W(M`X7 z%Y_D-U{1Glex5xaSA?LVgLN7tp^X~`QxB=PDs*JI}EiJir1vbTyXxtKGW8u z(vF=HAELLMa&kcTz=(Rmt-fBNyt3V~5=&Y@H;*ar3b@L^DeN&YP+#9#mtzKaL9ShLambxaXjiYAbUD@xh3pA6GmEG46w^@MFfAC!24MuRXJB_e&c*Yv9Frz-k7Wml#I|H;s4zl~Vzqql7u7fwgK;8q+OOV7$!e1mUKTs0v1r{&s%; z?Of(qui6Tgf7;vm+o0}(+f=A2v0sLhLxL0}qDaNCQ|F{8AlI4ggc`7UkSu7;2kVHy zGYE}lOK&#XwJq3V?LXgLUk_4xL}cOLY^7E&O?;Dn-W13cPZJ@TB;z^^f~X~RG80)K z3k$`l)i%e9K2x!Kv#<`}5M^n!pHX>oE@0f2emsTg0;>bXiDV`Ni zs07>t5ca(+qEwWLAWr-(| zx`=woNNmMIS7M^slfZ&1#L!tI(W(lhvvY%?0Y80+R zqDFI}i%;WsakCR0#-X@&8<_ukX+g+W`XV!-FWPcCS7)0#;&;tegRl;C4HD)4wi%{v z0x#>LDVZ$vF1Hr#GDIk|Du=|Yk0fV`f8fHa$84Mu|8IMD?@Pu1TUc6JEX4o6yL|6D z{`Z&oxY%H9V3RSTd{#2x9vFJ&_IO_i6CsWbhupM(;pqf9@TJ zL!$BJ0rEWU66+Km!zgML5uO_aPoSH{CAo@&vx89l@sNKXvnR$N4ECe`FzNtxK#ISG z;fM%vgy%Q!h=8Qq>3M>X%g4E=KTdkR5VjFe!}fw7!$AaVM}9J*Rrw(~CWa`%$ks6I z=g{2U4%R!+=OHpJzO!G{k9|Vp_(_Zo6n|pG@$?8|nB4;fQyQFd}|MCv?TWIwr*0i_rFuaUY18xR%LC*K?C6^$dv?@GB1c z!BZ&R2Azl>OxowPYQ1;7>o3Cb`1t?&f6;yQtcmbNzjZ=>Or%;Eq1mL*54Pw*LYFd4 zE|Q<`h#(xbi9RzwX^?$L=m+wEOMg>~lM@Elt@s@tJP-Sa|JVPACWBJjr$msVi=k}C zPB`fWd+lQjD?4yn44zAR2>W|)OebR;9pOQojPZa7r1$6V=)o=yAdQUekP(WU&g+k( zL_lO0vm%gsmPDQC9S?yH$SEyoNXs#5?1ep^>|Wfbi+5Yw*c(9rd`wNBpnpCcGad_q zfgaO*_$y%s8We5Tq^sNbDjK|}1^gj=mmK0}@>@HO=!W|t93?6C;pc?99bgi_h>src z^k$3)livu&_Kqjl5r@D0CwKn~?w|j(ec(R4fB){({6F|!%>T3eUw1$4Fv>sw;rD;} z{;!Rrv;Ab9xPed6#|P~Hy?^EVOV|7V1wI$;f9vJ`^X-pJ2X+Ddzp%Ja$p3Ty?w#xS z-(TY6!riS@8tzl6ln}ka!)O2!=KabM-h`b2!j8y!s|YTh48wLjKCcEH0yAS8c!NEXkrD}U6e13n5prZX(5A0+1`Cq<6)PDZ_FD~4_zW=|(XMVnN zX}$9Y>71!nrSg@Dj8ok?1K7VDBa-oPweVtlGTwn@+?02_$$x47%@aDccnc%ZXq10j zJZdvav>?sQzkixcMy3GF!SLP{cnI9mJbvsy+UR#tc&{A}Hse9$?8i_pQ*0+3jbU|D zc(E#Z!C(Sac(!{@Z8iZ{Ow#N#iqTn8d~sLz;VPy}wHS%!30@h@~_~_NB4DPUhoMhtD!IQ<#(SwX@8X!m*;-zeGZOuiZn79Gn;Ru zV*4cyp5h*x^r6$Tfekc2p5`b#<(Am^E9xWmD|-R5X?Hpq8XIdiZ-@-7tt(3 zJ1LohjDMyQ0No7~uh9?&%-LZ$M1=M4Hp=_DnhvPZWk+5p?$sc$XvUg*OL{#&L8k;0 z4JBe6Ly*b9r(mb)ge3b9wI!j|G`<;AGVGX}_HYT%da-A(*msKt)uaUNCCMNHEOz5~JCUoHdUh`$H{UGvR=d4SPPw+_*X_ z*IwUS|2VFNS7AhoHPkQ?y~ z-e^3}L`V=RVYfOISun(x%#V2Z9H=q7)^WwV+R0RL}41YJawL*Ug(^@tM!3A`%|G2^#RafQG1S8_kA`5Tib}0$c=V6O3a?!Xl^#9T~sYTdCg&EPWZ@4G@gbyzocIgJwe@eo~VT z>OAVebL1$jjsBM1^yXyTL8fd){!<+tR_ks=_23)3w%WTmNVxU;n=6o8wW-Vd=uxl` zOmh?2`FZW-!T$5z?N_y+I!KtOXMX_JyA46%GafDG8)3yr`phoQ-+aiqT({y8SF6He zI@8$HRfK6Z$L3)FEqKNRT-!~5`k*f}A~h7bY}3D6OYR>)3mzL6X%UjZ9)(>K49Kn- zsZ$m>@puE}ZcA}@uAW6>e(~fSK4oV$djjhL0qZx?xG||0Q`D`U*NgYwxPKTAlq|Zm@7+Hzs7;H`Y_^CBqX+TD%I043D@Xa@F(erQb%zV3C z0C;|ld{J&a{H@7sD8b_P?uz)uFV?9mTKHu{-Fsp{&D6#uc+`QFeklwB{@gC+;A3hH z;{lUOjm!+?y>c5f``s{jPk%(CcRU`&3hf}eO9{=-8VNKAoo#I~sxuQh#EW#dg$vrY~pF-Ijq~m5=PL`M{xM>VIjYOHJMyiOIgi z_0=$CeaSjQoh_OLshe6d3cA*6y3TVZ{Er4y>iDE1>@i(knFM=+BIbt)?h2g1z9F4)%oN|sIm7PUdnWjIEM?sgmjvf@sB zFdj`JbH^1H(~y)LAb-ga050&3$!8|4F;D+Vh^$H4&hz9Hj<$7?riVnu4>@L?L|tOV z0OA{pSUc&$mPmZ1*bPh*rJ2S|95!>#oCqKM7F>)Y4%81O-ozylfat)s*{meBwB>?P zaj;nLS~rWM^PalE$(qh}$_lQTxbqSLPu2$>RQBx9Gd@<-z<=oj|EU}%dVKuA4NUt* z>_ip}4SE? zOfR!I{gs_=mw(o$xzMfizq3|pW@9vsjjh$)_150T*0Y0OE-3nsjh(%N)$JEMyX$*< z8{1nx7H)Mq!Panot7l~M+4bU4zgS-G5=qjpfn-^DQ)kLW{w&F#J8z~8f!-}kk-PHe zp8UB#qr!JmdotzTj4AhI$~~EKPp90QHRYa8xu;X^>6ClrQ(mQ; zauj;A?)CFPU{Pld4on%k5eg_r?uk6U(VC{g+FVoI@rlOUtzL%hVxU#^22e|vrAttP zJXD??9Dk`#NY3c;*_ZF~$!F-&;pSH5g6>-vc7OS<-JKN;gQp`Rj)U6!xr;{dkE@Sh zW##GSc5A<+SKOo}kY_L1D}diWP~pQiCo{h6hU`bykzV~qLG1j^U!*i*9iFzdw!Xfz zx7ym;+}K+8r>nP?QUqNaqPz?J1JZ11qi(L!Tz{z|QJXR14^IenRSAgu=p?;U;LCC} z+L+{q7on^Z=@g07hn7ao&dHW8r?<*06e@XC?p&c{u`WJE`K?h-nNvaRm&e#&dHKAL zzY-tSkdYD=1ApL?44dj#&&MS>t9f8i_lTOZ27WI*$;f8R=fcHg;qm8M%1^YAUu+q( zzkdn~`X!*+sbW7pTz^8y{_DW@=UmXg9-{E$1(|O%gt{Mu>hlISp98ymf|Z}X<{!M? zSH>UtrTSdJ`bhxwvo4q_0s>Z0TM~;+1&)j|ANC*ZWT=Ff3!K!35W6GfS2ldiD^8V~ z(L#8%79McR z0*&9BlAbQB#>GcCRu&GDWJt(#FRFOHE@HA6Gx96`v@N&PE^BN~7VE1+}&Hr+=-N zoBMOQsaAg-{5t-X1MHbxl&L44wcP)&w>-1xUvJHQ#E`_+;X{WJ{(1`)=AQv^rM`?x@qsjN8~IpK5itgoev*N7qPRai~@#M{9fa&QO}b8MfFYt z+T`K*IH=(onPUw6p~HZ|=*1g^0e^AH#e1K7K(OJX%W~RC)Wq-H>0}Pi12uolRe>?# zxy^{9p}>q9XELBUXk&5I`Owi?$^UDp8~&ShI&Y>7eT0~B8iz0VegWxQaJjYLoyKYO z;UL`~a^A8;Eeyo=_Oad56&82TIC@gw*{Yg==e{j#B9a9{lpi`yq=x-RG=EBFVx~?q z`1RJ94>~;KQ%A~XCPD*P1H(lGniKsuv%Iqa)2NjG&v5Gh&A3 zU(I+qXx_>Sk=aK?g&!c?wPHTG`-%nmo({EsJiKsik{WGOVW|xx#Ll@7mvdh&VJb!XQ1tEJ^R(!j> zq+pi^sv8pv9tL*`M7K}N@{FO{5e6a}WhALMRkZ+G&%At@L**l+p!O{3C~YKC3C1t; zA|yfAz#)9qx*^>wB7c>2%xe3yD;5Br%?oc~GS5p52%Li36)+@M>05Jmt|q-?^yFNS zU~Xu6jduC#JSyE&1bpZNyx|w>Encc7**0mw&6AJ9j)w+)_9+RO50h zu=H=U0$J>EnFUY)^zg=XIJ^+cT&^F+2UqSTXAE^gH;Uyh(@PmbytoI);9aecD@_A8 z!>s1@=D5nZ!J}QG$tw+08L~?(#FYExDibjG&h*~g*?!1ppxs!!@VI8gh8CrNyZ9zY zGw17ZUvwX|`+vilUyWEzOsZP29-lsh%tCp$Yj$z`kK9q0)t}57D{uFw7;Fx1K6bSJ zFnyZ+k|X4}#S;X39f*4(HPsC4a3NeCB+kAy6NtbSgNfsy`H}neQ93Oct(p#OYDvxs zA}Qkp*6cpk{rPgV1^na;Ic2S9E}o46r(JW4!laTrc7N_Ja!2IT>s2qeuG5rRMO>XF z5if%}9$y-DeB@34a$r400&k#_=BQbnedCv7*%FdC94Fn{%w5YL&)G|w5!PJt1}tX> zu6(ci&3shPvu>SFLW$@08Lq7o&|ESJ3?iF?r<}qw&M}`!I`N{lu@yXhxwQ(v_|G8; zg3ob0$bU;0g4-fpuuS@Rbe?C-3%q^cyAI&vGh#m7UtYqai(LVhQGwp^7`MD&M23w4 z*Mk}Ijv&Ykq8?lvsB4q+iBzF(Ex3fNWyG2z=hgKcoHRY_RIdp! zQEhGtiCL66`NKfMiP_!0-1>2A`_-1~xLLh)Py9zku?rB7{?Soxu0PX07sY>qfRY1E zA>-i(_HjY{x21dcmJ0Eo78mbb$A9_)pRc|`zK+Yqf6Amnx^(;}>Y?)F<;LdP{)-(V zn}3qS-zt@jo!0(y`q9|9`7gLD?{8C;gPq;=ryD>2KCe-J=1o(-R&Hbq?!IVk?QU=H zyQ0GpQAKIzU1Ray!X?UADw}2mn`I;D#fRL=W_c_0y4d6Nvi$m0uih9Tj7c!7!}3xW z^n8g*G~taWdzf#}tZJjj{xJC4>+c_PP=6Ns9-Yy@2p`W)_qa3tIyQy+mCEYRKT~V- zlXNtH7!T%;zWuhcxs`uXS$(?MddA%zRVvS)ZfvgOM=@##I>^Tx$vopwBJPPsGm!_y z2wn2L7)qn?+{N;!Y@5;D{Fi~&-{<|_64drzy3lw@r4sgfD?#boN@Z$`E7{;InSWpH z;jnU}|E?1g`#khp#vo|*f6tc=8ttHw%osjZ zqmBm@h$S>w(Y8i?e~Ru=S?`|~|9@X}{}<2d)%%!z|1aLZvz(9ry|j4${=)VB{{=o@ zD*j`4(22UifnX$nlz`L0@j>M)NeWs1@>7S7{L-NtuM~js%Y;jUVQy=;^q>>}|z@~9t@nbpESjJ~XDRpZgT6j^W zn5v0v(ko@8(Zx4Yq>RM@SWAbJSG&)i6rSc~xi$4o5B{ZGI!m#TJD7W%Kl2 zn+fI`DVdpH!pgQJ95LCfrMz_v*c3u*sNdw=$2=+KjeK{e~* zQFUlQ4lRzV1f@tu@0!zNy43^wU~PSO^M4O~dt z1mfu(;Ms%BTQtWjsqgq@w%wW+m@T#@B;|rbP6vN*u`|ugh;ar_^=)T0uVWu4WqPXR zdd?J-#%uX*oM^CrAb&>1e#AL^N~2@Bkx6_kQ@PBwxX(6~CWMI>bEu?}l(m6P`~XB= zX|K3Ix0Hk&i^+ppZeg-LjKb5MtJG2~`hVnrVupW?ZB9lv_h4orJDzNRY=xQknVR7+ z&i0nGJ-`I${AeryyTjy+7j+0vs5apwIX({N-Db-GS#6V9s(%N$yVk;+?v)pJO}Ei+ z$%04zp=|vF+XOGuZL_W=&&^WGEB?pBS`Y0pe@tZ=dukgVX=%OcXx852&vqAm`WuHa z8eeGZpXEyX)bT?<)2)lR%e2K1M$+y}*f~T>gEfQ%NO3`Gk@7ggU1;c6gf@GJhBW#v z@>e41F7C2?j(-M@Bree&kS}=5!OspOb9SSSUY3ytSH_q|9f{eDtUMusre2Upxyd(V zUyOj^4rAlw#z4I$rZt>tI>`jFw6cCQw@%{sx9a>A*)CuKZqwVE=!my|+W5yUrUjz5 zBTFJ1cQ_fHy9^jw$K%X2iTt^xy7y?EmEOkJ+FXE)pMQo9<)BdR2aS(^;Cn2$$$}88 z_RI=77!Q2nklK)+I%{gip$l&3frmFaigN))(^QP1<=F$TCUt;^85GTA ztl7ec#(x1zz;R>QzGhCI=10PjL354d%9|FAOgP`_}>C>gm)6ch!EketO$w@SIe;AL^d4J5TJJ{H%>yDS+y4RUE`pM#)44%>6 zw8RImuGTLu*=J)YL9*%f!kigamD z((sfv-;wd#%e^wujX1z3ClVONW99HzYNO&pNn-Rd+#c^qmi|^ct!}DtLH2&~2+-ZlH-S@SGtm|yXLe$55n28)LJwbDr!vVnirq$$Uqd2TM5 zha9HOBWj&*$~i|(HKRCxKo1^2@xP}Zlp)&mv6L7Q3kN@l)8pv^30W%t z*CinyTB2;TvtajX!zqJv4`Prs$lPk3(w$UTAE&dx+;*PtZlepEf8(zWnzC-9HADqF ze+xBZgv7hp7F;oJ*y%h^AlEBg9Dl`yGkwoormVQ4h}lcZ;3^-TM0WVMXNb-4$*+?M z7-+&{7lH=jqxbXe037d0)M26VqaXzd(LQL0>G+{3^0+3#@m#lF#l~arepe{c!I$hK z!lK%(Uw=&6eu$(3fxk(ZZ_re|e3JD$;3(V!D|uPsk6_*`uNk=3n#NFNv2 zf8JfbTg?A?o&WpGeEtyo4}SwrCDtGQtLe5MU&>J8Go+S;VtM=Jez3Fg^ZMprW6ZBO z2O#smkh8G**IgZQgKDM+N2IgZhHouS*2ls$&DwZwG}bd1|HnqC;{%2A*~q7GAZZn9 zF@lB6*IhTPoAxd>2JoTGS~%JQ_vOp!oQ(H-CwWPdV;S_OY+? zvt*gB!B&BLcjLBYw}P_4m%qjg%HPN|%HQ!^%3sNZitjR-%t?BDaL86ID&9X}{YE+4 zBLG5Wxak=S;5DlamM+BXVptHbgfMmaRhdzMmuAL$S)a@pbY7QSC!KBiTKUCTa`Z`8 zR3BevRZT$mKhwhE-+zw=LYl?}C3q$ml)+^FgwW2@o4G4Gy;&P0v-{J+{GW9LKjq>2 z!}byX%AM_*T4(@4JH-dHN;tznzkrdI)3m0)IwK8ZuYfp7kQxn@kZGTVT46)^R2=s7@& zthdVARr%mw_7j@Lntc;J5WyU!KIcm}R6n!X5v`Y;4t5vPb#O<62o_;EdhWonsL zyaMb#<$s!!walUhh_N6@46OWZu5UVepye~?{^AO10y87$T^2)J+~V)qcFVFjT3m8* zYf{{zmCIHz80NCW_0Y}iDqk2z`S6tisu3Fh%V7?r@~h<`#+sJMVl^RFES&A;)nX8xUrDf6#4X50J_0WG21nRciQlZf_43q7lv=1 zjvPq3K628kLLDDiU9Exyt5DAaWLGUO)%v}B*?mZNm2>j0KMUZ05cRJht@a@r^xP1@ zLVxUuZ1uJUw9PQZMMnT#f|@`onp5Ca1n}hR`6$b;roz+P1Q31|4~>imw;t$bUu2*(`^pE$?3)bWxmRut>=72$x6M=Ihndr^{K1}^|6VU{ zM>X3HV+?sF-(PNQ?U!GlH4V%OLM=np$T=vlgeww3Wrf12>!{B-*+r)q*%+S%&VRO& zc|=vtO%*fqOg8grByibc)H1ym5}G?t0lO+CxwU6g82(Zj8hq9&jp_+S$H?Io$=g2nvjOZCqu2^V!=!_4+!d<=<(A&F3mBoljc-saM)^d;d-g z?UMAgHg}%4rlL@{*437`&L6wR{(t&9-uR*g{_w^9@P)l9^qOU5t;5sZ?XCUGtnEK$ zukFgp)6MPHlnV+Ue?7A@n#-=Kh-}T0ewj5Dve_(YaZNL8`J}b_<0XYkmp~f-K*fs@ z$At@zPk!;OH0vq|&5#5h8YQK#s77B;#Sq;p*^rn51cZh_D|>(uj5GB}d^X9v}DFqvt5%$X%yVJnD!a zdqj=$KWRVg_0(-MZL-d-8h@wVcn~8YRU0o4!!*X1^I$aTMJdN3p>DRqE%v(J7;x!x zSPM^j;}jm<$>fLw;~~rzqI>xY)pT+=Km?N>8q$stt!~g3hb7J>LOrJu4fxiGLv)Rh za3nlLw{eQe1&5Jja!rE6_=uNEVr4{U!&=bjybs{!#hXC45xu24HGeKLhxow$d%QJ8 z5wX}6r04G|x-Gh+bdUFGQ`g?t%zniORJiVbQPW1Wg>WvS6hnKDABo@pgOYa-9|enL z?>c@pciGwoxl-=370u}=y2bf|!tpp7OvHaaM5MwV$A%fZ5<2(4c_IV}rSBpL;9oDc zhZ*w1?B2)8IPCcYsDEq3H(2Q-3uQk%Grc$Sy|c6K+WOYs#{Mq{+fNUE+W5!8)bVsK zGaQ~OENmHSF$DspBX*QSlma>?NQGPXtIBX`J0|@|J=g?J5NR?EjtMpS$M1vYkQ=ZG z1Yto@RvW;GdFBLhe=|pwz%i5OFDoj$csy=QnQ={Rs*|tw*?$th5C#MaOS%L`gbQiA zf~whuaZKo(4rw*upnr%!L2LKVNk}&ey#~4=lp*1T;H}KgB=NY2E~LGEG`IG?6k%ja zcqqfv$zYBg($F%BJF=MLqmaclMj$jU&;RkU2kg_Itf^!B^B%U3xUV4y#Q970Z_)UORyxg&ze*Ekmt?M^^z|Z^relvSra}`U~!cRSA|Gvz0{5B+b zodYd|BZ?!0rbXa9KG6Af<~!yV(YaO(X#2; z&HfWkXSUGfkLHj6-9J~6|9qhP#|84Ahl7nGpW`^9;7a`3%pFAQRcj6>lm>%`w!|XF5VDjY< z@io_8oTT8c`hG#1IWX6YJTErsKM~93%usqq3CpDXhZEWax+xx)rOI$mkYzFZ1nZK0 z!b0=xqc%!qhIyXO!>lRg$xl)nOy1l~55Am?5Pzb!UN}06g2P_Yey6ddB+{*f0OlaL z@gQXy41wxdy&{-8vFZrkKn#1YgAhcg5s_rXy(3N^3omv4 zBTl~2{EI|?R=V!9v|Uvus7mxsH*z=;|0Q&6i2}C#8`H&g2_y>(yQ2|OJ_zuPSXvu$ zlHWRld3GjkA(_SFmLYW%sr>pl9@6%VPk&+j$nWcxPUp-iCR=bC9RZdBPhoHrpHT5$ zG&mX`2UQ4cM1m%H!PAwBTnu8~C~QPrLbFsKzxs|BnO83s|a(qrA1SjF?dy*MipT&j$)wl~CLBMB``b_8qy^A1NXW6}+ ztX^GY`(R;kNJPrMIKQ|+f0*Mo^Qw*G0fc6Q^SNfQ#{zdON;hmX4mPKZSIffzbz#}% z6-4j^XEni{-ypL0XrzgB6pKXvoPT({yV)|#=3Z`Z7Z<<^-VVxGArU!Trkrh*yFjhk z6&{Ho!>c2GUAk~!dYDm*DsZ$Z{Im4^!gt>+t}W^HTRkBK}JA{YOZiZ<$wO;m_B0y zt`thLpc+aNbq*XCb2xZ91!-jSFtKKe%lG3njZau~z(JeS_>du-e{#N><770hON9FA z_|2gtPh-Flj-zsn#WE=A^1Xd1NL0)3(Tz-(zB&A*SQV8e;f+ATH-Lje&mSSG<1Lrj zL}403{gHU6gLNT_+7C^1^M51=+wDnz!lvP&2$f_QW^sY?`XM2hu=868^kL#wmQ0m; z2Eii90TgW@#TGT8mJZmNbcGmu`m(^G`WN}%r8=@n^VhA$;_o^e9*zXQMtPboD#)KD z`hx`2x3!K|*%;qS`6?uoJ{Daf+&@)FiE&{ra&eiVAx{U-1~-FUj(<*W9pcnUG)K`< zIO_Beo01wp3T?@_fD-3WZhFnoXe2EXW9HWFCkUbc1d-kqYvA%0yvu+#El~NP7m;34 z0%&;oMZ~OW1U2&|B7!dk-J(P4-AX0)L0y#jJG(iT7 zTyd5$M02cIstMYgrJCprz)m-JP(yq0dJe~P!PCus$lL0;=YQ@jG<{^1Ys*SVwJjXx zAZ3DwmaC{#<(qT4$>LLq^$se3m~b*OUgCC-&_cvqMXJhucHo9C0Bc7}!N|!OEeP#} zRAEA`c9=ckb0&1lXS*&XfWb~{^)piTGH3Zci1&Eum0^M#jM4MIlsza;R0}(nH9g@WIM~=Di#0354Bcn-j zm^27#gy|aE#9Ve^hzn-%eT*o9$Tw#$0GVdt4uFs{@P9_6t6euoeiG%@nK6S|WM#_z z+ftCl)_QA~GZ~tY2fB$3_J~Rhi!TxkC9<{5t<)Ga$RQ@E7_pfRjEQ6ieK$eA#)58_Dzn! z9~0*W%q3YAYiSfI>r{6sm(VrZ?{bDF9KQF$uYWNjm9xfO2(tc_4jx z#c>z#v2baoVix)EQVB&f2yS)W-%>0~OVefFPc2W2S8;Z#s$#R;4p?z9*1!hd(ljNv zWT$duKL?uz#={pOp*iTagW}JJ)W!Dx^P%*XurQw(q2s(1H{6hHY84}GHHC^~n58xV zvVR7x=LSND(K|87QO?Q6x;9a3J#bShxh1?oM8VT(NR9)!y52LdSt1D}Xb{}kp}~5w z(jYoBEJstJ6 zY&d#MN9r{4aMzkUO{R{qH9aa2izl0@%rg(hRnygRAacD6i_9!kw`icj!nip$h;hHVt;ft zWXc~R1n6_++V`cH)fC zLWHW8IW*CvsR8A}(t7(Z|850OV0D+(R=6_O|Piup-KCcHJUkw0~ij5H#BO zZ+{Ji(VxG;;N`wZidVO{_V!y_`+GraYb|*Ca%**egC6}QCh-@5gkW8?zvB3C5*b3- zY5j63Q;qW2+~p#yp`#(pDIFqsjX>g}caEoRvf3(;7oz$Sg;crr>sp`V^f{V8NW=K3 zF!mB%Hy5Hz-w&*L%2eyXDSw05{CxHapg@iyOLQu0VpYV3OmrM(j&L-v$kJp6Mip+d z*OA)i2Sk;#YTtSWnVMxwE2gH*s2wayqRWNF2eV6yIkqjES?FwgT%xRiG$F4)%W~Tj z8~Gf%+@Dz8MWf!&sPwY}06wz=$9gR^zsE;}$VOHwFK8YaJC9ms9e<3{)-;ek=2DwZ zBWyE^r@QpEZ9<#mV_jACwEpMIb(yyXlv1>)C2774%X}(J3$g-xr?tDjwQt*%@}(p2 zi%a7&h%bD@6Rw?ozfZe#zy}|Q^6Zh^G0Rh-Qw~V3{GGCk$SWmn78fs9%5x&YG*HzUwb$}1IhS7&Y4LN;bAMxfeLc8;cUeLK*t~r4 zpiR6XL4h)*fELKTs%m^kK*SY9Wgs_hA3}tY$R)C+Bu6U&l*WFQha093qqBU9$1Wd6 z2v&N0XXyYxXh4q^t(OfD((hnkQmq%SI3}pk-#)ui9vJ}THKKTWU7{?7IQ(BId$&lQ7~F)2hQjR7qg%lu*cA%7&LQK@nPNSwP6Ey5o6f@$st z|DYOMt*!h7^WHx)!MWgHZtDBN+`x<_KKp)7(~>M(@icO8BYq7SmKlVSMJNqK_G!W!+E zem{D#E(H_Q_^3-mRDrSkBj8JU0bW3k!LXkTzkhJinsM3xDDe7-Wx5JrIZpmc5S3@t zKi^K+1@WW5@XVnXRcoj|yEA2dP(&KnDG}veaVKoBgZ+}o1{dBJru>z5#TPqY?zSn4 ztv=tDT!+{Cj}EW(Ig;Yc{|7`G`b_IqM35pZv$Edo9h^sNR|=`7*lr4bEVigkNgJOL zBY*w-16hrAiw+UJ1g z=R}a62R155&=1?AB&W;Wf4;l@iui){pAnqB^z$p-N>f>iDK-9ewF*=N|8i^(iGNKZ z(M^Js{yvyhgWd-ZAM*Ii%a!&qny@Lwfl$}9LN#uwN&nTnG$K+1As0@8JKOmLBV~R3 ze%UG88g$b^i-{m>f3gVS7sr2knoLH>bc`YH9vy~P4+Awj{?na%OG|h1@t>BK?k!x$ zfBFKSFCPCX4^Fu-P-U+#mkay}F@Ml_`8?_kk;VH91{Z(2{c<;0ecsyITHkbz53tAG z-`IM&{qi%I;9i&mJHL>t*4KeC-bx^Ov4iZgX=akyDyivBo5UvdyC58xffQE5ExAF%)XTuDZ5f1kLDOLO|0q&fX9cxY#iJg2`EY=3aXWbJ+4#%(xG zUoU%^I003>%+I3n4%VgS#>cLbbM@f2dhpGA=zulNY%n+U#)c1MoWAwY`^;OFvLU?7 zBd4mvNEY7sf#|iIBpS|@Tr4ZexrK8Dm&yv7uvNa%1q$DJlNqSRM&Iz)AE-udvtIw^ ztsR%irtEf)V@%ucq~%V8Y`4F8BPXca9`w$ggQjs9L<%qo zK8U0qoibi5Ev45GWjG&yp}Adfr{9b-yW2`eOC18~(fX*&87 z4pJhxi0Q9sEikecIxa%!=K+V~I4)$o$W?PO3&M_}@N$6-Gz=wX9 zZ$ZAI-hUY1dUfT|<*P3it1n)m`ckp_(v0fnbUZSV^DZbV#LmpJ-+t@x_C?V7d!>M& z^ZVe_P-XA)haY|cF3hJ%!t*KcjV?zV8Ofoj)0akSNWNZ7xDohH-kPW*esy7P zbHunu95I_bh32vJhAaLsBQ)>}e-zD`SufK;<54gT8%*Pw%LbPxn4!h(Y3e7jW0S~l z;D6v{oit^WHYJWoISMv+U>8bGtB<&|%U|Gq5GpAgb-=hX-?OKYU%vS!3&-45vyg17 zxN~ASg@~ws%RCoVc`2w#+k&G#-aS)&ns21k1$roB^vk$y;b`4_<{spMz9hVj#O8(3 zCLNnzk8yGxhM;T|?$@_bG9{)UjAEmhjekVTt;RVVQ>H$Lcp5Po6KRAd!v61|*Agq) z!TD);UUvcO06u;bgT!#gCj6S=jK#Mu>fki9sTU!F0h@L8&g;2RaFApU1Xb0!NN>65 zNg5$eBSCph2;qWo{b>}S8PiI{p`*qHN{7v*GNVwr*C^^D>{ExMg!(~)v-MFhlYcU7 zZ~JeI!^$HSd9}}HNDO9iWebLKBC2Z&W4~aiql=0xl@;+0i9NX-l5sL-QQ2H`I7yEW z4#W04cNDI2b=jkL^-41J539HMf%TTIRL@GSY#kp7Ikdbp@lPxk(=j*>BXB@K!PiXd z=K^}wv!VEoBU3#e(GStj*i6#I=YR9axet)8UQ$x{39o@4E_n@P7|)EKOnfxJfsS)T ztcK}}O5vZ!?Jq}T@d6p0TquRb_;&G4h7i4!WX()RBg{KkXy%I%w8R1-dH9G0cbVA1 z`HE^K>#{@o!Dza99?%L3rtC&>3fj#Y<358#;ev3k4hSp_kg%83?%&EPOMl?zY>>H< zc$)RhrRLR#|4!*GSY&XEz>wW6d@?_LHl%2DZI`O<)8lzU(t{gciD2dE-`uN1BMW0*w%{a^{8^0oT?iiFV**M!kEVe~PC(GM3BMn7Ck82vDdFf!jV z^U^S0CVZ>IVV9$xe)s_D>3@e0p`L#DKK^Ec|o1zyHU7F82T59z;gg%INx2`~NT9y?=N2e$oH`?&7uo z{}=dtasU53IOY8R%U=KK{r|VO*0b)x5?1vO_5aT=f1#5+r8^Y8>^c5S ze*V+C`3w8`Ut#h8vVW)dBGZA3aoB%=@c^8PdMPp9M0F999~>n~C#W7qF!AdVM^I%s zmWac8iNtaK&oVnOFE1m#ayAH8mFfA#|5zIUJp2Q-!}Z`Ogj5MJntk(DPOoh$V?YGc z*UsM8%I9n4^R@DM_B8(h