From 728deb179189bbb1b47171c754a554f297715302 Mon Sep 17 00:00:00 2001 From: Marco Cavenati Date: Thu, 1 Oct 2026 10:16:55 +0200 Subject: [PATCH] crypto: Add BitLocker Clear Key detection and passwordless open Pre-provisioned and suspended BitLocker devices contain an on-disk Clear Key protector. In cryptsetup 2.8+, passing a NULL passphrase allows extracting the VMK using this Clear Key. - Extend BDCryptoBITLKInfo with has_clearkey field - In bd_crypto_bitlk_info(), probe for clear key presence - In bd_crypto_bitlk_open_flags(), allow NULL context to trigger clear key activation - Add test cases in tests/crypto_test.py Assisted-by: Gemini Signed-off-by: Marco Cavenati --- src/lib/plugin_apis/crypto.api | 7 +++++-- src/plugins/crypto.c | 10 +++++++--- src/plugins/crypto.h | 2 ++ tests/bitlk-images.tar.gz | Bin 22617 -> 253413 bytes tests/crypto_test.py | 30 ++++++++++++++++++++++++++++++ 5 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/lib/plugin_apis/crypto.api b/src/lib/plugin_apis/crypto.api index d790894c9..1150a617a 100644 --- a/src/lib/plugin_apis/crypto.api +++ b/src/lib/plugin_apis/crypto.api @@ -489,6 +489,7 @@ GType bd_crypto_bitlk_info_get_type(); * @uuid: UUID of the BITLK device * @backing_device: name of the underlying block device * @sector_size: size (in bytes) of encryption sector + * @has_clearkey: whether the device has a valid clear key protector */ typedef struct BDCryptoBITLKInfo { gchar *cipher; @@ -496,6 +497,7 @@ typedef struct BDCryptoBITLKInfo { gchar *uuid; gchar *backing_device; guint32 sector_size; + gboolean has_clearkey; } BDCryptoBITLKInfo; /** @@ -532,6 +534,7 @@ BDCryptoBITLKInfo* bd_crypto_bitlk_info_copy (BDCryptoBITLKInfo *info) { new_info->uuid = g_strdup (info->uuid); new_info->backing_device = g_strdup (info->backing_device); new_info->sector_size = info->sector_size; + new_info->has_clearkey = info->has_clearkey; return new_info; } @@ -1381,7 +1384,7 @@ gboolean bd_crypto_escrow_device (const gchar *device, const gchar *passphrase, * bd_crypto_bitlk_open: * @device: the device to open * @name: name for the BITLK device - * @context: key slot context (passphrase/keyfile/token...) for this BITLK device + * @context: (nullable): key slot context (passphrase/keyfile/token...) for this BITLK device or %NULL for clear key * @read_only: whether to open as read-only or not (meaning read-write) * @error: (out) (optional): place to store error (if any) * @@ -1397,7 +1400,7 @@ gboolean bd_crypto_bitlk_open (const gchar *device, const gchar *name, BDCryptoK * bd_crypto_bitlk_open_flags: * @device: the device to open * @name: name for the BITLK device - * @context: key slot context (passphrase/keyfile/token...) for this BITLK device + * @context: (nullable): key slot context (passphrase/keyfile/token...) for this BITLK device or %NULL for clear key * @flags: activation flags for the BITLK device * @error: (out) (optional): place to store error (if any) * diff --git a/src/plugins/crypto.c b/src/plugins/crypto.c index e801e30a3..dc54cc27a 100644 --- a/src/plugins/crypto.c +++ b/src/plugins/crypto.c @@ -254,6 +254,7 @@ BDCryptoBITLKInfo* bd_crypto_bitlk_info_copy (BDCryptoBITLKInfo *info) { new_info->uuid = g_strdup (info->uuid); new_info->backing_device = g_strdup (info->backing_device); new_info->sector_size = info->sector_size; + new_info->has_clearkey = info->has_clearkey; return new_info; } @@ -2730,6 +2731,7 @@ BDCryptoBITLKInfo* bd_crypto_bitlk_info (const gchar *device, GError **error) { info->backing_device = g_strdup (crypt_get_device_name (cd)); ret = crypt_get_sector_size (cd); info->sector_size = ret > 0 ? ret : 0; + info->has_clearkey = (crypt_activate_by_passphrase (cd, NULL, CRYPT_ANY_SLOT, NULL, 0, 0) >= 0); crypt_free (cd); @@ -3638,7 +3640,7 @@ gboolean bd_crypto_escrow_device (const gchar *device, const gchar *passphrase, * bd_crypto_bitlk_open_flags: * @device: the device to open * @name: name for the BITLK device - * @context: key slot context (passphrase/keyfile/token...) for this BITLK device + * @context: (nullable): key slot context (passphrase/keyfile/token...) for this BITLK device or %NULL for clear key * @flags: activation flags for the BITLK device * @error: (out) (optional): place to store error (if any) * @@ -3689,7 +3691,9 @@ gboolean bd_crypto_bitlk_open_flags (const gchar *device, const gchar *name, BDC if (flags & BD_CRYPTO_OPEN_READONLY) crypt_flags |= CRYPT_ACTIVATE_READONLY; - if (context->type == BD_CRYPTO_KEYSLOT_CONTEXT_TYPE_PASSPHRASE) { + if (!context) { + ret = crypt_activate_by_passphrase (cd, name, CRYPT_ANY_SLOT, NULL, 0, crypt_flags); + } else if (context->type == BD_CRYPTO_KEYSLOT_CONTEXT_TYPE_PASSPHRASE) { ret = crypt_activate_by_passphrase (cd, name, CRYPT_ANY_SLOT, (const char *) context->u.passphrase.pass_data, context->u.passphrase.data_len, @@ -3739,7 +3743,7 @@ gboolean bd_crypto_bitlk_open_flags (const gchar *device, const gchar *name, BDC * bd_crypto_bitlk_open: * @device: the device to open * @name: name for the BITLK device - * @context: key slot context (passphrase/keyfile/token...) for this BITLK device + * @context: (nullable): key slot context (passphrase/keyfile/token...) for this BITLK device or %NULL for clear key * @read_only: whether to open as read-only or not (meaning read-write) * @error: (out) (optional): place to store error (if any) * diff --git a/src/plugins/crypto.h b/src/plugins/crypto.h index 892866a1b..3ff42d043 100644 --- a/src/plugins/crypto.h +++ b/src/plugins/crypto.h @@ -214,6 +214,7 @@ BDCryptoLUKSInfo* bd_crypto_luks_info_copy (BDCryptoLUKSInfo *info); * @uuid: UUID of the BITLK device * @backing_device: name of the underlying block device * @sector_size: size (in bytes) of encryption sector + * @has_clearkey: whether the device has a valid clear key protector */ typedef struct BDCryptoBITLKInfo { gchar *cipher; @@ -221,6 +222,7 @@ typedef struct BDCryptoBITLKInfo { gchar *uuid; gchar *backing_device; guint32 sector_size; + gboolean has_clearkey; } BDCryptoBITLKInfo; void bd_crypto_bitlk_info_free (BDCryptoBITLKInfo *info); diff --git a/tests/bitlk-images.tar.gz b/tests/bitlk-images.tar.gz index d0ecbb45905fb232a63125ff2a3faa314ca606ff..0f19b56ad4b98d2f01886129129001a95f268079 100644 GIT binary patch literal 253413 zcmeF)5z6{XQz&zmQFMp5pS1 zSx4)T;t_2zUGXy|&BLcD6q@39**`pe`t(`J6;`s_tIRzsp=h_EAu@93129AAUMNOH#3xPf?AG+qHi z05sb@XZ;;yp!C^5BjIZV76e><^D2RLiRsm6W?b#A=n7#$L-9QtBnnXdgE9T69Sywb z{7HcUvE?sPQ)4uud0W0ispoM ze2W%Xd$guXpuWguXlNVayu8)2TSl_ZBuo9cyR0fp@GdI5g<7{fI3pxuv=NKVJ|1oM z<1W_wn}54cwkA%t>>UvkCsxkZwmeM=&8BBE@Z*J(6P^$V&}2Vew9<{E(R(T7hJqN)^-s(G8X?H_ozEJY0PPl!UB13mx9Eh z{o0n|vA610e%C;yeY!+UrIwRTvA3BaKyRJOuN57S%2CYTT^xo#*Y)!#) zFzL=isS4MR9Vq4P;ra)TZ`IIBB*wF*6Jo2>y@W|!9pf>*E7LGX$98Ig&Hro^v=?Ul z4G))@h~_#YTkwl8P16Z+cKiB~U2EyBlucJ9vid_Vuaa{3-rvQlIAHTaoY?qwRTY@y zxrU@+ixiMxYv2h2snDujBENpn%j%vBg&;mHFR~0xy3bhGeHo)Q!MTg2#xfxy$Lyb( zoD}x#+k!5k9UelM|7YM_p&lG6m*yD{ z%v>;Wb+5LB0J8)l)&VH88h$($wxL*3kzZzK2^e zb8_N1SjUipLx+-qQeG~eap}rpldJLcdJbA35a>9%d)UO%&8p|X?fm<)u%X9T&V%xC z>|C(;%0R=zpLV(N@ZCu^GJX2zJe9QM{Ht5}m1jjILn2ed2JcFFx=O$VGqVY7L(vGo z*pueEoqPci=#8?57C!OKz4Z4ZZe4O=T7(Q|1_keRo$sh3C5r81*BWyDS+X|A z)PP6JxCqNmhD$~#^1IdXG2=C>0qC@iXyX6};k@KwY2I_g7|{6lzcU47J%Y_*WXoF5 zt#zy~IPN*(hRtP};+sg2Yfydu@j~U5YyWCqu=IHfs6tg^<~pgZWyRGsJeVau#Ar_i zJ7#{7S_Gb1q=ty+Sz8y7ohHHa}_E0K2PemaPqFpMhqg2)!@q_kgZfigE$S`CvJ zeI35kheq}y_NrEYklxv4?Ir^|$OH#yIi*~LpCuvgB`gS3j zUVS-OJN9A9#9{l>wTVpZ71pD8s>5|tXt($=AYLmVb8&~199aYso$>wC6kAbKpCZ~B zwyi)dHf!ssfKYKkO<(J*vWpo2WTym6%QR1(z#yd0{r$m+ z%H^!%zcmjuz>1#If#>H|ytzTYZMro=u5lrjT4gD)ZHKXNAusxkBl^UhR4EHkm)+|S z7)zgOA~W9#Q=r;m^ADSSx8nhkP#(S7WI?AI4ZKeB?&I8@jA{lkiV+zFD~lX8zH>SF zo5R6ymfX!jobk_rNrSs=!l;u}T{-C5Lvm{07_JPHE?-2`;V-!qB?I5xI}T6C$v1QQ zhiwJtUaON2Yk7BipwYb0UmCru)k0gueT@GmY zZ^S}xUTa%?yp5K-k9$t1RFj7@2^d&MZO{OqnM?h)1-|+4d7dx7BQ!#6q8;3Gp{mlI z?>>OSd-2ltm*FsxWr+3SRys2}t)xP(#E|2OSS}FsyXh@X@x%B1V_5qHzp^9jaUS}) zwAgxONp~La*vW6};N=XlZXDhMKXQi2WMqaKw7mG#`p}^x=tyR2FXLt8V$LS>Avg9~ zmiI%Ag<)XblxI|iRK=CQq8ieL8W;Lb3AY`XXrSyQ)?sxmwNQj(MP9)P&zL}~OzsXM zb02^2JV{?7aoz;Hd7aN+6wWBDtl$s^$fnHc*xya&-l;w|J#}W)1)IKiE;9O~0y$l4 z0N6$j&LBY4zEt1+SVdfa`yVBGokj0TS$8V1oQbJo@##XksLi9pFLGJ6omh)Vl}H!_ z+&Dx2B`CAN8lz5&%Pa$l$%+=UOrBg8P3%|Ly9ymG8G=_}k0u2jTLfx4Vbm)?j*^{z z@4f2~jkFn4Tb7*X^kk!jx71rEmk*mNTX(TDJfl>UhTIqjv*pv}33nwHj*{%SZ<8oi zSg5P_KO+S(q~z&^7u10}8Q;$jT2?vQ9MlD>xU+O8jnznzG>34WGXHCy*Slo(D{{N4 zEqiIE$G$%ahD_A5K?p!?t8?rZ1kiRkzNR0L`o$ z(Ca%s*aI1@{iV8cwLGL7F>0emKK3b{aHK2c1{zZqoMhCmcBOOOCeLbFf_#wfJ^bwJ zV-GOvjtOKffw^qVSIJDs5)uHTW{dlZE#3>wAol(#QSBa3v^|cd*Z6TXE!3N2BvYpZ1qp$egQpwk9)^z;zq? zb;4R}@TY3dR!=kks_>;B=8Xe!<2*e#KmU{4vK3pHl$ny8+>R;1 z{h|nI_F5(xyWOcY@@4mB=#&y1>YeE`QbuMuv5w_-XS4Zf_kEOCee59Qd%3w!4_D&8 zJqJg!D_zF|p7+I`$y2~~pexF^{OsOvhNMBj;&cO@?iFxCdIS`jzM{9bKtb&cP^@~! zV6y6BR2}CYGqosM?aF6qsDG9*8uukAE70IKuPPE%>+(K|32Yq)I`(R7w2KRx<)GqFc zrb%o69ZZD<96=5-Z}Mux^av~Yj1p14-sz1&Rti^=Nq2lX^lkiC|9$&boN8v#Wct1!Z=~9w(LG8v*`Y;iCshDn{Nv*4 zhbX5ux)F7O=Av$P3wD}gzl%kA#6}T0J|fLT01C6-9rNAUOJpl$E>)9#1_sLuOQiWExUzUPC?Fd`5?N!x|LU?CB8Xf*>Keru8uys%plK;pR&N-4y_d?eD zH|?QPyibSetm*+yLBv2HP=C zvGSg?iv4X_dQQ7ZE@2OZ>RcyB=lrntfStfAw9U7?jEzj?VIxn+d*KXXR{`s5$vzAX z?UF5JHdHJF4)2~ri!C6dXpe;RfPGJv@O0;&(&JPd${#7oTzVoU;O#7vPH_Q(QKWfq zohEBn#L-u)9)+jt!Z4NbXcp+3)_`H34)Wm7GF4pNcsZF3E49vae4S@Wh)W{ZK1L1S z_z@BsD{1e)NIq-i)>Ud+D9r(0at8c)#-5yeXerS8f%<8?n%%tm?;c1qvw=jZE(gJJ z3M{M`G!oSXQu`LmgmFIts%<wGmC zRVjOG{{0&)wz#++r17`T+-YxqOAN6o!exG~)eku6)RD2Hn2^0(EHm<60Iv(zL470< zU4zvT%6D)vE`?g^AFEl8Qr3VFjC-oM{rqhfG+t0f*QX*mB9WAebZNhVqRsZqK~~;E z7-jqqfh}{aXBRiwdyiQ%m}X&PYNP9OZ|cp~qRs4Iv41+|?ugR{4#WE4EcccY<_*^n6eGTzDTk{sLP`ZkuHL+sH&YlC4ax2tN-HH)A|BT zNdE6AGM+J!f0tiAP%fnaHoSqXY}b~5X540R3fcYjKHLA+e})T@Jy@o2e_QN^tFuXH zh8{4jHB=rfo>COJ>7E*$r!Ax1n{D(_Mg*`2M09Ya7nX4sD&Z%-oW7r}UTPnp@ekK@ zl}goDX2*KglkmFE96JO-G0B+Ha+t)=y!4Ug?=xeR16LzWVP)i$Qoa>R>BvxN&P2R)u?}gz3SBPp?B?59?i_T=^x5|6lI{ij}8QO0`tJm98XCnRh-RSD_x%d zPPTBHq+rr!dzW>3;}^g-+vIf+hM)XYLL=$Y{ot-YH9hIbgo)qe8-Z#)$E)#m-EF*; z_tHogenWPf7C%USX`nwE&2w9`gj^SG#h`y$DJbms0{CiAekQyf78kS@7?n%lk_tH; z{85t2)%QkeO(f_yhoMDz#BRQ%bvS&ByqqfaU-nYAtj@SK*~Mz+#gxxa=#=x|A%~GP zOe0E@HEx6%<8rR;p`%)u68dz|S#?6!voR2gmifR?`{^*>#m$d_{jYmh)@k5W`=`Km zoF9Jrby0QKM*N02<+PFv%+zgb;Kcp`k6gLod409EXNRf2x9)G}_;6$YN~HtESALsy zvI1iMj(ZyAqHE}THY(dEiExhrFKV8A3e}aFRvmxk>om6CHXwnmk(Y_YnVXFRV zW|USNZ>rKLy9 zjMe+X#4dWmA#dFA$~xF5CW}AD!PWCU@<+0d;|xAfwz`Ce+6G1*k~50dEZBefxvfm% zl?5t)!&vT>oCZIyvTufj2{P0Y z>#Snr5iU|-oO~YB+i|67|5}Enr1Z#$5qT;@O7pNJ(f5mKb4V&!5BZb}-mg9U{@U6T z6Qyb%m!D&JH<0G8E zh9iv(MrS?o28&lHU<}>tc0^N`Fr(N(vz|C!yZ;(41@mNnM$4QvJfURxO31v^C{_YMpS}IdsVQ%OGGe;Kk#A#3lG_x zXjp#>?1suf$qq9wOpCFl2^~_E;?rj6y6fJHM%w$PyrK-B?N;i|&ssgfr6Cb1_V1Aj zOC?#GpkhIrjTI5?TWOcnx0R;R=A(->6gipab@bpZOXT6)T)TJmGS;5X$VJO@bWLg7 z_gOpe%9N&f(uM80#4RBsu>X&bW6qHpfsE=~U9ZBN-u3`sZg*Nf@uxrVWlia5umcEM zEZGvqR81JqtXuiOZP?^((2+%^WP6Mepe<|En1391EL07W4qCY8)6I2Ap$NW>y*E>q zI9?F*=}sc6@;4tE~XLd>C+TXt=WK^^rs)oA{GRU(y053g-vDHqn zUf;uo^mq5$UX`$3k0jApdB1s*eJf<#VUmAY-o4E{UNRohuKf>7n#R5J*)XXlrR|}E zHocPu!-w)y(g_D0AGxO!@Yo-%jim8~HHx+-f8+{QX#IcU`iD0|9xy`f3MOJWnmKMx zGsklhIK@(((wHtP%lmgqpCO9t5$~@S>1B%SfoFgfja-|wY8oz%i;P9Zk=cj0Wg&Aa zVK0_KvcJ@ssf8p$YZG@)#x3&&cvu;!0tBkhjuDO(^N}v4=Sm+|cvc#{dYvsQl%=_N z`kLF$omNDanziHlf9D_qhuKDVPr2(SFQ@vT(#x!EiD_qm!7|nX5buVmuv)yduEn5O zdHSpy>`gTm0bgEYU6pScEP@3x?a_q=&NQJS{7i-XJzU=1W=k7Z`F$L0e-XI;r>-== z<;?2l=U}a{+PsREFBdQPXk!DT;QVoCjUpK5W`ry+e&s!?F|T9oe@s;+lkIK&qC#&x zsOz4q7tPsQrJ0g>_(e~{UPHFHWb?2w6nf$kIqyCRA*j;N(I4kgzJ#DVmSzzAz4>Co>tV(h zkH|D4g|^!A)E!%_r^CNdr3XWg7#xo~4OWt-k6@np-?D>73RA`|9>%{8GhLU@Jo;<) z*}z9Z-u&a@@9Wd`Z~M2}-#wogu*Sh!Y;}U8Yp$6|Qve=xUkd4-5X@$+-ucb_)|C$x zaEtKmU(?7SC{(d+@@@WW2_X$nMY`f4DHU07OB=qtMlU6;qbf$h=sUxqi4PUf3b9bw z{o%FvDQyNvsnr)SeCcvwt!?1BI8w9P^P~EY;I+Gu&9iu8c;-F&3^2>jTNh!!+Yqd; z@n##k;v|2Q6t~hJPGZ{@?^3f89;97OwF3+Gs&Eb#73K2zGa|NQFTviQDr02xTqZ6v)L6QqIsOtGov2E$=;I<^@gSzt<@&aLB0~e)hxqg7qR4SW} z9HQRtLeA%ZSj;EJuEPQR$mdaOCK73Gi88SW0KD_uAJ#)}ees_@4Qi=^Rb1`D>q`2IrL;O)#S_lrFFS#7pM{fHCh@3V9V` z-s{*?tGv0#9May;kS8n`-?5;;qsQE^M=ym=GgD6LYAR;4A66aVE(~t_lD9Z1^6In2 zvEiJHQN<_n;XvM5vITG@MX!#)c}$qi$4YwLgRD+^MOPGn-l6NPnxofR@>KIfX~ji8 zSOI7wUJCk=ZlC;|3V|8%o1eh=|1|G5JPv1sM$OV1%6Nx%ZCpe}3p_ z;ch?A{|Z(z@Ar@t=^-%~Xq?%lI$;^shn2_Y2*9J!tPA{H!JB4P$|+3S{=Lkum|Y|} zQoUm;F8I9hEcg%`Etk(P{ef-A8|ao*c3IeIC@;$QZBO3kmg9=%N&C~_SzSsSpgdG{ z!cLo&nfKey)(l*y*omGD;Yz(u>f z`gw`omM}2t=9o3y(Wbo#bk@SKh1AH60DD}mOJp1dUdM0nPbWJ~3;K|zvuP-6(8fO4 zIJ&1cJi7qh6;>hxPmi*Jqy-fi=c{fN} zVP7W*cO$_?d!5?gHIHa|sb{J>L^iI5oAtw2Kh*UNE;MD8x|jwDaoF!V`()qC=9e!~ zgXIQK&Dro*#>(6s}t9W)K~ zT~9&~UP8>C+ev+P&{Ie}t1#x}7R4?oqu3ba+SZ1fVokF`-u`*?;J zn1}Fejgm(9WN!t+60iNe*vuN59R2e}8a_C@97T<#7kwkL4x{iN&zuA7*yWEBviTc< zW$`C)exco$%ok0`${xmZ<}X_A#be7&e=G!z$mCIWFWpQ|0JFT$qzcC4XT3>~`zE*K zDaKD&SItD*wKjOn#Xha1(9)T%Om#Z2i5(sU3m%vOTj@*6jKdtT%(IS1JOM3CNPH#Ev)|dvu`+y5b^r7-hc7ag$GLU z{9|!Z&z+pRf-^mBSG>Lh@&Na|R{c3657{K|GgU_?Yt-_TH-3tjXRee3)1z)0nIi;4 z5|pF&JpBExH95MMKBoD&=H1(pU!2-eEuBVp-toM;1qgGj;i;CUj;a(*53@;k(mWZ?Kk%n)s4V7f+wf;9IbRv-3_coU-M(5p~EAmOa7g>ZhuM*=75D1bX`=--H zBBzA#4cV)V(>L(c<*Dz9U#yxiWuZS~FU&m}i>LS4dmdz59Uv{M2{Z=`(s0(#t6x>g z%}6- zuz~-}Gr#!kEX&d>l6z6@?uNEy{54d436-jj2}=vUUVl}p{WsehZ)#_CH8$1k>3+dHb}M0HY6wvU7DAcs-qxLCXa;!BqV+C3|&vP0U* zYN&o&haz(Lncg>qGcOO~;CIFokjeN6YxN02D=MY*4S#65g&c0#4??@J65A%fFiDbp z(zVH%LnDS19qn>uOIj*8pi$bNn4G!e^GKDP)lL;y{*#V6-9#$DGd;yj(Jue=Q|=BJY>)7Najr zUmz$n^aE8#8H6SO%Jwj6*1(1T_N(q~14^r}db*r1{P{0f<-8m8306&uqLmG>GW7XE zi@uWdN-&3^6hCaF=N(|OioRc3*FVM6!Z7!&+)$t0H03{*%mh~?TGb(=`9j9Yrd$^Tk~MO(W-9^EqX(3jcwqPrB?}5l+e|WZ zwb`D_o-o)lL{GmYqCsB|A8>&0H6!b1Y%@n6d;VK}$C-JXS0(UZmzoox0W(ax$GPTO z9dQvgWC^Et-FyO>#O6O z3@`MOv!1eZO!;--B8`AqwGy{5zX~J2vOsh4hpJTDF+yWTS6qmVn-Y8N@Asog`_+wygZp#-rhXmjotIP3 zBgubB0$wx`Vc`;I(GW3WGZD*$S=|`Me4mi8xE^PiiCw;PqN*@MIj*Rx-l2*kr56*H zCzQ)>T3vc}{D;>tHKkPp5L-NKNXV!7o8QnQJuRdAl;;Q|&{qH~>45#T9UH;mbZ_NonOGAUAf7r^) zGos6)KB{GYc=AP(F0V=yU7ZkPsoT33V?L}pE2K$>(z-|;RAl8YJbd1xqj4M$@S9)4 z5AtgMHwWo2!BuB%_}+c3;Du7Hj01~orSG8|&-Mn_k&~Yv9-~BE*{2YHOR}u}5^^Kz zSCHxnE|3OrWi=fp1}0rl@yq#&wBDMAvjo33^{*}X&`4o|AVddC)XP*SVo3yu_(ulo|1&@HK|mL`TR>hT5=MeLZ?Wym39Q=?W1`dq?)v9oc(*G9CD z-s6yCGONyWBDN~axS7Y@dH(VbE?-~N=U|>qOS$7vkI|;_0YF0ei+`m{LB_A?gsrit z9Mww8{-D1u5R^^ua8M*w;Me(Km)+%K8xA4LbVwL!mddQlEobz}HOyq)aB4R#6$~t{ zj>!dAiGT6g`|~n(lG9xdzQ|J>FHqKkF-bgH;&^Uu`s%Sm&S@}Xl8fTa{>Y_Vua>v` zotf>8j_|AH$R~M`!GAvVdU`TlRaL(IR1Fh2k56Cna+Fd2`Lf; zu5DZb6Ua^~LrG5yP^2;x7c)WSi4<1-N|FdT1{;2NeHgyj+FI2iK=R42v*Y7rhx&-; z#O&;2<$pIXnn}`RcxM(+IR)hVx`o+|%tHy}sg(i1Nh->9ht)dkW+48n$dyL-V*D|0 zi_WFu`W{-cu1gNi{9fJ0GxCxNj@jQXBfq~aLL!aFC0ZOU_YImRk$+zUIXwaUt#M)) z53?%p&BLA?0Y(D?n&`*8-lKQpyR*lVyu<6~HSVDJm@k8V+!6Pc&v1g;o|Lc|k0!re z$Bse>Z}hVa|CUETK*%e!DMzs7ZlpG!opO-z)t0Ptrv*ZE>ND|LF}_d{7@t1(H;E>n zH!(U>d+I4DiYYu(Lnfcgl$5`fn8|h+Q5@XT$)Rg8$E!azi z2^{Q{ytCU{_$&Q9NMnmvy(vbp?JUN5xH39PAp~W=6ifB_hH1Yp&|AuEKG8X5^8H`S zuXXkRB)b-`_(UEVwF~%-qP((uJ#;c1O*hhg(1BCy^ev6 z{2dI!Tjs84^~u-SaArLK;nN_uw4Gq66eieqG7s16G2wl6SW(tqaT0QJ zQgQ!(UK}7+|F;W#C5Y(M&ITRNr=&A&sBNG(zdOfUHnFAH+kaCNV)Yi)cQT4zEK)}K zG4SGRT-c*cr8^JwQlmE|7O0P2I;vM3GcUV7LZY;*g!e%_enEp%P5O7VUB`lUu@w?P zUzV3s?AXyGcpQ0Us!VS&YFi~tty3GhhRW0!h##qUTtIL!>%}ak*@Qq&v*skRohUWet>6BNI5Q^kadaIA7p1GYFiNSZeIxC$u7LbMh_oZ-XQLs6+UjnT2G&cv6a_<_$vyo zE<|%}U;a3@HVsoVn5?`l^KeNUpZs=PhRnf)aJpp2YO%XY2`iZX_Ilo?mb49aq=wec zuT=pw?A~P6<@+w)aNqs{e`}7CA)uEse&;gsR5wd1m3Gu>G2V!|oz-uUIYrFcV^3=+ zM>`MB)_$h4E?hARqK(J&FIYj~pziolbaC-e_t8HF~D3Zyxk$b|7tvwpeX?%<#pkH2Z@Ll$uE$ZcZ!u)UiqMBt{R+5-(zOAt$dFpW zc1%$LC68$?l~?<9-enj_>O!2W*r{pp+oox57PWW4`g~hJh{WM;87ti?rt(XoM5IQ) zaXnj*2{@E5y`-}d;udXq-F~&K2RDN@OFU_E$drJ^Kumo{OnI~~9cj8i3^{ctX*Z8; z^~ov%4)?lk$I~|=@?@??^7-jGXM%2qvdvvH*$T@}*jYga*)Cf7=CuR^}lLV4JOuKZ@+M502p-9FEDV`wJ=U?tXv z<{Np8Xsdu+nr>%mS;znO?aB{VmEI<&j!kG@WvY#!%8NoW0{}8k9Bft=p4t`Fek9vo zLSo@9b>Xx*H1};dl#w^TgVT5F`k(CHnK(Ld;lUc!Al=4>q50(erOLJI3e4MWotq~5 zIm`g;+QL%VkYbeRyYQ{f+UWW*!aEDj;!v z*5MM5l83wb0YPleioRC9G@!{_~g68UI8hGSP1I{P-3<=HwyhQ_pJ)t_1J+9QRim z?a+vNI9JMLim2nou_3Zy;gN^cm9MD0e5-s#Y2*RRm67wuLvjKi^;#ysTgpJQoT>0tINu5spm8o`8DnxVW99QTuXZLb~YkWUl>HA z*D>Hq#?frtY^{^lduJg=+Wq&?#kwyQ55NRGwzJlY8T&o^+P3eTP3BMBlpXrd0Ubu9 zHTZA`uo)}EF2sSzQ0b=bZAllGDACJ%#2ebNDDnK}!z5#(evK;avW5D0`E;^iV?J%z zIL;#1V9649@(-q>Z>@`9@TKaTdzoYa#1Xmeq%eu)vr|3kb+%mtY45K7cuV(0h{v!w zV5WbXbORuBU=uTQ=;(duYkpMjJxn?m0$WDcTvo(^wV;uz6X`K@X2C<`;jegzI{+!6XFEH72=^i&=Y-4 zRV^Mk+P`9(uO8h{HxiTnX&XsyB3Zpz%8BuH;=pnh58nC~2=u}i)f(_cZ6xO*U&`#O zZ)T}{Rbb9%N7XdR#z7t-2wPVVZmgf{mK8z*Jh5nJb>42e$XkD?eqqz0CpEOv@}bd1 z;(WoLwq&hnYvZm=bqg!vh9vkwSX^gt{Yvu)GUV99Y@lFbdA)yZt-H!9t~!!k%P?}2!0n@lYGThH0ru2e|_ zQYzoiWXj;?cL&9`S%KrJJfqxS&L^i(Kte8%B63@W}bwNTxhBNc?JC;kql|R8$__2JM6R9MvL7&ezM&j?&*Q z)*g>ci|GA1b{^{RHm;3kp{__A3l^;L`^uGSOzNRyu0gl7kl+&fCOKxFk zwHHDJFB;FTe$Lf=ZXVq@+aM=7y6K8Qg{Y=nlf)nlcGCBlvOuV}4I{3Y(Cz(lTo>#!N1)YS6dphHGr8TV(1}07zmrgh z$%_<%zBIWe-d>cJ89u#QY126IRsp(qCq@uxk;rfXD^JDEjuqb+49Wu8Hkg(de;{3r zz{-*|T(_sT;TICVH&TZyI43#SpinAVx?QP9y65$qkd{fLj4k5$QAYp+mXB=&dft&N z4T5jJ@Jz|Q8Q!Dc(9IKenMaa$p?yQ@({K_{sOgkK;{(-PyallH*A{2X0C%8=1MKTt z!XW{Rlg}@uxp?Khe}WMat|Cl_?Ms=+n(8|)Lo|gX)+Nt9w!i7gd8+5gQ0aUqwSMP*tc0;@vVg-CheAF#$&w)R ztG8^hI14(S*jBNEi)`o6JJ|pSst#leKX@5@1J8aD7Rah5=5@2lH#j4SFyuJ-xr`Jb z0Ji%B0Is0Jp)i1z$qUWHwX>I-pNz<1(uJPuf1Z5O7W&4F?W)8M8t zC=agDwy+cQ4Txue=jWc~tNAeqy&^1#>=L%yg0gJgHm?02#o)T6N{vfrc`KWsns(Yz z>H_kE>_BIK+@o?jhH(#&!HC_bkkLGEpC%l!g|E^nI>^i0LNOA($ir>0+Ne?Fh2)S{YIQ=*ik@BP zD&?}j{j|c!6v8zxvfOkj1&X0;?m3V#fn;FBipL6PuX;?}>w7*h;29bFL zF*=&TCio^99+8o*2mCfn+6VxsX1{Sm+75@B=FopB>|qU~3z#w^k0PMn^D zj^}#ABM~aE(Rb|XM~k~NfDNJ6gY)}n zAn%%A3Xhs%%>n12sxxkJ%>ht+n6Rsw{$r!;z*JD_JMucmbj``nZbUioQ(%p0W|>1) z--B9^UsVXYuba$>(Ajx;V56`yx1NSCI@M4xx%ut03TEbibd+5+q<`JxQWNB{`MxrM z*W;Se9dgjBMRt-a+2ATyijAamR@BD?g$<~o6_mc%cq2-rc$lTMz%IzB9s=o!mCrD95B-INJpU9qL{2tkUcc>zCu0KTu|AtqyK3K(N$=YX zWBuHkd4zoado%%d8|G-l?1MT)x5pU&$=*UqW_!=BKT-%mOjUb#dvLx{R*Ps3R#~u3 zhN@(p8T7b--@NH%Qg(7pASi#XZA;8t5Lu%YP}`O$+NO_LaTuPD$S({L5jBrf7s5-< z6}VipveO17dX23_3+w@YgZSVIB%fT=9j420m9^sB5mFA$1%rGbo>eZy;XUdtDTF9t z@AdFM&9ID0Va?1{i;c{1lzFqn#c=ITT zEMjGEWgD70base6Uz5K+NoPMio>z!>cJ?Sb0F&9MkynXqS`A~vLTgN8g4+pU6T>`K zlJp|eah3`-l0mny`TLWUHe#Kn3%CJ)R$_UK4S+cJuFzcxc^!pP2`KD z4C*`0+Mbiaji@G0qt~YtL?z}7i$CNkA@KO3bD6Vz4Ni}v0Sh)azqV&IMyLUo&ilzl zN#Q9~YaTw!4(t+y7oJMP{Ey*YHRrd@F=~TB43)Qe27xlix(A5OKaT(pOYnvFf!w!peeXq?XbWitv^>N+fSR$)K~ z+HPKEZS4L#BrWWNjVQ^)>>1kZph7p1AcnZ5i^j21`9>tRLN z*ClqJm9(aRm2*FPVVxq&!5#JXEa}aNa@6nQV_ANRj|EAxDq#sRBR4$Tn2Q{^Xd&;% zn?RZ(#de_(6Moj4*{vD-XLtwVYj;v-! zbngFQ@4lj%+WNimKYQD@1rcc?0yaRpAU!~~BB0VlI-w}NcL)$dw$fCZ(mT>i=p~^e zA|SmJAQb5(K!A`05|X^nId^A__wIjlp7+0Q));fnvBsLe&lqc7to5C1sbkq{kUZ9q*>SG<&GbE3&TP)rq|a9BG$+K?8&|nrv$v~NhL$=h%1Ip} zG3|%n3pe*{a$rf^cTi3};d`gwN;v#fjaCUW>wOs#@U@^RI53IQq{K4LVzyqN3O?oa6U<)$T#sj}wjR54>eq z0zTL)3({*UEPJZQK`11OD=N9_@xWJ!9r_|U91gdOAgQmeHW&{`c-;vp%7gyGu%Xk9 zsJ<=vDts`*XV!e8CmW|;N9F&Tr~@tdUtBPuI;Lw!y>ENH_ajjtJTv|MkG|}-G*-l? zo{!PKS}JDcLVS1Gyv+y`N3JQ7S&Vt%v(Mt(I%uW5MW15>C+ta}kKfG!T4LUl0YQEw zm)0BJ^>|Tzx?^TzgU8FA#kN0}Eka4RT0oJSDsOn3s72pGHD`bBHkLE*Et2TEpGj^3 zN_E<;*ut_d_uq}QeU%M0mJDY__=lhmuIC1o?>{i!>l1$L)c^9b?+8yw+p5K+c^&KZ zCu`5dqp~3iOZPnK*Gg@&-!Y{zT$-A=A`j;)x_~Z8ookP-OiXkxQg`$PqV+VxN%SFq!{n499S{Q ze`;ao)z#LD!ha!@P<+k6oMwpSKGRm=&P{edeN(uEhM$$ zLhNw{)5a%pzYx~l=;0W>mjl#d2FcbQ9k^fj06xN-9l)0G@T)Q{E?{~^aw2$Qsk~py z1ohkJ`@a`rglcp-oqusapO25z!Mj`kU`lz4JLUWXWYN;+3SAc75W;?3FM>6lNrU0Z zC#~2ovh`s!Z7KoUVG)GT*VPztivbM;)tg}DeRFHVHTWB!`<+v4PM)IO6E zQfP+p`2MttWv+Oemka77slq0)HGKT1U+-XsAF=;Z_h^+){6(Yp&7@VDqOKo_#%=m~ zmz^*rw-(YofADjwhA&7=DN6Q^X}03B;Z}CU=<$;-d-E};+nxv2)GZE zR@)KCs5rY+oXknOjK1U#>W>qVtApz)Q-cw;4KK=&IM2(P3;bDD1>}ZCllDjKGd$=X zh$?bW;I5fy$y#ULEjhglDaJ+kEVD3X!QCPGliiQbtv0Rd1F?(SSeK}W*aW!SB8sgt zv&kQw`+oPpq$5%REqcMy=%Z-;9c(SC6(uATNKO9XbaetD98FtpR{32Px)hl4Ncn10 z@hYKf(~33ui4gI%ugn?y{?tYzc{5|FmsMQ{%;Vr=HP12XB{?v0qX9*!})rOfpFrk^NZNaX4%(VG(_0ppGLL z$ir&YAnyv2bhvd79y%x=2WEUtXC$g)p@w!y#_3-k`)MDPx*oQ8W$NDPD^8Ze}D9uqP=%0q`I~{7RngDlOcq(!gwfL2>W<06As z&gv|it4i7E0ehf1T}Gv5tcem8LFV4^gC$IY2(W&Y%($XMe#^LD2%VmqCARp?dNzOW zI>-&9aAsfSOU5$c=^PJr($U5}+u=lei+fgIKl$@^WoZ00ltsl={f@EFs12D@zm}nI zVJofN=Ss*`Zt~99S%cp}v7v8k!*P0dc5ylB`_g;xW7*E6}rX@wFs{R4L(Zdp8U zr`Vy7$Ct#R!|%cU##Z$LExNlyJOb6Ij^MYgugj0_g=>JZ-HXM0ab^;YZ9YN!{Q05r zE(?+N#%X;Rxl0#&ip=0sLE^~V9in5hwGG*KVI9joRFv8@6`1Z(UYnVI+x0c)!2|b+ zu?WYd(dZI&xnfF+?${CnZ2D730AM`eL?>| zmw~O6tpxeLhLTg9g&;Nw)C7Y~5x>aif+SyZK#8-dLAu1X?4WVa)Q|by^z-W_t=|_5 z`$M1goB8G2ei+XfBK**5FDShRsXv|EtMluXkhT~ZU@L<@tz8Q<$c80P_^D<`q z4qF?owqEBR;%oUpaoIO&TpXQ-C0GZ@Dn}HnU^5S@to`EnB7%}KGnHm6En!C`+BwH{ zEHQ*erB}Z;zkY9lUluRELU<|*gC<|yYbyOsp{F09*kctQ3|cX%wAHLuR|lDsDkTmT zEg>k23T89E!Fx~Eu$x80$BSP_$ilg)!z!#-ZRgKM4+lZlZHRuuOM|8dO)%|xB|mGTBtI9i8aXm zp&t3VA24rt6!}76#Tm>}tcz3{uqxk|kQCIAFNL{oG%OjrB{g&C`|2CH_0Nh6JMCuo zjHm|Lt;$5%9}uk2-yO9>*eMJ2%D35)i6};5AXAQ5(Ko>ceV5NVy#XVN*f$TJis<)o ze7)zly(D&LIOEm%s#@>5L(*y4KbC*b#2$2)1%|_Sh?4#V6X>as6 zS^0H^3kSE=1NMTkDrwBPBcj9j0Cey?`0G^4??uO?n*Ntkp#^2JD+JkGeR_AFU7*QTA5la^tVUlTkY#yoPq zI6Bpj-s=fQm&i*t@mJg%Ig1YS;rMh}E5XFa$>QL~rXn<{))NYCx<5M|!E|p`iEX|c zdo9S2BYW~jwz-63waMSb_|DLHzUx5`F8#C`?r(X>P$#xj2M()&m}{B?;tKi8oh?{h^#@zBuG`XdFIq$U^z>iRkH3S%)t zt+duy`PbE4oR=7N7aNlk?Y}4HcPrD8^{eTGqle%+pNuWiZI=H1tHgfTq>`T8N0(Sb z^P7!EH6GjF4ZRbpkn^ar)F~qgj=ERnQwxDlo%|{_eiYn_%C^Rxdyg4L+4l_ANpS1U zyB{e@@1WsE}zi?@r?)&>Ilg&Hmj=r*S|=bF582+IFtt^aIv@tu#zb!`!Oo7>bk zh-Ycke+Y3Rx7mwl_7S7G9Jt21!n`-938%YGDU-fGEt%*7_iQEYkA-@tE+-YH8AX7K zogErGRs}96@Fz1(k6&8aY^X4G2>x#Tw&(9{HIXa+cdqe%k+<_4%--$g zgtHafGp?CFA#^#t_cQF+oS(^tY#yL+wlZ z)KR{;MYE|>C&M>aY^un1^2~qn)|4zAIuNhKB$ZNj-f1t`>(`T1%=t_ckDSma>HX!A z4k&~|*0Ilz_?$X$TuXi}%3=rew6LA2J@i3#i%v{4ou(IAieB;K>f(<1bn~UEuRF=$ zRIG-6#&16DH_=e$`bi=*i*}4QSvSo7;-@_~4d1iQS^i)sH@CQ^%xg&i!CGfi<#1P` zl~W?urg~G>vo2d~nKX2s(PI)Z7GLju=vlw&(^b@ixF)V}+w#qXe@&bFuE+MvKaCcY z(Nfb}duBx1#*YTU7Q_3puaE{0>Fw0YGnmcimESEInKI+85RII~SZYl$`Lu)H8-pm! zN<~*%jC(#aq=k~Lg@lzs&x~E^weM_~#j9M2VFMO&5#=vF-55!uz3#^z&HY2Gy~ynb z#_Sv8$M$i2@czBwsIcQ(sv@(3pBBOyNjuO1qmX`i2>UuUFk)wqm8Qp{^T0U8Le4A| zyP#~L-T3?g9$GTORNMvGnV>&}OU(wn`R47XQ$7K1IGEam#}T*MRo3iL6*^0V!q>f- zlAPi%7PsZ^`b^s=Zg+)ijGo3WB^6xX+?mX0Fkv+Gk0<+Avq7T3$*KD7ZhJISLORwt2 zFm)u!se3p#*drJNJ2pa}ls5&HloW#C>Vc|FT>}jl&DdoH#B`&~k&D@ynR(pq-k3Z@3OSY&)Lb{@>HGfMaDzqnA-FfCGE0w7Am4&+g<>>Zj{T#? zxu!HyP~jCZ>eW^@OB(3D`!*A~k_=LRvBj>2V82teDG=hyXw>M?&ccmXJeiKdU%w?L ztq%R>P?0nK*AUWpYKkv)Ad^dFm$(aiU@u|l806d>ayI+LknFcvw!l6wQ(5D;vsC$W zHV{qQXPUmF9Gnwd2+=L|oWp*N6)Fqr? zKQvQJPcJo%Y~SSyeEW@PBU00W*MZ>Ynhj06i~s#5r>vCBPUlamFA7xIJ9BhUu_Kee zJdWeymZH1RzL=7Y7nU-7-u0r&2vpoOS#uw4v8EUw$A)iRZjK(hI zo57ru#r#1bstr?VJ3i|bB@HT8IhIH~xTzI0{U!BKU1<}VI7Lm%hS4ue$TdlOj3SW z*4Z&*$Wo3|YH&-sN*rc1=j2$LKC-IW-$Hd<$_8PXV6{&UoY5X*YA}&R{fD|Ea5+I)K2puo%cA0=LAC-&4q;Y zch@gvE?l7m7oSWz*e5HIzaX!HiPZ1Ek@R=9UQ+1i*6c@U6_?qKVhh><=EKBTRClo= zgaaqY9-VAyk~WAgFPC&T5FAdQJ(WpcGg!|*w1jQ z>2Psvf}Is9`gAp&xWDmFV_p=>i(e09g^<#j3}784P0k+TVvkugIpT2cvZXbqckGFh z_w#G|-A?oWt`cl-uN1a?B6~r8OH(Fi{7Rkt4VFp{QGS0roOnZDvcq{xn*}ueCel5!7#!iUY9lNL zZZnTen;s8%Vr8FZRl7l=8oVQe5YkX4!$$J6*AOs{+IND#bggIVJS`2uIE^gre5aSt z->t8Brwk$*`Ktaxm~_}?k1RE6J}`Y&ws#L{)RybvKi@yWB*k$0i^!>DIKQn--Ho-) zK{G$EGWY$YhY{)^E_A-7C!MV1V%%S}q2M)` zlCCkwHk&rv9=Nzt$)OLQlJM_Tui2FVxsr@B*&cHPh|((Z%j=ZN)#l)HopjC9*n!*6 z43Zs_?T3haGNtXxtpa|1;mrK{?yk_1Mo;S(m2LC2qiQMKvIvtopI#zrpkuy9QEqX5 zg4jOMwi2)e-dtjRGVH!}yS(N!FWqYOU1uE2$fa&#Z$Xrd5)>Jm(KHm`Yfoxsx!T4p zc%|a2)?(1_Ua9U&Sqc~V?f81yg}J61wr9qKGgzV6@xcdVijo<6V$B;Kt2VOhV!7bs z;V#9FAmpl)A5_rhR2m#R`-pf3#?>o!y$55yt!-YM9THeS#Ox zu>jesZPP_r7`xjo!UA`;HCc2$#$TWCDK*FSA_H4y)Hh?1KCY<1(#|>p@et+(b zsK6C17wArql(vf3Kl-rhu%Y?ip19WYon1_JIRlupQoqSMoa@b-aJ#evP0@FwrA%Hb zJMW)$lYbm>3jeGKP{CI}f13Btav0Q4q9C7Du=x2x{dVi=Ldof?ncYm8{vZhGT91Io zt=pb85AMG`Xc=7DipWn%h7(@}Q<{)ji*qQ`g(}_w+aDJav{h zAc&)i);9VEpkaRHUh3OKtQj||r@>zv6YDtaEqvBK@<`xpB3(D({(T<2dk5ty_U*{Y zmX{#jzNtJl0ae{#=3Et#wfnZ|mBYyQT7sP68_IK@-3_ru`9_? z(sXe<%pF?`bK{9pMEp8eXv4}h-|eHoETmzKd@NZ~!L# z{`2mk_r03ZMe00MvjAOHve0)PM@ z00;mAfB+x>2mk_rz<<2JOfmUxPMQ3_es7}VYD->NqrZyP->aA8P=oN|4EHhwBffJ>Qp^^h4 zXD&5uX5wjZyuzjb2Qw5vNq_(#00;mAfWZG!f!~aY%8`S`J<2tw6qc1|&wRtb1onlu zUz}3&_cqtIA;TK{X2VX>|NSM>q6I1E?mWr{p(Ej9+@lJ4)9I>4Z)2x-$TTOv{LRbZ zm%}eS*&oCO4{X*9dO95!nQXBKMc#Y&_pRF(!*@r;=XsK#;n9!fkFP<)CP(Fbqxz#q z@A-b-hvc1X=en@ru#Wy&jv?+x)x1oamd!4m6qKe$@^zv9{n@H-iXqYu{mc!1YS>uo z{aMF5a`LF^p~u>%vUV8sxVaqeKbdli=!Qq1F7F&py%cq-vGy@@r*^pwK&;w={JXe( zieyh|S)a3O_LdEd)|-oZFLjt3$vtsE{D`qAvMo2SY1}SrJRQ)zllEmEHYK>uh&HBq zeU{yXsLe+)U9Uz4x8DXCNHwAMY^oLw)=EvkpuTg zI>-szUpg?IB7;DTM^+W}I1@mVqVVGB zp35r}+&jhoFdxmf!T#{H<^CwTF7b1=R$8EF;Mq@}j0k2o>Qrg3j-czU`mJBlExkM^ zYlB5uWIw06#&Wp%(K)q$?*k%F{N5ei$~*lucE;V`(FfaEz>Ool{VNf6rnp!FHyB(} zYdSnZ>!lw&r4$mTvvsV{M=h-x9wPE)K`7Iw<1-mWi&V{>zF1h3!Lw3E}k z*$EeNTe(PDpyASA*W6tzwrps_^;BtIALK%~X? z1S=6H5)E2=IN`KJ1(F(Xq z4!SY$)i@-jP}yq(wQkkJXVskNvOiPKK~=Yya2i|VBWOg52mk_r03ZMe00MvjAOHve0)PM@00;mAfB+x> z2mk{ASAp+2yA!Z4x`ucDbwI#sm>N8+!T#cyyD@hwDo-qqC=9a9u!pAgB}UY%X-n7E zfZTrMt$nTMb$SsaW-Y_3J#nq{<2mk_r03ZMe00MvjAOHve0)PM@00;mAfB+x>2>k0`2M9-uLjc|% z9#KE=m)E^}&Ch5&edS82Pd2^y$sbzG|Cjk z8JjmD>#L^*>zl_2VL!rteBgp^__ePSOzaz_gY-p@ue5c2d3^U8Q|L2)N6!7&{+4Iz zx9$W*fSx&TaW|{ksc+p-R3nS&ogI(Ld?va{x9CWN z#;(@$dTzMX1`4v6Rsrp3MpIB^?3pL=WanXWy-AIN z7@D?>TCb?GRBl<0R?yElqwA=R%#b{Vk=_;)tD#on$c(f)@N$p1zLZg=$-J-O{Mou- ztk#SDww;6{L=TcKua-do@hzg@q%(Lz3W7q(KKc~3Z#Db-sQ%?8$hC#|r5ab_d?PGF zT${U2Ko0kIqAtc^D68IWebNp$klq2_?lRW5X*lI^PFA6$Eml0)BreTUy35t-FmS}~ z7~yov6sFR#bHN#6)aZG*%|z61X=^I9v|s-*=((=OC=OE7EgDoxRti~()$WQ!(RLfQXS<%gHx((vwE^R!}MYp&La%!$Iz_kEikbQFh<; zt&)8io8;0(bE577;dgtYtk*f}KHX2d#N@`2e%0Kf-ztXx(nd5G?H6RdSUF!H1n~gN z+fR-OF6}Bc=_RZw)K&zASW9!admNmz`@KwXWZ;Q5u?^^Qkzr}U>iIbgjW$hm6j!38RFRI;|IGIVB<(w%UlpcSYjWxJ9?NQYfm2mk_r03ZMe{Qp|uw=VE!m;d+= z@&E+@0)PM@00;mAfB+x>2mk_r03ZMe00MvjAOHve0)PM@00;mAfB+x>2mk_r03ZMe z00RF*U?%k3AO97HxXZw(zy2R1Km!l}1ONd*01yBK00BS%5C8-K0YCr{00aO5KmZT` z1ONd*01yBK00BS%5C8-K0YCr{00jOM1>P}VKmT7@fPc=cxS#$f768l{5C8-K0YCr{ z00aO5KmZT`1ONd*01yBK00BS%5C8-K0YCr{00aO5KmZT`1ONd*01yBK{)a%gviyzz z$^!iB2;p}Ae~bVPKmZT`1ONd*01yBK00BS%5C8-K0YCr{00aO5KmZT`1ONd*01yBK z00BS%5C8-K0YCr{_)ipIC;k5Wzq0_p7!522|A`d9U6x=n*Ucd_9}pE7^+PILR&PJ2sB_I_D$hs=M+2!I11 z00;mAfB+!yzfRygqviHRf9EMFi%)qVicOyTME`EP}#SXE&Ux{Nl$yjLVx; z{LXxhe(3eftQVaYzNzM;7|aAZY?T2fw)V{Uc9*eh8<%@G-|eKIc??NB{jkP-1bXp> zVYKw}pks*n_QN&CJ9x+4Qo3fMNKUnRXRR75U8ClMp_Btf*Iq@IGC$0$tbyl-yBUA6 z^ywfk&cJ?VBpXIu@*WlkppwV#v9 z#e02l+5w){1Br;0ugiT)QLb{2raM47Z(x#jD9GvA(ZdfvMNJ>i?qbWrvb+cfV7>_45&-NZW=**itus9fKFFXPU^n0u%j zEv!+s-uF0w*2z?36Q{!BtksO&r0!;CwfxG@UP$jAc;a;UISyxBxHsWR>Xp~uuuuvT zdN(r^iaQf!6(G&zHAO}6vhO&Adz4z~P{@mksYn+(4O*XLn$m7ozqb_pj!&tbg!xWZ z7GG#4mFx7)Nz7H{c=Ip)Oto8Sb@y^Ojqf{!GHtU94NTT~T&-df#pM2o(RmVI%p+4{ zo40|PmV04Y<&0OsXs~-U+rJw4&-8-9cNhkwE2&oOqcep?O56!3ijIkCw8K%HO;itaqwraB|Sls zI{gw`tc76sO(&Aaigvk9%JwG}M|8oBEt~ThpQC(=#AK>Xhq*3$*qMVJ$vL4a#J^fp z0vGj@64uR=fA5euZG4hU5-4Z6*8JYK`)vg_HE%@nl7@`%M%#NS4tKU&i(idSva3rp z*L&I&E?8JEE(L~6gh$s|72P7O7)*&3%b|7U+`MoS2S`}PVp^q z!f7-c?Y(a-BBD+dk7hzAgcd-CSvAOTUQPKVxuH&a?6&mt)#&|SRMAxuY3E3&dy-@1 zy0)vd=ho1K*q={|MLi2&X2j!o!6jMuOwN9U;(|?hipc54oO9|!hXO~HPtrhH9}#sM zhe}?d$%|P8c&+KBI`y>FhtK=00=cagZycVieAmsTH-AO0pyR=FXjs#O!0pX<+}h%! zPK>@thPVk;BSQW{Ed5D|dCf9n!|ieIi?8# z_W8+avX%T{``^(^`5(fVX?|YFcV2QsJ9=IN8DmLDLm{&b?mN;oRsPI3J-#1=4Uqlz zYx#9>ro}Go;5L73XJAVvh9ODhlB?71Iqp&Pt%Lp zixpkFudrbKur9sOvn=ZOFfT!2c1V)9M}**$yhN~`N?_ad;)$ZANk11Pp{;|X@{Y1= z%Gu@VAtuoyl5e}>RjONN!iouQY+ZKHO|fpPPC=hLX%OP5)^56PjJ9arZ~zdtRDXtA69 z%!in}ufKAyN_<*WPRRUw(g$h}pRPe+a9q(uL@}POfQ#<15`#51!!{$kFS&o5uC$%? zP%8(>+D$D$~Y^djlA=clhwB4sMdbf zJ3K+9bW!2?@RjY1wV0-(4Pv!gM_8pnS>QWm`1a z3@W+xvM$FW$;ESX{JoxWJLEQEYmEl=KI4|MTUW8mDfZw%!{Z)pM#M0i)h%q%JcjGH zl|gFjFI6FxuypaaKMG%envT;Xe^dR%%=%yoq99?GBQ7RU5R!V&ec)@Ubw{(W5~Ido z$+BQKv0b;=frc4$&5(3Vo=d|J@u)n)iLExN@S2pEYEqCXqnQOtO7ZddG4zt%Z>1ag zNtKfeUFAtSCpJ+a4|0C<{{I`Y8mlApgQ&G_K`yW^9xsyg~CkW=<B!*xhW&{k%`XE@WX`9nkeP5w=l_Do@&VO5CkuBghY{-@5%HdZHo zwyvLoozgj7Chltu_DpEFyBr#4rRu3Ko~)8WBmeLrgz2D{hdZdL_+O5{k38_6DaX!pr9|jk@ zjzbXSggOCyJEs%d9zGL%*W@(6 ztH0smg=&%N0V|DHT6<&-c(jPd2w7JO`+xg zTvhfHDbQ)=pO}{p95@y?P}2ChjEC*sInwCP=X@d^TrcID(k-Hs=(Jd{{WTvcMYF`n z+m@Q2s_cuIme9NB7N`YH)t=p>IUWuh*H{Az$%h*QSPf^BmcY!Cv8x^nX&pYzPnv9s zD_||IMT1j8ZIsE5;r`j>MP?y(JEtZ=HCRu#l5GG6dz9g!3ZDjpk=*@hBNkCDz)2iScX9eqMz0m zypQA??w@4n71-7^t82oZ6ds?X(**b5kC?K`ZnAPB#7XKM4MU8|eP(s!Lh(V0 z_DiIl1$QN-)Do?ki=27aG_f+>WgHdiA>8q6eNl)PKooCvhSY%5v*NG5ElDq3;)4jieqjs_#1e+SL#VB48n9b>qQR&Q&?mi=*|f1~o&0qS-0 zUBj;F#+ksK_CK2z(O1cShBM;DI)-VZd%q4p$gz^I%{lpZJSr6*>EH|+q})Zz>13+F zzBli7YM#BAmE4(F`y_gT3)IS^8y z&Ah{?1M9A$*hzOvAnw>K%w| zvVX*sg~S;iTNGGd!WRc0$m7TCk=#S`Paf+ItolGQUvLuoqJ&)}n1)|_JGZy(-IQok zknlT=`cyn(CHYOebd-AkJc(zl0=g~UAs)`h9_;dVw}0JbpYrv$aqSC?apKi6hF@B^ zLc-5$4J7mKDT@z)P-Jtq?g)18+(osKH;a+U!ZsPt0Q#PZf*O=6IkD`REuya8}qqH2JM{VCa`R=!U!#0KhCWe?7AoZ|I)>fZP2BYAq#YDvL}65&W^=Xi3rH%7kok+r zMvG!1yb!|p-Wpw&?dnfTe^R-Qx8=F$zGL7*eD5u&o~Q|JgH)4R1S2lb3NN7^ zX=k4w-agVWiG$F1rp+kFgaYV!7fSHGlnMYRFxmne6GY%USrQ z&3y8tYeiG;x?y{WND%F>&h{x?6&Ia}D=aP-bwT%Eu2gbX@w%7abQf=Be-M84=wcYwLY$*?sC4mWKP~71+`2zJ$3UKl*sT` zocx&&u(O%9;W_ zQuRWH)?cmG4oo31G#K$?6#|zcbP?k9S@1rnm`UN#XB%7rylWJmjofCdEto8 zzL52N9m|_U-wLmq)gDdK%Bzjz3Y@NO=}2;J6U zLU;d#vs>D1Gv9byZB%1fiA>M$E}GFzuMC0;-F5!b_tNZwlaJip>es0Q4zP%Y^eSq6 zfF9kHJ=iezW|NC3CD1`51`@tvj?i-mT$v#b?9YaPXXD16*6Cy^uY}A`rMS1@=TN$- z1isrLWtg2Vy8b(N(UO$?pf&9=`vTKj!iPheBiRMq0Y`6Fz24;~FB-m`DEHs6y>mOx|dNg%a7r`2IA`89mlzD3z(@%@6w=G30_iuYdQ7|P$o z_kfZUsLNE@w7rk-8NkRcG!ZdK30QvRBR+6nLV~Ju1&k8%w#HMlEHZZPAw9-<#7Cga zP_{2MRfd`0V*)Dpcr=qtN7C zM&^C&sFK5zu*M9TiL)0HNK2~)Df@^&c#I4xP79x+tDF2KKuV5%y9qD3ITdL;GaqdG zmJF4$p)aW5NS)7fhdowE&=h2H?`#u_?0*iHX|b(HQV1H3O|&BoyVT@ycyO;fMWP6} zB=Fhx^PDgoc%wB~aIWU3z8t>n25m>V?e@x6Q3b;08$jxC^<%-Ll@V#8ld7u0FxMPOPeC4#gz**i0x;AuAvu9QhHBx6)btKzlP~#N0##6gC zD1&<%<5s*=DVF526lxJDESm)iJjQyc#g%8WZ7iist-9ry^IO&?=*=a+L|IRenPIo@ zG^L1YuIb^CNkLLL_?H9d65i6%tt&V1a(_8YvG`;#ssX#Nlq0;KYH+oPHj}>P$hdA{ zY5c-cV16z3$)CcLJc%{9?ib4Tx^N3c(uWi%rXyoq$#nitkN7n{na$y`Lcxea1cE}! z{HH|5rzoq=M9!T zExXETMfZ8sIr~qj6S6}B;<#K?@E}C6e{{|G^uFQMj-iedYN}dfeE0Bp`$z??xOf9+ zReIf1&wcU3^6~iXrWS1$_Dl?;*QrBrfeG2 zCwbn~e~Q*` zUK66wplIGWK6T`xGNNz4!pQzF24?Yy{0gyy-E}QID^0P_QL1Gm{U&sVo7K`HZjx)XXBq0`fz_>8%v#9&)O`kK7EC+m)G=68i zi16gvmRwt3)*V)CH$rk_D*pXp`URe*Jnzrnvtn|Fgc{pvv&VAJND%g7m-oEJU9gO0jy)?Jhc+v^E0BVu;H7OB!L^iz`e zj9}OgLP?i?#$p_(IdRjBD~(e8&n65{{nafjD<>-r@tRe-nI}6t+I5TUAdbp``D3bC zh3K5?GIh8r@6vTkvZ7BOf%|IMh@4H&DMi^G<-XK>)GHxIa@9O&rnQG4SKCEtd(nmLe4k{)M=ZsxPU4uZpj!ObUl*P=EG-I~&~vuY53;zYcbqG5f!BY2mc8%& zal65pBRv6hJQb5rhIgKmaq5=vLDN`wCM%iVr{s}LB$cc`Jf|J)&B`4c6S5<#8Z;sD z!P#jQ5V>m~4GZSO&M)oogxp%Ot9|4nJ~(5T?;QtLB~`%u$!j^`XrqwDcF$a$stjYH zTk@6rABP&cmXt{RzsI?@CP0JVLiKpwH_3OYQ*p>7M<| z&0S&Y+WIO6QgopOy1m{st;nlO96 zbLf<5Axi8)+>Oq?6+vo(7MibG=&RnA4u zm=PUBbvZQq4bokr1!hMsdIDF~Swu_kpi*E<@JjT7`modTzCetn%GkH-fAC{H+WZ47 z2a<_@`aExxg%6x)k{=`uvMw)Mk?WQkGf2OeUuDdZoApEX3yz0$7j^>3lvzO=RzXmj zocYoC<}kC<0Z2Rf(op54Nt44C`^s-uZ3L{mCFY8hJKSUW8iceK9fg)En3l>BgI{KK zpQkQJyveYg@FBnQZ+#sn)TAR=o`~#SlH(=8j%;!NIF}Z)-R3Q&otWCVa4`H^J;M9= znei@u`Iz7Gbv6iQ5L$Qt?q!#$D(JRPN~xd=rUh<2I(08*pt~d!t@~w-+@;K?P^E^H z{v<1~&9kjlSCC>K2a;`lHQUXnC=lZb_b-0m{fhsZ$(JMZ_dE=H`efeUbw$Pf$?e&q zgAM9kN0{<>Plv*uG~^(2lF#(XuF#wt?~R&goiDqL>bKirUj1gqvnrItHo7pOU-2S;l>hu*DvyYt*GcK*sEli-l+$JFIP?_cu}EhLS=9wB z|5(~_f)9SRA$_I{Hzs-NT)=gc4qFSmx9?ltjDLmN^ozW}O<8%>QWuC`>o7v$qW=1% zDZ3|wGW%GrTla9-QVdo&a|ny1rsj>0!r`hHP+F(o1swaf&XrI;(xiPd>oafZWEo*wOE+h!@$J9X2k6MgP#0o2{ePf9ME(Pf5Y z?>T&@&Lu`t$Md2JwKoz?4b`uiibyO zVFI@~=~hcjY4RVI`F_!1ZSLz{KXpcuuaqwL1d##U=RZwJ9Ok(Q3TMk)>Gqhq|A)9R z+ak!VcTGOc$T$3r+j&Z&~G5%aR;=(3PT#HZ((b7x^!>R7Z1g`2?;rRc@@YryJ1y}=Fm zoy|d2*@x%s_g?P3;hl(iaU8HlX=!anOJF5_(K`Ipx(l!|ZgUk}6ihIZ+rm*y8U(m!Du)b%bhD3Jv3UpZZb7%bJ;MMu z?vn-h)b_(6AdbgQ(I_P@Ui)dWslQLYgJoAA%Idq`dZOj15g=gQ@K=UNJ-<+g&&ZaZ z@<3D}rsT!1^TuGx<@>MdU*eKFFL1z zI%v!!jvnJ&DbbQ%-Dyjk2lOH&oo_Y>XY$^aX{~ErP#QUg3d6+@&29dkj%TpWH$4bX zNf+!@ww?)oF%Dcrl;R5`=z9$EojNrwRcb!kK>}Rq??u}dmyy9Kx9Ue*9TJuOiI)K#jQ^m;l%; zv~P1sb7qRAZe^+YLZi6smIw+V{o`6cFCgmuJ@zy1&0>`3?V*LX@4}u+oY8CNLjMNap1{3evJ?O@(yj(JZJb`o|gObDlOGSJ^VN{s2syS!ndoB=T#?_ zr@*>v-}Eo+pN+qCsn}(RB`IqKmw<{;$0c*(5ck6lXCX%e_BEan8X>hV7k!;OJN}-j zzWR;6ju6@T$=`h)FSP3`vHAL^4~TPwT9mZ$5QuO5l@WeC0JWB70s0{#UR?D%{`4ZGA=#V?K-@=lLQS+Lt6Etx>#d?u7e zeqX>jaYM%%k7t=AwqbbN;oe4)D2Q9ZHD(|;rMLY0u{`emTaSr{`I#cmK3hVIah7rc zPK+DYt_X`RcjWO6l$+R%(AvqN%#VR$*V~-K>x8L-sOtTafgSZlYk{Q@s!3e#M+LKv z96zs(W#uG331t!MGykWWNmtwUN+B@0Iyqh>+hCB|>Zz}d7-}ZQ5Wm#2u^77Kx$M0M~ zInQ2;lGAVd&}-6`s%J*)%EI_R2?GuKKPxOD3^bHX>pxY*{yCZWz-0`^5N|&jW1K_wZk{Q*^pQ%z@r7INm5Vu zZeXk5ka;FpaX!%dKdU2h7e!LFDYWL?_PH}as`yD+kUr3*5Ew{h#MlZ?8r$vl{H{0T zE`wn1AHO?R)kdc-JXl^>2*8+o+tKLE<}VD!v~=;ezRtIL7XkO}DtlY=KL#zP7w~VMxW0{A{cUu;oEVCjNqTMuR1JH-cKDxV~<8wBcn0)mu*WH zW`eSAx}8%ibpRI#W~T{hHBK+)Opw|nHQZ0oDz7BO&SiIm)ooTJVbqlF;&$)1TI1^S zogBxV1*YA$qx~G>RoBRhs=?aWo-E6O{z%|48Sn?WElY5rHM~Wa&9BjR@TmWxP_KY? zR?}iL%~W&){kr}c&1OK`)v!p(!KHY)FMIrTA&Dx5bLgstY98Xcuas~uuS1crm>i>3ay`6gnm zb`M>kZJYh8%AWG6vA#c}laywL&Tzq^atGu|?yqE?;=kh}U7*%?*eT(QiRCfs(of;G zmOMf-))I!@yzLcr`O%)g5KhRH$ZS}6Wr_~G$a}29qVA(U*U}Ca%KD}q%A*n36^OsE z$gis&{yh{CC!MdoApg*4CDy%tqhFq==F4L_?3Pcb~!W-MO#uRV73Y02)cmn%Jqqd#3!HDUKp@&?3< z%k3FngM)e|{e;5ChYoLdeQTliBe{E9qy5`BKK9*b!=AdYapDTgkBAO8267DEi0}M+ zNiwsarQEwY{g)C5G_|w198LkAEoy67$hqz0$+IK8OJLp^qdtWdGf}%*0cY=B?0&#> zhbX+_nRd^O45P18nx*g4DZNRB@1zm-+>slMVt-kZ8=~kfv5E{Ft=Xo0MgBe{3tZEH zLSGW&z0{>x;mU7{@O{R*J8Bes?DA|0VTZlyQtA3L?N{}&9(zk%z0?R8Hq^6`5V)Ic zBkPb8X*sue{x9jt+_Dl!=UV}u*dJBzHa0hGLu=7X+=d8>%1qZku$mhKVd^<6k7$GK zIL$Orkl%NqoX4QS-?f{&r~WW8FH#M~Pv$Vv`NfJX-EBrlhI(4k{J_V^%O3?x4T7V* z5jrmRFFYSIFy-PdIZ~=24w0)&!%$69DC^NM**-=KAGOI$j1u4lJg2*Z;uV^?i5JP9 zOMAR-{I;{Eo5)GweZka%={w;KuT1o~>5%btQBryTmKkmPQ}qvJ5S|z^1)%xAFS-mzznrFJ11P`hC+}6*Iw}5r49I-cOk+t)P-h`GeKF2 zU7bD5Wk|Lxs9QTQf#`H3qkbcpwBI!plj@VJW%}zdPcUm{pEW$%NlR^-Df>IIViI&1Z!^;pA%lfif?pzdf3(5Nu+TBk}vT{haK@aeu;CqUwcB zzb4h$wB=ay!sJ|K_~BxD6ooL8F2 z{4IJ>VY0KYuvDg;`103p)K8nvm;VI78<5{*1|MF^>vhcc%AKfEO!AH}NzaLSYF~`g z(-8lbeLUIm4!*LJefqK!mpo!Vw8fpWH#?9jCS$|?TXLlbb~t+D-MBlut=vAx6fhgW z#IJUj`)~Bgf-Wq1_}-7$kK8Z&2$?p#0f?|b$f@oBO7P$97Z6l#IV{zj>hAP%^}1hC z0ad(SEo*2pbhKQr-Gtrvvg~Mx?jH*fmAtc zYwzFmFyQAp?#{}XDI~kU$t033EMV?m!gy2Kt{D|$g8dRSl=R*9U3OvrvY6_5_AiW) zV8>^$l^SC{2O^JoqE|S)n5EU|3$$i!)QCNQ+QvEtuCU6H3fTEQ9Ux^=(mJ#2RGzvg z@}elHFxy69Q4}cgJS!bp!!Jqd zezhI;%^PXME;z6zd7Q<^)fQ!@np;RELz%H4Et;R>QNg?9E?e|2ZEuq-rY-^JVJikU zh^igMZq`KT-@WRa=20KM9_(uUc*v`HGjz9m0@l`Y?C^ScHFjSUcL6)PrOpJgPyb(+ ziRKi<5#R`L1ULd50geDifFr;W;0SO8I0762jsQo1Bft^h2yg^A0vrL307rl$z!BgG za0EC49D)B|2(TNuxK91Qo&3Y9Px)HSIXD6w0geDifFr;W;0SO8I0762jsQo1Bft^h z2yg^A0vrL307rl$z!BgGa0EC490861M}Q;15%`}j&?9{7+<&JUXb7eE|I?e{)Xx#% z2yg^A0vrL307rl$z!BgGa0EC490861M}Q;15#R`L1ULd50geDifFr;W;0SO8I0762 zjzIMVp#R_hodsBD&z<9Va0EC490861M}Q;15#R`L1ULd50geDifFr;W;0SO8I0762 zjsQo1Bft^h2yg^A0vrL307rl$@IPKaVs|p+^A)}BznA+Kb^I?9i5I2XW>$%}|Jl28 zuc6~Cb@}IF$h+k$=dLV>s60CTXP9~hb%_}eVoJrrpw%RN9?>HY8*FTR`M>i7oD)ZY zBft^(zg^%2;lLP*$kKZPvDdUu*So95y`}8+8*T~!$^PXOwzwnEtaFGQB z5+1(UPX>oxH|u#-09CS%>59(Frf%Y7 z^N)LzW#7Y}&58t*Q@6@w`Yjk1G%G9HXR?W6L(3rx>va!nT5N$#V#$^`4{h6fM+XMk8{a%{{T{iZE;x$CFtWlw-Y(cCq4nP)wX-j z?WL{g8%YaB)t6^O03K`KNvvm$Zk8KALeeh6EcdG{cK{|v;==i^*2F|WZ@ynan}Xl? zr%Wx_3w4bJy0kvd<^>>9#^WXa^NB${--*H~MbT8EIG^0KS6h>Y?RK~GGwIQ^KZ4s- zJfdF8oL_vVw2l)pIN(lc_uj1i&V~L(r1p_7VMaGoLpG;|G7S^ks*l6gzN+YB7LsmN zQ4YMet`_R)-e7-tU6)^SlOR z*}Ztzhbey%Xe|gZB8pdYsOPWNx%K`P~JJIye9_EC`!f`TX?6bnQzp^o6s zYhn3HoOs+CVY9Q zOLlr|)ej;KQTb}MVRNQex-jAnY75Dgoh@Ms!MwXGM&+?&1|Z*w-n|Q`V^CXdk;n}; z@dpiwiW5l4XgN&OSaIZ&R`!g1haZ^BfsPTTl{M{&FA7Tz8?Y5MGRm;SgV$V}DZ{y9 z$X`LG87;|y-P4pDePCa4aKJLH<0A%plR{Y+`Dk2JIs4s>*&7CDI2pB08mpCeOamEN zx5d`@VU~C!%A=5i_;SePG5$ksV)wC+Es|mBrYo3PZPedZKY>koS*Bl(DI$)h?VF}F z_^)8km~J)y9hLD%JZ@^yR4t;zhalWql7RyiZ_2w#^2=ku_5N#J(7b8_O;-;+{uq}_#Mbmmwe9$)E>GGOVO^9UG*g$~2c z<;YZM0%b|vZJ^|nJuH*`$A7U%1)WMU=y}ydJ(Bv}P{?^EXsf8}_ekhpPB~hPuTB#h z?M`MhA>L7l`9-C(&OW#N#h2EeCbeUp(dP5z`-a~zt9Bb~5w$xipufj(22dU&i*2S z?fon)i>AaVfSy%X8DKv!kH3!Xq&KgkWdGu)cbK%dGI?7`d-wFe?V9(X82dk!`GQPgt?lY!rAqfBS}a*hF(N|RudB>FX(?w}Sy__1w35IH#Nk3jFLwyI&E2=`Q>u2|aJDOY;Ns7c3MGl=2)&=!rm5~P zJ10%=a+G1`fc9@EHZSZ8j(oxd0{wU6c+A~81O0rc{Y*G9yVGI!-(Lu$;V}*Rd=y&y zn#V+yUzw*u+f>mPFBgbPALa%A<`=QhUu&|g<3ockv6Xn^<8O1Thc2$*Za#bte820% znL0F(>i&%Ws2S+&(JlHEb*}<{>G_^H%L69UovJRitlzs{P;M7h5W;946v4T=!`ogJ zWl>_Z3Qr>86%~jWcr$k7dZXJy;e#0SOsBkdo=py2V z4J8)Atr2^DbX^ub$f-#}mV_8I(Ku+W?!$%6&%C9?2~yf&v!T`f)mE8U!`fUNBLM`i ze-KTbPA|I2_uNXm^ig8s8XyOld2b9vWpn-CK4|;jR^Kt(_-I+prI`yeQmpoO)IYz_ z;(z~r{{TekV~Rnt@0}pB)}ZW?!U>TcgiCAbe})7-Xa0=RIu*#og-~>C>$2Hjl-+}i zXtOc4&~CRcXu@9%u0PkG6%Ze#N#yiwT=;ZA(_cBYbN0=-%B!ClLC=M*+P``nhlcN$)W{-_4F=(y5g_AzpK1)w*}Hc_k^|PsB3Ed^#+3M1+6j_;=TW1 zkF1bgcK-c0nrXZX>^d0fI?zr_3u<1V>W-s3x*sfjc!879tZ zJV!PS@i63oK^0T~cFK_v1D^$9=llqHz&28 z`$Sg#$N-b5V8t^h>bTD!?bfhbdqBkg?FVy{0q=a>oVr-xOr1OUBU3oI>@ zDt4r-Ne?%(IrR^A)SvZYzed2NFIEmb*mnL-M$gjM6fPDT=egh#qf@fYteT?j-yO$p zx*E)%*wC_WFOouc;V0ppvd|ZwKngR2nXYC|!pcxqG z7`eBT=4SRJ+06Yp#9zqMr|3;1pWfO(q7bilz<3S>YNrMMQe zl_?*v374J?2rLs@F%O+T$49GQ{y+&9`!19ZL!pFxp{}gxBl;Mi+#NTCy8ZyB|GbWS7eN>MjVx zyB67m_LuXYmJm+MikYJ9&MRw)YaH8Un1^_-C;PYgPL`#^k<&^qA# zS=XPY^Mdq&dXWkvnMO%UE|0lcyct6MtqmoLgqSl?9%D$FKCe}?4EYTW2~ju23VQtBz!ScxPy$C_R`?%A& zEFLSW50G@-gTe$eS|HI8(RCDxz@j0n+<&^Uv+kC)f0rI^ig!ReHCq%|T_wlu!tm8! zx7s#Hi+-sUiAXbCO<8=PqJwGGYy&fDJ-~8$jJlJ3dggcL1Sn@MDs!)dq#IR4v4G~2 zzPDVg{fpH*)2R+UWFK#o|Jok-aw2V-bXK5CM#xk(F#e0dV_7%L-;Q&g(TaX3kDz6X zb`(^N4Qm^Xlck32!tOoqI&&koL@!Ms5K22R0E{1PXSD8iJ;PUXrzuG=d)`&u$*MD# zbwJn8@i4Q;QOzgV>eDur}7#QH2#uXU;G)HjuE(}x!GGNs;5NiOxO0OY%#>B z3*P+s4gDks+oVNJ|4>3>gd%Thw-pdLZikYg3dO8>j`9gv^Q+r*zMA=Tw-t)s!N9yw zcenf7y5zPuWpQ=F;gbkl;Hoi|>fXvX=oypx^>sg7BWFv zf(yQe6dlZ2!^CI>C%mgce2lm=^T#y15@pouOL}DB!LERs}+q1TzX3 z!re~Vb$GQwZyYRY9;HRPGQJ1bjdqS}S|3q{_w8k6yK5;7zofF7@$!{~=&H@aYWwd< z^5=iyIXr|pa}Ub$99APj>0bW=aBR9=l2sX4${)u6!E2_Gkhg&A2f^A~78JVOdzWCMJ*Yt$otIL) z*@m`|SRvXJ)TiLt8`ZhYVJU=4{p94u8?L66cCAmIeFGL*vB!L$j%x<6pS6FVIOcldUeqfN6t?N&Zby%@yJANhjh&{s_z+J?|@q_ z$l!`m5o*ePaZfyWT*3uq462`7-?du`qW;d9H>gK(=l^!K$f^}vy2m*3t+u)GbTiGW zA!t7*D~TID;SM6vJhB1##jQt45oZQO=hH3+z{^6{RWwhznC}f^aim}K$*!fb2flA>6 zww6 zK&0=hOxlgis2w3Km5q!?7n`%{g6k+h9jc6Q1pfM8Kl;3?nW|x12c?hNGs>j0d})2p zx6%Aabtlip!jwDrZcRrH{j2Ym!38ip)LPetnrO0LG=A$@D8gb2W+Ffz^Je9Lg*UoH zpulIN5?eNZw*J`1*~dqj$~g{LmrWNDU+wH-3+fh&GDVQ6s_3Q7=dT-PX?#h&aff&X z_2=F1$DpW@-!egQrnqY57sYJPc?%S2GrWsBwNNV_lLRe0=~_YRCEqA^*r)9KwTBe$ z`FpiD;bb+Q3!Frc00OzdJVuQYjPe-GwBoeA{rNo29apv4J1caEKId zu^+OYu%y@WM-YZd$NRo@pAh80B>EIdDqfz<+jC&wys5SJM1-vzL-zQFmYoMUs=A8Hb^}Z$M~nY|TQ08chHcB0=1GV+y*! z{k*$jYRk_xtDuYMzu>LkKJW}4`Rhw8nimaJ4tR<+P$cCLuM=sXNJ#=9c!h5Ik4$y> zIOnbL=mWs%xoBng;g961Ri4X5a}@o5@a6@?T7#kv96raqK8xApx*xiqDT+`9ZY4V? ztG%#PcQflNf;PdoCw;e4?BxX+cYO*E_=4ZOFVrUQC* zHMAA*z$1F+tWXTV zF34^OZ{vlbI`J>VBCqQLs6|Ex?jfWMPhL`foOR+C z#}3>!!AFaMn6$aL);Bn~|AF^VHlD0LC*cyeA1Y--dVw+z#DX>y@lE zwBP$dLL_??di(x#j)jJR*kLP&Ye%fZ-RQWk3A)z&)c1|V2wt8PV?i~sVB4SDlGU=i z;ojEY3~qSI0&<$H7rzYM6j06G@LxE)eTQV%UOTpIC4#l}nsW#yCooDzXU8-ghU(B) zrFp2|rZ(JM&PqjO)jX{i4tk7KOpq7f*t~z<;G^lNnY&KQ;y&r#aUFT)i>X1j5H$KN zR@+=!93+9mQwat_p6c4{ig3TVLr8Qp3967etz;ig9#DyAh>pt3MIG3*@=sp}xs5bg zsqg$k3Hb~bOd*kC9_)ibs3Y}2M(Zknp}R?aoX%BcA2sKtyzSev0O#wIdbcPwMJ~9SSRTpu6vu`^6(6>Ta(UY$utZTR#P5!WqwF!~xBd;wY)XfR36&=7B z!SG!biJlCb=ud+p&vaYvt)OG{9Nrl)CTxb(Rx(^cRMejvG*ve*2m_`u zqwssE5ra6t8{xjoB@{29rbfQh_($#MXJZ=o&>kM1{92m8MdP6g!^@phM|g(xQ&@Lk zwf**aQfM;s;3&>kleg6a6KVdcyR$3z5Y; zdp`se=!>^r`yd5;%(+2-1uL%nNN(j#*@lILRY@u?MURAfK10PowWetvEJkjL*W~kd z3F8)*oP1w(mRo^_Kp+Br;LKh$_(Q={@&1?n$3+Qxe%%+Px`E-@?vl_LQ*T`ufTUO; z4?Ea)2EFl~@5YpV)!~Iw(sE0lbehXr`(EcOlr*e~)-K&HWUft<-$7#ZBero*OrPFk zm*G&t4vXbqjDxm(pq>zJ&4iOF`j*GtX#xOY_UkD9?r6=-`s+yvpYPi9$KOqRG$I}= zn{gK?HR7hO$wq#Bs;VsQffT3Zj}(~h4W0a)-z*w=&_JrwtukH^f4JrU9&8;lBPh2_ z`;dG)TIa&_IZ&NX{%lfLyP7h&uLFg1;XI3~AaSwHzK-&2wYw!#Y*6Cjf<{rS#ZL&>bD zEdoq=p6-#CAwUS%Ktd4w$*?P+7_>?KnwW$-$Z17pVvYdirA-woq%g{n2stNYG&|Oo z;d|ws|MmY$&dds#9vZb9yW!^S;^JI5mYyE*3U}Jz~WUl7Odc>Fex-%)a^aN~#8R1qC)=%6xOSST4 zXI391h3SJSGL)|Wpk-)(*Pnc3KOfbq@#tWYx2*$>?twCjo#~7@V|7 zyeu&-4Tc3(3nqbNLuFkEGp|)EqV~g$O0e@eg}?Wwj2F@E^>pjuHiD!%UbCH@!VM&* zb(wQ%O13-ftB_iZ#fpGTP9QaI; z7beQOFD2GYCbGHVXKZn7T%R=HAZWJ>mkA!-?qEhRDq`2_cLmW9p3E2xl1WOmUbnQh99u{6++qq}w4+?pFu=WU`9Vs78%XqQUtkx=-fA97x z3}ZRGt7^Uaa%c&YU)DuueH@h82Ea8a4aRr}KHx1p6TkYLlmY@B9F(DA)DVuIHhH%h zX)luMELTqs{>U>g^&W5YM*VfV2TwRJ6x_uw#2UlZ=bVCmloHseo$d#1^o5oPs>}8y zUZ1_#dVrRsP)BxDLm$@d4QzigVDP0%*m!Nx`9SQ*pjS_p$8Y^5ClJ3`Zzh2$SSe6q zG9Hn>`VD{pyw^>A+@ealacx0%KzlEl-qY*6mf%Fn|tcd#jQ!eIwD27 zU7EjZ!&#-%%sQ@9o-*MN-@fhXeD&Amvo1IDx}S_b*+)EN98N=d$_phPtk0l8>V2li zA}$#SgI^?LO$2=`j6}qw0Sk_-*pT?Z@)_Ffg4~*xje6i}$?+u+s$(L|BXg#5>N0te zV7}5boCEE3?2$b@{<_&%ewPJdJsda~5fLT$b#9x{WNxgu`(gTIzDWl``ZdW4+Epb66Pinf)?<;|~(5upLC)k5#_dGS~iq`Tc{0 zn1bDGN88jFYyWXzm!-o^P*rn#`OP#TlMj91 zIFYJRG<_`HLi(yGY?8~cXC zdSa7;xmUWIgEsOEc7hjGD&OGVJKRQRXajBW)9WO(UJiwJ#l%Xo?Kj!lTcwPC`H7bwGFlbq=By3@g6Kcjwf9}g%(DBMl z4Yk4?VBzGxJlQ57E4H(*|9hvF;K@U;ADLcJbZl?aKYWx26KhXPymdVgkE7uXgf7)7 zyW{Crl6Oxj904*U!kr&y!hlAAsNc&c%^CVmulao@cc5f3S+17*iyNa`V*wLDbn+k= z@v=|RPm+uMvbLvk9IB31pQ>~kezlKcxYmQc7_)PNt9IB$3gr_SlPT0yREaz2=FN`( zf~KAH5pHGOgxjhHKQ6X8a{!1jAsPMLheS@>FN93ChmlAsStM|yt#7|fver#g^1<+{ z0(qfsdqw^4O6shk3E9&9g&6^67ysy+PI^*ko+L{?9K^Ci#bJQg?Ie^aOJ#cYp_ij0 z?nJcLpT=qo+sjLM6Pk5V;HPH^zUtv2owez;PYa`kR4HS?SBrsh_Y9X@hUzgpBNwdc z%oQ#4YV0X?=c}D3IVYxoe(wUimQ2TH=2DBguS~!zD1cnt2D}= zfBYz6Kbq^wy~~=d#E=at`r!%T*+-E8wy&y*tLuN}>Ul?f(=y?Z-LZ?LIbT)l_CaEf zLxAmTvmq7ga7Q&ctn|2ICI9uT6&$hlYE2=;4s6vFwA4eAqzna1KA4KFE5c?~nS1<7 zJ>faKyTy`d@SYgcHYP4?>Bi2V_9HI%!`z}+9?o*0)gHj$SDH%0nhSuDN6mF|se=0*)0*YQI0Bwn>)h z6);L1&ZLYro-eUdv{2P>-({O&z2{a>`WDz_kpkKv+dA$(B347ad|>RW)akX0F3FzS z#H|k!lJ-#+$32rLe)E2+ky;V42#~?x%m1t(Eo@8rMzs1ntvcL*)XYwL+NFX>eBh9i zslzTnNTf~ZNSoWopcF``Ox>?iO|1dmdW)eqC8d096)e2#ubUA!ZIa@?NXT2QN49%z|rnK(wt0zQpJy>&ke@PD6Pp3T=M7E0Mob-Sj5)ShSr3guX}Lm z%CefD`a)H1^T?6DP`nGgpwejKlX3~a@%EM1%{!l)O0bH#0GPisO`Zos(m$krIRnKB zottB9deY7_m9d>2{*IJK9`7+SiPD{_D<^U9nA+966Ea8ip0QY~;8e|}WvUQkAnOvO zV3+n`jHdJ?8$t)N=n?Y^5{m?wF_fir8=1AhQ1Xu55#OF~1~0o2|LPOF>U=KlTt zbsmD;^p4<^p$gwn>=HGyY}##TGgeZL+;aAFZ{Vkhq9 z14+iy`g3aQ%y}r>W1@i+cMxD0Warzs?@;l=lIzWUy0}T**RyFP)*R?{pKwZ-&$h|& zK`UekQfB>E(aXC!Ki++NC7HvQeB-mCqX|xi!uYd{T|3?@#)o4IllOknJM8R#xp{_k zn#83I^AB|?I5RiU1FoYJUQb|r;`vHG>_Z>XCHGSy4p`1?ZMJpshgY zSbnxz%7b)r-CAtc+=p&o^VMP07|I{+uHSA>yhl1L^)31LsYn5cb^@IgaGQh`{{EYaDng|S12N*L;ZX&J zGtR=A^!>ugy9kRAHTw9X>zI1;QDqEvhqdF z>MK)Zxn$%jRAPfvdU>n3miDz;?55fM?wyhefm3#hs=@0_-JGyXvVm1G=_OgQr>6xv zidTc($Gyy_HI1)oxll(E78A3i?ST%N?1K#rf4LfDpKqYgGZiVvYfqb>+w;@bdi_p$kuI~s*K%a%2Oe%S3`ae+V_J^;#kTFk z@z%mn#qcXCJn$K~;beA?{&utW8wFF`WuZXHt126y0K#{D3hoRE$_PduKwjXy z!Xg5X2@_L@FNm2i=h@!d-`*`sp1cBuwekMsMG9SJmQ&vCZAzwc%UT|h+aX84rkHB? z!yn`NKt9JYtPMk;U#ldO(kgV9x*o0MGqSnAs8wVSrIcKa#T9oV=utn)4m*`FhFSNI zm}bV{GQg`QG)_4z?i$2O2AT9xvo2XUz1I6htd3x$>?KRHYQxo=>`Qo{%l`YF8>|tF zU2^W#0!LYR4h7kOk{-~=-BVesd0Mr3IJ8h>y6vj!nHJ%{kNg^!BNkc*7yD{gwQZZ> z9Br#2@3!<1Nm>^&Z~o6_7Z+(g+LBF6_>r%Tl6w07#GnlTG~>B+kRH)vBBhz5OlY~$%Kt%Fv(x2e)rN;K7>)@F`LX_$X+ks; zZwx}>0gm;d;l+njYtyKCd!g4+*uH~+P9x^tEOb7hpfE~q&{?OdhAV6 zjq(oYoCI~T^AU{g78}Dlgtu)udchhH#tLWGH5RQw4kKIN&h1(=?i9BtAWfmcS)b%f zSP~jC4Lifb5TyMxdneFusHu2`d5VURY0OTNfWggn5?vy!d2L(Ek|IAe{I5@DGdK68 z-3V1o%5gT74pS9wVDueVdfIk%Yaiu!samC6;JInDMI%@7$t*}9j-FEGTG`j-)*~1g zaWFS}GDHu?9Exihx&qSjf_%QWXa?fvGnaiknCFNtIi0TsYiRN41T-toDAygnH=e7r z)F9aA^rP$bF!pLv`s0d_QK4rPa^@3p;p9}+FRj0s%OBnJl$Nwe5Q!o4_Rf4M;Hp(S zV%EgTgT94YG^v9|uOIfm`q_H$Mxt{Yv#fkW6cygRJJKM)ya1~jkFm{+Oz>LBpLBYb z9VHvLd&&K{#-r=o87lyB&SwlPqF0{$49Hp?d&MlS?~1CON&l6^V_R*#o7Qk_>7;=UpQxF!PM*%q}vI&5bFx~w*M;ZH)3beFWAenQ~llP4AF<9!6FjmLmQK@voC~> zCH&fktm{(@o9}A$9q#AYD|y;34^7GWNq8q{2mo%G{$1_&oBp-(mK-hBZ=sX?cCzue z{s1Ce_{fil7&yznSXl9rP^<`wgoA#!*s~<$%fm5!=M(1syi~(K;pa0}8GJj)_1UESl**Yc{*)eIYJ2dOlwM&)-IymJx}Y=d6SI3;9~|pQ!lM-RQ_S4D>Ant ziGIe-t66@}AA_$oiXRyXP+|Avey|QfV`V69ND2+YCFGGIa}U$_&Wmx)E4nV^G*@42jZEf0bTdE6Fp%{%M z=_p12>DgoWja2qh4I9Z;6c3Xhm}+p?<}ELd5v1Fu1|?Kd>kFQtVt*BmU9xr_b?yu{kkg@X3x%=4fzKlmCnWm0JoMNPP9C z%w?Y^(r$J>+y(Lba!``rVtVK_ts`_rB<9(TmwuZ(^^sC@{>}clG9Hs9iG2oE!Hk{L z@px>OJWrU5eCzSg{6-%6X*Ph|H#ia7PJzF!pmpAii2Ef)-(Om-Q!rcfo>#*&dLM&^ zine|8TjMePg@gkY4D#Av^8h>ianyu8lMzCfd4PSdt#+$(w#Kc(iy|t3T59Tpd{-AF zc#fa^1b&NdlUj)J9;Gw^DcR+1`mB9rlR*D#*(1)?9088N|4D%p z0Ov2t|Kq=YHAZJOw7V&Qdho3&1ULd50gk}`UV(orD!#XUEB_wqqN{)ZoUYu* z&q9g^zK=6DD)>vYmXdm1fI$vcn-yi0x)NC5p%p9sw6F@bwv<$Y zZtd+6$)bJyJd&Z1rNhjoteABoW^eIi`c5wSq2s`3nczeMOIDoD3s?Mj; zevFO4n;^(Ua&u&tZ_B0=c6Fw`J<^LF-Si1Q8q5Q{cIC{%1Mu(2nb-3PA?d<>4-u?eXLB;_bx5aW9 z3mS!#1u{$83OJ_>Ll3m6Z8+i-kqHAviN%s{odg^bnv$!=)d*5DVV*`qj!3BBz!M7$ zgWwFkFm>fRc@|9e#{42m`X#TgKYwCk~%SVJ3aY13M`TWj^s4DT;j`<;d zxAfd((xx=yYQxthapHix&->P&NA9}DCht&~4009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**?qA?q(F4ouc=>3!aYQ`*%DmQW&*iD;{?CRP z2q1s}0tg_000IagfB*srAb}hR~J^$oM*_l^wNT10M_5alp^H^V` z`TAIcQXvSm-s+RYtv{Jp+;vLzQc$SJxbKy+KW=3;J6dC&8{XAvlW9E1%X{z6nGA~+ zU4k%a*`u}X@1*4CZKy64t-16@($n4_+S9rn->ubncSxQMviW+gYBw2&rwyw@0~aM( zJvGMzi)K^fLY!Z8>>d~WTNbRNv(&RCVWGvjHQ#V#x>2dm)P%(LIF63KeJFWQoqFAV zK$sXBZ@rwEJvE%53|S06utPVsW#(q_e&ejucau5BRU0a8A2c!JYi3{VUg<5}acilR(=CDsjq)Om*dSF(tU$WO}&D`Fs z-nU=a5bT$m__}5$$>Qa1DmXNDJ8rcx((G$jD6d|czbUJ#Rw=S%1*VzQ&fc8hFTb~b zV(I&(R`K~|QRwwwuoW5rHc!fDQo!5ct0Zt|g9S3d2^sc+CADS3 z=4y85dPms1^-gQ$ev7ALVt8U{HKcESJGg&wIoLlqIb&{O2KZh#@(o7D z^`*xEg$DM-H#R+eZS5BVfXXV1N~;R%s_M!Lz(hp`MFr)re$(fU{YSutre$8_rV^k&oAXV=8&RPXq$#5>h@>h$aMUs*Xb{=<6`_{H{K^}F8Z zTj!!8W7^`oJHhK|XlQV1_*LRP+iUx)Y4XG6nE%U}ZAQW%W+6c*UO@-QpZA;d1_B5M zzyt7SKHf{*68=-g0|xlG+XMqL|BXaW2}cn@CJz6LM^-R1`ax=v8J&CC{uqWE{ksNv zN9}%Zc^}bUGluLMljgNe!89s z1W0z^|5K&sdZ%*;fLi~X{YKDNnYqES~9_+VVo!O7}wO;)MT``1^Rb7xDku!x-`#e(GBv`vd0}u2V2c zdova+&Z|i5LpaAov0@9{yEUDftu8r?Jn-Qt2^3@1tz>|Bs z9UmOEr1;rAX3stf1#1+K+SS0pOOIi28uS(zo4*|_ogm=I2LvNR7%+}U@?&J-D_FPy zN#Lz*Z_ecVC1vCGtrnLRN1rE_eK}c7?E3mpL~u1AhoZP0aEpMqpg^**wbsyZL(@!0 zCPCXf7MD8HW=aYtu1e3#$_Op&tW3D`KDZ*w0n)KPODj;If^WLaB{jQ=t)_l9)!OYq zEt)&luOVp&2aR&!qwo#(#^*<1!7-&HR4H0jRZyu+vtyeuQwlmsogK=@CaEW3>MRGo zs6p#`e_`>K0Eaa0r6zcH&i7_g#TcUsWk4!rBenAp4fkBxl7$vB-qvz=a-M2eMEM}v zFv0e0_oN>0gQHnTAX2(z{C2%<{@V0yGH1Wo2|QIoz)PDSAIl=5h!&5VzE=_lLEKPC zmr7bz6n`Mmp1_hUY~_9`hI>GM_8em-CJ@GWi``S6qQJvll0ChPABxMG3dJ@K;;*cN zRe}O;DgTxiJ55BUvGJIjSg7&tXKdu@&>SfsRzkv5^0{j5TSeM&=wf4(4hfZ9sNgk} z@yDdj)LWP+saYmrKFp$Hnf1=Ls&MUo38-IErirvIIq=j1Lm@U6w&5GmF>!aafy1e= z*_z7%H6`|T8@0>e_LY4()7(34prqgF1&eojoW>REX5C0{E5?wA$csQ#W#?;KfeUFN zzNJ@bL};O%gwrliFKo=_K@euxxT#WlBe8Z^FGwk>D*nPtEl=iA16?t-UiL2Se$CZE7DT;yMdc7}OT#wn^SaY4pAGSe37 z#BCdf&ORI2&N9N~CxML)8+s%Soh%Ymm3(tUC-NDymT%5Ki(EzmRVv3(y@N2R!+bZe zU9?(L>Ez=tqCeQCwRq~Cb)!4kN@`CR6|d@XH*)=axn0VJRmZb(-bHTATWl)3Ve}%l z-mc}fJz_v;329uu%KiRt^+?xYhRvfnpfi3xw?HP5MugBz$tJcw{urOodBJ~zWW{c* zai}2UAU0td?dm_^vRY!$Mg6v2X^E);mLNIX&U1f>NffiMo*;BS@ZOX`qn#H@i{prt zO={D>fWMF_rm#U-6y#s&B?}lD8d<{Kmn592*`7*u60!R*ewZn_S;mP4kp>E? z_=ZiFRo`uuR+RlVGxmX0}o~Vhp^yFje;eHkyH=?as9K1Y5vhvv~R7&e|gvG}XaUTZbQe zLt>hZY^!RlPH@tSPGaOH(-UD=(2+s?+9;@B2b}gId%<|IAcwXbczsjB`NSXsRFQ}E zCW7fGF)9emT&^dwb{c+OX0Mu^Ex%XM+pw&zUQ;MWQ2k!4igv4n)f~1+>>CQzc*=Iw z>Fy7}!&zuJpuJ#6%7+`C&~cin-_g*@N*oTm9AcG7%3SaNUs4 zptKcvg33fH0R`1?vZqC0{XK!jqq;p@7U6+(4Hra|m|{uv%Bx#$<=`nyGVVQVxRd;4 zo)Fm~3nW))`W>J6asTi+zwk-7S4BnKDPMK4BphjN6GUb?b}xkJaqW!4lrY4B!g%{J z7xt*tWxGi9`Aw{f39%}N*onPk)jAA3i$doj!P7f4=IQR}$1!o^tig|w)ycPtQYhB` zjq4JkjI?7!Q9Ew%plyMBr#l=l_K&5QyS*D10o}B|>1Kv^Qn?$koCuTwo0L+i{n8&+ z7>XIVak5h?$0)$QJjO%#Kol0SlW(AHbKv!2fV!Nko)2ld&bA{Ujc!RWu2!CuKARrk zdpt~S`f?{s9t4lYh&9^ghC=5d_Mv3cV^TpoKe;Wv*g3B1)%8qT?bHVDnd;8{T)O7* zO?6TUN-s2`p&N+|Fw}!EiTd#%lIdP`jmM8|mJ}MxbWBjBM@!E8XZH96pJ5KhXdB{q zz?e?a-m@L~HDz4nyc#S>ws1d%o`8Cne~7-i0`5NOjFT3Og>m<LahxK1x=$uE#&Li`i~26hKYjIlDvIay*L2V6$P z5)0X6f(z2H$!jtta|HHb<pts|$T&Rx2fpmMayS5{_KPLLzxh% zi8;fgusX$sz-cI&-PimRF=_N6YFQbuRX-NHI5&!v?%#J75c5zvmI_XB8~!u4;`(N1 zaR^eo!-bX`nNMuvEzO>HJ34!#GIK?{9!}ZRrLG4;PIdGCtX1d=a;f=b&SO|nCtagS z$fz99YNBwsXUzo=RR0ySsVQ+@6vJ+a=fnxrD&}?U?|RO*^8WGR$tra^;Hgm;N`gxJ zubC&Z$-~@AOW4J-7YmvD;&k$%H-=jl5YItNWp(+{`+T>>86oI}){Itq^zvyR*Hbld zN7doSHs1Qe5uAYAL^qN~i%}9x3uIy(zfK1NJT&Xw?zB(maI988xOpGOPw%-^z&c{! zWX534-}WYt$sNT9*S+KO<^}1=G-J>YDDu&@$#W;oE~~aqfY#3Oe0@_z{4`|rjlcUt zgL9Gxs$jjgmhw-JuV)KIe86iu$Z(Jp0a(Zh7cVSgrgWh#2?(^a=K$E0*uPYZjZR4z z^sy;RKquRd#p4K6tdOyzRT@dwu7G-#tSln8+EngNBulD@k% z?uu9)kbo@pvq3b;73`qB4rA)dQEM*yG8_@Qs7it*(!J#cRdTYEJ4osrJuAeO< z1Z*b>HNQe76ZTSU5@u|JO3Y?<647sIr{ColC4tNcCn(YgS8xrVCy!OgQ>!x5-m?DA zjJfee&AXTcZ?;n^q#uNY6WA>Y{Tm9h&agc+7s`@s(l!roYy^|2t<`03Gfs8BMPQJ) zBXlLU0F@z@@G(YSR+dySn}s5y3^@mG+!x*6NJ7PCgGP;f+yzSDo zEjn2UctsTiHFD7+AO&zJh;Ex2Y78E?I3{(zH~h9APDMNPsg1ucv{MAMl@!C8U45;1 z7%U9EeAMW7zOW}%b?*~^0ZdPJSnd8rdvvG2t{`M-_C;znfgNZe$c79OE%73v_X1-{ z^gknL@-A$BZ~&3l(3~FUi#J{ggzlUcGvcr#FgYfAyc<295(Ze_7b- zi(`ZQFpR1TAHiLe-Wh|>4?rs=|Qv9UBI zoCRMbb+CS|K1|CYSPX=TfrHcLB6SY66CV?+zoDP*BDD*wd_fxjFqCwXieX&W1+sUD zH=38Jox+(vayMb@j4BGpg+?i3Qd|ST$Cv77f?G>2QzmxdPQ%rPm+NldFOR1jUvJx= z%O!0oTPC{F-DTlhe4y~2(KR7FI9bLft%%+W7&5FeD0LpqK@HgR`*_Mq;<`I&eo#4E zn+$b;2D4a}oyr8R#08Q+5tjCLmkp7!R2nxak@4!mq)2W!H;y`hFnk7ZY6*FzJ=Z=q z;t+$WE?D#5ydt<26yJqsZOoajKTiF?biCX5j&!=ftnZTczNz%2B?=ixF*Gf@H6$U z@b{~iRIU~Wc?gqBiU)0nNT%_TDIvqY7e{iMhE#={_>mZ?dzivKm}}wrkfD`2@lqwL zm%P?aLBBcX8tgbmebPO5YD<>!vx8|+8h>Tbu$P9#tM@BidYly>*GiS9`V_XSbz9bw zP3W2X$^86YH*v_B4@dw|?FzAk+W9R%}` zL&`B&ldPPv*zo>QH}G?vt;wbM?lyuS;L#c4udQ8}^_7miC~iegB`Mve7;(#HQ%CbWbw3#k zj@cGXd`2)ClPY_!E-$^k1C{R|50AY2koc`0@;NE2VBS@vwvjhsQ#_`?c_E}C;17lo zdUMlODr``|l?{&i!>)0J<02HzV4vl&Rcw5+`jyi%X1U#e7{L5dkDSlDDZPzU6|y2o z3>$goc44E$Y|?rZlpI4R70Rg{k;f_O6p1T-*=8XdTSC|{AquvV1-HDe;-sK>_l~vf z@hHDbzLB^y085OYzHWB6eV1;L%J;`KVj!KI9Ziw>_OU8Q?vv)&FXHQchwp%gTM|8K z5sm!Pb%VzO8?ZZgq4@J7tAV_qV8<6T7e)ULWc;i5Wn86<473@|d!CkqPDqc$q9&ZM zR8@B+hwTf@@YyEefZv1Po}ryAPwFcaUK0q&9A1r8BJyKxIy-i?X2_G|4DroSxl z9r-$$@m;|2I_Vkc(iLU4&&9Oq-L{QXBt!busWKjtJ#CxKjUllQ_5!;!xR|&L&Tt!6mOIhI ziLHrh8QPo4nzQJ=gH!t0K3eA^e2shVZQ77{-|iiBOZKR&Svzy%rQwK_)|LBcq`Qi? z=-@LyYMN8xOVQBqn%*Qe(y=y=1mk>yTON!X4_1fQl!MF(N8xLfH6B*;R)R6b`9B zhLu1&B%?~`AtF*Liz&m7iZB(gAIG4MFZ2m*{6o1cXd^H_6)n!B;}paXuS`bD4owu{ z^i91j9`9UQdKxl6u6m%PUNZjCuB05g)8mS^9Cc>A&oU&T6I<-!3Egno!}>sGRu#F~ z9~RZ4xz`~q+UiOpa6ny|6*Adc+a*Ydb{)lKvM|fFTsn3+il9u^!hn6#k#3tYk1!)c zNda=+ik1?KkW>Tu<=dJ&70LQA|hawjXR3$UQ@ z5rIvLVl*a1rrc0rE`ShXcLe?VCKGac6^v z(ZF~9I@{4MNJ-7=DkBZHph4O9fnT@R|G zy@;6m4y%ttA}CCk7m>0Aaai(x+EoucZq2H63bWw0ca{((MJSzQ+6w2|hDU2e2jg_e zZdD`xwjAlnEYpZd3d*?~NzqI*aTIH#}OA>Bw z-a?1}rVzH%u^mS#IprvlX$f03=G#q#>F)_Wa$yiX>rnbRmGx^bR8B|6O7P86PKm$j zX>;6x;m%eflQ9{PxKeXDw{l1uO{cFTI>?Q!Mv~%$=;Ww>BGPmMgU8Lb4WG36w#Y<- z$9Q%ch!IjepbLOXGQ96zDdh~V2;ctsI=m_2@NEM!?MFY~F-~{;SunaRf%No|9)8+9 z%)U09@&kJ9?z)(Lo=CDaC%j~(5|eMY*keTQw(i1;ngryzR}4FelBEbW+Vx$l>uE93 z*Q?LnM(JTWWOVbdw!tv(V4XBCvfq)q&4sCU3u;-;e8b`a$b{y)OQdfUvG$d|52#{~ zaVDjS4Qa;%2nrlfsiapkX=Y`1+zUi5~AqgUJd4GLQOU^B?2 z$crK3WL28yE_VicVE+8HJ_>smyK+sRsh2PGn2ef;VGn&LrD~}jFAIWRHx&AdaZSU^ zJ`P_bjB8`>iLgpN$QC@&2Bi_2q-fa?=qb zQdyDQbSRKFCgpQQ8s?#T1&`}ii#K6eg=~SIV*C;5ZAeeu=hX5M>I)zRQ;I~W<0_TqWgX01zQS|=6u z2jHPeC#>S1O^ zewn+Rg+!UNO*`*_zIa6yvSe=tbkPUU#^e6U)T(xq0s4R39T+tWy z-@xAN90GTYEQ)1Iq8=J+W}K%Pj^+`9h*W%J;|StH=Y4(e_CzeNJ^$|Kfz82+iC3y#7DB>*C?Bh+_s#X<B@Ixp^W- zB6lI%^IZ;rlgfMYF(+|0p<$r&*Vk{_^AT>Yi-d&O;Mny`5_4TiCVT4okr@S^*<;eu z2%K!>43gfM1Se zEn-B8p@Qwj5UXCjCfYf@(Mw(iDoC2Y>$Kws7|&b=6YyNbBD`|i=T^}qf3-r{FbNTP zDX&DInrwKXseG>j$8=lYIr-4lktTGjuK?eFzbS>G1V7%%16FW@*r8WlO!PoTgDvJ~ zigR$~YVX&u9rpcf^>O7z6N4hLaj!Eu@vYMc+!E8*rX)tC(9IO2z!M2VSv6FB9|Wu+ zEdCS(bdh6M-fT~%h1_3Zh7Ys5m_D`~>gEhGilgL#pW^U1lbN*{#2J(l0wStzie5 zb`OG21G7wcI^*+T!$TGK3%2tJW1;nZJX7MCu?9;W5YQ1T@5i{wQpOG?;2FXBu5HT=ptd>xebKb4i%Mx@-f=6QnrhH}VZ zYPiL-imJTtcMK?Xo{zJ1VSv5V&!o_Q1w++bn>_7)9jb(Yln!Dt!b!(F%~&3PjYWnV zc_@SovYN%~+q==(A?h%$UW&bcGoD4Cgt*?5FpRi5a{lG1Buv1wi8NX<=FGSPYG9t4 zx13<+gh*xFq{`G6m>NwMEq!hztO@QXKl8gM9-=M~r!_RR7yNum*sEX`CBwD*wIln? zRU7uZ?0rw+lma}2gifz>|9kdnX$m6pT8+!3luDrKZmP33_7)S6%eSLwf9R^Gge|DE zvH^vyOB+@llx1u#+#FRy@JWUS%UiU54)1xlOz4(BlF(L;x`xLU7Dt#QA{2>~#o@IAe8$e-4k;UpO_{v`) z@Vwy5=Ed?8$>jtf$GU^l*=x-;n*nLyFC+f=pRVvr&OEnGr!78Zb(oSpWB@Eq*4QQ&Q1IqC6Sp_=_iA3gwHZhN2P;+-( z_%XrVP>lJeF`#=I!K z&vIqq5?>j1#n_@{tg=lR(lv9!4=)5Y3mcf&Bd}tz00TF*3PYb z$JO@;V_^mO@az3CGsQ9-xe|A2b=_m&J)K0%Jwbl>W2(Kl^UtGNv7>@>liYJ&8?4;o z)qsW(7ZY09s^&0h3RkK1@cW?0PBQyhT@=r}E!@ue!|Dcw<(p_ULMRfG?zDb!52o6z zbUq}}&A^L|`dfu(BJlBiDq{8?=;u_fe{e4woF-?xABsfvoy9BmA`DH;s;%qNR3T(G z6Y7mdrT~b{P4r);=F%=dsO zqc+^O_zQAkzO=*T{QHnMybs}pb6g`$?ss^yG#GLZeutG~0opReiy6+NBF_%L*$DOV zupj2eotJlj5VB{1u!M$RAC7OOZ1s-mP@~(@1POIpWmw6r2dL9xYvg2hTXsoSEh&s| znpv39k2&7at4TV`rs+EHgN4QX!q68JrNYLe@K_bQuh3#fX6IgM!ri@3MkI)|f> znz1_;H|37!6LHwT_S?C`lp#P@c@2*X@ zKIF4VHJY<_VR8*7S_t-gUmo?0)k7+3wZ(!fz!g;UDcO>8;{`$w#koB{gK~H!3jHWJ z$LXQFo4*JIIOzVAW2j#ODGh`48DWR@7H41w(AqmSg2~R4y*bd)Tei89O0+# zF9Hboe?0$TT9}!Cj!4gC{WxPM2MdJv_t)X0Kr}#g82T>J5|%zMvDz+vXqpe_t1s;) z{8sKH;>M=R4u^^EN7ww)J<3$4eVZae*%73?%7Ou|8w1jET?&O(nY zsH2rt_4PyeQ+VWfXsvfs)0yxAN;gAvOblRSLT2f4+P^NRpMFS9cLmX{P_~n72_+xP z_S~B<>NCXLp)*9OlZF-`%en(|uG}X(eL;<%7{coV^bM*BH+eXT0aE`&bo9B)jK+Vbwx^T(!foW4X@eOE+gydy96*{xMEu!}(*e=G$=tLAX0f)ansK4)&C zlVjQmfz_sFb+^jJK4gePmjoM^#6+eZ?Tm zjjB$SR3=&u4`LC32Yt3gFGMa7{j_EaO4agp32P2J9L5ECss%a($e2gftukB~_9fbU zGO|}n-&nKo$TlBj!2>%$;2tOT1WIhTZUATB5YP`LW{;Tm$qqto;bA|E&xhqW6KDM< z3f!ijh`VysFdNSs^QzU(!nbitR0v2XyPKwi;dd)p8R#CaXK$sAx5 z2w-oPETd0U^|Wks{x+E7=tW6FHI^fG#2R%Zy(Q3=YRv+^zGnfchEhw-#wmf$SQ-UY zqayGATK$ld#1Iqh%9uLG?DvZ-8Ofqi!Bm4G2NWUt5I3SQsqU+hPq-5=eS23rV8JZn zQ~Kxqs$hAcK&XGhL#H|v7MeC#Ix+RV;}hBN0L6gK$>W8%2=axQ8n*bQ!P___PT$UZ z_930DCdG3@IS)sg&1qrxtp6t(vu11VT4)wfYe0XZ>5_UuW7UF}8rYPq^kLQy?_ApN zk#8!x<mF8~_`uh!~3yJ?BD$4Aq zv_X)XC&f$n1;AKB34iRv7;Ka}YLdMZw2aa^H=r~aKBrwm9+Cu4s%Z!+9 zBpffo*z|Iav+}`*w*3oO5@_w&w7+ByMmJA8#^2+_s~r|hHq5}^&+x8%UC47wgO_2- z_7j{{L)!?`Doib27wGD?rl{@QF=~<*IM{_J>T9T~FrKh#JnY3RtnZI!rg@@uq(K}JcZ?$h}yLK~F&+rOeqOI_)@U@5K zWjLe5&k4%WCTYQv)qPwvh*C+PRI)w;a&NgzK&BYcSe!9Fr@7e?>MlK{aP7W(ba|+o zpM}gdByGDrsNaD^@WSUJ-+ko;aJ0%YA}2Y$3Q4JtUIW2Nmg@B7)2v}yRLb~^)?%vw zug+RnHM>}-)d)IaNZ#e8Ynis&e(`C9)A%MJ+-3`VplP^r|^;N&I4Pq)P6h%5SQ_xPsxI=WKcyP82xB zJMBW6ngj6)F7ONxhhfIdP#xT73)nt2`^%27llCWqLRjuy*Pw*P{bjA5wuCZqWH53$ z&9kdP@eW4%9(EEb#GWfdriHK5ibOjw@WBjBt`Oo4OIjP_{wK?gV&D@LC++6&*!+~>NPt^12ewlKf)yY5H_Q`~3>_vsL7H5OxS#^2V0Iz6`y$2F}MiP*Oj zMmopduvC3#w$Fwe{fn9JZmrQ*q)X%$!aN~smtNv*J`B|RO8C4iAMRw4JwAQ7omEsQ zMtC1UC-=kQ(N+6g%xMdq*NCVacqQ3qXtrRwr+9mNsPYfF3+A}UW%?r-kCo@xP~n~e zj2#88?AwWB_+FpF@N#%$ zC_9Zz?AW_LXEmQ55#ylgGz!L@jA^s4!gYW>CKPpjC;K12&o?mm|1tmfcV5bbpWtO# zk?!;4Y--?+4N1LRDXUMJ6^$NLs3}b~&Z)?gNQ*V1+$hBUbz~Y$9I75-hPoKhwR+X* ze1OWjhSm+~z=DhTFZ;dg-%q`T6}jqrcp}>EGoPLxZ zNfDt?gK7@^d4qP1AF|^LaWH5F%XJ%r`l6aK4u7-^V)f|RQjVQ;Hq_?wSy+1=2?t*12E^NEX}@HjDwi^~r;4H1MeWlk zavBXPqT7~@Gfy@>3W>sB8iUo9yIbER_1F1&PlTEByR>&-P^57fph&xDGAhZb350|h z(hUeLXtbd1a0hwp^aoTjy! zt}I4YMd7^|9!+_U#xx@Slsl3AMK|z251-^#du21dxJRE3<(IjJiahIcc5PXRwgB2R zQ(V3c%WX(UnGSgRlK_-8hS;Y7tS!H}>Ua+#c8nx}aoAuD(Cy;TMWnw#yM==WbgpYG z&!#idKbBlANBM${$QR))9E_Holl_Y7dR0=3?Rg{_UYvF8Ci;<=V;@ajtOCkpPQ-(( zB14fa_6jk~+^Q5D;9Z1#hsF-~2i1ltEe2IK;`x+yic(Xtu68Wc4qCr;UF?+cGt@R^Qa|+r2AieExe-6OAeAyi5}Evgrgrp0oonKQYV4y_it`P2 zjgC1WinQ4eoKSiK-Heir4jzX2i4Xn#)=z_^wBp*xO;NSrap9W6s^EB)i@+1bjb*98 zPKUNl!*@}=S%%O+TMN6ZTp#L4WT&`e+dz^;lt21v2R^lWIBQc zx^>b^;~^8Z%c5n6#zM>zv3Dh<3X~(kyvHLsN*?X1C79}h2C(Uog4uCLyJMVyhhMR; zCv>5=GWJu%5@N@1cO8&u9Fz1^ve>n9!^xaF5L4z@tTiUqD<%lZ;mG?_9@+NAiI?PJ zxqu4rjtI0GjJ~I^)*=|S=`7WV3yp=x&N^%29DXqCQT*2DbK_)TzV?4M&CqRC{eLqwH{&zjRd$C`t z_qp6Qwb37~Ozi7AHy{9jX}`Ttg`ebk4?TROR`wKlaRjNCwV;Rnfc=2jg~HG5YAO6d zfO0-BAi(f{!~m869R8gA5c$yh0OY?AC;-|3D*ovF!2Hnhp!dHJ9RSh*uY6QjdA}L} z+%ze|{(a$Y>xFapWrbdVS{&K{uw zEE@p7L|NJZRMoElvNN~hs*2gMx}ceB&Tj`n#0srTANua@>Vl9qP5M1{`QY5+<+GrF+)=Yw{T(l)<>-CL1N?F44b0h-fFO`iS%EOZ?5(udFB-#`~u4 zlKn@h1p`IdHCm%cbttKN4emBS?w*2bKfbb4&vRQu|JjletzD+o$dR1%{8p{76K1n(Ph5NHS$9glGvE2e9h z`xWyb1*@zRV)IAHIZ|+Bfuof|1WZ1$`7J=M%jh!1<;Eaygd*U2rM@KuU;tdq0X^2O zJ>^B++TjB{`bGT>p>g^DPJPBTS{C?Cd~WgldprZ?{Ozgh+rjwLJ)|P{FL{%B#v409 zG78_z^8g!-knZ9 zT3QEzxiE4I5z!JdVa%5MLjcCC^_zAW>hg;|aco=@px&2VSt=>Fy_)ZMh;HI6AaC{H zM|}3;FyXviBB_w?0VW9TX@h~0BiKFMXg!$XQoc8fCR@R!VV}S*Hu|44c^%QCz?|ai zxR+;Ya)uAP6dcPecXjUR@J6BNhjUQ^-iD3YnY@~4P$$5kRb6>ep#`=om-R@5ZA8$n zE;e|GOwSoDRQPkILUvcLJLEJ+CWx0j;(Vifk4b+j~3c^ZrXihN;?_V{p6bF&}n9uRf@K(SIRB z9h=3d`hi63CI`DJv*ZDhk4`zBGFg8@U0YUlD)b^YtJ-Zb{)C84!S@J;ckPI<}b{ngy9(wiNvCYDK`^RL@tA3c4f1948DyIMj_KD zdho7Vv4ZSzf`e3|tWBsgEGRx)rD5D=(p*j`k}5^rDf|Y;f*##B>Je!Y1aA~*UB(Fj zHb-*4>8Lw+Jv6dythLp$R!#!Nb^P%OTcKlYlu#EB!_C?NG+Dv8H!fE@c{9d(&0hAclmX$k`aMAy$IAnn zw3?y4t<-FS<7oZb@VKSq<#Ga6!GgC?ki-M$0Zc6I!Q1d-b;r5-<;a$M!cYOcC}$Sy zrxfXpMf@v7af7!%)AI-D*JZnUIaUiq+f??RvGtanIC?o?GB@4Thx9?kMulTJNU|3_*>;}Ii^9rv?(Wv*2z8sgtvWbn`BJ3Ft}ckM7;r_veBtV zaJby9ggO@1ig5K>e3Ni3m2$FmJ#eq)7~=PcXQs9@XlfPucSg0=9$@-OKkhH zloKaC)>B%KKxeY6Rb-b{8Bm!fnq@a4Zos`MitwpPv=|R#4qS~!_V1H;@METUL!$)RP#Lt91 z9k{P6te;uV=^EjMf@~h;6O&4t&3eyd`_fk@6S-^|Jrh)#)&wG8_5|g2wFNobZ}iZk zRwpEK4^X%AEJla3-l&EsJz@`Dg@mdq zT8Lf4=^``|h~pKkXWr}`2GeVzsjgV_r9!p(*g!%&@U1v2A-zroTQ2>AgRkfcVkg3# z4Yss1qUi?2Yus7Qnt(6y>x#UKo_lxRzvK4Kv^9MMaCr}%4fG{3$g7+LL@^LPlALZ2 z@PAeaY4aTY|#oS~OIXSlOn1=rIQUb=KPcWML+LASxqt#TABhHjPq+SXY2Ge3^WrHzU8i zFapB@-|t6O7X>6@TyS)nm3%Q(%FYL?k4{mu@!i8&dznJo169ta-&Tg`MSdRXXV!oG zF)clfmG4!kP61s*X+-VfK~Z#-Vs6wqYvm)6!^nlMVEYg8Vr0>WT=zL^o{~TZBgjY{ zz19rygq2AiOCrC(+f$peQ15E@g}RjeX=_uYR1_ekcZ%VXRGvDyY3KDVEpig2zq>CU?WcOm0q z=G}5W%U9W-t!iA5`F!aem}713-SO7X0RM>!=!!7mspuuNmLS-YofZ&#){51C9xpSF zfCxXWM2esMA|Ky%)UbcR9r9(Fy4TiUeK(u}!)s6yymR}7@4Tvavo*(tB;v@T2`~Je zXM4?Bk&=D-xKVUq&spqBEPV2J%cy|pP7KrbWz?BTV-S4xbl8~KJ>2kwq}}AW9xnsX zo0ke{h(}syediYnG1gli$~d??5Np!RqT5O2m+716EG_d);E>5$7i&(_SjNcGv$wew z3q#>{RdKPAVka(9cx-zIj6+r|(87uq8qZn7bZ}VjcIgP%)AdM-%P3#>_ti-B%qr6WmHCX%DPKXYC?gaK(k^*bMc>;X z?D)HTg5;zmzUcM1FYKYMQ-{>-E1 zJruLA%YEP&3qo{88ye|iHyD?tQgJ3H;?V&*4()lGbVa{7^xLULi0JGKq3-3wZUwE@ z;dEN}9J=n6H&JDM#1Xkxs4G1W$plI>N+x@r*VGwf_p^a)%}Io=4&-kU?s`ht#Z&FW z>uh%SI>49tn}Io9OTf4n@pJ>zkjj=!Fs6Gk_IQF!e-ECWBARDP6_elO5Lp=|6BG$Q z+74x14T!Ww=H1pe10VAVs(VAa%#B?Z2s2atb9l@p!70Dp>x^*_$INb2x-$9*`91FO zwu1__!oxIUR>^Ppg-?6PG)OW;R#hjrTi~np;$6m-=@wypK zvfwc>?Ik3qK?ZqDd{FN0wq%R}RS&0$m%yI$7l?g)${mEkFc)^AK`htuy_}p!Xt4go zY;JjSZ0Px%&b|bUKInD6s7Cec$===u)L13Sj#({HV~Yc9{7C@XL`+m>cPm1;l`_G6 zIj4y3knhJUFItq8dyh=>+mlk00SrBN;Y(!x{HROy*b9sJ<4x&3BhS~Y%G=kX63=9? zu6A`M8bG7Gj7kE8Lfe$QZrdU(l&*^F=4;2EAj%OFGC&bK1px}Tkl*B0sZinQ<+mlW zNA)q~%<|iLUlIJS#o=_mf|2Yk=bxx!`%1{HsgR0bfaU-5f9^UoyQvJ&!s&*tnRKK#35{gzH+yD}ZMyE2apvJ6R_@Cfilo zG|l6-kQ#Ny+=U?QdjuRH+#Ox`(Ow}X>`@a|7x+PzBtz?NG*Rg?cL`@Wsv}LTW0#NOA>w3@Eb3Q)j+x^^ozsk}>3EN>A6))UG zSCg;C9TV*1PuA8*Sn~95W)i27} z50M|v<$fF07#bGz@I;rn1v^GwiG=fesMZ&X$aR2?+)HM9d91K;iB4n20EvDM-e24D=iQ7g=~IT%CJEPZ(qK$ntS_ow^vxK=CEbD z(rFwdh42%3|0Y71aq57{bP-!aC%pvc!vts-*rzSbzecox4xJW@t0&~9XZ?CgTgdlM z3*J+AdkdOLm|PgfTvDxX2Z`p##uVihHo+VUTfdE47p-ZgYNz+KHb{aK3UA-2ByIRL zSK*QR3sVA+*0G-h25-VqRq<+zKogZK&(R~fBY&&h)3x>AqJ0(N(`OS>-`7?<262D( z5Xzvq{3teNjVL9>+ArHa7R^RjFKNmBrP}o!kwgw3md zdzs7$nzZab%W({0HM_)A7epMiWt+18)7N*sH)zg?&1Z+7 zNUYxoXGDDa(<+=(gLbPf-O8j2c2DVXJ1|Rz&Ut&-nJHhi<}WdV%ai?;vfV4#Jb*WF zx%Im>7&;5T^aw~dk8C`ObL$xU2q(OL_#Efj(gTpOU#e>C) zj6DvpqBV_!)mW2xgoCdA=mHagW9{fauBDNqmWO;_Qb%^01iEKZ^Qs|~(0Z&BA3e0^ zq@23>H%7aGwy(TmTY!HZ+w4F_p-Gz_6$844ZNi?(lT73IRJ+f0x$uU+b>OjS6Y}oZ z%`HjA3MdjDn}2SGmS8x+Bd2kZxUeV?bG^Wz=mdKc*-ZIG<5sVe#7EywgHqa?Q-phS zk@eKQ_;Weoz*sXrXl%cd@0r0Cd3s)(7)KSK2cs?rrwA+_nWC%h8DfK(DJj&(YX~q5!xzW$0d3_x2YMzky!)xfVNQox~|@8 zUzDLE_AcCmAWO3wD7)_|!Aw+0GmAWSLr_KZ`4-oHoDcJCj`kK&ot9ej>s%YXCM`bOXK;znNv?;MX!t zWaE(*oB~rDXxsQL>-B_cwu@o{c8Mo(Qv;Lsoi1~h)(G8ZZ|FJGrq&WsnM2O|Q9s$e zfb%4I&ruI@eccq!Q)?jtp6uC|Kl6}KnxKeXXiMpcQ%Sf?oR_G?)Tj0H*^1quprhiR zqzquuO|oxY>WpM;NGfxnd_lX2O=_Apr#d9K37YkG5OBEV0ztOp7NiD4@Q_cPZ@2mmS(C*qy#?Rp?=g6n*RU zA&eL*O&J-CUxRthf`_tzSHY+UB?J1V5`8LcGIhh!&QmhwIkd#C%nts3j}|*n?+k;< zC*xvMf0^uXx4_@OBf7D3_s6&N-YU8qU~2t?o?s~2PA#Xd1`*g-N(Z%!0;GH$!(E?i zV6=EcXqLqTef|@;aLIgJp0u3Ov4bo!dW8uIo!nl5Wa^qome70L+V;V5W{LUBo%W~J z0Ud8c&~=J5XN19aGaEOyYSTLhuC1iXx&(8;j8}S%r`(k8)IypZB|>>Wt-wDVhHd!k znOizU)&8qesb<>o3h?{^D2Zo9AJn7ArCHBs{S6*+2bG)egYi0?7jBmys_+ejq&W77 zWq86%vl=PN=xkiXZ+1ub=SXNJN66i4B0$U1Z8-6SokNqvPk%&(F`7Es`FP%Vc3J** z=@b_kX@55|NH@q2`b!lWNjrAH*_pK8TRYXw>8k4EKNZ!*qpFhHJCRt0R>CP`;n9gK zEHFh8UaH>D%a@c_{37zTbr<{Q4wjZ`$*ZPoEkPLR+G7K)iodGWFg9!^IqQ|D&DJt4 zq?RT!*&6}2)%z-6+ohaZa_Xh%zn-7OxSPojs0h_I-D$qv$~{plNjxOlqHTPxDl(e_ z80fWJCaFLGn9L~hyr*r$fX8fm??E^3zTglY223u9eN|tfC|u zg9tR{add27XCL1PBPu)@^O_atc-OL#*s}IL@spU>oG{7E>9_0;YFWeFLA`5-y9fOk zjVD%gPf}%tgX>go?TGRB*JlDqMy9DX%RjF1t`1hH>xiI|WACR~ddv64<97=609X4x zjVB$$v8W9`WvmKva;Y--qnclmO0t97Q7@$;$$qIucKb!jz&Uf=f7E%kSFmrcr{d~8 z5}lgULgj{rT)aV`22HQ_aTOdE%;Fy6U;wWG?{Bx0{&DneN&r1XW1HF?&+r{MQ z<@@+^NBeMO0Tccz@pCR7Y0siSdq{7|8;i0|8@0Dyok=|2?lo+`zGM~?6~~3=!L?IL z^~*dJ)~+Qig(Ui8BWzK)&LNFmzQyZ^A!4F|M~+iN4HfmInl~yK8rk*PtzzZ!lBV5F z3EbpHlCz0<vx)DpT3+Y90LUM`BnzF*!@O~hc!3Jm6i*+sWAbI-hw4$Ix?E6~?`?;{tW#u~6;--p z0Y}DhiO*K@YUq0EFTqt5G|=~Q3oq&eTt-f!S|DMsY<0zUU)#aMq;!&3Le$Uvi1*g{ z7x1bqw)z6Ob<@FTx1~nT-mOFfX193hEr^N|Oq;vt>|9 z*;U0Kv63p5j%{*vitEld=DP#>8QgrrS&Q{$u*Gh!4JRN=N*@c~S~bN`xJcg8zGN^_ z?bo+vq=W;|XN*ojq`>t>%)n-jAp?U&jonLwRQ2tI{@zny)zM6>;Vn}aNa`!yKYN#w zu+d8BIbT_#`~1+(Gj~1Tm*#x$6`XWrE->se=IgiV!Hspx`Cn`E$YT*mBkK&XoF_ zjd%pGog;(H9woDUpx0hRYc=JmNmL|V4~ug~)Pq1bwNcB{v3|*{D`#Z7l0F~@Pp)M0_SuHt z4kwJYv%!nfiU1A~eYm-}`t3R2j!>KebUr~M^pCP2w(^Z^H{8^Z;wFWfy?s@ibkl*9 ze>1(8Vz@rRLXk4jUMB^7;-DHDN?GF@x)S!sf3*6e0a~o}G9RpBpKaU`XPiql#6Ge<|=d)C8j_zHfy_?z9&EK;}mqPr*Q+>W`wvblAYc1$Q9ErygBQFWUY|^7gguD zKp3G;W6oJJH1Kyv!bj)?yTqNxtg7OMyBE*_dM_hDv2`;PTrA`Kwe9gqK8;TY{J>)) z>?Eib6ij~rT;xKjB?X*he>K&2!4heWc*3dJ+_DCvZ2`cj+ttc^Cnq&>L|HB&H;q>= z;xZ%Ev=A3BCz5S~n3K?p)3vb25pUj`_+K~D+R7E89SYPD2{R1_UDWqA{aw(IO*R?7 z3XZ8xvAw3*=3>4*BdHQgoV;$ZZHA!$;H~5i<2ZrSeFA9kJ!fp-`T5@*GsAy$9cp(f zO{2^&ckW0uOv=rGmNuL9M&^?r{CwGU^uc~tH`lqyT?JOwqIhSKv%q8RGE}3V2POM+ zHEI!*#D({fH7jwQbbrR2j0mT&mSo8+kHtir>qiV|r6%Cul`=DlQ!~fYdz&PG@o~Ae z$(y3Nol6c8D=8g!shhlIv7{e)=B-X7n1#uUZMB}~g|c^%v>9I(uZmjN81$R!YqM8t zpz1;`00rL;Prx6^brLLoBd{6M*E4(i5ekl({OLwXuI`Rgni~#&* zA$A-;IJfzUMhfz~dIMI6V}Gd>;99b5!)EJy%Vf6Ah7F|Y+C{a*Hwb=ibhD)=pF zu{F|Yj#Te+E1y^}n=!t9037lj1~z|=x|}U@%P2S~O9Fv$^>ECvw`aOut!&q;vUz=$ zRQRgdEOq(A-mgtuYB2}TF>hxj&_$RA9#O4*X6_e8uI~m07+=~>LB!6t1%mrmtO;y< zlYgHfTndjl<4yco5Wh8ovZOeiDCSiQJwfvQl3asq6s*qF+s<@S;DR}!Oe5}!@8Sw^O+kCtr%_*iaqTQJqw4RY9G3#_VVr^{T%7<#m!HS#k-C6AvTs6^ z*@I?2iQ8*|+aARB^Qm3-U#Lc@Pm3*Bu)8%9*qOI0ln-gaVP==3klb^r-F~%~2bLR&o`V z4?2p=h+^9=Sswj=4VJ3;$n~f9%G_^qr2@7|f#lgxMnc0Jl0ux{D##Dew-j^AVq}Q^b@ldv)JPX6Pv? z4!yJ^qmO=uuMTOEM8u;QaWBc&uRXhHlpC)w~ zFkyi~h7{+Rb)@dcOq1bck5dr4zL8n?b=6fy)1-_QwXwjlVvF|69_14BPDAqWL-Jjc z2c3n-?9a~fj8J~U^CWC5w(8Xzy4rnH;ucA%k%ed?wi9Joi28W>J{)ZJV$hr29^SU+ ztj?#A%OQr66^!(*P1V5Yuh(5jS`OP`@P1-_+L4@G)vG3+uoe!Husu_h=afo|d5RzD zsvmU~72X)9t-PJ0Sed-DOq~1o@5_X{1YnhVW1mDl2ac4jRO1f<{3F0qbJ$wLKhp!hnKJ)po(}_EwSZo&BS}^*_?ybai02OJax-&)N#*n!NZa4BiAGx~o_~VsC zR;qbGWh3X{M$PSqdfs&Sn7;jB{uhW#FyB!%7kdkM*bT=O*L-f)h)fdeemDE`WOP#$ zv`XUJt|kLWr^|8+IZ>(MWjB-wizSU?YM---gE#QZ2+<)fYA?y?8bkCqyY2zm8^n zo^oa#ynZLVQJ}klMUFiF-yaQ2(e(hC$3DNszQ+Rp_p|@Y<}Y#q@@S&cDf*EK&ZGYU Df3xhw diff --git a/tests/crypto_test.py b/tests/crypto_test.py index b33349a86..e7e052f43 100644 --- a/tests/crypto_test.py +++ b/tests/crypto_test.py @@ -1747,6 +1747,7 @@ def test_bitlk_info(self): self.assertEqual(info.cipher, "aes") self.assertEqual(info.mode, "xts-plain64") self.assertEqual(info.sector_size, 512) + self.assertFalse(info.has_clearkey) ctx = BlockDev.CryptoKeyslotContext(passphrase=self.passphrase) succ = BlockDev.crypto_bitlk_open(self.bitlk_dev, "libblockdevTestBitlk", ctx) @@ -1770,6 +1771,35 @@ def test_bitlk_info(self): self.assertTrue(succ) self.assertFalse(os.path.exists("/dev/mapper/libblockdevTestBitlk")) + @unittest.skipUnless(HAVE_BITLK, "BITLK not supported") + def test_bitlk_clearkey(self): + """Verify that opening/closing a BitLocker device with Clear Key works""" + clearkey_img = "bitlk-aes-xts-128-clearkey-only.img" + succ, loop = BlockDev.loop_setup(os.path.join(self.tempdir, clearkey_img)) + if not succ: + raise RuntimeError("Failed to setup loop device for testing") + dev = "/dev/%s" % loop + try: + info = BlockDev.crypto_bitlk_info(dev) + self.assertIsNotNone(info) + self.assertTrue(info.has_clearkey) + self.assertEqual(info.uuid, "df73cb51-ff48-4033-8d56-a32cc2b1ab7a") + + # Open with NULL context (Clear Key) + succ = BlockDev.crypto_bitlk_open(dev, "libblockdevTestBitlkCK", None) + self.assertTrue(succ) + self.assertTrue(os.path.exists("/dev/mapper/libblockdevTestBitlkCK")) + + succ = BlockDev.crypto_bitlk_close("libblockdevTestBitlkCK") + self.assertTrue(succ) + self.assertFalse(os.path.exists("/dev/mapper/libblockdevTestBitlkCK")) + finally: + try: + BlockDev.crypto_bitlk_close("libblockdevTestBitlkCK") + except: + pass + BlockDev.loop_teardown(dev) + class CryptoTestFVAULT2(CryptoTestCase):