From f3cdd812774a079c31112e0209ff52ea186c1ec6 Mon Sep 17 00:00:00 2001 From: Yue Date: Fri, 1 Dec 2023 09:59:13 +0800 Subject: [PATCH] GH-38594: [Docs][C++][Gandiva] Document how to register Gandiva external functions (#38763) ### Rationale for this change Provide a basic documentation on how to register and develop Gandiva external functions, including IR functions and C functions. ### What changes are included in this PR? A markdown doc providing an overview and detailed steps for integrating external functions into Gandiva. ### Are these changes tested? It is a doc change ### Are there any user-facing changes? No * Closes: #38594 Lead-authored-by: Yue Ni Co-authored-by: Yue Signed-off-by: Sutou Kouhei --- docs/source/cpp/gandiva.rst | 140 ++------- .../cpp/gandiva/expr_projector_filter.rst | 137 +++++++++ docs/source/cpp/gandiva/external_func.mmd | 49 ++++ docs/source/cpp/gandiva/external_func.png | Bin 0 -> 164413 bytes docs/source/cpp/gandiva/external_func.rst | 272 ++++++++++++++++++ 5 files changed, 482 insertions(+), 116 deletions(-) create mode 100644 docs/source/cpp/gandiva/expr_projector_filter.rst create mode 100644 docs/source/cpp/gandiva/external_func.mmd create mode 100644 docs/source/cpp/gandiva/external_func.png create mode 100644 docs/source/cpp/gandiva/external_func.rst diff --git a/docs/source/cpp/gandiva.rst b/docs/source/cpp/gandiva.rst index 3686f94af0ea6..07b07bee7ac4e 100644 --- a/docs/source/cpp/gandiva.rst +++ b/docs/source/cpp/gandiva.rst @@ -40,119 +40,27 @@ pre-compiled into LLVM IR (intermediate representation). .. _LLVM: https://llvm.org/ -Building Expressions -==================== - -Gandiva provides a general expression representation where expressions are -represented by a tree of nodes. The expression trees are built using -:class:`TreeExprBuilder`. The leaves of the expression tree are typically -field references, created by :func:`TreeExprBuilder::MakeField`, and -literal values, created by :func:`TreeExprBuilder::MakeLiteral`. Nodes -can be combined into more complex expression trees using: - -* :func:`TreeExprBuilder::MakeFunction` to create a function - node. (You can call :func:`GetRegisteredFunctionSignatures` to - get a list of valid function signatures.) -* :func:`TreeExprBuilder::MakeIf` to create if-else logic. -* :func:`TreeExprBuilder::MakeAnd` and :func:`TreeExprBuilder::MakeOr` - to create boolean expressions. (For "not", use the ``not(bool)`` function in ``MakeFunction``.) -* :func:`TreeExprBuilder::MakeInExpressionInt32` and the other "in expression" - functions to create set membership tests. - -Each of these functions create new composite nodes, which contain the leaf nodes -(literals and field references) or other composite nodes as children. By -composing these, you can create arbitrarily complex expression trees. - -Once an expression tree is built, they are wrapped in either :class:`Expression` -or :class:`Condition`, depending on how they will be used. -``Expression`` is used in projections while ``Condition`` is used in filters. - -As an example, here is how to create an Expression representing ``x + 3`` and a -Condition representing ``x < 3``: - -.. literalinclude:: ../../../cpp/examples/arrow/gandiva_example.cc - :language: cpp - :start-after: (Doc section: Create expressions) - :end-before: (Doc section: Create expressions) - :dedent: 2 - - -Projectors and Filters -====================== - -Gandiva's two execution kernels are :class:`Projector` and -:class:`Filter`. ``Projector`` consumes a record batch and projects -into a new record batch. ``Filter`` consumes a record batch and produces a -:class:`SelectionVector` containing the indices that matched the condition. - -For both ``Projector`` and ``Filter``, optimization of the expression IR happens -when creating instances. They are compiled against a static schema, so the -schema of the record batches must be known at this point. - -Continuing with the ``expression`` and ``condition`` created in the previous -section, here is an example of creating a Projector and a Filter: - -.. literalinclude:: ../../../cpp/examples/arrow/gandiva_example.cc - :language: cpp - :start-after: (Doc section: Create projector and filter) - :end-before: (Doc section: Create projector and filter) - :dedent: 2 - -Once a Projector or Filter is created, it can be evaluated on Arrow record batches. -These execution kernels are single-threaded on their own, but are designed to be -reused to process distinct record batches in parallel. - -Evaluating projections ----------------------- - -Execution is performed with :func:`Projector::Evaluate`. This outputs -a vector of arrays, which can be passed along with the output schema to -:func:`arrow::RecordBatch::Make()`. - -.. literalinclude:: ../../../cpp/examples/arrow/gandiva_example.cc - :language: cpp - :start-after: (Doc section: Evaluate projection) - :end-before: (Doc section: Evaluate projection) - :dedent: 2 - -Evaluating filters ------------------- - -:func:`Filter::Evaluate` produces :class:`SelectionVector`, -a vector of row indices that matched the filter condition. The selection vector -is a wrapper around an arrow integer array, parameterized by bitwidth. When -creating the selection vector (you must initialize it *before* passing to -``Evaluate()``), you must choose the bitwidth, which determines the max index -value it can hold, and the max number of slots, which determines how many indices -it may contain. In general, the max number of slots should be set to your batch -size and the bitwidth the smallest integer size that can represent all integers -less than the batch size. For example, if your batch size is 100k, set the -maximum number of slots to 100k and the bitwidth to 32 (since 2^16 = 64k which -would be too small). - -Once ``Evaluate()`` has been run and the :class:`SelectionVector` is -populated, use the :func:`SelectionVector::ToArray()` method to get -the underlying array and then :func:`::arrow::compute::Take()` to materialize the -output record batch. - -.. literalinclude:: ../../../cpp/examples/arrow/gandiva_example.cc - :language: cpp - :start-after: (Doc section: Evaluate filter) - :end-before: (Doc section: Evaluate filter) - :dedent: 2 - -Evaluating projections and filters ----------------------------------- - -Finally, you can also project while apply a selection vector, with -:func:`Projector::Evaluate()`. To do so, first make sure to initialize the -:class:`Projector` with :func:`SelectionVector::GetMode()` so that the projector -compiles with the correct bitwidth. Then you can pass the -:class:`SelectionVector` into the :func:`Projector::Evaluate()` method. - - -.. literalinclude:: ../../../cpp/examples/arrow/gandiva_example.cc - :language: cpp - :start-after: (Doc section: Evaluate filter and projection) - :end-before: (Doc section: Evaluate filter and projection) - :dedent: 2 +Expression, Projector and Filter +================================ +To effectively utilize Gandiva, you will construct expression trees with ``TreeExprBuilder``, +including the creation of function nodes, if-else logic, and boolean expressions. +Subsequently, leverage ``Projector`` or ``Filter`` execution kernels to efficiently evaluate these expressions. +See :doc:`./gandiva/expr_projector_filter` for more details. + + +External Functions Development +============================== +Gandiva offers the capability of integrating external functions, encompassing +both C functions and IR functions. This feature broadens the spectrum of +functions that can be applied within Gandiva expressions. For developers +looking to customize and enhance their computational solutions, +Gandiva provides the opportunity to develop and register their own external +functions, thus allowing for a more tailored and flexible use of the Gandiva +environment. +See :doc:`./gandiva/external_func` for more details. + +.. toctree:: + :maxdepth: 2 + + gandiva/expr_projector_filter + gandiva/external_func \ No newline at end of file diff --git a/docs/source/cpp/gandiva/expr_projector_filter.rst b/docs/source/cpp/gandiva/expr_projector_filter.rst new file mode 100644 index 0000000000000..c960d1d869fe5 --- /dev/null +++ b/docs/source/cpp/gandiva/expr_projector_filter.rst @@ -0,0 +1,137 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at + +.. http://www.apache.org/licenses/LICENSE-2.0 + +.. Unless required by applicable law or agreed to in writing, +.. software distributed under the License is distributed on an +.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +.. KIND, either express or implied. See the License for the +.. specific language governing permissions and limitations +.. under the License. + +========================================= +Gandiva Expression, Projector, and Filter +========================================= + +Building Expressions +==================== + +Gandiva provides a general expression representation where expressions are +represented by a tree of nodes. The expression trees are built using +:class:`TreeExprBuilder`. The leaves of the expression tree are typically +field references, created by :func:`TreeExprBuilder::MakeField`, and +literal values, created by :func:`TreeExprBuilder::MakeLiteral`. Nodes +can be combined into more complex expression trees using: + +* :func:`TreeExprBuilder::MakeFunction` to create a function + node. (You can call :func:`GetRegisteredFunctionSignatures` to + get a list of valid function signatures.) +* :func:`TreeExprBuilder::MakeIf` to create if-else logic. +* :func:`TreeExprBuilder::MakeAnd` and :func:`TreeExprBuilder::MakeOr` + to create boolean expressions. (For "not", use the ``not(bool)`` function in ``MakeFunction``.) +* :func:`TreeExprBuilder::MakeInExpressionInt32` and the other "in expression" + functions to create set membership tests. + +Each of these functions create new composite nodes, which contain the leaf nodes +(literals and field references) or other composite nodes as children. By +composing these, you can create arbitrarily complex expression trees. + +Once an expression tree is built, they are wrapped in either :class:`Expression` +or :class:`Condition`, depending on how they will be used. +``Expression`` is used in projections while ``Condition`` is used in filters. + +As an example, here is how to create an Expression representing ``x + 3`` and a +Condition representing ``x < 3``: + +.. literalinclude:: ../../../../cpp/examples/arrow/gandiva_example.cc + :language: cpp + :start-after: (Doc section: Create expressions) + :end-before: (Doc section: Create expressions) + :dedent: 2 + + +Projectors and Filters +====================== + +Gandiva's two execution kernels are :class:`Projector` and +:class:`Filter`. ``Projector`` consumes a record batch and projects +into a new record batch. ``Filter`` consumes a record batch and produces a +:class:`SelectionVector` containing the indices that matched the condition. + +For both ``Projector`` and ``Filter``, optimization of the expression IR happens +when creating instances. They are compiled against a static schema, so the +schema of the record batches must be known at this point. + +Continuing with the ``expression`` and ``condition`` created in the previous +section, here is an example of creating a Projector and a Filter: + +.. literalinclude:: ../../../../cpp/examples/arrow/gandiva_example.cc + :language: cpp + :start-after: (Doc section: Create projector and filter) + :end-before: (Doc section: Create projector and filter) + :dedent: 2 + +Once a Projector or Filter is created, it can be evaluated on Arrow record batches. +These execution kernels are single-threaded on their own, but are designed to be +reused to process distinct record batches in parallel. + +Evaluating projections +---------------------- + +Execution is performed with :func:`Projector::Evaluate`. This outputs +a vector of arrays, which can be passed along with the output schema to +:func:`arrow::RecordBatch::Make()`. + +.. literalinclude:: ../../../../cpp/examples/arrow/gandiva_example.cc + :language: cpp + :start-after: (Doc section: Evaluate projection) + :end-before: (Doc section: Evaluate projection) + :dedent: 2 + +Evaluating filters +------------------ + +:func:`Filter::Evaluate` produces :class:`SelectionVector`, +a vector of row indices that matched the filter condition. The selection vector +is a wrapper around an arrow integer array, parameterized by bitwidth. When +creating the selection vector (you must initialize it *before* passing to +``Evaluate()``), you must choose the bitwidth, which determines the max index +value it can hold, and the max number of slots, which determines how many indices +it may contain. In general, the max number of slots should be set to your batch +size and the bitwidth the smallest integer size that can represent all integers +less than the batch size. For example, if your batch size is 100k, set the +maximum number of slots to 100k and the bitwidth to 32 (since 2^16 = 64k which +would be too small). + +Once ``Evaluate()`` has been run and the :class:`SelectionVector` is +populated, use the :func:`SelectionVector::ToArray()` method to get +the underlying array and then :func:`::arrow::compute::Take()` to materialize the +output record batch. + +.. literalinclude:: ../../../../cpp/examples/arrow/gandiva_example.cc + :language: cpp + :start-after: (Doc section: Evaluate filter) + :end-before: (Doc section: Evaluate filter) + :dedent: 2 + +Evaluating projections and filters +---------------------------------- + +Finally, you can also project while apply a selection vector, with +:func:`Projector::Evaluate()`. To do so, first make sure to initialize the +:class:`Projector` with :func:`SelectionVector::GetMode()` so that the projector +compiles with the correct bitwidth. Then you can pass the +:class:`SelectionVector` into the :func:`Projector::Evaluate()` method. + + +.. literalinclude:: ../../../../cpp/examples/arrow/gandiva_example.cc + :language: cpp + :start-after: (Doc section: Evaluate filter and projection) + :end-before: (Doc section: Evaluate filter and projection) + :dedent: 2 \ No newline at end of file diff --git a/docs/source/cpp/gandiva/external_func.mmd b/docs/source/cpp/gandiva/external_func.mmd new file mode 100644 index 0000000000000..755424bfa4203 --- /dev/null +++ b/docs/source/cpp/gandiva/external_func.mmd @@ -0,0 +1,49 @@ +%% Licensed to the Apache Software Foundation (ASF) under one +%% or more contributor license agreements. See the NOTICE file +%% distributed with this work for additional information +%% regarding copyright ownership. The ASF licenses this file +%% to you under the Apache License, Version 2.0 (the +%% "License"); you may not use this file except in compliance +%% with the License. You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. + +graph TD + Rust(Rust) --> CFunction(C function) + Cpp(C++) --> CFunction + OtherLangs(Other langs) --> CFunction + + C(C) --clang--> LLVMIR(LLVM IR) + Cpp1(C++) --clang--> LLVMIR + OtherLangs1(Other langs) --rustc/etc--> LLVMIR + + LLVMIR --LLVM toolchain--> LLVMBitcode(LLVM bitcode) + + CFunction --> Application(application) + LLVMBitcode --> Application + + Application --Register--> FunctionRegistry + + subgraph Gandiva + BuiltInIRFunctions(built-in IR functions) --> LLVMGenerator(LLVMGenerator) + BuiltInCFunctions(built-in C functions) --> LLVMGenerator + + FunctionRegistry(FunctionRegistry) --> LLVMGenerator + + + LLVMGenerator --> LLVMJITEngine(LLVM JIT engine) + + LLVMJITEngine --codegen--> MachineCode(machine code) + end + +classDef node stroke-width:0px; +class Rust,Cpp,OtherLangs,C,Cpp1,OtherLangs1,LLVMIR,LLVMBitcode,CFunction,Application,BuiltInIRFunctions,BuiltInCFunctions,FunctionRegistry,LLVMGenerator,LLVMJITEngine,MachineCode node; +classDef subGraph fill:#f5f5f5,stroke:#5a5a5a,stroke-width:2px,rx:10,ry:10; +class Gandiva subGraph; \ No newline at end of file diff --git a/docs/source/cpp/gandiva/external_func.png b/docs/source/cpp/gandiva/external_func.png new file mode 100644 index 0000000000000000000000000000000000000000..3b17483ded4d8b72a7acf320cc0cf3d02e9bc289 GIT binary patch literal 164413 zcmd3OcR1YN)-OV$Bq7lfqNEanMDL?U^fF5HAc!7yv>8FfFA*dWy(T)*dk={oMDK&> zZHzw5;O_aIbKdvdmvf){-@TrP`I@oY+H0@%S!;c^w;E~+m&h5&2?z)-DL#?YA|N=A zARr*wBRvn^$x$5|B_JStW+N-Bp(rcMs^Q{fWn*tiK*0Xd;X{$Kj3!MBq|-A-=91>M zD^8@h9u`?&>3z;YD_r}nZ7fO8=e%w7V#o_un-{ikTcT19DO|wQ<$!>wvBPt(D?U$j z53bm_^8|0Swu%IYpK~L**d1a*kY4PNPESAZYauG9wlQ22lOprzX;7=1ggh5!sC!Yo z>GrOf7K%YVsmoAyH+tH5=3%Xy8?K^Zc6VWm_VJ-~`Xk5DS8OuhHpY!yB0ax<)%eNw zsf*53vAZ0TFb5P~~Qcy-4W{%DK+f+_XUL+fP{E(!gm& z`G1*{^F95-cm&~_On7TSf8#=7;W=uO5q_rI!Kr_VZ}N6LBfTy6?WPQEWW_ODc6j!) zB{!j4a*c_{wJgmyDLuO_-2U|!UmDN9vBVh-&3bZug@b=&i(6|WDk5s zAPtpOR0OY33l~dEN7ollZrtxKTn2BDy?mnYN?CeI zRn=gXb#k#}736-%{qU9~IV&rxxXW`ZQ7yU0|7;F^leqQ5&F!Tq4-X6mv^8S0%fBWcvHq~*pbdhy(0E46I$XZTJyK&%=rgQS1T*F& zr_)}mduB@Oqu=8+@eR4 z_e7qR+28vp@!g^=`yh|h*$;j;|<>~Axm9v9%5rk} zF!g&dng2I3x!o!`bVQk0;Hvch+*W^WGL=MIL9eYf({F4CKX)JI$Oeycz53*vlrX*) z{HHo|fFmH=%YSd(dTN|pB=!?$%5R1J-Ou;iB^0_Z`ezX@B>C(uYL$KAZ&cS7kQOKqrvQgb) z;5m1@~^hgnN**5+=V&0LtYDy`U7<{ z=E&IZ4A*tNmP#dC!s<4<{eC;mmUV6X_UZF=g>>m=2D4R$bIzW$Hba4c>f*O3Nw+{9 zc&N?A-0s9KgR-3Zi+k@)o-L@9OdRs`2@{|xYgb2$zG*;i2s&N^{b%_Rg>s~D z>kh84waKBWwl(-np3T;#$FTe6kL+%by1Y7(vB~+L&D30O*RsO}jFx}}^ zmVO~RgHoc;LrX*}h+^gFXXM0?#@Z2v)24@%3*E`H%u*oJAURa9Rv%>J#b5a*N8~PW$P2cQ>pXo`Xsegs!oiVxJMEazNoa?Tv{5MEG z)3nKO7Js7Go2B*so^v5jrJafuqxe|jCEYIV(h%3kCK)2Yt4QFKqOejKyqad?zez#^ zEFI0O*D-f7Wd8I&@`)jjQna400HdU(XPNNuR6G7SVA4_tJ#oXzXzIjAjp}YunxBCf zgKk--8G|0z1=0m3LSC4k$*sP6(^^l28OewxqAgC_vOiT8+x!vpGz*sr*z*p45P;kJ)|LRycLKe^CH)U;oYy;ZF?d{YZ_Iv%W5`NDR?r*Lpk# zrru`~m;gB?isvR^z1uoQ+Z1;&Z^IJ6aGmT*w=i#IKJxZ)gQ@Q^%;8S$9_uz(Z*0Mz zI8#<2yE!nN{$tInjp{V-K7aH8Q!gE6T?{|v-(taf+kI(=aYR6Nx7jdnyLsPzB1L@F zNPAxjrk+-JUc~Q|r)sMO>s`pLT%dn~re+fPzuu}pGC)njkq=Dm^r`(}#oT&69Vmn76MV z70ZCGTEb6$n)s|+Vvn&-_J4kwx+aI#eS>Y>P3Y-hmhd(Rq2sz;bG{jBRw@Pb zb`ypA7_DAHw9j7$4x@Ze9jhYOM=W|snFy}nK3nD=bO;9|8%#k36gZuMI$nL~Zg9gL zy}g{tGAd7>Xthx%ls`w?B>}qteOR)bair`B?RwW32rCVj^zIpTPljJEGxiv*h%>)h z*HdUlKO(U|F_$o#lbdg|m?S3NyBHr8aT}wktm>R}N;iKO5^0`?_#Gc)8hg&P@BO5v z)LrvB+D*0pC{LH`i8W`uilc#MPZhHVCVNjpcl$dbyp8Jh3U!NLFCvnBP-J39JE#5|36)*K>PHnGcVo0Rnpm}FjK(g~}%h*Q+RR7%P-PkP0hYgrNe6A3- zBSx;u=_Wy6Oyba&AL7T&-999WYrCTM+(hg{G%-mucliI8nLY4Oh}iG(48^? zR9S&i+KoLSJYn6T$uB*Tv{|buK>9snWt}Xqtj9{T_jdZj4Z@izMmsnQk}A{%_=q8c zS=sX3jdo4`C);OZpxOEDhcjF6Rgn1grt zO(G$`MqN6Y);`Fp6-IFx(n;iQ&O*vl!;!;?gLyWmBly0A6O)+7-ooyiX}0hmvF*0# zR9)jdgR*W4@^}-tuQDm(Pf7aoQ#L?~^{PL6K(Yc$-SF{l0km#=)HauC{kN?8&cZB0 z7EN98vT*C4Q>yucDZht#+fyF*>Bo6UP#&D$q{kR0k?8YkDt~SHJ%f8Nki0%p&{nmo zM>1G++Yh%{qndz;pM>v+dMqXi33t+&R7M-S_3k3~y!*4E)^?NCp%ve>^_-^sPV(UB zMzN}OEBykK5W}9NkU5z*x=2J4Jp8^Bs@Gq3ix_%7?h4T@HF5i>W>d8um_7QiJ}@zE9$^vbubnGaVLh* zLW^#m@(QdPEdGU!J-=f49D-=BSXuoScV(1ilzkKZc#gWOq3D-jU z6^syrBu<8{vafhh*RWF!a>QGM+bT)qmUdr9m9FI2ja4mPhFQnM^Y}5EztgAJfCc3= z$hdg^viQKJUGG<$&Tn=Fbw3>&jzq1e#5Qg?99{&oy{($e7t}8}zGjbIhdpl}5``S? z)EPTBd+n{2oN!O<`bit``0P&#CAhEjZESTqwUc<~B_6=0;QjgahvrUo4X^TzYsOm` zoh%F;$^yF}etIW4-#5q*L=i>j&e#h>{9b_8iHxn*78_~9`qmbVymLfO^>j|82-`14 z2alT0L&_>Mfel@r__6jQA*A}xJ41);^r!+H(Md)6$(OANbwT)d#>(%v!~jr|&Yt}W zdOSxtfg)x=-8J%AhnJ6-!zV_I3&_u*YBuPc;)7WbgEsfIM;O}1Q>MFm6_TSUxXX8= z4g*=7%wmPu65ZZMaR$3@{m;F!Nse8VgC3K^FN?m2){>v&n(~~@b8Vcw?$ycf+9g0g&IJ4A zXqLVihxFanfp%tV^}plX>n!`k)cd@wTfQ*`vSwTS(W!AJn6ikgd<3b#wb{Bco+2%V z8KUzOvmar~_|EDL!o{BWVg#wiDh6h9(Y3s@{e9u&v)SI+_sftf%Kmn5v|-EUU( zJ~qU{D*SL3u7*~zw6&J$0m<$|qixGkYk3td3uR9=U$}O1g$pc4p@Qg>Izsi`UhCx} zzm*L^>}P`LOKkcxMi`xHZIj`9Z!1jZmnM#klW40e899j!?2DS$Atzql1Bqi@LJ-}e z=nizWAqPftH37aiI>wl)=Arzc$Ua|3h2A>WZY8PzZuI-o`DoM8M0b;;#&Ex8;7hDJ zxobZ44~|EuOU{{EE++ex9qktQZAaZ-6PbRsp2$5m5oDKNmE`)s7;6j*{YCMbyhd9B zRe5f$Y}mvD)^)I7Jg8?Xrgs6lKB$)r3t%73wQDRiuD^ow{8f7@xCAcwK9wNGYwn|u ztA%31it)sJ^i+aR<;ZY+K{F!&E9`oR_x}=e$7%%EB7QT}#5bR@{nU8tO}gPREVxLT zK2?Wqil};JsaElFWlP2Ejo2h`UMBlNw!L4XnC3H@rmc^5g-TMxM7vf4RA#Rj!zMLq z*30ec%)`XDXvXbJ2$8idUq*d4@@i2tZWDgT+c)~33Zl}U%_DuB1l<=G)Z!h-Ah2)H z$jbnjEC9)4htzVs+2W$e+I~iNV~7dv_&b^^;?a`})|Aan#ZNRC^>O)AD0e5mdcy#IRs97M${1PA0|#Ih<0k z!>&Yl_ zcqQ{`SzFc2n+ub&!p7<=u8I)>@wxfcC5rI(%tu*?@Vy&;p&O~XMmd?Pg0Xz(q1oKa zwShstz}H{>FnPwot|S2#a52dz;Gm|^YprOw&Oc*T5?0|Gz@m5SdI69_)<*WQsb4b! zw}}-`I62D#wA;<~KG_+u*!MX%$^x6v zKi28ST1Ff9(iyzyz1JD|;Mx0RR)b9^!=CBPmlvbYQHpmT?oSQYEIn-Ok;LAJW6X6> zi%vB8QYA!h;`vTuZv@``6*wPGdU2!WJfvfdd)<&E@Efn!D`%0&>LwxTd+%We7pgiH z!hGAX*cnRQQWLH(G=;Adar03W2qh-#tvSV^3{^%(A(VjFF-96`MJchvVmF*$C$vF{ z7^oX3q5oxbci!Q%&o=r8Y`mF18O5~~ercg%!m&oeCC?{puiSNtCd_YP!@#|uu6(CD zw||e`=w)bL?bZq^|6@HcfgOrwr-1$|sU5rq{mcDr{6y8dx;fgvCaFCzsJ)5F4sw}q z1*#|qS7&nmX|lIBUZ95{tl}CrbfOm9{JEV7C-+k|wUG|u;^mm^X<%v$H%&d>0H7?G zsXUX9E<9h3OV+X4#$z>HDSr*vnL=tc;osvs15loh(DV|2Ar?KfYrpCbhq<;GV1)pLo~VZha5{=5*I|NLWe(uKL;DR$3QY+G!j_RDZ_ zj&?{UFf(l*C{!(YZTcu5(!^oeLeKF(`;IdCzF4zJll?v&VW(1SEyOo}8djld4LrB!ku+g& z_xZ?*(ND_Ui|bcGFq$&~LwfxHv6A`*MtbTqIpSUD7wS@b7*;7TdAUDxzB-#RjsouJ z2IIntn*W4nIQvdy_f0Q$37M9qh9~tG+YV$!CvtCTcWWwK+A*N&My;&p-`j7Y;1Q2x zq+cT4FRXgxkMgJv>L+s76Y|A0tR?w4ZVlBq364CY7`H13%u@(YLVeXJAclOwj9fn* z-TYPr1t1qZ~)+2O}}aep7d*d=0Ml@=lc=c`R2c3=+`?qdt9Tk zEqnfiELLbQjTAvm^q{7QgDP5&-Ha$IlqZudp@uM5p_I_ZFfM47BQdjCJzcA8l-nNd zIve^!#cyIcOe~2*!pa1Op0W*-Ja@95 zNZz0F8z1=7k(hG{f%LX}PmQje#{?z=9l1$AXEc}JK_ZvA*s?y_5}z#Ski+D?gxd2v z+5b|aG6b94RYBnvw#s`M%W&5L`YfQ3JW+C21oqDGkX~muX*!cb(Bq7l)|L(EPw%-+ z5REs9%>WoN^5$aI_fzik(pSV*d$0(-doyhXKHxPyAUSqYK9RLNdCKHZ!BKLqQT=*? z=r?jkocJ;3Tvd_Y8&7LQ+fBBSA;XQiu4wO6=Zw9{iUt59*pT;v@`98|_>q@MoPY(j zXs!P&gzAdaLnhhzm)bXKa>VbR80VxZmv<<2ZOG(nSFPk|PbydUujCduTww97?Wawy zS<5ZBH^S^=kLotK(b!YaaBN?*QLk_Eq^?V_X2kTQx*8u}^?z!;1b4d?%;fROp=$mz zQsiI?2ap>+eK6`iY&>*_V5_2ZYlC_Y94;!Z@-q(C3jT2QV%Uzb1&RBGD{*$Hq6VDh z+c@J(jp|)loT3_kMhe16k4f;Bt4RYo8FXLng(HXk{jZyD1LiG|gFqH{+6>3< z9jf@xH?0O-)GRD?_y##K2irXmhl)wT&6Xj3tJr#vnV{QorC+n<(YJ*{-%DWE zW|_MV7EKfF1~-MA>PO;l%3f|?eYZB@8XRv>h+*?X^KH~_FSg`*wKP<>V+$L@4Q@JA z&b%|J@;kwv_vpCqTFtSotBuZ}1E1_>yC?e{g5Wb@y4BbNA3~K4BY!9En%L3emR`-a zgqGb7pJ){;KMAddjU%uU4$;PYc7i*b8?d&UH2_$JZqrF@wOxb4dUYm#)ic;zgjn{vI?!TxJ zs;6)T_Y!ZG3dHtxIv4&Pqj8y=HqxH%dy+@2^^dM z=e3}u+Tx3@68 zqs?CGsxc3d$448QmzzMWn&4A7Ch+jD^FDgRDh^|%?V%@+gwe;5Yu~RyBH0HW)SjuVpcOtNjAVjtnoB?ey-Y8<5r=EaZCZ^kS>!$6gWE z%oAm#x+dpwC0ar=R65GGUPM#O8j5X$72tCwmu^&s4i9GL&wf7_UJ@#V>=4VpoUv)= zSUE%9Unw1kCD87g<1~i)Sk4ueI!u!s(Ib=5bo;kft;0br-ot{ z1V(UwQLGj3$I6$!*5w)3>>)RI7eE|WQqnCdC`30fQ@&na<4LGlM0M1w&?=Z6SlbjA zdlO@G{;$C^U{M{(S8~LT-7Hj1v=DuBF7C2ZBM@X^iHtfb3`9R58dWdL#e0 z>?dgQ@FXSBquuWAvPrywH*Tv_9c7QqC2G;SIXjRIb&kTI#%YR(;Zv%VO>26D}UPxfI;j%#R^gc z^J~RjUA{oe_$@FeRn293+Ku7ePB=`sE0@CMGT=|Xj`j}*;;7Zddu(p%JI>OZ-bkdF zrsSz=zZsnHfr7%rWk`V*m!;DIc0WO=+pwLwE$`aHXD~)_OiZmRNZz|q`LWM3yX{Y2 z7)|nFUit-$w_SdE*N~TgY)v9Ihfa91hUdlcM!7|p$nD``8#`<2lSerYn|xkdcgBIJ z>V}}GqRzS;cb${tnz%g>kK!IBzgy4LP@cU3Qa5P2u;VRK1dgHhR7Hl6_$oVo||$d-xEz6tNJYIjSODSYF4PR;cSjeo=`Ag_+19Xw2O2{+u(0}3=O zb-bB+5uv?RY6DFyG8@PFk{(KJl{sL8nmgiQRqeLg1B0Zd%aQ4d zTww#`Px=v9CNnWqWyN+q8p2TXxbe-spdIqd?^JD#`Ft@Xs?{0&GA_^dX^3}ZK$Y_M9TiRoP>h3m zi*23vu19q@K0&r^pq@RUz1l!WM&|DCgbkel_eIZl6>lBdOyS<|7gH zX(#jHnZIxV%f5>rcAdVzlEnK}x@izkahrL!?6;x3@yd9)Es(7yvv?l#^9rt#O)uA{ zL&BsE-jv^DH~Q4mpmPI4JLen;tbU^X9$0J=iNW<-7b^KT)hluTpgHAegzDlU^%vhRGU( z7IWBaj^10a{uMLxo@@ui?ZUg0WpfL(K<-8F>;YC5(9YO z_EB$)+2>+8Ku`kvsc&!uFAjHXJT{v%|IR&mO}cbiRBZ-(dvBL{g2V=eWtjizve#=+ z^Ck0d&6fwY%6G-uWgh@cE+6p#waC!&8H(ej)O~yOG?PSd)gtN{=eNRlT)3M;; zFbI#3)IwNcslZ3~fE=$DtlSF3D*~wtQfJt2cTlJq1hCi!6qou0rH83-#IzwWpMYdf zIAhfgcB7#Sz>7@t0AyWsscR3D<91JjR5Mnt3@lsw)91j`Gyi!9$cNhg96hM17|;K2 zh1dK3_}n`_eeAQ->!a*ozTGX>01m4ZK28EoBE*%XQ9Ysh^BI*uIabgy;Vt<& zGAi7h^Xs^q7_w&igKlET#|W)wSNuWrHy&+@u)-Gr1kIW}?fNtF_`=jH93|{Q?zaS- z0-DiWj}Q=lT6cXsMKU4q&jAJU9CM3IULX+5mqhuuFl3~3+Y6w2eh%u(fv=uxswUhy zb@KR&K}q)ZFhYD7U(V+Izb?uC|6VLDm7-At>il2SI+QHR8QiiR)`< z*WB<7j7j8==Q!=^mBjMhX8(3s9{sZR@>16gEv{Q`>PH9Ge2m4_-@c1)$ABvGsOnRF z3qqMLhCtWKpJZ-pFNW&jh5bNX7Mh37IAC{(Y*47sP57-Ul3P5_`|gz7hu-2THzU`E zDcP>eDwjXksUmU-iX;COOZ9@^U(mtIkDG)E_I^6E7e$j#e@dWNZ=$gqB{e?Eh7_0F zMN)OINVCY?C6btB`=SdWr}2_9F_!Ni%M`6JSc}|4J+d?V`Kb85hN>NlBA`QTBc^js zX+A3nk#|hCE`!Z=fBgpWAzAja_s^6vUR5{uNkk4g60fG`IDV$Vy})r~JSYGCl`D3) zNxzvb#gT2dO1n!A4Gm?$o`H9+kY(9%A1NLN9+o>;hr_?>Wjv=~$Ms62(@CjxQLyhU z|Mu6l?@}IwQNSNpCr9r}P=|#{;fToLJDFocWyFxp;VTONlUoE*OdaG|<3eS}v66Lb zR_^-QbX49C^C9oyTG1R?D=CWgnK{)d*F3a31ty1A>OVwDJ|bwJD`x45!Q*D^)zOYxboyH)H@MhM2kLmWBdoBKjv- z91z}~NO_!r?>^lE6q(O))8aT_LJ^mcw?8n0COZQ*o_Ul-hch}2pI-A`KfOTbDKyir%CgpNQ~&;B}NisC@F;+L(i;)VX< z-84THDLYsu)dT5xYTTVHUSZlZg!djy9b{`ml|kR!`W^DDCZH2f`0RtkX*Ml(Y zaY3h0S^LX6MWAW3w*6mHUx6#Us>9^32Gos;p79hjjDV;ezlV;K{9CbCaQrUouIn~* z_)T5E@}D*}hy`@W(>U8*=kqx$E#&q1f9JfQ#Tf;)bIDY;kEnPg-XR8MLNjDzphzw1b1 zZB*B1*1dI_08mbRYks>S<=xEKcu+JG{{-=%-<8?IUsxZmF zbaVu-qq$US7yb`A3UJ?B*+|}h>1ZWhM-5}P&QO5=(oq1opjW6FZ+>9+H~aA>_PDZt zx-n4IFQyN#bz$Cr9-Ptm9r5|gH(ng3my3m7d(;Fh&0_b~JE<;!Hf`0q39pcH0bPnK z%qIcIATl}dj7{zZCq!;l(PjoTX=2nOA}XVsu1OpE)5{z_&1RskBzszyRye-@sIJ~} zMc)G3EU)qOwNw)chFj5-M8MUX7}7;hbOz7zNd&>kb*f+01js>2?@zqA@j zGDM%TUxLJGz4*WeR^8gDLWI}Tzg35jw0(}$z zF`s1sJ2yZOE6Ymt<$KH{3l%QJM7C)I0)%y>u&7}?zcMZ5ld$~htxwS+WFFDsX!a-r zN|PPQ-zv?@;NQeT1!OgA(5VHao847($_3+V@xSHOFMSY^YX+kEn}qU~>X~n{oVILM z1PBD0Tf5J26m6=Oa=Y z$y$r|Z?1i~UwjK#xpy%mr2f?uG#=X-)PHJHQG;58V6(NGThz{wY%vLWAPb@_aqX~U zYZUO(t30a8ACQ5zkL`MQhPWHmy;sBd&hUUr#a6o8d-G2E2U|gGqykL@A0ab${x<^aDZLOrWwDf0U@mCTd`(o{YZxRqmiz1T0X3V zL_rNmt8Z_JwUy2#5jCox(-nIgMtI z^Ba>js>j)exH`z;p+`(T4~`l_gSJcC0M&=XmG^vScm}%B^y?RSf@ZD43OUyOi z$+DUQMJM|$@Z#rpclNO9%*#tRuAa7YSwRF1fAWKPTVJSw{S>)5bXx=BZ$3rswyoQ6 z_}5AsVCX7pT|TXQAEf-7oDrTW(chIiF!#Zh)CN@5YE%3kV;daQ+nOUoDD@Q*ogVH< z1Hoindc);@1j#=*$&g&4(!F-ut~k&|g=5tj>E`cX>pwnxAtdye3vUha=QYdd)sSSQ zVY-7dVDk=MTRbBiA*NwpLph+Q8#5q4R{>`FJA2^&42(v$5LuoF%$2T10?+A%QE8+U z4g&JOl$0RlU0`(Ig(qJ5OFjjCf$->XmoJpC_46g5z4imQ_0B*VpJ~~B+cGcsdjD>H zEj0lSq%#FnlBf|J5YK+3FB>tR%Ha?(M6uvzH|1&B{3Z2D7jlJFOHKzg)F~>WCMqJO zS^X2Ln^L4PT&59_3{3UQ(^{7zh(DEKq5y=B-AG8~F9muos|TS^e(2vcB3cI2W)OROV(iVf3=@cdagcD*9f5s4lzvmNXJbU!5e zGQqDaF(4@g-|iA}r9)r#Pmt=2;sS|l=Ilb?faL|8Kb<z6OsBU!np{Z#SyHU4okY8=3iEzkrWLp3@Z3qDS>RbKZw%3m%WeO=n)Q z6~PEx#SsfxP@a;!6l)~Dj1qBAwRpXJyu0T3i)`@NpAa5Ym-R9z8sf^X>!ADD_wRzo z{pVw0KpMuObs#^p*U8iH6c8lscL((y2L-A4^BsI(w!NdyKMTIg7bpvv> z$hhCh5uW0nV;Bi|R1_WyvDTukQ}!iYYrkbFLwAj6`0KVhI6LYDXE0kWJr4ma;~*wLoZb6D2@xIyd3D&h`1UVo1qWb8 z_OAgBnn##lBMJQoIp;U3@hb5X+_p!rJiSO>$be2xwMwWr$mkh--a5l4yav9KIQJS} z4F~O2!FogS>%DECI5fQo5~5{*_0^I4)%!f8;rK8YuxG-$tA2rcyvJ%@MO;8cWd_)U zNl;fhpXnLEQbJdiVOsL1DZ}Uty;uduf8OqCp!e#RWHFE(zPeclfUeVO0}mM@Zr`?) z3jn-f%8f-YLOUlT+iM)AYD+&GWMN zblwypZ0UC+<8#ApklZW-#W%L0YIi%s=O5+mfn50|sGJ-=}6j9@-FE!LxO$TFnPwK&`_Up0CBlbh5Ht>K= z40e5c+|vbkh@iAvXAQb6*{-ViEkiMi+wR%$y=?pKx~gjr$N=>`Utd)tZ!;`?G1Dzt zz-RUArQ~A6(Vk(vxL2|J>QL9t^_(8PleC_f@bcW|aIuWAAydF-2FYdxr+$z1F@5ab zdfkD!)6T({4O)1^k|^NN&HHAo*4%7!!^{MagRJYu8m}+rLNdw5g4;YX``7)p2F`$8PfR`lOBc}ghuI&J)ju3-p-a> z3IsAtW=P&Sgag!7GXMfTn5pRUhkq2|t%?3bgP))Ev{R&ezp9YP>@7^iuvgN{CbIIi z;?6_*#X7&eQESzkk=?m34IIh_@wN7Rf)`x^!*0w5)t#Q93Mo&~Kj0$c)g$n1jbfjD z)TZ|N^bD=9J%cSrKVc~B)i zlHI&VtY+Z4gV$GmBp`i#I}FRcrZwY^<)Rw7ajhjo{tL5Hh|pt(NAyV zh_6R{)|ZlF=Y9gs=RA;5P&2;o2BrG^<}Dq>ChKnZl~extD(5sMLJ~85P7K(LL{kbO zSQ9YCwfiA+N`WjvY_{^ycI`F#AyAI8WXEZup^l>a6R!B`MaQ^Y1NX4hWU4}Vx1ovc zV@mRqgC4)QraK0>&sy&sz082D^(ThvcxVqn1w+VoApLmS`s8RIX29Pe!^PM7{`xG5 zG$MK2v8KzWcljhCAMjXrdKK3DlzDdPr{?O2-h!JHoi@#1pDBHL;tDOAR`^obGNq|! z6RC0-wmM$nG^%R($Yt({HRHi@O~wSjcDw2^na1%i7#m-hI&mtF(03V=fy))#FG8|v+0Fq33RYY|HG?)2gj-^JrbCST^)1eV8Gd;?nW60DG4jb~)Sxsk4 z^1S5~TMvnPYEIT~-44{tp4^Im`34Q{^XhqR$VCl17I(s& zA1<+n=HWehD3cfGmJlv^*ampxUA4RP#%>>n8FVJc0hh{EP5EwO?majgZ8=I4eo&(^ zxW7Pn;l^}gW=(Rw@l-Caj-I=t9Z#7@pL_40)|(5EGcZp%2@P&ZI@+KV!=jemnGAa6 zb5bFckn5L~kV;s2@uoyv!`=|DNTo3Y@JmXYb=8fO z`<9k?km9>Bi~dBkxNeyD0K=fbO9$lJ9THHF2LJw*y&IlvYZxC+v5YX2omN{p0evAVIf!M zuMf{?00u`*nYkjNNe}+GT^S<$`;H+zI>%7xgx_QB>7oK9Dx7gA^#TB`*Q8Ks)5^xP zHU_?%&GGBUs(A@>OKOKV-#plnB|W)w+npqnPKUudt7>(B!?0(+6qB7P*?KCr@*kjJ z$MnkH^jl>J5=CLoM;bj#Zw&9~d-Vr(uBEAX(4i~82DQS)y*8Hd5Cizjvi88W?w7-+ zvYNxI7o9V2%Dxfi3g9m=)y~ajf{D(5h9)=%O?cI=aG8 zr;f6=9|cIXh1XXcP4(Iur)?RO+b=_&N9-G@qx)Y6k({Axd&D~gijxJ)Uq0VEGS_do zg&HZcXr^bpgSoGp#r#4&Nqkh)ePs^UXV6eNl%^|a>oBVZ!V`m)tkop*{_=6hRd=RL z=^uj}Pa>*``+yC2bnl&U?s*Qq=$COjoLj(?AidPlvk!kBvIt>j>g^9sEUI{%_;>BuIoGk_QpG)uG&3f^9j z8{l5TvQLnrE$v+SuPQ*o{w5oI`7Uhusk6Go?&lH{E=QbkEZw-`WZn_5b=^5lQV*U0 zh6=aF-C4Tj6ke zNxIrT-p&KQ8u=*KD>eVI`%xT!Mz?b-lV16?ll}JyR*jKn!>2=%*q40kYIi-|B5 z3vekzEt=CW(S69dMfqg~*;U*P_)c$zh0Pck-eIF|-vdeSA?vo1ojEpjyeDLxh-D#x zuE;zwZn5e6zQ`aXL){qugKE`}1_w?m{X{e^5=fv38J7K^RvQqfq~Xj_@c=09=;!t5 z?(>cK)lPbhcb&g@ZMu|umuDEu+NeJB)SeQ8D_q`?iBU8z%ffvp za;<3zJVCpz6}66mlw*RdZeL%Ugb-l01n8Zy&RL>@y1h91cS~BkQZ`4s!<24=k>Ijk zAYzsEFw$+R9-e1d;g})akPIT40?q_*(-l;@;|&O^xIzXleMBUpHoC2MmU=VtT_M9&3(bIlRk=dfIwcU+#CAk(LV0_4T9Xntp-4#sWMu%z{)r`j zO}9qA-Oy?5!EDY}@o?6HVC7E@eZPUr)c}@ZHUDGy{^a6oDHLxV$DLklyJ&9X+Ggp1 zWMIv17W`6RftRk0$RnkdYB$4A$^ot%2N`o^dl8=^g!uFcN}E&j#CJ3?psr+MTHJm*BTO|EdZ_Y+GIv#)kSXS|v9*ckOpwX5FT1vi*(}7BP&2eEI3xy{ zYKaqrUIlogWBjs_1X*n8Sap|2ZcA4i(=r7g`)6G4R^pR0UJW>bjiZj>JPMWl$@bW~ z0PzFimpuTucSE+qzofBn8~GjW-mTazV8v|Op_xx1RjRhaR{_bu^NfI8c|xvsF1>^t zd7q^!m`cla>!%Hfqpg9*@2}02rRl%;5~Q--oB;$Nn%`or5&al2+PsVU3xSl7m&MUi ztCKY_q&FyRg*~;J05MweeWxPen=-SZsXS!VIQ(rdwdi=>2g7l4Gk}_pTGkYz$G!OR zmYQwBT_6*yZ}vfq_B_P)N+~dmHM!d+fO82K!=ZoFSq7fJRP0a=29C+8%bnop1_@q%5ehbkfbQ9pDI9p)W$?SJ_zA->>% zRUO%EW!Z46$Y>fea#dwZaHiM`Z%nZye+y8Z2+SS1+N;2_e(6EJ;{<2TN&&;DD&J$O(tG=!GO&i0i}4AyJMDkkFGz8_h9Qs(LsGp#E@g|0UD_Z z&)HCL5q13D1K^Izf|;I%buhf*(hzcm>h?630vjdH?|KsZ3$`(2MhU z|8cUzA=beDQ@Y9|xSxP3>`oM`De)>`f$wOVtlolCa!7&8r1D4))cg8W9s0xmR0T?y z^H)R zg^jJp6nNyH8N$DRa~SZ|oPGpT?w2<#eGRc6wT#|f*i}aNtBG|{*p+@oe|ZMDl?^(* z2aCy0pp5R0c$;rpm^;qQq%fP-WT2IC^88>TTfh?%b4irfKdZK>tM>E{RY=*nv z4#dZvWZi=Xa{Y7d5#VOd$G=@0@+cgF(WIa$%a{PnT>HGTp)I1fP0y?&b#$HUIVX6@ z{p3$_Ze=$8E%#Jnp5ak{O^4T@ zY(q1>DgK_dU1qKbiE>Z`^N>yLIaN&($jTpZgVK~sT)X!GTm>#Xvj=vXZr|(Xi$br?kJ)G%g?13Q}X8>XIu-7R!kbp^`&sJM9)8O0Vpb{ zD(TKe@TY8W2i;-uMf(p|Lpdp0i4Nx?)Yno1FT3nPf2VE2160W0XZ_x4-gQ`M9WV2VMz`h0lETybTN7+V%*fOBM%Hqn2Cg zkDs+ovb`-R#VDHRy*yoP`oKUagy|()^-m(YadNIfi~eh{7s$TE@7q0JPYn)2{osN% zTwwP6z7S`}Z9O!V7*zYvYvB zN}X0U8AKpGU{}Qx&tUV`$23Qb-CeWo^(#)Qdl=2@L0mQyE=L9ACjc;+IDKTqy=M{| zQWIUiBF;u+PYM z+$ro$-08GGlBpR`bmSUV~XMMOXBHZqvI{Wt14IoqiR6#O|p8El~4OQTR;*!72=L7EfQ9=J<^Ey%2 zq;7H*gJC8pW&kp}SY=3Jk>k!m9%>9+q_t%Gt`}0*q-a(z8BSZDCGet1akci85?{cA*oFA@-WG*HE+9MxQLd{ zp}76tP??=xwfFYynSMP-$_(T+x~CA>uH~<)o%{=-2G=TQDKHhBz6BTjfOD-oI$SMK z+m}LJBSCq1YouS$2ABUMwyBgT^C&8MV@LsnkF_zBc$mAJ=6q-8Ll+#gaNGg@ug-BC z$O2%(JK(W?rndGE0$5I%ntc4w)Vi`?at)%ET#aXw4q83z^4CBvR%D6M~E%t8n9m+UXr-r2v2D zAC`I84=brxaKChTJSaf(zu0^0uPXQMT^N?2bcfPNi-dxN0*jJv5TryxIs~L;(V!xt zpn^2gQqs}_0-_R1NwWm$l5XC)_TE0vc+d8H&-nw+*gtH?8r=8&$(h%@CQ6fr=8f|< zRUc32HxCEoP<3pZoepER`Ri6qI{Sz2|4KLneIR&Fh@$ZOMxGQe%j5CvhVwdUN+FH% zKD9`brg(|%z!lmyn3Zj&m?1Q3QiiWpmHY&|lfj+ivKK=P2KOh*nT@eTIYN zDXKfG2}uwIlSlswBS8H*d(VTW?pHP`b^>*4!3M;1BZ{Y-^RGnLT=9iVTX5I$5pU7E z=5qlLXpl_CjxKb6ygVe zNvs2~k1rGj%8`hF5Sh5|ZUgAyM?-JM-;#%<3hrdJNkAfJ-}CeI6QD^d80ewB4$zXP zh(EmZ-e2!D!q9(UB2}IcOdf(lWz*8v0}xV!faJ2{d{&%isI!N=yg$JRD+lLUEI_zT1zZH+ z=qeh>HxO7HC`=5{)rIMy{=wjVG;UYBhlrv(+{F#Sq_0ro3D&2ZY+AF&7aP?{us5ngNUnaY%>`zGk#G{mh0cxBLFM?*_f6c3 z-=lpl{K2X{c@9{aIHURP5+_dnKHhRvXONfuUd?T6I z|I+?N`fHw!Uj>Z?3CayjJ#NURhBv6jxcMW@Rds?+OoKK z_bH4nCFvVNKDJb%;9qwNOuPq1X?-DjZATA{uAYNRA@&R=vB=wqEUBDP9oxJ)m9+$U zc$R&DVD=9Tkya*YqjEQxa;@{%@lmBWQVkmu+)~wRJllSC>@z-%T4dYpP>^(^{+C7x zlwQE;`MGA(4onL< zB8sw@>ehR%jEQ15Y1S+Xe6}%LaaSDdw9$O&fE*cASc_fW|GDsoA@t!rU))!pvVVN` z()lZc%@4Z(XZXspsn!aQZ1=Ba+y!LNpUH!;f&vluj%dg(;sQ(%KumPgRJ{22<;-g~B6b-M*AyNzaxd$mRsL?;u8shcA$p|q)m6&ZT;N1f~LFlbNa*C2**iS+;{3plNl&BYa}vt72yw?%0Z% zyu663?SDGXxhiQUgDw}Inr#@g(k*I$99b9QE(P}A5?T*`O~hDrEO_my#QDN#;xb!W$bHz*-^?c zN@ZETyCnafA{OEX;d8&U1p`O`7U$MDdJ+L6ALaPlXR19DE^q;O2#t21$C&%DLGoGH zqR_qb->;Bv!%1*B%2-omCDUETAY@!p!q{qLq7RG~67cS;biA#52EWo(Z&!Q%LGoH6 ze3eWVWG)p3Ea(mafXr2MQG090Yw3GQwqVt${G_f%ghv!m?e)%iVGaHPFl?n3IDqVU z1Lzd1enp+`Y!lnXl(J?f^_BeEB#5qk#IWk^-2Q_HDb2!$_{qfHyPx9;1Y)|^7KNGe zMkjQ4d`HvT{XOC~9$_I`Vcd^u-%|bIB(j`Blpp5>a8MlfHIl@5pT?0=E}-t>;f2(> zVV-i)AMhR0X_?a15nt?&glv0QdU;ZMINW>?7Lme4gS1~7kCw;z&QOmUMfkW0g` z`uQ*q`~iE4XCthv8;e+sHVx2;N2Dk77;5=Gs;wVLzs3d`o!10-aaS# zOpeD1+xbU|No*V)ey#igBzU?N1!rh$+Qf1S4qENvLQ6j%nQo*q2SuBO?BIpM`r*4M z;s1Nvu@F3z4{Eofkz^fi-sr}zTo>%-z})K&224Sk%LU>Th*pp}kMiCU{bBXeSaCi{ zrjZD3!_(U0aPmH8&H}<+oz;kevPqNS&99e+E32`7R{i;$JN>3zP}U_6AWq6;4vs$v zPP|MlmW2W2aZmftkM<8(uZ1DCH4V2O4fEjt;g#+=^h*xiTKj-G$)U5`iBdcHOUJQjOJk)3{XLa$<Iw8tU=}sUVp9lR0-P^k>^32g+gwf^Q;3{NEP~ zKr#|RZe#J(o+tXsYZ<}qQS`GfQeTL6;@)|2iz^*iBg(4WSF7Kx@PtVwj1CSdI_;Zb zR8^vL69r(}F<>OV3UQi0SsDu<6_3?PYZLthR~qLEJoohZ*#V1Dy#uh3dou;Rj{cM$ zYq~d&lh|e(Ga7);R*r=S4!d$5e%GJw1GP%Ee;R++M~33P7!@xwo}eP6 z%fJh`P~V=H|7qb-Az5x5jH!NFod16_CWj;4dEBoHIeAp(vbwR&96y6!*@rNT%Db5n zM$cos`|9Eqw_D_xA_*{j@+rIU{&WP;2y^4Ax%JYs_w*KHu1Ds&pl2LIP9uNHvY%Av zJL`k>q|{b1K(dDPQhU!dRuBbgeYfny%@yt`b5Yz*7@ux_}nOCaQ z4oU&Qoe9WZ&|e=6|0Ms|rCFX}CR5oU_F#B3_o56|PyyUc zt1QlHl0V#vpzpXph){hLa%jz$*>0Gt{b=x>dywI;dKH1z>T+TSvX5_I4*Cu+7ym#( zLiRw9rK_i1@@s))rU12t)$-M`{m36z-W(83aodMnCR56RXa6^LFxen;KXaBAhRaj8xnnLq>t3XtQb`|;D|nIeQJ+uuoviF#P$Bch;6@~;At|E%UEg1@Q2 zAD>B^tHBp`8xvWt7+em|{~DAxLMP)M{}K0{7aJF`X)jzYH_JlzJL_4A^O< z4#o$MiW>=|B<7)d3X)B)RveDZRdNDX9CpT!H#Aq4?+u){;lti>S58&mSNjIlSU96( zABn?iyv#mq0*16}AWL;{)FI-Y37*Y4rL-F>6J&+%CmI72gVi$^j$EeS$ujR);Rl%D z-y*kV0Eyg|=TP)p-(Mh$zuNCOTs}nF!23N({Sn?=fc;2C;t{gyx_%jV5W<(N=-^gR zPBU|MHiAHC%rEgwp}K!ejXZYtij#k(5bM(`*iv!d3^NGQx2iLdYEc|%0m!+DkIN&o zW>vB>QHzwbP$Qhfe~0a<8hqJmfY9c5g~}BgtH<# zKSx<{4XxSt`fFUy8O@rVt-z!_H*Ak1h$%`~6`B-m8&mA}jVG}U7zAq7G#tNRFiln6 z@8a0Zljl7c0o($qayTio^}AdRH%UMAV*Ug^PPS#0o_uZ zzICmW0ll4AHN1C-eXme>Xr!vRmU{p=0&e>7Fa&)7SU-D_iWuuZ;sA6TDc;nezS)c~ zS?lwQ*io0#BBmB*p5|S}uGmk%*0QklV^npFd!7_X#JMM>l$<{}Xs%z`sD3^@oHtRO zmz8oHb$_eBWeJF1-=;|V%><7ePU}yd$cvL7%jYQ@{!121e*w(*!*jab6Uo-{fU#COxWjg(jZMrP8ybf7_l$W{>G~Q#OeDHB(wY(|9Y8* zfBYh;?qwWrF(y+Ek(&eAsSE_#RHIa3Q z&~e)@G)@GD3Kfk?Y>n7St{RnW`j-ENNxak^7{(2^o_#2rAK-gv(<%;%`+p@14~4=W z{8ocsU6?wZek(bkBai^>xU^)J5h0>C^d>-)3+a)e5so4iSshS8}U*(y%0!@K0 z^>+VlT^P>O|2Lffw>oRF|2Joc<WeieY&wnDzWyu!uIRs^{KwH_YWxp%ABf9KVJ(oZ&`WE@$zO{;;j1L{1rfy zL)Fv`l=kYW$ONPEx1(P31OrAV@7~;fbMFL0I)OUgQ!MU-XGC_ACF4ZRRyrYdXBEq( z=_Xp$}!3~5|j*7d9{FTh9&_3Mm>U*a#dtkf)?roZ%~w3N2y z(*=iV*#x0N)wrTNRfMJM7#3X&&#X%v0OHkW&)|*+6V-t(Faw7EihADa!}UZb;Ewm* zsLR7tXkD#(xBck+uFrf{&hm6D>4wIyHhN}Hlop!Lc1Atxz|5n+(Jj@7t^ONi4(}U# zjj7k|>9}kf4mF-kIDLBF(Zz`&I~}{%%jT1qZ}OtC>ni=wQ&!p;SXg(UBOC@EBirBX zpRFQ!-b3aQ%XX^`2jOM@B~ySJ=MuR)SqaU!Iz_I{N>zD^np)~X#Ncn@5s;|Nji*=t zDQ-#p#4W)8`Kij+)&!=M>%fp3js4G4X~{H;^sqboGS6 zQq}E@ivjxmRNWb=&g99{^p56`5b$(Q%(8&ex6(H}pC%O>_knb+X}qO*rbsV6TWSR2 z>7AvC3)mS<)A`zn`-) zSpllSDVOwIr|nUoJMrI<@ky+ec|rsDZe9(C$vWcuLdPt5H?^il%3oJun2)eE#ebeZ zIG7Nm9wcO6sQ}}H?phXJjir~5Ot|N-Jp(ZOw}#yxLZq|feyL>|$)8Sc&VN(w{t_nc<$D0oqg+l?hJ(+NTYZs$ zrcjCCbZI=Q!H}$K`0S5DHw&A((tICEAS{2n>Um}dFdqp=3`)Ma9?*>Z;}=QK;JhY538Olw4Mr1YH#@kPzXLbF0~ACUkFVz!H(V1{_z>gs zdEtutmrDo3fKp#z0IJGc6gxlS~c1vTT5~;DhE{fka4ys!7ik3<#m;&G={fd z8Z&htVWj~zvQPg+T$G4Whq1z%rGkOW_%hi%utqD1%hA59oNQl?>8xJ^G*G|DSb5{M zk!g>%$4Ixay29n79_6Wfc6IzGnU@5szFT;>XuBf=Yqp0~mw=FVqq1?aC`a9LL+=_c zF{(@4CjKa3yX(}F{duRBj9`nFCyWPgBJ&rGP^ODDH8q~C<0Zil>L;POSMfUw87g{< z_Hn{TMgAorxUEmV%aA`uYJSHT-}w1FDHi^7@AmL#k5$Vab!nKkOsQKfC~3PY zFD%{2uvBDljTy3tWL%mLcP2;CJ!)Ku;^H{u7M?t3!$7-fwsh}SJq~pJ#|Ni4bl*Q=9HQJ#4E7Ypv27Z{<}jlQ_A}xwvP^H&^cHU zsdmt{u+S52qRR-91QW*Lmz_`%Q7n|Js`+y?9mHM`3$KQnJ9f_}0l~ z;3-m-*#q+Vmd&MV6~Cr0msKNzEk(*^Qxa+MF4`ntNpn1_?&s83sgG_S*aQCI zSEopq=pLA8JDeLTb*;ohy4q^fAjoo`V>N4LWpbav{(JV)x)ixNYa1Zi;{m!TGI@5p z0Hm_=45+Ei?g|&Ad!j&VNMv0y0JWObQV#P2Y@dkF2t!qg>TY=>5_KqsX?KzcDtRmkcy3V!zmz7Kho5VXuvn&C;G-$(BjjQ|oJ$$= zTjh(AP5XYYSDo~gMlwz1(97@V53N3bQN}|8t|ESRSx9p9C*bPuc#gWR#+>RG@)mu2jlGTUh(o$%>i?ife>3?N+)pNZEcY~Xg8XsBoA?4#kPSx|5ETWv&s z@@osQ0`6#Swx<3q{!$NlXegCz53n}(4Rl1t(d^0VNd6T*iix2)f1Qg^%i)sZ)m3#o z|H|6l;H^UP_!U6=*SvD76u%$c2qhC;q+tdHMQgw8Lz%axrlOI;P>z@P%C+s>5$?)Q zNn=OEP$d_u!Vlx!dLEiof02QY^xB8CX7_m-rNY*E<37j_E{qj<<<&9L8apZrog60L zCw(jBPx5QXYM<5M8+lDeIYJuOOD<yEY;>))Q81?U~y+_1wc&m&O=wtB^A zOSQowzteYsb6se4`14^{OGwDc$XA0!BQ=xdVL_9e6yI{6g}jKd*G}sdZGwusb|K~I zXJW`uD~%^4?oGJH*rOrGGCPZt z0pnuE`>ae~z&N0#T$yr}}=YnWm=50~NZE zm2*xGaA_)fRF8)x2#`gJt4(K^XT#h_>WLX1j+@pxlO6Kg5)1pxz5@_lS>4n2u=J;q zM`L%PD$+ZEGF4YAYYZ>LR`48maq_hqKgrSzE(!6>2Br=@so$5|Ro7cb{IHgyDn;ifIZEYg-bpokXlj&b z3crNo+otSs9JH`@!>Db;k!RiPIbr{1RJUa9nekXyB8nT+hB_BJ7Jp8hGz^tH3^u5f zhjCqnx}45Lmxke)B){8bos}DM&%*0(DLnRWrbLktK2n(mWC&$Q-Pkjm=MtG0)X@{# zrn+jo&vw*qs`15GQ%J}QT%p1)0ZPb|7Qx|UP3 zuST+YubHqrKH$iqCeC|x+$J8tWu?UPZ`Uj|7hZ98D-F^gn7ag#8MR zrM7Bb9=vd9TSr%=4mhraRe#%!en)cDoAkCTWP#EU%SZmib7lH{tFt+^1kj4H*N^rY z4cD@^acPMz^A^`7bc^DnXWQtDH))cSrNoO)w2G_7+iu-Vd@>Uydh5!g;v%Z;ai6*L z+RnMJE`DY@6O3xyD&9u^Tl0j&3kmhx3(i+PlZCW^pTsp5 z{EVVO{4+t+I1+%l8h z0DSm@WW+6!akHxeB?_bb7ni|Ct|y#WOpk^M}tAJqc5{CH<~?-5MsXwFxVHn{!hJefC^v>e;so zTEei!Z<7L0W*cA;`GW@E}3{e+~2DH z7%!9WkQ=8B+-|#-x{bErhgWuxkKjhE(8h>P9KPLo@k=&H8_xVUTJP7gcNpBi9M1q` zcI|WcAQJ(9kt^6Q3W4}$DWPkW+qb!ChO-8o*$(?u-fk5Y-`I7fWr?$iY$m^v(3~y? z#lRfyLw9=R=&NH>*DYd2jZ3BpkQB7wH0rE|1oelgmN#^P&qZCpmwCA*T#`0vu#2yX z=rXuD=6BVY#6fZ>HeHo~0OYTMLb0wBviCGZn(GSqNCJVuG8>ofmfYlkhs}8}jJQ4y z(2wh1ID9bHaNultycWUVps4M=Zt%Lx(B>%rJ=@%m$TPH|_K_4Q-%YUrQqwzw#ZawX zI!nDJuxfgw)zgZ7D*SZ1wg;-LGuyu)9YIkCfX|xX3bj#E!5WXnJDw9qSdCIUCSo{A z1h$Z(25pC$Cc$g_mPY71N2Z~PJ9aOkr5@bQy0)x z+8R=rqH9Fi!-+pQU}?S4S?e1-w^djcr9bP|i2oRe_r*Vtt%%Jt-x3}4gb;rS$kg>c1VIsA}*-S9v5>l5j3&C$4- zCj|=*OBUunqguksgvk9zhKm=!!D z^lUJw^1UCCnw?C3heBcu+xxCz%waELxi3#W7CQYie<)9HS9^>=lA}8*cN2X4SJ3ZE zOpN1~JnN#PTdJXvnPxYiX!YX#&1Ju!Dyi;r-=CMV?!FP>VMwf{=>|V*rjWAKNl?2G ze?_Qkw<_Qv?;-eOM-ARqi>hvsYq9K|!;7Et*D`DdG_E;O;W0XMTNotqbAEx^%8YE6 z3AR&DDXcke^3IF^*Fd|Z~}2WfM3)&SjzQ5dt&nR|nSJIR)f2NT-I+L%y2f1#L5ncW12YO3Feg}Q z);FiP_)G462C*L6C}N;_#jd#HKqYqI?lUEe-i+uc<+V=DjMRzj6}0bS-?R=q+dbUS ztea@;T)uP5yOh535$|zFckSz*Q>1l$){;?^vM!2?gA(f>C6Ch~KH&gmV>x>VMQgpq z6W800{0Rni=TQu3t~VO^e3YDra}np4`yEI(wnuus7k$1Kj<7ay6s@^`y*~Krg}%`h zG3If6KcVo!54yH}Yc&d9AE=yc(UE3D}0 zf~!=W`D<*#gQhz!?nhgv5Gv*ZVn)v}? z{gZol{U^e&y8#NfJU~dG*1kR;xTyO;zV`IYu!GBF*!{Y`Vy+crKOQn``1_qWe@TH4 zat<_&PV{)lmpI0F(k#lL`INt9^8da&Zi-;3M9bc0@EV=RMSEO)%O1)s`aFDLAZ{T6 z>!3IF*dp=K==no=3%lVExEkx$Bi4!Yx5xk#nn=6R;MHF@diU}Rec`*4$qEjSx$P`e zDD_-p7N3#N8X41|+habqfj>6eZ*VfD-lj>|nMJ-e@BUb0)~ZA!j{})Wy1Ttk zY_<2RXA;`2L!2(571PZ~#nK#lY)sSqtXAv&_7{nUp8CjKzXFbOAC^Fv>c&OD<{zYU zz1AT0s)mr?tD_y{7qtZ84(N(Shh3->a3;yyLSSRmU32dalnxlIu7*u@z7L9vPjpGC zq#1-p7mg&7<+s z`3Pfn@TNIPGWcldCp0(Gt_;rG;Ulvah>;__j3ImmD!V+KvO^BMV{POpjM37aI8U_E zbSC4IzCek_>tuD;&{SwP+MdhD5tcCQ(rDKlEkXK3qBODa+s1hP2g0pN^QVJP1`tC5 zC(BW?Z9Gsh(l#?4E3me+6)i!@aS;XF+fA32ZDWiPyY_Jv#W2)sTj>L;LUF!2$Vp368fG^o+mI%e-l5>31X`n7vp8A}f{ zLz(+?v_y{%QmGHQ#wybb8_Ma;&g)*wt%Sq*&pq-%0b+`^9smhSexj`Sp1xx;s{xHYb29@y}=2FT+@ z>>7bp-^Yw=l}u_mqRz-ReYlQhZI?%ScufuV@PNAZh@w6w$Sxg<2~&@8?}Ov%?a-`7 z`$H99SbNKWZlO@G9*u8Mk&Zv05-X2a7?v^Zdl)MB{f3d5UbPAwL-vwF#qMN?QLFdn z^~x%s&!^sBPrvOpygwHVbRQSinimSdp9)xnonHcZUZEsN|! zAx6=2k9fO;2zci>B^SZWiTOz8<~*bWT14mGLID42GuZh=S7^;7_?9x}c=Uciu!SZx ztbANtJ3Vac*1&3%x_OWi>xIGyG#KCOay-Lz&2>j;Qq#lF&A~OY^~!qDi9ZOCnC=;d zmQfyu)|<5gGK1UdXT~b7PHngIMPm$UQn2}CK(yjN>cjqR^Eu;VY`%+~=m;+%NGRC9 z=eF;Bz#hgt(xWO6wbqzYZXU7Z+R6bn6)jE!6Xy@9CT;iCz)%;TO}fp5^1k{0!n`us z4M#ctqluG37pjH}&IFnlyjD@=JN>`PTQjEybl*rcYw}#(LK=WZW{PN~z~}H9C9ii5 zyH*2*Xrmh|@yCuY=GcCq+yduJC_80WrDb z=mPj4a^#L8zGr>AV=v%A7`(O`RyBp zuV=G$NygtfWGQTK!{9WFsN7Nlt9H~8v2=nVGeMc zGEs3K>z;FbdMNP7Pw%mNlA&VKz8iV4!#d*Pd|e#bL6oi3(8uAPBO%Xjo=rve6qJ6t zN6KQb`;dT|#+e--o%7vS2<>@c2o`&)(*F|=tsm<^wjbH|>>E*v`%GGu zV-_QzU5Aa|qB<>dLZ+ZS>T~hcx>&-{!d{KqzJdz<`^Be?d77g+o<%v0hcRpS`6KV| zW;~NFuAbrVt={+pNz*mn1|RePlT6G>)} zTh~jRUKv3I^sm?m1PP$i)zDITuY$~Xwk@DpNw*%lW57LRuAbB-Hbq43-}z)smx6z<8O~2+=jSrZ$068`U|dP=p3A+(@FNH(Ka6*aCItksT;3e zcq~{)b949I7^&Zx;@Xu7N!BA-KWGNHbANa8PTZK)^q#e@_mPT^`MCeigVzCUBMzfZ zaH&Nn9t!~_jz`mkBt#DFXHpwuM@*LB{yJKjK;TAC8kQZQL>2T~{rcedsqSjuzw5K` zn11IDmXL(}C`X0ES8@6n&Bs69 zA6?o;X|E7|W+3Ur~dx_1i10GA6v0b7-X7W&SnJ?)m`4x0B4Y@xGd69P? zzVW3#UlXze;`xJ>L>e{k{Mm%JCQcOMu75Iip7X1noa~O-O#Q zW!;2K`LJW%ug!_*+*0lKzD7uZHLE4t*S%F#e9o5Y@HMueDvDp0<36-&DLjlvYoYs+B|IxzH7li`yF{R9Go!G1VjS9f97~$rT?;tp zzggZ&)7!%MX+-h0qZsrZt1%zf)4%1J=(HU-S&BO1zr0vbrv0?oii-!W7@*7S`Tf?+ za+Tug&X-C9^$^*rGyxSnSh{=DGP%{4i_! zA=mag*Z4()!ln&~vE3Q=dGnB_o!F0X=(0H`n11?P*oTrl)wml+Ym^XBQ4<_0a(@GS zdhLV_3<0b4UJ|S6&0;_IjZDYoj2w5M>)WpexBHls))`~}0={O=iza!r8Y;Wmiojoo zo1qn?txP$hLdm6J>u%(5&$jSM9T%kD3}RdhNCQY?g%i ziLsFHrg76Xg{j`F449mYmV`Q*i{W*rNbXJ_^#64nu1X!kxJ2^VB)R_GtbfQxgYt3VzH?qS3zfgg8eg zWQE_CH0(3=h~nST?p`v~1;&TenTbx2stz10P<&F zNJz{O4XQOPjr%k<-iPynYm|hvVgK1$5yTb^sx6v%*1y$ww_-|NRB}21Tf%ecY;W0Y z(X-g;m$ftn1M;=RJXAC&-|f-Px`P$^O53l?xU?pg&=YG*WVT|rhz8B~vN_ha^%K=K zP@a#~ET3@k9NOa4a6z~9w=p};-kAg&K#Fw6TlU9AbW8Q9;%>*wp%^OEbb9*rR_aH& zF_~+x6dC)grl(WuM1Lw2B$Kfzn zy}o-Ie~RD(I+}R8guOdUM>z%25>AZ2@YQO`sY-I*Eav%|`)YkvLL~py3O!MRE*{5z z=&88kXA(-AE5JQ%wLNhnm{HOP87KSnxWkIh^M?-}H`4?_Fit9SyuO=zKI#BEA<^U4 zib!tulI_QQyVMj~!S1v5U^m5KP=qm;F0w2#$1aPQuOlpD!K0z?q`Pi$#;qG41!J z>TfiRB0n7H1ca^SnXIxw^7Xzl0n*b7jO;hiEtB{0fQ5VPibI&E?(TWX)UgWJ(e+Q7 zNxQMt&>TKwN8#P$5060Xf4;XQR<(+K@9>voaBsB4dV;~pW0~=lxuNJ{R(8My@+VgrbpyYNTwiqS*#Qyd7 z?6+$fmY4trS54BlnWJnEPv7mOWuyVrsQYAWy;{1~v#t9D2q^aHu4c)qe+tpIsEiqZ zWfb>;^HSfzE!pSeEkClg{MX0l`|MaXZ|m+h(h{Zwjn!TbZltC#FgU1B^5peGAbb`{ne>|a4ms*Vvpg#};+zl=iGR;c^4pzr zCs&f)RStO|yD>-TVg z%nAW>`NkY*L%1DA7`F9A_FIh!5I1F=tQ<@+8`!nzGwDJf;AiKMsHDd5u3$p`Q3ax2 zUzQ*HBQClG17Gt7cR4kW`^{XseP>jt`i42tnI1tvq(_MSl9Cct6J1WCssrg=o|ull z*wD3DHBI~C>&!kty195f5oTJWMw{eNxCa%^YbW|2Kb7SU{Q6MO^gmofLuyn4F(f1_ zFD7KK#TGuxo}dp+-8|QB#|olf1Iay7hr^E5b!AY3K_LTYb$GA>>E(VIw#F6_O zMKd4SG@W(%J0YfJ_btjyv|01Mb)hG2vu3_w(l6OGDfr?-%PalgLgphk9G?BNr_ni5 zNxV+D=o}rLpPyL|pWEnlQ{W-DGRJ(KwidlIp*il?+ml8kis+*9u4vgE+k1~IT$v0??u zLk5RE_?gOowu%?CRX5?~f8Hu}V?&5B#PWS+0rAXaxJ2BnNmD4B%JMV-)?=@V6>4<< ziI|>-AFjNQbmeK*B)aLr{b((g!74O$`X;9~WwRy)RUX?a45IXo4A@UYY?1XcyB)7@ z%u(X3YeL-UM8pc`_i^pR_=2asFY#aBeTbb;avjcj$YXffXLfrKK*8rdrjud6D=$8P zQTbVwh~gm)%L)90rH^6FrYFK5|Kqu1T1@;EPHxM>LteVwpU&N^>Gl*}X8B599U}2s znNR8{rNJ72Eib(jeR2CVnk!O2U6br15?17J&l^+{OAOGHaH6O$RcNG2>|b8`#-;Pty8p3?Ujxku89$O zkfHS@>!Rul7gW-(lJ!Uy`=#n#!{)r{U=wdeOvy#Z_A3G>NT0K(B;yj})$+?hj#2*2 zIF_4o!O~RNQcoVeZoUM9A0Ivpt3&d8)NZPi5zLQ4u#b8oMH#sm^efdk1gcybuWza~ zU)cC!sdlif+$YbdOt!maVA*iM|1cr<6k?A6mN&0%l0|=BH`}qq~(4e5&Gd#_m_Iv z;Ou?e)mO5>J%TsPyX><{%hOojo()*Yyh-zw$D24XJ(s+RFR;rOs zCH@?*)!0GfVazhhI?F3Tuirn4)>!|dP8~C5j%7s(t_n$ZBnXQ1Efd+tT@8{x{C6f4 zw&v1NW;V$$$XvE=tJ9O&-hrtVI{LT$$Go6NP@pzj{FMv3PrR3k+w6MLPRhfKHzuCVkl2%c}8YDd2%%=D8$&IW2urISl>SeX*Hq+2_4uV`#$blg2s z+BF}G{ZUtXUty>2=xe=zOzw?UfA!o2#aQ9xduAuA<6WgkbH=U+-|UguniU6}t{(+r zv8D+0tj=z7;uuqJnFY?KbN|5r3`gx-*~2~)oXu<3dewT5U%m}sEm3cqr9Qo5{-&H=~A6a3>P@=3-Q zl8HTRcvcVJuc2GiyHg|yYlPjVKL$&j`|E%!Jpt+Hb}VPwQ|nk~N{lxAVV=IsCR>-9YpMz#)m zZq|9=uRXCh9T9TF)02f`L!t5<6S8~C01|TgrVizA6c(A%3#?fCydPQXL~#2$o?e&!;JZVYh1U_G3=KeB4! z!`%MP#|KJd&}K1~%Ig1Jp&KyTtVeO5gg~Bi$+e~NlI1?dTFoVp(I!Ihsl2B~VJNP9 z8v{;gvYOsvCYg!Rcm8eV@Xvn~3^VrY8+ud%n*Wh7CV6AeW!83&Q34|GA zlU&ApPzR$=u3FIj*0|7jjO?}!-?=A!G5)X?LsjIGp@FJ_Ue8rS0S-q7@|7~XNeZ?k zXcM+Cvpb&Vx6%)kJ`WRC#bJ9fjd?%GV|iNENwP`CpIEGf*m%&dXP4)_3;+-?JPt%&N08lxGvW5|X#^HdGyHY4@OStZ%Tp;>w#{?Bi2ojm zP&g6~Z)e6Z!23Ibp3R-dVL;Sn{B4#%yE7!N*hkEYC}Gt5!UMbCdK^+qa&UmH#B@}* zVIEc!3Y%mIe(Z5=e)4q~VLbeG{OJSC0KZ`tNXpXazY7FCrF8hnAM3@Og7=FHQkaGY z%E1Di3cUyy5o2dyo%!q5nu+%A@0XNy%f^Jh-dW}mZgnI)(aLt8;(lvCZ~1a@2?9}VjJu>QNDgv z@cHIN>`-RaU_P96IXL3T%GWt$wm5JK6tr^G;YPlIeJd~BI(O~&)T`OvhkCE5DMaM6 zy!XF_Ss>{U_#5HxSi+=1k1;mpyP!EH816k7ZbDZk5#I0NT64maLdJ0=hKSKw3`%4= z}~z&H~0m#Bn|qfEPf2D9p>7^4_hDC)l_eHxEU1DvJ4=jsTx z^ESQwn*@kfytQk_kBQnrUI7HDJ?1t@1?hizd4bXvI8+*nv5q2Jb6;ELz_hexeb4Sz zb~DDcoB+FS)2Q{^V@gCnEI?igqX8zPmKzRJ0RRL>w7?+(5h(l=i_(!eRI}HEEzrhz zOskg+$DZ@OU!HZS-v4itq}wpM>kG?0%q0GP^f}w4uUxJ~q-|VA+g=?;%_O$Yx$sin zmDH|ih#uHu#b5~D!jfOauf#mF0J{lJjvelQ-oUQ%KADPZ)cCb`-o;ZmqkasoLZ=kc z3CXxIstxZf3FrrGSZ^%cYkxhD`ISH34(Gqms|LQk+OeKlxkP^Zytto8x*{330#g|e(U(||uxx@$A1LjQS@Z~@!v8M1JpQ}p=nL&^=e0lR4ctZ)t%VpEhY-tdz_$a} zGOoYBd-ne%EPw|+Hj;7z07OG#(BZ%~ikSi~57xS1!+hV!mb$O5khJLodb=){fC)XVS1i2n~da~SWPnPI+2-FbVYw_g!4@WpM$xb7Z}@^MGbC|T8Ka9$j)QrZ0aSx|1Lxyyv2y^Ff%;i z5xw+#Vw;aw^@#-$>auA>*gHE^=o}(J4Y~i>NJ;ZV6d8ot%OB6N|TQf_Wys@6L}Pn2I)IX>5_LoXZauC^M@YwF z#^82JNCMsg{c2H{Z78n(_JOc)-f&H7#8A@Z`@S@JMT`iI`4rALhl^u^SXt#=? z`9Gb98uAD0`{tL6oMClw5i63NM@a~)H=)whIHRP*m=2!PTXGmPnhd-au15szn8nXj zgnvs`_7TCf{ntf8-)Dsw*ndeA(t?`zTsPzF?6$N zirU?hr)R~tWR5O=tK@kv6946`@0WCOH;GSDNz%3_Avvsj4ev4>DM?{@eBY;N|MwX* zVVozb6KwY$xE$gX?LyDtu)m7{jOp!U^Q+#vg7l4W85@zW{=appr^hN%Mbx3av3(n_bb>Dm|;X8P}V34WGcB!9xpFs*7 z{V|eneWK?X{_}JE)OgR!uci2M?#OK4EY9Udp6gP?ZJ*fF%QWtM@bYw}yvZ1$8o6+# z{G0S!S{wIaaaM^x9^+pggK&-(ld{ntqrOyliwVaI(Nd^uH@#@B*p^5J}UE`BUQsGmYQxO%uJ>&o_AGE481e z%LRJCC`$oP#qICgrBy@BWSQNs@xZcBL7x3@!TwKghDPDy35UsH&FboRj6e7nv4*7$ zE6empbhfghaU^`4rW~@P+2f9L{%JAM0NuZPuI^c9Os{9K?8>qsi~j}zFyMJynxpA< zBirjVVnu~W?trB2e!LJ8cUl)>hCgo5Bt8pZrBbjc?%$$eh6h>euzbV)?Ygh&JW=69 z(hF$KOmv6%H6J{e%!`a2^2QpatNG1Qc2z9)^IF38!V3gFq|}_&ro_y@G+vR^)$gjrNYD zDKY1L$2^Nw7q}b*(p!j51Ykypd2CwvRC9FX+#cJHfl9`6?w!@KG4_(B+*>04?|_6p z2L7f<>H^Gy@_(x!kG7=_2A0x#wi^o~83h(NqCKytZs6$o!A7$;y(Rz0Mk6>yg!2X3 zmE~##rg<`+mKJLHc!$pnFf$7;B$@DN2vz9jRknfHmm#o`lHln9L7~Bf56StB8GCos z1U8IP2*FII$i7h?3}<6Im284qS!}u6!C?9T2v@bx`cV+ThsIeqvKmysym;%?j~CdN z{crM*fDqd(5T#uM#khFTln51mYztZhb1`*PF3s}}c6F2v?CP1(@0(N2Z zVNa}n!qWwwe6yAQ8Y~zYOeH+Hwa~*>q*otCYXHA|ej^`&t%`@5(1x9ZkUEfkvh0s@ zLXbuwK{^WK#BTXA=#zCIEs48+ViAQGsBu45#i*OmD_BezZcI0ni*3Pm^Z{jpU9VaT zAU4%|OYR;n4d$C%?FXcD1I*Jo-O?0NsqZ)f)?{O4ha6r&@n|h6ie9-C5YVF^+B76> z;wXH$)dd&(7kB{&6et`yV8#Z+4|o>eet!DSBt>Z#F`ySN_uQ2OrtI?Dr_^!ukj%or zB*yh;X>Q{bh0hld-djMH<_^t5yuR07x|;tH6v(A+F%2;-!f%|;wA1qZ?h4=?wnGsbasvR%unJPQmcpXl(Ug|i z*a_>C;*g$LblzPtLwM6GVgTISau=)K`I+Rz9NeUAn(3Pn_La0~lH@}(7->&V2f_=N zFG*Vb=@(35B{6mO;KUR8fB01CjZ-u+TBJ&dDa(g%i8H=Dg+Uu@j2VpY4sfI=HvQUu zrylbU8qp(CC8zgNDSh563EqgEX5^iVvl&c>9;a3_TozxRKHe#;h@J`&;;b(b>U(Sx zOm@Q-rtUxxAk#79{diJ)E6i&dPhZy|gc48tUaxpr1J5Fye%8zKj`sU1n7)nTSGL)f z< zaL-HnSh>u<_iKi0Dbk3J`yk)aqHdD$(DELckACF|4Vt?ycN0yzu@3oW#^I@JN4+OC)&da%SZrtu8O!GgA8t}vlfDf^nb{df>^JJqSZ(TQ{YZPJJ^^@T2w-@Gr~GOj?%o#sxxYK=(v~H= z+XGlFbK8t36|9eUK$$@x)~rCy5@&*0?8kX5Yh=!)@Y4sly!^MCrlG`C@6rYxx;q*I z+{G&dv|}t#hktM%-|k{DX*bV<3cb|W746O!8yRbHGnl|#A{RL4XCY*qP5idFGw;nt zZVEAP_9cA?PG*jfx|Wotz{E#sHz(p^DlT>T`oobp2>fohSY6#14**j4zM@>WI9IVU zw3hRt1l8^2*H{2~7yQ8vQPeEJ4RYZu_~X?xcB-6|Aew3L;v7E<3$YZcWANTa>Fc+0 z#a}_rCK{+?+PG#1vxoC@W2>(^b$kC3p_-O{DBXETGr<*y=-+I1E6Mv@*qc;_DTq@g z_R9-rTLsVuv&u5SoUIz!9+h}}~UN-4D-t#^VdBzYJ z1rS-smi>v29SHj{;thbW`dW2r%Zq#d1hBng0ON5#{X;Et*xEs1;;^N)+e~znf zn~m7@ZP#!P$(udl;?4)Ot86T=x(~obyU?jV6EyInm%YN*4Zj&VZT!*F(cXp<8YQK7lfKV{E$YXQD2N9}kp+b^KE;#DF;P90N*>{rlE=uf8}T+VIcJi7rpM#-yg zAMH#`39vK#^}_q(oEOsgH55|?wk1c!wO85w4Pls~(6}%2i9#QYuo*DSO5-8=!q2C` zp}p4;xsc|oRe0{jP_ONqFd!1ZKkPPEI&Mf#bc2ei*7S9_4{wITi6rj9&^G~w(E(-C zkx$v_l87UfNAs~Fr zMfL;*vM|Ii$w(esdR^bBr$4;Gmy?BWt&)h7wV4a6f1pXXapgg0%*T`c!oqvl9q>jU3tO*A0CdOyRVDm&jiR5`c}DCxZwgczT$`IRyfD z_37D_XHNCp+?x(R_55+#5%FVGMGzYr>bfSal6sCs=S$Mr>M$91CZOT6Or^@B;oMUU z3euj6DBqj{Z{rt}X(aNVO8k~(~Hv3L2qCT`xel%lH{m|m;+J|N+EW zC(_TuylG>nM+ov;VIXt(>DGsCh`}CaWEmyEUD6PEcT^%K{cTFX&EN>m;%S1-+RGML zi?!+bz3MQESbkJobXgE0@PO{reI$8a)Jpd?IF{8LI3+8eamkH>?sOb#gwY3S91C(sb3+3V(A1d zP7poRtYbj2cqd4Z_&9{OCo`Oo6@L>ui32$~FH|uh>49TQB0~Bf=ep70?Hq_%10@{N zhHb^Wsp)Uu6-k6Va^Qog0UuHt+5sq3q zuA)8~KYNXiGxWmcTr<#?=J=+PR83w|9#ZMou&4`%g*ztSSXi+J;T)i|Rl>S@juDrG z0GFt|`HVaP-|)63y7Cfw>I`?Xc$rUGoQ%^#>cIL`-GQqq$$h~IERVy>szhu(@tF_% zc}g;ax9@kX%Xm`@&zTC|%y{xKKWg$LcpV~C6=?NYi|&b_w^mUL@T2s>n0Pa2pkaIY z$)ielE|DwH#l`|sm?&Tc1d7(a6z+0RiE^54;MY^bQ4~E8MD?c@14^v@E5r6UtI%~e z6ULRmeSPmyUl-=rNC!;Cire0fO(hRCvW|m^-6d|acd}%S(K|(W_xUTnEVR^|F+Jnr zZ?sI3vA7A9O)Stg?n^Sv-z8NP8oa{V99xaA`sfwuS2)xg@<}YXKfzekV zV)c517a5mp*-PE!`kQ8kZQ8aM^EA26Y<_BRP6i1;PMl+=Razg{K*akd+!3Xh+0+jq zR|bXwib@<;sPj_195`Rfj@EVJIetivhE&$Dn#MioZ%U0@qt{%>lG}(HH2M&1TJQ_c zDscnXg&$BKZ;R+%ICAUh?$AZXx7Y{6=ygEzZCV_$@6dUHvjx%@|F@)8xbBsTTea5X z%1s4{I0h@}Ch^+7bhx0Mz)7!EL&3#;-WU2BHh5}KOl!XHA9Yz39>Y1aSOD5VF#sv7 zfq}ZHHFeRWAIFCu6wEdVa#$%g*q2`AKw)u;w%RnRkjx#K^@nDKsi{ zz9+H#j`T>U=)tI{w@08sZO1h3_;&bBrDvw*n2K%YSO>EOPCTKUY{=-@ur4RG3+{IF zyJ~bxXXGU1t3)u&4_j89yOo3J^-|cj-vYE||5Xcq>hrP0=U*7Kspi`GB)q@v7ZXA$ zbVrk1bE?i4Cy;%fvU~8xgq`_xaULi`#bkefZ<5dd$~#1dmEwGx^SLzB>l0G?m3@QT zuWd^^BfQt9tiw!T3~-?R-0}V4UyThpUL7s#d%2NXJ+cz;M5`#H8Xo zYF}h+WMiSQS6Gy5m}0%+a~oH^Edv^wA5v3Pl_@EpW1EXKi+|nK{61{#Vl_G);~&Ar zVe1wKSjTv?z4$cY(xBrw#8TT;8OR>pKuuBAy6^3t}6YBieOa=5|0`ndKfCKYPxua zg)Ke%`KqLzux@uPsOg=QCtIiF){#(nC)A3x)u6-0@o4VuDR3~yydS48WAznHtlRf% zV|%3Yv`IPtgV&p=qn?8Z1lKlbwm4 zw}!}{%BKpGAaR<)qq^B|yU^WGAp+!Ki=xtDISrSZpe-ga#v?=bP!OC2M^syU2|_j} zT!OyEfqwn(mO(WR4F;p{>i`}6mm3B&(;9f5L}u!kibvv^jJ;L+9xM0(oh`w46!-VP{%=-XZa0n;d#g|M6Q z-8z`^n0$_JOYnMneG8^~vA5a3%_rTVw!Zt-3A&tze9xbUkKR{)`E@Pkc0s!MH{_J? z2{a*&XayqPotN2CGl>&r1#o~ z8)MFk90@OW0vShmz_{hF{KDiiXfA)+MM!rX zknS!QRXn3@%y(kO-$u_k(5lSj$)#K>MFwr3A@M zG#ny52A1hZIks@-+napeI>e`v)Tn;z&f>gxRk=@-jOpw7j|?3;&}*IOy0nUPy2|l+ zo^_}4_ZhL1D+xA~NF{Y6TBUasUNHxkJ_J6iAx!y%we3Mw7XIyBf980jsfiCc=^!Fv zR+(FDhqSftXm>Dt8URw58=OKHK+lMUT`L0PYxe`$J>aCOI(Jf@!zZIlSf@*p1#=ffb(Y#!zE3J+-3FRr z743 zN?OGx3?eLXvEHYg$fZ4VOlFBnRKx=^f40AWG1jL;yAtpuYwApRO1>k*Y2#9)mQR~B zYh@iC1yL2Wr48t!=}7;Oo;d8*V$A6JXjK5JU~=z_DZ-*swqy0=arG3JfhmUhNbn5= z;QCGDt+Nx%=RSAidhJ7ZGmXna{XYyRgbEb(2`n0OA7}jbeGGHD=~!8BS02Kb1Y(!W zrD;d+;u|qxsu8-!_;ctQgAjsfhM~=!VOL06F>RlM{)0sTVjZ+;6f&D5OIq*9IZthe z3-NSLT)~wXIesbfuyQ)L8EzmOO8w`bf`B4=y8e;vB}_^97tx6-?cbXb19>@&&s?i2 z&p4iKTwYI!T=DFsFzI#+o$rd-75@@MK9TZ}y+v>lxr(8RFg}U-6Fx@zEm!{Uaur6F z81VVjeyaTVSO%YQ9aGUH4u2zqg0FQhQmosCsDnAH_v2V3VuJ{x85#uyX76+-!c(jl znhkm*;#(JfHygepp+T196lNGah!u0iS@fRw+oYP}QUaEpCAePvHU~&n6);H4Gqu_t z9Qa3Y;{90syGXM!_h#C;-wzU_(Z;M{;;w3;L4u4{5cF)T%anqM>o)JwEKv0c;=64a z$?a3Th2MLu6X7Rj1&^v3usn_Fgup{cWIN=4Tc~{!D?rZ3H)q~tXJw>h^PvmrnS)c% z2BEJ`z?9IlmZ4b~?Nz{cvwo)V?VJ}A{Z&_#WmleI+f!xe>ZOA#&lg)|zVw*t&$-A_ulFUT&I) z`f>>YaKy{aU;Hb?oWkPm*aMN`Xc(f)F*3$VOfpj6_g;wxlEf@eua!%3ufu7=1TbHU zIOUNZ`iPmpN*K$P@H_*oiWT@2d0qUQ-)Bq=ECQNDX*8%&Koa|&8~OQV3_J6*2HVJq z7Vh5EgGcmLT`AX>npkMs?;-Bk5EBGAk$MFAee;pO$iL&@W5v(H{^J5bZcHK=Ju#Gt zFP@^nR1BYeDSDnEH<}UO?)Y=wOOa?kGRhZXvdCSz@g|QWyb_49xRb+m{$H=uNw46K z@v#^8CMvPDmuMtNVz+b#gNJc0^Lub!6ol;DOTdtbG5? zr^8F=dBSEn9TXPMnO?flXy$waz@Yqff*1%=YU^L56#jn>0cD}WW%#H;loj7!mafI6 z!O$NTBb(RkmiTtFa(WLS;csvxM!qaiYd%xUC2#}G*IzlnYYSfKW8IsWzrN+#9kK9F zTxDAiV%s&%1@c>)7QSSy_`R@cdu4GSQ;~2XeYY#Fpmi}dsgmFsJ1ki~%b~BB34+b$ zaN$u0`>Z4Ou{i1cUtb-0RYOe26Fp>(_hW9O8~op^XUD!2;V`oG#RGqY3wyoO`hrl` z&m!AxRKoT@rbx)hG#miBH-6P(QKm?^$>pkyl+G^{@V9?p5VScshP%=`7XOF-d=&vyBO+VKJB{KtH=IdrxBKok1$mkOB~}fnVkU}3;%=&EK&1LbO;}b zm(DKDs9}q~;hmFSD#$O&^ctkYOA&*C^?sb$I`P-ex51jk5rb=lZynz3X-+s28M`l1 zBscp7n&|z%?RIN{zi0%PgTKrm{z6~8yO)V2pHn{-5VrF}jNDbEc3&Z%k zI#tF|zJjTC;_kb45mqgzO=hDb+TNba>(>w#wY88;_Bx5Zk^U013YlaY?zS&Vk#(Y;Y8P{!YGH+lky@=jinGen=#MUDHsU12 zpz84IopiEgh|4CyB1zax{B_a?=rOHAFviD_{%p%M+W;9|LKc26QSjk@JF8opge==G zkW|q-hTiy|p4>R1!>5qPEWo8sN_naAU%3n5bY2g_f82V1yo`UQm9Z1$8iAr0YS{F{ zIw4E5Ad)k;Mv%wQ5239EFe51g9L*?r^>idL#7H8(^j~BUYr2??8Fo7J&>Ht*D#iQ# zccC%eQs^}5=a^QX!_1XWee^`Ei!t@ERkNDjR?qX1<`36bd%`Yw3SG;U_wU zU>t9Z?kEkKXRk#=P`Z-T+f>?#-28ZjS6sU3zQdiF`>Roxe*SyWfQJK!EY#lu236+- z?%A>A-wah+CXGbGP(6a$!@KO4`Pa4;6GOKD6|NueAtX7Tz`aAM)UD^iNO-8-QD^^F zno~CEXee8Fa*$RA<12mYv}U&c0For?3BA^Ac!J&Q+=x>;uon=1D@d6*qQ6q+A5$0^ zV_Hej;Qk6P$1j)_+{|N(CgpP)u1P%K?{6}z$(M?2sMSf5r)c9U6rD!=Y#Majm+s}Z zm0k${DE$QN!G>%FMiU;DzXHT3I(${E%Co5=vsub$RzAgA2~{`KOXkT@mP-C8r6u(x zQl@4=sJEwMC5^gB2S?5sJzz+Ks=|m5UNOVKs`jr28^CANF+O@3S3IU8dVF0xKOr;* z>#V$HB!QdhVkFM_0`{Rn+=yIhZjJu2vedDX>@t&8N6P~paFt3WG%@&OJ*Atk zpYvV_vUHblB+53QQ3|wms^eMY(9?FfE9BNoe4N zVlvDeL;x6@1hC+Kknvv`6!f}i6LBvm3of2Wa|PJLmmOyozP)%uSl6QJ^v-IAN68;2 zBfsH`Sz|2GH1%DwU2#_YsMr%`@(mB5$*gS7_N z?csfzhA9SxV(!Sv`S_+O)Cjj8cY=2?zDKT++CHo{Z;V(ztoACo+4VulZ884vt~_et zIf%RdZc8y@s$hMVz<5BCj-z}ZgZ@K$CwSM#h-v zPnFConaD0rP_tKgJp?!J=B(h9k=_7rsaxgLEi~>w{_4pcSxV?sVU>bd`z~^7+qjo@ z@$V-gr`XG9?yIrkFrH#=B9ydGmk!VZ76D%}LCdEPQ0lqyU*U;YFM9kl?4th8bJUN( zBOsZ*qA74Y`WKAhuT1gVYWPN&u%x+3cL{DcR(Zdov>>3vPZHmDkQ*EoDKPA>{|9IP zl-%oqrl^x+sIC<9;Z6)-G^sBghJV5;_*|UW>v$5USl-W)7)?Wu@@!+7oZ5<~Dla!N ziX+s@-)%9SS0$Ye*Y3x*zWilBY2@JWPxSlCWcs)a!ng^24Ihf=+TrG0hYD`6a$Q*! z?mmTXHy={XPyD!IL*N8x0lQ! zWPErd2tN0BuFfO4tG<;Jw;|%CoQ4yzYo+eeW1_JnyJ@|waSQuZ3I%H`lJQvN#{ovh zP4dK6@zyPIUE* zl(wC*>=v#%NL{Hn#>cdSl2=J}nD?*79)?#hlY%*>2=0xI_V%|m=0HRlrRBkA&`6}q zByZpL+E45drGm4hEkybkp`uOB7ZsXtc3z_PxTNL3js=3PPeW_+`WtJX;NxmYib(d&%c ze#W9atx@@-9n?6}p%`swy z)XW4AeuK$sV=b4u1r{G#IBUh2#=6;;dMpIJn~e$bjNc_>8XxJ>Gtd{bW1^8)E(={d zO5<^ic_D_3c@dnJvHQ!BU{CUTeU+g0zX_yQFZSRbzZuYB#^6u4Dozr(@t!~(tacni zQJH&3Y_g5QW-ZyScS+o1;}%8-Gqruv+dZ1^bvS$3gk|1htgzv82#mYkK&_hKubtM4hQyZrWJeArp@ZqVU4ox^lArV-8QLab$c`@X-%u!LaYG z5v;YY2OK6h89ZNKA(z0&N;vJ6GVqun%r7N=4{;SIOvgipwg_@s1uo=ibaKB&PX6qo zCph(8QdBSsH67_$o(Y$(r91KNw-d{;z818}i}n=CslR|zQP^(Us1#3g`xSbFID8{2 zcv6e5?47?)0w-`Bv2ZqP&B7coW1hx(xHAoIm`m+zQDcsISOCIq+c;2#rab^_Hnxq_ zhn5k(b`K7v;an~qz+n4VZi49yrV~vVleU~VS3BOE<>_d^!&itB@Nq#5^bm%|1Z7QfE}In2E!?${8v9Mj)#neGU7amskz_%#}NmxBll3 z|2||rLdIOLi^utW=Y`)G#>Kyjv^c)Grcq)VLm?_1$iDqoj|ATR9Q>&+{3YHPq_+0< zdhnzRX&0$?UCRza5biH&=TBqlz<>P$X#Ytn;MfI_Z1jdiwlZOoUo_Gxi3nb-2phrX zdn4F^=QJ|RN}Uq9(TB}2aY;_dcx&|rkg zEJD(nziS-~FH@wyS>QJRL?1E1lmsgT2+Iq9RUaRb;RlY~?!T&Ih_}4RbnNZyE~EeU zryOzwGnQ-mehoQ0)B7e~#(#+%Hkqyl{MGCL+YBIGX|sd&l1BJT%C-Ivz#F-X6%E9Q-tKJqGe@NNmv;3Kn$ z_ns2{nUg`bNiKB$n1^=WJ4C`-r3DctLuF7UjNxSq5Bk{jc91rV7#{t#{sGtDF_ESn zA53}f$NdkuNH!y7>EYvmAN$0|ak2?{l_1jR=KqJd=AT@o7b~WYP!}t;2(6ZCkGgI? zu|rPcGLxQ z-+)4=da%Jp64osqiHx&lAD1Y&7h|#fX?JRZ_K^oGZ^Wx#kVq2X2d$J~WP1j~o5J+{W^e|QlHQM(Hc z&PS(ogECuQvU3y8s!wr{# z0a^wB>Y%9DKFJYxZaV_;D}$bged%dhH4AMU>%jce^4M{L)t$udf~NZ(NAx^rr94x! z7&8riEUef+w2XgkdA(>c^2#=_$1}LjUwW#O-H$46{|S9(Ga_Iy$`OB z+xc6Xg?CG55nU6W7G9-Tn+*G>ogbwQ>L>+xfk=$d%)6e#4kTB)78ZdE zgqQQtE(gnf2f{rzI|W1WK|PBX>Eo|5zq5U0*)slPH(HWd?PmSZJGM;0G2of9<2M1Y z4n^LCZ|tc(9U-9n;Rd*_=31$S<3vsKcHfwmLMbq!HG3Rweg({nh{0lp1E=7e0YX#d z;%=@7Sj)>cKa&Nb;Es8KjcT17chkabzgm*$JE_C#$y zrvyAQ>)_)3g}^g|;Zgu3DqEFLHP*=>3umGORPWnnC3#`fZw{h^2WQG}H)xk{G;YS% z+dow>=#nc0#IMb>u(ku>b{XZkd%P$~BVQSc1-!TX8D%@CXSqPA#-lPDE4cLrykjvrUNfV|8fraCm+FGV9hfs1P>XF zeS8J|S$(9duVbGaZe*EJ+GB86UUBrc-($Z^tMn>IpNjBvxMXaNZ9XtudsxVH%4Jui zt6AiLViwfM1QwKdoDYI1g=z_{&g0zt40;h{Tyan8UQ=9BHy$$U!)@GJaq}H;oZ@)l zItm2d8|Jt6wYV^y2;8gnfadlZ5GX5p&V>lY^HU17Qo>*YC_{b4ynw-DMfIm%r&@vqMDz^etZJXHfasr3 z{M;hVaX*kt^I%h0O8nTnX$XJXRCxdV|L^Jof{wyTFJP(8$g$aI@FUrhpf$B0TE^&l zUzL8U&SP)JaI>25LKJ|Sx;5U8AD?NhX{gVeU&=c`y=~?nTAKY7OT`Z|Y=&`Htkrf9 z#S@^Tc4*%PAljwg7;=JHhRTfm-qUi70kmkW!jnQkTT5dBT=HeC)3I{EX4i+_Oc)w6 zja`ml4KKTDv4~BLC6RGB>5N6`q^Fg)H(Rra7swaLQQ%#?GuT+BK62i7@iSj{thghv zb5`9k;RNuM3c@RD6}x#;XjcG{z4SncgyNOY<1cVrN>@Jff2Y@xIP2w103=}mOoJPm zg7Gg)FD{6*#<~s(_q_M6u7|LjY~vYUjZBtYnkmKTS!wcE(t zOcms09-z`b0*9px3!?_m`KZNrpZ0P_wkL`4AaX+a?@$8WNpTtwnDN41S?j$!e|byw ztiB1QH}C7pLSrv8Gl;QxJU}q)&Vz77W&2j$}RWX*zHBTnNWWyVQb;+og{AG7L3QBS`L%xb}8gzSN?36O^9yd}l;gb9)i5BGSd z+3ke{V(YtSGn$6(ik?aN3bc^XdvmMGxra%?MAyC6l(6vpfcc?5cJ0H8Z2hZ5-L5d& z(ET?2*b5e1{|S5D24SyRVFzNIjlowbsU^fC%Y~v()<&~QZlcEDjSku|52aTC-{j)G zx13*yDZcO$GNR{;)3$@Q(lvGbH`)e4zisqh{LSJ-X{TP_np8lykUI4>67B;3=e|B@ z_F;e64yjBVE)mo3$&wc#(?u9!kIBlrA2da}hWak{^^2gMMjVG|AOxx<5)+T67|KFL z4ouU@_!c-|`b{Wrtuk$MExtn+L%DTFck8b04sVigrzoZP z5bnB5qHvWAsWJDE0_@kU{NF(=5fc-17Sv^>Oc?J5<^24%xU$WxY%0=_!4$tUT7n+r z1vw-2?A{-#iWV`zW5_puC+Af5!}0$ZQMK%s^UsnH6cXCYavfsBcuQgQD|)SsK0b1R zm8L}V5+zRCutvAd7D1c6nYox_w4o#Zn|jTx3~?f}ibJX+oniIDiK+`yE{i<2=ScjA zFSv*rV=5EAH~)qxP%*6zf4nLUfU4+S$pem8Zt5WK6kPjBnqS~>PEu>(vc)FEJ{g1aPA75ZA1{oC2I8Wad`} z?Ou!zFg;43&gG}$@LKgT|_SvK{^HI6eRah>gBz&vkxqb%Jv8mp zNZWO%)Up=b9Znl~EIqTkTN;NNqP+E>R4Vdh3J3tZZ@frXeVAb~)pQODLM{E&zK0uK zCgrtnae+Y})p*e1ly}o&n8!CTSb_CT$Mb|JlGXVS7w%W=wY2c9B2|a#QH9RIMXjw= zC!H5Ur$o<*Uk?@w#l>-VPQRt>hj9WE3kRP@%oD@QANL+F3S>8q9z@p}1}6~!eB;hc zRSJFJvPxDpwjczUm8hCGFA^XdJsH&YlfTp##Q(~{)kTmgD1=cYLTIafDsZupy5DV* zP~%gSi_TZZa<#I(Ssp)%D+!mW11MdV-sibSJrrTqYHRYpPz1v}A6y+q`mEPBtEe@j ze7Jg;r7SOE-5s8j@cpirJDz(|N^PA8zl}(d`sPlx62K0(jaSPIcZ~ck0b(WPu1Mo- zmsz%x?sa>6?0_X}zdVQQ&Bj$gwNN6lE6vAswDN_X}}VWrF_ zN(Xc%LDVvz4yt!!ePdr^Y(J#YrTJ$~=GDO6j(JwTUV!jwsE)Qdqz_EZLOJrK^mrxO zym+QIC!isu@2op#*;Z+~!`dSsi3^D*&!g@H%tg=Bp`ue07jbQ+#MWT?#(@!*;NP`K zl*1%E=WbrI{ORkE`4Cb5ki!^#C$`AdYxpeZ3!ctUN78moo=khRf%`>QScJx9>ayy~ zo<_gBHp%D^8RT7$nFh>@}aC>8i`;M3Iri2Kp)_ zQol$r`b2u4*LSD!t-6;aUW3Yc3aI9N)ts%AE2yVuY8D|8B@jP)`a?&xtipI(+;_54 zQRUew(GCs6v}DalK&Q2_jwL~{E2exbtZ*}Ubg9gVjwO~#NC^ZWX7aCO+QITzNJZ7`0W9os2rh}2fl(i-rP z=WaG}FI9;Jg(mqfNae2+UYC{cmQjDkOWBW+N!?Z6ImUotbS0;Llbx$#mnx)lc_89xKHhI9KL9%}1bC4ME? z+;-jX;yGEo(Ee#(ql4SxFzrBCBP)6E*9uGXZSnTG4ri$EG|Y^Px_48xxhEkBO;mnrR0V46UraFV8%M z6Uwo^zIpzs4V}yG91uJ*rMSXLbJ?}%+Wl$8nr!enN|rW$YK(oOi5+7S<8R1;qSQ=aE!Pn>b2d4A( zR<=?^M_zrpH&E0c!o@>jU2hes`HqWgr^Ye^@Qt_Esqj|`=iWJNzw}%IiNbnc|0b>g zO~H=vqMNEp!)&9n8)4};Q2tK-Ne-4rk}tADc7pd7HW+ZJKe-C1#Rc3)^H0wChfuRw`cP zjl4S3;vkR~a;QcdL1MHB5GybJdIJc2WLd@EnHB8m?7jJrxmr9ocL%S<9u$W^;q-le zYushtARg;_3@4YzPGfNw7bK&${N-J*iYotXICw*}$}=<0D(cuFX=p&JW~z!UI@6vx zY{OqsfF`fXtSzaB7Pg6Ih21k!;A7!kumI_L4iPt4?j$U8?2Q_tyJoipf6D-C?;; zu8Y{;&go$Fczf$;*Q3aQBdM+xBqmiT*yM9H4}X|A#V1cbZIKK_BIr8j2P$n$On^?{P}iJjg>iu>*Q)19dsgRYbEy7|0Rq65 zX=0n)G0uF{>psh~NaW?3K_#4V-dzW$*!6Ck<7{4AdD69|0r7Lf>aIVvTlfrHLji#v zYfyG)@d?H1iM^{PGrJ8yAW()gIXM_5nmSr4#7(W$%uECukg%*`V^pN0iPf32N8_^} z>_!I<1+wz(p6&b8HWlNB_vo1M=cPgLT%JEr<|0zJ{F5}VYI^yf7KQOeTm7gvN`XV6 z{6Xqg4+2%3`B47a&XckAIn{-c@`4j_riakTNb_c*ZtR^(P$vu}!In}>JO7O7Mz_Xx z+-==++Az;xl3anF@k;ldq1_=r=Y9lYv??N3pX57ME?lPzI4PG7TJqnm7ZlEJ*{s$M}|#VkY6viv*U*#24kt&H73sRjeU}5FZj* z6I7W!W{c$MW$`8oX5LV<-OuQox+401xakwxbSC~jx9DR$S#^sv5_EOg=ga1TdCX>5 zQlOPaPm}(z7r43<@P3li)qQr!xYl@pC8~dJ5o;f*Jw(ltKmA(*BBtb}x!N(F;@qDJ zoB}1+>e@6e7j0I{|Lhr0L3?RmN2O7Xe!6*2orfIO`_p}4euy!wl9${!!i{U3Ga@(Q zF3vc)gUxg%S3=!wXYr-Ey*nG(LgOq;d)=glm{DYMb=;Udr}nR-{8L!`c)5f6fg)e& zr_W~K*VS^NOBd8uEllhLtrpV8+Gbr@v2l)0L=V)S2jeaHH)#D?1{cH2fXDZM`ok-^0(pV!5x2vPLxM$s~rmD=et$Ab2 z6qUb!JHvkm#pRbMP;L#sga?H-*v zK@}{~DKVP{g)>_&Ysdjib=LLzN28Jtp-1NY7V2oXV14M|-UAwlhx$kP0|7Q0k&9W! z()#BUxMpHmsbjWYNgc(s*u0^Ry0QIQN3fA}V<{;xQxl-fj2tk|;@d{J!_nE~sU@n;6wo9ZD#CwUVyn%kfI zc&(jVY_?Eo4LZzT@sPQ;TnW=?exE!}V7A~u=1My{ZFgk$(_rE1sLcTfjQwX>q~fje zCp!)k%HI?yn>fctG!&fqE5r-vrc;RuEq_(pKU_83I&($dmlI|D_0&75L>J6MDzx&2 zsr*`UYOdKG+#ZgCevyMTM%P+0=46zAGKG5G4rhrg)8S6x@#QZAao6^oo$B+T8sg5# zsg)VHzTWmqD*m;Kx^bjV$*V|%=Lyyp%{ZKNC|0fvJa^y?X&|y`pK00|TGb@uG~0Bw zY3^I#@(SviO1WvON#wrWQ_)cQZR4gRXoy%1I?cH)j+SVy@hrM5J4Nme9)H%j|K$RX zyE@0`o0#t|LISTHc=FHT>z6I&!@f(rNSH6n`Eh!cizzYWna7+ENpfHL&bFDy^YzoB zV+W)1ApORvndi=}XzLn9)P$TkP1BFj)pta*zX)_|GzSuHPE9vCx=2057UlNe1LF8N z5{*p=U~VjK`&}l)b&b@G4?TqTH=2%_;eNrjrnrY~MmkToaw$qsi1>$meuNoj8FTyU z5BZmG=E~EETm3A)j8YH5{GHOb_1eYU+cRR!_ULhJl8-QTCn%(HGza|T_qadmmq+*^ zlqg&eXUz`oxu?GGyE7)0ls!)yv#S^2^sIcZrAun~!@#)Vhv0&{N}rlZKbuS3Iv!v- zHq&w#k^jWys%>zgM}6+??!#SDa+8&Ujl9U)MH?h%N1>ci#WQG5Q!ZC6*W~(jJbf*) zoyND()d@}5S0bn%(W@RcUi=w2?t@rg9$}ghlEP5L3vt+;nX3*ga1 zlfTonV%8ni&;J|^gZbE7jF3eAp~V7U*lqGfvFm{T+e5bS&lVA8XWXqXWnnq1KE;2Y zaM`?wf4SnA#NZYuHclQz`VtHFWucWKRdtIpxxg+ex2@Gke8YSlA(h6e(iv=>sA5uc z&Nu5@mS(&txZ5$z%|6PhqiR`!ap}vSxZHkvnhGDMfGyLn+kgtzCeYVpwgrT0i|Q5? zbd+O-_0el;!7xoDe*7wnePjiZ!VM0ov%J|N@v4&OTDR~I7H|HX|1-*pbwB5K&=8HKgmtc0+_F7UcV;x^;>VRzy{t2TUKCN;wkIb{aK-p$5Fz(s zf?3xqV-)M;CuFch_cpe(}~WU%=$E7N6d`Yf4A4Wy97McRPmiMhRA%nBVczd-~gm9R6JHRMA*| zw7R8yc%*zjgpOC}7;R$UbR1CmdCqvytT0RYC_%eyNu;Ol&gGR1%{9VP4|mT9O@~c& zdK~Y59uR(ZNT}5u#cTW^|52qoE0*$3)lO_7sJ&;iP6>PzAz7lOa#J(UtoE;>-Ivw;49AcWz|kzL(uqe&*!a zSjlZ&bFE?1RD-sde?0YB_UxzjC~v~@H^3UObTK7_KWGj(A|mX^++ruuXSqu4-*8ca z)LODyXgK=gg7&D+F|^lIq8$tZ(GfDCeT$vqXUj_asZ8M508C&Tkxpahn`SRJX2Dw< zcAX+|6?kVqxW1RE%oSw8fMUHMOnz#m;<&F1PL2~vOHn+=?|lsLE|ITNCL9dc{)EZS zDG-u1ScNjeR*5xwp2P7Uvg!} zm0K7(4+Ga_IsPAY{~eCy`#yl<5k(XdDH%;6E6OOIr-ULSGb4)3jLdlO=xHb`^)j=| z7Rk=0$SZqhWkfbvkG;O-YKo@jH&+as2-2c)H#9b)DCFo!5Dt`^>ohO`N?w zZke{(B7X)WA;d7VwmdMGSXr0;>-k)p%gRVNdq1PQ15P)v$PItFdYo(i>&d+RgFGN2 zyJQ5k?I#eCUD59zh0hlaf-wKJ-yz<%V&1@J;c>{6aOB>6Rk37D{%a8YgmO-EV!mD> zvw^Jp7{t_PJ84Fa?KuS<)HCWEjDJ#F-0&7GnB?+1YDO;uK1&wK#({{(FXYz7*SwBA zIxQyTK~+0-(y428Rz;Cg?LgPf7A5iSW($~AE%>D&S;o4i`?5XW)4A%Nc7O$avKI-e>CSbnBdU|y(_jO&m=#=mhRS2F z5}muKo((45dna4kQa?&1J}I55C`{R3pBJN8wp;Ou(LySiSYv_gM7xgg@!S}t9GTz$ zFVr@Am7(sdqiwR6>u|nwWUS&$DtN_Jh9`#09qXL^c9`E41{F`sv6QY$UWzGW?YVAG z{#4=Wh?%;46!^O@lukr1oDCBWp1N0&{3txt)s}eWI533pOhqLEhH#kLNM(XH%iUs_ z*|w2rDCi!xu_#o@-QvP{N?EabcU>*13fno_sf#Ia zhSQEr5@|Z!yC@cShGzq=e0JW`#qxt2il7ZXMBRDDyGa7o^W3>XMeUY96JiI78LU#e z_w`w?=MU)z?PC!du~D*uEB7ZQTnG22eLWSPqe3STVQ|>{Bcf{WOZ@eQC!t`h>}(IAcXh4v&4WdqIwsY_Rl% zdjqWDS!Ru%TNYTbhFg-QpPm0|!BTvUQbj3@^C*fwnMSB2ss)|p7FO-Oj@m(oM_=9MuC>)HQ|54|vc~v;yTzIXp@m;aItD_f zL(k+@JgfccUAo(e?~20A2h_qOq6)R$OCFo9D!-4-YD#=CbE3Nnt5@*xlCgfBgi^Gj zqVY2oViJ=*>Bm58K3xb_BolvBTQwAzVxw4mC*D){o}DH5tbSJchfw}!>K<>{7}T19!R_suTj*edrf7FyO--kdIKbCr+YkUcly>T|IE zcC)wF@958c?`<`zoE;`;$JO};u2;s>=3lIkApz}wIxV~-zP>$Xm7fVQ>G8g^9NUfh zXwYUDe!RT&zzCo60O`Sy8xDmFk|{hoZk-otxJ#F09Tw&aS!z1Vu#+C)jg$|2oSi_+ zQXx10#(|;mOD>#k<4o;(g<74Q>+4V-f0LDOX4U7xkQ>XeXpw#r(*s2G>Rh2GwY6~m za-WB4XPS3~`*WUuN|rQ|PIhuai?)AldcB&ftb{O`1)z#3W0TLqU69`JM z&^tA;N?E~S+VjvD?7llyY>)UysCII83H|P3a*ff{SW82>8* z?*GdzGDeAQQ`RrtA1HyI;HPk70#c<^oKTu38aq*|4>w)_W6>D7rxN^8PAGuDI#e5s z80kz8W|+u<#Umsj?U@?9lV>*m^#a0HJ=1cjjWR&QZF*aNoIu2V2VWs*^Z*k)*CXZ1 zA__9>t^zmF+X18`s9WYcveB~3erQSlHV-^RTOiyd?N(!gFhFFjUCpcw?@VOo zvyFSg6#Uh{E=M%Mz^Wb`-UR&SJ$#i@KHkr@9~2leMZTRptn-KFPt88O1saV_HqrO6 zA|aTy_lfl(0s_lt2k@)xZoKOU5UU)79qr+r&+W5edHgU%wNNevP8EP&*Es*EL^&Mr z6-Qxk)>Xj9v8$z&c@Mh{yMtSH+Nr~XzFqeniF*%FFMHBf>;L(P3?BpF3${xn1<_J3 z3k>v){-C2?rnG2xoT?@x!;18da+7FqvCbQ3#7z+@wF&UmyJhpvV}K10RyzI(01RiL zOV#rK4;xl=%p*#m>_}*KKrS_Ftq3e(ia510-Vk%Tk?| z^*L)lYjWyAI>1kI`V-8$KY0VL+OxR98QLE;6g=sPS4n9GpFivrW4dGKLquyo+gjeW zTz=o8LFdSa-P1xOIj1ACQwaKebB&MRJ<5e|M?%ub8>s`K2i>?-9YxdShiDf#T8n8NjX?y*Z5PS0 zWjCswI(V*$UFjk9vN$s5p7tibSDAp?N%E4eB?u~LpI_FJU?s_8SrBFAWdO1*Hj{sUiF#;qXOIijw@1|;CQ89XLWV-pd#vJ>tAtW5iiQ{RJ$ZgcI6}O9r@)-VMA#? z<4kQa*&QN&=$*tMx~+DWIay57wquCS?HKTVvws3BpjT7`g`13hxpji^Kbi^*qtQJk6JfLrP z!=~(Pj$(ceUoj!Zt0%3pKrISz_V?`JBv=SFD{m0+69J|&gqR}2fU?3oSKtLBZ}=(t zUYfww{jjJAA`y1Iza~lz6N?-JzC@N5jC=;S>45{P1mwtyzAXTZ)JWt7!r0NGKx?9h zmSCB+%<$7u%TM~x&g{V9;CN7K`CwRKIW|{dIWz`>;Gsc-TFrhskpMU7hebxPwRJW} z5YCUoz;DdiSz3TV6n@Trr#~!aV2gfY#GI~Nu;U<9# z2%gme!Xk%+)~|*c_&sxXlno$ogr8%UDjWpFO|lEFCI0)e!#G%PEe$M3DzM`T%=;8( zi1C`fFA=O`pV0? zy9qartP!s3M#Yr%n_QAMj`@_bMO|GwLQCj-u+d4D%6kakcfDMcmHF)LYta+%RO6Ha z)3PaKlCxvaAOO^g!452$`d!~n$Z_CVdl5cA3#*H7 zIa8Y8ElB#=Owr(63PAu63_eW8kQ%$s zvjc&K*8@G{C>g>!|N80IeK2pj7Mvn0Mbd3d;XbME$FRW}AD&Y~)nIl&4rT`0c0w;O z%j9S~GVgyKc{EJDD^*?e0L<8S>~>&Q<_8X6SeqU^|8l~LP=F>O^Cfk9srK!I9D)d>0K>M zgv^Ckfw-yI+rpAcc^bn2gI~WHk&`8VK*+2uojl;(4tPRsbR7^7=#xhH8M+%q+%&yh zV$L$SFoT#{aMW>hi-Tjm4<5rrp+H?W-`YC}zu=`NZpz0}&Yh>O8a|4k`3`QlTPnGh z+=l~MqAW;jL8q*Vke%K-gk;LQQDQCA7uG4Z>5cqz7=P{&GCmRn(D|K-kk{AF5xY8$ zES}u%d6ka5N0#PY^;x=?6l9YeKf@8H8%~H12W6&&F5u!N(+R+#my9NMZa9 zJ^Z-MOKP%rE~dHWc4kKGF(49AoW>h(hpu7cR(Y7=xBU2L$IHRGo%kc z)>2#SofLM1S$skZ39-?)~lwHV-bjJ&f&ijGk9Nj?NvT?jG+E;tb5nJnMa-woWAw7~#LG)nz^ui_aogL{AbCubhM%GI>@}bK5Esi>|SS z`u4=;1^&!Uyb}ueSz%|z57pQy-6JM(-BNW3=c%>A4Ih2zM4Q)FvIl`pigfs?7{=Bv z{m^&hVv&U{59+ZxyNwDxPbrM-yv(xi#i@P<_ya~QLRG#xE~#)NzumwDcnS`#?0L~Y z_D1A1`0r7kTXg%hcj23&?o;Hx8G{A+m&raAGmCw&6Bcp(Cfs~?E|U^c%R{t!glclQ z5ce`Wr#fw39y$<$1(|5gueZWI73WGpsVJIIvp}~=AK5z zHZF6HJPXcz1jn_Cu$?l(8{F?V-DIPasHmMaFE&rYHsd;Jo_|;c)mLs(BmasKO26Fq zKr%go>Om^_*d^UZgOK}0@Q|8R(HvbKs)$iGCMMaX9HB~8wR~eGe}ff96v73t(xhzy zhv+vVaRs#0tN2?!@w`OD;;az?HPp~W^915lCP9g}%2C?1wLA7w=-F1j+;xu70|#0vP$u%L0UPZFm7SF`Y-W<)+bH? zVNnw}Sl3wW?C<3xOJl@gx_IX<>2(Rbao^8c8%rFycZA;iK)w?cX8$LDcIbG*c?5i4 zSj|bwcZ8p^)@l>|kau+U0|0QT4~t?qi0?D#)Q7?{XQK$;9VCZWkuo8WmUbsT*g`tG2_*En|&AZnevt!{8PhJ84Ui_UbcV4^1X4}^n1=7br(XU^Q+ zHiIz^!y>mxkC7J)E~jCwjU=8~jp=WqoBz2V5de7S;gA+v=*eFtm<1O`_x#86Ovw3A zA3n&UAQviP>%U@$5M$9*B3#W?DotdDm;ZE^S!`#?HYyR?^R#~M6Kt1R*JWnU1Jv`L z_z&xG0{pNXey&7BPW`=|=!2wh2jriin>^lhB}kakvhpSpPYO-}vAti&N;T~nH&Fj9 z0(f?nhXdhc_REcsxNFmhX9|jciC2c1ouxaDj@U^|9KMe=mlWRL1v)%G+H2?r0q?dl-&)?t;9>QUM$SW(1hld%TqC1L) z08}p$F&bC-*Jn#F8kw2wECsTU2uG;xJ7#zrwGq)jrxMfa4A=0Oi1l}O22C;-{iL%H zVrHa5KTCBtj3*_o!c<0uaPO>q`9**bzzi*QT=SCDJU@|g01zHOu@?kgmhW-G#C%mo zq+d}mfebC2QoOVc*tmnMPds=0I}UQ#%4yb#p)yq^LwEuI3}!&JUE?Ce8!w*tQ}~-T zx*h1-tR#mIRdX>bQ-$M<%&Fii#k~hPIp@hMp|`4em$7K2#@Mwk6g@E(ATd1GWibq&T3Lo{?PpEyLb`SXRq zG2XV_379p3V}nOvf}^}`T`|K;3z{liy1@vsXn=-d{PgYFKVKjx{~j@B&Bm+Ki=6s2 zxxnFhGDm46Rb-(NTtL*D;?ti=MA&&X=6l7z$z?uqq+#I3Nq!Dfn9MTzh!woZ1ykf8 zMx&SlM^JJI=u?JNlHy_IN`s=wQyK;noaD}MGRIT$VIeCeIU7Qh4JbJcb1sGcEw=cw=lrwf)YfW8m7cf0c54{3#oo0zLJt@3}-|?PwGTTZ`E9MyUYEj|M!}VxTfZLBR={S(}JU-x1M`L<70~*<(NbULEoyf`#PE zV(o*s`7X!sUjycA?V)z+LJS<%oD;m?T;}>r`tHb&df2Wr9O^+fKoTm$KZo#6dWeR7 z99f|iJZ!N;c^~$aqMQti>KzgYseb)|&3>v#s)hea;Th)F0K(1_z(gay;7|WqIoSHtV;y{dDPGmRm71`QI;c;J0ma8Szfh{wg%V|IgeZx!fhnOKP@sM zQXmoXVUuT`{4sg+jr?k@s}o$Ev$<#z9;n7|JIN5b2Rqd%>M)_C98oRZnJZNjCW5v@ zXk(jQ;?EwXOW#hPVEc9BS8;>U1TBjg<5ZFgS5$~Ox$-kH2hldVRWe7bJBU&SGOsD9 zku8$d+mFl9gAANIO#EYyFr0HtnkKi=jL;sWoiWj$I6gXLCzFdpR)Bv8tV~B!E}xK< zp(A>UlPDj8forng`ZGP5C;j4;Nr*E2!Z=%!zqgNm&$^uQUsn~i(d7u0AKpj1g3u34 z>L&O8P+>=ac^fNRfT5H(~ zU6>IZ(`?{4!WyQmR?nr~w(*oN(VUmVL&WEOWbDUI;wD|iCMhQ`Ff|M2lq|Sf-czn{ z*w`Q&Sni-0*kuU;#;KEN99sPOlyQnHV4{tJn3ml6a8lui*c-RZs)6%}qtp5;3 zlpP7GIEc#oX&_pVwC&I$nPX0C>MvOY6Q9AVb;#d;He@@c@5k9a6}yo=uW%8wdXvmX zCW7gW_lH=`q@nc_0n)*v@H=J>HS0tC{<3$!k>La_-Pxb*AA?FIxTuY62YVl6lX|@+ zTi-I?eXt~T+2V{*SIL4MQ@ z5X0Gc^mTW?^J+!CRFj3;VDH>VZ!Ed;x;<={G)Nr^RYQ0FU;trX9q^G0n77QY^*t+6 zhbHRKU+a11oq17n#-vB<)Qr9bOzYO+-P^vq-9oBue>8d^OlD}Ie1xJVR=^n}&66)M z$`Mw`LShgu8a@A7?}cxF2!C{TzqE0E)T?t{_Pt(6(;7Z2L&nS}C^NJQVo?ENMLa`$ zUWjj73~vZA%>!gH}LlAm$ zOl)J-Fe)rNRn7GyH{Gd1(cTz>m( z6m-D2*!6{G`=LCGV++5I7>;(`f(&5EeM_n%4##&aLa1LTQ@KtV;~sLX33>a*9n}T` zxv}><#qIp0hD4V;++~F`nqj!=^6gqu-RkhC^g+TuHPdP|nf7?mk&$DA=3k(nq&x+yn{BG%wnt_phzz5;b63{5#cI~d6h z6@TW2yQ@h=xOmHsuydtejU6AxZj6u41yOa3UUdWZt>cZ)LzAG^=A~-Xlt{_bwQjqe z)Xo%bCB5HJb|40p!o7_V6vS!K=_Nh4J|=5!vI{fBa_Fb_-b4WTm!1wPqzza zC?LwkH-3#NeK3K)568>(ckz#4mV+9Xwpp^!5nFD{Ea0gf|2)uHpS4yMX3=z@Bb44j zf<_>Frm9%xk9Y~?63`p(Qot2%&W&;%CJKZhFs z7$9TOxW=T3Sc8P)H_(jcfn{Lc&^6+=k;0Zc@_`I2oy%cv!$0uk$g;$F$ zwYL_}r*LDroEVmmX8p;9?}<`PC?qM^Ae zc50ml2^=kdwryP?Zj8(pE>$HJ9rSw8pr6hQG zxugjaa`banW;N3ui7nRcMe@!9ljiDCQ1icOC@ykV9;%Sv#jK2UAw8-b^;E~dXRoEGUPq6H6m#Q%IWUHp+381lE`vA54y2g?3g^kWh9J ziE17aXVKuS66~rlIoMX350UcHA~TJ8X@><4uLrpf`D>bA&+4$V#*90nd^_fMVf)KR z;x@hP6ezYI^|$DEkHZhbB`1onbsmC}9&!*-as_HPJgtXtvZGwtKkFmK`aJyHmq&Eg zDyv@$7{5rby-X3?GFP;7E(*dGIguWELruxr++6wicaUV~Gwe?{-BRML_ZqSn>X)Yr z&y*H8{#sDdHxG8Kho)cu_}{WyNN>@ViE1@?=d`F}c!+b}4YDU1VlnD)VKhL^E0ugl z|1s##H#yo0)vpTD|2^ih9&J9<$D?E8KV5#|i{2766pjAa{PbYht7_C5KJlZzzxsLS zUdC8I4>=0%j|!#s)uuX?ng>vQCzqiY){m+8>fa)KeE>5e41jr=YmvS~h znJux3?1dM3`3V)?M~8mpj8x;B3&ni*@*Ff{$>h=mhi|0vhNe7-92uSr*PP#!h5SIP zk!a8@e|H!dPrd)c5S9D3-}*{->dZHttB_`(ee(Y6b7b>P$=EQ6moDpR6Q>dtV{-Vp zIs}2!T(fFrX@n1d6IiEdVfQp4&t^BunPWl6(bFxTme}Qn%3A!NqL-f}mKbo5fJFo4>%r{qUm53=rGNkcU7GYsyVR2*n0nR)~_IFcO zpuS^P$G!xxj)e_Cn#t8BBJKR{0p##oVv`=eck+q$*Eq#=zeuotM0+k~>X)*4GL?&c zXt~p6!DuPwg^}mh<&1Tmz;zp^-cKe`V80CXb8OsLy>MeOTd+0}THwJIN`XYOX&(+> z87=crIDYw2bKz8dnF8H@!U} zQ~T$Hmqt0ID2Y_}?VqxSJjAT12YJ1PoZ>|*7ob5?c!LGj+8TS>@s@G43P-+&+#!fF z>}LDq23d)0xu-sPJH^v2mrz?n=DaypdiHS5>}*!@KYR7)@6=kjILgr2AHmLlHJXo;5T+K7FbUVy+a97aSg}Lua^=qr+Yf%s~c6z0c zhwAPUq&xFn@9@{enqCne$22cBKr*YMzJ0zSr~WcWt_Ak;6IW*}bX-nnsV&QW>}LEv?D;My=|y~O z7FU0$oAv7IT%mrxn)$~chAFSP_>|iraVW&%#o(p=7v|c>e7>o3x(jx(fh8sxYnwdk z3;Ry_b=E^?IqLK=jFp7!>+;*XkU9A!oIMj5c%aMB#AkVF51v)` zo{&MVjNTXgj=uSj$1S~^dA_P={v(pQrE5*Ien$@40vk)tdbzmW4BSo%Yz$H@@OY>| zYB{-o~E z$NEN9K5RLr&PRW`s<~WH3BO0=#}jM!F)QcDIa&Ot_$*KQ<@Jb5>;6%7t;27s&$m0J zw3y%3f17FPt-2cpvCNu~n#AQk>^-Xm-9~KdDmaLv#+}DwOPx@Cv+h5-kG+JrAo|ng zRchta`?%67Q->gRw}#4VTxEh^Oi*n@4Q58txa@bvGZPB+Wa&B)D#h~oL1GI(X^jE( z*BfFw{wY}QV=pyE%@-%vgA%4`sx}8@Zk9_(p+<;=$j_Ie?)SWf`#sY??XjrIthn?E zGCe{dDE3(tu(Zg|Q$kQ?l9jxFe0};J^k3B6!QTNxzlfQ$^d>ah)SB zb!K7g%p%8Bn3&rcA64ybLgtxDi|Jf!ZwXxSGbPs@-_qE?D zd*T!S;e=lhDI678b5bXW92+Aa9tOA7VjvG&|4zUY>(S~Y=J%t)T^B`>B<<(o zen-n*T!(_E2AN`=Z#u(VRT9NQ*IZKMN%tz9jBeNr`L)-jb$U z4bDD*-5HUgJPZ`CZIhvlV$o0%0g<7YY-+iOARU_VM$>~r$0q!+8c#sgk~L%q$O?AY zI9oa$E0#Zy`YUIg8$-K(S(Y))m6w|fTz&2XITBrZ6OkET9;1p`s1zms;8$D&b%g>lzgrp9 zyq>H)MC+H^<36r7oa1t%21<#Xf<}b8t#+`+)6l3;>?O0~XkB8ZZS%_A#ZL!kzkXv} zh*in7OtzXxL-MI0SLCUl>W^5|%ALhwHA8$A5d#z>Xsa@;~)(Kye$@Fi;|S;ZP1qfqwbt;l3aBQ_hoZ z<=q2`X$5|AsFf#g=fR|m%Kv3+QJ%>NNdCznat8Cy&x$6swNubqTYoB`TyY=v%bxS+ zJMf<+Cg_UgNG>j<&UJ?KxPF8JeiHSFzJll+3qNk?XzDWxvhPOS@J3RT8Xe1up&XBu zgQdCe!M<-Ai2N*FD`34Z!pb69vR%eITqAXM^KL-mflX+TfSIl977Xz=V5!5-cFaA; zwX5OtCA+7qkos9M z{MGY!f~>2vQ=PqbkqdS$SENIK(}R6Z^PfkeAg?98MXcA;hodh{xo!2124+Z&uD#C> zK=$AkdAI)<(~XeTA$f~{%r=u4am#KLCy4VlL6Du7mNeXLn3s8@r7s{n{DrVV|HX^I z8*XVBy$M(wc%PvoNrA<#Eg3^w-}9W@XQ;B&MiUb+&V5fCQVQ3I9Gp2YM)#xnh;`-b z&~HYL z*|mfnp9SIdhH;Y$N^$hvJ}eZki%9=+c!W;$eox8##M;E?Ic`jINrCgM@G<9!$NZ0D ztX@)!D(n*(9E2-}f8^lIN--7p5t>I=glQyw2TtVlxXW;SE@Gm7mfClmMP1Mt>P=jQ z3UpTr-q|y8Ax**t8V1C&EOS5-cAt)vQXo0W=cG|k;)Jf_KZW5Bb)Ka&h6e9)NvU3r z-|gCEjk7uostwa2ODLLM$?n~JHCZ#{5xapcVOp8^weS>&S6eTeoXAAct@@efwREAv z9NEaq$NSpOby!tY9_>l^{LacTDZQR!=-=b=&@m8{;_}1)?&f)VmawPUU2*9$)+!`xdCEc>`e0r~3?9jY&i}Bim9S+dKH<;p4{p6TlP9oH45cIl zlhUfcKysys#sn?fcPJ}iJP?|7#8UQ&SY5C2Ykh4WX6!u9W+X|Fu1pYkR{F|pu3>x9 z2d_uaQ9B+fz2Id(`~9S8q!%Q&TriII>r`pfOJ_z|*00QU-5ScrPxdU|RKN4ouRgdl z{W1W_ECasgy~lqY6z_+A=jyiYG86od>UV7jCI4*>e~hG24nW$B8vTxovn`RfmdB`X zT78Y?$aldihomk2+O39}sU+J6;&rLpIn~aUUn)vkh0y)fTS$X*{*dM6rZ4@$^6`~7 z@Yw=ji%vM6As!{!0-lmuoRdG2*wWVKT zZ7QHS3Q9of76@02Kmo5%vDHag_Z5(CEql_9v!arn^qcv@@A;{824^%^=oA>;z$W^x zFY3$x`=Z#cycMj1@)rLfLiX{8Z|CGGTj_sD<9`VcM)1%LK(}P>A)oN?92W{9>Gn<2 z`<&ra8vW8QRu%b2p-7{vI{MWdJx93mzWs02su;UIetO<1u#io2#krq9oTcvbNt7yf zrOumM8c}-JHIUqUP;klT6sn+tdnq=fxie1dO3LcE3n~oKMqBWRL~Wq3zb12aF`Xs%@@E*2JW2!S^?R+e$D6#E|FiJ-9BJ=#~#QPwfHGy*ayc(wIo%RJ? z=HTTJXvO`ie8PZA)m2#YJXd;cMOsJGhKxSuJ-xcv{7eylz-@XUP_H^KFetgNn{E8k z6bSY)&zN%x_sgw_BGwuxp0x1&{5gvFl<6POSfpK++I8wVwNq>~blsv&Lh8Q1hZMCl z&@j5ARf5k#VcB!Wv^OK^eJg&bL5Wg-?%(57v4gjeY#U{a9G5Stb<@E4T&80Ai_IWR z2ZNO-n}$d=O+RDCiNL;_gSg%O^Om;xw$L?X=_2!o#veEB!6L15V?5qL;iX&8DRzN} zfq&j?6p5Nc-#!h-bMe+uW`b~eI8NnoMWwpVyn!HCN?9dG1q6i*+~97ypOFDnwi5LosnT&W}j0SJ?sQ?c4wuqA*OZQ8%R^3)K7CX+P0&oDe%%0)7_8fqB-BsV^uS* z`J9U8%35{;vu%0ov@AEmGKK^T7i{gC&Q_cWMzYal{k!pRK=GxN;CH;bzBUNPt(nNk zW+M!%-GSr4X_I3U67+r0j);$8Mg@u40k6bAVEdGrFy9VxK9XD%nyKKk4;C--d`xxy zg8y%)B|Z*DkYbd~XoJ`$w_TXIK}#G; z9hkI#`AmU5+pnLS?l3ePj27Bx$FmLJgV%6CtBXrrj;SUb5)o#^fNvmJGfwTz08R9N zFM|u`BIaK|T{EK^+USbDK-&MBEt>S8=>U`Orq|O3F~jb)o!jnq3Zu23`ii8r+`dV2 z4DU7p`7P@j52Zg4+=sS?1_CJxC{Ktq%tb7^j75H^^kA9#!wNF|tD+F=7_hIhSBW{Y zsA#Bc3Lvh4>%DyI@ulkay$#*B zwTK&HWAP=l?4r|^AGsgUfH@`5qQJL592MPaFyb+suxVDQje`BY#v8lM&r@`pqC~+$ zUQC7DC5(A=0B`dd;y4dg+s!rp9|vPE*_E1bNU}lkHbWERN_n9Zd{%mD@EH=i;g46g>LcWJ{c6SAX3o4|3y=s6_gnZJQw|8YAI zcIfl>#jwqABqPL26q-}MjRC=ECcsQgQd=OzY#kwiAAssVJ=ya|b68iRNrJ#Z303u+ zHW7fd->4fW3vhq5?TR-ku%M+$5 zz@Ku!+c$)vjoW~Xl{W%jBQm?`{nw-zB+alQDbjpnlK&5JSY-HkK!7}>T*fBa{;P5j zjKFXaxe+qr*){`D{@Zu+KOrWA5it7W7W2PgBddfxotNFh=6@v_Ac&6yWmB@)5=n+a z7QssdFpx}W5yqV%fAN%$5SdqpYAg*kP%B}QZqrG6Y|UAQ!i9`qJjn`g{s5 z#!ULTyuY?%HxQa=Em^|GR+CWzGcjZhZW7jILfDU0vkT|` zIy=sA4T+Ld|d%aPjio$FfbS zKm^t>#E`+b9X29jaFMeGOl)DyC<(SBBTRam0UriF43h{v{CQxLAd7@x}KMx1F-H2|JZYcoM0=#)`J&E6m?JL$9M0Ii;_Eh;(VIf?gC04E?Guz%U+a;xYj4vM|I{zh3O zvBSi)x6AVJ4yas()GGLj1%t#8;-iTk0)dW{{w6C|-oz(xjk`E#U>EutzypuL8%wH= zK#im8-l$c3%u;(-7<62zezkkI4Ok%}_Ku{iPxxQOwvqXNB6CKvteghlXv)H`oMf6E zP`JdzxYtXt`cp&>o83ZDbbxjcL`Xy>(p%VnW;~3^IE8%y7K%`|SP%vBsIPv}zH~Qu#ACYWS;#j#r5-jnXDGL%9%NJE)X)OkuHH zt>7P3b$vf_zt&+7n3G;*)1UMgU)tmzwL6Jt9)&}tr4wLs&6C)xw=ZJkeJ-~%pq_iS zv>a-(2a3(6czd-pQ!w(O>X17ZpH;ZR1?K!=cH&oV+at>}_ zs8Z3WwIH@2{=e6iJF==PmKW1uG1EA169jvMyj8ZPZ-0)4_|)wHW{ZDkw}!5*Hc z^`V2pp*qKSC*EN?{b%AKS&fP^(GaY0stRh&^ff46EQ5lp;ZUng{@~Js4%=n{hpC^s zjxU7!uR@V6bjq!JeL(crpa!)CW} zAO#a)lv_iqOXKo<1Bxw)>Gjg=!*@2tYO-{szJc5={cYOK4lvPsvdyHR_XzJ)#*0DG1!l zGc%>2&cDS% z4f)*-uy>*UI@pC#`y{J(Jf0Y^S2{H1rj6}pwr52Sp>bQf@i}jc55>ET)2hyMUJjkQ z#+TO#&Cx=}pbC#)1JUjyFI!hf4N;uLABE_>~h7yNY6^tq)J#g_DomS)j`9!uyVKOJ<>eqcf>0LCXhZ&Cj$S^Qk#T7E**t6*p-bZsOlOFJ`7 zHT!stoO*JwMsZDFfKC{69eOg{VA%Si+Xz}D%33&7Xi6S|D*EI0Wf#sSL#!00L^#E= z8@D?KHd1YZ-@}t>18np=xGMh~#VrPG^a`C;T!XNrnUb#-h0r4^2K;RTUDvx7zh%`! zJ$6M?sqxoyP{LSi0DSI6GfFSR?<*KPPE?9kem6`kpz<|rLFXRl@Px80d(}pDGJWDvcU0#4%6^A#xs8!c!^RI)GXSwG+O<;&a|7(e>lThE!Wk^P6QPFZ) zoMlnLU7Nqp!9uq>jNwz##gaDgioH^W;E>TAGP`5*{|1<4ww^LeuajIbIImW_@4_hW zv5W3^YNs45rf9)I9tia)*M!;=_hEameMg&n4ndQa$>n-HYHb=d1guFKBKTZVcvL^# z0b4G|ti)|P(Xe5z$;2CL7YE&s4)t^{9FefRHSH<-dB+awo7b*fQuam4{-7uxOj&`4 z)+-%~!2S$A_c&aLd7w|`JLjX=K%T1;KJV-|#rQVl-VR8#+P;1;D-4sOZkXc5+)h$) zr+U?+a>p_?HJoRf(nR@4v?^D?3`b?q&ZpH1bxbo5dwD$_zbaCnGEuF@d9EX1?722- zH;dE#Ol<9?-O*58i%-*K?4C|=mA=p1t{_WWX^0Xq6Iq`4JY8jq4QDw2J`bY!O86zI zB8DA(E6SUL_hNzVf7Jaqm+b4Y+63lr+&oM3z1}Q!!KYozE5;I_(EkT(sNXj*B_ox$ z2P=8MWmAx70}0NUHc|Jl^<058D6Ax>BiKi;fo)rd*}fZ>_&}z>8DA$AJIs3u>VTZ(d!GGK%--`YtQ0=w&83Ur&&+~O0-6VM=YZotV9PuD_LQ^W z5D|T$`)`huo3=0%1pN{CLq4roenA~cK16DeA1mxTliY-b$O4n~dte%>jD9E=&mMk6 zkn4)G1HH5DO~UoRL_T7i0feWBpTfje0tFub#hh>RHcPG`F@Lr#a-Xo>T*m`%26HY~ zdyhBe=iw-taz~tw)vob}+NL5;-0w+IVBe}KlJNEQLG+j5d9@pO<%BE&+GVJ%*NccF z-0tpH&>(I>Hy3jfb4h|H+=-p)xEhotcprt_?O;i#B_%9c)~@@hL1 zjG#mAZU_Usz_|+kN?C~FYHk3}o%Z)%wc=E=G`_w8gHNp%hhhUBoXZG<((4NkhWF0c zLAmiLGD+Yf6D8Sw`sv+l)ey5XQmoI?=(HTW4XO{Zn8HDU~gO{%1HSE0+Gfj8V#{%|HyD(j`P_4CAj35w@;2d>ocPt9@@QA9b&@ zATcA;v{f-9_Ijm=dbXARVSa<_SU<97op2dwakuwVI0_v?VV&x9l-+imp8dq`E#W~Q z4ZUCkO4IK(zqhI2%8Cl)J0Nw@uqx=BF@CTvTP|djYu-&H_`Dg%EOlF+gY|)TFS4x% zVn`|IqiBvx{v3fqhfqOG4m1DbnRUBReDevd$gx*a%3A8m_*YiX&eIC=6SUr%873;2$^(}xRthCNw_S^KOI4w-sEKimNl)7S}rHy6$ra~`p z3FHovyWU&6%BHrqLK7!A?{>0FS0^MKyU30*D0QbB3eq zf*RsVVsUo;_4Uy*4e7=W?(G@H@@Iq}KqPE{>^tll=y(E#)gew}p8VBUAAGlz;uf?z zHg9}I=GLa}bO?l2gVT829e()Lkc(J^V3&_5)RATe2sCY_yyYbG@_jyz0jSUSx z<4M~2BC>(JM+5H3AG;d=T|73g&~B_vcRciTnQ5?+oN#oY=mF=_0zs(6k<_LWXR5Z4 zo7Fu4eB@g17q54wiXkp=*oQ!Us%+NF&V&NR`~f^4yC3CIc04_(9oSzJ9zNa__T6zj ze+Y!U@_=!Onub8W*nX?AYn39yX0!iv$Er$iS%po&{G;Iga3h5A_rb=Akw5`lyU~_c zppOI{!CuMgOErhCd)HF%8Vhm9UkDxJ(nvoY3N>{4qI>25yRs0Nt{fy}sha~Wo8SF1 zYtKv?L~%>z!VSe+I{Nyi2$%nB50^+uFKGx#la^w#RTk-fxHF+G;HfAnYO)GaJ|*~$ z4@_0?)cjB;xxx22_G}AgG^MPboGnDbPV>yAgEDocH2mISPE%hY-v8ObKKq)MXM=D> za+goOM{c@I_eChYdJEbCq$SLv+?~B3+G;^pQsv3TNoT)j-LZy7u zO5UqlunYykpIpkes=7wPKHXm>V?9uvv`6u6TiB!U0BsC=l2-QFIeH?c%2SIFCt!7z zR!}dq4uV`1&T+Zj2FS9@ zZZabY3i2+?lTsKUpoYbnk?DNV&=SuGV2cABa6%p3)rBrR_*L0FYnOVv_>s-(!ho7e zyV8U;TxF{Hjw+wsFF(1NlBm^3Q;~wGcLrz#^Z=Nq#^Uv?$;*CHu~@?$j4WmA?q&NC`0hP8K|F{z%3rI*Q- zShLKx^1q(${aPqe%DeiO=wu1)P)4&hXL*`Im9)n}p6WSW;cUS!r?kNAM$MuFj*D8L zRSykDdRLoq$RGReezMcV@VrE5;K>7*s*XN8qS$)EtgAp2{8Icwz22zzIm}OQ?oWRA zjbUt9Z->An!1ZP9u^aKfN> z8L|u5DS>IIoGGSX+UIqMKPIfd6f35gY05tQMbUCH+0G@b?M2UP6cqWLv{;^>WWStL zUX+lDjns$kE4ss*w6g+Q7hX!1aoc^)T1$c}-iKYBCQk{`s4RgHh{ubj1$t#KbXDcl z?+n#PBif#Rik=H8is=GgY{LsBfMj1On^SGm--(E4DAIK&(l9f_y3pfigl+a${N9JF z0Q>>R`8?2>7sSIsSv&AXDwYMTS8Eg#NVPMdU12z){X&l0DnLOkgqsmfkHUZb`jvkF z$ERf`P(E)5iP)OBJL7b(rL$n?k2(WqDD{j;t%svq|IbO8a$TvlJy;RUyz@r(jS-Yr zi#2X!{>#gBnARwx+Ynmx8pG{o>r(Rbt4{+WVSn*rRC^F?_x|*}@j%^-*#>B~VA@OK zr|(4SED)SHW%6{8Q+ehf+9vkgy>C%7Bh700_w?_KwxkTf#VBXpUwMs>^WRAnQL%R+ z$^YB^!MO|7XE@rKe*vL8gx3H+P zhi`ZKlV~6^$ezgV&8$3}9hkS%d*c>Q5h5B)>OJr|Jqv5{rX8PB6VBELCJ~g{tvxjew<%;|XXO*6X@QX}l+ z>+M-n;8hR<*k)-ItT!=$W&zm5ZfpI$Tf30jC-#|`&F3P>N?Uu!NB&aLUV;wf`lLgA za|QcA-LNTQUHaSAYXXy~GSZB10+;RqM0HED{=sjeS^t5%gIMwpq8$;X~seq*Gy`0Et5fv>k=R(y2lCUi%^NKZ+VSN50dNDlC8 zGc~wmw}BEUkVS%e9RJQ@JB^?t)WEKte1?1L>sj!erqw(V*&^JnwH!vAy&N%HZmbBT zlAN=g$=@!wo#0YBguZ@j>p2H(A030-_Lc6y^}|wwdPmteb{{+IOEV{L7|c2Cz@5XgyQyR+APnWMNUmqnd-7yoSl}qjSVhwxHu&dR%rd7$Yy4AXxKb&f`x_Y#P zf1sn|^?0R)MkPL^_|lGT4c?(sJL?YIp8X7h<{_;hD?C0j5blD7*0>WzHRSLoBC_@V zsc1_Q4c6rYyI>b9@7scyV?T5zKIW9_`Ww(K_yjlrK1nl&;k{cJ&L(GF_6_D8 z+TLV*{ry@`KrsIat*K7HbU2978oV_j}kb5vy9g0Eg2Fd=Go>Dm@8Y%OI6@m}~-?46(>_sg3HMBxsg zhHjUf-PV@Vz)D7|$lM5Yn3_v7c;4l7v=b(PWN-nk z@?6s(;6@81gEl~Mkre=S)Gtr<5%2f1QeTVc;tKSK*f$D}{M`=RG4ZZ?d^cCW@POz1_> zOTBH0VQ^C0l#~$v=QRJ`V37el={;MfXH7jrcFk-W#Te-;r+TkHY(RDcjhMF3^D!(6 zz@98MosHj@#G9Y?VL@$sx1zAs*$Y=fitr5)jzQdg8~_AX18ljkSO6mHgB{g^QIUV$ z?-QrU=+^*=iNQAgXn>8IMTq$m5@2FQ67}F)?88j<7DeGh!=G=dEU?vQo4`!P=zAS< zKPBUS*;{0xQE+syWO8Bd`kz}xOYR+g2?+xYov^8~QT7nDvYs81gi6i`&X@KV|IIlp zg4OtlqL;!}r zIl#zu{Si`)C$<0jVu>?_;D{GXPTr8l^#*}`157LTIeL(28bHW5O$>VU3Muv}|35qO zgCvuAf@$bMLR*{w<$y@tzwv?(DY1qmCGMut4BiFmdv{a(Vs7h}e*mPl%I*vu)9*vf zbUnpQk1-tVHh~&Cj*)Ul#0ST${V_VSzphFTw>RwY&xY`NsGNBW3B+8#nmh6Bq8?>q z0PJ{Q-!3=R?L7vr`wrkG;rbbnE{r*#Mk_TBAuCcG%Wi~O1QwBcZVSc}e~i8N0oD{A zTgefeXIeX0%8P*uUpx?WPz7vkQMB&dslQHz)H|9O2}v}oJtT|%P3)Z+ChhSboX#uN zoc`OtXyKWXjzJk%&4p`sJ7B6Yd43(B?3HiSIobjG&R;jbu@FISBuW*@$xWaje@$Rk+^<%p^C0V%qb&r)!eI!S^ZOvb#xTFb?lNdrg zg{+q7A1CoiCeax+D(OyIo(nMG?DNxv96%zMxDOovd`GYgm~JmGe#xMDmS3$!Z~8 z(|>K^32!+ZWj4%LfM38o3nke#=e35|{^R;+t#AyZ)w4Xa!}fWivU|`&F zh^aczN(g}Ff6mf%n?uvGon4}6=xy+#lv8#WW{St)lQMn)_I2=Bqk&qiJ6#?D)&RM<;$L%d#0kJqg!lmn{4KKGxn~TZ13%_k2_d0w9sUHw9dt!)ueTMw7o3KalK)mLaa(3KzprBSRsb$Smv%O|m>=b;7GsN~e$v?;=a zXU})U`@Yo+D6%_Xk*l}u{)))B=tHz7Oh6aWs%KE?w#~_!Q>a|<;MvK4_Chu0n~I{K zQ4e#8^-57c&*`%lK942`lep+1_l@kqsK$W*HIkEZ8a3Jwb2YZ}r*_L^U%NR9w#&MZ zQ^x2JyA2Y;+dV4s=$(}qU1xS_xlWuotTCuuPGBVpxJ42+turwP2;?0oNqgrta)<(Q zkb~rDczjFLBWH*KVnAZk8v2}nZ18!1Irym2YyhJBw6~Nd>$v-M!uk(QVr^eyEmKTgQEl)kE&)}upJm^P zgohnghxwjf%313?7cZBrluilD0z1&QC&+Z?!Hak5I4h-7Z@o={EvAgZ8UmFsl377c z(BOeKHzv3#!!vBdR^6eA>9+0fcS@@X0a@b)L(##F#KunWSK^s34$-^3FcsEio`U+1 zV}E`F79bV3R^x*^WEZ_sJk$o|)-~PU|?``A*{Uxff+%JT(vs4pQMS>vr3_=bZ2$o~E&McDH2X zF?2AZbhS6-R`WigFZGi(ALL7)yc`O^Hc=}nF&0MwzB?4}L zIpCa@U*uHxI(;ctzIPW}4UGe%QPB?b>mt0XrGlxA^D1}FVfX`bQxY26%02`Rg{3U#6#t*f){dky|Iym_g6?Mru_n>iP!M&t$jN!nU#?<1gw`_ zhC*ES-%F$wr-eJozmJ9OAN~^ZJlI1h`<##cuh2A{cn=$PL7Ye#ZVZR8?H4hAe|j1+ zZ$hh%rL(eJT|(Ts-47zvbF}u4hnM)@HzX-k%YANa#0)@lxS52ZW1R`9%C1`JEFkm&$T1G?!ACMPkXj z?qrGcV|m9v+DH5|ZN{pMfsDtmb>y_2{9$~}$`{za#=NX;3;iTrr-3>*zTYW=h#xFo z6_0D6=ZrVt)gwCYD@CHZh9ny9h{?YWJ_;{Yeed0&>i|d5DhNm#23<>R@BWitc$*Wy ziWYf2L@zbdT-+a2YdC8O%xAAzb_}0=I?%OWZThUnzj@C>W0UQvJTUXK@MbQIES(bu z#weU`Iz;ULL?6BAJV>tAE1||((^NPfX54l*sK)518ED4u%XYSvDP~MX3609pQ~o1;%(2aD}B!$%&*ypC(bIJ zlsXsv0g-ZWgdDNZjR)hVDVo=7`I&M2Bx3Zi-6M-By8ToZlS(wq`DH05PPC0!*)Ee zR{8K2Xj0g_VLMEBB-0-nR<%09;$IBISYdOB^Gz5S1`gj4BXyL2hrF5Bz)CjdGiD58 z!*{fmGy(Q2LW7A~#T#Z}mId^tf^U1DpJbtbT?CXE#`&xXa54@u; z^rgp%K7^c90#0054dFAZ`Hm#-)?GV1VTd83_#of$!L$kP>d@yi#K_*?QyK&!)elCd zp${z?1{>ZUVl9lJ`(I}M_S%woRv5I)sTS$!vZkA|--&r9R?JD9P>A|g@>FaHkFdg#3&YGWv@S%o;y8hH1!^kGG| zw-xr@vF!qb!dt5Q;wO|hQSPnCl=&qDkTOL>TZuvAxx9yVeu=c>sIXMu1n~K_rowbf z3@)0R)s$9+@7OO4aJYx_-J7wA!zqJH(c7xb5W4j)!~LQQvjnqRHDI2VW59Zq31fN;h5dX?rTUC*m!b0hn~h=<8|EgB zGf_%}hTcE}gKl#qo7Khp^{KuzHwG)+ouStR%D3zN99%wbpolD-D!q=6X5k;V@|t%J z6GeTZ>pIW)CcJr6iih2|WbD2L#S6bWhAVAYv0Ku)Ce@go z6^oDpaV5VJR27otAODDVDc@2N~Nms(qv2J4Q9**8liiI@A5bLk%AB>>Pt>E zj+~ZW2XWR(?dkEG?-X8iWh$j$EI^Iy*XeopPm+5JdwDk)O9mNXvxios7O;SbD)uI% z1%%Q3*X4cu^Uc-SSM+Z=utuU+srJQ>1TytUHCQDT@>i+t6h_cHxBBSdp^nDhyGQh$ zKg+R>*EE=B2{H_8pr1`vD|hwW8-*p$Bs2IXWDal}F{~TH#l~NW+k|%!4Sj^zZYuf{ zQnkRChD&>n8;~wj>XsJWB$dh^&d#hPw00j&! zZ2Sj`EN5DSbHNJy85vYdBlNK08xVxpe0aFIri>M1YSaXXiA~kv&JeARabKUN36*dV zWWYBJwb~>@J0{Pu%HRnRr6s#pl8O-%_0_PEs2IkxwXFc=Fbmic z!AwS_Rbi;aZRQD+$sYk#dsv%LPsVg9(symMnZ5c0%r)*+)L`{2oMdXlYM5sMJ_vek zKq$2L7%Nshdp!gv`~D(X%w6w4U(c4Nm?8i3B$G^Zs@i$%b4`l4i46k1x3J)~qV_|Q zzXRmOSI=9j2&njbE?njO;Q=h}RSO>IJ{Ya0u2~1g_r-uQ72g5Zr18_`>CZQJD&2Rj zi=&OpW+FEws7BBLC}EKroGc$}V9N_YNq}B}{uWQX_scTN?(%+zHZ!e{y6pili7W%f z(eU`V&UQJxYw+l03fl{VMOlzWIJZF5H;xNIDRTDL(_qJxC~OF{3nb%J%~JlDKH{h!Dd*?HiYw^WgA!En-cdH>J5V1P1KG)Lmn(V#}+6JXV8T zn;?5aJ3eykRTF#i2dqeRIYr{ha1{QXuIIfEi&=Uc7=l6VR~uLiO`06;phFRE+VAN2 zpHK+94hRzMvJajVDe7XlGQ}^#as!|LWW!z!iVyG!r+J0cetY`=@k8OSMflVYKM!W; z31`TdU%-c7>?l10 zX{5+$c-v;m|zaY#LBbjdKFWW@bazgpG)3b>XXa^-}*E zQ2C(-PUxfU@8${R2Qm+%u0!;3>12>L_6u=wz&@O{_W1NCiu~`t?k2A{!|x>x=ZGKt z$4in*4FA2PiiFc-EdSw>9uVI&!Y+xW^ZxX^|8z<3aRN1eFA2l^@Z*2Dq|8g+2EUgC zlh=j*<0Z)^hWuXAP{K(v*8g-#BsUFzFKK{tI^sWFQa{edpCujPKP>xCm&E1m@q0;K zIrowO@sbp2t+C&3v1g1@+mTtD|Ozx2eZMv^`7xUGN$U3qY6;(zn~lwl;d>fOn~~E4l8?VD3YoNaSowq*t}dvU{45PiW#GG0;|Q zZ_E}1^R}0*-H@AfSNjj}gl!%0e$!0eH{l81d`GdZ7}NK2KH==xGwlAE2Z&^;cgrpH zsd!$@jBFZdFzOv2E;P$I+g};8z=-awT zD#xmEnLFWjtzs+hAB_K@5;g>`i}Nt1coxI&$m6xfw%;RzWiLdG@J#Dq-h#@N%&ZHm zp>~}t2_IF4TnfHuzYizm#p2*MnNAW=FILtDcG)T47PP8nN3HW3kbV|j_f*X^hNXm)X;9RgEeSqU#NZjGe zAy{ohLeVb{;ZndElixQrBnCd;TJqx?x&pi~ruLe6p^uhS=YS>;zyJK|U|I+3SS9BQ zkL$+rO!M<_Y)BdI{haYqp_M=*VxK4F!pAVfe4Ij!*iq(XMXg(+t3JRkgv_VR@#Y4= z=aQap!>&<;mKRQW_>J;apR0BsEiYp~obO1zIlxQ z3)sgSB;SU$15S`uc^+)3SGjijhTY)99t9a)B3UZP`;)G_zLP=16`ZaQc!W)5@pdQl z|MkR*l1Ld_;s(DcabSNqjl{Iqyxe9rr^lgG`0A-;RM-V6WiSJuq#n2N9cSy!PQzR> z&nRQ*QrJ90+UL(`UcOi(o%O~VoD(>caNT}v%2?fuOY7kwI0Mg!1mKS_?1~{mBW9F= zudRmFYmhB#BGTBy$OujnKYtEHdA;{U+;xnv>-e9S=K_yn-9wr3feCYwyjaceorBE$ z#GM)jVkC*Lj50hAHLz}~XWaYb7Mcwu#K3otLlkKH*d+r`_zCsipR>j4NbV){yzJ6^ zVAcH)7D#&%J{ey`jsxE}0q05RB>>dP;9t~g;<;50I5j(oVO4j*hF-fe%KUG(-yu?Y zi0je?2veTJC!ZoFl{+=TB>I5?E{&=m{EOOWlh*JmIdv`^*h<2azBITmodf^>_Wb|t z0n1pFl;#x4D7V*LXft*@6BsP#7)VFx*EE)<{b{PWK@9&6@S5$`ubXW&EI(m(swK2V zG(8>!mdA+Nb-L)GOPZjqQI3NqXv7hla|u(2mgJ8f(-i>eLS z%14{RA45osjc4QC^$ON%U+*15MI%1+k+Jt*m9IrWV4hdG$_-lnbbZ3KvW+H-573LQ z8>|8ABycjR*7{+6!g=oejXkcOrg;?ZO?kE4pgHQ5sF`- zbejnkx8-jJ%Kj*usxy!SWj|Jb^kl{um0oLySC5>Dm}`N?vlf!U)JDj|Z4+V78QTUr zsTjaG*sqm|dYT<5$cT|bgp))T-Sp60Uy|ALXrIZr*0(yEq;>OFcZpqmNuN=nmaBSZ z_2yLY7@ucUfN@iJV>%Re990+}?UQpYHs31h`NG|;V1~@gICH&LvGfKpvi9B@HW7I) zat|DXi_k{`wxWWqdYY+L=yFWagMu!&2#f4|h4H+f0XPXM!K3UA2i~}P90$)!R(mxP zcunFQW4EC@<5jX)jROV^O;%lM=Vx}%wh&S2rc1$63skEyp@3y@N0B8pfhE*b))=qX z9Y?V}5bcKo11Z3VnQ(nFR$HMQF^p+ecUsT<*Cw6VD$n6Ts{x(T@}LFE`qAZ2cWV{P zqlJM258{0pgJ_$-th&6AF}96s@#4JN-NtR_jJfpq1UulDUJN*oiDf-(($t(~vFJTF zYXr1(yGwia>sHWc5Np2y1i7B{xQ$ijL>KMY^OK&fu%iB3?4Agy_b3?MOi?TNELjm! zj0)#kliHIJW95oS>Zy98Y?sg}&panI9eTApcKo&TO^>7_X!FeX-N=x3ha+V^fn~llIoY7e zA#eGWum9mKRR!bd^RlLBmzS;#cRddr>=)8ZqMm%GZl&MJzF9K7AuUsok4sQKaN(MZ z(M@534VgqBg}%$rwbj3@U93}?N3mLsF`Jp<`X+D{-dDN$V5Rxyjoqsw;dZM9ZkLgZ z`|ONK0U^Ff$m>j zsFt}2b5L!2!#kU3*w1^9k@ZxHzUpz)te7`c=rrDxy;qNC*Tsk`m!mwRc%^v*!gP$} zuLs}nx~aPNZqJ~##_Z)zscp4!%WClu_4!GoHz8BW7K1WMMla^RoethI*@pnHHzs0a z5V75JU5cfM++!+8!=<3jX8n9F*(nN+wi)Yc&*z=OWnP%4O7{J_ifW$R;<=pf5!WU% zVja#aR_OU9=y*A=CK|-Tw8cFR{S)sRle`Ws)NCZ0D*eRTY^8F)%$5qSKaO%*>Yn3L z97iT=4rb++N7}U6PyVR(D6rw=X5j&LKDTT#P&=lseYX}>9gM)G`TF$nAe2m&aAd>} z*7GXyKmBPZZRgjloG%ky_a9_m2TJ*H4e#k>eLj;7g$F%yM%& zjA(xWK=7Zlldogc9nM7cOa$P_5tKK=r@{!lfeSQ8h411VTg4-SHYA;}m-+CY%WPZQ zKH^No1+s;rG1D0mq+LW&SM`;ZeEXe&djBuIfib5E@7A^mp|2$^4Qj0J&-q6~Ep6A( zcgqx*uuk2oSG6~Zz-V)MPpnoX>;PDj5yD{3X?>?Uuh26i_2j);MGCE?j~CK*jKV|F zZz3a3Xr4DU)IhbL)7Wb?yu1$)Dh~+9c*I@~lO9|he)jz|NSZXx>B{M|3K7%eo$bVe<|jjbQh-ld_T+dMg1<#|^oG9ni>0=`_wsJ^f}a_z}l3w!-s zAoGzGcHddA-X^v2rz)zSWuWfsl%@aP-Tyk%7)_%TLVb@;=lIn^NoriSEht z=Ox0uF`p7jxrltj^zywI$$f4w2`~`aJkB$fxpB{GHH~3P#g`f~!KP35t5`cjZ(gZY zB)QZbcNUEIkbf7}%Scm#lPN5cj-O#JDhQX^)AZavMvQqK2kkEx+=<`Mi8LNC(%_Q4 zwXS%4PdmS`aRa(dOyHK7A+)n)xM%nr7cU9t8qc@!XloyPO#Z-^Jl4qwx;q!gYZ=V< zel2AnXHaA2JJA?7h@a@CS7&4VT@Wu~ri`(UF;o2$CsMt?i5ay6&;UcTbn<&*V#{p+>o6$zqNUAH>>&rjYUwVtX! zUS%5i*q!VBDplU0Xi-YR{WkD^!$)ODF&q<$2(vDRvAiW)cg~MNy?u5d$b3A%`>`#8 z|K2J}))th1+50H3`VRmWy12{Unmf#W&(d%$yQ-2b{OO1Z=~|G`GHc^lKL`lvOtYWd5k z=tJ}l+AZD4IOhlcZAORWu~&=fQ@}cyf^_ey@C+d3^$2udo$&jCht5R)3{~>spQ~&_ z-HZ>;9HNDLflxqh?D`z+&(Q=S5eKt@$e2r;=%!tPI=0|8HAc@EkE8tzy*Q@*F(x%rq0;3TkaC27tCPU zLgPE#A9*X_w6+^t)c(a|Y^nIvz7S=7FwNX9^UjE~g?m=@xwfK>#HtQxkx1^l^aCk8 zuhTvX<$H@g)kihB^etNph?eWGZ_T1Q&ByS|4lK&`J)cxEO&5~f)foF3{9!^^uF@}w z_TT$F7L4h$gH~Ssb31jmthqH2DR24nqZTgLxvtd+e6752aL~#9%yubffY&7wZ>{>+ zbEbY}aNDq8E*=*>r<5d0zWrpcfj)14Vy9ZCHux-I@LdB%O2MW4aLrnHHI#}Lr_IaI ztL|;&^bC@kcfPR=uU4Q?5f%Qt9YV5r_TM)I6_xjt+&}5&RLsRcIf_U0B`obthlyb- zZ%} zqo6ws|5KgacgjlIcxH7>TUm zpSHb-#S6*aC=*U(Jgv{IsZzIAroSFSa7%DDD|C-X z>7|Sy!fFB(j!eff3qibk<~ze0*P`&3J0@rgw)+Ioj?A;W5h&+CwlHxFHk3rqmh(Q1 z0v1gyW!IZAOI%lZj6eFb{dWQlLy!JN&r0Zf9ka8t+sJ%Qs+oM79wQ#0+OH4UM4EF# zXC0pKJ=S=Uocz2!^if+m!eA6pjTLx<^Ht zZxy`YO`323jX9<7s=eSMQ$zMP@WqpQJMG)|`YQ&aJJhQ+4)x1CMwbFL<_qqqls~9< zJopKf@8mCJNnZ0im>M{?ayuW8a-+8^GBqnN>$zM^X*_2~A<*&Q(_QE3ckXA*49$H? z-A6clY2LqFXFT+rTCs64e`X6td#6ew?;HrR|8NpI0Bqb2qTpvQD!2sktD0`|+p|r; z=SMtLZMCafE!WJFJ$DgV?!eb*`b@9w@Ks5G$)d|Nn6J(pq86Q80BFa)lrx?UAA@;d zQMMt&k!o>)(3+&t?Ys~pGX|u!o$+{kb`Q@wbFh_Ou}>EC?7}gziJ55brw?HY{PhUOfx<=3IRXV=kEZD9&GttAsfA!+Y~lzoNoU)GBKp~5bxs0~!Mi)A z36*u2s*OVhB|WW1H+YsY(538~aoo1c&#Ui0u$2tcU5fuv@>YGyY2l0F%@Miylc!g= z{qp6W?CZfdeXnXX88P@?iFw4t;Z7}4dmxioP~6AkG(0mG^~`Iln{3_G!h!U>Zd>Sd z_g%*B6zgi039SH#9L=uQ8T(Zzpsew)f#leZJ*J+zVob-?23K#=t zHuczN2R<;5JWLW)RNV^*G#sf&Sk21~8qJV->NaK}{Ag)1`@T42^?i(%ZUb)tUE};W z2wUW!W*{NS$K-=wW7wP|LJ$HK+s}NJeu-;<_ET_Xgo^tw#Jiu3zDTdPD_pyhohe5Z z43<^=r8_pn^GnNcEP8xX)#$7dN#8?(b5vDrj_Sy{K6&(pE0$`;VYUfXj_F794T zHtSB`H=Y`GN3jX(#FYYNJ%A!!q|W)_da&T{6V?4`_h6}AE5MKxh*R0eO%Dy;84r0v z6kj74<(mLe#xN>%kjo)F^X8o$$Q*bN(4W18&ozg?6nORVZr?|GrtZsH@~J!aBjYvS zeZDj;cf1wIMV&>*{Q|#Ve=I+wxt#VYi^oY0SuST@8*mH_sT8Szp*{7(#MeC zRo0XiZ~^*wxe%|kAlUCfwZ|i3yi=riL42LiB0(NEn=xIb@&g2FCOLcIA4@=Oh|5Y9 zhPAwDLI|tvZR-yAI>%^&T;~oLZZs9Og6V!Bk7k?pSO6H#lo{+QoUBY3D%pGmZh zRH9%e3Sw+Jw#7?QD$d7 z?f)|n$w9?G4JOE2d}eVSQKF<$dymy_x4LU1`=RzMJ;pRSJp0yH%tnFeW;13H${6O* zYBT}&cj9thyRBvtF(MkE+d}a`0jh!C-G#KBe}8wWS}u&hsOAX-DI3*w{ujywUS*L+ zjrXCt%fT$y-J`@M{MzImj9JJVFLZ5edeNez%?oXuU&=j{@}r?_-$^j6Lf4TeaB>bn zSDz(+MkF-a^V3B4tRhw1@&xzBpN&ly%U6eh$mql6e*+>z>Xz&yPLUbmiR`cXYDu=c z;;wGWXzCEeCWe*Crs$qc_5@Dh^&gL` zgDi*V?SJaA*WVc{R$LrP?J-HeV)}4p+{gKXucxlSN}*5{A8(v?MkTSKlXSZyK20tw zTxD4pInc84p!IOpRI zJH(vPXptr^!;cUZslI3&{T)}>CUllPAU`Zt_J}7dL+gVX|5Y4Bisa&x3Co0Y&JB4+ z8u!Bqq_^`?UMC?+2rUK$bE$l8kMs6kSS5DHu5U~bp(xm2c(`DK?OzxPhp zgTSx_M%fghydNQ5wDJ^%<9%6CBA$Pj3U+C~|t>a8&h(E_4 z(<7Xy=Wd<3%v;V};M)fCFZh2M3XRnq-|Y_JskZdF%`;4;ntfv;@2jwdzTLWyCHl8E0 zNFENVIcuVwdV8<)bskI7zXqQ8YZk0Uh?0y^iHag(X)%V+mFr}&NtVOz)wnE{2ohxA zewFfotNIm1OTJzh(L;(qQa4gj|FiebV0=`S>laU-@D0m1k?j2fOkr!JyL$Z(K8;o? z;(dxX3$C88sz_5H1`PHY8eZ1F&}HDvn>6+=K8MyZb(FN$(Pj&TH*av4CVPBh#>~_6 zg;{jga#3Ds&&XbVEM2Ur_dv==bn(ig-4;a3vYBYTfp0?Tg`J_if`#GzUyoCkOG|B^ z^j<=K35a6Jvp9{OPf=XgIJ4l^&#toloc`69jQIVFwwjxiRT)(2GL zEE{m#($9>_a{vzh^sHN6!`(o!Tj=rXH~A``V>5E(muhD%9Ipavdt*vk<=Fe93j^_9 z)_S&cP^40BD<1(0?N^~Yn}N-&6p{a&`;4<|UfFE>lHFG;A++s3ykqxFgY|1-dvIR36<~t<-}mGSvyDm=L4$ zxe;pCSHDI5-3tJEq)5<0hfQM#34q9nI1ZRHoJtRO>JiBPUtIQ77m>BT|DFd?ZJ>Qe zTY8#&)ovw~U#=-dt5(tB%&R7YxUmJr@X~DU)ij+DZ)$Am=L_{yny!Rg}E3!+=iiDU5Ke-@$vTEA7tjC9NWeHddK+c z^wyHbIXGVYuWPNj~!BfGIB24+vjVo`?UewW7(;y(kE_=Vcpj>mmBVg2 zrLaH{qfDyCs%k+n`#JYxg9q+$%IQAn=~Pl({oy>9b%(_Iu!%${D>6B`T00%yzO514 zblhrRqvuhX(JKL(yK4^+rXAUy!Cfa?-OT<#_Vga>BzOTg^~}mm$SxNjxObJ#4mnh#Jz1;cO>9?z;K6Md zs^Hv!5c2$rJw0NCv!BWlFzHeEgza5x`>DFh{@0#7kt`TPPKm`x&ACZ!Xo<14{PBwBVzMi@$T+1L@J1?V z3?+l(izw=JYeH51Wn8C8RGN$y+4#R@etGo1vE_NKT?F@7O~^dsz+nGP>*8cKjjczS z05*acgBMFf{(8C_<1Xml-$#ZZHbn(dce7w(pWSELJVMiBCReMECq}>3+=2qFuGxN6H?bmxySk{(F?{UBRkFEIbQPH%7@wZt*p}muUzY?`lE)dmrzU>$&g#i zcbBrCo<{P}P;pP${fRpu32B+68TK`$m>*PmB9~?Jf{J9{xJnRzx1vWH17l<;=>B;`Hsv?GJyy ze}p-8H+PsiUM4uC`M`3Wte_F+=!$klk}-aSNgD@f;WbUuJ{dvEQt?3{uAGefWfGnie6#%BK8!Dp6Io(6?C9UUG~`1T;w}Y_$q#eJbGa0^fEgFi9uB{8(6H$dooA0 z7n3F|=Z$zq4p{6{=d96(H3%$!wtf~<6xU0p(@Y$k)Pwz{2 z-SXRiD#JHJN)!vN-Z2l|4VAU#SjrVxidpGaltN!VYl)FdAGdr|B?V{B{Qo$2EOA+~ zu#+u6HR3&h_&9om#~n!u%!!U69+)&nAGUI@r4UnCI7HQeauV2!+3jaUf*L zbqgLuO5CZ}B1InTtQc`sC@JuKH<~KHGUs$lR(E|9^t1==tH11~2Q}ufsJ|3dQAyBh z>s!mgo}wO6xtPqIqtL6l&_{Yy@7&wyedkVz{wOjHog1a#HcY2zf71R7^dVhE# zOHWy0?f7LRwda?o`G;R_PkvpTQvCPs19w*=}3C+w_3leY_%%R?os54it1HFj(=t|^?agC#U<(JAHHS)D~JBju3L z*TmZXywSHrGeWji{;-QKOrdXobame9qpHLQqEmT>W|`(2NFoG6`4bATP;#%m!Slw5wNi=y%;BaWj)8&(hCSYU|GGAr!D&kD0gys1#BW0PPwxsJOwZ8TL#UYIU0ES0~6*GmmT{@$X{`! z5gMHJgL0kSF|SP%vx=5Wsc*N~O73;Fq)KcZ-4(7?ycXBwuco!vnXMajrD*jBsXKZW zXGU?-^+|Ut_xvOw3!~YhJSDFMVo}a|XJC%QYN&1W*3H~(nS004MjvMGJBU~SZ@~+d zudO5k1I_!zp2}m4kiDj$`i>4!cc2>9t>$4Un2KZ-R-)|YqRD#QZMHB;PAi7@TP1II z-d^EZzLVm-4!q~!!TfPtZS)Hwp&XecP?@ zIj$38x2(1Gat@p#WC2L90n!FOQ4Z5~g8jWgyp!pbdPSn_8#xB4FA&urS2=8uPbh%&I&>3jS4C{t?N zA$qeKEJ7=$Ph%{qkA>QXRID~>?~RcOD}_O^nGrDU~ou@Qi2Q z=lM0J+%@`5E>4xO<~qlt;Vm76Kvb7QtD@;lPz$b>#^N_$d8TfqxK8LocneRj@p#|e!?FJh}+_6;m9gO1>8=qJ6K;O%QG+UE^?Y2wM&FOzreWH;Qv%=2E< ztwaU(cG|qQWVH=f5W1~^dH0#2ld0{J`LMg-?c@1^^#G<(&VtsyzUmtgD>-!WjmC?+ z8_MTG)hB+FVb0OZ=^o)u94h&*A%D^N(5`ERAJ6;u~=6}9%FxXhB7ZmnGT z@ZsIFWOjHo z;2ri3u##Aeu?xmk%6{03QmYspPiBtt@TI9tFf^)F z;OX(~Tefwek@M8o@!Y0LSIbfl>}y#NsD{1~HM{;nv;}s+C_UgXvx+iO=g7+b^0GvD z-r$Hj34+SxcLU3jY*Vcg^_BhSU3nzgE;Xp;4k}o;3lj0@R>WJr9$kI}g4DPxtRCtxNkD)Ve64ND}iw-T^ zL)#xSUhc(clykhkh)hoR;wqR=4QsP9MrcyDLnDn_VIoZ`G^4;qdVcoK5K7IEiz3+@ zv72$H2J6E$TyyTu!cd9X*cIMjo#O0~QrkHheBs6MYtA}SDMYSIc2Rhr*Ey*mJ2Grb zvl-J9C5eu6{`I8(3>D*wpKUW+zl)F1E{?53XyIB47tjte)lWa#^AYUqEW3Iu36v`o z&_bo#^}Li46hT>-Dt)Cz*V7!789H?M>IzZIhKmps3OO-D3T5UVz z9GmjUa`b?y--6NmI4hw;2Zx8vnFH?_;>mf|ORELyIwd;?IR^O&;v4i1Ax1M}->-*u zz}@aN+ySQmmI^6R-bo!tJ+1W>7W8)62~}qWb9SImz0ow(LSey`!)1Fu#&<1cE7`y| z*Q^*-gG)2B^0Xkj`npDYE=c3@T=yp2zgB8ft6eJSl#FpdZQRdADZP2x9`hdJT1a9^ z+FNX@sVw-NhWS(xQ3xoztMnQ3KUI{hHb$7>$@4QN|LED;k;)@b@#u^(6A9mI0F*!b zkRrmr#eT8O8kdFpvnv)>iE$XqemvHQ$r>5fArIZ_%SY+VRMu1D;-Ix9#@w4wklMMN zF3jG$_}c9m-1Q%csuTVu5?|Nof0}_H^A>b?3EZ8HVW-S_UZUXn6M4A0bA~#~q}!Ke zX-k2B=U2CnTHQ`L4*KYjeTUJPY9?oRxK(c_c-8q;oCsZ~Ui&(na}8F$7az60kKuZ+ zWnPwDt32#p8DcWkk!0hq-d&Dzl{cW|7}vuJWYI?bqs3lFe50g8bDM{0P(LYa?0URg zop;|OeC{;S*A7bqotw%hsllY)`uAp40yn@?qF>wQsh6XVcqEp zJ8hbWgFi-%m8Va4ckJlId!A|s+~gHOh?z*X2@6n~UrJD*7S!sG9b^H&fYJ)zB*!m{XrJL{#QLyMWyLG9n*_meO#y{zpJ^10y z(@`QvyJW-)m&;1Dlqx^T{mVMfp8U?p$JVBTtFK;o#(Xb#Gh=OjRIogqz@lye=0|dJ zrRY5Q!j$XH)gQtC>Z5mQoU=8_x2>TL5fqT2py~e zbNaROIcmn5>pWkYCCap42uOBI*jaH;VWPFUG^{c&qobLE+IoN|94&6UGk~pQzY?F% z;)XJIJ7%>zKJxLfy*U+hha3zNxG zTTrb1&Venfj;mkY=VKnA%Aot&7)@%=uC@aQsG;Mxo6tnsIpV%FyPjD!wLrzSOFMLZ z%ULQOFeXQh3^S;fJ=u>hm}JsdjtJ1e>I7~}(@z1$wGnz?X zKx26`*W$AJk@biI_aLRh*cX4AQM#>Vl|86#e+pf>_-yR@Y(}TUf?w>ukC)vYMzpkW zYlOMl_G8jlgX|9!`cvP@u?kL&E~P=t$he{^BTS?Z!dMn#d>D$LkW_Z~7^rMr%JwayAmo<9z)3|z9qi3=P zmUJt4q849ow9G=V*m>w=tX*8_pgVi6u*BC9goV(HjL61m_{Qk+q`#GVzEsY=p(p+$ zVzy^5%u}*h-0avCUkR*tJaWi0?uB6Ruu5>nR7v+-=8{^DlsY!n)0{jxe#0ma_0 zYu89{goC>~h(#sw>7L~G5}-y89SVl5(Pi(?@dvY7Y{lu}Pe}PCa2kDqeq04&tUgmL zX(vBp^#x~wOI-$PK_>y)6XxwGv!$foLLc0*g}mhA{>isWh`2y)Q1QZz>IygYsyUMp zO(cAc*+xC1lBLj2%^-d0!C_yg`RIsKv-M8f?2U^`D0dBqFHiigK^Tyvc2tTD18Nz5 z$BVVWcQw$ONt_L2*D)Z{Rx}>-EQxoV8ar;*SppH1bz#?1sI1$J$Id`ZN_vYhW=(hO z{tJTkxlA%CPTaY2OVqY;H=crL6o=rO0~dc7l7jDRXGJ@Lk77EV3-=N7$~zk2!z zzvUAjs{izvNPcV6)4%I=WB}{O&x#wj_Qx?+<}OVhu<&Yl5I%JZuJ>8wJs7G#MwZ;Q zi(371#a=jfDn4t^w2PZ^xmDWi;gi+ve`2Cq*bP4Sg zy&0(^wbYw?Q16Ay32S$X`~lQ7^8C~v@~vjL4dS-q9ZU{4oQLX3Jr7h>tQI+xyZF{N;$((^UGWLkDoEbPrJrfHNjlgRTQj!lX%({ct?h9Zolz;9Wmpq%)UmieC{vtc%>eY#r@4R=wO)p;v+ujNR}az4Cp^Cv??UrMot_d)kQy2)>~1`kI~*ha!u6dP7Q z-|bda@282fEoqXv9X4-sZHcKq-`=-YYl7gT=Gk4^1C=u<>_htR{&u6`Yht}T+Kli=>8c*cfM}5!Gg)s+LE&3t-<5wNe8Ew6YYNF^#cP}@{ zeKx(6K^e@#dSm#)OK*3XYd3B)FV5EI#0{-+R!h%Sq7tK z_;*JPLPFfw>u6RRx4zxeSRXCoI*}fqd{%bCqAsRzO|_wYsebW-#<#BY8NaL9suOT!d-$TPf+@ORd%WP7(shSwa31nV=jFr-d4IY!t}B~_(!h)dml-1 z@K@w5w3%uA9=-62egonkPCXjfy(Oy|y|hpK`iqfYG)8$j7El%Rr<6}PuT@7m|GCs5 zR`2!c$X%S`^|4Vt+w<(!&*V?|9oWitU(zdXw4O8A^5rLEg zxf_DDLT6p9p;qSMCcCBJ&4EyHk&Y9t*&G~CA(>z_PI5}Rr2LNe^%vjw)tvNsdN|hd zjrc8C;;|ObFK2EQ7F5!lIXCadZ}?q$W4^RW&f6abjj-nuRL4E+U~3GXrBzIuy9DQV zck^J#+u8ESU(*>kPA1-;)!N=)q_;1x{xySR-r^JY3u9ulkW;gI*{}Ac?=w|(msSr= zZ&vsIG5ZSzoB1-%rEh-@Rjtrc&Qm5>gq0l<#DL_gOnecaErqN{5&zt%h>SDpl2 zLE62&zW?euIy!SERBFELF+(|YxRaV$GLmv>q*wH>?LIgJ*A+`!dU?vlWrqwQ|6{VF zU;Ty2Jj);DQHOxyaa_d z;e8Wgc{h&Cs~THA^QP-94?Z0K-jv;l>&%Es?C>{kniUAO--G!#;r7C=Pqla7Ly3|i zig3kYtOjK#LbDmQ7$Jtdg^(Hjal8(tN2^`JSr9{j4(SZnIa#Rn4=(3+O_2ogCzD=?HyHdjR z&rJ>H_BtMpg#MZgQ&ky~K1ShI-iD$jdX3&|Q~SO9KY-1e*VR`Br_Ki}OXY=1C44{u zM2Y|Rd6qy02ulA@GT$n6Bi!-rRChFsq&s)9g??WoHU1>!N{X5F^gSH>>`lgRQ*3+ChVg_9hQy8Bsd&xtKlK2K4 z4a(zN%T<@XHu$u_g1gr9Z-SfuHz)T0gOp+2z{Z%a_o^``&+*kMK;|~ES|;J_3#(My z9%W??dB*J(#;y#Zwr3ADCw^2Fs$!xoS+~&3+GEPZl~8tnRhUrw$N`d7-aG%B{U;?i ztULADMMyIw!59?ASwldgBMI*#IU0<4y`>o>Zyvgnth58AA$}y!vphaz50&fnLoe+k z3FT_Af>$Cr!|G7RwfWwQg6EgRA@}~j=U|Tw*W?~-c=rjVnWQTcDy|H)%3OpB2xYS$ ze*AFGBTa$tDGoIkF9_QU62DN|out?IMJKi1E>$h*sLqAjWGdfo?&j16x+L#6`hdqW zCn2yH&jx=}JbRM(rY$x9xK3)Gn${g2RPDjnl&qRVqo;uOfvUtntE`Vq@qFG+PRJdn zIP}ic@BQ_&>?b@URW!M%$=aoeBfUDFv-Tc=5ao3mLaufK7XH4~tfFPqP!@NpD9eKV z+1a})@>=L&m^zV=eTvW#MT#H4bf}&ulfzHZK3sb(^QlA0Yt@Qh&08#(nOF51UiuP5 z=^Mz7t5AGj%5`hd97?_ohQj~=_$|~1-9HCJDl6j zsNcgp=1zE$>b^uM;?Pb(thbh2m@-zETxiR~fO)QlzZ@LbpSeh02wAZI%^CmsS@+dT z6YX6G0?xP`)&j=kOh_gMY63+))`rhy&i%~WyVRaxTPpeeysg2F)nO>?MW^CJpL~nv z#m$?gI;rYrr)5TJLJwhD)qF}l1qkKQv)@Xn+egDj5(kj9+U2g~7qnCP{ z_3kry$K6Q>5hs#w`7F-0Bs|+3w7v}`md4}zjsm(+w?EHXP7dE>zd%0!(&g&Z zPqEyDwS)YE?=_P0Pc9(BX);1yRqL{YC}tw+UC`b`s)cr6{lv4OV__;}UjI`{70-)- z5^Vd6OQANhIn;&P{imStf*NjB;5yV^pM3kior**r>S6KHFcl(FTWSLFD7$BM50b2a zOx4_`0a-$cY3E5=Dx?D9FDpBu#6RC|PORsCXcu5-s697_zCUWBO(@=G4=kO?lFy*V z&~QL;gzbF;J}}25`g@W|H((u5onHJ`+Mu%C@Mc*}#>GeQ$z4p9Eutr57!(@tKXK}F zAYKZ7o_i+8gyb8`^Azv=3T`6KKkh|&wF$1|a{W8Wr1N{8hLx1Si?wy(?WjmbJ4!io zzp6E{!xsbP8nz7t^Z^4gxg;b7J6~fS{9OpfHxM<*IHsm1e+D4cVaMAc1e!0xXpET^ z83GszRLg;k{~MtoC;l1yPQj^g6M?e;HdoqacNjPh0o>oM41C==;r*BVXG(D)L;wW_ z_ZS1Dfy2Q!T$+S z)HWah|9B4pQDG=I*tUm!KSElV4xR*B+wmE)!yh!njuJ?0cA+;eQmVVKX`=cwr|;}# zB`l*kM53d--w5hl1E5^!%5Hyt3NiM>6I}xOhv9v9Tm6Zhz5!&YKv=r0xpBGIMm;n| zyjseHUIC=!Asv;Mky#Y6EPXeL=vU{^7U@aUARwj|vd}4E z0I5=o?IA{>H;RrxPBP*^!U-^?+Z80VYMqhMsVJdIfo91^W{{r2UB}Z2Dj2AkskdhN znfiAZ6HU~qM4Q}Eny^Z^uv1rGeM>9o32hBWbiJ|iSR6fYM}-;f`Bgk|A;*Y+*m3U( z8zw9>9269xP1r7tE=zM!x+T!YmCu+1hGegBI7px%P^v9~QX`)YI+uu>-fCtSfS-xU zhR=YpW};n*N{ncFV-jiWbw5A^asDQs$^%@;Uu^oTFN`LIZ#wy|NcYehQ9@N6K$s3_ zpVB;ZfqgW)9rti#*MX7H5eS&#^LvApHzE_}@l`cHaDJgJL3-D7)YkqI@-HVSQl7yT6#!z2>`+4+A>e+ZD6kdu2uYZ>8o~P zU#O#e%i1@x5Sn6OtD%hw_o00P+nQh>fT{oP8Utucb)U1+4UyNj_kz2qdg&>NX|xGx zzQ82D@YJQQFZpbJReM?m7IFrM?Hnq^s<{T(SeH{~5M%fhaBa_7%}3Afk!B!>z61>I z(wVGFhA4H!S2dA()oT z9Ti%O-V5RkvC5~Wt-kzdFWH|CA=~Q3AB33-kAXr>4dkX1d2E})qm|orn6^tL-PR-k za2l9MOl!Z;THKzb4UqB4N8LosX(t6Hu39Qu6Z_t!P57nfFl*p!m{soqVKUmpeF7RRS3nksMlQDCS>I(U>aa7fBZY3QWv#yP;9?k@D^^xIcFq_Yos_N19I{wuDZUQJ%2+ z<$<|p12j4ixWLAiv^|>2G$h`D@?hFF{kF};eGY6yzA>1wA0u*d7y|gqP?L&Unt;lJ ztdH`=g|?^d9I=3XYnMP61){G3XoBQ?GoJkz>j?abpQLT}BE9K!giVYAco#;@r%cej z$B3s!Q9<&9%t;TQY-zDCvuUD=Bj36lxRDl9fR)-7l%*carb$fFRmp0mM*50`61u?w z$kwR(5T!7UJX%LsS=@AVIaoD678pJ}#DQrEh-+T1By81R05Zn68yS+AS{0n#V!WUN z5#M1i8uTp09f*)&&rX5F3U|o&&CJcLx$rT6Akbs9*BsH%CeUgIhL|Y5mBEV9#^da` zaNjg27=zdmE7NHJUOr!LLqr))>_AT$=6WxMFAc(yDA*9GB4Hf7vdhN#`5siNdlL8j z6dC@rCH)*h0T=@SpGP!65aEo#hApgB9KYC|g^jAbg&%}TDJ(uQ6XYopusu{L<#HQO zPlh8pODwLB2&lvhLx-K%^ATwbEE{%-GT5q+>_`cg2X*Qa^ySn?V7VY_s2_Z4ErV;o zv^y|~IVQJcR;a4K@E-ngT!$%pTP6HevK8-1+q~os=3GLs&LVFr5LIEtdY+aIlJ{&G?|ows`(+kLU*C1#;~SMxYq9MbaVI{nGcq$Fm0*?iPHY{e_2)94H5! z(4Hmk9Z7^FIjmUa13Wdr#SylPw^%*upWai|QX+bc4M4I>1U!Nl+}1S3 zfof7@Nd~k1mlO@soT8 zB__14YXBM*1ts{C2$MroZQ&AZr!ZS{H-v~R`7TiGd6fTqfC#H33B$CD?%fF@p0l_5 z9MNTZ%@ckEvS|KG;PIX`_}Ppm*AzWahl8U3L+9wyyn5mN<9K#R2PQ`H(??DyIR?|# zB6v$~DuXhyWFlF)E6M);`SPa~W6iczWRjUoDchp0BMjBeD0WF?zK``OsM zUY=Do8U-%|ylDs_^a8>6VSe;Uc9$!TI#4;;p}L27TYx9yfoozIny(c^l$)PlMvTCv zFQ0+ShaKb+i~`6ATt@0@IPx(xa?;$wQ0Ra4AJEwzUq zhCg*_c}(d;`25JiCcY;_F-1HxlBlFl$$ap)J~`c?#dJK47kc1{pa^zNCTKf8wBKqc z*FfK$baCRVREPS{;`xrTYkrP?KmrtZQH9434~9PnCUVm9$oBsp7|2MgemljyC#uDUrFM#f@zza3BKNJ1)Gzl6b*NZ1dPDjJ*HY;y0|tvH^8G=Ak?yj6;|CQn z>2N=kzrSg_3S}5^kd}N$kPPQTM55p`P^C0`2io${9~%r_sox3VAm4?;J$U?yNXT#@ zeE8YWi3;dC$f1Laf0YLHxe~q4*YZd9Gq}g968puQK9nd`AR@-h(ZiVM9&N4ZoVB;83pZKqPbV1V5e91~!>+fVe{~xb=bU9+Os6_i#5pN(+J3Lne%!M1{=oyp z0C9o<3|j2`CJ+GHM*xUkb_dRDhtN6xS~eg2>&K6i$WUO{ zF&WCnfDV2go_~}6G>;{QW;}$?^Hqd)SKs{Z&N_m~!2vLETnZaML{dZFoS;|;eX;L# zHOc!&N*3{G?LvdDZx2d_8&Cww1hXu$`{3Dk&TqXrdZFaY=Fq}cWiE>cd%2)9BQYii zMl>#ihnu&<{@lb?jqE3JgbcaxBX z$-S#55sWW7@t*KcpQ0GxjuQZ8IWQ=%`r>nTs(u*~8PgJZA7|?AHYQ1O0Ym0hVyU$c z(a2}u_6%YUHo=G7yWS%E?Brt>@qYa1?H0sfoemF{h=Xgq(C@6`jLW4>1 zi4+@FgIMT=qKAcFypg+gUuTlpO22bakk&3B0pMgBI(Q1k^TBh$fU11ZMSvJXfxBo< z9I0_M_*kw_eOkB&?>&Gx;H=L8cjh74w^;nU0Er703+XZB9%SyzEWp_iz+J{#dq2X< z8^&1F;AAAb2g96K@N>n5s1i$; z2VF5=NM{oAc)YUltdoq+5E{pR`F4sLk)Z%y%&Q9SIOKy@-Kk1sDpl&-hLI^@t-i-- zwilh!pmDI~Xe1fOxpy;jwtQ8Yal>BTV`3yJ`*6#=3uLo55pNCPtro_k20#aLy4hbn z>9z9Muy;o(jTLb0@MtdsPt+ZJz|J}2GPSq$nQ>&)r_>a2f$-!wlWuVU;6tYgAo;w} zeSrQx?So6lK5vI*n*wO^-V$$;!}XDP`Lle!q^D6*erTS`HyxIRoXfDKC?XjnP_*^U zFI@!5G2&dN-fti8$$Nhpbh)Asa_)F7V5SLE$tY`6!@?l@w*NAj`{T8ZXQO0t%D^&} zBzeQVK#QaBE4i!1@|Ols%Jx~|42P99y0QBxMGoIWe2r02w;;}oouE6h!QT6a1jZ{Utl%$!yh&s*lD6G>dpBg8KXg(MV-ks5aWpM=2&~giElzD27xB!eWX+JpN_%CX&3; zzU_Nbl_YQ$ASt?{(X{s%iOeoZ1MXb+`$yt|2%<3fn+H4_GDzeP<7aiwn^-Ht-|XBM zNfJKZ+drD`TIL#o<8l0;?!T7@4kH@MUvBV_aMI5noVOej=^d1m$+!j`1V&tDn18PsaBt=;t1c%F$-%Bjk7DGITI#O_aaqC*@ze7mqtY z>=$>DDPt!HEN*#F0!R!hOdeF&y?r30FepbgPD!lc2hI{+mLj=D<+V@1=m6^xcRzeR zhRpr)i3Dd-V$A77Fmu#1DB27&a{y7;kE;sPz?ft&eKvg*!*8`U1e{*U>%idaDQXpi zJ+Nfqc<}qoUEmW8kHfAHC(1Ek?jE|h>E;v9d0D?W>*SS>Iv{f0NcdT#4T6#E{=Kw{ zd{&4_q)e5Pk|Yat;WH&PJBxTaD*bsfN@UiHDdT3 zk5eW2e*0`U7cIp|n-nc(yfi>&h0Ku}ruU0l_+Z0oKOLs{DF(<1;ikOiII*jf~^lij$GCJ*d^%QdlF;)lFh$^YeD8w$e$I=m( zqp?E6>?tFvr@^+ULZwwQMCVq>dmA~4oCr^rYeN5^g0ns-=tM`&pc~pq>(ZGi< z3IU6Vh-7rS@0fQ*rhJ?8Opw?kC=@W4b#DzD^cG)6z;(%f*G3)3#Z5!{_M`l>yLU&1 zL612=_6#6vFeHB!0jQ0%t2^ep6k(o3$zr~{ zk41A|)8<3^;xbwlb(c~QKk*evl_{M0NZ_p&{jqYZtSQlFnq{62O%&{VYR^4d`^G-t z(m|c;`Au-{)}&%jfi0)?V8V+1{eF`Z$LjKadd0o>EKg@Z7={9d5eohV2*W{GZsc1B zT22#|36>1A;4eOPmw@Z(X89D1_Hg2gZ``z^$ez~zl1~15>45x$)h3+u z)db*G#8sc&d=tpSm=JO7qp+arR%1)SxHs+krkiiqDRbu)L>KHa&^ro#8U%=qfG&<& ziF*)riAcoAB3PHLv_Q_U8FsL95#4=n?-t!$DcPQ z$)QgVUUUYL)X=8ecTiVcnk%DqSvcuwRj6uqZ|`P=cf3$EcN^I?BvSZi*8?7QDv zyxHkU?wLm_<82YqKs!CNGYi>ck9lClS8Am-AraYxfmeDQxVK5+OBT`3-dUT-xa%|h zx@9?;x2|ske~4`dbw7Qfw&T)5|Gmh*(NMKYjagdf>LlAApI?N3)%}$nXEXJkVD=G_ z6u~kb=95P@EDcRb40cx!?*Hhg#mRE?q$lrcQ z+Cf*n_%(fU?}aka@BJ@jc1@+kIOvD(?nL8YzM;J+{&g}p8tFK2@9wjDA;J?Z8UEe+ zEA1D8bstwUI!aYz0tHv>iUOok?L1RAxlWbuw3mCl5xMylbzL)Eo*k@FP`*CnWZcb9 ztCKpbxK)}F-N@3~z|=#^vL(3HclkuH;z?*T3LsWCVmT8TLZ0mH7PyCjeX6IBTK}+>`fJR3fK>M#7`+9t9ggDh4 zrT6paj7n$E7TJ8!wDY!}{Qzg8l>L^?2`XNjI=uAs2Qzn#?5mzA&n+owO2bNuY{gxv zDL6f*O<*e?3p|$L(I!Q5$^>#cd|yOT9<2!_=uyomkbbQC2xXcyN5g#FQ=^R10BOcq zUA+@|B=Ho7XRSge5214eCzj`EKW=1XGK(lZr!np7*wAP{n~PrD2>Y1=Gs3Y47?Tbf z@wDVAVS+}C1${9V7y!-g5&t!rd=qy0UiSV|3*ZAzI;(>-s-F6a&}SXvulSCa_Lij5 zk=ai0?R)NoGspCFGs6QZJI!oj`cu9N>P5M>u6xMKTATk$9=sNWM#S<0CQ6k1A0SLr z1i;>!V@n_=ENHR-*>^|wre%>^n}>wQnMH3T33GQX`hle~xKA=A9KJM(|*`V|^UR5i6{@hXjZT4&3U+VF=I~luu6L(vV33;x{MIIaM z@RN!jNJ}Wu1zQnFdm0Eq^X-=<2oTN>rr66Q9EDCjz>)Kq?gCrGSE*xbCk2Xzt-IVO zV<{H*@F@`aej~rRIv(vfk@1yc74H}CH>VA5Jothfc&HN8l!SI6GIVUX)@&(=o)D2- z+RI}KS6nhXBBi%X7Bk~t&4;_f7n>xjaq+HGi%sQzOw%08HNzk zFa@|clSV5DPsrp96GEN^*9u=P$ghuhjq6s*gF^$8@7x?^YgW&r#h-H{b+Nx>X0V$W zxQW}I8=Vn8@HFp2NQ%Q?EewYZ?rtNQj-g;)XS#mTuxPQH{Mm%i0~sRU^_`5u>5sY8 z^d#sbmTvK1C^_#eo&I2en@4#9+2{XZI|Fv|Y6cBhKp()+3#INgz{q5mNfXF&S{DfO zOw$6>(HJMWto)KK9TzmfZT$2KTDZO^;rw5DiEexc&Y4A&W?%eFSC9n=Pt=b^xH^K9Zt9DX!ic&N1cNYy_8!ujTG#O0QNAlXC!WX!ghB z1bJu&c}SG<%R>exPd1F_PO_A_B1=zGYM7qxj z1`#?y4OOIE{VjU>@M3L}V$a@met4-TKxq5-VdULVC= zPQq3ru##liOq2&l0{R%s69quEq~E}j$io9(3L$EO$OUD< z&#I(P?T|*?Ndr%?M?RzTFHGYjP3*_&?bZ7L{{=R;_b1r%-~a|(QUO`eV&v~ek{$-u zaN7J8{O;{p@Hl@wwnD?j6vATQpz5xToSZOs{JY;-V|cyVqE$LjT_k~eW-(y88j!mis{2Rag) zM78Nl=Vx_)hwKcMC{g<-`9`U`uXbiXDeN;i!g_NyJJVnxYhhFZS`ykO%ioLrQS91d zdo&~6GGbh>k?miO83GN9;+wU9h{asO2F-~on{*Uo442y=|Lro=jV-DWnZ{^}+@!PJ=#)i8t^BwXL< z4CmBkhs#oL+;htG)h_q?YC7~l^bsk`b(z|_y4b6cuHPFxG$BG=rOSJ(K=5*9fU3N8 z?Aq$&6G4{=+qq_0A!}o&_-3z#Nl_)LQ?EX?d&YWVCV)#BXKw!%opvNJh1BN=BBl-N zLR%7=mLmL!d_&0Oc$c+u4!>l=?cOgnHTKngQn<@=sWf)TMqGSl0q zzF+SvAk7-Hh=$!;o_qhN0s<>KJqSOj5OOpY}B@C_#bvfT!=Exx}s_K z(fV*US%GWCj&n7o!}D!TP7j5qAl%t;yd%rsX?*s>7N7sF&-I%vyTMoufs*E(0!}|( zdxttT7FF`bmnB`Q&{AX`h$)-QRumLav!JMt5;^-RnAM6(M+%DNxFwz$;y2mM$T#XM zj~$uLYkuRfR2%29$(M49w1OOpOoc9H@*5Xugm)g4_Hw`WB>WZEKf4!^Z#6nFdXbHz zMWLw+S~St|*RkJ%QhgSn4=!UJ4WOlRAbHGRV96z9ek24M(V9->>=I}E5n;PLYd8Wu z=1<&SO!H9C^mGw0nD;Ys)i)X4WRq2>gRI4ArnhcS1w8vHQXe|S(-_y<&JH}vfvf{V zp z#fPp)yQZL({y;)wd#49~1153bx}_Vmv^0p6C^UEdG}fY%nbPGIou9U`<`xd^?Y@>} zpUG{A+bGf1)jc^PYV!rhES~4^&;?T1-ol2{pBy7ZI^F~+u+HP3CykuCRx-1*pF%Rc z?7pKHhGW)-SgFGy9N*wXS8|4vfamDi%+}$_j;trp-<)fMrivK0ZcLCebgMxMrcw?R z7uODDQ6#GD;HIS`kE$X(0o5bw%d<<`zH}jK&w*=q+gj9P)gL=GG5-Kc>18e(6}!!h z#nk5A@5wPcGm_UPE@tMe*q@a&^F_J;`HL5sS8vxs9_f(L>Xbe8V<;!lAa+8cNop-% z&q3EmVtMAv>$OogoHa^kb~xHqJ1F`ep8C+5awhrG2Zh#>74?o*C;nuuq)+-+n@1+R z)_;;p5cSyP^2az9|L6j_I}F9HizJ0I&b}}a@5jExkJC`Qq!r8g+>&c1ZUqY3#D-PCNUeEPs;s=*y4>(U-5cAfI3u6zr?D{zUo1 zR$X)Zd7J7Md{X)xpCmGEZzuVnH>{(tfx8^k`&*D8*Mr%=IRUm;;(_%s)hHcxv0AUA z4_h}*-5V{sFP$7OGHEyYl|PAT@b#6n+6x{V-C`ZFqw(=aWp8(sh$=N%SvqWO?ACsI zx$W0X=@RRB&ywj^mlK|wF=9tM_{l;3Xcxg#zM|If);DJNjp_B-4@-_c zw%*}YEYY#A19wobhi+siGP~L6Pp($p5v|Fy3Z42@tb5_?*(bIa%@vC5$9juiK!ur| zt#2F_amxN_(RPenP%828v|;RqfU&z$Q=DgvW>wL}Db<;k#EkuBCSKS-eSPJ2 z9h4CHeq=nYbFsfX3mQnuxQ#%6mb@9LXnJGOVbw(3tJEX@Fti8G77?J96#fv^;-a?7 zpa0Os{Api&ndjP6=iRDwUzZ8>DnxnJO>LUzfV(dhd6%1guk zSgVfnswykl>l5c}k2FcdI$m)7*Ifx*1%gJ=rG7|QzZ2k*&*-`RVta+)G}+NIP#L+9 zdL~$?v{11r-br0lf}`2fv#`nrv_jwAJi3gN=O)~KVjEfnll<#E_i!!v^}G+ zhS{z6v7TE*~)@S=k)H;4(4vPyDH@ErQb?UKKFBO;uI>&i8}%-3dY8Vj~mJ9{K&0 z`F`NRxp0rv-tudMZF;jp@5It<4~k4sjDGn6wa=SZH|LMt zj*}wyI_026FiDAg>40!_R8-r9167wn8dUd(aE!j`yQJ&Fz4;{FnZ^^Wt~=ClW=Pj- z9Bs?BFqw?YjrFK+9H`hBhCC;s+l>~T*=aqw3Nf@D>hV(CU|ie3)#zG-^3eWyS3CQ} z;>(zf3%U+9QnI)@GZd6>WSOssm!AC)_SMba_UPBeJ`ekpl5$Jnb*f$a`Ua6 ze4stD{g0Hs?@iucVhW@cAC?#|_RK8tjyiYLg|LmL#YijnC?+F;n`w_N|03ei?JTrjyo~8-Bm7OS#mY`3isT;%j3g3!|xmp1#)1 zF1^K~`JXM3LgN0PZ0t+(zeK6czZpy8g?9Az-uHPgd$YKH(dzi|$}`5Pn9i^%&fDdo zi=xHZsa%bN`fpvcN>(T8Tw_yx78l|?zC$0fs0f|MEb9@wp{&jeW-7=7lvvEnfa30_ zA?Me_sjH2#?n7 zJrYtAM@zxwb|iNkDBqccng6pA-!H9G3SE&jZr_}jtjc^lg1C_Y3;aI;s3I5 z2btT~mnCzF8(wUl7QuF_RMF6D<>>|$PEwuPOZfVMxv?syjSWR90za7);}wyi;w(y zMLo5tpv7z|>crP}qkW#(i`rhZUb!n&JP(80lO(9e+{VdiUGu2VbEP62kqX}N~xPr*nX=#zUX17 zDlcwmwl?J^d^=wX>in5>WIhtfZxn@-F>FvQjW;~g9ten-7pUf5s~4eE45WNp&14`` zBiXoTpBupN*lKK$O0Qn+!)@xvJ9o3>Q;VD`9(s7Yo^wr7bhV7>tFTXNQZ-sUH8cE#-{cRr9lItPPUWO%oG*`h|AJwKj}PE^e{nzs$ea zTl9ucc^<9MSlyF7pU`Bya%=yhYoAN9KwFyhNXZPhgokp$} zwf>64y4ywlBEKqWUy4b;gC^Y-bHkw`Z1C<@j=8gN-b};%xiodsJCU(NU~b(p_ONZ( zL*rH|K4e)L)IG!H*gq53FdX;n8-R18P%DY6*xqT8^@eF`@AaY2jXz;akyx89ZaO)1 zQ*1oBE#~UD1hiGpw;+xDHSNY;B+FQu&GsNrWW@#wIr)pc$arQMa>7!xA;)Vxw<6E( zXhrbb%s!8PPYr|Iq=L4u20izV3cTu@(GglZBP&A5;&O)CE0C&Gd2{x*?A6bMqnL_d zR>|pYzue!~I-Ib=C`uc~KPXuz@S?hT8FjqNQL)3c{4NM~FGt{zJweqdJwZU(kbaKeh0^f3GU zd?xu!c$CGYM4;iL1s!S9*mksU+u>ihktm)z&Y%0L@`F)Ps&We6!Ji z{Y|K7eJ;NLU{YPlSI4?0-`b2c7Jg`>{dyy&!e6mAerx^Lnz{3*5dB^1NBgc1F((cx z6{v-0wz+*DgYMb)Vl3WTtXsYncU`wF;G2+~xe#}xb3n1ju|+;j!lfy8?Qv;lPqe*& zx;{-4Z^)2(!2oy9+V$2KpUr;G8$)f!z9(M1LqC(1se{U@s!MN>!$RqVRtQ%8*=!F3 z#kvY851u$bvuQPCB=xI)cV)>aEJKGT8YjEiBH7s?+K?W?BBOz$YUtQt+AkoCj|KP^ znoN8DsIQOMAh?W>Htp=9@Aq7K(2!F1G}dE!gtzW4C8Mwrl&pWrAojJQ0X6_`#)o4k z%tZ(_OfK!j z-;bHC9A8r1Z#=Em&u#ji)A+mX+EjGUQc-x=)vv`5=ns6gir<>68)?llBu$$(vd9^u z?DC6`_cGvDWZm#cYn1X7C?H9nZhRfiTwVcn^NWs+FpC%ViL1Hxd)gmWyH@K?>E)d1 zQs0m|c)r}rUoN~%$k1KsyXZ2*v4k|J!g2ZS>Zy2B->~arkL`-{3{xA9^gkW%_LwQ<^jvdw5m1X2Z=!Ja z^6FPvRb|(yF0GG_J7Z!!{j+NSnHx8XbkCmEuk&D@2#_~$tqdYh6f&6T$=NCGZqk{p zSY7+XpW*P7+f=6XP#BU;X7~8Wn%T(oIciCa)@N~q^II!8-vn#bpL?jVE9##+jfC{Pw$@x5 z9ahx~3YN*e1j=tFgRNFIuUG>W0J!~0mz)~=U3)fiCbK$`;_fou}q~=2JjKAZ4qe8o^(#m-KebWEH&DSeo|Cqz$qB;sEiH zY5QNgWJ;^r_mw>H+>Ex@GhnN}#A_z*Hf>$HHqsjAG`(ZV!*JeMY_*XIT=&MD+%cND zMur8PWpJBvWTmtGLXQ1ZYs&4jP587Z`Fj^a>I5bynI<3Z(iV5JoGJA_#BVrlLn`#- z$&(z@8gJ9yH+$8`lFZuR?&+dZ9aP-2YE7!@YE7W64P(w=S%US+|uW-ehLjAP^=mb zI^;Ffo^@t)oW_0Hw!*IpZamNQru}%8W&C!LceHoLp>_8vbF;&7Ta(gNQmgj#JM>I? zUzUn249CeSXM0_&SDwipbuQa&z$F>MzN|%mVtXrn4-RO?Go>} z*yhh#njjR^URP>0Huu6L{}I%-ZG3(;lAfh>1S3ewbnO*=K<|VAi_&ZoedvIf)Z_dyuT6c*+Bc zw@z%!st-QX5A|+2jSPI2vy?lgOP79zu@=9*y#~wqQJmz~L=2lCarf<2DP~Hm*1~xPu3z6vC+caAo26;QU%t)%{baZXC6&ONf#(Ki!p2L*JaV_k(sJp6z0bV{l z@#1J^r}2jqo_$XZ?M8ZENMNLSnV7b>S*$o53z{j(DUsj&G#Dwg6NAqj2wDvS>u^B~ z($Iy_L~QYkzvQ7}i`@Bfr^os2T|IG=*P52$3{BX7U76EjS{3It3e@~VW&9gm1qe13 zCfeznw*;e2jAN}{o_oYZ;UG z&EWfI^mJqbnT@+=Qlqn9`_nC%QLc+Sj~#*5M`pLY%oaU@gl$@;?h7>*hJSPl z@7#bE7+TroUf1|#OH=FiO$fSAtA%GnYr|b@W%IMjYwq(c+%*nWE_DaQQ_DT7H#S_P zKQwvy?>gIYAZt-)CqyeFxeGZDB(J2BWJa-wb8w+ibMHa)_Qr`qOk^Oag(wg1Mb zS_=akSek`4a5;3ruE9XhKXz`;vCAsWIQQvKN16V%q`G`7%Y-ulw#DP-IYSTmvl#d! zx|@D#hx4vM1EhNb@*Qs+Xb+$2)<;h1BHeZkPtvBl^zl7x=W@+^&Tm*>I$EKZt}u4~ zsPU@r!hMAfkNaMaj+dZ27`>D~WvrWjLOn78^`(far5IE{`AKJ~m zeblW+5wqM}kgp8itixUI?Uy7-6~O=gPq&Ki+(-K@1TC9!iiuExQ_#Hrz-R>Xwi@mQ zXzVEA-WVA@c$_f&_Zb5PqaPjzfB7EMCMRf_)1YN&#Alrk!b{aUFu%r0yX`w)BH#BY z?xZ8UdoK@)V}AYd24pOQVu}HLzX?apqkvJK5_mHB;Km;~huPpHLCRQ&!(IkC!ctSI z5e6eGh1bSz2kk;a_6($o{PVTu1KV)^6KeGhzNHOzNZwCC`R^-|L=ZDLd! z0i54=s4mfP!)$NZ(moJ=|LYP1lBfZ#W7W>v$2(sh6q?}BZYf041^DLlTtl#fsk92O zP0)T5M|k-Fld7^R2r+bs;^>N4SXM?BONOpPunK&HYgwgqz~nS(oE`GC-GE_-$*XL) z!NO^t_kBLGE9ZOKgWYRb2q0>hJ{Z+O^Uzi7<4j`WvVG<@>2>@$*Nv?L-aGX6m zGOhCig0baxGM+HvUL}N0BhHt=8Roj^5ET-E8YG`Ao~wj75FdQ?PKa{hAiSD*G$Gg1 zxr6%mMLXGbxP<>{_lX%z_)p@*HpxPE>z)+}$-gT4cw!Dg?p(SLz0VNNjW$J2c2hZ*j2=$RuQD8bBCKoee9sIo@7sC3FxX9K`nQPxhmQkJClnX^(r*gq zy^jxkW=Z`3F@L9Xs)qbW_m+WwsI?9ZTmCgUnx~Zb&_5vgf&ZNR(<1{UHOVj>hgtIY z?;{*UH3|AcM0aYQWpxN!E8Kj9IsM)_5hOv_^;v!bX=cG6JS2Y)1-259AtLbwL@^4= z^1pwBmL5Q5HnFX&&;X9Kun#oc(f;TA3hI7>G!P#JB3;Pi*`^U1 z8yf-Z<6@XD$~!=_9Y^tMD@1LQh@=-`79W`mLcAgj3%`gGd!{vki*=ChJF_&^PKiG= z;8Das1t}@v{|kV2`;JO8_<-;gXeRiD?$Z;4Kg-7p!1#Gk$DNSv009_jA;s+|+hH5u ze`N#w{`^1OPXNfb(BNw;{;WU+iKBp(NQQpNiqwsq0OQx{V zZ@h^i-VfpkPM#$EKOGKzX)HK_ZJ$5-fDUw4+Oh2R?MNqxa|gcN>5phd@#zU60N1Vd z6eQcf$?)GC)nrJ#lCNDOOsyFVh)Uv(2$4aA4|wjwFPDrm=zpXB4U{i!`SBD*02a>% zYLz16%x?vap#M8I9L=W$R8<}vAWWUW0%*DWyx9&rLwwSNB!u|)Z?q5pM!gbtKW?up zD!~A(?`fngwZn`5Ma3NW#WZE`&$9ZD7ao8*3g*4#kfQe+^`LmbWc^bZBo6_%!4JZl zEa37lDw?8%G?foK{}2iXxe(m9{0R}4a8nOTiTK;^7&nCaUkM-x6D-8$#4kVKl|(ix z1%y}YC>c-ui;C4KaOg?k?teJ^{~tk5CY9zlEC_>hyOE97L@Xajn?jH{+sH)>I`5gvpakRKFe?|Ll z!*U&j<|m)Rjo(6}grYsP72~{+SgpVsA0GW={0C|x5-FJZCW#|TbU=u3{1uMoiw6lK zxs*)vNBoG0U&726KJsk)Fo;N$VJhW`>NY6RgU2ChTkm~C$Q&W8t#@gFqz2v&+3#ra zR04%L%+tqtkZhv(H{5+)$m#qI%K#*>RJ}Mb@<)+oz*Nf2H&&7I97fhv{6RN@^+JGi z8P>{A@@kYhg+>TLi?(u)2s2V31~#6`@%xkUqdGBn~@Y7)%#Uo2Jv=sxFw?=LTh{XsGrrs8lJ9!Hup z1g&l_yWVYICVG7U?Aj`BT;cB}j=v0((+IUY)4^Q-#keErxml37p|khr{ve5>0Fob` z+8~7Lqm8iX0c0U=QG-j4*y&GRZo68_@7?FWI?%~b{`&Q*z^DIg$&cuGoM&^d4Zc?@ zZbq3Cgl!3D0$bM2kvAv>T`3hl5v+>6@Q;1FlXk50Wjurzz1aC8ejx2)p6(wroDB>M z^6_`gN04EW3@et6`9Rb^+o;@GyeuoFH%0#5bvl)&?td(XzpoAhkOL`Z==6&}`=hVY zZaV7@h!H52-+J{A(8}NdQf{?uI|uW;D+hDMTh{uY4Hc_I%hQfBP?Kex2$?&uhunb} zaOKKlZORC+V}RT{o(yyv+y3YsKXx8{@W!R*ax5)?w zfhm^E9c3{J;+!BIhcF5a@>>O6N)1Kk#zjEgS4$fm$q06i559Oi@ibJRj*#X6V{jl} zopO?z38KRme6R_H!2SUVcklNHJ0sfu*b!s^x7;3~Sd8^z|qJ)5yq!Q8~-BKdm-Q8V_e&@9oJdgJtW8dHN z{d?cB_YWOwv935{o->a*=eNiU2di|*?(LC{x=oc#NzNyA2bz#KT;$E(wSw4m3*coM z?)N(T?=elC`i*^s-ROb6bLpR7k&Ba$d4*z-!hsXbhfOFo6pq6E&t|cSV~AO( z%}Y54TK_-O)9)vA?Xp5OYn7*bU;Sr$VR#Bjw@kA!d=j~z^ZEa=-9H_KZIEQ$;ln;( z|HD_1|K>!}g>&$p9(Y5%F98WgHby7I6W-Z^e!J(~f+atU4*P_z8zFLY$4Kt~XraJ0 zqtl)Fh!OSsyvy%}!BVL@gMUAb?)E}y7KT^+gjyD!l+0E8&JK7L&J{13ZGtnbce=9l zXkYC7%aem!hSk#Z%s!)tac zGUU#(cf8z*^3QrHz3>oAmKPAu=EnKRqcCUTCtwu0Rn?a66CfSsVM42`Oy}fm zuNpE+oPqo#sJ|nd@$6Yb*6uSgS=r|}au1QZ4M4iMh_k}{m%Se{nkT?4-j^^m-rGOf zmlli$nj3;9o9S*9M91S^x{qd=F)$c+rf<5R~Y=A58IM@UDr2#e}>+_@L0^w%}q?Ztv=`} zr=14&{F9u72RtAkbw^mzpYbKbvN%<1=!k!3gKCtB<9nnI8ouQ0%B39PAkw zDYiZkxNpFB9+P=e<6vaJ5r?pvK8=g8E6!Q2-AcJR9T8W#J5bO8vt5XVhW_P9fk*@u z#M`($(Xbyp{_8@DuA*ve!rK6^zNSYwB>MOZp|n}Yx3HU`1{YV(lweY)>}p^Dfr{J* zzQ?8^+f73||KA+QM^)kl(lDewh!i)+lV(T_k6@Hgp&WvY=!+*Lrieh z;K|EJ0%50FW3dU_|BNrkfl*(eTgJt?jl@2h>>^|_L;f>%Lbn1#iJ-l37Aq$IUBL)A zJvP}7VI1#--C?!ek6B^vUxjc$i{71+*t0>xkOIHi*~QY>k-!g*=K60i-geL5~MtZx#x`nkv|G9!LxtX!%MA6F^iE86E<)B3aPUgVkCnA zN(^1XGq=Ch1rZJ}gF7zM9HPM_xITo{e0B7m5%xs8{;PnH7g8%hSHc(Ln0bH%qJC6_ z^&tfOUpz%eki@}YU%XSUhz+jh?BXM1K8xK_gCK9+REXtyg3^)vJ?L5CvJ;NctPCP5K=q_ayJZ-Mb>4 zM)k^3WXc&+^0Jw4W8WfS?^@387=>!%1?b^i1;I?wYCpc}u`haou@C6R{jOQawhEie?Ktl}6$+;q7lKMNV4x^RywBBrW+{zNXlj#rd9^oPPc-AY0fc08Wij-M4WWpr5+SN9;>%bWca9*{z9e#ErIp`?^kbpeSM}=#&U(bo2QMMbYx-|fu^kxbh8*GlffBC ziN)9AIC3OtVZG5GFAHEIgu-+`jy%Cbk!`d{dHO-A>W;-wfvp@%|NgUVV`rIa0tb88 z)T48lpTB2F9Qv~S9}e%+qN&+?o8X&<%kdqJiVUx z*3l@qkj-G|5vxv@+W5-OI=FLnb3PkUjYt$0OWNp6G!8$IE!>vM>wxyE3`dVEDD^YH z&sWkZxHPG}XDO;=HA~J!z@N~T7xC5O_5$hZsmL7+e<%lm&FIWpkI05UD>ooxl}1t! zWt0a_CXOA{0Q9{4f*mq zwJKHP6OAIHjrTQp#$VT%i$OZ=FMtqQEYl!Z{;Q+Gg?tbC&-)gFEBu)RU!qhMG~BEI zoTRAjcT_xQVwrBL*t0HRW9Y-^QsaH`I~vj)dVNnJ9rrW4POheOAi#Nl$35@wYR~HV z5$OAwBV~QHS4`Z$P;XDO?X9+UPN8zguo5JNW?VN?neF2Esv2W!+-=%Ds~!_#n$aD> zmJMmG4MZfX!MZ{_>0P_3wA=H^Zfq{(X-afT8zSg9lC^vfn z(%%B}a(UNVwI-X06VwU)-L99m=UXtv*J4uXLe?z`9{k&5Dhgs)bm)7t2BOV?8XLAf zn@x(*bHMER%k|Yl+RI{9R%`TS58?ho{}io$Bs*n($LiclA zw`r^w`h1(Id8t$jy47D)@dyNPXvbwd>-p`woQu=pb)G9a7=MZ`4i@Zdpnz3ek4d|E zMZeD1!`0BY_zJHola1BJ=(yU#0BUVAKDkg9wVs!02q`bsq>?p{ZfNxjy=l*KMnJ2VKC5des=i?_z>6h}X@T~B%K&5>kM8{F`6D*B6aWzpV_8_(yZPJ|bBrg^^2 zH)!@<-k^bi08@nxhW!7@dI>x7gaFmlU+FVhAW-$=O(T9=p5-R*?Xx6QD712jY8u;1 zVM&YW#PYF*-4@!V`k>VW_O~4jquY>rk+dpe5%P(}XpD_<)Seev_gCfPhP@{KZLGCw zO{v4FhPxXw(KTuYCxm!2c}2wQA*&~0u5gQ`(|VctsT%;gYynnTB%AhHP=Y6HR=D59 zc&+p3?8~t(?HhhEVWIv{*`*eiJ#Bj!nqwqWtEmmj8r$;TQB(rTH?n73@VmBV36D{9 zWk+ghZ#moC^!jXE{Jml>;1{zs-8RFjAr^E zb&e4d&s#2!^t3Pcddfj6OsZxFfGoQu{N>X-M3D@z%pE8rG193Krk^xf7pS2`M;~e) zXM|*Y(I^g< z#XTp^3UIqjm#q=}8~p0EXZiYV#Eh@VexTr!7avLVgSv2)kmEj}(7tfLXj#e6(@58J zmSj8oX2(8$0<1YniqjGp{YDK=V&(4=#A$+P-3-yf&p@EyiEH!+%%(SQR`>6kI`gFa zqnjG;h#cuf(i^nb>T$<&J2wDToe-6#_4+Wi{?FpIhvy4WBcBvU?D4hwpf-xI@fBA< zhQ9!g8r*rQU5QVEh<`zHErV{)4Hh;{*_h&EXC3eKZS6CKbBt`3#yo6_arM+hISzR% z1NV>mtCZ?W$WqKf6!6EdG4=}Ou=Nq2WS;q>O;K%|>+`xnDlQBTCzR)F2AVDpK)%aO z^(&2_H9XO#fWAWluj-YW+zcVf;bh*ai@)UiJ!eBSik9oXG$ku@0mxWWI3zG~-ktT9 zU!7s@O4Ib6etb2~G~+(UlUxB(Oa4Vv8ar$^%XsQEK&PPPn8N~kkn#&n_kwp3ZE+X$ z-t7&8g8)2~Y=&GpTN2dJdlz1zYwfa^&3c}&2UyseI%KK~>|N&n=+&62<;U(+5Lw~02$``RN34p(A=4Shu#0L&}> zT{^8L)Tp=%Nh7JAzEQ`xo)ET@`i0vdb0&ZJM#zuX;~+>XL7>z|K(qAbAESQqofVVS z(X|1Kz6EN*QXO3&D(VwcQob2g^&U5B5{Dgd{^c2V{m~a)EnPFg-u{r4`KbVw_TM7J zwJFt8W)dPPZ__G}MDu9@k>(IfT3c%avF~FFzYSnb?lZVyoOGAuK(%Ttl^jQuE<~>n zt;{}fZrM|~YAt*tLR7j8{&pM}wGziOOV!GAnzWv0O`Q05(NtD@ z^>Qe!cr)bogZtEyJpYCa3`u(|3MtO{D}tlGX0v@>Y9 zHJc#IsQM_w&gLE?x>0@A*g_x;dTt7ZoZ%b`-fAu&li$zbNWB5+K9c;4K}brOO?*MJ zc-Si7wT+ZSC?S#V%kkT12_~b(^LtTS53PiDl9LoY^?%9rFS0=j0^{9$$SBG0{{Dni zYL4p!lF6@|zo=!zfFP1*@+!~(tn~Mh;H}N^EBuxgWo+uziKOdl0`{9{Wm|M%IPl{+ z%)$B#sgL#ZRt%Ei`i>a+&esI+02=X(=G!Q+$8j2J@OJlHt!M?^Q1j^ zr_Aa$pe>}VxDKJAM=zg@LZh;h<)rM^Gms>ShW=HNqFf&ehwoXf$VgKWiDKh>AgS@Cax6EhPSHM$*CHEhsJ;UrZz&~)p8kvXN%$7dSE_A>-=Mbn zApNE@8!7t$;d_LM+g#~-QGU^IRCQK{?#{XKj)Gw#=@lEnO{FmCDto_9aO+N9fHNZ` zxY?6aef)HWZ7!vLl2s2$6IZq^XbK832$1T9PHLZ)bScN}J*myMO2EfOWu8m!%v=?p zwSgl93P@U?QCiV*{&dp08%0~av@^q2b2+_otUAF)wFLyhJhAg9n?{e+wiWHE8`iMU ze-YVY`#vz9(N0l$moj9oMZj!Me2vec&)O(8*i1=sJind#j}Y}w$lX6cs(C|+8K05H zn0c&q?05&!`3le7?f>*D6LhWS(8vm9;qcJ^h>@O3(BiOeeC898 zG=(gXO;xh5ncL3@IpG2)##fkUjWGVEX<i1x=?T3yOpS%M_k(95B+y2z+oBbvR810H( zAJK>YTIaYI2*#Tnhzl7I7DhXr=fM7~@sWSOC1`H5J1caPKdLvYzTUmj(LQDAr%2~n z)KlC9;`(LnV;+tuznd_^P8n361=*d2Zx5i9iZ9fknK4J?m|@wekjVUe1&V9t&ydWV zak)Ix*-tu`oUB>E^kH*RURYWaU`U$J4|R65(s-jFk2NFQP-?vHv|aAV>HWX}hz z;|8j(Z@puGaawSDJmt5-`f`p+>2XNgaF;5F(l*-1DDQ)+LmE9$v7;11ZTjXsZ#+2iBC}2xEtcxmO1q>6>51zOXu7^A*77TQOGr!9^f~FdL>KaLT1Ju z_yr;hQg2kIFgA^=18fG>y-$LOccvUd5saZ6k_XO$Yex)lp};GqPC}2IfN>F5blctO zvfrQl5xqI%2DSBq3ai?0cgAwdbwO#!k9Y7j%IYypo`HW=@UJ-a06Vg^G>v5xi@NDGjB->-o?zbOS#McZWfW8gqTraMfgziAn=XIpw!T+z# zDm#ysEkcDDPc|jB5wCBpp1TynXI9;0bjmCRsY5W?`0aHibAe`8x+tr`(CP8r74^QA z+nY7vkO}KEo256`Bh_99#X+tjg^d(Pf{l*LrdfH2G75qQ2epFK>vAB6zRfaBJiwlI zwpvyrWFTGU=nqhNx|QT=c_zDJKzeV0kQ(@iuZU3-tg9<;W8^GC= zZz0|Ze16tO#z$+Gf*0L*BD(%X-dIrT(pJBQt&DFSPV?xLeFrYe{&6IN>^)?c4eq-# z8^=jn#7srtp2WQO!m+S%>sZPV=M7wzu{fMjgA?$BgP%7I`&4Tu=)n8!6E76z_ z(8Lh+f~Fk%vD$1h13IGohQdAJd27)KGT74!xI2<+SHv6B1W3JwllAJnPNqK z+(&#Q1-+3fLOH0hK+50m=|iWe#`8oLe3Gfwu^Qh$gfp%2$}XdyID`5vC%ChsDzDZM zK4^#@Bn}1ru)Qv#tl! z19Pi_1SMS}Hq_K#`p~I0>e(~)1QP+6H|JvwF?T8pr-`T9Id8N21*J?o)y-nwK&>xn zzYmGakF{fTx`pJclX`uZJfdG66WUA)LrOsObC`YkF>3}X#we~QnbSF;^ytdxZiZOH z8iEC)OB2mzu(5y2U*x>JI|dZhWcxTwn-uaNFYxT5rOM`a#w?nnA7%Dc8u{38Yt)ta z%3g~8xDm{%9t_=XXV)SMKitz;R_ijBO@UG)--4|TZ)jhswg`0l-ILRtXx6Eqt=xRM z)L1rEfy+jyF+o-;#58YSyYUsh6=Qntk%YYYP`b0b6VYiJhzC^hZkvtSgXsBNP3z~6 zJOoo-+QL(bGT1=!qKrOqpo5ykbx%urZ>|C>|P! zKbdBEZ@+lS*pC9^u9ZnCwPO4Gvu7Uga^@y<*YV9?g$zh1f#nDOkBs!V`pjM60M|Cz z9B}Bo2Uq%$#H82P9;GL@lW!JmjJ@KS&kwEpMuS4DTV3(QBuE843b{9};h|?N|y{0G{W&0ra1O07Da4P2QYCE0iE67a$HYT<@8Ob>j=u9YS2}hk{N$ zAV*TQv@5f?W)30ss&JmhNH0P9dxCnE>8IDVnM4V7D{d<`Y-hbDwv;maEaf}FaJI`Y zy}ZK{#jRAZd4B^vOgw8g#je*E7w)07m1R7+wbo=jRtPm9K7$q=RO)RbEhAHjBoOtV zw4rSC;LG%aY`qhGGyoS6jm3o8{@befh#<^4S;mO2Oswz~^Zp6S=SAM;n54w}o)<&R z{#u>sY`1K$?=&IzY~`>IdqGGag0USLynxf%y^KYAEBviqA28v|;QC^4r_fow5YCoy zJ$J&GXUO&2?B!+S%ui5tfx~FL&I?K%@x|PLnkGCmDc^#Jv*-WK!{7b)Rak}T(!nB& zpgwzcOyuS26m6v0yy|S!@2yCMR(`8#XVO+~ir!SfyF z!;eNbr}caa);3M**2^O3{;fmcl7Yb((@@faL~_c+;clg2Q9aCSNL&%b{3RFnd*gHq zK-3w2hF`9L$LJII8EY)>`(GD;x)5_nSuQnZ(sq2PWl1f&iNTzZAUApiwIE;00K-AQ ztNM@_OIH6%C)y=> zLTHv7?k_hOV?>SzQa*Z!)q4fnBq6K^7ew_P^MyCOe?tKaUx2IrVyQ94l*~thVK>FD z9_VD&@NA5P`ijKMcUU5^c@a(!@nXzpk;FL8A!c<_tQ@O8QLas zMe?v_Tmpy?XNMi==QvfO`*|yLUPusKP^-s5m>(H1i^mF5?_D@N1*YP(8ikZZpworV z2Irn^Vj`pOgmM0ePSZC;R!TO77dwxb1k+&SYXi3cd2^KFE@sml2V8C()X4NzcvKoA3H1AUml1fr`{Norh*vr7o85a*NKnp^QH;V)c zDW}r}cL8?+ z6}G20FBm@h9dFOB-#C{o~@9>b|!`v<~7WVUqF=h@%W(cL}uKv<4sk~w^P z!rqnal*p+&m)<>KIL>(Cx#e<bnQ=+zgy|@cKs%I&-)_O@a839e{Uq7zanlJ*|}$?pR^~7vFHgSyIg1Z=~$diDB7G6-@nI#z#!P z2)iFSdb|eD;rJu`ovp1*Nq4olQ^*5c@NrSR+lOyj!z)`Dp*$DqLlex~g~L;iuxS+1 z?$!hjTM4;;ZsWBpJazi!%hxg!Y~Pqx0$aJL^<}W*bcSJb2D2+(f#=cU;i5K4`V&tg z!#iYGbtLUIAujyGV}a&UbY8@EsGTuKv}M-m?H7|io;)0Q$Rpl_0?V*yo4W&d@Z$n~ z-~8|k?uLmNUiHEePCMb;sd%d)m}ke^mWMh{<<##eVFIgHze#1*%i8l~M}4X_IT?wIFXyDs zICv^lPC=fH+j0?B^}e_wX04DlsewHUe4+(?50O9p&Vkc8PWsjy`TPRB0W9Cg4jzG{ zMG7JMu}BKcm2|=&PS0SL)e;`D`X*NV;N4zV+G6#r3V zRUUi7v}u@4up16nv%;9w?!}(R&X;Z+ZVQ%78H88Rslw|13J-$S!_NKtBak~^eB`jJ zd+2bnrv~PisZ%iRZ&BC(_3qd3kQxRKpbz9vBMPug%O^Sc;j`K`*r3zTj1C@gBm?$c z%joF`>>KDHNr3>fbpr4R%k-AZ2k-v<5FT!!;AdYAM5dc+zk!A42-rZkaAnN1D$o}6Y>i;E93}O8*asJ=PasQV%|Hlz$5Zz6q zv6_Xsym`(+3EjrGc6LWkI3J^U5#E_)B7|kb;k6(EQ3AUo6hgC|-3kRT}f7Yjc9IUKB*7c@Ko zd2rDr1G#z|9=F65b8lZPrh_ICQ%j%XGKY_{{Au8Z6(QfRf}jx_#zCI=jD%$SnedbS z>q#cW;aSR4Tx)&yVZS!DLNGUsJO{bh9>@V*1aaB#!O%|2Bp#?kW3s{vZ1u*>wh;p{ zqcIOoU}V0qIH-JbhH}Qp3z?bd(3+jGjgTOT5j|4Jx;W5hgizM#oq5}^huv-Rdemzj zs-6-dC2_+P+s~p5?6Jd~xCO5|>LG>P)&Ocjv-_RH`yw!05AzT%U4;O4&8PNRlYpgw zJ{c>_YWRJM3(fXEU&XO6BLw-Ub5k_;0jv$hU$Bx5Y7=<-521rWE^Sf4e|%Z@?qL@G zEU3Ghkx7{_3ojv9iQTalS7gv|Hzz1U=^Hp}4K~G+#M~15Qu{eoV(=9+xuoxEwkKp@-w0=a&6IPN)iUEclV2htb|yk4+S zu-=D%^f&>o!wF)EYB`nr3(a_G;l$Vp?ZAX)xil;v!UGD)NVZp^3av1YhDlw;T_M}9 z31p+s-x&Kc2o7jsz5K;{FJ1?#ml#$vQ;tCl1CRMLMY*=J#pvgS8n${z&E{w)b$>-p z0$M?S0_bs(KBVCBYA+PEIk_;CR_}b5LiQ5DInHa76)Y80q*opV`6?6~EOkfI-cJ9X z6OpHT(~3=5X%csd5OG;Ef3#Q$m@A>dobgb6Krg;x-SxB{xmX$SDui}>;Dl%^ zU?rW7Q7WXMe|YZzfW(PX$^1Oad!j}*kC>RB3|$2PViZjwt5EKE)v?kdCFukW?m5Ud ze>B|2Czqfvf&%YECoqcv*i~5avk}h_?a}TIsI<4RN-GX-dVp{gl+zFx4>429o-f?G zO>nv@OVWCXR0Rrn6HG%Xvx)v9+ses~zH&-sDk$Xd?AD%?I~Aw0x3eyJ#M2wUn&{PI zqs_?}m%O>$_?d^e)i;W)%{NBfA9Kqa@Up}E z`rw}$=YeL6oFBP|;r!?gIAXMQ+`}K)pH0T*L2Y2E4iy*brmHL;0lzt10+kg$`91G` zAFo!p^f~z%KeY^+%AoAj;A*>avUy>C%F_i>nJPdzoremh?xU@F)X1PJcPOBgy0?)5 zl?#pKn@1FjB|B@~H{Rwi{<^Hg4|TxbR{|C%e7%;ZV&;-%e?)Y^d=WkgQ0UGw?DF@#?*052m` z={PW5((Q%Mqu(b>cf(;8EBPow#B<4dHC~x{a*S_2pERjpt!trD62)33<4c~2*2+q& zD91Xjg&4WKTXver9t1fj3wof6ISSvuYqORIcPY2hl` zs4Y=hN({GI@6Eczp9^$;`}~{t{oHPy#jHFzqp@V9$4DvZ>==uK6K1Py1`WMZvi7?qtpo`E@82tz0tb zLK_;|Z8@Fj(?HM6&;_kP-e!-7T6ud9wQ@qc06d8KYve95B&F~ymXV4d`F@+tV8-Bi zy-~e@KNpAG!vJRSm~QqC>(x%X@SMET8_l=68T@-9Xq6cl&&%Xij`aH6>S?2+y8X^8Hxjc_~PU*s*8 ztWtHs%Es>^U}v82i$nO}z;ivU@d?aNIQ}G=eHb)ZVI|ak^<| zEzO05L) ziTjSIo?JQrd&~5z7-KG7Ui@rWgf73~y`yI{EkCIh3UTGDCw<(mi2#Z1<#?(eLAphjL0XE3bUHbojww_VzlI zq$L7WufCkZgq1?^3h*ZSQ5Lcf{Wq@mS2=_Y{bWkwy_#^zjmcyz({d_zI!XM?UfAA7 zSPDod`ihL>LJ$NnTXO$;`{Lr(y~S2jCz*Qks-1tSMPSPZe(_pH2LBlR5sYmqp#5Rk z+?&I8r?-2cV(Q?41F?ja)b?gZdWuU3{*C;b0KosO>7Lyc88e$wN`#N_q^D5}mKo^U zkRiPZD*c~_RZ0oD61pB{4A3WaZ1jT!j%%--y#r@|Q06>I+*(}LQp#l%8$+9Wv;lcj zzAiMtcmzoTz24Q@geZjb>Q6+tL}!t0N0OOhmi3SwFK93(_OYON+7W?@V~jrf63Sp= zmVEkTnb#1k%MFVR`R(KNPsN#^8)*!$Tcei0^j}*2pzJT5XoubjKOIz-xF8S?fXE9o z5Ja53EMP-QFC9m*9c;Z+c|J+_>RW)V+p3r)6^XbIJt}l3W%_k!0@(F~WS)heM@zpy z`PMWXD;48>TB4j>#NfmF`@!~sVh5krhX&837NsSH3b%Uaos&_k@s*>n>@1OPD$i9& zx5+MT?=SW$h>9t4sW4dH5N6Q1W;VDi_jS!<$6hTgR|xI0l(i$AFEQZM#d~B#mHW4)?PD1#wZ1WOHSpd?m4m6C@Q|6K&;JPf-4xfBDBr z)Y#oxj{Udm!AUG=G-3vl<&^~8+rmh#(v-%mO zq8%NGco`BYlt(E_y~N}dCP`(s$uhyU3lL3io@+#oLrepRHWC+a5_e39rK}6i5PmKF z7DOUtEfwbLE_(7mUE29JG_9IVUL;PorAW0|##^48_940GL;tNQMgk_?EOX@rsRR{d zvtc-IoIztaQ#FTpcefEQF`NIreedqb9lGN}p!w;Z-sj;>PpGYCQU?*fWT{X{T4cc1 zZ@qlE+#sWFty?dwkb+r>GC4WDdJntra-Hs{dJM!URP9@M4R65k_~w*>Sc}$( zImZ!pZ=YI5gu_X;5uNjLvegHX5B-Vnne5z(J}rZWaY^Nlf~?W*#(0dKXjHgrRsc;18EMRt4S0nEPaydp43QEn;z{Ol(6GS^co zspS;-kVj)I>SZwU>Ao{~^slr++oMm8oGie4SoA^DeD2-wdTFHc{O+j;^Ste)>e7Y? zkq;kkE2xk7Iu#P#dGAcuWZ-LwI4Q z70Sb7Q$j4KVpYn?Wv)>90hHN)jTL836qU&!Z}0tUn}seMo+g2LRwI$>#z| zWZPx!?a*SzLS?Az{qtld!Ba9gP@DEDvn5zWB~YI}z?pUOJ&h@VQRY+1Ddc@y(ACPj z-j0vUlS7$e9~+a%P*B@$FRCmI6l=x~&_|{0Qy{x2@PbQkvLKQmECDQnC-6b(zRk6C z@iEml**$WZxH7$Y{-xg+$sIh=gkh)k6ACw{E;A_%t)>7y`y-|7MMF;?d2ka zjHd?rr1+|?WLx^M41U&D453U3-@8CJ`RmJ2`&9WdSfVOF{$iS2Uzv?uA{S%%DgP$I zspJU$HIf?{2Yz}j@Ugc%jJkl3q%oXN{^Qs^L#&kVWZPu9r;9X~yR?&?D3z^QPLd$T z(#U7Movrm7&n6ckNv}`b{)@RMnmQQl-t3Ca&l11Lg%>@E7r*crl|L$7W;7YTkWPDkx7>JtI%&b03rpXGg^CGvc$@@T@zDU$c zu0BCT#ekm7_=@rJzY`vZ@$u@_xd*@jDu4*e%DwuGgV7#Gyant7raG-^1Ycg6lgrdS z>xKpd?x1<_MaB%r&k3&Q)JIj=G$S-2mUmry!f9c`dfLTenm?yk= zP7p8>PnT*#voCy40aHwF@cTE9t5jaQ$F1)6&$m)F(cIiCx~l3^)%j98gt1^l^NGU71k zNa3+C=xD>dGnilKgkR3V_o;h`(<6JSim9~hJ!!nO99S5ofK4PV++9s}$-esiGiR|R zQ>}9$qGW-C5B4R!USSe>x*X#2`j@i@e!KwhI(6@J?__g~3;Ki?m?GD~+QL_92*0Hg z8|8;5emzGGn&aGYJuJ?oYab>ZOm2e>3nkuwjoRU95`o1{_lAx6{8~gAtMVN_LVf9` z=}d<{@T-`M9u?p2xr=$uVg`duBOmTuyo6Bz|K|nB7>H4RkjFd&U*nS>frbc?OQgXKGKtiHd#jA1Vs+hY`5c$3KuAdd=dpLjbgyO2h15 zp=Ji~U;El|U&62tIBT#*&+MLng?ISK|1K@8$N!L}6|TVjNX7FbLbYHjF1`c`j-0b3 zc0X`j%OP5YSX#slpy4+*K$p|?pJ)zFT$fmQV{tw7kLZ=A;XQyiOe6wJ%d$^GgoOqo z#Hv32E(*2Y20fc~@@hf8l3BU|N5Y5K-jR)a&;XJ&u z26|^9_bxaw-mUvUgN8U@=+Yr)c7Ur2Ya_QCDXr{>QRo`lj=0OMrh!Ai1znE~AmEZr zT!Qh_*Jh@|_`}!X?!I$ccKaiPGZy|N9+j}h=wP~kn2a4^A{V1O>3~Ui1^z97h=WUp zuU0Tsp%wN@@qjPTBXiZvbpH%bEC6$TrSCC5c5?6sa-1JZtEw52$JFlbPxwB_P2N{Q zgx>J$-;oF~og86l%vk(QFsBi;8AML_Kyh^#O9LY1<_RP>S$>eEeCQDMe)A3BSkf zi&5(HpklacazZ(f{{k3-oiHN(Zqn-6Drn?m9135N_4r4kxo0OQv-4tB>f(2;|72g8 zj~K}#qhWTN+8<5GB^XU)C#N*LYefmR!AgXA|0e(=oxhodY;22N?A8BZZ63!9XJ9VB z`W-=>Ad*BBmQo@}M-{x$!t)?-3b8gVXnm%&gD)! z4}0(>Mb;d|{N4%U+S5v6zWwR>#q4hl4!G=6RV$pIe2b|_?%1;v>@Cl|}Y!0c3MV00QQ-$HRFWKL6o` zg5?x$J~kv4HredLzEi0C;N8!yBL<`O1I5j`g?nuHC-?W94%makOAg@2cEP|F4S7?Y zu^=PfTXcm(I$h}-*3B`bSGrHj%h46iF*^%!VrWG;oCU`DD_aX;U=|S27%_S6js<2J zzkAmzNPV-?xq||;<|5Ad?HN-Vrt&K?^cW3FI1iX#m(H&h#8qGehRCG6tr-Xa{&Ipna10)<+HDym}H5)WknuZdk!d;V(u z1_Pm|uoW)EK`#=V9Wl|HWs$c8<^x6#*bACjXPT8^3M+`<(c9_8M#f1doPOrbUvK#k zuPF9T*bl)|&RF(#w_N+uvJcQ(PzDIweT)G3JA|#_DJ+Cv5K+jaK8(#p=#VqUK}-m1 z!tN_G3}@wc2#5nSDJ`h@3!55_sDUAD?f1Gi;l{SGivoyBWw!>`r_c9H^1vc&-Uf1@ zoSMT78rI+f_!b?XT*P4oolC9c`zg#0{HY@Tsf>Y{PzY079e+T~hv;xTMmmw0(`^mI zTdwW>ge(MjvNgv$o6Rs!Y8Zrp5ZN9gD2jriF>_G!Vw?m#pzw{ny-kQjDhLs+_Vf#k z8yuGY0GeuN345^W7K?R>Yk?eV(T%!-P?jUu9%TEhNe8htyJMRdsSpC=j&;U>6qo@! zsTmmCfXpTxu|S!lMX~g8$W9CfBzCn5cf}pqq@G@c$Z&WeRMLEA`K>Rqq+&qypCb=^ z-_ZydLt@SuCl1~a*Tju=G+81}WR3{Lgl>2OPxJ`Vb-)JNHX!OYqAlniT>#^s6|l9$ zOdt`i*PPvGXj1aEGAea9BrGT5FVxR66C_CYwZR?eh(81`kH0v9>Z_cs7p-z0_~ zEQE~?&ed7?x;ZxZ?x-oDC;yVLVWZ#{6%`~r#B82rh!cSPnS}-sTOvRPoP>y@7L;mK zZj{Y)r$CQ!wG%?5=(XV&Xf?&n;uX5+A$%c%TKZDM@`zh0gcc}1q2G=0a~Z= zNcuUfF#PQT<0-W0(FoHi^^x3V&Uus7yN2JbCzM-w+)aztVq|v^s-;MZ6|N@smQFNo zQHEr6zp+cU(fPbWA+*_uPMOO+2abXaa1=0EtRqWhCjqb$P_if?*pHIg3 zHO$TmYXj-XS)o=CL}((yA2QA~LRJ9gq`rm|Q~OM`{F+19=3Ihl8%#LiZUz<=EGG}M z=vw|}2A96!fD7YmU3d2ho&#U))HbA4d{J4O=~Vf2SCH&D5tVO`RabiKU?u$?g%WBb zOa;B*iMUq_weMEj_inEKI+yHJK^ykh>zV)>!Ocea%}@3^l;?|-FIciiy9Wcz;0kyQ z(iGQ2$(@N5FIYoNkO=?AcEnPgkw7SiwsccHI2CvwhHNUKJ1PYGTKz}!ezB%>XSCXf zK_op&o62@JPKf?mRu6qilejHA!Redf-Kzk3I%yCkxskb0^1<||jk@47p%!EFl||fR9rc&}(E9BgsL2e0*|M#or7H132){l2m0QC~J3BS~ zLj|IpbCW+T1Z6yRHXaSVfYL*ONrk%tHC+AMib+h4p4MuC4Mlrf6r-#0)J0o!e2Vo$ z-v*(G*4z)dxal)nZ_o=aE>4#AVXt!tPv1%%DtBZsfVf7{Lrf?jhGO(!;8`g_#jnTGydJaQFYC_K9K395A0f^-5N;miDXXzIzcRKWn zN=v~NERBlmUL=)#cv2&Tqfkp;J1NJs1GOa})^!!!4RTs9xW|KiZW9!_W!VIQa%i-_*;f5f68C|3`By)P2-lXa$pnQ_*`_3&pg~>{jwhcKzwCFv;w_W+R zsM2e~CFY6GS8ED!xDjm7({2V>UFR1qL{3-$+aIwob$3VjFJQC7vx@7X(v2;EZ`vh3 zOUvuj-n3Y1N_6T@(3>cOjQ|n&$`N(w>kBpG-rG_GBTm7xcCGu zDQC~ZIdVzKFPzK@rkxgpOVu~N140FwOWXP#zW{M%ivqEVQM(cV<&ZX)LJ@DHt z{rq3I6}ux7GZe6KPeo)dC`pe<>Z&3^{amg#N~vSsc*Eus5nH9;PuA}; zRoH+qXwkH#O}n+Itim8WYJ0E}Wgy%pwcx|qmO(1Ro|yW}-{(1>LAltX*f&UwMZ%qh z<*h!8*6VqEzBR=QgVmRf(taMncLLwL;PxOfm%jq3O!M2c+N8_s88j=u*24Czuh0Cb zj=r3=IYhaqjGobu!Do4FIbdfcUJ`HEUE*ZGAxn_!mNk*tBo=Qfz$8)vyqx;gA({No zfC1ro6D=Qc!#>R35mCOtLX;3OsM6Pvk;}xDwm1g*=+ZZ8Zx+h-}lIGf-mxj=8qgKa1D~r$|9J$1?+Kw=V{yJl5Z?d7DEt7OQf)ex z139~jAoSMHa0+5qU)3(bA&fpvan=T5UzkTfvn;B_T5K+s06ownkH9}cAx{;P=}?MmH_fE;`u`Nn~e6CZG7ZwHNk zY^twJFpJxJ$0y}7Te!=~X01fNc@GcRy4kq)zdk-Q8A z$pxe0W9^QfHZ!EXUFcao+t!Q=nhJ8e)yjP|6u{O2IwJ!hC{at@n2@zOxhKmZE7|7b zqyBqmOnVlmHJ@07dxw7iK`Qfm<(Fxd?+G9Mlm_eIb?&{-nGQr<0*ar=kESvu=QHp0 z)z{miEGwC|J$S}GrnJc^PqsZI_{7;UV5DhbumHzD{peorscqj6+*sqS6O5G~X)S*t z8Ytq`KbiLSBbGJ99FaXCWI$dIf}!nEJbG1r(Gvi7Lb388FH+_UyJM2A0k)x&Tk?+f zd4i0>={?uIdD}gvYv~Oa2ETr&o3qU5avWKS5h@UCuksLYj$`$As-4lhp@V6V&)zw_kD7l4@jqKCSPM6Kn|jrJ4pjt4V| zY+rfYGqj^Bgx3uP0BDaBo>kzUS+jz|MlP_{=NV}^w3hXMpBI{wj*+{ir!&0n_v(#Q zM^g5XABpm)jOJEz7^;8OCXD!YL`lGKTrwfo_CV){bKY+^-|`gd;#OnHxQl?|(=ZjZcR{ zKgy*h?TV*DEvFWZoq+M92?GFjcagbpxlXdy>5|Hm#kz4)x#KR`Ci~o4YBMPQKW64+mlJaUtr4%}XDp zh5it&VoA2%s;x_CMoI&$yX+4w*ci!4BYoX@8mom!9Ft>4^Na<|yFj6Yu{(KB7nVW1 zIfE!;fzbS{QOKvI&vy+jKVDo{xgrs)u=v?PfI~rhK`P%qO3u~$?gID+Ru)#1lS54* z3A+BIcEaN52ztQbzDuRgym)1^#i0hLcaU`nvxg*jYxWcpW5c{y~Ce@mN z*=D`*GRF6V5(=%UHLTUnr|o;p`V}Yf!j}fdBYiw@N$HjRYt*dWUs#8{D3FgoCbVdE z`<%{-lkw^D;(D&499{FRS*~WI#&2ypJF8r=lN?q~YnIyQirznaq4TU-d(2Jbi%!;# zDag8`-mQ-eG9*;;7JqG(c%5G+C(7HQ$a=CJm-RaLvzgd})b$}G%n5ccJ=nc>S$&RWXJl~qUSQ)1iXLq;e|B8MX7`&pc z%Y=%4^yMsPr&?`#zv{1Ty0@w2ri0GslJJ1@6q~)b+?05npDl;*3S*N0m{-jHwe4$L zq&}T!hPO3iq@N`_$%tkYq`Z;8RMlMqAe7ET_fWhpMl{c;@3&H@s1QP+(UCGZ=q--w zZf>wNNy^GBXL1%?js09ItD&frAv9WFl3EdZrVw4e=kI9GLUrve)P6L0p&9iY-=!A? z8&qq|H17*|lrk(H<+lV#fRHFZ5WWp3LE=gTsH1}Qpb9n&&4@0b8~=Ops`ef@0bu+7I(RqYlfQ}gU$MG zlmbF4c7?k-q_2y@mXvXAdMbV%_rrDG^jDP0xl^{KjwflYk4|U^ZJE3P?bT&T`1=B0 zwwt>#ximtx(tTY2Av;Mbmdt471&c_mT`Uy8xifdQ&82xKR;nMLZw|e>lE=kzI(Oo0 zza!uw_!Fh_p(*wZNl^rw`GQw^Hqbk$5&Sb5?R$|no=ln&LOb3!U;ccTo?uSzkp+OT z%A%nqxiu^8t*jz}9`dT$fIh92iFqgV)uJVx%@s`*AoGXgH&OA7Nor@g^&ht@)XwCN zX;0>u&qn$8kqIt+Qm^_V>aoB60sr~>gJIaVs+FbFEXzQA{B>*|(!p%4NO+)`_?jP=AUHVkr7YnGo*R;sRbp@=TP596cSH>=E1l2PQP6- zD=Lc*j3mcoYxQTA+jDt)Cx?GglOdRI%}!4gyI?}z+`Y-gM_h`e5`q?QEvaM(sSSU7 zmIi4jh4__gjQ*&;;)ob1%uISQfx4RXxu%dFe-;aT7S05sdn=Fu@fEv#FuIonOMhWa zX~Sy`*Nf{vo@p-C&C@vr6=9r=IR!T=C0(9N%LTMI%fP$&`l+zk*sF-|9o(24U3{XDuB4C$+iXLq1H={E!UImbBEmIOAxN%Q4|`|*CDvK-8|Ucf1NPom5_{rK~xf|Fr=mv zu&RNk^hqyym;XgE)a66|X6;2TuN=l)F?#+;7IQtZ$ zP7}>yS0aZ>W!@R0Nhv!NicBd&Hnzx+`>b#8%`Q6s-hZyYzMs9mwchov>0R&pKF^oG zhGjmt!{o`gcYJUG%^WoYk`P3Nu4ZrEw%J-_jUifJSBKe)u zdwCgA>cpuxdV>qGc(b62-e=d2^DN%-v59LqvPxjR9K|xPY$~q}2VL>0>ev|h#xZJN zPQ7GtavF0D^tx|yyY%`$@4+Rr71=Dtk%kcAW{i(E$2X|3K`7 znqc*_eX=;t+eW_kUI?}i_q80;V;o+n?iQST_PhRGNlpzwg+kw#E#Y~BkGV14i0id> zSfAgetGYp}_VAiqV$*orl&10TR(%%n_cth(*!JITOdsP>v&)BO?X!JjdClqzH6`)) zZz)Bb8IMG!gcB2&-SkPT(~YaM_4SOgP`JC zE(}78@qae4T0S}TE&rrRcV;!G)HbtRTD5;}-G|&$Wm8a7wz+zEzH+KfJc=)Y+n3sh z?uzyxfR6x$-Yt>bu2a_X3oOglYszH(e*5{ak&CB!is{Jaz=v>!o0=e-Rq58(k+o`b zfW@7i^COP7%UI+h{pmF8-R|=VoE(MuHW~$4?OUx=Eo}naKc?wPJZE|ZnCK{2>~Kjg zOSZ!o~;X^mTVxoqRKm%Et+0h^MgTy8xBt|!|H-@k4IV|GkF;Xu!9TPVJ% z{nnCPBaYf)wc4pf(ywswRfzWS8-AfP1@glU3LSa9e+;&>f3>dUi=a0qyqy@+AD6d>_B$Jqx9WX1eEmiX7W88{C ziV!QadWnb;e3Syt1?Dz*FQ#jEh?5rf!t0nXd;Somy&o9nD3_SCpnfEy6NMr~sV=ZJ z(L$|r5{x^B4!p;0nsEl^|xuh{yje4R`W#{N1r~+?TGS(pg`i;TJC9{G|gV?SH&O?1~KAWwh|?+!sV@I${c5_`*q;E#1H9s>VL-t^0 zXYk#Ec*~LACCB2>?~{KZR25P{W&7xFxsG8=8y|}fj1XCg=b4f$zRW!m_bf8*TV$3& z8FGx&#}1sTSo0n(EsI4|q8~);dHYK=lDqdKZmOz(7E4k>)7g7O)OJWpwMPE+1LNJ8 zdlq+SQ`IX{e9t}k=t`;<4pHha#_Y(*cH`y6(b-z$&4w}l;z`Cq+yh|7IH1dC#=vAC zp8R6>deVv&2|>4+M(yXzdQGG?3A}AI$=kl|G3Kfrqw_0&N3N5-LkwfHP;*|o03S={3Qte^Ol(l|R&`O~4l4*WnAFdo zk5uo3*Se$79xzZ1@4=lUva7u-n@e`@li1Rf4F@yw2J3SKD@4qQtLI1@^9WgM5jH;$ zP-hIt=IDg0Sw96`c(^u+LChXmJkL2ibs(i|prdp) zDYnffi6ngpL2JK~3kn^JQj4OW)5-i*$8*uu3O?1!U{w&U58`w`wIN^vV{8ZRZB268 z-&BQCPe|m)FT|ZB$}Pk$RS+ZEKdew+cdXb^gfaZqqTpT91HcycU$ zGWlE)jyGIzadl$NE3z9>8^ajO$Gy;5P8sreBShAaadDE+oE227jvT%s6)PIH4`eQY zMaVerUzD-N3;D@=xw&7GXvv(`}xAo;w5c=W+0pwOjo&OoO2`WE zCP-^V=96L6t4@>2Vh1h4`a8y-#ChhEd2Wm`<1T)F+@Fb>gfOwNDWiir-z88$=-| z-N+fCWr|{F+g*zX^f2(?LIRDU!G%UdAqSz5m2*}s9Y!H$7*n(L>!|(hg{YNkSMY@j z;I!9t`{XH}4x6Suj0CuW7wGl-bOAwlM#=+t*s-{j?(}x%Squ}#COUI&gD5osaH?qE z3o3Ri&iH@%T(pgUiVBY!oRU@Gd8AMYTE!;5A4~yJG+xEe17>VxoTB+dBMc+s!*kga6UbkB`nN#(|UPW(|yF}_IT^UXb- z$-TlY<=L%+^<2!Odac z6RI`I)iipoVNiPim!2S0vvhef55^E8W~I>uzTKV`fFs&jdpBIkg)TN~as}yyLNd`i zMOx)bfgCc()5N{4NyWJ|;e_faYP6Yj_APuWTp_7B`So>n!Q0M*vyP0O_3Poe^W45& z=UDml8zKY?+ErHIcS@?|vO=GuW*@g`pl>#$Z>7&$Yaa#~hR(U-yV>D_M^41Pk7tMN z-Z2LTfzczX*3uxIg6~wg_B%9iqoz|Ug{{agyle8g@lDO)`z2X41>N$uLnpoTqoizv zpx(R2?IUp51bFY>dY6k+ck2vU$A&5;spjmF<0J{TM(Z(Rt;_F?D}^~Bq#NF0^478n zo=ZC~fRBo15Ug=EbH9`zqZ~OI3l)0H_rAYS9cF4gub~H6;z^)<$PnmI=s?19I{7X|5(I9 z+-qJqP`iq`xXBsi)IYzx=J7PD50K17rdJ2VwbcXxXxKm5+W97Y+(BJ$OoBs(R>$z1 z?!g7hkO&r-#rY?0R zIw`m=AHd2gX{?+X$cy$0&kv@eSWSwLD*(&@lZ`WLs-$QV05S=A&r7IhM2Nn^zBlr3 z?$gK`#-a>vp*aZpt|C!h$)LlUXQ|GH7$AAMS(*tlPE(EW3 zd*0&+z&B?T`iqGza{YlxSg;2$b2Do822eF@aTRfq>%GTVPDcIGp+#dtl}sXDYZkQ= zM1SY77FU$Mq~Fd8GGh~fMIw|KQ7_jN^Ng+v(N~D&9)1TIBq4)~7YHN9uH=K6g^oy! zQ9$$FXE{Aao`dAAt$++YU2M$&$T1 z_jFco-COGygl^zThe;4wj!a*%-4lB!MB9BRj;#iOUFzuaPa6q@H3y^>(+FZz`iaZ8 z^`V7xiqd-8(plOW7~X&`qYo3!H_nI$!9%rMWRK15^eSEQ4%<#7P0~-xS&GI7=nb96 z^kX>9bw&@<0&lZmgyZ+!s>cKQI6lDu3T-9A@cp6nEW<_et^G_I!B`CamHY=;V-%&^ z@CA00M7X?Priy>>^#K;W;S0RQjXpFqSY7fvt?LhRwGAuYqhJ{HO0rH& aliases, + const DataTypeVector& param_types, const DataTypePtr& ret_type, + the ResultNullableType& result_nullable_type, std::string pc_name, + int32_t flags = 0); + +The ``NativeFunction`` class is used to define the metadata for an external function. Here is a breakdown of its constructor parameters: + +* ``base_name``: The name of the function as it will be used in expressions. +* ``aliases``: A list of alternative names for the function. +* ``param_types``: A vector of ``arrow::DataType`` objects representing the types of the parameters that the function accepts. +* ``ret_type``: A ``std::shared_ptr`` representing the return type of the function. +* ``result_nullable_type``: This parameter indicates whether the result can be null, based on the nullability of the input arguments. It can take one of the following values: + * ``ResultNullableType::kResultNullIfNull``: result validity is an intersection of the validity of the children. + * ``ResultNullableType::kResultNullNever``: result is always valid. + * ``ResultNullableType::kResultNullInternal``: result validity depends on some internal logic. +* ``pc_name``: The name of the corresponding precompiled function. + * Typically, this name follows the convention ``{base_name}`` + ``_{param1_type}`` + ``{param2_type}`` + ... + ``{paramN_type}``. For example, if the base name is ``add`` and the function takes two ``int32`` parameters and returns an ``int32``, the precompiled function name would be ``add_int32_int32``, but this convention is not mandatory as long as you can guarantee its uniqueness. +* ``flags``: Optional flags for additional function attributes (default is 0). Please check out ``NativeFunction::kNeedsContext``, ``NativeFunction::kNeedsFunctionHolder``, and ``NativeFunction::kCanReturnErrors`` for more details. + +After the function is registered, its implementation needs to be provided via either a C function pointer or a LLVM IR function. + +External C functions +-------------------- + +External C functions can be authored in different languages and exposed as C functions. Compatibility with Gandiva's type system is crucial. + +C Function Signature +******************** + +Signature Mapping +~~~~~~~~~~~~~~~~~ + +Not all Arrow data types are supported in Gandiva. The following table lists the mapping between Gandiva external function signature types and the C function signature types: + ++-------------------------------------+-------------------+ +| Gandiva type (arrow data type) | C function type | ++=====================================+===================+ +| int8 | int8_t | ++-------------------------------------+-------------------+ +| int16 | int16_t | ++-------------------------------------+-------------------+ +| int32 | int32_t | ++-------------------------------------+-------------------+ +| int64 | int64_t | ++-------------------------------------+-------------------+ +| uint8 | uint8_t | ++-------------------------------------+-------------------+ +| uint16 | uint16_t | ++-------------------------------------+-------------------+ +| uint32 | uint32_t | ++-------------------------------------+-------------------+ +| uint64 | uint64_t | ++-------------------------------------+-------------------+ +| float32 | float | ++-------------------------------------+-------------------+ +| float64 | double | ++-------------------------------------+-------------------+ +| boolean | bool | ++-------------------------------------+-------------------+ +| date32 | int32_t | ++-------------------------------------+-------------------+ +| date64 | int64_t | ++-------------------------------------+-------------------+ +| timestamp | int64_t | ++-------------------------------------+-------------------+ +| time32 | int32_t | ++-------------------------------------+-------------------+ +| time64 | int64_t | ++-------------------------------------+-------------------+ +| interval_month | int32_t | ++-------------------------------------+-------------------+ +| interval_day_time | int64_t | ++-------------------------------------+-------------------+ +| utf8 (as parameter type) | const char*, | +| | uint32_t | +| | [see next section]| ++-------------------------------------+-------------------+ +| utf8 (as return type) | int64_t context, | +| | const char*, | +| | uint32_t* | +| | [see next section]| ++-------------------------------------+-------------------+ +| binary (as parameter type) | const char*, | +| | uint32_t | +| | [see next section]| ++-------------------------------------+-------------------+ +| utf8 (as return type) | int64_t context, | +| | const char*, | +| | uint32_t* | +| | [see next section]| ++-------------------------------------+-------------------+ + +Handling arrow::StringType (utf8 type) and arrow::BinaryType +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Both ``arrow::StringType`` and ``arrow::BinaryType`` are variable-length types. And they are handled similarly in external functions. Since ``arrow::StringType`` (utf8 type) is more commonly used, we will use it below as the example to explain how to handle variable-length types in external functions. + +Using ``arrow::StringType`` (also known as the ``utf8`` type) as function parameter or return value needs special handling in external functions. This section provides details on how to handle ``arrow::StringType``. + +**As a Parameter:** + +When ``arrow::StringType`` is used as a parameter type in a function signature, the corresponding C function should be defined to accept two parameters: + +* ``const char*``: This parameter serves as a pointer to the string data. +* ``uint32_t``: This parameter represents the length of the string data. + +**As a Return Type:** + +When ``arrow::StringType`` (``utf8`` type) is used as the return type in a function signature, several specific considerations apply: + +1. **NativeFunction Metadata Flag:** + * The ``NativeFunction`` metadata for this function must include the ``NativeFunction::kNeedsContext`` flag. This flag is critical for ensuring proper context management in the function. + +2. **Function Parameters:** + * **Context Parameter**: The C function should begin with an additional parameter, ``int64_t context``. This parameter is crucial for context management within the function. + * **String Length Output Parameter**: The function should also include a ``uint32_t*`` parameter at the end. This output parameter will store the length of the returned string data. +3. **Return Value**: The function should return a ``const char*`` pointer, pointing to the string data. +4. **Function Implementation:** + * **Memory Allocation and Error Messaging:** Within the function's implementation, use ``gdv_fn_context_arena_malloc`` and ``gdv_fn_context_set_error_msg`` for memory allocation and error messaging, respectively. Both functions take ``int64_t context`` as their first parameter, facilitating efficient context utilization. + +External C function registration APIs +------------------------------------- + +You can use ``gandiva::FunctionRegistry``'s APIs to register external C functions: + +.. code-block:: cpp + + /// \brief register a C function into the function registry + /// @param func the registered function's metadata + /// @param c_function_ptr the function pointer to the + /// registered function's implementation + /// @param function_holder_maker this will be used as the function holder if the + /// function requires a function holder + arrow::Status Register( + NativeFunction func, void* c_function_ptr, + std::optional function_holder_maker = std::nullopt); + +The above API allows you to register an external C function. + +* The ``NativeFunction`` object describes the metadata of the external C function. +* The ``c_function_ptr`` is the function pointer to the external C function's implementation. +* The optional ``function_holder_maker`` is used to create a function holder for the external C function if the external C function requires a function holder. Check out the ``gandiva::FunctionHolder`` class and its several sub-classes for more details. + +External IR functions +--------------------- + +IR function implementation +************************** + +Gandiva's support for IR (Intermediate Representation) functions provides the flexibility to implement these functions in various programming languages, depending on your specific needs. + +Examples and Tools for Compilation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +1. **Using C++ or C:** + + * If your IR functions are implemented in C++ or C, they can be compiled into LLVM bitcode, which is the intermediate representation understood by Gandiva. + * Compilation with Clang: For C++ implementations, you can utilize clang with the ``-emit-llvm`` option. This approach compiles your IR functions directly into LLVM bitcode, making them ready for integration with Gandiva. + +2. **Integrating with CMake:** + + * In projects where C++ is used alongside CMake, consider leveraging the ``GandivaAddBitcode.cmake`` module from the Arrow repository. This module can streamline the process of adding your custom bitcode to Gandiva. + +Consistency in Parameter and Return Types +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +It is important to maintain consistency with the parameter and return types as established in C functions. Adhering to the rules discussed in the previous section ensures compatibility with Gandiva's type system. + +Registering External IR Functions in Gandiva +******************************************** + +1. **Post-Implementation and Compilation:** + + After successfully implementing and compiling your IR functions into LLVM bitcode, the next critical step is their registration within Gandiva. + +2. **Utilizing Gandiva's FunctionRegistry APIs:** + + Gandiva offers specific APIs within the ``gandiva::FunctionRegistry`` class to facilitate this registration process. + + **Registration APIs** + + * Registering from a Bitcode File: + + .. code-block:: cpp + + // Registers a set of functions from a specified bitcode file + arrow::Status Register(const std::vector& funcs, + const std::string& bitcode_path); + + * Registering from a Bitcode Buffer: + + .. code-block:: cpp + + // Registers a set of functions from a bitcode buffer + arrow::Status Register(const std::vector& funcs, + std::shared_ptr bitcode_buffer); + + **Key Points** + + * These APIs are designed to register a collection of external IR functions, either from a specified bitcode file or a preloaded bitcode buffer. + * It is essential to ensure that the bitcode file or buffer contains the correctly compiled IR functions. + * The ``NativeFunction`` instances play a crucial role in this process, serving to define the metadata for each of the external IR functions being registered. + +Conclusion +========== + +This guide provides an overview and detailed steps for integrating external functions into Gandiva. It covers both C and IR functions, and their registration in Gandiva. For more complex scenarios, refer to Gandiva's documentation and example implementations in source code.