From 53f28d47a13f71587e2638a12a92a3a613de0d25 Mon Sep 17 00:00:00 2001 From: ValueOn AG
=PP_{9Ji;-EU^}6yq4Ugp_5lHB$k&WaGk4sYiQOx^e?r2hh?-0c z9G0b)WBG2YFrBNqy9|yl-X8)rSu6qo%~8uv6M}$$wQA87Z>ynY989^U!IHhC_y(6n zCUqXay#Zy9m(Hp^n10+OmFv8BAB^PS*^xi^lm3>ZDw5fSozsNx z?b q^zF9NsABIdhsG}80> zcyi!2c0_;<6sB6;&nS8-VM<4n)vmNCtDj~F4jR1It6G~8#slxpL_!Wf$&qK^NMneZ z^^4Gz444p@l*h;y$lfay60SHhj4+?bBn=WraquZ-Yvs#c<)v1u1V(XaBi*f~Y%Mrh z-%fKZC2zgjJa#P1ib^I9I^ 2F;dY#qrcI)vkfO<9^-Dv~+ zI+oi31keT*ErtOC)+1M9lzUYoKm0rOX_$D)q8THwK%&mAyskqhLY6yO&UPtU$)xbt z$E+m (c_r5vJ%-mX5|cNR&Z8u8Ir)4WFvl+Wq9U(U(sQvkM7gShy9 zw;Mo^_C4eSYJ|W-T#a1I`Dz>XU-*^0B%awqARnUMOMMfMg_x&*_=)V) IlOx~+B^UmM4GfmZ{D;Tkl(w@AY^reo-ScMIt@pMJ^^ zGHqXKWGiAA&jBv*5d!R!SnqLu7cX5DNpxUT{Obh{BSt79+^Buo@-Xo;HVy{;roOcu z>-qSsAUk3 %+4xkySy zI4py+yUM+=L#uhR?qXpU#$dfrjBGHJsytmiMX0^Oqf=12WC=ToQGw{Q _(IPjg5PQzjN{cwj}T+?YPnim-gQUyLr+*6 ztz^d`()E~=hQPus*CY)#=y`Z7^r#5G9#iT+wi3b(7Yt&r3yh}CxM~dUhpKmq2~z1e zk9M=nZZa44NEf=`oxUC0`&*@rop9ZNxL(733e`s^Fi3HilA@rT{spUSd%>|Ah!Cee zds>!YqZKjAjjbE@39kU(8yy+*31ymM8KBvkN6VRMPKJPD$k@zu=LH>Ddv{ yk@fDKU;^n-RA ?@_xOYCPt)N+GC_ zo~v1hjcU?`)jey!J^hqg@ak*4rwYGz@w2hW%S2@;Eu*ER6o?ZJVSgrd>nd%rf2@4` z%UJ_#s|RRWH&<+)hzfZ2fL0hEKb2Xe-|X2JbCm&M3$Xmhy{7bFSq%6QsS5>9fOuu! z(V7Y`-#VJ9;mSyG>S 2^zWncJI_yx1?k92P_nmm?^ z?ZURz$abU8qVDXJ{$B-GorOUJSyK{VI1&Mu+^9eA2o|aAwTQT(7F+}S!vQeD9(#ad zB_U^2V*~QZO6JNbQ_1dwQ dc`Kc=;?9W z_MnY^G|~vuQtsRxSqna_^%G=!;#=VSz;QNsQ9h4~&kYqw5ooON92D9vuw5l+C7u6Q zeZ2Zk`LFl+`=N>>6OFF)B6siZx8#xU$5`)vnSa!iAJhX$hsR3{e*5DD=7Z~r2u&TG z9H1amF(k{7KNw=O5w|&e@)xhqI!UJ)tfEp$YrFrTV3?Vz$d;s|`Jr3mH)N62yM)-G zwY0-*%J}&TvDDm+h4Vx S2Js8OwGMnM|;)LH$_mBG@L}<{m<}-${_23i` zhpfG}-ry+IkAO>n0|WSabCDmUUPTn!&+iz161o@%FoA%NO=gZ>QN;H99xeB(fO8ZQ zAgjNZ2ysN!rb qBo*R ;ciltx3yqU2CQ}5d#IKjsBJq$Q=UHfT&U0xg|!Gnsj>bZDgil68lDU!Sok3 zhF)GdHSYW7M1N<(3SQJ^d2kaNF(-i35LDAFUFb%x^A*9`2`+};DjVgkwCyXB?`=N> zxkmIjeOn?Ij2W}<5cRMz6PAYxvSiz8RR?nO<+7xRzHkcAU@zsYNB2hvCTK%lAkS)o zgg7`X#!9xNqmXP;GfOM8*A8cg8LozZlxQ(;sDBbWIkOGtWWf>Z@ZmeRBX6ES_a_D> zxnu20bTZqf6&?w*&CzEHWkerCZVp~}4$S4NZthJ4aWlu0umX$@lJyQvI?Z3u74JRy zY$Cp_leT%59s>7H%mq-pUJxkDKGByvc{qz6ugET$Gp+VCja+G*LW(3v+X|_u1 ;dWoWmTH|8;i>h8oJJwg;; z|9mf5V$n=dWqCxp)=_KsT1XsXIuI6}N4w`+5tP8tL=zY9O_#-OCyAy*PJoD=RS+Dq zywu6kFQKaxB8*f1$_uc&k}b=HxWGWA6p1~LbCm}TR|{yWVwQ5Q(6t$*CL1V7J_A`m zp-DqqL1RX)G5ixB;>(-8%u~7vuQ1d)hA!{1C=(|sKHk9F7&%rhPyuZ)V~!7&{*s0& zxF{wf-Hf?`I%-cQNA%f@tZ7H&UL8&Bc?b6eTM|X!K{b@>b_#~Bu}_+Hu}m{apM=#a zBE8uw#ZJ_1Uh~O~{IiO_zsMtIDP~4(Isoe=Trbnv% {Snt9J9OoOl|q@~(&qHba(s~$1StM$|j6zHsKY{xI *j=IM~)3vxDIdMl%&T(NTI`#B&g>x|2O{US$f_)8doxa0Y93 z99mpXC2uFvTGOw^9K`Drda5+NQ`_%!!5|MTYg-PM80eV>@(L~C``(0h8g#G~7QQJb zKL|3?VR6b{zb2CQLA=mx>=r2 !|#=TRg{o~p5Z!-iM8a2xQ?H1WS6Na z+Vv^}81ONvDJk&R9K1M|JNyo_UzyR&!_aN1xQn&B%$Y##gDwy&XgYmOY~A5svsXNC z%aiqm=%-pvPG5Qt-LL*5hul3=eN6d(oohR;d%Gp|+iVrKiX* LA2$K(0(INkz9XhnK7l DU&^|(luGV z_d=eBTVR1^tfbEcw*27@<9iTU4FdAOzny{eO}fxeYPB%aL-pSiTqxvWD)3P|@+snI zSk$Fs?sA9%{`rQRY>sH@HG4krkCI|@3L4MQhZQroQM5Q1u?CHHEj7>uypba9Xs7ym zA>&7Zc>z9k&iQ%tumitqnf&&sTTp(^riYA#k%y!D(fmOiUl1#5;p|A(0 zQ0BLfv!gFKL172(!d?@#rsZ82 sysD$WX#w8;*&rdZ4Kp-|wGoe7WUD%7!Cp;G?MQJFXH|Cssr9dzhfiq5cJoV6 z2e{OWkzl|vXla*A8k4Y~g&{b1yda+v_m(pKeCI+5D}wV=IcL50^}a&+;XWvP;Y5iF ziH{!wRuy70Ra{TPW0CK>qyyv>O;FBl iggS@w=muvw^Bn_fOwchfi#M&=Ts!$!{MA?MmfTVrg5q| zG|*}Muj+n`6$tl4z^aYoTr{4dnw(4uJk}+=N}BgapxinyNt^y^5@(7K51edYL?JLw z={~?5@lKU(L2ZCHP~_Pjh nygL0-w4)61haB<|+a&%Dz< z!~LG>7LN3~_AcSmy6h$Qr!@RucG7XNf4E)4@o+eLLP;8Vl2n&j|JbULf#Pin777>f zw;)-mN$p|DU{0KlqcNmd `6#I%#Vz=opZ!Q(fqLWYaa >J77daA$sZXrvy>8-Hgg|$1Y z(R7oZ)?8-N<-0W|Nq7j44*2T`(VaQLS_eCY%Usdd4z`bxDU?~5SlNaPK>sY&V;iX^ z`eQ*OoomaVZu=H^@?jHKXw>~Aq{#-dsPE%bqf}r(05<(0$khuqr!eZ2%*1GWTpO?$ zO!m@f5n$9`LuCJ*huC`P%$%inLL3>dX=5A~qFC<`a|N8ERF?D<&IGAWHM<5ttrL?7 z{w{*9hJ?wK1+?~v=2g6zT*%OmZLwnW@S4jB2;cl^4}!xE(UofpzJ1swv~P8;rt1u5 zR#3O7rcJ@Jo^l_MnawKM3u2w cHH|844zuhu6{qQ|1A(NniiZ-?(95K9D~^CTL3*ZCc(=EV{c3buWyF59;ad* z{PI=_AVH<}>d3;@p=uTX*shPSh?yhW63hT?JbB+LGc`y^-{Xwr!)h@COY^Hu7PwcT zP03F;Y5`oy(y@Q#b3%%>CBheB0bNE 2+`2*sLPBtt#UXd$^)t z*L+jkln8Asa7_wUY}5{AfNbet09NHGF^vUhtJk3VcsFVDtIDtU85u7-$;z!VFcMw0 zdiPNtYQJ9|tg5cJe>cUOi`c~Y`{3k5^C9}PRt* IRrqr`~iGE~{D5bS-f6p2A zARI>*8Gv!5v$wxFK9s6BZph}lN;%S!RCqsLX~X7JeTa*2 ;sXmN*r~aK+2&gXf6Q_z8jgRTY$r|M>wZ^H8uy%_rmi(p_8t? za@5V#J?Sfkxsnu(9TqMrR0;hxCcNdPD*ka>qU-wNxOL-Sm-Ur}dyc~ul%K>}Lh HaSP^E2GZ*w+_24?Vxdmy`}@L1N>r ZyJNZ{wwIy^v&_hbA)ak^*JV(xH{ZIX1|XCl*@ zMjsxP6$c<6#+EgB1%!9zk=ha;kULy )pj$@zCv!w!^K zLZ@}8gHMM5QsyO_eF0CSQIA^Ki0RB6>zcbb#%Qqh?32{9N0_OiVl0#d*14Gxap$bI zAS^HR*MQNc4kL}GY0go?k(?T(h*|(eW8?jhPAqDLU?z+2v-{KTMwkUC@%A96igE+} ziUtq*3)W!e!K);2;%RQXlkp^C0%`>;Vddbdm&+w=ag#9(
?(FKoiuG}?suYcXE=Yllerg)vZ{oO~9bb7{J42si4@)icsL22G zq_e*`RsLw 3)^}HyqceMluo1hwLT~h{HVT#*H zXr1O$J9Jn+KBN5qc`aj}dkd0JA9E 0zX7$-ltP zP-7BNO&=7S2L z2Dytb2u r_@Swrnp; zPX{n8Bfdn!eXJjXB-2=dlNOk)*n{!0i7~_ J&0Wn7a=y>@cA}^{*YV|W zYaN+iH3!Q$3YIQTDYy;Rqi_R8ZEXD{HWOsUFvdXRD%f?Hz1Z-@O!n>C>t5TN8_o#a z`+3 28xJM3 zR@}^Z^FA@`njmb~6r1h6b5%CohI`C2=XtN%$eNPkX6ajy=vO(R*i$?Co4Q}ru)LjZ zfKrK2&k#K_0G+!lAoJ!}!Fp~L)dns*wq|Or`DCcaiB`II6u|pq2$2*8d}+{C^v-vc zpJHrQM1MtxwY&bB1ct0Eu=@Rc!RdPOOo$3OZGuZ$8Cf$#LnLEvRbnq)X7yYN3&+}_ z!C1~kXV$FeP%{b~@r~c {Zi~nFiz$Hy}zlwk|^%sH8Mu~G@ zzOa* zb3F=YYl_-5Yi$Q8O=9ME%<>Wem0#ARg6+5Oo5gBz<^c=%vKqH);`WZ_IpfWL9m;0) zkMpCjtpDG;uPo|I^kexW_MW$IC_Vl;_Z%wxRh8qzbg#-rFp^A5{v!oapGXRtbkhV7 zG{5xsBkT@3muMvm{w)ZsZWrq4BBxc=YE?!u)J_)R`hn4 oSILs0D)hMKkr|>C>tM)TAv#rY@8mZh^0|eY$NV}klvjO^0j?FB4msf0G z@t}va#Q;RHGy|z2Xm@^AKPAP9F*8fMr0prb0hX1^vUL5P_-jGos=q&}L|oM2`SsxA zGvsoKJPz5Iq@QzSg=;V0UoQukUfFZg?jy2h!qu*^W-@KG4z~5QWpRtBqc>ne%@Bzf z@@j_V%@wwCQ;ip@jqD_{FW&T)K89)k2W}bxS*op zW-XfTK=pKyTug5r_R;1uIg;` %qx&glWVf?CB-vpd#qI z-NYAkW(4QxsUC|)>ZF+VeO}E@DtOL&J;W-?%I7MYG#<4A<~D>nUl?N$F10-MC2Y>) zZlq`=U{9G#+5xf&sX5ME=pYT`hxw7<=?KYgHny6(v06AIXKr)C>Elj+e=I;jiLP Gt+_^j$oQ3Ud?fpNfU@J_M>l*s%+oDP|Y1p~q7Nrxv&I?kHKO`svQuFoW z_kg*!xsC(h(k+%|EDxWLYKq*kfOyTeNyyI9CgIL|cn%BD!Cl8Tf$qRpQcVMMv3apA z*7Tn_zs+RNa&}`oa|bHsb{o&UI`-Ztav2NSC;`N#k+I^;-)ISW@^i%Tjv-{OEt9g~ z!^H}nd6jRDV q$V5AM()GE`KqVa*W3W(vWy^O$FOP3@L#BIHs?{1MYz0_DBe<@p zYJCTg$c(^EMCIt;t`4)+{DDnMd6um@`2PFcKABpxKRYH=jL!Bbl7v$?&?`8M{5;Rh z+PLW6{RaOQ2g8ihhs})DdoHRPutqn=O5Efo;VdQW7x3PYvAtaSJ-?JCI7%(IYfM44 zIVgi@>1l6~wcvO$h$PDL5qP;{?Kq%@8+a=D3fER4dF|_+VpK8|Iuqqa)^$k^{^)FJ zdToUgLqP+LhWdJqlJ3jHqUBq|QiI(pHH trnl@B1%SiJZ8+iPiU6} z>LTUSAP6f4rmkMnj$gv&l6xy7R=yU@`) )qWp8Mdtdh+MrlyyC1ltHi5MZw4%e zkt|07B=L|pdvp-}ESzYWQV^kG+#AcyV_*zUg)_4`_KrgT7sfk(6cUj$Q$(-9&Lm zH|K?w>JXLcq?$TUUJ;-1(-RFXBaB?1_B|F|lT5=MnsPIf->1hKZ z##+tGGaWWPp~Pm+v?&hkNJ;S3)EKAjDw!+kH(+Y7mW2$irOQ&;7cRo7SKIl+3lB>y zmT(zrnb)%kPF9EaWyWjWGrF|9>AjS|3gRf>6^Tch^QAs@)p&Dd%Rr?l9xbpLb6fL` zrfFMsExOQ~B7ZAcoM!F1`@#M)R~vPD o63O QvrEVr;tD>6>V`iwMWp`Ya~X@3tXho0M9 zdL*ukHim$ix5kB&jnxLkWa7g9nfHOsquu3(1Rc(-fx24{P92l=BZeOpjL%be$6*Sz z>Jxr0%5w!Ej8&kcfysTHiXDnvVQUi4frGi3dqDK#&`nBq<%(Gxosn07{WJD ^Mxh;F$U$1mFoZQc&gWv=Y}27HvWA ztTr?yGEerelHE`W_KKu4O(ICE`{(SRk#})?f7Ie_LIWA3%M;;N zi3CP l@?9E zP%VKI@{BS7blfbT<3M%hNyI*92s{Iq{uT0f2+u(#9oTSY^gRk1$;`m*Hljsu?kb}4 z<|yy-ZCtNyubK7zn7NquAqtX)cyxXxvEq)+f*&=1lFOqyCCe(c>mk=MJk0^3%30+( zmN@L6PZAA14TnXj#(XdzoL(GVF^F7h#|?X;g?f7%l4K9Yu2NZr)(8S%Q-6;7Hayi{ zZ0nPX6#p}W?5i+r)E7 7TzhnWs2e6Q+KIvinzelUJzuvl r{DZr{S$m=Yj0^eY zO>T!7+?yD29yUbcW)|R{_}ZKJ#9Gd!hdT;+AB~fZHDht?X%sY1iY(-5Z~b^X+?~lg zLxeO9;SujO_Rem(Ai>>>NOcWy9^DO6cS=kY+a7ZV6s?0SN;UFaFEqpF@bD vif zTAr MM*=>oF@`P lBU?rRkEd(b`EsC8pDb~3DH!9rChSU#1FJkx9nZcs7*?U{@x0DXyb AY`y{J@#b@V zg;e56gxsSoLpM}llVeNI4F5D%xmA!1%hd_iCmbF-D9t1^G*C%GFt^a-3~;BvWYT$! zPsHGJoEJ~B@HLwG;MBXuYMT>I;QDtWPPc@A?q@Fw#l|B~Y0fU#(j FqNgRF|OqKukt$g7ky6?}l!96HlRW;W9@{gz||bWMU++ z@B*IjlM01=y+%W}g;@a9-)j0s#hZIw*~Ff34)qW>9vmL&u@*h%=>~KM)>}LqzNJa7 zfu_PL#wWwENUYshnNx!xVkiR#e0-an=%`VJlc;aK7JP~nz;6A0Qm*l%=h22@2d9G6 z?aT<$mNzJBkAT1<_6PHZ1SxD4RBPRG7UF->_H(+C`qQdm#a5(ULBu0@;3K5HcTK3U zO*T4dElAf=<|&EJd7jf#^m%FZ)gE+b`Ab=3MioDlei>KPENS3+_h;aWe4hoR>038- zc`qh}zLW2Xl6{da!tno?2;&jtVYgOjMwTbuyUhWlX|dMfNf0t=-dEp20!LaLaI{IO z0#@ `6-TF{IoUb(lAqcUVllx8twTOrpwpQbSUU>gw@GTk8<>$$P%G$)t!^@lfiCv$DY zN%G4kA8sJ$8!Vns^Y_afpmJAX*?I$5Z#4&w%=a-(+3Yi=l?9wK$E*606;FGf7RK55 zHe3O$?K_Q{A%8mb60)3%yPvFH!4tvDm}5>Cb`Y@bRm_TU5E#2zyiXPHks&5^_WT~E z#0#k6lMz75Tg|&Kx Y}K v$v3NF5{ShpoO4FInN(3 zn`xr!oU)&1_s6o@xbfXb#x{LDZA8*?{N1j4C2GF{W;iXxI7Ey5yYPaY@)N)?uI!1! zyaX$hZ<=}z15{z98yYQY(G2{*RdT~^mf;AdjT+4aEA83MRMI{KSfRmBs;D)Wmh=!^ z`BXhe!N6}=zu7{o?k8_RCY!$&sZl89*+auOcCg$}Y?47bf-EdisPTMi%Gu<_Oo4rN z_pu}^`$|Y83z&*H_E?Xbv>9M4bhZrhBN^h8D~QeH4FPBwm*ze?S8VaV+Ny=xk&F*a z;o$yHPzq4Q+8(U#ts>d&4m2uj21uuNmSBo&BXps^&O>Z?daUSxb;c~X45dXFver~H ziF&OF=zt9;C5T~HG1{Cwc8)A!fRz|+xtHWjDLxQsE;$=YZfM;Y1X&ut&=KV6E&PY7 zJ}OP8as$J(JMCMWLkLmL)IahjBnG}=co%rrhA?OYO^D<>$Pol3wrB?~GU(kHbTG@v zEiWuzs$ndpg3}V&@6NDGmkwtd0K4`TQNYy75pe+6lgXx!K--qbFZ&1fX=8y5i}$H- z_wsn^&p(ARaqYogP!`4Zo;hMBJO^gmLxBCl QS)nte8uvt$a5uIv4e-=PVB~(b_B61;d_?!LzUK(5vlU!;T4q(n{(QE`;Nn 1FaL_sP8n&tI>6N zgOl*2x^y@6pc)7zA9oXVJZ%VL6^uZmGsdUZ!q%B+1UqLG27=-lct!I;s(bu0;p24U zBASy}u0twLt+mDD0dbRJ8*L3WDU;|IhkHtn3L#7+czR2op-I!W5M0~@(Zxhax^}|` zVGCR%@d%Myz>Z*&s3MsjwdmRCQ7LAo>DLL{P4goku|5!HDt732%ru&Pt?FvfkQ`)p zM=!yqkk>%9wmZ!H`4)JF!CAjQ-7@~AakRj=Y5b^KJKXQDr&sY^T}fpExNVW)L0BF2 z3V#vQAP?j~8XN$K_1}_S0qg9=eig1y`Kz|(pXr$#92Mf%rSw(<6uOeNf@Ztz0PYEn z+f{7#qnq6taLTEn0#ZBR|L?p42N+~NW$H&UUD4jd4B;ZkzF`;znA(F#@fXuhw>&vx z)1>Zs(r$p|4Y$;RqJ$4BG}nUu5wW4r6^U7_ORV!kkNJzXvz9`+449;*Kw|*$Zm+Ac z2~5!AJGI_nLZ$>CDO(v5t?1L`FC(t+C-Jk$Qh#8ckrg)#O)h_q^yUW44mCt68w^`` z+_{#7swctIo3aPqWGBGkR5ONqG0J6zEqX0_1^~Il_;reyBDLg-psWfSh_!2AI0P48 zbHT2|Unmu^m1(&)`NSR#_qsW?kl1=1|F{}EYo2o4hDphm#o`L|-7wP?pJRiTeiAjM zW40q{#P-;fNRd^Muf4jhFTY>&do2NxS5LA5tgtZXp0mCHbikw$^Yg*PF$vC~TwiR< zZjoG$zZV+;@c?9(7(ZW_MLd{|Owa=sE4;g$mS>wgR{II0N;^4%RY8iN(OY> M(vZ`jZrH|}DAe!u@!J>UKK$8P*6>^{Z#uZzl#()nfk}_3D)Mjg z&LApRrf{j|IbhwLslF&y@X+9cBX1uZ#erRX1C@H0Hjm4Yxw~%*1Vr*-vwJr ;a zs*BQ>d-zRC$c1P-#q-tjZ9?~Fl0)1IHDj*spW|)&z}8g+@S?EJuOJ2e@!mLl5;GiB za^`|2SYS>ObhBXY4aMu;NHg_J#Q=|BlbREZ{h{%RXe*MPR&OC1P`jugAxHPGjh<6Y za?>kl$8<3aoq%6=k8?3%!985tBU&jmWQEe7YBLmlLq~4T4${L#VyFjmDcT!iLnCFx z`ji&sT|D^hQmMtJd|v-`Cwy^$HJ1PJIUynn#LCgAVC;Wo)hR$;au61`;sCkLHkQ4o z{2D4#6robU2+o8rTbwh+`D`*5odPHpL*e@RhF0w;jwP8LWl}MQBhscg&?8~1wg$ar z6#D=TwJ_XKUtx5GG{w3#Lx6r0o*c2&Dn|)mWq|9WMLvsyZHox?^cJm#Po{Ik<&Ed^ zeqlxa^zv=v3!A6W8(!{+d&4Y*%i5XSC6Q&h=0Ggj^z6mGet!b&EF`6t6X3i382)C1 z`!^xbR@Hu1X5(_u5dE-ijDfRKpwt$QL@MU)>}yU0j3b6Xh)L(@BUGB!HsSL+W~O^V z{mXRz*GXO~`d7>vKkqjXWFkoWAbJ4<%(buA7xiPa6kk;qQx5gG*ue{I7D;^`ZE{iL z|CqlY)YCYq)b%tv9AuicM^3R%Hd~8rU-V>ot20f8P=gtw|Cy;qJ_nb?5n&Gu!HdP~ zgwp %n K*Chj=t+sb__ENELhC=cnrYG`@Kuuo zVPM$~=224{Cw;!OWO`=vRJmk7oe-0Hi#GCtl}UIi*@5Pl7+~q5M#24-jUDT|_pL?2 z#eiEj2OWjtk3TIg2ZIxQR (VVR#=`nTL zsw{A3ActPnd%jn_kdZ<50=cecH|epVxrty9_IO;7aag9#{Iwm}1)MftPv$0* zbk~gDj-Tv3aCXsSe~U5fgQV0BTr$+eP&$^M`Dv}sfrcY#nD&t 6iUOuTm9dB1G3-j3X2Z3rrf}v`GJ| YU1?*()x*+JE1F zx)Y$w+3xy$7Nbv(5vmPZ#*G?WSh(F@ebgQ?pE@SpNdxoMPHa2jt=1AJ)PfuNhPVig z@i+ wE G4&WLBx7QkMB zQvn=A&CSR{_nV&%!5$@c3w!vXqgT29^$nUA47ZLbE6+ebRKvTGO9#st`+OXEEQA8* zr`GCV1cyfAz-?1ulHEMK#Iq--y7nq6*tA}HmqjsJ+eH6@#qNh!fiuLSGQdywRHf3w z`3`+|%UGL{qVay&+wozr)lCAtvmf>o{%!J@!7y0vQ7VZvz)q3{(&^-dBArR?MbOr3 z9^P+^rOVjCB?c*gU6Oh5pySM6KZpwII)7^5k{|O5K{+yQ!1&r%{l9SBlc~G^G~KxG zSoiEZPNi9)TpXn1hq0aLLbXr|TQ82$gtlWiIVo*7yS)46;gItw34(M2YooBKHyW^z zb|WeYbrrivxJ`dKB`^wR2%M#>kG*89$sFCJb7%^w7Z!~Y+>CQ$rqD>tB$)GzoUP&G z-bnnalxPxH;{wGjVqkLrE!vBU&`XgxnQ`U`o8;;Cip$!JBTE8*b D?x-dU#dm9DeYMAjN5oRG?9^ife2^|3`GN{P;n< zC^&cz))aMHo)BCVSJI>QmX1jJ^^^yFH+o(CVB5e3rZT~kcTq<#rhyFSl5}sUyK|Uc zKhU=?GA|A}4Vw+4-st&D#RKX`Y>jb{!k7|A#yIFg65bay^df~0J@*fhJd2ybhxRSlC)#sew_;*ND4<2 zLXK4+fyLB7%FRYKF!$IZs=ic#q8i}|W& S-Ff|8ipddvwrdJlw zC+OfC{$=8M=LtX82EA1hG2I9A>qY_r3%y6U&CT8afPsO_U`)Kp1Js0)hFmSU>H{iG zO77HHy1L%-+!?}vjlbCE){+Bpm*T2ctkJzNUdB8JJLF0-SJtb>TgfJf@H~|xN!eau zt|uWa-p4GvaYeq8bjzTI{NtiJx?XtpY_iK`&FtZ)9ni?3(j SNWSVO<2Y)% z>?c#qVxDp_N#(s 5}jI45t<;4NTH$|9Q6%DmutSNwq9N$q@ zo>>3@(>%d JHR7>{rcup?PO(=sx=KRV*JRG{1pT zoJ4*b{e*U($iEp~h4!tC@s&jG%&A^0#z&Gz0>}_UMPYup^*8Ah-9b4WbAeqLX1 zJ-FgsnSAqV4VLmW)ReD~;Gd=DP$BWNg0QUO22Lude)AhXqr;S!U)TUZz=>!#JejT) zD76GXWN#O^Uk1%@jsZ#NtU2UBhx&b(((d6!7@UcdZuba+f+AP4kPiRZ&{s3oSWAUW z=4vC4yX5jlw*}F6y8`~pxKt8Z9yNf%!0Ey>jYj}0bpi4*_Mh3OvS7yrp;vKU+Oz-> zGDyA=_jBJsZ!|h*@X}}z# 4O9Z0=+j9Kp#PEvxpB1L$=n-iF0>zr`Gbj84> d zcSGSLCUZi&b ~LZ)7ZBp5u(>ZWl+|2t`!SKG8kQAC=Y!?_>1jJ@MXO~c{Hxv z{Gc}@v35N-R8K{|kj1VHJFD#&;7?{bvpa^L#Mc+-A;!gBh+f_n{nKg;0~p~_hO1=1 z5MM~ri3?{8G)fYlEzzCCo`RS%z`jcz@hXyCYiPW
qU1Ft6jopis{?v^(QRkF&qwuMQF?-up`f%}tC zDg3E_mFYomK`HRaj2s}*_eyW4Ps~KN-SCF*uJ~wy)jb+_UFon2K~E4+bE-B}ZmbSM zHWvG=kri+lI@nJwcruX8GkniQeO{G((%+v(tW=#Ab9qP;%w#EO>$Nof5YGEd*$|2- z#h5K=cRESo^3T~t;x~PR?xzeN|EG${7cz;av-fQS4L@RYx(ZPtj!sX1_dky1XzmG} zNzh1`&1+tM5Y-OJjI;=MAOT-UyDH-Z%H>?>Dc0_ ; zK;RDS8%eOp>wy!YrQ>6!Uj(Ndk6GKyZa6oy^0Mrbr`B;evmmA(tGZxd08;%1FIyy; zzj0B)U aS?}&F%v~ zFyz4@Krl9je$h7zDV|`~i(DJTCXW0va)^qoEGsq(Vb%CB4y={p&Wo7CQ04|Tqq5s> zV({p%b%=iHl)P!|Lg9B$6Ejgcx&GlQIVi0V7Q^nD(p?tw2Y6?wjle4Y{&IEt8`H%a zM|&tS1emwWRz*z6pM>YVofFtx`eFg0_0#*%z0*fQqid}|GiKiOT@MBL;9dh9aey|J zZhJ%c@G$)VeNFs%yVzHF_?`^otxUKx%I-_1f=rf1*brI2p{HZ=kG4b!)khCEAy#f4 z4V~?PUKJikf8V^K2QB2RE})TlIQ#6m3KO1P2HhDd(pRGVoFgp*;J{TP)I#6#2z+%B zY}0uHZGEcrl0b-)6ionBcEFpaE)XT(>{UX&`y4~1VF4JI>en;HECV9cDyOgG zA8A=>EG2XI4)lg9$Bc?#4VQ@Op$40(FzwC{EZ~-0AZ*oe#qko4$m@mh-UXsMO(0tk z3Ft&6b=emG$)_54LpO0^U1$>-XIc{Uo;`kRps@gdv6OR@2ggkRM~Anxf54CTE(+5f z#(gZ{tlkOCt~8nfqbG6=U}Y%o6Q^uzC?UBBiSyv1?M6JXee=UMv)377uGOW>p!h>u z{ZkW&E*Z0H 1Ewf+GS=bAgvFqhM-^h}C^nlG7G;kz#PyH!Ik_V}4E#|6!0D*r9%c?m@kQD= zP94!AiUw|V$RbFz?cS(BG9n-NnO=)kO8lYr#Ned02y9L)4&|Ivy;-*+z;dh=6ucaG zoUZ40NFrVBxwXwhI<(+}5;-U-f~_x5d7o*$L4oz^sMWg5W2V)hAk{$KFmiYlXDgW6 zKvIR`IsL;oLL}$`kzZd97}2L>Z|CHL;RJSt|3^7>9%!-Tt*2%Av$8kCPk*oETOX=y zsmKyNR24jUV*h#K;l^{a$XBv7hN?Sx@8#NrHn!ACBYocvzfm&@71f$7yk91SMZ@f) z_3ghXw#}~+OAJfh`9RisWSzOVkJdK8L+9~iK;FF;gLPn_>*r9{sM+jrh5$cOu)k=W zD3E3D%rVTRg2SD@m@{F?)+jG(L%ukX6v8p!f%HLIfra!Mpac9`&4LbvGX2YFlK;n7 zaSSEUOO=2Dc^4&xlw~DJoka|*fwSK~PXNSDHs@Sx&d`ocz#%3GYiWMqlX2+}^u#2g zAEZ)V&AJRXivk6Nlj=*Yw!-Dbg-t!+UO1zhUrh&fbN3lwD7V$PN+$)KYe6_c^knW^ z_+lxLjat@~61+% pY+blqs-Q?k4xT5bsgh2oR literal 22590 zcmV(oK=Ho=*`k_f`%AR}00RI55CAd3^5(yBLr}h01tDtuTK@wC0096100bZaS(2hf z#fX9_5i~$s5u76rNhlR=Bi*&0 C9!Fa>XCj6Al5 zx^Go0Fb+2qyA3b~2mrt*2><{9000LN03tPg9Ag|upYh=@Q}GBN^9UdSb2ggNs^q>8 zIqde`C~U;Ye``ro&>G3xy_g+FC)EcB2_OLA6||OLmm8a+qm0c`eA8Hj+5sB2ghaVb zQRZ^c`upYz1ONg60000401XNa3K(Fp6Fh(8cr_J!9j%a9pazens5sJW2-`ajj9m|3 zb27T?Pq{R Sc7IeNw>7N)KPz{qqj9S84mS3@tzL)X$ zvEN0cI$85cjBGxe36yj5VC8a~AJTI1XU1M4)Wb{YUj@!XG@z3oq@FDI@T?-HGAeXP z78bL<)W#G&&NoTnZEgp(_WuzdfcKXk)NGW$*ECPIV8zO-cJ7Fyo&9I4lqwYqwr!c; z <9m-20-WnH0IeN2mVPE7d~aF(|9o2w-C0-|6awNYkgQ$z%L)vg@$N({-^|HK2^ z$6zT0Gq=!bKHk~UQ!n{{e)6$%t}pLfwp{?sZ%ri_W5mMS?S8eqTZaFY0*Z%*QqnNi zzU7XU8q*|J4gR8f?o7r={4Z46N^jyS!^&53)wHI)%2n0~7Hmm*ggtx3&6ZzX9USB! zhjSuRzbthF!qKz0to!7IKg;fM;o3i@2E-cM-}`T5VQA!9@Ye8#ApoHQ6a&>V&dZ{o zYd%#{CMJ=I&bYPOday0i;u|Kk6&cj)8`)R`*HHdhv$ooJ)Z=ki;i>6 G%_rN@Z>n@NT%o9>cVUBEA!wu4)N^m2^E3-_@&ulTNQk_>s}SM+wjl=$3UqYt z85#lDVflK*qDi7Xl#nDulcYgQKZ34y50Jwlz}{NgC0u+TR&-R^I%h j_ zXK}QIL3r$7L!l+ympptpy2LPA#81KXla>GRP2J0Mn@tGlS|_Kw>>gqlkCqJj3IzCJ zSP9EE4(juq%>Ly6oYm(d0ma7HUvUux3(&a~g^1s@NlMS-NifI|aiKc@*=?RmqMm(x znBZ}XZ=?ow3_6f|BC&hJJdz?yB|R_tZiJbOtS;Q!uE&%vi-6mx3j#qiDF!@~mw=nE zlySD8oZ5<@SLm{R91)=aCzzzg*GJ-$re+P5Ystq96INP<0zP23v*W z!tgfDAZR6um{x6a1KPtv+~yNJVmUSAouETz%szbguH3Y;y8GequrYF)^OGcJlH #av4FusW@Kn zbE!tmx0b5>0f4)y{_5wwf&O|gzD9Y}1B-vD$x9nV1q_|r9{K?9b=4)m@AyYal)Ysy zq0UC7EH1lnu_)2Hx&q+9d(4RJ0s{Tz|K&Z(#8bd{FbRp}$%nO_Ek(T-KIuq%)Qcnx zIP4`ZksIKIf?JQ}LfPn_yU8@<6n;Q|$IGUsU3x$E#%o2={8$P8vN302NCSw#g 3D{6BIRiCM~K(-$GhdQ7!z4j@jPKR$4iQpXtropVhJOkl+Aoq$Oz~M zP4BoO`6OFw7JK3Hc!ysfw@R$FZl)pi!wjqNW|%Y1u*mzx3tKX%dL~UI#)FlVgsi z$N)Um |f%c-p@cSw)$0ef0r!WFz`VQTqLd zo4g7Bp}TM31yKt~&U%$gU+ h14ZX)jm0w`q_dqEvkuk&a{#>DZL zUs?JfmGQiWV~C>G@JgoqpWeNrP$`w)1OOE2?JN%3CP@|P5ad$9%<#A*((LhPfXQ+? z=o|xwomL< V$|7(K4^eZ=%Or64>cM?~bm*5ZkaSHZ6+v9r7@HKEHG(`ozfjCxMC2 zLNbWk-kAR79j*23omvq4GuL<8?xZ3s 1^3a?_v+Qq2HA$?z=i=^c4Q!uoDc1Qk^!L>T}ug;T0PlF?q#%lI|r zP&1kJUYYJM&jZxdWaHCgyGk|;Ok{F_jhiqXRWcbblUz0IM;3Fgy9bc{l3sL*y0*Gp z?+yu7+2jh36NriBXUXulXWfM6TCbK`LW=DNjC@@Di#jpS?fK?WiDg^H@psX&rh4A) zseH%iF|ae%#5``?$bT27{w^W0E#}^PnB 3$-&iwx
eWO1p0CuI!+@PYTQ$8dJ5aef0UYg zKy|U7l>8Z2#!NEJiPbO WGv@v~ z2A`hG=M$zIRnd*)*L2MENpPeC)JN6l<>;L+D@h2{4?~yk-lJCup8@>bqT@+Oa2hBV zvf!2y|6Ng$dKGt%Ys8fxl^;yzQvzVwHr}kbig7^_lv`^;@{;2Tl9R85a3R617O^6m zTq> @ARyN3 ij1kSf2c*T(24ur~7%w3rM^x?JQK-mcTJ0gIT7^C^y Edx7I>RcF6>s4N381lnw zf}!|_6~{f*fzQxv=hsdan<<$n1T&Dg<(f^ffbG2RoeF=vR}N@i)th{0`HC_sH1uiR zyBRP;Zmut6UA<8kEmusyat}!L$|f`RY73?YpLctSN3IQEM-Z>PF{@6zUh%B^&o3al z0+BPJDP1c_KRp^QuCqG2qZJRM&qm@ySw`5A!wFFrVFwB?K9TmLw8>QnDJ{Ld18(Ad z7ip?xSdL{~e_;EQGi_I{;Q!~jr)Hfh!Be0Y`3f}`jq>@acPc7Wi?07w>=Cuqn5MW> zVD~Kdkx}Z&7a`TFf|zq?yej5+uVYb2!l$N{8AK_2%6RyW29hGm7l{I~{O-U3&QE_6 z3Au?ia=60nTl}H@R=|O Dn<28pmm2@#}=bHsc=;>uOS4zw+Ug9nIEnc5$hBV*cD;;7r(c20Q_& @8QEN1)k9jXW7vBlv)zvZ+ax@gs+Obb&S6l+lB5?I# z^kxWoY&u`q9g>eU>>*TpBQ)lb;~EM6bP_g+@(v`Ti>1z>P3C8&!dDAylTI-Et?~t4 z8XwLAs`)>o*4xnPS=uDk=Z&B6uCbk1Yq6{!ouI7>5rY{avy4m=VsCGXN>h}8+ nlc|{iK_%6YRY<#c@t@MJGpV5Z zIb_nrRQ4M~^*3t?YrNeZ)1YA1nsUXz*~7kQN1K9dMEUF?o~p^j!krM)Ig$H3Gq>Zc zLE3~MSgYRKFe)yDbNf2*bJAW3q(YS{=F%4Kq}_?}DWLwiYsGp_h*H;NPljii^jeXQ zriLLkEJSyWuMfw+bFT7o)6um @C_8RzD47=TNvhwL z6AAi?M=~8rPsRbMNNJ2-B_*ME|J(J~nwR7Fr8M~sJH+cC$w~(&Rb-R1Ytb1>WH4SY z+ee|6HM@{7caE0uFLssXYYKk6BD~2V^X1Hxu|}0_IF?|dQ&|$h4g$)qIYIPd>yeGa zq;zBVvE0(<6f9#swjNm;PyLP0uU&pN`uSc{g#CS~MPLs>Jt+exu-w*bwc$tMZOKiS zL39+Y_mcwW>#EKZfSO6DcYP%zf)Q!pi!gCeG)BkgCak|;hWT=kK-=9#k?CFe53Pn& zZM$&k?8j4uw!QPaO{g?JhY6sJGaMII;Vvc);)6I)0XA6mI?Rj`XM7YJedWmIW{kbr zB&n?De&r%W(~W{`2T$5nhQLC^i1+*jsKxkVa-71=4zsEQ>%2b0Lnbwje-4i?A6+7P zi?P{J_2m;S-}ZiiXNV$^m*+;}g(h!-gE2c4gWhxic0HmV!1*5@J(2?qoLRh$C2Izf zGrth8!XuO?rz>e-r*9wL9JCx?H)p5)4J4Fv5Pbrxpkm|5zQcOQl|Rd(dOW(3x^S0H zp{@x>;j?T~f7wN>*Jmx(Ynw%>1?H`_Ar@cUUq?sY<)|W}i*J$Ax64};`U;7e!Z@ Rix8-`W<4=wfVS*z0M;F PVz!~~6d`1cAC?2zV@*L2Ei0A8RfoiS?3 z9){ChPaAc sQy26WO;zau)6ATUbu6>nBK zO&eOmy@tYMQ*)pcRXPhwg3kZ~V0`>?iW}sdPs?skbfrSWdNkeQewi|x{J%?9*2@*! z|MupAZ?llPC1`OzM$?ED;mx(#h`(pt-7@V0yS3d!O lb3Aj<8%T&+b_0xpsgDuPlUjU~2h-cvkNYyCQ(>XhJwe+pp%(d((_ zff9*9gOr$)RqUO!h1qK8EALbuLYb{lSXJ0W_m`5F9CGtEE-pM}g5W>Ft$0?P+BmfjZgQ6ZZQP6^44hE)KLfs0fJwYKf@?2< zCbGq4cUPVO9;wzgu5XC3#NfpaLfJ-|NKZa?FP1|=yCyW?l`MSm&vvucwkBg8(d9mN zW3QzSu81h*0>+D=GuVZF+x%to;(yHK;#|`5TR6$@SP4p}3k}PosVxRt1lHvz9p`B1 z$I@t9R!iRuq=~zh&C$6lRaNDHY&wEC`j^*Fmwr8K@bjZ=F4r-syoO*ww3nRDx;;Zb z7lMscyTRP=hjehRqkBl?WNV+3=a|+*ayL?P3bAX&OsT;(d6^8|(%-r+#I3NrV(LRB zNgnlsI@vDUnHNIgM)PT#s)6xcYjo(>LSe{p_}#sF#oe7zz95?Q=|o~D3?Z|t%6;~Y z&pk>SN%Z#nei<#k7QXkK(OISQGq1$3otu8VJsUcEc(*kfG-2ng>-Q6H1JT4=;|w=X z#kPHH!Nlk7p6YGi@yo*ZMmH@<`NxFSp8Ymt*6(%O?|s|-Tq+;orH!K`p#lBe5mIon zzvZR&@VzXX%5;>W_OP;AvPF~AE1n66hS^~!wE&wNMe;YyStvBAB`a$eLpJLSNhUOV zP*eTd3O{)CJ>Lvs((Ct3Ok*e!Kt9bU(Yc3DT^K^fPEYNT<1mKa0-{-5U%a=jKh5Q} z=B6z}KJ#$|eq(j316L=L2u8v-rf?m$5nYgd#BbX(F54#-VptvDYxZGd6bC_4^Lu3p zPCXe~E3b|&MHxvP$DNyrw{JFtMD1bl!_XKqR%1|5DK`i@*+SFri0ZG5J^Jr`VcQ`0 zN~}e`qCx>~ @_l+a6Z%^U{ D8s;QIYp0Sb9=|Hj~|8fIxDC+au79DmG(ci&_GO6aL4!dxZ zt<12;pkXqeuOoSpG8c7MuB0k2EMM$G-|Hp>jQ*=W-bnFAC~QEKo!^^c35!q+!^jLP zz=)7jt!kc+_+~Y3_wFtJ-?;>R$DJ6qde~oR*R)ijc#9A;#G&mH!EIoXes f=}I~TcUN;5Ab?FB$kds#zq zk%nO4nRBwbjx;L%O~-pWym~y!d|^C@gQXRx*A{m2N)&o`9el9DD^oPH!GKuko0Ynk zvYP=`eh3!;m<$~#T_dk*&BB9tUTwV4mc_P54fieYD89@?8>_1uM|Iy!#O@K5`y`+o z;K4Fk8-wlh|Md04iKCm5Dw06rci+gR1F&waIbgoK+jE}vVZ3a{dH*bSG+nJ!-!@R+ zJHu|5cfh+4IgT%ON*>Fx8bX-7P2^R)i<*l4?l|c NFZD)ow#b>u5la{8{(Woi=> zME${N!SBr&!>wD5dMK{0Iah@c@Do01CQ4`}9??noeq;fUe;pcD*sdL+=g%IYe$4T} zV67xI&6dq zJI4^iE~7g~Jjc*jc*AjssjkD+tM_l3iy0smFNH9l`?RjSmge5bkp8Pf{2(mrQYanc z*m}{pJ;c9tCM5n8ko*gw#~lh;xta3zY2D-oh;kMb19oJ^V$2~uP5Vxbob_`IDJ_p| zrKMKc|MDY&HKRIJ4@i2;(9a0}CTkJUZ)+1y^FCppXVAIsSou2|ySzV<7A<@ufNQF7 zfhw}lt3Gcnq{sWuF3=s~t%GF(^J*omr?MSMaRQdX3ku2RIoi||7+1s!1XMywC-#M8 z6pOWDB6ONOCR5C?k;J94q{Ed6*c?bWWuX=^HfJ}3ta%Nxd)ogE;1vtUGWw%iw?gQl zV2B|5?W2z3v NcIiQNPsv@YoGS$b0K7suZ*Pcxi|-7Q<(F=YA8EfI!EBuH4qs zZ5ksMXUyeb(T|gUUg+Q0aC 1@IDro#;$VWG8>m^U30z)n^Fe%SYe!AyWA`{Qho zwx_!0Cql-AL?P2-OR>lbzsqnm`C=n>&2_!(tkV);-}%AvP|K8g2oQr7uIbhafPD9Q zgn6}}H9)LQACr-66sbXWk}r)6L`pggm@XD jm6bPl=|K{{YhLIR))@kEKME+?jLrD`KE#mG=;$W8{u>0s$Lm)Y;#B$v zUZQ|5_;^!8f%Le>qqFmU?(^yB`hgiP#X=0w46SMBF0%wRCm2zR!a_Wz!54DKBQJV> zD81}%1M^+SVt^C+=* m2b{Wq1ReSuE!*=(ivW z=Hj>+71D^pAyWJb0v?AuqgNtPrhLP<1{=0U`i}qY;CAk+leulyM}cDiVtWZyyt@5P z0FRKur^fRV<_;i8f{TnElA+fAQ8Qk<`Q4#1_u9GyKb3HZt!M7jJHu*9Dh7TsV#n(S z( F?OZ z_2kmZ!5xba=65TjyrWy>5wTC{Fm0u+xzPd?(Y~$pmz8Mc33_aAA}vxLw;{Q% ovXQ%gJsWSJ=me^FOay-bMk1S&zVc`kl_Bwz_AiAf9ZF!5z5lvRUDFfL1XfF&7 z@f>Kei_xtoY(giOdUgY~=`}fAk^Gc~)1k-zhLeo4VvB4AJ`P*&CupVn$5rWC6-Y^z zGW?VPMk~X#e`0GwH*PXvd^k&5zDq4f|L=`i&$tB(Doyv+^3SOEV*@}9yBEize()J* zT&doy>64d|1f9gx=5?{!jD328ZWrkyr3jAQR)(K8 yk=MF~Qaq`%-Ou(H~YV;?W>9u{2(FS`^d_wRdPL@-pg}ftM5oGo}ob zz|+r}TDAe-E)ahs6w}N&G%#afEf(QwX^cjK<~PqmQ7ik*V{OEz%CiQ@vAQ$;N$Lf> z885B@3T^w@k`z|Vq0fCdja8J%v*?F3ttyQ8JyBw4x@Phfx7Hn*L3@D;^sJBBwd3={ zi&`0z9t`&D&tj#%AW#o_tGx$Q$3ltMn_dot2W0KoEk%xnN3;FBa!wKQ#dq?mJ V(l%nm=gf`G02g;1mOk zgh) h*{A+^p2tW(X-@cZrYJ z?Y=J{Y@csUc(^l3tEZk}M(7aL*>}4&*1NK)V>Q*-eLa?{f|#lvHJ5_+zK5z$AO$t% z0>8H_P{6);Y#@f}f%kjpR; HEj{h`0BIJo(iP-43DS-3uPx;)Qyv_mc`Yy(0IMe7mil0|*Jf)%h`1U$MkeGvwU z=jAN$#QsD+hWh?u3{8M27!pHtq*gu3Q+eaK@aXdvc~jbAEfJIs8@gH5MvxT#OwIt& z%E9>v=<|i1mS{nHT}&Jv1LAgq3?Ys#l4h >L;@H<=Wa7?L z-1KfX^($d`2@{t) aw#uWmSjE{Ne+CpI;fIUmHt>{~<5F z6Z3;YoJWJouR7% j1J7qh-mG^0xOl_LbMcHY10 z2Yn3d4VbVka?!R7er?1h2!ceXnh)B=hd7nJ>KrX#IH-yZIJJv(Y7E!y@+Y2k|KkI& zO1e7J#E90-7&dU8Y7XvZ*m<5jDs2L9PCNE!oC1b*YhYvUeEn1AIwsx@{d!r Z%^C&aMMp71EUn>x=T@euYH+C!siIWxbQV;X@2*+)r z!dq?@AS -ZD8 z7%oXdnK?5?3C_kOK#jGFE7-~df3W!h{fX5>=~*(ZLrhl1{eoM%;;J^Uza^{XYU>X0 z&paK@4wc=Nmnwd12lVw>Gs)N!*HZruL|&G}G^GUTKv?5l6O)7Xg>IHzz!QjrST#r$ zJ)}6;dE*brZrJ+oF>q~0%aL1*5ueUj!DfE;671CUZlRlyqBl!5>^vHhnjqfTJ2>`H z_2IyBCf%4ZMWQMJiB>ZMf4Yvf0s~uPMCtPTdAU$bB}XYH;nZO^JVW~i)SZ%QWh+&9 zpW>I^CtK93X!K^{s0UZ0pz0gC4qy%U;9rzgW-c1o?FfBSjXTL33HsyD(^=Dloc-jj z%+qHhDWbEY|F$o8E;$3mo^-SbBD3%B%&yz1?=27@qsWJhl;?Ba|EtX~r*OA0{V`)QMxc%{V{+MKSZwnrl=~70 z#zsR7&QD$nc!K8Gxca@2 g}VwS2uvvjN0QwEjrSPL=Skv+-#731pkOD|Eu-Ufvq zEL?(2O2Q^|V__{k5^m`OrorJ1ePr$xgY3Wt(-e&0^kJx`(F>n|J+=OC;c_T}Tfj^^ z2qBiOV4hzXB Uy4=Lc+XGJ}mudR0{%@Ksg6Gu$Y54~*FA)CeWHcS*~`b+Qr& z4T19Sy_8$P*}q @6{%aBM8W?0f6R`i <^yaXo4rx}fE63EcV@JT8+`^7Z7Y=Y$t3O+B;C@az4$5<|7~Qz|N4lET^$8i*-T zi|TMg?#L|+$;j*Nb>cyu)s%v~MW%Bh-Cd7!sd*8p5F!e$V#o3H3FbmO`(b7>T~sD= zH&!h9_Oo;NX>*+=z!E{`(hibro<-F4 jvq2d${9&u-TvSG zNGHx6Z2d3=>aFcx*#Wy-VR2d#IK-#vOosZWVtoTPZh z{26O^NE*oD+donCk$ M?{g6l%rluPnLtmPI&7pi3y2G5GI^lG{f)5sq@Ioh2xt?%~We$)}`9qnj Jlzt=tx#>niUJXl=c2*j+uD+N<+jb&TBC=Eq1+yg-VMhv(D%i}DD;c;F7 zL>sgv)uvgQs0F(xd{(VO-ROUIIZ@OT=UWACpkiK4H>M$XJC?=n+;BT<{Eu(#9E+ci z5vm7+H4S)H V1qsT|^FP5}(O@cDqrJy5?;W<=OqRs!|Ogxcc z!nGnZT_}Jd$^?W5uSno%s#YSJOi`G4ol;vi*RsSQORRFu65!hQkng%aWo;+>GXYeY z)*WwmmWD?2uf&f!(g%Z>RSjC6>|}KiBbt}?ZWwdMj!G<4LNI|Q`~g+)Q6q<;1w7x* zHcrp2)LcUUCio6}@`%8{XQ%BuaEw4>7QXEG9M?haYZd}{edh2KV^WRMIFXVBOPX=R zw^daD0}meqF5mQ?vNRB&xGFZ9VGS@RTLTuYcq(rhI7Bhf>wIWmR`InTzC^<0SsXhU zqxxOf^_5TVdDO0a=)wCopZU=pv u6EG5L& a!i-BTG>LrE)~D(;~QH44`@o zmaY90Qty!{(~{EFT9Ok$o5MPnWth*A;Sb@2>R!atthw(kLok(6v~@xFH4W__r;psF z-nSGl;U(Slxw~0$!RkF;<<{k7YYVL32p1qd6B(7DDBA|&dKue`#~K%N*fLKt^W9aJ z$mr(4K0!lrwl}%w#riX9Eo-DViYFuZYz0B`xPp}w?4?O{B=A_1mz$UPqh H=J7~RJe^)1@t`t8eu96xFld4Q)Q#dVGt zK?I2Q73z^HmbLhRQ9%8Uc(k>Zd&4f%U(~NcC~5E(Wp1p3iYADf?^DWu u%wx6$&N_=`}Vtz@uTgK(2`#-UEtt0{o)tF^){R0q)WDTe>{ DC6*(lMME$Z=IG-tSJ21;(jonNk*Of(J4rPBn$TXUqFGNtO1b$WnO }|>ti1xcj_0hlgLpif-2gn90vwndw1558 z;X6>l8|vIoGfB51kB}@q(@O3Z(zl`u#I|m -meRQCu!_%sR;36;YN6 zXD}76iqsq0!AJFE6;u Z8B1CZTE_p OErmEh&KVFG8(!W_l`BhpJrl0$WWx)Xkb$pk7xp z5R@LX2AWj!{_S)xHfb5;fn8zM<3Ho`V(hRF<^v@7$?1GkS-yAcbVd(N(g3s!2wTnv zLE`(fuw^_|E)V}J#z=ptIR(`CE>2|v*?0kq$)36u`Ha=zUui+DxJR4s>XnK$Lr{z4 z2c;S~XaA5AJ4Na@vqScQ$uy165cyH4K~XLzK5bq)$_PZg?UTH>md%}2UJ@V!I4V z)AN~&13*P53k|D6+T}F=JZ-)%&t+2`z|;&51P#~u`z@k;VgL&NG%@-+0lZbIpECh= zcOMKS ez=;KzmD1=~E@s5+NA`2y{Ne33lDO sEOX9r*alR3Cn;);2Q7DH~%qT(jWltpfeYMtM=m zPB4+HPST)+G;vI*+436mKN7le9&CwF!N!mg>)zAbV0H8(oP*GIT0aB1)TUkZlMd;0 zB9`|@?EReY!_@9s{LDW_9pk2WH?`X67;@|tD=HrB>h2OQ%Ocg~-03hbWe%<`1#pc8 z=KHz9OK;8hBe1AFPw54TMxYc=>5(${gp`Fvz=92x+PTr1f)_bKxI1#a@fVRx%pq`% z_QME0UV&M2rqVKdZm@=BCqOraTPCe^HZNLv))QBuSEi+(9=J6D1OV$;Cg+q#Pxj(; zU=^3)F)moxHt*uPA0UUEs{`c`71WITz_ZM}&5O=~?f!7l{!r?oOA g%R@rL6l@XsGhj!f0SA(o^puTz$4_}pJ$_=RE?4HHqDn+`U@83+V z-6ciZuHcsLYhsWXEQ6T!kdUpC8KPr)oI+MP`HyX@Of%6F&8F)B5Ex;&-?@sS&V@dq zSjD}Bza-~LcvZd#4RsE$%>J-Wo)b2~CXAKc0$b9-d}zbdZO2@kR~cFViK2{EoAI4o z2W+mTr9&DTNhQZj&GpupZvGjXyW%xFbWHM22=9hQe_o=+o~+2;j1BAF!Ze_+FYqg} zNSu3H{V$3c_QPZfsb|`)4^betg28yRDkPKLYcO7duH4>1O8$XZaM6;_{S?oG%VBRQ zG|L_6KMU6eMD4(>+X$NY+{5h31yH}8Q;`joor1kJeyQ*BShB|fr;7Q==Nm>ASp6a1 z^zE0&iK!5a)H2jZd|{OY-!}sQ0D>p |nYz7Q^LyP8xq; zc6UO0+#3?srZ?gP Ro_kSJfY1Y-AS4o25sZd#cSttpRM4 zm{yf4{?|@7cxG?DUrBODHw3}|^Qw{Zry|yAx>3@HpL3~XsSZavyR-8-`X+h{!K6%^ zyy^9i2Iv;APOvUuLz@6+PBF{vfLeKVH1T0jad8chidZ^MUtfz*ag_&R)o!iZo8`1r zu0x99d{r_OU>s~aN33(}M8)rh7c0T&d(` ANC<%;?w=tC;0xydAI^4=IZ4^>3{ zFgcv>tLpZ6OiK$C??x3$*Pfc3>|11BG?`)BT%V#C3I3UX26O2 0zA4VNx_RLL4wACO((O^x`$ _V~P z2Qey~U*w}y4EfZ7Kkqg=$Y N?Ax4zCg01f_o v)x=>7%owGq@{09J5dix!lEqW zLc_l2xg?{a{$)$sCF>KMaij8T^Gy<}ot7j+_K`n`cb4aNiP {;3J_0|`yVvZ*w(2*+lmMO z1_xR7^+|B(CB{WK*s>oW6hg4*;mWF~;`J?$VQ~X)ui_aQ*qGKR7=%V&Hqq{x1AHrE zzs~v3`O1)S8RslVXf?sbM7bA i1DQNd%9S-2cJUB-vLeM|J6Ef8DI3I)_`q zz~4qYwQTrMxR&ALy>7hPsuXcSJ}FNv`v0p!ail1TJEJAPdUw5m=k?;Khw2d+a|Bv6 z199I6VMlbVRhINCyPAL--b(O`RQM5iY`j#^hd8*fV5#Uf={gM)aMM)#Dg0ss_KbAw zkTH9LcR+C` TO8~Rh{Y|?1P((swLH$8s<-! zQP{eNfXYZS#L ?<;+m1zzW-o7TB-huV%SFNOh$2dKAK? z0(F?C%`Q0;bG6^YnfeeEfXAJU@B1LFt?a FJ)8@(zk8hqXM zN2Mh`dc6THJI_1JfjF$pur{kFRnAxc2kb|uxVUHc5)lmp1Recvd!xv@R6J3!8`t>F zBs5;m>~7qMODUdVV)#$o=G#IqmxSuh8JX-fCcY3&Q8gjpPz%_MY?A=c$a?_ry5(|;Um5rpbT$$v^BCty@j|8 z05xnUgh|;_311mHU?3~+iGK&S^oL##^-RD*Tofc;QQUfDJocg( `sE69hBGxmdftd-7uz9IsU)Z_!kJ#aK?$ zI7-LOAa)}7?Zv}TDs2cbVWRz^M{%1q77Kn;ogck)F^!SJ{O=}sf0vFOh!Mlom4U=E zR{dY;))<0V_m3dpJeN7QGh7O4yo_Hw<*?W4nEG8I7`ma*J3jaJJtdNyu?n)D*i9oc z01c&5)Q$sZkRY#awZ4!LrX!gV)hMCAbfeTLQ7$6{6Rdg#i8f2+133rKVYT1mE}kW+ zVbx83)QbioeDT@1Y|MN6{jN+x3PySXR}XuH!Dl{a%G;3zOq2yJp&PQsO`w+s
X6DuR%6UA++dv zmy7B;^1F(kG(n7^3DPkoKejcWTF>uTj*@;&U*-2-Y%Fhm5Ni-vf0Al@{sLfz&I*}a zNyb905hRw1CbUJxQ6)#ca0>TYn%zZr(#@Y_YZ9fS3S~VQQ!vaCL%5rSZ9n<4j> d(vOU-is%{>j>sK6sP5qPhyyH zZgR;JpYd)8)5zGtIm8Dgw~)iZiOw0RQc-7;1IWAHop~W>b)R4ta1@z@{@C5fKo1IZ zC?I;&O@Hhi7H~8F*_%NzlCL{?OS`B3OuzHfYtLI?5r|SK32C+cG&&-I-k6n7o!p8W z-Zg-KP@B;%@xQfu+H5YsCmg$8Gwd~d;;T|g9|AuI%s-w{0T%2kqtsti_u!`v12)SS z ATIcPI)?ei UVD*rf_;~k3*jO&1I|0w!vjMlz zD!OF@W(FC3z%B{AV>SAIw0!I)7KvYi3QweamzdUaj@z;GseJi`s&1S{g&B4(AZNQM zUY&SlYIMS+Vr?Qn?Y#wG_B`$h#Zx`fI6Mb=IvA^!Al3yfKNIlQU5R_ose#v9NKtkF z`hA%d$f&qZHIMskQ(W%AAV(K;3Atzv4az1Q0$dc@+jp(ymTmK{Z_e1-mmSj%TIYnS z@`yIUhOSC0lZ{E$(;cPaQ(-OR2xL nOw zc8|dZfs8r%!Yi>`SH=($qV-U9Twe=CEl~9|nU+eZkjZkR*x1wP8uFe5f!b`RnFy^# zf0H@H!pG?!6k_WTyG7FFn#+b^|8Sw3O?fVOud8$1;#hPkmm{xmutv-r)d%E5!tDz) z6AQ*_-rx_!oDv5m$bQ`wY-g#_$9-@+>$TChQoctfW^8cZ$x7*3yK9+$zq!?%A_D`9 zK;ug~2^iIH#B3)1pc7)7H3L< ~PC&SMM_JlSp-(}wBh$Jo& z)7{fpT^k(bBRtTlTc=K^+(!65wL+oI4T2!*+P)5kt?9AMFcPb<$sfaD@mcjTK !S&+$+^MgU&DFDwJ$97n{Nv^9ddtVrwquwwEXl3QML{Co5+gG$XiBV%X3}72Y0)1 zp0ldOekiageCf7vK2t82xlJKVl^iWF>7tobo`lgwQH+7nFcXB9hstXfB^jfQC1q5) z)X`$SQq%MNP|#;aNl_1Hug$&q^RZ}>WvPD$dWUektQT}BYJHQPv%yM`IKQmR^-k?( z%cy$YaL2u7Lg+|2NG+N=hY3}PrEe++N@=>{-sSS}(#M-?g^;)qp{!J!?b&6%-t<9~ zuJ28NsK671PK5LTay;{oCO3HeQNbKPpb@E5b9DMXBy2_|I5|pYHoK*ADJ`#esYjvJ z%bn>(l8TZ5%Pe_smxeF?i--=@p6E9?5q0ZDF}uPC9ja4#v_En0L}yD*0y_stcr=Lq zd;7M>NZBy_b<0GrP;DYL0%b6ipI|162HQeFs#YUz|0Y*sA&R%O7gBVVCJkQQy!^+^ z1bsEcBTcotJ4H)E-BQQn6t1&Yxqbv6XXg}q7FRh_M{GrepL#eIE5yrA=-T8=(ly(t zG}>hM$>qoTzf3oBth-zw{b9l6KUw04mXgb7WGK*n@auab2p-aF-kiuU?FJOmKw9^u z!ZLghN5=pHQtuux4U_LeedZH0vT%-a7DmegGU-hCCPG(&ZbiryyX1n!Jz>2-HOp3B z(+N@#b1_+VOiN-RwdiVu-$v_1<2A1fsjGFsyG~c~Ve&0)Nr7NoN@$eG&t-V&ww&?; z{~+@Tcu6MpU9TfO9@b{cw&uA#+m8tf3(Ml&Ev5Dy1l&oz+fi=GVG_WJ4hw)C$mbJ*WNcFe{C@d<>axAk0LBSh7+|R;o1pW zY06-wQJQIcI4$N;jRS2=k^`UkEaJS*5!FbF}+S%fGbCM8sdw?q^7_K zc9>eW>^h;dJut5g)PXoe_t4tk#Y|2I^T0(0z&|c0GM4W|pJ2(gZBxL;xH&@Dt Y(2CrMp|NwO3|WtPZN*b@L>o@1wLSI-tWQm(L^$j3tZa(Ce~<(lOZ50r|Zg zHev6 i$_N&5ga^a_XAJh zTi&su85%=FrJjlVf^o$H#LtoK9_4)=Ch`PkQ8ol=wxXIvZNi3 r*{GPM}UCN)!Xpuw96;%4`RTlUhjS`Vr#-^9HDsy2MnS11LCF?royg?^7UX= zau@Ri*NrEa@7zv~;oaluA|Vn8_CS7|2>!Z^BCGGUu#H=(?q(BvYu{!?Mu6eYteLNo z7b1%Ukd&GXQr_Z`90IcigEs!L@FqBmQKZjIW|y}eu5;v8Yn-s6 C!7T z0?KDha?xY1#QXkmF{<2@**G v!78BK|iQ?&Y8(U%Ldzpq7(aLd!^1z!1q1EvCZ@5@Av6pmk>m zZ&!Vp+yG_sFwN7C%7MwCO{Qc-xzFC8)eSJ3~uU%+Qd2YN6Kt!|3G>5(-=EDYOY z`LT?;dS2mmd}4F}4@&1+ON5143f(FHz7UP~-bSKryd0k6W%ZP?xQ{!cSV5?^R?6kU zf<;TG%a(ul0#hSR|Gl0L9LnkVGSN0c7+VP>bU*a=AqkMU=WePSJtM^Q*!${6{;Spg zK8WDYT5GC~ <>%=HOC=j!jSK;PgRf`i;u%#+#z!1Z?4X<|+s8R2&b3Y+TN$ zu#x&( (=v-GnVc w&G2D`t7xx-hM*bL7w08N3;~a (_cMa~G#Sffw&1 zeAMeLM4 dZhUkiv{@j4sLBLYF*& SEl7&w=Kcb*rv3 zjbILefi8Vl e7XD#7v~4LkkTtq>NMm zX^B&FQ7;)$kZ ztDT3<3s@XR4be2hS|67IqqJ&tV4SS;Fjh@A+aX6eOeR|I ve~1-D9(M}I6IZHfhaM+X9sx~6>GD$B;eVYc(m$9yWih)77%+}*@7 z4*Hmhq>&6Fz8(Sg=aM9;dFA&Em=8|sq`1*y`c#(q4QLc56_Rag3KSh&5PY$e*Yp>a z$zY?+%!#s!Ndn}_(m8&hXzc>iuuzLz;-H>Bix!TVt9-l^DKL*`x={gYIic28f)(#m z0qnOIKKnW D1KFp8RM zF+^^kj}WFQIHJhue5#W~aq6h=JYC{m{8A5j1zAGry=wf!s(o4{Z&6wKNp>pfqTr}l zWIB}j*&3a9{Un%p`3skEu;*DwkWJu6v6P51ScMMhoqx!;$5Ky*w78TK%xB1bSNV|o z0 KUH~VI4C7)Cr zevMkk5E38hVhG_ Z5Ek|B77L}pyGEY^MC62 z HdUQ$=OFwU)^hwNyOFIi38Hr&G7Y2dg0b&kS9X>JtKB1GULt`70tO- z-A-yTo&$Y-8M;hO_? p)#lHcQov7KX zU ;tezQsL0|MibzRv$&VPz*$D(6Dx2UOUmruWBb$d9^=%7jiAik-VAJ;ul=iHa zOIV)qW>>z=s`-0(Pk#kiV;2Iy(n_5Qd^mLKl<%N?KOXV$o^hCe@o H=kckG=}gn;dD$gURmiG^k+$FaYl3?nhZxg*R_beB8|_ubEYjv#>}qa zUWCF-+hz~4U&_?nw{@{$F)28{vYV&(i!;MiOfxD_+ma8Lr-#u}D<;~bpYta8-CS{> zN+IqNsUOPS7qFxz)gVl8Jb#;5WXV(Er7Opxlqq<>+UZ0%TTB0IWLIB93%s=Fx|+9F zLd9j7PcSpYXQ(!*g^VvC@rJmmzS~S@C)FyRw>tB?pV1oUZz#_$p#7XjCnrhzp>nNY zHi|0Zb%ZcK^~uK>Bb&*hh-%(bn1NB<>dIkm+|{UCbGbPPIkB5YMzI4#aw;Z? d4`88K?``|02(&K?b=gR2&gkjH~q zm-#lJ#^my@H0jg=4#rZ>={ec1UVuBJWsI0`Izr;csWMT{)n4u+SOgP}4C0KMey1>? zd@d7K;{^8=Iu&IhWE}Vhf3aj_dyOb43iKC}jSUtUllDZ7;hLw{nRFfJA9yq2n6J(x zY?$EBE;Z)izfORRFkb+*=GtZDsVypsF#iiBL^ PRGf?k2cuGlL9HB@)=Y6=T12Z&v3#ICZRWt=`&-kHA{`F%G;s90^WU0Rn=_0Y_em zBguV${03NEA(&|qX$5QC( fA>dmRS94b|F%9?5a%wi6F?iZ#>>!e^(IJpkL zzpp&-STDHT1BvV1LWh!wB!rN U12|cj(Jd;l7IijnJV1VD$Yr(W)erQ)6 z*u2jP^*-)A_aZeS?+T$i!Hx3#+tx2W^v4|e^kyr2><0$<$+inSe~`aU+&7vU4+tG` z``y5LepObC6$6ssf*m(tDB&Gz09s+Lxl1g$4ybF8)1y&b)wtO*XGIq&<^%bg%$q4t z!;#bylLHQofsc9u;+d9pXw@F6mP1jyR@B&=+Y1drA(U}hTdt+Ly524oyr zbOBRBn>;Ye@ZXFbHuJA@V45V>SJBQzIQ;|KW3;-rG;>^6Iugx(R94HUj)b>yD!WLi zT+uI-=Ba+4veS=A-?PWD6KN=H`iCfHt@i;l6n#KeXC-_5gK)%dCF)K!)~}}AX=)zM z-~lK&sl4iU1GXm 8zs4gY_)Yb<$kvZa6&yGj)~27!|rcDbfP7TAvWkC~W?R<)5P^Yl^j z`MDa# 3D8!EfxfiBNh z*03r?e;Zy ~`%B)@>Xj9j5Qw$5D+Rv6LJUO}x;f8?de@^aRBtF&} zReB_@G}uH3D9GggO-%nbQV3R6>L%42jFi~HgqMpkuE({N01>+zB@oyz43FUj&|$FX zn;N*zN;`gLfCdi>d~4|QA-_`;H3X8*tSN&P@nxg_I_=uIgJfgqchOkB9ZMa31!ilm zo$Vsu><9P=$uZl60 Yt- z5X{GjQCW^d2tm%8;OOrm_azPPUPjvAZ&wi(XCV@0KB1L*k>%}ZK9gu%6U2SYOC+Ls z2A3c`8i9jZEWKMTEI4nZ2s{kGvbLm}x(G3N7>_xTI<^L^wR3XWao>dT1DYp2qf<4z zzx!*$iB!3jY;GR0r#&XVgA5CmC%4P96sbo7tC5fv5P27}SsOnEojA_tKT-P%LFEP{ zLLs;|9+1?nV2UI=UCrZ9hS~5Ny(GuR12lj?BQ*8-&o;m%27VCb3k@X3yPo|UA&CQp zaxY*OdH>K0y%7O)HOb^r1j|P&es~(KqTY6d{dll* V>!US1R}x#3rhusaHmgL|PZ#F*$`jEH>De>^b=r|j8FeBsBT#1e47rqaZH z1^+rRU6w |S3wzcig|nwmoYZlCNaHls zqjt1F>o`6DGjIo!n<1S`K>&5%iB?Fxar~Y?B9d!m-f_}k7rl87sH%o_9un1!BPX 07{54n_`tp@VfQ5uH4Yakbpo(j z3rKHf=iaO&^Z19z91|k%4Mk~_sbWshE0kunMI65bCF{N|z|GB`$%iko>_A+f*RKM# zE$UKx8v%eHEX?Pf+vlieVDV@xEZ4mq@F#o54saE){U0_-Bcszv`c^DLWlB*!GoC@6 zTBn+Uf)|zbWlINm|4gmpxqGw?-`Hanf?%g&Q06 0 s00V;F(as =r|v!cP#*#m(}&^gRlN+z|t#rAz?0dq8NU9d<`)B?{W z3!vgx4I7^QEpG^%9b_+~Wt6<{)#(y>H(qz}096BjWhatf5(7rU8*P^(ylI|+NMt5> zCFw+Zf0>GOgsM{yd0FhWW?p@Oh0u6$$NWC=t!ig;-6@Heq6QjBss#eAN%KU@p4HF7 z{gdicc8^FZiEg@mO(K;~lB4ZO*-~<;R$pN`_J_9mY W3&o z4KuHF3Xa^Z-wPj563h}S1+DUbQ?|{OK1F|i30lki{)cfC@b%owCX@vRg1p6c_RdG3 z$Co6=Ef$VLELg(C23*XpBc(rbP(-7VSnQYrui))t{EwSSBU~KTsNR<=&VImL%{Mf* z;1xD!*P^IyOE91QZJvd(Kam}|VQ0WFPDgZK0dAu4xl)RNH-y(xJ@Jb+ZP9V%kP&04 zOA9C0BG*GOlA~=`6=Be<#C9RdJvl4q2M8&Jj_<$& &UKZ|WXOoJyK*CJ{8*GIOlFcRUMYS|+(srVn!P#2yeJFNNz l;e4szlRv{o(zbe~woYtE%sexUWbE36nNy+V?a0;?(sURB%AWuL diff --git a/d-guides/google-oauth-setup.md b/d-guides/google-oauth-setup.md index a17bd52..051ee5b 100644 --- a/d-guides/google-oauth-setup.md +++ b/d-guides/google-oauth-setup.md @@ -27,10 +27,32 @@ This guide explains how to set up Google OAuth 2.0 authentication for the Porta 3. If prompted, configure the OAuth consent screen first: - Choose "External" user type - Fill in the required fields (App name, User support email, Developer contact information) - - Add scopes: `https://www.googleapis.com/auth/userinfo.profile`, `https://www.googleapis.com/auth/userinfo.email` + - Add scopes (see `gateway/modules/auth/oauthProviderConfig.py` -- `googleAuthScopes` and `googleDataScopes` are the source of truth): + - **Auth app** (login only): + - `openid` + - `https://www.googleapis.com/auth/userinfo.profile` + - `https://www.googleapis.com/auth/userinfo.email` + - **Data app** (UDB connectors -- Drive, Gmail, Calendar, Contacts): + - everything from the Auth app, **plus** + - `https://www.googleapis.com/auth/gmail.readonly` + - `https://www.googleapis.com/auth/drive.readonly` + - `https://www.googleapis.com/auth/calendar.readonly` + - `https://www.googleapis.com/auth/contacts.readonly` + - Enable the matching Google APIs under "APIs & Services > Library": + Gmail API, Google Drive API, **Google Calendar API**, **People API**. - Add test users if needed - Click "Save and Continue" through all sections +> **Adding new scopes to an existing app?** When you broaden the scope list +> (e.g. when Calendar/Contacts were rolled out on top of the original Drive + +> Gmail set), every existing UserConnection must go through the +> **Reconnect** action in the Connections page (`/basedata/connections`). The +> Reconnect button posts `{"reauth": true}` to the connect endpoint, which +> drops `include_granted_scopes=true` from the authorization URL so Google +> issues a token strictly for the **current** scope set. Without reconnecting +> the connection keeps working with the **old** scopes only -- the new +> services (Calendar, Contacts) silently return 403/empty. + 4. Back to creating OAuth client ID: - Application type: "Web application" - Name: "Porta Web Client" diff --git a/d-guides/infomaniak-oauth-setup.md b/d-guides/infomaniak-oauth-setup.md deleted file mode 100644 index d195d44..0000000 --- a/d-guides/infomaniak-oauth-setup.md +++ /dev/null @@ -1,105 +0,0 @@ -# Infomaniak OAuth 2.0 Setup Guide - -## Overview - -This guide explains how to register an Infomaniak OAuth application so that PowerOn -users can connect their Infomaniak account as a data source. The connection -exposes two services in the Unified Data Bar: - -- **kDrive** -- browse and download files from any drive accessible to the user. -- **Mail** -- browse mailboxes, folders, and download messages as `.eml`. - -Infomaniak is a **data-only** authority in PowerOn. It is **not** a login -provider; users still authenticate against PowerOn via Local / Google / Microsoft. - -## Prerequisites - -- An Infomaniak account with admin rights to create API credentials. -- Access to the Infomaniak Manager (https://manager.infomaniak.com). -- The PowerOn gateway publicly reachable (or `http://localhost:8000` for development). - -## Step 1: Create an Infomaniak API Application - -1. Login to https://manager.infomaniak.com. -2. Navigate to your account icon (top right) > **API**. -3. Click **Create a new application**. -4. Fill in: - - **Name:** PowerOn (or your project name) - - **Description:** Data connector for kDrive + Mail - - **Redirect URI:** must exactly match the gateway endpoint: - - Development: `http://localhost:8000/api/infomaniak/auth/connect/callback` - - Production: `https:// /api/infomaniak/auth/connect/callback` -5. Select scopes: - - `user_info` -- required to read `/1/profile` for `externalId` / `email`. - - `kdrive` -- required for the kDrive ServiceAdapter. - - `mail` -- required for the Mail ServiceAdapter. -6. Save and copy the generated **Client ID** and **Client Secret**. - -## Step 2: Configure PowerOn Gateway - -Add the following keys to your gateway environment file (e.g. `gateway/env_dev.env`): - -```env -# Infomaniak OAuth -- Data App (kDrive + Mail) -Service_INFOMANIAK_DATA_CLIENT_ID = your-client-id -Service_INFOMANIAK_DATA_CLIENT_SECRET = your-client-secret -Service_INFOMANIAK_OAUTH_REDIRECT_URI = http://localhost:8000/api/infomaniak/auth/connect/callback -``` - -For production, replace the redirect URI with your HTTPS gateway host. The URI -must be identical (byte-for-byte) to the one registered in step 1. - -Restart the gateway after editing the env file so `APP_CONFIG` is reloaded. - -## Step 3: Verify the Flow - -1. Login to PowerOn and open **Basisdaten > Verbindungen**. -2. Click **Infomaniak** in the header actions. -3. A popup opens against `https://login.infomaniak.com/authorize`. -4. Sign in with your Infomaniak account, grant the requested scopes. -5. The popup closes automatically and the new connection appears with status - `connected`. -6. Open the **Unified Data Bar > Sources** tab; you should see the Infomaniak - authority node with `kdrive` and `mail` services. - -## Token Lifecycle - -- Access tokens are short-lived (refresh handled automatically by - `tokenRefreshService._refresh_infomaniak_token`). -- Refresh tokens are stored alongside the connection (`Token.tokenRefresh`). -- If a refresh returns `invalid_grant`, the user must reconnect (popup again - via the Infomaniak button on `ConnectionsPage`). - -## Troubleshooting - -### `invalid_redirect_uri` -The URI registered on Infomaniak Manager does not match `Service_INFOMANIAK_OAUTH_REDIRECT_URI`. -They must be byte-identical (including protocol, host, port, and path). - -### `invalid_client` -Client ID or secret in the env file does not match what Infomaniak issued. -Re-copy the values from Manager > API. - -### Profile lookup returns 401 -The `user_info` scope was not granted. Re-create the application with the -correct scope set, or reconnect the user. - -### Empty kDrive listing -The user has no kDrives associated. Verify on https://kdrive.infomaniak.com -that at least one drive is accessible. - -## Security Notes - -- Never commit the client secret. Use the encrypted env mechanism described in - `wiki/d-guides/encrypt-env-secrets.md`. -- Rotate the client secret if it leaks; update `Service_INFOMANIAK_DATA_CLIENT_SECRET` - and restart the gateway. Existing tokens remain valid only until they expire. -- The connector is scoped to `DATA_CONNECTION` only. Even with valid Infomaniak - credentials, no PowerOn login session is created. - -## Reference - -- Code: `gateway/modules/connectors/providerInfomaniak/connectorInfomaniak.py` -- OAuth route: `gateway/modules/routes/routeSecurityInfomaniak.py` -- Token refresh: `gateway/modules/auth/tokenManager.py::refreshInfomaniakToken` -- Frontend hook: `frontend_nyla/src/hooks/useConnections.ts::createInfomaniakConnectionAndAuth` diff --git a/d-guides/infomaniak-token-setup.md b/d-guides/infomaniak-token-setup.md new file mode 100644 index 0000000..d30f0f7 --- /dev/null +++ b/d-guides/infomaniak-token-setup.md @@ -0,0 +1,161 @@ +# Infomaniak Personal Access Token Setup + +## Overview + +PowerOn integrates Infomaniak as a **data-only** authority for the kSuite +services in the Unified Data Bar: + +| Service | API scope | Status in PowerOn | +|---|---|---| +| _account discovery_ -- enumerates the user's account_ids | `accounts` | required for kDrive | +| **kDrive** -- browse / download files | `drive` | active | +| **Calendar** -- agendas + events (.ics download) | `workspace:calendar` | active | +| **Contacts** -- address books + contacts (.vcf download) | `workspace:contact` | active | +| **Mail** -- mailboxes, folders, `.eml` download | `workspace:mail` | blocked by Infomaniak (no PAT-friendly endpoint) | + +You should tick **all five scopes** when creating the token even if only +kDrive, Calendar and Contacts are wired up today -- this avoids a token +rotation when Mail goes live. + +The `accounts` scope is non-negotiable: a standalone or free-tier +kDrive lives on a *different* `account_id` than its kSuite counterpart, +and `/1/accounts` is the only PAT-friendly endpoint that enumerates +**all** account_ids in one call. Without it the kDrive listing will +silently come back empty even though the PAT carries the `drive` +scope, because PowerOn would only know about the kSuite `account_id` +(via PIM Calendar / Contacts) and that one returns no drives. + +**Status of the Mail adapter (2026-04-28):** Infomaniak currently does +not expose a PAT-authenticated endpoint for mailboxes/folders/messages. +Every probed route either returns `404` (`/1/mail`, `/2/mail`) or +`302`-redirects to the OAuth authorize page +(`/api/mail`, `/api/pim/mail`, `/api/pim/mailbox`, `/api/pim/folder`), +which is the OAuth-Web-Session path -- bearer PATs are rejected. The +`/api/mail/?account_id=...` route 301-redirects to an internal Cyrus +server on `http://mail.infomaniak.com:5000` that is not reachable from +the public internet. The `workspace:mail` scope is stored on the PAT so +the Mail adapter can be enabled later with no token rotation, as soon +as Infomaniak opens a public PAT-friendly endpoint. + +Infomaniak does not expose its data APIs (`/2/drive/...`, `/1/mail/...`) over +OAuth 2.0. The OAuth endpoint at `login.infomaniak.com/authorize` only issues +identity tokens (scopes `openid`, `profile`, `email`, `phone`). Bearer tokens +that work against the data APIs must be issued manually by the user as a +**Personal Access Token (PAT)** in the Infomaniak Manager. + +This is the same model used by GitHub Personal Access Tokens, Notion +Integration Tokens, and many other vendors. PowerOn never sees the user's +Infomaniak password. + +## Prerequisites + +- An Infomaniak account that has access to at least one kDrive and one mailbox. +- The PowerOn frontend reachable in the browser; the backend reachable from + the frontend. + +## Step 1: Create the token in the Infomaniak Manager + +1. Open the API-Tokens page directly: +