From 6b3473e4c304861d13c7d6fbd3ff02a07e925169 Mon Sep 17 00:00:00 2001 From: Carlos Sanchez Date: Fri, 20 Apr 2018 10:26:41 +0200 Subject: [PATCH 01/66] Use kaniko with docker config.json password --- deploy/Dockerfile | 4 +--- files/docker-credential-pass | Bin 0 -> 2529418 bytes 2 files changed, 1 insertion(+), 3 deletions(-) create mode 100755 files/docker-credential-pass diff --git a/deploy/Dockerfile b/deploy/Dockerfile index a1b920c5d..74d94533d 100644 --- a/deploy/Dockerfile +++ b/deploy/Dockerfile @@ -17,9 +17,7 @@ FROM scratch ADD out/executor /kaniko/executor ADD files/ca-certificates.crt /kaniko/ssl/certs/ -ADD files/docker-credential-gcr /usr/local/bin/ -ADD files/config.json /root/.docker/ -RUN ["docker-credential-gcr", "config", "--token-source=env"] +ADD files/docker-credential-pass /usr/local/bin/ ENV HOME /root ENV PATH /usr/local/bin ENV SSL_CERT_DIR=/kaniko/ssl/certs diff --git a/files/docker-credential-pass b/files/docker-credential-pass new file mode 100755 index 0000000000000000000000000000000000000000..525169cad569d77775e1de954ee437fa8d805799 GIT binary patch literal 2529418 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 z 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

)RB$96m!EB zB1)RW+)?E?R7y&OOi2e_6eD5mP~{)6(i(o)kWkrCm3=-nt07%m^h>2DBfa+tWq=ph zzaC_WTZzqrjiO*fqRH+%U}e z%?dyA>JV2reoJKdO|yf5-_C>I&JhB}Z_fl=nlCn*A~wv%+U+6QT^E3L?bwN~D_-0!l)+f_^dN&{)hk`OWBY`_j8zW?%)i97 zVt&|~FjjqiQD;{DWOA5QaVEi`uqu8G>BaHlRp`Z*O#ixNMwpxT4OM6y+OpcUw`)W0 zQ+hJ;S~!Do&8#4U)kBosVq?KwU4zE=4wY}rbZ!8SI)qcdbz|hI-M|h9%&&Dw{xodO zSe@_w)3v*^ru2W$Whtpnv^aY(z}%|WDd0qJIKtVJV*3F7sMb5c8hlcqJS#!2EFtT zHYFaqgn!-I_J&p{!!l88FZUxWiPi5~QuLvw4^dw}4-N0so@*QNxZH3CxrvM3qYPg% zkHoE1k5b2(dw<4zE?Em`QwBsGRmT-Oyq*X+WS=_0@ZjLcvyFETD`c4iev{BCxAJ_NO}U z%T}T=heU_u6Gow+_HSoho4$5 z{DKQ8m$}U+2_*fEpE(NUnA!=mhT5v&i_{quH#!+_uSgu9S3Ygi_n=RPYkjS5!s=}F)4-e_x0if*#E50s z;i}pjXwUoD^Oa1k7!@^A;y4!!>G?M?>uCjr_Iy zLTo^wA6C2-(8*zq3m2kwMYZ7+W3^IHT^1PKnV6ci1?g+kt}@f~jG#{42O<60pE5$q zhm0Uf~g|^Du$Iwhlr!4sV7KeEL)NM1?+bW?6=XeAK+W^Qs0Oj zKEBJ?@14}gX_orXcv@}hQqLH5je z*)v#nk$g_T5OKyZNcOX5Jb?t7FuSc&2XSfE&$K&3ce!}a7c`Mpk?b{~v;mdUZvgA# zyTy~ImW043vh1j$>laQ~FluPCZr_bdZ&fmMl$FkGCJ9B=xA@}(M*GTR}?Rs94RkeIv+PRQX<+X%ZlDtG(?H@kFlzWtk$f(4SLf#80K$rF}=Gy-BE)uMRBV-kQQ10x{BK7Rp(r3km98X+z zr^JXV+dRmC_+2x;BD*y{`JL^de3_mXa# z5s4s75NeE`s>o(R6|IENXO_NBTPS{6a6A{#1(NejMe&NsPm~wWuYP!RVrBV|x68TB zu1DLSbqlgZP^gYP|G4rWmmRbsvV&A2HeG02XJ|nK(YC5IkzR$8@N_t*On$0T&1j zz)eu}MYX$u-8$PUw~LlZ&PX4!Q6hB|Q0f>8@FF{$V*5R6A%-jniZgj=o6azQ|H*Ec zpNt-A`@nyEC~eN=xswL!(*EbsU!Cm*6BAnCri4+95fj zPkCZ(y#CYe%L#f9fY22-DCDrZTf+sQ#1>B5Z0cs8p-WiC zwBC!+dxf@u=?Gye=d=R2^h52auzibXEk_K=t(eOb@+^F(?L~j*+r(-^m$W?zL*6_t zWWx;sHUFew+2~|pxHAP+CV!c|;&UPS&ft~n7vzCtU?^uS7KW=h>SMbyHK-KDQfjR- zZ98AuRwP2Vq~1Ub{15*@HSh8d_4f>)Q>`nhhSJKpjLoG3@V+kN4&TuQ~Ojpu<8@rZtR{-X?beIEsI1C1NWcgRB!g;Q) zyEcakf%VeW*xbbUU9Rte6pssTM z?{gz~9>;Rs6qxj5oDRoyln(Fc*7TEq&WouVQ z24Jo$mN~FJHiW2XojM=@b6s(t1KT?cW?iusUzz_?hthyBb$_rct{2%kVJh6KKhzcH zIoMMMh4{%Fti_M3E9iju@yT90Vr8N*h7B!kSjR0AscNU-KRY>;Yj07gr{(frW}!T_ zpNn1UY+pHl9-dkB8*1xf%w6<5T@uOv215t~s!kXYRdDUoG!Um-j?#&?tG`F@x@;C@ z6X%RgZk=sWKF&$N)EcOt;%}n$ms_@8xG{11`sY2TLbS{xfr2fjIJdy93rS}Uz0y6c~0@^RPhmhGpU`qoqhs;?HED>hS zT!H;10CTMQ&lW4~gY83=8V64ez#MDd;lRdptMnAW{8_>r1S`4E_JSrZZD?3Baaa1S zB(8oLG?bs{yl>d=9i4eb58#*m-70O^8frq0aNC~JY%8CR7FT2Ub@k?b7lNb&)_-W8 zpP#N5aULI?S8~A!j`M0mvMh}3BR$ZKO~A*KoD@qRu)$ZMVhTv&h^3(ln1)v-p2=Og zb>LUsH=ca7PVmL+CLZhNzV+O67-X3E8cs7Cjm9t=j8~!%lX>2 zoO7;%5%u;0D>^w0rFNM5Jnk=gMz}>@{5I6So+{vbH5`(5W!ir^f~;H@%0N4_{Fj3a zg+{lp7$_+ByfEEpXqJC>0OpwF=glOo5DsZNAs&!sam@(-rw+BNyVZ0aMfiW}k|`!@ zq>#ghUe<{BHAWuQ|0Uckt6u%-pW7vGVcU)V3ogeiVT6s6-wDN^b;;psOWh|O6kwhj zq?eXYdm-V6SYKn^X$OOrN`9@7Oty=$1uGH-e8UCIQ zyW7H=dHXCtP8Hm2D_ttgnBuM*r8fPxd9Kc&2h(#{e{WakuHEYFtq)$AR`3ZMdDn0%{;@y^jctXx)Fp zuxN|L{R)t0$f*g+CIB!~!)~hd@pBzV{>`$(+c2Zpc7;FDUbTB@mL2j&I=iowu2)dG zzFb&2p-P*0xNxp#ux)FjYkHp>YWx9e{9kZ-aUnN|1oL$pPdHXx;|au0`%{KCvjVaH z5i}6Uqs1!dA9sH3sNhI!TiqWX9AXQ%oPq4vf#~nla8G?TPO|m2;qz?6g-o@Z%`iLg zteB^{`=sQGfS#0$(^cXjGZogYk=Z^eZ`;{~LOx6z6WZj^;F3AquTqIcYRho{C64rk zfTQC^z^EWgRMVIg^GI{T08O_Zv%73$f5blUM=LTC@JAQ=y(d=aG~Zej`TiGnd2!@E zZL7D6z1-jP?6y8ZEV+a^_XsQp3T?KmcWixX;eJ@ma0~r(aBk~U9FkRXPDM4N8Jn7( z3N|$jM}K{=60e;~8qv-T)w*T0Hl8?xJ?Do&JpXdM8_78V`_5a%b?>QCA zi83s(?e_2e!|k6mg1(2G3i!qr%kdwUIC<#G;B>Nm=epC$_TU$0YOm5~LDwrhd<}7- zZ4Y;v&UTg0VEq=OLt(hoQRGFIz+V|Q)KX5aYE9(ccPI2lE9*xbJgtY0k<%-;1R@kb z+4l>A+q;ePVFhrP$nccszcP`FypxergECMB-(^daNSVoPAX7*|+jjbKOeOl)$&`sO zOl2D0--`^P0Nt83m|uTN3!?Nc#kSuOp!R9D0^6su*%!e+Piaw}jU$`}cn z0B(5Hs!oO77sfVs0O+rN2>b3!3Deii5ir^E_duqeaO-#(#T3WBm_!$Z&o&bcHDR%+ zadSb!bZ4~75lzQR4dv*G#a+D$y z-v|=v#P~{C;^STzV0uYMUsB!2EX*D zhKykIEFsf2x%18lPRqw&+r@jr2(q3F487f0GK)4o&h*$DwDLV82DEqA+(hSHeL+dn z)Pf-;b?s~~c$NMv^Ny`5Oa7AM)hh~yjbcrt@flL1^G3Fh%*Szx$Fq_5xOa7|f-q!= zyS6;q!pMChBicWNYQy$;1&=+itO=>E@J=0Hf&Ihx8#QF51H3D|I|MqKdvM2=MxQ<= z#}-=lQNfAjLsyh`cH7{zFLv^u=GV~ zfzp+qQDH&esD}SU8~(MOmW_TgI`Mf$;)C+U%8JA~DyhBAi&U1nz#Ssc!Twn6LPyy} z?$8xRRYze;)c3gUS>T!PBDj4=FWTSG=0Hsx&uTNPMyN{i%yd09Z-?l-=PeSqq~Wz_ z!%}8&(Rnj1p>9(h>(wNrf#dD0o49-#JkpD2?$ca~R(9cF+0O~G->W(uj2<&+l3i#9 zpWI_-bgw-@icf}T-=mztWCB^DDNmucl76A_UnAM;W(aUAoGLhaY_>TAn$9ZF$&YBE znu75|7LDWQfU@Y*M~@j-hPWRzD$&B>DE7SnxH68!o6*29JT5VDOguqg#Sjidk;1ns z(d;v=a6HzOr%kS{rA1T*fljaV4t?-QZJ)hd;Vg{n4iD4V5U8!a$O@^Tvl zM@Xjdj3>{i)CRg&8Dipzqv_{<9jhh&bw71`NB2{Rk=6{;7;t>R1x+Ux4B-fYXycRc zh$e^gt;d5*CC{&&LuJvYSH!hd`eu8J|8_k=UXcMy8EKLYMMWrisY$cXqVpOGq}>pr zJT($Zi8`G7b8|CkJNb`QxrXHPwhyD|L2Ly+`*04ETv9uri47K3YoJc1EnLj&0{`sa zu~N#YyHDGDQjcchIFqLTy46CWFQMgq3(_PpMErb&(q;OS|MImw_YvtDDA0@ag6`}$ zI+JZ;btLGI{ZIMU3XrCs=pKJNwyk95^z3gD)y25($!lt|Zjh2t9D}_o7{uvJ2(*5& zhT?!Q3_5xG=w}^*#dz<~=F}DjuZCvZ>Wku5l~sQA->4%Q8MIw!xV16#eneHR8Im@t zmN5PSx$D;C1 z=Kmsu)_y8wr7h1ypRN#V5rH|*eDqE>m9shOE-oiOJl0>qFcqmY1-kcI|%Q5=ygwCmw(vg^lj=9TuJsehrFrtc#C_- zGk8AlR4k`@o@wLfWtjYUMd zm+dI3QFtMGmvR70v_T`lXm7U)M*KQGG8(QNDjl+~7QqRFUs7|h&Ol*(zIsT7cMfa$ zZ-dY2WZ#lqvp=eZ<85||CtlNz)F4OgtLfr6oMjr}QXnNI zP9w~6V3WeLEEA?*02a~+;~m@)?}myqM%@!Q{|txLH@k<>+KtxuEq_!C!DD_b^a(ds zmj5^Vn_8~Ar8De zJef0Q+KdKp_$C0`{T{3Qwy**>CRThlh%(!9bH1K`F~CKuyE5JV0Q&#B)4tyMlTaJ- zgB7UB?QYqj<+s? zw>Z!E{aRwG7RbdQk8X@@wmog^)r7Z1u*pGhGn>%IJU`CGo5BbwOFN%wCT9VxU=})~ z6d6%?cmk_P7kbmFHg9&tL~gQTU>ZL=TueM@old6GB7zWL!C(eQxrue#n<*IbK(PJS zI(oz{m)ID17UhZg>NAnqu87z@n{xoXUO5d}(>^jHvy_N2SIxR--(|FS8N`B2 zw(Lu(^*X4!X^MEv7{l=dR2B1qVE~fmF3#r$=^U>l7E$2=x8yD8_})eSRb6L&rveH! zm6>^q)qp?9f@83w>t|RBBu@4tT6br!Jf>KomsncYdE?b*bM8WGvzkNxt0768-54#^ zN6{nmH!4hcC!*-}dGbCm8!*?rD{2=xj;2v1mbXKDwNF;V{U-aN@M#|#$r7vD?m(gR z2=CZ3VSI76gYQcR{e;e-*`3-u>6f$>E|3QrS*OBN~_ZFFSk zzS;zs>Y`Hq%Y-)JgJH@QtvQKFLtcF3_hhavaWb7as|B-)RCqm6nn$!{AJ!laa{KK~ zI|t(j^QQ?q3<2G6HESJhpZNPt65UKXo~M1j#Y=chYv?6Z1+v&9I*)4G66R}YyVf%Q z*)*Q*4&xQUIK3$rV8g{l`xQ4eg+!%G4GP}_JGXR zfV7-j$&XTU+h6VRZXQ$IZqe@lG>3NXo9X8+{X17xbh00Xd@N|+m28>;dxRZjc!D*f zesiy@S*oO^^D%Y=41jcQBAYw2_TQHDo_=v4z0K8>c-ws$3HYze?{Ztk z8)3IWKb8NHXXQVz-4B-^oqnC8f06V{q4Wy^8ksf2O!C^JhBiy+qhf!oA$_c0ShT>b z3^*rjWgJ*6V?|cRZ94?UO50+_oKY$&f#&?=U(Sj^T-3kpQRvZjmwo9CVXe~%PuUuQ z(x+#b1*&wW$I;uOw~ANjv=xF$X2Qx*Ytw_OH?hMc)SI_bhr7#AME@_#w|!6I%#QNU zOP7C3=kgE#k@8OmfA}k-%af7a)1@r717*`5LY|@t)g1k$W2h%KR!^XCZY)8`&3}^?|EVgGF=(pS|2ZDLL3i_S@!Pfiy#6=Y`)qrU*6V%=NFFRK)Nkw^ zo!OTpCUX6v$#)S&^YVMQu2Et;As_bSAA5|0ClR4aXP>f13Rd;7`qG5v=J=y;u0VfdqldaRFJt)RC{b@kbP5(D=nWoc4z% zINq&(rf>Dcl;r|z{}G73T?^}=R%M{{1XMpkU6l{iI*Ejtza)j)xn`DOJuVzRX1N9k z>zy6eHamn`hY0Jfj;x=**R?nPB`U1pD>9#MXSQ-2Kq>zAuARNRwe!;Hnci4w{2)f*c^gPrsK_Ya_;QKMtuT{+>@QQ*|bcF zNFkdGal8eu8XClXPZ*lg?P>0FqlLfuA{&SH&Z5~rX790Hxz?>$4w2HD_65C(tUee7 zmbzbCuOwVkhwDv|$Dcl7EhO$W4QEhQ_?v!+VV>Dv$|TwMM9mvoHXRiovNXPYvjS0L zpmY7RY6|426dz5X3>(d+xQB*|7zovsa6p&A(ZBIH%S97{&0P-3 zc;XpBRwU{Ka{ZN1wAxv;VdYI%4Qyv`Hq71FW(-sYZXhm zkM`aXOvTCOKTrf3t%Vz>7R3CUUel3HHm1oZ!-p#I8qA(PbLb{(V*ky1;r(6#5{Y_8 z&L`|Au}VG7{_kT^%*r|5xEyB8@i%OzBrDMs*2Xj(G|lTGT#~spMe1HAH~vMV1nl}U z^%{1CL%D`>9o33#%2fNcG+Z+Br|^+u7WR>Qttpt+`C{YL;eh!||HJOrr+z@6oFpT;yM2ws zB%8F|n~5MtF7RM-#D#6Q4^}tNY9dKXoZo2%n9N;NAwOP|QoY>E9muQzu#78rk2Dwbn1exsa=Vb09%*v@=sf+5G`4=0Y zX)(Wsz8)TBrq%%Z@5K!LWh4pxMVi31*6CG$UhWI-`>Npkb?&=f^#|yh4Csvx)DJ+9 zaiDtDUu)gkj!YXfna*~ZvWB|)zm_IT=C&Vb_$zf$T@L>W|2%#Te?6!G;Xlab&nHRv z-=zGlb$ZpGm;3#m*1lNq{WSMoulfVDFax^6fffaz_*eB^ulj4P8{UzrB$Me+E>k?n z^px~kGWRrxzfu>~Rq`+R&#K~A4y-yos5b%PRM}n>_DdkpgKu`?|RiAT-%YUDU<2FJw%^5vw}?8%mm};by3|M{>^s$ z!wx50Yju=!)sZ$peAtVDAjeIIdB{^0glptzX*&HJOFv63y4+K_KA=h2tRr3i;3Y2u z-IPyp2A~K1*-I>V0hRhq$8Z-W>g%^lCd8As=V+b2p=aXeoZpG}aaGX$^IwP*p#vhaZ28(^i)IGIdH;|DbkmUkd zEzQ`elwCt04-4cE2BJYb_YU42a^G=^jUh*Blb{YsLuJreo(4&MAa6|~9Mtht=G&ZZ z-)_l#J1hMyncFv0^A(xTS?SN2D$mJ$dr-!Erz(%md>h;C+rF7^L(<=pxrrg^#%`ba z{EDp*hg;Id^&Uou)aB`KHb$<@q#u?}Pv*XQtn|J*_sPuXEf}``DeD<@X7PmK7~UVy z0@pF#F#Zurr}<_~brqR~mIoVZ2;}4|OtQ~&S=u{xSMlA+%iDFJ(1zvl!TNx|Kj5)B zVn2?6sy?6PnaQWIoxu`3$DQu}OwQc-d30V~A%$BcOR^VdO=DvOOB0OkkvWAT3~n?3 z`lG}J!m3_DfxjMOrs-n)38hc|H?7+XJEEI?ey|iu{TC%_-*B~WxR?9kJm!X+SnsC8 zOwnaldb>IkfQ9oTxr8Hm`PSmCY?^{RoViq<%z}+uefw zMcy!mDyHp4P*3fxdGfyBLD0vL?ymlcJG#+R7|C}}#{I6a^; z#u=^otrSi3RAQlR>L7q=S=-GW{q8?;dGsiRU?wS?;5T?qt6kB? z*EQIK)NuMT0YB|zC@_EIwvDC(kaVqR+!z3nQ%8upkWO#VB}X8_-ibN3sj2_3?XBZ` z>(Mr#bk4Gu%K~xP2i3oyy_HjB!q}m;G)7;-Jg&D(tndAEWaL4kJQ36}4?#fKU5S27 zI+oO2h|ca&_B<7@@{r{i0zNdjisfA5NR_+)&;kJrdR%av_0+iH8a}!cUx-g2 z#Gxg99Y!>dXoquJ6tnQ%DLOL#oTWVHuH~6nyKi>3Si8N9W=63)1Bx+a606f`!5n)! z6Hwuu-^M96P}rMY2t8+1R=J1epVxnc$=2`2c=G1uW293}gCIBl?P~)5UQ}{H_PExP zF|-zeZ;GEM`;$N?%0*>plTac)eo@J|EP&3!oGST^p3c#CD#T^*jLKy#*=;@+l;IGx9F+m<6I`y*W)(Uas#Wml`$sgb<|fa-HmkLypt0h={jNh5jLi^ zF?ETgJ2_j{R7XP=@VV`S`1xi{RsVv*OMd|wpYC^DJWYs48Qa-G@a=Ygkfc4_f2@Z`kSNEKM{dD-G3_ch=!5OgUo7sh@~G2(+@@IhvD{+ zjNFKO#<6WOVBna@Wx5oVZ9zq-J|4zEPd1U26;Up9r`4sN*V+PIx;MT`Jz|S;~Q^*yvS;~K7h-}bIniTb0#e%Mn}i* z$n;^Fc8LXBKFT%cR&If%m?r{NwJ&}E)n|fNqE^Suf}rashYuo+QJ;U|MCBu@817&q;NX>=cxvH(e5&i_;N#FQOD>vMi~^?q5-fbI|r=z2dB&t+!E}^LPd=vkN}SP#5dl>lomX{1-Ikuw###fZieY#~ujR@F>SN?G z8Qi+FD=S8KQyvTFAbZ01jweSPQsGV0%%j3f$kMAI{Bdk~qSwZF`yxOlzDHM8YlfHUrm=eSa!=I{ z$~ci*VF`v@tu0)cnsknEdTaE{Ay03vdh0oGBWB{{Q%%kT6qC2q6@f7G4F9*maX~qv z0CHqwKEXFS-8xueZ4K5@GfSp5BIyQpNyAL*P(L_kanM%99KS6pIS=)DzUVSubb%u~ zXw+IVMQKdEn)J&bkF(qpkO*IE38*nYWH$YElx8QZ6c^FBo6MrtlDNLHUg5q}>dQN% z@TF2;;)%=Y9d{C83HM;SURY=5cse%e%}Ibf;ku#Tx`BOHqd6y{-c}0}6>o0r@|`1> zev2Hw$pv>Y%=v?nl_xBtS8wyk;&s(!bmKB2;Kw#qj$KrGK@Sr{?}Q2BQKU-KMU=)k zr~Ldya$CW(F~FD(z)h)nXj=c_ldZGvaX)kIr}J#E@3$c%m3B-eEB?nWbH-2Cb%)ZX zU8ltYJpg8OI?}(&?lp;I?=D_*{XfN6aL6+5^!a=@l3Pn%w{gAj7R~aKk&l;j<+Kwn zH5N-oYQo1m>_M;ihowI?hPPzxrBA!LPY|O75}R^^xuo1qpvR@fG2EFoKsndLD5rqk zw~=S0cz|?M294ip9P6IZ|HVm0<_WCNq<#s^59u$94=U_F*Nd2DF>GylK*NFSSsJu| zfI?SY>St43xA-6-i;^?K=ZO_f>80gqqiNe!{3F{amRwV$SOy5E{dkliSDZ z*KACWcFa|>vhuQ`_45SZ+M<`t^q?x9=m&eN%MM!U_|EBKot)$t3f>>y0gqQLd22=i zeI6_~z>Bu5Cu{2m6px*cCI+>$TjKxQ`X=|9KGHXpruf&W8`JtGcdYwj+hXo_UjlBF zSzrff-RgABYKPoQrYpFby7-%FqQ4(EJ>flT^ZVjW)#t(MoZ?5EB^t$`Ccf=mSD1%U z8?QnsFp6B~3{LnUn;E}*GeT$d2)^yWgz{_Y7q-`pC!hMTUbpj|3x--crE`E|EQC2< z`O0-ri3Ndo{`OerTVE*@rwJ@Dl!1=b+n~o`&q!*2Qznsl10a~j4ZjR~5Up@w*rQ*l z8n3)cOrWU}^5XyLN&{YJd;X zAJS_6-UD*%cWzl_yno{ciLp_WS>ns4Ou9XEEGx>3Nv)0W%Y}k`6-J; z%q$(lQ;DAPdC)I|gQOWW{DmLM*33*`B2?OTQ+NC5agnu?KWQ8GU~P@n$>>P;(jI61 z_>V16BO_<*LLZPkoav!6@JwwVW6AObfR0J04L;c+rYTY7pq{oeV?>#Bvi&{{M@ifI z%q8PZa~}3FG~|l0ZvKvPt%7v6_o<*td%3lbyYU^2wdm9FG2>7dyJ(+I2zW+ zK=Qc~qg~<4-W;b9-gef<0?0*V^vdXTZjk_Dj#CMbno3AsL1^rTXnmD^I&0-d`M-wa zAB#2|PEv3p2F9!I9CoK(Tt*F-#p2$TD2T1`gdVG>@H-_s@3OJcc~_3zVQWd#Wn)Q= z#fM;}DZ0da)K&V7(?gr1^-HCr6MZpl0Gqbe5kUtR+Zi~?nj+YF810ugZq4?p8}5gE zJjkJwoGm>L!Mt0v$QAb7O zRoEdg*f|6$cA~O0uRUqB&dffiwaDaP{-2zt2Ma*=>yCpUY;bwhl1@e?`MF2t^Y1M+cKkt$Xy@+Kev zY~1vJiT#FpJo?L!sx}Y7wUhZkPXmWO9HzHqr1pUj7`h_MKQjQM2Ee`~Fc+{hp9_KY z6`1lz*}b+)diUB%4)WG{A;{i>>>U(XXayeNz`nXC1O|6!`5zPGEc8r2`Vj}VsvFqz zfcYCPF|1Zcv|0eQG@S0OLe4qgdH`0gOyR3+uiMn4mYsO$H!jU3kV@$lGD4G)Z^Bn$ z4N>O7E^{*SP`6Lp*(d+C_fWI9vRu(&!F3w1qSKF*q;?*&Xwz_KHM%P@oi{h8AwXtX z%|uvlf^%fK;2N-GGK*eX4Oa9uax?`4b4#>g0SOgeNq)TLvs_Nh<&5Fl?15Pvww@Ks z%9=F%SIM#*j$l8by?n!p(Sw&&41SAqhq*KXlhp>ppvKzkRkzJkojb2$NUIcfd1AB9 z;3YaDKV9VZ94JoUB->C1RcnSP*&cKuPZb<^%aTe(qLR&V5=iNzSuA0w3mJ$NW|6&E z1jm4_(Wu;_FR|3`q;xsi`xE{1fqJfzM$yd7(0mcclBDjY^Nh${==+w`ZKv~3RP6Y` zE%USIx3ZtEle^qGG)^(~fwK_DTv<=2L&!HpbisglvY<{lAU}D&?rT(;xWt=XJ7@%2 zjmdt-2XBQ=eZZ=YCuh0Y2WB0R6sc)kup?40dHyP-Ri48_;m$^%Z68Dqs&Uc}F(3n&7T=Du#v@~e3Lo9)?RR|dUo&#dM6M_)vy zWaO~02r;&EeqA*)b{#=?eses5jNfvZ0j_=|B$8&_RRSpdI?nt!XM%zDcqjyl`pfe7 z2|!CSXMP;wKu^9u1d0wN{ttJRN*$g7&2gZ2JRJfxCG%PU%1W@`&v1S3cZR^3-9Z1E zDHU3Bfzjejmit|nmM|R{IkNoA$l^bEp|H6atys@tEPk$DlacJdg-|h~l>zLCw%Gda z0*CWie+dD?o6MgBM6iJZoQoakm0{!ATtRCgy#G^bOzkPdn^llnLiS;IRNrwqdL05J@4WoLlnzqFoU4(1 ziiS^|kRvC*qWaej{Ac}~fXNm@1i#&gEd`;Z z$CUI%kVM%e-Jzt_L6RE@JSFW*S$_6-t8Vf?LL|>qb>q*L*7t`JxM}AU{s{fDx2c~? zj7XZuGEDG7vk6Q1IS**)6}1ORKB4hWakl*MFO&ZMoWlSWSXhGa8Qo=({3%B^c@DfP zS}ID-8)v9L7v2nMl=>3p^nEo9N}(m8!L3SqBS?x_(hMcd50V_EYLxUykmTrju9E&k zlK+;gZsZGHDRm?(DNt&A)M)A>Q?Xt2s~siMZT#v)pQF?CDNfU;D4-7;&l1`{!LK6` z1}2-cx{xTlZCez&d8|=r%7-D8cT?xSggxUg5~pP-G(|~I1WArUW0f>FNOBZ9QAx=l z$x-MiCB03O|CFol&c&hX`l-6z&om1C>kTNR1G&1;=U_Mf#3g?vl0Qfzovz`nf6=W3 zd+R*gzrtl2g(?_DP~;7l^G-oQ6nf@ZoAyNs-3m&}h*OpkXPRZ{)9C@Iu0qYcwkQt{e}yVP>n3l$7sHxXaOYL}t*H7S;=abkK8rl(_ZiP^jx zj-4{kRa@jWsX3XJCQolq%uz}M$Mt8|{vI?HK?DX^WMjh!fh~yNp!}p&Xig3 z|5he6&6JspeD!Iln+Jh{f9UDzX3Uy~IqI|3(fSIF`w4fuL;pK|PpWt5o%)e)3#ZYr zxW`!{tjXfzO8hc6#@U5W0JdD@+Ws)9oy zQI+r1?3HGtG|O=2yJH!&o*-)9@8FUXpZve(5}Ao(AaS@?y`ECP8GiZhiU0f3DFiJ- z6`h#o)wLm}iBY+qby~nQzxqSKG`|Tm&4o7^(_EyVA7z?Dl*`)&)9lIzm}dA0W14f9 zYdrgLd*IIQ{F96fe-aE523 z6Zll9>QN*zdJ|MW2SpGpEJPc=htk~r_H91L@YF`p4^z762lCLgPdIc5Sqg6=z|{6` zk-BMLkg#9Yhl^BIi~z5DNtd4vD}7pvyYE4&5fz=|ue!xahytj0U*8|viTA0+CYCwm z6rUN^`F@`{LN@ZyI)WvdYZ(kF|A+LRZV_%QX2z4ze9?yeH315=pDou0Wz(h!i|GD` z>9EO<2OW0KBi4a$J*Io@vHG|2z(CWgA6tI>GX3Rc`=U8OqPJ#4{hw1pGIBt=sFjay zmA0Ki{)}eSGMMWVk)d>z6Co@e`aE@-@wS7YLj|#CX9%&YQIs-Z3qgGUR;MyvhkN~7 zIJYWQ7VvQw{l~Eln$JPousut!xoEL$|78USLSyD@#Xm=&Ta}QE^s%C#{^O!Gv`L%4=_h~nE5e^{lU>;b|37ud zKN)#OCDQ``&W8-UG3oakII2sH$#IQI=3Z}KXvd*eIW0u~@bAdn#B5SWnxv%NBA0Uh zOCTwouFptD_Sq8BR{MaJf8vRzMRpVR+N0pC;x72>cH(XLEAS8ZwsSsjrzAO1rn(sh z-Y{^ByS`q|91Q|4wX>LM?PCvGYbWw<%zBGHc>T}QkM%`U`pa+ZONd!dRRY(!>qms! zSKUfqIR6A+);%6-o*DhsCpcv+`&;YFRWa6X;G-IeyLlXj;g*0WrNQ7H?RofM0Q65r z^3&C{KVTS7c{srMP9DH`ynYPh>(gH@u`eNv&r(7%@``?haSdH9*?bi9$L(-iFwBYZz1$lGh5f;i&^yGroM_snwe5I) zc60Z0cxWpx_fjiKGrY+8dh{Y^S&HdEQl;1M7I6+pb$L)gHDh3N3vK&mztSGBcL zRlGq1X>wRAk6A7^xBh1d3qj91+0eh8%8O3Fhw3SlmS0R>?0x=;Y&cW)24w+Hpp8o7lZ z{ZZ?+_JOwSU|b?p>N)X(uAab`wt47ls(8H2|lC^Cz&xbV`;jF6zR>RJ-WeP_;IZJ;_zOJJq(``UCtu z>C_*tuSX4y+SKz$YaP+8*7tsCjr|*ovu!tTL!N^3tFaa?#`r^?Dk1%ZktQ=7FA~_8 z6Vwq?@DLAuN3mKfui|vh;&^=vXU{K)XKyG^5D4*E@ABj@MoGe+zS=H6bSq#}nXTsT zO<@>%=Ido4-@>AL+lpKOxq$^P%oe@%i4SEx%Vy7u;?I;PXAXHkdg$5Z2<(Q>SR~Ag zU$|n=7kgxtbBW)Ow**+i4RuP1)_)~M?)BQFu82$chuR1U-ecr`+l9CM^5P{50%0|i z8~hp$u^h&d%24~74#d>#ONUP)FBGRK2--^F_c?wKEG8#1Rz)(db!M-UA#rmoI%Bc8 zn?_F2QMlJXZoKYB=Lv4q3-%i3`OmU-Lgfq(hHj2+;%z*xnHb9FyCdA#XZs3!EwedQ z&-jq3Pdm06y%Fuv}I;N zopLhB75Z=RBtxkP8y$78KC-Scw!l1q!{|+2tH-^CNO|hKV1S6H57F(wz|S}I{68P$ zu?7Q|()NO1wE)!-oL`N=qMZ*Yh$s0U^yy6byK(JuUWo$vXo@Nwue@Dz1Fc3RJ&`uegPsxXyc-(A2SyyfuAU)o-?fU2Cl)IKkq={(>ZaQ z%`LE)}{~Ds-)X<`)w2OU$Oy zYK6jHpp(oUJSTZEqX@jB2Y=VmP9MYsASXb%Vap_B?OZn;GK6kK#k_0TdKFMNrO#v{ zE@UcX0!dpq@e>D9M@&V-FNN8D?_kDOBuOffjPPE0-Vj9xG*5u=O`X zLgd*`0^$w63v|#4aUsAT-}d+`xKpf>;$B0+1S`IwpfY%O)io4U=^cU^oO{-K-}nrEhlk@r6i+BOPq5n}{a=p;~RYv?v!PMS#lh3e>-Iy$BriV!Mo@Mxw9&>}rE zJefBsyqqq#?pO{mRMz2I(#&uLW35PfCHowdnD76YgtmqL=a4E@o0fpi^bkJz!iSlH z{_!Fsg6z2bo3D|(rVu)(+a=w^;J4U)Fh5Sv;0Upop0E--)o*Gi!t$2*hE2kf4D+vk zjawZztm1~)Fa0xq0H0(-0dcbJPF`lK!>4^=e1N=IzauaDr3HbPDA`SL_DThUW3m2; zIUm7r2ma2n-RHO>U4%hJz61r%|XKB`(om>QpHW{fj6ye^d?+}Us*`_TN6&Lt> z722326f;DS{HCekZhefYIcWvp|0AG6p&c;i-}yYObX*`=+Z;b`RQ7K6Jn==%SM?Zb z%!&x*Ub9BD6fZR{xrVjOv}3^k$GeoBL>9FbzC9{kf>xtDdza3ml6%Y_`dta0pb z>nt^Qi?TxQuH$GN%;Hd8$O?!u!9Vg3!!g4F1fc(|ckqS51Y6!ltqR#{DxFux1Dk>& zMm_)DgY$~YttBn>p$0=t?!Tjn{u+ICh?NvAsuR`K?&a?XN_QFEBj%}Ms2{_`nNq(` zGpsr)-4-|v@#|GU|68~^#+`eR<0;E8*Y)q0k>r1X*+vDCKZMY+ZrVi@2NT!!#ki^f zD+pt4-So9S0Oq=BTBU()xi(aqfhoV=lg6bQktM$zN~A8>wm*wp@`leVe%)q40ruLlmQJk37OmzU|bq?(x!-E~PI+_Kh2Xa@_rb)kCnAuR4mUjn}V50S?56oXGnA zirN90p~WsDocNYMDdxsb+^Elq2GAUC&OM6U3Z_ZhNB-3uc#^t2OyLgt%KohFjE~A8 zDprO`^+}ZX^^wA+7uYn{;KnU6oheJKX0VZH&#%>=s#^p*_ePy~l&*VQPyRocjbagh z_9SRcG_;`jxm#fm#-<#L?8sim%=UOCwU*}4Ha^eHy zeg8&NCa%|zZgU_nPEtE&H)TK`RzmAEB?KUUbs)1cAU8P>CFpNxGn1BMt~wkoam!eh zcKdukPxU|9GRN|K8&4kk8|6vtzKB_cr7ENPj+|2$xkH${2s6a9aT&_aPoE+$<&&oa zzReN|WaagvDT-YQ{|pJphT_kz3ZZB%*|k$kMmVr&x0ZZM6a9liE!nF}OI(Az$hE7q6nxET@Y!!x zBm2hPVn^<4EM9z7A8qnpzJ|xC|F+W_)jMntHm=7jypf~WFpL++mv6F{7Jq~yEn7DB zvVP=rQQ)CuR;K@vmIK266+95K+GYVGGn>^Hum34;z{ADMYbKb~)i-an2p~D6yjvaM z<7O5muY|rECLbM7JnNEgY*I1BTdE5Qxdnw@Y(>uolU*q|@|j9aWHXD3b+~5yA@C7G zd87U48)$%Fy>r`y-bArZ`Xh6`-*DLjjF9>V%9OAmZg_aJ=31-f7_#1@hGX%%=!`!o zdB~e?IgJDV+Brm=P4X>Uj*8cR+a4eMHVzqgUnc5O!*KDss|YpZtaco=35-dcrO;7M z_KU0r8FWecb2PO{R?<8}L#uVzewjkJf0Z-4$f3W`PE={DBAU$UlGou?haAT|3gdS_ z-w*!p(%86l4Y7OHJA>+9SI@m&yR$H;G=FEN=;%>Y>P5x~1U4#^)`M2Fn}rPdWB!-K z^C0G9uk6b81%W|BZK&FLZWtc-_YjyZ27Dik>V*b&g9CdYY@nDf6470BSgM|L40d)>+a~RB&Tq|IH z4~KiN+e3xyEZi?VL<|w=zb^d$5dfW8f`P(%mHrL54!0@s_RFHl2L$ZyyoI7fLw)@l z3;NB$|6P-ljDOE63=U|r^SN&UCFJC?@iL2tzW&D-f<>@97Vp1G2M`ug={RL$Z4WBd zb=5dDWyf1wJ9snSdPl6j1r`;Q)zdgpl z=63^oJOFdUQ5j(V2PzWe(R5DL#E48XRYP+`!%pbWEHxrFImPTWAu9d+xMv&S)qR!R zk5F@N;&<1F6BdJul_VnhEG)l^VmRqU+!+dI2AGsmQgDU6#^U8yl~uFPgN=e-KO#G8#G~t~AxK3Z7*v}w;9JKmZw1ci!gNt~cbf_g&Iq4w zwPh9s?qNkW&@kwibj(>A3pbKFp5Z!;sKcSGHx;5G7Wfx-v?1H+ z!klMmEvHXEHv4&gqc<;Tc&B!I{}>;a^!p3`$NUi1?ocGZU0KQv7`pS8Q+OgxjJOND zX__Nb%t6A|0lM~tTh1$+Se2sYPPus8z%e>g~>PJT(4vEmAP%@ z$P_tiA82c^hiIcTid%Kfz6bgHkDMBzKN^pWTnsbPcz6(>3d_#P6AHy|^;;$r30B`S zL9yfoX1HP~Xms2MbZUFi>BmLqz0DNkv4M_{Vj-Z~cSOQM&@omG!dE;ip+{}t?nNY3 zZ@nU0wgJuk()A&1!}e~n;s22KCh$>J=l_2|Mk6v#RH9KqqoM@YXkEZHD6K<9jXNqT zidL#N8L*2Uk5P2A=->m-)D(jxDENfm( z*y24HKlRYH{n8}2aM#OX-tCegq>&MT76!Dp%>~~K*EB0eK{#`uNp+C;esN`)@5qWq zL5%3v+a08EG+aXV8dxlQ3kl6De`we+sstkT%Rl1o*i+~vF1|CSKgC++Pq|n3CUsQe zdMYrDunKG7p3+CGWjwI6fwJ6<3+DbpDizl-%o{b=GCieCpYz#0<0~th5v#01Id|Vt zND zioxhNmrXIS3-eQp8aBwxQ&V%SuQAUCd1~obuTCJUW1Z3Tl=^1=cMCSJE-M@V>wigf zzFW|TzvBmGFS>|2y63M?XGh$)zwTo?wl~K{>43tF4sJo^$l-8x_)TgxweFld2fohy zlwYuWNB&{=?S^U^SL@kQYvvGDxBhjm-~DhKLhx|W2*Lkp@qeB8zpg+WJq+{(3}cZ- z>!QnSsOfT4iU4)5uzupOigw{eC)debi!EFLZ%?l8o0jDv|f$B=l176Y9voQJJZ!LZw4X zDlL&7vquy-27izCrlop@M{SZ-p!|_m{@UC0F?T1Z7ot1n(zLDKgxA=LFxA9q3fr1< z5-t=T2%Vs?Jhcoqum7I_XrH?-RBJEOU(v{y6SF_Dc;ok=md?iFjaA#x;r?{9rcY|B zNk!_b^^4T|-$^J{PD;TQ3uRery&y9b(}FcXX=8aAdE5z5Os;n8vPl z-IlbiTu0J%fQq>2B=+|(4PK2;jL4w1_Fzvuhaj@9sQJTg-M&gM<%pP{_}1`Ax_O>W z&JAjtw45yweddU;$U`kvi60HUrl*AUe2$0tz}?9ZDzyPzD+mF1hH}4xV7Ygtx{LHN z`*l0uu<%HA>2P)F@B-(C5hIjHdZ9Fn9F9nzRk*L$BV#sk%9|Tl66}yzWg8%H9R;RC z6!;+=-&SrI^}y68k-j7pBKR`?Ek>wdGFVSE1@F`dThoHBP4LMkS%GrszlSDLM@F)&G{ zn*f-qDC)~=J?P}$#z1ZCc^IH>D)kAzdF40bw}dn}5tVojEJ%MMzTt=w zRhjFdVouwgKl@Tv{xR2lGhKLKC+pkEo(-kzmlJ#luOe&KBW252{a2xA5_ z`VCjYs3qxapQX~9y_YIb-J@e}{$tW%-fWLHEh_I(n07XOA)0VspX#8MaxGG=Pl}U* z#F)o9b}~qwryrtVQ`_}9mcPth@{09p1--hnj9$4QN<<2QNzYk_I=1D1FbGY6vdUX=1`!ox=#7eDTF{E}TOP_n1dHcrRGO#I`(_3Ecv4fl@un+8zpt zn-uK+S`SkLp#Di7k)063MtxB^dT@K`tqZE9sJkTy8a%s-S+!hCXaYOwlTFl_CH^oD zx%y3Htt03SdK`%(r$=-vG@x)JW5N#rePqJCwT5?mz~bL63f!#B)#5TC#i3)=edQ{wbN_lKiQu zyLx)pNq>j)w?U$Y1|Wk2^aD$uA&L{3cxLi3LJQk70=;acluqYUg?sv0PfxzX9}pHJ zuSA}(?{JBpYK+is{SE!R&_J42$F%s;{GEu!gL6#q|DhiVepbX*VP++HaZOC=Q;Gzi zDny^wMH37;YL$;h!-dPMn))B5E(Nj{z=dL^X@=HqLrvML{W2990BQ4fQOZ(rcjOZwI zC-|2Kl^>`-v%@*>uwif3dchj$dhS!Gw0_Q>Sj%^ggBwirL1i_w)1c5n?p4;c7X!yrgGDXfCT!3wA;Z9o^fKM9)0f!K!MVyRx|(Ly%x91_ z(>P;|_vTF0y*c;{@ESm-pRj}ep)Pu;MW6MNGOL5UfY#A`t)g7|lJ`aMW0F5Q*=4!j z=**ECk;;>7pXYs%Ud+Uq4}!=fFPYHGKu7cZw=mmS!H@OXMkBEX&&4RW2p1M-x8BYJ zMH|bQcbdoE{$5{ ziTCL;S-Va**kqGCoa%ALt|hk!ajqB6FqMAjOX1utKQoPo7(~p$Fa3u=k3sn8zj{?v z3npu!bXrOD?MPv2Sb{EDL`7O9!zhU@qI;mBD`vP0h;qN@te%c%sdrLeR1C^LDvPF@ z$gZjBUoKVCg`~1aO#uIT;ZMu;2V@GIvX+KW+3=9kMbtx*$53ykIzX$j1}sPq(?<${ zaDb9cjEGMquwbFgZMCH|ON5(#OXM##H4vdn)_W8s57o?J`fNGnp=Z#jfEAU;CW$>7 zr1k);oUZ=7iEba%rVEZlI882UW~CS6OQ*P*TX;J}C($irNKC$3e1bH(r_TMU1KWMT z@6i{-*Qzg$0@s*6L#=;upQ-gv^^*w;c3SUD+7h3(R6hkQ3qTKGZmDtcwWyNo3M49_ z&xEe^-Q&x=x1_#1(ALy9)2Gc^bA1Q<`cD48)%VHYef#uNKwUv=wa=$5)lb*N~;LSLV~Yt+~E0EhgeN z_`lWn?B9%@&*`T?&yQ@vDsi7ryI((D>B+(`@yiXIu)kJ*8PJJ8vx!W6|I{9m$tyOq za*k0sZPIsj(ih%2Dhgk0`5q?+w{9#y3T>2@7l-iFXt0i=u`xdphrRCh{*fuLDr~x> z&e`=zfy^EOU-hX=a=C4*5*IAgsqhz*<50JK)w_0kko%R4pvB~>bEM@xzXxXnQhQ_}|OrFq_Zc4te|>LvhF&3*JS+qdPzN(^}K zP1qfENUC`~`?%NNKjP!Vy^ptHVlZjO&aEAn?VUMx#?Ik_EyHN)`9`!f^ESC2;uVkA zF)$j){6ApsV~^7K_(IFxN9xVjeChDQjx8r6 zHKZtVN6irdRgrwuRPPOX6K@|OH*$x+n>_wO+jPZbNaB#hW^wm4o7_VmkZzMDH-aUZ z`L|sHL~JI33dgF#(PHk=1^sok%<9yP=4R;Dl zCIM;*yJYtqs!=Veez(FM-Iy#%I$x& zYUrSqspi8xz^avAfdR^fHQkY@B}H&#Cu(wR4XTOtO2cb{M92O5YTEOp8hn{8 zIXSFGTuvW(XIKI<8UYy_j&C%cS;gk}{Hy8Ao{(I}0%|k7hOE{3dqv-YhFmsz>v;4d z;ugk&O?{#}<%SMS(_e0*z{ZyoEw8`C{7RjFz{s55jC?fT`qB6+ob!y%jnZwl zS9?a|FeaS}+6P8s@K0M`6K}kh9+o}!wSn3hS${Y^-*T>4h#1sF#h{woSBTSBh|^cN zQ7nN~94bg|exHOV)oN#dW!kys0p2eH-p6ut+gwKZ@ap*2>R?#a^s8>L=@jmPn9KsU zNw3ufl`s5V*0IkQSVtY#_eDAgTi^7Qh!PtE|N9zv zf@=5q$r|^I-C)96fl#+an-uY&m+7-(Ibx{tcq*pSYGnK^$&>zs1kZ5P?(^x)s@$=r z&&>-UR!I5f?ntmu(Uck$m~X=`e|TDw9t>56I0AYwE^=30EBL4<=>y9*43z3~Z;CD8 zt&uboBJ8!vIPuna?dY|;K@}9IBwk_dy;<41wu0;+s))b7hQD+?Tmd>~N2*}5i(md3 z=fM*DJ)x_Ab?q%NBZB3?{(C>|D^S9}`fvGPof*r|_yqgIKoIGA(C1&9e`fYy`_~~P zi>6smxr_1Uv2tx*uN}23DQLBfW+fu?Xscggy6tWuw*|yz)9-;Hf=m9IB3NP;UE_J zi!01$gw3d*wOgF8R@6D08i=fYDO~QiFj@2W#om&3z z*Bu>-@&8585M-=AkChLbu3ZU6{4WkSg-PjW9c{lw=6wf zg}CrhCgm@us!KxRkmXpR{Oj@{dCJ{li<2tAk%Kl4uE1x`)l1L~6}9!;tCW=t`TtP% z6VrvJ*uboes^+QIi}#W4F$N{7tFctMYy_~9$W1b(3J6o-T# zAf6;a+p4AWb$*en!cl}atB#9__IgSh$}JxF%aJi)ran2pl63%XV}Lmgi^^PodemL$ zp%)w;gSMjY67>5@6_&YO1iXC<K%2s5%?2ke z5N$0dV=(ItUgd4gXPO|eHB)-qn>S#W2v+Y~;qM2T<${IIvxspPtpjF4I^DjEjUFcY z2k%$eb1=igisGZuXNi8)eD%wF+fm<)~f$qz>xjzEkw zEpsLLIoq)Z7eJ<3v^CZanP=L%$AVvN(=FJm!pgd|n#0{&e^OoThg9=}mi_h))p9A? zH`V%xPcaP~?Dd9Hf=eU)i=mYMW$o-&;oegQ>Oux#8eW1;tM-@phS0-%aW;Uv&q!!= zucJYXqjrVCqq#)aMlvJGcA-R_r9sr9`o4sPj^c!piXlPnEYk~dHGbsUK(+O+RO9zs z8|d3G*@8oQK)$7aF(QHaBtigCioJzp>C9o(g%+F!PY5;i9gc#Y>NVg`wQee>ZyEHd zqF4Jw@Maj)u@!u+a&1l6tAdANEtElpvYHISV$!2Q@-VPak(aA~+Yhc5v4Z4YhTBP1 zN;%Z0_zp~Nsg#1}pK9%;RJ?yq3`Wv58V*hZUt4^`cBVex;7haQr;%cj_=KH+86^IF zyGns0Wmf#KNIl?>YETqqe1DF{+(wJ6GD4{G&z51R0x74)z#3j1e~8LKBTugtCOkvX z={EGwCLUVih2J$yh8CQ1e^yKx5Kk*}BOozrCmJirtbdx573*c>^U0K)oC(<@cZNE- zbx}U6jsOC+Z4iSB5Soc7j$^ioz8lGNuSdF?E-6=4uB;S*(-dGt8HNlBvjFwl^oT#z zbGea%VyjwwVVAnbU5y|sWW(6`KN15uAco&{g#u!dB^hU}Z#s9C!OF8R9iS$U?wTR@ zo&;`dTtDhAtB+C96#wzW+#E3u=pWubFY54o3z&&{%iVug|Hye4_b1g8F%=EEE{nv&)%B9q%<*MAMWZi#c#`aBNVgoFDMkf;w%( zQf$}ncQJifRhYW6igB*^Jcc|tSNutg3vc{$M_=NH7knDVkB7b>Js%Eb&=G?vPD7Q< zVCFLihmPK0ogxCMNX%&d;Udo*zJnqLt9Dr|3G}=zt`aRG{M1GySS8ASJUju|rE%Fa zu$w|KIuEejJlNd_$B2#0v;HjvgMk1m_h6rN0Xq^fcZEl3?(wlgkj*mp1(pWRcyuCy zsDX=-yc4~@_4KA5ZKiDx_yF^q2$&xAZ;pP6@f>7@R}@TpM?*AGR2{!l9YL74-L`0mx_0D?yLAG5@hLnKiQ=00;~Y>z9!H8l z82jrF<&6%e%YQ?<`iTiN#nZfMaO(0+fZlzXwxNZaxzZYHwLA?u+%X>0n}^0Qg>&Iw z^CO1H4J%P>7xLZRt6ZuvrUB|=8h|0->^iD92iSdXW2?lKapeUGxSt}dqfT|WIo@=g z-UY0~Ou0G6fX(t?t#vVst@oFQV6|4-IUekYgJNLT|MvstJ|Ty@<9T?#M?c-O)?@mx ze%on#hIZd`YwrKRPjc{Q0oc!?Qzy zJMj3QI{aGDZ1N$}C6FBpnQ7QTfun61U~CH8T5H!~i=)I~I5IeLzH8aHTbV_4{zEpS z(;mm-S7#G1M(^A5o}VMsXs{wl1jK*eCem!T{xdDh7`kW#x*+k^AF9d-VACP@tqaFW zDAK_pwL#-tnjyMr6p;HA1?RY2Thegw0Wp$@;oT1Okvm{!bKUdr>d-O#w9b~_H<1<<{hid*?Ig=3>sj3vd|z?0PNko7D={?K{+}Zu6LdwWk3r#jPA=fNDm!g{94zp@UD{gVv@o zxHZk%ES7mSH%Xs&e#02$gRwBmT-sJbzX{`hj$NQxxjzY?-9dH}2%GU%P)+uzZqsM# zp+$@9szR7W9;VoF80D?5l`z8uXVv>ba(RBKJ5jhqM_iQRa|HO{`bO?|3Huf*?}#er zM03A_&Aa3X+TX5GeMsv+k3w0z?>_q-Uha(r;oza9zSPtKUHC`bSO+JjT5SGI9jX?1 zZOC8(v!h`6c;vK*p0Stm+-AKnUCs$YAy)>2Q}BLTl{)CPi!Rm{pb`#yIo*xfH66n^ z=*7v$g#!X=_0%z8~Nk!ee@&mkT4p|9F^iS^Q^Xa)q;i4i%OXxXazfyj3S3)JarG1~y z3ifHttTS0F$hjL#>G{7Gi?*kqFW=&c*+f&9^3PKFx2X1F`R|_hU(5e(DgH8A)!4XQ z+|%e-8nS3mtRYxT?q|Z`aQl>2G}{9|vu_L-url|8fO`Ur6dWULnmY62KV&dU^x2oG z3i|3dsa;WKEUGU{T`@|3D;9p48a|iLERNEmp41gX^!J2ie0nA|ttT%^Z0L1KPky;z zSbHI5%{9ko57l}=*KVlU}qHP5TX{nx-1DLDTkF~Q0*(a_ZcgmX`Xa9 zm7nHv_)BD-GHv;<+%L2@Hk;UQ?--LAN6H0vw=1J_H0n1S{=yx7 zc;~~Ue${@J!#gqvD>Rr`;m&7$tY5qk9#!2wca)$R-wokNr}UiX!umA{{oT8^vMjsj z)#;_I&wn93;0rdLoH=eZ%RS(PK7G>79X&5hrL%`XQ+8I(o$|Qudk5sA1NnHPI5V5Z z4_JkL{{s8I7}g95sd|Bv+l zjMb)|{w@7xs+jgRPya=e_Y(b^-+`QchYz26dUCUZ1n_hD)^7y7t6~83fANIPTtN zk162rePU7uPnY|i|KUmR{()CeEJ}+gr$3Gl(A?HNV-LkNII2!zIc;zH%u2aVu~Nn2 zSn`8LZnDrR5JBbhmOi^YOh3-jr|VTc20JpUWIy=F3{V*%*}6Bk>0PST8bKgE~WBt!>4_AsHAIiY`S}xgBRTV+gj-NJNIVj~+aNJW+#kKK6fQwx^XUCKz0=vnIlY&0 z9f9aCY_pZs{AhJc;uYl(SNvw~kGgzoALb{g;59vz7;9)WOyKcs|9CF&pFd#v9X}mQ zg2bOmAr_(#h&8V4Muqp=^<0+!HVW<)uz*}=n7>K$^|4A3VQQ_mH~IUVA54$r|31?l z_nLTHJk_kt`q@N}t70;_y+Aj1HVVil9y>9XWK%HTeH13WepD>UVvlb`Nq77vmSmf2 z+QOvd+*d^w{3-gn+&yzHHz%?3remi2*Q=edN}L)i#3r96`9h+VMs9|3-z=dktoXT@ zPvU{P+}V70TbzNA-HwZG8lhw|gfAufq4WJgA>kp<6ZZ)bp_?BoW+;g8{2UC$0g!!pP0z~ z3ZKRO=}Z1h0wh0=`sN%P>l&L;efNWqE2<-`WNzKZzomz?pu)`@Nl$3nJW|g5qTH|z zV?Z0_runnG|L)6mSD)%fmEMF#Sqg+pn|{1O!d+sYii%4bX_lf>9rKEFo2FkF4bSGg z54gaHZe2z>a7?+vO&c80y#g6+-JYU@#1Ab#-hx*>OHq7v#b?S3I3waFebY0_Z>d1D z*R6!kQjYgo4NZC#Kw4%P=iqW-glrq|^-Fj`#Lp8%9f^9^D6)Qfle}hq#sz4q;JI*+ zlAjsO4i67L(lJVFx>^-lo*mKhSEqPddMjz7;wuzK4;?LeA;y$%Eeg?|(Z}3Dbe(w* z#J33RvlbJT zquJ>ULOBU*rCK~C-4hTte?!zb&(9Oppt0iTvHuHZtcMxzG*+=yUb9@1ZWsT2tp3kd zE`C$$fR#5#AK=v*(d_9f1Vq?3JS--dZn>7O*6qVt+cOg+ueXd^1fn^VG2-URT`w0m zpID*t_m=2n`i=uEsH{{%)+Z?X&%`A{z;7_q>I!DRqbh^@tfK53dm}hG+%E%PGKGV8 zk0**g)2H|TDmY+X6Pl(&Tk(5+l{+M2B2x*koE0`D$AyR;tOB3<+h`RyOJT!R;7E&K z1)gK2usQ_~SKcfo)Jc}`CPon2&s-w}gUVx6-Li)5(wSzD>NOt6<;pcu^B#4&Z|FE7 zLhj+l()2R?Z`fF=6sRb4pO|UiDZrtkWh)Ob6{pEEt=(O(6o#t+fk|#;Fld+I zv7YnYONXpB>Q48#hGaVlK^p;{oUPdWqNR^tx>Dr8^_#SmtsaT<8ts6CRO^*WZXdE# zz6sRv95HCI?njz!bp*ev#<^)YRFtd#nF~tStUEIQ=+|fki<6t5nkW~cBfja0v!gg) z>TMJ9l~0@EFIge|HH&{$HQcHeLH@MS-kt1$v&jpu@{8=<`X?1YLvm;d2JuUJZMNsW zwXofCvE8Y#oo_Nb4}t>@n-Z~I?=Ny3_#Zk3TCO@W!YS9xci1jw}_@Au@Cv;`Hm+*MRQIJMV*PbR=qsdan*+zI&2!mVw z3H&W#wp3F7>^4Mgc(L6gt*gvPutY^EOZ|&q*?X6Nsk4+O|H5=BU?=iYG^4>RGgQ(D z+Z$BpV*+)WpM(xYHOnh1t-cPf_dWA~G25WGQmvEGCz_h&&NbUiqpc6Yqk_`R2Xh`n z2dw0S$TKXsLfM8cU3oa0HLv^-UOJp{y~Mpv`&OEt>(BCpkBi=$5aeM`ZdJW zN>LSC?&?ohA4KG}7FyH5Tzfjw`Dce^Ue33>s`=vYVI^vz_geC*=`cG5&=xDjdf%Nn z&txQf!1pX}(^@`vIlGc2A;Wd3MDi0p2bEV&k{TXv`nkpQbGjl(OysNlj$`zN9I#d5 zaTSwI+-s#_m%bk8OQUB>bV?{e+50?OYW6pK2?w*hJ!J|3*+_JPL~pCP&r(#z5e1rL zdN5P)|DrxHkQ38QPl=QLrk{w)rf`>^hPU|_PG-4kl;lt2Quu1CA4^z94#I^Up%Y^I!HpcSv1X zgopTUofC70SoU7#+M}eBdl@vSbN56^ zH^+~Zs#emhDCx{DNfV-^E8<66?VwyIM@buY$yH}bF=s{o3Z9Mb8RmzPL+orXm=s5= z^nA=U>?itb{7`CZ(Q6FiSQd2Kv3N%ReLqooe0`ra`+A>$)SB|2(8XW;MYD)4PmqC5 zjVM45JUlquJ(iTO)5Evx8{B6{F{&L%o$=!CLxr0EgGt1x>zl*!! z?wQ6);P1u)a5Sr6+?(5bF)c#v#QKbouv(H*H=MQ}I=+hY!~aV5+H=b$t2x-6SX# znuzS(g0DUsXr$)KnfxA51_>r7=IAE_|155RB0%Gh&27*n6=$4F5AeJlk=UboUXM&c z;vb;QM@Eu~L$?tki9G~Y7_ahu8-1Wi9{U*xg}Qr&!-UKE)Rc*Jl^L81Y_f=|`{mAt z$=vQo(r4N|>NSJ^+o}I-$6rZ2s-*v_MTvo;g!_tss@erFPoGN@jMrg4^UN#U`)_KD zlej(}D$B z{=R|D+bjk~H*o$frMY*760p?<`->2NnzSbT`+5AI*(+9*;eT?7m@g&i@t@W=24?v0 zS%UxZ9x=CH49xJi{001X^I+Y(;Qt}*ciR~L(Oj}S<8Zo@kz+}BcGmaTsAo#fBMK6O z(X&DFApW8-dUN|?>7ALhL81E#P0X-PK#T`jfp{`*(#G!FpZzR z-X>M-Xu~V?NDx*75}6G*O-mgg@b4PfT%@Itbml;B*z_b9&vsF9pcpO;1%ReXM;lgD z>y3vhJ-Ag&vE(L08}~LbvE05TEZC_(f2~%R#9wLNonyFDn(<175~&<@PmkQnxV1#t zpmvGSf^Tr0EH}r}+b@gQwD50r5B4VuFM8kXMfy<+kk$opHS%)gP^DWjT;1o#rs!~= zfwoD1*G)&YyB*NrL89&%h0-~jE3vPCvNN1L8a_~5*aQP&;oi+P9w{G-0B%4eB>!-+ znZat4jBZ0>l3_C!^PV?9BBF=TMANGKmUC)v?nM#&e6|ecxO%QA^Ck42FacVlG0iiy zKZ*Spg{<|90pgld##ABur}1~t!pTFLS5;5mZ%#EN3zFLb*wMz<9jKG@q7&VtoR2Vr z30A$#i^d>Tz>!t+Sv2x;W?_B-zjNHnY4ExLaW2(A6E5q5&piu6d~T}|KF^&id|u!$ zH6JE?4mNzKt2{_v1+d4aa=hgu%(+vDO~+gaR6d{$5xZGO^;e7LA!-Zr{{pT1-9bW2 z2Y(kWUJ1QYQ;+rh2?I&5;!@X?uwXS3ySm*=tox!ri;=}&oP>@dl-TK3nCHcDO{=<* zl4|}@FWJ5mmXasfbFmh7Ru2mfMR852IXr08B-^k-3mVp8X^t7pbgV}@m?inRx~lno1dEFPAzH$5KC zg>Ss7&UDiP6E+-4_ox^F{B4Y6rg%6vYDjxx zE6@VLDUZ-5=v=uW@6&p^htaXD59!C!x~)-OPLAV)T*WG><7n-<=2okWNsmX#*OKg} zkT3esZ152axgNs*$P(5u{H@5KQPu*oRg{i@Q&XLYUD6&t!k*SAfY4IQ1#(j7>-1`GJ5~e52ItGEdKNP6;x)x5=(t*{& zqIqSHhE(u~(waNErCMwWKSA!6n}v?DyS7P1|FR0V^RlzOHbNd(_PlH#`CTJ}>s10Z zjUM#Y_+3KB$(=pi>z)ef9#gW?70Nbgkts9abvrScFdU zuC>&#e9WH^aswAM=0O(6L3bh!leQ#=lX_^jzP7xcYW)LTX$`oEg%o5chdoo%-r*~= z_o zQnD(j^OzmFA{X(Biz`D|1v_k#Q#t!)rQI7?;_q>*AFedV{t$?)z;T~Dx#P9 zC+MtRt`C{=%d*pd)R>Fw4ZG)GE|&POPpxee<9jMOA({1eZ4xN=ul>RDq!K5p6TUOL z;+st@Jj35?WRW-kSYO2UF>)4}8@1=&P-h`-zV zoz7^t+p!T80@iIK<5*X+2U!i!zfMS^fy?#T{c8v~zUM~o2acmWj-Bx1j$GkaFO!Rc z=1-Aq^kv9+hnH^-h}ZUY{nU5m!d`n-#Eq^-+)QQhxKV2Z=@el9glTlRbHq9Jn@7 zgKtE3uUcVkyp1GHw8~k~?iIB8sJ=a|s^ymrjhgsZQW*nYIA2ZNbAB+PSMyKnq*^Qv z)ZVtMrB?nh0jAW*garUg(;PxLs&Cr}(Q5gmhow|dU98Fu5;yXZDAv~63u$q>G*+1v znII^Lau+;lwkw-ht?cL}H*|BfQ8w{$^gc-M$jdbPDJy+0$>(ELP+h2MjrGp_q_BL zBId4OPC#6PO$51TXYiIy9;YxE=)gwf`&Cg=L+cfPGE{g=&^-nx`mRHII zyJ=GmBy;PaATAH@g|ge1wW|5s9MXiFLo@T&0Cwq_F-LHFfi*v7 zY>W$|Tq0w+>mVS_C2#w|0PTs-9`YoGh@bOlBL253Z@8;+e}dmKZMm^xyYjtZsu#Vh zhcc}YbCioY%8SgwNidk2U1=^|hAi?ztdz>DMO6tW2>}*n0C(lttzzj6AIf?00b@Kg z&IfnBge*3R5CBE{po_Lyq90yK^DhkY)53pLN0Dg4n* zBYnq9-gp~KY~}&!QA$iPzvtWNkH;VsYpf==KVnp&G%QMcqZ0Hlzqq|gMd_boVv8lz z>7Zwatv0F1U%McY2Cr`JwDKr>w(=0F%biI3;Ews*#kj-fSBnFwyt+`06MO?Z51u4HuQHdfKcM!}msj`pvIO_ZIkxlsx_2xo`U3AB=Y4@u zk)hnt`vOBBr-aZKsEK@m9;5{i2$$xcx}{pbk@k~ouzN?*FG#gE>vPQPPxe(zx(Vu; z-Bv)A^H@Mvg#8Y70-sUI<3m*Tj!=1-6dLoSqySV}x(8RQZmoK|MM+rdQOWAC^k-nP z_wQG;QIoH4q;CC&{(&?juz-JnAo>T;zapRs^u2m?;Mx{iws3&ST9#>}973C)O&n;% z4(+ijarZF&lE0R^b{-Vtd2Pyd7clpY6W;SiQ;gZfU*eOLG>-E-4T8+yhKLsJ{IQ$H z?fmg$Lp%Q*fM)0C@}PgYKO#-c>AZBb=5!kR1qb(G{_J2@Qo!;=A4JvB(gd>eyLb3S z2TB{qaXunRjZyKRtY!o9K!enFG!LG?k4`5SYP!P>Mr9FumbNW$SCIGxh{*5UNlgfd zAMO5n?$_vUcew}0|5plKrBp;pW6ueLe18nj-Gc7`0e%}_=&-G5^NW8P^&aOOk=!fa z7c@pu=50OAp8@S+BEkbDOevTyXzA8TzPwvIlF7m`y4=K?gsgzbjK6ziU2{r&bsWiT z8OxkXL!~ZS0h$Z1UJI!_~Wo?dnNwo((!a zn7?RUGWF5B##3XC(lltQoUC$hl>;4hBHZ7Hm1UFYXd~M@GW593r_Ef3J4Wm_|-%z-pzSy{% zj#lGvEi&a6HZPX&V4;Mblpt{n$teE*Lm}}VBu5D-d35w!CwoMzawkfnw%!G%;Go19 zQ_%T1tWRE^XYRrY_}v=aLs#_JDqaHscg6Br?;vc)OMjO z@{JuJc35cajfPc5o2rnkx_*QMY@T;I43c%mV|N0_bHOn}j^7geQd0>)NPg?og#*=v z+)y2Q#Dyrr`cip9Ocb$OSt}sGs6oCj!oK8QjPY7|HcXt5+~E=#7jY4N!cI^9)O5OD zO*5LhR89_Yx(+w=9s6ys8x8j4R&qVbX(YW-Ujm>q>52Z=_P8u)RQ#Ekp2C3L+8Z0` z8k$QlqrD&Do1K&9Rrqb;I-+V_PcZ?`Wbt9GG)kp-P;yA&wkh>QOT2D2*`+5W*KC>6 zD@T$+FaBex+%G(oLal=Oy@%3kP`R0ztr2e{jN>RxYWFDlXM5G zE@sZPyfFEcmpMR6r^Iom9ymembk+m{3W6bo3dIB1?Mz(MVa;~SVzhQ+u`P2n8If+e zqNrQ$FG=w`R|<;f+S0_0jf!4JKp5$W3riuENg-^AB<1dkD}+w`6~-59#9!6ouWA5d zVL5RW9Xec9RJhbvFxFqM3W;#K$g*}Kgna5QVW!7}(d*8R8zvLX%G=~GRYXDWo<=mO zQ+yHTr+td?fn3GzS{aZ+3w(1J41$X_{sgI~*4scO^$@Y`me)CO4Bs}p*NcK^Z% ze)>p*OFSA5=}YW05%$kk*7DP_L}TJqSnMCeVjJ$Fj*UE2PeCm;sC-lCH{;I; zrDoPm5bf56UDe}KYz{Tgz&g*K5Vo6s?GHN3FEyfwDK6`XMMHUc(t7whz@{G1c-< z;N(8m@M{mX(ZfJ{2$JjHWSV&VIMW^~69JGOX`VY$stDzh`0)%W9TSwqbqbO344?5w z3zYP|%Nq27bkN^!^j?!d;7wWHQAEf^3pA0gQqLy#<{}GgrxfAl;NHir^4f}w^A ze_*mjE#8v&oNo2@FqzJ4Fs<839;SGDR;x?aHa_>8Or=z8OI^52M(-PtJM~aTN)HmY zzRNEinYmq!!D2QhLMH)=+d+&e3qVIG|Tg zgv0-A;^p;XJ;4y6%q_UfdLo<1uOCYy@KfgQj*==jjV0Njex@b46Z_FYXNDbAqK-m) zQV9Nal?P3+ArJ6Oq|YF4`JX*Exeg9xP-`^oO|={@Sa^%JB|p7QATlycs&PHzEc1La zmH*~@Q27df6_tKLP}#~k2F#e}cVUOhu%}v{rFl%;MZJG3ueeZ>HwtaIRKc!+#MSnk zZXhM1hzjt43E$ta!hfvnNHuDN1Q2y@aDi%pGf3`B&2%;sWg&pJ#>1ajOEt@DcVfIl@YoUN zC2&iS{NhjIhmZK%ZK=NA$5-*Kdr)A-ciddqrY z@)FxPKS*rNQ&71%E$nz^&=PJ`2@)^e0*@Oqt2VSAgHgya=5(W*1_fT~H z{gOWI<}}_fqHW!j8zt_Hy51%3^1O*uaZo6cuVR{Ki)%}YaR1yI7VI)#JK^xo?g||K ztXhF#7U27p@jfItL7Ub2j|J7CKOUpnwe<)5ir<(q z`pca*lRBtv{O{61leZFc8^jpWjPBTa@J|^sB1+M3Ln6A^iif!v$n9ZHUd$}#<4eU% zukUtiXbo=LA=Z2gF7~!0_huiOSOWrUX&(dpwY4uu*5eSO6k8q=5dK2J7>@7jEq7U@ z_5X^0SJ3*ubNvsGh;D67o?z}DJaWVj;qg8NJ-LD;(*qyzAU&`(z1iR3>9Dtcgb)M1 zRfoq2F*i!S>Zcz&@-L8K&Q7uR>pVHv`%fWhy7iAGnblc!i&>p{TS6Kg3mlQgemlwI z#s5_v#RRZ_+O&{{s(#w{&q#x~lu>wL*??aQ11aOPOtSX1a?rmpDjOdiRZD=o@8CL| z`0N8VE`B}L`VTAna=iwX+bb>L?y>Ax-BmxC8(+{1LpjCd#T&2znfHMj^i0DEx)XhW zBEO5qZ;tAiC~t^mWYd`>;#A*BS^0EwSs=d?Jd$-BOykw>$=cDV`UG{eqLKv~r-zPS0~& zZ$THGQ_@An{$VH)-Ul^veK1+`J@zHqQ=tqh3a5W&^lO9)LFGBu!{w+__ih+>nV5eC z(>p7gU)Yk;Qx8>MvOnV}jz{KktUab$7nZBHVe322@uaXF3l(x6TXhjYkoe1WGR>*h zByVmo3-H5L&@?%*FKGsP%6bAF#VhxrQ8b6&>9VR(7LRK&EaldY4U)egl^)z!vDN8S zOcB^%dA7n)+2ohAWz@kY$K@PB;+nAPkzufEEOD6W)+Rie!}u5^%LT&Qr-ZoNxS?u; zA7+lVO+1e&@}&Z2pQQ>Cv#bK7GEGQQJ#X|3mw0mWW`D@D%>rAZSjKdo^m1S2K{0I5 zv51Oh96^cx?%-P1Q(UkgJUr;t%l3*U&YJtH#%y2tUbZ@4)8L~Ock!$7m1%#UY0_f$ z0`Vw6-PUu22H5ptqBwM?Q!O*;U=UyaKcTzx!gr{XbJUv9sihwZbZq%dvMxeH%-bys zZP)!QYU^0}z=xQG4EmM#JNx7J?pUCMZ+N$8<@;<3py7BmC1X(_k=7a?TsNON3`%Jp#V^%~P@!9XkLTELK3+qi^5sx~%Q5bOT2J}aYS zwyL^YkCGtMq1ogM+^1uq2W?@cn(q1k;cJ_|s(r79 zr;+IlT(AtbwdlCL_4}o=D~b@P&uHptMdXjz__YTZF zd~>}esU44=VT%y(Gl^sF$@%4@io=R6RUvGSiq^sN93|U#Kit3Ex$2v2V#@DB#+vXA z6x@i6MsO%N8v34YsgR)xwo^f)MZrYwU}aX#D-J0#lC|FisuLp}NhxBa+(Du9GBIbD zt-UxUY}}{um5bY`-BrGE%$mg)jhn~t<8@KH3*qK-M*2=-I66dY(vo*w8}h|S_(FK6 zbz89P&RV-An;37IXw*(&rir;LS;}ecoOn|~CbdRN0x>LX%vj80HHyp(XV7RmExMW* z5_RU8BbI{xLy7hFHlD%AMC$Rs;8%d7$U?)n84KswDo*HLPX|XL)#C5fO!FyPzTR>X zjO$ew@vv1rQrRu|;C|YlW!pXa1xSPhVB-VB(a$2DMOaX3U{e+~?)qc4U)DXp~MpXJSV_aF26*LZuf zoN`F5i>Alhc&F!XmSYt3Ad-){EfR-D6K(+S)!kD!&!5f>L~gI&_)b@(qv1DHGLUUX z{NwcD&B4N*m27n}Y{I+$RA%z_wC zHWzjc6EnipwBv9uiBn08>#Gjg8en|9wUfSDru}~pC4yfR^%ZbG-=tz;1+KgMyii{q zJS$WlgSdz%-dP3EB_m>zSx^6_EDIWC!Ixe#>wP=^q@lupLnTa~KBM0);+9UD)vaTv zs=z8R#Kyi$1Mec`s;u~!=rGK!=;rQcRet{8?uvIjVG*Jb{&^gBH;Scuxg&Tgaj!ea zcPuJhG9?fsE|B!#G-*v!(SK9C(l2REXHYXQu^=xBn;qvqJX?KZ8_X2+c>5|yOFMLz zMKw(wgO91$zA?fTzl|6Hi0--qh~g4Rp@1zs9|HgEEA#)fZ&$pWpKaeCMCy|Em9(fh zqB^eAh-x@ZD2%B3Hn8XQV7|1@y$A&wHOC#vn#TO+7@}PK;NESh)AhdAWGS0CEIu^a zT1l&}QIeatAq`M`xTFD~7r$>K-0wY5@mB^L`h$GbLEKb}7WXi|xTIF&3x7hL%_3?R z0B30z5w@spA3Vp89;)cYcSIGb8YwDML0pfJ*!{{-AZkAI++8PyYau8N5>(}NmT{)# z*ZNzl;<2J%p&`hQi+%rAV_F2Le?){gQR!03_vk%4>m7cGx3g~|W6#8aS7cc{<3Clt z&vQ`uA%8i2vhpo{eaJS{chnq5tQG!~LvX&}#82CQ?wepnRk)AeHAps+ibjPfe#%$T zBJKysd3@Q7v{0oAx`DeyMeAl;beTMoj6`QNMVmZ?XWRJ5Yi@z5x(L#J-it2%+5O(; zVRt_NBkXX~;DyB&@-*KveRy>kZA!KNiT9v#keY$xX@o2e-QsJqIR9K@rqgzXHQ2K? zgjaX)QDOjC!YC&J{~89eZoM~p*f4s~Vi9^@ecq)0Ql9C<`fcqES#T1j`37@tW`#YM-b7PbrLBIovjVMvfH-##@FcKWU=NeE>__ZROwZBI!II%4abt7h) z+{#|tWFp26yz3Cl{ej{ihiE#AeXZ2nI{^3Gi}6vdlm z%R^UEWGj3BPJ2X{(1xqZ-MSOQU}COP;84D^XE(mx7gKGC1rvA~GxI{J+SdERQpuf- zrCRUBiDv2W6a2XH*OV9Ra?|yC*TJzpK4hTiqXA;ASg09z@xMv*20p}K& z&{b&s0_ORtI{B}d@B#_eLQD0Bq(V7{4gT=ojL!Wv37AfKzOOK4?z=N0uHFxEa0Aza z(Y}HkyYhqWDk$+EtUfi=ZNw%nS{()4*`V{jQ7_~{zn@Qn?PYM|r~aQ=BAfXA)KH1c z_|PknPS*9GO2@Y0rLMuUCjUUP3|Jz|Ly)+NzdFTbnsQ|m1NEa8ef|-{=wCBpDEc^f zy+@H8S-)TM%%$=)yV`QR`H;!*;{RwhW9V-5Qa|<%Oorb~K-xPYawK*o@-~6RJaPGj zpYG{z{DhYx&qPQm{wRDxDc)}+4DzmPq2T-jo#b~7<&Ef4-WH|ho$JfnbB*Qg+XcT~ zzC0~69T1-2?P}KXA=?ncL8pP?+wQ#{V0d3ids9rL}izFVXC9UBNx%P03&bTrj+fyxgm-{Mtg8Mki7yM@GvKv#r8!OGDs zegqdJPaPmd;Maw{A!XBES4))${}4-=DZ``?H6uja-+FeO)y^Ww}qOR>~`CTeKU8*hE+g%BLoL3@Yz5cz=Kp zS>y+kUR4Cu@Z1-DnFn3Mn@ZougX&fPg342T`hC18{ab!1O0W7Cu8*LL!rO##eA2-U zUXhQhZCQ8sZ_}A^d^#FMe!V`otfM1b?NQ_ju78}CvRl6Qck^Mpj)pzjFV`3SvvXmi zV7O+XP$ljO44_*W-f~fmvS;<|BeP7#^54c}%=U_}AkG9!^bYrcZ$xYfwtRna3{Et0 z3xRX%X#Hn4acBHs2b+#LXPS9DS{YZ+xDz(;ij}6((YdcBG9>`Vl>(TnQv$GODZtrX zO4y_n08QShiZ6SX;P7vG3&aPDNG>e}xW)kDcH_PXAUCW_+O>tW3Z(^=8*J~Tsi%oc z?pgCfE1xU<`jG$nQ9mzU*S6*U%om^IdY;^;MACBQJjL`~wER!T*;asRG^Hh=?cvhT z_PUYA5YZA)&gf$Z(rv!mjj7iB%BU#&{Tb(^Le6lf6Z^w$-wPT)r3MDqk-LI_TjxEM zlS4aPr$q1?JW&oaR(Vz20LuQ?2`wEl6C{D6g3fuF4yh4C{q^1Aba z{2#v$r6YF7V&r)x|9ZH_3^e6_?qwCW&9q*~YyVZ{Ty-CBSz6|lB+5o6WG?5XCjmtvc;>9;L zE0&$Co^Fu&oEN2B{I*=0$iUl_%x?g*3p&o?L6y6H?=aQ8$Yp6|K8Q&~C;R%GI=Q4t zMf)0$U|GYG2N?=<<=%$e`@C|o*}-$f?-GadN5%E5Ksu^d>e_isul2`6>AAIeDCuCZ zcJd7F6C~~-pUt7)#zVB$=s%M}%&&jTH_uayhBsNQ>R%epS|jmN>&c#%&=4fFW8tm- z{PpgJAJ|~CDV*UOP2)zZzecLRMiv`~lwpuN%YP*I19My-I%Ta7z8^*Mo zusgIe#teMoWN2GH2ix0dXR~lNK^Pzewq`xec&5?lSX2_bNJ#|sXg;KdG;A$W6FsD( zhx+JYxIJY1ZkCra8G)n)jA8UdEyrqJWEcnM(DdQL6*&agEmwO=!qpm#6jhgG?aDb` zG==EINOfhXMTk`U+LG&kqT0muumH7b*i9Xnc#{O`cz6{M*~ER}xeo3Qd)FkTdT;aI zrPLCYRQVU?SX)1>Nx_UnqDC{rW>Pxt7C(0%$?T3WK&}m$E#Y^&{{svqI~xDOon!hK zclL4H?Ic>OZcy4`x!Nr-8wt0c&~5FJ-POYpvAJ$L=*aya@EffkBNfh{5`J5gy@5n1 z?)r(c3DdlnS6F@#Q@$cdmDA>OA2m+ds;G1zqtf2ELLI?B2HQ7nNplDq&f`_xL9lYs zc;@QrYl9Q}1XoM>4|=hoxBK@%PjhhcKn<_EZ8p(2DB!!XNyQ?ywf@Rw)}PK?t}ofd z%0qn=$es3`=N)Sq_D3$KD%=^_?T z?@M`^Dl_)Gnhkp)g^P^|-G%VnM#ABaJhob;#B+!@uVnR1{_P;6PQVn?<1LEI`P&+@ ziT7UYOoVWLDVv<~tI#H%|7}R{+)LP%&>kVjim1YGI&8oPM}x{kCvIBSw3_m#q*~q( zDTe%2!IFu`0pw%I37HejmT_!S>HF&MKB z?(^-8^qps&tk1onytJz26Z0K`KR5kU(t{3eJ%{&O8axdm{MLW znnO>c*{a^yu!|=qf%3}&A^FA{YU~<@bUmX*>!*JBnG+x_&A#sXqe3YX^o+h00zs5hlL^4SJbfK{d0=_2C#kW8reP99mf4ldtxRc%AWCOh`d%r;%g=&BogeIjx=QfFCMB5K^|(Nhgy5c zCKrb&V|2{<74kd{H{|t1`9+U4vOx)JhcIYn_hbye68=a{-8}(anm%cyGGRSYSWhgn zImD??2Q&PdFiqwzXUfC8vFqhav2@gagKPWU$ZK$;ty=2#TJya1n%`TAY23MK^>Wsv zrLwJ-Z!GrsA+yIUxfyAzzh;o^>7u#E4FyJ}bf>?tsYRC_7y+-j%SYciAdYP#e1(`h z>+tpFxz*}TvK&>O9>DanPSEnpL?|*m(`#^@iiK#{4X9i`5OiJLR=!Wb%E%}n+sXyc z4H@V+-i_vYpq=e2cc1QLU8jCV7k2yh=&s$`I=X5wU9pfKNEX!vBGZkw)afd|QCs~| zyRgcpwA5?_MLC%!#)5pQ{Ay#xoR(O$_q>gKwD(z`w1QWX{28CNQ-zh0750FdyX1U} z_I3}N8Ub%!$ug)zcnBAYrZWV1<|xk0H>wj}qwn^f;z(l6_lY5bnRE0*ta$+Y3uV_S z_sjDrmrcEB?xUDmm}!vBZ5uJ}Gw3L1x$ileye}4eE31Uk><34mn;kqSv$#Yny zJJP`wMtHf-nvHVT4Dp%(qR=8cn_skZ=W>F8bzbg%>;@e*uflg!PwRl(1^#P`@1utB z>&gD>A3ZEvX>&vQ;&U9NG_F%uJQWd|X_O)GW;Y91xC!#O?O;~Md$))ckd!|geM4d} zbdf1y>!db{LB-pu^!of5cOQ(aN-vBR8mI5qyx3cL@wbhmGlXpF5hu?Fz$^v6Sh-F=)U_H#s2_y+4MM8mXUR6D5 zvV}ucO)%Y;te8t+^Nm5@O{h}SKQF1E%uEA-yO_P6lrGFk29-No1wK#Z+Z&Q+S;Ijr ztLe@6Ah{`j8A&8J6cp4b)_&RLVE6WKL+pOFSlAT?8`;W#TMEH{>-vYo<$1OFd*XH9 zX+UA!qkP@#Q};~1=PAE(T1hDvM5WkSk_tUlnM_JUxnrY5(SKlWBXNiX))eSImT3J# zrd-y9ow!aw0p@22P^C;>ENY4&+O1#lD@^p{AL>JC-%F4}%w_LGW#M>;K65Ss|hiRZ4O8E5mF@El=^ivVc)CR7D+)D4#nooyU2h|nWE0r}x7bLqIjE~~@ zO~3^n`+G0XV-^a@R4zXoo|$Q^Jda?G7`yT%zG-Xmv;4;T-t%K7?EAARhZ{)5qp%-i z7SGRWNfDnJ$Tm`+JVzx7=cNmO?8qex9W5Pm#0oDZb-CRPxbH6wIO^WrqGT~imA4r| za)81329Ez@Q2FWxU=v*T4jlkCy|`0$Js`p*N|oRLM%9b6HTUvnxULO~tHhtY8F@u8 z42KfA+4?}lYOkR3@?x>+?0sQd$8y)F9z(Jz24(`S-49p^xHINCi*KsI3R)$edJU~F zeJ&UrWP3u1-6MAtTq@E*w{*fE-8UE$FnFLen2!3{GemvcIO-J^2Xjw;0Ha+OhJMT| z?Zj`x#WyAUF~Mc|St1FQPkGvtzsC2P98$@_8uS$Cg?j4Tp6Yu~57gCbYF>%Dni6B1 z%FC>(kZo$oN)H{3$~cSfLGo<=N?n~MD7dGHN9#o6hr}+HA5^bh;5AmX$-igc;%0LR3}1Et2Q#Pi4CYYeOT>*iJ6QuTv?vjOc*delEHK6=Vh!}SLZNz__-n95OyB|7aH*2d-k zV#>GRxjba+lozZ~Z^QU)Tvg z+tP1|48VSaD^gSQ^52_2xsQHGXYT2Dr+%~kH+90?)J84+Ch|$Y)5G7{{07P2t_#m0 zRyUBph`Kg9&UzeT=w^8RYD~C9WeWBT)rINDcb%(mx{die26CF&o78VK^@+kOMBx?g zT9(YFgY)?R+J4Jb$8@fU8l7Hz?7Fpi!d+ z#TpdaL_q@teWF3*R?$+$q7*AyghWw;1aAUdAFf-quC26c)w@U5huJX74(YG~QIrvliQNmOUFuif6IKXy6Jv2=)L$xt(s7 z)bK%k-cI_K*i;!$eXgPqWJ>930yAoIms|fzthAYE_*^9D~nV1p4#Up(w9) zwVglmM=UR;%9e-`CY9&jEr3-1_Xld2yr4wdgG06G5VgD;OBULz`^B)OZgc=`%jhG( z)1Pf^yV%)Kry|@?6WDUMN~t)NO<(E(v{Fu}{Ls)YD7nsF-7lVSDgd^MZ-s}+8 z=rpfQ$_N&UBFUG zF;P(PUDpq(H>4({57Grmwx|+X!EE*r+I;q2WSy7WX&If>1Vmkx6KU8e=RExgY%UAl zua=eZZwLUA_ijBs5}4^EaN!UMc0oyFC;|OC2^hduC6L}E=OC5;hXFg~q_5X=60hcs z;WAPPB|VT&!PlPXa&&h~n$6vSa4~4B3X|@|YcS5(Qo~8Vqj6+%)zD|sdy}Fu=nm2W z|Kc)&I;O%}TY58D5kcE>7=+`dk}2ZYzYL(K45(rgwII9TRN4Qd(wHb^WLOu|5Rh-E{mD{{9AIILH`AXpkB;N*bb+;=q27FDg zqMY^@{n&vb*iuK&y1DpLW)xztpB%Ot+6oOO6EG+STk!BnVT1Ww$L=&3Ydarq(W6Ft zZV68C%rR2Y&}X51p1PAtbtjd6{t`0E%r}7!E}q|A_DCbKRQ}+>YBL(Mrud`QqVHXs z3MwT=Or=Wg!9P_?3^c3fx`t9?Y8+%94+X&SG|QUa;I#Kzw#&D#^JBxrLreY6Lt7l* zl{f$#vBkcqlR6DXu`?JDEII{DExa*Y3?TQ{uOL#dHofa3itd;CNeILAb}ypLQnVRAsNRpmE_8y(gD> zgICyqWYT9|{5QB6eGbz((Uvx7BtJu2pk73q70HTKvueFbYrQ#NxeMy%2vutMUw!~8 zf5h8fYT(;4JyXo(7)jHYnIh_OcByqtf56uvjuOS!@JMnM`qH0XG1WwkdXrwyVo%65 zN)5l%ush6^@kJvSZ{9737F0I~>5bTbqnVc3vXJ+|p;z%$ylHnb`cJg*x5`gEt)Ggv zy82P6nH|X|^a>VC%OAg5!E=ot`}z3YxF>JkIw0^2sH;>p$@zM9?jY7>Q*74dxOCQyV=?Z? zdqlh_tV1)+lTHQ$LwXE>`&N1whf2~`RsyFcywWSy1EC^iAE501@J(NdaKp-S^@k&j z?1YsVA&;o}Dj6iB+%T7+QmJ*x8+UdqUqM}23JO@DdB6LqdJhF#^j0^}HTFtQazPH7 z{pio_;`A~*$E$c^{9ES-oq9Yw(iIQuj5DwfAnTBOxBM(0ZAq-r~c zz5yOitDeBd)R!8L_9lJq&Dj#U%aNWE4f@sDyX92-!#?%sckv!Wz1>oO9HE%b?6X?2 zYfqT@ch?RD*RV(_WSOLO8=a*OL-X_DK*nbp#%JcTwqvxf06sY);Pm~n{bv1n*wxvm z$q=;YptQRI!&DWyc5`u~7vX!ND!%dF3qN zaec@#K3#6@QK5ASey4rK6>*aG=YkiHR!^kv64!flvGFI_wq2!$8+k32H2KGn{tBTE zf!juhWg-MW2@Ti&hxOPxnq@{R#zCDtvwf+U_Q14Xj#2OuYZj#srKW}H2j$vW1X6*i z--n5n=A0>0^%ALx_^82La#Sh27V%sV_AnG~-UJB$Mc!CyalX4YDbZm@y-Y^&8b5!G9SumR!hNNoMl62Xpwaz{zU-4Ss z&0`o=Us&;fiXd)G)TVeW4n%@U#CjnwlP=D!qiijD8Rz{du|yWJ!i9kCeE3 zz=YKamsM{9UV=iHus)7XTEAZ*^Ki{F6&g!#9D%RD33U69V)U z$+T!JXaMaKs)bg-XhiK-W1;6uKWI9+UszMMpjNoB@)|hgh?$R8@pDtp_)>gsgH)@F zOCF)pxjIW7RCpMwQ%2qoP*!RI=i|&`8RTMgw0?v?y>IjS`ooB%$>wMw3^RxJ%-Imd zG$Y2EUUGCXwgv=X$oSFbzpT`!9b7zQ%#=-2-25z=ES3Q+G#~7TRfZ z_prg3VQY&s)|}k=e1weYM8Y6~nitUt?M4Z8qKiJn=kBBKdE57c6)T)6`BV~5mb|h3 z@g@t7__tb3Q7`2t**~hf&~G$nI-;tRDsS*AUaY^+^Di&;D&DC-*T1|kcWc&9U>f}Q zpQ208)Q>Ryo#)3|<#ld->d|l5B_dOa*(dDIE4q;d`#NI?r_gTyjX#?DlvazVf__fSMaRuR9D=&7V2d5tqdmYZKiHfuf8sH$O95dm$EOpe}q^mQtoDp)JchLzJzAH?z=V>-OX)bn0F86~lDeKUh;i7<4L$ zyjF#;-{+ORpS%$hoj2CrPJ=M&G0@K+qbE3H@HFU1J+oo!|e;SVqQ6f6~A)EC4T z4gdMycW3xRi1!$^8Gm@OC{%pGfREx^RE}fFV+15{1n7Z+TbkX(IgA(BO^o=doUL=o zUb?i_&Q2+{=tZlCDipUb*H3A?&gu9Ql#KTn``7gujv8B_qBc?%oOq_G#Cxws>fQFp z&7DL7;7;f7JIBDjzB>YD%6v9pKox`=@){l7DK|#oO#i+ETrk}c`;7aI#gch8rev?3 zX!_?5pDAvU(T*mA^aiXJ(mBFOC-e2M?(3-zmQY0cMZUNke^y#5w&HJLspHg`iow{G zaNT+E61>S7+w^nRtykJ-1{RK?Zs+fu%sxS7W>nI+4w2~}gYYAdqoOqke@^e&xvPkm zm|p~l{JB`12S3)2zuJAg1HZupjI+_leV-1x$Epn-$53X^jQ$0m{KC8VtBKv)Lx6*z zCGSPvygTkQWk+{QmcjZ5Tr&y{V=DHKXn$Zm#*7ofR{pmhN#nz${L`V8aYT>j*=Bho z9d@_%A^ZO`QkDC|Td;G6$a&F|z`m`dFUE;}@aE}OMgCtRSxx13MR|~Rk*)fnNQb+w z@0R-`fHDuk$E=YBFx%1Y7`Uu zOK6TT#$}{J>2BpI_<*^ObS>*^y7jL*_z-(FGa3*27wU;VUQ?{Jw%GE&_s?nk=`B3A znt*v>qQJK121$=F$;u);e<64|EXR~hEy(IRyelR{I zG96Fma9~*MCywH^*8=Ou(pW6DhYOv3J4gmhO0>_tve?gtsfUni(N_j2ZG5xsXd&W zwl6lU+`pB|KcCG8Ua~JZ0nvyi^!8Z#6U+)+D2L%xEv~r9M8P2|L-Moq=nl2P`~xZ- zir}HU|HV~|`|+xOXjFftL=A4Nm%*ZQtF@tr8S0}$9UO|L7>V>Btxqsb7?tZ*Ale-s z$5z>r&EM|Df$DY^*Ooz`pm?xcqZsEi^{f=MdS~RG-Ul?Sw}ZuwpufgiBu(*>kp3>D zNil1&c|GeTxwc(7SmMF3Z)y4f2{cv!IX{2Lk9N<|33^X4xCepLL_1y6kNtg&Ac7Aa z#Oxjrgyas3Uvn7WSHGJ+m>+LR&XRLq)95Vy9@Zt8wG2CR3s0FL-nm}a^Rt{kkA2Wm zCB}GVx|bH+?5`3Rale>o(>A9IaMCJo&Sn?f`kv|gpy%b7`NJ4e)v4FSM;WSwIh!p& zofxE-)^}qzQ1-9vi-TQ|=-?y}ty`(`j~O^N*;>Q8GS(Z7^(X97Fs|aYy4}Vmt9B_c z4X94m?NZdy;*K+7JRDqEAdiiPr0KNY;P7KFj+Ti2%->x3Vsqa#y^zC|%0E==nEa~T zA}{6|roxdGtFA0U&IDBk#l?N{m1QBh*aFucg@7?JXpeURe(#1%w{=dv5qz3)`c!`VlNuh7h`XgE!tfY&i=ECx` zVmCZ-e*8P!MHI5oeuK2DsQqq=HQrV(Q5JW+X)6EN?1v*k#F)w5KjdFoG>VvZD*r&z z$NK&IjjLEyx7(=X2-Y6J1Jdo6H!is{eH(gQ?Vs9@75qz`oEjvj%~x_+-WCB|X6@y> z#fs$Zf(8u>hy9mew?EhAVk^>ns|4BA2z8%m!n)#>y7!mQ4X6-;&d1ozXYHK019Eu! z35$i={~SDcuyf{|Os?c(nu8BIf*b8SI_Rk6HB@KC14JFU~r)n{gw8--_5 z{-c&$!;0=ng%{cLsmwYJnrDxi$(c0#Y__g*y2qZwy=X>Q!&=ImX+N_F6aZV!ahzRg!ME`7}c||E>r!i=K=SvPrRj z{#86?2|!6t(te5p0AGSsxmLO*60-2lmcQ5iqJQC%7~O!;PZ|w*nU2Ew6AUTI_jh$&{K&k7(IP4c*Gbnn_ER*t4|ox#O*B zo|+qxIi4r?XRB(dXr~YRpJHH7&WnIi6vlH@22fci|7#)^RP}*ZM*vN$f2Ya?veN4C zFAnVJXsE>0a6t&>^y^^m=$XffG8ba+NsJ$IjP7kPKLgvcFb1=n`JhCZ* z%(~LO0SnG#QbVgm=EE-0i6ZH9MC+T0yo;4D-U=EJjZq2h+LhO>$yL0>-q<^#tx&szlou*H>+b3J{j-@@I&hg|h%$G{b zf2zgfrFU{_&oPiK_8ql{Z`W>IRR`-mu(=e5UE0w@*b*NAe}8a(t)jxMk&lPeJDzK{e(|Mf3&eQHjigNmgKMEsdM-Z z-n4!Bp@$!w1-14&GQPNeyU>fzWwKoHxH658(Kh}#KTGb_Mrz&9KmJwXDFlGt<1M)~ zxhAm*dO_EW-cBdt<~K4r_2ucZmEb|lv(pS7(3-iEb9U$VQ;f;aY( zp31NA-~^HqjPeBien-_Qw6aZkUNQ?=7D<)`k|jeel_`lSzXw#|z`jm5rvB|PSFxnB zTP78Ii}y^euI4!tX?&h%9YZcQ+^Rc(cY7nEZ2N&Z_|Ja%cwd|2$fJ`gp!4e= z{2;6nA=_T4O52~5nB7>sGQQ{)+^*GHP?tI;citQ)i%fDSpmKV4N<;AJBZyx&n`NaD zZEvZjlJSaQ*?x?5YIk!!Db?^J`Cy5KzEhds2BQ9Lt#jaSXv-Jg1FR#d0uHC9lApm# zSAR?y`p?X4B;t88!OV)kO zEl(9|rvD{1uz=XltrD5LW3egU7~AZiH<3rqRJpNP^>WeBmWov~DjECE+2kP1%kyiV zD{9Kc1TABsqx&wu!At#i9Y0Om5gUAyR&lG|DppNzL52T(s9HP?cGL@l64;7Kfnr@7D1NY{{SK0p)EWP18U5i+S+#|G?jl7R{{wMwwEviTV+d z-LK~~=%x~nV$hO8G0%Bg(&xCQLDPWK!imBk^3eXPVB;Rvnm)6iFdw{h%@@36$&k6W zEz%rqie&d;hG5;p(uXeLobL8_wMx>({>t1l487hp1M|sWsvGU4=C}`i&|*2=*rx*W z<^&h)6KxZ%Qb&vm%?g9a3d5}ViZ+aj*Xs^Votc|l)miz=;)`Bl=Y{Dzi$7W$WS{?spJI znG}`iN5)T%of^3=$j|fv=_z?LL-0>iyT-<3>y2NpJ?(;jjopI*oo4ppw+U9pj6>u%%oW zkqyG2a}7uP^CZi`OSzuLR&UQJoOh=g#;#IT1AjQuD2m`R=rzsaI7=pWq8P2bR+fh}N%EF?gF|E{F~_^v4%*cOn(1=9s!HmjzL? z5AjlGFyA}AfaYG69C&r=l-y2ghW?UYi0koiJ#iV!bPwIMBSX@RNt9M=_&`_FP*NOx zez~JrDsJijX?<#X*j5FBlczBGb2e4Nv?RI4z|kpivo<}`8mw*lkPku$f+>$`9B%o^ z+Wr?SiFi!2goE?7?n7Un4x1=oc~I%gOv28|70ET+-tr56~tf}ud_NK=D$Ce-dF z@sRyNzf*pH_}%t1@+QNEnB2q`QY#BS`@M=OWMG`4Cr?k*Hs(uDgmp5)52|*x)|@JQ zV7*9$qRN^=J*d@_gqaK`UzV*4s{x9UK3cMS@?K=e9BI~N>ZX5NmCyLEL;1v+p%-_O z&jb7Z7xMZ0KeO_gq5S^vbM0s3X@;$YzI>(m$nAIsJ*=TH6?vFELD#aze%2Z z{<8Zuu#ex=+WrPzsez!mSd;vmtWD@rAKlLnL-fVT*rpY-X1hMCaU%Cz(*jEI$(|j^ z8ZtFa8bmO8JN1H7vqPBthe-93eNjw<7ECW@;f2sXwLcyF@*c*nja}%+=W5E4_JTT2 zr6psJ_!BGr(&+>9Di^|wYX*~I=Y-D%!Myscc-3jsKCuz`mlcbL*ya5Au~S#VKJym$ zBN05o)A(rngogR~dw{26#Vpos=C9wAER$BTta>#Lqu+P6$`Aw$Wio15BBXv{q5Uvs zVIq=wk1Z_xoN=7j`cWSY)Dd}p{s+&%XKLUPNNjH}+2;s`7|0)D54MR|!%rkFcUYIT zUsX=9jzw$2*S|MkviMzGy`MvoVN*r^IyzBkKJD0=9(p(05gBk`%@-KO*VQVy?V2%@; z6YTsak%_hKC86i9upfEH80Vf?BnD$|&V-lJycunLs#hlSq}sQZ3~`#vE2j%vH_C%Nyv!tZnn?t8Vq zBY%WT{k^B3HZu#H=Ji`PGqMaI-u#Ia!yojdQgy6PtKQpU_w(*pZP8Dd1J{}zmzE>u zD@S7EL2eBMbgptA@B)r?5Eo}Z?5PhH>d+wFZb*%tqEz!J>|4dsc=Kx#NES?Ij^#!m za#y*_cUZ;5ln3C~3LJk+h$@!WPw|$>iMI=KShU5LBT4<_&!qk#n^4gzhh5d7iFl-3 z7>!?BAbIowVbyPr29GW2z)aFhJ(Bunk{0(!`fUFY;g`{A5er(rl1chJ8iqAmPh^tr zjD{R7IJq#B)YK!XIg@mLkE9=El1}K6bfP5%MGMjC!`(Qxn?66P$UqnWg^qui#LY1e zU&Q-iBkb=GUO(4srTs0Je_%r$eoF=JEgAa4>Bk>IWLK?Hs z^Cyc&R+Q!B5X<7i*~=qC3=0Y0$yz1bHZp9^rlBwANsS;h%*?bQ#%0lUKbeLVvdTj6xM}# z@TYlP8O7HTxhCyrW<;cI^E5;Ele7ghc*JM*Z|dQo5xMni^l&f_D^-9>$>Z~Q0Z)_T z-(sMB0oCA6AXIX>B;}I%TT@aFP;0!YmjS(w5P&HYiZ6ts%rN}IeIBB$?lXUxjUi{< z`GLRLmZs_Sq2TPFx-rN|z11HUT>GR>Vzz54t+l&>1gbRa=1AcbmJUwcH*B1P9*86j zR8oZ{UD2!kC*=Ii%t*2+;Q*H$OOJ;?Aik`RK%m4q!Nz@r`-)h4ZwIlU2aZ=V5Vqz! z6+62J#A6wVMTh|^hxLHCAp>!ZgSeyzAJYti%yZ6I&%0e3hJ!fwM?CkdN29MO2Rd>|)S&J>NqMqc(Of$|~o0B<(X15=d2=Chq* z-d`7~MpN#Q{amq_+F(JUOtsk^)@RewVh6YM&q>BAxWveh?b;&u&SrYPe#(i=k8S3O z8#Xlk^D40V=f|GsqXHv4FOR+SCm@%{mg~p!L($K9S~bCPHEp|MCF#7IDU+?IWsCj1 ztMxJ%M_dDm)EOOK>sLp6i7z_5eO`Bx$+d%TXzCkxjyL@kOpNlryGX~^j67XG1Pf}% z4sFq{SnOt9$;|4Cjq#MWRn+(=6x4usVvWCBjek~Nb;UCFgeI03RpbA@Sc3zqsqZ|+ z912t^MZv?2xMco{8HaI#zhn*9rK+~^jvM^QnTo5`y7j}q70`H-qX9xKFIYj{^O+D` z4U_WE)G<2&6U1BoZ-nXZtL97@OtprWUJ+FWb1rs>FuBLpaHe0E#pq;=PC&)W3pyT? z^g_;x)U!Q~SHKu*{h#{hq}jUE5e(^Vb~CK2OAig}>CyvKM_a3&)UW||3GAoo66OD- zm+}YqP{-+sOqX=?H?+_ke*=A;s_NDs_^G6F`@~ayqzdTVk+#*DU3E2&>u}k+y%H;O z{rq3@vcn2I-sUI!cR5f5z%?{v8+&K2R;4?NFY4F0`5d?0G`{Gh+{VpQ>48xq zUV8CTzrCHE%j#9_Jvzw1FRI_yf&RFD4+nOUwmF^DyK(b*_1m*Y@ds8%8eK@Jzy4iU zq1Fw=Pv^*vom$uRO04LWW-g&aC&uKYSzj4GVZ}JvWn-WA1@?EY{z^&8EqoPk+C!2^ zY>dU5V|r4Gu{NpxTaLBq_4_;4&Z!^hSesG5D-V4dH&5Y=TDA4`6Vd_>C#|oxyffm> zkGg^*h4bUhx+2!$xF~MN_c}a3te@rZOs&6&hZu#X(+^R_oBP0d2Hi%!0s^|r;?3>u z1))OdZTEu2>NtDKy};Ue@n*%@9NG)x&5DaJQJ0#I^CVu|e`bGgw!hcgU*G;VJMj#W z;3N(&8Ok5?d-yp~^K0GJX^UONU*>lJ;}?CQ_f z>6iXYzrob7Nn^#dh}4%<7L+U$2&KTRY1?;d(4S*EM~9srcW}*`NCV$gqG-INIZ-jm zx$D$zGFj;|4`3tx3eq|MVhKi{qc3hzda_98We*yj6XL5ed`)2{M(z?FE6P?G>RW9L z=>K-3y(K@@PjWf{XBPN_ej&UJO$Qm?9hnJ)l__4Lb&IXUO?-w%aF$2z3dbUXrDW<# zsFSwkv%CwEdE_8dQI}&l9}WD+a(QKZB>)HB)7U^OZ?g!NEMT}7*vKy zq9m7)=kq*(KQE~A2VDZKnpDZ>V~Kj~R+H@eIj5vESXfq*Tt6 z)*WY9quGK;XmrTkOXF(Qp`9$Wso^buRhfo?9sQTA@D2zi*3cIf2Zhc7*xD11A4#kd!Bo9)T;XrrV8?9d=V);q2`er5{^vC1@YJSVCvwLfZv#aJW;T#Dl@pSRB;IV6o z_HOk)*MEyIb@(>$o%{b8U;nM)!{$lsU5+3NEbKqzN_iv-C6wt87Sr0nNE zq9oOa3=?KW0n<}C`Ap&}lG9i0%Wc^ci46%Z03F|l@PZ3T8$({+GC%e`knpX{E}lEV zy$r*<`QDF32Q%*HS7zxjo+peVI#c%x>FAKvvww#LeWreF$Om>+J!2}ixGuwMtdHT4 zy-&%Tg=Wa z!S%a2){6c7<&PR;7vWl7u_MAt#Y!?P{Tl?eod}v8g55wc8U$^zQvSkZhuaO8${!-M z5|c4I_otj8`#RFg@ACP_`g~PT#9G*NZ)^ZPz3RvYKU5xVKMa7j&Zp9>2kz1y;&VS% zQM<-_K`r;Ee_GYaY;3+tLF4U}8#x)7qp|(w=YvgAJ6c zwabZ|pUtolMWvU!DO(~NO$Hr1hn4MUz;LBTA;oN;O>D`VHGqC>R^g1p=l2=lbu6bl z@LB_Agtz21e8@~_SLPP5Wu5xWL`Z{|*P9)9-hQ;@?^M!*zxzl^$4q8@qHgl2bnT^7 zHlkQIq8M>hhI0oPjsDear|aXTCLG7hgyXmO67Owv<15Nq?p3^9U#}9BO-}Zn+%|?D zm`RCL)vnCt{^St?x~UljOtqq>V+vUJrZ4^}1;qS02XUw(N5^9wya@n zzLA=y)WbrBsOMcm!-PSt{n2390E(ZAT@_u1Z2QPBAPOd>fG8`CQiM4GyXVZvz}eyf zRUsIL53tD&tm4!N7?Q~e1_2g~ceFmcD3WTMhn})opI|;?-t=9eK6X(q=I+K*<|@>J z(sqex)451Hf-CNF7SoK6eR9fS_6U7Mxx+RbIcbx&KVCt>O3v1kUX%v%lH2c$u5YvR z{z_f_7I*6d;)}gr@x=v`byKXG1UH6EPS)~?iKV_&`Ct2(b@EcD<`v10vxS`#@=BX} zvES`sRqTYkVjYU(t3{y4Whi)Fv7Txt^K{tcwyL}`3MK^X^&$(N&S<4mM7}A3iJyyH z0;|pNSd4s2&@LQJx%_@ro?7C$_jwBvo44)9_kkD zRBV}Xy1YQI^}{~$O3JGJx-y^@6=GpkjJ=EXgfd!t5ixH6J!d_QS4o3!O>yNjKC*Pke8OINwnOC)BFwd~u)4 zt1DXKiMhO;nCeqm-MX&N34YafVCcAVWKHVCj_QhMW}FLP&E;FFD_UoqaU!Z%jVhkt z*X*1(juH6oUdM|W+_Uahft|CW0}c}{3Rt;aueUz`xaxMlhitMQU#tI{l%xX&8+YA) z;T1FTG_NAX<$b}%X84@s>K|shH-5`L3`XONWnNM>eM)sK75>lisy-Yjig76wjC46K z*z-==r;Mm0`jl!au}i{j{p>&Yqug^onMMzwA*~Mg^-|$)TT{tQNtk~g&yA618l3x% z53GZdH5T;{9_K2PA}gh5<;XnS;78*|zR43-nmSjccZX%tkWpSXQN?NZVW}9+&3kuW zWX};5>aySfU)fRR`IgA@!pyTjlcxDcgNrYo2@iiXxXiQQINZ~|Ngo+&IixiV401@U zZqxKEV-wtU6uP$8I1H`16TzD-#q^!uFp=;BYxj?WInS!BE}z8{U+$BWGdVfJo1E-ht3(OV%Z?9CBq}iW!WcBhlAI{(Xk5mKk+GD$++o9` zu|wYn!xV(`Nj&uixvDF^jwg2CCnx9F_~IcGs~N2)cHr&A)YJ=es#`z65KKLo4dfq= zYkvRAx^bLQ%}A_)_;72-(Gu0nn!#JV)mv&RUWq4G7U$%QMN%{P^J2BSxg~swSd^U@ zFs5a34jxzWay;=9QYRmq95E>)z#0VEm;+DAFNM1tnzI*-i7)Ou&EO{peoV6Oq;aXq zw4KbL9KcM*Y|$1lY1=U_bzTQ3;tR$g0K>2=7*x(laQM$^@w}PUswdJ%RMSVC;MX0V zH;x{5?pu5X`*K6`0CXkRi`e^t*Q7ho@#;1aj9bw9E)2DeakO%M6Tf9Rv7^S7z)zneG2GOoFC}YJ#hHvtWaHd4 z4OVxGEJ-nRWi`}P;)~BjHfuQ%i@9X=5t!q(@x%}9?XgT#J4Rh?WlcpJf>26EhEhCL zwM@+kss3?oHlC=u^(R!IT6bWyt=`V9D4IMf@pW#zsV`wMJ@%^GT|d2_V?Q5bZ+h)zfh^RK&1o zt~9ksE)9lmkZ0dyVpg=%RVI`oJ0ZcP@LAynKlL44-1~Ke~<~*&=i7@S{*hI}w z^>s7*e9Q^H%gQXFHqksL+t&g&`sbzoSh9j=-I9@L`&9k6JfdOWP}S2nDV~Xu_DniTT_}r*c@=_W+^rdiB zspW*#?4O#;q{K^gy}41r^ZV%HCa%ZHNd8otqX=utuP$~qMO6e}EWm$zwOcEkup_wM z09S81mGNcq#nXy7GyQFAmbqWZwNZQ*9oSJqX?77{53CZcqJ=*LtB9Ls=xj`DoY-TQ zc(YARjk634prCQ$jsAaYoHu^a**Mc@nZ&2Tmx5|Z4dR)S4T|SRnafxnS0Nm5#DX>nX6_(vStP{HBBXl@2;|MEGe>gt8a{B znAivpYIvn#A{9Q6hDR~vK$&Pn;;Z9LZT zma@S1w5SiLt_%89=R$0Uk(*F@D2&Npt)FK$7LgU>RiE0OlD!r;pvCrQ&9~r%(*y-E5 zWE%D#Wy&&rsg)e7nh9?QU(DWS=_6FL2w3@OU2Z3WN52^YpgYi07C*kklj&*Y?VWnM zYgaw>Oi$^t?yz}E)6>m}7k%8(a)o;O3yI$8>F2izo9Ssi8KtA|@QJFZ4FzADJ{{6> z9Gv!idgXs2g7m(YDWh^v{70Fxa&v-LW~tnj+s+&obgL@27sB@k^|JzcTT!_Uw^})o zlBpc)sy}dFI!pe2y0FfYub=fFmAte|rq=%`Q@4^wRj%=yA?T@cM}IQ}?5By8x!1Nc zcd_9Xj&$ZX{c{$3nxmPu$MOT0aOH(MzOC4)ZDRU%h)MC4yx@}m2t&GU6MdArWix{E z@PZNB%9*~{fHfq^bX*E|_1y}5`d~nV>2ImC_VXXVS$*3hk6253j6J=!gZ+{L}cOoadfy z(Da{W+@RPGe<(M|Ws15%%9tI0RNBiOp~HJeiS=|eALleYR-!?t#^~4roCjW{nT@cZ zsMbWir|@I-OPPYIX`=4j6xs3(?pA!Y|AT*?OGS`LHEk^lxa3I$ViCF+%zFWOLpVcbx&?F`r*7E=@XGjo1ea zcv04I<3+8AC)#(C7v;j*8f44AIg#!BHU6YB#j9c`CeQ6v>Tx_rvpZ<)ju7PxxO~i3 z?%>#*b(3uJq)J`;FxqPyQwbKxv(D$S-JE}Ie5GoclM$obYLE6x=<-V45&_4nMOQSo z>g<4qUZ!Rkj$K@yu$<(za-t0mhpmUK(eejZ61jwuKzbUM^+bO{FAH(V<05=i)k`6c zjr3GA@Ua-y)%atG#<;uODL>(vyKS+`xYPv<_Z}?SNTIlZDBje8HYudjbT61#7IXHE zvddF&o$wMW_%<#%QOjkHweQ5BEkVB4IQiNL>=06FQr{y-OZ^N4Rv>}#z0iFpLkrtU z+s2r$QJwrEoiMKe6OrxM2h98r#FDN48b2bI_J?X@ZL+9dy!5|DmFAcxOy>|cMh}|* z2TTkqLQLmk(2o3um@?HCDW(>`+=5(fuD;6Of5{E1rfCSBSk+%hs16gjCu|Hg=RjT%duEBs+<9 zYq5j)mT3Z#tTlmjf%WB4gmLQ@4>80k_NI9iaLESf#MHEv{$=>$gW0P63VPB}A zHBre*WaIoXUNuqO=3EMZthQV$2~RTl&8Ti0V?71mKXl*GSb{fvua(Tx&oM^tYC``$ z6zB49wA0a<#3R+)u9Ay2*XnzHiOsK2AzT z-=Ze>m+pJF7CztnxTqffdisAa!y|fNoA5ti>uPd$`5!QKHMuJ;{$?d4Zfn&RX(uwd zs=tiM9h>_1CU<{JzW~RZ`d-u){E1=S;3>2 zdK!i~-w@kY#h5V=t_k!oxqtKjFO&PML0nLtF}b>#Ycbz4O`y}{{*3vFu9AJ~$N#-N zPBd&8lUx5kVCpH^1OIz$8N-uNP?_9MrKsx6LX%r=CifbS*F#qR)n;-{eloe`0Lw$0 z;l7)zE0bHP@98th)Yar(anXM-!<~9yJLJE|mMOVADC1mibz#vBSAE6Ox4y?7h{eYc zR@|6d-`Dex=@RbMNWe?}hf`k+4U09bYP3w6^*ZuR=lGlZ9s9t&V*>1 zg6vpe9SG9TkGfDv#p;h?Ego$X+5$%^`B(hTiFK9W~+vd(;%E05hXj0d;LdN zo0RYy)fR&(M$5LoCt79mUss9TY-0Lklq2{yt%C(ehuTkd^3(JK>-bvizV6|Ec5y#D zxt~7n=U>lR#`W&!AMPixA9qIL+P6To*a5d(p)t9OXt?;X8@(y$UO9AqeDP&WcyF1t zFUvL=b*4tJ8jS-m+NzEy#og^-$!Q4Dz=Tt{q9Mtqy>LBEa=FSRyy-{L$>0Z$8UGv> z8-4gjX3-pT7=7IwhSr}Sy0x`X8Oc*E+~2BN_cN=Tf{|cre_~tf?=Cq2dXW0&i2b)e6I6)i&7lms@E@Ohp|%bsK4CG#RCWR&gNXoy zlSZQJCpA#h>gDDG1q$tHCZIlf#E{qtshcdCdyy3EYs|nO3S6mqNC4R)9?lQ8RhEK? z%QQabAU+o6uJZnL?5N5avu5wXAbU4(hj<*V>4B(E}@i`OY)W6w5Pz6rywpSThUGq7i?f{ zX)1QwXstRQR<1Q%Uek6psXn;1EP|~;z(L;8u8Z(kK1Ml!FWleYC+vuJOem=huSRb@ zTq{Z_=CG3BOJZ+Xc_dJ3?t+7rthhA-JCV;SO(pZBe*RK%nyM|foyfdmzwlm5 z8qZqic=M}L=x{u&*c;pox|zFlAiZmWKe7SPnp9TVhG|3dNk`%zQsU?5pc!N2n zKrmmb5|YOh_`^pVk%nCh6zO`*K39>A5{*}h*l0ZeJF;taGy)7;f%f4MTrAo{Z#vL2 zCpfXg-G1X#;xpPzC;~ReredE}ic9GMY?qqR5Oz;tud?(!`gbP`r{A-8HN6_h212Pc zi`kx@Vyi1`C44drds>^?_%lbgvi&*hji|W1;I7H8(kingC8-PHAuV&Higk_V@~r|^ z2@tE@;SV1y3hK7NFlZ$zE!~2js|eNir*#J z^X_@k0;Fv%q`EJs7K$aebcJ}CA$h1yDw`mFo`Fc;LE;iK!{o1ZN6c!GxAZ$0$!Ru? zFc7?5FN={OBD1c_DNnCpcpJ246ZO4qjGfaUf=oqQtqO7ukQ}XhIX{tVOT|vPIMOE$ zlCr$J&bpolzK4Ckgt4nLNZAJB+4}N3)nL1x{{$@$LuNz0VV!(vRP(PlvARFG5 zdKG!>1@C4<*08*oRi2S*stw2}7y60kq}1k~04&nnjcCF-);f0>oGggw*>; zR~==39xb%#eQUc~c9JSA5*mNPj`SB&XOQEdy`l4WuPCNNB>bq>oBcwYtZbA$RDW8ENfA=uQP4=P&K%`DcLX_4+=#Z`wmT~c1{Ah+*mzh|XG1`|JZyMkL38==_Uul2}n})~vBxkZi;~hSGsVj>0 z^{0|a+n8d0u#JCqDFrb2-As(hkNw7d<)q5aAS;qh|H&Fl)bITL4^%`a_>3IqjF23u zk+hwN(Zx?~Hh3rRGYn371>8R08g|x6{9Xj|&@Pbav4~2O6>bjcun6FGT>Jg?4jH!sVY?3kB+FH;;dTpypKqBz$6bfjrk$XZ(G%ybfLjR4-%6>tiGery_K zRC6_{svRX+$TjR(kUrk9$V6!B>xu}L6T4#BSA5aFofa*v5MNX2fK7L@PeJ;0T5uH& zUM*Oh=lT7ZZ`mz%W`~_PyN8{)Q{Pu#>p!N;D9Bl+zq#5#)vdihEUnne`u4=eVyC%o zm3nZ~hnW0S?9=EWOC{tDp8JRE3yQ7L{{3$T_Va@y#>dXGxkq4}j#;ccD;(7A#StiU zIVYG6RPeYXHT9TC>aI%N=S?$UAAgtP52uFBfOVE9RaLUe?Z;k%Z^YvDN64hb>-Xt5 z75?J#F44R1;c}kD1{hqd>kQD{-w`}O?1z#*dtijT?J#=x?<#4NTd^ezb+IeP%X>#4 ztr$yy489Patx;rDE+WTmiwIs7``v@v z9Fa}?cQ46m@lHu#25p$+h%6rz0W)p*HDJL9LbA1zAch*QB^vICOz1&mYDmO+4qHC9 zlAP0n$XF3++y;^4LaSExo(9jqYX}bSL8nhhr`!tjQ%7gh!0v^4i&6$f+n}S%+vy>L zDUQhHC6U}#_jgK0NUYe140S|q>_KFvi2P1SwkEMM5t$bBc0>mDAaX=VgzBSOo@2QZ zb$@6NBD;#n3ELuq7#7$ZS#Uci)qo(eU-!biB=%v@wJ=DX<48TdX9UtT;65OO_k?F_ z<*8J83WCEOoqc=I`H|7Vep`9I)`gcGSk;5b7!kR0TSPn&DGFY|2PF5?`$kx_nu&!( zij2t3j>zT#5il#s+Y~X_V_QUOMWi%1-w~PIgUCV&i0Vg85Z7Uj$W1+nTqYuq3CY&P zMMGdn81!*O@_GxqrP+L=GmdSHwFd zq3$3u#SwXSj|iBF>o*p$#HZh^`LXC=v=ie zI<6mN6cW71xi3hgxCfo>LORqSbZ&7y@K;6M%kvHl1Ov88C%!mo{VL5y)+RXDk;;$u z@y`CM5QxLsB&Z$asHJ*PyI9m76rLW^gPK-dsF51A^{nNgV2?#RN27K~cWQrh9q!&e zsPz`Lqqb7C<2sn{sGZt_+EXe@v}`9hYQNpRyCmgL1*?RIc)KaW zoTpV!%YvOwz`Z$u$pUk4y8CPW&@22k%+pjwBJ{`9FyhW!@AS$Ry=N^yLyMQ{FVwP} zJ=tQokrl>Xa#veLo;tIXJ>JQyB}W!HeVx>Cvl{25@{4{hwrSE{ia+crES2QL|36eyk&I^>hVbMXBu1WJ5BLoc=ktI3$J%}}ez-OI{1Ok1nxgMx)f z2S;=C>&(F*cci)XT~Q3?TkvWPGJ6T{xrcw-qUFb3?!(4m%q+@Qw3l(mM2Z8GnFZyi zx+6K9Q^@H&giad)NNn0O-gE%y5}QWF6McCgx|Z0?^CrbAQ~gh7XFZ$c2W|dcVUFK_ zS0Y|RG{BkYO}d2Audj=5Fu}3jN$?8#9Ls}>yp~PN+1OR7QjrPykgi5X{0L0oT~ON+Wj#j;?mDPpW_S zHgYiu!GmG0DXu9>c_wDr&mQ1kh0aZ?h7eZUn`C$EiF|qR)@x=MMi)kq+lalt`7p`{ zH^Hx5=levI2Lt0*f9QrAcdo!>&@8 zWGdmq#M3jE1wUD9lKd#@NXZZcD-lW%gIwk|j|$?TJXaoHlM_4ylJ@SHp8K^!-% z@@H!_v>S~J!6p-6YGENyJ^-4@OUNmBiwj-2-{Asuksa=DS$bBKE>@lu*lM>IyO#5- z4Ze<33e>Jt;eTe z^7ile2R9~f>{W*~bQRNnZCJaN)NW(8*oUvBEQker#YmW(nTLX&rJT2lNtqJ`7~)Kq z^AZ#|=Eg)%iY*~`aIBcSN~zuSD*b}RC>>*V)=?It76%6xJ!(Vh#jjYY`$juO>puUE zCL{kwh=e!s^>zLFJ1otVAgv^(+sgnAwty%-PQlBjXUUndoTIb{!c5L%rU&Ui5r6E| zEmg>4thdZi(hc%M(#Lm!36}j{> zrv%Cby*oQ{=o?(Bbg-O^?ewvJCp0cK=*N(4zXp>M)IWqek{e{VfvkOx)F3+vtZ00bx) zC^tP&n3FEF)~lF!YIwj0wnlAeYg8e(=lBV=ZLTRg zKG*g+bx{GSWD&eztkBfVLuuxrOb0rASPtB_eO>T0!vQ@JUy)73)pl_xp>eR6kJ zdnYZL83)rWsT>{0zv`$vlFJWu4+QE{>}D3|%}e!KmZd4p>e7aSb*N?g)i#gb-Wn_& zO{?J`n9z|9h0qx<)O_|B)E_KUHLbuOaI@kZd&(k$&>@puS8{^0Ix@++5V`Yfa0Z0h z?+x)2cWhA^i90UQFL6ixTElYtbmRS8ho)Z{2Ta-ueo%bbEG)n2AG*K5E#9VOao+>8 zf8xkaD8CHXq*Jyi>qMIm_&^?mG_~j6g555ZF}RTbayd?_^-`IY@Na7prnJWIrQL*y zYcftpKMt^&&bC*4s)`rlSG}V)%`S$8aHoHI7Vr9}=SSQl&wbP(!G;@{$t>grMU9-1 z;WD@zQJN2t2^sUoq%6it72n8G@+ctgcFYDLnRL& zq^a=0Ob>&09snaom>pn+nluN|(^_C!#fc}|~?^-XNbi#Ii#gh-zaxYPQ?%0*mA}x;kfdyyEU#nmC+kQ?>@HTIu+UAx zT4Tb(lW3+WwZz!Hfn5}ffLXnq3|NqINQUhYNws?Uvc-z= zWQK3*<+qtK?Sjtk!q!K*hCW zt?>=nxG(sZ<`(H=&iOII^f_X@tKM}P~;p&9KF~(SF0M-qUeu`b@-JW zqqbJb!qZt2zFepBBxVq(yx?q@P*HK?xd6HI3C2E~AjazErYBP+_}94BGjLK0-<+g5 z=DsV_1Nk02e7EUw7De!U1r@Xc8=0w~F7msi1lb{g%y@yKVBvCt@0g+0*96xU2J=DE zzT9Exl0QB-p^|j*nS#q9N7?7(MO4tR{&qDA`ryh?0b0}ugXdXh8{EP-a@_T!NR9)= z$864(V~HM?i`NGVo8P*B@Zt(i0KE|IOd)ZAR^{QNw2Z^%J$eUHLmi{B3;3 za=aD2bfQ$m-(ll=aD@0Pbo{+NE5cueKpLJj{>Enb>nbekhWFS>hQqa#;7wS`xSH`` z=eUxlhW=&-NWVD0(wM(7wr*dWsa$@+U#u|Upo{pxjWpP84U=|K(z^NKFPjD(1t$`eZkKpZ|ok;oaNpy7| zA`IO?|1Ii$#LNr909lrux*^Th81+Se%RU^{7akrpi=9Zc;NHP#XahU#=fCbi6_J2D z7}3>tB!31TJL42YIq?Wk#AV%cIu^Rp&*qQ4JfXjtuFjA|FlTER$PcBdGI9C?xgwFH z9A(L+L{QxQAg%3OEp_SuUN#f1-rQ@(2!FzjMI5EPL|xaKbvtnGAvu!+uY&`9GVShU ze!Gx#F$Sr0Sw*{t+? z%n#VQ%Pvg_0-f^%Zd*5KZEzs`_8?=xLuRbQ%&O~D4y8*#62)#g>|v^1bWcOB>ROy; z?0(P?x_5l9EL-0A4-iFE(RCQfXb*aYTCYQt$&l0jeDMC^7{Eg@fRVE4v5S1-bDt2S zU8=0Jd~P6OipRy{3gpik&pbwDIFE7I?KY3GVW}e0br&(wqv|}G6~e09g3h|-Pt&2+VJW=TQm$UN)EeO8=Aq}a9>u@)FE0U&MNAF+nkDrb^XTARM&=}y(Re9VH8vA zM>EBwFlEv|*ZFrT3|DkYobGPuY^R!`lT}qc6a%Nzc#5bE>!q_5O5=}k(Ue0@Q=X)4$WLaUTD!92= zIiJOltf+R{s|}GULnRD3n*;E#TKxe%Th+Q##VQ za%e%XAiV#FHjn?L(Vw+f+!5(_7r`Ae%{gz*qv@%S~%$QwME9(yqEYZO@CAI9xv^)hOX`2?=p)~cUAx9x8qIPzwFms zmB$LxtMZy(t3M$5&JNFxO130daADkD@f*1?u6~~?-oJ`K)xD0r=BQLGtqb+|`93&_ zaqUOTNabJ2OXNa3;W*mQpJE_&Z{bPTA8nQm&{Oz0^rh_OboJX?zV?T4cydURxPryI z{7XGcl%R%nz1lwpYG`ywvL~epN`D{rDA5bAgGXsM>_K^hQ(+i!gsxBS=6NW@w~L}fx$9wI7_Ai`J(Q7lA6^ROX6#si<_5ZOxY z*I?QhmytuW}m6nn<~qjhKe`yyNwfShl^_+TI(8InanF z4%Nrh@Xr(d@jM6a#UZt0;)wz7tZA)GB_NZ?!NaaL-R2FJuN zk1t4?W=V%uI2{^&d#FRwnhW?AUo>j>`x@iTpF-76ouZWUdA1sHYV)mqT>V;~;1SC{ zp*LRYtDyXYC-Sd%QGFV zTALcA_4K#RB5HS#ofx)+Z`t4!N~y3x<^^B%-g=Xo;X)#jmhg&N!us?OHG{EO7<%P7 z%VskGL7TQmn>JCj86TiYc{g-w(u|k+@ak1gi_*W>^keFGImL*$;_diV_vn4jvJMWJ z_2#^n!=}0P4f>SWOps_1_}DEVMRls2)Q34=NtG`>p_>}d_%?J7of9FMF1y|hkZ%T61^$~1#@bgF+&gou;>Y7yH1&#f4M$rxjs2$Gu4qtAiRHJBwXIA4;C)ZXxlf+Rr zpL1{=B^#%2PuC=&_j*n8z4RGWNpSa#+bR|qe|TM##u~m1&(LVUttRyo)lYTB>(j64 zTCnsLI9_&B#TV%tG~Jq9o3T`0@~iZ0n}Kz4eW~(76_sTK!{`NLC#b7)Hwh_C)=lr$ zxM*Z8dhgP%Qn8bVxlUnT(Qdc%_SnrS_kP-q-9@Atq)Y9N~mG!>RPGSm(3^T)nMVv=4>Hiyn5C-_~3+-h^s)X%b9qG>;n zaeDd0$=cWUm5T4zma2zp)@iKqMc5ZOC#Kv;!ydtbrEKV7ofx}EXO?=&qc~@dpJ$V+ zx!o%Vsd3?2WA?r^ZdT(ga+i1d(=uGZW_sD(PjtK#<4^M0#!Fmu{!-l-^Pg)=#Z|{r zuB@0CvQ!rrm?sqpSCe7=$Qn+(1kK}w5kwrhnu={7UC?e(+xDl!>i~3ZaHn_BWBhfDtKVYPZ)V6J zyYFKv%SmXZH<*qo_QFT{GU!G9w5IcQtW?5oTlD*^kkWI#p?7X0;c}}flcF|7%~c&z zA3Euou|iUU^d_cG>X0P;!cROM+f{$^WI3ocTJBO7UxaFI>NA5I+fAv)-37(m)tyx} zq$Z;_ZIz{N#^p`@8FGY84 zURc~}O**OCOpn661nt*`HFdzT5t;9!>L@ekEO^Esg3k#Qq!}D$JTW&SjQV3moUSg8 zyNq{HkMio!@BU4ne|6Y3uM(-#!;v|aDEnzr{_^>(0-B)yO>NkgB-$KvKNXIP29`Rd zf7g`$4UdrrrC?NskHq?iRaQ?Cq|+au(LPBPNNa;HW6o%mHPO&Om#GML#ZnOp=gBrkY}9#i&xcSECE zCy&;MU}ISu^CI)Eh5$nJI8FUj9{uYGd6?b^cRxBN)aGAUjbs8H!7mqBY5gITmPy^P znRJ#H7cgLd6piG2bPx<$T%Y`4=smk%z&oQ~<6Wp>2itzW6PdzJ9s|?7l1oJK%cyi| z_xg*R)u7eLai$ZRDZVw2+^7fs>3P0;M4?<~3~;SqI23WK6S|kuGMT*)pgEh>2gMT) zpw75I>v^ZcxukE$^3@-^=S#n=oL^V6w`2&LCzpBt|Ksglz^f{*KJEmFL?xb}M5AH} z8f))yOWG4aZ`@G-x@jT@0y=TqLnl)>!S+i!%%;Svvl-$hp zljDUssPBfglw^k_SudxG$|r=v__Lgktsh3rrjvaURq z-bA{)v_o*@UuE!NH_cqGURxI2>i7}SbQuNa!r#P>+*1~^qAmzIK&&Wp5uer337z%; zH$GxtiSIo?yfrSlAu;M{ebrkc*^wqf05flFsfe5J?zKR=^ED1b)=ZfqNv$}zJe<>Z z{m31DlbA2bZr`o~QK3pa@BYnsErK?-sDQLz)o_!9w1;>5Q?&_V+ICQ^^(ShhnP&wj z3xq@1$#Xujr>XHgF^GLuI2dbPw@RvYTw6f8sv1#BzcF_vK9RnI@;3p^Y1xRC36sNiKTc|6KkV@L#`^Vv+B~lquALD3x?zm9VPXEX= zE7&QR8vSkBe5klPmG@#*2sU)5z|^kR<+aO#78B8qrbiLa6`EU2`IfObtVrKKInV~H zncZe=9~DnNt#5wxz|x-MAA>m_Oct7dfHP{zNcWRvVrKr6g}{`+)f4SUUU zqniH+;nReMbh|&b`}XJ-6RZT6hiNFu<`uZNA7)AR^auSX#&SOWhsb7k3!mJ#1)9oR z{ZT~H&DvjQt4i+MzUZW;782Jrwy!+XjpV$iU(P!$CrMB39}$85B?8U9(7eMD0n}69 z_35#m|Lev7EVk$m-8Pxs7x`@igMCw14^D3F+&QB2Ux(!G?A$ppJ_#(`Udes8_=#GSL zZ@Zhv1o!(gV8}hIaoG(_aPv@W8}Jiii!aUNl>NWNTVEeMZvCclt^dd!*YZ(r(?#c| zO4B+#vV2_Ipwe@LF}$!ITZ0rGRMWm?YEd;gn}W_wC;I)TlChYqa(e=y+k=~9~ehD z%EU8zDDjNAWszn0&fgfc()gmY@Da^egt=M!*04&B0QKn-)@q;!w@b zOZne0z#B%%_-%+c)KqeT^03l_@~t;6I^m$P=(WoCV{PA5Qssumfp)_P!@gXuizr-o zgHEA|^n4ug(Gbd4>Xb9|zKJLi2->=>yJ>*MinASxd&UG1Or#7>*cipsNfQtZnH$TX zF9{VSlq;ciM`5ge4?eO$^z>r|wm@{Ot#@&R6eN(eX(g!p7|@{hG?_h;lKjA31I{fNEH+fpy_10qni##@yio z`*8@?ATYt#d0D$j-&1+d|0^Oydn?0LVFoX2xA}5sycz*BSvw0b*X~>Ky$>U)=pW8s zU*HE0S&3@JM`!JhDDy+!ypVpkoohO89G93|fJF#`_ic}q%|59dw>BJc`nG6^r_{6$ zA{lJNxi`!ZH&iajCIaT>c;rs+*YNl6G=1?hCK<@z z{FR7yfiH60e#(80a`&hLTAq-xk8OkoW&g9!{OgSo46V!mrp}-XeM1^Nh9^Wh!y>F6 z3c-9s#(A*&UyhV!?VSynTjuLp5T&y9;E~pljKHT4N9d5i>9nEu{1VHDE*@@b$cpW( ziFCCWxcek#`RKcw7wE|gTr&bUU8FXFJGs{9@&d7+5{rEw{=rY4r_Sw;=*=s)lMxP4XpbERCqv@AMXov}e9}V^R zPv6p+vloiUbS$K~bFMuvnysJ84KqGJrAB-E&AC5zAGWLoWA|ZmPj%(CX~PoOIb3`> zWp5q|6S*t#^XwB(olTGTDW&=GctCBf3ZP3&*D#W8e#l?Z_6rd%i-ruRa<3giGrc7C zyQwT4?c`S5X(zCGgZo1(U!8iC^-=3Gx@W^Q5oyXW%*&}U=x*&rkrGtO0{i=2n{bGB zt+h%q_M`FNaYPQ1AZu5^D9oQQB<0`fxlpZbUqEzww_Gf^z7B<5;?x#vf5}MoWq>jK zSgZ;mnuw}`JK;PuBE0Dilmm%UYbjN;CQ50#Y;=dzITTN*wxl*N`ASMu3E`|(NfYJt zsz9ktZzwCGC~R9f89{dQd3Et5j?-5N=v7@-a7kAu%U=kG%nwZ9pb8FNYuNea1vcE^ z2ry^2M5pBx9|KTqk$rCsRrVZIS1vY-$CfV=d^=mdO z!HVBV*5sH{cV604y-dWKEX1vV>7LQC&O59Q3;hk9sHrDQ7t$iX-EE^-VzXFcvwQ6X z5#~z%H)g~ zOQM-qg=_e^t7He+_YAVZY*Ri=O1u)9>nWfspjf}WF{Lu-VCy$}Si^L_X(n1$=$4)2 znU@Y`qoZJxXrlS0Ey6sB63_F|jpNXG;S@}^7IQkAnVCR^m#ii=Yn<<~NY3-fXo{1Z zCngJuUO0xCY-)kflgs?issVV9*gTK5KQ$$s*xI<^zYw^J^z3TKzR4j{RYGxCqBs#U z4?3vxde*MWFOZR@32w+RdZ`j)k_N^Oi@w^$cpELBfDS2q#O0?pN~!q0AHE&2mkQMC3+EUX?0l*ec_boUcz77Q|5w! z^HFx&_!duHMTjl8rW(>&<<>z+dv-7H%5jB2@=k#($CXE(^CQp2damY1Wdbx_rN4-R zoy`td&ONp&Ys-VXUI0SJyFA6jtr|bj%%u{)>SS#pji|D*YUIFhKP%pEcF$&ldxi?% z7P8BY(>9s>HU=`7m*F1TCKj8n9h^7BY+TUJ;@Ax@F&EIjD@HKDGjx|vzK~GASldF< z@k53f?9r% ze@+|PaOD^JaB<&*U4IoWVF_Jf2|onI6)h@{AEzH<+Q(FuuUyy?UchQt>J^$aUuWp+WWUs)*6iB9I$bzcX4U+l1G>uF4oZi#|S*V9d&O z(`Hyf7J@8>5G!-v4{h&-YoJULZ6B4njR{4s^v9I9r!5ae^S5?@J;)3+>_gGwa&D-$ z%zgD%YU;DTG?KF1?U)_Jy<8wPmHScLGyt9%^)w)1IqnJo-Oqe6g-EfrM+(CnD*Md# z8cpJ4=czFQQXJGR+gGg(hbA@69ZE1F8|&sDu8notLhE~aMTLqbRq97lXXqLq5GGf(Ct`<9-9A`=_sNVsxG45T%|U zE>K+qd05m_T%q)wKLj4#A_b^{sWx-Ny^JkZDZb2&bF6(Ng0DAd{ecyZZ*ge6KSRy^ zn@Ax@GAZgqDpGBqHLT4+L(eX`!@!oWkDx3Lcin1Bv~f3k$i1SCGaCQZATwTy%RJcG z{lI?hi8DId>DHA--@t}-5IVx=9}%UtREzsgSWT^wI>&>#Xf+0QW(XEHunqW7pu+R3 zBh53UOFT9YMtw5ox)~hiud@6LeExa;s@bUeLAuPquJ<_5*t?1gkKxvprbOUn1C; zbMRIJ3tc-BxN*LDBl_XpK!UqZ;ZG>+$jHOMlKv&f;?UTC+i9NZZOtA>N|D&_B)X&iq{ zW-#_(TyKm)+h#!<)yb9?psRICUg$%tM)Ske)2joGskYRTIf#Re7rN=XgB)4DclH9` z*93K*?`wj3&-XP!Ll56?#cqNKmq%S$#`njH`1Dx4bwvj;!hrqxnMhX{-wzJKyzDRV zU_~ndXkMDZO^ZG$97Gx@~GU~H7zQ4zc$ngFD`20t#iqvEbJv9XLe4p>Z zHb<*5uyaGOxHa$f+pN;pRzylOyvsZ`k31hqFusq4`90tN$md_suNtTNvsAp+gI&@O ztTP1je1Dz?%a4kO@%>!}7UBD9-@GIG;XRoI_shT&-7}s{@sJ_?%%Cm2;l?~enLz|A z-ks3~qo(p^M-PfEfuG!qEjD=JeaM)k-a>i90_?mgCUq<`B>jaCBsGMV-d(zo_jqs> zUE&Y%ax-r-dhgM%h9zn`^eVS*Im-{;Yog7w-kWD&;f4z-fGSV2k!r%=8ugv?k* zZhsHi7$q*IEaz#5kcO-inHjt%BaHVQ2RGBSs z3m%b!V@_!~AaU-_l%Zas=N{c~z^ESGP^Bcq+k?n65N4HWqL(_$%S24pLa}SVLB-~c ziJsG3ss;|fJ~Ta!+!4XkVxDs?$*o~uM*0ITVKT4I=#CW_Vm%HXW;;=T+I?zHuXx#T zg}6{1$jWR-Va#zjLI#YD*Al2)V4gCDgNN2<%d1D%cPa!9HMCvrR%y{ z+y~eL=_;mkeei!uWZSjB*{%DHx4)8|;URr{#M*5;1}!U7qd*s5_Z8IMN+dI`w+eGn z8g80lU}$jP>PwOUJQ78Kp>^9(PB*h-Wsa#cQ|T zA9EEFB8ip}U;2GZ?{tX(JyiOXPpQ1Q(KSgMlfTv+GH+eF*!;{;rdl)ymn&pS(J?9;DqffBT5BTN1=B&TWHcT#yMgO%+|*sF0)K1AOF6Fo*|5 zd%)i~h*4CH#K!+_I$I-{+rKN?CO2mwa1d*+N2b)~Ur^AvN7ik&AaGcJtqRKL_%8xM{bA~t?_=KJArQ?Zx*%$FW# zqE_a$^*@Gs9UIp-#HVPWFIl;Lc}15>+-sYq>fUh zaA66oUIzBit>8^CPsT*@j{wD%Nik-Xy2Fuk0{rlozeQf2>k&K4w>F?Bd+_~nwxkC&)bCbkP&S%L}Jmr6*@hl7V9aZ{( z!7XJ?g0Sl3*6QRo*05$Am|!n6v9PiB{Z(9RM`65s841mA>nz^34aQhI*-g3BL@GRV zROjzLs1KFT5GQqq^6elX5y>3cP^0_$PSk0m=q0m(xu5n7* zo{Cv2SvBoU#f?p_NsS|lj8)d^)HS*CVlxO3{Jb=gI;)#qsHau8zS~_rvNOTwhO<*+ zSc9`j+ox1aefrDtI9|tLgt5J;lC5ged3`s4g`GKbx%yVUG36NBI}(gP2+|EY-RI4+?^-3 zNxqhTR@)Qt0Yvu-*#!2sX{y;>{2q0jxvO|AolkMWuGXsPcBEguM&D};D1;%wi~iSx z+b+*3v@8=LOC;{}t*wb<7LeRqsHm>_l9?WPQGH+jboFT_Z}r)fKH0B67&@HcBcFcF z%1u#~^ZL|x@u#a#=APAOcHe=0>YL*wnkr4gd#cP)l{aTJga7T_-cMP7UZ#FMxCJr~a1B|E2!etVJrhS3I*yZqT@Ljk>Qco|GXWA@?J8DC8z1Qn@( zPBdr(i>B9Ansp#CGG#CEE_An!^kQ12;-;&bifA|asAJ-YyOxU7(?QI5y+sfFldAPF z?ty>9v&SQ!efcLg>qbHDVttkNG^jn4u)XB^%4v+4+%34QMBr>K0Kr=6ADU~EO=DRt z1oaSe%7r%eLk{-<-JrH2;xhMWNwH^jX}Yf8SUp{Tb-68YQKR=#{8NtY5FYjye!r(59ur zU1p;Dc!cj1=%I#Fw`G7kWV0kj1OQq-X$g>To3 zF7IEoUCS4J+G~qyz4%S`4ht>`kdz{hSFW8=rV{I8i^mMCYT4NmYdu=y7ALW=6*UUi z{DPK5>j-!E$31y6y#gV$qS`Z$Symj*V?@RqZI|}SjuMfLYOKd$MAa`I9=&BW8%UaI zeC6L}9HSuQdZLJjl#grK-ZG_%$JOXoM$;+Bj86`EBHm3Df(LGXR{1BZr0M{P!ZO36>n69^%CH{zM%V-7410jSfPCp= zpm{vWf*RdREhuMq4Yl~5?NxStny|HQchM$#>H@QM#H2m_)nmV`5dC*;zaXh&#d-81 zBlkiPRhz!e$2+IA#oqD%DB{-4n#vbuR0pGVI?mX5a%|6bUx|F7v@5Jx?C$urFmCht zQ}IEY4@L1^cjg^(_{xT+$1@|G3So=gk_Uxg*idxS zD#B@KvPogRXCCx!6-p<*%zb#i>0Q>bZSXzX8fUs!p%j!-9CC#sMXnNAl4;tgRqx*X zZ1G+9`u3sPG{Z;VmWcDJ_=*yxp_zxe%tJi$&_AgnlT>97pn?j46DcQOU;OlQ?^iMr zGH@ppGDV{x9A4wn7Pb0A2Md>0offv*f&chj<6kdP>^;8yuh0g`Dt5fKpd(xV36Ako z{6Q=92y>D+2d$(zzhe7LUSq9u?PF2$R2?e8bt$de&zN#OQ>G=S>3EDGX9;mQ4+Eih zlZ#)DG#O>C)|%v2u4}>-*VAs>`*;OpYt?-#wgC~%HOjV7<-2wJ`>`ofLRY8z-WQA? zQnUR@9%)YU*q%Abqv+IgBB*lyMNvVBYFfvh##6I%N@! z*RjOkrUP)l@4~+LnWsO!mmRNZdzM@3q1bL1$tOYoc>FPNQKewADt04>Rpw|2?A&N` z`m#*-><~cMJ&)-*RZI79{qf8lzI*PmkB7W7R&B=D)VhOnaAy0DMe4KP4LeWzjxLJ$ zYCKmqy%_1Da&-|}M_U2uqC?e1=o#xLxw<>kU}n=fHQG!8)4{1RcgE3gVNh4TD=Eqt z6DqH3iF>Bj_tjkAS6t0Jb4RAH4!JeagSSpyIppi7c%1zNFE#>>_ z4eP5C>(abEqmJ1En(vl;Th+RmZ_|SSfp*QN6 zI@yPywNZ z`+YWnvV9TOss};is0MrJ0lDuVwC-3);MdW4bu3Y#&A@81&YcS7`Egssk>?~A4 zN$xU{uvh?k#ff1jDA8fp3w}`BdTjna5dWK3uDv=;z27@ehFhcdrsn^gFx2aKPKZf& z`TjBK$#;tPG$QLvhGJc^P`S2gU$~}fcA|8A&oD}bRbi{f(+}Cv_43#0tz;Gf6@@3g zqp<=}c$~7kPa_wiFy$Z)HOg;$iCf`e>S)T`>cKdRsy+1P=TTHwEPlq5X@Bx=kFI9PSaQGkhH1ko8)FnjSbceIMJlO;V~z41ArcX{rdgOr)_CLss$ zZ*}CXx$ES3?kbgB5-Ifg*C_N+E0Ca?pmzB>GXc*-KFyWG)Rj&DE*gT^#dc7N&Hg+BkM9(}Al&kA))@rOtuej0jRXU74=A{QL- zs-MMHf#8hKCW3)ALA+kGls$Q9NK~$#dOS;E`Qh|cP|Yt=!yR9YddWu~AW~exbav+Q zmK^yv8P=`}3aSU%#_F0xl8e@S4^=)t<;0+3$LSvLv6b81A4BeNTca5F_unu^4hKIx?FoaYz2zE5x#_LW!%+3JsXx zbY5XlbVn}jU(aG*lFeVN(Yzo~hA<}5>C@#P&SHGeo5DDuL6+QI>)hCv8BBkN$J2{@ zAN_&3(o27E|Ijzo>7h;?VInokh^$XRi)V13-1K@x1w6;@hOQq+$AeT`DduAs|N1h* zj@*`;Ks{JmW+E5<;wY%lyLhoM*b_RAY2E%|to`-DOkx&aIEWDV_P_e)JUy@W&wI3R z4O9D*{$+5>hn(Q|5HGAimdI_tP*|sYw0&=XQq3MxYFCmv5z0Ynt<*qDHfhYbED==U z7>Ji7DxZqA)={1v-uL%Gia-#z)da(fYf_iwCX)A?ySS$E&#~5W;A(Of}65&_PsF#d=A+M2kYRzAB(#znaRWv3603#JU7` z?zNsO(%2bIiM=-`xM8JzsJ;ZVr;Beh4Grc_=2Z>xXqrDk03ejYzM(w!s1xI+yeW3* zLz#R%GxluO*t6Mf$@gTjP&kqV{(_1Cbff(~(l^VpNS1AYpq%n+0_vJyx|vt)^>_MQ zxu)rA?U1((3(^vWa>^9DuQ5kbOjQXt4NO$MOMoWc7mrzZAZbbmrDymf-dzoP&5$m*wccLYtH7^2sKM4ie-+(u zXe%%iuOcoZ!CXZZdBM=g8?M}$nmASU(Aad=eIyk?W!7+0lP`TC) z*Q&k2^!#|`j#w+loaH1^!;VV;vr5mw@crTP8AntH7Z(?^$vxJpscq2wnc*B%!m68& za9sv#z7%WSK!R5G>Vk{+FXopOzG1f1R~S!)9z?!+!_|#5Y0ZSR%rPuDcxSjdo9G)= zZkiQURwvP+kVnGR)r|G)J|d<`B=dtxSjhO?VWz_P?h6rF!r`BHiWeCC#nGkQL3Kh?-Rifc0eD_A>;wGNkwlDl1^DZ17K zuhlKY}T%Q)4QsE1!$a`Hh5c zW77UU8$B}NP;#V^#j|s>blCH;)^jDjn!L~fxF zZQ-jMjiCvjz8}3Tc#IMnI9!kx4* z#|>5Lkgxz@V57|sRP2^-`pP^heD6UUnHMizN&4r=<%WWklqB$ba0^7xE1VBgiPJ z&Hgd6ELUnOZ)Lx1zZ5;+QuVZ_N>2D*1iSeejnSN!5It(dB4UpFvT^xSr`peQ`;oiI zRqmxmnhV#K&oT_^`CUr|LQBi?#7l?rGXg8cwfLg0@jqAFPi*n&dkCZHjP!XD^2xEq zSJOMJM8+0>VX%av-raGDHSUh+rt{BIhkF`gxz(3ioYk1{hR_S8Eg$8Z8r)z!b*4W3 zIQ%r(K8?|*Tf$G%?bAqoY7Rfu+oyf>N#(oyJqpjf6X_P)r@nWc(dW7K*je42$Q0UH znV;VCtKH4locXc97ap^P_w0PFnR0hOUpoo=twduu5jgro31x=(?XtJ5JQx=)wt2Yb zrpyNj$I-!=hpOa79w=4tkBhMT{7zD?=c`;gjk(CgI_BnA@6Xl-8{M#%-^fna@KR84 zzw=~ujz}My5-dOw&Yovuw6`5&ZGOfS$6;k2&S%YSybcHH5ZlF@8g?slvG2!czTO?9 z$j)?ra2yWo!dUC8bUeO;y$0pJi$bK$lS?Y!g=JFbbSIxNDKuhszC9?e_!tglX}0fE z4)TFB`u5t?VePA@7Iv?;6dVF?o~&M^{U`X@VGd{QRlYl=B(%KtLPcztvTr!`EsNN_ z4_Zb9=$35}&NxiW`K~S55W6xixs3r}%0V0nJ?I=lzp5)=n09A!dp3pozhT9=ulk=a z`9hfymr)QMnPrD7*TQDA5!wFymBL)h+S@PYk!|KCuRk9wU8rtJ`Cn9s%q+RM76=M; zWrL)mkiMr6*n3{dXHCNcb_x!Q84F74hn>d^=LWn3@Sy$&u`rrBi^rY$|yVH3}V|bfiAX!lEVh_NwiF!KQKR;7&xTsXYO4lyBsB0 z@RfJ>S4e03y;uaX#a@f6HMht_0Wa$|Nad=mcT7n!DpHt+U6hMf%#mV<$KtGe=VDXV z--^mZDeZM5!$IA0q7c;mXkHEKdnhTDch{W}8KSZr_fOd*zjMZ&1Vu}JoNs%H8T7JWgx>r>ZqkbO6vgke~i4l4?5!U$&JYOm?*+ z-lq*2{hEH7O|qYWv-{>6RE4hj?(NTs&ALe)+}o!EnM>r39n9pMA$&g#;eCb`aj^va z-?s76kI;?(W4tZC)&M=}3k-ovr|cI`4PwJ>ZyV)-G3uLLlL;<#RPSV!p6tnr-H#GOV~ z8d*lhF#=?9c6)czk#OG!^TarkEOJd3U%?J7{OF(T0l(15;dYJdgk2R!>QML9L}P52 z@kcwL?hE--P6>wGtfi0>?Ccym_%mcd_wR}WXIhxHIwd&3>Th_ZEmiKtRc`yj4GTA%^xhI&yT zTrIqaI=dF^n!jSRZt?w34_txLqfQhoYCeb$qdfXnRfn68QR3%oJi;;Sy#haiIRLia z`MK0$)6fWw>ae2g@iAGbA*4MlG-%Lklq)-7QWfrHo1EIRN9fWe5znk!j&VpozY|pu zh1B6b{HpY%xuZQ@pqGZozw0}j=WdB;6!C>y6K063HSS_uK7jqCAJ}~%nAct>c(CjG zfi;I<)-7%y5B8;gU|$3bB*(-jt%@gUeUl&b% zES`cG^0NM(mH)~1Y?PG>h1lg$ZPkZ=W3w>7rB6zFbQVRIgQKa{3Q}{#n|_KVB+G({ zrG!Mj9-qXOYo}4qgz4Gl zgPGvEb(xsAv1wh`)@Kn2q6xz#6kpCyNK{S5!q&bF zxjU0MTS5&My1V4$oJ%>JUM7bGj%1JLmuCAchG3h8*&1UpZ-<3=M!kl1|$>}yN zg;vk^s5qE`{yCcEG5&+FX%P^{%Q<>=@@e+fOeF}Tf~bp~*{F-wjk$?j!eO6^cdsFF z<+#?3*N=O4BjK$R4qQE9Waqd&->urRvZZm~*3QA>t&C|;x-*V3Wek<+SetjCP{yNZ zs^S4vw{lpPlwhy^n|dYa6|3(s9{Hn=Y42#}Y88kY423U82NMUumF2BV2PdEH+%cl_ zokMb8?A$Rh_Rvxjs_{ApJ>)*Wf{b!$d?TWRN}!Y5<4hsvp6P@**Y*;iUiidjohIjK z>!#_#X|iyd9OOOr*8VyK#cvB_7TBI6pk%@JQ(4VKMd~LBD_`}akGfanb@7_x4*y8} z0TY5899{5F1CrJaiZSQH+SbQr9brWt5MN2H zD!k~+9^fqf=mz<2eNLVKjLQ4dn_+o~p2CBk+2%799Bt4~$8Nk|3CR}cE+U|t^&E-F`BiH$ks(NjdUv79#w(ZrYaBB34{L^2auvWNUi zVFS9?LhI`+8???_=(Cll@6}KoUN!1|XcRS)L(_Bv7`cOv@{Ec6qNkaT&^`OF4zo)T zpgnZ;uJaj38lz0LA20LG3~q0&%EDV8W;4y#fD!l5qqfCccXo5F#e(=&ZuqRt<)W+i z(2^&zNJ?17pi-;)L+getihmaRTVEKxzUwa{5;oqJ8K$q+}*Kb$k)rE!Ww~gM+JDUgn zW6k_%tAG)5iYUsCT6_0hQDt4>uDPF6#`jaXD_5wC)93LA(CsIOxXDy;%T@xV>zCcP z{(zK`$BgQ%;Ka?|eM`0Wl6e9$ay+uJHgk-n^6m@^b|ZfHk&YzMJM$%WyXM`aq@du3 z`eCwg7-)Pu1O4#5v_RCbrlAr;g`g|$3hsU#f@l_8**SwF0Q2VXPSL0NqEB3rH-;x5 z@(#1&#Db}Um_0+B3sf}BiHK^pk}Z35N7u9b=VFq6)w)Z54;eo0(Zt>a>_d+O#jt(i zp}DkCgtft?;6ZzqGl;QDj!ztn#zDh5qU>S~yV4ttv=v#ajVGVyii-hg^W17y6F9sO zmr3hS`HO#P9c!P}`H9pQaPTdSrP?h`wtFJDcwJ#lFezV)#VNT+$F&WljDc20mBDeH zu9Z>j%eZh*HK#eHv?dX2&EqfVtt&|c-=>Ve#8QqfXd6&d`DQGI7uS~DN~$YAh@~Fq zO*vbC!NXa>unp&=25r!aD-(m2vDWzlP7T>UJ}5ea4w^tv!9=8RdpzKO@}!{X7{2mx zzq69VH=GrWCF_U;S5azq?gJQD({mMn^1Wq)GlVlTK_c2o*yyT6a)@`Ux!7(1wP3>1 zH(2>BE$$niH6@ZAXKRvg)+C>`(6gH4Uuu%e(%ekm?M^kY@QeE19UXo#a0Lz4B>!AP zyy-nkjD?BzCD50T4>$d@#s7?W0v1|>~0!tN~pdb3dee{D}OO`tfR!Q#zQG43Hi}sttsE}^A7xO5X6%k^x8z=i%b8uaK(VPl_MkgdNnz7j?ju?qgBWb_L|P~IB`n)i48r1F|G z8P71pd&pX_)KYT0*h!xG>b^=~b-Fs*h#vXJTei*b-@Q=w#LP{y@U(xoMZYQk>z*7W zguEe9k6DyYgP4nlGd7N=J!Hp=P?(d+Hf5{{yIcw0=b-nQD~ktde0eS2+C3(g>J&&4 z@AgmgRI2H-P8EioY$4c_-4)2I)z|54-HX9d^G}@`n_Ol$QE_anw%+^LGnrm?x$}Ip zVU;pxhp7XT#k4ySj4Q0}?norZ6;`!$55)aWq7OW45c3#UxeHkwk8TgLDZ9CR=ZAZO)^fce zXLK;iPu2pV^k%+0%+}Q9;Z5ldXXWbd=<1NWP1ZP^A8Y#!57&QHiBNzbK}f;DqpNUa zkGcM6y|IyTb>kjvmfkr#7pO5w#Al6qGYGqJ=5qBadk^wHh@Qo92p`>5W4%rheNz+d zG+%}5(Ld7Vewc3oP=iacJs?FT?j$3x%xvqKEFHc;pZaYGhA*fnqqlcHr?fE|wgsO3 zJR)QRTBmc?2sfI!L)|dtXck%W4=~mXeMW$UU5p#~0bvC><7vV_uzyCH(i&$!*{xW~ zSJSzqu4o&oz8uG~l&rRN#OX{SA!;eORxNdRgf-DUvOK~)EBWqv`)>S)#l@*Zfvk|^ zyXjhfV~g)BhSWsR=A}8BrJF+CIVJ^=S>po46Cy2m3(8aE(y zL{F@WwY{vSqZxGIE%p_6KCIF&ypilslCBc8kF=seTaQj8Qt@}sOWR<8dQmg4olILw zEp`XdNT^XFZk{gPQDt*LcS(t{hnjWb5FUv`%I9FVJ;m!_)72urMEX3%Ae}TFDadky zvZ)GQQWPIgh>KQ>UK^)=vl*HhplX!L{}ScvdwJLW`k8F~q;f;I1m$KOjG5Ak-MlJa zT8ZJ4{-;>s%15B}ojhfzMkKqcP{&NFv-9a} zV!Ts%Fa1?0qd(r6|510>uiarF(>1gAd^t9&&hsl|xkAm?pCE7Za~iGCSLLMk5Im?Z zhbxWZaPIBeRxpAyCGEax>oO@XMmRPqBR1;GqAgYuXKiA;f=$6&dQTR-t)HM^t);GR z{Ic@sF2kZf@TILo3|A6QuF@5dmJeTYm7ImBt}0VNO?F*rl^R?|gUi+61Jon1Fl%9}rn%=L#+r90?EuU3mj zTLpWiPqrQ}So*Bm0#B@-r&$HWNN<5rmq4?e^hPo7qKA2s8J1yQe(7*VzN4f56I3Na zP>il@A?wwn*dS&~^Gwb_ZC%qcdw#wYo?Qa1?J6&ZfK#5&03MJ5QL;*-_*NYz-hHqs z(rxzRk?848n?ITD-*3HuVTj)Mt3;VF;Ea;D8yQe7h3=~3JspcBQx)O>R0YF9Mz)c1 zt@JWFf|8AujkMCnoT(5AW-pV6fdiUh1~dakmiYDBxxQEm^Qx%cx-F}AD9rXP<8jhc zg(@gQ%0_G8(RoDY0o5J>M9q!?SJmZCQbt3@7* zpjIguJIZAVmeFWQVwL=u=ai{Xk`m0EYZYElX5&h)kX#L+co}KLMHhIMGe~5iYy^<=9u?+p=D5*&0sBAc``n4#GoJ!nFpaP-4IphC0YOZ4DA zepgtk8D5BIKET&t<_r7pGe{=Lq6{@<&-6#_mG}?Xg*oUd@q7bKmMBl zKBz8P0kT~nn@w}_t#?0xY%4bV&h^HF8%#xAKiLI;^)G+VPt`5o>|OrPe*US;-|JJA zzen%#&;0b|Ti8N=M(%dURzLlBFZ#R}f4+D5H}0nV*sRdM8<8(@dt4qE zxJ&7Xp7d=2acm#^_=oYaFcPho~Q z#d>g0`Bm`}wW~}O>Y>~oC@G$qrkRx7SBobT`jk#ryKL@`YIY zZAu2IDt_%Do_VOXhhTPx5@=u*#am&tlZM|=q9R(i4V;pIj=xk760^vs6z+UFLTwLc1L(kFxUDJBVvMz@w5+GJThL-*lo~W z*gr{?zp$yhyX%J;rl2g}eLPf9Jy>U3C<10$SV05!>D2%X+}Q>YFm7L!a?*>i??#eLq$G2luZ3;!mnSHmhCz*=tPD%&g*pmZpp#>6zKr|w(=dibr~W3-rq4`g1@nwGCCUCNnCB&AZPPg-WhfytJ5(l|s^O5+yR$x* zPZE(w?KYr{uPC0JX(dx=Us1`Hj;PFxib_%MnszHIXH!$xd^i8ckmuhKK?%v!i#}8P z%ggXj#WZiZUh;ATmF-GiVzbuuqraL_t4Ys3cqn!*L#b7+n!$ytJ%~m8ApN^UH?7(s z=X6qrhQ4EVLCkr+tK@kKlAf3e49?J1E(LUmH8-O{BbIY-4Z6kR+%nzgPW%zX)z$L- z`0f8Yd-XFtn9|bSX_J~TAdd#CrOE%Ry;`%7mhRqO-QD~Id-b-oW@BDTM)u(TNkTIB zEzecqlwjSxaMdTyPhzvsR+4WtPG){U)pOTVweIO1&&$bY6c`>d91iV;M?{1&O1eZ3 zE8xG17ihkbbRC3s;-i1Y2r*~mbyoo$M>;}=8^lAOnRYYH<+DaQp_e)H_f&W-y zl8K}xCfQ8!ROUDD?YH+dH0tGt{HG5yXpk+`Ad^eM87n*UMVVj_Qy@U|u3QS@T$`GZ zxz<*?S&8iKvb=5K?L7WhC4>Ok+~@k-JU>G|=<+A*Hrzd#{d7igC=1As`KVG|pX;=u_5rS3$ zI>@fy)r^nL7jX|-)dTvM5R_GvqTCP^M-pyA4_ep*`nZ9z)!F)>=!p<-+4#a%zaDP` z$RaaE*-}N#Z>rTSC8UZ*+m2r?CQy$;@lt%w!e7+k+sWj$=#L>JGhTwSJVxlfOgra> zptXQL7?K2I70;Rnt?dCl#bdGfAHqUM-KC1I4GW*H9MgS{$vrtvw!+&=ThxcCqOoCf zXWOga<*PjNJwO(xCzUN#^cSlryss@)v`3ixfiSmzeeQ+&lFdCetaOpV<=wJLJRP2- z4>vARHj4L$`1f%25msql-L;;p*ZSN;ZBHGM{r2jAeQpEDa&_(>g>v47fA@U3(dWJ` z%>-)@g5@KA( z3$(6WE1kAkHp^yr@Cs4uO8$p?jdiyudZ>zlG}d;zPz~76%N&AuGq&Df8`)H&mfz@{ z!*{Fyxa$x_KYgPh7)sNx2j&3*R(9%Is9H3~ zt=0>bYh!H#$>H99m(X4Aht`^I1~{0v(5SV*K!b^*v8P$nWZF%lb^En^gsNDVqE0b*-GOow^T1+i*&CB)ht}la&#zc~JkV%{0WsmRu&;%=O8id17BndBE-1+)u&lzxW*pB5r za=_XBT!mp9XAU{(2|AsNDBIQ+=~HHRwC&ZP4~!p%DTzWwB9UqpE$)3-$-+)$zLE$G zP8Vb6;36QkbI{YKXJ5Y#_LwmGC2hD?qZ3H3@f1AMP&K=;^f>LHw9GI7N4ICd*rzCP z&L>D+i)TDR6+%YT*#@D<1=kPL`MeWJQ}uPE*@3-#l;FOrX#o`J7YLMzOzQPm}_#YH6P|Ni1-D1*lrOYitzauROdSHu<_wHTze)*k>FwN*cr0}iBhy%V z`~*(IZ=X^?5_u~G!gl>Ceu+|VJi4a+AF;Oaq;l>BN{-rn@$XYa__Z*TAwy5{G?w*; z|2GFY)NtA?Jn88UT+<7xRXw8Xpl-f@4<3jJ2LpYxLo}*`6CvGROGG*_y#^48+ReJ- zu-f94AMsM4Xyxrc*_Ib-0lr z(i>t1QCw-(cGC2&f9kdA;d4#pyX>i5!EyCE(GF@c5crN8pWKqZMoKcu5!yO+ydtUw zf|eS}@+wHWL6iz-cTlPYKR&|;>jbYP8A(aWI;Z@>{G4V&-@tc^z)6I+E_r|#cgdk% z^Iy?dw=W=ISrsi&GbF)FMj7PP_6Q{Wp5wk7LaK0s-030T`$_~7EOXq15K=W8kC$J+C{nw%Y66h1MYv^9 zFpH?@l8G2%P48JJK8*{-=r}Q5L!V z2!p)j@(3hngygtH2$?13OCIv-I1At!qvQnZ^HL4|#92i;cxEF-V3JE3l2w zT1ZzLY+fogm1#PmP8OcOilRhFz@xw2uVwawZ)6AYsWsL z`t=QwY}Rv63jJu$y+o)lkbjKs<;JGUakm2L{-SaK*GPqGnQL`qyrQ~DSg{eSUjMk; z?dNO!W?iI4>#eg?PKeK*zmKFIu39$j7jk!cjPzjp>U5EQsZs<==krocbn^#X2ZPZ6kZr*n-rOtsVuFl4fXN@xvIA=7ZGD^jqsQVU`3$?Z=NXa9~@Cr`PS4J z)VQ?txCw0x$j1o|Tec#h-7UXfCXB{w2w>hwNt%H`ECuPbZjTXRD!+`qh5+vD;l9TW z8a=7(^`dCLYw@gd`2~?q6n5@165Nl&j16imr4{n)kKdiHN!Db2*743q^NrB*aSCsPWTrwKw=2FGpF`WbX#Yj`F&}M=BPN`rZUXTo{VCHL* zg`-1j7b4?z3MtM^c1~%F+B`{n#Tlziy>2962h7JrD=~T=KqV^Q@>}_BKD%|pcBnzN zf1Mw}&9ZG&0@<` z|3zlrgal^wk7CvxgGWHD!phC={H%ekh&4Ay8hwbBiaTcoD)UUSZY*g>|{E| znn;v49q)d{DCgp8VAx~nuc%baEfO1?J;R$kOl-Q=Fm7U^k zYJMFFNyk7_>{>5Ik&LH5=D6?b?x)i$^t*MrP>Qub#!LDh{z#2T@2C;dD_qg_l8jlY z-a_{@5kab{*x%9(l`Z(zDDrzrA#_#y5Swd2pm~i^J-DWsHWC9}(|sG{htKWg|h)u>UEVo{{-@a%J3WkW3{urIQx; ziUr!t4=2>?n+Et>TrvZNJLE~B&=wLPql_iVAS^ATf^9a_p>F*HMjn#;^#>!W?NB9r zaEMewTj);E2ox@3*a-2wQn_dQ(nvO@~d&52Sm>S3h%d zBvl)k+~@W(_umMgena$(m*Gmk!0J&XKbp!pKbY2jEmDk44*o}#d|QQp{wJE4-*_Gq za}l;8$PVm>?Ax@$9qN&(y(UtN%~F$l3fa-!>6IoXEaYJa*x ztSt?-Yl0JTf}T#H)f|7{{;;vTAA}RZHd2i33*rk+KfX>zAP0k0kzWMLQuKeL{P_%A&mbYFb}QgK!craZ;RQ?|X{J5@}5hceqsErlMs&@|tjKui01g^+PDW=56t z7YUYejsKK(uI4m>5D8U<4lK@ zu*B2)$-RXj|%=2Q9Jv~%N0qWv!TwM5i=_=T)U#Z8*(4a+lXnH?L)sd;fO){Jwp zW_;u-v6R)9+i9apx|&cGcT|_n3LkmLM*C212~M+eIAESp_fFriMby`g;pZZ$#w6jB1`p7{xC_K)3 zkizkN_olapjJ($PAR~O~Lx{N1cq%St1)?f;`^wg>x#_PG?~w>5;>@nDNp2Q&`x+w98W_paY6V`%T^#b>B3tW%o3&uR+skU#9P_u)#} zdh(Mp3qXAGWl_}W#49|1#3)te2Zfz)42(}&({-O#9onO)-o# zeo$S)MuzkRIYU*rF=ndh{i{@DW|Cv0`Wg3R8y#yOEO^6+Qp(bg!*lG`oG#h9sF^Ot z#TIt)rSZ&uz!V`6;!Rth)baAHPnyBbU^ZQ^smyP4X+`fvr=!qBndR$@)WuUq5LuUs zXDXp()h1`xBYroJT=E4SV@+e z62|lb48vz$W}jdBSq;IK(7LT8mO4?zaXBF)ZJD{JK5HMI3@7s+#t0pefxtR5`D?I| zhq8q!^jgu1>g1RgF!lYK=Y+P^O+(_Xoor(2;7*>d)S5*iE5Yg=B3b*MW z(q`QKgbycNj$&eG{4sO6*oCWFdZuo1n5s%RtEzeX33=ZGU7c?IHIz966Ev%9^w7hP z7T@XbzTPxhJ>C#c=?_grhs=(vvrJJW8L)oxGtcmds$3hG0eeZ$G!PLznWKj#miW3% zd^n}0Fvpb+&d$^u{~DI*UB=qwF`&zausXy0numPZrV!#;g;4Lx^Nn`bMjcOP$NT%n zBZuh3y+SzG6Z;FN_a*k{NN`uFI9i8tG9^{UpckH~#SPZh2#LSjuqc8LDk6b-NCNwG z%$dfJ;=VuFFnecQ--`YsGle>8tvDW#52>n0z4`Ksei`l#GgK*q`vYU0Tdl%9o+e@y zLIGqurRqgQCz8AC zo;bIzY*rDsPJ@5`@`?O2wWfD0v#_pEfqI}tQcgTs?-c3@vdGv*VM$HpxSRPSJ_>`k zM^I(gJ-g@E|4V(=`p@*P@1d!mP+yAKuGGBgYe^pZy55B1!O}YYqObMKsUqhs*q;qc zv9=mPArC67Hb4WA?vf1)cW_2rG*U)Q`1kE!Zd_e0~!7Bh@D#*o}Clz z1$9RmW!m^rerfnnk@-?(4{~z2TVD2(q4?t_f(G$nsQ#^;{LN`h5YTaHBdrWERbx`P z^fX5>g3Vkm`Ym&H7;Z4<_im0z&j?Czw-msJYe?;ST&4I1iJRKOMj1olV^Xbf5wn##*44R^>bQISrLa-{{>n^=G|uYRQi7@riJiU`*?3&-y>T9w>iKRC9?s{H9k{7x zv`bIe*>`^|fGb0wq=2$#uEfhnuMdkzDO!w!({+(70CZ7dr42o1vX9v};1NvpTL1{zIfe zdfEQ~gyCtN4&iqKwXeQzv~Xh_Uai={xkey1BE=Yc8*-&ktEf7Txze&w1gY$7eA69= zM8UhB5OnCX3TfRI`5>JIYlERfNj#XK)KVa4hPIVs??^)(UuUfH}^j z(F1Kfu`k}glx1ePBx&AX{7`scRRqjQ8(#~+>>-N^mEerpl-Vd+}f zP>(QN@G8Qze@M-n$x<^y&&<$RkpHIWa9>C;{4)J)fuw?H6nNWyqbJJ@k~nsg1p! zXU-+64jFb&C$y_J@3pu6C3@(Jf~R;^Ftm+XashDLZkdkD!osQ0$r+UNY7<*%G}Xj) z7lCVj0fz0mMP<`<$DO0HGg@9`#EWz$-gDdHil>`d&SUZ9@KRUzSucpK+xBSU_Lfj* zF%GJ1)z~#pU#Wd|tw~SOR5d^fJ+`=L^UWBSDAu!l(iGK?ce4E>2>lq}?52yi_(czv zwr(FVV?fsr+y^_1q2nh+_(ibpXc*32_MsR$wAEea{$=XdE=)y-2N&w#@}^ThVU(0W zyMNh<2>lzB{=K+FRJxc@4Qk3*vjb%CT2rZ}YoV+0c%Jp^2%eu4o^3eH+#i*i#d91> ze_iv`%Jgt)+n{JAq!F3+GCHK+H`XjldJ1K}zT&^$=V7^PBrVst&(X<~TTNUI9XotX z1P7y4j&L|R#G%TXGeb+MpI|zK)1G4YoUN(CywHAlY9g`Kx;)ZIWCk6YF%!DOrI@8CJ=c4-9Jpxy*)%id8<55nf#OJ+>q zo=43^PLY4kbRXosUbbC@jl6CvJ)(X9oSo-$Kv)yX!%_FQhGSd0oCY)Db zM71uTjy1Ad45kYMM6E<-TJ+-EJ9N>wXA?+f!hv zyswPzONJ`JeJ?CT6|)dc5Lim`_1qTA)D)$ijd**DsMLjihs5{zQ97qz+5hOK<`H4p z#TM%#5(E=*^{sFG3|GvDh1iK~Avtb-SF)H~tA^J1jHpJS{bu#0f=Uay0($bqQOa(( z@CLndp{EC9!F+c<_&|i}^1ehkSqZ>-midYwNB8dsHcag~H!Qp^{jwCpq7SUh@17kg z(=55Sp^7^l{&I(q!){n`lfDW2Je?WlvOLsFo~L3BZvv4kuteaU;vny;q%K66dMv1) z^a#}i1qZ*Pu?qXs#0)+_;NXm<-Rnd!EEw(zqtMKp!1m31`@gg4F-Zf(bp6gf_YGVd z{m+B>lO(y1y_mP?3UYTt;eVf95`di`TXBtz#Ak|O|NMxEw$G|AzQCGFr zMdDozv=^#WHH7Iclfpg?32mv5pON9PoAwZ5FFns)UZ9a~G@YNd!rsSGk^T(dvZS_$ zUi6O5Liwq^5tiUbMM`-ElUS9g7WsVo~p7>^oYK-Y~K$rZEFX*I0T`Ce8T?I zD4@tv>$0gKTnno~LtC~V*f^l;UUG+dBIUpZSk*Xkgn2J|PsNWHJui^18?LcRggxU7 zZ!YD-!G+7*m`U*G(*K_S<=4Xe%f|Q0|DQ{Ckv}$TA9NTv)Jw+dBx7~ZbF#+DS8Xf` zr}pJc>~7e!AEW5{Mixl#GBX)AuEOfMnv(*4qlu1OWp;(=4NsZ!zIBm)*i84d+r#ta z*Ur$!N$H`y@rEaTr}{)?clt;njKt`cvXa?}QZDcT8qMmoe548B|LAza3n|r2c-K_T z-qFQx5!p3kezv^Dz&b(C;O1;LEGnZ4 zl_+HPKM2P^5Q8Qxstk)-Vew0SO67gFUxr(iAr)qT7eRZ3GQ7wq_o%9&AdKeho!5q4 z`z5|B+U|*v;aDLs;4P^ZWiok~F4?Pt`RbSHk`%7@s(g1E8>CmMp^-%QIF2_EY>7@x ztt;LYHk+UjMP|FAStIcCo@@oDMQ}im5dWksk13Tro(N|v!%uyN?~jUPfDLk7N*QK{ z89WgVQii|s$u07jO>d3l8mU|dyy=^o_kFvOvv+&ed<{kOSHdv+>&L06w0^o#ln2{# z$dd2wA)jzB6qTattC3Q>e$z*OW3#^Qa})7$uM_blVRO1yAxu z)$QA$k>`URE-uF|Z-`HNF`oMrEamxG#zf^ZF~tjN?qqRHEgVy~%>9IL9hl+=(WPc% zikC3}-1Bsd+L@8h%P<_=Qr}zK#zuO}nBwQka=%hVW|7-{P8sI;3^R|2WH6?ft_)Mc z3}u!fPZ>J+bM+(~yKFFx*FUYF2aI^rAGZ*IW%oz$FJo2*{TT zcY$(&ZH3X(G}djKj3UVik$R0HYlPaL{?(fzU;Gar7x9t0UoMMeF^zSHvfQdv>L{@W zmMX*bKEsfxcf>T-H$^xOG*W8-!E4xLzxg8D8%@Vy3A@U!!Dz-E?y8pz%*7Z`&!Ug zy?ab*dNK?Q2WPo)>qUt44JOjP$KU@d&o#S~=ldyg7xMfiFVD4-=eXoKt~Mdw>Zeq} zsc%Y#S2rTV^K5+Jep+OBp2-u>$Z+072NyZ)$WKgqwx)9F)kA7>Ikl5T+jo??dj){a&ns|cVuNOn_$<~= zvv?sXz}==hb<)nVh`{BR!2zEUbD0Hvw-&e3_ zgct5b1p9GkWLg+qIyN%BD||N*XBH(>GXt}Go{!W$@bE~hO|buYM^Rq=Cm{;~NoNs|s9aWzHh61du_hME0#PQoU_h!7QK{M#TdEW` z0X2}oCV_QWMWwCQOR25aT5qiu(0WM-62M!8DhO2(Z?mRK1S=pye&6qTW@cwL8;tn= z-oIWxWS*U8p36DsIp;j*InOP|3?{ysIO~yR{(EPa1v_2kc+{;wMX(E5==Uus6zyN2 z>I^6-?&^@C2Qy??8I)izXNC(1*eR?A=yWRBKmN6g3?kTb-?9aJ2Blarrdd!1DPC%K z%+@e~CBy#D`l2xd=DA~P>)3;Y<2Yk_2A<8l*8t;!-uOv(JAU@dXxy3A^EGYN2Doj~ zyUD2}>6x_|n5Ib2gsGX{t#L&jo4DQq@kDx%Gh9`Bc_Kn)A zjgWA44TrZVj!(Kt&Fryru!aRdcq+3Y^5`?I{(b`FIX|6Q^X;s8_74@~Fxg7_87%O* zU=`w@lyW9an#fu}0+R%qY*IQ&HYo$o<~54C{Xl-X6ir(>@TkW3vU+aQR^guIP%m7I z?s&e?nyMW0s*BK?KZ11HlvQC8K1ZRsfDd?TCadKGVCIv`s?{?UxP>;jLHU7d0suD; z=ZL4|gK|K0oQoOCp$&8NC@hPI;gQf*VHAS)*H$4_&-G-2nBI+JTQu*c1r?Zf_4`00 zE~Q5|!{K}SdY;)bC3m2>1i>!6drA)i6*0F{ri`tz}a!L9ZCRg=|Jyf3Y8ejP)039K>P0+&+>qW`&0DXFJ#p z!N^?0WH{gB9lT@t*H+-u(Ia|n4HLm5iWD*h6lrc_dst`1G*;W6v!54b3KxbD006N- z#m0D%y!eu1j(bZTnGFpGppnL`gSSFApvnb(P#O-_4O;#20$+|ES>tvg;9%nxy&bp3 zU~*a+y0chNi&Td7Tny3c#a{LiGAJ;$%}qD{*@jP;kK4xpkjyx@U;~%GPv^pT_Qw-& z_jhb2h*fM12pMJKyDZ`Vb!FUW&$*83RCex0?BmuH)I`TjuA43~V51!nNke3bS0n z%dl^`1pGv78khj^!>$N%*f8RaV#9alJnKrf?viRC?(De`%tcbh`kw^Ygf&rVjpW9e z5N7*FsvUAjb`-|*(pex5oj0;~&V^eG?$5hrAcBk2B^x$wVW$9omc(wz456W>Pl%1j z6uL!zWXIT$OKVZl3g+P6G=!Wno6&*ROP7n{xmU&}b=xt!D`;aHX-_;?ePUbTLb$8X zA_618S^&JGIy67u=3=QOQgL>}%jnRJ{(q5R&_fJx-wf}@yQP?df$OhudBJUnH?lvk z#MDS^_%>oJiwdHd+l=hD84HAofgbxE!DNCKgnD$5Ky54{Q(=51fTBHS6l^Du)5($~ z6erqZ90C~maF7JCTZ6HotJa0mo5^>p@m6e%0~Y_v4DhAB}d{I%an zu#xD8GK|&~^P|12%|%5U=TFrQC^D>sL{8G4rOPT$(#`x7Xj>cZw7P?m5kLGeWu@R@BEYU+ zZe*b9(4#NLe=ODXe~-~o%r}8evdjtr1f}s>K!sg{gIyUu#;0)PVhfCUuB4ag6biVl zdO&Yxi@(NYXR(o2Y_w4c6BVisg$j&Oa|~AZu~C2u`!e8DDAO3C&6FyOUx9LXA_}$* z4f=b5QisJX$6S7t#lIoUTmd^#)+i&jw&0p#krGrj10$N;>G7LnNNsgt3)iw|YcfAw zt?d1z=pGY+(@tDY?e@3CYUL7M)jw{9^^E>8AcFjGZVp5Aj}ij9Jidc3^BMA5pJhm| ztt=g|WJ>P$B0Gm5I73_cs{xS@hXf0EYju~fIJATL2)0d-KA>K$Izz> z(w`-b1q(v8#SN9x3>I!tOtn4b{;CAoI=DsDKOOw^3N6DAR&Yj4Z?D1G1ob~d#EAad z;?uGa9<9}9Vu8hozFOT&Xd1hEZIupxvBFwgHTBGL94J+HI}+eSJ|glZVi6-&&gvKZ zVjZ0LGnl`5olXLz<5Zp})tQIgX{>`Cb#3JhNZE{(XG+Rum2wM}X&T5>+e2F=D!350 zSV%Wtf+JtAnP~K0hr2Aa2#>?VeHP6jDk@&~XKsOr*=n)&IeaF|&6p4yEghR;22^Y# zLPc3fU6qBTWL4H`S5);|XEtI6KQ}ij@EU8=wN+(jYO8|z3*T#p&6M5*!;+8!rp2c) zDRwbIc7l2gP1J^4+1}RMUy}%@gY}q~GOFbQ%XRwg~$!!Cx zXxscrx-p^!<; z_wD%IS+)`Vw7Mt62(lFeCK1UtZPsNCUnA^X90Gwg8?EI3Lju3^8YPch9{0R0ZPW+Xe;cD`X$Hlr7$SsdK5NajipMsbnWO=^)Xl z2`7;9j?}vQDQ}0-rgbwM;%c??B(a49_36b_ndUz+GUl)VQTN;u6?KA zuEt61lh{f|C_Pi?jCVGWu;U*-a?!iRqF9ZD7QI8goLnmyPbU6_lM7`@F2pJ$qX9jr zE!X2Hxo9QYW40J1cWP`#7`sa!ObAn#CA%}>>nz^f^SEe&|47hTssyZ@_qRG3zhsvDOFVraUgC0_4MKfp4J=ag#y3D0&Xq=X3=xy$ zcUUTHzJOSBh06Fyhm1WoiaK=~wliWq2JffM5N9P&3qpf9G=ZvFuPyJ4kXW(&!H5Cc z;w7ZdF%@H6g#crx5Ete@wCnu(rs<@F{r|O~?xchfITg0W)q!0{9IMsM_Uiu5^=knV z+Jiq1`XWjC)uhZ(zoxUq*zilK@M;hlGR8omj)y{Bn!AJVyaD-jqtWo8SdhvlY-)F^dE=y{Tdkb=;zP6jtL zrb5Xv*#mBr>LqcaVuezu5rre!_D(+1Ab{20IVo(kv zu0Vp$QjIuHtLuZ|Wc(+vF0Diz#FKMrK8#Kr0S3LjmZZ_s?kCk~2r7Tr4yT`lWS#0B z{cM#+kOq=rvT`~YM{}g$sBd!d2k*Gc_{i!*6OvX62V}(=GQJwg;TVaGs;q)3B-xe=x=ZB`B`Ltb@j2FKRDQqa(N4wI15mD1UFcsEwJRNA;TLRTM$6e{y9HI(HRTY zsG_g0LENahPhv)&_@n>x^k%GR#f+4nmw?$`Zk&8Gr7}?)VyE%kk?pn3Q=SWOd-;Cne zxSG*5`$lPtzbjEw`gT*mXp4_QMC8LBjUOH@0QCkyAB}4KsC&=71Z+#}7Ti=zfZDaR zN?+W>zy#Yq2vDXMeKQXR6XfAm2|A^n^7y;k6U~_y*;hUH6xF768!B;%Fqn4<=D9$1 zv>wF4!rE;5GbmFI(!2ZF%Bm<~KHqI4JOL@_laY;Z=-&U}_;0vDlj4dI>+N#lo<;6u!b4KE4(}Z6% z6i$rw&KO;rex88#jYsZk^oq2YXe7}({e4bl98$XQfi>K2$ zT^gVcDWy~9EPihe22cV%7s}@{xE!&%l%HEcVSLU}pO2N#v&z^V2F0bLK9{M_UtWRZ zmSVx_9M2c>v#vf*=jVbAm?EJWnnO2q9&V`Rc>{AoCF+=$kTFo>1WD~5MOB0}Ob<-Q z)cd<7kpn*MmW3z*zcMRMENNd;62)8#+zLr$&3@9%!|WH%_Cc143B|^sYXH!>a`tmn z4}_u{S}`3!zbE=ubH1#KM2nCQN@@M*G<<^eI>@e^Lb`79I5Cma+QiItD7Sk>Da!3* zmD?Nh8$f46{AUngj?7ijL%&JU4J8W?U}$-r6ukO!1uzRPW5M5%g6T9S%p1li*Jqbt zX2Iz2uG8v9p%6fQsjG0b(T4cnph##Fs={Y}qr%}H2#`Z+IUnJyte=1vIRn2~#ZH$b zkU$)t-gC4uDHCkxk2Gcgn|@Io@s0a=aXemzw&-;vks~P5g4*Kse2L9Dq(^7zU_S1O z8fBby_hmRWD|S5`!ogtO7Zp`{bY3w1wde*|Cv#^AJEaBZUZLY`t0+btF$0A(=zIAF z@A3xObJh4>hC0#b#qqJ;M;ZM~P^2C!%Y)mz57OnWOG6jvtW|W{bMk15?5%H`Klmd# zOi`_h{(t)$n57>TA2}%?tRr`PnLf#2WWO~{CMj?OU{J&*{xQ&^e}cLt3&5tC9|x^^ zRQ3%_;D94lI!T|mlXl9zaYNkp?(%OsT&DO4Ne>=&Dw&!pJ)|SPn@)a8l9Tj%NlBUN z5vFqBA8&*+vL+hE8U7HqLxhH5(h4VV&GN^8gk(@^8CqQtelZ0^U(cG5z8aE8H z_A-72gR3f6m)WzTb>VZc{{ah>Pl#?3|D`)m_$5gx2`b(J0ZJiVf@eMqlR|jbc_Vaf zHv_8}(sz?e=HI6Q#>W!{Blo6haT&Vbxd=xk5 zJXKW1KVVod5eT{eFtRQ{ng;dQIA{VQ72QJk=%43)H5KGX@?PO5dtSF;rMFSv6S}n;j~H+YyU4 zhV$vTs1ay5vjH-@&k#W9DHBEI9TR9%9EQHkRuib115g|lD*477pw-CS7!R56v? z?!ph}CsYxa1Z z3dh4Hv`hmtw)QI{~t*Rf0s`_5FtQJ_pxiYywdlqdFF78>vU);Lo z-rxCWP%@e33MSA4FrlGy%)IBtLE3Go%R!2>p3=-K*24=rwNb4{L}JMFf7T&t9HX#* zGRKv{&kScU!!Rp@aFqE^W~fAzIZ0LXmHU|TT;^J>CaK;%157i5Oym0J!KX5q0v9)F z0ij|ds7SyIqt?9Z2CkuSSf~n>v_6!mz+3(>ln=0HlIi8)o7e%`UJBaHET}PwzdPpt zPKW#(pAaU#JyrfwQ9t0G$tLCl{DZMmq@he`ACRR{jE``O)89@91kWc>kzZbX4qsji z4$mfOtnz-6syv(*k)?KGsfxVipAL8fgjel1B)phr6;2Tqa(TI`0b^clD>U0r1H{jI zAoiAbUW)dmP?A@%O%9>R&JuJ3=6$CsI}(g6`blKeQWU>oMSo&N-tu{Wdp_YkoP3IE zl=%({=TQY;wHrR)WG-w%J@B0!tu#Xv&BKBys8)PAu47yB!_$zaX(&-IwD)i>8?){zh(uRTF80-p95WYy&;3T7G{v=LJ3b3WplT zpnE>SS7YS83>xFvdeQzlKZK@v5fy}cVsH-++1qn^=+Vy#wsW1(oi!+%QJ-ilORlcj zpI-4kzWoyl$~uPbr@s*)`1BM+#N8H}r@gfLhgnWipP}@Z@C0%8n=_skb@a4*gS}k& z@%tvFx|AlG#J89)_}`<@!J(Ci9z1Rb6+vSM19X z(R&^fj0O^;vlB|pgHL5g{V=&hK@X{d=AfWt{i4-xR`x3N!Aw{m&=I9}9}~3oxz3J` zhAAk7-iB5q7j+s%B~iI6DzX@5gp6JjjGiUYZ6(@cZ|doLID=9j1DeL5<1XL`bT)=Q zSb7lB9(yH}{wmjW@4%Ww60IWp7D|Nua0y00sTFrV?q3_*}!<)~A z0A8&}2ir+t#)ga@_!dfULc+_CkV!y*A$oKlm`+?9wDJP+t7%I{M*t8=w|V86HXs6k zs#j`6ne?F$VkRu=Bw>6W%YzOmg{+mqF-7rbhAb-sngn*NU?fn)-=#GfrR7CRybH}j z#ox`6sk#(9k%5RK>HYtB9pmiW62xyEfnt=9dued@{(HJ=l z?`Tq5-oXh*Rw(^Ne9b9|V(ii2CSYFtT9m4s0z~r!3x2Cwhk#O$n}GZB6{5)rTWi38 z@c}5*{NQAWjUTqLS6H>yOF`IBHvolcPSH_)Jf^f1~m^-~%8}lj$1MpFs-XC4#9F^Gp(;#nb*c2O)`mur1Ia zzC4_-Bt$%TyoZRN!ah9=Kc(1@zIKkXiOt)w4~b1`H3zP=-$xZoSoznU zm?FPc|Nde4*~q@-e)3oLgAZ`U_K(KXHK*OO7+EmJ!ZXeM(PCEO+a>A1;0vChv6GLK z*fLiwt!qivpDw3v1~)*(fa2-qAOG?$LVtwI5f^M`L-d9)$(KgZ_DagInYE-y$iam zOUx|bc4)5iLx??73v(>)aU6wY@_Y_F{pQ`j#$nKq7ThR<0}uWIUJine&Tu3~v1tarx7K0-n6HkJekAl=wCOn|AC@N`Z>Rg6k-zQCT1 z&*nMrE5bwOQSNG%$+DHVV33q+gAbYi!o4^~Wd38BGD<4h$C7uvherQX(wFZ1vW{PF zGT#Y+8ee)EnMh>mzV`NRFg#6cod!{DT|kN@wZE(j_2@Vxu+K7)MM7Y)5Iql*fuEd@ zRda`h9gL7ht+o+w1>2WQ%N+o#IjDMTQncH+kwKe2Go_TI$|M6UU>17`=jP{}M#5^~cs$@wE!GqKRX28qi*$2d> zdyn>`zvd1}1)(%=#l_ZAZfgsxHAiogt&})rFGE`{Lljtqb~$nmp?U2P5d0}O!9Da8 zeVN=>vcDi!GTb`1LPRKEG+kt z)Bj)>PDbwq>qwZ9xR%(c)VYE#Rg9nb2j)^rx+2{`V^)i&jA4s8e9J zH1+RLV(V(9O_JoJ@VM8bL&x?84u#ZA$^(^WOs3l{7kQO(){RR6C0hxMW?q9Ey+}>8*%F!m zF#5k;PLmZz3fEm{x5%6N);u~3t&NX%(z{er%sw+|Ox|jw7<)drI5$_$hBthF#?VJ^ zUyr>d_u!Y|>l;Lu*?==f4c|=3m>pZ#7slOseWZy=-}ycC<_7+N@%Id~8vREy8H~TW z4b}K4mJB?xyLIi92JPYv3^!>0mfhOrjk~ozzG{?)-y88e`$m>5Oaz=QoO0+%-=vQY`^N0By1lDesozSM%QE!A;jExGA~)zt)~UeIiSDJB&P6qFQfX z>+)R?4Y47KfwT!F*F64DYS0vbgu$iz9}Ltx_s1PU`TzW*r~IXdD_^U>i@eei2k>W( zewE@*znKLq7F}HrpUd6Z2N}&#aOJVhAfjlC&;BmSX6|-54tg@9oXcQgbsNjK63l}G}U?ONrOK<|V1WqV=vAP)hDBXC}C|;g@|eAKV*fjO`yg=Tb!Mx)u?udXLvhA0vCl&4e6EQbvg8By5>8e3y=( zBJQfE_OgI@YTsB$T=j*G)tudGjQ0Q-ShhE*{X@#_`xV!WZ!T`$ha@0wRhwQ?w14ge z$lDf#b2=QX%`nc|c@794yCDx&Rqs%Aa$YF9DK1L};c;V;S!UZ{C6FRkehL#nL|v`_ z3Pm@!zG^nquobu^Ji+|WB;_I2%t)yUaGp3viinqk&ZZ^>fTvgf+T!Wc|7+O}O5gd> zdcF9~xO=0htk{z(1kK>y9s(4w@FoxbFYs7dp5e|cY(l3w0Nr{YGP4& zQ?HWX9Y zZCWH_;28=OS<^~hNfHs7#@|#cp0j0%!{c~N` zgv=m(CS5;pkQR;nMUq|THWSz%m>aER(gNl*mF)TL$=1Xlk<5Hs)phD=uDYO{a30`q zg$1sK851vp=yXEgj`J0xCb^1|8Kf`OR8A9$>fmoY3A6w@GciU1EwYqt0(R~G8U=wd z5zb_O1pBb{1%biSzFPe|ik{GPuKoq(z%v74Le1ft67XM+b@ZX%oVG&9_PKj%TIPao zC!xS0ifkug?JyeQx7%D~<0##nX(dyQa0qK{k!*rH88kHLXC;F$0-Y@?*+1RMq_n|E zW?rH|>aojJS8o>5@M~#=IL>_S?7oRnsy_%4|3cCbif;_iR?LJSQvs-&>H%U9L@dk# zX=L<_z7gud9RGX4;isp#8cuj%A!z`LC>;7K9HzbLf>KbOY9&*I`wzT3pvYMrl6~Jw zrU>_fN_Mt8nNXy+l?)OB!riNqeX=#V(hmp?U_-+r*<6+E(hj9Phh*k{EVKbgx%*v( zh<;HtbroNDQEdc*+ApAfiOagHdpjEr-x|WAW`evT!nHt%^^Z^7Ok^*u>;XJ?58oK~L`ki23fk2`mlvzlT8lXqVA=4^4#`Nedw1f=b&;r_T zw=BU6YzV9r{yl#Z_d?(vglz+(Tg;fe{xEAkGz$Q&T!`WZ*aL4Ru59YyZ(_4?hFX?F zr5VSgNRbdRCNSvXZHR!1zJl-ZqGbSJIhq$~1t-_vNs&hYDKuhhG5sKAV1nmPVv(KmewcGCJS#~(C< z@-?0P?Q~n;l!?CaG|VVCrVH6VxT~h}GFQ{U*5?QYRt-7XZacaf4tvSdvg@d8=+p*h zmRU~L=@7mdIL~^HK>chFu+(AvL65LT&lmv;@aR*INgI(~Dbsn%hOOvfMk-j~I^XA~ z9E0^kG2atCc$N)xXUwqd<=6Si@_}7M7;k2CiEB_V`e8*k zJ$fPm#4t2@Hu`0^QGrSb{QW!GhY=q%PY(1KBkvOvn|2T)ads?tIo@1R>ByI|DaFzSR6XM#YyF~x3m0T>D1-AbUSr^z!g2JuGC1ULiczcj)Y#0`F6THZVT0?-%Ww)e>bT}g{n--9i>psB&tI^sEP{tpKFhiDS-U+ zZ8wl~mZCk5e$Nf0v`2ZZw8s^I`0(vm)gZ&sL>? zWyu?a1yX^g$+9S0lnUs(UULI2l>J*ofPN?wK>ygLtSm~}1GfII9(lh_@glT1#`7cl zEQUuQc6aU!Y=cDq1DU%5OfW=`{w%AYLAy_nuEVPDG_96AxA4HYpI%#0F<{}B*IfJ4 zk_v6%{%gZOomtUioiFdZl;`FKnt9rN(d_TzJ=(tjPd##|N0qjkSQKo)r$PM?X=ERb zC!AGjX*qJ+bBH=G^5w~oK>36Ea+msY9|PpzmnHmyS(SCy17#kpcoVYV_IO zBwhE-;tWf4H0UuJWXk@yu3y^K=mKRLA5C;l6zQVq3rFXFWuAVOTnFT5lR+(r5TQT5 z3>TGL`7`LCk;+H^=mWjeN`H>^%D5!Atjz53GM6!&^cjHQA5Os>S&UN6_R(pm3SYQl z;6%Uoae-^^F4ABkc@wd!Nxk@3jS_wwR>U}y63JLLntvg zW{(ktF#^|DvD6EAwS=hy`S%p3?pWkEd}ECm*`5^!^B4|A_Y>)@n``5xiz{92kifaxANh}!7 z3LgPInGjd&MGAFv$;*K3%iVNiPN_TgX)9Ljy|M6_Nq0P!M7M|*or6XL!$;492CFP( z3UJeTK}l1jf|JehxWS%0-A&Asw6v)nk``==Ujmvq6h|$Vq#3u;^2OTT z6%2l{9UGc5u}pK?aakoegtDY)NBAg|if{5yk1Sk)AL$mGIOWCJ={j#Oy@XyZ0RMGh zE}NwtQq{f#uR(d8g)t~z7w)e?9*N;48xliBA~989R273y5_1alt%|`9iP`GJKr=~9 zJruM`10qPwaP)sFCSb+vc4C57%;Qj5t#p@J%8eW zuCN_z^u=ofGm&4Q@Mx~olrN}%rlIkWXV7?#5k$*3=EFwuNg6M3Z?UL7wPVZNi_4_9pzq)dN42ionm1@H6zl&j>gC zcqjafcHqa01wW$+en7} zfu9j>`0-Bo8STK27Ylwy6aGXh!Y_$k@atd|;U9hg{0N%N_W;{r;peu{g@?FsRIB|H zg#`>Hrt7daedInUOKh+Z8TwBa^sQjUkXSMFV8sYGR(K~?jCQcXi-i@ViB%#Mv693t ztY*uSR;xB(h3`#fHnA#nNku{)4v)`JH$DNvg_0Q(ABG-$7~#eT@5G1E4nBCX@L@FZ zNu(k^lGugMePAeQC4K-t2%5~1IQQ*{@EPOACrG$}2Seh+(1Q;n-1y*~_%PbR2QL;r zj3z#bRK!OTyYSgW=BL);2jGLC$^0dD=N=J0i`@9s5H6I=koYk4;KK+vK6ocSjCSzB zi-ixPiBBRG@sY$Xd@^i&_yPDJXfp4?*>XpOPe!^+e$br=J`9NuLk~WTaN~n_;=^bM zAG}!jFq-%zQV}0X?84_vu$HtBKL8&DP3Fs=A1OW=ZhSHrIKVp2c-1uZ!_#hN~5PI=Jga@B2 zg%9&N_+&ZwFgx*aQVBjx?80XaSWDr955x!iaLvnb?%9#GkKc`t-@*r>;DgYM4oa8S3DJ55y+`e4fQ2M@NQF(2Y;f!Uv(?gV2i)B0Ts6 z6+X=8;1hK4VRqu}qS;Pc6@BgLo2jZck*4?@8Qp%))Sc<`xF z_%NS?PmO~QvlAaDmEgm~E_@b&wG=-1KzwR|&!8j5CoMf;zoElX{SRkO$kB9Wx&~q} zt#ECIJvw|6kfxN@WBV-gA>us37;Nm`=n*K z@xcj$f(I@svce>MGLrDgQ1~EU0-p>AA58GDebVey3LhkP;jVd0aZ@X2U0=YMj< z_++~A$+YmvwD8GHZlBB~d@>b2$d|w;)4>PX1s^+=!Uu_6_#BB zAEafu@qxoc+6BHyD@X}M)|?Y zv+N_sC*Z~>VBr(6@ChXITObLafWim)68Hohe2`t*$4;g2L1Gs^_sPM)LcM^(CxGz} zj@CWG_6fT230n9BEqsE>_ym*i2`YS$FM&_c!3Ws|A3K%82Z>$yY?9-b1)re8Cy4P+ zJP98IzU@8BB4&EUe(_s-oY(N^(C-KC=6a6URr_>fCY)%I({g<{FF;(;SHo*9Qw<@b zckYC!u7_e+v4J1KlIGxaXmT9OHDlHULodS#f0%Ts!Wuny9csQt%8%}J3M;|HTzJj| zEcGcd@-c)Sp=L9R4uvl-F=oM2cqsg1d@&bbq`RB2CJe5B(>Cj$jUSe+P4d!pbVE&~>d8n_SvUFV&3vZcoguRvfK8YH9_z zrUV<`T3B~hllEv^>wf?*IKuJA175J5tf%LaM}jFccUT{1-a13Aod>^gfdxQU-f|ms z2`zcxdW9HPQpHaLm$(yH-+5CSY(FgOievJ_m12*!0P|Vp+Sv~umb_2t?w z-}|6mxmNh^2FwQewME-9;m@e$W@JtlY4tPIFX*giIXkSTh_w1)8EGuxHT=DazjyH$ z$KPl8+mBMS@0C(_^?yKxgC14kNh?)&`g1BgYn=*5z9M1azc&z+O?+(U<9$9p;o}QF z+V>P|*A-{gFbHKWV=yIa1%qi>k2APBtAWAHtQH30tQ`!hvf9dvwOtK-Y~W)PAKUqO zpN~)Y_=1miIoUJbqx@V{)*#Of^4uiP?ectIo}b9`3wgHh(XLCwpYF$_G=N80K8j-z ze6mg=#piZ>oF2quMkyY%rsFYhmV6;7#FbA118j9)4Vn-zX?0v1BXxZPsQwqy?^=sW zcD>BU8+^RO#~MCf#ha!9TEC~mFM?w!-!J1^{8Dwfo zk`g3s*A6rnWPR6e{2fRoq+O5O^&!gGg})EVwKs->Pj+ShQ~(1YsE;*IgYas*TJQ%w z<5mp`C1L;CwHc)x-Goe8NDk#@p(8p4k2iYpn65Au**5sg|I(&~k3mu$H&@}RUEf=` z_XZzs@4dd21%$G8sOWXe8C{r$_`kBi1{9MaU6SZqTdAHiG%bUleZT3hw5jhN`^TT; z#~ZXE-0E7bN3rtj8VX340)A}gn`ZyGDs=&Xc^F{E2F0O(QSZ4`{|i^NY0KFIp(d`f zMPE>bP8&v%#=ZwV2fD`iY$U^en}BoFi`Bol)8oGHsbWdw#K)@SIo{-n@^PAjRX!|1 ztm}(o28QM5c{AW(<}7UySN-5uaQ3fiMt+=*{!^>{jU9D42;Uul8vZU~+h4&)Ihjy6 zu`(aOs`JaWa3lWE*kQ0ucrRLQ4gSDN+t-$BTUv1HYEX|f&;-zp?z~< zdHew9{qLKbjYT;6u)X@`kEBwg3IJ^01q;Fm1D?&Fw!X;*vf5MDPgl|Qfe}EHIxmi{ z82vn2L96|4I?6BFToP>wX`v=qa3J|Jh{LZ@TK%0!STk}?nvi`WqCrm~ILHWb+0v+= zMRI9%`;ZXd&LjOVfX(3j+Dqj;j}3D{Ao=S~D=!=C0ydVX+gey2I$* z@XKF$3NodDsN(0y1LL#Vk39I>=b!rqo>`SRPp`XfXgJiYLK|-sci%VO2=zeotq%uu zZN08-&b&sfDbA2TvXLw5>0Q?ak6j$PW#@h{k}n4-U!wmt>U$3w&L4O zy$7Gudx-Yi22Y;II;{O}&TriYcmntpzzHB0WUcGK8^_>p2>!~+DAxtRBx}GR4IpcK zd&L{sO2*zR_yWLxgb87;uli z`9oo#)5t)ZKhm{VbnR8WV6Rp?1j&H+tKc3z@*(lAK#brw-lzhFz+W%p2<`5|U$Vsx z%a^BO*X$BYeY}MC@$Pr366h1z`81RK2MtmZ{W288UL9_%a+#V+pA@y={)fnyel4;P z9Euf{8FPn~%dxmq2DFzOXO|a!8twxc!hyGC_O6oVZiKKYG;B*r^oJ1Eeck4sQ*K-_@TD2WC&PHAL+n<-W?!xCDbH~C= z9+0jNTVqV~eTAfws;`wwi_qj^RK+JoxbUl@x3${oh;crjkC#@A^7duT%~hxUP8qOY zH_q0JKGkZu%-TuG<9S;@KuT@y`F531$3Ey9++8g>!u_4pdt@01i>YXZ%ol>2QMD{% zQMA$`ElASJHLCu(XF^~m(B2>L8Ga3bxWUrevK#Z`BFVLnurxd09n7~C`G(B>i46#H z75mzxloSQ<-eYMXEpjO{{~Kwh6}F+8t*B;?Q_XqqY6_V0@2Dm)_iTuP0`Fb?8t}p= z;Wr@wdk7trq|^HEk=MV(P|^-<=#Z({w?hg^k^d+QxH%22EPh(y4hY;1RPeb~!Q*y< z-?ugx*|#0&FY9kHK~wunu3U-i>#aquCg`yWfBD{ZZJJh#GuLR&6X@`O&q|sb;WSPw z8HOI`oS$gDLq!`Z2jZAUy=d=j3`@@W$;5WXX^Tg)yx4+vJ^j@<&JDq+H=(a@f~16` zXUubniRXI`zX#%Ql{sQmu4~uA+L&(rVZ?@R#IG&=8`9{}y?6=C9S5y7xJ@r=o{bZ> zn*lZqAJMn3Y0qq`$SP^Z0%yn+JC}5bRUu6q&7A~X+3at9u4d%rU-rjX_Hn5cB0YG= z+MV;~t+#28mjT-=PDbKDsOX(4GZcNt`{^h&oLw8}zZum_rC*jr{rCjC3rDg460qp8 z^OWs%0zmnW3ly!EONMwbJ5?OAi5WJSti}%Hwdk9hcQ$_PN5NWcu9ZUcjQya2GQ|&EtCP1U4Fg_oX$}ma_og;P={suUcjAfsLtm&Jgn-}ihb@P%Xn!Y(IQQR${ z?6!giul=^n?Dg8g_GNbUXm4mvEyqgD_Lq0(3@z*3u>!4k2OcH|^u4iO9OHC22l{c* z9_k;c>czJ#tQ41zI4Gz|>(fK)GtQ5{0RGr51^+MVFqH7N-b*iO{_gC$K{Lw0|GoVm zCH{{K{x{_zSspF>l1dzwIs1!i#cafNKK1JGr309F9IxUqtSQ1Tt@eBB9aCNd@e9NL z26l{EeK!>kx8-{r5-mJX1O1LuBh(946yfDuJZnZ?y$3y?R=XJA_h{8U@HY;_p6YQJ z-BgdmAf|d;kdIP6rt>iikHsvG;W8^+VTF%dVS^R6Sm6#UY(uCoY$X8t!e$j55O5Y{ zp;wdJ;a)fhEEe*R=Zrb$y>O_y2mZ!kKmkbjn2!84QcSZ71h+YF;9Kz!*h+Xd$a94} zYuNwd7k1hnVh65AKEm9=Asi_E!oiPv;15OP5#*z@qP0i&Nm-qg4nlO1ZpA}tkhplr zGI_3$=i~BhkY|fLcgV917C@?Uf!^1o1sS|06c1^`<`7Vzc*s8fXo~j0&##)wqdm&; z<51I*9!rXcv^TkV(&9(1o)^~%Ir1@*ofk~i?`H$z0x_IKz<8 zN&Nyho~eF;8xQ)B+UCYP)r;cBm*Hst!gtK)N0S@>%;GViuOBOna)8TmE6>{NYi`52 zMqur5pJ-dpeShH&vv7AzU+wu5(0Wsjb&9;#V~>761*nckA~jju26Kx8>xq6mE(+jr zc|IQHK|HQ4#iMdM9t&pCL0V6?;*Xn!yYb^UE3BA%g})K=K!X+YsBk!9R_?H3o+FQ2 zO?LsRtG*c3RbPSXs(*&+s;@(J)pJo@bv3KAWC=fRv8t>7?Fv;?_3y3fs{heo$OUsn|*tJTEj|Iu5pd`~VI7=x2KRn>b8gtACWQvOVFTi)4Ca7o0(# zW`T5HK}zr&4x(Z2=)>L?RkV_s*zk*c;MYyvZwd`=2hW7SGu%u!>@yyJx#(f5v9RDu zi!>3eSnt6YBZIQn)Zp=}W!NrQ!+6RdWD#-KuOOvIKVA|&Fk#qc{w`_Yb5cua*mnN7 zWCx!=X@kLia)^5>Ak5;Bni#;3i-LGuK3z{=_rgIaii6b`K$@#BhBQ}Sf!JmwpZlr~ zZ%6upwT%m^he8>E@V@{w)pM5NaU-j*9{V_-=dDs9q7`^tUZXGkR3TM8ZU-ByfsM6-jfGFU_{qvVx6##Hc|c~CACGwiuR55| zr%t%4OH27IBTUuPXHnQ$2&ftapOUy3iyjt`j|j*|1mq(E@=*ssp0LPku};@v0Xe&> zaf-oRAZlpvG6quyuV653@Z$`w9^AlS=HM0v;lVo?R1IzeIoRoRMZ>Vy0ewQ~b`VS% z!s4r^4Po)sSEDyUFmnituMVTISeQ)Srx3x?O5y-AVWMoxJ;4G zYgz(=kn=snZj263`l;ESh1i`T0zI119kE}bUkjmMW6w0(XLLt=xzYWmi5ckVmRz9b zE$jg+{2TP=;gW`!&kvrlwvpMNUqbX#YtVu0uwv-`Tm2E4%O~BW^p6;1`{5Gow;D2x z5BkV-teva$twz3fj8vV$F3OPn-BKn~`)iedQ5Bf88oD7xfq_I1?MaSp+Z`%*r6mg9 z^%w=4=)Zg_I7Um``8n@XZPR`axIl6O)!3BD zCR1F6stvQ8?IC`u|+!W(LKNrCcAPb3F@IY+9ygxH9{E#boe7z*IEpITLG-<7uyGc}{J?-`%SWKBNhNCQZHMRmL zIH9|~x5d7>MG-^MKV^HfxlzP$7FNi@a3{6zmO`iT_2@tmrCeEPBvkgxvM3u+D@?!# z$hjB0Gsf(Yp7sEq!)$8w8#)5 zt6ZI%x4KXPMD;)wmJeI#bIhovg-`x1yY-zKSXizVS&6{rGQi`+*IQZe}kaZq} z8QO+>R@?ve{B`)UdW00$y4%9VfmaD=b3;T`mr^jTJW1=NXoF+G+T5Ih&I#1Gx3dz+ z<^eQ7o`bn6aCMI4aAIBULE^1`Nj?L2OMg1_;#aDZfvZh-639v7zQ2^`^+$2&SogDV z6bWvj$ih6DOUaqnK94z(&hN{qoRNe+nk!$rB{W$fw{NR6YcP&XGp`(DFBii{IDT=Z zOSHFeqe_HmK=s21b6qBko}&{pZ0+N!CU<#_Sq@aIw)uE{PatRKM!B9 z@PnMX@#DHS^D?J^B>evL9L9WCK;bx$svk-4{z1VDB13ah1w+w`Mi+{JV7$?w;s$jV zRT)6RX@tfNSS)ZTJfdJj?S=|}0STj%{qn$mkf7Lj0Lqq%G~friTAnf_z|MLb#yIaL z!GvLSIM9@(f9xyh<2Qe@`%8R=Y+4}jq~3c9HsHM4Ezbg(RQD5gkze3oNHfn2dT8B& zU-FnJ+ewr}&nWWheas? zsl4?Z*-Ty|fY7S=jqTv=Z)-oSIemW<_6g{fNhzfvJW5h~O7h^!JfT@F(f32a(E* zIf;_s|JTzBesBF3b!?w}7yosY=cMXQ=*cYUG|O4ra<-YbzAm3}?{X4f>*x{_w zvz0s>Is{iP@tcbM7H?JzgfQq32Hg<`mtaFNeTu)2%_4vzN7ElMzt9*qZ#yT69!c_X zc3MH2`Aa8J5ZRK%Y*UD1)<6CTgc*!hgeYYjahgNT$2Nz&} zigkv3fYb8yDELa$7WKV3cc-gsN4Gl(s?6^8FHQc2vg~i8yx(xlzr!--iOx4rMuucL z=#Q~Q=XWd7JU_NA0S~`w_2+~1pb^SR>i@Zb9v!f(f8@=Yg>>!K(#gzjU#oowzrYzl zuMB^)pfYcO%6w6){hgC!sY;TEB>0;ZK#~BGgeS6ua4~WNOdK|9lp(};3!ge#6C|9n z6J+d1J0bdpYKB1TX7JyusZ5D-N#Zpn444v&Qzb6ym{_ibF4z#~5;dJ;P3fl98A4b< zYIaYN8Ad#TtQ zw}bqGJrZQ59BT|GIjUY^3N({#{hNP%5{wzOtM}?}t^RhliRTPhzyOBHlj^6c>Zj12 zo0b6%7>H#b|DV0l{V5zSyxIpSqgT(brPm98Pf4#X_RrF_48<5t@slW~NMk=onMfzfbCJ!1!|g;#`nDJV zbnJhw^YS-~PwJn|Yx0Yg_gTNE|sndTDa8ikISGp%MRNg z|K)Meglmb9xIY$qHN!#GqDNAHEcW(WXLdr5TmV6OkOi_Vb6bW)G_avdF!b>n*p|lf zw%?5%`3YT>>Px{`>`PDG?&?ePy?v?X{T69NU+Olo1cl=|L*XZnfsQj>yw!o8TKx-3 zpLVVP3|}ifA5dh!iJKIRSqSH$-+U!}vV5Y!g?@58`bo>>08MO=<4f$iWVY?I}wi{s5)%F~+sPFSNSYWjBLO(}oq zE0(+@jW-{{8JnGrH?Q>aQ&Rt%G5`Cxm8?efzp;L}^N5BQnd}Sn=NZ4?V|@JY)W7%nGAwdf8(GH`2XIIIzzZm);8un*f8QI8_%5`%-nW zQb5)7=u?Bz#VQvUU!{vxujXwJqk*~j)CNsLue^0pU-oAE?mWY8UrRs06mSbyfQg=U z5+(H?nSjRD51=YE0w-kDc>EG*2cs+t1CaBvEfrrODtI|Z$qnpHn4-%YVMBsMI>cov z#6^wV^N=LZk)4FQ4${y9@oB~1M;`Q(+UE*y`%rl$>zfya70`c?ALw>O0yo-0qP^~P zn>I;kXa5yw8!iw$^vCW}|-HNz9NuTcN>z~MAGVNn8`&bOl;^>FbP6k;wF@i z7Z7SH2&L$lVt5=Iuh5D#AY@m}VRaDon19`9iCybUpz0b>bS=WW5I%#y)#j-Wfz3{K z*vy09*Vw;fVbA@dVV06VxBYu@XW}=uqdoW6zktG>+P@!@RG#sUvVS2X`^IXqNBCJl zkg?A|n7?5Trbcwviww6Dql@efp> zC8l);hgM~PMGsU==PO8Gl>yoxsF;Lfi@Srq5cODbMlzwtY_JFodjR)=QNLUAu7F*7 zA&3ki*G1-Gz{B~ zeZK9_D83W_VHe@YrIzr2b_W0Ttl(SuKc)QJnp4An+_#5c^zH0nozVZO2VC%ry_MwO zOgW2T=^!sZbW#6{8NM^mhR0HbIbKD$9`lsuvreKUMVLvTJNVP*rP6((f20m7S}G!` zf9N_#K2j(!(cJb71YQc&bcC(S1h^e9SS7TsF~j#mQn=5|rJMQFLm#bvI~7EVBMm$@ zX+l{(_gxQ-Vv~Z(rT`e`-(O2IT=m4a-z0x4O?3HkGfm)2ZPjTh4@txEZ5FxtSGhXf}|0Zz_y!FzU>l0w zC;r|xYySvDhqw?;DGy!LFDHR2=BAVEwoanyv8d|X=@%*g%%;@(<>~uS{I}DOoMShS z?hO7*Si!f_k5c|@ETfY7g(Q3Z%Rh7ue;4&pCgGo)YtvtJMThx48NZ+IBuZ+eFri2_ zUd@HI1mg?az%3gSoqeaXLrMCg^6=x0kuu%@r_$foweiNtj^mA|R{(Nnyg~gB2r+2E zwXKmaN6sIC;lyM;`nKNqUN>XJvBtohqIW7zN1dMmtEx7jb)aG}Uy&=^1|w!qg{HT! zVcx2>uqUwLolmYE;=d$)@E1_NYx;0K=x;tc)YC?>TN#^BU%!9Js}gT*aeo%I!WDMr z&%DJfY}_j8EH!7!vD!k1q(;8w_YnGXJVKv@PeV$4Qt3Cr=icXC`mKg}Q7!dbjUZ;J zxF}ylUroDVsxF$)Ips1+I)+_L_=eP`E9{tesCG2**ckq58=l#BYxXWpMKn z^xAs-tu-IK7igZS(DdL}*+qRO{cFYvc3UM;u>{3`JAEMKU-?{Weem%;-&!Aty)-6Z z!*A&We~ON9kdr70$*T!P2m2&Rp4r-|cth%6gcSp#?_j^5EPMgyj)*1(6eSQe%fpk@ zQ<)#%?UrY6`*l$tD*T6Z1%D?|GX8|Z)`v;<4sM55EcjEgEdYp9I>5y8zm^ z>W`HDiWLE=`lFw-_)hxMF8BxTTIbPWk;YVP_rRb|aQozUsJv7EKqdW07$k_JcSyEmPS5>DyFaNSEUuq1@SzqxHOVe(6>44tnSOR^0(&)OGBi zD|w$CCZA~ugI@y5*Fkq-`ut*e7E$%Ps9O0Pd+CnP5qpHh<@kHRKoViDCWXr}z3LfQ z28VMw4gp+;zdx-uWq%76cl-FI;};w6+T%Pt<6bW(iG*iLyon->Iga8taWR)ndO;|? ztCYgO1*lheOoNW})ato{6Ep>@dgk}FRWPPNMs3w`TsAljYX~#2hA@LK^kL$wG9cl@ zbR3#iKM!tWS)8kPmdwS*0A_aagAQ6P(E2)f?KS+pjK2-$3%>!lJcz@~|6SCt!v8~$ zwP~3|ifd5zx6`ju{-Tws^=mH{--&)b{QP)EXY;+^ZKTdkAuAaj{e#A@QGKWW!Nbju zXMBtK-q*1%fRYrjCCM{Cp7FKwy{|7vdwZ|kBna3z6HJR zfAVnj>h`tty8regpjT#R^lE;t6MAKKq}Qpa`N-&%`7P*G@xx1iU#SiaD?Jo>(tUgrYp6!O?b{VVHP@9W!%{*5mKMZT4N zE9GZkMS|EjN&c3bSbQh?w~ONoWj`Nn!*AJdiEdWm*9*WHJdwhw&8-ICI-8 zosF-g{-KXs_(7$fVUMpc^}+>JMhT{0)>rhE{c~RY(S53Ai;Hdn1U26Nvy1r4_-bdL zB>a;MeLr>%na?_jlJRHl$@n|#2VFLsqJd}rui|I+++PJJ_Fy5Z2~wE$-g&we?6X_-W(w_+eu=i{Nd;1?K+T^SFZC<`o(#Sk3sJA3R6irI5z=I?q zCeaY19I-M%BuJ)OaCw3ghsE zs@IYSQr7~4)};w*S?ia?wiJKr3Gu72Han56lD zWd2H$&#~WpzGH01`Hqc?-TdWrEo#1F?6;Wj7~6&Uj@P>EuaNnH=X!eDD0#l)u_wI! zKxgwEbCZiva{%_XfW&-<^b`vl1K70hRTg=asC=iGBxaaf59T~t6t72Kwfg>Qe?SL& z1OsOy19p!UtIe^1s72(*LV}T{acbK z3)D1=okU4(ZPWtpi=0lDhkRgA<`XCLryl^@;Mp^7u`=En;^VLd^(4-lQ=2c~aeJ7DZW+$bIWFJHaiRm3L~-YxPm&_S$%s zc3TB40IuaL zq{mv!cm>{a@REZi0vBSfA{H^KwTf8M=xy)cU=4z$_rt>|eXg~N3Xr99K}N{W;Z`fQ zRfF8ed&r$c?=H&MNT6@X!qp0TF$(NLW-|th)*C{Oih~-N(xY&1#(rx%HK}*#0V z->ax$ZOSuq2}rVk<7@20(Vg0da_}6;AbqoY1KjA2_TfYGQFH3?hgSapI0O0xllI(t zhB>i(B`{K+ip#*+TR@iZ7C&~xZ3Zw? zHfNO-wQ);aKYL4@GsfL{k42G`F8|S0w?i5ZwekFzV^3f-qkT=Er%7Gg| z-cIMEHXeq)-L#l2K&Jr(HDJ@&wQ-X)?m-&M#?9F-8ao>|N8FX5F?v$V@&!556^V^- zH-FLY3LJSfB^_o_aW|MnYbvlFJ&E4kw54-E%desNcYtjCSU1f*{aGc)=jdCUxz(8O z;hTG=>9Cf~tFBk-5K70g@Sw=B4kdfrz5RLWlC|qJnx)6GFMi@^WTK!U4SQ@cs4I}`5(4X{yBTwuwR+yTb1+(;XJJMv=s-gQi@)h)&okppWtg^$|X#FcO1 zb0hEJyw2um8;UwsTi#T=y#kHDuXVM`6Fwe$1TuwQPYgIDbE1U>?NT>xJaBxSdTiuv zw;lx&jgTQy)?gHEUU~2MRSb;jUqv=#0FGX=;i#g&ah#Q;;w{2ru~lr0qIr9N z(mWCE8^4TH2GhYZR#g7#0I7`HfndMZTgDw!J4M^(HQi zBh5VBSe{!$1VDp%dQ`ob-`S{mlLc1vBL35%C}uRVSRH#w^Jw9e>Ct|S=oH67)gXqb4hB2x>I57q<8G$}$G!{|=gJdqqGu zYAsk0O_)&wnr<|jPWCeM&6Ng}K6$}`_SV;NG~B@vJ<~$`%ySwoeFU|^D?9^c5ciL; zxIBUnmXSfSnElg$P4vQm(f^S<0RsFddUPxhxDesic!?ztrNooe%Q9Ear)HG=$lCfk ze*+U}+nFeUtOt#IjE*~46;1Ul+#wX*7{3?tD5W@G$Z<2IG_*?Vn+Xz|8DXHCoh-mf z?SG?c|6sztAc8;!^h$?}@(pwloFNlH8Po+Z|UUQH_ zk!JeWtJcrqQGY)ojsgA>pDu_ILc4$?l(|5Kgr*0@K)#IDe+#=a3mPyp7YAD5Ckzn9 zG5NwV@9tL|gXZ8a#Zqt$PSA?YZrAI+sG0-s!knL}rC(Kj_vyxzzHQhCJa>W~#in3^ zpKVI~P#Um3@qj8#fCZ}p*!V;zdh4rp?I^Qc0#pLB!1fBX z-lOvXE@~yA#JU?*Pbi#&N|7%97MjMqY&IHchO3d1+UHlQeL$_56c|2GIq2pz1|$xx zV}{p})?{4r*KhEq3`GD-vcstq6Wg3ZD^5qikXI}H090ML8-%J&kK&H8{q0(t+qDk7Z0~esH z^ee5V^IKzIQ8}j(ymi3)JUk%sj?tORIR= zqmt(@fO}?w2hbLN^Uzw0>Oy1#?nL8Qy{Ki*DYf17k)+(5WA$qqglg$qi3}KknImg+ zn#=-Kdlbs`WMQp@s5xmy5|U2OU(o6=LFW#bW)Y?tglUG}tdyVd-OYqA=4)OK31vGy z`UTo4=36E2F!P-L%l8!yk5s&K19%zgzwT48o;k=y5U`h$i1YLWmfv@<9O}kW)xXSq z?L*b&VNz=CtR{2JHquJQ|H+0k1<2=6u(N6{XQUc;IHBzSxde$u3+I-JS6Ywtf0Lg;Db?Jk3OLZkts9n^gFo;z+4H{y_uYhUGhqXI z}33qv?{Faf!o5A&iV|s zlt8Op^Mz7dIKUPqoXrw&qv6?E#YX=_x3YK)7YstwTzs~uYaC#DHarkh&d!;@Z)aKG zc+#gN3h)Pu@S})-+C{u=eWe+fRuY>9hHwG7^it>-`}AjBy(4Ne2QNr#4365iqXHqoc;4yR5E-JI)}>kyc} z1dFdjKq<>yRQ3Oud-u4iiZyN=l&xsuLQ_Li+Y}j?8F(ovO)%7jZH>%|%!)c?=CLy6 zVg-tAP) zWqinT7(1uJ*l9m-z}Ru8*n1|Xu}+4QuSLvce{4T|%SRx_KQ0h^M09QlFE#Q|T6Ia& z{K?24OZlTIe{`cT>4w=2-T3V+%FdM=!fuS`JM+O0>VP-VjjIUYUrp*aRIMM|o<%+* z0%Nhna9>e=Q8w#^^GaeY+kqL?J)sT0>Jvug<0$e|h5aVw)BFLNtv~*)g-x@5teux% zkzbTE&{^lpz=?6T_dU|sEE233X}|yNQ?qpOAxk=|5)X=~65;^tybG(+FqFSOV@vfa zV-V`r-28#6ADT~+^#fCk$m0#?i$8q6wWvi=KpvjO^c#y$_?sT)Dj_Di1XucpDvd(o zH5!03IUuBur&!G=y@Rq)hiHjPv`(f9%ua59IX2 z@CGXB3I2gb4G|w9NeRXkC(SX}PYsf#&EBn}c^T7Akp>9NiEk6byYDR^vBSGl=hF@l z!+Y{?nh4+}R4+8Vk3p14kSu9hk)JlNoP3@0WE#~!mFkZ`gDx1!uvo7xZj17?{Ff;a ze#1LV=SzQfbRAFW8m0|{Yp54l{Hq7gn@yS+%60{MrJL*-08Xp`bAF|lcnijlV6g-5a zn;;5KmI@xi3*OWCnN$=EgA|<^V;n0uf2TJX;>V?)d-q%C^ZM#kY>J)Nx8}=0eRW>! zoED0${fYTJPf7@>#Z~Ejh&*BNWazmk?&KD&=sWXzwLO!rp-PB>j0aWp89%@wN`2N( z9)h-bk@he;^#H4IaXo%mB`O9B<6GLhUE2B_*c zTb4KLM>tQWlDsiVLVuvcG^Rt`Oks9IBs5fn7`mH9cNo1x)sPHzXriM1H?eeM=tM@! zAtaXsYUaAXldQWIL@^~{hKIZ-nMMjYOD#2C`Uj+PKbK0N!cFXB2+b*|{>5V}c$CjU zH`We4cK^%=6k{xfo@kwdb$_99_`p1L3EyJfMBA800=fPCvPmn-dcT|%dY(Xw9a?@k zWyLHJV}<6rHj#${=u*a$;0?U8-xwgsJjWfRj%xz-K4$6e*=R6mEYxj-3Bipx#OxDI zBl-3cPb>u!W;7qQpc=81AqBRpEm|SOoj?U8U`Ug3MPuEXRtd8t3Dvn6g@hcW&hq|r zbouk5mQx9+Eh`C{S;a~u=gk}I~GK#kL}5cI)o{F{Na5QN!A z)PllNRrP!9p0!{ST}t&!x_cRyN&G%-KL0#VI;;#*Aht(p}Yye<~0ZgavoL>|$ zDd>>|kY6-=G)?;?(7{pQ8arb!d5x{E8Jz==G=cUrc}aKJ9jxwM$FsWcV-1j=vV*sn zT)r{JZRL*8Hu!VV+R2dx(7)i> zN1C#aXqx?Lmi;!C9Y@u>!lv-7`<|ANdr`&PHqCl`4^=#zXN^GCA3-Ryt;uDVHj+K*Am%b2q$lZkV%QLfya?kyIUsX8#>=_df*+W_ zM}*J{J86XnbkAUCd1vgA?Abf_{3*@p!DH8uEFt+|Q0b;Gs!^x7m+wN8HoDOzXVqZKB$ z_UO5}=Z0rm6z)7Ry!b>1=h3#sM?1IM>pV8R_*k2E=bcA}w=0Ef=AC2O3e#8{U(!RW`*Srl{$ zOQ02&79Y8yxb6zAaI>qVwlcDK?opCxyDAteubCoOr9c1%5GCJ9xBs(!{A1()iG5s{ z%k0Au5ex(A8PT$RBn&ys?8EN2k7$LD#3ASYAJ|6=g>%c`R>Jg5_OZ)vA9mI=RPAH- z24){*S8ceJFuQ7Zn60Id(3{#v3(&?OUeeJk2>xiBc6%F3Q0=1wONWwMDyX`Ys$^*& zoD)T^N`Y4P(WL)645h$i(0ill8^l-iWmu;TeaJTS%%l70WgTY?vpMu_$_)^XJFG^B4sJruc5!!lg24(}d;AzfL44rf4 z@QDJfJ;O5hd8;0x7vpzj?j~c(h@>F-G+Ca3ej6FjE|^Zv<(jhtR0cEaL^g)yDa<(I zblLcl>|dzA4s-TLCav%+_OVPWBDXi_Mx;KCQMj+9x-!vq3USck=`bKUzIZmHeV15d zgdiRkB|Ga7EZ>F7ldF#4jJ3bAI|q%XCJ>CjA;AvM#Ng!k(wRBq_|G$#oSI_uLLS%x^2g(?=6`d^*|kuI1ZSOn&b1!B)_E=@OT$jSSZvqwGmdBJCyB;< zB^So9e3X{HXV`LFGLBVmgK(~XLaO3oxU=Sj6N)N&F&jfJR<&mbiTPaTInOb-qpd-M z$2NiZiX2R{4ocA044pAK{``#Fle9HSGg?hfiZ9LVMl1C371@VH-Gq10);MN_#GIdu zLmIJTD{klH+S8LUq5Dd40nJkTeTdQjzhpK|v%(4{!wj@}*qepHB^wcM!J=OL_M9=g zYX{D`PR49o@wws2F%`*Gbz?jo@Oj|M!7q@kQl!|%a#;>Fw>qCzr|8kNikcnD4O1#>X%qs(@X{LW)(D^`o=FN5*7QW zv`1|oP548EP5Mii3!}H{vB3_D!0zeTx>2JoWaA&tv*=`;z?TB&jaRMncg}9>j!2B(mqTq-XYG-9h4{eOUotP4=Es{Wc*55t z8dme_PC zI%zT_F@E!$_DQhX(4_eNvtb5R*~`axvbA7`s{}aNOZ`1R;fp=U_Jm7m8 z#DI7KSy12Fg)@So2#NyR_a)n6NY6oHPw zslnFS>cuMFovJ!07doJGx_k6@oaee{wRRRAK`E$*zv}*7D^wXH0qzS~!qp^(i-2Ae zO#ZKU>jj=&EsXG}i_P#VIb%)ny0?g@&0~8Plr>va*pBXKc#t-~JvGjMROoZh|#CsP)?_r59zKNz4$m%^^A+(mp;^mh2DdlsZiLyJ-#@-BREA{ zoCb|Lu}KR303%tXP@iBK??n_ul9AFIKYT?t=Rg#3)$jq!W=26z*JFDJ`_{EJSj$oK ztY9gc5KG6P$$koG*;-|L#WJFy-<%k(&C8z(xy?Pv*9unhbrBE0V)ixj2{!v0uDivf zxf>`YEd}jZLzOMFjYpDT)bH?hVkrY{CNzq)ftzq#*-Zr97?gAEGn1M&>DbIcZe5>rE+&z^^<&Ncj@C) z1g-zjmVev53?+}}5-5B$Wjpr(p-@Zpg!N)57>L5(U?fStQi1ZwP`LuCs|t0hGcnXG z)Dj75bw3hT%TQO!P+bMoOH&lC=C=%Wn*=rbB2a67lmz$@lu1+LnhMpsWvIIQ0|NZv zT5GNxGSqMZwcs&@t7kiz1;{PJW@8q?b@lW`pnm#6;%fIa&Q&`VYD_aw!YqzT0&H^; zs7x8^aRD`NvclC*I0m%^vzQ}6z1i1VfS1Tn4gcg^wN{~KwG7o$f{MKe)N*k=5^Gm4 z3#i;j6|S_Fp^7E5*cfBY)nFMaT0mWRM1gu=Yf*p?NKg|m0=4;oWETIO$_4nW3U#id z8A@2-B@)yh(bil&C_{}GP__S1xZ2qal(4|cNr85icM+&R_e)%zc${;Uu0lQDGSm|i zRQHQOxn!tp0d@Leg{z>Jp$14$pI&1vz}_-cCjs@O3NpCrKd zr*HvQKcsNguNf$zt7Q_@zCPAm=`z&K0&0p1RocPKm4LcKf_ma2P(SXKxT<`NbM;G_ z!qvoUR;SWqTw6E)r0aRH!RjhI&WdeP`D~=Zx*27YJdcF_eG$} zzL&WA`cW>xyH%*MEko_NH((akS6Op)pA0olK<&C;;p*phEpnADLFHZq>eOzDt7DIF zu2NK}=URs9E0&0v3uO=}tI4GF5jZq3z`GSou?>J}BMb<0pUN>DFf1gfza0{p*D%8McpoFfHC8+;iVJ*PxWGK6U`YKi7 zYO~GEm4G^acfc&hUj(Y8QZkFL(zpNzs8A2J4CR!dPV~0s>K++tjDY&=o&Z;F+aRK1 zN71v4N+V;JZTf0(|n!>XPZQo2e;=q3<;o}lpX4fDl* z1gz9T$+mYTgmG2~#oHt)eR)5Z(o_}U2<^JO z%?;J|yCWc_7pxF2h!cUBYdSTF^N^_`tY-aNKM(D=lwOe#qOB0#lo1vRgulltJoIRe zhnpmXvK|&vikA`k354fWguTqY`gstVK5|l;N}(#ktBSP>Db14* zT3I1v$Ouye!ooWgDJ@g1RoK!X31NA63n^VHBeW3+T~vf)tz}yhZTi5NfRt{rLil{M zB&B~(Q&TNo)I6i^%kgg(J zp+uneyiL!L5PDl7yeK2&350rG;o*qVriGNEC4}!fTS)188R1HSkgFm*5-IC}HtNH- zZchqGX`&UvHZe|M?V;#SE~Pdq!mEnc5Vn*qA=GuU;NhP#!UFlMq&F7E-!GM(8XMRwXGsyscQPu%$K!h9Lw zS%FY@i^4;1r9B8upB)z9VRd^8DP1iiL)-(jG)lV5o#p5o#f&n`MOl0->jh@Z)J&4ly*VJI z$yNya#R*HSC$Ke{OX*#FRzTVwb)iN^5VlkxA%s{VWXT9q1wyonkgjN2c#ZxN!nMd}^bjo}WLqKpu|{eSM@MrW=rbP@!kd3I!^58VfRuVzA$Vkj zT!BzFL_rv;_$ATevL%GIHVY|TDHr4qt4 zD}=*eN<8dL;!>KfB2+0-5;5);38B3eLXM0uT_Bttr0`Is^eRPs`1yu_lvcE|kkaKc zLPvp+ts-=3j)xZ{gi%%qUyDAafIW815$e43gNHSlBSIjoQIAo!tcuJfan=7kPz%v2rtVB^8~^x0~8)Y z*k(w7-&@Sh43H4k1zAWbPDY3l2t8DUG(&E2!Y}O`6p+#+D})`NOHwLHHS15|_$t7Qb?HD*Z&yBjQ|G+IWuNg%AfUg2R}a|pd9gc(){ zzkDX~ux~h*(k&`N8>KfR^sse6KuY0O2u>LxQy^^Uuki4f5~t~VEbto7N(i4`u#i%u zjL=0Oj8PF%f06Yd+Jjv}a9AO%|5TFF>RY&!Dz8&`XgDS#2wN(P3rOkLzb$yUUq(m~ z2zRRpy%cK|y~;cZp}-2^{3j9*zYpU){LoL~VW(nCB2M>}5c*glye=aw5C{*e2+_(Y zOL*_f*npHaoVSqDjWR-CfneYpHd2r5RmECG6wQN98sxTHHhlp_>(gOGd~R2roq|JlxqFLXd>;Wu1kTu8|RX2!sd~ zVW{HyLm7 zSq~xt-6SC_v_c4$5&j&)dHAT0!h=h(CD9&E^$SR;pB2J8;#1trmR=GFu`0qm#d{0i zS|}lGK5HSRVKPFjKq$Og;bEKNy+wPNBq2<(LOA$=r0MN9aw!c}5x!C8`84kNu9Ohk zSRp(kBTN$rB~c0w#YbdKi_z}BYXf@t_g@xLx=coBFA#JU;rJmLLA2@F62b^8gsEuYP4Da*kkV``gwy|#c=&lR z=i$JW3J+a=lBFcPMuCLT(+XjcjPSfbNK+BMRx~XT`b!AkoUxG7buxloARLcWczB>W zgxxU#DWzH=Z27k&rFDb2l%_R7_*IsY@EXrb2xn_7cz9e!m?RKt>_TNhZQ{)9vYPRAP~Aq z2v=GmyecCU2!#GB!jt=CDTxU5-PHjp75#1@rGYX+AA#`Yrp|cf2zKk$SAUvQV98vTjc=+?m01vCG zEu?gnjL=OW{Ct_h!-(d1ctb)MXN6F_Op?-<{kW8-stCPz%9<9lKe~i)@>dHU9+VNr z3xreHZ6M8SgeoIN(bqT|8IaNoRtOi~lz2FGE$1OqMOacP^U#X-?*A|P*{N1H2R;u*wQW}4E>5n%gX&mj#rO{ogD{2%fdM&(g(WiKy z70%yX>cI-<^V|6DlX!PYAb4biT!HWoX8Qfo0KzgMZ;l|m!=DnuS|eaHCWLEcgx&(- zY87Fu=u>b6F-~|xLb%%sVbkl9l)j7MQu-LX^d%l%7ygGMh`wElgz)DH3mzVm5he-* zOgG91WqY_)as=UjdP@i|Ss~bDgt}!9&lWt~BO{Cv2oI?U z&o+mUDe2*PD}=vZm3T0&<~*F}sPNDr<}Wx8kRb7pEg{&g5MGuM<_Ux+RD{c~=KJhnijxtd1i~4tB}jVk&s1>)cy{8ULej$|D})`dNKz_^;!=7>MJN^P zpBzEVZ$Bv^)E~9r;RzWbO(6JSkrEHpV!Xx?AVK1xi-fS$3gHqNq2VgdL%xczRrD!1 zf|$?y=CVMGyTJ5AG+IWuNg%uk&mc+ZvgUYb zBO%PNLipt+iHChxaw%P=B0Q~l4WWk(-2zeyw?c5r2$=%mEl5J*;VLl)!}TD%_f!et z(<2sAij)z$2!yLtgn{C%O^$%^DA`h~gy673SpT9VrPYyKN*^NHOFY~w#?6Ygc9al) zJ#4|l{W3y|K)7B-cxJ0?OJbbxW!Hcn3ak*$FP3=t-OhQyiB>WX1I1bi=RvgT7bJu} zRtT@l2nz(l%__nZ6*3QE>>n*5Y&c{gr5k00z5;;`E0gr_{r570h@u@OgomvVzF#Cs zsp1MQrO_(FN59Dkq9@Q(LI|=#m?*MhFoI zcd7_`6iuVI26)?Y31O%e!e?S6!q$7aNGJ46{D%Xj7lRSmu>cR$jD=x!-^K8Db^`Be+lB_xm?q1G=)$6haD*+wbD27 zkvNriQp2`gNjr3xws6wZuc-dRaTq}e#FGxHb@4+udQ&tn7^5C?E#~l-X)7W9J;H-(N-3evpc%t$3I?2{j@c z>V4HXlf#z4$bjRupl3EbW5*M)YJiUV68*OepeNC1%&B?-`u9ZNjIYNwq5qfYDQ5bA zh`tBkl5UdTL-a{zdIr&Pm}JxR_Y-}JnLd)}ztbUKYCW$bI!?!>lbP=QCrN{|0jEjq zb)?65U9@Sovwwq*u1Qn+A);Sqrk4@@Ejo-{h5wZ3SDEQci2flRDzB!WP4w%{^vOj3 zs@9Z#9MNw!({CVpF&&1kmfxG`qs{a-MBnz8DgE!~LBG>X-$V5Mf11*-Bl?48`ujxx z<%}u)LZbiEOwT0x=^9h|2Z)|!rjH`}h0~_={fX{0)4LJ9otfTH5BefHa#oewaiVuM z)3+1-O`N>jBz+;#BhB=;iT=Uwru6fOew~^AB+1)(Id=sUmfUgA2+2xLG&myeFxD$qBHzde%BB^ z)=Yng=!JB6otl0=(TAGpPZ7Q3m?`}|MAyyq;Y8nl)Rg`jqE9f>HKHH*$&|jf7W6bT z{V>swA2FpbC;Buq{WGH195$tYjp(z?^f^RtIAluy7}4|0^xKKv-b}xd=!<_em2(Br zyP4^2iN5RyQ~E#7f_|l$zL)4L4w}-hCwhM~{R5(ZdBBu@5z%il)3bpoNZ>xn+zOuvli`}UgB`~Cv`0WL_hVtDg8S{&otBL z6aDYqru0t{{dqI}9-@bu>BEV>aF?l^Ylz;(OxKA1#!gfE+CM?Jo9Ty%{(hAyeL2zl zndzSqeRZWN{cA)YVy4d_`nnya^p6oe$xOeU=$p5j(%(q*6f^w_qVL&eO5c{~lg#u# z&VYV&t110nqE9i?*AxBsEvEDz5Ix;YUqtl!&8GBOM9($TA0&DkGkrAC7i=<>b3M^J zo9UMkeQAX$y{`uJ-e&pQx}-(aTCC;E3AP3fN^`Uo@q z9->!lFr^<(^l@hTHALTCYD%vWeWICOdm8j3C8qR;i9Xp(FDLrRVpIChh(5zie~svM zMW*y~h(6m)e~joMX8P?!e__3;oEwQAZl+&B^d;*|>Dv;$rxus9cc%0o5PguDzKH1Gd}~UdMf3zS{XwFaePc>Ln&=KQ{d%JB{MwZMGNPxN>ApWe zKeX1A{shqE{zY+f09o=&j83dx&1}m8qQJMDJ*( zUqkd)zBHxRh~C3Yul*hL2D|c7&HAwqE~)qN`D2>?>5uh68(oyP3iym4fKc2^u0tkJ~5?VPxL3v^bd&s z=SoxhMMQtrOwS^EkeU7<(dT_^DrYp&JDBO$6aA%+OzAHpdW4zoI|=&RADYsiAbJ$h zJ+|``1H&GCgqMar74&%K3RAXKL{Bu+mlA#52d4D7M8DZgpF;Gt@0-%65Ph(jK7{D2 z|6@vTC;IhfdMMFX{@axPR5j=^X8Jy&zyF>oeG$>GGSgQOefhhl^oxn!%S@j|^f&%x zN}opb%gl70=&vj{rH>_gCo?^Q=nLO5r4J(dC1$$uE9eDpo6=Vj-Dak*CHnJknbI#O zx^J0@UO@D0GkrSI&%J3%pGx#hGd+RmXWlTSk0$zbGd-N>zrAisU*`pVs+oR-=qHw% z(pM1u5i@-i(SLf)lzu7EA28E%iGFa2Dg6|pr-E*DJksFv-utR_Xq9sQm^SaWRZ=Xqh9F<!D52w|T2&2~@7jU8@ zJ6;Rtc@d5IfD}5>OPs^@(HJ`P3Z5c-C7-Y62MP1FkH%CiwF>pGs zVoU|YE)AT~)r8+wE$~~OkcKC0_FTt7!`UNn{2z);1v@w=cmJFLAmRY#@&q=y%pL|; z;S#RLS7mk7T{`N}Sl4~Yf}@UNHQ7${)6rKGfXCMNIx%^T1H&K@a)@gR#auhh-a~T! z8R+XLQbC4(2)qyEyes@zlp?kA=s9g*7|!DV{<4sGFkNaJvUOIJE{51R@%Hg+U7Sxr$D zs0G!*+1R_XX6mj(x(j-ArG&e?_HKpsgq;~lSX>C`k{vx6f%Aqr55WiY_{~{8kO3v( z{Kw!^q@*+wVgk;f(@TxI(M-Rr1`epN?ia2;h$%hFUi}|quSjstdl$53RIr~ow)9R? zt?{8)h=k%q!(fdimd;2+JtttlCu)zvW`d39A{_2pLmlo*9P#B@cP7Ww=`jtuZ+qaV z@7gh*L7D>xFURRFT62U*9Mt}d)nSbyL9M7rh7e6QHpFYdE^w-9^=6|ludMTYg0?7? zti_|-^VnH^<)sOvjq(z@cnj&7YmaveyUI4U^zTL_*oODF3*h+`oa5(x2X~UK(XC>? z+Pt*{;5->k_GTx0Lq%zc*54jU#;9)sX*txm9p%w;$i+e2+<_Y$37!n!RFU<#9#gEx z;PmRvbR?nftichWm2?Cs#F~I+I{Q|VErd=*vQ4$*IY0_G=6B%bGL7)1SJaCwCZ(|( z=-v+9N0;iZ&DCp-+L5eXt~vl7uT_20{}q2v2|@n9=I?_`B>uR2_4Ak79DkQ_{wnuh zl)s(aUrZtWrIG&7PT2Q4{QgwM?utxeY;hta&~` zeH>_Z)Yb)Uft^5H*|ZOO65@w@I@&}6+Jp{A6YhvF)8^O0za+<;O2$dSzDwimI=l*6;4Cz1JJ}oxW}co7V0JHv$_3ZDt3#A;4~Y+Lz(LEMw8sE7 zilq#xlpS@Q8LC4v?&lDA8npQvSw7IgXQ)2^HiX_9yKv<@o(m}@e zwZa;_6Ulq+*#pb(MBb}Odw!S7Rr^aQL#HyRuoV9dYgRa`mHqbECX3G_h8q2n{`O%- zdn`Hv|LP+;0!)C^5n!Dc!}UJzGokL(XF}a!3jpB;LAJ2i$RGPR3+ucOwb;l|ejDAW z{)yz7n$-V2vQFp8G-|I1*YpSIQyTp(i}Mf_0;YR9Y;1qF?r*Y+y#8~R%PXPj35;9- zlDc75sW7WFnAKrDW(zf8G_iBq{7$T)Y}Y-r`LWIH%;s}Cb*mHp`-YuPMQS2Dh@s>j+bvfG z`g+hG_4T%_Y`(8|YYJ-s%Z9VdUAv*c1emv?zsx70JBWo&ABOHA5$Zt5v62iLat$(~ zgo2<;@+Iy&pwM=DeC5n2tq?Aypi3~-a|n_$!%bi};D;aeZ2adIR*mhuP>pBg2&dFX zn>T>l6AZNZ_|5x`s08Xd9bx*k=6M-V+WdJ09J8G|lybnX(u4Pt{-Lv)*=a)U-&6gj5yN;@ z{lUgFe)~pay_%_%Wwk2IZJTo&SyfmrU67J{186;!s-8yPj^i4cJ0aK4q28wLGmjjY z>R+Ja6jCBu>I5oe5_wx@<=NyD=qXAE1U*G#NgxqTAxDjoj8Dt!MMdJw_Pj2*Nzw{i zC+61W;*e%&&f(D;{LwPm`BShXc#H1aq5CREYK29jEI$YxZyt^8?Gkg(A^RT?hr@F> zvf~7D^tF{&_1Rn%Ns7NvI;^w9)rq^lx{+K<=4%*h`YDH0m1XR;bFw`AwK!C3GX zvS_BBnC*}chA&(`j>swp>XAw^;wpq-={Wf4L^vj@7~39XEW4Q+p6==ibIdr6k8}8tb{EDOAE3PtQ)maF{CgCc27PJsqwJZ*K~n*K@G=z1k~91=MY8 zl(DgU2Q2hKih$}rrTu3PgRR0jPeVoFk3x-G{%kQ58^wfuXU_&W@l;cB4bu6I)WqmYUA*`Dex&Zu|WCele0 z?y&plf@zEpHg|zM%zYR?u-OLVukAp7**qTk57kx~kKn}a*H3o|8XBC*V0Z(@S>0C+ zB}J9lp2NdnBmYT=^OO@#!(*Go_Fn@KE+CX%Z87Fg;NB#h)Dc1Z*l^B++qU=&x|Ky4 zy>wUDCm+tPL!1Hpm!7MP_XzNY@w7tP{cYTvp zicR#u{Tk`516{(ltnlhjNdO6`0CR@CkJMPAF>@R0PY$7_`g`)CW>KqSN2)(SuNurf zNwH0Lt&E}r&2^8sy7QvK@mnj@pUK0F#N|j@mM|+Ap#d&4H3gj*ZP9UZg6`>Qdj450 ze?R-7;|G!lvF)*X3VzJa!8jlRc_5hS;C@!B9$&BJe@L$gP>Ax5Kk4OI9fgqcw`a7~%Zr1;K}C**_;Nc06n0Bb>VGu4EgI`y zyUgFa^moo-33d^nSXXlb^`Mq9nPR*FhxuG8<{*YR+_%B)V9@bVC|p10Vdnn}H+oEM zGovod)11>5K10u$-C|OL+*!EM>jH^^O{Xm22(CmhOMz4j$`HusdiH0l^b9Tzgm-gAH^X5M83LlImwCn~tVI6AfO- zjiODx5@oO-jlxQ$!I^7jDzmKRw3Qx=EP8=%P{u6XSEM`Z9+?BE{oYZeH@EGd>;Q_q zsO7Arut(U>1yL33=gc%ne+n6G-ccJ3jBP#foQAx4@8LHa*afV7VGkPDaMMM1c#Aea zixQ#JHUCMv!Mqp-&S{vDOVnO1N`lA7p!bl&GfI-lJ_mK2heqi!`ve4Qc?p~d6D1{>)zlY#=+|E37ak}A7 zcRd3=Jss=r8v8pL)4g_de)4xyS*}Don9o2BE6@g6`_BuaITwEmEKguv#j?Dp2$Teg z2^TYW19_fO*cdYHOt+!-v+Xdz=|~hLQp4diO`SNMH15KMwBD-vdpPsn;<(aNR6fSS zb-2dTy~h>~i`QN7^PapY_84{@YP{k9kOf&_IB(5F?~IWo?o*Ql8JAEQ{#x+1 z56^(P+e&RA$k)cC2HeVjb*V90P|#$WXTWOQR$Kfe(cHp#|diLvmX9N+FY z)m)BmFH3wTxW$GnOqHjlnzcdA{KiM7>UV|Q3wmFNZ5lhT=k1e(Mm>3V*ECl3!4J_T zAhesLs^3i_Sx!~*TQ)PK$GpsuQTysbDOhlz_T}2*tve^=(@3WZKDte+;68si_imxY z<+n};LXdYI{czu!h9Hj+Q@!L(1|e-YZI(|MZE1e4-eAV( zUhm?+z~{r)kz_C}O3NQ(UB$^UmC03gSQ*k5zKiD$*JkexxVF@~jibfrkmvl_q(lCQ z?(T4P9ks!m9}3szdC74&PsRqu6U19e9@h9aFrPw``{-8Z&1AonnH%>c>NUWDVvrrt z-Wc!YT|ql+FB?5?>Qi7D=U)7r{h01a@nOMv<~=%c4bckITl*4n8^SV1(AwM$EUL05 zJ&EQ#sKW{!OsDb2ENG9#)m*y4zrY~INa)9Hr=)tFvEf>FPo-D?CU{7nO^yQfFPi-X zR>4q#;+gkTR}U4K)XJB8J`5{|jEngFSp%up>7R9RPz`8){vtJ4*N6&96jy&|3=;%k zR2!5#mDL$HY5toj{+sFk8w(!)UlajNB(S+hW5;@!M7=Tz(8M0Tp{`uh@$!_T&5W1N zFyWWk#^52w%co$mDG$P|Jhrdc_bkMC*$yU+dq$FHqV6g0@`QE6`2p^*w4eDh%(VpS zvb6&d*_W8IM~Li=!|f9{&~Q7FvSVDq)~sA%2S7yjh>vO4fk3AhT#fxn9KA97ESCM~ zF`oSy>a@DT{>ig%`%21A-%l{!Xqw%{vcD&?^Tn*NY@Yp&zoqQgQ}+9sW}nKkKO(Z1 zQ@e77-OsZJUy!oLQudxrv)|0JUoEmf$+P$8*^jX=>j>WQ0l6UK$6K55{=;Ar-Ek<5 zMAwyP-vJ^-w~`&sD6-#3+23xOJ%?rgKxF?8X;As;Jo_?set^i1!)=0$2b*U99bd6` z+sK{}`lcf5FCYN<&{BzSdS}>(YMONy%X%HpiaD3C%^;N7wj6FcyRw>!Bm*EfZuG<9 zpw;^T@ti{LO5}MUf2oigHo_ank$1!bfb!&Lda{rDs2*F9@?kmH#sWF5 z!&jZto##f)9E$qB!E=UG=&oHfIqIw*HIs_&P+6nhTa2aPbOBDo?g-QQq>@TIL=^|&Hmk@l`$?7dXS40!=;MA}`{WIsdZ1FA2?)C3$D zhMVNdNJ`gJG{GmidX_X!4;ej9oP)EY{sQxOG+-3TvoSry7Rwvg4Q`=YEs!Nbnb18$ z_PCuS+MLTF+7O5~yhGJwt$%Swr)M?YS3-}nf1$t|TuOg~{7lID<`qC$(Fnw7Zm6rB z;$3*$Sv|fi=LW5C=)fe;==F)Yb=|XCJIn3Zu`_ch)&xQZjP&RrpX;6#lISe5Cl0B@ zy08zkKxNsR0T+w0u}~`gLQM9ncvuwEj6#&zYdW9#B{^T`$rS2;=ro_HQ>D`ovbDTi zdWPDkYK5J0>yx$l=i#k#>#x=F(%8*)THZ#eo*w11eQ&M~yg}%mu5UWYq0n#wp*I5Y zCCE66hUo9O_0`vcgny^zkanUWUiP;WCa%EIbnr)2ac)S#90BVVpnbB6QG-Jxh*&`7 z(`+e~ABvKU=L6+uEZ6QSLQ4>(feU|WEzxzU?vs?dV>&a)ASYt3JNm@v-mtpkuOIEA zb$?ZA5WMswxlm358J1_*CVlF-S97xza@(aFUyUknw90o(S__89pp{g!hB}k zn2^y5d*q(KR?EMO2<4?z+qkoF=&WwZiPxM%K&2Mh1C6x5mj3}BC*=9G{KdG@-D~YA zRCle7#$`R_)P1GMm|dQbhbhJfMB=>Rlo<1eY&VYPjKNQ>a8M8Qz#rA}+1!C=W-x8n z^ZbP}G$#$+w8HEj!3nuO)a*+t*jd^NlhX`?N^-M=Z0)yjC`$6h&Ug-gaTX}j3`t-KC8Dr*B5>bmIlLg&(QU>B$@2Vo>eKTyhC>{CN^~Kvs&7_=is94U!W$cU)Vbs6EJ<}hl$g+h0o5sY{TfM&eVOaYM0$PB0V z7ubL?l|9$ptGKLJu}a2o@sd%RYZj;{Txca+Xgh8GQ%DI3#AaOMFD3tM#^nxoE)|vR zt8lp3-8vGk_a-FvC!5iYMczla0a^3Bgd5HI3jHk{)QOuc8;p8pz+}rbPa;b&h$YDGButhqC^<_4CX14a zn8_ZdzlB3lk}pMkdiQ9O~$dFq~ZT9 z?HZQWZ~jaQ%>4f%+j7)u_H*MMd>98vXGbz3P*xngg2cMz~md6&9BPF=N zC#w+@*jy^QEwu;eKGax^elmfh5bB%;7xS7h3l;GBJLh~z)+*uT5Y8fwlS>yA7k@xo zFh+&KfQ&{kgfoWWutLx^qQL{>SS>dD!;JP?VMOlv!82P`zl9Y-*d_I((K}7S{AD5u`&LemOMg@uxDLqD?Dyh>>kK$LwJvcMb?3*>%Q&g;B<5(OA?7K?r?&?1+GI zdNFb6)2j?#I&n;;L%jLr8J9Bgxr#A@U`f}p7Js1nqyw6>S8vtH3}O(y$r2I}>?v6^ zSzN3hQ^9*bo(aKhHVCZ%+V)N^_NkL#P40+8>#JalejZHZd2S@ z=3#iYo>WQY*#JUB}{jh=(`M|Ks~=y%TFgOLxWr}7B|%I z)3v@O{!VuX^c%y1QZ5Oato^|Zn#IMuj+BRH7MsDW@?{Z zr_;rg`YYaFnE4zET2Pz<*NM?`1xDQX7Bw4)KX*G7-oGNV3p%F=7|g>oc6yM@_99PF zoOK9Aci}~Mr3-ce_CkUX48HHJ2;>e#8RPwKBva!ZcG1Essy(Q6H`Kb@%$rcyj!mqd zMRcj%hruE%uR}?V_5cm&p+TyRRNmdJpui(=DSBrCS|GWOIc#hvBa>=Z;+JfVmRjU} z3o7$>v72x#`qfSJ_r%^7_4kxte>&IS8AX3*pug|NHq~Fdfd0a@`R{T4wbvHD!u7YP zg2`nuT|B86H1C?3iGmz+_nqO&!={cP5Ns1sGSl4|zwY`4L_!HhvINChhav5FUg}MB zA=Tk|$XqHgkU1bbqq+-I-Oubos#^rrwTJ53Gu8cB&Z_teU4-gTUWez;Ky@gOtFE6^ z-kYqTz$3Yy=HyLP$Ao%@RQE1dU2_G=L!!X^jt2{-XqSBd&vqLc$lQ}f6z8!2XDwYl z;z|o&j1E_Vb(KnXPjh)ie^9HzNFCi!gcdAPMm{cHGelCapULm-pK_S0_I zBK&x$(H09T<0sB5Ol!)LZUJRy|K&K(xH4b!OD@$^39HSD`w8V!R1zsU3m zci4rkv=o&Rj@JerrYD?FdP6GgSNg)eyX!%^xKixyu2n2;YBaW3kO3_d!*O^%Bl{@tkH@Zxvu2-<$JSim~pqGuBVhg|WV83yF!bej~9C zs|je!6E^xNX&Q^dR0-&zS*10~OP)IcnCMMYvzF#wBhQCG4-)&VrbJnXaikh~vy zv?-7xyJ3q}aP?^rMmp_7rnPRG@Ir~(;l+1876p+?uMfFQS!AqF z&6vqSq!BG-ViPl|=*`UJYq~Hq`HZDyX3|Y=Az^)vbP8gdHv=u>i%+-}P>rgw2aOiE z{YFSSep!D0l4u!q*?tp9mmYh^ur>#gl6622;l?lUI81_=K1zz}3F+g#Ia=$40WjS& zy$|sAf|m|hGPWm?3DZB?szheY?wk0Z8f~Iv{{LepW5#>vd4<(CnGsX`|Efm+zk~aK z?%P*#w*>!RLF$98b1%tVGjDVxvLdg^|KBbA|0eGL_X+>cS5!UUMdgA&a|pNoWw^GNr7TnL>KtiDy@bo}o;VZ-eQOv?wplFN%y~>psu=d$T3+EhA3^-TT zXyGgda7LLUJbpQ|@V#_l7QT(84a5M(LnIz0-+0FFXx`%r%F zj{zN7P3iFq(qn%N$Q&S8|3qw-W2_gEoEllb5>=IAz<-}k5itNcSra+9#ot6au_Mj=y(Fq@3NtVKZJ~)Q z5KW{7X?twrVuhXLi!-B`ovc#qq`p)M0NPf3rP2?F-h!XL6AfDK7J2rvs^ z%4dqd!AnEsfGNYDlMQoybIG#%Cbs;4oWXb+qd9MfCIKMe|Ji<{e*p?Zx>)Lu``=%H ztHh|;o-vAScnC8a+$6A`hw+_wam&uknuWaZGl);jX3)=IZ%WaMA*NBH`MV9xl#+?9 zW=v1$_|l{lnuy(B0$bh_uXFJdj1QK96Y7r2>%r*P?Bj!%o)iV>Pcr^zlXSGJ3Nsn#xUqNor$&pne1T->`wb``0%fmXvJLJND02DV6Xx&j zHhuvF{BfC6moOY#+?hLwpc`YJc!d=;#?%CLfoc7eiYlTjOlLV==WZaGlp2q{3Hg=4 z>SXyb{io5}8P1ca#Wd`$^3WetekoYu(A8NVtSx9w5AYJhVxo9v zHt5cVEAavc!aZh2o#)$Y`8tLEb#J`R{&lBMPSB)R5mbc!ROz& zjJ)xCb8gd|A;^rm;|@bcdhWoSb3Nvq3z0K%$N|l{6gRZz-kCu++GkskaC36-rsVid zGj2+bFU}gQ`^p_IDk>Yj{RL6Wsg7u6Bn$dS_oN>BM`nuM;~QpSw$C=D3%QoCd+AbM z3UkB2ie9^hXG|sik;CXnr>hdf+bJb@b7sHB+l4) zl&%4eSRa>VrMSLY9L+hUdab|r%W>)9tNw>x_D+zCLPglBC;g5uv+?mjl8W0lj6P`Z z4(m@BE-G&&>6TF>}j20FM2ElF3`bDDB3r|M7qM2Q;0s#?k{U zYIN0C(t8egOW(Idve7h3GX!Q7>JH2Nj*K*;50P{>Nx>Vpzac{T$0|FK7V4?{K<22vh%utB)^b0b?R%U0C&(?M4=uMdq{gkSP6+aD&+1RNy@QRJEZqXVMTmH`_1hzDiY(Rh> z+g(?Sj_-n(l_rOYGik(h)fKDgrjFN?_aZX6yhS;lLfR=vg_8#p+%_h2xlCua%`5W0N(7Isf0Pi@qc2HfqBk^!n0{QN zh^gw)X2kS0(ul!9Q!%~Wfr;rIy0|EedRSVBX%oGbmLkOD!`t&hzn-xAZU2*)XaVi1 zH+ij7n-kM`|3g_!;fw(i)4;~ZTuf@i$an$`<1k!gz&UwrM;7`UMxQCXsqOMEMjF~c z64`=}W4k!KU06w&|J@bm^R}fQ9^2|Gh3vhHCE2G0WdBehm;Kk=MDKc}8QBj*8X^0P zCMJ5*B~13$(uJ95Czh6(=pbgIvP1HOJs`$YJdcN=cXf?`=OeBO=pBO$mya7R%6b?S{5(1~>{8|EgH6=;qTR))C>qis z`qB)R*!?j!az8ytVILRCj+)|d&nHfj=ho3hn?Dzs@tvsIS+vZapt}$$$glJ7s7)=R zQImhJRQDtW1D2$NmsN&0_J&ZA6cSY^i#;U12*dt1m#bZflwO9!1N0xJp}*|JH*t(l z&Yee$!b>~VdB(rkz3~RWT*WUv*+q}9)jaJXsJzzL6vr$5Cvi+~n;)Ya)E6Bk3P_Wv z4hTWU=XiUADlWPS@fDhrMQ*BUSxBq?Sir!JD7+=iRxk0sFLnSxcK96EA?3C9Gt@o7 zGl*>-snOwHNHrJ>{_jtodyek2CX9_K9_v|r1l_9S+5^eH&HnFRjHS1%%N+5WX7{5_ zJPiX1eGQQ2YcU!FHUxCs@`ENsw3$b5$vM7_IkTg6M2UHBuTLC zZrc2Jm?Ubng|rQe3YR58hVuco9grko!UfC_Ap)I!X(*R!PkT=AT9Jd2K&{1DBj^=# z&vfPUmUy2T_5({CgbfR9V>VZ{F_A!#GlH`aT;ctZI`zA1sqXZ_ys1>_4g9Ca_RC$= z^2ro1Y@P*`BD3Edu!F*T2SjMxy#QVy7f3v*YHQ@6Gec>N`*d|0g&m4kDzEHU8*o+wLon&GVP9%TRoIUtnQaRgXi29*| z{rFZ&Y(%a8#c-V^&YJg6XDGSyJ`k}Xyi-Sr=`c7#;83)b1tBQJWt1BD@;%H_HM;cstWnDibzDUdih*pgq7{9 zK=(WwW2L%?nd33D84{|yUuSI2Jz<6A)3 zqv_y#&m8f)a>j{jXwEfAglcq&z|J64-4R)q9C=KK2;U)e z?k5xQbQrI@dsa|TK*h;1y4UeGAcDwBq{0UpD$qERD#9t?MKGtr+#JO~)@mt>Q3Gj+ zrCTj;DwPf)z!kBWi-LLQz%vvter%_2KBQ2~KAVkE2zS#?8e&2?9R?;liz^+NZIgG- zC1ZbKWBX5b?M&wF-{I-`QgYR?u`&A{o(Fx&ycK93`bwD0~Q`2Bl?eEZb~0DN(r~ANxsxZ@czqhw?Zl2fW87)pL^q|sUFM_> z{=wC+8u5&XEx_2@iBKUPun&tGy?6$awD%P<%xp$5Z2Z!H9?WzXsX%4~@FK{@56m4?ZIy zoTl?LY%E~nFPeNfdcwpmRfSlz`+YsW684ME^f&XLT4B#%>?zH_*dOok#P7*?L@Rue z^pdwT9WtYSAWaqQB`F3m*&A8yi3uJFLqM6@6p?!+k7`CEw7AQ1l3cd+P54sD%-2vAhoLe71 z1MQy$%oAn7aU%Mnl|xuOZqmza{Lb&~d?obhK}P4T#_t6O;xt0^m;CAcRcz{iQ7hhs zbDry>Ejj=!+I0<&mvgiKeTVoOyl2N%BYM2p`VY?>j#mFBTD`Np5_2rRWKT~7pBiM% z-bne`YjQly5bZR&6*(Q*JWgY!bg>OPzAEQ9-Yy8mBuJrkmQ zj`*F~Q<6OsdivtdCbFIPY$vvVpY_Mo!XfS+ z4n&#errp|Mtu>uqxS-KvprNB@#rOELUD})V{5=_$>8=BaU3hCH+4TeZsSejs_JK@B zK3M%TdKzAQZP{nMjP(Jw{n&5G{7T*qHp~W!7)LUN45W`Gp(llJd)Ml&XG3Y#-JVb| z1L?+u!icm*yQxhcPrg<4@OWWdesry zBhFvp(RUr=`aPH&d2lRVlZt`!#dOXta~%ho!OB05v?T7az03rjO89Ws9q0 z_54HlJb&>C`1_Jmy6e1N{KpVIzkz7S;3rG!c)FqfbRnSq&C}iDPlt(#5^zT44X1Q4 zPIQ?!>n^wn`t&^;^x+eR_yo9%*kFShb@T;)%IhDB*Px5NXnAbr{t$|^yZ%4c&Ii8A zs{Z2}Y&wv6r-Dub8+z4|mQ%5qf^ItXPVaP@e^AMmnc}~ivH|Ik;oV@j%Y$ZAR#d3{ zu`;z^L{yd=5Fn=UrxdjkHTAj9KdAi_Fxl_@`JU&wf3|^Uzr9}YJokCdbI$jC|DW&q zo^#%on;*IV4Q6DxJQa`JPxAg7v7Xl|7$NH+g<^$o#ggU8hwGR(Dtv=tPgutbH~bbf zv}?$!S_$MRaZ^Yl$u8!_hlAXhElkd{AMCF#9gycQ%7y!!qRZdVt2N!s2Y_GMc65HD zDundILt-iuq^av-IMKHE|K(Kao1UG_QM?1-lVje}W9`x0cYlC)GCSfDL6D$ei9*lL zp^~f$=3g(I&8mu*_KbOpPq0rC&+i!<|E_aQ6YuU9@ob5rchjq}cb*|cG%}KSmB!*; z@pf{!>r<1qX-~PtH3A?-KJ&X2xR4+9sWC$5BLX_foYL5SpVVJxE?XZG;O~Ihw)>o{BSnyu6{gn>s+BfMF`@}SfU#(yO|hB z8N(gC3pX^(49FzCHcPNWPHpya>LbBqb!^-=S>thV=z7&x{nTtW3*XAdPi;mQMi(Jn z`jZJ+^G;Uly`BC~Uz9!a@3xDf)Xop43sp2!GX2vIiLCY)5=Y(i^gcr35V6QQkT?Q? zQU6gN{gC*q=G+X4UJNA34TVJM&&aJk&Ncc8yByt}z8Zx3jW?k}kKisxh4$m`*Mz=) z`5^=q*!&BNckw3_^}OckF|p-C_d4={?jd^}X+wZscE~BR*dX@B`?lk0X5)H#VdzDp z-R~VkiD6zi{U~~SF1*rmsm54sD@)>D-HA2Q!gL?SxN7!DP)8VIg^J&>!N2AOp^rCP zZr+18eZBt_Q&kwBosk*?pN0WCV=-~hS_QxjAFkS1v4lyyfLy|_aq-KwFkgbLIQ`>q z1S?vZXISZnkBtr=d?Zri?}G}<4uFYmnGV08jc5s%!jIc8j3jLG&KtoN4w4pcRM%(J z*D(;1b0(fefbpJL-aDM#1MA*2%DT{~W-D<$#m-5_I)y*DwrJ3ACmxpZa6}Y0P-qm+A99DE}P)->ZvmbNMwVXijtP zD{e;U-e|jU;00GE+-}qFlo`^FC-LnyFR(<K0UMH4FYa6&8_ik-+v-V!vw55LBw)ptfEOV`QE(9Dga`vbO;*9&T z)bMO?Bm>ar^sud$Lh%45f~t{)T9wd{T+uLot=>lxzvp+{8~et_eG1M_6|Fo~n;qQ6 zvw9Z8GP}RA_MNTqbW&Y%D^crs@?}@a z%-;!jcTj0VaurZl%&u-o{;^^FmiokdeEK4~_cYv^BWvO*IC54=ef73TVm(h!@0ze@ zgLf*r3H<59wlxh zT~mwQGPa%d=8wCGa;)9*>sCCG`G% zKqrGsx_iq-A%-yA0jG&?vJHVh8O9zmES*qwDvt&1HI^eNpOl?}9hYpLjX+V5 z!krsu9BSk6nsQ*E#u%(5R;j?=YeQs#pU??LtN$UgxE7d1+Aw`DS}4)jyo9Z#?{RMl z_TTL~sXgM~BlVb7I zPm(h*moa8FW$u3`I7oxe+Z=F^_5y7*X~YKmi=ypxCzcwm3FqW! zb3FquVZhuDa~!qFH?+^dre_<*_0%WdW$LAY<=*3;mXp*RPaV=Q{#i|pPGnPz`Za%) z9M>oQJ#zN`4b^|0IkLWQ)!E*)KQE}?@PeMUy-X<`D=_QSqhD>Peqr{F4apZ9#=p`) z{x2IHXbkl|YKVK2f3;4&!{sk+JGJwlk&atiWoHvgLU}8#D?U*Xt`}(L-Mlnc;S}% z5P++@<)qmG!CP8&a3i>ec0Z8A&9lHST>Lzan~6ed z9{Q9g6{-mORr(|7qbzb&SLhf@2Z#&(Upy%Wtj8Il6L1inj2GhNWIN=VlMBnsiK@`G z#|r<3ajW9V%V|jZ4@arMzl;BN(bDPGl3($ZaeTG?3e`rs1e2Kg@h)Sg%#YV>0Ob@? z=HZjUsA?98GJ(~rsi0}vt}p9~4I*y-w(C%i&*O4q?@)$tJmE!;f38>T-nKcZFo8E742VNxR&g}=|{^fxih&KAD!FRz|NifllEMTZ_qs(cGy@H3{WYJ{GNndB2!oyKz%E%)!aDW_E$To7$Hh=SZp z%y=U>Ci=FfM;w!$q^&>tO(k>trB`)=zB&sS0xYNp|QRdQ4B2*ws14a!6cH{6hu3c1g&>>#;15?zkah zA4Jg-45VM{$Cv2p1y}6#7X4=M5$T*lL7-j`UCSdDHfj}iJlY08Z47G<`lidpYgBnm zKigl3t=*CzWb>Ii(^#8|N*`AGeywCs%qv!9J=cMzxDH@)D@5Zi+E zVnP~{kJgi}l-yA7;_CIAUThfmFGAkYzJ}yK>c?%W=RAu}?O71-e3L_c1c_Jt!wI-e zYkC;W(!Y+VUT5fzg<5W4HXANT~_H??0K_R$Q0{Ema$46$lJGHhL?yF8Cf>! z`GqVZ#c3SN&zSchy8!a|!tQ?C2lReT=(^6J+$>b!XD(jJM8l1d1uYng_U%_hIxe@H z(Dy4n|<#9QfaHF_)Fe&E6592xPF^Wp7!-*>iuyHclm8Rxo%qRL+3ZsY|$~G=VV3P+N zwqf04k)K@$=PYHFZ-Zd^(|rMD!~2r(9%89XEa`}*au4ml0=iG16$NcHJ?{0PA zgW?FBDX=)Yg=;LusZZO)Dk@RewaA^`fC93&A`bV>)N1O{r4=6gs?sSefR@ih1VntnK-2yXc67;Xq^)<-f)LYb`WpFVRc!r6MFNYq6W z8cwmb*2i{3Dw0SL%sZ$i&7rDn5!Sm=gd;h@RlzKAK=0n)K(Lk{pbuI(iz#RTg5Rcw z2voD#);Ib5Ywg>wY<;BnAyxZ;UWvVSDf@aOW)cB$Fgi?$$pWi~H*qsgCB#!IVX9TI z>IY=)Fy7OTiT)AxjYu`@9zPG#u9ek*01m+@R!`;^?Th0 zCiqLf9s^1{VCYYZLd-MJ?3Izh>b6X9r5&3th*n^UC3GeJioenrELNo_a_bjGD|L&{ zZ~iPo*{&v%Bba}CS{QlIcD)(cR#(^-wUwy~0_2N(ur6~V3!VaLk!6db5%1z>O@_Ac8m3EP)a3oz8p)e>C5*4pr1L4Lib z+#&vL#z}YJD-;`6)b?G zDgX_TpNmps%lfCX=uF?sXYD&MOmpq#ik7|GcU&3iwDmWHfgX^TU^pqXfji-)EQS2O zCv$3oo8gHd`jT{-rNW>NG>dT)tW+k}GA@(T;lHdhFuRzm!#G$t8^~41kkaeCA{;AG z1xgN1RaX8P)zGfG!a0trs9x0!nT-3kpFVSf%m?rUCHvN zIkte3Nyx|uN=-sUzR7R#p0f{*DR0xWkSU$5Kx?X#ck)JjDG&1=E0tlxsiA~W+2){v zMq|UNd#VYW^s~6Sd793V5<70S!g!jxGTh6oX#>noZR}{e+g@TlbS3w7;a&D(v9s_D zmlk|g50a1IMY&a)r!pU-^YU=|End5pYXj*p^@;8Ob_bMd)5?WzRpb9h|5KqhJd>Hi zc(gImz0t<2YS4xiI3j@qMhoq=r)ob-rb67CC)VObT(cXu4)$NUfUh2-=!`pPo zSv;^E7IL2YGa1MU*m?K81qp?DMji?fq6sSe_9NY}vQiYNQhbXk^G33l0>?c7s`r*j z=&OGrQj@M|DV>D2Y5@B5ErFam;rK6*dr~rB4usxV7_HgpAF|hnL$W{mViZ7er~tC^ zkILI3C&cXg<4zCQ5rxTnqj!i6vF~;Tj0f~v)66NA0}tKCr{|Pe(A!ihBRf4~9%SJK zRtTZzLBBOZUaMs7Xt7s=d}jJ^w+QuIsZ1Ir=b|REc#UNtGC)2-@L8|e(!slt)ZS+zi&my} zOb7~WsD0${Qv16qdTn7Pzoo}~?Cb1eNPfs(nqvcEjbqR-WjejJW2xy5M$%ffz@EY6 z0jBS@XZ`ww`Vy6qp!9k~T7H3k=Ph2z|HL1C!Qk?5_J5^5?r;BPyhT4w&+X_`fk5$* zUr8K2qm3iCjur?Tw3YTFf?M z|3~E3W)()KtCp@2ct(MLpk$A@-gy^5fTtq2zGa@BYi@N>6-!EqV5(+IzTO$})>(lT zhG>bMg^^oVNCJY)WQK4I5(7}HADctwt0U{JXHsf)QJGD0CJA)r7rgn2%vWp>ZpZFE zAtiuq6TFdSOQT!3)^trU7gJ7zO|S-#v1$Jh#FKcRXStT|JoSfv*g6L93P8NLbx5eD)mjtB26&oT}AD6RQ#{s=Cf&fe=oCuXZxN(Jt)Y4+8sVdW6)J z(C!g(^SchsnI8!3UZMxXE0~DGs&lMJ z&C`OVdiCQ;Mv_10%>?>?%sEhykF2g`VzKMIYC5o1%sxRv<`sYMZh?vIH0_)Nrh-h* zMg^u)(sImmvw?}z;lR{Fqo&@)%82X-p+F0v9RFtA8*zJV`Cd=l-8^~t6L;JCB0pY8 zBIu4iLipp!^?$&G5I);f^Y)8f&vm~%lr*T?@f#HpIK6(uv*cq1J-cuyJUQpkT5mej z>=WqQ4VrGRF0A#M?PiGea)aA_+ACgu*DiV~C*<8j2I*zv(7X;>^zU?SnLVxdD`do8 zNrjpkcUB_DtHF==e`*z4FvntZ=GA-|K@NirP+1w~r=^oCQaRvQ-GQ$RJfnenY7b>WZb1!}R5*?;bS$ zq1n#mw4#%b=ikCjJq~o{Am_xELOZpX?R(>1-7##;QO9Cs?<{T@+Tv_*s34(Q=j=M| zrH7MaFn|V*@Er+__=f(?x5(27bP!O)Boi=O@G($ysjojJSIB?!chdNAZ`6}Z)MeEp zn{5M5xdwuw!XI;RM%F}#Ox=Mta%~837?}muz-!Z3T8Q`wT8Vj+Z>0KIk{J?LeM?4^ z#XY|tm#IEWY-#PV4@(_&dX!+9d^3H7tMjn@I!O)jc^{w_a&4r$%S3E*gqu3+I*` za?F>6&yb`RVK}CCukG*7h|C!FoOu1e@*3#-+M4u%5<@aP!KzSGw2t#Lc*4@G#tL z>_*tcar0T6ZlQ5fsFIn4w*9PN-bV49AppzVPOX~UI6ZwW8r8pWx%k96L>fD}J5KBq ze}DVCA%BMx4U(Z?qT%lc4QSAo>V-rM+Dx+nAN;*KeW2BO+-X*)6q(g&!#=B1BAFbd zP8Ot5mB3CPZsXCVZbm={#+)W%f(Vp>i{uNlO`_aAl(*yME$!Ny#B#AVWdS}BnJ>Dj z^;vQu9FOtzr+TW@8^W(?3-Ifg+$^nA=c3D4;NS!B%-4FHVaBD7S*o|rz9gnq(bbR7 zVM73zPz&nb=-mK1&s>~`&TQ8u+6%|-0-e^lLqP9+Sg$lLLZ2V`wNr7$Z+|D$>izI3 ztzMn2R7nYR1muL`V`u{@>DL1a{g1BR*dI`%jpJM|`;lJu=D9J0z$%$_@|Hf|>_ga2 z4$jgi@y6fpOf&?^i+R!R+<3R?i;u|j%G*yx`l1~&NnfNzdHSP#4;t2Ph|&}b>@mjJ zX$s~!o%c3X5x+ z@veEbz}YMk&XFl;#@KjL%7RJ4+gz^dofMde4tl5z|bHFl<`B?pkm zVy!*b$qC~N{WnbEWuP%YP-aUEhG6?4m{+Pu8p7>Z0*9r)6>^wya5$T*HY@xiIdM{5 zL_-8KgA+C04dL(P91yyf{00<){jI)5n_3>r+)~lujSQGyl;TT(lNh2XLw23Vp4|S5N;lIQI~opA(!}_`JGkw+jY#NiEHNrCU`K3^ad)V4z(wM!ueV7c0M* zJyeIOFy#C!PkG!HZBo<=k_R(R+nQalF0yQ~MQC+!z*^HZZnPX@6DWqak_ziW4BRU~(8<;0z@4Toa=XkhZ!)k(awUNZJe2dG&g5A1Fmuf`HsFFISKWKGW zkzuOdyMRGw(WQdn4RN<3Yl&@C@Hc*~t{ZXb#})gK)>Z7|Xcf`x`HxxOVh@qzYJ1j6 zE)}N9>?dWDQwRzZIVy^`#g0KR8GIbhL$DOU_9MbiSZie-j4rY3c~n-te&%)IZbIJF zF`vykD*ldEAu!a#E}KOZuaT!&AQ1V1n&^m@=m!zhGOqg5y_`+EC&Fd~mh0%L7Zv^&MoH(IIk$`}>zS~Cex=(>t=s8J39})rlQuHikF#Kf zH7$JSDEe69O%B^y5%cOs(#@=XNBsSr=Q`D1A*mx@_ygqb&~Nou8d7~#Br&g_m)xg* z`v3g7br(-&wDkC2?Wg~kdz#pBXe4o@zV;^Hw2YL#)QBe(yP9X+V9_4SD{IxG>c?+5 zu|C-y8@H8iMyFpE_s(XJJ8Hu*=ft+!>vI zNX$DOGgta8zGDNFqlL5Sdw0br!I^|E(wEBFI>v!`gaa`U3;?Jng499|VNZ;hOVT!x zC0%_7YhGC|j!;tn1w@iG_^x(vO{gNLzjk^JF^LgK2P1)Pg5}pCEQpyms?=Z^d5i=K zSWHR~Bj>RH=w3tO_uXZdgY2vJOT^y-ZqlEW|K$}=wH@e#^gjqFcR@Q|@T%rEaT=Q0 z3$p{EzQ683m!*I{Haj1w>B@SMO9sp@!PWc%KWvzspkCif4$-23K|}JLlNuVh@OL#T!e*V zsf!5Ip0#tgss4!fM^tNYKAgfPjYvUZr1MOkQslipigcdHkGNMmM8n1@3``^QH=58| z#jX{5`YWEsy^)+#IWmf1oj+_igHKUHjuUkh_`PONoF$AbE9p)bMV7IJ_x7?#!i};= zy&W~F8ctyOZ0RSkG2P;4f>y(`ThrVqz(S{5qO)qd;^j>8l_Z{xxO!HqoHzD9SI=Im zhv*UG>FsmQuI(COghlfOes}d7GmpU!k9!yNg`3>P$8De!#5NI7wsl^~?%pBZL(R`TpiUn~i5tq-MB8IZ;e8n6nYyp@0g+ z|2~8ZA*5O9^WhkO>piZC;?u2(qNw%R+R@z<-IZyGir=NtVEe$v!ohWJW8bh=z-#*V zQl($9R{Xbu#zsBmh2gKfv7s8P@W;|bU`NdL4jB-p4>6>Hw3>4uq7xd^e^EFxnLDnk zqc(>kZApO`E{N*PJV=EkE{c9z_vayupMh6Z5j0~9d|RLr;tsU^>0m?KAGx?;ei&Bs zi^&bH<2#l(%Pq|aiV0^R6|h!DoI;?}TA&fcgytNEknN=)%M!qmfxgGC*&$RDGR|@* zZ}N{8NMlVx>*V3g+1_-iaF#z(QG6l?XT4vC`k%8(+?WT>9%Kmp{XuFnZbD_GpF_v` zubzOqxg(=(2l%i5lGNtwTd;&~b>rb_rfiZb1i%(nZjq*;O!MS|%`j}DftNPlW?9R} z@e7^e**3##*1)y>2rW8`McMzv=v)_V4b|-oQ@1x+W5M#9CSe6y+ZdYkt?Es4;Ek53 zfIu8YJ;>1>kU?CgafVa13_CxX5*ak?wBfQzhlPnW?7VD*$dH|WkTawdG4;Rq+lg&+ z=8On-VMtfgjmdpvve+Z3t+Y;H@s=0hAEoEF5x*-m*3Jy-q_ez)GfytSh7JFW8Pi^ zSu9|Trt~MN#s5n+jPZKTz<2QRSk2zXAFy8-Z$)v}(E(JIb748Qn{n4|JgM#>SH85M zAhCTa>lV0Ckvn;zP|MFrcbL1qT^}xZi;-f2gRpOX7Q`jC@5z3Kc2g4RP`->_b$q8- zHx-cuKL>+z2?UoFL>B%P-Y`TVdulNghEiGyW(9Ux>?|Ksit}yHT4_(S3Styv5WT7v zld=Cw634(R{oN2HVv0pFR_Xk!anjdxlL$j21nma|?HV&fc(%>D0*9|6cHrBwcOH)o z!yVIpOLc*cIW^f+yJ=f(VoRhxu??g4YgOqTH}0U}S}|X=2Sc3bDRJ*Y%+batMV<%Idnq(B&iVSJa)9ML7_ki%nqVKam9yj!pS#bE>Z zBJMRB&oclzZoydDn+K!qREkFcV08g))1QZ{{V&~RF5G6jQ2wF$Y76-av5dVlpU)H2Y_ z>(*FOPHFL93q)60;S618PcypO0%qtsOR6QyHI$7ho@;GGSHeFZn65uFc#o?elTX)k zq3cs~j)krVh_38rrTq*0H8lI1Y%isBDX^`!)BBpBmwt9$NXs_45{f@U)qs|Fu`8ym zAgDEa2!2CaGJ*>_;T^a9Bg6aC@=K!S-Ajy?Bkt4%TE5jekd~$}GqgO~8VqR}(kNgM zLu4AMc^~4<%n~nZ#)y>OFMD&c1+$l0Dr%o?S4Arh%93NFT3TpGy!TajBm5emFzOh;GU0Yd^`ar(8e%{*62iPhpM z`1;12y}OD&s_mqhVw+(e!KjrT!q-UT%xGg#QiWm>fC_()J@RSOBHI#Uip>CX7OVGO z|D)e`$e%pJD#KrJaH&S_np8I=w`ygw?k^ss+9|Hu3>_Th(+7#jfB2pe`S75f08w?sZUkH~D&O_#F@l0ytGkg$W^AZ8ECDy}|rVytj;AepDXC)(yo=JS^; zETW>h`Zir6FXl??2A1!vgplqm9}P^ERAjBXFu$NkC^F~Dq8ouCQJuC?bI7)kJ{FY1Wi#j9M%KMCZa zK_-p0@4#&NA-(Lq##q5LJ{G)0!yYr`x(T|Dle--)_HA9y(3%RW*GQUHGDb%j3 zH`1IRY)r<5C%PW`oY;Zvz$I2g9`1N-XYnPMp$8}K{dq4r<- zrlbFHo7zPGeAAil>+ZADp>$&4@TxOm7vyH9&%z{UxmRv?2JpzO^Q_0_)jA8lx@eE7 zmNQ$udCs9-Blg$Cu=D-{py_r#umm1HZcyS#;56iTjKXY%-~65cG}|6}j3gEWqzL_` z-bFZrFWxk;v-y5Pbdb7iB;gc#P-*%oc_Gt|V61sJ%P#xRpUq%(fB&-|CmO>*of-jM zqDj=UgPF^T?pxshnFD_vr(n;^Mc$YS5xct6Ex3a&*UFvMe;@@4FxcXzF@rnM3GR5* zB+Ln4V-6Pu4=V6yznViqMlRZgghF83X06YY`=^Q%+D*MmVB7=;WyzT{zp4504-b#< z13a$=N99(Ce(wj*lFIjiCo<1>{8ib1j@-C|j?!E42|L++&hRD;XL+z7tZ7}by zpXk)^=VS$(S`KA^JG(fsZCLAw#I~lEJqdfUx%mVA%J%!|KXJR1qJJByROxpa4eW|O zk$GQNM)`o80T9p~nRkQU(dDYhvVF9|x@O|0)_vRGJv`EJ0B_ovjPBT5H#^!RiABY_ znHuRlg&RynVPxSp>_}u8S%qFRXA6<5oOqkb$`?6Xh@GpOced}iEHeKz%CztJ6tmg{ z?b>%x<9#@y?K^1WhunAM@4&>G^@%<{&>}3h0PlHj=&&6s*2Zk;6gDM(7bxt=KcIM0QgN=%V`2vys~Xgta@wU&Wv9j^DfO1<<0Cr(!OIB zt59t2H@SoUJx)ZHfU-ixoZG7@;p7fmkduB;b0(?c^S)=qIF-wXAcjBo)_|x*uAbr# zQjd8`aV1ZM%7gxYpZ*umjBxi8*MHLl{Cp_$;^E*0b1!`yG{ZKi=_k1LD;EYp%>S-+ zW)_zZ(V6xgt*u1eyX8-&&!A!|ReL6=}w2^6y?f zh!LAv&pT_S&@3657d_k1kz2_a>5ecCY(c;^=X}R{elnN$ z?fF2(=>IgOdi+fl7_YO4b>tYYJb#hFOK`sTkKhCHr|uD8$$O(qboGKOBL{QB6Wg#J zpHe|wU*$+()R?hkCDartkVs-A@0hwO?5mmhW~8$lmcwuqMsB%ZcixouGNYKR5rGn< z5(lw)!4Kh@s|AR3yge8+jrx`fCjB>MQ5G#fivd{}KYU$7 z4fC6c%E`~exnkoW`*dlvT~`KMci2^`1@g}#!8Nk54e7NIpGGip3r@pomia#*ilF-7 zr?_Ux*+RuKJ3`-D!*1e%jm|wHc#4nlcBJ!dH1lM&7V(}}Teur68z8gV0}?p5 zPj|^8%uYUgjP*3NI5q7zd|czh_Vc&lI^obzx|YHso$AXzT-rd_lm!I^#COr zhMgoYH@xgrCZZmw%yOL{I90B_C9MZ)lktcbCZ0;4$|3!zW|2>?ZQoYfa(&#ZXU?%_ z&IsllhvSQqtkk=lyrg|;KD)uGV{G(*%S$@HSB;yNHa){2)#W9rc_iP+$;@!jAdSUH z$pz5n-aB-b=Qp!rqwKCs?f$x_l-J?%ih`B;zcByA8wT%?^GK%C`KP)>^zz8B#VW~1w9oWovp=Pb zhw+?yvsTHN^&D%kVcQwrh&@=`JpJgp$gfAluBc@X@`KLs;%rBqWQogmK5OF;Y=tsX zRGiR`u$DH#ruV~c5q5(P4BozRYS{d7yJ`NYy3~lS!5U{P=Rq4^FgK_1Jb%#gQ%mrR z2CT0~-O21swxRw-UTjNZ`=v7`d0n5y3~@Vi%;cZ*niIjg!nBoZadzgeYUk<7V7qJ- z%D{&fy~&iEtQ?7m9kWPW;F<~W9CC*J8+D=G+e+54m)QMO;&Q3u=G(pXlfx@jo|Rhh zRPju^52D1DHF$-&1QBeph+H8evpw+Iwo!wEr!4-&mYo!cB)&x_WZtJleqD4*FwcHP z_39hQTGr z4Th^o;!fVDioRC8^@gQ$iR=w2m_1v_Xby2!lfjvdn94l1FzV|IoV6=3|K ztoa}aY|caA28Y1J%|c*6{(MICue5jmZTq2Yo~F4_*$k8y+hHj$#!qi1PVPfg=6n&d zct;EUqh{D;>`YyfBc0(jBjWgSra2kbrP5EkFY0t*h3%o!$G~4Fi=D0@0d0}izd_^7 ze87XV)s3UOdtXAi)zDVv%|?=J(ps&W1O0$_{Hvl@Ui>n$toYXBMixveoM8u0R-n5o zSGMlyzh#`Zy7+ot7W&6s2p4`EWL~eeEOSzX`V9plq|dge_a1hYwXjHxlb7|lzxf_tBYTsFtUJM6v9{yb$wJ- z8UribJpLm)`g%9>cv~v>@xFRI&;Q*%pyh28fkVsXv2g!D#oKQH7Zr+amn;5{^vSTR zV$&BAXTNvSc9UQ0U?q!07|w{Ic+>u$^WP68agWZwTe`cw%f8q_6y(Q^$bbEyNwBt!K(R}-R=kgBLyPlc-#L8W?}I4dNWSWmkoz|tCj{Jieuk0 ztAE8&>IoiaD4{|1XQ=vn{ww(Rk$Bwo)m^}!-uu6W-|8Q-3;4gH>URPEX9wcPVMY4N zky>N&62br6Z6W+7ObO1_$_U3ds&jgRmI5wyawx<9uRj%*7BHGnA}p3Cy_!Hx+I5pV^QIwiA@ zWv(B(E!e8mA0-QrREr0r3a$VJJH5ul_iM2SA&D=J~Dp2Uul z*(b%kG3Ulo6P}EvCT+G;8J}mjmz}L2KO@!BQ*uVCts4yNY(0or-GMmHQ_IV0CjNuK zESp^Md0P)=q`Xj`a(RI~<^QCA7w)ouqzj@n2kGC11N%36cm2EYzw6(H@6*3acT2wm zIF}dBf_7t8xDcLbH+rIYcaXjv&}MPwT-u$u7qnXt(oR>=54PlUqu&9uKf?aHMeF%* z#D*&(pXh1b=f;3G2eiG=k2d-~pFX>Xf3Gb3w`AeJ@sqoNf3Jb?-#q+%;NNTZ=(m9X zHvSv&)jaU`YI|`I@cY5Pd-<8XOa8jT9H>EPFnJ(<{dQQc{N&*;GVd;DZ_!=Xiq8D! zc0D2cV%y}|SH-j@&nXv<7bIqiwVd==toq&7&mh&0LCChpbjsj5iR3z+5{Ldtj$jjV zQCXg~eC%@nZD#&uE7+sEZauQd5eNr8a!Yf9WoMj!)}HSIOTaTtVYS6Nv$z=~yc zcnvT7gN_eksz*N@Bd4A6v-eqDS5m|2^*zCZw%7Gxqp%dyX#A1cXqgG4yQWsv*kJsT zwykPzihASnAn?>~{glgOuavp2I!vALihC{y;z^!)VRE9*Vh6~K#>0>UrRmSr7Gv7O_lnzkg$#1Lj@>gv2H;o3IG@(z%qvgXMBs9(cwwu5#c}HY zbxQBjZq~^zp-jP^W?kt~8RRNo>0baKy&WdsdGQ5VMb_zdTut~aw)}$g-CyjTw36eA zE!ZT|2-G(N9kEx1V#;DD@gY-;j0hs$2BAlX{f(s-_BI^J3dAXd#GZ~M_Hs|A78KTV zZZIbvmo*IAMArNelJwnqv>ki$#d!roc;1kFs=lXp-}=P!C$Umv%t!01--sku(2>)+ z#td&rZmREjc|?8UIlUZtK!f)=n)p{F@og(`-ta>A`5u|iDM2%o(6UA*HHNdgIP>vE zL+h1iprs8&froQ8X*Z{j_7tf@3zS5~W*RZK>ubk23h8-bA8xFF>WI=1T1UH{J`zd1 z1`=4pT*o^APvpqP zTDr3}l2FM1uh&D|3!Y(2-&vVf69HO=Q+PFOXS9>TTHI-}sj>?u*#hNI4+5QY}=9oCO)- zO&Nm}3^wHd;3!R#)-818EpjA&;CZ{**s(- ze|@tBx9zMQ?WNc`#ilCH;mGfek%dRvj{qDHGRuX;YZS#~^Wf{NNZT12@!n$qLw?Ta zNa7Xl*fHzqN_)xKc1g+*t>?Tj4QLf7l4D;W@VP11jf`A{ zepT|dJ+9J?zg;`4L7!$kaR|W4j~Z}-=_!KRRmA7niej|Uw^5%|IeIzv8=fjX=!5;ERFo<_p(j8~|ANPa=HP&B zbp4OgK9dW8JmM*bD#i&I8BNX6B(Zm1uP44M?2X@n7k@50CDiL|^&K3AC(Oj^y&5XU z#9>F-d)2b98W@B))QLq0piU4~=wo811Z@3`3 z#Cmis^D+r7HU?xNv&27lm<%+E$gR~o)@t#Obd@Dn$VfJ`;#8DNb08|4-AafKP+A)r zdFXVumTMbb8B7RZa8D*T1GoYJnB9;m(4S^Hme?Kls0Ig!f9};G*f7us2m3qbWC`p~ zYY+s(S%*Jpd;Zf`S+mtE(+5l6k%}-FUmyK;`Y=^bwW?l!n&MWM)Z`Lfvt9Z1&iDG# zC*v~@&|mH1_{1xy(rb|ue4ZLdCp&(+2CpyeiBj??PK5UT-5`Y zqI&K=IFt}hEs}JEYKAimUVz=QjQW#39HTb&KJ9zcjC$S~EXHDIpp3_t%mq+(`}O%`?SBy%AHH~DWQn!6>Yr;Fs92`7#*{OuasPI4_8aJ z+lY%QgXVZVD1cz9fF^yX==ewPAH|GkundoLg{h*v(tjj8nAT5e`1|~avbR0|( zeUsRi8)lu4v?EdhZ)}9*5qmUYpW61FfcX?Z12CVD1Egf`)YKounK-PEo?5*<((x1L zi$8ig;my5kPV0(CqqXg@ZO12g!9l1}k5jU6ESLpu!@BC%tfB>NQX&i5H8pw&@LU@` zjQ`uBhbvxssD_VGj<+9y|GRH&SWkV=3wy+erR#_Nxvr}%dRRQUt-j~=65St)<6A~h zGD?4kkPk|Y?qfFWocFNm-vdv2ULC+Q9Nky%4rLJxX-IX^!?-zxjYMXCN(a4;U)$hK zL&d*$Qhnlo`x?eQ8ZUe;4vS1V+lwCw+vU^NRzCZwFE|M}ne;B@>3PLheUcrE#I$fs zlhf^oZOR+hq2*C8E@?xFBZqV?3ihcAPZ(Gb-2&jTRKQhpSBZ)%{rfIgWAt-qq*FP} z))!ow!pJ-o=sK-1r>Dch4i0B{eP}`YB}uV1PXf+q8h;*_g>#yN^X85JKXC35!dV2I zG;5Fm=a3ntU8fBJoWlyzHPQ%w|9pTwgQ^**j>v(k*+J!R*d^`};CuI&17+ao zPFO%p(t48Qpko3*BZZZTnbq zZ@|atW6c7})AYuEeuA(&hFx>;5+tuBeg*x|CeaLdZTy?hPO|-Yy@P9ncnWzArKk5R z?eCUGI%k4FTUzRW^RiqlqC1OUI5taL?121>yVn2LSoA;P8lpaoXK{N@BQ>s($w4C+ zA&XY!FnX3$LEaA}+al8SWAcziW3+HkP74?Ub>rzj|JU6>$AP{m{z3Wx{`04NPU!Q` zv5V3irS9rdKa;wvO}y9F`Vlcr+o%To1-2jmhta$tnNFX=*YWYsi5nV$w)vPW(y=ds z_T&FOwDBNCt;=l=tV0bq1795dF&O%cHSWZ}PA}3z;CufUv-YWMnrzmdSw6(qMSu^z zUt>1?35O$e85PXphcjFF8UAm!Ig>pxaI%FgXum{F)32Y0k~G& zWo@zUvhbr_eYZcN?Qb*p71!du&i}+7i;99o4W%rSm5^5@sSnLFU^=^qbZex5<~ zIo4qD{#V%?{nGdKIxstC#mAU*#)nfFoCBq0cohV{K#wOJ`+eCOLn>f zsf<@*d{4jo{BvxrVTYaBm?}Lss6J&BC~k4pcji`4jW~u@d$#74A01fpI|g-F^OO6l zudN4>oNyS`tuDTCq$L#O+O; zZB9k$AM@VK*Bfp5?SK3Yn1Ma#GE$tCU(-L|Rqqq8V4}kL2+nL~=i8@SN`+oRJ}0ye zjU|~wkjdf9;E&nxjCl6Sw;aoZBUu`{fPt{Ud^o89Pjo$$lZ1im4U-iwe9|o-cVPof z4fAm7@7==+jm#?Xj|==8zJ#{e%fDtTJvc3+hw|Y6p!4&m!UFz^8=T=ncr8wNEn~ri z_R}3k3;*5xyw!g&2?g@A`p?h*lwG2BF~1#|_eY2SO5wjkZ9eD7QrTdhYtLe|)GybX4=dGJ`+rUjYpU@2rBMs^HH23KBhl5iqA~g&~9A zmMPQ^iz{D)P6uV^6k3fudPU})DPbNkr;du$xF3CE`RK>SQa3S){CK2eD{#4dlV^me z)R`1%B+q0+q;rjXfTQziaMsLqRs}JmNXIR~H!bX-cP6`?HC9gC&^nEKcEW2M&pq3) zoyn23jUSu1A+o54Y?V`}xJqMxDjsC&-a8XAfQUplSFmZwP;|^citGU+dGDV{R#{69 z$}jl$bM7B>sIwro<)Ua-uK5r+I!s)l&vZ6@9vD0NVauc9B0hHk3{!22t-%20{wD|d z@eGOyr%b&Zzy>!ZUOvNDgH9kiO0m2i~xa)el{_>m}XOp!HV*iFEs0gTsKipYcQul zNkNj(g7efXyO!_BJhK=5^poJ%a-sRZP`in3g{{`980u-p0j8)T%h0PD{Lu^%XC^rP zf3amMK|#K2ouD!?eK_Obpg1d6SnA6}4+C9cJon4rx-Y%r^Vph7)jAy&Od_@&zb6l| zdbmT@{}O-LsvK!W2zhBzJom}~gre3nLJ)?|z)?UQMV7_baSA7J@)p?kBIEFA)3#dcirS8?MR9Cmjgl zD?d{7Vb}4MdxUnJ5%c%R8(m_*o!3r6GbXc}CyJ#!VAo)!6E3HHY3QXZHDaS_a;K)q zh}$<{m$6##0c)H)_7f;L4hx6qCaG903ekAa-{&~NVKF8=FB2?frrnG(lTE_;S{s?) zY`@f+Hd(#Ieue%atp!z`Ho;W|u4KZ-uMOD8pxh*Zz-L=RZ#bB%zhF!=!EiAe1&PZE zqTp1XDp(c{;oMB}645Y$qm8^FeeO^bm1aRtn9{%2K}{q(7y{L6v(!H~BsZiVf>yC? zcAH$-uLU5(FSMq{#?TnsGVLcJZnPEf!}TPweZR;p+ogAT4jNb)->YBV8LwEtKk-H% z^N4&Uw0IK;X0LcPmVAfRruEg`vq#dKz3Gcm-B;K5=~>$=Z24R-x#L~YUXwo2I!R;z zcOfr0WW0Z$Z6jZ58q&I7P}5$h)4d9*a!BvbGQmYn2U(W2=+1s8@8nGQ#e_5j&t@os z?fkrp(LccH3c^E&_-r2E*Az~=@UJ}AG>-#25Zv)7 zy6`|6i?#R5@U58LfFoTJ zOC2o*7tUq3UWt`u_-rt)sw7zmf4#vtU{{U2eNk>BxA`yT{oW;P59Jl}o1TO6WH@G=-Tv{Yz<)VJ zW^Wh%OYQ{buI5O+;@9@baKtIchV*>nYNPqb_H^(3U(B@MqwRMd54?0t_|0dK4DrB? z;(=80GU*Pl^zw>W{tA^v!WM>4JPWp-WH!NRK6| z#NnFicOqUdj1W%^m6_z2yff{*zM2N*f@uaOj%LyRxL1gd&DzTrUXz#5^K22Z@sbkG ze=Mm>jXj8dpNj00OHfo|DyeS`Tj}XO`3QVMfD{Lg| zr$5b)x9f&K-QVGE?S4t-z9@RQy$^{G7xc3}``7b5x}ieoYmy^nQK-~8()+f+s6V+2vrK3LEYDpf6L;b>iP##G zbZ*c&?~?BO*qS7#T@b_DMeIXDTw|L3n9mQ!c;)!%ork;o19iVWA(=^S^Cyn7JuM<+Elx2r@KBlo0q`=)r z=os1DrXJyunuo(VYYPss(UyBaRw#VbEFqsofMxcPa&zzDi+HN&&kSzbhSe*{@^lTY z$kNR%+xD06V*)c?r?ukT=~!ygI_4vpt$tC;n)&P?-%8Fd#EPk`h!t{DIS&f_ou>*= zb1s6p5262DRe=&|W=w+;3F#m7$KW=o0Aj&SraW3GOXAz?nA!qx*r-Jf4-iBzXppKo zt+IdBd}Q^sEr+&aM7L`|IQJjX{a!*opSa_A!h?!BSR%}G;GXxq8m2(G9>DKggWnUw z0>29$R0Rcm{RZL_g6G?GH3ds8_O+xzRa!}Yl>3j=sgYci@!AOOh5PFTligHIJJ|}i z1V3D$wuE2)&8m!Ylk^H~mAn_+lyS8uj!qX)uJ>_&&Z+VW{8@If>uLjn!ZzRVop^8(A9ZxUY+Ys;c*@U^6LCwRYL<#sReaw^P^0w zoAg6tP_;HrjlfMo(i^}0s|IO+Jw&e7WONAmtpTu(*W>{YRAK6ikI#$3L_Kv+wHs?b;LXP-l>+vrL9 zJVt*3MT(*}pFs^J#>pX~RA&WcjXf&En=0M-dj*xF+A}I82hPWXB;YRwUuU^2tj3Yz z@>+-R3Mtm6SalEMrvTFQZAwrDRqto@E3$Pg2>9_FY>%O}D0-qGaPpI(e~oLD#JFxE zCJQsfsjyVOAdW`MjrtaQu-xhxoc->~R2Cuv_`CE0m1jG%OsS(G6L4-VKh9y~aZ#BP zWasS--igLz^xke^UB(0Ld|%UnoA8n<0+JS8@h1ASOSDEG=BlYYDaDPpRv+N=RE%Ja z^`R(wwN(pub2aKZYCL|@Zfh&dtt~`qQS_?8D@zViSq?%L+4Op#p?)kQseZXmyyO#$^%d`Dd3^6ilWyAz-L6;@zCu-YEb7F-lxu&F~<3n&6C&LbL-S@=pxS&)fp1c zY|=oEynT>*bMX3m5zOm|wp&$UY%dJ_nIbQW@($R7mr%jk2O-)&HmJTI?Euc{oQGS_ zVv44ul_iluBYEArpPjQagb7hLUN8m2F}B{erp<9E%jK@2{O~7i$r~z|%if{QD21Lo zbWIZGxfGQx+%nq6rt-$T1R>5(&UOxnYxft|62DGy*Q*p2)0BA;Tu% z4~9+kkA=ggTZuF&Q{DzCE&r2No`gS|%@oy;k>P`k$Wk{*-A6iRzlq9wgKet)`6tNl z(?M?_Xj=NmdUp4E2HW4;nissu8*f{@_ENz-V7{-$q2I<|Qll1m$ZIDRS4rmc7k9J=U9!!DJvUw9D|= z$ZZpP6dILV$izJ?G{wSEqM^T)mpvCfVo;QrDGiq`o+a!)!W5 z$mq^;b%U2ntUE#W7fjrwmurKU1_i&j*l%W<^wPI4I-D$H@+HhNG(0Bi5^m}hBA-xz zbAoi^kK3%EkgaahDpN>hX!W!}3bACW5I-Nf7&Ewl5`$p>sQ@*BVgt+y)l%sKjtm4a zh{1+ta&(?lo4k*?8Vv7Yw9mgZkV-x#?&ugG6G7>2{erb0OQOyGHBQy&Yr{423)8@n z>Mvio(OJNNb61HkS4!XMz5aBsGIo#dtI&60Il2IJ5cJk@u94e78%$s?_T$B2)$b zK2N%!;zW_8Mp#hcLBxD{z%dmWF^AiCh%v_$%&qJQT0U(VA zDY}QZ`qTXb?v?_<*K=2?(v^{AUF}@E%ogXkODAbi55BTK(FrZwn;HJ)dNadLtksBm zss{R3?#%R%)+Yq3Q;P8R<%+dZb)X--fTS>X%{O+-*kAm1E@PL_pg)m8z3K`WJ5Jj>H=w1?MaW69P)rc{uuR{8_x(rBfhJNcnSjB&3G^uIR@}GyPUWEK4ht9O_GOyX z6MbnhM%ks1{?uextxHI)FW3Hc7kz1@FH_i+sVTQFZ8F7SUkV5G#YXu{Kv6m^O1@8@ z{PnA0#hWs$XbhR9({tJ6ReZYVQEY-janf&u#nSbv$Lbo zFCdk)0K}+qE10W-cr=@N+O`ut&lkzrY;H)6D6daVEypK7y(rM&U!@re-oc6T)Tu3| z+Nd{}z_PlS5oZGdb8KuT%PV@OE>&9EyB`x`sIgvgYO?4V(`iDHEsEZz-HoZMMlEGQ zT5z2tx%#o`(^F#~d3itd-K4F|s-2AG-pZ#`6u8%jfCNgG-Z&kZTcQH|<;fy$Y7?{n zTCO@NJ8S5F|1mcgXLvFc)%4!&536!>v967V#5qH&Kx_B7H}pJq%XR1T_PN4Len{-J?;Q=ZsKu@4RKC+W!ZJ)v+S=7FfMva5#u* zF?`~g*kuhfC+d|LnEM*L4^(X|_(A@c1!JWPsA`G9Zn6^S8LJYqZnHO*Rx8g(}%$vTe)bTDzK@fW#2zmS0`w9}_gd^MG3sA6g4oHf&(azy>Y~8rW>F7}}7{ z%UZzBN3eV(2;x0%wKoqM2=UbECGk{*nWRXk=AB49i_@Y{k+@g7_@(`rmt-h@%0-%O zccerR`;C#Xcm@6gj5CE@5Nbnm$YtwmsIAQKw!rz%kVFgt#%IS-y45rhOX40jsR?MB zaVp^kbGWI%xp-kkE<_{CWgIqll^74>{zp-gNfW)PhI=-`2Y06kS>Z&$X6skzX@ zmr@L7iXcLXewbnqMf78d)oQL$=zds#Lw#bFDH}~kRI?L9CM7nf#XXgD}q)W%N|9*EpW- zUA7e|4>EKEAS4bTl}d2c-TX>_Rno80R?;2wInR2R!+9YmPP5+i<2=57fEFqQxmWz- zf0xl;fe`w-(&XdraMl7wLOfhl8hG3F4ecy<-(HjXHfOrPf8m>X-~LE0k0G46aB;fb zeuiCl-B5QVH2TxMz_$AVLK6h8z2dF!X2I^JtazftzuKDCkP;%4r$2#O%4VZ@rfPzr z0wrYDamtLS~x7u%~e6;5>GI<-1((^PckV}LR`KZxBksj(x-%gJJ zx(dUrpeRF1l$IW9&QNIvP$bzT!vU6l)h35>NDup)vZ3`sTg`)TX;3zt>mJA!8D)mr zb@hIbvO$suunY==SK4vHz6I&GauI7zkN9O`%>=l?2Vf81a;uL9^qkJt|FR`j|r9WISpO4)h%zyp9 zz8z#w1dbDLioLU0Lgpt`2I`jx1e;N?7QImibmops#Q%cXJkSdNl!u+8Yk*@`ZM0~% z;9B~T;QThL{K)*u`JO?gk|%N1Trt0%6sB}t(1ARED>CnGeV)kMe+gw&WdL$BF}$e> zZ(?>sN18YYhygEOZy$a`t?e%HXh2mh*L>&MSkKEW)0}X7Y{QFeUd|RM6_G@{KJc!u zs_AMOL#om#j3G9tg6R*TA1kJRCYI=_>WUXtWkXo8EwOhv{OcUD>UXeT(3|WRv?Au! zjbsQfjM7!cVW=zrtpHypW8kY!kwTllz7~`u*j&jkJJkHpVeWFwZ$XRv(+n@_rXPOn zXn}nEK*=Uia+*t}9H~@Fc6jKxPkqz+^L1^n;57^#j`BC#p&S|w+4!%_egG#CU=3rMT=t2^ocS43)3=^0}jaShLhGIBd+D(7b zSQ##dDI6{!QSTDjof?}5@roC{9qLxue&N>NC$nL#<6GKu6=I3Qn%i~5pXA5%DG;bN zv0s4ob<4r?4?{fn!>`H4Ao629H(nMbSDO7W7Y9;Hf1)}y(CFOQ`f)VrjB$c^7snd~ zQn244Zq!3L2k?2qt5BVll#dG3i$hU2zQ}{u&O-$A*McHX{}E|jOmQI}u`>}D9Nd-Z z84V!M+)U$I;cwO0fM2K~c?#AIDBdgvn3bU&;MBmcv6cR9zXqI}^1#XG&lxxO)0H{! z7!;_S01AU=n!%%Iv}xu@P8D~ReqG?j09LM^Y|o=@mLC`qMoSj7iC3^>K*6MbUPvJcGcq1>V)U z;Pu0w_WOj}r7EE(bTPpKE^YvD7Xgict&&2u;M?ayhy|jqiH@;{Uk)vao#{P~E@g{n~$Y z>2BNqBK-&MYmsO0Un#UtG``>lx&-)#gAgcR`;DqZxT2}0oF$hmkbqPqoljx1LRBPK zG$;%;3RQY;y2w5EPXwIwmvb2+j~WH>9Oj)m8@j^71#b`m)j>^`Bjk z>jUcR9}M+y9wZlCfxYu%#C| zC*L0%F*nyA%bx=AfBDe+`(s+CV`R^m6oBddiofO;^hoQG{`9B((_aSo8^3q-g8cb9 ziBal;#rAGnMa0YR=0*Dq+RbwPv4T;O>7b<%eb9?`oo9rruy3HKm7oG zJuJhQdGwp{A@%K*xpn{(U;}^Cw;Ai1!MJ}h0PITNe#rLs3=B7$Feii0N0*;E7c|>~9%r@50(Ktzh zTMGl3$3hcU`L4c3bIzRBdIF1Eu6l&+cT%Mn+a;L!?p6_e$F+71;zL9L%$E#ilhj%h z!^k&!vnr}d4@>+n&UY%;si@w2Xl<`ndR6@Qb=KBnTzYTk>He+1;pr3Z=~^yk1=NLR z^=OuP338PMkp40=?*O-6zxx5@zx8wY{GiaSHQlTKvizQ<_g_8?y*DX=3DDk$-tmCG zqMQ;77anB~mIh?aGJ?xC&pq{zl!Y_8~Jb zYpp^MpIjqcjasJ*!?q=Q8&34l;|B~BL7Z4Mi(rEU-7CG;7crQ5AbN?RCwl3p*|teK z8DiMz4BgOsAMKbVjyls?DUEaKy@RLww=Sja2G{n9dU}hN#%@T@!e;p2{V5n-o`cbT z_Ic+sI4AV1)2gNtMlx0KHfF=Ixx8!8=xX!!6x0Av>7v&`%8n|rwWH2C=YJoF&Dst$ELQj6;NsGAC1SZ(1jYB zWvFIJ;kR28YA->MO^n2lx^(Xsv)onVxGOccKX*;+U7F#pS63PBUgOgHy$pA~Zcj&T z(bF#DuHL!+$@hTh_i|XvaMF*z%v=tLKTZ?dEOePn7WpcQx*wK>Ww9OekP%G(JFuSU z(;qQkRfi>fpCx3$d1(&B23RH(z2u&wR<7*!znRH>FRm zG~BP_())kZy$g60)%ic3O|p<+)`>ziB52U4iS-f`G(pe+0cUZeL8u0_ilP-NwJ9Vd z+5mw~fORv17OS;NBC2 z_0o%u{3lxv&}WPPa3_?bqIvN}oO!c_m6!~u3rHR>FTlkF4m?C-M+W?6XD0@{Z59z= zNu5*&1HQLH=;D1`91Qrjdb)v6!wh)l-_Y4Kn*k4(9@t9`1v(y055c1kiXMCdTG|j^ z4vrpn?C3-f*Uvl42hA_ggR${*tLLEb zbCv?LFE0m&pB39X;pdVW2g1)2^@5)VaB<-05%qKtpGMP-TOvcdmL~(P8Cgtu()@3M zvxOJnY(f|EO~(vCS7HuBS4=SjVxT3>rS|XSV=*S}fM{lxgc=tQhO8!FdI#c?qmCK42BSgQ zMPG%zzBX-v{NN&4Z9UHwdubk9puO}qSvDWNVnqX;9n{_ zvtY#D`SDf3{eD~=_D;JzP20n#VSDGw2Z4j1vUd)J9*2JMGwG3mt!j0vD|)=nS|Q0H z@I7rr9Mz8e<@J>IFF2Kn@0 z>2dY{bwQ6OD0u*dFoix2{sYDZ_epm}0|-6BJ`?~WGsAS}L^6Xv778O`_U@cj=9qUt z46u8-tfGj#ql=~9VK(^2%j|60a$XKF8=L?Y!Z1TM8@%p=2>rtH;cW23vX1oYoDB|< zRy-Hu;+PFyqT0^kQ|D}O!D66oU6je*fuA?C&za8yD-zo>S2M%ntr40MEGL=ol}6E2WM(*6RXGF~ha$N^J-v`m!;0kY zzo7Riwqa_`;5zhQ+!6=q|7oPJNdIw%PLPtqDu6+EED;j{&%7iEc$OD@1~T4boHrx5`$Ec1(0m4k6{AYh<+dI6t?5wP$9AmFHI1a#>C*J}JBFYGlWq$j@e zUp>R;2WNp^bC{U;h3;JcUF{x#moD>O9HeG$yZgs>^O|qColTf4C6lT(Ne`r*a~zZD zxX;BU=+1tvC(jNBGkT8ZbHhFFj_!C3eGM#9cZjE&TCEX!zthp>iFZ8Tq^~!KR^BXQ5SRIEm9OJ~X!$`p?3i$v$#YspLc;0+(aT^c)qOyS@ zig+D7WC3$IUs$q=7c%g@6>9(-Ky?rwaC2QZZ)5+Vgdz)CasPP zw|a10JF)Ao#p;!#LmlcrU{|D-*jG}bqZ@WmLjWaK#C?v=8KGM|i-0m+E$*1xzH{=qlEcpC$E)T!6v1nmUv2=_T9FkTW7{3S61#izw(tPbMEd~JQji^&n#?l9B{2P9 z>;p)fa30BPAGPOF@`Zy7&>-rR_mu(5|^^-5G#iPfk)#+<0B-<5{fp+=52yJ)p(o8TdjH)0X2%dvC^xh(qHolEB%$T z(u*RMO8u%*sh^b&QuRxvWm3Oe)&CxO!zji9rdun|llqtQ3G06WH({WUi`0*FzZTG? zMV1)L;^+xxYgLrF<({>@qd}yBK z02vt_qClpFlOI}P?Nf>gH@266BuG$)1NXTKZhzZ3mK%;amVs}h2)NSxAENRwEo(LZ zVq1YvQD8>8=4VHl@3(hB?&>n6QABFRH!4l=#>~E~!av)7Kh$5pVQ5uza=AOyg06s< z^2)B$8&~&30dHW7p53N5>_i&)y-2fHezAiVAwMd7NaO6FXkWj2N!HrsNc^fjM!lt#FQUD?0S!TUFh1ANy!Fj~8QH&Fdw`#Sco#owvR?o5Ele_l z1NJ$4$drRf15pKFV{m7N0zRNF$J)@Ir!Dvk1)IOEzg8n6NWoosizM+Q%p^V==7D8b z5Xj+=2Cr9eHe zte@SLoHCKE6xcasB3mi2FDM<+p>N#}3!)B{9K%Wu6+s_=CkXPlosV5p(PEWniyu0g zI#l90yh{9Sh1!B=shIt31GVZ2>TZ-)Q_W6Nr`gK7RyNF2l8I}T!k4+BaSAN3-i|MZ z%dbjm<@OuYX;(N@k(#;vHmyedHAV%LeZEao*p*!%raZWuULiZ)a6xe#Av(V+S zC7j?>8pjm6DkjYmx;clcEMD2Gcxb)2hRmnbPmWN{R&MrD7KT>)0{bmmP;RIN1@&SY zq3}%kr3T`6*jkI9kjDk_@esBciEHrNXXxF0d21`ZJ{}b@3{SjyYqfcKxB=f3mi5P= z{jTg6{DAgVC5@`~n`r-3(x_^`f%Z>jJnWzL+qLS~L`uDl(ZqSyj)RJ~6dEb19L-Xk zbe|XxdH*14JfZw%X#+#-i+5GEj4A8EyZEY>v85R5me6hn1V#@vqOibnpXxXVxl0>n zd8hD#DC4CYyKTp3bTW84wC85w?6pn}5Is7n>o`VGgAebWPPhx&j}c;ED` zxm{lHVP8^Dbl0@QW!&-Ff^QYO7L`?oHPo{Vj%CVLY{I|Z7LSG4s`w|qh#~HKvi(Dq zW}5WKynl}+)W&Ny7f8cS>wYn7Hk{V|W}p>M9M=86`Gm6MMci11^7uou?jnSODxTZehS891{gfF5kbeR{iyrrMA?ZUj z%kTSIiHIo5Mk1I)AHl*{HOZpFq0&Nvs_7@qay?4iidn8d8WFdh%<^{*WR~}4pAXx- zE&58(_>*S&y<<9=<@X{YqH7I7vpo4ga3hTPXTW_w_RL~B;cvTMtC4V6+b(^X2>=w= zYksC8rF5nuJ`cpVSYB3u>sl(W)${gi^FAjONO(T)Biwic&3g7epK%2wcMHxR{-)jA z54#%M6U)vW2JPO1wUlMzwz3Cn%qdHkd+PO^vJ|24uR+oFK;Bqm(igs7M31fE-j}be?;Eu8Rug}&Zlf2 z$tl)(1-Xr->HfDfhWgiJ;J)k>48#pn`{3U@%8$djMfjxhEqKpz;BiE?{#8jU`3ody z{W9O%Ma*>cmuYj)=eR}faZ^6pB2JQX=#qeYn^9pnUCMY>s2Zofz*q#x{pl+$;lVG- z*!P+W+qP*fz2Zpej1?A?LBX)YG!ZJ%W~k%XaV(C6D`!1ex0a`9w}N*i3NbjU$|!<0 zU~itqX)=_Gu8rX!Oi%@#BT@TA;XJt?&-h1&Nj^}bBh!`px)xavyq*^l8-RkDCt}tL zU&N0R#xhEks9G&b+et_4s>~OW-#PRg*03V}N5sop=X1PI;_2di4s6C37Xcz)jJsJ5 z`{W6#ZXN2hg!equDMMZ=09Gfap3QB<0Qn}o7uYA+Hzn$3MK8YKX68$E;|?4nT(2*) zH#B>(OL?DcX!aSsu$`bG$GdTd59grx+k0vLXF&tQ=KE46`tS`(23lFow3k^8?RdDG zSZubC3imhnnutX7O(YJO$Lk0f{mV=>fGa3R?bhJIU(W$17@#wz`iwC+pyS(FDXSCH zbC5bJ4fi5kR|D&&Hwm+~<_Hw|o+b924+T()Zr-D|J_c9!Ozm z_~4t^6)RE9f~(KTvVC+5!@MI_Lu)|VoYjI^b1cEc>D zm)%iWqO`XxnEMLD9Yr6Rut7)y@&NsmV@J?6Ijq=BkqS+>Rj>P6sTcg_2%rGpjkOTT zzGj&BMe1kt9TADCI)sINXq%$J5EdoC4%TKHWRh6Iu2>a^n938)d6b}sf??2jev4cusY2~K-UuvP*m z@RJU#6c!j&t-sK!uY-u_|6xcnUJ-cQ-+)Kv3wHn$`=eqzh?5TZ7)LISKA#H>UM(=< zrdVz;3?gP4>&3NMQ$KUK2tAxj5@ul?DK!)eBiR;m5`3v=x4^ZOtogqtUmCX~CqZSO ztMtGgvT#lPtbc{0X#CB|GrJ?(0V`*w!X>x@1?QsFOb|QR#NUE?mY^Q3ZfxRJRjn{> z?_{muXw>wPRy{&~S+Q~ew+dAtsR1Zxv67T|A7~5S=0ngH_(TcQ)rm)+gLSs#^2xf9 zf@K3AL8LpICOj1YLJtKq=$W^E_ zbQN`jF|ch7>wzCv^-L-g?v=`*w#~dqWun$tBXYQg@o(WP^f`!yV2d0PB>>i9Q;|N| zTWdOY3&Rkaj?YccPIk}irY`4JfCle$aAODhll3rQiJK{~{tC$=7);E>wTOJh2M}K5 zE5p6yahkz2NkEwyX8=Q zX-nN%SD;`GpBs7)kYT=Ns9z9z+ST=hd=DYtV?KmvT**P(*pQF%2>ds=ksd-yFo^-e zEeS)08}~vN_yL7tj}$>iPpo`A_>sfz=9+3ONKasJox-Jvu~(=}@B!+P0UwKX-@>^{ zQfIJe76)#Fl!|Py63IP#)e=0$>Py=4)g&Ltec&_+&+r44nU9TRJp>G`S(RC+2%SOk zGIlzK_SsJ2#UWpeYDYff3r<1JKb_AQO>iEKUMCR``NGzOr)Cnqmw`r?<`Ycx59qOW zHVTm7Y7tWcHk7>B{J``C)`HD=%%tOOtOxY%g@FbM%J{G_@KIslb013ScSdXL$pgg6aoVTI<1*Uczan1@~@KIqFZ{R)ezR!@KCRLxjsR~C37Y4rYX1}X1b64*D&5m&!b?-hL zecIZiFz}_f;fG6n**m;}cTqI;XjGWJSzi{Iul~IIzV^9r25YmID;Eu|ZeMn*H?Ud1 zb<Gv&%Awjz@948zIrgwoxh-vWD?PLj|BUnZx1Ovm@I%w!E={Yx z&&|6PyYMSnn|C{Z0Tn`D-0a&2AA0?5$7wYo4!Cg*Y{a%%zg(So(s(_9_K|zira47! zg@NtFCDB(H_`wG$RN@VM?+qYhR%Gz@5N4Q76MVod(XN*MjI^AU7B4E5AjW1TjZNA} z(+a{WL8N#kjZG$Hu%;pt!jM~ZBEwF5QwGx>VGNNFH4H(*LCRkvSA|R2pM)--pjCUo zC%8Lat4>gN=~{IQ7#`1hBkSr{)E429()aE11@^EuBG2dg){E1t$sF78lOsn$-@;ef zP^M!c#eiQ!vYf;6*7I7m1*<_+z$`XzsU%(AY&nQm24mlcKHx-WC5qG+XV$agaQohU zUs;VRGC?C&;xRM^r8)rmajEsKs7Py(le3sOb2BpMlQE%y7;I&?0zm?CTuRlw{{*e3 z9n^q12cUf$XWHV&>cpOd@TzYqRKxyst>#h|08t8v{{6?7-h$_SN)hz2|K!qZ@NaLX zu9NXnM0Qw1yK&z=EMvSWg-?~|oS0`RHD1x5walBxjeP6+# z@xl(n2+7D`M8Hs9G8C0-fU_M4E~QndY6V9xNODKP5tmMgo6xx+3@GM`deSXyd=M%= zBWj^UP!p|>SBEN10!)S{)na`pJcY)v4xmP>W+WFTccBryLKAFbe{QWuQa{p5wj9UQ zC3w9AJQ=VEj2ODmt)x@K{qAc~Fv|QxV5|g;$H#)P0=#9B8)+bfv*rotNm}(jg>rz5 z)87^Ht9SA)usMX&)Y;t4;pT+eY*tn%c|5-pE87Mcc~QpImiAqc2=XdX+ID1RqKryx z39ccWN!ac)ra@-ypLGH_>lePjx2#q;6kXCof9C?R;a>J{8#htFlI1eYwo5tz>$A>c za{$W`IqH?G;J}P}Bt$X=2#TLD;v^S!#BH=guf*r)?BdfNx`Cwko#lh|niE^v3-C z7TUr-V_@;W=tLM`oBB2}D7pTZi^KSZNRI|=q13H3M;8Dp0AkUC6VTAR6x`I+wrUM) zi$fIL*b@c8{UA|l3vRAvcM#kpouaTD4L7Q!G=+|+2daWYkkbACL#hZ%X(gR44Rh=F z5EGSXGaK;>(3wh#jqN1G{TF0%;4}~ z+e-Yo0L;P|4@L?sPZzY-Hj#qr6VfsD!VML)^$F(9=# z{uXe&&zQQ+>)-Fv<~{-q13QiD)>`#1Nn6TjEA`m+N$6uF2bDa;*Ni8>S)LYXn_86u z*x#I>&8ZiDsa6WuC_>bLMPA@jF_qy4P-4SkRNBtUhPK2=-UsC~b=MwUw3(ecHUZU| z3D_+X&7De)(qcYDBdbfX@pmj@&_rA0|?d3%=M*pfS}dFW(yorL<%%Z3l(Cz1qCL z$`>{~)(gm9fe${)J9Jm8OebLgpjP@x)?quvkw)BYSlBdO?^v!C^Cco~Fpg%gwkBts zPr@1j;=(@7Q}Yz!fU`=Pc{VmWAi|RHA&n|ZWVmhP;7u-3HW7*jwR#)cQbnR;F40e0 zv|>J7faYD6xXGuuK})5SIUNo5E+qSbRZr*-djZhwR)z>@3sx!yVx*H+JxKjXlpoLI zU$5~e&cetI8!&#N2gap+GWqnc@3>Ikw*wQkV>nS8lne>7R29j7Ute~0_UQFX){IDp z)TX$G*!IwR_qTS}{9{n999?g?$7AEDFE{|5UutDLADb%JuF$RE&TS+b#=-oFHyt!K zUXW@;TT}k1fif3io5lYKRb8@MF3f)OjSY%wJpX)=R0H?A0>akPB;pM7y9-Dy&>I{> zp%&>BEpVEr6^A1V6}rMgdnZJ*`PSP4O%$Q=bS35U!obFvXUawwfbzdrVQ0{Y?xJlp z9cMoC`4Ll}PjRJlb}Qp!5H)yYs8&ulYuJ$poA*&{FNI13r3QOJEG&|I_s~YrB9w~I zo;b^085gjh?Fe7nIwT{qP8Q8&PG?H$El-r@STb%xvV-H^FyDsR|>Vb0S-x(gUqr4f^&Y*5eUS$N)2RbtiSMoF9ZCk;J!Z+Yy7Ip$Sz- zbv;7(BH{HT*Y*guJ-d~`)mrsDHLeW&)v8yiaV0HaTyLW^4y@3ZJ@usgo#_p{1Fx+w zu#FyDePb(}wz|>lO4tDL-oPr3D7Nr&6%SrksL`l_m9Y+w?r%OlVwk;U*O7o49m09t zpByo$pAQjgC&qk%o17Xy7i~M0y_g{pDfDwDtpnNi>{dp9YIpUa|9f^TPb$}{{|Gj~ z55{F`)uZq)elY3?#4#Gu)9e2sMXQx{S7Qw33f4pmj@)_A2n8q=Y5Qg9;hiTTjF!4I z`kr_?m-EQ|APqSk-F(oX)~r_34NPHVR$)zH4$Ddg)#`yphIn_fx6N2HPsbV z!P2J=pbGY#6{S9->e|NMVlKdG(_z6F+CU8ujl^=SFLXj6HlKu%w+T5cIw0>xY#{0i zd7*!!4RhP;R%aWZJV0lA9MR5ZLh$~4+WGUTow`3UsJgFc#yZ3gw8N?EVU3G7@CF>Z zdSG=7+Sv~~*t~m{h0cm64uH;Au?xpJb8zzQ5u=@GI~C05q@BU1bVAsZp}*3sgIF&i^}xASAy;f1;uY($8A4Uo*}9liiAFIJPxir6 zw+&cjg_LH6*oQco%gk(&Q3@jBpn>_DFGu)XkXwTto(yxuTrzkp_*ru&_#cOjW-f4eX6 zeOQ+U+C%H9wRVj`q{(9+TOoas_%#FHQFF?9*^_1RvU>?D4j^=gSHrr}wI>bgl9;LH zb{aE5JrxI|rt5~af)nV2P_w@K`Zz@+K0~#Hb*|P}wMWutKh$vuat!D;Qg-arP<_CxX27bPyim*(6(_P~Gg_ zovDs401y$W?nZeXMRng}JFucUL0M!(@-ZSh5uQbw&586O?d1M!#CB34DJXu)9Gvln ze~YdUm^e@$%&W2gIy4oF$8Ww#D6qM%eiowbJ%5+{?`ik*Vygm13c#l;5YdkU5Wp)K zXrKaX1cx4nq2-GLNQ&lu$c+eQvG4+SxA<4wba*FkE##fqH|K!wXA9^s?zE< z@dnuH9I7kj+t;X1097u!F5uyL0> zTq4I~`FF%ibU&f+*YEGDT08z&;fFm1l4hPNp~V?xC&mI4FanPsTM`E{l?iJi@=oHH zZzf4a<*Z=?7fD-5B{ z@a_A*M;yZ!2yNb@w`0HIv<^?d)!ShVOKgm)bkD>%M83fQPGCaX5Eye>A!vLizOqMBT|112tcUq` zqbpN@2tQl=Sc-)kbJRtlfsFsWZT~tL(;W40dKXU`&z)<7<0qZ`?EJg`@l1uP0 zpdfJe2K~hfE?4U2<2_hZq5~k=7~e&EVu@U>fKy<#7$Y!YrTL@}9brt3bRYu1QJuMj zND=+{bPnp6y?YzU3;J^luh5@z1qB(H}0ir$s8$u`z+6dJ+nTYZZ#{_cB~5fRzHTwPH5Z?2Ua} zBkz|gD+}w5R7nN%3o@^x{X_ZcjM9AEs&tQBpO#grg88MH*E3=;9ff6hgtm;A6>Vj3 z6e@`DRARV@g@AYvntfiO2(ZP=n{4r+lx@F1mdDSEP?v1qm3k(qJXlMAc6#m zsT={llrnOu6%WgJEr3?RH#`S;8xA#OS1Tk>Wp-a~%zmlCJG)sHUlyE&1ovKlb3ZIA zG9c66jF8D4$OnwOG_9r=(_M0%r1nR6h_t$+s#<=j)qErOmti0ESgqzW^#fa}hif&P z=|>8BR$Yhn7GvZObOn2n`^D?umf&-()cvb}3>)8;eTyw+V==JkBL@<{ZoY;T`_04-iJqN8Px+FTi7*3WH_xY)SJPfLjyTQWr-5}oM8G&qb$&Afahyap3s|2= zh!t%W27VlY=v4&V0bvqzMXCxh0SQ#|#b+gmUO;K-Kq}aSZh9g=i&w*wTg~*8wV65c7$MxeV!*Z#s@bcy;evc@kkil)Nvz)d z^=P6?VG8Gn@Ld=-iu{p|_o2}cD0UImQ5HGXS%kay>>>(fEE4A|@(N{LfMU5;i8JB< zkBcIJgnr8+hG+7b)}Y2+dcZ;b{S-B*o7l~8tsMr{heGzC&b1207}V2LF&WgsRFczAnL3dPoaAtHZcAW&LYQ2ErbzM9dm9rNdSoE{;l+CoYUbaa)D$~(wLL~PSVdr9kWWg zlY>r;GWsCXrV``a78zK7@DdP`u)-pjbh$!Vgs{b^-Q4>uXYYD&NDs*$FK$QGMn`!| zZ9+IG8VT+pv|cOfG&Btjdj0jgpdk=OU*bkxIEY58DU`eYuF9KHXTs2`=J93M=*HzR zE?Z!7V&9{GJ50_u^mh2?Jr5UiMZVe!N3RvH#zBJ;+JlHoG>S0ovq@w~YBZw|o%bMh z{9#wh@gr74e?;Y4-DL??ErUu~>q`>ya+sioYaK$6jmujc*yyIakc#0CE}t%4g=k95)X+wh)el33?1 zK{3doMKI_XXYJacE?Y>AqzJ9rG^VmH{5isw4q8BUdb^f zp$m{w2iq;n+}QHibT0^D9Fn^?)v}Q4TZ*G^XRij%U<`{wgcP$os5%rHNIifL6|$Tk z{`Ymhk%3lK{YK=bqIVi17v z8CSJ>;a%|J@NKVuhudqU^tNO`0w8DuRm?$7!O$mRVt9h#@gnPbASyQW0Dk^_P@Y8y zr5C9>wVDD-l!g{0Ou%+?Ycpcrdg=AQkwE?DH&q~MXe`|+Ga&Qz)6gcw0XUNe2^ckt zY>wIQ(#(4DBNUxdrHI8^%m>UBa%nirlds=u!bPFwbII)*6tX?$2hXtRudnF!!5j{g~mjO8S-5xO4Xl7Q(cn3)*ir^VWI z|AW7}f~iEDLn4Ka5KMyzQi|#jYT;8 zkT}5wEuaLD3pF{&C0?7`t|&y_*7(F+-=8R2Wzs+Y7h2^j1T#WR`WrS>wa}OUH$g02 z4)8$5nR~&m;&Q+b?B+*O*Op7HIY^>y@9IXMW01cJ8+S`-VOCNdIRyWqiE_(FW#jG& ziM4E@C@ss>Yrda(vQ~EyG9+b`9j6;JF(qmTILOWF{}NN8Hcp8gbRlt=7G2zF9dyu% zE^6v$kR)z#2}xiq4vHkAJZoMCOC1tPRLBko>l3JmFiA)pX$|E8h&5iux$3$9#W;6k zi^L6wRwg{@B0DUHxS?aMCOovrm#?NWT(jYFjhX^bi2GYdRNkP^UNNP6XG9_DC$^+k z0>&G7KjMP~r#NWD$u8GQu;q#kXrSr;EG~g?ERw{MmL5j5L28^?$LNw+=8wNQU7IsU zNOoX-oD3|f`OqlQsa`N8qyzI1NBJHGRysVV9OY0sEMxSFQ83y9I{U%y-(eP|w8Ksm z@y@Q_D-W7oNJm^ui`zle@}Wi4FG{R;4ExXDJlH}&BQjNxb%%uFxl!eCrzb$b7D2#r z%hFq_9APquT}r;Y87Bz@u;a8vX(S2)oE?%lYO6z^Nz``C4y9;wtr7idKRk_%jsIVa zXuW8cXug#WVGzFw4 zhaA9jU`*T)!NhO>mzb!7J^?05Y)t&NGbS3J?0^X;)l0arMfG2ON;VRR(aWe0~TR?%*Od2EIbJv(;Q!(h=`Jr|cN5?)NVL>J9jjtj(jkZF^r>^xX_F#e%Y;2D$B0ehLm1C zHC#Uv)uC$$5LOaPagLvzw#Ooc#ueZs>W)@j!_X9+PnpP*uDbKk*gn+vW>sR zK8LdBihZj2KpGy!(v=X;QXE4k1cu#NNE6dBr6^bV*t;7O6duz`ChBJ2kRqr^j}9u{~z#!2C`^Xe@lvHT*fEq@n_B;0}OO>#-c6~nJbM;4dPVgVFvmV#I@ zY|PI><5=KZt4hh*(wBs%F+YQESXz84vRL?tDkbYmYL~BCoxq}_EEZx>7|Inq$?tfeYPmXmXwV3ZqYw*S|BNFncAFDAn}j;kuDsQh^QL zeIcJ~9XBh;CaF!_BvlxA)0@4qkS_X$9&vHY&`4Z$Jr%-U8a_dh>W5%)_yUCykW-W+}+*lO!F+zp0D&UuTKntP2hM0l)+Q2ISpsKKuS}gB? zRI-UcM((EU;m7*Ft!QB;4DHVg>kY29hJ^j3{QL& zV9Z-n7S9ud6bvXYAfZJm3`nC^w5!z$C9<<}DVu-H+REi@x$n57&FWaj-;$u+m5&J* zyTX2Hb-kpuS^Tv#8C(dDi!NxeWX#FM;2q z!06QZL(_xqCkjzH2xk{d2XNkiMJa)yNkMn5_3}xn%G#O}Kx!PT4}qZ=vuYL7+?bz^ zQX*e?4W?azkCEdzm7rfPwL>l$p7{bZq9z_ZLty^r`edNY^Q2tT9>xVCOi<+Cerc21>H@mr;a&RU)O}&yl}b_yuCM zLVy9?Ty9MYradTC6c^QODw~8NMO+x4aipn8W<(S&qjQvq;_x?Bn=9^C+6Pih)|k(8 zybhg8&Io^byz|vxL~_AtiD6Mp##QwHp3BM=NrW!8i@=+iWNvl7+D~yJa?cLF8jB)z zQp6f&o9rz*3?UOBOxK}U+_H{!g2{`AM z2dru|v=u*M3MhN>CLwc{i3z_f1e9fR;RhBCs>L(FmUGQrr?Rz<66$C0eN4a(R&p-S zvnA)1He6)ad`M26Ec-YHA7be_Tqw1c@rv&7F;Vt7=v0Ej>_<+aYQ<&08WEimznWxT zdM3XXoWZk5DGle53a{b`9yNE1>{P%RIGJgl@{J|%V790oU&rEmko zL>>yr9p$0t5_~N35F$!8RR#+*3a3DPs^Un~Ls+ck|3V2w zb`Jva`C26q={cjk?B{sx5Qvml-JGu;5NQW7iZO}^#GPldazzZGA$AcFh-;j$evBy) zACn^0)-Hk$qO43l;j$444&0(zCF?;VrJGxZh7WH5?}^;ANX%l&&^L~Uq0hP!h6g8e zLtA&?zYB4QznX+rK`PrhfQ>2o`So6J06S zS8pm!g`JgB)`QkuLud&-Fo88qdx>67z2rFOXXCBO)yR__;)Cr;FQ}pRF?<59}E34SDZQd9UK}h<2G`S|zMBO3sPd zHICw;)ixi7aZN_gbrzW|MLJH*(ws#Gu!!M)D9)mW+`b2-h9`z8YT$uY1UM!&RHKkh z4d+<}!_d`gjw%@ypR1_C8K2ujmEx2;9G?q~ zHt}`Nw||L$IljEuZ|@wo~%j>z8}@1x>#i-;PL&VFZ+ z*zvg&oJC%WIj%#TMSg=K=85wtP0V*s#IA;O-|o0QqvL*=+8qSe-<+t`u9p$TL|69b3@^jl+&IkKCUFWk4l}ngWggrl$P|v5=c`%^S!T4W zs`X};8698MDrH6|RJCH7_iL1qs$>$#s^DK%RpD(vyhX^JzpdMhetO=@8GSUrWXq`= zaDspJYw#Al3y!Z6%SI6u(}!qvLlXv%EmL)HJ%TMb%2u^rUG|{ru(u2%*~@d%%8bE7%K}Yr zn8(+MX7;za%g!T0r{l1;p^1aXVzEoYrw9Oi5FINuKdrXD>!#IQj2TVnMEql}RZn3C zs;R?de92K0?U~yFFiOhY7y#3L$_iDGs8|A3bVQnY_X!}OH=(PYJA7`^gDIyWA`$yy zZb;SUrjsyYoEIVK2LDUI4E+ZlG7?#GOwfbZVxNvN-~^$vYMx4?)ukMTMg2>vTFx#_ zu4?%Oe2DUGF_xj*E|KFX{X4Pl8%ZT)juF$Ay=G5nvu7ZLvuu={5P^Ei7eV>;(Mb_tV%dAkKy!>~pk zo?rr3YxDpon8RQPaDv-&F~$saXRu0Zjze`@&5vid#I1YaqG^cTy_U7F{9fPpAx|>; zWQNA$iHwwhzHvK#R(?a_RYZ&y<2z_`pjK|6hbOV265n~_f>bp*baIw2`Dk@;6A!&;7tE)8Kb9lKZ1nj{K2MG{ zuDuRve?F`%5|915$`$38(0a+};>1asEu5xNy|iKx4Rn{a*d4{`LLWGHx6b9%-8h2aW6Gr(!Vy4eo}cpGv{RQUVli%;Jd- zpo$bwaCMZh5ab$!!=lUz{=oLvn@N-y&BdxE1mftWJc_mKXqf#v5?BYesD&6I?VSdNYc9)&ekj4dk;{raBOvYJOgz@+%af4>a;r->hz-N2uG;qfj>W+~}F) zP@mz>oyhzO+!@+zOjcmgNpce|U_N*Z03IL3;8FT&`stl*#Vo>V zzV~YaWLr+=Rj8163KSH1R6CZ&3_!BDbu4bu`Mh7WV)yTCJlu9>0ygsU0;Wz9=zldx&0qY~> zXL4r}_+XNrjRRq(VV|kBAH3fl(o(UcLtclY$(sD;U;iMA3G7&c30B5w-N9$T&Sot< z!J<5F%um816=t7T4CKtJ42s`V7vf|r33uzfoQ-hzDVVEDKo46as0=0Ul(L*>TzrD6 zIJarF^$8p{(Vt+LEARy4t!k5djFe^L02^qiHnWOF!jJo}4c!i%Xx^oPAo3#GvD0{- z$Pw`G2C}CBTcBSsGK~OrD%DZi+_zaTVDRB8H%0c1qEo|{>C*!+Wl<(cj=;lBs@wpy zbh8gN2&&A0vDT}6hGPd`-|fU0B>}%kV)cf;o2S_s&TV8HbfX{4%)`5gA#PUxQi?K^3u`P%I=ybaqEQOm=(Py>%mO45UgNvsZdj9}mT zqVQ-SaE$|j9r)ozg6-c8%A5kO2mYWkz?a~M(iDvJb+u?CuYtlHWb_=?nE4tl(wcfD z;>X5PJynj8cJ@vDU;|Fm2o^!sZYmw92aEG@Lgp;wizw#tT{BMAgYdz+)?n>t?bhA^ zZI;-ImgxrTZ&eXQI0%inHP7M^F=#V`ZRVq76CxnjG_5eFdC;?SqGUx3e*gTy{hJwd z_HP4h!=LD1;Y8KHnRfq1+x-LLRR1nP|9~O*rLROcfthO=vg;h4Wl6HYZ`nSks@)i7CLxe#b~Fp&vEg(=WwX>l|y075@QZ zG4yhtS1~{Y*i?nMOT{!UJ>?VpxaV0d#z%=e{Z-q0+^N$y2L zP}EVroT$vvgJ{f8TXg7j;Rb*Q&jC)M%WIgXNyDoP;@fi&i`2B<>?>syD&*g2e3S!x zaN87A3w)q%+BN~f2eBad0D@>itb`urd-NzVlR;?3NN*9myGDQI!UunU+=RU++`_h9>-3FS zv|`OksJRDgb`h4}5*B>$%Fw&N`WB(whzt0@N)@A3U&)seJ%I_x`?`Nef^H1%iBReU z9mh#A<-zGJ5e~V~_ccjwm(7f~U=xV9;BKDmcQBpNsy74Y%kY83Tdd#!_**X0?h;#u zvUgc>zv|RsN&Tv&Tf3yHPh=wB(3+@ce;{Y2`rACy#z2hz#Rva*<-$aLA}DBoWtL>i z(v9IR4ttiKyz4IwX$F)^)%d=zuVkq z@i6!+OED{~G$e)@kNsJ1XbTvAg~M`B;VU4eS0)fqg=Z)fjT90GBmpPWKo|@t_XXz= z9QrQNZtki0$XvKki44eDAA~y!7PI0aIXgA)omm&JPE0z5{Ub`~9ws`d#Fy|2^sxW@ z<2`Y}KL;L+fq%VrVN1Dqu_{YBk(~KxmLt3J1F0W_xVQ zY>({}`ef;`onoaww$mpFjZ!Mp2VO;_a5&68y_6A^!Ai6EER{%yc5r{Dada%AI1yi% z@4Tc2Cr8SnOZZAsGhIs?sFZqu>3md(=JA0ml7gO$Gr7iabt-83Bt38`Dz{EA#oShg z5F}a*5}g1NwWbbcpQA~eR-HvnZ*nNfTKwZZzvCZ=)%ung38jM7%>{`-?~_qFy#sz9 zQ23oh9X7#X|Dvm?ra};9(J<#Dspf9(bOy_JWaj^-Tg?1af`gecU9*|_)a)=b-#RSJ z%rU!yZiN}!@Z2#(G4m4k62wlTW^a{+DuZHp(xplod`&5;{bFI}e~pR7%)(s{zvEzL z44${N zwlmOx$iNfOhWXi2)vpYj+#wLUB=_zlcX$6YNbXmp!iNoVzxsgWo&piX#l^FaiY9mS zO&2iG9mH(eV3GbC1(~KwZZ)DCkT83v~V(X8W}Jl=(^w7YAbw1f-YfA*`Ml6jBbqm(^1gjDO&A~tikaujHg{Z zzR&S_pF#2slBw(2*nB5$96Lt?j@#YQW5#NA~j*YAzw z`aWZri%z69fTIwz`pKK<_STI>$IEqgD=%8@%UCao)FKt{Vg@U9$YyUnyLFT?xQF$% zbuM5r%_!q{{1WG{@B5VN{gKne5IBt(R`mIJ?8t6mu74cWxsHb=5}bN~MKeBV+eqO5uFZRtpff4TzjhxJdwbhtuVl03bbmmjEn_0-&b_Kqc!6 zpG~IFAOK)drd|3F1psVAVBo?q0DAk|kx`Ws?7v38CM8FX^#iEG>!~yHZRW9%H*KRw;Q-HpVG7?WE!%pxnPkZLl z?RWHg=2Gj-Rj}&>-L-;7G%RTBQ^P2V8Ly69&Nh(Cn;POZ~!g>B475FdCX?dFq(I zNi=k;Sm)XA7b5h&x&r0Hrujtt@cMtmN-md@yhcF|3~5LTqae2(VTN+@?BunKHY~jL z!@=m#2|m{*Mkc-zcj4)uCH10buv0m>=OAgMp0lMI$ztvELF z-ho$-FSA!u5?0_A!y32m?sBvlCyp~3zo@bpGQNt>oa!0Ig~%SmbJZA5`@^xy)CS-i z`2ZRM!ddNvfPyet2`byeYtRy6vsc}ZpU7=yhetv(i@3a;bf$U)VkGV%koVAIocLnb1v*SV4P9@)+7wETysGD`m6$2W zR~tf;cx#Ee&?%fj@L1IML&#Z-+YcC*zl5K_qs3T|i_cP;coN5{l!R7*mv~x62rpVsg!iACx#EnpUO5=jzdLP_d$1PpOZ9vdQ>rwWN^Iv>vby7>%!^ zKQuSA0-8TWbRU6=h6j?aGd$>&$$XH64i*gl%THpHV$p)^ZNSVD)Zg?>xT|s#RX^5n zNjP1!v7IC#Z2;~JXSj9sW-uT8S@7Utx~<~&OY&(8XJL*!3#b0&>&%^4`#V(**ebyS z0QmnMjGQl+ATJv^ih(^yKm+j5o>)qIP85eo-R%`w{ z@s+&!B2fnJ?+~~w;5%XhXP8P=KR})D_g@G-Ffp>g?^-Xil zkK_pn&16`JH72wngQL^+;J8#aeUsHR00|C2d_iRbn@-?+pvDW-terVP4;~c@4DuBJ zsz^PMU{L_+VZ=49G)F5?g2U0uQF?F;+PDV9%()#tMbE(S^EuPt#D!i5N6%#JLZdn2 zhWq^$%KxmUst~FWd)7)X+J{sMP#=9|#;r6GYf8n!dHUOy$uP z{ZVYwk(R`5Gp`d05F_x4;HqE|{fIMtiYSY*1?@_V@duh;To2Hi4LjV3J3J;GaffF> z_ret1RCy9gOq)vE&+!&69(g-shpHM=&j34`$pG8pC&FH1o6(=F1^0C+ekEA}> zT(_=rHwGd#ZYBS9G0kxJuLFO-LjIn;yNcjKtW{8~RZxXcMG4imQNSuLx1KV?HK=A1 z7mPW*0SL$$SPW_{NoChc1k)lp=(F2_v%$HN6|6ii$rnsKj#8cK%!gyPtB>RO5_48f zm38Qwv-)CIKeBW6?+bhfuDlx1#hwFq}jf0$jJG4-Di1Jkr_n zLazuOuyX07e{@N&Duh zKPXEjtI2?SI&tba-M<2nXhm3J9nC9XZir5D;@TQa``7URc2n80I((&pt$O1MOu~@O z7Q$C*2L&gYYul`vWk{Pgn~(oWka@$mK<09hGGTGiQ6B#T)j=LZS#T)=_=Ftdz=6#3 zm0*Nc>2nOE(WTZl-#y_aPc}}%0u5RwdAd2nrF;+=5%H@~d!Yzuj8$`~qr>NPGDbeX z*!nz!pJyrcf@U0_n?c0dhb{mDRG%XBVZg{HZAyM@EXz?2is2i0T5YT|tSd}<#)tEd z5~Rd&&*_Rhhs3;}qy_?3vE*>=Sif1GJo>oxo8N$_xk*Ky^S4BL$aRtW9wV+9vp|7e zw&;M$s?EhH9_1N53SWZ$1|wN>oZJp|4IZ!6{8!`Sq49$!Yc;02PZ<1bt>z=#6GR&n z)rCcB*Pp*NRWoj5iLN@|H7KcCO)I8K0HqoW!h_E%O&WZ@R`Vqu>Be%I4ro``>;A?) zq^CWkr##^2(_(qA+h9d?luD}fVB!Y0qmqn!_0wFA_e0v`hOhjgl|X62WsD? z34-83D3)sV40Tj4XD2rZ-fOMSTAgI{4)NcxEuJBX#xf6n9AbY#|M)`ZxUvb{7dh^W z?Rx;kGMw}AJ-vc_he4dcB0mWt!Fwx3H4u{)yBZEOyoU{dL5hf~Ez;Uz3lY}2HBfkh z2)ej7?$Gnz*NkHhwJ{`+NAM-U$YO`s3hr|p_qp~xaKJKjg!4Uvy!Z~d$Y&8kxlOK% z6)hqKfItT*D_EWr^i1xyMgs?p3k9CNOoFCUt)?HBrk0C)jS*sOg1VG7Gp&F$-SB0C zH?KuAZb1mlp)^ZVq8<&fVpX9cXI9LHyf{GFSjWBHhtijJ%#LWORQNEuNfx{cZUrxM zr;ryoGiS4fc^_#84jeh8W=8a1JEH$4+CL@C!ykuwke>staomik#*X&|&{=GWB*jCr zQ{gJwF}pkNGc)-+$sDlU_O=616U8iv&4n$P7a24U@_F!pwTi`&mH2&QsYN0KGR>0_ zxGh|-Pqf(nqwcIptrze-OHSd?z;n{TV#}N2OMuR(RTKsa5{koU-vye zCd~hZpRQBOkKv(Kx0acVmH=Ko?;Fjy8_!65LfzSK%SJBvaJ|US?CrOfGg z$Lrb1OU5Wq&{V3~ZY}m?aInx5Wwp|Tlo1RR^n^8%*fThAqz1DCnKOE@tw2i8a4IDP zUt`@JU&|=xOFqrW2-k{ni0VWpiy>wV{LMeQqYkb~l5T#$>M<2Q2t?+NgaZ<@nY{zu zK<8s_q3CA5^mwIae8n5kjZQS9Ci6>dIE$v6Gw7TK-N-jWH;L?)R2#s29}sh5qxtuV z&v2WJ!1 zL$!NX6wDu+kjxXbN_=^6{9i1E`%B@)!dEDq*>gnoXDGa?VE#=BJ$%NEuo2mJ*mL-B zf-kT$yl|MeQmZ|d#vOgFJ2;m!im?*?j<#SCerRk1(3Thz||M@oPi5i zB@rX;!YLcBB=o_RoIk(R)q_|^Q?*u-8BW{`_kCM9ByeG@|5BNbppR;mk%Fk;emXVA z*a8*wDbY zjNzXI^9GPrad`1LCUqM%<6-_n4nqdDf$ZhO;NYWmxR(~3gj$el+l4ubROftUw;jV3Z7qvEB|<3Z{G(kqjUDE zg?MDmL}|76+@nxGNp&5>TE%beF2BZ};BS`Q#nA8Y%ly@7G3~FC3;HI z?boz^U*kvki+pz>ewnAq2QqI9j|SK0jIRkrWbBLW!3tf;+5%X%4v#jW{*|MAsGUw? zV_@J3o54|nL%{fIfO$H+3fT_^C zun5iDtY?bxLVu)xIq2SUJ$$P{&sJW5>*s7-gN8W<95Lcw?|^$VLux|>52^|lcB%j_ zZK*&FV8;r`GPJgm%&Wd4+LYJ~eJUOm_b65AMTc0aR(JHj*@4hetOn|9>cw2CLNY1Q zD#q;?1xvRXw|7W8xsR_z{WUg79nWLJZ$5Da5s7Xt!x=8X(-XWz;pxEL)asHIMD0+| z*f;E&I?QJbg(F`XeN5xb`&?qm-`FKcfp7FiZcc~`J%oD9o;FmcD5!cKB2?&)`71T< zyc|M*3iIA5A5xgNvplyj`y(D+R0609v$ygnq6*#`H((X?2WZg$wiovMsL=H;3r*si zz}C?F$o^T13@}cK9R}B2 z`4I8_D2rMSHo{?&mOTwZvh$So+pN2UUf40{ZC_w@s1b?1%{#2xJ}4iq=Y5NVXSt$n z%^tXZ2EWo`WjY(f!}+_t{Wf@A0!Q9wFhfyT=9CB<`=4v$Fe+!n| zfk0tI@LLFJtWPBu&DaC@-@44=?T;kSwC62e4h4P$T1_2>urIirtT~ubEcXhEs11&Z z4CO>I8REuzx}Fen8k&qG$Yy~6V*dCkyfGC>Gi-a9BK{cJPtwf3b%-yl&a7fh4Eeh2 z4e2|!Wac$!^IqZ)3>FU2GKw*t2-ooMZP)uDza+!M?&53cjS6_AlB(LyDLVxLrAgSU zdq)`-1g=fOzTe4ZM?=Xc;oy%Ft=i45g68%vC0 zPF~;}g~H+*5l-Jbod~`k-|~<6SR&V@;m9RN7$UU;wO^_^k@n@EF5dZSETaei7|Lw9n_;BKXGbJ=))s28-q z9-!WWx{p}M(%r~s>E=yRtEgyE)-r{&lj_^xDsL`*c~+OvL`CR+SPJF^koW=ob!*sZLWq$Fn^w4YK3`^+!ARead+9ZdmnCvft)2RY zJ<^cfYgio&6O51a)v_7DbgWe3i+b}WI5dN1Q2PdUOzd4mt=h*nrOkhmLqpVJXi_m- z!Uw>bG$~GY1aDeDGO!)uw|`T`vshemmeHQbB_ZaULz~ppsE9u+2pdSDR-KJvq)q&W zi{EhS_x?y3j-WGel7Q$#aY>YMmrH!x1vJ_wNV@>cVVN49AJSCxUA??j7+h%19iuj$ z&F53gRJHM^>LLCne6EZ|Hrn)evGjn6BzD^HOg!6O2>&xkf%BLBbm5`(Q&60Lyw7sn z=h*icFd2;i$keEn@?vHQPLGo>!AJH@267vN-qxwH#JV6>3%`^?_NcgXUsnvHMg^{5 zVHhK0XfIJ{KRzykcBw%{His$F z@YM8*g?8=AuF?5$~<2lsMMO`Wf~w47RwYIex+U6+)bI83CPhA#8mA> z2e#@BUjT6EZV{+H2-Fo%sBuasd}2;uoWPs4mIqh_Y{UzyD2nS;5b~@hm3#_rU#h$U z4PQVUE*CKMWaJrNuAHe2U!ryS$sXwqUjhmo8e0lNX=o(LDcoSTjnCEOQ%@GN<~boV z%3~6LZ+J1`%7ZZ2AkURAjjapl=t4c8)9J8|4atJl%NUpb?fUHYqRU)JPx-uh(L-q3Ioh0Byzu6Itj+Vw z_qT5JHv9;PzQeblpW}6XcZD&w$2oz0rDv`cMB>+Uts2{z7+QR zz~>5^!}P5^hcPLH>!6w(p|{tQ80+yBN3!+;;jXY4`evz948iLzV(4*x2%-cjs<|tF zKsmVAzo?2U<$wi?D5;gp;!CV=^UYqLD{g>_s8)_Ka04`lW!)HQ=Qmk`Yu9_71ea|B zAvK%lnzm!PDMM6-F4cEb8EdszvTF?N{FoDDaD}Revg_a>~su8F;S?7g6oz>+EXEG9BzEK(>Sn%=tTg=H3+I64#MLfI|l)}x;&FG!O8?dKTcd2;}Ow~^uIFxjFYGD)+~C|p&3oV znI&u0MDkR7s*Bn8<)YA$1jVZB^KYCQx$XE3c`M(fzO<8I%nm|T^ zJQ2eW!%++$=f)!*5;hZDvZ&e}ZDh$ZH26?7zQq2!uWE69qD8*`BjX zFhs3dUpCT;Keq^5+Yp1W7fKf>+N-{c5O$FaLPyd5RdOuCuDG;o!dCT=u&>-2B~>tp zfL)a4EBK zO=u5&$j=PoEY$qFT*w%z=zyLG4(y4dJ78gc8^R{FcGKUXOlePq_VnrryHm>ijqc~` ztul6#qY(KsJ|0KjYjt;^wl7g~pR!jGxw9RX;?~f){O$||MuuEQYIRdikH^0QPRBo$ zr@Qd)O{XV#@p)nLK5xV4sfEcudK*4VFHGJYIvp!?rkTfHpjaP%antE8yhYiap^xc9 zTxY-SbrRlQdlKI6#M=)-i}?0w`>pRdHq`4lFU;z~e0!Juw%}+&H1_BO{M+Yf z{NpJGYIQT?Vc(BT zz(1F}@Q>9ra&3K?>Py~?deiwyUwq<_`L!<{0&86Sp@W-qNi-lM@QDu&2_r3khs78B z-t5E|EFseV)^8(BAvJW8_FKEfVv30cF^Ex!-C7T(U1JV;-^mmU&9h^CWv+P>ev!S( zX?BwymA~vHO26p*D~5a8pNJyx6@$r8AkMtN+^=LP`wyoC*oZ;1al{CcESv%Poq!`! zMH0}N1P6t=Nzf$QeqanKZTLHCv405SDQDQCD}mj>M>ct>YXE&{jm z5%=!Co)2V}?tWN`03LG`?8~Mt)vlmBRn>5w9>g5deI5%N$Xjj*^E7HGsgj^P46)L2?y76s{=xwBorz`-Nz3eu2uKPy~hy4*b zj}aL7*Nx!tyuD?8nNNc@(4v(HP3$g}H9gPl1c8lBPxSw=DTMz&rx`)O6ys0*N`@7Q zbnI=Lz$>OyECA0G)jI!p&nXB0Xj)hCiZoQXsEE$+=j8W7%d{+NdO?mF;d-+}xV=^9 z6mCf0fhrwdSN>1{0$=70?}zn1!}oXJWrBV515XJDqu4Cf{yQcRbm*|i+MJvm?n>`0o39feEivN=(i8If)J{K1+j1u=8e(oO3&*9G*FQ0qL)aS#Wbx7n?e*RydYCZh<82S9iCiS^W z<>ncwK0p2`4yV<65|N5tuo}5Z=Z)#VLZLr{e3Z{f368bDC27VO*cypAN@8OLJgzu= z3olYJ#4Da;rIhxRC)L-e&jlN~AR+%$ln(a6vQjz^3MRvatE~J7&VwPOz|#<_iGaIy zh~R1dpB)_~q~@#GCd9Apj(X&p%@)0`8mf5NN(?yW{hd`T3idb->e6{M`K> zMww_1%IBW_mmCvkHeAXs081E8(6i-MVehOiyU%(}v6osHp@Z1$W9KS}3=G`%XMq?Y`JNHV#?fZGr>-rs8=7f2He{Ja$h5C^A++GvXicICLX)4L+DH zZ)}7Q=bL2p=8D12s7MSquzY?7T)|(-gvfO?5yoWz8Qo! z=Im8qw8gMD?X@>vBl4ZiCZ>kqj@K3)UuxBxrI73G)aR#Bpm@1Nh;NyrieT73fZF&S?4XNQl6t03} zG0yycgv||PCJuWBx{!tZm1w;w=s;jp``X+)75>oZ6j%v>0dyrb04>}-#%TCnlMqza_KRver+b(6J8CuUm>p3g?*EfBI|97bg zXQfTo(7afW+sRonr>d$wG}iQpdDjXcYg`yv9mjk6@GkL1jUuc=Ndw<>oVlZ*3!G%5 zk*2>}IEli?^kJRrx2gq{YGlIo58I*U`RVAi6Xoj~Q2paJ%A@PYvf@vSw~Q%WspctR z_=VFu4ZKLJABT6*$pS(#C%pekh7*I;bQ91bU zG5EZNAO0U}X9J&AS^xhHxn(Hxo(eh@bmr9ILk-0O!yGpCUJjiP*)+{rT2xdhn@k1S z+y>m;95A&ar6ThIlT4EY%W?w(e8@meNmEHv&)w)3W8T-fY0L&ADY(o zVBiBMbMRqKW!8Q)$bK{qiqFbCe9)dM4YNa^W{IYS9SRPiz*I$`(-ncXN>yu67Pd$Z zVk-?Zv_A*iJqN;e*e$u(nzWzy3Bz^@(L=gCgKa;1`G1G+7k>F)vp-vf1%YjbozdpzjwxrmjKhACGr#gF>#z%c524 zQ;2ON|4*;L>Q`8iTQWr!xFWRI$p5T?PF+(?k>)eaG1T&Pf^7hSf~^5lHF)30o6E)( zcm<<93Q!_dfY9}LgY%h5VL8*@r!hUu4jk{(tD4sBiX3l6yu+YzdUL(0agX-S8>sN^ z{R^ijL00zJJb}wVpFI7i9EarUPrpu3!zV8*wnY^bfiPU&PNTMjZufzB?bXeWQ z&5Wca*&0~7kwc1av+b@=dN&hn)uUp;WO}>OHEN!9Cu;}k{Q{MmQC;YMHa7Rk|GwS*~ zViwQhFz{UxGw~3_JlVAv@0OzJUtat1xx3P@5&wmLov=A8H~sZ%#QW;k2|)cH>sRSu^!m&zgV3wA zKfQkS;QueZO8*Ob#h%+0y-MGgUNNBVPp|mg+nxQymn&^dJb|Z>5)&DoCA+9!4bs$- z@bl(z70Dp|h*SE zHd|#--N#|=FF@dAX9F_MfSUq&{ZH^A7!!K`1wJ1WBB|1<{||hcSG*rS7V!3d5eeTUzvPo0VT8TH)yGP2b-yF8{(ENM!L za8HNt2B|NIvm~OV4EP=YK#s%hj703)R1WA zDA3IpN+#_P?*{u}b5GBcXllwaq-fJ)i;}fm?rXNH8=+#oHM3%*6nx*L>do~s^1ezR z1Tzu4S@fKOONc7i5__X26GBcaK)-}3l zXN8|H%|Q(#2)b@FG!2Jn zU7>X@-IPQnzinn80Jfrw+|xf@YHpC!#2VOVBY>2kSrx$_q3vhv~f^I0oWK$^6ue4KVeKU_-w2O?tg)y&vO2 z@fTPp-xMD=%$Z8j_?O$jO&ZY6cdllBn8Y*Uvyq4T)98Qc?6SmL1V1Hdz^aisRV`6awf(Djm(@O02mN%B+u8bKI!of3SbATj^rcu2}&mzY~az=sBfYj~zy9 z?27S`<*p8|!8$ya{9tO#U7Li^73Ezov|P=x;3RHJZ~vF{lEDabon_)0HnfPFFgZ)Q znQsTEr$Q2smNrW%aP`S6%2K1IP&2Dv`E@{gv+dGHl}bj0U-(59mh`Xf6;=S5EeR93 zuck{qUcU#cbvA`^;wkLa24}CnEd$fOb(IL6T<)9?_Ub69gczCX*cb zB~=PnUF(bu82HFh@qmV~FG7#WKQu_o(QUW&g9QLr5&*a@)I= zEqgIZnz3yJ1G_RS#!-H~D>z&%K2NKY>e!rctj+P7o;x$R?$Ec`qK=`H6=q-SgVDQ5 z*{9Yqm2RHx!i*>_6-JP#$)3)Zr7PZGxB(oUPJJLsLfXQ!2}Hx!{7F zbx@mS76f`;XZ|s8QU$OQ;z&X&)MkxI19U(WqD@k0a&;g3b*nIMXi{GQs1q<{UW3s* z(2{ZFqKQuE%qv7jhe&kwZyMNqH6fvga@35tg$qe@sQMb!oS?E|Vg^jYH;LbW6k~t{m76FjA&r4`gmQ8fVWaH> zTD1p2qMjC~riTcX75f@06W@!^Ge;Ig2AxnRztOO6RgO4UiI7lJjEROkA%Y18?KIfp zxCVq`2aDraD|qN*!r2K0QG@h>3M#NKu2SG9OqJ0zn+3186iHsZy0x#B7On|f4BYU; z%h21pY_w6(AG)expxkQGb?Xo~K_0{&{in;mv)_cw1oW#A5CA5bpb!ps8idslSorW= zbboKj_P}TW?2o}%@;{&A{y2JYq{%omv7O(we6hEh@E!XTRrRV7U5IKtY=kp zQ>}^;DFEu=oDrp3t~@>w3~;`oF!cuavr=_P0Z)7V1=yC-eFX+ci|a`voiZ-40F?nM4>}N zRj=L#d+&cjpOnakb#@7LjVzyC*1lu&Pm(L+UGM6V-o0kTq(6MZzh)BfPJEJc9j&-b zUZMZK(#>gi>dwNGLQ&Y0jnl!2hY z8Y}Rv1iRQI*Q8q@AGf_7REEoell>~QjJx%2d(!(_@yAVvy`T&%FLr+E0ONU{2gcBn z@Vh?G0UA;WCJZtMgOD~D^R>H$`}5k_vkb#Mq-Eb#GC%qAFzCJf_CPu@6E`&vWq9qC zL=xo{b4f8S*Nar?Pj%suBU1S6v+wxvxL<@jmLfiiG7N)!`MC!9sg`}f9oRpyCFc#J zB04nZF3ogk6(hUe2E(s#&;NDxR0zC8 zj%WS6;QCqwS43q)U#*qQn_R{qfypP64-l#EY9Lb2a{u!1iO;(Egyud;K02yT}Ow>l>wgzII*TD?jL8pZpO3O@j)^1EerG zkOt0!xBATFK`iqe3PFJsg48?CR$y9~v@~Be59p81ERZ+qrwV7UsK)R&n+~JHcBat? z0>CiEm(!z2V~z|Rtd^DxDi2rH4}ec60@7XL8Vh1ieAUbQVOKdh1v!bZ5#Nx5s~)fW zzE5jE$Zajx9tX9ROI`ml>GEA$Og5Igz&7w#gv*j|*uGM%ZH;BTw1=0n7?LLaC4z@7 zJEqMlVa7HwV_UdzgE}u?gC{bFFG%fcw@`{H-+5V`i*Fa;4(8tb+{>taXc(T9 z^WKcFX(zk04s>=eW zzph!QJJ~ZRk&^8A*bHcWryHd(C7|l1R+ZDm^lqxdD;3G5SbDnhTuFI0>|8kUaAD-_ zP?f}IDxpgY>g&IsO!4NSXboO*)C*t73r<{3w6lJ4NsMMvvBkeZWV%~UqVM_e7e(jd zd`8EHJtIatS_;~M84Wx^>{_b;Lm6Iqn^+AnT37(Sf|UXv{|@aV?AXt5*c7WBi}6LD zR<28b`TppfLG5wulPj2!pDL}@h3eoLW-&b0@6K*kvO+Iv^dgaClfOxOy^A9&nQbq~ ztpE6$%-vw?Km76og^&kQ4x-XX6aQa^MjZS_6m%lveXnAIl06+;=J4X8cY5YP=XmEe zJnYy$C*JuLZv4YfLt-`dMbeXv;oH6{ zzKOzgKHTBCppBhHEW*ScE`~>PiR)A6RbJGwV@~rm+%&zj+CclZmVsRU&gwS7DUe#A zT{J!!Nn^okhp2Jdf%t+ch#k`^Fchw+V`K}39`}o&UE{sWI9zq9T4sSsD)|_JGAi7c zKA3;#weG7ZovubbYrh8`OPZT1ip*B$e!D*3@`zdeS8{-xz<8AlgPU zM^}bB{xS%S&YYP`qf*tGrBP)DOu(ORgwk6~va)&|J7V#!HAKnr&L8PJKdd8X^Hasn zyl=ja%m^TvJqj=PI$6LdD#MV9P26E=(pIPvqxF?EffxaXVu^^8 z!KjyKES;j2|@$0BENWUVGZY9wAG z*{EFC8xRs9odg)jR;+fbkF$2(lyR*-A*!fHbFdsGa1p_Im6Ni{rV7GOGgPeBjA_P| z3elxTe6Cj6M)gy>%)AQju@=F3>Bb!5 zOx0nAgpxpaKF|><%%tq+Oj=E{8U!QzpE}Srd}N_SBaabvCl&@~Q2N^MTqvfFzEgY#`L}P#;WJ@h zO^MF7$~>u~=T4K0dy-LCp2=ZVyCLEsv>Fzr;?Gl^u##mxu!bjarxtD@&y zhP!mgZp{bgBHlJE5Ajs&_ropuu~8QgFu`rQA#BVq*N;Irgdfc>5ybAeorcAkixv&c znP*mHIP>DI5ogYNG@mms@16%B^})V-t++VTy*SI6_1zGs$nAHPitX+Y8CHPEqP+TU z2xB{b=5x@(P`6~g@Mu2S)^TI09#uaj4 z(-mR0$~K!njH1I#>|mJ~;R=DuEQS%?bQ6{=c7X%X5`U_SRYHj>x^*QOSgLFLT4B5< zOfP_k1abZI$?>^bYYz{bgjZuC&_57Z{hfH{CRs9dlZLxc;MroWJYdX5dszOMA5tKJ z04m6h?!ZUvpnu*b2tczu+`|t4P%WGTG=FWbiHuhaO)f1VwNL#Z14Y(=W{m-ecmidTmS8+;Kxd8o!5u+n4Kp=!h^4QZB3S?KDE zNU`p_*#XwjyHS8z$P?b0d3dYQGbpV$!1TeK=$)H>l8U{zn;F19UGR3IiT?UY5h~>A zl2{9NiWp`OX`HXzbio*MIA%Cbj6 z8S_ETchnp8gh4*$*SaJdD^g=-xH46gDW?o#yg{UDAbthZo0~lmhZ%e#;)zj#w1)D?tzY1Xcp;Z`HLZjjk|@Zl&d6o$hxz}#oqizU z(~uJM15r^JEB&zj@N@J-5pYI7R%G8(F?a*}d#GAb)4t^Ks@8b!?x!WT`rxqWUAl?d#=Sl6g)}3t1<`4g zRgGqGi2oW^1dvyE_k=ib-oS*oae1D?jIfqVgbRcyP?#@Lwm@NSEfP=1EYQUi<`h?E zAca}k15vv26sFckoTf0Xxe9Ys{+mc)rkxj2W_VPXTpF?6mX5Q=e);;(kqrER*OT8au-Ol(gheQKTUoN zE$?c5wC&c_u@$+WhFb!L>7+Z_%tR`@4N6Bm8-t!vOhOZ7;kzWu902@GWT3z**=(Sk zi84&Mac-y?cPE7spp;WmXtyV$9xG@}a2PmTG#}khqm<|D5HysjVGZxBJrkNlwjq77 znI<`ti5q5KoXH?ifsugLln_#D;ZJUkz%_c|^_>;TPYcjULDyBZ=vdpjCOlvp9ebq{ zDuzmg34%YUb|Sn+l?A0|ut}xQeLFJ9Q{F=vpZlJp+;^MGsxJ+6 z4bEfEcSYnePtoH>^O$%h0j|Hio?B2F{zma?Vb3svKT>>Zksg0GaIjD9{i%BsfuNV4 zh+gLAzB@Di^^nZ#D(D|}cOcgHAmBL>XP$h==W4Img8m?)D{~rO5YxM$^eeyG9q8%Y z7kA`PwSqU>jNZI?j6hx#d5F%xk=2z>t1S*K#{(JG1$TB?VIR{jQe&P|b z9Zs(;;Wi7bXhoYXyUYhIi_XvbkgF`~xZZs4!m4ugF4{fy@U=D3{n@8WPJ_~J; z^<(Hq@jsL;hqBEaO{-LUY4taOn^Ugs4VD5a0;jL}V3{3H*Bw}sSL7M1&D3TT0)SI6~ zZ!EJaw5U5_5bJd+^ZF!-l3v3CzO{az`X=0!g_q%d^rBp`Z<_$jjdXKuO9sMl%N%5I z&wLrom%q!9zY6i*&7V>ORgyrasuT&7aEe;usnM=P2;r=(Tcd9}m}tWsjqTfQDCJ#U zcu5I)1mJKb!bafeo$CZKul@Mk-y&wfkRyL;tw}J@L$MT7%Vg}^91dcEve9T?v z$$}dxwO42(*-5Co%c`?o4#@b!#T9ObyD4pDhm4OiA8-H5w~czp&~V^)L!ZArxwCUo6JF1gZVvt2DM{}ivi*#==6Zp4Z=%lHmQM*P3GP!-0n74+GiD=fI)5zR;N)5tQJJr5G`cudX$cW?ac(wEy-X>_e}is z;w+$Q1@8!|Jb2=B_i*ypB$ygy|8N90e&f9=jkIcRy8&iq!bp9Q;-+S?`V)!N$*$8O zuro1II5HR5Dgj%8g#%dji`Cbh?18~s=z^nW=rQphvp=TuUyj!KFJ_U(Zc6C%q0F%= zJJiF$NDnR)CY_)e+`TKqd#{CDf6QfKe+LyLFhq(4IS_mdSU}b- ze_a@de|XI_P zl)k>o+oV&k&ap{Yz8W{QU;67G$R@SS76hkf>`_AAG*!BkmwsJOCeF2inKo-l1se&HEz)CMs;8`WWncWxGWf>D3`zAD2|Z?Vc^bt^?ADz9iQBod(z-G;?{;EB{~ zY$|aIY(%o8N1I zKq8Gu;+GVI$Hx6baY5;ETvD-VG(;|j(a=$Q>pATAaYPU+vV!m$Gs^rAV!z&(!-Hsk zu>CKt`WWq(seQs_{X^3hLGNq0)%;GF>Uqc7vNd53t52*%@1MipUPY}B^tTsdq`Cd( z2pXyMX^rV?_(tw55p%!j^eH8&*uqorBpXW1x{ zR;S;>)tSS3H@(tsIcs8bdb!<7cBNx~wQ!9rP5M}#hpA@NVO^%voTm@*xxW@m^XJzG zv8jn+@B;(#@{Ak`RKr`| zde6(PmuVi+uzKHO872-gfeskZw@%Jja9U9}=_LyIZW7z=8WgUZgqu@0={N3u71qsW z4It*~CgGc?(Y)hyy9r7w@0HoI5fR@%f$<3#-;n7k@v-Q6%PdEP3CtSEH~DSRoAlMj zFSGieFrf9}rJ2_!>a|lx$~d?wp*s+RqT%7{E(NgPac=CA)_{yxs+ z$HDn)YXt}Bqma*RO1!h#v^XizNBX>z%Zy--dTydn(L^BybXWqDJ=0tArPsMMrs*>3 zRqwhwgpyHb#VS80zj7qDL1lA_g~Nq`%-aC*uFbv9w?C#HvKoI-)j&3$tKCe9Zfe|3 zw>IKs>~oJRnVz&dvFdkD1)fMGpH95P;S+yl2a54Gvc+e0V$Uc5Xh>x}K!vzjE&anEUHoqs1mThiBE1UAI2q})g*Sg4f<5h2xI9?#YL4*C^WLuITJ5^Di2junpbb6mPP1&$?ajXVzueTaUS?2#i#> z9V(VrP<7aAtKXHZam@7If!>OBN#T+kVhXR^Y%JaRoG#Y*uywUV6UX+pg>SfL@)p!< z6V**z!uO8-m*y%GWi+b+?%A!e%W#RpWl}!-H z)l~Kuk{;=gsghtCqO>aG{hxS3cHnOCY>R(;pyfM${h3BhN$EnKGLgs6-H>{jAxYJg z4_1daG@AGUS=VIByI-08Qxnx%nV71nuwvLCXLWpemV^YQx6O~CB7&f!8#(e&Wc7hw zQ=6MVa)6YgeQS|~F}d7rvJynsSxlGxOtIJqkL8WauLdxUYzE)&l0CdzT zTFQn9h6j8lJJ8` zhuuMjPRqqyP!zpW;4{_2JJ(k4GY-+xORavruFHMBD1#Aw@61{Y?uC{95(Sv~^7&Kt zcTqn4=9f`{0nR_rdfW?$eUU8_7Re?8>^>GF}#k zca*S|eGNmH;a8jf)fetJl%JcHT1@fWS#l*F;xZ@}F8&`$I0_?(fwOejD|BT`e-yar z>l?~3C1X4OOs|Xe3Fqc~t|PR<3;gGF15E^DAtgD-SfA4=+s{5PeZhTxtc^MP)@@__ z0}DUD+CD$bfBtJJYqE5j`@Fc{=P&%t0iS98Li_wL3ta1$xzDG#&zIOxVQ%Y73P11N zBH-`vpYQ2De~E|Ser#(F?wX(%UR?P3zwGlb`p?x(ji6LPzklM(PpK1 z&AuZW6=3Qn7nsy3?CjpT(O9qa?CS zJJ^IJULxrb{f>gFx`*fR^t2c4^S=j?eTn_G#swPgbKC0o(N~;6^Z7#iyyY8wy080m zdG^!W`+vGH`{}vv(=mLy;ZKm`CeEi>7uzx4Z*b`ta>0fq%8?!dZQ4DZ@z4Aq856;E^Fr*QIWpM%EV5} zd@T#Ko-*l=yEjk26xFLYKh>L8#920`&wF!|-Xz_dpXI%|T5mK_iEnfU!pEh$8vioUkWT?3+RRod3-|EmLOaOxE zeYm$$#4izRVlzLSBmO9cR3iQ{Coe7{Dsc~AJI+0uj62T%`iHvX~sZ=SvYI1ST-55xZ0Xd#T(Xqwxgo{y9!(G)=K`OwPY1AlC0 z<|c;^u+Y5*=-J3R+OghfUWF5L2M*-SP-}KhuRMH*$pV?f1}0cby$`T=^v}XE0((&U zUUfdStq`m(|0-CkBHDt3H1Lcdhirh6b3Q|O@(s~Ds71S~r$d`3+<7U^_GXc&fIhc5 ze)gx2=3^Lva`yMmZo5r{V;lKvg77))BD`_1ZMP*2gaBo-O6B3-zY{I<_uFnyaydC$ zU+IcG%p`|G(xt-Jaq8*G;&vYVS6%u3^g3ukL=)r_5y;(Zy)TvbuA>LqM;7RkxzdCQl>VJx<23kf`c;3o|s{a4ryp^B76v2;S zlK;aci9-0L1*8iJMwlQfHK>8p^r*62SpfIJZKN z&rh9EMP`P(1f|i<2J~`M{N|p{M_c-zJP~M*AMo-C8W$KDZY|e%;p%+?wOh^qzhS4G zZvKCm|5qiFGSjy6fQ6@;VSk%_VqI*LcTh>60ujPTFMu5X^g5NL2e}i!pY5;IsT+Jh z+YLhf?jj1sJ3pbKBr;aNQ@_xoRsCS1xl08~-_&fOC=o9wxju!N%UHSKK+`kR{co$AaV{bH=Dag>csi4 zu9(()e@;cJtZfZff5g41;ElNop6U0m9J0;a0+T4j$}t@pyY zIW$s&78hT^-TPp)5no8`|16%C4M1KFWivwm>-xFK}uQ(zaSU zkF2Yv{CY(X#{BbY5AV^r@Rm7vPv;6x1#cpPx52@?pfw-f?hgpBD<^obxyZ3VZ2_;2 zo1fRNc1<^WR3Fbc=zf|~L|Jr<{EeRc8&%Af%X;$|jJfS9kI@C^r>PDPw?T#E|Ehe_TfH9u30KbK-y@;6 z`jh?!gHyYW+2SX_@GdeK^JcRreN`^V+Z@Q3WkGI=NN;tSz|3vQhkA=X`T$V7a)P?~ z0!Ml^2h{QcK#2X0{c>L9K--S+4)jRd9AOZH5X6dh`MUJ(MZy#FU2|3rYeIp{z?N2E zr%Hd(th{&&!_1{4E99+F{%C(6v?VCL>_}IM_+1j7_P7n=3Tjpk9-o1(9HPt6&LPB?#Y5?p74O!wrDXWV_{wepn6t^^Wr@7=-|wJe`tRlH z&w!TxA&{&V47#a`Zrl@Ktq^NMou6uuJ1PNI4Tcy;3gu(8tf(~OFSUmzX(JJ<`Dmj$R;#{5|aq`;w$L|L+|)XN)6v2q6Y~g zbjhzKy)UJWL{M86gH9SH!cuE$LGcESQ=eBk+J#Aqbtq8A2wze73vvn~aE%(_I@-kS ztY5nsoyMdJt0_ZzFdSpe0%}G4!33gEQ_P7fC5hq8rVv4?ra~!I_VzPFT{4-IN7LpNUj9gX0%Z(S@*lFKc8O$7cL`KOb#8C87I>pA_UgxjGi zzUb3>7&PoA4Tm+4#upxMPcABn#UET@n;CXIIV9S|ohhKryLCJ{v}S&D<;l$WKWd3~ zo|ApBu9gDJ{YSgGMzF*NQ4L2!&w5vK_V8iuI)o$s;6;@u&nNA>gH53Cm9)@vTV|NN zq#dBNq#40Ka`-f%r)(rZeaE{XO}wp6w;`hwkOTmusq>U%MA};*$qvTe57?tfQ0k zGKd}cy%-N=`Sil%^sWy%!%A3TeFia0_VAE(GLvKv2+<@RH9I&QT+* zF#jE^U7W?r9+rfg4jmY)y5E}d&$L~7uWc>|!luuMTHDcTSEC1t7`}Rbe%n#}<@ zZ1r~|2%;XZJWag^qOdEtcC8Wd#RS^R{}~rkU?1s0%Rbh~-V>(lANDi6oFPokHL;5c z=VP;vnsI2N=ar#})CibZTUO%C1;ioZj3)4fCqH1AliLbc6uJ4G79?Yz{ORezs1rwu z5z!<;88?yGGvKAn(rg5!S}z*ZP;MK03Zsu^?0z0TSADp^cOkzOlEv`1t9JD9ql6kU zd>JS5o72e(KAdqLdHrS0=a@i!R4}b@e2J>6sj4KLy)v@E{DgKY*`X1n%T)8vbM57S zSKrA0t(v%R-hR%$zMLzUA>hKDV3K@C*p2!D!^!+}wmzqDltGMBzZJhp=`d(v-KzrowJ= zohGNI_j8&R`mo%^FqrKL@dwWt`S$7|&B)2S#aFVe*V*r7PR8hXrC7@mK)!~_iR6H4 z)yEV>9XfcT<36V==F`=W%)Y8R6%p4V3*cw`v976z*bm=*vLmRB*fD0JRmw*58<|$OMi3KYT^TjIu;BN`XD` zh}pf@J_!k#V(y|+LZ4A;Kbk+t@BIpX?{5h!M`OuV^yldBzSXm=yy4z9y7=d3STW)s z=S`Qp=pl%%vA;gzCWM6J{zwQw|K&rwLqA+#s`L$eCBdXKVUYn+%6Wq^MDtTfMa5-!Iaf0rj%(@&5=UJZi4)4)}l8~OBGbbKp%{CEqO$6U|Ue;7% zyE#)7R$8+hAPo`fljC>e(!kM$`gxv?Fyu;-c()Ovss&p9P{rwqK6juZJKgL|AB9~Y zpK$a4iXuu|M{8T7fd)BOubba6(hPEL;gzZ=`WlUIQXo2&SyOpbBEJ5$m)|Rxc|>$@ zoPJAw9y3fM@$%_f&d)j|lJD3s`&9B4MA=+%Z0a9!M!H~#GAATHM>SkdC;O=udLa>u z=z_+6@^D`JQ6Ai9>WtFlEG$Oky3v60%GbVDI%(ETdJwU_B;2n~8fG}Vrh30aOBE61 z87YfAj*L+`RTYKPHaOTTnE!a0gI?TzC2ag4FQppP20<@!zc`_|qVO5YnISg_Qmjf-loGLJXwZ^gGI1LXAfKFlt1k z8Hgm|+D~90Ka!ay7MZ&o`=)qh8os4UzO+KVv_f*tfk&D6pm`!c6gg;@VQf600HX?a zu;49`#N<2?Sp+HTgq)W;em?(ESS^^Y&4hLaQ;xmutSpnr+W5siC8EOC>2iN`Ij8E1 z$#vIYzzHzGhU_r@vP#K+EgrT+NbDLELhhy`W9;|VPN>U z7)ChwYl#p>PJX)^7xpR2)UEFp26e^VlRJxQg+smfm~{~@qbYXkxTkcg?+p~K2jI{k zicFbz+I+W#=Tjy=77so`vr|%>`sPk~tq;CXTsQHV_#)eK&!beIyuGrG4>E46=T#i^ z_yg*LX$OGI38M{{w_8SXcH99absgO$b$zSrldq;_-s_Xc;A!Ng4zHELi`FJY8%KKB zf)kGTDHD7>A#}WhK(F@+&U$3cP{Q>IlHOZ5llX)yhk@fUt{?BmWpO(?vbZALzNgrx zqze*WEp|<)51Md>QTv`2!3p&TO4U)jDK#{7WTqL48)#~F7fw{Pj213!v4 zoJvNN|GRZg#k|Y;f};wqzCy6)$lH{$8(ae9<>5J@gvnWjJfxH886#`nUWY*JtC(i} zIw#UEb?zQtd97OgWOe%+YP7a^y&8WkN%I<8w{<07IJUVJRfiIz~X!G|ghN)ep;)Ls(8rEsJ^ zI0wO59baUV;&`}B4+#UNyHE}rQXh;t<(@bXNAF#mI{b}`_u->ydzYNr^%qG_{oW;s zj&(>506dkRnUNe>mfp!O7$sVB6-N|Nh$T5u3^i3kBfxbGA?H+%`NL1*oGQ%Ci0LA> zhQDR!fQeWgUn=M-!rvRc3k0PBL2)!6q=hJTvQd&XJ-w%#0xg7>mdNlZ+5plmf-H#_ z=DyAD&CdFv~bEUOvvoUI2>Ih^oV5J}nHbljb8G-cOLhxzE0ZCT2WH zrs*1tI>?q8kpcO~M;+n7Itoh`cuO-vrn5;D36Ej(#7KXtF36HF7qyeL+|=IBn2yOaOL8! z%N8q0JFL_OS2A$m9Sz_YPIi`LBdyw2is3^)a`DT$33{Z>gTp)R5!z{wn8Vf=-jw&~ zeuV|eN#=2#^_9n+V|5o;CxoGmim~HuTIS@fMfz-80eiyouL^0wW_g2>` zokE7Su%KU3VTgJIU+Yizi`^}3W~2n|(!2Z+WrO&kVv>2iRuI&rs+j2c)q2pHUZ;-kAyQd{`HGhkkor&$fz?^f@l9gdnDbtr4wbQ;<{2_qz!M&Pl z)C(z$iCuW?d9MFm(P;`(UzLQT6*@&h=2Eqm1>|{Vp+`Zc*sdV6 zpvX#J#KQ{qUU(u{J&n?T!g+>2{Jsfe$q!88vjjNuKEKid2!M3w;BH})al$Oe z)fgS2R4x*4%SUOLuUd9`YL*2n3d_Ch<$1p2K_OaU>^Ss^qv><>$<{AuSY&|wpNmHs zz1M7FQ-z_uktz@vf0acp(hAsuX-84sPJ5Bfbo_Kv!N=^a)gMe63$e^KbG0o z_zuq!+3cPws=C!r*?%bK=* zw2OER?>&M2$Yl`w+&PkGae>yW4ppN;?E32>yR8?z+OomzY#y0%N-Db5kfFMBGFw+70m0dU7 z@$P>4fSx#5`3Ny4E82$BImFm~m*0dlSvjA+9t)eRk3ntae3z`K78BaHZWqcpcQc8B zzxvpMSIDSKGdSl^!_li$mTk; zPUcHYjE^D*^P7}cv=c!ir&I9B_{=9BiT1U^O(Vib*y3SzT0pFghllb%&tunS`HVM~ z^4&OeU_S4$%#`o2W1#81M$=q_mzD2;L9`V(HluRr~}KAojRKl#0gV=Yj$`adNo48jLIbs*~(H8&Mh<*Q&5PL~3 zvHQnYKE510CfT>;YcAL-ZvJe3;uF_;lJcH2ImGKc+$z!5(TUX1O_3kF?R(CFHi*ED zxek}rBE7GLuYAj(JmW@PsCojZ_Wl@TkDQR}ST&)Hhc~xG6v#w7hxX;HLPAflXV#~tTRccq&}~S`GWiAKE>`oErU*&%X-@YyT66;p?r{A)gTnRnI z(eEEu_JeQEzXqn?J3llDEqg!s;&a{X>|OL3_H8*Q($AWF{Y)Gu;M@PKByMq!rEnkB z=?wcM#@cX1j!1;-7UnA9ZxG{}yy&*Vp&0Lv;*y;Mqd3x`chi+zmsyelrs%VC5Lu9zpH}BeTjSY-@H`>J;uJkt)x-qlEZ@1ti*LMmwPwyug zm+u&uY%jWu#@mNNwoNkK1@wAD=oidylXiD#ozXq^lJymxt{b;~H%@p8V$=WTa-a?B zJvQ15HF`fx@mX8r2Jbfi(H*o$2&g=Ac5d4xZ|civZX3gQ{IZaQymB~%(N=lPDt%>2 zf~C)!+eX`^+j84xd<@5zX*-CO{eAG);hPl@;a|J z*;|s?^|x(~vJQ|{&I`GWQX#oH6(&__WRhWko>!QxY&nJ+HN`)SB&n^bBHVPBPHbk4 zlxR$Wid1d!PcH*K5pHBPYy`xg zgG0q`^=G3=SBouk*q^!BZrgmPKSbYrej6DqFgPS`*_D@xb<%Nj1W% z>1^r#e7wUp1n7BXx75h}C80q8}FCWSuHq^Odg(hc7_Q zN>K2slrF;W+U#AFX$XwO1O!OE+69_oMJQ~O2HLEqOenlZy(gt7wxZsGB5!zg^MG1D zHy6v=5sLHFMqDDY@tU0n~+rm5m#(vFYK>W$BPMZa_w0DJ4_CLcH2_kEDqeP7|fziR)sohLT$)3)ID#R(q06GCiBG1BWzhDvpWzZYWL$SCr4|^JGSrFY;9Dj4Lo*Rw-qT|ZSLa1A5Z!VZHcxt>&$h&1&>0wRbl zyWDXrfy-}lN_xWI2acD2YT1Ku-F|4-{kW?9c)_2aYnvJla(*sc-bkzZQ_LVK=&x0) zCTF!ubVXtmHQX%$4oV-I??N!qMnbTiD?17!V5|I-HoN+~93Hn@zb9^t2cJ<5sRN{X ztyDQ@s@SOSHRx>hrREU$*;Lr^m3_~Nv^jF^$0P-Gjt#iHHVf@yy$YC+8p&f{x2;Xe zw1eK=klP;mDCrtZXgKmBiZLVoS>OQmh-Vs#(vT6lh(~LBjD>)a04Ew0epvI#oFj|d zmKs137%w|A@g3W>kfKfXJMou%`GNC{h=C^rN`J|kS?<)*A0upgJg3i-EnYklX?fb& z;;j7*(0xg-&By%Hp3sdgQ^cR-^2)`=X?Hb)-07x3B0Z~kr9VkeH~0Oe=bDo}KPcTA zmFB)J=YD?9y>hWuBd9LpUNWWc(2RTE@|uCRlvo*V%A%Wc-GsL+ajH_G?@Tn-_ozl@ zy(fYtz9#lE8P~@Ity8tfbi~Ps7fWouMm?WfepCw>SFo{WUGn);$GvdsxWAk_?r)mo zx6vwHVgnGh^Xn_;Xl~zjd-$-k#|T$7P1i%gZl2dEMyaEw`qc6DyxYRFdbZ-JN9aO# zU#9yu-3KT2{6h;NnNuS-U5{NW3-5i};l?;M)9IUMDUO{ZF|cMcqPD~hI-pA%tlAX@ zV_nC(ihA@)a8C&?Db^e>A*cy~HC!hrd+L&Gj*hc>sV?~kNt%(5>YcCaOPs%Q(D0ZPFXu( zBm|glifR(0a8jpg8Q1wL3n?SAJ92kAys1*(SV!iO5`Ek-p`Ol6y*e^?=|M31oU>Au zICCe@6gD3?9dz_JrRy)vRa1y^cM}Vz^7PdBgVQR9@b6`n#dSS@DVZ{StGKQYw3NVI zT~R)ccV0@;z)vHsQkkSCa9##GnFVzp52mCJt4}^Zx$hZqvP>%^eoKPF*b0BoH{}|L zzeWRSRBa7AS};)*=G7%P*CjVG?=Ok7eo{=_0w$3)POmY}`JoZIvbV(_ykP&1S6Lpm zQ}*R1CZpZGODPE%uD<_|DsU9E^_5fxHYw@;0 z*I?9?sBX!$)X|=sWPIq3sP6Se6qdRlVx<+WE^w+yG>VD4*`b7Rm4!<-MqdGuvOtSm zwCBSQK$wXto&!dOf#VN+#{DZc0i zRR)nGRM)(yjDoT#0FYD|=J$v9wkh^(5g>5w#JGmZ)Br9C2b@ z@}d)24VYsj>XVPvC)d;`pS3NoZ6;@iOAt4FVt)mQZjdRF6zMxXUN9`Y*S~EOK#1Qm zt}-JAsK-c%2!Y;t%+0;{ERJtOma^Dc(qL94hOS=IM(Koxi(lT+r-`Oj@?O>I+AzPE z#qCt=8p=ivOKDIfFQI`5fQYPV>pTTx#(qZf%M{fNYfOI8FG~QZr&|$L(xyT-*QU!v z8Gl`y>0{(5f7WUpoS^jC^Hn8=ZE(LMD_s%(?j=>Lv=&%Ux38^T(H=jXHgvi@n1a%i z|K_WOWKPp;*5(qwN0aR3h}$ChUauX>iqeO=z;UR33V#NND7=BaFGbRd^jDO{$Z5Y( zq8U?)pjCXA|K1YtmK`NoMn!-ok6k5huKd&tCAz`<*mdVtdb7D3GF*2$OjJ}1xz)}H zs`Y{_9qR$X{5XJp_EIO)g+FNV3h~=>KcGT9{K9|=VMkJ>VlO@9hJ1xm6hH#>@9lAh zdpA#T+@t?hAstY*Z?V2;U%QmcnzK^pJzs)PzHtA^c(S^Vo%=Oku7w-hC@bR=-bL29 zK6M#JhmLHCc(TQ+@jVoHAleQZcu2G(do4qzdedXKYdr>)U--NeLh5aEW+@Z7%c%W# z&85eS>?>!8?8(iEyw@Qn@i{e^u3i$EcVOC1oZzi{eeokb+!Z%)d_{n^9Ane`vd0mP$`p6 zAc)x6zd!Jm&X^MR@}BNvn2DFD?=?|_RhBoxHd|1s? z%aw;`NEWQop!5*m9w}c&=9Ia0Q+id0NdZm6HX%#*YnzA_DIzPdvKRhAI$bu`$fIwN@j(6eEy`#}zXor&75O6)| z-H5c|&$ZkXMvzh$$5C^E$C8VQkIz0dk%C*z8uPl2(SjZE&V;O2M>m5TYbY@5Ww30o z6qbGzGuMCs{(T0G4^)EE@6_#1Q3yO`hzsA_cu$tjP(tx#L{g)=kJNhXc-Jqa9NN}# zZ#H%X<*Nw{GOBVm)6!iAU3du_Z~!fdald4Xo>Wjb2F{O@u0sxs!aINAh>GCB)v8~z zCQ9GKB0-XzT(y3(_LxS`V=v!cQpCzEwnXrf(@=(26(3G7AU;i$iwj{0t*EaeTVGi! z_UaMZqV8-v7u2oU_u22{WJv9-Jw#o;B@&(31=mR`1y|r-n;P80CjG*>Tw8nw)Jmu7 z<55%EC@zQ%voFEy-o+wTWTc~fiC2a8wbBqgg)>{i+?org?ja^QTJ+v$(w31(zzGxf z-h=PUr6-_~xQ^wgi_;LuLTLjyxo5Vz^r>9ULsO#WW>t@W=+-q4Q7a%Ut{*P2sHgWKOu#dov)#8P5iX0q?bvT62BC`MljyfHGBksf z42$}9GCy}m#&^g7nBzS&@Ca@df}Oxztk=oWk<~VHVFV_pGUS_s#_J!xSvC`(i``~ z6hRxQaK@s+QTrcgsT_V8+C4QpYM4k;%7{Y$^8~&(DeQViz6XJQuqJnE*$ILrh<&%- zOK~8r7stZNXERLl;kJ9e^u2mFH z`!_t%S-PI21@wGf_4b>;l`wj?^DaZGf3iqfq&iomfF3ojhoUEk#ySlh@{7nD>jnem^YvFSVxK4Gy0Kq6Fd-f_^LdT z)>#%L{QSS5gc845;o`1<9^I;aKzcM^lA%S&8e-9c{bn+>$l!I*4(Tg>@dBM75_%>tnj=MrO^v8y=10@Cv4pbruq9daRv@@AGfe8 zf~$-GuJ@fhYUI*`=I(Rx(n1$6$^EPIw87wVSKoP(0g1CHbg{oK^H=K#V4P%b877VP z@rrjHrYe;-*PM&@6h+}DwpgjN_jkKokBoO&=JP47@;pz`q0XaAUBUlX=QbTl zFs1J{KP&&C08t5SsbzWiuLH8(oFTm{RT1**l0Mn#Y}tfXc+dTgmW<{x8%jmIP~thI z=n5|!74RX~`NC$brlUjguCo;vL}erq_=y@fMP@dDZA_m)0Xi`uP+KQvgOG1uyOGP9 z@Zv8>;{9uA;-%BSP9$OWPkftHCPOYy(V_s%?=;0clW8|KWl=r+->?jab3J)n@Qg5$O=0u*>dFP?8&P`Yf~2;zy?ki zRUX5_WDU4%(KqbfBzXzT?#mI&RlL!kWTe~fxX+al7092Ewn34N%8G07!*gw9vGEu= zaeN@>bLY=;T3Q^{PD@Lp``ngPV1SlXR-DsoHRgUtTdgl~kW75M`EY@gNHA}N9UU)$ zhmc%cZcHTC>D5%*eaHoc*-STmj_@1%=L+L0HMT{KC2g;lW6bv)?NQ0%yK52Ld2fU| za5xdXXaEu9kX_Bvaw1r>D-nFY$&BvPb{R|(!^%r{C8&eR_n_5%`+qU<4TM?+{_7r* zr~e*FqB&Wn4b2QTqK2PY8_|HU@Eq}=TGm-iVYcgqGSeDT;}Eqt{h=DTJB_%d!|$PF zCWGf?#o@tdi5!2y89S;GrJ<$2t;x33{GHzWRUHx#RTuv5pWvacLF9%C@UbZxdFN-V zxmMzgGt>yCNz*DpY~OL+q(*LyWqZ#jKHmov!4xi!!O)`td4*5#9&pwNYU%Kzv$bLp#puT9_iM zJC_*^1`ElhAz65q+ShsTm=&vXXs5pA3fM+?qbvKK5_T9|joeJ^A*XeX3AT|bliGzC z*;ztZ#0kExq|5!XgNZaTikqnmM*41scwQ791yGLXh4c>l{sA{n%nPxy{0wRx`iGCA9HWdySGl|2PigF=UBK$t=D zt_OI`>`FEr-WiY24fM;7&**S>2gWq+`e4@yxl<>;7d5of{pdl z(aL4MoohG2$WB`@G~tRw4|d2`{PR&)d%4($V_ILh9dZ$wSA-l9 zZSq!yA|32%4bDX`^C_GDh_ib|UKavdg zTnZFE@JK|Pj_td}JFPzG?O2Pr+?085VG6=+Lat9+Gp_&}YuD3!fLS{MSICxJT8DGG zU7HxLtYl$9`b$=LUZyB*AhQ3NJe`IoGUBE+t33~fogVlP0K>*yJa;A2>Rq8a%p%H> z>D3GvdIpo~Sc(-IjDHE_Fr2X=;s^9@$`}*TyD{?$S~UF!^p0l`$e}l&4nXg}{3dFi zHVjwOd{gp>_NKoB;`%IucRBR#*fA2b?uyvG^Bl?4A)RErURj zK=O~zMWUz{Gw~la^SihbvzB&%) zb$x2+I|@@5qwD(9{ZhNr6r}Fv!>6#Bz6LZ^fN{5AO#O|njmDahkHsH6@a;9l&9!=+ zaQ(V`do9?SUrzldu#T02ngxzyZSU=7)DbOgn8o@M;Pd3D~?7|x%JpDQa7(z;phq%Ibc7+ zhkR+|$j74%#G@@A)ijSAL<6c6etZ=L2VrbLBrnBu4Cd7S)92yO&$WKiJ$4!FYctIo z9*S(^`3~^6=_}$#Rm=)j?NTy z(iJ(Y4;FZiiD0upVK93Ar}PcyzD~#ETbd1$*Wd8@%Pq3x?OWv*3iFrYpV+rgR=z@g zMANTwb%ViOX{eMm#c9pBx5xF>CAUpMvGIgWa_Zey;ltKDkpoG{Euw4d;=!r%FsZ%e z^knwxQx`DD@gfCp&&E3rwU?F5ckw2P@_2)S32M@m2^n6k2}@`WB&)+B z8a5_pYnwl zrWC&_{N-jeA2huB2YJW>#TH&^y+)T-_az3#9)6dH?=g2ks>39Yc&Dvx7dB*NQE3gV zb1KfFpQ|!37qa5PQoGhuj4B!kmDZ$A+HW|+d3`MqWrcHp%$}{sWKW+G%%CbCRCMdh zeuNy5Y@)6j%2L;@8cL3*zZVUsYh3Axtr`RoGzKtm>a*VK*`j@1<1her^GY4?*=!rg z%NtaLPpptW3^1=0I@oR;0w-^}YkpW$od)w9N_jF-C=ThhbUMT3Q{)9Q{R`0~ z5!CN%HMFMhz~O{RD-vGsN)n68Ybr|IX4h!3Kz^z>?05we@E)DKD3j!_IrgBlvJug8 zDTvR;A$|K+HwEDoD4lb#hGx9lP*i~G zFRMz~tmp()4Lcfi4aV=A=y-2vd|{C)>UggtzHn2i-Ic``-sbKq;tOZEyPEjITHUq3 z*GA>>MXxD;5}a`9VY}1%_{#ss+qb|+QJw84kcEJRU6epX&_yE#6dNo`u%JOBPH>|^ zQ6t3~{Vb)5Z3+oQ1r1Grtjh>mTdmbf`&n=GS~aK@C4k&iM6e1f7q!J1;{~yD74mnh=A8HbzUMtREAJyU@r97oz_!n&ti=(ZV)8tl_T@HpEe;JG zacp!fP}NDFJ6(weBQb>NXm%=EsfGD-7gS_~XbEoM$`43$A;700+{iGgmT?EoDq`Rg zTEI$DW21DB?zrZVXh*njlKOp1eQ=~YZ3W}Fv0H#Dl* z%ER4L`Q!AD5Pw{%e`NE=W&FV}mosiRXXKA#D6bZYU{C|zV@SX+R?$aT|1kqDLXR!5 z>IBx3%S-h6o+LCivoaoD0!(`o0zI{3g6WIXY;s9+#SKG+D>9@|lte!zF5ReJveSa? znzrZtrg=06UyJW-n_3HkN+19wR_7RZ#&NbZ0tJM!kd^=o(s_=t(|byXfIZ%; zwx#BYt(Ty~8G;3tz(=nIbrrxTaqbYh(OTm&@AAcM1OSkJr=vb8BVpF6cV(p^I0q7TRxy2feL zS9IiQ)TivmVbr*PS4w;C2FT_3nlUOiCDi<79q51dHh6#Q6k5EJ3Ng)0HO#DAvc@cXL$|hJ!LD(DYGn zX{;O?p$6Eiy|LM^;9{`#WRas2`{Fx?!b$#fUVV~sggvNQj*xwfz!&=T z3Vyj9iFfqsSafucK+T=rbT?+;ww{jsls_x;-t`Ah3(haV5(1KesBV>#=k z2wDOva0)nN)&AaHD3C2P;t;4>l?=hybe@{v9=>$uRkF3yiE*6$x$wBeL`{J7!@;Z! z81m>9a9sy*P^ZHi<^^b5yc-j%G!{`A`nt`}_!HplC%_>cm8Ia$aem*Wejm78EqV&! zP?v0xkihy=)C!YqtGIM;D+ld&F!K`&*sROx&Hj=J3XE!YX|PtB@zS9B9+w8Z?nFdL zCxk$Q22F!Cq(Pn&Y100aKXf`C8XRqTXi&v;kxPSfy)+Ot780lh7Is1`x%xd-dw+in77O4uZhT7p>9pUwd`|3|Ua1TJx9EbZ5cn7%Yca)G3T0nCc zD-26ag+&n?uvXj=UtvfJ$5$9aa!Sy$0U7_*tK?@-$aKGhmr^Vsg(wPHk2ov-u%g1@ zCA0^ZUCVBaWx@Gb;zw0RjPKPFS_EE0*ThC%cd!RyRej1toKo0qn$!9Udj#QQIrF4P z<`YZ?m!e07zi?$pc*||d92>~3;YYFA)iuRb>QzE0Du3Ap%$TVFE6#cqWG%3Q<$Gao zbQm^kIioYIte_Tai6Mk*jzmD8t&1J{O*tHK}$FS(#1~y@Vg$UG-4g&n!jqIdQ28qb!HOi3kZk{`gaju(0_ci+IX~s zl`-Vg9rt6&vTI;vIAc>$(#uJe!mRXws#MoYSGqf?5@pD~Nmcs5>269=B}$xqsj4*1>8>oP62~8Q zAuEB(GK7Q%UktjOo~HyLM9U7k6 z;w_7QkmEdr;YaL&yd1H^h(#B&ao9~~WkCHNoJ&0wHq{vy+by^{#Cl^So3p-MkI{G? z9$afU`$5c-e0@Ib!x$xC@U3{Jk5R?on=)*eFRKkSxGXC^1kJ*@Ue@%3(@L``-hpo( zP?4l^y9jzRtbRz~P@X6zSkj_y5j~mxC7wB0$N@ziJLG*5y!@#Z{J;>`d`|VSawXft zjUmOX1X+cH*Xs>1O2phYws7s2JYE;B{aVFZvp)#lzKPGw%R6u&hD6>{eajD60H^t! zD2hBaP|wK3Q3V`(j=bUz#AJpJAP|aVSeJApCVUMF3)kVS-jar7<*j}KW)WK>iqzMa ze^Mb$HuF~-B&5-_;5}EZ7-ezU6;7C%{jTs=X2Gw(B#t=BYIHXIo8a6@Qs#`l_!Pq= zQE`@@i_(ah6^ul)uoW#(3eY+JR7?O?8P+`=6cdCfJU|CEtxs;F5bM~kibxg1ab==! zJp_j7zfaA1#{`g_xR8rfb%%jofQIj!UWrH~h}RhxA`+re30eK5>kqw{dy~p{qPU{RmC=JsO4ozxUu~m^# zm`cxTUkI?{0T-sSZ-{!R4k;3<_XO^Y!|_TA(WhS+CwKzqcTOK{WMZ9u0=b{eP(mt5 zy5zR!k$R_{si}8#I{ZkuaSM|Pr=bOMXk8O-5@R^6-XhC(can1DaCU`}{*y?^soR~Z zi5g~R$snB-`T7BF)0Y)bJpJ5lMys_GxqvDas zYz)pliB$(Kqa2qT<_qe`)2(ufL+e{cbL-hgJ&bq%J#v4qUIWQl{@J}~Ma;1P1GjB4 z@4q6eJCi8@rjlM$!UOOc_G(km{8scDBMxUVa@wm5a%)<-N4G=xGlyDC_4&YywRS~bTN z(gpz{K~5nDescP=Hsy45s+@Kb$TU5;OAU&E(-|enBB$6vcEMzh6$qXEcM9;YhG_w= zz-4+V>hD!h3h;04PZVG;CaP^M!x2hsuC$EU~el9j4z?VT6h@7)b9yKUjlJ555fJpkY8lSq4!%2MMx0Y~6I9A`CPR$w-As z>k`tt*q%mx#v1P_{4_^?)khIp69X1d0HT8CQ2ji z2F`DcI9&_P3GLxB@ei6NE@M3?czUoYEW*pLgBr0YCfCvZE`v>1Yzp zl_JOP5u32J_uf%$z>`C&NE_g5Bjb= z*+crW+Rq)2IeYKcF(<%(gzYoab~X;bLf|=9T1QZGAptW3)1BX2k^n6h{56{B&rpCq z{Fn>qI4_`5T>yRl(nLV(7B>z( zDi&&88Vw;tM_Uk!yR^KF?}_zJ!3L-$9O*KHWtkfqItCX_K}f03o1Aq}h3`K@r6I5- zFY6^P_vvFx7&{N&9W-NjI}$sBZjQza>&M383iho0(&+2P?oFdw*Wk(eNdLDZnVYCJ zNRYu0Fbf{C9wjXy1!3UMS|%85x(PRX^8C!X%qOp0sStm!p))Rw8^fzTFD@LVj)gxj z^KIPixt^Db@&ebnIIJk6Y#k&ep>syLC+h@EeL;q}PLu_+h=%Tx!9JZLv{Egq6c35&Ii?EA3h2TL(F3}Wtr!yb z2bRubF=H_lms1C=3G0=wuOxsN<1)N=26HHf{2_jJzJ#4G1^j{;5Nwsd89tntBCLd+ zIdD@vk-ZIdkjTcpc=HRjAjj7Xb-pVe!#^pm9?vm`;rO16w%iy=Mo8In&k=Np?g z6GNIo-gm@-nK_*rP&bN`U}HId_>`PN#uZ}*Y0;btx<4lwA|C1RrZB@<>SAO!bd2Tx z4DXP$x3esIE|{-e7L8@0)K~Jy-$n8}P%>HNU)J#_jPgeLJpFWe?9QF9-=S?Y7%w$J zD3}(EBBd2)?G#q1;5Vh5A{jxs#d0X;4n8+?raj0g5p!s7oKIKT2%d~zgR|`4Ytq}N;aSrh6 zKprO*(~w^vh1%+oWcqhVkO0Z#w~hu7HR30u##wh$3LJqmv2IuDmjIh-uOo{(nfe_a zssz&dW;I1c^G);CzJvh?HN`0)VXReB6)a?XPKhH9u*Mm9ZfEgTGtl>cDOOqS=76(H znFBuOU-2ApPvn5_9RXVD*6ow9a0RW+;WM@-a1;ZMmJcb2O4%{g*?c4FfsPPQ+5;&2 zLh?u{`^w)c?NtFNybcPWeGfN5doC7M6WRiDnFOTWvffy!#Dt#4X|v_!T}$hN4JY9Rgdg@@ z>T}3y`wli?23|N*OZ@|K=@;T!Hi`ZkG7NQUs*@_}SYefNI zbNmHAU^x8+$EmpX5#8U@y1y56e@k?KtN01U5-mL3{-9yj#OX@xVA*7Rla&whz;5Lp z-0c;)Q-lFBKR|YETcg-j$hQi}u1XEaB!1%jgCn%^KzUUWSx~AczoaurucHplMQUgi zIO9`xswQWcyRJoR1PCqO;Ayc+I%A8w!7^$M{GE7FZ8NN2N{d$G%NV2l4_AMB_pi%& z5#1O<)qg&T@p7eM@(0fgfrU*fzRy^PDf`P|mqu5f(sD z#qd^U>$VupEgg9f>ozo|qh;I!DbX@ywl*(f7R$n%3Zz#MD(}7Zbi=#}nYUVm$w#?i za&1V0Hm=7;d@4nl(VtD`%q+g-A;xWE=yD8O|DwW6VUI;tJH5D3ojq zq&78f6Ky(1Y17S0n-EsXy7c{e%Z}{Fb+l-Xgi_KJT4`D1!4J4qfCg20YBVqdn?lTU zf!~f>$71mq@T&rTeKIh<;)g>roVOi~zQkbXnHe z_e?zih><__%O@?fW}m2W|FEla`zqDMv5_Q2l|4CbURvDeZ57;)Qn+6txJO^N$I`ce zOcim)oU}rbEFjP@rap|HzeSLT4$_P&zCKtS zg|_V%?Xo9bJ4^d1?K1=+?U-)jy`7fXlju6_LT~myG zYrP+-t0^Mt<;J7zsv0p9hg8S_AOfl2_Vf6uH%9U^Gtj4n-VgqjL#u*;?9dFSn1cSH#-!qz&$ zKI94wLBgzvh@@Wa6>j00xZ2wkfv}Vr@+D!g85q|wPM{)1ppWMH6X=RU#d8l1N3#D) zBi2Qrw?~S4@(Gc#PsLB`+~+{gSD-WP((`0RPhgC_42&lxk@>(K%X~01k8}kWL1hp? zSY2da-5k3a=#(&B-Gg*C1KaOX$f}?otHCp@P0h;eK*%_3N1#;4x(L6R_8^%j!AVwO zx(Jco%hxGAM6V2uKv)3N$G}QhF=Q$+5Wf-b*MDSpPCh}wkbBWB>Y;)GagV?cDyyu) zCv^%$gZwB*K$T$)SgJs*P;_k*MC*&cfvQ|J|DNcDS~D zO3pagu)cUDQPyP(0TtH_T!X_m9g|q8H2y1nU|zCG{MjjD5*Kn19#eD|$rQT7FXUdP zkL|a_1K~vV1i`(SK`U5HaxC&!%+P`FeyeA0) z3mZoiKR{Ejm>kBWaT0K|j)pAnBD<&g1v?(S#XM4ru9Z86Y{3?l}nEYT-Tue4R0WsMEiS=q{ z%J}uqWOIuBLF6HlfLjK|@WBuCeAI&!grArJJ@`BZD)rkcjrvu+_yi8iF;q~p>`xS} z6M_+If1J}{Mbett3i3Sm2vg-4p)U$V^EwfkQ8YDid8d8<5n#`wZGrjX9{^J*G=V|R zhAd}T7{LiMa1$kuCMhCxA-K1^W!5u~?{95+Dv>;i?FZ*DUF=7nD3pPH^kyFgx{qRZ zZCy80^(aCMw;5f?Hc%2@*_K^1kf1^~P|gtsmQss|z;lWznv_7qV>Wq-cp{rK1OK}( zg@}a>{&M-qNkYWtzk-N;+qc(;gfFrpLQ{qBO*7Ks8#p|C%QyPq`|REne2cki1$0a{ z4=+e!!+QI%cJYP1)cbekWFG(hyYyBT2p*qY#+dyU$v5*Tx$+_gJK)xRYK17Kwd%XG zwD}XP9K%|H*w8*|@dE_oj%zfbAc~J*`i%?S*!~VORK;|aVwY7Irk2`6)zoz%SV*{V zPG-hbtV@wa8P)ldViS(dl9Ua)Cy*SwST{>A&VF;opk_&PSg94FH#ihbf3j!9dm;Hm z-cKNTT&*&6j=sC5r#K=vwhOGhRj~!87Bm;{3+OjW$C5j9()o-y%)n39sOrl4_eVAB zszr%r*4g5qcQKlQwYwcAJ4Lj&6|?;LyiVmY;t-yAco2Rj!74`@K&UX65H4;~5Q4W{ zn-3a2BKYYoux8*C4}_|S5H{8MLwKsrv;;E$Nn+^jaY#unL92t=vKe@PR~+XTq%*d7 zZ5u6qs4@#QG()ad@+2o~G&}$v1{WDw!9`fP?ug@tVEtS?r;W*6*MM@|@C^~2Onx_i zk`;^OWy9`Z0a{)bXC9WIesZ5zP(=)yWS6qI3my5_QWokI#|pl6I3}}gWY_bz_zS>b zNy1pYdWbHWfxRCoIcQ`{kORhIS`OC#+iBIA`C`Kpbi-f_3F11&cO>y(eeoCAxB>(m zjvI^nN7y$@#e+Fq#fQr&*eBvaiT_Of8M`8kb;XGJFvqx%6^8$)2Bzx-8YcN2GYUv+ z1I8|_jU94lFgul8gTZ8J0oJpJcziEshUgU42+zqg@$InHpnYVaQY^?uv9oY0j#TRh zjw^xaL6&4_!q5rTrSozcKX`b_ki*y=EL7`50f#0U-pNL!HJdErI%Ksb5oQp#Q1_0$ zt`-QvhDV?R4KTYL3t$&#tlzTLh`g}HlsDSwaZ!~(W+I#FSXrg<#0+?1g*>VvSA<)J zSL`7r!q#9%AmQ49HwXn$g^bs+Dn(YNee@5=H+J+xMfzH^A5;s$fHbObpFeH@CgGe0 zq-QhI1O0egG5dBUaKIlKJ?kkw`amn_4V)ksMbv07#x7H~tybDJ16PZ{CDh{F=wpLP zQ!O62+5*5L72s&x8?yaDw`%70LmT!w8Lm-AbV?_%YgxFam@~yUtde*(M-e)jZ9mAm zLKIS-xL7wPHo4{-G&vL1T=sN{^*fR6d{6^UWZPFeO~~6nN_=}B-#%MvFot9%!VK)b zj-fM=8+jwQgj!8l*Ji(s;X`t~mrw5d#KSn1Ll4Qrn6SYaew)a{`aL+qPt*y!6>6ZO z64No5OH9<6Ij75w42YxO_>;$6!toSmGf5K5DOo9m8ieuSK3PQp-U<6H>5V{I7IKjC}>$uNQxDi36h8cs1>qq&^LmJU|Ov?9$=tlZs6{`Zas0c z<6{z0va0_C3cd#cx=92TfduW=3oM4QQ z^Wj=AIir0&5=Sf6jiir3?M9{wqcd5fdod1I9p9U>UO`S*V!c7@l z-n)MesWjvco&g7(*8LX)y+Wj>Hh z`y+++H!gQ+|3qAr9onBf-AntNV?4CK)fMH5k0j7uMA;gPFoO6q-l@4+Qv!U&O)rq` zFmW$XN`nQTxVUI+@8||hywVnRHfF66df-F|92d+0y8e?&qss=qsi_7t>ZML}L(9k5 z1vz0fNfaoPkDRmc(ehG4*XXN`9>m5Jc&l~gAHn==hxyQnB>vx}_>V3p0|w{={oFiz;Q1!4skYHI^FU;PKzG$jtgNo-76WLzf1dZth+G>2b!aj~24|E^h^! zy6*Ht=e8KGDp$MTA05(cAjL?+Ne`C?v(U?9TddoRRs z8HdeO)b>ERlL~_EBgxmUGlnSIWLIT@8m6h=#vb?Uk~JRjW}k zn6F7~YIueYU12b-2k!&pF7hzW-=4igj8e`&E_R#)l{Y8YaEH{|)4k?svXJ&HLm7+& zBi8>zjp7S`NLD0;Vqvq3;t6pS9Yy+hsu#uOy*-Nbt*c1=oJ&I!jF@A;;^0^h{sH(0 zlad3e^1G0O+j_tC4m^=A!9~uNxh|1z&i`RtA(6=N4VZl6rmYxOBvip{>4aqPsrN}N z%)4#mGlm`Y+bPrAM5ZBfSQkUOLR?|uFo_RwTeVn;TRA1RLW^6}j*DA4r6$|zHC5Xa ziW>;nO>*bi*6qE7YO>exacNv8TbPoGgIh*BTZJhPzjAS+f%)RE{J|Wez%+A;HfceBOCJi6tjp)W z;tG11OwNJ+V$nsH_f~lY{R5SjP`Z4a)TS;E{j&msy1elo$nv==^_gUUe@M2pufH9G zbDtru^?N$F!Cglc+!YzYSH!#-am|58tk|gW`|555gy1L9hzjn0w%En*)Oy!eIf{IA z0)G3C@+fkK)Fyu8blm7fBRazO0#d&x3o$|co|17It9;Vu!^d1R@ zA;~NHWC{Y#@l+ccCI!e7?l~g;yS4Khi_5uVf08^vc(PVW{Ob zYt`>456ZSBz(4Jh)L6fmfDs8pq?_Nwh=i~lIWN=VbOE0gXbE-02jEu-{EC)YSD?F= zyZ!w~K-teq(hD;J{Da17CGE#$YQZKoR%}>Z-A&VPc5lk;qny;i?bp&hR;kk_O`^}N zGH~1-4KJ@Cnqow`#0mtEQK9uD_miLlxt)dK0AGZ1A!OqDMT}eAd0)p60}%{pmsiRm zdTwL#jB+d|+?P51d@iYgywv=_88{qA-isZ;#NTh1 z)bGfIQhJRCi(5X1j2jRbccev`O8csrbNL2^y!GXs$p%nGG812L4dAT}DF!g_dN1wv zb@wRrSgB2gzC_1?G=OF~76I+UDbzh_;lz7mmq4q1G5%QZ-wDD#??iG+`klaJS#mti z>}aYDfWjvPGe-vJ>hV5C{%Xp8&yh7}v+ZPa0htY1oj-Jx01{x`cyO1PVUZ{3yJILI zHOH>kgnJ%Kh1s0c@uUR?FLDVNkgO(@H|`m?{@hEr<{S^<-kU)(lW=`>bm^uAIGBKB zdm*XclUrR(LRKG-zX&TZ)Dn0gA{<^N)&`tyJ@+NYp7*`vIP*desvaP${&#?J6CB3* z+s|U!&sm?>QQBcbYiUAjndMT+P3RkqiR5ta+`?Y9{fXgt0#KuX>9?o(GBV4L$fr8M z(!kV-$`+A<;LP5bq943C3{Wpt#g{^SW>~dw0%R75!0a%rQ4vF|g{%ZaC+)(TN{z`U*#lSVEl_=u#A-7ID1-eRLA}HfuSb!O;laUeM)BP^2MOhtOxt!%w;I|S{2ljB3PB!8pIm;aB-mn&X9 zuJ~%|Pw-In;uW=%MBg>XwWtYM8^`4jGoq-9;e?nv{;sYUZa_zhqjrYm$D3X^lC{MDqcWA!#Gu@9^hAI)b-%EuE^XzJ$XG5-t zJTp|X)Dm!LEk!fHN}a=kM8eikNi1;Q-+EvlQn#%UbKF)rW0CrB9wd4895x*7wiPIC z1?h+v2x>iuJv01;)^UE8tL7r*OrJZD&l{~RSutsVvq@G>NBj`q7_~~8*LR6RgfslAYOEXlh49#BV`rF;V^%*=UT&@u@+6LU80c%8I_utWx$2$TO5Aa_cE%AB8XJr5Zg@>4<%x&S|GN6*U^%I z29zg|xeBV5g@S6SK~{-r)ABsY{t>j#DvUu7xh7cKdVXAMIOq9D{#dU^2q%s&3LtV! ze^RJbq*Hwq&2usE%J7UdC@9BZi#r8HWEDVqh9L{r(0!uLu-iOVPKF^|*AdHk>M1wk z8>Gjj@rdu5YrM|4q?5<_9*~_>q}~0$Q7v;AGU_&<+ZO`hK{pZKX(JJfKqn{D1@RBy zhTqbr=4ilVy$o}~$6+|;Vu}jP0BhEBMa$MGMjlUin@?;%IOiJ@sQvM8PR$tHl7yU9 zB;S}AJhgdRH+&EL8>d1}41TqW-#5zlQ&&yv$6q`zlJ$bW;XtpP;DiBA0dIfg?w0N~ zyyUA~_@WA6m`+@+h-ba5m)r?^WXODskbdZsZs2pfEVG2}!*c2L-u6l_?N?=aXkRI{ zN&Egf7)8Wrz19fY?|^J4$=5&A(Zei1h)^?YdPMO8o~n6UN32O-!ri{$1C(*8v0)ol zZxce8MHbrzWj< z0s;PYm6rf3J9-H4qSPhA1CkvYD118;uPX zsp3zCV{rd8h1U73O)B(Rpj41lcx4W# z(8a5QN%FukIP?RWH5r-(9fW!@_)Q!S;5IMuZkYd5m$X6(proh?$0Mc&qH1NXQ>qGu zmVl3q)h{oGgzP!0W}-7h8_w5!-*0})c^}rUqt4+}QonRN*iXBGSRxzI0QCwi)V~ty z63eN_2u1}QFB>wDC@(G3{&7Z)EfBg=db`lPFP_;qz zRpsPIg0m&FhwdlQn$%MC7<1LJRSJt6GUEqF0S{IxDN>^VwLMmQmFac=@a&#->+whBHW<-n*>K-9kEH}&u(e@gZr z|0bpU=Ep(qU+F%e1KMNB>d3C>Ls1Bit;jg_3#6`F$i~nyta|*)!1_JeH3sWLib>Jv zC{!iGaAI>T(C-nDb4d;MTZmQ)z=hDNA}moLFXbr-%lNA0Bcy_+>qW?61_%WO?9vQO zd^?^W3M)>0GhUks7b5li`h$%9tcG8M_FpB^o~ATOKHHH@&)x6koAB_Rff^Rb+_|Ki%c{*o<$pv6Os`Upr7 zd&BJl(@7YIU=X-wdUtFm1-kKET;SFhy^0`telsxg%@jpgqff#>TaurKNJyM<&OT9u zAKwDdIp|b@RucR_#_%2Xa}wphlJXBLr^kPkEtn{ky!yxM1Ug<~Jt$Z>!%P^8-)OX| z3~z4h9?FW7PIBfjlXF{7>sck`)fjHZb6fY}CmA9hp_t?{+#G?E#7C}6`q{m-4)5ZQ zQyJ+y14J1E=;=gcEE>8>sZP7WNL!l(H<^mSxwxQR0p0FGf&s`m;*MuF=qEXH#BiSe zc-ODVBa$7I3MWGTah@;a(yp78(+MyIdG#ccSUQ9=t{^|F3_wV%5gX`aTpa zB}sYlnsnkM7i>B*ar{=nZ+X`8VbnSDw_c{IRX;7ii@(}NC$GPjrW4CfX`0Cr``1tx zYxB*JzDAYW5&=w-zhUjzpJy~*66{Zx;M^BTfcib1+p|B}DfXv+PnVitT(w~hTHXW) zPx-qxO3Q9aHcD#c){hptMrra?avSuGTjeh<_8O(Pc6p4_SyG!usX*_8P)4b1lJO}~ z#^(sHt)k&MMLqB4XOu!TO0#YPZ68kx0TSptZAx45*QNRn-a^Asb4Y83_2o*%Y$%#U zl%uj^fioY7yKu+OtC-9X*`#h#?5t7P{?PJ~^%?dX*)@*AiNj--;BpRNM96CMTNb&ufeR!WN6nHy|)NOaiA-*GiZF${#0I+ui@+#D=JLVYC_PMDu3 z+k=sC5)r~NY4durq2ccZ=O2MDINkTk=d*Cy5X{+gwH|T6Tpp-{ni!+#&yak=PDoQu zBAbh3)vW+wSuhI&KYR5px00HLIAN$X8_YK_H&tY0zK>-~=Ni#a1NQkR zr;N2V;C3dJuC8AtD^%7In3yKntmUMnUK0x=VZEUDCm7Oi%R{l8Y3LQZEFu5mt3`wh zTTEfTdPF&`bKYaT5-56((oO>c+g5ohdo%-!SH%5~Se9&SOu3?zSfP-}gowk^Z$uf) zz*~z{L$zFBUWayusJ4FPX{%O=(7}uR+nT1@!r-l@FSB_I*+T4CBX${VoDu_dz>!QA z9j&F~Y1Tr{cHXN}UFYR-bnLt*<$;zLp0|Tj`{w_i56#ohlrRNZGd@~5&6dpTUr~gM0;d)+ix?~En5F22plCVV56Q(Sr*V6C zATRj|9RUL5a*!KKG|fQMQ;HIh9|Zh^*|Hh0N0=yX6yltE&g{wf|}pa_h(~+CF{zq(T5G zDEKmsz&p)x1mGmu@YNUiBe3a9-B6|UCgMmTbth6h#9I6}>JI$NIK7rmR1ZQ_oUIls zzj3#y9#LUJ7@BMs-Pd*8#^4I_T7=Dv$$;>&&yutHJzZse z+7Yro4RO{OMqF)FZs)N|9C|RfKCJ@T?-V_b>u)^%xs^np^*OyZ_dhj?$|S`NE0}3&MJ9mmvfV++AuGzI-!9RRmJMW>Y;JfmP&IuQ{=i3 zLPSZb;;;k$oRjKqSAFwa*O5e;PmZ|+aQ6r(dW^DA|A6(#y>U1tlZSUgy~40xuy}IJ z4i-)E+awkiqGIEjs$vl<7OPELlqkSbZasL5GOiU`*=62UXG+b$fLG$$szZrq&sS=Y z>;+G5p%_^uzXXe}N-(ua;}h^}n~GN(RlKT@dR$>@>Q7KsBEWb;9*33e=~3Mse{o^R zKg3>hgU-|Z2Hmx;TTCf)W_aB&w^Cl~s$M(7sXS6wR)a#=jr-14G71(swpd0Z^OP8Y z5le*jJ(2&^RfPiFgw~~u1jbw{=$qY57;#sAom3~M!DJB{jBT}>gF+WrXTp4t<$@PZ z6{PS2d=VheesKh|Kw*CmDj(dF%z49Q1REZfj-2HaxOW@}vc-N3!Q#v;PBbd!;(eTQ ztI#Qn)p0j44|gXpoZ}wlh@7Z_FkS>Ob(Bjm;d901NfraQjlAVG6_+yK!IS$kzojht>vw*l$F5%H`-63YM&_Pyb8ZAy=stdI}^Sb!R|rer4e z&D`Ny(_`h1DRd;BQI;*AQ{uIz`Ig6;?ifSCp!1k15ur+*v^0yn4tm+)zlPdAof2W@ zeEnAqQseb)f^=Yk3sOuv5s)V7Nb;$3y&&E3sRyJhU64MjX6p_}R_uBx?q%*IecZlE zJbAC^+vgC1$q-oNvnG*8U{B*hk_zfk$4@AM6ZVOk_Tg*jL*$<$h9x59dXXryM)M}} z!SGeV`7&ZObMN|!phL@I*SW~+Pz$|{EvNXXu3$3P69}z_?mAa9cfr<9XcL=49~79B zkO)gDB-Y!Sta#DUZW-B*5&2Q|#)M)yzn?EOE;FJXG_s;Xd`m$PpUi;Vi=75IVJg8w zc8pQkBlx_V-{HNX=W^H*?1X@Eo$OUW&p50~Vh`GQ1hRhu@Td^7ZY-8-EzLj&$wO1; zU|sS9L4!%5 zw?_FlbiUKj0^N|ohRStAdl$ta63dWn&Cv}Bk6`@33Q>oH|I`qzxI;ly!Gs_THsctaLG{aVGFiuIs zUmkFz;rg>g8luhiO*DZxLqW2;j#OwK)ZmN@A+yN>AzcTE5&KJ)ikm(m53Jw(45Z_1 ztxLKje=YjoN(fWp*+QYr^C$~8<(&C(Frxu^VAy@36CL^~DFxxmIT23@ z7Nk=~i~NQ$$*DX=HFXysDi*UMq=^iQhrqF%{GjaD%axDZWAV|l4z}~PkJvs0U-d`R z+o4L~UntL7X32-_;=@$>Yu#m?;gj-_`xHOWA3BwMI6a};srB=TpwvG#rIO_91e&q> z&jILUybb$UOp=!ieO?jnHafxpiB1p(oLFP@j;`U3b#xuZ-3eIUFG9m>t>pwZv)|(P zJHe!Fs2RZ$X~A0aQ%B^0D|js)iQ$CEmR^NPzYPqEVS5Z@vS@qgcFjQKel$o%SVxXf zg5?M!pcNu`Uo-=mmncP5gE@|=&`9U!;?h>Ar0uSe{?gX%BayZfe+n8d0S%Mr*HO_A zgr^pOenmt>Y2F{vncktpQ}N8)r#F!pYiiJjqkoI9b%+6+!hGJg{vp~s)!kx>>dD$D zi-3K#vG;ur(KesyXyat1jg=QE`Y0RSL(%8czs2dJwXqu1_S44Cw+ej%*MdIV66ga> z*75S4hY&C8{UdUrlMZ#<*%mk^6;nIIl=v*nI$^qA8*P1cgIX>S;%&q?Yagzvz=ES$ z`ZY>iw$&5ozw+W@R&5wVF2dbQ49L{Uv3%eLh0c3aPX`1Jitt0h1+T^3H#m>{4HX*+ z(Q3)gFuQ|DI@fn2LKv8@Dlw~3gGwUn&b9HGvB0LeNC}%`vr#&drL}5}fipsIPO+J% zjvj%x-T|!cB4)?{i#vD1SL%&wfWGJ%i62x)El&~OIB6ttCOAo2hi(|y2|WORp7q+< zWWRc1bD@m)b!+$4T8izJ5CIk`LPKIdKSm)7!znt>K9JU~6L395S?<;Y(U9ZNc{g|b zq6dm(PtkP-k|Euqw2Y?(v^bMk&aveA*Q>fJg5VN9^2H!f{E8F=q0M<1Lb((~%!3Tu!mA+NgWLkSWzeQ6~rO4|fJC+Kg`=f-HsK9QS9X-T=L z+BtD4iJ74O5`mjy=v-wiWVuh1n{$u|GoO}PGH8QMu^#KBH~`D!?oE0W@iO+SLuVsy zF&Wz^06C$ilVyKaIhL0-@FVhD-=(lZ zJgBQ)La&nc$#i%Y95LXOsd@{fb-suK5q~fhgwW9}e&q3ol1MSK9n=645+VeVnIVTU zj!Nr+AIzy|d4IfPtLM=kxvpSK0GzH2tXW8iVt1<4io+Zy><5_CE=R!4+>>N8G#QDI zDs-Z}D{G-;1SnpUVZNFBX_b;;WvcsWv=N=a@moD_P%><=dBk>9HWXCB+a3LcBfavF zqWjPp{-S&A`y#rS20fL1LDB$IHnZ7Oe#J*^8x+|^@F`^_S)_-koe&kly1fU1t<`cR zr0gL##7&Yf+$_iV15S7{G#367OhNDzKhCT>ZU?0MFvrR|*WlcKV%8CraUnkw*yebY z?C%V;E( zMGSS;Alv#UHmhoX!Ij+tV{vb1Ut=$j`MSqQGCF?)6PS;0Be6>+KEQ}QqqC!0m;ysrw07V|ZV(_k%dkdL|@x-MM1BOfv- zl2sMO0)X5JNRfba;q9*mDPiQ>3sc|DMy@MReKP)LV@A_=JU2Df)&-jM)X*LZ+A6jWa1ivS7+7pUZW-aZUeFri2KPxM8lBK4{Dcm>So z%6;xIH_3i-3=8`Sm7EMW2m1+MM-Wxklspiq5re8qW zsX3i?ys#0+UyMcM;zUU_wP?CPFFfdiT{-kkFkyMHbz!U;-`An$4S989G}N*bzq4vE zHIAn6^I81Nu6aU!Vr@gq|5_U^2Vy*VyxsA;%)$R3@cZfIsrY5pjF5Ghg0QAu zzi@hs{3_0J&=K!n;mfbe1b&6Q=s1n_D9&zq-a7pedpne>=*So{00Bh}2orEbAZN{fUe(Cs3lLX5Py%5XLP*e_@B-JyR5Awu z`Q|xD_!hRpAGjK+CJP7x*)z_Or=<@`!5E>T(#_2%_M#u zF1!b}9v-|i_0h_Q3hx(V+lTj#!=!Hx?1oq>*Z~rqE8(J9`8$o^DN9^lq)>S!u4p?P zDi0&nJggx_AJpLrsrh)ozz$O6;YujIAH2a(&hh{5%zcTgrd^l@`YwkD{m$ToX4T@0 zATIyaA+3PBV6H9)R#*(<$_`~HNq!`al(N69ZFwKL$WMN_Khp>fQl}7#dZe(V=iwn` zJ$Mm-zbFa#RQR6*x`>C04^>|eeCP*15_2;yJ_IDNI`MGiimTY(ws5pnCKwWLzG6ws zAFSmU0>2-m#m_uU{5C(+hWz2kN`J=OjJvK6M^}y@;JoiiS)?R+QYUAo&M##s?ybR9=FLuHxq0qtH38R330229fnk=y5JopDsiShbutPDwOFPW ztVkKaKi>sESs&!u37`3qw%{M^I(a9-LkD5axkhDYfDglM6$fc7T=a+tA{)t9xhTyz ze3WjC0HvWCr6hhFEk*>8YEwDCf{D2yU*TfI@)(M84G@(8+CLU~lTnZHX#Wl^>UK}nz zH{b6eb^H80QlBYu`25_n)6>bJ@$*~bKf}+>dQYYR?Z?k~T1v&T{2%$5{eR-;kwh^a zKc80eTS)nh=Xc9J<6p>f!uVGZ;YMYq&v6e_bPeSb0w&S3Nb1Kpd}a*?iB(A%)L-f~ zeo$i_Qs=RCCDTewIr!XoF_QxkhVg4~fTtQEirK}evgNl{5pD*yf2briNgw~rTye_! zbimdc`VcTaRy1%mTC$u1KoG8*<9-mi;vXVc|BJ)ptRg+5n@43$_s)~<%6niuWqww5~tS@-X9F;kA9WL(#?8D!h`g0@JZBN9^ z+QSP?ah6oh-kZB_OdnjOz)D0~Wyn8F9w`2imZ6q`TJ0#4u_ z5>7ZLDg?x`Qw8AredIv=|~xoK%fBiDcBN$|1qGdu?zvrsV4wCFp4-0UpqAyjM_n-fD=26 z80yzA&t7Kj`zu>j(aIZdwAZe#b}OG4?OPRZb9_RZ?Y7q+w*!aV_KpfRbt`P_7HaHU7;mjxLTgF(AUH># z4*)AT8Do@>8ZOD7S=JBSj-!9rwW!zB}G_!F`m zdC~9DBsvxr3P7K+RwRm8)T;x#i>^@yrJUx?Ik0=988>g`%Dnxwx4(JY{E~>^WoJPI zQ_lyOHV*6o@bOqEE|9PlYpO#-ct({GHv^P(fbY_s`7}MV= z2~DtHsrS!O*AbJ9#-dEx5IEzUeYX=k2{OcKOhy;=Jgw^vHk;=Dxt+?McyJ0f1>Udh zkuf538s>tDC?~>eI$M{BV66zejKWN7_UZdutFf7gl?R437yeCDAx zE<2^u*q!T7?W>AB4ia;ZtM!q=X6|`^Ls)>NcEe*iw_PJvCeMflj(aYcu_ACLAi&CK z2R4wPGoC~7A%N^Hih!+UqxwyO#QL9Vv?c;`|4|GwtX?3E{k2bg;dlOny1^(1N8iyQ zIM){`&sIH1HX?x~8~P|*pe>RjpcsHFP=7k!dY&L-27=uwo=^gJS%w+7shbj6tSN!J zm9-j}6+J>dRBpNxxMW@PckBo{!us(DfZpc$5C3=gfB4NoEmG~ke^E{<{DV7t;g@Yb zX5f;pDe(XKC4v7BKWYR1q?749R1dpUk0L}hMbu$Gtg7FVdFW~ zEop>6^pMc^&x_SDx)Sk#W6e-CEmBg6m{~L3N)V@Fb{+xnk;+1-U;CgSsZ%>`u_G(NA30y21n+!pXqb8E~ZVa>Tk|G)A1Q``8Q z3=WugH|k$?RibyNAUS}BuQhE;J;dp&(Ur?Mv^25h%V72 zu6AcYc@vIkI2df`gz7_9bN9x#=o;At7~cwDH3k1~LQua~?NC-#9*`jO{knz{HFJ9u;ujn}T;Wqb|;zC^qmELnUpA z@ym%Pc&zA<)h!$G{~dh)*oboc!rcq-7a%l78`eYDfs;*?5)cX<0X4f8lo_(x{uMq{ zz(?=G_?Md^^Q`~DLWSg42B=q#lUK-yYQ7@Z?eUdDpI3Mno^|<9aDwOYB>9VJ=eFtZ zBy|M&5LY&oeEu8s%$Lu5e+XChu=Yp^{GE1AYWq+B@qIr2QkYI6+b`h=@Uc z*Hhlh<{#0`D}UJlQ}C#lI`FiZijU*R_PkC8#27$*`a?U zq(l91YW?ec>LY-!%CP_Xozsg+-m;i1F*9U=_o`I;tE?{K02pEpivD^H*@F>1pB1k(q46(<<*8 zca=zqT18lrkmM>`p0%z4X!Z?ol^*EY(0_Xx77wdxUj9&wLlk3IY3!U&or=0u-}?3n zx0-)>Q=0M>meWle@24q$==+t&@$I+I0i->A7t_c7ee88VpZ8sReO$7)OOMZ+ zi20K7L3?$O+6?=m1lK1VOr~d&Ju_4MUy^-K(uXVKo=yo!a{E%>-sM*FFQ4W*Jpb}t zY09U$jxPEAB>V;^doXW(Wsh$f+#rf<6rK| zx4r!%N1(jzyXCHs+cQ6QD(WVE>)U7G>~mGYzkEQN@-wiVyxsTHl=u3c<=f--%s-x8 zgLSgWYG4=JZN{_r`qT&e5YK*qG;f?e3H;8XuiT*REdzCCT1Q_agS zWgqvsWo*b>?$h55yPbw~ugUe3^uvr>GW9}o{bc<=qV=qXWz8`W0b9ll|)}v{@6+Fm)~2^PC4~|ptt;R<2B*2#AL@m?8Ib})bZw@ zt#>bSg1V%fOj&-r@!Ivi@tPB^^e^yYnu1dly~}`|r6SuqP~9=NZP{=2KtU!`I!^icr*- zUUB+=;U+%Xqkp{qV%&kFYpM_5_U(zTQTCQAd-$1K#umKgqALu9;{9E@Gr2!UbUcLd zj?Ztv;@T8K-tDGW(#DH}{oY>`_ZkE(EHL`Vi(g@VVc=y*h$m zAD8ScQt6pwPp{mQOixcd|)y~3^L%TIf>JIwGeUy-JKwD0&MPCJJw_5rt| zmQrtj${&mgd+m8@`Az-XFTd{icFN%|2A$w7KU{xd9r2l(rGUL=?!Uen<9_e>J`BcN z?=EzFNs_)XF-IS($#YU%_Hr`KD{?PXoki*>Rg|z{pY$eJVYZ{L6s^=boPaZ>IQnKYwITbRD=aKke;l$|t%Gyp8wUEKkDk z{$vmCZBO}^&v5b#B~SfJE$?$o`{iBxwo?xOvL>PYu>H$lKWX2;6oc{Bw0qm|FN=Hs zNBzrMECTp1_!q%piqp2ozZ~p!X#S-areRb0=lToRNZ3!f6@B>a*0(3V-EMpKWogPM zV)1u7@Yt87DIfhk%X`KBpTB?Ehc&$^W~~Zuwc%gZ_|#YaIFMw(KyFZ~a@k!%fo;cfwknhEPF5ho2-+hDM`@7xg zi?se_u+RIhfB8YOH&2hxW<-$5g5l=7uS)jzsr*j1zbXFO&tJGiwr@xr4X3uR@(Z0@ z2ky&Hdrq42bn6f1xDGzK{UrQGCVOyiedS+nJE|T3fceXpdbVHwSZ+Jz@GsZ(@|GXA zf4N|D`~Ibl{-xJlZTOcfd;CZJ%P)rfSNx0MaHP|=$G`kBbZGviX|-cRy!@ruiaf^U zw``45u|4}{cY58a=G&gV%WcNLywe+L-cQs1_U~EVo>94f@!AJ1A4*d`AU@xg1aA_4o85|zym;y>|1v1Y zYyZ9QsPggM+bHu)XzZ)QSe%10XiVxHnd$VG9V z%lF&!FJ*r3zxR$KK554^Z{w0{~&C}zv7!hQ$V7U3Qvt2i?xtGenWc!=qul@Xm zOJut&aWtITzRHhncdPm9=S0`R`N;J@Kt zh{I0Ik-fF|YjPa?j{7YP1I zv^%*D+P{2Gn(|Kna0r+DeiD9*-HJZ)sr*M*cdc5o{HgLY6PBQP`%~qEzH?ylc_04e zvo^~qd&(bAd&X(Q+rC@w3b~#0H>aWxK5l(`gWgoj{-&E4Ymff%`d7M%uJ-ENom?aB z?H>R_er|Ki*o3#-<#)Wl0|}K`KaG9N>F-0xVXIu4@cs7eqN?juUS0}FR9kPUrh-Kj|E`ix|%*@jaoCL@- z%L&iPX3BX-8Gtj?vwH)6vI;Noe8&gmN5ixN0e z4JN`3OR8}yU<3`CqcYu=XFLSiE6?O96zVu6{={Jk&QB`43|ML-F2czuyIWq1gKL>zf$oiRl8F+TB>F$dyW{-s zFKh%pxbH0+r@7?FxiPrZd-iV9H3sx}wFHl3)673u@LrBBc!B@!@P0Io{ z54^lMfx3o0400O>nc!=Tg}t~@a-raYb7icYd+1)Nyv}`qv9Wo^K)DPGxAu+d%Ij25 z62TVj0XtC@C-w-5VlN9NBWBhxDxeX;*0C~d?4Qf4atU!2j|(lAM-6>Rs6ix$b4V)6HHVx zC_0LBgsco?V~D>Htul#d|ItJOv<)oNXOxfZ_>BOLKd z@Fs)~_c1J{_z69PGGZPC6^#cp+^|Q04%YG(C^9d4b1lEGKHvQx)#t7x9jF0Gsl^Es z`>D^>)W8|k=l#^@uiMb)=lXhR2}78m&%Hy3uFuE(Tl6{WGELByGaZ78u!}xp%LO3~ zTc^HEg3h3nRVyj0I9z?UZu_l*JQSDDbSlhf!qwrTh`whP$NP4o1{kF{7fY+KSi=cC z8W@k13Li{SVL2+;nsSVXg2^iUkM4)0!neyUGHt8yD?3GnA0DSw`1awB3X8FXQjo4t zVI0L}z5S9RF0@xpuq~l8N>*V9dFpzy3TFs3?W*v7T7QT3p`=0d;6~O`g@tgm%=ifv z-shvjw7(J6*Al`L`XB3?G_kOcri2ZuV*`n^;1WUA=8^- z?H1d}x9WM*pr`Wo=e(5zth@%5Ti&*&eu_A9R&x9(@j(6OQ1Qv&F5)q;n5VUyMnOYn zu&KOD!}?&u&uL_0(+umh5> z_=-1i^Js0i;)d2>!%K2y?aTRftUn9ZE|d|R(+5tnG`hp6Zw*Z;ikKI+mPYp(^`8bK zX1~kd>Xb1m*fiotWy70;^`GIb;>H<6T8-8MFh$F>?p#7tWLy z{^ofBHzwb5Y^nLH*2wS`!Ft}dbCF0F-ZEBZA`Z~eH`9E;MWQ>&!pWc)nHpX2%S z;HAN)s_w;&)%n9#6n6((z@dQ~4D;qzqq!BaCXVIp|DFUrIDw~h;5yN4Q7LOGF0LVe zhf#WJ8%K4gtHpV$%d3`I50_K)tcB|1_v+(L^%0Yg=!kqP^R4fsh3tkUH3Jlz(3FUu zcv*NvQ6WWG`ziV>Fw+1tTMbg~M-qqNEdLcH9a>M~)!20)!0Zo#=9BmY=fH|qV<1dC zhah-k?tDHMPd#vL#2npP+PvrN()t~(rTtfxW&%5+ze=J9vN=TCVLfIll`NKi8L1k> z-<~>(XrtpybZk}}G=^`OdJ=ve3~NLb(52CJMsy1mN?~Mwfy4W)#*2hJv((3D@=?G4 z)?2#)WT2E`8-RP({#KmzE6*Ta8FC<``D_Lb8<=&FCDU1(2--MUn6+DVZAfy4jWrVT zETmeXmf1T=K>f~kI{6IgnL$e(%P-``0%p#bp&S4pN(ALb+BQIJc;B_Dy`p}9i0CpxPxyUg0uVb zTND?g?(Hz;l!#f;S~h$`u)bC70M3E`C^KUIys)Hka;MhPw?B_WKZ-;*vhLJ(B3g1I zaH{pZ3_W62BG`o6gO!NnWRwkmCs_Y9o;OB1wU*8P=PiRG(RF15KQ0@-?v~?A%}Bmd zhq4I(~*p-BYFwf57x8ci!_5TL0=ir$50d;!|gAE_z zSG>8EER*Iy)@mFgie8pZy>>-O_twE^vU_7B|BMyq!e|U%I{kbj+83(xUc@}#qf_f5 znJcJA*~UPq0rDnvgL&3)T(?8ZA-986Xv<;1a^Sko%@I+JiSiL_y5tD--P`HAGy6Wd z<=58vPH_&3`#8m2Ssa$jv#k@Q2JU~c$3hdVUh=bHJ*Y0Xo>~EU0BVG4U;y@qrky5; zpBHR84}oIy)DuQGf{=U$)oz}eLqZ%ZY*;T!WUahFpj;v!s#Q!-x2kW*aJ5>0Q8oUk zKJJze(!OT6l924+uREchmXfJ`!7fNh=eUG4f8J4v2wYu-ybjmdx=(q-B4(kAj{}47 zu+I;uuXL@>8J^a|`iNG9br`@%AygvUI&K2t1{_^$E>>`K4gUHTs6F8*jV?D{cvFYx zqoV&Xc7J3vf7UT#4!sk*$O}u~-X0nFHAH%9=$yvL01O@8h5(mDKWllxS~Nzt8w$?8 z6!eb3;MF=(&2~ZODW{f3-vo|9Ncq%35wofl!riTF+3@XC`%uM%fYu`Lq9xk*>c{HCH7JH#?K@030j}(&>Dga z+sKjXF;CGpVu;AN9RUYJmn60emwQJXljCoDlkh9dx?Up73Lm3M9nyzh({RAYZEx0JPlh z?LCFw6$m*2LzOq4)E6Tm#n*5Oi!p|{N9Ycr4>pbO((pmB;Rq=hA2x=+9yAZqzksZu z#wO$KPn^JH_Lku7i%}G8nvzr8uq)W`JM{xWC4S71myq-OsDoifj)uMgQB;K|+g05Q z=Nso?C~-?pu<53*;@gg6eV(p(3+_u9jU1pv@@GJ($8-~+-Y$M?UjEa7m4+`k=S_KX zSNh=&v<6pC{>$ zZp=S*bYu0YnWe2u%A(&T;yVxf4j?@pBGF1HKy4`2FO-4t*atPkjc8%8=^TWy)yVUn z1HP=fB^z|<+VFw8&PYYY@yN1gzV*Bf3-gJx%y5v_x1XpCx6yr@K*uOQ6KZ8uc#qak<#I_v8=XWkwYUpRj)fS*j-dAZ~ZFt@u;;(Vz6&-br}? zJ`x)W;S=EDL>l0+&9ibJ%>w+`1n{lxTB>&iKe$Q*@4rpAdWdumo~ewz@2?cAcI@QA zgyR?s$5jCw%(k@uF$)~k$j<%{Btjbe1L!%k-+%ZQB`!y45VjYmfMDGq%27xS%LYPC z0u`d&Qt(idPDh{sQtO`&3#E=5L87Iqz})X^^0+ zsL1^(_yN5`t%T!OqKkS2Pkt^>$oMIIP7%;L7u~%6PcS<6NMGS^m!q(CzQun7Kh%@& zzyQR>%mqp~RsS=e0PW7>)L`qv#-vdHGt(`d;0gwYScOlNI@`!Q#b8wE#c~)RyaY)x ziS|;}PvBvzQJmDK4g)ah`2?Ad%i2F$&X<;PQDD0eh+usTM4_Ntky6+Y13&|>O4aRh z)^-5E18)O>)cH85Xeg_6`y;2%5eN3rTQP(7Tu$1#rRLmX(4nQM3E)wlLT)UP?4qIS z1GU}y5}$gP7Ps^SjrSytFB3DLGQe`a1ennt6KRh;`X4d07?!d5@IuD$pg#lwcnu5& zC}{NyRRr`;WCnKG^y7c*e$!w41FZF+8v`on38>YN>3l)~_z}kl*pVj<+V4jd?v>MH zz*k=0qrcrv2BvdSz%?*szLVkN2h|=26~gO{=JjH7RtaBMeLkiRkx5=A(Fh3NhUaa_ zr1poZPhdd3@FtjkAe5zM`4oQ7Hvh?nTz43gN)z**{|-?;u^w*8Mc7kJ92d7hBH`wc zV(C=ZJOJvb0LJHO0N-jjKtKhDT}aQGS$tux3j^lj z;69hVNUWE-lSc3QLlRq|Jsw7xXf&XiaO^#3wBrwIpS2hTq~4 zj|1(PgrsqGV~>e(bv^SJ9P~WyTL-nR2VH5WH~_BW&oLXw$_##YU)`(_-8N}b+As+B^b^37!4f3=s)3vyr@-AF6LLXzeO*v zCgPQ!(nZI#*6n(OK28*ujbsSuU_G6SyEk8NrwX;vXSDi$u2u)N#PDqSNY8BH zLr$#@`>KF5)dvvldGZ*Lq!K`D5BnHON0qL}EX+D}$f@FdczyFj^mw3S;P*ot+6f0j z9a5w2r@~Ck8Csl(ubLPr+*ORxN4gWqiNoh3x{1V!P}U&|03$I|vvlLO&C@E_m?Oag zs z!^?>8B{?C#k-pyv^0VpNqn(z$@q0KA>Y+ZGv3rAS42NRUke2 zlZZD0f#9mCdmxSj2^V#|9r5~pGRQKBc%u>>z**1?a@2h!r70=? zh!pO4G*Y(IX}c4^p$n%?&YK*(Jp!~P68oJMxmzT$AJ|7SB+y%^R@GbED7rIu8QVv8 zf7#8avs*Z9JWg>W#NvoAMJ)Q!l46wb&xxKW&yF22t{{>_DQ2ZjHzfCL+X_qO^z9p1)1!b|Ayd zF92e)dczmO>idG#-S|F&I6CtzP>8MVhy@(0roN@w87-hTqhpOa=ymXg5B|*Vk2}+z z0|JX?li#T40e} z_%ZRm%eEBYx+;uQau0K3;jp_j?D7r#t&qQH4UE9fqBu)WP>x&q>XkPMKe|HhDn@-n z?cn82|0N@52#{KNznrLb&I$|*$7*0$Y5vw{>?TW&X=ym$Kv2lP@xDbG#t_She#4KJ zhC_Vf#{1qfes}yCa4r7;f{+^@bdg-UrSZO-Kj+wLi(RjwL_%N;5;_PcRK==F5al<1 zLfip%ukY<4I-}MZQ4ipJBo4Y5gD%0KhiZOMudOwMcF7_beTZYtS5KS!r5%q5hRE-P zQ2p9I@J9m$>Xg@j42JkZV>WUVTb(vBAhsfmYEcsp>P6Kf+GWdVf|*oPKH_R4yY642O^_Xy z3@I$E#0thDE!7s0q;qjiE5rZD3Ye^3Tmx1ByXa3z_rI=&%6U;ec%rtxdA}&M+Cy^G zVw9MahB67Mzx`S(*HS9bVzz>@Q|ZaLp#{SJzGRXC%fKY*-A*Fo0IUT-h~-) zS zWeJq4yrsa$mP~vsC)g?TlM3RMi4TaD;Dg?VMuxD3V8U>YjI}}IU}C+-K{z;#5G6X& z0tSOC%uBmVdljMc9JT!|Z4lB14~5AC^9T(#$m`Z`*!dWjBk_Q;~)u;AK+Nh9a~k8rjagG5{%QdpiR;!&)b1_T2* zjGw&$*S$;S4X6)&RqMHYz5@bEc3{ zy$T}{g(|jEH|%!2s*ZgXBQ8uDaoTv->+#kk^o9CVs(>(FfCc<=;JfB`wYW{AeJrPE zG~}!b{@>#2!zGtwxLW*rV7`hZ7Qw;~;p%xpe5***@ryBf9F3JQ_v!XA+xR89^n=F_ z(I+?jUyWag@`J~}XjkKBan65>-&M3ovv??AaWK2lv|x6boLcKfKROr%Nd4;$C8?U& zS-{0}b$kZ3pTxyl2SEL)3y#yVa-p7fFs24_g4(u@r-*99oI-jdm8ArxKz)KO%J~M= zu&7@|WB#pF`v)xqLa-Nmf*~+?2;edBPw;}^OE%#-53TUPAuQatKEKCxR!)_eiM;GTWlFS=k%7GJ63T%maFwfNS$Iu4u?3Hx> zj!E`nhx2>WBppEUP7+q{R=DrqIJ12E65a&3@Hgcz>9zkEEURt;WYk`~*2Yfk6_I`@ zjz$eI2+YU0OOqSxRn)bbx6wsVkS-W4pqj_PB}8Iyg&Nj~*K0pUNhrzeblMJ-22lSb zeu>=b!CSej-B=&!C;5`R@(ETiun*CqFfl2`tRw$HZ^UW+BSFVYXbm38aKLb0z8l}q z^~PhkOQsG)G>V}P$58jdP{%=%qp0!j*j_Tcf2hl)X?(rpUvY2 ze>nO0uA{Uw)OWIDBTb=$I76sG(UE5RY{Dkhwn(EIBA6}&@sfma{ktI$2+M{@TU30~ zR^Wq3SXL)(?R1c98D*4tmD1Sq~Rb%flEoYwoivu&Ay+xR`<aRH2nHa03Q~`S?uO>8ZLgfnCK$~cj6huByByOcMs|%!Zy^;9NrPP5#kvNW5 z6{4)uX?dNh3Gjk=#>o~+vO?`)KJo@EI1Zs@{0^;V`V@7oN$pFRn93tS3hU$>DZPzM z;Pg6`Qi4ivq!)LS&ZKl6Xp&o-Mbm865-M%sQ#JWtJ4eg=n>1Qx@@tEh3}xfY`WKZ^ zLg5U9LW0UXFC@xUnia?D*L<>3U?4#J+jxag(up}%FHt7d9ZaAlTF&T-9tZGlo zzA1T2t;l{kBVCa}Ba0$S&N6=Yfyg+jXpnkAoWBkwXl`t)Sl5Iy+kLSXZnU63?pTBF zSNG2BKG386yVd;^-TlB6RSJ$=q^oBGZ8~jHIsmJPPeTzZ)T`tT&D#E@P=M;p!;MZI z3^;Xqw+<2ku>dU)$Y`B9F0Q4#)THn%O@z@XdEhXt3j$;Lk3!+GQ0X;2Y0eY5nO*su zq!)SBnhu{(Bt+3^dDVs$87nQcsHh)rGu_^R-Xg0h%1(W{bEb4RioQ!MjnS$&1s@kK zB*qLrZU^M*gd(H$_S++qZVc?S{rd&+k(}<<($1PJX5@UF=86}P3*xEeLLd<)SSqz; zMBt`1i4;S^ApsEORT<0!qAW`i zNJLFj^|Zfpto3_ei}J@pFQefyM0x7jX<}RoF~(po!C(_oCTuS99HKl^%@*Ttj(WTV zDQl*&As_m%H<8i4>*moOC5Tsk&it9 zru{z z|Ie`geQ=eq{>k?L)c-1&cnQK02-Y~L9ONDffTm-joptr7{YPZdf=I1B?8bT(aUQ1_ znZSH?`QI=?IIBoeE-qXY?VMQO1G?7Akyzn-5YKjOP=}%Sj@wh?gNYN-A6gv8%mn{I zH>kmLBhw>AKVpGr_4KL;x<&3DCTsUwtphk& zK;cdw9wD5j-tw+zfr^{JRjKee)4rr3PFWufkS>gNUg^y02PuwrRy(siv>xsJaot$_ zs>1=x43VHTWU!B8)du@10X|A41shJFO@^l}Ed3n9PfS)Zr;4=tyty0$LqLkBjNx2t zcG&R*zsuT;`pN5fJ}cV!)4F2;Bj&zt5N)@k*FWEg72AYX!4tB^{+ii;+A zak`ZdK6MkMCY0c5QhCKa8ABbr5)Chr@C4CM@FjS=AXlw`a`yj#htfyKZ=;wO{m zS@pw-(NfgQL>Gu0pu7V7C$$xbrig4HRVD;Udd$HOjbr z)ABR?^4xn-g>my;KDOV+qidX&(Q+{nlO@gF?&=!b6~66K4!gp399=5!Nf4k3S84cX zc`xukmO8SAI( z7?Z^7oLM)LoT#sGW0xS}IlY(|6TCE7dg(e;E~?^Y2!l7et5F}pKo0-tS>1OH>(wp^ zk3vJe*nrNh*)|yBljdd)0+)sAA^TNo8iq0UO%f_%%4egQVus^_257MnXHT^07O(Gz z4HO-QzEqzWZ;rZtlXjvc&W695l6hIRR{T!Xs>!S})+d%1oily-C~{s66f|d-wG#># zp4RM*=d^{c?RZl?v!AiN_k7ocNK|A#KN({0U7$M;TY5MGI8<+Yo8lttLsNv%Luwd-0uG z#bOQz3P%iS-dp(Gi*`pj_*VBK&T>0YXfPj1Mp&g!cS$o#dS%d;e$|r(>_Y_q2SYp&8Px z74aIK2Kv_<6mh5Z@60m;vgc(?$VaslZQ&&sk*pHUXew%;5GB9-jx*~7-uEtm4m%IZ z@St0Vz#YGk{AOn-=N5Icjk0$guNs3wg^^Z;NDs}N&L{D*2m-Q5yaMqbMqlZjht&(v zTa{%Cowg+c%8Pm}0JynE?*0LHD{{9{9Y8bOKVdg$h7^rR#kdNZ(BjWf44M(@*&vfKc?7_q%pQpHv9ByX z%}9nHm=x4bW+q8^w0ZF+fW=JGZU9H?cZr?f#p19OG_I@TglJ-w62fU5>32H#68hVm-nCZtx}k{&T;>-{9%yUtak zI?1rBUK3E`|BSjih?Yw;pjZK%p=VAe$ixY(Xssl0XfmC)+hvq(yM}#wtebV6nWl3uwX)HR_gdLQI9`aO&#OxSzU zl$j(Xn4V8`$auiQB*90M+U9t!=tK@t0zmANu<$D_(xQJT&A^UK-B6_SZte~j-}suy z(6Mk#B5^EVTt_t%CK^QTq{=*))yKSO5?|N+DP6k$5+o*rH2u`QlakAq`=65<-mp9X zpRNFcq>VeVJHS7^T!7y@EtT9cJ0WfmfPbc9sWIO}%suft{k*ULw3h`Gp})JCAZ)rH-s6g|lDx;X z{Gc;!1gG1gn;RI9)-oQgWqWrEYzy4zrh}2I`wSHqxlY@9&aUC11{`(=YGJm#XgNn+ zfm$fddtjU}1~w1RquZ{UIy$25UtE0$iOQ_19UM_LkVGJpvq zh+C1|g_2067e|&TP{*v+b|3BNQCbJPT07V?7SrxKt$Gh0wv|-9Ab>~-gPrYN;L+%+*XY9s&#T8alr|21}FlFBQg%Bv3i*Cuu*Nr9~k#eCsI%!KNy4tOga zwSg_ z&kg6$qt}yev#A!XDbWE*PenF2ePKIrp5=tj0|)z?i9h4!HYmb4*jX{ zL=h@nF3mytp%L4hB##&>%#-Gl1C?xq?!7<=4YyUMywPdc)bLdM*g7f6pDK`H3A-4A zuY`PH_Qo5IPXL6M7ZKUx&?tLQZaM1RC!qh4enf&fi!S8)QvVJ-jc#i|Wj-$apWz>< z`3|Ugi2HXo%gLOse`OXd0p&9#)dI>9{ zUO1=|4GD21{1K;xP6bAa8Rl^)*l1qdgl;kWVhxVgzgFeut9>yk%r?X}7HZ!nwn)rZ zv~!@-GMw7em@a4jbgrtv?jNlMa+{_6RTUJ=i^(6*#9U>Ov8Ezvh8-Wkxfm}xGAuK~ z&7vbCOg3=iLL zz?rcF3tVjs!a%q?*;GR~K{RFxgxm-sp)tQp(c(x9<)}?4&E6S=VFRJ~tr$ryY{`;l zVmC-()M!Tq566mq0+;Fvl*K0X#DSZ2E|N)>q9Z1ep=>v@5aklIRSo;wTk4mw+KeQM zfoQR+3jaN=ewQk%+^j1?IzYmxetTb=u6}_XlRnUBXHK^6C6P)5J&;Ny5!Q9IBs6au zmc`I*#)mqe-myWuZZc+SyPwG$nvQ-awcUuGM)MvO0GH6bL1=UR&j}pnTa4zlCFVjx z(9U<0G%N7SzP8QN+K#~cpHkbs)5G-j@+TG%S^CP|RbQtNn;;d42IXRDmahu;k>+C% zJNjT^-&D_@K|QV0av!wgPWVt#8JZ7U0W@0y{j{Xqd}D$Kr=&=UXtOa`Sg|u6eDMWJ zN%yu2Zod!di;e0JxdvOavCMaeLFd|QNEtDQLY@rDoJ{*V=q~6zt{1Qg+N)eU-{zGU zb?W@=a;*e4vprVSL=+%D%fHx4e;)pbcA_&4?Zm}i)J~JdEp?&Ju=Aof=t^0n#f+Vh zfSzX4c)de;F*zv22V=?E;CoaLVKcVY=|=DAmN~WQwB7>c1BFB78Qq4ga0PzDJ9kJ6B`Yr^Ny%N!E&cPE{FM=xM!6Ihfkwpv2+;LiR&(uo;^~ z%vN{x&W3}gEO*I6tyIH)JN}7o!-ULpaxu|q`IB70&EPzgKM(&v#e=@6$n*y7b30jv z{A_i$dh*63eg+T7yc@DtVwSNzaZ6xqz*R52e&Ds>6Az`!d%%F`Mi7)V|>W|H7 zfv*clF2qWjXR3FIujsS1#GhV z~jfrjeza-tys^+JSOd;BXT%VM#ga;-Iydz*Q(j-1$g1<5#ri7$C9UNiA6e^bt6%7w6I4~`7c%(pzJAGb%^%P zWP`@1$<;|->X0=<+B=?$eqZafd`=$+t>1u^2+dtj5!90~Ma$4zM;WP`UWi>AJ2iUO18&tK{ zyzmt6W7fWh(=tsEk6BqVOD+6y&XHq-7jEjG1Y|&w7*&@|_|Um{{YdQth|UBFXikjN z6Zk`-lgV*R6V5}AKxk5$a4_)AtSd_qP+P7;lQ3UH;H9p6AG+X1*iMw5`=jueFHVO@ z;%Of>Y(1Wyhr2J}{Tv@h%XaAj%d)HHt`DXhSL(EW1Oy=%D_GtW3)w+(E|`tP&&15# zNMzpo=}pfJmRtWt56T<%aRj1|xIWA4&%?5N2vPr(Qu%rm=^4^v zjrdMM@cWYpsocR7IYv)O!TP_uXvTEU9d}hMT|m-cOGf^wSlZ4%{(K@?@C9w2m`@aZ zd3mo~Mzzbp82*0=QjR%l=!YQmSg7-gr3=}DY1Xz^hW0c8{Zr&}Mvud9aoV26o6TKU zoO$}yW>vX2XvKR*2%>lfDXF`nxl3Md{WqObZ_u@G$P4vnY;_9G?1g`Nquy#Ap8?*j z&ZW!2r9e8a+J#^B##mvrM(EY4?*Y(P@VayHayW@~c?YlE zjn_2eP87x^9R38kJkA?3tsaYm25s12;C&H2xN%7JuW-@a)phR~cR8&b1YY|3Ee$ia zpxnQ%(&&!X!w9rDXg@Qc5{#t>#?ptk^;q->w8Vwb6h=^}wo#_OgTf~G*aL-hg}g}` z2QTzj%TSBqzsJ-r1#f5vI`a1F@s!w!njX!W;1S)G}We|p!QV_t7Pn@xIyUVKx(QjCG; z$(9=e!<7kq=L#782}Uu#5qx*72mapi&d8U9 zFbm%`grNg2gqewp=B^{#cYD2l3P8KxfOZ|Z?Cj<)8FK4PCP}@VLk;U_!FNAs1bF=x{L-sX)BoHr(oF1);hVToTTf8q=Q~I$f zhLnmP%uzr^UkJSzs>OKK7_dDzUKB>~?M^gM$_;<_wG@s2nW(bLE{D;2gP~p7WyE5dO zU4Azh-zk3@9LU9HS}Nf`dgzc=M3$^Qcr2K;dGi+N6P7e7{`JgXU?hZ~mA>7~8~7f~ z8>En;Kk^+0Z!W+ z2gubvPTN6!Mu{}sTqvU4~merMf-JGesd-Ha>kU%_!Bb+G<*Z_7X^U@GKr z;u7W0C<@7sDv(XDQUlH0c+)(N2d@;!?N#Kxd?a$Qeffig869gtJNI>3&Np`iZGYf> zr}bfJ6~mDcf=7TwJzB7{aH_fyTjFb;_WE8x6D6#~e#pow{9~JG1H{UJ6C#Q>$q(>3 zt0-#F(GVoi=IV)T?)b~vLSk3JTx9 z>_^vH_9&h+2x54UVBwmBrliXQK?i=|)j1jp>Hu7mHE@Z+a99{fiQ01=2Vz*ic`+pd zned&GX&E-&2*#cu=L~~V@i2|Zpr53TK+$1HT??n1UzZZMKrriIQ*k@}ZQVW)PmaVJ zg+9(z#8==k;T|1TXbK8aPt6vBeKnWK4up@<5JSAj@a z1&g(ww$5-Kdy+}OD%KeS0dvf-ch;-KOX_kQB*CtM*MM;WsC1Q*3?Zr*UI|Bt{|~vB zfurUREK;nn^?+bp24L!e*pB}haEa*X>D9JcN>oZ>PLfkqU!8A7Rfr7ybqfAWUR=Y& zy!e>kOJ4k-L{$xVPvctGLHS>hbOJjlt;YONGn2RY`Qtr0rDH2?hmN zmuGOjH*6zAVyT`YQAL6nmN7*TQipVROw)fSW7<10CRudaaa&>-cgC^|gNshb>?x6B%JvDCxw(Uar4`i? zwDaA<-7NQ=s|%9!o=yx|5!kg96;nD`e=s2r7uaf17zb9f);_p^4|D}^V%Amt5>t|7 z112+sLHK%%GhP6O_hi!RUk@^!@3d}~W zGDLCbU&ZNm|4Vx5DEfxLk~GdrWiS}V>(`2&pkHAjrM@_3nh`XaD)vp4?vE z7q43dmJs$j3Og0p&~qtjn7Vi4GDl-MTJM9(VQb20a`?Kg%Rr)wlos8{fv32X! z{~(XT98|uRNtD1K%^pRzNS@pkyJ`^*0i-hY4-juNy{CP+v8~11e_-p?7k}4+(RUs4 zoDnFE}?QN=mR6Qnp`WMG_Zs@6LXN8ad~?8>s&oVNRrN~BF9`67lrz{HD1)x73fm7BojBpkU3J3+Zsa$d05LIBMcO@3FJS5cS!B}mWG!SHIq-o)o2hZR^W$p?t3qd*g+hHzc zA;|)(wCa)WAnmBR8fnADN?ToTDneTHh~V79@Xygh5;qR~D8puW2f+}x7fu}mLAt$M z@kmN@M06^O)goDPX1SZHL_6wIriaa7!bGUY6^+~sW`FE9y`z{Z-6{&sMW6tPAf4_d z?WKmW4!sZfhqjktBj2(?dUySJu}t8{V)gxJS|17>sE!=c`t4Ng7IgKVV)PlXYiz)0~}g zj~J6QNBWD7By$#-lEsK%YK>qf5iF>yWJtB&<$jI^^RvY%U?yT1`ujt=3+COwP6Cs) zJvd$i$8jZt`Mb$k!SsfW3m~9_M$cLTIgO|%&PqoVbt(g5xFwbw7)1@t0)hXN6lec1 z1A%VA1Wsl{2`fZ&n7(aHvI`Hxo~rd5wOu&2eG%=#F_^RhQ7OBav_hDzPfqCxSUKfX z%!OJ2&*&a7oG=-Lahbqw)sNLZTJKnO!{cj22IE?z_)o(<(pm?ar@Elh`zbbie{br5 zN-$j|m=23x_6|j23;h4!#fW$8fvGTp@d&7a@rv?ve2S=K;&aKbgrcM1#c-j@e|s=m z`^i4P3BTvpvVy|eOGAmf16zC|9l{L9;41qObh5tzNojTF`5r6m?|NMg)K# z{U-=!GV9Qj^=5J)Bm8aFjLV)l#u*E?#c3&W2@fkAXNn0lfCd2|9^AkO`p8~0W;Cnr zc%VDhWAmNbdhE_NfDKwHDN#>OE$t|#Q8&C7c%4owClc6%Mqs*ynA%_OMOaJgaH|Ur zWQ8;ImMjYAtpvCU{b=ksphX#-AxGKU z);FGEFl3zgvbX6QL%V?$yg>s_qvK<3xcJ6>uqK4PXf*@k34YVV@T=#L3O~>{{;vk{ zjYqy~eB&XnSVW4A5!Qk_(yFsAOhlR-n5ZMm=bG>JKzHC9e{*w^4*U>mRK2y{_{J~3 zoZ=gcVGA7ct~1!F_{OHDPj_mN2i-PZct&?lokwQ(_YD+vAY5-D-^qBnm}3Y@3Y7B^ zt#Tf_;W?Yf%p;0z9&;zb&K>OA201q9L9l}z6W$dE+8c2BDaok+l2T37v$mW)zhQf~}^+#AP5dL&0rEWa6htg$S35{0i?|XOfP! zc*1;eGaJhNR+|E89Nnq)sFL5c$eeh)R$K)FOn_w<3wXFOXh3(YF-nPYvAkCkUK>^p zPIR8$Dg)I9NGf{+MwMm|{>*NHHFtI<;UD}o8{r?Q1L3FRk(&OtA^eRmSi;j^*Xh>4 zOMLn?65ec02{|yjBt5zn!e?;VN$AXe;;%zyNbMt?Vh#QFzotkq)CP@+Q5(b1Da|Fg zO~lx8LOK%|WWrpEdE86V&f1h~>WXfc$Qf-zC=z*gV}X&mk~rfsEI9LT;+a&@ZTmWH zeQB4X+XiBixr8S_p}Z^4{|Xy#=w<^2apA|-`a+K$E=d+)jO=#Ye}*jpj2yA4%-f}i z#~hQ`h3KhEms`~X_!_kSf!5G`C;D}ctlh-Yce4Tl^O3S;U9=Okkokr`wdO zvZXrud{CY0x>LwTMw6BV`Y+SxTjPO~*VG>^J|8ky>xd&gYBOLkBk=K}cusQux26fb z=2xW}**aC45jvhn5@UeV!ugV25~v@;%_!$iU*YS~&i(3F_|MAawnC?6ZoaU^eyHHV zmCa*(C3%D1P&`2KNI1t;aE@PdWKE+7@tEsing)psSFP=!vQV0 zRgmWmT8VnCgbxAs%u&nk?v6q{bcR-lKS|94IP-^(=0V{no7)MF2Ni|;FJx|DZqign zVKD8?GdHxsoujd#c{5Su4DH!O2KT^UuJ>ZmbpAjg>J}G;s9V(jcM|gJ1!wwEqRK(O zgCLdg6V{Ek5gMv9-iTicNf{3%_^ffvPlC*gGjcHpFwyQwwi#zbpm&v&n+{L)osWTx)F zK8s5()iWH178AaAi+v9y@h6}Ob@3a<`#c>mCuL^qjLxJ13#sOl0)uI6*KDv3wV1G6 zz-gMp=zWUq;$CrqsVqi!kf16`(1E!2{~{^-^yKl|6OA262Ct(jLDRoomxZRw0(9Oe14s@LnLFd+J}f_5nKlzN z4kfGL%S)fmCWeKawf1Z%Yj_1|kD~!hI^JI#~5OEB+Y4i|slZ2{9V`y7s zF=Vh~yj*GwV#J5Jq_?`i)7rw-z8ABkP}n6P$X%&Z6IS&w)}ShsIVH4aoZ>?D_ETtQ z+(v1(kJDC6+s!j9+osY+ezWvoAkt|)i9Z+x>xlPESj^s1NNT+hZvxI(Gw~SXEgSJ_ z-3l=zJ<66a;nl*Hq!jz8U#MG@JP*CZUUc) zf3h+zQJ_#Iuswe{UQ-47Q38>KIZH`hFz_)rL?Na{3XZ}X37C?D)a1MlSXLv&8XV)Y z>NEffP$jQ((NW1hnWO=R&gu?QX5N;Glsn(chLky111Xd6NKIO1kn&%TTcik!q_XNm z$0aGg(uCWT%A&rG2KyI@!L7OvTs2U-PjPyeJz=tV3E9LF5p?n=mt>!A2hEjLfK z^NE;|YRalS+m5kyei3Tbr31`*B9eo;`Nd8?_g`3x*U?rE+obwLd%9NehFV zG?ytS68wb2uaX9m9rYas{$HRWs+R&X?l2#rm_8)&m&@j`it_ z=r_VsKsiPx5G&Sj6zR1OfSnjPni_R@4`oF&?TtlF2z;m`e#`Wcrh(> z#-89c907K6!J$aSc)^Jtz}I36+y$F@(fxGY_<>NA*s3~teRLl3hCSKr17ecjc&zra(DS#Eck)q?>*pe7rNvxGJ z$5j}0!f3fbJ!58war#KR^P2^YILR5{@3FcApP+?~Ep9C3eabJN6#j)H>Uh9ix&(i7 zWObIBwvalQOAB>>hr+g~`!5FWXTa85-1F~Mu3djF`0qo+MmM{Rfy0b}!|bCPTC%4z zV2tQN`M*y#f!200-CcHO|aSM zVi)Gg4v94bw#h>E$sF<*IG1>X*~Dx)HrK|!y>xBLR@WVpXxST%$N{aVx7@Xiw`-u{ z6VKs}1wFGVBy@HKp&EA)koHajX=(WSo})|IADeJj5mIc$xNNH4U|b+1Q`G{@20?({ z`I_~DQN4Z$TnsGsZu<5z>`#TQ1d%9R5`7ZQ=emQJVSC4};PmQ4R=T-git-R~<9auC z3QmNWlWRgPYw8@ZQ6s!5+5B-`BesEt@3EwbD?ib{EFlEecvbD@3a)A)F2eK%G-5U7 zIbjzR>KD`@?PM}F^2fjsm{+q^8h*ae{8U4JswO{Gvq`k8&*E}*6$Vn=dK2idY+pHv zAAyUiC>eTR=o;QK=Wcm@e|ix88M<2J8>qz`brlwg=y3rHW3_W$&Rrw8HOkUk=*Bp$ z-Ww3j#X|4lkOfaY(>`N6v7HR$*kt*K#3OL9V<29s{Lit%fk=aUN|HSx`320DfLf_ z*bA%t$)kpx#0%=j!hSgzLH+0gu*8?hLuBZe{~LZd|G*4>xUgj>=zs3!UGT%%Ej#9i zJ-WdUZyk}$4_IKHqZUPX0?-ixP&fGD*vo_;2EJq{_1*oJQd#&ReAo}72zT@5b(Bsl-de@Kp8hN6jhUPvT%k>P zw4{kzF^4H|B->a-vhv8;?)iYj{)V z;aKNRyRV-%e&m*Ib7sAWZ5XAkM|gq#S6g<^*xf1d(d6TuXain!=AX7#xT)(fr|mfW z!d1v=olpQ^!j-wneXM5Kog*5KNi{*J&HE9M5c3YjY7Vm|kkk@NYONM%f=T@zhNd1( z&v6UzAdr6N&@0-4f9;?RI7c}xWqaYSq>`e6uP;G?&0@4_Ip^`>4OD|QZ~j&>gIv|fy$f*oukh9z}ch_wUo zbLEVCXVxRT8`5L&(nSVP)3Y+Y->ZKBh zPspHUs~m4E|Li8M z$P3sU-q!s<@aLvGnx$2(cVLCB@vBE(kPKEmf%1v>LiTqL%IpHb8#zxS^6Es#DqyXl&n+Ig<4}a@qZATi?vBG||yR)uVV`YrY>?L8v%zksS z>NL_7!)oVO2-XCA0JKbg&(-%aoR;3g04Kfq5;l#A&)3pMm_BH zBy2J>kZZUpC$>|l<({0*tYi2JH^-K(|9cK|fo^^>kE5q+#2*?ZU`Q~f-h}RqzffP8 zx?b;WG+DWnf5(M zEY=)A%bPp}GF_-A^D$PFvz&D44ZzGAESpd46>8yJw#?lo|NgGMdn(ng%Pm z{yI2Z>Sg&7ob$W8Eax;*iHS~=5)@9%s(p!{ItD*7%_1!(kR&=1HiW`RlTYZR;1*Mw zmC`O9Kf${=ej-KW$l20vH{|)7Yek;*B3mgIjnjh#W<&u%lzi;xlMtnE&dnm!SY$g# z%&Ig09=didQ1*}FFNt2uwzLnhb#guTg}^2zlOo~ild6`S8G$!6X%wzUFFA7*czWxE zbKC_V_u^1H@qJ~yPhmxTOra3j;!ZO7h3flfs6dG?IhnwU9Dw&-K&)0iA(SiI+VLn8 z9Kywa{es^ly(%t_UnnCq@96V{GT!+&w~zQ#w;3M+iMasqSP$SttiMET|6)-S2TjW} zj~5VGjYPBDkq_hzlXLL~+#=B?HA)cd|Fgb3-b(oABDs=J)iR?!6(1#(S;TjEWkQ%b z-d2aoIKV@D%pq@*hs3~24j|BKkpY@Fi-~41sQ9OL$i^nXbLWW65irITCyEvB()C! zY+~h29E{}wo@S>meoVv;GEWZhSAU6nBh0<-6K{y@@V!&wF{(r`c{~VMO#(XZH|rQ| zE*UX0cgcuz0hXp6D5q1`wf<}o{}G^@-BEQE=m^?1^hwa}4W~`h&I}b^rwCXX9%$Na zaVarg-meGI<^r`Myx2u0M-3j|9oj{Iwqx2Io0WFW6)Cj)>7#~r6|+-lC!Un#@Mr^O z>`mIq6u!{T4tj^QyZ4VNwCjh$P^Ka3_gE5+E8Pg-~DEt_WBmVf}gtOcQA3?!uUZ{+Z>6c#-@83_d7qV`M z$PGL5-=RmS_WP3-;#za=6ohesKMrJ6pZ`HnP`0q+aSMk36_&ICgrf=Ys9b-w{&{SD z-z8!2MEKks|7Crv1nWG3XJ>xH$mln@;pq+M`VZlWxJFW-o{|P3j05HRV>(cMn&|CuE-&8xVhhui|!W0xG-6ofzI{%BaqdeT_j!@iPscV zmVJa$N4{sAIWCfZ zX}6#&nrBhg#xDA!|Ald9I6PfvlLOP5GEP;;qiWS7nj?>W&Lc;1AsD<82Z9M@PzpRAT{;f;!Xz&Y$;8 zM><$UkdCNDALw!D6@qcVi#3YaRGxzaMiYYr^MGmVNG=%z_{~3CERPM|oe`P}XdBI9 zdXq2u$MYRD*C4ZQsT<}Gl)bI=hWVH+B$A_xYngd?FlHk}db+?ecqo_y`e*N54(EcO z$Z+6b*$wjNB-rKZGgAQFsPf9d2|3_|6#7rZdCJM>k;8uX8IcE}>Q$t!EY-RVsnEX9 z&E!p1odEaX>u~@!iu1_TpGtA)_+ts~%9xLutoaLKFb*Grzlxptd6kzH7LF7pm+?aXQrX1sdu?k`@@HjMC40>jXWU55X2!An(~H_sWUq?R7a#12)7a=f?Uz zjGJipBH8vH?Lv#>7vYgw@)8Y=IPUuMR{8vmG5oy#T7255KfSt=?vMF&5I>Ele|nUB zI!AvB=fCeExUnSfN0%1lpvHn|iY_hzhve?v`(yzF2m~hEaKmE&Bf&)P< z&R<^u*bRE+r3?Aeu;3+89vDst!zo^*T22P1+?K%~ve8@?7`Pr?#CLx<8Fi-(S>Cd| zzF-Iq0fg2zip{A21E;CERNr8|K;WoHSpk)5Akoq{iC+ByspI13YJrNmh&KgG;D&i@kuK^rwFp>Vv1_$Jr2(+HF; zm@<*71&U(|@XeVSZ#cFohBQfZ76HDiXi>V}5vXC}U|7rfzFR^}fGSiIxWea*NTGnL zDDT=(R`Uro8FD=&opixor~ZNuKwRwNC2*#|IAe@xE)F8PIJ`)08j6AMX$EeDI&J)e zwLH5Vf0*M3IjFBOk`SG!)thwMmv90a%n9Of*G~m$?O5)@khyGK;}nhoFGwXvEiM}2 z7jTCv%XJa2*SoqEKTDpN73UamK9H(`WfJZ3IM?k*$ zNDzS`rhil~rb=rv;)S2$|58C?7!RKsu|$7XEQ2oOX+BZ0Be<|J?7gPxFg}ZrC`2f( z@Cj`huFy1>R{1vwn33-Om+@k9P{>0h6=FQqUeN20Lp81Oa z=t)7C*_Q&-o@7g#cgOTzCm52>54my?xstWwtXzqHU+m1f3~6^JLl^?1OSItzAkZ)**A)q~wR z!))|z(3tK8KSiaR4ldep2b|ZI&g#SNtEe zL>D|ZMjsAnM4_79RIy|cyG16^NXBC_!BkEh647bYyFQpQMZ?!0D1#t6p@l5F>Bbu$ zB#_b6SCnrY;i{`6LXD2 zj8|>@9lvE+l3`u{6j9kag@V~~u!6A#09>*noT>uD&Ld=$NHMQ2C6c=3c>f+D7I7i` zRkqAOfK?_tSFH=wFgJG#bTrmy!(2qX{_u1dG<*Gr>-}!#N)eD5b&R%L3nMWO(BS9< zh7BU{wmTRlnP|ZE`eSwsuBEzc=M5MY;#~?x5ch%pMeGB2FxE3O++F=ocQ8_fOwHn0 zag4{z%?c^40s^i|iJT@NM>fD$CmjWQR)Q(Tggw*s)hup^Zia3c2eknIpvtsp=4sdh zQPIHh)h4L9h*mAy*~gi=4_O+!y0vWNs{p6Q6||6@;jQFrStac1Ni%e5lm*e2Kj{>r zeGu9B>wun zEf1o=8@;aAC%5BKMl*0psA5esdb3|+?MgbHOBx;d3NPj-jqZHx2v4u93SL=ywYl#w&K{uui zq(OBSVCpetk_3#9#rR-h@*!9?;akx~kI@I~@Km2-Fv>d+?QHSP#5(XwDR~7hDgQyc z&<{Kli)FnrC}NX`1eh2l(jpPV73fe@63Ir@C*s2SN<0VKm>A3;{$f!r>>#?hbdhQ} z5-?2wO#u_T%tx(dYx|Tv-PN5`8LjP8zj9Z9D5O}F#^3L<^$h+tc%uhEIMlDq+Jyp* zUO)ptL_sqc1iFfeE_`($pciZ*FRgM{eJAoKUkR%LwJGDX!zxf;{nD(CU=JmN8BQL^ zXgGTCy8aT_O^pjE7Pw_F^EfO00wz;GIRcp3Lt{o0EN%Qt^!U+gGR+|AI{q%?aIi1{ zg{pel9uzi7f%y9>fylcFdZ>;_5R=i!V}Ece=l0=UtEgsqGSjIXgbv2WbL8{O5| z5TXvaK=7L!Pm7#DJovDH%m9=zM7hA&<6<4mnqq*lL;xDr4Kbc>1Oi*T8V&pPDhv1t zqc%vac7ZEOO%0pYGp8US1OsT%W>UNH+yM3;~(bgJ@mmPhjD3WL*9Os+L-SFcRYiKx6E$gAd4v(>h1M6PHwjj!&|^sUzn?z!VZM z)zvLa7ltjMb&Xu@s$0a!PbGmzU2S;_jR2V)cO*SdgwRYy5PCTgMr}U?nEA?LCZS)v zARg{w%=&*64?iX~qdznrK3kYABOaztfuj2}M73#DSa1FWZFi~ALgXW;NNS~&2v~pK z2q!gr1bhZ#IPFuzP-yyQw$GTCHpFN>P}oGG(k_0ION37mRO2eCNv46o)L?tj#DY7f1(H9*9CZ`Bh|z*3!c6q7NtY5Ktb4(psmyLunaV70Q=J9lap|RVTgdH;U+y~bp%0{O@LYCsRPH>ve-Q7 zRHW8M=07+}y@DMfN`=V6A9fdfemau^O=y|r`wO}drGASj^-KRc;r%48vGGz8Ml8qJ zxHMO27Xjm8(5~Un3FuG95Dc)Abdgf= z=lyR4m~mNX^FIhMNAA3V9}r;XNK3m6FfV6~>zfDAe&U0`)5vN+zb2z)_~Q*kVJ!u= ziO2@+8pt-a|HF8*%3wkoP2vr77GnFba{nL4n4E@p1>$6>*;`W}z`GE1?cRtYftp}) zm+nf(-RkN6z#;#F+@^3y!k<7sV&Ylg4fJpf)aWrdq%yDWG@1F{!;RxsbaDP7OnkpP zO;3DZjAyy(G#rMpBySY1F&S)LQs1+Y^PuNrY*XE{40aC%Un@Z2^itw1RnUtQ`Y3K~JRLz(v2hI!7%TV@G z$X-e*Mba`RRogBSy-wF1RECb)>O@bIHa=j5G^tq4#6wL*EK-Q+ygst0;n?!{fWwCs zaB=2-i! z-vyPg{@N_XVu#(vKd8x?a%e@_@(Dkwz}^odV|6_`M|xv=Y>A)r@u?W`*Y!t^j5YSy zLX_zl9h)sQ9s}gJ7L471%oJV5Mv(R0gLO%UaE>rdO~)&$TzW-d?#!A(+ZS8rPsCp} zW+0@B8~hrnB1ZGc4F%Y3VFQk4m<&XZM^5y#f}d~rWo}L`7rA|j`;AJrp7<;8u}o}V z_nQS^jhwok&JzpW)!UpW*5LM3A3RbB4m)sBR(-w+UqEKVl&4b46R=5@!BVw5@odO) z*1t)1N1_Tk)@AFlK@xmP@7AQnh;NW+Zm<$jY%j@y?xAfEMXD3}QCyf|h<0{qCmk^z zHfjUeYFrOn<$`L6F8iF0J=HoekuRaR*k>DUs~eg~G(LiYqPz?H0b{DX-3q(jICU&l ztC{ET><=9GgogkWr05gwtFgI+V@JRI2kn*GhJh0yh4ck64LU1S*PuXzKSRXRZ&;-P zzT@{%RI;cTy6gCrp=WA;=b%5Rm2vnI{e{>Dy4M3i$LJ4t!uVUD4kKmoOYh&oKEO-- zCd%@X!`a7!>Em&xO{I27p(mQC9@d1$oZC*oLlJGKm31gAXlMUmHgUmGMSY=c8quTa z+olO4ocSBLzODINDucSi-58`G>Gj6dtb(ZlR>g{GRP&9R1m@jXe+UKLa2ZnVo7=iT zY!I3mDF9~rX15)`8kU1%lL_Nx`w`T1U*vj`qGMc$zI&wrny*$B>nbrcAT~_?A%@UY zIzKFywaX+?8c3Nyd((4pR%-LMu7eA5ZtgAp%Z4gLmP;ufJ45S$0~b{?91x>GJ#dQV zIH>KEL919lu-jEoHDrMl`a9FkVmREqne-qVG>{D%Xu_W49ZKDo5&#-C1B2CqGC+AU z!!EIuS50t)qkyN6Df*G?owTTihHNPCO|BJumwcoRnLt=e@PQ4E0SGUaD38m}hCmsO z;Rt1BNz|{Ne?8ah)05NFqCdrs!6eP<1N#|)>SrBdO(g!1Kweq)vEzLS_KILdYgCR$ zkLxKrEZVLc!~*cfq92`AiUV_5GF!o^sMb{&a>N9a6`Wt;uJSx#J5sjBX_KWxgTIV; z<6)$}hmrcatKyKaM|ne!V?B1XmH1ll32fknrTMPczqCAlQpw3QdSA21bZF^F@4}ui zH8^?%qeX4Y%1G=3zaP0(n34v#WPh!x1vS75ut1YNPvA-#Hw%@6p+?NW^pM~eU3;t8 zleO}PX1;9$8mOfCUc(Cn{fPl=tjzr^0xC(8kb|dHi2(I_-a_?7-2xM{A>=VGAYWV9 zWLlVHg6xzU`}V^?^=F%aM>m-msV)Szq)Z(jkq4wibhUQaf0PzfO_CAcB!43IEP#r^ zUsiD13m%0l3!k?JE&(?4Eqi0aO>S%(Nd^;Mnjb&uwxI=Jq+X>U7*yYZr3~lFR^JRo zV;8KLT|Z%amjO#uE5WJ6>MGrN47wAHn6IuXOrm92Xx{O-T6v2=`XhOnVkVvyKZ5*_ zr6~pZ!PLDrR`A5sTV`%9WFpRac-NmQ@u77wsSu1`nNV?+GKoaB1DruIiJ+M?;V`at z=`zcB+@*TZc#Z|}`bB%q!OL|D0uI{?TIRP{5@`&L`IDk=CQgAZfXW&NzJa0v^GM!> z!>7s;O@XViqAoPI;a(vXdr0>vksPK6)KK)qH%d4#Frd^PSQ!gZc_jUqz& zLJ5~Gos4i}laK;9b z^9cJwT1|k&`ul0JNhWTvS2sQZ%zvs|_JuQZfW$>IHBX}rPnH&;KwUPBX0An_xf*Rp zK?Mq+qFbU`*b*>M7`k9Fe^eO<*w z|FMCKh}u|lSs7bUF?f}A+$&>iD+aHr=z6UJ<$x8@FJTGRP+xIymAM~LWhq{kDQBiA z-|)~**tMB@y{!vu3X3-{ZbyrVY*zXoGgN7=BLM7Sne+tK34=*?@imm$7QD{?sMtF7 zB>+w9CED4;X?c)uVQ)B`X|Pn3t?i3b)K$=@I94pq0$OMw_8oyRgO93$;cLDXZ{4gb z5`_jD5M%rxM0-(8y)V3rz%7;TnNo7xXRpz{EJm#PcG2hwsT z8ynS4(Jz-Rn{Yi}#!|uqC8#-!<{Tr#!N+EfqlWOCI)wraKL?Fzb2yzYoKE+UC2sE9 z+OtOAYQ>}0?FT%?-0M!@VlN#JsmpKDGD1-0)=V{NHw<}z9dgQeCn9&y?f6seZTvTg zf+UOj7+)VF2Q?XzVBcD?f`xoTu#rKd&3S<4W(!TSy%YZF(EJ0bAXeZrl;|k2*dlcD zPn_s0d-bVF>)xDmRW;{!2Z(mCp%=>e6L(CHxd);FPh~ z3sqI5nc%Q&StGWcObRMBT}WC8tO>Hry(~o9m>|*-I9?MSK7+uk26gxr1Y8@K{pv~3d%l7YOqwj(A$mCctZE8Mc@+v4iJP`pht{6 zOwP6Q;4;#DAbz#nv)- z9xspScOAtmpk8cw%R+c?&aB_lkBbj@>PYNWifwV|NfQ-3mlLWh z%w}X2mwBJ+EW#sc@5e`#vDYdFuf|HmAiZ00$l8kB4HaeE>JEy;*03ISI*svcybPWJ z&56k9;<1Y&F`g3$ZsbDSCOqa3P_z+l!%c?o7TI4zUmz9^Uby^#QxO~^^zk7rS+HhvQ0u+^Wegvyq5^n7F z%G}rJqKeKClg6t;m6sT=Ju-<*xQp1FgqibnBw| ztQX7?9fndSty^H9O|iRIo(pzP=MGD{RL)f6uhphitX=vy>O%c=@U}<_+ka~g6ed0M zrz01wI#6;)IG9&${1N%ot?*96&04CxQL>~l(oGal3+Xm2!vHFDL0n^eh3bui0x78*XwjI1{}Q5S@1{a- z>E_JOVQ!O9pi7i=Jr0*h^#eU-I*aTgvHPqey2Z#IKPNm8y3s*;*sBb1zX z(ua@Jj^dan+NCY3-_b-E&w4Tuf1E4rF8{t>Jm<6s%kI9%BeL+vz`d}G%^1#lQf#Dri+y;ORaJJ_GC)DW#jmKwTNA-O> z_03}5ERmal9^+*swqXwquuFieb_K9H@LMq1z6l2|L2vPAe@aqk$$@c`L9AS7-Ft|y z#P66#*kTFFMmq;OEw}L|m>y9M-Zz+F;E6hKsgwqODBOtwPwP!4ume6&8WjhSUX_=( zY7vJ{|BgdP&pB#Rerot9nK_n}!6@rg)lMM*T;#z71owTGjPm{hfru?b0x$2}Ob9x6 z-z5ZI-WX|?zyb2H(rf^rx@#M#&`c_%;r}+;*p&Sis4VUVQ2Z}NaU|dOjEbRZ!^niC zy}ZJ5?WpFfx3B)D3;tf~K5QN$+r-8|lpvc!b+4Lk*G1bQjd8&fd5oG_IMq#@Q3zto zqWGXOA$r1q)o3En$&|#9*SFtw*ufIbm9TZpoeubLk6yUZzep8!>XqZ*6LFs9o&0#; z*@JjULRCHvNr2$f&fsi#)F8MeY$=gABYI}5JK))q2gbrN!ww2)*nGpG)#sW?=8jh| zMcXdb^=_;W{0Ooh^VsU6D}!?%oL0S17s|W^5V)b1+<4y}8X6qg;IuwQ{CR!P89@Xi z*RnMH|5*DL_&BHZ|D^2@)tI2ESjr$sZ4tDjt7TL%AtiMUins?=p@{}9X(wqjCND)% zw-wiAvFlRZqDZx?b#K*D*R9KPMryaNn-CbKt9nJf0OzD*j7ld1nKAFX(gY&7_Gv;5`00%r#lxIpnxx;8YSwO?&q$uN&1px z%Nl$dOEz}$r(31(nAok-fE(qXW2WV3og1*yi`?+?Zyrs0$&a($J81;XGRI})V}AGn z_&lAX?4&~E0*g*h2MI;&(71SwphIE`8Gdc*D>y@)!t*w7T(^6;`AZrNuM)kXwrd1~ zUfg7qOP8hJ_ZcRDd71GLF2eJ2M`F971LUL8!7fyMv=pl+@zL5oQ%(xcD`;G|NBz+_ zN-?)_UFjv|jq65C9)oD_=Ri4q*!>b;xE^-;O6)FyFG??oFyS^xm_^VsP87u~fR)TY z+&Uj@lrPQ>H{VVE^8>rcn*BShgg2}Y_A$f3qFt9>fu>u*$luqWi)l%q!0-13(QBAt z9el<6q#>_yEooRQG#mjM)}rg=YvlK_)DIn|&F_N-bU(}9Hj!8o9zTxhK17sm67O)Q4nq0_-i&@oc>Pjgfhi$6`%Qk4yxVuX!9+NVyW8 zem}0knefazaM3e&I$qAC!Q6Hl%gua<&5u)iB8$wYf|m??_nYPun2#v|ff$r0f^f91 zpZ01(odnd8S_vmde218($N2=|88eti4}C~h&EU#qDYtge#S%R$syQK(5|~Grrs-7F zWa#}OYW}TMS4;rfB$l|EmmLpkYmK^>`sw?wj$6$2-$KVuLD&$8zOv%I@C=!~6ki=- zoK(a(Nz||eW?`k!FiQd(23|kPJr@LU*Wh-!o0ONlvS3=*hmqgC5N>{ikNEB-UU;MW z;FxwA0| zD!VMV5;cc3JA|Dacux>E(5^SPfOkWFW+lC7&5!C<~%&O!tb`^KaY8IDjN5ipYNM3Bn zKVyk2arnsi;&U5+yrLdM;ipDo@fVTPuwrOo-c)Ycmv~RNjcyd->1a4kP*BuWt5hW#G@=3`igpF;h*AgqL^Af30x?Vvc-pM|59mEcH8+diNME71 zf%Mi=Ur}v4x0&&mA<|sPB&{USBx5uJshOOShIKpm934pA=ZwX2F}D>ue4RN)gNq>#o6Dtw_F zTz^mm6$dZzi@a-M5HG>BqpX%m*P{~27=VM{J-v>B%~fn2V$K~03UJP2{Aw1Htazmp zkJaSX!ogu$U@|MSKm4|`vcB$#(m+L^66R*L2nKNQKH8;NpV}R}yC0hz@YrBjKH0+VHhcJ{^HwpI})sOa> zN=*V#TF58T!W&Tr+yFCfzB~+$DbFJ>2{q+lFuV`7o{epvlKCEgBp*;+U@paUjgD9T zm%;|1CDU=;|MKPCr5J+cwn=8rYUs}*7>DlqehTs0%bY(3w!*`ec5a2`;k#lZI2S@xE0EQdIR*1XLr1Ng>c<5LhYYOyv=#B>z# zSs6c$lHV|}m|7StY1gxa*+u;Ei!hsDr{s>dV7hm3`~oOiDL;kp^2e7A5mjXF!{kqy z2;zTcu0Mlf7AUZ>fbeH~^s!7^H+Ov3s&Mlt`a-Yps}XeS@bw!SzZJoKE9PwO#}X_uEmaU|IIzfh=f?MX1OXSpaLMvfR&t0W9)HTOiFIjAUS1 zcw&w02o=bw2V!nIT601s6>t<@;rIU{bZvO0rET$|LN~(EGI%h+3a6qiCh_$;XBm51JZA56P66*ct1)tv-ISSw@T!E^_E@S~sI6cx4Xubwgs=(%XTaVc<)sRo(G=SE6Mot>SfRi)9n zU_Z?}!c5f+q;MPzh#90HKD zdp!G#jEdwrW!YLR{lii|97Bn`fc@m0F!tY)VMWp}U@(JRWDFFz76&PWB2p>IXuyBA zDm~N#?6-?NfuSm@NDWn_Oyb?&E{#jqgWnHO&Qp8KAmMpC=vxS|;M_Ze5zgiaqs#R*zls`F)oa*@n> z$#~~h=pvVabGIWJ#bQ?>I>TC{xOt<}m%EiA*1LEQh+}i}(#X^vzb2fE%!0$R#al{N zt3Vi}ItxwHQDnwS4Fdx6gDUiA2__oJd#(wwhy`lEjvv;K#V+Fo1mHws zS#4v1)NC>LmURF!rV;cxnZeQEzWh<>Q*~Bz<7{NfVmt0hm%3r*U4K+h%)6KvOA7;n zSJ&=_h9ET1td2$6hJ=xX9A{kU=eI!%e(4pO7N$8JWxzz+sf&Ov@IgSjJZnS@vvc-Tb**Aij7^h~M;(V&B9vjEq(s)N2;>o9FGjRs6< zkoHzva~ooTc7|B1u#`KNq^|?Ez(7YaFj@fm;IHwH7v}9cO&P49gJJ@x&lIuU!3M%& z-cTFlO+T803Q9Yk8m5fx6&}ji*Q;5sZ4hoGfm1-2l7-LBkoe zt~~d)-r%REYkx-p)I{3~8?N-r>5p*0bmxJbRJnXDi<2C3m%=#rn~EbL+hJwFU+G`k zaJKRD0<;)mp#UL$ZqNo0V0Jjdx%mKW zm!PhzSUt2){$j`ahJK*!1bk@c$S;ZJg^(zje^)M6kfMchzkHJa$b%tBH;;r#CW%-9 z+7C#BL8BrVoHO`F#lSwlfSXRB7l@+q3O^dio@iP~GS>X(3w1W?(D4`SK=}O<>qxp{M4L!J0osESz zE~YY@jHSMl*8mXE0Y6UWts$Gh;ZFIrrvqW1?~Pq2hD*X2rTz(JJ3be|Skr1e+iU?G z_#Al$;P(rLRA>Sp}S8%Ut{rr~6wBYm6Kf!2uZ}IO@2X5#Fl#aLroR zm?)v7F?xpm(z}anwnbgg9GUXZ(0{eUe1a3&QXe9I>}9;lgIF2$NqgZz%;Z3Op_1Jy ziHD12#yQ#xI`h1#xJsTA7_G(Cat$8P3)jevMPaSnpi13$A^IaDv9&hB1DB7 zSbrGV*~QiJSlZIJ7gx#+2ex20V_Y~RAY?c9W!r!-j--_SjugVDuy3lhSQ2UHpE^(U@9vMi!pyRGT5%+*iS7dfwF2930NOLvK}H5qhXJC zhQdt`v$HYI1)Yo0mrB(TZg4aJ1msDc;0!;9X6KkMKUe6<8?KBJS)+K3#csEsPXdy! zz_yBgV_mPyM9kBeI}Qh)c|0$M;0)#kGIa|xZZSHgC-9W-@Y2}ar4``kGN}W~<=BGl zS%KGw;Y0_78FUOgjo6Xpw6h(gkrEJ%<#{9;{sfXycfnaP3c#o_1vpozq977WVApBpuTytHlT-&Z;k|a1@O6a3U5c!j z4F0!^bAaq|$#^5=VEa@SvI>Q8D6X{W{rWNVz(NX#URNTHrAHSU<<#J%Q~@>R-AQlN zL&>nED&CQD&cC_}d4%VUJ{=Pe&y6Jyj}kRnt&__3`oZy(q?h0m&cSS;MAc2)UYsXN zwV*i4m*8WW{IV^FaT)JM`D9C;y|fB-9h-Qi9GX!cUpuJoL>=9us9;&J{uaVFQ}?B) znlx9h3OZ~TMPVg8iw0m2t*~_yA$~xxBUWpaIvq|jGh=gNG~GFK9y26~;%aeCvNiBP zo)9U0NasH5aY7Q{$8w+sQ+g?kqLAuC0%Ql5%dwWJ9c?6^E~wQOBxdPY76hAQ4wML3 z%IMZaMAhk?6Hp;B=r>4!CTXqLj<9?!f}VA*ErLo0l2HUSjo$+CGXB6O$|-0J%6bb7 zVq%UXQd)ga+&~N^3nz5atv$hNaQl+oHzRwJyd|rN0MQ@Rv{J66waD4$(&n9bs`I|R zbUdL>D08+o*wa@c-(;xszby0CWh@i6^pE*0Y~4@O=JIbye4oc^?gRZi2!nDMm3(Tg-3ONg>a3|P@FiD4e?{Ze}$ z<-HfWdlT0XfU@zCn57AS>bW7%bZ&;v)fj_l5{A&{qC_DX_=1f^@g$3u%CuNhSH@}r zj4)iZQ)+zF)T!~YrVhqOOkGAJf>}1$ERhEqp!Np2+CC^07B!nn6H3F1RH<#ODq+wc z$VTY`*{1X*w_$Ozv60LHc_6)T{-M$n`4oQw-7}Pq9lr=SZDN_OmC&5E5~BXc(t^?@ z3_USJ_me8_fTU4oz$;9(4P`t++g-{KWTgANVg1n$BX69kR~9Z4eh3TG@fpN2S107N zize+jD7R9C&1Jc!KY~`WP)ehX!L{Tsh5|S91vhl0e;vxoP%NN2BK9S)TAf4d$IM1mivWgx@%FV6?9OZ>@Z4N$l(keo6Qk?^Y_X;21-8s4cA0*J zJenn(K*U8YnI)8>3W7=~e*uiNSjD0!F3dkme@t6NeC~FIar0VOSs{R2aCLx3H22$9 zDA*|wk-iyM4&_XywXrOs-|RX@BNXg90{6$q{_7@fL3yEjwn?jBkrYZueszzkpKur; zaG`Ao``?h?zes@6-c9{BvE8Q57s%ikrui(xgs;>jb~SpT`a9T)M)UFEmjkWnoS<~P z{M_3^NJM;-wP>cGUSPT<9wa*n030U1(ru;ymX(s7l3U{Nyk!16|IzmNOyO7`az|+& zU62etjhC3hTZ9RN7%z8rWHhoz7%63q2K21MAzr=ER(;tR7r#cGD|x#It4vn zNc0;Kzty{rm!Lr$DR>$oep`eg79}Eg!8^yPT@ z8-cz@P6p5qT=8pwe#^4%K&P#l7I>~ecd%4dVu(1{YO&ZORE~zvZ(_jjXi6GD*acD1 z20yH!UD$9`km|96ahmD_(8n0Fg2BX{VZ9CR501?{7K!&gTcMR{R;c$ zq^{+4Q16rZ+kXmnBnu<*Gk6F7hQ1moPkEf|{wS6{#pzoe#AmcoNeD?tIFxr*GHkAtU) zKljk^;XU$j!`(}lr3a3CYsG`@wbI$5iftnSbCqrAp_(>Kfc0|o8Z=6akxc10V}rM+ zK-VM=P}5t>8c2GuvsAuYf~{+?LY>`<>njqNps6TIt-z_`bl(DhQ)XN3K{5o!bluR{ z0`vKfEJAcb+K340I_}C;uHl#L&nS4*B>tp(`o_Ob&ZeUuj-+;sRc-()=sF@7obOx18?W%`*>(Wn z>xJDcdNdDHG|<32=ZlO1fMc$sea|E9lA{bAjYgW_0DxrA(I2EzRmBXC^w7~g>joeX zXt;88?rX{yO_@1#^uQZ@_i$z_kpe-^S_)O~8;QKoV+hsrhmIbcWj&Eu5qNEfj;K36 zpBDL}x!_YxkWaO8GfUc;iFDgB+1Li&ked=`x|XK~>ixqr-SWK>eokzG+Df^m%%A}c z+QNAmjRI;Srghb0KJ_oO*Hf#EGD*mjEHQ^jvSi@(u?#bc=Ll+#map2QyiZ8}!PO7Hw_Mw#BB~C&~t=L4%&jZW-p^Q$}?tyjOm*22yZV zkZT!orzP7WN;9s>GL8|dFi4bebAPt`9rzU-PFkX?f`zX91V z{Wk;I@4ehRvR{Ao*C4xSDap@5_8Xo<_F9R=^mR|jJ`dfuWLpvEG;aW5=i9*$Q9~fi zjNF?TC*!^RHFq-rwZXD^{CLeaLKT3PGl+rlO2f@|Hi?R%_ZVJf5b35G^Ii)Qd^0r37D_nK0lmD~5%m0&1`M3J= zUn7deLGc=-3CiEvyxuI^OW$Y8f9WsCU$D`$Wz$k<*@|SQakl)EzWilsa8Ulf#XV7n zHt_?onQDhb)-0(*n<6-9l@$%Fv0RBnF?J|CaNTMmX>K#5Lz|hMc0KlxPFx~Gn;S2{ z(B|Hsa%l6cSaQJ5=w8G)=INOC_#sVbkL%$DBvFBY-wS!*D`X|S8X;GOwKKg<89emg zidr1dur!@Ec_KdC3tR0>J_F|>PdB+P?{J&c%aXX#4ej@EMd0w1CxgA`f4$s)8DeW0T48tg$eF znG7W+y!?BHYHK0J?U!$!r!L z%c1DeXcNBok+un2rOs#*j^Wrd8-(q6V;h73hs-9|ZV&0#k`3|D^?{KBHmv!_Yj$|^ z59}!ThKh?OCU4P8*v?EmQeO}o_}q&D48uQ z!7M422rG$uX3KkZndp(@y%)M5Cooub7|8)EH4mCTXm}C00wST-yfAatXbnrLvoK4D z&ZI<8rp>@zdtzT)RI7@PnNO3{2au#C>(yYcC4%inp zuA3O1{Xz@6G|V7tm{GVLp@6b-SQmb!(oI_6(hF#+ZI+_>2JG7@6Hurq2Ps#vUc|u} zJM*F|+*B9B1$d-nVqyP|;iiA1*5P@WQVL3N1adPsnQvTsPPlnA8EfY)diiD3=phB{ zZcZRJ1eSWS?SNrUxn>iDCe+>(n5WPeM->-^5ZO53h~T`!mYLSlJwI1P4NC{G3v{`} z7`tdB^Y?jA1B)c91Vk_6ueO;~-i$0ZLn0el9LhwB3~e)sH0a{|HdFpZU(rCZ`G9H_ zn8x-VL`ppRInf%uC&7=>*KvO=L1l5|@cq+)_p)BTaqYzVEz@i)Zw%$6=E8n8uC2om zFN5MXN{&i?HuVhwd-tm1T5 z^XOS;KU=LebQ%-XS(-3Nxxn1{9NP516ZWdq8igtX0Ekt-vhDxQ9#jaw3l%0#J)VTx zvvq0;G%-R=q!&Y<&)KZRO7e|?po9(?k>4u5O7s%>Rg(gzx08B2NtCGmzYTCZ(igGnI3~GjAVE8w=yR9fmu_*kW%Uyv1(QNEK~@ zsooh6=pZQ2a?WjNS_$KgD@@8e+`7D__@$v=CdM*t8&=BuVXi}lpx)b`r@lcO&XVM_WTsFn!!K;e;&YEyXgvxL_k6rRlTGxa01 zY7uI>*lq|B9S|>ZPnmL5Lt3Gacx^`n97`R>{){JlvF?@?cP-#4r9T(bou z)A)piGs~dxm~Bva%o@V`;fEd!xaQHb@OJv*S7_u%^I^cz9S#3zv90VmUV1$czh$z= zam6d#`6?S?jDJ`wmJTs6pPvgelKIP*Gs3993VwKO1F45s@Iwd$7mwk+4K8q|vJHD} zhpbqE%-~{+e`N$0JCXD_19%%zh!mxL)AA%~vJu5&;`Y4!mnV}11{CK7Uh5kB%*wwT zQO>bHD%?B+b)oM%M<%6tp-sg>LyJ6)${@}`|3_1%aM1#j=cSk?z(6g+s1uU6Jy7k) zQAT8JSGsoc!vEFu*aLOaF6i*QRaOkSDHF7gO?JS9&KPCjTj0RlA@ecE^d1{dm}&)g z&!2l0T+uRLaI-J<1*iOFRM`1Orrr8*~( zx=ixfJ=}CE6gj?dS>xJG!ZUavLwFtz}Le($>{9{~D6S%GoTsOFDukb$XfS^r3OjMMDF_2&`nwAOF zR@;rKSrSt!N_b&p#d{SxTrKatQ0+H_LzW96X@b5UntpeD@++*6c>-GO#->rIMqmPL z3^5Bk+1C>YDT~Z!e+x{RXe48t7hWSbGH2JV5FZepd0rkXa0w@UfbPX zY_Fc=q(|M@(3jYG9t&&~JIVYNgBcvN1vTPj?w|zskvhn^L%JXAeDhaHlm94x=pI;V zkx9Mxoebz~18@y;kJwTaaSjenjU- z@VN0%>NPp^DXmpCSz1+_rBw~Qhutg1FaLO5=B~ZaQy&rcDAI!+V^Y@M#HVEAo}Ux< z{1mwUSice)M5Tzm4;a5-NTDoYKGV!Jeh>1)l#l=^wn+|0sPC9u1KynCEp^n z$PLek(1)V63P9Z|&Ms&)*iVKJ3(QQcu=K^5BNo7RQ^VHSez810Zho^aLQwjhB-$~? zzPK$P0<$KuaAfBVFXBPRs`2GutKRBvjtME3w{|&zQr?)eFasHpdg$uFALU&($iL88R z5~D?fL5GpQlaRp1#W8``))%ACk4$Gua7P3nuBFO0vLFgElK)$~Zh8^W@`B7+`$eb! za*2~wGAi9`V88446yB-1R$(`a;5lR9@WoR?Wfx}8QuBOT_ zuqFXZS(BkTTXK$S{w@3=V6{(Y`u(WjjpCaK=yb~p)SF1?m{-EfGSk*MY~-edgsceQN`VmB%I@9tyBC)9zC_NLnben zt*p39s8A?{S_Q(z)U^u_RRxuwsF5v>w)1@&-77e+uvZHvCNB=x%+GptnMY5sC{Enc z4aLrQt$)rpUis&Ra=ML|eT4TxLku`Ko0uQLT^uFUZL1z#LL&%*iX zn|g)wo(p_9A8?KjXA4@ii^F&ygtG>Ay~4TnjSM(XyBl@>n42FYw4+ZyCtg3llQd<) z`I)mFoR&x~YRRdu(4JCIa0_iV8{Z0RE5 zuNS)cvvdnnUm-WM!$f5)fJlHO;DKpv%?Q6~hUa+szl8^9764fH*y)b#0`uOD;QhAC z8pQV;nbn_b(eUu>UeU0_(>@wX&*}jUxp@B@&~V0U8EBZ)1~jbTn(S_9Sb0YeXn5pI zhlZyDuLTXk9=glKM5Ox?=Gc4JL)T{ST@T#@_CC$gU@r?MeL&sm1&@VWp}WZ9Xioz~ zjfnC2$8L$1!1b)a^&EHY750BU-AyOd(yE!aE>O7unqpwkpNvn4MP^C7s#>BS+1{%* z0mr=eLjU-H`~pORBm9~N0gtCeNT}TzyfA%U(;7-l3C|m}TjHMSUB~_r0)y!j9RiXY zI1h)Klj_ek*dWVqiX?|eHf5L8s2%u|9EIOXSq>XU%b|^SwNOqb?!}giSyD%i{ z#`0G24SLZ{mi*Sp^I=dmnHdk=G7k=R+7H%6$TDF~PZOwCvF7-rsNjwK>otMvPIv7U zp7v^5R7wy5Ah9Z~1 zPz8Z7X4_0A188t;d1iub6Ivq(h(rjHb~2eRySFheKg0w2OU$J(;Hh~Z+fkbYtX}FM z*^q#ffM?t8ceZM9qna&7H9f}!F4+Yt!X&hC>;^~G3~YOx3*v*k<~ErHoI4BC1V4Dk z&4kUK4=eM5WqZjU<^wy$ll{rd?xbo^lyM%dxj7*l=lj$z*l_VodR>V@6 zs3}IhQSxHEk$*&p$SJJg4>g`lDlo(6KxG#4b1=+)4kF#o#%`gwjj|xgT0NW~;q1m| zHxj3Z;mpf+PU`i(7oj2Bns% zRjf@k^@7wUNMcQ@3T2qBT7jp>A&YMF{jq4D^MJMf6WE@S|3Wvy&4KIbT}6CI@uCRq z$}x8hRE>;KxL}K0L<}|YaWojFhC~xbn0E9hH4WGctWIM}mkm zt%G2vpfS(ZKUiy<;$>te7>`}N+1hWl_No*$zy>@=X$`OePd=}Zs)l6M5`4Y0{-C)Z$Gjk)6t-vqQGt(=`KR>}tXK0VjrH;yfpx6Kq)-uF&yrFJ zi)o7+aSiT~d@)h=d6-Te&rY2jd@r+44!<$8lo^?&U|ZQPbM$vV@W7i4BJ)p?&kIkL&wXt_44^MJ zLvM%9m^TtA=dwc{Lw77bz;SMUM`CVa7}p~)wJ-*Rk36S->_|*ZYsYk;1K}orTAFr~ z2dbOgq&k3FC~4MO3Cxuf2u)i|1}(xNZkxv2myO&cJo6zk#x-0)36z9k4(*=#?k06y z5rU;e3L-?I?rs$Y^z6V_m3^p(L;_ZWp^V%f5gLZYQSaABh~fuW7D&@hmrRnlG`mgS z4-3ZGk6o|1*N}wTj;CS?Shi$n?=CE~Ne>W}oW>s|jyf8;IeR$i3FjNapPA;_nQ()Wia}(` z0?7lZqPQ>@q}-{@CsjdgQ)a*Md%{%`Q9?WV&J`UgbSDt22;4I=2d~Y5b34!TGUfu1nfr?`>x);X(wKb%q=%$)>V44fpF$? zAo6J-f1}`UY?1je4w4x|IFd8$pF2;EXAty$o?M&M3GIQ_FcTt9pdpZxGItC&|CmQP z;8;wY;uGHu39yr7Zdc=vc(sbJI0<(88@xiGO2lEQV0h+p^3^d}$5}3?)`%JA(VGBt zt?VSL-(jyvs9rQS;_ayihT|2;AUtp6UeU&`@!_WPafd6|yp#1R5}tmrUNwf}_hF(y ztV@h2KcBJ?ht|Xr%fn3-e1ZAPZ&ER-P`9gc#TRX4O#{{GrK6SKV#TVhuDe*;jxto) z*l@0`B7zvhVFuLonzwk7_$PBLqYdIDJ62N0I{37}y#0ip&>JOp8_6V~K=MR+j1~bF z=#(=laxf4d!#vf-Ms$X~VJHK~_;pr{crol@oeoOw%u0_8!|~Jb%9W2J?FZywD&hEW za|qg0;l*;xN30Ed3*ZjJaUODn6css~4}C^>=B=O#SG!I=2mkL_zbzO!sbEaYfW5GJ zRv&OzBh^u>sVPi{GwVLcFf1@K^N|Pt_`F@NaLR0x3_GF54{HEskMBbsd)D2G|Hs$O z#{Xy3KQ1M{*l({qSK{Xk3ts84B~F|iL%MS;Wk@%`rF)L)?(x%wn`Kiy(vMXAT`DfS zF;iWtOVat|yA&MuGAFwfb?FqFxD>}S#R!)IQ#RM(0R=SkL^up?p7H>yT|Q*t*o;%` z7mdwbRKebdA&79{M|A+~E<~ZQ6xetw-1<>2F~Jbq8wYG6YW3#ilyr3gJ;SE`m;@V4}gdl!ZYuaFDxF1yqy_KFOz*-K+0I|rVHCNWSLqfac(8HV3aouCsY9&&^Kf^ zD(3@SwjLyxt8nSKqnl;<tCr@1=iQ_LVHm^M+af zUvh#5!HE70Y2XS*l&yMPHBQ=w+7}jm$6+f__wz8<*c>SZ{zhDvN7f0heMv?+<_0Gh zRj~pkz{`7+A)Pwnr6=q*f-WDsE3C0bU?zBJ**W0if30+)sha_Nv-*qwD+|pC$)dsw z%|dsqXjlA&ezE1BSX3iKHkVceTneI08$LFW0THG{_(^Xe3>fk4NSurvgDFcQ%k#Sc69$9p(l7AQ(IUMi*zol7%U|96{Qd zn2_5&p2VrUj3?py8H`Fi?S;zbY3Gi)_A+fdpiv_ItPCAPoPNvc(0}Ug78~ zLV!9w4OrY|R)ulfJWiq>lsATqNoW zOVbn@GnF*4jX;{XrK5Sdd4rVvcQQ^8Z5f@2~%gB$YSzv1mF$#WNQ`vS-0vI)D+0-sFeNpGsW?9_N;(vI? z9a{eq)*ofdf1#?c*<42d!yA3nQJ{W^GZY_a5FQ31hrNvf=n*g1Z{MUzkDa4Q1s>25 z<`m~~s$htM$P2X{K)qzM?(+)lO^3soL*C<7RX?lGP*wkXv;U>2$Dw{bvgG%U(hmSm zKw}m33)8CcRCFv$lRVqPEPzxH66Sz_SKG;Kb~H@?^oK5)@(ch(S$!e_wu0~W-AqTz zL`OtgB6r9HK`B#EIN%aQ$yR11TA2}EjKjqaMn-fY%S>u!nMctWAg4;esnSKWOk2ji zIj9~rAK=$q;G3mCXk4rY$0wj{)E(5Zqc=TJs&xQ!Scf;YhoYkny6}`{maUKB88Rx` z?Yv&F!yOj8S$O6SG#%)$2+wRG4>2ZIcN8K|EXC>UcWD@V)5L&mU;ZEo1Sloom*bVW z;eFk*OIGDc_ZuL+!LN2-^0Un8E{d zOFTdh;byM7?e+Vvk1RK`Sb^O+>#j!GgX$K887VR&Jd+2qOJA2UmjGCO)n{br)1^~^ zC-BPGB~;z2LfUPjTbn>HFsD=cFkH|F>_-$!sEm=GGR7m(9l<0%fc>CCR5{H!k(wdL zb*DAJ97V#;&p>=8eUrP>7bD)wX`4U-Yz;0zf^>D$(v1IESqyy@cS37KZ5SrRBL#0O z(=@;&Vph=!ZSYAuJK0Z2DUX&4e?*-$*-&l9ltT`q8AE{w|4HQ z+JK#lvQ;EX1cGbWcR5QkVl3tj9(N4Cfq_X5zf!WR17FjFDLZz3C&&Q%u_S8PO`Pn5 zV=*Oa5gy=J%h2wQj$x!j#0l5Ng#U$O!FcWfNid+;JRu1}19=ZTH%*rJp^AQ-Xarwy zaFB47HcVO`Y(b9sTOKoaLoYP4sFzlSqd8vTjH6i<_8<*@Vl_F#@hOi!6IVEIHRSqu zA&gQ`b^QBG52{|fD8Mcl`22^TCa3e7Q00SeOb;E&z#AkC!eV*J!d>K5RRNFCI9nne zj>je{fkqzV(l7m=eKo=@UQJ7sCm@RVZc+S>=Z=ghG zfV@E_sa4 zIz;_RbCGwB?GCwDEFnjR5&|$bHc(p1A zp`_FhzHz;%@Hc5@fFwY~*@uC)e$muCc1k>XA@n~7S7*iC_?Yx(PebPqY*Go8-^NeC zKxr)5(g+eU0kI{c4PoESkg`h7TdVS^M~99F$=u(&!L_ic;fOs@@4 zw|RKxXQVscIbiZ7bUAg$$LuKrm+lKUBqs=5ItXG}HeU@a!0$VJFZ6hiPtW>WPign< z;c2`xzm5Ybo7D}&|C`tK>6on)69C{K7!Ed?P5088h~W=XkPOv)LLrUGbpD~kdw5D& z%xu=$4y-#5y<>I6swoMY;tihK!!m%sIs);SMA>Ie15*+E-vRV4&1&CWItsQ4xSv3$%KyNzs5aP;)2d;LByCH>{N$KDuAzHk z%J|~4MdtY$v=tul+X}qMvVYTQ7vigHSOy$D|MTMj*JOa%qQ7L}4ayKq`lIfsJw(IF z+_XF+O7jZq&$0nSI+EMs5Z%wbgyszLKx3KnS0+f-2Svo3E@L5*Kx}Lt-F<|8eQ0Ii zxVDYN*~>5!7{Re~%pD=k@x?V5Yh|lmpkTYIrR+e2R$w;!R_QFFnW*9yD3|SUukfBW zrP%z=&Z+~dMM~@x;Y^q7TV1$Pk7LuM@y=N;qAXmreu=*4QK-A~aTK8ps>!al1n}wQ zpMGb?1nh6HkTNw&oU%Gpd_aeKk`2^i9he@WZz}ao)PK`LKGj+z_+pTm3ET?fI!LDl zbu$ysq1-sn0O?Cp?bfQeFTK$1dw0Xomr2Et<7)3xkG^S}FIc#abBr|n1iIm6~1HB^^X4~31VJJ3s(RE!IwHr^u; zfMj-yxrwm?9>FXUa^v=2Q?2^6$fGY#MhwBMWX(SAOk)-W*V1+Yl8H|cw#y_AokBf1Vnn?nNl z+S@Y#pNnOnsbK-Y;~N70ybG0t>W=3f;87ai9Ob`hX5TimZt5#xs#F$f3Me@_k2Kdz zJJSby9l#!(y5-x+y z*aS&84Z&$55td2f!xgw_3oq-%KBDm+?yU+&Zy8Tb5y34heJ0Qa=S+FUW!j`^v5zsOoq$3wtZvo75x; z2!BzS`@ZH|4z+~jOKP21Lha%85xCp#-4NI?LlLO_Hk+Id_%$i~0`|}wQ*7t6%u=JM z4fKaqIG+6l8ry^^vl!BzCRXwsP6X>ubYE`Qg=zHjUALvjIwW?Y(0s8N5 z&H(yDa!&dfc0XB0MRnS^jUA8$f!?o1xm}wEItu5TFKxV2>jRyI`FOp2w{Cb{8Yf;e zS!j+q6{tPZqBb3Jo)ybzZ+}9rWyG{ZRW)0~!gN(`)Dst#LLaZd9h%HFkNO})k2TQd z$HMtJLM7pf4hNY#XLbaYHggRVH7E{zhj>13M{{^$U026H1CJ4^{WBxG5QsJ_ru*4- z{FOvSn{c@BfMU%ggiNF`Isd{OdJ3443%e1}U+HhynyM4ejJGwC^I|ouWfgLTC5LPn z`UL}R+^89*0v9fJP*nDSV;MayQSuqOUBt%`o>6AbD0JJL;5js18csGGDx>9$h3DNa z)*Z(r$EaPkvBWSK0T;}Oqc9zftf|Hyx?xc|0B4ku=x15-%}nt1V?Q6|(}#FSR!jL% z=0K?(ttLDkYx-C|Ki_qso%`MHwXTI;on17{Yw5l4zJLSe|Lzh=#77Gob(I) zga25i^TE$ySJkxDZGw@9)oQ|jh>d~&m@m)Of3(Xr^$PG?DmR4R+t0e87uout7CRy2 zKmBtkM@C_0e1m?i`2czj+jq-wgG7pob45L&7XX2qG69g9eZNvzzzewv{S`Fs8mz`< zTg!UYiGKWG-7$=-QpK2b&6R3hx$dPA#j~5dK>FD1G!5O`q#duE-G$D@BFX%D`X%gc zxLHnDK)&i;)%>at5c7N6^%>@OsB9IZ(?MV}p~X$Pa%4gQB57sE(QwybP~lzJ^ZA_c zf0pCvvigm}$r8G8uvH9Sd|fo${5F_|l%b6!X`@Md}sdnK$!2eK`%vGTgwR9Lw46%5NGULQlF}L3ELsI7OAmrY)cs64*{# z+=kB)tGbCf&I(O{7wA|S%u@}~vEm)HRPskyQ_bk2Ds?$nXcoP|=^Um)eqxD5sblzb zlz%%$_`E1J(*A10W>IP=?kU6Duw^qP9gcH#2Szp{^`+m0PkP~7AfYeb@zu;7@QM%C zujK-q;(nA9GUM3q|=ok>1Fjf!Q18dz{%w}T2X{${CtOZSs{5#3lQ8xDIHT!oWe z_&>D`{-X_e8}%Sz;hWo2U7SES>UdbB2I<*So1TsbyfMW~)gGbeh4x6vd02%Hdn6zL zA*$d?G6k=o07F*F4eimsAJd$Nj(VLve6DvXHezA8iPJ=hu2o1&b2N+?&&bqbK-?T& zXr^pJJoe9kkBHDRH6jxZK9CXUfGfDSrv(qU?yg1(;3OsFCQ)qqyiYMogUhzY@zRED z$erUZ+EatZD zT6YGfxN0JnfN=vC;AuiLU!@%LTlj;|3dpA-voMj~Coz=TRkR|Aj$Vl}A7&7RR^(=o z-hja&j7qVaM+!m2Rl$a(6W0^txhxxnWB0lJoIcp77!^cv+vLGFM9UKm8Wam^eI84~ zv`a%;+g*jJbZsb^f1JqB^9Wap3mM z)^lmdK|C#zsxltrg}J^}r$3ZXRHZ$O%8dOG+PxmEHj|EqCLaJjPse7wO6#-4w{NoG zjQE~tP`08Nz?lXesH&o@3(U_5B*K9lPMPR7nG;hB*BE5=oO4r zrme05a(Et3C4XU}R7U1ulJuL_QdBC01b!* zijRtocqQx|ff6c`eJWsP4U%B72gc18$ljL~*vAU|T|@q^F*jYwxxg37G7m}V3^P)< zFmrFN-7(Yu+4dq^C4KJ$7WpOlE zf{Ix#rLea@Gy&(SqNJwx!_6G)V32kcZkk@k!@b@|jE83LT)U|%q9b%$G~x|c14zwv zZ3WQJO+6CGAlfnohO;C>LRCscCS~*obM)mJOMQ$S*hx{1^m0U6^27*RZJ49}(WJ4l zxwkkfS_ zEkn(VmuaXfToeY@NZnJLh-Vn+0zoQv|990e(`1BF+&zOr2z;6PyFAOR?^JV!lwmPD zZ84#|$lNg&(C2Qu&Z?#Dnb%YtVd-)n)#e(a2#1xQ945a zB(dTujGgLC`Zh zy%m^b#}b;?oHdgy{Kv(ZE`!N5J5rDF7$St&WCBkWq%DC)RY`L2BS=@_MT;;B(fq0a z!gU!}747vt^%fXs_XJh82nnppt|5rLOGITmd7akR&oTSk=_`{_!&OghUo!MH>ysw} zpAdMeugY4k9fH2jmi7Ymb}93O%C<}1XF-2KCG-^Ii{_6-Dgl^&v3#(~V*P#qhR87R zKnxR3O#uLx zD^(fh___-y9!!E-dU!xQ7&XXW(nb!+B&d-n1Ir7se!d>sLSiU5u&6<}Zy`2qF_Gun za3rD)FFjWCt?hWd0_9Nnd1f1Vh>WB*sR}^Y%zTn+M=qv^01)w+{~V(kRBJ7Wi_{%9i-?_40{m!q*@7t$+Pn?d=B4lheobhop)ENt- z`Coy#du!E7=%VXOo$xkkzpfKZd<16tE(BC_p-< zI98E75^Ld9vn!H=h*@aXig0{Ort-GE?a0KKl?7vxI}e&jBo19!0oy~oAL$KSd89XG zCB9xDz(1txAtHg6Whm80zeDp|2Gf5VBv3MYG|vj6vpTD)yG|!&GfTk@nb#`cNsn!qin6JvNuW ziI8?9=U4pCs8Iiu$V=(rdU{sW70&n12j0tU(h78t%CYn2Ui+$DXrQ72)pAXxoMGRJ z-2+RMr?k6pb^(Y`XMqZb2ymN02qm7v4%1!cxyQtR0)Q(e@7WSAkiUlaXh_h)@{iX! zz=ONabJyPBr!YN$OQ4vPSnibH*>-c?R^3?F%l`&r?=)XA59hi|60%^yb}BbuMUZ68 zPRw&#&C`MXcRL(o*-qX`g#mT=n^vg@Aymn|AiTRkQ4D)SfRZv^dKZiLi1Iq^Jyv15 zJG}=Dmn1{-0!h9=8Z?advOamleS&G7*KQ`I+^*)7ZWin=k!K6+=JIuPn}}k<^X3-c zf;S9FvA@G0QfJLDER)7e+gpsPK_ zbDT(-=DDrZYN(0TYV=h@iODwoL+VS$|szp~p`vawU<`Y@^p=4Z}f-2_ZfQ(XZCOVrpVk1aI2 zow5Fjyp;^1mE<_WRyQ3(VgW$GInp2V0RpC^F4(Cc#Sc?O~8=+TfR4%SP{l0rQzmNEYKGaMV@04Wzrj&W1|2dJvc zq}_BDo}7g`w2?%TVwOJ=hybo)Mj7ArIt^y)8>wRI(11`d6AEZ;FxcvMylD{UI*#|b zP?aJY8zn2my`2DXbV_ynEk7rjpvl436XE8Rkhd_la24jDSB7HqANsTW?S`eJvHyOF ztz-|34S5eNJM%i*S%?Cax2AG)jVMYebAh7}1~s(d1aLn13Y4eq1A&^zgiQ(!-r4Jq ztEd@7)vl?zb}T5Jz^4?D+gZu0 z!VV=1WAl$cPXA*6?Qk_*_(`8sp&%}Q={%CGfmG{|ez+c3Y!)3DP=wlK{=sJp_zO7X zawC}tYO0|C1<;Ynm(gR#ijw(*HB|&I{>ZdHiJ{Vke`rJ^#|1#easkz{TmUmMSq6*w zLK{m`Hq8@+v-ISsVmS{*-TFAD6xOe>F^kY6b(XIasQc@9C2_3`-D56e0i>`mRul@eBm~Vp@V%vf&8yvRO z1V+NqDWf(*O6cB?#+N8d91fg_dYduD=V|M{4=t?UOICRRs`h(u#<%9(^#21YQ4jky zCS#ShRvR?tvf{6Vupwi@jua|jsiQfIWGwiBRPah&DuV1svrP0OL0U0K>_ zqeL3*iSh&`PBJo|LevrR|d|tStd`C+`gi$SFpEA9`boBxaGZkThnwyG|z`(|7FOY@r zQ9a7PT0zSg>tyrvxoUW8NHUAB^+DgDpf7naz=E>9UgG;GM|-?GS#?;HYo8DvNDG$! zQ<`G*X$Y#2iSUDVZ?iVdsZ^^ec2`Uaf+%USB^Y;!!4AeN#p4EO1n_2im~wukzA%6h}q1OvfL<;QM_B zXYp5J`fm0kiixMtFERWs+yO5#aP{fZK)Ay|<;@D)eX+?Os5v*B7SJ55n9^_u&|tW; zOO@4}4@U$vCxTqYOJhUAopH<|pgBcOb3mH2Ax?Afj+%4i!J1tptvM)>nlnt^K!zQS zX5|R5y9t#3&WVh+Cz4+k978yY*v1N<(XiD@ZqO1|V7I4Q0$IYcZ_N zYMgu+jU|42ULB8{_4}eGBYr`?-)ViI6cfl^`7bp8V$1!b_6=|!6J*{vSr?h!#jj8w zut7BQZ+LDcagox^hKQH{hV1+b=ebcZBd*zLzQz~h<>`+Rl?s2f6$7M`p1ABHpsg6- znrc1S#)3suYkgCuZ%(mq3OX8N2{r#9lHVNc-lPr(Kg?&t!I}T~X0SK>V@o9JKlslE z75D?`GRWZy*|+cx&SS*FsmC++!1T9m`#1iG{nXeN3D0{!*0m5?IF!Ys`8WKc1F8Q| zQZ#Avwm}lSEHEEnjKBq8+iBjy*bxh-{23O$3NFAkhaukSm%;HZS*5nC*(kU9dq$@h(vt0Y#JmE;m^bF>Iu71Ac>c5VMb%8Fzz zJ2|7}iFaf1PjOoGkAv#|pw&P}hHL@G_eJI90zsh;Ps~W~Uwnq#aAH!_l>A?0eT?1_4Tk)QB}|V!w|carExHq$<7;t9#dm!ZWAyuE)CW^qi|}0(wRpD6@)h|3ag6#5ANU z&4M$J`(Ida3gSnwzzbbgN~L2P4n@TFaOv46GnAwi^(J3k;S>v+@Lxd&9^ zOTRCIPBcqDu$57ke_+N9z$gGJ=9Aki$#fpqYqah}MMM>=iS6x{vd%HK(y;Gg1xP`1 zu)w;N5$}e*lQADT96yq?lC77)&ZnDk?!rFU^b`(x4`?Zl4PR0|t+NqG2*(HEL4}vU zXM8};Vc~fLa}U9m#3A_WjysS{r%mBe{gxHp;H0MM*Y^-{x9?%oqp8EfGr2;GHou`F z0muwlUg4dNec66Gusr@6LoE%oS~T?bh68f-vYWiap@*}55IC}j1BbsHvDiS<$c<}>=&N*CMcS81@^Ws zKsX67kiDSEJYFT=T%g}faNoo~3G;)4yMHiEKHyXg?*wUi#(XYYwt{6pO=H*Eav2FQ z7u`%HF*Wkzm&}Igc(ae>W{KgWi6(+a9d~4<+cY~}o#{Mb9gc^95g(afH)`aL^_bXY zxuaRH#Cty%Y{6Q*PYXf0ke}_(&#+@Fk4WiQ;-}IN?+kv(N0*pZe#Fr{vxQdXwwpxp zhrE)x)85kZ+%+OvbEfzk=rQ_BXI)e=qT=>iM1lwYA@Wxl?J0YbEa zL#Mgqt|d`DvGy+MWdyiW12H&G)dtKtvtq=1Q}++gTqrP+{s#n+Lsn$cx6BQxmgg=D zY@B;aWq?(PySEl>(c%+ZP|h6l2T2k-_)x*t82q5*VHPF`YO`^5((#&Qlobb72KI`T zWioKOJaq^xggN*|!OFw(Ll&TNI+VxCT`iRxPw2v%4S6BvT^`uW9dfkZoktu@p;pm- zHXfB(xsNg`hZzGo<`kP`!^G}niJgPV#%3cW_S)Hk1@M1AY-!;@2;RrMNrBD&Fji)V zvvt!ykjK#e<0Av)5p6q~?T&MgXaKqW9?To^#UA!Bb8d*;g@ooRDc_V0ftkGryKi>4 zuV1Tu1=}WYb{&t7KHO>>6ugD}57NMfQSYx|#(#*Q{tUDGJiB0Y3TLZU(q;EIAh1?qE@p?eRkcyuWXN!|`eOKCLVkuHd-Y?HKvA zW3+tw0e<9DQLq;#9g1%@SHm6n<_EF&Q_w21rnu6V223&84^w>c6g9==Fm>j$>qNai zlph}hR^sE$eUf3i1ma+#xfV}5Ztk9Xau2EN%;|WVI!Dd&!7$6igKT4l%5%S#`AoX?CbV%1wDH@eVzP^1va#0F22imKlf6G6(cNTM#nfc?B!Yim&M_p; zabFA@Cs#Dt+@5#p3E`Qa5>pVEv}bs5i%f3@-Hm*~zF}_Odt`w2<(!#D`Hsz9E;H3= zY-mk1ko!w{CWBzn5Br8-&9LY-hYR8^iwfe-#}7yxX#sackAQ2oegb}pBb(N!_f+K{ zWo&JEY6b1&#A^k0@5m30I;;kRxe?1){Rde~SP`v0cD0ua8%s!6$dE;uUaXySSG4*| z)r-Lu(AGeKjJ#Ae!W?i<>y4-e+v-wAcXUcH}LF3?r zIppok(?;HLb7*CgZhEK;x&3fhCgEy^3&c5DxMw&OcdhGt~=`lIwgO z*QIYp?1w~(p6Um#x=8#Y3I7gGKoD3Kq~-56eGEMpQb)I#%?tgzgvPk7>MSPjzg23o|g`3a;`f>OR( zR*Fb}gtCLpoFX{^$y}Kfeg9Jg65${o(=N6?g#xjXjTK@M{sLnBrE&q>7|{ajeWCsx zQ(cMc@aBhga&Dao0S5SE(lxm5u97#{FX#|UrJSbXGERfVeVM(F^4<&0%+(Hi=~j_k z8Qr^!B3_skf5LW=*kABhBz=HMAbtI zg`Qp0kS|fv1t46a0k9-b3-898zuh0G@T15Op)hQL6v4hm76Hp&$v2qX+^XwV*kLP$ z+Y}%sCie?uMj?qO(F|R^_5rv^_Ls@JkamT4IMf*HO?VAVr*YDGgyKXdamw3PJuVZe z8wn{ehhGIg`MdkX%YSY?chu(*D)-9T0xmSks{k;U;!{S(1*YTAcH7YKJS=GBkQG*J zO9fkXA|xu#YLI+ZuRIQ825ZU6mv`Z47<4#d$M-k*9a&Y8c&Q@sLW*aN0A8a&fEXNn zQH8ha3_Ps;7Ik2&?dr!Y0Wap{YIn32Kid|6yX9h&Js}sbv=xfid-&sx@+P!{oZ^fskz<-MVGGB93 zHA|zlMtzO&j|Lyet`XiIOP6hD^dg=GThQGmQea;*x~9xqShvm|Ei7*gH!awN*gP1I}lBoUA#{dHb!;irAI6@Hs&2ZSQ&TXi6S?x_>jfG`lLu&v9C69Z*3YK=%8 zQkBBy7FWwX0(rTAuALl9VEp181r0|7kCE(jPAvr~pMtyc33#Ac&9)1nKqiV5&a*=a z!-JlopzExlC6HZp8k>}`!`$BFewh5d+FP26-xhIMrozzO_(IFrcQbc}- zcgSPk-<2Nb;y48K!dd$TSd(M#`6aiTBk?V*#W7}t*D45D9D6U~M}bxLUa*1tYJ2ZE zTx0K*^H3$+gI^8!p@x!gxV=nLH7WU!AtO7~8iQMWk=FE!4%G^nTfbw=j`1s`IbR$u zw>Ck|+j*1zVwC-Ynn3Tyy5z_&ycVnMotVp=46a=-HwR(+7j=oT3tp;;dHwn)2TvS{ zfbacq^OHklIP3z1nxzI=$~vKNYDD2kXABO(l@Wy`R$;8Aw}cy+mLto(f5q$?kFlx(Q-(xmdzl~0B)+aH4v z!h&u4BihAY-ta7vd!XW3#VyCgZ*3;@Y;IGn=q`i#{Aw_<%m7%l%w-I_W$un327VrR ze@W6n4`|rvuwd?_&4S6Xrs4})CAM@B*On3o2)(U*8I6EPsoh~)&6$nTZuIgmm+X8C z?u5u9_e7DYO7WD#kNKri-~N2VrDFXNC{w$f+7{gpT>aSwykYwtZt#`+}%!D!HCQ(%sJ(EqYkKVv8YAD<>` zB@_FGx3zecWL|iIWUlr$gDgo;gKJjaQP;a09o|WvIxFAOEcjRdv+T?v=TMqQvlKr4eDe72&sN@Ct7Ey^$F7Yd&7Yqa9Aw(l))TdNT zw;?JGLz&iD>#s+lrt#4x)z8KUDigzwE^GTw?oYntq;?^yyckZcSetw4YA(O1`+TqV zR5%lCy=A7`PB-%OCBI~y^q>H6lO6y|#D1xBkjxxL!=dMR}TS%?fo zR9TEl{rg*eStW8?i)pHi8rpe>$eV34N{srII_m#1_a^XB6zTgoK}JVln0Q13f{qFp z5G5#Rq5+3P?P$;-=tjidct=HzBmq>8ge1Uh(~62K9=qatthXqN2OdC>fQSOF3Z5t) zJr3@|;=!?!-}Agx-P1jp5Z2xQ_w&z3nLetk-ur#4>aD7OsiJ9JAWUYC#8R{5WE)C* z9`DgnTtQOc4{ZG9BK+VL9~t1{cK+gijob%HPSLIouT*V}X)m>1Efy0Fd%{?k-%CB@ zr2S{CttFCDBakGJ{nl}1G60iSU^oZ_;-&TSi}4~nCw6p_>*W5g+(5gHDKwz~Q!?L8Zg|*_dMwXMVp|mtdit_s)A!=NX zfAQrDlBP1;>Y7^w;0!7HumT1HKLl=gej;qWjKb=4%Hh|3Qg*J{ziSabeGIS9wZ?Q6 zNahm}o^$3#YtsfQRpNSR7Uh-&EHym;!>VgI)xy0CoSZ8tgMCF`m28I4w6c(2x~$W@51p|bA;gW59o8P zz};CXW`;E?GgFkU%#6T+&jeuLUJ7Iq&%n%FB;P7CBl;teNs5{I@bebU3@eVeXKzl6 zB7vhAlfojx;2otyPKuu=7awA)EM9OS(P&Iu?mEq=-G&O(sEKjp7o6g7JDt)S>n}A* z7=+D_h@OSyH_EXsxVoZq=BbKU3>&He8~cMHHU>fq5mGtlxCDiKtDL*2pW<9Ua*lxb zTtW&kuOhjfoQn@u!x8^DD1}jiiCBV%4r!TD@wW1Lw`b+^R(RF>vpw@l7O}gMpd}Q% zBL4AvAW-()@iMAWky7ysyG6LI9M3lfl#7*d135d{vBcJkOj}`Ina%P zdpAIm9V}fz|GlSFv@n0o)c(j7!iYNZg2Hu|1DN56oh@#3SA+qw+9g;pySym&5kZ+% z1(?u$VQeW1O&T>ke{F>^99^EX%yu1w(*PB70Ug9VlLj8!{4KK42^|iFEX5mGSWUW` zWu$0>9j~DH6yhN1spkx@UpIb;fl+mekI=LtU7dHdR_9$(CuY1mz8nBBPGyQg=rjE) zhef!w8RD-`1Z54I*D#`@q4Gtuiu(I2+JS_153J?VgBCUF-tGwCi@{g_IKx^ZMAcT#B*y{pr8LgrAvs;>xITmKymJR%l$C9)Z3 zMkMF_Nqz+b9c4I*o~UF!cl)S@D0J;^ziWYfR^TPM2TI2ur&>qLjES&+f=!f`hU+hq zia2ivsjWLhfWd$S`bo&0MztzI2xuSxffwL~J^MCQTZ9FQsjhSJxVgG+K*p@7s})-P zozu0G9KTVF$L6S6DseN`BdikrDK^Amw8wb?Qp}Uz1Bk1Ey;Ts1OVC}2zPa?nb0vEQ zQOQI~XEjS(fj>xVq-7;%B@wbv;ZcGK00-XZa)KG$vKs`elC2aA8b$W$O`Ww3K; zX}BmH56iH563}{Q1*eh;4i5nh#XzL!0+@B*>L?Y}0T^)Au=JKFnRY!!mB?SPR`^KS z5Uyggoo;0W=98)_b~H-Wp-$gSRYHn-Zc*JzdJafO3G>__|JS zAD{;=A{1G?iSmsK7yS9oMvU~6Ptk_mu@l`SVHEfXk(}x26a%4H>>H#G$5%ls(QR1> zT||H4FDh0#7Q^H$Y`4`%R|OGouZ&|ABF3W;>S~n|xLN=SbxvUlS#CRMI=6~UPS5H2 zU;xN!KS5BNzjSiX@WOm%B~@Hn``s7AtTW#nT)n;X_^8@C4C4kEcFtcq>0^wO91*Si zxiSRGeRdAb9A}krlX0RW!Lg5qDa4ys#hz8-T#eQ$ipBOP%2NkVy)a0*^sDv7#6JbhI-|C$s!!x+i zQT5KVt1chd`$%L%Vt$G0kiTTYDU$0(lzP4EJ#D?{$R*-`W?u%*wmV^1USm~f zqp1Or171$rgn8;H8tkLyw1-*eJ^)sCp3oIyO-8eL+r)b;1;!;yf%_=cHnHCS#$J4_ zP|;UBb^hLkx2l99nnMxQuy)t5<_WAG7(5_<>IXRmfYZ_d;GrEaQ}hS>M9_6tlXOs_ ziBuuzgx;7yr#O~6DUL{7>UP-v4Ef;;@6hKX0uN6fId6ir#${$!n;x*UaK!;OVs$G# zn`+9Q| zb`~`43|lv0kN{-chst{zF4VT0r`N&vj>Ib%r~;fth%20(JsF8d*|>C4!HS@F>|)PD z1BJb|4Y#iKq&)t_t~#3@?xsG{e*<+awUFz$5{*)5boz zJ4*$kUEpMJt|ES@&!>5_8xa9{vm2fI?4sWCX+V9tuk)!&9}d?JY3aLzlFKm-R^B1oF1os9? z*FK5@gTo6e+qA9yc6YRT_haGuH|5=u$!COT)UW~c#uNfDXdvG_zNS&S0EFEMBl$06 z5xzYRJYHvN#X&Y<3~vJ zuW+pm>xDH42hC(~9R)PhAF_@NOBm~{~;f;X#zHh^b$x( zp3w`g@fL4Vw!?*F${U8{8D@&)?QWH|OJ9 z{_*-{bqNq?R%(`2yM0r}nob-np9uXtrJ!q*JNq?d`5T75U_mqK?=iND6#Dq{n{Zh@IU03&ci@ zU&Pp9#pHbYB78!9m6(`A^9b_GWX9Z{fKMnzxw`Y>emDs$2gV|Ht;J4A_SPK$ockGi zT~3O>d737;b~CyR%(;ZKDW|ik7PhJ-OK>MDpB^2cZqKyU&Zfr>70*NAiHKUXByt`k zR;6avorf!Da|~Osx_vsV1!r?D$~n&FWA;1KIvXlVzn__mB>gIw1)74B*wexOZ^}B# z7&#>?**LRONDf z1IdTz4(SN3B!d^&f3`S-d+H(yNNaPctk+RW{5P0bCVrnp?{+KgZSD3zxb9|k6%5y_ zp(ZdCjRRzImR-LUVhD$IKe^zd@QeU%3i>D$R&YvXQNcx3;C(VpAAU4wzX$L3G73WH z0HfYiN39Q_iIg%=qD&Hx_=(^@y>&Iea>~rmUQ#_&q8hPp^nbZSv@_+);VECbT~{U4 zI-e9MX0lObCg7K8sl-;mr$lIuA=^j-wV#2udVr7~b_UApknY6c+*}8LJ$YCt%Dyj~GqJQWCvGAZYXaNj7k@@KzKu zejTV;a7(!EQUW?TTt5ZB@$-blT5Dq5N`6fDlV?I>?IZj!{*8S=4^L_3=LuNi3NaNS zHwZupy&@ibFioT)-Xt!^hTAG^T1@B-{*z;0E%Vh7VrKCH{5aN!qa9wExN@FOm8a6t zMelSJ)e?1yBdWp>S`vOGU#L z(_88ijkqOz=J=uA%7R2G%cb#<*ljV#&qW<`Jk?+3O(1F?hL!yBlW?W1T8cfxY0|W3 za8lf=0`?3p3lRlRk8ayV4S9rF1pCTKD+mgs*$U)n4u8$i$DL`AN^&tyRL|fGC35*@ zc@)ua6w$9xIge&8o8l6oiH^#uAw zHaodA!Xg6%5lfzsZ93W$JFGG?*7JjMej3&Gdm;xYstFf(NsG%rUe8vS!pj_RJGVhv zz83#>z}`rMMF9j#EhUJwOVr1ZH|L_vxhQuoCaMc1dU6f%V#ACv*eHcZH<*Ir|JV3| z*tSf~pucOO07pgD1!g6m=9&eeP*k*32FMXa(qa- z^TH8JQo%ArV~ikNXZ=^g@HBD`zpP3;EhXgB%7chZ9@1PzNFtER90cs4r+TZrZM$}h z!Vpk$*s(Dh?258xXjc}^0J5&E(C2N5FHn&Y))B?r`WxY3uU?#28j)jWy@#^MV#}>x zSGBJZ8=RXk=|Wjy(B6ayC_a&ruZVZMR7T>h)Ui=^;t_$7>;B1Q4I{x$^T>~h-G2*6 z{w&;!H+aK!ioJV;b=Pi=(B8pl;2*lI+=9r24pn1cVW?2IvZ}b?;;Np+66U+3iV~`1 zcFT=^09`gHh|xe_DP%zc@-(H00}~~Qmin+@|Em3@y~M2rA?LCd3l8TjiQfb&*_Ztj z2o1uOAE6X{-cs>s3GqR|iGPSs8SptMTt5vjHBRCBOL4=%X)H{1!ExakU4SeW>77n^ zu|Jv_I`Cj&bT=^ipQk8B1MG6rgkTo~Uv4Hr$q&3M1<2Np+kb3Id{}Utr=pbyxfMOr zT1A#yQNu5+$THrm-VvOTglbZ-NCaU*MrdZ16_o=wFbk#^Hdu_`(Hl`WiATWAEWKPkoife%sIO%v{}kS zr?}@N)X6M?Se8SnD-rWqw;&<(y{YJw!@KdM#>RFZgMIKZ02bL#9>x?|fd@}wazFS3 z4+bq}SOkNU&B!rgKl}z~p%MO&D7kzQrMt_c_XLebM$D`O2-&(Sd^HqsjKnWo-m1hj z?G_K#irfWwu@ZcbPZJ*~kq8|vh)|z*{G=>NX}l*8FStHD<4*v!;7SigA3eaO=txa~ z7G>=Om!k7fF=XxfaJ}SNID&g&va$o$*IMOsFG9Ai>JY`}3dLtc^4ruR00zQF%;9#QAAQ_@PjkD6phIqVkOHtF zaXHO`Y;-K0G8wRR?Zpbks}P04*y+2gcqjJmV#cWz-^1P=?#8K()l0E=Ye^0N`7xgi`6V%xkvM0uYI(JiU?ytU6_~s_#bK3W)vhNQk z@eSA4;l{D&c@)4Qom?F|Vt{Ko4ac7AFfk_fe0P7xY8Cv8I!40fIpm?`MDlyma`r}3 zb}hOAB!gH^gEZ4MLIMnj4C+x*0!I4CaJox|Q%Qy!ZIFRyC_B98Zwmjh+b{X=p$B0A z%dnr4SsW4biK)@i*#9>q==X>2y?mmekIo3Ri~UVdQ2PG=WY-4Y3*WsspcKBVmhUL! zJ+~^8mX~;y)d)+^YH7dinz#S}_|B>DwDmF2jok#2+l~Hx38M;YTeb{-Ftk5uQB~s6lLTV# zB~>Cqk4YgC=o~cR66gR`4GDCss>UVI6c?zj1nOZsP@GDjP49aNbPx$tdT@FIk?KkU z!9xn2I64_tu=}*|jeYdFY!TuDcOohmpNS3@?qOBc{X})&J{q3W7{3-b_7PvhqP*(! zDL#8L{ttdzqHSws$AbMUgVMH5gF0Fbc zel0JqpKw6ImEpQS$aU4j@e6n{E?jpGe=Ct$#owwbQ?!t7+uYZMzT~)8m~^rfAh+wk zC-nC5UxK8scuATfZ!#j#T;42WP4$lbRkuq-C6I*T?LMtQ@wgNq6isnLVHpop?+A=v zU>R@X7kLJcr&4sVuOoI81*bpkKst)r7i|PeCxJ>ziGCwK0|G8p|8;CD_^g!z#Ha6G z;^S=HtU8v0&*kA3@G-ymU*K~^I~SiWt>Lpn4x1-Ff4~xmz2VP;?MNagED(I=bZP;g zMW6pK@VRRr7oTwgu4EsiSPc3N1WqGdd~W-0@9PcwX$g<8NT@!6j6`5LmC&K~LE z0@0n7ZCzack<*H-t(F4hO~bbem*n_|R5mGD+2gHMHq)(ayi}H|cB@x<4H+yo#y_y{ zKw7o?`csgh$!kf{>fdxl4|D=Ju;q@YdF@FKt=fwjE=|5V#-&LfzLxMr52h*pE|CJH z$+O>(CPX7S5_hb8qGNV%U+n}!e6edNw9iek7i-hQTX4K`lLG7hNm#FJ4c60LSoaZF z3$E}~w789n^zhay>f=`Q>eocN;B=&Jz34}Mi>#bVgZjyz0QCa}^%Q)WZI?z~z5Ed| z%SwWJO;49U>GiKr3Xnfx0X0?3ZrhnQ+cVgLybNEzCwUn^Dh;i*tgHDCkj86pe3s>Q zy{fg@DA4+k5XAo}t^L#aES~WQ6~B-3gx#0+h=I8`IIMP_{F3 zJo6F2#@>m6;Iz7RB*1PhpQR=Et32@U*yX~%Z)@;>bCe^W+rCH#|6^OdE=b@%r6u?; z`S7>Hug$R7w)`ag3y*At{&z_M(*MM?@IT>`Re}Fz3__%(|AQa=cK9#x(Ep~LF8vR0 z4gO#CKppyjpQoe$D?a&&P<~$JkQ&SdY!v!v$-x5q%fJ72_{VzSe`SXY{{;fx9&E(` z7ybpGrGr1eIsDwzBrW_${ul69c;Mf$-G%?wBU+K4>!bkXXWOUg;J?Qw|3d#$T7v(Q z_kTP6ee$1#f1#XtzX$r?B?UzO)5GtRe}P}}w$jPZgX?}f{9gNW(=RUluWt?h;V%3Y zpQNMzDr{7n?AeI^zRDqnbnt(<_P4|DlmDMx_#f@oiu}||0kQudr-OfUq8a=QdVgGVS){_?HQ-dM85HGEex1Hl_gt}u)&N?D{I>R%#^@M zgBQN122G_*sk^7X6?*73G6&n;Qs_JEz`^Sr7G%~83hD$N zJVmEQCpY6JYJV^5hs87(F=1RC0ueMrm;5Mvxxk1ab6n*FVIHIy`}AXKF?8pC%*rrw z%uqhcsRXU6E=bwPWror`wCQ9}=zKKE)L>F?{(5lkw@zft>DhLN#`O`#V%csDP=sK9CR6=%&IM%jr^)C4QI#5r&g6F>qvb8-i4 zJ5L73t-#;)=Vko7+?k!xnH1P2K*YewRdS|F)NA{))u7`WE**7uHZ@-VfW-3e=L%C6 zMFLPB5?O8}j0U72YKBhy7o-5|OD(SGL;_66wYwMWA+B zo=*1&?I-WZ?`|I|*^i=I?g~uMefTtJw)j(Jq9Q~(he|FknW14@i7pOeTFHrSyon00a*10e zaLZP>Q6g;P1BFy1vEJUi3bFpZ4z-*0kFKY)_N~`ro5cps3l_^Udp3W#XegH@p)U3* zdgLrfW?*eE=JeWVm(TC!@dIqm6`rvHGyP7wPMv`p`MiTJE7m4QNk43WS|r?wrBE#@ z8WF+KjIXvUZFYD0cv+=OgO@5oW=*BGq4nUty6)bkP`!`o4fX_`c@Z0 zzqCzagNQz)n|E#O{ohyOBg{edAh4`T^q1PSu6Ze*tmiNFdYV!%!w4jm?Y=Z6E~DWc z*I!M^F@4oBNE!nx@K#&31FU`j3I&FUQ=ZXC3_yD1>8f8n9TyFD#=RN(^#?H!JzyZF zzDvEvBIQtC23<=UNL8Uf^T1cOQCyc{cIyXR3~N50ai!i6erk2AIEZ#{ zu9R%7E_NiWvAR@Wn%%Z@NCzvb2Cyjorz<&R;`r9fh_@y|@b!oYwm zz^G(u>O|zyN0E_kWEbVHLRJ*&DeSd@sq{u+ul0pZE8HcxN3O@Bsnh#O)_NWjxXOlO zg{bu?8o*+WLyOG0Gto$4Q$tZquJAyi$`u5#K-xseYulf!jAaD_dVyO$MOH)ACS(!+*ZL*Nda;6leAB?dCTaw+JgMRYJs zt4~5Xiz{*^5d-*R<;FU$@tv)-RF<&AChkiT0yKkaDe2UxER*U9<(<{NS_rAESq2RC z3bAogh$2^$HZb43*ik~Uoa>H8U-Ha4^0fYlWo`U+9r!1u-{SDp-F-{ zRm4XKO&mJT7G{avj&+nXH(;N_}BfC3<^0cY|x+L+X z^8)^hY5@LHTMW&Gtj2hf3+t**HDcO3>cXO0exB&uZltlN;|XoaL#t^^6g-I+l2UTJ zq9xD40d`nW9E|uDJhrcFPg>^0JL~K`2rgr6Ygk4`{64`;(wSwaws!5~GighE_EokN zUd1)@M|l8H^4Jze$%vthm33U0Rs`Z}?|LT*rz-Xc5)kY;4X|RT`BD+m*|P&h7dMwO zra`BJ{{Z+h&{+hae&v+$I?oB(QjUGpw}xkYB&7cZD^$5`!RyA?8W|g~Q+oK;r=&}N7#yc91+zG*d^`^FVG$f`F#!wsn;n3Yv6Zo>c^(=mN818`B&c%j21uwZ72dK_1USGXS;|_GZDedQ z%nDSzWdceL#s3VpLF$Q=^%BT>X@fofIEfi=kRPz)0?<(@En8Z<$-rhmq^yX2{vA$= zB=k4RCV`c7yRZzDH5VrvH*Y~4wROs6s?h64-9--Nan`sXj{bcE^h-h<}z_ z`+_Bqp0yBQ-+mU{%c5&|Vdv^yk*bL7J5l#ZgrucL~KaBr9Bp>8~ z9AYl*Jn|5a%HiBm3zfaS{e431Wr9W|2@v%G6zT@T-mCaUFIn-9BQv&=&rqwIJj;}K z8)`N1M0a(tIVI1iZwlARHd^KsEWE(YeN+kF#0t9GGjNnDZIQ+t5TaLYmgJ#X$kRka zf^0g5JR{Z-$QD6Z(J~;T2c;15s)Sb}aG(ixud!#pr7#wmlr@j_?W9?6OCx|B7C+sH z$_gQy|3bfk{J?=DIMc|7*-j(lW1+=G5da0Pqj!aWgDgtB*y2@IbOI-B*>m}(3|*8; z95w5>$syQr=I2cm>2cXetsEui09sii^XVlZ%vP3hI3q*W4$Up+Ri^!d;n`v4F+vEw zmC=38mm4iUHOnYfaPj?>S+ZYiR3T$2DO8sDlYL(=r4T9SqnardSOb^dzz`SQdF6Fg z1%^ll5pD+)Yjh4`f*v?86ATlfBo6>`G4_Xn)LFN3tN^5lk-&1{DPT-fxPFs_ zuv=uW`;X=LPprpRkgB~KT1M4b^r@GHr(j}V^ZFj*-2~;qm%l?)Ab3tcavybWAj0i^ zE4$KpML}N#K!~;E0yb0Uut9g$EnQWnp>P~x2Q=SqPVXuNCtjK@-QhE``p>y!VhpHFR7|j%TtkCyAb^zb> zSc*ZTo&*pdye1z&dF%(@Qng1C07S~uU-`=0pP^D0A!v%zQGNi=3;J+XkD^vugkUS$ z#8;5}R$$IgdRwAv7p3BK6pERlO&eXDzTcRN(;<7t=@t2aIIUjh!AWo1<-y6mcoBqQ zI}Lv``z-6}zXB|fhe$I2f=lC<5b+#zbOlXw90+kU#{(w!4%a@8FTxA^AA!utNL7`a zygZcK$|Orp`j8_hSw@WGow9Q*LtUt3F!2z~Zmw_))=eDfSV&DR7emFQL8f+MkP(DN zQzCj%xd5kBIZ5K&Pnu5DdNVjH5GCVYWpMH&G5fe4;@B^E6=cZ3gVgb_m24r6K0vq$ zZIpt7E^F2;waP@P3@r$68+++OXK0{ydsF2|RXl&igdql2uXFein+lAf1!pe?h{Aus zzz&A%*p4y7EltLe*k7U@MpR|kL6(m?qHBNKT}*)p8{UJX5*@G-(4|Dkfs0bPa3$Ej z;T53Sg=o5eNq;Q-K2zy`G5L-4LHq|*m&*G1u6*bC72yqB7uL<+g;tCh{16}^EpC|B zj1~)DbZCJOW-aCis3?cq63uv$cZww88Gqpo>2RTEaV)$H2?cKhYQu+6j?r-{N6c2) zTee4q#PD4bsCp(xLXak+AtF(`tQg{>Z7xxQtB}qW)^pq0$XlRNvvY-rN{8#Jjl=`2 zB_mmjea+E|_5=wP<@8(GZ(aP-=FQm|FN50mL)~3s<06IL;#>XWeTa)deptH)PyJZ} zluUw(wkT;r0B8>S9AiO+T8BN*SuPm_{%^^4!{F(hJ4}@XMYkWel>|9GDiB0 zd=vCxHZBz$cA^qe2&{-6?m&OL->s@*v3uF_lC9d0_frB!&>9;6I&9o>{=_eAf!q`1 z3w!p9AUC_5Npkz;ZG0tc8FM*AwXGT+VGB+P{vF1N z?|}BNp-`@Ycw%h~w<|l%usSZp-3mM!wj!dVPEM}Cp^)InZ$WkkF+gO$SRKO!Q|21b z0Y`{{zOew1k#8==QslE%$tO6@z948;qG*Qw5=9l+C4rPchT4!U#efy21*31ZL--|j zz*hF%EXc-^o9rORv&sweSB7hk!h3GP%Hg@_IcC@3Ip*cT;PCv7l|v1)Bk&rP9mFwh z_04l~ye`3l<1h3jskSP6px z5x^dm5hd)PQDtY4_`|AFY#G&=JFsNr<}I!4gf5e>dO(4%b6u%`RB5RI#)K1Z%Xt;C zFT6u-+>ry>@YJE0;(5SNgn-!X1vH8O1WC4MbrVKqJr72e;z0_3s@Qe($#i&OV9W=d z+7x7r7aOTWuxdYhlW=@_U=Utr*j1Z$U_Zw@o3k8j9-OagBQ{w+Y#N_b*q}Zh3?OwnN6Nd{43RcAgFU2} zY*Y{n4Nz@-i+yKF0DGXPjed7|DR$Z3w6Qyfc+AvoEF^_up{;lbJdRqY+t~1I5|4`m zEP_ehXfT4(W~hkYuB^HWM0u{KeE0oY{oR9}?|LM^i^_KgtM5q68hp1ruy9?cHkem; zj3j7wHS3Ex5^&Hfm?dA2$7lH-|NCV;jse_L2{lMUJB0mD@i=}m-Gdd#@V!~ZH(auT zH@_U?{pLBoIaR&+)%WIZzIll~P%H3|@6BYs$;TV}=x3pk*E`cDE!odofxKTou~Zf& z`4jGXI*G>o)T(`qm~;fAu+)`@dG@j}D5a2>B#i=dZ}w=O%xGJIBPR11bq`{njch;R zrhXXV!yG=eZ^UNAnE1Ws832C1WAjt&$@Kpe-huomppT+59dfMhEl~I6~1d-s&F$sGkm}4gnk!Z~d z{5qjI%Nr-9VR^X}q!FfQQaJ1ndkf3odlD?~0*!RI-K@VLy!H9JR`dxwT_pGYmf#5H zLTL+d0D-ly77|44r~jDr)g?ZOK0FP2_AP19yK%f%q6NKQdI@@4;9%p&`XxFk&**=S zzaqs}SVMw!kW55{v~&PCN`N678gw`m%{@3u9gs>K%78S-2}pa{3(tiubM@11d>ly_ z^+IHS`+rDj|G#f}EMj&~%fs1ni|aLIy(l6n8WJ}?kNsDe_xXdb{nd~CAGiN0qH8by z|JUsojP-Jx}!PoxkNB4;T1(5#;Bft;YnCUEe7uFpV{mjDx6Q>!qfi>>xVW`H@jwNGlzBK zQ)feZb2PMFc5utzPA!m8^ZOo)HgYXIXV~L;CEuK zk-sa+W&?sS8jYWa-zZ|mhIDLp-L!Oy;LdF0trRx*2R%g+qzLmVdPot?X0!m@5@x@Z zi5d96R>?&rMMt{b6rFY-GXcZ*L7e+8A=^myrIB%;N&H0G;IQJ7Wdy_j$yzvf+kObd zuT^f|NB{AcKo>l+r1t6uKk1~g>%-&|j3pb}v7eqR`vpSCL?`clpKNBs5I$@-xY+$- z63%w!Fm;mi*P`)6%ndMn?T4q|NtXEH3$+z4bPCOnR?W-!>zK9>gZ}8jAWTCzv>)!; z?T20CtA-ge*(UUc{Bjfm=XHJL=C4#D*e{~8^9)XSY1TaHQH-);R2*Qc4m)q#Bya5( z{|b^7gWklDF#*0*`T>C3#IJ1Fp<|}h_p0{`MapGCYE+(l@$kFqi`4QFr^_g9;QXVmia^|u7ioK>p4kALGCzj)+_ji=Zmu_=VrZrj~w zQ)-uFC+)_GebtNn~9+bd{Y^XXPW&?sd8fJV0 zghy=1=m?aawjG9IeLAIgf_IM4QcJV#kw{^X(Jf`$Vc%Eb|3>?kd5|2A!zzaO>9rUB zZqd6ADMV_0{_X+y9mEkf%Jp~qqS61r-$6f>zoWeaVU)kyoiv20{%&bHn$Qrs!M)Jr z+z+(YIsVQygp)`%+O{U#;t-efCO+6p$|%KTka6@&6HrmMQf5^Pl%bukkmh)y1^2RZoen zx=K97DFIB8%t;BUpilou7c;F#MuF?-Ai|897T9e8nrzVQ`WjyN^e;Spy|Nd3wpsSc zt9&%_#ZQN&zDtRp5TUfO4>`i2pAgv_KP8F0_3)HJFrCyXMrn^U`XH!X5=|P*nENh; zIc@F-1vf-DL)~fT)RBoJ)J&YxvNK%ADOeRub>N3$I7eoq1Ptgz z$=0jmOpz+`BCfDd1O4HVk-W9x`UgpCIW%A-W?u0?#b0NmwULOw%JIwi>)oW;IorT1 z08oPeqXtAGo!RNCNaP8#S0JgtV~RcDlvrz;okygIHaln-cqZd7#8i{$>SMI>5>r*u zTp@YHo{WIjD{A;Io{6&fWPka@HG*Q{7>1pd=95<$hFx+m*fZ8Q+L9ul;pIn+E z8GzLBPHz1Er>>4@rHII9_v}f3!_(`@vu5%Ec0eQ~9@p*y=~rM}Khfc1AQo_^@TQ&3 z=)vY$2e+WgQ0MPGv6>qjzp~mxV>HFs_%ZuLKpOwOUznTg^XE#QC$c|O&i+t2@_yGG zgkfiHT2{A^uR)bkpd}Y&a$yD@VG%R*D1VS3G<`Y?Qu8nZef4)7=f~iGn;R7sA?%PL zzAmK`D?^zPt2pR{co>xj8Dr^bWcE`ToS`~tFTxA^ck6zYKr)9F1(T_P7~u9(f00HY5(0ZuD)+d8HeIo!4agD+J>U#d+G=DMSc5rUE9fFW70 z_L}zqMq|6~0#ieTb0j2~%B~LFaiEaoPX6#*<{Ol{M}fGoijh9XSgY9zF~{{xxhB=j zz_AL%r`D?MrwGXfd;^E6=YQAFVdD_G*aP?_qD8Q~2>aCki~4auTbX)mFF$fb^Ey86 zeK!Ol;HXWCJ-ZO&eUR5O^1qb)FLmLn-QF&2Z3V6ng?+;HAM#4);)fR=P`&f2a6MNi zA%!!edgm44`iIm_+v=Uz#;T|Ku3gnJQg&?B5vttPRfpgLWh$ydxY$PuKO|&ew+FZx zBzy`htw7c{N~XvkDHgQ#s$TR}_MRQ7Yy9M4h; z9+x26=eThF?b&D}jY3JR}6dQ&EM{UJ6d7 zNCv*XK_mlTjuXjHU#aP+?fYSq{7*Q&mDJs=>?_G*Iw;x;&d%6vkWV3g3^_Deq>kv9 z20nf-E5JiVKc#>U`GWS>dR3ldt8`v!bMmDZg7oaNJAnjb%Kuad>>PLZ93`+V!U}rF zO~v6re42BC33M_)5HIJ2LmsXfb8ftJ{`~h|I?MDx5OgM1Ox2hgatIy&J61EeH*avx z@!30Idj9BJ6nO9a8YAm{!q>%!7=?!rw9f4Ez(4otOwDuA6TYN zDGy=+OaZGDwt_-Rkmhu+CTIwLN-*t(ScfUju5q^qFH|YcC5fkDx9@CEcQ8wz@-e6T zVt$JGIem7jI_$$O063zoido*3e=y9fQT#lAO=X0doGF;i(kF9j%G4|)!H^{fQO1|B zMOnv4o87YcqlUs5gY8)Ej^%{wXtF_yN3ifqNOAvcWkrP)#qg1Oc~fJ#AFFZ z&!|ks9&y8*>ESfuh8txZfx7%NW60q5S6M7fN|4Dj%uxCrZTI8aojYD|)iw*XJts ziZ8__Kyp+lB961G>N?Vpr zX=gpJl(sDK1eEskeMv)xHVGSP6ZJ>dK(3MH(`?B20+7^f+2IWlj z0zVGVxQEXXo|1aa7JqzXWMCHqj*(+AmTHCq^5^^2+NTI*E=TlN1pXT=dsFHP{0zPn zi7FNVHVZ~bIS^u;m#fT=NFA2$tmjjhN410t5K6C69}S8atCAyclVI-Ze-78n@ru@K zYB3N5sJ3y7$JD>~k|RWw4Bzx=eW<~3S8KvL&Lh4cxN_!m^ubT}>$pc!hhg(KJR=bd^vM8rojj zQNx<0N()_oxJ=2h6K2pz;zgzbZ4>(z1E@3KZe}ap)oeh7hk+d4pgF`Ays*!Ci#;y*c}N`p zcujqh>lB@`Ykv9(`9knN-(3Lb-?#)OtBs^Dkeh0`->eq2@df?E56!dOX z2SAH_&P)BQ+;bcDrXK}51r~rD0wCiiSB#nxzrdEn-(mzMV_4$P1HWraa}+Z8BT|Bf zv+Z7QdQ1aPO@OCd9KRkH_MjMydcJekqJR7jkUyr3`4^xdjJb^E#hy}`LonuRKrbeF z75goDe`EtYmRyObxNOJ$N&pqOOYinwO5T-e>m9{bRwSBz@=TBQHVpVxXfsTA-$hB& zjr1Tb3osZHIf_wEqYYv=kF-8|N*QeeN9R|cu%^mDZS(`c)moOE>T6aWdusl)!L zNbCDH_}q!K+K6OAO!x}{6Pna4BdL6m){Fee?6#0U$vKVNUiWZDcD?{_8PbL8I!c8I zZBkVB2NL~1R9X8^ewBq-igC%s93`bm8yBQK4uhcGEA~u@E-@Z=5 zPUBBf5hAa7$bAq#k+n|o&bYGsPlqNnHA{C)9nTiLT0Sp23V582n0yJa;3K=9_3J9T z@z6KrdYlD(p0i=8PdUxqO=7;IQ^}p3a@f>7p(qBqFrjL|(}+_>tYC#Iu3=D3y8sqq zy@)@a2GLuD!Op1%E%s4Efyw@ttRH%X?bZ6mf2_dV5vubPr7{~dqr51_uUwSKg%zlI zKj{XdO0YUztON_>aU%wRTSBRXr+^URVxkfv*dtg0N-HW)vHKS+R(8LdP2tbyfZU-B z``kJp*4sD634y;arodP8&7JXi@_4m(@P0p8`$g}AhBFWKzxUB+{AHjG2;K(_=!3nd z0xvu&ndVhzd z4XAbB;TB@fHYE3F=QI$t$|0(c9^vUfkr~a#xAA$pIjV5oy(q3GH`Lq(=S7(VgoBP` z1>&mY+{Iate{Kg*g5PLluTz9NB0a)4chMjCNiKssWg15=f_Dx=QiPa0q9!^-rDVc_ z)6%asFB~rbG3-q>Aj>~sS~R25@hd!C&gJmsW3-a*c?1OV`{_zx)zBvemh4c86?py4 z7`}$?KwN_z_!eh->8-+)@~9!sz@g`;dLk@|y}uDa9oI%OIeQX#?m3cb|9%s^%cpwb zr2_fj9gqgz_wQ7nD0p$m8j-kacr$n>H^HQLu*X+7hZpu@zKUPY=O*Pfo5eRHepw;4 z>0fxIjl8GNeGkNZLyxrk_x#59WZ!Ecu z>C46j_)s*8Z6Gjb#-1DI^BN}i4A<_5ufhupI!CLU(CXQY<@lYa)Fdpx)cyb~0cGrD zHY?*0%NV+5yp;!_jkF5~KbHkC$ym#U9Lw7Uk9VtJc9O0Q-_2t=eCJm9kv!1jTL^`U ziOtLMFnI>=MCqVDB2P7f`3>P2bNE2zq!;KxEY&q-nA`SNf0Tn~^nVcUcB+e;bS1b_ zuEhSqR3GKi0U=s(tla=TWD46Oj%k*TU7T*7mY$kr6siXMq`1T=z<060tm%}of~YIx zoH%pEgtb`GnwVqXVXJSPE{`59#A)P*ReTj*creDekH=wpNpi-YVw8jP+g58os=Pbk zvmYI<(10z}y=UO=gbGfNS8vGRuo{qwoPzw-1R6`1dlOv6*(Fm@1BZ*8JTLosuB+H8 z!$>OZBqui z2a{_oaQ;>0$=E8Z;@H!}3)^K6uHN3a64`U1>Fm?&nq z$lFA;tFthZVRuL)x|fPciK7lG2pq*+LPRxn@>dX1S23yloy7ySi0A@Q*(E@9_SfX3 z-C2IpBM8GI2==ArNh0`r)?sx!ZDlhA`xJUCk8m==4vylaV|o5dPUc}<$sRb#bG#HM zpWP&)nh(pe4Y~&7Gpuu4s(rZbB@B0n+r?6HkoYx4;@YN+aNXnjiBdnzWN1&Ubt45fbgP-I! z#m8sTy$s9yh{}q+4>aV7$8b34n8pk_9F)tJVa_REg=czL9HFxQCg*aF*SQpUWSDw# zKGu!2z+&RbAzb*0?t|j1MQv9k-n5r~DF~k}KO_>B$BQ@-F3jIP`EWtFqj;gJ1H2f= z&qZxO`YIeGU&M%6Wh0>{V2?V(gLLb1&9-Tb*rsc9^BX3>06U7iehN;eXM7>EfV6_8 zSS->C(s3+YhHy6|mf7nz5?{)2-CRC&#Dcp^ajGVshkxt>r&Rm^+@f@Re?IOZkL|=F&QkK9&v7=5`6qAq%_HGnHFV_+{BNfd9Nrz%W z!Tb#qP9s>#rmvcU4H(H4XWrC49_uvHQY_x^Bk8mu@vi;E7o-!W+y2Q%Zt$lZKypL` zfz)FIReu8e)HwslpVcTNoOrO6xNmm_VxrhKPbZH97Bb`lGH|Q{o#lvUIKkha8h=i@ zzA;h8w^7yaRvU*gn3YIWk+nz-DkF%M9U{lVebz3^ZLqHgJc;|gJx*VLd@tH#%Z3cI z*k6hn)GdRT5;RMGl-u5J*f@WC-T@HSg}GVutX>keU?g3?cnZ3(#W<-HOHc2?e8b~}~Z~s&*%U1b8Rn;w5 z<>zO3y6kULyBWM2i$N0PALNk;#RTdk)btk^8Y6}g?(=o3n}|vY<*yVF%5YhkT%bdr z2cAZeMI_Ab2sNN&S%IHV@pg@gn7!ZSY9Lojt&$N+2JCk!zbj*hTh(Wubt7b!N9T%| z_~auz{R0A#27U#^+xz=+ZB%VIzY6&M%1I8Zy@W01a;I?Q^nqQ3k{;HBTpgpBq4? z@8A}jjaOO2x^GnDDeuxS)NGzdT46jzjJ2hIG0L$5&-ur(lQrs6t~YwF*L$wL&lh{1 zr>(~dy!wXHAt5S@(;>XfUkG}pecvFD8;Z~k<*;O~l(ev=q8eS_NDglyhqu@YGT7i$KTA)S(DLF9gj-U7CBR!V;S8e}7PVJ+W@eWg*bWulqs6Sb*HU^}(u$of z(tEc35+Z!gMhRzXmd(S%2K$cnv}&{Md(*ufa2?p53AX#}!T9T83*ZgLk{J94k_(?h zBsoYg7=pH$oGi7GbDPvbO?XVm0UOTXqiiWjTSn5BGkTrKIr(aUM%xsHS{V)YGh+e9 zO^$7%2qxiy{H<5=cLD?Un$1FX$lpBH0r`_(m*9#Mj$Gh;#BX+K%>yXKO8vx8GArqR zN;L7JqN4dGyZb^$d%e3zqs*E(? zbjHJE4ppH|^Z>0g4Frrh^N-gXM$B>aX4aQ{XmzNbs<)OF=+3nheDhW?L)2x>A1GlqmM$bcZs&&MgUY`>1^~h25ob@ED4P0^39@b zfYdG60ynmQ(ss~@-yoLhh7e^@cbSn@4uIQT^9-idsL8l1!-+%jx{ zF61gaWlTwW4#F~!-JbeK<$WViO0_*zsmJ(ayf0zjAK}I0S&j|5+%P-#Ko1*vZP>q} z47dWoKF<8!`ad?G-y8h_t63gcgm)SC=DC>5duc!Xvvl_^>_>SHqJx}$a9fLAG40)> zup8Be2X;BIfZ(V6J-U`>tbXF{M8y@2GQskyn6YQ6+P%4Yu)dH4WiAAij zz>S|usZ*R%wk0@b(<~hu=9ACxbZ*2087(J0%jmPqsMZr@Jy9_vm+eC*>~E0t zqu($w5J|F794O%^*gE(%AR>N^i&30>S*>7BhuX^8aU$7E4WkTl3no@l%16*{>3(nw zz{;9%yeg;yF*qN5CdLWI(>}XG#cKvdu9%LYS_(L`6GWkQSvlgD%Yk~x(aRR_@4HVk z{H;JxCmz^e=&Umkf<|2r?K2bE%o+)~;^yNGbdG?2q7loi!<8PEw<<7BhEXUU`4XN{ z$U==6DkCbBXg?Vb9P5wqKcD2LR)Ode{IC1oXHoyR?BM`ri*_ph9RE@VOBunLI@otZv|U9PArDFZqp zUD>vY>;-4hMcc#@{hIE_;XFN1J$BvWE5NC(ItVcaB*D&NgLRX07lTk{=-wFwe=b7; zC~8L>BEie}<+Rx`oeO3^a;?(nVmZ*1)PSfB37Ua1_!{oAgAr?w@rU^F@|A=34e}Mr zCN>$d{s2)3!$9bKr#_eDByjv~Xr=)+YI0N4j!j>(0wwLHcWBcLYv7ghX?ZxO3FJkc zM6_tam5fz(kJv|^s5AwXKsUzMuq&qUlt%n&M&f=b9=S&0U+Viz4$`snFM(pcpi`ex z>`C+W{%|`bZCoP|==zMZ@mOE=E_*{&80OVsjw~oWMD}ednQb49?gyPM#tbl0rNDCr zxoG8Jg+!2mvVG`XI>t#f%(lP($orvfmIB(A*85)#+XuB_ZVGH4gh$4BxXnm0s20s- z0#;`lsNAFlB2YS&<%mTL+Q~k8KX4Q>>+cdK%kBd>5;Y!whB$GH>YqH%rByYX8GW;V zOno*i{R=5)B#s0aXlpTg2Z$ZlVv>`~5(^PXcRO_vR2vaf{j+!)uERcaZS22&t>FSR z_)G^$hJp}6i9t5#`B5@gs^?zJd$&k4&r5Ed`RaDu6scxox3|i{T+Q2v>QJuQJcM$ec!D zEwcW|hebLaqR9GP#&C@F-Ik@yVMbAG8cRzfs2$t7vG%~U?#E@Z-{kZG-G3Wym2b&(6s$OOCl|&k__(J^{ zot`=a%)BQ@K6;KB#D?{X{J^G{b5gr7f6dfO4QnJwbGsC?I(}|u<)B(@P?rxO{#;9~ zHh<`vJO&E#kKLL1>JlJn?$<1%P(b>fI3RQt9R8vrEA;SR=>Yh+5~4@E2Aq+yd^JPaxnHjp{S^Kon$47;w&`KDHNX~rVvI`BA6cfxkxVrS4n9+ z8-35W%d^HFUl`MQ6qNm<6A|Za%X1UUL(l&1@a<+ru--dDF{D?SfBbQ zh&2pol(`Dm%9w?owsFZZQ35+JITondA=2t19rgJ!LB(I))uBy14l`P0WgQ|2k-QE< zg-5OO5$Nc6ESUcgCE$1l5>Jac&}V_&6Q z&U54voqftH2LmXp&E-_j#qX_LH!fw(@za@?ZiQa#OWy#QW;nh-Uf6@M=8p^!yIMxM zfv9qf+LTE}#*DONg+SjCMZ?rsFA@`G){-_wmPt~i7@4UP5K_Uw)F!Q1x1u?;VqFIr z)|f%GGh?TUo#D}5!v;aowBoviaB^}}6_&zD_K(p4mjEwtmn2?+2zMXth_L9dUxcqZ zb}u>p?iAtpG0i#dX-{|_KS0ztRdipMMFw8cU9`72+WjtsXYI2i*|%Vf?TZJ-b3dIt z`qy0g*IcqP3Rea?6qkvj(`bRY=tB(^9_k1#LIy*QhtV=im`_&2nX05kdtnKjX}bO6 zz5$ohw^@!hC&GPJPS&o|ECG$mOEE9O2jjt8T2ppUpn8CbgC~ch)2)NgO6;5|(9c}Y zHq7dc($w~h@jVO^qb33?1h*KErPEy^7fG1cEtTL+lVBpifkl<(7|f6aQGSW{IZDtS z8Fxs)E<>`q1-}FJcf%e!Jsb6#q<=EL_-N1Z#XL3(S6cUjL=ay{Sb%(6E9;Br8C$%K z71{Dk<(Y)*YH(){{Zy%DwqcTPWD)=d9Y%p?a2%MrL;s++eCWh5bCo@sPn9&xmqkIX zYNeSfns;N2k#3AJKdGGqo|&y;3@GONw{(J9!|zKJuw7z|QH(L>(z>H|6=PJ3X}4y| zk0-_`#EQ1tBK*qw1HAQIC&nm@_0KcAjYs8$R%Kq0IDCNm3S&iij4-UFI>K0XeoBN< z(Fb+K(EhCMLQn}Pjz>L+H6)-=v4+moK|o=KGS%B`h8rge&?4$w#G&I3Q$-P`9CvD% z&(Ul9V~!z+Ikqt77zZq#(=o^U=71M&hGqC!VvhGIQxGCOwE)}vGC0mZ+V;hAh3gh$ zj(ZSHNz9RZuM=~KmlDktFNMCRy`X2SHcQ1ET?pAaob}T}%prr*+a&Ft5(OopU!*O~ zl&H>YtT2~>mv9TkVomIS==A{;J+X#EafTc3y6^qr#zJ}Sh^dxkBi=!U8xuzu?QNcTw4maYLrHwT@3Zz~dEL342 zbkF|h7z$-78mM(VYK?!XVvQ$85*yMqO|0=l_g1k{vBs#0f=y0}=ka0V#2Wq6#u`He zST80LYs`1#5ithklyXZMZ7!eM_3o`aH!fk#@qvsrVoT!PB<2VVK87&|x^Pa+;r6E4 zndTSvO>2~;i%<&7$Sq*4gOFU>JL#4EFN2Uq(;tL>&vG>ZrXGg+f3Fh5qe9NS=V_l>`Yw_6A4$sbaW643|4@FzNp| z{{B0}0$>qG5fFdmsQojebmDK#*+2yk1-#-X0t(i9eYYGCb!ft=99w*=;zmCylMpAN4Iu zBj~BKi_dACfdMh|QUj6 zU8iAAYM;W|ZB0c-eqNM;?N}>S(4@Msu+`T*&avA5VxJ>4FJf(S?P(V&B}Nda2^p&q z@W2GHs)kURf!D?{;<%l}ASQr9`WS*C$IPwdLgO5J&{Mmb%)rDOK|>&%ON7yV(VZrahLA)eI>><(+^jd| zp?Q+}G6_L%<*jr|mk2o1xA5M)l_WFFKMCG|01!&lFWuPw-EHXsC#`{s>;cV$DxceJ>;S zN2!H)B-3upyPbjN$1nW3DL#>EFGEHomxq1$!*w1*Ls}R!kGw_WzgxABs zNi=(4U>#f#>7)c+x*LW$TO?KYNJJbJt!2Ut9X=ecB_CCj7+^~YD@P?FVYn}q`xGL@ zIP6a(GBmLAHFQnB(sCKUiP0lyy#`hDkJr>T{uyRJ!@LP1_=3EqK8hkXE=7A_ze)=- z8W;06{-p#=5JCVZEG71K-Fc*-GDPvmQN+IV1@><-nDzL>`@jqyjAadgQaaNzI!Egn zv1fJp1^Mg7>CfI~_6fiTK_Z&oX`< zn09_lQSf>AN+mv^JsgNT@nw#MJlFD=hcGHmJnb8x^2O)j>7Oz7XnB7GHw>;Dgo5FP zGuHqg94}D+3Y_ioYTm&SsZx+$`;A8&m;@XE2F)tsn4=I_Pl1T4mGXb!hvURsS~J=;gJupnOTUDzyIB_9#xnfM zML92u%sc6jIa&~ebxhQA5CzuJf-jcS`0U`r%CVO#1A;NiVFVZ(d#tM*KoS=h;Wkoe z-7H=g*f?wJ08n9UO(759CHYY*PmUfnVs9r_sXF*MZP5Z{P8QK60VJ9e0m*BFFmv|W zzbJb&&5UWjBqFRD>+gSAG8K2>`X%^xNjw-{xKbt~O%}02{p)Fh!Gb4;xQfM`3HBOD zjA&5*X6oN;{&GI9eVM3RA0m%ngvxg26s2slQH1&_whUr55s^YQp6TgeDNjB7iv4Rg%+=zc5)98o=?7t{} zrYkgug{;6^7ic>)X|RV}NbHXWxp>_S{dlEN<#hm=bPmX$sSWY7L5OkisLWp<c}FhY|;BH0SXa0;DuQRp_kHK2j6WtS(f|mSa2Q{%_Ip!2ZJ|pofOnWI!=>5Irqt zID8Dv9nPm^Q;rhHMi!e{0YGY46(yX_I#Bv!Ls83}+X;(1p+)aeWXaqfEl*jIbrwc{ zcVI%ET@PA^m`r*ZOTNN{{J@%<$hU$+%z=NqoSo)jhXi?&{BG0&C=Y=^1%CeswHEI1 zr$Ij=%ASgHF6?3eUSMIRMc6GS(5X~Y{4JE{b6`m=w?cEeuvVF1&u1-qg8e-CzKANx z9Xy;Rx%Vn#^t_6XUln6yO;a{W5IYBmZJ0XMuznAu?v-Lp<+QS%5*0Z3WWySDa?tFy z`Z93%ld8c0<76Tx1LF?fN@R>~IA9+s3@{hwg9*g2ca!;H|)BtkgS(xidgPhUQ zNkq1io(>_6nwfnwoEln2#ReyNdnXY!vw9NDbyYp|*sozOBCaH0sWc@svz3@^=kD;V zqRfan@O07eplW4kpvrtn5S5Z|*RhPMD}I;Eq<2IKv3@jLA4&;)5I>ni+A$@kLHiB; z9CE6S*mtl`K)ZgRgSIm~K|i6)@?E)0`^k8~{8%xwK%Wkk| zu-X@;T7P|$P+wlk{IpOF^`MU`c=cYZ2o@Cq;rRe0UlhggBkg4?jPV745ws8PZdd5f z04^gElm#cKkN`{1VsFU@r>}*^dl2@)7oPq)nOnQLlrWYMX9ztEWD-V%H=zCW_Y{oi z*#aV}z6{@z9=MuFWI(K0-K$w0ZnEtco>h@Dt8!oiX9Q^-*+7U!5pt&FW8}oH(T#v$ zb!uoAAA%~$=*i%X6Reeh_N5JW2O`gQhNTLK+z1nc(Lf~PE(O06+KkDvGbqUD~Wsg((ni_7Z zL}DWb(Xv9@uVOXSpqLJxN)u1o17At@MwnMd@%&ak} z)v(5N3c{TYf?7pgA*?e$<-~8riRa;a_CML@dnmd|-%}K9 z$@d6dwZC0>kvN_sTz{*PrT$r2W#yO+JzRU*65ypB%ly-n=Z^}L5-ZijDp~#~d85AW zjjyFZ{5kqkE9*j>w5=vo#aGIZ4%n|kg!}i~GrY=C?yKNU<0wU_AWul!iigDZaK6z6 z`B#aeBz%^51f&0xJXBZHJ_}&A!liQTiriZ z-?CAU89IHmt8d#*YE9oByIzUQ9`)@hsfL(z)|gP=UhfZU@-l`S9h14&_N07I_T(fa z=u^+_A5KigPuY_zE_Cr*d0A`tt+;M4@S7&p5WoC^s!ihe18_4;6`r+fPa>qFwkPFg z){+vjClfvPWa58oPX-DqVoxqb^+>q+AKR0T0(6Q!IkQ3$u$nUZ8|=wF>}Lp6p5X*!1?KRKReR(_>H0Z~%lg`uJMSMaQ1(?}yiKPl{TB zSJ{(=7YMxnxjlLM6rTz7*poZujRY{_;QlLnvix+dZvH#GPh|g#>}0%Y1}-LCi>t6)AaK@X!WG!`C{|v%p(dWM;{%Bq z0>?-ZcEHX@n~C-I?!E{_Ti$OYJe{Ybrin?VJ_JSxuvpv4I@Hc##DO>igM+jKoX)Kp zW0*q`xpAQ+J_tUJ3acxR!m7NZ9w(roqxmC&DBMIzG8%on5GAYHCO%-Nq8Qik4(O-J zg&VRmB1AAK{Wmv^?FFRb{dI(ww8xgazM(CHyjIpXkYET<=doS-FDS+-+c`MFfm^2H zAWCUtzl*(hbv|aezF4BFK(C!@41=YDXsL~z6H~D*C?m>_cv#3b|5X*cgQGI{gqQu+ zu?5hJ`8-&5V0}dZbS?<;=Q<(h@3~*lKqGeIP$VhCuh6F4xtORfJbqP8hgM=<9{uXM zERQEJ#xH0DU+7-VhuB`A3?nou`3TrZwVAxIE4{EriAaP%=7=PaK=xAUHnYRW+|3Mt zM;RzJtg|zDfs9)$Lx2e6`7xX&fsYkv7^_uqXCIFWLLeL_a6!cN=TQyA^|gczZxkws zAwviMjnb5r#UDv#9EzgYT?NUERYQ$fvE&K3BQ1zI=A#P!AzaKUQ~LTcZ(-gS^Vdw5 zL5(4EyUR%mzLLaKN(~$^NQ7Sp=$G*_iRW~OgbfpSkn2Cpdc?GgLNY}j?U9ni#@qo> z9wk|{grHB|dbVd}-Eb{wiq7Ao$F@wjXvz8PJrK2`RT1la$3IB_cnLBF2yt z3L3UR&-GXC4LuR%s=7$Gw{#p=lK5M5qCV!lj9(>0bx7ijWatUA|B$qH#<8#y$QpKI zH^y*Dd%^jpp0It8bB+(7FNlAHg^0@@c}6Yj(i2Myd&7<{YxaG3`UVo!zaHNl0)4>o zvQU~lBwZt_ik2v|0!Gr1Z@8S~W6VX$9J^d~r6D>pB%&u7z=*8v^C0XnvBT9X6vtD^ z5CO|aKB0_`FcK{?ja62UK@7oHS?G$MI}NV0x*pl9D-vJ3O(VIg>3v$aOdJoipX@cB zxQkL871>C{>?3-Cg6*}XRS~eCep8y^?$|n>uZxxOG1@|C6}0fLml16-kf4Ko;#)1@ z?O=E#ruh{(piC*RfR_&?drA%fyxI$(AHGt+2V*-HiV6PaC@Pt4o7Na6^$qlAjeuE( zQp8AC=h3p^DPRsfbB$VY{r}i|_wcx`@?Lms>oSroOSwCNkV#0uaS}zo#wJ{3%a-ND z7h%bXlMt+tG?oTSGn1K-FClB<1K47N(&4o>!ZM*m z25d&SSgG@U`0yU+0;}*v@&7~@tp7sO-NI^k+uU^bmst>gf)Yo@ z@A@si>h>vk$amNdHr@S~;^w#5@=bU1MqYfF4R_V1RjUB-BYmR>nm)a?YV5gG)4RWL zg9I+VTu(!u^U)Sa zU|fvR)Oj3o;Ms(Jvv%nt__pP5@c%3P{~T9yPvifyaDN}q3H;xO|D*Ung8wo2e+8Rg zP|}!u%iSj?xXS3c>7M_IK%i;#7^hA_)4c!bH=Pmp5fpF}9r$f3&=X)hw8V!pSKk}be$Nf_;NtwC_GBbu(bbJbuTh5zvpQWUP^)@_&(kO6ZPw* zTP{P_pX;%3sJ`#h`mSSr-I<=75(N&UmfiFVuN`6Gesm&SIN`xo7S2@82VV}s@^|I^kE1_#{S-oVn8JxaF1^P} zOpiWyJ=*+8X^?ThBy?2Po^n2_tURXg*hUZskcXvfciOH$`a#GAz6V{pdY5~L_JMNq z3i}>r7zNs^s+u z$#g3g$x7edn)?ENU)5!v?4LYOmWW zjGDnhb)D|wBgWhG7ecv$BC~(wRn{a z%fAD#WXky|APbfSWdYa;Z1y(MQmJsThrA%ZTF*q#6-EN6+2x)PW5|AEtgFIq?qN5^8Nw|}6F zR`2=(sG8Oqnyb{Y!xaNCNQNK12$>&unTPwQ>7IMpne*tcP3sA|2g4u_@{5$=;n(S9 z8?-ds#SFX+0XHF-bO68y*Qp4UoDmj1T(lI{A?db}^IfPF^X40%>5%qf(*k*Buey{7U zf1G2T=UC^t(tA41szq~wAut~#cV&-A0-S`vp^qaE)-pMn_prUZL%1rq>8@k&*UwV$ zonB3SsI%;Y6d+6NhOiG(>_T||gA|`-={1rUiXWulsv+!+QMO+%+m93e#a$rPgB{+j zzM>tZ@i7QmT6!UP&N{*Eos&!*?fxL2$E}U-e3VW1NNMaHdV*K@pA%vD1OmR8{^ZFo z!6G^SLs}%(V>VXDxL{r?5nn*yh)%wMkgSRN0)l*bdHl@_I(e1&D-k5{1q3}G^X7#V z{vbYl0pXymn6hQ@iGv~edVzF-`K;i+>t61_9^!T4EBLvC%lywBoEeVrHfZhNofyJU zpmfGPvcVhiu^$m_z^Ffws3#vm_ZPp3UVkh2ft}6o8?0E!+Dqm|Y*u2v@-c!l;m=PA z;5Kx=bOZpPbR$cZKtqxg;~kREA)JBc%(@S(#=2N2?-i*Xp{sg4|)R4OSZ`Az@G{8?H(3U$Yui}*x?IhxAQ|Pl-_(jS<5Y> zJ7(;;^ct=KcAhv7CFiuk6Qy4sVew0EmWMWps|B+774B{SzU$W(Y~HqJKJis9B9349 zp)^O*Wfghni5FcFG#IZoTL08RRD?aX{t;IZG4EKBk6%}@A{Ve6$DTq(F4u~D{4VW| zBFPI91z*s3%lU~IGtLB1le(I99Z7qX9lw)s-ogzN>Hf3E4S9q?~| ztSSy(VN8BDfKSXOuS1(RjeiaMgbKUeHv`t{Hv>KcPc~sMIlM#2S{RRNbQx*m?KW?8N)1I&#%vrVYIDJ{Gl++YYO{FZLbb~tfTiw zFQ!U|yebL9ba)Jd>-{+v@fhaLEvKY5SEUnA3CTTm^3l?-##kFt){$pqC4jw2Qu;2? zi4WkX)a!zrcq<@+o;X17t>RtUsE=#q!9t;+;5{ncXtu+3A7r~XrJUrTAunuq;}5kV zma?iM0+*Qxl=J&CTgYulpqxF-37I^35FbG2KF9T6cDMG+*%p$@p^j5D#EFmcO#QV4Y#%-^f^NB420 z3tKON`K)DYBj&R{D0K5!bv<4#D1GW2xxoC6vjS68+&NiV{HN?oF?TUC#T3=a`#42) z&N^F1J=XX=csy49$eQr%)R*Dkc?=dbIiz&P1Ey;$jM zU>{Zn^)RAHuymcB`NN5Ku-ZvzGyg zyO580BNL<~H(0vGR@PQBmTK!pF|%-FB#0vXbJG#thKgyR>K9fmiQ#}4Ml{yKcRtF7 z#}xEubun#x&HpNI?5|>+DUIz)$SG^KEJ|q8+w)8450|ucVCZTg=_vK%=fv$KfV-YM zi_0e``o&Z-0)mJ*ynqc(Qbetn${qPFE9`Q~6KfebRQ}S=W>DLoq0{{Vc7WbCT{@=3 z_Aeah-1$@KR}h=@Gl)%|7zxmxet`CH2l zKv_TlZa*T2qzQ1}DfE<-um|ER&>}-*gKg=yd!9kV9~klnPTHLmiD@E+M6EM zv_Z58CuRI58rvHwqGg5b*#NAwN)pt@il##`iYx|(=$}DPH68hg^jEuVk)48@ec6p>`1Cf-o@J$i1Cra%RzNbzz zT+Zr<*b}9nV^HwlulwIc#4c@%!vv_s$j3~8GW~zQ>i<6gwL$-r=y}=CtWcyrVLku* za#}}CM}96mW*>yb9>T+*kOl{fek}LJjX!$kev2kca zgK&|^L=XUlBC9PK-}xxZ0U1fQYJ7%!*F+P3y;*Y@I{7&$F7Q57lqf68fN`-6agbzW zska@r@mp_!0WO*YA{F9sF-&n$>a-Gt!n3%4fdp?94r??AYjo?!De*jObastz0*|3+ zWB_3tFpw~`Tj~elOxXMT`9z_hJdrDn)J61xqnVCUhn-S}>g9kFcIKqSShKx6?;8Sn z&oBh?78&H{jk044fmDvF9+E_o5?-dAC>9tT2|7x@$5J|L3`N0xy=Z*x1heYHoiJYg zoeQjo-&Gy%;g=x6EJ1-%P3%g5~Urn^aJOefWj4FDew69%a5o zG{s#%J;Wx0?2w=8S3eif@8_UerN6paSH~cQs9wQ)kU*GEFTL+pzCf423lxEwJl)aT z$$*?(dP}DBI64K(>c`w<_xOcBl+Ph>5J3(Hol8&hHqcn<`d>R+0V(t{U7Xf?ZsA+5 zBT)@?j<-X_zX67k?5>s7FENuew>$obeIfL^R1djdx$8d0tBl^v zB5N)+*>z^dr3{9`$4meCE@dV(sEv^m?Br!EdY6utP_jKTWcng2=V+<)`#1bfI)_^} zZ-qj?sz)u_(uZD9BR0tF(BOx?-=Lvoct~C4nZ(cZYtuHHRa{2ON91|ZTewp7J(kYi-($TSx z=&e5>={>+uVVR3ng}uurEOHFSVYeKw7_Z)PmdV2Be;??jNom=(xN5S(%S9X}!Iaxi zswP9*970O`V-Ji4+(!fM3FjVfeE1p_pZCLyT`|cgI+o>x=40`l<}3X~IX_;yTx>yQ zu#@*v`Sps3fbtuXbUfwvc{_*?Y8ARY=M_a&exO_`KNpa6ytMR%XI1&(r9XSA^MR!l zmV8JsunQrKU{5V$PUCAn_t#~T;Or}%B)HEeo^%jEd7$FuhzulH9uVSvc0t{{EilSN z{pK{8+H$wcUOC8NMoI|p3RCW~%|a-y6QJ_mq$;=F%SY6XQFM zgl8|g&Sg)DJKS6U)pXG^V@QaV5Gnu`wmua#ApK|t^jlcD+gh0NqI2AR(a~C%g%>uY zqg0X`%e)o_3$~I4WfJ%9i_jYo$_twAI~%Mjs%a}Yv<-sG-L3_vO(>#=MDbGIS2f-D z6q3iLy8q-I;qQ1m!LhG&UjF2^@eR1?^4ZsIy=xA)Tz;{0!51a?kt{;2cmmfq9l2E^ zUXO_1!pD&$BD6W_?pdkMn!Eq9jP4%5#&?}Bc4LHh>+~Gz0y=xQP0t;%dD8oIiWIFP z$sLQNyM;eek~g|T-cM=XAO2uj-YqU~G(w3XK-P17x`}|G$tFpF8dZOb?89rdEWTiy zOqY?+(E}z4+xQKq`;p)_WI&SDRY?E}7$JUnf>Y&*7-Y$Z)3R0&n-F>tWb7CvK9MUs>^leDIvit%Aqxi@{2Z6^$C{l-da6+b#YC z&x6u-WYo?l!xKCY$-DbRDME{0cY-B_c4pJ+(ugWNGJ42pLqTGt_pEeAn>6izl}Ab5 zQXy;r;`9HM=RuH_`Uo}r(qhv$4XzWOf`Ywo;@)wK%v<069!{T+pY!=|o9*GTpi4_k4@q?Y+q8j^s8$G< z9Al<)3@=&PAxaOSVn{@+OMk0rypD+<&qL~&y?OjqydrY~F}5Awf^=42y5WTxn&fe; zdR@dLev-g=H|$3lBV3Pzch-9E^;F|=ZlnZZNXEJ(P<>#S`kF!&^%IHfPs)^j5!2Zf zL^FA@jBk6H2};2UZ%pK)i9V?sh3hOAQ<@`h78XJrQQZMESzUmJM^-coz#^1Y{G)qT zTyUek>CeWZU+1`+Sv77X_4%6R4}zmm5ormQ4rOxdN&{3Xcl{RXr9j$nosS|Om2A+6 zohTIyRVf+=HgGL14OE3EPs?NkqU27ct2S|`LAj!OMyg_pO3pBdqVhg3eitm$i+|}U zs&^nb6;<&LoTj9bIyg*PX#>e^`<9U$dVNxAK#O5XbrdT%0E9;5Vrl?)bLQ@e>58y3v5^vE3zZnIdYGClD9z^i;Yt~!tf9{WmIjz2Cf zVv{sDrSbg;Ij&)%<@i5c8J6SCBsfVmq}(B+W2C4%AEnU2cTJCo5ujo3GeZDF28Q`R z35&*I8JPZ3JSBa&nXb4iru~4G2nF9LetL8Qz%VATUB&K25u4Mrl3 z&$B^=d%cDkZ`^Z*%6OKKof%o@V_@L%#;?j@8p`-be#;D1qo4d(Y2X)-@fTqfVDsGW z;g7#~K63`&f><9@BAJIodzGmhgZLM6qNnU zJ8;nHp)bRA*T3QCt-r#H6T@(=ewt^LK7}~gn1=N4dNlq>>1%T+)a@W*SDN5>Q09-` z&z1_^;S|`9J^wrsu9@7#iGiw1ODk;PVG|1XsvyIigObVz~Y zrSt4;mDB{nS2&!*#^ZsS9FtO;7`K}I!V0Z6m3bcjT(BlwUn_NFq$aQXIch?oa?1Yr zSFH~kc$ngnKf(R+P_X{~_$~~|i-W8Nq(9092V@ZiORarA)anD>n4oBb;mn2W<9Fy< z+Yn`Pjw%rX^npvqn6=Y|rmxumZRpBQcI8p2Y8sxFV_&&zDt#U0WI(mP#Cc z=2Y}};5yLaGWK19eTSdwSFfRLL4M;H#%S-Xe=MNinmdoV@%Mrr4yYLIE}oD&6WN@c zENdT0Ki+xFlOIns&6gk7-K_HCBY3x<^wl8-Apz_u;=E{{#3>;eQ|g2k}3I|1|zb@Snkd4*z-l7w})i z{{j3T#Qz~_wT0=dKC^hgumu?`+=Q8$g&hO<>BKRCg}QMty7r+A3-=+jh5H2Z#b7Ic2nPv=P^5)Jx8o2rOGv9_hqf{S*f4)S+&1iw3n8FJ?+!*ofkE^+T#u@*kNR;}dk zC}VY}`sJ4)yNk@Ld$fQ8^5jYNi}HOeTfSd@2SC+}@&n?Q z+U3&{rXc<#wnc>$>s3hICci9UA`E9|S#BZNN)BHl~Y28?)JAJld1P^3Zqf#Ug0BYE!b9)JKYsY=)1`!zo7Z z7$#X(b>y>xMl&GcsxA2}=)bBnJIeg7PfMEDr!!!Ls%@zP^V^m#ut?joN%73~<5Toi z+egTMRok-z%wc;rFAputj^qf@jwD&GYDel2qwhe2Q1GYUpJ_lkM!+Ky1STUn%xJb5Z!1(pdQVr=Wvcec56fK&ZIFn zSG8MnzcHC+yqi)<*7jyJ51KsL-;bWC0z-lZtH6usGCt6Yd_W#m^(6}o*_S30;xPzH z#G}ZNc!;Nva1~fqJVy&)p{l;aMaJt#SMf2F1V>eYZ<$~JD7n6B06nG;h8)l$4dlri zRp4rQjFOhBQX&+pQs_;h%mJ2cUwWAFz}qA)Jec&pd`dipHmmlHO74SMp})Z_C3e*y z`W=sa?!!q+ zp{n6@226s7BG3y_R?tXN3OJH1&~s!+ntUXkVO2&n_Ysg3k%$mH@`5zm3@8ilGH7#o zP(D^=L?~84{IESUpaMQbVpU~C9N{5pX0p;9nLK4eRYpVr9^~mN$ST%7o9Sl`kXEho z$n%}@Y*ns*nEjXQrvRzSfiU?P9%W19@{}ihuqwGcbz@adJ0LeIjhyd4KmyBaTO&L} z=2HV~N7E``6RX~ZXLE~n?9TS46o7Wvg z{x`+5-_hqpi`Juet%jd@&eH##h1;&>p4qC;wr%>%ZL<1w>a+QJeRh4~I;rREKEubY z{f_A~F|NjbG!7})}qgtg`0Ve;;~ohv$tQL&0YG;b?dWrzu|5A?7d2#b9?mJyh5L? zz4~msRi86A+4E+7b}iRu><#*ydP@7d^n{jKr0@pG^7_q6fxWV_YJ_D#^=+<*S+_sf1C0B%$GF1sVDT=_6hC(UgPgEJ7;`5ZS3sp&Qwy-XRs&l!KkES(AC?}=6oKV^I}Vf@=={M}{zJ#)E+ z8@olH3FGgXZ)v|z7=L#ef5(i!n~lF)E&n#-?}YL9l;dOL@0itp&g9Xoh07U#kL}d{ zo%|2&mnqY8UB=&YrZ2mUzb6N@yfY@hdX2xwu2A}EHvUc+e|H&w$70nmR5`^^O%oLc zO!e|U3@iAA3Av8XQ8A#aH|#5>U@TW}7)}qu9>)_SLOeGz9-i$(7=g+YhMPRI2N|v% z!C<)aS%5uWy(u-!p-J`TOfipJHel z%x6oxjIFD;4&*s1sot6yNWrqlv$%FOp9LBJt|V6J)n*q`hlVmu5sILgLzl;(JKKl_1Clpl6o^}t>k zv*IbE)9L~C5B*a)4p6HH4yQANc&2oKQk@#f6`5~}{l_Q!kI#I*pW*S$!g{PuscBiA zI*{hDs(N2?bXcDIF#IG==Q$FnCM4ZqK4LHH#V3qjd5S;#9eA)`hCS7TI;g4Uh@}<& z7_#Kt6JvG3EAhlYD1~u9o}gQK!mQ=9u&KL8o`oXDI>4hv<~xib9^VhAM`-U>qgkb1 zY+mM%IS&q)sz-EGglEQZhK7H21`{)k4-+~gPgvIMkBpT!Gbr-})tOvU^2uOq!1OYs zBZKl(JG(lU%qKCftIqYytWPy&N`{#p#}_y7spE!f3^O^^SAE-PYLxFej$pg-$$IBW zr+kiPr2RO0V0rMAauz@ytUm`3jK?SAVJ2itJD)>h{^JSyCQc7-$J`&EoDJkt>W?Rf zLDhv^vY+L^GsE^MU~)$>_<^{vSHl&PLazn#2mLWRk#I%uiQrMr8C4e!ri7l0+mjsq zR2Qw>MWdf0`G@|fAlr{@!h8?t_#Mw-j&u2x_Bn{=Bz^En`Z%ckRU`C@h&9V^xfQfR zhmmj%Mc|6H^nqg)B8g+|YC0$t*DZ+EY$%`sz{fQkQ~QLmYc>kS&<7Qv$gJ6TSf?v$ z+LM`X3XhuhA&&6i*p%v*nG-mM!7=dJoH3uxhadnTVQMGNgYPOGNWQwPT^EZ;kjq=os>@22&8~(>L0`pBz^s5|*+0vm+y%Ag}2k zEy^rLP5h;Iog4ls=TGoD>zuZLBGM3gUzL22LE*Ku8U8roU#ef3L_XI8@-*4DPcQ z!>pBvqMD)9aE>yoCY|A&pg42_2|k!RP@kg6ubOm$nwwz?Dj92rg+$?lCLN@XseuYk zWtcm1l38&&_ES8;K{AG8#1tAFs<~=LgpB!0NK_n!;zs6`F>P0qNu>rPoeZbT*czA~ z5=B>&F-=mFF_B)A$+l;6&}ncK)BD6hVJ)#t4A*1|!y=bzFrk#9Vyi*Vg68QM9?+Dt zxg?}Ad~!lb;>c@ta{W3{SCdQS)6(5k0~Ay>IVX{Ba}~U86!TPkMUgMGnol7*sU@Ep z$qKDP%*(V8d=8{3*lY5pQET#}1yMCMBJx=alyfr|0_fOA?NdW3FIkAVhkk(%mWLmm_#vK}3WM`Ze|26hIR8a~A#)nPTow6RPv zI|v5jtNdXs*3e=4p{96XuguTYj6%;!QAMJ&7?_}f6sBWfZ*r9M42P_V&>`xq=0GYB zM(3+k9wnh8JFLYxh&f0mD1WsON@}qf&K9mt9pYS`VKn`)bhyJXpJb}uFxCQ)1g7#F zK8$8(Ul|^SkP$AfU9QR_7OP!;%L>&waIN%QYdzOG&$Zrj-KzFEV$f@yq;jj;=(WpP z;uZ{5YL|n>Teunr7xd$@%jrT9rAun10Mu;iqH0qYE$CXTIbit!;KN};mV+SA$e;zrTRt(sU>PVXtzsxov_fvX0P4az4Jzy#;@I) z5xW)Pwia%nriM#37W7-~c9p>5%3+aC{ICcCa;9H)phs-!+MS~=m98X+V+X@^?H|;& zh1#wx8i)$GwhKHaYZ$d+#f#rA)dYA;%_L(NxQ0`(j_610emB%-Ei{lWw9vI1DXO1p zKKkWk?V`53n1!}rJ-SExEjQGfGyp#qSd>(4PyX;OS=gXUS2JqaC<9!=(O7_IpbESG6*Pdab(H&Mqw`v-L?r#7cDf_|`4&@kdkACNIgEyh@C1l4ls zMl=gt#SU5Ds-G4BqRS|U3RU};s&X?;=~{?M z;~BWrYOIBh*F`wG&~eOz7OusGOHAxqXmyK0{f@*Dj(R;!E4!8hXl?t0d0OtwO>C+> zOM1}R7}UqL_+PN#&i9Yk5PA5|pRf0E^?CmLSS&6^xFjE6e#<)3!f;XxQIycGsL0zjlEi)chRw|8SW1ieKk-s|LA z97B|1IyVdr72lx}hXF9`v)Q`%&f-uiuhB#mqpuNwnw9f|=F}Yr;=2p867YrkwE06i z#bltbSe{Z%kW~MEO&7nr)dGn3aLg|zN}TKZy1^j68$%B@48*CF90xP($Y!=+bPBJD6xjd*Iv=?WT+rUqBrVq%BA)TtzApYV|YD3CzaT%uwV~SH}|3H1zNQ3w)p{&?H z-b^}$??5|8lyq|1P04c~#8V#H0KV7vjBtc*79{|xvx^VW$3Nm~%{X1kiK0erw$x#`N#AR$H0yEADx-D7i1##-|GLGrF zG(;pg7|wLjvPc&=+e6Ncr;D7ByW89z<&-4x2EK{6&2UKXqIb_sTZa5DL0WvJ4O@|C*#c9>dcv?4}fxuS9 z3MbfAW-H+=9OgJ2DPX`T?1V0)mQdv-tNG@P@MW~oqABq>Mtm6D(H4k{euL1YQ&pHc z3lM=6hH?D4|TXmJ2*0}Pwq3%cdVpH2!E zb&B4CX#`(!V(=N4aktWMA(!e;C%L;SF0+i7JaSI4E5tWrVGDlIi+i&aQw$6BHY5W? zIvt&XGWz%Ta32?Z_d`8V-NKp8>4p(;>NG8!2OV)0MhCKkV%o%ooWw?pW3Xw;3eLg? zwO{BIA%=9(Ua;+`PvaO6n?V=nkhq{?MJzx~SDdm(EiUt&VxGilH|h*i9BnJI4~aoF zy3PW^O805<57ASq*JTQKeEG%AUG(_G%DSk-JFh zmiwBkj$>NWcyO<}MgYUyvWlvbI#1kwnAL&sYZ!(q5@Ez`;nxJh$f(%Dh}*)f3xru8 zaNp|2+eq_PH$tY{jfd%Gaj3?f+tL?*O&<#>nFK;DKp07-eFQqLZUY$q@Ceuo?sjMx zTL-G6g2t>WwOHMjY@eIxr5k!jCVlIuf`u{=hVHGL;(&WA$F2Kh-n4FOVOMH!6sr^P z-`>te9Z`pMJ2)#m3`GHdC}KCKTh}#!Q5KX5WnB|nw?Iu~DtLskX zK_tt=LLw3K`$#g7w9#X4LtUs$S)ULKO z{V^{q@94%dP^wGIAWB%*P2itOL3wg*OWdyRvOcC(ejWDnI$OAoqedJ1!HpFJP$kPu zwTxjijR$oP%jCDZRlU_QpG*-}C&Hu)HlIQ_hPsp>tc&E&LW#Rj?4baoTgQ)-Z_Z6| zS_c~#vvo3Rfg3uvTZ|pL_wPKIp?DT|7V~y=>(Ea`5Zs5{>~Gyj0cu{2iMq_j?(SWr z352KFXC_TuCUqd$KPti!?n6bk3h5_9qebnwI_WOY?P=J$%;<=&M)-5XanxOFjDq13~G*6);3W~K>39m z6WKNF3yg6&R-$QFM~lg|ruU#eZ#q2WG|!lX3UjO)a>7?KeX z+^}0!O{trjQNqAqHzU>|HD@o@(Q3hnoBQSK3fX;FCd6QiZZww27jc93w<(W{vJbk| z?5Tr)zPLf@Q{1R7*2C3b=Q7~tY%Jj%&1aIx3catY3ahtEUJ7R;+YmTLDgu5{Uk$UL^38Ho@9pu(H%V{fS^JTLZyX zt_*@;YAb^YXecUXCJ;<*l}wmhaRAJoK(JMwk{6&IBnhmNP%cg|wbjA0tqzu8O%SXN z7Idv=lpvqAYUp4-p1?Cj2!aV*69nr#%LKvJmA_$ite~10jSvJ|9}IS@%syB!0KW}x z74mm)1XuzR2+YpZ#H7*n1OT1R=ahZDEFXXxIdrdIp3b%iw?efGpeaE;FF^FW08CkQ z%gCK?a^S?4E@8*|cMeE_2O0i;Mh*C((@n|SkEm;ld1wCn`EdVtE1K$7Ya z?l7R@+kkFOu3v5oE-f&?>QVd*)^D)Wga8%ACJTs30>~@qI1DEM)JPk^AOb+GGzYM% z%J!g{SHJlXn39t!1Tq7%K{rL!W2ruc$ywPMRKJzWBO^$h!MMzkPh)bhA3zuB)j+D3 z85gts>N%Bx`7c=@uV*`}{6`$vW8Q)bfw#I*k8<_zcM0gKxY}xXGXQ<>fo#s}AJ~w^ z)Ce09N%v6Pm>pWb8@uA&tc?M+*Z?TERW#O%NELGwJ*PmYniXv0;Ksd?0uqR62LS~= zQO{`?S_>3%^?ies<2pX6x77wQ3+mORQ@N->GD92;L|GP@!~wuqw@VlD>$wbpP?#8G zFwV?CfpLvhfeq6E(!&GNjeLWZAGdN^&lLj@qYM!1)u1yHe#2Uk;*1n>N5q}i)xP6!|*m*s=@{d z*%zTknXR=)0Y4a$mev2Q84PV4=st*TaRTxMs%vgtLNK%+0Cjgg_Gt}b22f6S)uWuG zHd)yqIIx#RV+V^FW_DFQR}wh+k!NaTzf}H4sA~aI&kdaMs>d`8=bJ#-0$_ZZ;eUB?h7E~2P8U9$9N62 z!>GT7;eb}OdL{`G%revNg1q?+L7q)Ow5klLX+{Hz?-bE2Ao9%zLBZV3R-?^;cPm#1 z^IN&bv-kMUH))8<>HxD$yIxXJ+sV~$%?i(ELp(E|tel1{cg@YkTUXXD>ogIIx6ZeL zkmjxatW<-VI+$$aI0Hy+9kl8KAeqfEVrdZ52h&`#ISdFR#buXs-iPttgkHzGjOA+>1~pl1$8p0(Y!vIn&B7kwH~K2~o-k!w#4IKLby%Z=$G)GZc0xx21GY(TYC z&=Sf1+eXva*(a*KLHN_@wFWf-L~<~s*Z{BB9jpy%1kmWg4u=NOgtQ81Ei{N0XTx#) z*dWTQs(;JQC;E-@c~Fa-8drZAdMnGA2h;>ZBISJv$tIQK$RI7PK42z{=4 zT9CJYr(v*PN;878A*8Bc(Um|La+^knNNN!6%5YK#olP;B-vES0>etoS2CQ~4yFAiC zJeebLvJ5D@pRxxOD(|=`zCC%k4|2OfXF<}cz#B3mrK8B?IxpHqR|m-VF2}TDax(>svdQ#;E~AIiTMtxKojgeWjDkJ#-4y1 zWYaQaylfg@yg`(wyjX@*J2<&X)?MsPtjpZ%Vv+T_DVT-i%sMqxk7&Wg zD*GYxFfznjPTaA=Dy;y~BbW)Nyy9ETP|C!q+yt_i3WP&rorn~e$7HvTmOXe~me+}R za0f(*z(aD-s9V(GVjG~DzF4fIG8Tek62QEQNf|jW&gg2ssguRJO`2s(4OGRv6-O2K z-omCq^u4S{M!ZEvkYU&io3SH7i@oV-tuHhH=4Vn}I+|Zh72rq(aiIgC(A_u+P`2fo zR#kWi^U|`(2~dRnDB2sN(8W-ADYgU-Qebg&v0I6@h6RE3?=L_PqwsutxWK`n3^)L7 zIKGP;WdLOg)hr;Dr2L&-yj?+^K1+txw946if1$8ekBUc;S+hYWWa&Kcfg_>kdV!()br3?DU|GdyAVkm36c zj~SjceAMuRh9?Y98NT1}Lxv{}PaA&F@Z*N349^&T$naB!rwz{D;1;ke;thMNty8eVF6o#BMxHp9ydcN%Ur++}#3 z;XQ`i4EGxDG(2Ru%W%%{9>a$W_Zl8EJY@K&;hf(5H@wVnv*A|5OAW6xoG{#Gc$wi&!>xw946if1$8ekBUc;S+hYWWa z&Kcfg_>kdV!()br3?DU|GdyAVkm36cj~SjceAMuRh9?Y98NT1}Lxv{}PaA&F@Z*N3 z49^&T$naB!rwz{opv1aRk!*RpQ z3^yBYHN4dDI>QOWZHAW_?ljzLxXbW5!+Q+38SXXQX?VzRm*Je@J%$e%?lnASc*yWk z!#Tqfh7TFO-|(2>NyA4CKWKQu@RZ^E4L@Xf((tt52Ms@Nc*^jM;fD-AWq59{w*Tyn z`i%AJbIx$H;n*JQC&SH#TMZ`+w;66V+-11UaIfJm!#TsfhQ|!&3{MyyGdyW{!tj*g zNyF2Irwq>+o;Eydc*gLY;aS76q}AVWv*FlHR)53IhFc9M47V9>HQZ&m&2X>bF2gy) zy@tmO=L}C69y2^?c*5|M;Yq{OhNleA7@jsfYk0=+oZ(r+u|BK6;bz0Jo2~wan+>-b zP8e=8+-kVXaGT*?!(E1RhI((r`gDZ`V7rwvaTo-sUac-HWY;W@*z zhGYF!f5Xj&W4BoS4L2KZHJmWqX1LXGm*F&tp0|Z4aeSK^*7vXxYcmNaGT*)!(E2k4EGxDGMqEq zYk16X&hUicF~gIFCk#&+o-{mdc*^jM;c3IOhGz`V8J;y9OIiI5Hye)KYV|kVY`E2M z!f>16R>NI}+YI*_?lPP++-rEuaL(|A;W5LLh9?Y98J;veZFtJ?jNxg+vxa93&l#RI z9NTC0H{5JE_C~9};bz0Fh7*R{47VEYGTdgk*Kn8NoZ()>V}^5vCk&4no-{mRc*^jk z;c3HDhGz^<8=f^hV|dQ+tl`+8)!%Tl;h5>kgyCkxt%ehZ+YGlF?lRnFxYux(;hf=K z!()bXh9?Y<8J;veVR*{$q~U49Q-)^@PaB>!JY#sy@T}q9`psg;*|DIQ!&s7#KZkJ) ztsDa_#lL$W5533txy!=KHT8k;u~>82d-=R+;5{a;%ib>zVazd=y?<*6kA-loT0LBO z?+m>^62kX{@Vz0tB!r)R_8jqX=}&~-zbAxCq4L}xdLOG%50~Bpq4$#^{GkvATtF`u z|H07viBS4yhTeZNgg+C)(;@s=2%jCorCRlH<@svpeJo!7J|4ntA^gS=9th!B>|#mK z<#%op9^7aT|fLnX>A|#qagfq>75(G?)x3?{j$*eMH=0U|FRHH zgm7;t{-vS!n6Q>Vm*4Fnd|wDJ3&sDV(EG=m%F{D;_R2dM3coy*-iJc(9}HmzrK@3B}^hFe1K*M;7% z4!v&+VPj7(zgLIizcCbk`n>Y|`Q0P_x$?d#gxln;|GxA)^>E=ggx>QT!e26Oe<5lU}q=zUk{eIoQe zwnjCSOD_?^M=#O@-1}If9QTCMCuEUb_})-{!y&vU6u&NnZw}!HLh*a;{nVmzd%)p= z(0gYOxc7Wb8S1dJ2OM_xfWyunaM;-c4m*3mVP_9G?Cb%D4~5F->;d;Z?JJ>amj2OM_xfWyunaQOaEe$F0n@0~s1@MI|bhe8-oB%}-f zVCcQG2i$vS4>;`X0f(JE;P7-PJ!cQN_s$-0*x3UPJA1%kXAd~+>;Z?JJ>amj2OM_x zfWyunaM;-c4m*3mVbU`H9Cr4A!_FRXSX;d=Q*#izcd%$654>;`X0f(JE;IOj?9Cr4A!_FRX zcwMMJoIT*)JA1%kXAd~+>;Z?JJ>amj2OM_xfWyunaJVg09%m1@_Zvd*oju^*JA1%k zXAd~MF%-W&gq=O$!fy(_clLmL@9Y7Goju^Nvj-e@_JG6A9&p&%0}eZTz+q<(IPB~J zhn+p(u(JmocJ_e7&K__$me2}2?Cb%D`Ih#8!_FRX*x3UP@6qJE@Xj7^@0~s1u(Jmo z?zQ-_SYwKZd9l6VYVHjM=Fab{xs^w^fH(SErewnrad1x&@X9rMF3G)LyL$CHZ?`Yr zuU)goKRN|`tG7D{dm74c&TwE~G2aJwtu`*#-83z-V`2f~%SOu<9P*SMuMTt91-~cM zDEnb`gAljOD8^>V4!yS(Sa-}oQFl%0J|yfj zHLQnkBtI#A-(lI4#Q1{I>N~Mz(8Jt3h&{B7kDXN8u)W6i5(&25lid5;h?7ahp_bv~ z?T4{Jh~aGqNsE5$#K*d~&d1!1#P}{e_by3%JKWTPddqvmeIq1<;Out?kUxs$i#9V zCJsmI4LpthVVvFER?{eZXZ_1E8nF+E<=1U=@;*Asz$!Rmax1XWooozFIoV^=XE03j5M0V2_n{?J8wI%7Hehlupm6>YkyN_x5fs8GCYp2u?gDrqJa-@{WOMn zMl%>nK6z~qG z-c^f6ImRuFyC0Xv6z-Eym|hFTU)%e96rQe!ek zlb%w7xN^s!o9t{7_Mw_|F(08rJssU7a?f4trs-H|ybbgSL#xbPVFNqNd{D^C6M6#N z_qmeCoi1O1Fm8jp6PQhEeVGlRc|p_Pq7s%>W-M1vrvrVT5xcS(KCT1p8t#A(D2Qk0 zd>`)c=D8o=XP|Eo$EkxpU@EzV(hoD(&#m_5Vf5xIKg{qx{UVs}8#fVh3_#JEb7Drf(~U~(mGZb)d)s;Bh$)l!<%mNMu8qTX{3e{8r&-ZrN0~UX zg54n-tzUHs6!s+u6F8~X0osC(lX(!$dM|KO_Yltv7mA*>+T>Z2YJVbkZ0;7)h8@e} zFY3eNWgXrvbxk6{)(II78i^8^um>wS^IeH_hRse<$?g zHo5HvJ~kL}^1DgxyTH+7`0&J42ftUL_X#!8<|Dbm*w`p~vPn1odp(G}al;kt1Q5pnqyD7u-W!tx_1;?=DjBm~G%t~%{7x;F7bSKkXf z!mlO-y*OgSxF_g^a;S9oBa*5^p=btf;1^#5q2T30Sp!mJ%NP-%0$$Lc64AW8JA?gD zLwdA37%EtLi|AeO>qkVxs)g!%1?y-LQO9s79H8q-_VomFgqMEc(oYLsdeLmaOV88= zBL>^ca-@I?RXf;(F4X)c(Xb9+?OH>~JUJzWOS$lRPtw zevrV92W@BsKgh^(!&Lo@9L+Q>^D|Sl%+HL`GCxuisFr?V^OJrqTPKpl&$4x(oE}gm`(zQ49dhx7-AvpOesXe+uq-r=OeXbQ5aghbG67c}cVf74iH$F*XPT z6mc2O^UL{uDIU{zW~qgPqF%L9{T3ju=z;FTI68mG_|5!014G+S!hyeG3DN?RvWTA= z-BEs~YtC2>G6@*A9EzObbvVo319`);IKtST8ew{10^g66q{7no<0oH|gEVn{ztr%) zwW~KB#-Kdp*L`>-=!Y}wGMXy)J0u2D&~MN){r&VfEucoS@8@_r7FHn1O#NBPK!WquKH3%FE`vLF~vBpDjL+;6{Jgjnv!p|;i7%5X5cy|F|CvQ;vh@tiJ=jrId?cGgYJ|hLY|^~=8dov6qorqv z0npD2={OIIln}1mPqf1sG=9CYI*nfgoh-uU_YlZ2GK2RT`CCS{`V zctCK7XIOH;bLBiSCZ4Vpoh*Xq>XqwPuU~u3O88g-o-P~owVHt9Y1vQ`h?N%fj11`+Nx_hw9TWBxW00PXtjvs%mM{0@ znfNnRoPvJA8%}nfsd7@LwLJ6KJmsu?*i#5H;298snldvAc#^YuVceNsS9HtdMGu!s ze9yjg@dhv_*I#^3xkjZM(_TSO{WjF~Dck_!hm=xL+KQ*OJJLMhr)i!dMmNjX#1Y-~ z5SBW4QLg50o`e0I6cyXh4~fws^sbl-zUPPxJZ17c;F%iP1+Bs_dHA0E%=c#fETZoz z?4-Ac`JM*`3R(N;!kM1TkseWj>U$2S_K|D3G;^kBKDJ|I<%yGKUz|wWL!O+evP0(K zz{EQ1ai%Da-8g7J%y|X9CiG0XN+l!~&U8cO0+@qB88Bzr4W*4Rx(_#5s^a3*HT#HizFwfPzKyQ8IeNB z*HXY`7!kF=6-yq2m{p2&G0ho~Zphct#Vr~UVMD$a784A{ca(P`+K?L-xg$~t`C1CN zS0p0rtz{xxYzL(4*Vh}4(>LJn_onz-+00_suukYZnNQz<Toibo#3Sx2>TI2x{4jn>Y zvCuD1EQ6H4Qf7%^qkFzKO|HXH^Hn8rc|y`*SZOi%VnW+fE9Q&O3&K%C56Kf|kf;z4^YXMO0(>zFG{=*E&5p@Fpy-=)45Nny;$= za9DpWnZ;Ga{e4a7rJJ^rgr&65u4f=|Tv9XAsuHMd}sw3>H7l-)1 zIecp<gZqreJQcLv%(I*0P@hzE{wf9o{SVX869cYD1e3R&>Z0<>fsn zzOT)!pbObU&bDj!=q>0=4a5rbKGm~4y(Ve_6G^<8^(>u2;AAouCpYp=RgA38vT-_= zs@ULSH+ySGbewIyay2L=h5KcOuSP-OJzpnL7{lB3Vz9N(rdDbV%);t~r+9m;=IJnc zN2nlrwdnPpV(vd}J(kjglP zw@W*u2wdopw+kJi3Rseme78in!znD_5qf2G!}9j%sL&yAD+#WliVPiHd0uc8m3D-# zK>=4q7clH?B@v6lI^L;sCK4*QwFz#-iYiIi+oc_oWgsaQWLW0{a?XyTOwi>omg4g7W$g#0$vl{CIPYGnJ_2`S92odiF!M-BHK%w&^v6!NFwvi81aUFl<9Cc z_aTX_k8VK@&x0*!wJfuyY>^9Td&LNh`GVeoQJ;8QRWRA*25v#`z<@019T?b?tV1S7oFNU%iAMDZ*j^A-aNKW<=d-YBDt*7dmn zC6TVdh>BbEQh8D6^maw)7E4N&URe_7tv0F|Qogs0o3Yr5{cpk0$PMP0pNO@#3=iF) z7Kxa**snL(S9Am3oTEi?#8ULVv46=Qm;2soi0sr)didU25+MpHpk*mW2TY_cuH5*c zu}6>JvZ0B>HgN_#%$-PTtRIIHt3c4SPubjof9$U;yQ=;-{Kg6b>hwf`a3^xE;!%G7T+I} zq4G&G*AA{E7$ebSx7jg-x7Lx%WOWG}O3U{j?3ZOs+hiW_hhm0Ou(5~lpW`CmXv&rZ zeSa+{5U;w#QyQ3eJI6*R zp5n6c$vHBA-lg{%V$%rr!^qa8bGeOUtw*5#@SiVy{{W@)g&#gJn8b@!-isiu;KkY% zQQ8nM!bGjTh8Mn-p&~l?!g?+^UXmDP+$w{(Sd1@d-Fp4)j9$J7(2}o@&UMPzBQ+a0 zoh!7eakf;Li0j^?KFS+!3tzLMaC^tUU@G4*UD8 z{THImgkVLVod=oP%0Gy=;3lhBOy2nG%pMWx8w^WaRsniIoK>y9H5;&M@CGt5s_pS6 zU|$A1Sl>i-B;I)0m-8~;L~+Ri)F)+UV_JG(Q+ien>thy|BLQ!}jlIG7k`_)6q+}~1 z7Jj`r647h)!OQ(O=$XqCE{VdHm8YKUm1|$Nty|Gw zsy*ec-t(PJXDy9peCjEA6%Yo2U2RLFyOCDYDPGY~ImIi@E6~S1Tt@B#!^_uA5X-th zsD_~HBtiFz)+=^kRo#w~#yTrui`N3We^(EfvJoG%OUJyIq?X|-vq4T4;;?@l2 z&TJ5IemOUKEloS%e6OcvL6?i#-h8jUE90*1whnrJMAta!8}-f!V0}lC9i#=dG34DX z$WA6j$|a<}E0>#$#jZR56dk@2{E2rye`3}h6P;WSl+N?t&EI6@zvF%do8&c{@xP30r1lE4bjVj*aeOc3ZpsQ&l=!_3xdrZmRtIA zUYn|7yTEIJ!Txq^w9IpE8pAh8SmYV_%!Gb59B07z6{{SCzy)Pn4s_sD*ul^AU@ZI+ zr5kV1s|y7w*}k&?Z)G&QRX-%;5uDMZz1@vZGFVOhxqQZT4afRpDws#yvTlake=Dpb z3?)0>M8m$s?-{O5hRXa>^o`#wp$>?}@Os^f^}dbe^QNTz(y|&~neeKv?QE|>lAb8K zGC``(74s0AFAa9!eA3s~0ZS&Bj>W#kBXeJIE8|G)TbLO*Ct$&u{WR~jafB^;U0Ake z>l$CE77P=MUFbxFm%lTi*+JfWtE*pWw-j{YDXXq6r|(&Jtw1@GGks^wmA`T9FYhB8 zN7H{<`2xWF3cgG$h}?ZE0@i|WnZArAC>L1ed#hjO(Ja0@n##As_~-XDJJ3+1-B|1* z%|h7%+X#7XOI`#- zALNuA5*ehNOA;I?f+P}ePINfFzBZ9AKn|er>k^nYyx1eusIn+AUR*Jm6>Bw}N?EO1 zdHOJGSBJu26>qj$4b6$k=1yj~-0MzdW)@ae6T!#sqW}TjEkB2A5c* zEQ2nyU>-R*b*8qVXFgtfx^`8LkYGOdiq7&UAy6{aGLgajnFP022A4(1Y`gdSu~ zFM}mUf_GItRl8kg(lEGnA}~_&#y1wuYZ7%_Y4qwdiG?edWst39^8sk$%Ytp^+LsLh z^)3u!Gv}8@R(J2<-cWsC5t8bI^YXN#fEKX4K)&#Ik}no}MX-cg-DriP0q4nu`E376 zNl^kCyPT?5UKv^Ie!tFg5|sTM9Wv#Ilw;VZ4k=@K4vG@Iyh6olbee~dX7ETrD9vtF z9@V0po0P`GL$Z+0rH0vr1h)`tnWF;dsEx~u#=uuV_wT3*KlI-!khRA^ti6e=v^dj)axbI*Hz@Qt2WJic~j^G)(5`Igtq^T7{lz{I0^-@iq3 z*Nl44PwZ-ac~tzrKCUr(PZR&{liz=PRQ$8<*7%dBiT{^J!+u@8-Lv*H9UW2eXK`qdf3siQp$_|X@!a#3zgYfMRQ%7qOCwDF zsB-y#*12~{RQx}Fv&K)9D#t(b`` zm8kf?aP9Y}mD~T>$Nu)`QSld!Sp9!mx&9w*T=ToA_#d|Rn|-Eo{QmdsyCo|A!^Xdp zKdT)7laF6G78U<~M}PlOx&GIE_g{yj;$P|dZ?1Cwzy8j@{aaN0&sqI@e_c6#=GWJL zDJuToSovrFqjLOz{@LilsQ90C^?$Z<{HMQ}{CHISS6TfhyDPU}>e}~5^54pr8vWE& zrr&|pCo)m_e{G}2k8P|R|BP4t`4^+&pEIfP$J#5$fBstycSOa1oyq^%)5PETil5yc z75`}~|Mcd{`5*q1_MxcwW7ht$>nq3q*bDnlM#cY6%RjNLa{RkS9{SvqviENOOjQ0q zbn<^s<@m!b7ylqC{*qNjf2WBbd+_bwjf&qor157@6TkC?-#!=>|G6=Z-*!{w@-O<* z{gM2?V?$`XM zPZR%7fAGXxqw=5py5^rqR?h#H>VaHT{O67SdiyKK?>Kt-;;8sP8n^Zvs2u;{!d16L z#Xn~D+hnS8{DZ&y&o@TJ&szJ%_EnC*c;7{@j*7q2=)d-j&ggIYH1WSy z-~0Qh_y;Wi**8@#f9=U*eNpi*c#XDy+y2V&|MAJEuaAnq#pr)}xN`iBFP;5gQSpyj z`?uXzIez^WCnD+ReOCX;)5L$pzupnae~*6vV~UZ*Hhycny>k4~^S=Ci zRQ#tM{lB$x{MVkixHc;OU%37ss~mr3_ojD8#lO)$NHKYu_`f^Ro{frs(#k*f_R9Hx zf5pEh6_$%*t+n1x_-*57NdU56WbBnHzoIm-r(_f91sdD_OD}H<+D*nZHX#b6!F8)~?BHM3`#g8>t&cE+(wyuxLf70yV*x8li zx8MJ@!%^|8u!&gy&Z!*#B`bCvjf($-ejYN`cAEHac{c)dw~H>@$_)x7<7R$*B6z82z@L zCjWoA;zN=2^GTCGV^>zr|BN?%A#(oVaVP&y6aVuU-y0c!i`73-U3vbeWAE@gqU!&W z_gee^uyXkuTE25%RQwPBxyBzmP5e9m{>n)G_cO=;KdPMn+xGnZr=#*e_7=t18Do>!UYB&fl!D_+zJufAbGt z_lBta?;WxJKTY}ncMz`ZV#+ zt9|GdQTadP_-}RP^8ft1U)~!P|0&a-ZKsL9v*|tWi;CZB{U7^y<@|s6-bAGR{yn4r z*iS0QU;NFZAB)QWBgVh8Kd&7Bm4zRDFe?7fE&s98}2Kqm;T4m zwNdfEWAdZ-e-rl}@KF@+|M(`fP{f2H9TubnL2;&huP(Zg%&A{{G*6z4o5ly?frzGtbOC z(`T}+`A>g3F|UmOKI(5H|9q9S!7~28q5i1+W-b3=cDvm&{>2}P{G&~?&VN%z_m=kG z?gM^xx;6jf+c(~m$yeVM^4&K4!?ty~BjZ2xj^Nj4Sj+E_J62kM9j-(8U$N$Ia<@ar?J*Ev4<}i_repYFqP< z`=qfn{@SAaC~N*hp=Bq^^nYy@gx_V&uf_i;Z9i0o_|x99=4WSDy(p7E9^y}3WzC-* z^{q7j{15Esw5dOrIrBjqnfwJHUrVx@$oPvx`qxHS^JnbuAniXZ_lA(K zrdsnak6biFCZC@i#V@VCHUH{Yiky`3R|oyoHP-w|*|k2C@z;m^r!=tUKk@SoY5#2t zkgwbD-y8kx&ocSbA^*4?ah*7}d$m+z8H|0h}fUt|2rD(m!9Zp;(X{;Nrl z|MWC#`F;20lJ-A#0sFaZ{BP*X`K0~dpM(EY8e03`-_BK*mcJRGzr%)qPo8|z@uSfY zf35@8;r}Z1xODz)o`oX)I~!T^PfASrK^A{)(f|Bv%^z{Iu+)FXf&KM^*8JxeJX|A_ z-wWEGP8<6z-QkdqpAG^2osF&2UuxxSY5i?B*x&huwf@Qf`&`<790T&z#@77re!&hh zkgR`NiScj4?_4}a+JAK!`j519Yx(Kw*cmeUQA1h&|Crrptobv#6iAct?*sp-HL>P@ zKWzI=8UHrOKT1<;{)Ro~+?DZXg8kI9*8GomnbJtc9|ipv+D7a2qrG-Y+I|@X=~q8( z?LS7W+TU9yzZsNYE}QgUadbuL{DXZg{2GftcP(rE*Z1u3sZ9QLjK3&r{sQ~&NZT)O zV)_rUwtwfJUy}C!bz|Yzx&E(P%kL8Py|n#31nj4dw3gqZOoNBA@Snx>_lC9n>u1+U z=U;yc;n!`#-*j)mS~B^kA^j?itkcieCoWu-@fUns_q^VtTTp*;G_#i9=iBPi{;P>t{@Cb0G++D%nf|%o z65)5-q@PZ^+w_<5S3rIn{cE)9EFHhkGa2O9v9{k&mHSKmf9Q0uKc%=DCDZ>Z z`p*{D{Kq!72$k_4!~Fl7HUBT~r%A(q4f3D1&^r7tPVd`YCjSD|-yAmir`V*H(*A?{ z5Pt0$YyD5uYQ~nJe{}br z()Ppm5P$k8Yx(uojgYn<8ZiAemjAWU*8B+{%iAwEQGQEn{Ym*t<8KA|PaR{;KW*r+3Nrq}=_3BLcdYrhpYFO{#;*du+eZJ!k=?q;_#E;{>AREZz+o-M&y?05OMw4$T(=JY{ljlb%a1*f|Mjuf{Er`eL6hm<0rJ1o#((w5zgOD+ zn27N|&RYJst4pQ*e-X@n{BqgIAD{eiu1x<*jNi@dub#7(|Mv1v8p!zTLi%^w_^$XlpJ1W2MME8Gi_@-&fmP^EbRWB#(@LY8#RM z95(h_v!a;Pf4713qvo=f-{8{s#bol^Bn$a28~r<<8z-&*9>DtNyVmkge%`8wOnxhf zKYfBV|AMcUzANMJjq%^Xn*aKXC8Xn@@4@)F)5iWoYKI+?$-niXu%DjKTK)&?7E0GI zCTte`YM3?u^PSjE6O#Uu4KV*mx8WbMx%L+_{%?R^&2KG#)4I{p{^tsr5Plo};+HNx zEt5YU_|*c|@@E%(ZLf@f%?BXghQHjB`psngAk99t@#K1eL*_@(qKJ=|1oR+#CL{&FVp`8;8zP<^WPnJH@A#`BFeYn zAJV>ba~b~)od5T@wfw>9&q@0aU%>f`HvB)jiigPL7y1zFA8sxG&X(KpGX8hYLHha7 znt$exuSw_6O+x)`LuB$C=za4#7*iYGE&7VCg zPMUvuLj0*Et@%sFq)6LuOLGbR)gP_-Z(O-iMP|RRw;I7$)Kb>`Z;cO;mcLm$ApI}3 z=HJuwyJa%@4oH8>Kx_VYPtB0lUyech!F|Mr3ljKS2A@ z{k}E77G7G~|2z)r-+C+S_Q%v$j+d9|{}%Rtw6NwcQ2V-c{AdicU!2cc^Is2VJynwW z;{~X{yKU^ZsKJlY`g11e@3N^s4}YPmwEyrm7=O|yTibvB+e_b&>Ax4`Ya6Zk$K3rc zT*mJX7x_nNV%>hN^~Zu6GX8DQesI|EpB#Qrk@0_q?GGFNJL$Eh>E{seyKMM3R6X~m zO#bcStnczuW`m~I;U93|wIwqCn99O_4jcZMA@S1r3&XJe=CqE#TbC45Y`JE#C zuFlr-|BQ7=`%lUNzt+W?|I&}G>dNGQ1NqPCiT?)tXiekXOR z3*(Gqvb-B0!+yy4hps8_j>i= zWBbB-`H~V1Mh{;SKUxx=IG?ym0u2MY@cM~{pZE^Ox8fdrijQAMB@){jsS2Z${RfDC2(z z{Fj65FGTtK4OJa7{(`W+-etpIeAboUW&FF*f0F%)sQlNWZb<#d|3(P=)BSxY|BxL! zr2OOR3x2x44&`suqIn~k{wL9XrL5y`<)0I!{^wPYPxrT>@;CoHj+5~( zLi>^ZIjH_o^%|{^@vjDcy1z#N|NJ;<`sMpWxq0}>{uGpd-r&1sWb*m`Q0fu3zJ=`1 zK=})0HJU2p|K~{&|8#!{%Kt=-E@?7;zQ2^lvfke+J5bvVQLn8ULs6 zLjF5uo&T$Dh<{wh-zQPr<)zRbH)iRK_34?8h&4HtYb8jj4myG`*ls|NR6Xoyt&QsF-SA3?>pRP}${P{AD z=9kHT3i#F2*7jRIzxWa%pRNz0^7G&QVUmnL8q%Li)(27k0j`x&|Me%Nf4V-0 z@_)GK!!|PcPlNt$vc8D&_d56bd>MZ$u%C0Qwg2nee|>cse}SpOey+yW_W!nUq%{2x z0sHA>em~W}>*RsY$>g_%@YDI-lz(-xU+c^G>*_*(I=`3l*RS%twEUU``qTNfl>c(G zHPZHP;n70AO6JE>{=*X&?UdG z^6BFxWc>AEegGYxr2O-$YHMWtA%1jPiFJUiCW}{{>e6 z=NBCxqx_R^U1=)g{~YAg@iEGO+c99WjDKobA)k(qQT|`%T~cNI`yv0(@iEH(&HQo| zWc+-8UiB!e|C8}8%HMK(f>i!_kWa_QDF4MtwHnLh^Zk7_CZCRvQT|Wrx%$iaH(~qV zGd?2hN%=2#TCqXK{{i|hGCoH6Tb3_0RK`C5{I5#Jw$ck*@|h8uRkw%+aVuRFyv&DlI6DT_YbkN6B^=m{hg%NuIjGZz(>Rf~dmrOWT6RRO z$`6m{|EyP+oyhKg&M=qRxJJK*jl9Rn<|LMyFjk+@%N&`P^ZJO*k%5~?4IFR+I5ROD ztc)Gb&Wkn1B#rYY<-FvO%ptMttXq$nV~z7NnW>se<+8(2{f@A1rVjKni{qWSoqd>P zachj6_N&{lKZ;H4krI>CnIF;3n49J73}2s9euq?7l;%>sNtjbSN76F8c@B8x!sYDp z|2I?pU^#mWuXI_`#DjRH$ES0C&$*uHf9ChvFopS_y7YX|uVDOD-6864qBf)`NYO1F z$osHpzL1b9IvIcF`@_3=`2`nyG%l12kIKS6kWxlu6Clh5qUWb)^#L_Xi2T+j0U8TqOHe@|Xh zi^-oCMfmytLzpIAGhscMtXwM^KWc(7t*0Qr!vn0k7u6@lhAjd;K zKt7~DztY4l5AfqS4)P(5nJ_;?#vjh)iwoq#I12J1eR5k_K7JlxKfb@Y?yEoS zlZ|{xA8!2eCmH{(nf~(iyrLb9d`Rb%n8wGy0^~P<_8ZzyGm-ySq0z6(_`ikvH}bno z`2Tk9=_BL6Mfhf{s%8UvKb@efIr~Kfm}@QSOcC@t3Up;O7IVC-Gm3g8o0$ z`^xxs+Hi9? zzwq+`+!B7YC-PTwBhb_Dt!<^q)!f=lhH55`L=xKM8wl%jEO@LDe4uBbd>(cLW zS@`+>BJTeM@>BW4`i(jxlh4=p>wg9E)9@#r3q2$Ye?&5izdM2aRDN6cfQB;pe0{oh zH;|u(|Ml)|cgx~$Dv!T=ijwh~@B!%mkRr~ummazqf5~j(zxeuM^}fCTs1o74Bh#O+ zuh8;^C?y#Vzo=aCR#A$K-g%12f0d>`zP>>X^I9AEssGjs|L-RA-?K7_{(OCdCgG>{ zZ*k?hET;c#>c9E=23^9Bc0>JZ&8_o_%>I0RgImJy4Us^2x%D%HW$A~nZ&34l|Bd0N z@)w+Wj>rETYQLDuEc_Pyh;wZJOJx{;Q_9ch$7^`Tvrqgf$}`^XkCgP(nnrJq@r8A3 z)l~gH8rH9_MncC}O*JkxH95692S`g#6?5!;y5x9=oY5uGCnh1ieQNT^lxFH+wFXX_ zPaYJP+HPc0EboM9DFsMO@%Hp2vTl=9pFWg9tmmeNPY<0Bf~*_FzhlnZPsf7Edq#*3 zK_K+&k3B1iaq02NgE)di8j9p$YK?)($-|qe$-@Wvgos(=$fWdy#JF0d8e za*id%F?(L!rZ8{+%y$y}%7E{ge_2e_Kh1E=-fuhmBJUpv(Es=d!GZJB93>tN|G5{c z^Y%l4{-+j#Mo)=$r=#Sf;U8?gy`xNjS6zXR?K+40X!vWBU;Ryn-=Vp{$99{OoKp#* zvn6?VxXy-#h6dQb`V7J98DFXrr2Y*G2}Yp#=iYdi>EA89PZ#6;&L;(}1M|N;<2TTL z(qHlVbeZxqD~Pv9JKjCGis45@0lq$^oAHNJP_C=EJ_62xy@efpGH~{85P5$zxn%Cp zkdXQAu0n6@|LYC*SD@XD^Qb95fm04WF5V!Wvh++juD{Y#;5(c`|4ukR4(4Y$$_V?% zQ9$xMfK&j^cHVT1$FH-Ozy8-D{nPlh!&j7weiFye-BFRJPrbW8{*le_H=LhP5z-H> zVECc22l{)rlS8@vvx)srv}W~>Puc&8{R8+ZzUu#?R>>xOe(8J%q#umm28rT-0r`vS z=MSe0BKEJ-x#kIOf1TJr&mzG{?LU~{(Z`_#|MacG(>Q)6!7pcmKZF7XKKo_Bqie!) z8S%@uY2z2#r?}4QZ_NHU|It|*{R7s-jK51id-51_`jk5!SQ+Up9PT7 zgz7~9w=bOQ!SNlv{q5hyME?{MTzvf*!QYdRI>*qT;K!NZk3=97T9dr5{FmO5$8UHC zfBnC2&FarAejTuW!U^?F;?@b?GFt{~&aPr2M7)Ohx|-(|q6aBv$FaAKwU#CA>z*89DBW-_k@{8R5;gEh*uz&O@!HVM+E?5URB>>U?1^qpL zlS?PLeOx4crkdD?^82H+^-%C)C(zJ(ueRg*tKdIRPZa6L$?$bvKEnPS*uE%40m(D{ z{j*79rgHsLi2mPV{vz>9`3bzzfxIYR;=xItKAptBbpZcB{j(i@G~}xeKs#OQ@&va} z6xc_B`tyC3{@oJ$K(mHu>3w{HrXM?etmUEHWm7X2 z^Z3mo@%yq#{MzBKKwzL9uKX~P+b4zi=TU&~hWeEQ>Q{F78N~k|{5jV;!~O(+Bb2`s zAH)(Zy^q65`|`z6As-s)pR_Lyn3V4eyin3_Zg`9I?8GyCeoO@R&lH04eJ&`9^ZOkY zM9dYIqIzG_-kSw(gU2t{fA&NE z?FEjE*57PfU&Oy{FB{9}cLdZQHm??nc-9w{d)|0qhp!4Y&u7fDlfN_4Kk=U{pnRnM z(+=O^K^9-SBK8Rlh(m$@h$MF|C`$PeLB+zj^r!VFB8l?YJ z(EsQ0Ebs1NH>^)}LiuHfk9uP~?B6+%uRn^&CjP%L^Zy#dr|mC0e6$bZ-+#6qU!NP1 z0{Ub6jEZOZm*M03FjuAE?2r0`d6Y>Bm&Y;u`A&j=*U8d9!}qKogZ=?K{ZVhkkGRq3 z0LQ24vka7vE?nOQ<5PC{^!GXqzYOE$uTJbA{uF3H%3sQldLpIzzZo-cuT1}gP=BEP z4|e#Zd7*s0BtFUTZ=`-Q1?q3qzuDmz!hit%@q=owasN!)?{5G;Enn>L(LPAWuUfyE z*{2ST-@;Q^-g2?@5B67J{LT(vC;HEBGMo2L&Ucdf^EY6BntqBAe)>p%51+JQ22VdK zDZe63>Ti^v;+$nv`F5_>=t573K5pc@OjSlR@xbGQk(M8v^3< z_=L}Q{`JuH1-rO?GKqZ}nAnH%6F6l$c~N53XK!--vxxp_Ci>gq`%D=!Bt7us8wTU&SEn83=`(})&(f^_M{}|C591du7{4fij3$&#`}4c*9oc)2 z+b5gYXSIoa?C{x?IKL~S%amjuzu6>ye}w#{5dTT}{lM4**01pW+N{|VIer$wZ*7u( zC_myLbv+}#Ed_d^?r6S#K0*ikE7L^(=TbKJN_R0I1nbY8FuwdZ0-4Y&`TT!~Z#tt1 zkKZVwzaw7!kNW=y{_KHI=s4k*s7f*4a{Oq5-(o2%e_bs7;Ql4h|F76NP}N`LgFe6A z=lGc@QMCI3lvP3>0cfCKdFDV)t|_JYh~s`o_^@~MYc)$ zw8IYr{gHOByMwP^j?lpVF6jRsHA>h~%kE-)al!nM5Tc*IwH0LvdGXPR<41Y^jUwgO zPLupwity7%9pocjc{r1=zlczwe|S2y?|QTJ!!J61R9d_?{mcaX4M6X2y2aN=M7SXR z3gdq0WJ-Zh2(b*jvdDE=R1i1 ze{u?F2K#F|BZ9;CM`!c<%V&+`_^3a&FWP}2X#3Gle-+e1TJwdsdH-QV7NnnKXn)OO z`OD4hL)(vb_|bsh80fH9nshVl5BO66KbfU}buW_v`$xH8eAW&h^)3nc(S3iu%JH)S zKMwG_vhqt~__Tdzhfmz6a(7l@{OSzf1><*4Xy4i4lkPD^J>ILMk-td$ z=p`tB9nk*5@n1W9ntoor)9^i6`bhwM>i=_!zv!KhPRj5LwGa_R%U?Tu+CD1XV97{s zAKE_JXwv?&!^d<3$w!%ZJHD|IzodNMXVU(%!*`Ji-baatM|1oP(tex_^9MB8Kg0#? z>!=XaOin*0uTzRXTbkP^oA}QMCjPSm;ir%3ME)oFW_-={&m{HpV)Fzit)JWBd&+;1 zv+av&y#5n`^@ngMzs`aE>G+6B6{gRqKhPVuy72Xr0r*d${y%gv5O5!2JA5aRx3uT( z{@gw~@&BV({&Mg2?vIN7ly>+EB(OW6|EeW-`ToNZN=Kn*2H2-G%U|lgK>uckPk&$W z!ov-`{^lg{I}Q8;ZC_A+g{}#`o>;2ap1I^os6Xx&BU~e=n2z zXB^Rwm_vD+{C@7+I!Czv4l;k^RTKT6q=4iZ>*x6T%f*EUa{Ls6|CR}UWn?s=SMvD( zQ2Y5lUmE%o{~rhG$4SOd$C2>+qbW)x`Mt`%XBzSJ8BOB1EcV|5z61K7t587l{5^S| z*!SK99=|RUzuQgHryV{m-^<>7h3}si(7zFh`oq2n3XG5BBKpxs#7CNyU9%Fy_l!>s zf%<0#_)pwl*$L}k?C>=Zi1cFfrOPYw}AJyxuLah8AH;IzY!0{lpz z&z?)*_KAoB{4~H{$;&T>PwUTi__Y3ZtWZcJBmI-|@jb8)O`mr7Xm?OwiL6$6fGmDL z0(@G(wZo^s@7>k?0xusmlK$&s`XT*qlppm(O2PFV3GPybmY|K5c94=um!@TvcZ z>|HI9+g~U8=XphFMC)&M_@w!(6fL8x+&d?zM@{^X9lo3R&#Wy ze((EK6`uYTlD`hEVfDlP?1ufRU8RM8;QT~I{>tz2ZR7m9sFq93Uhac(-&i?GqpK^)EZ#YRm_e|m!vo)6^yJ-Eb z=d9jaI6kevMZ7M!Y5uJ#1NC{gf@HuuCA%B*Z(YRx(;$CQ`yVIa_klLP*7uEE_U50a zuZI}*2hu)`1pTRhs7(RMvxDH@NZN3i<3|(xmL~XEJ`q^YqYB@Uwu-vP{eOfL;urg` z2D0?SFWP?0Enb^`I>P*adcJ*1O`g9}h<`|4A^wN^-@8hQ{AG&|@D8A(7Absx;|Len zXD*b#iBP|#{lmfH1H3ZR(LIdokNDVr>GhWQhiCt7s6PaY-xvf$WUYOU>+gX2!!*$U zD_(!tA6S2|!>7MbZ(Xu1_YW@8KjvT=RXxCzAmt0?M>`-@@e9!5&7UaG?SttD?GtIz ze`Sa7>zlcVY754s8Ra`kKXst|rT)PVpXQHQ+n3DZ`O8WCXM2lf_s(e4*ll=?jKS}{UpuAKiJ{3VL!iXZ=pX@dHmA#t+O!wll~bye7gR1)b#vE zxqY(8`tC%?zj%JB3)Xko;qQb$WCFdpeELQnzZ%4^2Kj6CQdYJfU~!D+2f+Re=$8D9 z;PZg^_-e!C{&RTxOaXjMpM6+Ih@0W#`2fx!@vjj7_Sf({M*h-?f17UN-(cDVsuw_M z|4p6;Kb7L?$3@c5a=@qMOUnR6{})%t1dNS^XTNO3FR8ypqk|&ppYr>ovnR9<(4Q+u zea+(+%NHH`w^u>>r1dvP0HFU1`g^{Au2<#y)B4Y^%s;3H886YF^82H+C)6K)`2JKg zzP=-%d|ZI_bHK;_J#6tw{r~Qur1L!gx=8xjVv>IB@UtI+;y}j#7BY<6MDCS=J#r3nMF6aecZ%>kK4yh(*GTk{s+oWC4`amleAfTpW7#k*k`p#`mw{O{qxg) zt@*i8|0MpwZQ>tVQ-#TMNs>PM9y!&6r%yLYKYy8|Pg{JjPf4H^i+w7_@4)_tz&~t% zMJR^n*E(VT515T;?R{Jj;{DFQ^=fcX%-DD?{S}hGx&uD#zqP}szu&w1_H#V{ zMv?THr#@&v{6FPKJ&{uVLkHLBBGW$;fT(}7!*7FvfX*GecLLWxn&@AI>92ml{zUYr z`~*&+?Z>J^bA811r|rjRlles?`B8X9gExJFPHB3162p(kg!K6q)Xyt0{WYdP9bd4+ zr}|&rJAjXm2k5V1`XuFx9e!mJq6c5?D#ZP#PW;0W$SAaaWrvUL78G-0*J-2u>m>2} z1K`vCH#__&@SBL=?z@<&+&(ViANH_>sB`<1@#}WTXhP}uY3Flwjqy7NDZdJ52mopy zJA5sdzu;yuwT$uE6w?1$1@NhTsD1s>6ovM$HaNMZj8VTL_{~l5#Vibp>U~auuULJ$ z_*idaeP0&XUx)Nxlcj&RB>m^}LP@{XAaB#ojG4pJXB4sjUyy#N{q69368wr?e-iz- z#6FL`D*j0AZ-=jv_^nxddpo24N$`^(|5E=(`H8yh(Z7JNT@sqJXo15g{?W}&H z9%5+-&fjx^{(UGQdDi^RqYQnfRJfr(@o&elf2p&m|2U!jj((lMdLA9{4QcZ=ReAXy z(7!!;iufaK-;v-0nwKChzS;hE#(u-Uk@~{~?4Ke1OLq7!1O{4jeBXQ=KbzS9AoCBJ z#Qt{pPQb-}zFs}%Jj3myJSRNM8t@P8n19e2J}n>Z@agZ*+>P4C^B0}JIuq?f>JOBk zm?NP6(5_j5B|QDm`a=`&57htI;cG--x!GgNa{o-%*LOAXKX&-FNcng?|F^ri{whg7 z7r_5h{reOB=%a(+cl%+iF@K(pfBj*CPs2~~JCGN(XI|^T(yU*$|#Sb>jaQnWRt3PxWs|UL4xJX)TZ6 za1y_9Ch5}-za-#eI#ajb`HAf>UBXGmr?Qy;SIe@*0Qn2&)rJ%O=p*7HUG>|T{w#h2 z&hPjR#vidm3imHn;2au?i_eIQw1_jUpA>&4a)<kM$eHvE-R#6`O7tD~D__y^V_ zr@(g~hxrLP)W2h+foW2F7~e$u;Q1;!)qi;I>eBOnetK8v9|H9aefOj3-{;M3zsmHF zSm}?io)_hCPUCmLvTJ<(OF;S=2@9c6fA^k8)BnlX-F$sV0RCyHD4{!4uZZ#u+rt?9 zlw!I;TB7wuU50-b@KJx_ma#8F7)m{8zuGGW@Uwg296i^Ye3R|Hry+;{7uL z_USUwAK!xu=dqcn@9AAd{by9oZ3D$nd9u{i*(V&Q!4W zkErqm-~TPZK3{_UF@DkhNQ1>cP^6vIJ~1SHdeTh})90jl+pfv<;@C&aI0B9e?&8h$CHUDL4{MID?*%Plhv`>w{LYy-FXHNCE54HnxT7J!L zy(nIWpKq24eh$muF84S5BExS;{3q&<)FgTX{9BLX>(%Zq8zfSDu18Rn^!4KGu zeR!$HG=}e)U-2>2Z|naq8p?RSy9>sDJ?Y6rfCJtm?OOTryT151zpDpUv|oxA9FK|e z7t=Ms1Q5hUitTHxesGJ{lYIbzp%Rt_BYNcexavtZIR(01N&$Npk4*@f9&vG zhE|G_33T=AHB0&8ABXfg6w(jw`|Nr|{9B);wv^#d0el7Q?tuA4Io1E!4Q1!a@K><) z#l{8uZa5zie?zGzvt{^8(LOLQQ-S@ZbE^NZr{6I4cf$0E_MhECsE_R~N09hbe%jgw zrFi=n@p1mi?@xk#pgh6-u_-_N%R?OS4e8mBS6uM559Z$w!9LnIkp6?zA8|p9vSit* zJPbcT{})aAAMEs35g2HLp`U!m`+ul?QlNhT>m|6p(hlE2@Uj1p;y-Htp%d_teo?Du zwy*th|IZIG{cjQW$Nkyt^haEz``6ByDZ}3j_*gG-!TO_|;=fdS{C6_^pP_$PiGp?o zoWEm-?|}YiqJi0{XX=c z+u=I_nfBje`uVs0x2i{T@nzl2S}vLXJ)rz@!uSI2k7}pCgW!Mv)d0SKU_k!T0H2P( z2aAt#syKcz_TNMMp#ND7 zpmA}j$tpi)j32qxNgU|rVT+BANlItOocSDFAJ5;hqu!FzVg|?6icV(7b;YIDG!WPc zZyX376s7aOLh~FaSKR>TaI(YV(o*W+xpVADv6Q;L5B0ncfhVTaCqDxL+xg23d8AF&p2kSu`s#kr`RFF z^z7ub;R!>M65|Yg8`c-6pLyd~B*clgM_pq5rvc}~&SmX?$44PbG@B>JT}C*h+YW4l zQWx7KA@fRJ#dSU}y!8@_zwPerjtqY)9sk(E+E@C=3_0E(KbCdyI^GvfDtvN5FED&V zJy6b++#?z?{DAW%7mjBAK|E*(=Tr7VEwEwf<>_Qw) z)jCES8ag%zs#THqlOQhAkS$MKk>S_$^xp|x-LZg&<3;tLUP~;5xJb8!w^|^>|G?9J z6Zm+JgU273w4)IhsrL4qB{KYTnL@EpBlWPj_*3*h<`jSW^Yx|urw??29|99XJ@r7e zi%B~g^+q~+?Ni)82E^~p)&BZ>@Ub5&HO5AboGy6EDc{pZE0tiWa%^8l*=Y?+w!aOPs}DlHsRN{9hjp z|FI1TyJYw$w~+XSe2eup%*Wzi-cPg(($6Q(9V^4X2IDK3KC#~g&tvrTH+!LtZ-|Su zQja}~4FB#1!AS8v{j)))pC9jcJu1V$^MM@S(?1&|e&XUom1X!3HVb_8pIDF5e;y=-^Ij9_u=Hd(LjWjjw z3EsaGfInlC_&@58_(;w2FP4u;f9a!_WcbDC{?t(kZ2rVIUge^p9prr@|Auz3m_JtVdv-|4*JSJFFkWead&L4Hg$nfV*V)YQV$q+yP z{omkExcUb_Up+wo3mpIazsFBsw5y*Cztm)gf8pQbFR!$;f((BoD}VKi{~kYk+TD9H z{O1-jeD}Y{U-;w5Z)Er-S^uMJ|G&o{|Ja~qGWr?=bbXbAE)eq@|OaTXPW+7ZY^A#=^s%4ulx*S{DQSFa{H%$^bcC`FeUoSeC$s> zy=|bh*!Z|X=?Sb|#hXs`>aw;Oe=|BhE{UJ;+^{}-F_xW1J$$(TpTs-w-(&|tLpV@> zq*F&Ud_E*BtRZc`@b(eE)c1s4tlCMut%MiiB8_$D+abd*!_q&$)W5;*@&0zgc9`q? z0t&zJLR_Sghwj{v;dg=hp}P{aD@^d+F$EQV@g)UKxJ-m4ZY4)EYnQd;x{ucp)y*GQ%&-l;L;P1&3~Df2|-}qiC*w#hS%? z%J7?D{8qNsUt_lCH(sbW(vNlwep80O62>pp`||XI?d*(|1r>hdg}6u?jc6~m&pMdD z;xf@6@x#{?RQQb-;v${xP=1o>&-(}X<%IlY)lVS)DLxSwY4gDclVtdbynezi^?|j0 zoUa#D_>C9hB7I7G?2HWG3HZ7VzM?a1e#3>hNPlZLp_dGQCCqQotIE?)%}T8Nsm1oN z-cZoE&G4t>n|V-%{{^O>f2{43`DQ_d-*}$`o^y8RSP~kUT zh>P@z&{C5`a z_zf50B5i#C4W|sh?Z-L%HfWZ3-13vrQtGi=4LGW-ly|L2#wLf9vsefOBfB zG~FY^?_F7NXv5_AnMH(uaK0F(@Eb4uhP2-KlRwJv_qGrmYIT8smb7Eg{?X}$6n^7{ zxJb7)`Nl27e-Z6-N~9l(AIbZnnSXO`D`ebe_)`iG+9<;}+NX?3gLdx~qCeI{c{`Qg zc%j}N`dP={Wca*&$}g7&OWi8cC&f4GC!qQddFPp>GW_02O#fZX z{?(!lITU{rE8iV;xX1IqD1Q1km4?gk`?2;Tzg(^5_NiK3{7ye9{@rq|*U0dHoh>-E zLvs8mR$j_3iXT?AOamD{Z(s8Z*N;*A1Z)3EA$Kat@Ok^1U#{){E`D3}ZWb!T-^Kb* z_@%=7u`o7YLsou8waBaR8!u{~Cf&C+mEre+_PgFu*uMj5XQwhiXI-{NePABrHp9Pl zymm<$ep(yB;W{JiL-Fr0c@9=*p%>MEZ~sEKW%%)lf>S*!@WY$?+b3B3ZcnZVm*E@z z4@`s;`ZcWjA$VT|Uib}ZyS^=+li}wbCpcV3h5ac$`seH!`4oQRg}6xDe5_{4`iBd> zCpbbB(IJWB3zX7v2E;{L63 zHwq5Kr~T&i*$jVV*#7SsegmA}fb+N7zbiO!eWL>NJhf>eKJ>o?4PzQ-7&%Y;AMJv) zdc<75|4{&b62W)C{1|n*z;)k2{E|wz&!ISoi!_&ea8Vil%(X%voZpH4{cgZl?;(DO z($_-&ugjm{<0Aq34_o7pkK=;+41uftjri8~>C;AiONRgQEP;>nJ8}F}dqv>t_YvRP zKDG9i=`O?Xwo2gR{4*REQC}6f?gxVAX7QV1VV_NFD;AgGUjzH&c%TCFB;A0oJ{0)j zY&Y0wTx7sh!gxjc_3t$!Wcb^b3H?3zFrKE*6u6oq%KdPr`%>Zh37NI$2b{|EKQ^rOxe`0mi)@c(YUnx9V=fIk8J z1I};5d1!9HS92qNq>^Qkzy4}`jn7XFz<*_fun*2Z!+Fm7YheF80^ctE6boy0S%$yu zZLmMgZ^L=W+8nTdUeur4-x~moSEN6GcZl!r8KA$C=8x~O|6H(tzTogb-K9zW!#V7~ z1^pEm*LMTHnm;)FR|bwKEYp7?^xtB6h3iA~d0_tnh#$`Vr>7!;c0u~W>R+nM@Xtg4 z72+e+UI+UZ3=Ur}P;H_N{}#c=d3tIF*uN0sTgUH)TSrdF@MnX6#&Q?unY#gBEiCYJ zGyjuq;ot7;uK1S>|6PKQ^UU@6VE@O1!_S-kZdn3ZUXO@38;je1RbK_x7X+ z8DGvHU5D#W&u3c7>i>EHHqH+7p>Te-s4cQ{CSZQJSO4BM`t|qBh5Ro^+Io8j@Y;Fj zPNuLaqkhvp+1MSQNa~psY0O^qKC*$m9_caZVxp;-&Dd88JUGc`it6BzNwK41hO@bl zsY6o8{8B@pS_4KBQ({pTA03oKvstUEXBz9vd=4waNM(#9AjyLVBba}vIP?oO`qgdF z@c)ge`%5jtRFqhIP+Gd=tuc_wW~B0v`UjQk9$3F=_{RAwEPn>n?+>tl>n9XwoiN6D zkzOMOQG%T>`E1EcCs_Uo7@w}k^1qtJamDyFp7R0lUIKD4on!t-dhu?JE;9Y+u>9dZ z&nreE$Df7#j{3VJq74~ZTS2j%g}6xP-pzeehR^#qbr&zzMA63a`L~j&Im}POeokc- z%lYi4;kfqFTYoeBfcdX^r!o9*#rzu{0_5ZSN4a7CYxbvM%F-uLAnQxn&HA$85%pj8 za-q&L{2OfiSpQDUKk&u(v}?c4tz`F9l(ua}KR`5lcC%-Cy*K~4VzT%h)Q0JEU15G) z#IFMV43yu@599yh+T9;1!!O9{XYQL`d@V?PYM+QzZT^(mXCmwW(qaCM%s$R5zYM=nZ}H^)tTDCw0~tQ=f6*C! zcyod8G{NWnGWt54j8sHw94mdGv`9-B;d6ypc!3k64J$@;IF@(x0F zsV7B!jn8lKjVJU=>UVh+e)r|$NgsqL+UdN;Ew}?eQ7+PL^G}YD$>;uyUv3!x;o}d! z@_qdn|DUfP&{XnyFGr6eUE0h*@beE zwt4YricCKDul#bH_Vz!^sRWc>DHAnf$VBej>kIE#&EMX)*D;UOSh<@5aT&v)w1kMVe<_?zuAg zPviK+I=TD~75pVRK_CCOflnwG>9X`{~Z|rbGDO*e`6yN-&tRWDEy8ZCZ1E+cYd2)C>Lqyw=egX$$x^+ zkL8!o_?>U~ar`So%cJo7L##Kk@jR8?W*5pu+OXQaW-|HltbWEX^?eb3UXPT?7ynW` z^6}Y>qFkht7T1^BKQmq+IGz*oc|Frt{w=1Dv$ogHQIH=s#>Q{63*{nRUS`Sfvhefz zDZjAZYgJF>byeSbs*63FT__jn=r0cElF9!Q@}C>RPvuu)QS9&u|2yVU?xzaM_0Xcf zY?H}%WBTtT?4NV_ao!59Y$PuRdH~uu}Z$Zl< z#eZPh2^`kT$#*Xmb_k{%+`pW8$}?pulS2eSSeZ5h?hs|CtM z`uXMLvoiTpS^R50^0h1S_^0wWRc3Wkwtma(Lb*tjc4WOOlkbja>CZ>LJ4pHHXU*h$ z{2Kfr`>lS``4jUuh%n?fN)?u;eiHGZ?-O>waSI%G51=LrQ28rdH{W67BLV%R7eRg= zMd)ECAICX7dYH&ZyCd!1_@nDG`~O&-$cBp9|+}F ziG0^BlYf)RS5JB6yMvV9gOziwC z{QoBWHBbwbi?rg_b|+-=@3Zi`edN1?l#l%^fs(}=l#BF4#n+_%_wQ$!{ZD)Cul**^ z{~8Fw@b@jx(oGJ+|IW#+V`bq_VD%gAwzvP)Z6Y80cTv7w{&!#o1ij~Wa(=<`-!giB zXw6OH57@sPeO(^@J4HnPaE%ea11uwhz4aTPVJ*r2DDmDdz(lqINDAApBPC{t&qx>V z+>0F^la_|{q2X+_D$dyHBcOtV!9!X+qWC~&-vIwopN%i5$9SDNm!Yx?5=3JN0M5rj ze}eM|Jnv1`M`OA|`OUYSeu~Kt7=I|xhROev<&$_Z284Vi%Xuxxzs-#Bf5!NA)hML6 ze=OktqvWZOej-xVe{HO9_>7HzRu%E)fOQBI!fM?^MlU+rO1Tx~(v{JhWb*m?2hB&m zD~IxpbrBNzXh)W_}LkB7Jr9F{yvg-+lq9d8iyI!7D26@QrbB$oCeMTKu*x@2#ib|sZBmrtI}zdkACV*2n7nsH z{{JtTp4k>Yptsuee>~No@H78Ps&q;jQbMn4|8v17$$v3T$X8DZ`P@(YhJP^x*Ht7`;rBIoj%MHaeVhMTa$&fU z7UN>H0ywKMB8_KI4DB z;ZK1IgsXEdh2OINcxMpnlU}*Cpo}d12f_aCNO|~wsV4N(j<7t+?!?mK*;$0G31s(x zrY!xlc?4NS#VvjfoWGQQ^4wIJ{Drdt|805v_h$C>Ehm?3CEV6d?ZQ`NVn< z(l7sc`VCfpDizQ_yqeWt+5U&vKk9^iAh4!{l$Q(qiWEdymPfP~ab7&U_7Ied^xHhu z!esKh>MZQLyz&(&2T(53oXSVDAT3g0S_+fjgsz|A`$xEaRB!W` zEd0j)5TAJM?}U9E(C$d7{q4e!a*_5a{7QeBe7=8#<|AK$eFji2(tj&|&8M}aWb*m` z52~?$CZy+J!;Y@z1Y%>3v@2}w4&Emhfz*8QI_8W#9Dc^U2Uy*_+ z9ihF4^ZntqhoD@f&gaib&!2HM6%z6)qM*b6R}Y1G)t-J6c*b=S_&=N%>QR7v*;XrT zo~-{sVf9(Pe5iN+BdlY_a3jU`BZj|dX<;wbWWOd1H>z>q`-#tS`E>p}Uq9_;nGE~K zoI%QO3gc|@)fc^V&WSt{rSjOas?Ou zD_H(?lczuQKS)0~u*XfUgU{h@d?uTqsH0>|2d_@6O!0gYh-c5z!*!KraRT^~bYTPLKa@r|w7Bmqx{2)>OSnVK5s+v$Nnq@>1;N=P2bC(({f z;=M|>#4kR*5E$=B4;H=0%fEp5Z_oSBk1NU{n1AlfBhnv4w}SK#&U=FRpIe#b+a)2& z+w2bx*01&!OYbg5JMj4_D_Hv+{)e={C(uRLLuskK?mZfV+jsb+Pf` z6|Db5XY&-InOsh>KNaO7J@{*ZA7%1CoXOJv*9;5#&z&andH*@TQ2sa`UKalLtbfMI z)*0}5x-PcQ-!*P9_MQ{pt4nn0zHI%{Y!@m2Bik@LmJ2niH=GCc&0ymNyxo;KlI;(e z7^Y~X|MD5uE^ztGi@|=}>~!Ywhw;_k{?{v&yYl|)fc{fA@Bd)sFQ0epE58tL=lP6( z&ne}_%cz!L2_MgX2b;L7=U3uVyw53-?05J((!1>o^Yx3R+z|eOFhAwihb;W}*`Hy3 zOLjgH|IqAKkUnNo-bKKB_b%ZFG2AE@>HjX);q{*Y`3aj@y77^p6832F9UoiEuX6Ts zl1%=FjV%57$j^R6`N}8O@;g0wd5BE@H%z|zz-#}M{ErrX%|`w&FMrO@-w3dOg-jOz zKJv34QNH@Ab@;d6`YA>xe>{_~`^Zlz@Mz(8+Q|R=&4DLn^4EO8;-ASs3;s9zQRR1v zHgcR<`hPlp5#N75!2a*C@be4nzbOSDE&S?W!AIo_bapt#`zf86{AHN`asP^oo8TXq z{~u94?w?5IhXZ`qX^X>T;qLHT33RIPaztD#){uRD{6w-fq&ca^;@*h1{h^GH5 z>R7%%K|ubS#KN!p$j{E9{2rM9;oL|JKiVB>yR{vZMV|IYi&{yy?kB61e~7a;%P z{zGQ+#|=p6Ba=Vmbb{K?Lt{94ctfcrC<$)DHkz>6~Z<5>9lh4NF1cdti~nJjf2}K%|G@@-`6P^Yo^|#|8XPdn-)!)|anSy%#L}Odi#1-M{*_W(9{%+u1U~v% zfLEd;{NH1IQ~$s0r9+Lm{gtlb|F}M(32T38KJv3o|cfQ(f{GTJ{bQn?O8#(prOLgKPeU6Q-ps4 zoIf}n_Mb!llWihD63RIp`e#x8io60(iS^I_D*OTMv3yqi2ri%2KQ~lkanCN4pHe~| zelz)4|5M8P%SSta8p`;tZ`Nez3kLMRu4eTgexdwq8~M0Tjo?z0qYy8+{|olJq`)7d zfOgn*cN-6X6vY2zi2t5DSo+KD?f*|HDG&d;YQoO?TJbx|kAnQ~oGQYP@-W?@{lD#W zjGtdsDyzG|!TQe`sQ-JyZz4Z0gpZswY#u{2>*c}rpNafjnE#IW+rJ6C zcOMb*F}zg%vKxo_`P-iKkMgHCV{?bP@%}FnzLe7P@Y~8iWG#Par;OqOaI@^o=`8O zH}-TmAk*&&m>=SZ74f2P@z)Rgp~J7T`EcyU{^%_Bo!{6mtzRpo@EiN5^_WYee%P#tbp10Q|K^ttaf0(2g=4*nPG(`#&3( zaIo+EZVmcm9${k{?0yOax(|ma{5HE#FQkhuhn|z^*YqvWZ-ZRFVR^md68xX@*fYN} zYveZW^VP(23ftR&-#t-ZwzfZ$-DVf+g>*`Trqc6Edb9CWerXehejOO3Z~XH7%dhMa zd5qf_Ph;aM?liVvHM_U7_~qj)QR#V%+X3@H1ef_I>V-69=~v}s_WK>yKkFX|{rLPh zU;S|XJxY2=OyXwaU%u;faeY4i-;APONEeY&;oXjgCo3mkfiavyGTMgSUJH*VvEAtCXU`cchm#b(zKNQ!4s7VTWX> zKN;s+?PTGB`jg{HVILefLyGgK9Dr*!fA1~q&w_PPSbqgJ55amC#$U;`uYb<<(?CD$ z-{Xz5)B?~Sh3#atlgDuI1@%U%u6${*p&yKoV*8k%Kjrw?8^3Cm;Pe~YNTd@w zKhcHrM!pet#rUK8dD0F1@Or1Pe0=^?CKj(3J?I_RfW4bFb(KeXlI|ER=sm4scfy%&!^5E=>3 zD$s6fijhAuNc!XFTe*DaKUND)zi!|UY5Jq{0?pE26w$9vr+!m??Uw-ggP&jJ^qC*2 z2dN*9i{XCaAWn&_CG6)aD$<{sewZ(ie)Hsj^-RBj`75Q`u=eYBEPBx%k-~mZ%qvJS zo*bYE)=N{%u@`LqeqLUWV)YiRPmSW`E_;50Wdx_sJPQnm3SW>G`s*z|zonGYNrW#E z?8nbPa_$N7=;sFgFn=MX`jssY>5TZlVEr@dg*0l-)$h1|QAEGJto`F~v3eV{f1TCk z>F+G7m-5SDd@9UN|4u)Q_b|X)u;GKYS3fL2qL_Z}3*PZf?Wy4GR~78!IhO(CE-fnT>LBB-R6o9sieE^x z-nci?&=2BQncU6zeby=#X9>AH_ETyGr=O?aYqtzTnstVpx|$@L=F z&jtEz0Q((h_H(3r^>fzxkL(Bi!DjJ02JDBlxN}K;u3r}Dw*~C?E3=<6+N+;h`@hjo z$*{H`^*ar(Y(2&1F9!7AU*z*gzxVnVSCIO7#_j71J-{3a`W;6D@t!m{@oxe13%fk& z{DRvL=NF;>Ys>tf=A)k$6`cLLfPcnuZ4_KLO!z;1Pwj;N!+1wJv16sVT)(JZf`2;1 zZyufiUh>ATQYSe5E~g6|t#UMqH0W3;KTy9YzhAu%s29>>rLS(4>GvYDpCiVrpB|)s zb)5fBKP-3AzB{&+-QpX+SU0{b#p2iP_Uh*jQon;(57_LVKNKi`b$B1Fe#PGy%lA(&<>)Np1;?L~ zdHvu=@A#Xup4@)8{=@->!1@c0yTNPaI;@Mr^N{THL%vV@Eh@$I3z#41TEP6vC9i&J z{owT53GH+2CqOw*!+bq_Z>C>KU_e@Y#FN9g{WP#2j-L-_>vz?kz52O=)X(GpNc|qi zxpf%N$Ml8zBgOYfXLmS~$@QcDuYMBipYzdAYY?3MG_W6@7ld-Le(HpLV`e|p3;7;X z^^3CjZ83?ZKOg;+hQaCQGKt?q@ZJUInV9KEM?RWWSTmZJZ}fbT$65ck`?5EF^&s_| z1nJDIevj+M?8-N^-{UebI3q<-jMP!F^N`WL(Q5$c6>ZovuC{4s{*5A9d4e$K|h*)I&r z5A`=;FVrvC{6X!yuxRyzvij9Z7QecWerl88^h5umH1aP${=)ep;CIZ@AI2|+t7+_r zjXeF)^L_U5`qgh<`?-SDubo5K4bNpoIelTC1-{4l!{3q8_xCzBT_DRJ+n9gWee~0s z24_E9--vz$e1)kdAKpJYWAE;GfU(`c+q-^{>r>)2}hq1GL-X|EOP4m?wnq zX*$FIpJH}Zdv{fozDE9kAChT^)t)A*gjHh z@^52M6lvxBI|p(5(e}qx=3mtRdF|(fefXjItRSWJKh(orB^pg)P;7r-y&=l)SMP%g zUojo-Ju%~Ht{*Kw`1t_(1@HVU^_k$}7wdnt{4G@#{LYgiUD9|&4NDUJ`aP=~^=GY% z;K%aqKDXcRUi-O%)XxF=m)4&#-f{fMOh2?6(xMH@{oJ8k8{c)XL2aC0rnL;t zem`P6@^=wlv`bTX@62KSul4Oa*O-0*_4}Kw{MG;P+K)LyLlmYvq%{4xp?!||6!rUp zytlI-^8HzLLaI!^hs#+0_0dlcQa_v*iRY%HoVn0{fO-e3-}sMz=ldH6*iU8i3-mv| z_H(of&VDnR`j=y<-vaX9PCxwp>AI_p@egc&pnqP>*0-y-z52O>)bBoy{}TWFBd+@o zvVD%>nzEocAKwbFA3uLX|K96goNx{YraPoG{b?{>g6&9@)8cFSjPvXFd-YSF4K9Ao^n3mh^;4ohc~+($KR-mh=+(~^q<+WHzijib9|T+e zirF4$J+?2@jO}^3e&M}^{W1OV^F36zS3j*yaQ4IT1r_EMp``AR{#;Xp-X%>c&=|i+ zt9)DOWu~8}d_(`7#Qd{**PB0-w!!K5Z~KR^e8cp)?84m@Tt5ZY2cZ38Soy26{UNaY z(1X;^3F!>WF|^-`8X|tMTt@rg??~}I(ycd2uH^cme?j}zOJ@1^t~Y)i?Siu()}P(C zA-{rPtUu#>v=8d#q2!0qHai>g^cUUTKmGCZRn#B6`niMD&y)Vzi}0Y_lHeCL4bmU} zKq$s9zD^0(6|Nu7KgakDd5zVded5;%^3d-grT%Xtv@;ZFPobRk@E-RI!uZ4Ak>Y!# zlQuLL^K;1jmo_YZ)xTLC2HV>m^Fk?y_tUWeZ5k7 zJILA}{Cpjqr9V7BQG;`KFkX@Jd5QdT7@v&7dK+3l9Ru|j%)ch?Poe#5yAm4yBkN!5 z!{#@;4|w%co|DHf)eqa3xb6qkR(fOo)TaLr;}z*{*L!Pt{5oNM1o{_#K9ByR_k2j* zL_a(q676@Slt>TiS^xBh^LB8(5b8}S>V@ye=|>9k{EPk%^DjR?M>o!w6!ILMGhp|Ozv1(iC+=LA>BrC4QGeq5GYkFP|5CqALF%W1 zVyOSX)j#$&;+M={qxMl+C{D(o^y@*?Sk+)ARnOI4AdLmWB$kAk<#~* z3%pW7Hvg}jlf`dAwuYs(h+mh9ey-L6*#QEu{icxmJ+|NQz1jRfj8~-P8@E^`o8NqO z0tkFs#M7ZNio&LLdD1WLV-%HINZ~i`XB5r8^Beay(%5%?<32k&`_6CN@5sr%^BXVJ z3u*Mc*tIhK*6YC0Jlgoe%UNIjCRAlELcNdqA0~ z`$%K)oD~|X@Hw(KSBes9+~O&4|Jr7=8tjtkcbN50@(b7HQT^sTEq>1^ z7NYR`BC{vI!b>xs&h9--e}3s@LX4a4CmavyRw>17$8WgMZb;iV(?`qn5 z{@piz>HPXD5&rhvRE~3aubu4K*WPCH?NKkJi`p)f?tjeJzwt|jb!Yth|Al@tv(h)p z?8n!~@k{?d)^F|8Etkmj{ccoQAwBCRMi29WS{oE1aJ=ISI zLn6I@v!Sv7LNv7Bl3@N-4AW2d(J!TU&g|C<^l<*_-<~W&^hP^@S^@3LFXujAjN31T zv@hS>%<@NwxBno#PtNrF3hK*xn7@9wZw0pRsQpl1eBXZDx_!p_U83KKNVe|JN59M* z>WA^D-|^RPChTj0^+43a%zpZJL(cf7KOCQFvQ=`l+YRZD?tfAr_0G1=zo>WfuZ1dMI=)4g(wf*WGl%*WfOT-#pN9HnLjMuI_qHrW z3PitxG@`}%+P?9N`J+9_AJP4DWaf1%Lu3+bb|UlmLC}da%R7^7{BHG z%eS7jMS66?JOmZ=K!Wx|`a`ExgADsY{ul)MmD|DUFQMN0LDb7R)9);lW0()neigBP z^^wpM}2XJGLszaRhp z?Aw}tU0wC+)wf>V)z2n_`Ahlsv+9r3ddfH1%16p)pZm5h`8Ipxkg3JwyUM~}EV_RB zv)cibkM$ed4W;CxK9~MMvQg~|@|WYgWxd7z1@bpkU0lBTXy?&hFx;s-n*2*z1@pC|f@cFUKK$jsvU%RM*r64t|f-%&%@} zs~xA@5$>Ft6N5*&AJx=6*PIEze|2+ny_^k@{g9x1-%hyh?($7Kc}2c1m^=J^ggeuC zJaqPK`OILzdrOQTv`Go=fAsSa>dt^IGA#H0|&7&YfRQJS;dW{%EoOxi9Z06q_uuogxy9t4 zFy4fae#po#;upxzeah`}2D}pYE2reQ689}9<+l>|FURD!68AADi~89HK_l#9)h31Ir1Yh9ur#B)ln)J|N1=B+BHi%>|!Je zpW4+?nuh!IDP0|ww*3B1h4^h9Q+R*D?+WiH$$2=z@%fYYDt!L^S%vqd5ezNqfvBl({ z-DE;=Up4aUJX;VyoNo!e)x%MW&NcFd{vr25Pa%K&H+wirzrg%MO#CXnqxmD{Kl8SH zyG`i7(0@eURVsCb@t^|kAAj*nU0<|a0_Qihp#7D+TrlyF%zxqg5y?7}4vxFgP0AdO zUegd>a-gxN_WGEM`xo+Q$A)9wH2u2>r<6na=}w$J=X;eu1^G{g{Bg0LZs2?ZzrMKq zb%==apO5w-<)Iw=vK@l;3zXkJx4`8KCERlG>0Y~e=Ur9)4CH6~@_OBW`lWt9!|2UB zzGLza&$QOxP=DKET?G5%E?+3&@;Tkz-#aOL{y_-)laB{}j_fD4KY*WP z2j#zx`DN+9)cWVcac)igb(7CbR|)ZR-)W)0yRQgk_ouUe$NhWy{a5#^PI68G${o%V zV7aBsa}1^-Li?N*%3Yw=Fd$wB%2K^m+>W(SJPYn8RgZ@7`MeO11{Qg{T zUUB^Jd<@DzW|2v+y?^*}7v%{31=^1&#+y9whu8vJ_YvHCa0mbLgr!0JpAY$;T`KK| zqx14RjUAK!%ikB5|0cB8-4{$alz%Jm{c=-&sb5R%+-*62vHUJtKE~|Nx7PPvc%hWv zxAOaYlO2?QefJ;x><6Q~5LY>Ytsj)1{to+m--zm;{Wq>}x>4kJ(|P&*rjF^K<&=76 z^xPN1{pZwQC)m$Y<1u`nu8p5Zub-*=gLC6E#Lv~zeoNQn@#DohCcl5y`r(J?8Ts3- zAAXn*5A-ua48ip#I7yVUqn1Jo|V?RPU1g|^^|Fx3$iZ#6F2nN zXXvuCv-r36?++FE;~(Vl3`S#jQzCR|3fDf@|pjO#~Qx-9bCv)%Hex_zV!iDkJs{RuYc`&rPN>l%FFM~@0k4i zVIP8xAMQV~$HNE0u99DR)w|>rut|7OZ)R?qsae7UVi7qj>*3Oc82zx zdMdR)>Ui4E4z?etf69OKnWH{Z`F-Gr@(*1o^;batWC!JEIgNf{@Id)d17$-wc^1I>z&nKr{ILDDw~XJ!1N-Z|g&mVW*M5VYVf?g9+`mgXbNK@OQ!c(|yDk`X zPg-!mzAAqb`sewQkBI$={yVRKXVLn}Z`+@8lxvRTQ_jig?{hwe`nBcez5TrPlnW<_ z{6C!k5d5SA@+Uhee>>U(w*47_d0+CW|Ccc?L_X6+d2Kfg2HodwdggZ3e+ctS9RImb z>8bh;Tk~Vjiu}&) zopbVgCwEN#VJxSxGmPgJ%T7}Ny@4OD>u0+7p6%NBdGp&db^rYj@H6%-DZk(5_YXOz zbWHxUc7xrtH3A&qe1uY*!8cTZ|=LDbNh>uCFJM+9pZ=k zW0Ef$d&qd+;W*nNg?xM8k!|1kK3x|-m`}T2azYoyKgWOA{@hmfzolhsydmv>w?|%n@3fA|?~OM2 zAs!fSE94}f_~-mG`P3`lvt1VqzQ5n~L*7ySC#?C|^JRW9F7k8#jpG-WpZjm9f7V~L zGmJl1PgyumbZ}n|!;xvff@{Xn`~F(-?^@$ObG7{T%~-oade~+V9aXk6u-X>t>#>0Dcu-n2T}f=u0NN#SF-D zLuUBFq5IZn$7jDkP5DRS{MW}s{&+zC*jYyZl$-94l|OooNtZ2u9P*bzPD}jUI3MlB zfNswZ3+g`!{ku0x`3=Y){^gI8KUqTm?zP3`PecBQEjaFp8@k6`efjo5`QL>6D{heT z`?9`d@-y=j%bzYGzx(p~;pZ=3UHExWe&VMgF8B|~pE&!+>EDkR$A7W}exi`S6nQ1h1m%M6rJ08d zz8^gm<#)zSg8zX0;l)2r{^%b{$PfL~&QSg|Ay9 zdItV~V)f{`k7&2d+}Y*K>(QLHUpF|6c4*G$4QCS3gew=@Rm%A-}EvDCA#Z z3yyorP50Qknu71Yeh2$gFY_1ifc&vv|HSf_D8KRblz+yG?zaT>Px)uc`TgmD{NdmH zwDQMMui5%fuS0&eJLzuL>*0d$zwZP5TzH+}|5eR2;QuF<-$A*y<#%5-@s(;nP;R$(7e$HmQ2j$P8{C+C!=X5~+@Na*d{2t^iL%g(~-ql9_3h-$^(~y4^ z__jm2>H6=C`mUJ#TP+j(zou^k|39((@e=a8ubKEt$sa?4=stbW#kU9Le-!$kDedQI zK>oyqKTiK_Czm1Koc>{ds=%lIqmaK2eA{us2*JH>z`{+l@=r18=J@A-t^HxK-xZg? z)c)~O`#Z}x4q?p~+536QZNYKx!sYXte^)P5`P(u6&-F7e$^NW(V1HovqVPTD&*XXM2ldbOll$X*3+|uEtf%~|A;0?x z>^b7K_a#w&dtXvVnL_zfn4gJS``@jdSA1#yRzGmzQ;wi#CiJuLj7|;6z5AR{|lUV+QZZfln=1WImA8P#L^?P=Rm-Bnhhl~MRa)Ib`IEArM9)*o{6hBc2>sQQd-)zDFR!8S{+0s^ z-+z6q@##l}FT{&-(|uyjtwW2+?}_|+xmbr`%m06+|2iX9ZXe$8o1V^|AJ6j3`J<$G z^oDnFR)h>*lb038{|W#~vLk!h>*T?9xc-XsjKp{AAe0BJpLFp;4eXHzdlUuVv)l>y zhxgX`mn8O&oCo{UF8EJAoc}(je|d5FsSnCuYX8fNod31)0a_X7t;yP#dQG*lee-ZT0 za!vj6dwTqiG0VG$0HwOgUKelmc~_O+!TRSjA^%ZVi~O(U_jh~o;_`F-JoW!@8}MMQ zU;1xTA)j)-Vewta6>2E-PrbYODkST3@c}Pvs`&TN|04eXc&>~;ypwPLI9GQ}{(e}G z6dz;!L!A7%!dAa)3D%3oI~)Jh^V!&E&wMP0+)N++bzeN~nJj)FKlk5#DC2MLyLtJO z9hBe2Iwi(S`JWta^hrMP!}`K*kA8u2LH{{<86ez#?>~1_vGorFWdB0+y}bPXH67D` znsx(vW^}3Tjr^S*Y#QJB3uRtcg=oVD*k`){iSQf{`mLhzaQjX z+cEiD;51c=r?4bNZ z(eGvZp7C&B3Hj1o&R$i(5BbcOmw^GCh`ZrfANR^ znf`g6hkbrN&+{Ok`mI7aqWqMX@*^3}==(F97sLOJqW|dU`SR;s-!b{;T6Tu&)E0K{vxe@0q- z;^%D23I9yj$>dw*n)1`%%=h+OsQ9t>FKj03Kcj*5^T`g%UjaMg_AInNS6T8i{<<*q zzsUF}&X+@e+JEMY{auc&W^8eZ>OUMY;ZXlO%l^Ccnmm5|WgXN1_GqU$mi_F#XCWRa zKg+M({`m^!I(?8y7xnHstT_yVUcU5$kjkI7@H1TIU(!1V?Ej4&lfRVxe6oa{`KGf; zS9F{SpL*tZ5dGg6`CR}$443J@^1SpHiXXfG_{8r8Ki>w{KjR!&;+8JgpT`g`&!@8Y zzkdO{N zR=Z*(a7CO`uepBZo<{%7mxPs$TY6u(Sy28tsDJCE{JQVtzrWz$TpT~P{D19Z@L+$( z;9<0X{A~*5=>q-pdkxfcn0N#J!;rhma<|y2;+UZP?Ek*4^;h@6`sZ7U%g^=O)c=p| z|N1!ZpYoUL|GJQ$?qxgm{ZCMSj-P)n_TTN(Ik*1YxwT{R+xkRw&Qsf>oMPOQI5`~l z%KdL)zMP4ESy~ULk&AdIju`IV-o3vO`IjaSHR02KJ}UT02i9*VOUTdl+tmLm^gB3? z$#|9k|7<@~{^jIjoTn#VNLu_};PXAY^Y^=Fn_}Z{3+I^^(tRV@A4y5LzQgoyzYPMU zBj>XRFMb~&u}ODFsk)mPAB^?x?kI(}4ElDQ3*~um{8P{8NiNOX`dhXy^k3?Z>7skZ z2X`ckr7ycbMgmD=Uys_+VET@h^~ZWej_#hN7{((L$4GjFULS9sw@14>O7HbE_hEUa zv|ymQk4=~K3hmHl?vt~-J4*Wu#`{Of`$Cm2?vImup;A``9?*Sj!h#l^|42_U_~ZD+ z4X?=jht!p;uwFQvFy%+ooW1Cln!n`yNBk`lF7?Uz587Mef&1flz5&aN%l%NW+b-fS z0ABdWPxad64}6IMZj(b5ZVf zrH|?Stah)?!SwNb&EHz-%dBVmcs^-#6Jx*Dm49{U?=fF<>D$HVhvz1&Z~9)I-dy7cKc3Ug{9yY2ih9!?580CZ&rN!mK8_bf!C&9>eYDB=;lcci zA$^1G^B?b8zx2Hcd6^$f-@6u{_*`xAnLc}7czx5CTH4+tn7&q|@4LSh=3o2W>zBUE zP|w-;oW*?)z%A3qeZ_YBm3Ak(+~jLV(?|VW`O7o1=f@JC?EfENr7w2R`lT-?SFL%E z`N#DKwtdOX@4!w{KHJ`|D}B_LgKO-F&ySS+Tk2ZvlV=23fm;CeglN zxNM&$n~i;8O?@TWP23O4e#(6GlgMZNbKXuS-|TS(#$&q`V9-7C*e$Z_2bq7gFTd|< zMiOaX!hbBDzEb@?o}*!(m%({;@~Q8ApeOQ~f7ft)ZB@tcNqsTh|L|_=EaPkEC9U&E z2TA+HdqCUAj-zcp%26)uj^H_kXGpswc>lii%YyUDM@u^{_TwUj3g87&dz3TjX;srx9b~g8^R3}F%Bkkv)-u1jkou5xVZ;0QY ziaaZONQLB6*V!v6zm+n5%su~4miV*pKPT@CJvGAI^Eq9ni*Dm*GtMuTzWb&BrkDGa z$vAZdTB@FKP|tNmLmWBBPBnD9P}p= zQ>1+^#Pc!zgXFmo+uP9rl3zm4h(6paq>a3b+zatyy6B#gcC^J37tcfd|D_yO z8L=G??&L0~bkhEJ4D-*6QNJH3^H<5`V%6)6-SQta`AEA>R}PrWUW*Z4721*Z{^O-= zSNDlzebQcSiheo!yDq}H9(;yV0e%GY?c`U2PbY>SWpH1Z_VzeUU)-8s_rxx`ZWpH& z^W{;TGt6|+ZAHb#^l`q;-NERC@$$R0(XCAS82=FTf9!V4=4k(r?;@aWIUjtksaKh9 z#Rob8-HmkNnf~ljF1U>j%7ti|1b*!dnbCH~((U|FRvzd}96`jq#Is zcN0GAy`3-)mORbq!$tU=p^x+^!)H41*r~z~^7njq=7*X-j*p&!^!?{#NuQig83I1t zM~bH}gak5uA46W^hw(CBId01Il{%mD-4Q4k&{G%z-GTl#^VMSna80Vkw&H&GUcY=_ z(-%Sh{R-*ZQtAiyjr{rpCs{mwTz|my{hZ~@%D;A;ch7V)eRjEYAs5dv;raun&qw)V z`j}sM&8ff-x<`I_*wLCkw$J7xednJm`S)f%ed!LSZxY5!InKa%A4EIS?k`nf9U=Kl zx4j;NxSclG;ahY39(>khQR3X1ucLp?EB0nW;4Ht4OBN$Mdwd0KXCnItcNUIUa6T#ej>#A1Q&;3G`xBIRK5#(3)y(+;J}*!1^s68~ z7a)C0&y@1_K|X!{V;xIhZd?iNeLH>Z_m$zn1IQ;EpBJ+qjQ%6j-39fP`&i_5pvGm;nT*W&X|BSaB z^RjmSor`%{JO56#_)G`K@u?4&5x`~o$bR*@2jh~yrL>>4FDEV#`}tuWpYD?#OW%KX zGx^5;Hsg8RE95i(PT#MPPrdI{QOIZd{s}w9@Lfg#H*DRHJSTptrq9RvJEpHz>}Pa! zK7G!gJC;7$b$k8Snz2S+JDVQKJb{)|;WmqplzH|q(*L7GQ5Vg*|<#(3IXTBy7jyrAb<&W`x z>6eYy{7YH$?;lC|i$0zoUrMg%SpMbgy|sSeN!UZ?AMyDD>OUX)U^+^T7jj*JGsdLP zWkTTceX=j=vj0(9zh|uU-75Huf1S_2_+L7fKAvOh>}%p@JpWtudnLvJ81Km6UZ?n6 z>RRW=Y5zTXfByV9AN_dti|A^kq=<`@lcz z_r0w2u>3OKPP<)lgXW*TK1aV_>rKtCPl!HUJpVYq&-AfB!1;Q{bN3KqM~Fk>^JA1h z^4Z=x4)%!kA8~gW><;;?7a5O>A9TCK_RN02!pHm{_YXZQ`4^Y{H&yI^KGU)Ey^Ve; z7t!mg9w6%ROmYL`o{ck?lx&Gd1-8~JvAMG$Tk+;ji<{VQre+cAE9IqYZmMS{;i z=g&uTF-}Na(&hX*^X~$jmb3BTuXS8h##N~Yx^>_7G5b4Fzn_BqTlTpLkmK_yq>ud+W?CnLOShsHgRXSvt9VN+u0T1)8+dY4QYEo=f@J({=>RYWPT;E|1j~q z$v>uxZmINf{@vbxXz$Bq`ogULt@$H+-7nL(;%C4W=5_iZeeO_Wq3AA2_SsR=ceHzy z@xO8x<8CYSE9oxz{%yN{^hqwJi|)TsZ`=KK&X1AL{A2x3`@r-~L%)D_k@~L(PRU1g zs|{e=I5Ngs-VLznvkiHmlOf7GR7RCGHmt$!{g@7mS}*<|viA_=N7vpFOSXhkuZM-G3LqG{1h*$38r!n=bd|{Z#39 z&*V)_%}SBdFQoG$l5r7nK2hVov&Ci!2jU&64zi(sFIH%tD%D)kHO zum88=_*VO?S3LXQajpmMoDT}ycNc*lUv9!7uGya8chZS#jz@BSmGau(F$yEz-7){~ z>~G?&1mAWdU{t~V>eN9GX!<>*|9Yf9BKVJgA-Rn4RsY4}>F4-=9O2pN0s9AfVfsJa zx6lr`c;R)7!+FDv#7zIL6O4b>-?{Xo|4P2ch%J}?8UKo%zWKeTpZ!msA3j~jU;mx& zzxaPIo_>yR#Sst3LHPY&M!yW>Cghjl0qvka)Z`oGvim#41;^pp-f|JnU#xK?>WlHy zWjMUQ_u5aNko5nceSDaX551r7-}ovpiN4=W<2)IVX zQPd0e`SGmp+>eca%3Z3y>&EdFwAbwVE;`-d$Yp{pH*DSSJMM*vn*YQ<$6pc)WNtc` z{*@g|KgU0bPezyPk0bw?Z*O6~g8rHQJ{adDpZT?`#di?_?JoT@pBX>hO8lT6dSANm zu59^7{eLR#U*9Id|C&JlztXYv4@LXaL;f&cdtEQnzc1E>+w*E{$3`zV`N{O#%=-`L_NSyPacxq!dcFB%hfbnm+`94@xLLHD2Q7015$I{Cec5X$IJUdyjU(Oz_@-_`CvWBbmFn&<3|kc-+MgQE13R!k^azYW&}Bx{x^%K|HqC;Q*P>o zf zM+Ni$m&pJ0N`rrn&&1Nj^S{*i1?zkFZzeye?^5`;&xK+>J%su+x(fLUxi3O}!tg7= zpN4S|?nerPPlxHI|JTQT{&q0^Tz_BH*Wf>w{4^GU0GN>;B7z?&nGRmwMLv;3Zw;+xCI= z!LfIWr~hu?+JzhpK8JU#4`%xB=eQ#H9N)gsHR*A{cM*_>d?tS&`J9i1U1Yv4v&OYX zQXsgLgYIKPPwiQ({_~{&t5-Z@(yjem9T{VOHT26q&i&(h)Xb*69i>ghC}@4gtCAT9 zM%f@!fAM)I2;}e7+fhmbxc(M$FEmdKf3|+zrneIjxI)h#QGVW$x;r)$% z;r;%*72c=k7T&KKT$tXcCluZlas!`uZaZ~g7*xothf6+`6}|jsGg}oqWBN(I37+h(j0$5{n8Z=?0T2wzEnNU z{=K`(q?(!yR0wC z|LEvl-R%6~;YL4fzrHNxEB=07Ki=w&>F4DUCLH!d7|(Cf-XPz!jvVI_)aT?ASHHIS ztPUD5f8<-^cW1#r`C6CgHQ(}|)4zHAga0;u-u!gMg+cuAeA5FOWqfaSUO&-~I;J1H zyifoeS1d<^(0=vrGIoRV4+q|S@Pe3 zyTo!tdy)1`xh9`@i!>DSIi76mh4&tQu$TUl%6CU-k4C#yF+#IIQ?uWXN-|nAPfbYyT@iCk*_;$Hx`uQ4N z`e*zn^!mV@uaET)++Vtb&aKJC{$=W)>!%;u3Cc4TOK&Nuu4HfZOfu^rc$9*gl+r?O* zU&Zyq_Hzmm9RT_K)yB>+e$J<|T}{1ky;>CQbEan**HfUq9frJid%F^R&OfmI+|G2e zK1Dcj@UJBw?MXSVI(yYY;3(YTq3gE}>SsC1*T*tGn|@wAK|e0q|HJ`ZTR)}7=iB!* zxVQDQ1Lk4fTa7-cpUp5Yz;-WjpBv9Yx>!zf^PJfK6+!ymMZ64$=|0A?d)4qi4KCk5 zbj@R%1od+r^y3SD(lvSfc%OF+KR2R0#BVOdPXpFfQBLajtNoxiq?fp|@j$&Di0~N> z^|QPJ;Q%Kd(i!4YGp(iau#$DWrehyOU&D=#w=QV+{v#~tju^Wc96q?h_hfPY=3(GU4|fZvL7aPsd2 z|D0V5{oe(CndSbndAs+Djc;5p>+keR*Biam$?wgCLdulO-Z!1r@*CLq%>Ad4u`>T5 zwB=5P;}P2kG=1@(l(`Y5`u^rV8@T+t*V<=&o;(j;?V{k|_|o@%3-3EiLtMk>HF)>J z`zmYv=xll3k;~TKUs_Liw3z;GZWP_!FBn^B@?HC>LH!-z7smF9jF$z^7f%e5=OTaN zdnZe`j4|Ui;Ric8O5a)O|BxLF1nX{B82%9J{)@K4=c^YL-iI5EJl@CR3JoA|;jQT; z^F!ANC{4qD=Fmg3CsC->6~+U)FCFpp%fa#IlTbb<-og+Jjx+x@IP3{FU7m~S!EW#^ z*58gb-_R5FBl!&H8QOpJ%X%T81!xDbUhfV5yW9ta?_IK7Tn2l{?~u|CT+Z+zkBe~l z-4?c2EH%Sd-l5*;j{acH)y4F8qNTs^*Bht)_`OqGf8=jy{oS$Gb;lIb-xk+X=LUbV zZ#GW-@q4Sb{>b0Z`up`K#}?J!FaJ=ezr?p2r~cfRP5#>YBY#8d@8gCs{fgo5kCzqd zFZ12TslR9m{gJ<+^|xw^-r4hu*neXEQFU#h{=(mHocfEG&>#65T7QcM9jx_z?rQ- z@;9{pcK)XN!(#gD$qqK{U)POOf9VqXBY#8d@9bOMkBaFpVwK-Sw~bSO{NA&TKk_%U z{-%F;f%*O>)?c&zGJIKK`OS3SIQ18OrFi?9{0*(Yp%a#FSqy&%om;5CaM{MGzjz7# zk-wq!xA6Io3fBJ-e-B+!sJ~dxjZ=T=68a;5gX{0Pm$Um{?f%EaYYO$3=(Ta`kKg+a zL0pbsk-wq!_x!wux?<(`jHQM8%WSf7>M#0g3Ht~BhSuNq6AxQlOn;YI`U`Kmaq2H# zLVx6MX#I_j-SciS{VlV`uVR~Rocc?b&>#65T7S>>+w7uZ`g_{aUt;r(Q-A#4d&stb zul?`zfB!P~_x~!UzdCFDDihi`^~dkc+xjE_r^cT>|8~=!+kRYZ{_TrBkfDbgy{(k_ zx6Oq`IZteod991{^HkexTX?@l9_e~>UgcYw`}n!N9i;>1KX6hub{_5n;*G=MFT)t12>kC#P!0)jxhV%K1XCLfqBR_{stkWT1 zrq#1onYGSBR^n%`m6m_5S1q&7l_EUHuP6dC!{lmC7 zPm}c-OI>UK*_JYY?!J>>ALeXha7ew;<@#^x&t8Ab=qB_ra&g@j<>LNp@>x>0#<&mp zv>V@G9W(h{UpN@)CZBfibIU*17dBe*xDfPi%o8<~+Bos_?^u+w|vwi-YT1c)s33 z*`E>*oZsMW+cEvw=PNMYO3Z_M*oR2{aor2&uc@a#NO$zp!g_QW)`!!-iwG{>&iLaz zdj}wo+7vaQ#%cQjr zzh}95pL`Ggmm&Np!kGsCRp7_pH}6HkcREeV@58T_t@bsun`>)Zo2zSTUD?gP_Ym1W zKc}gtuC`__?`vn*Hs+tssmVT^SKXZRFsCLauQwM2GN-1cuDQN(ZcA&m?B1U}n}G>m zIWuLae0^iS&VSyn-iC(dlCtDe<#q6x6{7JueH@$uDPjy+%P zW74W$bpM|BZoYg+v5$}SCtby-)(IZ+v9q;LhS|&SKGS|N{Nj(w!TWDe{*O3KWcxBu z{&zHQa9tH$mVXBgn%w@XcT9MU*WM>V{ceVJj&}LC_lvOn+w0g}L~tAGdxld1{;Q~G z$Pa_hbG*r~1pmEljojpW;C~8!8tJM6-*%{1x_!^xM8EI4T^#!_E`)v^>A$4E%InwN zxnugZ_gOIh`-U62{WYcZTL%AhAKdJireggc{XRza!unior|TY*5ZHg-S8RfuzrkyT ztk2Xd{jZ)`x&{hKbnfLSRsGC7cf0j+lqL=~_o?o^9Hp1=e)y}Nj#32v!(DngN;f0C zl)S4njnBUm|3dv-6JA1oE8PwMVToJmU4$R~tf%a2>gm|)MR~q#WVOUCGy@soe%jMf zipl!ew0tkd`?hD6{w@6{y;7@sX35;;^+P>9yZzMVg5Ry22}ftW@O-gUy|hn*`(Lpx zerE(km-}D2?>M6Y%evV3cyc=P;bdF~58BAMr3 zD*2`Ta(Vw*dEZ;o$(cM_`WXp1=d4wp-`dI9UY={Xr;E3=_}@+LH9T2zn+@l63D1-8 z@8xK{Z20Xv8vpa< zJzf9Hb<;nW{7Vk%ToDc#m!p8C9<7k*n1H5f|;U^e2o}KUoxBJBH2Amo7ev8-3g=7Ee+>MqVBgp;T>$=(sL#n?2!1Iij0dz| zZo_ZS&FUZhhc@W{Ezy7cxGuT#Gn4&Hil}$G#5eU{s{i#m`irbrXuo()9_?fZ^2OMW z9%}N7{nR?Na~<@jFpT7UyRXSd@&(q}i~A7CSNQ5R0r`?noA;RSE74x&zF;@&+i||b z`HcLo2lclC`xiXOsl{Y%m#zQ(|1|mPV*1}j#t)*k`SzW+YjORv{js6+pTs%m>(YN& z<&V?9`}O+ipXaXI`ggG3c3t|9B6C;{{W)WgRQ)H=zP<(cKT`A`e=L7~WOBET>Hlz! zA7LFnvCt3gJjdEMO?%=4&%}R(?Lzn`KDPuuSzb6Ea}50Rd_oryui!Wr!lB;UEk1F% z82t1Bhh{^lL^w%{Uj@FsAC`K>;~zK)seknH&_Q|VuI;k+-$DCuIra}e*&_O1lh?mD zpkw;K7yW6DKbhF%6glA2gPzOq;0ddJO#PpWem4D6|1U2xcqQLOI5F5I?`&hQsOL27 zw!hHuneGhssWKcN`bf1EhQAp6JFIxy!G9e5^kNhK67ZRB+l_+Z!F|8aQC9`$Z+;E@ zN0-3^`W1=YjsAOsP4{)!(fAuE|9CzS`wQbw89wzr3E|PcQr|omJN}ySPknQr3fIHB z2tR~+k9_KTJnXS=jkiTCK5@O({)PJX5PpR9Il`#|pW`XaH=`BDnT`Gd`K8K%i*T6k zzrXsywZZle+m||j;r^_Pvl9IXZ=i{Z*-Lk&^zS#5Fg=9Zh5G%{lwYu&h3wa%J;VH1 zpLvh=b6=DC;d4A^)9}a{6%ZC*DKOFoN>IJsvr+|Mr+P5C+@u}ed=D@=6j|AVvxeyHJDDb0j=?ok( zq+0a9GzI;0{_m4B#r}Mn*MBnHG5!CIb_RN2JWvHfTV@-N# zXI=1jM?Fh^1^6>gD)i5MFP~q?XTHavH-_UOoEY>>KJ)#-y6~~{qwx0_`gj2h{mzoY1BW@gJ8O-|839@C4Q)X z`OP9S?Cw64-iev!w))A@9O1!Wat9aPyRn-Y)YuSuX&z$PtqsUFxK2h z-xc|Uz5xJY|B>_w?V{sAa;2XzWbS_W-*Zs$;L(65?*FCQr-(KG@%6c4p91H*Mu(bw z(zcLZbXh+{Q9pc-_7QPyd^>X9u)#0S!6ZI%^P#X?%>Q%H4`aDu`PdWl#^k$*fa4tT zv6HhLsK@z~;}EmRH;TWC;b7dT0(v!;2#5YF!N1b-KOFpPEdL|Hf6;0`$gpwID+;a$_wmc32W$H*h4RP#;haV( z$E)-Cm#*ws{;?hATkQj$GeSPgANz~xPmF$;uk0_TmzsVK^NIaMhT|d~x&Gp#ENA9H z?)(CjKju@ZeqpEWjT{c-uR{12p`5YY90b07Uc87^_!h6f=uf8YCi-0us>rQhh8|J5dWr|qclL~1A^BS zxli6Abx-&1S=zy>@0JY=`gWY%EwhFAm-(#rZ@XoQ^AM@8 zyE#g&ct0t!DW&B7WT2nGP*a(;X`I?^CzbG%QN_1^;2 zfB&oield^9=$dh^EZbwmPbKUI`NYROv~S60`Fj!VVe(x>uqp;UBcos zf0J97@aaE<7rOHtI;$S6KzqdppX1LrA$;;(gfkQ8%&@(p(~5dcMEH!Cc$g2qjfdBv z2l9!BEw(Al7cU#S<1}FWF@5l%Sq|~A6~ZT<`M%ilUx#oi(SGn_25$?%FXd3Lbd%>^ za85D%tLJxRFPz(@^Yhvyr~dC0`XvnY|pPI^4IP)yq+O68#Tv2N|CcI-C8I(GtGUY)oLME|>8vq2cI%Bo@nf zlF-KpFLk9n7Yey1zC=HHF0?)FJ^8KlFy40u%lZMKzR1AT0C`{NFL)lQkhBTyiRWH_ zd0%KG?xU5x93^is(l=1jCv+EmJFY}i!%WpgE zvxj*E{}6*)##>?W`Tk87{$0GV4CR{T1<7?5So|>j$1Oh8?L26O@4^4o7QYJo6;?PA z@Q2~Ms+4CM_$OQZDEKd1;n#uxoW+lUpXpa<2Nr;zw&d}_|I7+!G5B;D?qy37+3$aI ze5M`aGYftv?cYHDrpK9-h7b;2JAa2FUVi5e-knE=8u`=RjGf{8J7YYJ?aFezaGb?w zcm8|o6XT88R^fbM@ntw8dwokiz(38>1+a%)hv35hro*6T_^$x}0N7Rf4};%6(D?UP znsgCYe?WRYv~xZ9pL&4tPkt5nt44$0*Mt)Re}=`c1OG9$A0Vd>ewpQtzvuJ4i`nNx zq@s%cQEYG@Qw}v;)g|+#Oxl~l_G3uygIBqAUqS!VMFOD{#dGkyJg&P*$hVP{*j~;| zl7VsUC?elu z5}J(qg3sCB<$YZ05B~}nF<~aO{Tygt$JoKf3kMOHxR*~rW!u}a8D)-ASBx*k`pdmg zHRg4^0cDQT3Cu{mzg*@cw7u>eD-V=PT;nZ%;>t;(&hq`{$dLwLY=14;zDw38*Uu*o zG>Bui(!Ht4yvOzpgYSZVKKW9eXRqn#-;qyAKSO_>e9mvYhVno@@wWi;zT{KA7o&Yl zKJCTn7N6yOT&z%j7jjOu_);9Q*O6|a{|fL|Ru=NvovXpP8s!PY|2OD|kiQT3caAL# zhxXzYjPKL`NcjI7#<9rvz%S)c-*hj%YrAKPmH#_1|L5$AdbrMURAM?DF5y{&7m)Rbu~`;g{+k^Evy+PNg7Si1VTG zS(`XYC!jq@|GoN{U-24wE)$_8~KS6Gy2W6`Xgo%xwzwMSCuukoSd3UBm_5 zdBCroLrZf?yohV3)LZLP1F+hSO<0Vl^fKt5HOyPsEUd6-ulcrHO6I4&1n zvq)FpI476R?Dm!Y+h#{vn4smVP=_cg9dj1;J{ZqCq~JqaVhU zT{n_i-Rv{9dS>oX_BBaNmfKLPK4hEFoECRpb?g}PJNsEp)q}a6QhP!!ZMy5|sHWz* zwapW&XVx~fxX0|B^F6a|_QWFjE9}C^jVem-+%drMfFHVJE@JW~81!*}t5z5ZC> zpS{-CZmrEud19A>cFO-huv4~OS|W-Jwo|u~ga_NHE)@ZNJZjmUgDtyLZrPoKEW2}r zWoHIzeA-SeaaG|F-P?v;wW;EV{m=1OAF1a9q_@c9CyH|d*bbzt_|YqaaQ8(&&F+8J zvcKmR_CJ?kT+aia$+?i@eOPzvWn+;!J&sf0`wbEB&p?0G|Hy|JHro;5-igZfHNdSP!=h{4+3)>2@>z6X4JEOgZIuAd=u; zVa~ZU7GL0>y&mAa5#~Q=XS*SM&Sy~mrV+3wm~V3t z&Y@g?VeKcZ;<`Za!|=Z=>v!;3{8Ct#&v-rf->fg#~HC_6_`L z@c*U7kAgo7^Wgk0S{?XLLl5a?#;(M`{{r%O&l`E#fe#1irToOre=xog#rI_6@c$|1 zllZ;f<=}H41=E#e_=uklizVF;A6&e+n0BaL0_IJao=D_-c{oM!Gt_h z;y%KN#I3~n|Fk?);=aPnav8rA;{L+){qj9`A&z$@|AExA8 zCGJD?pO})oP|A&e$nUri_bbN4uhL?y-!mw1oRNL_%ebdk zNINnxzPUgQf$n$YwZks_W!!1jJ@-ZW61NgB;*xIP%&Yqq!)Lbz=8brG?f6XGEBPfv ze5UW0{1GBP+vS-O@#!uXeG3tv?gMf!M0`5(TZ#CLieDw-vt52G5uYguTZ#Bg$ulM5 zGjyNeONjW4%5Np&Gbyqv5uXWprbK*t5|$G2nU-ft#Aim+CPaLOBrGN3GxA4~U5NPf z<+l>?nUUX0#AjIERU$qk@>_}c42xeS;xi`Cl!(uE`JE-~n@x&eCE_zCvMLdup8QrK zK11SH>3<8KuEedxi@2ow(qH!eM=^Z9HBaVR|0r`P*f(0rer7Hf`yfPo#$K24ej(yB zd69fyNr?E2-za{Ch|lPoWsVZ@>AxYrg^17eO=53^h|lOP;$MjPbS{zKLd0kCR*6rD z`1Ed<`3524GntU*Ld2*0TA8Cne1`8VbCh!Ul(;=1;xl}gJQpH9LlUA?!zq`y)B0j_SNPI%Xrz>G85uYh}rbK)u?v?n2Xg^ao z$a5j$Ga-4QM0}=xC(nh5&#MEjW(ze=>9G5M`T z`x%nBm3Z+N-P`Xuw&?i&^fS#H-d=0BpP_f8ya^GX-uqG>g^170+hQM-P`~^C5c?rS zeEQ-yOQ_$Ya<4>uCdIE3@tKj|O2lVa;#ML)!|%$y5b+t4-%2@r%I~C54xbX2D@1&T z-jnnQ5ub61ONsdO0OBp;FTC`5cFC2S?)GxV60Mz|} zLhOMM@!2kMDG{H(#HU1jhUK>s@tKg{O2lVc;#ML))ACG-`1I}+JPQ$@G5M`Te5U2M z67lJXEK0_}cOo(44;xj6;DiNPy`K?5JI^tL9e+!=> ziCc*maY=X5$6N1E44X$ER))vHM4<>jh6j#HVw!#3e+0CghnC@#!rSeF_nu zp7>QFK3(~(M11<_}c3`y8Z#Aig_RU$rP@>_}c zjL5r6#AmxaQzAYS@>_}cOp9M7;?85X}vHa=e>fZ*Epbayk{lk@dc z*;h|wQ{qM3(w%nU&KDNL@3~i*H{yG&9lx2^1usIxuPe4(iTF*)GbQ3T`ljehi1>|) zUnSz#liy0jZ(RH;5x*(ubI&yL5#zrOw!B7W22SBdxy{Z+yfB7P$hwi59hk!MQ8Z@c_f zB7W2ITZ#DfBrYZ5H~cqAj}Y;jl(?0M->5uOB7S2Mw-WK&F3*&R-;_L4B7PkSONsc6 z$!{g%HzDsT5x*(@>_}cZI`f> zHWvKGMK&c~#4X)kPuK5X48Jd2X5R1zt=;~H9uj>C5x?G_L|;P0Z{|VKmlDSh9u|BG z5x>6p%@W5C0{6-{fCE~YT-c=%g6Y^V$ z_-&VWm5ASzJX0cmGxA%B_;n?0CE_8QF zeq-`miTF)O*h<82LY^rRzZv z8yCMy#BW4oRU&>}`K?6!X5_ch#)4l*WXTc$Ox)7l=1}j{V)*?C_BXi>{Kg&=eF+i2 z@juINA>ub8&yubJewB#dr2JMQe%&WTze2=sM1KnrzwHvX67kzE&yAmAe%&V}JR#!O*SLj<-z1a@tcz0 zN*fD)(~k;1gm^8%54y+IjX6cv??nzX>oK0f`p=siWp3=N{Qhlsky(i$%M7v?U0s)@ z7ti(MdDhXdjNLX*9f#*xlh5+Q?^t+;8vh)hOYLRk;XbQ!1oQ^JV?n+PejNL>-Mh^C zjSBE%Shq(1VeoIT!l?xR-`GFK^&TGhuMH*--7i#(JxGR?ckSk%J6{hp#7fOwV3@rVW{z#Jk8{2L>4^DlGfb#@uE(JG5l5A z$AN2AC~zY`e=GAJ!K-YW;GN^R+^_}q6%t?YI$PrloNwV-{%1;fdVV;sezL(Sz9fGi zmiyrMxSrGS1K|zak#8FJ^uk-`6bV1Lo+P31%X!+o9`DCr#!X0nAQ<08qs@JMJDDFB zx(4^{+sj<8&=abUfIQ2s^i3XC_zi`G zVRE`!E_5pt?OU=-VR>h~k7Aua_rbCJt-?Cz_?$xf|34{T?KM4|4OzazGkZ82Q+e`V z=uuFfB7g6(LCaI3S}<+l@qb#L)>c0JXL~s7Q$E_C?%@Q>NBeUx4#?m12(*`hyJw&Wo<|V^e+c$HQ~q-BYZpy22|@eL1^;o_*Yq_e{0i_tVK~r# z75HJ;Z=NqS5qxBuvurQ(YYE&lKOBEsuza{@nDU|LQ%3jhlKZ|}6z5d38l=nekzPmn zxV*bbU$V;RmG#HTz)^g-NnaTr>}2_uCP4P`fm8Y~N5Qe%>lNUaWBoUAHxT@r(O&mA zH}ZtR522k+eiisz5ihfi|0wvm^PE@?z<(X><6JoafAbTd2l!8d|Doky&r8$m1>gAR zIZ`R`9qdnF_$$GmZiSNu|2N>fILAHLzGZ&~?fC2=)Dmw9`x9s<%CJFUFwPMmpZlu! zU_S@pl*507b_IMF{0Fd4iTxbi|D#uD?yoop`2v0%b}^0bT>4?-zX9=*zXJSCml(Z~ z9|GQ+&M)Lo1K;kS#KCvE49)M;)vc(xJ)dUFs_rP&J)yDcSz-5>Vf$paeO8WeXD)25 zZJ8w7LS?fq{pc>yX4#KBxpslsW~=*d$vn7eW=qzmG8<#fO*Of@R@tp88*>p;3ASGQIN@AscFC3rg}R^3=|uX|>LjKi~E#S3tl!tp98HZE&|3br4sC-qRk zoH=Kbun(6_y!pMsCQ0T=Hbm8KR*_A!YI8ek=hRG+TiL|i)LPx3+p4L(`o{X!`fA-! z9Gh4_-)K(rueznBzNPiBw%WE@-QU|*)9Rk&7TcGto2>KENYw5z$1>M~ueY?Gs94B-UvOUaf`a?jDJRy}#-`Rb&tnQ(Rc8e^1y2L}vt!k5 zEwz)U&~Ns(U_ZB{H5SgnSMT;JxEoS%cVJUBOGoKl%>5sjgZ=a=q70JHk;$6C|e?sWctO=QLXcyt#dCVFYV*RrX>R0-QxpWT3eoyk* z4x4K6DM#HFh4EG(;*mI?h~dCIIeo2g*xtGi=Sr2jhb$6Eel;6HE4xd8mLt$2O#8!Y)3gFnRb-wuAv(&rNJyIXR` z!T)fZLOm=4|7?q&0KXjVGp2Vr{UcxeYE%Ct!QX=I1@g-o(f5BV=3oL!KvxNqcS{l6STI&`;vW?}NVz`y9z%4E}Mj zC*-$--)x1m1pJ?&|3m+A@I%(P_cHKv-+M!QDgi#fE5>k^gI{OqAqoCsv~%fy1^8`N zdoTt5#Ql+vI{|OtFW~;ltqnf|{uhwnLHnBf(EBmJb~OH7;59TH742D`GY|#;!3mHP{$t?RR2sg!x9Mjr27fW+BwvOAv)4@Shke$>y9|8JkHkMU z;U&OFvYim_SAp^MD~IhAEPo$kd~S7%l)umNzl)cftRVdIg`u#V1()E8xF@{S)|?;p^;Gf&Ij^ zi(&Ai;B!2r68!fOKK*;(&td)}z2m{pjWb|8qze4pI0N`b+p<&<<&Wb7)8PMYlmpIJ zM8W?(aKv$jI`CJcJ|RB_{(Y8y7J%Oy<%Z$=;B#Dp-)~(E{tEVcI~n}8gU@jrALBDi zz`qE%rrwg^f6RU4$d|{#e;a&$pI`;}Bhc?u)0VW#=XBant9*9uit+}22;oo1I32?&2Y;5u zcfoh9efkyP-vPWboG|zUEqhT3{&L`k{yp#?w!*0bKY?)q`Zro~oHE)Aq-z@dKXqVX zdZXZf0{hQ!>cBtMEA$@&e*x_a!e0RXtya7~_`P8-82)1LPq*5E?chI;@=yOuz^^1O z5pNv)h?OtPz<1BNYKGc_U+QH|0cfWGZs$lzkBJ9I1IzK3xLi-TCDv}L@?O3|3|HCqmu2&d(jN{xZ z!Xcw>_Ru2B3wl)5v?;zj7Uk-lyZNskspYwq3Cx#ye|8LMc!>?pG zDF4n!22URNVdOXcF95%v#rMJQ4!h%_U$_|jFHqhXP8|G~fLHRDfghngvih|(sGnKh zmc#$@66N`h?k4@jSrY!2SvXz+{=ZNj*pEzsKaJtvRoISQL43mwu7dx44n(}*e+d5m z$amVK)!?6k`jGsOz;|Hp$p0ApnJl*m{}b@XGk;)a%4V-uC@1`9z^}#p zCd=U(@E=0F?3XzxKVP{feBzDv=&ziAL^%w>|Az>l<3_BX54Z3ThW}$NKJC#O;Dq?0 zJz9=@C!h9cbzdVV`4NO~&x6w*oriuu`(Lz2z0nTx@qJs`qfKacU}t@V@1tEz94-dG z40@%TI(Yu(#n!JqH_v$VmPN8Z^n8;E@+*Y*kAuCzt+Pn(gX_EO^P^9<{P(5-Ljdo~ zf`Z`tw~sHpA84%~%ce81-bv4&*YkFHeZvI`V07hz3f$}Z=HR94n}e6GXAWMvo;i5w zdgkC2wchuw`+G&S;QFtrl72rRe_Ymk1+OLYeo!Bt$RE7t`sc`1vffyT>z|#ttko5I zwO=qa$2rbQzpjrCUb;RycyT>+{AyWmEyVTDDG6Jtm#kk4UP(*-hb?{eJRs=XaV`~k zg6Hi`$NCETYO?OTVt${`(^h&$u|o_G+X#Xq?y}%f1BdW8whW(;@Pg zvX9Pzh4wKd_d)xZtm;`{AKgRD{*hq%)@mOQEwqn`$?LF>k)BS_K86nK=>+Ygdw98y`^OiqVWCukot@_cRf(V4Y=_Ay*5_zBoYe~!ez7W67a9X{07%W#_1pFW&dLt_~q;eVEt?Ye0v@4a`2-Z zFGf3^<3Hos?*Tsv|2v{z#eU%m@Y5WBfd7@?UxfZ*68zWce@jz8k)He_Jh%1WWVrI&&Wgn>=!05zU*23!V7mb{)wM25dM?w z_n@D*2K@7S6sFffm%v4Th~abv|92Qqi~qyC$A08{2#4cuA^5+NJ_+Nc%*PD;M>)=caQ+4UZ5U_r!CwRZL%=`zY?#I2-(hnb}W38I3cVXSB{}n=yaJf?n>iy{hNUiPaC7*V5S1)DoN5EW)(4oE$!R zuTy%t?t!j5$rZ77uW(1Y?kLxtJIb9ms{e4e|NLIN_1$fdT+Oow4<5YNkfFnd3>`CO z%-C78#>Se*w#^w|TXVpn6DHKooX}iqSE*Vb@wTjRv)rirzUvcPas^}jw~t6Xa?~hy z)Tq&}=Xvg={RhYzP1mh%b=}#qQ4)gd*2{fE^KiFmw(B;@y@cVm#D)uv+HJ;eyA6<3 z50EtPaZuyzJtW3~ZlgO$eh-r0gXhHN>@7(j?#4zjim`P~^TyRx&l_LeQg`5?2ab~@ zFO)Rb9#Y>pYhrCn%S2hFDbzNpzPd?Pm)1|NJ+V46c4}2b){ag&u{t)juDX7zEH$0c z77q97Id9alZsRBsclVjqEw#GrwMJIw)>OCbB{W26Z=rpJh6)X?;cuhKNia@j^%k=zukZH$QwvHDo; z32pVQ`q7(~nay)sYUa;rscSk>Ru8x85?EQ)TC3|-v+IW?=X<$TznD5o{#EP0Iip0! z16}thy%k|xx2Camlv}5_|Btt$P(v5#!YZW*anRbBl=viqe+ zTaRwkE!*HQt?H`k>O$33MLi@nFm#)66JYKTCy+5A8PX&Z!ZLRfA4cnRd-tqxsznA;Yg>>-uvwL{@?rGrx*ElaSqXJ z>MFn}fgh}v>z1>xKju~v^Y|%XQL4;bMdofS>cK-U8j1Au_e7!uv4KI%_ffofXf%~e zECJTCxv|7jb!iL^$Ct*ci`mq8u24=NFO~8I{1i$jOX>8b$?``m z`|;Bo!%u%a$LU>SH@FV)14rXriC8(8O{T?jo0C3x1%H+)?REo>+uiOf1ZC-yi#0DD zbCd8^#&6|nW!OztOPKDZ!w+Fbi-#XtI_6$Zl#0g=l!3ct0CAz>9-$BLk=~&Q=Jn`d z0?%kEF`rEWd#mNjSShi%lpRl$vWYwZ`qENjys(5Wju(pfqfQg)T)L75ZUY-nPMx2c znmt*lEM}9y^Gr2&DuKU*ls}c8FQu=XS}rc8^QYl%zL-6|Sa|KF?3r{Cjh$IeqUJNp zDg0sqP|vyQ(tNsfKK)wMF*APZ_=G!?&Eylg8TlhhAP2}ZvyA>EXA{}EGwE5jRhdoa z&|jcUBA#hF!eOREybs zIbEt;%I5Hwv6ixV{Qa!F^ao@movf78N%XOdQ6nt9;)+$v`d6IP*Skz7YH? z)1bGBRN^cUJdsTb3W1&j$N{!zmlOG=L$VUno`5srlteP{6D3bmz5@D~o z_^uR<>LaF)UVX&%(I<~V{<@_heI%|*Y#s}X#CeS+^^wX-VoGD_1wvA3A(uc$N?9#X z)+}X>Rl(Hq8RO2cFoy#G1x!y0t4=;Z@B#&`<}c;(_uH_PL>N4g&82xd<7B!} z%Ao#})z<>JD%q3O(o*%(V)j(F1Q^OE9!XqIu-((-4~U;mEGHJ{&ScM^^+aiI)I7(| zCKeMQJXr`K(msgMiEKKTn##?MFJ>=grxT@edNN;`Uc`#cO(!6uR7-$HK!%AV}PUk z%6xe-fj{%-b}tl4$#m)<K$c#OU=Bnfm;h>~F~Wj9%@ zg4YwOP~ZtlP+;Y0h*1kJ$tzGm{~95PS5Gdxlm*n4doa!l$yqj|?5eUTqK5GOBV_yT z75N)@*7*+rWVz!KX3Fwk3 zJ7vuSYp)N~@Zv|LK((*j%E*-J*B7~Z9w_rTSC4o}4Siy8dJAk}^CebncokfvR$l6L^ji5asn@ZFWxN=qh zmwWQym`mkj2H1OJHqdJWaU1Bffqokpuz^7v7&3u)#0H`^U~7)sn&Y>xg&9B*e34L^BFL-3JkZU_(BF5O@dI z3n2>eAPm^?Re{PBZ=UgZk@ z8t0L6x{@gss>O0N76Wsp^wA%U^!ACw4&?}>lN@OxT?DKE`%@EX5M_{OsD@K#M<1U) zKQ%sc608t-0up%|VnU(32*M8uBMVRl&P?S}bCWoQmrXJ>4Y6E9v(?figepMDxwDDN zqF~Yq^8M+>0vHcv%$Y>B1Z@m#f9@;~9!`LSYUl*#HBrteH4urtbOM69!J24n(1;Mw zFpU&}P$o%9jz=Uj1q>T#m3A{l5VlM6iPAA6QGhRlCxdUMvguSYhf|ZHjgZy>QPX*{ zZR%6QZl(-^pAw;@jK8Itg!YBwev6Q2fKiDQC=6INXHBvY6ev3;)0rg91ctn0kswie zOPEQD%*j=kjtQ-UB#vi}L4WK6^d6E-kUZetn0vH4^Gs#N; zNh%U11A>Nzy4rvIp;y8Q;A8sy@o^74K#nY=V5)i}ebE6`;)dOYQUZUe7J4@Ra_iM1 z#34ZQ$te*0@#ABoX*%Jd`GRK8;1ZrdQ3jbYmAyPq=>{4dlsU3? zOsfkyK8cm(aOam@1fj379gkN{S|0U3kYF?ps$xHO5~s=qedSvt$Yi} zjQT(tNbSueMWg_0xumcwGH-4H3z)oA#PMCIsuc)^TzY8u;7q~=3_b6eq0(=GwJ7tH zf>@r-DUgazDpk3n=?ZWP_;gqE7$*=Ie{Gmdy+=+YAJd?cq9+XZfN{r_GUJp^A-aoj zNyA4s!7`&{o>D0Y;1Ozh?JlSZIZ2-+{3Y_9?7=XBmIQLS3|&_G zpg{ZB4+^%oIStX28!O=FKeU3YF~KxkLu)@O&1+JQS@;a*==sd8N2WYZ1a3Bj_+J zQ-=v+*v$I!e6@mUEM#Vo4x08r1i};l7X%V~NdZ#i3KUL*iX<1axfB5t zfK2HE7}+yBH8GV+p6VLMi@IGSx+}SG#)c z!Q=HXn*jWPaSNrw64XM_M^7+?aQk{_Xo82LMrFaCMVAV8g`zEIF$a;-z@5i~b|GGUYML6c4_8oTPl>&m>VH{gp5V# za3aPtB4Hv7RBBpD(k?$l9_!mo#hYV2&40&xOj z2+~{^$O$zE3;;5-dsyMc5Q8J>N>Z1M<5Ei-tVau!v!g?if!_FFf3GOWu-5bs#CxOt zMnwS{l@czoX_#OFXu=p_;K^1HQ`HC~$7+w^djnM6g^{QPG&wOh!;d0N!&aLv<>zLW z^OeNaS61=;f(lFnpf9CMSpLzm^H_c{nMe(kDFpqv=Kh>BM*1m;Dr7@eP@sb{48Cpv zyuUmfJ6;o;6hx^M3NF}WChgA`$B+TLqx2*-mBEd$co5z&t{fyugXGd{P=N%5CpH5p zxs+a(cHJu_kVS>F7>HF4#K%IN#sF2IXzT;b0gwOzsZc>gA>9Whda01Af}f@U!-$ou z$wjEWmtkZzYOIiz@-V8XK-n>1uH&Yb0|pCIc%iuD3D$^}U}7``lIy0F0=n2TCxHeq z07d>1GMX54&{7$CrWJayQDWsd1=ec5oLETrOsnYy!Z;Oo#lVzsPx*!jb+VwKM!E5#yoJneoZVIZvxq5IRE)1j$cp^a8DM zj82z1*Ckj!7IQS;shA34OPTOkB1J=D7HtTA3glqg0U@M`5{1%^n2c%ALHc=i_I(c{r=FUvPe!t>aK3(B_SeC){h0s-9Qu)CyFeP0G zX4vXDd=dx@0iW2w1rI=&Wr=1X4F|Dg&P01M1t3H=>G2nlVIctnOW0Eq0|@lQ!6on^ z8COx^WwAgA&$vZk80Gq9NWC;g!~Oz>rnFE&e2Id3K!&koMmRtjyHQnGF(^}w@$)c{ zQ*kU=nw+#GfT zmT2Fl&cto2xk)jR`|0XEX;P1lC(@qD-DV2cy?8x=C4} z*lwp*unJpx3xF$E&Fn6KfzYDU3JVHYg_5B(G`Sr3S3afCv@{Ro#HLXW+zU{KEiMQn z^J(bDfYwR@N|g{92y#X?Au1#Rlc{vEkjs%4nU&693jhdr1r`?}cOXiOCBav)D+rgg zfk4u5E&5v|0&#tdZ-%47fqhV~WEzLpVy?o5bJf6&_xm=2tf_xrqx|w0u%>-p3;7-wx=b?U0Ei8EX zjjhIula>YFli49oa3MqpdfxV8Xby7hGK(5eSHzxBJ3OLkHq`q@qvLp z-QWT?T1p}sjyql`(Xcg{FIFqZWuwqzwp5gWsuZElK@DFdCd@;OV!{lT%1;ox1Gp~5 zds^23>th#YFdNnohlKH|bKtgwLX%^XanG_gL%A4`IXA0{e(pjZCgU{B9ajJ4)Xrw} z%M{YbDPA%mghdd>?s6_lWKMNUqc2m%cU=gX}@;aly!*!rSf6KaEkjqZh!lnD7s zr+|Y(Cq)ED_frc1(yLbzm(o?xFm5=KeTzs}DrLcKbGh0C;10AVVjAflxD}W&WH#M0 z14{(jCvv3zkf$Y?k>^-8FUm#ge{o%i&?F@Oh6g8&{{F-UPdItbu94&%Ty8AAobg*h#O=AdLi?xO5~`ZCF}9I8m? zr=gY=E4k%kSuvIXK}td%FN59ZU2NZhWhE_4NjGa|BTFnlg89KiM{21wq$c9# zf#x+iF*7%YKxuhyN+!Bcf=&-?q^44S1^WoPCo;<149!5g*ONYGb)taH55yVPMgX8F zKO&qMD<4eZWNU>5pw%4gc5~2Y)A`F5MpR@G*ALMyuqeb6f$Qb%=96_zvhP1ZBYTl!IsBz3=S%4$q$SvXEgb0`i1o#WB4AYU{^*e1ea)p8DqKD=W!mCk`9GdnhBpxq z{1ga!A(MlzP?;D$i>0hV@j4xZe8tl{0%d{Gqi4>ag>l0-(G$y$GYv#uc2Yo^XJAwG zZC4OffZw%gSKzdiOk0_3ZkkGCRav8M1c>>6&JYUXwHXxUTrmO)MS#?&WI;tOrq$D9 zreRe`!{)2tb(Nm^;`+2D`b_Dbu1jVh=758Oy)0={Aj1c^F=<$ej8OIkMEj(uqI>~8 z;wBQr7g~!oEt8ysvsH%b4tTbjJ2C~^05wcy6;y*um_hc_+L$dz#rE~Q@IV-!umLNI9&Xb&}RN)sV@)Vo%#9EIIKyEWTl0I#)EF1fLUOuq|=^jQ6DNr%T z=w)`c)x${`9eiDt(W`z2M?vr}(H|-0gA!t6#MjY;`g6mdTObhdA=JqF9RmvhK>+ND zB}?3|Ajop}h&wZvvjyltzA^FG{!>$Dk00qF$wlp{!{~A;9UbhC^~d`l4a9mQLw&k; zJk%S7aN9Qk($N|r$_3eQ!WyJ4<`QCgCX%u5lq!VkWR50z}H(N2YRH{Lj~Y8CSEkKqQdSkHBH zOi2Scn!$a6K~=ac9~Q<>Mx0OC%7#^6c8lI-SWpbdwh1?Iflg?WHe%2#xDQ(OiU0;g zB689AD3&O}kTPua7!e@)5+y<|FZnrEiixmoQH2Wjlg6sUg?w&V37NjC1$20Z(#xba z(O55Q6KB#Dm2K@_jfGEGQ#`=NfJBSn_NbQ#4-`dRunjNKM*;U3$B=fSYrcn!Un_XFqS}Smc%PqQEVrf2Z|hb-;V%?6PJWlir{DwRH@0h z?uSvrAzy%p00@t4QMl2K5@VOMC3<_*?q8r?@LO93*MkRj}-~2isF| z><9J3VPT**GBD6PWIUx|u@hm`A_$Bb;I`n1Gqa~poPikvBLX!PU4ndaW){*gZE%G| ziKG%_UN^Trc@YqX0a)7?G%ipuYuN&7!)FPABA5ZOPByWHN7!9142i@t1(#_xz#37) z7(gjTiZo@VJ0Ue-vJ}4O(_mR(R0xW|X6$mgKHd-gL`|_lL<5Xec&N60(1$c zed|!8wrInzgpDYeaZAa=3nAEKK{8|uGngFM<%l;lq_^Yr25?qv!-4jY%q|Ex6Vr7+ z*?j_bmBHRff4sN9uXnJ2s2?^(@sGEYTeFG}jZa@tEm~XvJPqqiAwz%Xxv3IlC~%-8 zbW)(;Iq(K+Zh*-Uo3%nCfq0WsATmd2IK6^Cs(%2n^i{Ma`Z6QUM*hx=WgQqpra(u8 za?h9;WgzO(*379Ap%Da)8}=K?jkODAxE}BXoCb$Rl0YkLV=1Sap|6)m2f#^X9~ig= zq*O8j0LVnz*IRL9eG&h;*3*}9@JnvT+^^$ibE1+`${#>b%;$ig2NDGCb0Ki zfs2FMNINFtB(#hOb7b=BSX>NICkSB12Oflkc|OhSX?A{JA#_> z01a_cg*t#)iP|?t1=-0@m;DaW1F_=ARH#&1Y6!AeX#wEyxgkx3OpYz4E0o_biQrwn zMHQ$3MdR4hmx2y3ouH;H8oEwjfk|W z(pY6i=F`lrTEn=3rc|s9sDB+KWO|4&xL)V-Hw7_}1&ZLrNcbp<9~ul>6ayaY_R>LG ztXYL~<8wtog4*;&t6s+e)kKD4b~q71iakpC$JezLgVY=uF!i;o00^HL_`T!!2ly;} zVufzd9s_}l>U0JyhLg+6W06Sz;YjpwBsLrE8;-<>BYikG1HbVYwt;)W;kZNG+Y5!O zAIcUFYKVrU`wMgE2E0!V`Scl%<$-Xwp|A`hlYw|>IFyLS?n!Rx3&+wprX#SM8UXhU zWJLZ!5d-fa-jpFAkQSk{Q+3phrhtwG`pkX(lG4iB7x2!qFH*EKln(n8{;)O#JGKaY zp#5O5hYhPEAX%e==Z|4Y(R!#9Qsi$X>T+R>Ryjc*&Ay1T5>F(o<2h!J;llYdHYLuRM_&ZO zp%E5EK1EmLFb!NcsPnL5*pPH%%DxNmB~h2`I>8N0wn%`kswxRplLd*!`}$!0?2AF9 z?C*ymV=&UMZe9bifj*c!`lIm7=#AsBUZl6zy6kvXQiU$Fxl?vUYny_8#x5QL+6z-* zYb3?ivl8nL=Arfgm>#`7wrK#6>^*RL-32*RI72p`fn><7Dj*ajFr-jYSKcPBim9H3 zytjFqt*{LJB`o#B?rR20Wt~mW-vps(2KJ6#(=Zxb8`%uxqTr-0EP+%Xj6w#`AD@}T zIJwC{q8CIX<6=!hhgN8uk>y22I7uyg(}!WJu2Q7exM|aP*mTRRf^-#<2SI+!L`mHA zksG(Qh%uhXZz6$KyfW$|}LR(txN2XqU& zv-u{-Ekh>DpsGVZ)D3o$@al1>Q}C21R#7LUY)_rKcT;Y5Z@u%-upl0UF&w}KPk|E3 z&0(A;tN}fo?^xpbZrw>$p$gzf4rCnfeJ3Y%dXkN7@m4fs!MZh&?_`pcd4&kk&Q7f__p6@QDdHNVI4gru%0}6?+?5sm6zS^W4fmcA; znjQ*VxQ`z{H~DzI4ZZ+(JL)cgIu-r=jWWIp3T#GLCrHV*8mJU77jS`z_DhkZ&lZen z@NA+CGHy5YYH`kDmNAD2(8CfJpu$LkG0wxFfIvVaDxDUr5Epo*&b`)v_}qt8t*GH8 z5K_eb%xd1grx}K*LP`ydWj~ApEDNI3sh-RrQZeZ|p~f1I^Gm+Xv49Ugq#vXAYn_S} zP;3YXLFGpMjZrPwA2lbcAX&4E8Xb%d4h;^)ar!FWH`v!7ALxUyr#?|bk)ildd>|4X z7>L1FDhAw+_C?e^>O}TxIyECzV#zoJ8NlJf!r|E2Q#?3y0&IcA|BO%`SbxYXYB$>P z*Tb}|5~b-<8b=8r0?<8*`-L#!LqxS+$fquF=iN9x0psC@0F1>+d{BbNCeMwZg8dr{ z35$qKE73WVo)hQDIic6mO`vTiqCzA|jTmHs?IMQ5!^m#*sN@NSTqG}m5d}ZP@Oat_ zelH+pkmM!oD<)tuFi|L-u%=MEDX^jaL(!mJq&A-mvOiWTra3rZ;|I^9L!zDwFs6PU z`qeSn{!{(1BC`OLLMQgs^n5oxui%xuA(UA%WAFiH79XUo?CWi^VMEN$p}w=Fp=5}1 zftkdyHfvf@D6Ez8siJ@a;VvTM2)wp5@eu~fD=p;A_-YybQTm zi^}7@Eqn+BF>^r;Mg2rK6aj7c7d}YRP8AT1rI+#9;_H<3Ab=a#Q;HZ zZ-ea%U9^B~z+1NTdS(=yDP!@Np54hXN+cN>&Xar2A^1oNj^;yN829amXBA8@fUr=a zRg24GbT1~|w(uwpfBa|>-6((&#Ae-hhhOB}$#MEhE?|CZl<98LVL^?9w(}}(6SCAu zfXzHuD&UUCO_d|Yi^H?S(+LbGN+F&LCuVh+2pY$INn80oPo5TW=9H(4t=I~|iC%S> zJtV^wu109^l}$TDU^=-wA;QC~1%5VXSuo2}y*w15BOFI!$5w+sQ>w+)B3BTBgtQp9 zsClqL4->LW)`G6`EnTp@moyubEXj6+@zwNSilUN8inybWqt;oSh6#AA8lvopEVe^} zVV=i?qL^20xtc0ul)iH~;;P}jwEKp#D`jko{xM+7;$%NV8wcic0KhPxrFw8%V``;Q zN(==2ZWQcA8#o7%Jge1Rz=`uH3bChyiXvF1s*UrhX7u$kM=UnbJAgw>eerlNwol-} zhh2NCnI0mRp);7Ca1K0kFrq)cN9uXWwIFmoQv0?elblMSdkdA8X| zMOnO!ZTvQdw~x-MGmza}4b*(WxIp@5BA&M=CA)Z_e35=0nLJILq(zjk#Kg;$!{7tr zWQ`!Gricxx!;JWp!rWuj3)G5DO}pXYxn{0Yz2_ifVMpHcorZ!3`hjkdwbVPk;^bzj zfKT~A(sHwfWF;q5Sq)tl$2>!BPzY$ZZ!PCHR!_hNCBj^xpg02>zuxM!8MhZj?4U;p z)F?_6mtLu1#v=u1sFEnRRIf_IFJA|eh%=v8cvz8tRM&_LbUOAhs7~zDqa)s19SXqQ zAiJ1xjakU2VOV#frl!--%xxN=n6;xU(e<6P0ZCupZm=C8dGN6^3O@L3oTJg+{z0DL8i>I+wjah?Y~@2tH{a6f>mQ8w!eTVo z9~s2ID9#WL^$!jWna`U5;%APZd=#WA=qC(EoSew7hC3^4gQSc170}6uwL!syQ_AsU z+dQMTMV|V`VJuKjEFTCRL}f-$T;~-q>6xJHW=CNDJi`QByD``GTKmEh7@wttJR$lD z$`ambWK5JfEdZd0sNAj9v2zdP9sqCL{B^bFHC>i!N~d4?b?K#FOXb1MHE2bUT8*Sk zKe$>E+E^m&SPr}nZfX#m=%dHo26e@z|0GXk0D@H4AyE)Kw9LTjJAhcM(qT3yx)|mG z;+gnA(*yoP8>Qe^ydMM$ZrOl#FST(+@0Rh-kV0{@_N*npudkq=I zL+o?arAZI915z^fpsW(CW>&Z`n^QmTl83woG&wwMMFXA|;6sZ=G@COPqHBFfyw@9X z>|r-H7>`9^&x&IY1pgv9dmA5&$A<=Bi0fJG-LirTF(RfohDC7bwoKRY`GI~AFw zo^9~OR(RqXS20Uc4KQ5bmk?4E_+RS%d5GRt%ahf{Sk%PtYq*o)eL=(57&%6H10~yel|m zf#cv1b>#4nCJIZja7$tP1WtuObWdRa+#Ig+TrhENr@FME5GjWiH`fawzpCd0k9^>h z3-~PAGVsciiaqe!#8SBVdp$1cy~o)WoN5|{t6+l8HTZf0G2PeNaN-rT&STj2gFjw* zyXOQ_>3_K(aNJKy20Vnt2uB)VBdM=&!q6fameR!RjB`NV?DuVE=GjDmhd2BFSk zV+Hgp8j$GXZ5^ z&Jtn7Fl36{twyet(3r_{H8h6w0|EuUP5~l=43D3fc{QliCL8&f)u0=y6z2C>DZ7i7 zSZ{Hqyg9!)VtMMNI8$RE7M=)VX_SL``2Im}Uteqh z5-vBCB7G5@*BwGqe=G_=1og7pNLQ4d80j=2QumgQ!%?J^#__Hq32L#%sB^*VS zGwd}7!XU+&G~H9hHpFi?SOhwOk3IpPi0!no2DY#5HW^>w6BBysm52zn z2*5)J;n{{6s*2w*$8zSz)iEe$QQM=jsVxpwDWNK15;*off7@ zmY{C+SY0&)SdjI!6H*(|;JG|P`F(?yb$qDixu1ki(SNOy&MhNLzD(zAOjSxoYYhyh zg6j}mtP-`$0LLM{=guJ8qTv&bq5s0`uhiB*g+TX zDoDiExB^N`rv*@gx(_9sodI^1-OFY7Yy9#P=t7iWwv36meTwCY;JU4{4I{;B22cCnX=b#(L^I52q)~axNU-aJJJN z(B$NZqe$Dgz8=eE#WYxZLY8}t5bAu%*n)pCc^KFUMFWzp66^JOXh@=z zGFHu9vh>cjr4qIgp8=r!(45&z^ytV2QZBdtxqay6QQMZ!{(%!#I5)OR5?UNpw-XJs zH55wn7-;$J7#zORWc*`2qpgDJRpY*ZnG-ucaK)2Cn?0!p4gahP98 zvlQl0@tKpIIt#SIctu=%iA)#-P*;xp)|>(!*PXHYkMMZ7<~iJf=t1|a;BOY-8#=B~ z0uSIewu?X%N)&xzGN2f(a}*&V){kWA=B%~9W5)F3M6e-JT`%D~*490tMvz#-8GmYn z@Ku6hw0_?}*41uam(?l9Bk;n9tuox&_)|a(h>+I~yTKZ=Z;HWYi!^eR7u<49rr99RXg}RQtstCMb z07L*J^XZ_Ma9=a@L`S-ib~DTB0&b4z$RR58 z)fkx&dI9Tpmtd4fCWP0HEuVuC%#x*`)@wN&bXJ-S=1v-`4DAfYZWa6z6c@LSN$Ps= zg;DvxZt}EIZJ&9F7Si9JOkk#70K$2*jRfbzQ9sW zzmZn(H^L8r9tsaxnz_-Iv>dN6-XQb7pfFuZKSqZHnl_9OOy4UIk$j~rJEP<*`1TG? zHT&Ci21p`e-(nTP&{d8^UGQ=kl2vY(s@ zc+3UmRAm@4=Qxlv1c3#vr&w=sn8t1xJ{mKKvv~u9_!?@j`F_kTbS0TpAWef&HuFXaZh*PG< zb2~_sX+NYA!M44X-i&+@0{9NVH*U8NK{m({v*ln4_Xz;l*yalQLz2`mML#x&00nRP zivZrcNirItY0Otv>cxpb$$I}YepSK~4$ax^Oo3m1hCe#B34HS}`+8yMn+zpTImV-? zhE4-3)}0p(d;t<>29@(Yf^wdwb7B$wsrhFUfS77b0~QI6ZNyhkK*-sM4qBTuCsI(5 zrYWkR1(DKw@cm4cnXGSe9m>HP!-0bfSl$Ty*cdz4Q&%+V0l-Ggo$9l?4c2_>G4QQ- zkACqB5FjhuehoSc8t+Jf?pmiMeE$P}viM_b#&-rCF{fs{eI5fga5#eYz&~)MXJZuJ z3iJ4AJRNxKff;(Uh?C#~KWvamEsYbf8VZ2H8>~zJig$2}OOORCzJ&%a%(35Od` zxQZV$C)j%;uL-Doh-v^T_m_y7_6Gu_7u;L9b=`vbW}{`(+%L(` zWYdq{pVR8ReNe5P<|LN+Dlh%MjT0`h!}`lp3o@n^;sr<#4N`<-&v;#9A;Iwg<9EQF zK#(50n~doWe$qxa7)dX+GdM7x!{3Jh8d7qCk!RE1%))^M-XNZYGVCtnDH#Fcljw+0RV!xNO+(W-iV(pp++!{6CWS4495mIakz1|5VzEN{6)uIhLG%*%jpeEp zA!Tc;#^MObwciAB@4p{_W53)2Q>1<2PZGJdN1ON;G@vzb4@@kX#-Q?$8}SOjQUkwq z-z{BMA@y2($m0yQVdbxI$&nRVU;o@3zmP0RQQ`MwAEcQ};9UG5D`rl~035M{G}ZcI zBMW@7iD>99jHe=;fRX5jt)+-H;d&%QEfR+X0fAWMOX({jp~LtDzA6|%=%+9SL$+AE zXj{SIU7j~Vjs-BwhwH(QdnNb`sewGtfi(z$8?b+Vx5fX`jys15 z2HQ6VN8K#^KDZ84EuZ;+Uve2_clkgO$*0*H0@o>2GmE5lNxNM@qBk?`wt0-7?8tg$ z72ugoV>`(zK0Yd{W58LcJ(C36<6nM();~k#vxl2;=M9c;W{!h+>a~Wy4K3gMG4N_; zw&$cs()cTWzOCI(AO+VcoQ}2M?lhkF@}U;BYW77ujZgW4e-2`XZtf!bDvJORSq_1Z z{PPp)R^?r1SsI3lb}Ik`cUPN<2Z^3RMOc@7v_=RcgvX|s6&8fRc4^~@b6L?7K=Yb<#02jb5rMLX7T5-;GhVd*$74y zG>CU{YTZ9oML?B}F)|vO0Br*IoM52EafA=MsK90vn4DAN0Ci5B0jpEWs(aXOWMnFT0KEC-zUCntbFm z{z(1Q^efNL%wBl(vBzKaYW>#!MmymCF8Rxk{N2hQo_i^mY5cX568}W9Qf%;P+QZxf zuOogJ==d~t%7DM`6-J?&}ykEV|=NnS5LHIo+<$)i!-T+p5otE&3d3*5?hA z|JofIcg%C-c8#yT%shAM^V$xR&pg-OspFddF?~M&&&@dBtIZl&# zHkfC-d4|n%t9dq?XQO$xndeh0+K=f+PD#q@YxQ|?LZ6W<`n+~c^NoC5pYBiU^ZB>w z^Vz5Lx%!+wuYXjZPyN!Qw)B2|M&7H>=YQ5b->1(TPwR8--THLR`-}fdLQ zJpYA0oi%-S{k%S}oA}x7`n>orP299I@+&6)Z%#=6BA?Kw(=x7c^L)Np<2U}Z zKA&nkF7KZ=Pq$Iy#qW$s`VB|pPnmMh{&!7xerHtPKYQ1RJg?ub&!UMJP5k*kF#Rz7 zy7nJ5K61a-`)tUx_Zymi<9@9t@`yg49oFacH?`g8zoE~OZ|Sq^D_ZXQ|7+r={k7d% zZp6e_Z_~K@R#VTnb^NQJ)bguKI-WH%Z#T^I;-~a|(Wd{ImVaue_Ivd&^u1%!FTTw5 z_YQqNW#;eVt4;e~GWD6~weKlhT{KVU9oi4)1D&sFnWGtX=0dC@$lcbfdW z^m)z1T@zn5&x^*@?<`jB~kM4w$Zbl#pf<9vRPwi7vM;N-gI z8!^v|U)1`pecixILElIIT+^@rhKUd9`;ny9@BB-%J|EPl`^zT%0d42`1Nyvf`nzVv z;l57mEB=Z;ZpVm_}^Sf%EUESKBi(~qnKB>=3nBz*58f@<1#0xm|>>x#LY0<;>ECx z5kFo!0u0;!@=1R6aokL2oz6B5vrg8#Gf**!?^Wu|r@v`X+2r$g~VZAnt zVM$o##Pnarj=?hz!(2y(Wh_XrVcQ4x$Bx&|Kl891_Jd)jJ2y4VK5xN5na=v{7+DYF zOlR26KhtbF`@oxdc-#7Au8_d^7Tnv-d$wisFh2|N$#h#MpU!SgXFZMhVIHR2F-p7m zVLJQ9g|c~U{W39C<{a?JJhs0Kvwp_; z&f=NP!xs$8SWF($gPM6mLFQpwHl6t`oG{(aA=_blwoU{k%(xvF>j;@T8Rq=j`kezB zW?$K1TTe?M%rxF?E7%{~u1&Lfg7r(kQI2VL4q1;)=aU1qWtoS4;gc8BSwAaanE7pc zY=03q^8*#Vbhc&T)Aq&I!@0Bd1mD@Q+kAZTW~DZb?bt9o!Z7QwILL6#xJ+60b1!b@ z=h%q@wjRzi$HP23u}BQdoZyFHxlJCXhr?kn5Bp>DIH3j!Gc9E5VOz}@F!Qi)ga@0y zDNv`gb*rSaPc`*mQf&SfRK_spk3S4Ef3PiEr}P2un1|zXcJ21^+dgnCO&BTju%9hx zfMNEt3I7;o9y?FW!tb6ZQZ{VI$$7p5w{4FlY#s{_%yZhL^Ia&Ahsew{)<+)9F#FtM^005VpM2*uwn!e< zY5OMW2F7%ZY(eQL-+6VKak0*DpbtPhuTBdeGTugiENqYU@VRrlrn8@RUHHyv(!R-> zhPHd{+VQeac7CLv4SxM$gV&PBgtedAF2lASE$h>Y7Sn&`aheodWnJ*Ybmp~Vm+{{1=MNhgle$q6^YiA#r__T5XIRF9fK9i3 zU>;N>>3mmHCo*|u`3|>?eXGtVVTp9xrgtL5u)?e#9u2|(dcr(xw+R!*u=LH8W&IFU zB%NW>d7H=11LF>eKA*fT{nvD*hYZ{NT7QGAkHA|)QyZVW!3#osvd@k3&(3*B-m?#^ z$IFl2N;#xMkP0)*JbU+S_wsK+r`e|R-;$(D9{`7b*#>EsanNlEGY{9r<{_VAnCT55 z3O0;P5+;r~yLU-hGhRQ8SIp18@g2jwK_|VooCd9*=}v32SJr9PezINA7D*S_a~i#} zc1~oik;&HYG;EbH+r-rR>8Qr$X#v17%sfs@qo0l_+oT-gI2U#^59fnF409|kI6Cf? z4K=keKk3;4+)U>UYTfLG!wr7eakes@b@FCet`Wmbmoc{b<0V~Xy3iyOW}Ike>p@iV zur7{>=@JepTuGmsnh5IJ2I{eW-UEv6UM2x2PKcBhuYe0 z{;+{_!3BfwGS5zvjF<4kF)%-GKvbso{*>ou&`6*2JUWI$HcVPTn{eMR+Nn0%1wX1pG3GlA*sKg2hICDzG&Ojlau&y}4+of99|C@V5Q=b*`i z*#}OVoj1oB+`~M)osLc~Kcik-h7L;{^{^~)^MlSal815Npie6T?NYw7^|L?BOWb6i z7$!^xaU6q``4pIe+|IHRZVBLfqv9#w0ZoO+3G5+@ZOhU$tw;HY{0Ot|!4*)-TO-aP^K&iOwpSK3fpMk-ms{D6^bJqxi-{|Yh?*|%8Slh}hs2o| zl7)1Qb;ltq>x{q6YAVbn#S@1nn=b%G zi1r$m7g!0j$9zt>ORC{}&QEau`C@&0ZBoqU4}bQv*FJ@OjGL*4W*>-$uz)7cJZME| z62o#swr3l*yqz=q9u$_Un7r4%)UHRkLD-7C*MT&)2jSfbx9njBtWP?=d)I^ACa(RJ z?)v3hft=<&`@+_2Txp)pGV7C&p)FniRLa=9l&Y@XPsujX^T-osI+osL3xCfq&b$)+AAXew?kHHS^oK zwRx8*&pOTUBtPdn7?=7%P*|^RA3Q-oj&bG(JrRVmai_7%TMxePB-6yj_q-kF9$8j~ zwdb|-3EEsUK078aexd!4Vk`D{{J?Z21d`t|L& z^KSAQ`<}yLzik{rxfs{+D8FKy?FQ$Q?}Ovf{x!-3F~7d^$Io%q=SLkL{1CpK?nB)# z$HVp~1oF=^HjepZE{V&;w{IahNL>3H7Fo^qm->NyFAbprKKY(EpthAf!{(>WfEVLZ zUsI#kKdC4b-e=#-3uNb$?_~TPTZP~=F8IpKxL6l?eoTie`K5kCubE%!!;_a+UsFqS z14d};b3(hi?%1Jm_SAG&-fMYXFV?L#-Ve&O+WI=%w`{TfmG&uqAqU^<$PvKhwYL|B zG*{yspU@9vwBu3gsqa~@a%+uCo#-IzwfSuue8)LveN6M>4B%pZ@(o@WF6euv8S>%v z*TN%<@x9YbO;p3`9}#k%fq=#L>>r!6?MYz~*W`*y0+lyfW z9&{=J8JoX;d``z*U3_QXv%DQI=QFr|0*|d7TkpXO*3X3tj!)YMeq&r3wq6dvk$~Gd)fLxY=q(2^2jGcVw?dxe~e3i!+V8*u`R;e zcG+nOv>$Hq-c!!yRX{~7&l@7=_LrHk#18>}F+SEuxrwc^UA~j?G-`#63t+pgLLlt> z;Cyj@osMmd>?hxI{rPL_llQIQ&}P1Mz8XbQwE4NZHb2uK&9w5#oB25(ct}{`_2p^C z`CjJ7>FU^qjLggT+J?Rt!i5fnzUSx1nC`ge9*xWTr%(u&UtfDe6BwS2-_hlCv0lby zJk5c=qxZ{O_+wt~k;!22wDqH4SEHdnte@%ypI&>79aJH_{HRZ6 z#Fl3iul@W^^EPV>R9XF}WA;7kvGO{@gje2n{yCqZ7x>ls1g;Ii_Qs20lK`+h;cYZ9 zUiNz%=sgjDWp(}=eh(s(#HG&^2=I>Y+1^(Ca=?tUJbuDkz;dK*#$hjMKn5Gv-f4cO zIpL1nU05Kmd@JEs%S(NsEuHMIEiW}<u=mE2+sC(emZG(@aty%BL_lQ`QG_&4)Q7(-_o8=(TQyv`Q~q;1*$F@^6r9`=s! zIoC2i2LRC^EMCTgcanqe2*2OK{Rxv-`MI>n;l0HUL_P3qsg_@4cg{^Eym-cI%qMgZJ ztdH}YfnP0&9~jw#W=^;0(&t_u`KJm2mg5SJ^NeVAHL&d`@a_&+8y}E z{L((E3b(bIv7?TA?%A{F4qSMz^T9cki`7V)^h2!2k|b#|S6z4RaL&hWqrSkh%qP+g z)|WYL8e^2Y*;l4<-rCRyfgO`(`qs7;;w+LRAJa6CphPf@S>&>91iCEw*uN&QB4I`d z+jgBs*X;_cPQd;Wp7^wvm+#)#@Iw#l>@tn>=lp1RY`)>=?z#&>rs*8qb@8IJQ>tJZ z`&>TPnS9a)jWSNMc+sS>2*-;bgtR_R8c8`X zn`ZMdD=+?17sfSvq3OZ}0+#Kw(?}#~Cv^IAb>!tv&x7~IShvjw`w{BbMhK7W-+dUG zbO>*l#`VS33Zl|LgCW~dUQT#@(0S&;U_Q6`HrOZkpe*x|W>7}7aw6+vI>&2Dpl^}%f2+T7T%gJWZw%pV&utuW1lKb=y^$MG`C zA+u$#K41_DJ>M}+<^bDG_xIm+Hw7S$LHozD?ani3kZGLPc7-m4G|l>L2ip)h0BySM z?#q`Kq>O>TkK0I;|ZY9gWC`3{3ND;!90qKA9wf0y5aLw435a;gF=U z&wH`aYx~W7(k}M;+75pG@X)f~2FuCCjSA$0dd}+&?{Svj!vO0det`G3eX;Ee_^16f zwCRJSue?}RjE#6sEBboAQUZ-KQ(7P4inVq)hn#L_)ypTz<|j}ez>6`(KhBFzyd+6k z8QaLU=Nd1rPM=zA#m<(F_hEbq(TU)4B2t6t^Z5rH{KsN5AJ-i9$x8BvX&ke&?|`#E z(%NzF{re+~YoDJ5?ziIoHp!!DKMp$6;M|85BW^J77H7+rwl-U*?r#Z>I1M8sp?#6T zqj$-^6!UXDSWMC=gmlH2E@N^UT*v*&_pbfl&)>L)G@FiGtQ;wNFGsm!TMRAbFcNZI6oh{2VEIK zip~Y=xrEieh=1LZQ}YvU7}|yzS;g*s$mG|0{wnlW&NyoMhV!S+gp|_!uCuRWt<&v% zsB>`J#chO7&I@#gW}%W|o+pHAx*0PPkPDOZ0TOClY(v)vJPk1yv}P4)oKwEz4QNKX z{f7ixgb~gq+JoiAr^|e2>pTN2;Xh)F4Y3^8rfGKwzr`x#RIZp@dG8gR+B7yV8exg4@G35twUVO)X>I?hS9DK)mK^J+8l+Rzr z`Hr)0M&^y15X3&J2I_#~xJaRHGtopI%6Ga(F7T=w`L;ve8R0rLa1Cfj;&mwPI7e`E z?Rfd+#+-A`xyEy_0Ebb-4p?LPjyEsYi93DHuZ0GjUf9OM(w43}-yXm^6DRB{X1Y#ifwO5Z{wdaVFRg^r?}P+lrqNME&<1)7t)L_pj}L|NdXW zzYid!v|Y#7iWWyvygB^l@M?GsH`j;|t!uTfH3ax&&qlCc(&{=RPj;<}jzj-0T-SFr z-`LUo-*+_s&5q`;?`VEuM>A6P;04!B`o>%vTpS|A{F(2Chm~#w z^Wc<;<2>&;Hymg60vpFm!Xf8D=K}N7{5ka9NUY5OZ^(*HYeZ5wCm+B_J`mzR*3VxX z*D&XVbOzVT^-$(|=;RBbzeq6K8?T41-Uz*ML5j%SaE=(G*1i7U7i8#clQ@qH%UTRM zr|^HDGYXm+cE)7Eop(E{l7V@RjE{hyVpiaDj_OE%lmSN{hZ5#h{@TLK`_LXz_P7sE7Hu2w1 z{nxmY|M13K7!AjzFr;ZNfdtnoX9vi%ipB}e7^}dt`vwn2ULMItmLvZ(vM=H|3Fo3S(l7!H zzZSZN+2J6$&K!4>^S+S%$MNg6CPDvqEkuYmbQ~cp>f56uZ;g&PF8@y+9tk1PJ@Tr< zBd<9;@~R^v%ZEpteIv+8JY+j<&f7w7L#_PvL#v@xr19S9B8*v?)rmYk7=L=O|L5_0 zH2&j9<4^xq{OLEwpMEI*2l4oKqVW$$;*Nt1eato-m$`d#qe|DM-K@Jp0@t!JYVs0x z2^Wpd8u<4b_#$pRJ8(O=TUVcHXa%!h3#~P94XESu+9x;Zwq7nC_u{7Gp^JM7;lsFz zN2FDp29~$HhRn4E2`xbM7DVE>|2-zNg69No+CF(T5+fTQX9ooi4E;cb=sEMCm)DpP z9a@bzpNKf0y#nFpM`CbzAp8+3af{;4xTJzr z^M&35Umh)C?Wp-^$bnTv|M#LWD#7yJA?pu1+AN)PJ01L&i}OzSskzuObhHb%i@E9I zgkb^+pbfZJF+ZTV&Kc(8?JA8oG!O|&^Y}{WgfoJF%(jZ(E@nqDa6!mi;A|uw_>UjV zEv8X$*z41u;oaA8Ctm1ZY6XuWLHrK_`pV~helHce8!+rXjVK^$k`%(xJkYRnlKkp*Q3aPCvq3Lbd z&*3%w8T;0xAKf&4?c4_W&mQgCF#UHoOMiId{GWb!({`nUHT^`SE!fZQH1cTwEy1hF zkGF4oSSjWDbW)D>^YFIK`g3SqKmXl%pxd7H=`#P$s`@(Cw~HMMw7Po!(YpCJ)OcNb zgCXSg^*B<``u_X#@Q7iHc7C4PaJlWKxCZ=e_n zqq)RuTEprsY|;&}(pZ;CL@@?$_^Gu)G-1ny!RJj*O_iMErXoB>0>OwE4s#L##V`N$%}_(r{(Hg)LI)ZL z_e}1%5W-H_?h6;v4TVs(VL9}!mZu}{Zh800&$PYw{$J|&{l+hcuRr`^(~J9V-VANK z3n%&-oynit50A4D?hDSlZ>~5mh8mm~Z-#LpP7CCdt!&3NpQQLI$vS0aP4-M{^-~6zX|zx-Q&pPrp~tJxp3jd zo8`}=efCK%_JJ4s!Rxw4wX=xZXp6jsO`x%(;k6oGMc2H`=Ce;*uZ`RKZ2_BZpTWAA z$EF9Lwk)3zDL4A>W!dN@OK@I!1?&Am!u9>tTK!);-(Ff9-J1Kc?DuDU`in+@}*(|Ij?!}>0z+ZXeskJSIBm&|~rGj-GQ!{`rZ;D1_|g3@o_>6yZTC~xo(zRnzdrtCHyG(%Z|-`sq2q6)$jZch z?!~U@@RI{8kQi0q)4EVm?Ij665lGuOM z*l2U^UbT;lD|PZkai!)xavDhohQng|3#t zYlXfu!E5DW-L-P9_8M7vvi1tCNaKN@f1rMh*)D{h{D~2|37Tsqu+R+FEcVAfc=O*p zxUw=k;a_igVE@Xgx@+aB+N*12U){AbR(GwurS@uEX{)c_w{f658^uxN0Ps?KnHh3{}ZXf&N2D|IT*x`fFUs})(b!`7iS zp{_^l8)&l+Uha`Cl8+4h7&aK5A6fkucbtCU4<4V#60RcrS-X~w^Xx_eLNyio+MKfEBw%Zu-sAN!3kJ`*^3|W&andK$4;SlZ4~$S12umzZVIk?6=>jA@w)6kjQ(Sr0r$Vj{uu1RBmdaC z_CM91Z~f}D?Il70H0&0k;HAALyYn{mR!PFZ{apmo%GKrfxjhy13@@fB&xK zE#G;;Oj!MMWX$Y>eC9p6&HebvzoBo1v-aze6W{M7``!IV7y8*h)A_f4n)Mz0tbwP^ z=)<)S*REfE`CHZhq2JWeVy!i0c zRxPnJpV9Y1b2oVZo424(ANXA@Z>adX8g5noi*@wjkL%*^t>d@vtBe1BUH<91`IxGU zpR0@i@-4=HtNFdv`>+0i&X0P}teYO^8@Hg(^(AiBC3qXuCLMNxnjEwf1QWz=5J-@C zAcw~N1QYiXY}_Vzag*T3H6aj}gkYQrHE|@=#cO7vc2xQt;mjD-tz}uTQ=@Su5 z5GRR1f_hE(3C4}WOR#h!I z+19mv=dRtm_qzAqx1Wh{T5d+;t@vgU$0RahGnK<9E}`E8;8-^`F2h7GO_7*n6mOfzgt?`+Md=(Lt_() zwzZ>Z*N$gQKK9LYx%ER{S!q~0_-m#jP823Vmh?GELv@@c)QGG7b6#0|w~Xt8>HdP2 zmHx2}PV9eS8mqS#TK|fcwbLYH{3_E-&vZ3fTfZs!P>}N}v)tVLZBtgOlLC$3F=@qPGA_ak7UV9&U;%He4q)5Ta-XCjfuO+)<9)f7 zl{{u@+6PR1gfq0+u@&of!sbIE3qy}GEzDYoRmiq&Ti2qbaVoc9$-25=gx>iErU~F` zvsi$Rw=zuukQ3j+Zofeo6ANZC=F2#>PLC`Vb^ip*{fW)~{wtZbp5$ z+S=hD7wZ@`WswThRFt~NwuQCmlH3^Vz1GIH*|D?%hIw+6dVOro~EuYqW=%4_LjP3U&9|=|y zM=Qkgk2Q_0$i?~k^V<4ktzIx`#B)H$md@=vcK#1dYiK0KsO#SCyG7?^4;n!d0carm z4>Ao)LD<{cxntL^+xOggoM`~bCLlG(O2@xfF|Db&T}IlqGfLHfFIGJv1wKE@iozil&xdyJ8W4b^CB4jw3d}wVFfJxZj%nFCbv z6`N0c%`S)km}$~~Z5d17@)wd1lL7dHtRocWyG-Mx2?SA&*t)Haj;0{?tz`M;xw(?SohEXU6YBppXT`?N1QD~3!Q zGikcCvQo|CHSOy99d;l?^Ry$C5=gys% zB_CITEjKn2Jl-T}00^!m0S27#?NS!Ak4$9q_!4N>dzdCGsLRxWD*rDn%T!*#ndaty zCut2>$}Ny2!Sr!Gr}eS>M0RQBv!<-{TDb4FZGUL;>FBl6uSgmSvcp^<5Sp)f^~p#$ zn()`XvVQ4r*nHA5*EkgVCet)%ej6J8(v~&wMlk%YO+zj&D8|-;PmZ&!019V?lf6}p ztIWc#p&*2vy~g0mo=8y?-sk5dX(3;2>DDwU%B2J$-~I}w5p;=HpzU3tsXRNuG_1we zoqJxkzxz<{;7>5ErE}Nbd-uOQ+CMyYd~*8H7bLBt^R~O(1BZL!!y^-?r-r%N+q!l8 z?Jv9M{zK8eV-HW9o_+_@TDI-pd-s6{5B2mM!4>(aYzm{p3LRXf=1=HGF*;*#9|L@z zY2I)Z-2PDW5ns`79p0bVG-NmP-SAbDCKIpA+wkX_R+(5HZJIz=_(9tSpweDPBn?9o8YJXk%dn)$ z;u4r;)Z?ZNwoE`}`lLzY00|33xoIg&3{=47JUp&xQdH70{r|)(Yscm|bCRYl7%*zi z*nCVDfN5%4lKKb~x+J7*Z(y3tJSizenC&}vzQd~z-Q$2Ul%LkJ0;VFRgP#1NmKB_& z`~tD*&W}kxfpLLU7XNKc!}vv*!isO%@_DAo#l`_1psD{w@-;{pf{I*U(=?$!Xk4yu z*s?MdzG`g#E6FEwfK<+MQ}cJ3CS!%92Vv^A+i$;pyJx6Fceoz7c1s${a_Kl)Tz6_d zR)};$rs;0|qo;yDM(*_F3&lz)m8c|~9{rs!mrbe(Rnk3~LeG3Pn@eR=PER_wpczXA zeO8u>>0CB{$?3^f67w3$6w1p>h&d=)Oy=?uv`P5e;}TD$=c}2y#Qc0IeHpE5tdz)S z(&&Lk$u(DKpgiP?(4YS|A08|HQd*6yT6Gz?ls)kal5~T zIPNvv*KxZaK^*rQ?(4YSk0OqH4fl22?#B?vy@vZbZuc7ExYuxB$L)R`aolUTuj6)~ zLmc-S?(4YS-$oqw8t&`3-A^Endkyz>-0puw9QPXT>$u%dB940v_jTOv?;wtQ4fl22 z?xzsPy@vb$qwGH5+@`X&fnR%O5@*sx5{N?*P!h@zLLwl5>7qMS(M?xK0uH2zBrIl^ zWknyBCb|ht^r4Gxy6C2hWr3lKZo240|Bn1T-te+7`|c-xC%S(>NB7F|jAzCZoLEYK zTrA~F#ZvkcVyRe4m%kxpOZif9x=(MD7f);{KdrYjvQ9>scgVh$Rl58@9n0g9$U(nily`y z#8SRgETz9F^^Tn5*Rqz}uQ)yDnw*Qg2w=-TOvlek&z%|NO2tyXWaeFxuO{nCW>1sz zm3=Jb%kAoJ$)rN5c!r$kJ#ws6ETzkRv1LtPDo)paNi5|{#Zr2&jHPU;SW16c#!|ji zETz99mhz=yDg9Nkl%MY9hsikIkIkx3uCso>lw42!H93cGvdT`ct=#6zK2G;Dr7yjX za-GwEsK}PmUzg*he0gkr*}IpusW83$K{REv}Nzh zn!fDySLGbi{oAreTC?PK*~e1)JF=I4{X02E#(ruk{axvk@}=|xvMNsZ@5yaazEmuw zzb}^ZrQ&oi>*ycIZBo9>=gU5p(i?J{l%JM-T*tE4Ka|^~%;n{}+$rx3^pNz6V=4V3 z$)xl?xlL|2-<9(f$7#v+&_9-3%9o0z^iRZ6zEmuwe=3$TcaY;`AEzbv!I$}BxlR8} z@-^kU$=;WWQ-3SBe=f(qCf7ms{$lBueVpEwNG|0|#ZvkgVkuvGec8uS`j=9#%l-de zZj-$&_NC(V_BZ7AujCjha~F9GWgkoFU(0P$zEmuwe} zKg!3E+-Bb;AAd4dH_G*peJrK_B>SIb9@+cpSV~VVq>gkEGzr8#J=qPbf4ZX70Wo5+w?ZMO-gSU%ifl~pN^$;d21{Zio(@|eo;zGQKl=j3)NUn-W;2Z*J7saQ(y6ifM1aXKC-w@HN) zWxt_3=Sjs<=0?&ZmA>VQEfq@XrsPtwl)U|?@}<%D+f@WUn76JyNlhS(e+S)NJXI3Z?XeB$tY% z%!4JDQgbAi3Z?Y9l1s%><~+%z(tjAimI|eGM=~i_$~;7JDYZaysZdH^D4A3&WiFCj zN*yY>R4AqYNph)J$~;VRDOHhNDwNU>ms~2AGXE^Ol=_S0QlXT7gyd4Ol=)Z5rPPs< zONCPU-z1lcrA$|HDRq?OQu05tDE(;3rD7@b7|Es7v64%LQu=X{OT|*=@sdla6C{@k zrSxverD7@bM9HPp-zAp{rSy{|mx`s#lO>l@r${apO6jLcE)`3er%5g)Z$#OA3m04V zp_J}Rk5nvWULrkG>Qb3QDwNVMlT6CITyFCum%X||j*;7J*@sg4m13z-@>urz>C%6d z^h&uhj#Hl@$Mwi<>HbVPRw|Uz&yt?B28pHAVCj`|r9vq+L@eb>g;Hv$Sjv?OrP6nK zGo@UqP%3?+UsKAJO5X%d4HHX+Qm$0`kGPvsZdxOyMo1>5mX_P4T&Yk>EhCn4rNXqN zUrC>t_R4XlR4AqLGL~|sLMb&$EaggtQfgVTlq(fVsnKF7S1OcJW5iOfR4Ap!iltns zP)aQ)mU5*+DYd*<%9RSG(szY1rCg~{N{tgsxl*B&8ZVY|r9vq+K`iA;g;Ht-v6L$n zN~smaQm&L*Np4HWtIA$VO_D4vx!pWl9!n{8jy#r9;c7CTEVoO!QlXTZB9?NcLMeHR zCuK^xQlXSuT`U#K@#eKMpOk*C_G$mhs=^wiCs&_fL}X z$#UB%Vk!Sr@o8dDEal5D#_Tg>|DCu`ZvR32qxdJW{9;M}RjlOuCZ?m6-$}VN-m`$$)$YxC8ytC&Q1PV8ed8uAbTlYZr9~sUh>mgO1_WT zO)T$D?n~LbOMNEaYn0@+;qv{`4kb8Y?wGwZi%;Q?-K5U&2tyX3q_hIY&npZ=qALZ}hD0w4Gyvdc^sF}^g zIs*+h9nxwT^2(XWHM*BJX!9)OChgM}t$EcxwiY9g>5#Va$c^)nN2B06ZH*8k`n55b-=R&qPCK-IG5Q0#LML=Y+hZ}G>7zfQ1KL~;xqb<9e|fk@ zt8sAYQslvSxQ|Zg@@2@)3CJVbql=d#Pv|;rtcZT=3g#=peYDpFSFc1K(CR8UTm`vD zo0DL>2f4l)+@Sr*?7tehI|Vkbfpr58X|+0Bz81MT6|P)IuLT>|!~Qz3bpvdz2Y1~F z2XvLTHb>rj6LNP8*tr?jwuBqBPusU3Po^O+-3l99!*x2^8P4B<+~1Wst#*UW8giYk z(k7kI$?oV6?qvTSuyq%l&=GC#iM)6>a)<7r6FPmpxw-9QHh1}Z!C+swmyY&>-TRR1 zHrz+6>2UY`$gTZhJ%nxAqvM%oGbldL+^K{PXlEAkt_P93v`71NLMOES5c;Dsj@KTB z)j@DKog55zJ%Zes1E;TZr&}`LZ0@5+n>+cL5l&z0PPbrz+1%&r&7F!4gA0$t#-HK* z6R>{-+(#!z!qJn+!{gxc)37=bEVQ@riSHfm5a+j{rA>H*d@`!fngzlxo9?aMC3i|zP;L5A8a~)iK z4YqE8^RL6+EwK9r^BU~E37hxBaSU4_TzL!DAB1yn!x7z0yALsc2f6Vu+)b-TVC`Mx z!J}}Mb{>QC?;+Rg%xUj&xa)o75$)05lgKL{Ah(}_RRh+ahFv1_62g|8~RK3)B0C%>09LLYdE1jy8Aoi);Gv=eXvivbn-3o^mXBM z^S(2i`}FnUbhE!VoBPra&7E?7fD<~V%ReGFe?*?XPMmJ~PiAxP{M6hjlTKeVPPg!9 zv$?PR+}x??7r6Kf9Me6t`z!LUUy-Z!O_~E;Wtw}7_Gpzu9%Ybg1K{o~><@%XZE!Rg zF0{kW5V%eUwAq2&9Ev=oy`^FKXL4{pqhMzM>@ExEI$>uV91nu^@o;%C?9wqEO+cQ$ z?vrlb3UGcXtX6@`8mvu(wWVNxRXC!fNw6~vxw{(NNBfiE?(}sY*@7vsmcHI2o4GpN ze62_v(uMT3BH6SxkoV9IonHodxF+%%?XLxwMk3b>a98>ol58Peqm6Zu8|iCGve_HK z!LqQkCG#a6WxaNj7&I=Cr;o^Yk^QblVONXp7G4$c-J@KMqcI zg^lsByF1)RJA1&r6Oe2B!upD^X~PNa&w-6B&O%sCgssD2eO1{1 z3*2b=2)KI^a`jhOTMdqngnMbth11u%(#@yU6xcfoxksDFz=nZ5I1W~;!(lfZ(bg%n zypGk}PK8Tr!p>>1J{3+*hhy3}3l7&pZdKv>+Hg!;>%jJ6BBR z+6?v|hWlE61n%CP`J-@t3s^k{d$d!BjV+OfPr`k)@f7TAg()6KuSL+@oVUzcX_4UFNh;r@s?RH|;&-E*&=D(yqwE58(!_eF_J=A$Pxm zo!w#kYdBYegKywE?R*DU_h9}5?C%MOKf;B*nEwPvw3FGidER|{BadlkAK1zwk7>ID z?%5Z4MC<#(em~>^tqp?H-_@m?GZ?N+r!}~1e>hkQj_7C@?94!(42QLuu(=HTX*Umd z&tg6rt{ecXF>vlcIHaqzu^jS38M(JS+)KxFaW?WmN8X^FajGHSUZ91?+jPzgx0!|`@10bXl++m{^6tM zwUw_$Y} z9MctApN_mid;7zI$Kz+h<Ygh1{g;bV#SaCv9%?(ceP{ zw0;h9{Sf2=OT~(1Y1=&I1G;Iq{9C5kh_P&eRM)s79%(Rf;@LV?9&xm9f7<- zyL9^d(sZ-`hP-?s?6_Qyj_Jxp$koxvwToes?xtf}eu>$fKR5>c6}t7lcL^PyfIPYc z{Sj?k3hUj-ecCz^E?kD(rG45w33>YW9MUbIYqWkc@~$h8+a8>|5{}M-wX5KSF4M-@ z$a`srF7}{5rbAjk2mQv?T#xRdJzBel>s8So(!pZbxfZ#50i4jrh0L!*t}cet-=(LU zpy|n%W z{Q&2utp{QKDdY*Qo`$<0V*U)QKMaS@az5I98SZ)vx%~=UqxDzeVjX$%8mu0N%^236 zfIYgK_TNTsK8akt3rDm?TTdbPTREN3#ix-c4bJxrY<>s_wD&Pwc@}v@C$#kmayR1f zpThcc^yhF)2ek7KB%(hwh~ly7Urq zy$}5nozSITYn-nitX_vBx2-|jQ)I#+!_M+(8f^Md<%I@*J(G8y!Hg^(FF%F4NA&oR9YD(pTt@P2_#F z+61<~My_uPN3^*aT>J)kK!>!kIr74{$lWdAkWRLQOWz?6r@>u)u(v&2{2n%Tg3TY` zco*3C5w>@QeLC8M{t3ChC!GHoc4&_d>D({K!@bcT(lMR>{j_vT_Ca2wt^MGl$~N4-K?MXm-T zPfmyPLty<3*rgLXHxzkvKJp$~T?m&nH)x->#xs8i{kaKn@-Q5<{0MBVfLwnJRx83<9j?;eQ*do1jTxuzClMXf0tr1-VYw>6o?* z&i5ty_0?hTYdE1p+Fk>>`yFy~O*o-zwB3i?n2J26duaQ6uD2F);|DmPW4f?5^5{q8 z5$*mA`|BWgeueDN$9!+`h1366FWsEA;Dk2T zhAS5GfL1%gMge(12ei2p``1IB+nMvP52yb>Sh_{Dz6+defIOs~4dKGB%;|uRH)6gU z=ie9(=!n*LM{bzNtF%XJCC*QG)7B>FS9>70H-%kV-yF{GiQJ{TX|)B9--|h2p^Yt( z_tDl?aQEKm59svohNqifMDEhwG&r{}a&2qobWE%LkcZoIemb_`qRsgahU1yAI~Vq5 zaefD`8~|Gj;I0GVkgn3kLgZQ*d3-1ww)`i!I2*Zt7;`#09Ci;v?i~S_4u*rj!PXqu zJPKBGVfPrgMyq3Ca~|@9j_Key4YvGi+=MS%vYy<+B^=qaW8Y)x(_ZNk6gbWZqPPeJ^{J)Aabi4_UVYW zA3|O_kvSdF#=|`R@5mjxm-buvNyrnrP8*Nlc=Kc)PlvSoD01f%2?bGJz$hD`ChqV7RTsZ@ILMOEK4D#}s$OAh4|8LUG zc^0{S7LR`p?m8PbpNDI-{Q_J)2YE#2&xQ3Dk$bd5t19wqXw6 zExNQAx%D#gUOIRMw$JDBukm==qU{TitJjeyv`tqozu#bW9g}kQ*PNzlS#Igw{Vn?p}?4i;n4tE?&d@ zQ}hS4`V7{uMIO=~?S772U5DIEV24&;z%d=s*7fN3zeFC=&R4K;1Lyl1_G#@KSi2E< zOn1}4x5!n1-2D!&&{iLu(E9gq`6l!ybWDdoATQmF-1`xZX!|F)cnfmlXE>zQFL2>j zr(H?Exj{cz4PbajxgLww?1$3B&-5Sq_uG2A{yA!!; zL%&U%bVz%2*IitXc4^g)c4+M(*rjbcpldBJh2#B4&>ztWozUi^$o1jqHy(p6 zx|??CnD*$dI{JOup#wUkLt1;B=R@0cOb4_Yf%DOxK)*(pX=`cZ)|1HNJY0Pmc1FW} z&%oArIR6jkbeVSP9@?W5I;4xwb3NLpwFz90Hfigh==bOv?bEpzkcV`Mj_H6_D`0;0 zBKmdOqCGmKwH48CzJz|0_Gz2$qkY=$MSnzxw7C-IGhRlnR)%|NjqZ8{xkY!=0iDn> zU3``Ebz#0LZO{oF(9UbgKz~FBv^A0Qy@}kTyJ>S( zmrXa7<4z0b5JfU6M zGtl2hYpe5o-b24n$F#l%^3warJvySzHIZ8%AP=U(y|l3wTx=kZ=^AaXjlAnap&o(^cBq z5PAM{9#4C;wGr~9mDAOP^KFd0_yug3?5E95VE;?xK5cykt4)#j(KcQC8hJ=pzJc}4 zI6rOC*0;zbx=uTrqu=}vxw8cv()O0j`?wx$e9!f^LY}^#Lb|zhOvkkUBXYZl{=!eN zPuFOD8uHT5oR3c5qaod_t(pG<8{5DU?a|J!$P-#qZO!AIZPDLNC$zjrGV<+^_s{`d z$RgLaN1nb89_9yq6AXs~^|f33;8?c81OV z%;_2((Oo&@)-LF;(rQ;YC+}~OZZ2J+jopwp=zuPDqTk*fd7X~w!a(F+33(5l(E1>r z&mPDPRp=}MhvoG?94(Kj< z@5FR7_Cv0Q!2#V%8#Z!lIP!?D)7Et4l@Z82T3Z^{_D5c)9lE>>a(f2ynD%GF_DJN` zEZEG$KCMQ<`T;zi_UN8vktei1n)4lq{wf{O<{0E|8F_kE)4 zbWC@z#Q7H@*H@+wg(KQM46b$|*A9n^tH3^8r}ZO{dlT9JH@LhiY|*`RKo=*m-$j3& z4(QTq$c>|r_tFXNOhz6bgWR0L{$t@<%g4dCf!wF-v~@gkV|C=giLhD&j!uR{Iyn`t zu8CYb9j;7;oiku#EjT4>&2L|)tgc}Rz}eld^V5P39U%jWY=Zd=&zguCgGj%jZoa%VfP zPsg-11bMJMa$_iL>;P*TT%*-+xN0E}>HLncyEO8M)|P=wJ0Z76!U?S{3)gl=?$E|A za7+huFdF^FuIwKJ2ej&fyLU&fO@#FloU8^nXm2uH-UGRs0{7B7ZS0BMr+qr6`)Jp| z@!nqOx7UQ7y=9A6GIoJpeXvc)@>ByZe;mZE>wy-w?HnxMc znasCmPA5CT$t>jV9? zXAbPlf^&1>nD%J*0OVcsc>IBIFKx|+d**Y#gW#eA8wbNN9nhsiINv`k}i2-v69k+5Dt9?(@fJ^^{*&z%1x`Y-fpaQ+DT zOt}14*k25H9|=bn!Oq`c?GjjXVUO;n^-Gbfqma9FnKmv%9@7zBI-31G$h(iBujYKm z!pZe;gVqA}ABWtz4=$eo$8<04-jCesMy`i&L0KAG!1 z$N5g-{QrQBQ(>PDX#IKSry;jqgmn+rUV?jQy%#Q=jy#|PI(nJ&oq^nVg~!t#oj((K zLVL9JD*Dw~$RoN!+pi%{=$I~_jehfW29Q46;+W8)~E=3;E5pDc{ym%RM{YM^8dq45`%aL0@GpEB}VCM?tUfWj9 z=b7@Au-gG^SJD098XXN_e-CnV6kNI%4wr=!+FA|{uj70=Y+ny+6JYHISYHv2Xoog$ zWWE~mo&b(${U+F(jJ!$*Q{b+fk!!2NAsy1iTaa68Ag|F0-E}MHUlX}cYg1wEHs-WT zYil9zqkXz^JNliqnbYPvaODoyIIi=qhdOf_|-zJfL0L-W7R5$F%)8`u*LI_tN_AaPbMQN7ra;HuA#L%;_4f zAB^052Dv^D)}Dop`EU;%90Hdk<_q9n+FQu{IpoRNaG@7=&x6&=u)mo7bWDe|a{=IN1LlxxFG>`2p5ff)m=O?H@Vc%E%)+pv|9NJp*|U zt*s90S>z7w(g~f={u=1F+t9DC2}g89o9)Q`smN=zvld+FKyI!JtA22@A>5#YP2isX zTyIlY%fa^MaGefmV*qk(3*=Qgp|wur{+7tQ>4Z*by@=cyi2j(4X?GfOYY=je4(Nc+ z4MuKljs6Pl(+Qo>_7L`OgZ_vPX>%xYV_W1kI<{b6pat7?LhTLBa_fBU2`EYRx9MiqDc_DJwK&~!< z?bYFkj%oc;cba74O+GXeu>4+{)MIKy^JfcI|SPOY_1&^oIm9V}x=cirT zpkvyk&2`YPUyI|d0@tT|Y4=v-_Ik*pJ78mdx(0`|e<$bL0J(V=9MLgtZHU~y2YG%Y zIJ_73Y4d*A*qC_;hqUn^Tr!ax55WyOq05^f_a0_W8;`){O_4`*gAN`=?rerUehgNd z!$}?X=;#T!xCQ&^fKHx5UfvS9{WKiY;j?hK6>{x)xVs3OFTjOqu=N&fZ3Fx7!p636 zM0>RT9`f9F$m5UTuI*v{W7wsgPhfoq+Ro#6Oe zxR18lrZvBB%I%8W?hiNUcp2C!ArEx+?+IJ0v41bvU6bCM`BWai5A3f6Yx}~<+OSW1 z>%jVc$ejXnI$jqp*vPdF;FykRdpdGsL*x;yZv172G`&c8YL* z7VJ)g{g$_ZO9vn~w}aJz^!9K!t#*XVW#raQaBeoN?F@UgOXm(k9_)&|MyuW7(!o5Q z4(PCi+?s=2-wV#o<$U|XeYC$H?9M|j|HxqTk#De zEVx0N2f+3MAVgJu?m9~y#|6h=6N5T0cVC!hur=4S9{jbP_W8r{~j)MzF zBKJ;&)!*RcB)Cc&r^9_Na_tP*I|`2I{L!#~CUT$l&Vu!0kb7q{Z}}YN$09e+g*`f< z)p4A^io8O*=fQonxfphiN56hPoX`BOh}JHKtrL+epE(`V z*58pwmoTUOOX1Q<$nDGFg!Zn0D<^aQE8zz1(dAQk{8h-~mV03PROA62(dugC=4r?+ zI-q@8_mIcepua|2*Yfz&IX_*a!|Rxzf!w{G$J6EwuyH1GkM?QpM&$XkkXy7%s{nZ) z9nsF&==X0z-k_bEVf!59<}Gk9t!{;_bCJ8Z!F4*O%_@(-9eF_8bpAZ#9$ldWx|fdV z!eaC%bd}cb!2Ifb4es5yuTNs-=qWDrnQTZyL5#P=w3RZ z3m5Zz@5KB*?b10Pc|<$3x(odgZP3Og=(lK(cIZCZqf3{fKcH)LOy@5{uI|QqF0IoI z+N7<^(Qnf=I;M>)kh}L_z8>1AwJVWFbcIgnnAYya@x`mqZ_oj4(fJn@(t-E?tZMn6A^t{g|(C9deiMp#wU1J&&gyT7@{im)2?X z2K1YB4{g)hjmSN^LI-qAN3<27KcPcfdjRWq-GtnrJ=&)GXqPVCjDDZ4(IK6`1$j)n zw0aQh#k5WrZ$-aJ2ed=yZ$lo?E*;YiT6+ld7jH+uK?k%&=kGx7(iJ+Od+C@i)X=XU z#{5-Ur`4UvP1>eyx=wp^*InojXpfHQK02Z8yV0*bg7xdPN0;tFu0M*rL7Q~(UgQql zLwj`YKAsOvhZ@(|65L5H+O>yM(}p+bG$Iu_s zJ+yif>uGi5I$fbnI;KO~ejNSoQ@nn(PZys+9?=1v(D^5kYfs~Nmp14IZPBHt(C^S8 z?a^INBM)egj_E#He+KK7pFzJxN3=^9o<;7{J{{6pggl`uwDByj2kp?-bLbE0kk%sf z8~;FV(pB1_)$_r}gKsUhW01M^|W@ZqP1WdJ+9TU8nVbV7}r@ z$YZ)rtLJ(DdXXD+m9}X0GIED5(;gks0d2m5{)q0O6Iy!}x%N-2U!hGprd`^44gCRK zqhnfs9l3e|^L5iY-A7xr{Ra9yx=u%Q;Z5ZFiz9M>}-+L-hM}M8~xG5pwNS%-=(swDvJ_o379<-Jk>7`UL$6 zU89ZHc>bRvcj+n}(Yeo%tJl%*&<5R0TeSH(`W?E5_Gm3Z9?%s!rej*Yf%U8}(67@W zZPLb<$ZguEV_N?Tx&J2S^XZVzeT_V!9a@Xg-%A^``3?Flx`%e?{I|$G+NA@!K}U4y zJM^o!uwF=;w9$v$p{uk{tM8GAbeWFnURrw_^P4}Q-=ceHkIw&yJf^#8;~gB|N87ah z6Z$>6P6xE{GxCV8(h048L9V@v`OCCPN3>0wzoOrz1KOu`)zN%iGNe7)d=K+$8RY7H z*rRp2kG5z#i++c$(;jWKArI&(9nraV4eS=;PD?~{tE5U4LYQ)PV^^qjn+QG@%ljI2Hj0tbV56H zX%PB-I;2C|7>qooeOi5t^|T?#b=swUS`9^Re}aCOcIku;=#qy1hz{w5?pg}D_9^D` zXoFV6kXv+_cIb%qXmdFFL%N4npJD#|2;>Is(l*_oUD{e2{XQMi5#6;6a_w`TKW))! zB#);ZI-z4)PjGxOkA8~|Xot>^LhjMsbU-I`M3A8UJ-STWbVR#!p$q*!?bG^qn6I!3b2_5+KIG;^2xSP3E*u8^e+3ry|#v=KOR- z7uG@^ErYyH`=jZ#k%wbpcOBSU4$c)|e|gxWL%Ko7w7D+&T^;>3IvfX^>miTE!yz3` zfD7v*4_1JKmRE$kHekLI+(U;e!^Vcly)L*$o0DK?Bjn~(xV$mvqZ_oj7IND}ZWZ9d zCUCSa+)Fzfz}}|F^^MrS8EhBf?#wr)6vb$cSCO70*AD^ z6*hK9u5RP;v~@dNEFpLAfFnAp!S)`={rlm{o^bR4T-Xb?AB1~om(K0Y`5!{=($2$h zZXeG72<+3*qp-0r^7t`0q_t<@ct7Mu1ozmmM{Cnz_j%+EI;KnebN+uar>z&@(hTGQ zU8k*=kUKMxhp)nwS+M;Y=cCo@obLe6_ZDm%2s>}X0d2nnn`Pt)9nk7Mzd zdGH+^(bo5HWdU;a1N#@k=FhNN1c$%CJ#^H*P4nwV@1Z*0j%q1_LW zn>QdgK8Nia*-yuG_%(9lCieHieY8c}HzN zf%CV+VFz5i12+4?b=vL^mutv_9IW37y93~WwmM<+F68<^IHD7}d^d767v`&9zPaVkHHD;((X9+*O6N* z!QGGZ_%7Id0*>h#?My=MKgs^daOEj_3f%QH>=K_o%P{fTHk>A^T@T0;FwNm`=301W8?{)(C!P&P2}2(a6I2=sr52-8ay0PeZ@Zi~E!j_Izq zk;mIHr`;W3;~nJ6f*W)|`|lzTc0yi$4>op(yWfYSJz?(y*tg-Z!Q*GZ{)hBT*!l?e zX2I%X=Cn^owD}2g>j3ok(lOorDRNatUiggj(S5W%8+q+>k zbT=IxhJO7kR~&v2dgkAO?xAUFQXoc8_(+utG&UAT`9j)E)S@%W?R z25r$+A99-xXqVQ$NAA-Ot&YKby|i^KT>b(5)^S{q_PgQgkIYYm^`GE~uF`>ryys`+ z`swWd1vbur{g%&z!(Wm6bW!zdeqDDi=X@DBqV+7@gS@K^RyV+UJM7X`THVOJ1Gzme)~l@ruCPY z=aG9a!^SB3E!bTaHs6J<(Qx!W+%*O^8gPSFAH%h=obOAxcRASYgZq|;weMk1ha=h; z2m3!Dk6Qi_cE%&Oe}c6Ma7b5Z{b%Gctu(XwdDwl1Qh6C2xW$CbWiq}}>T0QUOW(<} zvcZncv9&h#3lE<+W6JbJ^XJZapQ`+}d?RzV8h4x%_Nc-^i z_V$i!M;8BjpHjAFHs?`iE?IAkjMtP}M=I@0*E>MQ>DIR`*2_)%59{u{X#Rp(a@;*CXdON=E5*dQ!&ENIl1MZQe)k-_LWi z`E#A=3ubLHZ|2U2O?P&kJ#Ue-Xn~w=hw9g%_Q&(0#`$w+Et!9!j8~H~q|z;&KRNBc znSbr6GW}@PZ?u}1UVORy_*3TMI*!aaNajoL$B8mNS?V;YbW7K<{+D%{mpMKCHP?{o z2djRA)wh|BYFH(~rxCWSnl= zCU_idem*QZ+?h3ba(Vi~^5oxsYBWDF^z}uB)B1 zWZg+JUPo#@sn)t1$~fJoZuGycJL{1DeN}ty{WA9Q`}J2jN3}aj?bAMp>srIj=6tTq z+q%DJ$oOojD%VQyZ?rzvYkl4?ICS2k*>h)2o;z!9dS?x}Zv$25K(+tC=5)&Dyzy`5 z{Zhu?OZ_C(x<75_qW|~T@ptnVn%8b4xptjv7vfgGg-dbuqsn&YC$oRilulbqvul3{~vHbl7jk%sL^W|m2^z-*t z8Q(2+pHyqTM`Zk8thf3ah2LJ#BmZqdb7>RvoVR4XaWd|bT2-pG-kLH_w?Dd`3l}X& zKOUQlZIXVt?5!TmjBPKZAMP9c=HtcZdalfum-*8Bce;#ysmrBW>)j{gbo-K5L$boXNkR$NH`Fa7LQV z`8`>ubv-VTagWrsQmym2MaJp&N9Qr)U*|F0+;wBQ{*F36JGOn>^!l%nU2e(q9oJLm zFIjJxj7Le0k!r2Cf{g#;dh(Igdca!?djHFUR^DvR=pIMmaaro%|Brd`ggr@h zPEu~$B>8+FV>ZvJN9JhFdzXywl?tWO?LVEbJWn)Qy+r~GKF~^wAy}EeG zyu)O?bZV(|`;YUkJ+(FO1l2h~o!mB|d5pt(OTU@-AQ{hC&Af79TNAIZI@ed#w)NAA6V9voORmFs8LuW~NVT2^3NlW& z-+%wt`uvcuf34|<|LeOxc@n;$ZESYi^qVGr>t~NOoAbE-lJ(A#@%d60NwwCyQpV}_ zN9#48be62R?SArV|lp|HS;C&-b$qm_B3H ztV5((p6zEfpHe3_|2$is?d7R|Nb@;g{*j*>+Q!MxC`0-U=qEo|O0C+ysyyHKAKEcA zeV#98dotM#> zUhUc6p4kAN*__syVLdg@Y!0eiKfP{O%lLMwyQEs@_X+dX&jYP}>*H|xoC9aio4qK# zZsv`djWcGH*;u|fUfQPaYaf>z*xpZmU|dSRJf=T+=iA52Pu*kMvmIly*|ss+jzQzI z!}wq4%5wE;nQWYqpWtN+#+&I*6)uzKB-y9ux4n#al`2WK&TqPm({0Wld>z3{77NoC z4CLpbY`d}kl#Ci=s>wsLqqBpvvepXOF>-t|-jqM(`yiQ5mwme4?J~YsDwJxi_n3^+ z&Hsa+lV(g`h;^o=>uj&q83z%NzU8w+oAY>Fw_E1b<(BmRT`S|8rEZgI zt$VMG(=GlF>;BKzH-2*h)*d^^3GAzm&!lItR(h|;H@^zX_2v4xE0%mdEFLB{JG!a`LsUn z7cAOu;p_va&sa2j{=D?shw{?X{h3Udk$!eEKaV&t^mPL0LUJXt^QTVLJ?&+_7p$M*du_bE(n&<(s3|GyT@f>K*xPSNnLZ zrj*xZHix~keojW|$5TVbA4`2E)jGd#Wt?s~KJT_Zj$7w9Yu-#bMLE4uYS<`sdv^Gs z=4*$;TQBbiT*tg>$vV5qc!t!0Qmu7PlyP$%ejguh@jpLqcpdhiKI7m6@pwIn$7>@s z?9{A!Dmz5}8!=?XK?AabvV+=(^vkyo8{4tm@NDO*UD-jM@{x2%zm+nFsc;puxlSbO zweI%^GH&Zps=rk0d@LEK+upq2$;N+tKC8?s*- zz=~ZR%Xf^_hW1}-1Fd6d=fEM^j`Y)@)E;ItJ78 z8Q&}QfK==Lyei{#Ydwy?zdwi0J8bs6nRC;7Vw|0sk}*b28K{Ommr-tqd|r00knP_& zctmH;$aeN0(69fL&h&@kn=X0YUHL|y6v&*FG`jgFcry@Cz*4L%aWZZF${9Gf|I?t74oNlf2 z9K+|4-<;=WqgQ)&Q8jreCqO&XG2uHVS! zhi7MIz@W}-XTQnvBd2`bOdr){v*%{A6J$MiikU8}99h3h_UYq!qKq$)@}*kmcZ-bE zt-$9shp%h?{`|I^HFxg(Kg~){&Dud;Z&*ue07{LxD5D&?iv32WFQ>Op%61NHp3I8b zk=c!#XCsfRVK&!M*UGh!QF=b3WjsY{O{v!T>>=ZH+kl_9m4E;IZCgSijNzM&`2F4*6=(k?G8?kdbHOOj{l`fSm|n6~ z&L=H2+*m{!}CG>nAT_4QXGt--z9E+YKHxHaoF% z<$;5i9W38Jjm{3z$D}VaWX5LOGi~X&pjvKtzY%RqXS3OU1GB>h4H(?fk&_SK!6ULA zTEA?2=PC!vm%+}F{Rb~A{qmjHs%08*fD!gw*8(=c4*uC z>HSPMbE?_g*W~`{GD@$CoCc!B|9_;t37lM2 zmH7YeeQUkit9q|qs+V*+Yj+m15t0f?NWzjdAwbwnhorMWNSZ8!O$iWIQ6i$EqC`PO zVIYDcqDWN0pa@YA8AU_}XAotK4k{|j?|a^oP8wV1KmXUCQ}5K$@0`1zd$y}UT$~wlV98n1v8i21dnDG5x@Gk>j1!BJE+!OrF*tIxp#{=(N zH-r9m@|N`**Ggl;JahCnR4^|u2wr!DZ+3;ZeDGP~=ZGU!1ef2$j9u`nohmQknN9+s z+;i!Rj-BzUSz{dEvQ5)BDY#v2Hkt@*zU`&!EZenf2$nP5S^kKGmF2%EUGQHS?K#dN z|K$$;m+8y@ByBG>p_J&*{zCIOJLxBaS@w6zdP3tMDEKbQAMfu!4SqlH z6(Fvk%)Md#SZ9XyQ*~B&kNf#~E6?p;wQl7`sg~X9Dt()5l6IK4v0l~Sy7(TJD<|iq zor!)bHLBXHtJQT?DP~s7&$1GwYBNrR@2uhyU?Jgcs6yDv206s zFRC(=cDiJj67i zCpZmGz0RfTQDzo&Lf4tK+O-=j*JXN7W_8J`-tJyFE>RnfQd%VA*>!fU?RzpBGj_eL zie=urUPti0R2RQ%=i7{3n#*MTul}bo{vUZ_>F{^9Dqzz+l!7h2q-?j^I-r@g%^GcY z*zLB(`;oTE?>l*?Y_q8CE-*9rY_vTp_~lqc-6K=JmvH@BR{n(cm{O>v_LFp7HlvrO z+2*hC_9**aY2|=IdwRa;2jES>wFJ`?c^jZ~f-}RiYXw_MN{XY1G`P zjGtIdsSFi2Li>5hpJ{UebQ>N;gztGLfslbnup zcMk7{;=%rRU{NI~&@GfJZs)te?*qOJ#N~b%T(0M%{man(o6KKQ=M!YU?3=NI`Es`L zVfH8^WxnjOvf;lQJ;zo8%=_}7T-pGBB5*Pg(|h)T@E_ia=F2BH4XNjdp3Ikf^q2L$ zTJ6zi2d^($!R=lzxXlP&Z&1N)Oz^twUYRvNS~MPTf?0E><10s(C51Bf<*n!F9Ia0qnnmW@?N>{U^W*TvmUaeVc+Ky}1D%g~6l-{&v-3=;8k&L^1H6HWy#^j-GHsOKGQ~FAP4)>V>2iHW zr=7CdVCi}~>IvSLlzj<3+!Qd;{y7?X+btg@vu8P;J-1qyE9Xdasvb+%{H&R|)SIK) z)hM;NI#-xrPS@8cJ;D5gQq$B$>KauuzIB1+nmCMYbYYmplcTA!(1dnK( zY>%kR`CeJ)f`x+=4aHg~HHm(|*_UZ`zI~oGU*&^IfA`6ifDiA%L4KRTM*v+w%%eaS zZj5MYez9<<{(rP7oZqHW-`8^i=RNxFCuBT6d%heIBKW`4P-*%1OzHl)N3g|yx5=lKj=CyF9c@1rZLrFwq2wjVgP67Y2(;!pae@epMJs(_gPx!`ie`tedVxGd^>-0)Ma7Xl9DfdUgZv}3PK9g|} z(~0i~>22DwwRiKTHS0I@&s({5C6txXpp4(JZ4a)2==rbmtTLa-^UbdtMiR&Xak=Wi z<%;*q1CbsprqeZg)xfrh(5Ue%SBr30+@V%o<{1s|G2V~yt5^Fn%GX(0xgCh;_VL_U z-*XN4M}bcOF}3Hm!vRtM3ub1i2PC9>^FC*H{Kq zHx-^$Zpu%aVs_G5JYSNg?d6>6THWX%N@q;J#O5hw(>L3BXR?MlzE>qa6Ybhx>GtXB zRzK&->gcC)$c3Ke%|=zB>y+oyoC$X%<@~a?#^{eKl?jW1eX|l^%PChGOzL|Z_?5sl zKwR#}z~y=}D)+z;J=fvo?!RDtAh23}pO?~}54c9d=S<_1XoOw18f9Id(<+5J#$uhf z^z0_Hxt3DPsAKP;aJMrNs(aLpP zoh?$9qMOLd#D2WKSLuUlS!4f-Nf06sGN9sJ=3oj zZ`!zEQ_!)FLuhR1HEyso2(EB2M})?5UnO|nv_}T(=Xmf_fir-Z?xo;z?Hsy(MShD5 zmYgtWdGFFCb5DX+ZDj*hvXCli{IN1RS~c1SJEv31rA~ZZg`!Y9^-dBG=BidWnXj*n z=PhGpC7`npdSx)Fho68S0Nwy%e)4;RpBeL__2`BncB8eM*7k4h-x$aod(`{Yy-Mv- zmjthE>@khzr?gSmDl(|krmIzr-{^L#ER(6W7Puu@W4@uR)w(U-N%o#y2?#FVJGg(@ z34RT5Js_9NYu65Auk0Ev%B?wDw)AfnQ`Y>=n>TG9HGXMWd%-*YUm0a(OpziQeP>tX zX6)ZPxNrCac;TCdQ3J@2gx*wexh{5Wc{8m-SwzuQYBY*7^bRaswB2*Kj``7Q_F30xD= z()?n$@(pZQxjt=0roSCRCoWdCQLZ*F ztq%Ux*d0B;=i7tNp9g*%uo#Hz?-X#k9vp_wR(dr)GBg+b6e~v{Ae4KJ>v0hsD>c@s z+e5kFKtyjh&x`BrKJae?-vMHJzXg};(G$ade8q03_jugT#TXq}x@z~TZ|X-B7W4VR>yeM3IB(+=$d~jek1aF`%`r}$PGoSX^iI~6 zMdXGx!S<_XW@m~_*@y9FgZ_?+_&acJ$lp5X$L)9__?5ubK+NCG;BpN&4i+p~x@5^R z=`+3a*(@~UTHJP-@f31bI~##2t0h72nV=Vhy$3tnhDz|fmw0X&Ovc0S!2b^D#|PRqfWf^?svQ^6|~_ zn*6fY;+Mf%{SL3)@31D?^Ig+P`WY|nXZSqp7reY*u;$rIT$(9~{ue8SXDzl*!<=I} z@P;?RDfap)(r16{;Ev5bybf%t1W4{XgX>i{_zYkc5VzAZaJhPhS=YNpufr2$)cExq zS8d*ifpYVj4V$)0v-K>;_*}&J+YqRanf_lqccuxif<95{C;zd{<`IU&6<-l zv#FfDMX$#Ag^n$Qn#`nQ=GY(BuxoIvED9AD4ZVoYu7e3IJu2tgD5gd!%}kJo ziThPG0!rFTqV<(QXL?q%y+T(QwklJuMxe7TbdC%Z&l-^q&D3_GBdCq4gqQZ3%~3X+ zD!aO5*HqI3&bRK;Y=CrADA4p=9F}i6{KxIT0elCr6NtM zcSlgZ)1`dm0e;^8zm=~vO!?}El&=()Z;#g4sM^Bv?Y^`U@ICE&gXKFOd=;=3h|Bj) zaJe=_>&$~g><|ar?>H&nF7;I%=u++vRVtMmS#&!0TgFpPt8SnHn{^^-rs~+=CGd|z zy*}7@EqDvkbh$tlZ!D$R+q%~Hw68EfwZu)=d|1&MW!_tDeNpQ#9$cs1QwjLZJvrDf z+rcLT(}1{KbG{$^%=mhL*luqQu{TJ$w%~y#nmH8VuZFts`_X+favw_@PrBVYUzf&U zT&+8;YTueTwck!+#|jga7L8@$C;O^9JhI>n}NIy0b@lX*c8fwWZpnQvX*d>nW|DRGH4? zJ<9yN%1kytr*xG)RewOaH>unV-9rD{dsWyjcT(?lRK3g>Uju&<*bl_*GViIdU3T_{ z?efOb@IE-74y;B+yR~1s+g^27DB`?kigeTYpkv&V2*;9R6_6+rBh4;pm1^xU0+*nIi~drIIlh9My=b(zCj<{?Ybazb>!4P*8iiNcY5&-c;~XSoBg@hH{`CWK>%?_55FD8wL(6%<}mVT2|? zsSF*Dg}Mg6i6-5Gv8>=&r=bocOYc$GEJoUijDtVLXw1H@ctCfjZ8^A*>u$53g5mBGlRaN?P%KW&}t@(Uzx5m-4M_kK$ z)EL#NT2(fbNcO%zY?q$>gYwaQ@UwuGK-@0R{vd3ZXWtd}zcV9y*^qYG*niIAm11P?QN_!(S(DH$sj@#A{doa5BsYaWOO07=*1HXP%UYr>^MEoxpuC%u z`CFymW!|C8uPI&Y74o*5(xdWhcXCnt>q>nA*96NenT;775oDB$tCL>h_Ler=JjAv; zycSGr$F?-mb*w^aw6-@1qlbLAL!ta`$Rk=57-D&ya}ilvGYxhrqy6fRmG(w^lQ-bk zG{SM6)rg3d@r07+Vj$OcyWf=O(X|Y&oYh#dXJ?MZDyQt(uA5nEFX49zYruq-=9x#B zhZFv+GS6Tk*lf?WyS?_1Q)eAv0cpF{<3V_5)w`#a#Qc1(tuG=1%lo@ZiWApJ^MeYP z$s3g(sivDhRjMuQ3(~@SKOFXl$`1$kHA}%)0IPtwKYSist~a9n=_^C#C5fF|usINs zYX^QVj==Y+P4s~KS^Lthe$AgO_f6{wC({DQVCqwJ_c{ezX$sWjr%D&lJF$fL0*pe>%8a!^MNF zh4)i8Z9Z3~)ylbO@!Dp?{k;S|W?G%LD@}K&*@_72n`~jw-@(rsJsDLrNO0|m__!82 z@qG6&@VkJ=ftZiup9_C~X=LX=aNgnbd;bM1S8ZDvOz$oG%`2;(Hr0M}hk6=9oj+3A zRGkRMPrD$`GgGNwF{!A6u`}C^^8wyZ7)8yGnC>km&bzu$g~?F+O;(xO&04Q}=6yb6 zCC|?iN7%1>`m+hU$}V~Z?^rwMd6%ASyzFgU? zr#5S{+2Z`u@AHhEj_Chu5B=vn!^CV69~@zKl=qG=lei`79yS8`$-z&K!bxsD{{-PL z`sPhOlQpcfv4r(p#CoG=o@_3M`Ke~By%^SO?K2+J_GB%55BH@l zOeguzgm(l(d%bt?|3(Ka5A#*P@Hk<(-5v|G-O+!($G+V+zvbH(O+ez$Utljt9gF8; z!Jf{qCV9=?ID0(pgxSz!xw5y79dA$du27WpEZH8ow2UMs!IDkB@8l8%%TKfRmuge?uaxH^NJtV6 zW+cyi!nY52Ov*AOK4bguGqF<~rLWTd^(H3F88|B?pVQuU?`;)0hxFZ13C9cLAO|LL z&^N*N0pA1SaqtJnt5sTLu%lcY)srd>M%8eiK}-eUU!@p#A6&y0IKyBr=?mUSPZe&5;`STCx2= zk17WVuDuc6-1CF;P&@c&U>p$BoeD13JN#}2=^m6bL-l57uWD>h`S3Lh7^zR>}cZi%<>|G`$-DLa)iVc{3tE7Nk6gtk- zup^@TCeQVFuFy^YJ2r5j7KrJ#g3A@h6}+<_4G7&xjwzN~TcA7BxVF&5q!5&}Gbria zh+ZGhi~H?X@a@3G5e?Bx59jB=eoE+^+kX)qC}VVHjGGG?e!o9@?t?rde(pZ-?*UH% za{Y_v#_kiHO~xk+ekLLM9OFRr+`69_Mw$0PzXzWOECk~E`3SgNuMQLMaBzP+Va1x2 zTf$5&wUtkb>8}U)kr?N@zGE5VUXBYr*B( z{jbV1@zCa|!f)I@ zw}XEPco2xoJED;mh-XYM@&VZ=l|L!tyMK-yT?&_Sp)4 z7jQ2SmuJ(9VR@`$Lpg3}eB8nD6ZSVuMj~PEQJ)Oewl{~jQvw6+xxwq@R&e`h_{}lF zn7-XEdg*$vVVu|6>a|UB*dcV8Bkg1Au2c5)YH)<=_3k;@gNnvTSA|?) ze^U|d8`BPzjjhFqgS4n910J$ojoBV38RvA*FWId!4*sC5-IjVtTMsDRg(_~>{b4=t zr5?*sJ^ujwkHBAmxSrSjJgnyz)`s=GI=aXEQLNtUx2`;!%5B+=+w^T(?bfxy>*XrA z-5TB=;Va)5{Yb)?)vfFOn%u;C-6>ITVhvBYnaMNQm7qH~!ktD9>qfLsH9Cz)VtR}_ z$)AG6KgwN7)QD3z!fi`fD3t5HQF^r5Ww*L!&J0}D5l$1`J{s&st6sm?%$H=;->&tU z-VI8frt0xT+~$v9CGEf!KV4nZpc+)8YR|g-uJ^&PKK4`Ics=+9`0s%~0&#tO>ZPzg zdLq4D*TCWX2s|L-`q*neYCmGCz2^V8k3eDcFVe;yjBw(HT9eDMQ=p(VW*(U`pMa^d z?gp@o)ugjT_mbIcx}C_Sv&AufuanB2;jeZGjF^m`FQapI24$JA*s%5cOC9HZrb$fA zh|#v~OhCZrAxYYO|tH0 ze{0pcRbEB}&dMWUeU^U_)>p6&g3kpO0E&-geO(VOS1cb4jWd$UBvdEXLOmd=mEEdG zv`?e2)y8L$#&R%J#FLj$sbr0+QEmfzq(m;8)q#uVSp9EGkBAq5-o2H8-h_6&mTBxKM@vRo-s{>d zT7lQXF?4h3bY7L3%qF_%R>l03zf}=3#=@5kqs(3SISqU@unvg%xfoooU6H@jP`~_D zn>JpsY~p-jrMDk5V~L1?(Vtc%|7gu*&_y(1Xspkc#5sQw^);2fJ}7d~w<>Zo_VN5O zccK69;I9C$0x|u!z~y=+imMtr--h%T3H`o}Na-aUZb#pxj620DmPrue6>yL&N#~ep z1ssS)V8^#B!E+b>$Kd*P8u&V30}#`H54c=!3?p9%{Y4W4`n}UB|Ky+!lE&z}6;|F> zc2jAm-eO|N2SMYjED4h3>Up#xH)9{qkJp>d4>GH$Q}77EQ-(j(wp*P3XR`d??A6nBKjDgl9B=)~*zD)94x zZ9vS&PH?&Aof`JXoss?Ta6aaTHL*i25_{Ie`Z5~hPSdzYxbT{+diP=CcG-;K2+*N1 zJXSfA)EH6r7<(SC$m5OYp%d4~Z@~WwybZ*B|fLee1!FJQcxFBeSAe3j|TNY zmq;}yTHT;7W?7r4i-GS{f(I|>`DHNakLQ4I2QC3(`qzQWbwd<4^PAXi8|`a?{2B+V zp9;-bfKCA z!~4Kt9*F4d=b0YQlX`y<{I9^V7_ z2mTE3V<0Z)pTOlBuAJL8Mlry(J*#j`SVYj(_@|WdtfXqwmSdyBDG(|t#vMOVO6GB% z2+Z0yD(eX0rSHi~@chcFgM2IlUjeKFVm`Kk%QYMy8#it3-;S++o3w9jWg2^_HM8Mm zuQGN9Yoq1miOoMw2bD3$+7?wr`TLdNxqErO2PW`i~Jpjt~)}1 z%ZC0S2}^D7g~6-~`7aZ$4S6C$>1as=yBu+=w1`Z4YphxE>Vw`V;$z{j2G`?$@NK|F zK+MPIz~y=}idQj05ly%MI3RAoBMTHppCrn?*be@Az% zbd=t6;+FcH3OrW`UG`G6SV|Yej(QXm)WWE<@Zi4vmEidYB0ADvtY4Go3#bQTK3)Qs zE7qs&jO3MgUOW#!u}!NYfe!Q4br`HLUwserm2dR?odTN}xIHp3rQKXfCGa3mdFhnh z%brU4cs>;`K|{JVnaMk@!UKvRdiz{^174%mL`CGxs}*KrJD+R=Gp|yK&X&iNeq8bY ziyAtsEtbAI{^Mz7??=_17*nm?jC-toTJ5oHBC=+6B4<0kU34-j=_4*Chw56lqlmq! zQRlK>VT$f9O$z>H1cq<^1p{S`eU-AWRL3)YZ)TX4>VthpML%NdSCy*4G4XrWLBr2W zKdJ=vGwnBn?RgUTPT*P~uE%k&2R|FOA9amBZ(YAQN^QAl%N(gvT9x?3>#VmWKJk*^ z^(GbE>VntX!#A(%;9Zr(FZR6U8#g!|y4#UG$%vV49mSLwaubLM{w4OMm>Ebfsf*Qa zjj!wL-5NVlz1_YrQB$QG>pZ90EY(Urpeky|&G<*uXX{(KFo*C7@pgQB0$EFB=fQ5I zN|dx+$s_HV_K5ass;oiWX=Ls3TU;jjD)!9sBsP6XyW8%u+v}73R(`+0CtH%zr|Lgw zwO8v-wNJx)-%rDO+(A8cQB~3(Zw3E1;EO<9kN*WO*UpnddFhSFz908T>T%V|RqIH4 zEvm?4Huv|-@YqedpW9@k@h~?kYKLuHi($UY%8-Ak+8bvjtSTZ0h|Eu6g^@@JD~~~C zlP;x8^}J>^!O3_!klWQ-%dlRjAJ&0*WxVvWO2E&w|2B*=nDBip_$FWr5cA!6Ao!WF zF0xmB{T+TH(&%fY*>MxOHVlXSjCrqwP42OR+l|TKRub2do-b7yPkB?YjORTcmjlb1 z>bkfQX7E0&@@uT*8`}N_vS7xkA&4Wb(&Wl%*J)*1xtW%@D5OXLj{Qn>4?VgL55*-q zalUz>$rzz0@S3tx%k7KpXSDe(9LbLRl-B>P?OFD5b}Cbs)jbwDS=ioMIp1k@j`f=C zf}{UK>ld{C={sI)JNV^n&#v!s>~;>EJu!zzP8Z^mcuMA`*ll*b*XhjlXPI}I8XpkT zI@>&puU9a#v-J-t`z~carR?+A2|uHp0o$E|UIcHvR^m6=6yt+p*;CRQ6^w8{&K*B% zobJJ)!F)m6Usm2#I(4m1&G4qy>{Rv<_VV~a&uZr)cXl(DtiwLEA1408?&b-Eg}7E3 zJ*(T8u&PZWUp}P052KC1B1Fv*OS0k6f4y5d5lt@{~<*`7U3!H+A+~Y%{i+hsDgSOzZk+@^12_tZ`I!$c*E{S@@w(o>ebd?JMB(PW)38qT zoMh}Lg-W+roF*N#IPHz-?c#Yko+sn#4)D8xdw`hU1K@JKgI=_6*tT)Y$~FBf7WZ#w zWEFeHbVKkM<0lYo6M~&F!Q5+=;5o+c2kW~4-UPG)F}CX<`H?_v=M}n4+%J$F5>|_+7xgKuo{>4?>;se)@^Q{n69H z`!Mt;1pV*^la6?`IFpztza9q1ZXlQk^t@of<&_pHjPw~#`n{sNQUI%;OV<0J3=ABsT)(`(E_12 zDnica`O_d@OTkwFtALoVOTgud>ucz|F5Ad@jQHFs><-H>Op>dE;Pv z`~$iij!~>B_P}f{W6%$Zx?}I0bC8l{M`&L*MVrC8Sgvee!My4Q*vd-O;cGebG|Y0 zR%QGUfxZjfxNo;xjRc}O<5X+-yj_2)1jtJ~UofHnCV2iYtaU(4e-XG`19QUqnKmR} zLC`K+B)Q$HFu9$(OTVRV)M}Sr7`(0zUX#W|3}>eCNx*F*VcPqZl563qx+*GS&viSN_K0rEg*Q04i$#xd)PwIo~7wXJsN*%N5d z9m={gjN2IaOC_M!^Vh-gKOcNCa3T=%wE|qOH;4AOA>(Y-hRrhMD^qF9QO3l6;~`cj zb}uw#n?+|IXN^@Up7T;f_fDQ0&xhXz|1R)-Ag23caJhz?cNp4`T)1*el!0#JRJ%o zjeWAtLT4lH<4!aB4WCRFR;FO#$z>_xdH5CLN(=8x05LjQ(ILM_|2&SJ-}|>p!0(&z zT?Ui!mH#{W;eZw(F4r7zxpqbCYVVNz1R{kjR!l`)yM{&A8( zNdUXHCMkB|v@Wp{+}rT)nS+v?9{zW<+UV{7UJ2;zfL*P-W?Pz>bg7Lt_06r$MXe~@?8o3S>OvmOy3JI=tuL} z(0%P8^q0i@Nv5>Zg30XW(5gHyc=H^Z05m^KMe#HF@1AiJAw(`}kJ(CMHWE%5#|+;) z()Y(7S+dC+NW6#lvf`tXeZC%t6}{cECrM;KZMHDMOrC3Kz}n<#d_}BL*xgL!U8b*4 zdXp>G*zalU{YqV9>i3c7Z*aUC)|{Z+%PCjft`~t{3S1VI^`EtCTwZC{AmODnbkMl- zjLGwiZ{Ypapq14WkJsLa-u^@Ay$;?$B9vwzuII0U%e6nUdsQO;o47xny=}v}QQF(y z&HX_ZT-usAm1`M8WI=u;yj6lX;p>zDzdp>iSu!Ty?HX^9l54b+b&AVJ=|sO?hoX=@ zkjVf*-A2w$lln$Qk4B2{5i5~MTO{17^RH9-!b5)Qlc!#Onlf8ZEjkQvizFGiCF5`F zk$f_xPp;ApHBGvaEWt$-G#>HTsg&T$uEw_Ilrgw*D$+20R{a z#lc0gk|eD>&cYU6>FBU5QAnD_>}Y?SU6+#xBxMu9;o}owkMOIQ#ZYxw8Y@(*n`73% zk7z-_hLKBze4|t~%6uf_>zCkv2L1-be9tjMzK@UEd)bh9N|AG9d>=j7{=)fg_2F=A z%?}3Er%hw>mA3JF%8+qLo9AU6S`ghF0cm0iCE6>ME;Nu!8gHn4G03bY$za7NKIyy6 z3#G&lc#-Vo#3hU+8f1z(-t2UyDC`(=?M}`K?zg~iJZ|m>e-zjU#N{bl;qSLb`rvty zemL&O2gi??Dxw*ycHpzJCvFEGlpu@AcUZ=g0_>D6gfLjCrxRU#pEHky5-!LzHK{=x^m^#x`9Y-ns9s~!uH>*&CSkz3L&T6?C=3b6s)^dnW9PgZYf@ewK8>{H=%iPipfM+P=_P zjN|emYYI^}-yjSPtB_rTY5M~HlOU&B%nb6mYhK3^Y=2itgycx4-&|LNt$^L;E6V(; zqHkN~D6^BrVVb!Z7C)i9CkQ4aqQJ3IaH1XGeNCC~v(3GheLvM_?a=09%KVgaZ&vn2 zrPIxm?Ga})BiZ{*^E;+@mBQv&JkvZC1HeY}Wo`bCDpfyo5EYl{@5WOU#CnO<7eb(Fkd#!UzqkYYD$}bmr9iDEWZjS z$Jk?w973U~QUXU-__F7E#A9BZqCP`LF8bfD>ad^QNk5#%dzs(A1O7bl0ucAp(-VRb zPafqJ8M==i(oYx6C70P+x;RNuzH2=#2X=f{OH!1{54grps#|rnU!Te6##tjg*J6Wj znJ5G?ZU@~X#p-T(S=u6@>!VM2hic2ywZZ$O`~vOL_)OU%Y?Rg8Zz2Jg7+3@nyiRo& z+BksPN4m+Wy6QdNC4uoxG~<6Voij<2%84PL3HP2-uHO2v9`;bqGVi4xz6btO;O9VG z4}SxfYj?DtAL{RbN^b44_!xo{R&F_0>R^}pQ5bhV^+u_Jd$jRpO)F~b`LN!t(pJtX zN}7Z4PnzX4eY#$(+u?RcL&(=cCboD!KLdOXa1Idj^`lhC*E{qu(Y}~<>tLH$xf?J^ z=6=FV@$0nlP;IJEmA5}>nO9j%1G3C&%O(8>cSfFt>@{wrgfItC;3z&I!V(qA2Q8{O}isU zEAq4R&8scCGW60mo%$-vULMl4gys^Qe1&F{80h%5@EDFOop7zIwfQ#V7J=a-%Dj&e zX)@ON9DdP3)cE)h5vwQ!z5=h3iH=9Ob{F%~pOpEg%K3iAKha%AMipAey3D!)Q)R>{ zKO{xPUYRRc-$ql^FS_o1tk%pae_)zC$aK5lS6P@Y9k$xSqxETtKiAdfSaS@4rY&ZN z({6Sqf(e(D%t04heqSYi=eTb;RZlXrDD(X?6WK-gDdjLDjpe<5uQJb< z#PRkB>!(3kJ|`Pj28Wad_ivJbBl=ZgXqVP8F{@g9R0wV{oM3|INUK~W zfg)27_CAKERZceq(+W8oRKm&XY?iS#R*%*TLSc#LmfJ!;?t~7?vS8eQ9sJwC<3P;E z55eV%{j7%OZ(M_Cz(F>Ol?r*MrksI4ca!cAcjG36>iJP$Zcx zANV*B^L2DCSmfuFt=N%Qc+d_0amWF`%? zNF<4$#(|M!X${C3`^Sd-?SX#0FWv|K4De$h=I=M)at)_1T#2%hjnk_B6;ivxUEhVM zU#n5S&fJ4CoC@{EXgkqT&boH3Zpg}EZOio1czo{|7xFQ!I4JKN5562Y6NvfP1}@ja zXx}t+UX=6VR;*cnVW85g9aznt{Qa^gpLw%3PH)vmJANvgY@~H7jBJ9hE!={IktzCQ z-C*Wpc8uNQLw@!_FRquLfd41(8W8j2R)zdL8`*b;@^gqAUTC(xNzAr0uh+)Koa;q9 z;pn(22+CD)0edD-iRs2VAb<^yTnz^2Tjj z!fNTeUsU8@61Vf2*O`*6a9%YV2RmD1rJC)09STjKBU><;fC?GpM?+E9+>*2^dj-s!Ry^HL3^s&4V`rEkMlg1n_^wZ^&(tC zeyeA0H!Zc$c##p$VU}XWX=N@JD-QF_#5uwJRh}2O%U^^}jWR4Crk4Si>z}mCF)O!i z*vg10_RS-3e&z~}K5jyP90WTrie-m^h~9FZSLS)LPuT!|8E_>K)B7B_Tzye~tbb6x zrTv7Y1V?<;_FYClm;;FUzDCCCcd^_N%2}t6K(bGu(1I<9p-#l=+IwHN=>LsClG+v*n{}Te`X6?Y` zjFf>7$jj$~5&VK_+`;5lr(Dmeo5Ff3DdcexsXr1u0f`b(vm@6?zLm+=MS8L7VYwb@ zo)$8=`-qUgTc98Br}lt9415!a`773i{5>1V53dZ7AA;oaYu4jNzW(AcujRlG0l9S+;d z9&*0T$L>b!;h#(uxJfrNwl2s7SK>srq)QGz5}%aqQEXa0?jt=8c0rq6w#h}6C2^Ne zlKwU_oVi$p-Bc&STcb{#L1?c0nmBy^V@={pJ-gn`N`bUQTW) z)WTVT((DwOtB$d&IPOW=i7_d+NMf+~lRRb*teNPOCfF10E^8!tW%Bq2pnLGP6-_^Fdc~N-)Ic$|Iv4a^*(P%{wnmG#~d=MTK1a1vw|Sm?-L|T ztnANKaLWd-B#AbY#;jXJ`TP+y0cyW%?6PL8ytHCAF`-szV2xg6Gnj5Enf zj89K+Cmu5aZT!+KJ4EWpA;s*EmG`{z!q-IF@4=fmSMUC}c3;=_$b8DN5_NXAqwHlp z9%Q@ss;0?P%<#>Krsni0cem-@#wPo7ig;IdW4g4>y8ua7=c-GSy;1h;x;inxYuiPk z;IlCYB=0!T;HGjVJJ*uq*wu|35rdPVVO(bYr?xoUvD#g1O?5`-70GsMvsp`gG8nI0 zlaH#*sPr!86Y0+b$AtAiK>fz`zZ3kUz$bvX{+|YyYq)&0bpF)`4WL%;T=Yb1fRlhR z03+~4ZG0V-B3}K4KsC!5i=1}D>_F~B2Y)@M!>&Py;UqFSkHoS|Wywo&7nW+FyMIB* zXI<0adN~PvF0cTI`MeHXuC6$KZiqdpYc#@Lu=(e-gebnDc3>Hc#6`f5WEMX9G1It$ zSvXJfS_z8woUEBA*;$IDrU|E!F^mLHu%%d$Nc<)yLV^*FWR~;D5$86whlxfnw6^O- z=6oj%xZAxb$onnV8Mc`d%j^V`}u#-+CB+vEW2nZk5CgM9rj zv*=!&+^)?%gj_L4hWlpfg|*#K}XwhTuA@<==oCq*T8=V`~isR zyDcI8*dJ`Dy?rga@0DkVUbemOCJGj}Alf` zo*&CwTfr{{b^tN`JHX`{Cf{@S>i)C0trg=pTG9T^q6(0j=(%5!L3qZGl<@$pkQEbw z$3|D_vMQ&6D!B2o5B3SJdLlH4VPccpJi;QMS2_r9;D7lAXYRETTvEViHX(OBX*mJQDPTrQ zFkuuhSod4@xTI&#nJ%^bjAdOB8Y?J&&xv6@FQ6k8kgKF zzq-N;>=y4+Vz-#_#f0%3y0ctIi=K(|MjMA4C(zJ)j^)%Py;PG|jr3{bnui+8N?D|? zWT|xvY;$vMK$+a6Z9o|dVH;4WcjkCU7aI~%8$jVCZ<$YRl%*y(#}%pHD&P`L4hLPa z{HDeRv)(S%$Wk@R<4m}jBdM7il)gjjKj9u}95^|wmjTKh*UQJj?+3mD#P#wzxLp6A z`bGc74fvo-8op4}t-K(4Y{mk|1Bn0_HaD2YZxXFF1=iVw?qp3!BioSj8RNE>Lhx`Dn3@P*Joh=9+w9tI(Y$;@v3HwsTf%re)9SbA$qX>lt8O4?mZ~F; z$!WJcX4bgcInw@;wtkFpgV5>*J6X?pvmDQfoGLzoctwl;LFYKlht4)$vi)YJq$~z? z#wIfIMV0VUj+}kgtchfztKzxeB>J$-UzN85GdRz3^jAoCL;kxoJ+>ABt)}|OdMk6B zd%T`wAKlgD?b7}qluJkP=j)^OoDk~5JLh=n0Gh|y9A%lVv5(+b!7TN6o6>&_gwEW% z!g}nB>Pgn2t>BjfR{?Q7{#W#Uy#B`bcphB4O1#?UZQ2-2c|Bjn9@q19un62`8F%Mf zt$ODue6v$lHb)RTawCCpl|)UhiejDYp5mY6o`U?a$sKTXdAq$&`Lh$UQ6hmxF6Gke zi8XT{P>GK#_YO=D{B%0ogd5qq%8EjPj?ljeB)CdnSe~BFu-&CR$AO;-^Z{{st{)kG zAMamw4~hE=%d@P1^La?oaq%TdmmmdmyB%qHLAIM~ki1hFTh>=C$ooxu@m-&NjYN={O?w^yIzonhBjU!iiB z*)lmDr}rvrlb)_8*^9mJn|g%$i?UXlAJNWY99}lszfunQ*_#!i#Xm5eqwMBHqhD|v z2ncI9xGgqzZwT8r*EQI_1` z-;xB=p?t?gg)pHmgw&~Q5mHiWbmino(zoqC>i#8H?Te?T3Z`Xyh z?X!Hh+F~m#sf;#R*C>6tMv?U`ZQUeWGrU7Ol$?uoU~^bcd#Q(5-uxN(OTd3bbt7`! zaDGJLc$C_ibHU2>8zPbSQe(!Y#*X?Hc(xpwOOYa&9URh4F@5qlV_-{2w=#OLeR{!H z0IPtweY`PY`wXYo3F%7@*`dDWh=Jg@78ZgT&m@iA^(s}?{3kTN^EZ7Bzu|XloQ!1@@EqPzko(^tz1qfkSRJ<#Zunlb67p%AXA1* z=#S5a3Y*q(WPmOur`IxNN+hdlIaM#GvGNRV-ZLlW*?iSjvBr|2LsU$Ty`bcR$p+w9 z{Zqxv@db}bWqvGdBL`m;)=wYhkNfZW;8y@w19APl1TNQbayRSf_BcDmYhpHiTwX3& zLKQt_8IPBwigHwkj|-8@oS3X;$z!HWwn&<>ES#aZK^f$yBrQIbx5QnXKx@k{SQ=15 z;3MWDDI(ixQrjk*=U{P_Avi-{FH!%yFA2-hH8$i^=KZ6=7XwRyxEz;8-^c4$d>>rL zM4cPBXa~Z)w7BeMRL=<6S^foUb|ZdX7j0ZMK4Nmk=Ki%3%ec9B)20n`u?BAp zvXT^gM!{wy+PxWl#*QY5@AOpzDp1r0O9Q38Jo()rAH5MBsi)Q8=L6e-n2*Pz?*}6N z-q3T10yn||=m)drz}@1oiEf!H`nhRb+tf;b&f!~+RRiC+dbE29sw`dWmN{gT3YXz(e(3?MGY#_0RF9D5@>*I;|E>)$|dsI+tM_odHHl|K7fZ9LmVpQZoVtl3FK zG&#&7!zn&F#66GxD4}jTZIdYjm3}pCE{x8wPNpkwM1>Zd#)@5IN66>ih!5fO$KWpm z{|Ur=z8QTV_s94?l+R#m3A4qXNwK!$8g{MCq%^Uz*uDY{zUaNqVBO@lJEC8~_EMqw zh5m`)X8iDd1~voZdy5S{RL3Aa*ruASPd*m%J@RFv@!Vw(WIJI8;&vz zVQt~9h}@=+P`Hq}2(82cDXT%Azw7d_KK4T|_LKV$@IM2817dzg^o0DZ9vU|l`C+X& zZ|mZd=4?6PBx$%^>Z#B#Y-X^}zEn;nnehee&ds8=;+P2XL_4J8_KEH$jggt~PUVb( ziOS8I&IVb}A5az^h#*Gg%8n}R`&IP)@bZO77fUy7;?&cA0`>y2 zc;G+8v>~y+^Io=$jj}vss+i$$sVUa$20RbQScfc0+Mdo#ais3zlUBDa`XrZ}mZT@j z0St4rKdHNl-q}F1@g%38!TKtFtgfhI^~;L=mlP$q_FNT~r!pa|Pbtr7;O77vfw(+h zkG}uc2pc-rMagsyuUJJwoPa0VLPa zh#2ph;7(5H(h+V4lK?xb6rMC3eOl*LyDg`OD#L{&^w_CL4nJ6)z1N22$xR%TBig_x z0aJmvJokXhHTkSi&blMI$Ky%DG&a*Z6r^Pr4jw^t;BTB8u}aRnCcz(r%A0SV=$)l&63d;j_79cXY&Dyk zt*&@J>3v^R{z-#&w~^ozfhj;-{$6mo?igk~$K^jdPOsIwk-4vc0&(8$%DCHVO^F^R zh3?GsFsxy&VkBkZaJv=ylDt3U2%-+)xbvqgd2O0PV=)^M0X?m&jx%79$d5v)RqqSa8y;4r$46!{Jycpuvl7If1UE zrrqt7mBrOXj>r{}fwjdI^$x1WBRJ=~M;~o3!tg^Lyc@%E^ucE=mu?5Y7PtY3%drn! zu4R$@zIsR;LtGB=g9%EoUws^f7Yd87nxglb_eab4u-)2-#}Ye3F<91|>7SHqAp6Al zYJ6`KD&3hmwd&|rzvxWJ+F3v6PR};j)mwC_y(HSZGd0Sc8P-BI-+VNjsservd?4h% ze8iw!F%|qcUG94@P$Sj(4nsoMDPkfm>OS~ThEaN^l ztIbXu$5_Mv(Mq6bHS?%Jqo07OO?p>4Bc7=jO0{#+1SKsRQo@CINBz zJ`XO}&5@mB=s8_$R~=Hm2{L`{R?7lc|2<}K`y)4+=@Xu@!)tZMqHHAx4>EkTsUls* zB=Xoak;AMhH^t*TlL|X3M0Rp7A!4N{t*B;`mS5tWa}Kho!5Sim2yyxnwKRqa4;S{4 znHqX(Z8a7!yT~?b6o>1bV_y^q=o>6j22WA_YMq{|vJQtTNMeJnr3_jul0yXsUd)UnCoRXoS( z4vZpkBkSV0RBl`^MSSdnPAtcM7W@I=At2`CO>nt}-!Jqs1BXmVYxF%Q172JwrlWeB z_XftX1X^M*gUnCR5_%B!qA7$8bR0f+k-cqQbA(HZ;tsy>F_6S)~2#wX> zz$R$)eQZv^M`hX|zo&t(0nPzpejf*yYxw_&^r zH%V5{#B3JI)#f4{{0E2Bhw80k^>%#@(UMUsAgA0KmaA_1;J6qAz6dx0h|BeBaJlwI zcE749k7wK;wya{ll4+L`we4{y-s`G8?(eMNcDWPWUQ_onEayF(HttJGp5mNS=eHLU zUIT9H#T18G>U6I?pNs>{0c78n0AN2q%Oj{s(w&VaTS?todmZ_ZwcM+FW^{W!=(8ty z6D8kUGMA;NW4X{Cg2^l#-cpT+WFpdGexD zr2Wq2p9YmCKTTg_IX_T}AONEDI<2W{ss5zm<=aXvL0K3~D7T08);nWRFTNi9V&FYM zTyM{T%Qd+#T(7L?erUa|*}U>R(k4aPe8h;~gkr?!{TnrXVsFZLAl=QPg@Z-LLw!FM zHHALYT2wdMuTOMhrO{5~7%NvQzIr^kjtG0cEXdHhg>V>U6wl_WU+R4gsR z;h6}gdTq$7(9hi+@_Q%z#B#(}!5;^{3&i|BbX3Ui@x%C`uU$27Gbc$0Q{syj)8Q|* z2tdDdjq7vl7rgpZCY7odvx1wGgJ%gAVR?}w$I_)_v(xU>;o_2)7{|2hrm5-+h_N`Y zkjfqD9^*LmVh!fto($4wYHjKqXQDrf6&rhq=yHktprS^Gx zBL{rx)JIh6V`OR~$tq;s+Z8{ZRqb$i*akhGIPO$H#olPz_JT|cC-ziO32!5%TcSqP ziBRP!wTFCOn>Z@f1GT06Zk)ZG|J#;sPuAJja&D6SDHUjT2s|Z{v`g<$Z2Qp+hlZa$ zVLj(&4UXS7@NQrd5ZCiH;BpP;?;q9kVyWofn>4cTzbiKW^WJ9}FXXA{T$(kV1JuP;Ir@=kobJxkYf2eTyOh&`J>@M(HDv0^rP%G4!vd4=AfJ$gmDPTYJt8Q~ zuaw0!CH~A|F>?2X<#--G%kU}d`LDtM3cL-(<(NM^EXNDO#4*c2JUf=*UsCITF2Ubd z>z|7(^8t>$U5XVC|J=*8wO-tbwN9oAOU!@5G)P9fhQ=AiBW4EAe6#tFX zQ6?ty|3}%G07g|^jsLwn@6DT;OlBsTB$Exu282Bz0t!eF1VqFLh=??VB`iuvWKp#C zGb$>zF0oaMt=4GW>Sr}o+Yjqf>PqWEYOPXNY^~MSw$y5Ct*!sxdH3B6#E$L%#xw6E zBk!EM-+NYq_(epl@f%y+toNRt`!wHO@MXsNE#MCVKLQNjvl}(vbAo;6`hMqr;kz&3 z9FY}+Sc)I(0E@#Vmg3A$!`5BtF(vWD1k43kL^1s$E>^s}q)Jt1LZvP?e~Bh^5Owaf zNF{c5^aauBGvU%G-^$@EI@O!&o)}tyYcm8bWTZQ^!H4 zLUJ>6qnOm_s$rq!p*8u_+3ChbPQYnkFfH(76<%Qf(RSXpL%ywd!~f}a*hxLj`gA+^ z{{asIrX5}amy+vTv3cE!)xK$=zWWPe!J=w4wJ??}!7_-xLQIe#x^XhB zWUZW{&c&y%wC_C7uuJn(KRqkwnF4+?upBV_>;ac@OOCiNYd5u?-PbRfrYmG-TqI(# z7ejnRfk&0hlO@S;>K_qnXK}St5FYZ2RQSadF)WF}Fp+sN?x^zRs>R{VgGIQTA(L2? z-__&_8&^Dgh{V`Kl{r_P5gx@!yP_zAgQ1fmyjge{Sxk{7C1c5*HZc!JiUsOnewf}T z2;`u?se>@Wf9hdf-_oOPtBT)c{)`4c1~?Wl^}P>VN?i~)e0*>}F#8$nz}B{oK1(g! zEFW_HYunY#S8i`x_aaN0`EJa*7Ei-^ZZ#ef{LSnYZ{zqFKAr<|F-d_4s*%8uAuodbuA3nX2|a?$DGRAbi{K}Bh?}lC6Gdr-^v!m-D0k(o|o6kI!WK2 z?Y!bR)7{@Hr_`<|rDU{#Zlw5H_bbPjr2St5! zn(mi=9%9XWgR3tQXUoH5P)mxXHX)@^EvaIn0gP35`!8;JO!Kibpd;;nFZiRtlYrsl zo#1{_BI`6kP`^(rZw!e%$psb#Z7&PU}#Xnj$FqS{s8D)z$ zA+I=Dn#jmG-@3_mmaF={`10M4YyKw9^x5^tM-%vRU=?8aJ3IKkBalyg)Gw}-geBPd~P;?WNURMn=k&o(tnip&|!66ryL@1iY{D&z$r__Y<0*Jpnyw zuQ$OD03QH`pV%>)-(370>c0Q)8M^krV5s{^&Cim6p77HSekO1>VEEY)d~fcN=4s{+ zrXcG#uiGrTA3xMzx@saB#%3+B<_(A&txl{M0WewQ#J<>iO4IG-y=L8f6Z~D^4}hUN zaF$@X&!H>V`ZQ(x?%1P{sLtZtxu#kTWD)YzD1<~Kk*Z>ph`Y0Yh)Z|~g+`X~+rVgn zn?z?RT{D-siZ8LV^{t~Fdo+I?&^P>D0Dc{C17P_3HMo?V>$RZw!Pb4 z>VICMegwH$&xWmTTTY!=Axq#-5dx)%>6k{7SIM$b5h)%V8p3G`QC5cZyZ9L%$C`OK zVZT%@js*X(C6kO6$xX38l<3>IN1KZ5ep=UK((G(K=7BE+76Yap>%b4LM}L3Jwe5a8 z>zbsS77`eC)y>B;TcW0hxeNHdk*|pz}tYK8=0f&=DKI# zpN0Dqaj;r9Zr-}773E@wf9Y=Oltn5N>_w7&WfsfT)dU%isw!@YF+4L1aSU*6Y`-MQ zYE;q!(9>tLIE+8&y#B1_a|wJH|CSE$^MOkN!)NJS&8HK{kEg6VRDRjVrx}iex4SIhi;yvLK8Hh4UTd;qx;!byVWWNGva$K}7FGM~i~_7!QN`a19Dg z(hHZVk`HZ{FbTg_-ae9Ks&|!oU%4lt?TXV-JRy{bz+XJ8#&biOwhD^lqO(>yNOX z?~|~0yrjoTC*#1JcfSdKJMh1N87F(erR1_RTiv>P>#8jb1gYU0au*%Jt$Efv zw)KfiIEQ!!D;peJ5qEGlPlrm$;F@1StW@-(vS4xRTq<+CWuNA&^tkLin*e?^Fbgnz zEeDs9OAfcGb$#2)t(!K>3_F;$rg==U3)Bg)_Ge|?5r(x0W)^I4FVV*&wMLpQ{A^Mm z`fJYqUuu5tfSzfm$H9LA{1PzyjGU+WSr+8E_#lu+oBc%W4SiOQ-nwSkXp`2Z$G%Oc zi`%a5q4sm03E}vTu^ld@gvE7bfO9d6W>5l@k;hlAIx5ucw#PfTz8{nCgm5lJ4e5+U z&BR5bWTYy_gCA*PBsQiZoGd32!73`#q`s$|!FDCnw&xXHpKb7K>hm@5Zvi(0raljW zOUdPr)~`N(dKf3wi~_YLX^2xK{DR4@D)L(OvEx(h)U0?^?GE_Z2^}*&?g4)g_z__E_z+ym=Zz1|N5@uw zgKM}{T4*^fH1{jYdd99sbs8mFy~L#`N|Cl9p5$_Y=|S4Vk{;cADSEGJT%jt!J=W)1 zTIsts=HExlI??<3bWQ(+ET2ok*8^>U;qw}BDMo+NKku0Ir{;6Zrn6_a`m8p#VdN{8 z%O%s`_I=yB9|1P5=)TCFXGvTQNpl2aa;73GKV3{-0L+r$>LN+9T&YHf3e9i&oJ4AN5Vl&mct~M9iK@iVlF0o_iO%kK;N8e zz72j4a35g!djnj`e;#+M*Kh7<_uUjSRX5s&~#fI;HY((7cKrH6?Cys7!CKQYVS4DbcOV!-fsCb*Q`=PuLFD_3k-v2m3) z=Uu{(tN@0vRn2`^qM*Sd@z)4O%OS!aj(IU;@yJ|?eevkAY8=PITGPAO;r&YUw+H&B z{eB1jA@C7k_;VKgC;mj>zEU=aRqI+;oxYKiX_0N@9pLNhW@X>{{Z|M zF!YlPHT_)o3r4pgnQ0k;oOmf>;<>luz~NS-Dnr(Qm)1}T1cAl|BPEHhnAd9R`SCipwR?*T*iZ{SjLjZ^5Z+3JTt=_C92za!fn&}&?jrMC!tIj|Bi^frM@ z$<^MhdNjEq*@#%SF+psax$V{qkS+J!Sc{yb>=X4!OzLIWNlE=?y8qnG`%Qg+2L5Z{ zw}7F4%t@b5KTAB*@sALC$KTp~+$ze)x&P}~|6&WkvJSC6u|P(;!{Rk{vUM>*$zFSS zH0n*@Z=AskDTG|32^lVCwY}xRiZ?9Jqh}zI7`$u5MqmMpo*UpNIv!#Ay#t0ydxYWI6O)$Rc$X?5p49cJm90%rqb#5Q)YEF%a_ zK2g2uaAt}|P9P6c3EFd1jhH%?k_(ftfn>tro(y=6PJVtx(!=YB3J_MSN1?r2=FU;e z>>&=CYvC*P2VIW?@M-R)-pRIA1e5}%9xK765v-fVA@ z1^(km;CmtbbpA#2-vfVUTs#f_67ULO`2Q!kl-%c{fPdnT^x4!j-J&o5dDgtwvChX9 zh3I083r7S!IE>}vr85RO9A`&tM`4X~&`>>KTRzZy%~_I_7q0<78~74n_<8_b$}>6g z_Vl$Y17*XC^=s323qIsgwRt3b3O;yFJxyp}? zjVm0LAoPWVyUehWN(|#<+9|?q*7hn1D>e+?Z?K)2_G+_(_I#-MkDQWi*BbC?zzo3f ze-XHp|Jbep|C;w(lrVpad}I?zdQyuAL)Lz;8kxR_+3O^`Br!h0I4MVUS5b(wODq(T z5Nd3+ULrw6UsT!zX^jy!m#Gy^|=^a%3HxaE$TO4`}$*r7%u5-BQ5_FAFk^{tR(ZUV+SlO0saxP?#1trqbLsT z#ifJU7SXY@K}YA}IsSXwd(STMKSzY~%2{U0NSk7-)&yyp#k7I&RKB{;k5^ez(dw;J z+z?XO$CZym1r;qGtxhQAFA|9fh~Tq0HjPWBTkC5t<~m=qQS5}v?3dBExwTk8>4xa} zShvG|>RClSr5!#3kDN+708)Fo*9`}kV&Wyf5Zs@$_vT=}`0XIQ+J(T;H_sd-)|vCp zSJtahk&;Q4n=vTFVkoy`33E-i$xIgU-MnApaLl5EAqPg)HEg8lRB7-swD3h`e&Zd3?r4-z z|9+zRN-fLsH4c0>a2#OxdKFyC>OkMHyI%+*u27NlAuS z_y_u(lvqebF*g*iaV)t#{}u9@CZ+3H)ts&8MDY2* z0>ISs8gMCQJnYLg9!xN>Zu@y{82BFZ7IhENff)v030oiKRma3IIE`Iwv@(eZ{~p`- z_sn3mClMrz=`s$2E+fRQEKA4O`U~CUm(aGCB9e}XqtqAFc;^X)a_lkro~Vp}!95Ww(rJGhh=f_&8P^wTRI%FiLw8*hQI zzcBta$JDd}6!K-}4c?50$^ghSB-ad_04Sfp|%oSDrVNd0mhgbcteJh~;51JDd!hk&40! zS$uzQt4S<#3vkO_a@f91{G8{#qO3n+u~lFrWgbU_8_^T6Fr`r7g;3u|;yb=3R#<@u~!IB zmv>eK*HyXFFm11N`pzRM&F?z+G4tRe@T-7p0K@MC;8I=)^1EFf$z9$w&^X^BTjVTv`ee9_uQ>Gj(I5R~_qL7a;l$FBY_1KO_vb)I7aJlj5 z(o>-MOs&fDISTv;U@BnvTnaA53G&yEU;G)pRhG~78;M}1hs8;ZirXcS-MnvMa}S?& zn57b&fnzMTPhx47xflh2j85#)Kg(cmq2{j#`lcO!2L2lGCSdsc7x@1te@AO8)lAD0 zc)ZQ$v0GW&vDT`KuprZwvX#a>Y|e`fkC*i4@jzPh*R(pj&aMXkB5)pH_wtfQ3rp79p&hkkMS}= zj~S~B2RdP&4XdUC)IwL$8v)}t{x800V&h;fh|F>rO9}0dH za5P}}KNDQa>Y)GYPCb-=Jv0xgLXWOO^TAcPACv#WgQ`HfRlGu|01~BGVIGG4oRuf4 zG!>C&QI_>l>QtxMUTt{qEY*DPfv*PmlJ($q@DG8%1BUNY)@Z(aTQ$F(!PCqy+8vXF zY_zy8`)z&7eO7b7#$VDOa;=?dR)ipKag=ii(Vv<3o|nx8pqv-5H#cpGpAVEFkmxRhIR!~?-M zHb^PDax3R$f6*ZBP;i$2ApwN3TFbUOu`NUhE0Styuc7$ zfZ?ZZo#tmpj`)&t+&E|yw_GpV+IRiM;rHk*VFm$u+~uqtG!PohiemAh_nWK4SC`Cn zPE{w{r)ujfpFOK#pl+{i&^PPY<>1!=Hvoper@*B&1%6ij_gyTkj>pkKQnvWp?&HE= zyR5IjVC^D+KVGr07$d-g_)&V!0QQ8u0r)Y6l3~K5xyR#(@3-FNHUXU4WnGZcHAwSU zx<1R_Xz;^HFN5!mosfB&`77zgf(DtsiO^NYbhNKpCoNNTo#;TKgJ_w@k^cEDgXL8RFx^gzdq>&L+N0zU@~AAbgy zlFL31K9262U@aHPs2Rbing6`)2O`Jb0vp463_nB%NIZ7JUc-&ZT9&B|@X}PH`IvNi zc6`hSKLuC@7(Pw|my%mvr04mt(QO^HN!qvbui*YLe~q<+g-5PDgmV^g_mZrZh4~%O z-^KgQ{CN)im%yulq5nJZ|Bn7jO@Bh5Gv+%3Xmyeq%rT(9K&=HkpO4$9^$%k8StZ3;fUXwM{}N4|)cBuDj5GrV3+Xxxq

X^->3r8MQR4{klfPgcoLa8e7fV#o)IlH9k?v37>gFdz?4*zs6G zG84NAB!5n^|2}J|roSh6zpNiGgZ~P68!+_a8#R4%59q(1w#n|ZeD(~PpN&sRl7ji~ za)O4px0fAuJ|V>335{criQCl>xT$m9@Nii~u^Yhk zCO!k+FoKr_;|z7CI*;b_f7w4w^Vb1=!{2uBuK-s7hQFJ^rQ}*SG=H<$o&8l~1)9P6 z=UQFJTZ!uh7sk2JZ=HmiX7pt(!!`W_yx-7wI&3Qmqya;JFu0Ul`dV5{$@V` zx@3CPu{lavyGD%BT)YJra*$5iG4}ZyWQx9R`(mumV94qmq1)jj=v48$jL*~=;6NQ< z_*euk<^CYQbpQFXnQQ+cZBf(hKB;bW?QVC*jWSYx5VAgS#&JEVK&~Ih9IzUJ72^fx z>fs!bhxtyRDIB0kDS%_Fue&0g>X~W~%7UQLpx-!3^Lq#Un0C7#{71lJfZ_K|a4G%! z&5v(l`YYq78(kv%-95OKqT6Jh^CZ4bjC`UhG>8CyT=rZ~`tEqO1U3!?^y@ce_uVPr z#{(wVNDfb8d+i&%|*OAF$RjZj*2pS&Mmb<%bku=P|-nF_&L??P1(UFlq9m#Fl zElCu+<)bmuK&Ca+8_ujpr8*w3fHTkoz@j*um!V=Ir@R|FDx7xj@3SxLYS8VrAHGbx z{RR9J;d67A?>cZPb-_KMrJw({&$k?gWnt{JpH=6vGX6S0P)()MpC@_eU9|0FTbN!Y`Mr2_#!UC=Z4+dIMU2JQ`bQ1Fq<4yt1-ngqX5R-0D& zy=^rCA4Car$#z7NP$roHqJoqTWPOT8bp7@puG^#Z%#7-l;%BqXSHB&- zV$-Jet()XJdb+jXbgPGyx^W!;RF#OO$krE$C5MZJf?xIrbUUG8?lU)n-vitSnEL)4 zT#C_4nDrn_|5))e->~6e9;C%nmowE<75XS?E#RiLpM9|~QCNoud7&r?L?0Ma#5uLS z!HF`?lwY--;XW}wx+m#&soItuhtt5115N-8e`~>|%nbCV{q>Y1JZ!uZ#lS>-2T%|o7QjK zvXE=r3V)2V8NSQb+i8DCofoqf-0xaH#dxunI~PIa@TgppE+k53X=yrKfaQG*cTg3r zbz=Fo*hVFbxV;fRuNLDSt~8uJz>yPT(-TL7qwSD(*y?|6wIDPK8;7i%wq;t-|L|+- z^E~*gz<$8g=da*Wa;;BmSDm!+EW+&`G;5v4D~a&b=vfQCiC6;5oCGR_(X5muWT%X# zVj0fV8MQI6=x)?}G=4EVKTZZ;3VZ=De5?YOlFLs(+4u;wXf0^8{)nMp1@oR1ua-4QNiEq2 z1G+nTuj%Jq;12?i1hf?YU+%b;%%^`xa;vpqD`tHIBvU6x1hV9Y#yQIBn6CRX@}+D& zhk_3WMgdZUUhevxv=Kv@&(v_HwP2>zMHcl5%74l3fKJCjbS?qE6uA5#I=RQomJULq z%dyKhsz_OjQr0e8n#eD`!Ta~|F0(%V5&UD|Uw|+n^{D?JU8jd~#If3lJQ_L@hF@%e zGcAvbsH}>s!=mlVdW5M?coH?36EE@8kquxz&1S+UR(aTqDKd{J-xF{#Q|Qd>{M~=F zZs!i@8~%2HUkBU}@Fe`@vcC)X+S=!w?^K$8 z^QyumQ5wQ3T^dW1)+?RP57`jvnxXlLoR=MEW#GerQGjW$9pF-OodW{CXsVjdvg<>i zmfD?V=Y3k5XD$ATV{I8H*U?xQ+XaX42a4O^NH$+oz(wKkCOi_OWEvw8i;9F|gJW~! z$Kv`oWxxQ5?Jx075VDuYE8MEW0r{o4+Kj~Ff&bM_ia(9SSSLSt-+I6Q7+s%z@N3%l zJ@9`3p8}>nC7rrHx%S63*dK4(yaC@Os^oOpYklq27Cx;dZ%PVCjuJ673Fk8cug1zq z-%=ror@r89*YE9}rTJ)qj+wt(!M6iD0K>;Oz@?aV`jfzZ#hh<^J|y{%ABxlIwio(V zBeVImmUQzjO#G&ZdNN)w!3czh>1u|m^k2$H$862VJJ2!f=fA)U&$q1-!0^!sE+yBz z!%i3p*(yKVHZ3x#x6}TCy_cIh$Y7p%){-01i`a7t@kPW}k}II?7N~*rAp?;_)^?m& zR&FT)TCg{Q%Ps0Ax#oAx(fsXzzGN%tv{*C}&2DAW%zdOODR0Ze2{`xlZWntqaC%>Amg3Ci!7T8?{1N_g+ zZ2yt;KfNot*Dv|Rv34M3i-w7^ipitGUvWfatct{@;6j-|?&gG$L)utI5*VzUOKzNK zp{XkTEIHyv$OGpVRye8r)I_hEYMkTz)J6@ZPZ9g)>H2&Gzg6%n_s-~rwp9QW1ExL` z!KE0xkN)Rwsn6DJ61Owcas?@GtR+3l`hegBLvSj_tTCL(3<`(Cqv5bPFIk!__R1>< z!OWS+){nQjng

njiFkKu`GD34SARGhq0+EBM~rf6dd(llIMh{#MmUOP5TszJVZ& zJErXBTsv(ZQknvKAMrl3J|vm5HNX(S(3=&^<6P?l^I?IQn77Sbv1Ns{LZ^MUoCa_5 z4Rs~S)WVw)GU1q^==1>c)?Fi+DSYuj5lo+-mEohnY!9u4eS95OH}q#?)~W7?xPphx!ezV)FT zd@wK!F!ZK^OUdOof&9GH^nic)m$1f5c5*PK8-{a;jImIWVM1FG){#9sWyhKS9Zf<1 z2k)2qejWTsUW`yH{m5}iqz*oK(~qa8oH-}Zw1Z<4Bd;trR2)fi;dU%ReoTQ zJ{?S^aXibE$^D`eETr9wbiI3n_sh6`3;g%M9|1%EZ^8Fw zJe#K(2R?o7g{|9U?Pxe2jqK93)`S6gTMd<^W4s#a&!p5znqK3Vb$x{1BJfjzX28%} z8+>o*nCBt%jOwqC-ptR?>kR1i1n(1iPk=uI>;(+HeZlvJj(HwJZ}s{!*Za|t`Uo!Q zPw+rMujb?cheO~Lun>9p_jxA|`5 z9s3liL=z-Mb4wz{ZYk>$0ax-#JS_$k7!Fn<-kBIJC&Y6JMg>k7dq+H63c>}PP27qK zR*+fhSuw$>@#*hh67+w-kF-w@_>X}n0K@O!gYQkdm}g)6VDIkpyqWx`zQD1IlpkDQ zy6h)-u$KJRv2Mn$phA?{q`o05kXX60PlqBaxSTopA=dp^c}()lln^zmBL6a5^eEp_ z>PLQLB%j}=Q#HSHF4yfR{4N1s1*`!KzuSWE%{j9F`CYnl^kFi3nvO%KnmK_E{gU-N zPK&;S9&C}9M|9rp+8U!bpu3y*ntpvAd_V9OVCYUl?;vGnV5d51?V;^I-2NfyDeDjkjyRTcRO5|rRblV5hYJ3)M2P`22_ zinR-gY~mIdi7`c{t}r@~-zt)|+=VRbc@;@Hlk7ApVr$fd&~TqS%c^SD?brpsX8-&) z`1gSC1ExOjflD#@URJLgX zjIgp;Cx))EZE^$+tE-DL90(FJ5nhQGlph5w>oye|5^5nQ(6RPtyUwTI-J3j9KfD_oLlV&yWU~PYH+)(wHMl>gs-lZx*iAM(~PgkRh&_QO2E`( z9=H@UzQ*^V|clql|uids+BHH~~Nl3e;=R4vw9IHYmmLbf0tS}Yw@`gBH zz#csjN#r%eW1)crrJ6*LZ_<7yQ{t~SUQLe-cB||W&YI9k;n|!l`J*n~t2N(uz?b3s zVep>-&jN<;--AoZbwBCHbi>yq8pf&IQI>Wo>t@2x6h_D=%EBGU>XWFlCCavNau_za zi|uhNn%D!jYJMhtHM{N{3%(R+1`I#TzZUQl*cmU`aOgZ;+inIt&cJ&DXW%?>244EB zr1c0P@^DitAvr*t*w2Xual%#^Bo^c$!tPW|I~{KRt_)=RKA!lxroW5b(%W^%<-{fVub`0N3NEfrW(cDID^M4uftVEe&VOP&6VL|!iusl zM6i}*`6JjB#$#z)OvqRQGl}Ee#j(6XeDE{4m9dpYqhwcfkB3ez;c}8LhR@O$I*-m<~vh_vW&@T-z=l;G6^b-xgX+7h11lkBgB|gm5b&=TvF` z6;^7a=6`4KPFdgX0>2OV0bs`0BfwfT4FdxD=ybnHR+8G4xjVjc14KJrLVseG*A?rVw@iFvR32 zRz!VtjFQ$vju+7Fa4lfyehXZRk&l}5gKyX49|Eagx}i=EfJa$h#loOm zPJRu2Hk<9bJ>TIyhR)x>KLtY9X6a5gTvWynNj9XV7@fLNx5-5J&pX{uqOCzQp`gd4);L0*ECd zRyuLw(ZmMD!1A%nj*Ts2&8SuQH;ReVLpFgy)s3baR^w(}k6rL-=Hb)euLAo4Q;*4r zo}_FD;zKM7o~A#8@v1Aa+rCHpef_`>p}6!C&w3QsVL8JqG*4|o+Y^gjldlFNU7?OB`9 zp!)ssifA^E0-}iVmp!ShyYM|ukZUP{K4d!5YYBW2_iC^{^kXp1#z=F5I#%0QG=5RH z$DD6w+v61Q7GM=%_-PBiH|=1ahqT9L*>}_AT8~)EP9(M00OnaBz#kRd=eq-XyMp&g z`~L*I7x+0~=)D$vZ|IokA@nwGIGEn^|Bjw@uC8DG_1SfNGWaauSisOb1zbulxu)OW zE6Ho;Q=GCMKq7sowh9HB%yQYrq2&LEy7Ba#3XjvdAxQ9@lf zRiRVeW$s$~m-UexZ(Gr>adYX245d3LiFJRi?PvHNt{kL*) zq5a9I@uJSCk&wJx%dSw?1)(vjp7Su$50q%(5LaT`O^_rQHH~k-{-%g%;I5-HnE&6( z@-r9wBwz_(_&E*yKk}p5NfZ9eZWtxQVWV|DHvTadXlWKwa*Og}gqjizeqOjgpudav zoA&rA_{+fSfT170@xP$I&X@Ai9Ixu;DE6D3z|j2_xRjiF2D!wyuE8i>s@t$# zQfe=|&9>g7wrA+tR->dFWp>_{?V4`GP5QmE?j8kx5^xG&=sp~L-!VbocSrV%C({-r zA?dbXb9}YRH98E&ED3|r{7TsOLL+u{JTFc#yE^#Zyx%;{IQ8YE&xI>z}EoN4&MyEH~g5V;cIsLW|$He z7=5{Iu4l>|bh+&e=++AbTb>ZIp!%Ro*Q^-@u%7%@mS5^!QHg%4MS;%3VK zgIgqB=6P!v&xH7Nudu^#e2VjT+i9^^*uS*xib$DPsJ?C!fS}ChmV0uSuHPKiPE)^T z@C`r*VCwg0a4Dax(CcE)%0uOWn_9`YOtkEveqN{gsr#v9Y3~YI&A*CRmtjmLqI>g$ zfGks@rc!k5U!F;i184fo>Z=qzf_PTPGSaPmP|E^@WmpD zGD$C;MdYr`4@rQ*FB4Xc;NUL%jyud>J^5Gu50PY4xLy_E*;c6LJA_RhVxM9kVGj&_ z$FErL)j>Plp4|_ZfS(F915y-Fnj=2bnynjG`3AsMR&$m0SL|b4RmA^)Ab9T`yu-Bb z55a#7JPw%leFj`guJiZG6|3=12?Be{(Ytw?Zw1>=U1&92qw7(6N0#0Q@NvN5fT1@P z{J)_mu0dM60Ktp7RP`g+5zyNayieAFZt&ZII{`!Q-r#$4pM5V_56pT<{Wi6(+0eRb zi>YPD!ggxeW?cc%V`W>I?F^FTK$raiT}yYLzy6eh4+3fcLw9)ay;*UQl2-Y50E9QwuwmWAMG9W1jz(9u^ve z>^PWc&mlyqYD+-(o#4Gf_wV5U5}J2r>3ZN&3_bHai0-N_+vN7(Gz_+yhglCH96)(n zBT1+!T>+gY-ebn;3h+(9nSiO^UEor3oqrjkYgeq6eJ#_2g(YS$J@yWq!`XHAJJvpK zQspGSo5QA?j(X)Rw#k$l6pp%~@JKe`XtAU^MLijrS-?tQ|BvS<2^+4ivDFRA-mI;! zg#Lk@x<9P{)%-}iq`?OPwSeKbHTd3)yU)l2Wfu zk!lB_sXI@*3r$! zPll|WM6$$vg@m+Wg8Zg%Ut}Wy_=ydVBqV%DSmJWyF(7K=;)LuagU5%-D~uPsx|0LB zJx4Qrqvn^GDSdLPcJMC(=K+S_?}AI26yy)>-(TjGk!ku!qSG8N$FJX_DTUEwMB;Zi z9yYuxNgmyistB`-GBLu>6NL)%Gfk#kIes0Xn)v#3i4qeuX-Bu_&$>I?o(15QKowy4 zn*uH+*S@lLl^BJ{SV}jva*dCVfx#l@Jlw4bzM41uwe@k&tSl8L~Pma11@=IK0mH{n!9S0Wji~)uH#9pwHyv<8@;a*-iT@*h0$$BcLR?~Pvhs!C zMntUjsxKNW{#*e+rT1j{sRthqOacr)8^EO)eNg{(K`sp1J-6jHk@pUh5%yaZf}OBs%INCq;=Z?dXy>-O3e(3f?q z7knS^Dq#5gIQZVoKl3#6Q0xxQY2C6;@~m#~m)nLbde7P)@YBfrHRtJ*z?T500#X!^OI|PIJG&mGtmc&Ua*P)p2;SR$ z(0d;S{|WFcVCwm2a4F`TZq{j2&s8fnui4bzwtTiEM$E2zzDnS$612JbBFE~?t1k5; z!i7o1;*pS(sT0CGzRE4uzsR6nufA<#{KrR?2nBA_{m@8z89DS)@HN0`fZ^|4a4EU; z1Ms({eQiJH<}h@xvxT_}m34n!HAynj7lp}LZs&;yX^Ughxmu~)H6MGRW7_{!@ZSM{ z1PmX?->dnkpQ+E?JA$|@2enhS8!$V4h&`9B_bP4|&%4&Ec`Pw%2mx1#&*KsFBJ5TZ z)w(G!!^o>mSBAo&YEIrLFjAxP2ByN%+9;`wQk78@L`2Z9bW2l+dbuE< za4TxM!q^BLqQ&Rnh7g%GUL|kacXWMr!mp{%?cnzVy8u(4QTOTkXsBy>=Tg*3Oyor3C9N*~PDsyE% zkz`T*E)Ik(jE9c9bUiz%hgtW&3Vs7{6JYB3Ah?uV`G$O`(c|Es1!eFuC(D+hP6>lN9sxJ8g=N(rsZSRjcL(+VzOJ9p9|ArRm<$;D zKM%e)`4%_yi*tK${ZC%MW!=KowiPn`y6rb~xZ6um;=;_1uywDW6S+`wIJ3}52(<(z zhLz|FX9pW$snuL+^`^vL zfLC<~@9jM3y*Gm21@r)>-3$Lu(>3jWZohc6hxGfw4c~E5h_m>`Vl2@7U2YD9+)Qxr z7V|P>Rz&qmI5B?50lt8HgyW8jj&%{<kco9I7Q}IRYpW_lt8r= z@xrOh=E>Ma67|$gcoOa77;(K`L4vfmi6$uM3YAT0isepqZGhObS%lqtG?$`9+3EnUC z{|@f%vaKj!=pPF%#q6K`&oga4{joBn8-FS$4_}l+J15Z#2xFOWQi&wl)wth8ikn9)%&S7w!d-&At>{gVF2z)u#!I6^!?uBR4TJrtAjdkF+IG1bOp3uHQMAIml%DTv zzPsVetdIACKL$Jn7``ugK=ZvNh{t(#5I@$m8}i#@R;*grr03$-Twmt?fu4)siCFKz zJyvfvHebFZSF*DXryj{r9L;wT2F)3}AQ7AB9T^R$$EZozn;ZeoTrHKkTCHkQZgG;F znB|E!wS^hE)jQKcL6p4E_P)wni@#=j*YcdGVprPUrFP-hY;`GVxH;M-gE<*@N98fw zqsMxa+zM6cN|vV?-W+CV1!r~wobxy35nD5Xj}1F9Dk?W{gCFn z;lb>9oCba@a6Dl6J_}q*u6u#pQ-p0tJ5*0+M^M&##f-a>w5SfSWpWdwNITwbLia`d zRFN6PP8ueWnv#fGM&hGiXMaT#fllwkny)B zJ>h2~__;tQVEB1H_g=d}zS1&o%$0gPA zDy%<`@Xfv=oXZHO49E#B7A{4JJ&@+BL^CuX7R3Y)Lp;8LZ^=nUN=tFYONv6wmLo}W z6rDbf*U{;>aLUJWxJ{qcdUxyk)IY4-PwF!fd>SwVF!fmxe4nd*S8r^U@SFhx2Dxk{uz`*VJ5!t)_5iaSTAe@EeDpxaoQod=e-`)|VE8C_MDv-; zzEezo{En6}*l<0zd<_$5P?AfR;{7c4ClC2?5wqus>NM714BEmsIMM<%~1&?&oxfu9O*OG_#MSAd!p>J*N3dfVT$7mkySY2VV5i+5G!C)#8V7k zmBh7N@}tK{i^7k{>`r%nXWLWF0P1`~^Y>0bU-O8oYiZ zVl%mD6kE;3*7kCOadM6e-aChPnEqG--Ugfjn0h}3F2&qG>-*h5{o{q6AbUm7)h!<< z0Fuk3`JW-{+H#KYDshxsJxauIHc9OZli~Pe?`W2Fx{Exx`I!iMAo-c-)r(+^5knv$ zHH{5c-|Dw;nvim9BPNnQ=X8aBZKMptnF!gx= zTuQEc**cwnt3%eVhS|(AKSAduGT%l9u#D%?B68tcdZ4@-p$q(CgH(bhwSwD0jFUZE zsYf1Q*-A+nR)DFys!wATKQI=R`+$l~^~T}Wk1vE*=RXVl?YGLsRz5XQP2(FJuibPe z?nc2S@W602M4f6MscyDy0$~6H>_$~%BTtl#uIi^j{U6o!lW{T>d>n8%VCp|3_}+{Y z^EBf{LN-X{(+x*a&8VpAS6Q!D3~=4$ z-weM0y!qp=asDowY5a$rRoBTZx`=>I6*7w|xeupeaooXu!+}_t%o{9jxgC>9lN3WC zSNyz|vx7Wp+f~XBvr+YoZkL9~vg2YF_yS-tVEEexF2%$h?;j7#ALj=%*eMK75C->g z>#gL-f>Co6nW;$J62zz>SF;=ek_>BEX-;-VskvD>g7vKCYfnH|+U=L%zX9F_3}5NT zHD9^fZSAUqRvuw#j7GrZLPtnm%@M1?)(5?+ z=QLj}&^7DA8Q@<6&Ib%%kAX|c6?dw2Tk9%9k;pV^{G0IgCE@E@)`J1kmlF1rD7|@J zA{-uy9}pIH98L1VMZ~mZoaG_@!1Iu0fg^pQgv_4UtS8-4#}BtT+qoUxxKkd&9X}9< zSiAQIc>F;t0r-VX}&jY?HhnIOoG|#AFESbH7Z#E22_TrYu?iQOl3(5 z`^iKs6ONX7mC>qFTBQ6pwtC+#Q2A$j=U_z_DjHIMhPOq$5Q<~&`L;(sGTs-R?af6D z{g~}OY3E&H#~!p@?9F%D`Ijqog-VWdFABw8RAu30m?K}(ONA7EO;6k2-TdpsJ+^nR zyrmHP7v@bdvnek;7;hLgfT3C&y-%r!lsmR?o_hjk?X})E_c(6>|8AkTn15C7W}>X) zP`}Q0uebBAQ^_5~45}DWL0WlP@dhW^;~utSx7dZHDDBg-t`W2_TpucT)YQ^&x>apV zs&)j`BQa4=M-R87=iBZDcJj#liC(9H zI#sO1O;;5R%1^9xPs)#GTGU!ZcPB;i-9b#ZrOuJWLl2+mePTxzcGq3;>l>5K)eJHr_=mZeYQG3 zut92hS@ZKzKu^|-92{H|fU}owVhAa}x?rPRC zf>wK6#GE*(Ac%N`NffSHH0cI1Tk+7P>J`n;4(OTv_6G3p0N(`+KYs$3V)UAe`rQZD zZ#)g%|5}rVr{iPM#13nxZBXm&fgM&bOm<2CO&}ibcsQXFWDSQxH$Upc8Ci?GwBRA^ zV_3!t$!rtLEAmBf z&hCEkWqm8It^OL3>9|gq{<70fBR(FsJ{GPWZeP0Lk`LAB(2bKQy}yd*PevN%@bypbXlGIOg6NkSR^ zX`$g{JT6s4ZO%^)QlmLJ4B-fcAlEcs;{jf0(ZO6+x{bC|3e@!g$5QnWsC zjn%kcw@1@Yv-kQn;B7z$VA|sxa492m*mH@snZ5%o7jKC)7XXe9)2*9p<*@4~ydB~c zW$ie+0=j#6uNgo4z<&e03mCd1p4N18#i#dLclIxtgR@(s{+twj=Aen}bXKhu{(%)#i(=qejTo!mk^6G8{g9Wq@Kz0Qwu&C7z-GFri1?%{P<0ot{RDi z$iu6ndA@Z)o$L?XZE>si9ofe^7;74HO{*!O-^Ke)d)x}%1KbA~`j3HsK7BlNC3Es; zIq3R44!TYKpVjY|`CJV?5*Py*`qP5%&3b5_W?dxi5C*U!Crww4HnnfEy6XmTD&b5o zwa@45dzdQm>wX}hyMy?Fk8^Vp%en5v7JMd00 z{;8KaA6@}|6>v3R>U}4;lw9%*iNj8%XIRZMtQ~`+T#L0MAeX(cExV4yYNfp!-_`UE z@IFH?vKO0AAOjeB>%pb$3GBA_1#!Vm|1!A5G@tNaft{Jt^08vQpsSjnajXM_k<%j8 zK_GZp ztkY*1HPn9zAH4zHhF<+%nIFf4F9A*k4BgGa_hw$0r)j@~=`N=gvBmM{%2ejc09h%v zS|1IOQ$0>sB0`Shf=E&WqWFuU#;ojm@t$sn-2pw}=QZ$mfj4&i6* zs8CG(?*J|X41dpqOW7afTinuos2ucQ{``Ccw3gFrzY^LjF$XXf?Ie@f zPzD{kEJ=7L11z2NBj=Z*LPXbv(}3eRCu8R-QmtVO#ng0nPGUA74nJjFsB69L2js^ELm&*u5>`rGG!c_10_d%b~PuajPH zx3<@_KSX5da4{739e?UMXVC3_=?VDhfu3p4C%|6-_5p^U(LdMxMuIrY{rxXwbv|hF zHhovIR=zI6rc5|(#Hr!s_GPxcP~GcWV_R0$`?`HQ;n&pX zI`HoT-vdm2-T;?k^a)k{;+7p$pEa10$mr;}*5(*_5|9Q)wllBqRo3H}Cq%=AiE-pw z647RSNV3*d#fZg=h*cRyoSz)SCAq*)^g@^x+Zkj}N1po^&1d}!nhzNV^S~DaO98{@ zrr>)s&w4(e&*j+tXp45=g`w#J>47m;vuJ>a(*ua&i{-jkk|v+>AY$+^4(_y_xK;Im z=4Ti5OuM}V{x!{?dc7Xp_6hR>(KrR)mi zq1X5G(>{n#y}A2i^(kN5^;F3E80KVim-C&dgYi8`Me`8TkPg?^97QD{6Bj}GEb!M- zjNjdG6Uv+7B%IE6&cY6!%{-hJYEWnQ36^^P8qEI}HGk6YNG z_h#KO&tQ)CIVT>F{A%Z%R-9Rb}^R3cJ@?g;P+z>$EV+Z24CtKKWt za7yT__F}4?6r=l2+uASHM$Lm8s4ohQuzfJP+o(8?0|EV=!TW{&ec(R?9tI5kCxY)y zea*9fy{8Kw{j1$MvVXO$s*iMgr;tLL^U*-?VZbQB(47q~#hj0J2J5U@@7q>vSj!@m z={Sz*k9SHc?2_3`7cfjuj zegGIgo&%S%E?8%re(^Za?_{Hub=l{!2wsB~*~m2NwIjsnMXqQ(lduCD86-)5M3An( z>vkypW!5igIQV2>8er(Z1ukVu5Pzz1^`ZNAKwmBb<(=xU+Lz@%=Tjsf&CkWGXGYdB zZwnaxoOI%Gr2Wj^cwwX@lIIkpk~KsqWs5lis9;MkR3jSQY0j5i;ta==WQ&#EMzTHS zq2efrAf9uo0@L4eG5yUic9LVF@mNKie^vlw0C&ug#PC8E1+t%)sS={JjaccP;w}Xy zrpV!@ldY&v%babbd<1E7^KZ13wNp0WkIa z9=MdN1N-}J{p3_@*AQ9LpCE6Am?0}O46;pSACkS&n=SOp=}YNCVP znnVSzY;ocXVXffi70~@SH#wM}%kO2V3hWSpEC%tfB2~$XK@93b6)94+q93Hg52L3R ztG8|SYug#_XHuv-?v4_&}frF!gB$my+||Nx$jb^_j-!L_U9!gh6Tk5Tk}M zvTw>%kE16w{gjq|;>vSyKjA(Z^b;m75#L^9B)K2xh!r?o!8(PsTK=;q;78WQJ>bs+ zF9L?&_k-^{0(sl^e)2XgTRLIkqIF_ zmk|R4F1}}D$V4)FpO3Dv=BM#B-9Ez4so*PtR>1Jn7JP5kXY(}cC4NhqrS{E)*wHNY z`Ac0f_A~xcy#d`_!Fz@7Pr!SDp96;OOTqVso_QL&%NL%#d5aEL=?6$|Zm^yi%L$_| zG_t4bSM_?feiOlu0;U6o&N0FF=Kbc`M+Xy*)=hXR&1lyVM-8>-4xwf>1oXOs_es5O z0KWye9WeC%H~8MrG0#4FehNb!^qD&K9!iDtY(VED-cwIc3Z3X1$iIPsfT8nGa4B1Y zJmlm1nYsR~Pp zselZ~4HdhU8C60cxB<>(c2z`7Gb5t5nT~L-R1G5uTQc9PM@StHoo}mi5XXcOw5oz@ zZ1-BbRQ`k-8}(%>idk5A7+#L3|HC*}jEII~L%lI*cILZ7L-}}qS9-+na$|TZ4)#WC(?d5KhvXg-6zDB;$XBs`NqA{!L; z1WgIe&pXgF=Wy#y+sX$D0K?B=;8M(ep?`eNgZc6OG|7o@tF|0D+-hd9yeCYB$Av1L zNQ53En+XSSx+&&~=}4s)wXCn$&LW=(9}P*(S0{AMIj0N!M&R3k;p;(gDLLg|XkivM z$%fJ(K~={4mlp=%txTQ6#iD@DhmE8}S#gqizOl-1bw-~8W`Dp(Fr9b8jjT{fYbaXAG071_RP9ZZx5 zCb@b{Po0 zDs(5li2gM5A@&xz z4}em@^!G?`DY^6x!R@_+-cDB?YXse=TMtbd;3N==6*=N3$62(PnK%UdS3;)9`wj&3 zxAA^M|101-f$IT7|Ht4`{u6yUU}s1~!Q$|t@8fY@$l5jzEMGO?hXE4-!&eKq6cgw4@xbobtXqK}yR-|o z|M%(O9`9;<<3~tqafIC0M`P7lgFZlpmJF<99(oxDmdYczFj`V!Z?Emt5PNDUK}d#1 zvl&5qD>a|H;KQ`vUhtQJ*8s!kU%;j0lK-yXxJo1*+7hLIC*FI6NMKRj24=hx+@Id7 zKPV7S;{eS^bKJyC1V5!I1_h|%k?_zK5U9LJci=p`gh-C>8hR5sp|K3j9y^1xA(Q>IBB4d5TWqHBc-o2c^BC8C`T}UpG35jUHU62dDQ=CRjJxW!Q z*qy)Tk8lxCI&0jMxl)Yb*$Rvi7ZidJ))kYD(cR>!v8fTVs`1Y1%k5Cu`5!@{=zi5M zzRK2ASGgOY%XLsbFScu)=$CD`hCfCl`7|K|$In9iCHcQI(bL_T1eHK)&R#SUeQ3Ur z#04uqHjo%t1w~0=#f=x``A^O{%5jIrZnoXqWzCwU&gXJKV1{4;YZ(%Zf7;XRn|r`} zffoSN-ePNGLsO%Z7-(U4 zhMLI)It;g)a(AfzSrT=^)4iDz0yQ=@ly;YtOyhlNx4B|aXtKMkb`VCjyg|voA<`7K z%PSLWX%3e2Z`$@O^=I22<+n(~Fx?(|sIOTMUIqUR@GfB5BZ(U0^VWkvYpNqeIH|?t zja=+IgFZ4<5>|1J;kcC_iWhRK%tty~K;|cTdPu{?F8xkhv}~;J0Y6KiXZYCwej#uP zVECENZA*%Yce1@-yc6Fp!cTHb9}VhNJ&C=_?p4$M&wqyZifz<&CDu2Nl0d<6v~4MM zStvi2VqJjIXed>o7KLMC3dIlC;ZPC5ycJF-SbccTW$vJ=At?;}IH37ohe<^m#lHDb zmB~NZ?Qq+HGH+n?8k?!df#vJA#~*dkd`&H>!(l@1m&L zrSTU%T=#1??PS{VZt(8|y8zRUd%&gS+9%tzSS6i0Hi;d@YU`P46^P<|$1{aFtYw|x zuw>xhAJ9v^m$ly*3_cb(95D3$A7y6(SVvVg{<(K%-pqS>FL}w!o~GHlBEcLUovYutepBZv*2426DM$OCWMv*JJ_erA z)(fqyemJFZu*$&4Te_GymU!AnupL-xU|9qJ~7iYSdHH(*u@Qe;!zd*62htzvm(uD$dSdWd|594Gbgb{p8bfRfaa@o@S7oq@#Y$t9dBm+^ z>*KIPI3>`$FSm>0UWsSZQ{5_wm42s=tyLEUo5?95zo)~Gv2WT4z5}=zF#LW2TvC62 z@eUtDD;Ywk0vQ=bl=-IFbusoiv7xjj8eA~z_-W2YY`F#3<$m!{m}=9XF{>u^81Z!o zy0y@iden!|e*oBW^zpR>T++TNVg2Qv%LBf)tXw54XZw{hxIZNyg~Hl*wRK>29orRx zX$T`z{aE}&oF%cSqBU&C{L+*3vi#G~)pZI>llh}ZCnl9~04tgevlvrcB(q=Zw6Oke zfsb1F5I*k%e;jxU5bmVoz78&FO=Qn*_LuP2y>atex%W9A0axH1r!3^L2|kO2Po{)@ zbI^B3`9t$R4!7E)e0M~7NI84KZv<{SEMHUq=6O`Ur*xo%NzMbTVg4C_EdXAgOrdGJZ_?*lIbLS5+m23%6EoaBi5!Y9DV zVQo1r4b1gt1=12kzc(WKotsbG>4HFFhm^ub%)6fE>Y5R@f8$@W<(vjS2bd2S`b(ns zrkv(^1pPIghJ0;J4P*ydcg&OB3;hiPmVp1=5xrZ;&y@F3@aKT<0fyf1!6og8{CMW> zZyTGphy}{#C0o|4-O@BNP}ilV2n~6IdP-sOvx^6F-V?0K^Xgc5#CLjy9z$pf*Y*<$ z_fk79YwZFwhxI}%J;5a%Yz^z9<=rfQ)4*GS*?=TzkKA@J<8u9K5xUn{%WJHw=W`9i zB@F^f{$OU9Z!dY6dGkx)j{@HSOu3%~m-J@jN6nNw_uey#{zrKq49h!TirapRwl)D= zJ9gl4d%h`^W!26K>8JmirC$d=8W;~4`jf$rMgK5Am{FX|W02l)H0jpaA>AJGHRJTN z;I{yuk7!AK=8n_8`s@rg$*Wcdp1e0$t2S7R&`&^UCYnh&6Ub+^cX0+_`}jSub$-A- z<2Ryfy_apreDDgO8ZhM@2`=g3sJ_kl)zFU$n`vofEQw#aRXr?p`0(XyfI6~`s;rp$ z%ykASuIP|^&I!xABg$9ija}e30k;B%?!(c0GmgyD&|TkYs<}tK&Gl}N8h>fRTJj6J|HASKA0^-oz)-;OaYFRo&^OO4 zAJWrSZ0p##Lxxw6xtib(s79{i7+`whp?M)+ zw?uS>uLr;%2c7~9UnTE{d>i}OIZKb+?{wpmZe}ozPZ%eRb=@x4jn`>*W2?UJS}!OW z^LgxM3K0zyx}IOiA-50<3@=%Rm0@0)SDB906T3adkp@eV*eLN)Mg(It#^FD(vI{H? z1B{!7AmqYAryP+=xqeK0AB08Pe|%V;4H3Umo(sTt0oMYiJd^(xmZz&9J^4URBn8>8 z9(RKY?9aB0=v6Ppt=lwe?HnoO_S)|*MH+iK(Xy%(Um}YL4;d94HBtedaN>_B_ZzA) zMn3M-DqnFo8Ov}5FLDo@aPXJhIO7E(#%C#?oN)7fyro_o_s&m{)~+Ffqet zfU$9qNa9D}INaqo1G_CSY#*v_msZ~4U>UQ5QUu$@-o;`4?25`S^|KrNtH2|Gsh@@q z!usin>SxaBN47Wm>stwYwQAe??O-y+_Ufzc>$U3Df8aqy?e?ta-BA*z+nL}razsYd zf$%Jmo~Yx6)vcqExQpc!Hs=^k%Aq;EWJV&9$PBZGH&8Wk%mx#Py9=Gc3@C&l;KlLb zILZ;s^_sOe*e&<+Mmjd)X-{-JPSdSOFOSE>$;aLBaZW=#JK?r04a?m_xy(9u8~7gJ ze!!G_;NQb?_v3eFR8ZuRC$H^Zwgq3#(KJ}regb>FN1YWE`-`r%KUU`yh#~#JJk2hY z<9dSQhprxt*0LV#=)tz;wyi;KY{Wf)0N-kC?*tMmRy0NQo@VUGj} zP35WTSR$E_qW@YspS4xsF+H4c4=#(w0p+RXD{1Eo!7m0bjmjwV{Ac>vcgv=hu#GhA zPHWXp>uNE^;<~Ve4qNE@=o=Fy8SVZ+dL|UxPYLNAB=44p-e17&e<%xEroQ_91h}L% z?O}gm#mZP-c0M*8NRh@vGsvRU|(6%MmiNDK?zgs znIYZN$=A^B0>1#*2?#Z5=Z}L+`Zsi!QT;h|ufUw+Xu4ey-2>!n=)ML14)ABd(ER}X zKcR~Seh%Fmj!AcaM0df5*>SuAyc5_87`hLFOEUJ~eR89yo>#6}vou6QvUs5H#Q8?A z`h%8ejjR4i2y=WM;#Q1M3?m5Eh&W9b;Z+6^Dx&^LsIPkIW)yZ%%`Kd%as7->nLq)E zXgl{?ir}yEj7QSRW7Jj6xVxSC=B<*y6KjX2ndA&qa=;~&3 zy?UjLjse!10faAzBF`U;@^2@vTJn+nw}XEixB?IgLH^*9`inD8JFM+k6NcL6FUq=J z65&cI%lMirwe=`Q<4Nuc3uAM2K}Mq^g(8q6Geay@N;EUiE)XTHQ#CbsAMQtG;2YHMem9?hZ|<2+HB zz~YuAg;P%6`8v3+{E~9gSf*YZ-o3T02>ICsy;|x)>ghJ{dw@NF;pZFRlKv5$cXIck zAu~kVktx#Ys;81pv({Z={TQPwd{D;S*kraYDX|A>(ep!Dwd8joqVFr+H&51r50{?- zL;p;0NpD4RPveiu>;tp(jVV^^*F+uae6*p~J*(MfiwQvzi^viVd^Jqh9@SGp^M&KZu1nZHvWUKFriW5^^E5`F4pEcS(g$n{{vM~lw# zF&lgda57-{xC~rUvj27p^__&1))%FU#Qp2KpJ?l#t}9=FQA`GIhS{ln@nc3PPP()w zen$w&!p)sufJX$ZSj2wV&peu(xG)R*yxl6$@g`_=kD2c~u53@#OySg+x`h5;p2gDQ7qsWU0a#%fs; z*2630YwF=o;2!}tz2DHC8xQHe-x;p=trr}*pEPu%-duk$etYWmxH=d=aNO%0rPkfL zfKVA@5@%}MyefTL%>A3YKv!eYok0(NC=-x>uD`_nlX5@7tr5XFD>CV&x_X-3njag? zS#+_Jzc78G{Rid#k8%^4Lg!Tf4&~mi{8REvQxvXJ7oBCVLM|L@kG1H6rXgvj>n28 zrgY^3|9E}5GmXngGy&KNE;_X$Fey)Do>%#){26-be-n(0UygYd;jg=Uokhq9Z6`i5 zHLP+tuB7D$36)ut&E?|MHLA>EAC{Mz`n>Y_jajMRINpLdzMRCNT+!#XzC)MP`Zf6s z{t~Xws+^*0lzXjmVom%8k>Z?MXCRx@gx=XyTm zzleAq&86wSpNbm-{9fe`=3Vg#O}W4A9`V~l5Btl*as0jN?W5e5{M6x;+?LWrAEnBM z0N<K?H#Z6yP4Sk1y1kbDZA6p-?{qJf0BE5n?MA?4` z&5pMvlrO|GFWyj`;I580ZhcW5iUVwr z%2A#w^P1hyJMPnTZLWZa%zs#=9wI;&ZT=VAeG79{Ki@B-jD?&`V&HfR@$)ca^}#bh z$}OoZVmOq!SE-`y{*79OB*FprJa=YQ;i6le)LpJe7bY5%*fMh+gqoA$YA9T`8gPq& zGasY~DtWc?m*lHtF-!#Dp^;{9^sI#oULxw zsn->9Pf^>)gUu}p!#;a)>^YUS7`n%U|0i^#@}7tfn;nN28WHIcg>Jbjtmj_xHS&-zgMSTp1Tb`; z1((#1JOn{MQE9{v>M{fd0l|svU&;{7ZrEsDM})t8lv)z5oY6V6PQ?blOwO>@?udRm znWaAndu zs*0KBk)>eBplm(duR~X|nB~`Lc4t-$EOwH0UVX-?%0FYQH|{jtrI$_ghTvYBaam9= zYK957((wxOlZ?Cyx7wS4gF=xW@Y|!KCz6KX=K(ycfqKp&cmf(0FA|>^ZaF?bSRD}S z3`UiVt%uvdZNK#V`T8}58_2&ZeKNx968ApjL*6FTE_ufx;<~WCT2tA6vJ89!fFF*& z`uYf5lJQS^d5*r|*0r0nT@&%~j|1`XL8N<4lZ2}t(0PZZK}*sMfqUEMRl&Y z55xOO^xc>~tbADbTjQgrEXte<3a9}ll{59p?9_(nZz}gUI#wZmGr4E}bXYHVuk7o` z>%q?jHUpC6vp>BB@zQ?yEHT2`Fv9wfb3bZXF?>yNy^XVc%c{L0q_dwq&HV5y@V9|K z0j9tH16)$>{mBvYQb%X^#&s7i+PJlQwuGmE!!n5%+j5QgVBhdPZcSap<+zRO3XiZ8 z^fg9ce<Ncs`L^5Y z&PV1YWAGsr!_cc-U2Cf~XqBm%dNi?d%3@2gvbtNTzlU;{gI^5m*(wU_QR-uCM;inb{&#G1%ZIm zqb>_B62Bfy!SzxwT|T%6mWv`^AI<9cHWRgosW>B8jDNBHpu+(I#+@=KK_7M zfCk3(jJiMzkeeYdIkLvBEtUYPO7h^WlHjWQM&-N|GDSIRzZBNbF8DO%_yYKYz(as3 z$E)Cya_2EqPr(KM>aK0*YOLEB_4*#QO_q_fxftz0UEnpA5mcw;_QuJGOL?wA;;0Q{ z-oTXywh~?-!dQ=;g&B;pttIUJ zI?k}(#~&LGRq?=uu+p*y;fqsx4f==?-QDDC=BiAy|@y-}M0f9=qoI9SuoCO)hLLy`& zQm4YL6Co)Gcr)pJDTNDod*KMa30LKAU~!2lcVU!k|{D zm;1u@*cX*s+T#WA9|Nxdrd}FL!+Pn8?hEhF(Yu%SFcWyM`i?6?_Kx4X)^11UKg^IR zMjh9Ir?TR?j+e)!FMS(@Go-055t3HfRVlo9B9UVrcip-;=aeIU+pEA0Ak)!Uf(5RX z(@l+CuUCOC;G~qWx*iD2(F32R-`@;=2XGf)%JB%er2hK-nvHAc5#QzHzDQ`I)MItD zTOa2_PDHKv&1Uxy%*vKEP|u3$@jyf$%kRE@N;!BVFdQ)Smw`*FjpV7herva^+_;r% z$2HVv7>cc|{YRn@7Y8PxY}T=lXu|9sQpvbthM*&r7B&0HL^3^_i94avO__4Hj7_D~ z)l9ueFVQnqp;^6==k5*bX-~w5wD)7+PXgZp44>bN-kWh}o@V^5-m-G*28KWe%_BzM zan=p7>PkjkRWRzpxmwEE7SSs&&$i1b@Cm?ifT1@BTvC7S($N_<$;sWJW=dJhrR=3T zc600R)#)>duS0q3^foio9E#}nlCS9xUj}~w_!?m7J^}u(=+X|0JG+;398LGOW76&Y zYFNM6?Dh47D)2$TP{7cg2rj8VJ($D0fYTypt_rK;6zc(e^Ktw~8sAI@UAtsOEzVGZ6@ zgFTB?`*2vk@~SXDX_sd3(ZD#s(3={)H{;Aa&3J=cpSz~kaYAge^&Z49f)p3bedTM9 z=~r~t zrjr<#WBwl$!>WBGtmmF6U#aI?!M_CD3mCdDMDI=iY0X*34x`&Q7Xq z+RT!)SH$1Gh`!X@0q|FW*8o#*Z%6MMF#+5wUfyH} z6#T>Nl_k<0i8u2I*Ea>o5U64sViwbfR~Vp4`>@&Mg{{M++Kc*omCMHpy` zyllI38dr0ZxzBEYJmhBw^je`O{r4L1F92Tx3_s`Ah5Wo5$;;N{=)0}o(s_a52M0U9 zwLg+z(Laj?kK;cQuI|gTzN7{f6&EKl=_natk8^by)>(4>B|)+0XW3R*IRN-L2cTrt0U^(pvuIsl9RnNPhPHd*D9+UXH$# z8Z`aTJWYEBBS7YC+H;N7y#`$XU)LzHf~ZxAm^4F>dLlZt_1XSE7JLFQ8IUBO{q}nq zX`4FNOC0DLtGk9Ad%zz7z7Cjv@mFw3#{bk&{*;AY zS7+y@AV83G)~?-})!?%d2(0^O!~kFk9>SoCb5@H7;l#y*d?GM973WYsDjM7tvGvI~ zUO|;8ak^Cl{iZ;zYy%EEFiyHMdqD2_cGwOJ8nX4X0{lFn6EJ+=4lb!bd(@ykgl`GV zDQvgCBDxV9(T(W-jkdmF*Wu%h;OF?CV~?iOwM9){GydI)Ohxn}&ueOyyA#442Yf!I zoO(4y7vsf<4kYQ&Ga;Xc;KST6U`TD10+oQ_a~`;){_Yn7K3A_q9hY$18-sY_Wo<9Z z!sfBCb)&g?g;Q6AN&pTp#H3v`aPyp6j9W#m&sXBweMq1g?$yECaE`hNBofx4XG8va zp>O!R5Bzc9DZude4)}k{Ul37V>atgT0xdG;D^I4Y?)%whJ9Yjj*g)wwRQOCu@Sq}u zI-v?^$Y_}`S|(~Z)&~7h$Y?;_vTC0T`E4DXU60NLUk98E7=EtvmPHY4ukq! zu^N822)pgyk`tu20#>n@eFavDV5+@TYx}NoRDS$q0Mj{R|Ohg>E}bf zUV*Ne@BaX957Cwf7`|=>m-MEYUvuTBGLFm`s@ba_wI9@Kul}ABJWhI$RkHh^zO~C8 z#ikbhhIENj$Lx_`o5AE&LPe2mf1sNwL42BK;>8HJ*qw#hupZ*HotIz4hK#=~b?jO0 ziNxz##3pe*!nC+Y_>&A4cG6v(ojMd%h*P)|_?}V`)C)_FBtS4q2jL9_@X7@PWM6qQQ@+EXms2Ljv?s*bl zI;xuKiP?$7AVg1?$+zf<5}S}1YOa?asTuNdFP&eBgK>VF6&~3xm5IZ5uX-}l8E+cZ zQAY8ln|?dE^sQ1I&H~npI`>jD{(D~v%YBG))lx25FZ@RC0Dx-1l>1C@NtZ7P;pNrMK=^U)6y^{uMkZ_N$I{1AE&A6vg46Y_$CnT^jetG3Taq zO@5-rCOS_E8Z@b?iMT&nmlpGvx~kBt4koYv(N2XPt%f?Ah+#mPf^_KRkpI2#XWH#q z@YjHYfZ_l2rjY-O*N1#R6Ftp%3;AD%NKj_kn*I8H{ghVw^^3{iQT7z~F5OqAtv|#k zB9x5#zMnzG-RA7;O5{H0W98}iaE!GEHDMeejwed$krWQWAzxjs&LG$soG2;yfYRjs zijT<++!X1m#r{zDv|>C8WKa*UC)d(Cx4v$nGc#2tznc0bAEU}M*smOZ|2X}z+VU6i0VXY zroa7pSTAzHL$$27x>s9I=C$B|b%<6aQny`E{w>Yf{O5r$29^S*{?~y^`qy;UtX&uN zp4Mm83~C%t8L#ElIfJ-k86y9<7z*_0TlMYXTHF4MuzY*S-<0o3@NWUnL^S_>`L=Fb zL$GB^xXJ3?WbI0p3M~{L@gEW8kNb%QSd^5o%z26%4uiW`OtjDe0=dB9n zawokLPYRyZeFbjKvHlsPM=9d8$PLM*a;&o2Ukl6CL%y~AEaUP9@XrFbM6`rre|pFg zXJ+eq?)EKxp4EMxwKs`|BZdK3!w?x1$1*6g+329yD&+e>MDP8>=oJmuRt?Yqm~w6e zm$d(cu$+E0ADD3@_oq==O`Vo?Jt60A4&OBBZ?OeV)}bdQ%91IC?=dfx&Lj&*>!ofg zIZC&%#|ppACrSy17hVBg92^2k>qL2CBA46+iNe6{e~aD}o2DvIPLa8w^;cni?Snrv z4}1^&HQ*p%_+K_65z22Rk+U*@scQT81e=2T0ni_*6#vl?? zYqkcH@4BQXz&MB`u_3Q2}$X8XjFT@;b3F408w1E+NkSA zEG+538&UtKT&Dl;1AiQNGAgT-xW9e)md_so!RO>#0rzlFGnk{7D<1)W|6KMn?lGXI?VW1Lc;|YphH<0Q&$A;ORKo;8mb$xN~s0R zlURD3c(U-4N)zv(tg3Ky4C|m$_ab4kfNQGkpPD~E`cIun_!>enaX4CYC0A+OUhzd< zurmK#$L>(E9$Vd|oEBB3hM-8QeyP-xHmX^FP_ZX%eJUY`N2gEH&B4DBO&FwNbu)OSWIt zfHwmp0n_etz$KY^FV{aFaY(vXZt0ew2gksB&WyA?iEM6q>#mW%TB#M#I z)djjRi0tTNqLJRLpVNACSfT@e4%@3e;#b;h2ly`FTELX&mFT^(;~bP@$0=LPlch8# zb6pqgxAv-+^@B?7RVO?s+pQ;IpCHC*w!-4|2{Udxh17)*iLrEzuIF->&Q9oCO+e-W z8O2>4yT<~>_FDWTHpzu%2{(}*HjI(y)t42%=w^EoL$%gSKUVL%VR>4{g!M1wnFD?T zuoy7qIW>B3`k#54ez+L{e9$`56+=JV-HldnCZ8=oRajvp z&>J~6g)!Gg->KDZy*T(BBeB-Df8Dj3C;DlT zyOrC;cFZ2eG-M~s0sc731qA`HF>BWf^vqF zDr_vk7_JhD&tNwhgqnO;`IqRkFu~m#b@-nD3+uB7{wLA@r9N*4zXP}nFy*@+T+;jf z+@l;`KAGM#T_<(=*7i+SM>PwqDeeKX;#VINh-U-DN_z)7l==ofgs^V(7NNAJXk2-_s+ySAt&$d>SxxZv&U~ZglSY zS9Ha&In#BT(A^@M8dBaMV#F+`$s}4pw(HzhR;UzWk}qM)iY@ZN4O2n zn23{u5g$9CW9sEb@VkI}0K>;q;F2~(_ntd){5VHUboSMcFw>*H7-;YeyA*zK5OWju zP1U-_wH+@xTsNW!S?(|$O6?HSZ-T1ts~+pX-^2RB8oH0KVc=7NR>1Ie9k`@))IZ;f z{F$5i?Fhd3GLYr%R_}!E^*J7}cCT$cpzGL3;`WzSQ4Txh=!iRbqw$K0tDS+a8os;{F>sNI7#6=325zxRL|4Gm4G=aC=~IVIsVFn`jv7V*8d1*`B*rIdcnNO3i>NOs@N|?ZzM**Jg%|| zFifi9IwQpfb5WJX?!~T6A!#c{ePn#RBvJ0*92AWg&lx@n_6eIfP2H`Wc{se|M^e{E zA^*GKua=)>o_YxU+rV>x;s14TNxP$a!Q6g=oFY4JdhvP^$N|TQ9B}(!#>v@woB}=@m=72}P6L;;@869Z>8EYCiUr>G zCve+oZ={dXuug#!=+*Xc%`Uw%twOrH$+wn#rTmYAe;arXFm!(jE@@n3_m^9K#;eR8 z=BlKu>xXhiyGo?t+y9AqoV^$=UM~D`pFmu=SYh63={^rBXFeTrb#{F8>X4t7Dl4B5MtjM-;w>uP5)yZ+??PpFN0m9b>rYCAX{{ZwHp zQK&8vuG*cDpZ(A?=fEF=zXALXF#LP~E~!6zKiRitr`1n|!?Zq_R)2`+8ML7oWwD`5 ztOK#{7$EzhW~|*CbVIl`YIQ?C7EIy396HiYr-82r&I1e|p9Yt7aXer)^USm_Ucpkk(R!arb*`-MbDV)@o!uYNTR?ub zlvC>ARPZx_DU(BuPm~*FS2&U5=tk_SQGF_B4?-ZPMQ4u{)pc5F1V!r z^t;VC=;##52rc2Xow!6<+m~AVIF{oRRu@Z@lqo?beALFna<)zn^Og2K9ef3_3NUmx zM(@ozz&y=*DSA^uBm#3}3xgl*m|^WWBKARhL~k$onR@*J_)maW07LH$a7jniYvgBO z^V-d;H*HzmxnS)|wk~~A>`cqBQNFcfp0%6p9Mg_8XiL@_34ciu{gxTo^XWYB6M;6s z&_5GgQh$0#;wY$Nr5GGU<~c1w_XKMnV+xIPp^K=&XvvUKBCO}#Y-{Ii>q9QB-B^|QDrk%H_gk~=SPecB7z3DcT^_wR z=hWhybL!@hLUg0djr>=2a25X-F6I-~&hN&oz0M$HXoXy34zUaC$8dbs_1ui8!gL8Y z0Y$o!3r(@pb9g4ur^e?wHqKt%2}lglo5XD>dmrN6BwRp!Os3ya`Wo$@rBD>Xp+KX3 zg1S1;n34M5or=bP#JBX%52QRZwdDY&Tt(oL%s$un6EpoYEZ3Tq-Nc#Pf{_SSm}!|! zo9$d~?O_%`Ldb~Z0@kv|ID@nEfR!K8Zzq4B{DuBS;MW4ZfT3SIE2O_K@~6M(yzu7`YAuwQzf z-n5-LyBw!0b;-1cO3f;Z_=uYUc`=?yYglljDOfE>cAD${Z9HGrKjqd1+U4)i9Jeh zh;{0vYMJ+_O0LXXswAm4a6TwSb}52rj9=^`Ws@C^n502Qfmj zb^HuSwpl-b{&d%uqrXU3g7F6nQ*uCjKs(5stDV+3%V_oQ^vz(;P(Ju0SsS5 z=7xMFSBB%@{q`frL)YrrSEs;)l}d)0m^rVhlejRlX1!RIw9cnp0h2D=~SS?_vd zP@pQ*Q^EG%d3tPbT+L!8lOhU|&x^^l+G4>y8;1^6$((EBd9q-P?( zE4gvQgdYB>*2=tyT;!+W2L9|jC42yib`<{#+uBF*aS9%rLPWJZr`ay^hobA`6*Nl+ z9f5Q9Df)c9A~<=b>%)2|pP$_~H-nD`#sP+}so()${p_0!Uot0jE$XBm)>}WN9%jp& zFy0x~R}T@rUF26whB7X02mdeNtAL^RG`OU6ByVVo&Y@GjK%8CjZ5b4`|AK6}2ZOf&;{e0QJa9?f z{oH?ctq#`8XpCmM8aT+D%t2=7XO;CQ%8v#M>$OJFYLf8K?UaRQ%mWeqUh+5loG*ZX z6?gmcO)rvh!r`FG+p`$Osg1q;zrky|Gelxn>xXxriZ zT@>wZRJu)0zmoP34(p@#c=mVvEbTH9d^#`-F#N0mmoy-17qgEr?Sc>DF5#tDeLoaE zOuk+^! zLM}Qqq~EeI+fV0#p9Gu&82T&0CH3deD%j?4UfC73QKscYrYZ5czLOjBw-eRq{)`S! z``ZxJq375b(%lo~EA8+&__M%w0Ymq+6GFOOk-gKNoVeYx-`*mQjHNLSsmEjQ(9##b z7PB5@FEfzH&Ul`W4Zv#^JJ1-$I_!z+kj#wNW!wO0f@?`cz4&ZzUfdsgqSqFmg7j)+ zs=;k!>!*sU-9|ilqI}DywagueVN@LBR^{alWNYgVPtf>B&j-@(U&ZP~+7jh-b#l@e%U9dmJ^>j1{thn5#A!Yd z$*=mx&Bk@zYdSCJ5H|*aQe3Zk&<`Cuf@veH-J4Xi+AdA9e`HwR1t(_9dk**}pbIeNy#-uSzwIIJE0;1j z!_o#elBdulC($IA;M@AoXp$wFx^T`ary^+<8|g!lR&Jp##%(KlmBr#xWR>2mE5f!A zdizI({JjNz(;gpzCl+ffA29qigG=h~UN!JC+{XBs7wM;B&m~rzaQ7J351u#@li+LE z2I{7OKMa+rIXGJ4EYI@O(-QKt1A2|nlkt2l`0c=5fZ?ZRNyyKekzMDTIesPre&%i` zJUTrXU#C9}eVzVYUylOUCI5(7Z{nGHB@#7$y`QGvRC7E{<2j}* z!+l3Nt`=}0I@&MGV?T+vCy^hI(x*C=MEho!b%xiTIKiE7&vcHrOZsYJTv!i1l+)~g zZUX-@a35gm;dO9H<{qTaZ(_9X3+f@bAU>W9Wu5tSxXwJnBVk?g7J)eNn;1vyf*4c8 z7Zhc-B4DIwSR(k=1Nqi#W%hG%*f*|{9kJYHe_F*F)V*f)L9R7ECZm~e;s%OFns(OTvC5>n4sR4;=yp`*0p_nWNMcZ$*hQg^p{+U-4GHP zuE-KZ|HL%fvd%}=$|FpBBR*PB%I@2jfv*JC0)~&fz$Nu}t_%2>w`p5ooLScXlxY5b zMgo~#@>dkws0mLuNq^LhPLhjdZc<9Ta+_TY8nzhh;SIBFAkl8UT3iqp5Dm+wcX|n_ zt~V6ZaR_t2V90KSdZwc(=O24vqmsg3na&Stv(>Oa5+Kx8@;Kk2O2f;Ba0dg?6MnyR&DnmD~&@6X{f5aiO@NvaCHS ztmCdJAzuffYxdLbGVFeU0>JQ91}>?;^V~7`Ld7enZg>lic$X}L8;8TF1{|NYhK!2uquWTA=6w=FDzbMubOWD_7ax)POQlh_8$c~<|5W~qc z*Ca*aAWF$W~m2ub$elu_@VCdc*y*K9@^ECUT zU=+%FOjB%;H89h)TF72vT?g5=knDy&veu!9?jiCu^QLzya{*8c7`n~ilFUBfnDci? zw=>v0_TYOAKSh@id+nzDy4WBDgrd?ng63!uXF+n+?zHvI-v_5h<&Wq{`L6^2EbuwN z@NrM{-jv%sk0}5A+1b*s?}Uj@;ygU4b?gkJz0VS3rl34sGeWwDqI`v}dm7^bC;$xI z3UEn=o_XfbozofI>}T3rxe~kNEbCFIjtDCqPrS7Cfrwsvl%LSs34R%HIbi5r7ri%h z%rl4H$r8H6w6r1mWG+$oZfOn6`AU?p(EVTV_kq6yhOT@1e^gGPn_JfJ9D}UY8_{ix z@)f%0fo}n}0fz3S(R)))^UN*p1#8!K9aZ2T98LL9MECh9U!nU3_yZh?P#G+C={W?0XyXJpsY)4*>hu}O0bP29u@)IeK@jV;G6HlM+xN_$Bjnbi4ZOf{i6Y_O>L|6FQ z1ils64j8_AqW7j9%=5_h=$soYfqld5>VlkMX7xn$o{#bqdcOkyE$|j#=)D)cH+0N1 zhu+B;wylxbwEZj@*xRiepeRRw2Dj`1+xuqJxl#L{71poNJso@nunI7AyQ24oo_Xfb zZR1o$w6?=3-*HUJJrUh~9%mw>MTRs)9qh2WC@O}{7XQ^Y~9`c!yu zSrwdHKCP{Nuu;tYe^Srke#6seI9isIo0M~Y-*RHL%@6r`KB6b>a1i|Wz}tY~=iTVN zsekj#X@`?9+&Y_0M$it?)c%8``ka(&Z$!8Coa}mfI`}GJ9boA00GIS{_7BjVyCZZs z-K$=tBA5Y)^!8J#puD`8p;x5O6@_EV`Ux`tjj?+{SnmDgZ`Siy!QTLW2N?SQ0GISH z*Yo+E(4S@egCDk{|D)jFt?0dS>?AE%9@3HeZwFrwoC_E}x}*1|-p%uf`j<=jV5cYb zZ?;i4q>r(ULJl64Kgw6={sjCD;CFzb`(E_k&@;~?=q|>~{(QMHM1$~5ahWyuQbxkJ zxHn1TxyL!qPuR0VjrG-fSvV37M)W7G$d-Ev_!+?R=sS61=-r)TKNE~U30D%`nAh)h z?)4sY@~j^9Gmf8Q5|gBp)RbUiX5PTluhXm~1>{ySgQFyVgWMV`?n$N(7 zqdd{%4jC~6B;~n7N1fB*A|Cg-^`G0N?idl-Y^gt>yyG1`Aki7)g5f4RLnfnzn7pD~-XXO#OHw`n->K+5v$A@0zkykUEl z`$_Gta#tReN6MY--yQf=KLu|vkJ$bf?1od_yN)Jyw%Y?aH-`K0cWn12yV~<8AbTC{ z<|PyEsPxaY|8qV5THC$e7An8ixH69zJ=^__^529?@aI=4_qRIsf_7JMJSFJ3OCaJB zZp! zOXWVx{a|drrvD%V|E1y?`<#=P`-OY8<6q?*^?UMl+W(wmAMyKnpL5(R9J){j_`Q=t zo%tMH)il;AC?Cc(cw9}zU;;04$Rekg;%}Sauhr5A3yOEi5OY_Q;epC27Nd)lK$DlM zstc~xyJNT8`W7$tQ5+w9(?5-a0hREe>~@!H_D+q+b3qD#j+SKY7U z=OpgY?kCVj@h5s4V&}TQx1F8#hqgLFFXI=!hLLTwwb*@LI4{+%&B}GgfzJVs2h6p!mM)%Xt=iJK@;&$C#t?3~~Z<6Ybl$TakG+j<-6ERpeuk)&ITC*nUd zu3Ho1hx_>h(p(8j>@nh|#8C!!+=dyvbCG$l4gItVjHEZK#*pEj%^|-B;K#_5{|Nq1 zK(EX4y8&F%!;wDyg4}yDGl|Y#-#HuIPgX`4ukT4b=zJ7cJ&BXH7 zL&$;)$zt1f2!DV=MFyiHU+Izlu+$*O_lF^(!ZN8aBLUw%A{pp(Ni136S0ai}CL0*n zF~2b0Y}X`;7BZU>bGy><%iUy?KOCd~@f3BNzCk;Cl!{Cl(p_OW_fZbB?>PW|5cn-% z+9kCG-K|2S|3VEF9?msH!&z53ycTc&*hhm#()+PZ}c)A6C$;lxl|aeqYb74oYkKcV*y z_KXTB%a*9Gn z{eI@Jr(Ct)-N!@v-94`LaAJ&eLT!~(z%-ZiJ0(INt9Y7w9Ub3FqYSPSPpydm5QP(Y zpn;Ykgee~OOVmEmL<-ZvZ6Uwb#w@>u;8j2^VECO1E~zEr*UIq&AqJ0;Df>Z=&abm^ z?@`1U`$u93ld$++i|ZD~NCn0YquDH#6~Mt5iC8iq7`O+whkWdUjv2SNg5L`~2pB&0 zflEsFqi?eQFh=&PtHU$ACr9`m^$-_yh`Yl(6yr`t~kfOZtI553ye1fE}!NG)7y&R^VdvrQX5}!0%v68VFywzf{F!;+ zRq(ffKLUpT8Rv!kThTn1Yag+`6U*ps6o@wT-Mtb}H1GiYpym|NL!d_MO=_<+=Hc;S zNV2gg;g%};o7d44A0CV45qztGqq20rg^n9%UdS6uBt?6)GX~%C@|zWQQ63xMylM}% zOoC5@wxV|^=X85K8j%+`7pSl^P_EvK!*bmM-=>`I$%V zhx^7+XE&~T0>jb$ME!kA@$pqB>=!r2tOu~smk>gn^RcHcOQ!X3?!-%#H;8$>t^_0T zBJ8PMo)fuTD#Qu_54VXje^8Zt>lSk}iceeZ@@*MfJy`xE<@bOxz)gui+@=Knsc~l# zh>Gg;BIoQ_Gg}KZGEcw(?kS;-``$~#a`#d$Q||k~p8&oEm~#IST+%JkeNcPOcns!s z)~;n{9h0g3koq%F6mgC%W{u; zG3bQPh+RyN`kG_Cm98T=qV_X{Jt*?$&=5tjg)+x9*tKp=W_VG-r<6}E=QTR6oU`WZ zad?XPhqwa2EPD^w^NEn}_uNUx91J5U4xOr9Qrj0v; zYurrhOfF^WXLvAtiFJ2jHO5{ZgF8`()-A!3ke?mzjEpqjE)V(Wfle)SWSzPh{2t(5 z!0>SZT+-#y_`NvC|KsYuZA#nhpqKZkD*}U}$p}$<)Ej6vVcebe;e=EC02ItIbEa$J zI0&1sYK7;vOmJO#gW|&fxNvfT-l2%U+Rp5`dNTMNU;$wGI|W=)|MzDrB!p(u$gG)B z>o#hsaz>s-ggEQ$Iz)>o!#TyG4mX<3d$75+_I@&~pIgX3P5x3p4}m`hJRZ>$%KgPr zXl#z?q7O$bvre(ezh7CcKu1xmaEv?Jo~}nG8jvd!_$VK4yY108Rk<>LGe> zY`eFB&j(Hb4Bd}|OWG05KdW-MUls>w{R1+ngE9&Rc>ddtQ=E!(SppdJ)|2hWF(uiC*+MGs2#eHgQDLRpRKWAv6QV)Nza zSB{QV;T|Ncs(3+#%jR4x9IjQUPW07hK~tc+#;{+eKT;^egcaEo%>V~K71m?z)@*r> z1D^@Z0Ze%oflK!uc^ncfqxr#4ls1n-T%7(^^Jcy!9^ie zcT>hYMKSsodJ&cPZp``}m6xr$_{ehP1}H!1Vi%uXE%|J}_R!x-@`^C&jk)vtsmh_u z6hBuEZbwZuhQUUum%X13%hL|OW**xHz5}=@Dua}yzj;i$-^lKj>ldw+8En1Py52e< zUf-PLNNOO%};wV2@sg6kw=rb1eabm+Fmrf*fr2 zekN-7h`!9<7l2<0Tmu;X#$FKh<4AA!mF}Ed(=$fKt2$hW?R zg-1Gu3Awlou41d2LcUlW%Xqe5feKkFQHW{BF#JE;Wx7)0C?ylE*qF_$D!~~nQq8)m z`s7d#!*#dCtMO__ptLbaXK>v!fD6y~OmEiEDS9eGDK$Jfe7rYdQ~}2lRXU!4ajrYB zv;ZwZw1ZMMpgy4rN;$x6E37XFvo1=zQ`0AV@wC**!wRhw#>s8U`JU1T#oYZ;QJt;E zNA{OgJmbt()77bVpb>xI^I`q%rhZKOJ`8@|4*ZG&rv9$KFs#4#&kgIXWy{g^w{`CM z+g8e*R{ehGUiFlt_B(I6!J{nroECge2tIcPpD!Q&I{c;Zb8zr_e(>25e7+iHcvA4g z%;2*s`20nGc^sYJpx_Vcg3qVJ{Q7>0HvVU|wbvhm6D{f*DRQ}L;;1o@fIF4Ng|Rd~ z2gbxsqeBkI86Khe624cW5=40SlI_6Bc^p{uARH;DIfmmfAyMw)KoPwlFDW5f+~B8j zyL_M@J4^D8H4WCo^VvLC#A@(;Ux>K>lGr6E0*=%*)dUSCj)!mO4Q%z*y7ydWX35tk74e z*i9-nO+JPmnLV+|f`1ZG&@I0aVYus+m)K|omSeR&QIDnnl~oBu9p`*p z$DY#8d0eLEjpB>DRC+oU)u<<_fexRTfJ{J?e7j1{&s&iEt;*|8UZL^*GD$55KCk$A zUzJ?y&e5~HvqV^O;NGwwHtx*INv49I0-On$et0vuq-Xk(PpnzHx)a^z&>@DCz6!g8 zbP2E-=#?LaV2JQ>^@43}AfUBh&WXjGmi0y387h42zCYyqAbd6Qv&=v5g2yjH?-?+BF94U+AKz=)J|D*SSU8;p zoC0hDJa~Qc6!28|m?8p!%hj6+>!)l+ajWLUahlDY64j0KK)PIDdr!0= ze)jF+0$fXl|8yQ|-dq<|v;X2Ys=%(d>wJDrqe-oGx?J`bxGfi7z`k4JR`OXVzt5J9 z%06ZF8}Z zPv{*luL!l+qNHncoF80-s&gO33c`Kjq%`^&XA1n3&rd0i(t;DU36*G^5tieN1&@9i z&Wo1y3A<>Rd!Iw0(}c(vW)HK+s}?m(^=Z1dKNPlS`^U2L_eJ2>0KI@|&;8(%?(auF z5VWUgg08^+c(@Rz&ELAE(`)gmcoP=b2DiN_4{N|$wZ7% zY?^O~7^R>`F`yvOV*QG8Zpf;4TYDc4`AuJv?SI3;rvbA7!|yHNk`_hx9lLVuHUfUp z>DaoKz9+JQ;82d_MF#?yXLtz5m%G*tGNAo=IP}03I8e^D55b$gl5($NM00`_nYj}C zjpkHJx#>iaTgRRwzd13g48J($=h}hv1dn@0oJxjj&yQ#v`+TUPu;o_kV_~`8f^Rdf zJ^)W#iryb!%GCre$@u5q7y0)w<7(xW)f-lB+ab~Au{O9zU9VNIE)Zjb%MtooFR)8v z1K^JkGxdZBds9xjFfC_#Ji44BGjy10_l5lIfSy^`uLl1t@HxQnb2qr8{>~K_Y}weo zcJ3A#)S0$PY}dRco^^#f(<-lKS-})ZF}F-}O8e{#Bf5v8d}Tg#dhiDXvAR+7dN_^`rX;)>=ii)?N(3GFliX^+t4BFAM8S%C`o56VL^i@?99cH*yK{H2q5C zR}ypbG-=OSE4OUfxOPh)*|N4TDt6(;&nWBEk(j6kqM@<+F!%FT`!~XRemH+0PNaC%$TuHJq$y*=LH z^bSV!$}i83qv_x?fjNLA`Rq@xt+AP4gy@M&Fhcb9*Q{CG*)hMfk7~@Sj9J&=wBS%g zXIGS`l_FflMrwVuGOdj>e5+-)bsJah zD2B^CF~Zbq>l0!B@jsbu$6D~AKr>+IkBi>-H&1P5(&${hesz{=+e}7H%h}eOiIMc4 zfa+v3IkG>E==MbUO1bX@zZZA_Fm#`Y-uFkhOLheq8RMl%7|4=uU%EoIm#j!wEhxp` zmOn-}vnmj)6{>k9<2)JudePb zD+m%Be3hL;%UVuFyg}@ngf-@7CS)d)dQ5DHLK)A)eN&a1@7o@_K3<`4wn9G;Tw1g} z8S=L$qA&II9QaGXj{w8pFQfPU)l&|Cef3nu*dezvCdGnHmIQ5r$YLT zS7z&{4g56VOu*1z9=$j9VxIr5e)<>*XSp#mtQYJVhs|*95&b<;{!;$$fd35m1z_mU z+!gX?%71O7M_}lS_;F3(bxr&`^-)E-dP68reFCSl)Wac{aD{XAFosGU7G~mzuquY3 zZ#;&NxO{A!3;leK*uhqEU}8i*XL7d32tU|T%l95mdII-_RosdWJjP$)kG49933Na? zH#vP9qqe8RdhU(NA?17s{2RbG0aMQBqW7kL&C`@~)wWINMaw8U)xoOTSJ+HT(MuATNCIhA(W=HQ$`OVYR!}`!LD_iwQJACW77VGT-35XX&0I0%vj}{2h z?uc$L`I>#}{ooG)j{=77esD?s-OH|DeIg3=V!;xU9vSS@Yny0yEERi-s!^y9JASAy zbSR?hUz;s&J$Mr^958ezMDI;G%`;oxBk9V%Ex6!2Zo2huVRf2ownEBk!a`du&xY;Y z6Xh%Y{4Vf4zZH&k31w8^7m$tHl&XvZ*@iVtw8z`?%(Rb zM*yP%Lw`l|zQ6Gv)^{#_>GWkSD_HM(WW76%&G-IHGlM?A6p4Y8SDUCVL{#WvEGufE z7#NS`Cve0Kh_RRnPIS&u4Z68+e(d>9SYLbL$DA8~0RAfQOTh5^S8z$=`jNw}Up;HR zv{cSuC~G^5GvvZ0dDd~y<7}X`E^%B@yu2V2L!9pTBf0!27y(yzDyJr7sqMLtpVsTL z{bo7%xj+YC__;26-xbOCU(1mf9D|>r^4dNtcMwZhnvY{;f30k6x*U7mIA-}M8>7RV zD6B#eS?84}^6OFKKe zSwecwnfvF4O;s4ofW^h9(PT%WCncJNI=7hvk)?&!U#htnhZiRs6iX_GBb>myUv zwShVFo8qW-&U4tZ*>#CjyeQ}}x*T8b12t1KK0a<>_*taIjA zH+ihAp*y^AWvzW7q`QH9O~1Vi{AS?ufT8<1xFi#=<4}%X>Q)R9w~8P9Yz6fy#4r-o zD?j)=SyXE0e1$8p$y=!Y5QKtpa1D> z`_+Rt0mA{q--PIWzwj<_R^A=bi5bPm3cMNgxmnY@i9ntNH@|E_u z1NAkhF!a|)?@hn$%IUX#^n*YJ#3<-v0d2tFYS92(^e0v56_o_PRuzp1>G2nn#-Ns4dS7QZp)3?`dSEn60i&~beBi(4L$QT zbOXJ-9IAnQW$~%jy?ISkNYGY&@|Ct9gyr26xq0##M}uu9w1c?~d}9a_<9w9(WNj^vgdR^0zBmUpD0E-{Y(xuxRQl zHp+l6JAo|Pdxr_*%nuwiNXBy2aXdj_2I2yI06xgw;HbmxjlUe+CbH*P+{dsqbMWyJ z1$I7q#sMyixWZ`=-gnR^lVVJFzNGbe+!k-JOUeJx%V9Y-M0`p)dcdy*dI3|8d!zUL z)#DN62v*4UJ>o0mW1R5MWPNzTZq{d^=n|gsC&Cr35L8_D*0(B-`<;UQKlZ)^JgOpV z`_}DyyE>iZrpeCU%^J4QA>GX`VHFTG)8NV|2_Y;RNK8O+^wWrnxW|pbmAH(O!|Oi9-h z{i^E=#xKOwOtfe#s}e>8%SK@GUT;isJf_lU#2TNp_>XAPX>mt1vTch0D5anHYayQm zoC0Y6v()FBSHEihrL}@NR%~;yW4XsTX1;ND+Axeli$-Fs9>jtl{@v2=Hl>$%--rAe z@Fk#m_o~k|pMKT6tFYL2oHRHRXRzZAHh#jY$UP-#i6pI4d}W*C*DDJlF9wzXny(Hr zrS7g*VtnE{(btFWsb+EGxPy$F>FE+|m1fJ;cY?HY1Ll<|-t9^+`S}9m-N37W=6z3n zuKm-m+E2{;#)R+qKuAtmG2(mN9Ag`reih%+g!me-$oK}YlKv3yT*y)22te~zs?Rl_ ze$~8Hl?}_$k6E)eUZx7lZ=oTmA2-Fg7+W}Z9bfnDk$x9l9rt@0`FStohk?fc&G(%8T=VEx&4=bm>`-|MI*v6p zu@YTS@j5N8bR3@0*gRw~t|`dstsSIwWu zzJ%tT#!bK@1@vUWac`K$YeUP-ACwKhGS7@Zo?^7TChcfeJQRmVA@2g72ecips?RmQ zeobwMIDsVC@$t}N6Wf)k5t&3gd~c}yzcwC^>5%6F^8szg;p%hEuU}(!;OTZuM(C6o za>x?}@7|()3SPP5ZB}~8|3@G{4Lk#A-gngJb?W^8ewTe>s^h%NDjO0mugW)2ALO{L zxY`{y3H?zFhq>`MCgYw=%S($|Ov3cq+<3?HO&N#ab@4bH1Gy4d3TS)k)aTlN{hA~W zWY1!>LUJ**#5+Las9r2E9v&XBaCuYT2j zH(<%Rsx`}N=d7xWw@Nv6^J_iEvK7V-j%Bo@^HJ%1v*O*V^pf9CKz;^z9?-lms?Rl_ ze(jc5wEUWPR~jaNDn@a-Hhk^UUw?Dl-${_C1G50lJ6Cy$kaFzz#t3KA}F>eEL=M#`l?vWwvZ?)=V)j%h{*7FWYa`pl3=1&MVPc_Qp%wGslpUMFqsNQxh5R_M6VP@%3z<@P^JBW$p$$NV|BYVY zVT1xH7QFilLvcbF8sAs> z5B=Kzdmy(0PXe0%&yXo~?|&kH%>B95WDze?G{4 zfPj2Yd{LLP`ZdAD%jwzn3oxqVb7!%vvq=1E!noXu96VDj+_QowL;tD9R&ghn z0)=sZ{L%9cHnPM82FZ%6F=QtFVS*k+qe%ZOA7tRy*T`*+(!Na!Zmfw=pCW5PVsJ49F!kVKz2()CP1DHOqK76Z|XS3>{*PRrR47N92RlocGP?u?XA*Rm!NM0b>fr9`_6r-|BI**g7=N^^X*Rj7H!@ou}E7+kOmmUA!pDz7| z;s0FvwOw(OJ&!`(2|TObi<_RJ%yK@FJBf z{r+3y{stkB1ttRIE9svCnNr2YQorWW`A>Xm|Fp`(JfJ(x*x)%0HzUl^bU9Dc?5zu_+ zK&BK-;n$dO1bhRUEbw84u=BA_jd7s||BU4^zE;K827P|$BffVae+F~_n(uFrDYc~F z3zyKv!GIC_sSJE&#D{zAS9tKx_%EG-ZHli6`uxyG{@n=q4&ZJ;^KFMr z$*0Q$#}}ZaZQa3gpIfbCm1&+GB$rB{liAIF}@tg{eeM%<{Ji?Qb(%%iOAb$*e z0chTDAX6$!;pdphn39mnNU9o*qHch?R@RkRWx2Tv zb@^V&8~jt8cP8Woz)^taJr*)0e+qxc1jmmp39Ag2RVG$vZt247|GVVf3cY^lC4V1+ z{0z_rXx^70Q)*7Z8!8zeDh;X(mQ^QKceZxn?NGe_yW+fI$kTz@faaYKnUX(MdsI4Z zTqLM6SXQA}9lEs(Z|jfJ-_6kLhhFmc4#+!zM*+?I6l9T7_*)VgJ9g}t5}m=KD#hy3 z?VX96{vmmNcgJ~$Kn?-p0nK|5WJ--GcuPye;ZR8QdeB5QimDW=OLuhUt@uguZiHSx z^pd~VL%tpO6QFtTg)CBvI7h~o1QBVS!J;a~>QYN*-rzqaudyx8TL5_|FcQ$bC6Fn# zr>aM#p)nxW+Q_Y%lkfSUo$`v=IB%2UL7Ok`ZBG#nDW zBMP*tO0l}MErGX9@peG3A9{(G--EeNKp#N!1|U;vOTmk?!ML%(@uHU`c*R+$F;Pj?;+4inq;dE`i}qjYXe4|0Kz`f_uZ>p_eQsYlEZ;0GuG_}82U+p!HDU82*t z3tf6sz)3POK!EweCZcX*~K)BSB(}0^^F7&o)|3 z>CaZ!uE%Tcg?vBokn)Fo(&ewAdd+fJoCQ;}j2AQT@V?B;Hl?RS{zjCKA0ht}VE4z0 zkwL#-yu6CM_Ckl(_#U~1=(elh2i12)Ie>gHa7e=MV|LISMm(ofMXMC|gr=UxdOYq- zzRF4_tC?ZAq<gR`7GT<<2o%$?{?@Ygt4Tz4e~3%>q;+q(bi3Q z#y;RHDjQZT#vVpBVrdzx{2(zLGTrz*6MJEapv4D8v^$1j$$arY7_UbqkVC*YKqnoy z%IXHpA=UU(U-T<|b@;9J<7~+10vB|z537kmWj<8q8=Ik0#s*5ul)hH= zTZ+rekY5Gf>R#WH+NHDz>a$d~@$U`?i%p3TV9^OQE;I@+D>jY5yU#}!#Q)@Iu>P;y zlTKpTv(ul5Yr;3swpkuM$gf^S;i2#7_x1PHG43E>c;Br*J-}BK{LX(^12FCajk+fO zb^0odmL$rReVpiG0u1c**Y&vT?@jg7L2PJqFf7<$eUbPGC3}h4{N4HO8 zORHRLbpsX#VVhoimdI89r5TFx*Rv9$@1=dI9@&nLLLGP z2XyLE-bLrP6oskO*pVaSM=PPGAu>{Ro6@@?LGP)MPY2d_uUB+#L(m&C+Js&@y(H@O zd8NHOp@W#H{J#eIP2e4+m)>vba$Xiq^3(!72D(t94{3xTE-dgBe( zK&T&R+!#|YGFq!Qnw0)F=n5$P??V0n_#}z`>JwuN6-v9Gh$)sOQ`z0B^cJ;B-zm-$ zAx{BjsP`x)o#LTdnH^XXj^W??d9qER)4W@p?y0b`r-Q%6PRafU2k z{zv2M%9KKm022V6wBJ>$>S6)y2eB)lDExB>v2_-!)wi zndUarb(3k&C0+7{u`9!cmJY=sgR+hOL@!huL>Xv_Y*e>%jS5HRDLAex|W$ti29 zlWW_Qpbg^-O5aBOwn*vQ0{KSZmIQs;K0N7Iy>7t@n7BZ64FV_}0i(G$R&IwbpXobUH-L6PCs`inQ0bY5qKUFyhzu??cJwC-BBN4+ezek8_>^h*aZKfA1mt31 z44{)PkNaxe)k$NA(zinXR+PgtAfE+nOwiY<9FnoB^}C7AA^7(pw2GDjd4fCcR2nVY zkDwqh^u8!XG}nV#bo{ZIxI2%8Z{WXq5?x%7r!pI4yCXv?w2I*3*Jxbi?}d(&5opn| z(ybE(p2{Kgqhm_Hq(t8p?;$w;9GM?SJ&pc?ieEM46+jK3lgtmjVBat}In3A{APdPV zVJU1?Ct>`kTxwmG5=}HoGqw+)AX4Lu)S~o# zoS^R~$Ug(FKgaV!`xn!P%v1UvOVrn@^o_%BwSDs-9|kN)rH@W0(!OUC^|dK|8x!g&vJA%742sPs{2TD$g(>(;JZy11tHWN7VeT*!JG zXppIR(|`I?@icN}`7YZPAFo&l`AA?9K#9KE-bMd93|uTZNfG!!;4=nM?bND$N^g_W zLFMO0$hQEusrN{?&Zni=QyNPi(2O+P5xJP*U$$-uv|i{|4F5YMic5K(jNiIvWUR=~ z^C4dhT&~{h>L;z_0YA^=@Du;`U=cNHrlfQK|Mma9IG`Z47s_(f`dqvoz6JSR;3GgM zU0-mWT2)hjXf18MS6+)fapYzZ=h#LQ!@oY_%!6|&ofhKIl75f+Jqj46R%a>onmDdP zvK&Qm54MZ3VGx~#)%WE4bP|$(bS@ReSrlqIvrE0|dsyi);hV?kPc^sxOuw>H{f*c= zz3Ck~Vz>~&|8(jjGxQ2sIyGI~2{L24#lC*m7B8TMhO%Ml#_ z`6>rT;{W&exyqb_?Mu**i2e)c5fS{Swo=exF0FVqUD$*UCLws+X_*LdQee&WGjzn< zWIHa=X|x}GRr)C;F)5M;#ONE;i9$n6S8mc;BGD3c(1@DO+44P|amXrk`(+d5jQo>1g1!;;tVuWYqPH#l622+>s7Fo(n!Y3b zh+D_p!kUC{N}tqk@Qb9s`YcxJ6TdDqN&eRX>+W+_rN5z#>3S?{hICWa2hWIzd>_s@iUHn1^?-m03~hU#T>ceXE7_caccCU#Y8v@5+kp`(w| z`wHaOfVYz973-rx>riMNYAm7RlvJ~CplbjA8rNG4xdaFUI_WsjQ?^h$5NZb+zaf>f z+;la#OzB-Gb%=7a5%ML#j zfp3!N#r@8eYgVoj`}*X=)_mi8jL^weM%0KwvK$ocj+cY+kS76UfKJ+PJPlEWN3LOI zZ)odnY*4y%IQ>fBI{90X|LY-N1YDY+k8CPlEiOl_-~`-!4vO5bGd5$HcWUD)$y1Rm z!(KF@G&Vx-Qo}+85M`lB@qL`Y_akKc6|4~s=%npmUAelJxZ!{moDSZI;61}=!+JN8 zR~Bsq3CGlIc45}M3@!vej|F4X&>-f!G0o;J~$E=qlc((B(7 zFYgl|PX%Vm_XNL=8{L$ij(wsMbX&pkB6bHE57W~o;*TOm`9%LkO>I^@8==#$?B5J| z3vg2s9z=UcB#~x&8Q~E!axH6i6%!up|g%ar#Ppmpm#PBJ=wwsax=^f_x%yQW8E)5<$!~ zB_0~wL{ARhDxW41PdnkUV7Nuan*Phyj>4$lk+OK-k$nX$=ZJnBeU-W$)QdCGu~eUF zhlff#jo0G&n*%u?=q2A1-%N;$9Qr}%(_v&f))u77rX%Q6`pOgZRYG10tVpKsl!p0O zVj9}ULEAVyw<1F-f{dU_PpP*d$H2;!{+0y&PeOhcXiK7Bl}E*41?P#P_$%W(TNXuX zB#28ENZpWljTXgI_7g4eJL=MA-a;{7wt-KU4q^- zA)gIwOs2PT=}GboQi%8z8n+6?vdD>=UnKLdH9_ACkY5CLC($R?=RvfKpsmPgg*F`l ziUO4-*`5TI-oiKH{ttyb94MCWb@Ctml-1SHyB2!a8n1~iKB~8Z6* zAuk11B+*~npl9ECpxk4uN5trSTc-4EPSA5Vb!lIUr`4eh0i(R-;}hE*_EuAzY< zdFH)P=0T_2HH-?Se{X{R^tUiS49Es_(s962XEik^SBjz9ez3Hku^YLj8{BxgX;gYw zK!+X|y%O@Zz!rc?7iqrPTp^n*;P>vOfVer|CwP30-p+yOV~r-I ze`kXJ_aJ`?dR3jg-9Gp;yQACCIM< zZvvXP9Wtc@@mEhIO`d~7jnSxhgYU$7=RjTv90_RNV<1!7zrS%-+Hz|+wr}vBW>|PM zuG;cZ$x&&P^mi-tYJZ=A{0#6spn3lSnbHCH+fY|swNmT{m4i8ND6&Tz*3l@k78TeE z#aH-loNo-|@xUZN^G$(FX}^9ZvP~woqYUdPVk;C*wkp1j(5LM{3GNl9YODu4o(kmz$E&bX9y_)xH$Ugx;1De--U-IrZ|KwuUf)&q;mJgwF zT4Pw)PV8taBVJDH6mL27YTn}^p9ri0H1Elf576Hg*l~r%bdpxf4#n3BeVT6%$>GtM?0ZU(U+m-kXMKL8r@Y1mC%p3<9wGQQ(Ji1S7v9}WB((7cNwQ#ycr zZCJasmgXiW_0w0P>Ob^pKU*O`1H1rezLy|V+HZM{vn_+49`f@-_zA$zIr`~UqgnC# zKaBHEfjkSC18ClPkSQI2pYaVLx^otK{9~lQo1s_xdk^GR;Bi3nJ_VW5e)F{p>nL4@ zR~r@z*CJhpn-s6_qd4za$WwsnfaX0IGNl9XcOm)(SS+`?o|dJKt-v7{WAS3;4U1Oa z2$>7TNwut0`rQQmF~1={20R65{#}qM?bq+*>=nPIMI-N|HPE~tV+0H^9>b3C>=c#r zEg@+~AwJP|6hjUJ;{a{PM97r7?x!iw>!P2uC~~Zv4I;Ap*VOi(Y*@IFJOf+x=@VQq zEcrGeGIGT~vn;@b;-n$P*fH1dE# zK=bv6OevLr;}5{Uiiq@Y1?h)A>i?Yv`CQ-vK=WM!nNs)uC9tLN&o@@`?SVec_YLH~ z13v+p?`O!A4xk(_R!@5*ZJ(MH-|SE0d=-#S0BQlv*8rK)e#>o~ZGvuxHzE%KBbd+* z`^QN?TcKC``5NSRfcF8-`w?VH2jJ%l?7&2`>XZ7}toVYT#rbAKUH}{kXud^|DRrBV z`syLhma-iVj+cIJgzee*H{j8)kTi8P+iRZM)Lnn4o_PPP;}I_OXCC?&%MyAg@ES01Tv*{Nw0t9d1TD7y3%wZ zKbFoZ>kMlhc1Bj`lorLi2YNN{UdXPmFs1`&-gL;6y3OB3-Lg`Bb*OM%jw}X@IqKX( z`pPFuzmI}`&A%4%X}}qP=3ft)(gEc2swyldTCXnHl8rHto;Jn16M8l8dyqc_K2co6 z*sZ@h#0hNmhPU3Z&?F+2A0+(>cEt5JLOvHbAJBeX1esC_ztAaITeZf2s=q7cK5tBn zy;E1Y)W0YaI(98)sEqUfmniVZQ0}iathH3V)o_c^rtI7UJ9Hd|e2x2)Kp4<=j)zRC z+w%U)SXoehI!em~>Se!%(gGMQ%<}6|6dX;Faoq@ew7qXYeh>H%(Dr@;nNq5H5*bS! zl3ygY`}Ed=Wh(!_iQBmz^2NYqfVOiJWJ=wZvqis{l?4^MsWa;=MpZl)eObV`pP4g6 zKd)@6w6`7h=(vWz#TW)K1<>|RgG}i_%IhpY6+i557B81o{^9XbT!}H)_(u)cda0_W zvY|ozN*CJXt+Zh@D|?$@kGA(c$e#jV0NUOT$dvY9Zhr}DleF&BWL(F67q|09$bSHC z2eh4cLZx|xAi^=TS9lxC|CNM67>HO@;2Z;K>PIoWJ(9%7w&tA zmAA#oqTBPP;`RIx_iG^JVqgrQc_WZ1bz2^^f1OynA4;m5A>-Kyy*eLnfqVyW7od6X zg-q!H{M}~*G&o*RzMGc0_U^^W2f!HqW+uiP>SjuQV{e>)5ab{b0yO_P$dvY*ugTeO zV>tcg(&_IVSOCC+t7)nAido8k=-2-D`a7Oc1O@?`e<);1Dg2L}^OCf9DQe=1gr=LS zK)i)nU01ohdf&D_-k{?wP&y|5{hG>pd_Q%&)2jTfgFo6|&yVPX1KEJ~HxDwUZp+#K zK5vt@Q~rZx{#L*r?eCu1{ zBdP@zez|p$?A$~`6aBNW=q7J;;t~(*$1>B=-A&a_gZ(`;D-?L_d z;hkVu6O3lXzc+z@@;^;u25>N-<1!aArFAK;OCu%m{`S9TO-}i-`(C;VKK~pUpC<6@ z_`C#pH}I;mDP?>X{pVI4V|b4-tYd^7jmi%Hzv6aGhCCCP1L!!-hfFC&`O(#Ie)Xya z*!hI+%N3O0EKW;L;iLfIq_9lgS}va}{of3|+W)&DKLR`sXx^tGQ|h+fC1t&cPDjOb zI(ie#0GLlV3voFXJVf&Pevb1V1Gy4d3TWQtkSV3`H&#NEoR2D(F0GfH*TfSDW>D>~ zL26R=wSZs8WiRBP0gP_M?6VNYO_ee04oI33Eqa`0>WY9KcNCjmNsr$DBZB7QpO zFokF3>SgpKSJDw#p~k42C-ZG5^lILBA%6jM0Gjt($dtNmSCX+FjnZP#4Np17G~OH+ zyKm8E_pHQTD6@x3=dQ$S(pf13GSdAXEAeitwW-=Q*YeplSi6CtkyP6f1`r$eUnAJw;i)5>HOuTI&y6L#o$z6beJ;0r+8 z*#VhSig@Z8uyo1tBP!*MkfcLwLQjX{EwkdhM?+o;tN=7`4P;9Dt#@(OirI@<#V8s> z*8{8#CT*oBQqy5FU$#T9_V-1|uL5rXn)hwUln%gOY)T}iSN;zmonIy5qd1kPiZ;0h)IfWJ=xoyC@m!N;Ifq=v;69F;5Sjw<_Ky=+*w-4*722 zK0xz62$|9W)MmRT6Q@0UKut8 z1-Ti$4Zt`Zvz}x@_AQXSjnJ$8y$mg0W9ak%80ofhXi4stcH0?>RXK&F(+ztRKnuTk-B zhd%A!vyfi_UI#Sa+mI=B?_UC23jcyfNdJnwalV5f&je-zn(q+Elv4Q@IspG#6yIj( z)BfEK`99!5K=VBUnNs)uC9tLNui{AQpC>)e*AMbwpa{@>BOp^s!45j zcOm580@nbVZwq8f-TRlomcqZLqojWyL!aieGh9XnkOgSIY{--jq@AH9Eak%uNhXjA zEm%)o@m4^u<~Yu1 zJ=dygT(OF!I+Jz|pr=jo&d!YURzt1>)&QD!9b`(~=BGY?bYVRfXG{-Wf;8e30$`F} z8C`^wA0z#3g|o;et#`_$7RKNkAPeWR0EoKC1gtb&F?O(6*G0`w+R^z7(K0FMEh_esc<)}zjQV=&@8Q`m11G0?oJ~{utLVO33_#Tza8>@z=MG1eFQS4{kEr_S-ZUv*`|0s zxpCe~$SZ&o0L{A^GNly$?vs;Zn1ycCCysUEvB(#>`8 zIyB;`(UVtHucpz_#M-I0?oR$Axvh8nXQKKRly4Nly%oU);G*hL2y>0{YU$rP*suNj z9`fITpOjB2%iaHsSF;W8Y{Qyu7|qK5vYv7KpM?A@@B*Oo=S9erQq_0t??zXSohR;z ztVkYj%D#BC<4x$lpGi683FCmX%;MPX4a2`o=1*a-xPR9`z8<&%pp-Iy7X8n8wbJme zG^~}v#wO**#|eI<^>!IPAP3O-ln0` z2ILLEd4T4<5Hh9xwjcYj?t2YPddio}eA@%Pns-nimoWk;1~hL8WJ)Rg-KR*_V{kEc zzSiS@@!}^to@4euN0)fpl%0*RL)*Cv^2@-hfVT5Z$dtN`&wt;_g7T=o&b$SU6=0kl zzs_7C<5|=H2nubOZy*EQ#y#3QCdC6zervkCH6{BuEffRm}0)~C%7KMx~EGB>hJL~A2-8q9hW2gF5_6B0?=`(f=uba>&5>iQAysc87(RN^P&BOcx3^gqjO?bjs&v>&BhCX7?C!V0{e<02~4f1@T9MHTAAXDl#Ka#Lk zlwt5=;9?B!$wecUCp`GyqIjF3SNq!v`DtJmpn0EzOes~n6A8y}04DgH^pYT0BmFHL z5a*3Ro(9YUH1AxaQ)u6>mR{&z^FA>OV`_KrQaK&-w*xteC!pFw*WT-n*TP) zl-eiDby7N}$k*!n`r7)2;zO%xf$E&Hqo=U4Uby4Bnc>0x+`i`V#8PA~h&{hwS10*8 zpijp+b1?dYKrTRu`n6r-t9Xir3t_>U`jxAf4=av6)eXV|qo@Gu$|?OvL6=_drUvpU z!0CYY=Of6Jf?dWf8%|kWRa`WD{@OLw>xLE2s}(mN3M#Inlj&m&kGfpV*5m3tVD)Qn;)fW5@s9=B_#Yh>mKo4JG7wP3vMGV|?pbCx&IbD%xa4%q#~+V?}V z3weP!9$*JDvCL9hf$g)?Z0yEnV(rWV(`IIGZ#rU!>Ei7)U)x_V;}#qe_iGm9!+~P} z?bmN0Q}U>Ms))#Z>g?Cyt1$#b%h(l^{Texz4-7)CUCr)iSQ9bepve+QH?CzrGGlhY?1k_QF*7_qyBLf6nYPd6<375dKgAkr zg|Rkjh~q$}_68ZR3h?T3Ru6eSa4w+jx(_m??|v=qIa|G|c$MQ}mSM%^Yw4zbK^t5B z0%L9LUGoL3vvxiE7FC1=Oeeq4%<%TYvX5S$H?sf>3OHUnJs&ywoAd!a%>f>s@3jYF z1xzw^oE0`lm`mKf*$_6D9m?`;X>$8oX|Jy+ZtnodB|rqw_MQfr(!!{;ciUl|;wbGs zSZpwln%^jD{`c$*FU;MHTwwuEq1nR>pvZdrV7WYZu8pn6u!x>Hw7|^6yE$f>+lz%f zy&3qlM`5wFdB9_fS`CRU+(LaI*Ac5A4)& z{}S@Q0N1d%A7RLpzFR2mU;3*geqi~m1#;>8f@XG(iADdK+43zYde^gyUB>NZ0NdAi z02`+FO>=pRV18fI&Tw*iXIevYGy9re!>=bFw)|PDE)|{GQ=){(g`nz(hdvH$bMe@NmihU9x-!zm8WsyMevUSUYQxFK3!> zi!%GYg(pr%p~We{Bb$yzOBmW_sg>p_FpJGX(=jKzc-lm_Z99(b!k>MlV`q-&;iGVk zvZk_$mJh97xo5n~XC7%^!>|{m2&Dfs8OJtdC$$6bLjD%m3ur&eM@T>FRJ*irWo?f^93gODk8b6$xasm_>Db;``~7h#9Wtp41% zkwuNUeZ6@;Z+d2i*%SOTEFSCM`x<3@J)`3M0mvhP5}rxDWMqU_lWJ{^xcAm0x>1ZaC+fP5hK#KJK@ z7LJo)P~Qxnm1iL)nb^B?peO`WO^QnJOc{^D;y8a0@&{`?Vgia00u zGea)8nG+m7+5-n>8ar8Ew6da#kG8T@i4UGFdG|uE=Jf?##sFX_pm`TSrZj1qY#(o* zn$S)b4Nu@DkpkJsPN6HDDE-UA3IAsHPtlp9AmW^e^)W3^wl&x_B+KU-Y8GXhnT|Jo zPET)NE95HmP=mMDnq`ht{gL1~(#~dO2em`DLB1Dw0MK?mtUlN6kbaG|L(~fSdS@|T zaTbN8+GsYb4NQL@CEL7a#p5Y)8ROtD@$`V)8}I{~rwB5o9c3~O`uw}Hws^YShNYl| zoyqRRN$wVQ6T`Z-0dpNWRb@r!Ok2J|`cnrz<%;JF$eVy`0L}9mWJ)tCB+s*l%2)8v zb}v}$LvDJFa{HMnO6*?wa_A$1`enEAjUAZHr;eS*$A{cKJVm|DK{lU3-Ku=MZ=r`5 zW@HRVADv+zY|hRfdI-+G9?SN4y|!Zy^f*qwZy+{c<2BGW);gr5B6Gy#gm&{hrDb~aZhokc&2!#>~c>rC!WVAerfjj!p!^9G_SSt&g14r zj^_0lcit|y{gOM+Yxl_W*m-%5os;Lb+h_&mapqfg?6hjMT`280N^wt3d|Z0EE`umqnhOC+SMpo*q!=nhT`^XAP9^GdICcMKM;|} z#;xp9%h-ku?6TY*bbHc#+33LMnHjyU0bXPZy7O+Y+ri@EZfyMFF?(4hoV$kEz0hw6 zq;VHsd73%2M=!(pqiMZQ=8DvDvGi*X?Dpdw%9p=G4uo9B5J3BNJY-7xdRmv~Zv2|F zT3+)0oBmzl`lbEzT`K+C4*UJEpZt3h^4Gxkfc9@l_<;SJhb_@4?-G1eOG{+q0&pY{ zz;*Yn>^0MP!a|oH=cpVr16z>Tz0Cn>n62dT+9S*{5nO-wwsLq@CeJBwaa^pR(A~|< zL(Rj`0MuP3?XH7ey1bnS`Fh|cK->K$WJ)Q^+f1ybpHSXPQKY5;hXXYLhp|s$X=FPC zyCn87vl;C@l5S>UQRQr#Fmb??hFfStRLhWj|*Jkhi5`kFM9Lh zm=^(FEW8+s*KWKp$~H+qT41N{|2zu$S)dKje!LEu(%D_cm6RXFa~fvgu{z3toU#!Z zb{R6oW8BVG8QFbNLJF**9ML;8Vcp~w#alEk&N~6}OkfV6c@Kx2ns**n&X((|m4y}Y z9qeS|Ui4DZaV0I7kBTt|e=GfMhF@1TRLLvZH8xyxvA29|kN0v>h8DQ|hMP z7O!k5iHK4kMX4VQ|jx#9azVkWgrwiuoilnJ0s1L?bxGihiCci0JeGPN0-cL zW&zFzb`MXXlQoKZbpK^NLKdLhUM1tz20L{7@)qPDfS&+u=g0~Bvr}x{ZTaTIwt%wp zc)ZfNi|o7!>j(-veXx_ey~566wo{lEvl5+7H?DAnl|^Lb8tYDJCB`qVmUga#9lAbV z2Kg4?HbC3?BxK>2>UVZIKOvqo*HzW5U5a7Yd6jF#xJN<7CK@Fj1q=tA#aOkUZNa0{ z7;f^Jqs$|%4D{i%TqDxB2NxOC4d2A9Gvqi(#Wm6{-$Y#Jf|$-LeMknvfVOKfWJ)u- z^aFMMT0=vKR@p5K<*XR+0fkc-EIAt+H)6kwtPCd;Wi5lUbA*{Y0D&6i2|1%_15!_Z zKdVQ7o|$bJpE0W^@zh-_?b-@n9j|SW9|Rr&v|Ud_rqni3_7`tXGeG#TLIKF^Au2vKI5_TbX!$Y1p0U9N)!$|1vW+oP5j&Cxy+SxU?N- z4s~(MVIFg+ITRPRj>}^~;@sod9yg>k?sd4w11X(nIJkC)l!=WH(mffFvbfL5^f-`u z@N5TeL(1W~P7hBuq&%MQOIqmfH^n%ov_j7uC`atT> z{Z3y`KS%*S!0GStLmJ2jIROuP1Vab&A0mzF zndzA|)a*5f?+6u}frmo;;ZWENJQCuqAqQ6gL(RaWA^up%aoGrX;PDWDBIIDa5b~2D z{#3}}Hi8~_I>dK|oHQF@5BxdAcZD2`FG7AM#Geg0nKnWncrL`B4>?&jf**Jx#M?qn z4;$eR{3XO+3^_SAG9d6$i2pU@ zMn(i)5AiobPG1{Y5qLAi-wHYXZDdB^?GSGdIRP8l5qKxW-winfZDdH`y%2vt7*<&Mn0$+#tHzB9gMg|4G4e{?nPS{2k1^yP|--n#BHZm#jLx}GUIpb|)Q{e9* z{$t3QXd|Nn{|ND)Le69xSrzzai2p0(OtFz!fuBRXG3-pWkzIi^!+d?%nQkM)0%wK! z*cSBITN_OBsd6Xw^3on!6eAYT{e*N2_Ob_L`uVcr~eD(xkZZwT`n!%mgG6!J}B zeskEVwwFQvU6|hzc9z>KApbthw}zdS_VJMa5azdrofGUD$hU?0?O|t?y&Cc#!~Bl0 zQ)|~jzB9~Q!p@0yJ>)-y`CVbB!CnLT?l9jLcGlV_LB1!*?sxFn=uUoW<<3 z>FDt=eL_C`8-I?Q*59c-q4J{|oz%y)&I3z&T&9X%7~&xW0g zn0+xFJs0NBhn-89-9$$(gn3)oxs=(L(a~SR{Kc?yIkT^zqnE<`uVLp(W@9TnREsd* z9d>@p?9FuaN|^5nJ6AFLYC3u~%wG#T*D(89I(j|K-v~R`G5dNtdNa)53Oiev-AqSs zhk1M0xq;a?($PC%{%+X0iP<;P(R*S3e%SdPvu~lJ55oMzu=9InZ>6J;!u;c~^9N?% zN=KiB`KMv$HfG;WN1uiH=V9lM%)Wz;z6kR#!_J+|ZlR;E!n`Bw{E69j(b3mo{!Q4q zo7vmw=-V*=F6`XH?0f0xZ(;s@*tw6{+v(_sFy9+??q~J`boBQy|1s=5$m|_-^p7zA zDeOGN?1$;-pJD#5u=5DBTj}WMFmH@Fk23o)Iyy7L*GHVknf(MEofY9{N1P{_{S+OY z6X6>o&eP1^Nk`{K_{NCyXJ+rBqw^yC{D|`mv!A7-3nKi&i1Qq?pQodXBK+cr^8&Nm z=;)FNZ;Cj7VfKr3bZLZN7I9u;_Fw7f@(8~o;=Ii4-E?$igl~#CuP}QL9sM@KH%FXT znf)3aT@~S1N1WH0{RSOf6XDlJoHv>M79Cv|;nzo;x0&5eM_VGiIpVy-?04zth6ukg z;=IS~_vz@S2){Yve8B7v>F9S6eoMsph}j?0(eERCYsC44*`LzUA0qtLi1QhJR@ z>FAyazc=Fi!0f$rbYFyTk2rs4_K$RQe}q2}asI*VpXlhp2;UKL{>kir(a}Q@{&2+k znc0nW(s?ApTO-byroEny9*ywFBFYMI2W1r#dP#sgg+l~E-~#U9QAqu-bQf(yfeyM zqBsHmDa!APsuSSdQNAszPJs7B`Mptf0=zHEw@1|p@ct-&AgWG)4@UWps5${Y6y*;` z)d}#CC~u9b6X2s!{#aC<03VO?C!*>E_+*qn6;&s|r=xslRGk3-9Ob*B>IC>qls_9) zC&1^T{Q0Ol0lpCBZBcas{7aO-7*d--@ae;M-B&9#tp6ccT2=s5$|@7v=9q)d}!}DE~03PJkap`NvUp z0{kS(KaHvr;Ac_(c~qSMzlicLqv{0sRg`x`)d}$HDE}rZPk_C?jqs8)dP|q){S9x<$J-@hK<;^Aays2L0&87AHvU-&_m)G+v>Q&xc zS3JFEb5^h4*4vxvb4=T{A6(uamfGJ$_w%*=srjWof2TJJ zwf%hLe~CH2lw1E_&;Co|zZ;{!mG+ur&;DOlP~JTW7oPLXbD4QoKQ`C>%?f+2_v~J2 zbDb~UnJ4+)W?6+9_qo#xJ#Y8qh1QGMN>W@Gx24Szue0aH$0sTvp8(VW`ug-#$dtN{ zuP!-dO?3k%yvZ9|!-`|K84Bu7!9>x)wduw-_9!z}1Wd1Im8(C|uD0gLK^y36_DcR% z=-1;1FGJn~yrDR0D0_C7@zAck^Tc+|`5?3*OgI#;dMVI;Z-Y$fY&E}Ck9#KNk5`s1R@~T)6{vqcX~$mhXgjjYUB)n=7|?c{2AR?xHD7YJ zx)0sejwtr`o>gB1_eS>RKMjvxN^HFI#40BNjnhERqw<`XlpkK%LM93EbmjRl;6*8rT zD!xT?leZh9oQc6(-0`m$H~jCH^Hl=kpq!?wY-6o1<3<;iyj&Mz%(BhV1Jjwynvaoq zpJjV7{emW8qy^Ikq|I@0YG00UpN@GrR)0hpM@D0wjGHeSkJ|{y5nv*q?LGuDrLOn+ zx|R!J_cS!_)W(!8!ALNlLWZ8pjMp#}oQV<8o@O6OKGvLqxkqFL%4fc`V>5VkJ-q|+ z!@%Q!w&NYhl-`&x*h%BQHN_fR#R2Mj-qPAM;#Mw2C~s&9svcPD|m1W|d>vp!l7(f}D?(w?PEi)Zs z{C&;Qa+VG5V<_G_rI&cmg?t&X3DCSZs?Rl_ewDnjdRa_+Qk96ZMRyr60E;|bWt@+q zRp|C&4m{Y0$dz)08%De0?@;=Q|0l@lhvPmlp!tVFPVKiSO*CcYc%T67{sXMsp6JfE z^V}Imi&_3AoA?&Xf0O0C#WHBtNuwCZZ|N=LUI+d9KF$Wnmjasr&3_AIN?o5nSh98* zrpy!#Ur<%KdUbWZc=UiQsW=F?x_*WE2|L(bOq@x3y8GCp-Q3lOYShVQiEJ9{`bho` z=-2%uegvNJ0Hy$%fA*1*|EFcLUhS<>?NV2MG6V(;XtI9vTw<{%Yn1qZGZQbjTH$WobP0Gw3V9rEq;BohG`#m)EgTPvS-3j-0duM<)b~#%jC`M*c+JVMwWjAE7;6D7#nP2JujjE$6mrbO)UQsR&YM<=;WK3 zt}N!s85>tM#D$T|L$g><)3aEt1^5ax&o#Ywv$RG#yD0N0w$i+VnakK6Ec>v`5gD~P zgFHprUibIS#2@zY6&q;0HkGYtB(JU$?6B zO{`xb@|7}k-pbY0Vr}M%yXiLSne?v`mRHOBIMgh%yDp8b?H3YG*5R= z&zo*}sg*q1tT+E;%7)xGT-sHkc*(9B$o~a20oty1^|`L+`c;z2xnD|>gWv6?}N8)JWiiuBIJ)X4kp0dn8+IcI?m6#>w z0zP!-edMcYp|K8O2KZxa8s=d4HHxR@Waak7Q;V341ppS{qJ0(7jAGP(N6Mu|9HRBTL&Gw z{o4rn65w(``>_c!rLOH?;=Yn&gZr%Kw3BsN(5YGR?SVec_a)@7fxjt^)aw^?Vi}J< zr&!RbUFjXSC_c~PSCA`!YC!vOHe^agUHX>|YwD|NSD#c|O+A4*;@RTqa`{=ycLIt= zCV;6S#x91%ZwFCS)FaBE=W>xfZY$uIpI<%Z zLiiwuK&fnJ@kqi2sL+|Ch=Su8}VzwqWY%F7_AO zn1`p4(2k?2&UE#2V_y4k78&Zo&2U#nUdG65Z0mH2{ zOlCCuyR1BFJx(zz%wMw#a}3bTWP4IkD*bDL{eIX_{_TYP3GgML{o8n~^lx*Q{+ITz zX!ug>evLJVh84>TV9WO=s)CNYuMBcn9p8hx3cp%yV?E2jgR9c@bBs z+k-)2#}i6(r;T^b>xFzu^W>S<3H+q~=P~m#R)`r7nJ!Fg$HZ~R^YwCYf^_jb z8)qgwBZGw&O{)zB*&k8)5C8T2pZ6eJ$GMC&K*#4n$dtOyQ_}INr|UUdEDe>}@_kC7 zDFQ|SM*?$zLBQQIG>^EA9eDOkge50$q>brI-U+U;m@R)jbDhUL;}Dw3uJTxD)^gnJ zyPV;i-bcm8CP&Xs15#zp)24AblK2A2#* ztkO-_C_C34;5Iq_@L%@%C?rdxXW~{M0dIXLALAyCu2CCX>?h?mr*c` zit(zwTO2P}Lm-EN34o5VV>bdSvrp!8?1mgFFV(r z+21_E9++X_`2r6*3R#%aI51<7ot1&Ueb6i7nE23txSeVDci~AT ztI&m6soNQzUSKB8VI9$fWm?|Z_EhgcH%3}`4qBO>X+y1h5qa-5EG?6yd#D?UMT)lC znA`}lW0H(pSw+0O9S-?K;3PoDZ7XC-OS{ZV(&epkP3^KssCr#xl`L_O(fM&Qa2U`F z$N@s49^UUVKDIN=0q!2SfW-_dx8rp%H+m4B4|J?tm*W|m$uTVHH78iP19LNba*U_p zGR`!&!I+kVq`e)m#}9j`{je)BFB%vEXnT)>Oi4e_q|c*?_Lh!`+xsxtI|ZmtnU26X9u*R%yF7fiYJbF{Ugno9Y4gWUX_|iSbEb(NG9EB$pZI6ZNIJp>4L!&j- znmw#9@72gGH)iH!;-O8iYg$k4Yh>eH6Vfo{CoMA}s@YYOX+Q=zl>=|380|j7U&I3nOhSHPR?$^Bfbj!(4%Sg+xF!SC!(KQ@TZX7y1-8qCGx5*snjOWMMC77mSKFsWc(W~>}sbnnzwmc70;qzTN_D}~~k31xP zdO7n_PhlWG$jm{1VXiq0J%>!dw~?LXTgwk7&b2uw@!v7$7Uq#ZI?{ERcusAn>HQOP z_eG66g}=|(G1d`gi5&hiI-)YZ!DaFIPJ_G}XaIEnegm1(&MFz-H`HsV_|6gG?bT@R zHGgKT(QK73_c3vFi#+;4zAXG%g#5fr;{kJ!JJaMvp8h>BYqG#)4zM%frJwg7gv%Ef z9&8_mi}egPh~+Un)6|FKaq&T{)H~SBbo+#>2yS|r~tyXP&L zbI#nkvz$50c$F{K(c4*0deR{+yqzXg{vdT!KSsaVf$+N<4qbzvBE zLi*)i^^El#PNNm*&%C>R0)gTH3xVkN0Z5Tj?|OSbe^Ix6(cIEc-;%G!x?f z(0pPf-{|$(`E(BWJYWGJMfO(@bTaR+5if-0Tz2Lo<^@XG?N3?@>(__Al>u;ql zbKdn$@JE5~1E&362A9(Dyvwv7Z6;?EPI@VGbP7TntQO4IYgjg=Jgsw_M2^kUlFjca zj_iOdPm1I!+mO|h4FjJ9OalzvGr*-B=8qrm@7mqB$=iuEB)YQFh6AF6&O?LoqH4h; zm~*dgVv4Rg(8@4`WEd>abUA)dkVco)Luc$D5T~4E!p{%A#Q&(A@^H|tJ2~QWFMJq% z-Yekm0DlAwpUX}=I-lD%oVvbg;rb2h!U3=HPdKSojs=1WVR9c1wyG+{oq@CNI#rhF z;&dfiNH@FEuFzfm;zTlsuWUP~px8+dvWKT|f)bzpV)Xg8PUNJD@SEj5B5=Oxdp0({ zzPu}B1;F@;_j@^BJH6O947bbO0rb1Gofl#qQrN(&A~|;>hnd%&0)H9!C1B+IBe;}Q zC-Yk4wzcav?3}%Q?%M6!7p)IfmywS{KK(*A+%MvbasivXZg@wf{UDv^rg>c0V4V_f zvYTT*>NaNEdn)*Gz!Jdl@ie%U&iciswd=CY-K-w5WpmKL-rz-buVdZ9kwiaz9LmrX z%@wZCd7sR&Q_?dWR7LqYD0V%&z#isy4@&u_Z}g4yk??cucQf>z9AZrHSr?qWw9mgu zqx<>b3C2C2vo)DP*`+>0*a7KKdsav7oZgg`uRr(*U@TzdI|ck`^0n*tZM~{)8;0<6 z28)buDeGf==rU+Ca-^%U3&{!ca6{)&YK`2qwXBKw+XH>m-=7D6 z9e5Kk{CxucIr&?FCt75+Uk-oA0<%LNUscvK80#~stBgmGiXfTK{uFf;Md3UjqNX@HK7gnKEP)R+jTH4n$@5BCgACx)My&cT1L!O7Q;+AB!8q(Nk1Yr2tP0oZP6yVUGww0S~up z2PHOlkN$>MBB>KNrY0=wQbKb;sCiw~KI@@t__`eYM&MS!w9ik$|1W&4UBe<`?Wv*1 zhr`+i-f%k?=C0CKE00f!XarIj9Q7S>(c~n+$EDWw^4$Kc1GEIhQAMbo@U{7^at4LO zd1*N{;M}z9U>=z zGw`wYF+58+9O^znH9fSy{xn=8TMZi`c@DtuQuvj1aiWn}*+2mxMds*hwHQ%#YlN6rgwBB`t5<(=?QH=%1&zLTqMc6|lfvF#KiRw|ufL+AvhDR>_k zAeZZgl-bXn7V*~%FQ$Lo4t^J~yB&WW?RU)l-k!gCTeqRuBexq|J%kIs;^kU9g*P2@ zD!Nm~)J|UE$n#l3dbVAyznp`9lK*w(}u=Pl2zh7 zxH^v$aB=KLVdZtxg_!*$X)5Vhlsz%s8=+Chd%0iV2Y&^49WecG`nHINTRNHV+S8Bj z+q6jU2@@!#&X8&6E8*mmC+H0lqG_M{rE6W~)C8X6k8}s;aVXX@=TrRlIV># zFURkt$D?jybkO>T8VBXoI#m23Z_Adb-ETxbvyXfP{BhtZz{vk5xRj3eWJl^3M3&## zIE2>Zxb%+_Lv5eBTw8a#RYik!H?Jp-#EvV`#?V5SRXY7f!C0$uR)s@+>(+>$n(f(s zFadlH&;S^I)__YXisOnIdj!Kz%)_y(wn#VN4m=Zv#`42v|3F!9Gvkyq^P{HJgR$ZW z?IHR*EA=>CDN{~MW5mZE=u|>S`o+(|KL9=i3?JWZiuf2F$7xy<$3ZcCwC@))Htbxx zCfhA4TJ$^a)tZ%Qb@uiG@)?Ix*p%d#+m${mX%{`c zpYR6Q<1?n=zO(+a7kg$Nmeyc~(@cT`GdS3|b;bS1PBcTjeo0qZ6k? z;gG(Ny|Lr3^4ApGeky^Hh%6`VLcn&rI=u&Tv|GfnUyv%}$V?`ivLQZ8p5hJuX@eH~ z92Ot%`@RGX8|anV!~C8)&z(9uN0!sRE|Y!DQvFNETWPP?1JsG$5_6JzuqkTa^p5Ov zR|`G|XaG$6UI8v;O>B1(m^gCrx_{N0({^lcl8^$SpLN*8a>H9N^+R3Lq9%o}_@RJb z%SZCq?X#`7{VLtZEArA_KI4=`g2=I1`iG-^PLQAD2gQ!I{ZdAb9KT0?zx*iPj5}L; z>AT7~OV8F7bdFYTxVyRm>(O+jwBA9EQcdMBK&x`a=QJSV-`UgB3q9WO|D zJM3M`y->+3GisWhs^=8t*p-;Wq}hfS$oQp5S~T3P99q19%A?4a3YwK zm(O;k(Ya1&A3QhW?*R18Jo5j*-JRsh01STx;8GepS;x$fIW=0yNH^Z2ULnQ}LETah z(sO^VF3{HUD*dZa4|%MNRx#0$yLUE-^u zd+J)OY&NW((X@3Ha`)WlU1-1LseRu5=<I;dE5zr7lK~M2yC~0JV#aLptX+&e_3c&U=IWpr=PH&%PX<@lQ_g zpg1{IFG_gBPY6~lwa?ETs4Mjh?aU7vih{Jm2_x&4KoKRt)5GkM`aYQ5tYN$ zWpm`CVVpc>?pNiPDF2Kcw31ug2bHJ0vX^(=1rqG)x7wSoYwf@3;CEW>aWN>jZ_!?b z#BHP;xFqTqJ86Hj9{m#d&A{z|xj%i*iSEzc%cJ}Aa2$uq+@Di6oNDgPf&6QnxAN72 z{9Ej|@}=qbV~vJ=(MU#(Zis~2xodl+tg*cAY*MO&{skq0ogBfZU5I3W#=8wBA4^d{_dc#jd~UgkTy#9 z4Mx$%y=Wv9D4b;9tn|BzFtmS-bsBpwkL5?cowSEM7gvFQ8+Z&b@+Z!X_j(Lc7HCh9d47jBn{b$%HqN23gt1F0%W$^|z~W0Rd#`IQ~$4zL&|cc)RjG zafqg&$A}_+@70lfOX0sVmTxQgjlivdk#E^~k$ijO``S@HVzg~pVk(0#J2 z+S|42u-AuF_|ecOyT(F3Zx3}ceT($W^hkPUh4g`<91c)>Ft~DVMGUg;97%P@#X7;+ zb#S`gmS%3r#l_iS9h;dQ%ym-d~FSPFx?F4t4STrn$OZ1q+X=%)#+8{R( z{>lwFtiD?57UlNxdZz;SE8@xTo*Yc{y1E%2^lok$2i}X*H6F%nJZ;(?k)B0B8rvOF zNNu#>AC>;K(tkypuW8V|Uyj;yH|=Hm%Xh$^1zrG5dv5(g)SlB$j-Ho>SfAY1Up6;Q zkNU~$cGxH0PKaXt=juSNb)#F$8n|DYfUCN@)146kEuT)7`+W(G!hD)x>bALpr~0we z&mE!1Cmef{I}1_#F07o3^7`b?5Iq%{DdmXQ6&`)IQH4e`DO=UIqUH@MplZ&x-S-_HmX)?bAK>S7_HhRHRD}sPE{vByQ>R z?ptB|+!=#qM&>#A$eD5w{HR7@IfEK-zf}r`)ECirbzYBbfbeQ$ZnEodatOg6Pd)XB zeBTHEG4MQK===g)$}1iGRt%kJ9TmyP&A*7dE&|@Gtcg{6x$Y?fo|;`oS#@_s@>O1t zr8^va0x$(IbmxG7HeGX|x>ubS(Y;-Xt=NKy?#b=w?u+T(NWEr#@BsMJz)t`}ciV*# z-KXR6?t$2U!pIxVkFga_MYH{y{Xeam?LVmSvX^&B#J?|Lojq8WBzxy13nbcjGS?r8 z9w22`C41TlUzan{+qoW!--3mV>3pU0IbppS>|&)CsAb+9Jx%!pKCyA_U*sqJydIu2 z-(TQ5DbYL1Lmt>U#JJ{N@n(Ie!Zg2%pDp$|B*umZ8|5@MJEb8VHy!>A54<~7(1l+q z&T%V)6Wr1Ta(nKuz2jA_I#qvYJF?XaOY`pNK0QZ!nEl=x;O_$O1E#(H4lboLyRXxC zkSFE%4NdE1aA;M(Qn%ATURD26R`)9XVz|m~Ks_-}7?INa^|=46gpFHv)}- zq5Cs%DT_K8k5+~2`{RWA8bf}c`o16TCoc~@h+b9i1=heSq9s+96_m0dc5(??*PXNN zg?eCSKv||VzhD%RWkhvSrY1Aoma7p&pJ71u8F~qZ;wER825Izd8JFXypscIUS}vWd zd#dT>Gvt{@5A~el@t%Nf$4EkhKCGQ%?4I(?!EZ!z)?Ad`=gj~=9#{bwInM!?va*Ap zq3Mt9<&-dTM%GsKbDA0>%UkvB(0f&)LM}oTpv%1_EIBIFL^-Yr*2vuHR;ZBMR;B+C zX?M|o?TPO{^v!+v9eCnm+sXqBf4we=_`5sSS9IL(NBm9SzIs*T+BL#pG#P%)4kyE1 zMd9VA(bV_=$2iQ8U*RGg|E9ZmXR?d8vB%P>0wxY8;j)k#=oBIPZ`dylcgu?CAxQIPQ|fm279X_ zdk(OxpGbSe*3a-vN*^Z?_!+$F5E}WMXQ`z|sLeD)xzkG6kvpe)N|aUZylzhGr{Kmc%`?tWM7$ zNKU>Uu8u3NMSajy%~aFmq(Rog7i)ck#)|c3o0p$!`qmH-vLFp$7i(VbYr|M7#$Wu> z2D>S|#f?uy_jfnH&)K8kPXJE==KekpE~PWO-tY^?VsiFH)GWlt(#V<~eK|rJg-8-Ak!=H19?3 z-QatGM*u_jad0W0lWtb__T*nZjJ#F!+_A_K{fdEWw5wNvjwd}hgXUX21j&$abSLH0 zUytMZFX3B0*d@sK-_*Smjstx zX?BcgA9K7k?oIbAy-(Fv<>_Jh0Ao6@LxEiOJ4yRz@~xZU{q-u*Baw%$$V)6k^S#d1 z-H-Q{+L-p*DYjB+T%DGnDt#&Zhhu}e;9(3NcMkuY?ih4-&p2*R~*z@P1JS4W# zWciS*laLQ^XPPb_@avnE%_ew+yyJR zgwHxJX|+$^WQUg%!`G*A1?98j!`JEUUayRPHM8AEb3>e0d7PiiSWmcvodPePUNFW< zROWe=$-1&&oIkN%r;7>-6Zo|yf*ceABwTs0DYoWhrM(*hDCruchPjVASj01^!i!Y;B;JR*RR_+XUMn$Dp=ZxTqVO1dE zad9(16~}IElr0KtPD_#}IkQS<5HflOKDIMtHu{NT9jE`PoDfe!KhYA?kNdF`=h-pq$l2Q)NIfOSTB!VH{76v~nnc4Awel?PJCGr?~&jQ~C zd1sFc+z@-@b2Xk%XqkXXYugcU=8_s8Q z5@#eciDJxNN|Q+}q~}~8jPu5|1evRY;+8;P9~67KC4i~X>@eV}^0kPcozN?Tp73)$ z_$|O4fZ^vJa48+<+jf3%hBad_O`j;N-#jVDdQDwUnl-?xLl+$-N7@t9JxINVZqBu| z0niOFbSuE6behNT2vkc~HgQMJJvj;GYsqL0Shp)8BZRw^usUns>v8|5enbBX@Gk>j z0Sx_{!KHi-x!1HAG(_5y*U+9g%Peb*lTF`f)$Nb(KlK{AI2l+8AQv!n)8JA*Q||Uu zC0FHZYN_Qc6{=;jif)PNEu}s~ZwL6fKr>+IT?j7abI557iRAt^ObkgLF6hCS?mp@@ zbpHhYci74|=7T5q7dYizdd=5FqG;-?twV~@- zVS{Akd`<1JoE@}nHYMl2nC@fLYvg9r>uk=lt+I?-}YwCaBo$rap?t-l|5 z9WWd)a*YE2Ou0sVe!=#}bazs(k?SkqHv_lDv_3F_tsNIuO^pr(M0z zfxiU&0x)vC3jSGg3>gy15iVj18Hg8 zit&#!d6(8o$`69w4?YEN@sYzN;c1u!gparp*puBK+LO&bKWXh(H)zoz<_8?&aXdxv zEY84P{2jz7Pmb{dFTYD@I5du9@@CaO&Y1OfeBW= ze+76QFnmn-YQ)ED9qgDo@=?>@aDrc1m_7wAob&;k75q5>4$iQ1rHcV^ikywzbP)ly z6V4cvl>{Zj=%y#hT`(UlOmrm|33eUWJYXAHmFC!hg=dkMklZ8XWGCdrnNQM~+!JVt z&)D7KP?HZPf3}~CarC>kvs)x!UVJxd?@N)x>~kLme;W7+VC4K2xRl*-d^K}^`Pp(V z+PbjKacGaaScm32eZ_odzj{$y-xPHiR)+KK@O0~Ry$nVBd|5_^W##W9{%UT?-iKqr zHv`)M!`}zsQa+v$^#>CN?r{FXPb7j(TL`s%>Nzje_g{*>A7ipX;p^n^b-9?7?N?7E ztQTOkIGO9@=Ib=xq2i3Wu2_y* zgA(7ZRs_6~!&>yf=pq_iO?(!triq&6`va;~ncF|SYj)D@ZRZrDuXP9YmHGcp?Txhm ztDF@!E_$O>KF(2Uj6T5}hgg+=irT5+*6j1W4g3P&62P?6x51^D=ezU!*w#){H*MV> z>eO1)kgLUP@cA%w-hM?@d(cAVCc7mPoTc^l5gb^BIaom0JYVI+pA<%Mwpf!lsX5LF zxw(7)9Pw-2mgTn}_z++uVECN~E~Vr7WykwEb?dfmI~tp2Z^1S^bl+^tjf?`a3H|4O ziFooM@tHQt-fXa57H!d1{w41J&{+x{dCngIe;@b&Fns*+_K1(A@j0J4zv#$E`{$gc zI%$%4&arI$i*vPDw%)74%QeyE$Jn;=;hOMuRrvai=$qQ`P2Sa<67E+&$;C5hupA)q z+;eu}<91qhx$+)Xc6C`#_g011XQ9n0Kq4>Cu`!+CH$nID?2}KluTw7Oe3z-6%1C(E}_0;Rf-zX^6xwB8P?)r_#}-=2scx>{g0jt>!&DQOopK z9qH_KA4d0UbZgcQVFma)U?X7e*A8$g<70ou&vU<~nft{7bxU|ayB!Rb zxG81X5$>P&A3;&DFQ%WqD@%VE_*h^fVCYWH)=+e}zxsL!{@d)01|TAJO6 z&xU)m{b(ilPT)Mi@Oclol%*ZwmYVxBb8S=1X5*upjx!P%1mpvK*;^h^|BnL`tX#Td zI!+FCXA(D~cQHB9!_$^(cNF`LYCrA67F3+GiH1B=^*}KnwP>>+@%b@)nDHjDoA_=( z55Vxb2wckCn9oXMPa3!9^ety>*tS(%ROv$(MT@Iq@f13se(aEcaUl#!iud8V5dZch zo6xS9R*bOy@R+KMsJ*f+9nZDEc9XTam>P?&ZI!x5dDGMhYGB;+_a)-{4?m6YBlrJl z@ZSQz2MoW3Ov+LYZi)6Ety`n3X;uvRR4{PU8oGwycSuiv?K^G#8n}g30HeFaC;U3}^7557U_SfFWw*OCi zR>}?5VNsmu-?MKjol2LbQ++e(+;s79ULVz&w{@l@xZl>h?R;k6f_rWK9Ns)7IIj#5 zueymrZLqO$cn&@>i6r=_oFuiBNGR(uSTGZ=N%szduRFngPMy;~hrMKGgm$~~iF+Te z^=>cT^_O>7I036mw};?w+Jo@4aW@J6l-=9LBo#L+I=a^n>ojLpu#D5^E0lbFmHhPP z5WT@3=p;@FmgP>EtKFx=k3J-UUh-lUyllHKf)3Fv7O3c%4e!5F#`uzggjW#h82dVNmd%w*4R3MW+UvM(d2%FQ+@v z>RbY`4XnuR=k}1!?GC2dGkcw)zk0CRtaH@Ol&!<&W^{Il&f36l|#MB5{D7sShZ9 zOxyHh?d=-zRrf%4ex41!5oiPqU-y7ZXuf9dA;v()tFq|*OB+GTB zSA%iIpd6sMQU;V2&JJ#1A1oyFDE)?_1G47{`D^GA$zy#Zd){3JUJDEZj64g$r92$_ z**a}`(4+N6D9^&RO~kj~(J10nwBY)3wXIt0QQ_;7t8EeCKF7L^ne8+^Ok*jI)@W#Q zJQHc1H#&c)=MuyQw#Ml@w4SIgmUF`9%80*K=vP8t#=XbE_XBSMhClVqh`*pdYG<>L zFymgx-{K8xW^P#1uFWf2_2S#LYSk;k*H=iB$(vtr5neAs3kI*nd5Mym%miJDZ{Df8 zKI!_EUF4eUhuji+>20N_tMFLUO81KRZGfNpnBUFd7Xp_8hTq4)r8o;Cew)nscHD2n zsOt?)+a#uZv;&hy#ozE*OkU6pof^Ildx<7`N9`gYt*UY+<1M)%w6(z4QFFaubKLc-R8C6F9ELrhTbK6 zB6CchE*&#wTM5^cFm>ES`IvV41Zke@y^*iySFoyeW`I(3l>F2Pt+9@tG7s<|+%^ z(ll0=l@6XF+U+@d#NZk3#&YdejxHaV;aXcWU|{h;pTCSh)Ez_o704cs?*jy?qs9^(8LFzs9lE@gd3`&iR2n^tXW zYS^}QHSuGlL$<0fg(lMPpm?_qV9~Y!pEvk9*_jd!n)_n9E2-D4v$lYr12hAM?&aW8 zI_lTV^SdGP4?w}cUHtU>qDlKbar>>b1SnbQR7(dI9X`)PSXyc$d0(SmL-!Bh{{%h( z4Bhf?9i8qDLwJw+UF7kZCo1FLt1oM-M->4oc$_qm*8OB)`@ISDfF~7Z7bug2BLdFH zamV)zj`&#*J+rU72>g2BX29_CAh?tlVt+8BKQ`?!g;WCJ*pM9<vBbz{eC?^HqODsiGr`Ha-r1;TwoPd1ArW8Jx3lwXH^G5HfZ=N#xRlQ3 zS>fxD;Yzq_Rx9OZ_2Oo|N16&tQoIag%{7P+NANN{Qh9{+?v44l6gsATZUDa>xEnBh z+z&3LvwiP;++-nL*rHConwEH9tWDR&#-?)!R~B~9GS{g`+LmFFoCm1a z(ESkn6QT1+mTmwp<+)DgPm!~2yNoLP#Pb6L-D&+jr(7?R!F(E)yj;@5BYF+gXVz`2 z!8Zb10VC&`;8Hs4Piw-h`RpxWy5?rJJS4Zn`Zwf`6LNE%ou;qlBj=;w&jT+3M$X@YOX*Bb zL#OQsv{~Jpl{6Vjx?fp)I9x1ilQb!k5;IXG9TUk}^WE$?G7@|uFa(a$<8$;y(n`3%6QlA;O?gf7k_%>kZJq|9VGkWH5wH?8Cba^l? zuS@Zv1jk151>eig2W8;>fLg%Nn-4B!MXU#E>Y!iS%KQ^rZn3qvONZNu>%#5CLG`w6 z%^2*AX9?Lzs4FxcjF|m6axDs>D1V@=7-l&aD(34(`<&=WKR7Pps};Itef%)^kAdd_ z!`I)yrIf9S*2UL#(07VHSmr6i+x-!5tub#O+1C1yw;+=|^@!ZD&NLjNGlxS?eOOl> zoDlI>|NZQJnh$<5um&*vT>viSy4c_NidcVa=Cw29d5u`Jd!rz;>pq~{9aPV0>oq#% z8JKRAFy{Be;VEh`1}IcdG}(p9*{bKt_(-Xr6!EhUdggg~3;eIZKLEo|<_8f!ojot@ z4x3L451UWAI%Ma4MgxKq)-ooQ5WG5j|M(yoo)b>js5T;I;HR!W;%6oF0^Z9wwFUeP z;B3I~vkP2GXZxw?J2!~YFWq=NQ{h2%Jdx+hB_^WGf|IlRsg{`DKI$`e6mNn575E2W z=w%*{=rwk-e_OYDOVcI@vcUhs?c$fWTHNvustdJsGa-7$hPR`8huaY*o|~z^)lUA_ z$+7&bvO6bac@tz>}6VMefe2oT|a+tq#Jb%sEuqkY&7PYZ` zH~AC!(UMg}uN=!vVw3Qt+ek6Y5(!Vd&}f=V$2P^oXBU=$Zcf5cm&)X8^;`JK$0t zh{qRWPh!TGaQq9GcI=fdkM>IIWG8n}c5?q_8#(Rp&SOTHmd3sJ*JrhR6&tB-6b>K_jZvpQBh9B>T z5kIdqMDxRkvEIqF&)n@z;ncwRdmtKr&;5YC%t8Fbtt*PF!f9&;iaMFLy0#nk@^ZV% zv^CaQ&AQ=4z1kdDHP4RtS_)lr-`0We0L}&sUpInF>1-TYxOT1Vt&T7Z9W4Gl!%)jH z5g!MjW7_Ah;GY8aQ&~RxfJ^DDeHM1!JnxnM-i{9c?|;txB)yeA+x63yADI)o^UYPw=DcyjcR? z2j~wNerAD7DT?Rsj?YdkP2se0QZz(=sI1puXLRS|;e6+KJuRNZslQ=f#Ltb; ztK_|m&-a3V2lzf<_<0>%N^7i-J`z9S{-RawXwT69!~YhB#&ph5!yybc%#Zk~c{-ve z{EP&j0W1d$KWD_>oBL$0<~cK&yf~0oD{mEhfLhD}{;nD_Lz9z(j9(n+3|=&N%3Pb% z@J4dz3%Qd&(3yj}_yeuqNEW}4t3Tjq8V&06(al@g5b?Dax@Nue8u;&k_W;A!pTVVc zw3{$|VJ{{-p(EL-d?;oEPCFYFsi*R|i0+m@)! zDkqdUb%?~x3nF>To(b!1miylayapH;eHPMgj`M+;cHI%0EGp|Gc69|X*AmyWlK(OD z{psLMz|MB{)U_O{-(DEC7tOQQ`j`;Ngd~doYzYeqj+Ou*=0Nz))r!+S&cXp{63bc` z@&6h$8h9)GzYqQw;BW2dHXNDmNCp8z0Y3n|(~fR^r*uW+6%bxQnmr?HbUjq! zLkZU{irTs1xorPj2fi6N9T4_JAJ7CY+fgfRJf9~}O!)teO4)J%Yn`r_*<$75NWQwCWa-TU zpAReq480}bQjR9ykYU5bQN~EP5((c_=UC1;mNi4yik6Q!4l%t}>NE0v2mC4ES-{Zy zDY%r*`b*t#T=v+VgS-NE1^fw6$0I{{qE(c~O9 zw7r;eBi}siMphml(YuuTjGVWE?*_gB7GP|i=$ z9|ErehF;;%B6@q`eC}p`ZQ8JTZS5AE;}$lpnYw;Qr~qe?_AR{U*(^>8UuU;_{Z_PN zdo;Sd99>?BE^!vUIpNRaH&G48g&$1|U-w5p-V@iTX!R>t;f+7V5rNky5O{EASS3E4^`FS0(>eV~?GRWk3w>6tBo$ z!tv@95BF}O7=ceAZ!-20VvUReQc(Om<-SJ<1VVvl?4p^8C{(ZSmi$6F!#zEClsk5V z@<${mk`GJIcc#03YKAvm2z2-KbPp5JrsU~K%xUwy{<%SVkUxb~c_C4s5HYqxboX46 zeRd<53?qIB)!rcANtX-=YNz^xTxwEIH+!I)PdH*y!2~;}??|5Q>8kTET$!)@b9lJD zHX$edRJkvz&k*qhL|o>cwAPy+HiSPA-idy2nN;^Bd4R5TaAUA{I^)!N`s0Lsp7Zxa z{O%cSoWkx)Joc!+@1%d3b@?vvYk=zk)Bhd>m(nqRWZ3_R{J45O`2TYt98jJ}@F7IBaC@i5c3bc4)-74->&bC3ZJEW#H;7FdPtsA0NmB`T8z(@Wb-9-iWi6YkSr*4(g(<#Yw66Gv&25@-Jvd5_^O(@W9?-R0=mm4|Iu|r2BbZGElX;KOqp2 zZ@e_AJIc2iM96O=Tj-zQW<#rfSLwV+fIX*2{O^W8^Spcy{3+lW!0`VfxRezg&hf%_ zT_l5cn>|0e#1-fgKVdF<%`4XnWx_qy#6YUs7SStvIXge}2OkSe0t~%n;8JSh{g<)3 z$@%pqa{_{d zKC6=7#4{ydXPordU~t(Sw=%%2q{1CMk`-Dr0Wx+LvUUzeW|%*GBL zIpl{|DJ-LlgBA7(?)Z$JdtxlwVSJUH;7;`aqWr(A>hL!os`PK7im2fiLQ)!FoqM9a zJ^5>ubB(sI#WOFIKFIx}O8!~dYM!2U=8@~Kap#VDOE|nh2Y-sHt#fx!=`J1Y2%20E zM>>1dyYh=GB!$c0+W!Uy&US;mmsM^tF>Xr(oS4q~qFR1rO1l)2oaN(PG}q~+mo7TW zueST+{PBzSsp;n&`A0SGl`6M8oF((8*;9!CON6ERDM$WoNOqNftUqt?LU&Q_gz&CM zA}$KX(j&1&shfM`|E+Pi)-`nY)dnJ*%(AB@?JnfEygr{7;aQG54)Wij{5w^3M(WzF z($^gNOX4EUTqpm2gYxfD{?}A>vHb7>mFBg5l|3*b)AP?b3Z*Xo^~%3NRl8EbEh>G{ zp%vsoX`B4}Wy-%v`8TWTg#55orN4CO4-4GH2)o5}3xPx*T)anBHzaxF!tIp}{ zs{wVX&c3=5=R|u!Fg_fKOWn1HyxY+ya4T}J)n)IhaO56?iFVC3dXeKM__X|TJwY(9 z&$YTxT;8lD;x+cH<9sWJMcp+4$AEP<=CrlWTK6tn_x0AhL@{@C-{3TVj(R7>kDgV$ ze4TL35%x15^SEU!f)8FF&1XAb%kKBC1-}c}4Vd}t_ux`?#qpYV$M%omd{)yxbYtm| zCbZ{X?^gFoPwn-7q@MI-HF}kAeUuogi%FO1=ad0NcqdCq8PH#M56B$?fO%vP0m@ZR zTrL7V!#e}xwwYpHNGR`(dJ}(G5I6Y^$-%OamC}4uB**C2v+LLC;In~wfE3YpEb17S zLzW_^u5H?~L(&r7sNs^A-DE8uqSBs+^_4!*Xey1983NB5GTI=YV$yssM8zW`j$4 zufut1SpW8o8^T>c!@cZ*!a#plh@TltRXij)222(dWy0)0!~!evlNq;1-^9TDJg=wj zNx)qj&Uc9_!!_9P$$%teW$>i0_WBPx;pKnB!pog*c=>Vk;X`)#?nND5u8uyuC;IS%=<-%{c~CvcA=4-7 zi?j74g>AU2?)Ongh1h;<3v-4Zlb($;@vrTicWwLkHi``Y1>1hz_V?TNpKSZjcAq=! z^quzd$L-mKTdcutq8c-dymX&eaLK7-OH}%X9x^XDmfvJN_g)(>&`EdL?wxkPYoY&y z{Xg}%&E+|{JZA6LkILm~HMuKEBL<8P?y{@r1#haLE||qY;QmQ{o>!Dig`a;(B#vme zu$=O*IrP2udX*EauQFNW38%Mazr9=c>c{8Axb?rD{dAA69^qDWc|A+*pk%&+Gyh-N zUp3p+dgK>vDDT5fE_WtvlXyVe_v_pXY~S-Pk#8cNF11U3XzP7;oks?XTaWY~w@HM8 z>+RfuxdZ$fUG4Ut@o!C=_cJxr&iLq%_jR}*P4dT*pJC$U-^({`w5Cjc`;hlTNp7K8 zkotG&fx>CpJdoQOu_D*0_HLG%cwocFm`C<9<)v6p`PZsGPPJX=_30H5?bxQKOSm^UqTQ$Q!eabFF3&18wVU0&*Ol7k*8fQPPpd>gT<)G3-RK?1Ax)tUD*Q_K zSw}xd&LWn{6@JY)@*93beNj)kK-X3$YaF1Op<-mD;V6g7;G0D!#1rzil#kIAhf9zVo8;A65ac ztCJ7<`X`DwdH9E^-=>_ODt%i1iPQGzev@iv@Nvay`Zr2X(GM%{R;|;-|L#V8Q`Fi0 zZd83YroR<`cU$(m3HJ68AE;@ssD8Uu?G9D$d`l0WTHDL(r3&VRN)?$W(=SHz+`->w z*AdR!=v06~fSKpc1DDbQn4PElVDlmY{QMZnbfebppc3q0&t zzsJlZKUg00$mkxp=y-*G0uLxpmq`E%G4jp9{R~xb89h?d$-REgKw{1omMNdGy8K6u zpDENui83#l8#-`*sGaXb8m@+YkzCKgw>dxf75M)E=XY7TYQd#+JQvN%HS^d-vSet% zpdi$}^$uSP4tw<@ZQLW;dLpz}k?eJO9wVGD`PxW|h{tP+0Gg%wg+70Fm}&P?rEiHN z8i#CHEiXrWH^WywAIZAzE8q_T4+G|Y{2E+J$GFB>zC|s!oyZwcHqO$OzmUWAK|p^% z;@SBew11**BBl!bRs@T^L>}hVl~F>}0U2@R=;;qYou8)%N8Ijoz7nS^vg&>j@mcdu zRv$J7d=Ah67(TawOX=vJ5c0VRBP~w5B1Nr}zDc36o&t;mL=kt7wr(kq$jKUQF)6_D z%q*0gRE0s0S?>76_*{0emUWwQFb$8(%2y)3_CnX3p7~M*rZC0zrZo3kHlV**-$qKPJA+xqq zB|6pV&hc$(cdP!ji0;SK8&I$GJMZ`SLID}T(CrE?rK4SDNO!eFBw8nScZKy;lLCm2 zw>FitNDHkp`|36?H}**}z4g>*?$ZwNuK>3IhTadsr8q~@^OL-L)tXS!7WD|eUTDUL zhOa%s*OKrxd@h?cXWUJg*)c~9@T$e@CN(gh&^-xPH#((3MJWj+g3w-dw!T|o&AT!> znQ7P`wM+UB*>R*7_%L8JVECL3E~TUWY}hWx5(IgDR?&>t;yaOX(vX)p9r;u}hQTH# z^@Uy~KB*`S2FQKc%HA@&|7m$6;^Ri>R6NjG6#>{PKK%X3OeSireRs=Lq3?D^#|Gfp=}aX}h?9r025UiQ8X z1)l=U1PmXW!KDoER1dys>*_XE?u%F%8L`5F#y3d@4l8753t3^lwUY%bj0$qg9pA~T z(0z5EkgXP_!-)CKzlr#I47!!jmG*fK{AJ*mfZ^*ca4DU)&oTl@OAl^QQ?6D4Epwvv z9+BSq6V$=CtO;=t*#j}Xnm=Zr(-GhkfvJF@w;5c@5ua0%E}5}!2SeTfh}}aX^nf8R zkmT+RdAY=E%D2-!S#$7bb7mrGv~_+OrJH4)?FX2N&uM(iKN%_s5lQMf7Uk&)PGN1fK!S0SvwG zf=lUW&lu9<{!fdjIq8ROTHsh-bCv zNoFh(#IkEeDS3>SoG1pHxuMb+kRo z9c@p>PTlWgSI^cqh-@9~|q?c~yE8QL?>}9ATWqW@oILXit;##3`JDH!Cus zY$c7K>cc-A{9VLfEA;E2FZcNe;6Dd`1sMMR3@+sdv0Y-#%y#EKHT{Ldezl9Sxjlr* zy-L!4;c+l7d`&(XviK?{ulZHZxFio-S2pgcL{Bmz!QMIK6x9>LfwJM_)JK!Gz{{jp@tm;F4K3_W-ruM4Gqju^VwGio$evn_~-5j@%SO6a*ZIg*6 z5h$eJi}+azJ#${S8oUWO3o!iD{x#y~;rP6@CH8v_pO^SyA@JC*6Jg-7-)d3A(uq>m zW9h*&EfC|%A$>nhfqxtv5NaZoA9O{Q#Jmz&J%mE)ufi;}(Ut_1{@^T{bn zfT8FiBQ8GyWX9R!ivS54SUKNqD8Sj8R8;(;*eM{0M*^h_seC-!8>Wlc?hq%0d==fC zq~C-8PY%L4uc~UaJ;FYYK#IyAMtX`=8mkIdnb$JETOtfJ`u#w^sP!Y+P@~O%joPW1 zc1Y81(!Xy2zXSLhVA|<1a48-0zlZHq(|<0LOVfs}Tl$GkRYvo=+QF)B^xz!p0&>Gz z*OB8U>7__S-reyNB{JPEBjys9^al}r>x1lk-vzu9=nWY91Hq*nao^CMe)f2|Zq(oa z@(Zj7pdOlY^>zBloFb($rn{4R>v=D7UjzO%;C{f+%{ds+J>t5*J>9G=M%_Ic*;^DZ zvw%fmBXBDJCQFVoCsR;UP}z@JW=e|Dr-;Zgc13;>`P^A3GXFT$IX>$Wx0~M&-J5(y zep5Rr9FiPbG&osD=I)G)!;V+&C9C{ocbljubhms_lJ|G^kXudZHlqXNI{3G!eODrf zxxW{H-vE3SFmnD7TuS|s>>&=9bH;{k+ndbpv+i+`H7|zBP+ojuKGaoCx8x|KC{~Gd zP(j99_R)#F!bE;PD^s**h4Q%eXB)1o%*r_ZkBHykZ&`k8zy|<>0Vx{z%zn7eaJYE; zT3I0vrz;G%zGF4J1^ZY zrypUkNcc$FnbEdiXx_O5TP1yI_>IfSu?}i!Oxm)}Av5PGJXtszO_W0ntL~%t{=>hy z|J%VY04@QHe68S8=En2ZA$E2({aK`}>Q_s$-{DAATE7j=LLG4aq@=Y=Kdr5KReBbR z1WCU$gnT)!%47SLCl5IJ+?LbP!*oK_-~7*rpM%gd`z`ek@_zss!0=NEF6D^pxKktu zfic`HZQOt*zplcal{+VIj|)@5p_Uf~f6*Bg_Xhnig%l=tm9L=Vp!6O7N3l*gnuK4-Qs^Cf{PTfj$nS`EqhoX|*s(_7hhHJUkSe}!z8{8AR z^qu;k!nH25G1wN>&`l5YTsE5(?D8tg6Dg9s4=5s8_T+$deBNJ_KB!8t`67%nRpvWG za=Vs{#t6=3h78a#koqq#90Vd<`#B|fe5L`?ElwtyRDL-Lc^o%qEIN^~qEo8JBMZ@)V zrsW*RDeyASC7YcunTm;}ffx@dXTQ-7K{yrhISWr(!{>7FuL7-r;q#~ejQAWL+b4C8 zQP<}Q6@PwRdA z6q-7rZ`MwqlHL*zgvd(^$p}~v%plPt2NHe|bRm`cG$+R`W=-CWJjBTa*_tx?n6kl{ zy5wwqOs-cmUpEB0<~YvMbKdKelG#vnOs0R)lH6)F z!XD@ib1!kaE-b9(%%ep150rFy)K3~ej{1SDdz!&-0&W9LKlx?+z40G1*RY?66OpX= zLeJA?0!oY4>jZiEV~9@1o&RF}eaBi?mFn+!dHK3LuNS7M-8oqr&NYW1j`=iWFTz9- z)`-1D{4M=nm%``>{fRA;2jg}{#Bb%lvh&3-@MD1afZ_Kta48SR`o(Fny+T{RHY-%d zZA?^u7Db%?O%!E%x&%zTSbx>EZdQYxVq2#qo=(zF>&ad|ClMY-skYaLxYM4`5e8Qc zr*#Z(K8e|XuIzylDwMF&WDB3Gdt<6F+Sn%?tcv(Q5c4PP{U>k^C9F!o@V^0Eim_ij z#Lm|^ZMCW%w~KlEK_|R?8!e7B^y0)Hv^NPe>|H91i&=~goY2+oJTf6YrWWsYCcSA- z+8a#TG$LJ@@2AJ;;>+_VebJsYVMSwRYjL9J1 zduyurP20USN}TkhCR+Gq(T!QzCz9(i_%4HQk?Te9*MTsM`GUmJFfv!fG~ zD9_C&ah{tx)PiyDqSlyREA<&U9|nICcp5PDo&%TCsb55UYNaa|aUL)vJP#oAvjbR6 z&n4W=hU!SZ^e0(*1Hgv@BLPEi47ilfBj2KJtHOkEQPky64vD(FC#Kg-eMY{Uz*~X4 z0YmRza4DU}9d45^OHHCIe{x8aW%#X$_$|1U!{iXvu+a;(>;9`_*TYL?E$aZpj$O|JwzXf>ZZ)4~*RNB+7XZfthTaL_ zQaZ-F32%>~*Fja*!mJpo?x)L<+NJtEWz7Phe6cZKw_5r~^mkLgSwBAo{&V10fT8~e z_~)f>v^z(je@sXE%>!cj|Chaw)4=Bf#{q`^VsI&kwReZ-K5MuZZfNdN;Th?(v^hXr z?#4*{ZZ!;y=(bX?=|A5Ce-?NFFm(5UOF8=UaVXW5-;*Q4wEh+(h}VB5GMTu*-A@f4=&`k$jfQ((3|V3G@aGy=rhNN0V>JiEV>WI3$RO z;$6_*WpQszuaWwUe7KNUUj}Xj482>xrF1Ueq0~wnZ&9&B-zVy4bR)nzNv}2cv867O zlQ_9;blERkxj+UmbaC1U>3&W*vxDuCgr%nRkcjS5>NWBg=pM)4>~n#eku=3|z`l z?q54<*$(j3j(8ABuh2j7t-gb?y28k@yPwH*r|ChQsuhr$xLDt%bZHty@)GCec_)*d zcspC%f@D2*-+4}|B2Uhx&UEIA-AXTlct4|@di5U_Z|AJ~F_9egURI7};AaBo0!EG( zz@^;1B0iUjuZPQF+7WlD51i0lYC-t=XyiL}Ioc8t>cNDyVz5(|B%UlABDU~qkWSYW zR41G+-FF~tPA|98?-Drki**S>Y&|!xx+140?Hy|`bdnW+QMo~v;m%^w5<0m)ARFKt zlygwww)q|HpxvlYeG=a_6XC%Lk(@QY)225Z20j&-1sFN60+;geagm&B;y7f;Ielm2 zsx52io)ri6#r_9c9n`!gu_1fZx4IA3W0RcsI&Pku$>?g*YHwC)6hu2keMPkSAYG7g z@lN#f=CF_Vv1l8k$nRw1XG`J%KmDNUf&>fo&y;h8#=K+z(bc9q1Bk^sQnWRDCP)0g z2Y;3DC(qeO;QtlggDn36xRj1|Uv2yo@Lwjkm2*xG;C!7mr5vwup8%ne=UnBKh)x6b z)WmdFfu9R}5isra1h|xr`c>#~g0pb_+D)5c9k!FcRqTXD1AT$(<<0THbjUyASX)v~ zg{~z0cUcgnKIrY%Cn{A*kuL02RM|!M&f|zUB`qV}3vp1&GNIhme zKNtK$;1a;lxf)zbNBa`F4{a$I3hPHqlDp7Aw9N7-CPI9%($gb(UZWmE=L7J60iObf z4kzg$osR2O=!kbk)A|n173dBhMO~O53oZ3AU#|63Q4!lh~#~adJWxQfxij74H&wA1eelr zos7J*x6j+!M4Y)WyL4gwaGJJ7&$pV&aj*?UN1598Ga4o()R?jN>>lSIz;m&z-IS|vU zOl9c}1|JEG0}Q)%>i^R~A2^|kf?U1#ro z@5v>B#NYPwa}9jdu@GeYNs$EBeG?X{YW)-U;s29Fo74Dd%Zac~x<_2Uo0Lx?!4{SjmDb%bJvF z0*W?h{hy%AtVex~{0#_XCZAvG`d)keOO*0ll;>L0bFrsM>z#oP@j&c89r;{v9x(Z| z7Fp8vl=CX+C&X4tXmMgWNM7B^ZUfeCH%MQ8p^m3qbE3+pz34OL;5Fp8!MnileTXcn z!+NG4i*%jXn&}-~QBBHrnv_>elQPhpi55MLnzu45$vX{sCYTEh?`g=A4$rHj2PR41 zOeJm8e2wUfqfhd65Ax5zv%v7Zge<9pcA0j}lnaR-EpM-y$qdc5J7*Bbywn*hwR@ln z-)z;)RQVdqPQJeeA`b^6f#EwESI|+H$mG3U;8fc^B2}CYD5raRqs?uEn{9V$=2TWH3WG!4%(4vj zfA@`X+#n~!tbLH{ghn&T91eIfzV8TRjB}o{Lvg#W-7|E0`Yik8;LWV&CzgAy)*9t! zD}I>#{Q~*_z&F778Ok|w{tm8KsiIxx)z0Q=-sCK|&M$SQN!Cs>SzB|G;;TWQ;aiFP z9dIQue1AfgWa7w~{bc^~W1gp(oMzqN$7g_X~0(z5dX(oTy z5yLgp&Mb0bL3?gtu(Vge+nf3m+r2;FEVNq^^Kq^7m7n8tll5{I^7&vbFn->LENR9f zRc^NEPrsjoD+2{8KSYO*fW%sAI{5R?R@}pNuWH^cTl)^L{YeS zOp%ix=2DaLKrDT|_;`wYj2pLmxNP1?o9i6yE)B@{N@u9|nc?kCt2|Tr*@hpce1`K~ zD+}ZT<7aPVNr!8126M|^;=NI`faYe0vtIhVZiYL^>6J#km`TT*58jWOw-&vI_X6Y% zV3X#O_j>C5g_o~te6Pm?J&8`#(>klCXr+Iw^)~zTzJvS$_!t;}K1Y^h{28y~R(twq z5g0n9vsu>S{M~+yVs{JI3t3N4$^PgK1y7K1@CeCmmDcJ9!xk=7nPzgA!`mEY)c(e1Y&ECub-p~K?yC~M&9?t}_p&!|Cf+$a z;Yh4jm;b_~A0^16z&K$1xCB|!c0GQdc6Q=@VCG>=$Z>`WS3B>^27|5Ys_$(ok0++~RDs{>D8M-t7y=>D~hI z7&T8-5p!gkXEyQ@umTvKE0HC+=cxSpNS6c3pUhk7D>R5cdyDhAZMX5Ty^qsBC&zAc z-g2#hywo_&F`K8(W@smpu_m}pF1BIM@N{Pdml^H1L#5nmoh`q!toSnRKfH0ii~k=X zw}F2GV^?~yvg;VVuk6cYz2ItjDVS0u>pqnRY#Mu zJLx9S9{)(fA@%i|8ZpDFKTp|F3y-PyYmqMjmjh$R4akxXrkrCSf0jy2)y2z~F7_@N ziOpf`A7L~69nJ+TdG{oQY0ymz68upbn)xobf_aLTYyZ(Zo?nRne?tBj_&;EHqdgSw ze0?4$KUpv3`I`)AvVZD4BKOPOMd)P71-9EfZ1*YL}1)Acls7PBbc6-5ex?d1x&N`kqkLGV^G?ek%}O1 z;1au1N=e-+l|S{^VV=_ukbeyB0LIP-kR=UEImh7Hsq#nWK{1oCPUkc4dxx{tmb(=q z)7dW3L#Dt^bjKu`JIh+Fc)vui;f?lWz6X>6!+Sikq!xXy#q3M;@g_ojH`~%k(_(X& zS2E^4$NH2#sJR>;&5j1`ap_#u8O?Lb3%G%vt2iA_#1a-w_M4pNE@SI7f>pUj+0_7V zobOU@Z%4itJP3?k2aqLoFy1+rk(^ATk{51lCADRY)yNqqYY5YzZm+^X0f*A)`b604 zSsLYtgiIz%gbTMo^lAQBuOxpDnk3`MT9bHW+t(E**87t0K?wLOh)P?~eVrbnBV8IGkzgQbDO zU>~yRH0BN>vt*NTuTV+)Y-gwR=86NAXeCvxQ~B4T?UVfb9rDNEQ()}>xBmZTUy=Fb zxyo*rijh*1s*b0k6-^FXyI82~Um6|7-k}2NCtH?|7iKkUzN*sXd_^_#e6Ro*zVnbJ zrJkdM&s=Q~A6RC`Gs=W*wskJGIx1Hxus==shDwMq{yw%|`PYO#Q?CyozXjd}hHqqV z#kc>^`a-QkqL;J!V!S_b=ZAkbz%F~ccxp zws_S$bc>IYRf}QXtkX|aLp>}sL9Jv|UZm`ZlqK!RMeYa6fw5x(awm2qLdbVy$QfNU zBzCc~qX8cCe1D95FL)3bJDxz6)WQ6)xv{N2c~#s4^bRbJNJX90tKwQTpA}E?MUhKD z88Cd)kUQZ^ToKo3|ACz60T7imooR=kIMQp8xNpQ<%nERiZ6G~Nn0$7VW_g#yaXhO` zio$Pfr$$v@-lE!n_>BL%kRJ#8fU&24pHA(OvORn45?`c0dZJebyq@SiUKjKs0uNZ5 z?LKaQ_B4BoE^MdcSef0A#TM5N$ThnGi3rJoh#cAJ9^}f8Fn2%~I7E$1CzMh+6w4YM z95OXM?54A>5Dv##hLMA3!BC(q$T^cZf6Gvg&Mp46InJ;3LQ>6T%0IeLiTTG%kuL|E zwNEk*+H#EQC;Hl@gkRO`xrvMtpTj*#IZO@a@bBxi-ez=|e0vM|Ab8KGx5M!jErQn? z46e{)tRgfQaeH5p)u8nj_f6Vcfjkl%1tf{R9nO~~^%|24P+Y+6@A9hgQj^xd$*2E% z-y)dxJ2G}+1A5gR5tx`t+&Oe_fN>5fX}+FSIQB3GtrxAjmf0GX}#tBlJCbV zJGE|pYW6Qk1q^M~9ThV2n<88=yg1deCkMJDT9AGKB zORe#x=#E{k%H1dEi1S_Ei_!kB)dvg&re0McOB$p5fqRnuVc$IJxvSPLUU|xz4J%g3 zjOwCuy-`A0z589~n}A*K{?_(BMtsASw@tDScgP4XV+}fIx@jC3n?&qV_N-P$DhE(E z8f|x+b0*``GJ7p`rKVojf9!~3huGPOd>?oa7(4eMOG>?8gnT}4)!K6_Dwb_rv)Fry zbE#Uydem9V3p^tno7R)J=tyUr_cG=0n>C*`Ki=*0<>vlh-Cy9L z7uEG_b4a{_9>thSsssC z^B0bjy|dnbGbRr{W7uS8qBF6yuy;YJ(~I6lfbF!y3x)-U_8(F(I9OURBUsIE~-lFpHAa`6FCTxM$z5p1jo zu%`R&v240p@z$W%tgkFXz5rYZ4DTh#l2XrmdG*A!bc0!wQ%zk_-Ej%p-Q0-)teef9 z2%@L<8pV46y~f}7kpBoi0fzT8WJ#(1ZbG1yf7g+H#uj-`95?z0l<+7!|k~wz0`|_F8_$B}f*rd&J%G=Aoje{#xa4Y;cly5b`K64jA5v$dV4{ub;K3b^{Oh zJD#)K9LojPowC((y6X5eeoygkMX&MqF68^c!@%%9iY)2y{w5|gr4UzLE1OHdk_(Dm zz~<8VNr!8`uXs7Uncyu#?hgh7!#f;V(&7AV$69-{Y%YC7HkW>7e}cz=+pqEXV)3~7 zI>oyQy~f`gk#7RG0Ksw#0nZ!KwSMBzg%iqVZSA3tK&+z>R*&WKb4H&+3 zWJ!nf)6XV*%)d(6V=jMRulW|B&+u(Pz7$*m4BuvCNnP^KTM&{W?Cm!H%06VbIf`yj zejY%t;r$T#PvFm*OZq2=Ymc;lhHU~4>Rsow*IIw&u%!MO$Ti>;VEj5AS<>PCG94l* zrZu-p%*d}eX>YlJV!A9@Oqrihe(grD@#`7nSHNq)@csr_(&3(;pS5<26w_s1DZP$T z3YhJ8N83GAy^J*|-uQ6#c%WDM2S+2H2<8IAdlj;z4GUGjeV6`Rw{+R6rHeOItX{No z>FlK&makoM>Y`N}<>kWuwm${Doo&BnXIs>I!ufrW&in``KO+|D$&p-sR)mMAamGI@ z)GK4MJvVELdwkAFBF(bvD?QJS_Ux5&vJ9VAut}`MX|_XW5+kfSG{Gs$=C>-fZBzEQ zVxP&k|3MyC!F&!d_TPalsaUV?PFt`1F!s;8NP_IksH1P2`)=TKmqS2*x4n-?)W@6Z z<8k%zLc4Egc>l1s_w&-vi88*|xhLD|HOiUd^k51h&5g!RJ2iX?A$bT-5Mq#(Ijqp# zV&@j;6y`>ArVbzAe4kz!Ke7nwn8%z@elVxpxxsej2Xkv2STB|T?R_8297K9q+NCm| zHq)(fs+jEMrY=C?NP2mO3l#C5d{{cU>%d>|j@~!a}m2a^T z$$rcL_!NRoP#I_@#~B@=KJ8y1~6%Zto(p0&?8&w7+&Tv0b;Pw((!yUUgp3^JHlCDdc*Gc8Yx}wSj9Em?+L^|ZpbN^WQ80KhMKzDP# z*E`G{i}#bzGyE^vogLY4gaGwP5oqvmo*`#_9M(41zEiA>6{$kRuL)L zS2(MkC3*^}>UNcH&Dc?e9a2AENB$7}f56x|ZKSgE1wC){f}Xcb*tzr~J@zHq#-{-< z+Qu$E#Kyg0>!t|xGE@*vi^!xvx)&26Xpbl6D&aGniACvz!5mBWW;+vmq{p2|X|P~& zn4^^u*{f-X^U~w&-%>JRIwEPoq8ZE~3=dxIEvOTKij$uFJe`x5kJv=r85b(kJ8bV# z{xxF1DHo3;KM!64#=qYnOG=#&GXBk6v1W!Cr}F;#P~K+EyA{30 z-<`47b;=UcFYL zvpsH;yZmU4=7#cy5X5n;QxWYKO^@~oMWe?=PYZEhP;?>zbbE%*brweZM`?Cjv>jXF zH2&X({1fmfF#b0qOES;Uxi1(9By}l2^o&#%q*>O7=~>=i((l#!>wNmZi+nS<4H!Qk zMV3@KL-`lc>#~QG>nSVLrNGVhBya7hg|U=0T1}4iF`i~goS#r(U>>L3hljlwJZHE| z*fv`xHJx$RJ^J~>XP$p-tZU_gA|R^U}Ra{{nOw{Tq=t zf$wxj|MV40S1oBzQlF7+#kBstKK-vDzX9Ivj(%w%F+UgcbFD2IvZqs0rPg0OE@}Tr z;x=pb+(7!ckEW@pzVDe{XPclb6!ugZpj$ID{Q_UcGD!_K%|h} z1w-6?dXwpalFG=4T$}4#LZgbDl7difa3n9`bZ1g9KNKQ>$C*K=By(nX8oM__vFh-N z)ic9$(%hqhg`rG>{D!Aba0!Glo#=u?S;fj>PfFSZSpuHmEMfD?B6ovxg>0pnLs1;( z%(N%i^FkX5ArpU4m6rzmHRa_YXX9#>734%-%{Z30dVySq z8v7(N)E5Ml%jKn>=SsA1?3?Qjlg6M)+fjV9Yt_Od&t)WXHCPCY9m6LmJBoFjmao@! z(jFy@=-V26#C|_$w+0(By^lXS??b%Lxj&n&6d4-ZY=lMD_cG@bgp2EDLPOm=r-b;3 zB~Gn7&^^~V)!{|y#tQ<4v8>|Ee1}WRvI3dJLm}oU7x&~xa*DHvo$8EZw7^YQ^4-aF zv)So46byC>S!|tC8t5J4!R9;t_*Oy@2n0n#0dX*hH^{mkf6Ye00(X-X6ZUL|gM-}| zn*)0V3SBPW_#hbmP?kO34~AP={|Ns!7=D-Ug|TAKf}qXj$hU&ww}Zj#lchg%iF+0+ zAvC|QIHA?t?&NNF+_UUC?kU+5atAs;w%MMS>ztTVV-Lum?v$1B7xjBod1xe`>-2MY z7Wwz!Ltvgm?}_R;EYbUGb}T#WbC`0m?t=7f2sQ?84B8FB2W{_TzW0*@$w4V0Eg|dI znF|@DNX;mxgBRlgoE6OBCZoK(NZ(Q6k;Jl@*fY{=w9Nt#+fu_hk*rbS89cC2QkuTw zT<8$Kd4oe3Y`)T;dQ$mQhrQ-K_dVoWz@5PO^HXF=<~^6%uTGTjnq=R)_Q&#~>*+y^ z{|DEuX41C~(T@(T4D<>Ut;@2;5hHthVjpMAUS$vGcM|p#A@>D?fU)N|WWPO~_Oo=p z7FAus+WBB6p7wEM%-WtMucABxG*P}nfp9Qmd|EiovuCt>ZNeIs1D?|LA3jt6A3%N_ z>;uN07m+2I`rm0kVCwQkYt$TaUR?!ak7{q&@gv)MG)roJUeJ3du5!JFNc8Pf{IO$` z{KJvQgJXf=uSV_?fA#uP7p+@C+~dVGKt*+95+<;#|9NsHH_}6yaG_^HtLAS&zbPO0 zAwLgZ0){_*Qv2u8ssG2XS}He;6ydmCHv(+ZpK{4?$jglXI@TLlQb-u5{t{nA23>5a z3WxGD8EO|+=Y`xf+K2o+-VFSkw488meh;_AVKAGI>xgJ~%j2}NjmgMU7rvCc#koTJR{+G8|Ti`wW^MKtJnDsfud7twJcc)~X zO%}Z8&tG44C}q(P{9R@qYrpRwl#95D8r zfGnxM-uHZ@{1JPmGbWHHR_}hI76ecJ#(QEPIo3nj^28P-ZQ_aTF*XTL<@3s}9q`8a zE_VF{c`tYl7`xsuS(0hDJFS;9mtO1{G#P_xJcE8} zTd#V?^!N7tcxG(n7^)O#t4;IoM!#tnpFw^Z{2CbkcabF>v0YRXQz>oYd)XbeiK4IJ z1?~ToB>z<8Iba?z{0osK9g&}YnW@q#Mts(h5tYAC{JYU_{BK77C1?SL|2^cc@_R)h zh5YM|$Whp$`OBv!`Hw@M1?B_8zYJMYxsG4nX?eu|xf{KGOLb>c1Wxygz<0bNc^%gz z#0`s(fgICk~I)ix-jK0KWsqj=v*II%2&rM%*nse9!l+ zXpx$+z`6}H3L{*cNY(gZB)pvtj%N#tIMWhUqxB_aPt~+!y;y*}7Hj~ePz*h^O zFxfR}+fhCdUgxu-o=NdOyNukbTZpra5v>cXEihSK!nJ*d=HeW)z1< z5@B>A@%cxymCC!><8Ir1&vvdz%_%FM+Z9Eo4ctlsJgSZl;Ac zF5WPI(Rmdd*QNnxxA43xWHxY(^{*Vx0;)68)$tM*rlH-18LpYR0alfbFK@HQb! z+N9$*oAX?U^3L*In*0sN7l^oimF;~Dlki83%U$cb+&&RT+;WXJyXVp}op`Ay7qTsF zSfpe?xS|K4GXt)4q#Xhvl)2H_8RzuR9ymKXCpg=w8N_u5!CkvYQ4%?udg@DpCXd1rGpeSiVc=fd8A_?HdP~{6347|XN9?^5xd}WDOulE%RQA4L z<`?Qx`!^lf>+5{=Z4TX4@T^>h_^2b7A?|aoEVjPRTbWd1+Kfq`CW7crwiU5&(I1HuD`I{7C! zb>6>O5h-`&?^e+EMb0GxaHP*5H{9E~UhdzN->09SwjxmO3=GWV!sqEFY%UHD92Ut5 z6^{;&88kXP_NYh>7h>7Y!>p`SI~N@%TGLhp&mVJCWOU^G;^UktlaGpwEnX2hKhvIN zhq)iBDi|9V9zP-!JT_c8*bSz~xJGKkAZ1OkygE{OtsVKEoyYOVoQqNXo#js234s~K zmuZ87W2X`jG-%HWXJ2hcuCYfI5h*s*vq!{^m3vD1Wey)ukoYz`*dsg;^Lw$lI3X~D zMH>l?&IZ!k?Bdtu3BT^OTF(=!({Z;r9MxXPg}QEU=hVQ4v;nbE*(ZgL2~3OCI^3DL z)9yL4a8$w7wtIG9apAn4x*XShpvpx9&)t;c$B7^BPa*UP(DE@<=m zHif-sij=vJMukq*2M2P`nYYq~)rV0_PMqQ3ts_lW)ao zTwX9BGH?_ZHU+uzW@I`!#QzA!&Mb-)kIoGDiVPswwhRex2}GW;1M|r#-I6zcr2Jcs z{c&CHHz8jNuFyWodoDG8f@w$PWjt3_ar$8@F^daX8{~XNkU#NKi`L)b)Bis5r{Hs7 z^6&qUCGF7b2dVQJH5=B=Un}niwno`iy(UY}uv=&+E6G`G^PMYCyUIN-(T>*sN%=Kn zcJlpQi@XI~3k>f!$db;|&+VXIZ#VuW=5^|{0c8z=ouL~8c0=G3+xw{Ye*RK@8GNJn zR{dwxdZ3UHKT+o9mhrrG>3CtZt$qIIRBmAP?BF@itKBF%aV)(Y-=9ZnYEU}NUCj|!+owO)xX5N)t*OK3tBQC9nYW%>zFZFx<;+4G}sq=uV%Rm%&Q!Z^=OeyWt9da86kr4%nB5E z3%Op;c(OBr`#chBE0|-|eWv|}-`IBr^7lalF!t?6mQ;15al>)zy~D+9x%J9tkvDqS zVtXC;s~qb^&pJY{6Ah;im*Wk$dj&k(<`d=iq~fzUBxw=cL3$U*mVqY zm+YFlcFl!L*KJslG)&GpFZJwV)$MKUipssV*frAFRKrS?H>zR(=HHY(_3)Yg@9oHq zV3)Sx@cm!C&O3GOYOZ0`Tax=wT>4m_6!ozhwEj=fW#-ksMjm<+{YhZ_-GwY^*14)Z z-KyhMn{v3qUp&eh12+Wk4A_l<-rmnYy57eC->-^1nV<6NZA$0-<;hHZWX5}xxdS;N zVE16!EsX=kIqoAiSI={$Jzc&&v}kO83ex?H7Kg*JVrEX$BK=NqPn18&q`y(({8|1v z8)vxvJ?j0zS>_K2{LG)^ahLJrV%3@c$aY_K2(@yO(=Ysh9sQGoG|-tVn?9<(Q2B11 zoXnSA$U{LTF!?eKSyJl0Dw8h+AY+@;s*97wliFHTa~f+c13%AN+{hfnJBgUHW=mw>V7kI0ffnya4E_LJMc|CTSh zaB1}ts__cKM9WJ<%xSd8cq6w4bxcJDaPnAQ3|QCnDCc6zZ1R0V=u{`y9?1QJC&;Y1 zQ!BJYd;=SuH4cdJ+%GrccQ1ig><)bA#EU+zEj?+1AQ<9hW! zMtEP8;vcGC-J0?zl2xA`7 z#%(nG#|4H|fb<&(3lhqu5*24%da-lKt@gs=^kQx?<*EL!O46D{-bHsYM=LlyAm&H00LL)Or z<&G@nYLie#o-@)tE0{^(j^L==vI4I4&dkW`6^!O`aagf)QfOvc+MrBUtb#*gG$^^m zKPzWWr+Q?GlUbQNGB_k$kQ)xB1qnSB9$QXN#~R^$Y&(Co-Tz3ezgq9U_S&%Wul&?x zyqNLGi@|bW{L5UR{A!r*Id;Pb*E$$t8ueo-M`-6b@@eAAg*y#P7=Kb6m ze9fCvuP?KIWv4#(C&45^xRNr z%u;80gu}a;gyeH`(6%zXO0=CF%;&f0qSu*8$BMIJPGoJk4o%)~JUy$!YtX}Cmkcf| z%W#5ML^s=xlM#tIM|l@0m2wI9Fx68d@?yAffD%)*o`VC!TF;dYIUO1?UnX4S*sGS!}zb_|!H^|AXq z)v*)%(N+)Pg0dmiLwi?*M|#!FYAsadu!(YJ-s8_9zX9F{rX0R>x+;ec>3(+Xy!Pc# zjt5c6cq_0x@qG3-a%}1M0kuBy4wq!vr+{qhv-k+!l)aq^0dAsWn?xpY*z#$Bsx$hB zCpu?2m%6#x1+lbnBpl1&Htt9btq$>9WKc;pi-tDa+0-i*&t~#Zg0W!wQ7->9669jP z2Rt{I? zv7SFYP~}E?jFUT%IZhkBdtTpTcbX#Nr&!$}qRImf_QoF)EmI40y1+ospa;I}7;|uoal+vinT+T;9|Ds)mh+K9^aGE?(f>_~p3C^9i}OprHPft$rc zIVlk68HmTCk+gjB)g{z~{L4Z+GAfepR=8`Ccjv3+?z z|0fiSa;LPLA1DvSGuCif%uV*7j0tz!;d_}gI6KhyZacWm&dQCY2ZOzHBRK^(+TrW$ z2`-Jv4@Jsi#_N1HSd_JqS6C!FGaPoK7pGqy931{ndHBEO!J_b=%EKR*2g8fGxB4hM zZDe44a2&@?rv*oISl+44VMmWsn|?Zlu~IGiZE&i&+voI1O?bbP^`zrm5V($)r*pae zsO>UaG1tAq&I=AD3c-7J_Ug!D=h*x@XGPg+=j3?V03LA7aNYi&m8^HiBF_QyfO)?A zktH?GR?l@>%KRFkYNc;ucCEG84+mbei7Rz5BDejq2`0mOcVr*tk22%Y(kz!9^{@*oZ4*Xr0h^EyKk@$S5R!B7t%YIppAL`vWA6*azR-| z+E8a$78eQ)3DBQl_#U3<9Yue|jtmT(;xI@Z7?{oNM0}j=e5$_Xc)yz&xX%vdP}=H8 zYyZzq_V*?u&jIs*@qaP0Br~s&y8h?w{;#N8>&@0npR{f&!=yYQ8x!`+M(u|P@53f4 zVk6|MOY?qg76H*)Ge)<6@Raji`o}*<{tY+?j2+xNC1zMnv($5_OzRG@ILJIBVBc1#@ z;Bc0J0lBlvrE+1r>#xBX%&ftsh<1+GN= zsvEEUM}GwUQeOUpoLNh}FJSolBTH)4^>z20ly*7EPaI=!hoO|5HhY*iy?;A>WwGTi zj@5`QIUz1(4RGg?y1-!?2UN=Je(sb&K`28Nl-8q_U7O%FcHNA8A9x5DyIw?=G=HA5 z=S}_DLB6ybdJ;-*+KrCg;Oq(9$W;A)XD53H0))zA+9nc;1r~d=HaFX0W#JOf!cA^j zpkHW8uppA5di9jgW0aloMal8#805)d8ZdU&AWPb!;}>;Y?~hxuM7kVBoJlqno>PzS zkz<*mNot;EoU_o;dyzz6i{@`cf1K~~{PrOK3_J@A|I5gdI-56D?aq|7Yvsn}Ej8q=0{EeNP^ml;B;3#1DrXou^yuVYpD9?+DUUzZA;g4+V zYaA|eDkFn~)zbGEO{gB@b9|EGZxBxOi@*0EH-X22;r}`Ek@?qcT+?ELu66DVFjsUB<2fmj2h*&B zkr8eWhR<|WB0cz-RP%jv`0dO+wzrfze?dGsKi z@bbaoA;SaVK+itmzLj!x=@Mp*s^vYl(jMoY%%;w3Z0@~!l9YfZcJvOS$u4{d10WAWG}zM)@z~7Q5@xCI|XTgSOT^lhgO!L@VT^ zx*5uz1@M{o^jhRgK|L_`Y(th*qxUVPt{ZE6nABY5?Kdl`naOn8?Q&Fdzw>>^`VxDx z#2Tl+yDmITY*~XXKld z&5|j@!RI23_1;6=*me^q4#=HeYz!noXOLj(T-hDSrTd(n&JDP^>y9dRGBO6!@y>92 zb2GOSBs7==z>7_<@;rZn{0#UxFn0eHS<+{^pVO4m-&A%d z)}x#3?HsToj@$q7AqDlP0jm|Gdq#SO*qa)4nTU-PGoWV#S5h>_VaH=O8=ePMhu6uR z5gp|r1gp^RFyXD5t?aBiFInzRL0$xw0b}PTWJ!lFchkA4(c2SLQ^ixhK|SUFVHwO&?QucMI{4%>6xsCfO zuHmMC{520c*eSuaP1ei`-JT<7vkl$Ug1AU`L`SU zCoB7AtVr6o1bHpk0E~V0$Vaws>Y_E6sJ0(TLsT_{ zMaT>2ZjORjdxoPzyLx(K^OPMe@R)Yz&&X}y3t;T{8d*|)C+nZ4 z93+j%tDCb{It?qVhuJxOyd0aGoY*E~)ob1v=O^2lTI9>XW?*=CB1_t$&ozCa% z=0Z6g-Ol%B`)-ajCE}ot_2ha-PC0qKx+i37xgCvUWn@HpMM|S1!UJRD%8m;K)2q|H z9J66U2e>dkV6o!~3l^ zkrvgh=Oy3;I+j;L5s>SU_dB}+)P%C{RoE{FzLBf22YEk_ z_I_r5;}xUd6KpEh-zmwzlIe8zJS?Pdl0z3&!Y(uJbtbswMHBKOvETqqJlgq%?F_Kb zWZe6(KGk7a@iUd(Ggc?d|3c(Cun`!$e}gP(nqCk3NPiw;H~WLV!&@!R7T4Qy^o}EY zj`llOhpmqZkXYjKrlS7!;^j{`Y~oACovJj4z-pYQ&&bWHakKiQ^(Iu=fV_dz!^1Lz z*}>k-1Ev?^&VsZ+cA$5<8w`)^!K7qXW~S34t323`)kWEzIE}!6v)sX)lW()5v2btZ zY=_7sN$+sqU=RJuX*x&wJAO^Fe4d0{3zh=o??z-vhc8F|&5A|bydgU-OoR84ZM~Z# z4PKUaNXx6zHSXoQ(Q90&>}ZB34v*B6gUIiLKLTUNUy&spethKLlw3L98zarLcI1{a z7gHSc#z>{o?n$cE{;y58v!@_00V{yvy#iU%;rn-U86zxPwf3Uq`+qU*M=@CEH6aa5 z$mGfkDdbFN_L5T=bW7G{^Q?#=Lw_XM4~Q*NcD2B3+W)^G{|o#dFm`3ub;mCAzFeKK z=t^RndKN`l-WcZOD{HudR$CK4SJ|-u9%IJ_iQ5S|3jphNK z;r_*TrY9a?^Acrm1NNBy`rXKnfxW=kdk|UDem!oe8{2-qMzw$QygjZ2?tNPIddI3x z?~feoU-{%2ef7N1nY4BJZZyD@bGS6Z5w}QCj_M5|SpH;ZxG}7Csj{nlT{0ghBTok> z0%O+#WJ!mwXV{gPikRkAvxU|U;+U~4PAcVSi1`(LztBa4W`qV$Izr&`U*qXy~war?^2=K zpQr4pT%WXO2J(DxIxzOEMLx1U+*5OMVv3@@JCkjRb3cP61I8vWU;)F7a`yZ?T?ebPUX-784~G&QolmkQv;u| zXBqN3a1k)}+>I>hi1wJKXBO7HuB>^MBUS`6$ zYOy}%Z9*L4oQ{R3c@{RGuk34s-`E%0$Q_uV5E%Q)ktH2|9-sU&T_Cy9K~3RvXY>=E zc}3JN#=pU8nM@qwoM+~^L~s2{WydCXOh4y`$oGSXfwAK~WJ!B;JfSgqU8Q}00XuwM z9Y$?`Q>!Xxcw@IrHCX$SQ2=(8(5uODFDHaaBpxiviR3t!%V<4vsuRtQWH|*Va9klW zFgOC6$2#o6e@gcC9UbWF_VW79Yn0uU7bf%X1mt;O0Wfxd4_VR?pKqc`mk0c@dcbcw z)&sJSO+Db^XaNtD0K+V~JDD-3=ejJudyhHOJm!904zEc(W~+9svhyHznD@{BAb%}3 zUX-*m4_VRz9p5{39U{?gBz9!vd0}-5$R8$P*w9p@nyt8MH6)J)5>+THomo_+E6!24*i@ANu{*GH@` zi$-MRM=1P}497i&UAe_vDL7zgbYw)@)}S*WE7vY0OnX*V23O06nM(}!D`3m#@Zqzl z-Rbf-1A;kGcU)+eGoCrPaIl~(93MW&>ux-0huG)2#+eno-nKW}(XncbF5P&YHmH2B z*_6!pWys$FR|4bjc4SG1AAcq?ovm9l?zHVj`!=<8i+kwhWqYq` z)4hgzle^1X2tj}4MrBVce5M?Hft+(O^&J>{W*|%IulJMf()TyEuV-c>S(E);^+J70 zeXR55lrB(j*O%C}SRywhWMrkuLLO~EVUKW0QLs9L)3l*tr-*smB0C%?V1{>izkcBh zq-DBDCTs)869Q;<;0$69>m04WNZH?reR1rQ^0NoI1-u1}{r`t7>G1U}QQ1zWvUw99 zGU;I^KMK6bkH0zAhs6H&CO_P0P}z)PLGD`5SNZBWx$ z#M$OZEjy1ZAVxYD%3Ipx8uQkdD0>dVXXe8`M*cVW8W?+yyHwfpg5HOfug|xd=RS39 zot)DoSljPau(rGT5HlVKTVHT#XFg$}LZLJU^D%xBrQJEUENx&Ynpc`ODm$Cc&~`h$ zGNY_VWl`Fw*m2?9iJYDuk)FoEoy@dN^57RaD?%^Z?u_t^&|JGBaE_A~=*!MDZ(}6m zhRgNy$4=wNW5_Rnmx1x)e~~3E(eH^@Q_cg-CjQ(!-FmQ!+U&e9tEg}BA28yyi z&friE|D{C;lG|$zdv)Y)k6yt7EFK;#U@rwflbfB7c2+WKcP6q>Jd#xh`Og=3E_S7| zd%<^-^=<|7Mc_NY*u4!|(hfa;dt1u7qu9->O(wzW?YnL1Xs^CPOn#Jw-*_KqU?`Ur z61m`vB@@@1fFH}goJo`kZz;BBv$CTV9#jAS2l+q1xh!c%KC+}2^u3K{9oUou?>*pc zTq~-%T4oG4c$I~_fm*R5D>lqMJy7Bn=2S?DeA#BZ6Q88Is}z4N`VIdYB0$#I0D23o)y<;>W4?`QRm-t%jAtZVvUMo6NO1=CpL-O@}iLnagH zZU&K7Btx3ED0|xAGxq!kIsJ0hgMhJTAoAht;c^)DOn%^dCXJ4@(=&q}e5BN!#cH^I zCUZD}Gs`>^(c5yhvSSlGHGG$LtpWKy@DMO|e1I%zn0_Db(dRYWJ(r3_-llkOLp(M0 zGp-1xgukjP>`AJ=?g?85`cPk^Gh;*LGK26m>gpgCo9NC4M!A{Ug&Dz&Yn(m|(YUD~ z#$OHZ5ZGuTU7?tF(WfcM#%Iy|J+aINyA>Wbw1{WRp|U^Os)Y(|#U zU$=X1O1r1}8F~{vIm>iaz2i+$JvFih5Nlkj+fw|wr{coaG!DGGOOplK9 z{?(Y^$ikASlUo=p7*d!`Y_d=wl$)ImPZ_@*5*$2aNcJG_w*#~L@!QkL-m7hAl)E^v z#byKW??bv;Ta`ah`8)o~WV>9Ad@Ey3i|oi`-B^~VHk;E`^dGk=yISBi?~6Yoe-6F? z#;%ObN46_56s+1TmgRbuJ;6{=TNc5xEVf<~u+w#<3n;cMQv<;kZN~z5s_IY&;sb@)xZC%%2<&juY>RD2dw4`2grSXR2=}ql=&ZdPX6BLOY}pf{QlXtc45Q7jbN$Ka(Bc3HovF z1qphq;YZqk^c((vApZw2vz*}1MLrULVydDYfAit_Z_@swzX}5JzYh6ga5*skUxO@Z zRwv`I#TRbS)ui6OM$NPlAN^gpFOw=ciMz-u<<(ntv*K$(Ulsa7JML zZ+9p^_oBB7#p36$k>3L!0K@w!a#whh&fem^(2KoJ7F)}{g#CWaKFyh-hqYGyj}`y; zYm)r4kxvC@0>i%q`3U^DoM>t4>D+kJs02gVJfM$rjb=XD_+532;%!226^h007m?ot zzXgW(L*ygyipxIY?VjH~J-=V4X@UJ-%|6MQY5b1gs`x9vo8+H@JQLIa!@mIe2>d?o zt;*>KSlfm63RR*<8J|T@i{{;p-YUL}-}{kY1iu7^_f2F;hbh;-=Cr}SnGE;d!?x83 z^$iJ+M=OsTZd3loweF^ypyz-noA>MNcapfI~H+F53w;XvC7zYe*74i{yz2@3a{EYUv z)wZ62_;Ky=QsuFy&Whcs_#4n)#jnKg-N=uECxPK_MwWD#=d7rGFOBE)OXH8WbpZao z3I4IBbfd6Q`~STpe>w6fFb)|0D&!;Zd#{U5{C}e}|64VG1Ny5V@cc)96g&wGe>3tC z_!YJ9rRDSgz0Uk^xl8;1{Um=s|1$ySE28{UfK!Okg03Vg5)~ zgUZq~Wd8RUr-E_)T#i2K8L8S`%C5@ml6F-gp9D??#;z5}lD6vk>a8j3Q}RAnb~W%m z_r|hU>+10^A`#MoI3C5}3@lM~s(IIbI&}w}^<@=ZLn)#7FKj3Z$Pzj7(V~{0v zeoke5YTP3g11s60)DESF^k}l_(_e-r;o=a#OYa*a0FudcCC7JqU zKFxEH%TncW)b_?nj#t~YqrLasjf80%bjHgiC%#e=ez~OZm6Dv7OA1~oab7Oz^-2kq zdpxa;RPyGBwEys!=Wr|Xz2HG$?05uOQs>V>N04iGSJ^xkW#z82XB-w~rvSoSE%zGL z`k(0Mk6yzY`ysxAI552Zkq^%+d+a(Vo#7`%QPsnWce&DAFZq5Y@>X!2=5qLVwb!e4 zkvjcp@>`uN@Ma6AvIU>4&#XLVgl#oDCt9P1v)!6KT>NL6Ppd)mwW8bjX>aGu4afk- z&urw5{FL>Wii+in)-SIxCQ#D6NdI~a^-nGc9!eh0h<4DScXUE*!G^{%cR`@KH)#-A#G%Wq2ZPDP#r<^jXI0J*EYiCy{aX&>;> zT6K>q-bVDAa`Y7P3*cp7cz=y7sq^;1t26B?>e573GX{On<_B4=ng^@uF~wVabCP#7 z@A&ri^2>QCs$oQDCKK$5geo!#qHKEx0Vt}qQDe^J6Kri9DON<0Pp zsMS0*=rn$_ZS$rj}W_25ZWp2pvr%%_u)PXVU`NnOn+{pwL}T%#B&wf-GG z{dE_rFS%6E~P_vg$NXEjnvaD*c}C zAYTEl^7H8Pv#I?|e|<S^!bY1eA~Gtg!9FGpSp)^<~WyQ>olc?yNr zEx=3lnx_e!rhR<{`B&g|A5T}FgFe-$^655}Pfc2X?9OCd+@Z)7U=)xf`P9D)<<<0a zj>d(ftvdkw0=51+bZzCk)Q4@zKLS7Y>HkEpiyp4Ldis-5Y86eRM`Kk!rOMMmAJ6|H ze=Qu1Nk6*5ql?vXcypY!6G*DpJXPqd=ezi`6nQyV1tdv+t?Fuisp>bKcPxLXxOVZ` zqIq_sGmbvtX-57zc*)0;djGoV9{Af4FaEoF>i4Rrj>3H^zan=f%T*ub{-7L45h~n zNFGWw=T@EOsoa_LVU2%++a+G#AZ6JsNV}Do5ky5Un^P~DXw`%=0=ra22kk^BYeEJ*pezU{X?{*PRi)oPwE(P`cvMfcF>0eyjuLsHKN zAWQ1Pc*h%HdI4+r)4ZB9ys^hd%iYK>WL8+zmFlgUw+_9A_j=?V;C5hm??RSToH9N* zWW3X!wRQ$Wyy4ym?}rR7fwkU|3)SoQt8&tcUX!nZdtEC8qCk@P+j+jSimDDI%b2c% z!Osg`y=~MyGtg=LTYiX59d798^{CN%e4e+*)r_27d8w4Fl zG<0p6r}(}k&p6}>U=rwdzO@?+y^`RGJ*}Qky^p66`EGFEx8Z3&UU}6JRcfA3d_0-E z@eSmIZu`^0;ON(o)o7j?(T!4RU)Lh90~dZ9o_2$y7UPapr+N1Jcz%og9%%hGJSl^u zH#Jj(=84~*EZ0+zj|bJj2m!^9SppuGA{OvD%T6pX?QL}t_NGb4NnJyf2#T4d^uE zgC~*qfoFU?o%h>2;z=DOd}QdXR?TNUl;j(TJQxfI#;@-3wHqvaOb1@4%4b!%s6%%> zzmxXi7UbK(T|U0f#|s_%Cw%P&4WB5^dd=60?zrarkMR72IB-Ccy#G4y@1^kh1`nT7 zI-0cpDs-9hcMkF*u+*o&%jM5Mc=#+){H#{Zvm2eJKD~(iGWeB`r_1%$KZy8SqFH5O zPCcL4!%3de$Ya3-VDhWWJckS>+B~wj=Go-q*@1j3xbs``_y!YyHy%}Ko>m`^{Rqz< zM8LQ4$3Lj}LKD?$o*C$jqg2ZEGUOFtwU4LE<;*|0_*b$VG-#eCAJ1FJ2f=$jp3eK@ zspZ)p*j{y(zoK1j(mcgYNq;6IPXW_`$+s@^bU4WP+H}jU7R|TS$Jd1X7gz?(yqJgL<@m5(OUyMsRVr^>@(8-lm>-tLEA3<9QSL9q_wu^R(+^Z}%9USLL>NPtuRE$VY=? zLHF`0rE|SQ`5-#tny22!a~JY1u)Etlhpt52rm3nl&nM`tg;$gge3NJRnF?sW$MeF$UDKk zKK-4y!~XnA9gN(YC}@?M=Mx`K^husQ$N|QWuJLp*7}-r@PpZ*8HRv?YWfk&Tu-?bh zwft%~7;pQs`b~Q%RKMzBi{hF`Sf?~IruxVP3l>{pvqH=Pk$ToKfu4ct^bhD>!YSX z#Wm0Pr;>i0g1i8n1x!A5&5!mo;d>yd()xG!^gn_86nOgE==XP8pDLI z06Ts9JAYp!^v^SQ2dNdQSH1dIr}ej@%ao)4MgCfJKhrJy+s%~!S~npLT7MO~jQ-P+ z&jPjG)8DSM-lFw4Y5k2p{rixg2G4a*fBVk*8;YPs>$jdw+Fyp;7Yqd5c)lHU*5A}# zFz>2)miu_FMBW0nc8{lBXZ>x>5PM0L(*r*Je?gY5h6R zG4=z+K$6tw&im&n`cpdRA4=z()U0_Hh+e*X;{fD~z@u%y*~Y~ zBfkj_c29r1PWi`Pt3kVWK$WNB=abKS4DvWI5lHG{yO-K2|3sd4mDaz>r~hW;TfiON z)89d7{8ROE!^T?8(~3^>9R3&iYvK5L(vL1YhjyLu&vZUDX#G{_+613G=QEJc28(?9 zJ6{(_l&AJ90)Gq0b|I@p>u*GtSr2#)`2}#mr@!<0`S$u#R|47;jTL)Y_XA!?@{}VF z1tWkYdEQ;;(Zxz_;rV;uI8TLDt9k0sSc=(x<=RMSKChfU&;|`VSc-eGN&C z*1rH<#{PB48^Oih*6*9y|F80(PV3+6)BhXfx52yJ*6$x2)w?pK+Mx9pzmzOLmB^#P zIAHRp3+2Z@DBA4Oc1vp3`ZxLX-;8_eosX{5zGO$&bO10B^_p5WQGFf0KxPXo0cw-v#{+4LCL*B zqOV!=H=^IXx1K|O6}%1%|69nCIvodf%3f4+9^uR?=E|v%CmHkrPN$ybz zE6IF526-}=3M5In={%p?yW7FWp@)JpAFp}p(P{kLiF^;Z-^bH=JDSRqG7Ne+=+(Fu z&GQL5O}UBulK5vJ8+6~FcEh12@kLUb=BYua;i*Gj4=(yvJne=>j~brXuhjF|>*M(? z@_V55Tk*6X9_`UYm6|91YSN$S$kkvrkkq|$(7`b23F8&>r<$+9$Jd1X7m9fX-Ts zm-hElJQ!jcAM2+T&yq4rCM;;1B0OMEJdD;!D4yabh zvg$QY9Xd^U_#yI5;1(ZG*W1<9;ngc%!E4k!2Yo#MMdsdRD+r7~UFYdwnDuJVbTh1G z%{K$x<~c1#UJ2Iv_`05d?S@;wHu=}4d799<2`8kSzmEJSIOyZ)e7u!f{@M?_T7urN z%c^`$zyDrOj)$s{r-BoJ$-mCWLml#@4!_>ebXJ|_+v?+c1o=_$#QzIlyJ6Uy!Q(v3 z>0fBRFVS7k?<61ly}_Ip7y=|oJ??xQ)`@?I49DK~IAbj;KbNCBj$Yxr2KicWy^pW+ z{&XszZ&-HFln%?P(mXBbH0AJftHg!`y&qm zLxH4jv}5Bt80UTE)yUuI_8*0-MKPs%v&YgHvHHBSpVP5Eg<{s;KC zkEe^}M|k{u)c&iRF{?)NjQ?$tX94n=U?J#!zO@_Y)ra(WvQG0f`gop0egPc#Ry^&; zd7Cv+gXW36oAjpwc_cUrbl;y2#(7(eSG;dD-zFd54&+`xG!-L2V zgGYUQU2h*!$9daBG7;3IdD?tDvERE^9w-9Fudeg78|U5Rk)Whi^DIE8DG!$-Uk*0= zc)H#WrH=DkkpNF zUedoq#(BFu&N|IkgYG!Gg>Mb=1z@9(uZ#U|_wiKk|?B9x$&dt4;H4_3=D}{0MmLTk#w+&U;A6 zV(+N((B|XG`H=k&pcr)DpZ4RthqXtQnr8tzP5XBV@@3%4Z_DE!=QSy!8qL#;&N#+P zd3zuEL-4VWr|ad-KhAqJQ4Z=gPx&8{Jadpw0;d3zZ(SVcNx43BocBbsoo&>7JA8c2 z$Ug@!eJj2W$9a1VW3%Rqe3bNWB=Q(A9(3Qoj>mcXG-0de+k|dYKJGxi3*6)5>&E-B zgH!*;JFGvb%RRbHdy)Sq;y!{hV8&T}ktKC^oHueT?Z9CMdi9#W4*iCI8}jX7Couf? zB1`JtIL~80>_D&Tx61!d&~NfP^J8R?4y}8Wu&OYzVJ98@$r%LB~$eVy) zMDcX7U*t3$#S>bg}-pJkf^UYqB3}lsw`8i|~wvJPw!y z^dR5b8G1(~PqXCN9>wzjR2v-fyC?_lt~?;3m!lE?lmV(*ne z9t@NLDqUUN*NgCUF!)-e!Pg@BY7w{UC-y+z3)~aM*NuLnqrvwP?7u>I z>tB0=?{i^+wMw2=#Hsu#Q~m*;Hy{kC^mNhQYvbu?@O>c-zT$Uf|A)90-*(7X1K0h3 z@wGGfTFtSp>RO%TYew94_=xA@50HNX^e-am>*Bs%RQgUb_`c$t&62Miafc<}0?3Pi zrBQrcoPTq^D1+~~tR0B>J&}(G5U1)d4nzI}@Ol(aH`;Nu!S}5qDwaHyM2(WC5pjm0Jg?u)kpBq$If|zn^)1@qtF!nbAwrAf zN&aVqXAI;DU;@AcuLoVU_uP7Yvcb32YFk))U)1mIQGAa<#g?Nd79sulTQkd<}2|p!jcw%tQC=J(vBo_FlsW zqCOo({3^fy!?})Q?gQ}9jecyIyp7!?Mor0)R^0Y+pSl{CAKOg|~AU&Pfdkr#Gxc@-%RU&RxPHQ1= z0BU>2*UsL%TQb#4okX6i;{!rBO6Ns}$@?@XD-8Vo!zyq)6 zU9|TiJRR)4M=Y_yS1$RMA#T-A?1X$BaAOo-H~NW=_Fg0JC~726a}>`%As+`$^o*yS zz4y4BAT&sxvhO1GVjkoLz+ynU0=k$g>vyAB`meEb~pm%!Iid|kBnqSAMgz1PG!i~lOht@ww?ym&g~vw?E}9(cde z#rZeqi?a7#l(hrv9Fk`@;#B>`A;`}F&qwieqaH@vdoL-XddZ{xC(@3?kb41r0F|C@ zwBu-d?`74qH%gvmQ9Rc`t_ODYjOQeK?=Z-kB~Nn{&sUJY0lw=oPn09)t0G0MlBev) zNWPs9`2t`O(1UzKdZO*U*Ic5|$D+P9AkHu%<@LJ>^6!A(NAYx{zD3)6M^rs1mpt}Q z5uPH*1A(D{N>3NfJ{A0j5x>gse?V>p zj!VvN*eyc`cVh2-j20P|JjFDU&Y6(U0nP(>;5=RImpM-dd+$@XNmfdp-H21A=eLlb z1)8FGx>$c)o@jgTnCQl|8p)&S5uR+wxj;Uk($fu|cJ|(9lBZtsEQ{jV0r?u>`kwK$ zxA#65M2(WCIg00BkiQ3h>={od_TCpVRapO(eC0+Y{}w`C0xSc1kbmv$y;jN8DtQh> z@%#bu5#WuU@pQ2Fj=M~u{}b&f#3Jb#3V9eX3g|(4PPX?>v}K=GEcxmXcNHS%(-g(?A>@yNV?E<(XYbY7AmQPds2BNGq+U#cJRO(` z@X*cvwWGavg$;WzEP3jqc%Fj%H1J%{csjB7w%Tglxm@yTcBGuLA?E`5fJ#?4%Bh{b zw@v0>jpSK|IBO9puje};Ujtkp#nVN5kJrEU_TF~ewf7n&Pc!0F_Sbiif8ZRRNP4+qiE0NV<1-m6968%VefIiD0{D7wJxnm@@z+(s=qh@`9a{( zD4uTA!)SZ&21V2=d0G*tnpcFpOp61O0F|C@jQ7#@-Y(vTc?f+b%4rVbR6M_gTnB9J z8P7@f-pwE@mOM>SJRd>+1o&Hzd7|vS-6BPmk|*C6NzYl3rvYaJJan`F>tOHQ<`UIN zo_fR?Mx4BUH$r{_cq)pgi}oI`Z_)PN9#sz-B+rQ`o-9Apa)3O52cDiT+Iw!jKH1)D zXzOR2B;PW`9Y(x7UDre21?=t_U#Iro-IB3I@*R!hqXDKdzyt8m&GdC{@9mR>e;4(A z65>|%eGTMwz@{j^ZnUdT?7jVM`5BgcO^93d7oR}>9B2iIOyAd#dFZaaS2C~+8FXrg z&IZX}9*poWhP)bB4=DbNA@k5Zdrz>R&fu&1T;%s5#IN%EeaIgIpGeMbv_}wjV(>k# zdNWO{lYIH1NP4G0o({|ec;I|p?4Mn}4u;=B-ZmR0Pd(yP>3SUUZ-C!M@pQ2s37%-f z?@5uSX329RiYGOOX&FE^pwiPFo_2=cA;Hrsd8!bnO3#&$w*fnP$kX2Nd)g%m{X^7; z!%;k~kiQ20)kB_648LbpjVP9UWwDWTod!lAeHy#RCd@`kiP-Gi{j~`-525MX!so! zhF_)RD@%&-Erh%TSO%#4>j7Uo!|xqw_%%qr1Bkm$=Hs6r9|hix;_IT_7oEP748M25 z*(&*xlOyxhGRPx67w6$FUzFkZzNj5o?`Rd}R);uMJ-iF@KHxwUPj~8JwBgqx zi7F+}F~q6HVNVLvd_V|L>FG{8jyC*0l0AEkv z2po#y=}x_iHUK|U74M&--kpfz38yiw7tjY#>FJ{VC+hdf2H+Q}zYR;iWr$m)>jua- z0k`&$uTulCRWO!IzN1lmdOFigzyW%azRnH6uUx_^$u|jct9oApc|CA(6km7RS0@JG zah0ESlJ8Iy-=87B1H9iQzV$1YFRnht&HO*KHLwQB6V8bAPop501LFXdkEiaRqIfzO zJU^l?Hp}?y5SPlg+accx+#MDFsq-y5{%Av|&cm0YT4nq#QStv9@{a(`jOgE`_}dvc zSGe(qz7p-I9C0cA=RsZoEbean?G2l)oS<07-w+l53y@y|4tF>HP7IoDZYpr^q~x)) zBI)P_IS(iVR5^DkpV}ER+g*kl8UM1V_SZ=*jgqH09I;!bLaqd60d4toO1mYhzIHHJZtxUqEi(Rk#8rdH`1tt*e3g9SoIS9&V_Fzn1+!;#BjF#BBIN02zQvN0-`lM+4<%kK8muy^=gth*R-w zhI|=tMR$4H87RA5k~$fG6XH_s?|sN00-r?1-=%un(J;A9mAa-iNS^$h2+w55Q-Df9 zr#8nHWdHwSBVp?r?xvzPR~gO$9}=Z;|hHv@~<9o zhw+}5&;5`e0vePZQS@-aZr?V_*+p=%lbs(p9^^&Pz9*`Iko)|RgXHk3gnRN56dM_Lln>NAioT} z+FhPb4Th&(rYgx}=SR}h4{{MO2o)*NZ+IeOH(|Q9106~IyJMRaXhtup2t>3V2%`K9C0h0|BMi5Xd}q9Dg_9C(Z^8ShjHevH|B0ES(SS@KbNd;<(Cr z({0dQtQi+;+Bn*efD9pgLgYgo;#2u>6XXWqUO@5P51EJL4!^G^_^Q{oXG^NtvWCy~e*u3WfeiAZ5mBe{<}N=PGl1P`zF5{Zso1{f{jadhc0ulKwRdm!M!$>+q`&KM_(#|3=-%zwvOO{R@`%B*~>2bSt5L z5=SYSVUD9d-%di)3_s%^SaDW-Km0Mt3ecUz$GmZX<+lQ7#6bC5NbF>*zd6IdofzYc zFtKPJ8%q}Z#_GkiuNPn7A^f8(f9R{q|7OUK08aoaJ*|*=__*qH>1i{pBdL0~eX0&x z+B+RnRoa78jXQ0saPE_w>FPVDf25w(K;8^&0aUuKgUmzuXpyd}p(m9SD%%3y(Nr&7 z%^Onrm@%Zh_ZSOBv_<<7X`!^2?dZJ>>P3?pXAI`eSgWFf|0v>D^}Lny4nRHwivMHC zJe;PUbN-F1moHwkq#FE5E#wFK0U<5q9^(VIqTFUsi@Zbd;s;WItBF=mv#HmYWg66p z3xtFHSnnLBr<>Hk=Q=ek-KTp^pFvZpZlFQXAk|IX%kYU8@4SWwuf^0)9j~QZXe9VA zC8nJ9WfTtL`6e6FOvHfq4-)z!p*+J9ZM+WQS*=?s7P1nbg=kPp4)a(6U1voW{zWs<{m4q& zG);my5Rdn_JRW8tlYb-s{(^k=K{w{N`WxvqThDb6YXUV~y-@n`lLwiW?l{z<&H}y4 zqRIR(^YwYuw9p;;lk{ZM@IiZ|O{AsJ?rn|Wy2Wx$4HWelT7jI1X9>xa4%4Txslcd$ zL{`KKofJO{gi%?F=^)07>mwa%yi92g`6byxX5pi9uPDD0D4%>;e*O}S0YEOG%5MT> z9`;QT=;%eL}B#@T&gsZpilo4+BcC-$LeL``A$GcG2JMF$;V^U&!;Kso4fa@cXtw3|qYOVaj1Vo>7t!;{xwM45L1SZZ*0b0}!8JeWq(qn%U?FVr&!jXa^YQW-}Vpw1VOel(nigUyYB>5T+#pX@JtN2r>^pGd?cn`qf-T zFzd9|@Me!0=UZkrDmF7>X)ZKyh{Y?(0;7Z`LWO3@UyJw^|J9Ih1?~hC|3Sz+{LK7d zt*byCxf0zQ?|!%nUlHvKse%{X`dP@Gv(O7ei7Mz*fE+;=>_(24=0uSn_RvWE%!FJ4 zOazoZk3i-j{(MnSmYgS^X!L4c%-jFcm1`DmK%Qi^&=2Vcl(f(~-F-YM-c`D9MtnfI zqOW_jomLU=)6IDpol<-iPCSa!Fyb&v4$+XuLsJaucar^PA6kZS1S407Bw_+OSD$6r z7>bx4zyvzS!PnzFCW{|LLxV6T*%-Y19urSLCMSH#c^#p9bn`}H%*M?0Z2bm8?jmj` zG^EM&mqyAX8*(Wy5>V-{fy_ha^V6%06+n+9iZTwTqpMKd`-UniuQRJyO1 zzK-GNFuetLy1+OHI?3qc{76HoVNmoskf`Bdx;cWDpwhV0Y+}XaLcWx1dOe{R(V29S zKA#V4T2qG5y9s*Pc+dOoX2^d5S^%Z@3CKLmlkK}zuFLasTU~u|CCs!9V*XLN89xVC zf}evsOpg$42j**8wq-GlUKTB+L6X4IIdeZ+L$itHDuHqrY6=D{U03a9TU7&rkvbVa#(kJxO|?Bx#EhAg4SVeqJa=WWRE0xgoevvs`)|GCSTY*@z24ZKO(0{{#k(EyPT=}3#XDi;!V3}QO$7SlTwO^TYx=)(&Hh>JRDyj`1ehT=rN&&*WRT<`)2NZul$UM}YA$YfrkMPfo@Hdc`FkR>T zpAt;hIsXV+j@MklKaNhL1-#Za^%A_bh*#zRR>-@6TLHy;H)I}um?rp+$|tX{#|+5Iii9&(f0KRUaIwq=gajUp5GT%Z%{iuSnRn% z<&4L&Uyh^l?Lztam%Ks1DeO$n&{DI4)UA8+kn!$Y>d$RW7%Ki z%4ejXU$k(^Io0bHLFcRn`iilak_LLYcQ0lnhw1Sk?#C*Hg}aSlRiU2|LtiGC#q|p1 zqw@;sTVgIJ(B4n5D&b6m8Eu<>=Q3ETafY88(W#@YS9l_aU;?7P8Dqsx@^8`kzna3+ zcMBH9$Qombak2g}MJjg@eH@AP<$0eb^jCyDNPKy8y1xz&Zys{6e6UFO0i;W%`x(eD z1Fr%q-S0!@q4W77FE8Xk1y+-g?zrM%MWi^b$U=(OXm_#@V@do3|lZw{g|bWbHoEEzfg>}1J(1?Htns<5@A!T!fuVCx ziDmxS02{`rpIIg~hYe&yl83SqD+EI|ZG4!GLV~6lPqDUcK&vbh>8gd^VVSO-kaq)j z04iOtL*}8SQ@c!-=L9+1PO6%RDbp3yoio+x+71{;eg{)a9}3m4o0OJ@C^uQLl){pj z=`n0fIXyayrNI&LECpIt8`o2=W%DqhUvfpn9vA?53@{E*`fY~H!%8_G)<%tsqJKaM z@co&U)wR5PXeMuo$?zR`@XWsnYrST+8KORvd@e0R9qf-y32LJv#$hdSvS$Wfbr|2d zSP3%YV-1!RgB}e!-bLs&#F(c0Xdd}5v^TDI%}AklGxQ2WFJ50hf&5S4TR`buc!tn> zce&`#+S|J_U)z?Gld47{V_y*&d!Meo!810ICFrTtM0K(9ZR#E6qX`}_ssPQ-WGUIH zECy$+yrV)aEkb3N3TX`_dt zSf5X};tgA8MxucwgrF7bquY4zx0xQa!~H^iFZ0hr7hTA(7a%MzEch9t^+d*c0-fEdie(O>UOA6iZc47b5NlW=e- zZbdvh3z_sB@qIA*f#ZP6&-LR)e#Xxf<-S#pYwh}p$~A4)P%F8Hd`US z&g)uy+G|#}5k#}^@ADNhSVw4F1$rSh6AUaj7DCRWSlP_>VbY1r&ZTb?K8^(NVu!J; zwb_cZ{jjJkbF_g0!yCs;+i%7xefKn=sbO8HL&n?;Y=?qlIkZX-V7(RSOpv~ak;WVA2IiA6nf zN6u@pD?oc=91UYYVb&(g9W=4DKH41!tu!lrv_CZ%=J_M`n5J+my_k-pzajQG>jHZo zgV7vo=CKLDFf)N&XiTB~^*la@=Amh(NM{q$p~i=|A!kfvS`MJnc^PCLmdqFFT)9j< zBk5eWaP^Xv)xs6cZA|s_kK{T^>gh+~k>I}hNA#N;sQa1t%k9yB!AE>#`@2UwYM0U^ z+dkWxF*p>T9HJg4DYJLRV066`kjz9qG1xBD z$cHfUf!Bv0Am>kFT7N+0Q{rTiPcO-S=1sYO7|Ev^ZfuQR$8Ap3hHu5*;Xd)W!*FZG zPOtkI?!MlPKk+{3*?8?~PcAK`XBeJTAFKp_1}e1S$pOkc!S*+$Go zY}I9z%-1`XWu*JUo(Y(i^uhp!3FAyF7znXRC3);tV)a|Sh|MUx0RN;obu?SGb`hH! zUdmRn{G{MQl{+nQWC6pK~5twR90HNEwQE>1k)PRl)M40c_Pdi&#cd zp&Om2Us45IwQLcaoOBLbRgiJeFH5NmMg40bu?HZaziKJ=KSY$Z!33q%{`^|5u4D3?0qd$BB+ zn<2jf9063h9GN2ftrfE0+R(B7y5(}t!j&7VQ8GC#)(z$d7HP4*VeaFfKKF5ZqWic{ zyn8Ckeb@T~)RM#W@cG&?XP}YeE2P7X{!bDIdo7O9pBAI-#{2UBhge6*@J|RmMq=ni z#IS8E#l~iEDB%VY&yt2GW9K?E_a;hr)5%!9>t}4XeC|MS9$xz!ej`6G)cXqJ{}o9) zPH3#1dnKjY+^^n4j4O%db-$d*XVCv7)>otm?-TexD`TbjXFHIYwx8YJHUND>tWU`} zIRsfB66+%}tH_`xrs44ht8uU^%JgId1?w#Kg>EOts0DPui;)W&1 z)9?|({s-oq5q_1hS0H%tf1=~}SktY_J}fzu?8z{)O`DzTfy{=O{sfGBjOo@H*0?^2 zc0$NV*8To>2`#hp13GpbwnV8p%o^UN6A>O``>?G`JlIXr#_Y!MA8OM+> zHcPEZ+#+9Q71+Zl>mZD62n0X*`R|i0>U!g+Zr) zV&zjmk0y}*IlukV zh#>nlv38JIw%_ZcOytF8>(U~mHNglYC(ettV+u`wD1Q$@QsLxqZl;ZHE1C4g5S=4L zrY9P9Ce60iST(Z_p*FGa$Qf5qC?8M#aeAVOv_4MRV>HoyJsVTN8_5Hd-A@zUS8f@O zGyMB0yMvb9N!jhFjLt5~uBW4KrtDTa`ZgYylWWp(H&AvB9d|8dS5uQ#?x5^fv~n9| z&(OhsJJudfg{akNSm!Tg-w<5Rg2lqXHkB=1sm%UV;t=zp|nk$Gqcau$#asQ%|7$UJnm9)a;- z!n!r9#F&s&hnl^G)RC77b|GL&Q|(!Qwh>3u23v!$RZCc5sK^+g`_jBL8>`wr2iqaA zK^%&?GmA^6b~?AJX+g4w71AQh^f6<&GYqOePK-lhu^xJq-yrlp1ijRJ?={H(2Ye1F zy?xW=cy_9F6le{%#6@E5+uhhg3!Hl$!E2WL+6U86q~m_7Z4Y4HhrLtFcBqH=W3&DJ zVYOr%VN98``GjN_F|L*x*4!xcn*;ty(3g+5s~}$vYy*^jcSGjkxSV&j-%sW9`-Ra8 zRt<$6avNV54+EBK=-p1Wg8}R$&`bj704)9trZJ|E_GZ~$cX|GLVq8KkIbo{bCG=_q zuUbc7mDu+J(g3B`aL7D#zR$t+!upBGI}A5i`#nIP=WD+&VLgx+`?a{17D{c0r9suY z4!0Rb@IjnR=2h=vV>FqG=}dpU+{n{=@sBjE;bx&x2fr5>@g?_~|BIETq$g_d-0HxopGo^kPig9|Ed`9L`OV(7XW$Ua) zeP`fNoiyqnq&(^xY&Yd=p9Y58L7hHA?R$}jSk1$pP#WAi922`kJ~K8E6AcG_z7r4U ziWL8u6V3iPL;F~T6zfrxTH6Wx<&dG+L&86uNc*RjQ8U0Mv5BzK%GsD0XE;_WF-rII z-b3wul!0SE?dy(>ddM911f>UIhkLN2V8oc8^2M*dG2E`pOb)|Q5QDKADITQOLv$K5 zOr~E$JPfTFcBEt7N38>NET0!)LS)@Vt-GnRDKTsE#KI{jQ4cxzF0pQ>)*k$oA$r?L zC_3*u!oDZP*!+jhfN8S95!4e0P|r;;LK#Mcpp}4Cm^lAW#C`Ad@&8*&LoDkSGTIrH z2v~0u>mAZ(G#iy+jkEDh%$^O0^`40}1~*#2{S2X>6TO^GWJ$M>DmGp(V4=iRdjefx zJw>cTq^OE5NQi;+P;aa6Y=induxAWvB-sP>hY5X%V(!=b7P60EmSKA^E4Yo&dx*8( z+E9eg?jZ>tE62aeKzSGz%gMszgl}sCem!;|bg*CMGY%^Tds&J85pdoKvRLlIV!~@11+l~L!y0D&WhL>iy^N9)&Z)0 z9DvNjF6rm6Q?9q4)IQL=WYyExbYV|@t8352lo}4|xPzHq4(uWa?qt;L@5L>43`<%x z-=O*|jO)xUWM2G@g+hGKdp|KI({*r76Lat8M}(dyphp;b@c!998+Id*11LQ!AoI{5 z_W`P+_Fu&MmTbpjTcU-0Ay&U@#IkoCeu*w78@nJLnrEb0iN*{)7W?o8hGXO$!ibOO`&P);05<@N??K2s92z0U50&rh*R10izrK3i25cqI#5-OBb>xo(E9tM% zZ-`cg4SOsQYfsMgyu%_B^PorFa%I~Ooz-ve24X8 zw|rJrFIm2D_4K8)mPucR%1clqenU_tUZc%ayNzI()Gi4*{(PeZONIG1OUOswK#z%h zWv_q4ucG;o(5Hdx06v~Ck3fDNcnMJYTzH<)XRGwWOjEW2t!-!&p{e`(|V9GRdems2zim zI*xjLEW=4ppw@*b}ylqo3Pl)Rjxy) z*6_T@mqSRms=tRJe*k<8sC>yi|1{;acH{EJD^!JPB+a}sHo|;yABB8l_ceMyelr4o z1P*2%9DMyQ2MLbHT&zzV|0IywCk5UXs8CM2X$EL9@xY!5Iyr{p$=7KCl;2F>Cv*}S zPlpggw!r2Wg#NYAPxbRxLf!#f2Ppk-hs?u?&gz*|J+5XAPCC4X%@FNLJ%eV_(ZVyP zh>nNjFZdCvUKD&Sh)?l-3HdAFTgk!wS2~U-qCPLI9amlBdc}mn6V?uM4`WQrbb=Ar zjlWLDKWSd1ADspH0$?$q(z6~i4>i&c`rstdzqvd!`B8k{nKY6=p%8eQ{zbG_oe!Wn zSg=95_`c6zyzNIP!AIHA>V7BE)r5G%h?lpIw;_KBdh+esn zdFV8MRKMD$R|D2`dFOhB-bJ-(=v=AnTn)w?IB+LLI#)jTszpz%>ix??pBnI~cKd6{ zHvzW+DxaQ!%)`(3uWd?|FUG-$ZDfoCwcs#zQ8q0!^RV-oLG!T9nPJjk2KFGJ&Pb?3 zvqT@;@_V6=wjk2K#zD>n3IL_gA0YE^y8cyZf=>1irrXIrJ;E$1c^0l-i>3o8a6>nn0k^~4x5b_GTQaA zg{*f%p55DB{6Zgl3!_)VRZ;a)m|q4gKlS=*e5}Dw#g>8)OtsCwpf77M(Mhp?I?7%g>9WJ z^eS!^={P3!V$Ug#fVI&*R&Gai_faz zS0i~U5swb;f&^<7>en53?%}ROTrj^vQFZmW^>6gf) zX8JdH>13n9#hB%criNlzY$zrH-X;q$ueE5V$4F!`W&oc%>2}D^U{|BFb}U$(iH1Q? z1F&=r^HTSdfDe0&MvfjZV&JyofnARL8%`SteTKplqlzYyWZqy9>i#J5FT5zyzn4HB z43q&p@bROg--kE=xZXVxi0yQI={zLiJZ+v20|<7YaS{&Nm<$GzuH)E_#eD97(jxhG zBW~4C+z0tLz|(-r$D@#W$nUVer+Cj;vvIYYBH!zFr9;q_Hq-wQm|fXe5ivr{X4V88 z&GXP$4>RI*%PQh&z66_dL*?L!_*>o->Cayr(Pud1vA}ph=`$7b>GfH?VIjsFWJFxm zG@Q$5rpvV^919uG>(4kNQyM0fe-eDV5nmV)y7NBBzX5&=D83gU^U%>hB$9r?C!LYw zDl1?KHPiXpo8TPAIm=wmM#*O{iSVUCE(1mZimw{->G&qEUQ%7FJfG{xrY)q71o+Dh zZtll&ahh8Mdvxs)ES?4pFAf3aVj>mm#Ic~Bj@pVA?u5*9^f;0gEanTB4-&ePZsw&? z`Dc+YjnHEf6yf>uBILJ$_W`BndDTMCUDEICu=E#I`Ep_P>X|hwUHcWgn9rK-R^{s$ z*08r-{1b+@X8Mt>y{YG-nPH{HXJV-;Xp|+Gsc23<795GwY3G^DW5D$XXW4?xNH+aw zSayg7Z5qIU6CfUeHoGJ*$Aswe$h=>R7LxIV3Fph%8kU(0Q4+~=c zbK!@Cq;94S6w9Mi3Hs$-1Z{DcUS?b**KwQvBJ$x7(pfI^;V|U?1>OQwKKunT42Wx=^=(`CZ}j+KB@`!?)BZox|CZjsJGR|TZI0S4rSX7 zp1Q^lMY?LBx9ZonLB1Zi8Bpok2bqWB3NbF!$n_VMu377rubNW5bi)KWS*==+<(HfV zJROIKw#&}O4B0ft;Hoc>o?%R)y+p;S`AG1$B7VhhEyKDGkOV0H639QtfA;bVm$fNS zvmOq0=fIz?nf@K8f}lVNcI|Z|?8%2Om(OeYuu#V>T&_%Sl1bxSg{uB4^r-`%(&q-q zw*q$pN}v6Zc}SP*aGm9c%!|0H6>dKKnrJWD8FUc_P4}>yn**(quNCnrK7Bdvd;yXH z#Wxx<52qSemh*m2Wq!@o1c{FWCb}809lqywFLZ4|iV+PzA(CkZVuFb{EzK}Zi$Tjr zpJ4G(W-)Ks?$YTeA|JMcSLwAE@}s~(KIaz2kiC(DA1T{&0k}ryk2Yn$A1cm}ipV5$cIMw*W>*>sz zg^R1*0q-n#z+0+4;$+YYKKP6@dWiwA_*0pF86WT0cSF7hxDQZ#Ps+cmd6{~ucEP7; z14=kqxNjB-`?D5&9dNf5;D9$%xNZ4;AERYDh+K+)4D|tAGjZb`WF))dIHZEO2drxJfEPOW;f1&<>VZ{Vu?W_RK z>guSlu9lded?V6TUK2^z638onHGoRj#gKV8+F>5rKL7Fy+m(AYKj6e$an#htu+}U${xMWnS;9axuf2j}5LJ z*y7cW8aT{?^WQj83-g)s<~z$6-R5SYReme-We#}Nc)ktt&A{z|((47tJRFzj>Gw$g z`P1r!J7?T>i~E%}RM)!ZZTU+Ct6vj=zE}X;LEol0kDg7_X<@+frx=OYz)ypbVZqtS zXQ%js0T#q5X+B5&gkL={TlF}N{}OtK)%U4$OaxbrH%hZR7*2uEW z1e`XvXsY1^X>u@V;q*iZzW>O|bFfMsB<{Ht?R%l$9Po#cPkbD^6!I?MRzT_Z31l9Q z$@7(!(oQ{XKB5cX=<3!=o}yp!rJ)zZ<8Jt>^9=njQ#*~VEA1qPJ3m40zG#p{DhG)e)7_?1V7IG2_5~-)mp)fevxk%XM#JHH^NK=|# zYNWH7=40-7#q}=#k4R_vhDbSF1o>j%Qb48iPRKlTs~p^P&e*tSLp8stD5>&(f^D=% z$aFp;eNVL}6BQgvLv1=Ru`DewodySn7`%9`WRDS_2E_-#&lnCKj@I;}(DNAdsDd86 zJc1kH`wR>Ol%CH+=Hd7SVthI%?`=74dB7N0j?=wvLu?^Wun+k8HynJ!>lb2>`V5ER zc)?ub(^}1JJH;33XZH>Ev-&2&2PQAxiOY$%{DtNj@g-inZ%kglL@S}t^!bn$G~Ya8 z`hMD^9Q)JR&`rum57s6^Ez4oZ<%^BJaKF`A#3q^?go1+Sf6L z?b(I{f01n~C`+Le8X3CQf0od6b{A>eAz0`J^Y%CWB|{umG&*+pFnb)cN^JWKTKEfiM*TN|qxuxXU+lk< zU|TPRh5Gll@@jw}E*J(fA7s_MJqKicB&1vww9<$d&8ay|7-N!NJ zKK6@uZ;N-AQ};uZ6948w@yOVV#p50H$S`f6N0m}+O1zVYgF9sjMJOlR!L<&tC<8y8 ziYw5(ILdFHkFtqB??%G&iEmhVvED)_lXRFIFmmMGJPs$((4z#?<%D6O;R!el zmvlHEsetFlHGE9?yO7{zlWVS1>vTUYP~+ zecMQK3X6joXtO^3;p<)lv{mok{b_+2h%KoS88eY3EV+QKHL={e3MaNIO0BXQpzZ5@ zGE(7jWn!%(W-Tt^I9-!CL_)tKbT!>a=vCC51<$hOzv~<{~Kkc}I_2=q!3;9u8*j@iC3@-Tj^LF$-(H`+- z8v&YRhG@LU4y=N^m^)t^N$G=(Z}FPdo8V~FW@f+!%SjXPaJ;DYVo9IMtay6C+y=$RYIrQTF**%b72i^pf-qW{8z1N9;toavR z=+9)n&fKtOT{RzOn*BTU*Zri~|Au(98t%KVP4{ujDEE=^I*NM--B+o7;Tveg81GOT zGQ4yU7VKx>hAEty$i`uVfM=vN%(6cuSouA}&&sV)7Dj2$-SA>1mcbJClME~KVS-(P z8I%SFslniUXOc-DA!DtIhlzvn+oZAaQ#@zsspb~%c9MhhZBdTl3*Tg!GsGMmuaWML?G0xT0xeX^L_LCc_wTnJX&Sq0b z{gqfBla=mk5SOb}#0`tbW;WYNi`?h6xOJ(|1?>Duzor(ZHDn&k;)P#v6SZ!J8;$!2 zrn9sWWGM1r2(D#w|NJXzZNs142QCHdEB~CwVgjXR5=$L}6{WOsY}8O%@eQ%QB`e+6 z;7B&2!dx2}6;3$X1(spql-gNHK!YZyO)(vE(`x^9M7fT-`?q?5^!h|fw3i9Y?&xPLA$tbxCtz{3B9|;bn z=w^Rx$vfW?_BC01oZw`RXA6rTp(+WVu)F->ty9S%vucNkWB?Jhd=zNp>3V=_*PxF39R1uiobx50ioXOLMb+O9qH<=MPbT zEuMfAL78+ty_oh+!5oNA9<$y^!?ilYN1jpIyR73U!$yxA)xUgbU-i%X=1$1UFT0#X z{lgI>$CnOBM64sT^4pXs&iRa(RlRDXJ{Utw%?oJ%I2F~#bgtVny3kEyZ+b!Sf~<-0 zrEwOYt)hROEBcMbx`@5;9^~V|cYx|QVlEf`My>QOdQCo0+uynN2EQa=-BPh)jc)lK z(Jk*0kG^6#>{?y>EC}Nxgj-s1tbPg0qm%6cMnA6OAo$If(Q!DxmaorH-LzJ7zR-Ia z^a{)V?k33lfd>Jl_n#p1P%rg8&=tMi`E)zITgiUiH4L{&i|~k{Z4Y5jCOH@*r_9DW z6AtO7>5mT;1ZiSPLIzfBD-+|3kcQDn!HdLrjgWG+-#B0BpMOQff9xE{7Xm8*rT=q~ zdDth{Ne9pELVqphpV0}xp6mg`-HiP^_GEd#e8|+ALb-GZl;$(Z7|bMXc;$`4Oj1X+ zGo7I6I7K6@k>f?OY<3o#P++Dfz#{M$*g-$8^~5Cz1<6hjdoO&>!<*ZgSQq)07-h7A ztv3dcUzmL@_u^emTPV_-d}XAbO@zDxr~y=ZABW7tn{z}uKkiC;<@gkx;H*Y^7k!kH zM$ClW$7kYEaLR> z9yfqe^IUkE2NMh|;WLKyGMrOFny1qLCeCcnmBj8(irAUPOfuCD$YoHia*0THXltaN z_J%wPr~p*D=RoG6~n>v!mcm8j2odEn?6 zsk{S=?%EZx*_dDE(F|VOM;ldb%@&^9f5cZ((7n|(9c~LBmeMsDQbKKW2#2fhT@@%^!PP;a?h>kVSM2_)8 zK$&p5)4dKaV`AD9X;vRSKTKHzN!m;B8oQUEo>=;AB=#yeukzbiJtn+WF`8oivVi4T zmVw(rs6LWn>c+37=AW0a0ann&K~4AFFgDamGBV}6v23)Z{{3V&p-rB_rr`$Hnfjbj zxD+RV^F&jjc2jN57}EgX`*mdwqUA2_wvHH2M?jVWuSj>(lia%ntP*x(RE zb^HNmjePu8n7O9<{%yoc8o963lCyDd6OL}*LC8{E z8#YLPhLG992Zh(OhBcyIlwB367tcS%J*$IQjL>zULKZ))IBfU1h~n>9j@Ch(|r(0@Sw2KXLOdeH4ckDptA zo4tDd#+n)&E2v)5$xc=r_vqnz?IPN1dInvEu2~ywoD*p;RcnPlmEcqQTn2d?ume!~ z+yI$}Zs>z8kBuF-)}T<;78?p}*4~Fc=kl$+8EQ|N$KN9LX#tqP$4fX~J! z-0ry+@~yy~fYRr2$UJnsud#i-!Oe~1`9`GJDC5JF7M{C6i5elQDH4pMYpcGL0jEBrarM&-dyYxqCuTOrV`(Ewa zMeW*Ey-2Wq5`<&MTl6^5o;Jq9ryA?!x_dZlE^dMtO-s@5H*664)Pqlz*Fnh70M7$T zpWj2~;mx11x7+E{wx3koAD3ReMJHnO%r+a&n7-J$=B3vu@ zTM)mhPydD-dky@Z0L8xpG7lT%e)PVJI-9rh(`6BQOi~|X?j&_5bsrggs`?hKv$aDk z7dO||qUm{P41@av4VkIfbxpQx$9JJMpSVXs!k3EtXhnL%NG~ssz_m=91I!0he!K#ihtrn_`X6_cXe*JV z%I7JnazYfwM9EVi_m%G}Hqyl8#5R2+%^X~;XZqmQ z1`imgFtHCV!NKhxrU93jLQH9_eo1&AbW%+lw;m6m$ijZ!eips~?@JSRxIqr}E2%_N zI?GD*R(fz=$vVr6*PvTrrqQn`{hX5X=sdE3&XhH{sZQiq__|1YIs@{Vz%)SR*Br<^ zywt((u|t0#yf4H^)|P2;HDzn~7&cS;9G7Y1Tqy5}Mv2R`!Ji{Fs=LyPu>m9##9>i)H2-1n@R?rabR;Fivqe5~_B`!nINScL1Kaa-yNHw6Q%QeP}Tpvyz$Hlct1^%4E2 zK%NgQ0+jw&LFQqD)PGi|`tx1;PV`S|C7+4g#=gXUF4zADLwnBRrO+P^{2B1cXC|%^ zXV5-gFZK6B-sg+FpMz6Bz9G0@X@%Jbx!<3S_651_&D(|EEznElyL|)h`2{iorT19K zJPelp(jUwH&-V3)=liVAb;qXue+#>Xn=f4V$MLH)R*}g2DD6Y6$<^MQPjO8mhwSK9}<8@XBp?<5NRe{Y@~Wx{Z64@ z`Hd0%&Vzgrum({2)kEfCpS(YH!>rEg_43slqSR}~sb05bj(y!7SDvI=J^X5MK*zxW zp$reM@PV3f@Mw%Pg80n?oECDusA-LnKr*?$DF16@`Ga5O-@hSycVQg|Q2LcX=Hc}E zZTwjU_jgml&~-w;I`Av|{vOB&f!_j3zto$Aeuk`{TRW|v?zQtW2M4%Sw;I!~tR{Md zJx}2`R4h5+>Q947mH_bzf4-%036Fo@R%c>g*&=Ga7Rs zoD>za9h`gJE$ct{R6d)x!1e>u0HsepWFA!gA1u#hwby532kW?P%U06=Sr9r9J zxo!15qP+vvZ~>x&?wIR^ab=Q`LF7H$<+sZ62d}F4dm-NsJOU`azJ<)gIC;KdtGxfM zyj8(GOk|%(EQJ2=MsvBsnx>r{E|Q zPO$LV748?rlH&XzW}K-OZZ!$w(xY^fg@QpApGZT!k(%-J6I^bEJ1DVTpR6yz{<5qA z<$GlL?~cs3Yam|^Yy(uf9*4}sJbAz1B`C zZ_y`B?Pg~n9ceyHjCE*n#Bb^>*<8ct(hT!LmWW@0!I>M}6e2otEN+)zWyQo2;~bj6 z;*o+rBt_KWy1hdG(5;bj84P(GFd0z#-vOD2S<6H}-nzE4{ye{M)xw%i3Z)&TTQpDkv?q~-GCSF|d5t{LIno9by*=RrY_X+(DfM2!a z-$OnMyay=#5^fjz#j9~b`Wd&^&wW?TmtobBb4(o{*WIb(i*o9Co2l*e;zDA$OgSVI zXH8?UGdGGBg>V~R0#*y`4Bt|8J^WtNL^LCu<|P>^m`n0}KND4KC|pS3$(`t%%4&^R zPqIDBh*h&1?0-KX(o+k4Rr|ja^8LUgfJ)DEka8vIo<6o|3tJG zy{fmI5a})5+bHWFl;yuCQvQ7)mjR;yrO#Z*Jd9I*1oHP^+UGBCw^0i58qh%ABYU}H z`FD8mI`AE?QN~8aaNjgh1H9#Q0A^Wbybkc*WDp%;q{=#wY0aRc2)_rt{$ZhKBlJ-D z_7>z%fxiPvPwS4Z<(s>8)=9oKkejKiZVvayc#FP6wXcwQ2~Y@EK$yR<(tTJ*_rzgl z=-$a&LcbumA0VE0^*ppbBJ`XCJ=D6x#gMNAwgXDfn<4Y?v+Zdt_nDK5^8BoMieMZZ z>`q>m-*R`ng=vLXQi5La={TJ`ICB4wwumeda>u;pf^VTxgbzh1Jwa6{}i^#j9~} zD1QrU#oBXF%}>YTh*AY6n<&CnMkPwJMe5T4K9xT&LOufg@&B>+=J8P!`Tu`+PtTdm zx!hIzf5D)<&oB|3&!CNFDBoGNCCPC0uiHM3P(cN{`)g`X3a(JMtuDXixMpxIY zx`=nYSan^E$EqBX-?O@_W+ow*`1yVR+REeguJ@$7>;0~ytE%gG7f||q1TS2RT!;Nk zhx1Rom#i6&R!AgL;UC1P%klGsCf6F;t7tOIekb+bqCAsjrl^TCRi{b_dcaPnu?-Qu zPJk~3X914T2Z$b~#Q`CHDoi)vK($ zv|>r*;C1$%JZbMe$+3s}FJa-jALB5IDG3bLCS+L45)%S(euD*xBfN>6Bza_PU$H9S zI^8u|A7)&xi{=5h{UKY=HRv&x-$Kt{!`}k_2vqv*fER9>wEzEchwG8WxMW1l>^k#F zqm_+DyNrKxaFRbCE1U5#@gT#EeG3yOvo`}wbn<LpXtsR%F&cqlw#(<{@<(^$zh6fG6pcYPqeYe z(R0Ys|E1H<8|5ftP5uNIrwE8vrQol2JX?r|>PMv9=F|p&p+LoR54><+NV{|$k0-R7 z@323^LTb>Wt1V#}4%J1ZMX7a#*L~j-@eSz|t6H z`dP@$%xRx~ta%(^dS^Q?XPJYCeH)$$e0ugyGLrflX;2O*HQCFUWTXvd*(=9L^1m!j zobbA*jW!a3fn=79%SV?vkrqd5+K)Z!fn@b>ho_dkc{%olz?jIt=Q2LZ$|epZOJc{f z`$|y-Og6STNYVRr4sOOaiFS zx%`ZDRkP-dl6`_Pes(>$zp@hdnpmxl)i{~mB<{R$;tr&bJ?hZJO*K+UT&PUkR3lR+ zF8`B>JH6w?JsG2lM|709;zCD>JC`jvxiWF58Lv5vYz*cyDoZLHIdSyo_GZQN$?y{>ADMExGc4gq{H#Avhs?G8KO?J+Qt`!eWP9MkI?RqpT}#) z9$A*~_7yeMa$~i~c1>$|-j<(!M`XU>2>3Bz91yPieQ}G=wf4v69akzg;|rl2-xwdm zv)g6(b%dqf$D85r0`~zGzlY$3n<>l9s1CnaCz|Vf&8u&TY9``wDXglK} z+JlBGi`9P0DlYrjUa;foxieCJ`@@d`e+Ik&lwK!p zvGp1&_g_@4>8M^7?Sz&8LaV+_S^I{(k|lEE&Y{}p@e5pYS-?BOHP+QX$(`;rR%!x;C~*j@ zUDGe{T$p~r5v-NZI4}Kzm8ZtRAu=d*W-D3Wna!Go)^=X#`Fq(rr+<4V@Bc# zA8XHt2Q7=~M_6=>5xh-z-_H7Sp1E-RHr;U-uNUkFeO6zeZ-tZfoGI}fI^)bA9C8lp zKioOmt@9Z--8j!Via0q94=3k|*gJRVq29f2(>=HAo<5=8o<6?#_w4x4y&!J2p5S{;kNuCq@P;`9!|dhrwR|uNsPc3^yl~IR@4NN#d%A7^Xi4RY@|DGy|CV(MhKye|EJMcgEjrJl zGcB5UFO9`6W5220l(f*(n-&ez#6}9|fKOvZU!38M@xgOS85FxlLp(!A`dqH$qdenA zI^srq#*9phBjraXSl6-ALv+3|SR-gRL5&~S@!E;r>OJ`sz7?3;BJo-RFWhE1E^tPN z`;|(HOP1LSV8U+;ovK@1tq#4;yiT_~cdHejPu$v`q2f<~3~&!N8AD(^Io@j=$*!fiVa)UD&KPEMdK+0z zH%Cfk59S~)jNynWb%tK`Bh528_;Wd9oAX@rjMMZ%dcT+{b}dak`iUL?M&cJFej;CY z!@mPQka6z5o-V7bSRxHaU`%kguqZeiLrs0Lrr@Dq+h!d{x+}~sPeTRUbvv_Uv<3Rru6Jp#T7G9$}%-Voy9ooefBtO z!bUOLdY%0v+xlVuE63tf)qi4$#(y2!`8kGrcHArhn9#6J>rkfSU^>&ZG z;8Q!^Gw+VXyA1wZa3N6fZh#lAu*-E9#Wf}6<twrkhDe~3#hW{SE{Xq^;`i+L~UcZ`h zaiG_6rL_#tw^j30)Dzp#*@2FV7qJwI5#l&hOx0tsghcBml&Y|F5_0N3v(v2(xk|6! z!QTV^43u8e?zQz=BF7t*y|lLVQ3(f)6ud#%0&R0_Y+3evCHn9=7M(77@^2Y0dbI{!^yI_Y zBdjD+?{NJ46zBX*ma(yBJy!6EiN+L1va^)&@mQZLXNpr;$RFX2^~ZWVe7NvA#a7Rt zbH1}EWsbPtIW5IVJ;LH9q!{ytS=?;Qz#q?y$P}k5v^_F!X)oT8?r28OEtWBZK@!c z{BtBdR>EHdE(J=@8{mcOdfjV{uzND4bZPlYD|hErTgwQ=YipT!7=T5BL=c=L^7bk0 zd^mF018rhsexNsrSsv7zVO9&x>h{@sH6vGzAGX3D_W%l57Ih5PIa1I3unJI05+|3oFr70)4+ zy|7}6rT7%4&lR8LQJgtGCwvD3a4zbFJnlb_CwzX-(C{^muX3qp;==zO;F0&&>EZ#> zOw284oRF~DL8EYEWurDW)E znXv<{jQx*p**;DuWBsfh%+cMhfqtp#5_7Fp@QSqKEV+%ySNYov|1J0tDE;CeIvo8( z1{a-7Epj|a1Ou(wWIgi@tWnKEF_}r`_!z0!T2AdHDXVl_uTzk#^jZbK72FGyUip9N zv0l?xE{W82qG}UZ3g&=GU@^EA z0_R97tE_S2h?kmCoRDSzK9Yt%`nQj1$t2DuF+|BEKkV!3?nADcqmFjFSsCJr0oLr_ z8RiiEOsuo$BaN?g$ldDu#c8M42GT>N*KP3kfct?;uSWPDmNU|8L8TZ5Nh%sa8VtdN z&O62`YpHIEC&@90g^E3pgm_lKZ<(w}7BQW0YvCi0WI3tFWRp45n^u81RXQnH9pJ=7+G!!ne()2}LdliNKN?k`h9|GgWY*K}} zz^X6mytY0q$W!_xKFWC)pf6DRjD=Aaih{gd%72*fReJm#{$21PQ1Xq( zdn}*NEBaRj$e#(OSUP;EYfWuZBU}^k?i;Rwc8Z*Dy;@d08v=H^6e3sYwG6%ntN}`| zE8u&WF4L@&JJOgcR(XVl*DuIxrbP58inI0DjU1)N*FxqFr{)Aok8Jp!>tQF6 zojjroDzd3j*XmfJ?2lA{cGARHz2qu$hNV<6-qvRs@{~Ro!e0)q0ZO0S;d`jh^l*OJ zdG#kS_;SnN{`|2J=J4=`BE{h(JqJX5s9KI zVzYe?)hF2Lu?9IxkB#s*fjLGF`sbC0&cfceMIdhiwj9b_}O)}X+!J;HH zeCiP)Cff3UBzz@5(8#)Q&<7~_A^0B3Utpzys7>segn@E(60nu1n7XXks-d^* zZ`*@D1FWH;KH{J!MzQF3dUH&_%ftF}W|Om>* zRqzH-`g{v7T!CCK`-PlmX`3%ms`FS*`HtAY{S+xB&PPpQB!F2W zF;al#RJVJUNUjT+=d5XN-t zg{jMt`A~R-6>gAX4J7SXy^DL$UEgI7}5Iyb1a7Y5v?klhas}<;u<(ZJhz)i^*lpf803d zF@c%Rd2W9u`+fV0J-_0myvtzS0E?$RBOTL?TMT!;Ink4hMRn_aEgWd4&rag6>dnvK z_kmWR(r4IUSGY=$!G~tUqBT$GxU@je$ja%wzOo$!f2_ ziAIJvKnF91Q`nM|$JAPq$L-~`UaWDTae^xa}eFO22wGB*lic?A~TVw=p%7AEtoH)bDW zi5aYAoWg>E6muGNjo;-rig|q|m`53Xn0y@S47fPzmeYTO-u!fDLY(erQwtL_z5J`Zl`ZE@lfR={w2;f19?Ejb1}Sd z%Kk;iB_?D(yHR>(ixT2k?NvoGG71|J1Yjy_xo_br>9?=;!?p`tJb~)>(#iFWD4DB%{WCkUoWlS(uXgZPRh7EA;BTdYmd14)5 zjc2ovsIM`bH3>vPD;#C(tu;l;MULP>E>LqObd2rFx!PRdq%ma902 zQUcg|Bt++N9(Syzg9x`->ahVis-C(Z{&DaWPr=&(BBJTZX06jNVK8Ni%w; zMWzo0Y;{0x-nHB;NtKgBVbPR(mmqb7E*4DSl7NrpC%Lz9%<{_ zDD@HV$LsK)h~KY9^qmSXoLU#salcp|aF|xrhtBY=PRMqhE^#x5ew=uob>^#W|q`DCK)3h^dvmwNqNv?Jm5*&=t!w| zIIpD(?QC|XeBg5a!IAQe!@13q@~P>3!b2R!G8bgb)wes?W76Ns1=dN7v*UFGdaLsA zF#OYCCs6tD61;F-&$|vDYTK|K5;>Y9t!f(4n@;RL#CE6V0-VdtWEcwJs>a*$(_f2x zZ;XMT3}yf&e>S{u>U%?_Z~J;jt_U6?mq4dgO$bY8oO>c*i%3{H`8q+ypYT=u{{p`g zybP55f4~c;+HJFw{z+KAS{hyFxRp~~^g74y^;SMhKQ#6@SiI-Zw7135=nUgH`_+t} zXzLMtJ<`rjf}aiM0j0-$c;UKhXTy5PrO|0sE5ixF2E{2rTWKzoxxn|0l;1%3s@>WR z|33H#DEa?_7p@z7M$rZWhU5)yn@iTO(jmEJE9d|uRTWuAS$?I}dw(U)j)}AELsd<( z(lu&jk3X;25CvITpSr`W&*~v1dx{YNHf_s;1cKbOUl#{r5NcSHUiz z^m-Fsxc2qGXnFIjQ)lzom4#`9;ID!#M-U9Z*^f3pXf5rQzk(NtSH9qQ=1s0JDm1f# z5ikzViACzJ|iZ+W+oj>bVn*3yFCeU8fNt6p@w?S)} zZtK&8Je4kAz<&#V07{>I@WQnpkBcfdr;l71wm%a5l~q6r&zR@YJ~mcs=4w7Q*bB!9 zob9S+*m7sS9g({jeg&uoO71!E!llc8qZ&63mybiGrd6$_i43q;>tnIz+XPyfQDDb7 zc#JFugsa9y--3S^d?00s@spYDvQB#{{0uM~ z2q)xx*X4M4J2@vX_Qqqw5j0#&9WKJCl5#c>rut647yf?mP?Vh5pA#P;XGV3UXx436 zS(YpzuR+TDk+4;H>HRM41LzNg6Y*+aPP$CL@Vcjd#H^pzzaQT#Qce+JjwL+NPhSsz z8Mrb^&d*A}ldCyEA{?pVR-|UyeXpRfU1+f1H11FrBi-n}bWz-H2#9;GVh?NX0M3lZGhx@BVv+VRQM4r;;T=+V$9w>b-ga29S z5-}I25~Rb{s!7UkB77zP2Y90y`=3C`kAWAihv{*M^sZYc=C@|s>2L~ilpgEhuLK)` z(&IXK;d)#?4%t{vsZ8p)Y*^tQYwOXB9Hocv1J-+hOrZ4W120?;)1xCTx-1)wQjcZG zQF>eh|66b)PDCg@T=_fQx`O64j$-e^rI`BK7t47Z)++oj&k=%xBc*`Lrhg3&yR5XLs@8 zHHo;#*zeGm<#2|>wYrN5LSqQlZ6~pv(&xXBSq08Mh&R1Xv0`^Q9c`CiXUb2Q^4fla zo&KBAvk*N+|KTh6>^<~TfQm;Ayl@NT{O48DUiaa~V`lNnB^9MpD_5+55%Fo#Z!=yI z=3-B@Xr)DWME}daP^Z5_7VI&;r_pB4G?A0Z%)k&IJF-u5SGi40C))7)UA~jtBja7f zez+^eF(vLK&q<7gaV&KhiF$%C-s)o0sYsa@bPpE(zcnzIaF?MEv2r?evYkFViNEUi zxc`Ms50DR3`mBT(?sd7JIbH7mJ>2wBXG~=`IqoxFap+Bsdu%V;`mxrc%U+>>u*bO0 zt=*$@YQuVt{ox#KSE4b_Z3K=rg8C7jOyg`%uNPnp*Qui-DHW$*_N{k6ZESSw_3qbPmUomzvn@K+qNN*|nc8DK&({pwALh)B zot5dpUO-e*T*{26he=V7XNY6y@v#BJbEISJ5wktB*i#=^mg5=vm2M2y-TedooX#L~ zpwk@gxq&&D_=_ad^*X1Wl1xkWGhCQpBt*^^oME192Uy%&8xXYLmq z0aW~^zzdfw_ha{$=hz%>{EjQH5e0&6xC>f!z0SB;7Y3R47(eOErS|8jUneKh@*<$( z1oKMF%E%(TeTl7aJ^BREN0i@P@Xg>8p!98l7cN%X1Nn6FFDt)=j0x4AL@mywrd`cF zKm{f=-o-8~W&kh8>V@d#FEnQwgCg%+eW|VQ*ndabm+Rqg1h)X;#P{R+cHgUqo30#T zFg4ur)XXWbsbMV3YHX@cJmI+Tk@KnAr$(w)k*aN%`t6R=Z}b;@gMta*|A~Gl)|6JS zEM8ICPQ5xkRcn&^)k$4Me(!*P0lW-UemBYMYP>}GhntRarYkAF7n{|m#Cf#OjdQhF z4y7GoOctX$g=KcWrvE3>-&qD<32K4TYYn_`UG&oqSH-A&rVJ$&tYEqQ9;`oWyf0#S za;)mx3i-`a-<{~A`jx3)GQST70;TUzc;Pzj-~Qidn^sgyuk3t!Wi)#X)B$ai=nKzK zUEyVR`mRAArSF^YAA`?;()T~`!nIG|!&Q?Js4m|i7VxMAlvOk3%+wdgy(Bu&SeGCt z2)9f9$9@&j{|5Nmz-FNIzYG5Vf&S_Z>r{PLTlKY~ay$KhM86;kTK$9;*8YQjK^ii^=kgJi?rLhHI23 zffG1K8Zo*b(=YwTJEj;MWi#8H&6+9C2xsVM!#K)4c6GkT^yE1EI710KXDJ@(9$o~vY$jHcboR)6PcJ<>;&!i7&9P6IDT8}SwE_M!c=B2uib~%rA z&sgn}{~4HYy5lrfEatj-j&o&C!^)b|9W#D_bKr%T8bESt!XRU&^Qbe$W}v+e&uIMz z7sqvSj09wXAiE4sJ~Ph5T8Yu1>l<|AXfxkl2COx&lJ5cOtn%Sn_}_pVWZH}N3~tV^D6UyX9;A@!DcDj-;VIlXcKFSNrRJOVig3SSjVMt091Aa8`|~T>%9&rq z(RH$EPb!+V$b+mU+80<3D-e}t$jr4SNeQP)$~}c}mD~#W8n7BDxohFOmpi+%TokW} z$eSEe@X8a~$w<{4Gi9M4q z`H<6gVJbf084@dO?_srzQ`0y%k=1%hnDOE$NT=KHcJ|SE|j%3oPTz&?0mj9DmFevPqrVKWZ5M&>`^ zEBW8S8{aV=2$cL@@ZHNl%gzTx&lRFC64sns#CqukIat?r@UlAfSYMWNon;Xod)(vI zz-axswjRr*9Fafg!(Rm&fYRd;d0n;d%5R%LYMn}9AB;9^)ggKFe3*ke%^2?-ZzhPN z8!+r`aBh6!X^G=o%<&gF6V^FXF2ZzAN{eY+B>Hb-jW?pkWwxJZ>*x7zj@Tpes8omw1FFS zqeAy&4ajh29c`33QpG8h+jVm}me7_lYT-64qC)v~sc1Kf8$+<`qM4Vild`O?|~mhSyE)F}{O25ZE;hyV^d?%Wl?< zd2!Q3w#>wGae?@Dd))dss9$UA)qq?Naz#2k0{;T|J5YN43tqT~r5)F2>y9 zEX3Nbzs^!DR?&?WI}pC-^i3^K?2quWer~zZ-{WKTvf;?|TC3HDa#+MXW46Khpq8A* zI$N)?KSbL9-Q>~l5+|Wetz9Fw78Ea$W{85?J|l>s zsGxXWxI!ss17WK1xwt_}ogeo~@JN&m=5W-;e;)iTD*X2Il^y9Ho~B$x6a*5?SR>U;b*B=Qi|zbQ-)E)!mr^Xi@=Mp0mQW6@{(V$Gxmo{*b#UVW z<6B*unZq6hQ7w+aoJ{n&jfI!k@(1sajH4U{KO4*gO8#1S;hvHE1s;(5Pn7(qkj60VT@C4ACPlpmnvUIZ`PD0vP^qx9R!t*KpN^*}l0>bK@5aboYC z_QAdR){oux>AWA|iFA40PbJFcjzrf`_mDUbO^RnGhu8IC1H+=kV~o+(?z>;>38{&R z3BC0IXVWF>i&C8_o?h;(k$NEAnc|0Y>KLKZM>~gmLn&@fsXLPPvXqfePNLw7PtSJ@ z7LCyo<08X+Q|FxcB7LzwUa!Uq*m47-qEG4Zqa9}%6U5M zoth7*^hkskuA6)yJ?QO-oTxg!QshE~_847qj283aM!o_xEqJZWf5HtCu8_ML{$j8J zD7n9Z7p{A`e7}ogSaq$==lNV##T+o!8QL?LjhbytH)o0@S%}Hmd3Mh;be%1~nef&4 zr{2n#2p9&G{2Snf3zgdax(eyHD+jB^iVHTo)Ra`0SJhTpy_^PPi(Mo(MHh*$+ZKtv ze(hC9K87THL3egqRFOEtDEG{hMdEs$E{D$@)B`>b%k#zIFH2*cgWOs9WV+wtocdx4 z#gVd5c!JLSnH?94Wk#!R{#*A9)Jya!dO8K8(kd8Rbl+3hq89~2*rgBMXs3^+xx)FA z13wrH2P%EW!3$SE$xa`&-o0J=lvGsKltz+A?0-%wI)U%R1I7wY#l?a!1vkm%6L0D< zX14lT)U*bv#|Gr6`uz{^FM?Nq(qp-9>rp7r=d73W7VY$yUt3&lPe?eo_%=HAdgtwi z==}e4`O&y#xF~DbGQXt^#P0q#TV(2;KW+sD^ zC_ORGnEW(%x+l%um!l^+bLmV+AciBV12^jK(c;ElW0Lt9C-~X^wY|i{V??puubW>Q zv9%@}c&{_ei*&~nSCaDtW3+3c6N}1$feDknBaAX*8uuUVeOeFRtQ$w>REgG%@A2E^ z`%n6*^u-9O76amdO5Zei;o6V4MbdZrn)2FqZK$Y@MHbK3?%@E-d{GGuk>BM_Qf?99 zD!HrR{{U_SO0Lgg%UvMn<&w+oau$(m)&D0Km&<8|ZKgG^P+-wqi*9C)fvJX77R_q4 z+SGlV^Xuwwq+`6(&7q*_oO&Keb-0)U%JTK{8pmfkdwCO`ain(^c6lAnIA@llm%%lI zj16Ei|4Q98$Q`TqO$%hQX_aj8d%Y%uR@jdAr?_4DPK|-r3RVu+7K$hW(8cSG>dRItHbWViSG~MjpmQBu zQBx%M*zqnhBl&+m{KeohpyGWkyl^kc`lU*)pN+)Zs#@l)EGZqra3i&hs9FjavnK3- zae=nk)0^?|98sSXngj9bq}<(vtG*k*gKq^)y@ur`zzgST_x;?VTuTKZw_q0CkN8P$ zWY=oJ9` z$``ReR@>phNZ|mhIxUp)ng~zHYk~g(8~{pQz-7xjUw$tSm-Bud#=EAttTdeFRjaKw z_qV$C4H3`a1KzDCL#+cRN0>(%{Y2KcNIgzL&RF6l+WlJi3&F)e>G4~5;Xao84BwIZ zbf||~@5mmihuK3V>g>0$KEz)A3`P^&)+t>hL`^x`9LaGEqS9>IZl`}Ua@2dbA3odd z()t6XM=88;)8x8|QPPj-Vbwppcl3MYi^nM+H}UD9H|x6%%e&L=&#$z8WZ9kiogVEj z6if`icw?*=Z=kW*INmtQdh3cA_31C(FMOYV27aE-);&GWIns|QVB#~^tmR#M&IkmZ^O3&(-Vo`boiddkN(xqjNg0zKgO@>5j%bjQh!m7 zw!{AwJONbxy(F)z?@#5c{1e}yc_YNT8{&-1P#?@H9AxOaPw&KZ(mcyBl6ZAbq72~) z*DU3xdn5g#5d0)C4Jf&%!dv%uQh$_{uUs;n56@M##fvLMot0K~HvQKAAc^;=&he72 z4bI_IF)R?%fpEJF=IxV3&Wys?cf$qPw zZ995gW##fhrfkrJZ<)<@$Mu}(kC= za92)D8WyY*#Dq_wIo6z^_aS?OjkZ2(kf-$71iu;F4U|5QzzerijvwAUrEPvnecFGQ zgjGx0uAeK0HxG!dt_RSGQ)&#M00XUk?W)=ezftPriH+#fAAT6f2TGr#;DuWt^%#6e zeJ$%r`ri>HicYsa0nX9(aJs=vJ9h?{;|;ccTcK%M!IO4+Y#@BqUf&M?0C)r_`LDqX zr^b0><@%*|`D69}E%_rwNpCUUcI^foLV;aof76Tb3ZAv)KTP=Q{rLp`3(x|T z{O{m}Yd>DB;w|Od{mQ}Wzu^v#+6-DS%Bo)GaRB!`x>`m*Rk74dJqqG%IU@bb;j2I` zPWu$Dix7y~SowlAoqKDEmB@rHE0pUcw)_y)g zB^2Z7k@0}=ghGF9ouj`N+n@SLhF?Tjs^4-R{6*jrpweLjym0H~_h0*Q=&+Q?4*sNq zV|gjpIm)y^nOH^GPqg{k3wC^V5}u0Bhwz_(&!mi=$LCxzfMrJ}naJQmGW<|dBtFN$ z&jlv{6`vE~h3i3lEFnpS3;C2?=UAhqt`YrxJ2H&hN_h>0r{c2%{#oz>Q1V`a7p{x) zuCmOkR78a*-f?Tq|AF?qs)*-{b~>gfN92xzp9H1>C3hygaNWM&(Nfba>+JokB6%l8 z67cdA8u5|(y;;hyCwvv}ZSePi`=!jT^D!)NNZwr59)>e=nw639f3xG)LRe$bU)0+% zDK0Gl5`l0c{Pz3tR3f&iuf-HDx95_7x!R0e@oa$%zmTvB`7Od<2EQCsMund&zZ=@O z2Vw1%^5Y16oK|fe3P*T#GW>@Lt4fC71pg*@52*b45MH>D?9aA;uOf0}Bv{*ViCEUL z&Oxr!ikw+$j)~+;=p{SdLaCAOq6zTx!6`t=9hYXyohHW>cFTEhv5q6MT&&*st6>?( znr_j90bv|#y<=;lR?h-~1W#Q25Npxck#kvmb;zPIpJ$bGSa_+JkCRM>Fka5&>QA@>!T1&+iw_7TfVvJ>}SUyX|Le^5T#ZgPe zLe^5T#ch^~VR)?FQn8_PopZ|7QnB8~MCbTnB0;g|_N=L|F^&hvg4+xZY~$Ajm_O8O zjH5&+T`T&ho!$+kr~1C%2LA}y0aSXw1}|Jk>xc5>@~Jktjy1;X2}X(@tKH=| z_G-uYYa9tzJ5sK3#EO3AId=OLd_%@xhA-s53I93x3Ml!R8Mc0P^4!ZtIY01o)`?aX z*VN>N2MYQ&n0t*)rrtmoWRod2U+*!sF(U)>v9IQKjbTpjJi{Bu(tC!{;~i(4POpn! zoVu0R+Z~@mGFF%uvP=F?x;a|UmaF|}58t%oQ-!`W$uAL~t?)mBpMZ+btV}yTr&QVB zdkA-rO`Ks-$vVI&LMN_)tMQZGg(-tq{#KJ)g z1N3LSP0)Oc_9AUc;F8U=F!%H*#~b>JEXKtZ<4(hM&VY&DiSATK7$SKvzLRQ9H5M`L zo?(oG_GdhuRX0c5-cSa)#UlJk{OcOWAn|SpSO0;Xo{glJYA5y!zL!hu4ODuLgBMPn zTdc`(^`D)dA~EwOFA?=Udww?P)&`&T4$C{kqFG|M4_ozFphP7W=kYt;o_uzBiOoJI zo8Rb0FzHK<`eqjYmDI?197HZhv< zvGFXX5oqQD#+Sk{n3q$g7jl$qL6UXiN51hlospgsj12wPh9gH5Jj?ytj?a(iTfjd= ze2(Zt{{&P46`$?!!rdju5o^yr%zDUrZ{#kqM&}dy6HdL+dAGyz7FqNO)AC+3EN`Ag zH`@1QKS8_nv2k@A*3m}tN+s}0EfyOmU8Uwjer{{*v^OORM|VoB#D}H1&FOSQO2V;+I=|_C^*;eQbOX zqut~X$x=WHj5Q}1$$H9g&oIMR&hHIkH=WP3jivDu5{I~lPG#MC5}3hnr}JOBd$@Oa zpU~*xUVEnDbjH3;G9J_^FsCtA$kStWpE*>&zm9J*I4EBi(o@|~Su2zc<*!mSp`9i*H!q+x8$^Wr&y?F z$x1I0FBBVWNnK5Q7Q8*xrELdSfMsAjNCuxyacNJ1--9*aSTF$S;LXXj?Vuhk2h%|& z_`blUHGw<9I&eA|4dTIPlU&;KU=uhGoDA}T7koI;r9BL;11rI7FaWe3jVy3CxD+e~ z6G1QV-wC7#xD%`ci@*`U0p1+XI0Co^oCT(X9B^P9*T93|YH$`950ZcZ-ag8u-3u-Q z3&BX>1iQyFR{?$vYQTID0)Fu6kuL2ea1Xc?ECv%m8u(@m>zlyc;1aMHOa|HD;Aofj z4)_bW7F2_IU^sAr_eW80fE&RoZ~_ z_-KSndk)+V)`KE20VILXL!=A12V4azK_M6p0^sv}@(yePmw?4!66ghf%Hvt^5V#SX z2TlSbfD8OLmwW=7!6l#=6oMf@2hGE&8^NvMVo(CcgB0-DFusGqufbVh5=a7{4rP8A z+yl-4hTw-VMgfiieL%}#?g76AE5US-4Gs))X|I91!Oh@&a5|U`z8gq7E~{Kon!l22 zKYwXueob{r{?Dyd@=I1M$rrESBG$pLT9daF+e#CPSJhT7E#+`h&i-67QPc8Q)l}zK zRF)K1C^6P1m=(pfCCjWQI=R96}-<1nMN{yzx0O1z(f{JeLpjg_2y z44v25x*YN{w!M*Qn$qGGJ-fBUI)b=I_p*8fBQrg^wXCvYNsn%{6z}YPA|4nNsL7Z9 zBJ8DCbP{U&TZ>mL88fP9_jYzyWp!=-d1WkeYg1?sN%|UbpCFxtQ?{a3nCa=_YLzhe z(8YCeoK6>)%POm>Lpr%Z+6K#CQd(M7YOPY~xK2{{71yj-WTzdYbUkPV)N_`hr*3qx zrV+aqU$eTn3iCzX1hk@fd8x=4>$V;!DVq#?+0&w`>dKO`&R!&LUCpxIMS_%fR)o1p z#HFUIx>eoNNmRH@k?rbYacwuji}QJ+s*^+8Eo6web}pofHM`x0&`leH5Ya$&qpNjG zH;uKpr*mDc=Dz!GK~H)FT?i2kNjFi6YHSXv3rGw$1$7?&lJYJ?Z(EDor$bnQ^`MN` zmeUP9k4=W^nHRpEuCRq0f(p4B;R$?S8Dc8y4NT*j? zkuPd4s{Qt6O`nPn##Y zNlSTecXxGKfhjG!duiL;XGNtOk-S}9m2DLsrA75rdhqImU%SOvS{O4b-}XAwq_&!` zg>!^C!^Pd)VjVQs%{}F{mBroMQr7(~Y-+X+6X+%+YLxO7EL82J6h>lJ-u*3Qo!mlK zWLbXk;?CMv>oU4h&4#-fhrXuKchz*(k+p7GwNfmP>q?iZ%GD!6o!qc^RTLw=I zSi#(hFm=f)+pSnljtX?53gCHxo1^v+1PwRI=PR$5M7eaud)uVV=XKTqoU8Y zw7POtRaZAvuU;XHjCOg;Dokm1+FV(pswyixeT{^%(@It}btR%J9jp!p9SPAF=_~`8 zNDnu?(M0>gl8P?hXLaWiN^Va=EU8*m zzNDgZbx-d7*8w@ii%8{8@=57@&XStSHp$j;2~@XtQM}bHwbjKXrHhM8mUkoB zy05!?Ixnb79K%Lb2Hk{HQ@g6uIy)SY^*P>cK;1{oI!C3uaLSjSy{dFoXKzthCyqNW zuIQ>y(C*Hf@}LMI=>59%;@yIO|r6rwJkm@GskL)IGdNZws(=+sOKMg#bVHNhT@>Y=-QUIm ze%*>KD__GmRi|SIDiU3d=*Vhz1)I(~?Q*JcXhG~MwtMZnyQ74Te|7f)ONvXDbyv5n zSX^Gq5mentq+nH-ciM{zN3kdANs2FDRMtiRM1@vSMp^B)0Vyw|q3K5bWfqi2QN2wl~phj zFZ(84_XbL6Yr2!Vw34FOZC;je8%3!5z!uSP6_<$fP42MVG)uv;2XloIDYh?7tNv*q|Hwg zelTs6!WBgpRuwdsy}HcL)-Om|q%H@E(1`MX=+w|wsL0^5mL2v;Pc)T)`v zxBshczow;^#THn!q2?5MLF^jQH0vQqy|7V=L#*YLoEZ6AUJhTcd!pfqx=r;@)NPbE zOw+X)GjvTor}a9vm#!7|Iv;AeWx6)@tjP7oUf*)%K(AJHJ+oJ)uJy^xhFUIpEor$u z{lDq_y&xREscZ8<_;*Ox@wa{*IZD661YJ7^sOJkjr+akmOwXB6 z>wd4UZ360g5wWcR>bHh&{i5`%^Km~=*9*CJUexs>uC0x_uEk<}6{!1*kh>PB-;Jd6 zk3jtnZJAF@7HwH1TiDzDjZ=+SUf+ej4O^&jW}z$OMXphMOl9Fsx{|ujLN?$Rn8H)BXq4{#G}x*t|95aN#tbG zPtdAuPi$*{{X@rBl#;sP-%{@P4sVsEKN3dWmY2!#rY&zm-`n!O%>Br9E$c{fY<$)% z=$x#1D)+)SG;jT$9BSP5A0)SI+k1$7Eq)WJ+Pvi;As203D|0jaxTay>U)SQ?v!Qd` z^X&RD>T*$91tnxrH3r+JAt!-h%&M$*b!j>bMeF&sE|JhDPY41`dn$tdmwxsP9d`7FR zLo5M_x|RThe5?X%6D4n5gKX#b=kk9o_iFlYYzhP%)|KaN?twRMD6jZte0Ex_ex$}uOq$wBGar9 z|AqGHm#k~g0}*}`{+p5yKTmqxBGY6OzCg784YUH^0P(+8e1YieSr|a2?Fq&Ob!})c z4_X#1hbs3M?JwMand36TEl)Z-N!Q-8a!FmkB>hrCOwUQDHOkA$gZ@5rb13q>=5iAL zyRLVkaqc+k#}7RpQU)R}PW!1f4jID5!^cbBzGH)VIXSi?^W9*!>%Cwzntd4j7+Q5l z^&R4wMcSlbb9O;+K`>c6;@~J+yEzBvK_|6NvRcZ&Y8k;ZvwH`}1$%3bJZGMv`SSdE z4y`xJnnFZIA4*#=V;D4)F&jLff?T;EL>C!7M_`4jvWE)Qmjr*lOOqSYnlx7qnv~Lp#(vR3BT@ zuCFh&?}r*K(BUUx>-xwpSE9w+=b))n&s z%}h6;uJiyjK0N~(OkWMHOWz9Z$`zc&R}2t$72%glekFdT%{n_}|3~K6})`8H;tuw4zyK@af zU+dZ|AmkU~mrK41|8mK9{xs?T`CRLA!MMV%ZtL_~-M@d?^V+}c=NtZF`<)8v?1Fq= zd-#_4ln&x{Og|mW%7%j|7FhyxBjx{o4@>J&li1ln9s}d zU-!?$d|sBHf?dDt`R1<=@AVuWdluV_J!5qx!zJU9|*N1S{F-+rx? zt-5x0>n+euT--5nw7_u{(6i%y2fZ=wG3buCm!N--dmZ{_+*{C&-7I|;z2+KM4gJ{F zajUuS+_-b0x24@q@Bge|Wl-0K^c&i*v*%qQH=5@}#a0{j;2iFr`_E0#y({+dZMg4E zXveM~FpUw|#=tYs2Q&V{H{PQek3t{Z`p{Ngdt~b)(7$ed4BD}q=a|Qr@S=pG1YLU| z?Ll-d4VI$wk`YTt%ZAnlQm&=-$IjDFtDB^0!O2+go}y{zP16dpW@v>^AEWiJomF>z z`mw>sb{sc&`O3L_jg$^6sG=6T+y>t|yz<*D-`m5j|CRi@V>?u@<3x-4Z?n|DZujBo z&tQP%_|&jmteo%(NIzcs41;y(#P?e*5SJ&DlVT1<%tieJKRmY7pAlQoVGw*HdE|GJ z4}Xm0$Kp?yd?9{?rKXE%zVCf>#{Z=WmxZF zy)nw&dkwTXx0Mm(f;%?x{^uRcS7ZNCN;Jej8_$SR{PWP4<6nk0#qWb2h;M~zxdV89 zQ0^dTF0P{#2oRb*k6_?uOTG@jRq`#&GqlD<<{F~J!y4MII}AH*?=-Ygf3f)j{N4}S zd=UTEzsq~tKCBfiCw{=nKm4hZ|8-^L`?1Y8O1tO9&uoCjZ0$6#2K){@2wn%@0$y!v zaAq$4igrnGt@C+OzRCGHw8i-ywDjj(`=>!??4JjXINk5? zGaurQg$Dfb&_w?@=+XXZ&>8-j(AoZZ&;|YyXqkU4G|ENQc7c6y)N={@5}--@lA+oA zvY|Qqa-jY8^@k4HHv}4S&*;zThW5Pv0`x`wCFs}sx6r!m%d#2U%Kja+A^T3~pR=E) zE&4Y5Tlk0zIlYa(c}HmV=0Y1`@Vd>FV9YmdS1+tHc*~E+NNo@;@>9AR?R<{j|M`fn2QYpQBUOH zua)&0KeYy@UH%&<9bWqvblJ}rl-Rxq^XIr+#yb}}cR01=DFIh{e9-4f2&M!@&Sf(G zJ1%cL`B#va6?#Vxg&IOt+K7WA$;DI1%NUuLT}wN3KG7L+QX1TC`d#Ds&(G_3DXDie zf;r!*TeAXL%nCfotiXq!*Er-dCis&(HW)`-?0JZy;1c*Ut4G*+aBu5AZC~qtSqfEX z9r${8&d|l5gJb-F$?SyNKI^$P zxP$Z=yZOLR&zx9(&}{v^*4+95>GMhJo-R`9$z7~U078%b_$hDL{Am1nlCQ+ST=HA+ zpO$>fm%8>fP-)O%92moP%5iKDzJR#jhd)~KN8*o_`~-XfanB@tfv&<|=f9Zt@Dl&^ z(3|}CLI3RkEA(;yNX{}uEb|98+%U95vqSZ8c3 zG!PpPO^h839U6NS^yt`W&>68}WyInWbhPlBEjdm6MTwgg%hTM1ngyB2z=>#Ox8 zeuMbawQc{ZZfV(X#T z#cqafjr}w9!PrNjkHtO%eJ*w<^u^ehq5q8C1${5}J!o_6N6RHW9C3lia8m2M$AI!qL>nBSz{NzmoDP4!@Gkw&VCao#!MvjPPS5YN6ZfRH)7s^ zJ{9{ErNS;V6a5pZEl>8J41LA_3iN%eE{zSw2Gx7?ht^Huw?Owfc;lQtA2iMv4^8q7 zh7R?Gpd)=pKu7z=K*#!yf==*FfKK#Hfga@?}>Q?x+CT(=yNeUp)ba~3~h>Og4(INCuSe~ zMEdRmLZ6fI1q8pHxkCZLKaMXT_M2~ZvwxA-Wb>fy)|$f^iP35LGKLQ3Edjl2E9A*2=uRk$D#H(*>i#C z;CBXIhBgJ>guWAaAKH;C*Umz}d_A8!a26J|b#0lk40?-k3-o^De(1N3Zy9Yl$vla^ z{3+%s(8awMGkS4-@9Uwr_r4vvx%XyhZlByf)WLoJ20c4?c91opIkR&3Y8-z4@Q&qc zj!MG5#JrSHk9D2MC}WkY3VOWv1j_yP%pIA;A?wvFU3)#N8Tw(?r_ldo{RjG8)_2e! zv-Uz8d;b^t`+K)S?e)z~!4~8X4dv2u+!(qEYOk&g9?Yd}R&J}dmH0o(AJUA6iEX3t zB(&N17;3MGKF=Xmz7Fqw7Gc}tHox!v1iT%?wZXN>sSn-^t;$(TY@7Oj)?dW=0^)r0 z9k(#HQ*~$6ooIUJUg#Oy7Hx~j*IXvCb-7}oepe>6kE;(f=$Ztb?3xWd$yEtG+w~6g zJy$EV(7l$m0}Y-B=zTrpc^vw>=L6_R9MK)xtIQA1hyE(~E9jNME1`*f6Z@*K&rH5# zcu(b*OaXjWD2vn%;n0z<8d`4oRdWh5qrX#CE_CiwEcrkXIMivK{9oPK@l)!m?RPHO zzS5cOwxM+Vt4H#6!{IPZr_<%a9=^xx_4#6AVq^XOKp-wIK0YBK5toEZ#--p=acQ`8 zTm~*vx?a*{N!MGtKJ8p~JJ(GD455cGO1nTCAGafLbllCUi`+AU7Y4^_*95)&er3ck z@}I4h4_YWCAM67xWC4>wuCDaSr z$Lc9h{3-q5TiO`<%Z4`d;AsaFwKEQ$3GZz^x^WPLn^BkGRFleeetc|3&| z>J~ztS^qUWe<$mI1%9i3O+1CQ;_BfkY!l~Y-HUb4jd%*HSi``pTa$0sJQ!TuxVQ#u zTHF@TUx(tpcozE?4}|Phl33D^^)DG*qDMP!XqjuRc?>D?K=oKSjbC&FA14`X!*NK z_vT|{M7kjUR>rzqcg*2AZEXS-gZJl#?0BQd^n z>;l;xV;>43$BgY6<5lXYx9@#>>hpAxoujYJi3H9cIH~=kILTv~8#X)9?Q&tBK62lD zKUNog`>og_%^NyzuO?o-ysmobeX8J*+iq-J$%)tB+@N_uF9f|2q_14Ra(v}RmHSm0 zP{kXw1hOJV*BbmpzmY>n_B^)o*t^HJ9@}iDzZ*e^Nc>Cksk2}8dbk=m% zcIpewg^`8z3L6$SD{N8Nv9MENm%^079)*1h`xOo-98{QE_-NtC!f}O@3a1oKE1X~W zc41Co{^bHp>M-3%zJZH(o7S@pxW^x|ZRlaz&UQe)=6wS-m$6Dq=d$k=)FCJNO-22@ zkN+Ul#?$;Kfky>4gb(#!m7haxl8++)Dm2afs$sl&vKf7|=6T>LmcbVMr!A?qzR(V- zwH!5ypK6tWKVA2wx_Ae~EQxG3HTN-*DZ;L95)TM28~sRw}zM1 z49@Egt!^iyzS6$<0hjvPUEctAP$%l-9zZ`K2Lg>kt_-Xvua2@rPs+91RvaqVp7QaLa_zOQ9V^d{m-0!qJ*Z<4`Zj~Qf~N%a0`C*l2fSakdG3tFKAa2(~)(hDKvWJkden^Qy$exfrh3o~{ zOUT}ky@l)p*+@QZ`E90-}udnm@7hY~UGAx$?9ZNmw= ziQv!Zrhre=O#`2WdK^5Dx;fzKy7}M>bqm2?(5(i4OLrRlvJUI?u{zbG@Z=AyJ_P)6 zrHz@Vv@V&cstLb>sXDmX)E>N}sVjJjsW*6EQ(y4@rvBgqO#{IPo2G!aYz=6NN9=r}az z=1U>F&TmSoQaTR10J5AH<2nb)bv_NvFK7;;V>(gq{1HSljn(K2B02Sm((&M~zS%?Q z0WJY4`F})y5Xt2wKE65C@GsPSFB@)v=X)OT#4q7J8m0Jo?@Qp1`;7LX9_mZrkNb}H zh3tC?oO=#<&+Oy=qy1r5JQgVdeNlJjJul|K`Y7pb#s_il78{p>^SNVu6#N6qtd)Y$ zFEOIY?lM~?CA@Dq{$1f8g4>k2kSP)Lt<4$rGjL=+3pU$38?rK!@^bbK$b3E>pB2eR zX_xnn|4!RQQEvU6$NYPbwN~lP*{if~cnNe-TZq=yc=YKQFfYYs_<@}>oX78e&GR?> z?l(Qdyv(eYS3NI18{_>zz;XTFfLq2U+Ao6JhCGSZ&!mVWn#mDU@LS0Kpykyg*$UAg zG|e0!dV+ZG&*<0&artN=#am-og3>}tw63%cWp7w-SqEWMA8#jJfBSp=jkj;VO|7MA z8RJBsQE;XSWmsBfdS-~|IXaB?Q!v_3-{y=GEhpZWlveUaNgP|{(yLo~4^3uE&B$7{ zYS*q)r*7T4_3G8D9~Bi%DMm>&Xedre4H`7CTH_P$q=t7=qehL9now$5nws57&6U(b zl@e7ciBikb)ap)3E;rfAORY;&n|maA3p5(IkKsH9QBR9RlBwTCtxG#?qh6VNZCB@) z`_aDCr*psi-|P75^U3qlxv58qT7c;4VCd$MogB;u9wR^Ik6!3NbaYf=LFnwLg6@uL zEEsFBhQikz&LUWKRs$m{%*?`SvPf1-=>n;XHSg-PC>G6PFfJtyZ3iohX9;MbH$ulq z6V?=+BhAs8NMuRyIJIKQ%*KYWq3lui7#oJ!(8JjXMm^3W*^_J(dy0)l=gAm0mW^ZM z*#!19n~3pUlTnxK&jz61X%J=$rn1(o4QtEVvG$l#-2rRvKFB(;C`%W3u^wXG& zJs&VSP~}eU?3kKC7wdWiP*HuGG4C#*7*1APKYXB-qoj#o;z7yQJs4 zO*n3P>51G(Mmh`5lb-IJk zXUxx;QDZhQ1P`&;EcIAxOFPt)I$IW7+OroeFGF5tSq|>7WLR|UJ{2FTw;o(BJ*_RiWq?0W5z+Nev_$*W{%F2Yi=wD|T56OL}pNDird;O6g-ZcaWs`KyI}7Um}} zJWlZi14m$ivvfl{pht;+nPHy2Dkn7p*^W^#A2Rlz%b}acjzm*3qXHF#h z1e@k<4gWIPF{9ZZKX>>#+4xg}v&ZmnlM4)=j+p(-spO0nCz!`hXL3NnD>dTtPA7l< zOmYX^mNUu2EsmQTa=%Yrpd9aPa-)^6*O@WvT=Hk>9bRBhoKJql^Pv-_&OaoNOWSeW zyWWN5gIZSYJXRdsXiT~NdBx7ri|G=j5J_({HY5busx>uR5cW zJ$^}k^0(yNrTc$L9{0r14SUlIlY1HtFL1WMB0 zy$L7=1f7poa-54q7_o0m1Yy1RS8t=SOphZGhRhifLKr-7{1NJ~Yg29gVnVte!k@cu zsX=&g_d^$H#MFoetG5&4GM5lO(5LWUgzb z121)461di?wW1}UL`@3F2+TmwYsOXZKa@C2Pb<-q4rLui?--A(vp@SlHd<3kJc`RX zzvgJz&$&P6YS_cY5943ftGG9~rUV}rP!a%cDlvf%DH-x7|FT|aGxP@0|F8qTb4L)# zJAgZd+#2nrwxZ3n2e?#3$QlozF&}y*{7#=zZ(^#``w%9ppR9_eJ03zAJqX`0D-q{VMs@ z_iOL>pkHslS$@y^z37+ix6yBp-vPf$3+Nd5df@iJgMoXE4+ixP>Wg0JbwPPSJA=Lms#Mut%|Ccl z@R(pz=-{wFBKny6nFg2!nKqgBn7%RnW?Ez}i98V9AZBn(o!HFS_hUbZ&5PX^dpP!s z*i*5~;%wGM@uq~5g!eNKWtU{v&25m|w5VlKa#5S2_C-C4hZj#M{-LDwZrLq-+^S>H zzc+rh^hp1INa|-zdylXEXYaOq?5b?0cjW(MqIdfJq|T^|_dxx7Bu>pJqQk2k_aa`2=(1KE>RG&mjG(xq{DC ze16rm*Dcj8(XH3LqT8f!9V|?C1?&HW^$5Mc!AJJWdmVq1&tQ>H_RR;D7x%%2a!HP6_(q38 zBx70(^8+a|=_0v~={$$;A!8?fh-=v@uBRc&RvEKu9AqLoPCk%`o!L%luR5Ds3pChvnfyq~8Z_;sZ|&m%PQIFr0?-%p8| z=oRRNesBN4AaGvWAEMOrM=ACEpR4_X=a<*^j|HE=^ZQlsSK!(Z54;1s+|>LBikd$? z-+x~7Zynbf^?!|0|1VbR|Nf%>PZ3t{uKDkCsrjE$VnDjq|5KFu|06E-f4>sHJFS4Q zl5ka9;IWd&?z9NFf8p*?0)Ost;A05x_B-%V1?QDf1#;d3jV<6l2tLB#ab<)-d7cOw zbKvTU;NuVY40YFtc4d7N6yvQTzKJyRc#O-LP-X-JpY=Y^0#9T)BN#lbK04Q#;TX{n zuerx)2JQjjGv@iohWqn|{MGqsVaHIOgXq8e5bzNp)7YQkLY@I!F67O?4~6^@a65?V zq%$$TR|$D5@Tiarfu1M$zBPe~Lhc0|E#&#Y zcZ9qP_?3{q0iG7}Ent-|_;IQM!-d=g_>hoOfIWqr222<7eBdG>=KyyJc{lKYkUs^| zJip$R7>fkD&iBKuDJPL1_`2c&zO49uoh5p2ObA4eHcH15z0X0&9*RZpi;gvnwZk)u zJk80jY}NZsfZgC34U67?B7Oo7C8yp$60+heF7Z(E8@z|pUP^vXCBKIc&CN0RyhL{2 zdEkmax!9oO_cUNI6EpaJ1n%WQeL9|AwZRoX^DR#$kC&3iQ_174&d z@w68|f=_)qjyKIlQ~c7Gy}ZLAdntK*c^?1Ol*fNL*_E7%*V^gjHyRdiCBH8}Z@^Ai z{B+dT@lx{pDrZ+b+xfm;)nWJaZ%TPQsBg(j$?vb^_YCMtc2Bwz#rtiC;F|P*aegSC z?@;lqHv)DQ@(AE`A+G?w0iyrOD&RXHy7mlUwvcmxYe4u>*?YiELM{OQC}chU4<6#b z;R*B+vOlnjkgEYBgxn0+T*!&QRzkJ`+X?vrU?&i@`#J+tg#Ah2Y#}><9}4*x@E0L_ z;eTZj|FI-sPa&rP=LtCrm@nirz?(vjz<;KZ`2X|*J|*PEz$_tu0%Z6VPHz9WiJ}l%%fJBt1H;{T$=>5~filzk**w3s}RdnX8%cyODdwq=pEth% zUSR$P{IvNr_&M`=@Sn|>z_k`F%56`JC%BKLGI&)>Rq#+tb?{o2THy68^}%B-vEU6X z@!$8mkxgW1smO@@(Sp~k@@+SD(mUqB0WEni$@-FyV%R2DQmJh(USq_31 zSdM@nwHyUMZuuJgTg$iLXD#Qzy&`=h5zi%Z6Zi*_AAlD`7J#3LJOl2iy&8qUd$l)% zZ>yaTzPI*1@K0)g3VyiuQSdXh&w!t;eHQ$O+84n+>KN+aF4eJtx2e+xJhjfF;G^n1 z1-_^5-nyt~VRX9&2d@DIS8pVLr2AMDYm7NhL|B1GXw@b*CnX zAFI5i!JP)t^FnPUY9CQKKyj6+eRKgYL24f*gUqnI&V8cz>(oXX13S&0{9Uw_Xg1!x z+Dadx-Ly@#e_h*6HneeNU-Wp$6F_ur)GvKN$kZqOHHiEf-vV9xrCW-2G4(@JAM~5p znfjr-f#^8Yh8hT>cl%!8&Z_A9fK2Tv*M8}?)p-6?po~+m?xU9RTPQ|mMcPx;XWa(p zqJHZ{m-ZC(SNHD@9}C(~GS=dtAMtJg(KY{R!fyvBvyx8({O@o1|JHBm*o7Y+N!O0N zXQjAS*cE3S>=Nzgdn@_&C>;L_fwoorILv5MEaux?_?EkLz8*$uaap`PxG&G2$}!!q zzoI(?+Iw(aB3r=EXHFOA#druxPrT1{>k^Lg`IYEc%k3>h$F;=to!nkiISOMEh5DZh zc!z0;aD_8~Ye8|4*8$gq=zD(v+#=){ysu_}dcnQ{xCumg@_@3hF9z?fIPo4!05%jd z_4_$N)bcnDJR|H{^!3Rx=rmU}S@Z$62HtBNIgK4BFDSJeXxw;Xyc0i%+yvMZMAv2m zwia@G;9Af~*w+Eq3;Tz_k3e)EwgGnt`%WOuM=gYXEpQ!(j!Ci4KN9i|pcU`gv9QMj z6U4hW5tt<8R=_o&r;z78;QPW({gCEh)RADf0PBFrC(!`!b$4Rrp$uk5zu+;bKb9&9FQD`HCS zp+pH`mf9B7twrsM*Q>h1(oM_>Spa#lr8p8tt5pZHDQvYmfv48uqesR?qmL{474X-i zKLp<%y&wFO=p*14qc4H8xOQ=Zvds+?Pa`r`2$Vt{@a6Ze7&*Ch?s70JN zepNjFEAiiho0Zun(-ICRVBC4bl7_H%E$NEmEA!FPmHBAatmawxKV`>dqwb~51M8pL zKNnAjGP}cA9E#eKRrIjYXqFMhBf(3GOTaZHX4Ib&F^dh)fD+S)&lTe{*qut`lnW(= z*m|SncDXezSO1Gm^Vj?@t?|T^7jMpWO!WUYAB~K!UXk(Lu6~^R9qTQ9Ks44{`hd#B z<-_wWWBj=r_wCM4Vv znv9w98RRd#bv`kOk3hb)nLayw5?P*4KI8*FpZaLoXFgirCQOGo4vEa>+rih9b@c7* zt7Bad)4><<2=aVUBQ6t_;4@edM!!u5lswBI7b_U2a?fd2{fN zU@w*zya(mMzTo}fk)d_alU!e{+z=1BVQ4dOn!${|kg(oiS~eu?QSisYMumB^r^3d< zt`Bb<9?ufPTZU^{tMJws`O`MM9r%p!)!`thHWpB;)U>{{~&(^XX+4NZ3qQyoXv zXILfV2a&xlFhR(6Ak}loPW2qB-;hjon?|DE(iBKUc3P)~h~!hi3qoe7lepGx+|_5g zARq1PIv0-WHF7Q-)oWxOrY&Tu$54K%%TOJKWU8mQuFXRA60&~-lBaAhI(j%1aQ*Uce9` zS0tukhab_`1)_Z`5*t4Qbsmf|#f(cWo1uT+!&mcyM}Wc30uA384znK(w+&TTvEg^m z>+Gg?n(xz^tG?Iq#<=M_&2KjA=0Dj#ifICM_(xX`tQv?RlYzmI!vammKpUpAhvvuDwu9-^}tz`ZQq;8iTu zELs+9sbTSCCQBqNwNZ!BVx^fD7C)9~>0}9HT`asNGvAWP7Fb@f_^?;q_7G9u(EDZj zgO1~9CoETCXOW($|M*3kz-va<1CNe;7JN$NGVqO&UxS~CRM(MKD6u)1(l@k4=^NTr z`w#T~Fr}9#tX*R}N4AZq}t zj5)6UtcjIsS*?^>*5ddV;}K8ArDnyWTty{xNI)NRLTZAM4M~^=d49rL@O%*iy0pf{ zSEj3{to+y{t0~@Q&9f%vw9-z>nT)s7?b~Nde$ZSf`32sS!jfB<({@|bm-zfmIa~8P zdM-6_8ZArEGy!j}=>XnIGYNdMW(xRp%?u4@w`t};o~xM$K3_xQSYFV)2>z1hW$;%u zuY<49tOQ?$s0-8!l!2U?nr!ejn)krp*Q^6yui1dDn=~Il-lEy2(JNz&@H}E{5o)X$ zRfG|cny<0-J53=tjV?mprsj9Ze`u~lzNtyjYFP_yB5M6DwXMKgYum!oPWu4lj@pMH zx7VfVqS;v8(>gt7=grZ1-kFj2f=0Sh1BIf1g>QGD7oz!`=uXKg5U(@{oKgbQ; zP1tYi8o=9;s<-R$t@ZifJM{;_3-oawTEb0CF=^GB}^v*Vi=Iq-7&aqhU$EE7tfH(>B=mBjPwpY-LX01=B^y*Olnwbu3X9 zJw_fS;GZ|s!eTIkBId6>V;OkO%(zTE51CJaPtKeIJ~eX=_=3#m!53#P0e>|!2Rv8I zz}=XM@;}p3GO~9~Wxg$5b#4=%IlKwu&7zo7%oZ-eQ>Z~iA}vNvH3e^>=?LCgGZFk5 z%~bGdh~|O1hh{e9bj?CMH%m0HXmo6;W*O{nXjVghOY;u4W@+Blc(ApajmWcE^C9fp zHF>bpI5yl(j9){%B8*%^EOgB`uz#z$1WqH^P^N2cV6P&L3C~cZwjp?uHd(7{yRIQ#3(GG+BIASSj*}t?;V(Vz_7|3I_6L5qn+L_>U zwF_Zif=Elg>U(QbG@>%IX066-7? zW{47*={H>wo>8lQFrLmK`ssKg7wGfAcj*s-A4cqH)T}(_phuan+sNZkPp&?tI_A{Y zcm>bp@*1ma7}#5weU1JDlP8`kqcZ!{Y^n>{YHA8@Q|6#{$Lv!rOEnFLB~6)ey4JJ~ z@(xphDTp00IZc7=wCS8lk9pd&EKS4;s6%3g#pv1NF;C(N8yE95p1kQX-$T9_QwV+) zlZoKF6tS#hV-2iz#wa{_(=(QXM`kv_v(+$jH25=_&w)?Fd~YpVnE7I+2YV^=wM;!* znwbsDCd~cTvL3ljhxb4CEofnpc-z%xb-|<1 zbE(Cgx)$gSOvGFYJ^H=|U?v_#;V>Z92CeLuhyJWQ?Oa_ykE5FY%BpJfJn}u7vX4FX zdg$0yCBnJ4!AI%Y@&^w`G%+1|ww^Fxq_1HVEXNS*2&2K2bx{8(GluIiZ-Zu-cbc~^ zyh_*n^}22W{Q`Vh{{VepHuF$Ma#abO9XN&+xU3q{$=D68ks@Pi)_HQ%EV)y!>m!Dh4Bn_0{} z#z-?WdWp=fz+0Q!f_E@?2k&9-Y1Xn{O4N}XF}Ls>6e}yzreW&hVpMYsaURSw&I>(Z zzHtGF#vB+|4RT0aD0p~W4OmQZQE|R3TA5Q~jcX2jQd}~4>$tXvBZNLQ>voM+iCfYV zF}Qay*Rf{fGNxwuvMb75lkqNdO|EC%MD6TWR$O)h=A8`Awz8ednz(#5T)rCWcV)() z8H;N_T&cJk`olttt;NA2BFclsU0`t?n>JYSLXIeYqFBq&hgR|`BGBqe&>yQrp!LC= z6)g)a2}9I_aLioMGc$aY5tzU77-smCMhq|ef|SoE+7TE-*Z^FPALRYA6hCw@dS)Xq z-*Pppg(o!^&nG72@b}FIeQALTrX0^6NTf~8sA`%zsAWDC5 zQw{nsKxntHX24`2PX^8t@P{bA-$;qrD8G z{8r#gLUsV(6Y@G>o{)C}4-5GS@HZhFe?{LuNI4F0q>yQSzcoTW57b`ad5pkBA=`i* zg`5KHE@XBU?K+V19k0P3_B)rIz>7k@4E$ZlXbQ4%Aj)qC9uqRVjyF4q>_%V*A*TTQ z3ON-xSICQj?+V#?1CcmEw67UhSIAaiLlBKeYXod1>^5L$A*TQb3E2*OQONl~BISEw ze@gD#Kh*MRrnGz>{L_}t^O_}S;k=?*inhu!4L#ds+dnxtPA*zO+A^)6t(xtqTkb$x z2%}@r{?V0b|6E4D7u=O>U7Szp5Yi<)=yb?VtRf!LjrnIJb3@yH9uWVWI@n@-ue>MwoF413y z5BlHm!PqQByoA46`w&_fDZ1X^19d~e$Ll75^SHXR6wmBT{amzO`+D@nFZ`m%YVfx_ zwu9$+*ag1ZV>ftb!^5b>_BQkZKV@)&^Y|@487@M$dUo>Eunf<&;6E!7T|&G< z@h<<~s~9}VI|)9TuHIe2yL&$ZKE`_t_%?5vFLluSAUKb3-BpQdz0GGE-v0-cX!S|H zNxs-uiEMsQi5A^eSy5n{-!?zwQR23D_3sKF3SZBlLqL}Rc#8ra0^c9-8F)xwC~6^% z0~>=k4QvYDJg_-9_qognoCSGK;9T&%fqTK58k-uC$JhdVuJL*BMaD(o%Z$sx4+I|# zM!&eS9({9VCF}`e)$3_txaVQp!5f7)LQT4z;xQQ+J`QqDcrJJo#7{&Sr^K--a1&9P z$G6#C{V@JjzbVm`Z!6K2x0|-(x&HImq?clT#WUL=t^sNuQA+IorOGPfw-gWZ=#0@B z7%`bK1$-JJ-pDA)mot8a94vgt>3Ax6#N^#syR-1$%K8;NTJa;nHi=Xdb_O0?yRxxeJ%eO^?fNW;v^I$L~Xo=x#AyZV&Xu~MmS z@&8kuV&{o}f4vb}tN7ookCYkjdig)QZt}mmKEi7yrMwnm{dgjVN-Mm_c`RcdMdeMF z0ZW!LB4-W!Q|QrGVuJD*$2_`9#UdU5t{Zd5vqfvd8twTiosC;;ZZ2RMsK+ z)hEq&8oR2*>7VA;&A)(6_D>Gj`!{&Jz7Dp94%2*hm&a?nDG$A$`F|Rh`R+I}a!ii~ z<$ihIvJlv7l;bV4p|-%I&vYu|Gg}P%ix%$v;(jl8UM}vx1CD&LvJUTXynBzK@ z=$7kPqGM&}c+uPxs=w3x6q=ht@|!>+l4-6A%~K(n=Bl{PQE{CIMsvX^56uVrSjaRF z?61sMq4{AInXf`~R_I(bZ$-{mq4{KT9+>N#6ZM=hIsZgGCrr*oQO^mJ^HS7v!sHwk z^_(!83r5%GI!5Qe^HBIb`A?XKLTe*A(YE^@ztLYE%c5Sth34O9;5ak~pT@a_p%J42 z()e9^257v?145n#bRF*^=jyA+ySUEVr!g-y7jHVyb?i$%bUME49DW)H<2v?*#=NXX z9va^(=kvRceW7{%G`1K1F=c$OyKyjb&cAwGFU0_$K7--F@?t{M_!v3=pT@*|45DjR zkBP~z%I)egF|OlaWLy9m2P5MGsK>#`7y<6a!MMf_a5pA~VhSt)(RHpwUzi*pLt}a6 z+F7n+c`FiMpv~uKuYl;741HBiM1NHx@JS(00L}u@*y82DRl>d+_`ZJz1BlKMse-TqLTO~#2a*Y&aZ3QTLu=?mI}w!%JTb!VfpZc=AMZv%Re41>Y>8d4{e z6_ZXI&cgD8;R5(ChF`!dc~(O2kkvE!PES!auV63u{JbK;YkSoNukRHDe$49>`1f8v zf?xL1p?9bS#slM9x{L(w>D?Qaq27;zPZy(tcS9~aDwtMMJfp0k$X8q|yMkI5l!$x< zwKShGkS8c>r}4EFca&K-@iS~aqpX<7SLSO~X4Sne=%M1P?hRGe+neD#1D3MuobeIG zv~C=xgrn!GRhcz1yTHQN$Q-JyjyYY7GmQtZlXp@<2YiKbCHUaVgHav_ z1y@E%nGoC%{Ndmp;A4Zwfp1pEEzb^_69OMiNH(}xj9#X3%fVscVKi=e5crU=@!%|6 zkG{3W;cda~;WNNjhi8MY34a&-hwxv)Ybm3VuPF0DeyDy8eQTSQ5s7>y`0*LfW}qBZ z)`O44_+%W%Wqk6UtUa*Q$&Si~FC+V5aC`Pl@QvAd;PrEwS~NgdIqCPX6bsNe|Emd^Z3`% zit4nUx&bj_Y8d=Ijp%pn>bcG{AFBs3uUIduSAQ>x3gf`)WXHS~dehpYFJZM&T5FV6 z8l`^+tujh08-9cTg|f0JRw1M{2rFZy!6d9ONb3vI>Vovo=!-Q4X+^>5SW9#p`eSMB zP+B>Z)(urw4aEwTv_55JtVKyHQPMh;v%>yDl}T8wa~t}3>Dm7dPyTsYjT5WE zx5WDIwE8=({XPRL-7dr0wzRS>^#dQq>WdVMMOnob&v!DS<4nhDe{-?QAFc8CGFI}- z!PV6ZjQ^Gw(AV#HYa6H7Et^IizA8hs9XGVGCAl*dJ82GOf@+ z>od^m3^dk|Mt89)E2=rFT}LSAD#2z%)3o7vPQ}w~M?W#ec%jv1ScrcJ#dtA?OboGy zK7Z7fo}TXhzd^ z%w(c@ObmXI8!>e$hIyp~I z+6mx$7`kTL|-sW6GF0FGxt6Z4jH%UXUGezU4^=WB! zT3VZy-57No)*53)wZ6n!0@!U5V$91-fgiZN|37 zIOYey9U{MLTde`wWbq(6FU?(`*lW}dqxKukS)iCD)PDOOMAKT&0$tm18oc9aUuwhI zK$M5tW97BOnxWm5EZSZao2{LYscp6aGz$A}1a1-bt-w4G&3ViRQtURmHfq1EM_cU@ zKP!q=9WN;`9{a2HXhA$pt+y#0@s45O}P#z=RQ!| zkJ^2Y!(Ibu0?~150&5GoE>N}$t?&c6&W~sbo$^!rklKblAio666!sk8S|P6oZV>V& z;ASDaYdgAYFAhIa+Ftx$*G5#a2ZH3R5kXuMMj8ruu7=x0bc`?g+W7 zcXw|+d$>&fb(?o0+o`Mse$e}jcUAVix5lRi)1o|X!CIHI>TjBliH$+ItY_1GX86F9 z>a)|wgY6P^RvJBX(C3T~j^m^8t${V7lQG+^wNhuLve}!-dTPFJD|Qg2ZbQ^ZZKz+~ zy=J?tk8bnBoI1a~exB?z#pf#PpsoFFtc_9!?dm_&zbbnarSEX|xmZ;`KA^v-Uv^MD zvg-mi2I$x(m-;1NFIW0#n`3Uwn82y1U)o*#vaa>cy@9dD;VjN*#al4J#Z%i-se|@$ zse{UT=WNWQn*%?tCtGP8SUF!iNYp;7;QyEq+z8yY_PH^56D%JDZwKESd>~lIJ`o;Y z-;g-whcX-^+C<&d96FI%LTjQ{S~s*FctU9NP*2uE@d^irg`jR49@Z-?k@Zn(tEpi_ zG0SdP*psl26F%d$VexF8;xlI9I@D7eg*U;ByQbkSASZ>l2{$nAKemTYhvm)icfhlh z+HI~5+vh>V1t9Dixs{{Y>8*C5C@Njlo z@gmpBjzx{RLw0v?d-e?Q4cVKsb?k%e4Prn~{`<6yX zv{L4{b}#d0mY7kpH`UfntYEp#!TeghFP*W zW|>y*LD*eexk;EYi=&lk>z1xCFW(_Me3MvSnc1_nruP?ktJG(ja@x9G%Wdm!^V{Kv z>rrOa?iI6Y4_2VXOCvveg{7?F0JzQlacG==>g!fNl zrNvwEHxeHyGREy2DcU#;vv%)p1DDR%mG2@xnuO2SrIzr(d%TN|;w|)Tu)8-;G~PMX zdMMi}PA&6pp_ROO3%QZYcof-ArWW#fv>~X4Ok-2z8-uU*eI>#Jb9c*M?VGRjUEW)w zfmN>jJvw77+STLTz9k~FLKw{lE^Tj9OPh~4k?)Egcr)XRI4>QMAC(W)LlKIYNaMpV4ZH1M#ll<5b`wL1Y*B?Laiv z+77x2Vxr$!_Bm63GmZVDF|9<@&rEFtJNlScfE=I#5czVb&zWKTRV2s?q8JA$AeyIa z2Yn3M529#d4DY3tAQ|&uE##x1lb|9HLoZxikQMYOh~iceG4!)FLCwSl>Iq5(4F@sQ zM?64Ypk|;XLCL^3Kr*(q6Y_5$if>IZttkdpa}dSBBC>-%0MWQDif#Ql$bh$oAE+Tn z`ks;@Q;cgFH!Bq~#kQt7`Q(S9_|_CRi{VYt7(}tNdV>0Z#)2k+UIfXQ!!p)2!yBO^ z$PQW$$_Jr0fXVpRspzqq3L-xj#V4lt*A!cU{93f`LjmXl=rZUAh}umQcPj<-G{_F3 zI9s%y-Zcgh4Y=(A6J5UO!FDMm6al7mw zYLn!H4uBZmBcUMao3cWt@zoC0W+?7MiJ*MEEw0lW1MdQg^Ce?Jq(NQ;qP7XOH<%f} zO(d`ut`}qnwXF@^igC$}fbCG1d;mBC&%_gW9zp*C$ymz;kbePDn}yc4U?Xup5UnRT z5i|v~2*gI?`+-tGG$&lf({@58VrdwgJQtXb?=c^^7VRhy+lJUUpfu2PAUh}>v>3D$ zL}SP){+RUn$noPec6=;|+CwxZoW_H<2eG5vk0X6J@$pVQcL8e=YfE96(9 zvE_1Hxg1k2$CJykK2jUgvLi5xR7$BWCc;&Pn093w8rhs&|ya$L9^6Hep7X$&~| zI*7>ELF2tsKs44{j`Nmdyct^TCop@FVT5g?546k%s=h_b%%IhWV80IiCQ$ek%c&U( z6UBz&ZE}k5T1UwBfGvca1Z*kfWFVCnxN~>P43cHJp~!guQ<*@rEEhpGudn)j0A=`me=1_ho@QRSH z0jcaEJM+eDLlDVkAeBKR%kqch9kAsIJM+ODMIzWM0V{(jPgP*BkVAn~Mv$g-TGeQmzHtWu5xnaV4Y?LaECNS5Uk$vPvADdzT>!1skL%OWLD zB|KvwlBp~jD`YB@W`byZ#Vp`@Vc!YdE#$9&-+<_Mq4KH{h>lYk7%gNfzvc*;uT9MJ zFMy3!DW?33fGdT(3YaBiD)YV*^53=AcT1FUR1Q*nV=4oOfan^i+-n3PxdX71kf|Je zU&yr$V3t0oCvQo*D&dWu}yST(u_R;Yv4)G9?e<+a3L)w?h#J?I_m|_akzSDv8K=d8|YHVRyHYxW?lusnf zGKyqbPAPdrS*6I>=9+TYR=n#z(&TGA@SJ{(7RSrl0*@r!5%>pD%6nV^Hye`ihHq`? z1pbs^H24_9QSjr2LPIFKWVmVYg*)UHEF}h`C)OkNY=D+RSI>9A*Li;88OlEO{0TDi zs*1O=&5L5LIlMN4Z-#df{rTSXR&ME?f+*;HyoW#@>rL)}Jl+u?((#J=(V7V;_Y)8LoAe+Bn|FA}wBcq8c@UJpFV#|oa{LvQZJK25-z z!B2_Wkk0_{K|W)Bs<3fB;~~%Xc^-U`&x_zM`DB6T_^btA@3R4X6FitWFZ`F4nbYSq zeZ z!Grwjfk(mjiF5h&@e5~t;r~Q!-fsxF-EX#^2b<%!5b_Iti@}%pWr64TZ2;c{?TP7XW%)-eS_~5vs?Vv zfp75t2%P+=I<^zOR6OYc)&Sg%fQI0B zlvWf9zI@pn1XhI=LhXV&X3{oMVmb6 z1o+7yBg&|t%2mP11B~CL@**m=s!)4tbhT;V)2l55cU1cc{8xB`as9!5Xk`TiR{}Q& z$AjB~yMw0&KMDR+a2mKhcmw!1!RC;5%o5TDrB6F}h+z+z1wJ<<3!J>g2DT0!V;nQI zMku}!yv3-O!(WV?@EGGA51%o%hE+p(We$4;+#|dpdUo2wSBzRjxC8vX@b|&DhMxmx z5s@gVx<+&Z?-wxZIo4SHObbJ-KqlyE*7I=(toRv1Kcyq2iz~KCb%tY9Qcf^4d7R@{s1q6k6FunvTJ9fjgkETcq+Wjc*3*S zgFCa&g8z_x3H)YuF*wVqmxJTvv;l9I(-}N9XEgYjoTtH`$(fpict<(!LtdA&3G(Kg z4|8;EYtD99^5L`AvafT#f$Yrr3H%ED*MUq6A2!zBgclq2H~6vf3+C1Vua_GKo}YUL zoc!6i=kRD#Te1k8yxMpM;MYdWzQ|OBc1}^fBHWXrCg9DAlE7OP*k2D`+|$pa=%g8yM425 z$E|e}OMX|`{Z5Q*ed)zsJ1X5Od;LkbrY(NgRPcO^%06>h&-i)+x*vT&W#4ole}RGU3uN^!*#}TfwpIZ|Z{JKx0ON~|b z7uGk9DjMEweTvGSn7sG%Q^)qt8mY2xJ$N*%Zo6;y%vRZ7Jy83jL#sx<$u8Z=hu(Fd+GX_tCv*vE%uU}tamqU@+mI+eHV0k?n#fq zL+933*?U-bHcBnob|6`0?^$Q-iwkEz^lCqqef!k)9&%;pJJ2UP^2C;ck_EWYxgD>zBRepHkU3$Hx!rS$pll8!G#nY0nny zJ(Ik&3jexy{&$AN=&0Ss0cYb>_M=P2{cCBhS~(A@>;a#!nO8Q=z5S@l{&QHRC69TX z+cs5Y|13RawD)J*7A{rUV}^yE=@b0Hkqs(4f9`B64wYj!zH{utg}dxS*X;Ru(z{fz zcTKarU%o!6dGhocu13fks(K!H_Rwqj%~bZZ0Y5!^C}HX%8eid>M%aJMeY@G`$7!62 zYieI}S#X`Y-BzW$8X?y$+I=kk%}0NEQ)SP3cmKj>!@gU)U1k4zSZ>%0Ui)UARN0qR zAJgVW^?|#usO)`y2+xT5SJx%}s#ohz&!>f<9rIOPmA%u%OUstNHR{baD*Nn_Q#L+3 z$@|Ixm3?B!x06?&ePrWAm3`Nq<^7k;=|5+Q%HDF|tNZu#XuN-o%D%zz+RXtQqh8sk zvVT9=v2^>Y2fjP4ve#bN{Od-$mcMgLWgoEW^|!_@+xvSpYGk>jLpy$aq(|O2AH=Kd zXIj_15`6VmdKZ=bok;_ZE~WR-R1eFuSNm0aeY(ot!fJZ$n@x^0%T@MQH+(;! z$B{3yHmmGO?K0o~^10)VE<0Vsp zS!J&u|KgA5-Zm~zRM}Vhtyo>O-1tLJmA(G8#GzlB>#a#s*=HZld}dJRcJ>7-d+fJs zbhfjWymwUgMJ4S9HCQqHg?yF0^_GPzRt7gb_La(>9sd2sC0~cW@tey2<-}84pUQjn z=Rg|l<&s7gUS6K4o%?>2%I=b-jL74|4PnoqrJchzp)YnT%SSY>o$LfGCq=}c^vTuO`j)a<&mX$!=q;U(czvjedh`PC z>oLT`iw*UlxED0ywzNfkcU$_L!N|^|MeX$$TGZE+2njS|*T6JN>pIM zVXZ6B(jN2QmiGVhmi7Z^75}|0?Y$V~T#bGEH@CMP#vr!ZxCiZR8Z~Wzhn3pixBjoR zy?LZp9$oYAYKMOj{7tY2qcPflM+-bN%p-gdGyH{i_!P9gd8E+0TjQ*HUUd|lHL9A> z2Z52@XeBDqL3tco9#e-$vrScEgxW;}9g1LEHi8aCvy~BazJ}~nV%o|GI=5gMW1eOX zV2d#>96g^FiUcWFBP%}!Bt_Xlzq-o`WDi+pS{k!ih>8nOixLmg8Z#&ct>u`r;6Eb< zDO$f6OO9{k5>towHH?n6$5vv~|E(T}25}zN6B>gx-Wtsktc}svkcd7A^n@yX5G$># zAg@;XAZ}rFI(kVe)Ca+PA8sqX4}R!naP57tWjqDTw2YPD4y6wwIMbAg_}G~gO=W?I z&-(%7KmMj(iNo2>>`Lsk(l>Gb9(@xP@0Ix0rB~t_WExrTzE{GkL@F8}A{E`chr%_E z(Ld2!VNs$U^9V_g-?O*k|84&+Lyd*T2T?UzjtwGNjt?SPju9eRjuTSs20liJpa&7B~d>49JPT zPcjj10uuco`jrUtp`QRzGAkVAKJYssOPdq=?;zLXU58$*veC(iCW9y`hzFtp2&1X) z5UR>Fyi-Zd#Wj+vjwnRvgbC1_D)~zHZ4SMo%GL=w?|&@KHwiW(N^`|ACqtjA*h=$F zgHCh|{ojsGV=^ESPKQoJ>2nTj2K3pAt@L#id=)k#N=G@c*Ps(oI>Ldy4t=R&D?RTr=tOUcJcKKt6H$`KTM3qWjVd3Lq|`es$W51V$b>D-~zX7@a9^XPIT8Eu!3*mRrFRAkV3Z00Oyyh#=iCoWn6*`gYd9OkL z4di;>-=PyxS|!f?2XrDz`-SZ~bc7N_Dt(5`(1|Eb75QpHZ>Y-G0y+_;=qQef(34d8 zT0$qHG*BF`6?7s>^~Ao(&~2b(sRLU>Z=>WZy}q{4i72%c$7=_jh*EnFtUYuhN*y?` z2cUOTY^BFbflg!+=Oye8ohU-s2p@({R72PZdq5{5KO&ui@Db=l3BpF$3wm!*Lt!KA z3!SKmuo3o$PSjY~2nRqX>h=!*5`?MHiCm921UgY?k&p0E=tS}2c!a~C6V(&>2+2Q0 z)K1t4M?fcPAoeBv7j&XnVIzD3I+5$XBcT)hQJ-Hk;gisbT8ncKj)qR;db}~viEfL1 z3CBVwiWcW3oB*9DO4taeKqvY^>`Q2ePE<$aBb*7H$kjF%I#HCkKEib9M6UVfK_~i1 z9FK55^aY^0!bZ3dI?;#1Mz{nzQEg!(TnU}1syHv<8_46!faH0VT>#&f`WJt+5ut&XszL!U2fwS{dVbRtSNg`<3jzDU@T zh3!S?tA))hY;Qrwv{WTY+ZyOZUy1udNY3r|L0=0S;X3F$K~7;K+y$NJw6GC=4E0f!e5~itra%HE6|B31_dR;tI&xSihP9Epc7HrE$rm8 zBytFy@DJ$Mm3*b|$s5p#DBTcwZ$d9p<+}|XOSvdXmLCj$PU!E}|tr@bZXoI&`9!gpF_pbfOi)MmQ7tEYKUmMmQTf(Mn+> zoCBTcZDAvv3!Ug|VIxe3PPA(t{|!N=QhGAuo0aP;5G#@faMis5KHO3Uk;sU zkGRi-Z$Kxa)cOqn&JO4$imh~CX2O30B<~%e7xX|7CHX%zLa(aI7XrPyDxVp8T~)q% z&>N`oS)n&o;dO|01we^Nhp4b1AFaxl27L^u6W?9IvCt=gdI=lh)6ge^9uqdg zNzf;Q?7~L)4D@F~X~IVM9P}xmslrBRhdvkNdVT587lA0r=U_4P*HrmlhrUXc&jCGC zl`jkW`>K3vp|4Zr+W?)&o1a?2Ezmy%QIglP75YcQwpl#;+n^Is`a{@uKqvb8`;ro} z6MhVx$n_lip??aZB+Hf0pc7G&$18w-1mt?JPD1}ubwIJN z9s2jGd_O}kRN1aT$C{x?rRQL=sM~`a;y*}O7dnxvEfzYFtId{ydjN7ho*nvfm91tb z${CPrz69u_Rkq2{pHtbUKqsPfYXbkBrb3^q%C`XeLY3`#=tPuG_T&35hW?T&->cBG zRkj@HM3lCPeRH7`QCcT#YoHTR+9Yi6LMNh>Cv5LQC!!>ew-!1Pr9zQ!9dsf}CxmT1 zbRtSW3)=?hM3fw&?z$2B2a2uq_wA93vKEwzapaVjFb#Sh$U1`C2rby!Ldk)?6v~Ly z8hSsFYu%Q?XI&RWsh+}t(7S<7ivKF1^l7{1lfG@&eA35C`E10Hq^~t!9FLHEczGa7 zW`!dkbn@$!xxODY%mSiRQ{<}&o%|)=iQ^G&Y0_QUY97&-qm82@o?~jD&;>dLnvG(+ zK!-r5KyxLrU7$mtQ=mDBZ+FIvd_s3fyFhbgv0b2}CD$E7cM3FD5yunT&8@_K!tRjU z1*VGa=Bgr}K!>n9gzgk*uEz736GVQA!tRhL>}Fq{&nfo{7W)Zw2y}}4PNADaL_UEI zflh(uP_bR0L!eWjIZSL9=n!ab$n8$KUFZ&J7iez8^O?iNaRfR9It7{|#CDNCRp<_Z zPJ!m?BA-BqK&L=+4RO9ikx%Fjflk$Svq|I==n&|X*h(BPS>zMw5ZCGS7TbLUnngZ| zNnCdb-6_y)5%~lG4uR(S!Y_$%?c%-R5a<+W7SGYj!zoI+ChP3^QGFDBzmcQi0^c62SP^#W2G?a< zpydZ#7hOlF5c2()fnS%@%_`lh(l2|I&2Lm~w+a2R`n)`j7uPfUEI)rWq5o3Ab)(SN zearPKLSJ=)>p?Je~Ci93p$GW#GMTt`S%VN z28nWe>H~Z`)zm0S{4f+1^_mL>K zr?%$%dkTX@x!uu@Z=M<_Z~n79U#iG=2Pbg*owkkGu7=BD zJfD0&N>t}_tFPz#zbi6GOnr~ry9&ER^>G|sdA{0WgT(wU+%DfI62)U&dYF1VpS{Y_#AiR$}r6#s8|-z2Kf<5o}L=aKIfiEi_&Hsss* z{<3_LsLFOnRo_4B{a$|rKfghoLE@bg-a|0Y=lhQm`6N2WaC~8=3``o{esDH`(AyIvPb1VKkRTUc~I-cbANMV<#-k(+H`Q-B<@veMs4DP=F zVmHsP`Y%IeFtOs_muS-iFdZ&LvVNg{S|!vtoQl*yE}h=9RFUjz9Lcmb=>WL zvVzy|ZvP7v+&{GwzfQBbFp28xbf??y^Y^Zbi=tKj{&HRb1*<-SCB z=TqC;-Dmmb?)S^D;QhD9^6QuVIug~_=}r$3&zXE~C8mh?iqs{lkK^w8(<->Xxh21T z*?%h0A$}KGUP!Fy`4?C4{O+!QZ3Xu?R^`_(>sJ!h*Xd4ocm8@6{Qt9N_xJqT-1NUR ztKj)Nx_N%weP6ZR-S=mS{CmmrRHAzS0`WV^dXGePK6kpi^Ixvu@9%DZV+g-~`M;5< zz7BH|&nNu_64m+K=}ysqE&I15y34O_Us~_;`Axac{wH_$kJaG!MgE^8s=t@J{ZqyN zLcTX7s`u~m552$pRPg`f?)t42e16>RKca%?&%e*|W70qL|4+Hk?{BN%^OJI)&%e9- zpLUyE}h+1%H2c`{&>1`4?C4`!f^&pUd}>#Mkfh`fcL4^1UHZ{r`9O{p}U3 zKc@Xd&(GQl-oFBoPnLTU)!);d?)Ljv@cun=pYP8B_qqRL_qo5j@1I}6@9%E^towX^ zx7_Fc`|orA%N2b7+tT)z=>)zNh?sC93ne z)9d{o>fQxBs`A#8AykaAP$g8;v@{!MkPQeFi|>$Nr0VXW|B;j z;gU&!>KQPcwh^IvCLyt&6rr}^qP9^%dV)ap1clmzEgoxBIBjE#ttUVbI^S>2>}_SY zL(-4$dH&BIWZu2sz4m)u_qE>bExteZ7T>@B7T=Gy|7Ewh{>zndsd%H7+I5W9|MzaO z|NHv6|1onSc%sIQ)pG4Ej(>kY$G`3t_pkC6>F;~DsK0Ez#qsaI#r~hZ#s14~(SCjY z7Wwl?wd~S2|G3X#HvHYi<#Le|C%OzbT6U zOFPbJ_wU>y{zhB>&-%Il(cT}ak;%>H)dR zI90nzEw$?u?Y<==B0to;54DU2ua$#Gqu}3r%DSlVYN>7a!>1zsuU8(Z<)(s2z3LBC zOVz$s+i8iC{}eMT^1d4PQ%mhQjw*aYZC5ST_O+#U{qIxy8KMBHrS?7bUW>=SyG8uj zev9}YqvRK>{zbKnpBGs_^%OmUeH3d*DWAY>QYCf=9YTIv#5r45jjBDLLxqsUCkETZEsjiD!-WLV`ly1K)UW`J&?N)RTKw6xC<13t;M6iki7Tt{YN;K^hsPuDE1y(| zQOo;|M(VdKFQ}z<|9|!$xnT$uuRb^yxmWk$_nQ0v(7+FWKLW4j9XfB47!V&u7&FaAT||BK51)r|k~W3$6k{ZQHW-)P2Xe{)QDDDNrHuWRO4_350j zDllt!G;j1^U|0d0Sqvl@Qeo)iC_W5g?{nS3c z(tczA8(+I|zu$a0a<9tQZJPV9Yv!M<8Bdbt{sZN_w~CLeG~>HlgOBGl<9S4LFEstn z(cDkh+%M4FPtx3L=aZ&+K38)eueo2PxwmWX^ECH~ntSd3Xy^C;_x;k&PkaCLyvX_8 zwMuzZDZi(b&nx9RrQENSo0RfrO1V`jTa>a)DfiEhwEw(P#w+!ADWy>AW0bOGZUp{m zrQENS&nsoTQr@MMBb8Dp<(qFs=;uql<+cc4eni6uK2hpl*6`QgDfMk{MA}j1-lt0a zLnkBk!<2>mOsW5G&36p`SE;}2-3YvTUiXSpKS)!5O{t&%pEr&_W@Kdi_iO6ol={~+ z^edG5i5-!4R5?COssA4he;BFM@6fEzXr=y|W*zQQ>L1p$KT)Yaq-iH!saNstP0e_H zn(=JY(C1Gz&$Be&ulTy={z1)sNb`QB=J`a0AFKTFZq2SS9WUfPu;jE=-mkkO@Txxf8%_U)k8fd&2;`@#Pcd9I$T z{<&s7mT2a8|L<>vcWd@{-igR_m7m$)jNGgKt>jaYd##^Qiw>$Ck#;BouimSrOQ~1w zF13D?24B_ZqodRh)!>r~U!~ELRQq8=l=}Zv=t8A?6~0NK2UR~;^~isZQlF^Nk5u@d z9Eq%h>c3O#@6yn}s^{GurGB0UA657>ht8oOCu3wH)Kl@q)ev;CT3O^zyqL=A3^~)(zullo9 zy~`J+{#5G`h=$J8 z`fqCXSFPWyXecqMqtrhbrQQ~${##M%*F>o=i&DQnO8u57_4QHepNdl76s7)$QR>^G)c-6> z{m-M+zZs?emr?59k5Yd=O8uXr)L)KLAM^7Y@kGUk!BOgOk5WG&O8t~5^~Nam_eQDD zj8cDpl={V*dX=AO%TG1mlPtU#Sr1iT*`u)!ay0M<{wo5n%BvjB`>~%yo~!y*hlbDH zp|KZxHSN7G7Keu%uM9j}(_YKFk@i*oH$-Faz5ik4xvCGor{Nba4g5=giomP$Kd$l1 zyrEf-Le2B*8oB#&DAJy)Z#|>22cL?K%um(3#%t_1ou>U?Y1Y3;W1s%9>&E#SH0^2a zVY6m^FI>NIymx56$2nWGKSMS4_n$TP>eHJ29izyb1T7*e_v`->>0i~0H){H8)yO6J z(+IrkFZhmTz3$T3yPGxe$FD}-SM_IyrvFWv_J(Wh{ZShDKWp?8uf|`N{z0Ta)ov-* z?4Nd7rvCSh@Q-WOvsQ!u|E8JmGn)CnpxNIJ4Zf_<%FUS^pUt_`#a_P1fA+)zB;bKC&LF z9UK4G$i2#sUewql-5R~}CC&P5)9n8V4L`o?_Q?EH`^>D^eeufr6lnOvIE}m*ql`zj zr%q_v8!$D}zENrKgOQPY)lO{E(93Nae6wrl?IF#2lV*K(X~wrx-`OdUPdYNpQORJF`q~JSNZ2dn)m-z)Bh^Xc&Bwl z-dFt{?`r0IL_-hCFup8eN5zu3W9X>Z+ha!#oB;2RG!qqkn+cZ%-4jDX8uGwMzKK(B z@PEJ_pw#1o*28f*7a;im_Y8>PLh#xSPQbMZUV|ZNcpeiobP9@$p+kpmS^}5Kuvm2R zz{sJuh3|%s#j^)S;(E&xygyHZ}|vz8?7{(B>s0!*HW+Q(wdX4w0{8V(z#D zFN9kSLyZ3N7XS0EuUwCfw1r`w-WnSt#q5DJkBz-HWC(u4hF@$b zt0=jkbWPtd;ZZuuJhHp8sG?7B=Nga0Vn6@U8`h^)*)p>(4eTaE{dl-pW23l~)%yqmzQV%%!Wnl?DCSVo+R(V|7(! zQQs@*0&ew#URc$Fy`v@6&3Z(X;i>fReh5tV11tcbiTHz zA3V<0FLvMpI#+u8Bo2U;0RQ@ga~D;XdHTUB6*xyxzo0$dej-g-fm`ky3Ck)VPWqe* zmap%o6t>W3V+veKe*shb1oRe_7CHN#g}2C6(05z%8qiuq(DY525S$E+0%EMNv>zNv zd85kR4|xLE@~WbnC?zT<_Lj>1;Me`**4|2>MBh@;TUoWLZ(8xLcU2aw>T}Uq3F;fD zqCY|j?Ackgsy||>s&e(*K0B>0^m-x$*H7KUS0PsxIiLwBO`8juxj<{{y{<}IZG@04eRn$7xfRgqH@*^%NRv* zR!8hzudunBw;oowyvdOw>RyJGeAi9&k1&YGeG?)ILzH09v`oHpH0mV30;AwuG|f8#Sy5C_c(X36 zR$~La&YKuF7&Jh_zfni!DyUqWT;}nm%(^*9mD^jeIywstH?z9b;{j=VT{mw^0lS%b z8*Z-PChQ+F#OZNYvt=D!)%yyN9Cb)4P+^f%hH=m*9E>YWpddP$stvBL^h8$%R3N!O zK;>1Q%IHh4Hie~#E(eR;AVo;sUA3T3kWk|1E1Y?mh&$`vqCqA!yI#x^Y| zEV_cDwpX;S$k~U&c>`#_8pWFQIYOn?{=)Thj7qCFh@xn8uFgw+r(aXsphAZ&yFNIH z+QSC6+-?+jkwN`aThEjoMXahFv3~K@fkgrLco~nPE`8W#wc1kwHgI#8o2qr;Rxq%e z<6#(TgU4MYyH`h-bvHmcm^I&gU}}S3?Ym!V{UxCmdp+)CFeOOPs9i;t@vD9Oz2*lP z(BjRSxVck_-)FB=-@Sm4Z`utL`pw;3+!sULln?;4S}wimqVV&+y9z_~)m0hfW1r(; zHK-5%fKlJn#>I1X4)onh7^<&P-;DpEr!Y6T*402OVkO6M)h+&AE1rofT3iN@WsAv<0*uZ;KT~y({nX4bz z2~~sT7^up%?=uBCGU2J)gs!d#!Q3k!W6PloUf|KL#yAX zadv@1O1Ty%{e)rrVY8=tE+I`a6zsAK$cAC+M@Z`n^T-|&?6h!_?<1Q=zO}{Knzl7o4bA1_pldd07eq~Eji6h$~ zcsywL>a)+%u+xHTO<$=-cX*JxSCrO1U}?8uwZur_^@zEXg(+T`cwN06_(NsxxB+y{ ze>EtK4OP2^QP7~hxDL^9F5(7ClWECS?16Mh7H?Uk*_Y%?QZ`jzjT`g|4QyUXafirV zNVi*OmOLS7=m{F=BLDkRJW0J&q${NXRw;psuF`m`s4XRrSOCK}ot5DpqrAEZZ*(Cy9SHfM6-GSf!4FbJCCquA4yRly)h=LE&>lmlCv z#7L?-LPM;ba__+JH^(E9TeB=MRzV5e5jTZ({OpwLW}lM zyqyl$>8Ng>pxbs*rJ2^5sb(K-%$26%bw;&XcQBo<#vB&%ArY|CfSuJMYkHK*a$t^!tb}^2GdVBo(zhID7IG)lvAwB zTP6M|V+%Yq;bO4qa!;i=i~c+`tUmaLNWPMoY0318$5;M1X&U+69uM7iu2D>-Y3FD~ zKBg}$;)I~u783OhHesZp^}=LZBP?@_7NTa_kWT{^(RxGTR6oU@Ab(*x4RD4BwsZ1< zDdcfWxtC;G=O%xyNH7X77LZ1yq(`p3ZW^3IwPx&mypNXUQ(Ap6U~@DWpG-(3$x42+ zrNNj)WSwoHnpBdo>t?#mN*mnV??Anu)*WHEIy1#tX}uX&sWe1SRr~alX)K89#K*rW zO)j36Z^>q`_4)F)%8V4F5un_0wSfldJ><_9Bh54rFXv~_csrH5i=WT;DsKb}9{lnR z``_NUMgx6-$JiH8$rccaK?G>BkG^F<71g=R;)c-G+A~6KItCcn&K?>Z z3Y<;Df(B{b7GPyo2G!^XifHhkAYUR?^s>Miz{yL}0k1RMSuz2f#ClR;09nvdbBltK%y(wi~9#Gtr67<717 zi5!vGEfR$ve;cHgA!+<&F;$EMR}5h&^K9Ls$t9Xl;#G4s)5AZ(hp6Wqlb6rG|0oQDQ(77HRbemBK!7J=6qXyEBQ z-o!^hASInb4HLy5V_mHcY^VpA=WeGV8&(O$q*}5nQ4U?n1Q{|5AG0; ziYesNl`s$e6|iHWIWImhe&z!?J29@J{4l1hR54{!EcpI$y0clxUqP1K4wBu1#-vd> zmLXIv9BuN-l^DxqD&B%k*bL5m_GwCVRjnpzXH^;9Q7?)cO5{?J*zl)f@?K@^g`8N= zf{W^MX~QmzyR5^K>24>w$WjN0fkzwN9Xwgw*Xd5i4W$n^To9!e>q|6LPqnFmhotmN z5SZ0&o_n1xClH|Oh5T%t?f}KPSa6QP_=P1$v}OjyxJ(=PNUfX5CoKNTkNi1Q36qb^ed?_A2P*q-RTGCrLtU_bEs)aqi_JPCnW@g(bQp* zAQZ0Bkd&U*K;YS=$CiMC-VhH1Etfn?qYq*9bx(G^B1_{#fxyZY%WSlvh2p~UwJ!Gu zGzc<6pj68wpDK2@uW2VdPrJ!Su7PD(o*maY4sJVE5!6@L|9WaU#Gae2f(hKB1^nW zadsg~v#vsVtEZ-*d4E8mgQLvuq}(zq{Zy<3_BPKKY_tCV^k2<5lD2P(~t8$~bG z<_mdGC`iEDal3E z+i`93lC$N(JQi{57ec3{b@}|eJ{8I}`EqHnkE-+WYoe-r8tS7;{xy*|A6hI`gnvh; zQGt00)h;B-2U(3@6V)&Ufg$nlq%=smrIz*8`PFoH8Z9#imgM*Yf~GlXky+ARi@Tkk zhFDub15TuiQMMmK8SyfHj=;7DyMPxGliZ3!d>v^ zN;ATe*+5iJ-!PL=&vJ5*6NuXsFq+!LxNgUTEgefb86B5_9NKpj=)Mm{_RlvSi=Z79;CW6ys$%@ZCmCPG@IHG%)@XmpvKCo zb7aW8IDgmlJv84ZdT7w$9S?Si#`9F1N@G%lV@JqlqVyE9rqW6s&9_pHnI@&s-BuR- z;OjnfPS6Si2){d6ERCmiS81Y^ocT;nVDw*wr(xD#1H+nM&1stn+7Xmz z5L;O}9pDs+nKaNT?5v=D(*SNI8A7yl7bTq#UDIfU%fiCLgL#}Y9~7+t8gQ83t1&k$ zwd}Aw%Hx4t%%H)|C~2dvVX2pBr-hYjmY0nG%@(TA^@y(G6&4!o!aJpAX`H*e+kiiJtozWkdA)~4@h?X=1414VY7QV_4BJur?{|uh65ZQ|NQN^eSFD2Bl&<${Bj2d5AG$D-&%@p5kUV$=~rZj_rTUKOJ2^twRJ)Jyu4_+VKlt!t@d_PZUTvsaV|`VWYU!`PXUrZO=X zkh57^?-8A6O*80cwFWv7Yi|c7pIB+ZB-t|AxR7dead%MX##D%(rv`-gtldO%VYt$a z%2UuUfNW4LVL-(@p@FRmV-#5zFus^uy_R&Cb_Fa884k9%wYq_hVqLQGKPRX}tIRS? zaNko-2*UQ@Ck~n&6e!4CS3VqD78U|Sth3DY05I?NbF|h>X6FjBndPT!mRU48g%;>g zLyml)`YD>GU%|~KSV6)0f;JfFw=suluoH~HOlA4>LCoRm+1nbReTZ?6%0J1UR>Avp z40^|LRAQ92{8@7?P#vtZFx=m6Fkm|l#aWH%)W}XBY3lWhV9njr*!2TlycVt| zXz!v`$R2{dViDdlJAM;|<(I6mT7qR1yZI37Xtj*wn|<2_6q2X5vaWZhKBwbR@PsZ9 zI!)12%>`&+sSvb+N(-s-Dnxs+qPCR!Y1mGd!VtG*P(`YAkS4Vk=xe8=HV5%!_*;9s z`fiUkDEivD8yf5^yT$Q=$$VwHUv2LHZhX&Rk;5&*d)5NW$nU)e%oc4G2B`K$R)c8c zNvLpP-)AX&pROG5YWN#id5m2I?o}v@gOjBMD!qyqwu8&OL%!|c-r^HM-a;A%F>{&9 z7D5T2G6U(X^m^S@u$RbA&>|hpvbVAt39T%J2By(-z^u1plyN|l1lIj+DE^Zf>R4*7 zLjR!(Ls*k^0-Fmy3#+b$aii(H|0MY4B$%JjuY6Z&gx-GuHd7&uX@(~Y(giAltfM>a zaw{|1tKHw}CiiwK&ZV)yD;?{nQ|#$esr)JpvloNGknaeyypejIhS$90g|I&g?1>Re zf;(oe7$DqqQ*1e4{!XBf?DiMyIu%W^LLlGg6=7-8fFg|V!_IjO=yF#B>jK-IlgKTh1 zdtxyzXez@tTa4L$BdjZ<#TPd=50Q>H3Ia6L*}9y0b44oPy(@UPZ`Z$UbONq%PA1!I zL*epWpU)2_!vC-xDia=>frxkw5Cb;b<_jv(Sy;1&KLc_To;7%j@rw~aF@yncAQL>p z^1KCdM^nQ}tRS<4S9zM#*@Ysv&2M*0vqON3LkK3g&F>e9KibT1PR9}i8@-W=JUk}jwRp0NB-gY@kcf zvvBTw5Ti#!fljPE5%0n=ndj9l5Cx8Znh z^xA4^-TO4$-r0_Quh}Ox^JbO8)GRhAufh)n+l5_4hIGENK(jDQ_k{OU%EyYa-xGAU z7vAoGxZDYKb{r51mVE4KHUdgT7Ar;;B z@?QHwT82sb!}AMYV(mug(Z*8J`6ONF`PV8N=1P;VE(ex1%I7|%mtr^5FX5mKH2tyq zyA4}~|GP73+@ZM*6ze=?GWoqCBu1GeQ;2d3$&_NW6?ECQlD?kiTIo0F_WhWY9BDRv z4zJ8X;O%%TeT&CJgPL2VahG;;{EE`5M2R%}ib#Kh&R|x10ry`~%5^$yheI-4f$LHn z2v2?BA$XPB@qQ%`r*v!0iJkz_OJ|JGzH`0dvhQXv@M&tn$-gNLnkW@&OLyqWs++&r-o zCbPZxgDmRB`u$6+Q_Phc`~ga-*Svcgt=+zeot8g=2LUsh9ySsV#KJ@XgMmxwC|2?y z_AVEg{9)`xQSz}3KED((1rjQ|Q*@nSUkA9uo#&wbe9k}R?Ed_6 zv|lY3mhO;;gS((IJB>UIjB1s>6B~LUMM5y}D%#17#2%>f2xX!XSxUHW5&OZ`&%pQ3 zE~Td64jQo&e!VBeRx!>cjO`FUh$gMHHHg(K#keP4d-j>UQ!EIjL+P1Rt=lGM?1z^Y z`p1BJ7<~sb*=t*6&SRer`C*!)Rp{JySj0T>xVz}udXButZEmj@^F1Xx$hV|W(ymfA zwRDGrBH$OHGVfGrVmO{CLg#~fHbDe+HZVtgwHQIn1~fY$|pz~Z0?gyp? z;UN%?x-x0vC3wPNhBk)-s!&|K%#w$|yNN}!$?}6DTX+FC`I7Em>nbxiSa>JG!U#os zM6FnLMT|xOtEqv+PNGA5q0tmyg~reOI+ht88&7xnz-v~S1sKOhvt)$Yn+enqG%Sr3 zk+h3KZhXW0M;equ>rR5Tc**-2R$lrBm0YFxox!GVkEo=$6PRr%ZXEr=e*wdFE$$48 z#6XoaA=D1DPEg7ufaKUH7Lr(&OCFxv`XC6}bE`!xVwo2}{Y8#G^f}6Ks_ci2N(+x2tWsiuiZ?!{_rpS23ut+bxU(e-%HEEVf85}UWPB_7cur=AW+-x zFeTU^rV;&2V~u6xUUIp49LNc%&?SJ;%U)KAAe;vHSm+P4>rAh*Yl7^IM@_FiwP$WZ zVo)|FA)vg4#0mGBV%qRxRtAi~RK$sEb#7@b*gHI`?GSkw!ZZ#DTy{7jzN>ce>JC%w zE5>Yt(OM}IAy0(iZF46ADbSA0=CY0~E?IoV!R%gVm};iU7hwyvub4Yy!Fa0Og=t%s z8pQ*1#p6i};K@>+SxJAWZSqvh#<_2j4x4vl7Rjt24Nsv8H-65N7b{T59h z!=R)zn{CIGd9EBSLSfb@a**=TL?Kg&qAD^w|p?Z!6mW>f_gWJXm*b2wpKrageXC{}iNoCRB4vN(5fE_nW8TANFg z;d(T)F$SHgHkYY<{yAEhuWC=zk%Dke$la0=eCzWk54_(Lr=im z*j#JK$uSy%;Xaem_T-ZsfJaJ)w1`R!Ig5hEc{6MqmH|tk;r=Don&WM-B+WI>=AGNP z3pc?T^Nh2Ts1>S^EtQf|EbpN)I2&ftdsv!QEX{Ch+gT&!q|#rNwL;Ta=TEV)=o?B1 z`nbnNkFJBMX+c~H@hxkE5h-4lTx@A)A^jC-@E8y&fqsUho_AwXOvawVc{5<=v6&p} z^U`i`D{lRFwFZmHhPm8km1!$>>T*m<*hTV)o2J?kJ#%!^f>bi6@r+HW3+WuR6X0zU z9Ml&25pd#NvUhgUFF-vvju!4zuHXSf^UG-miTx*r)rLNxtc^+`H;B*-UKM5(3xV%z zO!E9Ni&+F>G}8s3RU-(p32(erQ%Em?TXw~qLxA5v{}G`S_Dy~SG~WY72`zH%5llG8 zpybYg`dO_(Hu*78I0%fD?PoiD-pObx!v6Fs; zfk&OuFCkE-xhNMMSp#Pwe=TTih4Iu&;l@U$&>C)!E^XXLPsG{3i{_pRH|Gqm#~-kf zaDxB_F8-aEPMINYJUtJ#4f{DEPi}aoq?Kw~Si!Qun_Vxn&vpb%wZ>zj^0mNxAuo8U zwTJ3jSQKn9z>b4?H4e`k0*@i%slmaDkDQU`PKcWTrf~*Aj@Dzrs?Hauk#vG;b{P|B zgfB?07h$~8a0n(hYR39XLM1_AY8G9x*ddpkeZDeoqM!@XBsB7jKR0e7t}jNe#VOOg z*`~SG$RMbM?+vmATow`mW?wBEp%C3`PhJWIJ3Dt%;jTGsy^I58=Tk{;2TV6ZGkwF2 ziy)<*rd&5wK9V{d@B=_S^SgV*Jg5sBb?`J`0q+7Acon9%eQJsP zY*KG_f9B+p zrO3wUtbJd|uR)3-WJ5#kEzn{~=%EDBZRkl#y3AQAwP@^Bkvg+}Q){sUyd0N^+N4`kXwF+SC}z$4}%TtZ{c2ScG_aC?pmm8}x4kTfae-S+0O zDIJbqqbhL9L9P}W1HIrnJQRyy?UYoNu`ca1KwsWb?P2W;=mLdWhYZkNK($bt==KI_ z;7%y@97-HyPx9IP{yZ_RyjWPgz`b#ZIIhYion7{H#&3?kOb9ZAit?^MAD#{owh(%BI30LB8N@(QOu)`U|2p=OyGE&RK7!iA# zHso>?@heZ@sL4)8mJPynqd~*e}+I5(9>{-{!fe(Wq!D<%ik%DyCRcsU)*Gv<#z0JCzcsbrP#v{BBLd29uKYO+yrvs z*DQTM7D*=%s$-Gj368~;;kZ6zm1jE|c`Mw=i?z8K(syIOkp4aPs+5Pc5J3+hK<tMSA;iyI)Owt?h^(n?+adnee`D-7H28$unh*{ z_Y^1s)uhZbjeP$k# zMAaJ9909a%YGqDbi3u0M;6Gb{u9E|F1dI^PgVu;kpihQ1RE%^={wA1qX-WbBou zhP-S$C)&k0xgCbq=Cj%BkRJobF=z7F#gm8{frt46fdCBV7wy8m{77lx^4Cj>mK`l# zo%eH_^zbF9Tbsyf1_k1sFOV`N)9^#WCQS)t3NLbv*B8u#ml<9ev7l=Q)cB^r)~%O0 z)(-Z9^qcTra)F7U;NUwK?r?!15h#Sck`SYCLpvAJL?;O(v=ySd&TXgsBQ(|NUM?P4 z_WFUcyrcWeZD4d^Q&OaHOt;$n$81)ZVv#UwM%c3qTYo%e6085m_sF6NTWAW*gvn8x zzcL=qe`a%qu(Qg=gB+ydmYU>6bRM5dx<^x<*;(?GeS?6mrQF`mA)ixTYQ)WIh%kjYEm z#`0{db1##rz|C%7e)8onQZ&NX!`T~0>aQTzLMz`5+zB@UW1O3Q61y3adIFqL1A2vH zE79KNVK!r@wW&10&H{G8p=`37X&QFUjo++rEZd$V=>B|!*Q`|NmTflHYGV&A-xT(O z{TDdj%ShqsjIozwA*$C!uhr?6%Zwr)$Ly6RT=v_x1{*~y1V+2RGX#}f>cylCtggl# zDh~Tr!L247D()03_lozLdxRgmZagbSA?|Dx7Tc?EoX*`{i?JO(*e0IKlf};9D{9y>rpmKmoSYwhznNy8r@VZY|K{_wU>{!`fvH_0a&|ys z4?yCk8}bl})%I`G_`MxJT+6Bz1k@M636 zwztB&9;`bFuQCEw5M3weAW*9l+x1h#UND3+xI9?*BC7OWY3d~?2tbG**0r!Ua6HBu z$h1itLoCU29$N-1-$K8Ov3jA|Zh;%tDsG46DdpjL4P?w2sK9?gEbVJ25SVp;#3`)Q z3>Tp-bKbT#q){#W`U7H4A`M+6+TBk z+bMG7-(?*I$A0S-zZkPjyuM5v%@dGg3t2fCW0w&dh55>o6N{h^^lV@^7{Xzdxl$IV z0Z!j3t^^z4n=HND+-zw#{wh%{f&b_PNbVt;yP3YBLuM>J#EDWE<6u`uce9{7&K0wE z0S@oUwRJ#S=fJ30+RCo5u$-#`;?GK>SAaWpC-vPpDuj(4EjsyP45(@^{W~6Y#heEB zadqw3+As?qMKC}}MJTM`ykmMraa%x)T_%5@bwk+N*g+iaSi@P7aM*?Kc(;aPiYBVK zfF+PUHmW$OciWDcfk$H@69>DV_eS{VxN@3)ky*4jL|)`)>ObmU!%p($yJ#YU`fo#b zLkt=XLqAxPOJXm`RC)wtQ-PU)_x=J-h!XJ-T)aN78299(c`pO+@+`&T9Bo*L&CHq! z#v-05ZWnWAPQw`eEC<*P_c}6yIDxCs4NA&I6xNK$EHLsFB+?)zK;;G&Vji={4ZHae z`gjjR@cWoy!9xk-V&WA%!42EWP zuvreS$$Jc&5-6Gq`VQD^7LqT}UBIT*Ei}=NGeKo77tkas{4JCOs}2&X@dYu@)+9#N zB3+NFJ_E<1e8dl}i|8R7Kd}cEWWk29ZK1E>El}p8g_NjYhO;U_9NPjvnkX!U@1KnD z(;FyW&#zhA899!}oCk;RJRt7CHf$~xQ%#5w?(Lw&olxE7oZ`TfUKfo&ymAJDh(}ja z?o~>*BHb}u(jDieyOGvFcQ}DAC0l5;vlFzux%Ee{P!?jpP-?1ZxQm(dz!UuI%YBuG zAwHXrF>r#gYX#=X<{I`aHf5o77`Q$w{A zI+#zK9{Vjb&9OSaOV%xPcRgn^poLU@dJs;sEp#%be(Fm1e#qfm1|M(zm}v^Rs&J8T zRPf$GX@DDd%v?aAYK7}3uCFZEz^c9_0sL|$G>^@k$Slu9Faf`A+5bZ!mcfL=-> zmRv6o^6>HABP*uT?1Xt0i?e#y64F`u-Hnx43{^j@;zA8YIe5nmhfl zT9ng1x^QH%`#6eY+qee<&8sYy)eS;xBhd6KFitwr}bvNk6ab z)MQ$RbFEhTCe8=IN30V`Vtu)2nhuU;ky1la{$=s8cn=~HChuqLMy9kU=D~?^80+1} zlBC8hZ35MFAyuoy=$!QyvIr||e~>E0{yCtIPRg0DixSHlPajzJP5 zL{$dW)u&s<`3G-cZILs`#+@F>15u7UI5^;S+Qj*z7-YCfFmVFv~Rs31PLwI4!I z_g+Lsry^y@5(;fDgA%3V18Hmu?|?133u&yAK&j$W@!K|}Z>+;%U8v1Q6`c@10 zGIFlGJ)-VS>62JaJc7oyjVJDn{NZ%7{|CHXwqP_?>^m4=#^^5}BnOkFYa6Tc!cvUKxOw)F3H7ic+31FTO zR?ZDbt;|Q5M$ddhy!xB(|64DUl{Q&fQ(H+Yy_Oj0r7Q#GdgKM{PNSo zjWc&e>yQy}j8^B`_~t%tk{P8F{x>U*9Xk|6_9uG=c#VF31WwCm*hen+c@+ZP(^+>PtQq>ryWq9He1wHQ{EsCE{McBL^nqEoJ z%iIboAJR=?tzHCjW~7AeZ1~{|+)pCm2m->A2de{;%LJ=joc+icC`E`Er*XvIBw7L^ zvN?d1pfpP$=Of4WVe~)-j!Z*hV~KE@Ov#o!r~t0engWrr6#LCCQUplLAn@a+(AT#M zOS_ycdy1KC23-`z{?c}2qS3i-c$oIUQGu!Xb7h(31}FheW9)ymPKI?9b}=Nw!R2tt zK?jBgslH)XFgpm>ijLNwlneL`Bh>i_fM9@i3;>4#>%uBX0zeuXO1GNi(kESkm2zMu z0yT(9>yXiiqbXntJ9c<4)?qLhW1Sn63N=PoMh4I%GSFx6Dc#5g7)UXK68h{Ph##T{ zTjzqwB}~0It8ant)&qZ;azVHdi5B@i&gUKJ1Y1dTbsuNHIPhQ?T*z{jw~KQs;LRAz zN^GE&s*i9w82OMaTJME=VvgvWwFan_XTqxI9VuP38Y;N8i%Pd}E{pqQxZZD&&rlL_ z3meyT*-WBG?h;cGZ~(8$jhl*y^i^r^Sp7L<9F>R{#mW9gB^Sei9p!o>%_;AQs|jnO}^%wiC1Cb48Lq zNBYL~YGj`I+dOb8=Zep5Vh;b8DXqFLJ#t;jzmDupQPOSdG6k~(+h>WMa>OH{$znx{ z%Q)`19&QvI(b-_2p|CdG%&S0aqkZH$(imzB_Uu5W1r7@iNV7Z#JDSIb^_;X>lyof3 zk>al-QVIt!{BzKP5qf}%Qf=;loG)V$UTw%OgQg5bcgqhs$|1gsAz<8)w^J~=;DLkC z^F>3aaGZig74PzL#OOP9I;`NIW9)Fsey8q2C~$jbo* zAs2YDfs*Zs?fV-9jSgcmsQmWxI0h1GcgT)X<_;yfk+Zna4IowD!P%YCNH)?Xr1-c& zK~=?PkiN%>Jj0<|$_Ltn*J5(yh>6@UUK!OZTtL2K@^zQIY3 z!%pBBQORf;qqm5pRb8)^{2;uU0G$0)G)2(VP@6B)gZrvwHxeu z4&8hod?_*T`5xKS1&yG#WpPJ2J_g53uPD?aMzMkolR6#b0&8UIF zL--KqQQMg7O~-l**(HnPwElhAt>AOs(U8Z9V!TNf=Yu5$!Xb->9!IMqhy$piO_ruy z7VUD6zqJ9mc&)hY747A4&^-j|lrpqCc5;Jo2;cAaP)M{kIaI}-1nurLlYnjQ>!(kxhTm*++@jnd}m+ruM z%`oz=m{|0&lEXHi4g>T%R1J9_OW5jveOXO_{va_|cMa+aK6;H|APr+0FeBm@F<1a`X%OLm)-cs&mq5Z0`(u6n($qcFp$ii0tmKh9gTz-Bk8dJ*i*}~XuxfV zdML3_SK_8ocNL5PmEzsmR`Reu*#4e5EamFZoGXRt_Efkcy8vK5?GW|z#{PxNIJh=Q3 zM90|;d{zb|xR?DEnOUDNC3h}ja_}c0kTBgAoJ=V@1AERsQ~&*E7SjNrc2}^Wwe^Px z1g+#?5RL^Siv_7pBQeUh%sd&cuX9*LVO(Jm!8Y;jY|#<)p9B+iNngX4Mtu8n>9%Ho zcKQ|f$3z^I_vT$LL*^{YX_klq%X3xF3U9&^n1X1l7?TsS1 z^1j6{E)XRwZgi{zN%iJ!*&dM{FLIYxPUfV`3-C3_Z9#t%c-SQ@JQC5_I^4xx_D@}W z$Z{Wz1TxjSWzOlZGE4ban7&6dwgml%8mlVgF7``*3IhT`KS;jt?hcJKE^34Poen;P z8HWe!-3S7|hR@&3LS7;^3#r=U*jLwt0EZ5c~R zq%5BFwyyMgS9%bc*4cFaba)6a2L19pi|rvO4ZQByCSQv!2YzQJC`fEpgV46% za`TD(#SN9nZ;R_~7lHXmN={((9HMtvc4U1Xu^3e$#G?(8(0z;Tm z>~L!@&OSxR7=)mZLnX*r-Op)vv+*eq+$ARHr`p6jz)&Z8yb=__dmJm^e-6|ltXZ?~ z30AjCzo)a&t4 zA{cm;sYtj{4xr&93^<~8wrl~@#LDu3IO|!;Xg6rDFj`i_PR90jgvx{Q!6g(2muxnS zKbW!uHd|;GzJ}6!t))T& zVs<=R_C@K#o)m~Fsgh%XlffXMq$ielK~MDs<&K~iym0XOR$;^R2}}(@yk!ydwxVJ2cNj;8;ky zc%d;~@?S?-lRT+VChLnG&*8MABOS*1_AE-ch}4!D`~i#^IF10aECTf!@j)zn5Xvcc zhiGjf-DO2;c#w}s-et|iA!o>hyQ~>d87+Ux5YsZ0>=CcojWlbdEeJ;|`)~X>aOish z$RHY}g;(--BQqDc94Zs{=Sc~d9&Kd1iNDar>g{nbT;q-id#Tak>mZq6B{+31dXUj` zu9=;x;Ji{Z&T%Blf6kuAV!lD13q3Wlo2m<$)xaN*!<&@hYOr)P$aMcc=8BPer@5>H z&O-)SWiC6WTp|r7&X*=;_E2F9pWF7AT<%7Ldc<=mZwt+^ig{f>FPRnyU}I_xRUm`6 zcHrl2W@Ct%PlGb#?)br_Odvs>0Zznbe2<2^fR+Js8{vW?^XzQArVNc84v3xMA1l<6 zE5DQkhWwQZ*fYT(>me#A+z;1cLRsLGvgxUlPfbQ5SgbSH_D1J3*|K;=mj4LkO>hMz zb4U(WS}zg3iq(%2oyMogAWM)92Aww0Q zmScG|nZp}noJh)BBxl>QGG|>{;%%6NnE0X>;XMaIf7AUS;*`j0*9VRFa2EJrXO59M zBFszgLb%r*@|=g*48)=IJOfR)QZBnOF@$6mj_klW5rdBwi2Xg~V8Zt!n_og~D)eK} z2|{P}!cvWcSAOK*V}veoN$fu>9QUWBGMLG4@{8^l_***cXBiH~DpZWrV zpalvU)Xfucec+|G{gVC?7+E5|?6Y83wY2VfM@wEK7y~B<6@S7Fj_WKz;^6CI#?lUN zW=5{G=yH0KNAg`pe6aoF9sEZ=AdCU3_>6RV5HTwz$j3SbrMEL1tn-9}sTCSGh!iGa ztwFbx2BWgtydXVufjI;EejCJ7{IX&Y7<&3ncY;)Y)%K<(2(LqUb*5v5_%F>oywvg= z%pi%U!9O^h1SP8xxP!xfIG6^qhOCptv^KEiCaOa?8_H#kyG<-BN)~4jEh@CycTJPN zhO@JsnbK-LK&ykVq`A_9KOOj&)$tzxwt33}7`pI^f>{-O}_06RP1wz{P)v7sPV4CW&E7+k~QduDoLIFYVZ z6mUd32_Xl%tvA>zn(&p0Aub(qma_2fl3#{3a9xs0#{b3+=$|4k5;P8eG^#gAjAq;Q&uI zJj=-Ey2$TCQJ+LZdaH!x@o?DA#o^s#E6~$I546xMJ%7Y9)yLi+`4D}RgR$5a8;<3y z(m4f{Z{dnUUjh(_|EW#I>bQosf zc?Z(}p|5~TvPFe>!5TN%|C)zMEMn=17>9$iI|KB{7UcDt0^biG)GFjuVh#ZLvdi}M zlw^X*SQgW;X6P288qymFUYsbnMfmp2;Zv_Q=IPm%u&M(BelzBT94toect=of*q_r_ z+2Q4Z2qf09ccw5)e$sKE?f;PX?(tDo_x`upYtV)F3)XTA-~=Xu69`Htz$9@e8PqdC z0yz_y2%SJs9700U5Q4xYfZ73}dcq}Y2S~(51+@c0wLw5_pipg8tUajE+Gz3AqQa>S zkVu^8{oNCyz5Gs}*Ylizp4Y==X7*?Az4mSGwZ7NS7Y0%>unB^T(DMQ2!tM@Cyjyi* zHqIR8(NuN!euy1No~V353@*&tcq!Z)BlBhj%o*ccdm}D$6^BBaY&vS@e58k!{85C8 z%ltWJSro%=VkMC=w6-MAXIcCiLU2*y&to>y&PRf)qP+D(b&I)m4fkE$_YPgydryQ zkK@oMR0wO$UWUV0FY<%!=i8x&^Y#!rB{vf*AmNw+6_`VUzX*uE9eAN;*Gt+6FF8QB z216%zm|T10QF91=n-;EszAYZk%{_l#Xi`7W*F>XDgdi_?mJ}}Dzd^j4k(T$7n1b`0 z^xiWXcB#HtFK%SuUBukta4~LN`Nb`M4u`J~Ly`%wn5@^_$2aC{s5c z+bl|CXta;v2+IONiiEKz`*`A8m>@Z1XpV1UzHgYUx^F)&kq5ZaoSmwI6cA#q8zQYT zUIw+<7HZPY)tDUzpOYb{7XfaN-I6laCK~3oY_sX$&TY}x2rne)Fk-egsilqdj_6TL zFV=*Tj2ro=#F`WH-LFB$C{-nv&$;OSxlfA|V1R#^x2*|9{M`NVDd^s0Lbs9%TDeDf z84`mC=?oIn#lt|3!57T7OOnN>QHs)5B_cI6AH*+?idKf3==~B3R=Zsk-$lFS0bNBB z&=C|7`r+I;yxT!_H)^$q=+Z0frzD>m~x27lyPH{Zu(-3cTw&8*$iQ2yV6Bh zODIm4QTXBparo4hMV=s(A1l*f^pHamMaVmo=Y~R7VnmYIu@G&AFO*S? z9t0?0KgS)soxm)QI$N`tlsEjGjELP~{URvQ8yH8{7LXk!(YDpr6k!U2gFME!HqxQSo)V*tYOnN2>PI)T58b>Ho+6a%b$JD=} z-$O>=j&@&2dE!)bh^Rz(Aphf#<++lR(IBzGM1YOxPn&T@ky+mu(^Y^DsA`T!Xc~dttc@(l zBBHGH!Y}lYoZ9GuEV1TZ?6=-EYf_5!YY;^g^MWu^_U7#2Uv?CH zfic45jta#G1JI#tSb6dBF&{z=Z1KUt`r0CXarj;>F4+6r=`9#^xhok5GBa98Qi|I` z_gNNEIV|1!(7Yh(?evoGWZ_PUh?WzW7K?;qZF*V>R%YJfgyN&VrdDe|Csil!Cz>QC-J8iaQk< zR|sH+A{3BIa}}Y(Exy1}p9J`e>8PF|JP@f1?MO3jJ4@D4n|`@O6>qoFWSDk6o7#Cs zSd`uCaN%lmc}tmzkB=Aq^5V#*S8@=4cn!Y0FZwhlQDtoV_}~uJ>qMZ{$51LZ2vu09 z`-j?IAnWVex|W(^--1n;{+fBNq2!$^y&+P9@&Rq!3-Fpb6uW=V_VWHX`&Qw>Y+O?0wGo0X!x**8=24z%YglmM(Z8-93w3Sm0 z#ZUDOPF3Pdzd6vu2^p4?2OQ%GDut-I2ZRiy5Hhxj~n)R=MSSpwq4WG9A##RRkuJOW=Gkw$PDkke8K z51d~bn(hu}YRO}#(-N}?AqGFbUzno?dSv; z8L?FKCmRX;+(X?E*(|IRX|o}59=ZToED2k&NQ;_KB~Ms zRAwjEo0*xL;4@-ok3DUSJ*$3DFKP#o9-PG-A_9b===YLQW-4ccfEO2cXA5!k1$hB1 zlZ5?W>d}PR?N^fFHQJY-t?i@?4UL8H`9A#?QH4In>@w7b(fOO0??=-n&NngGkrbCu zJYFOXI6Q7r>ltRUHV5CUMQ~sY5=Z(xy_y^8XeGVkzOoeWJfV`2H+`7wflP{4v`K$% z>P59pO#$AO#(DDUB^p08tj*ZuYV3K@mRpgm(;?1S14j>&IJT`>*cYD{NgMlwH4(N4 z8MZB&m0LZ{oqLx zYn~91C)OS(lPXCze#mJjONXNuB7wezDWG&y2r1Mrbfm#yqBlw&`Y@I5F?0Ck4(6<9 z+=@mXn^w{uAw=uAC_JS|z))!V2Tv1u)!`xAbzL&>|}uL z{+(G#0-#&S^@-k-{Co`ORKe&so8~G5QL79`PbSI8KC*e>mf* zj1_%&+_Pb&&@gbLIEm{CZy?6Elw3i$QwKWW(2)dTk!m<*{Kv(fd6L6O z?1M`*t0h8(pyqrsTz=tv5Wb9i#DdJP#iC)xn#-rWUNk>M)Upjv7Kc+q>A6k8+-qqeHU@HYuWZi-T;! z#qdx|K4R?{xnINpA4|Y2YQ=B~3F$smNU|Z3Lgt7jAKX$uu1ONRl;iyk0atA}Vh{Kt zU&#Q1Rlbp_Br)%2ufr0f&9m*{C@%riY42k`GlYCqYI?oC1;ZF%9qQ^8de_8e{l+lq zIw5z+yN27jl4jW@EQSOjLPiowlw^vRqu$jK{m7)xMXtc==rWSJ#z&2GB2>;RtTFfH zP5lZ}3Xj8nLYFjW>qdtj==F|!9!KVAuh+#4UH%SyT!ch=?OrGaW{LgdMn~F^=mV40 zU7zq=B*n(?PZZZ9(dvCAE$N2p_JeBnel?QOr%AVtb+%`FS9_n}1+Q&9jM1?{d~DiD zud%*R^FvR{1iYE}FQf*D+fW)pfjUfn{mvI;6fZF5p1&JgL%3+rSldYTml+d`)dt36 z+bCm|p~^agP0NM)+rWHI&-0jfm1G3?>6CWN%9C~F+I}BBM$acDDr)3(y&ZLc^NX>3S5*tH`{3i?vZFshq)m}x_;}##+tEzZ86+HjRB-3y;OCPA2;2PMmvwG^xkz`sfz}0E z(YEr7tEovImadbBW_zWrnh2Z800U~EA7owf%=shHIGTb8!REyPa z=^W%$50>y%i)t%ZgnR{R#&#pQqndb5s6TWlGpHjKnR|5IRI>t)$2(l+F@Cvqi-dbz z!YG!fKa)E^t}ZE2E-FwxZ88^zMixmjYzX6knAsU_DiU4#VX@_i7Z2hUMjvaK!< z8p7WS3`(S*i-~NZ+ekYn)m9Kn7rMtKUiiBJ=I?Bg!w8Wd-0@tJ+2;HihYnOuoX047 zgK#s~8EG-&wwQiyeoFn01MZ_nO3cVRUyzcV_1KOXMOm+ABpHLw>#MV76lE;T$b1}Z z;lo84nZ}?lepZ+>*CU$Lc1C7C@>%B02gFliYSeXf&~LubNQ35%X)sFeAJd1^)X*GG{o5aYLWuu-{ts_((<#4sH zEv$W&6yYGCu2w{i#MYJA;DnWZC=8zY_M+SBH|(}WMlT$buz8Nk;=<5WMd@qpqY^! zSx&tp$w$n7Uah8&g+p!}OcJ?*iUob1Zn{N{Dkif;{e`J^Wv%;RrBfx{LLGrS)C$+{ z4^jD#Mj5U%aD=Ow!fB97tSe@mrH9q9@z~spA#8FhKP8|V>c~S^1^d;_so@f&X3EDL z$9hD{u_#EXl0|?(gAiVRn3VKXSutg;>R(FTjGr+;lM^hH(_r$`3frhMvyNz;6^iL& zPM#W^Y9*~%scTm|*0+=(p4VY##*^ndUjlod-c{>dx}s`l+g_^c{kT4wxeK*qP zxprzysCS4!!d7mSHV1a9Gd26wLr621oq)VOqJ3@6M9%DIoQGd~tZoie7U?2A$*eSH zs|B#-9;0_yG*=sFb~BfLS+30JS9`D#6hrZYfNSXvSUn~2=G3!m*A@#SCSCUizm6J1RcZ%$wrA$GquviBAO@S29<+}bZ?dDmxt{}2ErkrT!Wl#iZ!AR2tZOzNNKj;! z5khode1pr1rB{_9(37Z!TG0)o$?#9$UciT~w*Dtf#^WXAscbZ|toHH7|Fiai>;Fkx zr~d}~rY%$>$+G%?(UzRQar?h$=I_t6*T!{npKKi>nOFb)TJF;~FprZ3FcGGRpC&wI>(_pnUELf*=|w$YPJ)}R<3$sS&ozw z8o+Of1cU?hfN%>jg&q^rc%&$B*BGb%Kod&kI9fu6k#!oE4t!6N&M)`B$pxnxrllqO zjZ92T#HLw%D|qO+Lv-ZJw`~qCz&U~1oX|ku61zFcHJNW_SVar`M!z%Nzx34?exzmS zERpH3zTq8$`wr%3T0^l!$_lxI>*ReQc8pm~WT$vGha@E2LS$-SE@rKSj#DkT{Unm) z3cuO(2qri?A!L*s_^!Vxcx$PiB&Llki-!_%Uz*^6f>-!24|gDZOV`;tIaC#3@Ixi(A(Bj2+7U(fIS3&^)uvG&4Vstmgm!5ENZJH^M+%j0o*_gK0Ua+BEM zE^NXl_P@xWMMQJD=jZzTp(l>G!)f>hsJNMf)cc)TYJ=eZXiYNbX5 zPOO_!y{cfly2)>(br^d{LrTJ`P^fE~$6yPyM^M_b!(6Klg;$a7+Kj*effUny86pe= z1NomqTl*69DcBb}W)4PV!*Bi$daGw9y@il(!i_Ou6&S9wG79-IjaFmoBjy(#d3TwZ zr4s2Lb1GCYj{*P)o#kOxM52TUmP)8^3n@#FNgj2P8wr$NW&0jQ05AfT6RLrmo7@=K z4!~)oQjE^J!UxYlFq{PXSd?V?<=H^9tLtt3?wa`PFLB9nvBRU)=)nNfltKk zTJugG$vV;&x7H5@f`lD}15@EgJp%bps0?<8CNXdso;MRkWbEC6OJX6OI`~|L@WmK( z7E?(nHy0V>isC?6T@lmanE~N<#f=ecl2_bpSLg9m%+TIIxQoJa1muz3(F9Et>u z(Ps#{KT1zyd#YWz5ybSEBB6`a>~r^8)vwq`J3oRjg`q`9!Y6URO<>g$Vn1Or2~a;o-roo3#|2Ph>6S zb|5W~Wl4<1$pBJ{I)wS|=Lw$Mvxg&(FuZwM%chucR1qD0?E)P=psvadR-TMTqi@X& zI9ppWa$F9jbNiE7EjE|Bf9YD1|2{klH9~N#L?ib~UF#fz*{RpINdyIp+12o;FP?;f zK*kkZjy&Y=Iu^@_2b~|ultg}uO2{cyBtJRTmL|c0mUedT89W_}k5AXfrNX7{km#iB zH4LeWz~o-X!Y`}R<8Z2(U-BANVF>s>=I2~VwCUx^&XKT&Z4%^Ar#y`+9eeg0tz<6< z=NKePA`@0h0Z&+aAP0betME89p87+z=(I6NS{j0+{QU`-n5xjb$w`3(>{fJXv79o4 z)h5T0Bt6&xF`HU)Sn_wo!0wkCZ8xXhG%{Pb$!n6uAwZZzb#kGl`+s|@5tyUMryuD_ zmXk*Gt4XGFC*y2CVGQUbj_tlq+gS9PZ2_IX+N)<)ZOlmWI)_iDU+ai#9#O^X*GGMo zx9DweMrQdc=WoSphO6DO9AGn`nAU>Ad2D2J``K&^FxMaWdvGk^o-#}8HD%awvN=5bF1EgLg5PGRQind$b5{##VbNjC zb4daFU>OybxZ6%dzbp_3!~jooB~jjKYBE8^4ca+7@|oyQGnsvc95NXUNemX>apyU2_ z$!twJRG-wOpnbUb;%nT|W;q>(<=JJ`dNmot*Bw#!CT?1oF@+wXPeQM4`7kvqy}Ld7 zq_3-hh>5B^Jcx`Tcjs*pFDtesL?IajM#TaoOYQJ2+2m-v-p0~o8qHV9`$%aB&!5dpXQnXNW?E);+>@8Y)HS7T627~aXlkOE zWc0nVn240hPN6l?8`ZMof6Hq!mw0fa5@r2HYR42}awjPG$Qn(`f8{6iNlmhQ#vbwI z*?XXX_*0VE^fZ<}Qf*5o$h}W+jNl0}l-W+$D<2t$-DM+}rb>28fgw5<`N-EfD(AAo z;FdIQ6Kq*txZuHn6rd#H4G{^MaB11=Dn-nvA2*k*W@hWvF;ny~wP-PfRK$3bD7sPv zS9rL-*r)DZ$@EdF=B$JSpi+!f5CIG|-Mv7?=bwNfZ^G$yvMdfy4=6I6`2O__# z8Rt)lM7Tt1*-$`F{h$vMoF0ZL0s9_2+81pcV{aWXl&}^~WsiPY^^S2<2SE2$ec;5LCBHPIg?Ptfe$N z7Y4!8cqXu&b?uSB!w)}!(Wyj8GB0;DO@(_kAOVxT{coga7CiX|p4K2-Hjz3NI&MxU z4g`L|HJhWhajJFEenRE8J7r+#l{%70q1X4H@9Q1p3YeMB)~yG0P5MZ8 zRz)^jU(RNFdS^?M9a3%$GioH3LTdB0z>XV@)+lu#*JOet?!{-#AdUc-1W!q zZ-wV?9wG+{1)+m;5f2z^U?66wX~S$vLr7e;_0#mi!6KI7MIf?6Pe~E{sD3^}Up-Z} zzl2zAUJ^7Y9Tyc>x8!R=%c1*c>?qLJ5_Rd0WkQaI zy${i|7kZ|QB(rW>pT0F)=O2A!sBx<>aUcsyrPfq=w?gjssu1&QJ5T7V%h}UYfT!;r zHS~}!fi&R6+B&#ExdQqRA$|yOS2Y+@=-lSQr$i4x@cUj26E6YYO=TbBF*m$jqMd$^ z3Ms|}fn#NQs2DuG)I+e+jAPk!x=MZL6v`D{%NCChYcd9R4jXgmS5N8+Gtz<+E5h1ps-fL4AkKP4uiUTM9Se zP6%szGgF6tOkKW@J}h1Ja!1{32w!cG8MKf9MR189;hMr$#0C3F&dSS=JjlFBa1!}r znX~K7q}Bzk6~^6PDHlg*p8GjdMkxl?r6~q95FKHCr^LW0$3hhG-h?7;S4omhw?R$* zM5Q{6@5i_a`sx|n`_k>AqR6xb>$)7GZ_H&z0)bLh^obf&+@w|D6E#@AzyFCEQmke* zDtj>zJ}MC*s&I(xqC z;wq(l*(G#;i2;j5XTTX&mXl6_4EUd~KP0*k2HSfOmGDI-uE3fgXAl?%EzBV4@3+^h zwCc&m3ge6pTRTfl?i($_sv#a}#3*J?H+ZQQC-VTbcsViuUSItXMKut@h2i8HNG}V~ z#_53+qSV3WH}RkSMb!{yMR*Y}^L)fBX9+U`vv-Yt^&CAkUj(aHtc)KrpedS4SD5yq zv7VfITtJEr8h9<7M5epUh*XRT2Hsd539ru5g`_jxx=Q-#rJ@H6jNMu^DKO5ZD_eLt zHT#ozRgJ{2NC{uH)iF4r`?gO?Mp3{uNCjXM_B-AaTe|x5QnGD?J7}{W7pP>6=GgcTJ+{hl+`xgrTWHL8!8n3-)mBXi|;?(xfEl_!fv*D0LKp+94-aslu6tqi|$Rw{eH&TH?t5@896U?@eNRf{=GMy>pCC_AcODhQU}U#60% z=EYqver6)C=IqRtCUxCL%r0ro%aD3t!?Cz%B?{*TwJ(3oe6Ba%H&oC_smOY zdNNa5QuN6;#Oo&2+#TtO)EnNMO^^$(mF`HF=B{TxB!NjU#4Lcu*9%I45<2689prT3 zg!1X;NtJrXDkdx$*by%;@jC;7p<8!IpqE$l)64wn@=`tVTn<5~X(z(L$fuNqh&o+& zPZ6dla@`J4Z8&O-?5JZL3%t@bl-y{ZOmTRrtDBIN9k z6BWVftWcrd`G|Pdiv-me=Aaf*2E9~>D{6T#Ype7(grsP?>MJkXh?u0$;od8s5980O zxm*~&4}6$7vasW^zIg#xsN2dP`agaWvXp|mhu2#seMOHu8ftDch*u;}w9FSaZtfW5 zGt4t`?Y(I<-dM0jw;?xjqCLML&W0%@EKWW)KYZQi)9Fu(+H}| zVn>@>NQ{#?;7SNn|LJ*iUBPvR{aiUr2E639Os!sA+(+DLLt@6T?tg@|@)seBxHkDA zW)o`_pN_L^MqGosL3$<*g&;jl<9a8h1_00M_YpN?lqaSB9o$SQ&kjBG#k1Bkpm z=@UpQv%)+E9HG^n%}|<^u8}0YaGeBT!9spjD#CG~7?0oDo8c%L0=bg?=b>V)+(RSdrGWB&aTLl^>O+eO6^ zQGEi$*cW9mgN17!1*^$4JrBk>n?S0FFbRG^Gw-wY&YJzR*5D*wqyB*Y)<7WJrMXd4 z_(3+}uHMkB(kSdwObRZ-hrQG)Irg6yrRG+70?}|Ztg2T^Iginl=)fuX8|D|OrTi1a zlchFuyeH7Ar0f`qV2$xI%nqjU1e2Wzc*)3vYRNkk*@Y^EsfiNok0H~(CG#F8>WML3 zCmFPh(9NYFrEHCI2!}j^;eTG#Ax73eAWm~9P+6I}hVPOK=WYmF@{+a8q7x(4$wnEjl#i3vbqE|OX@IEach&R!Rn13NL&mu-fu2CLTxv!86K7I{>OH? zxma|5#NosT>7OuDZR1*h4FS6vwn9i6|8bX_iY0$1zL-5;FpNfZZ*qt(JpqA zSnFORIcD!Mwmp+j3^Dy{Jea+-E0;wXKFeQcT^4Pv;~3A&@w*#*h4VPVHjOm?@9ySs zL&keZ;9;$PM=<|SYWAO$q*~$a-NI=c=N`S!^Wgb5(C8}uCvB9pJFCp)!el57 zlh|yC3;mlAPh#A3@~Vr|M3f?>-&jh%C)d#6}MP^6!qMTCtctoTQ8Id+*C zNBF0E$Vx09$H00e1lhpGC7_+J8 z@eX!t!n*iLa`FeNcf$)V!etXBCITy4Foj8&!ys0%1u@h^cG20j^Fb&W-c30}a4bB= zGbNt^o%D*0y<$)X|HcD&_I-w(h z2y7D+4TO>zVfG9WD5o(+AvTtGokK{_;U`zqmyPO0LQ5bdm((+Y){Jah`6T}hX}PM8 zwLmhY!?;n@yWSpNajCN4Fp`jsg;&f!>{M~>EPQhGcX?wLSBNaf5jB)o;QjnP~; z7#eCH9_Yiv-U|K_*N+YzNZjhxOLp|*g@52pNM_^ zQl+m#frO}1Sw^v+YN^{b7-{?-@)=+PwHO^R3R7s6V8GuKb7#IFRzTFH9EmQJAHmg? zVf{EA9Bn0*S>T2CW1$pLju`X1$O%nB4EN@|Vua)R+n-cl$+Lb9wPy9gaMy$4XwTS?#Qn)ZHqg&d2i^Hs1b^h*LdAPW1oJaNPrlQ8Pa1R2%0KKJh<{ai!I?!fFyw#5@cR|*=1);Djgd5X z8qvUkd-~4KyExWREk4&lRJsQ4Kx)+l${;?eIo6sLQTO} zru(u(O_AXKyv?YG{ECpGwclo9xj>O$B|`^ko;*iJ*+uS9*oWbXxtf6WMQ&0bQb`Fz zKDYjg*AC%MqIldoD@+Z`36|`L1WD&|?{wMKB~VW$J08u>$`Px8_K2e@z5}wIm*Gqt zMoiPS_5ZL*h-5?@W~|3yw)7v@*Cy7zAZwYg?)!(edc#I%Kx|QIXPsr6r{qWU7)ET! zw-OFz$k13(cChDwjKrkNC3viJBu$Rs zsBhmi7I#=tdiP;=MW#k;fYeLwy@yF}+2~hctJJ}_iQ#<7Il>7=%{qw7PY_mzOY#Kn z{An)fzewl%ACZIEs<}UvoB*CowfOXiZ(*15wBbe3p6T*@LhhC2>V{MLOk{)pV?C>w zMAt$8j&NbiQYR^3ZtA*?B69J5>1RF^FSl8?`ZbCflAcR!E&D;?j zidh$v9BO{;V(&Bc6?-3DB=-=@4e8{Yo2aanoxX_tl}jD*4H3R-Cwyx|NLG;a-L}5W zlhwK|QcmH#`o+>=mWwu21ARdMwF20+K#Z3JTzRD-3O~A zJbN!%nDA}=5R;#IvK$2t<--$|@%TSQzZVTp^z~B6`w&;cJJe+>kVf{Jo^Ue@^Ab(7 znH?l%Myq!zxLazFm)AjX0G;Pf`#6TrQ-dULe$*jkEY%U)Ja3{Gqmec1j*?t6GF@W? z8{5#j7QUm^PBaWgzqN<&F7PaT$P7K$x#9EY6`)({6X_UF-jvq`j1ll{ zikH`Irl5~;L_z|t*2DC5oZCD}fm%xSx@O^r6}bZ=RvyIGZ!X!bBhBSDSXyBhL>vf- zeYim%7#wZk8NsL}(cOEj`hSmx`mo)f3}JJ9G$d@U{Du#Pyuz|F$Qut4{>x)fZzBCt zmK{UTKI_{yLj8%uv>3Bt*0~w#YSJtTcTer|L8wc~HlsfjH5I-bV?rm=ZnB>`!!2Yv z5tgxall48_%)}dufE6Or7~YZ=Mt7bheUG6sQ+qS#Dy#tgV|0}f;uOH1h5Ml?`88I-3zolbk7Q74jLL)Og`E`>7O%!W@`IaO zg$d|Yf?}wD$K_zGUVRVQz4sFYR7cV3BiKcQ@W`?GwUW3w0z)62{1YnP)fqoVVi=Cv z)xh9vd}u8g4ZL_bmB4RA>|uM10}S{rbyX)br>~O~i6JD?yjLe;&gN;BYBd5z{=J@dAI>*}WPFF5@ z7W|#=vwJ7G?55qG>*Y_9)9Lj3DjC-OzDj!m|EK$$6P>=HJ|{d*H;nfMr=_Iz&2kZ| zVVc>#zIL;3|E!Rj*2kAq=kt1}DKEh{A$I{qA9o?5nDSJ2FM zr36{wg3C2PhxBI$IX9PUY|!O&+I{w*t1sVu2{qjKLROHyCpw);KIc%M1A<<*N~5gl zNT+jH(B%ud0t48VL56*Uc5|qUk71_EObd=>ThlepNo!`f?*=Xin?iBwsExu@GJI6_vw2`PM<)wYm(ev{$vBdQ8<6J zoV80;^l>J+T*FK!^$0F@c%5*kP!iX{nzf`5dA(5Vc{iJ0YS9P1>c)*e-ZWDsjps?( z&^l4&{bid_{QDav5~X? zDD0@Nq(F*mC^|8so{{QIajIo~%#pAbn4<{Ox7tQib4rb1*F<@EUtDB8JTG_J<@(!C zXe%{Ib9SB7&?%jPWmr(S^DtaJDq?PeaI*rk5a^_ zFh0>WmYT&5xkCQSm2w|x5~=phnq-PvW3%OZBgU=2@I9Ck1dL?7CnK%T6q@wLkF}_e ziOQ77$Dc3C^|`Y7C(nOl1 z6dE^qrF`77$@CM3UZ*z=y~EE9H`mJtA?@7zEZ4*oR}xW{JU))YK&%XTdTLgmw6rv5 zQkwdn!zZ29dQ7w=-%ekD>!~``9esE%E_rrNW*ldKPJ_{e9;Fhydo;a!He;2YwO-dG zySl8QZ&sD*oOR(JL8l*<6|x&`xF)61zHNe9)JIN67XG(BcG5Lz@BhF5ZMUmWmTfo9 zQ9K6guY6cTw%6zN<#rD>rZr~s!7!>S2u$#d^CihTmhCc(I(hOu?38ZI;j}=)8ZI;- z%koFf>m!i$a}hs5mi2KF_0)$~v$l_uA9fg}Woa3|`q}PK+iO>v(9e3leTFipczu(6 zxx7fZzM+*v?Fa%+`v6XYg5gf8ndD-a8tA)lct%?5&)+Z0^%PB@gtD8?o$GWCbh^@9 zu9Uu93qG7=4yle_lxwFOsx=7%ohd1keCmc=SBhyCFeglOrg$f&c9vO`r9_ zR4hlan(JRcQMGT@*lFg%D)nZ_y3O%@xJdrU5x>2xruIAuS!F#Dc{m)I|GaC`3)B*x zg!L?V_m}cOxDg8(CGGZpT!_sSfjU>2$))y<(p}; z`xo*9y9=fu3}c$JyRvDHduG@DWdXSqaCP^WoSMB>&YRf%1|Pd}3N*Hmxsb8J$FI$x zw8f1KO&6jb25y(R&zRLU-{YhsZG}E92({BT7QVu^Erq4 zoDNI!q6vmcMq2swGG!7?>l^BE4z-)UzJy51BK6LyefDW`m5gj`#r4b=iHT*7DCf-8 znY=9aP?dG0Qfr-@)_g8^lBnozaqKSJmNUot;Olq=c@SX z#TOvieYOopq@3_!rcROs)zr*o8&-H8&-|UXBwY6Hd{S*Jc zX&}CyJ(H~sSo}HbrJ0^JtmI$vw-9LtD1KtH@EHH)`;H4IB>-Fe<5$lXto>#KT9Qq> zH&3=!#W(0aR2;e^e&)|`mt@m4YrEbl&aYVO($q)ag#zLS-=7UFu1@RU%z3IV5~3am=#&t%uh^yboyTIl&>m_DrFy!rVU=hOsVMJU%^sGL)aL{wxpR-L?H(^}Duo7FNhaj~= z9#GbfcV8lnPYxj?RHB%%Zd~ptJcav!*#AKtdVZ{#d}cKJob2Ch9xO~w?QLdjNkxQ2 z>l{fxA;zNGoj+YIS$R-wC5zlp-$Pb}dL2P4X~UM}PSw#?j4+6WOX@9W`IR_*@YYpw zC7m}cBO~3o%?ixG z7PR!RIR37~c8*UYhFK%2MdF6vBCrMb(5W`O3lcSp1wisBv_FEMZ9gSV7vQFO>S;{0 zPg$PVGCtk=pUPg4oiX*br!tt^$RgpHN6T%w>X$Wh(DuW13v5&}DCA1j33(Pc0g*bd zJb~@W)0Rc)Q%hCsSyRB{f#iIktlsgF?1P7g@JRf0*Aq%sgVlfzs;EN5yBDw9c5*Y^#?5fkLXKDE#?VH% zJb5ED$#r+cZThPG6Kuw2QBJkkr14G}q?b0RA8g0Y!&4=M7^mR4PQ%q{%f~%`oI~HD z-e-JFK8t(B=rEGc8OeOAM%6(ywJqPUt5=qFl3n!zhiJul{zAeD+f+rkHVwS8j0V&z z%F(8NkA=CB8~?#F_X#@eAEkd8Cot-L%yv&Ecx?Z!3d&YJ9f&AZ`kL7$^%E{1UkPD( zc2#8aq{@I!GWvE-)j!jNr_!0{Ox1()@N_OEa3Xo%|D)aBh8bkuW>+h>$YR95oa96z zp@page@Tl@IV`MFOY;6Qg^2&uUH`(npe{bNdV$nCzb84Xa$@obasQOnH+dyM@e+rZ zk|DSZsQ;~gAZ{hAR$QwN_i@@}s*gn@@edtX`X;GrG}MAoPsxtisV&1#$On5ciBDII76B?MPZd}3mMeu(;Zv^dA-}v%l z*^oHJ0|>Lwb&DnXZnqU_keJJ`e`^;u>tG;d69d>{I_|d?eu--}_zeD(my*o(Sh{4z z8>f!4;nKuU8A56#;VpP2So5nqkdADzV) zHe`SOZ23X(F%Gxd`eIq2Q}8yz9*WhPMaikdqzCtkwFomSZe@(H1n;p{s*e%v2)DJh zD5+7nlLQ!JL;^i+J>55ycu#^*lDNYQ!uqWmkGzi;zAN z3L&8a)?%eqPKwg3msyKHXv9OWD(i7m$-Whh)W5Pwv#iB(i!H4}5=~_-ac5)>m)A?c zG>c`8k|DaFUQvmTMGX0LG9oyyu@<4jyAFOQ0y?e55@Ob1bfOlkwKxyzeZMLps?u5v zHcDroSI+~LrtWPNa^YaT%-Jl?Z6sq!-CM72uomyZ|LRwB>*?;Y_U=a2kEqvr)z?~_ zL)`_4lIm4IYq7WypRJlxPp*e-Ji8HYBvnk2X={=A=tRG;7Z0=+i|FirHLG4cK5QIF zRFC%~$w#Xb)Rp>iKfiPY^+$e3`uQK1tO@lo3!D1+AIp-3k675;&;Mw)EVQw(rJuh( zM;89TLIY=6i+_s64_RzvQ96eO{2t&50O=kU@H>F50MbD$;5fjO0MbP);26M90Hl*x zzy|z@0_+5k z?qdP1051SY2eN=)1MC8jE@T030PF^kPGkYE1N;m?x{(F^3gATm=|~oE7~mxU=}H!G z2;k=c(wQvamjKNG(w!{eAiy2~=};DM0N`Z+=~5QZ0HaKfGEJ*0F&#bUmCFL20XPb9JIMzY@HD`C028G6 zt2Fu)!219Yu#B^SCV&qBa_Wh9lr4S&a10>39tvXto&-1!kW~*^ivU{zeg|OIs|*Wx z0^s)mx7AbhTDE8e_z>Wg+IsT+ET{qK4?z2Yh-;Lswg9yO?F0Hn9NG-@5ztKt z=wqOlfnYR|9V0-01lj|1Fb@3~=mbzR5WJYO)#E^)0R0?@+;)K;1NtwZmw*n(p+|xK z1oR>hOwh7bJKLa9VUZ9OYe+JqO^hO-o0CW;)7tpWc(0ZWHfL;JUPRR{D1&<>!t;?REpodSviL3SfsJpyzZ=%+wO;?ToD{|)p!&^vMHM?il85_W88 zX=KN>Kwknq3-oRrS_AY~pzT1vjYAIswF7MfqM)zrxEkmT&@(_sHum2`XCNH2-FGm6QE;p=mDUwfSv?`e@u3~ALu;LR-oU-p_M>g zKu-X{7cN_^0QwrJ5$MA>v>Ye~)ByB{I24;RM=fU_-2&7WhrR|{0kj$Dqd3$Bv=V3& z(8qD;Jkb3>5uiWDp|5}*0Qxb|i8#~=^dQjVK%c~+4xk?bJqGk&ap)XS80b-;KgFT5 zK&yc2frw<53pxX|8fYWXpW{$F&_h5QfKJAtzXGiRS`YMD9QqPyEzmlk&*RWvfPMs2 z2SjMDH2>c~4+H%N(5X0d8t4(AM}SVpp;JKr0rW7?f5)LOfa-vL1O!W#wDmdAI-s>c z1kDTd8PIy5H9&ujLnnbY06hfM9*6!6v=L}E(3v>&DNsGoDxkA*=ube80)>Ij#i9QK zdJO1?K-9*TBYpz(IM9PYopI;{(2s#00QxEp{ShbvbU)DfIP@{lCZLr-U2*6mpv^!l zfWD4HZ9rRqmIKA&&>w&rfMUoy%i{vihd_-$Ujwb^mVtnt0O|r-8Haucv=!()(EV}f z_?$$w?j}np`>cRl2XBW6WheQ);ihh(?9VK0ys29#`;>+Ho4SRvKe6!WP2ED-f3fh` zO+7-{CoDeBBFBm!>IA@#0eXb8KLSJmdW5o%0X6~j2xT7uYzF8N%Gv<70Q3lDe*kCz z=n=|31ZV{45z2lK@B~1QQ1&~3tpGhj*>Qj;0eXb8V*oz^=n=|30B8c}5z5{NcnY9L zD0>g!X@DM~>?pu906jw4e*$a+=n=|(3$PuaM<{z2;8}nkq3kyR&jIuZW$yqy56~l& z9Rc_$K#x%NHb4}hM<{y>Ub3H3WE^m=YWBHMXdGyd+c z+C$lMC0DTfrhi=f_gnw#WwoB_&`RE;t^NNu+WXf>{QuGxYBgN!qWKN_-?}&Ix$z!U z{q`J4AQu_F^O_)3SWHFJ53bW$NkvC1#G;l;r2a-@EVjFkHtVc;aN*q?Q&pdk=G<1K zU7t>g5c?iV%zuVVjL~PZ)8AE#S5^xDA7P)p8?s64Iv^Y?kV*-!D4EZ}x|mT)^-5wc zQ;+|uXk#-F4JFxcNvn>ONiQ-E=fl0O*U=ayEL8If}#90dCg;DRT2#98G)ys^QpyD zU5ml;JQiB)N_8;j>oHS=)<0MWcLkT)W)`stMHg4LRO)q@OAgx#367>=c#|Sz3SGGk z8(;)WiTo^`tP3R3b%1AEUG%|OQo}%Mt6qrdGF8O^X=nTlCqf`c?%wRKM8!Dq*}uH)Y#Mx`;E@KI>&YyV5MMGK)RJ zo6w{t6e1o|Ox8{CU+et&0d*e%3aMF!0|B`6sIY5eZ05)kr|y_V{^q5g9RX4nVBVOM zYR72AEe%Z`1Uu!j&PV0JR~7!K%kZ96^C5Zhe16w7429&Sdk71+nlSR>s~q2~5@r|t z7R%gt8M;XJ8FEs(PCGH-uJb3WROmROxgXmvCxk>^%=ae<{v9X)g_bgbR?$a(u*qIF zX)Ny07~8!t?4)dQbFy{a$&B0XZoIFMhj0 z{P_q1?8uueL#H`r`##sdBGifXxcgtS8Z8#(2GwDk$(?!|b8>uLk{a2;5Z6Ej(_UMFjhjPJZ{=W}8hH%p-=2a0v|am22^G+2#=4cv(mI>1J1D zN@Zo5STuFPB+BM_B z`@AJGJ1$*2ML%MlY)&DY%gO2=c`eqkWXT(xkw?!<#SqSEQzCgSo{Wv~(U;;?k+UUK zZL}JdIs(PiLM|b|d_4T^L^b4+C6$OPFS9^$izFrL1DI_}89Co)G?7|vKX9*VpMFv( zM6a-1Ay=&7tyv`oV+^mYg5&gC1~q6eM=8f8`&#OJX?1<63XG;+6N>03+!Tjrgxm$~ zcT#b}pGWy59SPl$Hc#FC&e6BjZG}?RA}wGg$gne(Rz_NKkreg4pncuWi66blkvS7u z8@DP;d}*B;R1KRUIYkpQxYuctMOBUk<03La+*~KAN%5s^co{#tXkS=Y?e^POH*6+F zWcsFew~&n$>YV0*0q2Z38}RV;VF>P@+P&QtwwpVB-Mbt9ZaeCK%69#V8R_6Omin)4 zx+_Px)qDGoKA)tDnL8Q($hy&fBS=Z93D~0_-c-&zgu4o2<$I;x=XX=%WvO@-WXWMT z@q@u~b0-r^t_o)rGVj2U_s~bDM zIiJ`!=kwD4{`t`4zdE13=hZF3h)xjyL@t}z<8JlfvXu<3pC@#wtJdh!X8$kM5-2(x zu&Y!LziHYYm0L)O#;h7~vXOU^P@3kG%&<7g2{u1fvtP`C!~HOJ$TWa>JRCt=Xllhw z;J|BFDY2#@z7oc#i@izE8PFBwc_qQD)}4Km`u99FBDEx?yIK0hJ$WUPGTCcCJGZN% zJZq;r;Q>8@sU{CojWktgq0@O+IaPh1d^|RmY5NHidJ)=g7Z`CMJiqRjly%{&|WQf=2}5Z zJLQ{qsWZSFN@`Ok8S$tr?yN7x|II75giIZ>NZrQi1d_9C_n?#FjE_dM?30WkXFuMt zYLj7-Z4EOE^U+$?u$ka~(xWo%GB6>Hkms^A*;m<06hd({puI27mMkRbHF2~aGl`YK&;dEjk=ObG_`c~Wc#J_}iSrL2_mw${kuJk5ccW=S;hnaqNOqH_3U zl$WT@%XE__>G=3c002 zBphs;x;r2uzkXJK9gYC)VbzFDWm~|+NfAvyCl_~DySRbYq?csc5w)j2DN?CD(+J_ zpg(ZlqfYU|KMB3KQ^&?KeY*W! zdIq%oWIgT+e%93Vpi_K}bi@R|H2i@E{~LgnK}ghhuW_1nHqXEJVfG5@%7<84dUt zj4{x`cB0q6zw@cE*|vmpu{Q;l^Q@+SG+07^9 z$VkQ)36gnyajJbw#?bj3X!uE@UBm>_~-7LZ847)r_V~C)jYY*RNvi|L1QH1PHnsU=s0CC&6(l6JD_~u~T}_#i^bWW0<;^3NLbc6`hi_T9GVOLc$5^ zp3b7QS#EZz?JPDJn4u}z26chDa^F#i$OzjZtIn>cqV>S%NDze|HB^m%*s>v}YS&SH zYgXwN%msUq-fu$*cH&)#Q@<&`7a$t^X$ z+-R_n$qecW%rxD`%(HbLrW=W8@0ykV?hJ@KXDDbmD+?J9%PO?r`Yfz_M8e1_lI@(KDNF<9g~r$}nl#}4;Z%4k1i5f3vkm9j z&$Tx=*O_JvJ;TuwyFv?v81W`9-57ZeZNU~)CztJKZn!!27sLjMx#0)-uy9~>i5g{* zAD1gbSZK$^bh)~gx#JXqEFnYH1VR#7_Z>f>+{^$B(+H@^K24|~@tI5yxh|Owc=*JM zi(+{AqH3>jU5@KAvd&5}^UYl%RUp{yLPQ-J*GB!YqBEo<`LiB$oqS}J(2g0NJ6&qh zaSRw_<0s2F%`}DXHOimGKFOiy(*C>qkV>|^Exu)SA)DpP9Eqq{0D~8yZs%?Dly5uN z@*)GIfD7+cq8(bCj(()7J$T%uJn0uDo=f zVo%{r5k3u%hbvx;UId}_(!88bn$(FiP$=tk1v(L9R0|LXICD-eo^YV zQ^VrDsjtnN_U-NNG-rAacW+XhNBE2}@XS<<5ytH?$(^+-r!J;JUX1+TLMbRr3Ik&K zyd(y(vmI*wX^Yaq&&Y#?CR6qAP;*YlpO!J~Jix#XHTyJom@Uqi&KKnwu|HE?-=XH6 zX7(1nahUAbw?o}?n!AE^2(2IpazlsE^P{L->}OU_=m3J%uk5sC%aQ{!`q?Crmjv4i zW8_(@Tr6zswJS;YWdJ1(CI;(+lwI>Q83Vd_dGG7gC&RLF7d<&YUAZ>WgNM_DdBnzD zU64e_zpp3c)tJzwdXow(-&bQ!g|<&eDI$2;2}G@D5VK+Ya6Cb%*Az7z{?C(oWJ&2F z*BScpAqMnS6)0;H@TWVx(R(cE5am9%9iMa|-cvH)D?f=C{kdm+ew7C~1FR(iggVEi z;&n}yjTrL;YG$y$lv2T^!D(vRoWUvu;X_RytsJ?|JFJ$;j`A>E5A%3&&L&!W&V)m! z*ozN2QGCdhagHC1=OD+kqCj%h^ux3vg`P*|u8glY@mye7ka8zhIUZ(Ec&#wCTtYqb zWZc_stMwQ7#&3^HKUo6v7#`KwkP1FyC#OJco&BV>YFarA|$}L&RLdCFTe-O*<{7^j3j#+aF>Xavk zzQg!8N?u`Jea@oB?XZivkBF;gG<{xVEK3CQT~eI!QHCnagIYYk&k)fcC#btSd8`Cb z_o4usrLF6xqtM1uEsK)k)L4?{Q@&ys%H+*5`krC9piS+_%4m)~oHAVMUDX9%cNn*y zVcW%Q+c}jXU<&&nGaWiPxA=CYj;z|6Wwyh#M`Yu&`XVd}s~!W0^Z-}v)2kx0Yv5C< zL3}t75}FgU@`N1~N$bWrd3sgU`;^nRQKS7FFtG)p6n0yoDaVTx6ud zaytx1;uFf&VY{2zv4aUQ>8x#@k)-YyNS$B0o6+-r+X;SmEKU5_T5#A()aj+$4RQlk z5%5p!f6qTc`a$^w>G@2yep{cm`Np;cWk*YWM%yd(#Ehh1=4zBrhdFZ=gf=3uUv-SJ zs_s>l^nWq;_Hj{`Y5%`-o}->xnfA1+31WbQ5-O&VGQbWvR*MSgqJk3WST>>v4Tw)j zT79vkS~P3B(R6LCBwH%&-Y=SNEtZx`t={cTt?c%tO|zRyclQg(0Qdaf$2DNqw!8g) zultYR=5k$gJ)YP3cszWL&#|Eb?r;&PZSJMCcbM?(`uLAPUr6iC^3-MZsU{K@5AejP zWz`?u4Pj7dk6_cE+p>%vG~z&z>do*l24?2nbPVTo-&i1NnVsi)9CN z1oo`i#)%zxK-5p#7XdXFZ_1!!{4IWPyk1g(<%`_36T3>(vi2%ge}8aEMvcud&zjlj zmSQ}>yNLn8;d*vqT#PxQ3)0QAo#u`7*|B1RWL?W|0)EUugO)aiWPjW6okUs7?8fm0 z(AH zu_iovDlUxpJvy@h4KbFH=ET0b7jTgn|H1E0kmb*W_-f5eVg+8qU|~G^W)C*v4DDL1 z6SGue7y7=h{?92gPVQJt>UcR+p6-*Z=1l5y7ehCSu)V}zA~u-*u`^GO4Mda06~m>- zeYk*~l5Bn?+T9#6sO!m|#QpldY!P)Z0uOa~0SBjR?_%T#*5_F=?_lehB9iQVsJgPd z*6&M7N5wJYgnw>o6o{(P8qw^>d=&!EFUv1jlrDb+ib8usx&y@48R{s0ZQdKgH9qT<>0YgiiW`t*fU~ z6R~11P#-DXk50=w)a{hA3v~r9iBz+1GO-?!@Dy(~sZ~b3op}S@?JV{Ur z!GY$7$-srVtKL+6v|U!K>KQVT4)e%CHj*9mMiOh_W^mJ=hcGY+Ex0C@YEm1t_W(v) zxK+9I2DkQJfL2W{@2b#uGwYp+u_$}o=4TOD@>m@QW>G^+m|IeKr_Qahuh91%p@w3_ zzvWts-|Nb~u$?B-G-^M~F1@%P+%p7eKubh@Guk*+ek!RsQK(i%GmSjcYPKMrqO(Ba z1m)=xkNLS8(K*ZPsxd#;iD!g9I!;pl4G)|MFHVH^60`1{F%ezQk>!uSZy>ppo&C&S zNM~z;PP5`+bB(ZSM#2zsTwgB{6}d~s3nh}My~w~TngoeluiG)?Y$DqyB2mXwmDaW# z`Zu!5lnQ+b|6tA^#Li)%p1=N#?3{yGX&=m${SND2@~HQ1jy-0iei;Mo$2LdxSNTwE zi1CG-04Q=Zv-R~S%gjU8k9)H>$Rqo0eyL84?8-~ZHIL}?Q11Oyd6>(^hHLRFL*9!) zBY47{je3KT6JMQmWCNxJ_^5;rIe6f|&`z2~aE%TAZsPZY2>cfRe~PJV!P-uSyakNv zQtJu7v2KtRQ{Esniy!KnmrD}8yDO2=1sZ0ZdCj^mu~b*{k-O!Gd>Eqyo-(;}kIhZP zNyN;@@E6FD%{F%))<}G}&4NO*jy=s)5dpzGSwDC1Gdv(8bX~To~Sg{>OqAyMkbf3jEm*! zCZRA{h^1NQJ%cxj<}xtln#R2dc#1YiwqX9{52y0M)H7#Q33W4yyR z3S$raNQ@klldsZ9YuSOztTa2gTWPZGMf#PpCRnCN2bwXoh^z`#G}elfCI*`9`d?)r zxL3OpsN4c(S94xX)+5CKVg^^_9jXw&S3!2g!&G)Y3TQqVJh69l%NS+yM)x~YxIIj?I0;pgx`Be&&3SwP`hz~Gs;X>ew}u0)QKL%le)U+;pwSCpxkJo zOREua53ny7(x+1pH_)|+2a-@Le6twNR@aExLR=$Px~U5*mL&#^maH{y*_m(VKT(Ep#yA6%1nzQn@GjP z<<%tWO;5M`cnP#n4|!+>5CGBLPBo)b4;E8uV~Y8cNw62g)E87E`inX-uUj9Ya$UJg zpc?i~r)ekXRxNar&h8iZJGuMq-oK_Lva8cxqCZ&!oTQAr_SFql7}n`N^e*c+UV}MPq7MZ!b%kJdSr&0ia`VJ*-V8Y_M2^hHC&U-I|w{7T+wRpHn`HB}ha z^SxzHnou1h(3bE1#&$%Le|Xpy`v6r)%+_v^5)!pieo=*^1te%oQL`7P0XE4U(*BhCHJSVuzbtM%bEPa=l5TjWS< zWY4~qJ|*GP1hGrFwwG{F*D#mM>v}|v%KyG`bS4KbyHu{c-@5A3b#lnQ4#bU9U={_v z0mLr^qkPNM(>B=2I!qa|=x_S$^u6_#N^B>AETD;6gusi~aBtE%en#M|p8sd4==Kj( zA{tY4dr3ked)PO8W@~fwROfh*z)gbjO=Z-RE;Lq+LrAln4HgNo_mMNB}cYAioAX4pxkI<>$D)AhbOfP!N^2giIdIq#D}687Mw-8P|<$e57FJT#k)>$GK#pk*+FoTp4r3m@AQ)v zfkL?#vv8}pZapm>;Cg)OrHXKX;Pwk#`=8groOB<=|CI!FsG033HF7mR6b}A~NEGho z(E=VJb`w8goG%$>B!D*k0ayZjB-KlqsVnlDr}rd9NcG<$kREcEwAGoq@g^oS6|W^e z$dy?5L{3~8W!WhBo92DXOu;NU-ZDu}O;}iv8>x=iP$<*!TT?4JlH(Ll17ALj7-fKH ziuGcGNp_hNDPFw4s}?T-b|KRT|JXqwCY{LA`o>9Pi(<@!WDP(9SpQ@O#R)fu(sCr4 zt4PeDsubCa)PrVb!M&e$kS(hqS1hsQ zJ9ZXk1C?-E?%X5%RWryZyGTr8Zccm*`Pbrt9VX^+%hd7bKKRuB4GjzjLx_i$$}5PX zfv-ASj4v1)eSU01PKiOt#WIR)>Xx@H%oZOzUWHf>B}{_TR4#f4fw3BG^V2@D<~?s+ z+5KXk-o;I)`jqn7dk&(W=w;dBHvuwr;5(m|;GqZtGeK;`54O9!l0ug%Odoy%ld#g3 z@I(QwxFOyZX4Si$Dyl6JC;W|R0@eWlH^M@gk(omT)0Zy2g`#4;k#heDWEq~68$46D z1hY&Ra*vE}?)h^ccOp?2y&wAZO~2tLR3f^=Xpf!~MLbuXny51`RnI^E9z0dU+@SW; zLG2?*WbU#m3m`tz5Ds>$Lgnew5SMCotgzJUA4d_CP)d!g(hu5VO@p`Yeu4xlk&a8F zB}2~5`i_59fU7-(eDQrx1iugHJuwBnpLeZC1FGPq-Mk;r)+A5LmdCibDtIwK`b3LK zJXpv}S4(McBPoT%WUQ{lnhKjW`maad?o>;4R7Y=@`KNVqyHjR7H0??7&Eqb@71Gnw z{^@N$7K{n;nks>|g5*+9`yMrLn1&y)ZOb+tvR5yP!kjawg*9pT_j}`Pr_M^Q<0($KXQ7fGth7TS070Q9-tHhW8qfBmG;j&4HqxqO+WY^ z*X2035QdJoN6H0G4!!csY zZrdU{G&Z4iPQ(B`zJry*{~Z%EQz?-Gy#*#S&wi$$-^vt3thgK|x{a{C-p+CPoNheH zn1ja#pDc#)An1x)2_%LTE6N)ZUkF$Et)=C=*B<)Ha_1IrFdeV8=KX`2 zhzqf?3~jUCDofQrd>+Z6FwXt!>!e|^oJPdzp)B>R)~m90#@`>h(@7F9df0<>0GXpP z=>*q)2@w4+8@^b7Tt6piO9P*PxDm4&CBu?g5Aui%SJ%p) zdNU>6TqE1b8D>a^NkZM6+npFauuq?3`xx85ung+`7}S1i+Ygz-9y~Fz0br3YVZkwb@-eU*3{BgL zO(0YM=lTn37(h-*?ZxGXFu7S-MX=HAN1psGg4}-8M{o^)K-m7wCQq|=Uk>gza`ZP! zzra!1-DlI}1Phadr-3 zL@bkhB$P=-%EPTf#r75oyOv8kVs$oP7h)7b%_d#mM5HMyvk=(dS+*`(Z*!OIagl2HTLn7AO?v?U*3%=bl0FL-W{A$KwCcYK2<%sMpVw{M z=IS@rPy6OGe@#z#cKuoXXPZN8TmsY4ul>{KyldN*uIm^=L$<;2B$!hmyhKNg)BhXm zAI(qaIDDz~uaOh~{v9WfU$GA_mIS(jS{df1*ZeYg-8V}(T+ZzKt}~Do1biY{!nKL` zanoryZ9K17y|Ich6c;PqLhof)`XPeLQmj%T@p_TKsc9Wj%YLI_2e`{dy-6aBgSOJ1 z?>K$wJ3`&9Ul_74z02Dwd%MiDw%C98I)sm$n((UBjBma}x!*K<=vAZ!ys@{xS_Q4V zR8X=0gJ@r_vqCL00n)3cqooF)!=T#nPd*Y*3nstlV~2HGrNs9K&}sD@>3Vw4?N@m8 z)_-#Q1h?SnARC}wbHDdXW88XH4NL&wMXOQ?G5=PzVk^G*$7C>J(`cg&G9&FJ=Z-W9 zq2hZIaU4w(G``HrzXS|Qlmbur#kZeA$o0iPiXHMhp7VcLhahsnUA&8Doe4f`7tgxY zfw2H%x7D7PO%T)qiol~xtfKGyCvEx~#i^olzhVoQ0O~kVvH|H!R(Gaj$*|y(4d3op z5DmaTxXG3#eI_{d^~{X&iLzL8N@R_rtk+x2?)M4n!nNWN?)Cug!28Rc8F_@Ckyet7hGn3e^`=hWaxw7b;?o6hxP z=rrSHT}ss#%1-IWt*3OMwDaaa*_hho&7+A#?@$6G%_6q|-i)4im7jHRSy=EYiB=cx zAHT6;dx{IxYHmRP6o^X{!8!W#GCqN|lU?8xpaty&ic|F$IEJUH+&KngHl1#L=sfi^ z<(~&@pI^P9JM}Uqjf0Btz86%=MV1(XD;%jQ$HjS_+C`j5WS7`pmQ2&b;(gsFW~B7c z6_DG;i)(I;vs(aT_IRj4#RuDfi;hXRte{IfFcF&88M!-5092AEe5~t4MTA~=;rQ`) zLDLG>WgfOQ0cVtKgoqblH7`F7D!9O$$f!1dolTybO+_OkTya}}M;0dJeGixm49a{r z$u5z7V(sO+Yh{gECQgogvjqbZu}$%B5Ya}aqJZn@EDf-96vd~K1ySIBb|EBp*+&yq zberrT2cJ_DI;}JkSUFt=g`#}17CU)$;r$TU%`xv2;NFPEM+6v5ZHP!NmDNT)@zv!Q zMp3WygE*}D@0(m)jraM@yNm*o+_r3Q#jqt_%Lxq&1psg@Mx>SmL^+rTK0vg@Cfu&>$5I;_r~~L#g%3x7 zST~C=<_d85DxyQJ3Yd|ksn}>%N}-Gxl7|PZn}!C|D(O@GPMUnR5tjau)f@HX!={yp zB3*VJAE55Ms8$C|QVhU@6IH*v<{$}@c{ zONeWb!0uRm&nf;Ej5lJ-3U}9ww6SVJN+z=JF>v5zOY_G`CW9k@_<=9vvJe3y9$R2$ z65>GuVoB4-w=Wlxv-wdVCz8m~tx36ObH9|DB>xzTniQ99~*c*C_7VV&ca32D~oUZG6lwtdkOa3+|GXx)okm za@Ba9e_UTzDp`}SWuyt}J~M8zc^>k}EHkk<$tP;u+qgxRnpj*}-j5lw)}-ffy(Gh` z{5ZI=XJ@6qqkp(LFlqDc1UQg;7=V~~!R+Mq@tH8)Z>PYBua;luEZG@vE~19+SE`PldeG0_Qa?4AclQijz>8<`A3=| z5vJVj>bA~Eb(7%hZl&c3Sz#81%Sq?MH3-?9P;EUkA$*27?(D~~1>NP3)S>ZUMzQkD zXMdz)tD36ku@}*Ebe?}iq;@y}B_vjU_p$Dz6Bbu6tJcdqoRi>j#8-et`?4#VYO=KQu8B{oT(o!7|J;sKvE@ z;fG-QBBcAKZps~H*=i##vnTrf19J3N96ipWF`7NUXvrJ76Y%Fvodkxf@qQADIy2O* zohq(VP3%-tWR|>1BIX#%6Qw=b#`*O_3>L4N+n!GkbD8Z7aju&pN+qz_q=dOKN#JSD zs2`J28a(9#WK-7twwa2D7*AkVrS3p}MD=XPcB{xha{40t{kb^4R{vQ5;iK_egR}w{ z$47-Z^fKaD59?e~nK{r~7t}EHa*du(3hP+5B({o_ZB`8$4G6^=9mNJ|FN&k};@V$$ z08IC3`oH)onh7|LzO*-%zC=2X1Nf~qX)z`4cqCTbr8)&5zZ5gL9ZN^kQ?kUq8hSAm zi&PCy`n~m}-o3GYgqb4}`a1Ux2{iR%{dBCq6ACPPFnG)|mM8(qZwOB^e`XPXjVs=@ zx|~xaAYyC~$$0WFIDXoCa_=6BcDi(r2WA^$)aWWp3BLfoQ=c@Of96hh&FzvSjM^1s zz7#vS9V>y^NF*C=WLQA|z&CIdMC2Y2HEvT@#Jos`=;47PnK^A)dx&5PA{=C1w$6v4 zzGKI|ey?dGTE-EzvY=LtY2Wqsw5oBYa@4dbp`*CMbhl*XlQX<`%_b(m>w@Zz>((tZ?Rm1%P5zQ+K8Hml7D)Ihz~ z9I;>+i)ox4>UO;b1gBfg?^5v>k5PT){;k_}@kSi(`i8@%&0PC@UFN(TP%>BV*M&!5 z9Uc&(asmzdK1+!%P0wRpU(Jf@sK}Sr)^Idlz2Ox#sY^NAfK{pAiw8^)86j;du`O|X zB>`}i_Wxzmi&p{k2=5pJN|xY3XPtRAS!H&=EV!(^Ks9qtu1Gy=k4)`>Ti=4~P;k~G zyYm)IO(>GKeaa>PuR)T88I<#o!y~gl6?U&nm{L4T24UG8Vg# zdy~0mY?ugagh9BUBs$%KeqAfcm3<%R5g-lC@9h;fJU8j;9UB!VRgZTZZ=DvDEnqp= zH4)i@n-KB4>CO8{EyX63KO!h4zpG(>Sm(5Fvgw&;>BBxXr_27ZO=2uvzz&=L1C#=t zT;B?VhFZ`Kx=r2-;U`(@?QDovKpJ8Tu$CmsE&%iPM{HP4nhc^~KZkjv)l_UcB+=bh zIGRbgWQOz6%+pYE)OsZuqhHX2`E5)_;Blk7>pwH^$<_TfOEm$p$rD(JNEcb8BPC3= zd6tFQ7)AjlGJ&YM)#Ka(Cu6NERnG=SetSSpQk)`Gndg6Rsud2lCmV_Od{Ht*HPBib@H{0}& z=oe=KOGfFwX}Ko+gJjTE`OGK?&Zg@<`T~&n0#zgFiw>Fa9cZK!_mpxm6mG($8F(vk zuKCMcHN4YNk127Sn32|`*Ucd0U>u-@S5cu5u`t}Oy1+&a7f5nnM`nVd;c6HK`nqE# zd6RHUl~1r&GCTp$M0x0`CkU0WFfw<>DI3PNZow%VW0I80RQA}`=d6!izLThA#_Dl%187@@b{=Woyu=xDBB;i>EU3Tcc@a* zbAM1h+a$hY^wl9?pGF3f?@kRPzaYJ6IU`Q~p0x?Gdm{Ryjzo?uF>e4OC3Bj$f!UZE zq2?Tw4@>1>##)X{C90S0q!WBNhZf__0e3UjKgwJOO4uxYBVuoo8o{y+qT18ItPO(6 zGaHpuWU#dbNpu+d<2L>2`r{SME97`t9knR;X*4$05~S4fP#N&{pV~AcuD6W2Ev9(nTWs%N8!J~~tp0-!n2qHvk85SsNmR>jv zd`_u%MKVH#vV}|niejzOK~XdB?H*< z?6fpivRtY>p&}2%e09+|a?}xzcNM4~6Ao(3t3D@Pw+{yZv*3X5I%0V_bAipmU-+}A>6Q6ZGr%(7!X7`+YoyCQN-av~idnxwLm#^fam4uPOR z!d@K&etAWw>gR4ot&3VD5gI{CEarms{yFQz(#@iTq|6lbft1}Q*OiDi=F~qt#vJc4 zx%MYnO?NCTcbMA)@~Tyh_Vk`g&e|CFbcG|Bz| zM{`&+x8N#~pF_^beu0yRK{2seeynJc8M{Od=@DmSKQ~B;0x1fQxxsB`4!^60^*O*& z`ZHUnwXVt{4Ku$Wae4s!azyeQ^e)}9ZgblHZ#LCo!&nAJ5kCf#NqJNqf3Jy!>0)^W zs2E$ka&$AJA(cb}rJ<){HdGzS3m7RUET;Um6D0ns+J-VvDH_U{fEgZG$~+9G{HPA% zxxBe^Q&(c#{elt3WGhqod5Lq1M%Y5n_c5&503IQCJIWbaH@c_<(-28o+QuKia{d*f z(J^muVerrjKfFHDb?8CL(`nys({JlDq_N$0^=AEFM2l~`I$pLFMh_IkWdj*&_5D{L z)&b7l&pEc6zL~(bb#N2mF-6sy zxN2IKDc5XBMFMZw!!K6wD>jTGTyAj_Y{#Z4hnQc{ND26GvOk;9b}MRae5b@OFYnSx z=mi0DRJjqA1!V`WMl$n}8@Tt+^0zo7rlK3-FV9q*CYg%o73krNTKFhf9Lc(MGg;QH zOvS{C5C-A};aT02@mOyIWVj=<S0%j7-dDuy6ecM7yZm_g zm#UD?FZKM&a7dhm#Uz(x4O!a>2a}d%NwM@IMy0A&z z64)Xv;5`3$marw9l{xlSOOJ|u<=2gLA`#-v$ho6k+yD4y8VS0iu(tWlpRkD3;siXD zVGh>5XeNGvciq0jrni=*OKB4-#fLl?s2{5xV{n=7rz?XIh8&oR$33T%zT)92+shr z&Z+T48V~Cf`>OY?>J&A*%S?dgY9PY&j)pkb4(3{c(V`aNjN~|`xVPVtHrMoux6Sp| zE_lV3>1N}U5mO@Wo=fDY3_i4JVygT^x-X_;gjk_(eE4+B)BzPDVRZ4~#g@zjI|#Ax z@e;f@c(bIWAI{wbESqJB+1_E!VXJazYDqg~Pa_Q$8DK{=gapxlWcDnmSe*GqMh1wVVPyW-}(#jUZAWoG#Tl5{pDm z0-HO5!xN-?;GjZ|L3}Sw&lqP(#S=ovz-ihER3$za3z|ew#=XpR%ycdJ*vnijR|AoR zvnf4+oxBAnNS-Yu09NeBcPbj8}I+{k&NYmrIdIMLg=Fs*4UDF8cQ zlZ$K*Gn+`JTvMd4*@jKOZwKZRCSrkgOZ2@jDhG8y-xmdSfEm0%--noO5x~JD0J05A zG6a%o%noSAhOrCDM(;7~yE->phj}D8Yd|dFOA7?Dj&8-jq8ft7$w82JO5ft>xg`w` z1sBK5Bh&oePt}jRCFMJ5#h()Gs7JS2OPLT%E7V6 zNrj;E(?PSVs7`?v5%JqD!DZKGnS;`Vg*6(|6J2% z>_E!Xd5iUkSj{r>_2=9m;L_YAb*o>ycIiY09TU0hdDKR}4GlP0spwS8F>|c0yzE#G zN-irN^$sX9R^Tr`bj#xpmWO)F##qpjYM~DNyiW+hbalTUF-m00RoRS;gaEOi{WnN& z>c2c+l_N^&LA=^>f8dv~y3Trkj-=h@8tta@vApzWT<9{<9CT4O!$1Vm>khmA8i4`Q zxSq}g==y?bJz0xMmPsGOYZh2~2_iu3K%69;!L&Vw9%y1}RT5B84ral}Nbk)QdJY7< z*?#Ctyk@}{I)fvQFZ9YL6CrBb@@z5xgu`0`Pm$N4vG4^~EcarC#0QmyId82$$(qTZ zB;M&^j<3r$Z|KQqOx#)+1QBovxbR5YLS8wstCyLiFOh3IrpaLE&oCu`3)ghl9WR{xp5vHk}Vu!pA5Y4Qf~$ z%P;nv$9a)1KJrJ)j<8J+IEnUl#0$lN;HN2W;bQ0-2D@L9!`O(*Yh=mH2hpOhmB&fI z*y{8nmSRk_l|VD$!m0sr6F|I4ql2DaDgUc#o+y18oL5PuiUbW0qaC9Hq;wRpAL8GS znA~72rWd2Jx}#HHc}8ks^^s&faHq9bx%C#5P!Ue8PL5P6^SCd2>!idyp+^{rfrPtVr3WTEN?ZrQ?9 zW@PILJY`BrMNEaB3U^Cs_#?F_fD)#PzXvJxC5$`4F^RAPTm^t%m1xHj?DI0jj&ALTkMzZEkfHudXIB@$ywUTysQ^-9?Y_=pTM54 zl}p9EEtg`e9g>BQXa$6<4&WB~oR>>EE=x!8Suu>ax{|9M+P)3Zn^#S0!&S(a+e0jCq{XbIZtW6EjjOWE?k$N^7iKYk)YvXH zx=qZTVHdNfI$f#gfYj33CfuFk;4Z}aD9mrt)Xy#00^=8laY=@X-1dUcl9U^-wE9vG zdAa21f#A^-S7s&XU-v)EVF_orB6dF-S7YiV6T_vr5+C4zc$AYIql!(>^e-pbukI5Tb>oI&Hi>oDmdu` zfI^as-}FH{%&wfHZ!h4@dWBOe>aBdM`VJE8w#qtiGI-#Z*JU}W8{yRR2%k&-V*P_y zeXlc$X;lylnzG!X*ZSwkh6&MyqG^fRUkSI?rz|sY>})CZ zXWsDUz?7I?C|~pC5}5nGtis=QO4h-F`0(GZ-znZzQ|giwei+p7Daq@7N(7 zR_t-5da+ZpKzgfHW*bI-3<$^r_0=h6w*gGf2{WWntw5DPZ8)^BP?dKoP!s(z^uGS^ z!hI^$QnXo+I5>o>w~B+EBG@rax1PgAXuPdr@p(4eT;(%fn8k}YRGz$t5VLT(0 zQ6#rxVsb6xj~am$P+aWkFmVN-W>6z}j=6qo;-(i&YJSE=ryd*ql8_^gT@kB`~_qP_X%MlhJFp`-&!qi%JQ`)ZadRy6>-lmA*F!-M8eg zDvQ<@pF&LcGsgS$O0X)Am?@-Dy1-+1VzDjuWABwY62-_bSA%o)*7wHC1!ZGZjy|5Jc&5-FciaYVf%d4+FFAxCmx=Y(D7NNoC z*R|HoAU7j}oO-HZVn8_(jfA+!ZA|$Q2lLDtb6fEeM-ndED3KzRqncU=qjgM8Zj%H7 z1D7w7>j$00=!|{xlq~B5-CHPm3lA0zS+9!%t;3fL6+06XKSC04bn+%%O#(otOUBP6 z^!t)(%b+6PI*go!ZG^Z28`)0in}1Yz>T`S!omVUe+kF+L@k8ska7F|V_<{%YbpTN6 ze5t6eR6aa}C1e+0yQ_kDR&HSV9lR5xlux7`$bn8nR_Luh_&&ao{0|GahnlJQs77H< zMrZ*A)LMaG0jE$kW38Qtv<7r}KC&OL{MI2-JbJ5lr2cM2DxUgK`V&2dBW6e{sk*T_ z#)nHFKV5Nt2NYG?SQS$rN$_nEbzv~$pt|k-xD~WCl_eAoCcN&TTGCdfuV9IAzFx<^ zcMI_}ngf9hUuqoJhLec82*dlyj583F}1~w4@ zEIYK??EP|UoGv|!^z#=>uBiSppjTXA8v5HTy{<{-EPY=Sn24-SJsiB%c3<%d`9SI9 zYy5xh2#&7RXIZi~<0u-}z7OXMV>~g$v^IV;V`<|nOPSo2g(A~;v7yiP)^rHKw5I^L%yAu+1kq$kT<4kQdH*G^FMIL?6QokesUv{Mwb zxN6#pb$dE|TZ~MY2)KLzJ%2~RJd5n5=Lt+Dt*7x7A#ya}F3A>GbBuWb&)4q?g?SGq zY1?@UF7%2%e??a{siOUA(nVRKLYNCaf}$ivE$l)S!!*|hDGFcKQeClqyB=3+JTH$j zarIw(sY{O^yt5XtTS48Z0_C~5;!Cl3r=LA1>yWRaxL8M~0VV(X=Z&Qp1o#MNm0R z<$0?qy>x>$XBpTcnTDp$8D<*br}g05|C)D$)Nt zSR9~B$5PN%NDqXUP%daN&plpoR29%?#eq?|d?SEFPgSY`BQGi}9=`1B4C! zV}JsPGz;_Y+2VWGjJ42ok~~2Si**AxpamVfiUOKniOlnhwPz7qKfce8ma^-r4))U7 zo@aZ2?HRT>@poMnZ-2(74=!6}#cA&ZI3dnp^GO`>*7jXCy`)CK7SGtQpuzEvhbLf_ ztj^XZ*o*5rxCY1t$(j6?%jcZs=aK90gbAbr!(4#>2mi~1I+ow^1@fO9lppdB5Y260 zALWd&qF8tFd;{@Hc26mA_E)2;aA)u|f90{?|9OZ~-@cjO-zd|ir~O?y_FO8*YW=70 zD8{#+^!>i>{!35YYt!$;v+%D9`28OHIIN7prsJ_~|6`9mx9+mX?qI_DpDFE|mp}IC z|JY;y?efRA{Et2MZ)-2Bge~^}flBxu{qp-Y`}0=OXnAS;pW6gyGle-}hZ&3sZn%?zT%L}a7-~{;fb+3NvS3X;g#q7LsIM2GsS8~8;|(Ll`b6Ft+h$c9 zFk>HW7%6VWzFDU6@e9?ksrRB6WI=)m4MSu!ORmvZg?#f7BmUn$LSM!57H;k@G_a&2 z;vmEU<1};QWa+wMCs_tWzFC2lI5p0AW3Xf(W=CO9i!(sgP03X1`jeN%D*yus<*+u8#J(OKQ%~B>hxRykKV>O0r0MH=8Y#s zu^Yd6!mL@dMdk(bNc5x03f^mL%1^5}k?VlJFtS;h;^6 zojb+0gFH#p1Ex6k1;Ko4h^cK2*APD5;Vj=GpTXBx-zJjx)q4f$e63W#(9to`ti`{I z3)H%HqhpTNxf}IO@u{sY3=X@<2j~bVCvs_S9AJv7Ld2xZT$H3zG%9u^6#y+aMnutH zQa{3;SQf{<`s}mZ({o{=Geg>bIrbQ+TX6%&`r?{ziHVM& zpCA%1^-lxQu76TMrh&}P7@ZlVN5@9a^;xE(*y#_&RdcN#oF>xeJ?Xh|^;N}v01~rl46H!KGfNMfXX?FMs^;nlH>5shUc+`|MT{F{p`eLNoZhy;c1)Ns z(m_xz0gtKYSxyBG8!HU?);0RdyQYA@>S0yzhn7=Q1REAo0Do?s;% zA!qwBA?Li>t?xM?_adN)8BRJ<)lxkYVLnQF)Ohv$CX%}V@d;h zO-;VwCh_botw|p*{je-OAI?i`mg_6+&mv!xtuo%dW^mwf7yj|Mgd|tQ-Q&byIW$nz zFjC0VOhu7e+@(i}d_FJTm6>VkpZ%km1n(`Wq`(YCB3c%j>RI(G1TL6o77F)W*)((y zf>5b3+lFcQCQ>V>t_ImN1A43{gLVX!A25Go{v&M2jtp3h#zxh_p(Q%rKdqNzT#xX`vp@>%uC~mz!6^+ zFEJA_-@s4neI38Ye!?tri&S2BLlLIg7;xpss?FS|mM|kLZ+FAvOnzBve0TW5ZRn$k?>+W4weBnOc=0WQ3%9Psp^N%tv5zk4 zYQSgMr3ark$zJs9@&Z@HQE6LpkGraJfw@!(s7*3+>Fdr*KV*y;$5E7KXiEolgqoQG za0DNDWh`!f%QXyDY@w60S3~H_=fZGiLCi?I0TJ9-jnqo|jj>>v82%vh#cC`rykm@2 z*Q0YK6amvA-ZFe}ybqTX19GL@aYcu?GD9iLHad(fPZX`pISzCM9Xsr3sEW9VMxL@X zH{l+!CSwm}n(C0*{HjuuUt3W{mXVQdURvbG}yko-lV1&zg2p10tMMEq%ZqY7%&Jt*~fcXG_H zS*{shv*uuDJfEFJAO-dd;XWJaFwe|)5z`am|71b3O6vMF(Qv!*P$solZeN0GNt&M- zXh&^Mh4GK_F_}o+Q@bvSISm$?nwCN<@vI9GXE+n-9$LqC1}KKhK#WwtG6@+?4Gd2Cq25L+_f0g30>;q_9LnN@aw?Dica<4)m80!FhU9xWNwYIivFUS( z-Ppk~XZJmZ0i(YJtFa$KrF-cHjmZLtFVG{&C}FUmkl_gvnXRMa=oc~y)XG4nsoG=m zjyly{e!70KP{^ZkT0nw0)`6ekdJ%LcqLJwvk1>ue>IjdXpN?;a@9lrOcDWcw z#akBAmJ7!<@(>|H=OywsT>M^O7kiJEoQ+ANfCS_tQrrmjCiVzKpS!tYTpLr-XDGkc z#bG?6{Omb>^Iob1N7&76bdL&p8Lwd(jnKuCFayO7HVxbPN7awp^=zu~X0j?c^Yr+` zY-qP|PU1qqWDQCU*c{y^o1&mHuYRmSmJmTx?}WY{5B#7GB1xP$t<+q3=zMM%bBxCT zE`$fvArH)!6LUEMc?~C6THwZGXXs%WZd@>3E|3K{Os*F(P)C)@i8MJO+W!q9azb2i zP$95)<6eD@b!(Dbfr)c)Z!z?cf*r7HqYQK;FzkQqoAX5G$&FBgcVjr|m7BG8DP*iNXAQa~eO82!&aXMFX=LTA}_ z6vUx{J6rMqh<{E<7|!=`)TvqBQ?kJg6_aGDMy-_&4#zvj-;SvQV$vOu)K?H)9vkpt z?(z6HF_co;7MM@A5In#TuE9gbP+E>TNj2F5AcZ!vD*QJf4en5tXwCWl^^D@jgc*Rm zzFDSif!zB8G7|{r4)>z4hg^IVkF|_r3YJd7VIZI~nhEqxCtpVv!*ZEFZhGQ}P74<@4*}KqiK)z=54|n*)IZQEu|BIS&(BZPi_*d0A&KqPtFvG3 zLby;z8Q3Ek)N21|`etYEhb$pyQSWC2`GOL3Oo#D#|A5`@%|0D?be(L^TiYI*5_NN@ z)FKzub3ric!+C4lLxBRYt>tmRpXo$@36l_C8le+AFc>)De=F6Q)8xDK7L)=|oz}#` zI9Xc>63oYHdShUpN)CK%{)7;m#w1W#ONbY%NvZE)Lpk93q~V4l`AZ#Es7ENu{j87= zL*XOlLhQiV3;1@ox=)HBJZNu7F_<|kE0{g4T7-CQvQ!Y$X!a*&;e6mG0z}O=Z(-Fn zKw0*KL6EBV`7yFHjg(}^bengXAN7^NABkVc1c^XB9d2#;N+7d7aydJ(S`zInAKM5E z8CIxNYU&9l>=r)%2@Hm8ReXCbM}NxE^BnytN7;(((54^5e%;C?BlRPkZd>mxCQeLP zs+>%r(C6uPYi|>KQlVEtAQ}S$Ne2PjPWCpk2RBJ7uDSc!-9UjR)73llSxyh9E2FJx z_>>Ynw}=Y%w9jIFKH$YZT}slwZE8GDw=2&O zS4FJ(;H;71;W{ac$%_Lw;0Fy2pM!|W!h8mCS#awk+@x?@1ONd~HWlp008^0>CfQ!7bkagva+2{5zNTRo->xboV z@`60QtO-kF1ywJ}#RF|elXGv&6*wSvQEV>j7w1qyWGwNn3V;^n;=yv@UUHBClK<7a z?=46NuLbMW-32&~cA|63xA+5)yTSsZbBSgjuheph5P$ zR31geIA|4lQ8_e80c(aW&puBKCLA%?O@5rNC-JNXI=tjKz{?J_a7JZZIEl8P*`Dsb z%`1W5_ErFZ-W{kdP@LLbvu|q{OF4ojwjvx(*I7}@)_LQZY zfrl#4SDiNbZ$T*ete4f_3Bx9VAYI<1m6Eh)@J=M#(2K}7h-zg8=4CYuh2vF3SM!QI zY6uP%iVaL16}oT7Cgr{e<2P<}TSxXNm;nf-9#C4Z@0vz?TH-2Li$rTScDAXRZKDn@ zXb{;I!3FQl(6vlarA=D|%#($%1Ly#l&U`2B6462Q3tLjNmafu+Eo>AOzA_sbf+l0v z3ZxX(=-z^s6Yq)W!VyuSE$(AXJuP7WTdr1fpVOq48`RF^E zi%7!!daJpL6H0uoJ#DobXutrRF6J!+vz<~Tmw9G{Nf8M=8CetDgtU{5c515-vJY3A za(B#+6!JE(U8M~In}eOD#F>YrF4ar}{irSSwgvT~U7;UTJX8;wl-8lL7t=aGga#6! zDzsrx)-NSxk+lGmsL$h^Dhu)HsoC>{KXOHZ_XKhwOn9Qy#)3w60#bw6gq*fnGzPNu zWsL#-sCdiC;($Aw*TnNtml~r{8e^R_Mn4*3b+9q|m!?*m$1iJ)L|N3kNge&X4X{il z&P%T;J0x&i0voUk3CgLa8O7vwTuGS-_0uG-OLRvpwl!`8g1;s)IgtR&^oTDeZAnOU z7d}p2s?brXuIqJ5VAd`W&y2so?})mTo#Fcc-a1^cqWC+Jfg$ ztBG4RY02_@f(zic4yY6Y!kv(ch|bPJxGpN$40$vWM?6>LJ~QI!B{34{P2@}QKx})D{|D)s*Glpl$z_x-k$eao?>%1i6yN>M&u1aG!s|i6tsTGHf3G=kDdD)b zGus_3-Z@>5+;6t)nMX(hJ3hg+B<|U92`M_2tQoPcOtOM{k>@GD-E-FbX;NYeE3+-@ zZ*+)-R(O&=Jn@#iL>GLXjG51%zbtu9obk*qganp4ktFOPNQk*0dL@$_9gYEQVn@q7 zY+WIg?PX`tM~PrMOS}I~9^06*RIkaF*$-@u-JOz9fDW6H4oSPj8n%4FUo`BqcKlAo zXC)Xr3)*iQs9Bw|b$gR76xH=eUY`;oODwG@90t1M4eC~AZ<0YoAbH^u6;yV75)cDd zJGR3c{q!-GCP3HMZxFl1=ACt|NL7tY=j4Z||C}mrF)>x|Oc}*Ky>RXEr%;9U`s`UQ z`Ift#nXM-EbH?^|YZ2Zl92*S~xC?TJQ3HBQteIikL0rf(6^90M3^Sw|)`Ddrx_Vai zBZ!Z%npl)AdcQnm0Aweq5gCE}lRgsyCxf{WFE)k4TnzxXU^ejwCjZmaOi%$JJ|wZ- zu8ev?4>I9jjTg8M*+TQ~*NQkW#W*7c*^RCFK2>)kM)_6!J|-%=k=j1x0NW2IhMMLY_ie!U229 zOQuHyNz68xr41heH^;CfCFn3C-gnJN(+iu#RDiEu=Lu+nhbu)h!%Mx~wWuhF}I~aCL2%qAEhg}qW@L-2p6xga>LPf-kGpS9m*vXi1 zN+q*5!L&i78Pb*D(X;k6cwbawfI-pXoa2+Kp%XwVJvtnB&t0Q zsO5o8&=3J*WgIX6Fc&VA8hrs7dP$Rnz$|HkENPnzw|)Vjds4^fa%;&rIGIj`UfO#A zEx!`Iqirfet^z&YA+4Oz1TF3vfJ=10w^rujygI4x1TcJFy+{xm<@u`5W<4U!WR{Rf zl==A=xTb)1$FnZf7-4QkJvbs}GZIzTSDHg9dQJ^ACCnB$GjEV=S%0A`ZsCLOfxaZ5 z?g>$G$y((;a;bDVmzXZJoQd4nan z9xj|{A|EV+YR_*6I50$0#+t|)$ZhB@0tEwdW`EJ3di}dl^KFhJMq|cFW zB7R>ycUkI58?BsdJ;*^1v_{z+vZ!L<;FJVQ$u%7&K`O_gN1oPqk#HndPo1WdHlTJC z^f1hD@t3H7_cL~`j8$VgMV3)nq({I2PI4>~Qxf3i$BJaV@-r^|H<^Jmnb|*84|`)SkgNn!jr0=;V1Ng%d9QLczb(}^TbcMsEUguEr;|Tdf+BH!$nDk zxl%vE6|L4gJLuT@`tytkz4%FtH3fQ;jZ3HqKlS_&U7SxqXUTD@NRk}*`5bv;&z|t2 za%POStcIw2qH)3{&h!)9hqMp3AqM2VkSZ~Q26*WGJanZV-60+vY0@zm0Q^{!EP|1q zU74P7(}Z`Ua-=Y^V;o~z4PL#0Qv5fiAi}(7*IJk^yBZ5NGVr}mN+M@S2pq^JIz$}8 zJdM{q%mdo2&*<6HL-)!=5#3IwX1zcaHq z)FK`2%FXz)&@fU#rN2Q7kjIc}3r3F8Sk~u5wt$-BApx`>r~K{zu^}6fisNs z4KXK}xab55e24-Inb1#q_YeyAV$>9U(y;CZU`x~qGCaBXMK1opy0~Xg$L|fEd6YAa z(g9#h=)H>8#n4{dg!g37VLdHWr!UqMHsE;C=>+3gt?#E)nC`}zPcx~uQaX<~09rXJ zrqHR9-4KP$8X~X}*4e<#iI`GYn5w3Cl8A_az%S4PL3oR8Y?v$oYj??-`=OfOZZc;` zTpCP#dffqu?HwxMvXlf2h0^Ay^ba=U_Xy>>m8ErW=8BhgQjDojd%o02hELex$I3Hi zikB(WZ4RMJO?aOPi8-xo7jg$fT- zsBmP=z8%k_QKgs#tgY)eVhkkTAK7zoi4pj?de`J!_)Ea5rt6Ui>t%0#sb<4L_$2YS zxcJ0&Q7!Ry$Iw&9v3B9?U83HF(1Y1 zA027%#pRpHsoprTQ4MmZPYw@5?0rDMz8uSs5)qve^h=XVNQXdXHkb+r#>-Dn6a=$# zWiL01TCw)#M?nxjS6n@gSSoR0bqlh96!4aAufBdKWjJD~liIwhUH=ted`p!)g* z_>aRF$R@j!kmS3VQfJY*$9DW7m0atGv4>gYpIMZWXqfiP?mJGWS;Z}q(**k-&>!rU zZ}mBi51zX?GMSHghT5ZPB|_6q7Y}*R5h%xi6cTTu~^hA4ez?L(A2% zQPIJzaPkrqyEJr`is+tghpuJ^GOd{Nr$`x!?4WU@_^w0_vat`J1X+E=-5;dGIy*6mWE1l_b3;~93$Fsm~gBSptx~5 z7PJQ~zRS={HK@@WB-qG{)mQMztfxPe;Lq($RgjaupJ<5+JCnq(eWm+-6dHUl&IE11 ziwm{`8D5wT=;{5lgdXUR?8nte3;h=5kLq7%9v@&mOWnxWVS6)sC+`fGDD;xCc4)j zHB~F1w_*YyB4Sam7U7Z`9#hZu+yE{@$T$E`iE=aCoI$sxg(DchjVt7;4>0KA!TrOd zrgnvxzFLD%JAK)8FM@5gu0zkP1uz58_zdv3;^VSsMHYU77KLhO<-aHk{S#8q0B{4! z*IgXRH3)2_k%hRVL*FAB9X|uhmDo=I@o6x}tt=oI&W_vAH)_q?3R95+z;y?}bl7ZCAhU-EkY5_f1u@?MY=PXYchoq>c zch@F;pdB(3p}`Jd<|m!0MdFjlu!zG8Rb$3}Nc<|&y7^l&)2wUmY;1RXUSwbZ+acgU z#zupwD#jlsrdYvl;4v>UBQXrJ9-G0Ry95=6h6@KSh7u;leW4fkF2ix!EAAAF2Q(HoI9+EjKxt?k}A8otN5UE33U8Rrvro52wA zUU6D3!f!YPiGl@3{t~6MubCQmCZ)hb)S059yHtoMu}N>e`FNIsuZhnkBiy~@BBLw{ z`XgF+*txf-w&?sCQ~M&pynN8`cGPX*lX^Ntr*A(L_&tRNo*`16HjC6Tm}hv6K;v?-4CR-T}%h zDqy~H^5g_;A^Hkz9nGe(HeW45QntmjDiyp76C1LG0M3IYn4JE~=7^+uRPDEv=9Q= z^C>MDK^%-+`IZ(yi(h{W5Qu;HEk9~QBm+kG_a7r?zVl<^+FA&6k&pR+wK*;z?df`S zA(&eG&X?8a3Nw62z>Hg!87;Po7hjt7^lXX)BuB+r6#K)78Wc|e$y4HG* z0&%IpjxbbIF7RA$_7SfddXnt!7f~7E4J)f)M?{tm%Fg2CUkryH#`&z*7U~s8gx^9) zC8l`z%ZH)p8+}`db!Y?G%{&ZPJ#nY}wg+_)C_M<$mg@rM6Ts;JW37o4%0F23SUkq2 zzPz74E}eZZotTgYlqd;i5Lyd@V=WR(kBL`!Kror{$kX6!{Wuk4)nV0hs1Tkw1BRvm z!giUOpdeN`4Vvo_?pRwm@Fwv(tm#yLJbQ-cUw9|cZo z3J6ID=^}0j5`_p~?m*e4EY=N)NaVPO zs0zkKx)<{pf}?2`b056Rr4sSaoQc>BFtI0j>o(GL zBi0D{K73R2?Q>O$eRNk)HXmvvR1qpo@mEp_3ta29+Zw-5}G?B20m}J?@m>%5f)TIZWn|Q0d%VI;@nxt@&}Ot~ehHzQwH3*YlRv$4uN#7p4iL7d2T| z5jV{W3svlqm~aMz82d0gmmgW|!sw|(kGYQO`A2m0nTq!teTguAflH+X8+qf;e53F& zWMDt4c)s!T4NpCtVc%zymUUvU4u7fMrzUib!nrB1RNLlSmx`0Qf$1lV<#Kw!g^QTq zOeR-~U(@9JN}ku=33|{r>`kN5reUEVl$d2HtH4aHm#E^$(#5T{_=pa1>qRWt?u=Rb z8q!*U+4P9loc_s?zNak;H&hsSGAu$T+_WJ zcFYG;#tJput+Smbyv)#v(t^Lh)B*+@9iGEtb^OifO$i#>OVcWI{JuW=*V+rKO zt{hFuil&|$L)^`JDe{$dVyL^BaZDg|@MoAiSI-xQKRrA?Md$V2GRh4}Xl}6p3b+n| z4P>eDW16PWB-l;;o144&}egsj%&d=9c5{ybI_KdElcs1Ogz)ZRABb!IgwT{Wj%MOLL0W`YXpMHDFYCOnC^v&pDpS}yV5>mP#u)Wr| z1>YOTLJ#?+XnWpf>(GdBh7rXn^XG(zC&uw7>6PGT;Q%%WSXFX+SnVjQ$eOgc{~wP8 zi*c!JAx-rmH&VByWe?H!F|H!{CV}rkDDJ8X27LeJxo|I zGy*})Ak6q`de>HOb7Nd#^Q>xew|7b3c6sYgRA(@z^wG5tJ)r1MG4LzotJAi?VG^e< z{Q$#GXuYU1NsKR>K(AYSwhcYo2Zi`{S@&zFKG5L;|GKv=L%ea=VU`yl#R%O(Y-^n< zL&N_AX2AMf!I^;oAfduyNiDjJQD3p7%BSx-GB#1dP&AAN=ILs^7Pd42rCb2#d`6Ad zgz`(uS0A`y%eBo6Xg*z`f4EoXnh`rmb0^L;u{)#qTEeW|IDa_$Y6z<}wz_Pgskaw^l)V zldmG%WSN|fIqTOuiWo3N8A#GUvEMnLeQdk#3$zGbcbo8;pvlY01*8PsYnD}rV-Qa} z^KBr1a?5%aMwTx0@HLh^*NIg@jwWKF@ITbO}r6U)@-G$X`v^cTrLO||aDbI(WFJaXOvl{R@1+t9P; zJ!nQ?tvh4ty?9wx=>M&@3BKS{{DxI#6w4))W@f9IQN10nXu1Ej-&5^U=x0g`#M7Ox zKSK|U(zS?`Gsptp!8_F~{U0P-pB~^yJ!fHTt+mmmJ_k}oiJr6{mIr*kwn=_%qupO$ ze}N0n=tJwB&GIoXYPX#Fk9AG*>s`9gYk`P%b~%_eAH&+-3FK_>QBt%rd4T?%_w`!bg~Fprub*-L?1 z(w>0d8C&iIY0WDceQ&8S>>lyvuwVrUp;q&d)-4>#*MBS1dIN`b?oQcQGMY%M$bViT59508(`{lzn)BFx&eU5QH%Ufjp$1}bNH4#I_t&;94ccTeg_^k&KM6ispwoI?UCmhQfZ|kVm z_hv(q!%7v#J)n!S#rKuYdMnazBk;_Zkf8N_PhzEC%?QM?eRCHqrf@7KeB;$O5gj6O zn3R6_<)sIw3W}kfQZY-8=)DKkpQjCx2+TTi;#g#pmXSdfVfeJ~w}DMRg)hfrKR`?V zINMGW!7RM$zwNKt)FzsqU~l`sTg~=c;2RgEI`v*)anwa$oLjLXONWZihk(Ms`+rz_ z6EHc8;(vVdz6&fMIJ%f@CXj=K07DXz5OPeGWm%SG^D+#}5;nVofPexn z3MiKha*C*fAeS5?w+Awa+}DWm6%lom`^>MZK2`np?BT5c=bz`v&O6heuCA`GuCA^= z-u<4@2Rcl5ez5Di!5P7a!6tNIfuiw;2Ry;y02)m|Hhb^RRV2hy_>2S3R66>?O?R0% zg{ns9q1aFzE0<`|%#IHH(Q4x|QnM@t!`KIFnRXlbu(Vm8!=}qWa**zH{kCv5*QwfDr2!=-edkiZ{@bNM}Cyr})zX|#3a zU0H58JjfF7mOw}7=HEgT-llV(e8h3PUFd`a|2>vYJ(3mPN*4B~1xLRp<E=&@75VmoyRmEbls@&u1q*e&!Fz2;IHcqdV-sRrCH+=(@mxM>0E8 zL^E?}({0o$@6c8&y3BfucY?iXB&WB=M?0;W{H^BQg02sm=-B;{A2i)DL3WgLLrn~C z4&JAqiJALXeL%m2cLjGd?EY0R5RQfv{_SS68S>laO?OTR*SMQ*GY{rb{E!-gPO+{% zjb_xr!E|{Qy=R=aCLQo`xHIeB#x!JndG)0xH}R7TPPY=R zZvJLZB}FQ{`3jo-p4#-w3Bj`y-f6mP0-2e8-*0aFImLO8yz|UA{xAFi8OZ&@duRb* zJ38<|%h2J46cBiw-W`4+t^7X{Or?w$}n+)o#?2PKN?_e;jeSZ18!Uta-UPd0ueBhvCLoG}C1q#chJEKmIX$ z6;u9B_bUA%T%Ycur&igFPo1vFT;F^`H_hp3-JEW2JCLq$q)mBbI_bRMW*^h_gr~@) zm~M~0r+IR?CN0`e`V|3a8H;A?yyJ}SclbD5>k9cwa-?g=X0M)17ZH;*sF(4ofn2-0 z1hhP~M(M}XuCp8X29GIp9ms%9eS-xxaMk#y*1q(u6q(~QFyPOGrFX0 z&U+lG5xxdKsPr^1xndFTh@VVmg|^1fe1wkPym={y_~dyq#S!UBy*ggj0bS+`s#3d3E!>v_WyFcZ!EM z|7sbnIq{VI75+Ttk?`}|{+SLpZcSVJ9_E`dd0)V`6l4Qs`)0Q>b-9tW4AHPi?>|4Yes{1GXNWG`|^s`gt;fpSf;6z2yBfG!I(yiktilZhhC*aRoA2QJhk4H;?VhGPW<))9UOjp8 zqtT^PmWZ}AKY8ht$>-8WRjNntNBjmCiZ!lo?%;m7IUU!h$n4{^bV}Q(r!;SL>D;F; zZKgXv$=z?>h`J}e3xH0g(shJ1O?glY-a-n#l%vS|tfnoURO-x+4{JW-(#eM%Pp5S! zH~;Oj$yZW{g~~hOBYs=M|F@h?_waQi_mEahBbBD3`I|T0JAvj;v{R5YU_q*Rw9!Bd>(`-WJ__>=EH-<=yk!qAJPy_4a>%+JmDkijdW`=b^i|&)I~0h z!tGCO{yUlfvzwo#yzT#?cplm0=jpdi==|*r+KCs1BIv4mb?@*cJ23^|AM`svmkKu1< z{GpC;{Ej+Yei%+#-E`jsTClvEF5Dq8P7LoO@BF?A^!*n4PTyW7mzUm$_6PFzXmFx! zKL8Wl`HXpne z|EC|qU1;WZ{kaR9YYWv^O}`U7N8Vz%auHqiL?grSMjRR zxZw)Ym9MiOOs0%xy0kV&FQBG{7`h$q(%>mFNp#HZ?O?hD^|zymTri1Bc$I2${Vx^< zv* zpoLG;CA}|8u_meaNm26 ztir~tqXmfx6OxHUVm18>6BGKApIWPVjbxD6lzx+c$+Ubd#8+Z+o=cxy zm!8)2PrLMk>(Vo0ls{4NSxrCQ<)7P<59YTF%)k$Zt12$?aJgQtaBf-4z;svNOiNl2 z>pI*lc``a#O+VbFQ+WffxP;-#vsdcty>;wobLQdC@3 zxJ-~fEg;+xEV%p%`I~DQAQ2h9@OjXEr4GMj1m5HneF1pCU3!DV93O_OHo#f=nGHd& z;OTc)u!_s?3Z~)X65`nKm5qS!ufv}_0&n`B*#!7C6ZqFMFijpTJ*(*(yL7ayr57}P zto~Be^bKA91$Fex4f0nt-RjpeaBN-v0dg1UA-O4?cM zURQ9Td^uRuIbr#VTOi*Nb@`4NGoQ&l@kQkOp_i{W_!;Nx4Js&uS+n|#_J-CbO z(;h4uS)bOeQT{I+eriic@NLF-gsBOx-nDIjyV%2#k34~aQPAb=^3Zm`ZRGe|C{I@3 zlBTck(dh_&E9I>sq_t;xd(b&K03o(#ZQ&(SUfV*3w~;lczX9pS%(#8hUq-&ikxlGi zA5^A~q&3Uvr*;G`wkK1m!LMbKy`)<7m&PX6fg2#=NlLG{6Y~Ah(Vt5CE_O4wm~-TU zw0uxg(-+s^R&HTuz;QWd5S2E@;qvcDrBHvS9z9_hvb3~FO{wu(#ic9Q* zd|wOk1M62i1%o(adm#3+9mTf?8TpaM2}(LtHOty9y*uc9pmdo|6kH_b2c(o%UV0DU z=KJjy+`~A!JQyDZd<@A46+}r?1&rUO$Hl!s=Q@v0SGb1o-9;O}rO}BO<1h0S;9-T) z-=biS>mRcT%l}G>`|jHK-ZHSPWnLhbWnNHZUgm`}1AP9xNj@$0N_?9qMH`=)sc9j! zqtj;|cg11Jv)Ykr%0J_?FfA?Lzm1yhC7R(77`iy zH8@8;j>Q*9EA~4ob3ykpPhPp;8V2XWX4kAv4#mTOkL@1IYkxPs*m#|o58P%6{A(Fl zEDx5R()7(;`Vx6EIi@xJYLBmca24~F4_^ILL|J)gyH{ z@D<6$`niCN%TFC)*FK6n#^L6+^e$zxz2wHtaCSDk2=uggqKEHBC(`r*k4{f;q?6n3 z`g=`rYq@?#`VdZ*cFqMyOS|xJPR(-=XEAvtmZXKkb*}!L595L8Gi8`g2;--;6!=XX zp6mazRE+Ji;VR33%LsM!<6Ll{RnL{5$^!Sa!!f;Xp%)zB#Om;g<-i~8mEReh$N0{G z#&7x{rHT{^-kBE}9(1UjgBoPN}f1%6O! z!TQ1TA(=4bshi9&x=}Z9E1g{=yBw|*x_MgDGz~F+Yb${Nrbo9g5J#hLE`g11Ap-8p zo*X)Z+eCrFxvqLnZlxUXpVNss_xr9eFNTv2BRj!af2^DY{9=!OPdHWh?qPdAh1B3M z<39G6T2~_9v32=oYQC$HZ_&tn#eU?=c=@`+eI#Euw75G+$N5YSwE^UNaLt7L<8hQu z>Pfv8hP%;#0EIAo`3&Iq_S&N(+(F9epf_<_2_}cc*}&gaC%4@M-xVIOpRbRQU->-b z`(Q0$i}ZuW_weh&*Sv7He$wkrhx2z4^6loyftC@aoGAFY!JR!zTnzlrPz;sB_D2T2 z-Zny8y-SMw$vQDVQ^Rl_Zjh-#VFcam)u6lF(dF@u<^$RxOhL7y-R0@f8C;BCNi`^uO=N=q znY@Q?2Hks`3e~1_Uhdg+{&c8s2ye+E>i~XJ`dL!UMXcWDZ{1i1MY|XBmLw4mFKx0`C~_T z^eXqIIXUrT`3qbw=wV!ran|mI`_qEB(Zl6s`jgKaQI??LTOR=aK_5RLNcKL7i>!#; z@QDY3zuv1?56}0>UWfa->N)zQhk(D$rytNr1ImuR$s>9gc;DXiKps7vUOiKf0Jp;9 zBNv>&baSlPI!wF%HS}xXj{@og{Wev9{$SYv4=%2H8Qyj{TB3p zFTbLF`q&Sh($dG`F@CI`+1~+Q_VB%Z4DSs(2yVF4qrm;b!{q}3ihfx6RmJV<_~-dL zbr+V$59Nb=vvjO?kAd!ajxPB_Jm3-ozTTA-cb&tre#$(uuKa8T^afo2=J9B4>OVZw zJdpYmBrsd)RG$RC-{E;ax3=`VrQmxhNB(JcC(g-I%u$wx$4Qec9X{X6J`Z{YZ(O6R zng!hDDW?{nwy@q`E<&t_0`S*14UO;hzmlzk( ztk|_*_HV$=MKRRB$&aJv(_zH5M_F;xJzO7ILc>`*CtnA>R~?Sar9R5xDN?uLdY1S* z@Qud1jN%qMx^qc!r#J?z{F35M_UhdmenAA*J80H9wr{QfK>2?E@8N&}8zK5EXPmu0q{pr+5C^?(R&gD zdpr5N$*rn5^DhL)4U%S5JietrOw0GU{a7B$nP86N7pjJCoJf5Hd`fb0`ODmCk$r5RCh6~m)u1!bgdb!+#&L9(xcFOL0r}7LEqqF>To(rsrEfh~%1YFwo)NXu9KkYHh3@J;z`k{m^taYh}H z)8qC`t_|F2&dyJz3SA^M(e*U)vSNI3UEn7=JlV@|8`u*Wo}=J)s<@N?dca?y{87Ds zz>k(5t&j9wTzVu=mR{2IZ@ctBOo6pa`qRjtasDRHllMXsgkP8OvP*{7E~$JM`3|f| z)}MwpK>k~u+$la0&XWA}N%ew(G`VIr0)D3nV2Jggo2LpCzoTyD#;L-_!2R9vHMONb z{FKP4KYVr#qZfS+oU_ZJMlJ6>4MkF7AMQTYLF>f>*d6Jz_z65K1$7R=x~;$;p%L z7&#JTYshPh<2E}2_c@Pl6tpug;xM4`@A%jW_;noK8xOzZ%&C)4X=mWic6jDP)@O3T zEirxLJG~3=Imb8Yfy_rZ+B@B~YguszI2@0g`#T1VUUFB^gH>kx%y9#k48+bN2 zG5%9~1OHuDPqyF3G2uSa8rL7oiaXZFi3ROjpTcl^dVxa{5ine8HgHdRbo(F@`Niyg;vnFrIvmDHt9M4zU-s;EclfU8 zM|b#;GeCxKJrwkAY63yF*X?1@#1(I62UR<;wQKD#;Ln*5<9mY_7~ZR^1maBg(l|mt z>1YzKV-^-5|G(<;-z(tY4*3vs)a(CcM?>rD`rF~4bA`uuE__JzD;I7k_00vBJ2_i@ zlS`3r2XB1t)3|J3@Yo1^It%=qPg#B2T23Df*IAcYrH4&aqDH^i4gB-UFUvEBd3lZl zPF4@Y7mfqIy{7_dEK*Dg0>kq7#t*grm2B0ww!Nf1@{gkbFSU z@R^f=KiHE;K6ssLmk%Do$0?M_^t5;i@bP-}0ai0Lb!+!Y@nvi2>C5Tlv)i;J5Mc`QTAu)b}rv1>nx~%RfQN=kDzKXHju~ zaX7X!4>GWyXHLfF(5awzgI8{M@O#E}_sd^il8WP@>C=F3^W++Zf7W`9oL8340Dir? ze!Hvab2oPkm4oq9J`4CWo&GPQ8PUI)lf_{-HTN*NWzGfuDpyaoLp_YoQ&)52dEz|a zmQMf>`uh&!a@4-`_eh~_d_>;{zSpZ~dvGZu+v%n;$A|UX+WEkL#luG$0Ewi1B5{6r z+Xb6Q%h!4V@@?koOMWcuc^6&t%jI>2@5JSqzGS|SeBW^Op4+lA=p50{tBT7{@az4Q z)L6%F8a3kf&0Ye!PkQ($+)~?@wqU4zH@lg>4EVd9zuVSw)?kk5pEaoCB0cZ|3je}A zP+HLBoVW`4(=I=^_Zy5}9Bxm;ua;->O8*G>V?6%)g1Z^t7wjh=62|XiXU>yz=?3IG zv@YM%$hW_Ih-L57_A&mFHzMDwp8n=^BSS7c$~BDP6D8o+^YnmT{Vwv$2hTdaF?{mp zz@P8&)rJT_n}lnI^^elczz;fpcpXgxY{3Uyk%ctvapQXHZNR_j^n~?Gg0EfdjwyNP zpS0c%{Ii}u=EL=s|1+3=K70yaMPT`GKl4Mc^I0A&>Xj z@vZ@7-1sQ}7WsNSKJx5I4)f<*e+OJFXSSCGk@Euii&iz)#N?8E6#3?_V{%{CGCN!< z+Ev&8Q_keV04)uakcVcK=o8TF+Qr#0{=S? z--&&Ao!)i6xz{hry$3dDh(Ky&fvm*09(k}q_dB^Wz@?`bNYWhE1I@jj{sgFNC zXI=!IrMcW^|%i)ojwkW4%f@dOQ8E7N0;a8GT-TixOf9% zydGD1d3<=QU!@BCa~}Pb*gvrHa3XB-FZ~I)yFHv2H>1{-Fr<@z^a}6`9G?882I=Hq{u^)yI{M36 z7KJwn{Y7C!pU@m@ujD^~kKFi5dKMlo{kAWB+u=4Erhsi#~{q`;3 z4w(QT>u(QsFZBdhGQ5YTzcbyqQhFQsU;6lPqVU~=cxv79AlI2GTRoz8k>B4Bk_%T! z{#r`*U4=ua)|;4YYPGeFWSun&SFKVY`$ch5wXs zEs`)&B&-|#Xu^JyVY#Ev`;VqOMKt?URb0En1xNCu)t_#Ql9Y8_yK}tr4^n;?{3Q-| zx_V{T0RA{fkK;S!5o-r9{wj)l%;C7bzvJp}kbdn>>Y7=*52t&G+$kNlV4B$n_XYSB{l`_&N>_! zP{MJ)uy!ab?$|mxT?RS*Brf0Zt($}HVRiTifL{^gjgO%%fS>O8AUjU>ez+a4D((S? zTR`)ni<$09s+Z%plp3x6;#cLpu!OVA(HDXLgGV>VaeC4NV#D>f%$C4)I2`ebnMmC@ zS5{oNkE5A84V;2AeQMnb^n5?CQyuS4?#H~t=Tv-<_vY$X*arDlI{NJI2)_RyhWAsf zFdfJ7659g*H-~4x;$hc8tsQEL^Vi>3lD)Hbu=dSt2YPWFt*zzi!Em8y_)}4H- z+XLV4$|t#TKOSbMvR?x3TOKZd3RftfW393BYop*aJ|mr%b%*<|;R`!}?yXKA+gffI z45tgfHw<#*T)Mi+A-yB;KXZJL{~=-0oGeTj-J0Sq3jl;YyHCh=$VwT0H@ZWupu58H z!SOBb$gq@#OY92V+g|y-!4n2^^-AmpTx{3-TK*^+K7~KY!G;Ahx)sHr>F9Dh9OLMk zUS@X(-FRJ|aWvT`1*U%H{#rxZ_*T<=e|PkQ*ZI-PukHc5cer#~ucnrzSZi>qhb!(0 z-2FaI0#(3SdC^|L#c_W+bVUEGeX5#%mq(|cMiM*zvAAY=lf?7{4*Kw ztscdFfP3GyBdr6`1cBVX@Gknz;l2voYF9qT@n3ZEHa?4!fV(9CQ2ea$7||noi41+# zw_|oP@RvHed`{`xB1pEOCZ9waxP2V1Po9jww5E5vbY4fwGMzr3PDycThZ~e9E2pOE zC%W_?&ySWKO#vTMZ4lmF2E$Tu@U#+HG$mVfq#mq`Qsvp=AfFzKL%uTBI0PhL6QI2X~) z%b#ie-SCy^z!yDy7yN}TKL0cvAI$)M3s>L1mbX@5ELAnXivP3k(~v6e*lKKzHh9ew|R1oH&!jd2hQxgv5H)L{?$4=WwCat&IX-UuiTu( zk?QSP@?hX5x%$(5dAT$HuD@m!cc4eF2j|gjzCqJ4FaCXqmhaK+Co^T^mGN0o-1j}4 z*)x)+8{eZ0=*{+UE02%qnLd{lx2D5QlP6c6rl(yx#kpu4v+ssW9*Xi#boHG<^SrN0 zGb}njmh;dY;BNQmbz+^plQur2jb3Iha2I&EF5tQr(Qk&UDeiiQBY%MOmhCY05GRk~ zJkUGZ;dmS%o5{w3{u#aGVdKLU#)+$q6PKMozH%$$#HAO2-egoS!RzI`Fr?LW^(`oF zp=-CPG%voH1xUv+yzytD@)v+0+x2d`_<@1l;WYZJx9gcBfM4a6pXYNT zusAOc=~F=WP>*gO%?pQ*SH*GS68)eDZw&i;`p8+K zZXj06ZNgcfx7`T{*ZAUNhb1Jy;&^S3|H*#-VAcp+>KxEZHyLhfOE!E$lb2)H(fn?dIw zej~W0^vZaXbL9fyQXog=E|VwYtETCV#=F)FL8lQeQk)-$jo7~*<|kDZ7wa|og=AOK z%BS&{x(MZtg|m8Q6}P>sC)v&R*lrJLdNu%n`$s3H5uNlRKBu6j2et2`+*>?7h{BB6 ziHH~8hv`A-65#Lm@HsiRg^p$QDO?7ezaO*rXzupCJZo~}M(gFkJyb_e?YVbxg7KTU z0{Ejnd_H)O3Fk*UZyyzb|F)AC`?F*!$xv~y#Q05I3EV|>I0X85-=URXRGh!AnbZB! zys6##ztK%y1-dsmy6m@n+u0Xu*Q(-%&xfttnx?N2#O>OrV*_#I-0l^yJis zg9v>bJ{`_y@;c!E;OI|n>7>X83#v0rPB6N)9|2czIJQGC2`=XyD6#rSHv(U0Uui*u z-8O$+FZC1PepDwX2^8^`57$l=#a&*96UFKyYvkG~`YGr&*V*frg-^OY(+SMvU$_bQ z4P(0UWc4m;`i=nr+^-@XPelYZX2%fE8w1X<+Fb*>ll3;yE0t%KHzrna4X55N$YpR4Jpo#S9AyeVtIC-?8&ow zKj>ZN^*?$=spwxX_gk%x)4vCS-@uhWPoB*GC~Er09=$vVdf4t2@o|WJP^%K{*-EGQ zFzEXIwGS8Y*fxjYOwQLQ-k|;s7Ryg;|A+ZYso#L!k&aKYr{ef>n0SVpuMH{g43FR5 z;6oH~mjM3S3Ja-5-H28*0sO_|)%#zo-uXF7UMM zWq3$Cktja~{Lj}0A>IeRD10g842!~xr2Q6Q|HLBQ2Dm8rgQQ}Y$0C}s@S$qjip8|8 z{R+>5Zam-NaRB2GBv0NowF3PWiJM%q&mrHmikoE-m#^x1*Qhwsb5eI&WycTO%te+Mp}|C8M!1Cv&| zMz5l{I1W$kLW)84SW+jKH$d-o#}~`_`=WE?J5emK4#7N}4%K1%O^ z{uz!w`gvDaU7umic^ZKE3VJ+v|C ze$CUbF2wb_WI0w9#`vgg`rr95JC@!IxKdMGzpijoX%31TiT?80Robphf8+DrwJ#!H zr^8tXsrj= zJRB&P7p@}qhsh(k2k5uEb|-!3c2UQ`eKmssaWlzwnpNG>>Mk>Uf zt&OwMUcl|>%I%gXOD}5rUM{^?o~(VUn!bj|PZX56oJc%4y+@NGS5jlkSKAxq#`EyD zmbX@g1Ja;xt&)iGTdUffoJ=nhUq!xuI)2zMBKt-4M|0$8c!+Hbt;9z*kk}qKCNE^-uN4S?{HSr4c{_wgiyBcg$DUcW8}B; zDw_UX$1nLeVs>RY2L>Y@>v1$0{F*yt>AbrC+dOu@{cJMUH=vn!x{l z9_~rSXoHx1tMh=5_ss<-b4kW;_AsPJj^AZ1Q^U8!PEVDUaqwkwt{e`$KM(0817`Ce z!=)CD4;MAS8J}gv`SbtoU*I+F8PDd(`NLJkVV4rtZF_lLBaMn$ z`K|4sx3LO@_u0HM5MI6}Q>2H?X5hie>nz}>IeAh4rugV^eJUz$l7|~@eXKf8daY-p z++#d?eKLCSvgmX-A1f;En@s?6e{QEYWN~%c!&{}Fwj<;u02?P;&jbCt!Z=?~I8X3B z;a4R;9}Ljub9!4lANhul>n5+%caZ*D$2a+zGGO-w-}2h4rnu*vf4PkIL6n-UL~F0g zrJ%Qyr-uccz=^ec^i$xnjt`FGlH#TDgVnF1xV@b`*w1=`3+9!1`b+IW z4PkVXCD8qfqf6~TeucGz;WCOVIvmGOXo8~xGhA()xS^X+F1g_HkL{%PzlHq6RQ#N% zDegK~AHIL&a;`~)FnUB*jlRfG5K;J$o=Gh9mns^|xp*_m+gIswd3>Ks#jLVad9ImRkZby&i!LofcCoFHOzh`a(z55(4 z_!U1I|Eb%N92=~x&_CSE*Uc7> z#(zG3WBu03$^H`fAJ@fYUKRVhG+ZF|YN>beqSZ6`E97ej+a%xMNPe{Rf~Jqe1f-M?lXL9>;6HHu@wukQ8J}m7nY?Nb0{3N) zZg&_8AKfZjCSi0_4+HiMzis{NZJ(Fwl5#Uxe0m$>@g*px{lzSZc>ic+o$M_lg z9r7hY%g5)n|HSmWBYoZV0AT;_hl634(4&X^+8}83k~QGfU7-F1PtW*EX?od} z$NEeS#qmc^PiJd-Rq?NR_3y<63B7u~T(2zN#TVL8Pm+;O|FV|F{y^nF;O`!fUT1iy z=uIc@Lmf804ZQ{Yc8=freU7G&WyRg$^q1GsUJ$yA$iL?$G8wEE(HcLMVR}+{7xZI2 z;(bQcpL8HFTupKQ`on1Zk+ScBUe58$^hmzL=vBvw%f1hKk2-qXkI$5TOzxYDW3_$& z+|?c~!u<>p*VyV&Rb0)(_24eo9vX(6J*#{OdN+9O)P;5DE`L9V=~dxl;A1^u`QHZl zdwOMjM5}>+!Q-PF_q}%e{AScMxy!@l`TW0jJS#srVX7cjdHhCLD2;-%om#nmH535< zfQRo1K4H1``1d~;zu6|>{q@u?1jf49)iyrTYXJ8tk8Xr@iC6@&8!66>H`Xb;oFdZ)=hqv&((p~vM;I8ZM{zySLljQ=BYM#rf;P{(CU2-Aam!<&B7k@mJIIKBph-=lzxSxsR_gvT+JrB@)p_cv|iJwYHWE z2K5C^^zbPeU@jOui78w#2o1hq@MxoCQyX-T2GrP<|%%znk}+s9cSHc_-li;4bEDlehPxJ)iBe6U1optSSKGW?Ee&N`5`Vj2_ z{4eVGfIz6P#N+XvzzsSauOH4~y0XFF$}cI-Uq8+T_cAWW*TSgST=}hggKivOW__S; z$tO*zEc1s-iu=&3SC?$uB*(vl;a#E}T_WY!KP!C&^!x0|&yCp3$vM0^Q^FcOEw=qU-vz;i7$kgEfTxmW$WbejBc)xYry#jzc|U z>fq#C{Tk?<;c#58GkXpfO$H9DR46wWq(|^q87HnaJwAFviFtYP#jiEO^(!`hP7W}8t65`6%_YF*M1z2qj7-x z6NQVMf7?18^giR&ryKqpy$pL~eKIq~SD%vN{B_rEUJp=tPE@{%2Y_B9eH@wz+*tj< z>_~DJaKG~E-Gh6+diZ*w;dZ2|_@|wnY-_oFFuZ{V0^!u?mJbHqFF3ottYv=i50>YA za%AamP-E(owA^Y2_}ezd4?JIeVIaI@EymKr5j0gjsyNQ$6s5^O9Ofk?4<$fxb@>&G6H@#ho^hr`k8!N_#}-E!{wC80e_^E zEBogMjL^?=1Dw^b^#stn#+BdJa_wN4mH~<$_EsJynmkVg{v%gD-&05ZZkRq*dx7)! zZFXRXXvYkymW>O=lYraamCyH&lY;Pgw+v!lPCO`iC+Et^$oESxUr*R2Z1;paE7$Qj zGSm-zi_bd`&zVY399&mY&eitr0?h3z8?5jdLxt8b#^YoL?RdLwt*YW`)>*!wq{N`(+ z0Jejl41~{#)%#?C92u1GmX=?+6!?$VkMZ;x#~YY5z2EUQX~0_tDUih9WomWnAcfZW z8^W4|db}Q`VErH;T)<=vU{(1{TnA&_Gc+zL;fcD_4F5qwEKB4D19T>HO*NqfAL1-kJt4nKkbj;jQin3 z$#ly%n~$4b*M5Th@%_@gf8=%=li0C244I4={V9I)k7a9s$9~y0spdo=eYl3?1Nm)0VKnvZU=6W!{L2KSe}T_#TFFT z=iwsny`DxdaR=zNd$^ppzs~wsq_~vBEt4msGorH$3JL(ODb*cY2_w<33`oiX~j)Ju~M#ozQE`WHNcrXs)}3F(L>zb=+rcQ zf0s`0U7-2y@Oq~20{@FWT%N}%1sc7g;{17v+{;IPE-8HM=iUu^{=BOX5eZoa9O3WW z1N^UD`P^>Tk7&2ly}*qnXVd$v;%c7Wcj`Q}Gn_>F4-TwenfpK&f1wY2@78cR6%}`n z$ETdLQp0WZviF0M&nKT47(q{Q=Q(;j?-SF(%iC@rXzK%@7q3I3M_GB1rZ?JWT~r*X zp`I&8sb@`bjr@bw2SI5poV7=!IR8FNxhR&$y@ItyJWduK0^LWPTv#7uaLDs^Bo((C zS2GU-zoxV2jK7fWsJw38^v(KB_7UJWaP;TNlkr>7^cfz#h}XF}0C#uH??laC`8DX_ z?@0YIx~bm)Q6GQ1hUs=w^qsw73h%}D0A+p)`~i+nvOg5(9HB>wJI2HL@%)MUd-8Xn zccxdbZn+1%ejF%13LO59tdG&FDXx(n&HNse8sSQcyWQ1;+wmgT;3miDG0Gms?Vt)l2cV`^f`%(7?iz<%U-)}O~mx9}I>Wb#e4v5!mQN?<_CGd@~h1^z!yzr$}$XzAatW##miesafx zCCFgoSnFSbS2)p63&7ITnjY_m>#s{MXu7{|tuN?x{%_(n&_4>r5`7w<`e(Kb=zwJ9 zM2Z`WkAkM(7}KeXN3{M8CeaVmyqB@#i!l?KK8R{oto@?TGI`eQCz<(hwlSeKBAvhM!|KDg3J5^ z<^Igk<9XQ`Zd|l-6aNG*jt{l9+%*^j4Oboo_tC&eT;X3M>3y_nBraVW1$W9wT;kur zJ>u%o*YeRxBXO0{a4SaQivJmf-m;On=*>}Z_r`*msQjeg8U?pH7L4JNZ;ytH1!K7C zsJK`#hAX`@8ogLBhAX@~8ZH)$;WF=yhKmJbxYYZj;bOrUt~M$z7L4J_AB;wCwG)it zhCUn>=LBQ8>_?;GoL~&s`thhZCm6#eJ{c9~1Y@|$=r|`B!xdMLO3w+#>`IiFCK~oB zr}x-#V(A4s(rcQ2r^_GQ!H-st(gg6=?Cc)zJAabL zzrN!LXXTUw;6Cl>AcAY@6-{5qrNiU2^s1(B)PwC!fv?XwI`Hr;J*DZNcj<@8 zlclFMefAmvvtquCSx%|1h{1r{#-KC#Um!4b)`Nz_aR!z5hw+tLvmp`lN zTRHmhI30ft@|QI|K95LFInlEGiBEyQ%^iI>GM1jw^hs{MMTcj+{Mq%9f2{r!HApXL z`WIdKS$VSZOPc;kT>i&?`K8aG{0&|H1$Fr=4bp3xzLo1=^indSVCAP;K!1BjA0E1; zXEc2Wm)=!ZenHbim%d+J`jDoNBjuUE@p49YRV)@F|&6b|o0QpZ<0a5=e@S~+yH$?gwar;Zi+|r{>kp4#vv{L>j z_|eicTO$3lj=w|Y$y+pl6K?akm3e?9PbyT@sO6k(#CIcYm~Q>!|`Yt>qT1AQ}Qd%|LVt|tft5D8_E1-S-le5B7I#)2k}8mPilHR zPGbkK@sZJV^a8Fo`xCSuCJll{r=+;C^s=hyW7*xrcHnb6$LG=VWb|7#{X~}@h+|~w zB~2e*zSX0u>9D4#N1oz;X{Bd$TDJ!u&90mo@?`00O&_k8mY&u0;p3z6QPA|Mjy}bK zM~T~46gS}E6WgmVf#1Cxu2-I{ydh1$(xr18kk%QY1}^TN-T`#(@o=(k$NLB+ zl8pqToA@&DWASIWg5vreU7A0i#N97Xn?d8aW@1OsJKV>S|EAS-{W+_+g+7kjaX7B5 zxUu-N_Db)Bawj=@h@d$BHGM2PhD+=WI^B*A)l=fedFr%rJtM_6qE}Pg`93|^tvnex z7e5ncLDC4I(oz!HN*iPy`th8@t4{a^m=@Hw4Ooa>gqeBxF0(lpU2|J9)9?; z{+`|q^!$Cax!`+DFc)`dv(x+3-s7WJR9vHWZr$g<)3g3jQrvKV*5q5& z^b36c`Tomc?OXT?%6rA(cwOK~wC|FU?Hhd+_(t}iqPRx(pmh@H^||s{U#Q?=`chKd zck6KIC%(R9_8p)6DvHA_ko7c>t(Ydi%-29C9@m&J+5t9!OJ=0TwYt#-!#WiY&#D3$WmsMONdgTW6OpjChqujCd zIHT!}`fEjTjqGwX73IBG*Ip!F?HAVm(KO)xREPVqwCg;tU9;22C%3ZV8p$m+V|?@q zifcr#s<^S_XYG(Z0Ofwg)%Rq1GI< z2>EAbfzFF{xN}AR6ozvBs`bF}$!kb)jpS8R+*tCmdPK8PZoNF{P!#ohT78;sxSHa| zqGxi84g$TgujuJrFZK)d5>;2<Tz~4|u_bfMV8-JOjfJ1a!#(!yX zYtN#lk7d`5PO1ZRj&bD$o&0EYhBUole^*??{(dydYt)}Aio4eF#c~t^m%OB@5-s~){vaEtUOfBdQ`u2Fq6U7**fz9q#qs&DJDpy%s%E=UW1G)r{$t)#fI z^w;X!+6{X5d-aWQuO{E4;O6~_+()6#_&G#-B`SNQ@bz0)$fvFtm-QnnQ z+(tGe_Ri;Ad^nwgGPaIcRs07YKF1daaQtSbe8_P>e&-pNWqegnKsj%Ee6=HAd)P+X z0hKX_KN0xvd-xu_ccCYEM_8(>ci|-9&-3tI;TlAkPB6=xeZa8kP4Z;m{di0tzbK2= z3rG)VS$&I&>vii)e6H?F#-uYC93RxztRRR4ItcIz3yALa10T~4;G_mfi3aP3o6+*J<8@2@)5>8*4e(`yzOIUvW=)V0FKBg}#8Ib*Lec2f&intDuE`~NKIks; z+S}q#@b=`~Rc^UTW|G!3`VR8_ujjT*Z_3|A{(W4zEGOzOET@0P{V#Fh_;BfqfWxXG z^icPWQ}8g>my+WA{=)aQkUU< z*e@sd`YD>kb(6C6C)&Jj`I8r;ym(&&=coO|l!s(be>Fd?+Rzv13gx$UOkaZh@%y0J zU%!aK?ElkW$(SPz7XxScvX>%Xlh+Qtyic8~D5FPjMxM#$q*)Z!e$i#f7x9nukNti* zZ!^r^RTUTecWys_o8K;(%Rz4}oXM%IxH*nrKKFSW^VlbyiEk63XW5#}Z}`&wZ1qiD zfpV_vGQR0PJ`v5ra8R-?44?R%3W*?A-^$w4CBv_fP3%X6_fALDzV5tmaUI}>udAD0 zl{Nj*Iyz$5w+G*9^1ZF6}Q~k9lpP16R~gI;Y9ibWvfqSeb9Z<<0Btj z$Fj@Q>arVOT0i~YaVFPf61abP<+q2wmGaxMf4-fMV-Bxhq6PWx_4u&&%(AOu^vjAX zd+pwVef}LdX51m&q(fh%Wc4g;0QzS-`lNq+K?LbH?}N8?Nq!!yoAZ`m&Zf2CL7NaZaT0rUB$_ni7UJxXqjd~-d1R?0f%O6u(K_#Y{56njRaMf`r* zs^ac*^k`hi_{7%{6Zdp*mxONeC~boBf9~P+MYM8Z&piD-+7!6cbmIb_f4*xlT-n4l z?-~@7Li?ew##ep85&b|_=Jar585`+`Uqc4ge-qn*?wX$5a(I764%ZO7w;b%pq;j*M zGp?P!g#7Wn7p}f?%$%F+6Ut)st?dZ>cU*nhu6~0_%RQ2Y8`=pte?4`j$Z=(!?bN24 zKe01#pL6ukl13+`>G?RFI2subDJpJwJjCi*)$}+X%Y2KX^kY;Y+m?>s+g4}=U;g`h z<)S}!vn4|pDFS~HBi9w2k8hXC2hmkKIa~S8?gn~g*G^QvzK0}cfP@&NMV2SZUvS3V zhFFt-MlZD|=uLKh6w|}~6aC`<_M>vR%S&DfLe$AMYu_%cn8dR1H=@ymGKiz2c5S(I^P`7 z7r4^{=+MJ)LWdqe=bHoM%n%)uXEYmh?$P?PzmvoLGdVuKtm@(HNb5nsf6d90-~aMC zDg;Qg+tIu!V=`$%E_foo+j$| zlBOTy(pewKTOv(3kbW~ zZCHBiu}EJPr}y)t>1#>TpY+=a^YxzaduT55<@vT#a`NMO^H2}yuIu>Xe*8DA`y6U>kR(L&`#eUPLS`#|NM2TPIhdSk$I9z>57}U zHhy6HPSyYBUS%)Ljr0s3`llmd( zHHzC86nCAY$MNcp$#>iwiiu`#o13SD)w}(CKjX;q%=Gj%d%S;(p+8 z%pV!}VeMJC7xWt8Qf1)IaP;Pq9i^@`j9#e$&iZTmSD?3sXNU4wH(@`4yagHa^qDO+ z3hvkPGxs6?&)38cEYG~$@5VDD@zvc2<@SC&6yM&*ho+q_-{f8ZhU%}!_!#hz*YcCU zM){94Tlwr4&Jc4kFT7aVaUSpcEopo&5ns<_@Oc3|CZKZym0U8SQ7>JpDcO1n6yDXIG~)ZmA3~ z`WIJWEya!ROK}0zQpAIoiiKYa`C0jyr$F~+S3Zy5Co$a|%_5yWO+F3WI=-IBNGxx; zqQ>eG-7vbTXMq2fqswuSU$O;p{SyeiLvZX>(b`W$eL)+>h; z*N9$iob)o!qufU8pB2TO?#U;I{oXlRcXIKB>j ziW`eg>Lt*z{x{bCi=yK8ar~eL#!q#ebh0m_yuBSA%sh-vQPangkKs~P(5a96ksn2I zGqQ6|&#Q|2yr+*n!H*f&}Iyd8xl6|K(nJ-N!SsTi%W}ydRd|06va$@i;{NR_&xHAF-1C2XMb$)A(Y4{y4GE zixK}_jM&iPaGFSCF?&Vi=Ccs_<0tY#)`h-MODQAPuB~r@z8_!g;Jg2n5365IaX)tT zcajW0%D$n9Opxf-)tF7hgL5Xl)J*fV{)r0Xx2N#9&F>ta zofem4{73Ht-^l({6t~dPrTt*!o~irj^s)5=(0j$kgh#U&9|PCp!eX3GzSU^qBQ! z$0lk1AS)lVLgeD;Lm?#acdxuQ+_2deCa8I}VU54S8oS<6Uxb2 z^6ED`JYLwHEpEYVz75c=lN3_G$LDY9JuZm(F2efrBFt(R@k{RF`~Q<$Azza#hwar2 zDW@Ix)3={Mt!MotwKeeU6Y)P;|04i?O(fd!b0SjQb!*`VmN(r>da^W-_kb-1bQkI! zED`z?=jhf!@pgxQPtN;?C0L>=xi!Eu;E&7QLd$z6cIwyu2XM?K_cxbn-2^XC=aqs%KZyMo^L z9KE?TpP{a;1zUY;io3|eb@RI>hv9~H13iEI?iuBrPI7nPe7{QWE62~SzC+{0CHFwa zGd=!tydp*RkLCxiKNJ;rpTn^|r;g61jMj=w-qt?Ro}l}?(eUJ`567qX0{-_Nz6bH6 zp1E8~4+f1*H9fgE@Y?*;57Lri<)<|LxjK562qn-Xrb(Htof7+iUL*Mz8sMz_#8*Hs ze%~j**J&&1*NgZC6)FJ3*S-q;J5HY&zk}k7Bk}tJe}KbNd>{9OXZg6a^;4sto(%l! zo;V=o%lzDWI^q$9EU* zTkqoV_HcZ8Kj8oF_~3ij#X8mTZS+g~|8MjwQ~x)7Z5r_P_UT)!SDmBDJvrll<3Di# z@PnRwvRJRkdf^i1ClqD^KVJC{&HCTyCuak{r^iow@KdgD`)Kve90dGZUVC+69^2*X znYCBuVBp`b!^n7tO&tonZ?8wYZ?CMlMs&?y z73P4hiqY9COCQqocs(X)XOUQXVlMI@>*R#@En0e{>GR|C!~FaeOJ3f7gBdoSEvv+GiJ*P`mKPa<{5~ARy=CV?TVzVA_Q} zc3pV&OBc4vc7=zaK#FTKY0aSDXja3)TP&_RE@lE+&&*%(qoz?*n=-Pu6x->{F_25V z?!|F9GSFC(p}&}KSih+#KI8TKZunu{qmB2eV?qBt=g0DV;1j9dV)ypWn4eS+@cz0_ zH{z{2-6q}h_-|bSeBHj|@MxjmhV#2^ZT&T_(TUg}|TZ%|9+03@;b|`=UX9Lx*?()_)5Z z122o2M2GI@k*mioy?6=I_eJrP-Y-v9URBfmeeSleOh(Ima1Iw~{W!V|^nU5+@p{O` z&d)eqe{a1UxW`-Z1J5JAF&G{u6H$8DSt>*it2bgv(8CYymudEJle7{g9c&Muwxnz9 zmw(yA%le>~AIw%hlD`KZyF2~jefckPnY~NouSBzT>nZONZK~Wh$Vz zhiiBCD`Z^jmbgpz941lsmuKmgf9P@Kzu3!f?=P2$v+n!UP^O#UTU@2}3FMcTQ4&vl zzf3>NpL(LcfC0fUz})(D_K%v+=~Z9L3nzt_i_~5?DfoaX&?lJ!(JyQ7p{J3re*Po< zzb8vr!=;}A&g#kY%U%+lvf-+koL(LNTLG#f7YFW~05@+sa-aT)v?%RN$@KW_BVD`15p-i^}7uchLBGCVCc zx!3*;O8z{h5B2M#k(J>1%YBDg*i`vQzKMKBr)A&-NwM!4O@G?8C$Goz=)oHUXo5u_ zI!%-nDwAXDJD@w&YoA{12h#2Fe7RA)AEodv@V`;MxP2n*--rf?=e+)&c@Ma=oFCNI za>-zL&N|EqJ@A_!`2kCq^eL8=KE=nO&kK=Gkq^NiD3<+_LH*7v?2?_rh|W=r-8QHdx~}OisI%-^8boZ@qec&r~+UUVHeZs2J7Ybo-^>9-dJiu{g-J z)gP#PYqxdwHn|zflgk{52bNQeNO>9Oy~Tb{X$tTiuD$$d5)RbpYu2^RXNjj&c+TaDHx8aq;;CmU}#K zS$Tz-ptru`pAN0jKT99d^v}BVL*>c%DQUXD53Y+}G&8LJnOP{Ok=%>p#MKn%w|9P& z_RbuLa@!sMEC-tPsA5<>%8G0AaI&9DaW-DJ&IY|7Hv!1~XL^{G{xcoNZKj9&%kVv& z^fqpf4Dxk)^mDx9TIpN=${Y&Zx4r(gINS*SK*(Mb1Z(_M=K=r4I{d!C!w+4IWB7}C z+AwRLmY-aRd>gua?Dw55b{U6+qNC-@a{MIIvj}G=bgdU}Ig1vHkuW*79s#=WW})YK zE?MhodR0=~CQcq`NuyKI^i5qqpnYn=f2{h>f2u7;d7F9l=)n8EJ18>3%y%3mf92Sb z%a_a|-%eh>Ha+*=7B)-9He?YFjj!~P$mjb-{<@mAOIdM;IeW(EDmE6nS@4(TV@Jd7 zYpMhE<2Vzy%j;-_sjm9Y9u$rS{&*)xI)}~Yq{&v&bY;5fRiYC(e;vOw+(r25~^rUh38qEm_WuX><#Ud&RXApYLA6Ksn~kAAj=tLDUVpXL)pccztPj`Nsjb ztw*;58=~cXyVf49J-}V<=<&EAk*t2!!AbgiRdGjn?VSxPG) zpm%^*zqasHsb3rWvsyp12bopC>vWCAM~oDf9%=d)9Di8Bu=F8K-@v8A(ph>*({)=3 z(Z|jROD}8sdM^KLd9w71rf=cWm)51%G<`FdzF3~j9whZeLh<}?S<5|x8kxCgFnE?F zc+cPpYe;LCOaXFP;plSQh$h#=#-+02zSIPu%;RM~7=;hZ=oHaK{7&qy|JF_i{o5UV zwl}gAG3xxMbO!L(*Wsry_jP#VKl=^fuk`T#{mO<*o;i|k4*Le`=87q~|A>4M@K&8HLRf!msyh~k#q&EAs_8r_Knqo2MU^lx|L8}HYAUF5ScyxR4A!zZo;{x=>!Jy?6};V_C0 z$4-wbil6H6quyC%-uTx+{f@8SsZfg;KecN>XRPriaqWLkPip$`d6&^| z)%0~;eb8dozG+Q=ya@oFr_2d2ka_x?;2CCk4#i&Gc%Aw&`0?ZEdJjE0_;g%h4s^oC zvy$Q~%|^ei<%imxemEEot;w0_;YiiINy=y87L=25dfL`<<6u}6MZIwlJICo$!pHP^ zs;Z*Zt8yFizv=4D?RYVlmOH}!k|?abDz^jwkcaQZ`wsaY(Kz062XGfU9F4O*OfZsd z>_#trCvg6JH==pG;ihW-s^SJbJrPO-q(PqHee!`X)I;c}>1I{pex1Dw<;C}@ENe;g zLdz8T@WwHdPx)@(PjuzVd-2}k476*OS`l{3@acPjKdBxsCT28zxeR=}!?Pa~yvFqD za|Hd?`+)b`%iX_0GfXwxuDx3C2mU744&;x}yq*Qd`@960B`L_3k{=8X+j^&nq68H(90^{r_(Ef`n*I|*-!>*K*dnk^m;#3{PA9nv=|@RS3&2* zH9&~%`|NN_vG23d9cN=-((K^3%*<@Ic5z&<`a1HP-r4%2wSVgGT2D`(x^aF%wm+EO z8a{dhcz=IkWc`BNy5ac3KY;hg<47Y)@hOp*-|Rnu|DuyyR-R_-_aRL$dGeSQo+mS( zS<+)>g-7C>goE@qX|GxIm)n^CS$)!Pp}a@%GtC#-j}>@c2;@5@li`zZ1OJdGuPzxE zy0CgIljK>68?`Hh;79V|6A{Lz2j@zH3_MC58>pwVpHB2#77~i-WhO)m22C-)v%+Uc-ypf!TCeO{ zz!lW6aDSq0Pd`|jDbvIG!s0E1!Grh#TP5f_#kK^%+k%LM$+h}<(EIh;ak(^azHcpt z)5D8Ij}g`{N-5wkcXDlO`D7s6x|#9x@Sce3lYv00PoJ+Kzm=ES5&5@w`w;k?#ZQIn z_Hbd7)z|Qa-GKM~`Unft5m`STwq|k(hR^H{{C>Wk1Z45pK;HshxTc0L?g6~Nf4dEK zvW?@qrnlBkwLO9V4#Y)ztM|SUC%(NN+6%ZpIvkBl5;lu?x!c*_Xm8+-_4v&SyIKFZ zxZ}6F5Aa)h_IEKFcd=|^L9)XqC*cQwo-XkXCpj=^^{Xfzs}P8<@r%lIm~nJl_XXX* z`1RBK;LsvSFgd5b_P^nilYxJxu0O0TdNM1#hWZ84jec!^eBarP8$3VTQ?zkm@R-3J z|EU?kPx0g);dpg~O`*|pZhfO49RR$4uSg#DA-UL6k$y79%I7r0wDl1|BQDB z9!~`sE;$#tV;qkA7scCE0iApm7xx3+_auIwu1AnyY0_wC?kr#FFwj5HlW#s)CQKhD zf7|6Rzbc-Q=2s*ZAm4C*&g^1R)35gEM!5ISmVMCdV*F+6kJQlkDlY{6C9Yj~Khm#7 z-t8_w&L9lppDaFD=D)zu)pYDYb)mzi5qk zTq-UDey-OZyaQ~wJxFAMOM3N}{UW3c3n9@Q^J07?mjgec4lg3g`|AUSPqhL6uH%FK zg(E%6NHBS(js*TfkG|U|1b1ID%UNntRnxz6JMwMdtd@c#TSkBxMBy*fuYG&vTI0e-T_k6rM{d+CuH z>sPr8zuf8S$@8m2SnfLVBEiu=7Wh7=$2`9OQ}kHQc+@dVrrd8bALR^J8+) zt^nTm-}`Xi7~g#A?ro|mZoMY($Nt|UIXOOsJ|7W&7LBqWK9L9gZ9IOuAkQv7hfHn+ z5A)8Rww?(546nYO*wEIAvz(pS9oUJt4NO%z7EVGw|6H=&udntLmejYZR6!eOOn$XK z(7E#e@%H9{aaCpi_+!HIDk6n~sDK7V5h!8yOb|8QTj&x<%hFPk$;?eM?QG1FHf#+F zB7zcRQA8y!EP_Z_6cLrM%c2AU6+{gRA_7`O1w`ccdCqe0nLGDn+Sm8@?H|pY&*wSM zdCtDxb6k7*dsi_KUDLXoTm9X7H-3_ozuIUojuxZ5xmfT0hU-D=?^Y$^W+Q(6>i)U@ z*3}L2vrd=#Bd$F>zZUIsfv?+;tXICeKOqrsADZj+nX+D^UGm4b^hqh-W$4ezjLC@w zpIrTTaN-Op-)6`cWc{nNN4FbOXG-~->e5GELU?rRgQDCV&HEuz%uUy^vn8;`O($-@ z`GaphNXqB2C4ZsH|1IZ8cc(j_;&ryiSiCIyp)!_wcyHo4@kew}ijcJYpFaU{eJDt5 zPS?rG@u7ZhL5X27EPaY3*7YlNzO?J-%1)k_4a@U)!$m|w%gy?{l>1(toEYB>^CFd& zn^JO9b#mu(*!;bKD>r_D)c2erx4z|Gw*Y8;V;4%ff7Z!8+9-F?R?1y0<*qXH75EM^ zRq%AUU0>Kbxh+cWJ9YZbZO}LVMXB%6I=L@#x)jh~y6G}{iIg+f>k2$L@!R($Dfe)l zz6*sutlPT!+AfuHSJ%mXxFSDK}lG z@5c@LW?d%b{$R+hZ@Ilej>fl6-?Wmm>C^4u)Yqgw^SotQ-UA`7+mfu;zKwrfBDWds z&w9}?^Mv#qoLdh*~^+HZG?DcZ=t*z77t>jd4$Z*91j?|~)Gp^*!aZyIz6p=CKv)az-t7Z7> zT|05^P0a7hm_T^CzRYSM!xIsX)hJ2k1Y(S()Lb%Tk5SJm#GzzgpN0jRd=M@^1650wcMDJYqqaF>pH2g!%eSY@k`s+t@tZlp2wLeNIcFA zh!0IjeRtH!qouRRPi>?8`1RYSzjT9?f3VITF%GMBKQ}B=1vxB}vnpScbNHHO2zK`nW z=MSa5w)7rXye&PZn)u(+grD`JnZpk?;k%pgr6&BC;%)JpY{GA8qJP$pXD$yR#oNN~ zQ@pJ{k2m3`6>qE0q1&W=Hhxs`Hv1-;@Y9O7l`oo{Ise<5@Lf&#KE>PYA5*-ozD_jZ zr<(9vn((u3pE>>^#oO%fYvO;j2|wP1pKQWUH{t1ynd8^igzr+kt-mfQ-qv4FDBhNS z(@pqUcg}2oNb$Dv)2(=0_@hnui6;EC;;r@Tu9@v`Yr=Om;rkSCi{F^yZRs=7gr91{ zZ?W*YznpcqjDNHKa!kpcQP*G27c)6*Jh6>rO*=_WiqAmeBA-)7-;d(ox% zX6?nKlDpY$FL)nBEYOLY%-!+zgEOc1xZ-W;G1bKXmL~kHpUxb9s0rWQgfBJW$C~gH zinp~F(~7sX7i~Y2@w260cN2b8@wWbRT=BN@G}%P|7RB4zi_k;Tej8s>ysf>MY{Ji) znmK*Cn(!sX+tO#O2|v+ zep>Oi^rgpUE{|=Bw}s!Wcw2ig)`Xu@ysf=x`-Qa6#+MXtvv0f!Kc#qE`fO>!&-$gb z&*neWgzr|o&Hhov+uDoqCj4X*e%iw8_JV#ThFt`)z!e;%()*Pw}?$INC)2 zgyL=O#g-;~=t*h6tvwiR!cQsQ7JvH9%;^(Sye)mYoA9M3{8$ryLh&~HrxkC@ANs9~ zpN(&8!gpDC-Cp!5zFB)Qt>l`u7vsN^_S({WQt`I**wV!Rtm&Echnn!+P54q1eyj;U z(S)B;ysf>Ur)2zW?M0X3ZRuBP!jCK7nm>xSmAC08`e*%K+HY$wx|{H0inp~F(@pr$ zA7uEp^yzEDk15`kJ`+v&sV4lECj6|YXSTmf@wWWwYr>B<;m0k!ZZ9Sk->kjpdPc^h zS$jc$lybK8Zd1H1Kf9awFE!!En(z}%_^BrRmL~kHXJ?LoNb$DzqEGR*_F`P|w)C57 z!qcB-wy#a`w({7ecw6`-#oOA8i6;CO#oOA8uIHrvHhxU;Hv1-<@LLpbE5Eb;JahVm zn(*CC_>$sn_Kz#xmOqnC_~|A*Jul)GQ? z^iL_?)?Uo|tF+(7cPrl39*j5PwBz-j+V&inrN6)x`gnCj6|w$@tsC4>jStoA9M3{8$ryLh-ixJ*{|K z{cd}?N%?HTk1F1lKI4kFm7mEb`nM?FR)0f(m-gHElHzUkd$I{X>mM_xPgfJZqhCy*MuLn@OnHjuJ~r-fwotqoulslC*LDGPoI}? z?|&RuavKe~pnJC4UX}VLTsb~ZE-$*l2U706OjAm3(_5q+Ci|_UM_n6Yt z{V%Ea_Es&A@4V!N&L^~H)#qM(S-%u>zY}cxj|9B$$_#(UH~Q1*H~kiA!DcrexQ|an zV;G0az56cvTBMw37r!Haics9&`T=|oEW_9F2<;%{-(h@zw!Za`LVkVg3dr;KDK~3x z?so@WJ4t^}yY}#RAL6^+0$;a_&zJCZt@r*x=i{>{4PxZl5oc9Z(e^vUsyy-L4M#|b4jYS@wE?<9TS>xO1aeSbE}LqFda%I|!< z1<506H~h9eBv4<@&SH7-nyfy@Kc(dU=7!Jd_DPXooNlVPxZm4Py;JIaXglda-Y>@Q zbl_sK)=~90A^-BtO@R6P9G$=8drAL$y5A%6ceo!G@);?g33|_bav$mMXNH|s`5ttY zzth+88GEmkGw(yt_r00l%edpb_bGc^y+?~*nxAaKPb>Z+*MG}}{8QUA+9vgz--Qmy z_gMz`GjW~1x;#woE9K4a)y2Ck5_a=<>irVbvRvfq`$xKCCzRG^788mc@BM(xba{U%<{gcnox4*x%TrtSSXp&yIUT*;u6@!uv>hH zgL>I|70gftLfhM&l=7oSI_i7hTU!uKpZrv(l)tF1ejP3AmvM88)?YeI%3o>f7vH~? zTbFw3z5e23Qa=7RFZ~v^-YC*U@!i!4t>NvsT%6F7a-&bjt8}02k^Y`{{o!2|eo~pANdLX~Bfc{}zU4*3 zp+0;(UQw4C6d=~PKb*48`)O zM>McizV}C$S8d1C_oe)l+m7)48Q&GvW=-o$s5R1umLI=O${%3l+fZw_NZBD-FNSd4 zkDDG-w@dlYy6M5+E#rm(3A^8i_1z(XHdjvGxT4d4RPnF4JdfWWbM?4#cS=2fFyuS`Zgz=*PswwHpNvNhsFo(EUppPXBgN z;q24UAGIDP^5X=)Ukn`(S|`{3$zMzPFBolzZNg zbMLX@22J5wZ{HuJ{MoKN=Mz4Jm$2LZZc%doW2Apcjyv@|exeK0cF;3Y!KAB~=kK_u z0^>K4Ut)IU#cxu{54iGd#}RHvpzRI)QR+4CvpNap;{6EB!WPjf%Kw;>yUUm#XT*J4 z{NOf50{lnZOOO$Fn6eY2Q2fC_2LFo}Ix_OYb#Z}!%gD1*u} z`PtVxSN`RTDOE+(_IJG@{hj36!`}~liw&=u>sUJdC;ubmcXs<1p4Z9wML*ByIA8xF z{)k)db-iDv?4R212=VI!Za2dp7qK`j3_GaULt5 zQ#zJM>vLxxi`E($t<$wTBmLKng9li!z_$zGkEr}|5fMqK^R3&F{>*!t#JxDO7?W&W z;9)?@edVn>{kdMAE#kAL^&mNZlJ{1wX`Ls`Uc(P4;Z`_#i`*Jn>equcz*rj?wzZrIQF*7@{Jm!-ZR zxca#M<0dK8e=HZf56OS8ln3<;rM1J-Mos)AJ}Xugbg4t6Sc;D7iO`bkX+@ zVmyb?aqT0wLDCcn@e{4UR3$Fj_9pu(^h_Cda+l%f`N%>P;d9*LG!uPcnU2#|c)TgEV4X!-b z$AuytWd*F)KX#6ke^ccHx6dVguQ2TAK7;>hd&bU{@(H8-W#l?khKreBe(JN^CO_*u zDgSA=9Pqn1KNIEW=+-gBLx!O9Vf+Fqe}~aNcB^qsw|K2%?(A;9FEA#5s?DtrAOb?A4!`Tm zQZC`z-9P(^&8;Vih+eT-Ux(|a`{-p-zQY|q^w0k0=GLE!PWhXgF*B^s*U8JJ{GCQV z7351h1%B>8$4}cccBPbmk82N?%Ns{&10 zgI?eAT7dkuQr>(oXuW!`VST@woo;`%$=mmbx<%x*U0t_I|Lcr-UVm#$6ytt12H+&r^5c_I{vB?)=ke7u zLcY(CcjIx7lz+j}a7ydHcK4-w*YBj<$!@#C>%T{d z`niPfALQqeQSbQA67h#`1@*>(lTS(i&$#&}@^@b`K*K{f!qOjac2iWR)5J5{=%Oh=T2M*9#DH84gg#uk@x2@5MShrG+{6pzKuMTz`G4 zM4RsviE|U2;G)#33xbtL9lz3BmWhxS8SxV<9qbR|T>djC|A>iJS&UrE@`d!Wyl7PK zFQHpw@lT0AGLx&i1n#HeGr7GCuja-N<8_f{Wt`SnRVg#<^gEJ*a_&LgsiT{!Q?sx6t@X+zGzqH%@y7HrM-8T8| zw{4qz+fLgizeUNL_v5?iC5oRY2JU=~c9#0TVZ?V>#&;O~vAe!Iq2&HjCnxe@SeE}` zo~F3+(`A{I-(q^X2wm&zFnmJWSxGI!9uYt@ZP%`ZL_5O<#qDP9yUbbbJX7{ zCEv^*T|UQlmHOAa`f+{=B~vyN-a0DnCgsd_)J^YzcusDk{OIg$)8DoGw#m~T+a^D` zjq;=K+&2APdv2RNy=&X#C$~~w_d}!amipi3mIKi(xaD?C@#g+;pL)N$kNXuV?#hSu zlKRYdhK5>x%>`>nwC+P#Lq*}8qrw~ATgsd3IPQB~7_KVy?l^yRA1OcJ+KYW{EF;aG z&CeVxa?govQF7-P{d7*fOPZ7GQ)1tkw~s}w%3*8aoTKdN{*d%{h&%qn`zx&ni}Arg%d{IIH~l{><;7+obj&`ji$;aMOJ{BIO*TKO9oi9ey3jUyizCQr;Uc*YC5t;VU_Fzp^Y} zt|)Wq*XcbPm-@zy@CW28zXNjHU_fqg4TwH^V68G~j!Lh#4(b2%MtS9jv-nun*FT0%dzDKck@99gSP~ObDel^Fn3VgY8xP)3mFw6mc&6y9@3TH8 zwT;DD6evewX)9GINxYTQopGqxj8sxTYrCh0NEA?%qTxsrB>f1`W z(mbgz=jLbd`{L6|?lxDB>lr#?uGbj<_{;hDe5rTJkT*BJ<|w?hK+2u!<~!@XO6t9_ zQSX+8QhuYWm+!~LI+h0T(^U5i=~|Hdx0*+&vC=sAbx58r6&Bi;y>W} z@2~Se)x&c(c3)-4{HemJ z4`YW*z0K^Lb%c~_X6K}mYo@Pjnbc>V=P>U{*6BE{z}5VOMMsC zmDlgf^7@0u@;bV5>*7t_Qts(KAT}QXA34QS#UD zb`t0QF{9qo%*Y8_M!pT1Y5kZOEx4$d&1G6fMWl3p6FNrf^ZJY4*$dRTY(ZaGV(t&#rkb=Ot;XP>*db-wV3A3b8h>DpSul?i2W+ zgUWVyJTQ@w^1m?hC&L@sN>H~4V~&)2rz^Kw{L=h{h1cb9O7SDEfA<`iI7Ox9x(8%9 z=NNLs{N0DYyehffjPg=$!Lk9j+vtaNyFEwgp&_aFI#(~Zn@d=}u3y#i6Wb`?mzDZA zzFh{u=g<#tT`fi$hqu1+RviJIUeh%xzlUqjD)CFF0}V?) zgxpt-LZ?c(Rqp%(?@Y@lGgrxD;H$Wjy6Ycfo29(@4)~CKzh#Jbk9Gb{j!L=b-SF`~ zw%jMp@iOMotzpVUo``ynE1N!o(`%Edf z%xwqx{E+-EslWAVUiX2I7aD%71&atTgy5x;Xs(p2$<39;I(e&E`1+PInco`(4JAlKYpN z@4QcOkcgN5ZUnsof2AP?)hEaYs82vsAPU4`Dqd4p$?y(x`(^GA$A!<g zf7^Hecm8$ylx~s!Gp?OjXA);qHlfw`zAv3tau2$4Tn|oUJ4+eyfBm}B#1Ew2{oHtQ z{gmg**2r_$ZpAzusiN(f{;~9@l<9;2h7rye;b-UE(y%W}p^Bj+JxZOOw*<1M^y+g{iy6pybqruHl z{Men6|Fat&#{a6H{XA>qCzOqTcJwYOZ=UZG@4WfONjg4VcT4$|u70E=hGDusYq>Ec z_Yp(xByX9*EzeU*E@#LM2eg-6_sDR!cAiG}O8Kw3dU+nSxgmchl$?3~Pj3LB6uRl& z_YX6S`l9 zccm-G^JTPW7&oVl_)RN09UmP(ZTGAPq@IIaJvs49^IeKR)aB*KU+WuHylF?lcz96H zgF+9=a1MN{RK(-z<6Grn-{a*1=kcwl?day?92H*QW76N&jz{}`A?3~e9$imROdIM+ z+b^a3fIDs!=aNT63yM?781smluls|s$EEyhJ9_c>@#fY{E9=IO1B6HXkVhMEGNC4! zQ|tbSx$BQNE70ab$U6PTo|55CxOQS*E5C18(0YalbOA3jVO}fRd+o35Y3c85!{0LL zZ<#o*H+S|j>2I0vH%F!W)E}k4b#8ma=k{LU0Qz{|AV+JSeW5=|`MZs9*0kOt3|k{7 zxNA^Ld0e%MeIKvFq35N)&${W!=g2tO=kj^7YlQ*;y$bla7&(CH(F}}XQ9g0Te<8@W zNv%Xot*vwyg`wI&WS{BX1Ax!gZu{O7v(tCYDA78>31{;JgXDP=$RH+r0p zWyZtjD16pyQtpSY9QS`BqXXxuQ%e4xI(ZT6K>6{1N&T-F^0}5Vwm2saW++_SGyeM4 z*`wpx_iriR=j!M7YGFfrH5nkM(gTyU#kA-wQlDm?zxNLGjjru!u-Klhruy3lv(=$m ze|x%^KO|F3Z*a=$&%x=klW_{wY$|u~kdrGp<;o$YRHf41jsNCsi!V=6rG1IeM6tQs zQ$Cd~v}X(1YNl9l?zowb1y-&hz`WC*$_=K<<A_-eKA$SlI_;`t z2UF>4wpgH1!&9~bN&32h43txOr&P=qs!qArDWv*y2d-}c)n*`#_6vO(%}Y@A97NqUdkI#e-8OqDi;T`Ij5YeI`k!w`wb*w?HvQo zfccN^(#(LL`HN*>p8u>Wzgv=*tE(>=ZJ^a!<9KEey^ZsX7(9-(Zo=M>(bC#o-FQWWf2;Zp`OScF=RNrkR8;DWPJfq8H|@`@mMEaAI!uf^y^?I(Mj7c_6!TXpqQ|!JJc|@B6R{Jz*dN*>a_tFJ@|}uc>N^c3A3}BpR3f4In#^N;}I? z+i1CgrgLZ+d#lCXO77@-H^1QmT+mZ{YOL8z@3>kk*ANU0|RYXTT}18Yww+ zi-B^KIBFt}NqX8wg(FFP66P7jrKF#ukuX5iu7x>NMOq6`l)YFenlcL?ovE4r0Vff0 zViB}csc5G&K-U?H26IrJo0~(!N53?1G_3Qo)%ivACiJF(JNZ&|Bws;t(1(_JM!Fe? zqEbv3O30}S9b*WfSx!4NVjzR*`NcxDT+E@VrLP-ADw8QAfV9&)?4;>IgF!Xm2Aa0i zV<*zC%RN&dl%|LQz$9R_+JN9LRm=HQWdog352td-rgE6RQ4bGpOl@%JCkN-z3A zddG@7V+QA!(bPK>H(>60^60_xwLGl@E?bX*0W$+bbe3jfArx)nA6@S>`nML14#*}*%hQKedUhg>O0*b&vc#wLM1ye>#y`5$P$JqQ`jLUaf?THJmVu{ic@ZccI~b+1%(p1oG?H&s#%Ioe-&CV>NmJjv6xHeoK&G!qR$vO`n&l< zPI^Ng%^KZk5GdO^_n$Ce(SG$*(K@I>&&q)T^d$6-BR%8tJt+B*sX8k#NU6}F2Itm+ zOm;Y*8qB6?$Y2raY_&4Ci~&uB&Nqnu8k(aj`c=Bwhl)n?NdwGF*$TboD9@x#8vKv} z_G|D614OewAX2tufcaY0;hx$Z@_fZ0MXeQH?le$t$%+HL^Lv+bN>u2t28Y318ilDJ zsn|PM9H>` zNYAZp8m8YHAVMrxYo()77#!snaL+Vrm1j?_Eb!ipGfYVX&lWPyriJBlu}r-NT*+nA zj)XsDz{v7!M&aKv@ZzvjMw)MwK7M5|KvPu-ziGfI2gUM;#P?tAnJN08+y*+rz%toP zu{y*9-4jjJNo7QqU2K3zFU(YO4&7>iC5#iR^N<}F$}HvR(sLG;c01ZLMU13H2uYx- z^NGZCyTX5|-($k{%(;dp^kSkoh~ECYCJ~}X;S|HX>JZw`Os~jA`j2pb1O%PWI)zl}u# z7g9MEdBYIlNlH(4P;@jOJk~R;zn0Bq)cBrO7{ox?aZch5Xk}RL67YwLUbyB&NZ=$VAr!Zco=L`-W()6~qo(%wo=^z8Z1gqM6QX)p(esB}O znhEmgM})&Omdgw#(?2+zLK@#`U}a|@=cKFL{m}CUj*e7T;#tRgRw1t_WVq91%)+?@ ztv0}cjTsa}+GIfRhXPw!c?5mcL^+?hL#4a?=rY9Lq38WD3+HPz8=sM>%GhpXd2eN7 zwwfM7ZZ0qdP`-FP4S0hAqa^o?Mn}ivn_iTDOfB2FdU6}j!?hAUYzWFVEA*j0ne9`aMVkhl zYX5L=qtKy-kg8VP>iATZ3@M{IRRb8G@U@0;sn(Aoi9%B>s4=5Y_|JxLs*+dAeM0Z+ z_hQ1>Jy2DI{l_h_(YQ7PQNXG@QH*I(WKv)Ju~(8Mk5^wzcokrWD@as)NjsapG-I! z4t4kqy2&RLNkqaizeUgagyNA{B{uEP?r<-$o zmiubfb%sd$V6mT9X4_-*iy$~oZv?>!+HXjWhq?8odD_M81&`6v02;foj!-;ApR-X3 zy2VCy(9B|OYA_z5D*}lAd^SuE1rrf^)gZ94 zX)KPGXul1f&2^FNq?HEM+dG`86nl9<(~Az8PHyDT_c2`@$fQPu%yo@2X`Zk3DoG*q zv>{X|_Nx6BqYvIA=NZU5E*QGx0sU__z0B<^jJmKOrnbc@%d?dV2CJAyU>KBl)R^p< z|G&cNamtvGuRdy-3h0FV_EfC2&&A+_PLjWSFtn*v>5Fjbs2&KBMc5IVlP$I%!<%Ad zy4MxP%Hq=&*`qLT<*8O-dxFn}D;H5ae!5y^J20rC~^}o@;8?Z~!j$&sPYgrjel>V!Dgk$t+ z)}Z!-4-_+tN_*pEv{_@}15ld3niT_nhumkq_|4u_9 zK~Mj88ahIhDF0WnNOsVt|2qxgNC*A;zf=+Jp!Ujt6_0Q%OsD^ER2X&qVfg3Pr(9l9 z>@F7vv7A+*e*)~U4FE?OUEvI31~ZJ!;Z%m&s+xfh*)}bzVU=}>iEAHnd#GYkOAEuO zQ<>ETUbN#qX!^R9KB`u5=wX*OOcBi-{Tq}ty=Mr$vjq3883t-Y=4OUd=-z3CNh)wv zvA8HzrV*1`l*OcbRT0~O^feQQ?6M-(PVR9*BPE|_P>kIwY>u3fFN2ERhc$sTV-=X3 zIdrIt8ajFbx(&ekO0m%HHK*YyeGatSim3T&d%23)`W)>N`-=CNa`pP$48XPr&UEBp zQn9SMyPY>0>g&C&E+~1{Z~8eBe(FV$Pu*f)^^^w6iwr99H8as+dSV6|QyzNTCV#-5 z_HYP8&6)UEgw{9k*yyOb@l-ps;|)>;6!&G^$zx~!X8~-!UwM7qBvoUM(ZfRBm>)D^ zk3c*crnL?H5SHLiZ$L%rJ3YMV)Xgh%H(Dgh^TitG?;B{9v&!t9Smw7A3Q& zK}Kv>Bw`|R7}IPF7Klc)z*P`%OR|UocX^`3yFr=7>`!+2)de*?cQWFPis|i;ll7J* zj$Wh_10AVQf85C=GjyD0VzF3%IOW7L2`AzVU_SIo!C*ofjVBY)j{Xc?u8~9}p3HQh z?Y|d@#eBmYe_h%66ss>I6OCcyia-ylEJ-h7XegS#`MDy7$@F>nsZUU^UUYOO>5c|| zsG869qz0TGY-Vn0U@MAwͽohYt{gV#w?AAbLc*gcwqGfUO>rF?9Q4|mWxGbxP6 z>DC$f7(L&>4`iKOMwaq-o#t6{V7)m#BZVrCM;PtiY6#1YWOV_Xomg9UGCUkV6?na0 zqp7~Sfpq8YVfrP=fqb>SR9b``8~UemdN~nBLEC$?VWX6u!+%6oro+Lq%kvY(h@qs= ze$;dk1^T=~aJ;aT(_4}^E6}j_3GEYIl;|X02ViucvNNZBM+NGX%W8Xjo(mi^gv4+t zEdhisN?fKpTXN{r5;VfQ8VDvv5K~0 z!cEyql@4>=D~eSK^}0~EQ_k~b5yuD50BEZ2PF06Yy*EiuM`ST>nKERtFCi9xAzLUa z8|V|l2B%!cm>^r>BaI(W&?YBc6Zm;q5v!6%weV7H!?cGpbU%81gyhy z>z``%<`>K5TB$0IBqI6TvCDn%AD`K%0V3x7>ja2oi-%;9V%eN| zvi2+x+G2A#K()!=tEUffP3&}?bx}-HgPoz!GjHW8CJ>Adv+VpF+&*U_2NWN+M!JbJ|7cv z71U)0oCdtI+>hYyHqcZhoy{&P<}&oWff`ZV?QGAs`4lo;XB`Y_rZZ3f^BFJHWkuTGbXIAR>8z1sIG58WO;?(}ZaN*h-E>8GZ%NG}-9HT1U6dZDh#(E+BjL`zI(g$51hd<^Udi#TOpq0brc z+)NI~HzrJEsFY%(+fFC-- z1cx0o>IEtq*gQ<+3r@wM3+q5Wv-rI_q*6)s9-SJZC+pB^Y6JbpM4ZAPG}8Oe^URw! zl*(?X)HY;kiHR0V#e5N`-t#6{P7UR=G*%Cxi+AWI6RQnMqaUvWhq4)Z-9YB23aJby z+}wVoJiMTDJ7~-^Y<{ZDNwlI4s-XoCesH`^q~NJ0J(R-MHI3IpdAhw0KrU@?9QvaP z7V~)wYTkOj5qhzNa|krYgs@hU#pXqxjxx~^oZ%`~X}At6BURx2QUhFod@N)5e_I`f zMUxc163NmZO}JLd6-N;Hoj&hbv~X|)Cix25VWt4mqykTUCRQEF7E7??Oaol(6w8C0 zwpW`VzJfqO=14zm!Z_Xr=qKP;qoIRmiO(=`AvhqGM3!V|n&{hDPNBh@-l^QKEfsr&P=7u_mTMzo20WD7rrPiZepd0JJTxul64f*4B zXd%Nn|3*EQMJ#ZPnfCjlXCW3#a4@YvOH9ncmoM4g<*5-A`xEO3oZ{>~BD*2Ap_Zjf z>zHzpt5@&*8a^r-#!>bl((FZEGX=89gZErwScM%7`bZs6;0g@mQzlw2(&?tVmP03# zrOQnWO$`>P=sp8mk?O}WT~3O>ny9m}cU3CeyR7EWo?r5eS>bFf5} z8E}$`qRjs@M7TjUNY8WTn{#EsZP z_1G|{`pYJk&1AT6?DBJ_h+-7({7B=YPC`AD5+* z4QG$&Pb+kpfz9oizjSHu5@%DdoK!wwaPzX6Y_IxWiT-X73sCrIkFR?MEpSRW?T8_L zh7L1fWUsWo-#~Gu8wV!QGoEFDo(0#MD8}~a2c`^Y>4Ki#c}TnRNbgFFDKHl(6Me%o zh51!D<6kEbHU%;cHUv{89%LP7;D_VmTQ|0!Fo?h&V&uyKoav%6UcZdxp%4 zVgdaa&ZTl~pO1-sZ#RF-OMfHy>oN;J`V)~q3`)k&umF9z}IT%E_#;^7Es6V z>4K^2=mzn{91RDDWMq=kryC@eE)Y?|c~*zM7sO(ztz4z28mMK(jrhn9lYiRza=(?! zd1)}#0Ix0~KZKV)gHsD3y>fw?&IzE*C5c;2zU-ih$v7E~1D7t${E+Y%1K``HzZ-%_ z){0m$bgB1U;aPkXMpnGcIN!i}@a-Zm`u48kqooKSffoku9A{I_Ebcum$;ofd6 zTvcl#Ji6ZySY60stv=JcR2MLM)nJe29#+`c50(>vOMU24cPxFkk6A{~`jH&H?JCa%4r^JJ4)#Me>h?j)sq9Azbddq^(vX_r zkI;{OglvZB83Xp#Ry#WB9pCb7@`z-FI)aH9^#v0hbao(tFJ^BDBog?PFp$7`^6jn; zvZ^yq2L}^LIy#UDhr%>!VWM<(Ad`sFBY{LXl%O{(OegJsO_0f9oF6(ekijXIlLCn_ z&iZ`Q!gSEjf|*E&UJYdMS^2)-4zvuP9~@y};#9LR9dwz6>7@ID8EovmY+<6b&$WTJ zMH93*km-m}DUb+9lk}xvCKjT*EKHRCVqp^WuI~hzhHv}l1vBw57<>m53~&pPTa!8sMo?I=xhsfcXj>#q2V0mJ9b;h=aJm>9ij zVLIr5n*yyybI@a9B6O;SiP4o7rh^_1X0Sc~x`m0-2frI=TRcH4EliR|f*JIq->@)I z`l*G9(<>IHgZBMiplvvBb%ce9P|d=`=`stGr2B%IB>D>r6Qg}@4zvx&F&A5yPC7A| zL9M^k!o=uq3)4Y=wJ@FZ?(YZL77ayczJ-ZV-okXy7lN5^h;Fwq5qjRj#AuIO0&NQ? z=;Ib9N!efqwf+JN6Qdtlm;^m*VLEBo9|YPKjnGFdOq?7G(?RE1m`=JSn8885KUkPJ z?R;yXZLtpO2xd_0Qx+yl=UA8oeb>Tt((i(qM1L08g^AMj z7A8TzwlGQB{zrkfp>7{yVWM=Lg^ANAEldYp8_ZzR@k}kI zL*3qNVdC^H3zMWrf*I89H!Mt)_P;I2>KJP9krt+tP7Y=w5xU&M#OWam(?PEVGtm%z zU^39QXq1*)m^f{;Fdg(Y3)4vt1T#3p{tpWiqxan&Xd7zq(qINPxME?V^c4$}pnEM$ zC%qKRV6?v19f7uC2D;F~#HnauI_MG$(@A#*GpO}1T9_#9d1s()n6b>YFiF}F%wU9n zk%fuUZ59Ue9}Ck#v+oMDE!jyQ4Q4vSG-zR>biRd2(5)7xlb#7=;#h9jw7Isl+Ly=ak|mMbkJ`sOegJl zZ=h`$1%xe3jMiG11f6MNI_bJ#2BUz-EliwRe-daLK889tm_ZwIjD?BN=@uqN*I1Yi zdMud1*#Aun6QKj{3$z*+hxAyO4m#Dsbkdc<4BC)~EliAFw=f;_!TSSkLrbyJ!bEAr z!X)S$7A8qQwJ@FZN-%?w!@ds$+J^bU5f%nlu~?V{U1ni0{|RIgXhUAMFjy~pFvzw9 zRtXkcm?WJT%!KJn!9;}a3?^dqLNF1hJ$@Q!R|kD8m`KuKAc0BdSTGT$TY`xw{XUq8 z(M~@LvZ^CNu|NW)Z(T4ErcVVESWgKi;`FOvB0+C?D9Ea0k`4?eI;kg+K&N&}FcGE8 zgNYdZESN~pE5SquwM_+?+u2D=1BozJxhfVWLSL~kF}l~n#OWmq(?NSZ9Ap}9d7y>C z4EoKYg^AE57A8t}T9`P!Xkikx=g$LeLti`B!gSJxU;++%@W-xYGYhfaEriDR! zXJO*>xP?hj>n{UsOJMvI%%B@M#=_uxWeXFfYb;Eh940AaT8&N9o?r&6 z8>d>BC|zk`;`FeENzm&SCP^QBJkU0bURGL|FpXH4D1F1i#ObFNrh{IwFxYQ=BFMG~ z#x+M+7_1*#m>6AVVd8Y3h3TM|EliU3`E{Ue=oc1Sm)Vcon>KSbiIYa`mu$<`tehNw&66xA;Aphp~qR6 zD1Fkx#OPWJlb~N(m=1c&?*nZ^zi?16gL%bj3xoAz3lpVpS(rFIVqtJT#lj?M|33s; zjUMAj3lpZ3Eez%t76$9b7A8TjS(qe!;OQXSqL@i6w=iMaXknuCH477`2P{m2{$XK~ z^uA|;ZNvO0n8EIQ#lm3y*uuo=UJKJfFIkvQ+Ut*jwxP#ZXkj8$v@lV+#KOesP7BjP zFIt!+?fGn=ZRj!PT9`0xurN`&$il?vHVc!W=PV4)&-^LSHk=IjsD;7$v4z3 z$HFA&84Hu7U7icJ4fCI120cdF!eIVmVKD!(Fqr>X7|ehE9B3PE&5H*!m}B%>m@u7f zVWM=Sg^AH`EKGuSd_K^&L$eSQtFTVPSB7#=^wt6$_J~eg7I{TMYLY9ARNPsTRzjFS*RZMCd*X z6Qh?cOq}-F5@;JG}KW<@gekPbfFLQx~iO`QMOq8CrFmc-TI_bP%2EEKJ76#{MEKH1c{(GQpINjP|VLB*fVUl!CFoRy^yA~!wzq2qgdh0&| zZNtIrsD;7#nP3Jz##t67Lf2cE82#G9Bxw782HJ)m;}8qeNyh~-=H!KY1Kd%N^9Y?=#q=kvl$rc9l z9}9!|kA=bc84J@%A9yX$HnjfBEliX)T9_Dp&B7$;0SnVX|FAHf^uB)u+J@GDsfCG9 z#lpnsD;5UlXDm#TUJ7O~li2I^K-Mb#(&hp;He4=6Q}bn49?G3m?S-8VLEA- z{{-5GwWm%C6Q#6;iPL8-OoDEgh3=C@l?S;+UOR3)S@7ylPtR#*Lb{Pz=s=x&V(#Md2dlrP_==ClLrjn63{n$o@={bX{ z;d|huxTA2F?Sl-%b03{_C@A^3SciOiSHDR}8N*Yimd}sSrwqiiHWINlzM- zabZ{M4xUXi*TuD?^Bdod`KTdj1dG=$Xb2Q8#Y-0p!+Z^z`sDX>K;3KPG`*shH!r%o z!|+)uZp00Q^o#+ii&(S#D)7!bdVwe$KCoSu03p*Zid#|p2jY=LR6N5*eVR%8na}u@ zMI$1R8-x#Bm#UvLrbinkWw38(QQWwi>`Y)a;UwiVnEpnuF31>2lQ~p`|>(MqYu=fS{z3v|6WH3aiH&cn`dRVBEDzG zhw)t|>b<)(Xuw|DBto5ZelUYVajS(1(=!$ZPkrp<8D)fntExLKOpMYN2K~K-L4R*y z@Vy|IJYOa#@{(&q>)RD#)Y<(thDSepdKSiLi3V^}H3PmUSvGIuhDIOjGoen;dA?)rO!if1w%fYZpUZprBvCOTgdcmOqEuPqUbYVNmDQA3VeRf z_4(<+m-7y5Z+Kki9-Cyt`#SWFdedE+ZVWdA4gE?x#ps^QGP>wkTpQ%=i8;$E(#ta(uW>6FJXZzR#< z8Z*qoV3qc0Gy~to?yq5F98pdr-xMIFUMGfHQsVeTOJWsoGd;>Da z^ZGhOv>}gb=p?+{EXE}N)QD$X5_9)`-l>ek!>!_>-;Zg4eJ;TJ^wg&jqq?4b?F#g(fJx5L1F z1|T#u_!k3|;W4`VUZxcpikWVm$j6x=UJBy`KGnbm)55NC19B90mw^qYImAC22&5Q# z>)t5HNWJz0X+Qi#OUl^@*F3m%j;nAT1LD$E!6iSql89gSta=NbA$Az=|N$MTf7jo+)7}a7$2^;bxxZy^Z@+> zpJs2Z=e;*K8wjRN+wc&L-!~QOuG1qimQr`EYR-XLU z($%(;+jP8emlv)#%ZSYTh>Mm|nYOi2p)u*91qV;(`9<-ntj{y9svIoj9Z~KQv9?p` zWdy9X(QZGMbpqd-?Sr3dG4ht-P!~I6ZZuMG@~ghGT%8J6gYg)l7SjW`fLA=F-6m4Q zGne1H)$6s#u>O~$)DJ8n+Ef0jxtF zO!H`hyN)G5xw2yMrpFKv2KVqwOSB#^1W-q+_~qIox+z?fcb?%(W4{W(UIMmuo$Fmj zr|Uj|5w~?1O!sVboDv>rp&S^`S{Hsc7;e2EEq$(-Vk>vS@3n~zQFq}CD`!K6&8KnY zAKtcd8yXFGwN^Ae3E2!JQ9j0?>;FQ}8_=U8r$eQ_2Liy80It;*(3cF6f$S#HLLy z@K`ODF?du@CmK2o_?tiTR2%T50T+rWu21=aR{*T#7rNIqWE~fPkv6pRh8ZQ8u~6Wr z(vpV)^1GR*F?h15q}#v+g+;qeS%`x{p!QK5e|16NdV4IpBkR_RXS&^f>JvhWU+#9H zYXIpW^JurRe7obL4bb}lt;JL5y4K8RH!4v>l2x!uEqc>v#H%M5&~opmdRYVK{?O}t zuYuD4Q-#sTyoktVo?^dhfR-6hUJp!C23XSIumKKg@Em|{IUS^NQ-(G^=><1PpD|pb zi=-bkAP)m^)%BuH&!+J~i>F0FYkt!Jl>wnB$RTCh$*0n1{J^;33Ae^#)$y?g2h+9l)1C{D zgrhU~Oat;Y4>?4n32tmX1dF2WtKlj;gLH={(2ixx3T}ITwh?+0&|0sqv^}F*%>(E_ z@8_ZTiDJvQU_1DU0I)uRA8uM;aL0RM{QCI0z;$gi;O_;)KR31H)8f^_7YtDa?e?sv zR6z#<;`-^@Ap6r*413L)D1%%Fb3F9;q@kvsxy{P_R)wQ0!(0A@0HU%9=VoX>c86sO zVrIDzP91%WMn!9LcL4TV1IuOmd3l#sJm>k<*r0*sSN70GpZi?6y?Ifkx&dQb`n4gX zpuPX>=~hq-&|1|MorK?RN>*waTsD4z=|dpt=M5bKISGj9+Ys|}`L~Yx5YH9pa>Ii} z&V0dBA(1Zw;k2d84QeCaqBxPBXh2>9B2DI`?|c!ixK{#tWyS3WEP8&|n$iKZIS9N2 zpeID%fm27IL!%{&q3r z>5m3GG_Qu1@V5U{^G{P7iL+ zX15s3aH&bswe0p1VUS)0pc5cp%+xTS=H%}hG?Nv{g3#Nj=lL4+>hgh*P@!QQ?vBt2=Yo@Iw7%GNolmf1U_0TT{ zqBqv*km-Yc(IML5U!D>Jc7oy40UxMx?*c;vPofRWYrG!}M4ttUwZFC6T(xNA<)2(% z+3$6uVj7t^4>&SE)aiK;DN|rv&3G`68xvxYPSv>G$j(SiJAc7WlqlVzzXo^1pe)Z5 zTW=ias}-0D<^Rn})p#*UW9(EGBxwS!29>C38`^ZlefpVOxv}7s+uST4^g<6_7OLP` z1kBy#l8h&eSv#H);8!b9!F`KC14T>_ESy%?1Z zG0zUcEG&pska|4NPgz1&gNM8mAdjFI&u<8q-xNpF;ijk2)OjX2`BHUcW|09r@w^1O znoHrm8E>W>7#!P#9MoB?+i%Yv35DEIm`0|DoTzNMmMx0j42QsihVAWQ%}V`upM1Q5;OG zr#>*ag%V7!f4ALCY|Hl0Bv*fvv@aZPea3cIKif|q1*+A%;1xmOq)-+LyRn2g)^l;* zfc{c1uh3OH)Tvfz5vXehI$yCE{~1G6W48rhzXFDVkL+w;fuo^a<0{lp24&S_UuLPp za#E;GPvVWW?0!5{T;Z_=7PS3-xHOm1Zmq!Xks!@^w zeDIP^wo!c{gU#Xwy%?(tTxTM$x_I?+$jPC%SWr%73!=RGn&85sT&*%BPF5a;ScxTM z&vRh`#wtPhyq=yQnAbJ~ac)zBh@-^nbpWGNaskJf_kKL1M1lo&3+#zK1d{!O%R%$o zvtAoqpHxypgvhyW<`O!6$8CWy?u64bsEUV8a(r&X--Yn*Gv3ofgI-#Or_CD5QVOp| zSE@(WoSM_tP>#8BxCSBp$C|$snuRvkZS-}<)9DOH;>Mas ziM|C)7rY8@9f--!vR#AFL7+TF)$*C_@bVO1aiR+haToks5cu}pwlOiq`ls9Z45sI0 zs}-+W6u3>dvgukG@6XL3fakS_@j!RQuL1>O*V#s&CxfMffa$m^sL}|X1Be%uBO%r4 z-N35WhC4d(&zpDj*U}rXr1ls~Teux}H*8Sy`vTK8DCoNA_E&@ZN zz2E7DTt^&g5O|a=Q_PEJ!)U~UUkp6B&iea_p_915iAIp+&%=|Lku~^~E901{h=#)K zW(2bluc`T)Ep@z?{%y85FqUggIlW5YtMUO+B@AW5HqAv{zM z(n34GN0LE)sS6}ZLb!4Bri>w1n@)}jX1Y8Q@=TH^E!6%TO!x{EHI$}p)X}n+mjOCN zIz9*-2B?>olXNj$4Po>6$+f?JFqKbLHt3n2S;RNum1GR7)%3<>a4-a?#sew5TR0r# zMbz_#3W108Dss?>G<$Gwj)iDDv5xfuyU_G-y~Q+xcG(ARZ++f77H}wthUm^z>_pG9 zHsY<9y1HP*H5^P3N59(Ea0W|8_u>_mG-mspuD+pi4qY&>OVqWYr2!A~sx}@%WG#QP;M>0+ z_KAIPXE^UJ7S9|1o^g5Ob8v`ZTl%BJ3NdS$0LWYsdYd31_SD zK67F45Io85;ERui%1sA>wUU?4ME(fm+N2KUw{YpNCB?UKbifDwNEeU;wUAtWIL;7~ zNa91DH;F7a5P3+m7l^A!AEZ0U6jMhtuMfcPH!yvE@wW!1mZIrz1}2V%w(jp)CWc{q z`GGJ1H!;^&iiLK#R+ezkpk`$*1S38%>gI!*FV?x}!-^{u=NC&OG|T7yAlzby>i{0M zxV4rRTJV10+`D^{C$UC-`cRm0)G^EDl6QSX@}h^(iI-h-8QS^aVEjPfB2H?Tc@FwA9tR}V>Euik{%r7K zKa75gUv6=&Hvva5YEB!MIsM6lO zz8kQJwQQ9SX#24047fciY1Qig9@>~kLvx9)dDcTr(LP7%+LvOO5( z;grfHb*^v2wN{*M;(p^n_9Q-oT82+=_;@}&1E?NZAMzuo16jLHNbxr{^njKSu3f@P zUbx;5mm#|flfVj{Xo^Vafkx;LfTVRo)2nc*$yvLK+fEUcmNIR{*o(qJ;1K|MF&jsY zP|**mRR@yosWd-bEx$896}*-F{!HW(AP-bt+l4aBurU~T)$?S+i=%EpCY%P0IwH-J z1hzA8^a}%fH2~W+*5Df>@D$KGjlix5z;3JaJs;x*nI^l&J^vnhOdwh|&VBJeO%Nt||9 zj2p}w!Vgy2G$WD$;T_n);dfvg*~}lL<}s4M86cB@k29D^_;7f*E(nMG6O6}vAwz!q zB!|rFFTMc6OhnxRElUhM94|aXe3}r#r40^`Bte7bvt`Bg7k|9}Q3r={KZupD_safJ333xB1Ob;b9fyF)Z$x zIOI1AydH-5RSZXxjq;B%5%w#BkCu;sXtd`bhQlGBK?wL5COUnk1o$Ty572+DP}I?= z=m{n|d?CZ2?GFPU_2CF0#5krobtwV)wT$zJAifm(l+feLN623<kl)*2Y1bIq5pWsBff$H`_B@J8pFL_$Tz0XlZ?k2@f|+~yfN4i!+4my-X4T| zJQHzW`oPY!7;h{n6Ab%8h4kY>eZ6wPEgy$;q%qJrjQg~}memY5R?yQJ?raqQ7ULbh zBtxi=GVY5Jw7+V^WR?`NqWghQI^T{vkm$+Vh&gebHir=CMIB9|4PwWFqFX z6dq0y9(?Hu`70RjXbkva#`&WNGl8Jz-$K6+ho1fCLq6imN5~(=c-WT`z)xj7;lrWl zDj^^8DFX2*2zP*PP5`lBrlxXoCh1P!#T*~!DP3B8(T9=wq6M;BZz4%&K+f--9syXd zkv_bz0qQa!K9a|uEv_=K64JC9rSm|)AUBa0Jv4*YH#w|sw12cw^&I;CD!t#(ul1Qr!fdO2-4kw=yU_hA<{92`&9_I z0@#fyPD~yxPfU&((jIzuAUe$|L_HJBNB@A+O(<=2zg~n^X}YOyu?Tsx_z0vq28r;= z)4(j8_$ltG5~pp&jPjO1^ilTep2^*Nnd?I1k%3G2$M2G0v{t^LX+Adit8@qOM)Zw9 z^j*u@Of-U6I=~Y1q3lcwtA(kkzl-?8HyQw;b-LiUgTQ-)3XXTZhL;%Uff7QZT~~0V z_$S)8W7*NkTT@iypAqjs@)y~S(XEd157?a$drv~U7wKo2iSg)LD&1)%`;5wSsR-l{ zc1JtVJ%C5z^{_kXir0iVIu+^rVs@f$5aA+SZejO2qfl(uElWG1iR=}&9}Gy88gZG% znmSirxa37MxG1JuU$*n7BiT2D1m${WD71p;~EuA*dMfE+5`%&IdFB{5+v1LW$-^0!I&;&2IsNP1xuAEBQne{ppVft9jg8k5o*t?RMYAa#{62siDZW;oEUH%EaH{miUj0DKpOEG-WHq-^Q(nGbtFUNnXxa^eu>EE-jo6g`Cffes42EG z8);vO0;j3~{=qu%F9q<*Aa0~$xR$Ht_aS|HsfEVm&C}lOi96uxG++;abA4CxQ?Sz` zF#ERae1fUGe52BQ37|%5?e)gPG@y+qLMrxU*vymDsjT(2{R?T3=mWkJ1SJ?(_KCB3 zJ4$#)mNSVRvEN?~Ym)c2v{pm%3B<^)Du0f0ZDC4r&xVG@??f>L%rNxO^X3x#bYgBG zvCOW3fQ4-C@+2+feSo-X1DGq#X964s^mqG83^*NtxnMmvxJS@KRX>V?H2C#g!CyLH zWfm0sw97p@+q0EF=Jt*f_5WswnISy`HYZeg~L0P3HDk z1jMc1uP?;Xy7LLDf({gMTx#9`P!w`PJ`ULgh-b;~k={cft%rGylhu4C1fp-tLzMZ9 zM&9)S%}Bw5e$OmY(18NaGk76YrUJ*A?*pD4f(H9bIQcN23rkr#qxtzmuq~l{NB`4!)D+cuJbhu!qQidisoYGi4$k9M?;LxCy?_+w#7$rf+^J)tL=4}kS(!Lx#0x&gy zdYwS`jm?MBfL{oJbm^Qi?@j|g0brwksB=S%bSN`Bgsl!@ilb;g&v75buSO(;WzY^9 zQ1~6{c;lDcE#`?SDCJvR9ZrYl8iBs`i(;uVnOG@Meivm0pPnd!m z-7&`r-ma4t3nER9khi-O$mgUy1a53Xek?Qg;H~j7PGW9k8RLn*RcmlgNEogl7pm>sa16N zLfdnP16v6dW!^v~GzgCmQ4qnDm*AU2Fmg}ySCKu?d=OC8y92HnNdXoEV4;^E)~%#H zuz4#A8mT$lgQErGK=+odnY!*Ls0tFK-+I>O0KNrwhbOV-l>jQP!ip)dw7n3CWY*DNVDmUC zJ7qkXilwuH?vV5}XNRy#d2nzAF43D$1F9`?z|%)lfae3~y4by;`wF0ZiAag$iAo+R z6^G4l12O^lrEl@n1Mp!1m||Bnp_q|0;QIk|YDtL|a#WDRQ{hOX*^37s6x;MxlA1EO z=@jv5hDf$fnlp|Bz%>_PG|KnXPe|SjAj>0D(5VEw zl8UEQbEXR#8{YG93DL(y97{$MLT= z_0PBBCx?ZcGzG-!BO_S?MpsW8^FCniMngEWK@CZ~sdpfE|2v|(vuS_c3TRB=Ip*Rt z;5PwmBnASwm}Gf~hvtaDuLnbngWuVhOr%?Y|2E+3m_uH$;Q_k%%uciUVf~`}f}$!v z96Y=)8SkZ`l$vvEHW%@9 zi@Ec4^h;Z94bDDbJrMZUxuneHKL}71yUlP^_7_Uh47SNo7Hw1E|rsWh|tziAvy&g`Nq*1H{`nJ+Oxj9P<8< zk397>YXNob01(H-^ajgrD9Vv4#X|4!)?xFWu!g{PrNDj>t6Ze#TYrlpGVFxyfe6I{ z!)gHxDJ<~Jj~v}^q(XljKnayFpYs7vQ(>32 zwt5AhAZq?VB?#<4#FSHuUijglWwr{ZbXyd{S7P&Ijs!#nVn8Jhcqafl6p`#Hq`)1D zvl6p2sN{hEOatzFJ|y!>C%ZNW5ln?(=f>uiGDoHrm;pfJ*ygKgz#pXmSHsBw&$bJa zM5L$#MYu}2h@JxQEWU*R{BK14zJ(uAVLN#U-4Q2f!OJd;@v-2O0j7(=pii#)S@@Yk z)IJ#bWTMa}%GyOV>`@`)n!vB9yQeXfI&SI#7d^=e-Kd~?hriazk6kJC)Y59fJkqFe z|BrYRYDwAdVBLoz{Os*lZVyXyydoZDfJ&}$oFalXvKBz$SPWkJ(Lm*i<}5{N&{o_+ z>CMwuaHy%5HYodkP^R}t?*t5k zt^T@?O&4<`Fy|6E8(pYN@uCRDDUkR3c*uSVEjVn^VTT;LfZmV5;^3_P zoeEOmFZcx7mP9`s;3%DlbQt%hL?~g^1jhL>+6jc803iYF`D6<4bO59B*lGDA1P_I< z;L8C{Lhm8u2*1NA{+jtzj3GmpemV_$5}=ybd9gVizZ}8MeYNri_CPKQs(NVOXFNd< zJqu7zBFI(n@vtCBd2n?I=j(s)9>@c^JuC>W_53r0yTi}@K1+&o*>&ggPnTZz_59Q4 zQ4AvBT~wsLK#OWqzt)fd_!*hAsOTpfF!_GTN|2IEe>aFd?UGQcl;tIHbm|48{b}^R z!Ld_OYY&E5onlE-$7QddiUdU}*b(sdks4He!GBL7%aaJa^b@Vb zcKxjkbvI@&;Ggc2>}CAZB}VxU|8!fPTP?D`^Zoz1m2>P9^JHdoAql*Qi8{Dq-=RlDb*#H1>(!cNY)c9$%PUIrKcaG5}$m` zw@fakr&mhJS@v^c%;B&9FSwuhg+LXNY;mViNkXJ2nRe@YL9o4RSX9 zzmkdTXC$~AE0XhXl7MN+0Qde96(qAB9mMd|v`0r%5ql=J*3dy21Uv=&fpqW}hzh?- zu_wfbqmD}9U3QnCVL&czZ5HPOcLF;xVK!X5rsMY7a`6fU(c*2zIVgEz0;N8r< zN(o(D?BB*8EnD|xp&r170JGIJ+08o~1?*boPhlfN2=jCe?8usF=Y zp|7XFZUzhrw9fZ$_($*t>0tt3xIx zYMQSgCCYOx5W$n9IU&eB_BtF;L=dcbo)e;U+9z%H1=(dNQF1gc5vCg+shRHv;0?>M z#Tz!ahBVfW)NotIOa^EIT6m==D4;h6pmh?aA5DQ>1ej}EAk5`}qxmYP$n)zETVVeT zVbqij!)D*Byg&kKyE*|{9e_wizQb^48t_5@>AgTqoUapDVVySB&@GJ0228uvyZC4D zr0!7$_&0U?Ttf}jllS@b%RY%*Y&!6Rjx$>Mi|S?re%e$({(J4_RK*Eke@lTq_gmD0 z@b%d%0l}4A37sr9M-T?HBVCx2-A~S`T*FT;?(PHx_ zhhdwN`8G-8(&)VyKWzZe!`f3|$8)uy5ti3x3wGZ9Irg`6?>~v(C%!q%B=sl40HD(j zDmyTrxr@_HMPN%)U?%{^(PzwF=;Apo_OE$c9rzgF#H<4!F1MVnuv9(ZpK-w6-;p|a zhnmMnr(cQRL_&U^9{ssJz+O5`PicHP|Ndv}_w%kLjcD#Ha~yuMgqA#wn7pY1=vi9W z)hV!_QDsN!ULkcPzAtJU+w@(g;{k7q0}2*E=_4uAz1f1_M39aqiLW`=BDmjwkNtl3 zb+&?|kRyP;1h)@Rj-?y1W+@8N;2*C8zlsRKgb`W13IDYJx>bOS&F|@7N{>0%HfOH) zYy$A>)4?YO;5Xv4@MaJIzXb^Q=JJ@mNXNkthMzZ%0UIWme2kffeBX3Q^8<~Se{XuE z8Tk|-vs5^t*@=Hos|EDz<#*HMLbwOrAWRmUD*ibw9`g@D#m@qJI$C1nzbF^<`=K{Z z!KOl;5xsl>e#5BNh+lfG8>eE1*FyT?FfjSo6ilMnM|^*ZmQWx|jHX8JpFJeR7F&TD zv$FSg1j^4-6op?c_!>A?j$Iss)IWzDja2i0NsP;W0ClL`L3_;)QIH0I!4K2n^8x1t z0V9%MvClEbBtb(#ZOXuEw#NaV1;7cU58l?%6S?mNsF8w&H+hjF1#d!uqa{!9Hij^! z`!<3&H10d|v4G@qypCOgG<9DFEVATrM$Fq%p?@Wssy=uU{QB>CKk{-aYTv`2R@!8#G?KwfzRNTx5UXa zxCdY_WXSg$RMO_Mx$rA!+SZ!i1e84V#p9m7hb{t?j%1x$EeB$46Ps>qfB=g&pFp{* z?CE}sz&ziZTkuZ`xypp#aUMZ|W!G|Av z+p+o7&$T`HNDuo29yCI!=@U@sqXp-@^j~t_di(zbjr`vr@Q$C7@ujuK{0K#OXj~c0 zZ$%nka|eF9PPP8vLsZ!ru7xfCS%Ajt0-I77z^V@q{X{DCY9bML3e0U0!ff?&4d>yI zN?5Sq)_`eP(18NBYZZxQ_eqjT5L;|oQI^VQ zvDs3;=mHdB;~L}h?Yey6RQ|ReHIyCni#kG}>}ZtHxqOV*R)8HS(k5I6`Di_QDEobb zvS<7fyb!2xgsuMO1MEN%Uhw<4UNoMccY7UXRCq$8 z!qZX6?_gs5E(P41tTtrIRAP5iwIG++qx8FfXt)*sGtavNBUS#rCHVK*_%|aVI89m7 zKQ3kR^PcF>M}19uTlb1P9a#&w8GsWH(R+M?j=+C`=CCn-nvmgFV0^y(E_W!&E z|E!g(!>vcCZ)NUHf|`CU(~fg>ZNBM+b>JO*4`sCXakdFp+7cP*8CErN{ z-VUG-opRFpV@kN{Q5)zUq}jr5zMnA>gm3F1y=yv1Uj|Z)-w~zFNN>>R*jkno32Nzh zFaAwjv~;|cz>6_P^xb9W-1Qd;0IEg|+}_v3?H7ac9_Z z)ZK_)fcN=n;@y^Hj4wUXbdj%Gj^>_t3t|Y%ra~A1f?qR&U|m#y^m2#~ZQV&|{38v> zB@wN{zud<~ZUrAVBL01BihoG-RUn5smx|ptY|W?eGb%KnRUS?s+JU8CnPO2L+#9DKEk6$BC&s?XVn@s8Q%b^yWdB&F+mJ;o+M)so zEiT4!#o>WYp54s#K$;3Cd*9SJt-y(ECdutwV5PMsDnSijLyIXnK?;ibCy2$`hk595 zv4xl39~U|(Ji1X~1%;_2ETM5v5#oFS)zaG5xYiTIEY^IAg=#Zi`9QoGycyKu;~N*B zf#T^kC8UbRT#bs;YD}zN^PdvULE?<=Z7S~}D37)_Qe13Y{63;SEwMtXXwFTjxI6V) z{+wtIV$s@|6)251CMXcZtokq>Ir;!?J&wX2X(IPeRqG=snwxDD@#l&Ca?dx1a=p&S*6|k3WVY@@8~1 zMm~y-TORmeN(s53C!!#&-6`a8)DWN9m@QQBT~J9cG&S!v(H~sgi2*$)&kW( zd!g%1(MG1%I^}P>Q|mLR#m`~rbxlN->0EA)aG7SMT@Qt#O|#M?s1!cbnTBu+{~q#@ zXE@WSchzpzd)U=Olqck4UilA|Bwn&2EJ@e#sZ*nT5-737sB>FsxO=O0UT;8g)Cj}U z84ouqJpiRK(kpn2iDVjyidyo|x+OFJnILz#Ec}O|C@Q6v+)}sXPl=M@?gBpWhRmZi zbHF1BUb5qRW3ogipFt{evqERX9p%RfH@>a4Z zYeyApHSExjL5^5H;e7nxM)}Q;?Y`zxW$whA^L+J~wMUvO{(Yop{tI@syB!|r*%UzN zsi5<~Q$*)AkMBXlrs$6yPdRO8pZ@~s3T|c1qnkzakJiENQ@0@iYbsCFD|tUk+%ytw z!;9s4#q!8-ajz>H3 zM;Mpl|Fbo9{;IvQ_Do6vU2(u>09Xg;b7bQFkpA>4`5HiUPZ1EzB3`kJg>Q~9 z-7A9%T0cBvRxMVLg%Ov@=x*3+TNH?Aa{5mw2>sImGJ8(tS`sGI;4h|s_IVCK_ffK~vI zSTusP4lqaO@U2C;1HCDz>!FvYLVpsH=q1DChY^1ckUezGGrUk9dJ3SaHiA%qitDhU z@iE}18ABcP`+%;!xZIAM?2H8Hr2s{k+0XR8E*-qy5}+p$LUL0AayB4#1L1^K2E&x3 zhO;TnKg8QrDHTd7;B5XFdvo05`^+-&5=8z%pKe6!#Y5$cJUc@+o91Fqh{t@KMwt0P zYj4E$$As9maspJ%_vVY6^OV?$Z@YU|RR{pt=&mx?qN|C%)U^ol2oj$vhZ=Iah?K)5 z-u0JH3*h=>UH%gADANmzY_X*>X5V{;|0e`pGd@uwv z2=`yUkO1P6&5Z=)n4^4`XBaU@le>@iQ1#Pq6H>+<3jQOC1xFpMYxo55@deq-{WA>FZ*=u|GoBH2`TZGYDFeqHm(enOdyuc9hv3jTL-)mI`B; zdUDsHB+=j{=79h7Tzqqvm?Hp>HEM}@-Yb=Qh&mTgYZp3IxsS#!F(+^#wK-a7hunKn zDndnz@xj>xqYzu+Ij{2KM$7BfSb-Yckm;e%dbKujdici!-x?N~cX<1Li8&i((mLv< zg$sBHL~$M^ep4a6YPPhYE}4gcVU4gZ$}8q*H^t>Vic6@ETnSF3t-?=3nTY2K`5x_o z?x(~3J8-ovuCyNVoVjYk5v`?=-Rl5t+mu8X0abfL$=cUKOH41y(p%y$>nrZBh~;#V z_c<`VB}uaP0n_$UtR+d*{SVTXIA@goOHOII#2kfUkxzzVD%y2G({?n%dk}cxXip_} zL#s;Ph}2(!WxF7HoW;NF#j_=5?mQ>Hb`zP~feosB0adgq)2(w4>O{u=R7`Gc(z0=;0C1^e{F$^pI-h;l-rqF zIR1+PBxAG!)~bb0SUYva5iS6N3Y(7cZD6pl>BZ+RQeo4}zlL&aNHnFKTCYcSJ+fuGbKIipYl0(*d>h`DkW|dE;x9jR4L9Kv)Rm0zfPw0c?JqBQ20~0kLFZ z7fZ~E|D{Cv=lk$eNb>Jb;kPBoKS!51a{T*z{I-}##-{iuHr zD)jZVR<@btj9bpymBym?y+Xb=m~wzotM1)pkKy zGX*M1-61%~cwCwcT3cz@w}xH89bviz@5hRtt%O}LV7uU&%WW5A&#W#WNOMjh=4qCE zep3qZ2_f3CuXaj=_$Eu-^|vG5ai#XS&OZ2t6g8mDD5(=8B)_2YO+(%o$;GBiNPY9E zB8l+aE}`|}7lbX}12JJSEkbMCQ$-V|H7c}z@l?^IXKfQg?6CdzwDDL{sM}4uP}<=r zcEd_{N1go(7cj*!p)~r!J(UrOshOfu>Uq(gQtTCq6`?e-=M>Q`ETod^n7OAyViwEW z&QV(9FWys{r6L}WD_JFX%KjviTT))oD@=BFWuAr;Q?=nDzO{(n5a%9 zmhQOFJM?9HDlC7BIlsxY3#AKQt`xUoJ^GnAs@ZMUM{>Vq9%;!X9h)M303H;_gwmre zA;p*NC$6wibiW%=#5XF6rQ$FG&z90Bb3)NPOXLz7-?olZuxmKQdTd zk=WWgYC11^Lbzd5FWxgLt;_aU8!ytYJaLnbvK)#N*}^$t(g?!b6zRB%HSiCCc9&wE6#E*b(XT4 zM>@c2PhIY8rCJ^)P;>74SBqcX&!5``>;(agwLa4W%KiORZU5XgS4g!ptA`Mz#r1>l z+UoEIe37cVm#(v$HWBykSA}Au<_b?8*bv$Y>H6TV_C;Kn&+v3=&y0( zF;iOF(ETNPs!n%nCRnc zzbRIP;EE-vrk^B;4;l=WH|Nc$(0Ey!(!%B$v@XgQl+E}tkw30!fVxZX1^WxVq9Avi2Y>iEnnKP?xt@t<{%iEqSie+SD^12Rk4H6al zC`MLQ=(U;@d07#kWNsHBUvsbu3ju1Rz;#|wR_J=y8<3NuCS7i7$zX}49Q0Igzza^2 z1`BVYS831iIJ+nNG4$qzbZ**3@beGV2GEyl(HV)!$AV|gm+42%8|D&SuQIIvj-YX~ zcn)9hA^ok?Cv0WT)}P{D8tUGdr+~2;lZLH&jW&=uulCZ=^ilfw@448rFyTrb8sSL?y{a$jY>#6tXIoAL~h?W~b0v zzCv3!+(!K|dX^K;j+3*`%ANX0ou)A-17~{xvXBeU@~dHE*;t2OvMhgjos{T3wk)mA z`6`w%fc;#A8TVj<%ubncNl&IjnsUbB+N9(Xg6?p7s>wR7&C9}x1^qy{krGWT?Ci|U z&Ar=d!7G!vB4Z@ocpDX-d#_a9G6fGfbKy=?L&+wXCnjjm2OKsFpJt(dvEw84rp-s> z@~!lI_*sCpeIftnBeXe?7d?-DR&8Z!1v{k20+_W1xE|^o!JC-1kZQv3@Gt_vQT2dX z+_UWtlBM}eJ1P(mLxPks-%N^N^WGo=?%9waqNYt~eZNy1ZHENRUB{~(5>YMikO-Bq zi6Kyet`p=^MO83`v~fF38zlB4znE@$km!aG4vu{+K;T!Tj1+F^xU}%%W3;7^85M$s z<=;MZ=o7`I9u{Xz#CTlAiK<8Ev%sU~siE0Vv!OElL;}N+OD$y7Xp(_Y}+c~>~ZxLXDsB)bXY z;)yqB4E+aj+o;!OxMDw2Xy@LFVIrhoe7v%dFE=ecc0E-+&RIx?w#0*+*ME2f=U^yY zpIi8&_>_nDCjD)uMaWGmS6KSB5g2<6(ae2RHR_i(rA5|r*F>g>6_l@Y<6 z(~8}!sR+`a6q$YUP7yO}my8*?zuX^}J3)%F(5xIBsSOO43uaQt{o^F3CQ`sauJ2?~ zHF?){*<|~b5Gu9gc1R`P<|z04<|0-M^JdHIl9QDu2O|UbnTPg(^L?XDh1q?-K zb|Sz;*kg>031^R?c3u6QBF_&us9e1Mb-Clys2t7)bq1=}YINVx<P;%# zRJCojE!@r8E z{0ag_fqlw8%Bw$1cMOShONz-ZXOG;NQ!KT+H>&(w?Qm`PdsOk;SLfcj!P-cM=a2Qd zOWbdGggkbf?r7%-;oSJuIY76HS$eZhbpmm5!pEQ%H(0Y}-Up}c4_2*NyJpQgGbwVH z2UROHB)nFxz#!t&R7euI{MRxvZL27j6}FI3qXKBdc1E)oH8# zE^n5-jzYYwv@NE<^G>0B-4@}HSw=+G7BGR`2*c=svs&Gxfeb~R9xN>5kGqR|4X8JJtr4+*nrjZ8_k#q zJ$YtK_`n!g&mC@bWO#&nv&j7W_3j&^qc++T$l_8c8EwPY-x0P2o3?kI6&eiyh==G% z&hS+Tz_3GfFfm*}u}ySP+|8sdAhwAr1)^O5guBFzm~>>H=#VxN09$1TC?Y0Q9cDGQ z$Dyq3)y^fc%I!!P_4!RM1>EZ9aH7yaaE#SPC=|n4545p@l(KRkGGNi z*?*%2MXZAomDxkkciYB%`CMsKY(k682RJt6>0o|eeAdSJA)+Nbl{CAA*p=t2rZ^<} z#F^gYI8=?8oYND&2-~}H*$9#+aacRFMsIncJ#LPh8P`KNMkljOl~FXCH@RKL(4mT59V_Tmvwk~gMP)gH|q(-Rc@d3>(W|yepuNSI1WcRYc?^1F0XPe3E zOAxQXF=0>;i-u`a?J6_F3GMs300E9GS2r4Sk!AiR`P(>XMmtqj=}K&Y9}BWm7wrZ);k8xPQQV!ACr+Q!}d zhco@Gv5jY!$q+)6A3oFf;#RH%19TJ6R;~oQ^AM^8lXHtF*TL-PFu19axo_6|MN})C z{wlNPA51Wqrmr{)cbEVRjT3l>k}U@22~gZTtqFH{QnI2?ck*+FW(RW6w-QoPhp0=s z^gG(MQG;>Egz786IvfRAO3k>`J@hkT9#I-{8C5A{r{`@1TDBW5V~8%bpzn=YPuv2%ki2!L1@(j`-qJ z#cf)xUBKE#6vA`}<9B^k1jxwFW>x4h@H(v%R%Yug_LxE+Jil$Ids~mhcpYNQ6>mJA zHp+fSBT1^r7B}H))6%x%2*DL8CB$}V$C@j&Jp;0qs5xc^>><;6aDjA#NoR8Qm>Fw~ zj)@E0jz{oO^L?V6qQp>3S$ zNcn+?=q9(QLs~Nb+mRMshjm!R=k*h-x0C!75;$DFi-^^5)Ddv3;103KZKN3k1rtF5 zH2@$i(|W!bQwNr7r;d`>5*BR-rtfs+i3*hJsIVjyeF7Zow@0Si)da)>u4=>y0(F64 zV-;8I>=67ur+w)?80ieJ*+AdVbWpEdQY|hXU@mSKy{_IR`t?W^3V!vKhq)acQvUpF zT|eMzlms|MgK#RGY6pC&1lu~i{8Wf0s8+IDx;1>^Kz#kux(W*Ok|7=8=5-4WH!UK} zwN5C0nG|zYwZ1#Y56-~) z&gq@eDAOYr9AQR<*@4#y(`;ghF^w6HMwX-JGu>}b6OY5NzXeqUM}*u%yG=IBb6VOA zWZ4`J;m!3{=u5v>S9sR?jGStHD&awO0X_Tx!1mhbkPMtP<6@)q@Fz z5s}(pK93V;srxfWBXKrgpTscJpzqsLn&Lq-Aw-^kiwe|-Ues86m%r%HkVh7Yskx(F z_}2N?Nw1AsV#P2m!u5;FJ<|Byq>6j6LhiV6ZInF;D7&R(_xTLrHb#St56=UvsXJk{`l?<#NJu~NrM=xP|MV4-#el}-U-nRY;4 z`>{kj0Pp>=HoK(^@d0cLv@RBChblLhyWBM!Z{oA(4q+7HECN@Bmr{$(gtYRc+tXTm z@mY!1LI%f)zQif+frClJ1CD_MVZLE?U?tXBB~!t5aeJFP2nAZ;EWTtO1Oqv$A9%Ki zj%=WtU_9)V3xYmPJDydrvmFe94c8UQT;n765uNmQBi=TrmG*`!t9iT*7G+G_DN5n{ zBR|nYUy{6c5NnHNqDLZljSQyExdnRbkIQG~F1lWJA+>?>$Y393J}=0nx8yLghKO?I z{enMe$3&{bh|Uc2Yx3ZM z&ec2XfXq6SVCY;2I{`L2GN zgRXM=&K$(G{Jgd77E#=>_o@O*mF_~GJEbcyPLgUM=p-`BK&nuNz?F3~p{mBq0P`&O zoI=+HyM*;uRfPCmNZvXVj={!Wc)mdX#+ zBO*gaCm3vlct;r-G6~t1(ua49xz7sLA%77~jS4s&+9EJstI#np&&NgyUgii#9!%(y zf3*X5FWVo?hTXDtxU-wSoNIOpxj7H0Y2aG~#WK$*f#blZqyxFVe&C`AZP0r1bq9UO z0QQ~7=|9h@Z9?`QPo9j-M=}$pkMA$ybc&7NO<9uJ zWW(mq;CLW+gpW{x&@cqO>RO!|@`&9@#DgRz9Q}jSWiKBLw@-w9Cmd{73v-E$l1=imX3Oe>KmIAPCw zF}p;(p+~%!Xkf6rqS(SZiZTT&l(V%bDT6EuYJI(fRZ|hhKT`qXi;bHoR7ZXUV{CxL z>h7An{;HV?p|a>v?PaPS-2I77%bu3=rQwDzzxgREQoVU=HONz+O!D0(U1Q3COLnUg4+^dVH^?hW=}!hiTML!Ip=~1zst+d#>Fu zhGir|q-*gcpnr{hvFp8`EQ<;}KmTN%v@JQ6Hd})a53Dxt2E&8376I^LXTQFyv{|HJ zeg#Pyhn7voHfn|ZZDN!6jAYa2Mf4a^{rpQpZ9Q3E0{=jLxwDog^8fYsIvo;Q2T9h!EoOzH1*POSmt}jG>fDkdbUce z6jt~iVTl8i#=NTS3hql@&ub!JJS93H-7BI9+>RatdS?r>%uvr*Dc zvl|L^h&!WaF5^PI{5;_jBbhLJ8=>$`$PSmWdmzp&POKEpz1SI5qpT~!@)Q3a)>!83 z64YD9V$9)@ox0TCzWZ7HLb%GT-I_M_;@aECPT%>Pgo zbN!|r?%YntL!f21_rK{8yZ80##GM3D;iypD_=4l!8;rZ15}>wcM0sc`cwHJW6W zh>#RFEQl0p=s-P}v`Hppiosr^XqFilhVT4OWi0D~(^tsWH=2kcEK%(qoP*R0@Eduu z+AdTco2}IBGu0#g zb5#@`ZG$c`N0ftjS&ivaPjfq!=y?YS@rJ~ZC&kA3sfj_faSQrjs4~nqA@*_MaCG59 zLQH>h<+V;X4$YVdaQ%UiR<3tr+Uhm%_ozFkqgPx=sA78V&2OMqn{i<2xo}#Nxsy2_vYP9~k4-hf2(P2ybMF%RI}X-QRMgBAMe%#! ze%zlKgkMuNW5WBzi?yw^%TtlF{StZjtYjq0;!V5^8)r5kCceD-Jy|=nT5{#5$M?i^ zSd9t=(;^JNs*GvZPLo-X4ahE|`gGsx58vy>O=l*vOR67mn8@$3;3NQLlWCKpVJ;R6AA9m9!xl2Ghf9d%EP{d|eZgwdY=uwe7K}B<*S+1ncJ;ARP|LO9D@GrPFwq zh%vNM#o-WJa7>%Uz89U~o~)r2(pzj{3itGZ&?o!)icr0ImG)<3RL9mXdv@VZSK=E2 z&tmpm%)0FK;B_<~FpLX_4EveVwE&9gS5bGWZkfX~t0gL9TqL4Em=Dkq-|4&=@d(OjK*efge|0tFM` zT;{9fw3rsD^^n%aeIqnW`DO8GS~7zf&R1~MgbuF9=Z!ha@?If-o1l2i^%6JmRc6mE z^wNi9tN3(e9&cn}LwI5q9qZ*Lhv z{biWsx@xgdu=_rL5FE0mK;w!s-m5kX*VlFl_c+$Ne02yj3n$BK7o-mks;IRsxDZ4r z%PS+)yW^*O+hB`ahcAIr!EHf-8q7oh!~Gp#{UHLG#V;}@Ll~M5w1)%G&^Amo1^ZGS zMWbiY0e=}2 zVXLT3B;(S}a6Ne*o)i%WYa%M=V$iy}8?A5DrXm%WZ_~CGdU?zYRa&?kfn+_rI@zazP#q3sK9_lXja!h-`DIz`&Lu%wPa%dmjhhvU0A@`Bfg{)1# z-wIEJMA}fz7wCw-+JVo~EyupPgll_af@{uDwa~JeOaR3}w+brOjH3SfOqHHD;=wci zT0wo5^)6vchOXXmk9Otmcb_K^(OL`Gmk;9b-b@J5r;jRe(Q=p5axyJts1r+vJHj*z zkqeZVM=TDPyH^x9n=vVR`&+dAGyt1+ERsZES@#miEiN!+nks|W__7b4ozq&LPyf*H z(Va_cM|GO*!r?V=cx1&Q=}AJ1~AF($g9O+bYr|U>+64co3srizRA4X#XC`i?0C=@;*%r*^>{tNY;bzAS4|Mhg z0AKIniCH5mX10cFfwVx-NcKqzL+OvhRuN6MZLgUQk^5GaKg8|8sIZ7;Ldw^DMD=60 z2)aQIt8rGQWrgL{Jf75;E~#;}7+nL`#>Y9YE&IY0N`+DDP5`%04eOsefv^vkBGR_I-Ula-Qb7Q~0X zqRrGQ2NNS!H@*QP$unZBqG} z*9Z}bL^(0^CP%P#OKd+l8h3X)W(IdV=n@MWJ=--}o7Cn8JTYr{-2)?HWT>*nc3rc` zxb0ePFirEZKGNBVHazmVrDQ5#UYdjBBy3mm^xDR~H>J*J>rxuYOMQVl`8uh;emyGk zZTM~-ou-_8(wOT^oYsdt$oX7XENx?#pk}&+_(j*LGT55nZ^+gxBi69qY1^g`?sE6z zJ$0Jscs3*N2b)o$`H}0Dc1&TuX7pkJs!ElQd~eFC2+9;|0~~a~Mcgr|@Ss-oJbDU@ zWXuhgX7NU$%`vA$Os|!(DIQW0#A|-&gyB51q4(x5=Le%TdAw>J3bh6=TcPZ@?Gi4n zHz_v>ocp;Dvu;~3#yuH#+aX`7AwOp4mV9N{v&vE4%=aLe1)}S?c%y zTDKc5!JP&OF*O&(cqsQ(%}mzggU+R6hzkH zp67dUwO4~SlFkM4BC{~gY;lYv6-)#V23_Q z@$E=Mfx7Qs^hn+S8^uHIrR7(m$t_UxQ8v z#mjDYl=EAb!{jgn2ZOQ~5|!opi#Lw^mQFmyJ1T|(ukJ5%M8-MZ59#`PC5 z?a0JL$RbL_NC;?l0Txz}gcgjA!HdJUU zv#Z|@xb?>{CMLnssMzdgE z^#`ee)DjXXhq2<)k>2f9FzgNm!Q<~RT!O{j;S-vF$0dt>Qa#8P-bX(4E)n1>_o^W5 zFnbD_9_BodQyM%QxgYKxx85qg=Q znnn82ze+2jPa3!}2ms;;j>+kqkmUk*qs(tvQuyGWQ747+jPf}7Z>hYZd%U#u(}|95 z80;<%9f>0V(E`{{FFPt-Rb zw#jksna<5hQHV%yc8bIs|DlpgiS;@HQF;9d?6+vM0|k$CBEqs{(GE)ygB?ih5Gum{ z(nnN`*sdgbND(!X6n4>@lEIhC_(3m;_JWkFcWIu47_0SmcZ!H#el#L#yYoSwTEW7% z!uy5tE}|Crm*Dl3i-CiX<}MNTQ;$W2u4id!+LRfo&izt5oLNIO(2lf;mUareeA6;{ zmJ;jMsdY7NwntJ((^Q1hkCo#dap*w?@0IYNCWP9Gr%5}qJQi`99~p>IbI($30(q5T zXfB+x+xU8Chj2PEtD2KE@Luy?xr=`=ur=vF5&zml_07~?nv)= zXOY@h8mmF(6pLiyY>?wZ_2Q?iMkCV4sMjOqEp1HbJpDPUFYzG*eMu0-tsjjza(jw& z0n_%NYRtkBASQ5db(c0r`95Ttvgge+(?hSD^QA(bO{ZDp-1uCTw>C0V#btgR?r{`2 zn0Z5RgS8@IlJ*M948MaLEDqUZH_aaAEK=2yqH6@OSaMSlY5SVfq=v6S(H9??gNpo_ zS=4;wph#^cEB9pr!JM%E1UDiYPcv8%=^-OOuC0hrpWa7JDz1?l*)@dnW?P4%O_gkR z3Z z7de~{SF=ymX1FMdx)*6t4cikcU%SXPJX7TpVSk}3 zkMCqC50Oc^eK{&(z3wF{p4CK$d&i#)vqp8pCu1{mdw81`0@wXInN_Hlxm{#^Ol6J; z@=E#J6sc$vhRw)5;|1|!E1I#jKX*yp170Qy;~X;hn#d&kR_tUM16qFZh|q%VwoQ$Y$lo^mhK+AcJ1-CbH+`Th@R zEv1LlhgZtI17<>qeY!;ij4~%gvs20jU!je#Th)E`jcXM0F0)CvD}uW$Cv`GsoK~22hp_pEvf~}6RstD`f8Dq>F0v=ngKO?m z{lHn;Qi?4k$t*iHP6ncjHMU9JGhU@F=S0PR&5Ji%72|hgSy4o@`(%@S+(t$?JK-m{ zrI>bp6K5bWqaws3Dh%J|)ek{s`H{{{&qa1uZH|Yxh9Mer8&)kh=GC@c_sZX<3|}T6 zNReWwL+VTl?(*59lYlPc9A)<(9a4VB9Mv7$1Qy>L!+Vb~6M)9g$Tj`JUU9V|bT|>B z6F^eIarP@Q6PO8MdeU5B9<`xHR5-|)haZ9MvedrMQR$`o&=gX4XW0B<7oJcw7~utC zQZ>%I(`P1y$Y}?tNJ(OD`cOB{)1ogK2cnG%l|v4SYZo_2RTA8iVeS4Qu3g{3*`yH3 z7TJ^vWUSzu{BB!8O{*E4(_ih{Q; zFlM2xa*Ol?!?;Md1uC_EWX-;TMR%Mms-ay(nfGZ#K%88KmH<`JPhp; z^gp?3@?Jp?p|bQrCbcY2qcVc+EVIYkR^mS?1a3cA`11*=Qt=gsI&G4tBT7j4Cb$GK1|(jNJZmk2YkouDZ>N2|p+%sqnb?b;`>Q zaDO=x*Z64K{lZ@@=a6g%eS55vd85rjVcqMMQmvIg0)OP%V{MLsV59AdI&8=oarelk z&?i=n-6Etb3i=u%t;>($&$T-n>JnidRiR?!><8+-&){1ZT;J|K|4_AEs$8a36VniVS~87Pp_hVW(f-;gR3?>Lv_W2uLN7W!Szqhrmr5^1 z>!Vqc-6qY{kKs=iM+K?~p|7PA^a7Qz;lL{=nrRWg*d^%WuA23RlWe6Py$IW86#b{m z)X27QR)VhF=G&}&W~%aWEd`)~v~-+5YG>|jh4;TRa%Z0<0DgAEE0o3>5<-v2jkpP6 z`?lrEUQ+G`?l|Z-?MM*!@5QpkvTX}kKF7I;Q2au>%qQ>liU!Pf;rffil{>xrK$ax9 zad*`Gb18eTA^`A3wYvfU#yINyq2{&5o&!^wtmVFXl_?-dX_6T?Qk0{nVe=iH`}u*+Z6sv{Yd5FG0@p->F9Nc zUrcle!bjJrI8Y9_pX9X_JC4ngy(XWV6w3IFD^@?DGp_VJW9<2mv>!>wY!}3h5_`v5)nJV;k#9dMx9J3H1u$w@60TF}3+7C}4c@hf5T5rsLI@vR1!IBy zUmd;fg}OQnalvYQdazxjTHP5)hyLww!m(GaR6P-x3AL_6>fJTH`hH?eiiMDJv6t^x z%Km&(XkNHZy8|D%MHBBx#MZbfBDP3)Hzvr>I7TXYkr~TIDw?HqOC7Af;^rbQ506Um zJ$2CBH$Nu@;kaYdx#FXuNEX{Ar8m^UqHhn5OWC2vB`6IKAYBRDbGsCtl|<^x_an_J zO|YX)IA!r z$HF;MEtwW6en(HxTJCD~LNc~**ZV*_mZUbCHDp)e31c$mPbS+zW3~&;5A@4Z@l{w-AQ=~ydH3krA6p1tSQ~ZZF65!bc1T`f_}qh zt=3oWt>WXBWJgy9$@dZNAkb9-2+NuKwi8ccs!tpy*b=$76}&}({rDG#v_C~fze~ow zDgyWmMP6h)WUyU6E|Pw7i%1+*k2f6MTX-7O3DrKNW9^`o)9e%qlUudzG0)8UjXuoA z5$B|*#zPp#KpTxxI(?f`wC8#Q?p)6c!?oliEu(^em)7%W1y22KCZ*(%)0A>tR%jNg z3v%Aj*+?B>q2_iW^Z_O4S+Zm$WUZE>ztlnL!5ea8PPYP`C4ZYZ`BGB%Ow_LGqk{UT zv$QR=HGuFvxkKMB+aby|qnYYsl8sQ7pf0If8VzZ{K+icVcU(wB-+IT05RHn|{gu*S z(e)T0R$&0H(u5#B`j*{eS}B7qJ(YZ`t^Ydt8$A(?F~%qKD9cg1;Qm_c*d%MK-FNSi z^@z8A>)ji3RqZbx>aW5J=Env-V%woxK$}-{wmj8285nGvY6x#-%6Vmq5U1@;bmY~XptG0 zk{6yWQg{r`h2nA+vKE>8(~gVZ z5s#&44Sc>%P|MS(f;6Ioc>Bt%DuREf*7NNl;uxyDeTMHmAsG9gFGAJ9WFKPCv(NX!1hUM8pyCBJddJEu*4-`XjE}u}Nf;3NlEgOj4Q% zr4LU`3uyK5NX_gNBDEb#EKxCP`(7e`oH1lWiK9}z?PCeu0Rtb(D6!~T{P&M*YwN^= z>@YMJTeQO1G=;NMj!rIqU}iN}OxgvlLN9Hyar!1)o^afFLJM-F)(?f|`_P$|kTIXI z(w;AWo9vDD0T*YJ(VcWf{vKB?8BcB1ouk8gVcdb{ymgYwXZRW&%zVu(uS zq0dO8W8@H?ONp50w+Qe#E{q;wGh8kNJj`b;?Y%D9Lmp@x$MDk335`<~H4C5Leoi}* zzx;&|h1-yjVIE)1qZ{BN;-;uNdDg=ZZi+^xh3sxH73d3|3#}$VMI6YlO@V0(gmBE(3+IJ6@2>x_1R1;);;AIxqG42Hh)J+!lm-xtZ)Z}^(CY|05{x>3XS8gRa$s%!1qGJ&y^Mj%Nz0iytHH8Wb^IL z!;Ulzi+4CCui5oFOu(;#Tfx!-)Lzeot2( zeIhC=6kC2Elw*{96*}Oq7{z;=;(G+r0e3yd%yuc>?_+3~i?Q}K2zF$d+h=6i8bz_bYRH*Rs23Y>8@h>S(o*kWk_pGzFp z%wuU<#x3|hOma32@GhZT{e^PiYY^K5cLV7_$0}%Kr zF6L3F*o3BVQ9>AB()U**F%{@nWgV8-bTFR-GHWqSKEaHhSfkJfl)5yC$xcHZblnDC z1R@=xg0;UCRn+yl;jQ5OQwK_y;O~38)bpKREKxqC0>7VWk>cOqp_*n7J#Z1AL2jT^ zLoA4twS;{0JR{!ejo>xaq)=ZppUc9PrBYubhQTa-!E_-(j_ z$GCgM;MTL`4u(i0c)wkUeeAa?x&4H6!FwqQ`J#NiI*@UO!dpk+i=t*s=so;9p*uw- zh+^)ts7K4+rutQIP)5)AQK>_aKR$J(JOX|5&6prgYK2gKLTNKv^oKvFPNuB_x>RT; zrQX7Owe2{h2+pPK357qh@DiX|6y3$W6po0r3xRX)iwWXa@aX+KIs8Z?9U;732;QuO zvxqbd(Xy-eX1q*c#SM@Q5dt$V^$x#Z1gnFNy$5}uzC+Mn^FTv%d!wseklOzoHX4&$ zaDY5bahc!-O=_S7zodi%q0#TE^qo??|AQfaj4SVzH)8K8^-~0|MX0R(t5UP$YmFOU zb>}-WMiGigAz`n?D*H^AP>5h8nUBsw~Jx zMGy==J&d=l04(ZZ5Vyd;5QFrOBoem>*`ZeH=$;-gjKOEIN`Mj7Ao+oQ@#6(fzHE5G zW~LJoDrAqR#W_K~{e^zY5Hul;{$dlZP}4^zW8N;UKCHlG9~Am=k-_YgiZ99t0WqGS zbIGIfDajjkE6GF|09u6DhqF2VNK_{0Sf+^F`@9@rz<7t5#8 z&=lO2EXEcTBcR`CQRTVXK)zHucAEE?dkbZxUSs}kg6f4cmU!rJ7Bxywopa9 z2L~2rGY7&Ad_XXl>4wl=DMm(=2lleYQL%fV)gk0C>YZ?>WOs;u{mpVzpYHvrJYFM8 z+3QqR_KF!5J=~}Is5{)X3chMDxbOZC)nPGqU$`z2Ii;+a?NayV{gnm`(CXz#eZ7#F z($ON?_a&Qy$PPIfb{}uXh30EtDzy2MgsR0Wfsd*BXrgHs%*j`%G<^LZo#cXK@la%e zHrEtE;eK(wYbWtw%43AI=?=aGxwgu3{i~F9Uw#k~Dd-~1!8=kaZl$ab)|gx<9`1-_ z$)H>nD8xMC3QJlligiLt`iORqN~gbkbWP1!9fdn8+)_uKy*hyW^Q07KMh_No(E}kI z(hKVkhQbe$8QLbv{TJ3Q|#lw%KcH0ojs7pGr*&6`dbJg z05W?z6u#m1Sinv!Vl?RVVjs^-xKA1M)Ph-u5iQJd4p`tx4l|mw3cCWVcPoH&r?=&7 zA9@i<66o4%Qc*+X-HTNtI#80NKBfum5rdd-Y4ucu-nc!gjNWSj9` zq1-YCfBu9IZ3H`TL#|D@pQKXA?5R^pO0{E32&9@Wsc^bhw3zd{hs#67Ubn4QKBIzm znWCriNvmzy?UZ^qY5kaBlxdvA8kh3k*Navougt+T@eY(T45(WA%1osqwa-&3z5{2^ zt@3lLHPya+l~OR#o3}B+yQ5wEl6{Pm{1Cy-Ure>HQ>(HUYS_|}Hd5&AGZRAT38k3r zMt#N2a#oFuCohv`cn>2U;NbUMW~mi$<}y`}odtjO;9l&onx_Sq9I=P4nHIrZyu4lw z(Oqky%xh~8rFv=?>`Ps(K|IBzZ1lPUQqmF{HW?qyvNyj0%Q~3XI}5W@$hECdVImLq z>b}-1l)1WA+jO{8w?2x${Nvf#_ir1>S2Lr6e(y@H#*3Q2>rV^3 zbA-_G?AU)byQJX#M=K)^sazfSu0y1=_S}hLNSPwr^NL*Gk#edd&aL~+2mHYs%~QBS zM^3LdXZV`{>-}#rC7*XX!zs)BJ4r7!4g!$0jXpNH8UHfdMeMe2U3n?`U@Bhu2Z+5H@UW+yAVSHfGhZldmplqQ%QJGaR|IKx!u#o5hYy6b_a9q_w^fi?uY@lgbP4_O<5mAP9A*{E@*yX5!FZ5t-jzu@ zTx7j>nuU+A3P&RQ2w1S;7CSIrn&TwPec&+6Xs<<53m&km<@i$vKsH#yjmL=*6Mq52 z63$a&S87rOTj=PQ8bf-w>OUXdi)S)fUpAg2>$uGPGjp>9;x&jlygax$e>6U(OCcXs z-^)(W?gGCfN=I=k(Q)pGjM5!PJI?v8ij!cn4!uQ8T7-DXF{x5V?lF0IBSgL;WWV(k zk;et3wbtH<`Yxe*%}Hu#iKqc}QJ^Zf?gsWN-}^@He0o!X3P=UsT{F9c=p9Pjp5>jd zkN4#X?+ow7A+BwQi*qHVAJQCBCfJ2=O)-kn=W#&KGec63RscLQ+H5+6 z`OPXsHb!3_KAm&lUUsZNcA0V1aH$5`gAF3srRmYL<3rnVVYOekwww2L{$|-!BG|`R z{z7?HWt!=}OpR9nz4_v1D^p9(eWAQoCLw3L0KV@R2uXn?Jhik^-RY$3ZKFC}Ii~`I zMrwE@+q7fZxiVu=O}K4%F~cg@=V%L$P`6QTGa+;j?$y?FrQqr=FUvl(N}r9}4R&<$ zPB*O)AZiy@cRH3f^Y(yy7+}YZ?xHat^8Uf^5h4wtTMuP3A;jkONjqY_maM{^-zMm9 zI9r?FM_;PJq<-~j&PUDQcpQ*jr}@BzRf4WGHwJNby5qsR*TV6j&~=O!-WC+{_pK%Z z00&3@5CUc$N`g!VAkqy$7oP5HEyH2EvD2M4Guz}NyO#zqd($@r%$m=Xu86`ojNWE9STL*7~wQkkuNNyY5H|A?+ZBpSPSCQsHwW4~@EyB6LHGfP< z%sp3U0z2vvepi3jz8viER?1(2#T2_fcgXu~H^y~_&kS)&SDJ`t0Lm|2Q6loO^mdoIpK=^Yq8`(!_$Y+rYeOP4*q zL%S}1L>khAYsW!gAHR`P-DWpgdh-A--Afvzr@SAt)bIS1atYqge?E9DZ@N=9;kmf@j%Q;8Fe*(cd{LXkJ>w6!eVx8yekC4>b#gmQMJkMI#h5_89=>f`LqG=K z9Uui5tuSM!a?}w5S$!&t#62QZ4~<*4MafZaBa_WS{SC^+%Tp@bCfKg%5QIrZtlJI< zaCCWiP07|%{OwIGj-XPZqQ^iey&awsPb zemPWkV+gGHdh3{QxYKdMNu|#R=k-Z7FeHcZa@R}<@{7I}h{rEUns(?j5?>P)?Pbsw zK|fxrc^t`m2vpN0rMD|qhT{3KngN%?u5KrAva(LLKx9`E0{eYkr1b0pJloGLg7X)} z)mx5!-j(6%$7U+Iqv+cx<{OsdZSogSQT3gTZ-lQdN!Fa)QtQaeMeYWip_)}tnwxSu zq|WoNa6L1O?(CNth8{4IDre+Y3dBoc$<#QhS&LMEpOQ(4z;D$@(}>g%%rV=g;v?U5 za)iU$1)owZ6IU7Rw!mCz>mGlV(tsT_?a=Jb*+G2QliQ-vAKV_~dsfXZr0Iu%?niuk z>DxAzQI{}y_IHF)hIf&es@=T4)jD)=lpF{VCW)bjp>YUBNyzLX?r?!9P`KR=%EGq0 zH9F%Sak!9Aw85_Pv@zOXpHo2_Jlk!+e1o}bdAV(th7N0kV@QML!U8<;vf8*l}ZYK&iFklY=3v1vgiE=F1ZLhe&nZAvM#>lKjRUj%$cwe>n~D91tI#!>m6}< z!5MrV$2Z4uAy-rLWlx_af0D;c3a|ZdP@eo_}h zMbcEG0Gl8+&`y>~_pz{No|N?x^B`w#Y79-SQX0Ooo( z;<6=N2nu{QH`!fz$6k66!hye;xpVHdkeEVjrh3uC_FEGAK%Q6~2fSrqL0$WOGXW1C zRr8tFdOzLpFbGB+H*ml;5SJM?q8UzTo@{+I*o)lVcgjc&DVI5y5zZV%-g|$na&u4$ zdm1NU4~x=~`>8HV2p^Tm?Qj!cuSJ=WJAT*&AWl)I2jAJyioBtinY(0z#fl5n50@TK zctnza{K84p+t)qJNkrcs?7k?S9TN2>Q|8fdvbN-!!1s`0F3LHhZMx|Z+ob?lXTB?^ zAW8Y&w8Q0l2SdArxrR5030pn$-p>5ewxn17#$Hz;TH};8!znAS9GgYbRD{NHw~KaS zQR->Ys!_(Bn&}c6H|-HEn`3@lXdHXTZplSYG;4){qUn-xHf1N03yE0@|_*sH-1a9+OR zd1-sg6Vb_Q-YhC&(YwKW{r_>k}s-!UxK&KM`l~97Jp>KXc+W#2Ug0bp>D&Cy>iOA|s&Ba; zORfCU8SXZXJje;#ZG-X%uIt%p#w}0V&-BX^WdZ>$MASc85!FyuB}uA%X(x>V`bZx>og(<> z{!Kf^IxkQSRw!q^Z0k^o1Mp%Qcmp+i0~F5))IZS6jCe;7f;6Jzfa(o)<@`G#5IF9_w? zQ&3)LCWYdLht-nOWxgjydGQpK7nv@h_>(CpXLEtfFvJ_p6r>L}6GC$BKN|}@p^7JU zfb?x?q&p_FrzpLF? zO^Ew2B2aC@_@^pBoG{;1oZ-wH;Rv47z1`987RT6|mGCILMw6^W?_wDooXK)oG!mA zb$^AY*S6=uR~zs%c^;p-dpa3Ju}cZi zA5ao92|GVza*~yf1XQAF!2Ia$;5ZJ4X^YroDyA*c0avez<^XkYX>&-8oKO#J^X#Ok@XMD`9ugz)8@IuL9#ctlpKvNr2 zDE=pdai<5=xA<=nx#2Z-X+JA!fvIp7+qdb+7#s=+<7Ww zqx0KqUg0?L8f#n0Fe}=5vvt&k@>7PxV>2y8&9%rC={p$@!_C#n;P_R9Ul|fjtfj3V zB*kJV8D`F*Z2v=0b&aIbSvb#5wa1+}sG{ibKWXh#x&$j%_-z+%$}gOeu+tDUGPi23 z+Q2B5hE*U z{kwwJi7BkVfx<%dgp)a@3O}8b<)_A-%9M#L)8(Wz^{{C2JqLDdZJ^@-%U_X^zD6SmH35yaa<(4f zu{oA-Z(ij9IPfR{)9wq|noQ$3>)dcMo+gbn&Tu!}lS;xtoU?M$Z*Uia_^nc*`cIBY z7YOVtY|7&|t%%6^DXtbje#>yO2u{geq%hyDvjUu7%NBg=Kvx5%UD z<0$+;s}+RK`Aer6u9j7L4sEW`*(0iTG7jC9nQ`<;ArKZf-Ub)f(jE!nDd;hId`?_; z6?UqM%6uYES2?pOcgvGWNc5g79C?*fYn?1I>$`&_SmUJVU#rr{EA>Lo`u2pC#I`}n z{0SAH#k8M8i^`E7u~7}JW+B>47j+Ds>2{=V9P6VO=AtUtIc=S?h3G1{emKqqSAsBM zO`6munxsJ*^j1f5H=Ws`V=W+A1gU>hl39lICxGh;Zygw;cb}$^`LqqnXYVlY-Dg&U zizO3g##OrHxLKVA7nQ&ColjIL{;Yiw(cFm*k`M^pvTFE%1xzsJg^1ym;q)t|{H zyjHZkT^%#P{qYl2I6gK1MpYot11aP%bXo^5HnMG)c6aa%2DB9)h}}}YkE1zcxZ_En!Rw>a;<^gmcQ{XwxY0Y?%)xHk8mbd;|H|>HoAMDpFXxMSr1%PFn8&TXsZ7h$kmo?0_ zhXz``(Kx>UzG1$SyR9~gwm5o+@pnmrzmmNDgwKVoDyLW&JN3PpXN-i6#{DEMV8MA=kptObI@Jxj{C*Q$QxWW|85>vz1o~b!M;d z*UI;~U7>TaBw6*K6L9)66Fo&NM|^1UK1h-SK9jK|Io>lBOOhq~=~$91*3ZO}4dH&@GOTi8XnW7J2^MeQ7ip)R{*S^us0~2Yjsl=M3WBX z+SI6%c^k8GQ?Snks=$mXwFTYnlMxY-PWxSS(uywcA_!_B+LL7Z=z>m4q9b}b)kUwb zkvu3%Eyv1A6Q@HvmQkfZUTRW0d63!fUM?nNI;f{F6{nkMwWmn_QME}Idl$J?_`Z#< z5S5f*M#Xgi{=k+Efr0@?wTFXjLTWRv^!m1t=#audwmXqAgpnkC28TIj$mwNhMZ>7SHv zTdhcfpynkeUS{gn8V%~*CVO@G>ZKMkbRR3lSiJ|1ML7t%X+#AMd=dF`HA&YXSjA)% z;T(=N6yh-$uVb{X&7{%hE31R31P0!tjMPo#(@{F25Ni>f5U8cTL3o*s3jKrT072o@ znpz@NW32I=1WFxI5%9N-sb<+#P*da8JyIeC1@HeM<_b=f0W?k0N8Vbd7oXcV6P*Po z-#V-uNo`)|H-R}H5^NbT2ND~>VoO%ixDFaAka*b<)p5KNPDY(n-SAbkb=5l;Oqe7| z)%u5zxZZveG(K}o#d3WtX(M==&-yz`?y|Py`v^+*^M>(hZf97*rG_#Gyj8Z2Q?bA? z*|d6c)|Z|#A0DIjUG8`DcQfGj1(z$=2dg#r_9I~iM`HO+1-ibTZL;L2Q(ab_T?{rZ z-~)F@agkyb;EluD#xOlR$Txz4pEq5ld|AXomzwFsQsVM+O3>H9tXq|>>%j%4w7}#C z9-ag7NaTa}T9h>f+N-Zt9%Rcs#dPM5Qaq~K-jd@(XjgSK&KWAl$aDgJpc1*l!(W?mv8Gvo=J7l*e?;GUlaXi~g#V%pa5qLeQna9~by3{AM9*>z ze;9X5*`_j*1U z%=GalZ`S5EAI%@2IZ{sA?k$kcx^hZz>7H)z4b~{B88*F!?9vaS2e5^!)gN*xUOH1M zyD+}XD+g9DQkLWOV{69&I3~@K;J8Rl?>OrM2*9C=X5hGytq9OJzocFn3pImS`!S|IqixluO!btH zmsq;3(e8sgDe{^E9}j-13d;vBwN7RIhYT`pB1cg8e{`dXEBm%|3^D1n-5bhBG=+jA zFH2>jIY9N$!BY2Ve>9H5H@sXm%lKTOB)~wy3^!dqUA6aGVsoHHb$VH4h^~B?0_qoE ztLUS$qk{&M)_;xiE_)r7P6u0c7)m$U&}~cKMjd77Ej|j`=p@XKvF#=!L+Wd;D5xc6 z_;LoyGZ7@wp^n3xMh9PX8wD;1sf{fHNh2*hbu#xJP{<12HEMvh<08X3RpDzWROhtSfzS23O5Ab zWNKh4OmLTX(U{#}EA++!>3|07L6S^K(Ky|bLFyh=rp2Ih`7_na+MaO#wlG>1X(;+?FWvYNSQit5Saw{58tIkcmmn>Ow@yd^EA-Iy|v-}+(h@wGt;y^l22^z zFZa`RTXR6)`yMsxp`L!))e4R3HOh2vFR7T+XjY<2U7dw*ydDP9drXGN+Y2lH)up)W zFqRy@{LT2y6vbEm_>C^bOD;_Ey4!x*U|6H8Sfehmbp3lbivcc4z)?;Ich&VEVD+aS zr;dQ!!%GjW@yr6f_73DVH-bXuP`lV32Ha#)Chs9VR8g`y9nH-~MpF47^2ck}@8QU#`a zvAr?*0)sSh)6RRLI-+r8y-SN^meXakENH)Jz!w}D-A@-)@MhNGApk@la6s*SS>BD^BO{ga2r#tl-VdruYa_B1q{||! z7!!iCmwKaKSsDRK7fQchQRXePDw;;#zcwzjkshB@ZGFh`_hkGH)~(1m=)Sd~UgYdV zj;qsi^1Y@iJ92zEnX_#rUExG4uRM=LYr?&~^3oB?%_9Ggv>Z0MB!|~+D+guLcm-YT zdUTX`x&UGhMOS|qYWE7GXWMA7aIijrWWJ zgh`Yyma2+|^GcAqVT+UL$>0`=GV&+ix?sa;{R&f&u!A_~= z+@p#^vo3i#2_&1tWCWOx&F0<+^eEV6umJ z`hn)Id#0mtVY(p2N!|X*g!Bh{n9$zx2;Iii9r*JivJSOcWK~o})=NGGD%7@lPlQ~i zDLsj*C}edbtv!q!ifMQp0NXzeplp0k0_7J|T(ebm=Q`kfVY9 zyJ8(HDE&Yw`rI;q9p;@wo~>U5cXfGL7zk2AmbWCc_VN9^{P6vlhM`l))c+-uny(2K z!}T`>)3A*9O7r#dvib{3RTTQ^m$h(BV!vQkjW&f5mVbKPvmL{tGjzaM{}shrF4L9$ zh4)o6b#V#{8}iYKGUwi=Wr+_rpwcit;}{9vKji1>n72}}h^@Qe_xUtoqRW1J{wcJP zIeytEp390_ZjJ8?1NZ)al@AAcE|6h@i&a4<9X>q5#+hw9SIrh za92k;CsD<_@Ms%Q!X?)@!KC{8E9@DF5z%^XUdqoq?b^DEdY7c$)HKgJkq=C)pnS4Xl7)jYh66e9e4E^&p!a#kXiT>50-e-pQ(3K$#IO z>odyB#mF{}&!>G?Nw}Ub^>IvjNaElyzZ8JtMHIVEi+d{WS&1Mwg|x`EbQZ*#>-!0w+g6rGMusW=rY#x= zSF}^`%|4!{GiX`1gzP`kV%c`Sj)x{SK8$G+Pp1yY0nDM`m;V!V699f@KRNT=wz4`v zUQnRwIGY9F;UClke=~)%5XLb!j&hIsVWaZR7#kTa?x%}tizr<9aYC!zHMwOqD&kW| zG7CjObj&yE#Fs15a`1)BNdHsvJB{LK=W2APqh7|}pcMvZwD;GJRQRdIDso-YG4sV9u11%`U2urZ2 zD%m>m`C&gd7*5|!b8C4dmGC$6Hq2S*AisY3yf3Vw59gq#(`N8x=PwLC%+Wz_M3nI9 zujyGV>)Z;?T%@D8u?W^q2j7F(Kx=XnoG^Is<>uD)QNAuPS3NZ zcm}caU#|SE_*=)$hK@6+Gsm~9uSfqo zHCG2IbM5+dbR(1dy#21!Y^#cAtnXM$mW0pC{*an&O~)B)Ru|Vqd3?SzJ==!W8#b&f zZiwda`KCXnqIIlWzkdBH+H*XO@7Me(HQ(yhYuBz>Lv}ua@B98IHQ&1R9YrEcS2^K( z+n-bOb*x^qs)HzRh>FN?S9-=(>o%-ey><;-{$Cu@t@vAKYE<;9Tf zy10Jz`ZXOJs1-~iM}M?M#t8u=2NcKn)xM~TkC&%p8aqIj{m4{|`l4~*f@a4|2L_6__E_z@3GM?h#N$}GPA!6T?=qYba@mS{@1CyMUo7}$WnfwqaD zW$VP}=OnYy%=joBqNGh(_%@ZyLzjo}3fO)+7src5n&UUgoZaP`td&I>$JYb#H{c6d z_>z-6zOHMS>%egDv8WTDUwDs%wgJYC2p>P*FcbF|_?Wq80!h?<=AKcZy%pG_w7VwtM=c)8D{STuoLKDwu$ z;Py~Wk0Zkyd`30rc*ZGYc=!E{J4bd0<87oHqoOH%y47b(o8Gm}~9Nm&|oMicn*s$>qD z+vual+)r;NP2%g@n&j$;rttLxO>$98gRh@yoQsy8q8WVtdNLdNj!N%-eo=fDAODoh zbd>znfy0t3dZ5#B4u1pd?4|R_w74-G>9;fg!RkX5&Uxexr4qhODuZ$X9+? zTK>Ud3jeG4w7Fne_Ve(fd$4!in*FrzXY6QH!nXrH56=!oRs25Y)0JhZ+Hs`6F!_DB zO8#^L>F-Z|?->}bmHT?5X?*&2GK(y#MYH&D_fw63<$))cq8!p!C%=!?251I2>cp3; zlR2mcM=SK60=^ti=8%V1qDg#sUxN%B07TRHcv~_Pby*c2^^Qcd`1t!|CK}N7@cSRp zKRZbuhQDM?ZdR1cF^{wf|4p?qq_FX;G=qX?uY}N9-jJpH+p@B- z;y2;=6(*hGr^YB0%9o_$mw@}+bo@(rhIXm#r}OxJeKSRZ{qB_H1TZ@u74rUNefVH8 zyaTxth<`~(2G>R@WmPtfYd3<49__fj5`UM7#`Q?wqBM@ff#X2@pLAq!ZIoK$x>has zRA{Sc^cctX)9}}^J&IRV7R9zgcLDOIbZGExq*~*fSDASyQZx#EX_!L|Kvjq85i&=pky z`O6rzy|TO*rXBDc0Ix2FwP?WL*?zaivplO1O#t$~9U-*6f4Uf+9dHhS$J2qqvk_{I zXTQTOngs46R)vi3`2voCEQav_JrC4t)6v1bQEQF+z0_IIE{yUBZ^3a(0~5f1{OVAO zf4}Gi+Gh%tPN3hgCY1`LF{;g_xnSKh+(6dGC;mQ2HnxS2>VfGIN(VDKKhK1X9EV$_PaHn z4^&1E)64O+a#;lIyJPTrPJU6*fd`)g=-1Q1!MhP_jrZUR+*#m`J}%VFgI;k0N)OP- zfqLNasp#O|sI|sDZLs9+Ty%>WU8?19KNG|M`Pd0?AE3_wwe1NZ_l6Gc?RRtTFIe>q zwaS1*5zsd%iBuo@#9+|Yjx zoIw2;_6#sLJ}Imn!v^Q}yE*67rH%EB<}b_Fi;zfoyropTd-E5pTl0)Dx^H4b{)(ss zMm`y1sB1BGcQV+S0UK|Ba;P6;2l}z!&GmD^y7k;up0JLlz|85L&CKuL7NfJ1#bObx ztv|CR7NJLDxw#%qhgmpj#N#kh}yxf(}6EtN!E?!f${7SDXzBVeZsr<@>Zh3biPrc_4&}*rrzG$PX+^6BM z8wQ?tvekFujCO&+o6;GDPL1*AI#u)H?aXd|0H_by6#9r;7Ndp)b{?2J(y_t0(Q1uz znqG8IT$h0Q#Tfb{vx~5Q<=n7mfZ4q{)QVw)bNk&I=ZOO-Q5Eq0TS79|4V{1pDMSGN z)UByRAd3-gE=w~{(ZtmI1INau=Ub~h5}Wjd-rbRpT)oQYAE5g=%G!pzAkqh7qJ48Q z#`}MlVABw2*|xCGOfb}${a$>XHLe({O>Gu~aRJ*$!wSb@cI%Z(D@@ESjf0c)3)0l1R#UfM)D> zbIoX@*;O9gL#GUD(Kt}Io)y-6*J310V3&aTn5U#-gL9+RobzVwk4_VhxS%R@#JlQqcDmzuM@%D6fpdVvz@%rHd zBfj%H=(QwE>BMf?jD8Bd+~e#}MGt)YBFv##jV*wq960Gu=LlLd4x4L9O|=($ZZ4VDbiX^?6itIj_wKMh zKKQ~Ds1Jp%0y4KJ6&idSsn+Db`hXf@}Y=9$Tv z@Q&LVz-`;x%!vMFQAT7$N&t_}ZHWkEF{1OxvRY+P_#;ipylPRh7?E*+7td=ZixGh= z_In;#)~GBB|JJ5t-nl4QjK~zgyUuSWixGh=_In;#)~YNDe|u9hA6=9zMr0P?6Z@LU zVniT|{cbLcdMN4MdE=f^`H51K@qj({wV0(-!=3}?_NPITI5s#pTCH(TD=j@`8g0-< zzY=i27{k{GWEQm)8KBPqwe<9mdqW5J_Ish+%OgUOf`2ha#2x}#jQYI@j>HV0FS{U= z!$?35``wxxxa4gAq4Ke49KgSe6F8A=S0Q|Kq2qf3f8FG@U74o*E4kMAcUPzh`-hkL4e)~)E}m!gL|Xaocjw_uYN|~z;O2{9ekMsVDCj>J2hzf+M;|>K&A@# zw<#HE!v+if?RRtjE$&x0R374|w0dQZ(~mu5sd2SiY4oYQsFBD@o1*Iq)0IjGhX&nD z)w(q_w3`Cw?fb*}{l#Jw^S{D>5q#f}&Od6vXgWA}H)73sPiS9;r@Z(T&ePC#biVaRW-57RQY9YZOHGhURxtyP&h8Gye*R*_ zKB;__z|Zs3`GUrb&*mCST_ipctxbTdr3acho$oJ3izl7e9C*A~c@@uPyg`%pySXOS ziUujTp?S_KFfZx}t>;PaJb^|7jPUH#Xw<4wo~Rjd5|Eim!P z7&DhGM%WW&Wd*Afb3?{!&bWUeIQ$O+5 zziCCJbtZZ&I>1}A-4Sz8#Ey$Y6ME3Q7twV8UlhLtv2REhAN6nQXkP!?W@sIdW)Sv9 zQvf~fP^jD67NgsG=prEBoemAYjZ|~KFIczMFDxkU0B#!q@2L%CZZWc?kt>4CZ(1V< z`HcKL@^!2?`LIeA4LY%o;%~YixZl4mq8VI}q&5yJdxm1l^zULxk8IQ+o&BCiy45CJ zFn!VmQn$xR_S^l>Lh><-5-^qEEC_vixS5Pb5Hi~D6dB8W;ajc!?DCOl2B6(lfM@0T zz$M4^hBi7C+rg)ba)oa_(A8OV3d*P60#^mla}AIm%Q{=tk@DtJ?buLHd)vxgd{OC& z_MQAh(gX@WU_?dkJ~Dhr9xmGN@8qQys+qGcdj}#zE47@`>r>=lOZ-sOAo24q@DrU9 zr;ZCW^Pu~6rJqeLbk0x@U1Pm@IGRPiZ`4$a!$jocDm31MTxqX)foO^L!mem9(K{Zq zDEO5z6?lLJ*;lwjF{%VOdlp*FQU18p-l#Px9N;#(_-qzHM~^7r(RMx-%mqvKbVufB zyUe%iGQ?&DPzX#J{! zp#Z)&fNns~0r_mD5Pqgh&XD|X`Z*(4NtX(H|6RQU%whNWXwkc+Nl&4`DdXTgJ930f zda!XZw8b0>yrI>CjvR8IeszoFK&^=UKi6`J-Z`D^^XWc?ZS*iA-BNvKZ*Me*;$MBH z*3%KbotPdT)c0Sq@&^2~A%3>EJV4jrP`!nhmP3;PwmdyQ3((V^rLx7a%%FpE{LiR} z{EvCIG9_Uw%;S-IbT@hANUJQkjC z$Q2%>DSV|2y*t4&=j}PjEOjlM(iZeKM1wEnq2p$J2U`ggu792iF(f5Q*8gVc6@kiV z_W{P~@~)0j)z<~@W6sMa-tx>B?46*1@eOgtsfOv9Vc$;@=c2eN@H+EC@En~oHdN`M zcZnW5HrltLeX~4-w0mrbuEao=?_H~kWcO#ZMbzNoBlSt)BSj6McMR=u+Y;s!`Xx$& zFL|~8UP$Du2hA!8|4wfz_dDsLDwe>=&lef zzN5C8wn2_YohbJ%D?dW@r*9x>ycWKU0gE7nopjp_HKHjLJ^fY6LhBH8e|`^Le1no- zSTI7RMz>bZpxC`%Z47h|9i)dSmmKd|4VM91->$cOSe5zfSyZq}jV|ZQ0c-VZ5}5a2 z6UQ_s+!S-m(Vl^^UfRjClWvL}iaLS2|FtoE8jup#-&hq=Sn8WkO8Bi@j}Av&!0J5? z%uJ7nePQAJwE)~N`{;tFj3q-rfxqu&?Xknl6>d>k@q%lc@#0Ns?{HKF#aX4CotKb_ zqP7+So?E4-gd#=T@jBB{s%@qr>>NJA{v9PhuwaBe6}siSyp=}<(uLS#<009l73ac$NyubwXSmG$DtGf7bi9G!N*RHX&Wn6lmm&sK0sAYBVaO7)o(CV!3U_= zzpR%jrv^)Du@d_^Gi`Vw3+Eul#pC1cW>jij?r(ACy|>@EBr5^k zGT(U6Nfd3GMr%#Smmt)m1ogYw1>QZVBEz@qGm49zMd}+L2EGYqtd9cjwv~J6?WCdd z$cpwYG?tjc_XGc^8sr$Gl5o&IXivZ}UQ|W--<)oGq6sN`Q#O16c2qvFhokX8_zWzX zAfCdU2_A?IS}m2iBmBZ3vq8eZ@UQ^WJF@DaGL9lQZOR zPH)O4(odB~Z0T*;jlcDEjQ$BU@r|@}MrE@CX?@gcRo!OL9tN9Z>4I29-gEdMI zUYZrIIsMcQd7zkPjuJ&qrRb7+md>;<>-o#}v@aX@OE53SY&$|{xPD6Mi18=Q$A_fO zeAs4oR))v}MQzSt{%)ljpa>R>>AFX^oU@gwEVDL~r3)&%X>yTM{SYN9^~`B)zP%Br zti9=Q-066bc9H|xA3p}pC^tS{u)b(J1M|r7a?P2TRpG(f_uhk$cOe@bLo$;%dniECJYgt5TYk0k+;e zI1a3*t_Ei2z{hSBoKoQdH@luflH7#ezPd!o*;SV)j~n${qFAf(B-7Bj!reZLUdX)$ z7tVCpAN z(3+9pAdIG5o%q-y1J-;*o9zvC)Hfg<<Uf_Do?*j;rlt!IBU6v(T1*j5{kfv8>)E(#)3WuU_ToPl0Z4=Sia9 zyAxV*HT91vHRb3>Rgmo2s&(TkoP6LYP1&GR-QdJxP=#1CGg~H z=|F4fY^BL7p=uU{UgR2GYJG-xO2YWLwCj=1e7dr~*lm?ck9tx!A>(SY#c=UVoK&Z; z7+%TctQhmv1wJ}Oo)YyiUw(ubH_QXv9n$wePl5IV&uqFyJw7iQ6IN&5?|r9b|bY_s{&g^CyS zr+eHa{5a&h>KQ601#LQ65_B}2ipi3ov*Fa_WJ!0};WRO?UY`YV03!UeFXJB^*}AqR2%=Pm&95d8Q>0OH1feT^wh+3ot-^A zLPH7eU#sBrk%vAKX$_VKJkb=8 zo;?H>6Pr0G;-KAAtc@-o7%br^$`bj^1Sm+S2^C6fS|v89c}TNr za=~+&7Yda}r;dc?1SEXza7@xh{2QaectW04iZky`0CaYB57GVr(0FlGE1rG3H5M5Q zEiKq@8NcQHZ=>zw3r{DMZENLdxmT-l0>pkXssbKndwsLtguyEmoJ4a>haaX5H)ISR z@Q}7@39*8jLbUH2k7tW4VyrgG%i^+ZE1X4hU}gHS>VZdz9)4_)wds2~+7|+nW-!)B zmKC&-WWV@6E|#~>kvgQcoHCy&$kSP6;tGO)fg?=(~hpq6$-ZqZ@W?8v5>Rd zcv!-@=;37T!DB6;UYX`qf|_<-g+P}1+P6qj$M_AE9L<99A6%ZQ-=49N5xN;y#R>Er zmopfa4|X5b?8{90?ASn6bw<1fil+}7D?{BQ$DI1D)~+0pX~}R}Tmz}C>>geJ63v0{ zUtgj8vj%Oj(>DlzZYv2CxuCIVFP&`^j!V>=x1hx<@l5jMLztI|u5^T_@OMdlL|8vz z0G9H8aYI>Z^NuiJspwN-q#JB9)3bE2Of&eEo~@(9-I22L)#s{F*7(IYGFxuCpS{97 zq7M2$7bNxZlp1CG{1pWqOJ{02c$&Gwn8`?ANg40B!fH9gg-?}{?d%mcMWV9+cLs&6 zFC4$pI-86$Z-TroNObNdNPq{TbpmZP?37OJkePIvu~)xDTw{VioL=Xynkdk;y3Q+Q zD7u%x-@IOh}N)0(Q+z>_i#2^n;f(CaeOYoNrz(Ji#Y%CRx|8fAyxt|qEC zUuD8&q+jgxtjXYeyZ;TUzB8)#Tgfn2x}(LY*?ELCHIpfBjZ}<}y*?0!G;&UzG@jS` z5cA~l&eJWVMKX~T;~gB`7|nperEdVE^V8M(4thLjKJfOa@1oVWh9ha7-t~Sm*_8ty zFE)NE)cIK#sxwbP{E6_(ue*55a=1LDGy%AWzEQ zl^4&I>uQ;+ag;s%P0CfB#}Er&<~NuspTT;d?eI!gup=aDErP?byv4ElbO0vf0KQ>_V;hvc~HXq@?Ac)Lc#n-dB zrAG6ob(?~&^P1*`0ZA>9e57Aq((AeMqpVaEae1P>>P3EW$)XLo>J^i$0Di5qz z8zxWC-T!P%iphb)WrgHkd{wMBJYdp>{7GOv=qt)6V_y2-*nR@cc=D?~9z0Gr<>Ucl!#L{tWwo0#LKGpr8puA8G3zQS3L|?0jcCbRw!!+cC7w zg)uuTG`muQmhX1E)?dp=be1s6q1Z$3K=Ii2FeR$1=20Hm-l5rL^Oh}_FJwq@ZYpI*)0TVJ!zUPM-FGiX)a$-}A{M z50S+M>ICvlN+DICr!P*R6nfL3^YHJ45*a=uvfuMaw8~#$nFrv@6*yIpOBW?bKxPu~ zUsp2X>kJnB+wXb!@91zFZK=zh1>oNALNTfQzhqJT2V}Ycf1Q#M{tXuV+wXb!caNEf zMfpZJ3Fu|B%_O;DQIez*%!AN(TO$Y=je!&y%X~VOjt@STXEoNX;rlk^z$)JjJ_{

$QPy+2dCNI&uAxtd#z9Vuu{w~Q+A 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é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%0AismWo=@r)<@$@9r%g{& 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�?@Z=ux^{nrWc=Shc-QPCiX3|8_joMEpW}9>r4!i(k5rqR;`;jrH7jL)0!N6~B=6$xk>UfS z-sy-(@jL6t4|;3s%aM2*-$2hKJl;m~`Z-JI;mNk*qgdZ-@IX89mGs<=r|`@0 zb$GbFI{q;p$Mx^OzQYqeB(I;FUE3?n9oMOz;-As8Kb|}( zKkwq{Uisbz&-NDA{jfV8I61%nG~DScelhDi3Xk;@*YTI*@l*2i=V^a`@y_&If`?BN z|CaT-T77`{cldJkf#Uji!K?8|SX|FE>t8}Oal|BCpL_@{W} zRh;$Rqdjkk>+?&&|789{JH)#&{{8S6{w)26;NhK;FU60=<8O(-OwaLn^lfq7?)|m@ z9dW&m9ffD`JLs9D{ktR|$Ir*zcf}*j=cU^Jp7!$Z^8?`8!Wl=YW8sP3GBCx@W_$kdfq-7caIX+>y~bK0>6{>8i=^N9$=A!u{DfPJZ)7_j zfd|@%>v^&ikK;*tPQ^oQ^Yi2J6#hK<+1eA#&o99P?ZkCH@5iIKj^|lCizn%S3s1Dq z@Ba#SJBVw()>kqQY5Ylgit$88$*TwPXeaTl>{ln@p)TV0@p@+zo;^YQ5%OhtvWNIY zmOCAHdy02rf4&5d^b#LQ{wh3$hw=a7f!>mT6Tb(~;%o5Dc%qNw2jZ`49&gTm@-goA zmApPreTQdoy`R6&*D}wsev)rMe-k{8H^N)vNnG#0b;HA_NRO`XU_4>G4A0^^Z?m-L zROy+(a{rB|@NxL(JdHPHd-cY%qowCi`iJ3xh^N-`b(C}YR;iu74hzDj!zAN+73=f|tuAd`uG#*8gNAZL3Id~jzj9-l>@%`}I@D#o;{s^ANo8d3u zS^QA^Jv=Z^#;MQm1>Os{+&qV4;uYi@;wiip$72)x|D*2A<0Ct&doKb6!WOZH00|;y znHg+Zy-Av2jAk^O@MuPiG&W$IR;&A})t**&yO)^}tJo3unZH8#Wy1Ua%$HvfzAn5j@=q2%^fZ>&^Oi3az9sw_B7e2;<)^c}o@f4q z@YO$O{zj4is_?02FxT^PKM}tEOy;`Xyu%HgZv)R_uKOW>Bz#%8?uR^Bc;B;GUiU*T z6+R~X?<78pTK+jKugB3(65hYU{L4}fUm|?#xy)aED^~Od;j1rUUKRcC*Lwbn`8C3? z6TT^2?*qAB_}I%>{$1Lx3h#RbbKQ@+^^ZA!HiRD#{pSfE_-mFwCj27dt$?2tz8>&~ z@cvh_p0|shrwQK>{$=5-!q;BK^16L|ht@BANb371g>Su@<#m1hn()5Y`21JG`-R_0 z!oBNHI3I?D-&Xhq!pDSvM(Wow;RA1E{dzo76TT*V5 z*XLFp6F&9<=4V9DDJ{RwydwOW!iTP5uG6)u`G=UlMdJT<;akFWx;`O%<-;tm`Sn`Q zM|}Qs;TyugAo}n8GtP&#Ygzt6iRUiin;&Ja*NYz_eCuP(KP&P@;TxY|uFKn#v>xGl zo#J&`&nH>FA@O;?@Yzo>f0)>Ze-gfa9rNQ-PJSS~|Fg_55c#|PoYOV-dFD5}9S3lc z@Tspb*XQ8v_(97QXyl=GqSYMELA~Fu#xJzsoN;y(_}kBt8!iKK4VF|Cq?{7vBFP=GRJm z9wmJ92Ifu4w`Ji|H=j@%eoN~63x&_#iutm<_*ZK^cVqtX-{FAYE_`i(`O8HA$F%+n znD3VPjV}pb&N0_^{`*=!&wRhc{}#XGd{`|o*YoEC!ncN*KUeZ0Cwygu`R9Zm7Ty|V zeoFM0g>UX<{zp>Yo+!NkBIde%f4=Yy;SUr2uN6M@V3xmL_PdErzO1aVa)aX?URI0oe+7^^D^Q6)68qa-!6PvxX%Ai3ST?P@|Q?FH--0I z#$4N_A87r;UnTOl{1xZV`omfN3W@){gb!TK{Hc=9S>bDc!d$<{hYDXUGM|?CmxTAt zGVhmgA1A!O#9W^*^q0a1=9r_IR)25Ryv+OsqUU46*DK8LD*TJWHxuSX(X%CdY@YcY zMgCUkQ&Ycsw(9dg6u!K`T(@5Z&1=jbB6=PweEmx1?~!neTK*LCvy#tC!uuM`XGG6) zgwHmaYdic};akFQFZJTRT2Ghd?=N~bgb($YAC_>xCVcq}bG=S|gVukR`71=v?eT&r ze^wvO{0&kb?jd~Y@yy>T`p*~M|3v0l(Q}cOe-d*&9zQC)^MMo5dKBs ztIuQkZwddd@RjE?NB3L({Yvu}`23ETz^8m(c_H)HiTr@@vA^{BknkgTk*6zVd43ixQuX@V?hDf411+?Q+puVr~O>+0|An!k=Y_eT2q{$BW+ z@Bqd`kEsk-t4Uw5t9J*Y@f>;hS$@Jy(kSCBmoP$XvJM72#{be^>J7 zD&gyIVtH-%o*{hsZ+!mO!pGjs{Gk%=dxWnDf4uN73h)10mLC!R6X8?B^?Jk|urZI) z+qcH@*NFUi!Z!kbvGCQm`0@`I-g+x@U7lOQ$KJ;LYSI7a!uzgfuE$w_EqwXy%pW20 z?-#x){NcjCp!L6lwJg542Ui7OvBKKjHoF;`nHOvG6hBI^P~Cd{+3~ zME{cTDmyk zzgYNGz#k>N74XLjUlFe3`7+__0e`RXtw7J0g!jMS&;LFQa8x{nYyE#Hd{($F&kq*9 z8t}64P2svcKTYfZ0EesjTZAtQ*WrFj_*%fft@R7n@9|ccI8}Cg-OvBs!UqC=MEF?1 z7lh9W*YSC(@D<^@+`eA;TEMRpz7g;ngl`4>9=GTC_kYlj|6buk!gYKu6+RotUnP7w z;LjAk8t~T%Uk~`lg>MG@df|Q7`0>2i9XS320l$y%G2z;7Uo5;OT-)uE@HOE&y-yIn z8Ss|~@Bfe=pLYo#60YCZKMS7{uJ!*=_;SE+kB$nJtF?eXK=`I`T@LpN@B6SHpIPAp z0e`IUv4Fo=_^fap&$kI*5w6qqIpJ#o|FQ6mfZr1XYD(8uz%LTs{}GPAwyReOUlINk zv8%5VK5(s{-gV()!gc(=D7+QOe_!hl_-!!IR{0-Re>d{(&De@ys_ zaBZKf!Z!l`XTtkG&f#i1{2Hx4;2#&hCR~U6ufjJ2euLKk2|r!8#|BqQ*HFNB3!e)3 ze&MZvKT7zDa2=nH@O9xj-~K}QX29PfyzlQho?8ANgbxIKOZb>@T`%r*7f#o@@OMhR z$O>Qnq@NEbg|77b-E#W$!-!FXNGaOHyZ(kEW7Vz6(!!5;sHsD#|%K^Vk_^NPSFP4N4`~!!p z>&1(OZwlA>@IK*vpY`+e%fg3*Yx!RYp9=Ur@gb@z&jEjs@Rfki3SSHO6NGOBd{y{X zz&|X!|8pFFT`#^ad`!5m7q`0y$8%Y@eqV#a*8)B%d{em2hoH`ELjx3iz!sQB37wO1O^C{e&+I*Y)C|!dC-+mGJd|zgYNYz~3*t?+YAHT`#^O zd|9}z7r*rf9M7?T_S1EL;j_YZ{ErA<3FH@quLb;R!Z!l`df{6EzfO4n7ybDBr|_YG z-w_+3RXzuNSa?ggt``p%zA9YTi)G=P!gYFIDZKw*I6j(xNcfm=QyzrR3fJ%VcK7CZ zE(dzf7rrK3*NaKvTLJG0ANmr%w*XH-v8m@>|0DH+?<*e%#SWe7^9_K+n~} z`@hQZ(e>id_}lU*Bgbe1^hbU z8v)-Ez7_C0-H+qhf4v`{jPNnxI^Ql6J{#~S2wx8P>x8cc{L{kMh3k6pJ>g?t=lJM) zai{xpJo~=ET<62E@B!gEKOZi9Dv&=bycO^l3112LyM?a>{9lD{1pHURw*r2j2S`5u zn;-u}!iR+Gda)pUR=BPgE5cWW>-4@&_(s4#E4=TUez-RX9}uqJ@4a?$JjaA<{TB&u z3D@=F3gK%3f2!~;;ksVDN$dX>$4B#j622l_hx;Sp>jA&ZZjR@ca9tj9!u!ANr}r}9 zLjgZ4d@A5C5#AE6%~ij&;Glg-VX|27Ovxez3{a_{+18qcy0vz{=&Bcenfcxcl~gi!iNIBB77>~Zxh}M z_&*C@5w7dSFNCiP*Y)Cl=X3n~{)6MA(>o!2DBxELpB1jl&$ERu3)k=E?ZQ_BJ^v_t zL%6ONKM~&lpBx{}?{fjib4s`_{}aMj1Ktz9C0wWL`N9Xb{PbR}^$XYO`ke4qz<(-y zCE)iQH32UIi9P+ zb$s>;-w5QVg>MCXQF#CNIsRJz(}WKN{B^>o0)CC~R>1$a@Rfl7Quvy1UCw`hh|{$x zT$l3)2_N`@|K1-id@A5=;mg8xx}GC^Rk(g%e=B@F(DQNOTf%jDzFzpy4>>-X|8|Ds z-x99N`2&Qn2mGk;{vY}2st6wo_~W#G;W}L}6uuJhtA(!x{5s(q0soHhE#bOc-6G5B z8n}Vusq^i=!p8!BNce2PYr>ZU{&eB1!nOUsR`|e=IoxHLcfDCo%D?b4!hcWrz)x6y zP51+aZwNnoGj=8+c9s8{?7wMcId_(y6MbAZ=-;L$3lYNE{6TW&+=K8+in(*~MVE$>*b5{7uA2PqK z#OKeno_mWPk^f7rC*W@szA5|#BL5!Y%LA-uO!R+3>$wl}e&PQpeB+Ope?#6V31E^IH};|JUx%{8kd~orJGHfcbTz=ib6sb}@gAl+S|jvGbY# zP`(d3ta+Y!Q}jGS_?qzN2tTFe3oQS;qJLTV)F|_1iRbf#Z|r6M0@*+LI^nI0n7>x! z-zR+FV&;Y0aKP6IpFP5SR`$1FFMRzN^Pfn$`l;sA%)cZ2j>D3l4`+VSZCL+(g>TI< z|JVi0_X=NMVcwN^9uYqFT;}N3s=v#Hx1Prw(~s(}DSYMm%&t`B9OVbp2R(|EHPXS>EGqN5u|rFu$DD_uWhsL65MC3$Cj6z6-p6S9e`5JLsdvv5zWy)F z|5Eh)mGIdwG1vRDUN5}w%gpun;O`K=_7&#u5Xf-e(x6wUlsmJ z9Z%s?H?aI8BtB0TzV>70FBAT1E&o&Ie@x&E&9^TO9M%om*1P~?Y&ubg4NBK%>(2hK9@6Z>;Y z^T#s(U&5aze0`a@uD@^4@=s*0>(|G%{F9mMb1(m0_|%^=f2_Rs-+c(jf8%M)-zt1q z_{uYw<1-@lH>LSAnWNcNe>JV=Sw4TV@c!p8f10H0)xuYw$NU;8S05DK`b*~j$?E$y zh0nf-`Im*?5*=V#zZ-iobA3M812ums^I_5dP~pojXFekJbW!;FtC@dD()D!VE3ajK z57F~l;cIVT{&|VdC$;<=ng3Mud|UIsVg5+rzq?P$&zqUwUibyV`_`E2c7ICqxA^jP z;r(xA{!xj~^M!8;zoY1XyVi3x%il}*r-cu^o%vIRe@pnzy;h&KD^sQRbEAnp^KHGOxkz0uVPigs^ zF+U`Fz9oG9mdtyi=jI1F{$sz*{4S#B-oj^Z#r&}Fi-oVLuN1y~XJ7t3!pH97^Xs(! zyZZd=T7STQq4nR*m%j^MsIv3F=kwjd`|j@ZhX`K}_@%;^f1l-VBl*x2z9Rf3@*bZp zeCVDm4|AdZUZeHgi@EM^d|2~8V6OY&UlP70{25Xof1%~?!}1@L@_+9moZhMXGrv&m z(nEwV?_&N4iT|a-H-&5cr-ir9XL)@-!>hHPLFT%B|B&VvGXI9?|Dx72#JnQ;@C)Ia z8RmMvX!iuie>2NG5&0S6Q+ejves;CIa6SHdnegQT%dd)__X!^uVg6jn&+CM*|1tA7 zO8oyrcMA% zR|@Yt!r^ND&k;T(T)(gP3ttod2GRc=;jrtr-k^Sg?kz8TSfnt4U|-G#RT{y^cI!u7c6V&NNS zSkHS!&!xgw&NA2SS55OJ=6XE-SmA4rX1*o)@ND6$k7fR6qJLHR(BqiTNc;6xt^Wzk zv23dTJ|TR4nfZ4_&sT-7J(0Pd@BNs2hT=OvyZd_(xpB)u=v{BSop>o>p3EJY)1IN+kM^;-g-B4T^}DOd{g)*MgQ}Kuf2!m?<@LW zt>xd({34ORM)<%7nCpJjmo;B!uKPtde>kUiUHECy^M}I6KFIQzHc@|jg)d*j{N}=s z319gT^KXlu%eDN6nd^D8Gg|*gm>(DUS86@NA0+(mg>MM23%_3Lxt8_lcJt@L`##G2 z6(WBS6S=Bg5U%GHpCx?uV=RAPk$=7L72&!cevR8&_I_q?3byYdz0Ya)MA_}KN#pDz5l z!Z*Ib{0b>=pB6s!P39jF`P)8<_4j>;`LiV4gThz7&-^Q5HhnC zzfbrNgl`DHR(K8(qxZP_GnW6c@RsI3_w~G4`0Ov3&x-uJgs%s@ui6}}Hv8JWMz^+@ z40e;VUGtErr~A$i=LbjTlX>^APto}(9Ub!jST>i;c^EX89n23^6lIzGP_E<(F`b)F zhO${mUi+s1HO=@` zXYOLMxKQdW6i=7h^`tRaYF9hOPPbG(wODGIOfR>3wMwzxJhP4a*=o|AJH3NIJDIO1 zACOf)=Yql`FgKHtPQ?Qw#>`nn^hw?jxoFCe|Q_!QCy*q|IoEzOK@LYCe zc&E^Z3x(WH!Dn)rp^=>;kR8ru@;k+#kj-aDcZxy=`BNC#DH7SCy(5{zPO->m_U3a# zJ4ItOH##~zv|~JmM@B}nnVlk%%M}Xw{LW=?Br}ANc8W?Sm(OMp)J~Df4v*$@h5XK? zGB-RrGPL&`WpgAqlFy88UqTm>@~M5(liQSj*!8)kZqgad8{=Y7A&rLn7E7H|oxaXO zZNA$PV+f;N9-bd54b2sj%4kIlTs}XSDJA*JaFR{t3uN|?uerkLaBgIdWbibcEsR!1 zvLk&-qui|28r2K0>@*vLCIT5zHNx$Rwz+*`y#^PP?n1M2X{p{z#?zKewLT~{<>9&c zLUuT(>@907rzxVN+a!)0qCdKKcvK=@)=!J2?!q7}^z`(>uncsT8s!U1-R5GgJUHH5 zY?a!{zD8yGOsRFU*65~+%+BJiZaa8ouKaYj*-l7ns;ow(b`0C-iUrwGO+>Ggq$0yE z(@XrnZVeuonf}L&~b#-tLbqiI;V2=qBGPQ08PWt^wh*XMBBwhIElujpooupeW zR?B75Kv_Rnt#ucAbA#pP;)RuF`Bc)D|1K!ElS+baXQ_U{LQ-!f?aqa*Ql~RGg@4Zf zb$nSxoxvkY6HHmHF<5KVx|L=l88lHY)vM^ol$H$O-d0jRYY6JYzNAC_G=t8xYu!XT zKn9kQ&Zz`-VIi?^g?s__710?gE>f>f{p!@Jr80G*jOSVh66R^XU0O_9O;q`$T}&D% zz>ZEzNs&@gq@)->=%=?!lb4kcv$ic#m1M40H8P6}NvTydk8^cof2-Y`uho-wscUu3 zC#7z$ogAu{s#X;Q%SorxY+s515ci43yp1t>t=(F=yVxq`Gb1K|(@CS!Y)`8qw4YiY zTeZ+?bXn@~eBwE~UgOaP$M=tEgu zG!IF`i4VUi40#%-jeugk28y&xZQ=|0y++odg=~xtTiN+ir(17UvorLnjqIagiI5xS z8TAY%@2aVBL-1HV(Q7pDpJ8*=&Y2`>xl+w`8TFm(l*4I&*QUI2Shc*rI$3I;x~$no z&2$`)QB@35Ofd9pGkLz&?sONMl^#l}YfHUqQ=2c9lcOkeMoGDjs$J|hi=En|ZMs_v zOP#4wHJNsy&CU!)bVft9+(H=EFXCUvFeYgn464m!vN**>{e)Z8Tct*=e9Fx~XiSh_ z4Lj_uB=bpo2CaYzm7+`0R`DN=V~kOZ1HH*PH<~D=2kR)xMxt7WKz&~wRnjn2@BOvz zcoRc$!;-~TcWJSMXd7fQ5wE0KZnThdRxgY~*~YtC9&a|f?PeVn-uN$7Ds3n%C&kl= z4ID*_%!84llIK2HNdyZ=*9}b~bsb$)sw2zV85dR0lup^GQBghv>*Yy!594i^CF_A~ z*&^)VV$W9KGbpvj58`D<(W*`uC&<++on+BA`lj5VkRXfewncy%yc{Pdq`8}b37$a> zGD=&`X1!cbN{yZk7Ito&I^~O~QbrK(HJwAKKhreymuBVo{5-6T@v=CLHxBo1atuv_ zeZA)0S8AshOVyfvD@YJp=Y4H7A69&>hpN$q4K<31c$IXKWvrjGA(#sROvt>KLyJ93 z6cG&@7F8NOQL0JJ`QmtSl2T_wO;1TUwg|SsWR!y&Nwz1{7#PL$AiEgo>KS+A{Fv65J6^g)xe2ixtYtxz4zkt9CC>#0=& z);yiGk#A>wNsv<4M|fY&_L9$(-KyI%RjE~)-37ntFI9r9u2NsvDX{3;b@wAH(ezAE zGMqfIE(WT;gr^Z!OuY)vdM^%fC#SoB`dXp+tag`4quH&^FBPT!MEWqbPN`j9sG-v+ zGJ`ebofJ)m*PuuSoyK zgfQPul1IBO1j^=-Qs!+9gBz*!eiE2eb1{jSPf6*H&SX2?_lnNFh$ zM&2*<$VlT@ZlizhzS;RR6%+~M4p|hM&hbkuAbKWTdz=e!lu` z)FQ&tdmqkaa|TzN$=O=hiPV*gC=KWfIf#1WZC9q<9l{*4BY}ZQ(ndD2Jy?JRMZvZ$ zWOW*W_c|Oen+l|VM!$3uAt#=Ny|z!?sx=x(g*s>$VObRzjuvS|X1rq>pm#PqY@W#i z_`|_6qSwKorDaPhp>|R}4WxSiR1 z)*lbsK38>{NZEd>jD9P&B@i-q)<&^Dk14!le*$}voTzkN>(Fbpnr$?%r>%mHWlnMg z&Mnq#^t2?PmBawS8CTe1<0a7!q>9DUl}@ur<-dscZ(f3MER~Q`bG}kqin*7mc`J&P zC(vjXWk4QTqM;!X0i<~@h zR03&s2KT|N_u>C()Q}#{|2>(5pMY)*QTyW?ihg~kZ>~2Fh9Y+?siL298Z(Eb zicmlOHnX-0!dI9Ym z1EXCBy03D&ga*>;7BJIn9xAmhK2$@mXr_s|D$5{qw28?)R%$ba4Pu8v<(|?}@}(B@ zkX-VmdZ0|KH&ZLsTANd)bGAzB1-3RVY@Dy3)O44v_THME$t%oiU}C(E7&O~K`?SXo z`eZ|7Nv|vKizV&$l$y@-v5h!t)wWKVZJn?xy@OkBd$)WxaH9<{CM_~4=tro5f_Rh~ zMoip>E{k)a7qOOTWe;j=>3gzCFXX}mE?~s&ORJ}3n&ye7Xpjxd>tAUK6x3xS?XYG@s` z45lJz=t>G3P21y7+HJH*wGORcLQ8TsDfiUW3F%7{_$FvyOg1wr(d2CC)8QP#r2J8u zK&PSCAb!Cz>bTH&f@X>7?VXR`G`3I+i}-ExPiumi#5luwqM?cNh$K)HAV$A*7)C(N z=1?e@<3ZEwM}K%|q_3k^Dv>C^oz>VzNUJubSM0!ev)%5sx@sL08Dv_;P|j)!U1%3X ztTB)P;OzFSYt0L5$b(wl$t)c=cc>=z$Z@)m-tQnv6VEjVt#`A-?qy}i4q=Z4S;6hJ zD5>M92F6sTCC#XjI&b2vL+PBVwbZK}Z?S&1H|+|XoQ*z3-Zq7-5Urq4sAav2LXSO=g5HE|g{P(#n!JYlL9 z^QGOIBXAUR46yxL{;~yh28vj|ftAo~9Al(FZ5ilz8yhN&P^nX{)ebf56+==n9~?Js z<7NAE-u`UbpEe0c4Ln-6KNsy!>+7hE&(WR{n6$rau#+}@lMN$q%>J?oIc9@BX2Y5? zqElAul=U@b1DLW&oT^!GjxL+pY2!X^)lQ$X)Fyn|DtM%Ef257)yA}bRHVmHCC^c8pR{nKHIF;ms$&s$98EBi+ILodogK1)`HUsEUtat zkMT?+!D@i^vA;y?q4ufMDHSg*EjXlGvT5I+G^)^GT^CBVQ=Q%^hcsKw#U^%o7?thP z!lL8eE}?C4!tYgs2=x|f_8pFw8l?&)e%~B&45Bc@TJw0R?Iv}+)I+6Eve=pI<-+(v z2`j4BAx$XQu;t|NIEH#P%w*a;8((T+0mPR3@ufCW=y*AR z{BEP4rZpZ&Fy1R+ACb+K1HD$gx#Ya3gViMjyUj~Ki1c+_;qF4M*>XZWoHW~2H*XGO zXATOHn~=j;{&T%xsj|CZ^XM>oQue(c?p;~JjvpK0!@c%m@6>_?N1XWJceQ8V6CQhw zrY#XiN?7u-8GIy}YbR$+?i{JLkv9z+lZi!IVJg*&`>-rla-uxZz^hYBw>oDh8l7^x zhKy^XoD`=@3-!`z8^zGIjSO(&@z4@pi(54=!R`Vlg_o2XD2p~;mtdv$lpE1YN=v1M z;!zvmB@3l?v$NnSS-{$hN$VvG%`2U{bIC%lQaXe3ZUl~&Y_=Um{@YwTnzXReUL*I-Rzk;Z*9c&;IK*xKND z!b&aXAoQ!6Ot2@aR-7y?ImK)eODRe5lG>@#sh$%aDkv4*;&=}m$*|aKb%;aEGEUZ< zyqm-hV(SePCd#5((ze+=*{j1~I?||?80{L_W2HH~csFUsk~77bQmuHjXQKvYU(T^p zR{im+YkZE^i{lG5rwAOcSBgh^FtVO$BRbKA;kA~Y&@l|u7N}axx$lcyR8QX*1|s8V z(m`U==nKXb%=Fr)+|b&!C7Yh(9c&r0iaLv>hU1EAS30v$JOU$HH9}LR`r;DymRN67 zrCxCyI}?wTY(d0a4!&ravLQ_^G|`@UrE{u-r9o_S3~Tp^1clTFh$%TI{?o7=FcnVn zr%TwJfx6kYflZ^jx)mJHr`;Tzu2m}T%cD^NjoxWNSQp9ZS_2bYj?QMgglvWhbA`}5 z^-az6QXP98ipNS-r%{+jLsGIYaRz1)8!t>yct$hl6f;!@Z3ffhj2mA9m)4wyXr^?^ z32vseShGfZhHSWPvu2WduWDZu^tzT0kG8_h)aDX5r)O%|s#U7mF2zi(y?~LTNytem z?QYX_siW;Oypu*1CBmf-;WvgaFB_z)*v0y5%kX-J2!D)y0{L11j#TV_zg*oKtDo;Q&6GgGnq-R2wME*bcP4j>8n)1S_eWO+g3~2UOItrf$n9 z2LTt1=dtTYN15@_<{50Pq+O6cpQQN(ADwI=Z#_{N!WDT|$%tzl8)Z$k6I9bmQlWTK zNkGpV8HqLud+~I559>8)1}wxU&}!2>g%+E}eo&g|DbCQGi`#3RZq9d$2bvi3*@C8p zic|D;LQm;8s!ldgfe@()T_B9hrPNBOxJ)PX#hz2Nuo!|I@y40+O-#V~eOp3)M~_Il zUq$q&306JXq^d{z?$o2T6!bXhd36SRhu|oqp(P_jkgK&pcG75MZv>8JV=y0sBN2$* z!TPn?fQDlbdq~ofdkZl*8iARiOqAv#bT|exL&Fi#%up;-GFSypM;2?8X_&!^ZH&e; zE0c|747R366kuymjK=bdRv=@tQN5VKj>zVsq2*!;9*MojOfLG)^0D-0^3lNZvA{Ce z;~$A`A)1InOz%iE$1wdKQyWdha5OM%n2Tr_j=qWb8;)n>NL24gR4=}vi^L&XqcfvX zy;%B=X^3Wev;yPv(U^w4(U*ypm~?1ae7PN?v6q>R)?s|*8q*N1!`Vz!ZzdLBnq-f} zEE_8i*=#Hyve*C@(-4hsv}R^=QN37eiRg`1H+)4Lm5u7nNA+SAC=yz(VCUZNA*T)RxVnza?zTVi`J}MAsVycXo{nC2;aiTQalnX>$#Cw z-OP=|>U=I*hjP(6lpBre9gXH>v}Wa^9nsw0sNQJnl#AA(e6$Ybhhj0y55;maAFV_A zXgidT))t)65P3uSZ0sH9v(cDEdx-diKc+X@7sQzgQQ25+$wzBT9y`_2H7lQwS)+Wk zw&bI=B_FLVH~=CRTC}$0qdmNQv>nPv>rg)04&|f$zI?Q1<)bw#A8noT(VCTy_6GCO znuT*iV!0EoS@~$2mERkEo6-7~kJh(*w7wOh!@NSY%_>BDgN0}x~OOIx&V7NRW~PEm)tEJWM4LUc@4h}O+Qv~Cunb+Zs1lNF+4vO=^L7NWHfN4CUr zXEd6>(OO6!XGiik+Mg^$`;&!e-7G{$YQxdGIXo0=V~3-46Xys;;u|%;(Kj4@!BLAG zed*DjPIRykEeBB(9W5Kt4pFpZM7u-L(h@b<(GnCbK+*COHR4el9xXi4vJ)MkL~VU0 zI`YS%V39IHyNc5#JrnJR;oz;PY^>~MqU}N^+Ad_GeYQ-rwa7$!a+zowl8N^3GSQYL z6Yce7qGO~?bc{qtB}8&E+84}3+Z!Ci71a=HE$H)xSZJ{xZ6?}7%tYHJ9Gw=^8*Q;N z(cWYx+K$nV*GPP$?O3J|jYG8OnTfV;I9($aTC~l}L@i<_+DpwuZDJ-qfgQDqnW$OJ zMD1cGY8W%ozH26G8Z*%zZ6>;4k%^kjOw?v(qDC_lwVIiz*~~;+*i6)LW}=oe6J6uT zM9pL-YA3VNb~hWflQ=UmQlhd^JDH8z$!xTZ&PMHIHfkqvu3;<=Q9FtA{Gzh4dXbGT zpJbyJF&piHXQMsvY_tcSjoQg<)J|rjb}}0sNoS)Y>1?#Oo{cW6WTSofY}9&Yql+!s zsGZD4mte9{JDH6x%w(erGuf#1%tozeHo7vCjatua)Ou#4-N|g!dS;^?%52n5;$X>G zNsW#pvQaykjoQgzRvMPdb<)-3!V^ttSr3jmpN#LoRAPbJ3NrT-18zqJ7U?)OzNk))U8- z#^M{bp1G*?%tia2xv2HbMXhHpYCUsN>zRvMPaJU@OGVUr=AzaUC&tD!MEjn(s7=j9 z`<}U|P0dAZYA!lV&qZx&F4`l_MOXE3a&Ihc(H?0oYEyGjo0^N-)Lhi2;&|y;9HQ0} zM=VEWW4)kU)OzNkb3VD~uss*Gskvy6G#9n0IPo_U-+a`j;#m2pY%F*3QJb2N_ET~E zcT8{8rskvl)O@s`nvYsqI%zX)5ph0rj7BXjj;@Z%Msp`Rp3g_e^Ef0tsyCWDQA>++ zxnmllmNp-?wE3u|%||V5K02Pq;oz}2MEj}vsHM$EEp0w(Y4cG_n~z%BeALqBqn0)w zwY2%DrOihzZ9dvh%|~r&K5A3*(SB+^YCZE&>zR*Q&wR8;nvYt~eAIg8qa*ix)OzNl z)-xZqp82Tt%t!m4`KX=DN9|-jYA5qiJDHE#$wJgl7NR5fLex$cqJ7Uo)FKw57O@bu zh=ph`vkA!_?@UqURtQQKFD&T!HJ$&nOCZ69v4h|0$1bPLfL&O+46 z6{2JGLbN|wi1sH7(Yee*)b96XDx@Lwr@CU`-Y>lmcvooM`s75OZ6~p zpFU0pCrnr5#TEpO zE4{_VCG%vpVVczndDy1aeo3#jIfB&h!;uf=X5%!SA0S_xn9~Qe)3M&7d&Gmrt>zh= znqd^k;W#xqEMJQVgCu6KJ($a;1#?+nkiK7D#F=i!Ct{%v6EMK0g_gy10QF=Zr;g$X zZQST0siV9e&im@|gf9z^&(GkaCoP9B0&#k5%z>|l(Q>s84r`dAQ-#qyTbL$V488n7 z%p>XpBz(bSWXyq`n%JaLZHrJRhaFjz&X}x?jVo(QgG+73y0j40Ycs=@9l@m(IHE#j zKNT7EWJ{)c#QEWL`AnZW!^gVO#V>>Eoiyv6$sW!?ai00f73T9^=;&O177Bi&7|1~| zc%aie+-G%Oi*~n>riEHf=}h}+9Mn(8XLq}8kEdWlhoLwjw%Z4f9Y1(%#`uE3!HHv+ z;!pUA$$`zDSVBFFKX=ORVHJf#!t#G6*Uv|Aw~Pm)cEpj8Wfp_8W&GW{ryk->+$6Zr5^AvC`@q^!jc_*A)zLp78`oz5FFaaT{O zuq($$<0yV*an+Me_b58W3gL8dbppJRK7eCl*vXc+!1G?LT%?dGIl3h5#k^f8h0a?F z={Ic8=}KqkUi22|Y?}+|C?$2s4T@oK?u~Vu#&J7HM&QFH2Mr$``8G)BZCBgs=pBu^ z%}TRRKj18nGQLx+7+_U&amt@_F%YTi;DbhdW=VJ8khRixXYJaf?t9sdbD>a;qAu#r zD$fa@Jq8zUq2F^32~1bG+Ra5+)ZjSrF?>6D3P~l8E(Ti|bp7(pHSCyN6>-u>LgPSx z@@$V|7Jv?lT)Qa%&1gUn-GCsX0da30K{H1|84+B?=06YTz2|cH3}v1G8u!Fk*{Il=jOojY(vPU#WI_*f9VipYNeSo9|0BQ3Ha?1xQVLsBy z^(nrpE+@%VCUkYzjq{9)rl@)tcfLBVLsz@mL#^?}vtK(@X;hzg;~RCisQEQOOX$2% zH%;jWoX3rZGq`U`E-En5!FSR?=24uL1&Bg>YIm=324fq0(l)$KbPhMeC;{VSp7JSm zJYsltmUf&>a8!?T`-A4{yn8wv%#DjuM+1e*epq#T6NdIg*Po>1PtuXv8KI9!J$WPnE+ z)vZjcsK!X``^(#HsG?~b!~xpJbe7b@#8b* zQ5qieylc+_n(W;;U$BhRBIU-Klq>GkNx4zQqSjtV4ZrC?y-vrLEQ6dzO-tE3H%JPn zTvlxr1*xDmIF~_z(3!iQi4}(9Ms2yGrtEOLdB(&F9h@_C*O>u0%&UwO8&FfEN||(+ zXGw=6VIpW{bObH25%d{H&}VdMpp5{IEA zgyKo(hUn^G-6F_VXqtIxmc6{(wMX6KxEmeJ&OYzLIJlJQaOd5FRHoG7xjH!3hn8%ZRaZ_G@|?DKBYY;lvJ;_vuA+r{BcD9{Gs zT$2utxWxf0zG%R$)u@(n_|vH~b4ARybh!u`DRE0oha!t2EBy>6QuLq<2CyhAScONbfG^x~l5bXh- zvV*aqE`M}epLn6G>|*@5ls$=q_Cd;2Uyrmq8s~a-eOVq(`nilsfYIu>AyA~>xKI{S zJoa1P#?6FC)h!xJbacMD_>5~K1AcfM9WHAfP{*n> zy01OyUb%>T4`fyCV*6lHOjnx)$l4Gt9Y)r5KoW5)u5*bVIid#R(EHtk$^?0NV0l?e=`;!sKvBq~9j*|i4= zS1%eJa<6Hq`fUhZfPpTtz2>Tl*XLdic%i!OkLn(ZQE(qBLv*EVrtjM0UM)I}$tpBL zXk^>n@g-CUlaQz!MpHLRs*YxY@1@;YA7#u5+=@%-IXoWtsFo4CwtbJ)GFhqvm-eDnNO<3AoR#Zl@*s!gh)&bhz0NZgF=a|smZ~X$ zK@<*}B`mg+Dz%$!y6IsYHPXFzR2d<`?^a#8lrghZCR4VnV}$X$z3#XF1ymrvQ)Yd10tmR8Fcz#$W0 ziky3MJ!-oE)$(PidJttlt`;5WT$>sE9v6j;4P~40p5p`qt8N6f6 z)5!Z7RP`S(5YC3lFg&2u@&O#9Y^CJ+nDItB=DhAG5#3pn1`}7YRGfFwPL=`zsO>Gb z0+YeLDW~fv+N2WH8cQm3ZEjKHXqq>R{btW{R7Tt>pswF_I&5-DwM`(Ed#?^Ql@}MG z73rvMOM)9f+6k&k%a$nPsJt1yIQ_3z?m{$a1@Ez)&=I>>Ux_)AnNl1VKkOd##tDIw zGhFap8ofnTx@}JQ?*8i}H!=}4&~^%&#kd&VB+Almd+D%qOR#mo2rVLBsdZYom?YwY zyQkHiMY`-_-UzY5EktO}Y1*!V7eO~qJ6?SO-<9TCJaI%n1?K6>CLJJB0#66%GSlgp_&WWIM&~g7bI2<$l2EUoWHiLOR-9eR#WQLtPeHU`e@^2J+=SZX zbYirt>q0qC`AfqNZw!Q>tXmCpuTJY6aog|OUi1MwxJRRrDt!CNIKadx?tlQPGUtQO2$gVvc zo!x_rwvS-poQ0h(>MmXNZTu!zso|t~UZeyT506`bfkgyN`bBwBNl^oBJSsz$pfK3L z6zZs9zSF}-fpKJMHDl2ChT%gQmm|APxk8ldCOAc$jw{*ALCp0?v!wjWMSv2*YKY)1x``& zE-c530yY}?vEx~CM8y?>6|R+4|1GH6$^j!M_ZoPT_3eg|;@j*^sEVcL{}okR-F!hz zSQ&sjp_^DfbP}!Zm-cd=E(2GTZke~4N4^GgMibtc5;A~{#x_L7EG;;1`w_|`?)d28 z(jfh|@UqnEit=sa5o6V+9|T?j3Xe6fAmnM^sUqSsu<47Q<%n;jtA8d4E)R-O1U%u*B+*YK6fSM{*aJl(4}Q-EzO zgkdJehqRa1G3VIDg!a$rZEIlLO%P{}+C-ZK5esEeoa@6q4C~@9Y{0GDb(Y)^ZWX;R zqf+IAU*|C@ts)3q18=0%sAJK$%6O!!d_2E?4pqx!I;@rkYyiS$Y;@DBae5GBDIT5R z)O?I+aNCwHNNS2Kj8&;K-)=4z57Y2F?bdBp;|^i!NXlAmmA~z-1=tqSnpsFNAavq` z;M&~?wW74jK8-b3lLU+gyp(z>($dP=dRC8i`UK_rAZBi-i~ur<7%3DB8{|%}gTOyqQ*P0It{Zs;zlNc|e;T zM!D9YrMap%;8Jy|=ghB?QQ^!fItCojvHMjvMYxB_8ed_a6dF7lvwJLo;j={o{TVzD znb*=m7vDUCG;eF)d$zrwF zmUUDNuR|rz&TE`^XP2t;=&qQQSK)@Cl6mIBb$ohef$XEfF#7C*y+XbVZtTD$wXJIE zG7(w{r>jehe|IFx{aicGBhUU89~U|;9aWs^DWjIsjoL(COK7t$FV0qO4Qzf$lWIk< z`Gwvl*LI^xHBl8e7lM+D4kXNok(c`9w!^Casu8V`TJ+vUy*Y=7U**0LRj^zk1zZX8 z;m@`aalOcMr|vALh2f}Y+z?}8MgXr8tJNoI1#cAN!#9``XD(vb9#})_b7QH3SLFNw99*gKt7ABV!cLZxZm8BVP{S8| zmM1Tm9wB0$RV~6sPgHZ-0cuAyp&mS=!k{N__hFKVH+hA{YR#7#t3R{G|MZUN=r~zxlrKr{reTPV(UVx>_mAy_^#{2dK zFjlLwMjtbOY^r?o>{1}tp;30Ikml8KcciW>)Sd5Cai^#TRDU^`z&q{kQh8%U)rU1U zm&sImuM?jc&?w%>qlZodKbW56oeGO9H4`GK zAkb!Q7pT#TXi)V0DgsCfeMm3EOMyRcid^Yp-pFPteHmzip$BKzE)}ANyA-OGH=4XB zPz*B}HPw}tw=Hcw@Bcg2Jc4!4)D}SMj5M%OfVvDee0+#?I>8mH7&zJ}F7mTy4474L zKPu)b(H0pMp@Z!^(_Qfxia1^JU3-Y_9;DugQ9y~dN^DP?xL533<hTK00kET8=yF9hR9rPn7#@ zZwN-@N;KovUv0iyX`X3N55n3P)d4+$P(n6^KKCJ1bK_r09`qLB6jF9z;(#x=k2^is z+b|z0KEbnzF(u__ibe6K*7I4KWymxGmzM??>gdwa#SAdOGbdJm6J!y)Q{wxq;; zkW0i%6B}66cL`z-IOJwbNAsYQpIQ#X4x7mWr+A9TPRoeKj-o&wNGG=Pr2D58Vk%pbL z$J1*E4Ts_6yGeCU%h(iS$<9%CT<7qU{wEgUDAtTXC1`2|+@Yz+o8fIJPZ4(IOWd4|Yq{qs~`1ih1phmNGe|K=m z;FPxDgnls^rlC><)67JG{m&FJE21VMQ$oDK#C~}b2w+AQmake4aPW~!;HusM1|01g z`Va1BEj!EY>}o!73B;(RR#Z2ax}AZe^FamL4E5py2^w{99s~}U!#bpQUY*OyzCPN@ zNCvr$#gPObR;mr6qx=fDl~p0r+BJ{53`HDu>);9&OusdBrW zqZ(>riYIXAU1GeyBydu#VoaxUAbo)cXU|UHf?lC&^>@NHQ%QA9oMz0Z3$G@sLQ5f= zCV~)XPr!D_21uJcuzDW|V$M_+gLihYdIBFgQ$Ud*XMrtH=Q^o5tQ+NSLv76?d0q@zsy*{`$K@oau#P=S&T!g_*ME zI2mU0EKQ1-yKwh_DAOY?y;+W+tTkSx8|X25a3)IV(OpKtqkGZ`In!0Yy2DA&beW#} zjEkI{St{}{gd=)g2^`_e*W2LOLzm#Vc^vZSl3|=(>8r`$-dddQ=n7?r zaVv?h2?veRtp%|aBCC+A-R&Nedc{nSn*)YXM`tw&VV&cY~xIlrI-lh%R_C8THsMBhkFr{uM9#y&Y z*W)lqq!gjU<@rf5EQ#PuFZT;2KGdg(*%0@0{ZfMOa-4MxdB(WOL`l$G)7j)I%y}h3 z-1kAtLi?sCjUvni`lr%p5Jn2S!ToWY67(WaUTg(2AWDKU7Lt0c7LFa;cj?2keQMs+ zBU%bww&d(IoliFHB-y9zdx9kQV*-}W(8FYKXV4N|tdu_zS21CK{y2&@U(hnJ$rRqk zIb@!B(~5aS`#+CYzTj+QG02W|46>C@BTV%gWhfN2O3__aKa27-ciKZ0%)6vWuf!Sh~@UCqyp_Av27pVxPJ*M0|pY{vVw9k~A@_Bjo3Z0IW0IJbW&R)p+D28;n zfs68m*NIPL2Ocw^!`4D6@E}84rOLqN!}%*{E70h`<7_~`Ic1z9!y{CTesl4={5Pu5 z&%Z+hvNOu&Q+Z&I%~d+~!aC8WM0|7F=_p_EO#IDgJZCIB1AA;VJ22jUEC=?a(nXuP zsS7heUvNat8tqixOl$MZt}*SlracgJYT69Nn7r9bhZ<@Deqvx zDMXYg`*yG-S54BT&K50H&s^5Zt23W|Q}68mYP8OoU)zU{Vy54QIxoN`AIGM32UM2a z*dqHI3dK*&G-|$jY4mD%l9Y|WaQ;C9hcK(BpQ5q+^?j?*FCWfWOZw~UpyubMX;87y zFJ>}XoL1lHrs`kd;^$n%s9-&&%?8RX=;*`$dN2CMs_{~RzB?Zt9rh@EhjXR@^_635 zi)zI&$wk!(juwVUhWvWU&KWn%$yRNJs@fQ;AqxUae!YzTwe@*9UYV<2iv4$~QsZ&Y z2Npgs5=(h-v68<$WBOjM8-Ao0acJ%!6I(pn|%1!yaJeRvdZUC{NrJ<5d^?mt}u8L~IZCzB|@f`QYEu~Ic z5{hEdBk+tfF{+J4ZjpxbQ8S}o?*Clqejd{jrP@)KdOK?M(s7FCnle+=iFMluOxe(q zylRQ5<<*JASx(7~%8i?@mCHkHNOIG4s}?&ldb;VFy?3*S3XiikQZL5i+q@Opkw$aq zrZc2pftukuvye2XZE@cXCgW)SE$)fkthXJDGJkpXKM**-V=PRO9rXvY|6_4blL!A# zW8jq;e8fm!$WzIQG|ds$c=@3d=)vX|&9e_&&TWWmCC`+w#{iQ(X&1B_n9Gkk(Jrc(7xl(dwH=EWon-q_ zsm|5^ZzAuNbqod2@0dv&NZ)}=({RCdLPLL-Z|lf@Gb6^Y*Be$n*lpa{XU=#`by&!A z)LHFj=nNji!O-$E*ag8`6x8=@yY{Hh<>-nR^zVEmTRsKS#XP$Q573=X_?C3n9y-}_ z_uv#Zk9*)SKI`-V)`hr8nY!6l<&GH!gEfZC6d}CNfS39{WKW9BLb! z=p4Yv+KA)%C|1NU-7irBz^6^PuuMPKI@r%(AFya{9}b=^*L!qT)KTmvXc&iX)BK!q zf1Yg7sV&<3O!Fw+dS{-eYjkw^p(b`JXc3jiyb!%>4`==ELCL}p(}v=Z&9t%DMh#); za6)~)98z_%UkKHH%#;E}w~5IKEc4QrnBs}P6`ZDTr{YSGL(w4j(_($-LaGI-m3ft0 zEF^V|A556Cx5|q2&GqI{dUx%a#;(Oif-j9>P12BDh0@QX*d*VPXZ2FdeR` z;ZxV@akrJt;K)#9Smr=<-|$`6X)I`B+xCQN{Kjc+L36$EsGoQ3!IthC1{v5SPXXitITwGjt}K<0AF9307A!;xRyzh6FMaoWK2?pk+2f@ zox?!oj6MLTI+ISc46Cwx!7pQ48=5=}T(?pU*pa)i0IsOuz-C9k#WOHoG-0%o5| zVpIad-Loy{noN0~q+4WSkvT+1tA`5tqgQGll<8J7QQvAO5I(a$hXUgl-x8wk`bBpi zY;+^2MEKwbpD30O;q+?bcdl0To-wk3E)_wW&uD%d6&)+%6{lVwbRQ165Btpn$Ih!O zjNHmH;l_#M?m9E^bZ|sHJ8)GG-E}%+z=T~=x$rRJm2DlUk&QSW#4sAW{mIqnQ<}^Z z$7)+P)7&>bJ~0s!_mnznh=<hCN|0XynI_n@vG*Rw)MQNEBnsI=0H=B zWiuIWnDHh}x-L&amgO}n6{|4GG?s}vtIw>^LA-Dd&G~Si1~sZH3)C07X@^0oR8v?r ziV5x7qs7p)s!nlAPg-OKUvjE`cNioZ45b6zAnxbwATVC1<(X6ZPjVypWnPK^wG9i$whS78dsIV4nR31!qX z8uD$GXaSjq#0f(sYW*=3gFUU+_483Q9YR#ci>?B6q-cyrH_>Ss3}@ZPgN@U*HqJlO z&S(ry?Q2vHo=tGB@c2RvV-MGf_!OPzqM_Q)IdNbT?E`Ye-np#!GdY2ZI;}rd)Q&eOcoQ^5)dN`4Y17?-bnTmwq8ld6L(hBKj{$`W)P`sz z$<2$4aXC)gTXphj_(30B8bE{Pym=z$;C)oo>zQcStE8En!2TRZF~eh}MHhNGPY-Bq zG@C|`w^SeG|BR%j(vued6jLL@HD9Zt{k$}QaEcuz*+FN#M6+4Y;_Az6 z{V-o{bm>4ZF2E>?6%)}aEwo*LR6U7}jPd8~~r6|rGqK3jGmJ046oNL9dYNNc8!!GSkf?e{giliF+TivLh z&IDX|$nG-~Hr5q=@Cfuy*&QPb6S$Ja>ZODZF9*zna>I9^_^u)%&1f-C?u-H5}MeztH~pE$s#jCiL6^6 zI?YUYB*3v#FW%S;r+%y0(@pZW;}9ZMXAPXe_bJYjX_Q+ZGYCG=%!s2!ziq5swr$}N z2QCTLPN{gP%EsM8(+!F{upLsP1m9u>h~+X@C@p?AVQWoDQ_?|Zxn5i+@n$vH9y%^3D-nnaGNK31VtZ|cJn=7d_UHkX zZW?Db*HwwfGumP55|Wto2Jw@OXm`Q0p^8c~6go_Fjy1bz>oKr}7$!NAc6|wNieD~J z%@e@JEZtG#u(;QzCNI@8gik9}-hsRxo-ZP236T_{uGOg?g^$#7hL5Dlb|G~XsH88c zJV%GZ_AFho-Gis7&*CEOlbcr8W%nR;lssW1n7a$UoIbZvQ7#$!Wx;Tv^A%>lTUa;% z_QgFps8PLE{7(f;by)EmLr-O{@H3$v4}Y2{!rDb^=3X5f>DE6gs;bR$!=lpXK69T9 zK4_#%Ws)4J*Gm7Bt;0+?eyI*3{)g5&1xop+I^>-7^hjddsUx4%p~wH+m&XtCG>NgH zZYEtsi#t-ADAuG*&IW@Nr-WHlaGEAT13?NY!e+>B2BK1UoZ_gqfuF=lwsk6n>T*8# zsp8z-L0Ol;qiP0}DxET8aRbVcb{Yq`Q!=dq_kl7-KyDrOWFrpRkFf@xhmdM%Q${`M zkZNgd3QQY-IQlG*q<7}0Qp8;c?MJ_OFDeGgr{L(Vo=PThE`PIfDIdxvC*Dn;p$;oP zpOt4S$mY17fcZk^a2_p{oKclnYq|uVm+CUBnVc$gg1va+IB%Hp2WP$@2I>GI(Q6#Y zIqrZCTGT;*d1oSSbV+YV$IEi65-F-Ck5hCX?e$9wAEIxsw{fF9N&C=;JB10xQUbp8 zO)C7}aJ*0`fH_olOFQk%_blnROLTPl3aDmTagr5q+Y*jZe|-~b=6hN=$M z=>YSPs$AO!?_W~iE^q4^Pm9vX2|c8~Sr3Dph`hW@oU7tZp`exKRD_ZD+r$|zG1b7w z>EymJ8ZML!4Xe$rJvBOHi_a?SOExGIjRhP#GC|Wx zILM(+368s*G(A&KrV9_9{Y%r_Y12ugYX}CN>Q^dZYR7}`)whr=H-SkgUkXcvfNV(ur!+rJ9fdR&-JN5#Fyp+|jm2Ek$prJ_ zvA6=m_S!6F;j|qyJeD!X@iwqY;0&*D`$^Ys=}gfsYSq~HBxe8zS%rE3G>H@>$k9A| zm?&&uq2=2ULpm03;B=G$(>V*cP3FQSk~q-7AaLgL-X%XHqJo}@VZUB5%IZv_3Qwx3 zQms*KuhS2cX0wz_kPbhG9W$l&!)RgJGpT=b3`%MzjANo1i+wi2w5kbvecXmaJ!Chh z>DhlFM8b+oEXW)}{(C3lzw+{F@2%p|%Q-x&pxyXr779YfkESR~!4wG70*_D@q(-!* zsY+rRGx5_89V+?TNvHA#ok}!>_GO*!&SWRt#|h_AhA{e6F|nvF%^I&R%|&TGN^$Ud zL@!QgiqMfL#lcY#*}aD1-ifd;#htStUA9#Y9Mrg4hp}sqbS2H$+PaXLPGN4+R9zWI zGbV#cHOACF(H&5y(5h-rb(_y4kyLrE+KaULy9d3d!BE$R8JM>Du9I)}jf<2lj+GZ{ zX^>O#^|=Xw~gn2w5A3Usp=ZK`*k*O4JvNn8dlH1S-rz^ z$OQE`(2%OkfqS~%1p+~74qVeUFc64V!$2mei-Bucj$_X0S{awxIWgPU&p?}3djdDV zrUs6FbqyRNbv7-rQ_!i}8+iAtaNroN$AQc?l{t{wu12TCOtrR^)9v;|+ECXyRV_V7 zzfQVNL4|ak!kXr~MXRDK5Y$80DOCwwN4&LE!|A%;2**^r>iSRDaMv}c5w26ZZo970 zitP#nwc2&^3bE_pS02~JuQ{$uq}l||+Xk1aFs?_xwzw|Qs^SW4Q%_ux?J9{cV`_-g z@Ua9=6?2a$k$!gr^Q8k2z+!at8|`y?u{DuqNVjVsjoY+8hlt~rwXdKfYj{xm3=gZG zafsGC;~G>t!&5cRxWuZPaZJ^==B?hJ*@yQxdvHElMb~jbRDJwzDs3xf^X}M$chp>|A7E zB1X?`W+0O40(em+0lzCAI`3p=;Cn|i1NU>A83^rUX5hTDnSsDL%?xCAHZw+GXEOt_ zbC?;5jlcaO%+Pa~87MfnnSszwW(LkXni=hW4l`rL&XJ@WX=b2r`+5$?9n1_|cQ7+> zJ(rnbksX8I*~~z}4rT_f=QcACx-n)3VmHdnD7hPLX7GLJ&fOWh7(<3BfuYF^pWD)q z%+97pN$g;2$bBbcL+(3T8xlCTxgn{Y>h4 z9dbX1*&&g0+Z~eH$?%Z-j+Vy=oWt}uay!|cK5w1fE}=N;@1IiJe_ ziOkMX*x3Y;iXChaIiK4Ik<^W`LL_&i%n%FSXglP7%dG8<*F-|#|Fm{>&2ijDP(Ou_ z6sttqv@0)qk|na@ltZyZI(~4aQb%%WopN8gy;G=4<-e!90qg?USzvkAgG#)ap4nMo z(ZGISCde}$`r*9JL&TJMNQeRtQD5RA>We%?K%Iw(D)A8YWga4;%0mQ|d8kK}d5E|Q z4=JJo4^dy?AwudrL{y1~s4wzR2dMB+ge&n-1}pIpq2nY#ZGnfVF7Oc5H6HSqatLJ} zqKg6#QC;UDqNeZ=ag%t+0Vneias-vvLo7FCuZRBfW1WYHDf5sJ1s0J*MQZ916>f@wC34DfC3X^aoExMr@RRfff|9<*Pytj4qs&oqQXnbm>ntVM z6q*un5>I(#M^yb{r)56O+p(9+k#;~Tu`XqkNR!b>q{;asQkldN=`+TNGy|%LbQVWM z>H#?nbOTn15JNhMl-WRuG(!T2l;+5f^x2S)H2GN1Rl`9(M2rV5@2)YjVI6r%22vzX z2XdrHM{uMthHk1IJJevXMrP?KjTGkajPxVpGD3_E$OO`jM7JE!XU?rYGiQl9zW}%k zH7xw^Cl(5DdxVbu`#3wNw9cSs|!MLoih4=$1;3H^)o zr)P^uh(G_uI%*9voMvL5WH=Y|WSMa^LZgLT8sSJr$88Lf;O=Q48c2qi&$-ckF8Dl< zJZjUI3kWHFQM1{nu;bfE$BzdgjUE@)W?CWN+@Bw;tUZ< z?`9AGXtsBe1Qyz8)m!4P@1AgDok)I8`c&<(^t)sd+*`j5FA*jemA7^KSrS;-8`cYv z_2(XW3|H9o+zYWq8p*sI?T71!PSt*IwsA{Kqz{;7kG5u_h=5V6;RpEUuDe|6X=cdK zat<0rvYcaU)asAm4_|J<_+fqBcWNSvEIlanWt7i>=jrnL=(`pTbjt9rzXb_`7CSb9 z_7zia@au&{E%Fq*jKKu3DqpW#HV^aJ>iy&GM_$N+BbxaalzP&S&wG>|>EZof%h}Vr zX2TS(bb6zF-1;*Kz?DRmJVX(RLMV|ai6@f#pdv{ZStL_afq>BsNJ{dwSuop1_|3+{ zwb%W2Y2Jete7{3YYGjl1=0TwGAB5UknMjb!_hz$TihFOTUsvhR?$_Veb0uz8fVW6C z{R`5dYWfZ46n47v6V2@Grlt@sX6WhyjDc!mJ^Wgw&Bi0V^;mV}@r3UO$O@3z_@LVoE-W*vFa5O() zQ=KwjqxZf0Ce0!0Pb`U`#SU=An?;a$!WM0zczG~!S@E!|DgvntSHB@oW|Y0u3J%S> zp8`=1}Y-WiMt4kZZI;MEpnC>LHBO6=#-B1{%%klc}jb5 zqEcRmasWEniCA~m6Tv>*F*K&_{f}8_dzVq#mb!T|ZA_mbEi>S-ZTB0ui@!Q>BdjLK z;=uI>Y_8e;^{+l%F9_f-)OPG5%%RDM)zs)){Vy}AngYx z{HXfCOc?_+M}87VPMl2f$UINs5l6!o?OKrI($*lSkh{xf%5(HEOkN_>b-P}C8BP~+ z8W_S|mst!M2RV$z!N>=O>~jb>b8zQUE9uQkdJaLu9rL3`NJO1l@yvCcT=B48&Q~aZ zW(9H2V(v;TW12pqLXcLH>7i6QhV^i?8qMOEwfFORUoj`OZ0AhA;>sY6Vep6#DQxn^ z1BT@Sm2t9zafymlE9pVFw6f?N36sBKCI3{In?Mm*b*WZQvwqC{w#*IpQ-fm3^8S9S zDW(h>)w(ON=EI>ZCl@Q9PA)xn#R%Q)I=^(J>1tFNRzZiN8rA_L^{+Mk_f^1o9r1$& zxoUDU(0Q2${LXUl4!5ty$wO?yFD&o{(|Vc;)5om^z0H>fI*;4!-U45m!kI12SJZNR zIa}nsAo-Q$tCwo`}ql=XISqRlFaXf&BQyRdB#lxxAEv zpHw?N6N%c)5J5=T*`Zf!+{rVeRvzz#TWH|B0sS%1cW!sW>U^24Jf)Lq-w0^KmR ze0nfFgc{C;yV)P_H#tVBX-u%kCz0u3jy;YSu`f@LQ_rsDUcP!=L`-<(Xr>j-JD zc2BHsdCMm@bJ5@>%0#5R{(k)=HrFFai)WfuIq1aOWkIo3~z(mhp{NffQHX#K|1Db2r>LzxOr&I zN2-=RhK;M@owo27K21Dgsn#=;XI#$jPc>h@K1yNBy)dV$C~JZ96Y-UEz+2R%Q%_EC)d)AAPhPv6}rtVPdzv{gaUQjKWsO`m;^*j%?RtdR7jrB$gFAnuy^H3*vp7*xv-}dkB-I=;{`|F2ad?})D>KxTO zwkv$g^(TF6r4ljSp)p2h-;d~T;p|W!;QeBsVErqG{l@-7w*>ba)Qvb}es%tFs~CpE!6@QOmb@hV>`DvP+@51m^3r`Ff9B{Hmn(2DcNv zg!A)I!c^WphPNre_|p z5TfM`DK6k#s*hc8E7sm`=Nr5=%Jr&4(W_anBMIP!wL2mq>rI&FijC7+_Oq;l@s*<({syY<}QEFaLKS%^9x6y-vz zCK~p^3#JzY3bpA~op6LUV?QW~ Date: Sat, 21 Apr 2018 08:59:42 +0200 Subject: [PATCH 02/66] Remove docker-credential-pass It's not really needed to use config.json credentials --- deploy/Dockerfile | 1 - files/docker-credential-pass | Bin 2529418 -> 0 bytes 2 files changed, 1 deletion(-) delete mode 100755 files/docker-credential-pass diff --git a/deploy/Dockerfile b/deploy/Dockerfile index 74d94533d..b251cd411 100644 --- a/deploy/Dockerfile +++ b/deploy/Dockerfile @@ -17,7 +17,6 @@ FROM scratch ADD out/executor /kaniko/executor ADD files/ca-certificates.crt /kaniko/ssl/certs/ -ADD files/docker-credential-pass /usr/local/bin/ ENV HOME /root ENV PATH /usr/local/bin ENV SSL_CERT_DIR=/kaniko/ssl/certs diff --git a/files/docker-credential-pass b/files/docker-credential-pass deleted file mode 100755 index 525169cad569d77775e1de954ee437fa8d805799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2529418 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 z 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

)RB$96m!EB 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%0A`ZsCLOfxaZ5 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ͽ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

$QPy+2dCNI&uAxtd#z9Vuu{w~Q+A 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é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%0AismWo=@r)<@$@9r%g{& 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�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 Date: Sat, 21 Apr 2018 09:32:10 +0200 Subject: [PATCH 03/66] Document config.json authentication Works with the standard kaniko docker image --- README.md | 24 +++++++++++++++++++++++- deploy/Dockerfile | 3 +++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d6c707b5d..aebb32e24 100644 --- a/README.md +++ b/README.md @@ -141,7 +141,29 @@ To run kaniko in Docker, run the following command: kaniko uses Docker credential helpers to push images to a registry. -kaniko comes with support for GCR, but configuring another credential helper should allow pushing to a different registry. +kaniko comes with support for Docker `config.json` and GCR, but configuring another credential helper should allow pushing to a different registry. + +#### Pushing to Docker Hub + +Get your docker registry user and password encoded in base64 + + echo USER:PASSWORD | base64 + +Create a `config.json` file with your Docker registry url and the previous generated base64 string + +``` +{ + "auths": { + "https://index.docker.io/v1/": { + "auth": "xxxxxxxxxxxxxxx" + } + } +} +``` + +Run kaniko with the `config.json` inside `/root/.docker/config.json` + + docker run -ti --rm -v `pwd`:/workspace -v config.json:/root/.docker/config.json:ro gcr.io/kaniko-project/executor:latest --dockerfile=Dockerfile --destination=yourimagename ## Security diff --git a/deploy/Dockerfile b/deploy/Dockerfile index b251cd411..a1b920c5d 100644 --- a/deploy/Dockerfile +++ b/deploy/Dockerfile @@ -17,6 +17,9 @@ FROM scratch ADD out/executor /kaniko/executor ADD files/ca-certificates.crt /kaniko/ssl/certs/ +ADD files/docker-credential-gcr /usr/local/bin/ +ADD files/config.json /root/.docker/ +RUN ["docker-credential-gcr", "config", "--token-source=env"] ENV HOME /root ENV PATH /usr/local/bin ENV SSL_CERT_DIR=/kaniko/ssl/certs From 295dd494874f0d2a2486721e7e9d6c0397cde88a Mon Sep 17 00:00:00 2001 From: Jason Hall Date: Wed, 6 Mar 2019 14:37:56 -0500 Subject: [PATCH 04/66] Write data about pushed images if env var is set --- Gopkg.lock | 13 + pkg/executor/push.go | 39 +- pkg/executor/push_test.go | 81 ++++ vendor/github.com/spf13/afero/LICENSE.txt | 174 +++++++++ vendor/github.com/spf13/afero/afero.go | 108 ++++++ vendor/github.com/spf13/afero/basepath.go | 180 +++++++++ .../github.com/spf13/afero/cacheOnReadFs.go | 290 ++++++++++++++ vendor/github.com/spf13/afero/const_bsds.go | 22 ++ .../github.com/spf13/afero/const_win_unix.go | 25 ++ .../github.com/spf13/afero/copyOnWriteFs.go | 293 ++++++++++++++ vendor/github.com/spf13/afero/httpFs.go | 110 ++++++ vendor/github.com/spf13/afero/ioutil.go | 230 +++++++++++ vendor/github.com/spf13/afero/lstater.go | 27 ++ vendor/github.com/spf13/afero/match.go | 110 ++++++ vendor/github.com/spf13/afero/mem/dir.go | 37 ++ vendor/github.com/spf13/afero/mem/dirmap.go | 43 +++ vendor/github.com/spf13/afero/mem/file.go | 317 +++++++++++++++ vendor/github.com/spf13/afero/memmap.go | 365 ++++++++++++++++++ vendor/github.com/spf13/afero/os.go | 101 +++++ vendor/github.com/spf13/afero/path.go | 106 +++++ vendor/github.com/spf13/afero/readonlyfs.go | 80 ++++ vendor/github.com/spf13/afero/regexpfs.go | 214 ++++++++++ vendor/github.com/spf13/afero/unionFile.go | 316 +++++++++++++++ vendor/github.com/spf13/afero/util.go | 330 ++++++++++++++++ 24 files changed, 3610 insertions(+), 1 deletion(-) create mode 100644 pkg/executor/push_test.go create mode 100644 vendor/github.com/spf13/afero/LICENSE.txt create mode 100644 vendor/github.com/spf13/afero/afero.go create mode 100644 vendor/github.com/spf13/afero/basepath.go create mode 100644 vendor/github.com/spf13/afero/cacheOnReadFs.go create mode 100644 vendor/github.com/spf13/afero/const_bsds.go create mode 100644 vendor/github.com/spf13/afero/const_win_unix.go create mode 100644 vendor/github.com/spf13/afero/copyOnWriteFs.go create mode 100644 vendor/github.com/spf13/afero/httpFs.go create mode 100644 vendor/github.com/spf13/afero/ioutil.go create mode 100644 vendor/github.com/spf13/afero/lstater.go create mode 100644 vendor/github.com/spf13/afero/match.go create mode 100644 vendor/github.com/spf13/afero/mem/dir.go create mode 100644 vendor/github.com/spf13/afero/mem/dirmap.go create mode 100644 vendor/github.com/spf13/afero/mem/file.go create mode 100644 vendor/github.com/spf13/afero/memmap.go create mode 100644 vendor/github.com/spf13/afero/os.go create mode 100644 vendor/github.com/spf13/afero/path.go create mode 100644 vendor/github.com/spf13/afero/readonlyfs.go create mode 100644 vendor/github.com/spf13/afero/regexpfs.go create mode 100644 vendor/github.com/spf13/afero/unionFile.go create mode 100644 vendor/github.com/spf13/afero/util.go diff --git a/Gopkg.lock b/Gopkg.lock index 8aa683042..92460e507 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -754,6 +754,17 @@ revision = "3e01752db0189b9157070a0e1668a620f9a85da2" version = "v1.0.6" +[[projects]] + digest = "1:90cf76d709ce9b057e7d75bd245bf7c1242d21ba4f908fb22c7a2a96d1dcc0ca" + name = "github.com/spf13/afero" + packages = [ + ".", + "mem", + ] + pruneopts = "NUT" + revision = "f4711e4db9e9a1d3887343acb72b2bbfc2f686f5" + version = "v1.2.1" + [[projects]] digest = "1:343d44e06621142ab09ae0c76c1799104cdfddd3ffb445d78b1adf8dc3ffaf3d" name = "github.com/spf13/cobra" @@ -1196,6 +1207,7 @@ "github.com/google/go-containerregistry/pkg/v1/empty", "github.com/google/go-containerregistry/pkg/v1/mutate", "github.com/google/go-containerregistry/pkg/v1/partial", + "github.com/google/go-containerregistry/pkg/v1/random", "github.com/google/go-containerregistry/pkg/v1/remote", "github.com/google/go-containerregistry/pkg/v1/tarball", "github.com/google/go-github/github", @@ -1205,6 +1217,7 @@ "github.com/moby/buildkit/frontend/dockerfile/shell", "github.com/pkg/errors", "github.com/sirupsen/logrus", + "github.com/spf13/afero", "github.com/spf13/cobra", "github.com/spf13/pflag", "golang.org/x/net/context", diff --git a/pkg/executor/push.go b/pkg/executor/push.go index 0ee021f83..d6e89dabe 100644 --- a/pkg/executor/push.go +++ b/pkg/executor/push.go @@ -18,8 +18,11 @@ package executor import ( "crypto/tls" + "encoding/json" "fmt" "net/http" + "os" + "path/filepath" "time" "github.com/GoogleContainerTools/kaniko/pkg/cache" @@ -29,13 +32,14 @@ import ( "github.com/GoogleContainerTools/kaniko/pkg/timing" "github.com/GoogleContainerTools/kaniko/pkg/version" "github.com/google/go-containerregistry/pkg/name" - "github.com/google/go-containerregistry/pkg/v1" + v1 "github.com/google/go-containerregistry/pkg/v1" "github.com/google/go-containerregistry/pkg/v1/empty" "github.com/google/go-containerregistry/pkg/v1/mutate" "github.com/google/go-containerregistry/pkg/v1/remote" "github.com/google/go-containerregistry/pkg/v1/tarball" "github.com/pkg/errors" "github.com/sirupsen/logrus" + "github.com/spf13/afero" ) type withUserAgent struct { @@ -102,6 +106,39 @@ func DoPush(image v1.Image, opts *config.KanikoOptions) error { } } timing.DefaultRun.Stop(t) + return writeImageOutputs(image, destRefs) +} + +var fs = afero.NewOsFs() + +func writeImageOutputs(image v1.Image, destRefs []name.Tag) error { + dir := os.Getenv("BUILDER_OUTPUT") + if dir == "" { + return nil + } + f, err := fs.Create(filepath.Join(dir, "images")) + if err != nil { + return err + } + defer f.Close() + + d, err := image.Digest() + if err != nil { + return err + } + + type imageOutput struct { + Name string `json:"name"` + Digest string `json:"digest"` + } + for _, r := range destRefs { + if err := json.NewEncoder(f).Encode(imageOutput{ + Name: r.String(), + Digest: d.String(), + }); err != nil { + return err + } + } return nil } diff --git a/pkg/executor/push_test.go b/pkg/executor/push_test.go new file mode 100644 index 000000000..98aedb450 --- /dev/null +++ b/pkg/executor/push_test.go @@ -0,0 +1,81 @@ +package executor + +import ( + "fmt" + "os" + "path/filepath" + "testing" + + "github.com/google/go-containerregistry/pkg/name" + "github.com/google/go-containerregistry/pkg/v1/random" + "github.com/spf13/afero" +) + +func mustTag(t *testing.T, s string) name.Tag { + tag, err := name.NewTag(s, name.StrictValidation) + if err != nil { + t.Fatalf("NewTag: %v", err) + } + return tag +} + +func TestWriteImageOutputs(t *testing.T) { + img, err := random.Image(1024, 3) + if err != nil { + t.Fatalf("random.Image: %v", err) + } + d, err := img.Digest() + if err != nil { + t.Fatalf("Digest: %v", err) + } + + for _, c := range []struct { + desc, env string + tags []name.Tag + want string + }{{ + desc: "env unset, no output", + env: "", + }, { + desc: "env set, one tag", + env: "/foo", + tags: []name.Tag{mustTag(t, "gcr.io/foo/bar:latest")}, + want: fmt.Sprintf(`{"name":"gcr.io/foo/bar:latest","digest":%q} +`, d), + }, { + desc: "env set, two tags", + env: "/foo", + tags: []name.Tag{ + mustTag(t, "gcr.io/foo/bar:latest"), + mustTag(t, "gcr.io/baz/qux:latest"), + }, + want: fmt.Sprintf(`{"name":"gcr.io/foo/bar:latest","digest":%q} +{"name":"gcr.io/baz/qux:latest","digest":%q} +`, d, d), + }} { + t.Run(c.desc, func(t *testing.T) { + fs = afero.NewMemMapFs() + if c.want == "" { + fs = afero.NewReadOnlyFs(fs) // No files should be written. + } + + os.Setenv("BUILDER_OUTPUT", c.env) + if err := writeImageOutputs(img, c.tags); err != nil { + t.Fatalf("writeImageOutputs: %v", err) + } + + if c.want == "" { + return + } + + b, err := afero.ReadFile(fs, filepath.Join(c.env, "images")) + if err != nil { + t.Fatalf("ReadFile: %v", err) + } + + if got := string(b); got != c.want { + t.Fatalf(" got: %s\nwant: %s", got, c.want) + } + }) + } +} diff --git a/vendor/github.com/spf13/afero/LICENSE.txt b/vendor/github.com/spf13/afero/LICENSE.txt new file mode 100644 index 000000000..298f0e266 --- /dev/null +++ b/vendor/github.com/spf13/afero/LICENSE.txt @@ -0,0 +1,174 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. diff --git a/vendor/github.com/spf13/afero/afero.go b/vendor/github.com/spf13/afero/afero.go new file mode 100644 index 000000000..f5b5e127c --- /dev/null +++ b/vendor/github.com/spf13/afero/afero.go @@ -0,0 +1,108 @@ +// Copyright © 2014 Steve Francia . +// Copyright 2013 tsuru authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package afero provides types and methods for interacting with the filesystem, +// as an abstraction layer. + +// Afero also provides a few implementations that are mostly interoperable. One that +// uses the operating system filesystem, one that uses memory to store files +// (cross platform) and an interface that should be implemented if you want to +// provide your own filesystem. + +package afero + +import ( + "errors" + "io" + "os" + "time" +) + +type Afero struct { + Fs +} + +// File represents a file in the filesystem. +type File interface { + io.Closer + io.Reader + io.ReaderAt + io.Seeker + io.Writer + io.WriterAt + + Name() string + Readdir(count int) ([]os.FileInfo, error) + Readdirnames(n int) ([]string, error) + Stat() (os.FileInfo, error) + Sync() error + Truncate(size int64) error + WriteString(s string) (ret int, err error) +} + +// Fs is the filesystem interface. +// +// Any simulated or real filesystem should implement this interface. +type Fs interface { + // Create creates a file in the filesystem, returning the file and an + // error, if any happens. + Create(name string) (File, error) + + // Mkdir creates a directory in the filesystem, return an error if any + // happens. + Mkdir(name string, perm os.FileMode) error + + // MkdirAll creates a directory path and all parents that does not exist + // yet. + MkdirAll(path string, perm os.FileMode) error + + // Open opens a file, returning it or an error, if any happens. + Open(name string) (File, error) + + // OpenFile opens a file using the given flags and the given mode. + OpenFile(name string, flag int, perm os.FileMode) (File, error) + + // Remove removes a file identified by name, returning an error, if any + // happens. + Remove(name string) error + + // RemoveAll removes a directory path and any children it contains. It + // does not fail if the path does not exist (return nil). + RemoveAll(path string) error + + // Rename renames a file. + Rename(oldname, newname string) error + + // Stat returns a FileInfo describing the named file, or an error, if any + // happens. + Stat(name string) (os.FileInfo, error) + + // The name of this FileSystem + Name() string + + //Chmod changes the mode of the named file to mode. + Chmod(name string, mode os.FileMode) error + + //Chtimes changes the access and modification times of the named file + Chtimes(name string, atime time.Time, mtime time.Time) error +} + +var ( + ErrFileClosed = errors.New("File is closed") + ErrOutOfRange = errors.New("Out of range") + ErrTooLarge = errors.New("Too large") + ErrFileNotFound = os.ErrNotExist + ErrFileExists = os.ErrExist + ErrDestinationExists = os.ErrExist +) diff --git a/vendor/github.com/spf13/afero/basepath.go b/vendor/github.com/spf13/afero/basepath.go new file mode 100644 index 000000000..616ff8ff7 --- /dev/null +++ b/vendor/github.com/spf13/afero/basepath.go @@ -0,0 +1,180 @@ +package afero + +import ( + "os" + "path/filepath" + "runtime" + "strings" + "time" +) + +var _ Lstater = (*BasePathFs)(nil) + +// The BasePathFs restricts all operations to a given path within an Fs. +// The given file name to the operations on this Fs will be prepended with +// the base path before calling the base Fs. +// Any file name (after filepath.Clean()) outside this base path will be +// treated as non existing file. +// +// Note that it does not clean the error messages on return, so you may +// reveal the real path on errors. +type BasePathFs struct { + source Fs + path string +} + +type BasePathFile struct { + File + path string +} + +func (f *BasePathFile) Name() string { + sourcename := f.File.Name() + return strings.TrimPrefix(sourcename, filepath.Clean(f.path)) +} + +func NewBasePathFs(source Fs, path string) Fs { + return &BasePathFs{source: source, path: path} +} + +// on a file outside the base path it returns the given file name and an error, +// else the given file with the base path prepended +func (b *BasePathFs) RealPath(name string) (path string, err error) { + if err := validateBasePathName(name); err != nil { + return name, err + } + + bpath := filepath.Clean(b.path) + path = filepath.Clean(filepath.Join(bpath, name)) + if !strings.HasPrefix(path, bpath) { + return name, os.ErrNotExist + } + + return path, nil +} + +func validateBasePathName(name string) error { + if runtime.GOOS != "windows" { + // Not much to do here; + // the virtual file paths all look absolute on *nix. + return nil + } + + // On Windows a common mistake would be to provide an absolute OS path + // We could strip out the base part, but that would not be very portable. + if filepath.IsAbs(name) { + return os.ErrNotExist + } + + return nil +} + +func (b *BasePathFs) Chtimes(name string, atime, mtime time.Time) (err error) { + if name, err = b.RealPath(name); err != nil { + return &os.PathError{Op: "chtimes", Path: name, Err: err} + } + return b.source.Chtimes(name, atime, mtime) +} + +func (b *BasePathFs) Chmod(name string, mode os.FileMode) (err error) { + if name, err = b.RealPath(name); err != nil { + return &os.PathError{Op: "chmod", Path: name, Err: err} + } + return b.source.Chmod(name, mode) +} + +func (b *BasePathFs) Name() string { + return "BasePathFs" +} + +func (b *BasePathFs) Stat(name string) (fi os.FileInfo, err error) { + if name, err = b.RealPath(name); err != nil { + return nil, &os.PathError{Op: "stat", Path: name, Err: err} + } + return b.source.Stat(name) +} + +func (b *BasePathFs) Rename(oldname, newname string) (err error) { + if oldname, err = b.RealPath(oldname); err != nil { + return &os.PathError{Op: "rename", Path: oldname, Err: err} + } + if newname, err = b.RealPath(newname); err != nil { + return &os.PathError{Op: "rename", Path: newname, Err: err} + } + return b.source.Rename(oldname, newname) +} + +func (b *BasePathFs) RemoveAll(name string) (err error) { + if name, err = b.RealPath(name); err != nil { + return &os.PathError{Op: "remove_all", Path: name, Err: err} + } + return b.source.RemoveAll(name) +} + +func (b *BasePathFs) Remove(name string) (err error) { + if name, err = b.RealPath(name); err != nil { + return &os.PathError{Op: "remove", Path: name, Err: err} + } + return b.source.Remove(name) +} + +func (b *BasePathFs) OpenFile(name string, flag int, mode os.FileMode) (f File, err error) { + if name, err = b.RealPath(name); err != nil { + return nil, &os.PathError{Op: "openfile", Path: name, Err: err} + } + sourcef, err := b.source.OpenFile(name, flag, mode) + if err != nil { + return nil, err + } + return &BasePathFile{sourcef, b.path}, nil +} + +func (b *BasePathFs) Open(name string) (f File, err error) { + if name, err = b.RealPath(name); err != nil { + return nil, &os.PathError{Op: "open", Path: name, Err: err} + } + sourcef, err := b.source.Open(name) + if err != nil { + return nil, err + } + return &BasePathFile{File: sourcef, path: b.path}, nil +} + +func (b *BasePathFs) Mkdir(name string, mode os.FileMode) (err error) { + if name, err = b.RealPath(name); err != nil { + return &os.PathError{Op: "mkdir", Path: name, Err: err} + } + return b.source.Mkdir(name, mode) +} + +func (b *BasePathFs) MkdirAll(name string, mode os.FileMode) (err error) { + if name, err = b.RealPath(name); err != nil { + return &os.PathError{Op: "mkdir", Path: name, Err: err} + } + return b.source.MkdirAll(name, mode) +} + +func (b *BasePathFs) Create(name string) (f File, err error) { + if name, err = b.RealPath(name); err != nil { + return nil, &os.PathError{Op: "create", Path: name, Err: err} + } + sourcef, err := b.source.Create(name) + if err != nil { + return nil, err + } + return &BasePathFile{File: sourcef, path: b.path}, nil +} + +func (b *BasePathFs) LstatIfPossible(name string) (os.FileInfo, bool, error) { + name, err := b.RealPath(name) + if err != nil { + return nil, false, &os.PathError{Op: "lstat", Path: name, Err: err} + } + if lstater, ok := b.source.(Lstater); ok { + return lstater.LstatIfPossible(name) + } + fi, err := b.source.Stat(name) + return fi, false, err +} + +// vim: ts=4 sw=4 noexpandtab nolist syn=go diff --git a/vendor/github.com/spf13/afero/cacheOnReadFs.go b/vendor/github.com/spf13/afero/cacheOnReadFs.go new file mode 100644 index 000000000..29a26c67d --- /dev/null +++ b/vendor/github.com/spf13/afero/cacheOnReadFs.go @@ -0,0 +1,290 @@ +package afero + +import ( + "os" + "syscall" + "time" +) + +// If the cache duration is 0, cache time will be unlimited, i.e. once +// a file is in the layer, the base will never be read again for this file. +// +// For cache times greater than 0, the modification time of a file is +// checked. Note that a lot of file system implementations only allow a +// resolution of a second for timestamps... or as the godoc for os.Chtimes() +// states: "The underlying filesystem may truncate or round the values to a +// less precise time unit." +// +// This caching union will forward all write calls also to the base file +// system first. To prevent writing to the base Fs, wrap it in a read-only +// filter - Note: this will also make the overlay read-only, for writing files +// in the overlay, use the overlay Fs directly, not via the union Fs. +type CacheOnReadFs struct { + base Fs + layer Fs + cacheTime time.Duration +} + +func NewCacheOnReadFs(base Fs, layer Fs, cacheTime time.Duration) Fs { + return &CacheOnReadFs{base: base, layer: layer, cacheTime: cacheTime} +} + +type cacheState int + +const ( + // not present in the overlay, unknown if it exists in the base: + cacheMiss cacheState = iota + // present in the overlay and in base, base file is newer: + cacheStale + // present in the overlay - with cache time == 0 it may exist in the base, + // with cacheTime > 0 it exists in the base and is same age or newer in the + // overlay + cacheHit + // happens if someone writes directly to the overlay without + // going through this union + cacheLocal +) + +func (u *CacheOnReadFs) cacheStatus(name string) (state cacheState, fi os.FileInfo, err error) { + var lfi, bfi os.FileInfo + lfi, err = u.layer.Stat(name) + if err == nil { + if u.cacheTime == 0 { + return cacheHit, lfi, nil + } + if lfi.ModTime().Add(u.cacheTime).Before(time.Now()) { + bfi, err = u.base.Stat(name) + if err != nil { + return cacheLocal, lfi, nil + } + if bfi.ModTime().After(lfi.ModTime()) { + return cacheStale, bfi, nil + } + } + return cacheHit, lfi, nil + } + + if err == syscall.ENOENT || os.IsNotExist(err) { + return cacheMiss, nil, nil + } + + return cacheMiss, nil, err +} + +func (u *CacheOnReadFs) copyToLayer(name string) error { + return copyToLayer(u.base, u.layer, name) +} + +func (u *CacheOnReadFs) Chtimes(name string, atime, mtime time.Time) error { + st, _, err := u.cacheStatus(name) + if err != nil { + return err + } + switch st { + case cacheLocal: + case cacheHit: + err = u.base.Chtimes(name, atime, mtime) + case cacheStale, cacheMiss: + if err := u.copyToLayer(name); err != nil { + return err + } + err = u.base.Chtimes(name, atime, mtime) + } + if err != nil { + return err + } + return u.layer.Chtimes(name, atime, mtime) +} + +func (u *CacheOnReadFs) Chmod(name string, mode os.FileMode) error { + st, _, err := u.cacheStatus(name) + if err != nil { + return err + } + switch st { + case cacheLocal: + case cacheHit: + err = u.base.Chmod(name, mode) + case cacheStale, cacheMiss: + if err := u.copyToLayer(name); err != nil { + return err + } + err = u.base.Chmod(name, mode) + } + if err != nil { + return err + } + return u.layer.Chmod(name, mode) +} + +func (u *CacheOnReadFs) Stat(name string) (os.FileInfo, error) { + st, fi, err := u.cacheStatus(name) + if err != nil { + return nil, err + } + switch st { + case cacheMiss: + return u.base.Stat(name) + default: // cacheStale has base, cacheHit and cacheLocal the layer os.FileInfo + return fi, nil + } +} + +func (u *CacheOnReadFs) Rename(oldname, newname string) error { + st, _, err := u.cacheStatus(oldname) + if err != nil { + return err + } + switch st { + case cacheLocal: + case cacheHit: + err = u.base.Rename(oldname, newname) + case cacheStale, cacheMiss: + if err := u.copyToLayer(oldname); err != nil { + return err + } + err = u.base.Rename(oldname, newname) + } + if err != nil { + return err + } + return u.layer.Rename(oldname, newname) +} + +func (u *CacheOnReadFs) Remove(name string) error { + st, _, err := u.cacheStatus(name) + if err != nil { + return err + } + switch st { + case cacheLocal: + case cacheHit, cacheStale, cacheMiss: + err = u.base.Remove(name) + } + if err != nil { + return err + } + return u.layer.Remove(name) +} + +func (u *CacheOnReadFs) RemoveAll(name string) error { + st, _, err := u.cacheStatus(name) + if err != nil { + return err + } + switch st { + case cacheLocal: + case cacheHit, cacheStale, cacheMiss: + err = u.base.RemoveAll(name) + } + if err != nil { + return err + } + return u.layer.RemoveAll(name) +} + +func (u *CacheOnReadFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) { + st, _, err := u.cacheStatus(name) + if err != nil { + return nil, err + } + switch st { + case cacheLocal, cacheHit: + default: + if err := u.copyToLayer(name); err != nil { + return nil, err + } + } + if flag&(os.O_WRONLY|syscall.O_RDWR|os.O_APPEND|os.O_CREATE|os.O_TRUNC) != 0 { + bfi, err := u.base.OpenFile(name, flag, perm) + if err != nil { + return nil, err + } + lfi, err := u.layer.OpenFile(name, flag, perm) + if err != nil { + bfi.Close() // oops, what if O_TRUNC was set and file opening in the layer failed...? + return nil, err + } + return &UnionFile{Base: bfi, Layer: lfi}, nil + } + return u.layer.OpenFile(name, flag, perm) +} + +func (u *CacheOnReadFs) Open(name string) (File, error) { + st, fi, err := u.cacheStatus(name) + if err != nil { + return nil, err + } + + switch st { + case cacheLocal: + return u.layer.Open(name) + + case cacheMiss: + bfi, err := u.base.Stat(name) + if err != nil { + return nil, err + } + if bfi.IsDir() { + return u.base.Open(name) + } + if err := u.copyToLayer(name); err != nil { + return nil, err + } + return u.layer.Open(name) + + case cacheStale: + if !fi.IsDir() { + if err := u.copyToLayer(name); err != nil { + return nil, err + } + return u.layer.Open(name) + } + case cacheHit: + if !fi.IsDir() { + return u.layer.Open(name) + } + } + // the dirs from cacheHit, cacheStale fall down here: + bfile, _ := u.base.Open(name) + lfile, err := u.layer.Open(name) + if err != nil && bfile == nil { + return nil, err + } + return &UnionFile{Base: bfile, Layer: lfile}, nil +} + +func (u *CacheOnReadFs) Mkdir(name string, perm os.FileMode) error { + err := u.base.Mkdir(name, perm) + if err != nil { + return err + } + return u.layer.MkdirAll(name, perm) // yes, MkdirAll... we cannot assume it exists in the cache +} + +func (u *CacheOnReadFs) Name() string { + return "CacheOnReadFs" +} + +func (u *CacheOnReadFs) MkdirAll(name string, perm os.FileMode) error { + err := u.base.MkdirAll(name, perm) + if err != nil { + return err + } + return u.layer.MkdirAll(name, perm) +} + +func (u *CacheOnReadFs) Create(name string) (File, error) { + bfh, err := u.base.Create(name) + if err != nil { + return nil, err + } + lfh, err := u.layer.Create(name) + if err != nil { + // oops, see comment about OS_TRUNC above, should we remove? then we have to + // remember if the file did not exist before + bfh.Close() + return nil, err + } + return &UnionFile{Base: bfh, Layer: lfh}, nil +} diff --git a/vendor/github.com/spf13/afero/const_bsds.go b/vendor/github.com/spf13/afero/const_bsds.go new file mode 100644 index 000000000..5728243d9 --- /dev/null +++ b/vendor/github.com/spf13/afero/const_bsds.go @@ -0,0 +1,22 @@ +// Copyright © 2016 Steve Francia . +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build darwin openbsd freebsd netbsd dragonfly + +package afero + +import ( + "syscall" +) + +const BADFD = syscall.EBADF diff --git a/vendor/github.com/spf13/afero/const_win_unix.go b/vendor/github.com/spf13/afero/const_win_unix.go new file mode 100644 index 000000000..968fc2783 --- /dev/null +++ b/vendor/github.com/spf13/afero/const_win_unix.go @@ -0,0 +1,25 @@ +// Copyright © 2016 Steve Francia . +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +build !darwin +// +build !openbsd +// +build !freebsd +// +build !dragonfly +// +build !netbsd + +package afero + +import ( + "syscall" +) + +const BADFD = syscall.EBADFD diff --git a/vendor/github.com/spf13/afero/copyOnWriteFs.go b/vendor/github.com/spf13/afero/copyOnWriteFs.go new file mode 100644 index 000000000..e8108a851 --- /dev/null +++ b/vendor/github.com/spf13/afero/copyOnWriteFs.go @@ -0,0 +1,293 @@ +package afero + +import ( + "fmt" + "os" + "path/filepath" + "syscall" + "time" +) + +var _ Lstater = (*CopyOnWriteFs)(nil) + +// The CopyOnWriteFs is a union filesystem: a read only base file system with +// a possibly writeable layer on top. Changes to the file system will only +// be made in the overlay: Changing an existing file in the base layer which +// is not present in the overlay will copy the file to the overlay ("changing" +// includes also calls to e.g. Chtimes() and Chmod()). +// +// Reading directories is currently only supported via Open(), not OpenFile(). +type CopyOnWriteFs struct { + base Fs + layer Fs +} + +func NewCopyOnWriteFs(base Fs, layer Fs) Fs { + return &CopyOnWriteFs{base: base, layer: layer} +} + +// Returns true if the file is not in the overlay +func (u *CopyOnWriteFs) isBaseFile(name string) (bool, error) { + if _, err := u.layer.Stat(name); err == nil { + return false, nil + } + _, err := u.base.Stat(name) + if err != nil { + if oerr, ok := err.(*os.PathError); ok { + if oerr.Err == os.ErrNotExist || oerr.Err == syscall.ENOENT || oerr.Err == syscall.ENOTDIR { + return false, nil + } + } + if err == syscall.ENOENT { + return false, nil + } + } + return true, err +} + +func (u *CopyOnWriteFs) copyToLayer(name string) error { + return copyToLayer(u.base, u.layer, name) +} + +func (u *CopyOnWriteFs) Chtimes(name string, atime, mtime time.Time) error { + b, err := u.isBaseFile(name) + if err != nil { + return err + } + if b { + if err := u.copyToLayer(name); err != nil { + return err + } + } + return u.layer.Chtimes(name, atime, mtime) +} + +func (u *CopyOnWriteFs) Chmod(name string, mode os.FileMode) error { + b, err := u.isBaseFile(name) + if err != nil { + return err + } + if b { + if err := u.copyToLayer(name); err != nil { + return err + } + } + return u.layer.Chmod(name, mode) +} + +func (u *CopyOnWriteFs) Stat(name string) (os.FileInfo, error) { + fi, err := u.layer.Stat(name) + if err != nil { + isNotExist := u.isNotExist(err) + if isNotExist { + return u.base.Stat(name) + } + return nil, err + } + return fi, nil +} + +func (u *CopyOnWriteFs) LstatIfPossible(name string) (os.FileInfo, bool, error) { + llayer, ok1 := u.layer.(Lstater) + lbase, ok2 := u.base.(Lstater) + + if ok1 { + fi, b, err := llayer.LstatIfPossible(name) + if err == nil { + return fi, b, nil + } + + if !u.isNotExist(err) { + return nil, b, err + } + } + + if ok2 { + fi, b, err := lbase.LstatIfPossible(name) + if err == nil { + return fi, b, nil + } + if !u.isNotExist(err) { + return nil, b, err + } + } + + fi, err := u.Stat(name) + + return fi, false, err +} + +func (u *CopyOnWriteFs) isNotExist(err error) bool { + if e, ok := err.(*os.PathError); ok { + err = e.Err + } + if err == os.ErrNotExist || err == syscall.ENOENT || err == syscall.ENOTDIR { + return true + } + return false +} + +// Renaming files present only in the base layer is not permitted +func (u *CopyOnWriteFs) Rename(oldname, newname string) error { + b, err := u.isBaseFile(oldname) + if err != nil { + return err + } + if b { + return syscall.EPERM + } + return u.layer.Rename(oldname, newname) +} + +// Removing files present only in the base layer is not permitted. If +// a file is present in the base layer and the overlay, only the overlay +// will be removed. +func (u *CopyOnWriteFs) Remove(name string) error { + err := u.layer.Remove(name) + switch err { + case syscall.ENOENT: + _, err = u.base.Stat(name) + if err == nil { + return syscall.EPERM + } + return syscall.ENOENT + default: + return err + } +} + +func (u *CopyOnWriteFs) RemoveAll(name string) error { + err := u.layer.RemoveAll(name) + switch err { + case syscall.ENOENT: + _, err = u.base.Stat(name) + if err == nil { + return syscall.EPERM + } + return syscall.ENOENT + default: + return err + } +} + +func (u *CopyOnWriteFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) { + b, err := u.isBaseFile(name) + if err != nil { + return nil, err + } + + if flag&(os.O_WRONLY|os.O_RDWR|os.O_APPEND|os.O_CREATE|os.O_TRUNC) != 0 { + if b { + if err = u.copyToLayer(name); err != nil { + return nil, err + } + return u.layer.OpenFile(name, flag, perm) + } + + dir := filepath.Dir(name) + isaDir, err := IsDir(u.base, dir) + if err != nil && !os.IsNotExist(err) { + return nil, err + } + if isaDir { + if err = u.layer.MkdirAll(dir, 0777); err != nil { + return nil, err + } + return u.layer.OpenFile(name, flag, perm) + } + + isaDir, err = IsDir(u.layer, dir) + if err != nil { + return nil, err + } + if isaDir { + return u.layer.OpenFile(name, flag, perm) + } + + return nil, &os.PathError{Op: "open", Path: name, Err: syscall.ENOTDIR} // ...or os.ErrNotExist? + } + if b { + return u.base.OpenFile(name, flag, perm) + } + return u.layer.OpenFile(name, flag, perm) +} + +// This function handles the 9 different possibilities caused +// by the union which are the intersection of the following... +// layer: doesn't exist, exists as a file, and exists as a directory +// base: doesn't exist, exists as a file, and exists as a directory +func (u *CopyOnWriteFs) Open(name string) (File, error) { + // Since the overlay overrides the base we check that first + b, err := u.isBaseFile(name) + if err != nil { + return nil, err + } + + // If overlay doesn't exist, return the base (base state irrelevant) + if b { + return u.base.Open(name) + } + + // If overlay is a file, return it (base state irrelevant) + dir, err := IsDir(u.layer, name) + if err != nil { + return nil, err + } + if !dir { + return u.layer.Open(name) + } + + // Overlay is a directory, base state now matters. + // Base state has 3 states to check but 2 outcomes: + // A. It's a file or non-readable in the base (return just the overlay) + // B. It's an accessible directory in the base (return a UnionFile) + + // If base is file or nonreadable, return overlay + dir, err = IsDir(u.base, name) + if !dir || err != nil { + return u.layer.Open(name) + } + + // Both base & layer are directories + // Return union file (if opens are without error) + bfile, bErr := u.base.Open(name) + lfile, lErr := u.layer.Open(name) + + // If either have errors at this point something is very wrong. Return nil and the errors + if bErr != nil || lErr != nil { + return nil, fmt.Errorf("BaseErr: %v\nOverlayErr: %v", bErr, lErr) + } + + return &UnionFile{Base: bfile, Layer: lfile}, nil +} + +func (u *CopyOnWriteFs) Mkdir(name string, perm os.FileMode) error { + dir, err := IsDir(u.base, name) + if err != nil { + return u.layer.MkdirAll(name, perm) + } + if dir { + return ErrFileExists + } + return u.layer.MkdirAll(name, perm) +} + +func (u *CopyOnWriteFs) Name() string { + return "CopyOnWriteFs" +} + +func (u *CopyOnWriteFs) MkdirAll(name string, perm os.FileMode) error { + dir, err := IsDir(u.base, name) + if err != nil { + return u.layer.MkdirAll(name, perm) + } + if dir { + // This is in line with how os.MkdirAll behaves. + return nil + } + return u.layer.MkdirAll(name, perm) +} + +func (u *CopyOnWriteFs) Create(name string) (File, error) { + return u.OpenFile(name, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0666) +} diff --git a/vendor/github.com/spf13/afero/httpFs.go b/vendor/github.com/spf13/afero/httpFs.go new file mode 100644 index 000000000..c42193688 --- /dev/null +++ b/vendor/github.com/spf13/afero/httpFs.go @@ -0,0 +1,110 @@ +// Copyright © 2014 Steve Francia . +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package afero + +import ( + "errors" + "net/http" + "os" + "path" + "path/filepath" + "strings" + "time" +) + +type httpDir struct { + basePath string + fs HttpFs +} + +func (d httpDir) Open(name string) (http.File, error) { + if filepath.Separator != '/' && strings.IndexRune(name, filepath.Separator) >= 0 || + strings.Contains(name, "\x00") { + return nil, errors.New("http: invalid character in file path") + } + dir := string(d.basePath) + if dir == "" { + dir = "." + } + + f, err := d.fs.Open(filepath.Join(dir, filepath.FromSlash(path.Clean("/"+name)))) + if err != nil { + return nil, err + } + return f, nil +} + +type HttpFs struct { + source Fs +} + +func NewHttpFs(source Fs) *HttpFs { + return &HttpFs{source: source} +} + +func (h HttpFs) Dir(s string) *httpDir { + return &httpDir{basePath: s, fs: h} +} + +func (h HttpFs) Name() string { return "h HttpFs" } + +func (h HttpFs) Create(name string) (File, error) { + return h.source.Create(name) +} + +func (h HttpFs) Chmod(name string, mode os.FileMode) error { + return h.source.Chmod(name, mode) +} + +func (h HttpFs) Chtimes(name string, atime time.Time, mtime time.Time) error { + return h.source.Chtimes(name, atime, mtime) +} + +func (h HttpFs) Mkdir(name string, perm os.FileMode) error { + return h.source.Mkdir(name, perm) +} + +func (h HttpFs) MkdirAll(path string, perm os.FileMode) error { + return h.source.MkdirAll(path, perm) +} + +func (h HttpFs) Open(name string) (http.File, error) { + f, err := h.source.Open(name) + if err == nil { + if httpfile, ok := f.(http.File); ok { + return httpfile, nil + } + } + return nil, err +} + +func (h HttpFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) { + return h.source.OpenFile(name, flag, perm) +} + +func (h HttpFs) Remove(name string) error { + return h.source.Remove(name) +} + +func (h HttpFs) RemoveAll(path string) error { + return h.source.RemoveAll(path) +} + +func (h HttpFs) Rename(oldname, newname string) error { + return h.source.Rename(oldname, newname) +} + +func (h HttpFs) Stat(name string) (os.FileInfo, error) { + return h.source.Stat(name) +} diff --git a/vendor/github.com/spf13/afero/ioutil.go b/vendor/github.com/spf13/afero/ioutil.go new file mode 100644 index 000000000..5c3a3d8ff --- /dev/null +++ b/vendor/github.com/spf13/afero/ioutil.go @@ -0,0 +1,230 @@ +// Copyright ©2015 The Go Authors +// Copyright ©2015 Steve Francia +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package afero + +import ( + "bytes" + "io" + "os" + "path/filepath" + "sort" + "strconv" + "sync" + "time" +) + +// byName implements sort.Interface. +type byName []os.FileInfo + +func (f byName) Len() int { return len(f) } +func (f byName) Less(i, j int) bool { return f[i].Name() < f[j].Name() } +func (f byName) Swap(i, j int) { f[i], f[j] = f[j], f[i] } + +// ReadDir reads the directory named by dirname and returns +// a list of sorted directory entries. +func (a Afero) ReadDir(dirname string) ([]os.FileInfo, error) { + return ReadDir(a.Fs, dirname) +} + +func ReadDir(fs Fs, dirname string) ([]os.FileInfo, error) { + f, err := fs.Open(dirname) + if err != nil { + return nil, err + } + list, err := f.Readdir(-1) + f.Close() + if err != nil { + return nil, err + } + sort.Sort(byName(list)) + return list, nil +} + +// ReadFile reads the file named by filename and returns the contents. +// A successful call returns err == nil, not err == EOF. Because ReadFile +// reads the whole file, it does not treat an EOF from Read as an error +// to be reported. +func (a Afero) ReadFile(filename string) ([]byte, error) { + return ReadFile(a.Fs, filename) +} + +func ReadFile(fs Fs, filename string) ([]byte, error) { + f, err := fs.Open(filename) + if err != nil { + return nil, err + } + defer f.Close() + // It's a good but not certain bet that FileInfo will tell us exactly how much to + // read, so let's try it but be prepared for the answer to be wrong. + var n int64 + + if fi, err := f.Stat(); err == nil { + // Don't preallocate a huge buffer, just in case. + if size := fi.Size(); size < 1e9 { + n = size + } + } + // As initial capacity for readAll, use n + a little extra in case Size is zero, + // and to avoid another allocation after Read has filled the buffer. The readAll + // call will read into its allocated internal buffer cheaply. If the size was + // wrong, we'll either waste some space off the end or reallocate as needed, but + // in the overwhelmingly common case we'll get it just right. + return readAll(f, n+bytes.MinRead) +} + +// readAll reads from r until an error or EOF and returns the data it read +// from the internal buffer allocated with a specified capacity. +func readAll(r io.Reader, capacity int64) (b []byte, err error) { + buf := bytes.NewBuffer(make([]byte, 0, capacity)) + // If the buffer overflows, we will get bytes.ErrTooLarge. + // Return that as an error. Any other panic remains. + defer func() { + e := recover() + if e == nil { + return + } + if panicErr, ok := e.(error); ok && panicErr == bytes.ErrTooLarge { + err = panicErr + } else { + panic(e) + } + }() + _, err = buf.ReadFrom(r) + return buf.Bytes(), err +} + +// ReadAll reads from r until an error or EOF and returns the data it read. +// A successful call returns err == nil, not err == EOF. Because ReadAll is +// defined to read from src until EOF, it does not treat an EOF from Read +// as an error to be reported. +func ReadAll(r io.Reader) ([]byte, error) { + return readAll(r, bytes.MinRead) +} + +// WriteFile writes data to a file named by filename. +// If the file does not exist, WriteFile creates it with permissions perm; +// otherwise WriteFile truncates it before writing. +func (a Afero) WriteFile(filename string, data []byte, perm os.FileMode) error { + return WriteFile(a.Fs, filename, data, perm) +} + +func WriteFile(fs Fs, filename string, data []byte, perm os.FileMode) error { + f, err := fs.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm) + if err != nil { + return err + } + n, err := f.Write(data) + if err == nil && n < len(data) { + err = io.ErrShortWrite + } + if err1 := f.Close(); err == nil { + err = err1 + } + return err +} + +// Random number state. +// We generate random temporary file names so that there's a good +// chance the file doesn't exist yet - keeps the number of tries in +// TempFile to a minimum. +var rand uint32 +var randmu sync.Mutex + +func reseed() uint32 { + return uint32(time.Now().UnixNano() + int64(os.Getpid())) +} + +func nextSuffix() string { + randmu.Lock() + r := rand + if r == 0 { + r = reseed() + } + r = r*1664525 + 1013904223 // constants from Numerical Recipes + rand = r + randmu.Unlock() + return strconv.Itoa(int(1e9 + r%1e9))[1:] +} + +// TempFile creates a new temporary file in the directory dir +// with a name beginning with prefix, opens the file for reading +// and writing, and returns the resulting *File. +// If dir is the empty string, TempFile uses the default directory +// for temporary files (see os.TempDir). +// Multiple programs calling TempFile simultaneously +// will not choose the same file. The caller can use f.Name() +// to find the pathname of the file. It is the caller's responsibility +// to remove the file when no longer needed. +func (a Afero) TempFile(dir, prefix string) (f File, err error) { + return TempFile(a.Fs, dir, prefix) +} + +func TempFile(fs Fs, dir, prefix string) (f File, err error) { + if dir == "" { + dir = os.TempDir() + } + + nconflict := 0 + for i := 0; i < 10000; i++ { + name := filepath.Join(dir, prefix+nextSuffix()) + f, err = fs.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600) + if os.IsExist(err) { + if nconflict++; nconflict > 10 { + randmu.Lock() + rand = reseed() + randmu.Unlock() + } + continue + } + break + } + return +} + +// TempDir creates a new temporary directory in the directory dir +// with a name beginning with prefix and returns the path of the +// new directory. If dir is the empty string, TempDir uses the +// default directory for temporary files (see os.TempDir). +// Multiple programs calling TempDir simultaneously +// will not choose the same directory. It is the caller's responsibility +// to remove the directory when no longer needed. +func (a Afero) TempDir(dir, prefix string) (name string, err error) { + return TempDir(a.Fs, dir, prefix) +} +func TempDir(fs Fs, dir, prefix string) (name string, err error) { + if dir == "" { + dir = os.TempDir() + } + + nconflict := 0 + for i := 0; i < 10000; i++ { + try := filepath.Join(dir, prefix+nextSuffix()) + err = fs.Mkdir(try, 0700) + if os.IsExist(err) { + if nconflict++; nconflict > 10 { + randmu.Lock() + rand = reseed() + randmu.Unlock() + } + continue + } + if err == nil { + name = try + } + break + } + return +} diff --git a/vendor/github.com/spf13/afero/lstater.go b/vendor/github.com/spf13/afero/lstater.go new file mode 100644 index 000000000..89c1bfc0a --- /dev/null +++ b/vendor/github.com/spf13/afero/lstater.go @@ -0,0 +1,27 @@ +// Copyright © 2018 Steve Francia . +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package afero + +import ( + "os" +) + +// Lstater is an optional interface in Afero. It is only implemented by the +// filesystems saying so. +// It will call Lstat if the filesystem iself is, or it delegates to, the os filesystem. +// Else it will call Stat. +// In addtion to the FileInfo, it will return a boolean telling whether Lstat was called or not. +type Lstater interface { + LstatIfPossible(name string) (os.FileInfo, bool, error) +} diff --git a/vendor/github.com/spf13/afero/match.go b/vendor/github.com/spf13/afero/match.go new file mode 100644 index 000000000..c18a87fb7 --- /dev/null +++ b/vendor/github.com/spf13/afero/match.go @@ -0,0 +1,110 @@ +// Copyright © 2014 Steve Francia . +// Copyright 2009 The Go Authors. All rights reserved. + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package afero + +import ( + "path/filepath" + "sort" + "strings" +) + +// Glob returns the names of all files matching pattern or nil +// if there is no matching file. The syntax of patterns is the same +// as in Match. The pattern may describe hierarchical names such as +// /usr/*/bin/ed (assuming the Separator is '/'). +// +// Glob ignores file system errors such as I/O errors reading directories. +// The only possible returned error is ErrBadPattern, when pattern +// is malformed. +// +// This was adapted from (http://golang.org/pkg/path/filepath) and uses several +// built-ins from that package. +func Glob(fs Fs, pattern string) (matches []string, err error) { + if !hasMeta(pattern) { + // Lstat not supported by a ll filesystems. + if _, err = lstatIfPossible(fs, pattern); err != nil { + return nil, nil + } + return []string{pattern}, nil + } + + dir, file := filepath.Split(pattern) + switch dir { + case "": + dir = "." + case string(filepath.Separator): + // nothing + default: + dir = dir[0 : len(dir)-1] // chop off trailing separator + } + + if !hasMeta(dir) { + return glob(fs, dir, file, nil) + } + + var m []string + m, err = Glob(fs, dir) + if err != nil { + return + } + for _, d := range m { + matches, err = glob(fs, d, file, matches) + if err != nil { + return + } + } + return +} + +// glob searches for files matching pattern in the directory dir +// and appends them to matches. If the directory cannot be +// opened, it returns the existing matches. New matches are +// added in lexicographical order. +func glob(fs Fs, dir, pattern string, matches []string) (m []string, e error) { + m = matches + fi, err := fs.Stat(dir) + if err != nil { + return + } + if !fi.IsDir() { + return + } + d, err := fs.Open(dir) + if err != nil { + return + } + defer d.Close() + + names, _ := d.Readdirnames(-1) + sort.Strings(names) + + for _, n := range names { + matched, err := filepath.Match(pattern, n) + if err != nil { + return m, err + } + if matched { + m = append(m, filepath.Join(dir, n)) + } + } + return +} + +// hasMeta reports whether path contains any of the magic characters +// recognized by Match. +func hasMeta(path string) bool { + // TODO(niemeyer): Should other magic characters be added here? + return strings.IndexAny(path, "*?[") >= 0 +} diff --git a/vendor/github.com/spf13/afero/mem/dir.go b/vendor/github.com/spf13/afero/mem/dir.go new file mode 100644 index 000000000..e104013f4 --- /dev/null +++ b/vendor/github.com/spf13/afero/mem/dir.go @@ -0,0 +1,37 @@ +// Copyright © 2014 Steve Francia . +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package mem + +type Dir interface { + Len() int + Names() []string + Files() []*FileData + Add(*FileData) + Remove(*FileData) +} + +func RemoveFromMemDir(dir *FileData, f *FileData) { + dir.memDir.Remove(f) +} + +func AddToMemDir(dir *FileData, f *FileData) { + dir.memDir.Add(f) +} + +func InitializeDir(d *FileData) { + if d.memDir == nil { + d.dir = true + d.memDir = &DirMap{} + } +} diff --git a/vendor/github.com/spf13/afero/mem/dirmap.go b/vendor/github.com/spf13/afero/mem/dirmap.go new file mode 100644 index 000000000..03a57ee5b --- /dev/null +++ b/vendor/github.com/spf13/afero/mem/dirmap.go @@ -0,0 +1,43 @@ +// Copyright © 2015 Steve Francia . +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package mem + +import "sort" + +type DirMap map[string]*FileData + +func (m DirMap) Len() int { return len(m) } +func (m DirMap) Add(f *FileData) { m[f.name] = f } +func (m DirMap) Remove(f *FileData) { delete(m, f.name) } +func (m DirMap) Files() (files []*FileData) { + for _, f := range m { + files = append(files, f) + } + sort.Sort(filesSorter(files)) + return files +} + +// implement sort.Interface for []*FileData +type filesSorter []*FileData + +func (s filesSorter) Len() int { return len(s) } +func (s filesSorter) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s filesSorter) Less(i, j int) bool { return s[i].name < s[j].name } + +func (m DirMap) Names() (names []string) { + for x := range m { + names = append(names, x) + } + return names +} diff --git a/vendor/github.com/spf13/afero/mem/file.go b/vendor/github.com/spf13/afero/mem/file.go new file mode 100644 index 000000000..7af2fb56f --- /dev/null +++ b/vendor/github.com/spf13/afero/mem/file.go @@ -0,0 +1,317 @@ +// Copyright © 2015 Steve Francia . +// Copyright 2013 tsuru authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package mem + +import ( + "bytes" + "errors" + "io" + "os" + "path/filepath" + "sync" + "sync/atomic" +) + +import "time" + +const FilePathSeparator = string(filepath.Separator) + +type File struct { + // atomic requires 64-bit alignment for struct field access + at int64 + readDirCount int64 + closed bool + readOnly bool + fileData *FileData +} + +func NewFileHandle(data *FileData) *File { + return &File{fileData: data} +} + +func NewReadOnlyFileHandle(data *FileData) *File { + return &File{fileData: data, readOnly: true} +} + +func (f File) Data() *FileData { + return f.fileData +} + +type FileData struct { + sync.Mutex + name string + data []byte + memDir Dir + dir bool + mode os.FileMode + modtime time.Time +} + +func (d *FileData) Name() string { + d.Lock() + defer d.Unlock() + return d.name +} + +func CreateFile(name string) *FileData { + return &FileData{name: name, mode: os.ModeTemporary, modtime: time.Now()} +} + +func CreateDir(name string) *FileData { + return &FileData{name: name, memDir: &DirMap{}, dir: true} +} + +func ChangeFileName(f *FileData, newname string) { + f.Lock() + f.name = newname + f.Unlock() +} + +func SetMode(f *FileData, mode os.FileMode) { + f.Lock() + f.mode = mode + f.Unlock() +} + +func SetModTime(f *FileData, mtime time.Time) { + f.Lock() + setModTime(f, mtime) + f.Unlock() +} + +func setModTime(f *FileData, mtime time.Time) { + f.modtime = mtime +} + +func GetFileInfo(f *FileData) *FileInfo { + return &FileInfo{f} +} + +func (f *File) Open() error { + atomic.StoreInt64(&f.at, 0) + atomic.StoreInt64(&f.readDirCount, 0) + f.fileData.Lock() + f.closed = false + f.fileData.Unlock() + return nil +} + +func (f *File) Close() error { + f.fileData.Lock() + f.closed = true + if !f.readOnly { + setModTime(f.fileData, time.Now()) + } + f.fileData.Unlock() + return nil +} + +func (f *File) Name() string { + return f.fileData.Name() +} + +func (f *File) Stat() (os.FileInfo, error) { + return &FileInfo{f.fileData}, nil +} + +func (f *File) Sync() error { + return nil +} + +func (f *File) Readdir(count int) (res []os.FileInfo, err error) { + if !f.fileData.dir { + return nil, &os.PathError{Op: "readdir", Path: f.fileData.name, Err: errors.New("not a dir")} + } + var outLength int64 + + f.fileData.Lock() + files := f.fileData.memDir.Files()[f.readDirCount:] + if count > 0 { + if len(files) < count { + outLength = int64(len(files)) + } else { + outLength = int64(count) + } + if len(files) == 0 { + err = io.EOF + } + } else { + outLength = int64(len(files)) + } + f.readDirCount += outLength + f.fileData.Unlock() + + res = make([]os.FileInfo, outLength) + for i := range res { + res[i] = &FileInfo{files[i]} + } + + return res, err +} + +func (f *File) Readdirnames(n int) (names []string, err error) { + fi, err := f.Readdir(n) + names = make([]string, len(fi)) + for i, f := range fi { + _, names[i] = filepath.Split(f.Name()) + } + return names, err +} + +func (f *File) Read(b []byte) (n int, err error) { + f.fileData.Lock() + defer f.fileData.Unlock() + if f.closed == true { + return 0, ErrFileClosed + } + if len(b) > 0 && int(f.at) == len(f.fileData.data) { + return 0, io.EOF + } + if int(f.at) > len(f.fileData.data) { + return 0, io.ErrUnexpectedEOF + } + if len(f.fileData.data)-int(f.at) >= len(b) { + n = len(b) + } else { + n = len(f.fileData.data) - int(f.at) + } + copy(b, f.fileData.data[f.at:f.at+int64(n)]) + atomic.AddInt64(&f.at, int64(n)) + return +} + +func (f *File) ReadAt(b []byte, off int64) (n int, err error) { + atomic.StoreInt64(&f.at, off) + return f.Read(b) +} + +func (f *File) Truncate(size int64) error { + if f.closed == true { + return ErrFileClosed + } + if f.readOnly { + return &os.PathError{Op: "truncate", Path: f.fileData.name, Err: errors.New("file handle is read only")} + } + if size < 0 { + return ErrOutOfRange + } + if size > int64(len(f.fileData.data)) { + diff := size - int64(len(f.fileData.data)) + f.fileData.data = append(f.fileData.data, bytes.Repeat([]byte{00}, int(diff))...) + } else { + f.fileData.data = f.fileData.data[0:size] + } + setModTime(f.fileData, time.Now()) + return nil +} + +func (f *File) Seek(offset int64, whence int) (int64, error) { + if f.closed == true { + return 0, ErrFileClosed + } + switch whence { + case 0: + atomic.StoreInt64(&f.at, offset) + case 1: + atomic.AddInt64(&f.at, int64(offset)) + case 2: + atomic.StoreInt64(&f.at, int64(len(f.fileData.data))+offset) + } + return f.at, nil +} + +func (f *File) Write(b []byte) (n int, err error) { + if f.readOnly { + return 0, &os.PathError{Op: "write", Path: f.fileData.name, Err: errors.New("file handle is read only")} + } + n = len(b) + cur := atomic.LoadInt64(&f.at) + f.fileData.Lock() + defer f.fileData.Unlock() + diff := cur - int64(len(f.fileData.data)) + var tail []byte + if n+int(cur) < len(f.fileData.data) { + tail = f.fileData.data[n+int(cur):] + } + if diff > 0 { + f.fileData.data = append(bytes.Repeat([]byte{00}, int(diff)), b...) + f.fileData.data = append(f.fileData.data, tail...) + } else { + f.fileData.data = append(f.fileData.data[:cur], b...) + f.fileData.data = append(f.fileData.data, tail...) + } + setModTime(f.fileData, time.Now()) + + atomic.StoreInt64(&f.at, int64(len(f.fileData.data))) + return +} + +func (f *File) WriteAt(b []byte, off int64) (n int, err error) { + atomic.StoreInt64(&f.at, off) + return f.Write(b) +} + +func (f *File) WriteString(s string) (ret int, err error) { + return f.Write([]byte(s)) +} + +func (f *File) Info() *FileInfo { + return &FileInfo{f.fileData} +} + +type FileInfo struct { + *FileData +} + +// Implements os.FileInfo +func (s *FileInfo) Name() string { + s.Lock() + _, name := filepath.Split(s.name) + s.Unlock() + return name +} +func (s *FileInfo) Mode() os.FileMode { + s.Lock() + defer s.Unlock() + return s.mode +} +func (s *FileInfo) ModTime() time.Time { + s.Lock() + defer s.Unlock() + return s.modtime +} +func (s *FileInfo) IsDir() bool { + s.Lock() + defer s.Unlock() + return s.dir +} +func (s *FileInfo) Sys() interface{} { return nil } +func (s *FileInfo) Size() int64 { + if s.IsDir() { + return int64(42) + } + s.Lock() + defer s.Unlock() + return int64(len(s.data)) +} + +var ( + ErrFileClosed = errors.New("File is closed") + ErrOutOfRange = errors.New("Out of range") + ErrTooLarge = errors.New("Too large") + ErrFileNotFound = os.ErrNotExist + ErrFileExists = os.ErrExist + ErrDestinationExists = os.ErrExist +) diff --git a/vendor/github.com/spf13/afero/memmap.go b/vendor/github.com/spf13/afero/memmap.go new file mode 100644 index 000000000..09498e70f --- /dev/null +++ b/vendor/github.com/spf13/afero/memmap.go @@ -0,0 +1,365 @@ +// Copyright © 2014 Steve Francia . +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package afero + +import ( + "fmt" + "log" + "os" + "path/filepath" + "strings" + "sync" + "time" + + "github.com/spf13/afero/mem" +) + +type MemMapFs struct { + mu sync.RWMutex + data map[string]*mem.FileData + init sync.Once +} + +func NewMemMapFs() Fs { + return &MemMapFs{} +} + +func (m *MemMapFs) getData() map[string]*mem.FileData { + m.init.Do(func() { + m.data = make(map[string]*mem.FileData) + // Root should always exist, right? + // TODO: what about windows? + m.data[FilePathSeparator] = mem.CreateDir(FilePathSeparator) + }) + return m.data +} + +func (*MemMapFs) Name() string { return "MemMapFS" } + +func (m *MemMapFs) Create(name string) (File, error) { + name = normalizePath(name) + m.mu.Lock() + file := mem.CreateFile(name) + m.getData()[name] = file + m.registerWithParent(file) + m.mu.Unlock() + return mem.NewFileHandle(file), nil +} + +func (m *MemMapFs) unRegisterWithParent(fileName string) error { + f, err := m.lockfreeOpen(fileName) + if err != nil { + return err + } + parent := m.findParent(f) + if parent == nil { + log.Panic("parent of ", f.Name(), " is nil") + } + + parent.Lock() + mem.RemoveFromMemDir(parent, f) + parent.Unlock() + return nil +} + +func (m *MemMapFs) findParent(f *mem.FileData) *mem.FileData { + pdir, _ := filepath.Split(f.Name()) + pdir = filepath.Clean(pdir) + pfile, err := m.lockfreeOpen(pdir) + if err != nil { + return nil + } + return pfile +} + +func (m *MemMapFs) registerWithParent(f *mem.FileData) { + if f == nil { + return + } + parent := m.findParent(f) + if parent == nil { + pdir := filepath.Dir(filepath.Clean(f.Name())) + err := m.lockfreeMkdir(pdir, 0777) + if err != nil { + //log.Println("Mkdir error:", err) + return + } + parent, err = m.lockfreeOpen(pdir) + if err != nil { + //log.Println("Open after Mkdir error:", err) + return + } + } + + parent.Lock() + mem.InitializeDir(parent) + mem.AddToMemDir(parent, f) + parent.Unlock() +} + +func (m *MemMapFs) lockfreeMkdir(name string, perm os.FileMode) error { + name = normalizePath(name) + x, ok := m.getData()[name] + if ok { + // Only return ErrFileExists if it's a file, not a directory. + i := mem.FileInfo{FileData: x} + if !i.IsDir() { + return ErrFileExists + } + } else { + item := mem.CreateDir(name) + m.getData()[name] = item + m.registerWithParent(item) + } + return nil +} + +func (m *MemMapFs) Mkdir(name string, perm os.FileMode) error { + name = normalizePath(name) + + m.mu.RLock() + _, ok := m.getData()[name] + m.mu.RUnlock() + if ok { + return &os.PathError{Op: "mkdir", Path: name, Err: ErrFileExists} + } + + m.mu.Lock() + item := mem.CreateDir(name) + m.getData()[name] = item + m.registerWithParent(item) + m.mu.Unlock() + + m.Chmod(name, perm|os.ModeDir) + + return nil +} + +func (m *MemMapFs) MkdirAll(path string, perm os.FileMode) error { + err := m.Mkdir(path, perm) + if err != nil { + if err.(*os.PathError).Err == ErrFileExists { + return nil + } + return err + } + return nil +} + +// Handle some relative paths +func normalizePath(path string) string { + path = filepath.Clean(path) + + switch path { + case ".": + return FilePathSeparator + case "..": + return FilePathSeparator + default: + return path + } +} + +func (m *MemMapFs) Open(name string) (File, error) { + f, err := m.open(name) + if f != nil { + return mem.NewReadOnlyFileHandle(f), err + } + return nil, err +} + +func (m *MemMapFs) openWrite(name string) (File, error) { + f, err := m.open(name) + if f != nil { + return mem.NewFileHandle(f), err + } + return nil, err +} + +func (m *MemMapFs) open(name string) (*mem.FileData, error) { + name = normalizePath(name) + + m.mu.RLock() + f, ok := m.getData()[name] + m.mu.RUnlock() + if !ok { + return nil, &os.PathError{Op: "open", Path: name, Err: ErrFileNotFound} + } + return f, nil +} + +func (m *MemMapFs) lockfreeOpen(name string) (*mem.FileData, error) { + name = normalizePath(name) + f, ok := m.getData()[name] + if ok { + return f, nil + } else { + return nil, ErrFileNotFound + } +} + +func (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) { + chmod := false + file, err := m.openWrite(name) + if os.IsNotExist(err) && (flag&os.O_CREATE > 0) { + file, err = m.Create(name) + chmod = true + } + if err != nil { + return nil, err + } + if flag == os.O_RDONLY { + file = mem.NewReadOnlyFileHandle(file.(*mem.File).Data()) + } + if flag&os.O_APPEND > 0 { + _, err = file.Seek(0, os.SEEK_END) + if err != nil { + file.Close() + return nil, err + } + } + if flag&os.O_TRUNC > 0 && flag&(os.O_RDWR|os.O_WRONLY) > 0 { + err = file.Truncate(0) + if err != nil { + file.Close() + return nil, err + } + } + if chmod { + m.Chmod(name, perm) + } + return file, nil +} + +func (m *MemMapFs) Remove(name string) error { + name = normalizePath(name) + + m.mu.Lock() + defer m.mu.Unlock() + + if _, ok := m.getData()[name]; ok { + err := m.unRegisterWithParent(name) + if err != nil { + return &os.PathError{Op: "remove", Path: name, Err: err} + } + delete(m.getData(), name) + } else { + return &os.PathError{Op: "remove", Path: name, Err: os.ErrNotExist} + } + return nil +} + +func (m *MemMapFs) RemoveAll(path string) error { + path = normalizePath(path) + m.mu.Lock() + m.unRegisterWithParent(path) + m.mu.Unlock() + + m.mu.RLock() + defer m.mu.RUnlock() + + for p, _ := range m.getData() { + if strings.HasPrefix(p, path) { + m.mu.RUnlock() + m.mu.Lock() + delete(m.getData(), p) + m.mu.Unlock() + m.mu.RLock() + } + } + return nil +} + +func (m *MemMapFs) Rename(oldname, newname string) error { + oldname = normalizePath(oldname) + newname = normalizePath(newname) + + if oldname == newname { + return nil + } + + m.mu.RLock() + defer m.mu.RUnlock() + if _, ok := m.getData()[oldname]; ok { + m.mu.RUnlock() + m.mu.Lock() + m.unRegisterWithParent(oldname) + fileData := m.getData()[oldname] + delete(m.getData(), oldname) + mem.ChangeFileName(fileData, newname) + m.getData()[newname] = fileData + m.registerWithParent(fileData) + m.mu.Unlock() + m.mu.RLock() + } else { + return &os.PathError{Op: "rename", Path: oldname, Err: ErrFileNotFound} + } + return nil +} + +func (m *MemMapFs) Stat(name string) (os.FileInfo, error) { + f, err := m.Open(name) + if err != nil { + return nil, err + } + fi := mem.GetFileInfo(f.(*mem.File).Data()) + return fi, nil +} + +func (m *MemMapFs) Chmod(name string, mode os.FileMode) error { + name = normalizePath(name) + + m.mu.RLock() + f, ok := m.getData()[name] + m.mu.RUnlock() + if !ok { + return &os.PathError{Op: "chmod", Path: name, Err: ErrFileNotFound} + } + + m.mu.Lock() + mem.SetMode(f, mode) + m.mu.Unlock() + + return nil +} + +func (m *MemMapFs) Chtimes(name string, atime time.Time, mtime time.Time) error { + name = normalizePath(name) + + m.mu.RLock() + f, ok := m.getData()[name] + m.mu.RUnlock() + if !ok { + return &os.PathError{Op: "chtimes", Path: name, Err: ErrFileNotFound} + } + + m.mu.Lock() + mem.SetModTime(f, mtime) + m.mu.Unlock() + + return nil +} + +func (m *MemMapFs) List() { + for _, x := range m.data { + y := mem.FileInfo{FileData: x} + fmt.Println(x.Name(), y.Size()) + } +} + +// func debugMemMapList(fs Fs) { +// if x, ok := fs.(*MemMapFs); ok { +// x.List() +// } +// } diff --git a/vendor/github.com/spf13/afero/os.go b/vendor/github.com/spf13/afero/os.go new file mode 100644 index 000000000..13cc1b84c --- /dev/null +++ b/vendor/github.com/spf13/afero/os.go @@ -0,0 +1,101 @@ +// Copyright © 2014 Steve Francia . +// Copyright 2013 tsuru authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package afero + +import ( + "os" + "time" +) + +var _ Lstater = (*OsFs)(nil) + +// OsFs is a Fs implementation that uses functions provided by the os package. +// +// For details in any method, check the documentation of the os package +// (http://golang.org/pkg/os/). +type OsFs struct{} + +func NewOsFs() Fs { + return &OsFs{} +} + +func (OsFs) Name() string { return "OsFs" } + +func (OsFs) Create(name string) (File, error) { + f, e := os.Create(name) + if f == nil { + // while this looks strange, we need to return a bare nil (of type nil) not + // a nil value of type *os.File or nil won't be nil + return nil, e + } + return f, e +} + +func (OsFs) Mkdir(name string, perm os.FileMode) error { + return os.Mkdir(name, perm) +} + +func (OsFs) MkdirAll(path string, perm os.FileMode) error { + return os.MkdirAll(path, perm) +} + +func (OsFs) Open(name string) (File, error) { + f, e := os.Open(name) + if f == nil { + // while this looks strange, we need to return a bare nil (of type nil) not + // a nil value of type *os.File or nil won't be nil + return nil, e + } + return f, e +} + +func (OsFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) { + f, e := os.OpenFile(name, flag, perm) + if f == nil { + // while this looks strange, we need to return a bare nil (of type nil) not + // a nil value of type *os.File or nil won't be nil + return nil, e + } + return f, e +} + +func (OsFs) Remove(name string) error { + return os.Remove(name) +} + +func (OsFs) RemoveAll(path string) error { + return os.RemoveAll(path) +} + +func (OsFs) Rename(oldname, newname string) error { + return os.Rename(oldname, newname) +} + +func (OsFs) Stat(name string) (os.FileInfo, error) { + return os.Stat(name) +} + +func (OsFs) Chmod(name string, mode os.FileMode) error { + return os.Chmod(name, mode) +} + +func (OsFs) Chtimes(name string, atime time.Time, mtime time.Time) error { + return os.Chtimes(name, atime, mtime) +} + +func (OsFs) LstatIfPossible(name string) (os.FileInfo, bool, error) { + fi, err := os.Lstat(name) + return fi, true, err +} diff --git a/vendor/github.com/spf13/afero/path.go b/vendor/github.com/spf13/afero/path.go new file mode 100644 index 000000000..18f60a0f6 --- /dev/null +++ b/vendor/github.com/spf13/afero/path.go @@ -0,0 +1,106 @@ +// Copyright ©2015 The Go Authors +// Copyright ©2015 Steve Francia +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package afero + +import ( + "os" + "path/filepath" + "sort" +) + +// readDirNames reads the directory named by dirname and returns +// a sorted list of directory entries. +// adapted from https://golang.org/src/path/filepath/path.go +func readDirNames(fs Fs, dirname string) ([]string, error) { + f, err := fs.Open(dirname) + if err != nil { + return nil, err + } + names, err := f.Readdirnames(-1) + f.Close() + if err != nil { + return nil, err + } + sort.Strings(names) + return names, nil +} + +// walk recursively descends path, calling walkFn +// adapted from https://golang.org/src/path/filepath/path.go +func walk(fs Fs, path string, info os.FileInfo, walkFn filepath.WalkFunc) error { + err := walkFn(path, info, nil) + if err != nil { + if info.IsDir() && err == filepath.SkipDir { + return nil + } + return err + } + + if !info.IsDir() { + return nil + } + + names, err := readDirNames(fs, path) + if err != nil { + return walkFn(path, info, err) + } + + for _, name := range names { + filename := filepath.Join(path, name) + fileInfo, err := lstatIfPossible(fs, filename) + if err != nil { + if err := walkFn(filename, fileInfo, err); err != nil && err != filepath.SkipDir { + return err + } + } else { + err = walk(fs, filename, fileInfo, walkFn) + if err != nil { + if !fileInfo.IsDir() || err != filepath.SkipDir { + return err + } + } + } + } + return nil +} + +// if the filesystem supports it, use Lstat, else use fs.Stat +func lstatIfPossible(fs Fs, path string) (os.FileInfo, error) { + if lfs, ok := fs.(Lstater); ok { + fi, _, err := lfs.LstatIfPossible(path) + return fi, err + } + return fs.Stat(path) +} + +// Walk walks the file tree rooted at root, calling walkFn for each file or +// directory in the tree, including root. All errors that arise visiting files +// and directories are filtered by walkFn. The files are walked in lexical +// order, which makes the output deterministic but means that for very +// large directories Walk can be inefficient. +// Walk does not follow symbolic links. + +func (a Afero) Walk(root string, walkFn filepath.WalkFunc) error { + return Walk(a.Fs, root, walkFn) +} + +func Walk(fs Fs, root string, walkFn filepath.WalkFunc) error { + info, err := lstatIfPossible(fs, root) + if err != nil { + return walkFn(root, nil, err) + } + return walk(fs, root, info, walkFn) +} diff --git a/vendor/github.com/spf13/afero/readonlyfs.go b/vendor/github.com/spf13/afero/readonlyfs.go new file mode 100644 index 000000000..c6376ec37 --- /dev/null +++ b/vendor/github.com/spf13/afero/readonlyfs.go @@ -0,0 +1,80 @@ +package afero + +import ( + "os" + "syscall" + "time" +) + +var _ Lstater = (*ReadOnlyFs)(nil) + +type ReadOnlyFs struct { + source Fs +} + +func NewReadOnlyFs(source Fs) Fs { + return &ReadOnlyFs{source: source} +} + +func (r *ReadOnlyFs) ReadDir(name string) ([]os.FileInfo, error) { + return ReadDir(r.source, name) +} + +func (r *ReadOnlyFs) Chtimes(n string, a, m time.Time) error { + return syscall.EPERM +} + +func (r *ReadOnlyFs) Chmod(n string, m os.FileMode) error { + return syscall.EPERM +} + +func (r *ReadOnlyFs) Name() string { + return "ReadOnlyFilter" +} + +func (r *ReadOnlyFs) Stat(name string) (os.FileInfo, error) { + return r.source.Stat(name) +} + +func (r *ReadOnlyFs) LstatIfPossible(name string) (os.FileInfo, bool, error) { + if lsf, ok := r.source.(Lstater); ok { + return lsf.LstatIfPossible(name) + } + fi, err := r.Stat(name) + return fi, false, err +} + +func (r *ReadOnlyFs) Rename(o, n string) error { + return syscall.EPERM +} + +func (r *ReadOnlyFs) RemoveAll(p string) error { + return syscall.EPERM +} + +func (r *ReadOnlyFs) Remove(n string) error { + return syscall.EPERM +} + +func (r *ReadOnlyFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) { + if flag&(os.O_WRONLY|syscall.O_RDWR|os.O_APPEND|os.O_CREATE|os.O_TRUNC) != 0 { + return nil, syscall.EPERM + } + return r.source.OpenFile(name, flag, perm) +} + +func (r *ReadOnlyFs) Open(n string) (File, error) { + return r.source.Open(n) +} + +func (r *ReadOnlyFs) Mkdir(n string, p os.FileMode) error { + return syscall.EPERM +} + +func (r *ReadOnlyFs) MkdirAll(n string, p os.FileMode) error { + return syscall.EPERM +} + +func (r *ReadOnlyFs) Create(n string) (File, error) { + return nil, syscall.EPERM +} diff --git a/vendor/github.com/spf13/afero/regexpfs.go b/vendor/github.com/spf13/afero/regexpfs.go new file mode 100644 index 000000000..9d92dbc05 --- /dev/null +++ b/vendor/github.com/spf13/afero/regexpfs.go @@ -0,0 +1,214 @@ +package afero + +import ( + "os" + "regexp" + "syscall" + "time" +) + +// The RegexpFs filters files (not directories) by regular expression. Only +// files matching the given regexp will be allowed, all others get a ENOENT error ( +// "No such file or directory"). +// +type RegexpFs struct { + re *regexp.Regexp + source Fs +} + +func NewRegexpFs(source Fs, re *regexp.Regexp) Fs { + return &RegexpFs{source: source, re: re} +} + +type RegexpFile struct { + f File + re *regexp.Regexp +} + +func (r *RegexpFs) matchesName(name string) error { + if r.re == nil { + return nil + } + if r.re.MatchString(name) { + return nil + } + return syscall.ENOENT +} + +func (r *RegexpFs) dirOrMatches(name string) error { + dir, err := IsDir(r.source, name) + if err != nil { + return err + } + if dir { + return nil + } + return r.matchesName(name) +} + +func (r *RegexpFs) Chtimes(name string, a, m time.Time) error { + if err := r.dirOrMatches(name); err != nil { + return err + } + return r.source.Chtimes(name, a, m) +} + +func (r *RegexpFs) Chmod(name string, mode os.FileMode) error { + if err := r.dirOrMatches(name); err != nil { + return err + } + return r.source.Chmod(name, mode) +} + +func (r *RegexpFs) Name() string { + return "RegexpFs" +} + +func (r *RegexpFs) Stat(name string) (os.FileInfo, error) { + if err := r.dirOrMatches(name); err != nil { + return nil, err + } + return r.source.Stat(name) +} + +func (r *RegexpFs) Rename(oldname, newname string) error { + dir, err := IsDir(r.source, oldname) + if err != nil { + return err + } + if dir { + return nil + } + if err := r.matchesName(oldname); err != nil { + return err + } + if err := r.matchesName(newname); err != nil { + return err + } + return r.source.Rename(oldname, newname) +} + +func (r *RegexpFs) RemoveAll(p string) error { + dir, err := IsDir(r.source, p) + if err != nil { + return err + } + if !dir { + if err := r.matchesName(p); err != nil { + return err + } + } + return r.source.RemoveAll(p) +} + +func (r *RegexpFs) Remove(name string) error { + if err := r.dirOrMatches(name); err != nil { + return err + } + return r.source.Remove(name) +} + +func (r *RegexpFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) { + if err := r.dirOrMatches(name); err != nil { + return nil, err + } + return r.source.OpenFile(name, flag, perm) +} + +func (r *RegexpFs) Open(name string) (File, error) { + dir, err := IsDir(r.source, name) + if err != nil { + return nil, err + } + if !dir { + if err := r.matchesName(name); err != nil { + return nil, err + } + } + f, err := r.source.Open(name) + return &RegexpFile{f: f, re: r.re}, nil +} + +func (r *RegexpFs) Mkdir(n string, p os.FileMode) error { + return r.source.Mkdir(n, p) +} + +func (r *RegexpFs) MkdirAll(n string, p os.FileMode) error { + return r.source.MkdirAll(n, p) +} + +func (r *RegexpFs) Create(name string) (File, error) { + if err := r.matchesName(name); err != nil { + return nil, err + } + return r.source.Create(name) +} + +func (f *RegexpFile) Close() error { + return f.f.Close() +} + +func (f *RegexpFile) Read(s []byte) (int, error) { + return f.f.Read(s) +} + +func (f *RegexpFile) ReadAt(s []byte, o int64) (int, error) { + return f.f.ReadAt(s, o) +} + +func (f *RegexpFile) Seek(o int64, w int) (int64, error) { + return f.f.Seek(o, w) +} + +func (f *RegexpFile) Write(s []byte) (int, error) { + return f.f.Write(s) +} + +func (f *RegexpFile) WriteAt(s []byte, o int64) (int, error) { + return f.f.WriteAt(s, o) +} + +func (f *RegexpFile) Name() string { + return f.f.Name() +} + +func (f *RegexpFile) Readdir(c int) (fi []os.FileInfo, err error) { + var rfi []os.FileInfo + rfi, err = f.f.Readdir(c) + if err != nil { + return nil, err + } + for _, i := range rfi { + if i.IsDir() || f.re.MatchString(i.Name()) { + fi = append(fi, i) + } + } + return fi, nil +} + +func (f *RegexpFile) Readdirnames(c int) (n []string, err error) { + fi, err := f.Readdir(c) + if err != nil { + return nil, err + } + for _, s := range fi { + n = append(n, s.Name()) + } + return n, nil +} + +func (f *RegexpFile) Stat() (os.FileInfo, error) { + return f.f.Stat() +} + +func (f *RegexpFile) Sync() error { + return f.f.Sync() +} + +func (f *RegexpFile) Truncate(s int64) error { + return f.f.Truncate(s) +} + +func (f *RegexpFile) WriteString(s string) (int, error) { + return f.f.WriteString(s) +} diff --git a/vendor/github.com/spf13/afero/unionFile.go b/vendor/github.com/spf13/afero/unionFile.go new file mode 100644 index 000000000..abcf12d36 --- /dev/null +++ b/vendor/github.com/spf13/afero/unionFile.go @@ -0,0 +1,316 @@ +package afero + +import ( + "io" + "os" + "path/filepath" + "syscall" +) + +// The UnionFile implements the afero.File interface and will be returned +// when reading a directory present at least in the overlay or opening a file +// for writing. +// +// The calls to +// Readdir() and Readdirnames() merge the file os.FileInfo / names from the +// base and the overlay - for files present in both layers, only those +// from the overlay will be used. +// +// When opening files for writing (Create() / OpenFile() with the right flags) +// the operations will be done in both layers, starting with the overlay. A +// successful read in the overlay will move the cursor position in the base layer +// by the number of bytes read. +type UnionFile struct { + Base File + Layer File + Merger DirsMerger + off int + files []os.FileInfo +} + +func (f *UnionFile) Close() error { + // first close base, so we have a newer timestamp in the overlay. If we'd close + // the overlay first, we'd get a cacheStale the next time we access this file + // -> cache would be useless ;-) + if f.Base != nil { + f.Base.Close() + } + if f.Layer != nil { + return f.Layer.Close() + } + return BADFD +} + +func (f *UnionFile) Read(s []byte) (int, error) { + if f.Layer != nil { + n, err := f.Layer.Read(s) + if (err == nil || err == io.EOF) && f.Base != nil { + // advance the file position also in the base file, the next + // call may be a write at this position (or a seek with SEEK_CUR) + if _, seekErr := f.Base.Seek(int64(n), os.SEEK_CUR); seekErr != nil { + // only overwrite err in case the seek fails: we need to + // report an eventual io.EOF to the caller + err = seekErr + } + } + return n, err + } + if f.Base != nil { + return f.Base.Read(s) + } + return 0, BADFD +} + +func (f *UnionFile) ReadAt(s []byte, o int64) (int, error) { + if f.Layer != nil { + n, err := f.Layer.ReadAt(s, o) + if (err == nil || err == io.EOF) && f.Base != nil { + _, err = f.Base.Seek(o+int64(n), os.SEEK_SET) + } + return n, err + } + if f.Base != nil { + return f.Base.ReadAt(s, o) + } + return 0, BADFD +} + +func (f *UnionFile) Seek(o int64, w int) (pos int64, err error) { + if f.Layer != nil { + pos, err = f.Layer.Seek(o, w) + if (err == nil || err == io.EOF) && f.Base != nil { + _, err = f.Base.Seek(o, w) + } + return pos, err + } + if f.Base != nil { + return f.Base.Seek(o, w) + } + return 0, BADFD +} + +func (f *UnionFile) Write(s []byte) (n int, err error) { + if f.Layer != nil { + n, err = f.Layer.Write(s) + if err == nil && f.Base != nil { // hmm, do we have fixed size files where a write may hit the EOF mark? + _, err = f.Base.Write(s) + } + return n, err + } + if f.Base != nil { + return f.Base.Write(s) + } + return 0, BADFD +} + +func (f *UnionFile) WriteAt(s []byte, o int64) (n int, err error) { + if f.Layer != nil { + n, err = f.Layer.WriteAt(s, o) + if err == nil && f.Base != nil { + _, err = f.Base.WriteAt(s, o) + } + return n, err + } + if f.Base != nil { + return f.Base.WriteAt(s, o) + } + return 0, BADFD +} + +func (f *UnionFile) Name() string { + if f.Layer != nil { + return f.Layer.Name() + } + return f.Base.Name() +} + +// DirsMerger is how UnionFile weaves two directories together. +// It takes the FileInfo slices from the layer and the base and returns a +// single view. +type DirsMerger func(lofi, bofi []os.FileInfo) ([]os.FileInfo, error) + +var defaultUnionMergeDirsFn = func(lofi, bofi []os.FileInfo) ([]os.FileInfo, error) { + var files = make(map[string]os.FileInfo) + + for _, fi := range lofi { + files[fi.Name()] = fi + } + + for _, fi := range bofi { + if _, exists := files[fi.Name()]; !exists { + files[fi.Name()] = fi + } + } + + rfi := make([]os.FileInfo, len(files)) + + i := 0 + for _, fi := range files { + rfi[i] = fi + i++ + } + + return rfi, nil + +} + +// Readdir will weave the two directories together and +// return a single view of the overlayed directories +// At the end of the directory view, the error is io.EOF. +func (f *UnionFile) Readdir(c int) (ofi []os.FileInfo, err error) { + var merge DirsMerger = f.Merger + if merge == nil { + merge = defaultUnionMergeDirsFn + } + + if f.off == 0 { + var lfi []os.FileInfo + if f.Layer != nil { + lfi, err = f.Layer.Readdir(-1) + if err != nil { + return nil, err + } + } + + var bfi []os.FileInfo + if f.Base != nil { + bfi, err = f.Base.Readdir(-1) + if err != nil { + return nil, err + } + + } + merged, err := merge(lfi, bfi) + if err != nil { + return nil, err + } + f.files = append(f.files, merged...) + } + + if f.off >= len(f.files) { + return nil, io.EOF + } + + if c == -1 { + return f.files[f.off:], nil + } + + if c > len(f.files) { + c = len(f.files) + } + + defer func() { f.off += c }() + return f.files[f.off:c], nil +} + +func (f *UnionFile) Readdirnames(c int) ([]string, error) { + rfi, err := f.Readdir(c) + if err != nil { + return nil, err + } + var names []string + for _, fi := range rfi { + names = append(names, fi.Name()) + } + return names, nil +} + +func (f *UnionFile) Stat() (os.FileInfo, error) { + if f.Layer != nil { + return f.Layer.Stat() + } + if f.Base != nil { + return f.Base.Stat() + } + return nil, BADFD +} + +func (f *UnionFile) Sync() (err error) { + if f.Layer != nil { + err = f.Layer.Sync() + if err == nil && f.Base != nil { + err = f.Base.Sync() + } + return err + } + if f.Base != nil { + return f.Base.Sync() + } + return BADFD +} + +func (f *UnionFile) Truncate(s int64) (err error) { + if f.Layer != nil { + err = f.Layer.Truncate(s) + if err == nil && f.Base != nil { + err = f.Base.Truncate(s) + } + return err + } + if f.Base != nil { + return f.Base.Truncate(s) + } + return BADFD +} + +func (f *UnionFile) WriteString(s string) (n int, err error) { + if f.Layer != nil { + n, err = f.Layer.WriteString(s) + if err == nil && f.Base != nil { + _, err = f.Base.WriteString(s) + } + return n, err + } + if f.Base != nil { + return f.Base.WriteString(s) + } + return 0, BADFD +} + +func copyToLayer(base Fs, layer Fs, name string) error { + bfh, err := base.Open(name) + if err != nil { + return err + } + defer bfh.Close() + + // First make sure the directory exists + exists, err := Exists(layer, filepath.Dir(name)) + if err != nil { + return err + } + if !exists { + err = layer.MkdirAll(filepath.Dir(name), 0777) // FIXME? + if err != nil { + return err + } + } + + // Create the file on the overlay + lfh, err := layer.Create(name) + if err != nil { + return err + } + n, err := io.Copy(lfh, bfh) + if err != nil { + // If anything fails, clean up the file + layer.Remove(name) + lfh.Close() + return err + } + + bfi, err := bfh.Stat() + if err != nil || bfi.Size() != n { + layer.Remove(name) + lfh.Close() + return syscall.EIO + } + + err = lfh.Close() + if err != nil { + layer.Remove(name) + lfh.Close() + return err + } + return layer.Chtimes(name, bfi.ModTime(), bfi.ModTime()) +} diff --git a/vendor/github.com/spf13/afero/util.go b/vendor/github.com/spf13/afero/util.go new file mode 100644 index 000000000..4f253f481 --- /dev/null +++ b/vendor/github.com/spf13/afero/util.go @@ -0,0 +1,330 @@ +// Copyright ©2015 Steve Francia +// Portions Copyright ©2015 The Hugo Authors +// Portions Copyright 2016-present Bjørn Erik Pedersen +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package afero + +import ( + "bytes" + "fmt" + "io" + "os" + "path/filepath" + "strings" + "unicode" + + "golang.org/x/text/transform" + "golang.org/x/text/unicode/norm" +) + +// Filepath separator defined by os.Separator. +const FilePathSeparator = string(filepath.Separator) + +// Takes a reader and a path and writes the content +func (a Afero) WriteReader(path string, r io.Reader) (err error) { + return WriteReader(a.Fs, path, r) +} + +func WriteReader(fs Fs, path string, r io.Reader) (err error) { + dir, _ := filepath.Split(path) + ospath := filepath.FromSlash(dir) + + if ospath != "" { + err = fs.MkdirAll(ospath, 0777) // rwx, rw, r + if err != nil { + if err != os.ErrExist { + return err + } + } + } + + file, err := fs.Create(path) + if err != nil { + return + } + defer file.Close() + + _, err = io.Copy(file, r) + return +} + +// Same as WriteReader but checks to see if file/directory already exists. +func (a Afero) SafeWriteReader(path string, r io.Reader) (err error) { + return SafeWriteReader(a.Fs, path, r) +} + +func SafeWriteReader(fs Fs, path string, r io.Reader) (err error) { + dir, _ := filepath.Split(path) + ospath := filepath.FromSlash(dir) + + if ospath != "" { + err = fs.MkdirAll(ospath, 0777) // rwx, rw, r + if err != nil { + return + } + } + + exists, err := Exists(fs, path) + if err != nil { + return + } + if exists { + return fmt.Errorf("%v already exists", path) + } + + file, err := fs.Create(path) + if err != nil { + return + } + defer file.Close() + + _, err = io.Copy(file, r) + return +} + +func (a Afero) GetTempDir(subPath string) string { + return GetTempDir(a.Fs, subPath) +} + +// GetTempDir returns the default temp directory with trailing slash +// if subPath is not empty then it will be created recursively with mode 777 rwx rwx rwx +func GetTempDir(fs Fs, subPath string) string { + addSlash := func(p string) string { + if FilePathSeparator != p[len(p)-1:] { + p = p + FilePathSeparator + } + return p + } + dir := addSlash(os.TempDir()) + + if subPath != "" { + // preserve windows backslash :-( + if FilePathSeparator == "\\" { + subPath = strings.Replace(subPath, "\\", "____", -1) + } + dir = dir + UnicodeSanitize((subPath)) + if FilePathSeparator == "\\" { + dir = strings.Replace(dir, "____", "\\", -1) + } + + if exists, _ := Exists(fs, dir); exists { + return addSlash(dir) + } + + err := fs.MkdirAll(dir, 0777) + if err != nil { + panic(err) + } + dir = addSlash(dir) + } + return dir +} + +// Rewrite string to remove non-standard path characters +func UnicodeSanitize(s string) string { + source := []rune(s) + target := make([]rune, 0, len(source)) + + for _, r := range source { + if unicode.IsLetter(r) || + unicode.IsDigit(r) || + unicode.IsMark(r) || + r == '.' || + r == '/' || + r == '\\' || + r == '_' || + r == '-' || + r == '%' || + r == ' ' || + r == '#' { + target = append(target, r) + } + } + + return string(target) +} + +// Transform characters with accents into plain forms. +func NeuterAccents(s string) string { + t := transform.Chain(norm.NFD, transform.RemoveFunc(isMn), norm.NFC) + result, _, _ := transform.String(t, string(s)) + + return result +} + +func isMn(r rune) bool { + return unicode.Is(unicode.Mn, r) // Mn: nonspacing marks +} + +func (a Afero) FileContainsBytes(filename string, subslice []byte) (bool, error) { + return FileContainsBytes(a.Fs, filename, subslice) +} + +// Check if a file contains a specified byte slice. +func FileContainsBytes(fs Fs, filename string, subslice []byte) (bool, error) { + f, err := fs.Open(filename) + if err != nil { + return false, err + } + defer f.Close() + + return readerContainsAny(f, subslice), nil +} + +func (a Afero) FileContainsAnyBytes(filename string, subslices [][]byte) (bool, error) { + return FileContainsAnyBytes(a.Fs, filename, subslices) +} + +// Check if a file contains any of the specified byte slices. +func FileContainsAnyBytes(fs Fs, filename string, subslices [][]byte) (bool, error) { + f, err := fs.Open(filename) + if err != nil { + return false, err + } + defer f.Close() + + return readerContainsAny(f, subslices...), nil +} + +// readerContains reports whether any of the subslices is within r. +func readerContainsAny(r io.Reader, subslices ...[]byte) bool { + + if r == nil || len(subslices) == 0 { + return false + } + + largestSlice := 0 + + for _, sl := range subslices { + if len(sl) > largestSlice { + largestSlice = len(sl) + } + } + + if largestSlice == 0 { + return false + } + + bufflen := largestSlice * 4 + halflen := bufflen / 2 + buff := make([]byte, bufflen) + var err error + var n, i int + + for { + i++ + if i == 1 { + n, err = io.ReadAtLeast(r, buff[:halflen], halflen) + } else { + if i != 2 { + // shift left to catch overlapping matches + copy(buff[:], buff[halflen:]) + } + n, err = io.ReadAtLeast(r, buff[halflen:], halflen) + } + + if n > 0 { + for _, sl := range subslices { + if bytes.Contains(buff, sl) { + return true + } + } + } + + if err != nil { + break + } + } + return false +} + +func (a Afero) DirExists(path string) (bool, error) { + return DirExists(a.Fs, path) +} + +// DirExists checks if a path exists and is a directory. +func DirExists(fs Fs, path string) (bool, error) { + fi, err := fs.Stat(path) + if err == nil && fi.IsDir() { + return true, nil + } + if os.IsNotExist(err) { + return false, nil + } + return false, err +} + +func (a Afero) IsDir(path string) (bool, error) { + return IsDir(a.Fs, path) +} + +// IsDir checks if a given path is a directory. +func IsDir(fs Fs, path string) (bool, error) { + fi, err := fs.Stat(path) + if err != nil { + return false, err + } + return fi.IsDir(), nil +} + +func (a Afero) IsEmpty(path string) (bool, error) { + return IsEmpty(a.Fs, path) +} + +// IsEmpty checks if a given file or directory is empty. +func IsEmpty(fs Fs, path string) (bool, error) { + if b, _ := Exists(fs, path); !b { + return false, fmt.Errorf("%q path does not exist", path) + } + fi, err := fs.Stat(path) + if err != nil { + return false, err + } + if fi.IsDir() { + f, err := fs.Open(path) + if err != nil { + return false, err + } + defer f.Close() + list, err := f.Readdir(-1) + return len(list) == 0, nil + } + return fi.Size() == 0, nil +} + +func (a Afero) Exists(path string) (bool, error) { + return Exists(a.Fs, path) +} + +// Check if a file or directory exists. +func Exists(fs Fs, path string) (bool, error) { + _, err := fs.Stat(path) + if err == nil { + return true, nil + } + if os.IsNotExist(err) { + return false, nil + } + return false, err +} + +func FullBaseFsPath(basePathFs *BasePathFs, relativePath string) string { + combinedPath := filepath.Join(basePathFs.path, relativePath) + if parent, ok := basePathFs.source.(*BasePathFs); ok { + return FullBaseFsPath(parent, combinedPath) + } + + return combinedPath +} From a916b72169bd473fab6c457ee191b7aae8994b7f Mon Sep 17 00:00:00 2001 From: Jason Hall Date: Thu, 7 Mar 2019 10:33:23 -0500 Subject: [PATCH 05/66] Add license header --- pkg/executor/push_test.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pkg/executor/push_test.go b/pkg/executor/push_test.go index 98aedb450..21ed96ee5 100644 --- a/pkg/executor/push_test.go +++ b/pkg/executor/push_test.go @@ -1,3 +1,16 @@ +/* +Copyright 2018 Google LLC +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + package executor import ( From 82f4179ba6f14ce772eb047a6dc6261bf3504277 Mon Sep 17 00:00:00 2001 From: Fred Cox Date: Mon, 25 Mar 2019 22:14:47 +0200 Subject: [PATCH 06/66] Reduce log level for adding file message This makes for massive logs and with it at debug level will be simpler to look at the output of kaniko --- pkg/snapshot/snapshot.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/snapshot/snapshot.go b/pkg/snapshot/snapshot.go index d87378b62..90638168d 100644 --- a/pkg/snapshot/snapshot.go +++ b/pkg/snapshot/snapshot.go @@ -178,7 +178,7 @@ func (s *Snapshotter) scanFullFilesystem() ([]string, []string, error) { return nil, nil, err } if fileChanged { - logrus.Infof("Adding %s to layer, because it was changed.", path) + logrus.Debugf("Adding %s to layer, because it was changed.", path) filesToAdd = append(filesToAdd, path) } } From 0183405c11d0ea2d17f8f845cf3c2683b7e7ebb9 Mon Sep 17 00:00:00 2001 From: Thao-Nguyen Do Date: Mon, 29 Apr 2019 09:16:13 +0200 Subject: [PATCH 07/66] Update base image for main image to golang:1.12 --- deploy/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/Dockerfile b/deploy/Dockerfile index 07847bd17..c6c00db16 100644 --- a/deploy/Dockerfile +++ b/deploy/Dockerfile @@ -14,7 +14,7 @@ # Builds the static Go image to execute in a Kubernetes job -FROM golang:1.10 +FROM golang:1.12 WORKDIR /go/src/github.com/GoogleContainerTools/kaniko # Get GCR credential helper ADD https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v1.5.0/docker-credential-gcr_linux_amd64-1.5.0.tar.gz /usr/local/bin/ From e7fd0d4db5cb651aaa8bba735d65443c9f5758be Mon Sep 17 00:00:00 2001 From: Thao-Nguyen Do Date: Mon, 29 Apr 2019 09:16:48 +0200 Subject: [PATCH 08/66] Update golang to 1.12 in debug image --- deploy/Dockerfile_debug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/Dockerfile_debug b/deploy/Dockerfile_debug index 51cf02a17..877f8727d 100644 --- a/deploy/Dockerfile_debug +++ b/deploy/Dockerfile_debug @@ -15,7 +15,7 @@ # Builds the static Go image to execute in a Kubernetes job # Stage 0: Build the executor binary and get credential helpers -FROM golang:1.10 +FROM golang:1.12 WORKDIR /go/src/github.com/GoogleContainerTools/kaniko # Get GCR credential helper ADD https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v1.5.0/docker-credential-gcr_linux_amd64-1.5.0.tar.gz /usr/local/bin/ From 75e6c9b66c09b054b6cc2a5dee7ce84a0855c9ef Mon Sep 17 00:00:00 2001 From: Thao-Nguyen Do Date: Mon, 29 Apr 2019 09:17:19 +0200 Subject: [PATCH 09/66] Update golang to 1.12 in warmer image --- deploy/Dockerfile_warmer | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/Dockerfile_warmer b/deploy/Dockerfile_warmer index 869438dab..9318e4881 100644 --- a/deploy/Dockerfile_warmer +++ b/deploy/Dockerfile_warmer @@ -14,7 +14,7 @@ # Builds the static Go image to execute in a Kubernetes job -FROM golang:1.10 +FROM golang:1.12 WORKDIR /go/src/github.com/GoogleContainerTools/kaniko COPY . . RUN make out/warmer From 0a3a280e8f391c7f2268454a7ce58608a3fef714 Mon Sep 17 00:00:00 2001 From: Andreas Bergmeier Date: Mon, 20 May 2019 09:36:13 +0200 Subject: [PATCH 10/66] Correct CheckPushPermission comment. --- pkg/executor/push.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/executor/push.go b/pkg/executor/push.go index a02d5b9b9..c5d5fd7a0 100644 --- a/pkg/executor/push.go +++ b/pkg/executor/push.go @@ -48,7 +48,7 @@ func (w *withUserAgent) RoundTrip(r *http.Request) (*http.Response, error) { return w.t.RoundTrip(r) } -// CheckPushPermissionos checks that the configured credentials can be used to +// CheckPushPermissions checks that the configured credentials can be used to // push to every specified destination. func CheckPushPermissions(opts *config.KanikoOptions) error { if opts.NoPush { From 66a052255f2af18736f8dbae1914c6a91294737b Mon Sep 17 00:00:00 2001 From: tralexa <39952205+tralexa@users.noreply.github.com> Date: Sun, 2 Jun 2019 12:24:22 +0300 Subject: [PATCH 11/66] Insecure is now honored --- pkg/cache/cache.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/cache/cache.go b/pkg/cache/cache.go index d11de89af..33c7cae5b 100644 --- a/pkg/cache/cache.go +++ b/pkg/cache/cache.go @@ -59,7 +59,7 @@ func (rc *RegistryCache) RetrieveLayer(ck string) (v1.Image, error) { } registryName := cacheRef.Repository.Registry.Name() - if rc.Opts.InsecureRegistries.Contains(registryName) { + if rc.Opts.Insecure || rc.Opts.InsecureRegistries.Contains(registryName) { newReg, err := name.NewInsecureRegistry(registryName, name.WeakValidation) if err != nil { return nil, err From f8e37a2ba0cbe769d36d211a2271e41f69be5d04 Mon Sep 17 00:00:00 2001 From: Tao Yang Date: Wed, 14 Aug 2019 19:36:59 +0800 Subject: [PATCH 12/66] Set up CI with Azure Pipelines [skip ci] --- azure-pipelines.yml | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 azure-pipelines.yml diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 000000000..c52ec96cc --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,39 @@ +# Go +# Build your Go project. +# Add steps that test, save build artifacts, deploy, and more: +# https://docs.microsoft.com/azure/devops/pipelines/languages/go + +trigger: +- master + +pool: + vmImage: 'ubuntu-latest' + +variables: + GOBIN: '$(GOPATH)/bin' # Go binaries path + GOROOT: '/usr/local/go1.11' # Go installation path + GOPATH: '$(system.defaultWorkingDirectory)/gopath' # Go workspace path + modulePath: '$(GOPATH)/src/github.com/$(build.repository.name)' # Path to the module's code + +steps: +- script: | + mkdir -p '$(GOBIN)' + mkdir -p '$(GOPATH)/pkg' + mkdir -p '$(modulePath)' + shopt -s extglob + shopt -s dotglob + mv !(gopath) '$(modulePath)' + echo '##vso[task.prependpath]$(GOBIN)' + echo '##vso[task.prependpath]$(GOROOT)/bin' + displayName: 'Set up the Go workspace' + +- script: | + go version + go get -v -t -d ./... + if [ -f Gopkg.toml ]; then + curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh + dep ensure + fi + go build -v . + workingDirectory: '$(modulePath)' + displayName: 'Get dependencies, then build' From 4327e9ba24c9cc5d6ddb126cd043dedc1564d76f Mon Sep 17 00:00:00 2001 From: Hugues Alary Date: Thu, 8 Aug 2019 17:54:37 -0700 Subject: [PATCH 13/66] Resolve relative paths to absolute paths in command line arguments The executor accepts a few arguments dockerfile, context, cache-dir and digest-file that all represent paths. This commits allows those paths to be relative to the working directory of the executor. Fixes #732 #731 #675 --- cmd/executor/cmd/root.go | 34 +++++++++++++++++++++++++++++++++ integration/images.go | 30 +++++++++++++++++++++++++++++ integration/integration_test.go | 24 +++++++++++++++++++++++ 3 files changed, 88 insertions(+) diff --git a/cmd/executor/cmd/root.go b/cmd/executor/cmd/root.go index 0dd717f86..cdeb7b389 100644 --- a/cmd/executor/cmd/root.go +++ b/cmd/executor/cmd/root.go @@ -81,6 +81,9 @@ var RootCmd = &cobra.Command{ if err := executor.CheckPushPermissions(opts); err != nil { exit(errors.Wrap(err, "error checking push permissions -- make sure you entered the correct tag name, and that you are authenticated correctly, and try again")) } + if err := resolveRelativePaths(); err != nil { + exit(errors.Wrap(err, "error resolving relative paths to absolute paths")) + } if err := os.Chdir("/"); err != nil { exit(errors.Wrap(err, "error changing to root dir")) } @@ -227,6 +230,37 @@ func resolveSourceContext() error { return nil } +func resolveRelativePaths() error { + optsPaths := []*string{ + &opts.DockerfilePath, + &opts.SrcContext, + &opts.CacheDir, + &opts.TarPath, + &opts.DigestFile, + } + + for _, p := range optsPaths { + // Skip empty path + if *p == "" { + continue + } + // Skip path that is already absolute + if filepath.IsAbs(*p) { + logrus.Debugf("Path %s is absolute, skipping", *p) + continue + } + + // Resolve relative path to absolute path + var err error + relp := *p // save original relative path + if *p, err = filepath.Abs(*p); err != nil { + return errors.Wrapf(err, "Couldn't resolve relative path %s to an absolute path", *p) + } + logrus.Debugf("Resolved relative path %s to %s", relp, *p) + } + return nil +} + func exit(err error) { fmt.Println(err) os.Exit(1) diff --git a/integration/images.go b/integration/images.go index 4f7f3b8bc..a9847aef8 100644 --- a/integration/images.go +++ b/integration/images.go @@ -286,3 +286,33 @@ func (d *DockerFileBuilder) buildCachedImages(imageRepo, cacheRepo, dockerfilesP } return nil } + +// buildRelativePathsImage builds the images for testing passing relatives paths to Kaniko +func (d *DockerFileBuilder) buildRelativePathsImage(imageRepo, dockerfile string) error { + _, ex, _, _ := runtime.Caller(0) + cwd := filepath.Dir(ex) + + buildContextPath := "./relative-subdirectory" + kanikoImage := GetKanikoImage(imageRepo, dockerfile) + + kanikoCmd := exec.Command("docker", + append([]string{"run", + "-v", os.Getenv("HOME") + "/.config/gcloud:/root/.config/gcloud", + "-v", cwd + ":/workspace", + ExecutorImage, + "-f", dockerfile, + "-d", kanikoImage, + "--digest-file", "./digest", + "-c", buildContextPath, + })..., + ) + + timer := timing.Start(dockerfile + "_kaniko_relative_paths") + _, err := RunCommandWithoutTest(kanikoCmd) + timing.DefaultRun.Stop(timer) + if err != nil { + return fmt.Errorf("Failed to build relative path image %s with kaniko command \"%s\": %s", kanikoImage, kanikoCmd.Args, err) + } + + return nil +} diff --git a/integration/integration_test.go b/integration/integration_test.go index fcd6246f9..628da94fe 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -386,6 +386,30 @@ func TestCache(t *testing.T) { } } +func TestRelativePaths(t *testing.T) { + + dockerfile := "Dockerfile_test_copy" + + t.Run("test_relative_"+dockerfile, func(t *testing.T) { + t.Parallel() + imageBuilder.buildRelativePathsImage(config.imageRepo, dockerfile) + + dockerImage := GetDockerImage(config.imageRepo, dockerfile) + kanikoImage := GetKanikoImage(config.imageRepo, dockerfile) + + // container-diff + daemonDockerImage := daemonPrefix + dockerImage + containerdiffCmd := exec.Command("container-diff", "diff", "--no-cache", + daemonDockerImage, kanikoImage, + "-q", "--type=file", "--type=metadata", "--json") + diff := RunCommand(containerdiffCmd, t) + t.Logf("diff = %s", string(diff)) + + expected := fmt.Sprintf(emptyContainerDiff, dockerImage, kanikoImage, dockerImage, kanikoImage) + checkContainerDiffOutput(t, diff, expected) + }) +} + type fileDiff struct { Name string Size int From e9af4cfbf6ae6ff5a38cbf0e1011a4fa168a5bc2 Mon Sep 17 00:00:00 2001 From: Tao Yang Date: Mon, 2 Sep 2019 13:12:06 +0000 Subject: [PATCH 14/66] remove azure-pipelines.yml --- azure-pipelines.yml | 39 --------------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 azure-pipelines.yml diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index c52ec96cc..000000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,39 +0,0 @@ -# Go -# Build your Go project. -# Add steps that test, save build artifacts, deploy, and more: -# https://docs.microsoft.com/azure/devops/pipelines/languages/go - -trigger: -- master - -pool: - vmImage: 'ubuntu-latest' - -variables: - GOBIN: '$(GOPATH)/bin' # Go binaries path - GOROOT: '/usr/local/go1.11' # Go installation path - GOPATH: '$(system.defaultWorkingDirectory)/gopath' # Go workspace path - modulePath: '$(GOPATH)/src/github.com/$(build.repository.name)' # Path to the module's code - -steps: -- script: | - mkdir -p '$(GOBIN)' - mkdir -p '$(GOPATH)/pkg' - mkdir -p '$(modulePath)' - shopt -s extglob - shopt -s dotglob - mv !(gopath) '$(modulePath)' - echo '##vso[task.prependpath]$(GOBIN)' - echo '##vso[task.prependpath]$(GOROOT)/bin' - displayName: 'Set up the Go workspace' - -- script: | - go version - go get -v -t -d ./... - if [ -f Gopkg.toml ]; then - curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh - dep ensure - fi - go build -v . - workingDirectory: '$(modulePath)' - displayName: 'Get dependencies, then build' From a1cc42bdb753d1c079afbb06f058a5597d843f41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D1=82=D0=BE=D0=BD=20=D0=9A=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Tue, 10 Sep 2019 00:44:27 +0200 Subject: [PATCH 15/66] Fix https://github.com/GoogleContainerTools/kaniko/issues/756 --- pkg/util/fs_util.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index d22dcb4aa..fa7a5db7d 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -121,6 +121,10 @@ func DeleteFilesystem() error { logrus.Info("Deleting filesystem...") return filepath.Walk(constants.RootDir, func(path string, info os.FileInfo, _ error) error { if CheckWhitelist(path) { + if ! isExist(path) { + logrus.Debugf("Path %s whitelisted, but not exists", path) + return nil + } if info.IsDir() { return filepath.SkipDir } @@ -137,6 +141,13 @@ func DeleteFilesystem() error { return os.RemoveAll(path) }) } +// isExists returns tru if path exists +func isExist(path string) bool { + if _, err := os.Stat(path); err == nil { + return true + } + return false +} // ChildDirInWhitelist returns true if there is a child file or directory of the path in the whitelist func childDirInWhitelist(path string) bool { From 38474fad116699a485c3a913e71feab123b3044b Mon Sep 17 00:00:00 2001 From: Monard Vong Date: Sun, 15 Sep 2019 23:08:44 +0200 Subject: [PATCH 16/66] Fix #691 - ADD does not understand ENV variables --- pkg/util/command_util.go | 3 ++- pkg/util/command_util_test.go | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/pkg/util/command_util.go b/pkg/util/command_util.go index 6d9471ebd..15ed41b18 100644 --- a/pkg/util/command_util.go +++ b/pkg/util/command_util.go @@ -65,7 +65,8 @@ func ResolveEnvironmentReplacementList(values, envs []string, isFilepath bool) ( func ResolveEnvironmentReplacement(value string, envs []string, isFilepath bool) (string, error) { shlex := shell.NewLex(parser.DefaultEscapeToken) fp, err := shlex.ProcessWord(value, envs) - if !isFilepath { + // Check after replacement if value is a remote URL + if !isFilepath || IsSrcRemoteFileURL(fp) { return fp, err } if err != nil { diff --git a/pkg/util/command_util_test.go b/pkg/util/command_util_test.go index 3e2342595..6f7aa01a7 100644 --- a/pkg/util/command_util_test.go +++ b/pkg/util/command_util_test.go @@ -97,6 +97,14 @@ var testEnvReplacement = []struct { }, expectedPath: "8080/udp", }, + { + path: "$url", + envs: []string{ + "url=http://example.com", + }, + isFilepath: true, + expectedPath: "http://example.com", + }, } func Test_EnvReplacement(t *testing.T) { @@ -472,15 +480,16 @@ func TestResolveEnvironmentReplacementList(t *testing.T) { name: "url", args: args{ values: []string{ - "https://google.com/$foo", "$bar", + "https://google.com/$foo", "$bar", "$url", }, envs: []string{ "foo=baz", "bar=bat", + "url=https://google.com", }, }, - want: []string{"https://google.com/baz", "bat"}, - }, + want: []string{"https://google.com/baz", "bat", "https://google.com"}, + }, { name: "mixed", args: args{ From 13b8fb634597510f8ff11b2d78890beaee650051 Mon Sep 17 00:00:00 2001 From: Monard Vong Date: Sun, 15 Sep 2019 23:29:54 +0200 Subject: [PATCH 17/66] remove trailing whitespace --- pkg/util/command_util_test.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/util/command_util_test.go b/pkg/util/command_util_test.go index 6f7aa01a7..c9b0255b1 100644 --- a/pkg/util/command_util_test.go +++ b/pkg/util/command_util_test.go @@ -105,6 +105,14 @@ var testEnvReplacement = []struct { isFilepath: true, expectedPath: "http://example.com", }, + { + path: "$url", + envs: []string{ + "url=http://example.com", + }, + isFilepath: false, + expectedPath: "http://example.com", + }, } func Test_EnvReplacement(t *testing.T) { @@ -489,7 +497,7 @@ func TestResolveEnvironmentReplacementList(t *testing.T) { }, }, want: []string{"https://google.com/baz", "bat", "https://google.com"}, - }, + }, { name: "mixed", args: args{ From d96cbfe0d355efb6c71a4349adfbba90220d7a86 Mon Sep 17 00:00:00 2001 From: Monard Vong Date: Mon, 16 Sep 2019 00:03:10 +0200 Subject: [PATCH 18/66] Fix formatting --- pkg/util/command_util.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/util/command_util.go b/pkg/util/command_util.go index 15ed41b18..68dfb6074 100644 --- a/pkg/util/command_util.go +++ b/pkg/util/command_util.go @@ -66,7 +66,7 @@ func ResolveEnvironmentReplacement(value string, envs []string, isFilepath bool) shlex := shell.NewLex(parser.DefaultEscapeToken) fp, err := shlex.ProcessWord(value, envs) // Check after replacement if value is a remote URL - if !isFilepath || IsSrcRemoteFileURL(fp) { + if !isFilepath || IsSrcRemoteFileURL(fp) { return fp, err } if err != nil { From 62acf3ac1ddbc70ad1670f285c08dd06390e2ecd Mon Sep 17 00:00:00 2001 From: alexa Date: Mon, 16 Sep 2019 16:35:45 +0300 Subject: [PATCH 19/66] change schema to http when Insecure flag is enabled --- pkg/executor/push.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pkg/executor/push.go b/pkg/executor/push.go index e0ebf2111..f34e60d25 100644 --- a/pkg/executor/push.go +++ b/pkg/executor/push.go @@ -77,6 +77,13 @@ func CheckPushPermissions(opts *config.KanikoOptions) error { } registryName := destRef.Repository.Registry.Name() + if opts.Insecure || opts.InsecureRegistries.Contains(registryName) { + newReg, err := name.NewRegistry(registryName, name.WeakValidation, name.Insecure) + if err != nil { + return errors.Wrap(err, "getting new insecure registry") + } + destRef.Repository.Registry = newReg + } tr := makeTransport(opts, registryName) if err := remote.CheckPushPermission(destRef, creds.GetKeychain(), tr); err != nil { return errors.Wrapf(err, "checking push permission for %q", destRef) From c87d2dba9c994a2d4e2605919fff0ada35c426c6 Mon Sep 17 00:00:00 2001 From: Nao YONASHIRO Date: Tue, 4 Jun 2019 18:09:25 +0900 Subject: [PATCH 20/66] feat: replace md5 to highwayhash --- Gopkg.lock | 12 +- Gopkg.toml | 4 + pkg/util/util.go | 14 +- vendor/github.com/minio/HighwayHash/LICENSE | 21 ++ .../minio/HighwayHash/highwayhash.go | 225 ++++++++++++++ .../HighwayHash/highwayhashAVX2_amd64.go | 68 ++++ .../minio/HighwayHash/highwayhashAVX2_amd64.s | 249 +++++++++++++++ .../minio/HighwayHash/highwayhash_amd64.go | 50 +++ .../minio/HighwayHash/highwayhash_amd64.s | 294 ++++++++++++++++++ .../minio/HighwayHash/highwayhash_arm64.go | 33 ++ .../minio/HighwayHash/highwayhash_arm64.s | 116 +++++++ .../minio/HighwayHash/highwayhash_generic.go | 161 ++++++++++ .../minio/HighwayHash/highwayhash_ppc64le.go | 33 ++ .../minio/HighwayHash/highwayhash_ppc64le.s | 182 +++++++++++ .../minio/HighwayHash/highwayhash_ref.go | 28 ++ vendor/golang.org/x/sys/cpu/cpu.go | 38 +++ vendor/golang.org/x/sys/cpu/cpu_arm.go | 7 + vendor/golang.org/x/sys/cpu/cpu_arm64.go | 7 + vendor/golang.org/x/sys/cpu/cpu_gc_x86.go | 16 + vendor/golang.org/x/sys/cpu/cpu_gccgo.c | 43 +++ vendor/golang.org/x/sys/cpu/cpu_gccgo.go | 26 ++ vendor/golang.org/x/sys/cpu/cpu_mips64x.go | 9 + vendor/golang.org/x/sys/cpu/cpu_mipsx.go | 9 + vendor/golang.org/x/sys/cpu/cpu_ppc64x.go | 9 + vendor/golang.org/x/sys/cpu/cpu_s390x.go | 7 + vendor/golang.org/x/sys/cpu/cpu_x86.go | 55 ++++ vendor/golang.org/x/sys/cpu/cpu_x86.s | 27 ++ 27 files changed, 1740 insertions(+), 3 deletions(-) create mode 100644 vendor/github.com/minio/HighwayHash/LICENSE create mode 100644 vendor/github.com/minio/HighwayHash/highwayhash.go create mode 100644 vendor/github.com/minio/HighwayHash/highwayhashAVX2_amd64.go create mode 100644 vendor/github.com/minio/HighwayHash/highwayhashAVX2_amd64.s create mode 100644 vendor/github.com/minio/HighwayHash/highwayhash_amd64.go create mode 100644 vendor/github.com/minio/HighwayHash/highwayhash_amd64.s create mode 100644 vendor/github.com/minio/HighwayHash/highwayhash_arm64.go create mode 100644 vendor/github.com/minio/HighwayHash/highwayhash_arm64.s create mode 100644 vendor/github.com/minio/HighwayHash/highwayhash_generic.go create mode 100644 vendor/github.com/minio/HighwayHash/highwayhash_ppc64le.go create mode 100644 vendor/github.com/minio/HighwayHash/highwayhash_ppc64le.s create mode 100644 vendor/github.com/minio/HighwayHash/highwayhash_ref.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_arm.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_arm64.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_gc_x86.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_gccgo.c create mode 100644 vendor/golang.org/x/sys/cpu/cpu_gccgo.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_mips64x.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_mipsx.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_ppc64x.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_s390x.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_x86.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_x86.s diff --git a/Gopkg.lock b/Gopkg.lock index 57a55af22..859733ccb 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -620,6 +620,14 @@ revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c" version = "v1.0.1" +[[projects]] + digest = "1:56eaee71300a91f7a2f096b5d1d1d5389ebe8e69c068ec7d84c20459f599ddde" + name = "github.com/minio/HighwayHash" + packages = ["."] + pruneopts = "NUT" + revision = "02ca4b43caa3297fbb615700d8800acc7933be98" + version = "v1.0.0" + [[projects]] digest = "1:a4df73029d2c42fabcb6b41e327d2f87e685284ec03edf76921c267d9cfc9c23" name = "github.com/mitchellh/go-homedir" @@ -983,9 +991,10 @@ [[projects]] branch = "master" - digest = "1:eeb413d109f4b2813de0b5b23645d7a503db926cae8f10dfdcf248d15499314f" + digest = "1:2d5f7cd5c2bc42a4d5b18f711d482f14689a30212bbe0e398e151b3e2147cb86" name = "golang.org/x/sys" packages = [ + "cpu", "unix", "windows", "windows/registry", @@ -1376,6 +1385,7 @@ "github.com/google/go-containerregistry/pkg/v1/tarball", "github.com/google/go-github/github", "github.com/karrick/godirwalk", + "github.com/minio/HighwayHash", "github.com/moby/buildkit/frontend/dockerfile/instructions", "github.com/moby/buildkit/frontend/dockerfile/parser", "github.com/moby/buildkit/frontend/dockerfile/shell", diff --git a/Gopkg.toml b/Gopkg.toml index e502f07ff..64aa95abe 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -46,3 +46,7 @@ required = [ [[constraint]] name = "gopkg.in/src-d/go-git.v4" version = "4.6.0" + +[[constraint]] + name = "github.com/minio/HighwayHash" + version = "1.0.0" diff --git a/pkg/util/util.go b/pkg/util/util.go index 873cbae20..234ab4001 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -23,8 +23,10 @@ import ( "io" "os" "strconv" + "sync" "syscall" + highwayhash "github.com/minio/HighwayHash" "github.com/pkg/errors" "github.com/sirupsen/logrus" ) @@ -44,8 +46,14 @@ func ConfigureLogging(logLevel string) error { // Hasher returns a hash function, used in snapshotting to determine if a file has changed func Hasher() func(string) (string, error) { + pool := sync.Pool{ + New: func() interface{} { + return make([]byte, highwayhash.Size * 10 * 1024) + }, + } + key := make([]byte, highwayhash.Size) hasher := func(p string) (string, error) { - h := md5.New() + h, _ := highwayhash.New(key) fi, err := os.Lstat(p) if err != nil { return "", err @@ -63,7 +71,9 @@ func Hasher() func(string) (string, error) { return "", err } defer f.Close() - if _, err := io.Copy(h, f); err != nil { + buf := pool.Get().([]byte) + defer pool.Put(buf) + if _, err := io.CopyBuffer(h, f, buf); err != nil { return "", err } } diff --git a/vendor/github.com/minio/HighwayHash/LICENSE b/vendor/github.com/minio/HighwayHash/LICENSE new file mode 100644 index 000000000..e3a0a95a0 --- /dev/null +++ b/vendor/github.com/minio/HighwayHash/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Minio Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/minio/HighwayHash/highwayhash.go b/vendor/github.com/minio/HighwayHash/highwayhash.go new file mode 100644 index 000000000..629fdf2e1 --- /dev/null +++ b/vendor/github.com/minio/HighwayHash/highwayhash.go @@ -0,0 +1,225 @@ +// Copyright (c) 2017 Minio Inc. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +// Package highwayhash implements the pseudo-random-function (PRF) HighwayHash. +// HighwayHash is a fast hash function designed to defend hash-flooding attacks +// or to authenticate short-lived messages. +// +// HighwayHash is not a general purpose cryptographic hash function and does not +// provide (strong) collision resistance. +package highwayhash + +import ( + "encoding/binary" + "errors" + "hash" +) + +const ( + // Size is the size of HighwayHash-256 checksum in bytes. + Size = 32 + // Size128 is the size of HighwayHash-128 checksum in bytes. + Size128 = 16 + // Size64 is the size of HighwayHash-64 checksum in bytes. + Size64 = 8 +) + +var errKeySize = errors.New("highwayhash: invalid key size") + +// New returns a hash.Hash computing the HighwayHash-256 checksum. +// It returns a non-nil error if the key is not 32 bytes long. +func New(key []byte) (hash.Hash, error) { + if len(key) != Size { + return nil, errKeySize + } + h := &digest{size: Size} + copy(h.key[:], key) + h.Reset() + return h, nil +} + +// New128 returns a hash.Hash computing the HighwayHash-128 checksum. +// It returns a non-nil error if the key is not 32 bytes long. +func New128(key []byte) (hash.Hash, error) { + if len(key) != Size { + return nil, errKeySize + } + h := &digest{size: Size128} + copy(h.key[:], key) + h.Reset() + return h, nil +} + +// New64 returns a hash.Hash computing the HighwayHash-64 checksum. +// It returns a non-nil error if the key is not 32 bytes long. +func New64(key []byte) (hash.Hash64, error) { + if len(key) != Size { + return nil, errKeySize + } + h := new(digest64) + h.size = Size64 + copy(h.key[:], key) + h.Reset() + return h, nil +} + +// Sum computes the HighwayHash-256 checksum of data. +// It panics if the key is not 32 bytes long. +func Sum(data, key []byte) [Size]byte { + if len(key) != Size { + panic(errKeySize) + } + var state [16]uint64 + initialize(&state, key) + if n := len(data) & (^(Size - 1)); n > 0 { + update(&state, data[:n]) + data = data[n:] + } + if len(data) > 0 { + var block [Size]byte + offset := copy(block[:], data) + hashBuffer(&state, &block, offset) + } + var hash [Size]byte + finalize(hash[:], &state) + return hash +} + +// Sum128 computes the HighwayHash-128 checksum of data. +// It panics if the key is not 32 bytes long. +func Sum128(data, key []byte) [Size128]byte { + if len(key) != Size { + panic(errKeySize) + } + var state [16]uint64 + initialize(&state, key) + if n := len(data) & (^(Size - 1)); n > 0 { + update(&state, data[:n]) + data = data[n:] + } + if len(data) > 0 { + var block [Size]byte + offset := copy(block[:], data) + hashBuffer(&state, &block, offset) + } + var hash [Size128]byte + finalize(hash[:], &state) + return hash +} + +// Sum64 computes the HighwayHash-64 checksum of data. +// It panics if the key is not 32 bytes long. +func Sum64(data, key []byte) uint64 { + if len(key) != Size { + panic(errKeySize) + } + var state [16]uint64 + initialize(&state, key) + if n := len(data) & (^(Size - 1)); n > 0 { + update(&state, data[:n]) + data = data[n:] + } + if len(data) > 0 { + var block [Size]byte + offset := copy(block[:], data) + hashBuffer(&state, &block, offset) + } + var hash [Size64]byte + finalize(hash[:], &state) + return binary.LittleEndian.Uint64(hash[:]) +} + +type digest64 struct{ digest } + +func (d *digest64) Sum64() uint64 { + state := d.state + if d.offset > 0 { + hashBuffer(&state, &d.buffer, d.offset) + } + var hash [8]byte + finalize(hash[:], &state) + return binary.LittleEndian.Uint64(hash[:]) +} + +type digest struct { + state [16]uint64 // v0 | v1 | mul0 | mul1 + + key, buffer [Size]byte + offset int + + size int +} + +func (d *digest) Size() int { return d.size } + +func (d *digest) BlockSize() int { return Size } + +func (d *digest) Reset() { + initialize(&d.state, d.key[:]) + d.offset = 0 +} + +func (d *digest) Write(p []byte) (n int, err error) { + n = len(p) + if d.offset > 0 { + remaining := Size - d.offset + if n < remaining { + d.offset += copy(d.buffer[d.offset:], p) + return + } + copy(d.buffer[d.offset:], p[:remaining]) + update(&d.state, d.buffer[:]) + p = p[remaining:] + d.offset = 0 + } + if nn := len(p) & (^(Size - 1)); nn > 0 { + update(&d.state, p[:nn]) + p = p[nn:] + } + if len(p) > 0 { + d.offset = copy(d.buffer[d.offset:], p) + } + return +} + +func (d *digest) Sum(b []byte) []byte { + state := d.state + if d.offset > 0 { + hashBuffer(&state, &d.buffer, d.offset) + } + var hash [Size]byte + finalize(hash[:d.size], &state) + return append(b, hash[:d.size]...) +} + +func hashBuffer(state *[16]uint64, buffer *[32]byte, offset int) { + var block [Size]byte + mod32 := (uint64(offset) << 32) + uint64(offset) + for i := range state[:4] { + state[i] += mod32 + } + for i := range state[4:8] { + t0 := uint32(state[i+4]) + t0 = (t0 << uint(offset)) | (t0 >> uint(32-offset)) + + t1 := uint32(state[i+4] >> 32) + t1 = (t1 << uint(offset)) | (t1 >> uint(32-offset)) + + state[i+4] = (uint64(t1) << 32) | uint64(t0) + } + + mod4 := offset & 3 + remain := offset - mod4 + + copy(block[:], buffer[:remain]) + if offset >= 16 { + copy(block[28:], buffer[offset-4:]) + } else if mod4 != 0 { + last := uint32(buffer[remain]) + last += uint32(buffer[remain+mod4>>1]) << 8 + last += uint32(buffer[offset-1]) << 16 + binary.LittleEndian.PutUint32(block[16:], last) + } + update(state, block[:]) +} diff --git a/vendor/github.com/minio/HighwayHash/highwayhashAVX2_amd64.go b/vendor/github.com/minio/HighwayHash/highwayhashAVX2_amd64.go new file mode 100644 index 000000000..d2b03d75a --- /dev/null +++ b/vendor/github.com/minio/HighwayHash/highwayhashAVX2_amd64.go @@ -0,0 +1,68 @@ +// Copyright (c) 2017 Minio Inc. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +// +build go1.8 +// +build amd64 !gccgo !appengine !nacl + +package highwayhash + +import "golang.org/x/sys/cpu" + +var ( + useSSE4 = cpu.X86.HasSSE41 + useAVX2 = cpu.X86.HasAVX2 + useNEON = false + useVMX = false +) + +//go:noescape +func initializeSSE4(state *[16]uint64, key []byte) + +//go:noescape +func initializeAVX2(state *[16]uint64, key []byte) + +//go:noescape +func updateSSE4(state *[16]uint64, msg []byte) + +//go:noescape +func updateAVX2(state *[16]uint64, msg []byte) + +//go:noescape +func finalizeSSE4(out []byte, state *[16]uint64) + +//go:noescape +func finalizeAVX2(out []byte, state *[16]uint64) + +func initialize(state *[16]uint64, key []byte) { + switch { + case useAVX2: + initializeAVX2(state, key) + case useSSE4: + initializeSSE4(state, key) + default: + initializeGeneric(state, key) + } +} + +func update(state *[16]uint64, msg []byte) { + switch { + case useAVX2: + updateAVX2(state, msg) + case useSSE4: + updateSSE4(state, msg) + default: + updateGeneric(state, msg) + } +} + +func finalize(out []byte, state *[16]uint64) { + switch { + case useAVX2: + finalizeAVX2(out, state) + case useSSE4: + finalizeSSE4(out, state) + default: + finalizeGeneric(out, state) + } +} diff --git a/vendor/github.com/minio/HighwayHash/highwayhashAVX2_amd64.s b/vendor/github.com/minio/HighwayHash/highwayhashAVX2_amd64.s new file mode 100644 index 000000000..03a1eb367 --- /dev/null +++ b/vendor/github.com/minio/HighwayHash/highwayhashAVX2_amd64.s @@ -0,0 +1,249 @@ +// Copyright (c) 2017 Minio Inc. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +// +build go1.8 +// +build amd64 !gccgo !appengine !nacl + +#include "textflag.h" + +DATA ·consAVX2<>+0x00(SB)/8, $0xdbe6d5d5fe4cce2f +DATA ·consAVX2<>+0x08(SB)/8, $0xa4093822299f31d0 +DATA ·consAVX2<>+0x10(SB)/8, $0x13198a2e03707344 +DATA ·consAVX2<>+0x18(SB)/8, $0x243f6a8885a308d3 +DATA ·consAVX2<>+0x20(SB)/8, $0x3bd39e10cb0ef593 +DATA ·consAVX2<>+0x28(SB)/8, $0xc0acf169b5f18a8c +DATA ·consAVX2<>+0x30(SB)/8, $0xbe5466cf34e90c6c +DATA ·consAVX2<>+0x38(SB)/8, $0x452821e638d01377 +GLOBL ·consAVX2<>(SB), (NOPTR+RODATA), $64 + +DATA ·zipperMergeAVX2<>+0x00(SB)/8, $0xf010e05020c03 +DATA ·zipperMergeAVX2<>+0x08(SB)/8, $0x70806090d0a040b +DATA ·zipperMergeAVX2<>+0x10(SB)/8, $0xf010e05020c03 +DATA ·zipperMergeAVX2<>+0x18(SB)/8, $0x70806090d0a040b +GLOBL ·zipperMergeAVX2<>(SB), (NOPTR+RODATA), $32 + +#define REDUCE_MOD(x0, x1, x2, x3, tmp0, tmp1, y0, y1) \ + MOVQ $0x3FFFFFFFFFFFFFFF, tmp0 \ + ANDQ tmp0, x3 \ + MOVQ x2, y0 \ + MOVQ x3, y1 \ + \ + MOVQ x2, tmp0 \ + MOVQ x3, tmp1 \ + SHLQ $1, tmp1 \ + SHRQ $63, tmp0 \ + MOVQ tmp1, x3 \ + ORQ tmp0, x3 \ + \ + SHLQ $1, x2 \ + \ + MOVQ y0, tmp0 \ + MOVQ y1, tmp1 \ + SHLQ $2, tmp1 \ + SHRQ $62, tmp0 \ + MOVQ tmp1, y1 \ + ORQ tmp0, y1 \ + \ + SHLQ $2, y0 \ + \ + XORQ x0, y0 \ + XORQ x2, y0 \ + XORQ x1, y1 \ + XORQ x3, y1 + +#define UPDATE(msg) \ + VPADDQ msg, Y2, Y2 \ + VPADDQ Y3, Y2, Y2 \ + \ + VPSRLQ $32, Y1, Y0 \ + BYTE $0xC5; BYTE $0xFD; BYTE $0xF4; BYTE $0xC2 \ // VPMULUDQ Y2, Y0, Y0 + VPXOR Y0, Y3, Y3 \ + \ + VPADDQ Y4, Y1, Y1 \ + \ + VPSRLQ $32, Y2, Y0 \ + BYTE $0xC5; BYTE $0xFD; BYTE $0xF4; BYTE $0xC1 \ // VPMULUDQ Y1, Y0, Y0 + VPXOR Y0, Y4, Y4 \ + \ + VPSHUFB Y5, Y2, Y0 \ + VPADDQ Y0, Y1, Y1 \ + \ + VPSHUFB Y5, Y1, Y0 \ + VPADDQ Y0, Y2, Y2 + +// func initializeAVX2(state *[16]uint64, key []byte) +TEXT ·initializeAVX2(SB), 4, $0-32 + MOVQ state+0(FP), AX + MOVQ key_base+8(FP), BX + MOVQ $·consAVX2<>(SB), CX + + VMOVDQU 0(BX), Y1 + VPSHUFD $177, Y1, Y2 + + VMOVDQU 0(CX), Y3 + VMOVDQU 32(CX), Y4 + + VPXOR Y3, Y1, Y1 + VPXOR Y4, Y2, Y2 + + VMOVDQU Y1, 0(AX) + VMOVDQU Y2, 32(AX) + VMOVDQU Y3, 64(AX) + VMOVDQU Y4, 96(AX) + VZEROUPPER + RET + +// func updateAVX2(state *[16]uint64, msg []byte) +TEXT ·updateAVX2(SB), 4, $0-32 + MOVQ state+0(FP), AX + MOVQ msg_base+8(FP), BX + MOVQ msg_len+16(FP), CX + + CMPQ CX, $32 + JB DONE + + VMOVDQU 0(AX), Y1 + VMOVDQU 32(AX), Y2 + VMOVDQU 64(AX), Y3 + VMOVDQU 96(AX), Y4 + + VMOVDQU ·zipperMergeAVX2<>(SB), Y5 + +LOOP: + VMOVDQU 0(BX), Y0 + UPDATE(Y0) + + ADDQ $32, BX + SUBQ $32, CX + JA LOOP + + VMOVDQU Y1, 0(AX) + VMOVDQU Y2, 32(AX) + VMOVDQU Y3, 64(AX) + VMOVDQU Y4, 96(AX) + VZEROUPPER + +DONE: + RET + +// func finalizeAVX2(out []byte, state *[16]uint64) +TEXT ·finalizeAVX2(SB), 4, $0-32 + MOVQ state+24(FP), AX + MOVQ out_base+0(FP), BX + MOVQ out_len+8(FP), CX + + VMOVDQU 0(AX), Y1 + VMOVDQU 32(AX), Y2 + VMOVDQU 64(AX), Y3 + VMOVDQU 96(AX), Y4 + + VMOVDQU ·zipperMergeAVX2<>(SB), Y5 + + VPERM2I128 $1, Y1, Y1, Y0 + VPSHUFD $177, Y0, Y0 + UPDATE(Y0) + + VPERM2I128 $1, Y1, Y1, Y0 + VPSHUFD $177, Y0, Y0 + UPDATE(Y0) + + VPERM2I128 $1, Y1, Y1, Y0 + VPSHUFD $177, Y0, Y0 + UPDATE(Y0) + + VPERM2I128 $1, Y1, Y1, Y0 + VPSHUFD $177, Y0, Y0 + UPDATE(Y0) + + CMPQ CX, $8 + JE skipUpdate // Just 4 rounds for 64-bit checksum + + VPERM2I128 $1, Y1, Y1, Y0 + VPSHUFD $177, Y0, Y0 + UPDATE(Y0) + + VPERM2I128 $1, Y1, Y1, Y0 + VPSHUFD $177, Y0, Y0 + UPDATE(Y0) + + CMPQ CX, $16 + JE skipUpdate // 6 rounds for 128-bit checksum + + VPERM2I128 $1, Y1, Y1, Y0 + VPSHUFD $177, Y0, Y0 + UPDATE(Y0) + + VPERM2I128 $1, Y1, Y1, Y0 + VPSHUFD $177, Y0, Y0 + UPDATE(Y0) + + VPERM2I128 $1, Y1, Y1, Y0 + VPSHUFD $177, Y0, Y0 + UPDATE(Y0) + + VPERM2I128 $1, Y1, Y1, Y0 + VPSHUFD $177, Y0, Y0 + UPDATE(Y0) + +skipUpdate: + VMOVDQU Y1, 0(AX) + VMOVDQU Y2, 32(AX) + VMOVDQU Y3, 64(AX) + VMOVDQU Y4, 96(AX) + VZEROUPPER + + CMPQ CX, $8 + JE hash64 + CMPQ CX, $16 + JE hash128 + + // 256-bit checksum + MOVQ 0*8(AX), R8 + MOVQ 1*8(AX), R9 + MOVQ 4*8(AX), R10 + MOVQ 5*8(AX), R11 + ADDQ 8*8(AX), R8 + ADDQ 9*8(AX), R9 + ADDQ 12*8(AX), R10 + ADDQ 13*8(AX), R11 + + REDUCE_MOD(R8, R9, R10, R11, R12, R13, R14, R15) + MOVQ R14, 0(BX) + MOVQ R15, 8(BX) + + MOVQ 2*8(AX), R8 + MOVQ 3*8(AX), R9 + MOVQ 6*8(AX), R10 + MOVQ 7*8(AX), R11 + ADDQ 10*8(AX), R8 + ADDQ 11*8(AX), R9 + ADDQ 14*8(AX), R10 + ADDQ 15*8(AX), R11 + + REDUCE_MOD(R8, R9, R10, R11, R12, R13, R14, R15) + MOVQ R14, 16(BX) + MOVQ R15, 24(BX) + RET + +hash128: + MOVQ 0*8(AX), R8 + MOVQ 1*8(AX), R9 + ADDQ 6*8(AX), R8 + ADDQ 7*8(AX), R9 + ADDQ 8*8(AX), R8 + ADDQ 9*8(AX), R9 + ADDQ 14*8(AX), R8 + ADDQ 15*8(AX), R9 + MOVQ R8, 0(BX) + MOVQ R9, 8(BX) + RET + +hash64: + MOVQ 0*8(AX), DX + ADDQ 4*8(AX), DX + ADDQ 8*8(AX), DX + ADDQ 12*8(AX), DX + MOVQ DX, 0(BX) + RET + diff --git a/vendor/github.com/minio/HighwayHash/highwayhash_amd64.go b/vendor/github.com/minio/HighwayHash/highwayhash_amd64.go new file mode 100644 index 000000000..703635b2d --- /dev/null +++ b/vendor/github.com/minio/HighwayHash/highwayhash_amd64.go @@ -0,0 +1,50 @@ +// Copyright (c) 2017 Minio Inc. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +// +build !go1.8 +// +build amd64 !gccgo !appengine !nacl + +package highwayhash + +import "golang.org/x/sys/cpu" + +var ( + useSSE4 = cpu.X86.HasSSE41 + useAVX2 = false + useNEON = false + useVMX = false +) + +//go:noescape +func initializeSSE4(state *[16]uint64, key []byte) + +//go:noescape +func updateSSE4(state *[16]uint64, msg []byte) + +//go:noescape +func finalizeSSE4(out []byte, state *[16]uint64) + +func initialize(state *[16]uint64, key []byte) { + if useSSE4 { + initializeSSE4(state, key) + } else { + initializeGeneric(state, key) + } +} + +func update(state *[16]uint64, msg []byte) { + if useSSE4 { + updateSSE4(state, msg) + } else { + updateGeneric(state, msg) + } +} + +func finalize(out []byte, state *[16]uint64) { + if useSSE4 { + finalizeSSE4(out, state) + } else { + finalizeGeneric(out, state) + } +} diff --git a/vendor/github.com/minio/HighwayHash/highwayhash_amd64.s b/vendor/github.com/minio/HighwayHash/highwayhash_amd64.s new file mode 100644 index 000000000..ff8ac2a9f --- /dev/null +++ b/vendor/github.com/minio/HighwayHash/highwayhash_amd64.s @@ -0,0 +1,294 @@ +// Copyright (c) 2017 Minio Inc. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +// +build amd64 !gccgo !appengine !nacl + +#include "textflag.h" + +DATA ·cons<>+0x00(SB)/8, $0xdbe6d5d5fe4cce2f +DATA ·cons<>+0x08(SB)/8, $0xa4093822299f31d0 +DATA ·cons<>+0x10(SB)/8, $0x13198a2e03707344 +DATA ·cons<>+0x18(SB)/8, $0x243f6a8885a308d3 +DATA ·cons<>+0x20(SB)/8, $0x3bd39e10cb0ef593 +DATA ·cons<>+0x28(SB)/8, $0xc0acf169b5f18a8c +DATA ·cons<>+0x30(SB)/8, $0xbe5466cf34e90c6c +DATA ·cons<>+0x38(SB)/8, $0x452821e638d01377 +GLOBL ·cons<>(SB), (NOPTR+RODATA), $64 + +DATA ·zipperMerge<>+0x00(SB)/8, $0xf010e05020c03 +DATA ·zipperMerge<>+0x08(SB)/8, $0x70806090d0a040b +GLOBL ·zipperMerge<>(SB), (NOPTR+RODATA), $16 + +#define v00 X0 +#define v01 X1 +#define v10 X2 +#define v11 X3 +#define m00 X4 +#define m01 X5 +#define m10 X6 +#define m11 X7 + +#define t0 X8 +#define t1 X9 +#define t2 X10 + +#define REDUCE_MOD(x0, x1, x2, x3, tmp0, tmp1, y0, y1) \ + MOVQ $0x3FFFFFFFFFFFFFFF, tmp0 \ + ANDQ tmp0, x3 \ + MOVQ x2, y0 \ + MOVQ x3, y1 \ + \ + MOVQ x2, tmp0 \ + MOVQ x3, tmp1 \ + SHLQ $1, tmp1 \ + SHRQ $63, tmp0 \ + MOVQ tmp1, x3 \ + ORQ tmp0, x3 \ + \ + SHLQ $1, x2 \ + \ + MOVQ y0, tmp0 \ + MOVQ y1, tmp1 \ + SHLQ $2, tmp1 \ + SHRQ $62, tmp0 \ + MOVQ tmp1, y1 \ + ORQ tmp0, y1 \ + \ + SHLQ $2, y0 \ + \ + XORQ x0, y0 \ + XORQ x2, y0 \ + XORQ x1, y1 \ + XORQ x3, y1 + +#define UPDATE(msg0, msg1) \ + PADDQ msg0, v10 \ + PADDQ m00, v10 \ + PADDQ msg1, v11 \ + PADDQ m01, v11 \ + \ + MOVO v00, t0 \ + MOVO v01, t1 \ + PSRLQ $32, t0 \ + PSRLQ $32, t1 \ + PMULULQ v10, t0 \ + PMULULQ v11, t1 \ + PXOR t0, m00 \ + PXOR t1, m01 \ + \ + PADDQ m10, v00 \ + PADDQ m11, v01 \ + \ + MOVO v10, t0 \ + MOVO v11, t1 \ + PSRLQ $32, t0 \ + PSRLQ $32, t1 \ + PMULULQ v00, t0 \ + PMULULQ v01, t1 \ + PXOR t0, m10 \ + PXOR t1, m11 \ + \ + MOVO v10, t0 \ + PSHUFB t2, t0 \ + MOVO v11, t1 \ + PSHUFB t2, t1 \ + PADDQ t0, v00 \ + PADDQ t1, v01 \ + \ + MOVO v00, t0 \ + PSHUFB t2, t0 \ + MOVO v01, t1 \ + PSHUFB t2, t1 \ + PADDQ t0, v10 \ + PADDQ t1, v11 + +// func initializeSSE4(state *[16]uint64, key []byte) +TEXT ·initializeSSE4(SB), 4, $0-32 + MOVQ state+0(FP), AX + MOVQ key_base+8(FP), BX + MOVQ $·cons<>(SB), CX + + MOVOU 0(BX), v00 + MOVOU 16(BX), v01 + + PSHUFD $177, v00, v10 + PSHUFD $177, v01, v11 + + MOVOU 0(CX), m00 + MOVOU 16(CX), m01 + MOVOU 32(CX), m10 + MOVOU 48(CX), m11 + + PXOR m00, v00 + PXOR m01, v01 + PXOR m10, v10 + PXOR m11, v11 + + MOVOU v00, 0(AX) + MOVOU v01, 16(AX) + MOVOU v10, 32(AX) + MOVOU v11, 48(AX) + MOVOU m00, 64(AX) + MOVOU m01, 80(AX) + MOVOU m10, 96(AX) + MOVOU m11, 112(AX) + RET + +// func updateSSE4(state *[16]uint64, msg []byte) +TEXT ·updateSSE4(SB), 4, $0-32 + MOVQ state+0(FP), AX + MOVQ msg_base+8(FP), BX + MOVQ msg_len+16(FP), CX + + CMPQ CX, $32 + JB DONE + + MOVOU 0(AX), v00 + MOVOU 16(AX), v01 + MOVOU 32(AX), v10 + MOVOU 48(AX), v11 + MOVOU 64(AX), m00 + MOVOU 80(AX), m01 + MOVOU 96(AX), m10 + MOVOU 112(AX), m11 + + MOVOU ·zipperMerge<>(SB), t2 + +LOOP: + MOVOU 0(BX), t0 + MOVOU 16(BX), t1 + + UPDATE(t0, t1) + + ADDQ $32, BX + SUBQ $32, CX + JA LOOP + + MOVOU v00, 0(AX) + MOVOU v01, 16(AX) + MOVOU v10, 32(AX) + MOVOU v11, 48(AX) + MOVOU m00, 64(AX) + MOVOU m01, 80(AX) + MOVOU m10, 96(AX) + MOVOU m11, 112(AX) + +DONE: + RET + +// func finalizeSSE4(out []byte, state *[16]uint64) +TEXT ·finalizeSSE4(SB), 4, $0-32 + MOVQ state+24(FP), AX + MOVQ out_base+0(FP), BX + MOVQ out_len+8(FP), CX + + MOVOU 0(AX), v00 + MOVOU 16(AX), v01 + MOVOU 32(AX), v10 + MOVOU 48(AX), v11 + MOVOU 64(AX), m00 + MOVOU 80(AX), m01 + MOVOU 96(AX), m10 + MOVOU 112(AX), m11 + + MOVOU ·zipperMerge<>(SB), t2 + + PSHUFD $177, v01, t0 + PSHUFD $177, v00, t1 + UPDATE(t0, t1) + + PSHUFD $177, v01, t0 + PSHUFD $177, v00, t1 + UPDATE(t0, t1) + + PSHUFD $177, v01, t0 + PSHUFD $177, v00, t1 + UPDATE(t0, t1) + + PSHUFD $177, v01, t0 + PSHUFD $177, v00, t1 + UPDATE(t0, t1) + + CMPQ CX, $8 + JE skipUpdate // Just 4 rounds for 64-bit checksum + + PSHUFD $177, v01, t0 + PSHUFD $177, v00, t1 + UPDATE(t0, t1) + + PSHUFD $177, v01, t0 + PSHUFD $177, v00, t1 + UPDATE(t0, t1) + + CMPQ CX, $16 + JE skipUpdate // 6 rounds for 128-bit checksum + + PSHUFD $177, v01, t0 + PSHUFD $177, v00, t1 + UPDATE(t0, t1) + + PSHUFD $177, v01, t0 + PSHUFD $177, v00, t1 + UPDATE(t0, t1) + + PSHUFD $177, v01, t0 + PSHUFD $177, v00, t1 + UPDATE(t0, t1) + + PSHUFD $177, v01, t0 + PSHUFD $177, v00, t1 + UPDATE(t0, t1) + +skipUpdate: + MOVOU v00, 0(AX) + MOVOU v01, 16(AX) + MOVOU v10, 32(AX) + MOVOU v11, 48(AX) + MOVOU m00, 64(AX) + MOVOU m01, 80(AX) + MOVOU m10, 96(AX) + MOVOU m11, 112(AX) + + CMPQ CX, $8 + JE hash64 + CMPQ CX, $16 + JE hash128 + + // 256-bit checksum + PADDQ v00, m00 + PADDQ v10, m10 + PADDQ v01, m01 + PADDQ v11, m11 + + MOVQ m00, R8 + PEXTRQ $1, m00, R9 + MOVQ m10, R10 + PEXTRQ $1, m10, R11 + REDUCE_MOD(R8, R9, R10, R11, R12, R13, R14, R15) + MOVQ R14, 0(BX) + MOVQ R15, 8(BX) + + MOVQ m01, R8 + PEXTRQ $1, m01, R9 + MOVQ m11, R10 + PEXTRQ $1, m11, R11 + REDUCE_MOD(R8, R9, R10, R11, R12, R13, R14, R15) + MOVQ R14, 16(BX) + MOVQ R15, 24(BX) + RET + +hash128: + PADDQ v00, v11 + PADDQ m00, m11 + PADDQ v11, m11 + MOVOU m11, 0(BX) + RET + +hash64: + PADDQ v00, v10 + PADDQ m00, m10 + PADDQ v10, m10 + MOVQ m10, DX + MOVQ DX, 0(BX) + RET diff --git a/vendor/github.com/minio/HighwayHash/highwayhash_arm64.go b/vendor/github.com/minio/HighwayHash/highwayhash_arm64.go new file mode 100644 index 000000000..387e46d71 --- /dev/null +++ b/vendor/github.com/minio/HighwayHash/highwayhash_arm64.go @@ -0,0 +1,33 @@ +//+build !noasm + +// Copyright (c) 2017 Minio Inc. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +package highwayhash + +var ( + useSSE4 = false + useAVX2 = false + useNEON = true + useVMX = false +) + +//go:noescape +func updateArm64(state *[16]uint64, msg []byte) + +func initialize(state *[16]uint64, key []byte) { + initializeGeneric(state, key) +} + +func update(state *[16]uint64, msg []byte) { + if useNEON { + updateArm64(state, msg) + } else { + updateGeneric(state, msg) + } +} + +func finalize(out []byte, state *[16]uint64) { + finalizeGeneric(out, state) +} diff --git a/vendor/github.com/minio/HighwayHash/highwayhash_arm64.s b/vendor/github.com/minio/HighwayHash/highwayhash_arm64.s new file mode 100644 index 000000000..6498b4c5b --- /dev/null +++ b/vendor/github.com/minio/HighwayHash/highwayhash_arm64.s @@ -0,0 +1,116 @@ +//+build !noasm !appengine + +// +// Minio Cloud Storage, (C) 2017 Minio, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// Use github.com/minio/asm2plan9s on this file to assemble ARM instructions to +// the opcodes of their Plan9 equivalents + +TEXT ·updateArm64(SB), 7, $0 + MOVD state+0(FP), R0 + MOVD msg_base+8(FP), R1 + MOVD msg_len+16(FP), R2 // length of message + SUBS $32, R2 + BMI complete + + // Definition of registers + // v0 = v0.lo + // v1 = v0.hi + // v2 = v1.lo + // v3 = v1.hi + // v4 = mul0.lo + // v5 = mul0.hi + // v6 = mul1.lo + // v7 = mul1.hi + + // Load constants table pointer + MOVD $·constants(SB), R3 + + // and load constants into v28, v29, and v30 + WORD $0x4c40607c // ld1 {v28.16b-v30.16b}, [x3] + + WORD $0x4cdf2c00 // ld1 {v0.2d-v3.2d}, [x0], #64 + WORD $0x4c402c04 // ld1 {v4.2d-v7.2d}, [x0] + SUBS $64, R0 + +loop: + // Main loop + WORD $0x4cdfa83a // ld1 {v26.4s-v27.4s}, [x1], #32 + + // Add message + WORD $0x4efa8442 // add v2.2d, v2.2d, v26.2d + WORD $0x4efb8463 // add v3.2d, v3.2d, v27.2d + + // v1 += mul0 + WORD $0x4ee48442 // add v2.2d, v2.2d, v4.2d + WORD $0x4ee58463 // add v3.2d, v3.2d, v5.2d + + // First pair of multiplies + WORD $0x4e1d200a // tbl v10.16b,{v0.16b,v1.16b},v29.16b + WORD $0x4e1e204b // tbl v11.16b,{v2.16b,v3.16b},v30.16b + WORD $0x2eaac16c // umull v12.2d, v11.2s, v10.2s + WORD $0x6eaac16d // umull2 v13.2d, v11.4s, v10.4s + + // v0 += mul1 + WORD $0x4ee68400 // add v0.2d, v0.2d, v6.2d + WORD $0x4ee78421 // add v1.2d, v1.2d, v7.2d + + // Second pair of multiplies + WORD $0x4e1d204f // tbl v15.16b,{v2.16b,v3.16b},v29.16b + WORD $0x4e1e200e // tbl v14.16b,{v0.16b,v1.16b},v30.16b + + // EOR multiplication result in + WORD $0x6e2c1c84 // eor v4.16b,v4.16b,v12.16b + WORD $0x6e2d1ca5 // eor v5.16b,v5.16b,v13.16b + + WORD $0x2eaec1f0 // umull v16.2d, v15.2s, v14.2s + WORD $0x6eaec1f1 // umull2 v17.2d, v15.4s, v14.4s + + // First pair of zipper-merges + WORD $0x4e1c0052 // tbl v18.16b,{v2.16b},v28.16b + WORD $0x4ef28400 // add v0.2d, v0.2d, v18.2d + WORD $0x4e1c0073 // tbl v19.16b,{v3.16b},v28.16b + WORD $0x4ef38421 // add v1.2d, v1.2d, v19.2d + + // Second pair of zipper-merges + WORD $0x4e1c0014 // tbl v20.16b,{v0.16b},v28.16b + WORD $0x4ef48442 // add v2.2d, v2.2d, v20.2d + WORD $0x4e1c0035 // tbl v21.16b,{v1.16b},v28.16b + WORD $0x4ef58463 // add v3.2d, v3.2d, v21.2d + + // EOR multiplication result in + WORD $0x6e301cc6 // eor v6.16b,v6.16b,v16.16b + WORD $0x6e311ce7 // eor v7.16b,v7.16b,v17.16b + + SUBS $32, R2 + BPL loop + + // Store result + WORD $0x4c9f2c00 // st1 {v0.2d-v3.2d}, [x0], #64 + WORD $0x4c002c04 // st1 {v4.2d-v7.2d}, [x0] + +complete: + RET + +// Constants for TBL instructions +DATA ·constants+0x0(SB)/8, $0x000f010e05020c03 // zipper merge constant +DATA ·constants+0x8(SB)/8, $0x070806090d0a040b +DATA ·constants+0x10(SB)/8, $0x0f0e0d0c07060504 // setup first register for multiply +DATA ·constants+0x18(SB)/8, $0x1f1e1d1c17161514 +DATA ·constants+0x20(SB)/8, $0x0b0a090803020100 // setup second register for multiply +DATA ·constants+0x28(SB)/8, $0x1b1a191813121110 + +GLOBL ·constants(SB), 8, $48 diff --git a/vendor/github.com/minio/HighwayHash/highwayhash_generic.go b/vendor/github.com/minio/HighwayHash/highwayhash_generic.go new file mode 100644 index 000000000..3909e7913 --- /dev/null +++ b/vendor/github.com/minio/HighwayHash/highwayhash_generic.go @@ -0,0 +1,161 @@ +// Copyright (c) 2017 Minio Inc. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +package highwayhash + +import ( + "encoding/binary" +) + +const ( + v0 = 0 + v1 = 4 + mul0 = 8 + mul1 = 12 +) + +var ( + init0 = [4]uint64{0xdbe6d5d5fe4cce2f, 0xa4093822299f31d0, 0x13198a2e03707344, 0x243f6a8885a308d3} + init1 = [4]uint64{0x3bd39e10cb0ef593, 0xc0acf169b5f18a8c, 0xbe5466cf34e90c6c, 0x452821e638d01377} +) + +func initializeGeneric(state *[16]uint64, k []byte) { + var key [4]uint64 + + key[0] = binary.LittleEndian.Uint64(k[0:]) + key[1] = binary.LittleEndian.Uint64(k[8:]) + key[2] = binary.LittleEndian.Uint64(k[16:]) + key[3] = binary.LittleEndian.Uint64(k[24:]) + + copy(state[mul0:], init0[:]) + copy(state[mul1:], init1[:]) + + for i, k := range key { + state[v0+i] = init0[i] ^ k + } + + key[0] = key[0]>>32 | key[0]<<32 + key[1] = key[1]>>32 | key[1]<<32 + key[2] = key[2]>>32 | key[2]<<32 + key[3] = key[3]>>32 | key[3]<<32 + + for i, k := range key { + state[v1+i] = init1[i] ^ k + } +} + +func updateGeneric(state *[16]uint64, msg []byte) { + for len(msg) > 0 { + // add message + state[v1+0] += binary.LittleEndian.Uint64(msg) + state[v1+1] += binary.LittleEndian.Uint64(msg[8:]) + state[v1+2] += binary.LittleEndian.Uint64(msg[16:]) + state[v1+3] += binary.LittleEndian.Uint64(msg[24:]) + + // v1 += mul0 + state[v1+0] += state[mul0+0] + state[v1+1] += state[mul0+1] + state[v1+2] += state[mul0+2] + state[v1+3] += state[mul0+3] + + state[mul0+0] ^= uint64(uint32(state[v1+0])) * (state[v0+0] >> 32) + state[mul0+1] ^= uint64(uint32(state[v1+1])) * (state[v0+1] >> 32) + state[mul0+2] ^= uint64(uint32(state[v1+2])) * (state[v0+2] >> 32) + state[mul0+3] ^= uint64(uint32(state[v1+3])) * (state[v0+3] >> 32) + + // v0 += mul1 + state[v0+0] += state[mul1+0] + state[v0+1] += state[mul1+1] + state[v0+2] += state[mul1+2] + state[v0+3] += state[mul1+3] + + state[mul1+0] ^= uint64(uint32(state[v0+0])) * (state[v1+0] >> 32) + state[mul1+1] ^= uint64(uint32(state[v0+1])) * (state[v1+1] >> 32) + state[mul1+2] ^= uint64(uint32(state[v0+2])) * (state[v1+2] >> 32) + state[mul1+3] ^= uint64(uint32(state[v0+3])) * (state[v1+3] >> 32) + + zipperMerge(state[v1+0], state[v1+1], &state[v0+0], &state[v0+1]) + zipperMerge(state[v1+2], state[v1+3], &state[v0+2], &state[v0+3]) + + zipperMerge(state[v0+0], state[v0+1], &state[v1+0], &state[v1+1]) + zipperMerge(state[v0+2], state[v0+3], &state[v1+2], &state[v1+3]) + msg = msg[32:] + } +} + +func finalizeGeneric(out []byte, state *[16]uint64) { + var perm [4]uint64 + var tmp [32]byte + runs := 4 + if len(out) == 16 { + runs = 6 + } else if len(out) == 32 { + runs = 10 + } + for i := 0; i < runs; i++ { + perm[0] = state[v0+2]>>32 | state[v0+2]<<32 + perm[1] = state[v0+3]>>32 | state[v0+3]<<32 + perm[2] = state[v0+0]>>32 | state[v0+0]<<32 + perm[3] = state[v0+1]>>32 | state[v0+1]<<32 + + binary.LittleEndian.PutUint64(tmp[0:], perm[0]) + binary.LittleEndian.PutUint64(tmp[8:], perm[1]) + binary.LittleEndian.PutUint64(tmp[16:], perm[2]) + binary.LittleEndian.PutUint64(tmp[24:], perm[3]) + + update(state, tmp[:]) + } + + switch len(out) { + case 8: + binary.LittleEndian.PutUint64(out, state[v0+0]+state[v1+0]+state[mul0+0]+state[mul1+0]) + case 16: + binary.LittleEndian.PutUint64(out, state[v0+0]+state[v1+2]+state[mul0+0]+state[mul1+2]) + binary.LittleEndian.PutUint64(out[8:], state[v0+1]+state[v1+3]+state[mul0+1]+state[mul1+3]) + case 32: + h0, h1 := reduceMod(state[v0+0]+state[mul0+0], state[v0+1]+state[mul0+1], state[v1+0]+state[mul1+0], state[v1+1]+state[mul1+1]) + binary.LittleEndian.PutUint64(out[0:], h0) + binary.LittleEndian.PutUint64(out[8:], h1) + + h0, h1 = reduceMod(state[v0+2]+state[mul0+2], state[v0+3]+state[mul0+3], state[v1+2]+state[mul1+2], state[v1+3]+state[mul1+3]) + binary.LittleEndian.PutUint64(out[16:], h0) + binary.LittleEndian.PutUint64(out[24:], h1) + } +} + +func zipperMerge(v0, v1 uint64, d0, d1 *uint64) { + m0 := v0 & (0xFF << (2 * 8)) + m1 := (v1 & (0xFF << (7 * 8))) >> 8 + m2 := ((v0 & (0xFF << (5 * 8))) + (v1 & (0xFF << (6 * 8)))) >> 16 + m3 := ((v0 & (0xFF << (3 * 8))) + (v1 & (0xFF << (4 * 8)))) >> 24 + m4 := (v0 & (0xFF << (1 * 8))) << 32 + m5 := v0 << 56 + + *d0 += m0 + m1 + m2 + m3 + m4 + m5 + + m0 = (v0 & (0xFF << (7 * 8))) + (v1 & (0xFF << (2 * 8))) + m1 = (v0 & (0xFF << (6 * 8))) >> 8 + m2 = (v1 & (0xFF << (5 * 8))) >> 16 + m3 = ((v1 & (0xFF << (3 * 8))) + (v0 & (0xFF << (4 * 8)))) >> 24 + m4 = (v1 & 0xFF) << 48 + m5 = (v1 & (0xFF << (1 * 8))) << 24 + + *d1 += m3 + m2 + m5 + m1 + m4 + m0 +} + +// reduce v = [v0, v1, v2, v3] mod the irreducible polynomial x^128 + x^2 + x +func reduceMod(v0, v1, v2, v3 uint64) (r0, r1 uint64) { + v3 &= 0x3FFFFFFFFFFFFFFF + + r0, r1 = v2, v3 + + v3 = (v3 << 1) | (v2 >> (64 - 1)) + v2 <<= 1 + r1 = (r1 << 2) | (r0 >> (64 - 2)) + r0 <<= 2 + + r0 ^= v0 ^ v2 + r1 ^= v1 ^ v3 + return +} diff --git a/vendor/github.com/minio/HighwayHash/highwayhash_ppc64le.go b/vendor/github.com/minio/HighwayHash/highwayhash_ppc64le.go new file mode 100644 index 000000000..9a8a1259c --- /dev/null +++ b/vendor/github.com/minio/HighwayHash/highwayhash_ppc64le.go @@ -0,0 +1,33 @@ +//+build !noasm + +// Copyright (c) 2017 Minio Inc. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +package highwayhash + +var ( + useSSE4 = false + useAVX2 = false + useNEON = false + useVMX = true +) + +//go:noescape +func updatePpc64Le(state *[16]uint64, msg []byte) + +func initialize(state *[16]uint64, key []byte) { + initializeGeneric(state, key) +} + +func update(state *[16]uint64, msg []byte) { + if useVMX { + updatePpc64Le(state, msg) + } else { + updateGeneric(state, msg) + } +} + +func finalize(out []byte, state *[16]uint64) { + finalizeGeneric(out, state) +} diff --git a/vendor/github.com/minio/HighwayHash/highwayhash_ppc64le.s b/vendor/github.com/minio/HighwayHash/highwayhash_ppc64le.s new file mode 100644 index 000000000..b65b626ca --- /dev/null +++ b/vendor/github.com/minio/HighwayHash/highwayhash_ppc64le.s @@ -0,0 +1,182 @@ +//+build !noasm !appengine + +// +// Minio Cloud Storage, (C) 2018 Minio, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#include "textflag.h" + +// Definition of registers +#define V0_LO VS32 +#define V0_LO_ V0 +#define V0_HI VS33 +#define V0_HI_ V1 +#define V1_LO VS34 +#define V1_LO_ V2 +#define V1_HI VS35 +#define V1_HI_ V3 +#define MUL0_LO VS36 +#define MUL0_LO_ V4 +#define MUL0_HI VS37 +#define MUL0_HI_ V5 +#define MUL1_LO VS38 +#define MUL1_LO_ V6 +#define MUL1_HI VS39 +#define MUL1_HI_ V7 + +// Message +#define MSG_LO VS40 +#define MSG_LO_ V8 +#define MSG_HI VS41 + +// Constants +#define ROTATE VS42 +#define ROTATE_ V10 +#define MASK VS43 +#define MASK_ V11 + +// Temps +#define TEMP1 VS44 +#define TEMP1_ V12 +#define TEMP2 VS45 +#define TEMP2_ V13 +#define TEMP3 VS46 +#define TEMP3_ V14 +#define TEMP4_ V15 +#define TEMP5_ V16 +#define TEMP6_ V17 +#define TEMP7_ V18 + +// Regular registers +#define STATE R3 +#define MSG_BASE R4 +#define MSG_LEN R5 +#define CONSTANTS R6 +#define P1 R7 +#define P2 R8 +#define P3 R9 +#define P4 R10 +#define P5 R11 +#define P6 R12 +#define P7 R14 // avoid using R13 + +TEXT ·updatePpc64Le(SB), NOFRAME|NOSPLIT, $0-32 + MOVD state+0(FP), STATE + MOVD msg_base+8(FP), MSG_BASE + MOVD msg_len+16(FP), MSG_LEN // length of message + + // Sanity check for length + CMPU MSG_LEN, $31 + BLE complete + + // Setup offsets + MOVD $16, P1 + MOVD $32, P2 + MOVD $48, P3 + MOVD $64, P4 + MOVD $80, P5 + MOVD $96, P6 + MOVD $112, P7 + + // Load state + LXVD2X (STATE)(R0), V0_LO + LXVD2X (STATE)(P1), V0_HI + LXVD2X (STATE)(P2), V1_LO + LXVD2X (STATE)(P3), V1_HI + LXVD2X (STATE)(P4), MUL0_LO + LXVD2X (STATE)(P5), MUL0_HI + LXVD2X (STATE)(P6), MUL1_LO + LXVD2X (STATE)(P7), MUL1_HI + XXPERMDI V0_LO, V0_LO, $2, V0_LO + XXPERMDI V0_HI, V0_HI, $2, V0_HI + XXPERMDI V1_LO, V1_LO, $2, V1_LO + XXPERMDI V1_HI, V1_HI, $2, V1_HI + XXPERMDI MUL0_LO, MUL0_LO, $2, MUL0_LO + XXPERMDI MUL0_HI, MUL0_HI, $2, MUL0_HI + XXPERMDI MUL1_LO, MUL1_LO, $2, MUL1_LO + XXPERMDI MUL1_HI, MUL1_HI, $2, MUL1_HI + + // Load constants table pointer + MOVD $·constants(SB), CONSTANTS + LXVD2X (CONSTANTS)(R0), ROTATE + LXVD2X (CONSTANTS)(P1), MASK + XXLNAND MASK, MASK, MASK + +loop: + // Main highwayhash update loop + LXVD2X (MSG_BASE)(R0), MSG_LO + VADDUDM V0_LO_, MUL1_LO_, TEMP1_ + VRLD V0_LO_, ROTATE_, TEMP2_ + VADDUDM MUL1_HI_, V0_HI_, TEMP3_ + LXVD2X (MSG_BASE)(P1), MSG_HI + ADD $32, MSG_BASE, MSG_BASE + XXPERMDI MSG_LO, MSG_LO, $2, MSG_LO + XXPERMDI MSG_HI, MSG_HI, $2, V0_LO + VADDUDM MSG_LO_, MUL0_LO_, MSG_LO_ + VADDUDM V0_LO_, MUL0_HI_, V0_LO_ + VADDUDM MSG_LO_, V1_LO_, V1_LO_ + VSRD V0_HI_, ROTATE_, MSG_LO_ + VADDUDM V0_LO_, V1_HI_, V1_HI_ + VPERM V1_LO_, V1_LO_, MASK_, V0_LO_ + VMULOUW V1_LO_, TEMP2_, TEMP2_ + VPERM V1_HI_, V1_HI_, MASK_, TEMP7_ + VADDUDM V0_LO_, TEMP1_, V0_LO_ + VMULOUW V1_HI_, MSG_LO_, MSG_LO_ + VADDUDM TEMP7_, TEMP3_, V0_HI_ + VPERM V0_LO_, V0_LO_, MASK_, TEMP6_ + VRLD V1_LO_, ROTATE_, TEMP4_ + VSRD V1_HI_, ROTATE_, TEMP5_ + VPERM V0_HI_, V0_HI_, MASK_, TEMP7_ + XXLXOR MUL0_LO, TEMP2, MUL0_LO + VMULOUW TEMP1_, TEMP4_, TEMP1_ + VMULOUW TEMP3_, TEMP5_, TEMP3_ + XXLXOR MUL0_HI, MSG_LO, MUL0_HI + XXLXOR MUL1_LO, TEMP1, MUL1_LO + XXLXOR MUL1_HI, TEMP3, MUL1_HI + VADDUDM TEMP6_, V1_LO_, V1_LO_ + VADDUDM TEMP7_, V1_HI_, V1_HI_ + + SUB $32, MSG_LEN, MSG_LEN + CMPU MSG_LEN, $32 + BGE loop + + // Save state + XXPERMDI V0_LO, V0_LO, $2, V0_LO + XXPERMDI V0_HI, V0_HI, $2, V0_HI + XXPERMDI V1_LO, V1_LO, $2, V1_LO + XXPERMDI V1_HI, V1_HI, $2, V1_HI + XXPERMDI MUL0_LO, MUL0_LO, $2, MUL0_LO + XXPERMDI MUL0_HI, MUL0_HI, $2, MUL0_HI + XXPERMDI MUL1_LO, MUL1_LO, $2, MUL1_LO + XXPERMDI MUL1_HI, MUL1_HI, $2, MUL1_HI + STXVD2X V0_LO, (STATE)(R0) + STXVD2X V0_HI, (STATE)(P1) + STXVD2X V1_LO, (STATE)(P2) + STXVD2X V1_HI, (STATE)(P3) + STXVD2X MUL0_LO, (STATE)(P4) + STXVD2X MUL0_HI, (STATE)(P5) + STXVD2X MUL1_LO, (STATE)(P6) + STXVD2X MUL1_HI, (STATE)(P7) + +complete: + RET + +// Constants table +DATA ·constants+0x0(SB)/8, $0x0000000000000020 +DATA ·constants+0x8(SB)/8, $0x0000000000000020 +DATA ·constants+0x10(SB)/8, $0x070806090d0a040b // zipper merge constant +DATA ·constants+0x18(SB)/8, $0x000f010e05020c03 // zipper merge constant + +GLOBL ·constants(SB), 8, $32 diff --git a/vendor/github.com/minio/HighwayHash/highwayhash_ref.go b/vendor/github.com/minio/HighwayHash/highwayhash_ref.go new file mode 100644 index 000000000..fddac4b5f --- /dev/null +++ b/vendor/github.com/minio/HighwayHash/highwayhash_ref.go @@ -0,0 +1,28 @@ +// Copyright (c) 2017 Minio Inc. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +// +build !amd64 +// +build !arm64 +// +build !ppc64le + +package highwayhash + +var ( + useSSE4 = false + useAVX2 = false + useNEON = false + useVMX = false +) + +func initialize(state *[16]uint64, k []byte) { + initializeGeneric(state, k) +} + +func update(state *[16]uint64, msg []byte) { + updateGeneric(state, msg) +} + +func finalize(out []byte, state *[16]uint64) { + finalizeGeneric(out, state) +} diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go new file mode 100644 index 000000000..3d88f8667 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu.go @@ -0,0 +1,38 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package cpu implements processor feature detection for +// various CPU architectures. +package cpu + +// CacheLinePad is used to pad structs to avoid false sharing. +type CacheLinePad struct{ _ [cacheLineSize]byte } + +// X86 contains the supported CPU features of the +// current X86/AMD64 platform. If the current platform +// is not X86/AMD64 then all feature flags are false. +// +// X86 is padded to avoid false sharing. Further the HasAVX +// and HasAVX2 are only set if the OS supports XMM and YMM +// registers in addition to the CPUID feature bit being set. +var X86 struct { + _ CacheLinePad + HasAES bool // AES hardware implementation (AES NI) + HasADX bool // Multi-precision add-carry instruction extensions + HasAVX bool // Advanced vector extension + HasAVX2 bool // Advanced vector extension 2 + HasBMI1 bool // Bit manipulation instruction set 1 + HasBMI2 bool // Bit manipulation instruction set 2 + HasERMS bool // Enhanced REP for MOVSB and STOSB + HasFMA bool // Fused-multiply-add instructions + HasOSXSAVE bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers. + HasPCLMULQDQ bool // PCLMULQDQ instruction - most often used for AES-GCM + HasPOPCNT bool // Hamming weight instruction POPCNT. + HasSSE2 bool // Streaming SIMD extension 2 (always available on amd64) + HasSSE3 bool // Streaming SIMD extension 3 + HasSSSE3 bool // Supplemental streaming SIMD extension 3 + HasSSE41 bool // Streaming SIMD extension 4 and 4.1 + HasSSE42 bool // Streaming SIMD extension 4 and 4.2 + _ CacheLinePad +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm.go b/vendor/golang.org/x/sys/cpu/cpu_arm.go new file mode 100644 index 000000000..d93036f75 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_arm.go @@ -0,0 +1,7 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cpu + +const cacheLineSize = 32 diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_arm64.go new file mode 100644 index 000000000..1d2ab2902 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_arm64.go @@ -0,0 +1,7 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cpu + +const cacheLineSize = 64 diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go new file mode 100644 index 000000000..f7cb46971 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go @@ -0,0 +1,16 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386 amd64 amd64p32 +// +build !gccgo + +package cpu + +// cpuid is implemented in cpu_x86.s for gc compiler +// and in cpu_gccgo.c for gccgo. +func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) + +// xgetbv with ecx = 0 is implemented in cpu_x86.s for gc compiler +// and in cpu_gccgo.c for gccgo. +func xgetbv() (eax, edx uint32) diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo.c b/vendor/golang.org/x/sys/cpu/cpu_gccgo.c new file mode 100644 index 000000000..e363c7d13 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo.c @@ -0,0 +1,43 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386 amd64 amd64p32 +// +build gccgo + +#include +#include + +// Need to wrap __get_cpuid_count because it's declared as static. +int +gccgoGetCpuidCount(uint32_t leaf, uint32_t subleaf, + uint32_t *eax, uint32_t *ebx, + uint32_t *ecx, uint32_t *edx) +{ + return __get_cpuid_count(leaf, subleaf, eax, ebx, ecx, edx); +} + +// xgetbv reads the contents of an XCR (Extended Control Register) +// specified in the ECX register into registers EDX:EAX. +// Currently, the only supported value for XCR is 0. +// +// TODO: Replace with a better alternative: +// +// #include +// +// #pragma GCC target("xsave") +// +// void gccgoXgetbv(uint32_t *eax, uint32_t *edx) { +// unsigned long long x = _xgetbv(0); +// *eax = x & 0xffffffff; +// *edx = (x >> 32) & 0xffffffff; +// } +// +// Note that _xgetbv is defined starting with GCC 8. +void +gccgoXgetbv(uint32_t *eax, uint32_t *edx) +{ + __asm(" xorl %%ecx, %%ecx\n" + " xgetbv" + : "=a"(*eax), "=d"(*edx)); +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo.go b/vendor/golang.org/x/sys/cpu/cpu_gccgo.go new file mode 100644 index 000000000..ba49b91bd --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo.go @@ -0,0 +1,26 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386 amd64 amd64p32 +// +build gccgo + +package cpu + +//extern gccgoGetCpuidCount +func gccgoGetCpuidCount(eaxArg, ecxArg uint32, eax, ebx, ecx, edx *uint32) + +func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) { + var a, b, c, d uint32 + gccgoGetCpuidCount(eaxArg, ecxArg, &a, &b, &c, &d) + return a, b, c, d +} + +//extern gccgoXgetbv +func gccgoXgetbv(eax, edx *uint32) + +func xgetbv() (eax, edx uint32) { + var a, d uint32 + gccgoXgetbv(&a, &d) + return a, d +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_mips64x.go b/vendor/golang.org/x/sys/cpu/cpu_mips64x.go new file mode 100644 index 000000000..6165f1212 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_mips64x.go @@ -0,0 +1,9 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build mips64 mips64le + +package cpu + +const cacheLineSize = 32 diff --git a/vendor/golang.org/x/sys/cpu/cpu_mipsx.go b/vendor/golang.org/x/sys/cpu/cpu_mipsx.go new file mode 100644 index 000000000..1269eee88 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_mipsx.go @@ -0,0 +1,9 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build mips mipsle + +package cpu + +const cacheLineSize = 32 diff --git a/vendor/golang.org/x/sys/cpu/cpu_ppc64x.go b/vendor/golang.org/x/sys/cpu/cpu_ppc64x.go new file mode 100644 index 000000000..d10759a52 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_ppc64x.go @@ -0,0 +1,9 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ppc64 ppc64le + +package cpu + +const cacheLineSize = 128 diff --git a/vendor/golang.org/x/sys/cpu/cpu_s390x.go b/vendor/golang.org/x/sys/cpu/cpu_s390x.go new file mode 100644 index 000000000..684c4f005 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_s390x.go @@ -0,0 +1,7 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cpu + +const cacheLineSize = 256 diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.go b/vendor/golang.org/x/sys/cpu/cpu_x86.go new file mode 100644 index 000000000..71e288b06 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_x86.go @@ -0,0 +1,55 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386 amd64 amd64p32 + +package cpu + +const cacheLineSize = 64 + +func init() { + maxID, _, _, _ := cpuid(0, 0) + + if maxID < 1 { + return + } + + _, _, ecx1, edx1 := cpuid(1, 0) + X86.HasSSE2 = isSet(26, edx1) + + X86.HasSSE3 = isSet(0, ecx1) + X86.HasPCLMULQDQ = isSet(1, ecx1) + X86.HasSSSE3 = isSet(9, ecx1) + X86.HasFMA = isSet(12, ecx1) + X86.HasSSE41 = isSet(19, ecx1) + X86.HasSSE42 = isSet(20, ecx1) + X86.HasPOPCNT = isSet(23, ecx1) + X86.HasAES = isSet(25, ecx1) + X86.HasOSXSAVE = isSet(27, ecx1) + + osSupportsAVX := false + // For XGETBV, OSXSAVE bit is required and sufficient. + if X86.HasOSXSAVE { + eax, _ := xgetbv() + // Check if XMM and YMM registers have OS support. + osSupportsAVX = isSet(1, eax) && isSet(2, eax) + } + + X86.HasAVX = isSet(28, ecx1) && osSupportsAVX + + if maxID < 7 { + return + } + + _, ebx7, _, _ := cpuid(7, 0) + X86.HasBMI1 = isSet(3, ebx7) + X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX + X86.HasBMI2 = isSet(8, ebx7) + X86.HasERMS = isSet(9, ebx7) + X86.HasADX = isSet(19, ebx7) +} + +func isSet(bitpos uint, value uint32) bool { + return value&(1< Date: Tue, 4 Jun 2019 18:10:23 +0900 Subject: [PATCH 21/66] feat: optimize HasFilepathPrefix --- pkg/util/fs_util.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index 4abfcd4a4..86fd52136 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -576,10 +576,10 @@ func excludeFile(path, buildcontext string) bool { // HasFilepathPrefix checks if the given file path begins with prefix func HasFilepathPrefix(path, prefix string, prefixMatchOnly bool) bool { - path = filepath.Clean(path) prefix = filepath.Clean(prefix) - pathArray := strings.Split(path, "/") prefixArray := strings.Split(prefix, "/") + path = filepath.Clean(path) + pathArray := strings.SplitN(path, "/", len(prefixArray)+1) if len(pathArray) < len(prefixArray) { return false From d9d865c74a8119674002591a660f360560882f58 Mon Sep 17 00:00:00 2001 From: Nao YONASHIRO Date: Wed, 5 Jun 2019 03:03:41 +0900 Subject: [PATCH 22/66] test: add BenchmarkHasFilepathPrefix --- pkg/util/fs_util_test.go | 80 ++++++++++++++++++++++++++++++++++++++++ pkg/util/util.go | 2 +- 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/pkg/util/fs_util_test.go b/pkg/util/fs_util_test.go index c44908056..868f18c5c 100644 --- a/pkg/util/fs_util_test.go +++ b/pkg/util/fs_util_test.go @@ -19,11 +19,13 @@ package util import ( "archive/tar" "bytes" + "fmt" "io/ioutil" "os" "path/filepath" "reflect" "sort" + "strings" "testing" "github.com/GoogleContainerTools/kaniko/testutil" @@ -342,6 +344,84 @@ func TestHasFilepathPrefix(t *testing.T) { } } +func BenchmarkHasFilepathPrefix(b *testing.B) { + tests := []struct { + path string + prefix string + prefixMatchOnly bool + }{ + { + path: "/foo/bar", + prefix: "/foo", + prefixMatchOnly: true, + }, + { + path: "/foo/bar/baz", + prefix: "/foo", + prefixMatchOnly: true, + }, + { + path: "/foo/bar/baz/foo", + prefix: "/foo", + prefixMatchOnly: true, + }, + { + path: "/foo/bar/baz/foo/foobar", + prefix: "/foo", + prefixMatchOnly: true, + }, + { + path: "/foo/bar", + prefix: "/foo/bar", + prefixMatchOnly: true, + }, + { + path: "/foo/bar/baz", + prefix: "/foo/bar", + prefixMatchOnly: true, + }, + { + path: "/foo/bar/baz/foo", + prefix: "/foo/bar", + prefixMatchOnly: true, + }, + { + path: "/foo/bar/baz/foo/foobar", + prefix: "/foo/bar", + prefixMatchOnly: true, + }, + { + path: "/foo/bar", + prefix: "/foo/bar/baz", + prefixMatchOnly: true, + }, + { + path: "/foo/bar/baz", + prefix: "/foo/bar/baz", + prefixMatchOnly: true, + }, + { + path: "/foo/bar/baz/foo", + prefix: "/foo/bar/baz", + prefixMatchOnly: true, + }, + { + path: "/foo/bar/baz/foo/foobar", + prefix: "/foo/bar/baz", + prefixMatchOnly: true, + }, + } + for _, ts := range tests { + name := fmt.Sprint("PathDepth=", strings.Count(ts.path, "/"), ",PrefixDepth=", strings.Count(ts.prefix, "/")) + b.Run(name, func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + HasFilepathPrefix(ts.path, ts.prefix, ts.prefixMatchOnly) + } + }) + } +} + type checker func(root string, t *testing.T) func fileExists(p string) checker { diff --git a/pkg/util/util.go b/pkg/util/util.go index 234ab4001..616f074f8 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -48,7 +48,7 @@ func ConfigureLogging(logLevel string) error { func Hasher() func(string) (string, error) { pool := sync.Pool{ New: func() interface{} { - return make([]byte, highwayhash.Size * 10 * 1024) + return make([]byte, highwayhash.Size*10*1024) }, } key := make([]byte, highwayhash.Size) From 38fa3608ceb54f387aca80595c6e44077ec18a7d Mon Sep 17 00:00:00 2001 From: Nao YONASHIRO Date: Wed, 5 Jun 2019 03:48:59 +0900 Subject: [PATCH 23/66] chore: fix megacheck --- pkg/util/util.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkg/util/util.go b/pkg/util/util.go index 616f074f8..e1eef8cac 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -48,7 +48,8 @@ func ConfigureLogging(logLevel string) error { func Hasher() func(string) (string, error) { pool := sync.Pool{ New: func() interface{} { - return make([]byte, highwayhash.Size*10*1024) + b := make([]byte, highwayhash.Size*10*1024) + return &b }, } key := make([]byte, highwayhash.Size) @@ -71,9 +72,9 @@ func Hasher() func(string) (string, error) { return "", err } defer f.Close() - buf := pool.Get().([]byte) + buf := pool.Get().(*[]byte) defer pool.Put(buf) - if _, err := io.CopyBuffer(h, f, buf); err != nil { + if _, err := io.CopyBuffer(h, f, *buf); err != nil { return "", err } } From a21129f8899260fcc73dc5abd6cebad7d9bbdae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D1=82=D0=BE=D0=BD=20=D0=9A=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Wed, 18 Sep 2019 10:43:26 +0200 Subject: [PATCH 24/66] Fix typo and run go fmt over fs_util --- pkg/util/fs_util.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index fa7a5db7d..81a268c09 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -121,8 +121,8 @@ func DeleteFilesystem() error { logrus.Info("Deleting filesystem...") return filepath.Walk(constants.RootDir, func(path string, info os.FileInfo, _ error) error { if CheckWhitelist(path) { - if ! isExist(path) { - logrus.Debugf("Path %s whitelisted, but not exists", path) + if !isExist(path) { + logrus.Debugf("Path %s whitelisted, but not exists", path) return nil } if info.IsDir() { @@ -141,7 +141,8 @@ func DeleteFilesystem() error { return os.RemoveAll(path) }) } -// isExists returns tru if path exists + +// isExists returns true if path exists func isExist(path string) bool { if _, err := os.Stat(path); err == nil { return true From 0bd5eb51f70c05c507e7760c1dabd93381be4342 Mon Sep 17 00:00:00 2001 From: Herrmann Hinz Date: Wed, 18 Sep 2019 12:33:04 +0200 Subject: [PATCH 25/66] double help text about skip-verify-tls removed --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index d1720da88..38a4a63a3 100644 --- a/README.md +++ b/README.md @@ -430,10 +430,6 @@ Set this flag to skip TLS certificate validation when pushing to a registry. It Set this flag to skip TLS certificate validation when pulling from a registry. It is supposed to be used for testing purposes only and should not be used in production! -#### --skip-tls-verify-pull - -Set this flag to skip TLS certificate validation when pulling from a registry. It is supposed to be used for testing purposes only and should not be used in production! - #### --snapshotMode You can set the `--snapshotMode=` flag to set how kaniko will snapshot the filesystem. From 7154d2e66b46214a4e01e47a47e386bf6c63fbd4 Mon Sep 17 00:00:00 2001 From: Sascha Askani Date: Wed, 18 Sep 2019 15:29:48 +0200 Subject: [PATCH 26/66] fix missing version bump to 0.12.0 in Makefile --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e5633bf20..c7d14562b 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ # Bump these on release VERSION_MAJOR ?= 0 -VERSION_MINOR ?= 11 +VERSION_MINOR ?= 12 VERSION_BUILD ?= 0 VERSION ?= v$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD) From dfbe9cf7f81312fce34fef9931dcacb8dea1f20a Mon Sep 17 00:00:00 2001 From: Monard Vong Date: Sun, 22 Sep 2019 00:12:54 +0200 Subject: [PATCH 27/66] Add integration test --- integration/dockerfiles/Dockerfile_test_add | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/integration/dockerfiles/Dockerfile_test_add b/integration/dockerfiles/Dockerfile_test_add index 3df0c5864..e5d2ca3bc 100644 --- a/integration/dockerfiles/Dockerfile_test_add +++ b/integration/dockerfiles/Dockerfile_test_add @@ -28,3 +28,7 @@ ADD https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/downlo # Test environment replacement in the URL ENV VERSION=v1.4.3 ADD https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/${VERSION}-static/docker-credential-gcr_linux_amd64-1.4.3.tar.gz /destination + +# Test full url replacement +ENV URL=https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v1.4.3/docker-credential-gcr_linux_386-1.4.3.tar.gz +ADD $URL /otherdestination From a63a809e9845358c347b3206b7c415e3dbee758f Mon Sep 17 00:00:00 2001 From: Monard Vong Date: Sun, 22 Sep 2019 00:26:35 +0200 Subject: [PATCH 28/66] fix tests --- integration/integration_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration/integration_test.go b/integration/integration_test.go index fcd6246f9..932122bc2 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -323,7 +323,7 @@ func TestGitBuildContextWithBranch(t *testing.T) { func TestLayers(t *testing.T) { offset := map[string]int{ - "Dockerfile_test_add": 11, + "Dockerfile_test_add": 12, "Dockerfile_test_scratch": 3, } for dockerfile := range imageBuilder.FilesBuilt { From 019b26e9a0bd540397ca9695ed2d39aba5b24731 Mon Sep 17 00:00:00 2001 From: Monard Vong Date: Sun, 22 Sep 2019 01:08:09 +0200 Subject: [PATCH 29/66] Simplify logic --- pkg/util/command_util.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/pkg/util/command_util.go b/pkg/util/command_util.go index 68dfb6074..c4b3437ea 100644 --- a/pkg/util/command_util.go +++ b/pkg/util/command_util.go @@ -37,13 +37,7 @@ import ( func ResolveEnvironmentReplacementList(values, envs []string, isFilepath bool) ([]string, error) { var resolvedValues []string for _, value := range values { - var resolved string - var err error - if IsSrcRemoteFileURL(value) { - resolved, err = ResolveEnvironmentReplacement(value, envs, false) - } else { - resolved, err = ResolveEnvironmentReplacement(value, envs, isFilepath) - } + resolved, err := ResolveEnvironmentReplacement(value, envs, isFilepath) logrus.Debugf("Resolved %s to %s", value, resolved) if err != nil { return nil, err From 7771d1b44821d54b5892042fe17bcd27c63b803c Mon Sep 17 00:00:00 2001 From: debuggy Date: Thu, 26 Sep 2019 17:13:39 +0800 Subject: [PATCH 30/66] Add getting started tutorial --- README.md | 5 ++ docs/tutorial.md | 125 +++++++++++++++++++++++++++++++++++++ examples/pod.yaml | 27 ++++++++ examples/volume-claim.yaml | 11 ++++ examples/volume.yaml | 14 +++++ 5 files changed, 182 insertions(+) create mode 100644 docs/tutorial.md create mode 100644 examples/pod.yaml create mode 100644 examples/volume-claim.yaml create mode 100644 examples/volume.yaml diff --git a/README.md b/README.md index 38a4a63a3..fcb8c241f 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ _If you are interested in contributing to kaniko, see [DEVELOPMENT.md](DEVELOPME - [How does kaniko work?](#how-does-kaniko-work) - [Known Issues](#known-issues) - [Demo](#demo) +- [Tutorial](#tutorial) - [Using kaniko](#using-kaniko) - [kaniko Build Contexts](#kaniko-build-contexts) - [Running kaniko](#running-kaniko) @@ -77,6 +78,10 @@ kaniko does not support building Windows containers. ![Demo](/docs/demo.gif) +## Tutorial + +For a detailed example of kaniko with local storage, please refer to a [getting started tutorial](./docs/tutorial.md). + ## Using kaniko To use kaniko to build and push an image for you, you will need: diff --git a/docs/tutorial.md b/docs/tutorial.md new file mode 100644 index 000000000..298690dff --- /dev/null +++ b/docs/tutorial.md @@ -0,0 +1,125 @@ +# Getting Started Tutorial + +This tutorial is for beginners who want to start using kaniko and aims to establish a quick start test case. + +## Table of Content + +1. [Prerequisities](#Prerequisities) +2. [Prepare config files for kaniko](#Prepare-config-files-for-kaniko) +3. [Prepare the mounted directory in minikube](#Prepare-the-mounted-directory-in-minikube) +4. [Create a Secret that holds your authorization token](#Create-a-Secret-that-holds-your-authorization-token) +5. [Create resources in kubernetes](#Create-resources-in-kubernetes) +6. [Pull the image and test](#Pull-the-image-and-test) + +## Prerequisities + +- A Kubernetes Cluster. You could use [Minikube](https://kubernetes.io/docs/setup/minikube/) to deploy kubernetes locally, or use kubernetes service from cloud provider like [Azure Kubernetes Service](https://azure.microsoft.com/en-us/services/kubernetes-service/). +- A [dockerhub](https://hub.docker.com/) account to push built image public. + +## Prepare config files for kaniko + +After installing minikube, we should prepare several config files to create resources in kubernetes, which are: + +- [pod.yaml](../examples/pod.yaml) is for starting a kaniko container to build the example image. +- [volume.yaml](../examples/volume.yaml) is for creating a persistent volume used as kaniko build context. +- [volume-claim.yaml](../examples/volume-claim.yaml) is for creating a persistent volume claim which will mounted in the kaniko container. + +## Prepare the local mounted directory + +SSH into the cluster, and create a local directory which will be mounted in kaniko container as build context. Create a simple dockerfile there. + +> Note: To ssh into cluster, if you use minikube, you could use `minikube ssh` command. If you use cloud service, please refer to official doc, such as [Azure Kubernetes Service](https://docs.microsoft.com/en-us/azure/aks/ssh#code-try-0). + +```shell +$ mkdir kaniko && cd kaniko +$ echo 'FROM ubuntu' >> dockerfile +$ echo 'ENTRYPOINT ["/bin/bash", "-c", "echo hello"]' >> dockerfile +$ cat dockerfile +FROM ubuntu +ENTRYPOINT ["/bin/bash", "-c", "echo hello"] +$ pwd +/home//kaniko # copy this path in volume.yaml file +``` + +> Note: It is important to notice that the `hostPath` in the volume.yaml need to be replaced with the local directory you created. + +## Create a Secret that holds your authorization token + +A Kubernetes cluster uses the Secret of docker-registry type to authenticate with a docker registry to push an image. + +Create this Secret, naming it regcred: + +```shell +kubectl create secret docker-registry regcred --docker-server= --docker-username= --docker-password= --docker-email= +``` + +- `` is your Private Docker Registry FQDN. (https://index.docker.io/v1/ for DockerHub) +- `` is your Docker username. +- `` is your Docker password. +- `` is your Docker email. + +This secret will be used in pod.yaml config. + +## Create resources in kubernetes + +```shell +# create persistent volume +$ kubectl create -f volume.yaml +persistentvolume/dockerfile created + +# create persistent volume claim +$ kubectl create -f volume-claim.yaml +persistentvolumeclaim/dockerfile-claim created + +# check whether the volume mounted correctly +$ kubectl get pv dockerfile +NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE +dockerfile 10Gi RWO Retain Bound default/dockerfile-claim local-storage 1m + +# create pod +$ kubectl create -f pod.yaml +pod/kaniko created +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +kaniko 0/1 ContainerCreating 0 7s + +# check whether the build complete and show the build logs +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +kaniko 0/1 Completed 0 34s +$ kubectl logs kaniko +➜ kubectl logs kaniko +INFO[0000] Resolved base name ubuntu to ubuntu +INFO[0000] Resolved base name ubuntu to ubuntu +INFO[0000] Downloading base image ubuntu +INFO[0000] Error while retrieving image from cache: getting file info: stat /cache/sha256:1bbdea4846231d91cce6c7ff3907d26fca444fd6b7e3c282b90c7fe4251f9f86: no such file or directory +INFO[0000] Downloading base image ubuntu +INFO[0001] Built cross stage deps: map[] +INFO[0001] Downloading base image ubuntu +INFO[0001] Error while retrieving image from cache: getting file info: stat /cache/sha256:1bbdea4846231d91cce6c7ff3907d26fca444fd6b7e3c282b90c7fe4251f9f86: no such file or directory +INFO[0001] Downloading base image ubuntu +INFO[0001] Skipping unpacking as no commands require it. +INFO[0001] Taking snapshot of full filesystem... +INFO[0001] ENTRYPOINT ["/bin/bash", "-c", "echo hello"] +``` + +> Note: It is important to notice that the `destination` in the pod.yaml need to be replaced with your own. + +## Pull the image and test + +If as expected, the kaniko will build image and push to dockerhub successfully. Pull the image to local and run it to test: + +```shell +$ sudo docker run -it / +Unable to find image 'debuggy/helloworld:latest' locally +latest: Pulling from debuggy/helloworld +5667fdb72017: Pull complete +d83811f270d5: Pull complete +ee671aafb583: Pull complete +7fc152dfb3a6: Pull complete +Digest: sha256:2707d17754ea99ce0cf15d84a7282ae746a44ff90928c2064755ee3b35c1057b +Status: Downloaded newer image for debuggy/helloworld:latest +hello +``` + +Congratulation! You have gone through the hello world successfully, please refer to project for more details. diff --git a/examples/pod.yaml b/examples/pod.yaml new file mode 100644 index 000000000..6b6692721 --- /dev/null +++ b/examples/pod.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: Pod +metadata: + name: kaniko +spec: + containers: + - name: kaniko + image: gcr.io/kaniko-project/executor:latest + args: ["--dockerfile=/workspace/dockerfile", + "--context=dir://workspace", + "--destination=/"] # replace with your dockerhub account + volumeMounts: + - name: kaniko-secret + mountPath: /root + - name: dockerfile-storage + mountPath: /workspace + restartPolicy: Never + volumes: + - name: kaniko-secret + secret: + secretName: regcred + items: + - key: .dockerconfigjson + path: .docker/config.json + - name: dockerfile-storage + persistentVolumeClaim: + claimName: dockerfile-claim diff --git a/examples/volume-claim.yaml b/examples/volume-claim.yaml new file mode 100644 index 000000000..7a1abbf05 --- /dev/null +++ b/examples/volume-claim.yaml @@ -0,0 +1,11 @@ +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: dockerfile-claim +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 8Gi + storageClassName: local-storage diff --git a/examples/volume.yaml b/examples/volume.yaml new file mode 100644 index 000000000..9ff81d6c8 --- /dev/null +++ b/examples/volume.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: dockerfile + labels: + type: local +spec: + capacity: + storage: 10Gi + accessModes: + - ReadWriteOnce + storageClassName: local-storage + hostPath: + path: # replace with local directory, such as "/home//kaniko" \ No newline at end of file From aa44410f1742f6a0b89bf50537277a5dca83195c Mon Sep 17 00:00:00 2001 From: Tejal Desai Date: Fri, 27 Sep 2019 12:53:59 -0700 Subject: [PATCH 31/66] Add some triage notes to issues. --- .github/ISSUE_TEMPLATE/bug_report.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index f25773d76..b0d8784b8 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -7,6 +7,7 @@ about: Report a bug in kaniko **Actual behavior** A clear and concise description of what the bug is. + **Expected behavior** A clear and concise description of what you expected to happen. @@ -21,3 +22,16 @@ Steps to reproduce the behavior: - Build Context Please provide or clearly describe any files needed to build the Dockerfile (ADD/COPY commands) - Kaniko Image (fully qualified with digest) + + **Triage Notes for the Maintainers** + + + + | **Description** | **Yes/No** | + |----------------|---------------| + | Please check if this a new feature you are proposing |

| + | Please check if the build works in docker but not in kaniko |
  • - [ ]
| + | Please check if this error is seen when you use `--cache` flag |
  • - [ ]
| + | Please check if your dockerfile is a multistage dockerfile |
  • - [ ]
| + From e311274347755af1d9cb18147f7e34ae2698edc6 Mon Sep 17 00:00:00 2001 From: Tejal Desai Date: Fri, 27 Sep 2019 12:57:23 -0700 Subject: [PATCH 32/66] Add a pull request template --- .github/pull_request_template.md | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..35e1abd67 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,41 @@ + + + +Fixes `#`. _in case of a bug fix, this should point to a bug and any other related issue(s)_ + +**Description** + + + +**Submitter Checklist** + +These are the criteria that every PR should meet, please check them off as you +review them: + +- [ ] Includes [unit tests](../DEVELOPMENT.md#creating-a-pr) +- [ ] Adds integration tests if needed. + +_See [the contribution guide](../CONTRIBUTING.md) for more details._ + + +**Reviewer Notes** + +- [ ] The code flow looks good. +- [ ] Unit tests and or integration tests added. + + +**Release Notes** + +Describe any changes here so maintainer can include it in the release notes, or delete this block. + +``` +Examples of user facing changes: +- Skaffold config changes like + e.g. "Add buildArgs to `Kustomize` deployer skaffold config." +- Bug fixes + e.g. "Improve skaffold init behaviour when tags are used in manifests" +- Any changes in skaffold behavior + e.g. "Artiface cachine is turned on by default." + +``` From a36d59046c15fbde62524c66d2ca29ffd4e228ae Mon Sep 17 00:00:00 2001 From: Mingliang Tao Date: Sun, 29 Sep 2019 21:32:19 +0800 Subject: [PATCH 33/66] Update tutorial context --- docs/tutorial.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tutorial.md b/docs/tutorial.md index 298690dff..369450dec 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -6,7 +6,7 @@ This tutorial is for beginners who want to start using kaniko and aims to establ 1. [Prerequisities](#Prerequisities) 2. [Prepare config files for kaniko](#Prepare-config-files-for-kaniko) -3. [Prepare the mounted directory in minikube](#Prepare-the-mounted-directory-in-minikube) +3. [Prepare the local mounted directory](#Prepare-the-local-mounted-directory) 4. [Create a Secret that holds your authorization token](#Create-a-Secret-that-holds-your-authorization-token) 5. [Create resources in kubernetes](#Create-resources-in-kubernetes) 6. [Pull the image and test](#Pull-the-image-and-test) @@ -18,7 +18,7 @@ This tutorial is for beginners who want to start using kaniko and aims to establ ## Prepare config files for kaniko -After installing minikube, we should prepare several config files to create resources in kubernetes, which are: +Prepare several config files to create resources in kubernetes, which are: - [pod.yaml](../examples/pod.yaml) is for starting a kaniko container to build the example image. - [volume.yaml](../examples/volume.yaml) is for creating a persistent volume used as kaniko build context. From de87136720fa5f7d7ba89b5e6b18266540c03958 Mon Sep 17 00:00:00 2001 From: Prashant Date: Wed, 2 Oct 2019 21:22:26 +0530 Subject: [PATCH 34/66] Kaniko version --- Makefile | 2 +- cmd/executor/cmd/root.go | 32 +++++++++++++++++--------------- cmd/executor/cmd/version.go | 20 ++++++++++++++++++++ 3 files changed, 38 insertions(+), 16 deletions(-) create mode 100644 cmd/executor/cmd/version.go diff --git a/Makefile b/Makefile index e5633bf20..881c55a5d 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,6 @@ VERSION_MINOR ?= 11 VERSION_BUILD ?= 0 VERSION ?= v$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD) -VERSION_PACKAGE = $(REPOPATH/pkg/version) SHELL := /bin/bash GOOS ?= $(shell go env GOOS) @@ -28,6 +27,7 @@ PROJECT := kaniko REGISTRY?=gcr.io/kaniko-project REPOPATH ?= $(ORG)/$(PROJECT) +VERSION_PACKAGE = $(REPOPATH)/pkg/version GO_FILES := $(shell find . -type f -name '*.go' -not -path "./vendor/*") GO_LDFLAGS := '-extldflags "-static" diff --git a/cmd/executor/cmd/root.go b/cmd/executor/cmd/root.go index 0dd717f86..69a0addc3 100644 --- a/cmd/executor/cmd/root.go +++ b/cmd/executor/cmd/root.go @@ -54,21 +54,23 @@ func init() { var RootCmd = &cobra.Command{ Use: "executor", PersistentPreRunE: func(cmd *cobra.Command, args []string) error { - if err := util.ConfigureLogging(logLevel); err != nil { - return err - } - if !opts.NoPush && len(opts.Destinations) == 0 { - return errors.New("You must provide --destination, or use --no-push") - } - if err := cacheFlagsValid(); err != nil { - return errors.Wrap(err, "cache flags invalid") - } - if err := resolveSourceContext(); err != nil { - return errors.Wrap(err, "error resolving source context") - } - if err := resolveDockerfilePath(); err != nil { - return errors.Wrap(err, "error resolving dockerfile path") - } + if cmd.Use == "executor" { + if err := util.ConfigureLogging(logLevel); err != nil { + return err + } + if !opts.NoPush && len(opts.Destinations) == 0 { + return errors.New("You must provide --destination, or use --no-push") + } + if err := cacheFlagsValid(); err != nil { + return errors.Wrap(err, "cache flags invalid") + } + if err := resolveSourceContext(); err != nil { + return errors.Wrap(err, "error resolving source context") + } + if err := resolveDockerfilePath(); err != nil { + return errors.Wrap(err, "error resolving dockerfile path") + } + } return nil }, Run: func(cmd *cobra.Command, args []string) { diff --git a/cmd/executor/cmd/version.go b/cmd/executor/cmd/version.go new file mode 100644 index 000000000..df1880e1a --- /dev/null +++ b/cmd/executor/cmd/version.go @@ -0,0 +1,20 @@ +package cmd + +import ( + "fmt" + + "github.com/spf13/cobra" + "github.com/GoogleContainerTools/kaniko/pkg/version" +) + +func init() { + RootCmd.AddCommand(versionCmd) +} + +var versionCmd = &cobra.Command{ + Use: "version", + Short: "Print the version number of kaniko", + Run: func(cmd *cobra.Command, args []string) { + fmt.Print("Kaniko version : ", version.Version()) + }, +} \ No newline at end of file From db12a77e6c835c31ec78da559dab2a4b1e30536e Mon Sep 17 00:00:00 2001 From: Victor Noel Date: Thu, 3 Oct 2019 16:32:11 +0200 Subject: [PATCH 35/66] Fix #776 --- .../Dockerfile_test_dockerignore_relative | 5 ++ ...le_test_dockerignore_relative.dockerignore | 3 ++ integration/ignore_relative/bar | 0 integration/ignore_relative/baz | 0 integration/ignore_relative/foo | 0 pkg/executor/build.go | 2 +- pkg/util/command_util_test.go | 2 +- pkg/util/fs_util.go | 8 +++- pkg/util/fs_util_test.go | 46 +++++++++++++++++++ 9 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 integration/dockerfiles/Dockerfile_test_dockerignore_relative create mode 100644 integration/dockerfiles/Dockerfile_test_dockerignore_relative.dockerignore create mode 100644 integration/ignore_relative/bar create mode 100644 integration/ignore_relative/baz create mode 100644 integration/ignore_relative/foo diff --git a/integration/dockerfiles/Dockerfile_test_dockerignore_relative b/integration/dockerfiles/Dockerfile_test_dockerignore_relative new file mode 100644 index 000000000..bc9426805 --- /dev/null +++ b/integration/dockerfiles/Dockerfile_test_dockerignore_relative @@ -0,0 +1,5 @@ +# This dockerfile makes sure Dockerfile.dockerignore is working +# If so then ignore_relative/foo should copy to /foo +# If not, then this image won't build because it will attempt to copy three files to /foo, which is a file not a directory +FROM scratch +COPY ignore_relative/* /foo diff --git a/integration/dockerfiles/Dockerfile_test_dockerignore_relative.dockerignore b/integration/dockerfiles/Dockerfile_test_dockerignore_relative.dockerignore new file mode 100644 index 000000000..7f5371bdd --- /dev/null +++ b/integration/dockerfiles/Dockerfile_test_dockerignore_relative.dockerignore @@ -0,0 +1,3 @@ +# A .dockerignore file to make sure dockerignore support works +ignore_relative/** +!ignore_relative/foo diff --git a/integration/ignore_relative/bar b/integration/ignore_relative/bar new file mode 100644 index 000000000..e69de29bb diff --git a/integration/ignore_relative/baz b/integration/ignore_relative/baz new file mode 100644 index 000000000..e69de29bb diff --git a/integration/ignore_relative/foo b/integration/ignore_relative/foo new file mode 100644 index 000000000..e69de29bb diff --git a/pkg/executor/build.go b/pkg/executor/build.go index e134e52b5..45f23cca3 100644 --- a/pkg/executor/build.go +++ b/pkg/executor/build.go @@ -427,7 +427,7 @@ func DoBuild(opts *config.KanikoOptions) (v1.Image, error) { if err != nil { return nil, err } - if err := util.GetExcludedFiles(opts.SrcContext); err != nil { + if err := util.GetExcludedFiles(opts.DockerfilePath, opts.SrcContext); err != nil { return nil, err } // Some stages may refer to other random images, not previous stages diff --git a/pkg/util/command_util_test.go b/pkg/util/command_util_test.go index 3e2342595..cd1a324a2 100644 --- a/pkg/util/command_util_test.go +++ b/pkg/util/command_util_test.go @@ -390,7 +390,7 @@ var isSrcValidTests = []struct { func Test_IsSrcsValid(t *testing.T) { for _, test := range isSrcValidTests { t.Run(test.name, func(t *testing.T) { - if err := GetExcludedFiles(buildContextPath); err != nil { + if err := GetExcludedFiles("", buildContextPath); err != nil { t.Fatalf("error getting excluded files: %v", err) } err := IsSrcsValid(test.srcsAndDest, test.resolvedSources, buildContextPath) diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index 338caa02a..cc9e4a4bd 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -554,11 +554,15 @@ func CopyFile(src, dest, buildcontext string) (bool, error) { } // GetExcludedFiles gets a list of files to exclude from the .dockerignore -func GetExcludedFiles(buildcontext string) error { - path := filepath.Join(buildcontext, ".dockerignore") +func GetExcludedFiles(dockerfilepath string, buildcontext string) error { + path := dockerfilepath + ".dockerignore" + if !FilepathExists(path) { + path = filepath.Join(buildcontext, ".dockerignore") + } if !FilepathExists(path) { return nil } + logrus.Infof("Using dockerignore file: %v", path) contents, err := ioutil.ReadFile(path) if err != nil { return errors.Wrap(err, "parsing .dockerignore") diff --git a/pkg/util/fs_util_test.go b/pkg/util/fs_util_test.go index c44908056..37cb7b034 100644 --- a/pkg/util/fs_util_test.go +++ b/pkg/util/fs_util_test.go @@ -694,3 +694,49 @@ func Test_childDirInWhitelist(t *testing.T) { }) } } + +func Test_correctDockerignoreFileIsUsed(t *testing.T) { + type args struct { + dockerfilepath string + buildcontext string + excluded string + notExcluded string + } + tests := []struct { + name string + args args + }{ + { + name: "relative dockerfile used", + args: args{ + dockerfilepath: "../../integration/dockerfiles/Dockerfile_test_dockerignore_relative", + buildcontext: "../../integration/", + excluded: "ignore_relative/bar", + notExcluded: "ignore_relative/foo", + }, + }, + { + name: "context dockerfile is used", + args: args{ + dockerfilepath: "../../integration/dockerfiles/Dockerfile_test_dockerignore", + buildcontext: "../../integration/", + excluded: "ignore/bar", + notExcluded: "ignore/foo", + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + excluded = nil + if err := GetExcludedFiles(tt.args.dockerfilepath, tt.args.buildcontext); err != nil { + t.Fatal(err) + } + if excl := excludeFile(tt.args.excluded, tt.args.buildcontext); !excl { + t.Errorf("'%v' not excluded as expected", tt.args.excluded) + } + if excl := excludeFile(tt.args.notExcluded, tt.args.buildcontext); excl { + t.Errorf("'%v' excluded against expectation", tt.args.notExcluded) + } + }) + } +} From f9424d43e75222582f7350b4a5e3ab4b08dfe12c Mon Sep 17 00:00:00 2001 From: Prashant Date: Thu, 3 Oct 2019 21:29:40 +0530 Subject: [PATCH 36/66] fixing lint and minor fix --- cmd/executor/cmd/root.go | 34 +++++++++++++++++----------------- cmd/executor/cmd/version.go | 20 ++++++++++---------- pkg/util/fs_util.go | 3 --- 3 files changed, 27 insertions(+), 30 deletions(-) diff --git a/cmd/executor/cmd/root.go b/cmd/executor/cmd/root.go index 29ec4162d..07a3d880b 100644 --- a/cmd/executor/cmd/root.go +++ b/cmd/executor/cmd/root.go @@ -54,23 +54,23 @@ func init() { var RootCmd = &cobra.Command{ Use: "executor", PersistentPreRunE: func(cmd *cobra.Command, args []string) error { - if cmd.Use == "executor" { - if err := util.ConfigureLogging(logLevel); err != nil { - return err - } - if !opts.NoPush && len(opts.Destinations) == 0 { - return errors.New("You must provide --destination, or use --no-push") - } - if err := cacheFlagsValid(); err != nil { - return errors.Wrap(err, "cache flags invalid") - } - if err := resolveSourceContext(); err != nil { - return errors.Wrap(err, "error resolving source context") - } - if err := resolveDockerfilePath(); err != nil { - return errors.Wrap(err, "error resolving dockerfile path") - } - } + if cmd.Use == "executor" { + if err := util.ConfigureLogging(logLevel); err != nil { + return err + } + if !opts.NoPush && len(opts.Destinations) == 0 { + return errors.New("You must provide --destination, or use --no-push") + } + if err := cacheFlagsValid(); err != nil { + return errors.Wrap(err, "cache flags invalid") + } + if err := resolveSourceContext(); err != nil { + return errors.Wrap(err, "error resolving source context") + } + if err := resolveDockerfilePath(); err != nil { + return errors.Wrap(err, "error resolving dockerfile path") + } + } return nil }, Run: func(cmd *cobra.Command, args []string) { diff --git a/cmd/executor/cmd/version.go b/cmd/executor/cmd/version.go index df1880e1a..65e2bea72 100644 --- a/cmd/executor/cmd/version.go +++ b/cmd/executor/cmd/version.go @@ -1,20 +1,20 @@ package cmd import ( - "fmt" + "fmt" - "github.com/spf13/cobra" - "github.com/GoogleContainerTools/kaniko/pkg/version" + "github.com/GoogleContainerTools/kaniko/pkg/version" + "github.com/spf13/cobra" ) func init() { - RootCmd.AddCommand(versionCmd) + RootCmd.AddCommand(versionCmd) } var versionCmd = &cobra.Command{ - Use: "version", - Short: "Print the version number of kaniko", - Run: func(cmd *cobra.Command, args []string) { - fmt.Print("Kaniko version : ", version.Version()) - }, -} \ No newline at end of file + Use: "version", + Short: "Print the version number of kaniko", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Kaniko version : ", version.Version()) + }, +} diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index 338caa02a..f56f6bff5 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -359,9 +359,6 @@ func RelativeFiles(fp string, root string) ([]string, error) { if CheckWhitelist(path) && !HasFilepathPrefix(path, root, false) { return nil } - if err != nil { - return err - } relPath, err := filepath.Rel(root, path) if err != nil { return err From 5700de039dff08c4ca491f6992e71c13830b5f45 Mon Sep 17 00:00:00 2001 From: Victor Noel Date: Fri, 4 Oct 2019 10:08:39 +0200 Subject: [PATCH 37/66] Add more tests for #776 --- pkg/util/fs_util_test.go | 41 ++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/pkg/util/fs_util_test.go b/pkg/util/fs_util_test.go index 37cb7b034..449df7464 100644 --- a/pkg/util/fs_util_test.go +++ b/pkg/util/fs_util_test.go @@ -699,8 +699,8 @@ func Test_correctDockerignoreFileIsUsed(t *testing.T) { type args struct { dockerfilepath string buildcontext string - excluded string - notExcluded string + excluded []string + included []string } tests := []struct { name string @@ -711,8 +711,8 @@ func Test_correctDockerignoreFileIsUsed(t *testing.T) { args: args{ dockerfilepath: "../../integration/dockerfiles/Dockerfile_test_dockerignore_relative", buildcontext: "../../integration/", - excluded: "ignore_relative/bar", - notExcluded: "ignore_relative/foo", + excluded: []string{"ignore_relative/bar"}, + included: []string{"ignore_relative/foo", "ignore/bar"}, }, }, { @@ -720,23 +720,28 @@ func Test_correctDockerignoreFileIsUsed(t *testing.T) { args: args{ dockerfilepath: "../../integration/dockerfiles/Dockerfile_test_dockerignore", buildcontext: "../../integration/", - excluded: "ignore/bar", - notExcluded: "ignore/foo", + excluded: []string{"ignore/bar"}, + included: []string{"ignore/foo", "ignore_relative/bar"}, }, }, } for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - excluded = nil - if err := GetExcludedFiles(tt.args.dockerfilepath, tt.args.buildcontext); err != nil { - t.Fatal(err) - } - if excl := excludeFile(tt.args.excluded, tt.args.buildcontext); !excl { - t.Errorf("'%v' not excluded as expected", tt.args.excluded) - } - if excl := excludeFile(tt.args.notExcluded, tt.args.buildcontext); excl { - t.Errorf("'%v' excluded against expectation", tt.args.notExcluded) - } - }) + if err := GetExcludedFiles(tt.args.dockerfilepath, tt.args.buildcontext); err != nil { + t.Fatal(err) + } + for _, excl := range tt.args.excluded { + t.Run(tt.name+" to exclude "+excl, func(t *testing.T) { + if !excludeFile(excl, tt.args.buildcontext) { + t.Errorf("'%v' not excluded", excl) + } + }) + } + for _, incl := range tt.args.included { + t.Run(tt.name+" to include "+incl, func(t *testing.T) { + if excludeFile(incl, tt.args.buildcontext) { + t.Errorf("'%v' not included", incl) + } + }) + } } } From ff7abba47bb721e36027dbe4b092089c7f0d4798 Mon Sep 17 00:00:00 2001 From: Victor Noel Date: Fri, 4 Oct 2019 10:31:40 +0200 Subject: [PATCH 38/66] Fix integration tests for #776 --- ...dockerignore_relative => Dockerfile_dockerignore_relative} | 4 +++- ...erignore => Dockerfile_dockerignore_relative.dockerignore} | 0 pkg/util/fs_util_test.go | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) rename integration/dockerfiles/{Dockerfile_test_dockerignore_relative => Dockerfile_dockerignore_relative} (56%) rename integration/dockerfiles/{Dockerfile_test_dockerignore_relative.dockerignore => Dockerfile_dockerignore_relative.dockerignore} (100%) diff --git a/integration/dockerfiles/Dockerfile_test_dockerignore_relative b/integration/dockerfiles/Dockerfile_dockerignore_relative similarity index 56% rename from integration/dockerfiles/Dockerfile_test_dockerignore_relative rename to integration/dockerfiles/Dockerfile_dockerignore_relative index bc9426805..6ef2bac59 100644 --- a/integration/dockerfiles/Dockerfile_test_dockerignore_relative +++ b/integration/dockerfiles/Dockerfile_dockerignore_relative @@ -1,5 +1,7 @@ +# This is not included in integration tests because docker build does not exploit Dockerfile.dockerignore +# See https://github.com/moby/moby/issues/12886#issuecomment-523706042 for more details # This dockerfile makes sure Dockerfile.dockerignore is working # If so then ignore_relative/foo should copy to /foo # If not, then this image won't build because it will attempt to copy three files to /foo, which is a file not a directory -FROM scratch +FROM scratch COPY ignore_relative/* /foo diff --git a/integration/dockerfiles/Dockerfile_test_dockerignore_relative.dockerignore b/integration/dockerfiles/Dockerfile_dockerignore_relative.dockerignore similarity index 100% rename from integration/dockerfiles/Dockerfile_test_dockerignore_relative.dockerignore rename to integration/dockerfiles/Dockerfile_dockerignore_relative.dockerignore diff --git a/pkg/util/fs_util_test.go b/pkg/util/fs_util_test.go index 449df7464..886efcf8f 100644 --- a/pkg/util/fs_util_test.go +++ b/pkg/util/fs_util_test.go @@ -709,7 +709,7 @@ func Test_correctDockerignoreFileIsUsed(t *testing.T) { { name: "relative dockerfile used", args: args{ - dockerfilepath: "../../integration/dockerfiles/Dockerfile_test_dockerignore_relative", + dockerfilepath: "../../integration/dockerfiles/Dockerfile_dockerignore_relative", buildcontext: "../../integration/", excluded: []string{"ignore_relative/bar"}, included: []string{"ignore_relative/foo", "ignore/bar"}, From 14ed530234b382b26f1f09c63026c602b1d258fe Mon Sep 17 00:00:00 2001 From: Tejal Desai Date: Fri, 4 Oct 2019 01:32:38 -0700 Subject: [PATCH 39/66] fix the /root to /kaniko --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a63d1a645..580164fad 100644 --- a/README.md +++ b/README.md @@ -159,9 +159,9 @@ Create a `config.json` file with your Docker registry url and the previous gener } ``` -Run kaniko with the `config.json` inside `/root/.docker/config.json` +Run kaniko with the `config.json` inside `/kaniko/.docker/config.json` - docker run -ti --rm -v `pwd`:/workspace -v config.json:/root/.docker/config.json:ro gcr.io/kaniko-project/executor:latest --dockerfile=Dockerfile --destination=yourimagename + docker run -ti --rm -v `pwd`:/workspace -v config.json:/kaniko/.docker/config.json:ro gcr.io/kaniko-project/executor:latest --dockerfile=Dockerfile --destination=yourimagename #### Pushing to Amazon ECR The Amazon ECR [credential helper](https://github.com/awslabs/amazon-ecr-credential-helper) is built in to the kaniko executor image. From b57160198e2700758cac0b5af8f4372b7ac3dac3 Mon Sep 17 00:00:00 2001 From: Tejal Desai Date: Fri, 4 Oct 2019 11:20:41 -0700 Subject: [PATCH 40/66] fix bad merge --- pkg/executor/push_test.go | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/pkg/executor/push_test.go b/pkg/executor/push_test.go index 578f3c588..f771e400e 100644 --- a/pkg/executor/push_test.go +++ b/pkg/executor/push_test.go @@ -17,14 +17,20 @@ limitations under the License. package executor import ( - + "bytes" "fmt" + "io/ioutil" + "net/http" "os" "path/filepath" "testing" + "github.com/GoogleContainerTools/kaniko/pkg/config" + "github.com/GoogleContainerTools/kaniko/testutil" "github.com/google/go-containerregistry/pkg/name" + "github.com/google/go-containerregistry/pkg/v1/layout" "github.com/google/go-containerregistry/pkg/v1/random" + "github.com/google/go-containerregistry/pkg/v1/validate" "github.com/spf13/afero" ) @@ -95,19 +101,7 @@ func TestWriteImageOutputs(t *testing.T) { } }) } -======= - "bytes" - "io/ioutil" - "net/http" - "os" - "testing" - - "github.com/GoogleContainerTools/kaniko/pkg/config" - "github.com/GoogleContainerTools/kaniko/testutil" - "github.com/google/go-containerregistry/pkg/v1/layout" - "github.com/google/go-containerregistry/pkg/v1/random" - "github.com/google/go-containerregistry/pkg/v1/validate" -) +} func TestHeaderAdded(t *testing.T) { tests := []struct { From 9643e0e9a413f751037d837ef6c2c30a37a52f04 Mon Sep 17 00:00:00 2001 From: Tejal Desai Date: Fri, 4 Oct 2019 11:23:41 -0700 Subject: [PATCH 41/66] Add missing boilerplate. Add missing boiler plate. --- cmd/executor/cmd/version.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/cmd/executor/cmd/version.go b/cmd/executor/cmd/version.go index 65e2bea72..15a6ec4ef 100644 --- a/cmd/executor/cmd/version.go +++ b/cmd/executor/cmd/version.go @@ -1,3 +1,19 @@ +/* +Copyright 2018 Google LLC + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + package cmd import ( From 6b5b88c2bc53d74da600cabb85f9c8b796005893 Mon Sep 17 00:00:00 2001 From: Tejal Desai Date: Fri, 4 Oct 2019 14:27:24 -0700 Subject: [PATCH 42/66] fix creating abs path for urls --- cmd/executor/cmd/root.go | 22 +++++--- cmd/executor/cmd/root_test.go | 99 +++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+), 8 deletions(-) create mode 100644 cmd/executor/cmd/root_test.go diff --git a/cmd/executor/cmd/root.go b/cmd/executor/cmd/root.go index 7eb34bf90..344b79844 100644 --- a/cmd/executor/cmd/root.go +++ b/cmd/executor/cmd/root.go @@ -168,7 +168,7 @@ func cacheFlagsValid() error { // resolveDockerfilePath resolves the Dockerfile path to an absolute path func resolveDockerfilePath() error { - if match, _ := regexp.MatchString("^https?://", opts.DockerfilePath); match { + if isUrl(opts.DockerfilePath) { return nil } if util.FilepathExists(opts.DockerfilePath) { @@ -241,13 +241,8 @@ func resolveRelativePaths() error { } for _, p := range optsPaths { - // Skip empty path - if *p == "" { - continue - } - // Skip path that is already absolute - if filepath.IsAbs(*p) { - logrus.Debugf("Path %s is absolute, skipping", *p) + if path := *p; skipPath(path) { + logrus.Debugf("Skip resolving path %s", path) continue } @@ -266,3 +261,14 @@ func exit(err error) { fmt.Println(err) os.Exit(1) } + +func isUrl(path string) bool { + if match, _ := regexp.MatchString("^https?://", path); match { + return true + } + return false +} + +func skipPath(path string) bool { + return path == "" || isUrl(path) || filepath.IsAbs(path) +} diff --git a/cmd/executor/cmd/root_test.go b/cmd/executor/cmd/root_test.go new file mode 100644 index 000000000..ee629cffe --- /dev/null +++ b/cmd/executor/cmd/root_test.go @@ -0,0 +1,99 @@ +/* +Copyright 2018 Google LLC + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cmd + +import ( + "testing" + + "github.com/GoogleContainerTools/kaniko/testutil" +) + +func TestSkipPath(t *testing.T) { + tests := []struct { + description string + path string + expected bool + }{ + { + description: "path is a http url", + path: "http://test", + expected: true, + }, + { + description: "path is a https url", + path: "https://test", + expected: true, + }, + { + description: "path is a empty", + path: "", + expected: true, + }, + { + description: "path is already abs", + path: "/tmp/test", + expected: true, + }, + { + description: "path is relative", + path: ".././test", + }, + } + + for _, tt := range tests { + t.Run(tt.description, func(t *testing.T) { + testutil.CheckDeepEqual(t, tt.expected, skipPath(tt.path)) + }) + } +} + +func TestIsUrl(t *testing.T) { + tests := []struct { + description string + path string + expected bool + }{ + { + description: "path is a http url", + path: "http://test", + expected: true, + }, + { + description: "path is a https url", + path: "https://test", + expected: true, + }, + { + description: "path is a empty", + path: "", + }, + { + description: "path is already abs", + path: "/tmp/test", + }, + { + description: "path is relative", + path: ".././test", + }, + } + + for _, tt := range tests { + t.Run(tt.description, func(t *testing.T) { + testutil.CheckDeepEqual(t, tt.expected, isUrl(tt.path)) + }) + } +} From 230c4c9b07fc1916bea7c8423f41cbed75c948ac Mon Sep 17 00:00:00 2001 From: Tejal Desai Date: Fri, 4 Oct 2019 14:39:53 -0700 Subject: [PATCH 43/66] fix linter --- cmd/executor/cmd/root.go | 6 +++--- cmd/executor/cmd/root_test.go | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cmd/executor/cmd/root.go b/cmd/executor/cmd/root.go index 344b79844..53c3eeadc 100644 --- a/cmd/executor/cmd/root.go +++ b/cmd/executor/cmd/root.go @@ -168,7 +168,7 @@ func cacheFlagsValid() error { // resolveDockerfilePath resolves the Dockerfile path to an absolute path func resolveDockerfilePath() error { - if isUrl(opts.DockerfilePath) { + if isURL(opts.DockerfilePath) { return nil } if util.FilepathExists(opts.DockerfilePath) { @@ -262,7 +262,7 @@ func exit(err error) { os.Exit(1) } -func isUrl(path string) bool { +func isURL(path string) bool { if match, _ := regexp.MatchString("^https?://", path); match { return true } @@ -270,5 +270,5 @@ func isUrl(path string) bool { } func skipPath(path string) bool { - return path == "" || isUrl(path) || filepath.IsAbs(path) + return path == "" || isURL(path) || filepath.IsAbs(path) } diff --git a/cmd/executor/cmd/root_test.go b/cmd/executor/cmd/root_test.go index ee629cffe..e760c1f06 100644 --- a/cmd/executor/cmd/root_test.go +++ b/cmd/executor/cmd/root_test.go @@ -93,7 +93,7 @@ func TestIsUrl(t *testing.T) { for _, tt := range tests { t.Run(tt.description, func(t *testing.T) { - testutil.CheckDeepEqual(t, tt.expected, isUrl(tt.path)) + testutil.CheckDeepEqual(t, tt.expected, isURL(tt.path)) }) } } From bb9ace058fa78fbdad9b31237f1be486c8e995cb Mon Sep 17 00:00:00 2001 From: Tejal Desai Date: Fri, 4 Oct 2019 14:43:21 -0700 Subject: [PATCH 44/66] address Don's comment --- cmd/executor/cmd/root.go | 4 ++-- cmd/executor/cmd/root_test.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/executor/cmd/root.go b/cmd/executor/cmd/root.go index 53c3eeadc..566accfa1 100644 --- a/cmd/executor/cmd/root.go +++ b/cmd/executor/cmd/root.go @@ -241,7 +241,7 @@ func resolveRelativePaths() error { } for _, p := range optsPaths { - if path := *p; skipPath(path) { + if path := *p; shdSkip(path) { logrus.Debugf("Skip resolving path %s", path) continue } @@ -269,6 +269,6 @@ func isURL(path string) bool { return false } -func skipPath(path string) bool { +func shdSkip(path string) bool { return path == "" || isURL(path) || filepath.IsAbs(path) } diff --git a/cmd/executor/cmd/root_test.go b/cmd/executor/cmd/root_test.go index e760c1f06..cec6dff69 100644 --- a/cmd/executor/cmd/root_test.go +++ b/cmd/executor/cmd/root_test.go @@ -56,7 +56,7 @@ func TestSkipPath(t *testing.T) { for _, tt := range tests { t.Run(tt.description, func(t *testing.T) { - testutil.CheckDeepEqual(t, tt.expected, skipPath(tt.path)) + testutil.CheckDeepEqual(t, tt.expected, shdSkip(tt.path)) }) } } From 3ad925580606e996e84c02d13230710f34819cef Mon Sep 17 00:00:00 2001 From: Tejal Desai Date: Fri, 4 Oct 2019 15:51:05 -0700 Subject: [PATCH 45/66] add debug level info what is the layer type --- pkg/util/fs_util.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index 0022f5803..6bf1496fe 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -20,6 +20,7 @@ import ( "archive/tar" "bufio" "bytes" + "fmt" "io" "io/ioutil" "net/http" @@ -82,11 +83,17 @@ func GetFSFromImage(root string, img v1.Image) ([]string, error) { extractedFiles := []string{} for i, l := range layers { - logrus.Debugf("Extracting layer %d", i) + mediaType, err := l.MediaType() + if err == nil { + logrus.Debugf("Extracting layer %d of media type %s", mediaType) + } else { + logrus.Debugf("Extracting layer %d", i) + } r, err := l.Uncompressed() if err != nil { return nil, err } + defer r.Close() tr := tar.NewReader(r) for { hdr, err := tr.Next() @@ -94,7 +101,7 @@ func GetFSFromImage(root string, img v1.Image) ([]string, error) { break } if err != nil { - return nil, err + return nil, errors.Wrap(err, fmt.Sprintf("error reading tar %d", i)) } path := filepath.Join(root, filepath.Clean(hdr.Name)) base := filepath.Base(path) From 1a88d7ae9cc287b4678de67bb8c98db5be94304d Mon Sep 17 00:00:00 2001 From: Tejal Desai Date: Fri, 4 Oct 2019 16:03:38 -0700 Subject: [PATCH 46/66] better logging --- pkg/util/fs_util.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index 6bf1496fe..1d80ba153 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -83,12 +83,12 @@ func GetFSFromImage(root string, img v1.Image) ([]string, error) { extractedFiles := []string{} for i, l := range layers { - mediaType, err := l.MediaType() - if err == nil { + if mediaType, err := l.MediaType(); err == nil { logrus.Debugf("Extracting layer %d of media type %s", mediaType) } else { logrus.Debugf("Extracting layer %d", i) } + r, err := l.Uncompressed() if err != nil { return nil, err From 100f60d61b6da0297fb543345e2926862f02a300 Mon Sep 17 00:00:00 2001 From: Tejal Desai Date: Fri, 4 Oct 2019 16:33:23 -0700 Subject: [PATCH 47/66] release v0.13.0 --- CHANGELOG.md | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile | 2 +- 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 142baa25d..98614d106 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,73 @@ +# v0.13.0 Release - 2019-10-04 + +## New Features +* Add `kaniko version` command [#796](https://github.com/GoogleContainerTools/kaniko/pull/796) +* Write data about pushed images for GCB kaniko build step if env var `BUILDER_OUTPUT` is set [#602](https://github.com/GoogleContainerTools/kaniko/pull/602) +* Support `Dockerfile.dockerignore` relative to `Dockerfile` [#801](https://github.com/GoogleContainerTools/kaniko/pull/801) + +## Bug Fixes +* fix creating abs path for urls [#804](https://github.com/GoogleContainerTools/kaniko/pull/804) +* Fix #691 - ADD does not understand ENV variables [#768](https://github.com/GoogleContainerTools/kaniko/pull/768) +* Resolve relative paths to absolute paths in command line arguments [#736](https://github.com/GoogleContainerTools/kaniko/pull/736) +* insecure flag is now honored with `--cache` flag. [#685](https://github.com/GoogleContainerTools/kaniko/pull/685) +* Reduce log level for adding file message [#624](https://github.com/GoogleContainerTools/kaniko/pull/624) +* Fix SIGSEGV on file system deletion while building [#765](https://github.com/GoogleContainerTools/kaniko/pull/765) + +## Updates and Refactors +* add debug level info what is the layer type [#805](https://github.com/GoogleContainerTools/kaniko/pull/805) +* Update base image to golang:1.12 [#648](https://github.com/GoogleContainerTools/kaniko/pull/648) +* Add some triage notes to issue template. [#794](https://github.com/GoogleContainerTools/kaniko/pull/794) +* double help text about skip-verify-tls [#782](https://github.com/GoogleContainerTools/kaniko/pull/782) +* Add a pull request template [#795](https://github.com/GoogleContainerTools/kaniko/pull/795) +* Correct CheckPushPermission comment. [#671](https://github.com/GoogleContainerTools/kaniko/pull/671) + +## Documentation +* Use kaniko with docker config.json password [#129](https://github.com/GoogleContainerTools/kaniko/pull/129) +* Add getting started tutorial [#790](https://github.com/GoogleContainerTools/kaniko/pull/790) + +## Performance +* feat: optimize build [#694](https://github.com/GoogleContainerTools/kaniko/pull/694) + +Huge thank you for this release towards our contributors: +- alexa +- Andreas Bergmeier +- Carlos Alexandro Becker +- Carlos Sanchez +- chhsia0 +- debuggy +- Deniz Zoeteman +- Don McCasland +- Fred Cox +- Herrmann Hinz +- Hugues Alary +- Jason Hall +- Johannes 'fish' Ziemke +- jonjohnsonjr +- Luke Wood +- Matthew Dawson +- Mingliang Tao +- Monard Vong +- Nao YONASHIRO +- Niels Denissen +- Prashant +- priyawadhwa +- Priya Wadhwa +- Sascha Askani +- sharifelgamal +- Sharif Elgamal +- Takeaki Matsumoto +- Taylor Barrella +- Tejal Desai +- Thao-Nguyen Do +- tralexa +- Victor Noel +- v.rul +- Warren Seymour +- xanonid +- Xueshan Feng +- Антон Костенко +- Роман Небалуев + # v0.12.0 Release - 2019-09/13 ## New Features diff --git a/Makefile b/Makefile index f3295afeb..4b9cb25df 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ # Bump these on release VERSION_MAJOR ?= 0 -VERSION_MINOR ?= 12 +VERSION_MINOR ?= 13 VERSION_BUILD ?= 0 VERSION ?= v$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD) From 1414a4d81e8cee62494cf107f9e851c8a0c04dda Mon Sep 17 00:00:00 2001 From: Joshua Knarr Date: Mon, 7 Oct 2019 09:18:42 -0400 Subject: [PATCH 48/66] adding BUILD_ARG --- Makefile | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 4b9cb25df..d80e37953 100644 --- a/Makefile +++ b/Makefile @@ -14,10 +14,11 @@ # Bump these on release VERSION_MAJOR ?= 0 -VERSION_MINOR ?= 13 +VERSION_MINOR ?= 12 VERSION_BUILD ?= 0 VERSION ?= v$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD) +VERSION_PACKAGE = $(REPOPATH/pkg/version) SHELL := /bin/bash GOOS ?= $(shell go env GOOS) @@ -27,7 +28,6 @@ PROJECT := kaniko REGISTRY?=gcr.io/kaniko-project REPOPATH ?= $(ORG)/$(PROJECT) -VERSION_PACKAGE = $(REPOPATH)/pkg/version GO_FILES := $(shell find . -type f -name '*.go' -not -path "./vendor/*") GO_LDFLAGS := '-extldflags "-static" @@ -38,6 +38,7 @@ GO_LDFLAGS += ' EXECUTOR_PACKAGE = $(REPOPATH)/cmd/executor WARMER_PACKAGE = $(REPOPATH)/cmd/warmer KANIKO_PROJECT = $(REPOPATH)/kaniko +BUILD_ARG ?= '' out/executor: $(GO_FILES) GOARCH=$(GOARCH) GOOS=linux CGO_ENABLED=0 go build -ldflags $(GO_LDFLAGS) -o $@ $(EXECUTOR_PACKAGE) @@ -55,6 +56,7 @@ integration-test: .PHONY: images images: - docker build -t $(REGISTRY)/executor:latest -f deploy/Dockerfile . - docker build -t $(REGISTRY)/executor:debug -f deploy/Dockerfile_debug . - docker build -t $(REGISTRY)/warmer:latest -f deploy/Dockerfile_warmer . + docker build ${BUILD_ARG} -t $(REGISTRY)/executor:latest -f deploy/Dockerfile . + docker build ${BUILD_ARG} -t $(REGISTRY)/executor:debug -f deploy/Dockerfile_debug . + docker build ${BUILD_ARG} -t $(REGISTRY)/warmer:latest -f deploy/Dockerfile_warmer . + From be4c414307df877b67c3f635d6cf6f343ba880a4 Mon Sep 17 00:00:00 2001 From: Joshua Knarr Date: Mon, 7 Oct 2019 09:20:43 -0400 Subject: [PATCH 49/66] reconcile their newer version --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index d80e37953..b35610671 100644 --- a/Makefile +++ b/Makefile @@ -14,11 +14,10 @@ # Bump these on release VERSION_MAJOR ?= 0 -VERSION_MINOR ?= 12 +VERSION_MINOR ?= 13 VERSION_BUILD ?= 0 VERSION ?= v$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD) -VERSION_PACKAGE = $(REPOPATH/pkg/version) SHELL := /bin/bash GOOS ?= $(shell go env GOOS) @@ -28,6 +27,7 @@ PROJECT := kaniko REGISTRY?=gcr.io/kaniko-project REPOPATH ?= $(ORG)/$(PROJECT) +VERSION_PACKAGE = $(REPOPATH/pkg/version) GO_FILES := $(shell find . -type f -name '*.go' -not -path "./vendor/*") GO_LDFLAGS := '-extldflags "-static" From 6b206ad9ae17106afb02afa9ae015eafbc68357f Mon Sep 17 00:00:00 2001 From: Joshua Knarr Date: Mon, 7 Oct 2019 09:21:37 -0400 Subject: [PATCH 50/66] prefer theirs --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b35610671..d9ea21d8f 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ PROJECT := kaniko REGISTRY?=gcr.io/kaniko-project REPOPATH ?= $(ORG)/$(PROJECT) -VERSION_PACKAGE = $(REPOPATH/pkg/version) +VERSION_PACKAGE = $(REPOPATH)/pkg/version GO_FILES := $(shell find . -type f -name '*.go' -not -path "./vendor/*") GO_LDFLAGS := '-extldflags "-static" From c1bf3624009b28d9986d65e9440f1cdede1600c4 Mon Sep 17 00:00:00 2001 From: Petr Ruzicka Date: Wed, 9 Oct 2019 11:29:49 +0200 Subject: [PATCH 51/66] Details about --tarPath usage improved --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 11577d87b..13510dc2b 100644 --- a/README.md +++ b/README.md @@ -470,6 +470,7 @@ Set this flag to indicate which build stage is the target build stage. #### --tarPath Set this flag as `--tarPath=` to save the image as a tarball at path instead of pushing the image. +You need to set `--destination` as well (for example `--destination=image`). #### --verbosity From 355ed054311e71f175d646649393b21360615934 Mon Sep 17 00:00:00 2001 From: yangtaokm Date: Sun, 13 Oct 2019 20:39:15 +0800 Subject: [PATCH 52/66] Initial commit for Azure Blob Storage SupportX --- Gopkg.lock | 32 ++++++++++++++++++++++++++++++-- Gopkg.toml | 4 ++++ README.md | 13 +++++++++---- pkg/buildcontext/buildcontext.go | 9 ++++++++- pkg/constants/constants.go | 8 ++++++++ 5 files changed, 59 insertions(+), 7 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index f551c2e6f..3b2c1960e 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -17,6 +17,14 @@ revision = "aad3f485ee528456e0768f20397b4d9dd941e755" version = "v0.25.0" +[[projects]] + digest = "1:602649ff074ccee9273e1d3b25c4069f13a70fa0c232957c7d68a6f02fb7a9ea" + name = "github.com/Azure/azure-pipeline-go" + packages = ["pipeline"] + pruneopts = "NUT" + revision = "232aee85e8e3a6223a11c0943f7df2ae0fac00e4" + version = "v0.2.2" + [[projects]] digest = "1:f56288257633effcb1743f6fa77d12dd3eaeeb5c78b3de6e199eb1b4780f57f5" name = "github.com/Azure/azure-sdk-for-go" @@ -28,6 +36,14 @@ revision = "4e8cbbfb1aeab140cd0fa97fd16b64ee18c3ca6a" version = "v19.1.0" +[[projects]] + digest = "1:0a1307390445735712b3b914b447cc7ad1974795e50470b7e092cfaa6063f6dd" + name = "github.com/Azure/azure-storage-blob-go" + packages = ["azblob"] + pruneopts = "NUT" + revision = "fc700035fe4a7020f50d49f420b3c088aed57e03" + version = "v0.8.0" + [[projects]] branch = "master" digest = "1:81f8c061c3d18ed1710957910542bc17d2b789c6cd19e0f654c30b35fd255ca5" @@ -445,7 +461,7 @@ version = "v0.2.0" [[projects]] - digest = "1:5924704ec96f00247784c512cc57f45a595030376a7ff2ff993bf356793a2cb0" + digest = "1:c94f3440939c4a6e4ad6db6cd9315c7817ea6c04fe28cfe2aaae2099d2bc3cef" name = "github.com/google/go-containerregistry" packages = [ "pkg/authn", @@ -466,6 +482,7 @@ "pkg/v1/tarball", "pkg/v1/types", "pkg/v1/v1util", + "pkg/v1/validate", ] pruneopts = "NUT" revision = "31e00cede111067bae48bfc2cbfc522b0b36207f" @@ -604,6 +621,14 @@ revision = "81db2a75821ed34e682567d48be488a1c3121088" version = "0.5" +[[projects]] + branch = "master" + digest = "1:e0e7ecd8a4d1faddfb4b7e8a59684f803aa7f45489e25a64bb25d63691d4fc7a" + name = "github.com/mattn/go-ieproxy" + packages = ["."] + pruneopts = "NUT" + revision = "f9202b1cfdeb0c82ddd3dc1e8e9cd94b3c0c1b13" + [[projects]] digest = "1:d0164259ed17929689df11205194d80288e8ae25351778f7a3421a24774c36f8" name = "github.com/mattn/go-shellwords" @@ -957,12 +982,13 @@ [[projects]] branch = "master" - digest = "1:f3e57ce909415ab28ce6c6db1fa7bf7a9134c8d9cb53663775d766b515a665d8" + digest = "1:d3ff7173b1da34e8fc91c30e8695c830bf5d7d7b0851fb8bdfb71fa862e9cf00" name = "golang.org/x/net" packages = [ "context", "context/ctxhttp", "http/httpguts", + "http/httpproxy", "http2", "http2/hpack", "idna", @@ -1372,6 +1398,7 @@ analyzer-version = 1 input-imports = [ "cloud.google.com/go/storage", + "github.com/Azure/azure-storage-blob-go/azblob", "github.com/aws/aws-sdk-go/aws", "github.com/aws/aws-sdk-go/aws/session", "github.com/aws/aws-sdk-go/service/s3", @@ -1395,6 +1422,7 @@ "github.com/google/go-containerregistry/pkg/v1/random", "github.com/google/go-containerregistry/pkg/v1/remote", "github.com/google/go-containerregistry/pkg/v1/tarball", + "github.com/google/go-containerregistry/pkg/v1/validate", "github.com/google/go-github/github", "github.com/karrick/godirwalk", "github.com/minio/HighwayHash", diff --git a/Gopkg.toml b/Gopkg.toml index 64aa95abe..d77fa3382 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -50,3 +50,7 @@ required = [ [[constraint]] name = "github.com/minio/HighwayHash" version = "1.0.0" + +[[constraint]] + name = "github.com/Azure/azure-storage-blob-go" + version = "0.8.0" diff --git a/README.md b/README.md index 11577d87b..44ccb5876 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,7 @@ You will need to store your build context in a place that kaniko can access. Right now, kaniko supports these storage solutions: - GCS Bucket - S3 Bucket +- Azure Blob Storage - Local Directory - Git Repository @@ -123,14 +124,18 @@ When running kaniko, use the `--context` flag with the appropriate prefix to spe | Source | Prefix | Example | |---------|---------|---------| -| Local Directory | dir://[path to a directory in the kaniko container] | `dir:///workspace` | -| GCS Bucket | gs://[bucket name]/[path to .tar.gz] | `gs://kaniko-bucket/path/to/context.tar.gz` | -| S3 Bucket | s3://[bucket name]/[path to .tar.gz] | `s3://kaniko-bucket/path/to/context.tar.gz` | -| Git Repository | git://[repository url][#reference] | `git://github.com/acme/myproject.git#refs/heads/mybranch` | +| Local Directory | dir://[path to a directory in the kaniko container] | `dir:///workspace` | +| GCS Bucket | gs://[bucket name]/[path to .tar.gz] | `gs://kaniko-bucket/path/to/context.tar.gz` | +| S3 Bucket | s3://[bucket name]/[path to .tar.gz] | `s3://kaniko-bucket/path/to/context.tar.gz` | +| Azure Blob Storage| https://[account].[azureblobhostsuffix]/[container]/[path to .tar.gz] | `https://myaccount.blob.core.windows.net/container/path/to/context.tar.gz` | +| Git Repository | git://[repository url][#reference] | `git://github.com/acme/myproject.git#refs/heads/mybranch` | If you don't specify a prefix, kaniko will assume a local directory. For example, to use a GCS bucket called `kaniko-bucket`, you would pass in `--context=gs://kaniko-bucket/path/to/context.tar.gz`. +### Using Azure Blob Storage +If you are using Azure Blob Storage for context file, you will need to pass [Azure Storage Account Access Key](https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string?toc=%2fazure%2fstorage%2fblobs%2ftoc.json) as an evironment variable named `AZURE_STORAGE_ACCESS_KEY` through Kubernetes Secrets + ### Using Private Git Repository You can use `Personal Access Tokens` for Build Contexts from Private Repositories from [GitHub](https://blog.github.com/2012-09-21-easier-builds-and-deployments-using-git-over-https-and-oauth/). diff --git a/pkg/buildcontext/buildcontext.go b/pkg/buildcontext/buildcontext.go index 032f69fac..3142239a8 100644 --- a/pkg/buildcontext/buildcontext.go +++ b/pkg/buildcontext/buildcontext.go @@ -21,6 +21,7 @@ import ( "strings" "github.com/GoogleContainerTools/kaniko/pkg/constants" + "github.com/GoogleContainerTools/kaniko/pkg/util" ) // BuildContext unifies calls to download and unpack the build context. @@ -35,6 +36,7 @@ func GetBuildContext(srcContext string) (BuildContext, error) { split := strings.SplitAfter(srcContext, "://") prefix := split[0] context := split[1] + switch prefix { case constants.GCSBuildContextPrefix: return &GCS{context: context}, nil @@ -44,6 +46,11 @@ func GetBuildContext(srcContext string) (BuildContext, error) { return &Dir{context: context}, nil case constants.GitBuildContextPrefix: return &Git{context: context}, nil + case constants.HTTPSBuildContextPrefix: + if util.ValidAzureBlobStorageHost(srcContext) { + return &AzureBlob{context: srcContext}, nil + } + return nil, errors.New("url provided for https context is not in a supported format, please use the https url for Azure Blob Storage") } - return nil, errors.New("unknown build context prefix provided, please use one of the following: gs://, dir://, s3://, git://") + return nil, errors.New("unknown build context prefix provided, please use one of the following: gs://, dir://, s3://, git://, https://") } diff --git a/pkg/constants/constants.go b/pkg/constants/constants.go index d0d84e3f3..699b13355 100644 --- a/pkg/constants/constants.go +++ b/pkg/constants/constants.go @@ -58,6 +58,7 @@ const ( S3BuildContextPrefix = "s3://" LocalDirBuildContextPrefix = "dir://" GitBuildContextPrefix = "git://" + HTTPSBuildContextPrefix = "https://" HOME = "HOME" // DefaultHOMEValue is the default value Docker sets for $HOME @@ -78,3 +79,10 @@ const ( // ScratchEnvVars are the default environment variables needed for a scratch image. var ScratchEnvVars = []string{"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"} + +//AzureBlobStorageHostRegEx is ReqEX for Valid azure blob storage host suffix in url for AzureCloud, AzureChinaCloud, AzureGermanCloud and AzureUSGovernment +var AzureBlobStorageHostRegEx = []string{"https://(.+?).blob.core.windows.net/(.+)", + "https://(.+?).blob.core.chinacloudapi.cn/(.+)", + "https://(.+?).blob.core.cloudapi.de/(.+)", + "https://(.+?).blob.core.usgovcloudapi.net/(.+)", +} From 3e6a24b1524579209a5d1ebdda0624b520015a62 Mon Sep 17 00:00:00 2001 From: yangtaokm Date: Sun, 13 Oct 2019 20:39:15 +0800 Subject: [PATCH 53/66] Initial commit for Azure Blob Storage SupportX --- Gopkg.lock | 32 +- Gopkg.toml | 4 + README.md | 13 +- examples/pod-blobstroage.yaml | 23 + pkg/buildcontext/azureblob.go | 82 + pkg/buildcontext/buildcontext.go | 9 +- pkg/constants/constants.go | 8 + pkg/util/azureblob_util.go | 36 + pkg/util/azureblob_util_test.go | 75 + .../Azure/azure-pipeline-go/LICENSE | 21 + .../Azure/azure-pipeline-go/pipeline/core.go | 284 + .../azure-pipeline-go/pipeline/defaultlog.go | 14 + .../pipeline/defaultlog_syslog.go | 33 + .../pipeline/defaultlog_windows.go | 61 + .../Azure/azure-pipeline-go/pipeline/doc.go | 161 + .../Azure/azure-pipeline-go/pipeline/error.go | 181 + .../azure-pipeline-go/pipeline/progress.go | 82 + .../azure-pipeline-go/pipeline/request.go | 147 + .../azure-pipeline-go/pipeline/response.go | 74 + .../azure-pipeline-go/pipeline/version.go | 9 + .../Azure/azure-storage-blob-go/LICENSE | 21 + .../azblob/access_conditions.go | 65 + .../azblob/atomicmorph.go | 69 + .../azure-storage-blob-go/azblob/highlevel.go | 543 ++ .../azblob/parsing_urls.go | 153 + .../azblob/sas_service.go | 256 + .../azblob/service_codes_blob.go | 195 + .../azblob/storage_account_credential.go | 8 + .../azblob/url_append_blob.go | 128 + .../azure-storage-blob-go/azblob/url_blob.go | 216 + .../azblob/url_block_blob.go | 162 + .../azblob/url_container.go | 295 + .../azblob/url_page_blob.go | 223 + .../azblob/url_service.go | 145 + .../azblob/user_delegation_credential.go | 38 + .../azure-storage-blob-go/azblob/version.go | 3 + .../azblob/zc_credential_anonymous.go | 55 + .../azblob/zc_credential_shared_key.go | 205 + .../azblob/zc_credential_token.go | 137 + .../azblob/zc_mmf_unix.go | 27 + .../azblob/zc_mmf_windows.go | 38 + .../azblob/zc_pipeline.go | 46 + .../azblob/zc_policy_request_log.go | 182 + .../azblob/zc_policy_retry.go | 412 ++ .../azblob/zc_policy_telemetry.go | 51 + .../azblob/zc_policy_unique_request_id.go | 24 + .../azblob/zc_retry_reader.go | 178 + .../azblob/zc_sas_account.go | 219 + .../azblob/zc_sas_query_params.go | 322 + .../azblob/zc_service_codes_common.go | 131 + .../azblob/zc_storage_error.go | 111 + .../azblob/zc_util_validate.go | 64 + .../azure-storage-blob-go/azblob/zc_uuid.go | 77 + .../azure-storage-blob-go/azblob/zt_doc.go | 89 + .../azblob/zz_generated_append_blob.go | 349 ++ .../azblob/zz_generated_blob.go | 1365 +++++ .../azblob/zz_generated_block_blob.go | 510 ++ .../azblob/zz_generated_client.go | 38 + .../azblob/zz_generated_container.go | 1037 ++++ .../azblob/zz_generated_models.go | 5202 +++++++++++++++++ .../azblob/zz_generated_page_blob.go | 896 +++ .../azblob/zz_generated_responder_policy.go | 74 + .../azblob/zz_generated_response_error.go | 95 + .../azblob/zz_generated_service.go | 467 ++ .../azblob/zz_generated_validation.go | 367 ++ .../azblob/zz_generated_version.go | 14 + .../azblob/zz_response_helpers.go | 242 + .../mattn/go-ieproxy/GetProxyFunc.go | 11 + vendor/github.com/mattn/go-ieproxy/LICENSE | 23 + vendor/github.com/mattn/go-ieproxy/ieproxy.go | 51 + .../mattn/go-ieproxy/ieproxy_unix.go | 10 + .../mattn/go-ieproxy/ieproxy_windows.go | 164 + .../mattn/go-ieproxy/kernel32_data_windows.go | 15 + .../github.com/mattn/go-ieproxy/pac_unix.go | 7 + .../mattn/go-ieproxy/pac_windows.go | 72 + .../mattn/go-ieproxy/proxyMiddleman_unix.go | 13 + .../go-ieproxy/proxyMiddleman_windows.go | 52 + vendor/github.com/mattn/go-ieproxy/utils.go | 23 + .../mattn/go-ieproxy/winhttp_data_windows.go | 50 + .../golang.org/x/net/http/httpproxy/proxy.go | 370 ++ 80 files changed, 17747 insertions(+), 7 deletions(-) create mode 100644 examples/pod-blobstroage.yaml create mode 100644 pkg/buildcontext/azureblob.go create mode 100644 pkg/util/azureblob_util.go create mode 100644 pkg/util/azureblob_util_test.go create mode 100644 vendor/github.com/Azure/azure-pipeline-go/LICENSE create mode 100755 vendor/github.com/Azure/azure-pipeline-go/pipeline/core.go create mode 100644 vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog.go create mode 100755 vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_syslog.go create mode 100755 vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_windows.go create mode 100755 vendor/github.com/Azure/azure-pipeline-go/pipeline/doc.go create mode 100755 vendor/github.com/Azure/azure-pipeline-go/pipeline/error.go create mode 100755 vendor/github.com/Azure/azure-pipeline-go/pipeline/progress.go create mode 100755 vendor/github.com/Azure/azure-pipeline-go/pipeline/request.go create mode 100755 vendor/github.com/Azure/azure-pipeline-go/pipeline/response.go create mode 100644 vendor/github.com/Azure/azure-pipeline-go/pipeline/version.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/LICENSE create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/access_conditions.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/atomicmorph.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/highlevel.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/parsing_urls.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/sas_service.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/service_codes_blob.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/storage_account_credential.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/url_append_blob.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/url_blob.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/url_block_blob.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/url_container.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/url_page_blob.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/url_service.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/user_delegation_credential.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/version.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_anonymous.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_shared_key.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_token.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_unix.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_windows.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_pipeline.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_request_log.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_retry.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_telemetry.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_unique_request_id.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_retry_reader.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_account.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_query_params.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_service_codes_common.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_storage_error.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_util_validate.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_uuid.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zt_doc.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_append_blob.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_blob.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_block_blob.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_client.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_container.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_models.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_page_blob.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_responder_policy.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_response_error.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_service.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_validation.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_version.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_response_helpers.go create mode 100644 vendor/github.com/mattn/go-ieproxy/GetProxyFunc.go create mode 100644 vendor/github.com/mattn/go-ieproxy/LICENSE create mode 100644 vendor/github.com/mattn/go-ieproxy/ieproxy.go create mode 100644 vendor/github.com/mattn/go-ieproxy/ieproxy_unix.go create mode 100644 vendor/github.com/mattn/go-ieproxy/ieproxy_windows.go create mode 100644 vendor/github.com/mattn/go-ieproxy/kernel32_data_windows.go create mode 100644 vendor/github.com/mattn/go-ieproxy/pac_unix.go create mode 100644 vendor/github.com/mattn/go-ieproxy/pac_windows.go create mode 100644 vendor/github.com/mattn/go-ieproxy/proxyMiddleman_unix.go create mode 100644 vendor/github.com/mattn/go-ieproxy/proxyMiddleman_windows.go create mode 100644 vendor/github.com/mattn/go-ieproxy/utils.go create mode 100644 vendor/github.com/mattn/go-ieproxy/winhttp_data_windows.go create mode 100644 vendor/golang.org/x/net/http/httpproxy/proxy.go diff --git a/Gopkg.lock b/Gopkg.lock index f551c2e6f..3b2c1960e 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -17,6 +17,14 @@ revision = "aad3f485ee528456e0768f20397b4d9dd941e755" version = "v0.25.0" +[[projects]] + digest = "1:602649ff074ccee9273e1d3b25c4069f13a70fa0c232957c7d68a6f02fb7a9ea" + name = "github.com/Azure/azure-pipeline-go" + packages = ["pipeline"] + pruneopts = "NUT" + revision = "232aee85e8e3a6223a11c0943f7df2ae0fac00e4" + version = "v0.2.2" + [[projects]] digest = "1:f56288257633effcb1743f6fa77d12dd3eaeeb5c78b3de6e199eb1b4780f57f5" name = "github.com/Azure/azure-sdk-for-go" @@ -28,6 +36,14 @@ revision = "4e8cbbfb1aeab140cd0fa97fd16b64ee18c3ca6a" version = "v19.1.0" +[[projects]] + digest = "1:0a1307390445735712b3b914b447cc7ad1974795e50470b7e092cfaa6063f6dd" + name = "github.com/Azure/azure-storage-blob-go" + packages = ["azblob"] + pruneopts = "NUT" + revision = "fc700035fe4a7020f50d49f420b3c088aed57e03" + version = "v0.8.0" + [[projects]] branch = "master" digest = "1:81f8c061c3d18ed1710957910542bc17d2b789c6cd19e0f654c30b35fd255ca5" @@ -445,7 +461,7 @@ version = "v0.2.0" [[projects]] - digest = "1:5924704ec96f00247784c512cc57f45a595030376a7ff2ff993bf356793a2cb0" + digest = "1:c94f3440939c4a6e4ad6db6cd9315c7817ea6c04fe28cfe2aaae2099d2bc3cef" name = "github.com/google/go-containerregistry" packages = [ "pkg/authn", @@ -466,6 +482,7 @@ "pkg/v1/tarball", "pkg/v1/types", "pkg/v1/v1util", + "pkg/v1/validate", ] pruneopts = "NUT" revision = "31e00cede111067bae48bfc2cbfc522b0b36207f" @@ -604,6 +621,14 @@ revision = "81db2a75821ed34e682567d48be488a1c3121088" version = "0.5" +[[projects]] + branch = "master" + digest = "1:e0e7ecd8a4d1faddfb4b7e8a59684f803aa7f45489e25a64bb25d63691d4fc7a" + name = "github.com/mattn/go-ieproxy" + packages = ["."] + pruneopts = "NUT" + revision = "f9202b1cfdeb0c82ddd3dc1e8e9cd94b3c0c1b13" + [[projects]] digest = "1:d0164259ed17929689df11205194d80288e8ae25351778f7a3421a24774c36f8" name = "github.com/mattn/go-shellwords" @@ -957,12 +982,13 @@ [[projects]] branch = "master" - digest = "1:f3e57ce909415ab28ce6c6db1fa7bf7a9134c8d9cb53663775d766b515a665d8" + digest = "1:d3ff7173b1da34e8fc91c30e8695c830bf5d7d7b0851fb8bdfb71fa862e9cf00" name = "golang.org/x/net" packages = [ "context", "context/ctxhttp", "http/httpguts", + "http/httpproxy", "http2", "http2/hpack", "idna", @@ -1372,6 +1398,7 @@ analyzer-version = 1 input-imports = [ "cloud.google.com/go/storage", + "github.com/Azure/azure-storage-blob-go/azblob", "github.com/aws/aws-sdk-go/aws", "github.com/aws/aws-sdk-go/aws/session", "github.com/aws/aws-sdk-go/service/s3", @@ -1395,6 +1422,7 @@ "github.com/google/go-containerregistry/pkg/v1/random", "github.com/google/go-containerregistry/pkg/v1/remote", "github.com/google/go-containerregistry/pkg/v1/tarball", + "github.com/google/go-containerregistry/pkg/v1/validate", "github.com/google/go-github/github", "github.com/karrick/godirwalk", "github.com/minio/HighwayHash", diff --git a/Gopkg.toml b/Gopkg.toml index 64aa95abe..d77fa3382 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -50,3 +50,7 @@ required = [ [[constraint]] name = "github.com/minio/HighwayHash" version = "1.0.0" + +[[constraint]] + name = "github.com/Azure/azure-storage-blob-go" + version = "0.8.0" diff --git a/README.md b/README.md index 11577d87b..44ccb5876 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,7 @@ You will need to store your build context in a place that kaniko can access. Right now, kaniko supports these storage solutions: - GCS Bucket - S3 Bucket +- Azure Blob Storage - Local Directory - Git Repository @@ -123,14 +124,18 @@ When running kaniko, use the `--context` flag with the appropriate prefix to spe | Source | Prefix | Example | |---------|---------|---------| -| Local Directory | dir://[path to a directory in the kaniko container] | `dir:///workspace` | -| GCS Bucket | gs://[bucket name]/[path to .tar.gz] | `gs://kaniko-bucket/path/to/context.tar.gz` | -| S3 Bucket | s3://[bucket name]/[path to .tar.gz] | `s3://kaniko-bucket/path/to/context.tar.gz` | -| Git Repository | git://[repository url][#reference] | `git://github.com/acme/myproject.git#refs/heads/mybranch` | +| Local Directory | dir://[path to a directory in the kaniko container] | `dir:///workspace` | +| GCS Bucket | gs://[bucket name]/[path to .tar.gz] | `gs://kaniko-bucket/path/to/context.tar.gz` | +| S3 Bucket | s3://[bucket name]/[path to .tar.gz] | `s3://kaniko-bucket/path/to/context.tar.gz` | +| Azure Blob Storage| https://[account].[azureblobhostsuffix]/[container]/[path to .tar.gz] | `https://myaccount.blob.core.windows.net/container/path/to/context.tar.gz` | +| Git Repository | git://[repository url][#reference] | `git://github.com/acme/myproject.git#refs/heads/mybranch` | If you don't specify a prefix, kaniko will assume a local directory. For example, to use a GCS bucket called `kaniko-bucket`, you would pass in `--context=gs://kaniko-bucket/path/to/context.tar.gz`. +### Using Azure Blob Storage +If you are using Azure Blob Storage for context file, you will need to pass [Azure Storage Account Access Key](https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string?toc=%2fazure%2fstorage%2fblobs%2ftoc.json) as an evironment variable named `AZURE_STORAGE_ACCESS_KEY` through Kubernetes Secrets + ### Using Private Git Repository You can use `Personal Access Tokens` for Build Contexts from Private Repositories from [GitHub](https://blog.github.com/2012-09-21-easier-builds-and-deployments-using-git-over-https-and-oauth/). diff --git a/examples/pod-blobstroage.yaml b/examples/pod-blobstroage.yaml new file mode 100644 index 000000000..4891fc0de --- /dev/null +++ b/examples/pod-blobstroage.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Pod +metadata: + name: kaniko +spec: + containers: + - name: kaniko + image: gcr.io/kaniko-project/executor:latest + args: ["--dockerfile=", + "--context=https://myaccount.blob.core.windows.net/container/path/to/context.tar.gz", + "--destination="] +... + env: + - name: AZURE_STORAGE_ACCESS_KEY + valueFrom: + secretKeyRef: + name: azure-storage-access-key + key: azure-storage-access-key +... + volumes: + - name: azure-storage-access-key + secret: + secretName: azure-storage-access-key \ No newline at end of file diff --git a/pkg/buildcontext/azureblob.go b/pkg/buildcontext/azureblob.go new file mode 100644 index 000000000..f3f1b1ad7 --- /dev/null +++ b/pkg/buildcontext/azureblob.go @@ -0,0 +1,82 @@ +/* +Copyright 2018 Google LLC + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package buildcontext + +import ( + "context" + "errors" + "net/url" + "os" + "path/filepath" + "strings" + + "github.com/Azure/azure-storage-blob-go/azblob" + "github.com/GoogleContainerTools/kaniko/pkg/constants" + "github.com/GoogleContainerTools/kaniko/pkg/util" +) + +// AzureBlob struct for Azure Blob Storage processing +type AzureBlob struct { + context string +} + +// Download context file from given azure blob storage url and unpack it to BuildContextDir +func (b *AzureBlob) UnpackTarFromBuildContext() (string, error) { + + //Get Azure_STORAGE_ACCESS_KEY from environment variables + accountKey := os.Getenv("AZURE_STORAGE_ACCESS_KEY") + if len(accountKey) == 0 { + return "", errors.New("AZURE_STORAGE_ACCESS_KEY environment variable is not set") + } + + //Get storage accoutname for Azure Blob Storage + u, _ := url.Parse(b.context) + parts := azblob.NewBlobURLParts(*u) + accountName := strings.Split(parts.Host, ".")[0] + + //Generate credentail with accountname and accountkey + credential, err := azblob.NewSharedKeyCredential(accountName, accountKey) + if err != nil { + return parts.Host, err + } + + //Create directory and file for downloading context file + directory := constants.BuildContextDir + tarPath := filepath.Join(directory, constants.ContextTar) + if err := os.MkdirAll(directory, 0750); err != nil { + return directory, err + } + file, err := os.Create(tarPath) + if err != nil { + return directory, err + } + + //Downloading contextfile from Azure Blob Storage + p := azblob.NewPipeline(credential, azblob.PipelineOptions{}) + blobURL := azblob.NewBlobURL(*u, p) + ctx := context.Background() + + if err := azblob.DownloadBlobToFile(ctx, blobURL, 0, 0, file, azblob.DownloadFromBlobOptions{}); err != nil { + return parts.Host, err + } + + if err := util.UnpackCompressedTar(tarPath, directory); err != nil { + return tarPath, err + } + // Remove the tar so it doesn't interfere with subsequent commands + return directory, os.Remove(tarPath) +} diff --git a/pkg/buildcontext/buildcontext.go b/pkg/buildcontext/buildcontext.go index 032f69fac..3142239a8 100644 --- a/pkg/buildcontext/buildcontext.go +++ b/pkg/buildcontext/buildcontext.go @@ -21,6 +21,7 @@ import ( "strings" "github.com/GoogleContainerTools/kaniko/pkg/constants" + "github.com/GoogleContainerTools/kaniko/pkg/util" ) // BuildContext unifies calls to download and unpack the build context. @@ -35,6 +36,7 @@ func GetBuildContext(srcContext string) (BuildContext, error) { split := strings.SplitAfter(srcContext, "://") prefix := split[0] context := split[1] + switch prefix { case constants.GCSBuildContextPrefix: return &GCS{context: context}, nil @@ -44,6 +46,11 @@ func GetBuildContext(srcContext string) (BuildContext, error) { return &Dir{context: context}, nil case constants.GitBuildContextPrefix: return &Git{context: context}, nil + case constants.HTTPSBuildContextPrefix: + if util.ValidAzureBlobStorageHost(srcContext) { + return &AzureBlob{context: srcContext}, nil + } + return nil, errors.New("url provided for https context is not in a supported format, please use the https url for Azure Blob Storage") } - return nil, errors.New("unknown build context prefix provided, please use one of the following: gs://, dir://, s3://, git://") + return nil, errors.New("unknown build context prefix provided, please use one of the following: gs://, dir://, s3://, git://, https://") } diff --git a/pkg/constants/constants.go b/pkg/constants/constants.go index d0d84e3f3..699b13355 100644 --- a/pkg/constants/constants.go +++ b/pkg/constants/constants.go @@ -58,6 +58,7 @@ const ( S3BuildContextPrefix = "s3://" LocalDirBuildContextPrefix = "dir://" GitBuildContextPrefix = "git://" + HTTPSBuildContextPrefix = "https://" HOME = "HOME" // DefaultHOMEValue is the default value Docker sets for $HOME @@ -78,3 +79,10 @@ const ( // ScratchEnvVars are the default environment variables needed for a scratch image. var ScratchEnvVars = []string{"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"} + +//AzureBlobStorageHostRegEx is ReqEX for Valid azure blob storage host suffix in url for AzureCloud, AzureChinaCloud, AzureGermanCloud and AzureUSGovernment +var AzureBlobStorageHostRegEx = []string{"https://(.+?).blob.core.windows.net/(.+)", + "https://(.+?).blob.core.chinacloudapi.cn/(.+)", + "https://(.+?).blob.core.cloudapi.de/(.+)", + "https://(.+?).blob.core.usgovcloudapi.net/(.+)", +} diff --git a/pkg/util/azureblob_util.go b/pkg/util/azureblob_util.go new file mode 100644 index 000000000..c5e60c866 --- /dev/null +++ b/pkg/util/azureblob_util.go @@ -0,0 +1,36 @@ +/* +Copyright 2018 Google LLC + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "regexp" + + "github.com/GoogleContainerTools/kaniko/pkg/constants" +) + +//Validate if the host url provided is with correct suffix for AzureCloud, AzureChinaCloud, AzureGermanCloud and AzureUSGovernment +//RegEX for supported suffix defined in constants.AzureBlobStorageHostRegEx +func ValidAzureBlobStorageHost(context string) bool { + for _, re := range constants.AzureBlobStorageHostRegEx { + validBlobURL := regexp.MustCompile(re) + if validBlobURL.MatchString(context) { + return true + } + } + + return false +} diff --git a/pkg/util/azureblob_util_test.go b/pkg/util/azureblob_util_test.go new file mode 100644 index 000000000..5d5cff2d3 --- /dev/null +++ b/pkg/util/azureblob_util_test.go @@ -0,0 +1,75 @@ +/* +Copyright 2018 Google LLC + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "testing" + + "github.com/GoogleContainerTools/kaniko/testutil" +) + +func Test_ValidAzureBlobStorageHost(t *testing.T) { + tests := []struct { + name string + context string + expectedResult bool + }{ + { + name: "AzureCloud", + context: "https://myaccount.blob.core.windows.net/fairingcontext/context.tar.gz", + expectedResult: true, + }, + { + name: "AzureChinaCloud", + context: "https://myaccount.blob.core.chinacloudapi.cn/fairingcontext/context.tar.gz", + expectedResult: true, + }, + { + name: "AzureGermanCloud", + context: "https://myaccount.blob.core.cloudapi.de/fairingcontext/context.tar.gz", + expectedResult: true, + }, + { + name: "AzureUSGovernment", + context: "https://myaccount.blob.core.usgovcloudapi.net/fairingcontext/context.tar.gz", + expectedResult: true, + }, + { + name: "Invalid Azure Blob Storage Hostname", + context: "https://myaccount.anything.core.windows.net/fairingcontext/context.tar.gz", + expectedResult: false, + }, + { + name: "URL Missing Accountname", + context: "https://blob.core.windows.net/fairingcontext/context.tar.gz", + expectedResult: false, + }, + { + name: "URL Missing Containername", + context: "https://myaccount.blob.core.windows.net/", + expectedResult: false, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + result := ValidAzureBlobStorageHost(test.context) + testutil.CheckDeepEqual(t, test.expectedResult, result) + + }) + } +} diff --git a/vendor/github.com/Azure/azure-pipeline-go/LICENSE b/vendor/github.com/Azure/azure-pipeline-go/LICENSE new file mode 100644 index 000000000..d1ca00f20 --- /dev/null +++ b/vendor/github.com/Azure/azure-pipeline-go/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE \ No newline at end of file diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/core.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/core.go new file mode 100755 index 000000000..d7b866cdf --- /dev/null +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/core.go @@ -0,0 +1,284 @@ +package pipeline + +import ( + "context" + "github.com/mattn/go-ieproxy" + "net" + "net/http" + "os" + "time" +) + +// The Factory interface represents an object that can create its Policy object. Each HTTP request sent +// requires that this Factory create a new instance of its Policy object. +type Factory interface { + New(next Policy, po *PolicyOptions) Policy +} + +// FactoryFunc is an adapter that allows the use of an ordinary function as a Factory interface. +type FactoryFunc func(next Policy, po *PolicyOptions) PolicyFunc + +// New calls f(next,po). +func (f FactoryFunc) New(next Policy, po *PolicyOptions) Policy { + return f(next, po) +} + +// The Policy interface represents a mutable Policy object created by a Factory. The object can mutate/process +// the HTTP request and then forward it on to the next Policy object in the linked-list. The returned +// Response goes backward through the linked-list for additional processing. +// NOTE: Request is passed by value so changes do not change the caller's version of +// the request. However, Request has some fields that reference mutable objects (not strings). +// These references are copied; a deep copy is not performed. Specifically, this means that +// you should avoid modifying the objects referred to by these fields: URL, Header, Body, +// GetBody, TransferEncoding, Form, MultipartForm, Trailer, TLS, Cancel, and Response. +type Policy interface { + Do(ctx context.Context, request Request) (Response, error) +} + +// PolicyFunc is an adapter that allows the use of an ordinary function as a Policy interface. +type PolicyFunc func(ctx context.Context, request Request) (Response, error) + +// Do calls f(ctx, request). +func (f PolicyFunc) Do(ctx context.Context, request Request) (Response, error) { + return f(ctx, request) +} + +// Options configures a Pipeline's behavior. +type Options struct { + HTTPSender Factory // If sender is nil, then the pipeline's default client is used to send the HTTP requests. + Log LogOptions +} + +// LogLevel tells a logger the minimum level to log. When code reports a log entry, +// the LogLevel indicates the level of the log entry. The logger only records entries +// whose level is at least the level it was told to log. See the Log* constants. +// For example, if a logger is configured with LogError, then LogError, LogPanic, +// and LogFatal entries will be logged; lower level entries are ignored. +type LogLevel uint32 + +const ( + // LogNone tells a logger not to log any entries passed to it. + LogNone LogLevel = iota + + // LogFatal tells a logger to log all LogFatal entries passed to it. + LogFatal + + // LogPanic tells a logger to log all LogPanic and LogFatal entries passed to it. + LogPanic + + // LogError tells a logger to log all LogError, LogPanic and LogFatal entries passed to it. + LogError + + // LogWarning tells a logger to log all LogWarning, LogError, LogPanic and LogFatal entries passed to it. + LogWarning + + // LogInfo tells a logger to log all LogInfo, LogWarning, LogError, LogPanic and LogFatal entries passed to it. + LogInfo + + // LogDebug tells a logger to log all LogDebug, LogInfo, LogWarning, LogError, LogPanic and LogFatal entries passed to it. + LogDebug +) + +// LogOptions configures the pipeline's logging mechanism & level filtering. +type LogOptions struct { + Log func(level LogLevel, message string) + + // ShouldLog is called periodically allowing you to return whether the specified LogLevel should be logged or not. + // An application can return different values over the its lifetime; this allows the application to dynamically + // alter what is logged. NOTE: This method can be called by multiple goroutines simultaneously so make sure + // you implement it in a goroutine-safe way. If nil, nothing is logged (the equivalent of returning LogNone). + // Usually, the function will be implemented simply like this: return level <= LogWarning + ShouldLog func(level LogLevel) bool +} + +type pipeline struct { + factories []Factory + options Options +} + +// The Pipeline interface represents an ordered list of Factory objects and an object implementing the HTTPSender interface. +// You construct a Pipeline by calling the pipeline.NewPipeline function. To send an HTTP request, call pipeline.NewRequest +// and then call Pipeline's Do method passing a context, the request, and a method-specific Factory (or nil). Passing a +// method-specific Factory allows this one call to Do to inject a Policy into the linked-list. The policy is injected where +// the MethodFactoryMarker (see the pipeline.MethodFactoryMarker function) is in the slice of Factory objects. +// +// When Do is called, the Pipeline object asks each Factory object to construct its Policy object and adds each Policy to a linked-list. +// THen, Do sends the Context and Request through all the Policy objects. The final Policy object sends the request over the network +// (via the HTTPSender object passed to NewPipeline) and the response is returned backwards through all the Policy objects. +// Since Pipeline and Factory objects are goroutine-safe, you typically create 1 Pipeline object and reuse it to make many HTTP requests. +type Pipeline interface { + Do(ctx context.Context, methodFactory Factory, request Request) (Response, error) +} + +// NewPipeline creates a new goroutine-safe Pipeline object from the slice of Factory objects and the specified options. +func NewPipeline(factories []Factory, o Options) Pipeline { + if o.HTTPSender == nil { + o.HTTPSender = newDefaultHTTPClientFactory() + } + if o.Log.Log == nil { + o.Log.Log = func(LogLevel, string) {} // No-op logger + } + return &pipeline{factories: factories, options: o} +} + +// Do is called for each and every HTTP request. It tells each Factory to create its own (mutable) Policy object +// replacing a MethodFactoryMarker factory (if it exists) with the methodFactory passed in. Then, the Context and Request +// are sent through the pipeline of Policy objects (which can transform the Request's URL/query parameters/headers) and +// ultimately sends the transformed HTTP request over the network. +func (p *pipeline) Do(ctx context.Context, methodFactory Factory, request Request) (Response, error) { + response, err := p.newPolicies(methodFactory).Do(ctx, request) + request.close() + return response, err +} + +func (p *pipeline) newPolicies(methodFactory Factory) Policy { + // The last Policy is the one that actually sends the request over the wire and gets the response. + // It is overridable via the Options' HTTPSender field. + po := &PolicyOptions{pipeline: p} // One object shared by all policy objects + next := p.options.HTTPSender.New(nil, po) + + // Walk over the slice of Factory objects in reverse (from wire to API) + markers := 0 + for i := len(p.factories) - 1; i >= 0; i-- { + factory := p.factories[i] + if _, ok := factory.(methodFactoryMarker); ok { + markers++ + if markers > 1 { + panic("MethodFactoryMarker can only appear once in the pipeline") + } + if methodFactory != nil { + // Replace MethodFactoryMarker with passed-in methodFactory + next = methodFactory.New(next, po) + } + } else { + // Use the slice's Factory to construct its Policy + next = factory.New(next, po) + } + } + + // Each Factory has created its Policy + if markers == 0 && methodFactory != nil { + panic("Non-nil methodFactory requires MethodFactoryMarker in the pipeline") + } + return next // Return head of the Policy object linked-list +} + +// A PolicyOptions represents optional information that can be used by a node in the +// linked-list of Policy objects. A PolicyOptions is passed to the Factory's New method +// which passes it (if desired) to the Policy object it creates. Today, the Policy object +// uses the options to perform logging. But, in the future, this could be used for more. +type PolicyOptions struct { + pipeline *pipeline +} + +// ShouldLog returns true if the specified log level should be logged. +func (po *PolicyOptions) ShouldLog(level LogLevel) bool { + if po.pipeline.options.Log.ShouldLog != nil { + return po.pipeline.options.Log.ShouldLog(level) + } + return false +} + +// Log logs a string to the Pipeline's Logger. +func (po *PolicyOptions) Log(level LogLevel, msg string) { + if !po.ShouldLog(level) { + return // Short circuit message formatting if we're not logging it + } + + // We are logging it, ensure trailing newline + if len(msg) == 0 || msg[len(msg)-1] != '\n' { + msg += "\n" // Ensure trailing newline + } + po.pipeline.options.Log.Log(level, msg) + + // If logger doesn't handle fatal/panic, we'll do it here. + if level == LogFatal { + os.Exit(1) + } else if level == LogPanic { + panic(msg) + } +} + +var pipelineHTTPClient = newDefaultHTTPClient() + +func newDefaultHTTPClient() *http.Client { + // We want the Transport to have a large connection pool + return &http.Client{ + Transport: &http.Transport{ + Proxy: ieproxy.GetProxyFunc(), + // We use Dial instead of DialContext as DialContext has been reported to cause slower performance. + Dial /*Context*/ : (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + DualStack: true, + }).Dial, /*Context*/ + MaxIdleConns: 0, // No limit + MaxIdleConnsPerHost: 100, + IdleConnTimeout: 90 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 1 * time.Second, + DisableKeepAlives: false, + DisableCompression: false, + MaxResponseHeaderBytes: 0, + //ResponseHeaderTimeout: time.Duration{}, + //ExpectContinueTimeout: time.Duration{}, + }, + } +} + +// newDefaultHTTPClientFactory creates a DefaultHTTPClientPolicyFactory object that sends HTTP requests to a Go's default http.Client. +func newDefaultHTTPClientFactory() Factory { + return FactoryFunc(func(next Policy, po *PolicyOptions) PolicyFunc { + return func(ctx context.Context, request Request) (Response, error) { + r, err := pipelineHTTPClient.Do(request.WithContext(ctx)) + if err != nil { + err = NewError(err, "HTTP request failed") + } + return NewHTTPResponse(r), err + } + }) +} + +var mfm = methodFactoryMarker{} // Singleton + +// MethodFactoryMarker returns a special marker Factory object. When Pipeline's Do method is called, any +// MethodMarkerFactory object is replaced with the specified methodFactory object. If nil is passed fro Do's +// methodFactory parameter, then the MethodFactoryMarker is ignored as the linked-list of Policy objects is created. +func MethodFactoryMarker() Factory { + return mfm +} + +type methodFactoryMarker struct { +} + +func (methodFactoryMarker) New(next Policy, po *PolicyOptions) Policy { + panic("methodFactoryMarker policy should have been replaced with a method policy") +} + +// LogSanitizer can be implemented to clean secrets from lines logged by ForceLog +// By default no implemetation is provided here, because pipeline may be used in many different +// contexts, so the correct implementation is context-dependent +type LogSanitizer interface { + SanitizeLogMessage(raw string) string +} + +var sanitizer LogSanitizer +var enableForceLog bool = true + +// SetLogSanitizer can be called to supply a custom LogSanitizer. +// There is no threadsafety or locking on the underlying variable, +// so call this function just once at startup of your application +// (Don't later try to change the sanitizer on the fly). +func SetLogSanitizer(s LogSanitizer)(){ + sanitizer = s +} + +// SetForceLogEnabled can be used to disable ForceLog +// There is no threadsafety or locking on the underlying variable, +// so call this function just once at startup of your application +// (Don't later try to change the setting on the fly). +func SetForceLogEnabled(enable bool)() { + enableForceLog = enable +} + + diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog.go new file mode 100644 index 000000000..e7ce4970b --- /dev/null +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog.go @@ -0,0 +1,14 @@ +package pipeline + + +// ForceLog should rarely be used. It forceable logs an entry to the +// Windows Event Log (on Windows) or to the SysLog (on Linux) +func ForceLog(level LogLevel, msg string) { + if !enableForceLog { + return + } + if sanitizer != nil { + msg = sanitizer.SanitizeLogMessage(msg) + } + forceLog(level, msg) +} diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_syslog.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_syslog.go new file mode 100755 index 000000000..819509a1e --- /dev/null +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_syslog.go @@ -0,0 +1,33 @@ +// +build !windows,!nacl,!plan9 + +package pipeline + +import ( + "log" + "log/syslog" +) + +// forceLog should rarely be used. It forceable logs an entry to the +// Windows Event Log (on Windows) or to the SysLog (on Linux) +func forceLog(level LogLevel, msg string) { + if defaultLogger == nil { + return // Return fast if we failed to create the logger. + } + // We are logging it, ensure trailing newline + if len(msg) == 0 || msg[len(msg)-1] != '\n' { + msg += "\n" // Ensure trailing newline + } + switch level { + case LogFatal: + defaultLogger.Fatal(msg) + case LogPanic: + defaultLogger.Panic(msg) + case LogError, LogWarning, LogInfo: + defaultLogger.Print(msg) + } +} + +var defaultLogger = func() *log.Logger { + l, _ := syslog.NewLogger(syslog.LOG_USER|syslog.LOG_WARNING, log.LstdFlags) + return l +}() diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_windows.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_windows.go new file mode 100755 index 000000000..5fcf40014 --- /dev/null +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_windows.go @@ -0,0 +1,61 @@ +package pipeline + +import ( + "os" + "syscall" + "unsafe" +) + +// forceLog should rarely be used. It forceable logs an entry to the +// Windows Event Log (on Windows) or to the SysLog (on Linux) +func forceLog(level LogLevel, msg string) { + var el eventType + switch level { + case LogError, LogFatal, LogPanic: + el = elError + case LogWarning: + el = elWarning + case LogInfo: + el = elInfo + } + // We are logging it, ensure trailing newline + if len(msg) == 0 || msg[len(msg)-1] != '\n' { + msg += "\n" // Ensure trailing newline + } + reportEvent(el, 0, msg) +} + +type eventType int16 + +const ( + elSuccess eventType = 0 + elError eventType = 1 + elWarning eventType = 2 + elInfo eventType = 4 +) + +var reportEvent = func() func(eventType eventType, eventID int32, msg string) { + advAPI32 := syscall.MustLoadDLL("advapi32.dll") // lower case to tie in with Go's sysdll registration + registerEventSource := advAPI32.MustFindProc("RegisterEventSourceW") + + sourceName, _ := os.Executable() + sourceNameUTF16, _ := syscall.UTF16PtrFromString(sourceName) + handle, _, lastErr := registerEventSource.Call(uintptr(0), uintptr(unsafe.Pointer(sourceNameUTF16))) + if lastErr == nil { // On error, logging is a no-op + return func(eventType eventType, eventID int32, msg string) {} + } + reportEvent := advAPI32.MustFindProc("ReportEventW") + return func(eventType eventType, eventID int32, msg string) { + s, _ := syscall.UTF16PtrFromString(msg) + _, _, _ = reportEvent.Call( + uintptr(handle), // HANDLE hEventLog + uintptr(eventType), // WORD wType + uintptr(0), // WORD wCategory + uintptr(eventID), // DWORD dwEventID + uintptr(0), // PSID lpUserSid + uintptr(1), // WORD wNumStrings + uintptr(0), // DWORD dwDataSize + uintptr(unsafe.Pointer(&s)), // LPCTSTR *lpStrings + uintptr(0)) // LPVOID lpRawData + } +}() diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/doc.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/doc.go new file mode 100755 index 000000000..b5ab05f4d --- /dev/null +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/doc.go @@ -0,0 +1,161 @@ +// Copyright 2017 Microsoft Corporation. All rights reserved. +// Use of this source code is governed by an MIT +// license that can be found in the LICENSE file. + +/* +Package pipeline implements an HTTP request/response middleware pipeline whose +policy objects mutate an HTTP request's URL, query parameters, and/or headers before +the request is sent over the wire. + +Not all policy objects mutate an HTTP request; some policy objects simply impact the +flow of requests/responses by performing operations such as logging, retry policies, +timeouts, failure injection, and deserialization of response payloads. + +Implementing the Policy Interface + +To implement a policy, define a struct that implements the pipeline.Policy interface's Do method. Your Do +method is called when an HTTP request wants to be sent over the network. Your Do method can perform any +operation(s) it desires. For example, it can log the outgoing request, mutate the URL, headers, and/or query +parameters, inject a failure, etc. Your Do method must then forward the HTTP request to next Policy object +in a linked-list ensuring that the remaining Policy objects perform their work. Ultimately, the last Policy +object sends the HTTP request over the network (by calling the HTTPSender's Do method). + +When an HTTP response comes back, each Policy object in the linked-list gets a chance to process the response +(in reverse order). The Policy object can log the response, retry the operation if due to a transient failure +or timeout, deserialize the response body, etc. Ultimately, the last Policy object returns the HTTP response +to the code that initiated the original HTTP request. + +Here is a template for how to define a pipeline.Policy object: + + type myPolicy struct { + node PolicyNode + // TODO: Add configuration/setting fields here (if desired)... + } + + func (p *myPolicy) Do(ctx context.Context, request pipeline.Request) (pipeline.Response, error) { + // TODO: Mutate/process the HTTP request here... + response, err := p.node.Do(ctx, request) // Forward HTTP request to next Policy & get HTTP response + // TODO: Mutate/process the HTTP response here... + return response, err // Return response/error to previous Policy + } + +Implementing the Factory Interface + +Each Policy struct definition requires a factory struct definition that implements the pipeline.Factory interface's New +method. The New method is called when application code wants to initiate a new HTTP request. Factory's New method is +passed a pipeline.PolicyNode object which contains a reference to the owning pipeline.Pipeline object (discussed later) and +a reference to the next Policy object in the linked list. The New method should create its corresponding Policy object +passing it the PolicyNode and any other configuration/settings fields appropriate for the specific Policy object. + +Here is a template for how to define a pipeline.Policy object: + + // NOTE: Once created & initialized, Factory objects should be goroutine-safe (ex: immutable); + // this allows reuse (efficient use of memory) and makes these objects usable by multiple goroutines concurrently. + type myPolicyFactory struct { + // TODO: Add any configuration/setting fields if desired... + } + + func (f *myPolicyFactory) New(node pipeline.PolicyNode) Policy { + return &myPolicy{node: node} // TODO: Also initialize any configuration/setting fields here (if desired)... + } + +Using your Factory and Policy objects via a Pipeline + +To use the Factory and Policy objects, an application constructs a slice of Factory objects and passes +this slice to the pipeline.NewPipeline function. + + func NewPipeline(factories []pipeline.Factory, sender pipeline.HTTPSender) Pipeline + +This function also requires an object implementing the HTTPSender interface. For simple scenarios, +passing nil for HTTPSender causes a standard Go http.Client object to be created and used to actually +send the HTTP response over the network. For more advanced scenarios, you can pass your own HTTPSender +object in. This allows sharing of http.Client objects or the use of custom-configured http.Client objects +or other objects that can simulate the network requests for testing purposes. + +Now that you have a pipeline.Pipeline object, you can create a pipeline.Request object (which is a simple +wrapper around Go's standard http.Request object) and pass it to Pipeline's Do method along with passing a +context.Context for cancelling the HTTP request (if desired). + + type Pipeline interface { + Do(ctx context.Context, methodFactory pipeline.Factory, request pipeline.Request) (pipeline.Response, error) + } + +Do iterates over the slice of Factory objects and tells each one to create its corresponding +Policy object. After the linked-list of Policy objects have been created, Do calls the first +Policy object passing it the Context & HTTP request parameters. These parameters now flow through +all the Policy objects giving each object a chance to look at and/or mutate the HTTP request. +The last Policy object sends the message over the network. + +When the network operation completes, the HTTP response and error return values pass +back through the same Policy objects in reverse order. Most Policy objects ignore the +response/error but some log the result, retry the operation (depending on the exact +reason the operation failed), or deserialize the response's body. Your own Policy +objects can do whatever they like when processing outgoing requests or incoming responses. + +Note that after an I/O request runs to completion, the Policy objects for that request +are garbage collected. However, Pipeline object (like Factory objects) are goroutine-safe allowing +them to be created once and reused over many I/O operations. This allows for efficient use of +memory and also makes them safely usable by multiple goroutines concurrently. + +Inserting a Method-Specific Factory into the Linked-List of Policy Objects + +While Pipeline and Factory objects can be reused over many different operations, it is +common to have special behavior for a specific operation/method. For example, a method +may need to deserialize the response's body to an instance of a specific data type. +To accommodate this, the Pipeline's Do method takes an additional method-specific +Factory object. The Do method tells this Factory to create a Policy object and +injects this method-specific Policy object into the linked-list of Policy objects. + +When creating a Pipeline object, the slice of Factory objects passed must have 1 +(and only 1) entry marking where the method-specific Factory should be injected. +The Factory marker is obtained by calling the pipeline.MethodFactoryMarker() function: + + func MethodFactoryMarker() pipeline.Factory + +Creating an HTTP Request Object + +The HTTP request object passed to Pipeline's Do method is not Go's http.Request struct. +Instead, it is a pipeline.Request struct which is a simple wrapper around Go's standard +http.Request. You create a pipeline.Request object by calling the pipeline.NewRequest function: + + func NewRequest(method string, url url.URL, options pipeline.RequestOptions) (request pipeline.Request, err error) + +To this function, you must pass a pipeline.RequestOptions that looks like this: + + type RequestOptions struct { + // The readable and seekable stream to be sent to the server as the request's body. + Body io.ReadSeeker + + // The callback method (if not nil) to be invoked to report progress as the stream is uploaded in the HTTP request. + Progress ProgressReceiver + } + +The method and struct ensure that the request's body stream is a read/seekable stream. +A seekable stream is required so that upon retry, the final Policy object can seek +the stream back to the beginning before retrying the network request and re-uploading the +body. In addition, you can associate a ProgressReceiver callback function which will be +invoked periodically to report progress while bytes are being read from the body stream +and sent over the network. + +Processing the HTTP Response + +When an HTTP response comes in from the network, a reference to Go's http.Response struct is +embedded in a struct that implements the pipeline.Response interface: + + type Response interface { + Response() *http.Response + } + +This interface is returned through all the Policy objects. Each Policy object can call the Response +interface's Response method to examine (or mutate) the embedded http.Response object. + +A Policy object can internally define another struct (implementing the pipeline.Response interface) +that embeds an http.Response and adds additional fields and return this structure to other Policy +objects. This allows a Policy object to deserialize the body to some other struct and return the +original http.Response and the additional struct back through the Policy chain. Other Policy objects +can see the Response but cannot see the additional struct with the deserialized body. After all the +Policy objects have returned, the pipeline.Response interface is returned by Pipeline's Do method. +The caller of this method can perform a type assertion attempting to get back to the struct type +really returned by the Policy object. If the type assertion is successful, the caller now has +access to both the http.Response and the deserialized struct object.*/ +package pipeline diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/error.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/error.go new file mode 100755 index 000000000..4aaf06650 --- /dev/null +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/error.go @@ -0,0 +1,181 @@ +package pipeline + +import ( + "fmt" + "runtime" +) + +type causer interface { + Cause() error +} + +func errorWithPC(msg string, pc uintptr) string { + s := "" + if fn := runtime.FuncForPC(pc); fn != nil { + file, line := fn.FileLine(pc) + s = fmt.Sprintf("-> %v, %v:%v\n", fn.Name(), file, line) + } + s += msg + "\n\n" + return s +} + +func getPC(callersToSkip int) uintptr { + // Get the PC of Initialize method's caller. + pc := [1]uintptr{} + _ = runtime.Callers(callersToSkip, pc[:]) + return pc[0] +} + +// ErrorNode can be an embedded field in a private error object. This field +// adds Program Counter support and a 'cause' (reference to a preceding error). +// When initializing a error type with this embedded field, initialize the +// ErrorNode field by calling ErrorNode{}.Initialize(cause). +type ErrorNode struct { + pc uintptr // Represents a Program Counter that you can get symbols for. + cause error // Refers to the preceding error (or nil) +} + +// Error returns a string with the PC's symbols or "" if the PC is invalid. +// When defining a new error type, have its Error method call this one passing +// it the string representation of the error. +func (e *ErrorNode) Error(msg string) string { + s := errorWithPC(msg, e.pc) + if e.cause != nil { + s += e.cause.Error() + "\n" + } + return s +} + +// Cause returns the error that preceded this error. +func (e *ErrorNode) Cause() error { return e.cause } + +// Temporary returns true if the error occurred due to a temporary condition. +func (e ErrorNode) Temporary() bool { + type temporary interface { + Temporary() bool + } + + for err := e.cause; err != nil; { + if t, ok := err.(temporary); ok { + return t.Temporary() + } + + if cause, ok := err.(causer); ok { + err = cause.Cause() + } else { + err = nil + } + } + return false +} + +// Timeout returns true if the error occurred due to time expiring. +func (e ErrorNode) Timeout() bool { + type timeout interface { + Timeout() bool + } + + for err := e.cause; err != nil; { + if t, ok := err.(timeout); ok { + return t.Timeout() + } + + if cause, ok := err.(causer); ok { + err = cause.Cause() + } else { + err = nil + } + } + return false +} + +// Initialize is used to initialize an embedded ErrorNode field. +// It captures the caller's program counter and saves the cause (preceding error). +// To initialize the field, use "ErrorNode{}.Initialize(cause, 3)". A callersToSkip +// value of 3 is very common; but, depending on your code nesting, you may need +// a different value. +func (ErrorNode) Initialize(cause error, callersToSkip int) ErrorNode { + pc := getPC(callersToSkip) + return ErrorNode{pc: pc, cause: cause} +} + +// Cause walks all the preceding errors and return the originating error. +func Cause(err error) error { + for err != nil { + cause, ok := err.(causer) + if !ok { + break + } + err = cause.Cause() + } + return err +} + +// ErrorNodeNoCause can be an embedded field in a private error object. This field +// adds Program Counter support. +// When initializing a error type with this embedded field, initialize the +// ErrorNodeNoCause field by calling ErrorNodeNoCause{}.Initialize(). +type ErrorNodeNoCause struct { + pc uintptr // Represents a Program Counter that you can get symbols for. +} + +// Error returns a string with the PC's symbols or "" if the PC is invalid. +// When defining a new error type, have its Error method call this one passing +// it the string representation of the error. +func (e *ErrorNodeNoCause) Error(msg string) string { + return errorWithPC(msg, e.pc) +} + +// Temporary returns true if the error occurred due to a temporary condition. +func (e ErrorNodeNoCause) Temporary() bool { + return false +} + +// Timeout returns true if the error occurred due to time expiring. +func (e ErrorNodeNoCause) Timeout() bool { + return false +} + +// Initialize is used to initialize an embedded ErrorNode field. +// It captures the caller's program counter. +// To initialize the field, use "ErrorNodeNoCause{}.Initialize(3)". A callersToSkip +// value of 3 is very common; but, depending on your code nesting, you may need +// a different value. +func (ErrorNodeNoCause) Initialize(callersToSkip int) ErrorNodeNoCause { + pc := getPC(callersToSkip) + return ErrorNodeNoCause{pc: pc} +} + +// NewError creates a simple string error (like Error.New). But, this +// error also captures the caller's Program Counter and the preceding error (if provided). +func NewError(cause error, msg string) error { + if cause != nil { + return &pcError{ + ErrorNode: ErrorNode{}.Initialize(cause, 3), + msg: msg, + } + } + return &pcErrorNoCause{ + ErrorNodeNoCause: ErrorNodeNoCause{}.Initialize(3), + msg: msg, + } +} + +// pcError is a simple string error (like error.New) with an ErrorNode (PC & cause). +type pcError struct { + ErrorNode + msg string +} + +// Error satisfies the error interface. It shows the error with Program Counter +// symbols and calls Error on the preceding error so you can see the full error chain. +func (e *pcError) Error() string { return e.ErrorNode.Error(e.msg) } + +// pcErrorNoCause is a simple string error (like error.New) with an ErrorNode (PC). +type pcErrorNoCause struct { + ErrorNodeNoCause + msg string +} + +// Error satisfies the error interface. It shows the error with Program Counter symbols. +func (e *pcErrorNoCause) Error() string { return e.ErrorNodeNoCause.Error(e.msg) } diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/progress.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/progress.go new file mode 100755 index 000000000..efa3c8ed0 --- /dev/null +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/progress.go @@ -0,0 +1,82 @@ +package pipeline + +import "io" + +// ********** The following is common between the request body AND the response body. + +// ProgressReceiver defines the signature of a callback function invoked as progress is reported. +type ProgressReceiver func(bytesTransferred int64) + +// ********** The following are specific to the request body (a ReadSeekCloser) + +// This struct is used when sending a body to the network +type requestBodyProgress struct { + requestBody io.ReadSeeker // Seeking is required to support retries + pr ProgressReceiver +} + +// NewRequestBodyProgress adds progress reporting to an HTTP request's body stream. +func NewRequestBodyProgress(requestBody io.ReadSeeker, pr ProgressReceiver) io.ReadSeeker { + if pr == nil { + panic("pr must not be nil") + } + return &requestBodyProgress{requestBody: requestBody, pr: pr} +} + +// Read reads a block of data from an inner stream and reports progress +func (rbp *requestBodyProgress) Read(p []byte) (n int, err error) { + n, err = rbp.requestBody.Read(p) + if err != nil { + return + } + // Invokes the user's callback method to report progress + position, err := rbp.requestBody.Seek(0, io.SeekCurrent) + if err != nil { + panic(err) + } + rbp.pr(position) + return +} + +func (rbp *requestBodyProgress) Seek(offset int64, whence int) (offsetFromStart int64, err error) { + return rbp.requestBody.Seek(offset, whence) +} + +// requestBodyProgress supports Close but the underlying stream may not; if it does, Close will close it. +func (rbp *requestBodyProgress) Close() error { + if c, ok := rbp.requestBody.(io.Closer); ok { + return c.Close() + } + return nil +} + +// ********** The following are specific to the response body (a ReadCloser) + +// This struct is used when sending a body to the network +type responseBodyProgress struct { + responseBody io.ReadCloser + pr ProgressReceiver + offset int64 +} + +// NewResponseBodyProgress adds progress reporting to an HTTP response's body stream. +func NewResponseBodyProgress(responseBody io.ReadCloser, pr ProgressReceiver) io.ReadCloser { + if pr == nil { + panic("pr must not be nil") + } + return &responseBodyProgress{responseBody: responseBody, pr: pr, offset: 0} +} + +// Read reads a block of data from an inner stream and reports progress +func (rbp *responseBodyProgress) Read(p []byte) (n int, err error) { + n, err = rbp.responseBody.Read(p) + rbp.offset += int64(n) + + // Invokes the user's callback method to report progress + rbp.pr(rbp.offset) + return +} + +func (rbp *responseBodyProgress) Close() error { + return rbp.responseBody.Close() +} diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/request.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/request.go new file mode 100755 index 000000000..1fbe72bd4 --- /dev/null +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/request.go @@ -0,0 +1,147 @@ +package pipeline + +import ( + "io" + "net/http" + "net/url" + "strconv" +) + +// Request is a thin wrapper over an http.Request. The wrapper provides several helper methods. +type Request struct { + *http.Request +} + +// NewRequest initializes a new HTTP request object with any desired options. +func NewRequest(method string, url url.URL, body io.ReadSeeker) (request Request, err error) { + // Note: the url is passed by value so that any pipeline operations that modify it do so on a copy. + + // This code to construct an http.Request is copied from http.NewRequest(); we intentionally omitted removeEmptyPort for now. + request.Request = &http.Request{ + Method: method, + URL: &url, + Proto: "HTTP/1.1", + ProtoMajor: 1, + ProtoMinor: 1, + Header: make(http.Header), + Host: url.Host, + } + + if body != nil { + err = request.SetBody(body) + } + return +} + +// SetBody sets the body and content length, assumes body is not nil. +func (r Request) SetBody(body io.ReadSeeker) error { + size, err := body.Seek(0, io.SeekEnd) + if err != nil { + return err + } + + body.Seek(0, io.SeekStart) + r.ContentLength = size + r.Header["Content-Length"] = []string{strconv.FormatInt(size, 10)} + + if size != 0 { + r.Body = &retryableRequestBody{body: body} + r.GetBody = func() (io.ReadCloser, error) { + _, err := body.Seek(0, io.SeekStart) + if err != nil { + return nil, err + } + return r.Body, nil + } + } else { + // in case the body is an empty stream, we need to use http.NoBody to explicitly provide no content + r.Body = http.NoBody + r.GetBody = func() (io.ReadCloser, error) { + return http.NoBody, nil + } + + // close the user-provided empty body + if c, ok := body.(io.Closer); ok { + c.Close() + } + } + + return nil +} + +// Copy makes a copy of an http.Request. Specifically, it makes a deep copy +// of its Method, URL, Host, Proto(Major/Minor), Header. ContentLength, Close, +// RemoteAddr, RequestURI. Copy makes a shallow copy of the Body, GetBody, TLS, +// Cancel, Response, and ctx fields. Copy panics if any of these fields are +// not nil: TransferEncoding, Form, PostForm, MultipartForm, or Trailer. +func (r Request) Copy() Request { + if r.TransferEncoding != nil || r.Form != nil || r.PostForm != nil || r.MultipartForm != nil || r.Trailer != nil { + panic("Can't make a deep copy of the http.Request because at least one of the following is not nil:" + + "TransferEncoding, Form, PostForm, MultipartForm, or Trailer.") + } + copy := *r.Request // Copy the request + urlCopy := *(r.Request.URL) // Copy the URL + copy.URL = &urlCopy + copy.Header = http.Header{} // Copy the header + for k, vs := range r.Header { + for _, value := range vs { + copy.Header.Add(k, value) + } + } + return Request{Request: ©} // Return the copy +} + +func (r Request) close() error { + if r.Body != nil && r.Body != http.NoBody { + c, ok := r.Body.(*retryableRequestBody) + if !ok { + panic("unexpected request body type (should be *retryableReadSeekerCloser)") + } + return c.realClose() + } + return nil +} + +// RewindBody seeks the request's Body stream back to the beginning so it can be resent when retrying an operation. +func (r Request) RewindBody() error { + if r.Body != nil && r.Body != http.NoBody { + s, ok := r.Body.(io.Seeker) + if !ok { + panic("unexpected request body type (should be io.Seeker)") + } + + // Reset the stream back to the beginning + _, err := s.Seek(0, io.SeekStart) + return err + } + return nil +} + +// ********** The following type/methods implement the retryableRequestBody (a ReadSeekCloser) + +// This struct is used when sending a body to the network +type retryableRequestBody struct { + body io.ReadSeeker // Seeking is required to support retries +} + +// Read reads a block of data from an inner stream and reports progress +func (b *retryableRequestBody) Read(p []byte) (n int, err error) { + return b.body.Read(p) +} + +func (b *retryableRequestBody) Seek(offset int64, whence int) (offsetFromStart int64, err error) { + return b.body.Seek(offset, whence) +} + +func (b *retryableRequestBody) Close() error { + // We don't want the underlying transport to close the request body on transient failures so this is a nop. + // The pipeline closes the request body upon success. + return nil +} + +func (b *retryableRequestBody) realClose() error { + if c, ok := b.body.(io.Closer); ok { + return c.Close() + } + return nil +} diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/response.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/response.go new file mode 100755 index 000000000..f2dc16482 --- /dev/null +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/response.go @@ -0,0 +1,74 @@ +package pipeline + +import ( + "bytes" + "fmt" + "net/http" + "sort" + "strings" +) + +// The Response interface exposes an http.Response object as it returns through the pipeline of Policy objects. +// This ensures that Policy objects have access to the HTTP response. However, the object this interface encapsulates +// might be a struct with additional fields that is created by a Policy object (typically a method-specific Factory). +// The method that injected the method-specific Factory gets this returned Response and performs a type assertion +// to the expected struct and returns the struct to its caller. +type Response interface { + Response() *http.Response +} + +// This is the default struct that has the http.Response. +// A method can replace this struct with its own struct containing an http.Response +// field and any other additional fields. +type httpResponse struct { + response *http.Response +} + +// NewHTTPResponse is typically called by a Policy object to return a Response object. +func NewHTTPResponse(response *http.Response) Response { + return &httpResponse{response: response} +} + +// This method satisfies the public Response interface's Response method +func (r httpResponse) Response() *http.Response { + return r.response +} + +// WriteRequestWithResponse appends a formatted HTTP request into a Buffer. If request and/or err are +// not nil, then these are also written into the Buffer. +func WriteRequestWithResponse(b *bytes.Buffer, request *http.Request, response *http.Response, err error) { + // Write the request into the buffer. + fmt.Fprint(b, " "+request.Method+" "+request.URL.String()+"\n") + writeHeader(b, request.Header) + if response != nil { + fmt.Fprintln(b, " --------------------------------------------------------------------------------") + fmt.Fprint(b, " RESPONSE Status: "+response.Status+"\n") + writeHeader(b, response.Header) + } + if err != nil { + fmt.Fprintln(b, " --------------------------------------------------------------------------------") + fmt.Fprint(b, " ERROR:\n"+err.Error()+"\n") + } +} + +// formatHeaders appends an HTTP request's or response's header into a Buffer. +func writeHeader(b *bytes.Buffer, header map[string][]string) { + if len(header) == 0 { + b.WriteString(" (no headers)\n") + return + } + keys := make([]string, 0, len(header)) + // Alphabetize the headers + for k := range header { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { + // Redact the value of any Authorization header to prevent security information from persisting in logs + value := interface{}("REDACTED") + if !strings.EqualFold(k, "Authorization") { + value = header[k] + } + fmt.Fprintf(b, " %s: %+v\n", k, value) + } +} diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/version.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/version.go new file mode 100644 index 000000000..899f996b5 --- /dev/null +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/version.go @@ -0,0 +1,9 @@ +package pipeline + +const ( + // UserAgent is the string to be used in the user agent string when making requests. + UserAgent = "azure-pipeline-go/" + Version + + // Version is the semantic version (see http://semver.org) of the pipeline package. + Version = "0.2.1" +) diff --git a/vendor/github.com/Azure/azure-storage-blob-go/LICENSE b/vendor/github.com/Azure/azure-storage-blob-go/LICENSE new file mode 100644 index 000000000..d1ca00f20 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE \ No newline at end of file diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/access_conditions.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/access_conditions.go new file mode 100644 index 000000000..25fe68422 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/access_conditions.go @@ -0,0 +1,65 @@ +package azblob + +import ( + "time" +) + +// ModifiedAccessConditions identifies standard HTTP access conditions which you optionally set. +type ModifiedAccessConditions struct { + IfModifiedSince time.Time + IfUnmodifiedSince time.Time + IfMatch ETag + IfNoneMatch ETag +} + +// pointers is for internal infrastructure. It returns the fields as pointers. +func (ac ModifiedAccessConditions) pointers() (ims *time.Time, ius *time.Time, ime *ETag, inme *ETag) { + if !ac.IfModifiedSince.IsZero() { + ims = &ac.IfModifiedSince + } + if !ac.IfUnmodifiedSince.IsZero() { + ius = &ac.IfUnmodifiedSince + } + if ac.IfMatch != ETagNone { + ime = &ac.IfMatch + } + if ac.IfNoneMatch != ETagNone { + inme = &ac.IfNoneMatch + } + return +} + +// ContainerAccessConditions identifies container-specific access conditions which you optionally set. +type ContainerAccessConditions struct { + ModifiedAccessConditions + LeaseAccessConditions +} + +// BlobAccessConditions identifies blob-specific access conditions which you optionally set. +type BlobAccessConditions struct { + ModifiedAccessConditions + LeaseAccessConditions +} + +// LeaseAccessConditions identifies lease access conditions for a container or blob which you optionally set. +type LeaseAccessConditions struct { + LeaseID string +} + +// pointers is for internal infrastructure. It returns the fields as pointers. +func (ac LeaseAccessConditions) pointers() (leaseID *string) { + if ac.LeaseID != "" { + leaseID = &ac.LeaseID + } + return +} + +/* +// getInt32 is for internal infrastructure. It is used with access condition values where +// 0 (the default setting) is meaningful. The library interprets 0 as do not send the header +// and the privately-storage field in the access condition object is stored as +1 higher than desired. +// THis method returns true, if the value is > 0 (explicitly set) and the stored value - 1 (the set desired value). +func getInt32(value int32) (bool, int32) { + return value > 0, value - 1 +} +*/ diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/atomicmorph.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/atomicmorph.go new file mode 100644 index 000000000..9e18a7943 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/atomicmorph.go @@ -0,0 +1,69 @@ +package azblob + +import "sync/atomic" + +// AtomicMorpherInt32 identifies a method passed to and invoked by the AtomicMorphInt32 function. +// The AtomicMorpher callback is passed a startValue and based on this value it returns +// what the new value should be and the result that AtomicMorph should return to its caller. +type atomicMorpherInt32 func(startVal int32) (val int32, morphResult interface{}) + +const targetAndMorpherMustNotBeNil = "target and morpher must not be nil" + +// AtomicMorph atomically morphs target in to new value (and result) as indicated bythe AtomicMorpher callback function. +func atomicMorphInt32(target *int32, morpher atomicMorpherInt32) interface{} { + for { + currentVal := atomic.LoadInt32(target) + desiredVal, morphResult := morpher(currentVal) + if atomic.CompareAndSwapInt32(target, currentVal, desiredVal) { + return morphResult + } + } +} + +// AtomicMorpherUint32 identifies a method passed to and invoked by the AtomicMorph function. +// The AtomicMorpher callback is passed a startValue and based on this value it returns +// what the new value should be and the result that AtomicMorph should return to its caller. +type atomicMorpherUint32 func(startVal uint32) (val uint32, morphResult interface{}) + +// AtomicMorph atomically morphs target in to new value (and result) as indicated bythe AtomicMorpher callback function. +func atomicMorphUint32(target *uint32, morpher atomicMorpherUint32) interface{} { + for { + currentVal := atomic.LoadUint32(target) + desiredVal, morphResult := morpher(currentVal) + if atomic.CompareAndSwapUint32(target, currentVal, desiredVal) { + return morphResult + } + } +} + +// AtomicMorpherUint64 identifies a method passed to and invoked by the AtomicMorphUint64 function. +// The AtomicMorpher callback is passed a startValue and based on this value it returns +// what the new value should be and the result that AtomicMorph should return to its caller. +type atomicMorpherInt64 func(startVal int64) (val int64, morphResult interface{}) + +// AtomicMorph atomically morphs target in to new value (and result) as indicated bythe AtomicMorpher callback function. +func atomicMorphInt64(target *int64, morpher atomicMorpherInt64) interface{} { + for { + currentVal := atomic.LoadInt64(target) + desiredVal, morphResult := morpher(currentVal) + if atomic.CompareAndSwapInt64(target, currentVal, desiredVal) { + return morphResult + } + } +} + +// AtomicMorpherUint64 identifies a method passed to and invoked by the AtomicMorphUint64 function. +// The AtomicMorpher callback is passed a startValue and based on this value it returns +// what the new value should be and the result that AtomicMorph should return to its caller. +type atomicMorpherUint64 func(startVal uint64) (val uint64, morphResult interface{}) + +// AtomicMorph atomically morphs target in to new value (and result) as indicated bythe AtomicMorpher callback function. +func atomicMorphUint64(target *uint64, morpher atomicMorpherUint64) interface{} { + for { + currentVal := atomic.LoadUint64(target) + desiredVal, morphResult := morpher(currentVal) + if atomic.CompareAndSwapUint64(target, currentVal, desiredVal) { + return morphResult + } + } +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/highlevel.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/highlevel.go new file mode 100644 index 000000000..af0944348 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/highlevel.go @@ -0,0 +1,543 @@ +package azblob + +import ( + "context" + "encoding/base64" + "io" + "net/http" + + "bytes" + "os" + "sync" + "time" + + "errors" + + "github.com/Azure/azure-pipeline-go/pipeline" +) + +// CommonResponse returns the headers common to all blob REST API responses. +type CommonResponse interface { + // ETag returns the value for header ETag. + ETag() ETag + + // LastModified returns the value for header Last-Modified. + LastModified() time.Time + + // RequestID returns the value for header x-ms-request-id. + RequestID() string + + // Date returns the value for header Date. + Date() time.Time + + // Version returns the value for header x-ms-version. + Version() string + + // Response returns the raw HTTP response object. + Response() *http.Response +} + +// UploadToBlockBlobOptions identifies options used by the UploadBufferToBlockBlob and UploadFileToBlockBlob functions. +type UploadToBlockBlobOptions struct { + // BlockSize specifies the block size to use; the default (and maximum size) is BlockBlobMaxStageBlockBytes. + BlockSize int64 + + // Progress is a function that is invoked periodically as bytes are sent to the BlockBlobURL. + // Note that the progress reporting is not always increasing; it can go down when retrying a request. + Progress pipeline.ProgressReceiver + + // BlobHTTPHeaders indicates the HTTP headers to be associated with the blob. + BlobHTTPHeaders BlobHTTPHeaders + + // Metadata indicates the metadata to be associated with the blob when PutBlockList is called. + Metadata Metadata + + // AccessConditions indicates the access conditions for the block blob. + AccessConditions BlobAccessConditions + + // Parallelism indicates the maximum number of blocks to upload in parallel (0=default) + Parallelism uint16 +} + +// UploadBufferToBlockBlob uploads a buffer in blocks to a block blob. +func UploadBufferToBlockBlob(ctx context.Context, b []byte, + blockBlobURL BlockBlobURL, o UploadToBlockBlobOptions) (CommonResponse, error) { + bufferSize := int64(len(b)) + if o.BlockSize == 0 { + // If bufferSize > (BlockBlobMaxStageBlockBytes * BlockBlobMaxBlocks), then error + if bufferSize > BlockBlobMaxStageBlockBytes*BlockBlobMaxBlocks { + return nil, errors.New("buffer is too large to upload to a block blob") + } + // If bufferSize <= BlockBlobMaxUploadBlobBytes, then Upload should be used with just 1 I/O request + if bufferSize <= BlockBlobMaxUploadBlobBytes { + o.BlockSize = BlockBlobMaxUploadBlobBytes // Default if unspecified + } else { + o.BlockSize = bufferSize / BlockBlobMaxBlocks // buffer / max blocks = block size to use all 50,000 blocks + if o.BlockSize < BlobDefaultDownloadBlockSize { // If the block size is smaller than 4MB, round up to 4MB + o.BlockSize = BlobDefaultDownloadBlockSize + } + // StageBlock will be called with blockSize blocks and a Parallelism of (BufferSize / BlockSize). + } + } + + if bufferSize <= BlockBlobMaxUploadBlobBytes { + // If the size can fit in 1 Upload call, do it this way + var body io.ReadSeeker = bytes.NewReader(b) + if o.Progress != nil { + body = pipeline.NewRequestBodyProgress(body, o.Progress) + } + return blockBlobURL.Upload(ctx, body, o.BlobHTTPHeaders, o.Metadata, o.AccessConditions) + } + + var numBlocks = uint16(((bufferSize - 1) / o.BlockSize) + 1) + + blockIDList := make([]string, numBlocks) // Base-64 encoded block IDs + progress := int64(0) + progressLock := &sync.Mutex{} + + err := DoBatchTransfer(ctx, BatchTransferOptions{ + OperationName: "UploadBufferToBlockBlob", + TransferSize: bufferSize, + ChunkSize: o.BlockSize, + Parallelism: o.Parallelism, + Operation: func(offset int64, count int64, ctx context.Context) error { + // This function is called once per block. + // It is passed this block's offset within the buffer and its count of bytes + // Prepare to read the proper block/section of the buffer + var body io.ReadSeeker = bytes.NewReader(b[offset : offset+count]) + blockNum := offset / o.BlockSize + if o.Progress != nil { + blockProgress := int64(0) + body = pipeline.NewRequestBodyProgress(body, + func(bytesTransferred int64) { + diff := bytesTransferred - blockProgress + blockProgress = bytesTransferred + progressLock.Lock() // 1 goroutine at a time gets a progress report + progress += diff + o.Progress(progress) + progressLock.Unlock() + }) + } + + // Block IDs are unique values to avoid issue if 2+ clients are uploading blocks + // at the same time causing PutBlockList to get a mix of blocks from all the clients. + blockIDList[blockNum] = base64.StdEncoding.EncodeToString(newUUID().bytes()) + _, err := blockBlobURL.StageBlock(ctx, blockIDList[blockNum], body, o.AccessConditions.LeaseAccessConditions, nil) + return err + }, + }) + if err != nil { + return nil, err + } + // All put blocks were successful, call Put Block List to finalize the blob + return blockBlobURL.CommitBlockList(ctx, blockIDList, o.BlobHTTPHeaders, o.Metadata, o.AccessConditions) +} + +// UploadFileToBlockBlob uploads a file in blocks to a block blob. +func UploadFileToBlockBlob(ctx context.Context, file *os.File, + blockBlobURL BlockBlobURL, o UploadToBlockBlobOptions) (CommonResponse, error) { + + stat, err := file.Stat() + if err != nil { + return nil, err + } + m := mmf{} // Default to an empty slice; used for 0-size file + if stat.Size() != 0 { + m, err = newMMF(file, false, 0, int(stat.Size())) + if err != nil { + return nil, err + } + defer m.unmap() + } + return UploadBufferToBlockBlob(ctx, m, blockBlobURL, o) +} + +/////////////////////////////////////////////////////////////////////////////// + +const BlobDefaultDownloadBlockSize = int64(4 * 1024 * 1024) // 4MB + +// DownloadFromBlobOptions identifies options used by the DownloadBlobToBuffer and DownloadBlobToFile functions. +type DownloadFromBlobOptions struct { + // BlockSize specifies the block size to use for each parallel download; the default size is BlobDefaultDownloadBlockSize. + BlockSize int64 + + // Progress is a function that is invoked periodically as bytes are received. + Progress pipeline.ProgressReceiver + + // AccessConditions indicates the access conditions used when making HTTP GET requests against the blob. + AccessConditions BlobAccessConditions + + // Parallelism indicates the maximum number of blocks to download in parallel (0=default) + Parallelism uint16 + + // RetryReaderOptionsPerBlock is used when downloading each block. + RetryReaderOptionsPerBlock RetryReaderOptions +} + +// downloadBlobToBuffer downloads an Azure blob to a buffer with parallel. +func downloadBlobToBuffer(ctx context.Context, blobURL BlobURL, offset int64, count int64, + b []byte, o DownloadFromBlobOptions, initialDownloadResponse *DownloadResponse) error { + if o.BlockSize == 0 { + o.BlockSize = BlobDefaultDownloadBlockSize + } + + if count == CountToEnd { // If size not specified, calculate it + if initialDownloadResponse != nil { + count = initialDownloadResponse.ContentLength() - offset // if we have the length, use it + } else { + // If we don't have the length at all, get it + dr, err := blobURL.Download(ctx, 0, CountToEnd, o.AccessConditions, false) + if err != nil { + return err + } + count = dr.ContentLength() - offset + } + } + + // Prepare and do parallel download. + progress := int64(0) + progressLock := &sync.Mutex{} + + err := DoBatchTransfer(ctx, BatchTransferOptions{ + OperationName: "downloadBlobToBuffer", + TransferSize: count, + ChunkSize: o.BlockSize, + Parallelism: o.Parallelism, + Operation: func(chunkStart int64, count int64, ctx context.Context) error { + dr, err := blobURL.Download(ctx, chunkStart+offset, count, o.AccessConditions, false) + if err != nil { + return err + } + body := dr.Body(o.RetryReaderOptionsPerBlock) + if o.Progress != nil { + rangeProgress := int64(0) + body = pipeline.NewResponseBodyProgress( + body, + func(bytesTransferred int64) { + diff := bytesTransferred - rangeProgress + rangeProgress = bytesTransferred + progressLock.Lock() + progress += diff + o.Progress(progress) + progressLock.Unlock() + }) + } + _, err = io.ReadFull(body, b[chunkStart:chunkStart+count]) + body.Close() + return err + }, + }) + if err != nil { + return err + } + return nil +} + +// DownloadBlobToBuffer downloads an Azure blob to a buffer with parallel. +// Offset and count are optional, pass 0 for both to download the entire blob. +func DownloadBlobToBuffer(ctx context.Context, blobURL BlobURL, offset int64, count int64, + b []byte, o DownloadFromBlobOptions) error { + return downloadBlobToBuffer(ctx, blobURL, offset, count, b, o, nil) +} + +// DownloadBlobToFile downloads an Azure blob to a local file. +// The file would be truncated if the size doesn't match. +// Offset and count are optional, pass 0 for both to download the entire blob. +func DownloadBlobToFile(ctx context.Context, blobURL BlobURL, offset int64, count int64, + file *os.File, o DownloadFromBlobOptions) error { + // 1. Calculate the size of the destination file + var size int64 + + if count == CountToEnd { + // Try to get Azure blob's size + props, err := blobURL.GetProperties(ctx, o.AccessConditions) + if err != nil { + return err + } + size = props.ContentLength() - offset + } else { + size = count + } + + // 2. Compare and try to resize local file's size if it doesn't match Azure blob's size. + stat, err := file.Stat() + if err != nil { + return err + } + if stat.Size() != size { + if err = file.Truncate(size); err != nil { + return err + } + } + + if size > 0 { + // 3. Set mmap and call downloadBlobToBuffer. + m, err := newMMF(file, true, 0, int(size)) + if err != nil { + return err + } + defer m.unmap() + return downloadBlobToBuffer(ctx, blobURL, offset, size, m, o, nil) + } else { // if the blob's size is 0, there is no need in downloading it + return nil + } +} + +/////////////////////////////////////////////////////////////////////////////// + +// BatchTransferOptions identifies options used by DoBatchTransfer. +type BatchTransferOptions struct { + TransferSize int64 + ChunkSize int64 + Parallelism uint16 + Operation func(offset int64, chunkSize int64, ctx context.Context) error + OperationName string +} + +// DoBatchTransfer helps to execute operations in a batch manner. +// Can be used by users to customize batch works (for other scenarios that the SDK does not provide) +func DoBatchTransfer(ctx context.Context, o BatchTransferOptions) error { + if o.ChunkSize == 0 { + return errors.New("ChunkSize cannot be 0") + } + + // Prepare and do parallel operations. + numChunks := uint16(((o.TransferSize - 1) / o.ChunkSize) + 1) + operationChannel := make(chan func() error, o.Parallelism) // Create the channel that release 'Parallelism' goroutines concurrently + operationResponseChannel := make(chan error, numChunks) // Holds each response + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + // Create the goroutines that process each operation (in parallel). + if o.Parallelism == 0 { + o.Parallelism = 5 // default Parallelism + } + for g := uint16(0); g < o.Parallelism; g++ { + //grIndex := g + go func() { + for f := range operationChannel { + err := f() + operationResponseChannel <- err + } + }() + } + + // Add each chunk's operation to the channel. + for chunkNum := uint16(0); chunkNum < numChunks; chunkNum++ { + curChunkSize := o.ChunkSize + + if chunkNum == numChunks-1 { // Last chunk + curChunkSize = o.TransferSize - (int64(chunkNum) * o.ChunkSize) // Remove size of all transferred chunks from total + } + offset := int64(chunkNum) * o.ChunkSize + + operationChannel <- func() error { + return o.Operation(offset, curChunkSize, ctx) + } + } + close(operationChannel) + + // Wait for the operations to complete. + var firstErr error = nil + for chunkNum := uint16(0); chunkNum < numChunks; chunkNum++ { + responseError := <-operationResponseChannel + // record the first error (the original error which should cause the other chunks to fail with canceled context) + if responseError != nil && firstErr == nil { + cancel() // As soon as any operation fails, cancel all remaining operation calls + firstErr = responseError + } + } + return firstErr +} + +//////////////////////////////////////////////////////////////////////////////////////////////// + +type UploadStreamToBlockBlobOptions struct { + BufferSize int + MaxBuffers int + BlobHTTPHeaders BlobHTTPHeaders + Metadata Metadata + AccessConditions BlobAccessConditions +} + +func UploadStreamToBlockBlob(ctx context.Context, reader io.Reader, blockBlobURL BlockBlobURL, + o UploadStreamToBlockBlobOptions) (CommonResponse, error) { + result, err := uploadStream(ctx, reader, + UploadStreamOptions{BufferSize: o.BufferSize, MaxBuffers: o.MaxBuffers}, + &uploadStreamToBlockBlobOptions{b: blockBlobURL, o: o, blockIDPrefix: newUUID()}) + if err != nil { + return nil, err + } + return result.(CommonResponse), nil +} + +type uploadStreamToBlockBlobOptions struct { + b BlockBlobURL + o UploadStreamToBlockBlobOptions + blockIDPrefix uuid // UUID used with all blockIDs + maxBlockNum uint32 // defaults to 0 + firstBlock []byte // Used only if maxBlockNum is 0 +} + +func (t *uploadStreamToBlockBlobOptions) start(ctx context.Context) (interface{}, error) { + return nil, nil +} + +func (t *uploadStreamToBlockBlobOptions) chunk(ctx context.Context, num uint32, buffer []byte) error { + if num == 0 { + t.firstBlock = buffer + + // If whole payload fits in 1 block, don't stage it; End will upload it with 1 I/O operation + // If the payload is exactly the same size as the buffer, there may be more content coming in. + if len(buffer) < t.o.BufferSize { + return nil + } + } + // Else, upload a staged block... + atomicMorphUint32(&t.maxBlockNum, func(startVal uint32) (val uint32, morphResult interface{}) { + // Atomically remember (in t.numBlocks) the maximum block num we've ever seen + if startVal < num { + return num, nil + } + return startVal, nil + }) + blockID := newUuidBlockID(t.blockIDPrefix).WithBlockNumber(num).ToBase64() + _, err := t.b.StageBlock(ctx, blockID, bytes.NewReader(buffer), LeaseAccessConditions{}, nil) + return err +} + +func (t *uploadStreamToBlockBlobOptions) end(ctx context.Context) (interface{}, error) { + // If the first block had the exact same size as the buffer + // we would have staged it as a block thinking that there might be more data coming + if t.maxBlockNum == 0 && len(t.firstBlock) != t.o.BufferSize { + // If whole payload fits in 1 block (block #0), upload it with 1 I/O operation + return t.b.Upload(ctx, bytes.NewReader(t.firstBlock), + t.o.BlobHTTPHeaders, t.o.Metadata, t.o.AccessConditions) + } + // Multiple blocks staged, commit them all now + blockID := newUuidBlockID(t.blockIDPrefix) + blockIDs := make([]string, t.maxBlockNum+1) + for bn := uint32(0); bn <= t.maxBlockNum; bn++ { + blockIDs[bn] = blockID.WithBlockNumber(bn).ToBase64() + } + return t.b.CommitBlockList(ctx, blockIDs, t.o.BlobHTTPHeaders, t.o.Metadata, t.o.AccessConditions) +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +type iTransfer interface { + start(ctx context.Context) (interface{}, error) + chunk(ctx context.Context, num uint32, buffer []byte) error + end(ctx context.Context) (interface{}, error) +} + +type UploadStreamOptions struct { + MaxBuffers int + BufferSize int +} + +type firstErr struct { + lock sync.Mutex + finalError error +} + +func (fe *firstErr) set(err error) { + fe.lock.Lock() + if fe.finalError == nil { + fe.finalError = err + } + fe.lock.Unlock() +} + +func (fe *firstErr) get() (err error) { + fe.lock.Lock() + err = fe.finalError + fe.lock.Unlock() + return +} + +func uploadStream(ctx context.Context, reader io.Reader, o UploadStreamOptions, t iTransfer) (interface{}, error) { + firstErr := firstErr{} + ctx, cancel := context.WithCancel(ctx) // New context so that any failure cancels everything + defer cancel() + wg := sync.WaitGroup{} // Used to know when all outgoing messages have finished processing + type OutgoingMsg struct { + chunkNum uint32 + buffer []byte + } + + // Create a channel to hold the buffers usable for incoming datsa + incoming := make(chan []byte, o.MaxBuffers) + outgoing := make(chan OutgoingMsg, o.MaxBuffers) // Channel holding outgoing buffers + if result, err := t.start(ctx); err != nil { + return result, err + } + + numBuffers := 0 // The number of buffers & out going goroutines created so far + injectBuffer := func() { + // For each Buffer, create it and a goroutine to upload it + incoming <- make([]byte, o.BufferSize) // Add the new buffer to the incoming channel so this goroutine can from the reader into it + numBuffers++ + go func() { + for outgoingMsg := range outgoing { + // Upload the outgoing buffer + err := t.chunk(ctx, outgoingMsg.chunkNum, outgoingMsg.buffer) + wg.Done() // Indicate this buffer was sent + if nil != err { + // NOTE: finalErr could be assigned to multiple times here which is OK, + // some error will be returned. + firstErr.set(err) + cancel() + } + incoming <- outgoingMsg.buffer // The goroutine reading from the stream can reuse this buffer now + } + }() + } + injectBuffer() // Create our 1st buffer & outgoing goroutine + + // This goroutine grabs a buffer, reads from the stream into the buffer, + // and inserts the buffer into the outgoing channel to be uploaded + for c := uint32(0); true; c++ { // Iterate once per chunk + var buffer []byte + if numBuffers < o.MaxBuffers { + select { + // We're not at max buffers, see if a previously-created buffer is available + case buffer = <-incoming: + break + default: + // No buffer available; inject a new buffer & go routine to process it + injectBuffer() + buffer = <-incoming // Grab the just-injected buffer + } + } else { + // We are at max buffers, block until we get to reuse one + buffer = <-incoming + } + n, err := io.ReadFull(reader, buffer) + if err != nil { // Less than len(buffer) bytes were read + buffer = buffer[:n] // Make slice match the # of read bytes + } + if len(buffer) > 0 { + // Buffer not empty, upload it + wg.Add(1) // We're posting a buffer to be sent + outgoing <- OutgoingMsg{chunkNum: c, buffer: buffer} + } + if err != nil { // The reader is done, no more outgoing buffers + if err == io.EOF || err == io.ErrUnexpectedEOF { + err = nil // This function does NOT return an error if io.ReadFull returns io.EOF or io.ErrUnexpectedEOF + } else { + firstErr.set(err) + } + break + } + } + // NOTE: Don't close the incoming channel because the outgoing goroutines post buffers into it when they are done + close(outgoing) // Make all the outgoing goroutines terminate when this channel is empty + wg.Wait() // Wait for all pending outgoing messages to complete + err := firstErr.get() + if err == nil { + // If no error, after all blocks uploaded, commit them to the blob & return the result + return t.end(ctx) + } + return nil, err +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/parsing_urls.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/parsing_urls.go new file mode 100644 index 000000000..067939b1a --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/parsing_urls.go @@ -0,0 +1,153 @@ +package azblob + +import ( + "net" + "net/url" + "strings" +) + +const ( + snapshot = "snapshot" + SnapshotTimeFormat = "2006-01-02T15:04:05.0000000Z07:00" +) + +// A BlobURLParts object represents the components that make up an Azure Storage Container/Blob URL. You parse an +// existing URL into its parts by calling NewBlobURLParts(). You construct a URL from parts by calling URL(). +// NOTE: Changing any SAS-related field requires computing a new SAS signature. +type BlobURLParts struct { + Scheme string // Ex: "https://" + Host string // Ex: "account.blob.core.windows.net", "10.132.141.33", "10.132.141.33:80" + IPEndpointStyleInfo IPEndpointStyleInfo + ContainerName string // "" if no container + BlobName string // "" if no blob + Snapshot string // "" if not a snapshot + SAS SASQueryParameters + UnparsedParams string +} + +// IPEndpointStyleInfo is used for IP endpoint style URL when working with Azure storage emulator. +// Ex: "https://10.132.141.33/accountname/containername" +type IPEndpointStyleInfo struct { + AccountName string // "" if not using IP endpoint style +} + +// isIPEndpointStyle checkes if URL's host is IP, in this case the storage account endpoint will be composed as: +// http(s)://IP(:port)/storageaccount/container/... +// As url's Host property, host could be both host or host:port +func isIPEndpointStyle(host string) bool { + if host == "" { + return false + } + if h, _, err := net.SplitHostPort(host); err == nil { + host = h + } + // For IPv6, there could be case where SplitHostPort fails for cannot finding port. + // In this case, eliminate the '[' and ']' in the URL. + // For details about IPv6 URL, please refer to https://tools.ietf.org/html/rfc2732 + if host[0] == '[' && host[len(host)-1] == ']' { + host = host[1 : len(host)-1] + } + return net.ParseIP(host) != nil +} + +// NewBlobURLParts parses a URL initializing BlobURLParts' fields including any SAS-related & snapshot query parameters. Any other +// query parameters remain in the UnparsedParams field. This method overwrites all fields in the BlobURLParts object. +func NewBlobURLParts(u url.URL) BlobURLParts { + up := BlobURLParts{ + Scheme: u.Scheme, + Host: u.Host, + } + + // Find the container & blob names (if any) + if u.Path != "" { + path := u.Path + if path[0] == '/' { + path = path[1:] // If path starts with a slash, remove it + } + if isIPEndpointStyle(up.Host) { + if accountEndIndex := strings.Index(path, "/"); accountEndIndex == -1 { // Slash not found; path has account name & no container name or blob + up.IPEndpointStyleInfo.AccountName = path + } else { + up.IPEndpointStyleInfo.AccountName = path[:accountEndIndex] // The account name is the part between the slashes + path = path[accountEndIndex+1:] // path refers to portion after the account name now (container & blob names) + } + } + + containerEndIndex := strings.Index(path, "/") // Find the next slash (if it exists) + if containerEndIndex == -1 { // Slash not found; path has container name & no blob name + up.ContainerName = path + } else { + up.ContainerName = path[:containerEndIndex] // The container name is the part between the slashes + up.BlobName = path[containerEndIndex+1:] // The blob name is after the container slash + } + } + + // Convert the query parameters to a case-sensitive map & trim whitespace + paramsMap := u.Query() + + up.Snapshot = "" // Assume no snapshot + if snapshotStr, ok := caseInsensitiveValues(paramsMap).Get(snapshot); ok { + up.Snapshot = snapshotStr[0] + // If we recognized the query parameter, remove it from the map + delete(paramsMap, snapshot) + } + up.SAS = newSASQueryParameters(paramsMap, true) + up.UnparsedParams = paramsMap.Encode() + return up +} + +type caseInsensitiveValues url.Values // map[string][]string +func (values caseInsensitiveValues) Get(key string) ([]string, bool) { + key = strings.ToLower(key) + for k, v := range values { + if strings.ToLower(k) == key { + return v, true + } + } + return []string{}, false +} + +// URL returns a URL object whose fields are initialized from the BlobURLParts fields. The URL's RawQuery +// field contains the SAS, snapshot, and unparsed query parameters. +func (up BlobURLParts) URL() url.URL { + path := "" + if isIPEndpointStyle(up.Host) && up.IPEndpointStyleInfo.AccountName != "" { + path += "/" + up.IPEndpointStyleInfo.AccountName + } + // Concatenate container & blob names (if they exist) + if up.ContainerName != "" { + path += "/" + up.ContainerName + if up.BlobName != "" { + path += "/" + up.BlobName + } + } + + rawQuery := up.UnparsedParams + + //If no snapshot is initially provided, fill it in from the SAS query properties to help the user + if up.Snapshot == "" && !up.SAS.snapshotTime.IsZero() { + up.Snapshot = up.SAS.snapshotTime.Format(SnapshotTimeFormat) + } + + // Concatenate blob snapshot query parameter (if it exists) + if up.Snapshot != "" { + if len(rawQuery) > 0 { + rawQuery += "&" + } + rawQuery += snapshot + "=" + up.Snapshot + } + sas := up.SAS.Encode() + if sas != "" { + if len(rawQuery) > 0 { + rawQuery += "&" + } + rawQuery += sas + } + u := url.URL{ + Scheme: up.Scheme, + Host: up.Host, + Path: path, + RawQuery: rawQuery, + } + return u +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/sas_service.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/sas_service.go new file mode 100644 index 000000000..4d45d3ec7 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/sas_service.go @@ -0,0 +1,256 @@ +package azblob + +import ( + "bytes" + "fmt" + "strings" + "time" +) + +// BlobSASSignatureValues is used to generate a Shared Access Signature (SAS) for an Azure Storage container or blob. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/constructing-a-service-sas +type BlobSASSignatureValues struct { + Version string `param:"sv"` // If not specified, this defaults to SASVersion + Protocol SASProtocol `param:"spr"` // See the SASProtocol* constants + StartTime time.Time `param:"st"` // Not specified if IsZero + ExpiryTime time.Time `param:"se"` // Not specified if IsZero + SnapshotTime time.Time + Permissions string `param:"sp"` // Create by initializing a ContainerSASPermissions or BlobSASPermissions and then call String() + IPRange IPRange `param:"sip"` + Identifier string `param:"si"` + ContainerName string + BlobName string // Use "" to create a Container SAS + CacheControl string // rscc + ContentDisposition string // rscd + ContentEncoding string // rsce + ContentLanguage string // rscl + ContentType string // rsct +} + +// NewSASQueryParameters uses an account's StorageAccountCredential to sign this signature values to produce +// the proper SAS query parameters. +// See: StorageAccountCredential. Compatible with both UserDelegationCredential and SharedKeyCredential +func (v BlobSASSignatureValues) NewSASQueryParameters(credential StorageAccountCredential) (SASQueryParameters, error) { + resource := "c" + if credential == nil { + return SASQueryParameters{}, fmt.Errorf("cannot sign SAS query without StorageAccountCredential") + } + + if !v.SnapshotTime.IsZero() { + resource = "bs" + //Make sure the permission characters are in the correct order + perms := &BlobSASPermissions{} + if err := perms.Parse(v.Permissions); err != nil { + return SASQueryParameters{}, err + } + v.Permissions = perms.String() + } else if v.BlobName == "" { + // Make sure the permission characters are in the correct order + perms := &ContainerSASPermissions{} + if err := perms.Parse(v.Permissions); err != nil { + return SASQueryParameters{}, err + } + v.Permissions = perms.String() + } else { + resource = "b" + // Make sure the permission characters are in the correct order + perms := &BlobSASPermissions{} + if err := perms.Parse(v.Permissions); err != nil { + return SASQueryParameters{}, err + } + v.Permissions = perms.String() + } + if v.Version == "" { + v.Version = SASVersion + } + startTime, expiryTime, snapshotTime := FormatTimesForSASSigning(v.StartTime, v.ExpiryTime, v.SnapshotTime) + + signedIdentifier := v.Identifier + + udk := credential.getUDKParams() + + if udk != nil { + udkStart, udkExpiry, _ := FormatTimesForSASSigning(udk.SignedStart, udk.SignedExpiry, time.Time{}) + //I don't like this answer to combining the functions + //But because signedIdentifier and the user delegation key strings share a place, this is an _OK_ way to do it. + signedIdentifier = strings.Join([]string{ + udk.SignedOid, + udk.SignedTid, + udkStart, + udkExpiry, + udk.SignedService, + udk.SignedVersion, + }, "\n") + } + + // String to sign: http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx + stringToSign := strings.Join([]string{ + v.Permissions, + startTime, + expiryTime, + getCanonicalName(credential.AccountName(), v.ContainerName, v.BlobName), + signedIdentifier, + v.IPRange.String(), + string(v.Protocol), + v.Version, + resource, + snapshotTime, // signed timestamp + v.CacheControl, // rscc + v.ContentDisposition, // rscd + v.ContentEncoding, // rsce + v.ContentLanguage, // rscl + v.ContentType}, // rsct + "\n") + + signature := "" + signature = credential.ComputeHMACSHA256(stringToSign) + + p := SASQueryParameters{ + // Common SAS parameters + version: v.Version, + protocol: v.Protocol, + startTime: v.StartTime, + expiryTime: v.ExpiryTime, + permissions: v.Permissions, + ipRange: v.IPRange, + + // Container/Blob-specific SAS parameters + resource: resource, + identifier: v.Identifier, + cacheControl: v.CacheControl, + contentDisposition: v.ContentDisposition, + contentEncoding: v.ContentEncoding, + contentLanguage: v.ContentLanguage, + contentType: v.ContentType, + snapshotTime: v.SnapshotTime, + + // Calculated SAS signature + signature: signature, + } + + //User delegation SAS specific parameters + if udk != nil { + p.signedOid = udk.SignedOid + p.signedTid = udk.SignedTid + p.signedStart = udk.SignedStart + p.signedExpiry = udk.SignedExpiry + p.signedService = udk.SignedService + p.signedVersion = udk.SignedVersion + } + + return p, nil +} + +// getCanonicalName computes the canonical name for a container or blob resource for SAS signing. +func getCanonicalName(account string, containerName string, blobName string) string { + // Container: "/blob/account/containername" + // Blob: "/blob/account/containername/blobname" + elements := []string{"/blob/", account, "/", containerName} + if blobName != "" { + elements = append(elements, "/", strings.Replace(blobName, "\\", "/", -1)) + } + return strings.Join(elements, "") +} + +// The ContainerSASPermissions type simplifies creating the permissions string for an Azure Storage container SAS. +// Initialize an instance of this type and then call its String method to set BlobSASSignatureValues's Permissions field. +type ContainerSASPermissions struct { + Read, Add, Create, Write, Delete, List bool +} + +// String produces the SAS permissions string for an Azure Storage container. +// Call this method to set BlobSASSignatureValues's Permissions field. +func (p ContainerSASPermissions) String() string { + var b bytes.Buffer + if p.Read { + b.WriteRune('r') + } + if p.Add { + b.WriteRune('a') + } + if p.Create { + b.WriteRune('c') + } + if p.Write { + b.WriteRune('w') + } + if p.Delete { + b.WriteRune('d') + } + if p.List { + b.WriteRune('l') + } + return b.String() +} + +// Parse initializes the ContainerSASPermissions's fields from a string. +func (p *ContainerSASPermissions) Parse(s string) error { + *p = ContainerSASPermissions{} // Clear the flags + for _, r := range s { + switch r { + case 'r': + p.Read = true + case 'a': + p.Add = true + case 'c': + p.Create = true + case 'w': + p.Write = true + case 'd': + p.Delete = true + case 'l': + p.List = true + default: + return fmt.Errorf("Invalid permission: '%v'", r) + } + } + return nil +} + +// The BlobSASPermissions type simplifies creating the permissions string for an Azure Storage blob SAS. +// Initialize an instance of this type and then call its String method to set BlobSASSignatureValues's Permissions field. +type BlobSASPermissions struct{ Read, Add, Create, Write, Delete bool } + +// String produces the SAS permissions string for an Azure Storage blob. +// Call this method to set BlobSASSignatureValues's Permissions field. +func (p BlobSASPermissions) String() string { + var b bytes.Buffer + if p.Read { + b.WriteRune('r') + } + if p.Add { + b.WriteRune('a') + } + if p.Create { + b.WriteRune('c') + } + if p.Write { + b.WriteRune('w') + } + if p.Delete { + b.WriteRune('d') + } + return b.String() +} + +// Parse initializes the BlobSASPermissions's fields from a string. +func (p *BlobSASPermissions) Parse(s string) error { + *p = BlobSASPermissions{} // Clear the flags + for _, r := range s { + switch r { + case 'r': + p.Read = true + case 'a': + p.Add = true + case 'c': + p.Create = true + case 'w': + p.Write = true + case 'd': + p.Delete = true + default: + return fmt.Errorf("Invalid permission: '%v'", r) + } + } + return nil +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/service_codes_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/service_codes_blob.go new file mode 100644 index 000000000..d260f8aee --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/service_codes_blob.go @@ -0,0 +1,195 @@ +package azblob + +// https://docs.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes + +// ServiceCode values indicate a service failure. +const ( + // ServiceCodeAppendPositionConditionNotMet means the append position condition specified was not met. + ServiceCodeAppendPositionConditionNotMet ServiceCodeType = "AppendPositionConditionNotMet" + + // ServiceCodeBlobAlreadyExists means the specified blob already exists. + ServiceCodeBlobAlreadyExists ServiceCodeType = "BlobAlreadyExists" + + // ServiceCodeBlobNotFound means the specified blob does not exist. + ServiceCodeBlobNotFound ServiceCodeType = "BlobNotFound" + + // ServiceCodeBlobOverwritten means the blob has been recreated since the previous snapshot was taken. + ServiceCodeBlobOverwritten ServiceCodeType = "BlobOverwritten" + + // ServiceCodeBlobTierInadequateForContentLength means the specified blob tier size limit cannot be less than content length. + ServiceCodeBlobTierInadequateForContentLength ServiceCodeType = "BlobTierInadequateForContentLength" + + // ServiceCodeBlockCountExceedsLimit means the committed block count cannot exceed the maximum limit of 50,000 blocks + // or that the uncommitted block count cannot exceed the maximum limit of 100,000 blocks. + ServiceCodeBlockCountExceedsLimit ServiceCodeType = "BlockCountExceedsLimit" + + // ServiceCodeBlockListTooLong means the block list may not contain more than 50,000 blocks. + ServiceCodeBlockListTooLong ServiceCodeType = "BlockListTooLong" + + // ServiceCodeCannotChangeToLowerTier means that a higher blob tier has already been explicitly set. + ServiceCodeCannotChangeToLowerTier ServiceCodeType = "CannotChangeToLowerTier" + + // ServiceCodeCannotVerifyCopySource means that the service could not verify the copy source within the specified time. + // Examine the HTTP status code and message for more information about the failure. + ServiceCodeCannotVerifyCopySource ServiceCodeType = "CannotVerifyCopySource" + + // ServiceCodeContainerAlreadyExists means the specified container already exists. + ServiceCodeContainerAlreadyExists ServiceCodeType = "ContainerAlreadyExists" + + // ServiceCodeContainerBeingDeleted means the specified container is being deleted. + ServiceCodeContainerBeingDeleted ServiceCodeType = "ContainerBeingDeleted" + + // ServiceCodeContainerDisabled means the specified container has been disabled by the administrator. + ServiceCodeContainerDisabled ServiceCodeType = "ContainerDisabled" + + // ServiceCodeContainerNotFound means the specified container does not exist. + ServiceCodeContainerNotFound ServiceCodeType = "ContainerNotFound" + + // ServiceCodeContentLengthLargerThanTierLimit means the blob's content length cannot exceed its tier limit. + ServiceCodeContentLengthLargerThanTierLimit ServiceCodeType = "ContentLengthLargerThanTierLimit" + + // ServiceCodeCopyAcrossAccountsNotSupported means the copy source account and destination account must be the same. + ServiceCodeCopyAcrossAccountsNotSupported ServiceCodeType = "CopyAcrossAccountsNotSupported" + + // ServiceCodeCopyIDMismatch means the specified copy ID did not match the copy ID for the pending copy operation. + ServiceCodeCopyIDMismatch ServiceCodeType = "CopyIdMismatch" + + // ServiceCodeFeatureVersionMismatch means the type of blob in the container is unrecognized by this version or + // that the operation for AppendBlob requires at least version 2015-02-21. + ServiceCodeFeatureVersionMismatch ServiceCodeType = "FeatureVersionMismatch" + + // ServiceCodeIncrementalCopyBlobMismatch means the specified source blob is different than the copy source of the existing incremental copy blob. + ServiceCodeIncrementalCopyBlobMismatch ServiceCodeType = "IncrementalCopyBlobMismatch" + + // ServiceCodeIncrementalCopyOfEralierVersionSnapshotNotAllowed means the specified snapshot is earlier than the last snapshot copied into the incremental copy blob. + ServiceCodeIncrementalCopyOfEralierVersionSnapshotNotAllowed ServiceCodeType = "IncrementalCopyOfEralierVersionSnapshotNotAllowed" + + // ServiceCodeIncrementalCopySourceMustBeSnapshot means the source for incremental copy request must be a snapshot. + ServiceCodeIncrementalCopySourceMustBeSnapshot ServiceCodeType = "IncrementalCopySourceMustBeSnapshot" + + // ServiceCodeInfiniteLeaseDurationRequired means the lease ID matched, but the specified lease must be an infinite-duration lease. + ServiceCodeInfiniteLeaseDurationRequired ServiceCodeType = "InfiniteLeaseDurationRequired" + + // ServiceCodeInvalidBlobOrBlock means the specified blob or block content is invalid. + ServiceCodeInvalidBlobOrBlock ServiceCodeType = "InvalidBlobOrBlock" + + // ServiceCodeInvalidBlobType means the blob type is invalid for this operation. + ServiceCodeInvalidBlobType ServiceCodeType = "InvalidBlobType" + + // ServiceCodeInvalidBlockID means the specified block ID is invalid. The block ID must be Base64-encoded. + ServiceCodeInvalidBlockID ServiceCodeType = "InvalidBlockId" + + // ServiceCodeInvalidBlockList means the specified block list is invalid. + ServiceCodeInvalidBlockList ServiceCodeType = "InvalidBlockList" + + // ServiceCodeInvalidOperation means an invalid operation against a blob snapshot. + ServiceCodeInvalidOperation ServiceCodeType = "InvalidOperation" + + // ServiceCodeInvalidPageRange means the page range specified is invalid. + ServiceCodeInvalidPageRange ServiceCodeType = "InvalidPageRange" + + // ServiceCodeInvalidSourceBlobType means the copy source blob type is invalid for this operation. + ServiceCodeInvalidSourceBlobType ServiceCodeType = "InvalidSourceBlobType" + + // ServiceCodeInvalidSourceBlobURL means the source URL for incremental copy request must be valid Azure Storage blob URL. + ServiceCodeInvalidSourceBlobURL ServiceCodeType = "InvalidSourceBlobUrl" + + // ServiceCodeInvalidVersionForPageBlobOperation means that all operations on page blobs require at least version 2009-09-19. + ServiceCodeInvalidVersionForPageBlobOperation ServiceCodeType = "InvalidVersionForPageBlobOperation" + + // ServiceCodeLeaseAlreadyPresent means there is already a lease present. + ServiceCodeLeaseAlreadyPresent ServiceCodeType = "LeaseAlreadyPresent" + + // ServiceCodeLeaseAlreadyBroken means the lease has already been broken and cannot be broken again. + ServiceCodeLeaseAlreadyBroken ServiceCodeType = "LeaseAlreadyBroken" + + // ServiceCodeLeaseIDMismatchWithBlobOperation means the lease ID specified did not match the lease ID for the blob. + ServiceCodeLeaseIDMismatchWithBlobOperation ServiceCodeType = "LeaseIdMismatchWithBlobOperation" + + // ServiceCodeLeaseIDMismatchWithContainerOperation means the lease ID specified did not match the lease ID for the container. + ServiceCodeLeaseIDMismatchWithContainerOperation ServiceCodeType = "LeaseIdMismatchWithContainerOperation" + + // ServiceCodeLeaseIDMismatchWithLeaseOperation means the lease ID specified did not match the lease ID for the blob/container. + ServiceCodeLeaseIDMismatchWithLeaseOperation ServiceCodeType = "LeaseIdMismatchWithLeaseOperation" + + // ServiceCodeLeaseIDMissing means there is currently a lease on the blob/container and no lease ID was specified in the request. + ServiceCodeLeaseIDMissing ServiceCodeType = "LeaseIdMissing" + + // ServiceCodeLeaseIsBreakingAndCannotBeAcquired means the lease ID matched, but the lease is currently in breaking state and cannot be acquired until it is broken. + ServiceCodeLeaseIsBreakingAndCannotBeAcquired ServiceCodeType = "LeaseIsBreakingAndCannotBeAcquired" + + // ServiceCodeLeaseIsBreakingAndCannotBeChanged means the lease ID matched, but the lease is currently in breaking state and cannot be changed. + ServiceCodeLeaseIsBreakingAndCannotBeChanged ServiceCodeType = "LeaseIsBreakingAndCannotBeChanged" + + // ServiceCodeLeaseIsBrokenAndCannotBeRenewed means the lease ID matched, but the lease has been broken explicitly and cannot be renewed. + ServiceCodeLeaseIsBrokenAndCannotBeRenewed ServiceCodeType = "LeaseIsBrokenAndCannotBeRenewed" + + // ServiceCodeLeaseLost means a lease ID was specified, but the lease for the blob/container has expired. + ServiceCodeLeaseLost ServiceCodeType = "LeaseLost" + + // ServiceCodeLeaseNotPresentWithBlobOperation means there is currently no lease on the blob. + ServiceCodeLeaseNotPresentWithBlobOperation ServiceCodeType = "LeaseNotPresentWithBlobOperation" + + // ServiceCodeLeaseNotPresentWithContainerOperation means there is currently no lease on the container. + ServiceCodeLeaseNotPresentWithContainerOperation ServiceCodeType = "LeaseNotPresentWithContainerOperation" + + // ServiceCodeLeaseNotPresentWithLeaseOperation means there is currently no lease on the blob/container. + ServiceCodeLeaseNotPresentWithLeaseOperation ServiceCodeType = "LeaseNotPresentWithLeaseOperation" + + // ServiceCodeMaxBlobSizeConditionNotMet means the max blob size condition specified was not met. + ServiceCodeMaxBlobSizeConditionNotMet ServiceCodeType = "MaxBlobSizeConditionNotMet" + + // ServiceCodeNoPendingCopyOperation means there is currently no pending copy operation. + ServiceCodeNoPendingCopyOperation ServiceCodeType = "NoPendingCopyOperation" + + // ServiceCodeOperationNotAllowedOnIncrementalCopyBlob means the specified operation is not allowed on an incremental copy blob. + ServiceCodeOperationNotAllowedOnIncrementalCopyBlob ServiceCodeType = "OperationNotAllowedOnIncrementalCopyBlob" + + // ServiceCodePendingCopyOperation means there is currently a pending copy operation. + ServiceCodePendingCopyOperation ServiceCodeType = "PendingCopyOperation" + + // ServiceCodePreviousSnapshotCannotBeNewer means the prevsnapshot query parameter value cannot be newer than snapshot query parameter value. + ServiceCodePreviousSnapshotCannotBeNewer ServiceCodeType = "PreviousSnapshotCannotBeNewer" + + // ServiceCodePreviousSnapshotNotFound means the previous snapshot is not found. + ServiceCodePreviousSnapshotNotFound ServiceCodeType = "PreviousSnapshotNotFound" + + // ServiceCodePreviousSnapshotOperationNotSupported means that differential Get Page Ranges is not supported on the previous snapshot. + ServiceCodePreviousSnapshotOperationNotSupported ServiceCodeType = "PreviousSnapshotOperationNotSupported" + + // ServiceCodeSequenceNumberConditionNotMet means the sequence number condition specified was not met. + ServiceCodeSequenceNumberConditionNotMet ServiceCodeType = "SequenceNumberConditionNotMet" + + // ServiceCodeSequenceNumberIncrementTooLarge means the sequence number increment cannot be performed because it would result in overflow of the sequence number. + ServiceCodeSequenceNumberIncrementTooLarge ServiceCodeType = "SequenceNumberIncrementTooLarge" + + // ServiceCodeSnapshotCountExceeded means the snapshot count against this blob has been exceeded. + ServiceCodeSnapshotCountExceeded ServiceCodeType = "SnapshotCountExceeded" + + // ServiceCodeSnaphotOperationRateExceeded means the rate of snapshot operations against this blob has been exceeded. + ServiceCodeSnaphotOperationRateExceeded ServiceCodeType = "SnaphotOperationRateExceeded" + + // ServiceCodeSnapshotsPresent means this operation is not permitted while the blob has snapshots. + ServiceCodeSnapshotsPresent ServiceCodeType = "SnapshotsPresent" + + // ServiceCodeSourceConditionNotMet means the source condition specified using HTTP conditional header(s) is not met. + ServiceCodeSourceConditionNotMet ServiceCodeType = "SourceConditionNotMet" + + // ServiceCodeSystemInUse means this blob is in use by the system. + ServiceCodeSystemInUse ServiceCodeType = "SystemInUse" + + // ServiceCodeTargetConditionNotMet means the target condition specified using HTTP conditional header(s) is not met. + ServiceCodeTargetConditionNotMet ServiceCodeType = "TargetConditionNotMet" + + // ServiceCodeUnauthorizedBlobOverwrite means this request is not authorized to perform blob overwrites. + ServiceCodeUnauthorizedBlobOverwrite ServiceCodeType = "UnauthorizedBlobOverwrite" + + // ServiceCodeBlobBeingRehydrated means this operation is not permitted because the blob is being rehydrated. + ServiceCodeBlobBeingRehydrated ServiceCodeType = "BlobBeingRehydrated" + + // ServiceCodeBlobArchived means this operation is not permitted on an archived blob. + ServiceCodeBlobArchived ServiceCodeType = "BlobArchived" + + // ServiceCodeBlobNotArchived means this blob is currently not in the archived state. + ServiceCodeBlobNotArchived ServiceCodeType = "BlobNotArchived" +) diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/storage_account_credential.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/storage_account_credential.go new file mode 100644 index 000000000..b89b18bb4 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/storage_account_credential.go @@ -0,0 +1,8 @@ +package azblob + +// StorageAccountCredential is a wrapper interface for SharedKeyCredential and UserDelegationCredential +type StorageAccountCredential interface { + AccountName() string + ComputeHMACSHA256(message string) (base64String string) + getUDKParams() *UserDelegationKey +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_append_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_append_blob.go new file mode 100644 index 000000000..b6bd6af11 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_append_blob.go @@ -0,0 +1,128 @@ +package azblob + +import ( + "context" + "io" + "net/url" + + "github.com/Azure/azure-pipeline-go/pipeline" +) + +const ( + // AppendBlobMaxAppendBlockBytes indicates the maximum number of bytes that can be sent in a call to AppendBlock. + AppendBlobMaxAppendBlockBytes = 4 * 1024 * 1024 // 4MB + + // AppendBlobMaxBlocks indicates the maximum number of blocks allowed in an append blob. + AppendBlobMaxBlocks = 50000 +) + +// AppendBlobURL defines a set of operations applicable to append blobs. +type AppendBlobURL struct { + BlobURL + abClient appendBlobClient +} + +// NewAppendBlobURL creates an AppendBlobURL object using the specified URL and request policy pipeline. +func NewAppendBlobURL(url url.URL, p pipeline.Pipeline) AppendBlobURL { + blobClient := newBlobClient(url, p) + abClient := newAppendBlobClient(url, p) + return AppendBlobURL{BlobURL: BlobURL{blobClient: blobClient}, abClient: abClient} +} + +// WithPipeline creates a new AppendBlobURL object identical to the source but with the specific request policy pipeline. +func (ab AppendBlobURL) WithPipeline(p pipeline.Pipeline) AppendBlobURL { + return NewAppendBlobURL(ab.blobClient.URL(), p) +} + +// WithSnapshot creates a new AppendBlobURL object identical to the source but with the specified snapshot timestamp. +// Pass "" to remove the snapshot returning a URL to the base blob. +func (ab AppendBlobURL) WithSnapshot(snapshot string) AppendBlobURL { + p := NewBlobURLParts(ab.URL()) + p.Snapshot = snapshot + return NewAppendBlobURL(p.URL(), ab.blobClient.Pipeline()) +} + +// Create creates a 0-length append blob. Call AppendBlock to append data to an append blob. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-blob. +func (ab AppendBlobURL) Create(ctx context.Context, h BlobHTTPHeaders, metadata Metadata, ac BlobAccessConditions) (*AppendBlobCreateResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch := ac.ModifiedAccessConditions.pointers() + return ab.abClient.Create(ctx, 0, nil, + &h.ContentType, &h.ContentEncoding, &h.ContentLanguage, h.ContentMD5, + &h.CacheControl, metadata, ac.LeaseAccessConditions.pointers(), &h.ContentDisposition, + ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, nil) +} + +// AppendBlock writes a stream to a new block of data to the end of the existing append blob. +// This method panics if the stream is not at position 0. +// Note that the http client closes the body stream after the request is sent to the service. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/append-block. +func (ab AppendBlobURL) AppendBlock(ctx context.Context, body io.ReadSeeker, ac AppendBlobAccessConditions, transactionalMD5 []byte) (*AppendBlobAppendBlockResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + ifAppendPositionEqual, ifMaxSizeLessThanOrEqual := ac.AppendPositionAccessConditions.pointers() + count, err := validateSeekableStreamAt0AndGetCount(body) + if err != nil { + return nil, err + } + return ab.abClient.AppendBlock(ctx, body, count, nil, + transactionalMD5, ac.LeaseAccessConditions.pointers(), + ifMaxSizeLessThanOrEqual, ifAppendPositionEqual, + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) +} + +// AppendBlockFromURL copies a new block of data from source URL to the end of the existing append blob. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/append-block-from-url. +func (ab AppendBlobURL) AppendBlockFromURL(ctx context.Context, sourceURL url.URL, offset int64, count int64, destinationAccessConditions AppendBlobAccessConditions, sourceAccessConditions ModifiedAccessConditions, transactionalMD5 []byte) (*AppendBlobAppendBlockFromURLResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := destinationAccessConditions.ModifiedAccessConditions.pointers() + sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatchETag, sourceIfNoneMatchETag := sourceAccessConditions.pointers() + ifAppendPositionEqual, ifMaxSizeLessThanOrEqual := destinationAccessConditions.AppendPositionAccessConditions.pointers() + return ab.abClient.AppendBlockFromURL(ctx, sourceURL.String(), 0, httpRange{offset: offset, count: count}.pointers(), + transactionalMD5, nil, destinationAccessConditions.LeaseAccessConditions.pointers(), + ifMaxSizeLessThanOrEqual, ifAppendPositionEqual, + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatchETag, sourceIfNoneMatchETag, nil) +} + +type AppendBlobAccessConditions struct { + ModifiedAccessConditions + LeaseAccessConditions + AppendPositionAccessConditions +} + +// AppendPositionAccessConditions identifies append blob-specific access conditions which you optionally set. +type AppendPositionAccessConditions struct { + // IfAppendPositionEqual ensures that the AppendBlock operation succeeds + // only if the append position is equal to a value. + // IfAppendPositionEqual=0 means no 'IfAppendPositionEqual' header specified. + // IfAppendPositionEqual>0 means 'IfAppendPositionEqual' header specified with its value + // IfAppendPositionEqual==-1 means IfAppendPositionEqual' header specified with a value of 0 + IfAppendPositionEqual int64 + + // IfMaxSizeLessThanOrEqual ensures that the AppendBlock operation succeeds + // only if the append blob's size is less than or equal to a value. + // IfMaxSizeLessThanOrEqual=0 means no 'IfMaxSizeLessThanOrEqual' header specified. + // IfMaxSizeLessThanOrEqual>0 means 'IfMaxSizeLessThanOrEqual' header specified with its value + // IfMaxSizeLessThanOrEqual==-1 means 'IfMaxSizeLessThanOrEqual' header specified with a value of 0 + IfMaxSizeLessThanOrEqual int64 +} + +// pointers is for internal infrastructure. It returns the fields as pointers. +func (ac AppendPositionAccessConditions) pointers() (iape *int64, imsltoe *int64) { + var zero int64 // defaults to 0 + switch ac.IfAppendPositionEqual { + case -1: + iape = &zero + case 0: + iape = nil + default: + iape = &ac.IfAppendPositionEqual + } + + switch ac.IfMaxSizeLessThanOrEqual { + case -1: + imsltoe = &zero + case 0: + imsltoe = nil + default: + imsltoe = &ac.IfMaxSizeLessThanOrEqual + } + return +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_blob.go new file mode 100644 index 000000000..41d13402c --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_blob.go @@ -0,0 +1,216 @@ +package azblob + +import ( + "context" + "net/url" + + "github.com/Azure/azure-pipeline-go/pipeline" +) + +// A BlobURL represents a URL to an Azure Storage blob; the blob may be a block blob, append blob, or page blob. +type BlobURL struct { + blobClient blobClient +} + +// NewBlobURL creates a BlobURL object using the specified URL and request policy pipeline. +func NewBlobURL(url url.URL, p pipeline.Pipeline) BlobURL { + blobClient := newBlobClient(url, p) + return BlobURL{blobClient: blobClient} +} + +// URL returns the URL endpoint used by the BlobURL object. +func (b BlobURL) URL() url.URL { + return b.blobClient.URL() +} + +// String returns the URL as a string. +func (b BlobURL) String() string { + u := b.URL() + return u.String() +} + +// WithPipeline creates a new BlobURL object identical to the source but with the specified request policy pipeline. +func (b BlobURL) WithPipeline(p pipeline.Pipeline) BlobURL { + return NewBlobURL(b.blobClient.URL(), p) +} + +// WithSnapshot creates a new BlobURL object identical to the source but with the specified snapshot timestamp. +// Pass "" to remove the snapshot returning a URL to the base blob. +func (b BlobURL) WithSnapshot(snapshot string) BlobURL { + p := NewBlobURLParts(b.URL()) + p.Snapshot = snapshot + return NewBlobURL(p.URL(), b.blobClient.Pipeline()) +} + +// ToAppendBlobURL creates an AppendBlobURL using the source's URL and pipeline. +func (b BlobURL) ToAppendBlobURL() AppendBlobURL { + return NewAppendBlobURL(b.URL(), b.blobClient.Pipeline()) +} + +// ToBlockBlobURL creates a BlockBlobURL using the source's URL and pipeline. +func (b BlobURL) ToBlockBlobURL() BlockBlobURL { + return NewBlockBlobURL(b.URL(), b.blobClient.Pipeline()) +} + +// ToPageBlobURL creates a PageBlobURL using the source's URL and pipeline. +func (b BlobURL) ToPageBlobURL() PageBlobURL { + return NewPageBlobURL(b.URL(), b.blobClient.Pipeline()) +} + +// DownloadBlob reads a range of bytes from a blob. The response also includes the blob's properties and metadata. +// Passing azblob.CountToEnd (0) for count will download the blob from the offset to the end. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-blob. +func (b BlobURL) Download(ctx context.Context, offset int64, count int64, ac BlobAccessConditions, rangeGetContentMD5 bool) (*DownloadResponse, error) { + var xRangeGetContentMD5 *bool + if rangeGetContentMD5 { + xRangeGetContentMD5 = &rangeGetContentMD5 + } + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + dr, err := b.blobClient.Download(ctx, nil, nil, + httpRange{offset: offset, count: count}.pointers(), + ac.LeaseAccessConditions.pointers(), xRangeGetContentMD5, + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) + if err != nil { + return nil, err + } + return &DownloadResponse{ + b: b, + r: dr, + ctx: ctx, + getInfo: HTTPGetterInfo{Offset: offset, Count: count, ETag: dr.ETag()}, + }, err +} + +// DeleteBlob marks the specified blob or snapshot for deletion. The blob is later deleted during garbage collection. +// Note that deleting a blob also deletes all its snapshots. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/delete-blob. +func (b BlobURL) Delete(ctx context.Context, deleteOptions DeleteSnapshotsOptionType, ac BlobAccessConditions) (*BlobDeleteResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + return b.blobClient.Delete(ctx, nil, nil, ac.LeaseAccessConditions.pointers(), deleteOptions, + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) +} + +// Undelete restores the contents and metadata of a soft-deleted blob and any associated soft-deleted snapshots. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/undelete-blob. +func (b BlobURL) Undelete(ctx context.Context) (*BlobUndeleteResponse, error) { + return b.blobClient.Undelete(ctx, nil, nil) +} + +// SetTier operation sets the tier on a blob. The operation is allowed on a page +// blob in a premium storage account and on a block blob in a blob storage account (locally +// redundant storage only). A premium page blob's tier determines the allowed size, IOPS, and +// bandwidth of the blob. A block blob's tier determines Hot/Cool/Archive storage type. This operation +// does not update the blob's ETag. +// For detailed information about block blob level tiering see https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-storage-tiers. +func (b BlobURL) SetTier(ctx context.Context, tier AccessTierType, lac LeaseAccessConditions) (*BlobSetTierResponse, error) { + return b.blobClient.SetTier(ctx, tier, nil, nil, lac.pointers()) +} + +// GetBlobProperties returns the blob's properties. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-blob-properties. +func (b BlobURL) GetProperties(ctx context.Context, ac BlobAccessConditions) (*BlobGetPropertiesResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + return b.blobClient.GetProperties(ctx, nil, nil, ac.LeaseAccessConditions.pointers(), + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) +} + +// SetBlobHTTPHeaders changes a blob's HTTP headers. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/set-blob-properties. +func (b BlobURL) SetHTTPHeaders(ctx context.Context, h BlobHTTPHeaders, ac BlobAccessConditions) (*BlobSetHTTPHeadersResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + return b.blobClient.SetHTTPHeaders(ctx, nil, + &h.CacheControl, &h.ContentType, h.ContentMD5, &h.ContentEncoding, &h.ContentLanguage, + ac.LeaseAccessConditions.pointers(), ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, + &h.ContentDisposition, nil) +} + +// SetBlobMetadata changes a blob's metadata. +// https://docs.microsoft.com/rest/api/storageservices/set-blob-metadata. +func (b BlobURL) SetMetadata(ctx context.Context, metadata Metadata, ac BlobAccessConditions) (*BlobSetMetadataResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + return b.blobClient.SetMetadata(ctx, nil, metadata, ac.LeaseAccessConditions.pointers(), + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) +} + +// CreateSnapshot creates a read-only snapshot of a blob. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/snapshot-blob. +func (b BlobURL) CreateSnapshot(ctx context.Context, metadata Metadata, ac BlobAccessConditions) (*BlobCreateSnapshotResponse, error) { + // CreateSnapshot does NOT panic if the user tries to create a snapshot using a URL that already has a snapshot query parameter + // because checking this would be a performance hit for a VERY unusual path and I don't think the common case should suffer this + // performance hit. + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + return b.blobClient.CreateSnapshot(ctx, nil, metadata, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, ac.LeaseAccessConditions.pointers(), nil) +} + +// AcquireLease acquires a lease on the blob for write and delete operations. The lease duration must be between +// 15 to 60 seconds, or infinite (-1). +// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob. +func (b BlobURL) AcquireLease(ctx context.Context, proposedID string, duration int32, ac ModifiedAccessConditions) (*BlobAcquireLeaseResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.pointers() + return b.blobClient.AcquireLease(ctx, nil, &duration, &proposedID, + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) +} + +// RenewLease renews the blob's previously-acquired lease. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob. +func (b BlobURL) RenewLease(ctx context.Context, leaseID string, ac ModifiedAccessConditions) (*BlobRenewLeaseResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.pointers() + return b.blobClient.RenewLease(ctx, leaseID, nil, + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) +} + +// ReleaseLease releases the blob's previously-acquired lease. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob. +func (b BlobURL) ReleaseLease(ctx context.Context, leaseID string, ac ModifiedAccessConditions) (*BlobReleaseLeaseResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.pointers() + return b.blobClient.ReleaseLease(ctx, leaseID, nil, + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) +} + +// BreakLease breaks the blob's previously-acquired lease (if it exists). Pass the LeaseBreakDefault (-1) +// constant to break a fixed-duration lease when it expires or an infinite lease immediately. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob. +func (b BlobURL) BreakLease(ctx context.Context, breakPeriodInSeconds int32, ac ModifiedAccessConditions) (*BlobBreakLeaseResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.pointers() + return b.blobClient.BreakLease(ctx, nil, leasePeriodPointer(breakPeriodInSeconds), + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) +} + +// ChangeLease changes the blob's lease ID. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob. +func (b BlobURL) ChangeLease(ctx context.Context, leaseID string, proposedID string, ac ModifiedAccessConditions) (*BlobChangeLeaseResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.pointers() + return b.blobClient.ChangeLease(ctx, leaseID, proposedID, + nil, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) +} + +// LeaseBreakNaturally tells ContainerURL's or BlobURL's BreakLease method to break the lease using service semantics. +const LeaseBreakNaturally = -1 + +func leasePeriodPointer(period int32) (p *int32) { + if period != LeaseBreakNaturally { + p = &period + } + return nil +} + +// StartCopyFromURL copies the data at the source URL to a blob. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/copy-blob. +func (b BlobURL) StartCopyFromURL(ctx context.Context, source url.URL, metadata Metadata, srcac ModifiedAccessConditions, dstac BlobAccessConditions) (*BlobStartCopyFromURLResponse, error) { + srcIfModifiedSince, srcIfUnmodifiedSince, srcIfMatchETag, srcIfNoneMatchETag := srcac.pointers() + dstIfModifiedSince, dstIfUnmodifiedSince, dstIfMatchETag, dstIfNoneMatchETag := dstac.ModifiedAccessConditions.pointers() + dstLeaseID := dstac.LeaseAccessConditions.pointers() + + return b.blobClient.StartCopyFromURL(ctx, source.String(), nil, metadata, + srcIfModifiedSince, srcIfUnmodifiedSince, + srcIfMatchETag, srcIfNoneMatchETag, + dstIfModifiedSince, dstIfUnmodifiedSince, + dstIfMatchETag, dstIfNoneMatchETag, + dstLeaseID, nil) +} + +// AbortCopyFromURL stops a pending copy that was previously started and leaves a destination blob with 0 length and metadata. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/abort-copy-blob. +func (b BlobURL) AbortCopyFromURL(ctx context.Context, copyID string, ac LeaseAccessConditions) (*BlobAbortCopyFromURLResponse, error) { + return b.blobClient.AbortCopyFromURL(ctx, copyID, nil, ac.pointers(), nil) +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_block_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_block_blob.go new file mode 100644 index 000000000..25a9b324f --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_block_blob.go @@ -0,0 +1,162 @@ +package azblob + +import ( + "context" + "io" + "net/url" + + "encoding/base64" + "encoding/binary" + + "github.com/Azure/azure-pipeline-go/pipeline" +) + +const ( + // BlockBlobMaxUploadBlobBytes indicates the maximum number of bytes that can be sent in a call to Upload. + BlockBlobMaxUploadBlobBytes = 256 * 1024 * 1024 // 256MB + + // BlockBlobMaxStageBlockBytes indicates the maximum number of bytes that can be sent in a call to StageBlock. + BlockBlobMaxStageBlockBytes = 100 * 1024 * 1024 // 100MB + + // BlockBlobMaxBlocks indicates the maximum number of blocks allowed in a block blob. + BlockBlobMaxBlocks = 50000 +) + +// BlockBlobURL defines a set of operations applicable to block blobs. +type BlockBlobURL struct { + BlobURL + bbClient blockBlobClient +} + +// NewBlockBlobURL creates a BlockBlobURL object using the specified URL and request policy pipeline. +func NewBlockBlobURL(url url.URL, p pipeline.Pipeline) BlockBlobURL { + blobClient := newBlobClient(url, p) + bbClient := newBlockBlobClient(url, p) + return BlockBlobURL{BlobURL: BlobURL{blobClient: blobClient}, bbClient: bbClient} +} + +// WithPipeline creates a new BlockBlobURL object identical to the source but with the specific request policy pipeline. +func (bb BlockBlobURL) WithPipeline(p pipeline.Pipeline) BlockBlobURL { + return NewBlockBlobURL(bb.blobClient.URL(), p) +} + +// WithSnapshot creates a new BlockBlobURL object identical to the source but with the specified snapshot timestamp. +// Pass "" to remove the snapshot returning a URL to the base blob. +func (bb BlockBlobURL) WithSnapshot(snapshot string) BlockBlobURL { + p := NewBlobURLParts(bb.URL()) + p.Snapshot = snapshot + return NewBlockBlobURL(p.URL(), bb.blobClient.Pipeline()) +} + +// Upload creates a new block blob or overwrites an existing block blob. +// Updating an existing block blob overwrites any existing metadata on the blob. Partial updates are not +// supported with Upload; the content of the existing blob is overwritten with the new content. To +// perform a partial update of a block blob, use StageBlock and CommitBlockList. +// This method panics if the stream is not at position 0. +// Note that the http client closes the body stream after the request is sent to the service. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-blob. +func (bb BlockBlobURL) Upload(ctx context.Context, body io.ReadSeeker, h BlobHTTPHeaders, metadata Metadata, ac BlobAccessConditions) (*BlockBlobUploadResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + count, err := validateSeekableStreamAt0AndGetCount(body) + if err != nil { + return nil, err + } + return bb.bbClient.Upload(ctx, body, count, nil, + &h.ContentType, &h.ContentEncoding, &h.ContentLanguage, h.ContentMD5, + &h.CacheControl, metadata, ac.LeaseAccessConditions.pointers(), + &h.ContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, + nil) +} + +// StageBlock uploads the specified block to the block blob's "staging area" to be later committed by a call to CommitBlockList. +// Note that the http client closes the body stream after the request is sent to the service. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-block. +func (bb BlockBlobURL) StageBlock(ctx context.Context, base64BlockID string, body io.ReadSeeker, ac LeaseAccessConditions, transactionalMD5 []byte) (*BlockBlobStageBlockResponse, error) { + count, err := validateSeekableStreamAt0AndGetCount(body) + if err != nil { + return nil, err + } + return bb.bbClient.StageBlock(ctx, base64BlockID, count, body, transactionalMD5, nil, ac.pointers(), nil) +} + +// StageBlockFromURL copies the specified block from a source URL to the block blob's "staging area" to be later committed by a call to CommitBlockList. +// If count is CountToEnd (0), then data is read from specified offset to the end. +// For more information, see https://docs.microsoft.com/en-us/rest/api/storageservices/put-block-from-url. +func (bb BlockBlobURL) StageBlockFromURL(ctx context.Context, base64BlockID string, sourceURL url.URL, offset int64, count int64, destinationAccessConditions LeaseAccessConditions, sourceAccessConditions ModifiedAccessConditions) (*BlockBlobStageBlockFromURLResponse, error) { + sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatchETag, sourceIfNoneMatchETag := sourceAccessConditions.pointers() + return bb.bbClient.StageBlockFromURL(ctx, base64BlockID, 0, sourceURL.String(), httpRange{offset: offset, count: count}.pointers(), nil, nil, destinationAccessConditions.pointers(), sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatchETag, sourceIfNoneMatchETag, nil) +} + +// CommitBlockList writes a blob by specifying the list of block IDs that make up the blob. +// In order to be written as part of a blob, a block must have been successfully written +// to the server in a prior PutBlock operation. You can call PutBlockList to update a blob +// by uploading only those blocks that have changed, then committing the new and existing +// blocks together. Any blocks not specified in the block list and permanently deleted. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-block-list. +func (bb BlockBlobURL) CommitBlockList(ctx context.Context, base64BlockIDs []string, h BlobHTTPHeaders, + metadata Metadata, ac BlobAccessConditions) (*BlockBlobCommitBlockListResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + return bb.bbClient.CommitBlockList(ctx, BlockLookupList{Latest: base64BlockIDs}, nil, + &h.CacheControl, &h.ContentType, &h.ContentEncoding, &h.ContentLanguage, h.ContentMD5, + metadata, ac.LeaseAccessConditions.pointers(), &h.ContentDisposition, + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) +} + +// GetBlockList returns the list of blocks that have been uploaded as part of a block blob using the specified block list filter. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-block-list. +func (bb BlockBlobURL) GetBlockList(ctx context.Context, listType BlockListType, ac LeaseAccessConditions) (*BlockList, error) { + return bb.bbClient.GetBlockList(ctx, listType, nil, nil, ac.pointers(), nil) +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +type BlockID [64]byte + +func (blockID BlockID) ToBase64() string { + return base64.StdEncoding.EncodeToString(blockID[:]) +} + +func (blockID *BlockID) FromBase64(s string) error { + *blockID = BlockID{} // Zero out the block ID + _, err := base64.StdEncoding.Decode(blockID[:], ([]byte)(s)) + return err +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +type uuidBlockID BlockID + +func (ubi uuidBlockID) UUID() uuid { + u := uuid{} + copy(u[:], ubi[:len(u)]) + return u +} + +func (ubi uuidBlockID) Number() uint32 { + return binary.BigEndian.Uint32(ubi[len(uuid{}):]) +} + +func newUuidBlockID(u uuid) uuidBlockID { + ubi := uuidBlockID{} // Create a new uuidBlockID + copy(ubi[:len(u)], u[:]) // Copy the specified UUID into it + // Block number defaults to 0 + return ubi +} + +func (ubi *uuidBlockID) SetUUID(u uuid) *uuidBlockID { + copy(ubi[:len(u)], u[:]) + return ubi +} + +func (ubi uuidBlockID) WithBlockNumber(blockNumber uint32) uuidBlockID { + binary.BigEndian.PutUint32(ubi[len(uuid{}):], blockNumber) // Put block number after UUID + return ubi // Return the passed-in copy +} + +func (ubi uuidBlockID) ToBase64() string { + return BlockID(ubi).ToBase64() +} + +func (ubi *uuidBlockID) FromBase64(s string) error { + return (*BlockID)(ubi).FromBase64(s) +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_container.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_container.go new file mode 100644 index 000000000..48adf0804 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_container.go @@ -0,0 +1,295 @@ +package azblob + +import ( + "bytes" + "context" + "errors" + "fmt" + "net/url" + + "github.com/Azure/azure-pipeline-go/pipeline" +) + +// A ContainerURL represents a URL to the Azure Storage container allowing you to manipulate its blobs. +type ContainerURL struct { + client containerClient +} + +// NewContainerURL creates a ContainerURL object using the specified URL and request policy pipeline. +func NewContainerURL(url url.URL, p pipeline.Pipeline) ContainerURL { + client := newContainerClient(url, p) + return ContainerURL{client: client} +} + +// URL returns the URL endpoint used by the ContainerURL object. +func (c ContainerURL) URL() url.URL { + return c.client.URL() +} + +// String returns the URL as a string. +func (c ContainerURL) String() string { + u := c.URL() + return u.String() +} + +// WithPipeline creates a new ContainerURL object identical to the source but with the specified request policy pipeline. +func (c ContainerURL) WithPipeline(p pipeline.Pipeline) ContainerURL { + return NewContainerURL(c.URL(), p) +} + +// NewBlobURL creates a new BlobURL object by concatenating blobName to the end of +// ContainerURL's URL. The new BlobURL uses the same request policy pipeline as the ContainerURL. +// To change the pipeline, create the BlobURL and then call its WithPipeline method passing in the +// desired pipeline object. Or, call this package's NewBlobURL instead of calling this object's +// NewBlobURL method. +func (c ContainerURL) NewBlobURL(blobName string) BlobURL { + blobURL := appendToURLPath(c.URL(), blobName) + return NewBlobURL(blobURL, c.client.Pipeline()) +} + +// NewAppendBlobURL creates a new AppendBlobURL object by concatenating blobName to the end of +// ContainerURL's URL. The new AppendBlobURL uses the same request policy pipeline as the ContainerURL. +// To change the pipeline, create the AppendBlobURL and then call its WithPipeline method passing in the +// desired pipeline object. Or, call this package's NewAppendBlobURL instead of calling this object's +// NewAppendBlobURL method. +func (c ContainerURL) NewAppendBlobURL(blobName string) AppendBlobURL { + blobURL := appendToURLPath(c.URL(), blobName) + return NewAppendBlobURL(blobURL, c.client.Pipeline()) +} + +// NewBlockBlobURL creates a new BlockBlobURL object by concatenating blobName to the end of +// ContainerURL's URL. The new BlockBlobURL uses the same request policy pipeline as the ContainerURL. +// To change the pipeline, create the BlockBlobURL and then call its WithPipeline method passing in the +// desired pipeline object. Or, call this package's NewBlockBlobURL instead of calling this object's +// NewBlockBlobURL method. +func (c ContainerURL) NewBlockBlobURL(blobName string) BlockBlobURL { + blobURL := appendToURLPath(c.URL(), blobName) + return NewBlockBlobURL(blobURL, c.client.Pipeline()) +} + +// NewPageBlobURL creates a new PageBlobURL object by concatenating blobName to the end of +// ContainerURL's URL. The new PageBlobURL uses the same request policy pipeline as the ContainerURL. +// To change the pipeline, create the PageBlobURL and then call its WithPipeline method passing in the +// desired pipeline object. Or, call this package's NewPageBlobURL instead of calling this object's +// NewPageBlobURL method. +func (c ContainerURL) NewPageBlobURL(blobName string) PageBlobURL { + blobURL := appendToURLPath(c.URL(), blobName) + return NewPageBlobURL(blobURL, c.client.Pipeline()) +} + +// Create creates a new container within a storage account. If a container with the same name already exists, the operation fails. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/create-container. +func (c ContainerURL) Create(ctx context.Context, metadata Metadata, publicAccessType PublicAccessType) (*ContainerCreateResponse, error) { + return c.client.Create(ctx, nil, metadata, publicAccessType, nil) +} + +// Delete marks the specified container for deletion. The container and any blobs contained within it are later deleted during garbage collection. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/delete-container. +func (c ContainerURL) Delete(ctx context.Context, ac ContainerAccessConditions) (*ContainerDeleteResponse, error) { + if ac.IfMatch != ETagNone || ac.IfNoneMatch != ETagNone { + return nil, errors.New("the IfMatch and IfNoneMatch access conditions must have their default values because they are ignored by the service") + } + + ifModifiedSince, ifUnmodifiedSince, _, _ := ac.ModifiedAccessConditions.pointers() + return c.client.Delete(ctx, nil, ac.LeaseAccessConditions.pointers(), + ifModifiedSince, ifUnmodifiedSince, nil) +} + +// GetProperties returns the container's properties. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-container-metadata. +func (c ContainerURL) GetProperties(ctx context.Context, ac LeaseAccessConditions) (*ContainerGetPropertiesResponse, error) { + // NOTE: GetMetadata actually calls GetProperties internally because GetProperties returns the metadata AND the properties. + // This allows us to not expose a GetProperties method at all simplifying the API. + return c.client.GetProperties(ctx, nil, ac.pointers(), nil) +} + +// SetMetadata sets the container's metadata. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/set-container-metadata. +func (c ContainerURL) SetMetadata(ctx context.Context, metadata Metadata, ac ContainerAccessConditions) (*ContainerSetMetadataResponse, error) { + if !ac.IfUnmodifiedSince.IsZero() || ac.IfMatch != ETagNone || ac.IfNoneMatch != ETagNone { + return nil, errors.New("the IfUnmodifiedSince, IfMatch, and IfNoneMatch must have their default values because they are ignored by the blob service") + } + ifModifiedSince, _, _, _ := ac.ModifiedAccessConditions.pointers() + return c.client.SetMetadata(ctx, nil, ac.LeaseAccessConditions.pointers(), metadata, ifModifiedSince, nil) +} + +// GetAccessPolicy returns the container's access policy. The access policy indicates whether container's blobs may be accessed publicly. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-container-acl. +func (c ContainerURL) GetAccessPolicy(ctx context.Context, ac LeaseAccessConditions) (*SignedIdentifiers, error) { + return c.client.GetAccessPolicy(ctx, nil, ac.pointers(), nil) +} + +// The AccessPolicyPermission type simplifies creating the permissions string for a container's access policy. +// Initialize an instance of this type and then call its String method to set AccessPolicy's Permission field. +type AccessPolicyPermission struct { + Read, Add, Create, Write, Delete, List bool +} + +// String produces the access policy permission string for an Azure Storage container. +// Call this method to set AccessPolicy's Permission field. +func (p AccessPolicyPermission) String() string { + var b bytes.Buffer + if p.Read { + b.WriteRune('r') + } + if p.Add { + b.WriteRune('a') + } + if p.Create { + b.WriteRune('c') + } + if p.Write { + b.WriteRune('w') + } + if p.Delete { + b.WriteRune('d') + } + if p.List { + b.WriteRune('l') + } + return b.String() +} + +// Parse initializes the AccessPolicyPermission's fields from a string. +func (p *AccessPolicyPermission) Parse(s string) error { + *p = AccessPolicyPermission{} // Clear the flags + for _, r := range s { + switch r { + case 'r': + p.Read = true + case 'a': + p.Add = true + case 'c': + p.Create = true + case 'w': + p.Write = true + case 'd': + p.Delete = true + case 'l': + p.List = true + default: + return fmt.Errorf("invalid permission: '%v'", r) + } + } + return nil +} + +// SetAccessPolicy sets the container's permissions. The access policy indicates whether blobs in a container may be accessed publicly. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/set-container-acl. +func (c ContainerURL) SetAccessPolicy(ctx context.Context, accessType PublicAccessType, si []SignedIdentifier, + ac ContainerAccessConditions) (*ContainerSetAccessPolicyResponse, error) { + if ac.IfMatch != ETagNone || ac.IfNoneMatch != ETagNone { + return nil, errors.New("the IfMatch and IfNoneMatch access conditions must have their default values because they are ignored by the service") + } + ifModifiedSince, ifUnmodifiedSince, _, _ := ac.ModifiedAccessConditions.pointers() + return c.client.SetAccessPolicy(ctx, si, nil, ac.LeaseAccessConditions.pointers(), + accessType, ifModifiedSince, ifUnmodifiedSince, nil) +} + +// AcquireLease acquires a lease on the container for delete operations. The lease duration must be between 15 to 60 seconds, or infinite (-1). +// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container. +func (c ContainerURL) AcquireLease(ctx context.Context, proposedID string, duration int32, ac ModifiedAccessConditions) (*ContainerAcquireLeaseResponse, error) { + ifModifiedSince, ifUnmodifiedSince, _, _ := ac.pointers() + return c.client.AcquireLease(ctx, nil, &duration, &proposedID, + ifModifiedSince, ifUnmodifiedSince, nil) +} + +// RenewLease renews the container's previously-acquired lease. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container. +func (c ContainerURL) RenewLease(ctx context.Context, leaseID string, ac ModifiedAccessConditions) (*ContainerRenewLeaseResponse, error) { + ifModifiedSince, ifUnmodifiedSince, _, _ := ac.pointers() + return c.client.RenewLease(ctx, leaseID, nil, ifModifiedSince, ifUnmodifiedSince, nil) +} + +// ReleaseLease releases the container's previously-acquired lease. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container. +func (c ContainerURL) ReleaseLease(ctx context.Context, leaseID string, ac ModifiedAccessConditions) (*ContainerReleaseLeaseResponse, error) { + ifModifiedSince, ifUnmodifiedSince, _, _ := ac.pointers() + return c.client.ReleaseLease(ctx, leaseID, nil, ifModifiedSince, ifUnmodifiedSince, nil) +} + +// BreakLease breaks the container's previously-acquired lease (if it exists). +// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container. +func (c ContainerURL) BreakLease(ctx context.Context, period int32, ac ModifiedAccessConditions) (*ContainerBreakLeaseResponse, error) { + ifModifiedSince, ifUnmodifiedSince, _, _ := ac.pointers() + return c.client.BreakLease(ctx, nil, leasePeriodPointer(period), ifModifiedSince, ifUnmodifiedSince, nil) +} + +// ChangeLease changes the container's lease ID. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container. +func (c ContainerURL) ChangeLease(ctx context.Context, leaseID string, proposedID string, ac ModifiedAccessConditions) (*ContainerChangeLeaseResponse, error) { + ifModifiedSince, ifUnmodifiedSince, _, _ := ac.pointers() + return c.client.ChangeLease(ctx, leaseID, proposedID, nil, ifModifiedSince, ifUnmodifiedSince, nil) +} + +// ListBlobsFlatSegment returns a single segment of blobs starting from the specified Marker. Use an empty +// Marker to start enumeration from the beginning. Blob names are returned in lexicographic order. +// After getting a segment, process it, and then call ListBlobsFlatSegment again (passing the the +// previously-returned Marker) to get the next segment. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/list-blobs. +func (c ContainerURL) ListBlobsFlatSegment(ctx context.Context, marker Marker, o ListBlobsSegmentOptions) (*ListBlobsFlatSegmentResponse, error) { + prefix, include, maxResults := o.pointers() + return c.client.ListBlobFlatSegment(ctx, prefix, marker.Val, maxResults, include, nil, nil) +} + +// ListBlobsHierarchySegment returns a single segment of blobs starting from the specified Marker. Use an empty +// Marker to start enumeration from the beginning. Blob names are returned in lexicographic order. +// After getting a segment, process it, and then call ListBlobsHierarchicalSegment again (passing the the +// previously-returned Marker) to get the next segment. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/list-blobs. +func (c ContainerURL) ListBlobsHierarchySegment(ctx context.Context, marker Marker, delimiter string, o ListBlobsSegmentOptions) (*ListBlobsHierarchySegmentResponse, error) { + if o.Details.Snapshots { + return nil, errors.New("snapshots are not supported in this listing operation") + } + prefix, include, maxResults := o.pointers() + return c.client.ListBlobHierarchySegment(ctx, delimiter, prefix, marker.Val, maxResults, include, nil, nil) +} + +// ListBlobsSegmentOptions defines options available when calling ListBlobs. +type ListBlobsSegmentOptions struct { + Details BlobListingDetails // No IncludeType header is produced if "" + Prefix string // No Prefix header is produced if "" + + // SetMaxResults sets the maximum desired results you want the service to return. Note, the + // service may return fewer results than requested. + // MaxResults=0 means no 'MaxResults' header specified. + MaxResults int32 +} + +func (o *ListBlobsSegmentOptions) pointers() (prefix *string, include []ListBlobsIncludeItemType, maxResults *int32) { + if o.Prefix != "" { + prefix = &o.Prefix + } + include = o.Details.slice() + if o.MaxResults != 0 { + maxResults = &o.MaxResults + } + return +} + +// BlobListingDetails indicates what additional information the service should return with each blob. +type BlobListingDetails struct { + Copy, Metadata, Snapshots, UncommittedBlobs, Deleted bool +} + +// string produces the Include query parameter's value. +func (d *BlobListingDetails) slice() []ListBlobsIncludeItemType { + items := []ListBlobsIncludeItemType{} + // NOTE: Multiple strings MUST be appended in alphabetic order or signing the string for authentication fails! + if d.Copy { + items = append(items, ListBlobsIncludeItemCopy) + } + if d.Deleted { + items = append(items, ListBlobsIncludeItemDeleted) + } + if d.Metadata { + items = append(items, ListBlobsIncludeItemMetadata) + } + if d.Snapshots { + items = append(items, ListBlobsIncludeItemSnapshots) + } + if d.UncommittedBlobs { + items = append(items, ListBlobsIncludeItemUncommittedblobs) + } + return items +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_page_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_page_blob.go new file mode 100644 index 000000000..8ee34c05a --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_page_blob.go @@ -0,0 +1,223 @@ +package azblob + +import ( + "context" + "fmt" + "io" + "net/url" + "strconv" + + "github.com/Azure/azure-pipeline-go/pipeline" +) + +const ( + // PageBlobPageBytes indicates the number of bytes in a page (512). + PageBlobPageBytes = 512 + + // PageBlobMaxPutPagesBytes indicates the maximum number of bytes that can be sent in a call to PutPage. + PageBlobMaxUploadPagesBytes = 4 * 1024 * 1024 // 4MB +) + +// PageBlobURL defines a set of operations applicable to page blobs. +type PageBlobURL struct { + BlobURL + pbClient pageBlobClient +} + +// NewPageBlobURL creates a PageBlobURL object using the specified URL and request policy pipeline. +func NewPageBlobURL(url url.URL, p pipeline.Pipeline) PageBlobURL { + blobClient := newBlobClient(url, p) + pbClient := newPageBlobClient(url, p) + return PageBlobURL{BlobURL: BlobURL{blobClient: blobClient}, pbClient: pbClient} +} + +// WithPipeline creates a new PageBlobURL object identical to the source but with the specific request policy pipeline. +func (pb PageBlobURL) WithPipeline(p pipeline.Pipeline) PageBlobURL { + return NewPageBlobURL(pb.blobClient.URL(), p) +} + +// WithSnapshot creates a new PageBlobURL object identical to the source but with the specified snapshot timestamp. +// Pass "" to remove the snapshot returning a URL to the base blob. +func (pb PageBlobURL) WithSnapshot(snapshot string) PageBlobURL { + p := NewBlobURLParts(pb.URL()) + p.Snapshot = snapshot + return NewPageBlobURL(p.URL(), pb.blobClient.Pipeline()) +} + +// Create creates a page blob of the specified length. Call PutPage to upload data data to a page blob. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-blob. +func (pb PageBlobURL) Create(ctx context.Context, size int64, sequenceNumber int64, h BlobHTTPHeaders, metadata Metadata, ac BlobAccessConditions) (*PageBlobCreateResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + return pb.pbClient.Create(ctx, 0, size, nil, + &h.ContentType, &h.ContentEncoding, &h.ContentLanguage, h.ContentMD5, &h.CacheControl, + metadata, ac.LeaseAccessConditions.pointers(), + &h.ContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, &sequenceNumber, nil) +} + +// UploadPages writes 1 or more pages to the page blob. The start offset and the stream size must be a multiple of 512 bytes. +// This method panics if the stream is not at position 0. +// Note that the http client closes the body stream after the request is sent to the service. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-page. +func (pb PageBlobURL) UploadPages(ctx context.Context, offset int64, body io.ReadSeeker, ac PageBlobAccessConditions, transactionalMD5 []byte) (*PageBlobUploadPagesResponse, error) { + count, err := validateSeekableStreamAt0AndGetCount(body) + if err != nil { + return nil, err + } + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual := ac.SequenceNumberAccessConditions.pointers() + return pb.pbClient.UploadPages(ctx, body, count, transactionalMD5, nil, + PageRange{Start: offset, End: offset + count - 1}.pointers(), + ac.LeaseAccessConditions.pointers(), + ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual, + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) +} + +// UploadPagesFromURL copies 1 or more pages from a source URL to the page blob. +// The sourceOffset specifies the start offset of source data to copy from. +// The destOffset specifies the start offset of data in page blob will be written to. +// The count must be a multiple of 512 bytes. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-page-from-url. +func (pb PageBlobURL) UploadPagesFromURL(ctx context.Context, sourceURL url.URL, sourceOffset int64, destOffset int64, count int64, transactionalMD5 []byte, destinationAccessConditions PageBlobAccessConditions, sourceAccessConditions ModifiedAccessConditions) (*PageBlobUploadPagesFromURLResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := destinationAccessConditions.ModifiedAccessConditions.pointers() + sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatchETag, sourceIfNoneMatchETag := sourceAccessConditions.pointers() + ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual := destinationAccessConditions.SequenceNumberAccessConditions.pointers() + return pb.pbClient.UploadPagesFromURL(ctx, sourceURL.String(), *PageRange{Start: sourceOffset, End: sourceOffset + count - 1}.pointers(), 0, + *PageRange{Start: destOffset, End: destOffset + count - 1}.pointers(), transactionalMD5, nil, destinationAccessConditions.LeaseAccessConditions.pointers(), + ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual, + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatchETag, sourceIfNoneMatchETag, nil) +} + +// ClearPages frees the specified pages from the page blob. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-page. +func (pb PageBlobURL) ClearPages(ctx context.Context, offset int64, count int64, ac PageBlobAccessConditions) (*PageBlobClearPagesResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual := ac.SequenceNumberAccessConditions.pointers() + return pb.pbClient.ClearPages(ctx, 0, nil, + PageRange{Start: offset, End: offset + count - 1}.pointers(), + ac.LeaseAccessConditions.pointers(), + ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, + ifSequenceNumberEqual, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) +} + +// GetPageRanges returns the list of valid page ranges for a page blob or snapshot of a page blob. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges. +func (pb PageBlobURL) GetPageRanges(ctx context.Context, offset int64, count int64, ac BlobAccessConditions) (*PageList, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + return pb.pbClient.GetPageRanges(ctx, nil, nil, + httpRange{offset: offset, count: count}.pointers(), + ac.LeaseAccessConditions.pointers(), + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) +} + +// GetPageRangesDiff gets the collection of page ranges that differ between a specified snapshot and this page blob. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges. +func (pb PageBlobURL) GetPageRangesDiff(ctx context.Context, offset int64, count int64, prevSnapshot string, ac BlobAccessConditions) (*PageList, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + return pb.pbClient.GetPageRangesDiff(ctx, nil, nil, &prevSnapshot, + httpRange{offset: offset, count: count}.pointers(), + ac.LeaseAccessConditions.pointers(), + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, + nil) +} + +// Resize resizes the page blob to the specified size (which must be a multiple of 512). +// For more information, see https://docs.microsoft.com/rest/api/storageservices/set-blob-properties. +func (pb PageBlobURL) Resize(ctx context.Context, size int64, ac BlobAccessConditions) (*PageBlobResizeResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + return pb.pbClient.Resize(ctx, size, nil, ac.LeaseAccessConditions.pointers(), + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) +} + +// SetSequenceNumber sets the page blob's sequence number. +func (pb PageBlobURL) UpdateSequenceNumber(ctx context.Context, action SequenceNumberActionType, sequenceNumber int64, + ac BlobAccessConditions) (*PageBlobUpdateSequenceNumberResponse, error) { + sn := &sequenceNumber + if action == SequenceNumberActionIncrement { + sn = nil + } + ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch := ac.ModifiedAccessConditions.pointers() + return pb.pbClient.UpdateSequenceNumber(ctx, action, nil, + ac.LeaseAccessConditions.pointers(), ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, + sn, nil) +} + +// StartIncrementalCopy begins an operation to start an incremental copy from one page blob's snapshot to this page blob. +// The snapshot is copied such that only the differential changes between the previously copied snapshot are transferred to the destination. +// The copied snapshots are complete copies of the original snapshot and can be read or copied from as usual. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/incremental-copy-blob and +// https://docs.microsoft.com/en-us/azure/virtual-machines/windows/incremental-snapshots. +func (pb PageBlobURL) StartCopyIncremental(ctx context.Context, source url.URL, snapshot string, ac BlobAccessConditions) (*PageBlobCopyIncrementalResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + qp := source.Query() + qp.Set("snapshot", snapshot) + source.RawQuery = qp.Encode() + return pb.pbClient.CopyIncremental(ctx, source.String(), nil, + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) +} + +func (pr PageRange) pointers() *string { + endOffset := strconv.FormatInt(int64(pr.End), 10) + asString := fmt.Sprintf("bytes=%v-%s", pr.Start, endOffset) + return &asString +} + +type PageBlobAccessConditions struct { + ModifiedAccessConditions + LeaseAccessConditions + SequenceNumberAccessConditions +} + +// SequenceNumberAccessConditions identifies page blob-specific access conditions which you optionally set. +type SequenceNumberAccessConditions struct { + // IfSequenceNumberLessThan ensures that the page blob operation succeeds + // only if the blob's sequence number is less than a value. + // IfSequenceNumberLessThan=0 means no 'IfSequenceNumberLessThan' header specified. + // IfSequenceNumberLessThan>0 means 'IfSequenceNumberLessThan' header specified with its value + // IfSequenceNumberLessThan==-1 means 'IfSequenceNumberLessThan' header specified with a value of 0 + IfSequenceNumberLessThan int64 + + // IfSequenceNumberLessThanOrEqual ensures that the page blob operation succeeds + // only if the blob's sequence number is less than or equal to a value. + // IfSequenceNumberLessThanOrEqual=0 means no 'IfSequenceNumberLessThanOrEqual' header specified. + // IfSequenceNumberLessThanOrEqual>0 means 'IfSequenceNumberLessThanOrEqual' header specified with its value + // IfSequenceNumberLessThanOrEqual=-1 means 'IfSequenceNumberLessThanOrEqual' header specified with a value of 0 + IfSequenceNumberLessThanOrEqual int64 + + // IfSequenceNumberEqual ensures that the page blob operation succeeds + // only if the blob's sequence number is equal to a value. + // IfSequenceNumberEqual=0 means no 'IfSequenceNumberEqual' header specified. + // IfSequenceNumberEqual>0 means 'IfSequenceNumberEqual' header specified with its value + // IfSequenceNumberEqual=-1 means 'IfSequenceNumberEqual' header specified with a value of 0 + IfSequenceNumberEqual int64 +} + +// pointers is for internal infrastructure. It returns the fields as pointers. +func (ac SequenceNumberAccessConditions) pointers() (snltoe *int64, snlt *int64, sne *int64) { + var zero int64 // Defaults to 0 + switch ac.IfSequenceNumberLessThan { + case -1: + snlt = &zero + case 0: + snlt = nil + default: + snlt = &ac.IfSequenceNumberLessThan + } + + switch ac.IfSequenceNumberLessThanOrEqual { + case -1: + snltoe = &zero + case 0: + snltoe = nil + default: + snltoe = &ac.IfSequenceNumberLessThanOrEqual + } + switch ac.IfSequenceNumberEqual { + case -1: + sne = &zero + case 0: + sne = nil + default: + sne = &ac.IfSequenceNumberEqual + } + return +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_service.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_service.go new file mode 100644 index 000000000..5974bc3a4 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_service.go @@ -0,0 +1,145 @@ +package azblob + +import ( + "context" + "net/url" + "strings" + + "github.com/Azure/azure-pipeline-go/pipeline" +) + +const ( + // ContainerNameRoot is the special Azure Storage name used to identify a storage account's root container. + ContainerNameRoot = "$root" + + // ContainerNameLogs is the special Azure Storage name used to identify a storage account's logs container. + ContainerNameLogs = "$logs" +) + +// A ServiceURL represents a URL to the Azure Storage Blob service allowing you to manipulate blob containers. +type ServiceURL struct { + client serviceClient +} + +// NewServiceURL creates a ServiceURL object using the specified URL and request policy pipeline. +func NewServiceURL(primaryURL url.URL, p pipeline.Pipeline) ServiceURL { + client := newServiceClient(primaryURL, p) + return ServiceURL{client: client} +} + +//GetUserDelegationCredential obtains a UserDelegationKey object using the base ServiceURL object. +//OAuth is required for this call, as well as any role that can delegate access to the storage account. +func (s ServiceURL) GetUserDelegationCredential(ctx context.Context, info KeyInfo, timeout *int32, requestID *string) (UserDelegationCredential, error) { + sc := newServiceClient(s.client.url, s.client.p) + udk, err := sc.GetUserDelegationKey(ctx, info, timeout, requestID) + if err != nil { + return UserDelegationCredential{}, err + } + return NewUserDelegationCredential(strings.Split(s.client.url.Host, ".")[0], *udk), nil +} + +// URL returns the URL endpoint used by the ServiceURL object. +func (s ServiceURL) URL() url.URL { + return s.client.URL() +} + +// String returns the URL as a string. +func (s ServiceURL) String() string { + u := s.URL() + return u.String() +} + +// WithPipeline creates a new ServiceURL object identical to the source but with the specified request policy pipeline. +func (s ServiceURL) WithPipeline(p pipeline.Pipeline) ServiceURL { + return NewServiceURL(s.URL(), p) +} + +// NewContainerURL creates a new ContainerURL object by concatenating containerName to the end of +// ServiceURL's URL. The new ContainerURL uses the same request policy pipeline as the ServiceURL. +// To change the pipeline, create the ContainerURL and then call its WithPipeline method passing in the +// desired pipeline object. Or, call this package's NewContainerURL instead of calling this object's +// NewContainerURL method. +func (s ServiceURL) NewContainerURL(containerName string) ContainerURL { + containerURL := appendToURLPath(s.URL(), containerName) + return NewContainerURL(containerURL, s.client.Pipeline()) +} + +// appendToURLPath appends a string to the end of a URL's path (prefixing the string with a '/' if required) +func appendToURLPath(u url.URL, name string) url.URL { + // e.g. "https://ms.com/a/b/?k1=v1&k2=v2#f" + // When you call url.Parse() this is what you'll get: + // Scheme: "https" + // Opaque: "" + // User: nil + // Host: "ms.com" + // Path: "/a/b/" This should start with a / and it might or might not have a trailing slash + // RawPath: "" + // ForceQuery: false + // RawQuery: "k1=v1&k2=v2" + // Fragment: "f" + if len(u.Path) == 0 || u.Path[len(u.Path)-1] != '/' { + u.Path += "/" // Append "/" to end before appending name + } + u.Path += name + return u +} + +// ListContainersFlatSegment returns a single segment of containers starting from the specified Marker. Use an empty +// Marker to start enumeration from the beginning. Container names are returned in lexicographic order. +// After getting a segment, process it, and then call ListContainersFlatSegment again (passing the the +// previously-returned Marker) to get the next segment. For more information, see +// https://docs.microsoft.com/rest/api/storageservices/list-containers2. +func (s ServiceURL) ListContainersSegment(ctx context.Context, marker Marker, o ListContainersSegmentOptions) (*ListContainersSegmentResponse, error) { + prefix, include, maxResults := o.pointers() + return s.client.ListContainersSegment(ctx, prefix, marker.Val, maxResults, include, nil, nil) +} + +// ListContainersOptions defines options available when calling ListContainers. +type ListContainersSegmentOptions struct { + Detail ListContainersDetail // No IncludeType header is produced if "" + Prefix string // No Prefix header is produced if "" + MaxResults int32 // 0 means unspecified + // TODO: update swagger to generate this type? +} + +func (o *ListContainersSegmentOptions) pointers() (prefix *string, include ListContainersIncludeType, maxResults *int32) { + if o.Prefix != "" { + prefix = &o.Prefix + } + if o.MaxResults != 0 { + maxResults = &o.MaxResults + } + include = ListContainersIncludeType(o.Detail.string()) + return +} + +// ListContainersFlatDetail indicates what additional information the service should return with each container. +type ListContainersDetail struct { + // Tells the service whether to return metadata for each container. + Metadata bool +} + +// string produces the Include query parameter's value. +func (d *ListContainersDetail) string() string { + items := make([]string, 0, 1) + // NOTE: Multiple strings MUST be appended in alphabetic order or signing the string for authentication fails! + if d.Metadata { + items = append(items, string(ListContainersIncludeMetadata)) + } + if len(items) > 0 { + return strings.Join(items, ",") + } + return string(ListContainersIncludeNone) +} + +func (bsu ServiceURL) GetProperties(ctx context.Context) (*StorageServiceProperties, error) { + return bsu.client.GetProperties(ctx, nil, nil) +} + +func (bsu ServiceURL) SetProperties(ctx context.Context, properties StorageServiceProperties) (*ServiceSetPropertiesResponse, error) { + return bsu.client.SetProperties(ctx, properties, nil, nil) +} + +func (bsu ServiceURL) GetStatistics(ctx context.Context) (*StorageServiceStats, error) { + return bsu.client.GetStatistics(ctx, nil, nil) +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/user_delegation_credential.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/user_delegation_credential.go new file mode 100644 index 000000000..9fcbbc409 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/user_delegation_credential.go @@ -0,0 +1,38 @@ +package azblob + +import ( + "crypto/hmac" + "crypto/sha256" + "encoding/base64" +) + +// NewUserDelegationCredential creates a new UserDelegationCredential using a Storage account's name and a user delegation key from it +func NewUserDelegationCredential(accountName string, key UserDelegationKey) UserDelegationCredential { + return UserDelegationCredential{ + accountName: accountName, + accountKey: key, + } +} + +type UserDelegationCredential struct { + accountName string + accountKey UserDelegationKey +} + +// AccountName returns the Storage account's name +func (f UserDelegationCredential) AccountName() string { + return f.accountName +} + +// ComputeHMAC +func (f UserDelegationCredential) ComputeHMACSHA256(message string) (base64String string) { + bytes, _ := base64.StdEncoding.DecodeString(f.accountKey.Value) + h := hmac.New(sha256.New, bytes) + h.Write([]byte(message)) + return base64.StdEncoding.EncodeToString(h.Sum(nil)) +} + +// Private method to return important parameters for NewSASQueryParameters +func (f UserDelegationCredential) getUDKParams() *UserDelegationKey { + return &f.accountKey +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/version.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/version.go new file mode 100644 index 000000000..bcc7b956c --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/version.go @@ -0,0 +1,3 @@ +package azblob + +const serviceLibVersion = "0.7" diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_anonymous.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_anonymous.go new file mode 100644 index 000000000..a81987d54 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_anonymous.go @@ -0,0 +1,55 @@ +package azblob + +import ( + "context" + + "github.com/Azure/azure-pipeline-go/pipeline" +) + +// Credential represent any credential type; it is used to create a credential policy Factory. +type Credential interface { + pipeline.Factory + credentialMarker() +} + +type credentialFunc pipeline.FactoryFunc + +func (f credentialFunc) New(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.Policy { + return f(next, po) +} + +// credentialMarker is a package-internal method that exists just to satisfy the Credential interface. +func (credentialFunc) credentialMarker() {} + +////////////////////////////// + +// NewAnonymousCredential creates an anonymous credential for use with HTTP(S) requests that read public resource +// or for use with Shared Access Signatures (SAS). +func NewAnonymousCredential() Credential { + return anonymousCredentialFactory +} + +var anonymousCredentialFactory Credential = &anonymousCredentialPolicyFactory{} // Singleton + +// anonymousCredentialPolicyFactory is the credential's policy factory. +type anonymousCredentialPolicyFactory struct { +} + +// New creates a credential policy object. +func (f *anonymousCredentialPolicyFactory) New(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.Policy { + return &anonymousCredentialPolicy{next: next} +} + +// credentialMarker is a package-internal method that exists just to satisfy the Credential interface. +func (*anonymousCredentialPolicyFactory) credentialMarker() {} + +// anonymousCredentialPolicy is the credential's policy object. +type anonymousCredentialPolicy struct { + next pipeline.Policy +} + +// Do implements the credential's policy interface. +func (p anonymousCredentialPolicy) Do(ctx context.Context, request pipeline.Request) (pipeline.Response, error) { + // For anonymous credentials, this is effectively a no-op + return p.next.Do(ctx, request) +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_shared_key.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_shared_key.go new file mode 100644 index 000000000..3e27552f2 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_shared_key.go @@ -0,0 +1,205 @@ +package azblob + +import ( + "bytes" + "context" + "crypto/hmac" + "crypto/sha256" + "encoding/base64" + "errors" + "net/http" + "net/url" + "sort" + "strings" + "time" + + "github.com/Azure/azure-pipeline-go/pipeline" +) + +// NewSharedKeyCredential creates an immutable SharedKeyCredential containing the +// storage account's name and either its primary or secondary key. +func NewSharedKeyCredential(accountName, accountKey string) (*SharedKeyCredential, error) { + bytes, err := base64.StdEncoding.DecodeString(accountKey) + if err != nil { + return &SharedKeyCredential{}, err + } + return &SharedKeyCredential{accountName: accountName, accountKey: bytes}, nil +} + +// SharedKeyCredential contains an account's name and its primary or secondary key. +// It is immutable making it shareable and goroutine-safe. +type SharedKeyCredential struct { + // Only the NewSharedKeyCredential method should set these; all other methods should treat them as read-only + accountName string + accountKey []byte +} + +// AccountName returns the Storage account's name. +func (f SharedKeyCredential) AccountName() string { + return f.accountName +} + +func (f SharedKeyCredential) getAccountKey() []byte { + return f.accountKey +} + +// noop function to satisfy StorageAccountCredential interface +func (f SharedKeyCredential) getUDKParams() *UserDelegationKey { + return nil +} + +// New creates a credential policy object. +func (f *SharedKeyCredential) New(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.Policy { + return pipeline.PolicyFunc(func(ctx context.Context, request pipeline.Request) (pipeline.Response, error) { + // Add a x-ms-date header if it doesn't already exist + if d := request.Header.Get(headerXmsDate); d == "" { + request.Header[headerXmsDate] = []string{time.Now().UTC().Format(http.TimeFormat)} + } + stringToSign, err := f.buildStringToSign(request) + if err != nil { + return nil, err + } + signature := f.ComputeHMACSHA256(stringToSign) + authHeader := strings.Join([]string{"SharedKey ", f.accountName, ":", signature}, "") + request.Header[headerAuthorization] = []string{authHeader} + + response, err := next.Do(ctx, request) + if err != nil && response != nil && response.Response() != nil && response.Response().StatusCode == http.StatusForbidden { + // Service failed to authenticate request, log it + po.Log(pipeline.LogError, "===== HTTP Forbidden status, String-to-Sign:\n"+stringToSign+"\n===============================\n") + } + return response, err + }) +} + +// credentialMarker is a package-internal method that exists just to satisfy the Credential interface. +func (*SharedKeyCredential) credentialMarker() {} + +// Constants ensuring that header names are correctly spelled and consistently cased. +const ( + headerAuthorization = "Authorization" + headerCacheControl = "Cache-Control" + headerContentEncoding = "Content-Encoding" + headerContentDisposition = "Content-Disposition" + headerContentLanguage = "Content-Language" + headerContentLength = "Content-Length" + headerContentMD5 = "Content-MD5" + headerContentType = "Content-Type" + headerDate = "Date" + headerIfMatch = "If-Match" + headerIfModifiedSince = "If-Modified-Since" + headerIfNoneMatch = "If-None-Match" + headerIfUnmodifiedSince = "If-Unmodified-Since" + headerRange = "Range" + headerUserAgent = "User-Agent" + headerXmsDate = "x-ms-date" + headerXmsVersion = "x-ms-version" +) + +// ComputeHMACSHA256 generates a hash signature for an HTTP request or for a SAS. +func (f SharedKeyCredential) ComputeHMACSHA256(message string) (base64String string) { + h := hmac.New(sha256.New, f.accountKey) + h.Write([]byte(message)) + return base64.StdEncoding.EncodeToString(h.Sum(nil)) +} + +func (f *SharedKeyCredential) buildStringToSign(request pipeline.Request) (string, error) { + // https://docs.microsoft.com/en-us/rest/api/storageservices/authentication-for-the-azure-storage-services + headers := request.Header + contentLength := headers.Get(headerContentLength) + if contentLength == "0" { + contentLength = "" + } + + canonicalizedResource, err := f.buildCanonicalizedResource(request.URL) + if err != nil { + return "", err + } + + stringToSign := strings.Join([]string{ + request.Method, + headers.Get(headerContentEncoding), + headers.Get(headerContentLanguage), + contentLength, + headers.Get(headerContentMD5), + headers.Get(headerContentType), + "", // Empty date because x-ms-date is expected (as per web page above) + headers.Get(headerIfModifiedSince), + headers.Get(headerIfMatch), + headers.Get(headerIfNoneMatch), + headers.Get(headerIfUnmodifiedSince), + headers.Get(headerRange), + buildCanonicalizedHeader(headers), + canonicalizedResource, + }, "\n") + return stringToSign, nil +} + +func buildCanonicalizedHeader(headers http.Header) string { + cm := map[string][]string{} + for k, v := range headers { + headerName := strings.TrimSpace(strings.ToLower(k)) + if strings.HasPrefix(headerName, "x-ms-") { + cm[headerName] = v // NOTE: the value must not have any whitespace around it. + } + } + if len(cm) == 0 { + return "" + } + + keys := make([]string, 0, len(cm)) + for key := range cm { + keys = append(keys, key) + } + sort.Strings(keys) + ch := bytes.NewBufferString("") + for i, key := range keys { + if i > 0 { + ch.WriteRune('\n') + } + ch.WriteString(key) + ch.WriteRune(':') + ch.WriteString(strings.Join(cm[key], ",")) + } + return string(ch.Bytes()) +} + +func (f *SharedKeyCredential) buildCanonicalizedResource(u *url.URL) (string, error) { + // https://docs.microsoft.com/en-us/rest/api/storageservices/authentication-for-the-azure-storage-services + cr := bytes.NewBufferString("/") + cr.WriteString(f.accountName) + + if len(u.Path) > 0 { + // Any portion of the CanonicalizedResource string that is derived from + // the resource's URI should be encoded exactly as it is in the URI. + // -- https://msdn.microsoft.com/en-gb/library/azure/dd179428.aspx + cr.WriteString(u.EscapedPath()) + } else { + // a slash is required to indicate the root path + cr.WriteString("/") + } + + // params is a map[string][]string; param name is key; params values is []string + params, err := url.ParseQuery(u.RawQuery) // Returns URL decoded values + if err != nil { + return "", errors.New("parsing query parameters must succeed, otherwise there might be serious problems in the SDK/generated code") + } + + if len(params) > 0 { // There is at least 1 query parameter + paramNames := []string{} // We use this to sort the parameter key names + for paramName := range params { + paramNames = append(paramNames, paramName) // paramNames must be lowercase + } + sort.Strings(paramNames) + + for _, paramName := range paramNames { + paramValues := params[paramName] + sort.Strings(paramValues) + + // Join the sorted key values separated by ',' + // Then prepend "keyName:"; then add this string to the buffer + cr.WriteString("\n" + paramName + ":" + strings.Join(paramValues, ",")) + } + } + return string(cr.Bytes()), nil +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_token.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_token.go new file mode 100644 index 000000000..7e78d25f1 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_token.go @@ -0,0 +1,137 @@ +package azblob + +import ( + "context" + "errors" + "sync/atomic" + + "runtime" + "sync" + "time" + + "github.com/Azure/azure-pipeline-go/pipeline" +) + +// TokenRefresher represents a callback method that you write; this method is called periodically +// so you can refresh the token credential's value. +type TokenRefresher func(credential TokenCredential) time.Duration + +// TokenCredential represents a token credential (which is also a pipeline.Factory). +type TokenCredential interface { + Credential + Token() string + SetToken(newToken string) +} + +// NewTokenCredential creates a token credential for use with role-based access control (RBAC) access to Azure Storage +// resources. You initialize the TokenCredential with an initial token value. If you pass a non-nil value for +// tokenRefresher, then the function you pass will be called immediately so it can refresh and change the +// TokenCredential's token value by calling SetToken. Your tokenRefresher function must return a time.Duration +// indicating how long the TokenCredential object should wait before calling your tokenRefresher function again. +// If your tokenRefresher callback fails to refresh the token, you can return a duration of 0 to stop your +// TokenCredential object from ever invoking tokenRefresher again. Also, oen way to deal with failing to refresh a +// token is to cancel a context.Context object used by requests that have the TokenCredential object in their pipeline. +func NewTokenCredential(initialToken string, tokenRefresher TokenRefresher) TokenCredential { + tc := &tokenCredential{} + tc.SetToken(initialToken) // We don't set it above to guarantee atomicity + if tokenRefresher == nil { + return tc // If no callback specified, return the simple tokenCredential + } + + tcwr := &tokenCredentialWithRefresh{token: tc} + tcwr.token.startRefresh(tokenRefresher) + runtime.SetFinalizer(tcwr, func(deadTC *tokenCredentialWithRefresh) { + deadTC.token.stopRefresh() + deadTC.token = nil // Sanity (not really required) + }) + return tcwr +} + +// tokenCredentialWithRefresh is a wrapper over a token credential. +// When this wrapper object gets GC'd, it stops the tokenCredential's timer +// which allows the tokenCredential object to also be GC'd. +type tokenCredentialWithRefresh struct { + token *tokenCredential +} + +// credentialMarker is a package-internal method that exists just to satisfy the Credential interface. +func (*tokenCredentialWithRefresh) credentialMarker() {} + +// Token returns the current token value +func (f *tokenCredentialWithRefresh) Token() string { return f.token.Token() } + +// SetToken changes the current token value +func (f *tokenCredentialWithRefresh) SetToken(token string) { f.token.SetToken(token) } + +// New satisfies pipeline.Factory's New method creating a pipeline policy object. +func (f *tokenCredentialWithRefresh) New(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.Policy { + return f.token.New(next, po) +} + +/////////////////////////////////////////////////////////////////////////////// + +// tokenCredential is a pipeline.Factory is the credential's policy factory. +type tokenCredential struct { + token atomic.Value + + // The members below are only used if the user specified a tokenRefresher callback function. + timer *time.Timer + tokenRefresher TokenRefresher + lock sync.Mutex + stopped bool +} + +// credentialMarker is a package-internal method that exists just to satisfy the Credential interface. +func (*tokenCredential) credentialMarker() {} + +// Token returns the current token value +func (f *tokenCredential) Token() string { return f.token.Load().(string) } + +// SetToken changes the current token value +func (f *tokenCredential) SetToken(token string) { f.token.Store(token) } + +// startRefresh calls refresh which immediately calls tokenRefresher +// and then starts a timer to call tokenRefresher in the future. +func (f *tokenCredential) startRefresh(tokenRefresher TokenRefresher) { + f.tokenRefresher = tokenRefresher + f.stopped = false // In case user calls StartRefresh, StopRefresh, & then StartRefresh again + f.refresh() +} + +// refresh calls the user's tokenRefresher so they can refresh the token (by +// calling SetToken) and then starts another time (based on the returned duration) +// in order to refresh the token again in the future. +func (f *tokenCredential) refresh() { + d := f.tokenRefresher(f) // Invoke the user's refresh callback outside of the lock + if d > 0 { // If duration is 0 or negative, refresher wants to not be called again + f.lock.Lock() + if !f.stopped { + f.timer = time.AfterFunc(d, f.refresh) + } + f.lock.Unlock() + } +} + +// stopRefresh stops any pending timer and sets stopped field to true to prevent +// any new timer from starting. +// NOTE: Stopping the timer allows the GC to destroy the tokenCredential object. +func (f *tokenCredential) stopRefresh() { + f.lock.Lock() + f.stopped = true + if f.timer != nil { + f.timer.Stop() + } + f.lock.Unlock() +} + +// New satisfies pipeline.Factory's New method creating a pipeline policy object. +func (f *tokenCredential) New(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.Policy { + return pipeline.PolicyFunc(func(ctx context.Context, request pipeline.Request) (pipeline.Response, error) { + if request.URL.Scheme != "https" { + // HTTPS must be used, otherwise the tokens are at the risk of being exposed + return nil, errors.New("token credentials require a URL using the https protocol scheme") + } + request.Header[headerAuthorization] = []string{"Bearer " + f.Token()} + return next.Do(ctx, request) + }) +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_unix.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_unix.go new file mode 100644 index 000000000..3e8c7cba3 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_unix.go @@ -0,0 +1,27 @@ +// +build linux darwin freebsd openbsd netbsd dragonfly + +package azblob + +import ( + "os" + "syscall" +) + +type mmf []byte + +func newMMF(file *os.File, writable bool, offset int64, length int) (mmf, error) { + prot, flags := syscall.PROT_READ, syscall.MAP_SHARED // Assume read-only + if writable { + prot, flags = syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_SHARED + } + addr, err := syscall.Mmap(int(file.Fd()), offset, length, prot, flags) + return mmf(addr), err +} + +func (m *mmf) unmap() { + err := syscall.Munmap(*m) + *m = nil + if err != nil { + panic("if we are unable to unmap the memory-mapped file, there is serious concern for memory corruption") + } +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_windows.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_windows.go new file mode 100644 index 000000000..2743644e1 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_windows.go @@ -0,0 +1,38 @@ +package azblob + +import ( + "os" + "reflect" + "syscall" + "unsafe" +) + +type mmf []byte + +func newMMF(file *os.File, writable bool, offset int64, length int) (mmf, error) { + prot, access := uint32(syscall.PAGE_READONLY), uint32(syscall.FILE_MAP_READ) // Assume read-only + if writable { + prot, access = uint32(syscall.PAGE_READWRITE), uint32(syscall.FILE_MAP_WRITE) + } + hMMF, errno := syscall.CreateFileMapping(syscall.Handle(file.Fd()), nil, prot, uint32(int64(length)>>32), uint32(int64(length)&0xffffffff), nil) + if hMMF == 0 { + return nil, os.NewSyscallError("CreateFileMapping", errno) + } + defer syscall.CloseHandle(hMMF) + addr, errno := syscall.MapViewOfFile(hMMF, access, uint32(offset>>32), uint32(offset&0xffffffff), uintptr(length)) + m := mmf{} + h := (*reflect.SliceHeader)(unsafe.Pointer(&m)) + h.Data = addr + h.Len = length + h.Cap = h.Len + return m, nil +} + +func (m *mmf) unmap() { + addr := uintptr(unsafe.Pointer(&(([]byte)(*m)[0]))) + *m = mmf{} + err := syscall.UnmapViewOfFile(addr) + if err != nil { + panic("if we are unable to unmap the memory-mapped file, there is serious concern for memory corruption") + } +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_pipeline.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_pipeline.go new file mode 100644 index 000000000..7c249a298 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_pipeline.go @@ -0,0 +1,46 @@ +package azblob + +import ( + "github.com/Azure/azure-pipeline-go/pipeline" +) + +// PipelineOptions is used to configure a request policy pipeline's retry policy and logging. +type PipelineOptions struct { + // Log configures the pipeline's logging infrastructure indicating what information is logged and where. + Log pipeline.LogOptions + + // Retry configures the built-in retry policy behavior. + Retry RetryOptions + + // RequestLog configures the built-in request logging policy. + RequestLog RequestLogOptions + + // Telemetry configures the built-in telemetry policy behavior. + Telemetry TelemetryOptions + + // HTTPSender configures the sender of HTTP requests + HTTPSender pipeline.Factory +} + +// NewPipeline creates a Pipeline using the specified credentials and options. +func NewPipeline(c Credential, o PipelineOptions) pipeline.Pipeline { + // Closest to API goes first; closest to the wire goes last + f := []pipeline.Factory{ + NewTelemetryPolicyFactory(o.Telemetry), + NewUniqueRequestIDPolicyFactory(), + NewRetryPolicyFactory(o.Retry), + } + + if _, ok := c.(*anonymousCredentialPolicyFactory); !ok { + // For AnonymousCredential, we optimize out the policy factory since it doesn't do anything + // NOTE: The credential's policy factory must appear close to the wire so it can sign any + // changes made by other factories (like UniqueRequestIDPolicyFactory) + f = append(f, c) + } + f = append(f, + NewRequestLogPolicyFactory(o.RequestLog), + pipeline.MethodFactoryMarker()) // indicates at what stage in the pipeline the method factory is invoked + + + return pipeline.NewPipeline(f, pipeline.Options{HTTPSender: o.HTTPSender, Log: o.Log}) +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_request_log.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_request_log.go new file mode 100644 index 000000000..0a362ea8b --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_request_log.go @@ -0,0 +1,182 @@ +package azblob + +import ( + "bytes" + "context" + "fmt" + "net/http" + "net/url" + "runtime" + "strings" + "time" + + "github.com/Azure/azure-pipeline-go/pipeline" +) + +// RequestLogOptions configures the retry policy's behavior. +type RequestLogOptions struct { + // LogWarningIfTryOverThreshold logs a warning if a tried operation takes longer than the specified + // duration (-1=no logging; 0=default threshold). + LogWarningIfTryOverThreshold time.Duration +} + +func (o RequestLogOptions) defaults() RequestLogOptions { + if o.LogWarningIfTryOverThreshold == 0 { + // It would be good to relate this to https://azure.microsoft.com/en-us/support/legal/sla/storage/v1_2/ + // But this monitors the time to get the HTTP response; NOT the time to download the response body. + o.LogWarningIfTryOverThreshold = 3 * time.Second // Default to 3 seconds + } + return o +} + +// NewRequestLogPolicyFactory creates a RequestLogPolicyFactory object configured using the specified options. +func NewRequestLogPolicyFactory(o RequestLogOptions) pipeline.Factory { + o = o.defaults() // Force defaults to be calculated + return pipeline.FactoryFunc(func(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.PolicyFunc { + // These variables are per-policy; shared by multiple calls to Do + var try int32 + operationStart := time.Now() // If this is the 1st try, record the operation state time + return func(ctx context.Context, request pipeline.Request) (response pipeline.Response, err error) { + try++ // The first try is #1 (not #0) + + // Log the outgoing request as informational + if po.ShouldLog(pipeline.LogInfo) { + b := &bytes.Buffer{} + fmt.Fprintf(b, "==> OUTGOING REQUEST (Try=%d)\n", try) + pipeline.WriteRequestWithResponse(b, prepareRequestForLogging(request), nil, nil) + po.Log(pipeline.LogInfo, b.String()) + } + + // Set the time for this particular retry operation and then Do the operation. + tryStart := time.Now() + response, err = next.Do(ctx, request) // Make the request + tryEnd := time.Now() + tryDuration := tryEnd.Sub(tryStart) + opDuration := tryEnd.Sub(operationStart) + + logLevel, forceLog := pipeline.LogInfo, false // Default logging information + + // If the response took too long, we'll upgrade to warning. + if o.LogWarningIfTryOverThreshold > 0 && tryDuration > o.LogWarningIfTryOverThreshold { + // Log a warning if the try duration exceeded the specified threshold + logLevel, forceLog = pipeline.LogWarning, true + } + + if err == nil { // We got a response from the service + sc := response.Response().StatusCode + if ((sc >= 400 && sc <= 499) && sc != http.StatusNotFound && sc != http.StatusConflict && sc != http.StatusPreconditionFailed && sc != http.StatusRequestedRangeNotSatisfiable) || (sc >= 500 && sc <= 599) { + logLevel, forceLog = pipeline.LogError, true // Promote to Error any 4xx (except those listed is an error) or any 5xx + } else { + // For other status codes, we leave the level as is. + } + } else { // This error did not get an HTTP response from the service; upgrade the severity to Error + logLevel, forceLog = pipeline.LogError, true + } + + if shouldLog := po.ShouldLog(logLevel); forceLog || shouldLog { + // We're going to log this; build the string to log + b := &bytes.Buffer{} + slow := "" + if o.LogWarningIfTryOverThreshold > 0 && tryDuration > o.LogWarningIfTryOverThreshold { + slow = fmt.Sprintf("[SLOW >%v]", o.LogWarningIfTryOverThreshold) + } + fmt.Fprintf(b, "==> REQUEST/RESPONSE (Try=%d/%v%s, OpTime=%v) -- ", try, tryDuration, slow, opDuration) + if err != nil { // This HTTP request did not get a response from the service + fmt.Fprint(b, "REQUEST ERROR\n") + } else { + if logLevel == pipeline.LogError { + fmt.Fprint(b, "RESPONSE STATUS CODE ERROR\n") + } else { + fmt.Fprint(b, "RESPONSE SUCCESSFULLY RECEIVED\n") + } + } + + pipeline.WriteRequestWithResponse(b, prepareRequestForLogging(request), response.Response(), err) + if logLevel <= pipeline.LogError { + b.Write(stack()) // For errors (or lower levels), we append the stack trace (an expensive operation) + } + msg := b.String() + + if forceLog { + pipeline.ForceLog(logLevel, msg) + } + if shouldLog { + po.Log(logLevel, msg) + } + } + return response, err + } + }) +} + +// RedactSigQueryParam redacts the 'sig' query parameter in URL's raw query to protect secret. +func RedactSigQueryParam(rawQuery string) (bool, string) { + rawQuery = strings.ToLower(rawQuery) // lowercase the string so we can look for ?sig= and &sig= + sigFound := strings.Contains(rawQuery, "?sig=") + if !sigFound { + sigFound = strings.Contains(rawQuery, "&sig=") + if !sigFound { + return sigFound, rawQuery // [?|&]sig= not found; return same rawQuery passed in (no memory allocation) + } + } + // [?|&]sig= found, redact its value + values, _ := url.ParseQuery(rawQuery) + for name := range values { + if strings.EqualFold(name, "sig") { + values[name] = []string{"REDACTED"} + } + } + return sigFound, values.Encode() +} + +func prepareRequestForLogging(request pipeline.Request) *http.Request { + req := request + if sigFound, rawQuery := RedactSigQueryParam(req.URL.RawQuery); sigFound { + // Make copy so we don't destroy the query parameters we actually need to send in the request + req = request.Copy() + req.Request.URL.RawQuery = rawQuery + } + + return prepareRequestForServiceLogging(req) +} + +func stack() []byte { + buf := make([]byte, 1024) + for { + n := runtime.Stack(buf, false) + if n < len(buf) { + return buf[:n] + } + buf = make([]byte, 2*len(buf)) + } +} + +/////////////////////////////////////////////////////////////////////////////////////// +// Redact phase useful for blob and file service only. For other services, +// this method can directly return request.Request. +/////////////////////////////////////////////////////////////////////////////////////// +func prepareRequestForServiceLogging(request pipeline.Request) *http.Request { + req := request + if exist, key := doesHeaderExistCaseInsensitive(req.Header, xMsCopySourceHeader); exist { + req = request.Copy() + url, err := url.Parse(req.Header.Get(key)) + if err == nil { + if sigFound, rawQuery := RedactSigQueryParam(url.RawQuery); sigFound { + url.RawQuery = rawQuery + req.Header.Set(xMsCopySourceHeader, url.String()) + } + } + } + return req.Request +} + +const xMsCopySourceHeader = "x-ms-copy-source" + +func doesHeaderExistCaseInsensitive(header http.Header, key string) (bool, string) { + for keyInHeader := range header { + if strings.EqualFold(keyInHeader, key) { + return true, keyInHeader + } + } + return false, "" +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_retry.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_retry.go new file mode 100644 index 000000000..00531fee0 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_retry.go @@ -0,0 +1,412 @@ +package azblob + +import ( + "context" + "errors" + "io" + "io/ioutil" + "math/rand" + "net" + "net/http" + "strconv" + "strings" + "time" + + "github.com/Azure/azure-pipeline-go/pipeline" +) + +// RetryPolicy tells the pipeline what kind of retry policy to use. See the RetryPolicy* constants. +type RetryPolicy int32 + +const ( + // RetryPolicyExponential tells the pipeline to use an exponential back-off retry policy + RetryPolicyExponential RetryPolicy = 0 + + // RetryPolicyFixed tells the pipeline to use a fixed back-off retry policy + RetryPolicyFixed RetryPolicy = 1 +) + +// RetryOptions configures the retry policy's behavior. +type RetryOptions struct { + // Policy tells the pipeline what kind of retry policy to use. See the RetryPolicy* constants.\ + // A value of zero means that you accept our default policy. + Policy RetryPolicy + + // MaxTries specifies the maximum number of attempts an operation will be tried before producing an error (0=default). + // A value of zero means that you accept our default policy. A value of 1 means 1 try and no retries. + MaxTries int32 + + // TryTimeout indicates the maximum time allowed for any single try of an HTTP request. + // A value of zero means that you accept our default timeout. NOTE: When transferring large amounts + // of data, the default TryTimeout will probably not be sufficient. You should override this value + // based on the bandwidth available to the host machine and proximity to the Storage service. A good + // starting point may be something like (60 seconds per MB of anticipated-payload-size). + TryTimeout time.Duration + + // RetryDelay specifies the amount of delay to use before retrying an operation (0=default). + // When RetryPolicy is specified as RetryPolicyExponential, the delay increases exponentially + // with each retry up to a maximum specified by MaxRetryDelay. + // If you specify 0, then you must also specify 0 for MaxRetryDelay. + // If you specify RetryDelay, then you must also specify MaxRetryDelay, and MaxRetryDelay should be + // equal to or greater than RetryDelay. + RetryDelay time.Duration + + // MaxRetryDelay specifies the maximum delay allowed before retrying an operation (0=default). + // If you specify 0, then you must also specify 0 for RetryDelay. + MaxRetryDelay time.Duration + + // RetryReadsFromSecondaryHost specifies whether the retry policy should retry a read operation against another host. + // If RetryReadsFromSecondaryHost is "" (the default) then operations are not retried against another host. + // NOTE: Before setting this field, make sure you understand the issues around reading stale & potentially-inconsistent + // data at this webpage: https://docs.microsoft.com/en-us/azure/storage/common/storage-designing-ha-apps-with-ragrs + RetryReadsFromSecondaryHost string // Comment this our for non-Blob SDKs +} + +func (o RetryOptions) retryReadsFromSecondaryHost() string { + return o.RetryReadsFromSecondaryHost // This is for the Blob SDK only + //return "" // This is for non-blob SDKs +} + +func (o RetryOptions) defaults() RetryOptions { + // We assume the following: + // 1. o.Policy should either be RetryPolicyExponential or RetryPolicyFixed + // 2. o.MaxTries >= 0 + // 3. o.TryTimeout, o.RetryDelay, and o.MaxRetryDelay >=0 + // 4. o.RetryDelay <= o.MaxRetryDelay + // 5. Both o.RetryDelay and o.MaxRetryDelay must be 0 or neither can be 0 + + IfDefault := func(current *time.Duration, desired time.Duration) { + if *current == time.Duration(0) { + *current = desired + } + } + + // Set defaults if unspecified + if o.MaxTries == 0 { + o.MaxTries = 4 + } + switch o.Policy { + case RetryPolicyExponential: + IfDefault(&o.TryTimeout, 1*time.Minute) + IfDefault(&o.RetryDelay, 4*time.Second) + IfDefault(&o.MaxRetryDelay, 120*time.Second) + + case RetryPolicyFixed: + IfDefault(&o.TryTimeout, 1*time.Minute) + IfDefault(&o.RetryDelay, 30*time.Second) + IfDefault(&o.MaxRetryDelay, 120*time.Second) + } + return o +} + +func (o RetryOptions) calcDelay(try int32) time.Duration { // try is >=1; never 0 + pow := func(number int64, exponent int32) int64 { // pow is nested helper function + var result int64 = 1 + for n := int32(0); n < exponent; n++ { + result *= number + } + return result + } + + delay := time.Duration(0) + switch o.Policy { + case RetryPolicyExponential: + delay = time.Duration(pow(2, try-1)-1) * o.RetryDelay + + case RetryPolicyFixed: + if try > 1 { // Any try after the 1st uses the fixed delay + delay = o.RetryDelay + } + } + + // Introduce some jitter: [0.0, 1.0) / 2 = [0.0, 0.5) + 0.8 = [0.8, 1.3) + // For casts and rounding - be careful, as per https://github.com/golang/go/issues/20757 + delay = time.Duration(float32(delay) * (rand.Float32()/2 + 0.8)) // NOTE: We want math/rand; not crypto/rand + if delay > o.MaxRetryDelay { + delay = o.MaxRetryDelay + } + return delay +} + +// NewRetryPolicyFactory creates a RetryPolicyFactory object configured using the specified options. +func NewRetryPolicyFactory(o RetryOptions) pipeline.Factory { + o = o.defaults() // Force defaults to be calculated + return pipeline.FactoryFunc(func(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.PolicyFunc { + return func(ctx context.Context, request pipeline.Request) (response pipeline.Response, err error) { + // Before each try, we'll select either the primary or secondary URL. + primaryTry := int32(0) // This indicates how many tries we've attempted against the primary DC + + // We only consider retrying against a secondary if we have a read request (GET/HEAD) AND this policy has a Secondary URL it can use + considerSecondary := (request.Method == http.MethodGet || request.Method == http.MethodHead) && o.retryReadsFromSecondaryHost() != "" + + // Exponential retry algorithm: ((2 ^ attempt) - 1) * delay * random(0.8, 1.2) + // When to retry: connection failure or temporary/timeout. NOTE: StorageError considers HTTP 500/503 as temporary & is therefore retryable + // If using a secondary: + // Even tries go against primary; odd tries go against the secondary + // For a primary wait ((2 ^ primaryTries - 1) * delay * random(0.8, 1.2) + // If secondary gets a 404, don't fail, retry but future retries are only against the primary + // When retrying against a secondary, ignore the retry count and wait (.1 second * random(0.8, 1.2)) + for try := int32(1); try <= o.MaxTries; try++ { + logf("\n=====> Try=%d\n", try) + + // Determine which endpoint to try. It's primary if there is no secondary or if it is an add # attempt. + tryingPrimary := !considerSecondary || (try%2 == 1) + // Select the correct host and delay + if tryingPrimary { + primaryTry++ + delay := o.calcDelay(primaryTry) + logf("Primary try=%d, Delay=%v\n", primaryTry, delay) + time.Sleep(delay) // The 1st try returns 0 delay + } else { + // For casts and rounding - be careful, as per https://github.com/golang/go/issues/20757 + delay := time.Duration(float32(time.Second) * (rand.Float32()/2 + 0.8)) + logf("Secondary try=%d, Delay=%v\n", try-primaryTry, delay) + time.Sleep(delay) // Delay with some jitter before trying secondary + } + + // Clone the original request to ensure that each try starts with the original (unmutated) request. + requestCopy := request.Copy() + + // For each try, seek to the beginning of the Body stream. We do this even for the 1st try because + // the stream may not be at offset 0 when we first get it and we want the same behavior for the + // 1st try as for additional tries. + err = requestCopy.RewindBody() + if err != nil { + return nil, errors.New("we must be able to seek on the Body Stream, otherwise retries would cause data corruption") + } + + if !tryingPrimary { + requestCopy.URL.Host = o.retryReadsFromSecondaryHost() + requestCopy.Host = o.retryReadsFromSecondaryHost() + } + + // Set the server-side timeout query parameter "timeout=[seconds]" + timeout := int32(o.TryTimeout.Seconds()) // Max seconds per try + if deadline, ok := ctx.Deadline(); ok { // If user's ctx has a deadline, make the timeout the smaller of the two + t := int32(deadline.Sub(time.Now()).Seconds()) // Duration from now until user's ctx reaches its deadline + logf("MaxTryTimeout=%d secs, TimeTilDeadline=%d sec\n", timeout, t) + if t < timeout { + timeout = t + } + if timeout < 0 { + timeout = 0 // If timeout ever goes negative, set it to zero; this happen while debugging + } + logf("TryTimeout adjusted to=%d sec\n", timeout) + } + q := requestCopy.Request.URL.Query() + q.Set("timeout", strconv.Itoa(int(timeout+1))) // Add 1 to "round up" + requestCopy.Request.URL.RawQuery = q.Encode() + logf("Url=%s\n", requestCopy.Request.URL.String()) + + // Set the time for this particular retry operation and then Do the operation. + tryCtx, tryCancel := context.WithTimeout(ctx, time.Second*time.Duration(timeout)) + //requestCopy.Body = &deadlineExceededReadCloser{r: requestCopy.Request.Body} + response, err = next.Do(tryCtx, requestCopy) // Make the request + /*err = improveDeadlineExceeded(err) + if err == nil { + response.Response().Body = &deadlineExceededReadCloser{r: response.Response().Body} + }*/ + logf("Err=%v, response=%v\n", err, response) + + action := "" // This MUST get changed within the switch code below + switch { + case ctx.Err() != nil: + action = "NoRetry: Op timeout" + case !tryingPrimary && response != nil && response.Response() != nil && response.Response().StatusCode == http.StatusNotFound: + // If attempt was against the secondary & it returned a StatusNotFound (404), then + // the resource was not found. This may be due to replication delay. So, in this + // case, we'll never try the secondary again for this operation. + considerSecondary = false + action = "Retry: Secondary URL returned 404" + case err != nil: + // NOTE: Protocol Responder returns non-nil if REST API returns invalid status code for the invoked operation. + // Use ServiceCode to verify if the error is related to storage service-side, + // ServiceCode is set only when error related to storage service happened. + if stErr, ok := err.(StorageError); ok { + if stErr.Temporary() { + action = "Retry: StorageError with error service code and Temporary()" + } else if stErr.Response() != nil && isSuccessStatusCode(stErr.Response()) { // TODO: This is a temporarily work around, remove this after protocol layer fix the issue that net.Error is wrapped as storageError + action = "Retry: StorageError with success status code" + } else { + action = "NoRetry: StorageError not Temporary() and without retriable status code" + } + } else if netErr, ok := err.(net.Error); ok { + // Use non-retriable net.Error list, but not retriable list. + // As there are errors without Temporary() implementation, + // while need be retried, like 'connection reset by peer', 'transport connection broken' and etc. + // So the SDK do retry for most of the case, unless the error should not be retried for sure. + if !isNotRetriable(netErr) { + action = "Retry: net.Error and not in the non-retriable list" + } else { + action = "NoRetry: net.Error and in the non-retriable list" + } + } else { + action = "NoRetry: unrecognized error" + } + default: + action = "NoRetry: successful HTTP request" // no error + } + + logf("Action=%s\n", action) + // fmt.Println(action + "\n") // This is where we could log the retry operation; action is why we're retrying + if action[0] != 'R' { // Retry only if action starts with 'R' + if err != nil { + tryCancel() // If we're returning an error, cancel this current/last per-retry timeout context + } else { + // We wrap the last per-try context in a body and overwrite the Response's Body field with our wrapper. + // So, when the user closes the Body, the our per-try context gets closed too. + // Another option, is that the Last Policy do this wrapping for a per-retry context (not for the user's context) + if response == nil || response.Response() == nil { + // We do panic in the case response or response.Response() is nil, + // as for client, the response should not be nil if request is sent and the operations is executed successfully. + // Another option, is that execute the cancel function when response or response.Response() is nil, + // as in this case, current per-try has nothing to do in future. + return nil, errors.New("invalid state, response should not be nil when the operation is executed successfully") + } + response.Response().Body = &contextCancelReadCloser{cf: tryCancel, body: response.Response().Body} + } + break // Don't retry + } + if response != nil && response.Response() != nil && response.Response().Body != nil { + // If we're going to retry and we got a previous response, then flush its body to avoid leaking its TCP connection + body := response.Response().Body + io.Copy(ioutil.Discard, body) + body.Close() + } + // If retrying, cancel the current per-try timeout context + tryCancel() + } + return response, err // Not retryable or too many retries; return the last response/error + } + }) +} + +// contextCancelReadCloser helps to invoke context's cancelFunc properly when the ReadCloser is closed. +type contextCancelReadCloser struct { + cf context.CancelFunc + body io.ReadCloser +} + +func (rc *contextCancelReadCloser) Read(p []byte) (n int, err error) { + return rc.body.Read(p) +} + +func (rc *contextCancelReadCloser) Close() error { + err := rc.body.Close() + if rc.cf != nil { + rc.cf() + } + return err +} + +// isNotRetriable checks if the provided net.Error isn't retriable. +func isNotRetriable(errToParse net.Error) bool { + // No error, so this is NOT retriable. + if errToParse == nil { + return true + } + + // The error is either temporary or a timeout so it IS retriable (not not retriable). + if errToParse.Temporary() || errToParse.Timeout() { + return false + } + + genericErr := error(errToParse) + + // From here all the error are neither Temporary() nor Timeout(). + switch err := errToParse.(type) { + case *net.OpError: + // The net.Error is also a net.OpError but the inner error is nil, so this is not retriable. + if err.Err == nil { + return true + } + genericErr = err.Err + } + + switch genericErr.(type) { + case *net.AddrError, net.UnknownNetworkError, *net.DNSError, net.InvalidAddrError, *net.ParseError, *net.DNSConfigError: + // If the error is one of the ones listed, then it is NOT retriable. + return true + } + + // If it's invalid header field name/value error thrown by http module, then it is NOT retriable. + // This could happen when metadata's key or value is invalid. (RoundTrip in transport.go) + if strings.Contains(genericErr.Error(), "invalid header field") { + return true + } + + // Assume the error is retriable. + return false +} + +var successStatusCodes = []int{http.StatusOK, http.StatusCreated, http.StatusAccepted, http.StatusNoContent, http.StatusPartialContent} + +func isSuccessStatusCode(resp *http.Response) bool { + if resp == nil { + return false + } + for _, i := range successStatusCodes { + if i == resp.StatusCode { + return true + } + } + return false +} + +// According to https://github.com/golang/go/wiki/CompilerOptimizations, the compiler will inline this method and hopefully optimize all calls to it away +var logf = func(format string, a ...interface{}) {} + +// Use this version to see the retry method's code path (import "fmt") +//var logf = fmt.Printf + +/* +type deadlineExceededReadCloser struct { + r io.ReadCloser +} + +func (r *deadlineExceededReadCloser) Read(p []byte) (int, error) { + n, err := 0, io.EOF + if r.r != nil { + n, err = r.r.Read(p) + } + return n, improveDeadlineExceeded(err) +} +func (r *deadlineExceededReadCloser) Seek(offset int64, whence int) (int64, error) { + // For an HTTP request, the ReadCloser MUST also implement seek + // For an HTTP response, Seek MUST not be called (or this will panic) + o, err := r.r.(io.Seeker).Seek(offset, whence) + return o, improveDeadlineExceeded(err) +} +func (r *deadlineExceededReadCloser) Close() error { + if c, ok := r.r.(io.Closer); ok { + c.Close() + } + return nil +} + +// timeoutError is the internal struct that implements our richer timeout error. +type deadlineExceeded struct { + responseError +} + +var _ net.Error = (*deadlineExceeded)(nil) // Ensure deadlineExceeded implements the net.Error interface at compile time + +// improveDeadlineExceeded creates a timeoutError object that implements the error interface IF cause is a context.DeadlineExceeded error. +func improveDeadlineExceeded(cause error) error { + // If cause is not DeadlineExceeded, return the same error passed in. + if cause != context.DeadlineExceeded { + return cause + } + // Else, convert DeadlineExceeded to our timeoutError which gives a richer string message + return &deadlineExceeded{ + responseError: responseError{ + ErrorNode: pipeline.ErrorNode{}.Initialize(cause, 3), + }, + } +} + +// Error implements the error interface's Error method to return a string representation of the error. +func (e *deadlineExceeded) Error() string { + return e.ErrorNode.Error("context deadline exceeded; when creating a pipeline, consider increasing RetryOptions' TryTimeout field") +} +*/ diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_telemetry.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_telemetry.go new file mode 100644 index 000000000..608e1051c --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_telemetry.go @@ -0,0 +1,51 @@ +package azblob + +import ( + "bytes" + "context" + "fmt" + "os" + "runtime" + + "github.com/Azure/azure-pipeline-go/pipeline" +) + +// TelemetryOptions configures the telemetry policy's behavior. +type TelemetryOptions struct { + // Value is a string prepended to each request's User-Agent and sent to the service. + // The service records the user-agent in logs for diagnostics and tracking of client requests. + Value string +} + +// NewTelemetryPolicyFactory creates a factory that can create telemetry policy objects +// which add telemetry information to outgoing HTTP requests. +func NewTelemetryPolicyFactory(o TelemetryOptions) pipeline.Factory { + b := &bytes.Buffer{} + b.WriteString(o.Value) + if b.Len() > 0 { + b.WriteRune(' ') + } + fmt.Fprintf(b, "Azure-Storage/%s %s", serviceLibVersion, platformInfo) + telemetryValue := b.String() + + return pipeline.FactoryFunc(func(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.PolicyFunc { + return func(ctx context.Context, request pipeline.Request) (pipeline.Response, error) { + request.Header.Set("User-Agent", telemetryValue) + return next.Do(ctx, request) + } + }) +} + +// NOTE: the ONLY function that should write to this variable is this func +var platformInfo = func() string { + // Azure-Storage/version (runtime; os type and version)” + // Azure-Storage/1.4.0 (NODE-VERSION v4.5.0; Windows_NT 10.0.14393)' + operatingSystem := runtime.GOOS // Default OS string + switch operatingSystem { + case "windows": + operatingSystem = os.Getenv("OS") // Get more specific OS information + case "linux": // accept default OS info + case "freebsd": // accept default OS info + } + return fmt.Sprintf("(%s; %s)", runtime.Version(), operatingSystem) +}() diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_unique_request_id.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_unique_request_id.go new file mode 100644 index 000000000..a75c7d1d2 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_unique_request_id.go @@ -0,0 +1,24 @@ +package azblob + +import ( + "context" + + "github.com/Azure/azure-pipeline-go/pipeline" +) + +// NewUniqueRequestIDPolicyFactory creates a UniqueRequestIDPolicyFactory object +// that sets the request's x-ms-client-request-id header if it doesn't already exist. +func NewUniqueRequestIDPolicyFactory() pipeline.Factory { + return pipeline.FactoryFunc(func(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.PolicyFunc { + // This is Policy's Do method: + return func(ctx context.Context, request pipeline.Request) (pipeline.Response, error) { + id := request.Header.Get(xMsClientRequestID) + if id == "" { // Add a unique request ID if the caller didn't specify one already + request.Header.Set(xMsClientRequestID, newUUID().String()) + } + return next.Do(ctx, request) + } + }) +} + +const xMsClientRequestID = "x-ms-client-request-id" diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_retry_reader.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_retry_reader.go new file mode 100644 index 000000000..3247aca66 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_retry_reader.go @@ -0,0 +1,178 @@ +package azblob + +import ( + "context" + "io" + "net" + "net/http" + "strings" + "sync" +) + +const CountToEnd = 0 + +// HTTPGetter is a function type that refers to a method that performs an HTTP GET operation. +type HTTPGetter func(ctx context.Context, i HTTPGetterInfo) (*http.Response, error) + +// HTTPGetterInfo is passed to an HTTPGetter function passing it parameters +// that should be used to make an HTTP GET request. +type HTTPGetterInfo struct { + // Offset specifies the start offset that should be used when + // creating the HTTP GET request's Range header + Offset int64 + + // Count specifies the count of bytes that should be used to calculate + // the end offset when creating the HTTP GET request's Range header + Count int64 + + // ETag specifies the resource's etag that should be used when creating + // the HTTP GET request's If-Match header + ETag ETag +} + +// FailedReadNotifier is a function type that represents the notification function called when a read fails +type FailedReadNotifier func(failureCount int, lastError error, offset int64, count int64, willRetry bool) + +// RetryReaderOptions contains properties which can help to decide when to do retry. +type RetryReaderOptions struct { + // MaxRetryRequests specifies the maximum number of HTTP GET requests that will be made + // while reading from a RetryReader. A value of zero means that no additional HTTP + // GET requests will be made. + MaxRetryRequests int + doInjectError bool + doInjectErrorRound int + + // NotifyFailedRead is called, if non-nil, after any failure to read. Expected usage is diagnostic logging. + NotifyFailedRead FailedReadNotifier + + // TreatEarlyCloseAsError can be set to true to prevent retries after "read on closed response body". By default, + // retryReader has the following special behaviour: closing the response body before it is all read is treated as a + // retryable error. This is to allow callers to force a retry by closing the body from another goroutine (e.g. if the = + // read is too slow, caller may want to force a retry in the hope that the retry will be quicker). If + // TreatEarlyCloseAsError is true, then retryReader's special behaviour is suppressed, and "read on closed body" is instead + // treated as a fatal (non-retryable) error. + // Note that setting TreatEarlyCloseAsError only guarantees that Closing will produce a fatal error if the Close happens + // from the same "thread" (goroutine) as Read. Concurrent Close calls from other goroutines may instead produce network errors + // which will be retried. + TreatEarlyCloseAsError bool +} + +// retryReader implements io.ReaderCloser methods. +// retryReader tries to read from response, and if there is retriable network error +// returned during reading, it will retry according to retry reader option through executing +// user defined action with provided data to get a new response, and continue the overall reading process +// through reading from the new response. +type retryReader struct { + ctx context.Context + info HTTPGetterInfo + countWasBounded bool + o RetryReaderOptions + getter HTTPGetter + + // we support Close-ing during Reads (from other goroutines), so we protect the shared state, which is response + responseMu *sync.Mutex + response *http.Response +} + +// NewRetryReader creates a retry reader. +func NewRetryReader(ctx context.Context, initialResponse *http.Response, + info HTTPGetterInfo, o RetryReaderOptions, getter HTTPGetter) io.ReadCloser { + return &retryReader{ + ctx: ctx, + getter: getter, + info: info, + countWasBounded: info.Count != CountToEnd, + response: initialResponse, + responseMu: &sync.Mutex{}, + o: o} +} + +func (s *retryReader) setResponse(r *http.Response) { + s.responseMu.Lock() + defer s.responseMu.Unlock() + s.response = r +} + +func (s *retryReader) Read(p []byte) (n int, err error) { + for try := 0; ; try++ { + //fmt.Println(try) // Comment out for debugging. + if s.countWasBounded && s.info.Count == CountToEnd { + // User specified an original count and the remaining bytes are 0, return 0, EOF + return 0, io.EOF + } + + s.responseMu.Lock() + resp := s.response + s.responseMu.Unlock() + if resp == nil { // We don't have a response stream to read from, try to get one. + newResponse, err := s.getter(s.ctx, s.info) + if err != nil { + return 0, err + } + // Successful GET; this is the network stream we'll read from. + s.setResponse(newResponse) + resp = newResponse + } + n, err := resp.Body.Read(p) // Read from the stream (this will return non-nil err if forceRetry is called, from another goroutine, while it is running) + + // Injection mechanism for testing. + if s.o.doInjectError && try == s.o.doInjectErrorRound { + err = &net.DNSError{IsTemporary: true} + } + + // We successfully read data or end EOF. + if err == nil || err == io.EOF { + s.info.Offset += int64(n) // Increments the start offset in case we need to make a new HTTP request in the future + if s.info.Count != CountToEnd { + s.info.Count -= int64(n) // Decrement the count in case we need to make a new HTTP request in the future + } + return n, err // Return the return to the caller + } + s.Close() // Error, close stream + s.setResponse(nil) // Our stream is no longer good + + // Check the retry count and error code, and decide whether to retry. + retriesExhausted := try >= s.o.MaxRetryRequests + _, isNetError := err.(net.Error) + willRetry := (isNetError || s.wasRetryableEarlyClose(err)) && !retriesExhausted + + // Notify, for logging purposes, of any failures + if s.o.NotifyFailedRead != nil { + failureCount := try + 1 // because try is zero-based + s.o.NotifyFailedRead(failureCount, err, s.info.Offset, s.info.Count, willRetry) + } + + if willRetry { + continue + // Loop around and try to get and read from new stream. + } + return n, err // Not retryable, or retries exhausted, so just return + } +} + +// By default, we allow early Closing, from another concurrent goroutine, to be used to force a retry +// Is this safe, to close early from another goroutine? Early close ultimately ends up calling +// net.Conn.Close, and that is documented as "Any blocked Read or Write operations will be unblocked and return errors" +// which is exactly the behaviour we want. +// NOTE: that if caller has forced an early Close from a separate goroutine (separate from the Read) +// then there are two different types of error that may happen - either the one one we check for here, +// or a net.Error (due to closure of connection). Which one happens depends on timing. We only need this routine +// to check for one, since the other is a net.Error, which our main Read retry loop is already handing. +func (s *retryReader) wasRetryableEarlyClose(err error) bool { + if s.o.TreatEarlyCloseAsError { + return false // user wants all early closes to be errors, and so not retryable + } + // unfortunately, http.errReadOnClosedResBody is private, so the best we can do here is to check for its text + return strings.HasSuffix(err.Error(), ReadOnClosedBodyMessage) +} + +const ReadOnClosedBodyMessage = "read on closed response body" + +func (s *retryReader) Close() error { + s.responseMu.Lock() + defer s.responseMu.Unlock() + if s.response != nil && s.response.Body != nil { + return s.response.Body.Close() + } + return nil +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_account.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_account.go new file mode 100644 index 000000000..c000c48ec --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_account.go @@ -0,0 +1,219 @@ +package azblob + +import ( + "bytes" + "errors" + "fmt" + "strings" + "time" +) + +// AccountSASSignatureValues is used to generate a Shared Access Signature (SAS) for an Azure Storage account. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/constructing-an-account-sas +type AccountSASSignatureValues struct { + Version string `param:"sv"` // If not specified, this defaults to SASVersion + Protocol SASProtocol `param:"spr"` // See the SASProtocol* constants + StartTime time.Time `param:"st"` // Not specified if IsZero + ExpiryTime time.Time `param:"se"` // Not specified if IsZero + Permissions string `param:"sp"` // Create by initializing a AccountSASPermissions and then call String() + IPRange IPRange `param:"sip"` + Services string `param:"ss"` // Create by initializing AccountSASServices and then call String() + ResourceTypes string `param:"srt"` // Create by initializing AccountSASResourceTypes and then call String() +} + +// NewSASQueryParameters uses an account's shared key credential to sign this signature values to produce +// the proper SAS query parameters. +func (v AccountSASSignatureValues) NewSASQueryParameters(sharedKeyCredential *SharedKeyCredential) (SASQueryParameters, error) { + // https://docs.microsoft.com/en-us/rest/api/storageservices/Constructing-an-Account-SAS + if v.ExpiryTime.IsZero() || v.Permissions == "" || v.ResourceTypes == "" || v.Services == "" { + return SASQueryParameters{}, errors.New("account SAS is missing at least one of these: ExpiryTime, Permissions, Service, or ResourceType") + } + if v.Version == "" { + v.Version = SASVersion + } + perms := &AccountSASPermissions{} + if err := perms.Parse(v.Permissions); err != nil { + return SASQueryParameters{}, err + } + v.Permissions = perms.String() + + startTime, expiryTime, _ := FormatTimesForSASSigning(v.StartTime, v.ExpiryTime, time.Time{}) + + stringToSign := strings.Join([]string{ + sharedKeyCredential.AccountName(), + v.Permissions, + v.Services, + v.ResourceTypes, + startTime, + expiryTime, + v.IPRange.String(), + string(v.Protocol), + v.Version, + ""}, // That right, the account SAS requires a terminating extra newline + "\n") + + signature := sharedKeyCredential.ComputeHMACSHA256(stringToSign) + p := SASQueryParameters{ + // Common SAS parameters + version: v.Version, + protocol: v.Protocol, + startTime: v.StartTime, + expiryTime: v.ExpiryTime, + permissions: v.Permissions, + ipRange: v.IPRange, + + // Account-specific SAS parameters + services: v.Services, + resourceTypes: v.ResourceTypes, + + // Calculated SAS signature + signature: signature, + } + + return p, nil +} + +// The AccountSASPermissions type simplifies creating the permissions string for an Azure Storage Account SAS. +// Initialize an instance of this type and then call its String method to set AccountSASSignatureValues's Permissions field. +type AccountSASPermissions struct { + Read, Write, Delete, List, Add, Create, Update, Process bool +} + +// String produces the SAS permissions string for an Azure Storage account. +// Call this method to set AccountSASSignatureValues's Permissions field. +func (p AccountSASPermissions) String() string { + var buffer bytes.Buffer + if p.Read { + buffer.WriteRune('r') + } + if p.Write { + buffer.WriteRune('w') + } + if p.Delete { + buffer.WriteRune('d') + } + if p.List { + buffer.WriteRune('l') + } + if p.Add { + buffer.WriteRune('a') + } + if p.Create { + buffer.WriteRune('c') + } + if p.Update { + buffer.WriteRune('u') + } + if p.Process { + buffer.WriteRune('p') + } + return buffer.String() +} + +// Parse initializes the AccountSASPermissions's fields from a string. +func (p *AccountSASPermissions) Parse(s string) error { + *p = AccountSASPermissions{} // Clear out the flags + for _, r := range s { + switch r { + case 'r': + p.Read = true + case 'w': + p.Write = true + case 'd': + p.Delete = true + case 'l': + p.List = true + case 'a': + p.Add = true + case 'c': + p.Create = true + case 'u': + p.Update = true + case 'p': + p.Process = true + default: + return fmt.Errorf("Invalid permission character: '%v'", r) + } + } + return nil +} + +// The AccountSASServices type simplifies creating the services string for an Azure Storage Account SAS. +// Initialize an instance of this type and then call its String method to set AccountSASSignatureValues's Services field. +type AccountSASServices struct { + Blob, Queue, File bool +} + +// String produces the SAS services string for an Azure Storage account. +// Call this method to set AccountSASSignatureValues's Services field. +func (s AccountSASServices) String() string { + var buffer bytes.Buffer + if s.Blob { + buffer.WriteRune('b') + } + if s.Queue { + buffer.WriteRune('q') + } + if s.File { + buffer.WriteRune('f') + } + return buffer.String() +} + +// Parse initializes the AccountSASServices' fields from a string. +func (a *AccountSASServices) Parse(s string) error { + *a = AccountSASServices{} // Clear out the flags + for _, r := range s { + switch r { + case 'b': + a.Blob = true + case 'q': + a.Queue = true + case 'f': + a.File = true + default: + return fmt.Errorf("Invalid service character: '%v'", r) + } + } + return nil +} + +// The AccountSASResourceTypes type simplifies creating the resource types string for an Azure Storage Account SAS. +// Initialize an instance of this type and then call its String method to set AccountSASSignatureValues's ResourceTypes field. +type AccountSASResourceTypes struct { + Service, Container, Object bool +} + +// String produces the SAS resource types string for an Azure Storage account. +// Call this method to set AccountSASSignatureValues's ResourceTypes field. +func (rt AccountSASResourceTypes) String() string { + var buffer bytes.Buffer + if rt.Service { + buffer.WriteRune('s') + } + if rt.Container { + buffer.WriteRune('c') + } + if rt.Object { + buffer.WriteRune('o') + } + return buffer.String() +} + +// Parse initializes the AccountSASResourceType's fields from a string. +func (rt *AccountSASResourceTypes) Parse(s string) error { + *rt = AccountSASResourceTypes{} // Clear out the flags + for _, r := range s { + switch r { + case 's': + rt.Service = true + case 'c': + rt.Container = true + case 'o': + rt.Object = true + default: + return fmt.Errorf("Invalid resource type: '%v'", r) + } + } + return nil +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_query_params.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_query_params.go new file mode 100644 index 000000000..11b1b2ba0 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_query_params.go @@ -0,0 +1,322 @@ +package azblob + +import ( + "net" + "net/url" + "strings" + "time" +) + +// SASVersion indicates the SAS version. +const SASVersion = ServiceVersion + +type SASProtocol string + +const ( + // SASProtocolHTTPS can be specified for a SAS protocol + SASProtocolHTTPS SASProtocol = "https" + + // SASProtocolHTTPSandHTTP can be specified for a SAS protocol + SASProtocolHTTPSandHTTP SASProtocol = "https,http" +) + +// FormatTimesForSASSigning converts a time.Time to a snapshotTimeFormat string suitable for a +// SASField's StartTime or ExpiryTime fields. Returns "" if value.IsZero(). +func FormatTimesForSASSigning(startTime, expiryTime, snapshotTime time.Time) (string, string, string) { + ss := "" + if !startTime.IsZero() { + ss = startTime.Format(SASTimeFormat) // "yyyy-MM-ddTHH:mm:ssZ" + } + se := "" + if !expiryTime.IsZero() { + se = expiryTime.Format(SASTimeFormat) // "yyyy-MM-ddTHH:mm:ssZ" + } + sh := "" + if !snapshotTime.IsZero() { + sh = snapshotTime.Format(SnapshotTimeFormat) + } + return ss, se, sh +} + +// SASTimeFormat represents the format of a SAS start or expiry time. Use it when formatting/parsing a time.Time. +const SASTimeFormat = "2006-01-02T15:04:05Z" //"2017-07-27T00:00:00Z" // ISO 8601 + +// https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas + +// A SASQueryParameters object represents the components that make up an Azure Storage SAS' query parameters. +// You parse a map of query parameters into its fields by calling NewSASQueryParameters(). You add the components +// to a query parameter map by calling AddToValues(). +// NOTE: Changing any field requires computing a new SAS signature using a XxxSASSignatureValues type. +// +// This type defines the components used by all Azure Storage resources (Containers, Blobs, Files, & Queues). +type SASQueryParameters struct { + // All members are immutable or values so copies of this struct are goroutine-safe. + version string `param:"sv"` + services string `param:"ss"` + resourceTypes string `param:"srt"` + protocol SASProtocol `param:"spr"` + startTime time.Time `param:"st"` + expiryTime time.Time `param:"se"` + snapshotTime time.Time `param:"snapshot"` + ipRange IPRange `param:"sip"` + identifier string `param:"si"` + resource string `param:"sr"` + permissions string `param:"sp"` + signature string `param:"sig"` + cacheControl string `param:"rscc"` + contentDisposition string `param:"rscd"` + contentEncoding string `param:"rsce"` + contentLanguage string `param:"rscl"` + contentType string `param:"rsct"` + signedOid string `param:"skoid"` + signedTid string `param:"sktid"` + signedStart time.Time `param:"skt"` + signedExpiry time.Time `param:"ske"` + signedService string `param:"sks"` + signedVersion string `param:"skv"` +} + +func (p *SASQueryParameters) SignedOid() string { + return p.signedOid +} + +func (p *SASQueryParameters) SignedTid() string { + return p.signedTid +} + +func (p *SASQueryParameters) SignedStart() time.Time { + return p.signedStart +} + +func (p *SASQueryParameters) SignedExpiry() time.Time { + return p.signedExpiry +} + +func (p *SASQueryParameters) SignedService() string { + return p.signedService +} + +func (p *SASQueryParameters) SignedVersion() string { + return p.signedVersion +} + +func (p *SASQueryParameters) SnapshotTime() time.Time { + return p.snapshotTime +} + +func (p *SASQueryParameters) Version() string { + return p.version +} + +func (p *SASQueryParameters) Services() string { + return p.services +} +func (p *SASQueryParameters) ResourceTypes() string { + return p.resourceTypes +} +func (p *SASQueryParameters) Protocol() SASProtocol { + return p.protocol +} +func (p *SASQueryParameters) StartTime() time.Time { + return p.startTime +} +func (p *SASQueryParameters) ExpiryTime() time.Time { + return p.expiryTime +} + +func (p *SASQueryParameters) IPRange() IPRange { + return p.ipRange +} + +func (p *SASQueryParameters) Identifier() string { + return p.identifier +} + +func (p *SASQueryParameters) Resource() string { + return p.resource +} +func (p *SASQueryParameters) Permissions() string { + return p.permissions +} + +func (p *SASQueryParameters) Signature() string { + return p.signature +} + +func (p *SASQueryParameters) CacheControl() string { + return p.cacheControl +} + +func (p *SASQueryParameters) ContentDisposition() string { + return p.contentDisposition +} + +func (p *SASQueryParameters) ContentEncoding() string { + return p.contentEncoding +} + +func (p *SASQueryParameters) ContentLanguage() string { + return p.contentLanguage +} + +func (p *SASQueryParameters) ContentType() string { + return p.contentType +} + +// IPRange represents a SAS IP range's start IP and (optionally) end IP. +type IPRange struct { + Start net.IP // Not specified if length = 0 + End net.IP // Not specified if length = 0 +} + +// String returns a string representation of an IPRange. +func (ipr *IPRange) String() string { + if len(ipr.Start) == 0 { + return "" + } + start := ipr.Start.String() + if len(ipr.End) == 0 { + return start + } + return start + "-" + ipr.End.String() +} + +// NewSASQueryParameters creates and initializes a SASQueryParameters object based on the +// query parameter map's passed-in values. If deleteSASParametersFromValues is true, +// all SAS-related query parameters are removed from the passed-in map. If +// deleteSASParametersFromValues is false, the map passed-in map is unaltered. +func newSASQueryParameters(values url.Values, deleteSASParametersFromValues bool) SASQueryParameters { + p := SASQueryParameters{} + for k, v := range values { + val := v[0] + isSASKey := true + switch strings.ToLower(k) { + case "sv": + p.version = val + case "ss": + p.services = val + case "srt": + p.resourceTypes = val + case "spr": + p.protocol = SASProtocol(val) + case "snapshot": + p.snapshotTime, _ = time.Parse(SnapshotTimeFormat, val) + case "st": + p.startTime, _ = time.Parse(SASTimeFormat, val) + case "se": + p.expiryTime, _ = time.Parse(SASTimeFormat, val) + case "sip": + dashIndex := strings.Index(val, "-") + if dashIndex == -1 { + p.ipRange.Start = net.ParseIP(val) + } else { + p.ipRange.Start = net.ParseIP(val[:dashIndex]) + p.ipRange.End = net.ParseIP(val[dashIndex+1:]) + } + case "si": + p.identifier = val + case "sr": + p.resource = val + case "sp": + p.permissions = val + case "sig": + p.signature = val + case "rscc": + p.cacheControl = val + case "rscd": + p.contentDisposition = val + case "rsce": + p.contentEncoding = val + case "rscl": + p.contentLanguage = val + case "rsct": + p.contentType = val + case "skoid": + p.signedOid = val + case "sktid": + p.signedTid = val + case "skt": + p.signedStart, _ = time.Parse(SASTimeFormat, val) + case "ske": + p.signedExpiry, _ = time.Parse(SASTimeFormat, val) + case "sks": + p.signedService = val + case "skv": + p.signedVersion = val + default: + isSASKey = false // We didn't recognize the query parameter + } + if isSASKey && deleteSASParametersFromValues { + delete(values, k) + } + } + return p +} + +// AddToValues adds the SAS components to the specified query parameters map. +func (p *SASQueryParameters) addToValues(v url.Values) url.Values { + if p.version != "" { + v.Add("sv", p.version) + } + if p.services != "" { + v.Add("ss", p.services) + } + if p.resourceTypes != "" { + v.Add("srt", p.resourceTypes) + } + if p.protocol != "" { + v.Add("spr", string(p.protocol)) + } + if !p.startTime.IsZero() { + v.Add("st", p.startTime.Format(SASTimeFormat)) + } + if !p.expiryTime.IsZero() { + v.Add("se", p.expiryTime.Format(SASTimeFormat)) + } + if len(p.ipRange.Start) > 0 { + v.Add("sip", p.ipRange.String()) + } + if p.identifier != "" { + v.Add("si", p.identifier) + } + if p.resource != "" { + v.Add("sr", p.resource) + } + if p.permissions != "" { + v.Add("sp", p.permissions) + } + if p.signedOid != "" { + v.Add("skoid", p.signedOid) + v.Add("sktid", p.signedTid) + v.Add("skt", p.signedStart.Format(SASTimeFormat)) + v.Add("ske", p.signedExpiry.Format(SASTimeFormat)) + v.Add("sks", p.signedService) + v.Add("skv", p.signedVersion) + } + if p.signature != "" { + v.Add("sig", p.signature) + } + if p.cacheControl != "" { + v.Add("rscc", p.cacheControl) + } + if p.contentDisposition != "" { + v.Add("rscd", p.contentDisposition) + } + if p.contentEncoding != "" { + v.Add("rsce", p.contentEncoding) + } + if p.contentLanguage != "" { + v.Add("rscl", p.contentLanguage) + } + if p.contentType != "" { + v.Add("rsct", p.contentType) + } + return v +} + +// Encode encodes the SAS query parameters into URL encoded form sorted by key. +func (p *SASQueryParameters) Encode() string { + v := url.Values{} + p.addToValues(v) + return v.Encode() +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_service_codes_common.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_service_codes_common.go new file mode 100644 index 000000000..765beb241 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_service_codes_common.go @@ -0,0 +1,131 @@ +package azblob + +// https://docs.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes + +const ( + // ServiceCodeNone is the default value. It indicates that the error was related to the service or that the service didn't return a code. + ServiceCodeNone ServiceCodeType = "" + + // ServiceCodeAccountAlreadyExists means the specified account already exists. + ServiceCodeAccountAlreadyExists ServiceCodeType = "AccountAlreadyExists" + + // ServiceCodeAccountBeingCreated means the specified account is in the process of being created (403). + ServiceCodeAccountBeingCreated ServiceCodeType = "AccountBeingCreated" + + // ServiceCodeAccountIsDisabled means the specified account is disabled (403). + ServiceCodeAccountIsDisabled ServiceCodeType = "AccountIsDisabled" + + // ServiceCodeAuthenticationFailed means the server failed to authenticate the request. Make sure the value of the Authorization header is formed correctly including the signature (403). + ServiceCodeAuthenticationFailed ServiceCodeType = "AuthenticationFailed" + + // ServiceCodeConditionHeadersNotSupported means the condition headers are not supported (400). + ServiceCodeConditionHeadersNotSupported ServiceCodeType = "ConditionHeadersNotSupported" + + // ServiceCodeConditionNotMet means the condition specified in the conditional header(s) was not met for a read/write operation (304/412). + ServiceCodeConditionNotMet ServiceCodeType = "ConditionNotMet" + + // ServiceCodeEmptyMetadataKey means the key for one of the metadata key-value pairs is empty (400). + ServiceCodeEmptyMetadataKey ServiceCodeType = "EmptyMetadataKey" + + // ServiceCodeInsufficientAccountPermissions means read operations are currently disabled or Write operations are not allowed or The account being accessed does not have sufficient permissions to execute this operation (403). + ServiceCodeInsufficientAccountPermissions ServiceCodeType = "InsufficientAccountPermissions" + + // ServiceCodeInternalError means the server encountered an internal error. Please retry the request (500). + ServiceCodeInternalError ServiceCodeType = "InternalError" + + // ServiceCodeInvalidAuthenticationInfo means the authentication information was not provided in the correct format. Verify the value of Authorization header (400). + ServiceCodeInvalidAuthenticationInfo ServiceCodeType = "InvalidAuthenticationInfo" + + // ServiceCodeInvalidHeaderValue means the value provided for one of the HTTP headers was not in the correct format (400). + ServiceCodeInvalidHeaderValue ServiceCodeType = "InvalidHeaderValue" + + // ServiceCodeInvalidHTTPVerb means the HTTP verb specified was not recognized by the server (400). + ServiceCodeInvalidHTTPVerb ServiceCodeType = "InvalidHttpVerb" + + // ServiceCodeInvalidInput means one of the request inputs is not valid (400). + ServiceCodeInvalidInput ServiceCodeType = "InvalidInput" + + // ServiceCodeInvalidMd5 means the MD5 value specified in the request is invalid. The MD5 value must be 128 bits and Base64-encoded (400). + ServiceCodeInvalidMd5 ServiceCodeType = "InvalidMd5" + + // ServiceCodeInvalidMetadata means the specified metadata is invalid. It includes characters that are not permitted (400). + ServiceCodeInvalidMetadata ServiceCodeType = "InvalidMetadata" + + // ServiceCodeInvalidQueryParameterValue means an invalid value was specified for one of the query parameters in the request URI (400). + ServiceCodeInvalidQueryParameterValue ServiceCodeType = "InvalidQueryParameterValue" + + // ServiceCodeInvalidRange means the range specified is invalid for the current size of the resource (416). + ServiceCodeInvalidRange ServiceCodeType = "InvalidRange" + + // ServiceCodeInvalidResourceName means the specified resource name contains invalid characters (400). + ServiceCodeInvalidResourceName ServiceCodeType = "InvalidResourceName" + + // ServiceCodeInvalidURI means the requested URI does not represent any resource on the server (400). + ServiceCodeInvalidURI ServiceCodeType = "InvalidUri" + + // ServiceCodeInvalidXMLDocument means the specified XML is not syntactically valid (400). + ServiceCodeInvalidXMLDocument ServiceCodeType = "InvalidXmlDocument" + + // ServiceCodeInvalidXMLNodeValue means the value provided for one of the XML nodes in the request body was not in the correct format (400). + ServiceCodeInvalidXMLNodeValue ServiceCodeType = "InvalidXmlNodeValue" + + // ServiceCodeMd5Mismatch means the MD5 value specified in the request did not match the MD5 value calculated by the server (400). + ServiceCodeMd5Mismatch ServiceCodeType = "Md5Mismatch" + + // ServiceCodeMetadataTooLarge means the size of the specified metadata exceeds the maximum size permitted (400). + ServiceCodeMetadataTooLarge ServiceCodeType = "MetadataTooLarge" + + // ServiceCodeMissingContentLengthHeader means the Content-Length header was not specified (411). + ServiceCodeMissingContentLengthHeader ServiceCodeType = "MissingContentLengthHeader" + + // ServiceCodeMissingRequiredQueryParameter means a required query parameter was not specified for this request (400). + ServiceCodeMissingRequiredQueryParameter ServiceCodeType = "MissingRequiredQueryParameter" + + // ServiceCodeMissingRequiredHeader means a required HTTP header was not specified (400). + ServiceCodeMissingRequiredHeader ServiceCodeType = "MissingRequiredHeader" + + // ServiceCodeMissingRequiredXMLNode means a required XML node was not specified in the request body (400). + ServiceCodeMissingRequiredXMLNode ServiceCodeType = "MissingRequiredXmlNode" + + // ServiceCodeMultipleConditionHeadersNotSupported means multiple condition headers are not supported (400). + ServiceCodeMultipleConditionHeadersNotSupported ServiceCodeType = "MultipleConditionHeadersNotSupported" + + // ServiceCodeOperationTimedOut means the operation could not be completed within the permitted time (500). + ServiceCodeOperationTimedOut ServiceCodeType = "OperationTimedOut" + + // ServiceCodeOutOfRangeInput means one of the request inputs is out of range (400). + ServiceCodeOutOfRangeInput ServiceCodeType = "OutOfRangeInput" + + // ServiceCodeOutOfRangeQueryParameterValue means a query parameter specified in the request URI is outside the permissible range (400). + ServiceCodeOutOfRangeQueryParameterValue ServiceCodeType = "OutOfRangeQueryParameterValue" + + // ServiceCodeRequestBodyTooLarge means the size of the request body exceeds the maximum size permitted (413). + ServiceCodeRequestBodyTooLarge ServiceCodeType = "RequestBodyTooLarge" + + // ServiceCodeResourceTypeMismatch means the specified resource type does not match the type of the existing resource (409). + ServiceCodeResourceTypeMismatch ServiceCodeType = "ResourceTypeMismatch" + + // ServiceCodeRequestURLFailedToParse means the url in the request could not be parsed (400). + ServiceCodeRequestURLFailedToParse ServiceCodeType = "RequestUrlFailedToParse" + + // ServiceCodeResourceAlreadyExists means the specified resource already exists (409). + ServiceCodeResourceAlreadyExists ServiceCodeType = "ResourceAlreadyExists" + + // ServiceCodeResourceNotFound means the specified resource does not exist (404). + ServiceCodeResourceNotFound ServiceCodeType = "ResourceNotFound" + + // ServiceCodeServerBusy means the server is currently unable to receive requests. Please retry your request or Ingress/egress is over the account limit or operations per second is over the account limit (503). + ServiceCodeServerBusy ServiceCodeType = "ServerBusy" + + // ServiceCodeUnsupportedHeader means one of the HTTP headers specified in the request is not supported (400). + ServiceCodeUnsupportedHeader ServiceCodeType = "UnsupportedHeader" + + // ServiceCodeUnsupportedXMLNode means one of the XML nodes specified in the request body is not supported (400). + ServiceCodeUnsupportedXMLNode ServiceCodeType = "UnsupportedXmlNode" + + // ServiceCodeUnsupportedQueryParameter means one of the query parameters specified in the request URI is not supported (400). + ServiceCodeUnsupportedQueryParameter ServiceCodeType = "UnsupportedQueryParameter" + + // ServiceCodeUnsupportedHTTPVerb means the resource doesn't support the specified HTTP verb (405). + ServiceCodeUnsupportedHTTPVerb ServiceCodeType = "UnsupportedHttpVerb" +) diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_storage_error.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_storage_error.go new file mode 100644 index 000000000..e7872a8a3 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_storage_error.go @@ -0,0 +1,111 @@ +package azblob + +import ( + "bytes" + "encoding/xml" + "fmt" + "net/http" + "sort" + + "github.com/Azure/azure-pipeline-go/pipeline" +) + +func init() { + // wire up our custom error handling constructor + responseErrorFactory = newStorageError +} + +// ServiceCodeType is a string identifying a storage service error. +// For more information, see https://docs.microsoft.com/en-us/rest/api/storageservices/status-and-error-codes2 +type ServiceCodeType string + +// StorageError identifies a responder-generated network or response parsing error. +type StorageError interface { + // ResponseError implements error's Error(), net.Error's Temporary() and Timeout() methods & Response(). + ResponseError + + // ServiceCode returns a service error code. Your code can use this to make error recovery decisions. + ServiceCode() ServiceCodeType +} + +// storageError is the internal struct that implements the public StorageError interface. +type storageError struct { + responseError + serviceCode ServiceCodeType + details map[string]string +} + +// newStorageError creates an error object that implements the error interface. +func newStorageError(cause error, response *http.Response, description string) error { + return &storageError{ + responseError: responseError{ + ErrorNode: pipeline.ErrorNode{}.Initialize(cause, 3), + response: response, + description: description, + }, + serviceCode: ServiceCodeType(response.Header.Get("x-ms-error-code")), + } +} + +// ServiceCode returns service-error information. The caller may examine these values but should not modify any of them. +func (e *storageError) ServiceCode() ServiceCodeType { + return e.serviceCode +} + +// Error implements the error interface's Error method to return a string representation of the error. +func (e *storageError) Error() string { + b := &bytes.Buffer{} + fmt.Fprintf(b, "===== RESPONSE ERROR (ServiceCode=%s) =====\n", e.serviceCode) + fmt.Fprintf(b, "Description=%s, Details: ", e.description) + if len(e.details) == 0 { + b.WriteString("(none)\n") + } else { + b.WriteRune('\n') + keys := make([]string, 0, len(e.details)) + // Alphabetize the details + for k := range e.details { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { + fmt.Fprintf(b, " %s: %+v\n", k, e.details[k]) + } + } + req := pipeline.Request{Request: e.response.Request}.Copy() // Make a copy of the response's request + pipeline.WriteRequestWithResponse(b, prepareRequestForLogging(req), e.response, nil) + return e.ErrorNode.Error(b.String()) +} + +// Temporary returns true if the error occurred due to a temporary condition (including an HTTP status of 500 or 503). +func (e *storageError) Temporary() bool { + if e.response != nil { + if (e.response.StatusCode == http.StatusInternalServerError) || (e.response.StatusCode == http.StatusServiceUnavailable) { + return true + } + } + return e.ErrorNode.Temporary() +} + +// UnmarshalXML performs custom unmarshalling of XML-formatted Azure storage request errors. +func (e *storageError) UnmarshalXML(d *xml.Decoder, start xml.StartElement) (err error) { + tokName := "" + var t xml.Token + for t, err = d.Token(); err == nil; t, err = d.Token() { + switch tt := t.(type) { + case xml.StartElement: + tokName = tt.Name.Local + break + case xml.CharData: + switch tokName { + case "Message": + e.description = string(tt) + default: + if e.details == nil { + e.details = map[string]string{} + } + e.details[tokName] = string(tt) + } + } + } + return nil +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_util_validate.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_util_validate.go new file mode 100644 index 000000000..d7b2507e4 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_util_validate.go @@ -0,0 +1,64 @@ +package azblob + +import ( + "errors" + "fmt" + "io" + "strconv" +) + +// httpRange defines a range of bytes within an HTTP resource, starting at offset and +// ending at offset+count. A zero-value httpRange indicates the entire resource. An httpRange +// which has an offset but na zero value count indicates from the offset to the resource's end. +type httpRange struct { + offset int64 + count int64 +} + +func (r httpRange) pointers() *string { + if r.offset == 0 && r.count == CountToEnd { // Do common case first for performance + return nil // No specified range + } + endOffset := "" // if count == CountToEnd (0) + if r.count > 0 { + endOffset = strconv.FormatInt((r.offset+r.count)-1, 10) + } + dataRange := fmt.Sprintf("bytes=%v-%s", r.offset, endOffset) + return &dataRange +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +func validateSeekableStreamAt0AndGetCount(body io.ReadSeeker) (int64, error) { + if body == nil { // nil body's are "logically" seekable to 0 and are 0 bytes long + return 0, nil + } + + err := validateSeekableStreamAt0(body) + if err != nil { + return 0, err + } + + count, err := body.Seek(0, io.SeekEnd) + if err != nil { + return 0, errors.New("body stream must be seekable") + } + + body.Seek(0, io.SeekStart) + return count, nil +} + +// return an error if body is not a valid seekable stream at 0 +func validateSeekableStreamAt0(body io.ReadSeeker) error { + if body == nil { // nil body's are "logically" seekable to 0 + return nil + } + if pos, err := body.Seek(0, io.SeekCurrent); pos != 0 || err != nil { + // Help detect programmer error + if err != nil { + return errors.New("body stream must be seekable") + } + return errors.New("body stream must be set to position 0") + } + return nil +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_uuid.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_uuid.go new file mode 100644 index 000000000..66799f9cb --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_uuid.go @@ -0,0 +1,77 @@ +package azblob + +import ( + "crypto/rand" + "fmt" + "strconv" +) + +// The UUID reserved variants. +const ( + reservedNCS byte = 0x80 + reservedRFC4122 byte = 0x40 + reservedMicrosoft byte = 0x20 + reservedFuture byte = 0x00 +) + +// A UUID representation compliant with specification in RFC 4122 document. +type uuid [16]byte + +// NewUUID returns a new uuid using RFC 4122 algorithm. +func newUUID() (u uuid) { + u = uuid{} + // Set all bits to randomly (or pseudo-randomly) chosen values. + rand.Read(u[:]) + u[8] = (u[8] | reservedRFC4122) & 0x7F // u.setVariant(ReservedRFC4122) + + var version byte = 4 + u[6] = (u[6] & 0xF) | (version << 4) // u.setVersion(4) + return +} + +// String returns an unparsed version of the generated UUID sequence. +func (u uuid) String() string { + return fmt.Sprintf("%x-%x-%x-%x-%x", u[0:4], u[4:6], u[6:8], u[8:10], u[10:]) +} + +// ParseUUID parses a string formatted as "003020100-0504-0706-0809-0a0b0c0d0e0f" +// or "{03020100-0504-0706-0809-0a0b0c0d0e0f}" into a UUID. +func parseUUID(uuidStr string) uuid { + char := func(hexString string) byte { + i, _ := strconv.ParseUint(hexString, 16, 8) + return byte(i) + } + if uuidStr[0] == '{' { + uuidStr = uuidStr[1:] // Skip over the '{' + } + // 03020100 - 05 04 - 07 06 - 08 09 - 0a 0b 0c 0d 0e 0f + // 1 11 1 11 11 1 12 22 2 22 22 22 33 33 33 + // 01234567 8 90 12 3 45 67 8 90 12 3 45 67 89 01 23 45 + uuidVal := uuid{ + char(uuidStr[0:2]), + char(uuidStr[2:4]), + char(uuidStr[4:6]), + char(uuidStr[6:8]), + + char(uuidStr[9:11]), + char(uuidStr[11:13]), + + char(uuidStr[14:16]), + char(uuidStr[16:18]), + + char(uuidStr[19:21]), + char(uuidStr[21:23]), + + char(uuidStr[24:26]), + char(uuidStr[26:28]), + char(uuidStr[28:30]), + char(uuidStr[30:32]), + char(uuidStr[32:34]), + char(uuidStr[34:36]), + } + return uuidVal +} + +func (u uuid) bytes() []byte { + return u[:] +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zt_doc.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zt_doc.go new file mode 100644 index 000000000..6b3779c0e --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zt_doc.go @@ -0,0 +1,89 @@ +// Copyright 2017 Microsoft Corporation. All rights reserved. +// Use of this source code is governed by an MIT +// license that can be found in the LICENSE file. + +/* +Package azblob allows you to manipulate Azure Storage containers and blobs objects. + +URL Types + +The most common types you'll work with are the XxxURL types. The methods of these types make requests +against the Azure Storage Service. + + - ServiceURL's methods perform operations on a storage account. + - ContainerURL's methods perform operations on an account's container. + - BlockBlobURL's methods perform operations on a container's block blob. + - AppendBlobURL's methods perform operations on a container's append blob. + - PageBlobURL's methods perform operations on a container's page blob. + - BlobURL's methods perform operations on a container's blob regardless of the blob's type. + +Internally, each XxxURL object contains a URL and a request pipeline. The URL indicates the endpoint where each HTTP +request is sent and the pipeline indicates how the outgoing HTTP request and incoming HTTP response is processed. +The pipeline specifies things like retry policies, logging, deserialization of HTTP response payloads, and more. + +Pipelines are threadsafe and may be shared by multiple XxxURL objects. When you create a ServiceURL, you pass +an initial pipeline. When you call ServiceURL's NewContainerURL method, the new ContainerURL object has its own +URL but it shares the same pipeline as the parent ServiceURL object. + +To work with a blob, call one of ContainerURL's 4 NewXxxBlobURL methods depending on how you want to treat the blob. +To treat the blob as a block blob, append blob, or page blob, call NewBlockBlobURL, NewAppendBlobURL, or NewPageBlobURL +respectively. These three types are all identical except for the methods they expose; each type exposes the methods +relevant to the type of blob represented. If you're not sure how you want to treat a blob, you can call NewBlobURL; +this returns an object whose methods are relevant to any kind of blob. When you call ContainerURL's NewXxxBlobURL, +the new XxxBlobURL object has its own URL but it shares the same pipeline as the parent ContainerURL object. You +can easily switch between blob types (method sets) by calling a ToXxxBlobURL method. + +If you'd like to use a different pipeline with a ServiceURL, ContainerURL, or XxxBlobURL object, then call the XxxURL +object's WithPipeline method passing in the desired pipeline. The WithPipeline methods create a new XxxURL object +with the same URL as the original but with the specified pipeline. + +Note that XxxURL objects use little memory, are goroutine-safe, and many objects share the same pipeline. This means that +XxxURL objects share a lot of system resources making them very efficient. + +All of XxxURL's methods that make HTTP requests return rich error handling information so you can discern network failures, +transient failures, timeout failures, service failures, etc. See the StorageError interface for more information and an +example of how to do deal with errors. + +URL and Shared Access Signature Manipulation + +The library includes a BlobURLParts type for deconstructing and reconstructing URLs. And you can use the following types +for generating and parsing Shared Access Signature (SAS) + - Use the AccountSASSignatureValues type to create a SAS for a storage account. + - Use the BlobSASSignatureValues type to create a SAS for a container or blob. + - Use the SASQueryParameters type to turn signature values in to query parameres or to parse query parameters. + +To generate a SAS, you must use the SharedKeyCredential type. + +Credentials + +When creating a request pipeline, you must specify one of this package's credential types. + - Call the NewAnonymousCredential function for requests that contain a Shared Access Signature (SAS). + - Call the NewSharedKeyCredential function (with an account name & key) to access any account resources. You must also use this + to generate Shared Access Signatures. + +HTTP Request Policy Factories + +This package defines several request policy factories for use with the pipeline package. +Most applications will not use these factories directly; instead, the NewPipeline +function creates these factories, initializes them (via the PipelineOptions type) +and returns a pipeline object for use by the XxxURL objects. + +However, for advanced scenarios, developers can access these policy factories directly +and even create their own and then construct their own pipeline in order to affect HTTP +requests and responses performed by the XxxURL objects. For example, developers can +introduce their own logging, random failures, request recording & playback for fast +testing, HTTP request pacing, alternate retry mechanisms, metering, metrics, etc. The +possibilities are endless! + +Below are the request pipeline policy factory functions that are provided with this +package: + - NewRetryPolicyFactory Enables rich retry semantics for failed HTTP requests. + - NewRequestLogPolicyFactory Enables rich logging support for HTTP requests/responses & failures. + - NewTelemetryPolicyFactory Enables simple modification of the HTTP request's User-Agent header so each request reports the SDK version & language/runtime making the requests. + - NewUniqueRequestIDPolicyFactory Adds a x-ms-client-request-id header with a unique UUID value to an HTTP request to help with diagnosing failures. + +Also, note that all the NewXxxCredential functions return request policy factory objects which get injected into the pipeline. +*/ +package azblob + +// TokenCredential Use this to access resources using Role-Based Access Control (RBAC). diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_append_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_append_blob.go new file mode 100644 index 000000000..719bcb624 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_append_blob.go @@ -0,0 +1,349 @@ +package azblob + +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "encoding/base64" + "github.com/Azure/azure-pipeline-go/pipeline" + "io" + "io/ioutil" + "net/http" + "net/url" + "strconv" + "time" +) + +// appendBlobClient is the client for the AppendBlob methods of the Azblob service. +type appendBlobClient struct { + managementClient +} + +// newAppendBlobClient creates an instance of the appendBlobClient client. +func newAppendBlobClient(url url.URL, p pipeline.Pipeline) appendBlobClient { + return appendBlobClient{newManagementClient(url, p)} +} + +// AppendBlock the Append Block operation commits a new block of data to the end of an existing append blob. The Append +// Block operation is permitted only if the blob was created with x-ms-blob-type set to AppendBlob. Append Block is +// supported only on version 2015-02-21 version or later. +// +// body is initial data body will be closed upon successful return. Callers should ensure closure when receiving an +// error.contentLength is the length of the request. timeout is the timeout parameter is expressed in seconds. For more +// information, see
Setting +// Timeouts for Blob Service Operations. transactionalContentMD5 is specify the transactional md5 for the body, to +// be validated by the service. leaseID is if specified, the operation only succeeds if the resource's lease is active +// and matches this ID. maxSize is optional conditional header. The max length in bytes permitted for the append blob. +// If the Append Block operation would cause the blob to exceed that limit or if the blob size is already greater than +// the value specified in this header, the request will fail with MaxBlobSizeConditionNotMet error (HTTP status code +// 412 - Precondition Failed). appendPosition is optional conditional header, used only for the Append Block operation. +// A number indicating the byte offset to compare. Append Block will succeed only if the append position is equal to +// this number. If it is not, the request will fail with the AppendPositionConditionNotMet error (HTTP status code 412 +// - Precondition Failed). ifModifiedSince is specify this header value to operate only on a blob if it has been +// modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if +// it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on blobs +// with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client appendBlobClient) AppendBlock(ctx context.Context, body io.ReadSeeker, contentLength int64, timeout *int32, transactionalContentMD5 []byte, leaseID *string, maxSize *int64, appendPosition *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*AppendBlobAppendBlockResponse, error) { + if err := validate([]validation{ + {targetValue: body, + constraints: []constraint{{target: "body", name: null, rule: true, chain: nil}}}, + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.appendBlockPreparer(body, contentLength, timeout, transactionalContentMD5, leaseID, maxSize, appendPosition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.appendBlockResponder}, req) + if err != nil { + return nil, err + } + return resp.(*AppendBlobAppendBlockResponse), err +} + +// appendBlockPreparer prepares the AppendBlock request. +func (client appendBlobClient) appendBlockPreparer(body io.ReadSeeker, contentLength int64, timeout *int32, transactionalContentMD5 []byte, leaseID *string, maxSize *int64, appendPosition *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, body) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "appendblock") + req.URL.RawQuery = params.Encode() + req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) + if transactionalContentMD5 != nil { + req.Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(transactionalContentMD5)) + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if maxSize != nil { + req.Header.Set("x-ms-blob-condition-maxsize", strconv.FormatInt(*maxSize, 10)) + } + if appendPosition != nil { + req.Header.Set("x-ms-blob-condition-appendpos", strconv.FormatInt(*appendPosition, 10)) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// appendBlockResponder handles the response to the AppendBlock request. +func (client appendBlobClient) appendBlockResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &AppendBlobAppendBlockResponse{rawResponse: resp.Response()}, err +} + +// AppendBlockFromURL the Append Block operation commits a new block of data to the end of an existing append blob +// where the contents are read from a source url. The Append Block operation is permitted only if the blob was created +// with x-ms-blob-type set to AppendBlob. Append Block is supported only on version 2015-02-21 version or later. +// +// sourceURL is specify a URL to the copy source. contentLength is the length of the request. sourceRange is bytes of +// source data in the specified range. sourceContentMD5 is specify the md5 calculated for the range of bytes that must +// be read from the copy source. timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. maxSize is optional conditional header. The max length in bytes permitted for +// the append blob. If the Append Block operation would cause the blob to exceed that limit or if the blob size is +// already greater than the value specified in this header, the request will fail with MaxBlobSizeConditionNotMet error +// (HTTP status code 412 - Precondition Failed). appendPosition is optional conditional header, used only for the +// Append Block operation. A number indicating the byte offset to compare. Append Block will succeed only if the append +// position is equal to this number. If it is not, the request will fail with the AppendPositionConditionNotMet error +// (HTTP status code 412 - Precondition Failed). ifModifiedSince is specify this header value to operate only on a blob +// if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate +// only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to +// operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a +// matching value. sourceIfModifiedSince is specify this header value to operate only on a blob if it has been modified +// since the specified date/time. sourceIfUnmodifiedSince is specify this header value to operate only on a blob if it +// has not been modified since the specified date/time. sourceIfMatch is specify an ETag value to operate only on blobs +// with a matching value. sourceIfNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client appendBlobClient) AppendBlockFromURL(ctx context.Context, sourceURL string, contentLength int64, sourceRange *string, sourceContentMD5 []byte, timeout *int32, leaseID *string, maxSize *int64, appendPosition *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (*AppendBlobAppendBlockFromURLResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.appendBlockFromURLPreparer(sourceURL, contentLength, sourceRange, sourceContentMD5, timeout, leaseID, maxSize, appendPosition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.appendBlockFromURLResponder}, req) + if err != nil { + return nil, err + } + return resp.(*AppendBlobAppendBlockFromURLResponse), err +} + +// appendBlockFromURLPreparer prepares the AppendBlockFromURL request. +func (client appendBlobClient) appendBlockFromURLPreparer(sourceURL string, contentLength int64, sourceRange *string, sourceContentMD5 []byte, timeout *int32, leaseID *string, maxSize *int64, appendPosition *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "appendblock") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-copy-source", sourceURL) + if sourceRange != nil { + req.Header.Set("x-ms-source-range", *sourceRange) + } + if sourceContentMD5 != nil { + req.Header.Set("x-ms-source-content-md5", base64.StdEncoding.EncodeToString(sourceContentMD5)) + } + req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if maxSize != nil { + req.Header.Set("x-ms-blob-condition-maxsize", strconv.FormatInt(*maxSize, 10)) + } + if appendPosition != nil { + req.Header.Set("x-ms-blob-condition-appendpos", strconv.FormatInt(*appendPosition, 10)) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + if sourceIfModifiedSince != nil { + req.Header.Set("x-ms-source-if-modified-since", (*sourceIfModifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfUnmodifiedSince != nil { + req.Header.Set("x-ms-source-if-unmodified-since", (*sourceIfUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfMatch != nil { + req.Header.Set("x-ms-source-if-match", string(*sourceIfMatch)) + } + if sourceIfNoneMatch != nil { + req.Header.Set("x-ms-source-if-none-match", string(*sourceIfNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// appendBlockFromURLResponder handles the response to the AppendBlockFromURL request. +func (client appendBlobClient) appendBlockFromURLResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &AppendBlobAppendBlockFromURLResponse{rawResponse: resp.Response()}, err +} + +// Create the Create Append Blob operation creates a new append blob. +// +// contentLength is the length of the request. timeout is the timeout parameter is expressed in seconds. For more +// information, see Setting +// Timeouts for Blob Service Operations. blobContentType is optional. Sets the blob's content type. If specified, +// this property is stored with the blob and returned with a read request. blobContentEncoding is optional. Sets the +// blob's content encoding. If specified, this property is stored with the blob and returned with a read request. +// blobContentLanguage is optional. Set the blob's content language. If specified, this property is stored with the +// blob and returned with a read request. blobContentMD5 is optional. An MD5 hash of the blob content. Note that this +// hash is not validated, as the hashes for the individual blocks were validated when each was uploaded. +// blobCacheControl is optional. Sets the blob's cache control. If specified, this property is stored with the blob and +// returned with a read request. metadata is optional. Specifies a user-defined name-value pair associated with the +// blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or file to the +// destination blob. If one or more name-value pairs are specified, the destination blob is created with the specified +// metadata, and metadata is not copied from the source blob or file. Note that beginning with version 2009-09-19, +// metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, Blobs, and +// Metadata for more information. leaseID is if specified, the operation only succeeds if the resource's lease is +// active and matches this ID. blobContentDisposition is optional. Sets the blob's Content-Disposition header. +// ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified +// date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified +// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value. +// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. requestID is provides a +// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage +// analytics logging is enabled. +func (client appendBlobClient) Create(ctx context.Context, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*AppendBlobCreateResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.createPreparer(contentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.createResponder}, req) + if err != nil { + return nil, err + } + return resp.(*AppendBlobCreateResponse), err +} + +// createPreparer prepares the Create request. +func (client appendBlobClient) createPreparer(contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + req.URL.RawQuery = params.Encode() + req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) + if blobContentType != nil { + req.Header.Set("x-ms-blob-content-type", *blobContentType) + } + if blobContentEncoding != nil { + req.Header.Set("x-ms-blob-content-encoding", *blobContentEncoding) + } + if blobContentLanguage != nil { + req.Header.Set("x-ms-blob-content-language", *blobContentLanguage) + } + if blobContentMD5 != nil { + req.Header.Set("x-ms-blob-content-md5", base64.StdEncoding.EncodeToString(blobContentMD5)) + } + if blobCacheControl != nil { + req.Header.Set("x-ms-blob-cache-control", *blobCacheControl) + } + if metadata != nil { + for k, v := range metadata { + req.Header.Set("x-ms-meta-"+k, v) + } + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if blobContentDisposition != nil { + req.Header.Set("x-ms-blob-content-disposition", *blobContentDisposition) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-blob-type", "AppendBlob") + return req, nil +} + +// createResponder handles the response to the Create request. +func (client appendBlobClient) createResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &AppendBlobCreateResponse{rawResponse: resp.Response()}, err +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_blob.go new file mode 100644 index 000000000..5e30263a0 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_blob.go @@ -0,0 +1,1365 @@ +package azblob + +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "encoding/base64" + "github.com/Azure/azure-pipeline-go/pipeline" + "io" + "io/ioutil" + "net/http" + "net/url" + "strconv" + "time" +) + +// blobClient is the client for the Blob methods of the Azblob service. +type blobClient struct { + managementClient +} + +// newBlobClient creates an instance of the blobClient client. +func newBlobClient(url url.URL, p pipeline.Pipeline) blobClient { + return blobClient{newManagementClient(url, p)} +} + +// AbortCopyFromURL the Abort Copy From URL operation aborts a pending Copy From URL operation, and leaves a +// destination blob with zero length and full metadata. +// +// copyID is the copy identifier provided in the x-ms-copy-id header of the original Copy Blob operation. timeout is +// the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character +// limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client blobClient) AbortCopyFromURL(ctx context.Context, copyID string, timeout *int32, leaseID *string, requestID *string) (*BlobAbortCopyFromURLResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.abortCopyFromURLPreparer(copyID, timeout, leaseID, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.abortCopyFromURLResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobAbortCopyFromURLResponse), err +} + +// abortCopyFromURLPreparer prepares the AbortCopyFromURL request. +func (client blobClient) abortCopyFromURLPreparer(copyID string, timeout *int32, leaseID *string, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + params.Set("copyid", copyID) + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "copy") + req.URL.RawQuery = params.Encode() + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-copy-action", "abort") + return req, nil +} + +// abortCopyFromURLResponder handles the response to the AbortCopyFromURL request. +func (client blobClient) abortCopyFromURLResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusNoContent) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobAbortCopyFromURLResponse{rawResponse: resp.Response()}, err +} + +// AcquireLease [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete +// operations +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. duration is specifies the duration of the lease, in seconds, or negative +// one (-1) for a lease that never expires. A non-infinite lease can be between 15 and 60 seconds. A lease duration +// cannot be changed using renew or change. proposedLeaseID is proposed lease ID, in a GUID string format. The Blob +// service returns 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor +// (String) for a list of valid GUID string formats. ifModifiedSince is specify this header value to operate only on a +// blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to +// operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value +// to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs +// without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is +// recorded in the analytics logs when storage analytics logging is enabled. +func (client blobClient) AcquireLease(ctx context.Context, timeout *int32, duration *int32, proposedLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobAcquireLeaseResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.acquireLeasePreparer(timeout, duration, proposedLeaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.acquireLeaseResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobAcquireLeaseResponse), err +} + +// acquireLeasePreparer prepares the AcquireLease request. +func (client blobClient) acquireLeasePreparer(timeout *int32, duration *int32, proposedLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "lease") + req.URL.RawQuery = params.Encode() + if duration != nil { + req.Header.Set("x-ms-lease-duration", strconv.FormatInt(int64(*duration), 10)) + } + if proposedLeaseID != nil { + req.Header.Set("x-ms-proposed-lease-id", *proposedLeaseID) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-lease-action", "acquire") + return req, nil +} + +// acquireLeaseResponder handles the response to the AcquireLease request. +func (client blobClient) acquireLeaseResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobAcquireLeaseResponse{rawResponse: resp.Response()}, err +} + +// BreakLease [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete +// operations +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. breakPeriod is for a break operation, proposed duration the lease should +// continue before it is broken, in seconds, between 0 and 60. This break period is only used if it is shorter than the +// time remaining on the lease. If longer, the time remaining on the lease is used. A new lease will not be available +// before the break period has expired, but the lease may be held for longer than the break period. If this header does +// not appear with a break operation, a fixed-duration lease breaks after the remaining lease period elapses, and an +// infinite lease breaks immediately. ifModifiedSince is specify this header value to operate only on a blob if it has +// been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a +// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on +// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client blobClient) BreakLease(ctx context.Context, timeout *int32, breakPeriod *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobBreakLeaseResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.breakLeasePreparer(timeout, breakPeriod, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.breakLeaseResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobBreakLeaseResponse), err +} + +// breakLeasePreparer prepares the BreakLease request. +func (client blobClient) breakLeasePreparer(timeout *int32, breakPeriod *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "lease") + req.URL.RawQuery = params.Encode() + if breakPeriod != nil { + req.Header.Set("x-ms-lease-break-period", strconv.FormatInt(int64(*breakPeriod), 10)) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-lease-action", "break") + return req, nil +} + +// breakLeaseResponder handles the response to the BreakLease request. +func (client blobClient) breakLeaseResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusAccepted) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobBreakLeaseResponse{rawResponse: resp.Response()}, err +} + +// ChangeLease [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete +// operations +// +// leaseID is specifies the current lease ID on the resource. proposedLeaseID is proposed lease ID, in a GUID string +// format. The Blob service returns 400 (Invalid request) if the proposed lease ID is not in the correct format. See +// Guid Constructor (String) for a list of valid GUID string formats. timeout is the timeout parameter is expressed in +// seconds. For more information, see Setting +// Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if +// it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only +// on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate +// only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a +// matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded +// in the analytics logs when storage analytics logging is enabled. +func (client blobClient) ChangeLease(ctx context.Context, leaseID string, proposedLeaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobChangeLeaseResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.changeLeasePreparer(leaseID, proposedLeaseID, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.changeLeaseResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobChangeLeaseResponse), err +} + +// changeLeasePreparer prepares the ChangeLease request. +func (client blobClient) changeLeasePreparer(leaseID string, proposedLeaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "lease") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-lease-id", leaseID) + req.Header.Set("x-ms-proposed-lease-id", proposedLeaseID) + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-lease-action", "change") + return req, nil +} + +// changeLeaseResponder handles the response to the ChangeLease request. +func (client blobClient) changeLeaseResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobChangeLeaseResponse{rawResponse: resp.Response()}, err +} + +// CopyFromURL the Copy From URL operation copies a blob or an internet resource to a new blob. It will not return a +// response until the copy is complete. +// +// copySource is specifies the name of the source page blob snapshot. This value is a URL of up to 2 KB in length that +// specifies a page blob snapshot. The value should be URL-encoded as it would appear in a request URI. The source blob +// must either be public or must be authenticated via a shared access signature. timeout is the timeout parameter is +// expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. metadata is optional. Specifies a user-defined name-value pair associated +// with the blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or +// file to the destination blob. If one or more name-value pairs are specified, the destination blob is created with +// the specified metadata, and metadata is not copied from the source blob or file. Note that beginning with version +// 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing +// Containers, Blobs, and Metadata for more information. sourceIfModifiedSince is specify this header value to operate +// only on a blob if it has been modified since the specified date/time. sourceIfUnmodifiedSince is specify this header +// value to operate only on a blob if it has not been modified since the specified date/time. sourceIfMatch is specify +// an ETag value to operate only on blobs with a matching value. sourceIfNoneMatch is specify an ETag value to operate +// only on blobs without a matching value. ifModifiedSince is specify this header value to operate only on a blob if it +// has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a +// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on +// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client blobClient) CopyFromURL(ctx context.Context, copySource string, timeout *int32, metadata map[string]string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (*BlobCopyFromURLResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.copyFromURLPreparer(copySource, timeout, metadata, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, leaseID, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.copyFromURLResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobCopyFromURLResponse), err +} + +// copyFromURLPreparer prepares the CopyFromURL request. +func (client blobClient) copyFromURLPreparer(copySource string, timeout *int32, metadata map[string]string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + req.URL.RawQuery = params.Encode() + if metadata != nil { + for k, v := range metadata { + req.Header.Set("x-ms-meta-"+k, v) + } + } + if sourceIfModifiedSince != nil { + req.Header.Set("x-ms-source-if-modified-since", (*sourceIfModifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfUnmodifiedSince != nil { + req.Header.Set("x-ms-source-if-unmodified-since", (*sourceIfUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfMatch != nil { + req.Header.Set("x-ms-source-if-match", string(*sourceIfMatch)) + } + if sourceIfNoneMatch != nil { + req.Header.Set("x-ms-source-if-none-match", string(*sourceIfNoneMatch)) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-copy-source", copySource) + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-requires-sync", "true") + return req, nil +} + +// copyFromURLResponder handles the response to the CopyFromURL request. +func (client blobClient) copyFromURLResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusAccepted) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobCopyFromURLResponse{rawResponse: resp.Response()}, err +} + +// CreateSnapshot the Create Snapshot operation creates a read-only snapshot of a blob +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. metadata is optional. Specifies a user-defined name-value pair associated +// with the blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or +// file to the destination blob. If one or more name-value pairs are specified, the destination blob is created with +// the specified metadata, and metadata is not copied from the source blob or file. Note that beginning with version +// 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing +// Containers, Blobs, and Metadata for more information. ifModifiedSince is specify this header value to operate only +// on a blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to +// operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value +// to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs +// without a matching value. leaseID is if specified, the operation only succeeds if the resource's lease is active and +// matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded +// in the analytics logs when storage analytics logging is enabled. +func (client blobClient) CreateSnapshot(ctx context.Context, timeout *int32, metadata map[string]string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (*BlobCreateSnapshotResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.createSnapshotPreparer(timeout, metadata, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, leaseID, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.createSnapshotResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobCreateSnapshotResponse), err +} + +// createSnapshotPreparer prepares the CreateSnapshot request. +func (client blobClient) createSnapshotPreparer(timeout *int32, metadata map[string]string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "snapshot") + req.URL.RawQuery = params.Encode() + if metadata != nil { + for k, v := range metadata { + req.Header.Set("x-ms-meta-"+k, v) + } + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// createSnapshotResponder handles the response to the CreateSnapshot request. +func (client blobClient) createSnapshotResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobCreateSnapshotResponse{rawResponse: resp.Response()}, err +} + +// Delete if the storage account's soft delete feature is disabled then, when a blob is deleted, it is permanently +// removed from the storage account. If the storage account's soft delete feature is enabled, then, when a blob is +// deleted, it is marked for deletion and becomes inaccessible immediately. However, the blob service retains the blob +// or snapshot for the number of days specified by the DeleteRetentionPolicy section of [Storage service properties] +// (Set-Blob-Service-Properties.md). After the specified number of days has passed, the blob's data is permanently +// removed from the storage account. Note that you continue to be charged for the soft-deleted blob's storage until it +// is permanently removed. Use the List Blobs API and specify the "include=deleted" query parameter to discover which +// blobs and snapshots have been soft deleted. You can then use the Undelete Blob API to restore a soft-deleted blob. +// All other operations on a soft-deleted blob or snapshot causes the service to return an HTTP status code of 404 +// (ResourceNotFound). +// +// snapshot is the snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to +// retrieve. For more information on working with blob snapshots, see Creating +// a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. deleteSnapshots is required if the blob has associated snapshots. Specify one +// of the following two options: include: Delete the base blob and all of its snapshots. only: Delete only the blob's +// snapshots and not the blob itself ifModifiedSince is specify this header value to operate only on a blob if it has +// been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a +// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on +// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client blobClient) Delete(ctx context.Context, snapshot *string, timeout *int32, leaseID *string, deleteSnapshots DeleteSnapshotsOptionType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobDeleteResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.deletePreparer(snapshot, timeout, leaseID, deleteSnapshots, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.deleteResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobDeleteResponse), err +} + +// deletePreparer prepares the Delete request. +func (client blobClient) deletePreparer(snapshot *string, timeout *int32, leaseID *string, deleteSnapshots DeleteSnapshotsOptionType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("DELETE", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if snapshot != nil && len(*snapshot) > 0 { + params.Set("snapshot", *snapshot) + } + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + req.URL.RawQuery = params.Encode() + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if deleteSnapshots != DeleteSnapshotsOptionNone { + req.Header.Set("x-ms-delete-snapshots", string(deleteSnapshots)) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// deleteResponder handles the response to the Delete request. +func (client blobClient) deleteResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusAccepted) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobDeleteResponse{rawResponse: resp.Response()}, err +} + +// Download the Download operation reads or downloads a blob from the system, including its metadata and properties. +// You can also call Download to read a snapshot. +// +// snapshot is the snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to +// retrieve. For more information on working with blob snapshots, see Creating +// a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. rangeParameter is return only the bytes of the blob in the specified +// range. leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID. +// rangeGetContentMD5 is when set to true and specified together with the Range, the service returns the MD5 hash for +// the range, as long as the range is less than or equal to 4 MB in size. ifModifiedSince is specify this header value +// to operate only on a blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this +// header value to operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify +// an ETag value to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only +// on blobs without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character +// limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client blobClient) Download(ctx context.Context, snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, rangeGetContentMD5 *bool, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*downloadResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.downloadPreparer(snapshot, timeout, rangeParameter, leaseID, rangeGetContentMD5, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.downloadResponder}, req) + if err != nil { + return nil, err + } + return resp.(*downloadResponse), err +} + +// downloadPreparer prepares the Download request. +func (client blobClient) downloadPreparer(snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, rangeGetContentMD5 *bool, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if snapshot != nil && len(*snapshot) > 0 { + params.Set("snapshot", *snapshot) + } + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + req.URL.RawQuery = params.Encode() + if rangeParameter != nil { + req.Header.Set("x-ms-range", *rangeParameter) + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if rangeGetContentMD5 != nil { + req.Header.Set("x-ms-range-get-content-md5", strconv.FormatBool(*rangeGetContentMD5)) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// downloadResponder handles the response to the Download request. +func (client blobClient) downloadResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusPartialContent) + if resp == nil { + return nil, err + } + return &downloadResponse{rawResponse: resp.Response()}, err +} + +// GetAccountInfo returns the sku name and account kind +func (client blobClient) GetAccountInfo(ctx context.Context) (*BlobGetAccountInfoResponse, error) { + req, err := client.getAccountInfoPreparer() + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getAccountInfoResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobGetAccountInfoResponse), err +} + +// getAccountInfoPreparer prepares the GetAccountInfo request. +func (client blobClient) getAccountInfoPreparer() (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + params.Set("restype", "account") + params.Set("comp", "properties") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-version", ServiceVersion) + return req, nil +} + +// getAccountInfoResponder handles the response to the GetAccountInfo request. +func (client blobClient) getAccountInfoResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobGetAccountInfoResponse{rawResponse: resp.Response()}, err +} + +// GetProperties the Get Properties operation returns all user-defined metadata, standard HTTP properties, and system +// properties for the blob. It does not return the content of the blob. +// +// snapshot is the snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to +// retrieve. For more information on working with blob snapshots, see Creating +// a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a blob if it +// has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a +// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on +// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client blobClient) GetProperties(ctx context.Context, snapshot *string, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobGetPropertiesResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.getPropertiesPreparer(snapshot, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getPropertiesResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobGetPropertiesResponse), err +} + +// getPropertiesPreparer prepares the GetProperties request. +func (client blobClient) getPropertiesPreparer(snapshot *string, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("HEAD", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if snapshot != nil && len(*snapshot) > 0 { + params.Set("snapshot", *snapshot) + } + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + req.URL.RawQuery = params.Encode() + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// getPropertiesResponder handles the response to the GetProperties request. +func (client blobClient) getPropertiesResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobGetPropertiesResponse{rawResponse: resp.Response()}, err +} + +// ReleaseLease [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete +// operations +// +// leaseID is specifies the current lease ID on the resource. timeout is the timeout parameter is expressed in seconds. +// For more information, see Setting +// Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if +// it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only +// on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate +// only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a +// matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded +// in the analytics logs when storage analytics logging is enabled. +func (client blobClient) ReleaseLease(ctx context.Context, leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobReleaseLeaseResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.releaseLeasePreparer(leaseID, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.releaseLeaseResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobReleaseLeaseResponse), err +} + +// releaseLeasePreparer prepares the ReleaseLease request. +func (client blobClient) releaseLeasePreparer(leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "lease") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-lease-id", leaseID) + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-lease-action", "release") + return req, nil +} + +// releaseLeaseResponder handles the response to the ReleaseLease request. +func (client blobClient) releaseLeaseResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobReleaseLeaseResponse{rawResponse: resp.Response()}, err +} + +// RenewLease [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete +// operations +// +// leaseID is specifies the current lease ID on the resource. timeout is the timeout parameter is expressed in seconds. +// For more information, see Setting +// Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if +// it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only +// on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate +// only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a +// matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded +// in the analytics logs when storage analytics logging is enabled. +func (client blobClient) RenewLease(ctx context.Context, leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobRenewLeaseResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.renewLeasePreparer(leaseID, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.renewLeaseResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobRenewLeaseResponse), err +} + +// renewLeasePreparer prepares the RenewLease request. +func (client blobClient) renewLeasePreparer(leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "lease") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-lease-id", leaseID) + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-lease-action", "renew") + return req, nil +} + +// renewLeaseResponder handles the response to the RenewLease request. +func (client blobClient) renewLeaseResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobRenewLeaseResponse{rawResponse: resp.Response()}, err +} + +// SetHTTPHeaders the Set HTTP Headers operation sets system properties on the blob +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. blobCacheControl is optional. Sets the blob's cache control. If specified, +// this property is stored with the blob and returned with a read request. blobContentType is optional. Sets the blob's +// content type. If specified, this property is stored with the blob and returned with a read request. blobContentMD5 +// is optional. An MD5 hash of the blob content. Note that this hash is not validated, as the hashes for the individual +// blocks were validated when each was uploaded. blobContentEncoding is optional. Sets the blob's content encoding. If +// specified, this property is stored with the blob and returned with a read request. blobContentLanguage is optional. +// Set the blob's content language. If specified, this property is stored with the blob and returned with a read +// request. leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID. +// ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified +// date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified +// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value. +// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. blobContentDisposition is +// optional. Sets the blob's Content-Disposition header. requestID is provides a client-generated, opaque value with a +// 1 KB character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client blobClient) SetHTTPHeaders(ctx context.Context, timeout *int32, blobCacheControl *string, blobContentType *string, blobContentMD5 []byte, blobContentEncoding *string, blobContentLanguage *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobContentDisposition *string, requestID *string) (*BlobSetHTTPHeadersResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.setHTTPHeadersPreparer(timeout, blobCacheControl, blobContentType, blobContentMD5, blobContentEncoding, blobContentLanguage, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, blobContentDisposition, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.setHTTPHeadersResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobSetHTTPHeadersResponse), err +} + +// setHTTPHeadersPreparer prepares the SetHTTPHeaders request. +func (client blobClient) setHTTPHeadersPreparer(timeout *int32, blobCacheControl *string, blobContentType *string, blobContentMD5 []byte, blobContentEncoding *string, blobContentLanguage *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobContentDisposition *string, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "properties") + req.URL.RawQuery = params.Encode() + if blobCacheControl != nil { + req.Header.Set("x-ms-blob-cache-control", *blobCacheControl) + } + if blobContentType != nil { + req.Header.Set("x-ms-blob-content-type", *blobContentType) + } + if blobContentMD5 != nil { + req.Header.Set("x-ms-blob-content-md5", base64.StdEncoding.EncodeToString(blobContentMD5)) + } + if blobContentEncoding != nil { + req.Header.Set("x-ms-blob-content-encoding", *blobContentEncoding) + } + if blobContentLanguage != nil { + req.Header.Set("x-ms-blob-content-language", *blobContentLanguage) + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + if blobContentDisposition != nil { + req.Header.Set("x-ms-blob-content-disposition", *blobContentDisposition) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// setHTTPHeadersResponder handles the response to the SetHTTPHeaders request. +func (client blobClient) setHTTPHeadersResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobSetHTTPHeadersResponse{rawResponse: resp.Response()}, err +} + +// SetMetadata the Set Blob Metadata operation sets user-defined metadata for the specified blob as one or more +// name-value pairs +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. metadata is optional. Specifies a user-defined name-value pair associated +// with the blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or +// file to the destination blob. If one or more name-value pairs are specified, the destination blob is created with +// the specified metadata, and metadata is not copied from the source blob or file. Note that beginning with version +// 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing +// Containers, Blobs, and Metadata for more information. leaseID is if specified, the operation only succeeds if the +// resource's lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a +// blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to +// operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value +// to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs +// without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is +// recorded in the analytics logs when storage analytics logging is enabled. +func (client blobClient) SetMetadata(ctx context.Context, timeout *int32, metadata map[string]string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobSetMetadataResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.setMetadataPreparer(timeout, metadata, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.setMetadataResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobSetMetadataResponse), err +} + +// setMetadataPreparer prepares the SetMetadata request. +func (client blobClient) setMetadataPreparer(timeout *int32, metadata map[string]string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "metadata") + req.URL.RawQuery = params.Encode() + if metadata != nil { + for k, v := range metadata { + req.Header.Set("x-ms-meta-"+k, v) + } + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// setMetadataResponder handles the response to the SetMetadata request. +func (client blobClient) setMetadataResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobSetMetadataResponse{rawResponse: resp.Response()}, err +} + +// SetTier the Set Tier operation sets the tier on a blob. The operation is allowed on a page blob in a premium storage +// account and on a block blob in a blob storage account (locally redundant storage only). A premium page blob's tier +// determines the allowed size, IOPS, and bandwidth of the blob. A block blob's tier determines Hot/Cool/Archive +// storage type. This operation does not update the blob's ETag. +// +// tier is indicates the tier to be set on the blob. timeout is the timeout parameter is expressed in seconds. For more +// information, see Setting +// Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB +// character limit that is recorded in the analytics logs when storage analytics logging is enabled. leaseID is if +// specified, the operation only succeeds if the resource's lease is active and matches this ID. +func (client blobClient) SetTier(ctx context.Context, tier AccessTierType, timeout *int32, requestID *string, leaseID *string) (*BlobSetTierResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.setTierPreparer(tier, timeout, requestID, leaseID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.setTierResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobSetTierResponse), err +} + +// setTierPreparer prepares the SetTier request. +func (client blobClient) setTierPreparer(tier AccessTierType, timeout *int32, requestID *string, leaseID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "tier") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-access-tier", string(tier)) + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + return req, nil +} + +// setTierResponder handles the response to the SetTier request. +func (client blobClient) setTierResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusAccepted) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobSetTierResponse{rawResponse: resp.Response()}, err +} + +// StartCopyFromURL the Start Copy From URL operation copies a blob or an internet resource to a new blob. +// +// copySource is specifies the name of the source page blob snapshot. This value is a URL of up to 2 KB in length that +// specifies a page blob snapshot. The value should be URL-encoded as it would appear in a request URI. The source blob +// must either be public or must be authenticated via a shared access signature. timeout is the timeout parameter is +// expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. metadata is optional. Specifies a user-defined name-value pair associated +// with the blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or +// file to the destination blob. If one or more name-value pairs are specified, the destination blob is created with +// the specified metadata, and metadata is not copied from the source blob or file. Note that beginning with version +// 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing +// Containers, Blobs, and Metadata for more information. sourceIfModifiedSince is specify this header value to operate +// only on a blob if it has been modified since the specified date/time. sourceIfUnmodifiedSince is specify this header +// value to operate only on a blob if it has not been modified since the specified date/time. sourceIfMatch is specify +// an ETag value to operate only on blobs with a matching value. sourceIfNoneMatch is specify an ETag value to operate +// only on blobs without a matching value. ifModifiedSince is specify this header value to operate only on a blob if it +// has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a +// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on +// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client blobClient) StartCopyFromURL(ctx context.Context, copySource string, timeout *int32, metadata map[string]string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (*BlobStartCopyFromURLResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.startCopyFromURLPreparer(copySource, timeout, metadata, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, leaseID, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.startCopyFromURLResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobStartCopyFromURLResponse), err +} + +// startCopyFromURLPreparer prepares the StartCopyFromURL request. +func (client blobClient) startCopyFromURLPreparer(copySource string, timeout *int32, metadata map[string]string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + req.URL.RawQuery = params.Encode() + if metadata != nil { + for k, v := range metadata { + req.Header.Set("x-ms-meta-"+k, v) + } + } + if sourceIfModifiedSince != nil { + req.Header.Set("x-ms-source-if-modified-since", (*sourceIfModifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfUnmodifiedSince != nil { + req.Header.Set("x-ms-source-if-unmodified-since", (*sourceIfUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfMatch != nil { + req.Header.Set("x-ms-source-if-match", string(*sourceIfMatch)) + } + if sourceIfNoneMatch != nil { + req.Header.Set("x-ms-source-if-none-match", string(*sourceIfNoneMatch)) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-copy-source", copySource) + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// startCopyFromURLResponder handles the response to the StartCopyFromURL request. +func (client blobClient) startCopyFromURLResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusAccepted) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobStartCopyFromURLResponse{rawResponse: resp.Response()}, err +} + +// Undelete undelete a blob that was previously soft deleted +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB +// character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client blobClient) Undelete(ctx context.Context, timeout *int32, requestID *string) (*BlobUndeleteResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.undeletePreparer(timeout, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.undeleteResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobUndeleteResponse), err +} + +// undeletePreparer prepares the Undelete request. +func (client blobClient) undeletePreparer(timeout *int32, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "undelete") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// undeleteResponder handles the response to the Undelete request. +func (client blobClient) undeleteResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobUndeleteResponse{rawResponse: resp.Response()}, err +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_block_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_block_blob.go new file mode 100644 index 000000000..955f7d190 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_block_blob.go @@ -0,0 +1,510 @@ +package azblob + +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "bytes" + "context" + "encoding/base64" + "encoding/xml" + "github.com/Azure/azure-pipeline-go/pipeline" + "io" + "io/ioutil" + "net/http" + "net/url" + "strconv" + "time" +) + +// blockBlobClient is the client for the BlockBlob methods of the Azblob service. +type blockBlobClient struct { + managementClient +} + +// newBlockBlobClient creates an instance of the blockBlobClient client. +func newBlockBlobClient(url url.URL, p pipeline.Pipeline) blockBlobClient { + return blockBlobClient{newManagementClient(url, p)} +} + +// CommitBlockList the Commit Block List operation writes a blob by specifying the list of block IDs that make up the +// blob. In order to be written as part of a blob, a block must have been successfully written to the server in a prior +// Put Block operation. You can call Put Block List to update a blob by uploading only those blocks that have changed, +// then committing the new and existing blocks together. You can do this by specifying whether to commit a block from +// the committed block list or from the uncommitted block list, or to commit the most recently uploaded version of the +// block, whichever list it may belong to. +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. blobCacheControl is optional. Sets the blob's cache control. If specified, +// this property is stored with the blob and returned with a read request. blobContentType is optional. Sets the blob's +// content type. If specified, this property is stored with the blob and returned with a read request. +// blobContentEncoding is optional. Sets the blob's content encoding. If specified, this property is stored with the +// blob and returned with a read request. blobContentLanguage is optional. Set the blob's content language. If +// specified, this property is stored with the blob and returned with a read request. blobContentMD5 is optional. An +// MD5 hash of the blob content. Note that this hash is not validated, as the hashes for the individual blocks were +// validated when each was uploaded. metadata is optional. Specifies a user-defined name-value pair associated with the +// blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or file to the +// destination blob. If one or more name-value pairs are specified, the destination blob is created with the specified +// metadata, and metadata is not copied from the source blob or file. Note that beginning with version 2009-09-19, +// metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, Blobs, and +// Metadata for more information. leaseID is if specified, the operation only succeeds if the resource's lease is +// active and matches this ID. blobContentDisposition is optional. Sets the blob's Content-Disposition header. +// ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified +// date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified +// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value. +// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. requestID is provides a +// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage +// analytics logging is enabled. +func (client blockBlobClient) CommitBlockList(ctx context.Context, blocks BlockLookupList, timeout *int32, blobCacheControl *string, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlockBlobCommitBlockListResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.commitBlockListPreparer(blocks, timeout, blobCacheControl, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.commitBlockListResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlockBlobCommitBlockListResponse), err +} + +// commitBlockListPreparer prepares the CommitBlockList request. +func (client blockBlobClient) commitBlockListPreparer(blocks BlockLookupList, timeout *int32, blobCacheControl *string, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "blocklist") + req.URL.RawQuery = params.Encode() + if blobCacheControl != nil { + req.Header.Set("x-ms-blob-cache-control", *blobCacheControl) + } + if blobContentType != nil { + req.Header.Set("x-ms-blob-content-type", *blobContentType) + } + if blobContentEncoding != nil { + req.Header.Set("x-ms-blob-content-encoding", *blobContentEncoding) + } + if blobContentLanguage != nil { + req.Header.Set("x-ms-blob-content-language", *blobContentLanguage) + } + if blobContentMD5 != nil { + req.Header.Set("x-ms-blob-content-md5", base64.StdEncoding.EncodeToString(blobContentMD5)) + } + if metadata != nil { + for k, v := range metadata { + req.Header.Set("x-ms-meta-"+k, v) + } + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if blobContentDisposition != nil { + req.Header.Set("x-ms-blob-content-disposition", *blobContentDisposition) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + b, err := xml.Marshal(blocks) + if err != nil { + return req, pipeline.NewError(err, "failed to marshal request body") + } + req.Header.Set("Content-Type", "application/xml") + err = req.SetBody(bytes.NewReader(b)) + if err != nil { + return req, pipeline.NewError(err, "failed to set request body") + } + return req, nil +} + +// commitBlockListResponder handles the response to the CommitBlockList request. +func (client blockBlobClient) commitBlockListResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlockBlobCommitBlockListResponse{rawResponse: resp.Response()}, err +} + +// GetBlockList the Get Block List operation retrieves the list of blocks that have been uploaded as part of a block +// blob +// +// listType is specifies whether to return the list of committed blocks, the list of uncommitted blocks, or both lists +// together. snapshot is the snapshot parameter is an opaque DateTime value that, when present, specifies the blob +// snapshot to retrieve. For more information on working with blob snapshots, see Creating +// a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character +// limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client blockBlobClient) GetBlockList(ctx context.Context, listType BlockListType, snapshot *string, timeout *int32, leaseID *string, requestID *string) (*BlockList, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.getBlockListPreparer(listType, snapshot, timeout, leaseID, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getBlockListResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlockList), err +} + +// getBlockListPreparer prepares the GetBlockList request. +func (client blockBlobClient) getBlockListPreparer(listType BlockListType, snapshot *string, timeout *int32, leaseID *string, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if snapshot != nil && len(*snapshot) > 0 { + params.Set("snapshot", *snapshot) + } + params.Set("blocklisttype", string(listType)) + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "blocklist") + req.URL.RawQuery = params.Encode() + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// getBlockListResponder handles the response to the GetBlockList request. +func (client blockBlobClient) getBlockListResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + result := &BlockList{rawResponse: resp.Response()} + if err != nil { + return result, err + } + defer resp.Response().Body.Close() + b, err := ioutil.ReadAll(resp.Response().Body) + if err != nil { + return result, err + } + if len(b) > 0 { + b = removeBOM(b) + err = xml.Unmarshal(b, result) + if err != nil { + return result, NewResponseError(err, resp.Response(), "failed to unmarshal response body") + } + } + return result, nil +} + +// StageBlock the Stage Block operation creates a new block to be committed as part of a blob +// +// blockID is a valid Base64 string value that identifies the block. Prior to encoding, the string must be less than or +// equal to 64 bytes in size. For a given blob, the length of the value specified for the blockid parameter must be the +// same size for each block. contentLength is the length of the request. body is initial data body will be closed upon +// successful return. Callers should ensure closure when receiving an error.transactionalContentMD5 is specify the +// transactional md5 for the body, to be validated by the service. timeout is the timeout parameter is expressed in +// seconds. For more information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character +// limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client blockBlobClient) StageBlock(ctx context.Context, blockID string, contentLength int64, body io.ReadSeeker, transactionalContentMD5 []byte, timeout *int32, leaseID *string, requestID *string) (*BlockBlobStageBlockResponse, error) { + if err := validate([]validation{ + {targetValue: body, + constraints: []constraint{{target: "body", name: null, rule: true, chain: nil}}}, + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.stageBlockPreparer(blockID, contentLength, body, transactionalContentMD5, timeout, leaseID, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.stageBlockResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlockBlobStageBlockResponse), err +} + +// stageBlockPreparer prepares the StageBlock request. +func (client blockBlobClient) stageBlockPreparer(blockID string, contentLength int64, body io.ReadSeeker, transactionalContentMD5 []byte, timeout *int32, leaseID *string, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, body) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + params.Set("blockid", blockID) + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "block") + req.URL.RawQuery = params.Encode() + req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) + if transactionalContentMD5 != nil { + req.Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(transactionalContentMD5)) + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// stageBlockResponder handles the response to the StageBlock request. +func (client blockBlobClient) stageBlockResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlockBlobStageBlockResponse{rawResponse: resp.Response()}, err +} + +// StageBlockFromURL the Stage Block operation creates a new block to be committed as part of a blob where the contents +// are read from a URL. +// +// blockID is a valid Base64 string value that identifies the block. Prior to encoding, the string must be less than or +// equal to 64 bytes in size. For a given blob, the length of the value specified for the blockid parameter must be the +// same size for each block. contentLength is the length of the request. sourceURL is specify a URL to the copy source. +// sourceRange is bytes of source data in the specified range. sourceContentMD5 is specify the md5 calculated for the +// range of bytes that must be read from the copy source. timeout is the timeout parameter is expressed in seconds. For +// more information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. sourceIfModifiedSince is specify this header value to operate only on a blob if +// it has been modified since the specified date/time. sourceIfUnmodifiedSince is specify this header value to operate +// only on a blob if it has not been modified since the specified date/time. sourceIfMatch is specify an ETag value to +// operate only on blobs with a matching value. sourceIfNoneMatch is specify an ETag value to operate only on blobs +// without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is +// recorded in the analytics logs when storage analytics logging is enabled. +func (client blockBlobClient) StageBlockFromURL(ctx context.Context, blockID string, contentLength int64, sourceURL string, sourceRange *string, sourceContentMD5 []byte, timeout *int32, leaseID *string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (*BlockBlobStageBlockFromURLResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.stageBlockFromURLPreparer(blockID, contentLength, sourceURL, sourceRange, sourceContentMD5, timeout, leaseID, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.stageBlockFromURLResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlockBlobStageBlockFromURLResponse), err +} + +// stageBlockFromURLPreparer prepares the StageBlockFromURL request. +func (client blockBlobClient) stageBlockFromURLPreparer(blockID string, contentLength int64, sourceURL string, sourceRange *string, sourceContentMD5 []byte, timeout *int32, leaseID *string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + params.Set("blockid", blockID) + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "block") + req.URL.RawQuery = params.Encode() + req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) + req.Header.Set("x-ms-copy-source", sourceURL) + if sourceRange != nil { + req.Header.Set("x-ms-source-range", *sourceRange) + } + if sourceContentMD5 != nil { + req.Header.Set("x-ms-source-content-md5", base64.StdEncoding.EncodeToString(sourceContentMD5)) + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if sourceIfModifiedSince != nil { + req.Header.Set("x-ms-source-if-modified-since", (*sourceIfModifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfUnmodifiedSince != nil { + req.Header.Set("x-ms-source-if-unmodified-since", (*sourceIfUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfMatch != nil { + req.Header.Set("x-ms-source-if-match", string(*sourceIfMatch)) + } + if sourceIfNoneMatch != nil { + req.Header.Set("x-ms-source-if-none-match", string(*sourceIfNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// stageBlockFromURLResponder handles the response to the StageBlockFromURL request. +func (client blockBlobClient) stageBlockFromURLResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlockBlobStageBlockFromURLResponse{rawResponse: resp.Response()}, err +} + +// Upload the Upload Block Blob operation updates the content of an existing block blob. Updating an existing block +// blob overwrites any existing metadata on the blob. Partial updates are not supported with Put Blob; the content of +// the existing blob is overwritten with the content of the new blob. To perform a partial update of the content of a +// block blob, use the Put Block List operation. +// +// body is initial data body will be closed upon successful return. Callers should ensure closure when receiving an +// error.contentLength is the length of the request. timeout is the timeout parameter is expressed in seconds. For more +// information, see Setting +// Timeouts for Blob Service Operations. blobContentType is optional. Sets the blob's content type. If specified, +// this property is stored with the blob and returned with a read request. blobContentEncoding is optional. Sets the +// blob's content encoding. If specified, this property is stored with the blob and returned with a read request. +// blobContentLanguage is optional. Set the blob's content language. If specified, this property is stored with the +// blob and returned with a read request. blobContentMD5 is optional. An MD5 hash of the blob content. Note that this +// hash is not validated, as the hashes for the individual blocks were validated when each was uploaded. +// blobCacheControl is optional. Sets the blob's cache control. If specified, this property is stored with the blob and +// returned with a read request. metadata is optional. Specifies a user-defined name-value pair associated with the +// blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or file to the +// destination blob. If one or more name-value pairs are specified, the destination blob is created with the specified +// metadata, and metadata is not copied from the source blob or file. Note that beginning with version 2009-09-19, +// metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, Blobs, and +// Metadata for more information. leaseID is if specified, the operation only succeeds if the resource's lease is +// active and matches this ID. blobContentDisposition is optional. Sets the blob's Content-Disposition header. +// ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified +// date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified +// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value. +// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. requestID is provides a +// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage +// analytics logging is enabled. +func (client blockBlobClient) Upload(ctx context.Context, body io.ReadSeeker, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlockBlobUploadResponse, error) { + if err := validate([]validation{ + {targetValue: body, + constraints: []constraint{{target: "body", name: null, rule: true, chain: nil}}}, + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.uploadPreparer(body, contentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.uploadResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlockBlobUploadResponse), err +} + +// uploadPreparer prepares the Upload request. +func (client blockBlobClient) uploadPreparer(body io.ReadSeeker, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, body) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + req.URL.RawQuery = params.Encode() + req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) + if blobContentType != nil { + req.Header.Set("x-ms-blob-content-type", *blobContentType) + } + if blobContentEncoding != nil { + req.Header.Set("x-ms-blob-content-encoding", *blobContentEncoding) + } + if blobContentLanguage != nil { + req.Header.Set("x-ms-blob-content-language", *blobContentLanguage) + } + if blobContentMD5 != nil { + req.Header.Set("x-ms-blob-content-md5", base64.StdEncoding.EncodeToString(blobContentMD5)) + } + if blobCacheControl != nil { + req.Header.Set("x-ms-blob-cache-control", *blobCacheControl) + } + if metadata != nil { + for k, v := range metadata { + req.Header.Set("x-ms-meta-"+k, v) + } + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if blobContentDisposition != nil { + req.Header.Set("x-ms-blob-content-disposition", *blobContentDisposition) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-blob-type", "BlockBlob") + return req, nil +} + +// uploadResponder handles the response to the Upload request. +func (client blockBlobClient) uploadResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlockBlobUploadResponse{rawResponse: resp.Response()}, err +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_client.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_client.go new file mode 100644 index 000000000..1b3ea2e4b --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_client.go @@ -0,0 +1,38 @@ +package azblob + +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "github.com/Azure/azure-pipeline-go/pipeline" + "net/url" +) + +const ( + // ServiceVersion specifies the version of the operations used in this package. + ServiceVersion = "2018-11-09" +) + +// managementClient is the base client for Azblob. +type managementClient struct { + url url.URL + p pipeline.Pipeline +} + +// newManagementClient creates an instance of the managementClient client. +func newManagementClient(url url.URL, p pipeline.Pipeline) managementClient { + return managementClient{ + url: url, + p: p, + } +} + +// URL returns a copy of the URL for this client. +func (mc managementClient) URL() url.URL { + return mc.url +} + +// Pipeline returns the pipeline for this client. +func (mc managementClient) Pipeline() pipeline.Pipeline { + return mc.p +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_container.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_container.go new file mode 100644 index 000000000..599e8118c --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_container.go @@ -0,0 +1,1037 @@ +package azblob + +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "bytes" + "context" + "encoding/xml" + "github.com/Azure/azure-pipeline-go/pipeline" + "io" + "io/ioutil" + "net/http" + "net/url" + "strconv" + "time" +) + +// containerClient is the client for the Container methods of the Azblob service. +type containerClient struct { + managementClient +} + +// newContainerClient creates an instance of the containerClient client. +func newContainerClient(url url.URL, p pipeline.Pipeline) containerClient { + return containerClient{newManagementClient(url, p)} +} + +// AcquireLease [Update] establishes and manages a lock on a container for delete operations. The lock duration can be +// 15 to 60 seconds, or can be infinite +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. duration is specifies the duration of the lease, in seconds, or negative +// one (-1) for a lease that never expires. A non-infinite lease can be between 15 and 60 seconds. A lease duration +// cannot be changed using renew or change. proposedLeaseID is proposed lease ID, in a GUID string format. The Blob +// service returns 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor +// (String) for a list of valid GUID string formats. ifModifiedSince is specify this header value to operate only on a +// blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to +// operate only on a blob if it has not been modified since the specified date/time. requestID is provides a +// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage +// analytics logging is enabled. +func (client containerClient) AcquireLease(ctx context.Context, timeout *int32, duration *int32, proposedLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, requestID *string) (*ContainerAcquireLeaseResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.acquireLeasePreparer(timeout, duration, proposedLeaseID, ifModifiedSince, ifUnmodifiedSince, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.acquireLeaseResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ContainerAcquireLeaseResponse), err +} + +// acquireLeasePreparer prepares the AcquireLease request. +func (client containerClient) acquireLeasePreparer(timeout *int32, duration *int32, proposedLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "lease") + params.Set("restype", "container") + req.URL.RawQuery = params.Encode() + if duration != nil { + req.Header.Set("x-ms-lease-duration", strconv.FormatInt(int64(*duration), 10)) + } + if proposedLeaseID != nil { + req.Header.Set("x-ms-proposed-lease-id", *proposedLeaseID) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-lease-action", "acquire") + return req, nil +} + +// acquireLeaseResponder handles the response to the AcquireLease request. +func (client containerClient) acquireLeaseResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &ContainerAcquireLeaseResponse{rawResponse: resp.Response()}, err +} + +// BreakLease [Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 +// to 60 seconds, or can be infinite +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. breakPeriod is for a break operation, proposed duration the lease should +// continue before it is broken, in seconds, between 0 and 60. This break period is only used if it is shorter than the +// time remaining on the lease. If longer, the time remaining on the lease is used. A new lease will not be available +// before the break period has expired, but the lease may be held for longer than the break period. If this header does +// not appear with a break operation, a fixed-duration lease breaks after the remaining lease period elapses, and an +// infinite lease breaks immediately. ifModifiedSince is specify this header value to operate only on a blob if it has +// been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a +// blob if it has not been modified since the specified date/time. requestID is provides a client-generated, opaque +// value with a 1 KB character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client containerClient) BreakLease(ctx context.Context, timeout *int32, breakPeriod *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, requestID *string) (*ContainerBreakLeaseResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.breakLeasePreparer(timeout, breakPeriod, ifModifiedSince, ifUnmodifiedSince, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.breakLeaseResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ContainerBreakLeaseResponse), err +} + +// breakLeasePreparer prepares the BreakLease request. +func (client containerClient) breakLeasePreparer(timeout *int32, breakPeriod *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "lease") + params.Set("restype", "container") + req.URL.RawQuery = params.Encode() + if breakPeriod != nil { + req.Header.Set("x-ms-lease-break-period", strconv.FormatInt(int64(*breakPeriod), 10)) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-lease-action", "break") + return req, nil +} + +// breakLeaseResponder handles the response to the BreakLease request. +func (client containerClient) breakLeaseResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusAccepted) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &ContainerBreakLeaseResponse{rawResponse: resp.Response()}, err +} + +// ChangeLease [Update] establishes and manages a lock on a container for delete operations. The lock duration can be +// 15 to 60 seconds, or can be infinite +// +// leaseID is specifies the current lease ID on the resource. proposedLeaseID is proposed lease ID, in a GUID string +// format. The Blob service returns 400 (Invalid request) if the proposed lease ID is not in the correct format. See +// Guid Constructor (String) for a list of valid GUID string formats. timeout is the timeout parameter is expressed in +// seconds. For more information, see Setting +// Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if +// it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only +// on a blob if it has not been modified since the specified date/time. requestID is provides a client-generated, +// opaque value with a 1 KB character limit that is recorded in the analytics logs when storage analytics logging is +// enabled. +func (client containerClient) ChangeLease(ctx context.Context, leaseID string, proposedLeaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, requestID *string) (*ContainerChangeLeaseResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.changeLeasePreparer(leaseID, proposedLeaseID, timeout, ifModifiedSince, ifUnmodifiedSince, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.changeLeaseResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ContainerChangeLeaseResponse), err +} + +// changeLeasePreparer prepares the ChangeLease request. +func (client containerClient) changeLeasePreparer(leaseID string, proposedLeaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "lease") + params.Set("restype", "container") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-lease-id", leaseID) + req.Header.Set("x-ms-proposed-lease-id", proposedLeaseID) + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-lease-action", "change") + return req, nil +} + +// changeLeaseResponder handles the response to the ChangeLease request. +func (client containerClient) changeLeaseResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &ContainerChangeLeaseResponse{rawResponse: resp.Response()}, err +} + +// Create creates a new container under the specified account. If the container with the same name already exists, the +// operation fails +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. metadata is optional. Specifies a user-defined name-value pair associated +// with the blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or +// file to the destination blob. If one or more name-value pairs are specified, the destination blob is created with +// the specified metadata, and metadata is not copied from the source blob or file. Note that beginning with version +// 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing +// Containers, Blobs, and Metadata for more information. access is specifies whether data in the container may be +// accessed publicly and the level of access requestID is provides a client-generated, opaque value with a 1 KB +// character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client containerClient) Create(ctx context.Context, timeout *int32, metadata map[string]string, access PublicAccessType, requestID *string) (*ContainerCreateResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.createPreparer(timeout, metadata, access, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.createResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ContainerCreateResponse), err +} + +// createPreparer prepares the Create request. +func (client containerClient) createPreparer(timeout *int32, metadata map[string]string, access PublicAccessType, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("restype", "container") + req.URL.RawQuery = params.Encode() + if metadata != nil { + for k, v := range metadata { + req.Header.Set("x-ms-meta-"+k, v) + } + } + if access != PublicAccessNone { + req.Header.Set("x-ms-blob-public-access", string(access)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// createResponder handles the response to the Create request. +func (client containerClient) createResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &ContainerCreateResponse{rawResponse: resp.Response()}, err +} + +// Delete operation marks the specified container for deletion. The container and any blobs contained within it are +// later deleted during garbage collection +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a blob if it +// has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a +// blob if it has not been modified since the specified date/time. requestID is provides a client-generated, opaque +// value with a 1 KB character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client containerClient) Delete(ctx context.Context, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, requestID *string) (*ContainerDeleteResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.deletePreparer(timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.deleteResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ContainerDeleteResponse), err +} + +// deletePreparer prepares the Delete request. +func (client containerClient) deletePreparer(timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("DELETE", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("restype", "container") + req.URL.RawQuery = params.Encode() + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// deleteResponder handles the response to the Delete request. +func (client containerClient) deleteResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusAccepted) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &ContainerDeleteResponse{rawResponse: resp.Response()}, err +} + +// GetAccessPolicy gets the permissions for the specified container. The permissions indicate whether container data +// may be accessed publicly. +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character +// limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client containerClient) GetAccessPolicy(ctx context.Context, timeout *int32, leaseID *string, requestID *string) (*SignedIdentifiers, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.getAccessPolicyPreparer(timeout, leaseID, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getAccessPolicyResponder}, req) + if err != nil { + return nil, err + } + return resp.(*SignedIdentifiers), err +} + +// getAccessPolicyPreparer prepares the GetAccessPolicy request. +func (client containerClient) getAccessPolicyPreparer(timeout *int32, leaseID *string, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("restype", "container") + params.Set("comp", "acl") + req.URL.RawQuery = params.Encode() + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// getAccessPolicyResponder handles the response to the GetAccessPolicy request. +func (client containerClient) getAccessPolicyResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + result := &SignedIdentifiers{rawResponse: resp.Response()} + if err != nil { + return result, err + } + defer resp.Response().Body.Close() + b, err := ioutil.ReadAll(resp.Response().Body) + if err != nil { + return result, err + } + if len(b) > 0 { + b = removeBOM(b) + err = xml.Unmarshal(b, result) + if err != nil { + return result, NewResponseError(err, resp.Response(), "failed to unmarshal response body") + } + } + return result, nil +} + +// GetAccountInfo returns the sku name and account kind +func (client containerClient) GetAccountInfo(ctx context.Context) (*ContainerGetAccountInfoResponse, error) { + req, err := client.getAccountInfoPreparer() + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getAccountInfoResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ContainerGetAccountInfoResponse), err +} + +// getAccountInfoPreparer prepares the GetAccountInfo request. +func (client containerClient) getAccountInfoPreparer() (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + params.Set("restype", "account") + params.Set("comp", "properties") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-version", ServiceVersion) + return req, nil +} + +// getAccountInfoResponder handles the response to the GetAccountInfo request. +func (client containerClient) getAccountInfoResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &ContainerGetAccountInfoResponse{rawResponse: resp.Response()}, err +} + +// GetProperties returns all user-defined metadata and system properties for the specified container. The data returned +// does not include the container's list of blobs +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character +// limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client containerClient) GetProperties(ctx context.Context, timeout *int32, leaseID *string, requestID *string) (*ContainerGetPropertiesResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.getPropertiesPreparer(timeout, leaseID, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getPropertiesResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ContainerGetPropertiesResponse), err +} + +// getPropertiesPreparer prepares the GetProperties request. +func (client containerClient) getPropertiesPreparer(timeout *int32, leaseID *string, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("restype", "container") + req.URL.RawQuery = params.Encode() + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// getPropertiesResponder handles the response to the GetProperties request. +func (client containerClient) getPropertiesResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &ContainerGetPropertiesResponse{rawResponse: resp.Response()}, err +} + +// ListBlobFlatSegment [Update] The List Blobs operation returns a list of the blobs under the specified container +// +// prefix is filters the results to return only containers whose name begins with the specified prefix. marker is a +// string value that identifies the portion of the list of containers to be returned with the next listing operation. +// The operation returns the NextMarker value within the response body if the listing operation did not return all +// containers remaining to be listed with the current page. The NextMarker value can be used as the value for the +// marker parameter in a subsequent call to request the next page of list items. The marker value is opaque to the +// client. maxresults is specifies the maximum number of containers to return. If the request does not specify +// maxresults, or specifies a value greater than 5000, the server will return up to 5000 items. Note that if the +// listing operation crosses a partition boundary, then the service will return a continuation token for retrieving the +// remainder of the results. For this reason, it is possible that the service will return fewer results than specified +// by maxresults, or than the default of 5000. include is include this parameter to specify one or more datasets to +// include in the response. timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB +// character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client containerClient) ListBlobFlatSegment(ctx context.Context, prefix *string, marker *string, maxresults *int32, include []ListBlobsIncludeItemType, timeout *int32, requestID *string) (*ListBlobsFlatSegmentResponse, error) { + if err := validate([]validation{ + {targetValue: maxresults, + constraints: []constraint{{target: "maxresults", name: null, rule: false, + chain: []constraint{{target: "maxresults", name: inclusiveMinimum, rule: 1, chain: nil}}}}}, + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.listBlobFlatSegmentPreparer(prefix, marker, maxresults, include, timeout, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.listBlobFlatSegmentResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ListBlobsFlatSegmentResponse), err +} + +// listBlobFlatSegmentPreparer prepares the ListBlobFlatSegment request. +func (client containerClient) listBlobFlatSegmentPreparer(prefix *string, marker *string, maxresults *int32, include []ListBlobsIncludeItemType, timeout *int32, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if prefix != nil && len(*prefix) > 0 { + params.Set("prefix", *prefix) + } + if marker != nil && len(*marker) > 0 { + params.Set("marker", *marker) + } + if maxresults != nil { + params.Set("maxresults", strconv.FormatInt(int64(*maxresults), 10)) + } + if include != nil && len(include) > 0 { + params.Set("include", joinConst(include, ",")) + } + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("restype", "container") + params.Set("comp", "list") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// listBlobFlatSegmentResponder handles the response to the ListBlobFlatSegment request. +func (client containerClient) listBlobFlatSegmentResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + result := &ListBlobsFlatSegmentResponse{rawResponse: resp.Response()} + if err != nil { + return result, err + } + defer resp.Response().Body.Close() + b, err := ioutil.ReadAll(resp.Response().Body) + if err != nil { + return result, err + } + if len(b) > 0 { + b = removeBOM(b) + err = xml.Unmarshal(b, result) + if err != nil { + return result, NewResponseError(err, resp.Response(), "failed to unmarshal response body") + } + } + return result, nil +} + +// ListBlobHierarchySegment [Update] The List Blobs operation returns a list of the blobs under the specified container +// +// delimiter is when the request includes this parameter, the operation returns a BlobPrefix element in the response +// body that acts as a placeholder for all blobs whose names begin with the same substring up to the appearance of the +// delimiter character. The delimiter may be a single character or a string. prefix is filters the results to return +// only containers whose name begins with the specified prefix. marker is a string value that identifies the portion of +// the list of containers to be returned with the next listing operation. The operation returns the NextMarker value +// within the response body if the listing operation did not return all containers remaining to be listed with the +// current page. The NextMarker value can be used as the value for the marker parameter in a subsequent call to request +// the next page of list items. The marker value is opaque to the client. maxresults is specifies the maximum number of +// containers to return. If the request does not specify maxresults, or specifies a value greater than 5000, the server +// will return up to 5000 items. Note that if the listing operation crosses a partition boundary, then the service will +// return a continuation token for retrieving the remainder of the results. For this reason, it is possible that the +// service will return fewer results than specified by maxresults, or than the default of 5000. include is include this +// parameter to specify one or more datasets to include in the response. timeout is the timeout parameter is expressed +// in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB +// character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client containerClient) ListBlobHierarchySegment(ctx context.Context, delimiter string, prefix *string, marker *string, maxresults *int32, include []ListBlobsIncludeItemType, timeout *int32, requestID *string) (*ListBlobsHierarchySegmentResponse, error) { + if err := validate([]validation{ + {targetValue: maxresults, + constraints: []constraint{{target: "maxresults", name: null, rule: false, + chain: []constraint{{target: "maxresults", name: inclusiveMinimum, rule: 1, chain: nil}}}}}, + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.listBlobHierarchySegmentPreparer(delimiter, prefix, marker, maxresults, include, timeout, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.listBlobHierarchySegmentResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ListBlobsHierarchySegmentResponse), err +} + +// listBlobHierarchySegmentPreparer prepares the ListBlobHierarchySegment request. +func (client containerClient) listBlobHierarchySegmentPreparer(delimiter string, prefix *string, marker *string, maxresults *int32, include []ListBlobsIncludeItemType, timeout *int32, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if prefix != nil && len(*prefix) > 0 { + params.Set("prefix", *prefix) + } + params.Set("delimiter", delimiter) + if marker != nil && len(*marker) > 0 { + params.Set("marker", *marker) + } + if maxresults != nil { + params.Set("maxresults", strconv.FormatInt(int64(*maxresults), 10)) + } + if include != nil && len(include) > 0 { + params.Set("include", joinConst(include, ",")) + } + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("restype", "container") + params.Set("comp", "list") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// listBlobHierarchySegmentResponder handles the response to the ListBlobHierarchySegment request. +func (client containerClient) listBlobHierarchySegmentResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + result := &ListBlobsHierarchySegmentResponse{rawResponse: resp.Response()} + if err != nil { + return result, err + } + defer resp.Response().Body.Close() + b, err := ioutil.ReadAll(resp.Response().Body) + if err != nil { + return result, err + } + if len(b) > 0 { + b = removeBOM(b) + err = xml.Unmarshal(b, result) + if err != nil { + return result, NewResponseError(err, resp.Response(), "failed to unmarshal response body") + } + } + return result, nil +} + +// ReleaseLease [Update] establishes and manages a lock on a container for delete operations. The lock duration can be +// 15 to 60 seconds, or can be infinite +// +// leaseID is specifies the current lease ID on the resource. timeout is the timeout parameter is expressed in seconds. +// For more information, see Setting +// Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if +// it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only +// on a blob if it has not been modified since the specified date/time. requestID is provides a client-generated, +// opaque value with a 1 KB character limit that is recorded in the analytics logs when storage analytics logging is +// enabled. +func (client containerClient) ReleaseLease(ctx context.Context, leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, requestID *string) (*ContainerReleaseLeaseResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.releaseLeasePreparer(leaseID, timeout, ifModifiedSince, ifUnmodifiedSince, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.releaseLeaseResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ContainerReleaseLeaseResponse), err +} + +// releaseLeasePreparer prepares the ReleaseLease request. +func (client containerClient) releaseLeasePreparer(leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "lease") + params.Set("restype", "container") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-lease-id", leaseID) + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-lease-action", "release") + return req, nil +} + +// releaseLeaseResponder handles the response to the ReleaseLease request. +func (client containerClient) releaseLeaseResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &ContainerReleaseLeaseResponse{rawResponse: resp.Response()}, err +} + +// RenewLease [Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 +// to 60 seconds, or can be infinite +// +// leaseID is specifies the current lease ID on the resource. timeout is the timeout parameter is expressed in seconds. +// For more information, see Setting +// Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if +// it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only +// on a blob if it has not been modified since the specified date/time. requestID is provides a client-generated, +// opaque value with a 1 KB character limit that is recorded in the analytics logs when storage analytics logging is +// enabled. +func (client containerClient) RenewLease(ctx context.Context, leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, requestID *string) (*ContainerRenewLeaseResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.renewLeasePreparer(leaseID, timeout, ifModifiedSince, ifUnmodifiedSince, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.renewLeaseResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ContainerRenewLeaseResponse), err +} + +// renewLeasePreparer prepares the RenewLease request. +func (client containerClient) renewLeasePreparer(leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "lease") + params.Set("restype", "container") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-lease-id", leaseID) + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-lease-action", "renew") + return req, nil +} + +// renewLeaseResponder handles the response to the RenewLease request. +func (client containerClient) renewLeaseResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &ContainerRenewLeaseResponse{rawResponse: resp.Response()}, err +} + +// SetAccessPolicy sets the permissions for the specified container. The permissions indicate whether blobs in a +// container may be accessed publicly. +// +// containerACL is the acls for the container timeout is the timeout parameter is expressed in seconds. For more +// information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. access is specifies whether data in the container may be accessed publicly and +// the level of access ifModifiedSince is specify this header value to operate only on a blob if it has been modified +// since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has +// not been modified since the specified date/time. requestID is provides a client-generated, opaque value with a 1 KB +// character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client containerClient) SetAccessPolicy(ctx context.Context, containerACL []SignedIdentifier, timeout *int32, leaseID *string, access PublicAccessType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, requestID *string) (*ContainerSetAccessPolicyResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.setAccessPolicyPreparer(containerACL, timeout, leaseID, access, ifModifiedSince, ifUnmodifiedSince, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.setAccessPolicyResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ContainerSetAccessPolicyResponse), err +} + +// setAccessPolicyPreparer prepares the SetAccessPolicy request. +func (client containerClient) setAccessPolicyPreparer(containerACL []SignedIdentifier, timeout *int32, leaseID *string, access PublicAccessType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("restype", "container") + params.Set("comp", "acl") + req.URL.RawQuery = params.Encode() + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if access != PublicAccessNone { + req.Header.Set("x-ms-blob-public-access", string(access)) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + b, err := xml.Marshal(SignedIdentifiers{Items: containerACL}) + if err != nil { + return req, pipeline.NewError(err, "failed to marshal request body") + } + req.Header.Set("Content-Type", "application/xml") + err = req.SetBody(bytes.NewReader(b)) + if err != nil { + return req, pipeline.NewError(err, "failed to set request body") + } + return req, nil +} + +// setAccessPolicyResponder handles the response to the SetAccessPolicy request. +func (client containerClient) setAccessPolicyResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &ContainerSetAccessPolicyResponse{rawResponse: resp.Response()}, err +} + +// SetMetadata operation sets one or more user-defined name-value pairs for the specified container. +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. metadata is optional. Specifies a user-defined name-value pair associated with +// the blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or file to +// the destination blob. If one or more name-value pairs are specified, the destination blob is created with the +// specified metadata, and metadata is not copied from the source blob or file. Note that beginning with version +// 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing +// Containers, Blobs, and Metadata for more information. ifModifiedSince is specify this header value to operate only +// on a blob if it has been modified since the specified date/time. requestID is provides a client-generated, opaque +// value with a 1 KB character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client containerClient) SetMetadata(ctx context.Context, timeout *int32, leaseID *string, metadata map[string]string, ifModifiedSince *time.Time, requestID *string) (*ContainerSetMetadataResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.setMetadataPreparer(timeout, leaseID, metadata, ifModifiedSince, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.setMetadataResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ContainerSetMetadataResponse), err +} + +// setMetadataPreparer prepares the SetMetadata request. +func (client containerClient) setMetadataPreparer(timeout *int32, leaseID *string, metadata map[string]string, ifModifiedSince *time.Time, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("restype", "container") + params.Set("comp", "metadata") + req.URL.RawQuery = params.Encode() + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if metadata != nil { + for k, v := range metadata { + req.Header.Set("x-ms-meta-"+k, v) + } + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// setMetadataResponder handles the response to the SetMetadata request. +func (client containerClient) setMetadataResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &ContainerSetMetadataResponse{rawResponse: resp.Response()}, err +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_models.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_models.go new file mode 100644 index 000000000..391584969 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_models.go @@ -0,0 +1,5202 @@ +package azblob + +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "crypto/hmac" + "crypto/sha256" + "encoding/base64" + "encoding/xml" + "errors" + "io" + "net/http" + "reflect" + "strconv" + "strings" + "time" + "unsafe" +) + +// ETag is an entity tag. +type ETag string + +const ( + // ETagNone represents an empty entity tag. + ETagNone ETag = "" + + // ETagAny matches any entity tag. + ETagAny ETag = "*" +) + +// Metadata contains metadata key/value pairs. +type Metadata map[string]string + +const mdPrefix = "x-ms-meta-" + +const mdPrefixLen = len(mdPrefix) + +// UnmarshalXML implements the xml.Unmarshaler interface for Metadata. +func (md *Metadata) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { + tokName := "" + for t, err := d.Token(); err == nil; t, err = d.Token() { + switch tt := t.(type) { + case xml.StartElement: + tokName = strings.ToLower(tt.Name.Local) + break + case xml.CharData: + if *md == nil { + *md = Metadata{} + } + (*md)[tokName] = string(tt) + break + } + } + return nil +} + +// Marker represents an opaque value used in paged responses. +type Marker struct { + Val *string +} + +// NotDone returns true if the list enumeration should be started or is not yet complete. Specifically, NotDone returns true +// for a just-initialized (zero value) Marker indicating that you should make an initial request to get a result portion from +// the service. NotDone also returns true whenever the service returns an interim result portion. NotDone returns false only +// after the service has returned the final result portion. +func (m Marker) NotDone() bool { + return m.Val == nil || *m.Val != "" +} + +// UnmarshalXML implements the xml.Unmarshaler interface for Marker. +func (m *Marker) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { + var out string + err := d.DecodeElement(&out, &start) + m.Val = &out + return err +} + +// concatenates a slice of const values with the specified separator between each item +func joinConst(s interface{}, sep string) string { + v := reflect.ValueOf(s) + if v.Kind() != reflect.Slice && v.Kind() != reflect.Array { + panic("s wasn't a slice or array") + } + ss := make([]string, 0, v.Len()) + for i := 0; i < v.Len(); i++ { + ss = append(ss, v.Index(i).String()) + } + return strings.Join(ss, sep) +} + +func validateError(err error) { + if err != nil { + panic(err) + } +} + +// AccessTierType enumerates the values for access tier type. +type AccessTierType string + +const ( + // AccessTierArchive ... + AccessTierArchive AccessTierType = "Archive" + // AccessTierCool ... + AccessTierCool AccessTierType = "Cool" + // AccessTierHot ... + AccessTierHot AccessTierType = "Hot" + // AccessTierNone represents an empty AccessTierType. + AccessTierNone AccessTierType = "" + // AccessTierP10 ... + AccessTierP10 AccessTierType = "P10" + // AccessTierP20 ... + AccessTierP20 AccessTierType = "P20" + // AccessTierP30 ... + AccessTierP30 AccessTierType = "P30" + // AccessTierP4 ... + AccessTierP4 AccessTierType = "P4" + // AccessTierP40 ... + AccessTierP40 AccessTierType = "P40" + // AccessTierP50 ... + AccessTierP50 AccessTierType = "P50" + // AccessTierP6 ... + AccessTierP6 AccessTierType = "P6" +) + +// PossibleAccessTierTypeValues returns an array of possible values for the AccessTierType const type. +func PossibleAccessTierTypeValues() []AccessTierType { + return []AccessTierType{AccessTierArchive, AccessTierCool, AccessTierHot, AccessTierNone, AccessTierP10, AccessTierP20, AccessTierP30, AccessTierP4, AccessTierP40, AccessTierP50, AccessTierP6} +} + +// AccountKindType enumerates the values for account kind type. +type AccountKindType string + +const ( + // AccountKindBlobStorage ... + AccountKindBlobStorage AccountKindType = "BlobStorage" + // AccountKindNone represents an empty AccountKindType. + AccountKindNone AccountKindType = "" + // AccountKindStorage ... + AccountKindStorage AccountKindType = "Storage" + // AccountKindStorageV2 ... + AccountKindStorageV2 AccountKindType = "StorageV2" +) + +// PossibleAccountKindTypeValues returns an array of possible values for the AccountKindType const type. +func PossibleAccountKindTypeValues() []AccountKindType { + return []AccountKindType{AccountKindBlobStorage, AccountKindNone, AccountKindStorage, AccountKindStorageV2} +} + +// ArchiveStatusType enumerates the values for archive status type. +type ArchiveStatusType string + +const ( + // ArchiveStatusNone represents an empty ArchiveStatusType. + ArchiveStatusNone ArchiveStatusType = "" + // ArchiveStatusRehydratePendingToCool ... + ArchiveStatusRehydratePendingToCool ArchiveStatusType = "rehydrate-pending-to-cool" + // ArchiveStatusRehydratePendingToHot ... + ArchiveStatusRehydratePendingToHot ArchiveStatusType = "rehydrate-pending-to-hot" +) + +// PossibleArchiveStatusTypeValues returns an array of possible values for the ArchiveStatusType const type. +func PossibleArchiveStatusTypeValues() []ArchiveStatusType { + return []ArchiveStatusType{ArchiveStatusNone, ArchiveStatusRehydratePendingToCool, ArchiveStatusRehydratePendingToHot} +} + +// BlobType enumerates the values for blob type. +type BlobType string + +const ( + // BlobAppendBlob ... + BlobAppendBlob BlobType = "AppendBlob" + // BlobBlockBlob ... + BlobBlockBlob BlobType = "BlockBlob" + // BlobNone represents an empty BlobType. + BlobNone BlobType = "" + // BlobPageBlob ... + BlobPageBlob BlobType = "PageBlob" +) + +// PossibleBlobTypeValues returns an array of possible values for the BlobType const type. +func PossibleBlobTypeValues() []BlobType { + return []BlobType{BlobAppendBlob, BlobBlockBlob, BlobNone, BlobPageBlob} +} + +// BlockListType enumerates the values for block list type. +type BlockListType string + +const ( + // BlockListAll ... + BlockListAll BlockListType = "all" + // BlockListCommitted ... + BlockListCommitted BlockListType = "committed" + // BlockListNone represents an empty BlockListType. + BlockListNone BlockListType = "" + // BlockListUncommitted ... + BlockListUncommitted BlockListType = "uncommitted" +) + +// PossibleBlockListTypeValues returns an array of possible values for the BlockListType const type. +func PossibleBlockListTypeValues() []BlockListType { + return []BlockListType{BlockListAll, BlockListCommitted, BlockListNone, BlockListUncommitted} +} + +// CopyStatusType enumerates the values for copy status type. +type CopyStatusType string + +const ( + // CopyStatusAborted ... + CopyStatusAborted CopyStatusType = "aborted" + // CopyStatusFailed ... + CopyStatusFailed CopyStatusType = "failed" + // CopyStatusNone represents an empty CopyStatusType. + CopyStatusNone CopyStatusType = "" + // CopyStatusPending ... + CopyStatusPending CopyStatusType = "pending" + // CopyStatusSuccess ... + CopyStatusSuccess CopyStatusType = "success" +) + +// PossibleCopyStatusTypeValues returns an array of possible values for the CopyStatusType const type. +func PossibleCopyStatusTypeValues() []CopyStatusType { + return []CopyStatusType{CopyStatusAborted, CopyStatusFailed, CopyStatusNone, CopyStatusPending, CopyStatusSuccess} +} + +// DeleteSnapshotsOptionType enumerates the values for delete snapshots option type. +type DeleteSnapshotsOptionType string + +const ( + // DeleteSnapshotsOptionInclude ... + DeleteSnapshotsOptionInclude DeleteSnapshotsOptionType = "include" + // DeleteSnapshotsOptionNone represents an empty DeleteSnapshotsOptionType. + DeleteSnapshotsOptionNone DeleteSnapshotsOptionType = "" + // DeleteSnapshotsOptionOnly ... + DeleteSnapshotsOptionOnly DeleteSnapshotsOptionType = "only" +) + +// PossibleDeleteSnapshotsOptionTypeValues returns an array of possible values for the DeleteSnapshotsOptionType const type. +func PossibleDeleteSnapshotsOptionTypeValues() []DeleteSnapshotsOptionType { + return []DeleteSnapshotsOptionType{DeleteSnapshotsOptionInclude, DeleteSnapshotsOptionNone, DeleteSnapshotsOptionOnly} +} + +// GeoReplicationStatusType enumerates the values for geo replication status type. +type GeoReplicationStatusType string + +const ( + // GeoReplicationStatusBootstrap ... + GeoReplicationStatusBootstrap GeoReplicationStatusType = "bootstrap" + // GeoReplicationStatusLive ... + GeoReplicationStatusLive GeoReplicationStatusType = "live" + // GeoReplicationStatusNone represents an empty GeoReplicationStatusType. + GeoReplicationStatusNone GeoReplicationStatusType = "" + // GeoReplicationStatusUnavailable ... + GeoReplicationStatusUnavailable GeoReplicationStatusType = "unavailable" +) + +// PossibleGeoReplicationStatusTypeValues returns an array of possible values for the GeoReplicationStatusType const type. +func PossibleGeoReplicationStatusTypeValues() []GeoReplicationStatusType { + return []GeoReplicationStatusType{GeoReplicationStatusBootstrap, GeoReplicationStatusLive, GeoReplicationStatusNone, GeoReplicationStatusUnavailable} +} + +// LeaseDurationType enumerates the values for lease duration type. +type LeaseDurationType string + +const ( + // LeaseDurationFixed ... + LeaseDurationFixed LeaseDurationType = "fixed" + // LeaseDurationInfinite ... + LeaseDurationInfinite LeaseDurationType = "infinite" + // LeaseDurationNone represents an empty LeaseDurationType. + LeaseDurationNone LeaseDurationType = "" +) + +// PossibleLeaseDurationTypeValues returns an array of possible values for the LeaseDurationType const type. +func PossibleLeaseDurationTypeValues() []LeaseDurationType { + return []LeaseDurationType{LeaseDurationFixed, LeaseDurationInfinite, LeaseDurationNone} +} + +// LeaseStateType enumerates the values for lease state type. +type LeaseStateType string + +const ( + // LeaseStateAvailable ... + LeaseStateAvailable LeaseStateType = "available" + // LeaseStateBreaking ... + LeaseStateBreaking LeaseStateType = "breaking" + // LeaseStateBroken ... + LeaseStateBroken LeaseStateType = "broken" + // LeaseStateExpired ... + LeaseStateExpired LeaseStateType = "expired" + // LeaseStateLeased ... + LeaseStateLeased LeaseStateType = "leased" + // LeaseStateNone represents an empty LeaseStateType. + LeaseStateNone LeaseStateType = "" +) + +// PossibleLeaseStateTypeValues returns an array of possible values for the LeaseStateType const type. +func PossibleLeaseStateTypeValues() []LeaseStateType { + return []LeaseStateType{LeaseStateAvailable, LeaseStateBreaking, LeaseStateBroken, LeaseStateExpired, LeaseStateLeased, LeaseStateNone} +} + +// LeaseStatusType enumerates the values for lease status type. +type LeaseStatusType string + +const ( + // LeaseStatusLocked ... + LeaseStatusLocked LeaseStatusType = "locked" + // LeaseStatusNone represents an empty LeaseStatusType. + LeaseStatusNone LeaseStatusType = "" + // LeaseStatusUnlocked ... + LeaseStatusUnlocked LeaseStatusType = "unlocked" +) + +// PossibleLeaseStatusTypeValues returns an array of possible values for the LeaseStatusType const type. +func PossibleLeaseStatusTypeValues() []LeaseStatusType { + return []LeaseStatusType{LeaseStatusLocked, LeaseStatusNone, LeaseStatusUnlocked} +} + +// ListBlobsIncludeItemType enumerates the values for list blobs include item type. +type ListBlobsIncludeItemType string + +const ( + // ListBlobsIncludeItemCopy ... + ListBlobsIncludeItemCopy ListBlobsIncludeItemType = "copy" + // ListBlobsIncludeItemDeleted ... + ListBlobsIncludeItemDeleted ListBlobsIncludeItemType = "deleted" + // ListBlobsIncludeItemMetadata ... + ListBlobsIncludeItemMetadata ListBlobsIncludeItemType = "metadata" + // ListBlobsIncludeItemNone represents an empty ListBlobsIncludeItemType. + ListBlobsIncludeItemNone ListBlobsIncludeItemType = "" + // ListBlobsIncludeItemSnapshots ... + ListBlobsIncludeItemSnapshots ListBlobsIncludeItemType = "snapshots" + // ListBlobsIncludeItemUncommittedblobs ... + ListBlobsIncludeItemUncommittedblobs ListBlobsIncludeItemType = "uncommittedblobs" +) + +// PossibleListBlobsIncludeItemTypeValues returns an array of possible values for the ListBlobsIncludeItemType const type. +func PossibleListBlobsIncludeItemTypeValues() []ListBlobsIncludeItemType { + return []ListBlobsIncludeItemType{ListBlobsIncludeItemCopy, ListBlobsIncludeItemDeleted, ListBlobsIncludeItemMetadata, ListBlobsIncludeItemNone, ListBlobsIncludeItemSnapshots, ListBlobsIncludeItemUncommittedblobs} +} + +// ListContainersIncludeType enumerates the values for list containers include type. +type ListContainersIncludeType string + +const ( + // ListContainersIncludeMetadata ... + ListContainersIncludeMetadata ListContainersIncludeType = "metadata" + // ListContainersIncludeNone represents an empty ListContainersIncludeType. + ListContainersIncludeNone ListContainersIncludeType = "" +) + +// PossibleListContainersIncludeTypeValues returns an array of possible values for the ListContainersIncludeType const type. +func PossibleListContainersIncludeTypeValues() []ListContainersIncludeType { + return []ListContainersIncludeType{ListContainersIncludeMetadata, ListContainersIncludeNone} +} + +// PublicAccessType enumerates the values for public access type. +type PublicAccessType string + +const ( + // PublicAccessBlob ... + PublicAccessBlob PublicAccessType = "blob" + // PublicAccessContainer ... + PublicAccessContainer PublicAccessType = "container" + // PublicAccessNone represents an empty PublicAccessType. + PublicAccessNone PublicAccessType = "" +) + +// PossiblePublicAccessTypeValues returns an array of possible values for the PublicAccessType const type. +func PossiblePublicAccessTypeValues() []PublicAccessType { + return []PublicAccessType{PublicAccessBlob, PublicAccessContainer, PublicAccessNone} +} + +// SequenceNumberActionType enumerates the values for sequence number action type. +type SequenceNumberActionType string + +const ( + // SequenceNumberActionIncrement ... + SequenceNumberActionIncrement SequenceNumberActionType = "increment" + // SequenceNumberActionMax ... + SequenceNumberActionMax SequenceNumberActionType = "max" + // SequenceNumberActionNone represents an empty SequenceNumberActionType. + SequenceNumberActionNone SequenceNumberActionType = "" + // SequenceNumberActionUpdate ... + SequenceNumberActionUpdate SequenceNumberActionType = "update" +) + +// PossibleSequenceNumberActionTypeValues returns an array of possible values for the SequenceNumberActionType const type. +func PossibleSequenceNumberActionTypeValues() []SequenceNumberActionType { + return []SequenceNumberActionType{SequenceNumberActionIncrement, SequenceNumberActionMax, SequenceNumberActionNone, SequenceNumberActionUpdate} +} + +// SkuNameType enumerates the values for sku name type. +type SkuNameType string + +const ( + // SkuNameNone represents an empty SkuNameType. + SkuNameNone SkuNameType = "" + // SkuNamePremiumLRS ... + SkuNamePremiumLRS SkuNameType = "Premium_LRS" + // SkuNameStandardGRS ... + SkuNameStandardGRS SkuNameType = "Standard_GRS" + // SkuNameStandardLRS ... + SkuNameStandardLRS SkuNameType = "Standard_LRS" + // SkuNameStandardRAGRS ... + SkuNameStandardRAGRS SkuNameType = "Standard_RAGRS" + // SkuNameStandardZRS ... + SkuNameStandardZRS SkuNameType = "Standard_ZRS" +) + +// PossibleSkuNameTypeValues returns an array of possible values for the SkuNameType const type. +func PossibleSkuNameTypeValues() []SkuNameType { + return []SkuNameType{SkuNameNone, SkuNamePremiumLRS, SkuNameStandardGRS, SkuNameStandardLRS, SkuNameStandardRAGRS, SkuNameStandardZRS} +} + +// StorageErrorCodeType enumerates the values for storage error code type. +type StorageErrorCodeType string + +const ( + // StorageErrorCodeAccountAlreadyExists ... + StorageErrorCodeAccountAlreadyExists StorageErrorCodeType = "AccountAlreadyExists" + // StorageErrorCodeAccountBeingCreated ... + StorageErrorCodeAccountBeingCreated StorageErrorCodeType = "AccountBeingCreated" + // StorageErrorCodeAccountIsDisabled ... + StorageErrorCodeAccountIsDisabled StorageErrorCodeType = "AccountIsDisabled" + // StorageErrorCodeAppendPositionConditionNotMet ... + StorageErrorCodeAppendPositionConditionNotMet StorageErrorCodeType = "AppendPositionConditionNotMet" + // StorageErrorCodeAuthenticationFailed ... + StorageErrorCodeAuthenticationFailed StorageErrorCodeType = "AuthenticationFailed" + // StorageErrorCodeAuthorizationFailure ... + StorageErrorCodeAuthorizationFailure StorageErrorCodeType = "AuthorizationFailure" + // StorageErrorCodeBlobAlreadyExists ... + StorageErrorCodeBlobAlreadyExists StorageErrorCodeType = "BlobAlreadyExists" + // StorageErrorCodeBlobArchived ... + StorageErrorCodeBlobArchived StorageErrorCodeType = "BlobArchived" + // StorageErrorCodeBlobBeingRehydrated ... + StorageErrorCodeBlobBeingRehydrated StorageErrorCodeType = "BlobBeingRehydrated" + // StorageErrorCodeBlobNotArchived ... + StorageErrorCodeBlobNotArchived StorageErrorCodeType = "BlobNotArchived" + // StorageErrorCodeBlobNotFound ... + StorageErrorCodeBlobNotFound StorageErrorCodeType = "BlobNotFound" + // StorageErrorCodeBlobOverwritten ... + StorageErrorCodeBlobOverwritten StorageErrorCodeType = "BlobOverwritten" + // StorageErrorCodeBlobTierInadequateForContentLength ... + StorageErrorCodeBlobTierInadequateForContentLength StorageErrorCodeType = "BlobTierInadequateForContentLength" + // StorageErrorCodeBlockCountExceedsLimit ... + StorageErrorCodeBlockCountExceedsLimit StorageErrorCodeType = "BlockCountExceedsLimit" + // StorageErrorCodeBlockListTooLong ... + StorageErrorCodeBlockListTooLong StorageErrorCodeType = "BlockListTooLong" + // StorageErrorCodeCannotChangeToLowerTier ... + StorageErrorCodeCannotChangeToLowerTier StorageErrorCodeType = "CannotChangeToLowerTier" + // StorageErrorCodeCannotVerifyCopySource ... + StorageErrorCodeCannotVerifyCopySource StorageErrorCodeType = "CannotVerifyCopySource" + // StorageErrorCodeConditionHeadersNotSupported ... + StorageErrorCodeConditionHeadersNotSupported StorageErrorCodeType = "ConditionHeadersNotSupported" + // StorageErrorCodeConditionNotMet ... + StorageErrorCodeConditionNotMet StorageErrorCodeType = "ConditionNotMet" + // StorageErrorCodeContainerAlreadyExists ... + StorageErrorCodeContainerAlreadyExists StorageErrorCodeType = "ContainerAlreadyExists" + // StorageErrorCodeContainerBeingDeleted ... + StorageErrorCodeContainerBeingDeleted StorageErrorCodeType = "ContainerBeingDeleted" + // StorageErrorCodeContainerDisabled ... + StorageErrorCodeContainerDisabled StorageErrorCodeType = "ContainerDisabled" + // StorageErrorCodeContainerNotFound ... + StorageErrorCodeContainerNotFound StorageErrorCodeType = "ContainerNotFound" + // StorageErrorCodeContentLengthLargerThanTierLimit ... + StorageErrorCodeContentLengthLargerThanTierLimit StorageErrorCodeType = "ContentLengthLargerThanTierLimit" + // StorageErrorCodeCopyAcrossAccountsNotSupported ... + StorageErrorCodeCopyAcrossAccountsNotSupported StorageErrorCodeType = "CopyAcrossAccountsNotSupported" + // StorageErrorCodeCopyIDMismatch ... + StorageErrorCodeCopyIDMismatch StorageErrorCodeType = "CopyIdMismatch" + // StorageErrorCodeEmptyMetadataKey ... + StorageErrorCodeEmptyMetadataKey StorageErrorCodeType = "EmptyMetadataKey" + // StorageErrorCodeFeatureVersionMismatch ... + StorageErrorCodeFeatureVersionMismatch StorageErrorCodeType = "FeatureVersionMismatch" + // StorageErrorCodeIncrementalCopyBlobMismatch ... + StorageErrorCodeIncrementalCopyBlobMismatch StorageErrorCodeType = "IncrementalCopyBlobMismatch" + // StorageErrorCodeIncrementalCopyOfEralierVersionSnapshotNotAllowed ... + StorageErrorCodeIncrementalCopyOfEralierVersionSnapshotNotAllowed StorageErrorCodeType = "IncrementalCopyOfEralierVersionSnapshotNotAllowed" + // StorageErrorCodeIncrementalCopySourceMustBeSnapshot ... + StorageErrorCodeIncrementalCopySourceMustBeSnapshot StorageErrorCodeType = "IncrementalCopySourceMustBeSnapshot" + // StorageErrorCodeInfiniteLeaseDurationRequired ... + StorageErrorCodeInfiniteLeaseDurationRequired StorageErrorCodeType = "InfiniteLeaseDurationRequired" + // StorageErrorCodeInsufficientAccountPermissions ... + StorageErrorCodeInsufficientAccountPermissions StorageErrorCodeType = "InsufficientAccountPermissions" + // StorageErrorCodeInternalError ... + StorageErrorCodeInternalError StorageErrorCodeType = "InternalError" + // StorageErrorCodeInvalidAuthenticationInfo ... + StorageErrorCodeInvalidAuthenticationInfo StorageErrorCodeType = "InvalidAuthenticationInfo" + // StorageErrorCodeInvalidBlobOrBlock ... + StorageErrorCodeInvalidBlobOrBlock StorageErrorCodeType = "InvalidBlobOrBlock" + // StorageErrorCodeInvalidBlobTier ... + StorageErrorCodeInvalidBlobTier StorageErrorCodeType = "InvalidBlobTier" + // StorageErrorCodeInvalidBlobType ... + StorageErrorCodeInvalidBlobType StorageErrorCodeType = "InvalidBlobType" + // StorageErrorCodeInvalidBlockID ... + StorageErrorCodeInvalidBlockID StorageErrorCodeType = "InvalidBlockId" + // StorageErrorCodeInvalidBlockList ... + StorageErrorCodeInvalidBlockList StorageErrorCodeType = "InvalidBlockList" + // StorageErrorCodeInvalidHeaderValue ... + StorageErrorCodeInvalidHeaderValue StorageErrorCodeType = "InvalidHeaderValue" + // StorageErrorCodeInvalidHTTPVerb ... + StorageErrorCodeInvalidHTTPVerb StorageErrorCodeType = "InvalidHttpVerb" + // StorageErrorCodeInvalidInput ... + StorageErrorCodeInvalidInput StorageErrorCodeType = "InvalidInput" + // StorageErrorCodeInvalidMd5 ... + StorageErrorCodeInvalidMd5 StorageErrorCodeType = "InvalidMd5" + // StorageErrorCodeInvalidMetadata ... + StorageErrorCodeInvalidMetadata StorageErrorCodeType = "InvalidMetadata" + // StorageErrorCodeInvalidOperation ... + StorageErrorCodeInvalidOperation StorageErrorCodeType = "InvalidOperation" + // StorageErrorCodeInvalidPageRange ... + StorageErrorCodeInvalidPageRange StorageErrorCodeType = "InvalidPageRange" + // StorageErrorCodeInvalidQueryParameterValue ... + StorageErrorCodeInvalidQueryParameterValue StorageErrorCodeType = "InvalidQueryParameterValue" + // StorageErrorCodeInvalidRange ... + StorageErrorCodeInvalidRange StorageErrorCodeType = "InvalidRange" + // StorageErrorCodeInvalidResourceName ... + StorageErrorCodeInvalidResourceName StorageErrorCodeType = "InvalidResourceName" + // StorageErrorCodeInvalidSourceBlobType ... + StorageErrorCodeInvalidSourceBlobType StorageErrorCodeType = "InvalidSourceBlobType" + // StorageErrorCodeInvalidSourceBlobURL ... + StorageErrorCodeInvalidSourceBlobURL StorageErrorCodeType = "InvalidSourceBlobUrl" + // StorageErrorCodeInvalidURI ... + StorageErrorCodeInvalidURI StorageErrorCodeType = "InvalidUri" + // StorageErrorCodeInvalidVersionForPageBlobOperation ... + StorageErrorCodeInvalidVersionForPageBlobOperation StorageErrorCodeType = "InvalidVersionForPageBlobOperation" + // StorageErrorCodeInvalidXMLDocument ... + StorageErrorCodeInvalidXMLDocument StorageErrorCodeType = "InvalidXmlDocument" + // StorageErrorCodeInvalidXMLNodeValue ... + StorageErrorCodeInvalidXMLNodeValue StorageErrorCodeType = "InvalidXmlNodeValue" + // StorageErrorCodeLeaseAlreadyBroken ... + StorageErrorCodeLeaseAlreadyBroken StorageErrorCodeType = "LeaseAlreadyBroken" + // StorageErrorCodeLeaseAlreadyPresent ... + StorageErrorCodeLeaseAlreadyPresent StorageErrorCodeType = "LeaseAlreadyPresent" + // StorageErrorCodeLeaseIDMismatchWithBlobOperation ... + StorageErrorCodeLeaseIDMismatchWithBlobOperation StorageErrorCodeType = "LeaseIdMismatchWithBlobOperation" + // StorageErrorCodeLeaseIDMismatchWithContainerOperation ... + StorageErrorCodeLeaseIDMismatchWithContainerOperation StorageErrorCodeType = "LeaseIdMismatchWithContainerOperation" + // StorageErrorCodeLeaseIDMismatchWithLeaseOperation ... + StorageErrorCodeLeaseIDMismatchWithLeaseOperation StorageErrorCodeType = "LeaseIdMismatchWithLeaseOperation" + // StorageErrorCodeLeaseIDMissing ... + StorageErrorCodeLeaseIDMissing StorageErrorCodeType = "LeaseIdMissing" + // StorageErrorCodeLeaseIsBreakingAndCannotBeAcquired ... + StorageErrorCodeLeaseIsBreakingAndCannotBeAcquired StorageErrorCodeType = "LeaseIsBreakingAndCannotBeAcquired" + // StorageErrorCodeLeaseIsBreakingAndCannotBeChanged ... + StorageErrorCodeLeaseIsBreakingAndCannotBeChanged StorageErrorCodeType = "LeaseIsBreakingAndCannotBeChanged" + // StorageErrorCodeLeaseIsBrokenAndCannotBeRenewed ... + StorageErrorCodeLeaseIsBrokenAndCannotBeRenewed StorageErrorCodeType = "LeaseIsBrokenAndCannotBeRenewed" + // StorageErrorCodeLeaseLost ... + StorageErrorCodeLeaseLost StorageErrorCodeType = "LeaseLost" + // StorageErrorCodeLeaseNotPresentWithBlobOperation ... + StorageErrorCodeLeaseNotPresentWithBlobOperation StorageErrorCodeType = "LeaseNotPresentWithBlobOperation" + // StorageErrorCodeLeaseNotPresentWithContainerOperation ... + StorageErrorCodeLeaseNotPresentWithContainerOperation StorageErrorCodeType = "LeaseNotPresentWithContainerOperation" + // StorageErrorCodeLeaseNotPresentWithLeaseOperation ... + StorageErrorCodeLeaseNotPresentWithLeaseOperation StorageErrorCodeType = "LeaseNotPresentWithLeaseOperation" + // StorageErrorCodeMaxBlobSizeConditionNotMet ... + StorageErrorCodeMaxBlobSizeConditionNotMet StorageErrorCodeType = "MaxBlobSizeConditionNotMet" + // StorageErrorCodeMd5Mismatch ... + StorageErrorCodeMd5Mismatch StorageErrorCodeType = "Md5Mismatch" + // StorageErrorCodeMetadataTooLarge ... + StorageErrorCodeMetadataTooLarge StorageErrorCodeType = "MetadataTooLarge" + // StorageErrorCodeMissingContentLengthHeader ... + StorageErrorCodeMissingContentLengthHeader StorageErrorCodeType = "MissingContentLengthHeader" + // StorageErrorCodeMissingRequiredHeader ... + StorageErrorCodeMissingRequiredHeader StorageErrorCodeType = "MissingRequiredHeader" + // StorageErrorCodeMissingRequiredQueryParameter ... + StorageErrorCodeMissingRequiredQueryParameter StorageErrorCodeType = "MissingRequiredQueryParameter" + // StorageErrorCodeMissingRequiredXMLNode ... + StorageErrorCodeMissingRequiredXMLNode StorageErrorCodeType = "MissingRequiredXmlNode" + // StorageErrorCodeMultipleConditionHeadersNotSupported ... + StorageErrorCodeMultipleConditionHeadersNotSupported StorageErrorCodeType = "MultipleConditionHeadersNotSupported" + // StorageErrorCodeNone represents an empty StorageErrorCodeType. + StorageErrorCodeNone StorageErrorCodeType = "" + // StorageErrorCodeNoPendingCopyOperation ... + StorageErrorCodeNoPendingCopyOperation StorageErrorCodeType = "NoPendingCopyOperation" + // StorageErrorCodeOperationNotAllowedOnIncrementalCopyBlob ... + StorageErrorCodeOperationNotAllowedOnIncrementalCopyBlob StorageErrorCodeType = "OperationNotAllowedOnIncrementalCopyBlob" + // StorageErrorCodeOperationTimedOut ... + StorageErrorCodeOperationTimedOut StorageErrorCodeType = "OperationTimedOut" + // StorageErrorCodeOutOfRangeInput ... + StorageErrorCodeOutOfRangeInput StorageErrorCodeType = "OutOfRangeInput" + // StorageErrorCodeOutOfRangeQueryParameterValue ... + StorageErrorCodeOutOfRangeQueryParameterValue StorageErrorCodeType = "OutOfRangeQueryParameterValue" + // StorageErrorCodePendingCopyOperation ... + StorageErrorCodePendingCopyOperation StorageErrorCodeType = "PendingCopyOperation" + // StorageErrorCodePreviousSnapshotCannotBeNewer ... + StorageErrorCodePreviousSnapshotCannotBeNewer StorageErrorCodeType = "PreviousSnapshotCannotBeNewer" + // StorageErrorCodePreviousSnapshotNotFound ... + StorageErrorCodePreviousSnapshotNotFound StorageErrorCodeType = "PreviousSnapshotNotFound" + // StorageErrorCodePreviousSnapshotOperationNotSupported ... + StorageErrorCodePreviousSnapshotOperationNotSupported StorageErrorCodeType = "PreviousSnapshotOperationNotSupported" + // StorageErrorCodeRequestBodyTooLarge ... + StorageErrorCodeRequestBodyTooLarge StorageErrorCodeType = "RequestBodyTooLarge" + // StorageErrorCodeRequestURLFailedToParse ... + StorageErrorCodeRequestURLFailedToParse StorageErrorCodeType = "RequestUrlFailedToParse" + // StorageErrorCodeResourceAlreadyExists ... + StorageErrorCodeResourceAlreadyExists StorageErrorCodeType = "ResourceAlreadyExists" + // StorageErrorCodeResourceNotFound ... + StorageErrorCodeResourceNotFound StorageErrorCodeType = "ResourceNotFound" + // StorageErrorCodeResourceTypeMismatch ... + StorageErrorCodeResourceTypeMismatch StorageErrorCodeType = "ResourceTypeMismatch" + // StorageErrorCodeSequenceNumberConditionNotMet ... + StorageErrorCodeSequenceNumberConditionNotMet StorageErrorCodeType = "SequenceNumberConditionNotMet" + // StorageErrorCodeSequenceNumberIncrementTooLarge ... + StorageErrorCodeSequenceNumberIncrementTooLarge StorageErrorCodeType = "SequenceNumberIncrementTooLarge" + // StorageErrorCodeServerBusy ... + StorageErrorCodeServerBusy StorageErrorCodeType = "ServerBusy" + // StorageErrorCodeSnaphotOperationRateExceeded ... + StorageErrorCodeSnaphotOperationRateExceeded StorageErrorCodeType = "SnaphotOperationRateExceeded" + // StorageErrorCodeSnapshotCountExceeded ... + StorageErrorCodeSnapshotCountExceeded StorageErrorCodeType = "SnapshotCountExceeded" + // StorageErrorCodeSnapshotsPresent ... + StorageErrorCodeSnapshotsPresent StorageErrorCodeType = "SnapshotsPresent" + // StorageErrorCodeSourceConditionNotMet ... + StorageErrorCodeSourceConditionNotMet StorageErrorCodeType = "SourceConditionNotMet" + // StorageErrorCodeSystemInUse ... + StorageErrorCodeSystemInUse StorageErrorCodeType = "SystemInUse" + // StorageErrorCodeTargetConditionNotMet ... + StorageErrorCodeTargetConditionNotMet StorageErrorCodeType = "TargetConditionNotMet" + // StorageErrorCodeUnauthorizedBlobOverwrite ... + StorageErrorCodeUnauthorizedBlobOverwrite StorageErrorCodeType = "UnauthorizedBlobOverwrite" + // StorageErrorCodeUnsupportedHeader ... + StorageErrorCodeUnsupportedHeader StorageErrorCodeType = "UnsupportedHeader" + // StorageErrorCodeUnsupportedHTTPVerb ... + StorageErrorCodeUnsupportedHTTPVerb StorageErrorCodeType = "UnsupportedHttpVerb" + // StorageErrorCodeUnsupportedQueryParameter ... + StorageErrorCodeUnsupportedQueryParameter StorageErrorCodeType = "UnsupportedQueryParameter" + // StorageErrorCodeUnsupportedXMLNode ... + StorageErrorCodeUnsupportedXMLNode StorageErrorCodeType = "UnsupportedXmlNode" +) + +// PossibleStorageErrorCodeTypeValues returns an array of possible values for the StorageErrorCodeType const type. +func PossibleStorageErrorCodeTypeValues() []StorageErrorCodeType { + return []StorageErrorCodeType{StorageErrorCodeAccountAlreadyExists, StorageErrorCodeAccountBeingCreated, StorageErrorCodeAccountIsDisabled, StorageErrorCodeAppendPositionConditionNotMet, StorageErrorCodeAuthenticationFailed, StorageErrorCodeAuthorizationFailure, StorageErrorCodeBlobAlreadyExists, StorageErrorCodeBlobArchived, StorageErrorCodeBlobBeingRehydrated, StorageErrorCodeBlobNotArchived, StorageErrorCodeBlobNotFound, StorageErrorCodeBlobOverwritten, StorageErrorCodeBlobTierInadequateForContentLength, StorageErrorCodeBlockCountExceedsLimit, StorageErrorCodeBlockListTooLong, StorageErrorCodeCannotChangeToLowerTier, StorageErrorCodeCannotVerifyCopySource, StorageErrorCodeConditionHeadersNotSupported, StorageErrorCodeConditionNotMet, StorageErrorCodeContainerAlreadyExists, StorageErrorCodeContainerBeingDeleted, StorageErrorCodeContainerDisabled, StorageErrorCodeContainerNotFound, StorageErrorCodeContentLengthLargerThanTierLimit, StorageErrorCodeCopyAcrossAccountsNotSupported, StorageErrorCodeCopyIDMismatch, StorageErrorCodeEmptyMetadataKey, StorageErrorCodeFeatureVersionMismatch, StorageErrorCodeIncrementalCopyBlobMismatch, StorageErrorCodeIncrementalCopyOfEralierVersionSnapshotNotAllowed, StorageErrorCodeIncrementalCopySourceMustBeSnapshot, StorageErrorCodeInfiniteLeaseDurationRequired, StorageErrorCodeInsufficientAccountPermissions, StorageErrorCodeInternalError, StorageErrorCodeInvalidAuthenticationInfo, StorageErrorCodeInvalidBlobOrBlock, StorageErrorCodeInvalidBlobTier, StorageErrorCodeInvalidBlobType, StorageErrorCodeInvalidBlockID, StorageErrorCodeInvalidBlockList, StorageErrorCodeInvalidHeaderValue, StorageErrorCodeInvalidHTTPVerb, StorageErrorCodeInvalidInput, StorageErrorCodeInvalidMd5, StorageErrorCodeInvalidMetadata, StorageErrorCodeInvalidOperation, StorageErrorCodeInvalidPageRange, StorageErrorCodeInvalidQueryParameterValue, StorageErrorCodeInvalidRange, StorageErrorCodeInvalidResourceName, StorageErrorCodeInvalidSourceBlobType, StorageErrorCodeInvalidSourceBlobURL, StorageErrorCodeInvalidURI, StorageErrorCodeInvalidVersionForPageBlobOperation, StorageErrorCodeInvalidXMLDocument, StorageErrorCodeInvalidXMLNodeValue, StorageErrorCodeLeaseAlreadyBroken, StorageErrorCodeLeaseAlreadyPresent, StorageErrorCodeLeaseIDMismatchWithBlobOperation, StorageErrorCodeLeaseIDMismatchWithContainerOperation, StorageErrorCodeLeaseIDMismatchWithLeaseOperation, StorageErrorCodeLeaseIDMissing, StorageErrorCodeLeaseIsBreakingAndCannotBeAcquired, StorageErrorCodeLeaseIsBreakingAndCannotBeChanged, StorageErrorCodeLeaseIsBrokenAndCannotBeRenewed, StorageErrorCodeLeaseLost, StorageErrorCodeLeaseNotPresentWithBlobOperation, StorageErrorCodeLeaseNotPresentWithContainerOperation, StorageErrorCodeLeaseNotPresentWithLeaseOperation, StorageErrorCodeMaxBlobSizeConditionNotMet, StorageErrorCodeMd5Mismatch, StorageErrorCodeMetadataTooLarge, StorageErrorCodeMissingContentLengthHeader, StorageErrorCodeMissingRequiredHeader, StorageErrorCodeMissingRequiredQueryParameter, StorageErrorCodeMissingRequiredXMLNode, StorageErrorCodeMultipleConditionHeadersNotSupported, StorageErrorCodeNone, StorageErrorCodeNoPendingCopyOperation, StorageErrorCodeOperationNotAllowedOnIncrementalCopyBlob, StorageErrorCodeOperationTimedOut, StorageErrorCodeOutOfRangeInput, StorageErrorCodeOutOfRangeQueryParameterValue, StorageErrorCodePendingCopyOperation, StorageErrorCodePreviousSnapshotCannotBeNewer, StorageErrorCodePreviousSnapshotNotFound, StorageErrorCodePreviousSnapshotOperationNotSupported, StorageErrorCodeRequestBodyTooLarge, StorageErrorCodeRequestURLFailedToParse, StorageErrorCodeResourceAlreadyExists, StorageErrorCodeResourceNotFound, StorageErrorCodeResourceTypeMismatch, StorageErrorCodeSequenceNumberConditionNotMet, StorageErrorCodeSequenceNumberIncrementTooLarge, StorageErrorCodeServerBusy, StorageErrorCodeSnaphotOperationRateExceeded, StorageErrorCodeSnapshotCountExceeded, StorageErrorCodeSnapshotsPresent, StorageErrorCodeSourceConditionNotMet, StorageErrorCodeSystemInUse, StorageErrorCodeTargetConditionNotMet, StorageErrorCodeUnauthorizedBlobOverwrite, StorageErrorCodeUnsupportedHeader, StorageErrorCodeUnsupportedHTTPVerb, StorageErrorCodeUnsupportedQueryParameter, StorageErrorCodeUnsupportedXMLNode} +} + +// SyncCopyStatusType enumerates the values for sync copy status type. +type SyncCopyStatusType string + +const ( + // SyncCopyStatusNone represents an empty SyncCopyStatusType. + SyncCopyStatusNone SyncCopyStatusType = "" + // SyncCopyStatusSuccess ... + SyncCopyStatusSuccess SyncCopyStatusType = "success" +) + +// PossibleSyncCopyStatusTypeValues returns an array of possible values for the SyncCopyStatusType const type. +func PossibleSyncCopyStatusTypeValues() []SyncCopyStatusType { + return []SyncCopyStatusType{SyncCopyStatusNone, SyncCopyStatusSuccess} +} + +// AccessPolicy - An Access policy +type AccessPolicy struct { + // Start - the date-time the policy is active + Start time.Time `xml:"Start"` + // Expiry - the date-time the policy expires + Expiry time.Time `xml:"Expiry"` + // Permission - the permissions for the acl policy + Permission string `xml:"Permission"` +} + +// MarshalXML implements the xml.Marshaler interface for AccessPolicy. +func (ap AccessPolicy) MarshalXML(e *xml.Encoder, start xml.StartElement) error { + ap2 := (*accessPolicy)(unsafe.Pointer(&ap)) + return e.EncodeElement(*ap2, start) +} + +// UnmarshalXML implements the xml.Unmarshaler interface for AccessPolicy. +func (ap *AccessPolicy) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { + ap2 := (*accessPolicy)(unsafe.Pointer(ap)) + return d.DecodeElement(ap2, &start) +} + +// AppendBlobAppendBlockFromURLResponse ... +type AppendBlobAppendBlockFromURLResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (ababfur AppendBlobAppendBlockFromURLResponse) Response() *http.Response { + return ababfur.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (ababfur AppendBlobAppendBlockFromURLResponse) StatusCode() int { + return ababfur.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (ababfur AppendBlobAppendBlockFromURLResponse) Status() string { + return ababfur.rawResponse.Status +} + +// BlobAppendOffset returns the value for header x-ms-blob-append-offset. +func (ababfur AppendBlobAppendBlockFromURLResponse) BlobAppendOffset() string { + return ababfur.rawResponse.Header.Get("x-ms-blob-append-offset") +} + +// BlobCommittedBlockCount returns the value for header x-ms-blob-committed-block-count. +func (ababfur AppendBlobAppendBlockFromURLResponse) BlobCommittedBlockCount() int32 { + s := ababfur.rawResponse.Header.Get("x-ms-blob-committed-block-count") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 32) + if err != nil { + i = 0 + } + return int32(i) +} + +// ContentMD5 returns the value for header Content-MD5. +func (ababfur AppendBlobAppendBlockFromURLResponse) ContentMD5() []byte { + s := ababfur.rawResponse.Header.Get("Content-MD5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// Date returns the value for header Date. +func (ababfur AppendBlobAppendBlockFromURLResponse) Date() time.Time { + s := ababfur.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (ababfur AppendBlobAppendBlockFromURLResponse) ErrorCode() string { + return ababfur.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (ababfur AppendBlobAppendBlockFromURLResponse) ETag() ETag { + return ETag(ababfur.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (ababfur AppendBlobAppendBlockFromURLResponse) LastModified() time.Time { + s := ababfur.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (ababfur AppendBlobAppendBlockFromURLResponse) RequestID() string { + return ababfur.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (ababfur AppendBlobAppendBlockFromURLResponse) Version() string { + return ababfur.rawResponse.Header.Get("x-ms-version") +} + +// AppendBlobAppendBlockResponse ... +type AppendBlobAppendBlockResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (ababr AppendBlobAppendBlockResponse) Response() *http.Response { + return ababr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (ababr AppendBlobAppendBlockResponse) StatusCode() int { + return ababr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (ababr AppendBlobAppendBlockResponse) Status() string { + return ababr.rawResponse.Status +} + +// BlobAppendOffset returns the value for header x-ms-blob-append-offset. +func (ababr AppendBlobAppendBlockResponse) BlobAppendOffset() string { + return ababr.rawResponse.Header.Get("x-ms-blob-append-offset") +} + +// BlobCommittedBlockCount returns the value for header x-ms-blob-committed-block-count. +func (ababr AppendBlobAppendBlockResponse) BlobCommittedBlockCount() int32 { + s := ababr.rawResponse.Header.Get("x-ms-blob-committed-block-count") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 32) + if err != nil { + i = 0 + } + return int32(i) +} + +// ContentMD5 returns the value for header Content-MD5. +func (ababr AppendBlobAppendBlockResponse) ContentMD5() []byte { + s := ababr.rawResponse.Header.Get("Content-MD5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// Date returns the value for header Date. +func (ababr AppendBlobAppendBlockResponse) Date() time.Time { + s := ababr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (ababr AppendBlobAppendBlockResponse) ErrorCode() string { + return ababr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (ababr AppendBlobAppendBlockResponse) ETag() ETag { + return ETag(ababr.rawResponse.Header.Get("ETag")) +} + +// IsServerEncrypted returns the value for header x-ms-request-server-encrypted. +func (ababr AppendBlobAppendBlockResponse) IsServerEncrypted() string { + return ababr.rawResponse.Header.Get("x-ms-request-server-encrypted") +} + +// LastModified returns the value for header Last-Modified. +func (ababr AppendBlobAppendBlockResponse) LastModified() time.Time { + s := ababr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (ababr AppendBlobAppendBlockResponse) RequestID() string { + return ababr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (ababr AppendBlobAppendBlockResponse) Version() string { + return ababr.rawResponse.Header.Get("x-ms-version") +} + +// AppendBlobCreateResponse ... +type AppendBlobCreateResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (abcr AppendBlobCreateResponse) Response() *http.Response { + return abcr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (abcr AppendBlobCreateResponse) StatusCode() int { + return abcr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (abcr AppendBlobCreateResponse) Status() string { + return abcr.rawResponse.Status +} + +// ContentMD5 returns the value for header Content-MD5. +func (abcr AppendBlobCreateResponse) ContentMD5() []byte { + s := abcr.rawResponse.Header.Get("Content-MD5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// Date returns the value for header Date. +func (abcr AppendBlobCreateResponse) Date() time.Time { + s := abcr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (abcr AppendBlobCreateResponse) ErrorCode() string { + return abcr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (abcr AppendBlobCreateResponse) ETag() ETag { + return ETag(abcr.rawResponse.Header.Get("ETag")) +} + +// IsServerEncrypted returns the value for header x-ms-request-server-encrypted. +func (abcr AppendBlobCreateResponse) IsServerEncrypted() string { + return abcr.rawResponse.Header.Get("x-ms-request-server-encrypted") +} + +// LastModified returns the value for header Last-Modified. +func (abcr AppendBlobCreateResponse) LastModified() time.Time { + s := abcr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (abcr AppendBlobCreateResponse) RequestID() string { + return abcr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (abcr AppendBlobCreateResponse) Version() string { + return abcr.rawResponse.Header.Get("x-ms-version") +} + +// BlobAbortCopyFromURLResponse ... +type BlobAbortCopyFromURLResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bacfur BlobAbortCopyFromURLResponse) Response() *http.Response { + return bacfur.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bacfur BlobAbortCopyFromURLResponse) StatusCode() int { + return bacfur.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bacfur BlobAbortCopyFromURLResponse) Status() string { + return bacfur.rawResponse.Status +} + +// Date returns the value for header Date. +func (bacfur BlobAbortCopyFromURLResponse) Date() time.Time { + s := bacfur.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bacfur BlobAbortCopyFromURLResponse) ErrorCode() string { + return bacfur.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (bacfur BlobAbortCopyFromURLResponse) RequestID() string { + return bacfur.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bacfur BlobAbortCopyFromURLResponse) Version() string { + return bacfur.rawResponse.Header.Get("x-ms-version") +} + +// BlobAcquireLeaseResponse ... +type BlobAcquireLeaseResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (balr BlobAcquireLeaseResponse) Response() *http.Response { + return balr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (balr BlobAcquireLeaseResponse) StatusCode() int { + return balr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (balr BlobAcquireLeaseResponse) Status() string { + return balr.rawResponse.Status +} + +// Date returns the value for header Date. +func (balr BlobAcquireLeaseResponse) Date() time.Time { + s := balr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (balr BlobAcquireLeaseResponse) ErrorCode() string { + return balr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (balr BlobAcquireLeaseResponse) ETag() ETag { + return ETag(balr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (balr BlobAcquireLeaseResponse) LastModified() time.Time { + s := balr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// LeaseID returns the value for header x-ms-lease-id. +func (balr BlobAcquireLeaseResponse) LeaseID() string { + return balr.rawResponse.Header.Get("x-ms-lease-id") +} + +// RequestID returns the value for header x-ms-request-id. +func (balr BlobAcquireLeaseResponse) RequestID() string { + return balr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (balr BlobAcquireLeaseResponse) Version() string { + return balr.rawResponse.Header.Get("x-ms-version") +} + +// BlobBreakLeaseResponse ... +type BlobBreakLeaseResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bblr BlobBreakLeaseResponse) Response() *http.Response { + return bblr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bblr BlobBreakLeaseResponse) StatusCode() int { + return bblr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bblr BlobBreakLeaseResponse) Status() string { + return bblr.rawResponse.Status +} + +// Date returns the value for header Date. +func (bblr BlobBreakLeaseResponse) Date() time.Time { + s := bblr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bblr BlobBreakLeaseResponse) ErrorCode() string { + return bblr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (bblr BlobBreakLeaseResponse) ETag() ETag { + return ETag(bblr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (bblr BlobBreakLeaseResponse) LastModified() time.Time { + s := bblr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// LeaseTime returns the value for header x-ms-lease-time. +func (bblr BlobBreakLeaseResponse) LeaseTime() int32 { + s := bblr.rawResponse.Header.Get("x-ms-lease-time") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 32) + if err != nil { + i = 0 + } + return int32(i) +} + +// RequestID returns the value for header x-ms-request-id. +func (bblr BlobBreakLeaseResponse) RequestID() string { + return bblr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bblr BlobBreakLeaseResponse) Version() string { + return bblr.rawResponse.Header.Get("x-ms-version") +} + +// BlobChangeLeaseResponse ... +type BlobChangeLeaseResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bclr BlobChangeLeaseResponse) Response() *http.Response { + return bclr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bclr BlobChangeLeaseResponse) StatusCode() int { + return bclr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bclr BlobChangeLeaseResponse) Status() string { + return bclr.rawResponse.Status +} + +// Date returns the value for header Date. +func (bclr BlobChangeLeaseResponse) Date() time.Time { + s := bclr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bclr BlobChangeLeaseResponse) ErrorCode() string { + return bclr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (bclr BlobChangeLeaseResponse) ETag() ETag { + return ETag(bclr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (bclr BlobChangeLeaseResponse) LastModified() time.Time { + s := bclr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// LeaseID returns the value for header x-ms-lease-id. +func (bclr BlobChangeLeaseResponse) LeaseID() string { + return bclr.rawResponse.Header.Get("x-ms-lease-id") +} + +// RequestID returns the value for header x-ms-request-id. +func (bclr BlobChangeLeaseResponse) RequestID() string { + return bclr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bclr BlobChangeLeaseResponse) Version() string { + return bclr.rawResponse.Header.Get("x-ms-version") +} + +// BlobCopyFromURLResponse ... +type BlobCopyFromURLResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bcfur BlobCopyFromURLResponse) Response() *http.Response { + return bcfur.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bcfur BlobCopyFromURLResponse) StatusCode() int { + return bcfur.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bcfur BlobCopyFromURLResponse) Status() string { + return bcfur.rawResponse.Status +} + +// CopyID returns the value for header x-ms-copy-id. +func (bcfur BlobCopyFromURLResponse) CopyID() string { + return bcfur.rawResponse.Header.Get("x-ms-copy-id") +} + +// CopyStatus returns the value for header x-ms-copy-status. +func (bcfur BlobCopyFromURLResponse) CopyStatus() SyncCopyStatusType { + return SyncCopyStatusType(bcfur.rawResponse.Header.Get("x-ms-copy-status")) +} + +// Date returns the value for header Date. +func (bcfur BlobCopyFromURLResponse) Date() time.Time { + s := bcfur.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bcfur BlobCopyFromURLResponse) ErrorCode() string { + return bcfur.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (bcfur BlobCopyFromURLResponse) ETag() ETag { + return ETag(bcfur.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (bcfur BlobCopyFromURLResponse) LastModified() time.Time { + s := bcfur.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (bcfur BlobCopyFromURLResponse) RequestID() string { + return bcfur.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bcfur BlobCopyFromURLResponse) Version() string { + return bcfur.rawResponse.Header.Get("x-ms-version") +} + +// BlobCreateSnapshotResponse ... +type BlobCreateSnapshotResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bcsr BlobCreateSnapshotResponse) Response() *http.Response { + return bcsr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bcsr BlobCreateSnapshotResponse) StatusCode() int { + return bcsr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bcsr BlobCreateSnapshotResponse) Status() string { + return bcsr.rawResponse.Status +} + +// Date returns the value for header Date. +func (bcsr BlobCreateSnapshotResponse) Date() time.Time { + s := bcsr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bcsr BlobCreateSnapshotResponse) ErrorCode() string { + return bcsr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (bcsr BlobCreateSnapshotResponse) ETag() ETag { + return ETag(bcsr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (bcsr BlobCreateSnapshotResponse) LastModified() time.Time { + s := bcsr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (bcsr BlobCreateSnapshotResponse) RequestID() string { + return bcsr.rawResponse.Header.Get("x-ms-request-id") +} + +// Snapshot returns the value for header x-ms-snapshot. +func (bcsr BlobCreateSnapshotResponse) Snapshot() string { + return bcsr.rawResponse.Header.Get("x-ms-snapshot") +} + +// Version returns the value for header x-ms-version. +func (bcsr BlobCreateSnapshotResponse) Version() string { + return bcsr.rawResponse.Header.Get("x-ms-version") +} + +// BlobDeleteResponse ... +type BlobDeleteResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bdr BlobDeleteResponse) Response() *http.Response { + return bdr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bdr BlobDeleteResponse) StatusCode() int { + return bdr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bdr BlobDeleteResponse) Status() string { + return bdr.rawResponse.Status +} + +// Date returns the value for header Date. +func (bdr BlobDeleteResponse) Date() time.Time { + s := bdr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bdr BlobDeleteResponse) ErrorCode() string { + return bdr.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (bdr BlobDeleteResponse) RequestID() string { + return bdr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bdr BlobDeleteResponse) Version() string { + return bdr.rawResponse.Header.Get("x-ms-version") +} + +// BlobFlatListSegment ... +type BlobFlatListSegment struct { + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"Blobs"` + BlobItems []BlobItem `xml:"Blob"` +} + +// BlobGetAccountInfoResponse ... +type BlobGetAccountInfoResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bgair BlobGetAccountInfoResponse) Response() *http.Response { + return bgair.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bgair BlobGetAccountInfoResponse) StatusCode() int { + return bgair.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bgair BlobGetAccountInfoResponse) Status() string { + return bgair.rawResponse.Status +} + +// AccountKind returns the value for header x-ms-account-kind. +func (bgair BlobGetAccountInfoResponse) AccountKind() AccountKindType { + return AccountKindType(bgair.rawResponse.Header.Get("x-ms-account-kind")) +} + +// Date returns the value for header Date. +func (bgair BlobGetAccountInfoResponse) Date() time.Time { + s := bgair.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bgair BlobGetAccountInfoResponse) ErrorCode() string { + return bgair.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (bgair BlobGetAccountInfoResponse) RequestID() string { + return bgair.rawResponse.Header.Get("x-ms-request-id") +} + +// SkuName returns the value for header x-ms-sku-name. +func (bgair BlobGetAccountInfoResponse) SkuName() SkuNameType { + return SkuNameType(bgair.rawResponse.Header.Get("x-ms-sku-name")) +} + +// Version returns the value for header x-ms-version. +func (bgair BlobGetAccountInfoResponse) Version() string { + return bgair.rawResponse.Header.Get("x-ms-version") +} + +// BlobGetPropertiesResponse ... +type BlobGetPropertiesResponse struct { + rawResponse *http.Response +} + +// NewMetadata returns user-defined key/value pairs. +func (bgpr BlobGetPropertiesResponse) NewMetadata() Metadata { + md := Metadata{} + for k, v := range bgpr.rawResponse.Header { + if len(k) > mdPrefixLen { + if prefix := k[0:mdPrefixLen]; strings.EqualFold(prefix, mdPrefix) { + md[strings.ToLower(k[mdPrefixLen:])] = v[0] + } + } + } + return md +} + +// Response returns the raw HTTP response object. +func (bgpr BlobGetPropertiesResponse) Response() *http.Response { + return bgpr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bgpr BlobGetPropertiesResponse) StatusCode() int { + return bgpr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bgpr BlobGetPropertiesResponse) Status() string { + return bgpr.rawResponse.Status +} + +// AcceptRanges returns the value for header Accept-Ranges. +func (bgpr BlobGetPropertiesResponse) AcceptRanges() string { + return bgpr.rawResponse.Header.Get("Accept-Ranges") +} + +// AccessTier returns the value for header x-ms-access-tier. +func (bgpr BlobGetPropertiesResponse) AccessTier() string { + return bgpr.rawResponse.Header.Get("x-ms-access-tier") +} + +// AccessTierChangeTime returns the value for header x-ms-access-tier-change-time. +func (bgpr BlobGetPropertiesResponse) AccessTierChangeTime() time.Time { + s := bgpr.rawResponse.Header.Get("x-ms-access-tier-change-time") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// AccessTierInferred returns the value for header x-ms-access-tier-inferred. +func (bgpr BlobGetPropertiesResponse) AccessTierInferred() string { + return bgpr.rawResponse.Header.Get("x-ms-access-tier-inferred") +} + +// ArchiveStatus returns the value for header x-ms-archive-status. +func (bgpr BlobGetPropertiesResponse) ArchiveStatus() string { + return bgpr.rawResponse.Header.Get("x-ms-archive-status") +} + +// BlobCommittedBlockCount returns the value for header x-ms-blob-committed-block-count. +func (bgpr BlobGetPropertiesResponse) BlobCommittedBlockCount() int32 { + s := bgpr.rawResponse.Header.Get("x-ms-blob-committed-block-count") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 32) + if err != nil { + i = 0 + } + return int32(i) +} + +// BlobSequenceNumber returns the value for header x-ms-blob-sequence-number. +func (bgpr BlobGetPropertiesResponse) BlobSequenceNumber() int64 { + s := bgpr.rawResponse.Header.Get("x-ms-blob-sequence-number") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 64) + if err != nil { + i = 0 + } + return i +} + +// BlobType returns the value for header x-ms-blob-type. +func (bgpr BlobGetPropertiesResponse) BlobType() BlobType { + return BlobType(bgpr.rawResponse.Header.Get("x-ms-blob-type")) +} + +// CacheControl returns the value for header Cache-Control. +func (bgpr BlobGetPropertiesResponse) CacheControl() string { + return bgpr.rawResponse.Header.Get("Cache-Control") +} + +// ContentDisposition returns the value for header Content-Disposition. +func (bgpr BlobGetPropertiesResponse) ContentDisposition() string { + return bgpr.rawResponse.Header.Get("Content-Disposition") +} + +// ContentEncoding returns the value for header Content-Encoding. +func (bgpr BlobGetPropertiesResponse) ContentEncoding() string { + return bgpr.rawResponse.Header.Get("Content-Encoding") +} + +// ContentLanguage returns the value for header Content-Language. +func (bgpr BlobGetPropertiesResponse) ContentLanguage() string { + return bgpr.rawResponse.Header.Get("Content-Language") +} + +// ContentLength returns the value for header Content-Length. +func (bgpr BlobGetPropertiesResponse) ContentLength() int64 { + s := bgpr.rawResponse.Header.Get("Content-Length") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 64) + if err != nil { + i = 0 + } + return i +} + +// ContentMD5 returns the value for header Content-MD5. +func (bgpr BlobGetPropertiesResponse) ContentMD5() []byte { + s := bgpr.rawResponse.Header.Get("Content-MD5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// ContentType returns the value for header Content-Type. +func (bgpr BlobGetPropertiesResponse) ContentType() string { + return bgpr.rawResponse.Header.Get("Content-Type") +} + +// CopyCompletionTime returns the value for header x-ms-copy-completion-time. +func (bgpr BlobGetPropertiesResponse) CopyCompletionTime() time.Time { + s := bgpr.rawResponse.Header.Get("x-ms-copy-completion-time") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// CopyID returns the value for header x-ms-copy-id. +func (bgpr BlobGetPropertiesResponse) CopyID() string { + return bgpr.rawResponse.Header.Get("x-ms-copy-id") +} + +// CopyProgress returns the value for header x-ms-copy-progress. +func (bgpr BlobGetPropertiesResponse) CopyProgress() string { + return bgpr.rawResponse.Header.Get("x-ms-copy-progress") +} + +// CopySource returns the value for header x-ms-copy-source. +func (bgpr BlobGetPropertiesResponse) CopySource() string { + return bgpr.rawResponse.Header.Get("x-ms-copy-source") +} + +// CopyStatus returns the value for header x-ms-copy-status. +func (bgpr BlobGetPropertiesResponse) CopyStatus() CopyStatusType { + return CopyStatusType(bgpr.rawResponse.Header.Get("x-ms-copy-status")) +} + +// CopyStatusDescription returns the value for header x-ms-copy-status-description. +func (bgpr BlobGetPropertiesResponse) CopyStatusDescription() string { + return bgpr.rawResponse.Header.Get("x-ms-copy-status-description") +} + +// CreationTime returns the value for header x-ms-creation-time. +func (bgpr BlobGetPropertiesResponse) CreationTime() time.Time { + s := bgpr.rawResponse.Header.Get("x-ms-creation-time") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// Date returns the value for header Date. +func (bgpr BlobGetPropertiesResponse) Date() time.Time { + s := bgpr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// DestinationSnapshot returns the value for header x-ms-copy-destination-snapshot. +func (bgpr BlobGetPropertiesResponse) DestinationSnapshot() string { + return bgpr.rawResponse.Header.Get("x-ms-copy-destination-snapshot") +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bgpr BlobGetPropertiesResponse) ErrorCode() string { + return bgpr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (bgpr BlobGetPropertiesResponse) ETag() ETag { + return ETag(bgpr.rawResponse.Header.Get("ETag")) +} + +// IsIncrementalCopy returns the value for header x-ms-incremental-copy. +func (bgpr BlobGetPropertiesResponse) IsIncrementalCopy() string { + return bgpr.rawResponse.Header.Get("x-ms-incremental-copy") +} + +// IsServerEncrypted returns the value for header x-ms-server-encrypted. +func (bgpr BlobGetPropertiesResponse) IsServerEncrypted() string { + return bgpr.rawResponse.Header.Get("x-ms-server-encrypted") +} + +// LastModified returns the value for header Last-Modified. +func (bgpr BlobGetPropertiesResponse) LastModified() time.Time { + s := bgpr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// LeaseDuration returns the value for header x-ms-lease-duration. +func (bgpr BlobGetPropertiesResponse) LeaseDuration() LeaseDurationType { + return LeaseDurationType(bgpr.rawResponse.Header.Get("x-ms-lease-duration")) +} + +// LeaseState returns the value for header x-ms-lease-state. +func (bgpr BlobGetPropertiesResponse) LeaseState() LeaseStateType { + return LeaseStateType(bgpr.rawResponse.Header.Get("x-ms-lease-state")) +} + +// LeaseStatus returns the value for header x-ms-lease-status. +func (bgpr BlobGetPropertiesResponse) LeaseStatus() LeaseStatusType { + return LeaseStatusType(bgpr.rawResponse.Header.Get("x-ms-lease-status")) +} + +// RequestID returns the value for header x-ms-request-id. +func (bgpr BlobGetPropertiesResponse) RequestID() string { + return bgpr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bgpr BlobGetPropertiesResponse) Version() string { + return bgpr.rawResponse.Header.Get("x-ms-version") +} + +// BlobHierarchyListSegment ... +type BlobHierarchyListSegment struct { + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"Blobs"` + BlobPrefixes []BlobPrefix `xml:"BlobPrefix"` + BlobItems []BlobItem `xml:"Blob"` +} + +// BlobItem - An Azure Storage blob +type BlobItem struct { + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"Blob"` + Name string `xml:"Name"` + Deleted bool `xml:"Deleted"` + Snapshot string `xml:"Snapshot"` + Properties BlobProperties `xml:"Properties"` + Metadata Metadata `xml:"Metadata"` +} + +// BlobPrefix ... +type BlobPrefix struct { + Name string `xml:"Name"` +} + +// BlobProperties - Properties of a blob +type BlobProperties struct { + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"Properties"` + CreationTime *time.Time `xml:"Creation-Time"` + LastModified time.Time `xml:"Last-Modified"` + Etag ETag `xml:"Etag"` + // ContentLength - Size in bytes + ContentLength *int64 `xml:"Content-Length"` + ContentType *string `xml:"Content-Type"` + ContentEncoding *string `xml:"Content-Encoding"` + ContentLanguage *string `xml:"Content-Language"` + ContentMD5 []byte `xml:"Content-MD5"` + ContentDisposition *string `xml:"Content-Disposition"` + CacheControl *string `xml:"Cache-Control"` + BlobSequenceNumber *int64 `xml:"x-ms-blob-sequence-number"` + // BlobType - Possible values include: 'BlobBlockBlob', 'BlobPageBlob', 'BlobAppendBlob', 'BlobNone' + BlobType BlobType `xml:"BlobType"` + // LeaseStatus - Possible values include: 'LeaseStatusLocked', 'LeaseStatusUnlocked', 'LeaseStatusNone' + LeaseStatus LeaseStatusType `xml:"LeaseStatus"` + // LeaseState - Possible values include: 'LeaseStateAvailable', 'LeaseStateLeased', 'LeaseStateExpired', 'LeaseStateBreaking', 'LeaseStateBroken', 'LeaseStateNone' + LeaseState LeaseStateType `xml:"LeaseState"` + // LeaseDuration - Possible values include: 'LeaseDurationInfinite', 'LeaseDurationFixed', 'LeaseDurationNone' + LeaseDuration LeaseDurationType `xml:"LeaseDuration"` + CopyID *string `xml:"CopyId"` + // CopyStatus - Possible values include: 'CopyStatusPending', 'CopyStatusSuccess', 'CopyStatusAborted', 'CopyStatusFailed', 'CopyStatusNone' + CopyStatus CopyStatusType `xml:"CopyStatus"` + CopySource *string `xml:"CopySource"` + CopyProgress *string `xml:"CopyProgress"` + CopyCompletionTime *time.Time `xml:"CopyCompletionTime"` + CopyStatusDescription *string `xml:"CopyStatusDescription"` + ServerEncrypted *bool `xml:"ServerEncrypted"` + IncrementalCopy *bool `xml:"IncrementalCopy"` + DestinationSnapshot *string `xml:"DestinationSnapshot"` + DeletedTime *time.Time `xml:"DeletedTime"` + RemainingRetentionDays *int32 `xml:"RemainingRetentionDays"` + // AccessTier - Possible values include: 'AccessTierP4', 'AccessTierP6', 'AccessTierP10', 'AccessTierP20', 'AccessTierP30', 'AccessTierP40', 'AccessTierP50', 'AccessTierHot', 'AccessTierCool', 'AccessTierArchive', 'AccessTierNone' + AccessTier AccessTierType `xml:"AccessTier"` + AccessTierInferred *bool `xml:"AccessTierInferred"` + // ArchiveStatus - Possible values include: 'ArchiveStatusRehydratePendingToHot', 'ArchiveStatusRehydratePendingToCool', 'ArchiveStatusNone' + ArchiveStatus ArchiveStatusType `xml:"ArchiveStatus"` + AccessTierChangeTime *time.Time `xml:"AccessTierChangeTime"` +} + +// MarshalXML implements the xml.Marshaler interface for BlobProperties. +func (bp BlobProperties) MarshalXML(e *xml.Encoder, start xml.StartElement) error { + bp2 := (*blobProperties)(unsafe.Pointer(&bp)) + return e.EncodeElement(*bp2, start) +} + +// UnmarshalXML implements the xml.Unmarshaler interface for BlobProperties. +func (bp *BlobProperties) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { + bp2 := (*blobProperties)(unsafe.Pointer(bp)) + return d.DecodeElement(bp2, &start) +} + +// BlobReleaseLeaseResponse ... +type BlobReleaseLeaseResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (brlr BlobReleaseLeaseResponse) Response() *http.Response { + return brlr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (brlr BlobReleaseLeaseResponse) StatusCode() int { + return brlr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (brlr BlobReleaseLeaseResponse) Status() string { + return brlr.rawResponse.Status +} + +// Date returns the value for header Date. +func (brlr BlobReleaseLeaseResponse) Date() time.Time { + s := brlr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (brlr BlobReleaseLeaseResponse) ErrorCode() string { + return brlr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (brlr BlobReleaseLeaseResponse) ETag() ETag { + return ETag(brlr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (brlr BlobReleaseLeaseResponse) LastModified() time.Time { + s := brlr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (brlr BlobReleaseLeaseResponse) RequestID() string { + return brlr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (brlr BlobReleaseLeaseResponse) Version() string { + return brlr.rawResponse.Header.Get("x-ms-version") +} + +// BlobRenewLeaseResponse ... +type BlobRenewLeaseResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (brlr BlobRenewLeaseResponse) Response() *http.Response { + return brlr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (brlr BlobRenewLeaseResponse) StatusCode() int { + return brlr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (brlr BlobRenewLeaseResponse) Status() string { + return brlr.rawResponse.Status +} + +// Date returns the value for header Date. +func (brlr BlobRenewLeaseResponse) Date() time.Time { + s := brlr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (brlr BlobRenewLeaseResponse) ErrorCode() string { + return brlr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (brlr BlobRenewLeaseResponse) ETag() ETag { + return ETag(brlr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (brlr BlobRenewLeaseResponse) LastModified() time.Time { + s := brlr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// LeaseID returns the value for header x-ms-lease-id. +func (brlr BlobRenewLeaseResponse) LeaseID() string { + return brlr.rawResponse.Header.Get("x-ms-lease-id") +} + +// RequestID returns the value for header x-ms-request-id. +func (brlr BlobRenewLeaseResponse) RequestID() string { + return brlr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (brlr BlobRenewLeaseResponse) Version() string { + return brlr.rawResponse.Header.Get("x-ms-version") +} + +// BlobSetHTTPHeadersResponse ... +type BlobSetHTTPHeadersResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bshhr BlobSetHTTPHeadersResponse) Response() *http.Response { + return bshhr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bshhr BlobSetHTTPHeadersResponse) StatusCode() int { + return bshhr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bshhr BlobSetHTTPHeadersResponse) Status() string { + return bshhr.rawResponse.Status +} + +// BlobSequenceNumber returns the value for header x-ms-blob-sequence-number. +func (bshhr BlobSetHTTPHeadersResponse) BlobSequenceNumber() int64 { + s := bshhr.rawResponse.Header.Get("x-ms-blob-sequence-number") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 64) + if err != nil { + i = 0 + } + return i +} + +// Date returns the value for header Date. +func (bshhr BlobSetHTTPHeadersResponse) Date() time.Time { + s := bshhr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bshhr BlobSetHTTPHeadersResponse) ErrorCode() string { + return bshhr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (bshhr BlobSetHTTPHeadersResponse) ETag() ETag { + return ETag(bshhr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (bshhr BlobSetHTTPHeadersResponse) LastModified() time.Time { + s := bshhr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (bshhr BlobSetHTTPHeadersResponse) RequestID() string { + return bshhr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bshhr BlobSetHTTPHeadersResponse) Version() string { + return bshhr.rawResponse.Header.Get("x-ms-version") +} + +// BlobSetMetadataResponse ... +type BlobSetMetadataResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bsmr BlobSetMetadataResponse) Response() *http.Response { + return bsmr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bsmr BlobSetMetadataResponse) StatusCode() int { + return bsmr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bsmr BlobSetMetadataResponse) Status() string { + return bsmr.rawResponse.Status +} + +// Date returns the value for header Date. +func (bsmr BlobSetMetadataResponse) Date() time.Time { + s := bsmr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bsmr BlobSetMetadataResponse) ErrorCode() string { + return bsmr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (bsmr BlobSetMetadataResponse) ETag() ETag { + return ETag(bsmr.rawResponse.Header.Get("ETag")) +} + +// IsServerEncrypted returns the value for header x-ms-request-server-encrypted. +func (bsmr BlobSetMetadataResponse) IsServerEncrypted() string { + return bsmr.rawResponse.Header.Get("x-ms-request-server-encrypted") +} + +// LastModified returns the value for header Last-Modified. +func (bsmr BlobSetMetadataResponse) LastModified() time.Time { + s := bsmr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (bsmr BlobSetMetadataResponse) RequestID() string { + return bsmr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bsmr BlobSetMetadataResponse) Version() string { + return bsmr.rawResponse.Header.Get("x-ms-version") +} + +// BlobSetTierResponse ... +type BlobSetTierResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bstr BlobSetTierResponse) Response() *http.Response { + return bstr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bstr BlobSetTierResponse) StatusCode() int { + return bstr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bstr BlobSetTierResponse) Status() string { + return bstr.rawResponse.Status +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bstr BlobSetTierResponse) ErrorCode() string { + return bstr.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (bstr BlobSetTierResponse) RequestID() string { + return bstr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bstr BlobSetTierResponse) Version() string { + return bstr.rawResponse.Header.Get("x-ms-version") +} + +// BlobStartCopyFromURLResponse ... +type BlobStartCopyFromURLResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bscfur BlobStartCopyFromURLResponse) Response() *http.Response { + return bscfur.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bscfur BlobStartCopyFromURLResponse) StatusCode() int { + return bscfur.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bscfur BlobStartCopyFromURLResponse) Status() string { + return bscfur.rawResponse.Status +} + +// CopyID returns the value for header x-ms-copy-id. +func (bscfur BlobStartCopyFromURLResponse) CopyID() string { + return bscfur.rawResponse.Header.Get("x-ms-copy-id") +} + +// CopyStatus returns the value for header x-ms-copy-status. +func (bscfur BlobStartCopyFromURLResponse) CopyStatus() CopyStatusType { + return CopyStatusType(bscfur.rawResponse.Header.Get("x-ms-copy-status")) +} + +// Date returns the value for header Date. +func (bscfur BlobStartCopyFromURLResponse) Date() time.Time { + s := bscfur.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bscfur BlobStartCopyFromURLResponse) ErrorCode() string { + return bscfur.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (bscfur BlobStartCopyFromURLResponse) ETag() ETag { + return ETag(bscfur.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (bscfur BlobStartCopyFromURLResponse) LastModified() time.Time { + s := bscfur.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (bscfur BlobStartCopyFromURLResponse) RequestID() string { + return bscfur.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bscfur BlobStartCopyFromURLResponse) Version() string { + return bscfur.rawResponse.Header.Get("x-ms-version") +} + +// BlobUndeleteResponse ... +type BlobUndeleteResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bur BlobUndeleteResponse) Response() *http.Response { + return bur.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bur BlobUndeleteResponse) StatusCode() int { + return bur.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bur BlobUndeleteResponse) Status() string { + return bur.rawResponse.Status +} + +// Date returns the value for header Date. +func (bur BlobUndeleteResponse) Date() time.Time { + s := bur.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bur BlobUndeleteResponse) ErrorCode() string { + return bur.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (bur BlobUndeleteResponse) RequestID() string { + return bur.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bur BlobUndeleteResponse) Version() string { + return bur.rawResponse.Header.Get("x-ms-version") +} + +// Block - Represents a single block in a block blob. It describes the block's ID and size. +type Block struct { + // Name - The base64 encoded block ID. + Name string `xml:"Name"` + // Size - The block size in bytes. + Size int32 `xml:"Size"` +} + +// BlockBlobCommitBlockListResponse ... +type BlockBlobCommitBlockListResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bbcblr BlockBlobCommitBlockListResponse) Response() *http.Response { + return bbcblr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bbcblr BlockBlobCommitBlockListResponse) StatusCode() int { + return bbcblr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bbcblr BlockBlobCommitBlockListResponse) Status() string { + return bbcblr.rawResponse.Status +} + +// ContentMD5 returns the value for header Content-MD5. +func (bbcblr BlockBlobCommitBlockListResponse) ContentMD5() []byte { + s := bbcblr.rawResponse.Header.Get("Content-MD5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// Date returns the value for header Date. +func (bbcblr BlockBlobCommitBlockListResponse) Date() time.Time { + s := bbcblr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bbcblr BlockBlobCommitBlockListResponse) ErrorCode() string { + return bbcblr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (bbcblr BlockBlobCommitBlockListResponse) ETag() ETag { + return ETag(bbcblr.rawResponse.Header.Get("ETag")) +} + +// IsServerEncrypted returns the value for header x-ms-request-server-encrypted. +func (bbcblr BlockBlobCommitBlockListResponse) IsServerEncrypted() string { + return bbcblr.rawResponse.Header.Get("x-ms-request-server-encrypted") +} + +// LastModified returns the value for header Last-Modified. +func (bbcblr BlockBlobCommitBlockListResponse) LastModified() time.Time { + s := bbcblr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (bbcblr BlockBlobCommitBlockListResponse) RequestID() string { + return bbcblr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bbcblr BlockBlobCommitBlockListResponse) Version() string { + return bbcblr.rawResponse.Header.Get("x-ms-version") +} + +// BlockBlobStageBlockFromURLResponse ... +type BlockBlobStageBlockFromURLResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bbsbfur BlockBlobStageBlockFromURLResponse) Response() *http.Response { + return bbsbfur.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bbsbfur BlockBlobStageBlockFromURLResponse) StatusCode() int { + return bbsbfur.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bbsbfur BlockBlobStageBlockFromURLResponse) Status() string { + return bbsbfur.rawResponse.Status +} + +// ContentMD5 returns the value for header Content-MD5. +func (bbsbfur BlockBlobStageBlockFromURLResponse) ContentMD5() []byte { + s := bbsbfur.rawResponse.Header.Get("Content-MD5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// Date returns the value for header Date. +func (bbsbfur BlockBlobStageBlockFromURLResponse) Date() time.Time { + s := bbsbfur.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bbsbfur BlockBlobStageBlockFromURLResponse) ErrorCode() string { + return bbsbfur.rawResponse.Header.Get("x-ms-error-code") +} + +// IsServerEncrypted returns the value for header x-ms-request-server-encrypted. +func (bbsbfur BlockBlobStageBlockFromURLResponse) IsServerEncrypted() string { + return bbsbfur.rawResponse.Header.Get("x-ms-request-server-encrypted") +} + +// RequestID returns the value for header x-ms-request-id. +func (bbsbfur BlockBlobStageBlockFromURLResponse) RequestID() string { + return bbsbfur.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bbsbfur BlockBlobStageBlockFromURLResponse) Version() string { + return bbsbfur.rawResponse.Header.Get("x-ms-version") +} + +// BlockBlobStageBlockResponse ... +type BlockBlobStageBlockResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bbsbr BlockBlobStageBlockResponse) Response() *http.Response { + return bbsbr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bbsbr BlockBlobStageBlockResponse) StatusCode() int { + return bbsbr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bbsbr BlockBlobStageBlockResponse) Status() string { + return bbsbr.rawResponse.Status +} + +// ContentMD5 returns the value for header Content-MD5. +func (bbsbr BlockBlobStageBlockResponse) ContentMD5() []byte { + s := bbsbr.rawResponse.Header.Get("Content-MD5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// Date returns the value for header Date. +func (bbsbr BlockBlobStageBlockResponse) Date() time.Time { + s := bbsbr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bbsbr BlockBlobStageBlockResponse) ErrorCode() string { + return bbsbr.rawResponse.Header.Get("x-ms-error-code") +} + +// IsServerEncrypted returns the value for header x-ms-request-server-encrypted. +func (bbsbr BlockBlobStageBlockResponse) IsServerEncrypted() string { + return bbsbr.rawResponse.Header.Get("x-ms-request-server-encrypted") +} + +// RequestID returns the value for header x-ms-request-id. +func (bbsbr BlockBlobStageBlockResponse) RequestID() string { + return bbsbr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bbsbr BlockBlobStageBlockResponse) Version() string { + return bbsbr.rawResponse.Header.Get("x-ms-version") +} + +// BlockBlobUploadResponse ... +type BlockBlobUploadResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bbur BlockBlobUploadResponse) Response() *http.Response { + return bbur.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bbur BlockBlobUploadResponse) StatusCode() int { + return bbur.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bbur BlockBlobUploadResponse) Status() string { + return bbur.rawResponse.Status +} + +// ContentMD5 returns the value for header Content-MD5. +func (bbur BlockBlobUploadResponse) ContentMD5() []byte { + s := bbur.rawResponse.Header.Get("Content-MD5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// Date returns the value for header Date. +func (bbur BlockBlobUploadResponse) Date() time.Time { + s := bbur.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bbur BlockBlobUploadResponse) ErrorCode() string { + return bbur.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (bbur BlockBlobUploadResponse) ETag() ETag { + return ETag(bbur.rawResponse.Header.Get("ETag")) +} + +// IsServerEncrypted returns the value for header x-ms-request-server-encrypted. +func (bbur BlockBlobUploadResponse) IsServerEncrypted() string { + return bbur.rawResponse.Header.Get("x-ms-request-server-encrypted") +} + +// LastModified returns the value for header Last-Modified. +func (bbur BlockBlobUploadResponse) LastModified() time.Time { + s := bbur.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (bbur BlockBlobUploadResponse) RequestID() string { + return bbur.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bbur BlockBlobUploadResponse) Version() string { + return bbur.rawResponse.Header.Get("x-ms-version") +} + +// BlockList ... +type BlockList struct { + rawResponse *http.Response + CommittedBlocks []Block `xml:"CommittedBlocks>Block"` + UncommittedBlocks []Block `xml:"UncommittedBlocks>Block"` +} + +// Response returns the raw HTTP response object. +func (bl BlockList) Response() *http.Response { + return bl.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bl BlockList) StatusCode() int { + return bl.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bl BlockList) Status() string { + return bl.rawResponse.Status +} + +// BlobContentLength returns the value for header x-ms-blob-content-length. +func (bl BlockList) BlobContentLength() int64 { + s := bl.rawResponse.Header.Get("x-ms-blob-content-length") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 64) + if err != nil { + i = 0 + } + return i +} + +// ContentType returns the value for header Content-Type. +func (bl BlockList) ContentType() string { + return bl.rawResponse.Header.Get("Content-Type") +} + +// Date returns the value for header Date. +func (bl BlockList) Date() time.Time { + s := bl.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bl BlockList) ErrorCode() string { + return bl.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (bl BlockList) ETag() ETag { + return ETag(bl.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (bl BlockList) LastModified() time.Time { + s := bl.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (bl BlockList) RequestID() string { + return bl.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bl BlockList) Version() string { + return bl.rawResponse.Header.Get("x-ms-version") +} + +// BlockLookupList ... +type BlockLookupList struct { + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"BlockList"` + Committed []string `xml:"Committed"` + Uncommitted []string `xml:"Uncommitted"` + Latest []string `xml:"Latest"` +} + +// ClearRange ... +type ClearRange struct { + Start int64 `xml:"Start"` + End int64 `xml:"End"` +} + +// ContainerAcquireLeaseResponse ... +type ContainerAcquireLeaseResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (calr ContainerAcquireLeaseResponse) Response() *http.Response { + return calr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (calr ContainerAcquireLeaseResponse) StatusCode() int { + return calr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (calr ContainerAcquireLeaseResponse) Status() string { + return calr.rawResponse.Status +} + +// Date returns the value for header Date. +func (calr ContainerAcquireLeaseResponse) Date() time.Time { + s := calr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (calr ContainerAcquireLeaseResponse) ErrorCode() string { + return calr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (calr ContainerAcquireLeaseResponse) ETag() ETag { + return ETag(calr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (calr ContainerAcquireLeaseResponse) LastModified() time.Time { + s := calr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// LeaseID returns the value for header x-ms-lease-id. +func (calr ContainerAcquireLeaseResponse) LeaseID() string { + return calr.rawResponse.Header.Get("x-ms-lease-id") +} + +// RequestID returns the value for header x-ms-request-id. +func (calr ContainerAcquireLeaseResponse) RequestID() string { + return calr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (calr ContainerAcquireLeaseResponse) Version() string { + return calr.rawResponse.Header.Get("x-ms-version") +} + +// ContainerBreakLeaseResponse ... +type ContainerBreakLeaseResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (cblr ContainerBreakLeaseResponse) Response() *http.Response { + return cblr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (cblr ContainerBreakLeaseResponse) StatusCode() int { + return cblr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (cblr ContainerBreakLeaseResponse) Status() string { + return cblr.rawResponse.Status +} + +// Date returns the value for header Date. +func (cblr ContainerBreakLeaseResponse) Date() time.Time { + s := cblr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (cblr ContainerBreakLeaseResponse) ErrorCode() string { + return cblr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (cblr ContainerBreakLeaseResponse) ETag() ETag { + return ETag(cblr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (cblr ContainerBreakLeaseResponse) LastModified() time.Time { + s := cblr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// LeaseTime returns the value for header x-ms-lease-time. +func (cblr ContainerBreakLeaseResponse) LeaseTime() int32 { + s := cblr.rawResponse.Header.Get("x-ms-lease-time") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 32) + if err != nil { + i = 0 + } + return int32(i) +} + +// RequestID returns the value for header x-ms-request-id. +func (cblr ContainerBreakLeaseResponse) RequestID() string { + return cblr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (cblr ContainerBreakLeaseResponse) Version() string { + return cblr.rawResponse.Header.Get("x-ms-version") +} + +// ContainerChangeLeaseResponse ... +type ContainerChangeLeaseResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (cclr ContainerChangeLeaseResponse) Response() *http.Response { + return cclr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (cclr ContainerChangeLeaseResponse) StatusCode() int { + return cclr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (cclr ContainerChangeLeaseResponse) Status() string { + return cclr.rawResponse.Status +} + +// Date returns the value for header Date. +func (cclr ContainerChangeLeaseResponse) Date() time.Time { + s := cclr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (cclr ContainerChangeLeaseResponse) ErrorCode() string { + return cclr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (cclr ContainerChangeLeaseResponse) ETag() ETag { + return ETag(cclr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (cclr ContainerChangeLeaseResponse) LastModified() time.Time { + s := cclr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// LeaseID returns the value for header x-ms-lease-id. +func (cclr ContainerChangeLeaseResponse) LeaseID() string { + return cclr.rawResponse.Header.Get("x-ms-lease-id") +} + +// RequestID returns the value for header x-ms-request-id. +func (cclr ContainerChangeLeaseResponse) RequestID() string { + return cclr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (cclr ContainerChangeLeaseResponse) Version() string { + return cclr.rawResponse.Header.Get("x-ms-version") +} + +// ContainerCreateResponse ... +type ContainerCreateResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (ccr ContainerCreateResponse) Response() *http.Response { + return ccr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (ccr ContainerCreateResponse) StatusCode() int { + return ccr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (ccr ContainerCreateResponse) Status() string { + return ccr.rawResponse.Status +} + +// Date returns the value for header Date. +func (ccr ContainerCreateResponse) Date() time.Time { + s := ccr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (ccr ContainerCreateResponse) ErrorCode() string { + return ccr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (ccr ContainerCreateResponse) ETag() ETag { + return ETag(ccr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (ccr ContainerCreateResponse) LastModified() time.Time { + s := ccr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (ccr ContainerCreateResponse) RequestID() string { + return ccr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (ccr ContainerCreateResponse) Version() string { + return ccr.rawResponse.Header.Get("x-ms-version") +} + +// ContainerDeleteResponse ... +type ContainerDeleteResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (cdr ContainerDeleteResponse) Response() *http.Response { + return cdr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (cdr ContainerDeleteResponse) StatusCode() int { + return cdr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (cdr ContainerDeleteResponse) Status() string { + return cdr.rawResponse.Status +} + +// Date returns the value for header Date. +func (cdr ContainerDeleteResponse) Date() time.Time { + s := cdr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (cdr ContainerDeleteResponse) ErrorCode() string { + return cdr.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (cdr ContainerDeleteResponse) RequestID() string { + return cdr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (cdr ContainerDeleteResponse) Version() string { + return cdr.rawResponse.Header.Get("x-ms-version") +} + +// ContainerGetAccountInfoResponse ... +type ContainerGetAccountInfoResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (cgair ContainerGetAccountInfoResponse) Response() *http.Response { + return cgair.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (cgair ContainerGetAccountInfoResponse) StatusCode() int { + return cgair.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (cgair ContainerGetAccountInfoResponse) Status() string { + return cgair.rawResponse.Status +} + +// AccountKind returns the value for header x-ms-account-kind. +func (cgair ContainerGetAccountInfoResponse) AccountKind() AccountKindType { + return AccountKindType(cgair.rawResponse.Header.Get("x-ms-account-kind")) +} + +// Date returns the value for header Date. +func (cgair ContainerGetAccountInfoResponse) Date() time.Time { + s := cgair.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (cgair ContainerGetAccountInfoResponse) ErrorCode() string { + return cgair.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (cgair ContainerGetAccountInfoResponse) RequestID() string { + return cgair.rawResponse.Header.Get("x-ms-request-id") +} + +// SkuName returns the value for header x-ms-sku-name. +func (cgair ContainerGetAccountInfoResponse) SkuName() SkuNameType { + return SkuNameType(cgair.rawResponse.Header.Get("x-ms-sku-name")) +} + +// Version returns the value for header x-ms-version. +func (cgair ContainerGetAccountInfoResponse) Version() string { + return cgair.rawResponse.Header.Get("x-ms-version") +} + +// ContainerGetPropertiesResponse ... +type ContainerGetPropertiesResponse struct { + rawResponse *http.Response +} + +// NewMetadata returns user-defined key/value pairs. +func (cgpr ContainerGetPropertiesResponse) NewMetadata() Metadata { + md := Metadata{} + for k, v := range cgpr.rawResponse.Header { + if len(k) > mdPrefixLen { + if prefix := k[0:mdPrefixLen]; strings.EqualFold(prefix, mdPrefix) { + md[strings.ToLower(k[mdPrefixLen:])] = v[0] + } + } + } + return md +} + +// Response returns the raw HTTP response object. +func (cgpr ContainerGetPropertiesResponse) Response() *http.Response { + return cgpr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (cgpr ContainerGetPropertiesResponse) StatusCode() int { + return cgpr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (cgpr ContainerGetPropertiesResponse) Status() string { + return cgpr.rawResponse.Status +} + +// BlobPublicAccess returns the value for header x-ms-blob-public-access. +func (cgpr ContainerGetPropertiesResponse) BlobPublicAccess() PublicAccessType { + return PublicAccessType(cgpr.rawResponse.Header.Get("x-ms-blob-public-access")) +} + +// Date returns the value for header Date. +func (cgpr ContainerGetPropertiesResponse) Date() time.Time { + s := cgpr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (cgpr ContainerGetPropertiesResponse) ErrorCode() string { + return cgpr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (cgpr ContainerGetPropertiesResponse) ETag() ETag { + return ETag(cgpr.rawResponse.Header.Get("ETag")) +} + +// HasImmutabilityPolicy returns the value for header x-ms-has-immutability-policy. +func (cgpr ContainerGetPropertiesResponse) HasImmutabilityPolicy() string { + return cgpr.rawResponse.Header.Get("x-ms-has-immutability-policy") +} + +// HasLegalHold returns the value for header x-ms-has-legal-hold. +func (cgpr ContainerGetPropertiesResponse) HasLegalHold() string { + return cgpr.rawResponse.Header.Get("x-ms-has-legal-hold") +} + +// LastModified returns the value for header Last-Modified. +func (cgpr ContainerGetPropertiesResponse) LastModified() time.Time { + s := cgpr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// LeaseDuration returns the value for header x-ms-lease-duration. +func (cgpr ContainerGetPropertiesResponse) LeaseDuration() LeaseDurationType { + return LeaseDurationType(cgpr.rawResponse.Header.Get("x-ms-lease-duration")) +} + +// LeaseState returns the value for header x-ms-lease-state. +func (cgpr ContainerGetPropertiesResponse) LeaseState() LeaseStateType { + return LeaseStateType(cgpr.rawResponse.Header.Get("x-ms-lease-state")) +} + +// LeaseStatus returns the value for header x-ms-lease-status. +func (cgpr ContainerGetPropertiesResponse) LeaseStatus() LeaseStatusType { + return LeaseStatusType(cgpr.rawResponse.Header.Get("x-ms-lease-status")) +} + +// RequestID returns the value for header x-ms-request-id. +func (cgpr ContainerGetPropertiesResponse) RequestID() string { + return cgpr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (cgpr ContainerGetPropertiesResponse) Version() string { + return cgpr.rawResponse.Header.Get("x-ms-version") +} + +// ContainerItem - An Azure Storage container +type ContainerItem struct { + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"Container"` + Name string `xml:"Name"` + Properties ContainerProperties `xml:"Properties"` + Metadata Metadata `xml:"Metadata"` +} + +// ContainerProperties - Properties of a container +type ContainerProperties struct { + LastModified time.Time `xml:"Last-Modified"` + Etag ETag `xml:"Etag"` + // LeaseStatus - Possible values include: 'LeaseStatusLocked', 'LeaseStatusUnlocked', 'LeaseStatusNone' + LeaseStatus LeaseStatusType `xml:"LeaseStatus"` + // LeaseState - Possible values include: 'LeaseStateAvailable', 'LeaseStateLeased', 'LeaseStateExpired', 'LeaseStateBreaking', 'LeaseStateBroken', 'LeaseStateNone' + LeaseState LeaseStateType `xml:"LeaseState"` + // LeaseDuration - Possible values include: 'LeaseDurationInfinite', 'LeaseDurationFixed', 'LeaseDurationNone' + LeaseDuration LeaseDurationType `xml:"LeaseDuration"` + // PublicAccess - Possible values include: 'PublicAccessContainer', 'PublicAccessBlob', 'PublicAccessNone' + PublicAccess PublicAccessType `xml:"PublicAccess"` + HasImmutabilityPolicy *bool `xml:"HasImmutabilityPolicy"` + HasLegalHold *bool `xml:"HasLegalHold"` +} + +// MarshalXML implements the xml.Marshaler interface for ContainerProperties. +func (cp ContainerProperties) MarshalXML(e *xml.Encoder, start xml.StartElement) error { + cp2 := (*containerProperties)(unsafe.Pointer(&cp)) + return e.EncodeElement(*cp2, start) +} + +// UnmarshalXML implements the xml.Unmarshaler interface for ContainerProperties. +func (cp *ContainerProperties) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { + cp2 := (*containerProperties)(unsafe.Pointer(cp)) + return d.DecodeElement(cp2, &start) +} + +// ContainerReleaseLeaseResponse ... +type ContainerReleaseLeaseResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (crlr ContainerReleaseLeaseResponse) Response() *http.Response { + return crlr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (crlr ContainerReleaseLeaseResponse) StatusCode() int { + return crlr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (crlr ContainerReleaseLeaseResponse) Status() string { + return crlr.rawResponse.Status +} + +// Date returns the value for header Date. +func (crlr ContainerReleaseLeaseResponse) Date() time.Time { + s := crlr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (crlr ContainerReleaseLeaseResponse) ErrorCode() string { + return crlr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (crlr ContainerReleaseLeaseResponse) ETag() ETag { + return ETag(crlr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (crlr ContainerReleaseLeaseResponse) LastModified() time.Time { + s := crlr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (crlr ContainerReleaseLeaseResponse) RequestID() string { + return crlr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (crlr ContainerReleaseLeaseResponse) Version() string { + return crlr.rawResponse.Header.Get("x-ms-version") +} + +// ContainerRenewLeaseResponse ... +type ContainerRenewLeaseResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (crlr ContainerRenewLeaseResponse) Response() *http.Response { + return crlr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (crlr ContainerRenewLeaseResponse) StatusCode() int { + return crlr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (crlr ContainerRenewLeaseResponse) Status() string { + return crlr.rawResponse.Status +} + +// Date returns the value for header Date. +func (crlr ContainerRenewLeaseResponse) Date() time.Time { + s := crlr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (crlr ContainerRenewLeaseResponse) ErrorCode() string { + return crlr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (crlr ContainerRenewLeaseResponse) ETag() ETag { + return ETag(crlr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (crlr ContainerRenewLeaseResponse) LastModified() time.Time { + s := crlr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// LeaseID returns the value for header x-ms-lease-id. +func (crlr ContainerRenewLeaseResponse) LeaseID() string { + return crlr.rawResponse.Header.Get("x-ms-lease-id") +} + +// RequestID returns the value for header x-ms-request-id. +func (crlr ContainerRenewLeaseResponse) RequestID() string { + return crlr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (crlr ContainerRenewLeaseResponse) Version() string { + return crlr.rawResponse.Header.Get("x-ms-version") +} + +// ContainerSetAccessPolicyResponse ... +type ContainerSetAccessPolicyResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (csapr ContainerSetAccessPolicyResponse) Response() *http.Response { + return csapr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (csapr ContainerSetAccessPolicyResponse) StatusCode() int { + return csapr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (csapr ContainerSetAccessPolicyResponse) Status() string { + return csapr.rawResponse.Status +} + +// Date returns the value for header Date. +func (csapr ContainerSetAccessPolicyResponse) Date() time.Time { + s := csapr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (csapr ContainerSetAccessPolicyResponse) ErrorCode() string { + return csapr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (csapr ContainerSetAccessPolicyResponse) ETag() ETag { + return ETag(csapr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (csapr ContainerSetAccessPolicyResponse) LastModified() time.Time { + s := csapr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (csapr ContainerSetAccessPolicyResponse) RequestID() string { + return csapr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (csapr ContainerSetAccessPolicyResponse) Version() string { + return csapr.rawResponse.Header.Get("x-ms-version") +} + +// ContainerSetMetadataResponse ... +type ContainerSetMetadataResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (csmr ContainerSetMetadataResponse) Response() *http.Response { + return csmr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (csmr ContainerSetMetadataResponse) StatusCode() int { + return csmr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (csmr ContainerSetMetadataResponse) Status() string { + return csmr.rawResponse.Status +} + +// Date returns the value for header Date. +func (csmr ContainerSetMetadataResponse) Date() time.Time { + s := csmr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (csmr ContainerSetMetadataResponse) ErrorCode() string { + return csmr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (csmr ContainerSetMetadataResponse) ETag() ETag { + return ETag(csmr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (csmr ContainerSetMetadataResponse) LastModified() time.Time { + s := csmr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (csmr ContainerSetMetadataResponse) RequestID() string { + return csmr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (csmr ContainerSetMetadataResponse) Version() string { + return csmr.rawResponse.Header.Get("x-ms-version") +} + +// CorsRule - CORS is an HTTP feature that enables a web application running under one domain to access +// resources in another domain. Web browsers implement a security restriction known as same-origin policy that +// prevents a web page from calling APIs in a different domain; CORS provides a secure way to allow one domain +// (the origin domain) to call APIs in another domain +type CorsRule struct { + // AllowedOrigins - The origin domains that are permitted to make a request against the storage service via CORS. The origin domain is the domain from which the request originates. Note that the origin must be an exact case-sensitive match with the origin that the user age sends to the service. You can also use the wildcard character '*' to allow all origin domains to make requests via CORS. + AllowedOrigins string `xml:"AllowedOrigins"` + // AllowedMethods - The methods (HTTP request verbs) that the origin domain may use for a CORS request. (comma separated) + AllowedMethods string `xml:"AllowedMethods"` + // AllowedHeaders - the request headers that the origin domain may specify on the CORS request. + AllowedHeaders string `xml:"AllowedHeaders"` + // ExposedHeaders - The response headers that may be sent in the response to the CORS request and exposed by the browser to the request issuer + ExposedHeaders string `xml:"ExposedHeaders"` + // MaxAgeInSeconds - The maximum amount time that a browser should cache the preflight OPTIONS request. + MaxAgeInSeconds int32 `xml:"MaxAgeInSeconds"` +} + +// downloadResponse - Wraps the response from the blobClient.Download method. +type downloadResponse struct { + rawResponse *http.Response +} + +// NewMetadata returns user-defined key/value pairs. +func (dr downloadResponse) NewMetadata() Metadata { + md := Metadata{} + for k, v := range dr.rawResponse.Header { + if len(k) > mdPrefixLen { + if prefix := k[0:mdPrefixLen]; strings.EqualFold(prefix, mdPrefix) { + md[strings.ToLower(k[mdPrefixLen:])] = v[0] + } + } + } + return md +} + +// Response returns the raw HTTP response object. +func (dr downloadResponse) Response() *http.Response { + return dr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (dr downloadResponse) StatusCode() int { + return dr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (dr downloadResponse) Status() string { + return dr.rawResponse.Status +} + +// Body returns the raw HTTP response object's Body. +func (dr downloadResponse) Body() io.ReadCloser { + return dr.rawResponse.Body +} + +// AcceptRanges returns the value for header Accept-Ranges. +func (dr downloadResponse) AcceptRanges() string { + return dr.rawResponse.Header.Get("Accept-Ranges") +} + +// BlobCommittedBlockCount returns the value for header x-ms-blob-committed-block-count. +func (dr downloadResponse) BlobCommittedBlockCount() int32 { + s := dr.rawResponse.Header.Get("x-ms-blob-committed-block-count") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 32) + if err != nil { + i = 0 + } + return int32(i) +} + +// BlobContentMD5 returns the value for header x-ms-blob-content-md5. +func (dr downloadResponse) BlobContentMD5() []byte { + s := dr.rawResponse.Header.Get("x-ms-blob-content-md5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// BlobSequenceNumber returns the value for header x-ms-blob-sequence-number. +func (dr downloadResponse) BlobSequenceNumber() int64 { + s := dr.rawResponse.Header.Get("x-ms-blob-sequence-number") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 64) + if err != nil { + i = 0 + } + return i +} + +// BlobType returns the value for header x-ms-blob-type. +func (dr downloadResponse) BlobType() BlobType { + return BlobType(dr.rawResponse.Header.Get("x-ms-blob-type")) +} + +// CacheControl returns the value for header Cache-Control. +func (dr downloadResponse) CacheControl() string { + return dr.rawResponse.Header.Get("Cache-Control") +} + +// ContentDisposition returns the value for header Content-Disposition. +func (dr downloadResponse) ContentDisposition() string { + return dr.rawResponse.Header.Get("Content-Disposition") +} + +// ContentEncoding returns the value for header Content-Encoding. +func (dr downloadResponse) ContentEncoding() string { + return dr.rawResponse.Header.Get("Content-Encoding") +} + +// ContentLanguage returns the value for header Content-Language. +func (dr downloadResponse) ContentLanguage() string { + return dr.rawResponse.Header.Get("Content-Language") +} + +// ContentLength returns the value for header Content-Length. +func (dr downloadResponse) ContentLength() int64 { + s := dr.rawResponse.Header.Get("Content-Length") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 64) + if err != nil { + i = 0 + } + return i +} + +// ContentMD5 returns the value for header Content-MD5. +func (dr downloadResponse) ContentMD5() []byte { + s := dr.rawResponse.Header.Get("Content-MD5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// ContentRange returns the value for header Content-Range. +func (dr downloadResponse) ContentRange() string { + return dr.rawResponse.Header.Get("Content-Range") +} + +// ContentType returns the value for header Content-Type. +func (dr downloadResponse) ContentType() string { + return dr.rawResponse.Header.Get("Content-Type") +} + +// CopyCompletionTime returns the value for header x-ms-copy-completion-time. +func (dr downloadResponse) CopyCompletionTime() time.Time { + s := dr.rawResponse.Header.Get("x-ms-copy-completion-time") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// CopyID returns the value for header x-ms-copy-id. +func (dr downloadResponse) CopyID() string { + return dr.rawResponse.Header.Get("x-ms-copy-id") +} + +// CopyProgress returns the value for header x-ms-copy-progress. +func (dr downloadResponse) CopyProgress() string { + return dr.rawResponse.Header.Get("x-ms-copy-progress") +} + +// CopySource returns the value for header x-ms-copy-source. +func (dr downloadResponse) CopySource() string { + return dr.rawResponse.Header.Get("x-ms-copy-source") +} + +// CopyStatus returns the value for header x-ms-copy-status. +func (dr downloadResponse) CopyStatus() CopyStatusType { + return CopyStatusType(dr.rawResponse.Header.Get("x-ms-copy-status")) +} + +// CopyStatusDescription returns the value for header x-ms-copy-status-description. +func (dr downloadResponse) CopyStatusDescription() string { + return dr.rawResponse.Header.Get("x-ms-copy-status-description") +} + +// Date returns the value for header Date. +func (dr downloadResponse) Date() time.Time { + s := dr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (dr downloadResponse) ErrorCode() string { + return dr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (dr downloadResponse) ETag() ETag { + return ETag(dr.rawResponse.Header.Get("ETag")) +} + +// IsServerEncrypted returns the value for header x-ms-server-encrypted. +func (dr downloadResponse) IsServerEncrypted() string { + return dr.rawResponse.Header.Get("x-ms-server-encrypted") +} + +// LastModified returns the value for header Last-Modified. +func (dr downloadResponse) LastModified() time.Time { + s := dr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// LeaseDuration returns the value for header x-ms-lease-duration. +func (dr downloadResponse) LeaseDuration() LeaseDurationType { + return LeaseDurationType(dr.rawResponse.Header.Get("x-ms-lease-duration")) +} + +// LeaseState returns the value for header x-ms-lease-state. +func (dr downloadResponse) LeaseState() LeaseStateType { + return LeaseStateType(dr.rawResponse.Header.Get("x-ms-lease-state")) +} + +// LeaseStatus returns the value for header x-ms-lease-status. +func (dr downloadResponse) LeaseStatus() LeaseStatusType { + return LeaseStatusType(dr.rawResponse.Header.Get("x-ms-lease-status")) +} + +// RequestID returns the value for header x-ms-request-id. +func (dr downloadResponse) RequestID() string { + return dr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (dr downloadResponse) Version() string { + return dr.rawResponse.Header.Get("x-ms-version") +} + +// GeoReplication - Geo-Replication information for the Secondary Storage Service +type GeoReplication struct { + // Status - The status of the secondary location. Possible values include: 'GeoReplicationStatusLive', 'GeoReplicationStatusBootstrap', 'GeoReplicationStatusUnavailable', 'GeoReplicationStatusNone' + Status GeoReplicationStatusType `xml:"Status"` + // LastSyncTime - A GMT date/time value, to the second. All primary writes preceding this value are guaranteed to be available for read operations at the secondary. Primary writes after this point in time may or may not be available for reads. + LastSyncTime time.Time `xml:"LastSyncTime"` +} + +// MarshalXML implements the xml.Marshaler interface for GeoReplication. +func (gr GeoReplication) MarshalXML(e *xml.Encoder, start xml.StartElement) error { + gr2 := (*geoReplication)(unsafe.Pointer(&gr)) + return e.EncodeElement(*gr2, start) +} + +// UnmarshalXML implements the xml.Unmarshaler interface for GeoReplication. +func (gr *GeoReplication) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { + gr2 := (*geoReplication)(unsafe.Pointer(gr)) + return d.DecodeElement(gr2, &start) +} + +// KeyInfo - Key information +type KeyInfo struct { + // Start - The date-time the key is active in ISO 8601 UTC time + Start string `xml:"Start"` + // Expiry - The date-time the key expires in ISO 8601 UTC time + Expiry string `xml:"Expiry"` +} + +//NewKeyInfo creates a new KeyInfo struct with the correct time formatting & conversion +func NewKeyInfo(Start, Expiry time.Time) KeyInfo { + return KeyInfo{ + Start: Start.UTC().Format(SASTimeFormat), + Expiry: Expiry.UTC().Format(SASTimeFormat), + } +} + +// ListBlobsFlatSegmentResponse - An enumeration of blobs +type ListBlobsFlatSegmentResponse struct { + rawResponse *http.Response + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"EnumerationResults"` + ServiceEndpoint string `xml:"ServiceEndpoint,attr"` + ContainerName string `xml:"ContainerName,attr"` + Prefix *string `xml:"Prefix"` + Marker *string `xml:"Marker"` + MaxResults *int32 `xml:"MaxResults"` + Delimiter *string `xml:"Delimiter"` + Segment BlobFlatListSegment `xml:"Blobs"` + NextMarker Marker `xml:"NextMarker"` +} + +// Response returns the raw HTTP response object. +func (lbfsr ListBlobsFlatSegmentResponse) Response() *http.Response { + return lbfsr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (lbfsr ListBlobsFlatSegmentResponse) StatusCode() int { + return lbfsr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (lbfsr ListBlobsFlatSegmentResponse) Status() string { + return lbfsr.rawResponse.Status +} + +// ContentType returns the value for header Content-Type. +func (lbfsr ListBlobsFlatSegmentResponse) ContentType() string { + return lbfsr.rawResponse.Header.Get("Content-Type") +} + +// Date returns the value for header Date. +func (lbfsr ListBlobsFlatSegmentResponse) Date() time.Time { + s := lbfsr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (lbfsr ListBlobsFlatSegmentResponse) ErrorCode() string { + return lbfsr.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (lbfsr ListBlobsFlatSegmentResponse) RequestID() string { + return lbfsr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (lbfsr ListBlobsFlatSegmentResponse) Version() string { + return lbfsr.rawResponse.Header.Get("x-ms-version") +} + +// ListBlobsHierarchySegmentResponse - An enumeration of blobs +type ListBlobsHierarchySegmentResponse struct { + rawResponse *http.Response + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"EnumerationResults"` + ServiceEndpoint string `xml:"ServiceEndpoint,attr"` + ContainerName string `xml:"ContainerName,attr"` + Prefix *string `xml:"Prefix"` + Marker *string `xml:"Marker"` + MaxResults *int32 `xml:"MaxResults"` + Delimiter *string `xml:"Delimiter"` + Segment BlobHierarchyListSegment `xml:"Blobs"` + NextMarker Marker `xml:"NextMarker"` +} + +// Response returns the raw HTTP response object. +func (lbhsr ListBlobsHierarchySegmentResponse) Response() *http.Response { + return lbhsr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (lbhsr ListBlobsHierarchySegmentResponse) StatusCode() int { + return lbhsr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (lbhsr ListBlobsHierarchySegmentResponse) Status() string { + return lbhsr.rawResponse.Status +} + +// ContentType returns the value for header Content-Type. +func (lbhsr ListBlobsHierarchySegmentResponse) ContentType() string { + return lbhsr.rawResponse.Header.Get("Content-Type") +} + +// Date returns the value for header Date. +func (lbhsr ListBlobsHierarchySegmentResponse) Date() time.Time { + s := lbhsr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (lbhsr ListBlobsHierarchySegmentResponse) ErrorCode() string { + return lbhsr.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (lbhsr ListBlobsHierarchySegmentResponse) RequestID() string { + return lbhsr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (lbhsr ListBlobsHierarchySegmentResponse) Version() string { + return lbhsr.rawResponse.Header.Get("x-ms-version") +} + +// ListContainersSegmentResponse - An enumeration of containers +type ListContainersSegmentResponse struct { + rawResponse *http.Response + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"EnumerationResults"` + ServiceEndpoint string `xml:"ServiceEndpoint,attr"` + Prefix *string `xml:"Prefix"` + Marker *string `xml:"Marker"` + MaxResults *int32 `xml:"MaxResults"` + ContainerItems []ContainerItem `xml:"Containers>Container"` + NextMarker Marker `xml:"NextMarker"` +} + +// Response returns the raw HTTP response object. +func (lcsr ListContainersSegmentResponse) Response() *http.Response { + return lcsr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (lcsr ListContainersSegmentResponse) StatusCode() int { + return lcsr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (lcsr ListContainersSegmentResponse) Status() string { + return lcsr.rawResponse.Status +} + +// ErrorCode returns the value for header x-ms-error-code. +func (lcsr ListContainersSegmentResponse) ErrorCode() string { + return lcsr.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (lcsr ListContainersSegmentResponse) RequestID() string { + return lcsr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (lcsr ListContainersSegmentResponse) Version() string { + return lcsr.rawResponse.Header.Get("x-ms-version") +} + +// Logging - Azure Analytics Logging settings. +type Logging struct { + // Version - The version of Storage Analytics to configure. + Version string `xml:"Version"` + // Delete - Indicates whether all delete requests should be logged. + Delete bool `xml:"Delete"` + // Read - Indicates whether all read requests should be logged. + Read bool `xml:"Read"` + // Write - Indicates whether all write requests should be logged. + Write bool `xml:"Write"` + RetentionPolicy RetentionPolicy `xml:"RetentionPolicy"` +} + +// Metrics - a summary of request statistics grouped by API in hour or minute aggregates for blobs +type Metrics struct { + // Version - The version of Storage Analytics to configure. + Version *string `xml:"Version"` + // Enabled - Indicates whether metrics are enabled for the Blob service. + Enabled bool `xml:"Enabled"` + // IncludeAPIs - Indicates whether metrics should generate summary statistics for called API operations. + IncludeAPIs *bool `xml:"IncludeAPIs"` + RetentionPolicy *RetentionPolicy `xml:"RetentionPolicy"` +} + +// PageBlobClearPagesResponse ... +type PageBlobClearPagesResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (pbcpr PageBlobClearPagesResponse) Response() *http.Response { + return pbcpr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (pbcpr PageBlobClearPagesResponse) StatusCode() int { + return pbcpr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (pbcpr PageBlobClearPagesResponse) Status() string { + return pbcpr.rawResponse.Status +} + +// BlobSequenceNumber returns the value for header x-ms-blob-sequence-number. +func (pbcpr PageBlobClearPagesResponse) BlobSequenceNumber() int64 { + s := pbcpr.rawResponse.Header.Get("x-ms-blob-sequence-number") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 64) + if err != nil { + i = 0 + } + return i +} + +// ContentMD5 returns the value for header Content-MD5. +func (pbcpr PageBlobClearPagesResponse) ContentMD5() []byte { + s := pbcpr.rawResponse.Header.Get("Content-MD5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// Date returns the value for header Date. +func (pbcpr PageBlobClearPagesResponse) Date() time.Time { + s := pbcpr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (pbcpr PageBlobClearPagesResponse) ErrorCode() string { + return pbcpr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (pbcpr PageBlobClearPagesResponse) ETag() ETag { + return ETag(pbcpr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (pbcpr PageBlobClearPagesResponse) LastModified() time.Time { + s := pbcpr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (pbcpr PageBlobClearPagesResponse) RequestID() string { + return pbcpr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (pbcpr PageBlobClearPagesResponse) Version() string { + return pbcpr.rawResponse.Header.Get("x-ms-version") +} + +// PageBlobCopyIncrementalResponse ... +type PageBlobCopyIncrementalResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (pbcir PageBlobCopyIncrementalResponse) Response() *http.Response { + return pbcir.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (pbcir PageBlobCopyIncrementalResponse) StatusCode() int { + return pbcir.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (pbcir PageBlobCopyIncrementalResponse) Status() string { + return pbcir.rawResponse.Status +} + +// CopyID returns the value for header x-ms-copy-id. +func (pbcir PageBlobCopyIncrementalResponse) CopyID() string { + return pbcir.rawResponse.Header.Get("x-ms-copy-id") +} + +// CopyStatus returns the value for header x-ms-copy-status. +func (pbcir PageBlobCopyIncrementalResponse) CopyStatus() CopyStatusType { + return CopyStatusType(pbcir.rawResponse.Header.Get("x-ms-copy-status")) +} + +// Date returns the value for header Date. +func (pbcir PageBlobCopyIncrementalResponse) Date() time.Time { + s := pbcir.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (pbcir PageBlobCopyIncrementalResponse) ErrorCode() string { + return pbcir.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (pbcir PageBlobCopyIncrementalResponse) ETag() ETag { + return ETag(pbcir.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (pbcir PageBlobCopyIncrementalResponse) LastModified() time.Time { + s := pbcir.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (pbcir PageBlobCopyIncrementalResponse) RequestID() string { + return pbcir.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (pbcir PageBlobCopyIncrementalResponse) Version() string { + return pbcir.rawResponse.Header.Get("x-ms-version") +} + +// PageBlobCreateResponse ... +type PageBlobCreateResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (pbcr PageBlobCreateResponse) Response() *http.Response { + return pbcr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (pbcr PageBlobCreateResponse) StatusCode() int { + return pbcr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (pbcr PageBlobCreateResponse) Status() string { + return pbcr.rawResponse.Status +} + +// ContentMD5 returns the value for header Content-MD5. +func (pbcr PageBlobCreateResponse) ContentMD5() []byte { + s := pbcr.rawResponse.Header.Get("Content-MD5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// Date returns the value for header Date. +func (pbcr PageBlobCreateResponse) Date() time.Time { + s := pbcr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (pbcr PageBlobCreateResponse) ErrorCode() string { + return pbcr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (pbcr PageBlobCreateResponse) ETag() ETag { + return ETag(pbcr.rawResponse.Header.Get("ETag")) +} + +// IsServerEncrypted returns the value for header x-ms-request-server-encrypted. +func (pbcr PageBlobCreateResponse) IsServerEncrypted() string { + return pbcr.rawResponse.Header.Get("x-ms-request-server-encrypted") +} + +// LastModified returns the value for header Last-Modified. +func (pbcr PageBlobCreateResponse) LastModified() time.Time { + s := pbcr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (pbcr PageBlobCreateResponse) RequestID() string { + return pbcr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (pbcr PageBlobCreateResponse) Version() string { + return pbcr.rawResponse.Header.Get("x-ms-version") +} + +// PageBlobResizeResponse ... +type PageBlobResizeResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (pbrr PageBlobResizeResponse) Response() *http.Response { + return pbrr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (pbrr PageBlobResizeResponse) StatusCode() int { + return pbrr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (pbrr PageBlobResizeResponse) Status() string { + return pbrr.rawResponse.Status +} + +// BlobSequenceNumber returns the value for header x-ms-blob-sequence-number. +func (pbrr PageBlobResizeResponse) BlobSequenceNumber() int64 { + s := pbrr.rawResponse.Header.Get("x-ms-blob-sequence-number") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 64) + if err != nil { + i = 0 + } + return i +} + +// Date returns the value for header Date. +func (pbrr PageBlobResizeResponse) Date() time.Time { + s := pbrr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (pbrr PageBlobResizeResponse) ErrorCode() string { + return pbrr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (pbrr PageBlobResizeResponse) ETag() ETag { + return ETag(pbrr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (pbrr PageBlobResizeResponse) LastModified() time.Time { + s := pbrr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (pbrr PageBlobResizeResponse) RequestID() string { + return pbrr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (pbrr PageBlobResizeResponse) Version() string { + return pbrr.rawResponse.Header.Get("x-ms-version") +} + +// PageBlobUpdateSequenceNumberResponse ... +type PageBlobUpdateSequenceNumberResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (pbusnr PageBlobUpdateSequenceNumberResponse) Response() *http.Response { + return pbusnr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (pbusnr PageBlobUpdateSequenceNumberResponse) StatusCode() int { + return pbusnr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (pbusnr PageBlobUpdateSequenceNumberResponse) Status() string { + return pbusnr.rawResponse.Status +} + +// BlobSequenceNumber returns the value for header x-ms-blob-sequence-number. +func (pbusnr PageBlobUpdateSequenceNumberResponse) BlobSequenceNumber() int64 { + s := pbusnr.rawResponse.Header.Get("x-ms-blob-sequence-number") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 64) + if err != nil { + i = 0 + } + return i +} + +// Date returns the value for header Date. +func (pbusnr PageBlobUpdateSequenceNumberResponse) Date() time.Time { + s := pbusnr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (pbusnr PageBlobUpdateSequenceNumberResponse) ErrorCode() string { + return pbusnr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (pbusnr PageBlobUpdateSequenceNumberResponse) ETag() ETag { + return ETag(pbusnr.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (pbusnr PageBlobUpdateSequenceNumberResponse) LastModified() time.Time { + s := pbusnr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (pbusnr PageBlobUpdateSequenceNumberResponse) RequestID() string { + return pbusnr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (pbusnr PageBlobUpdateSequenceNumberResponse) Version() string { + return pbusnr.rawResponse.Header.Get("x-ms-version") +} + +// PageBlobUploadPagesFromURLResponse ... +type PageBlobUploadPagesFromURLResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (pbupfur PageBlobUploadPagesFromURLResponse) Response() *http.Response { + return pbupfur.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (pbupfur PageBlobUploadPagesFromURLResponse) StatusCode() int { + return pbupfur.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (pbupfur PageBlobUploadPagesFromURLResponse) Status() string { + return pbupfur.rawResponse.Status +} + +// BlobSequenceNumber returns the value for header x-ms-blob-sequence-number. +func (pbupfur PageBlobUploadPagesFromURLResponse) BlobSequenceNumber() int64 { + s := pbupfur.rawResponse.Header.Get("x-ms-blob-sequence-number") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 64) + if err != nil { + i = 0 + } + return i +} + +// ContentMD5 returns the value for header Content-MD5. +func (pbupfur PageBlobUploadPagesFromURLResponse) ContentMD5() []byte { + s := pbupfur.rawResponse.Header.Get("Content-MD5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// Date returns the value for header Date. +func (pbupfur PageBlobUploadPagesFromURLResponse) Date() time.Time { + s := pbupfur.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (pbupfur PageBlobUploadPagesFromURLResponse) ErrorCode() string { + return pbupfur.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (pbupfur PageBlobUploadPagesFromURLResponse) ETag() ETag { + return ETag(pbupfur.rawResponse.Header.Get("ETag")) +} + +// IsServerEncrypted returns the value for header x-ms-request-server-encrypted. +func (pbupfur PageBlobUploadPagesFromURLResponse) IsServerEncrypted() string { + return pbupfur.rawResponse.Header.Get("x-ms-request-server-encrypted") +} + +// LastModified returns the value for header Last-Modified. +func (pbupfur PageBlobUploadPagesFromURLResponse) LastModified() time.Time { + s := pbupfur.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (pbupfur PageBlobUploadPagesFromURLResponse) RequestID() string { + return pbupfur.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (pbupfur PageBlobUploadPagesFromURLResponse) Version() string { + return pbupfur.rawResponse.Header.Get("x-ms-version") +} + +// PageBlobUploadPagesResponse ... +type PageBlobUploadPagesResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (pbupr PageBlobUploadPagesResponse) Response() *http.Response { + return pbupr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (pbupr PageBlobUploadPagesResponse) StatusCode() int { + return pbupr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (pbupr PageBlobUploadPagesResponse) Status() string { + return pbupr.rawResponse.Status +} + +// BlobSequenceNumber returns the value for header x-ms-blob-sequence-number. +func (pbupr PageBlobUploadPagesResponse) BlobSequenceNumber() int64 { + s := pbupr.rawResponse.Header.Get("x-ms-blob-sequence-number") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 64) + if err != nil { + i = 0 + } + return i +} + +// ContentMD5 returns the value for header Content-MD5. +func (pbupr PageBlobUploadPagesResponse) ContentMD5() []byte { + s := pbupr.rawResponse.Header.Get("Content-MD5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// Date returns the value for header Date. +func (pbupr PageBlobUploadPagesResponse) Date() time.Time { + s := pbupr.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (pbupr PageBlobUploadPagesResponse) ErrorCode() string { + return pbupr.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (pbupr PageBlobUploadPagesResponse) ETag() ETag { + return ETag(pbupr.rawResponse.Header.Get("ETag")) +} + +// IsServerEncrypted returns the value for header x-ms-request-server-encrypted. +func (pbupr PageBlobUploadPagesResponse) IsServerEncrypted() string { + return pbupr.rawResponse.Header.Get("x-ms-request-server-encrypted") +} + +// LastModified returns the value for header Last-Modified. +func (pbupr PageBlobUploadPagesResponse) LastModified() time.Time { + s := pbupr.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (pbupr PageBlobUploadPagesResponse) RequestID() string { + return pbupr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (pbupr PageBlobUploadPagesResponse) Version() string { + return pbupr.rawResponse.Header.Get("x-ms-version") +} + +// PageList - the list of pages +type PageList struct { + rawResponse *http.Response + PageRange []PageRange `xml:"PageRange"` + ClearRange []ClearRange `xml:"ClearRange"` +} + +// Response returns the raw HTTP response object. +func (pl PageList) Response() *http.Response { + return pl.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (pl PageList) StatusCode() int { + return pl.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (pl PageList) Status() string { + return pl.rawResponse.Status +} + +// BlobContentLength returns the value for header x-ms-blob-content-length. +func (pl PageList) BlobContentLength() int64 { + s := pl.rawResponse.Header.Get("x-ms-blob-content-length") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 64) + if err != nil { + i = 0 + } + return i +} + +// Date returns the value for header Date. +func (pl PageList) Date() time.Time { + s := pl.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (pl PageList) ErrorCode() string { + return pl.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (pl PageList) ETag() ETag { + return ETag(pl.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (pl PageList) LastModified() time.Time { + s := pl.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (pl PageList) RequestID() string { + return pl.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (pl PageList) Version() string { + return pl.rawResponse.Header.Get("x-ms-version") +} + +// PageRange ... +type PageRange struct { + Start int64 `xml:"Start"` + End int64 `xml:"End"` +} + +// RetentionPolicy - the retention policy which determines how long the associated data should persist +type RetentionPolicy struct { + // Enabled - Indicates whether a retention policy is enabled for the storage service + Enabled bool `xml:"Enabled"` + // Days - Indicates the number of days that metrics or logging or soft-deleted data should be retained. All data older than this value will be deleted + Days *int32 `xml:"Days"` +} + +// ServiceGetAccountInfoResponse ... +type ServiceGetAccountInfoResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (sgair ServiceGetAccountInfoResponse) Response() *http.Response { + return sgair.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (sgair ServiceGetAccountInfoResponse) StatusCode() int { + return sgair.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (sgair ServiceGetAccountInfoResponse) Status() string { + return sgair.rawResponse.Status +} + +// AccountKind returns the value for header x-ms-account-kind. +func (sgair ServiceGetAccountInfoResponse) AccountKind() AccountKindType { + return AccountKindType(sgair.rawResponse.Header.Get("x-ms-account-kind")) +} + +// Date returns the value for header Date. +func (sgair ServiceGetAccountInfoResponse) Date() time.Time { + s := sgair.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (sgair ServiceGetAccountInfoResponse) ErrorCode() string { + return sgair.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (sgair ServiceGetAccountInfoResponse) RequestID() string { + return sgair.rawResponse.Header.Get("x-ms-request-id") +} + +// SkuName returns the value for header x-ms-sku-name. +func (sgair ServiceGetAccountInfoResponse) SkuName() SkuNameType { + return SkuNameType(sgair.rawResponse.Header.Get("x-ms-sku-name")) +} + +// Version returns the value for header x-ms-version. +func (sgair ServiceGetAccountInfoResponse) Version() string { + return sgair.rawResponse.Header.Get("x-ms-version") +} + +// ServiceSetPropertiesResponse ... +type ServiceSetPropertiesResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (sspr ServiceSetPropertiesResponse) Response() *http.Response { + return sspr.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (sspr ServiceSetPropertiesResponse) StatusCode() int { + return sspr.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (sspr ServiceSetPropertiesResponse) Status() string { + return sspr.rawResponse.Status +} + +// ErrorCode returns the value for header x-ms-error-code. +func (sspr ServiceSetPropertiesResponse) ErrorCode() string { + return sspr.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (sspr ServiceSetPropertiesResponse) RequestID() string { + return sspr.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (sspr ServiceSetPropertiesResponse) Version() string { + return sspr.rawResponse.Header.Get("x-ms-version") +} + +// SignedIdentifier - signed identifier +type SignedIdentifier struct { + // ID - a unique id + ID string `xml:"Id"` + AccessPolicy AccessPolicy `xml:"AccessPolicy"` +} + +// SignedIdentifiers - Wraps the response from the containerClient.GetAccessPolicy method. +type SignedIdentifiers struct { + rawResponse *http.Response + Items []SignedIdentifier `xml:"SignedIdentifier"` +} + +// Response returns the raw HTTP response object. +func (si SignedIdentifiers) Response() *http.Response { + return si.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (si SignedIdentifiers) StatusCode() int { + return si.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (si SignedIdentifiers) Status() string { + return si.rawResponse.Status +} + +// BlobPublicAccess returns the value for header x-ms-blob-public-access. +func (si SignedIdentifiers) BlobPublicAccess() PublicAccessType { + return PublicAccessType(si.rawResponse.Header.Get("x-ms-blob-public-access")) +} + +// Date returns the value for header Date. +func (si SignedIdentifiers) Date() time.Time { + s := si.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (si SignedIdentifiers) ErrorCode() string { + return si.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (si SignedIdentifiers) ETag() ETag { + return ETag(si.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (si SignedIdentifiers) LastModified() time.Time { + s := si.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (si SignedIdentifiers) RequestID() string { + return si.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (si SignedIdentifiers) Version() string { + return si.rawResponse.Header.Get("x-ms-version") +} + +// StaticWebsite - The properties that enable an account to host a static website +type StaticWebsite struct { + // Enabled - Indicates whether this account is hosting a static website + Enabled bool `xml:"Enabled"` + // IndexDocument - The default name of the index page under each directory + IndexDocument *string `xml:"IndexDocument"` + // ErrorDocument404Path - The absolute path of the custom 404 page + ErrorDocument404Path *string `xml:"ErrorDocument404Path"` +} + +// StorageServiceProperties - Storage Service Properties. +type StorageServiceProperties struct { + rawResponse *http.Response + Logging *Logging `xml:"Logging"` + HourMetrics *Metrics `xml:"HourMetrics"` + MinuteMetrics *Metrics `xml:"MinuteMetrics"` + // Cors - The set of CORS rules. + Cors []CorsRule `xml:"Cors>CorsRule"` + // DefaultServiceVersion - The default version to use for requests to the Blob service if an incoming request's version is not specified. Possible values include version 2008-10-27 and all more recent versions + DefaultServiceVersion *string `xml:"DefaultServiceVersion"` + DeleteRetentionPolicy *RetentionPolicy `xml:"DeleteRetentionPolicy"` + StaticWebsite *StaticWebsite `xml:"StaticWebsite"` +} + +// Response returns the raw HTTP response object. +func (ssp StorageServiceProperties) Response() *http.Response { + return ssp.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (ssp StorageServiceProperties) StatusCode() int { + return ssp.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (ssp StorageServiceProperties) Status() string { + return ssp.rawResponse.Status +} + +// ErrorCode returns the value for header x-ms-error-code. +func (ssp StorageServiceProperties) ErrorCode() string { + return ssp.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (ssp StorageServiceProperties) RequestID() string { + return ssp.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (ssp StorageServiceProperties) Version() string { + return ssp.rawResponse.Header.Get("x-ms-version") +} + +// StorageServiceStats - Stats for the storage service. +type StorageServiceStats struct { + rawResponse *http.Response + GeoReplication *GeoReplication `xml:"GeoReplication"` +} + +// Response returns the raw HTTP response object. +func (sss StorageServiceStats) Response() *http.Response { + return sss.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (sss StorageServiceStats) StatusCode() int { + return sss.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (sss StorageServiceStats) Status() string { + return sss.rawResponse.Status +} + +// Date returns the value for header Date. +func (sss StorageServiceStats) Date() time.Time { + s := sss.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (sss StorageServiceStats) ErrorCode() string { + return sss.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (sss StorageServiceStats) RequestID() string { + return sss.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (sss StorageServiceStats) Version() string { + return sss.rawResponse.Header.Get("x-ms-version") +} + +// UserDelegationKey - A user delegation key +type UserDelegationKey struct { + rawResponse *http.Response + // SignedOid - The Azure Active Directory object ID in GUID format. + SignedOid string `xml:"SignedOid"` + // SignedTid - The Azure Active Directory tenant ID in GUID format + SignedTid string `xml:"SignedTid"` + // SignedStart - The date-time the key is active + SignedStart time.Time `xml:"SignedStart"` + // SignedExpiry - The date-time the key expires + SignedExpiry time.Time `xml:"SignedExpiry"` + // SignedService - Abbreviation of the Azure Storage service that accepts the key + SignedService string `xml:"SignedService"` + // SignedVersion - The service version that created the key + SignedVersion string `xml:"SignedVersion"` + // Value - The key as a base64 string + Value string `xml:"Value"` +} + +func (udk UserDelegationKey) ComputeHMACSHA256(message string) (base64String string) { + bytes, _ := base64.StdEncoding.DecodeString(udk.Value) + h := hmac.New(sha256.New, bytes) + h.Write([]byte(message)) + return base64.StdEncoding.EncodeToString(h.Sum(nil)) +} + +// MarshalXML implements the xml.Marshaler interface for UserDelegationKey. +func (udk UserDelegationKey) MarshalXML(e *xml.Encoder, start xml.StartElement) error { + udk2 := (*userDelegationKey)(unsafe.Pointer(&udk)) + return e.EncodeElement(*udk2, start) +} + +// UnmarshalXML implements the xml.Unmarshaler interface for UserDelegationKey. +func (udk *UserDelegationKey) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { + udk2 := (*userDelegationKey)(unsafe.Pointer(udk)) + return d.DecodeElement(udk2, &start) +} + +// Response returns the raw HTTP response object. +func (udk UserDelegationKey) Response() *http.Response { + return udk.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (udk UserDelegationKey) StatusCode() int { + return udk.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (udk UserDelegationKey) Status() string { + return udk.rawResponse.Status +} + +// Date returns the value for header Date. +func (udk UserDelegationKey) Date() time.Time { + s := udk.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (udk UserDelegationKey) ErrorCode() string { + return udk.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (udk UserDelegationKey) RequestID() string { + return udk.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (udk UserDelegationKey) Version() string { + return udk.rawResponse.Header.Get("x-ms-version") +} + +func init() { + if reflect.TypeOf((*UserDelegationKey)(nil)).Elem().Size() != reflect.TypeOf((*userDelegationKey)(nil)).Elem().Size() { + validateError(errors.New("size mismatch between UserDelegationKey and userDelegationKey")) + } + if reflect.TypeOf((*AccessPolicy)(nil)).Elem().Size() != reflect.TypeOf((*accessPolicy)(nil)).Elem().Size() { + validateError(errors.New("size mismatch between AccessPolicy and accessPolicy")) + } + if reflect.TypeOf((*BlobProperties)(nil)).Elem().Size() != reflect.TypeOf((*blobProperties)(nil)).Elem().Size() { + validateError(errors.New("size mismatch between BlobProperties and blobProperties")) + } + if reflect.TypeOf((*ContainerProperties)(nil)).Elem().Size() != reflect.TypeOf((*containerProperties)(nil)).Elem().Size() { + validateError(errors.New("size mismatch between ContainerProperties and containerProperties")) + } + if reflect.TypeOf((*GeoReplication)(nil)).Elem().Size() != reflect.TypeOf((*geoReplication)(nil)).Elem().Size() { + validateError(errors.New("size mismatch between GeoReplication and geoReplication")) + } +} + +const ( + rfc3339Format = "2006-01-02T15:04:05Z" //This was wrong in the generated code, FYI +) + +// used to convert times from UTC to GMT before sending across the wire +var gmt = time.FixedZone("GMT", 0) + +// internal type used for marshalling time in RFC1123 format +type timeRFC1123 struct { + time.Time +} + +// MarshalText implements the encoding.TextMarshaler interface for timeRFC1123. +func (t timeRFC1123) MarshalText() ([]byte, error) { + return []byte(t.Format(time.RFC1123)), nil +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface for timeRFC1123. +func (t *timeRFC1123) UnmarshalText(data []byte) (err error) { + t.Time, err = time.Parse(time.RFC1123, string(data)) + return +} + +// internal type used for marshalling time in RFC3339 format +type timeRFC3339 struct { + time.Time +} + +// MarshalText implements the encoding.TextMarshaler interface for timeRFC3339. +func (t timeRFC3339) MarshalText() ([]byte, error) { + return []byte(t.Format(rfc3339Format)), nil +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface for timeRFC3339. +func (t *timeRFC3339) UnmarshalText(data []byte) (err error) { + t.Time, err = time.Parse(rfc3339Format, string(data)) + return +} + +// internal type used for marshalling base64 encoded strings +type base64Encoded struct { + b []byte +} + +// MarshalText implements the encoding.TextMarshaler interface for base64Encoded. +func (c base64Encoded) MarshalText() ([]byte, error) { + return []byte(base64.StdEncoding.EncodeToString(c.b)), nil +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface for base64Encoded. +func (c *base64Encoded) UnmarshalText(data []byte) error { + b, err := base64.StdEncoding.DecodeString(string(data)) + if err != nil { + return err + } + c.b = b + return nil +} + +// internal type used for marshalling +type userDelegationKey struct { + rawResponse *http.Response + SignedOid string `xml:"SignedOid"` + SignedTid string `xml:"SignedTid"` + SignedStart timeRFC3339 `xml:"SignedStart"` + SignedExpiry timeRFC3339 `xml:"SignedExpiry"` + SignedService string `xml:"SignedService"` + SignedVersion string `xml:"SignedVersion"` + Value string `xml:"Value"` +} + +// internal type used for marshalling +type accessPolicy struct { + Start timeRFC3339 `xml:"Start"` + Expiry timeRFC3339 `xml:"Expiry"` + Permission string `xml:"Permission"` +} + +// internal type used for marshalling +type blobProperties struct { + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"Properties"` + CreationTime *timeRFC1123 `xml:"Creation-Time"` + LastModified timeRFC1123 `xml:"Last-Modified"` + Etag ETag `xml:"Etag"` + ContentLength *int64 `xml:"Content-Length"` + ContentType *string `xml:"Content-Type"` + ContentEncoding *string `xml:"Content-Encoding"` + ContentLanguage *string `xml:"Content-Language"` + ContentMD5 base64Encoded `xml:"Content-MD5"` + ContentDisposition *string `xml:"Content-Disposition"` + CacheControl *string `xml:"Cache-Control"` + BlobSequenceNumber *int64 `xml:"x-ms-blob-sequence-number"` + BlobType BlobType `xml:"BlobType"` + LeaseStatus LeaseStatusType `xml:"LeaseStatus"` + LeaseState LeaseStateType `xml:"LeaseState"` + LeaseDuration LeaseDurationType `xml:"LeaseDuration"` + CopyID *string `xml:"CopyId"` + CopyStatus CopyStatusType `xml:"CopyStatus"` + CopySource *string `xml:"CopySource"` + CopyProgress *string `xml:"CopyProgress"` + CopyCompletionTime *timeRFC1123 `xml:"CopyCompletionTime"` + CopyStatusDescription *string `xml:"CopyStatusDescription"` + ServerEncrypted *bool `xml:"ServerEncrypted"` + IncrementalCopy *bool `xml:"IncrementalCopy"` + DestinationSnapshot *string `xml:"DestinationSnapshot"` + DeletedTime *timeRFC1123 `xml:"DeletedTime"` + RemainingRetentionDays *int32 `xml:"RemainingRetentionDays"` + AccessTier AccessTierType `xml:"AccessTier"` + AccessTierInferred *bool `xml:"AccessTierInferred"` + ArchiveStatus ArchiveStatusType `xml:"ArchiveStatus"` + AccessTierChangeTime *timeRFC1123 `xml:"AccessTierChangeTime"` +} + +// internal type used for marshalling +type containerProperties struct { + LastModified timeRFC1123 `xml:"Last-Modified"` + Etag ETag `xml:"Etag"` + LeaseStatus LeaseStatusType `xml:"LeaseStatus"` + LeaseState LeaseStateType `xml:"LeaseState"` + LeaseDuration LeaseDurationType `xml:"LeaseDuration"` + PublicAccess PublicAccessType `xml:"PublicAccess"` + HasImmutabilityPolicy *bool `xml:"HasImmutabilityPolicy"` + HasLegalHold *bool `xml:"HasLegalHold"` +} + +// internal type used for marshalling +type geoReplication struct { + Status GeoReplicationStatusType `xml:"Status"` + LastSyncTime timeRFC1123 `xml:"LastSyncTime"` +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_page_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_page_blob.go new file mode 100644 index 000000000..42e27da4c --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_page_blob.go @@ -0,0 +1,896 @@ +package azblob + +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "encoding/base64" + "encoding/xml" + "github.com/Azure/azure-pipeline-go/pipeline" + "io" + "io/ioutil" + "net/http" + "net/url" + "strconv" + "time" +) + +// pageBlobClient is the client for the PageBlob methods of the Azblob service. +type pageBlobClient struct { + managementClient +} + +// newPageBlobClient creates an instance of the pageBlobClient client. +func newPageBlobClient(url url.URL, p pipeline.Pipeline) pageBlobClient { + return pageBlobClient{newManagementClient(url, p)} +} + +// ClearPages the Clear Pages operation clears a set of pages from a page blob +// +// contentLength is the length of the request. timeout is the timeout parameter is expressed in seconds. For more +// information, see Setting +// Timeouts for Blob Service Operations. rangeParameter is return only the bytes of the blob in the specified +// range. leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID. +// ifSequenceNumberLessThanOrEqualTo is specify this header value to operate only on a blob if it has a sequence number +// less than or equal to the specified. ifSequenceNumberLessThan is specify this header value to operate only on a blob +// if it has a sequence number less than the specified. ifSequenceNumberEqualTo is specify this header value to operate +// only on a blob if it has the specified sequence number. ifModifiedSince is specify this header value to operate only +// on a blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to +// operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value +// to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs +// without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is +// recorded in the analytics logs when storage analytics logging is enabled. +func (client pageBlobClient) ClearPages(ctx context.Context, contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobClearPagesResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.clearPagesPreparer(contentLength, timeout, rangeParameter, leaseID, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.clearPagesResponder}, req) + if err != nil { + return nil, err + } + return resp.(*PageBlobClearPagesResponse), err +} + +// clearPagesPreparer prepares the ClearPages request. +func (client pageBlobClient) clearPagesPreparer(contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "page") + req.URL.RawQuery = params.Encode() + req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) + if rangeParameter != nil { + req.Header.Set("x-ms-range", *rangeParameter) + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if ifSequenceNumberLessThanOrEqualTo != nil { + req.Header.Set("x-ms-if-sequence-number-le", strconv.FormatInt(*ifSequenceNumberLessThanOrEqualTo, 10)) + } + if ifSequenceNumberLessThan != nil { + req.Header.Set("x-ms-if-sequence-number-lt", strconv.FormatInt(*ifSequenceNumberLessThan, 10)) + } + if ifSequenceNumberEqualTo != nil { + req.Header.Set("x-ms-if-sequence-number-eq", strconv.FormatInt(*ifSequenceNumberEqualTo, 10)) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-page-write", "clear") + return req, nil +} + +// clearPagesResponder handles the response to the ClearPages request. +func (client pageBlobClient) clearPagesResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &PageBlobClearPagesResponse{rawResponse: resp.Response()}, err +} + +// CopyIncremental the Copy Incremental operation copies a snapshot of the source page blob to a destination page blob. +// The snapshot is copied such that only the differential changes between the previously copied snapshot are +// transferred to the destination. The copied snapshots are complete copies of the original snapshot and can be read or +// copied from as usual. This API is supported since REST version 2016-05-31. +// +// copySource is specifies the name of the source page blob snapshot. This value is a URL of up to 2 KB in length that +// specifies a page blob snapshot. The value should be URL-encoded as it would appear in a request URI. The source blob +// must either be public or must be authenticated via a shared access signature. timeout is the timeout parameter is +// expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if +// it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only +// on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate +// only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a +// matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded +// in the analytics logs when storage analytics logging is enabled. +func (client pageBlobClient) CopyIncremental(ctx context.Context, copySource string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobCopyIncrementalResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.copyIncrementalPreparer(copySource, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.copyIncrementalResponder}, req) + if err != nil { + return nil, err + } + return resp.(*PageBlobCopyIncrementalResponse), err +} + +// copyIncrementalPreparer prepares the CopyIncremental request. +func (client pageBlobClient) copyIncrementalPreparer(copySource string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "incrementalcopy") + req.URL.RawQuery = params.Encode() + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-copy-source", copySource) + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// copyIncrementalResponder handles the response to the CopyIncremental request. +func (client pageBlobClient) copyIncrementalResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusAccepted) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &PageBlobCopyIncrementalResponse{rawResponse: resp.Response()}, err +} + +// Create the Create operation creates a new page blob. +// +// contentLength is the length of the request. blobContentLength is this header specifies the maximum size for the page +// blob, up to 1 TB. The page blob size must be aligned to a 512-byte boundary. timeout is the timeout parameter is +// expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. blobContentType is optional. Sets the blob's content type. If specified, +// this property is stored with the blob and returned with a read request. blobContentEncoding is optional. Sets the +// blob's content encoding. If specified, this property is stored with the blob and returned with a read request. +// blobContentLanguage is optional. Set the blob's content language. If specified, this property is stored with the +// blob and returned with a read request. blobContentMD5 is optional. An MD5 hash of the blob content. Note that this +// hash is not validated, as the hashes for the individual blocks were validated when each was uploaded. +// blobCacheControl is optional. Sets the blob's cache control. If specified, this property is stored with the blob and +// returned with a read request. metadata is optional. Specifies a user-defined name-value pair associated with the +// blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or file to the +// destination blob. If one or more name-value pairs are specified, the destination blob is created with the specified +// metadata, and metadata is not copied from the source blob or file. Note that beginning with version 2009-09-19, +// metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, Blobs, and +// Metadata for more information. leaseID is if specified, the operation only succeeds if the resource's lease is +// active and matches this ID. blobContentDisposition is optional. Sets the blob's Content-Disposition header. +// ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified +// date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified +// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value. +// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. blobSequenceNumber is set +// for page blobs only. The sequence number is a user-controlled value that you can use to track requests. The value of +// the sequence number must be between 0 and 2^63 - 1. requestID is provides a client-generated, opaque value with a 1 +// KB character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client pageBlobClient) Create(ctx context.Context, contentLength int64, blobContentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (*PageBlobCreateResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.createPreparer(contentLength, blobContentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, blobSequenceNumber, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.createResponder}, req) + if err != nil { + return nil, err + } + return resp.(*PageBlobCreateResponse), err +} + +// createPreparer prepares the Create request. +func (client pageBlobClient) createPreparer(contentLength int64, blobContentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + req.URL.RawQuery = params.Encode() + req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) + if blobContentType != nil { + req.Header.Set("x-ms-blob-content-type", *blobContentType) + } + if blobContentEncoding != nil { + req.Header.Set("x-ms-blob-content-encoding", *blobContentEncoding) + } + if blobContentLanguage != nil { + req.Header.Set("x-ms-blob-content-language", *blobContentLanguage) + } + if blobContentMD5 != nil { + req.Header.Set("x-ms-blob-content-md5", base64.StdEncoding.EncodeToString(blobContentMD5)) + } + if blobCacheControl != nil { + req.Header.Set("x-ms-blob-cache-control", *blobCacheControl) + } + if metadata != nil { + for k, v := range metadata { + req.Header.Set("x-ms-meta-"+k, v) + } + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if blobContentDisposition != nil { + req.Header.Set("x-ms-blob-content-disposition", *blobContentDisposition) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-blob-content-length", strconv.FormatInt(blobContentLength, 10)) + if blobSequenceNumber != nil { + req.Header.Set("x-ms-blob-sequence-number", strconv.FormatInt(*blobSequenceNumber, 10)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-blob-type", "PageBlob") + return req, nil +} + +// createResponder handles the response to the Create request. +func (client pageBlobClient) createResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &PageBlobCreateResponse{rawResponse: resp.Response()}, err +} + +// GetPageRanges the Get Page Ranges operation returns the list of valid page ranges for a page blob or snapshot of a +// page blob +// +// snapshot is the snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to +// retrieve. For more information on working with blob snapshots, see Creating +// a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. rangeParameter is return only the bytes of the blob in the specified +// range. leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID. +// ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified +// date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified +// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value. +// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. requestID is provides a +// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage +// analytics logging is enabled. +func (client pageBlobClient) GetPageRanges(ctx context.Context, snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageList, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.getPageRangesPreparer(snapshot, timeout, rangeParameter, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getPageRangesResponder}, req) + if err != nil { + return nil, err + } + return resp.(*PageList), err +} + +// getPageRangesPreparer prepares the GetPageRanges request. +func (client pageBlobClient) getPageRangesPreparer(snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if snapshot != nil && len(*snapshot) > 0 { + params.Set("snapshot", *snapshot) + } + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "pagelist") + req.URL.RawQuery = params.Encode() + if rangeParameter != nil { + req.Header.Set("x-ms-range", *rangeParameter) + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// getPageRangesResponder handles the response to the GetPageRanges request. +func (client pageBlobClient) getPageRangesResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + result := &PageList{rawResponse: resp.Response()} + if err != nil { + return result, err + } + defer resp.Response().Body.Close() + b, err := ioutil.ReadAll(resp.Response().Body) + if err != nil { + return result, err + } + if len(b) > 0 { + b = removeBOM(b) + err = xml.Unmarshal(b, result) + if err != nil { + return result, NewResponseError(err, resp.Response(), "failed to unmarshal response body") + } + } + return result, nil +} + +// GetPageRangesDiff the Get Page Ranges Diff operation returns the list of valid page ranges for a page blob that were +// changed between target blob and previous snapshot. +// +// snapshot is the snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to +// retrieve. For more information on working with blob snapshots, see Creating +// a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. prevsnapshot is optional in version 2015-07-08 and newer. The prevsnapshot +// parameter is a DateTime value that specifies that the response will contain only pages that were changed between +// target blob and previous snapshot. Changed pages include both updated and cleared pages. The target blob may be a +// snapshot, as long as the snapshot specified by prevsnapshot is the older of the two. Note that incremental snapshots +// are currently supported only for blobs created on or after January 1, 2016. rangeParameter is return only the bytes +// of the blob in the specified range. leaseID is if specified, the operation only succeeds if the resource's lease is +// active and matches this ID. ifModifiedSince is specify this header value to operate only on a blob if it has been +// modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if +// it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on blobs +// with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client pageBlobClient) GetPageRangesDiff(ctx context.Context, snapshot *string, timeout *int32, prevsnapshot *string, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageList, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.getPageRangesDiffPreparer(snapshot, timeout, prevsnapshot, rangeParameter, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getPageRangesDiffResponder}, req) + if err != nil { + return nil, err + } + return resp.(*PageList), err +} + +// getPageRangesDiffPreparer prepares the GetPageRangesDiff request. +func (client pageBlobClient) getPageRangesDiffPreparer(snapshot *string, timeout *int32, prevsnapshot *string, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if snapshot != nil && len(*snapshot) > 0 { + params.Set("snapshot", *snapshot) + } + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + if prevsnapshot != nil && len(*prevsnapshot) > 0 { + params.Set("prevsnapshot", *prevsnapshot) + } + params.Set("comp", "pagelist") + req.URL.RawQuery = params.Encode() + if rangeParameter != nil { + req.Header.Set("x-ms-range", *rangeParameter) + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// getPageRangesDiffResponder handles the response to the GetPageRangesDiff request. +func (client pageBlobClient) getPageRangesDiffResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + result := &PageList{rawResponse: resp.Response()} + if err != nil { + return result, err + } + defer resp.Response().Body.Close() + b, err := ioutil.ReadAll(resp.Response().Body) + if err != nil { + return result, err + } + if len(b) > 0 { + b = removeBOM(b) + err = xml.Unmarshal(b, result) + if err != nil { + return result, NewResponseError(err, resp.Response(), "failed to unmarshal response body") + } + } + return result, nil +} + +// Resize resize the Blob +// +// blobContentLength is this header specifies the maximum size for the page blob, up to 1 TB. The page blob size must +// be aligned to a 512-byte boundary. timeout is the timeout parameter is expressed in seconds. For more information, +// see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a blob if it +// has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a +// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on +// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client pageBlobClient) Resize(ctx context.Context, blobContentLength int64, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobResizeResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.resizePreparer(blobContentLength, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.resizeResponder}, req) + if err != nil { + return nil, err + } + return resp.(*PageBlobResizeResponse), err +} + +// resizePreparer prepares the Resize request. +func (client pageBlobClient) resizePreparer(blobContentLength int64, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "properties") + req.URL.RawQuery = params.Encode() + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-blob-content-length", strconv.FormatInt(blobContentLength, 10)) + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// resizeResponder handles the response to the Resize request. +func (client pageBlobClient) resizeResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &PageBlobResizeResponse{rawResponse: resp.Response()}, err +} + +// UpdateSequenceNumber update the sequence number of the blob +// +// sequenceNumberAction is required if the x-ms-blob-sequence-number header is set for the request. This property +// applies to page blobs only. This property indicates how the service should modify the blob's sequence number timeout +// is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a blob if it +// has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a +// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on +// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// blobSequenceNumber is set for page blobs only. The sequence number is a user-controlled value that you can use to +// track requests. The value of the sequence number must be between 0 and 2^63 - 1. requestID is provides a +// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage +// analytics logging is enabled. +func (client pageBlobClient) UpdateSequenceNumber(ctx context.Context, sequenceNumberAction SequenceNumberActionType, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (*PageBlobUpdateSequenceNumberResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.updateSequenceNumberPreparer(sequenceNumberAction, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, blobSequenceNumber, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.updateSequenceNumberResponder}, req) + if err != nil { + return nil, err + } + return resp.(*PageBlobUpdateSequenceNumberResponse), err +} + +// updateSequenceNumberPreparer prepares the UpdateSequenceNumber request. +func (client pageBlobClient) updateSequenceNumberPreparer(sequenceNumberAction SequenceNumberActionType, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "properties") + req.URL.RawQuery = params.Encode() + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-sequence-number-action", string(sequenceNumberAction)) + if blobSequenceNumber != nil { + req.Header.Set("x-ms-blob-sequence-number", strconv.FormatInt(*blobSequenceNumber, 10)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// updateSequenceNumberResponder handles the response to the UpdateSequenceNumber request. +func (client pageBlobClient) updateSequenceNumberResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &PageBlobUpdateSequenceNumberResponse{rawResponse: resp.Response()}, err +} + +// UploadPages the Upload Pages operation writes a range of pages to a page blob +// +// body is initial data body will be closed upon successful return. Callers should ensure closure when receiving an +// error.contentLength is the length of the request. transactionalContentMD5 is specify the transactional md5 for the +// body, to be validated by the service. timeout is the timeout parameter is expressed in seconds. For more +// information, see Setting +// Timeouts for Blob Service Operations. rangeParameter is return only the bytes of the blob in the specified +// range. leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID. +// ifSequenceNumberLessThanOrEqualTo is specify this header value to operate only on a blob if it has a sequence number +// less than or equal to the specified. ifSequenceNumberLessThan is specify this header value to operate only on a blob +// if it has a sequence number less than the specified. ifSequenceNumberEqualTo is specify this header value to operate +// only on a blob if it has the specified sequence number. ifModifiedSince is specify this header value to operate only +// on a blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to +// operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value +// to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs +// without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is +// recorded in the analytics logs when storage analytics logging is enabled. +func (client pageBlobClient) UploadPages(ctx context.Context, body io.ReadSeeker, contentLength int64, transactionalContentMD5 []byte, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobUploadPagesResponse, error) { + if err := validate([]validation{ + {targetValue: body, + constraints: []constraint{{target: "body", name: null, rule: true, chain: nil}}}, + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.uploadPagesPreparer(body, contentLength, transactionalContentMD5, timeout, rangeParameter, leaseID, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.uploadPagesResponder}, req) + if err != nil { + return nil, err + } + return resp.(*PageBlobUploadPagesResponse), err +} + +// uploadPagesPreparer prepares the UploadPages request. +func (client pageBlobClient) uploadPagesPreparer(body io.ReadSeeker, contentLength int64, transactionalContentMD5 []byte, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, body) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "page") + req.URL.RawQuery = params.Encode() + req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) + if transactionalContentMD5 != nil { + req.Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(transactionalContentMD5)) + } + if rangeParameter != nil { + req.Header.Set("x-ms-range", *rangeParameter) + } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if ifSequenceNumberLessThanOrEqualTo != nil { + req.Header.Set("x-ms-if-sequence-number-le", strconv.FormatInt(*ifSequenceNumberLessThanOrEqualTo, 10)) + } + if ifSequenceNumberLessThan != nil { + req.Header.Set("x-ms-if-sequence-number-lt", strconv.FormatInt(*ifSequenceNumberLessThan, 10)) + } + if ifSequenceNumberEqualTo != nil { + req.Header.Set("x-ms-if-sequence-number-eq", strconv.FormatInt(*ifSequenceNumberEqualTo, 10)) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-page-write", "update") + return req, nil +} + +// uploadPagesResponder handles the response to the UploadPages request. +func (client pageBlobClient) uploadPagesResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &PageBlobUploadPagesResponse{rawResponse: resp.Response()}, err +} + +// UploadPagesFromURL the Upload Pages operation writes a range of pages to a page blob where the contents are read +// from a URL +// +// sourceURL is specify a URL to the copy source. sourceRange is bytes of source data in the specified range. The +// length of this range should match the ContentLength header and x-ms-range/Range destination range header. +// contentLength is the length of the request. rangeParameter is the range of bytes to which the source range would be +// written. The range should be 512 aligned and range-end is required. sourceContentMD5 is specify the md5 calculated +// for the range of bytes that must be read from the copy source. timeout is the timeout parameter is expressed in +// seconds. For more information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. ifSequenceNumberLessThanOrEqualTo is specify this header value to operate only +// on a blob if it has a sequence number less than or equal to the specified. ifSequenceNumberLessThan is specify this +// header value to operate only on a blob if it has a sequence number less than the specified. ifSequenceNumberEqualTo +// is specify this header value to operate only on a blob if it has the specified sequence number. ifModifiedSince is +// specify this header value to operate only on a blob if it has been modified since the specified date/time. +// ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified since the +// specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value. ifNoneMatch is +// specify an ETag value to operate only on blobs without a matching value. sourceIfModifiedSince is specify this +// header value to operate only on a blob if it has been modified since the specified date/time. +// sourceIfUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified since the +// specified date/time. sourceIfMatch is specify an ETag value to operate only on blobs with a matching value. +// sourceIfNoneMatch is specify an ETag value to operate only on blobs without a matching value. requestID is provides +// a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage +// analytics logging is enabled. +func (client pageBlobClient) UploadPagesFromURL(ctx context.Context, sourceURL string, sourceRange string, contentLength int64, rangeParameter string, sourceContentMD5 []byte, timeout *int32, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (*PageBlobUploadPagesFromURLResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.uploadPagesFromURLPreparer(sourceURL, sourceRange, contentLength, rangeParameter, sourceContentMD5, timeout, leaseID, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.uploadPagesFromURLResponder}, req) + if err != nil { + return nil, err + } + return resp.(*PageBlobUploadPagesFromURLResponse), err +} + +// uploadPagesFromURLPreparer prepares the UploadPagesFromURL request. +func (client pageBlobClient) uploadPagesFromURLPreparer(sourceURL string, sourceRange string, contentLength int64, rangeParameter string, sourceContentMD5 []byte, timeout *int32, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "page") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-copy-source", sourceURL) + req.Header.Set("x-ms-source-range", sourceRange) + if sourceContentMD5 != nil { + req.Header.Set("x-ms-source-content-md5", base64.StdEncoding.EncodeToString(sourceContentMD5)) + } + req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) + req.Header.Set("x-ms-range", rangeParameter) + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if ifSequenceNumberLessThanOrEqualTo != nil { + req.Header.Set("x-ms-if-sequence-number-le", strconv.FormatInt(*ifSequenceNumberLessThanOrEqualTo, 10)) + } + if ifSequenceNumberLessThan != nil { + req.Header.Set("x-ms-if-sequence-number-lt", strconv.FormatInt(*ifSequenceNumberLessThan, 10)) + } + if ifSequenceNumberEqualTo != nil { + req.Header.Set("x-ms-if-sequence-number-eq", strconv.FormatInt(*ifSequenceNumberEqualTo, 10)) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + if sourceIfModifiedSince != nil { + req.Header.Set("x-ms-source-if-modified-since", (*sourceIfModifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfUnmodifiedSince != nil { + req.Header.Set("x-ms-source-if-unmodified-since", (*sourceIfUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfMatch != nil { + req.Header.Set("x-ms-source-if-match", string(*sourceIfMatch)) + } + if sourceIfNoneMatch != nil { + req.Header.Set("x-ms-source-if-none-match", string(*sourceIfNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-page-write", "update") + return req, nil +} + +// uploadPagesFromURLResponder handles the response to the UploadPagesFromURL request. +func (client pageBlobClient) uploadPagesFromURLResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &PageBlobUploadPagesFromURLResponse{rawResponse: resp.Response()}, err +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_responder_policy.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_responder_policy.go new file mode 100644 index 000000000..8a023d0a0 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_responder_policy.go @@ -0,0 +1,74 @@ +package azblob + +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "bytes" + "context" + "encoding/xml" + "github.com/Azure/azure-pipeline-go/pipeline" + "io/ioutil" +) + +type responder func(resp pipeline.Response) (result pipeline.Response, err error) + +// ResponderPolicyFactory is a Factory capable of creating a responder pipeline. +type responderPolicyFactory struct { + responder responder +} + +// New creates a responder policy factory. +func (arpf responderPolicyFactory) New(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.Policy { + return responderPolicy{next: next, responder: arpf.responder} +} + +type responderPolicy struct { + next pipeline.Policy + responder responder +} + +// Do sends the request to the service and validates/deserializes the HTTP response. +func (arp responderPolicy) Do(ctx context.Context, request pipeline.Request) (pipeline.Response, error) { + resp, err := arp.next.Do(ctx, request) + if err != nil { + return resp, err + } + return arp.responder(resp) +} + +// validateResponse checks an HTTP response's status code against a legal set of codes. +// If the response code is not legal, then validateResponse reads all of the response's body +// (containing error information) and returns a response error. +func validateResponse(resp pipeline.Response, successStatusCodes ...int) error { + if resp == nil { + return NewResponseError(nil, nil, "nil response") + } + responseCode := resp.Response().StatusCode + for _, i := range successStatusCodes { + if i == responseCode { + return nil + } + } + // only close the body in the failure case. in the + // success case responders will close the body as required. + defer resp.Response().Body.Close() + b, err := ioutil.ReadAll(resp.Response().Body) + if err != nil { + return err + } + // the service code, description and details will be populated during unmarshalling + responseError := NewResponseError(nil, resp.Response(), resp.Response().Status) + if len(b) > 0 { + if err = xml.Unmarshal(b, &responseError); err != nil { + return NewResponseError(err, resp.Response(), "failed to unmarshal response body") + } + } + return responseError +} + +// removes any BOM from the byte slice +func removeBOM(b []byte) []byte { + // UTF8 + return bytes.TrimPrefix(b, []byte("\xef\xbb\xbf")) +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_response_error.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_response_error.go new file mode 100644 index 000000000..3dcc75bb5 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_response_error.go @@ -0,0 +1,95 @@ +package azblob + +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "bytes" + "fmt" + "github.com/Azure/azure-pipeline-go/pipeline" + "net" + "net/http" +) + +// if you want to provide custom error handling set this variable to your constructor function +var responseErrorFactory func(cause error, response *http.Response, description string) error + +// ResponseError identifies a responder-generated network or response parsing error. +type ResponseError interface { + // Error exposes the Error(), Temporary() and Timeout() methods. + net.Error // Includes the Go error interface + // Response returns the HTTP response. You may examine this but you should not modify it. + Response() *http.Response +} + +// NewResponseError creates an error object that implements the error interface. +func NewResponseError(cause error, response *http.Response, description string) error { + if responseErrorFactory != nil { + return responseErrorFactory(cause, response, description) + } + return &responseError{ + ErrorNode: pipeline.ErrorNode{}.Initialize(cause, 3), + response: response, + description: description, + } +} + +// responseError is the internal struct that implements the public ResponseError interface. +type responseError struct { + pipeline.ErrorNode // This is embedded so that responseError "inherits" Error, Temporary, Timeout, and Cause + response *http.Response + description string +} + +// Error implements the error interface's Error method to return a string representation of the error. +func (e *responseError) Error() string { + b := &bytes.Buffer{} + fmt.Fprintf(b, "===== RESPONSE ERROR (Code=%v) =====\n", e.response.StatusCode) + fmt.Fprintf(b, "Status=%s, Description: %s\n", e.response.Status, e.description) + s := b.String() + return e.ErrorNode.Error(s) +} + +// Response implements the ResponseError interface's method to return the HTTP response. +func (e *responseError) Response() *http.Response { + return e.response +} + +// RFC7807 PROBLEM ------------------------------------------------------------------------------------ +// RFC7807Problem ... This type can be publicly embedded in another type that wants to add additional members. +/*type RFC7807Problem struct { + // Mandatory: A (relative) URI reference identifying the problem type (it MAY refer to human-readable documentation). + typeURI string // Should default to "about:blank" + // Optional: Short, human-readable summary (maybe localized). + title string + // Optional: HTTP status code generated by the origin server + status int + // Optional: Human-readable explanation for this problem occurance. + // Should help client correct the problem. Clients should NOT parse this string. + detail string + // Optional: A (relative) URI identifying this specific problem occurence (it may or may not be dereferenced). + instance string +} +// NewRFC7807Problem ... +func NewRFC7807Problem(typeURI string, status int, titleFormat string, a ...interface{}) error { + return &RFC7807Problem{ + typeURI: typeURI, + status: status, + title: fmt.Sprintf(titleFormat, a...), + } +} +// Error returns the error information as a string. +func (e *RFC7807Problem) Error() string { + return e.title +} +// TypeURI ... +func (e *RFC7807Problem) TypeURI() string { + if e.typeURI == "" { + e.typeURI = "about:blank" + } + return e.typeURI +} +// Members ... +func (e *RFC7807Problem) Members() (status int, title, detail, instance string) { + return e.status, e.title, e.detail, e.instance +}*/ diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_service.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_service.go new file mode 100644 index 000000000..6c896b729 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_service.go @@ -0,0 +1,467 @@ +package azblob + +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "bytes" + "context" + "encoding/xml" + "github.com/Azure/azure-pipeline-go/pipeline" + "io" + "io/ioutil" + "net/http" + "net/url" + "strconv" +) + +// serviceClient is the client for the Service methods of the Azblob service. +type serviceClient struct { + managementClient +} + +// newServiceClient creates an instance of the serviceClient client. +func newServiceClient(url url.URL, p pipeline.Pipeline) serviceClient { + return serviceClient{newManagementClient(url, p)} +} + +// GetAccountInfo returns the sku name and account kind +func (client serviceClient) GetAccountInfo(ctx context.Context) (*ServiceGetAccountInfoResponse, error) { + req, err := client.getAccountInfoPreparer() + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getAccountInfoResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ServiceGetAccountInfoResponse), err +} + +// getAccountInfoPreparer prepares the GetAccountInfo request. +func (client serviceClient) getAccountInfoPreparer() (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + params.Set("restype", "account") + params.Set("comp", "properties") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-version", ServiceVersion) + return req, nil +} + +// getAccountInfoResponder handles the response to the GetAccountInfo request. +func (client serviceClient) getAccountInfoResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &ServiceGetAccountInfoResponse{rawResponse: resp.Response()}, err +} + +// GetProperties gets the properties of a storage account's Blob service, including properties for Storage Analytics +// and CORS (Cross-Origin Resource Sharing) rules. +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB +// character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client serviceClient) GetProperties(ctx context.Context, timeout *int32, requestID *string) (*StorageServiceProperties, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.getPropertiesPreparer(timeout, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getPropertiesResponder}, req) + if err != nil { + return nil, err + } + return resp.(*StorageServiceProperties), err +} + +// getPropertiesPreparer prepares the GetProperties request. +func (client serviceClient) getPropertiesPreparer(timeout *int32, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("restype", "service") + params.Set("comp", "properties") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// getPropertiesResponder handles the response to the GetProperties request. +func (client serviceClient) getPropertiesResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + result := &StorageServiceProperties{rawResponse: resp.Response()} + if err != nil { + return result, err + } + defer resp.Response().Body.Close() + b, err := ioutil.ReadAll(resp.Response().Body) + if err != nil { + return result, err + } + if len(b) > 0 { + b = removeBOM(b) + err = xml.Unmarshal(b, result) + if err != nil { + return result, NewResponseError(err, resp.Response(), "failed to unmarshal response body") + } + } + return result, nil +} + +// GetStatistics retrieves statistics related to replication for the Blob service. It is only available on the +// secondary location endpoint when read-access geo-redundant replication is enabled for the storage account. +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB +// character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client serviceClient) GetStatistics(ctx context.Context, timeout *int32, requestID *string) (*StorageServiceStats, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.getStatisticsPreparer(timeout, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getStatisticsResponder}, req) + if err != nil { + return nil, err + } + return resp.(*StorageServiceStats), err +} + +// getStatisticsPreparer prepares the GetStatistics request. +func (client serviceClient) getStatisticsPreparer(timeout *int32, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("restype", "service") + params.Set("comp", "stats") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// getStatisticsResponder handles the response to the GetStatistics request. +func (client serviceClient) getStatisticsResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + result := &StorageServiceStats{rawResponse: resp.Response()} + if err != nil { + return result, err + } + defer resp.Response().Body.Close() + b, err := ioutil.ReadAll(resp.Response().Body) + if err != nil { + return result, err + } + if len(b) > 0 { + b = removeBOM(b) + err = xml.Unmarshal(b, result) + if err != nil { + return result, NewResponseError(err, resp.Response(), "failed to unmarshal response body") + } + } + return result, nil +} + +// GetUserDelegationKey retrieves a user delgation key for the Blob service. This is only a valid operation when using +// bearer token authentication. +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB +// character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client serviceClient) GetUserDelegationKey(ctx context.Context, keyInfo KeyInfo, timeout *int32, requestID *string) (*UserDelegationKey, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.getUserDelegationKeyPreparer(keyInfo, timeout, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getUserDelegationKeyResponder}, req) + if err != nil { + return nil, err + } + return resp.(*UserDelegationKey), err +} + +// getUserDelegationKeyPreparer prepares the GetUserDelegationKey request. +func (client serviceClient) getUserDelegationKeyPreparer(keyInfo KeyInfo, timeout *int32, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("POST", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("restype", "service") + params.Set("comp", "userdelegationkey") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + b, err := xml.Marshal(keyInfo) + if err != nil { + return req, pipeline.NewError(err, "failed to marshal request body") + } + req.Header.Set("Content-Type", "application/xml") + err = req.SetBody(bytes.NewReader(b)) + if err != nil { + return req, pipeline.NewError(err, "failed to set request body") + } + return req, nil +} + +// getUserDelegationKeyResponder handles the response to the GetUserDelegationKey request. +func (client serviceClient) getUserDelegationKeyResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + result := &UserDelegationKey{rawResponse: resp.Response()} + if err != nil { + return result, err + } + defer resp.Response().Body.Close() + b, err := ioutil.ReadAll(resp.Response().Body) + if err != nil { + return result, err + } + if len(b) > 0 { + b = removeBOM(b) + err = xml.Unmarshal(b, result) + if err != nil { + return result, NewResponseError(err, resp.Response(), "failed to unmarshal response body") + } + } + return result, nil +} + +// ListContainersSegment the List Containers Segment operation returns a list of the containers under the specified +// account +// +// prefix is filters the results to return only containers whose name begins with the specified prefix. marker is a +// string value that identifies the portion of the list of containers to be returned with the next listing operation. +// The operation returns the NextMarker value within the response body if the listing operation did not return all +// containers remaining to be listed with the current page. The NextMarker value can be used as the value for the +// marker parameter in a subsequent call to request the next page of list items. The marker value is opaque to the +// client. maxresults is specifies the maximum number of containers to return. If the request does not specify +// maxresults, or specifies a value greater than 5000, the server will return up to 5000 items. Note that if the +// listing operation crosses a partition boundary, then the service will return a continuation token for retrieving the +// remainder of the results. For this reason, it is possible that the service will return fewer results than specified +// by maxresults, or than the default of 5000. include is include this parameter to specify that the container's +// metadata be returned as part of the response body. timeout is the timeout parameter is expressed in seconds. For +// more information, see Setting +// Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB +// character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client serviceClient) ListContainersSegment(ctx context.Context, prefix *string, marker *string, maxresults *int32, include ListContainersIncludeType, timeout *int32, requestID *string) (*ListContainersSegmentResponse, error) { + if err := validate([]validation{ + {targetValue: maxresults, + constraints: []constraint{{target: "maxresults", name: null, rule: false, + chain: []constraint{{target: "maxresults", name: inclusiveMinimum, rule: 1, chain: nil}}}}}, + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.listContainersSegmentPreparer(prefix, marker, maxresults, include, timeout, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.listContainersSegmentResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ListContainersSegmentResponse), err +} + +// listContainersSegmentPreparer prepares the ListContainersSegment request. +func (client serviceClient) listContainersSegmentPreparer(prefix *string, marker *string, maxresults *int32, include ListContainersIncludeType, timeout *int32, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if prefix != nil && len(*prefix) > 0 { + params.Set("prefix", *prefix) + } + if marker != nil && len(*marker) > 0 { + params.Set("marker", *marker) + } + if maxresults != nil { + params.Set("maxresults", strconv.FormatInt(int64(*maxresults), 10)) + } + if include != ListContainersIncludeNone { + params.Set("include", string(include)) + } + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "list") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// listContainersSegmentResponder handles the response to the ListContainersSegment request. +func (client serviceClient) listContainersSegmentResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + result := &ListContainersSegmentResponse{rawResponse: resp.Response()} + if err != nil { + return result, err + } + defer resp.Response().Body.Close() + b, err := ioutil.ReadAll(resp.Response().Body) + if err != nil { + return result, err + } + if len(b) > 0 { + b = removeBOM(b) + err = xml.Unmarshal(b, result) + if err != nil { + return result, NewResponseError(err, resp.Response(), "failed to unmarshal response body") + } + } + return result, nil +} + +// SetProperties sets properties for a storage account's Blob service endpoint, including properties for Storage +// Analytics and CORS (Cross-Origin Resource Sharing) rules +// +// storageServiceProperties is the StorageService properties. timeout is the timeout parameter is expressed in seconds. +// For more information, see Setting +// Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB +// character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client serviceClient) SetProperties(ctx context.Context, storageServiceProperties StorageServiceProperties, timeout *int32, requestID *string) (*ServiceSetPropertiesResponse, error) { + if err := validate([]validation{ + {targetValue: storageServiceProperties, + constraints: []constraint{{target: "storageServiceProperties.Logging", name: null, rule: false, + chain: []constraint{{target: "storageServiceProperties.Logging.RetentionPolicy", name: null, rule: true, + chain: []constraint{{target: "storageServiceProperties.Logging.RetentionPolicy.Days", name: null, rule: false, + chain: []constraint{{target: "storageServiceProperties.Logging.RetentionPolicy.Days", name: inclusiveMinimum, rule: 1, chain: nil}}}, + }}, + }}, + {target: "storageServiceProperties.HourMetrics", name: null, rule: false, + chain: []constraint{{target: "storageServiceProperties.HourMetrics.RetentionPolicy", name: null, rule: false, + chain: []constraint{{target: "storageServiceProperties.HourMetrics.RetentionPolicy.Days", name: null, rule: false, + chain: []constraint{{target: "storageServiceProperties.HourMetrics.RetentionPolicy.Days", name: inclusiveMinimum, rule: 1, chain: nil}}}, + }}, + }}, + {target: "storageServiceProperties.MinuteMetrics", name: null, rule: false, + chain: []constraint{{target: "storageServiceProperties.MinuteMetrics.RetentionPolicy", name: null, rule: false, + chain: []constraint{{target: "storageServiceProperties.MinuteMetrics.RetentionPolicy.Days", name: null, rule: false, + chain: []constraint{{target: "storageServiceProperties.MinuteMetrics.RetentionPolicy.Days", name: inclusiveMinimum, rule: 1, chain: nil}}}, + }}, + }}, + {target: "storageServiceProperties.DeleteRetentionPolicy", name: null, rule: false, + chain: []constraint{{target: "storageServiceProperties.DeleteRetentionPolicy.Days", name: null, rule: false, + chain: []constraint{{target: "storageServiceProperties.DeleteRetentionPolicy.Days", name: inclusiveMinimum, rule: 1, chain: nil}}}, + }}}}, + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.setPropertiesPreparer(storageServiceProperties, timeout, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.setPropertiesResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ServiceSetPropertiesResponse), err +} + +// setPropertiesPreparer prepares the SetProperties request. +func (client serviceClient) setPropertiesPreparer(storageServiceProperties StorageServiceProperties, timeout *int32, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("restype", "service") + params.Set("comp", "properties") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + b, err := xml.Marshal(storageServiceProperties) + if err != nil { + return req, pipeline.NewError(err, "failed to marshal request body") + } + req.Header.Set("Content-Type", "application/xml") + err = req.SetBody(bytes.NewReader(b)) + if err != nil { + return req, pipeline.NewError(err, "failed to set request body") + } + return req, nil +} + +// setPropertiesResponder handles the response to the SetProperties request. +func (client serviceClient) setPropertiesResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusAccepted) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &ServiceSetPropertiesResponse{rawResponse: resp.Response()}, err +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_validation.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_validation.go new file mode 100644 index 000000000..98a2614e6 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_validation.go @@ -0,0 +1,367 @@ +package azblob + +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "fmt" + "github.com/Azure/azure-pipeline-go/pipeline" + "reflect" + "regexp" + "strings" +) + +// Constraint stores constraint name, target field name +// Rule and chain validations. +type constraint struct { + // Target field name for validation. + target string + + // Constraint name e.g. minLength, MaxLength, Pattern, etc. + name string + + // Rule for constraint e.g. greater than 10, less than 5 etc. + rule interface{} + + // Chain validations for struct type + chain []constraint +} + +// Validation stores parameter-wise validation. +type validation struct { + targetValue interface{} + constraints []constraint +} + +// Constraint list +const ( + empty = "Empty" + null = "Null" + readOnly = "ReadOnly" + pattern = "Pattern" + maxLength = "MaxLength" + minLength = "MinLength" + maxItems = "MaxItems" + minItems = "MinItems" + multipleOf = "MultipleOf" + uniqueItems = "UniqueItems" + inclusiveMaximum = "InclusiveMaximum" + exclusiveMaximum = "ExclusiveMaximum" + exclusiveMinimum = "ExclusiveMinimum" + inclusiveMinimum = "InclusiveMinimum" +) + +// Validate method validates constraints on parameter +// passed in validation array. +func validate(m []validation) error { + for _, item := range m { + v := reflect.ValueOf(item.targetValue) + for _, constraint := range item.constraints { + var err error + switch v.Kind() { + case reflect.Ptr: + err = validatePtr(v, constraint) + case reflect.String: + err = validateString(v, constraint) + case reflect.Struct: + err = validateStruct(v, constraint) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + err = validateInt(v, constraint) + case reflect.Float32, reflect.Float64: + err = validateFloat(v, constraint) + case reflect.Array, reflect.Slice, reflect.Map: + err = validateArrayMap(v, constraint) + default: + err = createError(v, constraint, fmt.Sprintf("unknown type %v", v.Kind())) + } + if err != nil { + return err + } + } + } + return nil +} + +func validateStruct(x reflect.Value, v constraint, name ...string) error { + //Get field name from target name which is in format a.b.c + s := strings.Split(v.target, ".") + f := x.FieldByName(s[len(s)-1]) + if isZero(f) { + return createError(x, v, fmt.Sprintf("field %q doesn't exist", v.target)) + } + err := validate([]validation{ + { + targetValue: getInterfaceValue(f), + constraints: []constraint{v}, + }, + }) + return err +} + +func validatePtr(x reflect.Value, v constraint) error { + if v.name == readOnly { + if !x.IsNil() { + return createError(x.Elem(), v, "readonly parameter; must send as nil or empty in request") + } + return nil + } + if x.IsNil() { + return checkNil(x, v) + } + if v.chain != nil { + return validate([]validation{ + { + targetValue: getInterfaceValue(x.Elem()), + constraints: v.chain, + }, + }) + } + return nil +} + +func validateInt(x reflect.Value, v constraint) error { + i := x.Int() + r, ok := v.rule.(int) + if !ok { + return createError(x, v, fmt.Sprintf("rule must be integer value for %v constraint; got: %v", v.name, v.rule)) + } + switch v.name { + case multipleOf: + if i%int64(r) != 0 { + return createError(x, v, fmt.Sprintf("value must be a multiple of %v", r)) + } + case exclusiveMinimum: + if i <= int64(r) { + return createError(x, v, fmt.Sprintf("value must be greater than %v", r)) + } + case exclusiveMaximum: + if i >= int64(r) { + return createError(x, v, fmt.Sprintf("value must be less than %v", r)) + } + case inclusiveMinimum: + if i < int64(r) { + return createError(x, v, fmt.Sprintf("value must be greater than or equal to %v", r)) + } + case inclusiveMaximum: + if i > int64(r) { + return createError(x, v, fmt.Sprintf("value must be less than or equal to %v", r)) + } + default: + return createError(x, v, fmt.Sprintf("constraint %v is not applicable for type integer", v.name)) + } + return nil +} + +func validateFloat(x reflect.Value, v constraint) error { + f := x.Float() + r, ok := v.rule.(float64) + if !ok { + return createError(x, v, fmt.Sprintf("rule must be float value for %v constraint; got: %v", v.name, v.rule)) + } + switch v.name { + case exclusiveMinimum: + if f <= r { + return createError(x, v, fmt.Sprintf("value must be greater than %v", r)) + } + case exclusiveMaximum: + if f >= r { + return createError(x, v, fmt.Sprintf("value must be less than %v", r)) + } + case inclusiveMinimum: + if f < r { + return createError(x, v, fmt.Sprintf("value must be greater than or equal to %v", r)) + } + case inclusiveMaximum: + if f > r { + return createError(x, v, fmt.Sprintf("value must be less than or equal to %v", r)) + } + default: + return createError(x, v, fmt.Sprintf("constraint %s is not applicable for type float", v.name)) + } + return nil +} + +func validateString(x reflect.Value, v constraint) error { + s := x.String() + switch v.name { + case empty: + if len(s) == 0 { + return checkEmpty(x, v) + } + case pattern: + reg, err := regexp.Compile(v.rule.(string)) + if err != nil { + return createError(x, v, err.Error()) + } + if !reg.MatchString(s) { + return createError(x, v, fmt.Sprintf("value doesn't match pattern %v", v.rule)) + } + case maxLength: + if _, ok := v.rule.(int); !ok { + return createError(x, v, fmt.Sprintf("rule must be integer value for %v constraint; got: %v", v.name, v.rule)) + } + if len(s) > v.rule.(int) { + return createError(x, v, fmt.Sprintf("value length must be less than %v", v.rule)) + } + case minLength: + if _, ok := v.rule.(int); !ok { + return createError(x, v, fmt.Sprintf("rule must be integer value for %v constraint; got: %v", v.name, v.rule)) + } + if len(s) < v.rule.(int) { + return createError(x, v, fmt.Sprintf("value length must be greater than %v", v.rule)) + } + case readOnly: + if len(s) > 0 { + return createError(reflect.ValueOf(s), v, "readonly parameter; must send as nil or empty in request") + } + default: + return createError(x, v, fmt.Sprintf("constraint %s is not applicable to string type", v.name)) + } + if v.chain != nil { + return validate([]validation{ + { + targetValue: getInterfaceValue(x), + constraints: v.chain, + }, + }) + } + return nil +} + +func validateArrayMap(x reflect.Value, v constraint) error { + switch v.name { + case null: + if x.IsNil() { + return checkNil(x, v) + } + case empty: + if x.IsNil() || x.Len() == 0 { + return checkEmpty(x, v) + } + case maxItems: + if _, ok := v.rule.(int); !ok { + return createError(x, v, fmt.Sprintf("rule must be integer for %v constraint; got: %v", v.name, v.rule)) + } + if x.Len() > v.rule.(int) { + return createError(x, v, fmt.Sprintf("maximum item limit is %v; got: %v", v.rule, x.Len())) + } + case minItems: + if _, ok := v.rule.(int); !ok { + return createError(x, v, fmt.Sprintf("rule must be integer for %v constraint; got: %v", v.name, v.rule)) + } + if x.Len() < v.rule.(int) { + return createError(x, v, fmt.Sprintf("minimum item limit is %v; got: %v", v.rule, x.Len())) + } + case uniqueItems: + if x.Kind() == reflect.Array || x.Kind() == reflect.Slice { + if !checkForUniqueInArray(x) { + return createError(x, v, fmt.Sprintf("all items in parameter %q must be unique; got:%v", v.target, x)) + } + } else if x.Kind() == reflect.Map { + if !checkForUniqueInMap(x) { + return createError(x, v, fmt.Sprintf("all items in parameter %q must be unique; got:%v", v.target, x)) + } + } else { + return createError(x, v, fmt.Sprintf("type must be array, slice or map for constraint %v; got: %v", v.name, x.Kind())) + } + case readOnly: + if x.Len() != 0 { + return createError(x, v, "readonly parameter; must send as nil or empty in request") + } + case pattern: + reg, err := regexp.Compile(v.rule.(string)) + if err != nil { + return createError(x, v, err.Error()) + } + keys := x.MapKeys() + for _, k := range keys { + if !reg.MatchString(k.String()) { + return createError(k, v, fmt.Sprintf("map key doesn't match pattern %v", v.rule)) + } + } + default: + return createError(x, v, fmt.Sprintf("constraint %v is not applicable to array, slice and map type", v.name)) + } + if v.chain != nil { + return validate([]validation{ + { + targetValue: getInterfaceValue(x), + constraints: v.chain, + }, + }) + } + return nil +} + +func checkNil(x reflect.Value, v constraint) error { + if _, ok := v.rule.(bool); !ok { + return createError(x, v, fmt.Sprintf("rule must be bool value for %v constraint; got: %v", v.name, v.rule)) + } + if v.rule.(bool) { + return createError(x, v, "value can not be null; required parameter") + } + return nil +} + +func checkEmpty(x reflect.Value, v constraint) error { + if _, ok := v.rule.(bool); !ok { + return createError(x, v, fmt.Sprintf("rule must be bool value for %v constraint; got: %v", v.name, v.rule)) + } + if v.rule.(bool) { + return createError(x, v, "value can not be null or empty; required parameter") + } + return nil +} + +func checkForUniqueInArray(x reflect.Value) bool { + if x == reflect.Zero(reflect.TypeOf(x)) || x.Len() == 0 { + return false + } + arrOfInterface := make([]interface{}, x.Len()) + for i := 0; i < x.Len(); i++ { + arrOfInterface[i] = x.Index(i).Interface() + } + m := make(map[interface{}]bool) + for _, val := range arrOfInterface { + if m[val] { + return false + } + m[val] = true + } + return true +} + +func checkForUniqueInMap(x reflect.Value) bool { + if x == reflect.Zero(reflect.TypeOf(x)) || x.Len() == 0 { + return false + } + mapOfInterface := make(map[interface{}]interface{}, x.Len()) + keys := x.MapKeys() + for _, k := range keys { + mapOfInterface[k.Interface()] = x.MapIndex(k).Interface() + } + m := make(map[interface{}]bool) + for _, val := range mapOfInterface { + if m[val] { + return false + } + m[val] = true + } + return true +} + +func getInterfaceValue(x reflect.Value) interface{} { + if x.Kind() == reflect.Invalid { + return nil + } + return x.Interface() +} + +func isZero(x interface{}) bool { + return x == reflect.Zero(reflect.TypeOf(x)).Interface() +} + +func createError(x reflect.Value, v constraint, message string) error { + return pipeline.NewError(nil, fmt.Sprintf("validation failed: parameter=%s constraint=%s value=%#v details: %s", + v.target, v.name, getInterfaceValue(x), message)) +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_version.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_version.go new file mode 100644 index 000000000..4b49c1866 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_version.go @@ -0,0 +1,14 @@ +package azblob + +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +// UserAgent returns the UserAgent string to use when sending http.Requests. +func UserAgent() string { + return "Azure-SDK-For-Go/0.0.0 azblob/2018-11-09" +} + +// Version returns the semantic version (see http://semver.org) of the client. +func Version() string { + return "0.0.0" +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_response_helpers.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_response_helpers.go new file mode 100644 index 000000000..8c7f59453 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_response_helpers.go @@ -0,0 +1,242 @@ +package azblob + +import ( + "context" + "io" + "net/http" + "time" +) + +// BlobHTTPHeaders contains read/writeable blob properties. +type BlobHTTPHeaders struct { + ContentType string + ContentMD5 []byte + ContentEncoding string + ContentLanguage string + ContentDisposition string + CacheControl string +} + +// NewHTTPHeaders returns the user-modifiable properties for this blob. +func (bgpr BlobGetPropertiesResponse) NewHTTPHeaders() BlobHTTPHeaders { + return BlobHTTPHeaders{ + ContentType: bgpr.ContentType(), + ContentEncoding: bgpr.ContentEncoding(), + ContentLanguage: bgpr.ContentLanguage(), + ContentDisposition: bgpr.ContentDisposition(), + CacheControl: bgpr.CacheControl(), + ContentMD5: bgpr.ContentMD5(), + } +} + +/////////////////////////////////////////////////////////////////////////////// + +// NewHTTPHeaders returns the user-modifiable properties for this blob. +func (dr downloadResponse) NewHTTPHeaders() BlobHTTPHeaders { + return BlobHTTPHeaders{ + ContentType: dr.ContentType(), + ContentEncoding: dr.ContentEncoding(), + ContentLanguage: dr.ContentLanguage(), + ContentDisposition: dr.ContentDisposition(), + CacheControl: dr.CacheControl(), + ContentMD5: dr.ContentMD5(), + } +} + +/////////////////////////////////////////////////////////////////////////////// + +// DownloadResponse wraps AutoRest generated downloadResponse and helps to provide info for retry. +type DownloadResponse struct { + r *downloadResponse + ctx context.Context + b BlobURL + getInfo HTTPGetterInfo +} + +// Body constructs new RetryReader stream for reading data. If a connection failes +// while reading, it will make additional requests to reestablish a connection and +// continue reading. Specifying a RetryReaderOption's with MaxRetryRequests set to 0 +// (the default), returns the original response body and no retries will be performed. +func (r *DownloadResponse) Body(o RetryReaderOptions) io.ReadCloser { + if o.MaxRetryRequests == 0 { // No additional retries + return r.Response().Body + } + return NewRetryReader(r.ctx, r.Response(), r.getInfo, o, + func(ctx context.Context, getInfo HTTPGetterInfo) (*http.Response, error) { + resp, err := r.b.Download(ctx, getInfo.Offset, getInfo.Count, + BlobAccessConditions{ + ModifiedAccessConditions: ModifiedAccessConditions{IfMatch: getInfo.ETag}, + }, + false) + if err != nil { + return nil, err + } + return resp.Response(), err + }, + ) +} + +// Response returns the raw HTTP response object. +func (r DownloadResponse) Response() *http.Response { + return r.r.Response() +} + +// NewHTTPHeaders returns the user-modifiable properties for this blob. +func (r DownloadResponse) NewHTTPHeaders() BlobHTTPHeaders { + return r.r.NewHTTPHeaders() +} + +// BlobContentMD5 returns the value for header x-ms-blob-content-md5. +func (r DownloadResponse) BlobContentMD5() []byte { + return r.r.BlobContentMD5() +} + +// ContentMD5 returns the value for header Content-MD5. +func (r DownloadResponse) ContentMD5() []byte { + return r.r.ContentMD5() +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (r DownloadResponse) StatusCode() int { + return r.r.StatusCode() +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (r DownloadResponse) Status() string { + return r.r.Status() +} + +// AcceptRanges returns the value for header Accept-Ranges. +func (r DownloadResponse) AcceptRanges() string { + return r.r.AcceptRanges() +} + +// BlobCommittedBlockCount returns the value for header x-ms-blob-committed-block-count. +func (r DownloadResponse) BlobCommittedBlockCount() int32 { + return r.r.BlobCommittedBlockCount() +} + +// BlobSequenceNumber returns the value for header x-ms-blob-sequence-number. +func (r DownloadResponse) BlobSequenceNumber() int64 { + return r.r.BlobSequenceNumber() +} + +// BlobType returns the value for header x-ms-blob-type. +func (r DownloadResponse) BlobType() BlobType { + return r.r.BlobType() +} + +// CacheControl returns the value for header Cache-Control. +func (r DownloadResponse) CacheControl() string { + return r.r.CacheControl() +} + +// ContentDisposition returns the value for header Content-Disposition. +func (r DownloadResponse) ContentDisposition() string { + return r.r.ContentDisposition() +} + +// ContentEncoding returns the value for header Content-Encoding. +func (r DownloadResponse) ContentEncoding() string { + return r.r.ContentEncoding() +} + +// ContentLanguage returns the value for header Content-Language. +func (r DownloadResponse) ContentLanguage() string { + return r.r.ContentLanguage() +} + +// ContentLength returns the value for header Content-Length. +func (r DownloadResponse) ContentLength() int64 { + return r.r.ContentLength() +} + +// ContentRange returns the value for header Content-Range. +func (r DownloadResponse) ContentRange() string { + return r.r.ContentRange() +} + +// ContentType returns the value for header Content-Type. +func (r DownloadResponse) ContentType() string { + return r.r.ContentType() +} + +// CopyCompletionTime returns the value for header x-ms-copy-completion-time. +func (r DownloadResponse) CopyCompletionTime() time.Time { + return r.r.CopyCompletionTime() +} + +// CopyID returns the value for header x-ms-copy-id. +func (r DownloadResponse) CopyID() string { + return r.r.CopyID() +} + +// CopyProgress returns the value for header x-ms-copy-progress. +func (r DownloadResponse) CopyProgress() string { + return r.r.CopyProgress() +} + +// CopySource returns the value for header x-ms-copy-source. +func (r DownloadResponse) CopySource() string { + return r.r.CopySource() +} + +// CopyStatus returns the value for header x-ms-copy-status. +func (r DownloadResponse) CopyStatus() CopyStatusType { + return r.r.CopyStatus() +} + +// CopyStatusDescription returns the value for header x-ms-copy-status-description. +func (r DownloadResponse) CopyStatusDescription() string { + return r.r.CopyStatusDescription() +} + +// Date returns the value for header Date. +func (r DownloadResponse) Date() time.Time { + return r.r.Date() +} + +// ETag returns the value for header ETag. +func (r DownloadResponse) ETag() ETag { + return r.r.ETag() +} + +// IsServerEncrypted returns the value for header x-ms-server-encrypted. +func (r DownloadResponse) IsServerEncrypted() string { + return r.r.IsServerEncrypted() +} + +// LastModified returns the value for header Last-Modified. +func (r DownloadResponse) LastModified() time.Time { + return r.r.LastModified() +} + +// LeaseDuration returns the value for header x-ms-lease-duration. +func (r DownloadResponse) LeaseDuration() LeaseDurationType { + return r.r.LeaseDuration() +} + +// LeaseState returns the value for header x-ms-lease-state. +func (r DownloadResponse) LeaseState() LeaseStateType { + return r.r.LeaseState() +} + +// LeaseStatus returns the value for header x-ms-lease-status. +func (r DownloadResponse) LeaseStatus() LeaseStatusType { + return r.r.LeaseStatus() +} + +// RequestID returns the value for header x-ms-request-id. +func (r DownloadResponse) RequestID() string { + return r.r.RequestID() +} + +// Version returns the value for header x-ms-version. +func (r DownloadResponse) Version() string { + return r.r.Version() +} + +// NewMetadata returns user-defined key/value pairs. +func (r DownloadResponse) NewMetadata() Metadata { + return r.r.NewMetadata() +} diff --git a/vendor/github.com/mattn/go-ieproxy/GetProxyFunc.go b/vendor/github.com/mattn/go-ieproxy/GetProxyFunc.go new file mode 100644 index 000000000..b2ff9147b --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/GetProxyFunc.go @@ -0,0 +1,11 @@ +package ieproxy + +import ( + "net/http" + "net/url" +) + +// GetProxyFunc is a forwarder for the OS-Exclusive proxyMiddleman_os.go files +func GetProxyFunc() func(*http.Request) (*url.URL, error) { + return proxyMiddleman() +} diff --git a/vendor/github.com/mattn/go-ieproxy/LICENSE b/vendor/github.com/mattn/go-ieproxy/LICENSE new file mode 100644 index 000000000..7b7c0f855 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/LICENSE @@ -0,0 +1,23 @@ +MIT License + +Copyright (c) 2014 mattn +Copyright (c) 2017 oliverpool +Copyright (c) 2019 Adele Reed + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/mattn/go-ieproxy/ieproxy.go b/vendor/github.com/mattn/go-ieproxy/ieproxy.go new file mode 100644 index 000000000..51fe18e3d --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/ieproxy.go @@ -0,0 +1,51 @@ +// Package ieproxy is a utility to retrieve the proxy parameters (especially of Internet Explorer on windows) +// +// On windows, it gathers the parameters from the registry (regedit), while it uses env variable on other platforms +package ieproxy + +import "os" + +// ProxyConf gathers the configuration for proxy +type ProxyConf struct { + Static StaticProxyConf // static configuration + Automatic ProxyScriptConf // script configuration +} + +// StaticProxyConf contains the configuration for static proxy +type StaticProxyConf struct { + // Is the proxy active? + Active bool + // Proxy address for each scheme (http, https) + // "" (empty string) is the fallback proxy + Protocols map[string]string + // Addresses not to be browsed via the proxy (comma-separated, linux-like) + NoProxy string +} + +// ProxyScriptConf contains the configuration for automatic proxy +type ProxyScriptConf struct { + // Is the proxy active? + Active bool + // PreConfiguredURL of the .pac file. + // If this is empty and Active is true, auto-configuration should be assumed. + PreConfiguredURL string +} + +// GetConf retrieves the proxy configuration from the Windows Regedit +func GetConf() ProxyConf { + return getConf() +} + +// OverrideEnvWithStaticProxy writes new values to the +// `http_proxy`, `https_proxy` and `no_proxy` environment variables. +// The values are taken from the Windows Regedit (should be called in `init()` function - see example) +func OverrideEnvWithStaticProxy() { + overrideEnvWithStaticProxy(GetConf(), os.Setenv) +} + +// FindProxyForURL computes the proxy for a given URL according to the pac file +func (psc *ProxyScriptConf) FindProxyForURL(URL string) string { + return psc.findProxyForURL(URL) +} + +type envSetter func(string, string) error diff --git a/vendor/github.com/mattn/go-ieproxy/ieproxy_unix.go b/vendor/github.com/mattn/go-ieproxy/ieproxy_unix.go new file mode 100644 index 000000000..dc2bccfc2 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/ieproxy_unix.go @@ -0,0 +1,10 @@ +// +build !windows + +package ieproxy + +func getConf() ProxyConf { + return ProxyConf{} +} + +func overrideEnvWithStaticProxy(pc ProxyConf, setenv envSetter) { +} diff --git a/vendor/github.com/mattn/go-ieproxy/ieproxy_windows.go b/vendor/github.com/mattn/go-ieproxy/ieproxy_windows.go new file mode 100644 index 000000000..a3d4c11c4 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/ieproxy_windows.go @@ -0,0 +1,164 @@ +package ieproxy + +import ( + "strings" + "sync" + "unsafe" + + "golang.org/x/sys/windows/registry" +) + +type regeditValues struct { + ProxyServer string + ProxyOverride string + ProxyEnable uint64 + AutoConfigURL string +} + +var once sync.Once +var windowsProxyConf ProxyConf + +// GetConf retrieves the proxy configuration from the Windows Regedit +func getConf() ProxyConf { + once.Do(writeConf) + return windowsProxyConf +} + +func writeConf() { + var ( + cfg *tWINHTTP_CURRENT_USER_IE_PROXY_CONFIG + err error + ) + + if cfg, err = getUserConfigFromWindowsSyscall(); err != nil { + regedit, _ := readRegedit() // If the syscall fails, backup to manual detection. + windowsProxyConf = parseRegedit(regedit) + return + } + + defer globalFreeWrapper(cfg.lpszProxy) + defer globalFreeWrapper(cfg.lpszProxyBypass) + defer globalFreeWrapper(cfg.lpszAutoConfigUrl) + + windowsProxyConf = ProxyConf{ + Static: StaticProxyConf{ + Active: cfg.lpszProxy != nil, + }, + Automatic: ProxyScriptConf{ + Active: cfg.lpszAutoConfigUrl != nil || cfg.fAutoDetect, + }, + } + + if windowsProxyConf.Static.Active { + protocol := make(map[string]string) + for _, s := range strings.Split(StringFromUTF16Ptr(cfg.lpszProxy), ";") { + s = strings.TrimSpace(s) + if s == "" { + continue + } + pair := strings.SplitN(s, "=", 2) + if len(pair) > 1 { + protocol[pair[0]] = pair[1] + } else { + protocol[""] = pair[0] + } + } + + windowsProxyConf.Static.Protocols = protocol + if cfg.lpszProxyBypass != nil { + windowsProxyConf.Static.NoProxy = strings.Replace(StringFromUTF16Ptr(cfg.lpszProxyBypass), ";", ",", -1) + } + } + + if windowsProxyConf.Automatic.Active { + windowsProxyConf.Automatic.PreConfiguredURL = StringFromUTF16Ptr(cfg.lpszAutoConfigUrl) + } +} + +func getUserConfigFromWindowsSyscall() (*tWINHTTP_CURRENT_USER_IE_PROXY_CONFIG, error) { + handle, _, err := winHttpOpen.Call(0, 0, 0, 0, 0) + if handle == 0 { + return &tWINHTTP_CURRENT_USER_IE_PROXY_CONFIG{}, err + } + defer winHttpCloseHandle.Call(handle) + + config := new(tWINHTTP_CURRENT_USER_IE_PROXY_CONFIG) + + ret, _, err := winHttpGetIEProxyConfigForCurrentUser.Call(uintptr(unsafe.Pointer(config))) + if ret > 0 { + err = nil + } + + return config, err +} + +// OverrideEnvWithStaticProxy writes new values to the +// http_proxy, https_proxy and no_proxy environment variables. +// The values are taken from the Windows Regedit (should be called in init() function) +func overrideEnvWithStaticProxy(conf ProxyConf, setenv envSetter) { + if conf.Static.Active { + for _, scheme := range []string{"http", "https"} { + url := mapFallback(scheme, "", conf.Static.Protocols) + setenv(scheme+"_proxy", url) + } + if conf.Static.NoProxy != "" { + setenv("no_proxy", conf.Static.NoProxy) + } + } +} + +func parseRegedit(regedit regeditValues) ProxyConf { + protocol := make(map[string]string) + for _, s := range strings.Split(regedit.ProxyServer, ";") { + if s == "" { + continue + } + pair := strings.SplitN(s, "=", 2) + if len(pair) > 1 { + protocol[pair[0]] = pair[1] + } else { + protocol[""] = pair[0] + } + } + + return ProxyConf{ + Static: StaticProxyConf{ + Active: regedit.ProxyEnable > 0, + Protocols: protocol, + NoProxy: strings.Replace(regedit.ProxyOverride, ";", ",", -1), // to match linux style + }, + Automatic: ProxyScriptConf{ + Active: regedit.AutoConfigURL != "", + PreConfiguredURL: regedit.AutoConfigURL, + }, + } +} + +func readRegedit() (values regeditValues, err error) { + k, err := registry.OpenKey(registry.CURRENT_USER, `Software\Microsoft\Windows\CurrentVersion\Internet Settings`, registry.QUERY_VALUE) + if err != nil { + return + } + defer k.Close() + + values.ProxyServer, _, err = k.GetStringValue("ProxyServer") + if err != nil && err != registry.ErrNotExist { + return + } + values.ProxyOverride, _, err = k.GetStringValue("ProxyOverride") + if err != nil && err != registry.ErrNotExist { + return + } + + values.ProxyEnable, _, err = k.GetIntegerValue("ProxyEnable") + if err != nil && err != registry.ErrNotExist { + return + } + + values.AutoConfigURL, _, err = k.GetStringValue("AutoConfigURL") + if err != nil && err != registry.ErrNotExist { + return + } + err = nil + return +} diff --git a/vendor/github.com/mattn/go-ieproxy/kernel32_data_windows.go b/vendor/github.com/mattn/go-ieproxy/kernel32_data_windows.go new file mode 100644 index 000000000..cfb4349e2 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/kernel32_data_windows.go @@ -0,0 +1,15 @@ +package ieproxy + +import ( + "golang.org/x/sys/windows" + "unsafe" +) + +var kernel32 = windows.NewLazySystemDLL("kernel32.dll") +var globalFree = kernel32.NewProc("GlobalFree") + +func globalFreeWrapper(ptr *uint16) { + if ptr != nil { + _, _, _ = globalFree.Call(uintptr(unsafe.Pointer(ptr))) + } +} diff --git a/vendor/github.com/mattn/go-ieproxy/pac_unix.go b/vendor/github.com/mattn/go-ieproxy/pac_unix.go new file mode 100644 index 000000000..d44ec3cca --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/pac_unix.go @@ -0,0 +1,7 @@ +// +build !windows + +package ieproxy + +func (psc *ProxyScriptConf) findProxyForURL(URL string) string { + return "" +} diff --git a/vendor/github.com/mattn/go-ieproxy/pac_windows.go b/vendor/github.com/mattn/go-ieproxy/pac_windows.go new file mode 100644 index 000000000..6a2ee6778 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/pac_windows.go @@ -0,0 +1,72 @@ +package ieproxy + +import ( + "strings" + "syscall" + "unsafe" +) + +func (psc *ProxyScriptConf) findProxyForURL(URL string) string { + if !psc.Active { + return "" + } + proxy, _ := getProxyForURL(psc.PreConfiguredURL, URL) + i := strings.Index(proxy, ";") + if i >= 0 { + return proxy[:i] + } + return proxy +} + +func getProxyForURL(pacfileURL, URL string) (string, error) { + pacfileURLPtr, err := syscall.UTF16PtrFromString(pacfileURL) + if err != nil { + return "", err + } + URLPtr, err := syscall.UTF16PtrFromString(URL) + if err != nil { + return "", err + } + + handle, _, err := winHttpOpen.Call(0, 0, 0, 0, 0) + if handle == 0 { + return "", err + } + defer winHttpCloseHandle.Call(handle) + + dwFlags := fWINHTTP_AUTOPROXY_CONFIG_URL + dwAutoDetectFlags := autoDetectFlag(0) + pfURLptr := pacfileURLPtr + + if pacfileURL == "" { + dwFlags = fWINHTTP_AUTOPROXY_AUTO_DETECT + dwAutoDetectFlags = fWINHTTP_AUTO_DETECT_TYPE_DNS_A | fWINHTTP_AUTO_DETECT_TYPE_DHCP + pfURLptr = nil + } + + options := tWINHTTP_AUTOPROXY_OPTIONS{ + dwFlags: dwFlags, // adding cache might cause issues: https://github.com/mattn/go-ieproxy/issues/6 + dwAutoDetectFlags: dwAutoDetectFlags, + lpszAutoConfigUrl: pfURLptr, + lpvReserved: nil, + dwReserved: 0, + fAutoLogonIfChallenged: true, // may not be optimal https://msdn.microsoft.com/en-us/library/windows/desktop/aa383153(v=vs.85).aspx + } // lpszProxyBypass isn't used as this only executes in cases where there (may) be a pac file (autodetect can fail), where lpszProxyBypass couldn't be returned. + // in the case that autodetect fails and no pre-specified pacfile is present, no proxy is returned. + + info := new(tWINHTTP_PROXY_INFO) + + ret, _, err := winHttpGetProxyForURL.Call( + handle, + uintptr(unsafe.Pointer(URLPtr)), + uintptr(unsafe.Pointer(&options)), + uintptr(unsafe.Pointer(info)), + ) + if ret > 0 { + err = nil + } + + defer globalFreeWrapper(info.lpszProxyBypass) + defer globalFreeWrapper(info.lpszProxy) + return StringFromUTF16Ptr(info.lpszProxy), err +} diff --git a/vendor/github.com/mattn/go-ieproxy/proxyMiddleman_unix.go b/vendor/github.com/mattn/go-ieproxy/proxyMiddleman_unix.go new file mode 100644 index 000000000..d0b16ec28 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/proxyMiddleman_unix.go @@ -0,0 +1,13 @@ +// +build !windows + +package ieproxy + +import ( + "net/http" + "net/url" +) + +func proxyMiddleman() func(req *http.Request) (i *url.URL, e error) { + // Fallthrough to ProxyFromEnvironment on all other OSes. + return http.ProxyFromEnvironment +} diff --git a/vendor/github.com/mattn/go-ieproxy/proxyMiddleman_windows.go b/vendor/github.com/mattn/go-ieproxy/proxyMiddleman_windows.go new file mode 100644 index 000000000..7d314dbf9 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/proxyMiddleman_windows.go @@ -0,0 +1,52 @@ +package ieproxy + +import ( + "net/http" + "net/url" + + "golang.org/x/net/http/httpproxy" +) + +func proxyMiddleman() func(req *http.Request) (i *url.URL, e error) { + // Get the proxy configuration + conf := GetConf() + envcfg := httpproxy.FromEnvironment() + + if envcfg.HTTPProxy != "" || envcfg.HTTPSProxy != "" { + // If the user manually specifies environment variables, prefer those over the Windows config. + return http.ProxyFromEnvironment + } + + return func(req *http.Request) (i *url.URL, e error) { + if conf.Automatic.Active { + host := conf.Automatic.FindProxyForURL(req.URL.String()) + if host != "" { + return &url.URL{Host: host}, nil + } + } + if conf.Static.Active { + return staticProxy(conf, req) + } + // Should return no proxy; fallthrough. + return http.ProxyFromEnvironment(req) + } +} + +func staticProxy(conf ProxyConf, req *http.Request) (i *url.URL, e error) { + // If static proxy obtaining is specified + prox := httpproxy.Config{ + HTTPSProxy: mapFallback("https", "", conf.Static.Protocols), + HTTPProxy: mapFallback("http", "", conf.Static.Protocols), + NoProxy: conf.Static.NoProxy, + } + return prox.ProxyFunc()(req.URL) +} + +// Return oKey or fbKey if oKey doesn't exist in the map. +func mapFallback(oKey, fbKey string, m map[string]string) string { + if v, ok := m[oKey]; ok { + return v + } else { + return m[fbKey] + } +} diff --git a/vendor/github.com/mattn/go-ieproxy/utils.go b/vendor/github.com/mattn/go-ieproxy/utils.go new file mode 100644 index 000000000..353b23112 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/utils.go @@ -0,0 +1,23 @@ +package ieproxy + +import ( + "unicode/utf16" + "unsafe" +) + +// StringFromUTF16Ptr converts a *uint16 C string to a Go String +func StringFromUTF16Ptr(s *uint16) string { + if s == nil { + return "" + } + + p := (*[1<<30 - 1]uint16)(unsafe.Pointer(s)) + + // find the string length + sz := 0 + for p[sz] != 0 { + sz++ + } + + return string(utf16.Decode(p[:sz:sz])) +} diff --git a/vendor/github.com/mattn/go-ieproxy/winhttp_data_windows.go b/vendor/github.com/mattn/go-ieproxy/winhttp_data_windows.go new file mode 100644 index 000000000..560940df8 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/winhttp_data_windows.go @@ -0,0 +1,50 @@ +package ieproxy + +import "golang.org/x/sys/windows" + +var winHttp = windows.NewLazySystemDLL("winhttp.dll") +var winHttpGetProxyForURL = winHttp.NewProc("WinHttpGetProxyForUrl") +var winHttpOpen = winHttp.NewProc("WinHttpOpen") +var winHttpCloseHandle = winHttp.NewProc("WinHttpCloseHandle") +var winHttpGetIEProxyConfigForCurrentUser = winHttp.NewProc("WinHttpGetIEProxyConfigForCurrentUser") + +type tWINHTTP_AUTOPROXY_OPTIONS struct { + dwFlags autoProxyFlag + dwAutoDetectFlags autoDetectFlag + lpszAutoConfigUrl *uint16 + lpvReserved *uint16 + dwReserved uint32 + fAutoLogonIfChallenged bool +} +type autoProxyFlag uint32 + +const ( + fWINHTTP_AUTOPROXY_AUTO_DETECT = autoProxyFlag(0x00000001) + fWINHTTP_AUTOPROXY_CONFIG_URL = autoProxyFlag(0x00000002) + fWINHTTP_AUTOPROXY_NO_CACHE_CLIENT = autoProxyFlag(0x00080000) + fWINHTTP_AUTOPROXY_NO_CACHE_SVC = autoProxyFlag(0x00100000) + fWINHTTP_AUTOPROXY_NO_DIRECTACCESS = autoProxyFlag(0x00040000) + fWINHTTP_AUTOPROXY_RUN_INPROCESS = autoProxyFlag(0x00010000) + fWINHTTP_AUTOPROXY_RUN_OUTPROCESS_ONLY = autoProxyFlag(0x00020000) + fWINHTTP_AUTOPROXY_SORT_RESULTS = autoProxyFlag(0x00400000) +) + +type autoDetectFlag uint32 + +const ( + fWINHTTP_AUTO_DETECT_TYPE_DHCP = autoDetectFlag(0x00000001) + fWINHTTP_AUTO_DETECT_TYPE_DNS_A = autoDetectFlag(0x00000002) +) + +type tWINHTTP_PROXY_INFO struct { + dwAccessType uint32 + lpszProxy *uint16 + lpszProxyBypass *uint16 +} + +type tWINHTTP_CURRENT_USER_IE_PROXY_CONFIG struct { + fAutoDetect bool + lpszAutoConfigUrl *uint16 + lpszProxy *uint16 + lpszProxyBypass *uint16 +} diff --git a/vendor/golang.org/x/net/http/httpproxy/proxy.go b/vendor/golang.org/x/net/http/httpproxy/proxy.go new file mode 100644 index 000000000..163645b86 --- /dev/null +++ b/vendor/golang.org/x/net/http/httpproxy/proxy.go @@ -0,0 +1,370 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package httpproxy provides support for HTTP proxy determination +// based on environment variables, as provided by net/http's +// ProxyFromEnvironment function. +// +// The API is not subject to the Go 1 compatibility promise and may change at +// any time. +package httpproxy + +import ( + "errors" + "fmt" + "net" + "net/url" + "os" + "strings" + "unicode/utf8" + + "golang.org/x/net/idna" +) + +// Config holds configuration for HTTP proxy settings. See +// FromEnvironment for details. +type Config struct { + // HTTPProxy represents the value of the HTTP_PROXY or + // http_proxy environment variable. It will be used as the proxy + // URL for HTTP requests and HTTPS requests unless overridden by + // HTTPSProxy or NoProxy. + HTTPProxy string + + // HTTPSProxy represents the HTTPS_PROXY or https_proxy + // environment variable. It will be used as the proxy URL for + // HTTPS requests unless overridden by NoProxy. + HTTPSProxy string + + // NoProxy represents the NO_PROXY or no_proxy environment + // variable. It specifies a string that contains comma-separated values + // specifying hosts that should be excluded from proxying. Each value is + // represented by an IP address prefix (1.2.3.4), an IP address prefix in + // CIDR notation (1.2.3.4/8), a domain name, or a special DNS label (*). + // An IP address prefix and domain name can also include a literal port + // number (1.2.3.4:80). + // A domain name matches that name and all subdomains. A domain name with + // a leading "." matches subdomains only. For example "foo.com" matches + // "foo.com" and "bar.foo.com"; ".y.com" matches "x.y.com" but not "y.com". + // A single asterisk (*) indicates that no proxying should be done. + // A best effort is made to parse the string and errors are + // ignored. + NoProxy string + + // CGI holds whether the current process is running + // as a CGI handler (FromEnvironment infers this from the + // presence of a REQUEST_METHOD environment variable). + // When this is set, ProxyForURL will return an error + // when HTTPProxy applies, because a client could be + // setting HTTP_PROXY maliciously. See https://golang.org/s/cgihttpproxy. + CGI bool +} + +// config holds the parsed configuration for HTTP proxy settings. +type config struct { + // Config represents the original configuration as defined above. + Config + + // httpsProxy is the parsed URL of the HTTPSProxy if defined. + httpsProxy *url.URL + + // httpProxy is the parsed URL of the HTTPProxy if defined. + httpProxy *url.URL + + // ipMatchers represent all values in the NoProxy that are IP address + // prefixes or an IP address in CIDR notation. + ipMatchers []matcher + + // domainMatchers represent all values in the NoProxy that are a domain + // name or hostname & domain name + domainMatchers []matcher +} + +// FromEnvironment returns a Config instance populated from the +// environment variables HTTP_PROXY, HTTPS_PROXY and NO_PROXY (or the +// lowercase versions thereof). HTTPS_PROXY takes precedence over +// HTTP_PROXY for https requests. +// +// The environment values may be either a complete URL or a +// "host[:port]", in which case the "http" scheme is assumed. An error +// is returned if the value is a different form. +func FromEnvironment() *Config { + return &Config{ + HTTPProxy: getEnvAny("HTTP_PROXY", "http_proxy"), + HTTPSProxy: getEnvAny("HTTPS_PROXY", "https_proxy"), + NoProxy: getEnvAny("NO_PROXY", "no_proxy"), + CGI: os.Getenv("REQUEST_METHOD") != "", + } +} + +func getEnvAny(names ...string) string { + for _, n := range names { + if val := os.Getenv(n); val != "" { + return val + } + } + return "" +} + +// ProxyFunc returns a function that determines the proxy URL to use for +// a given request URL. Changing the contents of cfg will not affect +// proxy functions created earlier. +// +// A nil URL and nil error are returned if no proxy is defined in the +// environment, or a proxy should not be used for the given request, as +// defined by NO_PROXY. +// +// As a special case, if req.URL.Host is "localhost" (with or without a +// port number), then a nil URL and nil error will be returned. +func (cfg *Config) ProxyFunc() func(reqURL *url.URL) (*url.URL, error) { + // Preprocess the Config settings for more efficient evaluation. + cfg1 := &config{ + Config: *cfg, + } + cfg1.init() + return cfg1.proxyForURL +} + +func (cfg *config) proxyForURL(reqURL *url.URL) (*url.URL, error) { + var proxy *url.URL + if reqURL.Scheme == "https" { + proxy = cfg.httpsProxy + } + if proxy == nil { + proxy = cfg.httpProxy + if proxy != nil && cfg.CGI { + return nil, errors.New("refusing to use HTTP_PROXY value in CGI environment; see golang.org/s/cgihttpproxy") + } + } + if proxy == nil { + return nil, nil + } + if !cfg.useProxy(canonicalAddr(reqURL)) { + return nil, nil + } + + return proxy, nil +} + +func parseProxy(proxy string) (*url.URL, error) { + if proxy == "" { + return nil, nil + } + + proxyURL, err := url.Parse(proxy) + if err != nil || + (proxyURL.Scheme != "http" && + proxyURL.Scheme != "https" && + proxyURL.Scheme != "socks5") { + // proxy was bogus. Try prepending "http://" to it and + // see if that parses correctly. If not, we fall + // through and complain about the original one. + if proxyURL, err := url.Parse("http://" + proxy); err == nil { + return proxyURL, nil + } + } + if err != nil { + return nil, fmt.Errorf("invalid proxy address %q: %v", proxy, err) + } + return proxyURL, nil +} + +// useProxy reports whether requests to addr should use a proxy, +// according to the NO_PROXY or no_proxy environment variable. +// addr is always a canonicalAddr with a host and port. +func (cfg *config) useProxy(addr string) bool { + if len(addr) == 0 { + return true + } + host, port, err := net.SplitHostPort(addr) + if err != nil { + return false + } + if host == "localhost" { + return false + } + ip := net.ParseIP(host) + if ip != nil { + if ip.IsLoopback() { + return false + } + } + + addr = strings.ToLower(strings.TrimSpace(host)) + + if ip != nil { + for _, m := range cfg.ipMatchers { + if m.match(addr, port, ip) { + return false + } + } + } + for _, m := range cfg.domainMatchers { + if m.match(addr, port, ip) { + return false + } + } + return true +} + +func (c *config) init() { + if parsed, err := parseProxy(c.HTTPProxy); err == nil { + c.httpProxy = parsed + } + if parsed, err := parseProxy(c.HTTPSProxy); err == nil { + c.httpsProxy = parsed + } + + for _, p := range strings.Split(c.NoProxy, ",") { + p = strings.ToLower(strings.TrimSpace(p)) + if len(p) == 0 { + continue + } + + if p == "*" { + c.ipMatchers = []matcher{allMatch{}} + c.domainMatchers = []matcher{allMatch{}} + return + } + + // IPv4/CIDR, IPv6/CIDR + if _, pnet, err := net.ParseCIDR(p); err == nil { + c.ipMatchers = append(c.ipMatchers, cidrMatch{cidr: pnet}) + continue + } + + // IPv4:port, [IPv6]:port + phost, pport, err := net.SplitHostPort(p) + if err == nil { + if len(phost) == 0 { + // There is no host part, likely the entry is malformed; ignore. + continue + } + if phost[0] == '[' && phost[len(phost)-1] == ']' { + phost = phost[1 : len(phost)-1] + } + } else { + phost = p + } + // IPv4, IPv6 + if pip := net.ParseIP(phost); pip != nil { + c.ipMatchers = append(c.ipMatchers, ipMatch{ip: pip, port: pport}) + continue + } + + if len(phost) == 0 { + // There is no host part, likely the entry is malformed; ignore. + continue + } + + // domain.com or domain.com:80 + // foo.com matches bar.foo.com + // .domain.com or .domain.com:port + // *.domain.com or *.domain.com:port + if strings.HasPrefix(phost, "*.") { + phost = phost[1:] + } + matchHost := false + if phost[0] != '.' { + matchHost = true + phost = "." + phost + } + c.domainMatchers = append(c.domainMatchers, domainMatch{host: phost, port: pport, matchHost: matchHost}) + } +} + +var portMap = map[string]string{ + "http": "80", + "https": "443", + "socks5": "1080", +} + +// canonicalAddr returns url.Host but always with a ":port" suffix +func canonicalAddr(url *url.URL) string { + addr := url.Hostname() + if v, err := idnaASCII(addr); err == nil { + addr = v + } + port := url.Port() + if port == "" { + port = portMap[url.Scheme] + } + return net.JoinHostPort(addr, port) +} + +// Given a string of the form "host", "host:port", or "[ipv6::address]:port", +// return true if the string includes a port. +func hasPort(s string) bool { return strings.LastIndex(s, ":") > strings.LastIndex(s, "]") } + +func idnaASCII(v string) (string, error) { + // TODO: Consider removing this check after verifying performance is okay. + // Right now punycode verification, length checks, context checks, and the + // permissible character tests are all omitted. It also prevents the ToASCII + // call from salvaging an invalid IDN, when possible. As a result it may be + // possible to have two IDNs that appear identical to the user where the + // ASCII-only version causes an error downstream whereas the non-ASCII + // version does not. + // Note that for correct ASCII IDNs ToASCII will only do considerably more + // work, but it will not cause an allocation. + if isASCII(v) { + return v, nil + } + return idna.Lookup.ToASCII(v) +} + +func isASCII(s string) bool { + for i := 0; i < len(s); i++ { + if s[i] >= utf8.RuneSelf { + return false + } + } + return true +} + +// matcher represents the matching rule for a given value in the NO_PROXY list +type matcher interface { + // match returns true if the host and optional port or ip and optional port + // are allowed + match(host, port string, ip net.IP) bool +} + +// allMatch matches on all possible inputs +type allMatch struct{} + +func (a allMatch) match(host, port string, ip net.IP) bool { + return true +} + +type cidrMatch struct { + cidr *net.IPNet +} + +func (m cidrMatch) match(host, port string, ip net.IP) bool { + return m.cidr.Contains(ip) +} + +type ipMatch struct { + ip net.IP + port string +} + +func (m ipMatch) match(host, port string, ip net.IP) bool { + if m.ip.Equal(ip) { + return m.port == "" || m.port == port + } + return false +} + +type domainMatch struct { + host string + port string + + matchHost bool +} + +func (m domainMatch) match(host, port string, ip net.IP) bool { + if strings.HasSuffix(host, m.host) || (m.matchHost && host == m.host[1:]) { + return m.port == "" || m.port == port + } + return false +} From 78e9974694f675ab79c9bcdb8c0e782659829655 Mon Sep 17 00:00:00 2001 From: yangtaokm Date: Mon, 14 Oct 2019 13:55:03 +0800 Subject: [PATCH 54/66] Add more test case for azureblob_util.go --- pkg/util/azureblob_util_test.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkg/util/azureblob_util_test.go b/pkg/util/azureblob_util_test.go index 5d5cff2d3..bddde6913 100644 --- a/pkg/util/azureblob_util_test.go +++ b/pkg/util/azureblob_util_test.go @@ -63,6 +63,16 @@ func Test_ValidAzureBlobStorageHost(t *testing.T) { context: "https://myaccount.blob.core.windows.net/", expectedResult: false, }, + { + name: "URL with folder structure", + context: "https://myaccount.blob.core.windows.net/fairingcontext/path/to/context.tar.gz", + expectedResult: true, + }, + { + name: "URL with $root container", + context: "https://myaccount.blob.core.windows.net/$root/context.tar.gz", + expectedResult: true, + }, } for _, test := range tests { From 894388693407e370438025b8b241551cb73ebcc2 Mon Sep 17 00:00:00 2001 From: slmagus Date: Wed, 16 Oct 2019 10:48:03 -0400 Subject: [PATCH 55/66] add make images to travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index b85d3832b..5f3ebbb63 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,3 +7,4 @@ go_import_path: github.com/GoogleContainerTools/kaniko script: - make test + - make images From 7413a516208ae11283d98f8d5490fa26f988c8d1 Mon Sep 17 00:00:00 2001 From: slmagus Date: Wed, 16 Oct 2019 10:53:39 -0400 Subject: [PATCH 56/66] fix docker build args value, as this passes in a literal double single quote --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d9ea21d8f..64701b087 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ GO_LDFLAGS += ' EXECUTOR_PACKAGE = $(REPOPATH)/cmd/executor WARMER_PACKAGE = $(REPOPATH)/cmd/warmer KANIKO_PROJECT = $(REPOPATH)/kaniko -BUILD_ARG ?= '' +BUILD_ARG ?= out/executor: $(GO_FILES) GOARCH=$(GOARCH) GOOS=linux CGO_ENABLED=0 go build -ldflags $(GO_LDFLAGS) -o $@ $(EXECUTOR_PACKAGE) From 297fd9743b30deee58ec534669cedc9f8139d083 Mon Sep 17 00:00:00 2001 From: slmagus Date: Wed, 16 Oct 2019 11:55:41 -0400 Subject: [PATCH 57/66] use the binary-bin directory as bazel-genfiles does not exist --- deploy/Dockerfile_debug | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deploy/Dockerfile_debug b/deploy/Dockerfile_debug index 65428e864..39097c1ce 100644 --- a/deploy/Dockerfile_debug +++ b/deploy/Dockerfile_debug @@ -29,16 +29,16 @@ RUN make && make out/warmer # Stage 1: Get the busybox shell FROM gcr.io/cloud-builders/bazel:latest -RUN git clone https://github.com/GoogleContainerTools/distroless.git +RUN git clone https://github.com/slmagus/distroless.git WORKDIR /distroless RUN bazel build //experimental/busybox:busybox_tar -RUN tar -C /distroless/bazel-genfiles/experimental/busybox/ -xf /distroless/bazel-genfiles/experimental/busybox/busybox.tar +RUN tar -C /distroless/bazel-bin/experimental/busybox/ -xf /distroless/bazel-bin/experimental/busybox/busybox.tar FROM scratch COPY --from=0 /go/src/github.com/GoogleContainerTools/kaniko/out/* /kaniko/ COPY --from=0 /usr/local/bin/docker-credential-gcr /kaniko/docker-credential-gcr COPY --from=0 /go/src/github.com/awslabs/amazon-ecr-credential-helper/bin/linux-amd64/docker-credential-ecr-login /kaniko/docker-credential-ecr-login -COPY --from=1 /distroless/bazel-genfiles/experimental/busybox/busybox/ /busybox/ +COPY --from=1 /distroless/bazel-bin/experimental/busybox/busybox/ /busybox/ # Declare /busybox as a volume to get it automatically whitelisted VOLUME /busybox COPY files/ca-certificates.crt /kaniko/ssl/certs/ From c0b7ef33d5b06bf5eb5665684fa853a936c63bf8 Mon Sep 17 00:00:00 2001 From: slmagus Date: Wed, 16 Oct 2019 12:03:42 -0400 Subject: [PATCH 58/66] revert distroless repo from testing fork --- deploy/Dockerfile_debug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/Dockerfile_debug b/deploy/Dockerfile_debug index 39097c1ce..c1e4107f7 100644 --- a/deploy/Dockerfile_debug +++ b/deploy/Dockerfile_debug @@ -29,7 +29,7 @@ RUN make && make out/warmer # Stage 1: Get the busybox shell FROM gcr.io/cloud-builders/bazel:latest -RUN git clone https://github.com/slmagus/distroless.git +RUN git clone https://github.com/GoogleContainerTools/distroless.git WORKDIR /distroless RUN bazel build //experimental/busybox:busybox_tar RUN tar -C /distroless/bazel-bin/experimental/busybox/ -xf /distroless/bazel-bin/experimental/busybox/busybox.tar From fa162e3005b65e7a8a1031dee7edd53f79a750d3 Mon Sep 17 00:00:00 2001 From: Prashant Date: Fri, 18 Oct 2019 19:03:11 +0530 Subject: [PATCH 59/66] changing debug to trace --- pkg/util/fs_util.go | 26 +- vendor/github.com/sirupsen/logrus/.gitignore | 2 + vendor/github.com/sirupsen/logrus/.travis.yml | 25 + .../github.com/sirupsen/logrus/CHANGELOG.md | 200 +++++++ vendor/github.com/sirupsen/logrus/README.md | 495 ++++++++++++++++++ vendor/github.com/sirupsen/logrus/alt_exit.go | 18 +- .../github.com/sirupsen/logrus/appveyor.yml | 14 + vendor/github.com/sirupsen/logrus/entry.go | 247 ++++++--- vendor/github.com/sirupsen/logrus/exported.go | 46 +- .../github.com/sirupsen/logrus/formatter.go | 33 +- vendor/github.com/sirupsen/logrus/go.mod | 10 + vendor/github.com/sirupsen/logrus/go.sum | 16 + .../sirupsen/logrus/json_formatter.go | 64 ++- vendor/github.com/sirupsen/logrus/logger.go | 232 ++++---- vendor/github.com/sirupsen/logrus/logrus.go | 75 ++- .../sirupsen/logrus/terminal_bsd.go | 10 - .../logrus/terminal_check_appengine.go | 2 +- .../sirupsen/logrus/terminal_check_bsd.go | 13 + .../logrus/terminal_check_no_terminal.go | 11 + .../logrus/terminal_check_notappengine.go | 6 +- .../sirupsen/logrus/terminal_check_solaris.go | 11 + .../sirupsen/logrus/terminal_check_unix.go | 13 + .../sirupsen/logrus/terminal_check_windows.go | 34 ++ .../sirupsen/logrus/terminal_linux.go | 14 - .../sirupsen/logrus/text_formatter.go | 172 ++++-- vendor/github.com/sirupsen/logrus/writer.go | 2 + 26 files changed, 1485 insertions(+), 306 deletions(-) create mode 100644 vendor/github.com/sirupsen/logrus/.gitignore create mode 100644 vendor/github.com/sirupsen/logrus/.travis.yml create mode 100644 vendor/github.com/sirupsen/logrus/CHANGELOG.md create mode 100644 vendor/github.com/sirupsen/logrus/README.md create mode 100644 vendor/github.com/sirupsen/logrus/appveyor.yml create mode 100644 vendor/github.com/sirupsen/logrus/go.mod create mode 100644 vendor/github.com/sirupsen/logrus/go.sum delete mode 100644 vendor/github.com/sirupsen/logrus/terminal_bsd.go create mode 100644 vendor/github.com/sirupsen/logrus/terminal_check_bsd.go create mode 100644 vendor/github.com/sirupsen/logrus/terminal_check_no_terminal.go create mode 100644 vendor/github.com/sirupsen/logrus/terminal_check_solaris.go create mode 100644 vendor/github.com/sirupsen/logrus/terminal_check_unix.go create mode 100644 vendor/github.com/sirupsen/logrus/terminal_check_windows.go delete mode 100644 vendor/github.com/sirupsen/logrus/terminal_linux.go diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index c13d73548..823cb7ebf 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -84,9 +84,9 @@ func GetFSFromImage(root string, img v1.Image) ([]string, error) { for i, l := range layers { if mediaType, err := l.MediaType(); err == nil { - logrus.Debugf("Extracting layer %d of media type %s", mediaType) + logrus.Tracef("Extracting layer %d of media type %s", mediaType) } else { - logrus.Debugf("Extracting layer %d", i) + logrus.Tracef("Extracting layer %d", i) } r, err := l.Uncompressed() @@ -206,10 +206,10 @@ func extractFile(dest string, hdr *tar.Header, tr io.Reader) error { } switch hdr.Typeflag { case tar.TypeReg: - logrus.Debugf("creating file %s", path) + logrus.Tracef("creating file %s", path) // It's possible a file is in the tar before its directory. if _, err := os.Stat(dir); os.IsNotExist(err) { - logrus.Debugf("base %s for file %s does not exist. Creating.", base, path) + logrus.Tracef("base %s for file %s does not exist. Creating.", base, path) if err := os.MkdirAll(dir, 0755); err != nil { return err } @@ -233,19 +233,19 @@ func extractFile(dest string, hdr *tar.Header, tr io.Reader) error { } currFile.Close() case tar.TypeDir: - logrus.Debugf("creating dir %s", path) + logrus.Tracef("creating dir %s", path) if err := mkdirAllWithPermissions(path, mode, uid, gid); err != nil { return err } case tar.TypeLink: - logrus.Debugf("link from %s to %s", hdr.Linkname, path) + logrus.Tracef("link from %s to %s", hdr.Linkname, path) abs, err := filepath.Abs(hdr.Linkname) if err != nil { return err } if CheckWhitelist(abs) { - logrus.Debugf("skipping symlink from %s to %s because %s is whitelisted", hdr.Linkname, path, hdr.Linkname) + logrus.Tracef("skipping symlink from %s to %s because %s is whitelisted", hdr.Linkname, path, hdr.Linkname) return nil } // The base directory for a link may not exist before it is created. @@ -265,7 +265,7 @@ func extractFile(dest string, hdr *tar.Header, tr io.Reader) error { } case tar.TypeSymlink: - logrus.Debugf("symlink from %s to %s", hdr.Linkname, path) + logrus.Tracef("symlink from %s to %s", hdr.Linkname, path) // The base directory for a symlink may not exist before it is created. if err := os.MkdirAll(dir, 0755); err != nil { return err @@ -327,27 +327,27 @@ func DetectFilesystemWhitelist(path string) error { reader := bufio.NewReader(f) for { line, err := reader.ReadString('\n') - logrus.Debugf("Read the following line from %s: %s", path, line) + logrus.Tracef("Read the following line from %s: %s", path, line) if err != nil && err != io.EOF { return err } lineArr := strings.Split(line, " ") if len(lineArr) < 5 { if err == io.EOF { - logrus.Debugf("Reached end of file %s", path) + logrus.Tracef("Reached end of file %s", path) break } continue } if lineArr[4] != constants.RootDir { - logrus.Debugf("Appending %s from line: %s", lineArr[4], line) + logrus.Tracef("Appending %s from line: %s", lineArr[4], line) whitelist = append(whitelist, WhitelistEntry{ Path: lineArr[4], PrefixMatchOnly: false, }) } if err == io.EOF { - logrus.Debugf("Reached end of file %s", path) + logrus.Tracef("Reached end of file %s", path) break } } @@ -422,7 +422,7 @@ func CreateFile(path string, reader io.Reader, perm os.FileMode, uid uint32, gid // Create directory path if it doesn't exist baseDir := filepath.Dir(path) if _, err := os.Lstat(baseDir); os.IsNotExist(err) { - logrus.Debugf("baseDir %s for file %s does not exist. Creating.", baseDir, path) + logrus.Tracef("baseDir %s for file %s does not exist. Creating.", baseDir, path) if err := os.MkdirAll(baseDir, 0755); err != nil { return err } diff --git a/vendor/github.com/sirupsen/logrus/.gitignore b/vendor/github.com/sirupsen/logrus/.gitignore new file mode 100644 index 000000000..6b7d7d1e8 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/.gitignore @@ -0,0 +1,2 @@ +logrus +vendor diff --git a/vendor/github.com/sirupsen/logrus/.travis.yml b/vendor/github.com/sirupsen/logrus/.travis.yml new file mode 100644 index 000000000..848938a6d --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/.travis.yml @@ -0,0 +1,25 @@ +language: go +go_import_path: github.com/sirupsen/logrus +git: + depth: 1 +env: + - GO111MODULE=on + - GO111MODULE=off +go: [ 1.11.x, 1.12.x ] +os: [ linux, osx ] +matrix: + exclude: + - go: 1.12.x + env: GO111MODULE=off + - go: 1.11.x + os: osx +install: + - ./travis/install.sh + - if [[ "$GO111MODULE" == "on" ]]; then go mod download; fi + - if [[ "$GO111MODULE" == "off" ]]; then go get github.com/stretchr/testify/assert golang.org/x/sys/unix github.com/konsorten/go-windows-terminal-sequences; fi +script: + - ./travis/cross_build.sh + - export GOMAXPROCS=4 + - export GORACE=halt_on_error=1 + - go test -race -v ./... + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then go test -race -v -tags appengine ./... ; fi diff --git a/vendor/github.com/sirupsen/logrus/CHANGELOG.md b/vendor/github.com/sirupsen/logrus/CHANGELOG.md new file mode 100644 index 000000000..51a7ab0ca --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/CHANGELOG.md @@ -0,0 +1,200 @@ +# 1.4.2 + * Fixes build break for plan9, nacl, solaris +# 1.4.1 +This new release introduces: + * Enhance TextFormatter to not print caller information when they are empty (#944) + * Remove dependency on golang.org/x/crypto (#932, #943) + +Fixes: + * Fix Entry.WithContext method to return a copy of the initial entry (#941) + +# 1.4.0 +This new release introduces: + * Add `DeferExitHandler`, similar to `RegisterExitHandler` but prepending the handler to the list of handlers (semantically like `defer`) (#848). + * Add `CallerPrettyfier` to `JSONFormatter` and `TextFormatter (#909, #911) + * Add `Entry.WithContext()` and `Entry.Context`, to set a context on entries to be used e.g. in hooks (#919). + +Fixes: + * Fix wrong method calls `Logger.Print` and `Logger.Warningln` (#893). + * Update `Entry.Logf` to not do string formatting unless the log level is enabled (#903) + * Fix infinite recursion on unknown `Level.String()` (#907) + * Fix race condition in `getCaller` (#916). + + +# 1.3.0 +This new release introduces: + * Log, Logf, Logln functions for Logger and Entry that take a Level + +Fixes: + * Building prometheus node_exporter on AIX (#840) + * Race condition in TextFormatter (#468) + * Travis CI import path (#868) + * Remove coloured output on Windows (#862) + * Pointer to func as field in JSONFormatter (#870) + * Properly marshal Levels (#873) + +# 1.2.0 +This new release introduces: + * A new method `SetReportCaller` in the `Logger` to enable the file, line and calling function from which the trace has been issued + * A new trace level named `Trace` whose level is below `Debug` + * A configurable exit function to be called upon a Fatal trace + * The `Level` object now implements `encoding.TextUnmarshaler` interface + +# 1.1.1 +This is a bug fix release. + * fix the build break on Solaris + * don't drop a whole trace in JSONFormatter when a field param is a function pointer which can not be serialized + +# 1.1.0 +This new release introduces: + * several fixes: + * a fix for a race condition on entry formatting + * proper cleanup of previously used entries before putting them back in the pool + * the extra new line at the end of message in text formatter has been removed + * a new global public API to check if a level is activated: IsLevelEnabled + * the following methods have been added to the Logger object + * IsLevelEnabled + * SetFormatter + * SetOutput + * ReplaceHooks + * introduction of go module + * an indent configuration for the json formatter + * output colour support for windows + * the field sort function is now configurable for text formatter + * the CLICOLOR and CLICOLOR\_FORCE environment variable support in text formater + +# 1.0.6 + +This new release introduces: + * a new api WithTime which allows to easily force the time of the log entry + which is mostly useful for logger wrapper + * a fix reverting the immutability of the entry given as parameter to the hooks + a new configuration field of the json formatter in order to put all the fields + in a nested dictionnary + * a new SetOutput method in the Logger + * a new configuration of the textformatter to configure the name of the default keys + * a new configuration of the text formatter to disable the level truncation + +# 1.0.5 + +* Fix hooks race (#707) +* Fix panic deadlock (#695) + +# 1.0.4 + +* Fix race when adding hooks (#612) +* Fix terminal check in AppEngine (#635) + +# 1.0.3 + +* Replace example files with testable examples + +# 1.0.2 + +* bug: quote non-string values in text formatter (#583) +* Make (*Logger) SetLevel a public method + +# 1.0.1 + +* bug: fix escaping in text formatter (#575) + +# 1.0.0 + +* Officially changed name to lower-case +* bug: colors on Windows 10 (#541) +* bug: fix race in accessing level (#512) + +# 0.11.5 + +* feature: add writer and writerlevel to entry (#372) + +# 0.11.4 + +* bug: fix undefined variable on solaris (#493) + +# 0.11.3 + +* formatter: configure quoting of empty values (#484) +* formatter: configure quoting character (default is `"`) (#484) +* bug: fix not importing io correctly in non-linux environments (#481) + +# 0.11.2 + +* bug: fix windows terminal detection (#476) + +# 0.11.1 + +* bug: fix tty detection with custom out (#471) + +# 0.11.0 + +* performance: Use bufferpool to allocate (#370) +* terminal: terminal detection for app-engine (#343) +* feature: exit handler (#375) + +# 0.10.0 + +* feature: Add a test hook (#180) +* feature: `ParseLevel` is now case-insensitive (#326) +* feature: `FieldLogger` interface that generalizes `Logger` and `Entry` (#308) +* performance: avoid re-allocations on `WithFields` (#335) + +# 0.9.0 + +* logrus/text_formatter: don't emit empty msg +* logrus/hooks/airbrake: move out of main repository +* logrus/hooks/sentry: move out of main repository +* logrus/hooks/papertrail: move out of main repository +* logrus/hooks/bugsnag: move out of main repository +* logrus/core: run tests with `-race` +* logrus/core: detect TTY based on `stderr` +* logrus/core: support `WithError` on logger +* logrus/core: Solaris support + +# 0.8.7 + +* logrus/core: fix possible race (#216) +* logrus/doc: small typo fixes and doc improvements + + +# 0.8.6 + +* hooks/raven: allow passing an initialized client + +# 0.8.5 + +* logrus/core: revert #208 + +# 0.8.4 + +* formatter/text: fix data race (#218) + +# 0.8.3 + +* logrus/core: fix entry log level (#208) +* logrus/core: improve performance of text formatter by 40% +* logrus/core: expose `LevelHooks` type +* logrus/core: add support for DragonflyBSD and NetBSD +* formatter/text: print structs more verbosely + +# 0.8.2 + +* logrus: fix more Fatal family functions + +# 0.8.1 + +* logrus: fix not exiting on `Fatalf` and `Fatalln` + +# 0.8.0 + +* logrus: defaults to stderr instead of stdout +* hooks/sentry: add special field for `*http.Request` +* formatter/text: ignore Windows for colors + +# 0.7.3 + +* formatter/\*: allow configuration of timestamp layout + +# 0.7.2 + +* formatter/text: Add configuration option for time format (#158) diff --git a/vendor/github.com/sirupsen/logrus/README.md b/vendor/github.com/sirupsen/logrus/README.md new file mode 100644 index 000000000..a4796eb07 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/README.md @@ -0,0 +1,495 @@ +# Logrus :walrus: [![Build Status](https://travis-ci.org/sirupsen/logrus.svg?branch=master)](https://travis-ci.org/sirupsen/logrus) [![GoDoc](https://godoc.org/github.com/sirupsen/logrus?status.svg)](https://godoc.org/github.com/sirupsen/logrus) + +Logrus is a structured logger for Go (golang), completely API compatible with +the standard library logger. + +**Seeing weird case-sensitive problems?** It's in the past been possible to +import Logrus as both upper- and lower-case. Due to the Go package environment, +this caused issues in the community and we needed a standard. Some environments +experienced problems with the upper-case variant, so the lower-case was decided. +Everything using `logrus` will need to use the lower-case: +`github.com/sirupsen/logrus`. Any package that isn't, should be changed. + +To fix Glide, see [these +comments](https://github.com/sirupsen/logrus/issues/553#issuecomment-306591437). +For an in-depth explanation of the casing issue, see [this +comment](https://github.com/sirupsen/logrus/issues/570#issuecomment-313933276). + +**Are you interested in assisting in maintaining Logrus?** Currently I have a +lot of obligations, and I am unable to provide Logrus with the maintainership it +needs. If you'd like to help, please reach out to me at `simon at author's +username dot com`. + +Nicely color-coded in development (when a TTY is attached, otherwise just +plain text): + +![Colored](http://i.imgur.com/PY7qMwd.png) + +With `log.SetFormatter(&log.JSONFormatter{})`, for easy parsing by logstash +or Splunk: + +```json +{"animal":"walrus","level":"info","msg":"A group of walrus emerges from the +ocean","size":10,"time":"2014-03-10 19:57:38.562264131 -0400 EDT"} + +{"level":"warning","msg":"The group's number increased tremendously!", +"number":122,"omg":true,"time":"2014-03-10 19:57:38.562471297 -0400 EDT"} + +{"animal":"walrus","level":"info","msg":"A giant walrus appears!", +"size":10,"time":"2014-03-10 19:57:38.562500591 -0400 EDT"} + +{"animal":"walrus","level":"info","msg":"Tremendously sized cow enters the ocean.", +"size":9,"time":"2014-03-10 19:57:38.562527896 -0400 EDT"} + +{"level":"fatal","msg":"The ice breaks!","number":100,"omg":true, +"time":"2014-03-10 19:57:38.562543128 -0400 EDT"} +``` + +With the default `log.SetFormatter(&log.TextFormatter{})` when a TTY is not +attached, the output is compatible with the +[logfmt](http://godoc.org/github.com/kr/logfmt) format: + +```text +time="2015-03-26T01:27:38-04:00" level=debug msg="Started observing beach" animal=walrus number=8 +time="2015-03-26T01:27:38-04:00" level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10 +time="2015-03-26T01:27:38-04:00" level=warning msg="The group's number increased tremendously!" number=122 omg=true +time="2015-03-26T01:27:38-04:00" level=debug msg="Temperature changes" temperature=-4 +time="2015-03-26T01:27:38-04:00" level=panic msg="It's over 9000!" animal=orca size=9009 +time="2015-03-26T01:27:38-04:00" level=fatal msg="The ice breaks!" err=&{0x2082280c0 map[animal:orca size:9009] 2015-03-26 01:27:38.441574009 -0400 EDT panic It's over 9000!} number=100 omg=true +``` +To ensure this behaviour even if a TTY is attached, set your formatter as follows: + +```go + log.SetFormatter(&log.TextFormatter{ + DisableColors: true, + FullTimestamp: true, + }) +``` + +#### Logging Method Name + +If you wish to add the calling method as a field, instruct the logger via: +```go +log.SetReportCaller(true) +``` +This adds the caller as 'method' like so: + +```json +{"animal":"penguin","level":"fatal","method":"github.com/sirupsen/arcticcreatures.migrate","msg":"a penguin swims by", +"time":"2014-03-10 19:57:38.562543129 -0400 EDT"} +``` + +```text +time="2015-03-26T01:27:38-04:00" level=fatal method=github.com/sirupsen/arcticcreatures.migrate msg="a penguin swims by" animal=penguin +``` +Note that this does add measurable overhead - the cost will depend on the version of Go, but is +between 20 and 40% in recent tests with 1.6 and 1.7. You can validate this in your +environment via benchmarks: +``` +go test -bench=.*CallerTracing +``` + + +#### Case-sensitivity + +The organization's name was changed to lower-case--and this will not be changed +back. If you are getting import conflicts due to case sensitivity, please use +the lower-case import: `github.com/sirupsen/logrus`. + +#### Example + +The simplest way to use Logrus is simply the package-level exported logger: + +```go +package main + +import ( + log "github.com/sirupsen/logrus" +) + +func main() { + log.WithFields(log.Fields{ + "animal": "walrus", + }).Info("A walrus appears") +} +``` + +Note that it's completely api-compatible with the stdlib logger, so you can +replace your `log` imports everywhere with `log "github.com/sirupsen/logrus"` +and you'll now have the flexibility of Logrus. You can customize it all you +want: + +```go +package main + +import ( + "os" + log "github.com/sirupsen/logrus" +) + +func init() { + // Log as JSON instead of the default ASCII formatter. + log.SetFormatter(&log.JSONFormatter{}) + + // Output to stdout instead of the default stderr + // Can be any io.Writer, see below for File example + log.SetOutput(os.Stdout) + + // Only log the warning severity or above. + log.SetLevel(log.WarnLevel) +} + +func main() { + log.WithFields(log.Fields{ + "animal": "walrus", + "size": 10, + }).Info("A group of walrus emerges from the ocean") + + log.WithFields(log.Fields{ + "omg": true, + "number": 122, + }).Warn("The group's number increased tremendously!") + + log.WithFields(log.Fields{ + "omg": true, + "number": 100, + }).Fatal("The ice breaks!") + + // A common pattern is to re-use fields between logging statements by re-using + // the logrus.Entry returned from WithFields() + contextLogger := log.WithFields(log.Fields{ + "common": "this is a common field", + "other": "I also should be logged always", + }) + + contextLogger.Info("I'll be logged with common and other field") + contextLogger.Info("Me too") +} +``` + +For more advanced usage such as logging to multiple locations from the same +application, you can also create an instance of the `logrus` Logger: + +```go +package main + +import ( + "os" + "github.com/sirupsen/logrus" +) + +// Create a new instance of the logger. You can have any number of instances. +var log = logrus.New() + +func main() { + // The API for setting attributes is a little different than the package level + // exported logger. See Godoc. + log.Out = os.Stdout + + // You could set this to any `io.Writer` such as a file + // file, err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY, 0666) + // if err == nil { + // log.Out = file + // } else { + // log.Info("Failed to log to file, using default stderr") + // } + + log.WithFields(logrus.Fields{ + "animal": "walrus", + "size": 10, + }).Info("A group of walrus emerges from the ocean") +} +``` + +#### Fields + +Logrus encourages careful, structured logging through logging fields instead of +long, unparseable error messages. For example, instead of: `log.Fatalf("Failed +to send event %s to topic %s with key %d")`, you should log the much more +discoverable: + +```go +log.WithFields(log.Fields{ + "event": event, + "topic": topic, + "key": key, +}).Fatal("Failed to send event") +``` + +We've found this API forces you to think about logging in a way that produces +much more useful logging messages. We've been in countless situations where just +a single added field to a log statement that was already there would've saved us +hours. The `WithFields` call is optional. + +In general, with Logrus using any of the `printf`-family functions should be +seen as a hint you should add a field, however, you can still use the +`printf`-family functions with Logrus. + +#### Default Fields + +Often it's helpful to have fields _always_ attached to log statements in an +application or parts of one. For example, you may want to always log the +`request_id` and `user_ip` in the context of a request. Instead of writing +`log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})` on +every line, you can create a `logrus.Entry` to pass around instead: + +```go +requestLogger := log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip}) +requestLogger.Info("something happened on that request") # will log request_id and user_ip +requestLogger.Warn("something not great happened") +``` + +#### Hooks + +You can add hooks for logging levels. For example to send errors to an exception +tracking service on `Error`, `Fatal` and `Panic`, info to StatsD or log to +multiple places simultaneously, e.g. syslog. + +Logrus comes with [built-in hooks](hooks/). Add those, or your custom hook, in +`init`: + +```go +import ( + log "github.com/sirupsen/logrus" + "gopkg.in/gemnasium/logrus-airbrake-hook.v2" // the package is named "airbrake" + logrus_syslog "github.com/sirupsen/logrus/hooks/syslog" + "log/syslog" +) + +func init() { + + // Use the Airbrake hook to report errors that have Error severity or above to + // an exception tracker. You can create custom hooks, see the Hooks section. + log.AddHook(airbrake.NewHook(123, "xyz", "production")) + + hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "") + if err != nil { + log.Error("Unable to connect to local syslog daemon") + } else { + log.AddHook(hook) + } +} +``` +Note: Syslog hook also support connecting to local syslog (Ex. "/dev/log" or "/var/run/syslog" or "/var/run/log"). For the detail, please check the [syslog hook README](hooks/syslog/README.md). + +A list of currently known of service hook can be found in this wiki [page](https://github.com/sirupsen/logrus/wiki/Hooks) + + +#### Level logging + +Logrus has seven logging levels: Trace, Debug, Info, Warning, Error, Fatal and Panic. + +```go +log.Trace("Something very low level.") +log.Debug("Useful debugging information.") +log.Info("Something noteworthy happened!") +log.Warn("You should probably take a look at this.") +log.Error("Something failed but I'm not quitting.") +// Calls os.Exit(1) after logging +log.Fatal("Bye.") +// Calls panic() after logging +log.Panic("I'm bailing.") +``` + +You can set the logging level on a `Logger`, then it will only log entries with +that severity or anything above it: + +```go +// Will log anything that is info or above (warn, error, fatal, panic). Default. +log.SetLevel(log.InfoLevel) +``` + +It may be useful to set `log.Level = logrus.DebugLevel` in a debug or verbose +environment if your application has that. + +#### Entries + +Besides the fields added with `WithField` or `WithFields` some fields are +automatically added to all logging events: + +1. `time`. The timestamp when the entry was created. +2. `msg`. The logging message passed to `{Info,Warn,Error,Fatal,Panic}` after + the `AddFields` call. E.g. `Failed to send event.` +3. `level`. The logging level. E.g. `info`. + +#### Environments + +Logrus has no notion of environment. + +If you wish for hooks and formatters to only be used in specific environments, +you should handle that yourself. For example, if your application has a global +variable `Environment`, which is a string representation of the environment you +could do: + +```go +import ( + log "github.com/sirupsen/logrus" +) + +init() { + // do something here to set environment depending on an environment variable + // or command-line flag + if Environment == "production" { + log.SetFormatter(&log.JSONFormatter{}) + } else { + // The TextFormatter is default, you don't actually have to do this. + log.SetFormatter(&log.TextFormatter{}) + } +} +``` + +This configuration is how `logrus` was intended to be used, but JSON in +production is mostly only useful if you do log aggregation with tools like +Splunk or Logstash. + +#### Formatters + +The built-in logging formatters are: + +* `logrus.TextFormatter`. Logs the event in colors if stdout is a tty, otherwise + without colors. + * *Note:* to force colored output when there is no TTY, set the `ForceColors` + field to `true`. To force no colored output even if there is a TTY set the + `DisableColors` field to `true`. For Windows, see + [github.com/mattn/go-colorable](https://github.com/mattn/go-colorable). + * When colors are enabled, levels are truncated to 4 characters by default. To disable + truncation set the `DisableLevelTruncation` field to `true`. + * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#TextFormatter). +* `logrus.JSONFormatter`. Logs fields as JSON. + * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#JSONFormatter). + +Third party logging formatters: + +* [`FluentdFormatter`](https://github.com/joonix/log). Formats entries that can be parsed by Kubernetes and Google Container Engine. +* [`GELF`](https://github.com/fabienm/go-logrus-formatters). Formats entries so they comply to Graylog's [GELF 1.1 specification](http://docs.graylog.org/en/2.4/pages/gelf.html). +* [`logstash`](https://github.com/bshuster-repo/logrus-logstash-hook). Logs fields as [Logstash](http://logstash.net) Events. +* [`prefixed`](https://github.com/x-cray/logrus-prefixed-formatter). Displays log entry source along with alternative layout. +* [`zalgo`](https://github.com/aybabtme/logzalgo). Invoking the P͉̫o̳̼̊w̖͈̰͎e̬͔̭͂r͚̼̹̲ ̫͓͉̳͈ō̠͕͖̚f̝͍̠ ͕̲̞͖͑Z̖̫̤̫ͪa͉̬͈̗l͖͎g̳̥o̰̥̅!̣͔̲̻͊̄ ̙̘̦̹̦. +* [`nested-logrus-formatter`](https://github.com/antonfisher/nested-logrus-formatter). Converts logrus fields to a nested structure. + +You can define your formatter by implementing the `Formatter` interface, +requiring a `Format` method. `Format` takes an `*Entry`. `entry.Data` is a +`Fields` type (`map[string]interface{}`) with all your fields as well as the +default ones (see Entries section above): + +```go +type MyJSONFormatter struct { +} + +log.SetFormatter(new(MyJSONFormatter)) + +func (f *MyJSONFormatter) Format(entry *Entry) ([]byte, error) { + // Note this doesn't include Time, Level and Message which are available on + // the Entry. Consult `godoc` on information about those fields or read the + // source of the official loggers. + serialized, err := json.Marshal(entry.Data) + if err != nil { + return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err) + } + return append(serialized, '\n'), nil +} +``` + +#### Logger as an `io.Writer` + +Logrus can be transformed into an `io.Writer`. That writer is the end of an `io.Pipe` and it is your responsibility to close it. + +```go +w := logger.Writer() +defer w.Close() + +srv := http.Server{ + // create a stdlib log.Logger that writes to + // logrus.Logger. + ErrorLog: log.New(w, "", 0), +} +``` + +Each line written to that writer will be printed the usual way, using formatters +and hooks. The level for those entries is `info`. + +This means that we can override the standard library logger easily: + +```go +logger := logrus.New() +logger.Formatter = &logrus.JSONFormatter{} + +// Use logrus for standard log output +// Note that `log` here references stdlib's log +// Not logrus imported under the name `log`. +log.SetOutput(logger.Writer()) +``` + +#### Rotation + +Log rotation is not provided with Logrus. Log rotation should be done by an +external program (like `logrotate(8)`) that can compress and delete old log +entries. It should not be a feature of the application-level logger. + +#### Tools + +| Tool | Description | +| ---- | ----------- | +|[Logrus Mate](https://github.com/gogap/logrus_mate)|Logrus mate is a tool for Logrus to manage loggers, you can initial logger's level, hook and formatter by config file, the logger will generated with different config at different environment.| +|[Logrus Viper Helper](https://github.com/heirko/go-contrib/tree/master/logrusHelper)|An Helper around Logrus to wrap with spf13/Viper to load configuration with fangs! And to simplify Logrus configuration use some behavior of [Logrus Mate](https://github.com/gogap/logrus_mate). [sample](https://github.com/heirko/iris-contrib/blob/master/middleware/logrus-logger/example) | + +#### Testing + +Logrus has a built in facility for asserting the presence of log messages. This is implemented through the `test` hook and provides: + +* decorators for existing logger (`test.NewLocal` and `test.NewGlobal`) which basically just add the `test` hook +* a test logger (`test.NewNullLogger`) that just records log messages (and does not output any): + +```go +import( + "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus/hooks/test" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestSomething(t*testing.T){ + logger, hook := test.NewNullLogger() + logger.Error("Helloerror") + + assert.Equal(t, 1, len(hook.Entries)) + assert.Equal(t, logrus.ErrorLevel, hook.LastEntry().Level) + assert.Equal(t, "Helloerror", hook.LastEntry().Message) + + hook.Reset() + assert.Nil(t, hook.LastEntry()) +} +``` + +#### Fatal handlers + +Logrus can register one or more functions that will be called when any `fatal` +level message is logged. The registered handlers will be executed before +logrus performs a `os.Exit(1)`. This behavior may be helpful if callers need +to gracefully shutdown. Unlike a `panic("Something went wrong...")` call which can be intercepted with a deferred `recover` a call to `os.Exit(1)` can not be intercepted. + +``` +... +handler := func() { + // gracefully shutdown something... +} +logrus.RegisterExitHandler(handler) +... +``` + +#### Thread safety + +By default, Logger is protected by a mutex for concurrent writes. The mutex is held when calling hooks and writing logs. +If you are sure such locking is not needed, you can call logger.SetNoLock() to disable the locking. + +Situation when locking is not needed includes: + +* You have no hooks registered, or hooks calling is already thread-safe. + +* Writing to logger.Out is already thread-safe, for example: + + 1) logger.Out is protected by locks. + + 2) logger.Out is a os.File handler opened with `O_APPEND` flag, and every write is smaller than 4k. (This allow multi-thread/multi-process writing) + + (Refer to http://www.notthewizard.com/2014/06/17/are-files-appends-really-atomic/) diff --git a/vendor/github.com/sirupsen/logrus/alt_exit.go b/vendor/github.com/sirupsen/logrus/alt_exit.go index 8af90637a..8fd189e1c 100644 --- a/vendor/github.com/sirupsen/logrus/alt_exit.go +++ b/vendor/github.com/sirupsen/logrus/alt_exit.go @@ -51,9 +51,9 @@ func Exit(code int) { os.Exit(code) } -// RegisterExitHandler adds a Logrus Exit handler, call logrus.Exit to invoke -// all handlers. The handlers will also be invoked when any Fatal log entry is -// made. +// RegisterExitHandler appends a Logrus Exit handler to the list of handlers, +// call logrus.Exit to invoke all handlers. The handlers will also be invoked when +// any Fatal log entry is made. // // This method is useful when a caller wishes to use logrus to log a fatal // message but also needs to gracefully shutdown. An example usecase could be @@ -62,3 +62,15 @@ func Exit(code int) { func RegisterExitHandler(handler func()) { handlers = append(handlers, handler) } + +// DeferExitHandler prepends a Logrus Exit handler to the list of handlers, +// call logrus.Exit to invoke all handlers. The handlers will also be invoked when +// any Fatal log entry is made. +// +// This method is useful when a caller wishes to use logrus to log a fatal +// message but also needs to gracefully shutdown. An example usecase could be +// closing database connections, or sending a alert that the application is +// closing. +func DeferExitHandler(handler func()) { + handlers = append([]func(){handler}, handlers...) +} diff --git a/vendor/github.com/sirupsen/logrus/appveyor.yml b/vendor/github.com/sirupsen/logrus/appveyor.yml new file mode 100644 index 000000000..96c2ce15f --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/appveyor.yml @@ -0,0 +1,14 @@ +version: "{build}" +platform: x64 +clone_folder: c:\gopath\src\github.com\sirupsen\logrus +environment: + GOPATH: c:\gopath +branches: + only: + - master +install: + - set PATH=%GOPATH%\bin;c:\go\bin;%PATH% + - go version +build_script: + - go get -t + - go test diff --git a/vendor/github.com/sirupsen/logrus/entry.go b/vendor/github.com/sirupsen/logrus/entry.go index 473bd1a0d..63e25583c 100644 --- a/vendor/github.com/sirupsen/logrus/entry.go +++ b/vendor/github.com/sirupsen/logrus/entry.go @@ -2,13 +2,33 @@ package logrus import ( "bytes" + "context" "fmt" "os" + "reflect" + "runtime" + "strings" "sync" "time" ) -var bufferPool *sync.Pool +var ( + bufferPool *sync.Pool + + // qualified package name, cached at first use + logrusPackage string + + // Positions in the call stack when tracing to report the calling method + minimumCallerDepth int + + // Used for caller information initialisation + callerInitOnce sync.Once +) + +const ( + maximumCallerDepth int = 25 + knownLogrusFrames int = 4 +) func init() { bufferPool = &sync.Pool{ @@ -16,15 +36,18 @@ func init() { return new(bytes.Buffer) }, } + + // start at the bottom of the stack before the package-name cache is primed + minimumCallerDepth = 1 } // Defines the key when adding errors using WithError. var ErrorKey = "error" // An entry is the final or intermediate Logrus logging entry. It contains all -// the fields passed with WithField{,s}. It's finally logged when Debug, Info, -// Warn, Error, Fatal or Panic is called on it. These objects can be reused and -// passed around as much as you wish to avoid field duplication. +// the fields passed with WithField{,s}. It's finally logged when Trace, Debug, +// Info, Warn, Error, Fatal or Panic is called on it. These objects can be +// reused and passed around as much as you wish to avoid field duplication. type Entry struct { Logger *Logger @@ -34,22 +57,31 @@ type Entry struct { // Time at which the log entry was created Time time.Time - // Level the log entry was logged at: Debug, Info, Warn, Error, Fatal or Panic + // Level the log entry was logged at: Trace, Debug, Info, Warn, Error, Fatal or Panic // This field will be set on entry firing and the value will be equal to the one in Logger struct field. Level Level - // Message passed to Debug, Info, Warn, Error, Fatal or Panic + // Calling method, with package name + Caller *runtime.Frame + + // Message passed to Trace, Debug, Info, Warn, Error, Fatal or Panic Message string - // When formatter is called in entry.log(), an Buffer may be set to entry + // When formatter is called in entry.log(), a Buffer may be set to entry Buffer *bytes.Buffer + + // Contains the context set by the user. Useful for hook processing etc. + Context context.Context + + // err may contain a field formatting error + err string } func NewEntry(logger *Logger) *Entry { return &Entry{ Logger: logger, - // Default is five fields, give a little extra room - Data: make(Fields, 5), + // Default is three fields, plus one optional. Give a little extra room. + Data: make(Fields, 6), } } @@ -69,6 +101,11 @@ func (entry *Entry) WithError(err error) *Entry { return entry.WithField(ErrorKey, err) } +// Add a context to the Entry. +func (entry *Entry) WithContext(ctx context.Context) *Entry { + return &Entry{Logger: entry.Logger, Data: entry.Data, Time: entry.Time, err: entry.err, Context: ctx} +} + // Add a single field to the Entry. func (entry *Entry) WithField(key string, value interface{}) *Entry { return entry.WithFields(Fields{key: value}) @@ -80,15 +117,88 @@ func (entry *Entry) WithFields(fields Fields) *Entry { for k, v := range entry.Data { data[k] = v } + fieldErr := entry.err for k, v := range fields { - data[k] = v + isErrField := false + if t := reflect.TypeOf(v); t != nil { + switch t.Kind() { + case reflect.Func: + isErrField = true + case reflect.Ptr: + isErrField = t.Elem().Kind() == reflect.Func + } + } + if isErrField { + tmp := fmt.Sprintf("can not add field %q", k) + if fieldErr != "" { + fieldErr = entry.err + ", " + tmp + } else { + fieldErr = tmp + } + } else { + data[k] = v + } } - return &Entry{Logger: entry.Logger, Data: data, Time: entry.Time} + return &Entry{Logger: entry.Logger, Data: data, Time: entry.Time, err: fieldErr, Context: entry.Context} } // Overrides the time of the Entry. func (entry *Entry) WithTime(t time.Time) *Entry { - return &Entry{Logger: entry.Logger, Data: entry.Data, Time: t} + return &Entry{Logger: entry.Logger, Data: entry.Data, Time: t, err: entry.err, Context: entry.Context} +} + +// getPackageName reduces a fully qualified function name to the package name +// There really ought to be to be a better way... +func getPackageName(f string) string { + for { + lastPeriod := strings.LastIndex(f, ".") + lastSlash := strings.LastIndex(f, "/") + if lastPeriod > lastSlash { + f = f[:lastPeriod] + } else { + break + } + } + + return f +} + +// getCaller retrieves the name of the first non-logrus calling function +func getCaller() *runtime.Frame { + + // cache this package's fully-qualified name + callerInitOnce.Do(func() { + pcs := make([]uintptr, 2) + _ = runtime.Callers(0, pcs) + logrusPackage = getPackageName(runtime.FuncForPC(pcs[1]).Name()) + + // now that we have the cache, we can skip a minimum count of known-logrus functions + // XXX this is dubious, the number of frames may vary + minimumCallerDepth = knownLogrusFrames + }) + + // Restrict the lookback frames to avoid runaway lookups + pcs := make([]uintptr, maximumCallerDepth) + depth := runtime.Callers(minimumCallerDepth, pcs) + frames := runtime.CallersFrames(pcs[:depth]) + + for f, again := frames.Next(); again; f, again = frames.Next() { + pkg := getPackageName(f.Function) + + // If the caller isn't part of this package, we're done + if pkg != logrusPackage { + return &f + } + } + + // if we got here, we failed to find the caller's context + return nil +} + +func (entry Entry) HasCaller() (has bool) { + return entry.Logger != nil && + entry.Logger.ReportCaller && + entry.Caller != nil } // This function is not declared with a pointer value because otherwise @@ -107,6 +217,9 @@ func (entry Entry) log(level Level, msg string) { entry.Level = level entry.Message = msg + if entry.Logger.ReportCaller { + entry.Caller = getCaller() + } entry.fireHooks() @@ -137,9 +250,9 @@ func (entry *Entry) fireHooks() { } func (entry *Entry) write() { - serialized, err := entry.Logger.Formatter.Format(entry) entry.Logger.mu.Lock() defer entry.Logger.mu.Unlock() + serialized, err := entry.Logger.Formatter.Format(entry) if err != nil { fmt.Fprintf(os.Stderr, "Failed to obtain reader, %v\n", err) } else { @@ -150,26 +263,30 @@ func (entry *Entry) write() { } } -func (entry *Entry) Debug(args ...interface{}) { - if entry.Logger.level() >= DebugLevel { - entry.log(DebugLevel, fmt.Sprint(args...)) +func (entry *Entry) Log(level Level, args ...interface{}) { + if entry.Logger.IsLevelEnabled(level) { + entry.log(level, fmt.Sprint(args...)) } } +func (entry *Entry) Trace(args ...interface{}) { + entry.Log(TraceLevel, args...) +} + +func (entry *Entry) Debug(args ...interface{}) { + entry.Log(DebugLevel, args...) +} + func (entry *Entry) Print(args ...interface{}) { entry.Info(args...) } func (entry *Entry) Info(args ...interface{}) { - if entry.Logger.level() >= InfoLevel { - entry.log(InfoLevel, fmt.Sprint(args...)) - } + entry.Log(InfoLevel, args...) } func (entry *Entry) Warn(args ...interface{}) { - if entry.Logger.level() >= WarnLevel { - entry.log(WarnLevel, fmt.Sprint(args...)) - } + entry.Log(WarnLevel, args...) } func (entry *Entry) Warning(args ...interface{}) { @@ -177,37 +294,37 @@ func (entry *Entry) Warning(args ...interface{}) { } func (entry *Entry) Error(args ...interface{}) { - if entry.Logger.level() >= ErrorLevel { - entry.log(ErrorLevel, fmt.Sprint(args...)) - } + entry.Log(ErrorLevel, args...) } func (entry *Entry) Fatal(args ...interface{}) { - if entry.Logger.level() >= FatalLevel { - entry.log(FatalLevel, fmt.Sprint(args...)) - } - Exit(1) + entry.Log(FatalLevel, args...) + entry.Logger.Exit(1) } func (entry *Entry) Panic(args ...interface{}) { - if entry.Logger.level() >= PanicLevel { - entry.log(PanicLevel, fmt.Sprint(args...)) - } + entry.Log(PanicLevel, args...) panic(fmt.Sprint(args...)) } // Entry Printf family functions -func (entry *Entry) Debugf(format string, args ...interface{}) { - if entry.Logger.level() >= DebugLevel { - entry.Debug(fmt.Sprintf(format, args...)) +func (entry *Entry) Logf(level Level, format string, args ...interface{}) { + if entry.Logger.IsLevelEnabled(level) { + entry.Log(level, fmt.Sprintf(format, args...)) } } +func (entry *Entry) Tracef(format string, args ...interface{}) { + entry.Logf(TraceLevel, format, args...) +} + +func (entry *Entry) Debugf(format string, args ...interface{}) { + entry.Logf(DebugLevel, format, args...) +} + func (entry *Entry) Infof(format string, args ...interface{}) { - if entry.Logger.level() >= InfoLevel { - entry.Info(fmt.Sprintf(format, args...)) - } + entry.Logf(InfoLevel, format, args...) } func (entry *Entry) Printf(format string, args ...interface{}) { @@ -215,9 +332,7 @@ func (entry *Entry) Printf(format string, args ...interface{}) { } func (entry *Entry) Warnf(format string, args ...interface{}) { - if entry.Logger.level() >= WarnLevel { - entry.Warn(fmt.Sprintf(format, args...)) - } + entry.Logf(WarnLevel, format, args...) } func (entry *Entry) Warningf(format string, args ...interface{}) { @@ -225,36 +340,36 @@ func (entry *Entry) Warningf(format string, args ...interface{}) { } func (entry *Entry) Errorf(format string, args ...interface{}) { - if entry.Logger.level() >= ErrorLevel { - entry.Error(fmt.Sprintf(format, args...)) - } + entry.Logf(ErrorLevel, format, args...) } func (entry *Entry) Fatalf(format string, args ...interface{}) { - if entry.Logger.level() >= FatalLevel { - entry.Fatal(fmt.Sprintf(format, args...)) - } - Exit(1) + entry.Logf(FatalLevel, format, args...) + entry.Logger.Exit(1) } func (entry *Entry) Panicf(format string, args ...interface{}) { - if entry.Logger.level() >= PanicLevel { - entry.Panic(fmt.Sprintf(format, args...)) - } + entry.Logf(PanicLevel, format, args...) } // Entry Println family functions -func (entry *Entry) Debugln(args ...interface{}) { - if entry.Logger.level() >= DebugLevel { - entry.Debug(entry.sprintlnn(args...)) +func (entry *Entry) Logln(level Level, args ...interface{}) { + if entry.Logger.IsLevelEnabled(level) { + entry.Log(level, entry.sprintlnn(args...)) } } +func (entry *Entry) Traceln(args ...interface{}) { + entry.Logln(TraceLevel, args...) +} + +func (entry *Entry) Debugln(args ...interface{}) { + entry.Logln(DebugLevel, args...) +} + func (entry *Entry) Infoln(args ...interface{}) { - if entry.Logger.level() >= InfoLevel { - entry.Info(entry.sprintlnn(args...)) - } + entry.Logln(InfoLevel, args...) } func (entry *Entry) Println(args ...interface{}) { @@ -262,9 +377,7 @@ func (entry *Entry) Println(args ...interface{}) { } func (entry *Entry) Warnln(args ...interface{}) { - if entry.Logger.level() >= WarnLevel { - entry.Warn(entry.sprintlnn(args...)) - } + entry.Logln(WarnLevel, args...) } func (entry *Entry) Warningln(args ...interface{}) { @@ -272,22 +385,16 @@ func (entry *Entry) Warningln(args ...interface{}) { } func (entry *Entry) Errorln(args ...interface{}) { - if entry.Logger.level() >= ErrorLevel { - entry.Error(entry.sprintlnn(args...)) - } + entry.Logln(ErrorLevel, args...) } func (entry *Entry) Fatalln(args ...interface{}) { - if entry.Logger.level() >= FatalLevel { - entry.Fatal(entry.sprintlnn(args...)) - } - Exit(1) + entry.Logln(FatalLevel, args...) + entry.Logger.Exit(1) } func (entry *Entry) Panicln(args ...interface{}) { - if entry.Logger.level() >= PanicLevel { - entry.Panic(entry.sprintlnn(args...)) - } + entry.Logln(PanicLevel, args...) } // Sprintlnn => Sprint no newline. This is to get the behavior of how diff --git a/vendor/github.com/sirupsen/logrus/exported.go b/vendor/github.com/sirupsen/logrus/exported.go index eb612a6f3..62fc2f219 100644 --- a/vendor/github.com/sirupsen/logrus/exported.go +++ b/vendor/github.com/sirupsen/logrus/exported.go @@ -1,6 +1,7 @@ package logrus import ( + "context" "io" "time" ) @@ -21,30 +22,33 @@ func SetOutput(out io.Writer) { // SetFormatter sets the standard logger formatter. func SetFormatter(formatter Formatter) { - std.mu.Lock() - defer std.mu.Unlock() - std.Formatter = formatter + std.SetFormatter(formatter) +} + +// SetReportCaller sets whether the standard logger will include the calling +// method as a field. +func SetReportCaller(include bool) { + std.SetReportCaller(include) } // SetLevel sets the standard logger level. func SetLevel(level Level) { - std.mu.Lock() - defer std.mu.Unlock() std.SetLevel(level) } // GetLevel returns the standard logger level. func GetLevel() Level { - std.mu.Lock() - defer std.mu.Unlock() - return std.level() + return std.GetLevel() +} + +// IsLevelEnabled checks if the log level of the standard logger is greater than the level param +func IsLevelEnabled(level Level) bool { + return std.IsLevelEnabled(level) } // AddHook adds a hook to the standard logger hooks. func AddHook(hook Hook) { - std.mu.Lock() - defer std.mu.Unlock() - std.Hooks.Add(hook) + std.AddHook(hook) } // WithError creates an entry from the standard logger and adds an error to it, using the value defined in ErrorKey as key. @@ -52,6 +56,11 @@ func WithError(err error) *Entry { return std.WithField(ErrorKey, err) } +// WithContext creates an entry from the standard logger and adds a context to it. +func WithContext(ctx context.Context) *Entry { + return std.WithContext(ctx) +} + // WithField creates an entry from the standard logger and adds a field to // it. If you want multiple fields, use `WithFields`. // @@ -80,6 +89,11 @@ func WithTime(t time.Time) *Entry { return std.WithTime(t) } +// Trace logs a message at level Trace on the standard logger. +func Trace(args ...interface{}) { + std.Trace(args...) +} + // Debug logs a message at level Debug on the standard logger. func Debug(args ...interface{}) { std.Debug(args...) @@ -120,6 +134,11 @@ func Fatal(args ...interface{}) { std.Fatal(args...) } +// Tracef logs a message at level Trace on the standard logger. +func Tracef(format string, args ...interface{}) { + std.Tracef(format, args...) +} + // Debugf logs a message at level Debug on the standard logger. func Debugf(format string, args ...interface{}) { std.Debugf(format, args...) @@ -160,6 +179,11 @@ func Fatalf(format string, args ...interface{}) { std.Fatalf(format, args...) } +// Traceln logs a message at level Trace on the standard logger. +func Traceln(args ...interface{}) { + std.Traceln(args...) +} + // Debugln logs a message at level Debug on the standard logger. func Debugln(args ...interface{}) { std.Debugln(args...) diff --git a/vendor/github.com/sirupsen/logrus/formatter.go b/vendor/github.com/sirupsen/logrus/formatter.go index 83c74947b..408883773 100644 --- a/vendor/github.com/sirupsen/logrus/formatter.go +++ b/vendor/github.com/sirupsen/logrus/formatter.go @@ -2,7 +2,16 @@ package logrus import "time" -const defaultTimestampFormat = time.RFC3339 +// Default key names for the default fields +const ( + defaultTimestampFormat = time.RFC3339 + FieldKeyMsg = "msg" + FieldKeyLevel = "level" + FieldKeyTime = "time" + FieldKeyLogrusError = "logrus_error" + FieldKeyFunc = "func" + FieldKeyFile = "file" +) // The Formatter interface is used to implement a custom Formatter. It takes an // `Entry`. It exposes all the fields, including the default ones: @@ -18,7 +27,7 @@ type Formatter interface { Format(*Entry) ([]byte, error) } -// This is to not silently overwrite `time`, `msg` and `level` fields when +// This is to not silently overwrite `time`, `msg`, `func` and `level` fields when // dumping it. If this code wasn't there doing: // // logrus.WithField("level", 1).Info("hello") @@ -30,7 +39,7 @@ type Formatter interface { // // It's not exported because it's still using Data in an opinionated way. It's to // avoid code duplication between the two default formatters. -func prefixFieldClashes(data Fields, fieldMap FieldMap) { +func prefixFieldClashes(data Fields, fieldMap FieldMap, reportCaller bool) { timeKey := fieldMap.resolve(FieldKeyTime) if t, ok := data[timeKey]; ok { data["fields."+timeKey] = t @@ -48,4 +57,22 @@ func prefixFieldClashes(data Fields, fieldMap FieldMap) { data["fields."+levelKey] = l delete(data, levelKey) } + + logrusErrKey := fieldMap.resolve(FieldKeyLogrusError) + if l, ok := data[logrusErrKey]; ok { + data["fields."+logrusErrKey] = l + delete(data, logrusErrKey) + } + + // If reportCaller is not set, 'func' will not conflict. + if reportCaller { + funcKey := fieldMap.resolve(FieldKeyFunc) + if l, ok := data[funcKey]; ok { + data["fields."+funcKey] = l + } + fileKey := fieldMap.resolve(FieldKeyFile) + if l, ok := data[fileKey]; ok { + data["fields."+fileKey] = l + } + } } diff --git a/vendor/github.com/sirupsen/logrus/go.mod b/vendor/github.com/sirupsen/logrus/go.mod new file mode 100644 index 000000000..12fdf9898 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/go.mod @@ -0,0 +1,10 @@ +module github.com/sirupsen/logrus + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/konsorten/go-windows-terminal-sequences v1.0.1 + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/stretchr/objx v0.1.1 // indirect + github.com/stretchr/testify v1.2.2 + golang.org/x/sys v0.0.0-20190422165155-953cdadca894 +) diff --git a/vendor/github.com/sirupsen/logrus/go.sum b/vendor/github.com/sirupsen/logrus/go.sum new file mode 100644 index 000000000..596c318b9 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/go.sum @@ -0,0 +1,16 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe h1:CHRGQ8V7OlCYtwaKPJi3iA7J+YdNKdo8j7nG5IgDhjs= +github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33 h1:I6FyU15t786LL7oL/hn43zqTuEGr4PN7F4XJ1p4E3Y8= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/vendor/github.com/sirupsen/logrus/json_formatter.go b/vendor/github.com/sirupsen/logrus/json_formatter.go index dab17610f..098a21a06 100644 --- a/vendor/github.com/sirupsen/logrus/json_formatter.go +++ b/vendor/github.com/sirupsen/logrus/json_formatter.go @@ -1,8 +1,10 @@ package logrus import ( + "bytes" "encoding/json" "fmt" + "runtime" ) type fieldKey string @@ -10,13 +12,6 @@ type fieldKey string // FieldMap allows customization of the key names for default fields. type FieldMap map[fieldKey]string -// Default key names for the default fields -const ( - FieldKeyMsg = "msg" - FieldKeyLevel = "level" - FieldKeyTime = "time" -) - func (f FieldMap) resolve(key fieldKey) string { if k, ok := f[key]; ok { return k @@ -40,17 +35,27 @@ type JSONFormatter struct { // As an example: // formatter := &JSONFormatter{ // FieldMap: FieldMap{ - // FieldKeyTime: "@timestamp", + // FieldKeyTime: "@timestamp", // FieldKeyLevel: "@level", - // FieldKeyMsg: "@message", + // FieldKeyMsg: "@message", + // FieldKeyFunc: "@caller", // }, // } FieldMap FieldMap + + // CallerPrettyfier can be set by the user to modify the content + // of the function and file keys in the json data when ReportCaller is + // activated. If any of the returned value is the empty string the + // corresponding key will be removed from json fields. + CallerPrettyfier func(*runtime.Frame) (function string, file string) + + // PrettyPrint will indent all json logs + PrettyPrint bool } // Format renders a single log entry func (f *JSONFormatter) Format(entry *Entry) ([]byte, error) { - data := make(Fields, len(entry.Data)+3) + data := make(Fields, len(entry.Data)+4) for k, v := range entry.Data { switch v := v.(type) { case error: @@ -68,22 +73,49 @@ func (f *JSONFormatter) Format(entry *Entry) ([]byte, error) { data = newData } - prefixFieldClashes(data, f.FieldMap) + prefixFieldClashes(data, f.FieldMap, entry.HasCaller()) timestampFormat := f.TimestampFormat if timestampFormat == "" { timestampFormat = defaultTimestampFormat } + if entry.err != "" { + data[f.FieldMap.resolve(FieldKeyLogrusError)] = entry.err + } if !f.DisableTimestamp { data[f.FieldMap.resolve(FieldKeyTime)] = entry.Time.Format(timestampFormat) } data[f.FieldMap.resolve(FieldKeyMsg)] = entry.Message data[f.FieldMap.resolve(FieldKeyLevel)] = entry.Level.String() - - serialized, err := json.Marshal(data) - if err != nil { - return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err) + if entry.HasCaller() { + funcVal := entry.Caller.Function + fileVal := fmt.Sprintf("%s:%d", entry.Caller.File, entry.Caller.Line) + if f.CallerPrettyfier != nil { + funcVal, fileVal = f.CallerPrettyfier(entry.Caller) + } + if funcVal != "" { + data[f.FieldMap.resolve(FieldKeyFunc)] = funcVal + } + if fileVal != "" { + data[f.FieldMap.resolve(FieldKeyFile)] = fileVal + } } - return append(serialized, '\n'), nil + + var b *bytes.Buffer + if entry.Buffer != nil { + b = entry.Buffer + } else { + b = &bytes.Buffer{} + } + + encoder := json.NewEncoder(b) + if f.PrettyPrint { + encoder.SetIndent("", " ") + } + if err := encoder.Encode(data); err != nil { + return nil, fmt.Errorf("failed to marshal fields to JSON, %v", err) + } + + return b.Bytes(), nil } diff --git a/vendor/github.com/sirupsen/logrus/logger.go b/vendor/github.com/sirupsen/logrus/logger.go index 342f7977d..c0c0b1e55 100644 --- a/vendor/github.com/sirupsen/logrus/logger.go +++ b/vendor/github.com/sirupsen/logrus/logger.go @@ -1,6 +1,7 @@ package logrus import ( + "context" "io" "os" "sync" @@ -11,7 +12,7 @@ import ( type Logger struct { // The logs are `io.Copy`'d to this in a mutex. It's common to set this to a // file, or leave it default which is `os.Stderr`. You can also set this to - // something more adventorous, such as logging to Kafka. + // something more adventurous, such as logging to Kafka. Out io.Writer // Hooks for the logger instance. These allow firing events based on logging // levels and log entries. For example, to send errors to an error tracking @@ -24,6 +25,10 @@ type Logger struct { // own that implements the `Formatter` interface, see the `README` or included // formatters for examples. Formatter Formatter + + // Flag for whether to log caller info (off by default) + ReportCaller bool + // The logging level the logger should log at. This is typically (and defaults // to) `logrus.Info`, which allows Info(), Warn(), Error() and Fatal() to be // logged. @@ -32,8 +37,12 @@ type Logger struct { mu MutexWrap // Reusable empty entry entryPool sync.Pool + // Function to exit the application, defaults to `os.Exit()` + ExitFunc exitFunc } +type exitFunc func(int) + type MutexWrap struct { lock sync.Mutex disabled bool @@ -69,10 +78,12 @@ func (mw *MutexWrap) Disable() { // It's recommended to make this a global instance called `log`. func New() *Logger { return &Logger{ - Out: os.Stderr, - Formatter: new(TextFormatter), - Hooks: make(LevelHooks), - Level: InfoLevel, + Out: os.Stderr, + Formatter: new(TextFormatter), + Hooks: make(LevelHooks), + Level: InfoLevel, + ExitFunc: os.Exit, + ReportCaller: false, } } @@ -85,6 +96,7 @@ func (logger *Logger) newEntry() *Entry { } func (logger *Logger) releaseEntry(entry *Entry) { + entry.Data = map[string]interface{}{} logger.entryPool.Put(entry) } @@ -113,6 +125,13 @@ func (logger *Logger) WithError(err error) *Entry { return entry.WithError(err) } +// Add a context to the log entry. +func (logger *Logger) WithContext(ctx context.Context) *Entry { + entry := logger.newEntry() + defer logger.releaseEntry(entry) + return entry.WithContext(ctx) +} + // Overrides the time of the log entry. func (logger *Logger) WithTime(t time.Time) *Entry { entry := logger.newEntry() @@ -120,20 +139,24 @@ func (logger *Logger) WithTime(t time.Time) *Entry { return entry.WithTime(t) } -func (logger *Logger) Debugf(format string, args ...interface{}) { - if logger.level() >= DebugLevel { +func (logger *Logger) Logf(level Level, format string, args ...interface{}) { + if logger.IsLevelEnabled(level) { entry := logger.newEntry() - entry.Debugf(format, args...) + entry.Logf(level, format, args...) logger.releaseEntry(entry) } } +func (logger *Logger) Tracef(format string, args ...interface{}) { + logger.Logf(TraceLevel, format, args...) +} + +func (logger *Logger) Debugf(format string, args ...interface{}) { + logger.Logf(DebugLevel, format, args...) +} + func (logger *Logger) Infof(format string, args ...interface{}) { - if logger.level() >= InfoLevel { - entry := logger.newEntry() - entry.Infof(format, args...) - logger.releaseEntry(entry) - } + logger.Logf(InfoLevel, format, args...) } func (logger *Logger) Printf(format string, args ...interface{}) { @@ -143,123 +166,91 @@ func (logger *Logger) Printf(format string, args ...interface{}) { } func (logger *Logger) Warnf(format string, args ...interface{}) { - if logger.level() >= WarnLevel { - entry := logger.newEntry() - entry.Warnf(format, args...) - logger.releaseEntry(entry) - } + logger.Logf(WarnLevel, format, args...) } func (logger *Logger) Warningf(format string, args ...interface{}) { - if logger.level() >= WarnLevel { - entry := logger.newEntry() - entry.Warnf(format, args...) - logger.releaseEntry(entry) - } + logger.Warnf(format, args...) } func (logger *Logger) Errorf(format string, args ...interface{}) { - if logger.level() >= ErrorLevel { - entry := logger.newEntry() - entry.Errorf(format, args...) - logger.releaseEntry(entry) - } + logger.Logf(ErrorLevel, format, args...) } func (logger *Logger) Fatalf(format string, args ...interface{}) { - if logger.level() >= FatalLevel { - entry := logger.newEntry() - entry.Fatalf(format, args...) - logger.releaseEntry(entry) - } - Exit(1) + logger.Logf(FatalLevel, format, args...) + logger.Exit(1) } func (logger *Logger) Panicf(format string, args ...interface{}) { - if logger.level() >= PanicLevel { + logger.Logf(PanicLevel, format, args...) +} + +func (logger *Logger) Log(level Level, args ...interface{}) { + if logger.IsLevelEnabled(level) { entry := logger.newEntry() - entry.Panicf(format, args...) + entry.Log(level, args...) logger.releaseEntry(entry) } } +func (logger *Logger) Trace(args ...interface{}) { + logger.Log(TraceLevel, args...) +} + func (logger *Logger) Debug(args ...interface{}) { - if logger.level() >= DebugLevel { - entry := logger.newEntry() - entry.Debug(args...) - logger.releaseEntry(entry) - } + logger.Log(DebugLevel, args...) } func (logger *Logger) Info(args ...interface{}) { - if logger.level() >= InfoLevel { - entry := logger.newEntry() - entry.Info(args...) - logger.releaseEntry(entry) - } + logger.Log(InfoLevel, args...) } func (logger *Logger) Print(args ...interface{}) { entry := logger.newEntry() - entry.Info(args...) + entry.Print(args...) logger.releaseEntry(entry) } func (logger *Logger) Warn(args ...interface{}) { - if logger.level() >= WarnLevel { - entry := logger.newEntry() - entry.Warn(args...) - logger.releaseEntry(entry) - } + logger.Log(WarnLevel, args...) } func (logger *Logger) Warning(args ...interface{}) { - if logger.level() >= WarnLevel { - entry := logger.newEntry() - entry.Warn(args...) - logger.releaseEntry(entry) - } + logger.Warn(args...) } func (logger *Logger) Error(args ...interface{}) { - if logger.level() >= ErrorLevel { - entry := logger.newEntry() - entry.Error(args...) - logger.releaseEntry(entry) - } + logger.Log(ErrorLevel, args...) } func (logger *Logger) Fatal(args ...interface{}) { - if logger.level() >= FatalLevel { - entry := logger.newEntry() - entry.Fatal(args...) - logger.releaseEntry(entry) - } - Exit(1) + logger.Log(FatalLevel, args...) + logger.Exit(1) } func (logger *Logger) Panic(args ...interface{}) { - if logger.level() >= PanicLevel { + logger.Log(PanicLevel, args...) +} + +func (logger *Logger) Logln(level Level, args ...interface{}) { + if logger.IsLevelEnabled(level) { entry := logger.newEntry() - entry.Panic(args...) + entry.Logln(level, args...) logger.releaseEntry(entry) } } +func (logger *Logger) Traceln(args ...interface{}) { + logger.Logln(TraceLevel, args...) +} + func (logger *Logger) Debugln(args ...interface{}) { - if logger.level() >= DebugLevel { - entry := logger.newEntry() - entry.Debugln(args...) - logger.releaseEntry(entry) - } + logger.Logln(DebugLevel, args...) } func (logger *Logger) Infoln(args ...interface{}) { - if logger.level() >= InfoLevel { - entry := logger.newEntry() - entry.Infoln(args...) - logger.releaseEntry(entry) - } + logger.Logln(InfoLevel, args...) } func (logger *Logger) Println(args ...interface{}) { @@ -269,44 +260,32 @@ func (logger *Logger) Println(args ...interface{}) { } func (logger *Logger) Warnln(args ...interface{}) { - if logger.level() >= WarnLevel { - entry := logger.newEntry() - entry.Warnln(args...) - logger.releaseEntry(entry) - } + logger.Logln(WarnLevel, args...) } func (logger *Logger) Warningln(args ...interface{}) { - if logger.level() >= WarnLevel { - entry := logger.newEntry() - entry.Warnln(args...) - logger.releaseEntry(entry) - } + logger.Warnln(args...) } func (logger *Logger) Errorln(args ...interface{}) { - if logger.level() >= ErrorLevel { - entry := logger.newEntry() - entry.Errorln(args...) - logger.releaseEntry(entry) - } + logger.Logln(ErrorLevel, args...) } func (logger *Logger) Fatalln(args ...interface{}) { - if logger.level() >= FatalLevel { - entry := logger.newEntry() - entry.Fatalln(args...) - logger.releaseEntry(entry) - } - Exit(1) + logger.Logln(FatalLevel, args...) + logger.Exit(1) } func (logger *Logger) Panicln(args ...interface{}) { - if logger.level() >= PanicLevel { - entry := logger.newEntry() - entry.Panicln(args...) - logger.releaseEntry(entry) + logger.Logln(PanicLevel, args...) +} + +func (logger *Logger) Exit(code int) { + runHandlers() + if logger.ExitFunc == nil { + logger.ExitFunc = os.Exit } + logger.ExitFunc(code) } //When file is opened with appending mode, it's safe to @@ -320,18 +299,53 @@ func (logger *Logger) level() Level { return Level(atomic.LoadUint32((*uint32)(&logger.Level))) } +// SetLevel sets the logger level. func (logger *Logger) SetLevel(level Level) { atomic.StoreUint32((*uint32)(&logger.Level), uint32(level)) } -func (logger *Logger) SetOutput(out io.Writer) { - logger.mu.Lock() - defer logger.mu.Unlock() - logger.Out = out +// GetLevel returns the logger level. +func (logger *Logger) GetLevel() Level { + return logger.level() } +// AddHook adds a hook to the logger hooks. func (logger *Logger) AddHook(hook Hook) { logger.mu.Lock() defer logger.mu.Unlock() logger.Hooks.Add(hook) } + +// IsLevelEnabled checks if the log level of the logger is greater than the level param +func (logger *Logger) IsLevelEnabled(level Level) bool { + return logger.level() >= level +} + +// SetFormatter sets the logger formatter. +func (logger *Logger) SetFormatter(formatter Formatter) { + logger.mu.Lock() + defer logger.mu.Unlock() + logger.Formatter = formatter +} + +// SetOutput sets the logger output. +func (logger *Logger) SetOutput(output io.Writer) { + logger.mu.Lock() + defer logger.mu.Unlock() + logger.Out = output +} + +func (logger *Logger) SetReportCaller(reportCaller bool) { + logger.mu.Lock() + defer logger.mu.Unlock() + logger.ReportCaller = reportCaller +} + +// ReplaceHooks replaces the logger hooks and returns the old ones +func (logger *Logger) ReplaceHooks(hooks LevelHooks) LevelHooks { + logger.mu.Lock() + oldHooks := logger.Hooks + logger.Hooks = hooks + logger.mu.Unlock() + return oldHooks +} diff --git a/vendor/github.com/sirupsen/logrus/logrus.go b/vendor/github.com/sirupsen/logrus/logrus.go index dd3899974..8644761f7 100644 --- a/vendor/github.com/sirupsen/logrus/logrus.go +++ b/vendor/github.com/sirupsen/logrus/logrus.go @@ -14,22 +14,11 @@ type Level uint32 // Convert the Level to a string. E.g. PanicLevel becomes "panic". func (level Level) String() string { - switch level { - case DebugLevel: - return "debug" - case InfoLevel: - return "info" - case WarnLevel: - return "warning" - case ErrorLevel: - return "error" - case FatalLevel: - return "fatal" - case PanicLevel: - return "panic" + if b, err := level.MarshalText(); err == nil { + return string(b) + } else { + return "unknown" } - - return "unknown" } // ParseLevel takes a string level and returns the Logrus log level constant. @@ -47,12 +36,47 @@ func ParseLevel(lvl string) (Level, error) { return InfoLevel, nil case "debug": return DebugLevel, nil + case "trace": + return TraceLevel, nil } var l Level return l, fmt.Errorf("not a valid logrus Level: %q", lvl) } +// UnmarshalText implements encoding.TextUnmarshaler. +func (level *Level) UnmarshalText(text []byte) error { + l, err := ParseLevel(string(text)) + if err != nil { + return err + } + + *level = Level(l) + + return nil +} + +func (level Level) MarshalText() ([]byte, error) { + switch level { + case TraceLevel: + return []byte("trace"), nil + case DebugLevel: + return []byte("debug"), nil + case InfoLevel: + return []byte("info"), nil + case WarnLevel: + return []byte("warning"), nil + case ErrorLevel: + return []byte("error"), nil + case FatalLevel: + return []byte("fatal"), nil + case PanicLevel: + return []byte("panic"), nil + } + + return nil, fmt.Errorf("not a valid logrus level %d", level) +} + // A constant exposing all logging levels var AllLevels = []Level{ PanicLevel, @@ -61,6 +85,7 @@ var AllLevels = []Level{ WarnLevel, InfoLevel, DebugLevel, + TraceLevel, } // These are the different logging levels. You can set the logging level to log @@ -69,7 +94,7 @@ const ( // PanicLevel level, highest level of severity. Logs and then calls panic with the // message passed to Debug, Info, ... PanicLevel Level = iota - // FatalLevel level. Logs and then calls `os.Exit(1)`. It will exit even if the + // FatalLevel level. Logs and then calls `logger.Exit(1)`. It will exit even if the // logging level is set to Panic. FatalLevel // ErrorLevel level. Logs. Used for errors that should definitely be noted. @@ -82,6 +107,8 @@ const ( InfoLevel // DebugLevel level. Usually only enabled when debugging. Very verbose logging. DebugLevel + // TraceLevel level. Designates finer-grained informational events than the Debug. + TraceLevel ) // Won't compile if StdLogger can't be realized by a log.Logger @@ -140,4 +167,20 @@ type FieldLogger interface { Errorln(args ...interface{}) Fatalln(args ...interface{}) Panicln(args ...interface{}) + + // IsDebugEnabled() bool + // IsInfoEnabled() bool + // IsWarnEnabled() bool + // IsErrorEnabled() bool + // IsFatalEnabled() bool + // IsPanicEnabled() bool +} + +// Ext1FieldLogger (the first extension to FieldLogger) is superfluous, it is +// here for consistancy. Do not use. Use Logger or Entry instead. +type Ext1FieldLogger interface { + FieldLogger + Tracef(format string, args ...interface{}) + Trace(args ...interface{}) + Traceln(args ...interface{}) } diff --git a/vendor/github.com/sirupsen/logrus/terminal_bsd.go b/vendor/github.com/sirupsen/logrus/terminal_bsd.go deleted file mode 100644 index 4880d13d2..000000000 --- a/vendor/github.com/sirupsen/logrus/terminal_bsd.go +++ /dev/null @@ -1,10 +0,0 @@ -// +build darwin freebsd openbsd netbsd dragonfly -// +build !appengine,!gopherjs - -package logrus - -import "golang.org/x/sys/unix" - -const ioctlReadTermios = unix.TIOCGETA - -type Termios unix.Termios diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go b/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go index 3de08e802..2403de981 100644 --- a/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go +++ b/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go @@ -1,4 +1,4 @@ -// +build appengine gopherjs +// +build appengine package logrus diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_bsd.go b/vendor/github.com/sirupsen/logrus/terminal_check_bsd.go new file mode 100644 index 000000000..3c4f43f91 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/terminal_check_bsd.go @@ -0,0 +1,13 @@ +// +build darwin dragonfly freebsd netbsd openbsd + +package logrus + +import "golang.org/x/sys/unix" + +const ioctlReadTermios = unix.TIOCGETA + +func isTerminal(fd int) bool { + _, err := unix.IoctlGetTermios(fd, ioctlReadTermios) + return err == nil +} + diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_no_terminal.go b/vendor/github.com/sirupsen/logrus/terminal_check_no_terminal.go new file mode 100644 index 000000000..97af92c68 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/terminal_check_no_terminal.go @@ -0,0 +1,11 @@ +// +build js nacl plan9 + +package logrus + +import ( + "io" +) + +func checkIfTerminal(w io.Writer) bool { + return false +} diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go b/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go index 067047a12..3293fb3ca 100644 --- a/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go +++ b/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go @@ -1,18 +1,16 @@ -// +build !appengine,!gopherjs +// +build !appengine,!js,!windows,!nacl,!plan9 package logrus import ( "io" "os" - - "golang.org/x/crypto/ssh/terminal" ) func checkIfTerminal(w io.Writer) bool { switch v := w.(type) { case *os.File: - return terminal.IsTerminal(int(v.Fd())) + return isTerminal(int(v.Fd())) default: return false } diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_solaris.go b/vendor/github.com/sirupsen/logrus/terminal_check_solaris.go new file mode 100644 index 000000000..f6710b3bd --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/terminal_check_solaris.go @@ -0,0 +1,11 @@ +package logrus + +import ( + "golang.org/x/sys/unix" +) + +// IsTerminal returns true if the given file descriptor is a terminal. +func isTerminal(fd int) bool { + _, err := unix.IoctlGetTermio(fd, unix.TCGETA) + return err == nil +} diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_unix.go b/vendor/github.com/sirupsen/logrus/terminal_check_unix.go new file mode 100644 index 000000000..355dc966f --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/terminal_check_unix.go @@ -0,0 +1,13 @@ +// +build linux aix + +package logrus + +import "golang.org/x/sys/unix" + +const ioctlReadTermios = unix.TCGETS + +func isTerminal(fd int) bool { + _, err := unix.IoctlGetTermios(fd, ioctlReadTermios) + return err == nil +} + diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_windows.go b/vendor/github.com/sirupsen/logrus/terminal_check_windows.go new file mode 100644 index 000000000..572889db2 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/terminal_check_windows.go @@ -0,0 +1,34 @@ +// +build !appengine,!js,windows + +package logrus + +import ( + "io" + "os" + "syscall" + + sequences "github.com/konsorten/go-windows-terminal-sequences" +) + +func initTerminal(w io.Writer) { + switch v := w.(type) { + case *os.File: + sequences.EnableVirtualTerminalProcessing(syscall.Handle(v.Fd()), true) + } +} + +func checkIfTerminal(w io.Writer) bool { + var ret bool + switch v := w.(type) { + case *os.File: + var mode uint32 + err := syscall.GetConsoleMode(syscall.Handle(v.Fd()), &mode) + ret = (err == nil) + default: + ret = false + } + if ret { + initTerminal(w) + } + return ret +} diff --git a/vendor/github.com/sirupsen/logrus/terminal_linux.go b/vendor/github.com/sirupsen/logrus/terminal_linux.go deleted file mode 100644 index f29a0097c..000000000 --- a/vendor/github.com/sirupsen/logrus/terminal_linux.go +++ /dev/null @@ -1,14 +0,0 @@ -// Based on ssh/terminal: -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !appengine,!gopherjs - -package logrus - -import "golang.org/x/sys/unix" - -const ioctlReadTermios = unix.TCGETS - -type Termios unix.Termios diff --git a/vendor/github.com/sirupsen/logrus/text_formatter.go b/vendor/github.com/sirupsen/logrus/text_formatter.go index 3e5504030..e01587c43 100644 --- a/vendor/github.com/sirupsen/logrus/text_formatter.go +++ b/vendor/github.com/sirupsen/logrus/text_formatter.go @@ -3,6 +3,8 @@ package logrus import ( "bytes" "fmt" + "os" + "runtime" "sort" "strings" "sync" @@ -10,18 +12,13 @@ import ( ) const ( - nocolor = 0 - red = 31 - green = 32 - yellow = 33 - blue = 36 - gray = 37 + red = 31 + yellow = 33 + blue = 36 + gray = 37 ) -var ( - baseTimestamp time.Time - emptyFieldMap FieldMap -) +var baseTimestamp time.Time func init() { baseTimestamp = time.Now() @@ -35,6 +32,9 @@ type TextFormatter struct { // Force disabling colors. DisableColors bool + // Override coloring based on CLICOLOR and CLICOLOR_FORCE. - https://bixense.com/clicolors/ + EnvironmentOverrideColors bool + // Disable timestamp logging. useful when output is redirected to logging // system that already adds timestamps. DisableTimestamp bool @@ -51,6 +51,9 @@ type TextFormatter struct { // be desired. DisableSorting bool + // The keys sorting function, when uninitialized it uses sort.Strings. + SortingFunc func([]string) + // Disables the truncation of the level text to 4 characters. DisableLevelTruncation bool @@ -69,7 +72,13 @@ type TextFormatter struct { // FieldKeyMsg: "@message"}} FieldMap FieldMap - sync.Once + // CallerPrettyfier can be set by the user to modify the content + // of the function and file keys in the data when ReportCaller is + // activated. If any of the returned value is the empty string the + // corresponding key will be removed from fields. + CallerPrettyfier func(*runtime.Frame) (function string, file string) + + terminalInitOnce sync.Once } func (f *TextFormatter) init(entry *Entry) { @@ -78,17 +87,77 @@ func (f *TextFormatter) init(entry *Entry) { } } +func (f *TextFormatter) isColored() bool { + isColored := f.ForceColors || (f.isTerminal && (runtime.GOOS != "windows")) + + if f.EnvironmentOverrideColors { + if force, ok := os.LookupEnv("CLICOLOR_FORCE"); ok && force != "0" { + isColored = true + } else if ok && force == "0" { + isColored = false + } else if os.Getenv("CLICOLOR") == "0" { + isColored = false + } + } + + return isColored && !f.DisableColors +} + // Format renders a single log entry func (f *TextFormatter) Format(entry *Entry) ([]byte, error) { - prefixFieldClashes(entry.Data, f.FieldMap) - - keys := make([]string, 0, len(entry.Data)) - for k := range entry.Data { + data := make(Fields) + for k, v := range entry.Data { + data[k] = v + } + prefixFieldClashes(data, f.FieldMap, entry.HasCaller()) + keys := make([]string, 0, len(data)) + for k := range data { keys = append(keys, k) } + var funcVal, fileVal string + + fixedKeys := make([]string, 0, 4+len(data)) + if !f.DisableTimestamp { + fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyTime)) + } + fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyLevel)) + if entry.Message != "" { + fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyMsg)) + } + if entry.err != "" { + fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyLogrusError)) + } + if entry.HasCaller() { + if f.CallerPrettyfier != nil { + funcVal, fileVal = f.CallerPrettyfier(entry.Caller) + } else { + funcVal = entry.Caller.Function + fileVal = fmt.Sprintf("%s:%d", entry.Caller.File, entry.Caller.Line) + } + + if funcVal != "" { + fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyFunc)) + } + if fileVal != "" { + fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyFile)) + } + } + if !f.DisableSorting { - sort.Strings(keys) + if f.SortingFunc == nil { + sort.Strings(keys) + fixedKeys = append(fixedKeys, keys...) + } else { + if !f.isColored() { + fixedKeys = append(fixedKeys, keys...) + f.SortingFunc(fixedKeys) + } else { + f.SortingFunc(keys) + } + } + } else { + fixedKeys = append(fixedKeys, keys...) } var b *bytes.Buffer @@ -98,26 +167,35 @@ func (f *TextFormatter) Format(entry *Entry) ([]byte, error) { b = &bytes.Buffer{} } - f.Do(func() { f.init(entry) }) - - isColored := (f.ForceColors || f.isTerminal) && !f.DisableColors + f.terminalInitOnce.Do(func() { f.init(entry) }) timestampFormat := f.TimestampFormat if timestampFormat == "" { timestampFormat = defaultTimestampFormat } - if isColored { - f.printColored(b, entry, keys, timestampFormat) + if f.isColored() { + f.printColored(b, entry, keys, data, timestampFormat) } else { - if !f.DisableTimestamp { - f.appendKeyValue(b, f.FieldMap.resolve(FieldKeyTime), entry.Time.Format(timestampFormat)) - } - f.appendKeyValue(b, f.FieldMap.resolve(FieldKeyLevel), entry.Level.String()) - if entry.Message != "" { - f.appendKeyValue(b, f.FieldMap.resolve(FieldKeyMsg), entry.Message) - } - for _, key := range keys { - f.appendKeyValue(b, key, entry.Data[key]) + + for _, key := range fixedKeys { + var value interface{} + switch { + case key == f.FieldMap.resolve(FieldKeyTime): + value = entry.Time.Format(timestampFormat) + case key == f.FieldMap.resolve(FieldKeyLevel): + value = entry.Level.String() + case key == f.FieldMap.resolve(FieldKeyMsg): + value = entry.Message + case key == f.FieldMap.resolve(FieldKeyLogrusError): + value = entry.err + case key == f.FieldMap.resolve(FieldKeyFunc) && entry.HasCaller(): + value = funcVal + case key == f.FieldMap.resolve(FieldKeyFile) && entry.HasCaller(): + value = fileVal + default: + value = data[key] + } + f.appendKeyValue(b, key, value) } } @@ -125,10 +203,10 @@ func (f *TextFormatter) Format(entry *Entry) ([]byte, error) { return b.Bytes(), nil } -func (f *TextFormatter) printColored(b *bytes.Buffer, entry *Entry, keys []string, timestampFormat string) { +func (f *TextFormatter) printColored(b *bytes.Buffer, entry *Entry, keys []string, data Fields, timestampFormat string) { var levelColor int switch entry.Level { - case DebugLevel: + case DebugLevel, TraceLevel: levelColor = gray case WarnLevel: levelColor = yellow @@ -143,15 +221,37 @@ func (f *TextFormatter) printColored(b *bytes.Buffer, entry *Entry, keys []strin levelText = levelText[0:4] } + // Remove a single newline if it already exists in the message to keep + // the behavior of logrus text_formatter the same as the stdlib log package + entry.Message = strings.TrimSuffix(entry.Message, "\n") + + caller := "" + if entry.HasCaller() { + funcVal := fmt.Sprintf("%s()", entry.Caller.Function) + fileVal := fmt.Sprintf("%s:%d", entry.Caller.File, entry.Caller.Line) + + if f.CallerPrettyfier != nil { + funcVal, fileVal = f.CallerPrettyfier(entry.Caller) + } + + if fileVal == "" { + caller = funcVal + } else if funcVal == "" { + caller = fileVal + } else { + caller = fileVal + " " + funcVal + } + } + if f.DisableTimestamp { - fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m %-44s ", levelColor, levelText, entry.Message) + fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m%s %-44s ", levelColor, levelText, caller, entry.Message) } else if !f.FullTimestamp { - fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%04d] %-44s ", levelColor, levelText, int(entry.Time.Sub(baseTimestamp)/time.Second), entry.Message) + fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%04d]%s %-44s ", levelColor, levelText, int(entry.Time.Sub(baseTimestamp)/time.Second), caller, entry.Message) } else { - fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%s] %-44s ", levelColor, levelText, entry.Time.Format(timestampFormat), entry.Message) + fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%s]%s %-44s ", levelColor, levelText, entry.Time.Format(timestampFormat), caller, entry.Message) } for _, k := range keys { - v := entry.Data[k] + v := data[k] fmt.Fprintf(b, " \x1b[%dm%s\x1b[0m=", levelColor, k) f.appendValue(b, v) } diff --git a/vendor/github.com/sirupsen/logrus/writer.go b/vendor/github.com/sirupsen/logrus/writer.go index 7bdebedc6..9e1f75135 100644 --- a/vendor/github.com/sirupsen/logrus/writer.go +++ b/vendor/github.com/sirupsen/logrus/writer.go @@ -24,6 +24,8 @@ func (entry *Entry) WriterLevel(level Level) *io.PipeWriter { var printFunc func(args ...interface{}) switch level { + case TraceLevel: + printFunc = entry.Trace case DebugLevel: printFunc = entry.Debug case InfoLevel: From a86ffc8c5777fd7849be6f635b1b61b36bc41e81 Mon Sep 17 00:00:00 2001 From: Tao Yang Date: Mon, 21 Oct 2019 10:19:32 +0800 Subject: [PATCH 60/66] Apply suggestions from code review fix formatting based on review Co-Authored-By: Tejal Desai --- pkg/buildcontext/azureblob.go | 6 +++--- pkg/constants/constants.go | 2 +- pkg/util/azureblob_util.go | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/buildcontext/azureblob.go b/pkg/buildcontext/azureblob.go index f3f1b1ad7..bb58bd4fa 100644 --- a/pkg/buildcontext/azureblob.go +++ b/pkg/buildcontext/azureblob.go @@ -37,18 +37,18 @@ type AzureBlob struct { // Download context file from given azure blob storage url and unpack it to BuildContextDir func (b *AzureBlob) UnpackTarFromBuildContext() (string, error) { - //Get Azure_STORAGE_ACCESS_KEY from environment variables + // Get Azure_STORAGE_ACCESS_KEY from environment variables accountKey := os.Getenv("AZURE_STORAGE_ACCESS_KEY") if len(accountKey) == 0 { return "", errors.New("AZURE_STORAGE_ACCESS_KEY environment variable is not set") } - //Get storage accoutname for Azure Blob Storage + // Get storage accoutname for Azure Blob Storage u, _ := url.Parse(b.context) parts := azblob.NewBlobURLParts(*u) accountName := strings.Split(parts.Host, ".")[0] - //Generate credentail with accountname and accountkey + // Generate credentail with accountname and accountkey credential, err := azblob.NewSharedKeyCredential(accountName, accountKey) if err != nil { return parts.Host, err diff --git a/pkg/constants/constants.go b/pkg/constants/constants.go index 699b13355..9de493eb2 100644 --- a/pkg/constants/constants.go +++ b/pkg/constants/constants.go @@ -80,7 +80,7 @@ const ( // ScratchEnvVars are the default environment variables needed for a scratch image. var ScratchEnvVars = []string{"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"} -//AzureBlobStorageHostRegEx is ReqEX for Valid azure blob storage host suffix in url for AzureCloud, AzureChinaCloud, AzureGermanCloud and AzureUSGovernment +// AzureBlobStorageHostRegEx is ReqEX for Valid azure blob storage host suffix in url for AzureCloud, AzureChinaCloud, AzureGermanCloud and AzureUSGovernment var AzureBlobStorageHostRegEx = []string{"https://(.+?).blob.core.windows.net/(.+)", "https://(.+?).blob.core.chinacloudapi.cn/(.+)", "https://(.+?).blob.core.cloudapi.de/(.+)", diff --git a/pkg/util/azureblob_util.go b/pkg/util/azureblob_util.go index c5e60c866..e856e309a 100644 --- a/pkg/util/azureblob_util.go +++ b/pkg/util/azureblob_util.go @@ -22,8 +22,8 @@ import ( "github.com/GoogleContainerTools/kaniko/pkg/constants" ) -//Validate if the host url provided is with correct suffix for AzureCloud, AzureChinaCloud, AzureGermanCloud and AzureUSGovernment -//RegEX for supported suffix defined in constants.AzureBlobStorageHostRegEx +// Validate if the host url provided is with correct suffix for AzureCloud, AzureChinaCloud, AzureGermanCloud and AzureUSGovernment +// RegEX for supported suffix defined in constants.AzureBlobStorageHostRegEx func ValidAzureBlobStorageHost(context string) bool { for _, re := range constants.AzureBlobStorageHostRegEx { validBlobURL := regexp.MustCompile(re) From d970fa8af3b8d0178159c6dcc8167f90b97ac764 Mon Sep 17 00:00:00 2001 From: Mike Vanbuskirk Date: Mon, 21 Oct 2019 22:45:54 -0400 Subject: [PATCH 61/66] 828: clean up docker doc, fix context var in run cmd --- README.md | 100 +++++++++++++++++++++++++++-------------------- run_in_docker.sh | 10 ++--- 2 files changed, 63 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index 13510dc2b..ec2a6de46 100644 --- a/README.md +++ b/README.md @@ -18,48 +18,53 @@ _If you are interested in contributing to kaniko, see [DEVELOPMENT.md](DEVELOPME **Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)* -- [How does kaniko work?](#how-does-kaniko-work) -- [Known Issues](#known-issues) -- [Demo](#demo) -- [Tutorial](#tutorial) -- [Using kaniko](#using-kaniko) - - [kaniko Build Contexts](#kaniko-build-contexts) - - [Running kaniko](#running-kaniko) - - [Running kaniko in a Kubernetes cluster](#running-kaniko-in-a-kubernetes-cluster) - - [Kubernetes secret](#kubernetes-secret) - - [Running kaniko in gVisor](#running-kaniko-in-gvisor) - - [Running kaniko in Google Cloud Build](#running-kaniko-in-google-cloud-build) - - [Running kaniko in Docker](#running-kaniko-in-docker) - - [Caching](#caching) - - [Caching Layers](#caching-layers) - - [Caching Base Images](#caching-base-images) - - [Pushing to Different Registries](#pushing-to-different-registries) - - [Pushing to Amazon ECR](#pushing-to-amazon-ecr) - - [Additional Flags](#additional-flags) - - [--build-arg](#--build-arg) - - [--cache](#--cache) - - [--cache-dir](#--cache-dir) - - [--cache-repo](#--cache-repo) - - [--cleanup](#--cleanup) - - [--digest-file](#--digest-file) - - [--insecure](#--insecure) - - [--insecure-pull](#--insecure-pull) - - [--no-push](#--no-push) - - [--oci-layout-path](#--oci-layout-path) - - [--reproducible](#--reproducible) - - [--single-snapshot](#--single-snapshot) - - [--snapshotMode](#--snapshotmode) - - [--skip-tls-verify](#--skip-tls-verify) - - [--skip-tls-verify-pull](#--skip-tls-verify-pull) - - [--target](#--target) - - [--tarPath](#--tarpath) - - [--verbosity](#--verbosity) - - [Debug Image](#debug-image) -- [Security](#security) -- [Comparison with Other Tools](#comparison-with-other-tools) -- [Community](#community) -- [Limitations](#limitations) - - [mtime and snapshotting](#mtime-and-snapshotting) +- [kaniko - Build Images In Kubernetes](#kaniko---build-images-in-kubernetes) + - [How does kaniko work?](#how-does-kaniko-work) + - [Known Issues](#known-issues) + - [Demo](#demo) + - [Tutorial](#tutorial) + - [Using kaniko](#using-kaniko) + - [kaniko Build Contexts](#kaniko-build-contexts) + - [Using Private Git Repository](#using-private-git-repository) + - [Running kaniko](#running-kaniko) + - [Running kaniko in a Kubernetes cluster](#running-kaniko-in-a-kubernetes-cluster) + - [Kubernetes secret](#kubernetes-secret) + - [Running kaniko in gVisor](#running-kaniko-in-gvisor) + - [Running kaniko in Google Cloud Build](#running-kaniko-in-google-cloud-build) + - [Running kaniko in Docker](#running-kaniko-in-docker) + - [Caching](#caching) + - [Caching Layers](#caching-layers) + - [Caching Base Images](#caching-base-images) + - [Pushing to Different Registries](#pushing-to-different-registries) + - [Pushing to Docker Hub](#pushing-to-docker-hub) + - [Pushing to Amazon ECR](#pushing-to-amazon-ecr) + - [Additional Flags](#additional-flags) + - [--build-arg](#build-arg) + - [--cache](#cache) + - [--cache-dir](#cache-dir) + - [--cache-repo](#cache-repo) + - [--digest-file](#digest-file) + - [--oci-layout-path](#oci-layout-path) + - [--insecure-registry](#insecure-registry) + - [--skip-tls-verify-registry](#skip-tls-verify-registry) + - [--cleanup](#cleanup) + - [--insecure](#insecure) + - [--insecure-pull](#insecure-pull) + - [--no-push](#no-push) + - [--reproducible](#reproducible) + - [--single-snapshot](#single-snapshot) + - [--skip-tls-verify](#skip-tls-verify) + - [--skip-tls-verify-pull](#skip-tls-verify-pull) + - [--snapshotMode](#snapshotmode) + - [--target](#target) + - [--tarPath](#tarpath) + - [--verbosity](#verbosity) + - [Debug Image](#debug-image) + - [Security](#security) + - [Comparison with Other Tools](#comparison-with-other-tools) + - [Community](#community) + - [Limitations](#limitations) + - [mtime and snapshotting](#mtime-and-snapshotting) @@ -250,6 +255,17 @@ We can run the kaniko executor image locally in a Docker daemon to build and pus ./run_in_docker.sh ``` +**NOTE**: When running in Docker, Kaniko expects the absolute path to a +local build context, and a Dockerfile path _inside_ the container. + +An example run, specifying the Dockerfile in the container directory `/workspace`, the build +context in the local directory `/home/user/kaniko-project`, and a Google Container Registry +as a remote image destination: + +```shell +./run_in_docker.sh /workspace/Dockerfile /home/user/kaniko-project gcr.io/// +``` + ### Caching #### Caching Layers diff --git a/run_in_docker.sh b/run_in_docker.sh index 9397f1a71..562e881f7 100755 --- a/run_in_docker.sh +++ b/run_in_docker.sh @@ -15,7 +15,7 @@ #!/bin/bash set -e -if [ $# -lt 3 ]; then +if [ $# -lt 3 ]; then echo "Usage: run_in_docker.sh " exit 1 fi @@ -35,9 +35,9 @@ if [[ ! -e $HOME/.config/gcloud/application_default_credentials.json ]]; then fi docker run \ - -v $HOME/.config/gcloud:/root/.config/gcloud \ - -v ${context}:/workspace \ + -v "$HOME"/.config/gcloud:/root/.config/gcloud \ + -v $context:/workspace \ gcr.io/kaniko-project/executor:latest \ - --dockerfile ${dockerfile} --destination ${destination} --context dir:///workspace/ \ - --cache=${cache} + --dockerfile "${dockerfile}" --destination "${destination}" --context "${context}" \ + --cache="${cache}" From 53bf6c7339d3c88f4b18291f4a9aba3ae0a22984 Mon Sep 17 00:00:00 2001 From: Mike Vanbuskirk Date: Mon, 21 Oct 2019 23:15:11 -0400 Subject: [PATCH 62/66] 828: add "" to context var in vol mount switch --- run_in_docker.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/run_in_docker.sh b/run_in_docker.sh index 562e881f7..db106b273 100755 --- a/run_in_docker.sh +++ b/run_in_docker.sh @@ -36,7 +36,11 @@ fi docker run \ -v "$HOME"/.config/gcloud:/root/.config/gcloud \ +<<<<<<< Updated upstream -v $context:/workspace \ +======= + -v "$context":/workspace \ +>>>>>>> Stashed changes gcr.io/kaniko-project/executor:latest \ --dockerfile "${dockerfile}" --destination "${destination}" --context "${context}" \ --cache="${cache}" From d9c0c359eb6c554729ed41ae19e34e8b9f122337 Mon Sep 17 00:00:00 2001 From: Mike Vanbuskirk Date: Mon, 21 Oct 2019 23:16:33 -0400 Subject: [PATCH 63/66] 828: add "" to context var in vol mount switch --- run_in_docker.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/run_in_docker.sh b/run_in_docker.sh index db106b273..36496768e 100755 --- a/run_in_docker.sh +++ b/run_in_docker.sh @@ -36,11 +36,7 @@ fi docker run \ -v "$HOME"/.config/gcloud:/root/.config/gcloud \ -<<<<<<< Updated upstream - -v $context:/workspace \ -======= -v "$context":/workspace \ ->>>>>>> Stashed changes gcr.io/kaniko-project/executor:latest \ --dockerfile "${dockerfile}" --destination "${destination}" --context "${context}" \ --cache="${cache}" From 45c43a2c897bc67d1ad86b96b86adca4a5b76e0f Mon Sep 17 00:00:00 2001 From: yangtaokm Date: Tue, 22 Oct 2019 16:44:51 +0800 Subject: [PATCH 64/66] refactory the code and add CreateTargetTarfile in fs_util.go --- pkg/buildcontext/azureblob.go | 11 ++++------- pkg/util/fs_util.go | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/pkg/buildcontext/azureblob.go b/pkg/buildcontext/azureblob.go index bb58bd4fa..6af468015 100644 --- a/pkg/buildcontext/azureblob.go +++ b/pkg/buildcontext/azureblob.go @@ -54,18 +54,15 @@ func (b *AzureBlob) UnpackTarFromBuildContext() (string, error) { return parts.Host, err } - //Create directory and file for downloading context file + // Create directory and target file for downloading the context file directory := constants.BuildContextDir tarPath := filepath.Join(directory, constants.ContextTar) - if err := os.MkdirAll(directory, 0750); err != nil { - return directory, err - } - file, err := os.Create(tarPath) + file, err := util.CreateTargetTarfile(tarPath) if err != nil { - return directory, err + return tarPath, err } - //Downloading contextfile from Azure Blob Storage + // Downloading contextfile from Azure Blob Storage p := azblob.NewPipeline(credential, azblob.PipelineOptions{}) blobURL := azblob.NewBlobURL(*u, p) ctx := context.Background() diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index c13d73548..7d212ee52 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -640,3 +640,17 @@ func setFilePermissions(path string, mode os.FileMode, uid, gid int) error { // Must chmod after chown because chown resets the file mode. return os.Chmod(path, mode) } + +// CreateTargetTarfile creates target tar file for downloading the context file. +// Make directory if directory does not exist +func CreateTargetTarfile(tarpath string) (*os.File, error) { + baseDir := filepath.Dir(tarpath) + if _, err := os.Lstat(baseDir); os.IsNotExist(err) { + logrus.Debugf("baseDir %s for file %s does not exist. Creating.", baseDir, tarpath) + if err := os.MkdirAll(baseDir, 0755); err != nil { + return nil, err + } + } + return os.Create(tarpath) + +} From aa881d59cb304b345b8dacbb382c5af2427a4c8c Mon Sep 17 00:00:00 2001 From: yangtaokm Date: Tue, 22 Oct 2019 17:10:08 +0800 Subject: [PATCH 65/66] fix gofmt --- pkg/util/fs_util.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index 7d212ee52..307ecfd3c 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -641,7 +641,7 @@ func setFilePermissions(path string, mode os.FileMode, uid, gid int) error { return os.Chmod(path, mode) } -// CreateTargetTarfile creates target tar file for downloading the context file. +// CreateTargetTarfile creates target tar file for downloading the context file. // Make directory if directory does not exist func CreateTargetTarfile(tarpath string) (*os.File, error) { baseDir := filepath.Dir(tarpath) From 8f7eb00433284dc3312d40f9e12a94ef4dcbc3b0 Mon Sep 17 00:00:00 2001 From: Mike Vanbuskirk Date: Tue, 22 Oct 2019 17:39:37 -0400 Subject: [PATCH 66/66] 828: revert context to workspace, clean up doc --- README.md | 4 ++-- run_in_docker.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ec2a6de46..21d6e17f5 100644 --- a/README.md +++ b/README.md @@ -255,8 +255,8 @@ We can run the kaniko executor image locally in a Docker daemon to build and pus ./run_in_docker.sh ``` -**NOTE**: When running in Docker, Kaniko expects the absolute path to a -local build context, and a Dockerfile path _inside_ the container. +_NOTE: `run_in_docker.sh` expects a path to a +Dockerfile relative to the absolute path of the build context._ An example run, specifying the Dockerfile in the container directory `/workspace`, the build context in the local directory `/home/user/kaniko-project`, and a Google Container Registry diff --git a/run_in_docker.sh b/run_in_docker.sh index 36496768e..ba95243bd 100755 --- a/run_in_docker.sh +++ b/run_in_docker.sh @@ -38,6 +38,6 @@ docker run \ -v "$HOME"/.config/gcloud:/root/.config/gcloud \ -v "$context":/workspace \ gcr.io/kaniko-project/executor:latest \ - --dockerfile "${dockerfile}" --destination "${destination}" --context "${context}" \ + --dockerfile "${dockerfile}" --destination "${destination}" --context dir:///workspace/ \ --cache="${cache}"