From eebf94d99507d30fc81d55a0d4e2d1d5fde690af Mon Sep 17 00:00:00 2001 From: Birdylx <29754889+Birdylx@users.noreply.github.com> Date: Fri, 19 Aug 2022 14:41:57 +0800 Subject: [PATCH] [TIPC] add tipc benchmark for msvsr (#672) * add tipc benchmark for msvsr * update tipc readme img --- ppgan/engine/trainer.py | 25 ++++++++- ppgan/models/msvsr_model.py | 43 ++++++++++++++ ppgan/utils/options.py | 34 +++++++---- ppgan/utils/setup.py | 10 +++- test_tipc/{readme.md => README.md} | 7 +-- test_tipc/benchmark_train.sh | 17 +++--- .../configs/msvsr/train_amp_infer_python.txt | 53 ++++++++++++++++++ .../configs/msvsr/train_infer_python.txt | 14 +++-- test_tipc/docs/benchmark_train.md | 16 +++--- test_tipc/docs/test.png | Bin 0 -> 229200 bytes test_tipc/prepare.sh | 7 ++- test_tipc/test_train_inference_python.sh | 51 +++++++++-------- 12 files changed, 211 insertions(+), 66 deletions(-) rename test_tipc/{readme.md => README.md} (93%) create mode 100644 test_tipc/configs/msvsr/train_amp_infer_python.txt create mode 100644 test_tipc/docs/test.png diff --git a/ppgan/engine/trainer.py b/ppgan/engine/trainer.py index fa2dfa0..eed6f89 100755 --- a/ppgan/engine/trainer.py +++ b/ppgan/engine/trainer.py @@ -32,6 +32,7 @@ from ..utils.profiler import add_profiler_step class IterLoader: + def __init__(self, dataloader): self._dataloader = dataloader self.iter_loader = iter(self._dataloader) @@ -79,6 +80,7 @@ class Trainer: # | || # save checkpoint (model.nets) \/ """ + def __init__(self, cfg): # base config self.logger = logging.getLogger(__name__) @@ -181,6 +183,22 @@ class Trainer: iter_loader = IterLoader(self.train_dataloader) + # use amp + if self.cfg.amp: + self.logger.info('use AMP to train. AMP level = {}'.format( + self.cfg.amp_level)) + assert self.cfg.model.name == 'MultiStageVSRModel', "AMP only support msvsr model" + scaler = paddle.amp.GradScaler(init_loss_scaling=1024) + # need to decorate model and optim if amp_level == 'O2' + if self.cfg.amp_level == 'O2': + # msvsr has only one generator and one optimizer + self.model.nets['generator'], self.optimizers[ + 'optim'] = paddle.amp.decorate( + models=self.model.nets['generator'], + optimizers=self.optimizers['optim'], + level='O2', + save_dtype='float32') + # set model.is_train = True self.model.setup_train_mode(is_train=True) while self.current_iter < (self.total_iters + 1): @@ -195,7 +213,12 @@ class Trainer: # unpack data from dataset and apply preprocessing # data input should be dict self.model.setup_input(data) - self.model.train_iter(self.optimizers) + + if self.cfg.amp: + self.model.train_iter_amp(self.optimizers, scaler, + self.cfg.amp_level) # amp train + else: + self.model.train_iter(self.optimizers) # norm train batch_cost_averager.record( time.time() - step_start_time, diff --git a/ppgan/models/msvsr_model.py b/ppgan/models/msvsr_model.py index 3ee6fbd..4642dde 100644 --- a/ppgan/models/msvsr_model.py +++ b/ppgan/models/msvsr_model.py @@ -30,6 +30,7 @@ class MultiStageVSRModel(BaseSRModel): Paper: PP-MSVSR: Multi-Stage Video Super-Resolution, 2021 """ + def __init__(self, generator, fix_iter, pixel_criterion=None): """Initialize the PP-MSVSR class. @@ -96,6 +97,48 @@ class MultiStageVSRModel(BaseSRModel): self.current_iter += 1 + # amp train with brute force implementation, maybe decorator can simplify this + def train_iter_amp(self, optims=None, scaler=None, amp_level='O1'): + optims['optim'].clear_grad() + if self.fix_iter: + if self.current_iter == 1: + print('Train MSVSR with fixed spynet for', self.fix_iter, + 'iters.') + for name, param in self.nets['generator'].named_parameters(): + if 'spynet' in name: + param.trainable = False + elif self.current_iter >= self.fix_iter + 1 and self.flag: + print('Train all the parameters.') + for name, param in self.nets['generator'].named_parameters(): + param.trainable = True + if 'spynet' in name: + param.optimize_attr['learning_rate'] = 0.25 + self.flag = False + for net in self.nets.values(): + net.find_unused_parameters = False + + # put loss computation in amp context + with paddle.amp.auto_cast(enable=True, level=amp_level): + output = self.nets['generator'](self.lq) + if isinstance(output, (list, tuple)): + out_stage2, output = output + loss_pix_stage2 = self.pixel_criterion(out_stage2, self.gt) + self.losses['loss_pix_stage2'] = loss_pix_stage2 + self.visual_items['output'] = output[:, 0, :, :, :] + # pixel loss + loss_pix = self.pixel_criterion(output, self.gt) + self.losses['loss_pix'] = loss_pix + + self.loss = sum(_value for _key, _value in self.losses.items() + if 'loss_pix' in _key) + scaled_loss = scaler.scale(self.loss) + self.losses['loss'] = scaled_loss + + scaled_loss.backward() + scaler.minimize(optims['optim'], scaled_loss) + + self.current_iter += 1 + def test_iter(self, metrics=None): self.gt = self.gt.cpu() self.nets['generator'].eval() diff --git a/ppgan/utils/options.py b/ppgan/utils/options.py index 2a0abc8..d371d63 100644 --- a/ppgan/utils/options.py +++ b/ppgan/utils/options.py @@ -45,9 +45,9 @@ def parse_args(): default=False, help='skip validation during training') # config options - parser.add_argument("-o", - "--opt", - nargs='+', + parser.add_argument("-o", + "--opt", + nargs='+', help="set configuration options") #for inference @@ -60,19 +60,31 @@ def parse_args(): help="path to reference images") parser.add_argument("--model_path", default=None, help="model for loading") - # for profiler - parser.add_argument('-p', - '--profiler_options', - type=str, - default=None, - help='The option of profiler, which should be in format \"key1=value1;key2=value2;key3=value3\".' + # for profiler + parser.add_argument( + '-p', + '--profiler_options', + type=str, + default=None, + help= + 'The option of profiler, which should be in format \"key1=value1;key2=value2;key3=value3\".' ) # fix random numbers by setting seed parser.add_argument('--seed', type=int, default=None, - help='fix random numbers by setting seed\".' - ) + help='fix random numbers by setting seed\".') + + # add for amp training + parser.add_argument('--amp', + action='store_true', + default=False, + help='whether to enable amp training') + parser.add_argument('--amp_level', + type=str, + default='O1', + choices=['O1', 'O2'], + help='level of amp training; O2 represent pure fp16') args = parser.parse_args() return args diff --git a/ppgan/utils/setup.py b/ppgan/utils/setup.py index 78df109..5531076 100644 --- a/ppgan/utils/setup.py +++ b/ppgan/utils/setup.py @@ -19,6 +19,7 @@ import numpy as np import random from .logger import setup_logger + def setup(args, cfg): if args.evaluate_only: cfg.is_train = False @@ -44,10 +45,13 @@ def setup(args, cfg): paddle.set_device('gpu') else: paddle.set_device('cpu') - + if args.seed: paddle.seed(args.seed) random.seed(args.seed) - np.random.seed(args.seed) + np.random.seed(args.seed) paddle.framework.random._manual_program_seed(args.seed) - + + # add amp and amp_level args into cfg + cfg['amp'] = args.amp + cfg['amp_level'] = args.amp_level diff --git a/test_tipc/readme.md b/test_tipc/README.md similarity index 93% rename from test_tipc/readme.md rename to test_tipc/README.md index 3d4778c..4ffe955 100644 --- a/test_tipc/readme.md +++ b/test_tipc/README.md @@ -57,9 +57,8 @@ test_tipc/ ### 测试流程 使用本工具,可以测试不同功能的支持情况,以及预测结果是否对齐,测试流程如下: -
&EUEBs)DE z@>uq^87EIz_*N0(fj%TwuNpx>W^p{0H`=6Nt8aHw#8n_6$}z*O{2zrH2z+SE{a`s) zJw!<*@b_w>CO9A>oWkDRzl3eTr@aQV+k)w*)7s15SC3<}$)m!)4z08R@pvvQ7f4|j z2*EhY$Qcm|?(_lZALMMNf;3Q$A8e~DwffPf^NKJ4Km!K&?>3?)&9mr~t#5Q&l5pT@ zG0^>aubuH7ui~g=&nv)1SALe6l$z6qnEu8U5|b#wly^_4GNjP3IkH2NcZrFHhr3Qk zE_oUMvj&DtV;v2y2b^YZZt416<^N`g%7o_waJJ*v+6(TxdgqGzJ1{cEg_kBr>61T~ zvk1(yoL0XG$u+W9ONmY11Wz|?Dl(?n3yxE;x6&u~jOYKE`>)*VBJ9o$Az?ce@FAk? zEd6!wcuy?PH#0+?biH}}Bn21L@sUWng0xW(qSnN)WctKp3Xo1rcNuSuP!#P#8Gdi# z$f`Xx01;~+owRrlKl>ft4sGs%>p<#yu0kNkghBaq;T&VI0q_^eNE9|*zQwu@`h5VWXG?w3WFy8d^`-$K5EU#Qi!tChv_b%5HNT0kOTq?} PuKz4}Xn&;vl1t~jXOSb3UHRo?_f=U^Jt5tm0Dd3spdAp#nYsq0^(`xChS znGZQX*heN{4N)#LIOdio3!*HWB)no5he`HaDzOG z2Uik?D3lN=moF0;Kec>M$IQ36o*hYvJsH5V3GC=h-tgz;)9D`NKDDtq?Kq_FFQAL% z!1kR96G?wqQyJXcZ`pRM*=nd~GT4$ef>@y7>(}Y~Dtvw+{&qF|jUOwON}}?e)=Ikp zb12R6)O->9)RvbrJ{FO7)Lz?Xl}rjouqX^NwZfNn){VQJAh$k`3N>8NxBO^mnc1=J z;j7LDpveT%Xy_6EtNzy~uKL>zw9>VqPQ7i&yQ0=NqB$Y!r_&CFp6~Fl)n0GE`KZ?~ z#N%|C+BM!5(VO=l7H>ksbd_}re)9>@FJai$`lHwoAH>&EIIH`J8}j`E{DSLkFR~Xs zTYo46(1IqQ^7ti>%Uh3ECy~Ei*x-s;-cNkN+r9fC`4O+#6G*6e3z&)O#md1+)6S#4 zGfvw4Vo()7Z9T3KInA@@UH?|4r9Z9Sp9!eWp_khe5#j+U0KNU`xgO|bE)O;jFrNa< z^89E0`B#Jr4(}%)t!|)T=4w(Cp^rK|%TLFd?SKTe0anB#LNrR{x6Q(~Aq*yI?~Pl2 ze?x8C6&0;?jNPE&1X~?yQl;FlQ=oWyX49;mbC qCs-^`Ue&=fY(7*FO`aLQ!-(x9~qcLSqtiWIEo% z<1+vpd!7=RWGBH*Xg{qNI-EU~6N_t;01~EdO19ZbomOvK9F2MhS1&;BA-b=Z^71q- z^FjY3muNmdnq~l~BYdt5d1L%k2ke}DUn~v-5*)9E1(b<59+yjExtJw7w@jp0AD}V$ zdv}5+5dzl`iW ?hEZzWq7R$@rfvIEy;R_)=s`H+0L)mS^RbP8nMYUOP3Lac~9p z41p==S3h;tpD^Upl!q-Scz1lF3lL$OVX^c&7sBSR>YL|C7F8zjH4`^~dF2X82A~hs zDC*^r%o@Y+$`*R`^bUveZoxjC2B&8WzpIBiBxxIF%xN-*yLXP o?9AvG~P%s>z9{oyd{hzB@uN}_0+xFiK;O#fFlEyr>Pik19u-qD`|vN_TMPsa}Q zU(?mG`n~mXfR$VP*m9mA-tc8)F8emh0E>W49eC$Ztxw-P5Z0~e|7iId@vm>vdAzBr z&~+AR3~L`sqg67^(6$9Zy-Y%sbQu{%fhOsx!ZB)MJCm@3aG7+#n!s>3m!HE7t>{}p zR`9pOT_W~1FIkIrYGQ2yR Kx>M9zYHdE-0={#6dzmSVtn4?_fofUR zPe-f+iChLqhHboUzhSQfmjg;|n%=d^ 2u77%G~EV|wr!LW&+G6>kqe4YK^dW&N4yBVRp5#d;8WwiGIF79)t0l5{F zIg`^e0_mgj9-{{g1J&E_uHXbjUnfZlOW?)pl(GqUoagPtX} 1RF(x%&nJg3TS*?7~PyaXuZo18aJ|YZ{;yeyw}@gu63v ztPFoBbM;^%WG8toO|?pT%`d*ayDU#5r2Y {1TNmR_uadJNuF%%;hrsVQF`O z7ok5Dq`4FepgsOw`|#yOhUV<)&zzDs?6?%2e}{r{nmquHa!Gj~3-5DAh0`w7nFQxx z-0IWf;~bF+;7z68AU`61rQG|jax5Y+*Pi~IqSLkdp9+qfX3J88`gVYec|cFnsX)83 z*%Vxt9))lj|9wW-Xouy<;VaL }_6~dW7&hB1QvB!HKDQ5@X7u}VasYTEJAMGnAxGu9X?A~gRZ91?l2&C* z54-r+dN$)b@zXKWWvb^2GBDip=MuWe+Qwk-;N{qEBXP}Yr&i70Qtn^#M9$w93Z**R zC#dI@X~NIO`#ReF-cV-Q%5*^J;N0FM6=%$w5qF?Zts*+Y8PNhUW^0`M>=ZNMQ#3y< zVhHfJySumkN#vr-b5PDo2kiDz_QRue3B}H@s){?N>;_5?lPFqum0twWOTCr!Uv(&q z9`4}jJcwHGT6h a)$Hb&)fmX@u$TZP)pPP61R7k}1E>9D#3(}N{ zmF f}H9Khdq7D=8@ zG3H_T|LF9Cc~fFjD3bnu*+R=5M?SRj=M_*g OvtOlld^J_u09Hn+Z!|LR;yHY=2u-hScXG9a4y|~wHG9KY zsPXd22;@xd@(FqCeK8UpofIy- jaS;nu zVNsb*d->R0$l)T0zEy)oJzoGCg>I{T_-s}g!Jn1dMXZbcVTRu`2xB_(HScVe!w$~b zeync;Ol|Z)e;~%60k(Gq8co(+rlpA;Zt*pm*yS{aKv4~*qM!Z*hg8abJwnV66*|}; z1B}?p11CBTnkmiP_$QnYMxlimFEw*CX gTr*qH= n;Tq+Ac$a*Ad<8(fmocX9zM z+|kg_pP5I+yC1qI0yj&+P#yQ^m1F*HjJIP2PAm7ZXu{dw-Ls1UCf8Y`fXfPcEM(O~ zI-y_FZ~J~Q09&Dm;-K%Se$0@L4i|06vZ;RhZ03N-+{{FoB9uT*GZLZB>%ZO$vr#qu zelUH?OGsM^-j)HQYz!urVgAV&1Sk(LIXeKckQzJxof=>-5OzhB{-FIU@JTrALuSk& zLtCX3Y*_ 7o~D;MyC@a$i{>+O+M7X|8cR pAKBoX+LN3QZiDbyXCT zs7LfJNvOvj!^A0p6>m-LC%X>C9z_qg?vEY &3DoQB)Ne2dC&Q aVux>=(#D?f0Sm& zow(A|algtZZgXCZTJr0>)J#*)9a@(Ak0Eg{%!o(;`oGmItt}?CG#+tfv9Oy&sDP69 zzegNHFZ3R(ChC$stcUx3K RxG6(1LT2Hk@I#X_g!SVvAQ`dU_yd#JD0i7 zpo*Qs3&<{10FaKRNvqXhaxfXzN%4b~UY-3Bgil>iSXu^(e0)suFiytphpiZLdx9iV zntr@bEAqWuVot#l&!l1|JqdUcxGz$_!3+>Ge{Orj!n6)GhFK?X{_ZGW=*db?z~fWz zLKw)na=SK+w`Q-X9TV>Wr^-FvOK3 kD )+mk z4nlqYiV-ac@~=}Fk896yA^Lt0MEPvA%{usC=_4c@v&yJqnz31gTIb-XlLpYrz5<|5 zfo(C=)ER^Z@0FL}I*&vdQYzDh(;$2>61U*gfdB<_4qdXY-MoWJ)7M-;?2+hoX3tEC zY~LH6rtw?=d>kU7DCERyWZz{C!!ni!Vo@;?Q}pYF@st5xrtIj$-HuW+FOMD=9<|J_ zD^R8ick~B@qHxltukMXAjgn!P{PQX?`P}{cYKiah8?%4i=&3}B*og`T>8a57nX<6* zKDPzLNxG2OBf0|ACDojqcpVUEzBsBHTI7)SLGu_ylhO_-jgSARVDRDNgz)3|7t>!E zxNm4h^qt}0`|lKZ(C;!3$>jE+&>sDZM5FUI_{!__QdR!Q)pJsLeiw9l3wc3g>gU3H z44S}Qv=8|f`mA-`aZm%1tjHTI#9@}*KZ1N%kH54wVerEtP *t;U$}dvjz{)h z_lppkg2_jIpQoj-T8ND>&EOq-AaGoLRO7)>LJQ~SoQ!;>umit;2?(pQH_>~AQMvfb zrOS$>AcI)`@~>;250BpDs#VYzqH`BW0=BQta~A=qU+l=|mDUprtvfI-hUz!5)Mv_^ z9NYoe `VSxx}0g`xgK@Jy|6*iIIOe^}h#z z6ICTT{D%=d2|Z02Vbu4y`a`!0YlOgqsYWl%4jBea;2L-^JF F zy9J3fF}`V*1gJ>jH;?>MlPS`q6IIQJ(-#qsjih9)#{>3a9ATQ1=Cix}pUW*OMSCw* zJ(dmya_n7`q^)k$rI!}UaQAiLeHyWSfUqu@>u7r`6b%1CS-MBsgvj)S2pUjuo7f?O z$GS=#P^{@eOrhxxj81IX`aOgkUoNS%cCXCN5~~i~^bKMs;+hM@%iFc+m|&st;S?Ir z^c%Q|d6~((v5Cx1fcvV74Hm; zWaPdgc@sK>-ny5Vg}R&O^APbKFdiI-Lc+9oPPgsyBN;fr5fMWeoeLPlnjsR5&X{MF zSK*H1yFsW{ah1t&)hxRSUOD6kgZ+W2grH6$NtP$auv{}RL!RTM)`ziPzA+BlYmkv| zS=Hhj&shbVe8l0K`teCFX-SM3j!=9Aq+%J*5%vLAt;n
ZIwb{pfMKHJJt&@O`PF z_0<9T?)~ikW~* 1UGts<`2X9R;SVj zgQ=e4r%iuNd7weUy@WQX#}7)1LU9R=?IH0|y FeJ>Ol|Elu&a}_4pCj+%qCnA!k`27Z8TirS=H;DACH`L-K#|S}?#2{QgOIcz z^V0zGctgKQFMl=IWNlK5fq=A_b_G}P68HghLr0|;KK1japaeK?zC~Ee0|L19yxlCG zoVHyX`Af~t0p7s%hA#3@dE^IvIb|)+BG|z6>9;r9Y>E%ayhgYWx;{^#Wo${1;!`7q z%l8Eb#79&Um+>fG$v_S2HEt21zf3xj|Jw%ft@lJAw-|(QhCS?8Za|3KOkT+%+m!hx zqwf?S)o3{-q= sr!dJanR bVm*e%&Qt3_^ex+6Lr1*YXC>_ zI*fAEUgmHJ!@sLgqN#xr_=9)+wRuY-BA50Q!~eJ0Wn583Su+YnbJ>x_X~D7niLiE F(`WB8A43Ytx@fv~ExqxJS2{`U&oEFIfPi7ZbE`X6lLCgn_W1WxxU?ZzB0w#zY+9eB& zH?M htI>;Lolj`U5_S!ktb)?jc(9Ryv5io%XkYDQ@-sq z{tt`h12N%?b_Ap^hUMNhrt{hUB*zUe=X7lkNN;wY*`xYH?VoRZ!Tye{oS< y;CD~+%pJ`3 y1qgB`2BbU?MFb~rSK89{@x$n*&X{E$1%0eQ&Lm%>D56I!psrz}4UKSSO zO|KX&LLTx^_mU~@@>oa@p>3;h#~owmQK-~j0#ANEO|!M7DPNHpdxmaaHzvmzq3tpU zuQ}(Q#NOG-j<+ h78-QxxUFCiS)bz^FaELf9LZGZ*We09aVpq)tj^q$wC<@{*|iis pyf#>n-k#~V{>Gs$^NPG_#->wc(7ewVegn?hW8T2)6u)VFo^e^;x%hM4 z$_wEAm!%fLNUZi}ZwNF2v+nRRge+k4^PGJTBxn7Wd%y?=gt$n&7 Nn&1< ztk^cbI-TYP8MKJ_!5Y$ynx^>6aB7}V@yN5p)xQy)fHI6`OYr!11Elx^!_amuOaAq- z8xXbNt O0x*#|3*~ zzr;`R`tLpXq)0Ec#o(b!*x@d(+==Sds(ZfemCNl&r2ud?=E9Ha_>1pkOe^h;tkvGt z?;?|N3OkAGe!tN%h;yGTKAa;@-*Z~^ac6DF?Qz-!qEc#RE8mqXiGOltH3J`~nB)RH zPTlO4N;Gl%AG9zGw;KmeM>{%i^f@|jb5678+m(EQxvnU|Jl0uG)w4{bIG&nYeg0lh z@QnkNq2PnGJh2&jSnJl@;? gCUv_Tve?n4=hog4~rU){ c|X#N%^CV8 beY*GS_*W1pWMB z{r0G`)p=?5(sg6ix-9f`vpnL<9qkw3%D?1G$qfCiz|HgI*6=eS$eW=f=qB*+F!^$T z;;sOFwJ$y6Py3FBR7Qs6%2N+ `Ng48ys38EO1O{n(u|{fI;pz0%Kn-@4Ih|Plrn2BjP9+e}6=2c*z5e zI<9$5&}+jy8HF}K GnPmzqm z+d)`wUGrl^Ad*+8;jJ`5O^cN=+IUyZ=w-C$_QtN3(LRFOkEk6pe9~HGu$-IvZbNiS zQH4y=;SQG!D$mhfeg*%AgT`#7+YE`=M)@B9h2G0O8@wIwKaTm&+N`Nh|0r|E^~&}U z7BpzDn2gTof4bI-B4(WF-zz=7*Oqx*H$0PR83ws(Nqvl7G0T%_wl&PyIw?3fzk*4_ zqHlDTdq`Z(frsmX&VMSuIS;)XaQ^e|)HJgxB4pa)ks-{FVrp)^`BuN;)8l8($)9qd zd++7YcBm~7O3PF6omNWLf`DPaXu?$=R=8v|vS|dP?rkpcnHcJMxS|-(kR#=_oK_?2 z_U8j0w8C`@6A=*wl|eV+{EyDML&<|u1$YxP=tYVuRt@xg3$z_8c!t#qczh xTMcE0hob<{TB~bnVh=54| zZlHMj@%6H^MG8N;gxrDLP0zs58(H{_cY{Y_zj3;BS0O2ijl5=#ZFPpW&8qC1bgC_p zt?hu)f&&>Jr1}G<7ptuin4A}c$-c7 a8s z1Mki@%-A_Tr^y{A99 9z}ubQiIJeg375y{{{jFFfjafUs35>HmkOvkq(WeZxM82#7F|7)VS&1tdm% zm2?vk5m5=1h7l49l2QU2DUuTYGd{Cd*9>z|2dw&p69yn z>pDN@d3orJLi>q?D+Ka>cdzxf*YTy=kI>TwSuSBdi1u(dUqL0sv$n?iQNCe0Ex@|z zQT$Tz4d^S(jij_ewK2p%;6m@ipGEu#kFZ>5fJY|V;3JYAnGKL5Z503--adRCoRr$h zp7%3kOy&fn~* zN-maV$b}cz_es8&B#x&;*%Ax;a(~bh3o3#>2#sZstvHP-FL!saE)>E-N Ou3rgy{zRV9 z6;_wiaJ(h;dNIUkm(f3ga)qK}e6*5ULsgCfe$xq=6wWJB&tg|MGMAyfKoChNw~QK8 zqw{_KJ1ws+WVxM~VUuD=&SN8kIBj&g)_OrI>Z$aS6l1d9<(n~&J5mRs>l{q&kOPBU z?rS>; 8?qdVOwleSy!IdMAW}!mWrXjSCsR;3{RV`Qvwhj7(6kL0U^F-t9gH&@#;Lpe>Aw| zYL8Dj%6p8vdU@l~SZ~8$$OQEBlar;(Q9PL1Ud?g~i?W%DhGyIp-f8$uX@fm=@#34E zL|Lpu_QqpMlPD%w>!`z4?!8#~QA~Vfz(U|B*;{fq+|v8O29>zada%u|VbH1AWu6Ov zjhIAyXv&GfS98yhL-(I!Yu?vh BNy09ekJfzx2>AwsQDO z*@@KL>9OzG1#O=|b0N%{#VqJxPs`^dW^IKeu}<&nFzQiS74zY5VS-P!NG=zG?{Kzp z$2DjvIusxD4bP?(lz0T)_=6s94e^7pf4{V_{B+XXqBYQ?k&Rg4BV?N$Mx_?%tj|m8 zRk(8T1c4N-s(r+lh9C#zaj|Jzg--Rs02p$%NsSi{v2_<|KXY8x!ix_c+>|MIzkOl2 z)^=%Ww^j{;uX9UF-3T9#E3EUv`b;pOjBPGFdn*-li>f|#83zI~R2^J)<;}qI8)kBM zW>>1aoxlT<1PKVat%xbr6S}NI`8a0s$zTNz*)T$-F89-~g93;{? zc&(N4Z;nWFIsSK4Zl#2pd4pHZX+b%w4}6KS-9%>+ro9fhDZ4_{2<9DbubX76Y6siK zoubhp8Sz-0_fh(IJxHM*R^L1m(QGP*KBG`Z`!H>$jaXir9SL9Cb>VjN_P^z~Qgt)l z>pETQ&p5MP3uWP6&_QMk9xWf!KH6(GFCh-|pA8u`$?iveD~(39hm=$13h=r|IP7=L zl}vGjN~$5p5^TZH;ygtsWLw(`Snw;Q7}U}XI8- %WCO@i98L#`ou$?jE21P$9xFW!h-)H@SEB*TavjBSZ=KVOPm|wDZ zpJ_7`&%1WocLsZY?O&?rd6>yUqjXVj Oa*n(wh{Z~^`3MNkn_WJgJBaEKB)PMUiWY4Cz zLPT?B(ahp>Ber2xEt9pF3Z;|{{mVSdeRJ#B@-1Dtji;U42uDh1+{DecysJD5KdZWV z1JXY2gEn|O&(e9aC!D(GSH&_1^Daq$ITgh}aHVtRpANXxT<5KwI!-Iob6!&yJ4F7c z>xf&7uX(y$yHd%KBSL))CrRV9OeW8>htN~aN!(J2k@tjtcF5`)qsMwA<0!y%a{kC_ z&ci7Gd0f7qC8w%^%*&2M(T#WKJbD0*6a$g=>%lL0vAw*kA3vN9^b}-$G=c=rXXsn? z!lX^t^Yri4-WZjPI&)p|vAxN^<#VSVog1c}wY1shm%c$q(JoldL6lKh>&m(hR=z&P zZ)4nkZbS6nT9b4JALhy30Z>gXa7N=XkXFQI`%xPwarN(qUvDoiEZqXWKP^R5Rf6%_ zGaL`jZD+SI>PF2sI}~2;-acxUf8%YOZVzYLcRaQ+nM>5gKR2(iiqi#)1$0Drv&2YM zNC%gO?EIO<$InmxME{Y_b7G9?fyX<*NX>=Dq z`l#y!SwB`5NN@OF8$?*FV%LkHUM9_RP{$nG1Ibm5KcOFQ>_nQIBlyX5e5X}qTWg7z zcOKqwF^m-KVg4Mx?^150y2UbwpdOCbUVQwaL6}OI_kGzY8sD=jA=mxn#}+DFWu%e) z4|-9(Cz8`8#(U nKdubeA)SATZBA}5>kAL<=sDh#c ISj8E-Cktx006v#C!EO7@|5ECb1Fos^ zJzWnL+7iM>Z1;&}u Q1 zQNfNStSm}o7kw5O^0JBBQTwAyH7X%`2} ebWU5`zl`?cx4 zjV=IZLA*d>dSuM?)Lc%S?-i+f=5gdKiaCDLyax023U&pX$*~Z`M62eAFNOuZ2qsSf z>b``Q=HBizxsN!E6y7s&fiG@+VcoYK@7Nm5&q;R>hch1}0)hSkpbY5%$Kk#C&^3IO z+n~3XDplq )L$vD*fu+7o21ai8KfvCybHWdzh2yO% zGst@ZuccM(?L+tlmeQHrMn#>rV=j2u&w9TYIi>MfNMEgc22RD*gZJXm+|PN_a%hdL zoJV=|g~HVh^7~vlScq$xz-OpG y(7-9lP_p%>^+M5B)iNYW(`!9HDY*o0M>sve5I zh&5iU^x@m0U4OGcu@*GL$2JG^(AzY}QUVs))7%tb)@kw;q694+1Y^-LP~E>GWIM~M z_c(V-UQ=U=PVuy`fxLsXoC61>E$IrwxV`prp>*{qG)^Zl=wSUw2fxuqDrx%+X3k_| zjNzg?^umX4o1b+dwMzx8qA@H1Wn%`lg@NMe^`+1s@WQ>0l}P+P>D(E=7%=~-y_7dk zv(k=Xurtk0so+!Fk3O%-6LjV{G*D)L<`-LUUi%!Jpw~3Y5CN~FFBp~Qh5uq?29LFm z?V*L&&nj (QH@RS{xV^(-~U^n>V|ldi#WvP z9egkfz<~*a&_7g|%{!}}{hA|SkPG?FD&KxyJU>H2E2FoG`2h{8LQB7OIgQ`$EVJ8L z9hhWDSvN>4v(h)nSbP`sq$Fy*q6B3jU|`?3;-WxZ%iOYlA9!icC0Sx*_d{1xk438& zj}g<=J+@2Yo;4j8?qxhUgoiurX1*^xRmlC$IGj7R%gDs=Io+Co-PjxMoCrTz$2wuh z`tgl~TzOS%gkvM^Xd3(TW=U M*&aH`secb?_Q;#QgeLWCdq% zt3Xe~l|I%b=*g6uhCtNlTd+T#PGk|T3|rPIJ+E8z{UVT3W_fyJcx%V(pC#6IcT8dP z9xOk4bn2==M4T^A3Zl7T=vES|<5IDJ*-Ga0prop)eY(r$llxr%xD~DsSVSG2EL{wM zsf_csdC8v&3C17s;I5@1Pxvy?M_vG4K zAaRm!GDia@h}JCLo1+s~VK@3tER8#&Oe`z#Z+% nzD8f>Q1#tl%uU(e z5oEtS64C_ZOp~gpu6M;$j8rQut>j<^nPl1dn^J<5K7yE9K;Rejxj~yBqSV^ihvBU{ z^K$oTV-7%dO29S=YyM!SK#K`vyVQp+vz@jXIAR=O6u|YiwO?BU7dyo(o$Uh_$N8-P zLvg4P)j&3{0I(a0>7)A-G5ftI&pE^XG(cuFydT9z5Bqe<>p>Mek+{yf(ySNn {5v>29?Hz>JiA4alydxf1cX&W 5oe_NFm6Z$%j+r6b4c72d8Z>qwQD8hw?+vp*>JwNJa;XbAM|Z=ZBtGJ{{D7 zpi10U|6$e*$a*zrTs!Yms}?^&Yb#45AST^%>b7^kOuI^Mx59JX`>wC9xlIVo)-wo0 z#i)~Z>|qJ}l(|hG6L8-$0(i>+co%B=OU`W3OnnoJ*e9o7h4D$!e@20E(o)|a1|9di z?JB=MAF2YVtHG-d{0{RUU*gA0+bXmq!S3#wso#iGP0?ir)gpv<&wK(S=UDorWq!pJvKQe$z89Evp`Q71b@~)=$$?1O~4D6-()i={Sb$&NvRjwWC-^&<|pV= zR4^9PY&Ce>%z^%dA2fb0A!e_N8f>`eMA3~!)CNAE*VU((?KKQ-f{G?@i4QG|Cx*ZJ zZW#9R&HBB&JPOjYVKU|WW=e5^@q8A%JcPf^DfAxRxd$KdEb(3Qn}(;r1nA<2$Lv 2EnhmM!i4CtyiZiWGBKEuUrAAX;s|6D3I$|ED 4ja%b%Gw)gYMFO%cuxI_{9Wwz4^M>v-dwvtQu`uB7D%&=d zz;nf{K+Jm6(FeYeih8#2#O?jtAVH7_eor~QAaAE@U@g%5E*WPG(7OE2se*cQwc4G*mV85qI|Hg4S`aibX$%SgRLqa+I?EO4g~Z%kbZ*K6E$c-$B;ci?)Vs@|k& zGiaF=y54J3ljXgM{_MnwW%-VKZEm+Rtl6B~KCID|+`Q8q#A-{lE@EZ)P4Ls^rpNPJ zD3!ixpeMCC3qL>X-oTGMpCBh8LbUftzQKoXv6{Od!{VF&JrLs}a;&xiTWf1YobN86 zT=xQlR8O`=Cl0Y16*RDpX=}7&2x%h;(CqlyB1YHGpBE9{E_t7HDNJv!8PJrUiTIa; zIYW~Xn2p_UnfOB0r#eK$7gBHD`K9^dz2@*geU$^$lF_F*x`<|+qAZ5f=$CF*126SC zHEzihG#?v{$DQc11l$MX6kP2(a^_JdPt(&8N0h;|$cao^BBtKWK3f8HhI3@x)7n(b zHV)_HB@+9^@P{lua!B5`%SZKOF^hyoi>)$l3Ipu)=s&BN!7_oO7;N<5?FN0#`X5b$ z_KRlZg`%Ht!%k1Feiz!_2Im1|n}+$K6YmtC5r!IR0D{HDP8KhT2Jvpqhp`@_D9N(e zhjN0|1AV@nCr8uY0XD7D`7KRnP=WdErL6Oq9T&!?0`e;(Q#BwJgfV`&ZlU;VWl2R@ zBMNp~>!9Fv#cN)TvUQE-Fx*XUp$3+D%Lek#S$yGZDwC3l1ZeU?!!MiV+>el1AO7WW zAR56meRQgxM8R(Djw_h0rAt{~L9Ks8tM$4Dk+bvy-W p)5o}RoOi*pTB@(8(Au(|8N(Ddm*rCDK*f2yG_?FsDp z$X_JMPMud$6iS5Rd`^da8J8F-(ADTf{bzrFUi~6>8mU$AyGC|5*)6;RdLdIjX6JDN zN@Ws(XQSR!SST9dt7{XUnt!>1P&zH5473sbP%skeGyk?v_?PUl{XmB#rIm7!D|AZW zh$1A!N5}iUe)u!Be^5m#VfOYP4Bw>-DO#N=`d@XFFiApnY=-n9Dijr(o@w5@xfeb} z-IUwVI(&LyeX#Pq=1M7tdzT7=s+9SE9bM^rdN1F+mJm#l1KnY+=mK3@ROTIdahLzn z^ Uzbi2EUE5 zDqhZI =vPKR^Ke(>cD|#57-fjc zJtT(UoYc-OoR|CHrKbRN7o!d*5mR?wm#;Nu9caj9qlER?c3A>`N-2{G2$Gh-^?+B4 z87^!)T|ym ?NyGU#B~bBdIBm=^G)zXs$+R@=6Z_kZle z6GXc)&GpAo=#& tMaQ_zrzV!CA! Q_nR6zHC07{A{H$Sz(z5 PfTzHG9 zF3`lH7#n6@wpBS&1G RigF>UTF^oYDD1wiLQap&=9hz56N zX*^mQIYsJ|rSzVPx|}DhXu&sWU?(^WW~IwvTSLyn*JXDx=Rtg6?(87iqong$kSO5= zV;U7WnRHfr78bH)MD|2%oufHKaHgb}!=xvt8r~)!6pqro$WX>AnYgsVGL% zLkK5 ytp z^GKx}WBKoRdX`rd7nnX0-ZT$n!f`l9ZJ?+VqpPyj!ryk$ohYiDVo^x;g7>peY8p;@ zWK7;~Q$1*+_|_#k#nTa0dDkQZ`cLVB*7;cf(N_+BlWZ60$AelWxDs< &f{a`AzWy-2wWcnxZ^+l zd(&zewJdM*RXRyno_HIzzx%+ib7Q1x@0Seevzz+1o3GCg!;!xTBcci Y zvWyV}b+S#)#p^z?RkibesqP=<(cYm}b>Q|86n@%0#=-(uD+JI%5TE(TT843Xfn`Em zu3pI%h+c*Cx3^aee^Um7RG-`C=7OdGWPa^)RmgEi#M-aLI2 zJ7q7T)E65_l-mSD?!A&Cu=AL~d){npOPaUUu(ldhxM~67otw`f7Kc(XXv7bW%n92r znah6yH~UZb5c9I`Wh9=o6i}DKIFD)EUE+3vhY&q0 z6bFt 6n};}x0dARc=A3cGVXLI2;(Gp+H13)C*6-~!i?f388qJ` zM<3g~(raD#vgWhNy%M9;_~|{(US=_08vgx21vdSyda#oo0)(Pl7-^|~_SxXF23|Pt zzz+ia6xj2VO!{F@?xHGDPnLw_?4I07e*e$xOE9RxMLsEBXk6(A^}Q4fUTV`HZ9T2t zZyAE8lv3>F*Q*$fI+XH!&%Cb5zgh#4m<})FP_CrIiSy)VE#h{ej2NoWtCVa1dMTj0 z`5N!&qIYB90(#ZW?+Wby1 -jx{qd6OS>h&NIQuE$5r9YuI?bpsVv-Sp0N_o zlxAqrcmZ`K@FQp4@_lb;G^}Le2|~^p2V@$w6VKan$dQ&h(LMV#vh6=Tq$oy0ksZ#O z)HgrXKJ|Dl;dL(?)Zd`DWSTn_)p5+@V4uB~hWnmMRy+T0D+9pX7*B|h -`@G;!9PKl-D`Ozd wthj4nC`vK7>WrO3X(|{X z`;PJOECJ9;d>eET)w`fOK-kq@@YJd+vEDb ;QE*)D^j ?^cb{acwLH$-0NcN!AjON^a5 z*e} )8a$yt98FYNy*K=G{b4-%{oZZc{Zo?LW|hq}KPD%^5iRF{z0Cczfvh3cNw zLHlyu%X =6 zozy`z$e|5ir1Yp_W$D8t{#4lvu5hI09Jf@59HAJwOIuP2%QdkAm;`g_d{Z|iGrL=2 zk3SbAPknXhxx#zXR$5##SjIjh(Y`W~Q`(wp9);E~vg0B|?4)}=Lof3MxKB@@RZ>(J zW*lrDbo lsd=pdEdugED+jmaq YfkeNn{^e3g>lyNK=GoR;xwpAY)b2vhZUUgSB_az-fYKgzdY6Z|e} gXI}LAjE#AST%%|n5tty3W zfXXX+pvHK}$b?QoszI*j?Mf>bSz%Odo(o|*v)5GRF5()zf7d&EJi!TyM{AU=IQ&TZ zp$Jic6Is&xX0PfuuKTmc7X$WKV*2{LCu@%d1&H!`qwH_Q+O;#6R=(9v6!yjICpj|b zarS8LVdGY@`f?u_0Ms#`8daM!( 6+%sxa<%OXaA((}Sw73u0lLp)pP6Eja=zKLC5JRW!Rsj;8j;D}x&*n;tF$ zS{*BzYNoMzg}c_Fxq5Kyr~y{8f|JV6aqGc`Wah&tzTmxZGq~bMn#Wf0jHR6DVtKD+ z3roQ;ov=+Wht~1NFS%YIWk&rc1}fBbIbh8is6HW|S!9}PcQ;oBVLs(w9Qxr)F-rF= zXpw`u1F^-l&{a%RFCxj&z*J5tQ&jIam+StDjkRF;&F8XD?06W{3xrB&FK5v1mlHp# zrTBV>fP(e=SvM-3c@ud<(E%Z0*6O}s@YzkFwwDMzZ*4~y)&bC6r34xPYuB#8Zmc>` z78f%*{VT&mIQFlFxSJ(j` 5|ANDL-&V^^@d8N8K=e-(`-EGh!9s&*2Y-| z2pk?pnu1eJ^hY~;{JDA}@8H7AyW2XCekd&M3aY1;6n_7 4gFrGZ^OWzez;1sA}wy3_5P zb!Tbq1OQG;h@n|#VM !b6KsGhAP?ompbvR~umew{%v@@5S<~cyQH6vF1Mc-gJ<63aEcQkS&=l zXt$UgUwMW1jacyB@!qGmMT<9csNTumYj+iJr{DgorlgJqa*aC_ksGKvP=^N%j)tBg z==;_mI(h|h2c|eS1m>74)uC^!`u3@KLRDU `t;FI ztWto@(}6~8ZqvU>BP(m}!$hK_R2jM5&5}o_%UG>>p?H*sos<;8FtRxw*Aj%QLz; zIWzdQJTFepxaUep>yMeP7=oZ zP4Rk9NUrpPb*U>{V3)k@KPxMnqxhg-34Yh+*<^onT1Xe9t z&l3d|l0fb1+twFd61IOP+>EzhQGLaLO$V`K>NY!v72`K?l@Iy=ml-20!oA=nEy^#o z?sWq-g^hAl6F+FMD-OCb`0=)9T8$%kS%4TjmjA9sGJy@!_D*w?zyeA|Mwxn6EX5s} zS()tVo$HA@Xp3_?B8~s|lMB~%XEjISOze|tuO3)obyYGORx0bkbw+Z0@%`r7ytOSK zZuRT9``#KErDr)|eWxJ kH4ffJcpY2Y0D{KlhM6O4GYY^@y&?*E47> zy1oF@Im$!$j60n7Y{NnBU4{#VTA+{sC^k&lFT=aH)Ti3o%-(BTsGwXK2zr&EZ)&bq zaW1^|mW7MhDN+i%X?Vu|_x Et9yz)ia()X%(Lcjbm?vV@Jb(=xoPe1q@dK%uZ3j`x^AcOKx zfU`?d+YV%oDX_PlgPo(_%I%QOBMb@a_x1J!zosaChU;XWO7v5EWgk7z;0zP#@>t9< zm+P)S2phbbgf;)}J7rNCFL}LBIxlhKgJf>)ExYB@{KVCw8;)O+LFb(`tmoijR(&eN z+7~TU1@1w>AC%&*sh>dEbARq2TGW#5!u3N;TNQucae7}D)K@{5w(vV@0+67w0~xGY zW3o_*8+>*W9@Y5tmO>gD*&)`B(F;mOXq-;rf$;(hA*+#{#LRb1b aM$FG zFvlV_8r(&@BYv27eSh?8mVN(GfP?GJ$ZV5LK_ hx`m8CsB4R3+HmG~&M(qDOCIKtvtg(JegXy=-IvrNAM_rK z5#lQ}EpM?$SBSJuEGX;`K|6+f31`%MecjCgQ?A_`fac#u^)$7O?0Jqm+V>+2o|q&p z0$JjpA-*9Je=x@$2uO@@=8^=kjGHurnrZ@PRp}ayGt$UjI~`eOFq9Fl&Aaeq&7VZdEzc# zWbyoZ5FlCc_>rB*W5SD1Tt4T*A)T hlr)=rBZ-hAvxD4Y2kE?hz)h;eYs9CV z_-aNqO{X8>dt!LdN6+AnrtyS!(MKLldO80{ap D7dOz^B;pP% z33cl!uZh&3`NnP#41QPl-`eojoUW2MK1z|={qys2;*~FcN;*9TQ9UXVwTjA_($7pz zP2wiWZCa;c4xAQ>{U5i#(W6@~ic}BK51?!=T>T=Zj>QiR24!WYe3d4kawqoM)Q?=k zy|rerryh-mX;tvqw@~NEEe!i5Wuz{L0+WwJ_n&e@o5gds5hgFy2o9FFD}C%);{VH@ z_tsi6$q;b=uT!$W8|2a^#&0EZH5I>!iI58THGn?PztMp^7f3G^&?*>wR@@U$xv=N0 zlg*m&)xts~tLiC;(L{OoT+PJ(hrb!D)jt_>2{X0tzHDfxDhaJ )j%n&Pbb}4;?E=Pa20px%kGdfoJV?%f(E89hH#8z%Glz}vQwRO($yJnGH`;G zAw3W?_YTJ!7}evs6dAwMu6K1*`3YZ()|g{Wi0trg{ZV9$oddC-NLCtYc*RhGTHDl_ z2FN|hd&0no_!k{jhm3O8(-#f!1x81PDbNp4j$9LoDFJFxI#id1u~2)YGMz(_a(7WV zamdTtq8?x=ZjO_>*XQp$kee!HNs17Y-uFXazJm}yhFH*P-m07M&ADHJ5sR{FIwzTC z-g7sr+qbULSVBPpJV9ySY{dBms^I9*dkpt>eyzD@IF$>>pb>wUd&I(j4YubWtQ5<_ zEGC|~ MmPp2V1{pMog)lvq@@?{?#*eITg9fk^>Kk^ zDl{qfB2684br|LZY1pF%UCP?S0Aso9C^-jWn1rLs3M~+-pw8b z1AbgJh|tv8|5ALUkeurD&s;sqf5b_kg=R10u*kKka>`{~T%AJl{jJLbCF0qvJb(KL zC5fKmdb{Y8hSld(uj>oh@vyCC7AS?jVB>}b!MW >q_A?J_npVe`OQA({vllhkeIrOiEl{9)6pO$P{&x+VCxqz!ulbC@$Wnx1 z&ZxA&f!G_LB> Ik 9qM z-fqv{5VWNefmR#4#jwP?_hA^d77kEboqE(76!Tk`lq#*-BG=9NLaY*PpM_c78+V}W ziMzCZCp6styRX;7kZ@0%3`4#Gw}YPm73?4rGhykARP!UTzBM)AGII5VC?i32l10Ay zcDa(q)`kM^H}aDB@o!EOO2r$JP}Vw@MT_+w{sl=?Cuv6V&ma#lB7dae2kH%YVzc_9 zuwwU~Y&|Op5+};TCeR`Xs}0d^JcGKLNCpx#y0nGO)jlji5jowSeR8^1nE*nD-lT0` zvcDY*+jL+0u%{CvuZ~(tYk1E+-6Ok&xMCl8Fws!a_EIYjU?1RvM09>KaXlH#9vr8} zz|O5JxY 4Cvo;s!Gd`sd^xM-+CIv3ENkyO!R~ol_nl#@t9hjn9jY_(s2p zTXS|zn+8oaRwR$b`=chd=FiE!FGsxyZCpGN?!A_79r1^+_)T+BJwxQK;@wx@m4p_g zSuUAbS>JZ2F23)a<@UPGbz8%ksdT2y&he6oWUgHHOp<-2l)wJRhYGnYA?&=<`1q|& zoMgr(gw!?QlYsHh=bH<%dZ({6=sFi$9S*Ql5)F1p{+)_q{j`RfX<>!pKz|3R^M3oi z#9_*q8$kk#dfVxcqoj4S+cz-N?UT>;)RkMq0>nIHO7iFQWq=;Y6{Gav6({onk)mrE ze5bOZHDvoji+`udzuA+dKMVoT4+;PV=O?o}$tB?AT%aDE59_jjg?JY03etbZE`p;b z2}+C)h|fnQy7|>SuQ)e;-Y^d?T0?A~$Lr`Abk;n2k(oUM55In3xf3=EykNnKjo&(_ z)EfW*e*1SJ9Xg%*bNz%%KT1b74}_aZ0tnh{ffQ~h0r>`7-ZFvC%>1BBN>#fQmbJX8 z^#ADDE`-%8iu8K{AEgUsZOavTLXkrgo%>mS7Vnz&u u35aSf;uEOxEF5H^=9pz+?;oJgL<2vu;=Yz<4(=HfYe zxxF`C@00{jU(_i|L27#Sjg-`v4|f)kDhf_9YmaCEK9VT(2TRHOt(NrAheM;+CC6}^ z!9&|W=zYj^`AaW!st+B88{w=&TmV%1o|4008KhSA@l^_z)m6;ck-SIs$*qN-eXX*2 zfwkOh$lUO{9r^G2d{#Aritds$+>x2@ocB3sPfVAW1+^eT$rmBcy~H4e+fb2`oUI$_ z^$nI3mvw~CW$FTn1CzIk(B9q}C*ee2k*lvxC9(_Azl~vkme^sjqzQ&NqqG9=5HLCa zgz*Y)0m)yzN&R=4Hq4lGjD_+%IyJCprqaH&q~Gj#twDi)qTSqjwkb3XOR7gD0OAZB zjX|yEG~%)UDlq9(%#??~ThIDVuwE{QG8R^dph~6dy)Z?@1yHH2?RMkK=x$yJi&uLP z_ki6*3!`C0W!ftQh ;4HqDs02Z7U;yrVjZ`Q=Wp*NN&H~_W{+fg%#(?ryhZYEE&$jVSg^;(u*fPN&-jo zF$K>_+Iy=EQ2sWIOy>^a?0K`~?0)Gj;a5rT>%j1q^ZQZ*{pKKemNRIIGLqJb-vbWW zhG3%xpVeG5ZLLjCbn-sUrV-6Sd_TM3G6?PJoq7UmY3{#3AQ@aNb&-zo44{-3JahQ^ zElq#<-{|nj)J6)6ZOT(y1~hnwxpdMyC-yM-lW!Z7V3+neX2meOCl_TdNysR4`tZw@ z|E%+ue|xQIOaX|m!s37as(Mi}rZD}p>e|jjS*x$6C3p1sR30e3KdYi0ahB!I2d4M` zaYVMCeUuwCIDeeu` 6d{<9)oSu^PEeO@x% zQ3|+oe-g^A=04nJ`I#k6@co`k5bgoi7Be+3z>2>%LsI29m3fUMhq6DW2o1H{Eqe?3 zzk82V)`stDC9>Ah)O_r#;n&nG%1*CAo}F!n)1*7LyRdgiK&t>tvug8;PXo;KBb~ve z>}lEr7u2?ln6qg8;P;N+VA_`Xa)<*#dvid|QenQvniIE-5($!9d}7dG@m7|P^POUX zz_ 8#eP1H=mR30Z{il3#`oiTjq()I7eO7;V=OonPhzgW1mo5Z->_VnCZ zcb SY-82E)Ah=)8rJSO+M?ocA}|ZUDU#hr*F$+7#s0eRU2;&||IH za<;86p9k@w+VUYDjW3=D&1;sUGgonz6^P{@k@#b;tKA-A(~-JfImkpR>@Xq`kDZ^l z;kF;nzIFuxzj|<+ LoGT|6;9&GBn1pXO>9%Q8c}`QBUZ zPww!c6tK-)l=4$x_pq33GIH_?Zhi&CcdicXbeVPksNN@wrX7U?ENhD$sy06 RigctYjMep{>)5oy&6V!eJ?K7|O=7X9qN=%0(CTqWsi6ru9A;VabC;v|!2#@8!XTV}chj}zU}Q&b)L7%HT+KmF!Rw$IqwO}FDK z96xh*KH815x|MdiCOsvOarD Lhq7X<@K(l*_EFi>;(w0o=ray40C5nHp{K6=rRl zq~+0mmniEo7bc3I#==73vfXb5rNu*(y6@KG%$!RjZ3H>(+UdgPcjj4bYjkO(c<=h9 z$baRC%D hB zl7K)}q1ozHA-wN?+9)38AaZ;rL@!!LvXY5=^V6+`=r;ZyoWRiOZ*kZ`^@K29sISW| z$ekx+6DpejPBMO8e~0L?>d6~Ljiu<0`F%M;0PoUj6+Lp)(MgGbycBI)j VYC*(7P>QGpbJ3)Ea`fMm#FZy~-= z^_RS7Fl$m|yWtVJT92Er9 *2dk^&`Zjzb}bg;;DJV&zXq9v`tdM(Zy6 zT%aTVqChhe*JrD_!le1aTgx{km8DI%;tuHqICYmVU>6dZC+Nex?Y=&UHnhD5mlvpo z#d0tOL~TR8_%ywcOS(+{&Av7I)Kbl=uS^B@)W)J7NmCM!MiN0Ej_DW126)wJu;J?+ zyePh;D^daUpKF`f?^^j+jWfvs_Uqce*GmDD{o0Yuk($}PPOm6WF9jx_Nl$0I*fON2 zWSHkW-q>SPS-QNIDN3%tG^DZT _zmm&MQcv}CWU(kbp zXBgWBgKfVz3xPgaBSmjg?eH63SGf=lZwG0HIFT)rI(J*+Ir`6jJU@7%t+CKwP5v_C zXUMXFW WQ8u&xeVZr%M$QB%_ZU z?*6vb2;NVfSc@-s3qkU%n^398TNC)2%bcI7v3trP%c(A8Xr$wPvDpFLAr?GZwN%&H zF`9E76-Y?M7r-Vh{Wou4u(5t_yWhd}a4=7F{@tJ5^Vzelw8`RLTaWi_2-$NFSpyc3 zf-hW%n2?-@H4&-9B&bi SJQOkCu<-(;(g9M@{G&k*EWvL zZICSV{-hAyWR+vXpC3t6RNQk|zC&gf7zn06dV5AIunt1r9|$5h&3mcCQ>%EJ%ATyw zP;Lh@yU+m2ykCrusaez*dSzgK0sVoN)FIC(in4S>%tAHa=cH4kd)yRd<`4__$m=YF zDJ>K2-MAOFvB0Quj05xZL#- 5{w9Ou9`pFb+jrk)=hJ zI9gUPwEVw%-wg%AqjhdC3{K{?B~?Rd2ab3)HEvfK#THgf@mWM}@<872yf*cfP+GyW zB1Tyj%hrx!)eY+*wkP+V5hIFiGXgVukr|) S{r85*O0_Y+h}apl{=w?w z6qc3#=)dh`8lH0+)>SW0Qa%Dhk5f)^7f_c&N5L&?KYcJ<)_nEZ? b`If($XOzF@#bALnt9Jf&wZaB1%YuG?G#Z97+(0p+k^Czyzfm8G2}>LwX2lh8Sjs zi97HA-uwN0Ip^%X_F8K{>-j}S?SYOI;EOTvuuXRY^qf?FSg{ls*mNbIwwx `JLTuw32mz{$Luc`!G9|P9~42LzU zNzB&Rn}!K>>xuG87T2^9cWjlQ5cF2$IYmIMWTb*$RQrJ9<7>VCNp6rVubXCkz0cp~ zehcEbd^W@;BAgENy#JAhF%^~+^Sd>t*zeb*^Xfm7#4xg{w~oytky>}si|x;Us{MBO zA0dd08v8r;90!q=DH*Gizye#5!{vg3pdwdYUcKTBjoZ{zdgBgJMBgj-XVF%$fAX`Qj^TjyJC@%7O8!#C%FWZCHWrX#k;Vtx9T=RN<9 zjZcWe8*luwm&UKh*SR&(GU~N1y%+p!C1(}YGxA{nQWJT1Dwltdfpo4hL&Gb7Drr24 zcFr$XuWGP2AwYW67OmMdqZgY<=kXv}<03C M?nfoO({1QnHcJM!&z=^{uwJilg|-tnyRCJa`lUb)MV z0aWn-{9GQdU) o%A|TE3gUdDH_`8(9fV=x(smEIN8b1}^ zLpJEU4b7bCLs9VcA %NtNEQ+>5MpcezbIJ$So95}d& z>!o^AS2QU2$6%}wFNHcYFP|I~5Yn#ZYc Dyc%c2mFl0u>Y z*eV6^`uN~O^{ATRV2=hip2eB+=TDcS7bn2YDXz0fna6mq97aSRAEMVVyMl1U_tB2P zJAj%39gGi3$-RF9UVasy_0cu#_#Y2ZG*& ~y{T`kW$xYL zEoj@!uI$NwOxkM*UegtvU^?C!O=d0fmf--Sf#6k|fu9(6MJPCw9!nr2Kn=e#zWV9` zhy`Fd0deQe-W4GMk+bKmnW2I~9~53tMJN+fW~`sv2A#ZK{t2 MhzPhCwMf>EwBW9kSAfWlfeHxblj5?`H7s$ frz9T ^lD6x<5xTKce&@@88>~N>e%sF!A zfd;Gq6hfqt*^xUZraGn0wEC9VrT~N}*I}ZFQejs(qcWdNX9YMEb-xLuRo@V{H>i$E zE^*or7qIMA3e0Qz|6Tw&2Un3%tXrHFU4vU7t!6tgVwhM-YeUFmr+ku~4c6Wy&;0b- zwY8C)NQan=KX+WbnY;<00m5lv$t)$@6#T7XuJuRjzt^odT_cK+0&fF8AR0ii!wt0> zEGf&L%|h@Z^3Z4(F(8H&SjD)v{XvB6DSLfc%{}BOup1e|6t5Y9e}BXCBJ(2fw`}$y zb)++#x^nq#FiLF5OjpA~p=Gm}^ngf?lE&t`j2AW|_E(MjTWIY{JwJ)_-sDc_Jz-gh z$-ex=G@UL0^{St2_b*TXHWPA({W<68B!rW3A|vj7-UqA)P+n`+TMJD3`lwyH+tA8% ztMt{3?DJWe#r8^(n{|w4Y{yR-YFS!E3mGJR(xj|)T3}cobL#Ejf&%T+v%^E#!?3fo z>dRXy84##w<5l%8gt&R;hHpSe8sjYu?zf-?{8Y;?8FTwBI>z5LF_y$Lp5VeT7D(1Q z1=MxHUw=&k-d2JiAGQ7N|5GobqLBeqbZ_nkOJ5}9C;lj>KKr*S*wRmuA1a60VJ+-X z3&(6j Z#HUtCGiY+Suebn`0T>pZZM z%jT45Ay30RP`E@g4tLUTqJmKV=8kdNS@qxR{>`TzgdC>}mN%J=)a{%fA4+N&Pb=eY zk`11MjkrlzN#6Y;2pm@~u60CFSvChIwoB7XE9%7mT@ISV6dNLz|A~QtAbkH&P~z1a zPpE-r&z43p|8yd<*Z!Cd(8{wTlat$s))a(3bF$Ds;rhl1&+6CTsc#d74e+~QmXU^o z+ZM!iQ>fDz6l}Ej9+wFCiY~V=TfNQ58+9nIp>6p<&M6H7H Jy=D z5K>ZfaB0Un%3vALYwi_jG`(P44*gP&C`G-jSSZ(ZKk(QbK{d)~4y5or2kFnjkHh!& zroF4Q@g;=hjDAV}#s)~tvH2@y31@poF9wPBZv*Xt6zCO5#6kb@N6=xzYvB`HBIX9m zfjDsXGQPHQ_tIOMtp~OJa_cHnM8S?=mV>TeRXoVglj5xfVx|YZ=?78p{%eIRJ!?!2 zz!aogucbQ0to<7WESqnC4u0`Z4EJru28>WUtV~;XtuHB)t6pL3BsZOIjyQ!s0SP R6U{3H{l O?1v{ TF@k>T#o<`0Fv&=sD*mxj(jDKd_0^b2YGFXW-hRq|i2<^$Glg;-j# z#$Ppx)w{THQ{L=FJVf+a4_jeM#!*e5++=8o)+T=|tO8H-$@~^df^BS^NAKdiZU_w- zM8|WS5r8D1OSC8PNsvo8i4nTjRM*k;pWlT_O(#x>{$3u~7=pi^!g+Koh>YdLSS~uW zzS}f72k^JUKnb9|)5PT)*dxuqg9tzC%kbe&JC-V+h@I`24LIqm1|93!y+U(GDk|U; zma0`gf(6duykF5>(Pg%xE?wM_?34~i46cL2f_Xx?W#l38CGexcM+J}(tw;PEg`KFt zy|Tbh#E0IYAw_|_M}J-@ZN5N)d!G-dQHNd)U%z5J_y}yrM}1r98QP(sX{6-w5_)HN zUchOik`)@k3}PfDr9>(b KG?H2-qBl$ z#bYJk`H9>Y9Oo{7!{Z@5%0-+n(c#uQNaJo?xa!*T>9GtY*^?*h9ZL>%S#-}+73QnQ z-_Cw9$eJ7n pG0=Ky2{N7p?oX zCzO0vOCwRtG6j4NLT4sIBT>>U7m>p4J-V-~)eFf`kMjzU90|YG;FhC=@ZhxgvpTZ? z>YD2o;5GFRDId_}EhTcPGc6~UT(^zv$sVkfY~y8kd~H8Fj6z> K_Bj0%vkCIin9TkGSDo>CUnXU)noQ!G$h9|uAa^kuq1k#MSY^?Q5TXB?S zovbcakYA3EQh*$}whUS(DpioWX5EQ!;7DQv=17O*7P#nyxeN7-^1^!5hW{37Jx#H{ zIr3UFS@*c-Hbp9k maV230Od!rADw%2cL34W6v iYhj*}C z(7s-19_z`*7|0Mb^9`+1#>OR3u&P6RCD2nWHX37>pc`R(VUqJe{wr4%F)Xi&i_z!W zX1oxT5@P#47^}`CV98Qw(r*!wn{|Z|D|W_i7#*bfrgr5Sb-=V}@fU;pY~(^&0_w0e z3`Z2N$3RyN4feR3FN1v>l|C>=aHiG>s&?gpoezk;j|3cIpgy89>oEV;D=meR6*71c znMi(RGZ*SLMdGME&mX%L4Sl(Cc!H~|&NSAOK6xf}%X_6AdNqPcaj*o!;!rHso_Yn+ z-9#0b!0LZ&QP}tzfBs41Z{*KaeL|JSC6a3gGDh`o2FUL94Q~62_`PzJjrrtv@-RKY z2VQFgPC>6qLRUt`o)OmqtOkwig=8R!P?N ;$&q^iOPtdU>fn%>}9 zNqB=58|J#0;25Y2IA?FwcvIYZ5tzeM2eR1w!=m^1Y{0!+p3k1z{DOcWU zrbUqy#M`Yt8Q}g%7tiY1bqy-4iKG?pRf lxuU$KtiqLU`7nfyQ5{U16Vx;f7xeSTk6^ z6V fQ^x~S_aidmyq z2mg}aix^Ha<>aHAvNP(GNt2tm7+de`tcud_rb#X|geI0R&MnB@9d|Y98J5g|$0%Py zI^da`?x^~np8k*4BqI2X`w3|>KDipwIS^I+UFiZr(GZ?uvrKx%prrUuz#kQ1w5^GM ziq0YEtaG9dd3zN#bPn#Gd-cQ%j~PeCIt9%yGtZ{BA9|h!VzhA0Zw{8 4Vsry)N+5^Z<8FMH>VB+j{V$5P{1TXBcPG0^>)-y(b~}_;?Z$`Xf%eK)6oR z4NkIj>EikbXUYl`ey7Gi=KV-xE`1JKGq(l}-vRDFy82a#V;3kPb}mo!lJn#1Yug!y zqkcUK$#C&ozZh t-W1qcVv#qMeqUR$h{2!R$NYg22^p^` zJLFTG)s)$R=%r-9L)?~B;|^S5d&@1r@_h$N!QX^TpqK-mjqHG58)$@_(~my%n=)cD ziMI`khQOlWWZ0GL^jaz-=bA(F*cz>Mzn$;Xq1Cbjr5+Hc<@NwY`{`pH>e>>`dyo0h ztL%NQ)?yjz4qVD^7p}+uVb6=$#jbpl!bgs%hVIzib-os+ 09@eIj70)R zTJgFs P&Rh?eKn(7Gs6IL##6zq%Hb+vwKld`zFFg0BAs4*82CCcNdhSB(o3s4A? z3i@8&onl{@-v(kl7|LjIR2AM@$!Sr3^+{kaF4S9buxAJ5s1O4|cy`Bu_^zc`OCpVB z)!rdqa|g9@2}XUo*_RaRUL0lJ*fzwvrI7N|iOPZ5Pxo#)mhy?M7vvywqw~!u3^Zny zwETMxaVi6nyZx7DAfp!U5!LE76C}3vNq#Vrb=OEwnscXfK > zWk#N9KRXDb0kZQre+fH1D$lX+%{Wug>ejR5)k}I@-cO|<-o~>kN$!*dsfar*><{be z8)X*&@=scP$u4yAHyn+%%s68s=Q43`<{rRVAkG^K(r-eDt;Vx`iP##Vv{0eOTI>b~ z5A~DyYf7d6j-bakMD#x5G1q7G#6XPa_-p)_718y~+<^3lniHY;Z+AyQx__QIQ}Ury znGZw(^omLAtBz>#ao=Dyl;$&nrAoHG;*V&{ZLYW@b-#i>`0K+nXTcN$hgox=vIW0O zI;7mD2n>>y7h}1Q??)O}LZc)^K=qKdHO#UfviVpm?9Q2<;Rhscc)0~0cAge~#B%Ja zan}Mkwz{OYa_~Ch^gTFT(o+K{@PELM2-#^J7ydN^cO&VR#tdcHzGSp&KaKWy2RSMB z3Mj6>s{i3=A-Iig9bxBA<$l+zqr+fle^k&;gQsv?inCTpe~j3LhR#3w%@dINWI<=M zQQhiHJI?~hh8=@=`WzVT6Cc-SRes#9B=bdGbNt72_QC3i=P2U}gF(?FQBCl4ZVUR~ z?qAsPFqAoeWAzfv(I+F`HW{lyTfe^V8Kmq^hTnw#L-K_E`(w|;#xEQ1RAZI~rbUOY zl+$*KrH(f0i3fM40I4&s#}FxEJgcBIK$;uP=2;4|YC_L@-gqHW^IFes4Rrt2XeNYV zhNc`ichbfZ;OD=kkgPi_&%QLkxdh%eQI8pwL3Hb^%RdmK*0|6)%d%LX2y9$b7-nn} zAXUK}O9q8p?X5%LR}hi-1NiHzhuUWACpnl~v!G={V{%y>=Hv}8X-&}T-YCD_4slFE zXaf8r7yA*sWI-G}U$S3bt=bzXnaw@Az _yfZEv{7=c)bd%rM|ONHxKvHv?KqSKCTj!b*|kZ0g|3*s5%O%#^B zuZn3GYfh?s=0%P|hoOYcW4qR^*DQ3g2=63qEeZ{-6rS~gBIKwO+5QIb*VH;5u@!Rt zUIGeVL2V6y!cNDIg$sXxyaznKkx+YSBWqtv2u}E}) 9r`+cf1F&Je5So-=Wq3^SK9S$?qM029ON;$KHTue~(=zQ$Wp+Yy+DP(i5?EjMX(F zhNUJxV!%c8iW_$v)SNM@rxCR%O2t7)S?1Ja$>j4S$@W-r*^#xH`+0aK;&m3;mS- zDqRA~tre%c`+N3dpM}${@2so?GncYz;R?oO5a6cjuh;$s4 yw>#QrDsv8Ug{CXZQ!q7O)Q7K+gmm~bl;`1Fqk EEQ$+x iP*sn~uV$d<}9N*-GQ{|R{3h^UGJy<`c1AWUT zUj2NK+e0uKYD_xh#Y6+-M_{z#Xy>N|{iA3n^`Pj6ACG!qY1Up1G{MtLC$Z5iyC9zT zFVi>^FpQVYfOnAm-eW3auBxD_#(T&_RN56&jZkE<{NMP{gV`9HHq{E!3k *;CZD42yT6|r$ zna#_eM3h5 631ao<{XY^C4g +7Yk&Tmf zKkRd9q&&=lm@zxuYnPq+kKT4#)2TbVV)-r+hj!Ik_+*p3@L+G5Vciv^oBy7~yFrrN zhog8Z1<8YQGz6sNxx?(D>(TGn@B6Hx6_5?*OFE%RS(_VYIW0A$Ohin3{QecRzHpiY z0 zNpcd~;J#@q4HuM=ZNDQ#xSp zY79qyQZ8 u?JLrIl~GD${BE5`cJ)Ka}>AMguU0i6W*ZR_NPbBpeOb2CTVLZ;Pfz z=#h|!@(&Wj#hV{ESUrK}@0ZUj(BdNuN5qK}7Z9POpMxCr8#gkqkRvhJdZ2j*hl!-1 zu=@o(ea>LBwfn788s5YEB;zW{@L1%sqdt=Ta-lI%orHb4!H$dynf0b7!88Kz zJ5hLRIA9yC3YUFx%MnQ34T*NV&|WoZhpOew;9;v0;!6JIB!~gzGqEFM{XlCU?V3K3 z3R&xbOW%miX_aAPffvgR)tDHI@VCREy4AJ7y_6%qTuKy0@zKytV&eC9O-`Q)sbue- z)6O*!5r |50`yxR=U5yY=C{u;Q!!n*&K-t>Q&)kAEQ! z|0aBDnqbkWTYM}wrKe~0nGjw`jDPt6AL5r5?>|Zkag &d#I z@ntPP)LWV?`kD1u=JqRZdp?l)o?msFv7NxJASh`X2ud6=P9e^Wl%`bwc=+SJmvrmG zOX6QpNM+cr$ljgR%R&`2&w={Y?OM|FJ%3^i3AJJLi;2Cg<)FLcuU)kx0*(&`j$)3f zQ&5ke+S81NxsxV-lE{;n6VFIj273oCmO@{K{=Fd=^`a=;9V*3PUB1EeCz%1Hb!Dpi z6sm>gO+mG%Nxs*=BxzZ|aQGl~4ZA-&Kb1IOg);eh!>?d$*!-u|%t}{lrXq36@r2H= zlo>E`G#^-|DFL{m #ke+ZBs gIw;)ULsP_Ui!wE0QeP+M*7B&HyTae^x4 z;9$(9Mo~T}q-K)ak&r`p@6H_Id`mgSL`E_6vOeR|`5$66%6YJI^=$^Lk`Z37cNlZV z3$3}BYN_WEszWmfPz8ZgVvy|DvmpnDot;cJ0wgK$f@%^oQ6}%(n+rO8pn~b9>x~tv zEa6MN&fS>5PB_s@ZzgVkL6Ss}z@6~(6|p7$Dya@kdN$)mgH28SLR?J`3H$e#9HbqU z2|_dkwp| rr;)I#sQ8+~Ev-L-estl@spnt<7n_9^QZVHl|4by1z80hql%vQkdbz zsUeZfRu&`c3t0VEiYtZpSof`%6o2>y*60KCklL;7S>WK}C9cA|gD!UAty}1ydwpV7 zBKZ$|eoLwbDdg(Q`A#?(@sGWm^k%JR<*gG~Jtq3dVFS`G5(HIC_#nFLU)Zd=YO2v^ z`m2^|_$pew y9S)}bBWEXR?G2}x?Ga)h=lK&%;Ca{!|UgZ>Ks#Z9&bPmasz>c;Pk0b?% zrJ-j72kl1dT~O-?Cf9TT1VT E%+{K zU+}E1a(i0DJX$Y@2pGCN7-sc3%K12 I0le8Z8k?a7|{T)F@-(zNi78>@`v$3ARlT5hN zyg#7q1Zce8vOYr9zSnJPzO6S_zH+PhGxFYow08z`uVno+rxu+gmd?9twA=0>g+;7k zyO?D<*`woGiG6jadc`DMtrn7MY8Cg?p#7z|?OHy1^g=C)x`#zm-0af|s {8v zwz}%AG^u<|L~}IDnbalsD%!X-gLM@x!o`*lC)?u;W}J~ztbS%$?sXCcfqG)#TBq_O zuTrW*2`1iIQ@am+?0|^&IQ=z_vA5R118Sdgn1^CBA+#3*T=>B0iofrJx!An-p{=vT zkU{wbScAV`!RkpJ!MK6=ZR*Yi415f+IfKNJJ9C?bFE_+6eP+u<4w?QOM$0Ln=idT; zW~shIqut_ez}2kVQYAriQ@hLZ#9Y>0-j7!n_G6tMV8(`Q-e9$t7BP+gf&@TL`t`ZJ zqJY0n@4(;0AZe^C137aE@)MbdpEMDdnms)0?N0LF6cMg~zx&?KU}xlh=)Z{>-Gf}2 zKJ792Ja9?ey{w4;tzDPN{lvD8mskbC3X^U24=2k7Bqt4p{bPwdtA9A-x1D!_SP;u= z%Vfnq5HBCZWThQ@x4|8ZK6WZ#I!;^`dCk$%)}R?<$2U;q_Ufm_YyDwJqd`HwVlinW zz5qCnfk^qZ62_0K^JlV#`E# -b+|bXo-J6ecGrlaS$$ z9|)_7Zz6hQHVQgH?4G^_j2UNWV{C|xrCiyIqd1=K(wQEKiI~ERhT$%MUTydvwYQMI z!mh!1(#B|n^%B0?U_emi=Z&0SR%UX~;k?T?EI0WrWk3-zTQ(KHTQw4)P9(&r*7gQX zixi&SHx5}5AVi|4=cc*x{?c|o{SAnXJ4xg^<0KJfpe?uV_0W23dic}I^ujT2Sf?vB zH%yeujUDyv;TrM7b)+c2s_5_Nba;$u6r0SIiuRw3%y 3kw0G8u_9dE0IAY2H* zZ&-q;ahInnAZsN1*wUsba$we&_tuUX$#cV1U|$5L*OIym8tz1^J-cXN^?gnVU4l<7 zKi 4&_X%H~D~t>;`KMkX}u}7{_m;L8^ItZu_Hc6Q|2J;RBZi{sx1l5H)6N zcg;#K7$WkD9>@jWI5j}8uVVtD!&M@#4ntjzOTJ(DX)r=?X9WH8)o mzl$!pl@0Jc)*cf|BHucJ8{5a-5)=*3mc}J45Gda#1)Y5$1vr5T<&Jt z4vo)n^xwWo5TooyAX1V$)RQW;#9;AtXtdjtCN|Vpf_Z#`^w1PW9b=Av{N=$ZVkiHF zjN#nf^M*BZ7eWuz8rZaI8Gr!?44y%!7k-8!`##pUy?>^_WuH0)t0-Ks8f8Mm1Ff)= zD#4k%DixDW8#Bm!F%`StU#ydn(;>B&YmkVq%eVo9Ble-MzGmlsu@2KZyc>$DIcw%n zJg;Wr^7^RWfQFFc#BG_Rn%p|yI5>wq(*#{UW9Vw%3~Ak7{ueKhcomzj=iFfwWKT`X z1vKJOBl>N%bzwXFe+L6qO+SJJ;bXgRu8;U_(be`xfp#{}%`NQ0t!)kaexqC$Y1A b$|5lIGZ44zCg!M~Sj7PUp#TA|+-fD;g=r?~BQ2#*F9h ziBuiPpuKl^+)&SU8O6l?SNAkSk0rw5S{D;ED#*G%)(`18^ZkU$OAVEvlM&)Kdw0@E z53$BC&_zhk3;9m~!(E82GDx$Dg;5EOuV%!#To+?8-eJ7pvYjp3Msgbzxy8PzJ>G~M z_5X539JHrwPD`#sjj=6%&JI6GpmX9+{p6l=S A=tZ4G+5C)RX5qVi|XH+gR4D% zWEZZ_5xd1U;GZb+eARBlPM4q0?wC!zCBQuR_aP@}*dLaoc*H<^HPi8OJtHIXBf+xz zg*D@F87du5k)q9iKnj%^_!4N)v%2jH)i}h*fM&xeoD%6^3s9sUH?k|!bC7JsQtf}i z%wL&5zemD7GZ^UE&DnOo?W&Gn3D1NDWYvYtwY_f2J}Y-z#JgTu`_=a1^Nxh2;|675 z>DP~ri&g~L6u6z3$d;vPFCg?NJr@Yjw#rEtQ8{NBg*S$7#H%W&0A<-=X>gODP3R%N z93m9y`PlCFZ7Ke$RDfN6p^YE(L|@MoQxc)1MY_B3t{+ {6Jm zy~1o8&EHm4s;)0bcsL}uiG^%`vSO|3;oH;uX0d?NV~~C$4%}r6zT
emUraLj84I@J(R!Kb z;#M1^>UB=p_5C)^sevw-X_gn^$prVS72tiqv5*e;y^p`nECno)9vi=Uqz;?>FbS9D zciE?5@+JdH4WsVO+aXr25ulzNX&f&mtLO(&6(y@^{l3QH?N9k*^!2Zua@nQ18vIj^Gwzr4#AD9&Jan@U9;!<4CT$gHRsjcr)?Bd9bb-l+r z#&!7p^$pnXKm%-Du$Pn%F!g!Ee=ly+v8l~08VBwi@s99Wr`^krm>b?5^a$fxkm)0j z#=&aB89_f HA*rc{=@Q!-B*u0nLzk)F$H}-*}+V-P@nw{A&mQ< zT=5*-x1hF*>N#p;DQa8BbQ~Pt!lN3md~qJbAaW>A9Ecs&dV~!#LhA=xAdc0xJc|9Y z$3k%y-S)ql2;Dj~PTvAe((#!-IyX01y2ll9O8_5It>!8Ayy@CEy=1*^;U2f!xU2S0 zgIJrnrOZ!WXOp*H&cFYBvSq_AkjfdIUSEFkwUX1$&mDeGE_|jb?xZ(r)&>-vLEa%% zQ?GS}I`*W5^UnMUU3jOc?fIvl)na@}(N38SDw;<4yd0frM%@pO7eU2Se8!WTp=3fg ztC!on-7A45;2WpfB2i!P(FnlZiP!I _ XI!rKCm zJo>2sx)e{mCfVh{^U&mmoTx?6X26z#a#nnUkR+=Xu|VsnA8OP_vy}nA2+Y6bLX$U@ z{Ib0~PpWHycrPmtwDssVN6gJq=c{AS2~Y=StA0N*GENCji|D9)^n3+P^ci%%(L)+% z9;{LqV7%Z3FA=5$H#oo5I9vEyKa^UyH5$gtjXz%%2pSXi%7u@uXd#it+yn0&
6uJU~%FNDKV@eQbbDKRh0(jKkf>B%u