From 85f944d4d8d6702a7ff3050257b3dd49fa14351c Mon Sep 17 00:00:00 2001 From: Pitchaya Boonsarngsuk Date: Wed, 7 Mar 2018 20:18:17 +0000 Subject: [PATCH] =?UTF-8?q?=E0=B9=80=E0=B8=82=E0=B8=B5=E0=B8=A2=E0=B8=99?= =?UTF-8?q?=E0=B9=80=E0=B8=9E=E0=B8=B4=E0=B9=88=E0=B8=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- graphs/hybridParams_2ndTime_100k_blank.png | Bin 0 -> 4569 bytes graphs/hybridParams_totalIts_100k.png | Bin 0 -> 30747 bytes graphs/hybridParams_totalTime_100k.png | Bin 45309 -> 32701 bytes graphs/neighbourCache.png | Bin 0 -> 34211 bytes l4proj.bib | 40 +++ l4proj.tex | 297 ++++++++++++++++----- 6 files changed, 267 insertions(+), 70 deletions(-) create mode 100644 graphs/hybridParams_2ndTime_100k_blank.png create mode 100644 graphs/hybridParams_totalIts_100k.png create mode 100644 graphs/neighbourCache.png diff --git a/graphs/hybridParams_2ndTime_100k_blank.png b/graphs/hybridParams_2ndTime_100k_blank.png new file mode 100644 index 0000000000000000000000000000000000000000..ae987bff7b2fba9a5f0c97de23429e62ac4ba6d5 GIT binary patch literal 4569 zcmeAS@N?(olHy`uVBq!ia0y~yV4erW%p7b$kyGWTs(=(@age(c!@6@aFM%AEbVpxD z28NCO+g96Wi4UP5Z4>Y#c zoebuUeJ%;q)bS=BNP0;41IeIc!VC-zQ$DgVFes$jFam`oM}!NeAW)22WQ% Jmvv4FO#p2!r2hZ_ literal 0 HcmV?d00001 diff --git a/graphs/hybridParams_totalIts_100k.png b/graphs/hybridParams_totalIts_100k.png new file mode 100644 index 0000000000000000000000000000000000000000..fc2534b96f263b2d2e3c55a750365f1b4dd701f7 GIT binary patch literal 30747 zcmeFZ2{@F0+dn*|XeX5jsgMyO%FdL1389i**|LW$V;fQ-Bx8_lMMx<-*;Tf&P1$!@ zCwq)-nC1VysP5nIe(w8y-~Vwu@Bew8<9!`RCf8iocRBa-bDrNTtHy&rWdV6A((T>g@4fd_ z^j%@FLtmhOJL;X@SioQ&IjRa*u6vryk#SL6`p8qZ_y>a(R%`S1_E*&ftdYk_hx1!3 z9h;KFw8 zkQ-D9yXI<&TN_suTnlap&N{Fbyo}E^w;8F|T90sj%7LI*S&X+X>;UUpCod?ff=}3q z6fWrFpf)4;?f)3Q7kpfn$Ls`+Onc~{QaKsF}tUXc6;}AW4(-VA5eE9iN8?vi! zhEL#Qj)|vFpXO=adC02|vzO3j^w0Dptvk0)%41)IZE&?SY57{Nur1acv-~_YWdp8_ zjg5&f($Sy9SQ^;oycGD5owq^6vXfIA_Vnb-s3>FAV51jNR#yJzqxTp#KU5LF(3f(v^6=b=Bk-x< zeY`jF%e*~3nFo3Ol;}$`nXmLNpH)<4N?uYjJ_}eOjR0#^m*{=Zgh<24^&fG5ZjX8G z_lzsaTCK}vnxF;O7g!PGY;A2->x%if)X;BSn{TR2zFvFD)+$amij_Y82)DjZW2j(M zKnNQ4lLVM`e!`;IfOO4xUkKX1e1q9_0v{+jo&D9?Z@2u1eer~gWv^WZ2ocgrBQwfr zq9ZuCsM<~Ak9BL0F&^hyBX|=q? zY4he5S@%iNFO$+O=QG*Xm`)PU!reUHhrTIywM*r)L zN_os<++_4mVJ5=GNQ5ts8Mvq5^#W=x0%`LKs-imA4J2*?sr;b6J>8cm9<9cA#9IgVmw^#UMoW^<3eur&GkPQaFPe{sCcqSe@IwGwN^ zceU-;-%pFribo<%?GF?6h3SP$O&vzxl)AGjV&UzMPoKH94X>*yCq=Wx5e^C0sJgkc z=z1KJ`)+* z#0buB$Rq}9u?6gV$8y1;8}!+NqRhM1zQq`^I)xR^@dSKDkdaJm_ny3kD+=<9cjT;p z<8HA}uZ?*63RA{FAGM;I?lgJ3Bj!or;%e*38N=z3mi8%HK6WJbMSIZL8%d2`CaD*_ zH1bRhtqd{($E7A$s{L+U-!D0LwOgE$=lB$<=T++7g0mZ~#Y;Ke+T+~iJfAjjqtScv zO@M1J^4^QZfgB5p&9SidPkjel@4>-(gz`U-6f>h-nijIrpR!oty2+ zuFQ&1fAvVRtd($3TXF8oytH=B5f!F)mMNDfA6h0IOTAT@>zm+~UvjQMjCD?@F)_5F zLn-9AzVO>(U&+MchkZJ8qT$6ByX%fATu8c*jKS)>MOfh`#SfU!7O04?VxN zCbPh?H=NHG(vB*Y7Y|o7v7T4pc(Z#{5fkB2s8xh9{JioMafmlGx)Xm;yTyn0!v{UW zyPMii1Y#MFI~|zQ4Grg)?X$(|KJ6|kLP=Oh99(&0+uxbL-`R8GpukFn^LSynWc1es za~unI$id0b9-AWVGFi@i#D}i6E)jz@38gZO+xsEIwPV@pCHuQs|4>w@D81XQ=!8fU z&{TrFzGJ5AFg^tRdKFWAgkNP&;{K*;9;$i{AH>i;(K=F?Ot(Q#GE?6Mjs}>sNFbfD^R$3^@(d{2Gd~r_<5e;V~tDsF&r(D z6}i59mxCUNH+XI~^OfF|s~Q~3a=ii9SO39gjkk4BX4$wQMv~|{G~hHEXZUVH3V)0# zOb(`dR&D3K%w{IT_L+^2!;-pf=(1M0Dyq`kW$_p+)AZ%Zd(C0$U5{1?@>e%DT}O9o zb!&?gtSc{ckXP}`amjadOk84bdazG+TKlH_NOt>}Cozd^g<~H`sxE#-@0Khabj-}L z;Lm(Nzu~2PQZ2+Ju5{wZ-b9`c9rKE0<;G_E#Z?MY;OYEe9-rn!vG<7?=^SSVryVE~lNi<5_<&m^QSOl1qjTj_Ou1Q+2CJKf1y7}Rt2fjC|fjuDbZr?WhU>RcV*O~+%9e$VyNPj)^CdWW=5jJrLwL+~cf zV-bICTF`#8_JjRXB-2IRh8wqsteU1D(E~S4I^v%qt|W$ovEyxd6w?S40Bl~dpD zzVZ$&h3Z}r>rbSZ%EN9uYu)-zj6h(Hb=$sJYVEYEbTB#AIbV9}+4ZLTLuI!rxiJ&g zoerylQC?Fm{l*7XTFPsf8ay6p3e?`w&sC!_Mkd@gi358&6tZ|`!xo#!ss8we@@aqG zBfvFWPk&N@y+ht@zZqK)ccjrpJy8tj-HJ@YKj9NgvXj@Z%xMM$#(zP(QD(l1=fv42 zq_~>Ju}rf6yfe|FSK)i5!dTy&P?NqCPPW=ta;|y6-Xf+GA9PWRchNqyVAwG41EUl2 z-lB2*D_NBwos_h!TenW9)#O{oAaZox6o*3lbpEM-$^?_OzmQ%2ev$aFrC;pODyg2M z@kv^I`ulR%l^0I&dWwa9ql#HCGGjuzCmhrpiXY~YvU;w6m@_@AH~*nXg<9cofr*`i zLyYI%>EUCNh1bQH)w&pCGGn|n++;#bim0V&6XgImxSN*!bkpF&#B&Ln|UpnR`Q4 z7qW^SXGIqKad(Xmm1rVET?}fbw?rPBNPO4r(_en>E!l^KJZ=24+`5&wdu+<|?8>vr zxerAR&FcIH(tX7g-r=i>25(spaNF(GJ8AvgkIvt)S-53>TQDbf7sHK z{%fk$r(q7y&i2v(Ne2a*6@$I39 zQbrQ^N|&(`QOv~tITly!v<=EOoqZOrPw*(cjKmiXu{OqMdu=}OD$A>z)c<<*wBDn* z`0(aDujq`zf@beA;#-V3s$4==*0H#IQ~+~qKi_MNXHoMK&y9U6?%FQ+h0-o!IVE}2 zBK7j-Ue`}0*KsJ|M{ZT<%OmlhQw6whW~cB4J+*6Uc?_h}OPbs?-YEZ8pbhC1R=h$) z7!W@N(tR6gDs?S6ci%SCQ3#kEeqFbfcH6}ii$qomo0O)e=JbV!t0o`xSYaSFg}|KtsAvUsN}h4p3SfIYkkXK*jBL*2>5 zu1>-#pw)ZqTq}vqUfogs!@<9>@{P=UU8{B1giJ?)j=N2SKc4X_4_+&KCe_ndXpg0_ zIyuxINtiTvDdKcUueHQ30I7>NVr^Uk?(s{xa?QrePKlh2tA62hIX>pMtUe6u&AcV> z4HT`?@oi+dTZXsj8kP)0tVG7YudwX=s#BJxc2i3xGwxGrts$I`>81+rH@+iU_u~+* zRa1Zi`e$ulS{OHwgq*qyTk$K@r*HcC5&7X8NrZKfT5Ty}_gkVZu(0@XR%(05pUs*` zW?vd(%fF1TaEm8=*f3)KZDyvOTSE&AX{-}v4xyeBI>a^0NQJ-6D<&U%EyjD=RmHb! zAJ}RlrPaqMlXY(*()FWDtMUHkcu9QUwHUz;tXDA24Au66%QUi6FjHei|Nc<6%<%@X z$K3c0_POb4pEDJ2BQbIG5|BO?vTwE=wKZ<(pDlmZ9^EH!BhPDE)y?2sC!TaI&)|df z(zD%i8CSz&Yumed&U;4=Jz`$kk)F^BfNz_l_q?7FlQ>? z`y)Zu1aKDGEdG+|;3SB8*pJO6*bJJ1pyy3Ji`8S?^rFK4n5_L@lEarhVz4U>L?L7DxUHH%|A+tTUFQAVSa=_bz}*|bCZj6!p{2^>yAeFtc2YOoH%$~7||^CozKlZaV2ik0gv-u zg{Tx_JkAPaW3=Q<_hWH1JV9&La;0RIaHFA5bFp+asOLKJONl!NpT5jo2KmjyyPtZj zGURlS@=e0Zz}Hu`_3<1ld&d*asv3z9xpU(t&MCAG=m9hFBplyIvD8^( zwp8oNx7AyyDi(EYD7B@3bt5BYnpPfbAXjF!r1-wH^qj(Aj9396pY~Z1kSTE&&9GW3s zzVtY0_rlu^-MPFwz-OB;en`EECr?U4K3hR?0;1I9C1-u#)6@B~UM=m&Q`rK?)VlZ+ zgOZEHm%O^t?gP4*gZc zvS4FDYCi?((v4&)Y3XrFXl>4joo+l4&-3DxM~74T(arE1h37`ET2o|2pD6mV*~%<2 zJQ}M$Q)Mbp=&cZkzNDO>U0@*N@6I`?udEp}3m~m*`$8|Bl1B`Np@~YY(Tw>=3{KDIPKCC#v-8q(wRa`n6@FHEl~-jG&THl9e=u@}-5b+0&;B#s+}43C25 zhZn`|KdSXlJuR{*v@q_>5B?HN+xYCtO}X*==cgyK6N~x|3b!3D3ud2im&-D~)|r}M zUNuu!M=&OI95Ti6)%clvL?W{DcU+BvP|@~IfT#&MLvZQUSa8AN|H1#dqp2CR{;G%n zPXnm`TX5}#yO{CCv3igBf!@Kv@Z;R?xP|HI>GLm(gC7YA-Wdq>?XrIf$M*L2e*32V z7$JvHbMf&>c(=N?Mt|tg>guY?g(Y%j-olLy7m=JcZ&{{zF-Hez*$d z>A4O}t&y~pR1@0U+j~(`1cH>itb^fL^5)vw>gp2C`p}_6R!XWHnp#?^GWmQ7`I?&|4#=t=H8E-NahYX&TXf-P_Z_I12_7sdV&9{`J36qvvMPUe!qel z=#Ms@ZDHeC7Go(~mlRy) z1RXRWd4N@`iSns25_3h_I5=XnWv`i`At84L=5tKIb{^SS63e7|Q?J$d}xmo~B1ppMZ8r0RPS zv5SYYeLcn!28-bYgA|7YdRMPNPdY$<-;)8fyw?wvK#U^5R|BFDZM*+x+?pe1vhlrG zc9D)VJ!nn#XE&<+2ttZTlkp}L%0!Hw0TK*;@B&#Ik)?&00KCxr|8BIdvJ zixU^smev=?K#^f~e!eagy^<9b6%`m52xmwc9~l|x?bX*WJ_A-;cV>I#nE@$W*4Eab zaKl2`Ba+G$6ckkAjzU${sR0Z3;W!)^aWnogB~=QQy4D&mI7=E#7DJ4!Y(|vsrd8S6 z?l0rVar!UD?+lOm8EtV_P_W7SIWls464F!u+^}QZ#Nr?+6!o}Utl3>l6cEc4(*sKrdUvPkajUKfYVfjJAG+7gwxYjQc?wG^@N~f9ET5K-j0JBv8|5w^u91rBO`r{ zFtZ*wmP!aYE428-M2s5G;kZ=g-O*xd*9cebkk32}^S@BOHssB%lvAJ)fgY$rQIRQJ z#cdu{KTYpUBXxO;ZWcAIex)<}BD2wh3Jz7ra81AJ*aNF(_N&|&jvZKnV=WNsOFxI` z?s%O5;!YlS-PNzc;eYVB-c2Ka8fDdK(*e@h@$(|osZO*+qv?Rcmh3Zs5g_qnT`9F1 zB>tu&x)iPj(^Y5Mkky4c+U)zrdrEPZCof5@1(L(1s0TL0`91ZMet z!RUuTz!m)PBAi5)s5t8Bb+r_(^o%1J^wq(QyTv^*Ty2{X?n!=D_|4=#VyiZRkQf`E zpc(g@Vccry;kMG^Vm*W?BqwAtxuLu+77bifdwWPboteVKPBu=pywiUK695Z`&X1dZ zon2VK-`V`a$#P_G$vM;E3h&}9lSp{T)KtwBjZliqjwfj52QYsJ5#ZH8rp&VR!w#hh z`CTT0meXeng|Z^6h*nU&s>P$p;eR-K|20ev!!DS8{446HmC#>y09U&MO6^7AaO~Xp zUY0F#T-IikXMp86D5yH}Xf^!!>uj8AE>cK2rN55Is*Uc)9ueMvg}pKIPvLre3T6hZ z_<&~8vu|6wJIZ}w*A7^}5@y_e>0#Iwn_h175m@-*C?1RD9n9J#Fh$h^S76mehq+4< zrBA1B5%)i1X@#C+Y4mj+_iC2^$mzCOZcnARc;Uif)|f&FMMGYvUj<_!;Nr)xf%MCw zw^$0Rxj3=sl-eB-niM^SV-3bh>m#>CG!m?yxF)ZYZgG62d!EO(V^r=(&7t(D(SdLf zm;f`azn@@EF!#L-#tnlh!C+?UA?U0}#9U&o>`QtfOC=a^2RUg9s$HK+J==o_bNU~K z0h5%%Wp~@p9!&j%=4#yG>OC;X(xVH75Tb}Ky5$||&3nwCrC`8Po^!-=%+PGWbggy? zfso2j4J^Dlq9tNwhp#`c$WG=RFndU_AP4WgqTf;=0YKHg7XN}N&ovwa?mUnHSr z-9ee^oRkY){+YA)!TqkHcEPFw!VeQ(QmCMN_mJnm8=iX=7_cMzrm|X=-wB#NR`H41 z1vA?LsPpsTFN*b6b5{4$tL+;9R&n-JoBrm!p1aAW3h&RZ(7{4GwcjhL4c2N{K=ct8 ztvx6s?NX>UdOzdIEwhJC_IbOP8VESiy zbzX9mxo-ENb>$nRQ5o^P{Jv~kbR1=C^TWRPI?Mz*QXVb#~n2k$s!kPM=Ji^hdU(t3Te zK>mmm${wFgeTzk|@ktHKoQp$jG+FPPWlgxrB)N zIABS+3Es)&&1|Q(?ycS^C)5R{+;KWr+tuh^BB7o8jmmLS^!R79O!8u`pV$3tL%;XD ztupQ>R<79sYO4pMvlLq+%wO~%9gXZZ$`DTJuP><2kJsN;pv-X0O=e%3(9DpAL^WUq zx#>i)>zLC>>oMp(FUF$`!$Q)`4*119vA4wU>G#2GBP+@~+~F_UuABfhU<;Kj=+QI>k4p26_ybm%;|3^VK6#xNtiSErf3R=V2LJO2ZkK(Z!E`v3Pn@ zFW^yi6TEe4Qn)t!tzSoCPQIZi3(xOim@15zC5?u*@HE&y1%xzX0XhZ|lC0c9y^wii zG~t!ilaQqal1Jd}DVmMyk81SSshlj9yF6!Vo7833hD>}2j~t1GXMgML9SqU=^>BhT z;aLLj$%uXw>cUmwtsOf@Z%s+s^K&)O`ol)t)cfOQf0dWV$sFCwl+?*#8NY?7mOy6` zX+&Kf_25+0mRSgUw|sd8fd-1^VRGL2ney5TM8Q-T3tdyWf_XkcO3frbYzBNKjWSjB7 zwrRg>edXOm6}ASK>{nS+Bw+;sLs#iGS;OLIUJ@${(fxMu5v0-X`O>SVqA zYCy}?KcsTm)!@WM#NtbdTYen!I<6)=OS=<{td07CySNf&^xpF`1*)==MSl!Z|>C|dh1N^SY?sfg&4 zLz|a7P^8&$`nVKYHRG#V36+PGfBRiJ6LerYRd`X0K!krzv zwXJ8qr_PtYd6JnXZuj14*K<#fUv79yUR9AtL%>6Wg^A0nfjYuNOEW7d<&f=3{H6x6L`PSexDb35RO&TM7W4vPMZCTZwrvZz4N&m~2KThDFj)o23U=BUPO`ge)#{6X{gaN@ZO$JY%dnD0LYGQe8=i5;}s{>2S}D*+xRLrBk$ zgm#<W%NswwVzGL8K5!<$+&wRhn(P=m+14p?x_{V04J3GnX}?o7;@?#VTkS@LPGEsib?^afBJMqzw)cka|@4R z{;WGMw9&(U4*2kh*!ov5DqSyrMHSxtWk!Dbes4K`UXbLsLCJU=8fW`UN-{M<(9)hi zUvfa1Qs`CSf`w}dT2cy2;q=Cpl-6%wli?S(Y{r3MItqD4YMAtM;t_QvRPap5Q5w0d zIgF|4Usr_$na1rk5lZ{4DWh%G?BH z6!GdGJNMJ~<)NJ-?au=Lh*{rDCnp(M*&&%&YTsFEZwtur^(#`s(9*se7flW<6h=_% zpR>zK+oy*FrfrNwI{B>&=Tq(wzg2*wStr4J_994H8(?G8 zjwjVn{|Jv^)IFj)vcN|HTV#r{X!M13&6Sz13%Zs2wjPZ?$7-oQU^b)Nw&UaAR-$cx z4Z>4re}EDKvTRJ~;I)nZzN{)&f%NZUm{S6CIca zfluv6GB`SAt3}!n6$URr0&`^7RF*@Asb41X;uR)J?eQ`@C+P_h9e@TzPGM!g=X13m z#h<*yaN}Fac_^#l8KN^Aj3Hk9^u?PanC}8W^`x-Mdy86sk-{Mqq3+`D9upb)<;xdO zb_vkl2QcoC1PY>3U+H@N%BWKR%+yqJ-8JT^GG!_1Ql}Lf#J3eB*=~+XigFrTAoG&p z-XUa3fr~UPbx9oxULaM(K1=3aY&j|~%Yz_awHZ|b-Yw)&1?5{)0!L+sKvm`Il^`dw zhWZA~{(&%42_ui{%$Gt3H4InPn?eFMGCx260H&a-%}w=47`mLgKwV9wE+*f(*o+bB zxSEaHphvA$QA#l83=^#vJ4D(*)?kPz?cSvzX*Wz(BQz)M9`ed9bJxI%v{n0_(z)nZ z`1axN{@ev7{pY<#60a+*ctLmHd z?Mmeu5vw94&s|nc??#Y=7ARx%YI`5+%wIK^K3%mMd6r*?(0`f{hm}9^k-kHv_W_rZ z=<^X}|Npozi!~zz01>Xcggf!XSz)-g_LRCnDqdix;-R4z2|?M^NUg}Ql!3U%zDiz% zM@vFRG~89>zKLNYAF8g@0>UdDBoo%JPj6n{%>LlFSUZ_a0imcydp(Y$vVag_`g853 zJgeodo;R=QtIxvCBl(=s1+qr{=?bb#z`y_`A{PC+K7s?c8HSBM%gTLQ9wXJBgHu^R z*vg&G9adR<2;vJtc`g9A1wK|egH$?^MNb-cO^ZJ66X>*A<~@uoDO;_J>f-p9Q-FGe z$SKA{trKGChjyeA4F>MpMu0i%A^=%=;jc1VnmDw+-nvjZBv3Lx&SLXi_UDXV69N;G z97<)qPvQ76%Q!>fQ8qwj9X4}C%fjMchADoiQEl6}=Kw6^Uacf)32Eu9PmvWB6=fa^ zCS%@)0Dl`h=aGIPDbjCkrHSfrbjpcp|BykI3#S4+5=jZ2?DHXhSPMb+IRa<--mh9f z3FfSR%mrYzD=eW#AyKbaM*08}=aR3W%B)u+622JLK@`WrIk-Z=@*1G!l}QlVmbjC7 zY{-X|{ST`CO;khB)dqlk-*GB)*=I9t)&;qt$FgK|_NvZkm8^(N(d6uHyfvWH~E978}w*-Nl9&bF-=h8R?_$L}||OHabx* z8!~UP-`T(IMnTm~pfS;=+WIwVA5JA=evUNV6ib}DjD?x@>jS|V*{q)AdXJds!u?G^ z;^BL<6iY-7u7rV*hWpUckD*o&g&A+Y6BHxr0|yBu-${|Q^E9l{1r&@SBIm zPe?hb7GAx|z#UK+TqY+Xc$hnmWT#co!OCbAXjXUSg)KNjBo$|r=9jBcM8{$ z%1ci-)n99@A8f;*e8=^I<4F4s*By&}Ro{_oF|m2=)qFjGwgL*_1V(Mf;<~K_J41~Q z_TZJ7LfVqXZZ|~HGav|$3{wrqwz5mzG#c2aYeFeH#PkQH9EK{GU0t8we|zt|l`dtr z?eI5)Gizu1=w2C&5P()O()FWDd@FglJ_WlhbTsVE^~%hb^Yu*7toQ8h+p%rsx^M5p zPBHIOx_)l>`n5Il{g57gyi|JW=~n)HLlVYtU^nNvXs2^;Hgg|A#2q*>c%mLk>5|W} z!}dIWa5%bA>{ti6M-CD^$8g8+tsGG+`VefF{HI{GiTHife)gxe8E@?`Rw}OBO6vc| zZYI{Mma3AN ziZSwV`S*+nbFuTGeiK=%b@KVK58+E}9H?}243+_0tG1+GbMQp>2w3*fV`btp ze;}m{2!}G1qce+>&GBiY>%xb}%JyW=1+*{8e=^X8Vjtd+BTi@KzJSsbz{|Q~PouAb zU{)EsmBYLq1g^)Z3kDPT7 zS(>Dcw| z2-pkrMAtgNrS>-yl%9KMXPZ)gY`NL0F6hxSQDYiHjTUC9Z5SS!)Pl;)Qx0iIY#)Fo zjcNnH?y%+fDC_yBaif(zlTJPOZ`<}>`ZNtGV_oSb zB`>NrA$h2B4LkXi8G%}F`&uR0@Moq`3p06WCe9)-Q|5g+jT}j!ilK*{!dcM+Cw3@V zxRmd`N(+ecbtC;jDqrHYBU#{>*p^}0p1In>tT75?xaY)6|I7-RfdBu|zmdtT0b8AI zIycF$!gtIs>EZ;o`q_I98=`3EM!UA;tFyNffhn)8F0MOx)iE5#DJ(IxD^PryIIwZr!8<2ii9xQ`qg|&mThFC1>*fX6&6D!?C)v#Y+B%+c+- zwZt_JxBVce*Jl;`u>}cf@U~WDg37~6M(venBl294=>r?s@Kf!gLwg`0zoYQRBb9f% z?5{g|{+Z3FN5Cv?pbQVlZejz_3#e(~Ym9o zw>h4Po~tb>I~d+}5V9;U$HOBQNMut?cO>zhpvV4fDUA}=uuFRizML7}9G{p80DC>K z(|jeMMYX?wd$6%Q(BaK|^{LFMN4ce+%1nEa0#O=w(Mms8M<})myyz^9tD(Lkt(E0*}pdR$u%^4esRK4=+2C?E$RuE ziAUF=r~^C4Rs%Ft{yzWX1UCFacr3|yQA@U)^lBZdJ&7fO!A^t0$g6gPICRaZlV<7m zg3Js3xRSYh8UEE;;@Rp`o&01>UV|*txLQZ>QbVJ|oW)w8yNPq4tm0l|pT%~k zlD@TI%09v0b7cC)ZJMB+!#n9jc^sTLK+x5n8P)_k70j7kTuALWQ(84BnJh{#=D-MR zuk$3&0C0VL2k(L2gTii=r7Hj(*4f-|M74QVRs7bbanNkNE2862q{Xe*$s)Ie_k@99 z{oFr|>*)gE$``1m6W(FVfz%-qp<6Sc*o5B>)NZt+Tl?I&=v8iicl=5btA<)1e7Fe8 zB@;{ zmod8>Glb8FqG4gTv#`#1JKjE1mBlStyo9{G@5}wbRk8K+>vvvUoy*Q(`Hqs)Dq%e! zx(5_^(lj^)4xtKYxM@hPcLS@~GaKBnw)digj6H!6EKCq51Lk z?rhN`?JsE8)0`1tIr8p-(FVwz^A~`O{ydfA6K_lYbYOr^ROp}h!w?P*ebzkGsBs)xo~sw~$VI*ZmEwpW1QFWV#VMjqQ2R$!y@%Id2nA8S^lNZ`+&z zivVn;#xAZ^aS`85^A-gOQ)K|*zuH{=CE7sLwzph2O#>ku$%b9aiJYd_3LiiiCUVJQ zjYRLzxa4|-`}XKB?w{tVM|fMh2X8g;fKn87mIGloNn_d!a)wYAe8u_eu$yaqx0&%>Wx)zX}OCBfe>e( z5zu71l)dQ7trZ z>hNFSW_b-22w0}=ULZN&OwG~Z%6&C}eX9m&7emWmG@W}h^zJPCLrP;ru162 zt|1Bul+<~{u2|6ZQwCqQHq z0rWy@t_AhVE5OA=Phzpy`4W;=HOocN)D}w8xpNG-Ls&H&niyy-01S7Y$(?cc8XJ?U z+Vm?2Hv8^ar4eP0E{1J^nr(0Kpc@jYdyF*ct?NLv4Y{yNCR~8keR2ec1HL;T z7}FS2Z-Y zP*Haaw}Ohg@DMoGYHQ&1Oz9M@^;EXhBS7wcvF2h3I!qH9X`7ktTx!A~OZ+Vk;1~h+ z2PA2~Rtg%%|HnM61Qjdp;_H(KfjeE;YJE-iOUF)OSWbc0ifl9K1yEkGo0#!p(|+XG z7}VHW=~_UDk8;F9dBnC#Y|%g|1Pt~gjsYtsd!M)=r7Vw1`5VnjL4zuSVjmLXvuQ3x zCFyB^Zp&Wcyf&8f%~bZU5?+jxa`J&ENpHIw`ZtUDQNvofg?Yw~*E<~AcLizWnB`nY zNH4X}n_6wV8evy|P(qRl_kv%_lYw**R#exIBA60httsgMM-|H&tqp18wkQYkz_~v@futKYz_>u&tRnxAqRx5OQ;92D)Z3t4X9hK{%f+`Pmj8L( z^iMysd_szCj>BUwQZ2NiaqiF64=-V4#ppW2{W%RNfk`;3f?5>Kc{ z9vG|_+qF?O%=r4cCz$rfk2n0A{169!vK6i5LyhL%_)$gdQUxRv)j6VP)X*GUC9e3^ zD^1|ojK%!iT9!Tc$@_le900?Jmq7>*xSrjqn27M)IHBbI>56~6pt9*VcWesXN zf!kQ02QLHwW8A_jp#)X^O2@rW9$V24EXyJ_l?&Xxtz1Gypk5D-D#4pTU&^)wmuww^ znlw~(_ZU;e8YuocApk8X6A2yQ3fnrsg+&yHBwHdCK~xVtr@KPvq*hwUr$SvbWo2a` zMh8VxUVT2$Zx14KAp92x(Ks|{c9;}HCnO|bvi^E%t4>kXHW(=3M+@W7U$&#=2|6J$ z(J~ku^UAR>hK}+pgRD%bLS(LPul%D_*1qCjI|{tpCmU{a2bc zbKpCG8vyU919?wBI8B+nDCyEz`o}eaLzIh)i}NMm%my19n?)9vv>)js<`zINwqy`s z1dwFj+LBlDmc~T_mynoO4xkcn$JUuaaJ~_8ZctN|te!k*YT@Cwv-yWCy4<_>m3T_E z6u8TAaPYEr3Geusy$;7lGf)h z!0DUpnmsW^Q`%_IU12Jy#^|=VJk<_ffC%!+4dOJ))CIiVZ3J{2HT?h`%rK!##Xs}8 zx+$To&>hkCAQlAn!;&cH=RE`UMbU!Gw<5qM!QqjG`S~QEs}uW)$^IPDp4Va^Rqry_ z-Rf;4Ju^>N$UXTaT)W5LzC0rGH^P3^7 zSO8mU{9IGB`()uFur+x;?cf{^fMIZ~KH=W_{AET3-skIX*NiSMI-iH&1$Xj5)^inr z+0}6~l?A`E&$6*#yA0od-1swi*y2^Deukm4D*=Yiab9m!!^_scUeI*>xrR_zLj}RAzKT3RD^xy-4@FiHgQV0 zxOQ|!@VDA_&1P5%Z@xzA2-7a{l>QDhZ|Sx23POw#_qDvYYytf#USkhV%xXy|=-8^K3aI(JVsg^QJ^%_9G6!H z>s*>HNJd*G8D1Pf(!_{Drosf%DI;OtAj~VJb5|=`m|*3^#9M5{&GOt^)uz>IOk@Thu&y+L^H1$m~di2T;sn5&l3k%NW zki=1G2_ke%?&ndKmQ{(z32#^Ctb>Ap6>fkYgG4@a4EPY3U*{VLnT!Y0MT8H#aIt;Iym8~wJ=|i0o^sTa#aDhfbr_H$alP}~H zvtE3>u{%EwjvVTX&98$eYaQx-PHQZ0y-AOw?HTgQx8E zWn;_k4r`>m8xM5M7>~~D7C@RCB*z6s5>oJ}p>420e!ogFI$;-Y@d-LQCL9)6_o!3iovibT<760&$dx<#wT=>9u zZjMpoSNvfaC}s(*%HADF)!x&oYWPSagd>-FwemVH9Gt>B>CI;y^41=8vSircZJRffhTjh<&sW}_*4@AQQ8q0%Pr zmdXigMv8skG0EWkj9fvGjzKcpz3?el!Z~O9(oFV^dPOkN&k?(#U4r)j>#G?^`&_(r zVDo+C7lVwT?4#u-ZGbSu*+Jre>dam|X_MFX zV%l(?u>n29{DENg4Jj%$+}|=gZ?%apR4iP>!EqJ*VLX!ZY)ZH8@mfY4v?P8e(07-t zwVJOUG+8=5e1oa39T6tIHWHL--*Q8qRjeQG;H+KGB)QmCZXv1XSf@MsnYXD4OJJ`| zlCnCfl;mw~af<^8i3p)|n*Jj)P0=GH-qM8CnPvQjSU&y4cb$dU#Zp1NH1V(l$j6?! z)7hN2bR5#-zI>AIJ)d}XemNoGwB?tHI%|sBE0MY2`J+eX%OivCZuHnEKASi%c}Aq$ z#R2)=m{YCIW_i_#+41c+S1I85lsR~{>D@u?7{T#%Q^7Cxp6_1{;JD!R&zw_ay~;5zgFp4PrW32f%b)C+Goo&8sr;` z@3+E5q$+$pok@6QuSB?NlHASfOm9|9Clm)I*3Nl12nT%oI%{^b{!JmfU|*t;2;Rn{ z{BC+f$cf-^{Ei^c3;CK%v$;=%dm~c}>t+nFmMf2%XFXmOHbx~Pd-fak!u3yyn%p#M zXey`Hoy#89he{b7Nb5n5!vIM$1<;?H^19%~-)@X{;~u4TKB zs^R)$YM?sLRM8cGC#&U7pB z{IBx9v#ZH%Ya6%Qvc)Yb3Q83eL<|rIV0|U?7BYq$D5&q)UHpJm-vOyuaZ6@O;h~D{I`dtTpF#&1?09rMif!D1Kkk zc)ptWmeH!sG3p#LjTOGMX}y&|8!*U-bM3(0Eu#8FX%=dx+9zI;FL^wV{UcRS;Y^X( zq7(VDb6>x8CZk)iAp_>)t!&deN03GOFYx8S7cI*JimDa}VF2x2&Ly*Q&{e_*9o+$e z3`mx-#oDEDsQLS?NrI%>l8DDb0tzUAx=%H~p-adYd{^nlmHxaMGa6q`L z3^!|U?OUQp_uhP;|D4(BxaT&#jTJxSdgm-z7W#p2Db3a_tHNv0tNrtKOSSeA*EToG z4t-(CYCLpC(oV^2cBk^3MHPi-VsZPS?gQPlkaW6D5-kKATj$hG%S~}$p7p(1{(UEq ze7M5>lf`S`V1G!5x7AB59GRC@VcUM5Lm->nwdhw^wz#CEZlgWq!M z`0>q$S?M~3V;d6>GNPggZrrBDW#qLApMKvVTEd_lRS&AQO-DAop$@mAJ^y^|3vtfv zUj_?Q^{5os)xn50I&~fAD{(A&eed$QD;lSNND%EPq{m5ktKyZrF)yZ0V)h@wADNZp z{TxdfD;rnV?nz9tHvn`w)vvp8WKxQH$&m=oKkH4jtNG>33f#b*xzgbbXqlc&?2WEL zUq5A`8&J)D2!8gYl*kn}$+x6_8@`%dBxWRfJ73EJg83@%wC+mG$X z+e}Sqm=vqwo}(xKuJs$SPEoM*lC8-#|iV9QT!OFAw-cn^a0bYVwG`}CtI=K z1kVT8C?1yGFb1{#D+hZ?q_#mOx*Qk@K&6;q?!N*trtgE4JT-qPPdG}6yg{NEfg^`) zuY_<~GLZ{=&M>4!2MM`bWJ2kfZ$cKKJ1w7=|?dJUxx z<b+!zvRO)EN_I3jKID)YgHUCXg!F^*L(5_LT2hZCL1UFDOp5 zo4w-bd)emsJ0HZI?YEvSRnQ4+ zBnDU^0LfPi)rlqR;&GI?zy5^LoexgXhG5-_=DSz*+YJL$Oxj?f?<*D)tBoczXQWHJ zJYWuv{EpSY(P)Iju@h1{ z*E(7s{Vl{Atl4d9pBaM+aYR;{XG-8Rik7KVCr6k$FW0b>^l zxK-7@+o%ZcVUD=YRqQ@fo;PF9i(i|S-wXeVvG3Z=LVygioTL{2+yP7jKIB;UTP3t` zwQ!}*w)#Y<>jy~XiYc_g7aRan3FpAN)|fQ!q!g?*_b0)OnCuP@&+H^Ex98K}ex+oE{_7K$>BqA{f^f4b1Nq8jXg<6owk2%$iFTcA|w8ote zM+k4fVAQv;sf%QgjYjo^#5ihd^p|QQ$T5~=gxGx8U!E5_TkDjM5!(J#(siReG0iq8 zRv4vYJMwZffCzLIU1FVXhKrepy5M2!BXY-q4^+P(jYSQrv<}`ufTHCbGa2yz{RX^? z>zSUM2hTc=;(Ft0HwVVkVugW4 zD_D1DgnFT61mUQGfT34Hw0R9^L{ownG0*<-`%eB>j{$!m{5RrpOM&4~TX@!#q?vCy z#|S&|TC3sPz1Yu*BCM3A{9?Din+*U0X<#jBODf1;urWDtV z0&xZ@Zh&)h262mFIxAvy4J6Jb{|7siwnp!r{*J%Q>qDv=b+ncsgQ1AG8+MxW2?!2@ zJ)Z(QSFXl_%$7)asv$qpGvlp!t*fZPpoS{exS5!pBAqg^8Pmti8*#q_M04eO*|R&4 zPS}ca=8&r*XQl?Xjt7fh+a0pvZt$o#e6Y5}+#@@({dLP7Y4z82Wret02toH4p)Zv%M ztfhi1>h2zUi3*#~stm9mc5+YUX4wYeHR-1gRFtjmO!-?S<~ig+RcnOSF5_e>jI(89*{mg%64{YN*ozwA?WiJ|kvnjJRoCahboqwI(?9Z@HE>ZnuaAi_*o| z+IXM({49<Fhb9~UN-r>sw9UhPij8MOJ8sf)) zEJ4KL;MyGVZ?rAUrns|&vku`))x@i|yEu(WiZb#PURchY>%j9>cTh+w0WoSPmQn`c zoKB6*DCBl;r^wWDI$aU40&y66S`FM7@peYY=gQJ8eNMYa=A^p_+Y+Ig&DS%Zk>%h9^P9pwo6EJ-> zlug^o!tt>24}g4uDR7G=WlTZ|qJeF1!!i;hHEWG14@bv|>34r&4f>GL=Xo;-ao!p{o6Ls7Qk0Z&0BfqLgIYB|x*IDSA; zeCM@;2J^GHfeNF~VJaC>P?*uS%Y9#LSxmUVyrUJqwWdP=f7oL8^ECGv&9QofV7gq? zN3Nz{M@!^n4Y|%05Z~>rx~c>k7X6MC>{@o+4C5M5OvdJRxNP0SJcYTu0)c?y>GapE zWECx0Znag+5RQZQBNCyukBbZa8`iqy&_&-Y8%PKQ@|j~9!A>s$MEr$To-fwUF(Hq( zGE$m5?2o|7?#`!ICZo=}23$=f0ZY(H+M&5|Ch}CSc2=0gSJmE4#36jJ7iZxdjp0*C0|9R76_s0^c=ciqAaFEIvhId8-v7UW( z)(A1>_=lG?KoZ#ySD6&NBYusz_RP_nN-abFHM!p`lnCC0|NR2Jp*N%Mr8~sm6i8mBG6|<^IHRwn^~FbT}7eP0ww;D*H+08H_VY92yCGC57noSrarj-$iD-MzB7&h3`w1>T1|&XZ_A}eQ5RqAWied8bs&}! z|ATK(l2{_=|G%~cE&~ne(EBUOqOyZLKnymxFAD zgu2r3M{t*vwkYasl$w=|$Guy?xc6)ssV?^jGtVXlPj7ZUg{9VjXr9$6iI!lZ?SBGI z_sPe91`i1(o@T$pzxORUc3wq#(m+_-J)@m@b#PzHr;K$4UvJNJL13B`>k(C*Hlao0bNCcTQ#?nZMRU-O#n z5XqRI3&hOMymTBceQ}_mqU+z*pMBu3X2`gO0Up&U7MIg8>1eHyOUJ8fSn537N@%s5 zas)A93t;d#kEh2}c($tCl^FX#+EddFPh!_+WXt3fg4IziLIq~-Ek~=>3QhO4>a8Xp z^!a|d1jQOeei=Q$Kas2HRq52ZQ1F<4nhL{;>KP@6b1^%H$*w>{K{6*EM#fUAV`!cI z+fH9>&-b(b_8exuGjs8IN6pt3 zlcI1I%XPJu{&s`yr(V?(h{5SGRTqdt*%(8N_evo10{U_I>%;*k3B&js3Q-{hw<3Ln zC*-)|$E{w96`d4>whguCNuXSyBq?Ebvi!CUKa_v~E^>SMc2k+K8#BvW+4-8(*QZ*g z&fmhISfJ^0B*;&}0Oo_(`WRfZ{wU@0i+4_@GF}bdFYgq~fyaLWy#ZSC2CY@5Xboqz zXa0*LqF8)*TI*m8a7MG?o{>|0I2^oW$+G!?Vd?6L=#AR4Jh*e=vO>f4HF)P8nF$M& z{ROvho-+05=WX=S?OqRcm0$1kaZjU63;;kR(UN4KH2rLMso;gi>$btwX1kGlW2jB% zGh-s9t%Ie~5N(+FDVUNITZZVzBfJ*2}8yU{}48sbFx- zYzIvTx+NCe6~KR!_lP>yqWCKQ?|Z}3ymxNIKp3GM#*DY!#vZrFC^&(oq%|8 zd}2v#ZtyT!5#ekiB@cE`zKPQ;3Ad_g%`9|t z@5;vULPO$j00={|%=mnx*90(w?@Pun!@jr4ml@~#TERKpJ>kvn+%Z&A@;Gn0e zLW){1Sp$wJGSC-umv{snSp?u7&-dJ80QUNXmu`MtWfMfTItiZET%(I^GqEv=nltkG zUwrd}72^e67I8~xYEd`+2Io{uAu2Z*a$H&M?5~H1K(b@ATcT!}N3V_?-dm_VqtPM9 z{{4Nz_gA<^4*s9c=$MT;#s-CP%1m9i&mX=LS&AFv%Wgb*CSYohF*IPa0I0i< z%HLVXX^q3uH{`B|vmyo3?yaZjzB5mm%(D4)&Nx0KR^^dp{w3^)g!uh`DFaU;0Ep=S z@3-H8E&Ly$EZo21M_K;l_jpX80zbxs-vChVJ!#-G-Fs54d-}EgcNSI&Qha>AdjymO z*}@CJ40^-L#nLyydsLRDM8M8ZdH}@UA%d{9=~tFHrr;nV1I#P{jP_BzAOHqV+bjcA zhXL$9>j2-AeE@B&=^;~G=D+$UbAUke4gf}X);|Iu=u$w7#v!v`DT%AA`&Enq&$L0K1zWdqY!K7ep2g;O&tSoEtaS=G!GI6R2)( zTwo{zhy3?L{dzj#n^VNZc0|9fZpMR+T@s^G%X&KE@FQnRF#i7GRE z-;*kUc+>PSIxY=hN9>{3SbB`+P2-9y|NGlPY+9evpK-Ya-|*kck}Lc+^Fw50aPYwT z@h&rfdtsrvdsC(bk(``Nt;PPjWwhz%Ik?!YMD7Lj=Y75MTRS_A6$Jef#H$-4Wz4q# z0p(O&>)2srV=6K*@E+re^9O-oPB^>Z+NBUhk`1Ir&|yZ*IJSB{NV}?V$PZ-r1{L25 zE0X0}pW=Ho4)7=LUwLX^Jceq!G{{)pmNVAP?=QYS5ff%pnHq%|tAdQ80QyF-?eHyK zUjHAd`PZL;1UUy>7VFO*(bCqAPs63pA6dB%+f0=dO(61L6v59!uXyzc3)FrFK%q zJmasbD1t6m$>qla>HG=I2b3^Ww&l}@{d%dAMXV76u`nT^)LE^(mSSTZ5)*-^{BV540RNd5r3>gnBP zdHmL8$yqkrm|Tb6={7V5+)fmS7a;3u?F#15wW39$?arCjxGDmtx?o6~#o#oUs6k(5{b|3WHr6LP2NbSBjFWIN#h4kmR8>&jEDAk^Dh^^)^5?&vb zdRj&pDwnP<}cGrY_dK(rBj0p?{Q>p~b_VGpU z5fcl~UNuQ`IhQ6GHdTgSOHKKLNt?I(X`J360Dquok%k*fA(-X4cC;oHKidnAybP(= z@@wpOqyti~$nts44{7QtO)Wc^ZgE;pB8B;$#V;KBhZ}W8T{vW zyB9`0??`55W1oHxw#+u5j){CyXE)R{o^nZ`_rnP>QQ9h86#r(WWj}L@3>0(0Y2Z%y`+NxW^FniUE9Xt z*6WL22?oWwuh4tLjjndCHD;gB-<{vf8TmRUU$x$ET~x)AGSvXII!br#PE$cXW`{W! zu2cOYqNPv3&8-TZQp{prwn)pEzs%3q1XNOhd$h%;^*y=uu(F$xFbmnte*#8-8NFrQ z_@;XMLHgE9lZS^6REW!Tx=w{%_ufu=j_%a_*Fd-ePVG2Q9{ybexs~R?Z#$9(2tMjF4yPJ#y1A-+AW3SYPUiSD%9H{_?0okDNm(HM0Qp7=!uJ*G08vj{mvR9} zNd4Sh+@b}fWhsmzzyHryf-X}x|KxP8)fE1P+9WU3mgE`CX+WG#dQxP)&P~9ckEV!R z3=IrCCCUJIlU&H7Lx>4C+}*X4qTZ5*+$A*}Yb1QC&-h@8HhcQsdA|2ofB!4W$av98 zg2!F|0m$D|2K}+xlF#P{Hf&LHP4S-j2BX&1;g^zp@WipRFxa{>7;Np@-+lrAG9jQ^1%9mYIBReOmfIpW2LAG^^Wjs6 zVX*x0O)HnzfxmCOdBV~I2HRQ*{lBIbm2m|I!=5!fcKE!H?IgP&B|j2?@N1z;`5Hcu zs*9~~y{zsY;pk{-d*Q3n3(bQ46Qg3kcwD};HGa(4`@>%(rqt^5p_cix7@QI%{YqwAAp->*J&yUzVkSf>cx+~w%Ik70f{dd@X zW9whu4hM@iR`@^hZe2N81)q=?yfkXxN&U@g9qf}ldLu0HsI~INQrO*+Utty-|Fge4 z)Rzo?{rYug=AZ~}`cQ~qd3m{kfx#r=_Z)6Y!^yC`V<8LZR4WOe;FhcE(^e-W=rx+s z<$7gLpFSlJ2<`3dkJ&w|}%$bgOTsM58i z6f2Zm4o!UPF4rfp=pQz{Cak<+oS-$J_~!b>#M|-q6=8SMU25Swhr=UlPh*Uvh8P*^VVf4n@vh*W@;rGoV>AK zLZv!bWQX;YyKxm3TjA~3EI3&fd2a{`-R=!mN`;q)|9rq~_7W^qFMRiBJ#pc}8radj z(EOs8@$rk5d)+n_9u8ivED?QJ-f)IA8_M#_*zO$=rry`rXBlNg6S}7U8(OlAL`vQ= z(3PM0bUra`BIOjZk2q$tr^d<+-B?j|Vq$THA+!C6@4y~afwqck!996=2Zx6+u`h8J z+L(XrKbbgQpqNryGk82)Yu0S>nEF;TZ)4$0^0}Fr z($wEo%mXqnHeEj_;N-6^+V+S4&;``Vs$Z_jKPY%h%gMa11y01K-e~;UlllP)(VZ8M zonla`nkLgqAi=MNPN+w;_IUha(~vld!gkhGyGk9iL3HeI=D*?9{Uhul}aoOm;b&~hh+C#67At$Z6=wA&fQ?ZGC z3m(5NFE2AMEZ-^%zH=qf@531Z+MnX01pyglRt*hd)n;a$gH~Te(1wHRn59S5?*%CKqVcMV8oxy>B;^nS={lbhaA_TE1;$KOXD z)zs5dY;|kumE5uyp_<`i=3_lB6$ramQAIDs# zWHhp#Y7NcF7n;dm^|&^TJ8fq9d2ZNScrJD$EE@@l*@3df)?#>Ar30B@YGz~M^jp|w z`Ti>Eg`(sz058xi!Txv^^R|EFn!D z{zySQ%`A8;I_EW+^9$_$amd-ldEXTrw{t7|oa^K5t}#G3!O+=|g?65~_?rHr{c zEP~H=6kl9iOf8f;_Ix%GF;sZG$K7|608NMSYdWyt+S*o6^oOi2+d6H}6v$C`?AR1o zo30by-qKc}*Cgs?N&2Rs>uxAcvOm6hAYORbftXA9p`bub&X!UiB{DOwU(`K&?bi*@ zKOJl>=QepCEvKI0zvlwY!tRa@5$9>We0Yd{#mLev?0K_m#Y6sg$HM2{ztUGXeR+BK zln>kZvJ-`ZIBj)S{kOR(uEVBytwhFaY4y9A3rD(wI&0uKH`L{Ku^wakUO-pXKE~y_ zpmxCy$^+D(URxnraUT0Hh23#<{;XT6^RR5&9_khq$=mJ*{X#yfiaP{y(awDWmDwhf zP32uzci=xU40EUpU`f!_H38!k5K*YgFco{5QB17B(QaDHal8On7XBuVTm*Q zYQ#}7FFK}_s^-ae<5K+mQ!*0@edUvSg?ua{x0r=)9f&l>xV+24%eL(laRpWSM_^UxM9xh6O9&~7IOde$m!Rp7^M_f z%V;V1%goG+7dLCU8PQsb1G6L~!>$FhSZ`wXJ5wwgu2enC%uFcp3cuVn{g~$UP-EEb z-A6aX_~;9z%U-4u?UptCy81M0KS%n&ado#~C#76{Qm6k8Eny|^xf)vmr>%RdKG^3v zP_hIHtq*kzIc>c$d()|*S=K+?v}%H70rX%K#R%v@&n1Cu>ckD8s=onMg~4vi{&)C6 zsDTFs1zA~HEl%}km8I|Ay?b(M%IWTsXr9UG)0vCcQ{3a7Zq(M+E>2U!iSI$|K%r22 zdMp`~zcNBtJ{pO~mq)Yw_<%Tsf|3Rz0dD3uyO&w)ghC;x51d{Mb#+~k{9WtNp$2?0 z9-nG?U;4|tyBo|xwHju;Z`~TN%#)E;%8h(~ERjD!Oib*&0wmV$qmqiy8$tu0Kkr!^ zJRX+N-{0?pzb6PUEx~dFyYBgD$T{3L>pZ@-fIzVEYNdaEclYWJcI*s%eGv#vV%q$> z?maXeSA##*($&q$goZptHsD1_0Ng)3pd3)gs@}@SCmL4xQvBJy$mjA)9ZgeHZmL&x zq#}il>K;lv#lDehZn_G6bW7KSIpO}?r-1_|IM*9D%=!h{v3wmn<2{>e`O=!lP1;UG zE37=67K!>^_K`cNKKE!=nj)wu=yV)MI0 z;QM`VwY9a)7XR{P=S~Kpfft6s4jyw6#6@SP&E6&MUA`eB!hC#U+2F?68u;_^-1=ZC z>~$GCXV0@Z0yx^{{pKJ-0K(XNF|S1GZg@^k&O$5o-paj}*;#aFz+MUdYut=ehrlN! zh6w(XD{$-y&DtUoNg_{Fg1eD9YQz?G#(@}!H$rO3;OOXnN&+tC9%d$Oc4s}%LtRGP zHGh9?k->9P$Mw|D242#vr35~ZN+ zw;1}T*vrT0k}8*-on>iR?au>|TLA+AgIx-)g74yT0$dko@a80`KD>yLW@QUjYCQId9abyEA#hC%-`;Qxy^_1T0&kBEsDI2ejtEicxuuJW$`gBPJ#4xw>x33NXA!V3@KHX`P_$jfi}HW#r43%bqnK3RGe?JHAVI zy5;SidKmns>CBP!s!G1Iht`|X6QYG10P)osunX+r>J}#gv*!1k^2YrMXhUhiNtt8H z@Aprtlx83=MmoLR>lJmm$>&H~Qri{PbF1Dl7FeiDW`Q$}IPL(7yY#YQ6N<`;B4MOB z>f_7u`M+j5u7Q0Z*pkN8o{R|Olt`sM0K1S`F5Tyx5|P)q;rfHG0k$a-mQ4U$blOBQ zjfdr#EWq`AbD+f6xveNYGST~O+2P{~6r4rwGg&U8{)})bz z^Q(C-7OzL~MH>dQ&UjfL&yK{dxoy_%H_b#c8|ShIu`7A4;W<^-wH3Ae8L{hNZ+BHs z`hr1J(S{@F5O4r}e3+i~aWsAtaI(n7cK~8|8-(ULVsZ@CMtQiT${YM9;9_dY6{nPl z$vJ}?bT93;I!Yh%dX%!_Ml*23Z<&1>TK_>x%_9B9om6PN9{dne(yZry57*#n&dEZVT^B#Wc76kHSkyaQPm_0E7G z?SK=y7;^sKdgvcBVg(y--MV$ku0+Gs>l4YY6``CHOfpTj)W53J6(JG7v29O+BLd8e zp(#0Dc&by^biI#WSLph%@a{q9KaXra*gL2qtMnj}Y#s9tnK8EG2E9X@&YSFmf|Z2@ z|4wfzK9BHU{3= zVi!6Dn8DF=REZklUBCur?Ni(iZRM(a{;`N}w(!6JKX~SY%&O7Meo%4@7}R;gRqOg+ z^=iYG8aS4dOkB!I)?tP%iieYCSn|zzJyCk~a7#UcQCS|w$C3T2F;LaTT*JnOrt?A>~K=sN9!NB>y z$boF@4p;2_PqYDkN}4g%PUR8Lqdr{=DSf2$ z06KF&#tS!2!OXE`l*Q^zapXl#4d2GKFwt*bIt!8wkXZwP#MDu$rw`a6#Tj9-Pa)Fs z$A=rjs^F%Sl|iO?;B1qzKX#tsEfGpWU}sKtsP=l={3I8RUAXL{kb1GddHe6D_WOGO zchqZM7+1lWoz!oxD8MuZLDBBtdrujN#36l#Tdcw{i{^IMJMfKQoAeu}SH6zvvm1We zh!@EvgGJ#)F^3TMksJeCU7zAvH$uh27Y}brpsFZ#x^hHhI=2|w1kMkkValYAKGsGd zS-nrhz!qbZVtmSeg>|3!u6p3}`>D*HcHzIC$Vijiq^0vDD1l!L?CRD-Y7ypLzW=A$ z>e0aC;1|Nd6*H-biohl2Vrf@lB#J#)f0lafCwa|_;f^u8Op=-`(xjwOD^qgbR4o(5 zl!`Zt2B^S~Utgp`nL(D!D)uoOLn`{tMUB|?E~jobm?C<(ETqjP zX6L(*X4I71?EI%@8==tka#(Kl!y{7_j5?q|>Xc@BZ&0#~G^E|M{usfZo<^eU7Yyu( za~EP_cuH4cg~$`vNmNM1ro>WrX^8-%vS;_3$DW3pT>K@c92c!XU+By*@)8Ze)$1R%p=B+EV3$<~rMRQY4tH9K%CeON9Y ztI3(&gi5w+>1w2M@rxWBmrmEL)ixIY;Z$gHdK(nO!-8o=Ea z;@D&)3%iK*IiT+yxYvKimB0a7gkw-y;U=9E+6s!V?wo=vqFpz@SRly!0L~{l(58AH zVr6tw9_MIG90r{36qN~MN4{#f+Ur+U@JExY##hA9nt#ZOoA38ls$mn7b!4Ma%1RGa zx994oYtSSP{5=UE@e1a09tZqZSn@`6#zVYF*njx2&p@Pn9;dPpnipYd%E5HtcyjVP z*?;}0m36^Z-oJ_U?e1Ii%}9@tO48P=$2gRKUv?Fo4aw}KyQ}xNg*`4w;|@fMbf14T z`F#QWxOqG4vuhI@^8535!$zYZuM^1$HNJl7oK~^+H(7&l8z397oZ4Hpw*c(nnJ*Rs zlA71K+64`yFDJ%MXYONo@=A?=crDduw_2FGjUe>ws+WbH{qhBh@}zI2tVVL;7v)o>=1$OQ}4sR-we-K~%dT;ji*xxV4(1h<xJR$VK!rpn6I2vLtp9zdlMO?7Mvj^yk3>lKseq0aUX zO{X}WIb^H{N3(t+2ycg3%+LPBVyZA|o(lXt@8=S}PxA8^uec7&!2K)N2*C>@<*D4I zTNeU>KQwYAS3`n>+_k6#4)XT;&40STs39vVzWV+u-oam%8i(N@aY16Rz$7v^2KD9Rx!D8 z!~`c6$ngYzngQ^@!QUtNaZjE;jd?c6sR98=#Uql8jEq?-a%HbAj&=2%d)VE(cQdQS z0Hf2R44CKP3853ZN~H^LM|wV&3^Kw|RNsjecddpl4t(#4^>UVFfi+cdwRy>Km4zZb z#!XjLG`$~=ATD<=${_!mt3jb~2rOa#GwD5VYf&}>k(HH|{!#L&gM#osdiwjD6CNAZ zQYf~a>>wnl{&;F2vN%Z)OU;qtv<}#+}8T+Q6yc{!EWLlvUb4_a#f_j+3H-aaXM>C8&6qbn~P4C%kgxj z3$9q7kuoc0P$M>b;a1X3XP`xQW?#oT&v_p4-a@YUVG>oGp}01QTw zW9D#|&MzClN$mD?dcQVGm)>s|@M_jg5UA>R3EXnc!;z6h8)bZUgSZTN@^+Pt)S>pV9)>W2G2ZyR09Z`r3Q;Mm7i|0MpJql?6im&OX5q zeM6H6D`KZI%F-PvN^`T1S&|B1C+&rC7}i+&Y>Ek%!y!#DBUy~fJ~)WZ3AGTmAUY*?S|SB9G9w$V9I3dv5IsSE7ZFkHlibNR`VmDl2sz8;lR zGfn*HQ#QDgzC(`~pKgpHK2@4IB>*OugN78$1Sr@bO)AWU8lABZ+abLpEHY`QaB$VO z%&BWkw~R6u_uEWZBV#?W8#o)54BB>Oq87qvn11dE+WM@DxLZ?a=O93kY&r9* zfo@wjl^RZ-)u0}r;{zL~w`c&%@sy86A@E}DbaVT!vn;>0cCJ!rLz=&BD^_@9(e5d$ zm>f?0H2R`^ATnY0=A2HkZodf66TJ~Y*Z;ZU4?6zd+^Z-+B>D6Qevp)mSwO)AA*$Tv z%#lZ)69XIW=jqO@tJwxH-|;2Np!vN*&dWgKZnzrl%doGjf0^18s3`7aU)I+oL> zm7tZ+W9L@ByV=*jpG?KD`)gU4nk!HI{kSfefYo&aN=m)e3276#7h+*ssJ* zU4piKlsn9fv3oLI_wU_pEP85;oj1!^T?z>BdcT%PH7w@R*X5dD$4q`7<%NVfRX-X4 z@o6kZTaLu!?08Wyq1>WN;HnYzez;%_QQRlsm@@rb;mCc1kqJuB1Vp1u1~8LB;p*cK zA}O3HZT2a{M`+j8MKoxVHDNak!Dq{QO0F~kyXNqL+dTJAXK84{vZGC$`yPsjw6?>Q z%FaTdlUe;l9zb2Ezs!+2yJbcPu9V109N*5y zEpReysQ{D$g|2I!n~>pTP! zF+RpWdZg8#buk8PbZJekHS`ULR{-Bg!+6*C_gf9kY32n0nq>M3we^@Ub1l{8mn`yJ z67hl~P;1iL-8I>unLNfK#M!=y^65Q>VA$v#DJ z7__!$z)Kyse(y71k)CIkpT3B|Ycz^o+RvFy#_rfK8H7-Jay|GUAbcTlh0uXfb)QCJ zlH#J>r%_44JZ$ck0=9Hnq_a;#aKT+g8Zijt&yA=nhH7Lqa608lV*|Rtw2%-`su|Ff;JQl?~ zc-;CU>E}mZ4)BwbK9hF{-RVG9+@;KoL$t*4m?)@ zn1iuo2kp1_(U*b%GYF;W%A%GpB292r!6`h5Fg&;?kIkCPu4;#i*5~iORH^y866F1$ z)LwsmKu!=i-rj)=o)6_3eC_EIPWE)xmr2Owy3T+IzS9RE`ft8~HjGAb=U)lg@EkOm z56RUd`(2;|cF%HL8~6c^R`FU_p$)f6qQS{Z6vSDxmM2YD?rG0UE~Ivo{XzkQH6deC zBh>0W6IwM0Eb7pd_DDG<8k~($zzY&QK|=ChWTTEyWG*G^)h(w0jRBGD+oD0U(|{XD zOxEE7NH(O1S$t~MClOG31-?kZrr@)s9+aeEb2HbdKU}+WhTXL{tpjDc-v(WJpHQ^RxxgY*w-(OGL&&}uK_~+5XUxtG70Yybe7BMn%+7dX zQhULklJ(-CbpN_52zIBSsPWQeqs=)=D`qj5tFQ1v&u&5oZ(2zBdNy;J;pv0zTWC7zgCY_h!d-rXQ1$w-B0 zbf|8wmWb&QZ^#QCX!RHhx<^A*v@}4Znjh`7ag*1>Hfgd|8aqsEtT72# zvK)g^H3+%g4)2SgXvb5%RIjJGwniiTH(=rQ{_`60s7 zBc6%Wi}VI6Hs6%02pQ?Aiq2Y%INr#Ez`TbCscmJ~1>|rOM-mkr^uohE!koX)^GGuN zvv$jXXP;LOXS6Xa!Pk))%Xh8@6W_Ux6m`TZ`;@=%{GP?4{C=HqrjA~VT9RY%gbhy# z0vhg4?s*3&jiz?cLNl}7S-jJHGEYi!rsh>rANnnq^PxwD{PW16SnqwS}5 zW4J5GfLVYG>7vuR;#e9ZFjB`IPBUf;F6n}1r&^5xR&{Av6j zg7n`U5O;GKSoQFUH-c1u9sP?42yl{-Q_}`#tx5fLjJ{@0xJtu!)nIjS-z~n7KngoF z(TgN5Aoqz5QLsKKZ3X26p8k^QeWC~l+vyMCI`6w1pSkEJH`BJ3CdG8*Q6Z{_(2pz+ zoNx}qp`y#@u}_HpZsNQY#r&(0_Q@)i4$I!l;+8PSpT=Q=EfE%SWRroG@zf=$7z3vF#ttkkxEPj zs?{fAm!&++Xz^M3j6>Aw2cC1RPkuD@28wXkx#j|wu9Jv$pc_8PW54!g$I5g84oOuw zmkKJIL2(tKX+^?WHc2slHN_S%&h(U1EJf?)%@!R1Tkz0eisqoWfUbEqQpo%X+hX0r z0F#4x;ca6tU+Pq-O35L0j?8a%A%sGn{ke&5vKx|numzjDu2YbY!#sGJkEPR}3l8v@ zKyHJcn}qXbca!jDBKog(Q(3AF9YCM}Ed87&YGvUTlTHTca3ZW+PKl&chMuB9;O~AB zr5Zv4AJUUd@PJ!gO+pPJ_Yb7`FFrkx!C6f}*`UjIdkByCIqUf8W#*X)&*eYOAM-WA z{$O(`^h3D=t7MM$fm|x<;rj{dWCE@E#3ADfE0Dkvw%@sG8ub{MvM_pcFJEM}Pve9? zmKJnx`2%DaUkjAO-0xQa3R7d;~s zm-g^)tHQv}1kk+gN*6VnlW$^Y^CS?+FO;L`vPlmJ;Lm}Xf29F|f7V}^2mELtAZDs= z%zcN<{{8?m$1TnR%pDe-7Olsv75-Zh%U-ol%8`7AUl5Qi$S6~Rd6m8{a^sM~X?&6* zpj;&l7;3UgnV{KSToEeEch38-)R%29f#dq-P4u+-A2st}_fi~>k$)@wAgm%el?5^)9wRv~ z^oSf_o7?Ex$cYuaN)5)<+10PFot*j5SArCwCSJ=Fx>kNH0OUshUXy#-x^5}9SZ5>O zTcBhH(Wu$HCGTRA0RFLk0mL*l^&bS zu+2@Iu3(P>P--3^+xZX1`8(u%eI%D!^KwLu(qc4Dl6&$3Uv=e&G3HGpK)jPQSD5Z# zZ3<$z(NHYghp0FNDC7k|c|Fd9NIenuEmN^RVLmd-p?yRIbp`It9q*bTX>mEP07*pB zWIKFhOa1HAm>C>kK6a&M;TEuaNQ@{M(EzXW-$&^aK_Sf}SEJYRSvS6rzm3A6=cd<& zEMz8Wo+jh)(2|~LM*>jh#W1k?ls=Pc?P3*iXhF$pwn)Db16k5SrGe-TcZE;BS=R-s z7ta>)z}0h;(|A~78aLHXSFseth9LM7!x}ehP_Zd(#PWge7N3$p(L_p@kDkgBeZvU# z_%1{Wls{~TqgIOj%A_7mGR2Jel8eN?Ip!nDPu$k18*&X8s0#8*SEOI*@@ee3@8jr^ zee@LQ4TwyWAzrl0UD8qVrQz{*6`G$>lgU_rZ*ptQmA{?m_p#^_b@b}okvuM&d08EV z%+EGKE90s`WImR#P@P*kQwZ47E&yAvrv`ZctNKWEHe&ZoNH`+$=8%usAl|J>#p?zD z*r0KJIA+Mowj3znG`CxP2+-5y9Z~Y$)KW99&uPBD$0>`rI}HH`w>!;UTvNiVM4jKP z#EH=pNPoXTt!iat053!AK&f3u7CVPXu5`5~Gl!Q=s%CXo*;G^A#vjJq^V|k11Qhyz zNu1PwG!An2$=E&@!YANcDS-kqfE}T=RVESHZMa5ah31C(Y$@aP);Qi7aac}>-ka;a z>h7*R*+Bh1BVDZiUS1xF$#;b*9tB}g5aIKNYE80jJvS%qpXvDof(_?!U_vMC{5RGCeoB7V9Bi%?0ma62-#U%VJ=}4kE)drgAh=?8jZ`0xxFk{2Hn`b&cVv`)OuH-&N@s%A& zZVrE8fgF6*1Oz&?jhVpgv6)zwz2Ql}l0o*)lw42&%uAzIk`OG0p`4)~PX-6$fmT!-rPh`&|X| zH=8dY9EgGC{{ploKbP;>W;t`gz_BUa>Qdp5DIqA`*hn@!UUj^%fGdl3b>8e(9_SJc za;39nvuRTPC9gCx>xkj*J7 z@QUiVK7O3RMgUWjmkRmXjR@m8`f?n7~sQm*Jp!y5u>dwSh!RKG$+i%D+ zR9s|rpV&`Sj|p5V;!KjbeONY0tir!!j)h&hxWYzoN4WE(mAquL=`~qht&Be9Yjw&u zE|>wl91R#6=1`8gbpa@j)T#!xWuWeohH?_qtaJq2I23YOeU&cpRlORsLUf)<)@g#I1jMXVXMrpwD8peUXs~N-_r{sT= zK7IQ1RFU|`jlv#Zzvs@{p3Oc!;k18m(5=Zkh&=#GvY)u6$_F18sOU6Bm#w?)D9>q0 z7z#yXTjp4#q2cXdZFG}RPnNaePhS}H5M#(__tIyhZY6@ORR+m!x#{%L3en!fOOYZ3neaQ>5Lx<;IiPy?qIn0m`!K?Doz`LG$&fGSk6zhD zXDKLN6S?!=2^U9=15px07ev}o%BtW@Slz(1S@Q;6&{mN(wP{EzBGdmOQ|dIR&RpA+ zemYlUrWz=PEFYF8zm)}h-TlG@C(qoJnxqIVA-}sCJ}>!QFjp?3Jw4x;FJDdonUaiG z7p>pa2OS=#d#FAiPm1+5n78sGcOcU|2zL;%==${JKoP_<7bp)FT50EPf~%OBMq+c* z+JuLoj4{O$t6@tHD(sB}92=lp*1$?)D<0o8nzU40C`r5a>+gv+_JKECHS7n=na;^J z%peMs*gUasD4ZPqAq|77gA!kjnGU^wmPjFQ7iubQ9Jw0^dW2c|49c8MvfBi8#{zKX zd9tO;=6G9f^JIoEdu9P}4zV#-$h<(g^yIwXLw)mNe}Uap@ZI|*y0;J@lCIY!f#tH2 z)Mna31=OqIR}BY8jDZrmwsNrf52yn4LwF!Z+my(jfC9wS&~NBxmAh~2=`;U}IsGe4 zCoO{8$9y^O!7g^IX7rsBX1eJur5pENJFe#tNxi0wXtS8(qd`U7WgTt>|5u)4x1M#qU*tdYkITq+(SQ5a66&A zt%pL%ElVFNhZ;QA43kr>QJ(?fH3}K7)?`Jkm6fqbjX-UNry(CW>$gwQA^Rm$Br0nh z*y-X8A0}M<-GN_4Jk-Ye2of-1gE+jc9ix|XIl(U_AL{jJG>_lOv?2j9fV3(|O8ID1 zg@Vp_&f^(y(kqDIgzZ?3dxpx5Z9%~S$YdnNRm}GFAx?{Hg%lKVJqc)U-j^et=g_g} zq-KvW??p5Age5(TWkX^B3VZd`iJc_sr$rb=r%95^rAQ5F>}RzV887Ng<~y)gWCk51 zhgNfEtGbF_fBo0rcgH|Q8WVzcUlV8wdDBFXiDoLcsEwE!N%Q)!;gZT=&!^@&9}qG) zgQx)Fm4VeVws!aP18vdwM1U<}_U~In5N}Ccr~5tz7Yk%>WX>CO;DQXm!A~i)jj}x1 zF?d&MuRczKE1OKTbpLF=51e@4rBIhg`p-Vt__Aqzj4G){5dU-{liIyPm|+ozM%TU; zW+4*|K#G1YNZ*b%8%6b*o&~jAP&Cr6JY49Ti(VtlH!Zhj?sGw@)Q2#HlmB4gJv*mfwtsi6Qpghq(fNt0q2&lMW z4R`h}S~bH;P>++&=gze;40&!=xf>5G?)$bj(|R@FOZc{K?G5+R@tN6^d}t$RM4K(s zQHg|FVSIKUZTwZL%A&yo?uFaBVg$COeoO#%KNrN}fJe4#H6j8`-#C#+TDCv|gvfNA zVuhJmg7$`?&~)RE;9!aBTLULpGVHktb{7ym6&Un#KdFqtLbXW9@Q$ir@|%8M@k)P; zQgX8m>D?h--6RjiUmAtD5h%FuG*yJUl{IXiFrl)*mSF_;CMO0CrJEER@t8QEjsHOae9m)Fn3Y;r@He_=x+b}-v{;SE z1?WJK&gIEvUa!fKWWSQP7c2SaCOkL2tr;D0{U?_1(IGEshE8a7K{Z4?x4*8d3@Wis zOv4v42UOEqv!x&%L@o_AD$z8~+WIVG@@uL30VtkHdY!vE^>odNDlHRGG*{UP2t`}z zj~*BJt9w@T2Wy=2D}PztxpT>a78B>JFRgiP2$TXJ6~O@^K+CYkJ`MHI-2&SnVjN7B z`1WGdz%QF_pZdt{sYnWk3Q8I#Ci_Yo4D#3p z*ik{5BFz^IOpF1$G;&lvZ#nsX+~RfF*S~X@T1m3zMk>qZCZRjNJs+^Z}x(CFZ6G`UwXK0XGtPs+XsssaV>*{kL5 z5AT7x$qOl9H=o9QVrN<9affeJFrXY4H6R;ceK6{;7OORMLeP~j*~j?M^?(3TJohY*eKLiMAslm0nFaj0$>6ap*7LeJe8`So~37?q8QBKuIfL_7*~;3{I!GP9kkkpKL&J@Wd+VC<$65Z^w*k@k)tFw#)Y9 zhYC>f)3<4Y?>~!%3zB}{__Lo1oBBXuQx*KJAFuu3{RvQZ zeF^R+rC2%(>V3O-RgC=lN5El_1Cz3VQqn*%c)|vob18t=q;**er1W2dEx*m+b&Y)! z5*Vs0Xf^TipAK*==`1MVNs4=zUbRy87}f=fDxo9^@7aj-4zz$E|JyR&ssA=DsMM8) z@sor?8|3yKSWyNc2GU?y_68mU@bH-R05ty(Pny?=eA{Kk*RV^YKmPuD4KHnNemb-< zGJLw`S>~NzU@p=v9boE*ctg0}h6*H0d_bAOVY9XCU|kPOetmYBmw*tx1d4=W<&(hP zfaKeC^u|A)@+J&}tp`nRANKGnz+tx!0|ilC?OlUi0)@S>Ej*cle&}DpD|i31SG;bH zne-E87IHvukO8m6a;0VWL7g{y|#>DUqF!iNzDmIL&^w)IxS0X(zX0WO}I%-9$8 z2!ON9<$YFAwUe0{uZ!;R=DEQ^DHnTr@V=>~L*WPmt1l4-BAeu=r~vTxfp({kWX=iD zdH*6WexUzD;E^jX^tMEBEmqY8nB$sna|95Ex!+(|WU@qxdIQUJ@jab3o^(MkO3D#`MdN%P`XL^Zo70)4_pRQwgjfPbdOYR%Fh%o6w*u z*ltSdEq^T>*AKV`6}@RxxIxL$t(JO<8>9Z9HJ}XxcthtKaiE7wOuv=vf!b3-Js(>f zg#G=ZJ8@7)1`Ou*;Y>2H=2zt5ukK%G@Cs5Eah9d8~7gM3j&n8K^+{Rsd|g7;zod!O@)hPsMjLH z!$3QKCn-hEe>0J`C#Fq>P}`U-XYvrT(90?f>ad|8LZi4?0!{!7%{k@W2!=N(1wU z#bB%n<{p4YJXu(LRUoV|Z&Y_Z;36sIHz)73e!INjBDk{wT=uZz0bqfa7pGA-Za6x3 zm@7bh89ir7wAttz^#`g~5mv)9b6%U%lH#oWKhJ$XfN(`E&>PU#rww{lTL7m3#yP1t z9-=S3yRBe6cS!yPwHR32V|Rr*0LRc3{e`^23vfzMFFSNu1$7#->Gc@{VCswn{oDM? z!=REkugvNn9no7Sd)L~1JG5`Q>==g(RrJCkA~B_qGjDK6N9Q36%pBCiN4*36&pi7s z#`%XkfSKT;O+F0X6$f6R$1-~47*uFHwc6ACH){sW!@*+{qPRha-HbTN9bxp>hNgeU z0D5hBw~7ScE9{98P(LhBi!?#9Rc*n;FpYu2R=q5@4qP#Ctl)->z_Twoe@V{qhaKFg znk$AI+;CH%7XAhEfsbd~U>f_~TC+qMFLJI~7icj1sX$Jd{`Sv!P07&ZAUD9}Aj~-e zh|9we&QEbye=_pGhr;D#sWTU^q(qGA+pOOQ_Lx^0f4*N$>#dN3Z$RfA#P?e`@=DT< zi3(p<1w?19)hvFT_}K1uK>1jCnefaz-L@hlQ*n@-dPNap_rAXc)Cbu6xzKn^!@3P7 zy?lOyclS32KC3NAqUAe^4(tZH-Hcsj{!x< zVopRiOqEmo9XqI{7s3JHgDVjU@x_XIh$ujopAi8o`$1m>@NV(|{VCV5SuQ1>5Vf=V z!Mr@b{)4OT=)ciP|DXFtcslX_^%W~^duWlM{|Ov2{~fdY4rOTw9MaMPT}u7nbP)$o z6^|0e2?-NhFw);}&s$y-LZss-5|+d%yRK9VNWtPy;ChT2;e>n8C9w+P_CIX;dI21` z{^C=j&OAs$#j1g}tM~xW^5l5RO4SYD)7KXYAv9@AE1#Gw()l zw*_>^(^=(c8jY3>HSIw6n5@D(-hYe z^^d3PH|PRK0HF0rRS~}XJDG0Fp*9}3nH}~2uth#-L%q!(56*e0R!dFA&H9{RA3X%Y z&~M#4Pykc1{rg=KTSAQKGghQ*$ZU6p1IQy5`S_*y@U{P;Vop*wy30)NDbn1r@np#{Vk5o;0h8EssgymgkSAB zWmxC8QtxTt%UuR?n$C;^)9dsZjQ_Sq)B@tk6PU+W2;f?;zy|5T4cE`=@$ruf*Mj>+ zF6blL9JXEoEVY#6<@h^m!7HMuOK3w)UEO{V(^*SGDl_{+Y7#KLKxqvB08FyOp0M?x zLu2(>AD)W+kq$y~@E_EL@PGWr+us3;{dsUOZT!+v%SHzeKR*#UHn=5u+-XNY35#`c z$r`sP(zO3NHAP7b7Bss-vKJ9?2xs<#?8+f^o3HPcmH`wnTg(JEI#<1aXj*kP3~g4# zZn%;CB+1?>bq>f-+o0~WuKKOH(;>!j1>m9@Q9GNChs@~0h=CJ01A^mLUl2Ey!gr!Y z9?_iGTMzKHKOY|+uJQ{xccLf4;rR6Aq>W#>ivsGl#bLD4cARo)g8df7?sq08CdQ3B z6OHC6qww|osOs1=UMdFud=G|ty6<+KnMs$TZJWc%$xLa);z0LMVIg7Kz&ZPo#dObS zBl~?Gdz4}=8h!Dxl_bh~4_&SBp_yIFHYbmsG`V$4LEs3b?l0>&T#LUyBJ{?dg@S?v zaee=EH;HHVo~FKpwH;Tz$M0KM=0EnhcF!WMl-=4s;wCPVx~a`+c4v!&h9K^sV}bUQ z>A8Hz;Hwv|^YfBh6&Z!Y%8f`q6JOiSLrbEFh7k3wIMXQS=FWz_wLV#H zicxa=O)6E)yH2)gCRjFB?g|>M7s+}=DP1op|FNR0NnI8ZaD+Xsz}G=8e|yoj^7NW~ zm;<;u<*-}?9xk`}wfpf7gzsFgWcc1O%xURdKZB=QFX#0A)cIa^D)oX43^WB=q24NGTW@LBe@!BXIDO<$a zvPkz+YL>B`e&O)fJ`4Y=y>I_#y8r)o)z#^WDCICBbs=HQX)T9}P?5-SZK%zL&@wp; zOIMWRD2Fj~C@Kt-5zVQ(Fl@7u^J%(_DaQ+qDD{1<_xtnx6F#@^58t2MZf>^O^YMC| zo{#(EexF&uWUswSS#!v5#feYFUCNKebgs|({fSQhdh_?=Ip7UX z3dfPizcYvCL8Bgk%IZF8{K zF*JnY0ZbOhk$0a27X-W@@6xSmLYJhf!(A^idUg!H#k7_-XfCX>1t9tNgD=4)Rz3l7Ppor>He zs;q4sH=BAmSIp_!MsN0;=M}7@&JB{~=Sb&`YsN&2cQZk)E3>8fZlKC;T0y*x3ng*C$`G zcc|Af*XnYV{I(=Azaf<03;d{v8-3@9eQk5BW$h^`M1jQ0pFNJM5z2S*DQdilWjBG$ z8&TVeo*jMz?H#oc|0$Sphjz?G@LCZdY!>Q5V>izW#>m%^34F9RZ9PjQ)gPs!yEH6U zcz7^Ox1;AVA19sGAnD+>BHSNAAY~zp>f+4$I*w0 zpX80VB9F4dl3E=qQF((yODxMJ)HAtCZj3^(z@OCCXFD6w^>}5{upK6bCd~Z^3RO?`q0SL#+f?{Rlnoeq2wYU1xu7 z`ncISjE8;$>aBzO?2MK!H0nQr4Q^83KIS!Ndh2F>^#*HV=zZ~7z;-IMl~7NjY}!BP ze1{)Rh92Lp*P4>AIaMmaMcGbXZ!^#f@Tm?|oGY3w=sa{78-~>*Bzm`jxF*aK0vvtp zR?7}#;DP1(vBTDwx^utOGDWB7G~mkwnb+GlftW)1yZIRkeH7O)!j(=2WPhic^# zPm>XDEK52K+^CZLb|Cv!6PUNlg_>`$JbV%~Wg-J|Ziz_IiYJSPkL;vw&tpmmaQ)-i z0JeusiPOSqyiqlKiN5;N4A? zA_F6v>{wc%E9X>Fb$p;q%z`jf9EEVy-cgitO_4@j4=t)_UbDK#-Bq>+?ZN_p5%&YV zRRbF}GWm1g>=)fVm-e6yLpI)J>MDs7TJUZT4;idx8bZ}tdS0PZ@|W3VTWW9eE-BQr zY_#7%9OHt^IMSNROZN*z~<=_Hg#CaD)=srEc|2ZdxCli9tm8s z8nVVfbIDL!c~HiFe2jl!oOY(5@{}B#Ow#Jw=pKJkQL#C~W#??s8r8FH&;eap2WX2I zF6mU4mgyBS7H83c()yYV$h4Dll}`ENJK*C1Crn!n&^nwa%JwLw&O~WaSAvNXys%7V z>a0#%oU3cil!3oJ0{quQyCXBix65@we24tzq_?id?ChbX3Q4+zX*5ul^1y3fbleNKQ-`fM1?F=!3Pz1+G z5uE?^5$9Rv%KQ9|g%?M{{VKX;I52nbt!tx0`lxb0quorC5W`Ny{WThQZ&@U9AG12h zr)Eb+a~(bm)zy})zw|fQSD)-5$OJKn{lRLZ+0&{c#%d0^PKxDKK+GF_jEM=%sh^lW z4npP5h5Om11`ChlzlzwOBuS=kSUbL?qs>$u=S~!vvkn?NO?cR98&Sx@Q~6qmfs&^c z_ZekVHm=@OW@GySfXg4tyGGBf8(Ny(HEISzMw*+19Gr`sA(S4sDj7`Ed&`vcDW+mK0WIgts~SZ10N@2Mc1p&xm((F zTb>F_TAM%TJJghas!txP)A~tg*Y^k~<6QO8z7pM;qZQFm>6zA`M3#u;OUVawmD@Ky z-pGRK^$gl9iYtIN6R7k28xhHLJrCchEev|OU>@|gMLssDbCb5eT>qD=t!Bzhw)+Ix zA8rh3j;DQ_yz9Zs49?-~Bq(&RiO|81%vl%T@d6bE-40}@0jDHcdw9WW+ksT_TphVs zV{Xnj9E93`-{Yz1*+F>({4}m7>m{M3MU!DzM{bYbZ1U0yTDjMPJcj+Y`OGV6%}JHE zm`sK!0+o=1Yf4e@qvjv%ZGj1dL~9r0+?Yhw|5$4tx`i z&MLTR8Oy+HOz)CF*`xNEPAtapSyhCSyDB=BPUKRcC89fx zGTQ-qV9Q~Hwc?zo52N6I6UOaHKv5HQ?(~$TiCiF<xOk(bt#^ccfjr?y6t`1vwU?`A)~=)GJ-w_qucZ_f9r z+3ruSwg|6I#baJVc}Mx(D(Kx$ddJQ3q&HEw2~P6pKuOI}d-7&xMHQ%9(Yj76YuLS( z%R5SSJJx+&>6tM-_=K9^(cc z9dOxROd82O{rfal7Uc*bKlu~0u;Y;XyK33#rp(6tv6WG3WGC6R*t+yuW%(!8aAG11s@N zc9q@LYPQBQg6=B`U08r&pAb_K(PE1NeCtRHjB_CY_nHfq!=@HBCuy1+51u#C&Zy=p z%yjpphm71O6#G?F)J4?O0h8J9TqO`I<|@k4AOTngbr5K1(?^kLL`r^L@U`wsb;K8) zm37Vawa{gX60t9i77OkMVr4gCFqFx+>h~PQuDr^tmzw4U@tusP5SZJmb;rr>0}f2z z0L08o<@o#qxot14T{-uWC#xj^NNVz+e^d~!Pv!iY2c3`Kems1~j8$I9wXS+v>izh~ zLwP`&dnj1Cw-83;B1Yieb)#b|#RjHxMHViHQToB zhkqUUNb70U+W~056ch!*qZSiHP9dN5RRNV4m&1E89M%Cp&K{n2^(#us;NHb<%Q~E- zNwy8p60PieeP?y-reQDF$>;SmgF(-z4c}ib#8dY4xZ@Dz$V*X2`BCfbL3lagVcaN# z81;e~Jxh(`n+-0thNOeX4+Dp6ZrY;=3U~@h!mv)_QpttAS;_e~f$$tQlHtLcFkiX5B8}H|q;b5vUERJb=qBIf zYU(}`?`ZwVt7za}=zmOrKWh_?1^=W7E9V---cZmfz$?!Q`c(8Ljl7#7F{XP698a(T z17mL$hBvR4Y`vHD>IYDyO=Y3B?iDw&duo3DFHP>!UvDS-GB?cjttFKbdVbk zS&KXU;Q*<)rG?i{eO>8T!>s(5fB@mWKb&Mm%ZprIL#Z@L>B)b}ARo-u(Fn!W zwfD+b(MLl(Go5r`EJ|Zo)K}m@{`>s5qq#jVp+Gp=4@8<7^S?y@qCP&E^*D|&A)i6; zCxt56u+NkF!9q#lhuuJs{U(Hs0x5}H>}O9{L!1~5FvI*$OpAX>$#@iUYE`-KWnRIW zj{GY5!stCg&}b8!_gO2-nXQ(6p9wtm_=6-Z+&hQc4_KfsEXIJWh)%sp44ZwJG48cL zo9ED^1mZjmQg0-jR2}~EY2$ZMm0AG-DSQUh?HUf{cFBXP78H5DYb&u($|$x4*fGfhnjih!8uV;PT57yGjGyghaqGM(0Cn0`=C`vbt_udX6cp zgd)67sbhAAjC)3M197LX3tPM&AfI3FnydDpiCRARoG)~*8;oFMT|4k-?qOQ>R>z0V zkc()8m5M$UoHRH;n*bc;|E=C2=CCOPsjyk~=>rK}bf62r=>6i}5S_} zwu3_k3qrdC|80IFB9^bO;A`3DzCvL^JZ)&8#;|UwVvp#p@J|1bBEC3n>j~drpK?#c zvf{n+T*5rn|7`;pb+SjpWn6ycJ$Y9L>($CvKm&tx!tHiyd2nBHuKp4|t-<3`^)+-! zc|(9*=<=a15Pe#~<%@^#*_Tg_?`8JtW_!U6sw?naP&xc~)5~G~kk;dax2k8AMqOJD z&0cPtG7c`qsX(};{(0L_w?)C2v}`XOdMst{2_bYn7045GUwSrPRLH3b{P&5)5HffH zlRh)7aGn@?PB3(UmI~L1#i@ACT=GdR;&Keo+_E4^n)&xnl0B~gN5zT=-q;l8`$?RC z#$FTcn&+LHoA2GU9y#-p)O|3V)#2Onb3o&j#4=AzV7mt$``s_|*c!qj&Mo1jPX+IB#v@WZjq1L-n7m&rkRA2w_jG1tDW7jjP@5|7o@nFn zWV$UCU0}OeJmuyN#PIN)zP$1z0dE78-`NjJhMLZ4*Q@bKWW&KwrvYp~@kxtGIc;z7 zEgh=b?A>!UsnM}0e>3z|VN_mjz_ST5K3Oo0~OFo7NT;^U`U3;fw> zof1m&ae0R(V0j@^%3@c#HYA+BxuW;YMbUj=uu7xG!c>4W$ml#%k@S%Fk4sOQ#b5Z=r$7N)8^{fH8(4pyDH6rpB7aV+w+v%V z1j^t|6YBxtgSGiQX_Rx=Y@J6Fr0Aj24f^Ap7wt-jwGSQ|hUVXIsxa1BpV*2|?P=rD zia@bFWdoN-gap1M^+w<9SasN0-JXrMtxd@{TrXmsDOwMdiBT8q3jR=|_WSDV7^Xq;6wv+;N4<2)S)tK4TSuUC!!o^^~yCgT4w8<^>m*OIJW|Zgqj`={BGR5!nbn=ub_*8jn zutIv~k|bhvWL8V@#9*1@{T*ZMX0c_U_Q1*S~@|HuE*5g>o$pNTL2d4Bm0M#;$JL85w8V_yWt@rQK1T$1_@`Wi`h^vhvPh7p7RF45O<9M zotL}XoLA!CZKeGbZIqKg1#Ah#nnF?Qi$P*BnL%LjPAvCB69|DxaNB%ao6ES;^?)Lv zs>7OLV*t>{>`n+9khRaBe+-z`rUQCO{`iI z`2;|!ep>(d@$szJ$fOviRGOQbm{aGc*b5K6Je5yq39U&BowEFN>e}qY#w`347`WXe zt*@__-<0@h0DRL|3QON-HEDKvn@F zn`sVlz!=_7F>B*ym+9>6c0lHWn{%w~%KtHOOo!FgG_X_WqDz17BUy!QQ9%tiuI(9e~?eNK7<=K%QOV zTBA{@gA~WOoU*kuAiHAjSMFtivdp>$37=`r_c|;3?5~#>0i7kP?2-@*Kit)BT>gdW zS)v1%_=kA7N1D(sO5~LMm&NtZlv+Ggi0JFfw(%dx`52)+XGb+)(c0VdY+}324!0$jmhq{b zp&*efRN{qLIEOyZ5~MdFQlnM?fuGNx{mZzy54Ttoz?I%u;o#EfWsO3QJ?aIYjKF&! zWgDFr>|?riqiF2kr@CVRc~EKFOm30nYu#OZzlY1`;J2kRIN_IpWLq4lR=rhe~R`dNIo^c2|VwaDd} z8ea-X4;6We*;9-lv+Vr_?VTxFk$IBW76&`91HE2HNIQ%}{A;a9^K-X0vxy+>(&krK z+WIyLv62#Cx8YZR24JzjBQoOmftJrPPkTS^VFW{4hFk^dn@w@b?!}BpARp>Na@xCt z6qM0sB~`K*CJ%eNT%RA_roURLeCH8xuj-c}TXTe(5N;LqapUd<%80_%=9-)@TN_5c zzEOVg!m4*X9=?BRY3W_cUsu+yxb2bvwq3*~00`X((t2@C<+wIkL&O6=Ioz{I<%c+H z-%egTXlr2l45+tv_ij9r#Mb{DdIC%-+0sA%NQ#!aw?tkQ`3Ho*Ig^h6W2Vd23{+-o zWl;!RBj>X6cu3Io59>3{&{N4aL`gH*j28ebm`w0&FF$w^{!+;dukt-PgTgDKzl_=}k3YFU zaPj3ID5t{Y+wWNq<|GqZDPOh-OC(;AXN<`f+FYb?97BX3mUtsZC%`tfjs`y)wuN2&;Fpd6xx`ahCzP6r}f)&00 zq^&KlBPH?pS9}={L>_>yIrZ}Pt(aKc{87FLgZ_jo#sKxY4QAg7pBa>Sn|g43VLryu zj(yxG*jq%X}%&?ndE= zc%(>C4=DJzOYHrhr*{u!+kF3>UvTcF536;jF$a2fyW#JO;+=~ol&^h;MoA7cJ@}Nt z4#d_ z9;P>+yW}tHd?49q7gajE?WnGy%H(*3PBRw?QUiuT!96;WI)+}1^oPbh&mj<|B~aF9 zuilGCNdTK6KzbS`b*K~OlqTsX`RrXXmV&eCuVQ$kLI7aoN8X-@*!*yErxz;Wt5W_j zTJcU8ST4459g)3VtL*JPg1^gy3sr@e&v5N1-4Xj23Q^Nxc3c*W#0Kud)PD?Uh61OT@dNuV!idM@1A&hn=xjj*B#ByX z21+hi|0bdHpZsPB_K*I@dOwsOd^&IaAGMq5N`-^xdvun{i!m3BCg~PCbIgIDg2u{C zhaBy3zik6_6dwC%Ul7^rYov~&pw)E2jd$0gw(&H)F;^L}3K2Sgr8{ynx2Jgl1?%Q~ z$C)+6=@unfp!^NC|DqB!d-+COptJW6lDbSj=|YgC*u*d{4SiIjDn)x|)-g7`bEnz^ zHye4qk@90`F~AB?kMa=fkGTVT+WGZ7*$g0^&s_}OBdz6}X5#`e@y*bSfgAkXCUH;f z-T;CXP?$*PPsKZ8ExsG5Z2ZaL|Ly(#H;GvQxN{35Ug3*bu8;Yyul~SMDmisJ_Ry&N z&;65^(hJ)ZH;$P|+!E``Tx*@K`jE%{X*1MK_Wn581GvkRbi+Knjf66r~7i zE{eA15K~MszE`4q-+k`;dEUR?_xQf=`1WyhCz9*B&hz}8YyH-5t#c(zT~(2if}Vnm zjEqw0(L)U~vUAR4WM|I&aT@qUhg;N_H?hN3K4Y0s@i;E%J`GGG}pvWl3C2WIDh zzsa9J(sv^xqiP}kJJs&|&Vr1rJXYzUjFy)%?$GFsrK115@5njNURsxo{jlUUI3N3E zAO3~6lr$XAny>!>W}z6pm2|I-D|^6gFZwmb#pmSuObKVNfoO)`@zYFvj%_(7oLs{j zY|C&d(Kj+ChH;a8`NmiV`%~yCbBmaEJ&8v2vHo#S&sL@2h_Np&Y3uNz!YAVoZfMI= zOu~{$orj}8GcZdsvaGXxXGw3=U)d1XMn=XV2RcQ16Mq{pm9H(8hdpMA{pPXzotsz5bUim|e729qLKpqgGu|8-(Q^8WoloXJ9>qodsq z7q}|BltzX|tE^jm@gLk5`+It#9R)2AuRf)_Hojt>b-@ z=AY*J-c_PdA~$vNCH(^e8q0c0%{qmPje<+MD@$zW4K|})dOAdoU{jAC(moGiDnL*# zHQcCFXt6p7yLkO>FpA+_AQyO(gRZhoX1>^3KK*`+e}bAO%?})5A@*YGl5G&$MtU{@ z%O-Y7yyl~V=y*EjmRkA!;!&4tcG(4fUS97?t6^7KUJzQ;9w*RFX2e|J+#CB|bQAhO z*q;ASo?_Rz?2bSx!@I`yH!3L{4}==uzGl0s&b~fXzbNmkyFL}Xyt*1%l2A};Z;eu5 z(d7fNR?;Q~1)UiRf))|1qF)`IMJgb^MZ9kln-UaGxO=|%rV$g&2J5O3Z5)c4uY$Q{ zZEG4AItd(bSl7|!kgGfdWh>I-TRc!GMJDyv#jw?3F~<)}!` zJliXbQsC5hh*`M= z0};Z<8`gHL5$(h?C!9k6#?$#|+F^Y?Ja4I@=eTQ+0X-h)2CKaoc~E70G&5lKyvy6J zle20#Q3&_+Y2#9#SWm}cP%+X(vQ4P55ZI;Hip;r&wgdQr>&CfHOc@nRjlb%v=&iIE zd@Hs?tiCOK=`99T?JhH2!nk#|FhJw0Cc?P5EXvB|+MLGP+^DFEf2?`HTQFiLv-UQfsH&S%|^5{%LX zbGqe_Inmi4l+vA}D-Y@DD(}7TVPr1>2mk_#)H8y-m++h5m)7UCANz1^gfQ3L@nKGc zt}pns)ZT)Dw1hQnS4Lh z?eJ0;-GvJmYJ9e&*G8d-<9*27U2!esGgn=435m_qb#--IUp7NmhTf_y`Lx$W%^$qY zLs-sph?ye3ZnED#N>|%v{46F+S96QeaZ&ou>bNbn=-1H?4NE8Ln9UGrf?Lk0XnMu1bqt8W}gSTRz zUZOEU`>2$SkINgX=Xy<5UzA$BlAS*sA%Aceu{wsf4u$ox_5LV_0&8+ zMdh_E9C)4S(O;fDk)O?Ubrj(r>ciAEzS|gABoji7aY$Y16Gpb@+n0!S&X&tezlPwf z5hFV2PSmZ6SX}ip4kN{J>e@F;9 z7t*RLjR9g>6&kqa&cACgmW$OFr*QUs78K*GxoMziD4teh!USDGZaQ&{{5hGsqgZ@x zDGy3%p_7CVvL4yibfPb-52SS0E_%#;c_fCaMF8?BG4AO-QS@Z#UydKk%+O!fZ8X74 zbDPn|*zU!gAsOtujk@PZR~nDLHinWSbYMiOhk18FI8xr|d_%2jr@*IBmjr74GsgH1 znXv~ybVH12wi7FS%1?WAR}YdITn2M|&y9gBd)@1|=bnyjCihioc9ri>f0kHw8f%U{ zUz1!;m3z7&J$di3V`!M-UAos7V0vAWhW5xvd!$^TZv5mBb`l5fdiT~w)U?m4IFxbH zUfpq^$WCza9#27-PDQNhg~T+ZCKQ)GZm4{ra0rLQvy?gdCp|qcuegF>yS-$`2$TC6 zA%l9+&s}anS8AKUR1+Tj}{h zgC5F?+1K2JqqvmqViZ%9Mk0iaWNVB3qq(!)ixXFzWj~n1S&W~Qt?FbJwXAux5%)Ow zTW3_iXOX!ReGB@^R+UHd7xx5uU(#>g>azS7gRQ;t3dk#y#kp?Ov)JlYm7iQ& zjJBy@Pxv+#TWs%(T-ucz9$GfCrSGmsObc(=8(J3~Y+uaRS?nIeEHiQo-C;xbR=Wr5 z^~;Gr#kKLtqf4W!brkGkyvyySq(0|ger1vgrqdh0W}^to4vdkSR61xL3bYh0HMno( ztfW`^x=!=6m=yu5BDGvp9$pyQidIeka`7Fz;VHv-?5T*D(>^1@@Js_00v6KI)*^O= za@3g3xQ|-yXL9v=c(`Y_cFFnb5cN{+dix4I9r`ssj$ihI`KRXbfr$@^<5k6uY~v13 z#|Lodl!g}H$Y$Fji)pkJmave|h>N_%k?2{zhZoGX9j7aGOE{)#c-G4^o}MQtGC50F z$kz&m?pjU9*3?FG8KVr?JIPnUy(2p|qD5)ycjdluj1?Mn{OsoKjERxajYwD@)0{Af z*5ccLh=T28Bepi<8LaXI;CgFoSyNRgw80!uXE*h39Xz)(%qO$T^SkY zC=AA~`f0UIa@F4POW3tQsD08d2%_eG*zEhnmv`^hVdYM-$YfF!b%j%|dPKSENd6Ng z-yiL()_2CNaNn2h!-mSe(%b8(xT`e^s(6DT`HGgJv7kgQ_Q?iMZU7E@=LhR%;|6Ri zTR(8kdk)O-;*A(Z*|5%8E%8_5{OnQhC=E^>R-bm!)lmKVbLeLaUMG5I$lV*H^y=YM zzDFK7v;jAQUQCddfiP^$XT*v1I)ZfKfT3r85TOvpNob9~|Pkd|V1 zVLH9FT~UdRVyKy)==33;e>m6;#w8giW3k`WmZRWKLfeGf$wk#<|W1i`^s_x`k-LS{Uy%owp` zSUUNrzBabzi$PKFSe-d9W2~cMk*@2vPer)DpcF{PMkCv9l_zvzBN|BCYD;M(_WPG- zbDZ-rRvpkoXc?^j=AL%pF2*%8Kp?Zl#WHb+Mdc$^SgskX zHSYRa@VX~_4EgB-3R^3PycF5fm7JF_jSXKK-JC?CnYGn~7wd3+erF|Z5}8+1UWK~Dqg(AR+I1aQF_tvA-aJlu z?jW!j{Ymju->KFD^J?Up$1LYy=sn2D8;H=9vjC{oyjF|aE8lCggsBR1i)ERYyld0| z#wk_yM!Qdoy@y)75ceLgmA_pwPAIKo^j1mnhOtaK2y}rOT*&p?>v_cn6)^VsHS@~f zF8(xpyRK*qCebGq! z#b&T4Hx4B{<#k=9v_rJa1J^YfJ7zWvVys$^;#q(>n~W@VYhCm*)KX){0jhPakA3A% ztt|n>+E8hKQJfTSRg$Xw3ZqA8sNW8y6wgFH#XbUym@^l|x=i8i#T$3aOJi@_b4h(q zT!)9O)>=ZO?S*tchkrGsNvuMGH2sW$AX@Ze&7*~#tu?p2!>HR(xjOfaVKYh{&5e<8 zwdE94b8AgSpnX{DjS4}|5#CN~F1giOCB4E1c4alwC~gFypQ~Tnf}k`XMX*T}WlTyb z_|^~RF|kt=T!*BdPc(o&8ai6hg+4hm%GK|lwhm$~+IjvVG-%fN=Fl&c>A)ne9!s%F|-RL4asW>iyqwtBI!4; zlzw|-t5W+_WgPCl)Zv>D34jB=GS$SwOh&QhQhOje;qAoW+3>`>)&vdlz&1Iv&$R|! zFOV^(^9v&_mAg1-m7n^XLM3P_m0Rb>H=nce%H;)%bW&%*Q>-$QuG^$+iU{ebsvzx0 zWmO|U2`N>gt{w=^5IXfAZ-iz&l_4!N2tO&qqRA0+(cbfnFt+*4`NF>%pBm#iM3mdhVlkQtnu&S$v?=Yn}552oJ~BX@5jQZknIGcGPDu~ z4``KHrrs@hj3`%?!*>Uq!TOozTW&cS_B`c|f2Y-j8S;;Gw6koy6ua`Bz#H=%yd=E- zNFA3Og1>?^z+6C`z^o`<6*(0dySMpjp~Ajhx2_lRXm_vmqBNm?5G+zz^Em z6LlU2U&jI{8x6dDq&e#a#cB6#uB7SKMSt9|_r&_GA`{}O-lkZ>O1)D)l4*U@M-uebcr$sq2)>iSaTJ zv5=9t3Y&egY^>Xed6@M$C$|H}$xpy5tX~*KLZ<`sy|dYyi^#i|aYxscZY) zaw=y3xiQnlDxYh`1Qqohi#&n|8@kTkk1PF1+)vyU$N5JFcM9N>d@Dhur`WEdKsPi zePtT|!aJWqeeN2Nl%X_<*8dCaNtn--%6zTK4YxZ>!sKwnedI3Q7*Yk*!Wq7sU8=c- z!w7)43O5onS@cmMy%31dtCHz<-NQlq8^f)rt!9$p1Z@NHe1307Fo)_ z2$9)hlcWk;Usa7IixN>kxF~H-=*QWO@DI+hkBzfhvj}#9jPL?(Mtoni$hS*_EoW}S z)U#$Ot})-mO>8&+A{jG6KSHqjmfk*xsUL(~U)Q?F0(DEb?xP=}*!PTW!W#$%pgC)M z+x(OZbI5cSf`hfHiqb8-lg7UR9l7X)We}-FU=^4qof7mbYLg84fuMVEm1Idoj_JZ= z)7$SkdJJJSx2Fp|XuFbT)YDOqAQSgrjsF!db%Hf4S`(%^AYfVU2C|chB9mGKb*xtU zjfloRdH3n({{(o?wc4To3OIP;zX`0>1QG7V zp=6du`~8*=(j|KnUt+#o^NeYnYtmJkgSN#8iXJ7?y(yPSsLBCNl%(DrJU3*xD)-DU zZNL5al0XLG4)fc%HHDF4|2eqLW+`2j?Rvi^MdTwC=Z6wIkm3&xSrlT%R@#&zD+X6zOn? zPn_OFiGl1-Oq)~bDD7XC%@~V%R9QMUvLUa@5vAg?n+s1ANWE`X{77Ypz?TWRciX;` z2z%sWsVL?UI~nVHg+W1Rb;SL)9nh^%>JW5bc3 zuz1AGtpXC%-Y<=%X)5z!8`qyWqp8E_ho*0%i-a*(CYOAWBD3sc-1mqU?G>f%$^RcF zEeuV;%KMu6s{G_OXQuYex#Wqn#y85Vm!}vs}i<&ccn2Ek=}X7Z<6*xSCK(DfwLL}j`OyY z8rG7Rx`;XWWRy>&Z%y=7UXxfk2sE2*$>-fWj{;ugpzAEETsv>^{xttRPFmLs672>J zLdWnNj39-O{x57Bx_1X@;6t-Sz80B(%`Qk?;^yxm{!67`o=#i@Azd{+*Gy98j%B^r z8ddBb5hF?XBF{2{6gfLm+K3SM0^($v(t`2_?%8ViF5-nhJ><^W#x2({q~LaXYMM?*PG*pxWZAA zB#eA2*vs8upe%O}r<+u9TEpjJukG7J0X#^trxe|zecuAP@j(?CRrGV}_TX^p`r_M_ zZ$RFcDXTI7N~xMN(xfA#<+m@s$4FR8XV}r|HQWis9>{`+w;YF!t^PrmlMUYT2P>EF zr4MH^%n|n|uT;)4gur;JPXgjD&tQn$%8(!C?VALmAop{d4792-pWov_%RZhn$bJYn zuqs_S2Q&CkDDHKAX`R2!@{T7?B-8&Ld=4Ab<6RD+TMG1 z7x&K@i6eHR9wAkNMQS}>C04CHd0-dHV4@qVlqy|?)KW!wrQR-nqnp$=Jl1ED;?WW} z7J7;()PpX}}6o8r(I^CZCY-r$^G57hyjrtRiYdcFU zq-(r0?iY5{Ey803g}g`~5pp zt|}vVoJfLgVee#J4Ss2KC*x_FPLqNP_m`{9+jCAQRxC9a+V{f>r+D}F(pM~X7&I8k z;2o6S7`qgnu^S;QRE_)Lm60qoE0JNeieQ zTf?+Y=Hu#tT`{1vA{~;LZ)>)s918P9YFpHAY~^@JWm6267IW7mdv`)5hPX#J;I=W) zLiVLSmZz>!i%3Obu-CMn>QrH+cI4f_Jjj7*p3h%DqOyCQB*9e?WA7WTJMvn9Ax!`H zfVm3_Y{1?y4qH=TYV;}2eUW0_D!5%bxV_i2wa5sBo{Vx;Jjb2vhqFZ)A2b1R*a^L< z#V0Clvh^{4{V9Pr)M!@Z4@bd8p`st}?MJARq28dam21#^u~%=je~de019`VbeMdYd zFGIbQW-&b9>uHMGSBYxW+@-9{Lv84BS9k5KtkL1^3bFi~jwY<~sR+cHcd3Wt@T8se z`u6!P&+G2py-!Cjf*^Xo>B07TRPtCe7A1uV+bbXLSL@v*DE^Cm6j#i{quXP;T_2{v zZihhrTK{~Pz5$ujXV3fzMD>a;pG5Z&o`@E_(USaU1cRgz#}gg)Kcya2}83ZXI+on|q5w8O#&i$o+=SpAAR;pDa9$ zUx*#4gMgA@k(l$<)r6dp_39?VTOb}ph}usM>b!lD?wkHv*r|X`3@k0fsGxVdg{XG= zjAe)UyOOZk^oVEYVjaCh7ynlw(4Mjrw z*R}`KM6$Mxr#?uzwS^nt+RaM>@91t}(tTd!>kO}y1R4jInA5vX>*!36{RlJm+Q*i+ zP~42Y{e+={l1-?Djf(qex98YkouSQ0P3c#tW5Ig9-@cECg%JWRg_QBtt+uQSjOyGc zxAJhjF6|sqLpyn2xGHeqtzOF5w201wX4gAXA9GS6`ype_Xx?X!HcVc z@zj>G7y=59B{eeF{YhKi>Ki%wx3_LT5x>^UmrB8o95+Nw#t*1 zYC090AZS(DL^FmZbJT7E#xnnGO-vWah0`tD((gVIPq7)92{TMe4Li093i|q^_AocO?YbqH$Uh_$ z`E^E_9kU()Oo~XolZl1 zGh`X77C3x7JlHtMw!$(p7NpZ)u)N5Ai9X_Q-)C#b!Z^d9gNMBCG7WN$V!sp zmd;ysrJ+FP2j5;Nj=J-sn7vhtAvV!z-F6qbvYvS)h~ZQXqt$fyTn!q-gu-zw0-_DzK8suhi)4|L+9~f_!mlC4 z8TBAn?NC|y6%mcKrJ9y|Va4ShMJyF4hen@~Yxu=)kVnwFV=uR9CL`Q$tfy%wrKj7l zbO41RsjX7S@)pis38rETx<_}5QpAT63sN0!-PJPE$*PHsqEaXx=f8o|x=?6UL?w_? zZ8DUXS?Q?W{slT~I9pt9Vg>)nJq#17=Z6bcqF_DtR{r7i@b*&2gC_SCWc#)2HaD4k z7q>iKu5V?Hh}9(?0;h4%C4}7dQp7FXNc2-!+qH>yL||}9G35OiT4uaXPc`W73M})( z3Wmy_GViq6O>bf!$QLUy=@grkjMHT0>Y?pFYOq!An9fIf=dXnk8%Z3S>mz|zQ||+} z3qT&rbyt3B@N#9K{9iy%$%E8;d@R7LUPe`Wz|E0OmqV4l^gPF$)Md9xMcon2GnKb4E!0YWOi70xr4lHizly=>hs{wtSqO%Oqi@GQlk^ zatQg8HlaW|&=+f3puc7r;tP^t-74)|5c<^%q%)8;)y#qGJL|jC4_EP#3;_LrCmHV< zl7|1H9Mk(lMr@oyp0+1Lk|C6OE|Trt-Mc0Y2auERvChZa&Mj5$HQHfpUz7M&R#x_= z9%62S)s5aM0GCNbRgta>^szq}4F+0TX2(T@V8%J*dp8qF{YwwjbpC>6$y;I(PRK@^(z&|-@}4>+m>(d$ZT-7*7~qonbj+j#=n zATqM1pTsqp4zXr}-ycejG^|@27iPM!WfB)EM|AWi7@;sUU=z4S8ED}EJ`EzeeG`n- zSe6(~^hkSB+nJsiX#i3;ndu@Cl5#8J{{!Lw|GMGqD)eV*rq8Zo9ejMs4aX2Lm#~*I zW6g#Wy9IFD16`td>7AAwY6PJE5T9oh8U%p45KaVA#k4PYe8qP*V64%jJa2+zZRkIV zaMS34WYl(#3A#>0(F}3RP8Q9??n7O7UMV|3z*;O;5nyA~{_wU~UGOF=% zceh~m^zhgm6Nn%#{hv|(CcNmw(dNlXV@FUn_UESvt`znfGG4!r5#_e*6jSWWKS_B7BV}-BCW5Tv1VR+nKQ^O_a8hqEM`Xima(<%zJIv zQl7SY>G@^gVojfyRK5M9Iw08d=g+gA0S%87U9&u}CTn0*i^F<}6B??xok;{rDo=Lb7`Epaj{3y_%QK8*@zliM^z)Al>~>sezr|BP*lXFUZ1CC{e$$ZrOV*= zJ1HYm>)*EwxK*8@-)nt)CSv0qlt~6?qQeUN;>)kLU^a8nci4&F&EwQH%i^B9%x! zba3Jxe!~Cqn-}u5o57iWNEywIRq*@i7fX{uhwM~4(2Z-y#%<{XB5fh5u^t7@zuyk; z3y$lZ*qfVPeOgU-xD~cvCP`Rkh}}Sv6xG5-;`oVKAXt`r?+3%5fiK~-J0`xpqaBKL zu0U7=6d6f9@yLYQyzK9ocbXu420QyNyaKK&&J-_j#vEw9WF`7i79Vj`y_ZgX!J@Rk z-S~gb)n^oGJu(|aJ8YE&RcMIez@JF@O*9q?v@1T#Y;*&?cN$@?%D;a#^N@Ipz9kPb zl$7sMa(@kccj}x9;oqL* z)OQxXt4Z#YUO%33Vp&83G9}-20GL?M{sdmCzTo@uO*=$KoFzp=ns^1;pXx6|sEb4e zf5%0Z^fP(`8+kXj@O6LnPEM{RW_K}*>#F0^KI z!0p=RXfR50kDkt+npLkd@MR}E!R0rYo;B|GF_SJ8?U(Pi>-H(ISO1;s|c_`(bq;8H|!=!*QtO^DpsQZ2HBVwv9jjATtI1JxaN# z!!t3zXF3$7!M}fG7f^FgaAG@SO`cq-!E(;YVz2!QM)_3aWfBVj!wW0+wQf4bG$@25 zOcGSewlH;>4Wj}9%V)~AF^R1uSDS49S*hDq@Z%{$#Yjm+0)k#+}& z74_2{%wZQrSgqh>3K7JOydj!Ho|^0aY;QQ!N!?pT7-;S|#EaZvO{J;QAj>5w*~nXc z!QD^9_|X8tIv*b-08}6jUGbS^|Bs9M%%1sdd@!6k+68+u9ehb;ey=LM3V7h`9ZQ3M zdmjHmYrH;ZU>|AI6{2mL=ZNMQMAB;i{0TRf@SI+SZe9?}n`ef8a+a=!XDUHe`&E(l zCsFze`0Fje{IlXSZ~^<-h!=4lMMktl1^}eR$rIr`u(gAa!>dQlmzBgxg9)DjmP3q} z%K9LgUc%JzfAb9q%Y|2eKZCeaWbSgn76Y3ds9}E{e4p?Q;T&*~FV5_}Wyn--EWKqQ zs+5x0`ks>HQltwNNEWkas-p2i{VHUb8}@uvu&iX-Qy{s||B)nt|x4G@GDWe>~-|80E$A-}GpqIY!CK3SCSObjgpS4-2KE@x{ zdsr!1!JCRITmp?#oTGBcol}ldT2d!{!LiPA>tXv zN$)u%7lD?!fxjb$xa6U)_aBsDP>Fzm@MRtJU1cYbxGnnMBpUSVD%4VP^JyA2*Mpkn#jC#tZs#od3k3vw^ z^WITIr+}&AlBRJcfAEG=Y;wZs;A#i{ z^OJaCBdg*wo?BKSx`12t)t0yrB}XoO^ikIrstJ%<2|dGwg#?0fF8T3DobJm%OuS|~ zmyWmlsx2I0K=5=2$iY*}b-<9h_DAdC2zI__kwH*8!8Gh-{ea5#x}U`fGkp@Il5{s@ zmYD1!XRZH&eaV0x1pOGVm&hWz(8#wzfmMm!+hDzEK&M%=Z`+zpbc(P%yedgAa6G4}OIHfUE7HzAjvOZnk|5~C+(8A}Wx+py5zIuN&Bpce z%#_&UJ)=AtM%vA?(I10!}f!)ML^=9@!vzWj2D5KuSoeJt+C506HJV~4&v041|WV( zfON*GC$hAEy0-_7%m>&ETfxVi@1NGfIM~3c9HXLkGMOiIda-XN-KS<^5;g@pdX>g( zzaA#nul)!pa7w-j2DUnVbM!isDn4NT%s_*mSa%s)1e;C47!vz53K?(n(!;TU8ju#7 zXBji#RR|x@58%g5_=mK^vsL81(gzgXd|N>5J{&!(!k+0LbnM9wM1s;kNf1EWhn`u< zaj%b_)zbH5x*t`=S4>@`OLYtUMHRV36|{Xo+T_8prd~Fntn#I|ynd{ic}4X&wx)_I z;AN_xMD{`uxw0_#?5Z<k4owr*|D=`~j`;w-rUjq#SwV8gO$MEmWe&NRFkO%l4 z@J2T7EDU=}i*yj?r@rlNgv!pD9AmXZ>`4--oL`3n_9xLIsHv%2T!nMU1vL+x8HuWf z`!JMB8KbO1oLkU~Ou_bVNpfYF2sRFXT-asta^%6*r|cuSnY3TF3`jvBry4MAt~q8= zvOd1O0i<3wXUdfK@(do$e@-DTJacy~imT8a zNFYA!7mj#CZ>f6$e!6~;-&#_w#YY*%e`8nF4MRk78Bpw9d=5rOvk2*&T8)+SPB z(QWQ{z03Lav2+9+m)ZDZ(%LvPz65N((v_`CQvDpDhoB$JqgB`F--SziK6iJ|li!cK zAPT{1q10G!f)FWgezlv?|z}r#e&c_SX?1Z7sX!d}antdxj-_yS=GHXE; zpWe7>K&MlC=wDXpEIaDIH%B|LQaHHDnRh?x17E1I5+F~=vH%1UzI4f1&9!R9+*DH4 zgz3lX+ZGzr)0?YrrY#=luu|Rnb~w1igKw9*w{KD%`5$-YgC9HBISYs|vW=R^-Q(^a zQIRvh6rLf7I_{cbpmp-?6;f(Aj7S7R;oXihwi7@5wUXCtCBeo_0*)lH3M(U;=2b~+ z8gR1WLIN@2AOp%DdgN#ci?LSFaTWP?-V?C1&#I78M}Dg{tuo0;a^^AI0gG!YeI{ZO z{#BM6NmMx5vOC12Lmh~8$_ul%t87Sman)D$} zHH56U9wB$q(DI_IVxC=L`|J~%g@?@V_2}J9sL-)Q75f0NCGPB`P)ttPB2oB+{4IRE z55CBK{yj5KPDsSUv-!`%dsCeKZ8qAe5=+bt#*VxJ*S++&u{;Esv2Jd>(FgHw9jiKL zpH%^djj+Uav=&qIkf{8V~WhrzsLwc0Vj7{F}uAzg@KE%cy%Y(AvKV9wtVZf zR(;c<0nW_;WILs9ae>X~%=%A_NiOr7Q7%97L31|E_rS}Xw)PJ7IV%zYK*ifQQDU2q z!&Y%JY3i`ms0i=0xV`fj_83?zCeLVm@eH7w6#yjUR3A_47uvi`KHha9W(a-<=@B)F zjZ!YhNFb8PX*38&iNfxEtqO(bAu86xYw-tRHqEAzwPg(sx}Wc-ULqTAE@<2&kLt%M zS<2d)N?rjkjJ}~Au+S;GT?i~W!wm(boGR=q)W>Fb*{^_a@N8|JeF=FomOlUZA?^94 zKL0JtI@z{S3$pTSL~%_y`0vjd`>{R^RE1XjX7YjDyalL+4D|wa6Dug!N1DFij~XUw zf9hRlti?n^IfNH0Y@JuTxCBg0y{l>Z+@zTOF_RA#^FX{w=hxoXg z_>Y#paS^^rR>IQe=x`^8T#~`{84RQB_=bKXGb#!%9YuMtY(~20;!+RRvcvrNWvmBi zjI*cdcPy?<3kw6Y%AgeG2V22~A5mtu3G-0>b|6GM9I(s6NGKa&2vl{4xJD45BqISi`S%1Zb!xAkk@nTY79%R| zmgv@;6kg8pAOZCW6kZmIg%_*sg;hV{Zd+v>>rK=t)3kpER0Ni%!f!$A`|IvGKjDuW znh$OlL;}m-W;z6-7Na^~YjyxN0vfUn2)+zqHnP31{01$6api<73L3`fmzsSnfzzTw zNxe5WiPe}d{ke_!QKi+YK_>Nb^_TE`QaaUipWn%xg=APUuykv9=21U8DABv<@R~vb zIot(#JN2t3$qKMR*aX2`a%J%Cpab=nq=_(wlEY3@h+4+)VY@s+BC9&cOc{SYO@A?W z4hXh~vsH!x8#BYqQc?tOLJ~VM*baK@_^jY#Mg# z_XsId$9b;JzNrxa7~xDp$Fry!W54CjTZ8?&s?LW41VE5uCAh&-sp_e_4zh7MY&9Tj zIc}2EWJ|phRkQ-ha8fbXZ)GzaKvX$o08CY5qR&u(3nk;T26atpxGmDa=gF2{yZBc5 zFEJl)PpEyftm0EUo?pZruX|2iVimp$*ypU;V-x6)B6bX)gzGFaL(mQC(oH+3F(Xm| zComX<)i5!nx)G~q#Ofl31SN)vG2pxm=Sq*Vj|is;7;sylQc-Sv110ix=LqNP!tn#V zif%JG&MZKQ>=RALCsCUJu*pPe+OY@zNW!P%;M-1dl}c$RIlcz;W^gS z!~qKp4SNqRQ)E8S*SBMwcoCjMuDo7Avnl3{0t(BYm-{Buc>yt3d@b}A3P*9%I_^}H z*t2hwrkVTLD&c*x^&|ULLMty!f5L5>7&3bV0%jwuWj}z4enp@ikoFdM`~XKj&@X*# z^?C5lkYK8YNtMP`PM>XcSYviVEpiLP_xbxc|K3LTb>=5a)ufWy*R-Hswo4BXxjkD4 zAM=vB9|OhY*v;k^TY_DGw3dcAW!-AH{$l=L6qiaWJ*8cA`&sdtI8??wJMoO>{FA|9 zVy(#$3)$Z{hKnY!qH8dy<*DR&XXT}@od7siw3^_XaRndk_FCH6-ITk*aej#61HJ$b zK=*Tt9+zB|-$?!1e?W;CL?8fO*b;6lspgy7Meh$jI4SzsF$(EGLAR+`*U;qhC5qH( zbId2$I11-9HE~r{cyflF3NTf%U4l4R0(90DFt}-=AF$)5D{#!73D)x_fE{d)Ug==r z2uHmcr|LgCtZ6d>cIoW+4mZ<6pu)hD^>(vh13+C9$e&C8AU;%+Su3d?*U&-f1Dq`J zf2S^chd7L&v6D`HPAZP)S2rLY1CR^z55@C))0gCTHQr*&GLZzbqdM2k;6;;>o%#7v zVCSooIvQTHUE*#GI)C|Ytms%5y^3ejOhqFMcKU++sdKnTpW3_~ zuWs3__9Vuxf^WEf%NLJ1OG#OBbtzWVbDn7+d9_bPYjD^(K;m)jir4pA&-7G3XJT-i zjlNKZ!jLNL_5*u00)Jb**+#;V6eW@~AI=wGv*eqp)}^cYyE*vS+B01Hz(D!u(>oEQ z+Uv#{3iFJ@t6K{*0b;Ea`eDvy4_9q$OyPP-7{BIa?kEBi`k}m||9=}iVZ*3|Ft*JS zn`e7!^JP9g)p_igU6ys;!ZLl%@T-8V5Cx1ssiwy4ZCxK(vwY=uz@5wg6wJCem!b@f zIhq^F4j#)B=rB;i+W)rj6t!f3IR8{`(z|NJs;H;RE%kEupMVpHiWA;7V}9)dfmTz6 zukjuMGCY!zEMbV9&&=#Pv_zhm{x3e`b98L^%QN>>aD>I%zTnKG-KAv(_~6lpp!-=_ z$XHL_DDV8((cEeE=70b;T#vz~=lB^4|EO{I`L|iwFA|;^2^^DGC4uIAH)$X?OTd{$ zE&grlG6+Q3l!V4gY!*gRByr?+8k@~kG_0qQm(kGzZonVK#!O7 z2|Mq!wB<;&@KjO$As##-2+?>n1ZspG&1uHPPTfzP^Tpchg#RVl%Y-h-L)0DCO=CTS z=Gl+BT;4u^%X1$%IM~z=va{n8olEJ&FdgnRUVC;{nb+(z{1*mWLQbSu%|J&_ug5ve zdcn83nzUrfZ^I``8xOlXtP>{#qG39#!wH7-Y<$di?|q0~^&Grf%oxb?2}nChE^osNR3DMT;n z*7AyjEoNtdmHs_qgk(()bFG5`-doKrac^WcO5x4{bIKeqdf7@~Y1T25n*GDVO_cc6 zXaZk5V{k;UO|uw4px`GHz!FEjze(*7+6NU#8q0x#f#SxC7j*n<6Qlh^Hv&C3EOX|j z1uy9Lv~Dt3%jJC!31xo~G&8XZby|vGzI4t2`VkI<#&B;7Dc{Z1*cv9+z-gvonfH%? zoFwRlulu}ULxJeLz6b zgnw0U0tR|b3zsZZCr-@xe1&c*3Ca1mZs8r##VEcam**s$J-0!nin}e(JxNX5(U9(~Hjb#ZT=u4Ld|Z z@$8qFOL?`&Q)w*8I+cL6x8DG* z@V64}A0~)Y5uDAxwTS(3oxCp?0tjELZ%hS1v`pI54b|E&dmtF+LGMAG#g5gN_nb#P z&b+tfkTNswxYK&5KW+x>oZz_6&SI)|Q>;+62F`gE$mY0TyaGgF$%&aRwt@&=vPTza ze}}a(r90r?tYrJXehd>JBF~_?(c&fqc+V(z? z2W?qyRa#UI#vf3tt`Y+i_!w&JcJKJn0Z?0=ZU!sWX`1?cjKP*B)jM{+FmPyk+ zyYP4UOHJBC`^Q*oi96?c=yrL0HRPz<;b=S=A<*NSjNEGKF!->*BpmSDqT{7)c4Dh@ z`?hUNv&A-NiFNGWRvufbYXLUZl6|>JIqwk1JJiPkXct`ZHJtr*-osU9AMn%n!ibaI zoFkG>OI*uEYG?m_LEVk%z~+(6T7U!ofv2Kq|7FW?kt%N|bMuB!fc9Ou4QcVC!KZjC68M?m zLEC9c;`EL&=dam)Z*T}>LSKbDN{&rU5)&3o*rJJ~NQyF-WI*|rNT%`>auZ?FNTa?x zC%9Ob@vnt3ZCDA<`F?G3WJFa8tv7|~F#XBuf0KoOCJODa_Iz z3w{Q4uG6JPGz;K@+hL2IQVdd9|by;QZ3Sml6Y`^CD%|8@x1qkw`&{Gqgi z2qHi4bO#sMHtjea8it5mS3lOUzGd}AhaUf)l4r2Vf0Rbjhf}N?a$rQBxGa9vwf{s& zb*CkdiLf0Ex!FR64!6owPgC$tWiJVPk=L`WYz1u^tXcpaY#H9>;}{D1x~b7_=#C@ z9wM|p1+W0&=Y|8hNiTKU$Xw4mriRU7#H|x=k!Jmd_MY120-VFno*^++qo=9iM3n*w zcFI5G`w!mW7-I^9n`e?mZHQb-p=X!r+2%G3P)wxvH(*0QlP9wSu+N|%Lh)<)JH~M{ zn7=0nR5>*Ncay?-NfnK-XVz`uVy4{ZS<0YYK_g2A#@y_jaSk5`NXvee7U&H)BtYct zEtUOY#4ZkYw&T_x8C9rnE?bRWHaDviPH6r248MO^ZW7bxN6qjavDl{~!);E+Xa#3q z$&5t1RQ7%C&+k!wK_@bE7DEeco$HtwIV*=g$H)FUpzEf7T)_P#!vA-ZPaGZgqwO?c zc&|9nISn|o?tFgkUMo-e&tKF0gsC|Kj_g$b7kh6V6lL4~jbnj`ii(6HU{JDzq|z25 z-3#o}NSD$L3WyS-bazNBy-SB6AWL_{P3MBN^zXdDJD%tH&irP+@4WNIygTC`vb)z_ z*Lfa&e2&j~jv2JW8y};_`R?nQ*$ufUZv}t4Jf=)+5Ba<_rQgr8p%z zlfrcVpq7FKD0IXhOjiB8Ns2kHyx#(e2hCn}=41`1+)nc3%082>765kRZW_w$b>(7S zqh`vySErysjx*2rsLXrNG6zX8v%KjuM>F7yG*E^$W{QG@O7uwvSH@v_&6)Xn?pbq$cICWa$lRcIOl6Kkw13j5x zVW)flatpsRj9V_ViQEx%mj+LYb5MSvOc(hY5Y^#uIDqb|IIr5UdQR{C^tHunQuaGu zs48dMMVZ)PD9sdRJ6fY9ElIztVAYeX<+Q*hS&BY_zx?N#v{4ta-y{V!)a?oygsSb$D2=n@7I zGniUUnw9?XXF|HM~JO5!_Pb9j@V)0RYd+^{hLUEwL6vu+7 z$Yr?4pl=f7qJt6ihjfyuifwU#;}}u|Bq`Bw81wJV%e424(K2)@kWhpe)&QEnObF0? zPtSb8fJ6gSJ!EUhsY}*&VQB?I34a?c8}C!uRv@Fu`ih!tyUkc9h!9($2T>u|{xjQ# z2#07Ne6to&vp-O&LvFUU!t6v@#m$w@pvZRI16iF4pam_3R?Zxy#<*Xvk-?wA_e3VQ z_KjSS4oZoHVXW$d0|NtC#8u5q@wO93~kj>b`L`~G6BcEUxQJzaO! z*@PT^``)#vN9&yQ06s-;COC!naK=f+6$x_)z-*uyvJuImIa!JDSm6%rBv>ZpBe7S} z`iD+0Q`iHBs-I48OhZT%$3?U4inSO6ji_?Uv@+pCzP+}0;w+jSq5&E{iEo?^p>2CQ zR%35(Uo5D1g#C6{Qv2=O6Z^8yA|wD^okjj^cS83_gR^dym|mfNYpSYrKZaPXvD>7{ zd3+oeAteT)ARPM=rAID3{D6U&P;7UGGYEfoQB!I?bKXLT`~Hr9fst!;VOcTCZ7t#G zQ9qtRQq-1V88xZNV)SxWurtLSv5mQqlnct}%)=n*qWEO04(vT(eL&U+8G{3o0!Q2q zCrH7mi`Jq3ZzclwR+Tx^VeT#mA%F1N`&)%xNguESQ4sn*T__~dF!N9%z5^Gy^Vo1gGs zrc-=|k6Wn+2F$iH$8}d-=w~nepSQbD*e~P!>%}4pRPPmx9v_?e!%Ah=1#MAm`9JyE+Vhw*PH^93N5kI!8pq2~^aid?jgW5RaKLjU%|hA| za;lUg^*62-VP-(WCPkWUtbD)_WBx>pKQTm<(V$)W-8qK1C}*n4n1J$K7LZuQIijMQ z-D|=daL$bus5nq8T8P@6=LJ#pnT=5_uggFe06O?@_7070XZ-R#0A+&!x1T++V~{lg z1+n!sQln|^L(`g$jxQotfT0BRdJv=&!0)9uX#}TaZLEEBF3zmgiE=02ciG(N6+W7I z6}ltrwvOHAINS+y;|Z?yX*_~0T0~z$r86{IxY4_8m&Fb3P7pkMn!_Q~E+A_m#s2K#cc)#o1 z`)FCv;YeHCn0p(7*^K^e$F_*6Sk;QJga*X$TGb2XUI{HgxpF-@oJStXfGX6+G=tmE zGPiAmgtKs&Vp2U}r~Ubcr%jH>+4f=+&4mcJea*7{hwTw()c*8;z~nMlp$>?Vh(Ii@ z3Ejup<`gh1Vnq)uu4y}fEBy0j+oIi-x*$j^xV>TvrV#)t<~_pobcP$~NOUKlX2n1) zA@iD4e{2T8kVIYQb9SmhJSUl&cH8T#`h`8C$?rTF7PtT8V1J$Mh&fJN<;^%e_+V)j zB+Q@R!sP(w08_a>088)`-mS}$eJ8(mHjuL#O+dr}91;i~^e{GHJ675xh2H-}Gti?z zyzOe9KevJ*xNhI7=F>?nXpk7v(1?!%9@E}?p9{q&_)XUY$3nn#?Ml;&FqQyJiF)i8DgwulX?K~@P@n1HIl%MR}T^vB?cM< zfSSVD%Z2c04QErRZYjZ&GDS#h1?&haWO%jUGNXkOuTZCDT{wuB!A-eTr zG}uM=o%JtHf;*A!=fJ(x7zC`i9AcGCnGU{*UU*6f3Fjf6@}*nXy^ilAYM>WnAIgJ; z2UY}c9w*FezFmthxjy1(J^LIM5Oiq}Sd0*_1oz64jv0&TeZugxKcOK&-jwD#&Mda~ zt|xDrO#`sQj}(b8U@8PY`@(UMqCMZSiLpjhp&B zNWDSX(ez^$iZiKtJ#EwfbdD@ng64CQ+}q=D#kHlYP(5HD)C0t0AB$V)zj^#kUZ3#^ zaDzK)Fwi*UHKIzYeog}YB+wG=I8WuZqbuogj%E>V zyLp)x9)h2KUh7|P^g8*YIOF!(x5er=8zNWqXBC;yBau3%gxrVBK*qXXR zf8XJBV|m2=x`eZ3%1Ty)0EKkCuooZywU(`CO+j@EN4fc5f>Quip`u@eBX$d5TZ4hp zsJ2nNZK{2^F7U6F0K=m+JfJ?UEt2T~`+Xf?zpJfg^piqPy`;E+KOeO(*p%NqhBc;= z^3j*BUZNx!J?x;7Udx;ZaF`!v+bzGg&L$Er*0Bbz7Ls?Ijh8GYMGHAO&lUvTe&;hk zt9fJ$;uuf~Pe_(;B0pr1xy}2qVC(Y++eek)yy~{7puUo zVEs_qf8CCbECb@bde16H)|Q-9P+}K*oNzEi63B3cGR@rNfV`MVD?L5jtyucL156rj z8oiy{j9G@Q0=+Nfz$1M2?Y0Xis10vY{;^|P^X~YGqPXdZ_lcwiM+^;g7JvNX3G@V@ zCjhO2NL3Dp(|K=~EZYd49)Rll{g|8ds6PxFCQH9K0z}kTmtyEkUeo@`CC; z-Ng<_IZBfx>2JZVNEuc|41}GjS`X963>1f^M(l*S8;=1*4Q>S5N9eE9CY~X{NEcwJ zA34BuDgNabkrTx+oTnB6dP0Tm_jR>v^42=eN?15;a5JS}KPsCni*t<8JM1UWz(q)b zhCnXe;no?CgpgAo`1GCQs5<*&1!oKZRIn|0TBh0&fGc{N`W?9-nFxQK1;AZ8%PWX^lvY)y#{ekhfACZUL^_BzE%}19y~;(w@0?O4lwo&~lM=oXw&w zds*M50jp{D3TY=6}jsFE`B#>Ra2qcJ027myXl`p%_ zwGgYN#n}ngJL~2B%cihaaF6XZFGBb&)HQ~Y)D_-`I|bh(jGFCc+f{%sy9r@!7ORdi zte{PPvJjoo9i9%?j=LWJ*k9IC?l|Y=UeJ*N^{>gCF@SmEy?Vqx7V``!UbXQ{fK-qI z4xQz=)&g!0vU{NKG~4X|0(K_q)giUIwTbKAjQ{u%|EsH1Lg@G0f1=;@-K5sSS6UPDfPlcbeZ*I^*{WXm z2rdx?s5zkcRrL*{|KoW#dY%8CD5E^WJ(D=z82G59>7fw?FeT?8bJ8IwISuG19By3^+^A34jdB$sn|9Jl8*Cs*$APpw)=265WuR$|n(+a@Wc;m!#xu9Lh zDv#*j?|K02Hxc-Eqs&{-?LkS|6m7t}qgI0KR|{yp%AY?&j%V+3+brLgN4z0!T0Mqp z*gGDMD}Sv3V@n{)sT%}&>s_O{!RN@FEYK=^Amm9y~x}eilVR&K%ibsei?cDUS<$YRr~oN z=dw0$<*L&*oqxzl4Z?8xOZY&$c;O}%ffXEFZsjeSDWi^Z-bp-xT}^>~=*5EZEMaHo z&KH{Yv@Jyx-@=50XOu}gJbN07E1pB!ZA%OwY9CrI`jA{5!z)~SNqb3s4`wpxsF!X- zj|*`Lh~=!an>~2|_$dk8sdM0ljdwk3jxU~Z1h5i3I|d|`dnK@lBdf|bXm&9W%fT+z%U$#!V!E(zK&V4Z|7Wn$LkuW{x%k6+LprUr+H zoXEvAIlbmh(}yfb(AwU4h8){-MpW|D*>N;R2PSIGK>X-&#XNTMb=thN7y8$v&%O>iZ_gPllp!{clv?!Uk{t*lwzL06UX*JI3!-g zEvDq0P!xDv*5lM*R!$t<^#FkPI^zEI?py8h!_5&%F%Ec-AO3YE(}${pvkaQAWuqo6 zB#S|p*73NNGCSq$^v*UpaI!oN+?;Rp-oEZ=suYAm-C$6=<2U5-r(sWDk70fRjg>(= zd9oU=TnW3=zCB!=@sB}BfKsFVja%^j*L~>TktXYsGAZOF#+!Q&_Mx#{^r&lxEA2iy z%x|UDHYnzX)YnUN$B8vBD9fA!8I+M;me*^q_E*Qh-dOIv8Rb|K1jN8y9z2gktKe=_ zn<>-`?5m2LQSKUZHkMzbH0W}cSsmeJh?KoVHw-F*BLF+T(FYInE>j^);JS-T=lWBC;{Vt2iubCYA8`hYktW>_X<124Vd$JEFpm&Lv!4f{ve z5BD@B#?aTtVhmm!&wv(CybW}dsNrub?OP-MK~=KZdB?KGJ21iMp@0IDIya~=w% zBeruzlK=4&fmQ&I#5q1M7x2X~T=Jxx=TYA3buj7{#f=AnGdB`RAU!p5X)p`U$Fw@MDt787a|a0U4^oz|Orl*y7Mj8yMK zxHvFGkBs)C{VGg;MR0(hfr{;(XfbFn6dmXUHC$&4l&Lw60LVo66_b%@&`1bCZvrUR zQ~(vTs$q5KR@>NTFnDqD2!3de$*l!2<$sZ3_$ZX?C1jw@q^9H#pq1vM;@h~ft;bdkZ&4>HP+ zBMRjAuGt?*u4Ud&qXixHAEt|s=D)}jha#FfX`E@d?ZPNO9iatdy*F~z@k5hk5-+x`*ifALf$F7`YB;3;-sSk+MZ&K zY}xB>dZ_C~mfnUn5I7uYkjH#GcAa6c^bCmmUf2A135)`MFfYu%_N>$?uV@aaTMnAB zPMyzEkK`)SnuXJpeUK3VD<0a9rI0j&Z3h}IUIsf-OL*@d82_b^JCbbik6|IZgYvI_6NlD&TNMG>=u&9tW;yGNJ1WhyX|g750Rpk)SN?}G2} zdMzJBNzQYm9U$YNkfyi+@~~=maf6he>L*43{tGZmQ$?GgOoHz+J`M(7XT)9izorw& zwdF{?0Z=ZA=4;3s9*q{$)FfsjU}9S9k@hQS(BsU)1Mt)YAmqU=Lipa}T`{rH1Qdgd zeO-2&{prrI_=XN(N9q8iQ~QC0soq8Uf{;C_LK_0$Z_bmT~JgHQFu)7|4tI0AKKJs?c)fBW4+d>JOqHZ~#ShKV=ge zQXePYzBo0q1%XZUF`ITm{0`-cHxBke7ir8ti24aCxf7sbcC%B8LvZv?LoT3yf(OkE zf9CQ|t3z|(a~6b{}KvXLrWPv2}qK2J-B&!@ZmJ`lhwY9U`PBmpO zSO4eb_?pEtK_P4B)H#3!_%hHtwqqLE6+9?WkJ?{mSnj04JS#mA460IXZ=)4vFiNwX zNXm!ylml53dDxI6d8pI?;m*_hc#qC@gDv_7TF9Wjo(sCi1qD|2_7wT4(3xHuA-5yl zNw5Ew`A$_M1x8SIeEb&dK4`>7r-#93meq`@kT+8J3fE31ODXV;Wypm~H>+IvSq6fk z#bJ!pihKUZ?a)~zmKfyc@eepIbH8-im56I!`mV59L<44;Pgl<{MTWqi5kj$QBO&7h zu&IfdSmDi1Y$+9q6l4A;l%G5mV&}+_<6?*SYVpCCP-Lj7I1ma@buR`dscmf#->O*~ z{y?vF&g;vYuTK_+XKA|5ra75()LnmFv=rxc$?!<(+rG<@d1_JON)#cM3jAn}(ozbXfFkF`2+Cu`A zOTWoNk1|5A=hIN^J_^dl4h%>j0-MkPs#~`ht7^CJ|K^{m4nM$Y?!Ry0cU$Q|0g&lh zL*dbW6jJk0Hr(%UvoG$_w7U?1x2OCX^<@8HF+BydFm5oDaCTb03+>j%d>0z9cnNs{ zWyy^`W-OYUG4Zz8ApF|G#-i@L6)Jmr4&V;u0Yyao*O1Jy1j>M+Q2qDUjk|05cQpjAqlukMBtH z0uGSDQV-CZP%D0|?d0TSV8FmkQ?R151X${Tzr%Y>z;-lLrBV57j>c_Q*kyY1=!tOE z&cr=%aL}m(K%?$sSVLiLIGyVL6f_QiG1LO^fc&zuDCdjcgu=mAbdAS7Kc0=O&e+)q z6IxXuKKh#W7Y)=rFT_0nI7Qg!da*t3PhC&0;dMff6Ptf@#ps(C0D??=U!#Mb3Gi}3 zk+H>ogz|CYTn>0c3TyM}9Kknq!SQ{KWjN>-z}GFuYrGB)Tzv0?A@f_eZmE@8-!E4N zDKNMMTdYtiboG9dAcI zz)wNl^1jCGEZY(hapFF~J1WE{n-X=JAm!A#V}}g>iq{JmAfTNFC2G0HZ;$;1_^bOS z2+}WdAbA;pua%8I4lcl-wFIw7QFuhdL4@0M=`UiFfB(|XqKp(G?JrDu!-@C#>#A$W zlIa3`F)*d{_ZPL=BHCyqV-N6O4qlZBuWbsT-v}?{A1u8NQGVdzEq;sTB#;)+zU*gM z14V-1r6pKyzx+aQ#pWe6i!BISFn}t?pv42CO=&J|77($3SMGSt8KyR$MfbnIR|}%1 zd!SSc3Mj0QwJZfKOKc z^YY-WtDyJ={1bTB{Ssh4@xLOaLJkQf9-ir=L_!k)2mkYy{~JFI=$}BcyvPy|@{9cRu{`C9P1$S(J?$M0yHjIT&IYX&|AQi{a zM36G6IS35-e(yk+^Lm}=#;ZA~XrEvpaTo51c-p2}lj+Jt@`Nn?v>p}8N9lQqE0%4{O1L05lMma#Zkw~($pJMMNk z6SATQ^_@)_y(>Y$4ZX55!;Wy8Rcot9V7xkIEXFl1F@;Td$75_y^N0eQU~#f>cqU76 zm77OkjFOnnd3)uMIk@`tpTAQCUEpW}M(m9H>96U!MzFcwR<&Q?44l@92;u$jcSh^+ zqyJ4}`QJM+76zE#0E5?7H<(EO!E`*g4n+Q(YMo&X=on*)iXcumD+>#@DY9d38K6Dy zvOxLY!otGIX%BEG{9ap?CosSn<94_Y*h2wti5C(1?{&+42M4?`*4BmKR7v0-e=8B5 zic}`4RBn~|BLRW#W2zfy8&d(mNUhwS{W8r42!ot=@->d1(VhNp3JK4O`7kz(a{CT4 zClJ9yFL&GDARiFd0Ps~sg$uy>oUzyegbGG zfT)5f*-U1>E`rmb#%cObrMV5|0rsmCfG8Fy6yRzd9gTHGNRI#U$L(OozqJ&=GJ&Rn zPi$~9yB+NT{v0yd51i|NNgRCFiDaqk!pPz1iE)O+y0gQxqC)VuNM}WI17i%G;A~0w zmy|EOAOXqJqn%z)oEgBu(lJNA-dWSDIF@=msXsXtZITGL3@!t9SfXP(Md)4q4iamK z=_Rql6C47345W>Lcy6))*zOOISU|7Bq0eoQl6O?HkMHlS-^q;5NJ2WF(Cii>OAOz6 zU%O09{0z?Ur(yZr<3oRoib|CcdiWCpMQ|Blq5wx?M@I+9P8|u4ITE3(lf42#;KBQA zC+-G%+}}`I8C=i&&p5!J0(}ZE7g}Fn_p(GtjMag`32uVwn&1U4i?YyOx_S~u;F0}# zo&OtHj{kcO;(wL~{2y~Ss-SKGK(8Rl0j>}@L}=`eWEA$d5&}5{fcdTN6D_T~J_U3# z;rZX{l<^#*b7po1-iac=^5_8KRt8xyfR_Iy;vfl%7Id-&Nf7X~%rXuij#UFj`KK5{ zQVrg0Bp_*q$g0|)B(UIbEvJjj6;wKCtpm(fjKVw3PcQ$a%7A*b=4tX4+ign~uJN_$ zCdXqb$BQiA=#&^&!AiBo3DblI47hy|aN06e z!9V_969yYik>OdQ(a8~RcjSy;%BQj_hbMiw%WR-7-X?PRBQ>f2cmCnB26oojUh zeA>XfNDVo>buu!j=-C!}--=9;Q#7cEzh7v+47|mH(4d#&XR=z#+RjriRUT0nk_%4X zj?BI09Q+1*1IaMVo8ytXwx$-rgy(Yx$9SpRz~# zFDWC5nrzCt<})7`!E^IOgl#G_#HRZ>W3x$M5AgU!sUE8cQ74f-JlCU_)V0yk$@F?A zsc*h34OQO7z9{SDpkJ`aQmG&KO-(V?W#1yPWss~;DzCmrX4-m4>tS!!Xc}3!L#FlH z`B!GS*OYXd>@}!(Y&;PadLhm|3farjzJuyTa)_`zvnR7(<8G3Cw|x5XiDcU(mh-92 z6(m59!M+V@B>AyE0Vl=tRy?fo*Q~IX0J$sa*uLe$aJ?htM?aKFQecScaQ`c0uXHWP zf_)SZw=60;l$3?3z(rxCKeYDr+OPE}{HfxenjxF4$9pd;i_^{x<;#%ueQ9y}&Lq3k z8R8me=18+_>hY!k6Ycx{i!5Ulyw9hxpkd;LAH6NbDz2HneT04tZT(3@j+fkOW^T}5 zDq;f1g_9PCeapV$e{FUB=S00X_$c3(T<86b%s0%;+fvBhE!1Tk8ka4|s-=WWdUNQ* zsl=c2tKQ5`C>+KR{6oJ_GT)`FFp#=J)|TQ;+(N}Ve1P@4aVJ8Gt!9XnsN$T;tj}Wk znA{-T&zq>Mu&^ap;5@%y?gKsLmFN*Lh~OEbWkxfW;BuG$2=^d0J8;ssQsq9S(qu)F_@xZ}wI`~VrY@QBqCOXQEhWfQt5Yc$1WgN%A-JByLjZ8JW+;83qM%Zn|EzRdAw!zddLb zj$z8cq!kJyhR|0vuOT{O5BLOr)n&ve(-T;4rYtu^1V=Y!M}X@jWO#Sz&Z6|3y3yB_ zlXfMV=4L}~g{Dm(kje6y(wkz)ERsw4^J+soM+Oku+721s+Ew^SL%=d#Bc6*1*o*2n z99_YCRr@CY-i9mQ7A;Oi%S_ME=oLeEmrz^@DzLa=8}w$`$?RW1LjNJ$k~`t9Qr?Le##`8S6T&B@a$6J64@9OBcMzza721;^n0~NFY|W z75J>vqk>~-r3#V=M$tftiXkoYzGkhEf#j_Ry9?z?88T*SKCz8B<1A|VB5lsp%5)am ztM#sS%4O-}O2oCTE(y;r9ScC*MPyGx7e0qN+0Dmh=Vd>wMX_F|jK^*1Prkf6T0GN& z5tS3|L^k&OIA>Vp2xj&qzcEpzR2q6SNUu%AV*(DFMPgQslgs%?Wk1!WJw9RA;HLA>jmCg6h^3j#Qeam>5s;cCW}RiJY+Hu<3$GNj|5} zU7iDU0y5R4d;jwH!McYjwjB!o>UR<=vsxT=)5E75CKjcY1cbU}Q z{K2YRR%5d{7?VBt#P7m~idfUkno$nKh-g#vLOwEA{QY!#s#V?@=})=Shl@K><;m)Z zj8i=UtPf&x$ZQnRPx7MqE3x*1{VcWc)%OoVRm;Ne4p#P?Pz7Kjy5(75>AL5e8iMch zDVls3TsBp@PR5i)Oh3zQWv9LK%PwPdrI6dL?{d1xt(tbSrB0&{7 zN1`ld)^(Yl_g<4E>wI0_Sj>WZttC}ibD%_xiF^*q$l7)*v|w4)j6-3_K`*}po1!ta zYfFh{LZ^zcPLjFW7?H9V^Bdnr>G^++Yut$p7370)4m51I+uXH%(1?$M&#sg!@!V31 zN>U$=&nwCq)IS0{O*_yn3=fPWMh1gh?Wt-T0r^oX#Cp%HDR4+hUZ^^hLbpz2C z5JGH0Q_#E+-vOAkVc#No=g-()s#6Y7A1giFP*4uIz$m)YOS5Ftj2+TPQ?cxNW%f-_ zZksJ2t`DJIS(mYt#61N?Px*Vw#WS2$gi*I;wNQRm@KnS9q_XFtV#Pw$L^ID>k^EVpvikRsB|+L(Y) zY{v^lZ+PYc6+9k(DA3bJw`_>p)-;0?=#sm0q!Ca`@?2N9Kq&hftHH8P+x`rcR2teg zG&KpeI9I4T6u;7;A_mTSaQQKo8q(ePep(lMohm~b%S3x)SdjtSo$fV#0SU_{Ngs(Z z6Q8cN>^4y9L5K*Ob-d7D%+<(r#AUtTtijwvT({t;(Bp0VQnb=xuhcJ%LsPvd7fq5R zBqGu`h`H!N$iF%j_`xZnqE~DHDJ}SNM{L_#D(T==Qi#OJ0+W!mQjTSzg4vS>eGe2F zPN%Dk&y=6vgx?@!B~6zg2RFpJ??v0tTPZr(6R7rJH$pLv=cisi9n_@nR(4$hojHF~x2&G;&G&_0@6^vuFqz^gHMLxCco-!-R$FJ5jAZB32~aW9=xb3zgz(rW6G=v&P|=hTL@#= zlPqTyL+WKy8w+N+7^D(I%gus&lC}sz^6CE6iG$rQ-^1WG9=4=(4e`;Bx-M%JlCKTzZ{Fbkmf8tx>yw8i8td=r5sFLNtlfI~7@7=NIKKD^{)J2r{@f%MB)q zlS@8KNpCI+RGi>P+-3U()tXEp=hJDXcgYY&n6OUFu-NZ_67Iv!u`=W)MSe zON;7=ri|>!_2iTI!Bm%i9jsw=rOk~)BQ9QNEm@1`XXJhZeyK50YdM=FkM-skw>aEJ)L z_ql%A#*5{lmuTMbXULiU`dJ1UkVKWY_U@QjG0i&suqixe>n-OY%T1=IPkS;E*D@d5 z#HAYfG#ROOB-;Bno2o9B^bC2}22YvD)zq-VLM6*@!#Q8*#*?8~p0hno;DggIoAho> zcsN+He`TOQ_Z`t2sS)O*v8baU=G3R+9g^!@K0W1_tAq2d;M-4D6s~ttb>7tgV%rOU zr?QjVE--9lca7}RKr+j62BDegIVg0RCWvT1%Pthwyk~)9rH}IEzzw6}VH(9VrIAG6_S4H;Og8rt(gS zlX8{B^XRg#v7gB3Ml1VM%UwCP9}UQ+%x5}rVdY#qdtEx-8tq|-dSc0fR#Dgsd-r{X z`F992tc>K41tNKoVv$1nQK;Bdj!eZzm0C-mqPhGH?XcT{@Y>Zc5|(_n>@Pd{F!zPa zqoKRw+zQQv$E#=qs^7h&7QRhUT+LiTy-F z2lF0BzCQ!Yv8%OI|HLR-IN&+${d6t^(`up`V{*2GNoV~|2N8{3#yzhQ^$8~JJuU~m!3chv3Bbn1j2-QMY-8up5m)1z1F ziRD*((C@PSr;NT~Jq1OWg|8b|*g2)5QUWn^St=?&hLUjEj_G~W@8gVAmOZEfT;EUY z!{vK2bx9~`Mc5{YMi&5u>;w^$uCJ1<{GgVKQ0S6$4qfG=I_#W!#RpY~id-FZS$mmS zDj8k66>KJI4ZU%fY^B3iIp!i)j8VDyiZ#Vxv4TtM@E588csJ21%Xi(RL1o@Sgi7qD z!DXE&sSIWMC?V=*GtI%QF=u~N=9%zroA1~?o{%JwgF+GAMaNY1yZ%Ip%WMV#h(ZpG zPk}RVTnbWqF>z*a^?R|2{p-1kvn=%iq6WsMav?MU(YS{#2>5O0TN1Wu6>~Nm;>a64 zKa&&h_3YKWdZxURh^Row`K}`9Swl-2=5KOy8|?sLfh+6VRDshkAdg^k%4>Qa)oSij z8e8r($0z$Kn-FPjJFS#+4Mt;uiM)q3x<-thONB(jBEV?mm5_lMi#G2C<3Sr8-%``1 zkp+*Gf{~r+Zfnwnk4$PPUAs4%!J$JcAdak<4ik538Y~n8J7$JW4YZXYGlPeTH{JIG z!eAp$WrWihB@QEC%Ah6n?`s#M#o{6Kc9S2osCd^s#|Uta!nV?Fwiti`TW<5BGt z$CvDGXER1b@?9dbgL_NBu^{$&A8~o}evxY-NzP++?+op`S+hKp1McWIOcwf-zLICr zv3upVR8;rs%BKPS%%O;-d)Ojv)d?v&@8F*doymEU@)f-obbMKPfpYgQOB=68ZSe~a znWA-q@Wp?vKH6lXvf|*)n=vdk>WwsK7HnCVR~DULxKjt>!D&yg^o1=HY4<1X9ThcZ zs{o8)jxKsfY7h6P5eG?M`g;HQ#fRmuHs1Vm-@fF!SN8NeprS|3!Hzj#ZMFM8dJ#Lf zcIQhuHL<0oW}e5D$L-$AV@lH#(MulGHbG*x#2@senljyI%8CjiZLi=hF$f4^Qbmue z*S4587_qd@E%o^SqI;J9U==%&1z}>!sVGR_|oKE@nNQ(anEv1@1`XG_QEPMFZXj%!{CV6VMJ?sI#p(5 zE1x#OJTYPKB;q|kOmoE4#;%k;5Y*Lyi_@-kk*Z?mRl-i{OK(g zgDd;YSh!&K)OYaJF4wLs?h)hCfx!{Fq{5I6?I9iC`Oxe^MVr0e3q7d1I*x6MoNJlj zTNdElm#niUPU?@rZgegNiWn$s*nBTsTh-6xO}w>Ad1qG%Ig7S*EJLF~)Z*`m&2vxj z|HDJoc1I+Yiiz%p-bf@N>_tpC%0t zb$8%JEOn6?u=^Ismxym1lVjp~`B!g8H1$#^Z_e41!}ay8`dODYVo-|_=&(=~Xz@jd z)NgG*KznN&Ae_SHnP+u)qzu&chzS?ijPF-`wf(8mCDyad>d;!q!Py``B$5wg5zQzT zgJeJOBL@L?S*FG)+WQW0e|sc|fI_xa&W!v?qx)Lc+L_^(63EE6#6T|IrI`A?#~ewv z!jCaWN6`k>b2QGYz&^0>!DhU_6o5O})cGoSamb=7rmsH%4y!u29=VW!k|WKCU@f_TS#aq>Ea(fW%=rstLo1AA646kZBI1|{9w<`_}VI+m4MW@3_`^A44AOt zJC%2AnNgF-oDGWb&!kQ^bC}`uQ>VrelrY=M1Cv!p^~6`I?z;(eK*ILNCZHFH&5B_7 zClURitMOa6Gs}LIAN67ett9~WfBg*@8QI#FVSsicI@!3e?1d$T?Z+*C>;97FEHWd$ zMJE3H2ZghrLq9S1nAC$@Ae&F=(_m3)|M%?AuM~Q4CUSv%G7Ag_0j@Z@ho>|Bjn54p z&<(7-Q`{2?`6PR8KN#6hn$4G|U|6-SGNiVp(C|R9XfY^ryfCzFNn_oE6sYtMTf`GI6hBgQ5^Z9gED&xXVgn-T@`1DsS=J z?>6?m5ffH1-G^ay;@8W&rOPWO*#BvwLmr&^m9d_yrfqgplcm%8GlqyQ+TjSzdMoTp zV{cM(sssqDy~+i5zd3O`GCm2c%{|!NNFv8b0hitq*;QaTmR?-A z*4-rKc$SQi$%?O|6W*}QsgwOQUKGfVixxC4U`mS9sLy`URCvo^htniI_>-#l^=*0( z8)j9=Wl1_?rIuO^b&WR5ufc;xX<|6&(rp*{g|6%vk~A!f)J-hQnlXz>H?ZR8i5S%F zKd{{T%BLumAsMZUz5_C%yv-p8f0_)t3smo03=lU{(y5IHjCx18GPCFpv?RNhvowDx zY5Q`n{H298ncSbRHw`42iHH25x3tR@I=QqFG;ac6SjQ&vp|OQ-%<~Be%^j>*{praB zf}sx@hD5y)eiw#=aAyCc1nt#$WUR?(&>W9 zj<#Qy8Eo+qITj`{L@-nJQT@aoQc($YdxW;pLE)I6SxE9Z5-IX$0_VN6bVnC$@DLph z2B>S|k`6LOx)}9esBe}_Hu)0^KRMA!+@U0z(HhNUB({?zC=;8MxUIXv;rT4ckcBk8 z`Y!W|c4Y5HXD9cPy`m7a3^!Hs?B35Pt0Qz$Pbu)XJ`Va_DSCA^HHxj&6@H`W)4QrM ziXW(k_SY5tEe3=0jJIJW(?$$d*4(3!yy}mK6dR|?BW(?KGVUU~dvsztF8H$ShS1y6 z(MDwe&-YOrvbqen#~J=~jr0B5km)6(c>&#(QohF5T)r>FG?|&)A@qlNNvi(s2iTbIZeD?(Ha4Y^dZI=2hH5*+y_b{l~nIBAW5dHv)rNx zTRmNRk+}<7Y?OZJ;Q=sX;y;OM=JRER#p>aUyiy)X^@e5P-MUKhDM-IJMSh!8+sI2=HT{h>~rLE{q zI&HWDPd#|>LSi$gb(*So7vY?i6VjEhb18V(a0m%6d?QQ^>MIIPnZ4(8Sp2C4DFEK>-=i1Zi*{l;eMH7&WSr=$l~c3}-K+Q0y#93Uu|F z^J1lF(tMJkEi9U*+uK7Kpv;uIzwp4&w73BG)vw3HSdtfB&2`BR+sCA#+nc7p^=3%j z`Li+6G%Y`OZx!9q z2)=IFuXlk6@ZB5wqZyxcC|_CtND{6!TWr-4gyOd{ALljoQ%YntF+}C#8YVr=?ie}3 zW?Y7whm#EX2b0Ki9cB0ExlKt!qMbAg6{tLD(litU3b2=v4Ah~>0W@kITf&U;prvEs zOt+Q01QX7_!A}Ka8$@5`7>!iYx16%&8=be_MRdO~?NH5|vWzJa?f5z25q`mBueU1D zr2fKGxBNrCZ}!YRqeI(z1ga=+LC07kl;k9QPr%bi@9 z(9c`2c21R%*@BDDLS@u?p^0xS;!S3YmE-Q6FU>F29v*iYOA9m){R}jgdG^GbUF!q` zy^SAY9$bid$ZS!{X+v}EhR3NI#^Vpp=v1{*^{`cbN_F!_e+!7&YC;NHdriN|_0E<% z$c}C0$LG^SuYHwPWmdt=JvlyxxmsbsJ*V!kL!FZFZ&G+ zMK_J^?cMYe5j{RW6EsEtALb|c_!u^@6xiPgz<+?a{?{~xp=R~}z}-|HO_Wf&Z6^u0 z^BQgD-ihxiiz{ACqdx3t70dL#1lsz{5SZZCA#~Q9D>z8*f2}$+q%*tIh@O zXW$NwfiO?G#sU5F*nwAmveF0o+i@Z!=4C4(M@C13iO?VLd<(!Ku>fcX^{X%9{eYmT z;45}++KYRdj1mYvDR2xeo5t|iSl^N=m;dDwWd*3??RjqFTOuKJm7{%F5g8pSpRB_Z z44CZDG{UE9y4dH`po6PJMZt-(kJFq1SR!;b-q9pS5GQhu>w?#GN+)TiM@J83C};mK zv5iyJKR`R*-Aj~&YjSvCprd;o;PAnDM0d8sV`JXODGe#axh~^y^ZnKr$NfKC_<_a0 z-Wn&IQ`_~;d)g+q-S8b++4od7`;Z)tTbFniw=~|R!FEtXInI`e3qFQd%*Oi{T3|15 zd2u);Nc_Mrjp*wHt>mDj9;O909&_LK%d|gq`qlx(n+m?W90ZLd3ZU;V?@}~~+gg5V z&_g(sG&9iC{-RmG^G*CW%bFT@<82A9JK$3Dlk%?|0N7nP@^K`lW5&dQE@e zG4a-3VwY(l4^8V%Wm2v9`Q9KT_ihz0jbG$rgBXXH!UC-)O{rP#TNI&ADPLMnpH1C* z=Qq$Z_vPN+u%}9SkCOt2;}8Ou#E54K0Tv&~a(zpU4cy0Asdji?c8aDxyp~AVG-$Cx zc2nwuDv4cYp#$s7p>*I2qgXbyEnNj&XWab1@>=&UQbWkI#7h`}HXu81Saq9)^#;wy zx`K(`?O#uCP361SeLW<@$AiEtTJeVO^fR|U1n$>Z#d;T+^R394h^bJt=Wh-1ClZ?1 z0fd+UFGiC;^W?Jap*_x9yyW~zTSOcmZ*gzNETk@-VTL(fI#Z1Yq^kOLho?l>%5I>& z_`(Y4bVOcSp>dN-q;GJf%IWzoG_e@x@yKQ&c&7JI_SK#^*MWHpk4{{2ZiMw+A!;gA zSclK5be*(XTD&AIm2+)uZ5}VO7d2ubc`hrtt9L)BaWImaG?3VXQNgK?NKjZsj3qUq{|4cS!17OQ0ExF8k4D|*6`dWCEwEe{f-+*HCg|E40V^Q4ZPxxbvxikFM zxZAy^Gv~F+rA>)g$dko0+_#o94Q-}D2xP)tK^dBsm7GI_r~3@(-g{sAIdoeBj^*Q+ zO{9j5etOsJrHW~Voxxd>w1{je?52XrM^uV`zq9hWV52S_wn-U1LS!HPL}YPh@^n99 zg2aR$L6zJpZMs*fkY}a%sUpP&Z8wxZO-qnPj?uxn`deVdeQXUPH2O{Mx#H)Zc5PMfwv<20G^T+oiD0{Tm^6nv^wCl|4|9-I0i#Mcs$8?&^E~o& zY^M^}#&N0~0pA8&Vc(7AM~2Bla_lNDPuAx@^9c~8EPCHtX&Qi`Ab#HaIMHlZY+w{A zEoG7J4$r$(Pq1X7`fN$LvZ6+u=aL#bf9$VYBz#v%Uq&`!XbceSW-QD!Q6(;T{icv8 z1CyY?-)Jr1+SgyMSvMh;A(ch9WA^{Gcjf<3uU~vxa9x$+B45etRFiIxNeARCyg0Hl%+J5LU!u=(fz)@KY#y#?;r5| zaGvv=bDrn@ocDSE-mUiXTX}gik9_lXI_EUx1+g^H7=R&zz|p3I3)!ELVrZKX$8TS7 z*|O$j!E$EnD{VFHV{}S9bU_r^ct6B0^c2yLb&MQ{?^J>8WONiE1B%o>){XjE`0O}q z4XN866fvGEtXhe9>Mp+!e$_UrN$e1&oE=Uoau_|iZS;PEpU!caudj72KykzZ)8R;F zsL7&O8PtWpjN_`kekS!K72O@KX*l2Rp2#TN?4Xt8`1dfB{ci^mS&UD<7(j{%gJ`gw z)t-o8b)AQ>t*1vws??T8yhp7H<){oyTC}kAvxByi#9`phwHP7m%#;7J=R$i$@LHOz zN&-0?yyq{UT@~v%8`;*1fp6Ve4O)f@)xDPp6C(z}yaSleZ8ed&kzA&0UAqexZQ92L zKF+$+hEyJ=_N-?GXBSAQL3*B*GnC}hP<_qEK@aHkqlL&mTgt&+++Kv&U5nEK+AHJ{iC`aU^P^n)Z07;CK|PkU=lrELW0}P*1*D_!zpGWWjF*=l2H1n|FSXp#r+*PPo>F2pCV`&| zVY65NtjZbqQ-&1eO$%`*8W~Gr9Y(4tg~}yk><5qt(Q5D;JT*$ar<@QV1#Ul_D1Hl; zK64Q&NXF}M{a!eInDRPtQx{;pij(EUuiJ=@fiYI=M zw@47wf(0o7Bj*amK&imo2@u8tC>Vd|F#?Er4frPMU$CjDI#~ybB+kV;Xe0Z16a?Wt z!D$65nQqt9=_Xb!^gb9(jZGUB42Z1nRPP#Hd(Wj-qj6fPAdvq4s_qz-a4AHdIQIAV zoS+m{8`-5WUj#EoyS2-9uLKU3ysRuO&`5ZmY_QcbRh7;Sl zJR;?a>Uzy%6%R1uu^xEmx!s^{ZEX-NmnE)(H)Fx$*Zx&139q%)nWR6fi1ZbsNfb=Y z?&qiv?ZKMCFVU$Q54e-qwBh(D(K_<%n^3N@5{r@QZz2Ucy4#t_yytgU@YOkMVCq_o z9_tlmKC~d{thVhOxX7_CsGSOHAYl-g-_ZGFKVuE(h+o=`&utU3yT8KP#wjHK#(#`l zip|K@C6fAsJM!UNYF?gW5X!vAqhu`LPhNeDU$en~U5GGvskf3!jNU9vSp-h*RIaU@W|2VvAIw#%2X?J?8CxdJS19_^ZTl9I&lWPlfxirWa#H}rJWCxJg>`%0n z*-hXGuPC0M)BTHLcj;^dnzb@L8S=Hi*PCl5wmVVcxe&db| z09{*+-pcgV&mXTdHB6en4AkxX6t!8jekHwP3*Kw-c}RY_-92V6%X2Z@em{6El~_5+K-e0ps3pYb)yIqcSy>5EPf3Om5TW3 zO~|;)laQm_8?LYv85M>gV;zAqGm914RvZG7)Wh!0j8C*H&|IPTq^$-6k4)8{-L;y1 zJu9$$)wSGk5Yf)>ssD{WC&(PH!=HS9pt<>G%vZftXGK0^hO-2P;qrN?U-(TXFI19m zN1n?9qd6*Zg)h*2AFwUNQ4s=aRQ*O0=sIA`#w;SIM`lVg7w^+x=62KA#1*%v$6lO0 zHRjwLU^#KI21YnLRwy8&6WQd<*_Xrd?@SB#3Nn873hj`s%<4ZM{d>Y25T9!Ri z5S6$M;a$TUBh+5ukKKu3vLac0q5Jmlp5(>wLNb6nFHAD0^jzt%*zjt{$aEDr2`vtEEx!P~#|4f7|2^t$c~|l6h?4rJ&ob z7S8Za%r%`utzofr8ZbMhT}E!m(m{`37serCDD3M}TP^A60sMGc8Z-C0`5}2Yv-9!; zpl!o= z^O*qlz7ern+Dwy0eF`xz=@Vu()ac#Zp&Li)Xja4In6GH$_QMK?3ps0Lclg|@pXsq~ z*gY&8p+S~k4r$$88TA8eI(ds)jM zp3vWUMHQ|AVA76lHnalEy|M6J!T2BVWBZU|b^n|KzrF4NKW2B9g2m<6n$`pRyY2h> zh?fc!LuN9d6QTiwaIbh)lBEvV^L@f#aLnyeZt=Vy-a`@8mIwqkAa?x`U=onE^ZEgv z*iqPrk6}cw#gwTU@w4&(h`lrPC~{Rdaf2@8W<|pGfo$S|HId(61si=^u#GAH@n}C! z2ZUhwNa%K1VHR3isd-{p;%#C$y0&tf)FgG(Sc)^_i=o7!R@|0zoxIq0oOBZRgJyxL zodCgFwEa~j{EP7_imA_WR2gM9HN1mAMQZ$|G-wc82NqcdyHAd V@V!>0NWm_eV{eVHs~T%H0I=&3~4(BFnzBu(nCPgX4 z;!1c})bN~x<8R zdU}7?5A`cN!Kf8c2l|q4j1(F#jBd$fJO51=XDZkZE!Y;#kHk`@pB&r3cEGLE+({tQ zV<^?bvkI!l+a&T?3Jl2N%Vms6^ZR4Z(fB3ie@x%!nn!B!G96@Ne*e;X@dMjuk(8t# z-CoA6O!}dAlj4Jz0O1PLOpxhltZB%{SmgF5>odjY-BueW9vz7AwEqMGIx{f@_IzqP zT>qixFJZUP<}Y0_&H0#OiVe{wIbOY~aofZEJ;D?3+K0www(c(EwtVc#J9ek!Ys5R* z=lKuq-c;@P`2JGtC$Ww<(0{*}5h5I%{Ao0P+tMJ{H6@#`=RMwV&o$QXYgqU7<0tO! z5$=Czw|C$~4lT*^b4KLL$49a*#a8TzbCdh-1OXktTeBro5%8Tb%%u#n5L`3t55 z5$;wpdVG8juksCuOl;5=cCX3K*h9$tG^wIX8k`VVcICthVlLdmi~ z(<aDv909)9`^1-kb=d-+ zOxl;&aOYy_S_sG$j4H*OCAnKa8n5#G6Vw)Qi-#+eGeN*053jU=C|PBT!euS4+<%!` zVzC_sURa%iuBNnV$Jq9l{-aH3pD|VJ%0QJt+pnEnXJ@+NpEdlSKOcJ;r0ogv3GvzF zfSY~bMmh_&n;vXgh76w@Ey|Yt9rEBZF?DMH@?xv6uY%ko&>9rxxUdsc?QPr&fAbnyurf15cW z(llYinL|T5IEG@%D3qht;a}U)!WiRIR*BdUj$YAU!OCM#GV#53rj{zR-#E(a$D16D z10Ftxyl7oRO3SQ_fH&%phVlMXl_RrRbHIkO%)W<*w$Zzo-t>FUqfteic@>TgDsy45 zR{56y?vG+`g6L_lW{0wUG$og8T%vj0lLw6zoBx?B~?5xf>x3kAVy;J zyT%3>y?0ZFl>;bLz&SctYUhEIVtr)SO(#Rmp7ns*hNC`$D?T>&hK?`sNUH6vntz8- zm#LriF~VHyfEnV`?Ha%)qb&u}DDppi``Yhrc+*(C$nT2J?7&iFc;{Y4MYaQXn4+RZ z_odBE6}u^lxOQ2kLK`+WB;lCc(X|k1kPz{5ttq%oHr4h@rGMU!vU$A~LIV|YWpZH| z3Qv6`OhqplnK(48=PmIKh2N7604@%}>U9&^;~`ezE#@e;v>*J>XhBFBrNcEcT|c zU+LB2`4+KqP;Lq+H7J$g*p*4I9V!fbUs-J@BVH}aBbIyL-^+lckIGRnl5+>qN8n6r zp1E{6Pj!xv3D%AJO-@Pu?G7EL4|V9r2R3{1M&mi!B8q;VDYtecjt54BU>M44uIHG! zB0}-0I&kY~dmSc`dFm)NUwbaQ(j13EAcJ6ze%i;FZAxi?G}B-Wh85~o&SY_hpfvgr zOt_-K~oSSOss(LV&^LqwIU zt0>G(B*P%tYNEuF8%Qa8UAaNPhmh~S6jC3e=TnPB_D4&x9>NIv=-SlIUw*Dk>nnQY zd93#{hq}I?k@BZ1sq!c`L46QBN9s3m-DhDOLoG+m)@N-ilgno z&MC_-GXfQGTb_)bCs)3GUYYi!=32+tUEjTJjlCJmNZ5KQ`;Mr z+aVxdyH&rdQCpAn0QDI3l_&0yDuR}UIw*L+!!|;jJ#o^j5Hk7v+|#KTVp@qaRh*}x zrt>ni~J>-(gK3nBkEJPjbO)+Oq6AGcrUGVkv@y zc_TlIh^2+xw3B87nEzf7N2sh|ar;YIG>!KP7TCQCk*K=Wjk=`hI0@jS-d%qv!chnU zySsbH5;{^>%xa2gO|%QQ>!G$z-3Ec(su6ocekCrNGDb7%J1s3?=UmBI)>THMX@sH? z`W+64r&pH~T@$POe*%1{GL#y9+iOlx3ZgxsV#Lx=Y-8hUMxUeEag@0vQ9C|&!Jk5h zQMFwV<)mYwTcx4ALdBuR74dRiuxA*N*WADO9emxb;KH3FVcxtrUM@d{dPBGruVHzL94xrb&T|$ zL8mh9p~EOL4C1sni5~qLqAcVVm!NgtLo`qVLrm8B5&rB~Ox$inUvn%eduHeXW2 z>>FAJ;^o}KPanZVW$z<&`^q-mm3r;OQ&DfHYTAa2%7$DRvyUBGf$*h$Aj=mOxA`=t z9wK@0-itt1xtN2&QLoxW2m|_>J~7lM3_h}f(Wlv~Y{FwjAv$8b0G}16ePpm~5QF|VF_zz%XKDN! z#C|tK_@p8iKBt~pCm4g%lH1HOOb49Og^0Ej>%H+*Id?~1cAuOYsy2Qx}b@?!x-M(w`&U;V(pIDgt5W;OC&Q==#Ar5w$5?vcohcqFpC4@gaDV%Y&P+f-S4aL+M{y`u*&R6zn8L<(Wm&>ApL@`yDW=Rhtg z3;ScMwrMb;RM4`&;3x1gk;`)|t0<%xHDL{@F^?bOGO)-k%32Ze#EB zqsd=8LEv@=36%?5Lc60dZxLRUP$R@2sxw}gWC)pTtTVYH?ao}`G=2=&r+)Cq)^8=c zfy8vmLx$7b?70$Awq<_7+HV!z90tx63!v2#%$qP>vzKD~W7$4b25NcsYTP%gL9!9HkWUAE+#(&^z0U=4+|$S8$V1FD-7=}AVX+v?;zjr zda*7*pm8kM;KJyxWJ^_BD0KsV8s>vhh+0Vh>WqE?frX+R=tyI1F)9V?0M2FD8|0Jn zUOrnlLHy(@qlq8r5Ltl|D4csTy^XU&(64>7DwPTb{pe7IN00ptcIP2mIb70)jh}=% z7`{mKV$gDb9KGCYP_j6f=iiR|U zaRxEVX{RaUu9guA;h@LnQElA3v(6yo+t39V*;|7%k%$H$aS?1#mvH9uiBN~5xoYHF z8viH*5<*gV8h0OJJa9j#sAH2OR22pj%hH$Ne;D}dw@g6-x?#3(@~G|?{K*DXP9C2$ zw2L4oQI6Q8uvV^rn&{B6&dY=GUPi`gh~yf!6othC&h> zR-q34Yqnz&+dwg<_qCZuXdb~-?Nw>Cp(`4%X8Ih9x;oE8>Xi;u&ey0Kne~yeO$-GC z0?8vMyjDW%F+Q9}3r>07ymQb`h2Dk7a>8C7Q{oFs&QC zgD7M6GJxyk@4Q*azVL@^i&>Dx6wmKS=(hvk#T3tfS&HZXL0WZ(=DWPBi^ug^&Mc#$)`$Shyv-!GN~EEY~ImY4iV zJX|co`TuBL(C<9g(=v{!6mO=f9_~FN!>3N5Tux8Co7nJIGY7dH6DQv_^G?fPz#-_S z(fH=S@=Fnq7}H-ZTtTn~q73MiUjB=PF#3+8Mq(Fev}9*SU*7$HW6(Cq+IxU|ukwXN zBsRG1BG~?=!fP}>otIx~rq^C$&_?5t--Fz${z{{LztSVfOnF^}f&(;>cOi(s@Q;hQ z%R?~*CBT@!kO_hG|A&meKdQ~l2d=hNO3#1=sj0w8(aJ@E7gzW%l<7s4{?&%h$m9Ey zNAl_YI9*Y;_tf9BQPKNTfYbl~+45pL7YMN=ki6O2XQm_}@rGaIM=)*9Lx6SlA7->b zD8ZXi3mD~bFa*1Zol;p&86!5mW9!*f6Cn4oEROv$oKvwG!gKwI- zW&g9|NP!Y`gDsiRi~=9LGJv8RukDao?3|s2u@ZCu+k!VS!0MA#M)>s25%NBzxOuQU zPOaVk-0MGIkkRCrTWJSf4lSiNO^v_aj!er>5t`Yx7b{d1>0UU9Vl8RmG8G;N2_hM( zUpMW7H;|%dFGbJ3pm0PA_pp9_6H!)U(h%5%PB)_U!y@xZf7(cpk?c{$n;SCIY{Od5 zb-O0E_CH+kq&9MnJ_A3k;!M`w&51Tlbzqo`d4S{f#F}H+zCfQnQ_b$2K(e*B#3x$S zL#A1ZX^@VS0leEP1erYI#?d6;^|sO78s)Q4Ve!($V|J8fvO&g8<)csr(aaA*v}UsT zYv8Ku55Iuc{>8Hdg`wHAs|Y~Pwgp!_`p&%vNxnGM#;#U6|yWU$$%l%-cFyH-x^!aT0&4Vk~6 z`aQ%zbeJeEd2^;eKDd5q_?%k*pX9ICZVC;$MfZm2wHZ z6=@SqmXetRqT=`K*~d)t2%VXvtHw5PJH8a;1}Fjs)`lWAfbzcv=oBMfv#X`zvU(H-$Ol)*F}w8<~s!PQT&{J0%sFI%s3)q zb~wt{hHIJnbv1V-!g^c>&6VM38-HznJy2Eh2O>ap0z~Bu5)~GnP)Xq_Ml;n5%xa#E zWaj=3kZr|wyHm?io2hWM`sNP)iTt+oOa_y@`-lygxg(FoU(TO+nIS`Gp)R{+bMD{NoOXDEaqaI4@wrrYsKS=ON0^x#}T zT7cjKeN}-u6w#dAC#7|4LE`?|;93|o_vLx!C*opSHESDF`~0nt*$B3@e(3s^n|J@; ztRxSh>`cK0&yRK#Jq?PcpJHe~7NN7F%d_Nx!4XhGE2R?Ro1c^7>3Y#2ZRW6ihX4}I zTC!1yLqbjGy)joHNSyaP8Ld12|bOAbKzR>=Pk@S9uw$0M3&%w*x>!Y-;wejjo z^-pS~pqSVwbT5g_d&n+R)gZz%c)om}f%?xD7FHemCX|X`(zssiqgZA=y!_3tBplas zK&>Qn$l4pV}t6(|v$*~h<+1BmlAwB8B* zBsUB0e}BRE#mMTpB%jbmWAW>XAxvaYsP5t9RMu-+TrD${+Hsifthn_`p3Ah~zySzM zF#zlO4>U?2i!YW?j%1Ha4ie%;wvDKlH6GB`L`8M42H>2^b3-alE9RRuA4Z@~O6u+# zA8BM?BHho8ybXnrgDWx-UHLUqyjTnDT-8(g7YB0DY$F_tvB z>^tCd4qmiYj8^qT|4HJHAeH1F`) z3a0vS8~3vi9#fb99Ign#((QiHsy%=@|BcSKztEUGS9)jjHFuy4?vEXXxC-DSW&?b} z2pPOt>USfWZ6*%q%a%U|h{MWfXKGuZPyvCo@QlPtljJ$ynqHBRcih_o(L*D7BHP_FUURX<>0oMCO#ja8bC z(sY$v)WNiqG`re4k7_DRd>T$W7NB6z+&o6v6)*_yh5Ku1MVdM(ni(&i$+U6F)%MEyO^hVE zeC&6%HGHRVKYP-}{t;M#e-UzoVJte7EsqyP|6nvm_~?Kj_aOwX>#RAenmT^1aK~S_ ze)RG9i0SDmDR;iOPi>|R?v0-%SJ-B0W}j@hguEasSCx#%TS&XecSydLa+;RE-pl2y+LI- z08iW6V6gF16r5w9sN72zpQLC08p zNf7UurpYu(Z_2sDmJ#$qyu9t0_*!xO@uH*a<^1CB9`)7(@hGOw9|7V*R>Ufr&a7xG@K7W5}|LeJ%(8jwSbtn zqkt*K1PJgODp)r}u7wNEM8!uVn?VtM+f@ddPfj08C-k0Z)UTr=Dy;x(wdH))C;3LA z8+G+P3=o+ANR=cGfiQESZ-!0Qp96cUa}a(FN!Ghfu08BaFT~YYb#l1Y{q~U+44B=( zq+Dir$*3>$@x(Dhw7c4(u#XgCE-PYZeTStiv?6S^_+Bui-wEE8L-#1M3~u6!8s%TL zN5aKC0C9>)nSv7xA4Y?lVDMV0ki?91tu#aJb0L+C1>EJYEr4Q&66buhsneGD3PrR| z;ULRo^t$1+*}@wPni9fqwWC}P&EQRbdWE+Y~_Q%6O6E57t|=k*u=`QGP@?|OK zvfZLXejN{#^GnKo)YUDn*AxcH^|kG4N&^Dj!1zU&bWlrz?BT5)r>dDv3`d2cKS1^q z^WX3HYwh^L-Ei7OleI$Pm}}m+JbXVyBo9{e<#df{T`#qjqsHRNOA~LnM^lpJ4-DlHWxFw zi>d2By0QJAbM=PVR#U5K`sPQyCL`X|9Ag@BsZ2~MktBxnKFr_T9mw}Fb_up9Oj^@C zMhub-`wE}C6E!C7h$?Awy5ql|8Jr5D{k+)tZLt^KV#mJ4zJ`n4AAj$cxk%Yxr0g$J z_7^Gpi*Q7Z-X7n;Q>L1_6DIb2L82A)l0$lD~Hcu2+2dj`eRX z;>=yHErxdymYLu0SVBPN_v7}74d(X?$(_>wt`B7DG(aP(wAnWqD&Y81WGw-R1HcJ> zntrlXl9iV-IoM+9kUF7cszQbH-!>CmqEp-?f4|iDqc|cCmf~gZnI*xS(pWd^>eM%< z#!89vAM{-*=mxqIAzj3U6zV0xt-Q|I>VoDJZ)}fMK1lro1$l842HCT+i5d5Ol*5+Y zrnx=_PqR(-+M{MoUrYMp!MJ3a;9B20W1UJD6=;8gy2@BU_cy~ z*ie5e-w4!?+@tr%LpzJ{_|_jw0dfTtnH*bW-ExcfY4}BX$aqVp z&9!jHyfsu>?dK^8t5DLuceGZ0*9*FHNChuHYV;!V;>JQQg>)_7EV>rn5yQGumql9M zNx$H0+VI6!`RXmr!vp0aJ_YD}2K0qdSVD#Jp+~!~QU!0H>O!HEV4nOc=nHP{1?dal zl&hmSq0_Z4rZtaVo>rUW#Tgaatc>lqV-?h?GRdXhOJ|dvSB%BSQG}m<>v#s4a(_RM z(cb}!YV)HYQlzq}qrHl{rv3BFV>@EfmI=e2=+19&{?5R)y^0Kv@FW%SZ#AN+N}Cbt zN@C!3h2JUcvL5sWD@_SlC_jinwA{SQJFwreNg8C?i1qEyM-?az?4f)sxwe`Wdi21x z!$D)3weclf5_mP_5M>LhoVEYraD~mv@}Eu{Ql{pBPT-JWX2^Ev^sVRcK-sFnfTZo= zz3#2pm52)5-J(mk*(Kbx-NH}j-+C-fx|UvAJw<_R-R-ceVY4X3D*9jz?wfLIRqL|W zQt+zxBJ6-RiP^X~gwN*TmXU9~h^QS^4pbt(1rc;maY05X z5gbOj^`gnTB5pT4>0vLHT2&j<0Uf%4{Gcy?=+aorrZ{^DxVvi7e9}b){wHhXq(S_Zhka!5}{5ZZyuQ3HyR&D7>&2=!j+z#n_J@v z!KP0RwK!~j6K2>{_g+sa5m!;igYks>W@Zqa4=>w>?_eB==>Psjq^Ubp{ABW%I7dX=z^F2tUHC#1hJhMC=N*1Lrn1Kb4uwP`xVa5qG^1W%v& zRiIl1&pRB9BMKpTg1|g>S;7Yn?SvI&B(?fIpF{Omhc3lpPr6_)6lYrApT1%$0Aqk;X_*i+mWM2K~o- zR!wZWht}(>SSem(I3w=Yb)tfgJRZ74E9l}#Zu=54nR^Jjo!#6}-P}54V_&3UmrMR9 ziO{jSSFmTyOt-kk6b6ft*+T#xl;;S@#Q*ky*4 z(!-^H%Z}SnR}Z)lXGk3;xG4k#8il#U_V3Y^Hx1j;Qj+IV@e@8-z*I&kRjkYOOPjr3 z?H^%AhWC|vBy}M=^xHL2)76Rklk2G%)vDylk9B*yq=O)8Z0#IAaGlG;iB*coz)aoc zI^sa&6F{V{z&Cls{Rq{^6DQ+Wk~qSM$vRBRT*#HuucPkJSXj!L`SngPGGcEmG$v zj)mL+#+?X{+>AWJRPbd@?w`9JxrN$S1707etG>SJd+U}pUZl@ zd6J>*+=kj5)#1XBwd@fN?ui~fy~lENW3gdAr$BGR@j!k60V$8cSp3~){r27+W zBlh->+l81()b9T4xBLc$Hn*fP-?*nxP3wrS0PRGkybey_ZF*R8E3l)nJShQ7iT2<6 zqoi*B`43+|+4tvbPsj(!-1_cL14tv0@Cn-nZEO02tm6bs(*|)#G4N4-gGf zXCl1~Gd(He072}A8!PZludTS5o#)lG`|FZnn*Bf#zGY_Fz69F0Krg|{uxRivmMu&A zJ_1zX9}iIt(U0BEiB5sR0|DAI-)Ed3H($1BXy^sFVL!nMwK4it^f8O`3FdMBjS=~P zYj*@&dNc5^Kd-hlBReQ_Dv z2#|DVz7e9(J26<)jZAouHtWdNc_oFox;1e*YLc~#ZwCw7(&Z&su3%|ruV9N+Hwt0d z5SuP%B?Lb^cSuX}T4xvS_E2{yf=|bWoMa@~6)kN9R``Nh$nG^Y;o~Vi4>X#)YhIY? zm(-}0bO@griHT4M%V7pg7DBs4+D`Z+fsRh4AO*V+H(T!2BIoC`Y1xH zxRRy10jg2@G0KI{#jAbj{Y*(@vOjE*gTfm(^$o%8VI-dzsyGeL#IDA9kG2Z{UfMn;2@OxV!+xATebp7!nDntl&^KlU>N-FVtqvdKhd0zl z8DRd9J;HgW^L^$elsu$vN=ZJz@{1r~2;B-k+OE@ilDbY1GG>wOz?0^tLyGM>sb48} zJ!g2G%`YAI0(Akrq&Iey(rQ6`mDl`d``|86Y_3n<*&De^gNB9?)2Qq?R;Bu)99uIs zP~fjyQ-wUMSfQ;DGuQ!Qx5K*wa;1}VBk5LTh!Gb~4 z?)KNd_NMZZNop#M{AM2VT66i1@Iz$y+2slJDFpI66l7OdaqjYjh$~npQ6uawaCDg!7ZKc%VctbgiDstP9?@DT4(tYPAUN~{npmC7F0j6*zDf5+_ zFVvlJ@6NNYBcD;N0pOOlW^7?(NqTn`^NcDkdW!|ujEvbgN%(!4U3eD9!nnzlB_ihq${(@)n1q(p)f2I8zA^r9zcQ4&m>L^Im! zCPNFteHt)G0_Y4+@{iT7IBdRXgE9nmphJIeqbc=l&}^o4Say4!{k?<0Ei^ZCSRIq&%RQ^|ZX)cgo>A3Zs&A#htk0*xEtxOQeC@bWbj}*&T_?mE zv6J-~hoH<~iI8~yP~{L^a%{#?vvhd4?gF4NyQ*GYacl!K;nMNrTtT3s@I$v~X>$zq>@ zokt165l<0P0v#JqTSk>vI3Wdk{fnTj6w$d@>+|A$>&!Q*b1MtNeajoN%$7r~Je8l_ z7J}?K?K<*nk$pa*H?LqoXib*SYL52lA3UEkFKdi<^*y|Iougi|!F}#0?I#h8qzH@i z_U856lPL&qDNt3tl@8)t;nCcb&5aH9K73{O&-S~o+YBm%{H!NUfpKkZV;^cZ-B41&ouk$sVh<63WfCCE|(|+!7+RrW|@Juo>M=70OG)k*OAGvCRQU& zQ+Zhy(>S&ok`pc!G7+B(Pxb4IPrhDO>Q%-Xew&_e3LlPxv|aS`dAD2vG}~=d-DLq9 zURmIewa38a@2lbjJq0`Djya>rRDCB3Q1N+9o8QA$?8K2$D(a*^)!*~|3&4>x5V6-K z?!pTF_7n1RKvA|#R4Nna`WTC}jD<+lPf1RPYP%o@=wx60l!T@$QZTk4)9Qu%%4dul zXH}2Jz8Bklfqhd)j^e9IshjqIMdGWe;^^XaWez;jem0N&Rx5Vd>Qz^zM{K$-BQf z+E~a>j6{1}I~a~9!{@&h z9MV2aV+2Q}j;7OCc72j4SQdH5{OBcgQ_3tr;(A}@ac+f3or(C?rYe)}bQ{%NbP6gM z&IkC3?1rV;xDTihPh7qh(g5zC*JSlL%YL4A=^wLXAU_JgcKEp4g@LJvAD#9?^6Zfi zfVbC*ahn8OO2N*;Q;84j@(u~TmAhu=?!(BCLY67M!(0DI{6=%h{=Uok(Q?wWD2O2>C3^SbJ5(+SnCv$*1M4Jm=N|Kc63dvyA>qRZ9&uqUXr7jHvFx@Qmb% zna&=h;ktB#GKc(-nrR2gA$PWVJ@awUAOgWW_SpO{e$m7`>)u*hWG}?EFgA=)%7UXN zSN;enfm|9uIeUYInyZ0#@}P6%oJ7HwUxg>bkjyK}((oIs_vp$zGRG@ddV?A#&b1MT zh_e{Cl{eSMtB(Cp1k;oV$}>C3r*#i2yO+Z?A9uTVvpkNtVb}l-4g10BDou)>F~kDO z04S}Lo@VeY!ynb-yIX7t?_U-}Lc#LpC`5b4)pXo=oVEfqSmct12cU*Dt>*?KHjPPz ztgP5Uj+g{O9XJZS%pz!yITbyyBgmBU<0|SC-e853W|KwITJr-7FPPK~eJnTqg{ctdaogJ2k(%v}j5YNp!y#qm_qS93 zsejxi7Hq#Z;xjz)W$j4v#s=oq=T0AQC^xuqK0+>hE~mfnInd-lIG3 zZ%5w*)$YjArR<&5J2XkS;AGAC&)LoF7tp)lo6NjBz`ZcnKsJBRZ?8gK6BjLwVyBK3 z*%VBz9L@Hg-)Ga?;`LN*&)$il?eH?Pt!E3KHrWl^-C41YliIc8-r=x-=>zf6E*pON zZ4|b;ER)_^kn7S=;K`=Sjrcd`B7F zpf$}<$j;I6t;1Y!?cC7L#4X=M?U$^J+IwMhm-HPsKI&1-3qoI4?p1r2RN%M;*tAx% zpoy+C*BytdOo^-i0qb$Q23!YaH~#a~M$Ed#)He@5`U!l~ErYP)_<_WR$63GqCNgpp zZLc=n+IynpfBa^r)En~NGpFZy&D;;Z+{lO=c*?NS9Gtu90RpWw?}ar$2WUl~(AXt6 zIsS0HD;L;|Q$SO|;ZB7Y!XXI(rqc9>64Sn8h~2u>W&Ostw}Miid~0{eM(~~}K%O~7 zy={eXd*D$L(Wk#sggELZRwhFfRMk0R1If=*)@GSBNxL1QP_Qw@IP!yKDf;`@qx<`w z>-xGQB5?fxNgrG6)VqA_g*@0jm|hs6RSJ09vXc&c6{DPxupsudMpW?(P)O&#cSb#R z-5G;IOntm=m!PR&b9B5Pb}%{hmpR8^yZfr5LcTAwY=Wg*4bdbqT;1lpqZ)VG-OsWq z{q9Js=U~pB=e^`y@p8C4I-rt?XUlP+k@4gb-ldFz@ zNRyAVBR_X#OnW2V4B*g}KWJWggn#Z#*lZan;SbrP=&u+W+71CUFX*bU+YWE^CeE?_ z;bHy2&hq z%5oZolPyVW<6iMJ=#qwq$!VY75c0gVWCp2iL?NM<>;SpM^U`oHp4@KrS|SKP!pLOndv zwKf-h2MAe(ewpb&&On|?8}CdjTb*tcM`rd$iGK<-G43nBi8xUuKr0T*Gu@+1{F5h> z!6MUQ(hEy1L#^oaWcwA8N;kG}bvy&hCPbUFT@L9q|3d8Z^C| zy)5N}d76y2C;IF$5s_qUz9Wpn?9K>T)f#j)pcPY(CT*`$h)Hz6&(wBZOQ`;WPUSHz zJCb>uoiwxk{5pswwj}krU0w&zOW=J2dMYzK=v-G$l6Gut6QBuP zTZ8BBfIop(o#G$)M(CQPKLC%6db>g!W0U?JZ?Chc&u+HgNBsyKi&;|R zk`d%-Ws5_6w5J@|y}1EY{N7J)US(N@5z*ufp;*ZWVMV^$$QZ*s!;bIl{ZPTEf3Y(; z!t%OJnYr9IZ7tscAlWu9<{ws+cFcal(nEJrYBGsEkhKFMSh-37@6zd){f0e4k#4L z^YGh_>>r;sVSpzcP{5xY2Rcps;giNmzV4`lbYW!{cV&#>kbba%lV9rP?N>U@IEtwt zXUVCVy~5&%cVtR)3FJgB?XbK-eHz$d%)Eu$eU0noW{n`_$GbNCDLnrX4ci!uB@il9 z-){vIvvN69a7J=Zx-iMOxq4*QN-#mTG7&PgLi&@ifcu7Vb3&EcDQ@ue+r-?6=BKak0JO-J~AC zZ(x}ok+wwRKi9h@zyHoC5X64>-*F{ecx6^51QD_S?9lwXeUYAWRk=T${5~VASnQDP zF!~+EIedLmV^O<7yc@BF&SJGa7rB?fe#*?A*TY$3An=ZC!Jo4I(v%JqFj@lBk7dr? zewC1#0TaxJYG~XhvU*yvspIj3#9!k<-H5D2Dms##w4RsShRnT3M5H&~936}w9!r^` zNfHT8SWB3{VhT{^N@g#dXyKL$xCfEAbNFfeBiQuw9sN!pe)-N{f`Nv=-XHGTW2mR^ z0CiAh=j1Kj>{Pqyj(&4C z1E>xpiO>xrs@ls`@lcMCi95uI&jyoObQ@K3_hb`bQ%+cs^f=h-C+P-KI#5KYz5lD{ zIW^7Xlv^=nSC2LWg7iwZ_mHkPE?hd0ee)jiW{o5&0wm!BWu}$NT3RnCI~vSn`177d zcrCfE`etOXiHe!FLQ3YF$SJGD%~eCdr7hZlH0|%6?Nk~x8b%y;PgomTB*L{r5?6*d zC25yJ9-@;QyCJ(rUW&gki?ky4i z>~D1+f7u3c1=KB#b-HIcvk#{FQy@4Zk|F!>e5$3pjWwAyqMBHcr>Fe74|?*`5AN?K zEbBY=YusydW#tmF8|}Q zS=;NxW50%>vd$+%X{cAb?w~@rj=_-crt>yZwJ#GZHxOsjs+<~<5)_|S=6P%fgk{kp z8%YtUhV1$d#d>=V8I2-TWLfrKVl+DvEm|@66D9|Q%;XF=qyf;5YswS+Ny}`z1*G`9 zksWsQolNqDS>?~7z7g!(2RT0-DXQbl&!$fLoL@&&%ZGbE!!{lwxO3LNYJ4D!pS&H7 z8M^9}ev7^_2;WPUzJ!Y_xGaq~?3liS^^! z*wH*&Wb09{rP+!+A<8(;Zm6!aotoW+eb$QKHS@aC=PO3CV~~4tL~w?e^e~a*>{aL< zZ$M|Ed0PL*v0dhJG9a49H)l)5qDV-VKB2j z=%vVeiO_ChwsVq|^SfiIWMj-n^Zzbxk@H#4sLoHTsrBJCRY5;dVbhV!qdxnh$Ug{e z8^a@#dcIWv6}UA5BoeVzcns@>>qJ0CaLANmG*6(w!y+kf+CBahy&QSX2*E|D)mVzL zf8QkEl6rdD`yQu5VUNH8I0EFtV=rTz5^q1$9KK(EIMGSK*oTq(+QKNU8P`>RuJrb} zPlx}q(hKTr_NJ40{abhXh;LFpN4=ceyjiXoaS&302w+P9YSzdM;5G%sJM^@7&Yn`J z|3!G1;h*dOcgcb6Lg)U&rOn|@SJN(NP+#f-~e$dS8$F1=4BdG}nzxbduTX$^p)VPg;V!b^ zLcPe)yVqg<09-{b{Y?-%GDIHnS_HCWZgB&iijux&xQO_N9h{v5)JNzT4DZvQc^=ZE z80&An<%Ut*zOB|wTL%y-niEs)N}O|I{COE{^Gs>4==Akhlbanc?BGXbTYD){$b?gX zc{PkhXGg~-w@>~XXp){hd8@sZI(4jasjz{T&lMzYL>;VUi_y6}b=~RKo4FrQ5ANiw z?R+YfPdZ`U9%O}A&fU-OeH`b_uyo1pN7MCCMRIEVODHa za0J6&A?DSvKiv7M*gTc~R?73s1@sy^#0t$@4h+bl@9n2wU;hoht-0QsK~7t*fFsFw z5kV#ZHa7SjeC~cxOr1cA?48Oc)*cqbIYiB6X0 z4O49mvrEzBM}Jq*(1{-e8Oo+;s?z0@qc|DYG+6AM$-~W{&!irKKoSjm-qVy?je7B{QLg}CI05m literal 0 HcmV?d00001 diff --git a/l4proj.bib b/l4proj.bib index 686afd7..b4555b7 100644 --- a/l4proj.bib +++ b/l4proj.bib @@ -61,3 +61,43 @@ year={2017}} address = {Washington, DC, USA}, keywords = {MDS, force directed placement, hybrid algorithms, multidimensional scaling, near-neighbour search, pivots, spring models}, } + +@misc{PapaParse, + title={Papa Parse}, + url={https://www.papaparse.com/} +} + +@book{CleanCode, +title={Clean code: a handbook of agile software craftsmanship}, publisher={Prentice Hall}, author={Martin, Robert C. and Coplien, James O. and Wampler, Kevin and Grenning, James W. and Schuchert, Brett L. and Langr, Jeff and Ottinger, Timothy R. and Feathers, Michael C.}, year={2016}} + +@misc{MDNWebWorker, +title={Using Web Workers}, url={https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers}, journal={Mozilla Developer Network}} + +@misc{WebCL, +title={WebCL - Heterogeneous parallel computing in HTML5 web browsers}, url={https://www.khronos.org/webcl/}, journal={The Khronos Group}, year={2011}, month={Jul}} + +@misc{asmjsSpeed, +title={asm.js Speedups Everywhere}, url={https://hacks.mozilla.org/2015/03/asm-speedups-everywhere/}, journal={Mozilla Hacks – the Web developer blog}, author={Zakai, Alon and Wagner, Luke}, year={2015}, month={Mar}} + +@misc{asmjs, title={Big Web App? Compile It!}, url={http://kripken.github.io/mloc_emscripten_talk}, publisher={Mozilla}, author={Zakai, Alon}} + +@misc{gpujs, +title={gpujs/gpu.js}, url={https://github.com/gpujs/gpu.js}, journal={GitHub}, year={2016}, month={Jan}} + +@misc{WebGL2, +title={WebGL 2.0 Arrives}, url={https://www.khronos.org/blog/webgl-2.0-arrives}, journal={Khronos Group}, year={2017}, month={Feb}} + +@misc{WebAssembly, title={WebAssembly}, url={http://webassembly.org/}, journal={WebAssembly}} + +@ARTICLE{LSH, + author = {{Andoni}, A. and {Razenshteyn}, I.}, + title = "{Optimal Data-Dependent Hashing for Approximate Near Neighbors}", + journal = {ArXiv e-prints}, +archivePrefix = "arXiv", + eprint = {1501.01062}, + primaryClass = "cs.DS", + keywords = {Computer Science - Data Structures and Algorithms}, + year = 2015, + month = jan, + adsurl = {http://adsabs.harvard.edu/abs/2015arXiv150101062A}, +} \ No newline at end of file diff --git a/l4proj.tex b/l4proj.tex index 845c0f8..ee85d57 100644 --- a/l4proj.tex +++ b/l4proj.tex @@ -1,6 +1,8 @@ \documentclass{l4proj} \usepackage{url} +\usepackage{natbib} +\usepackage{hyperref} \usepackage{fancyvrb} \usepackage[final]{pdfpages} \usepackage{algpseudocode} @@ -9,6 +11,8 @@ \usepackage{subcaption} \usepackage{listings} \usepackage{color} +\usepackage{multicol} +\usepackage[super]{nth} \renewcommand{\lstlistingname}{Code}% Listing -> Algorithm @@ -82,6 +86,17 @@ Many approach, some map many features to 2 D, this is based on distance. the coo \section{Project Description} +\section{Outline} +The remainder of the report will discuss the following: +\begin{itemize} + \item \textbf{Background} This chapter discusses approaches to visualise high-dimensional data, and introduce the theory behind each algorithm implemented and evaluated. + \item \textbf{Design} This chapters discusses choice of technologies. + \item \textbf{Implementation} This chapter will briefly show decisions and justifications made during the implementation, along with several code snippets. + \item \textbf{Evaluation} This chapter will detail the process used to compare the performance of each algorithm, starting from the experiment design to the final result. + \item \textbf{Conslusion} This chapter give a brief summary of the project, reflect on the process in general, and discusses possible future improvements. +\end{itemize} + + %============================================================================== %%%%%%%%%%%%%%%% @@ -92,6 +107,10 @@ Many approach, some map many features to 2 D, this is based on distance. the coo \chapter{Background} \label{ch:bg} History of data vis, MDS, spring model, some other methods including parameters mapping like radar chart +Before, there was linear combination, weakness? +For small dimension, can use radar chart, or multi bar chart +t-sne, weakness is slow +linear combination method \section{Link force} \label{sec:linkbg} @@ -119,6 +138,7 @@ The total number of spring calculations per iteration reduces from $N(N-1)$ to $ Previous evaluations indicated that the quality of the produced layout improves as $Neighbours_{size}$ and $Samples_{size}$ grows larger. For larger datasets, setting the too small values could cause the algorithm to miss some details. However, favorable results can be obtained from numbers as low as 5 and 10 for $Neighbours_{size}$ and $Samples_{size}$\cite{Algo2002}. \section{Hybrid Layout for Multidimensional Scaling} +\label{sec:bg_hybrid} In 2002, Alistair Morrison, Greg Ross, and Matthew Chalmers introduced a multi-phase, based on Chalmers' 1996 algorithm, to reduce the run time down to $O(N\sqrt{N})$. This is achieved by calculating the spring forces over a subset of data, and interpolating the rest onto the 2D space\cite{Algo2002}. %TODO Maybe history of hybrid layout, 3rd section on original paper @@ -142,12 +162,13 @@ Finally, the Chalmers' spring model is applied to the full data set for a consta Previous evaluations show that this method is faster that the Chalmers' 1996 algorithm alone, and can create a layout with lower stress, thanks to the more accurate positioning in the interpolation process. \section{Hybrid MDS with Pivot-Based Searching algorithm} +\label{sec:bg_hybridPivot} \begin{wrapfigure}{rh}{0.3\textwidth} -\centering -\includegraphics[width=0.3\textwidth]{images/pivotBucketsIllust.png} -\caption{Diagram of a pivot (dark shaded point) with six buckets, illustrated as discs between dotted circle. Each of the other points are classified into buckets by the distances to the pivot.} -\label{fig:bg_pivotBuckets} + \centering + \includegraphics[width=0.3\textwidth]{images/pivotBucketsIllust.png} + \caption{Diagram of a pivot (dark shaded point) with six buckets, illustrated as discs between dotted circle. Each of the other points are classified into buckets by the distances to the pivot.} + \label{fig:bg_pivotBuckets} \end{wrapfigure} The bottleneck of the hybrid model is the nearest-neighbor searching process during the interpolation. The previous brute-force method results in time complexity of $O(N\sqrt{N})$. This improvement introduces pivot-based searching to approximate a near-neighbor instead. This reduces the time complexity to $O(N^\frac{5}{4})$\cite{Algo2003}. @@ -181,16 +202,19 @@ With this method, the parent found is not guaranteed to be the closest point. Pr \section{Performance Metrics} \label{sec:bg_metrics} -To compare different algorithms they have to be tested against the same set of performance metric. During the development, a number of metrics were used to objectively judge the resulting graph and computation requirement. The evaluation process in section \ref{ch:eval} will focuses on the following metrics. +To compare different algorithms they have to be tested against the same set of performance metric. During the development, a number of metrics were used to objectively judge the resulting graph and computation requirement. The evaluation process in chapter \ref{ch:eval} will focuses on the following metrics. \begin{itemize} \item \textbf{Execution time} is a broadly used metric for any algorithm requiring any significant computational power. Some applications aim to be interactive and the algorithm have to finish the calculations within the time constraints for the program to stay responsive. This project, however, focuses on large data sets with minimal user interaction. Hence, the execution time in this project is a measures of the time an algorithm takes to produce its "final" result. The criteria for this will be discussed in details in section \ref{ch:eval}. \item \textbf{Stress} is one of the most popular metric for spring-based layout algorithm, modeled from the mechanical stress of a spring system. It is based on sum-of-squared errors of inter-object distance\cite{Algo1996}. The function is defined as follow. $$Stress = \frac{\sum_{i= 1; j--) { + for (let i = 0; i < j; i++) { + let source = nodes[i], target = nodes[j]; + let lowDDist = Math.hypot(target.x - source.x, target.y - source.y); + let highDDist = distance(source, target); + sumDiffSq += Math.pow(highDDist - lowDDist, 2); + sumLowDDistSq += lowDDist * lowDDist; + } + } + return Math.sqrt(sumDiffSq / sumLowDDistSq); +} +\end{lstlisting} %============================================================================== %%%%%%%%%%%%%%%% @@ -320,9 +454,7 @@ Tried caching %%%%%%%%%%%%%%%% \chapter{Evaluation} \label{ch:eval} - -%TODO SOMETHING HERE -% Link is golden standard, the rest try to get to that but cut corners +This chapter presents the comparison between each of the implemented algorithm. First, data sets that were used will be described. The experiments setup are then introduced, along with decision behind the test designs. Lastly, the results are shown and briefly interpreted. \section{Data Sets} \label{sec:EvalDataSet} @@ -342,26 +474,28 @@ The Antarctic data set contain 2,202 measurements by remote sensing probes over \section{Experimental Setup} Hardware and web browser can greatly impact the JavaScript performance. In addition to from the code and dataset, these variables have to be controlled as well. -The computers used are all the same model of a Dell All-in-One desktop computer with Intel\textregistered{} Core\texttrademark{} i5-3470S and 8GB of DDR3 memory, running CentOS 7 with Linux 3.10-x86-64. +The computers used are all the same model of a Dell All-in-One desktop computer with Intel\textsuperscript{\textregistered} Core\texttrademark{} i5-3470S and 8GB of DDR3 memory, running CentOS 7 with Linux 3.10-x86-64. As for web browser, the official 64-bit build of Google Chrome 61.0.3163.79 is used to both run and analyse CPU and memory usage with its performance profiling tool. -Other unrelated parameters have to also be controlled as much as possible. The starting position of all nodes are locked at $(0,0)$ and the simulation's velocity decay is set at default of $0.4$, mimicking air friction. Alpha, a decaying value used for artificially slowing down or freezing the system over time, is also kept at 1 to keep the springs' forces in full effect. The web page is also refreshed after every run to make sure that everything, including uncontrollable aspects such as JavaScript heap and the behavior of the browser's garbage collector, have been properly reset. +Other unrelated parameters have to also be controlled as much as possible. The simulation's velocity decay is set at default of $0.4$, mimicking air friction, and the starting position of all nodes are locked at $(0,0)$. Although starting every nodes at the exact same position may seems to cause a very high initial spring force, the force scaling and the way D3 takes each node's velocity as part of spring force calculation prevent the system from spreading out too far. In practice, the graphs have to continue to expand for several more iterations before the overall layout reaches the correct size. Alpha, a decaying value used for artificially slowing down and freezing the system over time, is also kept at 1 to keep the springs' forces in full effect. + +The web page is also refreshed after every run to make sure that everything, including uncontrollable aspects such as JavaScript heap, ahead-of-time compilation and the behavior of the browser's garbage collector, have been properly reset. \subsection{Termination criteria} \label{ssec:eval_termCriteria} Both Link force and the Chalmers' 1996 algorithm create a layout that stabilises over time. In D3, calculations are performed for a predefined number of iterations. This have a drawback of having to select an appropriate value. Choosing the number too high means that execution time is wasted calculating minute details with no visible change to the layout while the opposite can results in a bad layout. Determining the constant number can be problematic, considering that each algorithm may stabilise after different number of iterations, especially when the interpolation result can vary greatly from run-to-run. -An alternative method is to stop when a condition is met. One such condition purposed is the difference in velocity of the system between iterations\cite{Algo2002}. In other word, once the amount of force applied in that iteration is lower than a scalar threshold, the calculation may stop. Taking note of stress and average force applied over multiple iterations as illustrated in figure \ref{fig:eval_stressVeloOverTime}, it is clear that Link Force converges complete stillness while the Chalmers algorithm's average force reaches and fluctuate around a constant. Because the $Samples$ set keeps changing randomly, the system will not reach a state where every spring forces cancel each other out completely. This is also reflected when the animation is drawn where every nodes keep wiggling about but the overall layout remains constant. It can also be seen that stress of each layout converges a minimal value as the average force converges a constant, indicating that the best layout from each algorithm can be obtained once the system stabilizes. +An alternative method is to stop when a condition is met. One such condition purposed is the difference in velocity ($\Delta{v}$) of the system between iterations\cite{Algo2002}. In other word, once the amount of force applied in that iteration is lower than a scalar threshold, the calculation may stop. Taking note of stress and average force applied over multiple iterations as illustrated in figure \ref{fig:eval_stressVeloOverTime}, it is clear that Link Force converges to a complete stillness while the Chalmers algorithm's average force reaches and fluctuate around a constant as stated in section \ref{sec:imp_neigbour}. It can also be seen that stress of each layout converges a minimal value as the average force converges a constant, indicating that the best layout from each algorithm can be obtained once the system stabilizes. \begin{figure} \centering \includegraphics[height=5cm]{graphs/stressVeloOverTime.png} - \caption{A log-scaled graph showing decreasing stress and forces applied per iteration over time covering a constant number.} %10,000 data points + \caption{A log-scaled graph showing decreasing stress and forces applied per iteration over time covering a constant number when running different algorithm over 10,000 data points of Poker Hands data set. Stress is calculated every \nth{10} iteration.} \label{fig:eval_stressVeloOverTime} \end{figure} -Since stress takes too long to calculate every iteration, termination criteria selected is the average force applied. This criteria is used for all 3 algorithms for consistency. The cut-off constant is then manually selected for each algorithm for each subset used. Link force's threshold is a value low enough that there are no visible changes and stress have reached near minimum. The Chalmers' threshold is the lowest possible value that will be reached most of the time. +Since stress takes too long to calculate every iteration, termination criteria selected is the average force applied per node. This criteria is used for all 3 algorithms for consistency. The cut-off constant is then manually selected for each algorithm for each subset used. Link force's threshold is a value low enough that there are no visible changes and stress have reached near minimum. The Chalmers' threshold is the lowest possible value that will be reached most of the time. It is interesting to note that with bigger subset of the Poker Hands data set, the threshold rises to 0.66 from 3,000 data points onward. By selecting this termination condition, the goal of the last phase of the Hybrid Layout algorithm is flipped. Rather than performing the Chalmers' algorithm over the whole dataset to correct interpolation errors, the interpolation phase's role is to help the final phase reaches stability quicker. Thus, parameters of the interpolation phase can not be evaluated on their own. Taking more time to produce a better interpolation result may or may not effect the number of iterations in the final phase, creating the need to balance between time spent and saved by interpolation. @@ -369,7 +503,7 @@ By selecting this termination condition, the goal of the last phase of the Hybri \subsection{Selecting Parameters} \label{ssec:eval_selectParams} -Some of the algorithms have variables that are predefined constant numbers. Care have to be taken in choosing these values as bad choices could cause the algorithm to produce bad results or takes unnecessarily long computation time. To compare each algorithm fairly, an optimal set of parameters have to be chosen for each. +Some of the algorithms have variables that are predefined constant numbers. Care have to be taken in choosing these values as bad choices could cause the algorithm to produce bad results or takes unnecessarily long computation time. To compare each algorithm fairly, a good set of parameters have to be chosen for each. The Chalmers' algorithm have two adjustable parameters: $Neighbours_{size}$, $Samples_{size}$. According to previous evaluations\cite{LastYear}\cite{Algo2002}, favorable layout could be achieved with values as low as $10$ for both variables. Preliminary testings seems to confirm the findings and the values are selected for the experiments. In the other hand, Link force have no adjustable parameter whatsoever so no attention is required. @@ -378,7 +512,7 @@ According to previous evaluations\cite{LastYear}\cite{Algo2002}, favorable layou \centering \includegraphics[height=5cm]{graphs/hitrate_graph1.png} \includegraphics[height=5cm]{graphs/hitrate_graph2.png} - \caption{Graphs showing accuracy of pivot-based searching between $k = $ 1, 3, 6, and 10. The left box-plot graph shows the percentage across 5 different runs (higher and more consistent is better). The right shows the high-dimensional distance ratio between the candidate parent chosen by pivot-based searching and the best parent (closer to 1 is better). For instance, if the best parent is 1 unit away from the querying node, a ratio of 1.3 means that the candidate parent is 1.3 unit away.} + \caption{Graphs showing accuracy of pivot-based searching between $k = $ 1, 3, 6, and 10. The left box-plot graph shows the percentage across 5 different runs (higher and more consistent is better). The right shows the high-dimensional distance ratio between the parent chosen by brute-force and pivot-based searching when they are not the same (closer to 1 is better). For instance, if the parent found by brute-force searching is 1 unit away from the querying node, a ratio of 1.3 means that the parent found by pivot-based searching parent is 1.3 unit away.} \label{fig:eval_pivotHits} \end{figure} @@ -420,7 +554,7 @@ Finally, the last step of interpolation is to refine the placement for a constan %============================ \subsection{Performance metrics} -As discussed in section \ref{sec:bg_metrics}, there are three main criteria to evaluate each algorithm: execution time, memory consumption, and the produced layout. Although stress is a good metric to judge the quality of a layout, it does not necessary means that layouts of the same stress are equally as good for data exploration. Thus, the looks of the product itself have to also be compared. Since both the Chalmers' and Hybrid algorithms have the goal of mimicking the Link Force's result while cutting cost as much as possible, the layout of Link Force will be used as a baseline for comparison (figure \ref{fig:eval_idealSample}). The closer the layout is to the baseline, the better. +As discussed in section \ref{sec:bg_metrics}, there are three main criteria to evaluate each algorithm: execution time, memory consumption, and the produced layout. Although stress is a good metric to judge the quality of a layout, it does not necessary means that layouts of the same stress are equally as good for data exploration. Thus, the looks of the product itself have to also be compared. Since Bartasius have found that Link Force provide a layout with the least stress in all cases, the its layout will be used as a baseline for comparison (figure \ref{fig:eval_idealSample}). It should also be noted that for ease of comparison, the visualisations may be uniformly scaled and rotated. This manipulation should not effect the evaluation as the only concern of a spring model is relative distance between data points. %============================ @@ -429,7 +563,8 @@ It should also be noted that for ease of comparison, the visualisations may be u \subsection{Memory usage} \label{ssec:eval_ram} -Google Chrome comes with the performance profiling tools, allowing users to measure JavaScript heap usage. While it is straightforward to measure the usage of Link Force, the 1996 algorithm causes problems with the garbage collector. Because the $Samples$ sets and, to a certain degree, $Neighbours$ sets are reconstructed at every iterations, a lot of new memory spaces are allocated and the old ones are left unreachable, waiting to be reclaimed. As a result, the JS heap usage keeps increasing until the GC runs even though the actual usage is theoretically constant across multiple iterations (figure \ref{fig:eval_neighbourRam}). Even though GC is designed to be only be run automatically by the JavaScript engine, Google Chrome allow it to be manually called in the profiling tool. For this experiment, GC will be manually called periodically during part of the run. The usage immediately after garbage collection is then be recorded and used for comparison. The peak before GC automatically gets invoked is also noted. + +Google Chrome comes with the performance profiling tools, allowing users to measure JavaScript heap usage. While it is straightforward to measure the usage of Link Force, the 1996 algorithm the garbage collector gets in the way of obtaining an accurate value. Because the $Samples$ sets and, to a certain degree, $Neighbours$ sets are reconstructed at every iterations, a lot of new memory spaces are allocated and the old ones are left unreachable, waiting to be reclaimed. As a result, the JS heap usage keeps increasing until the GC runs even though the actual usage is theoretically constant across multiple iterations (figure \ref{fig:eval_neighbourRam}). Even though GC is designed to be only be run automatically by the JavaScript engine, Google Chrome allow it to be manually called in the profiling tool. For this experiment, GC will be manually called periodically during part of the run. The usage immediately after garbage collection is then be recorded and used for comparison. The peak before GC automatically gets invoked is also noted. \begin{figure} \centering @@ -450,13 +585,16 @@ The hybrid layout has multiple phases, each with different theoretical memory co The comparison have been made between the 3 algorithms with hybrid layout running 10 pivots to represent the worst case scenario for interpolation. Rendering is also turned off to minimize the impact due to DOM elements manipulation\cite{LastYear}. The results are displayed in figure \ref{fig:eval_ram}. The modified Link Force, which use less memory compared to the D3's implementation (section \ref{sec:imp_linkForce}), scales badly compared to all others, even with automatic garbage collection. The difference in the base memory usage between the 1996 algorithm and the final stage of Hybrid layout is also within the margin of error, confirming that they both have the same memory requirement. If the final phase of the Hybrid layout is skipped, memory requirement will grow at a slightly lower rate. -Due to JavaScript limitation, Link Force crashes the browser tab at 50,000 data points before any spring force is calculated, failing the test entirely. The similar behavior can also be observed with the D3's implementation. In contrast, the Chalmers' algorithm (and the hybrid) can process with as much as 470,000 data points. Interestingly, while the Chalmers' algorithm can also handle 600,000 data points with rendering, the 8GB memory is all used up, causing heavy thrashing and slowing down the entire machine. Considering that, paging does not occur when Link Force crashes the browser tab, memory requirement may not the only limiting factor in play. +Although the original researchers, Chalmers, Morrison, nor Ross, have explored the memory aspect before, Bartasius experimented with the maximum data size the application handle before Out of Memory exception occurred\cite{LastYear}. A similar test is re-performed to find if there has been any changes. +Due to JavaScript limitation, Link Force crashes the browser tab at 50,000 data points before any spring force is calculated, failing the test entirely. The similar behavior can also be observed with the D3's implementation. In contrast, the Chalmers' and hybrid algorithm can process as much as 470,000 data points. Interestingly, while the Chalmers' algorithm can also handle 600,000 data points with rendering, the 8GB memory is all used up, causing heavy thrashing and slowing down the entire machine. Considering that, paging does not occur when Link Force crashes the browser tab, memory requirement may not the only limiting factor in play. All in all, since a desirable result can not be obtained from Hybrid algorithm if the final stage is skipped, there is no benefit in term of memory usage from using the Hybrid layout, compared to Chalmers' algorithm. Both of them have a lot smaller memory footprint compared to Link Force and can work with a lot more data points on the same hardware constraint. %============================ \subsection{Different Parameters for the Hybrid Layout} -In section \ref{ssec:eval_termCriteria}, it has been concluded that the value of the parameters can not be evaluated on their own. Based on findings discussed in section \ref{ssec:eval_selectParams}, 10 different combinations of interpolation parameters were chosen: Brute force and 1, 3, 6, and 10 pivots, each with and without refinement at the end. Due to possible variations from the sample set $S$, each experiment is also performed 5 times. The data sets used are Poker Hands with 10,000 data points, which is the highest amount where stress can be calculated before crashing the web page, and 100,000 data points to hi-light the widen difference in interpolation time. +In section \ref{ssec:eval_termCriteria}, it has been concluded that the value of the parameters can not be evaluated on their own. Based on findings discussed in section \ref{ssec:eval_selectParams}, 10 different combinations of interpolation parameters were chosen: Brute force and 1, 3, 6, and 10 pivots, each with and without refinement at the end. Due to possible variations from the sample set $S$, each experiment is also performed 5 times. Data sets used are Poker Hands with 10,000 data points, which is the highest amount where stress can be calculated before crashing the web page, and 100,000 data points to hi-light the widen difference in interpolation time. + +It should also be noted that while the original researchers had a similar experiment\cite{Algo2003}, it only explored the difference in execution time usage between random parent, brute-force, and pivot-based parent finders. The different values of each parameters was not taken into consideration and the produced results were assumed to be equal across multiple different runs. \begin{figure} \centering @@ -476,8 +614,12 @@ Surprisingly, despite lower time complexity, selecting higher number of pivots o \centering \includegraphics[height=5cm]{graphs/hybridParams_2ndTime_100k.png} ~ + \includegraphics[height=5cm]{graphs/hybridParams_totalIts_100k.png} + + \includegraphics[height=5cm]{graphs/hybridParams_2ndTime_100k_blank.png} + ~ \includegraphics[height=5cm]{graphs/hybridParams_totalTime_100k.png} - \caption{Comparison of different interpolation parameters of the hybrid layout at 100,000 data points.} + \caption{Comparison of different interpolation parameters of the hybrid layout at 100,000 data points. The two Box and Whisker plots are aligned for ease of comparison.} \label{fig:eval_hybridParams100k} \end{figure} @@ -501,20 +643,20 @@ Between brute-force and 1 pivot, there is no visual difference aside from variat In summary, to obtain quality layout, the refining step of the interpolation phase can not be ignored. Pivot-based searching only provide a significant benefit with very large data set and/or slow distance function. Otherwise, brute-force method can yield a better layout in consistently less time. %============================ -\subsection{Comparison between algorithms} +\subsection{The 3-way comparison} Figure \ref{sfig:eval_multiAlgoTime} shows the execution time and stress of the produced layout of each algorithm with various data sets. The results reveal that the Hybrid algorithm is superior to other algorithms across the board. The difference compared to Chalmers' algorithm is so large that the time difference from to parameter settings seems insignificant. It should be noted that with smaller data sets, the processing time in each iteration can be faster than 17 milliseconds, the time between each frame on a typical monitor running at 60 frames per second. In D3-force, the processing is put on idle until the next screen refresh. As a result, the total execution time is limited to the number of iterations. \begin{figure}[h] % GRAPH \centering \begin{subfigure}{0.45\textwidth} - \includegraphics[height=4cm]{graphs/multiAlgoTime.png} + \includegraphics[height=4cm]{graphs/multiAlgoTime.png} \caption{Execution time for up to 100,000 data points of Poker Hands data set} \label{sfig:eval_multiAlgoTime} \end{subfigure} ~ %add desired spacing between images, if blank, line break \begin{subfigure}{0.45\textwidth} \includegraphics[height=4cm]{graphs/multiAlgoStress.png} - \caption{Relative stress compared to Link Force of different data sets} + \caption{Relative stress of each finished layout compared to Link Force of different data sets} \label{sfig:eval_multiAlgoStress} \end{subfigure} \caption{Comparison between different algorithms} @@ -541,7 +683,7 @@ Figure \ref{sfig:eval_multiAlgoTime} shows the execution time and stress of the \label{fig:eval_Poker10k} \end{figure} -As for the stress, a relative value is used for comparison. Figure \ref{sfig:eval_multiAlgoStress} shows that the Hybrid algorithm results in a layout of lower stress overall. A trend also implies that the more data points available, the better the Chalmers' and Hybrid algorithm perform. +As for the stress, a relative value is used for comparison. Figure \ref{sfig:eval_multiAlgoStress} shows that the Hybrid algorithm results in a layout of lower stress overall. A trend also implies that the more data points available, the better the Chalmers' and Hybrid algorithm perform. In any cases, Link Force's always has the lowest stress. Comparing the produced layout, at 10,000 data points (figure \ref{fig:eval_Poker10k}), Hybrid can better reproduce the space between large clusters as seen in the Link Force's layout. For example, "Unrecongnized" (blue) and "One pair" (orange) have a clearer gap; "Two pairs" (green) and "Three of a kind" (red) overlap less; "Three of a kind" and "Straight" (brown) mixes together in Chalmers' layout but more separated in the Hybrid layout. However, for other classes with less data points (colored brown, purple, pink, ...), the hybrid layout fail to form a cluster, causing them to spread out even more. The same phenomenon can be observed at 100,000 data points (figure \ref{fig:eval_Poker100k}). @@ -618,9 +760,11 @@ The area where the 1996 and Hybrid algorithm fall short is the consistency in th %============================ \section{Summary} -Each algorithm demonstrates their own strengths and weaknesses in different tests. Link Force works great and perform consistently for smaller data set. Most information visualisations on a web page will not hit any limitation of the algorithm. In addition, it allows the real-time object interactions and produces smooth animations which might be more important to most users. However, for a fully-connected spring model with above 1,000 data points, the startup time spent on distance caching start to become noticeable and the each iteration takes longer than 17ms time limit, dropping the animation below 60fps, causing visible lags and slowdown. Its memory-hungry nature also limit the ability to run on lower-end computers that a significant margin of the Internet users possess. +Each algorithm demonstrates their own strengths and weaknesses in different tests. For smaller data sets with a few thousands data points, Link Force works great and perform consistently. Most information visualisations on a web page will not hit any limitation of the algorithm. In addition, it allows the real-time object interactions and produces smooth animations which might be more important to most users. However, for a fully-connected spring model with above 1,000 data points, the startup time spent on distance caching starts to become noticeable and the each iteration can takes longer than 17ms time limit, dropping the animation below 60fps, causing visible lags and slowdown. Its memory-hungry nature also limit the ability to run on lower-end computers that a significant margin of the Internet users possess. -When interactivity is not a concern, performing the Hybrid layout's interpolation strategy before running the 1996 algorithm results in a better layout in a shorter amount of time. However, this is not the solution for all. The method neither work well nor consistently with smaller data set, making Link Force a better option. As for interpolation, simple brute-force method is the better choice in general. Pivot-based searching does not significantly decrease the computation time, even with a relatively large data set, and the result is less predictable. +When bigger data sets are loaded and interactivity is not a concern, performing the Hybrid layout's interpolation strategy before running the 1996 algorithm results in a better layout in a shorter amount of time. It should be noted that, this method does not work consistently with smaller data set, making Link Force a better option. As for interpolation, simple brute-force method is the better choice in general. Pivot-based searching does not significantly decrease the computation time, even with a relatively large data set, and the result is less predictable. + +Looking back at the older Java implementation from 2002 running on Intel\textsuperscript{\textregistered} Pentium III\cite{Algo2002}, it used to be that a 3-dimensional data set with 30,000 data points requires over 10 minutes to run, using Chalmers' algorithm and approximately 3 minutes using the Hybrid algorithm with brute-force and pivot-based parent finding\cite{Algo2003}. Comparing to now where 30,000 data point of Poker Hands, even with parameters stored as text-keyed dictionary rather than index-based array, can be visualised by 1.5 minutes with Chalmers' and 14 seconds with the Hybrid algorithm, it is clear that performance of general consumer devices have improved greatly. Overall, these algorithms are all valuable tools. It depends on the developer to use the right tool for the application. %============================ @@ -636,20 +780,36 @@ Overall, these algorithms are all valuable tools. It depends on the developer to \label{ch:conc} \section{Summary} +In total, the following is the list of +\begin{itemize} + \item \textbf{D3 Link Force} + \item \textbf{d3-neighbour-sampling plug-in} + \item \textbf{Interpolation algorithms for hybrid layout} + \item \textbf{Hybrid simulation controller object for D3} + \item \textbf{Evaluate the impact of each interpolation parameter} (both independently and as a whole) + \item \textbf{Evaluate memory, time ,and final layout} +\end{itemize} \section{Learning Experience} +The project had many challenges that helped me learn of both software engineering and research practices. Working with older research papers, I have met with a lot of ambiguity in an otherwise thorough-looking description. In terms of Software Engineering, both D3 force and d3-neighbour-sampling do not have a documentation on interfaces between each component. A lot of time were spent figuring out how each object interacts with each other and what the flow of the system is. At the same time, the free and open-source license of D3 allowed me to easily access the source code to learn and customise components such as Link Force. This project also helped me expand my knowledge of client-side web application technologies and its fast development. + +As a result of evaluating this project, I believe that I have a better understanding of designing and conducting experiments on software performance. Furthermore, I also gained a valuable knowledge in JavaScript behavior on different browser and the limitation of each performance profiling tool. \section{Future Work} +There are several areas of the project that was not throughly explored or could be improved. This section show several directions that can enhance the application. \begin{itemize} - \item \textbf{Incorporating Chalmers' 1996 algorithm into D3 framework} + \item \textbf{Incorporating Chalmers' 1996 and Hybrid interpolation algorithms into D3 framework} Currently, all the implementations are published on a publicly-accessible self-hosted Git Server as a D3 plug-in. While the hybrid model seems to make more sense as a user application implementation, the improved Chalmers' algorithm and the interpolation functions could be integrated to the core functionality of the D3 library. \item \textbf{Data Exploration Test} The project focuses on overall layouts produced by each algorithm and a single Stress metric. One of the goal of MDS is to explore data, which is not been assessed. A good tool and layout should help users identify patterns and meanings behind small clusters with less effort. The project could be extended to include data investigation tools. \item \textbf{Data Sets} The evaluation focuses on only 1 data set. It is possible that the algorithms could behave differently on different dataset with different dimensionality, data types and distance functions. Hence, findings in chapter \ref{ch:eval} may not apply to all. - \item \textbf{Optimal parameters generalisation} - \item \textbf{GPU rendering} - \item \textbf{asm.js and wasm} Most implementation of JavaScript is relatively slow. asm.js gain extra performance by using only a restricted subset of JavaScript and is intended to be a compilation target from other languages such as C/C++ rather than a language to code in. Existing JavaScript engines can gain performance from asm.js' restrictions such as preallocated heap, reducing the load on the Garbage Collector while those that recognizes asm.js can also compile it to assembly ahead-of-time (AOT), eliminating the need to run code through interpreter entirely. At the moment, D3-force library is still using standard JavaScript so a significant chunk of the library have to be ported in order to be able to compare different algorithms fairly. - WebAssembly (wasm), on the other hand, is a binary format designed to run with JavaScript in the same sandbox and is even faster than JavaScript. Many major web browsers such as Firefox, Chromium, Safari, and Edge supports WebAssembly. Only recently released in March 2017, the support was not widespread and learning resources was hard to find. As a result, WebAssembly was not considered at the start of this project. %REF ME DADDY - \item \textbf{Locality-Sensitive Hashing} - \item \textbf{Multi-threading with HTML5 Web Workers} By nature, JavaScript is designed to be single-threaded. HTML5 allow new processes to be created and ran concurrently. These workers have isolated memory space and are not attached to the HTML document. The only way to communicate between each other is message passing. JSON objects passed are serialized by the sender and de-serialized on the other end, creating even more overhead. Due to the size of the object the program have to work with, it is estimated that the overhead will out weight the benefit and support was not implemented. %REF ME DADDY + \item \textbf{Optimal parameters generalisation} So far, only good combinations of parameters were determined for a specific data set. These values may not be universally optimal and can vary from data set to data set. Even the threshold value to stop Chalmers' algorithm also varies for different size of subset of the same Poker Hands data set. Future researches could be conducted to find the relation between these parameters to other information about the data set. + \item \textbf{GPU rendering} The use of GPU for general-purpose computing (GPGPU) is gaining popularity because GPU can perform simple calculations in parallel much faster than CPU. In 2017, Khronos group have introduced WebCL\cite{WebCL}, OpenCL for web browsers. However, it have never gained any popularity and was not adopted by any browser. + + Other efforts such as gpu.js\cite{gpujs} turns to using OpenGL Shading Language (GLSL) on WebGL instead. While the latest WebGL 2.0 does not support Compute Shader due to the limiting feature set of OpenGL ES 3.0\cite{WebGL2}, all of the mathematical operations used in those algorithms are supported. Following the approach, Chalmers' and the interpolation algorithms could be ported to GLSL in the future. + \item \textbf{asm.js and WebAssembly} Most implementation of JavaScript is relatively slow. asm.js gain extra performance by using only a restricted subset of JavaScript and is intended to be a compilation target from other languages such as C/C++ rather than a language to code in\cite{asmjs}. Existing JavaScript engines can gain performance from asm.js' restrictions such as preallocated heap, reducing the load on the Garbage Collector while those that recognizes asm.js can also compile it to assembly ahead-of-time (AOT), eliminating the need to run code through interpreter entirely. It is now supported by most modern browsers and have been proven to provide speed increase\cite{asmjsSpeed}. At the moment, D3-force library is still using standard JavaScript so a significant chunk of the library have to be ported in order to be able to compare different algorithms fairly. + + WebAssembly (wasm), on the other hand, is a binary format designed to run with JavaScript in the same sandbox and is even faster than JavaScript\cite{WebAssembly}. Only recently released in March 2017, the support was not widespread and learning resources was hard to find. As a result, WebAssembly was not considered at the start of this project. However, as the project comes to the end, WebAssembly have gained popularity overtime and is now supported on many major web browsers such as Firefox, Chromium, Safari, and Edge. + \item \textbf{More-efficient hashing algorithms for parent finding} Over the decade, the field of machine learning and data mining have gained a lot of interest. Many improvements were made to solving related problems, including high-dimensional near neighbour searching. Newer algorithms such as data-dependent Locality-Sensitive Hashing\cite{LSH}, could provide a better execution time or more accurate result. Future researches can be carried out to incorporate these newer algorithm into the interpolation process of the Hybrid layout and evaluate any difference they make. + \item \textbf{Multi-threading with HTML5 Web Workers} By nature, JavaScript is designed to be single-threaded. HTML5 allow new processes to be created and ran concurrently. These workers have isolated memory space and are not attached to the HTML document. The only way to communicate between each other is message passing. JSON objects passed are serialized by the sender and de-serialized on the other end, creating even more overhead. Due to the size of the object the program have to work with, it is estimated that the overhead will out weight the benefit and support was not implemented. \end{itemize} %%%%%%%%%%%%%%%% @@ -659,29 +819,26 @@ Overall, these algorithms are all valuable tools. It depends on the developer to %%%%%%%%%%%%%%%% \begin{appendices} -\chapter{Running the Programs} -An example of running from the command line is as follows: +\chapter{Running the evaluation application} +The web application can run locally by loading a single HTML file. It is located at \begin{verbatim} - > java MaxClique BBMC1 brock200_1.clq 14400 + d3-spring-model/examples/example-papaparsing.html \end{verbatim} -This will apply $BBMC$ with $style = 1$ to the first brock200 DIMACS instance allowing 14400 seconds of cpu time. +The data sets used can also be found at +\begin{verbatim} + d3-spring-model/examples/data +\end{verbatim} +Please note that a modern browser is required to run the application. Firefox 57 and Chrome 61 were tested, but some older versions might also works. + +The API references and instruction for building the plug-in is available in README.md file. Please note that the build scripts are written for Linux development environment and may have to be adapted for other operating system. A built JavaScript file for the plug-in is already included with the submission, hence re-building is unnecessary. -\chapter{Generating Random Graphs} -\label{sec:randomGraph} -We generate Erd\'{o}s-R\"{e}nyi random graphs $G(n,p)$ where $n$ is the number of vertices and -each edge is included in the graph with probability $p$ independent from every other edge. It produces -a random graph in DIMACS format with vertices numbered 1 to $n$ inclusive. It can be run from the command line as follows to produce -a clq file -\begin{verbatim} - > java RandomGraph 100 0.9 > 100-90-00.clq -\end{verbatim} \end{appendices} %%%%%%%%%%%%%%%%%%%% % BIBLIOGRAPHY % %%%%%%%%%%%%%%%%%%%% -\bibliographystyle{plain} +\bibliographystyle{plainnat} \bibliography{l4proj} \end{document}